diff --git a/db/wordpress.sql b/db/wordpress.sql new file mode 100644 index 0000000..a237521 --- /dev/null +++ b/db/wordpress.sql @@ -0,0 +1,20714 @@ +-- phpMyAdmin SQL Dump +-- version 3.3.3 +-- http://www.phpmyadmin.net +-- +-- Servidor: localhost +-- Tiempo de generación: 28-02-2014 a las 19:05:03 +-- Versión del servidor: 5.1.46 +-- Versión de PHP: 5.3.2 + +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; + +-- +-- Base de datos: `wordpress` +-- + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_commentmeta` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_commentmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `comment_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext, + PRIMARY KEY (`meta_id`), + KEY `comment_id` (`comment_id`), + KEY `meta_key` (`meta_key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_commentmeta` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_comments` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_comments` ( + `comment_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `comment_post_ID` bigint(20) unsigned NOT NULL DEFAULT '0', + `comment_author` tinytext NOT NULL, + `comment_author_email` varchar(100) NOT NULL DEFAULT '', + `comment_author_url` varchar(200) NOT NULL DEFAULT '', + `comment_author_IP` varchar(100) NOT NULL DEFAULT '', + `comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `comment_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `comment_content` text NOT NULL, + `comment_karma` int(11) NOT NULL DEFAULT '0', + `comment_approved` varchar(20) NOT NULL DEFAULT '1', + `comment_agent` varchar(255) NOT NULL DEFAULT '', + `comment_type` varchar(20) NOT NULL DEFAULT '', + `comment_parent` bigint(20) unsigned NOT NULL DEFAULT '0', + `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`comment_ID`), + KEY `comment_post_ID` (`comment_post_ID`), + KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`), + KEY `comment_date_gmt` (`comment_date_gmt`), + KEY `comment_parent` (`comment_parent`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_comments` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_cms_nav_cache` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_cms_nav_cache` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `cache_key` varchar(128) NOT NULL, + `type` varchar(128) NOT NULL, + `data` text NOT NULL, + `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_cms_nav_cache` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_content_status` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_content_status` ( + `rid` bigint(20) NOT NULL, + `nid` bigint(20) NOT NULL, + `timestamp` datetime NOT NULL, + `md5` varchar(32) NOT NULL, + PRIMARY KEY (`rid`), + KEY `nid` (`nid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_content_status` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_core_status` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_core_status` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `rid` bigint(20) NOT NULL, + `module` varchar(16) NOT NULL, + `origin` varchar(64) NOT NULL, + `target` varchar(64) NOT NULL, + `status` smallint(6) NOT NULL, + PRIMARY KEY (`id`), + KEY `rid` (`rid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_core_status` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_flags` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_flags` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `lang_code` varchar(10) NOT NULL, + `flag` varchar(32) NOT NULL, + `from_template` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `lang_code` (`lang_code`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=65 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_flags` +-- + +INSERT INTO `drgrp_icl_flags` (`id`, `lang_code`, `flag`, `from_template`) VALUES +(1, 'ar', 'ar.png', 0), +(2, 'bg', 'bg.png', 0), +(3, 'bs', 'bs.png', 0), +(4, 'ca', 'ca.png', 0), +(5, 'cs', 'cs.png', 0), +(6, 'cy', 'cy.png', 0), +(7, 'da', 'da.png', 0), +(8, 'de', 'de.png', 0), +(9, 'el', 'el.png', 0), +(10, 'en', 'en.png', 0), +(11, 'eo', 'eo.png', 0), +(12, 'es', 'es.png', 0), +(13, 'et', 'et.png', 0), +(14, 'eu', 'eu.png', 0), +(15, 'fa', 'fa.png', 0), +(16, 'fi', 'fi.png', 0), +(17, 'fr', 'fr.png', 0), +(18, 'ga', 'ga.png', 0), +(19, 'he', 'he.png', 0), +(20, 'hi', 'hi.png', 0), +(21, 'hr', 'hr.png', 0), +(22, 'hu', 'hu.png', 0), +(23, 'hy', 'hy.png', 0), +(24, 'id', 'id.png', 0), +(25, 'is', 'is.png', 0), +(26, 'it', 'it.png', 0), +(27, 'ja', 'ja.png', 0), +(28, 'ko', 'ko.png', 0), +(29, 'ku', 'ku.png', 0), +(30, 'la', 'la.png', 0), +(31, 'lt', 'lt.png', 0), +(32, 'lv', 'lv.png', 0), +(33, 'mk', 'mk.png', 0), +(34, 'mn', 'mn.png', 0), +(35, 'mo', 'mo.png', 0), +(36, 'ms', 'ms.png', 0), +(37, 'mt', 'mt.png', 0), +(38, 'nb', 'nb.png', 0), +(39, 'ne', 'ne.png', 0), +(40, 'nl', 'nl.png', 0), +(41, 'pa', 'pa.png', 0), +(42, 'pl', 'pl.png', 0), +(43, 'pt-br', 'pt-br.png', 0), +(44, 'pt-pt', 'pt-pt.png', 0), +(45, 'qu', 'qu.png', 0), +(46, 'ro', 'ro.png', 0), +(47, 'ru', 'ru.png', 0), +(48, 'sk', 'sk.png', 0), +(49, 'sl', 'sl.png', 0), +(50, 'so', 'so.png', 0), +(51, 'sq', 'sq.png', 0), +(52, 'sr', 'sr.png', 0), +(53, 'sv', 'sv.png', 0), +(54, 'ta', 'ta.png', 0), +(55, 'th', 'th.png', 0), +(56, 'tr', 'tr.png', 0), +(57, 'uk', 'uk.png', 0), +(58, 'ur', 'ur.png', 0), +(59, 'uz', 'uz.png', 0), +(60, 'vi', 'vi.png', 0), +(61, 'yi', 'yi.png', 0), +(62, 'zh-hans', 'zh-hans.png', 0), +(63, 'zh-hant', 'zh-hant.png', 0), +(64, 'zu', 'zu.png', 0); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_languages` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_languages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(7) NOT NULL, + `english_name` varchar(128) NOT NULL, + `major` tinyint(4) NOT NULL DEFAULT '0', + `active` tinyint(4) NOT NULL, + `default_locale` varchar(8) DEFAULT NULL, + `tag` varchar(8) DEFAULT NULL, + `encode_url` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + UNIQUE KEY `english_name` (`english_name`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=65 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_languages` +-- + +INSERT INTO `drgrp_icl_languages` (`id`, `code`, `english_name`, `major`, `active`, `default_locale`, `tag`, `encode_url`) VALUES +(1, 'en', 'English', 1, 1, 'en_US', 'en-US', 0), +(2, 'es', 'Spanish', 1, 1, 'es_ES', 'es-ES', 0), +(3, 'de', 'German', 1, 0, 'de_DE', 'de-DE', 0), +(4, 'fr', 'French', 1, 0, 'fr_FR', 'fr-FR', 0), +(5, 'ar', 'Arabic', 0, 0, 'ar', 'ar', 0), +(6, 'bs', 'Bosnian', 0, 0, '', '', 0), +(7, 'bg', 'Bulgarian', 0, 0, 'bg_BG', 'bg-BG', 0), +(8, 'ca', 'Catalan', 0, 0, 'ca', 'ca', 0), +(9, 'cs', 'Czech', 0, 0, 'cs_CZ', 'cs-CZ', 0), +(10, 'sk', 'Slovak', 0, 0, 'sk_SK', 'sk-SK', 0), +(11, 'cy', 'Welsh', 0, 0, 'cy', 'cy', 0), +(12, 'da', 'Danish', 1, 0, 'da_DK', 'da-DK', 0), +(13, 'el', 'Greek', 0, 0, 'el', 'el', 0), +(14, 'eo', 'Esperanto', 0, 0, 'eo', 'eo', 0), +(15, 'et', 'Estonian', 0, 0, 'et', 'et', 0), +(16, 'eu', 'Basque', 0, 0, 'eu', 'eu', 0), +(17, 'fa', 'Persian', 0, 0, 'fa_IR', 'fa-IR', 0), +(18, 'fi', 'Finnish', 0, 0, 'fi', 'fi', 0), +(19, 'ga', 'Irish', 0, 0, '', '', 0), +(20, 'he', 'Hebrew', 0, 0, 'he_IL', 'he-IL', 0), +(21, 'hi', 'Hindi', 0, 0, '', '', 0), +(22, 'hr', 'Croatian', 0, 0, 'hr', 'hr', 0), +(23, 'hu', 'Hungarian', 0, 0, 'hu_HU', 'hu-HU', 0), +(24, 'hy', 'Armenian', 0, 0, '', '', 0), +(25, 'id', 'Indonesian', 0, 0, 'id_ID', 'id-ID', 0), +(26, 'is', 'Icelandic', 0, 0, 'is_IS', 'is-IS', 0), +(27, 'it', 'Italian', 1, 0, 'it_IT', 'it-IT', 0), +(28, 'ja', 'Japanese', 1, 0, 'ja', 'ja', 0), +(29, 'ko', 'Korean', 0, 0, 'ko_KR', 'ko-KR', 0), +(30, 'ku', 'Kurdish', 0, 0, 'ku', 'ku', 0), +(31, 'la', 'Latin', 0, 0, '', '', 0), +(32, 'lv', 'Latvian', 0, 0, 'lv', 'lv', 0), +(33, 'lt', 'Lithuanian', 0, 0, 'lt', 'lt', 0), +(34, 'mk', 'Macedonian', 0, 0, 'mk_MK', 'mk-MK', 0), +(35, 'mt', 'Maltese', 0, 0, '', '', 0), +(36, 'mo', 'Moldavian', 0, 0, '', '', 0), +(37, 'mn', 'Mongolian', 0, 0, '', '', 0), +(38, 'ne', 'Nepali', 0, 0, '', '', 0), +(39, 'nl', 'Dutch', 1, 0, 'nl_NL', 'nl-NL', 0), +(40, 'nb', 'Norwegian Bokmål', 0, 0, 'nb_NO', 'nb-NO', 0), +(41, 'pa', 'Punjabi', 0, 0, '', '', 0), +(42, 'pl', 'Polish', 0, 0, 'pl_PL', 'pl-PL', 0), +(43, 'pt-pt', 'Portuguese, Portugal', 0, 0, 'pt_PT', 'pt-PT', 0), +(44, 'pt-br', 'Portuguese, Brazil', 0, 0, 'pt_BR', 'pt-BR', 0), +(45, 'qu', 'Quechua', 0, 0, '', '', 0), +(46, 'ro', 'Romanian', 0, 0, 'ro_RO', 'ro-RO', 0), +(47, 'ru', 'Russian', 1, 0, 'ru_RU', 'ru-RU', 0), +(48, 'sl', 'Slovenian', 0, 0, 'sl_SI', 'sl-SI', 0), +(49, 'so', 'Somali', 0, 0, '', '', 0), +(50, 'sq', 'Albanian', 0, 0, '', '', 0), +(51, 'sr', 'Serbian', 0, 0, 'sr_RS', 'sr-RS', 0), +(52, 'sv', 'Swedish', 0, 0, 'sv_SE', 'sv-SE', 0), +(53, 'ta', 'Tamil', 0, 0, '', '', 0), +(54, 'th', 'Thai', 0, 0, 'th', 'th', 0), +(55, 'tr', 'Turkish', 0, 0, 'tr', 'tr', 0), +(56, 'uk', 'Ukrainian', 0, 0, 'uk_UA', 'uk-UA', 0), +(57, 'ur', 'Urdu', 0, 0, '', '', 0), +(58, 'uz', 'Uzbek', 0, 0, 'uz_UZ', 'uz-UZ', 0), +(59, 'vi', 'Vietnamese', 0, 0, 'vi', 'vi', 0), +(60, 'yi', 'Yiddish', 0, 0, '', '', 0), +(61, 'zh-hans', 'Chinese (Simplified)', 1, 0, 'zh_CN', 'zh-CN', 0), +(62, 'zu', 'Zulu', 0, 0, '', '', 0), +(63, 'zh-hant', 'Chinese (Traditional)', 1, 0, 'zh_TW', 'zh-TW', 0), +(64, 'ms', 'Malay', 0, 0, 'ms_MY', 'ms-MY', 0); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_languages_translations` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_languages_translations` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `language_code` varchar(7) NOT NULL, + `display_language_code` varchar(7) NOT NULL, + `name` varchar(255) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `language_code` (`language_code`,`display_language_code`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4097 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_languages_translations` +-- + +INSERT INTO `drgrp_icl_languages_translations` (`id`, `language_code`, `display_language_code`, `name`) VALUES +(1, 'en', 'en', 'English'), +(2, 'en', 'es', 'Inglés'), +(3, 'en', 'de', 'Englisch'), +(4, 'en', 'fr', 'Anglais'), +(5, 'en', 'ar', 'الإنجليزية'), +(6, 'en', 'bs', 'English'), +(7, 'en', 'bg', 'English'), +(8, 'en', 'ca', 'English'), +(9, 'en', 'cs', 'English'), +(10, 'en', 'sk', 'Angličtina'), +(11, 'en', 'cy', 'English'), +(12, 'en', 'da', 'English'), +(13, 'en', 'el', 'Αγγλικα'), +(14, 'en', 'eo', 'English'), +(15, 'en', 'et', 'English'), +(16, 'en', 'eu', 'English'), +(17, 'en', 'fa', 'English'), +(18, 'en', 'fi', 'englanti'), +(19, 'en', 'ga', 'English'), +(20, 'en', 'he', 'אנגלית'), +(21, 'en', 'hi', 'English'), +(22, 'en', 'hr', 'English'), +(23, 'en', 'hu', 'angol'), +(24, 'en', 'hy', 'English'), +(25, 'en', 'id', 'English'), +(26, 'en', 'is', 'English'), +(27, 'en', 'it', 'Inglese'), +(28, 'en', 'ja', '英語'), +(29, 'en', 'ko', '영어'), +(30, 'en', 'ku', 'English'), +(31, 'en', 'la', 'English'), +(32, 'en', 'lv', 'English'), +(33, 'en', 'lt', 'English'), +(34, 'en', 'mk', 'English'), +(35, 'en', 'mt', 'English'), +(36, 'en', 'mo', 'English'), +(37, 'en', 'mn', 'English'), +(38, 'en', 'ne', 'English'), +(39, 'en', 'nl', 'Engels'), +(40, 'en', 'nb', 'English'), +(41, 'en', 'pa', 'English'), +(42, 'en', 'pl', 'angielski'), +(43, 'en', 'pt-pt', 'Inglês'), +(44, 'en', 'pt-br', 'Inglês'), +(45, 'en', 'qu', 'English'), +(46, 'en', 'ro', 'Engleză'), +(47, 'en', 'ru', 'Английский'), +(48, 'en', 'sl', 'English'), +(49, 'en', 'so', 'English'), +(50, 'en', 'sq', 'English'), +(51, 'en', 'sr', 'English'), +(52, 'en', 'sv', 'Engelska'), +(53, 'en', 'ta', 'English'), +(54, 'en', 'th', 'อังกฤษ'), +(55, 'en', 'tr', 'İngilizce'), +(56, 'en', 'uk', 'English'), +(57, 'en', 'ur', 'English'), +(58, 'en', 'uz', 'English'), +(59, 'en', 'vi', 'English'), +(60, 'en', 'yi', 'English'), +(61, 'en', 'zh-hans', '英语'), +(62, 'en', 'zu', 'English'), +(63, 'en', 'zh-hant', '英語'), +(64, 'en', 'ms', 'English'), +(65, 'es', 'en', 'Spanish'), +(66, 'es', 'es', 'Español'), +(67, 'es', 'de', 'Spanisch'), +(68, 'es', 'fr', 'Espagnol'), +(69, 'es', 'ar', 'الأسبانية'), +(70, 'es', 'bs', 'Spanish'), +(71, 'es', 'bg', 'Spanish'), +(72, 'es', 'ca', 'Spanish'), +(73, 'es', 'cs', 'Spanish'), +(74, 'es', 'sk', 'Španielčina'), +(75, 'es', 'cy', 'Spanish'), +(76, 'es', 'da', 'Spanish'), +(77, 'es', 'el', 'Ισπανικα'), +(78, 'es', 'eo', 'Spanish'), +(79, 'es', 'et', 'Spanish'), +(80, 'es', 'eu', 'Spanish'), +(81, 'es', 'fa', 'Spanish'), +(82, 'es', 'fi', 'espanja'), +(83, 'es', 'ga', 'Spanish'), +(84, 'es', 'he', 'ספרדית'), +(85, 'es', 'hi', 'Spanish'), +(86, 'es', 'hr', 'Spanish'), +(87, 'es', 'hu', 'spanyol'), +(88, 'es', 'hy', 'Spanish'), +(89, 'es', 'id', 'Spanish'), +(90, 'es', 'is', 'Spanish'), +(91, 'es', 'it', 'Spagnolo'), +(92, 'es', 'ja', 'スペイン語'), +(93, 'es', 'ko', '스페인어'), +(94, 'es', 'ku', 'Spanish'), +(95, 'es', 'la', 'Spanish'), +(96, 'es', 'lv', 'Spanish'), +(97, 'es', 'lt', 'Spanish'), +(98, 'es', 'mk', 'Spanish'), +(99, 'es', 'mt', 'Spanish'), +(100, 'es', 'mo', 'Spanish'), +(101, 'es', 'mn', 'Spanish'), +(102, 'es', 'ne', 'Spanish'), +(103, 'es', 'nl', 'Spaans'), +(104, 'es', 'nb', 'Spanish'), +(105, 'es', 'pa', 'Spanish'), +(106, 'es', 'pl', 'hiszpański'), +(107, 'es', 'pt-pt', 'Espanhol'), +(108, 'es', 'pt-br', 'Espanhol'), +(109, 'es', 'qu', 'Spanish'), +(110, 'es', 'ro', 'Spaniolă'), +(111, 'es', 'ru', 'Испанский'), +(112, 'es', 'sl', 'Spanish'), +(113, 'es', 'so', 'Spanish'), +(114, 'es', 'sq', 'Spanish'), +(115, 'es', 'sr', 'Spanish'), +(116, 'es', 'sv', 'Spanska'), +(117, 'es', 'ta', 'Spanish'), +(118, 'es', 'th', 'สเปน'), +(119, 'es', 'tr', 'İspanyolca'), +(120, 'es', 'uk', 'Spanish'), +(121, 'es', 'ur', 'Spanish'), +(122, 'es', 'uz', 'Spanish'), +(123, 'es', 'vi', 'Spanish'), +(124, 'es', 'yi', 'Spanish'), +(125, 'es', 'zh-hans', '西班牙语'), +(126, 'es', 'zu', 'Spanish'), +(127, 'es', 'zh-hant', '西班牙語'), +(128, 'es', 'ms', 'Spanish'), +(129, 'de', 'en', 'German'), +(130, 'de', 'es', 'Alemán'), +(131, 'de', 'de', 'Deutsch'), +(132, 'de', 'fr', 'Allemand'), +(133, 'de', 'ar', 'الألمانية'), +(134, 'de', 'bs', 'German'), +(135, 'de', 'bg', 'German'), +(136, 'de', 'ca', 'German'), +(137, 'de', 'cs', 'German'), +(138, 'de', 'sk', 'Nemčina'), +(139, 'de', 'cy', 'German'), +(140, 'de', 'da', 'German'), +(141, 'de', 'el', 'Γερμανικα'), +(142, 'de', 'eo', 'German'), +(143, 'de', 'et', 'German'), +(144, 'de', 'eu', 'German'), +(145, 'de', 'fa', 'German'), +(146, 'de', 'fi', 'saksa'), +(147, 'de', 'ga', 'German'), +(148, 'de', 'he', 'גרמנית'), +(149, 'de', 'hi', 'German'), +(150, 'de', 'hr', 'German'), +(151, 'de', 'hu', 'német'), +(152, 'de', 'hy', 'German'), +(153, 'de', 'id', 'German'), +(154, 'de', 'is', 'German'), +(155, 'de', 'it', 'Tedesco'), +(156, 'de', 'ja', 'ドイツ語'), +(157, 'de', 'ko', '독어'), +(158, 'de', 'ku', 'German'), +(159, 'de', 'la', 'German'), +(160, 'de', 'lv', 'German'), +(161, 'de', 'lt', 'German'), +(162, 'de', 'mk', 'German'), +(163, 'de', 'mt', 'German'), +(164, 'de', 'mo', 'German'), +(165, 'de', 'mn', 'German'), +(166, 'de', 'ne', 'German'), +(167, 'de', 'nl', 'Duits'), +(168, 'de', 'nb', 'German'), +(169, 'de', 'pa', 'German'), +(170, 'de', 'pl', 'niemiecki'), +(171, 'de', 'pt-pt', 'Alemão'), +(172, 'de', 'pt-br', 'Alemão'), +(173, 'de', 'qu', 'German'), +(174, 'de', 'ro', 'Germană'), +(175, 'de', 'ru', 'Немецкий'), +(176, 'de', 'sl', 'German'), +(177, 'de', 'so', 'German'), +(178, 'de', 'sq', 'German'), +(179, 'de', 'sr', 'German'), +(180, 'de', 'sv', 'Tyska'), +(181, 'de', 'ta', 'German'), +(182, 'de', 'th', 'เยอรมัน'), +(183, 'de', 'tr', 'Almanca'), +(184, 'de', 'uk', 'German'), +(185, 'de', 'ur', 'German'), +(186, 'de', 'uz', 'German'), +(187, 'de', 'vi', 'German'), +(188, 'de', 'yi', 'German'), +(189, 'de', 'zh-hans', '德语'), +(190, 'de', 'zu', 'German'), +(191, 'de', 'zh-hant', '德語'), +(192, 'de', 'ms', 'German'), +(193, 'fr', 'en', 'French'), +(194, 'fr', 'es', 'Francés'), +(195, 'fr', 'de', 'Französisch'), +(196, 'fr', 'fr', 'Français'), +(197, 'fr', 'ar', 'الفرنسية'), +(198, 'fr', 'bs', 'French'), +(199, 'fr', 'bg', 'French'), +(200, 'fr', 'ca', 'French'), +(201, 'fr', 'cs', 'French'), +(202, 'fr', 'sk', 'Francúzština'), +(203, 'fr', 'cy', 'French'), +(204, 'fr', 'da', 'French'), +(205, 'fr', 'el', 'Γαλλικα'), +(206, 'fr', 'eo', 'French'), +(207, 'fr', 'et', 'French'), +(208, 'fr', 'eu', 'French'), +(209, 'fr', 'fa', 'French'), +(210, 'fr', 'fi', 'ranska'), +(211, 'fr', 'ga', 'French'), +(212, 'fr', 'he', 'צרפתית'), +(213, 'fr', 'hi', 'French'), +(214, 'fr', 'hr', 'French'), +(215, 'fr', 'hu', 'francia'), +(216, 'fr', 'hy', 'French'), +(217, 'fr', 'id', 'French'), +(218, 'fr', 'is', 'French'), +(219, 'fr', 'it', 'Francese'), +(220, 'fr', 'ja', 'フランス語'), +(221, 'fr', 'ko', '불어'), +(222, 'fr', 'ku', 'French'), +(223, 'fr', 'la', 'French'), +(224, 'fr', 'lv', 'French'), +(225, 'fr', 'lt', 'French'), +(226, 'fr', 'mk', 'French'), +(227, 'fr', 'mt', 'French'), +(228, 'fr', 'mo', 'French'), +(229, 'fr', 'mn', 'French'), +(230, 'fr', 'ne', 'French'), +(231, 'fr', 'nl', 'Frans'), +(232, 'fr', 'nb', 'French'), +(233, 'fr', 'pa', 'French'), +(234, 'fr', 'pl', 'francuski'), +(235, 'fr', 'pt-pt', 'Francês'), +(236, 'fr', 'pt-br', 'Francês'), +(237, 'fr', 'qu', 'French'), +(238, 'fr', 'ro', 'Franceză'), +(239, 'fr', 'ru', 'Французский'), +(240, 'fr', 'sl', 'French'), +(241, 'fr', 'so', 'French'), +(242, 'fr', 'sq', 'French'), +(243, 'fr', 'sr', 'French'), +(244, 'fr', 'sv', 'Franska'), +(245, 'fr', 'ta', 'French'), +(246, 'fr', 'th', 'ฝรั่งเศส'), +(247, 'fr', 'tr', 'Fransızca'), +(248, 'fr', 'uk', 'French'), +(249, 'fr', 'ur', 'French'), +(250, 'fr', 'uz', 'French'), +(251, 'fr', 'vi', 'French'), +(252, 'fr', 'yi', 'French'), +(253, 'fr', 'zh-hans', '法语'), +(254, 'fr', 'zu', 'French'), +(255, 'fr', 'zh-hant', '法語'), +(256, 'fr', 'ms', 'French'), +(257, 'ar', 'en', 'Arabic'), +(258, 'ar', 'es', 'Árabe'), +(259, 'ar', 'de', 'Arabisch'), +(260, 'ar', 'fr', 'Arabe'), +(261, 'ar', 'ar', 'العربية'), +(262, 'ar', 'bs', 'Arabic'), +(263, 'ar', 'bg', 'Arabic'), +(264, 'ar', 'ca', 'Arabic'), +(265, 'ar', 'cs', 'Arabic'), +(266, 'ar', 'sk', 'Arabčina'), +(267, 'ar', 'cy', 'Arabic'), +(268, 'ar', 'da', 'Arabic'), +(269, 'ar', 'el', 'Αραβικα'), +(270, 'ar', 'eo', 'Arabic'), +(271, 'ar', 'et', 'Arabic'), +(272, 'ar', 'eu', 'Arabic'), +(273, 'ar', 'fa', 'Arabic'), +(274, 'ar', 'fi', 'arabia'), +(275, 'ar', 'ga', 'Arabic'), +(276, 'ar', 'he', 'ערבית'), +(277, 'ar', 'hi', 'Arabic'), +(278, 'ar', 'hr', 'Arabic'), +(279, 'ar', 'hu', 'arab'), +(280, 'ar', 'hy', 'Arabic'), +(281, 'ar', 'id', 'Arabic'), +(282, 'ar', 'is', 'Arabic'), +(283, 'ar', 'it', 'Arabo'), +(284, 'ar', 'ja', 'アラビア語'), +(285, 'ar', 'ko', '아랍어'), +(286, 'ar', 'ku', 'Arabic'), +(287, 'ar', 'la', 'Arabic'), +(288, 'ar', 'lv', 'Arabic'), +(289, 'ar', 'lt', 'Arabic'), +(290, 'ar', 'mk', 'Arabic'), +(291, 'ar', 'mt', 'Arabic'), +(292, 'ar', 'mo', 'Arabic'), +(293, 'ar', 'mn', 'Arabic'), +(294, 'ar', 'ne', 'Arabic'), +(295, 'ar', 'nl', 'Arabisch'), +(296, 'ar', 'nb', 'Arabic'), +(297, 'ar', 'pa', 'Arabic'), +(298, 'ar', 'pl', 'arabski'), +(299, 'ar', 'pt-pt', 'Árabe'), +(300, 'ar', 'pt-br', 'Árabe'), +(301, 'ar', 'qu', 'Arabic'), +(302, 'ar', 'ro', 'Arabică'), +(303, 'ar', 'ru', 'Арабский'), +(304, 'ar', 'sl', 'Arabic'), +(305, 'ar', 'so', 'Arabic'), +(306, 'ar', 'sq', 'Arabic'), +(307, 'ar', 'sr', 'Arabic'), +(308, 'ar', 'sv', 'Arabiska'), +(309, 'ar', 'ta', 'Arabic'), +(310, 'ar', 'th', 'อารบิก'), +(311, 'ar', 'tr', 'Arapça'), +(312, 'ar', 'uk', 'Arabic'), +(313, 'ar', 'ur', 'Arabic'), +(314, 'ar', 'uz', 'Arabic'), +(315, 'ar', 'vi', 'Arabic'), +(316, 'ar', 'yi', 'Arabic'), +(317, 'ar', 'zh-hans', '阿拉伯语'), +(318, 'ar', 'zu', 'Arabic'), +(319, 'ar', 'zh-hant', '阿拉伯語'), +(320, 'ar', 'ms', 'Arabic'), +(321, 'bs', 'en', 'Bosnian'), +(322, 'bs', 'es', 'Bosnio'), +(323, 'bs', 'de', 'Bosnisch'), +(324, 'bs', 'fr', 'Bosnien'), +(325, 'bs', 'ar', 'البوسنية'), +(326, 'bs', 'bs', 'Bosnian'), +(327, 'bs', 'bg', 'Bosnian'), +(328, 'bs', 'ca', 'Bosnian'), +(329, 'bs', 'cs', 'Bosnian'), +(330, 'bs', 'sk', 'Bosniačtina'), +(331, 'bs', 'cy', 'Bosnian'), +(332, 'bs', 'da', 'Bosnian'), +(333, 'bs', 'el', 'Βοσνιακα'), +(334, 'bs', 'eo', 'Bosnian'), +(335, 'bs', 'et', 'Bosnian'), +(336, 'bs', 'eu', 'Bosnian'), +(337, 'bs', 'fa', 'Bosnian'), +(338, 'bs', 'fi', 'bosnia'), +(339, 'bs', 'ga', 'Bosnian'), +(340, 'bs', 'he', 'Bosnian'), +(341, 'bs', 'hi', 'Bosnian'), +(342, 'bs', 'hr', 'Bosnian'), +(343, 'bs', 'hu', 'bosnyák'), +(344, 'bs', 'hy', 'Bosnian'), +(345, 'bs', 'id', 'Bosnian'), +(346, 'bs', 'is', 'Bosnian'), +(347, 'bs', 'it', 'Bosniaco'), +(348, 'bs', 'ja', 'ボスニア語'), +(349, 'bs', 'ko', '보즈니아어'), +(350, 'bs', 'ku', 'Bosnian'), +(351, 'bs', 'la', 'Bosnian'), +(352, 'bs', 'lv', 'Bosnian'), +(353, 'bs', 'lt', 'Bosnian'), +(354, 'bs', 'mk', 'Bosnian'), +(355, 'bs', 'mt', 'Bosnian'), +(356, 'bs', 'mo', 'Bosnian'), +(357, 'bs', 'mn', 'Bosnian'), +(358, 'bs', 'ne', 'Bosnian'), +(359, 'bs', 'nl', 'Bosnisch'), +(360, 'bs', 'nb', 'Bosnian'), +(361, 'bs', 'pa', 'Bosnian'), +(362, 'bs', 'pl', 'bośniacki'), +(363, 'bs', 'pt-pt', 'Bósnio'), +(364, 'bs', 'pt-br', 'Bósnio'), +(365, 'bs', 'qu', 'Bosnian'), +(366, 'bs', 'ro', 'Bosniacă'), +(367, 'bs', 'ru', 'Боснийский'), +(368, 'bs', 'sl', 'Bosnian'), +(369, 'bs', 'so', 'Bosnian'), +(370, 'bs', 'sq', 'Bosnian'), +(371, 'bs', 'sr', 'Bosnian'), +(372, 'bs', 'sv', 'Bosniska'), +(373, 'bs', 'ta', 'Bosnian'), +(374, 'bs', 'th', 'บอสเนียน'), +(375, 'bs', 'tr', 'Boşnakça'), +(376, 'bs', 'uk', 'Bosnian'), +(377, 'bs', 'ur', 'Bosnian'), +(378, 'bs', 'uz', 'Bosnian'), +(379, 'bs', 'vi', 'Bosnian'), +(380, 'bs', 'yi', 'Bosnian'), +(381, 'bs', 'zh-hans', '波斯尼亚语'), +(382, 'bs', 'zu', 'Bosnian'), +(383, 'bs', 'zh-hant', '波士尼亞語'), +(384, 'bs', 'ms', 'Bosnian'), +(385, 'bg', 'en', 'Bulgarian'), +(386, 'bg', 'es', 'Búlgaro'), +(387, 'bg', 'de', 'Bulgarisch'), +(388, 'bg', 'fr', 'Bulgare'), +(389, 'bg', 'ar', 'البلغارية'), +(390, 'bg', 'bs', 'Bulgarian'), +(391, 'bg', 'bg', 'Bulgarian'), +(392, 'bg', 'ca', 'Bulgarian'), +(393, 'bg', 'cs', 'Bulgarian'), +(394, 'bg', 'sk', 'Bulharčina'), +(395, 'bg', 'cy', 'Bulgarian'), +(396, 'bg', 'da', 'Bulgarian'), +(397, 'bg', 'el', 'Βουλγαρικα'), +(398, 'bg', 'eo', 'Bulgarian'), +(399, 'bg', 'et', 'Bulgarian'), +(400, 'bg', 'eu', 'Bulgarian'), +(401, 'bg', 'fa', 'Bulgarian'), +(402, 'bg', 'fi', 'bulgaria'), +(403, 'bg', 'ga', 'Bulgarian'), +(404, 'bg', 'he', 'Bulgarian'), +(405, 'bg', 'hi', 'Bulgarian'), +(406, 'bg', 'hr', 'Bulgarian'), +(407, 'bg', 'hu', 'bolgár'), +(408, 'bg', 'hy', 'Bulgarian'), +(409, 'bg', 'id', 'Bulgarian'), +(410, 'bg', 'is', 'Bulgarian'), +(411, 'bg', 'it', 'Bulgaro'), +(412, 'bg', 'ja', 'ブルガリア語'), +(413, 'bg', 'ko', '불가리아어'), +(414, 'bg', 'ku', 'Bulgarian'), +(415, 'bg', 'la', 'Bulgarian'), +(416, 'bg', 'lv', 'Bulgarian'), +(417, 'bg', 'lt', 'Bulgarian'), +(418, 'bg', 'mk', 'Bulgarian'), +(419, 'bg', 'mt', 'Bulgarian'), +(420, 'bg', 'mo', 'Bulgarian'), +(421, 'bg', 'mn', 'Bulgarian'), +(422, 'bg', 'ne', 'Bulgarian'), +(423, 'bg', 'nl', 'Bulgaars'), +(424, 'bg', 'nb', 'Bulgarian'), +(425, 'bg', 'pa', 'Bulgarian'), +(426, 'bg', 'pl', 'bułgarski'), +(427, 'bg', 'pt-pt', 'Búlgaro'), +(428, 'bg', 'pt-br', 'Búlgaro'), +(429, 'bg', 'qu', 'Bulgarian'), +(430, 'bg', 'ro', 'Bulgară'), +(431, 'bg', 'ru', 'Болгарский'), +(432, 'bg', 'sl', 'Bulgarian'), +(433, 'bg', 'so', 'Bulgarian'), +(434, 'bg', 'sq', 'Bulgarian'), +(435, 'bg', 'sr', 'Bulgarian'), +(436, 'bg', 'sv', 'Bulgariska'), +(437, 'bg', 'ta', 'Bulgarian'), +(438, 'bg', 'th', 'บัลแกเรียน'), +(439, 'bg', 'tr', 'Bulgarca'), +(440, 'bg', 'uk', 'Bulgarian'), +(441, 'bg', 'ur', 'Bulgarian'), +(442, 'bg', 'uz', 'Bulgarian'), +(443, 'bg', 'vi', 'Bulgarian'), +(444, 'bg', 'yi', 'Bulgarian'), +(445, 'bg', 'zh-hans', '保加利亚语'), +(446, 'bg', 'zu', 'Bulgarian'), +(447, 'bg', 'zh-hant', '保加利亞語'), +(448, 'bg', 'ms', 'Bulgarian'), +(449, 'ca', 'en', 'Catalan'), +(450, 'ca', 'es', 'Catalán'), +(451, 'ca', 'de', 'Katalanisch'), +(452, 'ca', 'fr', 'Catalan'), +(453, 'ca', 'ar', 'الكاتالوينية'), +(454, 'ca', 'bs', 'Catalan'), +(455, 'ca', 'bg', 'Catalan'), +(456, 'ca', 'ca', 'Català'), +(457, 'ca', 'cs', 'Catalan'), +(458, 'ca', 'sk', 'Katalánčina'), +(459, 'ca', 'cy', 'Catalan'), +(460, 'ca', 'da', 'Catalan'), +(461, 'ca', 'el', 'Καταλανικα'), +(462, 'ca', 'eo', 'Catalan'), +(463, 'ca', 'et', 'Catalan'), +(464, 'ca', 'eu', 'Catalan'), +(465, 'ca', 'fa', 'Catalan'), +(466, 'ca', 'fi', 'katalaani'), +(467, 'ca', 'ga', 'Catalan'), +(468, 'ca', 'he', 'Catalan'), +(469, 'ca', 'hi', 'Catalan'), +(470, 'ca', 'hr', 'Catalan'), +(471, 'ca', 'hu', 'katalán'), +(472, 'ca', 'hy', 'Catalan'), +(473, 'ca', 'id', 'Catalan'), +(474, 'ca', 'is', 'Catalan'), +(475, 'ca', 'it', 'Catalano'), +(476, 'ca', 'ja', 'カタルーニャ語'), +(477, 'ca', 'ko', '카탈로니아어'), +(478, 'ca', 'ku', 'Catalan'), +(479, 'ca', 'la', 'Catalan'), +(480, 'ca', 'lv', 'Catalan'), +(481, 'ca', 'lt', 'Catalan'), +(482, 'ca', 'mk', 'Catalan'), +(483, 'ca', 'mt', 'Catalan'), +(484, 'ca', 'mo', 'Catalan'), +(485, 'ca', 'mn', 'Catalan'), +(486, 'ca', 'ne', 'Catalan'), +(487, 'ca', 'nl', 'Catalaans'), +(488, 'ca', 'nb', 'Catalan'), +(489, 'ca', 'pa', 'Catalan'), +(490, 'ca', 'pl', 'kataloński'), +(491, 'ca', 'pt-pt', 'Catalão'), +(492, 'ca', 'pt-br', 'Catalão'), +(493, 'ca', 'qu', 'Catalan'), +(494, 'ca', 'ro', 'Catalană'), +(495, 'ca', 'ru', 'Каталанский'), +(496, 'ca', 'sl', 'Catalan'), +(497, 'ca', 'so', 'Catalan'), +(498, 'ca', 'sq', 'Catalan'), +(499, 'ca', 'sr', 'Catalan'), +(500, 'ca', 'sv', 'Katalanska'), +(501, 'ca', 'ta', 'Catalan'), +(502, 'ca', 'th', 'คะตะลาน'), +(503, 'ca', 'tr', 'Katalan dili'), +(504, 'ca', 'uk', 'Catalan'), +(505, 'ca', 'ur', 'Catalan'), +(506, 'ca', 'uz', 'Catalan'), +(507, 'ca', 'vi', 'Catalan'), +(508, 'ca', 'yi', 'Catalan'), +(509, 'ca', 'zh-hans', '加泰罗尼亚语'), +(510, 'ca', 'zu', 'Catalan'), +(511, 'ca', 'zh-hant', '加泰羅尼亞語'), +(512, 'ca', 'ms', 'Catalan'), +(513, 'cs', 'en', 'Czech'), +(514, 'cs', 'es', 'Checo'), +(515, 'cs', 'de', 'Tschechisch'), +(516, 'cs', 'fr', 'Tchèque'), +(517, 'cs', 'ar', 'التشيكية'), +(518, 'cs', 'bs', 'Czech'), +(519, 'cs', 'bg', 'Czech'), +(520, 'cs', 'ca', 'Czech'), +(521, 'cs', 'cs', 'Čeština'), +(522, 'cs', 'sk', 'Čeština'), +(523, 'cs', 'cy', 'Czech'), +(524, 'cs', 'da', 'Czech'), +(525, 'cs', 'el', 'Τσεχικη'), +(526, 'cs', 'eo', 'Czech'), +(527, 'cs', 'et', 'Czech'), +(528, 'cs', 'eu', 'Czech'), +(529, 'cs', 'fa', 'Czech'), +(530, 'cs', 'fi', 'tsekki'), +(531, 'cs', 'ga', 'Czech'), +(532, 'cs', 'he', 'Czech'), +(533, 'cs', 'hi', 'Czech'), +(534, 'cs', 'hr', 'Czech'), +(535, 'cs', 'hu', 'cseh'), +(536, 'cs', 'hy', 'Czech'), +(537, 'cs', 'id', 'Czech'), +(538, 'cs', 'is', 'Czech'), +(539, 'cs', 'it', 'Ceco'), +(540, 'cs', 'ja', 'チェコ語'), +(541, 'cs', 'ko', '체코슬로바키아어'), +(542, 'cs', 'ku', 'Czech'), +(543, 'cs', 'la', 'Czech'), +(544, 'cs', 'lv', 'Czech'), +(545, 'cs', 'lt', 'Czech'), +(546, 'cs', 'mk', 'Czech'), +(547, 'cs', 'mt', 'Czech'), +(548, 'cs', 'mo', 'Czech'), +(549, 'cs', 'mn', 'Czech'), +(550, 'cs', 'ne', 'Czech'), +(551, 'cs', 'nl', 'Tsjechisch'), +(552, 'cs', 'nb', 'Czech'), +(553, 'cs', 'pa', 'Czech'), +(554, 'cs', 'pl', 'czeski'), +(555, 'cs', 'pt-pt', 'Checa'), +(556, 'cs', 'pt-br', 'Checa'), +(557, 'cs', 'qu', 'Czech'), +(558, 'cs', 'ro', 'Cehă'), +(559, 'cs', 'ru', 'Чешский'), +(560, 'cs', 'sl', 'Czech'), +(561, 'cs', 'so', 'Czech'), +(562, 'cs', 'sq', 'Czech'), +(563, 'cs', 'sr', 'Czech'), +(564, 'cs', 'sv', 'Tjeckiska'), +(565, 'cs', 'ta', 'Czech'), +(566, 'cs', 'th', 'เช็ก'), +(567, 'cs', 'tr', 'Çekçe'), +(568, 'cs', 'uk', 'Czech'), +(569, 'cs', 'ur', 'Czech'), +(570, 'cs', 'uz', 'Czech'), +(571, 'cs', 'vi', 'Czech'), +(572, 'cs', 'yi', 'Czech'), +(573, 'cs', 'zh-hans', '捷克语'), +(574, 'cs', 'zu', 'Czech'), +(575, 'cs', 'zh-hant', '捷克語'), +(576, 'cs', 'ms', 'Czech'), +(577, 'sk', 'en', 'Slovak'), +(578, 'sk', 'es', 'Eslavo'), +(579, 'sk', 'de', 'Slawisch'), +(580, 'sk', 'fr', 'Slave'), +(581, 'sk', 'ar', 'السلافية'), +(582, 'sk', 'bs', 'Slovak'), +(583, 'sk', 'bg', 'Slovak'), +(584, 'sk', 'ca', 'Slovak'), +(585, 'sk', 'cs', 'Slovak'), +(586, 'sk', 'sk', 'Slovenčina'), +(587, 'sk', 'cy', 'Slovak'), +(588, 'sk', 'da', 'Slovak'), +(589, 'sk', 'el', 'Σλαβικη'), +(590, 'sk', 'eo', 'Slovak'), +(591, 'sk', 'et', 'Slovak'), +(592, 'sk', 'eu', 'Slovak'), +(593, 'sk', 'fa', 'Slovak'), +(594, 'sk', 'fi', 'slaavi'), +(595, 'sk', 'ga', 'Slovak'), +(596, 'sk', 'he', 'Slavic'), +(597, 'sk', 'hi', 'Slovak'), +(598, 'sk', 'hr', 'Slovak'), +(599, 'sk', 'hu', 'szláv'), +(600, 'sk', 'hy', 'Slovak'), +(601, 'sk', 'id', 'Slovak'), +(602, 'sk', 'is', 'Slovak'), +(603, 'sk', 'it', 'Slavo'), +(604, 'sk', 'ja', 'スラヴ語派'), +(605, 'sk', 'ko', '슬라브어'), +(606, 'sk', 'ku', 'Slovak'), +(607, 'sk', 'la', 'Slovak'), +(608, 'sk', 'lv', 'Slovak'), +(609, 'sk', 'lt', 'Slovak'), +(610, 'sk', 'mk', 'Slovak'), +(611, 'sk', 'mt', 'Slovak'), +(612, 'sk', 'mo', 'Slovak'), +(613, 'sk', 'mn', 'Slovak'), +(614, 'sk', 'ne', 'Slovak'), +(615, 'sk', 'nl', 'Slavisch'), +(616, 'sk', 'nb', 'Slovak'), +(617, 'sk', 'pa', 'Slovak'), +(618, 'sk', 'pl', 'słowiański'), +(619, 'sk', 'pt-pt', 'Eslava'), +(620, 'sk', 'pt-br', 'Eslava'), +(621, 'sk', 'qu', 'Slovak'), +(622, 'sk', 'ro', 'Slavă'), +(623, 'sk', 'ru', 'Славянский'), +(624, 'sk', 'sl', 'Slovak'), +(625, 'sk', 'so', 'Slovak'), +(626, 'sk', 'sq', 'Slovak'), +(627, 'sk', 'sr', 'Slovak'), +(628, 'sk', 'sv', 'Slavisk'), +(629, 'sk', 'ta', 'Slovak'), +(630, 'sk', 'th', 'สลาวิก'), +(631, 'sk', 'tr', 'Slav dili'), +(632, 'sk', 'uk', 'Slovak'), +(633, 'sk', 'ur', 'Slovak'), +(634, 'sk', 'uz', 'Slovak'), +(635, 'sk', 'vi', 'Slovak'), +(636, 'sk', 'yi', 'Slovak'), +(637, 'sk', 'zh-hans', '斯拉夫语'), +(638, 'sk', 'zu', 'Slovak'), +(639, 'sk', 'zh-hant', '斯拉夫語'), +(640, 'sk', 'ms', 'Slovak'), +(641, 'cy', 'en', 'Welsh'), +(642, 'cy', 'es', 'Galés'), +(643, 'cy', 'de', 'Walisisch'), +(644, 'cy', 'fr', 'Gallois'), +(645, 'cy', 'ar', 'الولزية'), +(646, 'cy', 'bs', 'Welsh'), +(647, 'cy', 'bg', 'Welsh'), +(648, 'cy', 'ca', 'Welsh'), +(649, 'cy', 'cs', 'Welsh'), +(650, 'cy', 'sk', 'Welština'), +(651, 'cy', 'cy', 'Cymraeg'), +(652, 'cy', 'da', 'Welsh'), +(653, 'cy', 'el', 'Welsh'), +(654, 'cy', 'eo', 'Welsh'), +(655, 'cy', 'et', 'Welsh'), +(656, 'cy', 'eu', 'Welsh'), +(657, 'cy', 'fa', 'Welsh'), +(658, 'cy', 'fi', 'kymri'), +(659, 'cy', 'ga', 'Welsh'), +(660, 'cy', 'he', 'Welsh'), +(661, 'cy', 'hi', 'Welsh'), +(662, 'cy', 'hr', 'Welsh'), +(663, 'cy', 'hu', 'vels'), +(664, 'cy', 'hy', 'Welsh'), +(665, 'cy', 'id', 'Welsh'), +(666, 'cy', 'is', 'Welsh'), +(667, 'cy', 'it', 'Gallese'), +(668, 'cy', 'ja', 'ウェールズ語'), +(669, 'cy', 'ko', '웨일즈어'), +(670, 'cy', 'ku', 'Welsh'), +(671, 'cy', 'la', 'Welsh'), +(672, 'cy', 'lv', 'Welsh'), +(673, 'cy', 'lt', 'Welsh'), +(674, 'cy', 'mk', 'Welsh'), +(675, 'cy', 'mt', 'Welsh'), +(676, 'cy', 'mo', 'Welsh'), +(677, 'cy', 'mn', 'Welsh'), +(678, 'cy', 'ne', 'Welsh'), +(679, 'cy', 'nl', 'Welsh'), +(680, 'cy', 'nb', 'Welsh'), +(681, 'cy', 'pa', 'Welsh'), +(682, 'cy', 'pl', 'walijski'), +(683, 'cy', 'pt-pt', 'Welsh'), +(684, 'cy', 'pt-br', 'Welsh'), +(685, 'cy', 'qu', 'Welsh'), +(686, 'cy', 'ro', 'Galeză'), +(687, 'cy', 'ru', 'Валлийский'), +(688, 'cy', 'sl', 'Welsh'), +(689, 'cy', 'so', 'Welsh'), +(690, 'cy', 'sq', 'Welsh'), +(691, 'cy', 'sr', 'Welsh'), +(692, 'cy', 'sv', 'Walesiska'), +(693, 'cy', 'ta', 'Welsh'), +(694, 'cy', 'th', 'เวลช์'), +(695, 'cy', 'tr', 'Galce'), +(696, 'cy', 'uk', 'Welsh'), +(697, 'cy', 'ur', 'Welsh'), +(698, 'cy', 'uz', 'Welsh'), +(699, 'cy', 'vi', 'Welsh'), +(700, 'cy', 'yi', 'Welsh'), +(701, 'cy', 'zh-hans', '威尔士语'), +(702, 'cy', 'zu', 'Welsh'), +(703, 'cy', 'zh-hant', '威爾士語'), +(704, 'cy', 'ms', 'Welsh'), +(705, 'da', 'en', 'Danish'), +(706, 'da', 'es', 'Danés'), +(707, 'da', 'de', 'Dänisch'), +(708, 'da', 'fr', 'Danois'), +(709, 'da', 'ar', 'الدانماركية'), +(710, 'da', 'bs', 'Danish'), +(711, 'da', 'bg', 'Danish'), +(712, 'da', 'ca', 'Danish'), +(713, 'da', 'cs', 'Danish'), +(714, 'da', 'sk', 'Dánčina'), +(715, 'da', 'cy', 'Danish'), +(716, 'da', 'da', 'Dansk'), +(717, 'da', 'el', 'Δανεζικα'), +(718, 'da', 'eo', 'Danish'), +(719, 'da', 'et', 'Danish'), +(720, 'da', 'eu', 'Danish'), +(721, 'da', 'fa', 'Danish'), +(722, 'da', 'fi', 'tanska'), +(723, 'da', 'ga', 'Danish'), +(724, 'da', 'he', 'דנית'), +(725, 'da', 'hi', 'Danish'), +(726, 'da', 'hr', 'Danish'), +(727, 'da', 'hu', 'dán'), +(728, 'da', 'hy', 'Danish'), +(729, 'da', 'id', 'Danish'), +(730, 'da', 'is', 'Danish'), +(731, 'da', 'it', 'Danese'), +(732, 'da', 'ja', 'デンマーク語'), +(733, 'da', 'ko', '덴마크어'), +(734, 'da', 'ku', 'Danish'), +(735, 'da', 'la', 'Danish'), +(736, 'da', 'lv', 'Danish'), +(737, 'da', 'lt', 'Danish'), +(738, 'da', 'mk', 'Danish'), +(739, 'da', 'mt', 'Danish'), +(740, 'da', 'mo', 'Danish'), +(741, 'da', 'mn', 'Danish'), +(742, 'da', 'ne', 'Danish'), +(743, 'da', 'nl', 'Deens'), +(744, 'da', 'nb', 'Danish'), +(745, 'da', 'pa', 'Danish'), +(746, 'da', 'pl', 'duński'), +(747, 'da', 'pt-pt', 'Dinamarquês'), +(748, 'da', 'pt-br', 'Dinamarquês'), +(749, 'da', 'qu', 'Danish'), +(750, 'da', 'ro', 'Daneză'), +(751, 'da', 'ru', 'Датский'), +(752, 'da', 'sl', 'Danish'), +(753, 'da', 'so', 'Danish'), +(754, 'da', 'sq', 'Danish'), +(755, 'da', 'sr', 'Danish'), +(756, 'da', 'sv', 'Danska'), +(757, 'da', 'ta', 'Danish'), +(758, 'da', 'th', 'เดนมาร์ก'), +(759, 'da', 'tr', 'Danca'), +(760, 'da', 'uk', 'Danish'), +(761, 'da', 'ur', 'Danish'), +(762, 'da', 'uz', 'Danish'), +(763, 'da', 'vi', 'Danish'), +(764, 'da', 'yi', 'Danish'), +(765, 'da', 'zh-hans', '丹麦语'), +(766, 'da', 'zu', 'Danish'), +(767, 'da', 'zh-hant', '丹麥語'), +(768, 'da', 'ms', 'Danish'), +(769, 'el', 'en', 'Greek'), +(770, 'el', 'es', 'Griego'), +(771, 'el', 'de', 'Griechisch'), +(772, 'el', 'fr', 'Grec moderne'), +(773, 'el', 'ar', 'اليونانية'), +(774, 'el', 'bs', 'Greek'), +(775, 'el', 'bg', 'Greek'), +(776, 'el', 'ca', 'Greek'), +(777, 'el', 'cs', 'Greek'), +(778, 'el', 'sk', 'Gréčtina'), +(779, 'el', 'cy', 'Greek'), +(780, 'el', 'da', 'Greek'), +(781, 'el', 'el', 'Ελληνικα'), +(782, 'el', 'eo', 'Greek'), +(783, 'el', 'et', 'Greek'), +(784, 'el', 'eu', 'Greek'), +(785, 'el', 'fa', 'Greek'), +(786, 'el', 'fi', 'kreikka'), +(787, 'el', 'ga', 'Greek'), +(788, 'el', 'he', 'יוונית'), +(789, 'el', 'hi', 'Greek'), +(790, 'el', 'hr', 'Greek'), +(791, 'el', 'hu', 'görög'), +(792, 'el', 'hy', 'Greek'), +(793, 'el', 'id', 'Greek'), +(794, 'el', 'is', 'Greek'), +(795, 'el', 'it', 'Greco'), +(796, 'el', 'ja', 'ギリシア語'), +(797, 'el', 'ko', '그리스어'), +(798, 'el', 'ku', 'Greek'), +(799, 'el', 'la', 'Greek'), +(800, 'el', 'lv', 'Greek'), +(801, 'el', 'lt', 'Greek'), +(802, 'el', 'mk', 'Greek'), +(803, 'el', 'mt', 'Greek'), +(804, 'el', 'mo', 'Greek'), +(805, 'el', 'mn', 'Greek'), +(806, 'el', 'ne', 'Greek'), +(807, 'el', 'nl', 'Grieks'), +(808, 'el', 'nb', 'Greek'), +(809, 'el', 'pa', 'Greek'), +(810, 'el', 'pl', 'grecki'), +(811, 'el', 'pt-pt', 'Grego'), +(812, 'el', 'pt-br', 'Grego'), +(813, 'el', 'qu', 'Greek'), +(814, 'el', 'ro', 'Greacă'), +(815, 'el', 'ru', 'Греческий'), +(816, 'el', 'sl', 'Greek'), +(817, 'el', 'so', 'Greek'), +(818, 'el', 'sq', 'Greek'), +(819, 'el', 'sr', 'Greek'), +(820, 'el', 'sv', 'Grekiska'), +(821, 'el', 'ta', 'Greek'), +(822, 'el', 'th', 'กรีก'), +(823, 'el', 'tr', 'Yunanca'), +(824, 'el', 'uk', 'Greek'), +(825, 'el', 'ur', 'Greek'), +(826, 'el', 'uz', 'Greek'), +(827, 'el', 'vi', 'Greek'), +(828, 'el', 'yi', 'Greek'), +(829, 'el', 'zh-hans', '希腊语'), +(830, 'el', 'zu', 'Greek'), +(831, 'el', 'zh-hant', '希臘語'), +(832, 'el', 'ms', 'Greek'), +(833, 'eo', 'en', 'Esperanto'), +(834, 'eo', 'es', 'Esperanto'), +(835, 'eo', 'de', 'Esperanto'), +(836, 'eo', 'fr', 'Espéranto'), +(837, 'eo', 'ar', 'الاسبرانتو'), +(838, 'eo', 'bs', 'Esperanto'), +(839, 'eo', 'bg', 'Esperanto'), +(840, 'eo', 'ca', 'Esperanto'), +(841, 'eo', 'cs', 'Esperanto'), +(842, 'eo', 'sk', 'Esperanto'), +(843, 'eo', 'cy', 'Esperanto'), +(844, 'eo', 'da', 'Esperanto'), +(845, 'eo', 'el', 'Εσπεραντο'), +(846, 'eo', 'eo', 'Esperanto'), +(847, 'eo', 'et', 'Esperanto'), +(848, 'eo', 'eu', 'Esperanto'), +(849, 'eo', 'fa', 'Esperanto'), +(850, 'eo', 'fi', 'esperanto'), +(851, 'eo', 'ga', 'Esperanto'), +(852, 'eo', 'he', 'Esperanto'), +(853, 'eo', 'hi', 'Esperanto'), +(854, 'eo', 'hr', 'Esperanto'), +(855, 'eo', 'hu', 'eszperantó'), +(856, 'eo', 'hy', 'Esperanto'), +(857, 'eo', 'id', 'Esperanto'), +(858, 'eo', 'is', 'Esperanto'), +(859, 'eo', 'it', 'Esperanto'), +(860, 'eo', 'ja', 'エスペラント語'), +(861, 'eo', 'ko', '에스페란토어'), +(862, 'eo', 'ku', 'Esperanto'), +(863, 'eo', 'la', 'Esperanto'), +(864, 'eo', 'lv', 'Esperanto'), +(865, 'eo', 'lt', 'Esperanto'), +(866, 'eo', 'mk', 'Esperanto'), +(867, 'eo', 'mt', 'Esperanto'), +(868, 'eo', 'mo', 'Esperanto'), +(869, 'eo', 'mn', 'Esperanto'), +(870, 'eo', 'ne', 'Esperanto'), +(871, 'eo', 'nl', 'Esperanto'), +(872, 'eo', 'nb', 'Esperanto'), +(873, 'eo', 'pa', 'Esperanto'), +(874, 'eo', 'pl', 'esperanto'), +(875, 'eo', 'pt-pt', 'Esperanto'), +(876, 'eo', 'pt-br', 'Esperanto'), +(877, 'eo', 'qu', 'Esperanto'), +(878, 'eo', 'ro', 'Esperanto'), +(879, 'eo', 'ru', 'Эсперанто'), +(880, 'eo', 'sl', 'Esperanto'), +(881, 'eo', 'so', 'Esperanto'), +(882, 'eo', 'sq', 'Esperanto'), +(883, 'eo', 'sr', 'Esperanto'), +(884, 'eo', 'sv', 'Esperanto'), +(885, 'eo', 'ta', 'Esperanto'), +(886, 'eo', 'th', 'เอสเปอรันโต'), +(887, 'eo', 'tr', 'Esperanto'), +(888, 'eo', 'uk', 'Esperanto'), +(889, 'eo', 'ur', 'Esperanto'), +(890, 'eo', 'uz', 'Esperanto'), +(891, 'eo', 'vi', 'Esperanto'), +(892, 'eo', 'yi', 'Esperanto'), +(893, 'eo', 'zh-hans', '世界语'), +(894, 'eo', 'zu', 'Esperanto'), +(895, 'eo', 'zh-hant', '世界語'), +(896, 'eo', 'ms', 'Esperanto'), +(897, 'et', 'en', 'Estonian'), +(898, 'et', 'es', 'Estonio'), +(899, 'et', 'de', 'Estnisch'), +(900, 'et', 'fr', 'Estonien'), +(901, 'et', 'ar', 'الأستونية'), +(902, 'et', 'bs', 'Estonian'), +(903, 'et', 'bg', 'Estonian'), +(904, 'et', 'ca', 'Estonian'), +(905, 'et', 'cs', 'Estonian'), +(906, 'et', 'sk', 'Estónčina'), +(907, 'et', 'cy', 'Estonian'), +(908, 'et', 'da', 'Estonian'), +(909, 'et', 'el', 'Εσθονικα'), +(910, 'et', 'eo', 'Estonian'), +(911, 'et', 'et', 'Eesti'), +(912, 'et', 'eu', 'Estonian'), +(913, 'et', 'fa', 'Estonian'), +(914, 'et', 'fi', 'eesti'), +(915, 'et', 'ga', 'Estonian'), +(916, 'et', 'he', 'Estonian'), +(917, 'et', 'hi', 'Estonian'), +(918, 'et', 'hr', 'Estonian'), +(919, 'et', 'hu', 'észt'), +(920, 'et', 'hy', 'Estonian'), +(921, 'et', 'id', 'Estonian'), +(922, 'et', 'is', 'Estonian'), +(923, 'et', 'it', 'Estone'), +(924, 'et', 'ja', 'エストニア語'), +(925, 'et', 'ko', '에스토니아어'), +(926, 'et', 'ku', 'Estonian'), +(927, 'et', 'la', 'Estonian'), +(928, 'et', 'lv', 'Estonian'), +(929, 'et', 'lt', 'Estonian'), +(930, 'et', 'mk', 'Estonian'), +(931, 'et', 'mt', 'Estonian'), +(932, 'et', 'mo', 'Estonian'), +(933, 'et', 'mn', 'Estonian'), +(934, 'et', 'ne', 'Estonian'), +(935, 'et', 'nl', 'Ests'), +(936, 'et', 'nb', 'Estonian'), +(937, 'et', 'pa', 'Estonian'), +(938, 'et', 'pl', 'estoński'), +(939, 'et', 'pt-pt', 'Estoniano'), +(940, 'et', 'pt-br', 'Estoniano'), +(941, 'et', 'qu', 'Estonian'), +(942, 'et', 'ro', 'Estoniană'), +(943, 'et', 'ru', 'Эстонский'), +(944, 'et', 'sl', 'Estonian'), +(945, 'et', 'so', 'Estonian'), +(946, 'et', 'sq', 'Estonian'), +(947, 'et', 'sr', 'Estonian'), +(948, 'et', 'sv', 'Estniska'), +(949, 'et', 'ta', 'Estonian'), +(950, 'et', 'th', 'เอสโตเนียน'), +(951, 'et', 'tr', 'Estonya dili'), +(952, 'et', 'uk', 'Estonian'), +(953, 'et', 'ur', 'Estonian'), +(954, 'et', 'uz', 'Estonian'), +(955, 'et', 'vi', 'Estonian'), +(956, 'et', 'yi', 'Estonian'), +(957, 'et', 'zh-hans', '爱沙尼亚语'), +(958, 'et', 'zu', 'Estonian'), +(959, 'et', 'zh-hant', '愛沙尼亞語'), +(960, 'et', 'ms', 'Estonian'), +(961, 'eu', 'en', 'Basque'), +(962, 'eu', 'es', 'Euskera'), +(963, 'eu', 'de', 'Baskisch'), +(964, 'eu', 'fr', 'Basque'), +(965, 'eu', 'ar', 'لغة الباسك'), +(966, 'eu', 'bs', 'Basque'), +(967, 'eu', 'bg', 'Basque'), +(968, 'eu', 'ca', 'Basque'), +(969, 'eu', 'cs', 'Basque'), +(970, 'eu', 'sk', 'Baskičtina'), +(971, 'eu', 'cy', 'Basque'), +(972, 'eu', 'da', 'Basque'), +(973, 'eu', 'el', 'Βασκικα'), +(974, 'eu', 'eo', 'Basque'), +(975, 'eu', 'et', 'Basque'), +(976, 'eu', 'eu', 'Euskara'), +(977, 'eu', 'fa', 'Basque'), +(978, 'eu', 'fi', 'baski'), +(979, 'eu', 'ga', 'Basque'), +(980, 'eu', 'he', 'Basque'), +(981, 'eu', 'hi', 'Basque'), +(982, 'eu', 'hr', 'Basque'), +(983, 'eu', 'hu', 'baszk'), +(984, 'eu', 'hy', 'Basque'), +(985, 'eu', 'id', 'Basque'), +(986, 'eu', 'is', 'Basque'), +(987, 'eu', 'it', 'Basco'), +(988, 'eu', 'ja', 'バスク語'), +(989, 'eu', 'ko', '바스크어'), +(990, 'eu', 'ku', 'Basque'), +(991, 'eu', 'la', 'Basque'), +(992, 'eu', 'lv', 'Basque'), +(993, 'eu', 'lt', 'Basque'), +(994, 'eu', 'mk', 'Basque'), +(995, 'eu', 'mt', 'Basque'), +(996, 'eu', 'mo', 'Basque'), +(997, 'eu', 'mn', 'Basque'), +(998, 'eu', 'ne', 'Basque'), +(999, 'eu', 'nl', 'Baskisch'), +(1000, 'eu', 'nb', 'Basque'), +(1001, 'eu', 'pa', 'Basque'), +(1002, 'eu', 'pl', 'baskijski'), +(1003, 'eu', 'pt-pt', 'Basco'), +(1004, 'eu', 'pt-br', 'Basco'), +(1005, 'eu', 'qu', 'Basque'), +(1006, 'eu', 'ro', 'Bască'), +(1007, 'eu', 'ru', 'Баскский'), +(1008, 'eu', 'sl', 'Basque'), +(1009, 'eu', 'so', 'Basque'), +(1010, 'eu', 'sq', 'Basque'), +(1011, 'eu', 'sr', 'Basque'), +(1012, 'eu', 'sv', 'Baskiska'), +(1013, 'eu', 'ta', 'Basque'), +(1014, 'eu', 'th', 'บาสค์'), +(1015, 'eu', 'tr', 'Bask dili'), +(1016, 'eu', 'uk', 'Basque'), +(1017, 'eu', 'ur', 'Basque'), +(1018, 'eu', 'uz', 'Basque'), +(1019, 'eu', 'vi', 'Basque'), +(1020, 'eu', 'yi', 'Basque'), +(1021, 'eu', 'zh-hans', '巴斯克语'), +(1022, 'eu', 'zu', 'Basque'), +(1023, 'eu', 'zh-hant', '巴斯克語'), +(1024, 'eu', 'ms', 'Basque'), +(1025, 'fa', 'en', 'Persian'), +(1026, 'fa', 'es', 'Persa'), +(1027, 'fa', 'de', 'Persisch'), +(1028, 'fa', 'fr', 'Perse'), +(1029, 'fa', 'ar', 'الفارسية'), +(1030, 'fa', 'bs', 'Persian'), +(1031, 'fa', 'bg', 'Persian'), +(1032, 'fa', 'ca', 'Persian'), +(1033, 'fa', 'cs', 'Persian'), +(1034, 'fa', 'sk', 'Perzština'), +(1035, 'fa', 'cy', 'Persian'), +(1036, 'fa', 'da', 'Persian'), +(1037, 'fa', 'el', 'Περσικος'), +(1038, 'fa', 'eo', 'Persian'), +(1039, 'fa', 'et', 'Persian'), +(1040, 'fa', 'eu', 'Persian'), +(1041, 'fa', 'fa', 'پارسی'), +(1042, 'fa', 'fi', 'persia'), +(1043, 'fa', 'ga', 'Persian'), +(1044, 'fa', 'he', 'פרסית'), +(1045, 'fa', 'hi', 'Persian'), +(1046, 'fa', 'hr', 'Persian'), +(1047, 'fa', 'hu', 'perzsa'), +(1048, 'fa', 'hy', 'Persian'), +(1049, 'fa', 'id', 'Persian'), +(1050, 'fa', 'is', 'Persian'), +(1051, 'fa', 'it', 'Persiano'), +(1052, 'fa', 'ja', 'ペルシア語'), +(1053, 'fa', 'ko', '페르시아어'), +(1054, 'fa', 'ku', 'Persian'), +(1055, 'fa', 'la', 'Persian'), +(1056, 'fa', 'lv', 'Persian'), +(1057, 'fa', 'lt', 'Persian'), +(1058, 'fa', 'mk', 'Persian'), +(1059, 'fa', 'mt', 'Persian'), +(1060, 'fa', 'mo', 'Persian'), +(1061, 'fa', 'mn', 'Persian'), +(1062, 'fa', 'ne', 'Persian'), +(1063, 'fa', 'nl', 'Perzisch'), +(1064, 'fa', 'nb', 'Persian'), +(1065, 'fa', 'pa', 'Persian'), +(1066, 'fa', 'pl', 'perski'), +(1067, 'fa', 'pt-pt', 'Persa'), +(1068, 'fa', 'pt-br', 'Persa'), +(1069, 'fa', 'qu', 'Persian'), +(1070, 'fa', 'ro', 'Persană'), +(1071, 'fa', 'ru', 'Персидский'), +(1072, 'fa', 'sl', 'Persian'), +(1073, 'fa', 'so', 'Persian'), +(1074, 'fa', 'sq', 'Persian'), +(1075, 'fa', 'sr', 'Persian'), +(1076, 'fa', 'sv', 'Persiska'), +(1077, 'fa', 'ta', 'Persian'), +(1078, 'fa', 'th', 'เปอร์เซียน'), +(1079, 'fa', 'tr', 'Farsça'), +(1080, 'fa', 'uk', 'Persian'), +(1081, 'fa', 'ur', 'Persian'), +(1082, 'fa', 'uz', 'Persian'), +(1083, 'fa', 'vi', 'Persian'), +(1084, 'fa', 'yi', 'Persian'), +(1085, 'fa', 'zh-hans', '波斯语'), +(1086, 'fa', 'zu', 'Persian'), +(1087, 'fa', 'zh-hant', '波斯語'), +(1088, 'fa', 'ms', 'Persian'), +(1089, 'fi', 'en', 'Finnish'), +(1090, 'fi', 'es', 'Finlandés'), +(1091, 'fi', 'de', 'Finnisch'), +(1092, 'fi', 'fr', 'Finnois'), +(1093, 'fi', 'ar', 'الفنلندية'), +(1094, 'fi', 'bs', 'Finnish'), +(1095, 'fi', 'bg', 'Finnish'), +(1096, 'fi', 'ca', 'Finnish'), +(1097, 'fi', 'cs', 'Finnish'), +(1098, 'fi', 'sk', 'Fínština'), +(1099, 'fi', 'cy', 'Finnish'), +(1100, 'fi', 'da', 'Finnish'), +(1101, 'fi', 'el', 'Φινλανδικη'), +(1102, 'fi', 'eo', 'Finnish'), +(1103, 'fi', 'et', 'Finnish'), +(1104, 'fi', 'eu', 'Finnish'), +(1105, 'fi', 'fa', 'Finnish'), +(1106, 'fi', 'fi', 'Suomi'), +(1107, 'fi', 'ga', 'Finnish'), +(1108, 'fi', 'he', 'פינית'), +(1109, 'fi', 'hi', 'Finnish'), +(1110, 'fi', 'hr', 'Finnish'), +(1111, 'fi', 'hu', 'finn'), +(1112, 'fi', 'hy', 'Finnish'), +(1113, 'fi', 'id', 'Finnish'), +(1114, 'fi', 'is', 'Finnish'), +(1115, 'fi', 'it', 'Finlandese'), +(1116, 'fi', 'ja', 'フィンランド語'), +(1117, 'fi', 'ko', '핀란드어'), +(1118, 'fi', 'ku', 'Finnish'), +(1119, 'fi', 'la', 'Finnish'), +(1120, 'fi', 'lv', 'Finnish'), +(1121, 'fi', 'lt', 'Finnish'), +(1122, 'fi', 'mk', 'Finnish'), +(1123, 'fi', 'mt', 'Finnish'), +(1124, 'fi', 'mo', 'Finnish'), +(1125, 'fi', 'mn', 'Finnish'), +(1126, 'fi', 'ne', 'Finnish'), +(1127, 'fi', 'nl', 'Fins'), +(1128, 'fi', 'nb', 'Finnish'), +(1129, 'fi', 'pa', 'Finnish'), +(1130, 'fi', 'pl', 'fiński'), +(1131, 'fi', 'pt-pt', 'Finlandês'), +(1132, 'fi', 'pt-br', 'Finlandês'), +(1133, 'fi', 'qu', 'Finnish'), +(1134, 'fi', 'ro', 'Finlandeză'), +(1135, 'fi', 'ru', 'Финский'), +(1136, 'fi', 'sl', 'Finnish'), +(1137, 'fi', 'so', 'Finnish'), +(1138, 'fi', 'sq', 'Finnish'), +(1139, 'fi', 'sr', 'Finnish'), +(1140, 'fi', 'sv', 'Finska'), +(1141, 'fi', 'ta', 'Finnish'), +(1142, 'fi', 'th', 'ฟินนิช'), +(1143, 'fi', 'tr', 'Fince'), +(1144, 'fi', 'uk', 'Finnish'), +(1145, 'fi', 'ur', 'Finnish'), +(1146, 'fi', 'uz', 'Finnish'), +(1147, 'fi', 'vi', 'Finnish'), +(1148, 'fi', 'yi', 'Finnish'), +(1149, 'fi', 'zh-hans', '芬兰语'), +(1150, 'fi', 'zu', 'Finnish'), +(1151, 'fi', 'zh-hant', '芬蘭語'), +(1152, 'fi', 'ms', 'Finnish'), +(1153, 'ga', 'en', 'Irish'), +(1154, 'ga', 'es', 'Irlandés'), +(1155, 'ga', 'de', 'Irisch'), +(1156, 'ga', 'fr', 'Irlandais'), +(1157, 'ga', 'ar', 'الأيرلندية'), +(1158, 'ga', 'bs', 'Irish'), +(1159, 'ga', 'bg', 'Irish'), +(1160, 'ga', 'ca', 'Irish'), +(1161, 'ga', 'cs', 'Irish'), +(1162, 'ga', 'sk', 'Írština'), +(1163, 'ga', 'cy', 'Irish'), +(1164, 'ga', 'da', 'Irish'), +(1165, 'ga', 'el', 'Ιρλανδικα'), +(1166, 'ga', 'eo', 'Irish'), +(1167, 'ga', 'et', 'Irish'), +(1168, 'ga', 'eu', 'Irish'), +(1169, 'ga', 'fa', 'Irish'), +(1170, 'ga', 'fi', 'iiri'), +(1171, 'ga', 'ga', 'Gaeilge'), +(1172, 'ga', 'he', 'אירית'), +(1173, 'ga', 'hi', 'Irish'), +(1174, 'ga', 'hr', 'Irish'), +(1175, 'ga', 'hu', 'ír'), +(1176, 'ga', 'hy', 'Irish'), +(1177, 'ga', 'id', 'Irish'), +(1178, 'ga', 'is', 'Irish'), +(1179, 'ga', 'it', 'Irlandese'), +(1180, 'ga', 'ja', 'アイルランド語'), +(1181, 'ga', 'ko', '아일랜드어'), +(1182, 'ga', 'ku', 'Irish'), +(1183, 'ga', 'la', 'Irish'), +(1184, 'ga', 'lv', 'Irish'), +(1185, 'ga', 'lt', 'Irish'), +(1186, 'ga', 'mk', 'Irish'), +(1187, 'ga', 'mt', 'Irish'), +(1188, 'ga', 'mo', 'Irish'), +(1189, 'ga', 'mn', 'Irish'), +(1190, 'ga', 'ne', 'Irish'), +(1191, 'ga', 'nl', 'Iers'), +(1192, 'ga', 'nb', 'Irish'), +(1193, 'ga', 'pa', 'Irish'), +(1194, 'ga', 'pl', 'irlandzki'), +(1195, 'ga', 'pt-pt', 'Irlandês'), +(1196, 'ga', 'pt-br', 'Irlandês'), +(1197, 'ga', 'qu', 'Irish'), +(1198, 'ga', 'ro', 'Irlandeză'), +(1199, 'ga', 'ru', 'Ирландский'), +(1200, 'ga', 'sl', 'Irish'), +(1201, 'ga', 'so', 'Irish'), +(1202, 'ga', 'sq', 'Irish'), +(1203, 'ga', 'sr', 'Irish'), +(1204, 'ga', 'sv', 'Irländska'), +(1205, 'ga', 'ta', 'Irish'), +(1206, 'ga', 'th', 'ไอริช'), +(1207, 'ga', 'tr', 'İrlanda dili'), +(1208, 'ga', 'uk', 'Irish'), +(1209, 'ga', 'ur', 'Irish'), +(1210, 'ga', 'uz', 'Irish'), +(1211, 'ga', 'vi', 'Irish'), +(1212, 'ga', 'yi', 'Irish'), +(1213, 'ga', 'zh-hans', '爱尔兰语'), +(1214, 'ga', 'zu', 'Irish'), +(1215, 'ga', 'zh-hant', '愛爾蘭語'), +(1216, 'ga', 'ms', 'Irish'), +(1217, 'he', 'en', 'Hebrew'), +(1218, 'he', 'es', 'Hebreo'), +(1219, 'he', 'de', 'Hebräisch'), +(1220, 'he', 'fr', 'Hébreu'), +(1221, 'he', 'ar', 'العبرية'), +(1222, 'he', 'bs', 'Hebrew'), +(1223, 'he', 'bg', 'Hebrew'), +(1224, 'he', 'ca', 'Hebrew'), +(1225, 'he', 'cs', 'Hebrew'), +(1226, 'he', 'sk', 'Hebrejčina'), +(1227, 'he', 'cy', 'Hebrew'), +(1228, 'he', 'da', 'Hebrew'), +(1229, 'he', 'el', 'Εβραικα'), +(1230, 'he', 'eo', 'Hebrew'), +(1231, 'he', 'et', 'Hebrew'), +(1232, 'he', 'eu', 'Hebrew'), +(1233, 'he', 'fa', 'Hebrew'), +(1234, 'he', 'fi', 'heprea'), +(1235, 'he', 'ga', 'Hebrew'), +(1236, 'he', 'he', 'עברית'), +(1237, 'he', 'hi', 'Hebrew'), +(1238, 'he', 'hr', 'Hebrew'), +(1239, 'he', 'hu', 'héber'), +(1240, 'he', 'hy', 'Hebrew'), +(1241, 'he', 'id', 'Hebrew'), +(1242, 'he', 'is', 'Hebrew'), +(1243, 'he', 'it', 'Ebraico'), +(1244, 'he', 'ja', 'ヘブライ語'), +(1245, 'he', 'ko', '히브리어'), +(1246, 'he', 'ku', 'Hebrew'), +(1247, 'he', 'la', 'Hebrew'), +(1248, 'he', 'lv', 'Hebrew'), +(1249, 'he', 'lt', 'Hebrew'), +(1250, 'he', 'mk', 'Hebrew'), +(1251, 'he', 'mt', 'Hebrew'), +(1252, 'he', 'mo', 'Hebrew'), +(1253, 'he', 'mn', 'Hebrew'), +(1254, 'he', 'ne', 'Hebrew'), +(1255, 'he', 'nl', 'Hebreeuws'), +(1256, 'he', 'nb', 'Hebrew'), +(1257, 'he', 'pa', 'Hebrew'), +(1258, 'he', 'pl', 'hebrajski'), +(1259, 'he', 'pt-pt', 'Hebraico'), +(1260, 'he', 'pt-br', 'Hebraico'), +(1261, 'he', 'qu', 'Hebrew'), +(1262, 'he', 'ro', 'Ebraică'), +(1263, 'he', 'ru', 'Иврит'), +(1264, 'he', 'sl', 'Hebrew'), +(1265, 'he', 'so', 'Hebrew'), +(1266, 'he', 'sq', 'Hebrew'), +(1267, 'he', 'sr', 'Hebrew'), +(1268, 'he', 'sv', 'Hebreiska'), +(1269, 'he', 'ta', 'Hebrew'), +(1270, 'he', 'th', 'ฮิบรู'), +(1271, 'he', 'tr', 'İbranice'), +(1272, 'he', 'uk', 'Hebrew'), +(1273, 'he', 'ur', 'Hebrew'), +(1274, 'he', 'uz', 'Hebrew'), +(1275, 'he', 'vi', 'Hebrew'), +(1276, 'he', 'yi', 'Hebrew'), +(1277, 'he', 'zh-hans', '希伯来语'), +(1278, 'he', 'zu', 'Hebrew'), +(1279, 'he', 'zh-hant', '希伯來語'), +(1280, 'he', 'ms', 'Hebrew'), +(1281, 'hi', 'en', 'Hindi'), +(1282, 'hi', 'es', 'Hindi'), +(1283, 'hi', 'de', 'Hindi'), +(1284, 'hi', 'fr', 'Hindi'), +(1285, 'hi', 'ar', 'الهندية'), +(1286, 'hi', 'bs', 'Hindi'), +(1287, 'hi', 'bg', 'Hindi'), +(1288, 'hi', 'ca', 'Hindi'), +(1289, 'hi', 'cs', 'Hindi'), +(1290, 'hi', 'sk', 'Hindčina'), +(1291, 'hi', 'cy', 'Hindi'), +(1292, 'hi', 'da', 'Hindi'), +(1293, 'hi', 'el', 'Ινδικα'), +(1294, 'hi', 'eo', 'Hindi'), +(1295, 'hi', 'et', 'Hindi'), +(1296, 'hi', 'eu', 'Hindi'), +(1297, 'hi', 'fa', 'Hindi'), +(1298, 'hi', 'fi', 'hindi'), +(1299, 'hi', 'ga', 'Hindi'), +(1300, 'hi', 'he', 'הודית'), +(1301, 'hi', 'hi', 'हिन्दी'), +(1302, 'hi', 'hr', 'Hindi'), +(1303, 'hi', 'hu', 'hindi'), +(1304, 'hi', 'hy', 'Hindi'), +(1305, 'hi', 'id', 'Hindi'), +(1306, 'hi', 'is', 'Hindi'), +(1307, 'hi', 'it', 'Hindi'), +(1308, 'hi', 'ja', 'ヒンディー語'), +(1309, 'hi', 'ko', '힌두어'), +(1310, 'hi', 'ku', 'Hindi'), +(1311, 'hi', 'la', 'Hindi'), +(1312, 'hi', 'lv', 'Hindi'), +(1313, 'hi', 'lt', 'Hindi'), +(1314, 'hi', 'mk', 'Hindi'), +(1315, 'hi', 'mt', 'Hindi'), +(1316, 'hi', 'mo', 'Hindi'), +(1317, 'hi', 'mn', 'Hindi'), +(1318, 'hi', 'ne', 'Hindi'), +(1319, 'hi', 'nl', 'Hindi'), +(1320, 'hi', 'nb', 'Hindi'), +(1321, 'hi', 'pa', 'Hindi'), +(1322, 'hi', 'pl', 'hindi'), +(1323, 'hi', 'pt-pt', 'Hindi'), +(1324, 'hi', 'pt-br', 'Hindi'), +(1325, 'hi', 'qu', 'Hindi'), +(1326, 'hi', 'ro', 'Hindi'), +(1327, 'hi', 'ru', 'Хинди'), +(1328, 'hi', 'sl', 'Hindi'), +(1329, 'hi', 'so', 'Hindi'), +(1330, 'hi', 'sq', 'Hindi'), +(1331, 'hi', 'sr', 'Hindi'), +(1332, 'hi', 'sv', 'Hindi'), +(1333, 'hi', 'ta', 'Hindi'), +(1334, 'hi', 'th', 'ฮินดิ'), +(1335, 'hi', 'tr', 'Hintçe'), +(1336, 'hi', 'uk', 'Hindi'), +(1337, 'hi', 'ur', 'Hindi'), +(1338, 'hi', 'uz', 'Hindi'), +(1339, 'hi', 'vi', 'Hindi'), +(1340, 'hi', 'yi', 'Hindi'), +(1341, 'hi', 'zh-hans', '印地语'), +(1342, 'hi', 'zu', 'Hindi'), +(1343, 'hi', 'zh-hant', '印地語'), +(1344, 'hi', 'ms', 'Hindi'), +(1345, 'hr', 'en', 'Croatian'), +(1346, 'hr', 'es', 'Croata'), +(1347, 'hr', 'de', 'Kroatisch'), +(1348, 'hr', 'fr', 'Croate'), +(1349, 'hr', 'ar', 'الكرواتية'), +(1350, 'hr', 'bs', 'Croatian'), +(1351, 'hr', 'bg', 'Croatian'), +(1352, 'hr', 'ca', 'Croatian'), +(1353, 'hr', 'cs', 'Croatian'), +(1354, 'hr', 'sk', 'Chorvátština'), +(1355, 'hr', 'cy', 'Croatian'), +(1356, 'hr', 'da', 'Croatian'), +(1357, 'hr', 'el', 'Κροατικα'), +(1358, 'hr', 'eo', 'Croatian'), +(1359, 'hr', 'et', 'Croatian'), +(1360, 'hr', 'eu', 'Croatian'), +(1361, 'hr', 'fa', 'Croatian'), +(1362, 'hr', 'fi', 'kroatia'), +(1363, 'hr', 'ga', 'Croatian'), +(1364, 'hr', 'he', 'קרוטאית'), +(1365, 'hr', 'hi', 'Croatian'), +(1366, 'hr', 'hr', 'Hrvatski'), +(1367, 'hr', 'hu', 'horvát'), +(1368, 'hr', 'hy', 'Croatian'), +(1369, 'hr', 'id', 'Croatian'), +(1370, 'hr', 'is', 'Croatian'), +(1371, 'hr', 'it', 'Croato'), +(1372, 'hr', 'ja', 'クロアチア語'), +(1373, 'hr', 'ko', '크로아시아어'), +(1374, 'hr', 'ku', 'Croatian'), +(1375, 'hr', 'la', 'Croatian'), +(1376, 'hr', 'lv', 'Croatian'), +(1377, 'hr', 'lt', 'Croatian'), +(1378, 'hr', 'mk', 'Croatian'), +(1379, 'hr', 'mt', 'Croatian'), +(1380, 'hr', 'mo', 'Croatian'), +(1381, 'hr', 'mn', 'Croatian'), +(1382, 'hr', 'ne', 'Croatian'), +(1383, 'hr', 'nl', 'Kroatisch'), +(1384, 'hr', 'nb', 'Croatian'), +(1385, 'hr', 'pa', 'Croatian'), +(1386, 'hr', 'pl', 'chorwacki'), +(1387, 'hr', 'pt-pt', 'Croata'), +(1388, 'hr', 'pt-br', 'Croata'), +(1389, 'hr', 'qu', 'Croatian'), +(1390, 'hr', 'ro', 'Croată'), +(1391, 'hr', 'ru', 'Хорватский'), +(1392, 'hr', 'sl', 'Croatian'), +(1393, 'hr', 'so', 'Croatian'), +(1394, 'hr', 'sq', 'Croatian'), +(1395, 'hr', 'sr', 'Croatian'), +(1396, 'hr', 'sv', 'Kroatiska'), +(1397, 'hr', 'ta', 'Croatian'), +(1398, 'hr', 'th', 'โครเอเชีย'), +(1399, 'hr', 'tr', 'Hırvatça'), +(1400, 'hr', 'uk', 'Croatian'), +(1401, 'hr', 'ur', 'Croatian'), +(1402, 'hr', 'uz', 'Croatian'), +(1403, 'hr', 'vi', 'Croatian'), +(1404, 'hr', 'yi', 'Croatian'), +(1405, 'hr', 'zh-hans', '克罗地亚语'), +(1406, 'hr', 'zu', 'Croatian'), +(1407, 'hr', 'zh-hant', '克羅地亞語'), +(1408, 'hr', 'ms', 'Croatian'), +(1409, 'hu', 'en', 'Hungarian'), +(1410, 'hu', 'es', 'Húngaro'), +(1411, 'hu', 'de', 'Ungarisch'), +(1412, 'hu', 'fr', 'Hongrois'), +(1413, 'hu', 'ar', 'الهنغارية'), +(1414, 'hu', 'bs', 'Hungarian'), +(1415, 'hu', 'bg', 'Hungarian'), +(1416, 'hu', 'ca', 'Hungarian'), +(1417, 'hu', 'cs', 'Hungarian'), +(1418, 'hu', 'sk', 'Maďarčina'), +(1419, 'hu', 'cy', 'Hungarian'), +(1420, 'hu', 'da', 'Hungarian'), +(1421, 'hu', 'el', 'Ουγγρικα'), +(1422, 'hu', 'eo', 'Hungarian'), +(1423, 'hu', 'et', 'Hungarian'), +(1424, 'hu', 'eu', 'Hungarian'), +(1425, 'hu', 'fa', 'Hungarian'), +(1426, 'hu', 'fi', 'unkari'), +(1427, 'hu', 'ga', 'Hungarian'), +(1428, 'hu', 'he', 'הונגרית'), +(1429, 'hu', 'hi', 'Hungarian'), +(1430, 'hu', 'hr', 'Hungarian'), +(1431, 'hu', 'hu', 'Magyar'), +(1432, 'hu', 'hy', 'Hungarian'), +(1433, 'hu', 'id', 'Hungarian'), +(1434, 'hu', 'is', 'Hungarian'), +(1435, 'hu', 'it', 'Ungherese'), +(1436, 'hu', 'ja', 'ハンガリー語'), +(1437, 'hu', 'ko', '헝가리어'), +(1438, 'hu', 'ku', 'Hungarian'), +(1439, 'hu', 'la', 'Hungarian'), +(1440, 'hu', 'lv', 'Hungarian'), +(1441, 'hu', 'lt', 'Hungarian'), +(1442, 'hu', 'mk', 'Hungarian'), +(1443, 'hu', 'mt', 'Hungarian'), +(1444, 'hu', 'mo', 'Hungarian'), +(1445, 'hu', 'mn', 'Hungarian'), +(1446, 'hu', 'ne', 'Hungarian'), +(1447, 'hu', 'nl', 'Hongaars'), +(1448, 'hu', 'nb', 'Hungarian'), +(1449, 'hu', 'pa', 'Hungarian'), +(1450, 'hu', 'pl', 'węgierski'), +(1451, 'hu', 'pt-pt', 'Húngaro'), +(1452, 'hu', 'pt-br', 'Húngaro'), +(1453, 'hu', 'qu', 'Hungarian'), +(1454, 'hu', 'ro', 'Ungară'), +(1455, 'hu', 'ru', 'Венгерский'), +(1456, 'hu', 'sl', 'Hungarian'), +(1457, 'hu', 'so', 'Hungarian'), +(1458, 'hu', 'sq', 'Hungarian'), +(1459, 'hu', 'sr', 'Hungarian'), +(1460, 'hu', 'sv', 'Ungerska'), +(1461, 'hu', 'ta', 'Hungarian'), +(1462, 'hu', 'th', 'ฮังการี'), +(1463, 'hu', 'tr', 'Macarca'), +(1464, 'hu', 'uk', 'Hungarian'), +(1465, 'hu', 'ur', 'Hungarian'), +(1466, 'hu', 'uz', 'Hungarian'), +(1467, 'hu', 'vi', 'Hungarian'), +(1468, 'hu', 'yi', 'Hungarian'), +(1469, 'hu', 'zh-hans', '匈牙利语'), +(1470, 'hu', 'zu', 'Hungarian'), +(1471, 'hu', 'zh-hant', '匈牙利語'), +(1472, 'hu', 'ms', 'Hungarian'), +(1473, 'hy', 'en', 'Armenian'), +(1474, 'hy', 'es', 'Armenio'), +(1475, 'hy', 'de', 'Armenisch'), +(1476, 'hy', 'fr', 'Arménien'), +(1477, 'hy', 'ar', 'الأرمينية'), +(1478, 'hy', 'bs', 'Armenian'), +(1479, 'hy', 'bg', 'Armenian'), +(1480, 'hy', 'ca', 'Armenian'), +(1481, 'hy', 'cs', 'Armenian'), +(1482, 'hy', 'sk', 'Arménčina'), +(1483, 'hy', 'cy', 'Armenian'), +(1484, 'hy', 'da', 'Armenian'), +(1485, 'hy', 'el', 'Αρμενικα'), +(1486, 'hy', 'eo', 'Armenian'), +(1487, 'hy', 'et', 'Armenian'), +(1488, 'hy', 'eu', 'Armenian'), +(1489, 'hy', 'fa', 'Armenian'), +(1490, 'hy', 'fi', 'armenia'), +(1491, 'hy', 'ga', 'Armenian'), +(1492, 'hy', 'he', 'Armenian'), +(1493, 'hy', 'hi', 'Armenian'), +(1494, 'hy', 'hr', 'Armenian'), +(1495, 'hy', 'hu', 'örmény'), +(1496, 'hy', 'hy', 'Armenian'), +(1497, 'hy', 'id', 'Armenian'), +(1498, 'hy', 'is', 'Armenian'), +(1499, 'hy', 'it', 'Armeno'), +(1500, 'hy', 'ja', 'アルメニア語'), +(1501, 'hy', 'ko', '아르메니아어'), +(1502, 'hy', 'ku', 'Armenian'), +(1503, 'hy', 'la', 'Armenian'), +(1504, 'hy', 'lv', 'Armenian'), +(1505, 'hy', 'lt', 'Armenian'), +(1506, 'hy', 'mk', 'Armenian'), +(1507, 'hy', 'mt', 'Armenian'), +(1508, 'hy', 'mo', 'Armenian'), +(1509, 'hy', 'mn', 'Armenian'), +(1510, 'hy', 'ne', 'Armenian'), +(1511, 'hy', 'nl', 'Armeens'), +(1512, 'hy', 'nb', 'Armenian'), +(1513, 'hy', 'pa', 'Armenian'), +(1514, 'hy', 'pl', 'ormiański'), +(1515, 'hy', 'pt-pt', 'Arménio'), +(1516, 'hy', 'pt-br', 'Arménio'), +(1517, 'hy', 'qu', 'Armenian'), +(1518, 'hy', 'ro', 'Armeană'), +(1519, 'hy', 'ru', 'Армянский'), +(1520, 'hy', 'sl', 'Armenian'), +(1521, 'hy', 'so', 'Armenian'), +(1522, 'hy', 'sq', 'Armenian'), +(1523, 'hy', 'sr', 'Armenian'), +(1524, 'hy', 'sv', 'Armeniska'), +(1525, 'hy', 'ta', 'Armenian'), +(1526, 'hy', 'th', 'อาร์เมเนีย'), +(1527, 'hy', 'tr', 'Ermenice'), +(1528, 'hy', 'uk', 'Armenian'), +(1529, 'hy', 'ur', 'Armenian'), +(1530, 'hy', 'uz', 'Armenian'), +(1531, 'hy', 'vi', 'Armenian'), +(1532, 'hy', 'yi', 'Armenian'), +(1533, 'hy', 'zh-hans', '亚美尼亚语'), +(1534, 'hy', 'zu', 'Armenian'), +(1535, 'hy', 'zh-hant', '亞美尼亞語'), +(1536, 'hy', 'ms', 'Armenian'), +(1537, 'id', 'en', 'Indonesian'), +(1538, 'id', 'es', 'Indonesio'), +(1539, 'id', 'de', 'Indonesisch'), +(1540, 'id', 'fr', 'Indonésien'), +(1541, 'id', 'ar', 'الأندونيسية'), +(1542, 'id', 'bs', 'Indonesian'), +(1543, 'id', 'bg', 'Indonesian'), +(1544, 'id', 'ca', 'Indonesian'), +(1545, 'id', 'cs', 'Indonesian'), +(1546, 'id', 'sk', 'Indonézčina'), +(1547, 'id', 'cy', 'Indonesian'), +(1548, 'id', 'da', 'Indonesian'), +(1549, 'id', 'el', 'Ινδονησιακα'), +(1550, 'id', 'eo', 'Indonesian'), +(1551, 'id', 'et', 'Indonesian'), +(1552, 'id', 'eu', 'Indonesian'), +(1553, 'id', 'fa', 'Indonesian'), +(1554, 'id', 'fi', 'indonesia'), +(1555, 'id', 'ga', 'Indonesian'), +(1556, 'id', 'he', 'Indonesian'), +(1557, 'id', 'hi', 'Indonesian'), +(1558, 'id', 'hr', 'Indonesian'), +(1559, 'id', 'hu', 'indonéz'), +(1560, 'id', 'hy', 'Indonesian'), +(1561, 'id', 'id', 'Indonesia'), +(1562, 'id', 'is', 'Indonesian'), +(1563, 'id', 'it', 'Indonesiano'), +(1564, 'id', 'ja', 'インドネシア語'), +(1565, 'id', 'ko', '인도네시아어'), +(1566, 'id', 'ku', 'Indonesian'), +(1567, 'id', 'la', 'Indonesian'), +(1568, 'id', 'lv', 'Indonesian'), +(1569, 'id', 'lt', 'Indonesian'), +(1570, 'id', 'mk', 'Indonesian'), +(1571, 'id', 'mt', 'Indonesian'), +(1572, 'id', 'mo', 'Indonesian'), +(1573, 'id', 'mn', 'Indonesian'), +(1574, 'id', 'ne', 'Indonesian'), +(1575, 'id', 'nl', 'Indonesisch'), +(1576, 'id', 'nb', 'Indonesian'), +(1577, 'id', 'pa', 'Indonesian'), +(1578, 'id', 'pl', 'indonezyjski'), +(1579, 'id', 'pt-pt', 'Indonésio'), +(1580, 'id', 'pt-br', 'Indonésio'), +(1581, 'id', 'qu', 'Indonesian'), +(1582, 'id', 'ro', 'Indoneziană'), +(1583, 'id', 'ru', 'Индонезийский'), +(1584, 'id', 'sl', 'Indonesian'), +(1585, 'id', 'so', 'Indonesian'), +(1586, 'id', 'sq', 'Indonesian'), +(1587, 'id', 'sr', 'Indonesian'), +(1588, 'id', 'sv', 'Indonesiska'), +(1589, 'id', 'ta', 'Indonesian'), +(1590, 'id', 'th', 'อินโดนีเซีย'), +(1591, 'id', 'tr', 'Endonezya dili'), +(1592, 'id', 'uk', 'Indonesian'), +(1593, 'id', 'ur', 'Indonesian'), +(1594, 'id', 'uz', 'Indonesian'), +(1595, 'id', 'vi', 'Indonesian'), +(1596, 'id', 'yi', 'Indonesian'), +(1597, 'id', 'zh-hans', '印度尼西亚语'), +(1598, 'id', 'zu', 'Indonesian'), +(1599, 'id', 'zh-hant', '印尼語'), +(1600, 'id', 'ms', 'Indonesian'), +(1601, 'is', 'en', 'Icelandic'), +(1602, 'is', 'es', 'Islandés'), +(1603, 'is', 'de', 'Isländisch'), +(1604, 'is', 'fr', 'Islandais'), +(1605, 'is', 'ar', 'الأيسلاندية'), +(1606, 'is', 'bs', 'Icelandic'), +(1607, 'is', 'bg', 'Icelandic'), +(1608, 'is', 'ca', 'Icelandic'), +(1609, 'is', 'cs', 'Icelandic'), +(1610, 'is', 'sk', 'Islančina'), +(1611, 'is', 'cy', 'Icelandic'), +(1612, 'is', 'da', 'Icelandic'), +(1613, 'is', 'el', 'Ισλανδικα'), +(1614, 'is', 'eo', 'Icelandic'), +(1615, 'is', 'et', 'Icelandic'), +(1616, 'is', 'eu', 'Icelandic'), +(1617, 'is', 'fa', 'Icelandic'), +(1618, 'is', 'fi', 'islanti'), +(1619, 'is', 'ga', 'Icelandic'), +(1620, 'is', 'he', 'Icelandic'), +(1621, 'is', 'hi', 'Icelandic'), +(1622, 'is', 'hr', 'Icelandic'), +(1623, 'is', 'hu', 'izlandi'), +(1624, 'is', 'hy', 'Icelandic'), +(1625, 'is', 'id', 'Icelandic'), +(1626, 'is', 'is', 'Íslenska'), +(1627, 'is', 'it', 'Islandese'), +(1628, 'is', 'ja', 'アイスランド語'), +(1629, 'is', 'ko', '아이슬랜드어'), +(1630, 'is', 'ku', 'Icelandic'), +(1631, 'is', 'la', 'Icelandic'), +(1632, 'is', 'lv', 'Icelandic'), +(1633, 'is', 'lt', 'Icelandic'), +(1634, 'is', 'mk', 'Icelandic'), +(1635, 'is', 'mt', 'Icelandic'), +(1636, 'is', 'mo', 'Icelandic'), +(1637, 'is', 'mn', 'Icelandic'), +(1638, 'is', 'ne', 'Icelandic'), +(1639, 'is', 'nl', 'Ijslands'), +(1640, 'is', 'nb', 'Icelandic'), +(1641, 'is', 'pa', 'Icelandic'), +(1642, 'is', 'pl', 'islandzki'), +(1643, 'is', 'pt-pt', 'Islandês'), +(1644, 'is', 'pt-br', 'Islandês'), +(1645, 'is', 'qu', 'Icelandic'), +(1646, 'is', 'ro', 'Islandeză'), +(1647, 'is', 'ru', 'Исландский'), +(1648, 'is', 'sl', 'Icelandic'), +(1649, 'is', 'so', 'Icelandic'), +(1650, 'is', 'sq', 'Icelandic'), +(1651, 'is', 'sr', 'Icelandic'), +(1652, 'is', 'sv', 'Isländska'), +(1653, 'is', 'ta', 'Icelandic'), +(1654, 'is', 'th', 'ไอซ์แลนด์'), +(1655, 'is', 'tr', 'İzlandaca'), +(1656, 'is', 'uk', 'Icelandic'), +(1657, 'is', 'ur', 'Icelandic'), +(1658, 'is', 'uz', 'Icelandic'), +(1659, 'is', 'vi', 'Icelandic'), +(1660, 'is', 'yi', 'Icelandic'), +(1661, 'is', 'zh-hans', '冰岛语'), +(1662, 'is', 'zu', 'Icelandic'), +(1663, 'is', 'zh-hant', '冰島語'), +(1664, 'is', 'ms', 'Icelandic'), +(1665, 'it', 'en', 'Italian'), +(1666, 'it', 'es', 'Italiano'), +(1667, 'it', 'de', 'Italienisch'), +(1668, 'it', 'fr', 'Italien'), +(1669, 'it', 'ar', 'الإيطالية'), +(1670, 'it', 'bs', 'Italian'), +(1671, 'it', 'bg', 'Italian'); +INSERT INTO `drgrp_icl_languages_translations` (`id`, `language_code`, `display_language_code`, `name`) VALUES +(1672, 'it', 'ca', 'Italian'), +(1673, 'it', 'cs', 'Italian'), +(1674, 'it', 'sk', 'Taliančina'), +(1675, 'it', 'cy', 'Italian'), +(1676, 'it', 'da', 'Italian'), +(1677, 'it', 'el', 'Ιταλικα'), +(1678, 'it', 'eo', 'Italian'), +(1679, 'it', 'et', 'Italian'), +(1680, 'it', 'eu', 'Italian'), +(1681, 'it', 'fa', 'Italian'), +(1682, 'it', 'fi', 'italia'), +(1683, 'it', 'ga', 'Italian'), +(1684, 'it', 'he', 'איטלקית'), +(1685, 'it', 'hi', 'Italian'), +(1686, 'it', 'hr', 'Italian'), +(1687, 'it', 'hu', 'olasz'), +(1688, 'it', 'hy', 'Italian'), +(1689, 'it', 'id', 'Italian'), +(1690, 'it', 'is', 'Italian'), +(1691, 'it', 'it', 'Italiano'), +(1692, 'it', 'ja', 'イタリア語'), +(1693, 'it', 'ko', '이태리어'), +(1694, 'it', 'ku', 'Italian'), +(1695, 'it', 'la', 'Italian'), +(1696, 'it', 'lv', 'Italian'), +(1697, 'it', 'lt', 'Italian'), +(1698, 'it', 'mk', 'Italian'), +(1699, 'it', 'mt', 'Italian'), +(1700, 'it', 'mo', 'Italian'), +(1701, 'it', 'mn', 'Italian'), +(1702, 'it', 'ne', 'Italian'), +(1703, 'it', 'nl', 'Italiaans'), +(1704, 'it', 'nb', 'Italian'), +(1705, 'it', 'pa', 'Italian'), +(1706, 'it', 'pl', 'włoski'), +(1707, 'it', 'pt-pt', 'Italiano'), +(1708, 'it', 'pt-br', 'Italiano'), +(1709, 'it', 'qu', 'Italian'), +(1710, 'it', 'ro', 'Italiană'), +(1711, 'it', 'ru', 'Итальянский'), +(1712, 'it', 'sl', 'Italian'), +(1713, 'it', 'so', 'Italian'), +(1714, 'it', 'sq', 'Italian'), +(1715, 'it', 'sr', 'Italian'), +(1716, 'it', 'sv', 'Italienska'), +(1717, 'it', 'ta', 'Italian'), +(1718, 'it', 'th', 'อิตาลี'), +(1719, 'it', 'tr', 'İtalyanca'), +(1720, 'it', 'uk', 'Italian'), +(1721, 'it', 'ur', 'Italian'), +(1722, 'it', 'uz', 'Italian'), +(1723, 'it', 'vi', 'Italian'), +(1724, 'it', 'yi', 'Italian'), +(1725, 'it', 'zh-hans', '意大利语'), +(1726, 'it', 'zu', 'Italian'), +(1727, 'it', 'zh-hant', '義大利語'), +(1728, 'it', 'ms', 'Italian'), +(1729, 'ja', 'en', 'Japanese'), +(1730, 'ja', 'es', 'Japonés'), +(1731, 'ja', 'de', 'Japanisch'), +(1732, 'ja', 'fr', 'Japonais'), +(1733, 'ja', 'ar', 'اليابانية'), +(1734, 'ja', 'bs', 'Japanese'), +(1735, 'ja', 'bg', 'Japanese'), +(1736, 'ja', 'ca', 'Japanese'), +(1737, 'ja', 'cs', 'Japanese'), +(1738, 'ja', 'sk', 'Japonština'), +(1739, 'ja', 'cy', 'Japanese'), +(1740, 'ja', 'da', 'Japanese'), +(1741, 'ja', 'el', 'Ιαπωνικα'), +(1742, 'ja', 'eo', 'Japanese'), +(1743, 'ja', 'et', 'Japanese'), +(1744, 'ja', 'eu', 'Japanese'), +(1745, 'ja', 'fa', 'Japanese'), +(1746, 'ja', 'fi', 'japani'), +(1747, 'ja', 'ga', 'Japanese'), +(1748, 'ja', 'he', 'יפנית'), +(1749, 'ja', 'hi', 'Japanese'), +(1750, 'ja', 'hr', 'Japanese'), +(1751, 'ja', 'hu', 'japán'), +(1752, 'ja', 'hy', 'Japanese'), +(1753, 'ja', 'id', 'Japanese'), +(1754, 'ja', 'is', 'Japanese'), +(1755, 'ja', 'it', 'Giapponese'), +(1756, 'ja', 'ja', '日本語'), +(1757, 'ja', 'ko', '일어'), +(1758, 'ja', 'ku', 'Japanese'), +(1759, 'ja', 'la', 'Japanese'), +(1760, 'ja', 'lv', 'Japanese'), +(1761, 'ja', 'lt', 'Japanese'), +(1762, 'ja', 'mk', 'Japanese'), +(1763, 'ja', 'mt', 'Japanese'), +(1764, 'ja', 'mo', 'Japanese'), +(1765, 'ja', 'mn', 'Japanese'), +(1766, 'ja', 'ne', 'Japanese'), +(1767, 'ja', 'nl', 'Japans'), +(1768, 'ja', 'nb', 'Japanese'), +(1769, 'ja', 'pa', 'Japanese'), +(1770, 'ja', 'pl', 'japoński'), +(1771, 'ja', 'pt-pt', 'Japonês'), +(1772, 'ja', 'pt-br', 'Japonês'), +(1773, 'ja', 'qu', 'Japanese'), +(1774, 'ja', 'ro', 'Japoneză'), +(1775, 'ja', 'ru', 'Японский'), +(1776, 'ja', 'sl', 'Japanese'), +(1777, 'ja', 'so', 'Japanese'), +(1778, 'ja', 'sq', 'Japanese'), +(1779, 'ja', 'sr', 'Japanese'), +(1780, 'ja', 'sv', 'Japanska'), +(1781, 'ja', 'ta', 'Japanese'), +(1782, 'ja', 'th', 'ญี่ปุ่น'), +(1783, 'ja', 'tr', 'Japonca'), +(1784, 'ja', 'uk', 'Japanese'), +(1785, 'ja', 'ur', 'Japanese'), +(1786, 'ja', 'uz', 'Japanese'), +(1787, 'ja', 'vi', 'Japanese'), +(1788, 'ja', 'yi', 'Japanese'), +(1789, 'ja', 'zh-hans', '日语'), +(1790, 'ja', 'zu', 'Japanese'), +(1791, 'ja', 'zh-hant', '日語'), +(1792, 'ja', 'ms', 'Japanese'), +(1793, 'ko', 'en', 'Korean'), +(1794, 'ko', 'es', 'Coreano'), +(1795, 'ko', 'de', 'Koreanisch'), +(1796, 'ko', 'fr', 'Coréen'), +(1797, 'ko', 'ar', 'الكورية'), +(1798, 'ko', 'bs', 'Korean'), +(1799, 'ko', 'bg', 'Korean'), +(1800, 'ko', 'ca', 'Korean'), +(1801, 'ko', 'cs', 'Korean'), +(1802, 'ko', 'sk', 'Kórejčina'), +(1803, 'ko', 'cy', 'Korean'), +(1804, 'ko', 'da', 'Korean'), +(1805, 'ko', 'el', 'Κορεατικα'), +(1806, 'ko', 'eo', 'Korean'), +(1807, 'ko', 'et', 'Korean'), +(1808, 'ko', 'eu', 'Korean'), +(1809, 'ko', 'fa', 'Korean'), +(1810, 'ko', 'fi', 'korea'), +(1811, 'ko', 'ga', 'Korean'), +(1812, 'ko', 'he', 'קוראנית'), +(1813, 'ko', 'hi', 'Korean'), +(1814, 'ko', 'hr', 'Korean'), +(1815, 'ko', 'hu', 'koreai'), +(1816, 'ko', 'hy', 'Korean'), +(1817, 'ko', 'id', 'Korean'), +(1818, 'ko', 'is', 'Korean'), +(1819, 'ko', 'it', 'Coreano'), +(1820, 'ko', 'ja', '韓国語'), +(1821, 'ko', 'ko', '한국어'), +(1822, 'ko', 'ku', 'Korean'), +(1823, 'ko', 'la', 'Korean'), +(1824, 'ko', 'lv', 'Korean'), +(1825, 'ko', 'lt', 'Korean'), +(1826, 'ko', 'mk', 'Korean'), +(1827, 'ko', 'mt', 'Korean'), +(1828, 'ko', 'mo', 'Korean'), +(1829, 'ko', 'mn', 'Korean'), +(1830, 'ko', 'ne', 'Korean'), +(1831, 'ko', 'nl', 'Koreaans'), +(1832, 'ko', 'nb', 'Korean'), +(1833, 'ko', 'pa', 'Korean'), +(1834, 'ko', 'pl', 'koreański'), +(1835, 'ko', 'pt-pt', 'Korean'), +(1836, 'ko', 'pt-br', 'Korean'), +(1837, 'ko', 'qu', 'Korean'), +(1838, 'ko', 'ro', 'Coreană'), +(1839, 'ko', 'ru', 'Корейский'), +(1840, 'ko', 'sl', 'Korean'), +(1841, 'ko', 'so', 'Korean'), +(1842, 'ko', 'sq', 'Korean'), +(1843, 'ko', 'sr', 'Korean'), +(1844, 'ko', 'sv', 'Koreanska'), +(1845, 'ko', 'ta', 'Korean'), +(1846, 'ko', 'th', 'เกาหลี'), +(1847, 'ko', 'tr', 'Kore dili'), +(1848, 'ko', 'uk', 'Korean'), +(1849, 'ko', 'ur', 'Korean'), +(1850, 'ko', 'uz', 'Korean'), +(1851, 'ko', 'vi', 'Korean'), +(1852, 'ko', 'yi', 'Korean'), +(1853, 'ko', 'zh-hans', '韩语'), +(1854, 'ko', 'zu', 'Korean'), +(1855, 'ko', 'zh-hant', '韓語'), +(1856, 'ko', 'ms', 'Korean'), +(1857, 'ku', 'en', 'Kurdish'), +(1858, 'ku', 'es', 'Kurdo'), +(1859, 'ku', 'de', 'Kurdisch'), +(1860, 'ku', 'fr', 'Kurde'), +(1861, 'ku', 'ar', 'الكردية'), +(1862, 'ku', 'bs', 'Kurdish'), +(1863, 'ku', 'bg', 'Kurdish'), +(1864, 'ku', 'ca', 'Kurdish'), +(1865, 'ku', 'cs', 'Kurdish'), +(1866, 'ku', 'sk', 'Kurdština'), +(1867, 'ku', 'cy', 'Kurdish'), +(1868, 'ku', 'da', 'Kurdish'), +(1869, 'ku', 'el', 'Κουρδικα'), +(1870, 'ku', 'eo', 'Kurdish'), +(1871, 'ku', 'et', 'Kurdish'), +(1872, 'ku', 'eu', 'Kurdish'), +(1873, 'ku', 'fa', 'Kurdish'), +(1874, 'ku', 'fi', 'kurdi'), +(1875, 'ku', 'ga', 'Kurdish'), +(1876, 'ku', 'he', 'Kurdish'), +(1877, 'ku', 'hi', 'Kurdish'), +(1878, 'ku', 'hr', 'Kurdish'), +(1879, 'ku', 'hu', 'kurd'), +(1880, 'ku', 'hy', 'Kurdish'), +(1881, 'ku', 'id', 'Kurdish'), +(1882, 'ku', 'is', 'Kurdish'), +(1883, 'ku', 'it', 'Curdo'), +(1884, 'ku', 'ja', 'クルド語'), +(1885, 'ku', 'ko', '쿠르드어'), +(1886, 'ku', 'ku', 'Kurdish'), +(1887, 'ku', 'la', 'Kurdish'), +(1888, 'ku', 'lv', 'Kurdish'), +(1889, 'ku', 'lt', 'Kurdish'), +(1890, 'ku', 'mk', 'Kurdish'), +(1891, 'ku', 'mt', 'Kurdish'), +(1892, 'ku', 'mo', 'Kurdish'), +(1893, 'ku', 'mn', 'Kurdish'), +(1894, 'ku', 'ne', 'Kurdish'), +(1895, 'ku', 'nl', 'Koerdish'), +(1896, 'ku', 'nb', 'Kurdish'), +(1897, 'ku', 'pa', 'Kurdish'), +(1898, 'ku', 'pl', 'kurdyjski'), +(1899, 'ku', 'pt-pt', 'Curdo'), +(1900, 'ku', 'pt-br', 'Curdo'), +(1901, 'ku', 'qu', 'Kurdish'), +(1902, 'ku', 'ro', 'Kurdă'), +(1903, 'ku', 'ru', 'Курдский'), +(1904, 'ku', 'sl', 'Kurdish'), +(1905, 'ku', 'so', 'Kurdish'), +(1906, 'ku', 'sq', 'Kurdish'), +(1907, 'ku', 'sr', 'Kurdish'), +(1908, 'ku', 'sv', 'Kurdiska'), +(1909, 'ku', 'ta', 'Kurdish'), +(1910, 'ku', 'th', 'เคอร์ดิช'), +(1911, 'ku', 'tr', 'Kürtçe'), +(1912, 'ku', 'uk', 'Kurdish'), +(1913, 'ku', 'ur', 'Kurdish'), +(1914, 'ku', 'uz', 'Kurdish'), +(1915, 'ku', 'vi', 'Kurdish'), +(1916, 'ku', 'yi', 'Kurdish'), +(1917, 'ku', 'zh-hans', '库尔德语'), +(1918, 'ku', 'zu', 'Kurdish'), +(1919, 'ku', 'zh-hant', '庫爾德語'), +(1920, 'ku', 'ms', 'Kurdish'), +(1921, 'la', 'en', 'Latin'), +(1922, 'la', 'es', 'Latín'), +(1923, 'la', 'de', 'Latein'), +(1924, 'la', 'fr', 'Latin'), +(1925, 'la', 'ar', 'اللاتينية'), +(1926, 'la', 'bs', 'Latin'), +(1927, 'la', 'bg', 'Latin'), +(1928, 'la', 'ca', 'Latin'), +(1929, 'la', 'cs', 'Latin'), +(1930, 'la', 'sk', 'Latinčina'), +(1931, 'la', 'cy', 'Latin'), +(1932, 'la', 'da', 'Latin'), +(1933, 'la', 'el', 'Λατινικη'), +(1934, 'la', 'eo', 'Latin'), +(1935, 'la', 'et', 'Latin'), +(1936, 'la', 'eu', 'Latin'), +(1937, 'la', 'fa', 'Latin'), +(1938, 'la', 'fi', 'latina'), +(1939, 'la', 'ga', 'Latin'), +(1940, 'la', 'he', 'לטינית'), +(1941, 'la', 'hi', 'Latin'), +(1942, 'la', 'hr', 'Latin'), +(1943, 'la', 'hu', 'latin'), +(1944, 'la', 'hy', 'Latin'), +(1945, 'la', 'id', 'Latin'), +(1946, 'la', 'is', 'Latin'), +(1947, 'la', 'it', 'Latino'), +(1948, 'la', 'ja', 'ラテン語'), +(1949, 'la', 'ko', '라틴어'), +(1950, 'la', 'ku', 'Latin'), +(1951, 'la', 'la', 'Latin'), +(1952, 'la', 'lv', 'Latin'), +(1953, 'la', 'lt', 'Latin'), +(1954, 'la', 'mk', 'Latin'), +(1955, 'la', 'mt', 'Latin'), +(1956, 'la', 'mo', 'Latin'), +(1957, 'la', 'mn', 'Latin'), +(1958, 'la', 'ne', 'Latin'), +(1959, 'la', 'nl', 'Latijn'), +(1960, 'la', 'nb', 'Latin'), +(1961, 'la', 'pa', 'Latin'), +(1962, 'la', 'pl', 'łaciński'), +(1963, 'la', 'pt-pt', 'Latina'), +(1964, 'la', 'pt-br', 'Latina'), +(1965, 'la', 'qu', 'Latin'), +(1966, 'la', 'ro', 'Latină'), +(1967, 'la', 'ru', 'Латинский'), +(1968, 'la', 'sl', 'Latin'), +(1969, 'la', 'so', 'Latin'), +(1970, 'la', 'sq', 'Latin'), +(1971, 'la', 'sr', 'Latin'), +(1972, 'la', 'sv', 'Latin'), +(1973, 'la', 'ta', 'Latin'), +(1974, 'la', 'th', 'ละติน'), +(1975, 'la', 'tr', 'Latince'), +(1976, 'la', 'uk', 'Latin'), +(1977, 'la', 'ur', 'Latin'), +(1978, 'la', 'uz', 'Latin'), +(1979, 'la', 'vi', 'Latin'), +(1980, 'la', 'yi', 'Latin'), +(1981, 'la', 'zh-hans', '拉丁语'), +(1982, 'la', 'zu', 'Latin'), +(1983, 'la', 'zh-hant', '拉丁語'), +(1984, 'la', 'ms', 'Latin'), +(1985, 'lv', 'en', 'Latvian'), +(1986, 'lv', 'es', 'Letón'), +(1987, 'lv', 'de', 'Lettisch'), +(1988, 'lv', 'fr', 'Letton'), +(1989, 'lv', 'ar', 'اللاتفية'), +(1990, 'lv', 'bs', 'Latvian'), +(1991, 'lv', 'bg', 'Latvian'), +(1992, 'lv', 'ca', 'Latvian'), +(1993, 'lv', 'cs', 'Latvian'), +(1994, 'lv', 'sk', 'Lotyština'), +(1995, 'lv', 'cy', 'Latvian'), +(1996, 'lv', 'da', 'Latvian'), +(1997, 'lv', 'el', 'Λετονικα'), +(1998, 'lv', 'eo', 'Latvian'), +(1999, 'lv', 'et', 'Latvian'), +(2000, 'lv', 'eu', 'Latvian'), +(2001, 'lv', 'fa', 'Latvian'), +(2002, 'lv', 'fi', 'latvia'), +(2003, 'lv', 'ga', 'Latvian'), +(2004, 'lv', 'he', 'Latvian'), +(2005, 'lv', 'hi', 'Latvian'), +(2006, 'lv', 'hr', 'Latvian'), +(2007, 'lv', 'hu', 'lett'), +(2008, 'lv', 'hy', 'Latvian'), +(2009, 'lv', 'id', 'Latvian'), +(2010, 'lv', 'is', 'Latvian'), +(2011, 'lv', 'it', 'Lettone'), +(2012, 'lv', 'ja', 'ラトビア語'), +(2013, 'lv', 'ko', '라트비아어'), +(2014, 'lv', 'ku', 'Latvian'), +(2015, 'lv', 'la', 'Latvian'), +(2016, 'lv', 'lv', 'Latviešu'), +(2017, 'lv', 'lt', 'Latvian'), +(2018, 'lv', 'mk', 'Latvian'), +(2019, 'lv', 'mt', 'Latvian'), +(2020, 'lv', 'mo', 'Latvian'), +(2021, 'lv', 'mn', 'Latvian'), +(2022, 'lv', 'ne', 'Latvian'), +(2023, 'lv', 'nl', 'Lets'), +(2024, 'lv', 'nb', 'Latvian'), +(2025, 'lv', 'pa', 'Latvian'), +(2026, 'lv', 'pl', 'łotewski'), +(2027, 'lv', 'pt-pt', 'Letão'), +(2028, 'lv', 'pt-br', 'Letão'), +(2029, 'lv', 'qu', 'Latvian'), +(2030, 'lv', 'ro', 'Letoniană'), +(2031, 'lv', 'ru', 'латышский'), +(2032, 'lv', 'sl', 'Latvian'), +(2033, 'lv', 'so', 'Latvian'), +(2034, 'lv', 'sq', 'Latvian'), +(2035, 'lv', 'sr', 'Latvian'), +(2036, 'lv', 'sv', 'Lettiska'), +(2037, 'lv', 'ta', 'Latvian'), +(2038, 'lv', 'th', 'ลัตเวีย'), +(2039, 'lv', 'tr', 'Letonca'), +(2040, 'lv', 'uk', 'Latvian'), +(2041, 'lv', 'ur', 'Latvian'), +(2042, 'lv', 'uz', 'Latvian'), +(2043, 'lv', 'vi', 'Latvian'), +(2044, 'lv', 'yi', 'Latvian'), +(2045, 'lv', 'zh-hans', '拉脱维亚语'), +(2046, 'lv', 'zu', 'Latvian'), +(2047, 'lv', 'zh-hant', '拉脫維亞語'), +(2048, 'lv', 'ms', 'Latvian'), +(2049, 'lt', 'en', 'Lithuanian'), +(2050, 'lt', 'es', 'Lituano'), +(2051, 'lt', 'de', 'Litauisch'), +(2052, 'lt', 'fr', 'Lituanien'), +(2053, 'lt', 'ar', 'اللتوانية'), +(2054, 'lt', 'bs', 'Lithuanian'), +(2055, 'lt', 'bg', 'Lithuanian'), +(2056, 'lt', 'ca', 'Lithuanian'), +(2057, 'lt', 'cs', 'Lithuanian'), +(2058, 'lt', 'sk', 'Litovčina'), +(2059, 'lt', 'cy', 'Lithuanian'), +(2060, 'lt', 'da', 'Lithuanian'), +(2061, 'lt', 'el', 'Λιθουανικα'), +(2062, 'lt', 'eo', 'Lithuanian'), +(2063, 'lt', 'et', 'Lithuanian'), +(2064, 'lt', 'eu', 'Lithuanian'), +(2065, 'lt', 'fa', 'Lithuanian'), +(2066, 'lt', 'fi', 'liettua'), +(2067, 'lt', 'ga', 'Lithuanian'), +(2068, 'lt', 'he', 'Lithuanian'), +(2069, 'lt', 'hi', 'Lithuanian'), +(2070, 'lt', 'hr', 'Lithuanian'), +(2071, 'lt', 'hu', 'litván'), +(2072, 'lt', 'hy', 'Lithuanian'), +(2073, 'lt', 'id', 'Lithuanian'), +(2074, 'lt', 'is', 'Lithuanian'), +(2075, 'lt', 'it', 'Lituano'), +(2076, 'lt', 'ja', 'リトアニア語'), +(2077, 'lt', 'ko', '리투아니아어'), +(2078, 'lt', 'ku', 'Lithuanian'), +(2079, 'lt', 'la', 'Lithuanian'), +(2080, 'lt', 'lv', 'Lithuanian'), +(2081, 'lt', 'lt', 'Lithuanian'), +(2082, 'lt', 'mk', 'Lithuanian'), +(2083, 'lt', 'mt', 'Lithuanian'), +(2084, 'lt', 'mo', 'Lithuanian'), +(2085, 'lt', 'mn', 'Lithuanian'), +(2086, 'lt', 'ne', 'Lithuanian'), +(2087, 'lt', 'nl', 'Litouws'), +(2088, 'lt', 'nb', 'Lithuanian'), +(2089, 'lt', 'pa', 'Lithuanian'), +(2090, 'lt', 'pl', 'litewski'), +(2091, 'lt', 'pt-pt', 'Lituano'), +(2092, 'lt', 'pt-br', 'Lituano'), +(2093, 'lt', 'qu', 'Lithuanian'), +(2094, 'lt', 'ro', 'Lituaniană'), +(2095, 'lt', 'ru', 'Литовский'), +(2096, 'lt', 'sl', 'Lithuanian'), +(2097, 'lt', 'so', 'Lithuanian'), +(2098, 'lt', 'sq', 'Lithuanian'), +(2099, 'lt', 'sr', 'Lithuanian'), +(2100, 'lt', 'sv', 'Litauiska'), +(2101, 'lt', 'ta', 'Lithuanian'), +(2102, 'lt', 'th', 'ลิธัวเนีย'), +(2103, 'lt', 'tr', 'Litvanyaca'), +(2104, 'lt', 'uk', 'Lithuanian'), +(2105, 'lt', 'ur', 'Lithuanian'), +(2106, 'lt', 'uz', 'Lithuanian'), +(2107, 'lt', 'vi', 'Lithuanian'), +(2108, 'lt', 'yi', 'Lithuanian'), +(2109, 'lt', 'zh-hans', '立陶宛语'), +(2110, 'lt', 'zu', 'Lithuanian'), +(2111, 'lt', 'zh-hant', '立陶宛語'), +(2112, 'lt', 'ms', 'Lithuanian'), +(2113, 'mk', 'en', 'Macedonian'), +(2114, 'mk', 'es', 'Macedonio'), +(2115, 'mk', 'de', 'Mazedonisch'), +(2116, 'mk', 'fr', 'Macédonien'), +(2117, 'mk', 'ar', 'المقدونية'), +(2118, 'mk', 'bs', 'Macedonian'), +(2119, 'mk', 'bg', 'Macedonian'), +(2120, 'mk', 'ca', 'Macedonian'), +(2121, 'mk', 'cs', 'Macedonian'), +(2122, 'mk', 'sk', 'Macedónština'), +(2123, 'mk', 'cy', 'Macedonian'), +(2124, 'mk', 'da', 'Macedonian'), +(2125, 'mk', 'el', 'Μακεδονικο'), +(2126, 'mk', 'eo', 'Macedonian'), +(2127, 'mk', 'et', 'Macedonian'), +(2128, 'mk', 'eu', 'Macedonian'), +(2129, 'mk', 'fa', 'Macedonian'), +(2130, 'mk', 'fi', 'makedonia'), +(2131, 'mk', 'ga', 'Macedonian'), +(2132, 'mk', 'he', 'Macedonian'), +(2133, 'mk', 'hi', 'Macedonian'), +(2134, 'mk', 'hr', 'Macedonian'), +(2135, 'mk', 'hu', 'macedón'), +(2136, 'mk', 'hy', 'Macedonian'), +(2137, 'mk', 'id', 'Macedonian'), +(2138, 'mk', 'is', 'Macedonian'), +(2139, 'mk', 'it', 'Macedone'), +(2140, 'mk', 'ja', 'マケドニア語'), +(2141, 'mk', 'ko', '마케도니아어'), +(2142, 'mk', 'ku', 'Macedonian'), +(2143, 'mk', 'la', 'Macedonian'), +(2144, 'mk', 'lv', 'Macedonian'), +(2145, 'mk', 'lt', 'Macedonian'), +(2146, 'mk', 'mk', 'Macedonian'), +(2147, 'mk', 'mt', 'Macedonian'), +(2148, 'mk', 'mo', 'Macedonian'), +(2149, 'mk', 'mn', 'Macedonian'), +(2150, 'mk', 'ne', 'Macedonian'), +(2151, 'mk', 'nl', 'Macedonisch'), +(2152, 'mk', 'nb', 'Macedonian'), +(2153, 'mk', 'pa', 'Macedonian'), +(2154, 'mk', 'pl', 'macedoński'), +(2155, 'mk', 'pt-pt', 'Macedônio'), +(2156, 'mk', 'pt-br', 'Macedônio'), +(2157, 'mk', 'qu', 'Macedonian'), +(2158, 'mk', 'ro', 'Macedoniană'), +(2159, 'mk', 'ru', 'Македонский'), +(2160, 'mk', 'sl', 'Macedonian'), +(2161, 'mk', 'so', 'Macedonian'), +(2162, 'mk', 'sq', 'Macedonian'), +(2163, 'mk', 'sr', 'Macedonian'), +(2164, 'mk', 'sv', 'Makedonska'), +(2165, 'mk', 'ta', 'Macedonian'), +(2166, 'mk', 'th', 'มาซิโดเนีย'), +(2167, 'mk', 'tr', 'Makedonyaca'), +(2168, 'mk', 'uk', 'Macedonian'), +(2169, 'mk', 'ur', 'Macedonian'), +(2170, 'mk', 'uz', 'Macedonian'), +(2171, 'mk', 'vi', 'Macedonian'), +(2172, 'mk', 'yi', 'Macedonian'), +(2173, 'mk', 'zh-hans', '马其顿语'), +(2174, 'mk', 'zu', 'Macedonian'), +(2175, 'mk', 'zh-hant', '馬其頓語'), +(2176, 'mk', 'ms', 'Macedonian'), +(2177, 'mt', 'en', 'Maltese'), +(2178, 'mt', 'es', 'Maltés'), +(2179, 'mt', 'de', 'Maltesisch'), +(2180, 'mt', 'fr', 'Maltais'), +(2181, 'mt', 'ar', 'المالطية'), +(2182, 'mt', 'bs', 'Maltese'), +(2183, 'mt', 'bg', 'Maltese'), +(2184, 'mt', 'ca', 'Maltese'), +(2185, 'mt', 'cs', 'Maltese'), +(2186, 'mt', 'sk', 'Maltézština'), +(2187, 'mt', 'cy', 'Maltese'), +(2188, 'mt', 'da', 'Maltese'), +(2189, 'mt', 'el', 'Μαλτεζικα'), +(2190, 'mt', 'eo', 'Maltese'), +(2191, 'mt', 'et', 'Maltese'), +(2192, 'mt', 'eu', 'Maltese'), +(2193, 'mt', 'fa', 'Maltese'), +(2194, 'mt', 'fi', 'malta'), +(2195, 'mt', 'ga', 'Maltese'), +(2196, 'mt', 'he', 'Maltese'), +(2197, 'mt', 'hi', 'Maltese'), +(2198, 'mt', 'hr', 'Maltese'), +(2199, 'mt', 'hu', 'máltai'), +(2200, 'mt', 'hy', 'Maltese'), +(2201, 'mt', 'id', 'Maltese'), +(2202, 'mt', 'is', 'Maltese'), +(2203, 'mt', 'it', 'Maltese'), +(2204, 'mt', 'ja', 'マルタ語'), +(2205, 'mt', 'ko', '몰타어'), +(2206, 'mt', 'ku', 'Maltese'), +(2207, 'mt', 'la', 'Maltese'), +(2208, 'mt', 'lv', 'Maltese'), +(2209, 'mt', 'lt', 'Maltese'), +(2210, 'mt', 'mk', 'Maltese'), +(2211, 'mt', 'mt', 'Maltese'), +(2212, 'mt', 'mo', 'Maltese'), +(2213, 'mt', 'mn', 'Maltese'), +(2214, 'mt', 'ne', 'Maltese'), +(2215, 'mt', 'nl', 'Maltees'), +(2216, 'mt', 'nb', 'Maltese'), +(2217, 'mt', 'pa', 'Maltese'), +(2218, 'mt', 'pl', 'maltański'), +(2219, 'mt', 'pt-pt', 'Maltês'), +(2220, 'mt', 'pt-br', 'Maltês'), +(2221, 'mt', 'qu', 'Maltese'), +(2222, 'mt', 'ro', 'Malteză'), +(2223, 'mt', 'ru', 'Мальтийский'), +(2224, 'mt', 'sl', 'Maltese'), +(2225, 'mt', 'so', 'Maltese'), +(2226, 'mt', 'sq', 'Maltese'), +(2227, 'mt', 'sr', 'Maltese'), +(2228, 'mt', 'sv', 'Maltesiska'), +(2229, 'mt', 'ta', 'Maltese'), +(2230, 'mt', 'th', 'มอลทีส'), +(2231, 'mt', 'tr', 'Malta dili'), +(2232, 'mt', 'uk', 'Maltese'), +(2233, 'mt', 'ur', 'Maltese'), +(2234, 'mt', 'uz', 'Maltese'), +(2235, 'mt', 'vi', 'Maltese'), +(2236, 'mt', 'yi', 'Maltese'), +(2237, 'mt', 'zh-hans', '马耳他语'), +(2238, 'mt', 'zu', 'Maltese'), +(2239, 'mt', 'zh-hant', '馬爾他語'), +(2240, 'mt', 'ms', 'Maltese'), +(2241, 'mo', 'en', 'Moldavian'), +(2242, 'mo', 'es', 'Moldavo'), +(2243, 'mo', 'de', 'Moldavisch'), +(2244, 'mo', 'fr', 'Moldave'), +(2245, 'mo', 'ar', 'المولدوفية'), +(2246, 'mo', 'bs', 'Moldavian'), +(2247, 'mo', 'bg', 'Moldavian'), +(2248, 'mo', 'ca', 'Moldavian'), +(2249, 'mo', 'cs', 'Moldavian'), +(2250, 'mo', 'sk', 'Moldavčina'), +(2251, 'mo', 'cy', 'Moldavian'), +(2252, 'mo', 'da', 'Moldavian'), +(2253, 'mo', 'el', 'Μολδαβικα'), +(2254, 'mo', 'eo', 'Moldavian'), +(2255, 'mo', 'et', 'Moldavian'), +(2256, 'mo', 'eu', 'Moldavian'), +(2257, 'mo', 'fa', 'Moldavian'), +(2258, 'mo', 'fi', 'moldavia'), +(2259, 'mo', 'ga', 'Moldavian'), +(2260, 'mo', 'he', 'Moldavian'), +(2261, 'mo', 'hi', 'Moldavian'), +(2262, 'mo', 'hr', 'Moldavian'), +(2263, 'mo', 'hu', 'moldovai'), +(2264, 'mo', 'hy', 'Moldavian'), +(2265, 'mo', 'id', 'Moldavian'), +(2266, 'mo', 'is', 'Moldavian'), +(2267, 'mo', 'it', 'Moldavo'), +(2268, 'mo', 'ja', 'モルダビア語'), +(2269, 'mo', 'ko', '몰다비아어'), +(2270, 'mo', 'ku', 'Moldavian'), +(2271, 'mo', 'la', 'Moldavian'), +(2272, 'mo', 'lv', 'Moldavian'), +(2273, 'mo', 'lt', 'Moldavian'), +(2274, 'mo', 'mk', 'Moldavian'), +(2275, 'mo', 'mt', 'Moldavian'), +(2276, 'mo', 'mo', 'Moldavian'), +(2277, 'mo', 'mn', 'Moldavian'), +(2278, 'mo', 'ne', 'Moldavian'), +(2279, 'mo', 'nl', 'Moldavisch'), +(2280, 'mo', 'nb', 'Moldavian'), +(2281, 'mo', 'pa', 'Moldavian'), +(2282, 'mo', 'pl', 'mołdawski'), +(2283, 'mo', 'pt-pt', 'Moldavo'), +(2284, 'mo', 'pt-br', 'Moldavo'), +(2285, 'mo', 'qu', 'Moldavian'), +(2286, 'mo', 'ro', 'Moldoveană'), +(2287, 'mo', 'ru', 'Молдавский'), +(2288, 'mo', 'sl', 'Moldavian'), +(2289, 'mo', 'so', 'Moldavian'), +(2290, 'mo', 'sq', 'Moldavian'), +(2291, 'mo', 'sr', 'Moldavian'), +(2292, 'mo', 'sv', 'Moldaviska'), +(2293, 'mo', 'ta', 'Moldavian'), +(2294, 'mo', 'th', 'มอลดาเวียน'), +(2295, 'mo', 'tr', 'Moldovyaca'), +(2296, 'mo', 'uk', 'Moldavian'), +(2297, 'mo', 'ur', 'Moldavian'), +(2298, 'mo', 'uz', 'Moldavian'), +(2299, 'mo', 'vi', 'Moldavian'), +(2300, 'mo', 'yi', 'Moldavian'), +(2301, 'mo', 'zh-hans', '摩尔达维亚语'), +(2302, 'mo', 'zu', 'Moldavian'), +(2303, 'mo', 'zh-hant', '摩爾達維亞語'), +(2304, 'mo', 'ms', 'Moldavian'), +(2305, 'mn', 'en', 'Mongolian'), +(2306, 'mn', 'es', 'Mongol'), +(2307, 'mn', 'de', 'Mongolisch'), +(2308, 'mn', 'fr', 'Mongol'), +(2309, 'mn', 'ar', 'المنغولية'), +(2310, 'mn', 'bs', 'Mongolian'), +(2311, 'mn', 'bg', 'Mongolian'), +(2312, 'mn', 'ca', 'Mongolian'), +(2313, 'mn', 'cs', 'Mongolian'), +(2314, 'mn', 'sk', 'Mongolština'), +(2315, 'mn', 'cy', 'Mongolian'), +(2316, 'mn', 'da', 'Mongolian'), +(2317, 'mn', 'el', 'Μογγολικα'), +(2318, 'mn', 'eo', 'Mongolian'), +(2319, 'mn', 'et', 'Mongolian'), +(2320, 'mn', 'eu', 'Mongolian'), +(2321, 'mn', 'fa', 'Mongolian'), +(2322, 'mn', 'fi', 'mongoli'), +(2323, 'mn', 'ga', 'Mongolian'), +(2324, 'mn', 'he', 'Mongolian'), +(2325, 'mn', 'hi', 'Mongolian'), +(2326, 'mn', 'hr', 'Mongolian'), +(2327, 'mn', 'hu', 'mongol'), +(2328, 'mn', 'hy', 'Mongolian'), +(2329, 'mn', 'id', 'Mongolian'), +(2330, 'mn', 'is', 'Mongolian'), +(2331, 'mn', 'it', 'Mongolo'), +(2332, 'mn', 'ja', 'モンゴル語'), +(2333, 'mn', 'ko', '몽골어'), +(2334, 'mn', 'ku', 'Mongolian'), +(2335, 'mn', 'la', 'Mongolian'), +(2336, 'mn', 'lv', 'Mongolian'), +(2337, 'mn', 'lt', 'Mongolian'), +(2338, 'mn', 'mk', 'Mongolian'), +(2339, 'mn', 'mt', 'Mongolian'), +(2340, 'mn', 'mo', 'Mongolian'), +(2341, 'mn', 'mn', 'Mongolian'), +(2342, 'mn', 'ne', 'Mongolian'), +(2343, 'mn', 'nl', 'Mongools'), +(2344, 'mn', 'nb', 'Mongolian'), +(2345, 'mn', 'pa', 'Mongolian'), +(2346, 'mn', 'pl', 'mongolski'), +(2347, 'mn', 'pt-pt', 'Mongolian'), +(2348, 'mn', 'pt-br', 'Mongolian'), +(2349, 'mn', 'qu', 'Mongolian'), +(2350, 'mn', 'ro', 'Mongoleză'), +(2351, 'mn', 'ru', 'Монгольский'), +(2352, 'mn', 'sl', 'Mongolian'), +(2353, 'mn', 'so', 'Mongolian'), +(2354, 'mn', 'sq', 'Mongolian'), +(2355, 'mn', 'sr', 'Mongolian'), +(2356, 'mn', 'sv', 'Mongoliska'), +(2357, 'mn', 'ta', 'Mongolian'), +(2358, 'mn', 'th', 'มองโกเลีย'), +(2359, 'mn', 'tr', 'Mongolca'), +(2360, 'mn', 'uk', 'Mongolian'), +(2361, 'mn', 'ur', 'Mongolian'), +(2362, 'mn', 'uz', 'Mongolian'), +(2363, 'mn', 'vi', 'Mongolian'), +(2364, 'mn', 'yi', 'Mongolian'), +(2365, 'mn', 'zh-hans', '蒙古语'), +(2366, 'mn', 'zu', 'Mongolian'), +(2367, 'mn', 'zh-hant', '蒙古語'), +(2368, 'mn', 'ms', 'Mongolian'), +(2369, 'ne', 'en', 'Nepali'), +(2370, 'ne', 'es', 'Nepalí'), +(2371, 'ne', 'de', 'Nepali'), +(2372, 'ne', 'fr', 'Népalais'), +(2373, 'ne', 'ar', 'النيبالية'), +(2374, 'ne', 'bs', 'Nepali'), +(2375, 'ne', 'bg', 'Nepali'), +(2376, 'ne', 'ca', 'Nepali'), +(2377, 'ne', 'cs', 'Nepali'), +(2378, 'ne', 'sk', 'Nepálčina'), +(2379, 'ne', 'cy', 'Nepali'), +(2380, 'ne', 'da', 'Nepali'), +(2381, 'ne', 'el', 'Νεπαλι'), +(2382, 'ne', 'eo', 'Nepali'), +(2383, 'ne', 'et', 'Nepali'), +(2384, 'ne', 'eu', 'Nepali'), +(2385, 'ne', 'fa', 'Nepali'), +(2386, 'ne', 'fi', 'nepali'), +(2387, 'ne', 'ga', 'Nepali'), +(2388, 'ne', 'he', 'Nepali'), +(2389, 'ne', 'hi', 'Nepali'), +(2390, 'ne', 'hr', 'Nepali'), +(2391, 'ne', 'hu', 'nepáli'), +(2392, 'ne', 'hy', 'Nepali'), +(2393, 'ne', 'id', 'Nepali'), +(2394, 'ne', 'is', 'Nepali'), +(2395, 'ne', 'it', 'Nepalese'), +(2396, 'ne', 'ja', 'ネパール語'), +(2397, 'ne', 'ko', '네팔어'), +(2398, 'ne', 'ku', 'Nepali'), +(2399, 'ne', 'la', 'Nepali'), +(2400, 'ne', 'lv', 'Nepali'), +(2401, 'ne', 'lt', 'Nepali'), +(2402, 'ne', 'mk', 'Nepali'), +(2403, 'ne', 'mt', 'Nepali'), +(2404, 'ne', 'mo', 'Nepali'), +(2405, 'ne', 'mn', 'Nepali'), +(2406, 'ne', 'ne', 'Nepali'), +(2407, 'ne', 'nl', 'Nepalees'), +(2408, 'ne', 'nb', 'Nepali'), +(2409, 'ne', 'pa', 'Nepali'), +(2410, 'ne', 'pl', 'nepalski'), +(2411, 'ne', 'pt-pt', 'Nepali'), +(2412, 'ne', 'pt-br', 'Nepali'), +(2413, 'ne', 'qu', 'Nepali'), +(2414, 'ne', 'ro', 'Nepaleză'), +(2415, 'ne', 'ru', 'Непальский'), +(2416, 'ne', 'sl', 'Nepali'), +(2417, 'ne', 'so', 'Nepali'), +(2418, 'ne', 'sq', 'Nepali'), +(2419, 'ne', 'sr', 'Nepali'), +(2420, 'ne', 'sv', 'Nepalesiska'), +(2421, 'ne', 'ta', 'Nepali'), +(2422, 'ne', 'th', 'เนปาล'), +(2423, 'ne', 'tr', 'Nepal dili'), +(2424, 'ne', 'uk', 'Nepali'), +(2425, 'ne', 'ur', 'Nepali'), +(2426, 'ne', 'uz', 'Nepali'), +(2427, 'ne', 'vi', 'Nepali'), +(2428, 'ne', 'yi', 'Nepali'), +(2429, 'ne', 'zh-hans', '尼泊尔语'), +(2430, 'ne', 'zu', 'Nepali'), +(2431, 'ne', 'zh-hant', '尼泊爾語'), +(2432, 'ne', 'ms', 'Nepali'), +(2433, 'nl', 'en', 'Dutch'), +(2434, 'nl', 'es', 'Holandés'), +(2435, 'nl', 'de', 'Holländisch'), +(2436, 'nl', 'fr', 'Néerlandais'), +(2437, 'nl', 'ar', 'الهولندية'), +(2438, 'nl', 'bs', 'Dutch'), +(2439, 'nl', 'bg', 'Dutch'), +(2440, 'nl', 'ca', 'Dutch'), +(2441, 'nl', 'cs', 'Dutch'), +(2442, 'nl', 'sk', 'Holandčina'), +(2443, 'nl', 'cy', 'Dutch'), +(2444, 'nl', 'da', 'Dutch'), +(2445, 'nl', 'el', 'Ολλανδικα'), +(2446, 'nl', 'eo', 'Dutch'), +(2447, 'nl', 'et', 'Dutch'), +(2448, 'nl', 'eu', 'Dutch'), +(2449, 'nl', 'fa', 'Dutch'), +(2450, 'nl', 'fi', 'hollanti'), +(2451, 'nl', 'ga', 'Dutch'), +(2452, 'nl', 'he', 'הולנדית'), +(2453, 'nl', 'hi', 'Dutch'), +(2454, 'nl', 'hr', 'Dutch'), +(2455, 'nl', 'hu', 'holland'), +(2456, 'nl', 'hy', 'Dutch'), +(2457, 'nl', 'id', 'Dutch'), +(2458, 'nl', 'is', 'Dutch'), +(2459, 'nl', 'it', 'Neerlandese'), +(2460, 'nl', 'ja', 'オランダ語'), +(2461, 'nl', 'ko', '화란어'), +(2462, 'nl', 'ku', 'Dutch'), +(2463, 'nl', 'la', 'Dutch'), +(2464, 'nl', 'lv', 'Dutch'), +(2465, 'nl', 'lt', 'Dutch'), +(2466, 'nl', 'mk', 'Dutch'), +(2467, 'nl', 'mt', 'Dutch'), +(2468, 'nl', 'mo', 'Dutch'), +(2469, 'nl', 'mn', 'Dutch'), +(2470, 'nl', 'ne', 'Dutch'), +(2471, 'nl', 'nl', 'Nederlands'), +(2472, 'nl', 'nb', 'Dutch'), +(2473, 'nl', 'pa', 'Dutch'), +(2474, 'nl', 'pl', 'holenderski'), +(2475, 'nl', 'pt-pt', 'Holandês'), +(2476, 'nl', 'pt-br', 'Holandês'), +(2477, 'nl', 'qu', 'Dutch'), +(2478, 'nl', 'ro', 'Olaneză'), +(2479, 'nl', 'ru', 'Голландский'), +(2480, 'nl', 'sl', 'Dutch'), +(2481, 'nl', 'so', 'Dutch'), +(2482, 'nl', 'sq', 'Dutch'), +(2483, 'nl', 'sr', 'Dutch'), +(2484, 'nl', 'sv', 'Nederländska'), +(2485, 'nl', 'ta', 'Dutch'), +(2486, 'nl', 'th', 'ดัตช์'), +(2487, 'nl', 'tr', 'Hollandaca'), +(2488, 'nl', 'uk', 'Dutch'), +(2489, 'nl', 'ur', 'Dutch'), +(2490, 'nl', 'uz', 'Dutch'), +(2491, 'nl', 'vi', 'Dutch'), +(2492, 'nl', 'yi', 'Dutch'), +(2493, 'nl', 'zh-hans', '荷兰语'), +(2494, 'nl', 'zu', 'Dutch'), +(2495, 'nl', 'zh-hant', '荷蘭語'), +(2496, 'nl', 'ms', 'Dutch'), +(2497, 'nb', 'en', 'Norwegian Bokmål'), +(2498, 'nb', 'es', 'Bokmål'), +(2499, 'nb', 'de', 'Norwegisch (Buchsprache)'), +(2500, 'nb', 'fr', 'Norvégien Bokmål'), +(2501, 'nb', 'ar', 'البوكمالية النرويجية'), +(2502, 'nb', 'bs', 'Norwegian Bokmål'), +(2503, 'nb', 'bg', 'Norwegian Bokmål'), +(2504, 'nb', 'ca', 'Norwegian Bokmål'), +(2505, 'nb', 'cs', 'Norwegian Bokmål'), +(2506, 'nb', 'sk', 'Nórsky jazyk Bokmål'), +(2507, 'nb', 'cy', 'Norwegian Bokmål'), +(2508, 'nb', 'da', 'Norwegian Bokmål'), +(2509, 'nb', 'el', 'Νορβηγικα'), +(2510, 'nb', 'eo', 'Norwegian Bokmål'), +(2511, 'nb', 'et', 'Norwegian Bokmål'), +(2512, 'nb', 'eu', 'Norwegian Bokmål'), +(2513, 'nb', 'fa', 'Norwegian Bokmål'), +(2514, 'nb', 'fi', 'kirjanorja'), +(2515, 'nb', 'ga', 'Norwegian Bokmål'), +(2516, 'nb', 'he', 'נורווגית'), +(2517, 'nb', 'hi', 'Norwegian Bokmål'), +(2518, 'nb', 'hr', 'Norwegian Bokmål'), +(2519, 'nb', 'hu', 'norvég bokmål'), +(2520, 'nb', 'hy', 'Norwegian Bokmål'), +(2521, 'nb', 'id', 'Norwegian Bokmål'), +(2522, 'nb', 'is', 'Norwegian Bokmål'), +(2523, 'nb', 'it', 'Norvegese Bokmål'), +(2524, 'nb', 'ja', 'ノルウェー・ブークモール'), +(2525, 'nb', 'ko', '노르웨이 보크말어'), +(2526, 'nb', 'ku', 'Norwegian Bokmål'), +(2527, 'nb', 'la', 'Norwegian Bokmål'), +(2528, 'nb', 'lv', 'Norwegian Bokmål'), +(2529, 'nb', 'lt', 'Norwegian Bokmål'), +(2530, 'nb', 'mk', 'Norwegian Bokmål'), +(2531, 'nb', 'mt', 'Norwegian Bokmål'), +(2532, 'nb', 'mo', 'Norwegian Bokmål'), +(2533, 'nb', 'mn', 'Norwegian Bokmål'), +(2534, 'nb', 'ne', 'Norwegian Bokmål'), +(2535, 'nb', 'nl', 'Noors Bokmål'), +(2536, 'nb', 'nb', 'Norwegian Bokmål'), +(2537, 'nb', 'pa', 'Norwegian Bokmål'), +(2538, 'nb', 'pl', 'norweski bokmål'), +(2539, 'nb', 'pt-pt', 'Norueguês'), +(2540, 'nb', 'pt-br', 'Norueguês'), +(2541, 'nb', 'qu', 'Norwegian Bokmål'), +(2542, 'nb', 'ro', 'Bokmål (norvegiană)'), +(2543, 'nb', 'ru', 'Норвежский букмол'), +(2544, 'nb', 'sl', 'Norwegian Bokmål'), +(2545, 'nb', 'so', 'Norwegian Bokmål'), +(2546, 'nb', 'sq', 'Norwegian Bokmål'), +(2547, 'nb', 'sr', 'Norwegian Bokmål'), +(2548, 'nb', 'sv', 'Norskt Bokmål'), +(2549, 'nb', 'ta', 'Norwegian Bokmål'), +(2550, 'nb', 'th', 'นอร์วิเจียนบอกมาล'), +(2551, 'nb', 'tr', 'Bokmal Norveç dili'), +(2552, 'nb', 'uk', 'Norwegian Bokmål'), +(2553, 'nb', 'ur', 'Norwegian Bokmål'), +(2554, 'nb', 'uz', 'Norwegian Bokmål'), +(2555, 'nb', 'vi', 'Norwegian Bokmål'), +(2556, 'nb', 'yi', 'Norwegian Bokmål'), +(2557, 'nb', 'zh-hans', '挪威布克莫尔语'), +(2558, 'nb', 'zu', 'Norwegian Bokmål'), +(2559, 'nb', 'zh-hant', '挪威布克莫爾語'), +(2560, 'nb', 'ms', 'Norwegian Bokmål'), +(2561, 'pa', 'en', 'Punjabi'), +(2562, 'pa', 'es', 'Panyabí'), +(2563, 'pa', 'de', 'Pandschabi'), +(2564, 'pa', 'fr', 'Panjabi'), +(2565, 'pa', 'ar', 'البنجابية'), +(2566, 'pa', 'bs', 'Punjabi'), +(2567, 'pa', 'bg', 'Punjabi'), +(2568, 'pa', 'ca', 'Punjabi'), +(2569, 'pa', 'cs', 'Punjabi'), +(2570, 'pa', 'sk', 'Pandžábčina'), +(2571, 'pa', 'cy', 'Punjabi'), +(2572, 'pa', 'da', 'Punjabi'), +(2573, 'pa', 'el', 'Panjabi'), +(2574, 'pa', 'eo', 'Punjabi'), +(2575, 'pa', 'et', 'Punjabi'), +(2576, 'pa', 'eu', 'Punjabi'), +(2577, 'pa', 'fa', 'Punjabi'), +(2578, 'pa', 'fi', 'pandzabi'), +(2579, 'pa', 'ga', 'Punjabi'), +(2580, 'pa', 'he', 'Punjabi'), +(2581, 'pa', 'hi', 'Punjabi'), +(2582, 'pa', 'hr', 'Punjabi'), +(2583, 'pa', 'hu', 'pandzsábi'), +(2584, 'pa', 'hy', 'Punjabi'), +(2585, 'pa', 'id', 'Punjabi'), +(2586, 'pa', 'is', 'Punjabi'), +(2587, 'pa', 'it', 'Panjabi'), +(2588, 'pa', 'ja', 'パンジャーブ語'), +(2589, 'pa', 'ko', '펀자브어'), +(2590, 'pa', 'ku', 'Punjabi'), +(2591, 'pa', 'la', 'Punjabi'), +(2592, 'pa', 'lv', 'Punjabi'), +(2593, 'pa', 'lt', 'Punjabi'), +(2594, 'pa', 'mk', 'Punjabi'), +(2595, 'pa', 'mt', 'Punjabi'), +(2596, 'pa', 'mo', 'Punjabi'), +(2597, 'pa', 'mn', 'Punjabi'), +(2598, 'pa', 'ne', 'Punjabi'), +(2599, 'pa', 'nl', 'Punjabi'), +(2600, 'pa', 'nb', 'Punjabi'), +(2601, 'pa', 'pa', 'Punjabi'), +(2602, 'pa', 'pl', 'pendżabi'), +(2603, 'pa', 'pt-pt', 'Panjabi'), +(2604, 'pa', 'pt-br', 'Panjabi'), +(2605, 'pa', 'qu', 'Punjabi'), +(2606, 'pa', 'ro', 'Punjabi'), +(2607, 'pa', 'ru', 'Панджаби'), +(2608, 'pa', 'sl', 'Punjabi'), +(2609, 'pa', 'so', 'Punjabi'), +(2610, 'pa', 'sq', 'Punjabi'), +(2611, 'pa', 'sr', 'Punjabi'), +(2612, 'pa', 'sv', 'Punjabi'), +(2613, 'pa', 'ta', 'Punjabi'), +(2614, 'pa', 'th', 'ปัญจาบ'), +(2615, 'pa', 'tr', 'Pencapça'), +(2616, 'pa', 'uk', 'Punjabi'), +(2617, 'pa', 'ur', 'Punjabi'), +(2618, 'pa', 'uz', 'Punjabi'), +(2619, 'pa', 'vi', 'Punjabi'), +(2620, 'pa', 'yi', 'Punjabi'), +(2621, 'pa', 'zh-hans', '旁遮普语'), +(2622, 'pa', 'zu', 'Punjabi'), +(2623, 'pa', 'zh-hant', '旁遮普語'), +(2624, 'pa', 'ms', 'Punjabi'), +(2625, 'pl', 'en', 'Polish'), +(2626, 'pl', 'es', 'Polaco'), +(2627, 'pl', 'de', 'Polnisch'), +(2628, 'pl', 'fr', 'Polonais'), +(2629, 'pl', 'ar', 'البولندية'), +(2630, 'pl', 'bs', 'Polish'), +(2631, 'pl', 'bg', 'Polish'), +(2632, 'pl', 'ca', 'Polish'), +(2633, 'pl', 'cs', 'Polish'), +(2634, 'pl', 'sk', 'Polština'), +(2635, 'pl', 'cy', 'Polish'), +(2636, 'pl', 'da', 'Polish'), +(2637, 'pl', 'el', 'Πολωνικα'), +(2638, 'pl', 'eo', 'Polish'), +(2639, 'pl', 'et', 'Polish'), +(2640, 'pl', 'eu', 'Polish'), +(2641, 'pl', 'fa', 'Polish'), +(2642, 'pl', 'fi', 'puola'), +(2643, 'pl', 'ga', 'Polish'), +(2644, 'pl', 'he', 'פולנית'), +(2645, 'pl', 'hi', 'Polish'), +(2646, 'pl', 'hr', 'Polish'), +(2647, 'pl', 'hu', 'lengyel'), +(2648, 'pl', 'hy', 'Polish'), +(2649, 'pl', 'id', 'Polish'), +(2650, 'pl', 'is', 'Polish'), +(2651, 'pl', 'it', 'Polacco'), +(2652, 'pl', 'ja', 'ポーランド語'), +(2653, 'pl', 'ko', '폴란드어'), +(2654, 'pl', 'ku', 'Polish'), +(2655, 'pl', 'la', 'Polish'), +(2656, 'pl', 'lv', 'Polish'), +(2657, 'pl', 'lt', 'Polish'), +(2658, 'pl', 'mk', 'Polish'), +(2659, 'pl', 'mt', 'Polish'), +(2660, 'pl', 'mo', 'Polish'), +(2661, 'pl', 'mn', 'Polish'), +(2662, 'pl', 'ne', 'Polish'), +(2663, 'pl', 'nl', 'Pools'), +(2664, 'pl', 'nb', 'Polish'), +(2665, 'pl', 'pa', 'Polish'), +(2666, 'pl', 'pl', 'polski'), +(2667, 'pl', 'pt-pt', 'Polonês'), +(2668, 'pl', 'pt-br', 'Polonês'), +(2669, 'pl', 'qu', 'Polish'), +(2670, 'pl', 'ro', 'Poloneză'), +(2671, 'pl', 'ru', 'Польский'), +(2672, 'pl', 'sl', 'Polish'), +(2673, 'pl', 'so', 'Polish'), +(2674, 'pl', 'sq', 'Polish'), +(2675, 'pl', 'sr', 'Polish'), +(2676, 'pl', 'sv', 'Polska'), +(2677, 'pl', 'ta', 'Polish'), +(2678, 'pl', 'th', 'โปแลนด์'), +(2679, 'pl', 'tr', 'Polonyaca'), +(2680, 'pl', 'uk', 'Polish'), +(2681, 'pl', 'ur', 'Polish'), +(2682, 'pl', 'uz', 'Polish'), +(2683, 'pl', 'vi', 'Polish'), +(2684, 'pl', 'yi', 'Polish'), +(2685, 'pl', 'zh-hans', '波兰语'), +(2686, 'pl', 'zu', 'Polish'), +(2687, 'pl', 'zh-hant', '波蘭語'), +(2688, 'pl', 'ms', 'Polish'), +(2689, 'pt-pt', 'en', 'Portuguese (Portugal)'), +(2690, 'pt-pt', 'es', 'Portugués, Portugal'), +(2691, 'pt-pt', 'de', 'Portugiesisch, Portugal'), +(2692, 'pt-pt', 'fr', 'Portugais - du Portugal'), +(2693, 'pt-pt', 'ar', 'البرتغالية ، البرتغال'), +(2694, 'pt-pt', 'bs', 'Portuguese, Portugal'), +(2695, 'pt-pt', 'bg', 'Portuguese, Portugal'), +(2696, 'pt-pt', 'ca', 'Portuguese, Portugal'), +(2697, 'pt-pt', 'cs', 'Portuguese, Portugal'), +(2698, 'pt-pt', 'sk', 'Portugalština'), +(2699, 'pt-pt', 'cy', 'Portuguese, Portugal'), +(2700, 'pt-pt', 'da', 'Portuguese, Portugal'), +(2701, 'pt-pt', 'el', 'Πορτογαλικα'), +(2702, 'pt-pt', 'eo', 'Portuguese, Portugal'), +(2703, 'pt-pt', 'et', 'Portuguese, Portugal'), +(2704, 'pt-pt', 'eu', 'Portuguese, Portugal'), +(2705, 'pt-pt', 'fa', 'Portuguese, Portugal'), +(2706, 'pt-pt', 'fi', 'portugali'), +(2707, 'pt-pt', 'ga', 'Portuguese, Portugal'), +(2708, 'pt-pt', 'he', 'פורטוגזית'), +(2709, 'pt-pt', 'hi', 'Portuguese, Portugal'), +(2710, 'pt-pt', 'hr', 'Portuguese, Portugal'), +(2711, 'pt-pt', 'hu', 'portugál'), +(2712, 'pt-pt', 'hy', 'Portuguese, Portugal'), +(2713, 'pt-pt', 'id', 'Portuguese, Portugal'), +(2714, 'pt-pt', 'is', 'Portuguese, Portugal'), +(2715, 'pt-pt', 'it', 'Portoghese, Portogallo'), +(2716, 'pt-pt', 'ja', 'ポルトガル語'), +(2717, 'pt-pt', 'ko', '포르투갈 포르투갈어'), +(2718, 'pt-pt', 'ku', 'Portuguese, Portugal'), +(2719, 'pt-pt', 'la', 'Portuguese, Portugal'), +(2720, 'pt-pt', 'lv', 'Portuguese, Portugal'), +(2721, 'pt-pt', 'lt', 'Portuguese, Portugal'), +(2722, 'pt-pt', 'mk', 'Portuguese, Portugal'), +(2723, 'pt-pt', 'mt', 'Portuguese, Portugal'), +(2724, 'pt-pt', 'mo', 'Portuguese, Portugal'), +(2725, 'pt-pt', 'mn', 'Portuguese, Portugal'), +(2726, 'pt-pt', 'ne', 'Portuguese, Portugal'), +(2727, 'pt-pt', 'nl', 'Portugees, Portugal'), +(2728, 'pt-pt', 'nb', 'Portuguese, Portugal'), +(2729, 'pt-pt', 'pa', 'Portuguese, Portugal'), +(2730, 'pt-pt', 'pl', 'portugalski, Portugalia'), +(2731, 'pt-pt', 'pt-pt', 'Português'), +(2732, 'pt-pt', 'pt-br', 'Português'), +(2733, 'pt-pt', 'qu', 'Portuguese, Portugal'), +(2734, 'pt-pt', 'ro', 'Portugheză (Portugalia)'), +(2735, 'pt-pt', 'ru', 'Португальский, Португалия'), +(2736, 'pt-pt', 'sl', 'Portuguese, Portugal'), +(2737, 'pt-pt', 'so', 'Portuguese, Portugal'), +(2738, 'pt-pt', 'sq', 'Portuguese, Portugal'), +(2739, 'pt-pt', 'sr', 'Portuguese, Portugal'), +(2740, 'pt-pt', 'sv', 'Portugisiska, Portugal'), +(2741, 'pt-pt', 'ta', 'Portuguese, Portugal'), +(2742, 'pt-pt', 'th', 'โปรตุเกส'), +(2743, 'pt-pt', 'tr', 'Portekizce, Portekiz'), +(2744, 'pt-pt', 'uk', 'Portuguese, Portugal'), +(2745, 'pt-pt', 'ur', 'Portuguese, Portugal'), +(2746, 'pt-pt', 'uz', 'Portuguese, Portugal'), +(2747, 'pt-pt', 'vi', 'Portuguese, Portugal'), +(2748, 'pt-pt', 'yi', 'Portuguese, Portugal'), +(2749, 'pt-pt', 'zh-hans', '葡萄牙语(葡萄牙)'), +(2750, 'pt-pt', 'zu', 'Portuguese, Portugal'), +(2751, 'pt-pt', 'zh-hant', '葡萄牙語(葡萄牙)'), +(2752, 'pt-pt', 'ms', 'Portuguese, Portugal'), +(2753, 'pt-br', 'en', 'Portuguese (Brazil)'), +(2754, 'pt-br', 'es', 'Portugués, Brasil'), +(2755, 'pt-br', 'de', 'Portugiesisch, Brasilien'), +(2756, 'pt-br', 'fr', 'Portugais - du Brésil'), +(2757, 'pt-br', 'ar', 'البرتغالية ،البرازيل'), +(2758, 'pt-br', 'bs', 'Portuguese, Brazil'), +(2759, 'pt-br', 'bg', 'Portuguese, Brazil'), +(2760, 'pt-br', 'ca', 'Portuguese, Brazil'), +(2761, 'pt-br', 'cs', 'Portuguese, Brazil'), +(2762, 'pt-br', 'sk', 'Brazílska Portugalština'), +(2763, 'pt-br', 'cy', 'Portuguese, Brazil'), +(2764, 'pt-br', 'da', 'Portuguese, Brazil'), +(2765, 'pt-br', 'el', 'Πορτογαλικα'), +(2766, 'pt-br', 'eo', 'Portuguese, Brazil'), +(2767, 'pt-br', 'et', 'Portuguese, Brazil'), +(2768, 'pt-br', 'eu', 'Portuguese, Brazil'), +(2769, 'pt-br', 'fa', 'Portuguese, Brazil'), +(2770, 'pt-br', 'fi', 'Brasilian portugali'), +(2771, 'pt-br', 'ga', 'Portuguese, Brazil'), +(2772, 'pt-br', 'he', 'פורטוגזית'), +(2773, 'pt-br', 'hi', 'Portuguese, Brazil'), +(2774, 'pt-br', 'hr', 'Portuguese, Brazil'), +(2775, 'pt-br', 'hu', 'brazil'), +(2776, 'pt-br', 'hy', 'Portuguese, Brazil'), +(2777, 'pt-br', 'id', 'Portuguese, Brazil'), +(2778, 'pt-br', 'is', 'Portuguese, Brazil'), +(2779, 'pt-br', 'it', 'Portoghese, Brasile'), +(2780, 'pt-br', 'ja', 'ポルトガル語(ブラジル)'), +(2781, 'pt-br', 'ko', '브라질 포르투갈어'), +(2782, 'pt-br', 'ku', 'Portuguese, Brazil'), +(2783, 'pt-br', 'la', 'Portuguese, Brazil'), +(2784, 'pt-br', 'lv', 'Portuguese, Brazil'), +(2785, 'pt-br', 'lt', 'Portuguese, Brazil'), +(2786, 'pt-br', 'mk', 'Portuguese, Brazil'), +(2787, 'pt-br', 'mt', 'Portuguese, Brazil'), +(2788, 'pt-br', 'mo', 'Portuguese, Brazil'), +(2789, 'pt-br', 'mn', 'Portuguese, Brazil'), +(2790, 'pt-br', 'ne', 'Portuguese, Brazil'), +(2791, 'pt-br', 'nl', 'Portugees, Brazilië'), +(2792, 'pt-br', 'nb', 'Portuguese, Brazil'), +(2793, 'pt-br', 'pa', 'Portuguese, Brazil'), +(2794, 'pt-br', 'pl', 'portugalski, Brazylia'), +(2795, 'pt-br', 'pt-pt', 'Português'), +(2796, 'pt-br', 'pt-br', 'Português'), +(2797, 'pt-br', 'qu', 'Portuguese, Brazil'), +(2798, 'pt-br', 'ro', 'Portugheză (Brazilia)'), +(2799, 'pt-br', 'ru', 'Португальский, Бразилия'), +(2800, 'pt-br', 'sl', 'Portuguese, Brazil'), +(2801, 'pt-br', 'so', 'Portuguese, Brazil'), +(2802, 'pt-br', 'sq', 'Portuguese, Brazil'), +(2803, 'pt-br', 'sr', 'Portuguese, Brazil'), +(2804, 'pt-br', 'sv', 'Portugisiska, Brasilien'), +(2805, 'pt-br', 'ta', 'Portuguese, Brazil'), +(2806, 'pt-br', 'th', 'โปรตุเกสบราซิล'), +(2807, 'pt-br', 'tr', 'Portekizce, Brezilya'), +(2808, 'pt-br', 'uk', 'Portuguese, Brazil'), +(2809, 'pt-br', 'ur', 'Portuguese, Brazil'), +(2810, 'pt-br', 'uz', 'Portuguese, Brazil'), +(2811, 'pt-br', 'vi', 'Portuguese, Brazil'), +(2812, 'pt-br', 'yi', 'Portuguese, Brazil'), +(2813, 'pt-br', 'zh-hans', '葡萄牙语(巴西)'), +(2814, 'pt-br', 'zu', 'Portuguese, Brazil'), +(2815, 'pt-br', 'zh-hant', '葡萄牙語(巴西)'), +(2816, 'pt-br', 'ms', 'Portuguese, Brazil'), +(2817, 'qu', 'en', 'Quechua'), +(2818, 'qu', 'es', 'Quechua'), +(2819, 'qu', 'de', 'Quechua'), +(2820, 'qu', 'fr', 'Quechua'), +(2821, 'qu', 'ar', 'الكويتشوا'), +(2822, 'qu', 'bs', 'Quechua'), +(2823, 'qu', 'bg', 'Quechua'), +(2824, 'qu', 'ca', 'Quechua'), +(2825, 'qu', 'cs', 'Quechua'), +(2826, 'qu', 'sk', 'Jazyk Quechua'), +(2827, 'qu', 'cy', 'Quechua'), +(2828, 'qu', 'da', 'Quechua'), +(2829, 'qu', 'el', 'Κετσουα'), +(2830, 'qu', 'eo', 'Quechua'), +(2831, 'qu', 'et', 'Quechua'), +(2832, 'qu', 'eu', 'Quechua'), +(2833, 'qu', 'fa', 'Quechua'), +(2834, 'qu', 'fi', 'ketsua'), +(2835, 'qu', 'ga', 'Quechua'), +(2836, 'qu', 'he', 'Quechua'), +(2837, 'qu', 'hi', 'Quechua'), +(2838, 'qu', 'hr', 'Quechua'), +(2839, 'qu', 'hu', 'quechua'), +(2840, 'qu', 'hy', 'Quechua'), +(2841, 'qu', 'id', 'Quechua'), +(2842, 'qu', 'is', 'Quechua'), +(2843, 'qu', 'it', 'Quechua'), +(2844, 'qu', 'ja', 'ケチュア語'), +(2845, 'qu', 'ko', '케추아어'), +(2846, 'qu', 'ku', 'Quechua'), +(2847, 'qu', 'la', 'Quechua'), +(2848, 'qu', 'lv', 'Quechua'), +(2849, 'qu', 'lt', 'Quechua'), +(2850, 'qu', 'mk', 'Quechua'), +(2851, 'qu', 'mt', 'Quechua'), +(2852, 'qu', 'mo', 'Quechua'), +(2853, 'qu', 'mn', 'Quechua'), +(2854, 'qu', 'ne', 'Quechua'), +(2855, 'qu', 'nl', 'Quechua'), +(2856, 'qu', 'nb', 'Quechua'), +(2857, 'qu', 'pa', 'Quechua'), +(2858, 'qu', 'pl', 'keczua'), +(2859, 'qu', 'pt-pt', 'Quechua'), +(2860, 'qu', 'pt-br', 'Quechua'), +(2861, 'qu', 'qu', 'Quechua'), +(2862, 'qu', 'ro', 'Quechuană'), +(2863, 'qu', 'ru', 'Кечуа'), +(2864, 'qu', 'sl', 'Quechua'), +(2865, 'qu', 'so', 'Quechua'), +(2866, 'qu', 'sq', 'Quechua'), +(2867, 'qu', 'sr', 'Quechua'), +(2868, 'qu', 'sv', 'Quechua'), +(2869, 'qu', 'ta', 'Quechua'), +(2870, 'qu', 'th', 'คิวชัว'), +(2871, 'qu', 'tr', 'Quechua dili'), +(2872, 'qu', 'uk', 'Quechua'), +(2873, 'qu', 'ur', 'Quechua'), +(2874, 'qu', 'uz', 'Quechua'), +(2875, 'qu', 'vi', 'Quechua'), +(2876, 'qu', 'yi', 'Quechua'), +(2877, 'qu', 'zh-hans', '盖丘亚语'), +(2878, 'qu', 'zu', 'Quechua'), +(2879, 'qu', 'zh-hant', '蓋丘亞語'), +(2880, 'qu', 'ms', 'Quechua'), +(2881, 'ro', 'en', 'Romanian'), +(2882, 'ro', 'es', 'Rumano'), +(2883, 'ro', 'de', 'Rumänisch'), +(2884, 'ro', 'fr', 'Roumain'), +(2885, 'ro', 'ar', 'الرومانية'), +(2886, 'ro', 'bs', 'Romanian'), +(2887, 'ro', 'bg', 'Romanian'), +(2888, 'ro', 'ca', 'Romanian'), +(2889, 'ro', 'cs', 'Romanian'), +(2890, 'ro', 'sk', 'Rumunčina'), +(2891, 'ro', 'cy', 'Romanian'), +(2892, 'ro', 'da', 'Romanian'), +(2893, 'ro', 'el', 'Ρουμανικα'), +(2894, 'ro', 'eo', 'Romanian'), +(2895, 'ro', 'et', 'Romanian'), +(2896, 'ro', 'eu', 'Romanian'), +(2897, 'ro', 'fa', 'Romanian'), +(2898, 'ro', 'fi', 'romania'), +(2899, 'ro', 'ga', 'Romanian'), +(2900, 'ro', 'he', 'רומנית'), +(2901, 'ro', 'hi', 'Romanian'), +(2902, 'ro', 'hr', 'Romanian'), +(2903, 'ro', 'hu', 'román'), +(2904, 'ro', 'hy', 'Romanian'), +(2905, 'ro', 'id', 'Romanian'), +(2906, 'ro', 'is', 'Romanian'), +(2907, 'ro', 'it', 'Rumeno'), +(2908, 'ro', 'ja', 'ルーマニア語'), +(2909, 'ro', 'ko', '로마니아어'), +(2910, 'ro', 'ku', 'Romanian'), +(2911, 'ro', 'la', 'Romanian'), +(2912, 'ro', 'lv', 'Romanian'), +(2913, 'ro', 'lt', 'Romanian'), +(2914, 'ro', 'mk', 'Romanian'), +(2915, 'ro', 'mt', 'Romanian'), +(2916, 'ro', 'mo', 'Romanian'), +(2917, 'ro', 'mn', 'Romanian'), +(2918, 'ro', 'ne', 'Romanian'), +(2919, 'ro', 'nl', 'Roemeens'), +(2920, 'ro', 'nb', 'Romanian'), +(2921, 'ro', 'pa', 'Romanian'), +(2922, 'ro', 'pl', 'rumuński'), +(2923, 'ro', 'pt-pt', 'Romeno'), +(2924, 'ro', 'pt-br', 'Romeno'), +(2925, 'ro', 'qu', 'Romanian'), +(2926, 'ro', 'ro', 'Română'), +(2927, 'ro', 'ru', 'Румынский'), +(2928, 'ro', 'sl', 'Romanian'), +(2929, 'ro', 'so', 'Romanian'), +(2930, 'ro', 'sq', 'Romanian'), +(2931, 'ro', 'sr', 'Romanian'), +(2932, 'ro', 'sv', 'Rumänska'), +(2933, 'ro', 'ta', 'Romanian'), +(2934, 'ro', 'th', 'โรมาเนีย'), +(2935, 'ro', 'tr', 'Rumence'), +(2936, 'ro', 'uk', 'Romanian'), +(2937, 'ro', 'ur', 'Romanian'), +(2938, 'ro', 'uz', 'Romanian'), +(2939, 'ro', 'vi', 'Romanian'), +(2940, 'ro', 'yi', 'Romanian'), +(2941, 'ro', 'zh-hans', '罗马尼亚语'), +(2942, 'ro', 'zu', 'Romanian'), +(2943, 'ro', 'zh-hant', '羅馬尼亞語'), +(2944, 'ro', 'ms', 'Romanian'), +(2945, 'ru', 'en', 'Russian'), +(2946, 'ru', 'es', 'Ruso'), +(2947, 'ru', 'de', 'Russisch'), +(2948, 'ru', 'fr', 'Russe'), +(2949, 'ru', 'ar', 'الروسية'), +(2950, 'ru', 'bs', 'Russian'), +(2951, 'ru', 'bg', 'Russian'), +(2952, 'ru', 'ca', 'Russian'), +(2953, 'ru', 'cs', 'Russian'), +(2954, 'ru', 'sk', 'Ruština'), +(2955, 'ru', 'cy', 'Russian'), +(2956, 'ru', 'da', 'Russian'), +(2957, 'ru', 'el', 'Ρωσικα'), +(2958, 'ru', 'eo', 'Russian'), +(2959, 'ru', 'et', 'Russian'), +(2960, 'ru', 'eu', 'Russian'), +(2961, 'ru', 'fa', 'Russian'), +(2962, 'ru', 'fi', 'venäjä'), +(2963, 'ru', 'ga', 'Russian'), +(2964, 'ru', 'he', 'רוסית'), +(2965, 'ru', 'hi', 'Russian'), +(2966, 'ru', 'hr', 'Russian'), +(2967, 'ru', 'hu', 'orosz'), +(2968, 'ru', 'hy', 'Russian'), +(2969, 'ru', 'id', 'Russian'), +(2970, 'ru', 'is', 'Russian'), +(2971, 'ru', 'it', 'Russo'), +(2972, 'ru', 'ja', 'ロシア語'), +(2973, 'ru', 'ko', '러시아어'), +(2974, 'ru', 'ku', 'Russian'), +(2975, 'ru', 'la', 'Russian'), +(2976, 'ru', 'lv', 'Russian'), +(2977, 'ru', 'lt', 'Russian'), +(2978, 'ru', 'mk', 'Russian'), +(2979, 'ru', 'mt', 'Russian'), +(2980, 'ru', 'mo', 'Russian'), +(2981, 'ru', 'mn', 'Russian'), +(2982, 'ru', 'ne', 'Russian'), +(2983, 'ru', 'nl', 'Russisch'), +(2984, 'ru', 'nb', 'Russian'), +(2985, 'ru', 'pa', 'Russian'), +(2986, 'ru', 'pl', 'rosyjski'), +(2987, 'ru', 'pt-pt', 'Russo'), +(2988, 'ru', 'pt-br', 'Russo'), +(2989, 'ru', 'qu', 'Russian'), +(2990, 'ru', 'ro', 'Rusă'), +(2991, 'ru', 'ru', 'Русский'), +(2992, 'ru', 'sl', 'Russian'), +(2993, 'ru', 'so', 'Russian'), +(2994, 'ru', 'sq', 'Russian'), +(2995, 'ru', 'sr', 'Russian'), +(2996, 'ru', 'sv', 'Ryska'), +(2997, 'ru', 'ta', 'Russian'), +(2998, 'ru', 'th', 'รัสเซีย'), +(2999, 'ru', 'tr', 'Rusça'), +(3000, 'ru', 'uk', 'Russian'), +(3001, 'ru', 'ur', 'Russian'), +(3002, 'ru', 'uz', 'Russian'), +(3003, 'ru', 'vi', 'Russian'), +(3004, 'ru', 'yi', 'Russian'), +(3005, 'ru', 'zh-hans', '俄语'), +(3006, 'ru', 'zu', 'Russian'), +(3007, 'ru', 'zh-hant', '俄語'), +(3008, 'ru', 'ms', 'Russian'), +(3009, 'sl', 'en', 'Slovenian'), +(3010, 'sl', 'es', 'Esloveno'), +(3011, 'sl', 'de', 'Slowenisch'), +(3012, 'sl', 'fr', 'Slovène'), +(3013, 'sl', 'ar', 'السلوفانية'), +(3014, 'sl', 'bs', 'Slovenian'), +(3015, 'sl', 'bg', 'Slovenian'), +(3016, 'sl', 'ca', 'Slovenian'), +(3017, 'sl', 'cs', 'Slovenian'), +(3018, 'sl', 'sk', 'Slovinčina'), +(3019, 'sl', 'cy', 'Slovenian'), +(3020, 'sl', 'da', 'Slovenian'), +(3021, 'sl', 'el', 'Σλοβενικα'), +(3022, 'sl', 'eo', 'Slovenian'), +(3023, 'sl', 'et', 'Slovenian'), +(3024, 'sl', 'eu', 'Slovenian'), +(3025, 'sl', 'fa', 'Slovenian'), +(3026, 'sl', 'fi', 'sloveeni'), +(3027, 'sl', 'ga', 'Slovenian'), +(3028, 'sl', 'he', 'Slovenian'), +(3029, 'sl', 'hi', 'Slovenian'), +(3030, 'sl', 'hr', 'Slovenian'), +(3031, 'sl', 'hu', 'szlovén'), +(3032, 'sl', 'hy', 'Slovenian'), +(3033, 'sl', 'id', 'Slovenian'), +(3034, 'sl', 'is', 'Slovenian'), +(3035, 'sl', 'it', 'Sloveno'), +(3036, 'sl', 'ja', 'スロベニア語'), +(3037, 'sl', 'ko', '슬로베니아어'), +(3038, 'sl', 'ku', 'Slovenian'), +(3039, 'sl', 'la', 'Slovenian'), +(3040, 'sl', 'lv', 'Slovenian'), +(3041, 'sl', 'lt', 'Slovenian'), +(3042, 'sl', 'mk', 'Slovenian'), +(3043, 'sl', 'mt', 'Slovenian'), +(3044, 'sl', 'mo', 'Slovenian'), +(3045, 'sl', 'mn', 'Slovenian'), +(3046, 'sl', 'ne', 'Slovenian'), +(3047, 'sl', 'nl', 'Sloveens'), +(3048, 'sl', 'nb', 'Slovenian'), +(3049, 'sl', 'pa', 'Slovenian'), +(3050, 'sl', 'pl', 'słoweński'), +(3051, 'sl', 'pt-pt', 'Esloveno'), +(3052, 'sl', 'pt-br', 'Esloveno'), +(3053, 'sl', 'qu', 'Slovenian'), +(3054, 'sl', 'ro', 'Slovenă'), +(3055, 'sl', 'ru', 'Словенский'), +(3056, 'sl', 'sl', 'Slovenian'), +(3057, 'sl', 'so', 'Slovenian'), +(3058, 'sl', 'sq', 'Slovenian'), +(3059, 'sl', 'sr', 'Slovenian'), +(3060, 'sl', 'sv', 'Slovenska'), +(3061, 'sl', 'ta', 'Slovenian'), +(3062, 'sl', 'th', 'สโลวีเนียน'), +(3063, 'sl', 'tr', 'Sloven dili'), +(3064, 'sl', 'uk', 'Slovenian'), +(3065, 'sl', 'ur', 'Slovenian'), +(3066, 'sl', 'uz', 'Slovenian'), +(3067, 'sl', 'vi', 'Slovenian'), +(3068, 'sl', 'yi', 'Slovenian'), +(3069, 'sl', 'zh-hans', '斯洛文尼亚语'), +(3070, 'sl', 'zu', 'Slovenian'), +(3071, 'sl', 'zh-hant', '斯洛文尼亞語'), +(3072, 'sl', 'ms', 'Slovenian'), +(3073, 'so', 'en', 'Somali'), +(3074, 'so', 'es', 'Somalí'), +(3075, 'so', 'de', 'Somali'), +(3076, 'so', 'fr', 'Somali'), +(3077, 'so', 'ar', 'الصومالية'), +(3078, 'so', 'bs', 'Somali'), +(3079, 'so', 'bg', 'Somali'), +(3080, 'so', 'ca', 'Somali'), +(3081, 'so', 'cs', 'Somali'), +(3082, 'so', 'sk', 'Somálčina'), +(3083, 'so', 'cy', 'Somali'), +(3084, 'so', 'da', 'Somali'), +(3085, 'so', 'el', 'Somali'), +(3086, 'so', 'eo', 'Somali'), +(3087, 'so', 'et', 'Somali'), +(3088, 'so', 'eu', 'Somali'), +(3089, 'so', 'fa', 'Somali'), +(3090, 'so', 'fi', 'somali'), +(3091, 'so', 'ga', 'Somali'), +(3092, 'so', 'he', 'Somali'), +(3093, 'so', 'hi', 'Somali'), +(3094, 'so', 'hr', 'Somali'), +(3095, 'so', 'hu', 'szomáli'), +(3096, 'so', 'hy', 'Somali'), +(3097, 'so', 'id', 'Somali'), +(3098, 'so', 'is', 'Somali'), +(3099, 'so', 'it', 'Somalo'), +(3100, 'so', 'ja', 'ソマリ語'), +(3101, 'so', 'ko', '소말리아어'), +(3102, 'so', 'ku', 'Somali'), +(3103, 'so', 'la', 'Somali'), +(3104, 'so', 'lv', 'Somali'), +(3105, 'so', 'lt', 'Somali'), +(3106, 'so', 'mk', 'Somali'), +(3107, 'so', 'mt', 'Somali'), +(3108, 'so', 'mo', 'Somali'), +(3109, 'so', 'mn', 'Somali'), +(3110, 'so', 'ne', 'Somali'), +(3111, 'so', 'nl', 'Somalisch'), +(3112, 'so', 'nb', 'Somali'), +(3113, 'so', 'pa', 'Somali'), +(3114, 'so', 'pl', 'somalijski'), +(3115, 'so', 'pt-pt', 'Somali'), +(3116, 'so', 'pt-br', 'Somali'), +(3117, 'so', 'qu', 'Somali'), +(3118, 'so', 'ro', 'Somaleză'), +(3119, 'so', 'ru', 'Сомалийский'), +(3120, 'so', 'sl', 'Somali'), +(3121, 'so', 'so', 'Somali'), +(3122, 'so', 'sq', 'Somali'), +(3123, 'so', 'sr', 'Somali'), +(3124, 'so', 'sv', 'Somaliska'), +(3125, 'so', 'ta', 'Somali'), +(3126, 'so', 'th', 'โซมาลี'), +(3127, 'so', 'tr', 'Somalice'), +(3128, 'so', 'uk', 'Somali'), +(3129, 'so', 'ur', 'Somali'), +(3130, 'so', 'uz', 'Somali'), +(3131, 'so', 'vi', 'Somali'), +(3132, 'so', 'yi', 'Somali'), +(3133, 'so', 'zh-hans', '索马里语'), +(3134, 'so', 'zu', 'Somali'), +(3135, 'so', 'zh-hant', '索馬里語'), +(3136, 'so', 'ms', 'Somali'), +(3137, 'sq', 'en', 'Albanian'), +(3138, 'sq', 'es', 'Albanés'), +(3139, 'sq', 'de', 'Albanisch'), +(3140, 'sq', 'fr', 'Albanais'), +(3141, 'sq', 'ar', 'الألبانية'), +(3142, 'sq', 'bs', 'Albanian'), +(3143, 'sq', 'bg', 'Albanian'), +(3144, 'sq', 'ca', 'Albanian'), +(3145, 'sq', 'cs', 'Albanian'), +(3146, 'sq', 'sk', 'Albánčina'), +(3147, 'sq', 'cy', 'Albanian'), +(3148, 'sq', 'da', 'Albanian'), +(3149, 'sq', 'el', 'Αλβανικα'), +(3150, 'sq', 'eo', 'Albanian'), +(3151, 'sq', 'et', 'Albanian'), +(3152, 'sq', 'eu', 'Albanian'), +(3153, 'sq', 'fa', 'Albanian'), +(3154, 'sq', 'fi', 'albania'), +(3155, 'sq', 'ga', 'Albanian'), +(3156, 'sq', 'he', 'Albanian'), +(3157, 'sq', 'hi', 'Albanian'), +(3158, 'sq', 'hr', 'Albanian'), +(3159, 'sq', 'hu', 'albán'), +(3160, 'sq', 'hy', 'Albanian'), +(3161, 'sq', 'id', 'Albanian'), +(3162, 'sq', 'is', 'Albanian'), +(3163, 'sq', 'it', 'Albanese'), +(3164, 'sq', 'ja', 'アルバニア語'), +(3165, 'sq', 'ko', '알바니아어'), +(3166, 'sq', 'ku', 'Albanian'), +(3167, 'sq', 'la', 'Albanian'), +(3168, 'sq', 'lv', 'Albanian'), +(3169, 'sq', 'lt', 'Albanian'), +(3170, 'sq', 'mk', 'Albanian'), +(3171, 'sq', 'mt', 'Albanian'), +(3172, 'sq', 'mo', 'Albanian'), +(3173, 'sq', 'mn', 'Albanian'), +(3174, 'sq', 'ne', 'Albanian'), +(3175, 'sq', 'nl', 'Albaans'), +(3176, 'sq', 'nb', 'Albanian'), +(3177, 'sq', 'pa', 'Albanian'), +(3178, 'sq', 'pl', 'albański'), +(3179, 'sq', 'pt-pt', 'Albanês'), +(3180, 'sq', 'pt-br', 'Albanês'), +(3181, 'sq', 'qu', 'Albanian'), +(3182, 'sq', 'ro', 'Albaneză'), +(3183, 'sq', 'ru', 'Албанский'), +(3184, 'sq', 'sl', 'Albanian'), +(3185, 'sq', 'so', 'Albanian'), +(3186, 'sq', 'sq', 'Albanian'), +(3187, 'sq', 'sr', 'Albanian'), +(3188, 'sq', 'sv', 'Albanska'), +(3189, 'sq', 'ta', 'Albanian'), +(3190, 'sq', 'th', 'อัลเบเนีย'), +(3191, 'sq', 'tr', 'Arnavutça'), +(3192, 'sq', 'uk', 'Albanian'), +(3193, 'sq', 'ur', 'Albanian'), +(3194, 'sq', 'uz', 'Albanian'), +(3195, 'sq', 'vi', 'Albanian'), +(3196, 'sq', 'yi', 'Albanian'), +(3197, 'sq', 'zh-hans', '阿尔巴尼亚语'), +(3198, 'sq', 'zu', 'Albanian'), +(3199, 'sq', 'zh-hant', '阿爾巴尼亞語'), +(3200, 'sq', 'ms', 'Albanian'), +(3201, 'sr', 'en', 'Serbian'), +(3202, 'sr', 'es', 'Serbio'), +(3203, 'sr', 'de', 'Serbisch'), +(3204, 'sr', 'fr', 'Serbe'), +(3205, 'sr', 'ar', 'الصربية'), +(3206, 'sr', 'bs', 'Serbian'), +(3207, 'sr', 'bg', 'Serbian'), +(3208, 'sr', 'ca', 'Serbian'), +(3209, 'sr', 'cs', 'Serbian'), +(3210, 'sr', 'sk', 'Srbština'); +INSERT INTO `drgrp_icl_languages_translations` (`id`, `language_code`, `display_language_code`, `name`) VALUES +(3211, 'sr', 'cy', 'Serbian'), +(3212, 'sr', 'da', 'Serbian'), +(3213, 'sr', 'el', 'Σερβικα'), +(3214, 'sr', 'eo', 'Serbian'), +(3215, 'sr', 'et', 'Serbian'), +(3216, 'sr', 'eu', 'Serbian'), +(3217, 'sr', 'fa', 'Serbian'), +(3218, 'sr', 'fi', 'serbia'), +(3219, 'sr', 'ga', 'Serbian'), +(3220, 'sr', 'he', 'Serbian'), +(3221, 'sr', 'hi', 'Serbian'), +(3222, 'sr', 'hr', 'Serbian'), +(3223, 'sr', 'hu', 'szerb'), +(3224, 'sr', 'hy', 'Serbian'), +(3225, 'sr', 'id', 'Serbian'), +(3226, 'sr', 'is', 'Serbian'), +(3227, 'sr', 'it', 'Serbo'), +(3228, 'sr', 'ja', 'セルビア語'), +(3229, 'sr', 'ko', '세르비아어'), +(3230, 'sr', 'ku', 'Serbian'), +(3231, 'sr', 'la', 'Serbian'), +(3232, 'sr', 'lv', 'Serbian'), +(3233, 'sr', 'lt', 'Serbian'), +(3234, 'sr', 'mk', 'Serbian'), +(3235, 'sr', 'mt', 'Serbian'), +(3236, 'sr', 'mo', 'Serbian'), +(3237, 'sr', 'mn', 'Serbian'), +(3238, 'sr', 'ne', 'Serbian'), +(3239, 'sr', 'nl', 'Servisch'), +(3240, 'sr', 'nb', 'Serbian'), +(3241, 'sr', 'pa', 'Serbian'), +(3242, 'sr', 'pl', 'serbski'), +(3243, 'sr', 'pt-pt', 'Sérvio'), +(3244, 'sr', 'pt-br', 'Sérvio'), +(3245, 'sr', 'qu', 'Serbian'), +(3246, 'sr', 'ro', 'Sârbă'), +(3247, 'sr', 'ru', 'Сербский'), +(3248, 'sr', 'sl', 'Serbian'), +(3249, 'sr', 'so', 'Serbian'), +(3250, 'sr', 'sq', 'Serbian'), +(3251, 'sr', 'sr', 'Serbian'), +(3252, 'sr', 'sv', 'Serbiska'), +(3253, 'sr', 'ta', 'Serbian'), +(3254, 'sr', 'th', 'เซอร์เบีย'), +(3255, 'sr', 'tr', 'Sırpça'), +(3256, 'sr', 'uk', 'Serbian'), +(3257, 'sr', 'ur', 'Serbian'), +(3258, 'sr', 'uz', 'Serbian'), +(3259, 'sr', 'vi', 'Serbian'), +(3260, 'sr', 'yi', 'Serbian'), +(3261, 'sr', 'zh-hans', '赛尔维亚语'), +(3262, 'sr', 'zu', 'Serbian'), +(3263, 'sr', 'zh-hant', '賽爾維亞語'), +(3264, 'sr', 'ms', 'Serbian'), +(3265, 'sv', 'en', 'Swedish'), +(3266, 'sv', 'es', 'Sueco'), +(3267, 'sv', 'de', 'Schwedisch'), +(3268, 'sv', 'fr', 'Suédois'), +(3269, 'sv', 'ar', 'السويدية'), +(3270, 'sv', 'bs', 'Swedish'), +(3271, 'sv', 'bg', 'Swedish'), +(3272, 'sv', 'ca', 'Swedish'), +(3273, 'sv', 'cs', 'Swedish'), +(3274, 'sv', 'sk', 'Švédština'), +(3275, 'sv', 'cy', 'Swedish'), +(3276, 'sv', 'da', 'Swedish'), +(3277, 'sv', 'el', 'Σουηδικη'), +(3278, 'sv', 'eo', 'Swedish'), +(3279, 'sv', 'et', 'Swedish'), +(3280, 'sv', 'eu', 'Swedish'), +(3281, 'sv', 'fa', 'Swedish'), +(3282, 'sv', 'fi', 'ruotsi'), +(3283, 'sv', 'ga', 'Swedish'), +(3284, 'sv', 'he', 'שוודית'), +(3285, 'sv', 'hi', 'Swedish'), +(3286, 'sv', 'hr', 'Swedish'), +(3287, 'sv', 'hu', 'svéd'), +(3288, 'sv', 'hy', 'Swedish'), +(3289, 'sv', 'id', 'Swedish'), +(3290, 'sv', 'is', 'Swedish'), +(3291, 'sv', 'it', 'Svedese'), +(3292, 'sv', 'ja', 'スウェーデン語'), +(3293, 'sv', 'ko', '스웨덴어'), +(3294, 'sv', 'ku', 'Swedish'), +(3295, 'sv', 'la', 'Swedish'), +(3296, 'sv', 'lv', 'Swedish'), +(3297, 'sv', 'lt', 'Swedish'), +(3298, 'sv', 'mk', 'Swedish'), +(3299, 'sv', 'mt', 'Swedish'), +(3300, 'sv', 'mo', 'Swedish'), +(3301, 'sv', 'mn', 'Swedish'), +(3302, 'sv', 'ne', 'Swedish'), +(3303, 'sv', 'nl', 'Zweeds'), +(3304, 'sv', 'nb', 'Swedish'), +(3305, 'sv', 'pa', 'Swedish'), +(3306, 'sv', 'pl', 'szwedzki'), +(3307, 'sv', 'pt-pt', 'Sueco'), +(3308, 'sv', 'pt-br', 'Sueco'), +(3309, 'sv', 'qu', 'Swedish'), +(3310, 'sv', 'ro', 'Suedeză'), +(3311, 'sv', 'ru', 'Шведский'), +(3312, 'sv', 'sl', 'Swedish'), +(3313, 'sv', 'so', 'Swedish'), +(3314, 'sv', 'sq', 'Swedish'), +(3315, 'sv', 'sr', 'Swedish'), +(3316, 'sv', 'sv', 'Svenska'), +(3317, 'sv', 'ta', 'Swedish'), +(3318, 'sv', 'th', 'สวีเดน'), +(3319, 'sv', 'tr', 'İsveççe'), +(3320, 'sv', 'uk', 'Swedish'), +(3321, 'sv', 'ur', 'Swedish'), +(3322, 'sv', 'uz', 'Swedish'), +(3323, 'sv', 'vi', 'Swedish'), +(3324, 'sv', 'yi', 'Swedish'), +(3325, 'sv', 'zh-hans', '瑞典语'), +(3326, 'sv', 'zu', 'Swedish'), +(3327, 'sv', 'zh-hant', '瑞典語'), +(3328, 'sv', 'ms', 'Swedish'), +(3329, 'ta', 'en', 'Tamil'), +(3330, 'ta', 'es', 'Tamil'), +(3331, 'ta', 'de', 'Tamil'), +(3332, 'ta', 'fr', 'Tamoul'), +(3333, 'ta', 'ar', 'التاميلية'), +(3334, 'ta', 'bs', 'Tamil'), +(3335, 'ta', 'bg', 'Tamil'), +(3336, 'ta', 'ca', 'Tamil'), +(3337, 'ta', 'cs', 'Tamil'), +(3338, 'ta', 'sk', 'Tamilčina'), +(3339, 'ta', 'cy', 'Tamil'), +(3340, 'ta', 'da', 'Tamil'), +(3341, 'ta', 'el', 'Ταμιλ'), +(3342, 'ta', 'eo', 'Tamil'), +(3343, 'ta', 'et', 'Tamil'), +(3344, 'ta', 'eu', 'Tamil'), +(3345, 'ta', 'fa', 'Tamil'), +(3346, 'ta', 'fi', 'tamili'), +(3347, 'ta', 'ga', 'Tamil'), +(3348, 'ta', 'he', 'Tamil'), +(3349, 'ta', 'hi', 'Tamil'), +(3350, 'ta', 'hr', 'Tamil'), +(3351, 'ta', 'hu', 'tamil'), +(3352, 'ta', 'hy', 'Tamil'), +(3353, 'ta', 'id', 'Tamil'), +(3354, 'ta', 'is', 'Tamil'), +(3355, 'ta', 'it', 'Tamil'), +(3356, 'ta', 'ja', 'タミル語'), +(3357, 'ta', 'ko', '타밀어'), +(3358, 'ta', 'ku', 'Tamil'), +(3359, 'ta', 'la', 'Tamil'), +(3360, 'ta', 'lv', 'Tamil'), +(3361, 'ta', 'lt', 'Tamil'), +(3362, 'ta', 'mk', 'Tamil'), +(3363, 'ta', 'mt', 'Tamil'), +(3364, 'ta', 'mo', 'Tamil'), +(3365, 'ta', 'mn', 'Tamil'), +(3366, 'ta', 'ne', 'Tamil'), +(3367, 'ta', 'nl', 'Tamil'), +(3368, 'ta', 'nb', 'Tamil'), +(3369, 'ta', 'pa', 'Tamil'), +(3370, 'ta', 'pl', 'tamilski'), +(3371, 'ta', 'pt-pt', 'Tamil'), +(3372, 'ta', 'pt-br', 'Tamil'), +(3373, 'ta', 'qu', 'Tamil'), +(3374, 'ta', 'ro', 'Tamilă'), +(3375, 'ta', 'ru', 'Тамильский'), +(3376, 'ta', 'sl', 'Tamil'), +(3377, 'ta', 'so', 'Tamil'), +(3378, 'ta', 'sq', 'Tamil'), +(3379, 'ta', 'sr', 'Tamil'), +(3380, 'ta', 'sv', 'Tamil'), +(3381, 'ta', 'ta', 'Tamil'), +(3382, 'ta', 'th', 'ทมิฬ'), +(3383, 'ta', 'tr', 'Tamil dili'), +(3384, 'ta', 'uk', 'Tamil'), +(3385, 'ta', 'ur', 'Tamil'), +(3386, 'ta', 'uz', 'Tamil'), +(3387, 'ta', 'vi', 'Tamil'), +(3388, 'ta', 'yi', 'Tamil'), +(3389, 'ta', 'zh-hans', '泰米尔语'), +(3390, 'ta', 'zu', 'Tamil'), +(3391, 'ta', 'zh-hant', '泰米爾語'), +(3392, 'ta', 'ms', 'Tamil'), +(3393, 'th', 'en', 'Thai'), +(3394, 'th', 'es', 'Tailandés'), +(3395, 'th', 'de', 'Thai'), +(3396, 'th', 'fr', 'Thaï'), +(3397, 'th', 'ar', 'التايلندية'), +(3398, 'th', 'bs', 'Thai'), +(3399, 'th', 'bg', 'Thai'), +(3400, 'th', 'ca', 'Thai'), +(3401, 'th', 'cs', 'Thai'), +(3402, 'th', 'sk', 'Thajština'), +(3403, 'th', 'cy', 'Thai'), +(3404, 'th', 'da', 'Thai'), +(3405, 'th', 'el', 'Thai'), +(3406, 'th', 'eo', 'Thai'), +(3407, 'th', 'et', 'Thai'), +(3408, 'th', 'eu', 'Thai'), +(3409, 'th', 'fa', 'Thai'), +(3410, 'th', 'fi', 'thai'), +(3411, 'th', 'ga', 'Thai'), +(3412, 'th', 'he', 'Thai'), +(3413, 'th', 'hi', 'Thai'), +(3414, 'th', 'hr', 'Thai'), +(3415, 'th', 'hu', 'tájföldi'), +(3416, 'th', 'hy', 'Thai'), +(3417, 'th', 'id', 'Thai'), +(3418, 'th', 'is', 'Thai'), +(3419, 'th', 'it', 'Thai'), +(3420, 'th', 'ja', 'タイ語'), +(3421, 'th', 'ko', '태국어'), +(3422, 'th', 'ku', 'Thai'), +(3423, 'th', 'la', 'Thai'), +(3424, 'th', 'lv', 'Thai'), +(3425, 'th', 'lt', 'Thai'), +(3426, 'th', 'mk', 'Thai'), +(3427, 'th', 'mt', 'Thai'), +(3428, 'th', 'mo', 'Thai'), +(3429, 'th', 'mn', 'Thai'), +(3430, 'th', 'ne', 'Thai'), +(3431, 'th', 'nl', 'Thai'), +(3432, 'th', 'nb', 'Thai'), +(3433, 'th', 'pa', 'Thai'), +(3434, 'th', 'pl', 'tajski'), +(3435, 'th', 'pt-pt', 'Tailandês'), +(3436, 'th', 'pt-br', 'Tailandês'), +(3437, 'th', 'qu', 'Thai'), +(3438, 'th', 'ro', 'Tailandeză'), +(3439, 'th', 'ru', 'Тайский'), +(3440, 'th', 'sl', 'Thai'), +(3441, 'th', 'so', 'Thai'), +(3442, 'th', 'sq', 'Thai'), +(3443, 'th', 'sr', 'Thai'), +(3444, 'th', 'sv', 'Thailändska'), +(3445, 'th', 'ta', 'Thai'), +(3446, 'th', 'th', 'ไทย'), +(3447, 'th', 'tr', 'Tayca'), +(3448, 'th', 'uk', 'Thai'), +(3449, 'th', 'ur', 'Thai'), +(3450, 'th', 'uz', 'Thai'), +(3451, 'th', 'vi', 'Thai'), +(3452, 'th', 'yi', 'Thai'), +(3453, 'th', 'zh-hans', '泰语'), +(3454, 'th', 'zu', 'Thai'), +(3455, 'th', 'zh-hant', '泰語'), +(3456, 'th', 'ms', 'Thai'), +(3457, 'tr', 'en', 'Turkish'), +(3458, 'tr', 'es', 'Turco'), +(3459, 'tr', 'de', 'Türkisch'), +(3460, 'tr', 'fr', 'Turc'), +(3461, 'tr', 'ar', 'التركية'), +(3462, 'tr', 'bs', 'Turkish'), +(3463, 'tr', 'bg', 'Turkish'), +(3464, 'tr', 'ca', 'Turkish'), +(3465, 'tr', 'cs', 'Turkish'), +(3466, 'tr', 'sk', 'Turečtina'), +(3467, 'tr', 'cy', 'Turkish'), +(3468, 'tr', 'da', 'Turkish'), +(3469, 'tr', 'el', 'Τουρκικα'), +(3470, 'tr', 'eo', 'Turkish'), +(3471, 'tr', 'et', 'Turkish'), +(3472, 'tr', 'eu', 'Turkish'), +(3473, 'tr', 'fa', 'Turkish'), +(3474, 'tr', 'fi', 'turkki'), +(3475, 'tr', 'ga', 'Turkish'), +(3476, 'tr', 'he', 'תורכית'), +(3477, 'tr', 'hi', 'Turkish'), +(3478, 'tr', 'hr', 'Turkish'), +(3479, 'tr', 'hu', 'török'), +(3480, 'tr', 'hy', 'Turkish'), +(3481, 'tr', 'id', 'Turkish'), +(3482, 'tr', 'is', 'Turkish'), +(3483, 'tr', 'it', 'Turco'), +(3484, 'tr', 'ja', 'トルコ語'), +(3485, 'tr', 'ko', '터어키어'), +(3486, 'tr', 'ku', 'Turkish'), +(3487, 'tr', 'la', 'Turkish'), +(3488, 'tr', 'lv', 'Turkish'), +(3489, 'tr', 'lt', 'Turkish'), +(3490, 'tr', 'mk', 'Turkish'), +(3491, 'tr', 'mt', 'Turkish'), +(3492, 'tr', 'mo', 'Turkish'), +(3493, 'tr', 'mn', 'Turkish'), +(3494, 'tr', 'ne', 'Turkish'), +(3495, 'tr', 'nl', 'Turks'), +(3496, 'tr', 'nb', 'Turkish'), +(3497, 'tr', 'pa', 'Turkish'), +(3498, 'tr', 'pl', 'turecki'), +(3499, 'tr', 'pt-pt', 'Turco'), +(3500, 'tr', 'pt-br', 'Turco'), +(3501, 'tr', 'qu', 'Turkish'), +(3502, 'tr', 'ro', 'Turcă'), +(3503, 'tr', 'ru', 'Турецкий'), +(3504, 'tr', 'sl', 'Turkish'), +(3505, 'tr', 'so', 'Turkish'), +(3506, 'tr', 'sq', 'Turkish'), +(3507, 'tr', 'sr', 'Turkish'), +(3508, 'tr', 'sv', 'Turkiska'), +(3509, 'tr', 'ta', 'Turkish'), +(3510, 'tr', 'th', 'ตุรกี'), +(3511, 'tr', 'tr', 'Türkçe'), +(3512, 'tr', 'uk', 'Turkish'), +(3513, 'tr', 'ur', 'Turkish'), +(3514, 'tr', 'uz', 'Turkish'), +(3515, 'tr', 'vi', 'Turkish'), +(3516, 'tr', 'yi', 'Turkish'), +(3517, 'tr', 'zh-hans', '土耳其语'), +(3518, 'tr', 'zu', 'Turkish'), +(3519, 'tr', 'zh-hant', '土耳其語'), +(3520, 'tr', 'ms', 'Turkish'), +(3521, 'uk', 'en', 'Ukrainian'), +(3522, 'uk', 'es', 'Ucraniano'), +(3523, 'uk', 'de', 'Ukrainisch'), +(3524, 'uk', 'fr', 'Ukrainien'), +(3525, 'uk', 'ar', 'الأوكرانية'), +(3526, 'uk', 'bs', 'Ukrainian'), +(3527, 'uk', 'bg', 'Ukrainian'), +(3528, 'uk', 'ca', 'Ukrainian'), +(3529, 'uk', 'cs', 'Ukrainian'), +(3530, 'uk', 'sk', 'Ukrajinčina'), +(3531, 'uk', 'cy', 'Ukrainian'), +(3532, 'uk', 'da', 'Ukrainian'), +(3533, 'uk', 'el', 'Ουκρανικα'), +(3534, 'uk', 'eo', 'Ukrainian'), +(3535, 'uk', 'et', 'Ukrainian'), +(3536, 'uk', 'eu', 'Ukrainian'), +(3537, 'uk', 'fa', 'Ukrainian'), +(3538, 'uk', 'fi', 'ukraina'), +(3539, 'uk', 'ga', 'Ukrainian'), +(3540, 'uk', 'he', 'Ukrainian'), +(3541, 'uk', 'hi', 'Ukrainian'), +(3542, 'uk', 'hr', 'Ukrainian'), +(3543, 'uk', 'hu', 'ukrán'), +(3544, 'uk', 'hy', 'Ukrainian'), +(3545, 'uk', 'id', 'Ukrainian'), +(3546, 'uk', 'is', 'Ukrainian'), +(3547, 'uk', 'it', 'Ucraino'), +(3548, 'uk', 'ja', 'ウクライナ語'), +(3549, 'uk', 'ko', '우크라이나어'), +(3550, 'uk', 'ku', 'Ukrainian'), +(3551, 'uk', 'la', 'Ukrainian'), +(3552, 'uk', 'lv', 'Ukrainian'), +(3553, 'uk', 'lt', 'Ukrainian'), +(3554, 'uk', 'mk', 'Ukrainian'), +(3555, 'uk', 'mt', 'Ukrainian'), +(3556, 'uk', 'mo', 'Ukrainian'), +(3557, 'uk', 'mn', 'Ukrainian'), +(3558, 'uk', 'ne', 'Ukrainian'), +(3559, 'uk', 'nl', 'Oekraïens'), +(3560, 'uk', 'nb', 'Ukrainian'), +(3561, 'uk', 'pa', 'Ukrainian'), +(3562, 'uk', 'pl', 'ukraiński'), +(3563, 'uk', 'pt-pt', 'Ucraniano'), +(3564, 'uk', 'pt-br', 'Ucraniano'), +(3565, 'uk', 'qu', 'Ukrainian'), +(3566, 'uk', 'ro', 'Ucrainiană'), +(3567, 'uk', 'ru', 'Украинский'), +(3568, 'uk', 'sl', 'Ukrainian'), +(3569, 'uk', 'so', 'Ukrainian'), +(3570, 'uk', 'sq', 'Ukrainian'), +(3571, 'uk', 'sr', 'Ukrainian'), +(3572, 'uk', 'sv', 'Ukrainska'), +(3573, 'uk', 'ta', 'Ukrainian'), +(3574, 'uk', 'th', 'ยูเครน'), +(3575, 'uk', 'tr', 'Ukraynaca'), +(3576, 'uk', 'uk', 'Ukrainian'), +(3577, 'uk', 'ur', 'Ukrainian'), +(3578, 'uk', 'uz', 'Ukrainian'), +(3579, 'uk', 'vi', 'Ukrainian'), +(3580, 'uk', 'yi', 'Ukrainian'), +(3581, 'uk', 'zh-hans', '乌克兰语'), +(3582, 'uk', 'zu', 'Ukrainian'), +(3583, 'uk', 'zh-hant', '烏克蘭語'), +(3584, 'uk', 'ms', 'Ukrainian'), +(3585, 'ur', 'en', 'Urdu'), +(3586, 'ur', 'es', 'Urdu'), +(3587, 'ur', 'de', 'Urdu'), +(3588, 'ur', 'fr', 'Ourdu'), +(3589, 'ur', 'ar', 'الأردية'), +(3590, 'ur', 'bs', 'Urdu'), +(3591, 'ur', 'bg', 'Urdu'), +(3592, 'ur', 'ca', 'Urdu'), +(3593, 'ur', 'cs', 'Urdu'), +(3594, 'ur', 'sk', 'Urdština'), +(3595, 'ur', 'cy', 'Urdu'), +(3596, 'ur', 'da', 'Urdu'), +(3597, 'ur', 'el', 'Ουρντου'), +(3598, 'ur', 'eo', 'Urdu'), +(3599, 'ur', 'et', 'Urdu'), +(3600, 'ur', 'eu', 'Urdu'), +(3601, 'ur', 'fa', 'Urdu'), +(3602, 'ur', 'fi', 'urdu'), +(3603, 'ur', 'ga', 'Urdu'), +(3604, 'ur', 'he', 'Urdu'), +(3605, 'ur', 'hi', 'Urdu'), +(3606, 'ur', 'hr', 'Urdu'), +(3607, 'ur', 'hu', 'urdu'), +(3608, 'ur', 'hy', 'Urdu'), +(3609, 'ur', 'id', 'Urdu'), +(3610, 'ur', 'is', 'Urdu'), +(3611, 'ur', 'it', 'Urdu'), +(3612, 'ur', 'ja', 'ウルドゥー語'), +(3613, 'ur', 'ko', '우르두어'), +(3614, 'ur', 'ku', 'Urdu'), +(3615, 'ur', 'la', 'Urdu'), +(3616, 'ur', 'lv', 'Urdu'), +(3617, 'ur', 'lt', 'Urdu'), +(3618, 'ur', 'mk', 'Urdu'), +(3619, 'ur', 'mt', 'Urdu'), +(3620, 'ur', 'mo', 'Urdu'), +(3621, 'ur', 'mn', 'Urdu'), +(3622, 'ur', 'ne', 'Urdu'), +(3623, 'ur', 'nl', 'Urdu'), +(3624, 'ur', 'nb', 'Urdu'), +(3625, 'ur', 'pa', 'Urdu'), +(3626, 'ur', 'pl', 'urdu'), +(3627, 'ur', 'pt-pt', 'Urdu'), +(3628, 'ur', 'pt-br', 'Urdu'), +(3629, 'ur', 'qu', 'Urdu'), +(3630, 'ur', 'ro', 'Urdu'), +(3631, 'ur', 'ru', 'Урду'), +(3632, 'ur', 'sl', 'Urdu'), +(3633, 'ur', 'so', 'Urdu'), +(3634, 'ur', 'sq', 'Urdu'), +(3635, 'ur', 'sr', 'Urdu'), +(3636, 'ur', 'sv', 'Urdu'), +(3637, 'ur', 'ta', 'Urdu'), +(3638, 'ur', 'th', 'อุรดู'), +(3639, 'ur', 'tr', 'Urduca'), +(3640, 'ur', 'uk', 'Urdu'), +(3641, 'ur', 'ur', 'Urdu'), +(3642, 'ur', 'uz', 'Urdu'), +(3643, 'ur', 'vi', 'Urdu'), +(3644, 'ur', 'yi', 'Urdu'), +(3645, 'ur', 'zh-hans', '乌尔都语'), +(3646, 'ur', 'zu', 'Urdu'), +(3647, 'ur', 'zh-hant', '烏爾都語'), +(3648, 'ur', 'ms', 'Urdu'), +(3649, 'uz', 'en', 'Uzbek'), +(3650, 'uz', 'es', 'Uzbeko'), +(3651, 'uz', 'de', 'Usbekisch'), +(3652, 'uz', 'fr', 'Ouzbek'), +(3653, 'uz', 'ar', 'الاوزباكية'), +(3654, 'uz', 'bs', 'Uzbek'), +(3655, 'uz', 'bg', 'Uzbek'), +(3656, 'uz', 'ca', 'Uzbek'), +(3657, 'uz', 'cs', 'Uzbek'), +(3658, 'uz', 'sk', 'Uzbekčina'), +(3659, 'uz', 'cy', 'Uzbek'), +(3660, 'uz', 'da', 'Uzbek'), +(3661, 'uz', 'el', 'Ουζμπεκικα'), +(3662, 'uz', 'eo', 'Uzbek'), +(3663, 'uz', 'et', 'Uzbek'), +(3664, 'uz', 'eu', 'Uzbek'), +(3665, 'uz', 'fa', 'Uzbek'), +(3666, 'uz', 'fi', 'uzbekki'), +(3667, 'uz', 'ga', 'Uzbek'), +(3668, 'uz', 'he', 'Uzbek'), +(3669, 'uz', 'hi', 'Uzbek'), +(3670, 'uz', 'hr', 'Uzbek'), +(3671, 'uz', 'hu', 'üzbég'), +(3672, 'uz', 'hy', 'Uzbek'), +(3673, 'uz', 'id', 'Uzbek'), +(3674, 'uz', 'is', 'Uzbek'), +(3675, 'uz', 'it', 'Uzbeco'), +(3676, 'uz', 'ja', 'ウズベク語'), +(3677, 'uz', 'ko', '우즈베크어'), +(3678, 'uz', 'ku', 'Uzbek'), +(3679, 'uz', 'la', 'Uzbek'), +(3680, 'uz', 'lv', 'Uzbek'), +(3681, 'uz', 'lt', 'Uzbek'), +(3682, 'uz', 'mk', 'Uzbek'), +(3683, 'uz', 'mt', 'Uzbek'), +(3684, 'uz', 'mo', 'Uzbek'), +(3685, 'uz', 'mn', 'Uzbek'), +(3686, 'uz', 'ne', 'Uzbek'), +(3687, 'uz', 'nl', 'Oezbeeks'), +(3688, 'uz', 'nb', 'Uzbek'), +(3689, 'uz', 'pa', 'Uzbek'), +(3690, 'uz', 'pl', 'uzbecki'), +(3691, 'uz', 'pt-pt', 'Uzbeque'), +(3692, 'uz', 'pt-br', 'Uzbeque'), +(3693, 'uz', 'qu', 'Uzbek'), +(3694, 'uz', 'ro', 'Uzbecă'), +(3695, 'uz', 'ru', 'Узбекский'), +(3696, 'uz', 'sl', 'Uzbek'), +(3697, 'uz', 'so', 'Uzbek'), +(3698, 'uz', 'sq', 'Uzbek'), +(3699, 'uz', 'sr', 'Uzbek'), +(3700, 'uz', 'sv', 'Uzbekiska'), +(3701, 'uz', 'ta', 'Uzbek'), +(3702, 'uz', 'th', 'อุซเบก'), +(3703, 'uz', 'tr', 'Özbekçe'), +(3704, 'uz', 'uk', 'Uzbek'), +(3705, 'uz', 'ur', 'Uzbek'), +(3706, 'uz', 'uz', 'Uzbek'), +(3707, 'uz', 'vi', 'Uzbek'), +(3708, 'uz', 'yi', 'Uzbek'), +(3709, 'uz', 'zh-hans', '乌兹别克语'), +(3710, 'uz', 'zu', 'Uzbek'), +(3711, 'uz', 'zh-hant', '烏茲別克語'), +(3712, 'uz', 'ms', 'Uzbek'), +(3713, 'vi', 'en', 'Vietnamese'), +(3714, 'vi', 'es', 'Vietnamita'), +(3715, 'vi', 'de', 'Vietnamesisch'), +(3716, 'vi', 'fr', 'Vietnamien'), +(3717, 'vi', 'ar', 'الفيتنامية'), +(3718, 'vi', 'bs', 'Vietnamese'), +(3719, 'vi', 'bg', 'Vietnamese'), +(3720, 'vi', 'ca', 'Vietnamese'), +(3721, 'vi', 'cs', 'Vietnamese'), +(3722, 'vi', 'sk', 'Vietnamčina'), +(3723, 'vi', 'cy', 'Vietnamese'), +(3724, 'vi', 'da', 'Vietnamese'), +(3725, 'vi', 'el', 'Βιετναμεζικα'), +(3726, 'vi', 'eo', 'Vietnamese'), +(3727, 'vi', 'et', 'Vietnamese'), +(3728, 'vi', 'eu', 'Vietnamese'), +(3729, 'vi', 'fa', 'Vietnamese'), +(3730, 'vi', 'fi', 'vietnam'), +(3731, 'vi', 'ga', 'Vietnamese'), +(3732, 'vi', 'he', 'Vietnamese'), +(3733, 'vi', 'hi', 'Vietnamese'), +(3734, 'vi', 'hr', 'Vietnamese'), +(3735, 'vi', 'hu', 'vietnámi'), +(3736, 'vi', 'hy', 'Vietnamese'), +(3737, 'vi', 'id', 'Vietnamese'), +(3738, 'vi', 'is', 'Vietnamese'), +(3739, 'vi', 'it', 'Vietnamita'), +(3740, 'vi', 'ja', 'ベトナム語'), +(3741, 'vi', 'ko', '베트남어'), +(3742, 'vi', 'ku', 'Vietnamese'), +(3743, 'vi', 'la', 'Vietnamese'), +(3744, 'vi', 'lv', 'Vietnamese'), +(3745, 'vi', 'lt', 'Vietnamese'), +(3746, 'vi', 'mk', 'Vietnamese'), +(3747, 'vi', 'mt', 'Vietnamese'), +(3748, 'vi', 'mo', 'Vietnamese'), +(3749, 'vi', 'mn', 'Vietnamese'), +(3750, 'vi', 'ne', 'Vietnamese'), +(3751, 'vi', 'nl', 'Vietnamees'), +(3752, 'vi', 'nb', 'Vietnamese'), +(3753, 'vi', 'pa', 'Vietnamese'), +(3754, 'vi', 'pl', 'wietnamski'), +(3755, 'vi', 'pt-pt', 'Vietnamita'), +(3756, 'vi', 'pt-br', 'Vietnamita'), +(3757, 'vi', 'qu', 'Vietnamese'), +(3758, 'vi', 'ro', 'Vietnameză'), +(3759, 'vi', 'ru', 'Вьетнамский'), +(3760, 'vi', 'sl', 'Vietnamese'), +(3761, 'vi', 'so', 'Vietnamese'), +(3762, 'vi', 'sq', 'Vietnamese'), +(3763, 'vi', 'sr', 'Vietnamese'), +(3764, 'vi', 'sv', 'Vietnamesiska'), +(3765, 'vi', 'ta', 'Vietnamese'), +(3766, 'vi', 'th', 'เวียดนาม'), +(3767, 'vi', 'tr', 'Vietnamca'), +(3768, 'vi', 'uk', 'Vietnamese'), +(3769, 'vi', 'ur', 'Vietnamese'), +(3770, 'vi', 'uz', 'Vietnamese'), +(3771, 'vi', 'vi', 'Vietnamese'), +(3772, 'vi', 'yi', 'Vietnamese'), +(3773, 'vi', 'zh-hans', '越南语'), +(3774, 'vi', 'zu', 'Vietnamese'), +(3775, 'vi', 'zh-hant', '越南語'), +(3776, 'vi', 'ms', 'Vietnamese'), +(3777, 'yi', 'en', 'Yiddish'), +(3778, 'yi', 'es', 'Yidis'), +(3779, 'yi', 'de', 'Jiddisch'), +(3780, 'yi', 'fr', 'Yiddish'), +(3781, 'yi', 'ar', 'اليديشية'), +(3782, 'yi', 'bs', 'Yiddish'), +(3783, 'yi', 'bg', 'Yiddish'), +(3784, 'yi', 'ca', 'Yiddish'), +(3785, 'yi', 'cs', 'Yiddish'), +(3786, 'yi', 'sk', 'Jidiš'), +(3787, 'yi', 'cy', 'Yiddish'), +(3788, 'yi', 'da', 'Yiddish'), +(3789, 'yi', 'el', 'Γιντις'), +(3790, 'yi', 'eo', 'Yiddish'), +(3791, 'yi', 'et', 'Yiddish'), +(3792, 'yi', 'eu', 'Yiddish'), +(3793, 'yi', 'fa', 'Yiddish'), +(3794, 'yi', 'fi', 'jiddi'), +(3795, 'yi', 'ga', 'Yiddish'), +(3796, 'yi', 'he', 'יידיש'), +(3797, 'yi', 'hi', 'Yiddish'), +(3798, 'yi', 'hr', 'Yiddish'), +(3799, 'yi', 'hu', 'jiddis'), +(3800, 'yi', 'hy', 'Yiddish'), +(3801, 'yi', 'id', 'Yiddish'), +(3802, 'yi', 'is', 'Yiddish'), +(3803, 'yi', 'it', 'Yiddish'), +(3804, 'yi', 'ja', 'イディッシュ語'), +(3805, 'yi', 'ko', '이디시어'), +(3806, 'yi', 'ku', 'Yiddish'), +(3807, 'yi', 'la', 'Yiddish'), +(3808, 'yi', 'lv', 'Yiddish'), +(3809, 'yi', 'lt', 'Yiddish'), +(3810, 'yi', 'mk', 'Yiddish'), +(3811, 'yi', 'mt', 'Yiddish'), +(3812, 'yi', 'mo', 'Yiddish'), +(3813, 'yi', 'mn', 'Yiddish'), +(3814, 'yi', 'ne', 'Yiddish'), +(3815, 'yi', 'nl', 'Jiddisch'), +(3816, 'yi', 'nb', 'Yiddish'), +(3817, 'yi', 'pa', 'Yiddish'), +(3818, 'yi', 'pl', 'jidysz'), +(3819, 'yi', 'pt-pt', 'Yiddish'), +(3820, 'yi', 'pt-br', 'Yiddish'), +(3821, 'yi', 'qu', 'Yiddish'), +(3822, 'yi', 'ro', 'Idiş'), +(3823, 'yi', 'ru', 'Идиш'), +(3824, 'yi', 'sl', 'Yiddish'), +(3825, 'yi', 'so', 'Yiddish'), +(3826, 'yi', 'sq', 'Yiddish'), +(3827, 'yi', 'sr', 'Yiddish'), +(3828, 'yi', 'sv', 'Jiddisch'), +(3829, 'yi', 'ta', 'Yiddish'), +(3830, 'yi', 'th', 'ยิชดิช'), +(3831, 'yi', 'tr', 'Eski İbranice'), +(3832, 'yi', 'uk', 'Yiddish'), +(3833, 'yi', 'ur', 'Yiddish'), +(3834, 'yi', 'uz', 'Yiddish'), +(3835, 'yi', 'vi', 'Yiddish'), +(3836, 'yi', 'yi', 'Yiddish'), +(3837, 'yi', 'zh-hans', '依地语'), +(3838, 'yi', 'zu', 'Yiddish'), +(3839, 'yi', 'zh-hant', '依地語'), +(3840, 'yi', 'ms', 'Yiddish'), +(3841, 'zh-hans', 'en', 'Chinese (Simplified)'), +(3842, 'zh-hans', 'es', 'Chino simplificado'), +(3843, 'zh-hans', 'de', 'Vereinfachtes Chinesisch'), +(3844, 'zh-hans', 'fr', 'Chinois simplifié'), +(3845, 'zh-hans', 'ar', 'الصينية المبسطة'), +(3846, 'zh-hans', 'bs', 'Chinese (Simplified)'), +(3847, 'zh-hans', 'bg', 'Chinese (Simplified)'), +(3848, 'zh-hans', 'ca', 'Chinese (Simplified)'), +(3849, 'zh-hans', 'cs', 'Chinese (Simplified)'), +(3850, 'zh-hans', 'sk', 'Zjednodušená Čínština'), +(3851, 'zh-hans', 'cy', 'Chinese (Simplified)'), +(3852, 'zh-hans', 'da', 'Chinese (Simplified)'), +(3853, 'zh-hans', 'el', 'Κινεζικα'), +(3854, 'zh-hans', 'eo', 'Chinese (Simplified)'), +(3855, 'zh-hans', 'et', 'Chinese (Simplified)'), +(3856, 'zh-hans', 'eu', 'Chinese (Simplified)'), +(3857, 'zh-hans', 'fa', 'Chinese (Simplified)'), +(3858, 'zh-hans', 'fi', 'kiina'), +(3859, 'zh-hans', 'ga', 'Chinese (Simplified)'), +(3860, 'zh-hans', 'he', 'סינית'), +(3861, 'zh-hans', 'hi', 'Chinese (Simplified)'), +(3862, 'zh-hans', 'hr', 'Chinese (Simplified)'), +(3863, 'zh-hans', 'hu', 'egyszerűsített kínai'), +(3864, 'zh-hans', 'hy', 'Chinese (Simplified)'), +(3865, 'zh-hans', 'id', 'Chinese (Simplified)'), +(3866, 'zh-hans', 'is', 'Chinese (Simplified)'), +(3867, 'zh-hans', 'it', 'Cinese semplificato'), +(3868, 'zh-hans', 'ja', '簡体中国語'), +(3869, 'zh-hans', 'ko', '중국어 간체'), +(3870, 'zh-hans', 'ku', 'Chinese (Simplified)'), +(3871, 'zh-hans', 'la', 'Chinese (Simplified)'), +(3872, 'zh-hans', 'lv', 'Chinese (Simplified)'), +(3873, 'zh-hans', 'lt', 'Chinese (Simplified)'), +(3874, 'zh-hans', 'mk', 'Chinese (Simplified)'), +(3875, 'zh-hans', 'mt', 'Chinese (Simplified)'), +(3876, 'zh-hans', 'mo', 'Chinese (Simplified)'), +(3877, 'zh-hans', 'mn', 'Chinese (Simplified)'), +(3878, 'zh-hans', 'ne', 'Chinese (Simplified)'), +(3879, 'zh-hans', 'nl', 'Vereenvoudigd Chinees'), +(3880, 'zh-hans', 'nb', 'Chinese (Simplified)'), +(3881, 'zh-hans', 'pa', 'Chinese (Simplified)'), +(3882, 'zh-hans', 'pl', 'chiński uproszczony'), +(3883, 'zh-hans', 'pt-pt', 'Chinês'), +(3884, 'zh-hans', 'pt-br', 'Chinês'), +(3885, 'zh-hans', 'qu', 'Chinese (Simplified)'), +(3886, 'zh-hans', 'ro', 'Chineza simplificată'), +(3887, 'zh-hans', 'ru', 'Упрощенный китайский'), +(3888, 'zh-hans', 'sl', 'Chinese (Simplified)'), +(3889, 'zh-hans', 'so', 'Chinese (Simplified)'), +(3890, 'zh-hans', 'sq', 'Chinese (Simplified)'), +(3891, 'zh-hans', 'sr', 'Chinese (Simplified)'), +(3892, 'zh-hans', 'sv', 'Förenklad kinesiska'), +(3893, 'zh-hans', 'ta', 'Chinese (Simplified)'), +(3894, 'zh-hans', 'th', 'จีนประยุกต์'), +(3895, 'zh-hans', 'tr', 'Modern Çince'), +(3896, 'zh-hans', 'uk', 'Chinese (Simplified)'), +(3897, 'zh-hans', 'ur', 'Chinese (Simplified)'), +(3898, 'zh-hans', 'uz', 'Chinese (Simplified)'), +(3899, 'zh-hans', 'vi', 'Chinese (Simplified)'), +(3900, 'zh-hans', 'yi', 'Chinese (Simplified)'), +(3901, 'zh-hans', 'zh-hans', '简体中文'), +(3902, 'zh-hans', 'zu', 'Chinese (Simplified)'), +(3903, 'zh-hans', 'zh-hant', '簡體中文'), +(3904, 'zh-hans', 'ms', 'Chinese (Simplified)'), +(3905, 'zu', 'en', 'Zulu'), +(3906, 'zu', 'es', 'Zulú'), +(3907, 'zu', 'de', 'Zulu'), +(3908, 'zu', 'fr', 'Zoulou'), +(3909, 'zu', 'ar', 'الزولو'), +(3910, 'zu', 'bs', 'Zulu'), +(3911, 'zu', 'bg', 'Zulu'), +(3912, 'zu', 'ca', 'Zulu'), +(3913, 'zu', 'cs', 'Zulu'), +(3914, 'zu', 'sk', 'Jazyk Zulu'), +(3915, 'zu', 'cy', 'Zulu'), +(3916, 'zu', 'da', 'Zulu'), +(3917, 'zu', 'el', 'Ζουλου'), +(3918, 'zu', 'eo', 'Zulu'), +(3919, 'zu', 'et', 'Zulu'), +(3920, 'zu', 'eu', 'Zulu'), +(3921, 'zu', 'fa', 'Zulu'), +(3922, 'zu', 'fi', 'zulu'), +(3923, 'zu', 'ga', 'Zulu'), +(3924, 'zu', 'he', 'Zulu'), +(3925, 'zu', 'hi', 'Zulu'), +(3926, 'zu', 'hr', 'Zulu'), +(3927, 'zu', 'hu', 'zulu'), +(3928, 'zu', 'hy', 'Zulu'), +(3929, 'zu', 'id', 'Zulu'), +(3930, 'zu', 'is', 'Zulu'), +(3931, 'zu', 'it', 'Zulu'), +(3932, 'zu', 'ja', 'ズールー語'), +(3933, 'zu', 'ko', '줄루어'), +(3934, 'zu', 'ku', 'Zulu'), +(3935, 'zu', 'la', 'Zulu'), +(3936, 'zu', 'lv', 'Zulu'), +(3937, 'zu', 'lt', 'Zulu'), +(3938, 'zu', 'mk', 'Zulu'), +(3939, 'zu', 'mt', 'Zulu'), +(3940, 'zu', 'mo', 'Zulu'), +(3941, 'zu', 'mn', 'Zulu'), +(3942, 'zu', 'ne', 'Zulu'), +(3943, 'zu', 'nl', 'Zulu'), +(3944, 'zu', 'nb', 'Zulu'), +(3945, 'zu', 'pa', 'Zulu'), +(3946, 'zu', 'pl', 'zuluski'), +(3947, 'zu', 'pt-pt', 'Zulu'), +(3948, 'zu', 'pt-br', 'Zulu'), +(3949, 'zu', 'qu', 'Zulu'), +(3950, 'zu', 'ro', 'Zulu'), +(3951, 'zu', 'ru', 'Зулу'), +(3952, 'zu', 'sl', 'Zulu'), +(3953, 'zu', 'so', 'Zulu'), +(3954, 'zu', 'sq', 'Zulu'), +(3955, 'zu', 'sr', 'Zulu'), +(3956, 'zu', 'sv', 'Zulu'), +(3957, 'zu', 'ta', 'Zulu'), +(3958, 'zu', 'th', 'ซูลู'), +(3959, 'zu', 'tr', 'Zulu dili'), +(3960, 'zu', 'uk', 'Zulu'), +(3961, 'zu', 'ur', 'Zulu'), +(3962, 'zu', 'uz', 'Zulu'), +(3963, 'zu', 'vi', 'Zulu'), +(3964, 'zu', 'yi', 'Zulu'), +(3965, 'zu', 'zh-hans', '祖鲁语'), +(3966, 'zu', 'zu', 'Zulu'), +(3967, 'zu', 'zh-hant', '祖魯語'), +(3968, 'zu', 'ms', 'Zulu'), +(3969, 'zh-hant', 'en', 'Chinese (Traditional)'), +(3970, 'zh-hant', 'es', 'Chino tradicional'), +(3971, 'zh-hant', 'de', 'Traditionelles Chinesisch'), +(3972, 'zh-hant', 'fr', 'Chinois traditionnel'), +(3973, 'zh-hant', 'ar', 'الصينية التقليدية'), +(3974, 'zh-hant', 'bs', 'Chinese (Traditional)'), +(3975, 'zh-hant', 'bg', 'Chinese (Traditional)'), +(3976, 'zh-hant', 'ca', 'Chinese (Traditional)'), +(3977, 'zh-hant', 'cs', 'Chinese (Traditional)'), +(3978, 'zh-hant', 'sk', 'Tradičná Čínština'), +(3979, 'zh-hant', 'cy', 'Chinese (Traditional)'), +(3980, 'zh-hant', 'da', 'Chinese (Traditional)'), +(3981, 'zh-hant', 'el', 'Κινεζικα'), +(3982, 'zh-hant', 'eo', 'Chinese (Traditional)'), +(3983, 'zh-hant', 'et', 'Chinese (Traditional)'), +(3984, 'zh-hant', 'eu', 'Chinese (Traditional)'), +(3985, 'zh-hant', 'fa', 'Chinese (Traditional)'), +(3986, 'zh-hant', 'fi', 'perinteinen kiina'), +(3987, 'zh-hant', 'ga', 'Chinese (Traditional)'), +(3988, 'zh-hant', 'he', 'סינית מסורתית'), +(3989, 'zh-hant', 'hi', 'Chinese (Traditional)'), +(3990, 'zh-hant', 'hr', 'Chinese (Traditional)'), +(3991, 'zh-hant', 'hu', 'hagyományos kínai'), +(3992, 'zh-hant', 'hy', 'Chinese (Traditional)'), +(3993, 'zh-hant', 'id', 'Chinese (Traditional)'), +(3994, 'zh-hant', 'is', 'Chinese (Traditional)'), +(3995, 'zh-hant', 'it', 'Cinese tradizionale'), +(3996, 'zh-hant', 'ja', '繁体中国語'), +(3997, 'zh-hant', 'ko', '중국어 번체'), +(3998, 'zh-hant', 'ku', 'Chinese (Traditional)'), +(3999, 'zh-hant', 'la', 'Chinese (Traditional)'), +(4000, 'zh-hant', 'lv', 'Chinese (Traditional)'), +(4001, 'zh-hant', 'lt', 'Chinese (Traditional)'), +(4002, 'zh-hant', 'mk', 'Chinese (Traditional)'), +(4003, 'zh-hant', 'mt', 'Chinese (Traditional)'), +(4004, 'zh-hant', 'mo', 'Chinese (Traditional)'), +(4005, 'zh-hant', 'mn', 'Chinese (Traditional)'), +(4006, 'zh-hant', 'ne', 'Chinese (Traditional)'), +(4007, 'zh-hant', 'nl', 'Traditioneel Chinees'), +(4008, 'zh-hant', 'nb', 'Chinese (Traditional)'), +(4009, 'zh-hant', 'pa', 'Chinese (Traditional)'), +(4010, 'zh-hant', 'pl', 'chiński tradycyjny'), +(4011, 'zh-hant', 'pt-pt', 'Chinês'), +(4012, 'zh-hant', 'pt-br', 'Chinês'), +(4013, 'zh-hant', 'qu', 'Chinese (Traditional)'), +(4014, 'zh-hant', 'ro', 'Chineza tradiţională'), +(4015, 'zh-hant', 'ru', 'Традиционный китайский'), +(4016, 'zh-hant', 'sl', 'Chinese (Traditional)'), +(4017, 'zh-hant', 'so', 'Chinese (Traditional)'), +(4018, 'zh-hant', 'sq', 'Chinese (Traditional)'), +(4019, 'zh-hant', 'sr', 'Chinese (Traditional)'), +(4020, 'zh-hant', 'sv', 'Traditionell kinesiska'), +(4021, 'zh-hant', 'ta', 'Chinese (Traditional)'), +(4022, 'zh-hant', 'th', 'จีนดั้งเดิม'), +(4023, 'zh-hant', 'tr', 'Klasik Çince'), +(4024, 'zh-hant', 'uk', 'Chinese (Traditional)'), +(4025, 'zh-hant', 'ur', 'Chinese (Traditional)'), +(4026, 'zh-hant', 'uz', 'Chinese (Traditional)'), +(4027, 'zh-hant', 'vi', 'Chinese (Traditional)'), +(4028, 'zh-hant', 'yi', 'Chinese (Traditional)'), +(4029, 'zh-hant', 'zh-hans', '繁体中文'), +(4030, 'zh-hant', 'zu', 'Chinese (Traditional)'), +(4031, 'zh-hant', 'zh-hant', '繁體中文'), +(4032, 'zh-hant', 'ms', 'Chinese (Traditional)'), +(4033, 'ms', 'en', 'Malay'), +(4034, 'ms', 'es', 'Malayo'), +(4035, 'ms', 'de', 'Malay'), +(4036, 'ms', 'fr', 'Malay'), +(4037, 'ms', 'ar', 'Malay'), +(4038, 'ms', 'bs', 'Malay'), +(4039, 'ms', 'bg', 'Malay'), +(4040, 'ms', 'ca', 'Malay'), +(4041, 'ms', 'cs', 'Malay'), +(4042, 'ms', 'sk', 'Malay'), +(4043, 'ms', 'cy', 'Malay'), +(4044, 'ms', 'da', 'Malay'), +(4045, 'ms', 'el', 'Malay'), +(4046, 'ms', 'eo', 'Malay'), +(4047, 'ms', 'et', 'Malay'), +(4048, 'ms', 'eu', 'Malay'), +(4049, 'ms', 'fa', 'Malay'), +(4050, 'ms', 'fi', 'Malay'), +(4051, 'ms', 'ga', 'Malay'), +(4052, 'ms', 'he', 'Malay'), +(4053, 'ms', 'hi', 'Malay'), +(4054, 'ms', 'hr', 'Malay'), +(4055, 'ms', 'hu', 'Malay'), +(4056, 'ms', 'hy', 'Malay'), +(4057, 'ms', 'id', 'Malay'), +(4058, 'ms', 'is', 'Malay'), +(4059, 'ms', 'it', 'Malay'), +(4060, 'ms', 'ja', 'Malay'), +(4061, 'ms', 'ko', 'Malay'), +(4062, 'ms', 'ku', 'Malay'), +(4063, 'ms', 'la', 'Malay'), +(4064, 'ms', 'lv', 'Malay'), +(4065, 'ms', 'lt', 'Malay'), +(4066, 'ms', 'mk', 'Malay'), +(4067, 'ms', 'mt', 'Malay'), +(4068, 'ms', 'mo', 'Malay'), +(4069, 'ms', 'mn', 'Malay'), +(4070, 'ms', 'ne', 'Malay'), +(4071, 'ms', 'nl', 'Malay'), +(4072, 'ms', 'nb', 'Malay'), +(4073, 'ms', 'pa', 'Malay'), +(4074, 'ms', 'pl', 'Malay'), +(4075, 'ms', 'pt-pt', 'Malay'), +(4076, 'ms', 'pt-br', 'Malay'), +(4077, 'ms', 'qu', 'Malay'), +(4078, 'ms', 'ro', 'Malay'), +(4079, 'ms', 'ru', 'Malay'), +(4080, 'ms', 'sl', 'Malay'), +(4081, 'ms', 'so', 'Malay'), +(4082, 'ms', 'sq', 'Malay'), +(4083, 'ms', 'sr', 'Malay'), +(4084, 'ms', 'sv', 'Malay'), +(4085, 'ms', 'ta', 'Malay'), +(4086, 'ms', 'th', 'Malay'), +(4087, 'ms', 'tr', 'Malay'), +(4088, 'ms', 'uk', 'Malay'), +(4089, 'ms', 'ur', 'Malay'), +(4090, 'ms', 'uz', 'Malay'), +(4091, 'ms', 'vi', 'Malay'), +(4092, 'ms', 'yi', 'Malay'), +(4093, 'ms', 'zh-hans', 'Malay'), +(4094, 'ms', 'zu', 'Malay'), +(4095, 'ms', 'zh-hant', 'Malay'), +(4096, 'ms', 'ms', 'Melayu'); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_locale_map` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_locale_map` ( + `code` varchar(7) NOT NULL, + `locale` varchar(8) NOT NULL, + UNIQUE KEY `code` (`code`,`locale`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_locale_map` +-- + +INSERT INTO `drgrp_icl_locale_map` (`code`, `locale`) VALUES +('en', 'en_US'), +('es', 'es_ES'); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_message_status` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_message_status` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `rid` bigint(20) unsigned NOT NULL, + `object_id` bigint(20) unsigned NOT NULL, + `from_language` varchar(10) NOT NULL, + `to_language` varchar(10) NOT NULL, + `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `md5` varchar(32) NOT NULL, + `object_type` varchar(64) NOT NULL, + `status` smallint(6) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `rid` (`rid`), + KEY `object_id` (`object_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_message_status` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_node` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_node` ( + `nid` bigint(20) NOT NULL, + `md5` varchar(32) NOT NULL, + `links_fixed` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`nid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_node` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_reminders` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_reminders` ( + `id` bigint(20) NOT NULL, + `message` text NOT NULL, + `url` text NOT NULL, + `can_delete` tinyint(4) NOT NULL, + `show` tinyint(4) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_reminders` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_strings` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_strings` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `language` varchar(7) NOT NULL, + `context` varchar(160) NOT NULL, + `name` varchar(160) NOT NULL, + `value` text NOT NULL, + `status` tinyint(4) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `context_name` (`context`,`name`), + KEY `language_context` (`language`,`context`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1733 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_strings` +-- + +INSERT INTO `drgrp_icl_strings` (`id`, `language`, `context`, `name`, `value`, `status`) VALUES +(3, 'en', 'Widgets', 'widget title - a0ad36e50d96977ba19b9f1f48adbfce', 'Noticias recientes', 0), +(4, 'en', 'Widgets', 'widget title - 69e7df6b9f7404b4007d936978a45c81', 'Recent Comments', 0), +(5, 'en', 'Widgets', 'widget title - 86fb1b7323e9b945f29fd75b009cf956', 'Archivo de noticias', 0), +(6, 'en', 'Widgets', 'widget title - 010725dd136c913eed2ec1e23476fd13', 'Categorías', 0), +(7, 'en', 'Widgets', 'widget title - b6755d218d5f4e1cef9cce9cc39aeda9', 'Meta', 0), +(8, 'en', 'Widgets', 'widget title - ffeb7901561b7f107d8e2648e179c945', 'Find us on Facebook', 0), +(9, 'en', 'Widgets', 'widget body - text_icl-2', 'Double R Group\r\n', 0), +(10, 'en', 'Widgets', 'widget title - af8918cffa61d5d0d061259e671984ce', 'Más información', 0), +(11, 'en', 'Widgets', 'widget body - text_icl-3', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id luctus quam, vel porttitor nisl. Curabitur vulputate velit ut tortor molestie, in venenatis mi varius. ', 0), +(12, 'en', 'Widgets', 'widget title - c734eb4671075ce3c86485584cdda7a7', 'Nosotros', 0), +(13, 'en', 'Widgets', 'widget title - ffb7e666a70151215b4c55c6268d7d72', 'Newsletter', 0), +(14, 'en', 'Widgets', 'widget body - text_icl-5', '

Double R Group

\r\n

\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#395b7b" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]\r\nCalle de Almagro, 21, 28010 Madrid\r\n

\r\n[fontawesome icon="phone" circle="no" size="medium" iconcolor="#395b7b" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]\r\n+34 619 686 633\r\n

\r\n[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#395b7b" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]\r\ninfo@doublergroup.com\r\n

', 0), +(15, 'en', 'Widgets', 'widget title - d622d6702b10987f5c7a7aaa0bb89a8e', '', 0), +(16, 'en', 'Widgets', 'widget title - dbeeb228eb563f7a3a2ca81b253dc50f', 'Contact Info', 0), +(17, 'en', 'Widgets', 'widget title - 88ed18dff6e7767eba80434939973d3d', 'Get Social', 0), +(18, 'en', 'Widgets', 'widget title - 5325eefe8ce2e340f376230f6a107868', 'Tweets recientes', 0), +(19, 'en', 'Widgets', 'widget title - bc1f69db79c00f1ddac18c00efa6292b', 'Recent Works', 0), +(20, 'en', 'Widgets', 'widget title - 8ff922bbcd8ad41cdfc48d3c5163b2ab', 'Calendar', 0), +(21, 'en', 'Widgets', 'widget title - d1bd4e55018a381882940aff2218c015', 'Contacta con nosotros', 0), +(22, 'en', 'Widgets', 'widget title - 178fde647037235223ac2a188a7106b1', 'Archives', 0), +(23, 'en', 'theme Avada', 'a52f3ece15d037604bd81c0b18013f2e', 'Oops, This Page Could Not Be Found!', 1), +(24, 'en', 'theme Avada', 'bcb7ac354cce70e87f2d20d1106ff1f5', 'Here are some useful links:', 1), +(25, 'en', 'theme Avada', '69498ee5a2347632fa38643ac4bdf759', 'Search Our Website', 1), +(26, 'en', 'theme Avada', 'b0c88e09f0dba50a590801b8df4a4d2f', 'Can''t find what you need? Take a moment and do a search below!', 1), +(27, 'en', 'theme Avada', '014bd6f385cb5aec29ec9714b8106ccb', 'Search ...', 1), +(28, 'en', 'theme optionsframework', 'ae988c8b2f784c749d61a966a22214d9', 'Last Backup : ', 0), +(29, 'en', 'theme optionsframework', '7649a6ec47c15923c8b1dbb5ce774f8f', 'Save All Changes', 0), +(30, 'en', 'theme optionsframework', 'bacb0cc6812d019e235de4fc66bc3c1d', 'Options Reset', 0), +(31, 'en', 'theme optionsframework', 'dae8ace18bdcbcc6ae5aece263e14fe8', 'Options', 0), +(32, 'en', 'theme optionsframework', '5c93310dd0291e121181e830cdda892e', 'Gallery', 0), +(33, 'en', 'theme optionsframework', '451bef360ca56173478fe68e9814314a', 'Previously Uploaded', 0), +(34, 'en', 'theme Avada', '53e5aa2c97fef1555d2511de8218c544', 'By', 1), +(35, 'en', 'theme Avada', 'b2483883b115e89808da5b56ff5c10df', '0 Comments', 1), +(36, 'en', 'theme Avada', '0f0c0c1c95507b2503aa8c432c3c3188', '1 Comment', 1), +(37, 'en', 'theme Avada', '8413c683b4b27cc3f4dbd4c90329d8ba', 'Comments', 1), +(38, 'en', 'theme Avada', 'decbe415d8accca7c2c16d48a79ee934', 'Read More', 1), +(39, 'en', 'theme Avada', 'c4ca4238a0b923820dcc509a6f75849b', '1', 0), +(40, 'en', 'theme Avada', '8455b6e647ffdb41f1a221fe4dd66c89', 'This author has not yet filled in any details.', 0), +(41, 'en', 'WordPress', '5721bd0a86d6b17fd958a9b141a2bc5c', 'So far %s has created %s entries.', 0), +(42, 'en', 'theme Avada', '8f7f4c1ce7a4f933663d10543562b096', 'About', 0), +(43, 'en', 'WordPress', 'dfd87bd34b4599aaaef6d0f2c8b6e3d7', 'Edit profile', 0), +(44, 'en', 'theme Avada', 'c1c10b029d1dddb5a28e1f9348decb39', 'Need a new search?', 0), +(45, 'en', 'theme Avada', '0b67b877652b4d63ae07e24d654b8ae9', 'If you didn''t find what you were looking for, try a new search!', 0), +(46, 'en', 'theme bbpress', '75ecaaafd1f677d07360709be6528768', 'Search for:', 0), +(47, 'en', 'theme Avada', '07b987a0e2b28e3695ffe63e012ea4c0', 'Search the Forum...', 0), +(48, 'en', 'theme bbpress', 'ef1d00d8a237a1bbe431e1091f5715fb', 'Creator', 0), +(49, 'en', 'theme bbpress', '25812bf456959aa5f28dc570f341a3ba', 'Topic', 0), +(50, 'en', 'theme Avada', '32b502f33a535f75dcbf63f6753c631e', 'Tags:', 0), +(51, 'en', 'theme bbpress', 'cce9b95eda31165586dc3fe55d72d136', 'Move reply "%s"', 0), +(52, 'en', 'theme bbpress', 'b59c434598821da6f809f5f735b29e53', 'New topic in %s titled:', 0), +(53, 'en', 'theme bbpress', '425071c914a8b1c5822c2f700b489b10', 'Moved: %s', 0), +(54, 'en', 'theme bbpress', '296a59edb602aad0cee9a7075be6e077', 'No other topics found!', 0), +(55, 'en', 'theme bbpress', '1a402219dd5c3b2ff440415e1eddfcb8', 'You can either make this reply a new topic with a new title, or merge it into an existing topic.', 0), +(56, 'en', 'theme bbpress', '9e528e6b9185e14ef53a269346ce1d25', 'If you choose an existing topic, replies will be ordered by the time and date they were created.', 0), +(57, 'en', 'theme bbpress', '18bae10850e8f96548985e5d59188df0', 'Move Method', 0), +(58, 'en', 'theme bbpress', 'aa9e097b1a5a0a1e1eec6a67b071b26f', 'Use an existing topic in this forum:', 0), +(59, 'en', 'theme bbpress', '3f5ae604d69310af1742ceead5845539', 'WARNING: This process cannot be undone.', 0), +(60, 'en', 'theme bbpress', 'a4d3b161ce1309df1c4e25df28694b7b', 'Submit', 0), +(61, 'en', 'theme bbpress', 'b3783ab24a2d26bf9a36d3e31fe70330', 'You do not have the permissions to edit this reply!', 0), +(62, 'en', 'theme bbpress', '91acf6d7106c06301d05efa7152c0645', 'You cannot edit this reply.', 0), +(63, 'en', 'theme bbpress', 'bdc8303f70a604e3d2c658a5e07af699', 'Reply To: %s', 0), +(64, 'en', 'theme bbpress', '4a56de81569a258a63030519f407c039', 'Optional reason for editing:', 0), +(65, 'en', 'theme bbpress', 'c9cbe08605e0f942a3da78c16dbdea9c', 'The topic ‘%s’ is closed to new replies.', 0), +(66, 'en', 'theme bbpress', 'cc285f9eb8d4f326060627c7bc6b78fc', 'The forum ‘%s’ is closed to new topics and replies.', 0), +(67, 'en', 'theme bbpress', '5716197493252b0ba768ae2c75829b75', 'You may use these HTML tags and attributes:', 0), +(68, 'en', 'theme bbpress', '32b502f33a535f75dcbf63f6753c631e', 'Tags:', 0), +(69, 'en', 'theme bbpress', 'bfffddd5ae22742523c44af758a10baa', 'Keep a log of this edit:', 0), +(70, 'en', 'theme bbpress', '3ebdca43ef32f31627e8812b9a9cd15c', 'Notify the author of follow-up replies via email', 0), +(71, 'en', 'theme bbpress', '6143a4786e73f87eefa6aa11cfdf5193', 'Notify me of follow-up replies via email', 0), +(72, 'en', 'theme bbpress', '6ab56f2ec5fc7465df8bf4fbf89f8b91', 'You cannot reply to this topic.', 0), +(73, 'en', 'theme bbpress', 'bb6c074136640c553fd67eef01eff57c', 'You must be logged in to reply to this topic.', 0), +(74, 'en', 'theme bbpress', 'd50570ac8ebda331a4839df946bd141e', 'Merge topic "%s"', 0), +(75, 'en', 'theme bbpress', '69d01b166ce631be02e7622697803c92', 'No topics were found to which the topic could be merged to!', 0), +(76, 'en', 'theme bbpress', '7ec62f2f848ddda4bd7fe097ac07f0b1', 'Select the topic to merge this one into. The destination topic will remain the lead topic, and this one will change into a reply.', 0), +(77, 'en', 'theme bbpress', '08e745cfd548ba25f950467ac5431759', 'To keep this topic as the lead, go to the other topic and use the merge tool from there instead.', 0), +(78, 'en', 'theme bbpress', '40baee8411fb4c2ed77efcf6a170b608', 'All replies within both topics will be merged chronologically. The order of the merged replies is based on the time and date they were posted. If the destination topic was created after this one, it''s post date will be updated to second earlier than this one.', 0), +(79, 'en', 'theme bbpress', '12007e1d59f4d09c87dbe2c438256244', 'Destination', 0), +(80, 'en', 'theme bbpress', 'c042232df96120c3fc73606e98a8da9f', 'Merge with this topic:', 0), +(81, 'en', 'theme bbpress', '05ff9820aa1f5aa6a45486935e32e8e7', 'There are no other topics in this forum to merge with.', 0), +(82, 'en', 'theme bbpress', 'ade120a8cfea646fd55401dc91647449', 'Topic Extras', 0), +(83, 'en', 'theme bbpress', 'cbffc67ea702026e6ee7f7f00a1affa2', 'Merge topic subscribers', 0), +(84, 'en', 'theme bbpress', '876478863538c693f5ba47e66efb1185', 'Merge topic favoriters', 0), +(85, 'en', 'theme bbpress', '82c2281390f2c53698e6e987c45b8121', 'Merge topic tags', 0), +(86, 'en', 'theme bbpress', '3113fe90c1a71250b61b0cc0601960fc', 'You do not have the permissions to edit this topic!', 0), +(87, 'en', 'theme bbpress', '1be5dda710f78c5dbd3b9639fad3ec4f', 'You cannot edit this topic.', 0), +(88, 'en', 'theme bbpress', '7156f037d9329d518715194d83870997', 'Split topic "%s"', 0), +(89, 'en', 'theme bbpress', 'a23a29de0dfb48968741d8e243f5c359', 'Split: %s', 0), +(90, 'en', 'theme bbpress', '0c322454bee04a7fbb7c2a0ac2ab420e', 'When you split a topic, you are slicing it in half starting with the reply you just selected. Choose to use that reply as a new topic with a new title, or merge those replies into an existing topic.', 0), +(91, 'en', 'theme bbpress', '4c1487d2c12a8d50c4fc4a4f01a5e58e', 'If you use the existing topic option, replies within both topics will be merged chronologically. The order of the merged replies is based on the time and date they were posted.', 0), +(92, 'en', 'theme bbpress', 'b0f8a4bccd4a4b47e719e605d1a46552', 'Split Method', 0), +(93, 'en', 'theme bbpress', 'd203bc5f74a376eaa5ba42fcb066c414', 'Copy subscribers to the new topic', 0), +(94, 'en', 'theme bbpress', 'dca07fe9c4673408d3474140ffa49f21', 'Copy favoriters to the new topic', 0), +(95, 'en', 'theme bbpress', '899412c53a51e63a6bd364c9c3a6c8aa', 'Copy topic tags to the new topic', 0), +(96, 'en', 'theme bbpress', '346cbae7fe449bc073676a2377429945', 'Manage Tag: "%s"', 0), +(97, 'en', 'theme bbpress', '80a82338a278e23bbb486ef16a8c158f', 'Are you sure you want to merge the "%s" tag into the tag you specified?', 0), +(98, 'en', 'theme bbpress', '294b74170a81babdef99efea33c3b247', 'Are you sure you want to delete the "%s" tag? This is permanent and cannot be undone.', 0), +(99, 'en', 'theme bbpress', '904a8304056d77e4547744781b7ceb50', 'Rename', 0), +(100, 'en', 'theme bbpress', '8177eb2a1e823916bf2c6605013bcfd7', 'Leave the slug empty to have one automatically generated.', 0), +(101, 'en', 'theme bbpress', '4a18706e32c0281013bf73b43d0fc61a', 'Changing the slug affects its permalink. Any links to the old slug will stop working.', 0), +(102, 'en', 'theme bbpress', '4e140ba723a03baa6948340bf90e2ef6', 'Name:', 0), +(103, 'en', 'theme bbpress', '33d80e11186feee7941ed777903f6f7c', 'Slug:', 0), +(104, 'en', 'theme bbpress', '68be4837f6c739877233e527a996dd00', 'Merge', 0), +(105, 'en', 'theme bbpress', '1bc3edd0b985526b0973d9f6aa1c5a8b', 'Merging tags together cannot be undone.', 0), +(106, 'en', 'theme bbpress', '75c4456a401d9a14209e77cbee698513', 'Existing tag:', 0), +(107, 'en', 'theme bbpress', 'f2a6c498fb90ee345d997f888fce3b18', 'Delete', 0), +(108, 'en', 'theme bbpress', '52eb687e4196c334459b5d955de05dad', 'This does not delete your topics. Only the tag itself is deleted.', 0), +(109, 'en', 'theme bbpress', '01bdadab251441b066837d38fca1b119', 'Deleting a tag cannot be undone.', 0), +(110, 'en', 'theme bbpress', '005e7871f2a22387d5170550bd293146', 'Any links to this tag will no longer function.', 0), +(111, 'en', 'theme bbpress', '06933067aafd48425d67bcb01bba5cb6', 'Update', 0), +(112, 'en', 'theme bbpress', 'ef78deafea878d40a3eb808a5d890430', 'Now Editing “%s”', 0), +(113, 'en', 'theme bbpress', '299d089b9d7cb280b5c214ecca258a07', 'Create New Topic in “%s”', 0), +(114, 'en', 'theme bbpress', '31ddee0b3c568f0c11dfc4b182071328', 'Topic Title (Maximum Length: %d):', 0), +(115, 'en', 'theme bbpress', 'f052570666a6ba58a37be86ff1da7a0a', '(No Forum)', 0), +(116, 'en', 'theme bbpress', 'afc3ccb6112c132f666dd055c7983eb2', 'Create New Topic', 0), +(117, 'en', 'theme bbpress', '9720df78c99dba654d87b34a218a2f09', 'Forum:', 0), +(118, 'en', 'theme bbpress', '82ceb63a64f88bc80a83227f432b1189', 'Topic Type:', 0), +(119, 'en', 'theme bbpress', '72f83719a4f9d6d7615ac17c8ca3892f', 'Topic Status:', 0), +(120, 'en', 'theme bbpress', 'f32159bde8219174a9898cb00169d472', 'You cannot create new topics.', 0), +(121, 'en', 'theme bbpress', 'a2ceed85d086cb7e0582e4da268e3e61', 'You must be logged in to create new topics.', 0), +(122, 'en', 'theme bbpress', 'e6a7f8a2f42cc35979973da8dfb10720', 'Forum', 0), +(123, 'en', 'theme bbpress', '34ac805c9077c5ca6ae3565dab6ce723', 'Topics', 0), +(124, 'en', 'theme bbpress', '8cc46df5ae23686a6fbb8e132f4aaf26', 'Replies', 0), +(125, 'en', 'theme bbpress', '5dc52ca9ffdc26147075682c92a0a853', 'Posts', 0), +(126, 'en', 'theme bbpress', 'bf839986b12b05b279077866655bbe58', 'Freshness', 0), +(127, 'en', 'theme bbpress', '8ce8cbf23b58eb6bd25d8f6656ccb3c7', 'Last updated %s', 0), +(128, 'en', 'theme bbpress', '9569c6b464423fcac7d00617d8c06409', 'Forum: ', 0), +(129, 'en', 'theme Avada', 'a9aa5b09cad7cc691f7add17dc072988', 'Post count: %s', 0), +(130, 'en', 'theme bbpress', '08c75ad1b35990afa53d2ba42d9ea37d', 'In reply to: ', 0), +(131, 'en', 'theme bbpress', 'fbc62206b5d2c7416fcb114f30cce99a', 'Topic: ', 0), +(132, 'en', 'theme bbpress', 'bd693a3bc4bec313b2720d88418a0c28', 'in group forum ', 0), +(133, 'en', 'theme bbpress', '3ea19b9f71e163b7f2cfc27d723fb14f', 'in forum ', 0), +(134, 'en', 'theme bbpress', '47fda2fe05b73ea802ab0e88bc54bc48', 'in reply to: ', 0), +(135, 'en', 'theme bbpress', '40a4bb332b0840c12249f71ffa69adea', 'Started by: %1$s', 0), +(136, 'en', 'theme bbpress', '1c1dd66e5a46bbfde7d739cfc3b7de55', 'in: %2$s', 0), +(137, 'en', 'theme bbpress', 'd342f8597c3ea420117bfb09888723bd', 'Voices', 0), +(138, 'en', 'theme bbpress', '9e41bc46e9a0db8c490f886700da6cd5', '%s''s Profile', 0), +(139, 'en', 'theme bbpress', '726b5d020623953703d697bf805bd103', '%s''s Topics Started', 0), +(140, 'en', 'theme bbpress', 'ede2d812bfb9979b9f21c445aa6e4cba', '%s''s Replies Created', 0), +(141, 'en', 'theme bbpress', '3611a70e42bda1a28864cbf9e4dc1424', '%s''s Favorites', 0), +(142, 'en', 'theme bbpress', '68594a38b3f1c12f88442fe7c9ece5c8', '%s''s Subscriptions', 0), +(143, 'en', 'theme bbpress', 'dad95e2398b2f73e5d5bf83ec8a247d8', 'Edit %s''s Profile', 0), +(144, 'en', 'theme bbpress', 'cce99c598cfdb9773ab041d54c3d973a', 'Profile', 0), +(145, 'en', 'theme bbpress', 'e52d5baa7af1f973bbea0c5267991dfa', 'Topics Started', 0), +(146, 'en', 'theme bbpress', 'effb9a35952cc19546fd1fd16c646556', 'Replies Created', 0), +(147, 'en', 'theme bbpress', 'd78986947356ddd37b43d57df289dee9', 'Favorites', 0), +(148, 'en', 'theme bbpress', '4ca2c509994c2776d0880357b4e8e5be', 'Subscriptions', 0), +(149, 'en', 'theme bbpress', '7dce122004969d56ae2e0245cb754d35', 'Edit', 0), +(150, 'en', 'theme Avada', '381060983af096312477a998d631fd67', 'Forum Role:', 0), +(151, 'en', 'theme Avada', 'bb38e07ef4980e1be771e83c35ce0a44', 'Topics Started:', 0), +(152, 'en', 'theme Avada', '5f868cc7c8691aa5c2ac1f4825b766f0', 'Replies Created:', 0), +(153, 'en', 'theme Avada', 'af87efe29da4e67cbaf3cea543f44f7d', 'This post is password protected. Enter the password to view comments.', 1), +(154, 'en', 'theme Avada', '36fb383edd9f7c1594d4168fb999c379', 'No Comments', 1), +(155, 'en', 'theme Avada', '4b36ac646a902ab56ab7146229c5f021', 'One Comment', 1), +(156, 'en', 'theme Avada', '496c558a09bbbcfc869aa80b2f037261', 'Comments are closed.', 1), +(157, 'en', 'theme Avada', 'c8cf97015c98815234011807fce40a8e', 'Name (required)', 1), +(158, 'en', 'theme Avada', '0974e3c4548edf4a3dd64ebea9ce8143', 'Email (required)', 1), +(159, 'en', 'theme Avada', '15bbb9d0bbf25e8d2978de1168c749dc', 'Website', 1), +(160, 'en', 'theme Avada', 'ee5e9dc647ba8ed1490efd6374ac85e8', 'Leave A Comment', 1), +(161, 'en', 'theme Avada', 'd1791527b2a76a3506f9377ec874706b', 'You must be %slogged in%s to post a comment.', 0), +(162, 'en', 'theme Avada', 'b046ed95f719df2e79c9cb3e3bc23bf1', 'Logged in as', 1), +(163, 'en', 'theme Avada', 'e3e844aaaeac4176d6c4661dd4beabbc', 'Log out of this account', 0), +(164, 'en', 'theme Avada', '0daf9402a86ecf0462af9fffd2b4b233', 'Log out »', 1), +(165, 'en', 'theme Avada', 'a1722b7a43963953caab67c139b0582e', 'Comment...', 1), +(166, 'en', 'theme Avada', '55db28530640e9fb41ebf71ea8afce72', 'Post Comment', 1), +(167, 'en', 'theme Avada', '4e140ba723a03baa6948340bf90e2ef6', 'Name:', 0), +(168, 'en', 'theme Avada', '6a1e265f92087bb6dd18194833fe946b', 'Email:', 0), +(169, 'en', 'theme Avada', '47a0be8d1015d526a1fbaa56c3102135', 'Subject:', 0), +(170, 'en', 'theme Avada', 'c14a0ca9550a8b311dbf7acbb3e6cac4', 'Comments:', 0), +(171, 'en', 'theme Avada', '70470481a161b8b5c93a87555ed3fcb4', 'Please check if you''ve filled all the fields with valid information. Thank you.', 1), +(172, 'en', 'theme Avada', '7a7c46aab7e07559c6f7a8b25f2b9ef4', 'Thank you', 1), +(173, 'en', 'theme Avada', '4012a3acbbb81a95f55560c0e6f49fb6', 'for using my contact form! Your email was successfully sent!', 1), +(174, 'en', 'theme Avada', 'c7892ebbb139886662c6f2fc8c450710', 'Subject', 1), +(175, 'en', 'theme Avada', '4c2a8fe7eaf24721cc7a9f0175115bd4', 'Message', 1), +(176, 'en', 'theme Avada', '85984b8c7e20cbde3370f6c37bc42835', 'Submit Form', 1), +(177, 'en', 'theme Avada', 'b1c94ca2fbc3e78fc30069c8d0f01680', 'All', 1), +(178, 'en', 'theme Avada', '8d496fe225b423ae91cafb2913fe60fc', 'Install Required Plugins', 1), +(179, 'en', 'theme Avada', '4eff3a34f0ddf963f7d0610d3cb79354', 'Install Plugins', 1), +(180, 'en', 'theme Avada', '07867e5fd7b858b877323ffd402ac38e', 'Installing Plugin: %s', 1), +(181, 'en', 'theme Avada', '7c7efec2d1dfd66eb653cf98d4cc865c', 'Something went wrong.', 1), +(182, 'en', 'theme Avada', 'bb885c3eedde441b8398dbc9586e09b5', 'Return to Required Plugins Installer', 1), +(183, 'en', 'theme Avada', '37829e778cf85fe234ef2d80be24527a', 'Plugin activated successfully.', 1), +(184, 'en', 'theme Avada', '3c48d813eb0b1f244fa131cc5de6be0e', 'All plugins installed and activated successfully. %1$s', 1), +(185, 'en', 'theme Avada', '5ab741fb6675b5c6bb34dc16996a53bd', 'Return to the Dashboard', 1), +(186, 'en', 'theme Avada', '7b67a32166b29c99019c10dc30f490b2', 'The following plugin was activated successfully: %s.', 1), +(187, 'en', 'theme Avada', '3146b03cfc1c9f2fc7110fb73f7307de', 'Dismiss this notice', 1), +(188, 'en', 'theme Avada', '8d31e085a4bb8bcfb482ff43a868a261', 'External Link', 1), +(189, 'en', 'theme Avada', '352d93d214eeeb51f29b9ff014074267', 'Private Repository', 1), +(190, 'en', 'theme Avada', '0b75c554830973695016efb11cdf1504', 'Pre-Packaged', 1), +(191, 'en', 'theme Avada', '1f595cbbf20d9305968ef706e97d3105', 'WordPress Repository', 1), +(192, 'en', 'theme Avada', 'b651efdb98a5d6bd2b3935d0c3f4a5e2', 'Required', 1), +(193, 'en', 'theme Avada', '654866693fd91ce8e9764a218f569918', 'Recommended', 1), +(194, 'en', 'theme Avada', 'ddd8eef6f86868a07f62b0e3810711f0', 'Not Installed', 1), +(195, 'en', 'theme Avada', '5996488c02e895d82c39733547ede973', 'Installed But Not Activated', 1), +(196, 'en', 'theme Avada', '6bd25ff0816abdf2e553db08d4ed642d', 'Not Updated', 0), +(197, 'en', 'theme Avada', '4d3d769b812b6faa6b76e1a8abaece2d', 'Active', 0), +(198, 'en', 'theme Avada', '6378bdd12f16803035dcd9b7f96f7d71', 'No plugins to install or activate. Return to the Dashboard', 1), +(199, 'en', 'theme Avada', '409c1892b68cb394799262ac57f6d4f1', 'Plugin', 1), +(200, 'en', 'theme Avada', 'f31bbdd1b3e85bccd652680e16935819', 'Source', 1), +(201, 'en', 'theme Avada', 'a1fa27779242b4902f7ae3bdd5c6d508', 'Type', 1), +(202, 'en', 'theme Avada', 'ec53a8c4f07baed5d8825072c89799be', 'Status', 1), +(203, 'en', 'theme Avada', '349838fb1d851d3e2014b9fe39203275', 'Install', 1), +(204, 'en', 'theme Avada', 'a13367a8e2a3f3bf4f3409079e3fdf87', 'Activate', 1), +(205, 'en', 'theme Avada', '9c5b615698c3ae6dc7bc6d2816c92862', 'Install package not available.', 1), +(206, 'en', 'theme Avada', '6aca1f9e879ac5c90e19bc556182fa50', 'Downloading install package from %s…', 1), +(207, 'en', 'theme Avada', 'e9613a5b96f1f58f534d0a10f6684f38', 'Unpacking the package…', 1), +(208, 'en', 'theme Avada', 'ce6248a23b7a258458e9c7aba988f411', 'Installing the plugin…', 1), +(209, 'en', 'theme Avada', '2a3d776021ae82ee7cb62b397711d40d', 'Plugin install failed.', 1), +(210, 'en', 'theme Avada', '11810810c72ab629ffa7b96ebede742e', 'Plugin installed successfully.', 1), +(211, 'en', 'theme Avada', 'edc3d85dac34a37710b4a9c2e24b8b75', 'Plugin activation failed.', 1), +(212, 'en', 'theme Avada', '370eb8fcb15bff522689322a97ab88f7', 'The installation and activation process is starting. This process may take a while on some hosts, so please be patient.', 1), +(213, 'en', 'theme Avada', 'b2c308c165b8f7aa1e51da66dab37826', '%1$s installed and activated successfully.', 1), +(214, 'en', 'theme Avada', '06c883a79771ecda24de1687ed7915ba', 'Show Details', 1), +(215, 'en', 'theme Avada', '7c5fb72b2ab0d57476a8b930a59f0650', 'Hide Details', 1), +(216, 'en', 'theme Avada', 'a612d8f63518b69a843a62347bef74f4', 'All installations and activations have been completed.', 1), +(217, 'en', 'theme Avada', 'de6d25fb7d974d4e615b386367ff986f', 'Installing and Activating Plugin %1$s (%2$d/%3$d)', 1), +(218, 'en', 'theme Avada', '071037479108e80816f433d094a06632', 'The installation process is starting. This process may take a while on some hosts, so please be patient.', 1), +(219, 'en', 'theme Avada', '2ef4da25e6e03ae8e862d7689b2ba554', 'An error occurred while installing %1$s: %2$s.', 1), +(220, 'en', 'theme Avada', '630ad046884e381655ca1fccd0667601', 'The installation of %1$s failed.', 1), +(221, 'en', 'theme Avada', '0b8c1d6179d1c4a20f002d67dc49bc0c', '%1$s installed successfully.', 1), +(222, 'en', 'theme Avada', '003b8672b471e60c83cb28552f948625', 'All installations have been completed.', 1), +(223, 'en', 'theme Avada', '4cee13af8289e47431d5b934e6ecd69f', 'Installing Plugin %1$s (%2$d/%3$d)', 1), +(224, 'en', 'theme Avada', 'dd1f775e443ff3b9a89270713580a51b', 'Previous', 1), +(225, 'en', 'theme Avada', '10ac3d04253ef7e1ddc73e6091c0cd55', 'Next', 1), +(226, 'en', 'theme Avada', '8cf04a9734132302f96da8e113e80ce5', 'Home', 1), +(227, 'en', 'theme Avada', 'c5fb882b54e1a70d9c5ca9a6f4a8cfa3', '404 - Page not Found', 1), +(228, 'en', 'theme Avada', '13348442cc6a27032d2b4aa28b75a5d3', 'Search', 1), +(229, 'en', 'theme Avada', 'f6039d44b29456b20f8f373155ae4973', 'Username', 0), +(230, 'en', 'theme Avada', 'dc647eb65e6711e155375218212b3964', 'Password', 0), +(231, 'en', 'theme Avada', 'bea8d9e6a0d57c4a264756b4f9822ed9', 'My Account', 0), +(232, 'en', 'theme Avada', 'e857817b07c27f3c57caa6c40f7499d4', 'Remember Me', 0), +(233, 'en', 'theme Avada', '3bbbad631029e3575da7a151bba4f37c', 'Log In', 0), +(234, 'en', 'theme Avada', '0323de4f66a1700e2173e9bcdce02715', 'Logout', 0), +(235, 'en', 'theme Avada', '59fc69e031ecb0f82efe467fd6692383', 'View Cart', 0), +(236, 'en', 'theme Avada', '6ff063fbc860a79759a7369ac32cee22', 'Checkout', 0), +(237, 'en', 'theme Avada', 'a85eba4c6c699122b2bb1387ea4813ad', 'Cart', 0), +(238, 'en', 'theme Avada', '9408f5e33576ebe4937339939e667545', 'Item(s)', 0), +(239, 'en', 'theme ambrosite', 'd0215db3a3b973e1d423e01881bfc813', 'Previous Post', 0), +(240, 'en', 'theme ambrosite', 'd17e21dca8afcdfcafd8762928cf8bf8', 'Next Post', 0), +(241, 'en', 'theme envato', 'dfad994d3e5f3bcf31c70e4963e80670', 'Please enter your Envato Marketplace Username.', 0), +(242, 'en', 'theme envato', 'eafe27bf6d2e636688a7d3562d193992', 'Please enter your Envato Marketplace API Key.', 0), +(243, 'en', 'theme envato', '1fa381965daf980895a9f9671902de59', 'The API "set" is a required parameter.', 0), +(244, 'en', 'theme envato', '707795835cafcba657c0d3d45b3e96bc', 'The Envato Marketplace "item ID" is a required parameter.', 0), +(245, 'en', 'theme envato', '9ca8e956eb889656d3b5a5ab550c28cc', 'Downloading upgrade package from the Envato API…', 0), +(246, 'en', 'theme envato', 'f5525e376123606e877b0db03dfe0917', 'Downloading install package from the Envato API…', 0), +(247, 'en', 'theme wordpress-importer', '3309715e2bed05b25c315fa56d6c860c', 'There was an error when reading this WXR file', 0), +(248, 'en', 'theme wordpress-importer', '49312751e7190af5dc3ca5e3428a1c0b', 'Details are shown above. The importer will now try again with a different parser...', 0), +(249, 'en', 'theme wordpress-importer', '4847ffe787a94babbc8561cc62946ba8', 'This does not appear to be a WXR file, missing/invalid WXR version number', 0), +(250, 'en', 'theme wordpress-importer', 'f1fb4ccb490133ee1b20aee735d7d659', 'Sorry, there has been an error.', 0), +(251, 'en', 'theme wordpress-importer', '7c249b15cf5f23c440910b82cb8fd9ae', 'The file does not exist, please try again.', 0), +(252, 'en', 'theme wordpress-importer', 'f29a2567d501c9dfde517d03b2e6bd97', 'All done.', 0), +(253, 'en', 'theme wordpress-importer', '136833af11abf3e1e761704915043ea3', 'Have fun!', 0), +(254, 'en', 'theme wordpress-importer', 'ed3a7d6af86ec5d0648a4cfb22fad3aa', 'Remember to update the passwords and roles of imported users.', 0), +(255, 'en', 'theme wordpress-importer', 'c7e7e9c4cb72a3268f836efea237576c', 'The export file could not be found at %s. It is likely that this was caused by a permissions problem.', 0), +(256, 'en', 'theme wordpress-importer', 'ac3f15088f3307b2b3ff6c9615988cf8', 'This WXR file (version %s) may not be supported by this version of the importer. Please consider updating.', 0), +(257, 'en', 'theme wordpress-importer', '20fe358eef4f102f5b55057d88b51907', 'Failed to import author %s. Their posts will be attributed to the current user.', 0), +(258, 'en', 'theme wordpress-importer', 'b9fafd8db866c36ed452eb208536eb9c', 'If a new user is created by WordPress, a new password will be randomly generated and the new user’s role will be set as %s. Manually changing the new user’s details will be necessary.', 0), +(259, 'en', 'theme wordpress-importer', '345ff9170ccdebc764d44f9639ff5587', '- Select -', 0), +(260, 'en', 'theme wordpress-importer', 'af4a7a412284fa05d44a2bf8af4c264e', 'Failed to create new user for %s. Their posts will be attributed to the current user.', 0), +(261, 'en', 'theme wordpress-importer', '022d3307c04126a8832154eb80c14cb5', 'Failed to import category %s', 0), +(262, 'en', 'theme wordpress-importer', '88bc71e7056fc7ef60342916ca3bc494', 'Failed to import post tag %s', 0), +(263, 'en', 'theme wordpress-importer', '557a5f90de59e9a0ecc208be806984a2', 'Failed to import %s %s', 0), +(264, 'en', 'theme wordpress-importer', '5158e6d78393c07b78928a5bfa73ccbf', 'Failed to import “%s”: Invalid post type %s', 0), +(265, 'en', 'theme wordpress-importer', '1b04dfe2bbc77e0450dcb3cae5c5c676', '%s “%s” already exists.', 0), +(266, 'en', 'theme wordpress-importer', '2fcca7aed62d3f55fb8f323c8332dab8', 'Failed to import %s “%s”', 0), +(267, 'en', 'theme wordpress-importer', '685ccc7a4824719904cbf491049ba231', 'Menu item skipped due to invalid menu slug: %s', 0), +(268, 'en', 'theme wordpress-importer', '6f8667623907dcd47c33a3bd35ca4261', 'Fetching attachments is not enabled', 0), +(269, 'en', 'theme wordpress-importer', '3832f6deff5d50413adcbc9c06388c32', 'Invalid file type', 0), +(270, 'en', 'theme wordpress-importer', 'e4f299ac61029f606d1b15b1cd435666', 'Remote server did not respond', 0), +(271, 'en', 'theme wordpress-importer', '6f78812b9f60eea260aef89eb2b69c5c', 'Remote server returned error response %1$d %2$s', 0), +(272, 'en', 'theme wordpress-importer', 'df4114678f55365dd039392e7072ae21', 'Remote file is incorrect size', 0), +(273, 'en', 'theme wordpress-importer', '1c4861f7618c6a7c3129c2e0f97addff', 'Zero size file downloaded', 0), +(274, 'en', 'theme wordpress-importer', 'acd982c7aaa592f01eec702161846d36', 'Remote file is too large, limit is %s', 0), +(275, 'en', 'theme wordpress-importer', '2e3971f23a2dad2588605f7ced181362', 'Import WordPress', 0), +(276, 'en', 'theme wordpress-importer', 'a00d28ccbf2b2535b05dcc81a2308166', 'A new version of this importer is available. Please update to version %s to ensure compatibility with newer export files.', 0), +(277, 'en', 'theme wordpress-importer', '707de3decb7f68c460c56458332bc9c2', 'Howdy! Upload your WordPress eXtended RSS (WXR) file and we’ll import the posts, pages, comments, custom fields, categories, and tags into this site.', 0), +(278, 'en', 'theme wordpress-importer', '42f7f1b24fa224667079681810fce4fe', 'Choose a WXR (.xml) file to upload, then click Upload file and import.', 0), +(279, 'en', 'theme wordpress-importer', '7af3a9e2c0d7d3bf1f4d7f55124bfb1f', 'Assign Authors', 0), +(280, 'en', 'theme wordpress-importer', '36baab0535bbc18e52f4123ca03eee4d', 'To make it easier for you to edit and save the imported content, you may want to reassign the author of the imported item to an existing user of this site. For example, you may want to import all the entries as admins entries.', 0), +(281, 'en', 'theme wordpress-importer', 'dcd69487f190e4e0356710c48a822e88', 'Import Attachments', 0), +(282, 'en', 'theme wordpress-importer', 'f21ae244031f9d3f848c71468f3ad72d', 'Download and import file attachments', 0), +(283, 'en', 'theme wordpress-importer', 'adfe71cfee73de891ac59043fc9321a5', 'Import author:', 0), +(284, 'en', 'theme wordpress-importer', 'ee7ff3b06ea6a2eaed48185b8f671b41', 'or create new user with login name:', 0), +(285, 'en', 'theme wordpress-importer', '61410fc7ddfd587c107777b18b1ac09f', 'as a new user:', 0), +(286, 'en', 'theme wordpress-importer', 'b521527aadbcb0b3522d8611541b7f3d', 'assign posts to an existing user:', 0), +(287, 'en', 'theme wordpress-importer', 'ea29d2137fdf9fc79c82210d1579d16a', 'or assign posts to an existing user:', 0), +(288, 'en', 'theme wordpress-importer', '8d03592cafedd8f23975b175793f8004', 'Menu item skipped due to missing menu slug', 0), +(289, 'en', 'theme wordpress-importer', 'a4d3b161ce1309df1c4e25df28694b7b', 'Submit', 0), +(290, 'en', 'theme LayerSlider', 'fca7f9ab05adac283c3de5041188b579', 'Slider width', 0), +(291, 'en', 'theme LayerSlider', '36ea9e92d90843c9339eb30dce0a867e', 'The width of the slider in pixels. Accepts percents, but is only recommended for full-width layout.', 0), +(292, 'en', 'theme LayerSlider', '20e75e05d590cc7529a3a383b3fe143b', 'Slider height', 0), +(293, 'en', 'theme LayerSlider', '89f2581ea552745120e0684968f6275a', 'The height of the slider in pixels.', 0), +(294, 'en', 'theme LayerSlider', 'b2b2df378a7c7ade199bbaf944cb3f35', 'Responsive', 0), +(295, 'en', 'theme LayerSlider', '7b3859a7a05d1324a1ca4153cf3de48d', 'Responsive mode provides optimal viewing experience across a wide range of devices (from desktop to mobile) by adapting and scaling your sliders for the viewing environment.', 0), +(296, 'en', 'theme LayerSlider', '0d751c2567cca331db69f2e99526fc3e', 'Max-width', 0), +(297, 'en', 'theme LayerSlider', '8a5b7c943538b0329a971defebed2191', 'The maximum width your slider can take in pixels when responsive mode is enabled.', 0), +(298, 'en', 'theme LayerSlider', 'aed9056e36148d533f98078d4a1f6e7d', 'Full-width', 0), +(299, 'en', 'theme LayerSlider', '0862549fc05fe6c9147e641953b1613b', 'Enable this option to force the slider to become full-width, even if your theme does not support such layout.', 0), +(300, 'en', 'theme LayerSlider', '9bc23361c7f00b0ed31989e29a528109', 'Responsive under', 0), +(301, 'en', 'theme LayerSlider', 'b4340b54c5e9b976fd28a62dca174f2a', 'Turns on responsive mode in a full-width slider under the specified value in pixels. Can only be used with full-width mode.', 0), +(302, 'en', 'theme LayerSlider', '66177f7e4adc46aac406a5ff0f94333a', 'Layers container', 0), +(303, 'en', 'theme LayerSlider', '15e8d820069d844ea24ecc3f387ac407', 'Creates an invisible inner container with the given dimension in pixels to hold and center your layers.', 0), +(304, 'en', 'theme LayerSlider', '49ab4dffa34f7d590380fe39bde59c28', 'Start slideshow', 0), +(305, 'en', 'theme LayerSlider', '926fb6015c45a7db9fd948701721ab0e', 'Slideshow will automatically start after pages have loaded.', 0), +(306, 'en', 'theme LayerSlider', '8836d88aaad538c39647aab768d91932', 'Pause on hover', 0), +(307, 'en', 'theme LayerSlider', '30dd7867f0d4b43d338a4cdaffb5804d', 'Slideshow will temporally pause when someone moves the mouse cursor over the slider.', 0), +(308, 'en', 'theme LayerSlider', 'a12ecf4a1102d40f153400c1b472ce11', 'Start with slide', 0), +(309, 'en', 'theme LayerSlider', 'eb660a12fa2f34675d4f37dd47edd395', 'The slider will start with the specified slide. You can use the value "random".', 0), +(310, 'en', 'theme LayerSlider', 'd8689f3e8374d7f3ceead4bb4e584722', 'Animate starting slide', 0), +(311, 'en', 'theme LayerSlider', '2d1492e68c2a11e05a0607fdf0780657', 'Disabling this option will result a static starting slide for the fisrt time on page load.', 0), +(312, 'en', 'theme LayerSlider', '7efd24b39c80cce14a95ef24fd178f9e', 'Shuffle mode', 0), +(313, 'en', 'theme LayerSlider', '6a517bb511f7213857b8f8875bd328e1', 'Slideshow will proceed in random order. This feature does not work with looping.', 0), +(314, 'en', 'theme LayerSlider', '627488f7a5e88ab1aaa6c34415dcb222', 'Two way slideshow', 0), +(315, 'en', 'theme LayerSlider', 'db0136969917f40eea148c5532c337bb', 'Slideshow can go backwards if someone switch to a previous slide.', 0), +(316, 'en', 'theme LayerSlider', '4b2257cb98694284507e77f34e73c2d8', 'Loops', 0), +(317, 'en', 'theme LayerSlider', 'c744acdb359449cf12eada91bbbc97ca', 'Number of loops if slideshow is enabled. Zero means infinite loops.', 0), +(318, 'en', 'theme LayerSlider', '1ec32378e793eaebd944afcc00a6d450', 'Force the number of loops', 0), +(319, 'en', 'theme LayerSlider', 'bf837cdd196c3cf2b4b68bfbaf0da0e0', 'The slider will always stop at the given number of loops, even if someone restarts slideshow.', 0), +(320, 'en', 'theme LayerSlider', '58ee9599ce146ae11434399def3d86d5', 'Keyboard navigation', 0), +(321, 'en', 'theme LayerSlider', 'b6f327028cee172b602e417718a8193f', 'You can navigate through slides with the left and right arrow keys.', 0), +(322, 'en', 'theme LayerSlider', '42939459c3a36ebb330e50908a8470bf', 'Touch navigation', 0), +(323, 'en', 'theme LayerSlider', 'bc70e78f5510833a720d98d3a63a8240', 'Gesture-based navigation with swiping on touch-enabled devices.', 0), +(324, 'en', 'theme LayerSlider', '9313566fe19aca293daefe4ce37942bf', 'Skin', 0), +(325, 'en', 'theme LayerSlider', '096aece0af7801f82caf264eee59b600', 'Used skin for this slider. The ''noskin'' skin is a border- and buttonless skin. Your custom skins will appear in the list when you create their folders as well.', 0), +(326, 'en', 'theme LayerSlider', '368d9ac76af05f714092bc808a426bfc', 'Background color', 0), +(327, 'en', 'theme LayerSlider', '982df53492cb5149371541dcabf1cc3d', 'Global background color of the slider. Slides with non-transparent background will cover this one. You can use all CSS methods such as HEX or RGB(A) values.', 0), +(328, 'en', 'theme LayerSlider', '69ee1afc9b3d02e53d9f733c1993b568', 'Background image', 0), +(329, 'en', 'theme LayerSlider', '32f1032ab140701cf2a10ab48d60301c', 'Global background image of the slider. Slides with non-transparent background will cover this one.', 0), +(330, 'en', 'theme LayerSlider', '26960f2d4bd66c239ad7557eb96d9d86', 'Slider style', 0), +(331, 'en', 'theme LayerSlider', '349e59be41d9343db58b7808bc28499b', 'You can enter custom CSS to change some style properties on the slider wrapper element. More complex CSS should be applied with the Custom Styles Editor.', 0), +(332, 'en', 'theme LayerSlider', 'eeff46180fd2770ec475d5850e6bcd05', 'Show Prev & Next buttons', 0), +(333, 'en', 'theme LayerSlider', '9c415c73ba282593fd19bd5d36a355bc', 'Disabling this option will hide the Prev and Next buttons.', 0), +(334, 'en', 'theme LayerSlider', 'eebe3478f8444346a8df92fa5ff65b67', 'Show Prev & Next buttons on hover', 0), +(335, 'en', 'theme LayerSlider', 'e7684b4f558256b19e3ece7a12b2ee08', 'Show the buttons only when someone moves the mouse cursor over the slider. This option depends on the previous setting.', 0), +(336, 'en', 'theme LayerSlider', '507bcc4fc98cff5d21d83c3ab88f2cdd', 'Show Start & Stop buttons', 0), +(337, 'en', 'theme LayerSlider', 'e821106cbf12464ff245981b219853df', 'Disabling this option will hide the Start & Stop buttons.', 0), +(338, 'en', 'theme LayerSlider', '8c1d725160bb1d7626c5defcef764d04', 'Show slide navigation buttons', 0), +(339, 'en', 'theme LayerSlider', '6312fa38f1807efc7b1bc2e1608dbfda', 'Disabling this option will hide slide navigation buttons or thumbnails.', 0), +(340, 'en', 'theme LayerSlider', '8638bdd810f746e0fce3c5c2dadab3b8', 'Slide navigation on hover', 0), +(341, 'en', 'theme LayerSlider', 'c24735d116a5f3d4f79022bfe8c53c49', 'Slide navigation buttons (including thumbnails) will be shown on mouse hover only.', 0), +(342, 'en', 'theme LayerSlider', '68f67baf99a2af08233d306a25018335', 'Show bar timer', 0), +(343, 'en', 'theme LayerSlider', 'd55995a8f6132ba16acb214c54c1da8c', 'Show the bar timer to indicate slideshow progression.', 0), +(344, 'en', 'theme LayerSlider', '072647cafbaaf9ad299cac058d79a738', 'Show circle timer', 0), +(345, 'en', 'theme LayerSlider', '1d9c34a1e5abf100183b4ad7532c41b7', 'Use circle timer to indicate slideshow progression.', 0), +(346, 'en', 'theme LayerSlider', '3fcedab9558638bde418786a33094642', 'Thumbnail navigation', 0), +(347, 'en', 'theme LayerSlider', 'b69c76269a74010901e9ee7ed59c22ff', 'Use thumbnail navigation instead of slide bullet buttons.', 0), +(348, 'en', 'theme LayerSlider', 'b9f5c797ebbf55adccdd8539a65a0241', 'Disabled', 0), +(349, 'en', 'theme LayerSlider', 'eee0168be69b854c20621fc6f01cc3fc', 'Hover', 0), +(350, 'en', 'theme LayerSlider', '68eec46437c384d8dad18d5464ebc35c', 'Always', 0), +(351, 'en', 'theme LayerSlider', '7bf523564ae99db42b76b16f8a2231b0', 'Thumbnail container width', 0), +(352, 'en', 'theme LayerSlider', 'c654aa0276ab502a7b2502a900d51b22', 'The width of the thumbnail area.', 0), +(353, 'en', 'theme LayerSlider', '428872304039eb06a8761dec0d58c59a', 'Thumbnail width', 0), +(354, 'en', 'theme LayerSlider', '4c4f891efc6ea4443f5a9d8c503341c7', 'The width of thumbnails in the navigation area.', 0), +(355, 'en', 'theme LayerSlider', '4a01154f4aaebd4f2bed5c9ac2192e91', 'Thumbnail height', 0), +(356, 'en', 'theme LayerSlider', '3175b94fbe567e891def2d97b9a82fff', 'The height of thumbnails in the navigation area.', 0), +(357, 'en', 'theme LayerSlider', '65819e181559efbeb04058d188bb09a2', 'Active thumbnail opacity', 0), +(358, 'en', 'theme LayerSlider', 'ab2578c7b8b07921d0cecf9d6e4280a3', 'Opacity in percents of the active slide''s tumbnail.', 0), +(359, 'en', 'theme LayerSlider', 'cf0f741e96ca0952f1ba77b54480a454', 'Inactive thumbnail opacity', 0), +(360, 'en', 'theme LayerSlider', '6dd5f63b48063c693b21f05d804658bf', 'Opacity in percents of inactive slide thumbnails.', 0), +(361, 'en', 'theme LayerSlider', 'f66c60868ee78081b27e781f10b59cfd', 'Automatically play videos', 0), +(362, 'en', 'theme LayerSlider', '2458c5b1cdaebce036e994a888804cc8', 'Videos will be automatically started on the active slide.', 0), +(363, 'en', 'theme LayerSlider', 'f30a5a0a150bc99b997ffb468904b06e', 'Pause slideshow', 0), +(364, 'en', 'theme LayerSlider', 'dfb25918abab033e2d4df6d037385b99', 'The slideshow can temporally paused while videos are plaing. You can choose to permanently stop the pause until manual restarting.', 0), +(365, 'en', 'theme LayerSlider', 'dacc03bb6106a6c64fc7594f444cb0cd', 'While playing', 0), +(366, 'en', 'theme LayerSlider', 'd69deab82e6473366a7dcdffc6d50857', 'Permanently', 0), +(367, 'en', 'theme LayerSlider', 'fa46ea6f6f6623fdd7039b5f1a8f3940', 'No action', 0), +(368, 'en', 'theme LayerSlider', '4cae6acadf866d95afb764b4e6545be5', 'Youtube preview', 0), +(369, 'en', 'theme LayerSlider', 'f89711b1d5d16b7a435148447f47800d', 'The preview image quaility for YouTube videos. Note, some videos do not have HD previews, and you may need to choose a lower quaility.', 0), +(370, 'en', 'theme LayerSlider', '155a657eee2a2e2b07c3a47b93c478f6', 'Maximum quality', 0), +(371, 'en', 'theme LayerSlider', 'b8924eb7fe4c3fb0219f7709d999acb6', 'High quality', 0), +(372, 'en', 'theme LayerSlider', '31186f925fe95370a86649eb2b2e00c3', 'Medium quality', 0), +(373, 'en', 'theme LayerSlider', '722597fc491a17f65a7b2c9db01ec6b1', 'Default quality', 0), +(374, 'en', 'theme LayerSlider', 'd7e82ef6f0565a1d55f654cc5f6396aa', 'Image preload', 0), +(375, 'en', 'theme LayerSlider', '780cc5bdd19d125d085cf687b74c161e', 'Preloads images used in the next slides for seamless animations.', 0), +(376, 'en', 'theme LayerSlider', 'e7f33d85ee587f85c847c1c338a9f0d1', 'Lazy load images', 0), +(377, 'en', 'theme LayerSlider', '8ba509465fbb9c9350c60ac21c2576f2', 'Loads images only when needed to save bandwidth and server resources. Relies on the preload feature.', 0), +(378, 'en', 'theme LayerSlider', 'be0233bf54a7d9579cbf0356bce96b17', 'Use relative URLs', 0), +(379, 'en', 'theme LayerSlider', '00cf981f6a6ebc3d812b2c9d49e71891', 'Use relative URLs for local images. This setting could be important when moving your WP installation.', 0), +(380, 'en', 'theme LayerSlider', '5e1575919121f7253b56bb39b99e1042', 'YourLogo', 0), +(381, 'en', 'theme LayerSlider', 'be622a5c9f59fa148c55c058ede850ed', 'A fixed image layer can be shown above the slider that remains still during slide progression. Can be used to display logos or watermarks.', 0), +(382, 'en', 'theme LayerSlider', '77c34b7517dd216292658ee3b420dd1f', 'YourLogo style', 0), +(383, 'en', 'theme LayerSlider', '355a12e47302b7e2627dc90d1c0e79c6', 'CSS properties to control the image placement and appearance.', 0), +(384, 'en', 'theme LayerSlider', '1cfb56506d3621c27196a6aa02a23c39', 'YourLogo link', 0), +(385, 'en', 'theme LayerSlider', 'd682c4c5de0f4983b6441d7dc1ddfe21', 'Enter an URL to link the YourLogo image.', 0), +(386, 'en', 'theme LayerSlider', '793c50b3553eae2294651c4d59b715d0', 'Open link in new page', 0), +(387, 'en', 'theme LayerSlider', '57afcf3e474905ebad3b0c31456b0432', 'Disabling this option will open the link in the current page.', 0), +(388, 'en', 'theme LayerSlider', '1a3cb622f5613168ed16ba4ffcfe49fe', 'Set a slide image', 0), +(389, 'en', 'theme LayerSlider', '3f28b3c8785ecb212ad23bdbcc866659', 'The slide image/background. Click on the image to open the WordPress Media Library to choose or upload an image.', 0), +(390, 'en', 'theme LayerSlider', '9d8cfafeba857023956c26437b6570fc', 'Set a slide thumbnail', 0), +(391, 'en', 'theme LayerSlider', 'ee3a294033bb8e5d1a208d3abef859b3', 'The thumbnail image of this slide. Click on the image to open the WordPress Media Library to choose or upload an image. If you leave this field empty, the slide image will be used.', 0), +(392, 'en', 'theme LayerSlider', '78c06e1390fd8f614f6bf259b4abf77a', 'Slide delay', 0), +(393, 'en', 'theme LayerSlider', 'b0c71ca949422ff07096787e513bf3dc', 'Here you can set the time interval between slide changes, this slide will stay visible for the time specified here. This value is in millisecs, so the value 1000 means 1 second. Please don''t use 0 or very low values.', 0), +(394, 'en', 'theme LayerSlider', '1605a4f4a4e45503d3ac914de9fba80a', 'Time Shift', 0), +(395, 'en', 'theme LayerSlider', 'e166744c44a3d596158ca121c78b7a47', 'You can control here the timing of the layer animations when the slider changes to this slide with a 3D/2D transition. Zero means that the layers of this slide will animate in when the slide transition ends. You can time-shift the starting time of the layer animations with positive or negative values.', 0), +(396, 'en', 'theme LayerSlider', 'e6b391a8d2c4d45902a23a8b6585703d', 'URL', 0), +(397, 'en', 'theme LayerSlider', 'b9bf71b88c58326f7bab0607f8fe73d0', 'If you want to link the whole slide, enter the URL of your link here.', 0), +(398, 'en', 'theme LayerSlider', '1f7412ef1f7fdba3cc269af9a0b7a40c', 'Link Target', 0), +(399, 'en', 'theme LayerSlider', '7b7b745fe56aff57c1f7152a1637e724', 'You can control here the link behaviour: _self means the linked page will open in the current tab/window, _blank will create a new tab/window.', 0), +(400, 'en', 'theme LayerSlider', '739cea2b85156183f917f2ccaa10a50c', '#ID', 0), +(401, 'en', 'theme LayerSlider', '06f695600f91bfbd579d9d8f5a0147bd', 'You can apply an ID attribute on the HTML element of this slide to work with it in your custom CSS or Javascript code.', 0), +(402, 'en', 'theme LayerSlider', '550dc007dba485adc22eddfe0af40a81', 'Deeplink', 0), +(403, 'en', 'theme LayerSlider', '2370ab575d5bcb31286546ba6f3a84db', 'You can specify a slide alias name which you can use in your URLs with a hash mark, so LayerSlider will start with the correspondig slide.', 0), +(404, 'en', 'theme LayerSlider', '7acdf85c69cc3c5305456a293524386e', 'Hidden', 0), +(405, 'en', 'theme LayerSlider', 'a494a9272210a3aa3682f9fa8b6ad9fc', 'If you don''t want to use this slide in your front-page, but you want to keep it, you can hide it with this switch.', 0), +(406, 'en', 'theme LayerSlider', '1529fb44e04df26ff7666faa9f58c605', 'OffsetX', 0), +(407, 'en', 'theme LayerSlider', '968efab4446c712ce7cedd4b1b1a611a', 'The horizontal offset to align the starting position of layers. Positive and negative numbers are allowed or enter left / right to position the layer out of the frame.', 0), +(408, 'en', 'theme LayerSlider', '1508a7d829d65cf5e117fdc2aca0f155', 'OffsetY', 0), +(409, 'en', 'theme LayerSlider', 'f640db70778e12f4916895fbd026a618', 'The vertical offset to align the starting position of layers. Positive and negative numbers are allowed or enter top / bottom to position the layer out of the frame.', 0), +(410, 'en', 'theme LayerSlider', 'e02d2ae03de9d493df2b6b2d2813d302', 'Duration', 0), +(411, 'en', 'theme LayerSlider', 'a5424a1b7ab06a15ddc5d50b77ec4fbb', 'The transition duration in milliseconds when the layer entering into the slide. A second is equal to 1000 milliseconds.', 0), +(412, 'en', 'theme LayerSlider', '8f497c1a3d15af9e0c215019f26b887d', 'Delay', 0), +(413, 'en', 'theme LayerSlider', 'd3deb770e828aa15cc4562ad525ad989', 'Delays the transition with the given amount of milliseconds before the layer entering into the slide. A second is equal to 1000 milliseconds.', 0), +(414, 'en', 'theme LayerSlider', '32485d52ad7aea25b3bc80d416e76a3b', 'Easing', 0), +(415, 'en', 'theme LayerSlider', 'c405823ea6eef48b12c76d719743050e', 'The timing function of the animation to manipualte the layer''s movement. Click on the link next to this field to open easings.net for examples and more information', 0), +(416, 'en', 'theme LayerSlider', '04e0385c10aefee8e4681617d2f3ef40', 'Fade', 0), +(417, 'en', 'theme LayerSlider', 'ecdc93d174113fe69b7cbf2c42b5a1cb', 'Fade the layer during the transition.', 0), +(418, 'en', 'theme LayerSlider', '8d2de5368588552fbae54044ac5c7b3d', 'Rotate', 0), +(419, 'en', 'theme LayerSlider', 'dbf9bf06831ccdcc555ce1d36777df4f', 'Rotates the layer clockwise from the given angle to zero degree. Negative values are allowed for anticlockwise rotation.', 0), +(420, 'en', 'theme LayerSlider', '801e0dd823542f625e0f2ee135efb62d', 'RotateX', 0), +(421, 'en', 'theme LayerSlider', 'cff7d84fa1adfc0d322a96d83263d34f', 'Rotates the layer along the X (horizontal) axis from the given angle to zero degree. Negative values are allowed for reverse direction.', 0), +(422, 'en', 'theme LayerSlider', 'ea0928ab345567847020e1544892fba0', 'RotateY', 0), +(423, 'en', 'theme LayerSlider', '90cf2e0811b572efc9bacedd96c1874f', 'Rotates the layer along the Y (vertical) axis from the given angle to zero degree. Negative values are allowed for reverse direction.', 0), +(424, 'en', 'theme LayerSlider', '5a013b463ee01be2924568775fdddfb1', 'SkewX', 0), +(425, 'en', 'theme LayerSlider', 'cf97c4dfc2420380f05e616054ddf552', 'Skews the layer along the X (horizontal) axis from the given angle to 0 degree. Negative values are allowed for reverse direction.', 0), +(426, 'en', 'theme LayerSlider', 'eeb66258f8bf4bb3c0763461b5c1797d', 'SkewY', 0), +(427, 'en', 'theme LayerSlider', '43fe670cce22c21b1ef30ba69504419e', 'Skews the layer along the Y (vertical) axis from the given angle to 0 degree. Negative values are allowed for reverse direction.', 0), +(428, 'en', 'theme LayerSlider', 'b5e0c179725e7f282ffb8e6a96797b49', 'ScaleX', 0), +(429, 'en', 'theme LayerSlider', 'df75036010b51c538ccb3bd5c83ba2c6', 'Scales the layer''s width from the given value to its original size.', 0), +(430, 'en', 'theme LayerSlider', '3475b72c6483a5c871d245e2567c96c7', 'ScaleY', 0), +(431, 'en', 'theme LayerSlider', '4a446f39bb809bfa606fada4eeb151a8', 'Scales the layer''s height from the given value to its original size.', 0), +(432, 'en', 'theme LayerSlider', 'a98b8b98dda22cc1a336c4f7152e4d79', 'TransformOrigin', 0), +(433, 'en', 'theme LayerSlider', 'c233c0409139afbf12d99249676da9bb', 'This option allows you to modify the origin for transformations of the layer according to its position. The three values represent the X, Y and Z axis in 3D space. OriginX can be left, center, right, a number or a percentage value. OriginY can be top, center, bottom, a number or a percentage value. OriginZ can be a number and corresponds the depth in 3D space.', 0), +(434, 'en', 'theme LayerSlider', '3326c43fa7fb524ec75cb0cfa0c38196', 'The horizontal offset to align the ending position of layers. Positive and negative numbers are allowed or write left / right to position the layer out of the frame.', 0), +(435, 'en', 'theme LayerSlider', 'ccafb39813a16b76193f870c5f355c01', 'The vertical offset to align the starting position of layers. Positive and negative numbers are allowed or write top / bottom to position the layer out of the frame.', 0), +(436, 'en', 'theme LayerSlider', '3806306aa0f2ce169c9a489660e70917', 'The transition duration in milliseconds when the layer leaving the slide. A second is equal to 1000 milliseconds.', 0), +(437, 'en', 'theme LayerSlider', 'c70201e2f6db78f07f049b65937d43a1', 'Show until', 0); +INSERT INTO `drgrp_icl_strings` (`id`, `language`, `context`, `name`, `value`, `status`) VALUES +(438, 'en', 'theme LayerSlider', 'f784da2712b23e04cb52873a6e88a547', 'The layer will be visible for the time you specify here, then it will slide out. You can use this setting for layers to leave the slide before the slide itself animates out, or for example before other layers will slide in. This value in millisecs, so the value 1000 means 1 second.', 0), +(439, 'en', 'theme LayerSlider', 'c12fb8ade9be54f9b1193d37e4c92785', 'Rotates the layer clockwise by the given angle from its original position. Negative values are allowed for anticlockwise rotation.', 0), +(440, 'en', 'theme LayerSlider', '42b1620bed4f34f9454074600621ccc4', 'Rotates the layer along the X (horizontal) axis by the given angle from its original state. Negative values are allowed for reverse direction.', 0), +(441, 'en', 'theme LayerSlider', '5acb79cbab92d9a9cca70975955d95d3', 'Rotates the layer along the Y (vertical) axis by the given angle from its orignal state. Negative values are allowed for reverse direction.', 0), +(442, 'en', 'theme LayerSlider', '5e90e0966f87e08fa8d1d4a5b9529973', 'Skews the layer along the X (horizontal) axis by the given angle from its orignal state. Negative values are allowed for reverse direction.', 0), +(443, 'en', 'theme LayerSlider', '327dd6f928181dee8780f307d309f26c', 'Skews the layer along the Y (vertical) axis by the given angle from its original state. Negative values are allowed for reverse direction.', 0), +(444, 'en', 'theme LayerSlider', 'f741fe74d4a02f918397a3eb85a5f82a', 'Scales the layer''s width by the given value from its original size.', 0), +(445, 'en', 'theme LayerSlider', '0d668aae291288a33412872293cf48e1', 'Scales the layer''s height by the given value from its original size.', 0), +(446, 'en', 'theme LayerSlider', 'b437c451aa3282f75304078beaccd7f2', 'Parallax Level', 0), +(447, 'en', 'theme LayerSlider', 'fad6de80e68eed2179fafec1759a5f07', 'Applies a parallax effect on layers when you move your mouse over the slider. Higher values makes the layer more sensitive to mouse move. Negative values are allowed.', 0), +(448, 'en', 'theme LayerSlider', 'a1fa27779242b4902f7ae3bdd5c6d508', 'Type', 0), +(449, 'en', 'theme LayerSlider', '274afb0a973300653f19b31664339aa2', 'Delay before the animation start when the layer slides out. This value is in millisecs, so the value 1000 means 1 second.', 0), +(450, 'en', 'theme LayerSlider', '85a7cd587d6142dbfc1a4de05af7b75d', 'Scale', 0), +(451, 'en', 'theme LayerSlider', '334eece3fce626ad5f328441d820586e', 'You can set the initial scale of this layer here which will be animated to the default (1.0) value.', 0), +(452, 'en', 'theme LayerSlider', '1fbbfeb55b30193a6ab42063411d0c87', 'You can set the ending scale value here, this sublayer will be animated from the default (1.0) value to yours.', 0), +(453, 'en', 'theme LayerSlider', 'e9e245065a77b7927aaccb2cf9d2ffcd', 'If you don''t want to use this layer, but you want to keep it, you can hide it with this switch.', 0), +(454, 'en', 'theme LayerSlider', '0aa6f4210bf373c95eda00232e93cd98', 'Distance', 0), +(455, 'en', 'theme LayerSlider', '2408db8dd5acd58e5a2cf334c1bd5a1d', 'The default value is -1 which means that the layer will be positioned exactly outside of the slide container. You can use the default setting in most of the cases. If you need to set the start or end position of the layer from further of the edges of the slide container, you can use 2, 3 or higher values.', 0), +(456, 'en', 'theme LayerSlider', 'e1f70f4a4265cb51c1b219aa60eaa441', 'Enter URL', 0), +(457, 'en', 'theme LayerSlider', '627b4c0e8a9b46747497d4bae491a6c2', 'If you want to link your layer, type here the URL. You can use a hash mark followed by a number to link this layer to another slide. Example: #3 - this will switch to the third slide.', 0), +(458, 'en', 'theme LayerSlider', 'a33a3e8542755c06996a81a78878b66b', 'URL target', 0), +(459, 'en', 'theme LayerSlider', 'cdf088ef3490885c0481909a0586a0cf', 'You can control here the link behaviour: _self means the linked page will open in the current tab/window, _blank will open it in a new tab/window.', 0), +(460, 'en', 'theme LayerSlider', '32954654ac8fe66a1d09be19001de2d4', 'Width', 0), +(461, 'en', 'theme LayerSlider', 'db4fce4d2fc5b921eefbb7a918b197ca', 'You can set the width of your layer. You can use pixels, percents, or the default value ''auto''. Examples: 100px, 50% or auto', 0), +(462, 'en', 'theme LayerSlider', 'eec6c4bdbd339edf8cbea68becb85244', 'Height', 0), +(463, 'en', 'theme LayerSlider', 'db0ee369d37efbd4ddf02c48e21a7cc9', 'You can set the height of your layer. You can use pixels, percents, or the default value ''auto''. Examples: 100px, 50% or auto', 0), +(464, 'en', 'theme LayerSlider', 'a4ffdcf0dc1f31b9acaf295d75b51d00', 'Top', 0), +(465, 'en', 'theme LayerSlider', '5ae540b73161b4bb1fda923f07842b2c', 'The layer position from the top of the slide. You can use pixels and percents. Examples: 100px or 50%. You can move your layers in the preview above with a drag n'' drop, or set the exact values here.', 0), +(466, 'en', 'theme LayerSlider', '945d5e233cf7d6240f6b783b36a374ff', 'Left', 0), +(467, 'en', 'theme LayerSlider', '093ad97bb7f1248fe005f6e84cc1802f', 'The layer position from the left side of the slide. You can use pixels and percents. Examples: 100px or 50%. You can move your layers in the preview above with a drag n'' drop, or set the exact values here.', 0), +(468, 'en', 'theme LayerSlider', '9bef4210a675b3352481eaba774135e2', 'Padding on the top of the layer. Example: 10px', 0), +(469, 'en', 'theme LayerSlider', '92b09c7c48c520c3c55e497875da437c', 'Right', 0), +(470, 'en', 'theme LayerSlider', 'ee9c7d68f4827e199b21138aff29ce0a', 'Padding on the right side of the layer. Example: 10px', 0), +(471, 'en', 'theme LayerSlider', '2ad9d63b69c4a10a5cc9cad923133bc4', 'Bottom', 0), +(472, 'en', 'theme LayerSlider', '6b70b97995dce26c04f5b5daea657e4d', 'Padding on the bottom of the layer. Example: 10px', 0), +(473, 'en', 'theme LayerSlider', '28a65f6de7eebf8d4c376a2abe749bd2', 'Padding on the left side of the layer. Example: 10px', 0), +(474, 'en', 'theme LayerSlider', '510f6afc8355884a0102b52329b5aec7', 'Border on the top of the layer. Example: 5px solid #000', 0), +(475, 'en', 'theme LayerSlider', '6c8f384c72285ae0d6f94c14a5fa37e9', 'Border on the right side of the layer. Example: 5px solid #000', 0), +(476, 'en', 'theme LayerSlider', 'b850529030bbb5c69a604c5dc8764e84', 'Border on the bottom of the layer. Example: 5px solid #000', 0), +(477, 'en', 'theme LayerSlider', '5d21c59909857b765d5d33b1fc13ba82', 'Border on the left side of the layer. Example: 5px solid #000', 0), +(478, 'en', 'theme LayerSlider', 'cefc4f7cbc8c34762e0f76703e7e174e', 'Family', 0), +(479, 'en', 'theme LayerSlider', '909bbc55b3fe644f3f7902be12c0edf8', 'List of your chosen fonts separated with a comma. Please use apostrophes if your font names contains white spaces. Example: Helvetica, Arial, sans-serif', 0), +(480, 'en', 'theme LayerSlider', '6f6cb72d544962fa333e2e34ce64f719', 'Size', 0), +(481, 'en', 'theme LayerSlider', 'f7c6e3ec6e0a88ce6b2b2359233290ee', 'The font size in pixels. Example: 16px.', 0), +(482, 'en', 'theme LayerSlider', '422e94aac2576bd9aa794e942a115764', 'Line-height', 0), +(483, 'en', 'theme LayerSlider', 'e23516d21150cac0bb665a06983f9c27', 'The line height of your text. The default setting is ''normal''. Example: 22px', 0), +(484, 'en', 'theme LayerSlider', 'cb5feb1b7314637725a2e73bdc9f7295', 'Color', 0), +(485, 'en', 'theme LayerSlider', 'cdb3e9cc0b2932a6d1543d19732761f1', 'The color of your text. You can use color names, hexadecimal, RGB or RGBA values. Example: #333', 0), +(486, 'en', 'theme LayerSlider', 'a9ded1e5ce5d75814730bb4caaf49419', 'Background', 0), +(487, 'en', 'theme LayerSlider', '57315a787bf5df775dcdb38f85aacf7b', 'The background color of your layer. You can use color names, hexadecimal, RGB or RGBA values as well as the ''transparent'' keyword. Example: #FFF', 0), +(488, 'en', 'theme LayerSlider', '22b4e7bf3118d625243554505037c3d4', 'Rounded corners', 0), +(489, 'en', 'theme LayerSlider', '13090ba4462080a239fb5b36b3269778', 'If you want rounded corners, you can set here its radius. Example: 5px', 0), +(490, 'en', 'theme LayerSlider', '856ba67470300f8246b140de9a27555d', 'Custom styles', 0), +(491, 'en', 'theme LayerSlider', '295a8a8d77d92a553a1396a94b95059d', 'If you want to set style settings other then above, you can use here any CSS codes. Please make sure to write valid markup.', 0), +(492, 'en', 'theme LayerSlider', 'b718adec73e04ce3ec720dd11a06a308', 'ID', 0), +(493, 'en', 'theme LayerSlider', 'ca79528715d6c07cb429e8189105cbb4', 'You can apply an ID attribute on the HTML element of this layer to work with it in your custom CSS or Javascript code.', 0), +(494, 'en', 'theme LayerSlider', 'e9878b4854d29907146149f695cb1cfb', 'Classes', 0), +(495, 'en', 'theme LayerSlider', 'c666f7b19a598af3cadb8c9cb07c4bcd', 'You can apply classes on the HTML element of this layer to work with it in your custom CSS or Javascript code.', 0), +(496, 'en', 'theme LayerSlider', 'b78a3223503896721cca1303f776159b', 'Title', 0), +(497, 'en', 'theme LayerSlider', '3ace045d5becea8953aabde365c5c8d8', 'You can add a title to this layer which will display as a tooltip if someone holds his mouse cursor over the layer.', 0), +(498, 'en', 'theme LayerSlider', 'a2e92861b757ab878312dd57993d60cf', 'Alt', 0), +(499, 'en', 'theme LayerSlider', '16cc342f4328c6c9ec0ea73fbe789d4f', 'You can add an alternative text to your layer which is indexed by search engine robots and it helps people with certain disabilities.', 0), +(500, 'en', 'theme LayerSlider', 'eba991d56b1be0b940d722211bab87bc', 'Rel', 0), +(501, 'en', 'theme LayerSlider', 'c14cb81cbbf90b409a33a009d46f8b8e', 'Some plugin may use the rel attribute of a linked content, here you can specify it to make interaction with these plugins.', 0), +(502, 'en', 'theme LayerSlider', 'd70d72fb86010cc4a861f0146e5dde94', 'Your settings were successfully saved.', 0), +(503, 'en', 'theme LayerSlider', 'c86ff2b4f1baf5f46ed78d66a88044b0', 'Thank you for purchasing LayerSlider WP. You successfully validated your purchase code for auto-updates.', 0), +(504, 'en', 'theme LayerSlider', 'efb9f4a9f85721afa63e2e845a294cab', 'Your purchase code doesn''t appear to be valid. Please make sure that you entered your purchase code correctly.', 0), +(505, 'en', 'theme LayerSlider', 'd7d1f7f20569f55c7b1bb80c406fde85', 'Show on screen', 0), +(506, 'en', 'theme LayerSlider', '9ac4d6da310d15a6496773199b51d5ba', 'Tooltips', 0), +(507, 'en', 'theme LayerSlider', '7583faf881721784060e84f37851c460', 'Screen Options', 0), +(508, 'en', 'theme LayerSlider', '3766ff2a3b800d2c9a9bd1ee714e28d7', 'LayerSlider Skin Editor', 0), +(509, 'en', 'theme LayerSlider', '07fc7dc79c8046bb36d97b4332dab1ca', 'Back to the list', 0), +(510, 'en', 'theme LayerSlider', '7f48f1caee26b649118cd5a19e396e0b', 'Your changes has been saved!', 0), +(511, 'en', 'theme LayerSlider', '8d3e6cc52edac243092562bacab67be4', 'Skin Editor', 0), +(512, 'en', 'theme LayerSlider', '3b78b1075d2a7525faa88888db986fb2', 'Ctrl+Q to fold/unfold a block', 0), +(513, 'en', 'theme LayerSlider', '25c5f927673e0a6f99ce6661e33deb88', 'Choose a skin:', 0), +(514, 'en', 'theme LayerSlider', '1b191afebb7d1a5dc2cfbc10bb0ac43b', 'Built-in skins will be overwritten by plugin updates. Making changes should be done through the Custom Styles Editor.', 0), +(515, 'en', 'theme LayerSlider', '425baa39ac8b521dc44163369a880912', 'You need to make this file writable before you can save your changes. See the Codex for more information.', 0), +(516, 'en', 'theme LayerSlider', 'daa6b483e9f6ca081ec7e0b4a352f9e9', 'Save changes', 0), +(517, 'en', 'theme LayerSlider', 'a25cdb30824d04d8ea89d1122ba9a9be', 'Modifying a skin with bad code can break your sliders'' appearance. Changes cannot be reverted after saving.', 0), +(518, 'en', 'theme LayerSlider', '7da8bc519571bc7a45862cee2b451934', 'Editing slider:', 0), +(519, 'en', 'theme LayerSlider', '77aad092f2f1884c2da84dd7b9960d49', 'Slider Settings', 0), +(520, 'en', 'theme LayerSlider', 'a8d90ed8f17c347c8d46e0ef22c85ecb', 'Slides', 0), +(521, 'en', 'theme LayerSlider', '20b2943a0114d3d02d5ea16563f108e3', 'Event Callbacks', 0), +(522, 'en', 'theme LayerSlider', '1fe917b01f9a3f87fa2d7d3b7643fac1', 'FAQ', 0), +(523, 'en', 'theme LayerSlider', '5b6cf869265c13af8566f192b4ab3d2a', 'Documentation', 0), +(524, 'en', 'theme LayerSlider', 'dddbbe9b585f35cf93c3cb8036c6d1d1', 'Need help? Try these:', 0), +(525, 'en', 'theme LayerSlider', '6240283f8cafe0d117e4429ce194a4b0', 'Add new slide', 0), +(526, 'en', 'theme LayerSlider', '6c5eacaf2599c929c35c4db65136caaf', 'Slide Options', 0), +(527, 'en', 'theme LayerSlider', '4e0f7a74043c8951db9f2f7e9ab7a577', 'Duplicate this slide', 0), +(528, 'en', 'theme LayerSlider', 'fe55a3e10226255198af12b16a80dcb7', 'Choose slide image', 0), +(529, 'en', 'theme LayerSlider', 'e81c4e4f2b7b93b481e13a8553c2ae1b', 'or', 0), +(530, 'en', 'theme LayerSlider', 'b37335386d8a658db081f6be312fe1f8', 'enter URL', 0), +(531, 'en', 'theme LayerSlider', 'daf72e4828abe3fa7af04ffc5e2dbf3e', 'Choose thumbnail', 0), +(532, 'en', 'theme LayerSlider', '55ef43c7859ee512e25f5f804b88db4d', 'Slide transition', 0), +(533, 'en', 'theme LayerSlider', '544cbf60abd4c8c12de547442de660ad', 'You can select your desired slide transitions by clicking on this button.', 0), +(534, 'en', 'theme LayerSlider', 'c93a257278a4711607e300f523e6e5bd', 'Link this slide', 0), +(535, 'en', 'theme LayerSlider', '74248c725e00bf9fe04df4e35b249a19', 'Misc', 0), +(536, 'en', 'theme LayerSlider', '31fde7b05ac8952dacf4af8a704074ec', 'Preview', 0), +(537, 'en', 'theme LayerSlider', '7c029f77271f9195cb2a8960995dc090', 'Enter Preview', 0), +(538, 'en', 'theme LayerSlider', '87bfda183c4f851a101e97bbb1bbace7', 'Layers', 0), +(539, 'en', 'theme LayerSlider', '7b532af1d92b84114ad3e4e8c8d92f53', 'timeline view', 0), +(540, 'en', 'theme LayerSlider', '8b222eea9bec497cd6e6076670fed565', 'Highlight layer in editor.', 0), +(541, 'en', 'theme LayerSlider', 'bfd806a1f400720a328bc02691f00f84', 'Prevent layer from dragging in editor.', 0), +(542, 'en', 'theme LayerSlider', 'e7adc44bb82fe33edc6b5cce05bed511', 'Hide layer in editor.', 0), +(543, 'en', 'theme LayerSlider', 'f15c1cae7882448b3fb0404682e17e61', 'Content', 0), +(544, 'en', 'theme LayerSlider', 'afedf9afee367f51f98d7cf030c976a6', 'Transition', 0), +(545, 'en', 'theme LayerSlider', '97e7c9a7d06eac006a28bf05467fcc8b', 'Link', 0), +(546, 'en', 'theme LayerSlider', '4c1c7d945fcd04d68bd3b3f1d99a55a1', 'Styles', 0), +(547, 'en', 'theme LayerSlider', '287234a1ff35a314b5b6bc4e5828e745', 'Attributes', 0), +(548, 'en', 'theme LayerSlider', 'be53a0541a6d36f6ecb879fa2c584b08', 'Image', 0), +(549, 'en', 'theme LayerSlider', '9dffbf69ffba8bc38bc4e01abf4b1675', 'Text', 0), +(550, 'en', 'theme LayerSlider', '8120a37506c30da799bedd0cbf1f050d', 'HTML / Video / Audio', 0), +(551, 'en', 'theme LayerSlider', '6ac7036dc885200ab4a78d49986cf40e', 'Dynamic content from posts', 0), +(552, 'en', 'theme LayerSlider', 'feaf0a320c3d678ad30dd179b7d21584', 'Paragraph', 0), +(553, 'en', 'theme LayerSlider', '106530dc42baa21c67f8a3af4d7fd9e1', 'H1', 0), +(554, 'en', 'theme LayerSlider', 'ca2bf3f6b7e18a508253e9521510a4b5', 'H2', 0), +(555, 'en', 'theme LayerSlider', 'b14763210c3ab7284e9cbe731d7dc2a5', 'H3', 0), +(556, 'en', 'theme LayerSlider', '6b57370ba89bd88a2d6d819d65f6007a', 'H4', 0), +(557, 'en', 'theme LayerSlider', '830652084dda69b6b957e2c3a7bd9b18', 'H5', 0), +(558, 'en', 'theme LayerSlider', '2ac6cc2e6434c3db7291b230f3c36b39', 'H6', 0), +(559, 'en', 'theme LayerSlider', 'cf0b5e27ca697e583e935fdcb97b6f04', 'Click on the image preview to open WordPress Media Library or', 0), +(560, 'en', 'theme LayerSlider', 'c63d2ee1caaca563f8cd1e6c6a84ebc1', 'insert from URL', 0), +(561, 'en', 'theme LayerSlider', 'fcf23bfb79c98881d61d21ac08f3a762', 'Type here the contents of your layer. You can use any HTML codes in this field to insert other contents then text. This field is also shortcode-aware, so you can insert content from other plugins as well as video embed codes.', 0), +(562, 'en', 'theme LayerSlider', '980057390ab269b87e5869cd25e84b06', 'Add Media', 0), +(563, 'en', 'theme LayerSlider', '89d0a1c169c6374147504bd102cea0b1', 'Insert self-hosted video or audio', 0), +(564, 'en', 'theme LayerSlider', 'f16b400554bd76cee03356a2b8c7ace2', 'Click on one or more post placeholders to insert them into your layer''s content. Post placeholders are acting like shortcodes in WP, and they will be filled with the actual content from your posts.', 0), +(565, 'en', 'theme LayerSlider', 'ad40d20a0a8ac31ca6c616580aff0e71', 'Limit text length (if any)', 0), +(566, 'en', 'theme LayerSlider', '986c54cfca5c8679b2bd6c432d5d3835', 'Configure post options', 0), +(567, 'en', 'theme LayerSlider', '31f68dc05492d98c7789a9fd7bed069a', 'Transition in', 0), +(568, 'en', 'theme LayerSlider', '66fa2d26ed57ea1fff349064919941fe', 'Transition out', 0), +(569, 'en', 'theme LayerSlider', 'e1a3d5a1596f71a09d4da5987dc4de53', 'Other options', 0), +(570, 'en', 'theme LayerSlider', 'd0847dd5b7335c3fc649efe4b3a511e6', 'If you will use similar settings for other layers or you want to experiment on a copy, you can duplicate this layer.', 0), +(571, 'en', 'theme LayerSlider', '5333968af52d871e5b66d74dd3eb3d87', 'Duplicate this layer', 0), +(572, 'en', 'theme LayerSlider', 'bc2d76dcaf06750e26167f4a4301f7e6', 'Layout & Positions', 0), +(573, 'en', 'theme LayerSlider', 'a10443964156b9e87c95e74c8f9baf15', 'Padding', 0), +(574, 'en', 'theme LayerSlider', '070554647306343cbea29ebfdd278ba8', 'Border', 0), +(575, 'en', 'theme LayerSlider', '194f5394ae2e9c74dc3c441b92862d1d', 'Font', 0), +(576, 'en', 'theme LayerSlider', '6d3b8f21504122236040a3b1131e960b', 'Word-wrap', 0), +(577, 'en', 'theme LayerSlider', '38acd9ac36dfc5792b83be9bd3e46a61', 'If you use custom sized layers, you have to enable this setting to wrap your text.', 0), +(578, 'en', 'theme LayerSlider', '5bae43862e4dc31a1a312053e1fd5d79', 'Custom style settings', 0), +(579, 'en', 'theme LayerSlider', '0e4d3ed90345dcd05f7562236e3ae538', 'Add new layer', 0), +(580, 'en', 'theme LayerSlider', 'c804ef5f6f4d5d630ab5d2ab1b8daf83', 'Fires when LayerSlider has loaded', 0), +(581, 'en', 'theme LayerSlider', '6e5cba397c95e49f4fcb0aad12b49cef', 'Calling when the slideshow has started.', 0), +(582, 'en', 'theme LayerSlider', '8b51b1f9a218015ffbdbb1b038238624', 'Calling when the slideshow is stopped by the user.', 0), +(583, 'en', 'theme LayerSlider', '931ef023c48c330d5f2f7ae00c587c22', 'Fireing when the slideshow is temporary on hold (e.g.: "Pause on hover" feaure).', 0), +(584, 'en', 'theme LayerSlider', '992996ca3fe8d3d0f27259abee981f90', 'Calling when the slider commencing slide change (animation start).', 0), +(585, 'en', 'theme LayerSlider', '7a75d4ae5c7d6f4dc601c969257e9a67', 'Fireing when the slider finished a slide change (animation end).', 0), +(586, 'en', 'theme LayerSlider', '4460807b6741e23430ff0e603bb054cd', 'Calling when the slider will change to the previous slide by the user.', 0), +(587, 'en', 'theme LayerSlider', '6b80e42e6a269fbc465beb1d7ef942e6', 'Calling when the slider will change to the next slide by the user.', 0), +(588, 'en', 'theme LayerSlider', '110a4b01beabd53b661a47d4b44bd7a8', 'Publish', 0), +(589, 'en', 'theme LayerSlider', 'c16c662b3b619e1f7a8e9f115006e5f5', 'Find posts with the above filters', 0), +(590, 'en', 'theme LayerSlider', '42743ba8c757c61aa058769c9bec42da', 'Don''t filter categories', 0), +(591, 'en', 'theme LayerSlider', '0be556becd0d7cf6756fe9cac415f08b', 'Don''t filter tags', 0), +(592, 'en', 'theme LayerSlider', '49881e76dc28e6025ce33c1026e0656e', 'Don''t filter taxonomies', 0), +(593, 'en', 'theme LayerSlider', 'fb2c77bdb9fc0cefbd8bc92aed836393', 'Order results by', 0), +(594, 'en', 'theme LayerSlider', 'fc96a6f5111fa065391994fd498102c6', 'On this slide', 0), +(595, 'en', 'theme LayerSlider', '70d06578cd62f88163a5cd263fb16036', 'Get the ', 0), +(596, 'en', 'theme LayerSlider', '2511fc6cb0bb2431c0b43d6793d0cbc1', 'following', 0), +(597, 'en', 'theme LayerSlider', '54f56060c313fea460230bc2532bde7d', 'item in the set of matched selection', 0), +(598, 'en', 'theme LayerSlider', 'd05de3eea9c512241b948d0ab163182f', 'Preview from currenty matched elements', 0), +(599, 'en', 'theme LayerSlider', '12a5f79b21085c1cea1238e4c3ef94ef', 'Type your slider name here', 0), +(600, 'en', 'theme LayerSlider', 'ebd9bec4d70abc789d439c1f136b0538', 'Layout', 0), +(601, 'en', 'theme LayerSlider', 'e833b5e560bdc737fe850bc50d0c5f0c', 'Slideshow', 0), +(602, 'en', 'theme LayerSlider', 'a1c58e94227389415de133efdf78ea6e', 'Appearance', 0), +(603, 'en', 'theme LayerSlider', '58a391806696af4c42362b10f5774921', 'Navigation Area', 0), +(604, 'en', 'theme LayerSlider', '5298faa9b7ee689207947717277ae452', 'Thumbnail Navigation', 0), +(605, 'en', 'theme LayerSlider', '554cfab3938e21d9270bd6b75931f96f', 'Videos', 0), +(606, 'en', 'theme LayerSlider', 'bcb1753ce3164a2f8c31fa4cbbb866a1', 'Slider dimensions', 0), +(607, 'en', 'theme LayerSlider', 'cccd87b7e40e68236e925f8f7404cdbb', 'Responsive mode', 0), +(608, 'en', 'theme LayerSlider', '3e3363e9c87f6efa13a2c7ca05695c77', 'Full-width slider settings', 0), +(609, 'en', 'theme LayerSlider', 'c197b7131ad772fb004d9a076ca72f3b', 'Slideshow behavior', 0), +(610, 'en', 'theme LayerSlider', '9df5134d1c3378035532a8c549eb0900', 'Starting slide options', 0), +(611, 'en', 'theme LayerSlider', 'fb3d463b2604eef5d32beee7bf84e68d', 'Slideshow navigation', 0), +(612, 'en', 'theme LayerSlider', 'a56d66d7acdce18b9861f4c84bf8f777', 'Looping', 0), +(613, 'en', 'theme LayerSlider', '2c61ab0ec8b8f75db6e04a9905d55583', 'Number of loops if automatically start slideshow is enabled (0 means infinite!)', 0), +(614, 'en', 'theme LayerSlider', 'cb3c93351f1f20809fdd6e938a4319c7', 'Other settings', 0), +(615, 'en', 'theme LayerSlider', '05182d3abcde660cb03861ed7fa01888', 'You can change the skin of the slider. The ''noskin'' skin is a border- and buttonless skin. Your custom skins will appear in the list when you create their folders as well.', 0), +(616, 'en', 'theme LayerSlider', '170b72c5728ae899d89ac319c02c4adb', 'Here you can apply your custom CSS style settings to the slider.', 0), +(617, 'en', 'theme LayerSlider', 'd0139ac06af49a1319f06041e93656a6', 'Show navigation buttons', 0), +(618, 'en', 'theme LayerSlider', '5d7eddd30d294d96264813fcf8c455d9', 'Navigation buttons on hover', 0), +(619, 'en', 'theme LayerSlider', '120129bce58b9d4a86406dcd0f6ca570', 'Slideshow timers', 0), +(620, 'en', 'theme LayerSlider', 'dd7a416192a831df868aec6fc8aff089', 'Thumbnail dimensions', 0), +(621, 'en', 'theme LayerSlider', '2a17f1e893dce87f569fccaddd972fc3', 'Thumbnail appearance', 0), +(622, 'en', 'theme LayerSlider', '5c6dbc48fea8247742758237e044c84e', 'No sliders were selected to remove.', 0), +(623, 'en', 'theme LayerSlider', '6cd249122c73c2e50536020e830ccc8a', 'The selected sliders were removed.', 0), +(624, 'en', 'theme LayerSlider', '50b0249411f01ca43f1b5a18f264fd28', 'You need to select at least 2 sliders to merge them.', 0), +(625, 'en', 'theme LayerSlider', '55899e296c3c98c31da2185fb050ae3a', 'The selected items were merged together as a new slider.', 0), +(626, 'en', 'theme LayerSlider', '7e49c2c2022ba502f605cac85e41d154', 'Choose a file to import sliders.', 0), +(627, 'en', 'theme LayerSlider', 'eb128200b7668851d6773dc84f5185c6', 'The import file seems to be invalid or corrupted.', 0), +(628, 'en', 'theme LayerSlider', '6665850f1a3e7fdb75efc1f59570e2b2', 'Your slider has been imported.', 0), +(629, 'en', 'theme LayerSlider', '38f5fbf36ee7aede1d043aa3e7b82286', 'Your account does not have the necessary permission you chose, and your settings have not been saved to prevent locking yourself out of the plugin.', 0), +(630, 'en', 'theme LayerSlider', 'b13b828c364eb5409ca4406ae8daf096', 'Permission changes has been updated.', 0), +(631, 'en', 'theme LayerSlider', '92df7d265afacf413a8c6348f38b6c5d', 'Your Google Fonts library has been updated.', 0), +(632, 'en', 'theme LayerSlider', 'be9055c9433667d6178f46f0116a0d91', 'Your settings has been updated.', 0), +(633, 'en', 'theme LayerSlider', '4c9f409a0e052b2f66f8ce6a23883813', 'Removed sliders', 0), +(634, 'en', 'theme LayerSlider', '9ad46d2d4f10955abfc9ca97565bba87', 'Sliders', 0), +(635, 'en', 'theme LayerSlider', '9639e32cab248434a17ab32237cb3b71', 'Apply', 0), +(636, 'en', 'theme LayerSlider', 'ee6cedd17f87dd6b9fe17aca8a5edaea', 'LayerSlider sliders', 0), +(637, 'en', 'theme LayerSlider', 'de9ced9bf5e9829de4a93ad8c9d7a170', 'Add New', 0), +(638, 'en', 'theme LayerSlider', 'f44e47020fb078fef19862b7e5dd0bbc', 'Import sample sliders', 0), +(639, 'en', 'theme LayerSlider', 'cf204f522c89c0d30f07730b980efba4', 'Using beta version', 0), +(640, 'en', 'theme LayerSlider', '0d1f2bb5233ca07e5d906c0a9ef0a2ea', 'Send feedback', 0), +(641, 'en', 'theme LayerSlider', '629eaad60a0ae82987142708edb4c795', 'Give a name for your new slider', 0), +(642, 'en', 'theme LayerSlider', '8e5ff6553afff754fcdb93818a8143cb', 'e.g. Homepage slider', 0), +(643, 'en', 'theme LayerSlider', '410e1a1809e86e2b710b5f17f556c967', 'Add slider', 0), +(644, 'en', 'theme LayerSlider', 'b6d21c7bfd68d49551edbd894da2eee5', 'Slider preview', 0), +(645, 'en', 'theme LayerSlider', '49ee3087348e8d44e1feda1917443987', 'Name', 0), +(646, 'en', 'theme LayerSlider', '6feadb455c64759731e453380c52fbd9', 'Shortcode', 0), +(647, 'en', 'theme LayerSlider', '0eceeb45861f9585dd7a97a3e36f85c6', 'Created', 0), +(648, 'en', 'theme LayerSlider', '35e0c8c0b180c95d4e122e55ed62cc64', 'Modified', 0), +(649, 'en', 'theme LayerSlider', '6d0a578ca2f2c0e792fc923002fccbe3', 'ago', 0), +(650, 'en', 'theme LayerSlider', 'ab0f1e6762d93ab7a1a9da8edfdaf571', 'Duplicate this slider', 0), +(651, 'en', 'theme LayerSlider', '215c43748a8d8ac5ec3a1f48ba733cc1', 'Remove this slider', 0), +(652, 'en', 'theme LayerSlider', '7384a1149c9fa9a57fcd4cd0f61ef5c0', 'Restore removed slider', 0), +(653, 'en', 'theme LayerSlider', '79aa192d7a66ebb69375749019cfba0f', 'You haven''t created any a slider yet. Click on the "Add New" button above to add one.', 0), +(654, 'en', 'theme LayerSlider', 'bae256facba990a5c62da8f4f881a6e4', 'Choose an action', 0), +(655, 'en', 'theme LayerSlider', 'aa904c752a2f108aad5ab599a8b74cdb', 'Remove selected', 0), +(656, 'en', 'theme LayerSlider', '8fb41b3911b7f22a4e1d2dbfd77bc403', 'Delete permanently', 0), +(657, 'en', 'theme LayerSlider', 'c48b528b62b7eabd5d0a56b778774649', 'Restore removed', 0), +(658, 'en', 'theme LayerSlider', '1180598c29a510b6c7299bd5541d6820', 'Merge selected as new', 0), +(659, 'en', 'theme LayerSlider', '691d502cfd0e0626cd3b058e5682ad1c', 'items', 0), +(660, 'en', 'theme LayerSlider', '7e137602d2d0e02a3cc718302d8c9d4c', 'Import & Export Sliders', 0), +(661, 'en', 'theme LayerSlider', '36059bdebd0ce2c3e46d3949082a0ccd', 'Choose a LayerSlider export file downloaded previously to import your sliders. To import from older versions, you need to create a file and paste the export code into it. Only the file contents matters, its name does not.', 0), +(662, 'en', 'theme LayerSlider', 'd1673e2c8908f8939c5d0ba949ebc80b', 'Import Sliders', 0), +(663, 'en', 'theme LayerSlider', '72d6d7a1885885bb55a565fd1070581a', 'Import', 0), +(664, 'en', 'theme LayerSlider', '254144213776a4bd2911b163bf83aea8', 'Downloads an export file that contains your selected sliders to import on your new site.', 0), +(665, 'en', 'theme LayerSlider', '3e2902377ac9d3be2814c939f168f443', 'Export Sliders', 0), +(666, 'en', 'theme LayerSlider', '30509b8cf9c7d30ee345af765696eb83', 'All Sliders', 0), +(667, 'en', 'theme LayerSlider', '0095a9fa74d1713e43e370a7d7846224', 'Export', 0), +(668, 'en', 'theme LayerSlider', '13aa1da20dddf9b3a1583867a42015bb', 'Allow LayerSlider access to users with ...', 0), +(669, 'en', 'theme LayerSlider', 'bbbabdbe1b262f75d99d62880b953be1', 'Role', 0), +(670, 'en', 'theme LayerSlider', 'dbf36ff3e3827639223983ee8ac47b42', 'Super Admin', 0), +(671, 'en', 'theme LayerSlider', 'e3afed0047b08059d0fada10f400c1e5', 'Admin', 0), +(672, 'en', 'theme LayerSlider', '344a7f427fb765610ef96eb7bce95257', 'Editor', 0), +(673, 'en', 'theme LayerSlider', 'a517747c3d12f99244ae598910d979c5', 'Author', 0), +(674, 'en', 'theme LayerSlider', '23d21ad4dea7aadf907e5e601b1905e6', 'Contributor', 0), +(675, 'en', 'theme LayerSlider', '90589c47f06eb971d548591f23c285af', 'Custom', 0), +(676, 'en', 'theme LayerSlider', '06933067aafd48425d67bcb01bba5cb6', 'Update', 0), +(677, 'en', 'theme LayerSlider', 'b42ea29bb7374684b987592e3954facb', 'If you want to give access for other users than admins to this page, you can specify a custom capability. You can find all the available capabilities on', 0), +(678, 'en', 'theme LayerSlider', '8334797b9b3383d4f48d98178b8845ea', 'this page', 0), +(679, 'en', 'theme LayerSlider', 'fa97f6975c9b94a252d204cd22159ff4', 'Capability', 0), +(680, 'en', 'theme LayerSlider', 'fa04668abaf7672483b0f11e5fb20322', 'Auto-updates', 0), +(681, 'en', 'theme LayerSlider', '8ba76cdbcf338ed74c2393705cc1fd0e', 'Purchase code:', 0), +(682, 'en', 'theme LayerSlider', '7a6ce3171c34467c30b5e2afdc939aec', 'To receive auto-updates, you need to enter your item purchase code. You can find it on your CodeCanyon downloads page, just click on the Download button and choose the "Licence Certificate" option. This will download a text file that contains your purchase code.', 0), +(683, 'en', 'theme LayerSlider', 'e81739efb7d4d7abf79f3c5e729eadff', 'Release channel:', 0), +(684, 'en', 'theme LayerSlider', 'fa3aff3c185c6dc7754235f397c2099a', 'Stable', 0), +(685, 'en', 'theme LayerSlider', 'b7393e5c18d1eb82a9696356b64dc374', 'Although pre-release versions should be fine, they might contain unknown issues, and are not recommended for sites in production.', 0), +(686, 'en', 'theme LayerSlider', '0b87d66b88c72957dfea8c9605016442', 'Beta', 0), +(687, 'en', 'theme LayerSlider', 'b6d2ccd5ed9058eb0045861db78f5bbd', 'Search for updates', 0), +(688, 'en', 'theme LayerSlider', 'fba8a6e47a52d6bb244fe74ad9ca9100', 'Troubleshooting & Advanced Settings', 0), +(689, 'en', 'theme LayerSlider', 'bb551493fe34a59db5f696ff0a101748', 'Don''t change these settings without experience. LayerSlider will let you know when it encounters a problem.', 0), +(690, 'en', 'theme LayerSlider', 'a651afe6b7c4e9736c6060c0a9bdff7b', 'Use Google CDN version of jQuery', 0), +(691, 'en', 'theme LayerSlider', '9b640f54266e0f06af21a58305bff97b', 'This option will likely solve "Old jQuery" issues.', 0), +(692, 'en', 'theme LayerSlider', 'cf7882362955d05ba30f47a9b2ecd87f', 'Include scripts in the footer', 0), +(693, 'en', 'theme LayerSlider', 'd40cfc30d530c918565d3b83e120ac54', 'Including resources in the footer could decrease load times, and solve other type of issues, but your theme might not support this method.', 0), +(694, 'en', 'theme LayerSlider', 'f0f31cfc539cca94802579658120411e', 'Conditional script loading', 0), +(695, 'en', 'theme LayerSlider', '306338bfe6af3fbeb976ca86697e9a4e', 'Increase your site''s performance by loading resources only when needed. Outdated themes might not support this method.', 0), +(696, 'en', 'theme LayerSlider', 'c78fdb73b579e80f8f9b9225d30d38e8', 'Concatenate output', 0), +(697, 'en', 'theme LayerSlider', '024209065cd41094cceb544d7be57a58', 'Concatenating the plugin''s output could solve issues caused by custom filters your theme might use.', 0), +(698, 'en', 'theme LayerSlider', '87451cee3c566346ffdd3e6986eff98e', 'Put JS includes to body', 0), +(699, 'en', 'theme LayerSlider', 'db9a679ec920a059193e2bf618bdb2ca', 'This is the most common workaround for jQuery related issues, and is recommended when you experience problems with jQuery.', 0), +(700, 'en', 'theme LayerSlider', '6e412fe282e23c5df206ad1afb5f54b8', 'Load Google Fonts', 0), +(701, 'en', 'theme LayerSlider', 'c7117c7aa6b08570afd0c5d8355d9d4c', 'Load only on admin interface', 0), +(702, 'en', 'theme LayerSlider', '0a2ed1717cddfc0298ac96e2d27386af', 'You didn''t add any Google font to your library yet.', 0), +(703, 'en', 'theme LayerSlider', '36aa22cd92418be5a67a8c3e24e57698', 'Add font:', 0), +(704, 'en', 'theme LayerSlider', '13348442cc6a27032d2b4aa28b75a5d3', 'Search', 0), +(705, 'en', 'theme LayerSlider', 'd19cf0d535703b7b0d80e769db51552e', 'Choose a font family', 0), +(706, 'en', 'theme LayerSlider', '14f5ba40eb53f0346c0e6fd04e6eb3ca', 'Add font', 0), +(707, 'en', 'theme LayerSlider', '13db4b7fae7bf89070e81dbffbdeff8e', 'Back to results', 0), +(708, 'en', 'theme LayerSlider', '341cb9a14af1362b06c6e2f349a2766d', 'LayerSlider News', 0), +(709, 'en', 'theme LayerSlider', 'f1117307e696cf5dc323c4f226d84e45', 'Filter:', 0), +(710, 'en', 'theme LayerSlider', 'b1c94ca2fbc3e78fc30069c8d0f01680', 'All', 0), +(711, 'en', 'theme LayerSlider', '2b59bbfc9d431d23f4564d01b0182808', 'Announcements', 0), +(712, 'en', 'theme LayerSlider', 'e42ba0124128cfc16ca594b21a1cb28b', 'Release log', 0), +(713, 'en', 'theme LayerSlider', '689ae6a2ca6d2fe0dc938587902954cc', 'Beta versions', 0), +(714, 'en', 'theme LayerSlider', 'e6e47f4a2f1267328d19ec8cab5bf632', '>You have version', 0), +(715, 'en', 'theme LayerSlider', '73329564760013a7824ff9d5d1af91ff', 'installed', 0), +(716, 'en', 'theme LayerSlider', '5528a603afd68543e1fe5fc5396caa66', 'The documentation is here', 0), +(717, 'en', 'theme LayerSlider', '128b8f515d2bc4ca7eb9d8e8a651de2d', 'This is a WordPress contextual help menu, we use it to give you fast access to our documentation. Please keep in mind that because this menu is contextual, it only shows the relevant information to the page that you are currently viewing. So if you search something, you should visit the corresponding page first and then open this help menu.', 0), +(718, 'en', 'theme LayerSlider', 'bb41cc3b748ecb06d3489c3fde963f1e', 'LayerSlider Custom Styles Editor', 0), +(719, 'en', 'theme LayerSlider', '3221dd46ca902e2288fe941edaa94f5c', 'Contents of your custom CSS file', 0), +(720, 'en', 'theme LayerSlider', '13d4a0d93727a84e8e9271f2442f697e', '/* You can type here any CSS code that will be loaded both on your admin and front-end pages.', 0), +(721, 'en', 'theme LayerSlider', '1b7e046946809d725c605ee160f78982', 'Let us help you by giving a few exmaple CSS classes: */', 0), +(722, 'en', 'theme LayerSlider', '5b7d295379b4e18cc9daed7da70d3ad3', 'You need to make your uploads folder writable before you can save your changes. See the Codex for more information.', 0), +(723, 'en', 'theme LayerSlider', '72b72fdec899acd865a4864a1b7c15cb', 'Using bad CSS code could break the appearance of your site or your sliders. Changes cannot be reverted after saving.', 0), +(724, 'en', 'theme LayerSlider', '805c0e5da243c8dbc56589e3a85133c9', 'Basic properties', 0), +(725, 'en', 'theme LayerSlider', '6f6a0e7f7e27421949a5909a9290c505', 'Transition name', 0), +(726, 'en', 'theme LayerSlider', '66a8ede14719267a54fd2c605f4dcf91', 'The name of your custom transition. When you will edit a slider, it will appear with this name, so you can easily identify the individual transitions.', 0), +(727, 'en', 'theme LayerSlider', '530f488f7a9800411efc6926ab189708', 'Rows', 0), +(728, 'en', 'theme LayerSlider', 'bd4696371c2728f2aec546e804a0b672', ' or , If you specify a value greater than 1, LayerSlider will cut your slide into tiles. You can specify here how many rows of your transition should have. If you specify two numbers separated with a comma, LayerSlider will use that as a range and pick a random number between your values.', 0), +(729, 'en', 'theme LayerSlider', 'd27561f45c58f407b3fe76b63b1ec28a', 'Cols', 0), +(730, 'en', 'theme LayerSlider', 'c8a8c67ea41621a5b120c2dc0525362d', ' or , If you specify a value greater than 1, LayerSlider will cut your slide into tiles. You can specify here how many columns of your transition should have. If you specify two numbers separated with a comma, LayerSlider will use that as a range and pick a random number between your values.', 0), +(731, 'en', 'theme LayerSlider', 'a67f2c9d056f29b94521c17b838b9756', 'Tiles', 0), +(732, 'en', 'theme LayerSlider', 'd4f0208d1a34d7a381fc8abec990105b', 'You can apply a delay between the tiles and postpone their animation relative to each other.', 0), +(733, 'en', 'theme LayerSlider', '3ff39d3acb327553070a64ef0cb321d5', 'Sequence', 0), +(734, 'en', 'theme LayerSlider', '434cd8b268e79b39af562cc6329d56fb', 'You can control the animation order of the tiles here.', 0), +(735, 'en', 'theme LayerSlider', '67d2f6740a8eaebf4d5c6f79be8da481', 'Forward', 0), +(736, 'en', 'theme LayerSlider', '67f115c1fddc4ce1aeb1c754001585bc', 'Reverse', 0), +(737, 'en', 'theme LayerSlider', '13db785ec723ba5b44f1a1311edc9332', 'Col-forward', 0), +(738, 'en', 'theme LayerSlider', '3898dd1cf4144fda9dfac68e6c3b7c41', 'Col-reverse', 0), +(739, 'en', 'theme LayerSlider', '64663f4646781c9c0110838b905daa23', 'Random', 0), +(740, 'en', 'theme LayerSlider', '675056ad1441b6375b2c5abd48c27ef1', 'Depth', 0), +(741, 'en', 'theme LayerSlider', '5d817c72c320560d9100709c8b6ed4d2', 'The script will try to identify the optimal depth for your rotated objects (tiles). With this option, you can force your objects to have large depth when performing 180 degree (and its multiplies) rotation.', 0), +(742, 'en', 'theme LayerSlider', '4aaea893e82ee53fc4aab0eae485be41', 'Large depth', 0), +(743, 'en', 'theme LayerSlider', '2c15a8c99cd7b15ae468172183c5ea2c', 'Before animation', 0), +(744, 'en', 'theme LayerSlider', '00d23a76e43b46dae9ec7aa9dcbebb32', 'Enabled', 0), +(745, 'en', 'theme LayerSlider', '96534ccc74aa49108eed7813c692cdf9', 'The duration of your animation. This value is in millisecs, so the value 1000 means 1 second.', 0), +(746, 'en', 'theme LayerSlider', '41cea43f8fccd8c330c5671d08a13c87', 'The timing function of the animation, with it you can manipualte the movement of the animated object. Please click on the link next to this select field to open easings.net for more information and real-time examples.', 0), +(747, 'en', 'theme LayerSlider', 'ef61fb324d729c341ea8ab9901e23566', 'Add new', 0), +(748, 'en', 'theme LayerSlider', '2c89ec09f5601e7957e7b35bc906ccc9', 'Scale3D', 0), +(749, 'en', 'theme LayerSlider', 'd6b6b668dbca9d4fe774bb654226ebe3', 'Animation', 0), +(750, 'en', 'theme LayerSlider', '02674a4ef33e11c879283629996c8ff8', 'Direction', 0), +(751, 'en', 'theme LayerSlider', 'e72095f265304799619d85e87c0b4277', 'The direction of rotation.', 0), +(752, 'en', 'theme LayerSlider', '06ce2a25e5d12c166a36f654dbea6012', 'Vertical', 0), +(753, 'en', 'theme LayerSlider', 'c1b5fa03ecdb95d4a45dd1c40b02527f', 'Horizontal', 0), +(754, 'en', 'theme LayerSlider', '4afcb8279b8abb2f7369f50739a0a05e', 'After animation', 0), +(755, 'en', 'theme LayerSlider', 'ee8c1455e7f2bf0c7eb7acaa3eb9a272', 'Transition options', 0), +(756, 'en', 'theme LayerSlider', '1f039c00b19cd5e73d46b874d88b44fd', 'Remove transition', 0), +(757, 'en', 'theme LayerSlider', '1f3b894b65d30b6d1f137f4b4dad7823', 'The duration of the animation. This value is in millisecs, so the value 1000 measn 1 second.', 0), +(758, 'en', 'theme LayerSlider', '639a36a8fd5673fccfa75e572ca859f7', 'The type of the animation, either slide, fade or both (mixed).', 0), +(759, 'en', 'theme LayerSlider', '6160a53ece50ce6d4f5ef4452549835e', 'Slide', 0), +(760, 'en', 'theme LayerSlider', '699b4f79215d191584653efebf156e52', 'Mixed', 0), +(761, 'en', 'theme LayerSlider', '68593d80c10e8292e2f521014a98bd06', 'The direction of the slide or mixed animation if you chose these type in the previous setting.', 0), +(762, 'en', 'theme LayerSlider', 'a4d0d101d6a34bf80ffeee601c3ff84a', 'Top left', 0), +(763, 'en', 'theme LayerSlider', 'd3708546a929dfcf66eaeaba794486eb', 'Top right', 0), +(764, 'en', 'theme LayerSlider', 'b67554192c50f4f6a4c1bd4797f6c3f8', 'Bottom left', 0), +(765, 'en', 'theme LayerSlider', '5968e3c37145f57587afcba727d2b120', 'Bottom right', 0), +(766, 'en', 'theme LayerSlider', '9ebd255ed8317380a778935c957e7410', 'RotateZ', 0), +(767, 'en', 'theme LayerSlider', '9f6c5b4a1602c11c5e399d7c418a29d3', 'LayerSlider Transition Builder', 0), +(768, 'en', 'theme LayerSlider', '669bf0d71a9a3e2b8da6f0d27fde3ee3', '3D transitions', 0), +(769, 'en', 'theme LayerSlider', 'b8ee740b4a2f237e4f026a58bbceede4', 'Choose:', 0), +(770, 'en', 'theme LayerSlider', 'ae70135d465fffba6f1613e92306f206', 'No 3D transitions yet', 0), +(771, 'en', 'theme LayerSlider', '241c026a8fae97bdf358ecfb6afac782', '2D transitions', 0), +(772, 'en', 'theme LayerSlider', '6aeb628a4eaf8e6331a276078e7d371d', 'No 2D transitions yet', 0), +(773, 'en', 'theme LayerSlider', '9a38e939eec88a92fe708ff6f8f7f711', 'You didn''t create any 3D transitions yet', 0), +(774, 'en', 'theme LayerSlider', '941b39bccc446f0a507044a0c088b465', 'To create a new transition, click to the "Add new" button above this text.', 0), +(775, 'en', 'theme LayerSlider', '35dcb0172b56ee2cd40e339f67c9b449', 'You didn''t create any 2D transitions yet', 0), +(776, 'en', 'theme LayerSlider', 'd4ac2c928ad0e5a27080beca050d9c88', 'Before you can save your changes, you need to make writeable your "/wp-content/uploads" folder. See the Codex', 0), +(777, 'en', 'theme LayerSlider', 'ce901e4aa6a6284d1ee7d921ed6a18e8', 'Transition Builder documentation', 0), +(778, 'en', 'theme LayerSlider', 'd1fe77afe96de8a99b15f83247716881', 'To get started with the LayerSlider WP Transition Builder, please read our documentation by clicking on this "Help" menu item.', 0), +(779, 'en', 'theme LayerSlider', 'cd9426568dc72a2fb5c294e3564219e2', 'It looks like your files isn''t writable, so PHP couldn''t make any changes (CHMOD).', 0), +(780, 'en', 'theme LayerSlider', '5868e6bbe4b6cb4e2d7bbaca895b0168', 'Cannot write to file', 0), +(781, 'en', 'theme LayerSlider', 'c60888db3a685e66ede2c6a0cd37fc56', 'It looks like you haven''t selected any skin to edit.', 0), +(782, 'en', 'theme LayerSlider', 'cb4c145d23440a07ba64c8f3f316f2b2', 'No skin selected.', 0), +(783, 'en', 'theme LayerSlider', '801baf1cdd055450ec8fe4370d2ca83c', 'The new version of LayerSlider WP is almost ready!', 0), +(784, 'en', 'theme LayerSlider', 'b5b4409310d914b789b6048063852fb2', 'For a faster and more reliable solution, LayerSlider WP needs to convert your data associated with the plugin. Your sliders and settings will remain still, and it only takes a click on this button.', 0), +(785, 'en', 'theme LayerSlider', '1311f7b2e26d59caca11a5818ad73d30', 'Convert Data', 0), +(786, 'en', 'theme LayerSlider', '6df358e87ab509a76e33254f9e8f161e', 'Transition Builder', 0), +(787, 'en', 'theme LayerSlider', '5f4c5efa6c9ddf9485a4f0f6e1357bcc', 'Custom Styles Editor', 0), +(788, 'en', 'theme LayerSlider', 'e8f87c55559f974859d67cba024a50c2', 'You have version %1$s. Update to version %2$s.', 0), +(789, 'en', 'theme LayerSlider', '94c9fd79d5b6e147d908bbe272f87d1b', 'Update available for LayerSlider WP!', 0), +(790, 'en', 'theme LayerSlider', 'ea3bf63dc3b3bae17c14be2ec01a5f35', 'Review changes & Install', 0), +(791, 'en', 'theme LayerSlider', 'd1084842a701a42a996bcbeaef8b452e', 'Invalid shortcode', 0), +(792, 'en', 'theme LayerSlider', '58f28e7ebd556d5dc7a4e87bbde57ad9', 'Slider not found', 0), +(793, 'en', 'theme LayerSlider', '0c42c154f8dff8e0de8432dc7e09a509', 'Insert a slider with LayerSlider WP Widget', 0), +(794, 'en', 'theme LayerSlider', 'b0508065c9589f4b8a54e71abea11117', 'LayerSlider WP Widget', 0), +(795, 'en', 'theme LayerSlider', '6fef65dd0c56f90475d29561ee18df4b', 'LayerSlider', 0), +(796, 'en', 'theme LayerSlider', '82d4fd8d50e622e3605bba0e7acbf722', 'Choose a slider:', 0), +(797, 'en', 'theme LayerSlider', '1a34d22fb088d183af12e423ca2afd9a', 'You didn''t create any slider yet.', 0), +(798, 'en', 'theme LayerSlider', '51ec9bf4aaeab1b25bb57f9f8d4de557', 'Title:', 0), +(799, 'en', 'WordPress', 'd546ce60a9b14a2dfad190be8f2f7a20', '%s (Invalid)', 0), +(800, 'en', 'WordPress', '423eb9750b4a9d769c685bdcd08c75d1', '%s (Pending)', 0), +(801, 'en', 'WordPress', 'ff687f8e7f19b4b4e6532266cfe0efd7', 'Original: %s', 0), +(802, 'en', 'WordPress', '857c066f26c91053236e97e669536203', 'sub item', 0), +(803, 'en', 'WordPress', '9028c0408c269db2e2b60aa5d7459a53', 'Edit Menu Item', 0), +(804, 'en', 'WordPress', 'e6b391a8d2c4d45902a23a8b6585703d', 'URL', 0), +(805, 'en', 'WordPress', '63d65a6113a15806e30d1afdc42fa067', 'Navigation Label', 0), +(806, 'en', 'WordPress', 'd79162782feef239dca92bdaf1d87485', 'Title Attribute', 0), +(807, 'en', 'WordPress', 'f1d1048bf50329c940952b776aa08d9c', 'Open link in a new window/tab', 0), +(808, 'en', 'WordPress', '4ec819fea50932ecb3be5cd532e5f60a', 'CSS Classes (optional)', 0), +(809, 'en', 'WordPress', '4149573841f89bd22b3970c5c70682d2', 'Link Relationship (XFN)', 0), +(810, 'en', 'WordPress', 'b5a7adde1af5c87d7fd797b6245c2a39', 'Description', 0), +(811, 'en', 'WordPress', '4479a31b5d8287de9a0730ba38db6236', 'The description will be displayed in the menu if the current theme supports it.', 0), +(812, 'en', 'theme fusion-framework', 'b254a73beb60c4c4420a9d8c826afa8b', 'Disable Mega Menu', 0), +(813, 'en', 'theme fusion-framework', 'fc5c3afe73c7c82e9ab08ff0b3154643', 'Full Width Mega Menu Width', 0), +(814, 'en', 'theme fusion-framework', '03d959e709ff7835f42c19e71afd281e', 'Mega Menu Number of Columns', 0), +(815, 'en', 'theme fusion-framework', '06b9281e396db002010bde1de57262eb', 'Auto', 0), +(816, 'en', 'theme fusion-framework', '035f4cf9c1c508c76ba0f981287f3ce2', 'Mega Menu Widget Area', 0), +(817, 'en', 'theme fusion-framework', 'dd45b8e59a8c54710a6cdba027c9e350', 'Select Widget Area', 0), +(818, 'en', 'theme fusion-framework', '35e9cfa14322e1b3a7d13391e53477ac', 'Set Thumbnail', 0), +(819, 'en', 'WordPress', '6bc362dbf494c61ea117fe3c71ca48a5', 'Move', 0), +(820, 'en', 'WordPress', 'a7e72a926e82c36a455a68c7c67c706a', 'Up one', 0), +(821, 'en', 'WordPress', '3a1581d9364c63271f2c8c651f3b174e', 'Down one', 0), +(822, 'en', 'WordPress', '17f06dbd83ff121759e08993ecff7ca0', 'To the top', 0), +(823, 'en', 'WordPress', '1063e38cb53d94d386f21227fcd84717', 'Remove', 0), +(824, 'en', 'WordPress', 'ea4788705e6873b424c65e91c2846b19', 'Cancel', 0), +(825, 'en', 'WordPress', 'f77af7695f71323808f9b6e2795cde86', 'Move up', 0), +(826, 'en', 'WordPress', 'dd9f0c7e1bb3b749bd423e3544b4a8e3', 'Move down', 0), +(827, 'en', 'theme cpt', '0f7b1fc868d5c2e8db69320a208c6c59', 'Did you find this plugin useful? Please support our work with a donation or write an article about this plugin in your blog with a link to our site', 0), +(828, 'en', 'theme cpt', '421a9f51c056ddfcf4a47bc9b1fd70fd', 'Did you know there is available an Advanced version of this plug-in?', 0), +(829, 'en', 'theme cpt', '43340e6cc4e88197d57f8d6d5ea50a46', 'Read more', 0), +(830, 'en', 'theme cpt', 'b7a4099a944f8a8d60bc7fc6409a573c', 'Check our', 0), +(831, 'en', 'theme cpt', '34f736b384f597030e03a5fef28adc32', 'plugin which allow to custom sort categories and custom taxonomies terms', 0), +(832, 'en', 'theme cpt', '7278125be8c9aceaaf5d3f7645b45c5c', 'Settings Saved', 0), +(833, 'en', 'theme cpt', '52f4393e1b52ba63e27310ca92ba098c', 'General Settings', 0), +(834, 'en', 'theme cpt', '0db377921f4ce762c62526131097968f', 'General', 0), +(835, 'en', 'theme cpt', 'a40d0073e59931f0ce11817cf67d5848', 'Minimum Level to use this plugin', 0), +(836, 'en', 'theme cpt', '992c4a5b4628d8ebf671cf460254ee81', 'Subscriber', 0), +(837, 'en', 'theme cpt', '23d21ad4dea7aadf907e5e601b1905e6', 'Contributor', 0), +(838, 'en', 'theme cpt', 'a517747c3d12f99244ae598910d979c5', 'Author', 0), +(839, 'en', 'theme cpt', '344a7f427fb765610ef96eb7bce95257', 'Editor', 0), +(840, 'en', 'theme cpt', '7b7bc2512ee1fedcd76bdc68926d4f7b', 'Administrator', 0), +(841, 'en', 'theme cpt', '4f316fd6a9bbc5a368bff4ff81e2c9b5', 'Auto Sort', 0), +(842, 'en', 'theme cpt', '665c9acb3bec450c589991678d887bdd', 'If checked, the plug-in will automatically update the wp-queries to use the new order (No code update is necessarily).
If you need more order customizations you will need to uncheck this and include ''menu_order'' into your theme queries', 0), +(843, 'en', 'theme cpt', 'd7e215cd600b79a87875c8f08b4b0ae6', 'Show Examples', 0), +(844, 'en', 'theme cpt', '352b59b33167804c60cd18825b688c6d', 'The following PHP code will still return the post in the set-up Order', 0), +(845, 'en', 'theme cpt', '3a2d5fe857d8f9541136a124c2edec6c', 'Or', 0), +(846, 'en', 'theme cpt', 'd4c0554e9250f45f7aaaaa091872ea3b', 'If the Auto Sort is uncheck you will need to use the "orderby" and "order" parameters', 0), +(847, 'en', 'theme cpt', '57320a412a22676b4ed67fc9100b1591', 'Admin Sort', 0), +(848, 'en', 'theme cpt', '56cc4d7e8f35a738ee71d57054ca4d64', 'To affect the admin interface, to see the post types per your new sort, this need to be checked', 0), +(849, 'en', 'theme cpt', '9daf1fb753b42c3cdc8f1d01669cd6d8', 'Save Settings', 0), +(850, 'en', 'theme pto', '453aceb005ceaf54a47da15fee8b2a26', 'Pages', 0), +(851, 'en', 'theme cpt', 'b959b9c7d3b3dfde4e86c3620e4efb06', 'Post Types Order must be configured. Please go to', 0), +(852, 'en', 'theme cpt', '14e32806915825c53e2f56ccc243e8de', 'Settings Page', 0), +(853, 'en', 'theme cpt', '687a85f1693c61ce77be43ab9f09602e', 'make the configuration and save', 0), +(854, 'en', 'theme cpt', '486985d8c22b28e1b2ba21f48a658e40', 'This plugin can''t work without javascript, because it''s use drag and drop and AJAX.', 0), +(855, 'en', 'theme cpt', '3c7d817a141dfe8d7628bbbdf8d22494', 'Items Order Updated', 0), +(856, 'en', 'theme wooslider', 'f7d086ba1963b998b633fac384a344aa', 'FlexSlider', 0), +(857, 'en', 'theme wooslider', 'd77473d88949d5e3b1c8f852f454c941', 'Insert Slideshow', 0), +(858, 'en', 'theme wooslider', '13a3f5d43e49390d1511eeb09f08a781', 'Number of Images', 0), +(859, 'en', 'theme wooslider', 'ceee589862259c3ef1532a351dbe9e21', 'The maximum number of images to display', 0), +(860, 'en', 'theme wooslider', 'bdcdc88f8d445ba3a1de42c1e671152c', 'Use thumbnails for Pagination', 0), +(861, 'en', 'theme wooslider', '7128facd275b624e4cf428eeef992eed', 'Use thumbnails for pagination, instead of "dot" indicators', 0), +(862, 'en', 'theme wooslider', 'e3d842478232d7b8298ec64bd0f9852e', 'Number of Slides', 0), +(863, 'en', 'theme wooslider', 'dff681a9c690cd2b11da804999344ec8', 'The maximum number of slides to display', 0), +(864, 'en', 'theme wooslider', '91bea82b86ee0c9041449383117eaab7', 'Slide Groups', 0), +(865, 'en', 'theme wooslider', 'ad908033999e4d989c03778177c439a8', 'The slide groups from which to display slides', 0), +(866, 'en', 'theme wooslider', 'dd2668a44f3f36d04edbbee6c7a16e28', 'Use thumbnails for pagination, instead of "dot" indicators (uses featured image)', 0), +(867, 'en', 'theme wooslider', '6adf97f83acf6453d4a6a4b1070f3754', 'None', 0), +(868, 'en', 'theme wooslider', 'bbd47109890259c0127154db1af26c75', 'Full', 0); +INSERT INTO `drgrp_icl_strings` (`id`, `language`, `context`, `name`, `value`, `status`) VALUES +(869, 'en', 'theme wooslider', '2bd8ab451a35759c5737128e35c8011a', 'Natural', 0), +(870, 'en', 'theme wooslider', '10f549b6b80b29ba303205bbf3236886', 'Number of Posts', 0), +(871, 'en', 'theme wooslider', 'bbdec298c8d96068a1eaae85350c4304', 'The maximum number of posts to display', 0), +(872, 'en', 'theme wooslider', '4a534624b95983992aa7e168aa5664a4', 'Link the post title to it''s post', 0), +(873, 'en', 'theme wooslider', '9b405d7037264bf4b1af1525f2db982b', 'Link the post title to it''s single post screen', 0), +(874, 'en', 'theme wooslider', '1248f730f28e9dd4a6b747ff6b1f2972', 'Display the post''s excerpt', 0), +(875, 'en', 'theme wooslider', '20d2163d066a91c69171d6c27e2041e9', 'Display the post''s excerpt on each slide', 0), +(876, 'en', 'theme wooslider', 'ebd9bec4d70abc789d439c1f136b0538', 'Layout', 0), +(877, 'en', 'theme wooslider', '4bb3830c2d6c8b756ebf7971d5859734', 'The layout to use when displaying posts', 0), +(878, 'en', 'theme wooslider', '6b551379c3c0b59326abdaf3b4395bd3', 'Overlay', 0), +(879, 'en', 'theme wooslider', '211c69e39f4384aa29ada42693366df5', 'The type of overlay to use when displaying the post text', 0), +(880, 'en', 'theme wooslider', 'af1b98adf7f686b84cd0b443e022b7a0', 'Categories', 0), +(881, 'en', 'theme wooslider', '78f098a10331cd94defd0f7a522eed70', 'The categories from which to display posts', 0), +(882, 'en', 'theme wooslider', '189f63f277cd73395561651753563065', 'Tags', 0), +(883, 'en', 'theme wooslider', '0ba3ab5eb1e7ecda4d8ce35039a3545f', 'The tags from which to display posts', 0), +(884, 'en', 'theme wooslider', '9ffc3ccc968a96d902af963c6d7b4e97', 'Advanced Settings', 0), +(885, 'en', 'theme wooslider', '33d83ae8f0169a75cb20ba37663a785b', 'Optionally override the default slideshow settings using the fields below.', 0), +(886, 'en', 'theme wooslider', 'd6120e1776877fa886f7a0da050cfe34', 'Slideshow Type', 0), +(887, 'en', 'theme wooslider', '1d85b994c8bb5f23e63bce0ff177bd3e', 'The type of slideshow to insert', 0), +(888, 'en', 'theme wooslider', '79dbc7dfda4f9bc74fcf7784df4c6449', 'Slideshow Theme', 0), +(889, 'en', 'theme wooslider', '81e6329745fd005ae96439bc12c4d075', 'The desired slideshow theme', 0), +(890, 'en', 'theme wooslider', 'f59b55b7e92ef39d7769f972c12ea8a0', 'Slideshow ID', 0), +(891, 'en', 'theme wooslider', '8660d21eeb901cd31fdc780195acc667', 'Give this slideshow a specific ID (optional)', 0), +(892, 'en', 'theme wooslider', 'd8e87c0927539672f54462c837be0b7f', 'Sync', 0), +(893, 'en', 'theme wooslider', '2d9b37cb3c37fae7954bdc41119f044d', 'Slideshow ID: Mirror the actions performed on this slideshow with another slideshow. Use with care.', 0), +(894, 'en', 'theme wooslider', 'dd1f775e443ff3b9a89270713580a51b', 'Previous', 0), +(895, 'en', 'theme wooslider', '10ac3d04253ef7e1ddc73e6091c0cd55', 'Next', 0), +(896, 'en', 'theme wooslider', 'de3c731be5633838089a07179d301d7b', 'Play', 0), +(897, 'en', 'theme wooslider', '105b296a83f9c105355403f3332af50f', 'Pause', 0), +(898, 'en', 'theme wooslider', '0d04897df1c339a5187313158ada9b89', 'Search Slide Groups', 0), +(899, 'en', 'theme wooslider', 'a030f4627f574937477be4817a48175e', 'All Slide Groups', 0), +(900, 'en', 'theme wooslider', '8c7ae50dd3783f1566147c42ab1118c2', 'Parent Slide Group', 0), +(901, 'en', 'theme wooslider', '8b07297651c178f901eff828bcca5ebd', 'Parent Slide Group:', 0), +(902, 'en', 'theme wooslider', 'd85bcd04961193642b4c23ae87ba753e', 'Edit Slide Group', 0), +(903, 'en', 'theme wooslider', 'babb2b1d961be33d90d99b59b7293bbc', 'Update Slide Group', 0), +(904, 'en', 'theme wooslider', '1e762abbc622e6cc3cfbedf3cb67b201', 'Add New Slide Group', 0), +(905, 'en', 'theme wooslider', 'cc826f3e633d6efb5738c33042ad3e3e', 'New Slide Group Name', 0), +(906, 'en', 'theme wooslider', '6160a53ece50ce6d4f5ef4452549835e', 'Slide', 0), +(907, 'en', 'theme wooslider', 'a8d90ed8f17c347c8d46e0ef22c85ecb', 'Slides', 0), +(908, 'en', 'theme wooslider', '12acc7f86f045429f568ed130800c2df', 'Add New %s', 0), +(909, 'en', 'theme wooslider', '7dfa8bf72c98a7c1927d689cdbc49ce1', 'Edit %s', 0), +(910, 'en', 'theme wooslider', '460c3ad22193ba9081056eb1dc9af116', 'New %s', 0), +(911, 'en', 'theme wooslider', '84d1595b1584d106bf0310b6905e7c3c', 'All %s', 0), +(912, 'en', 'theme wooslider', '4070217917db2a77aa6643b2ce47ceed', 'View %s', 0), +(913, 'en', 'theme wooslider', '9c261c62a7a3a3b68ebc14f22045d762', 'Search %s', 0), +(914, 'en', 'theme wooslider', '8ba02f88117d06d100446b94e0931b49', 'No %s found', 0), +(915, 'en', 'theme wooslider', '037781278104a3d4f3cface95e3afcf3', 'No %s found in Trash', 0), +(916, 'en', 'WordPress', '12eb03f24305d90af4a0e80dc75fa51c', '%s updated.', 0), +(917, 'en', 'theme wooslider', '039675c3e3a29a035723dac4a2e40761', 'Custom field updated.', 0), +(918, 'en', 'theme wooslider', '37725a1c8a05e443b8088a3dcd29ae96', 'Custom field deleted.', 0), +(919, 'en', 'theme wooslider', '12eb03f24305d90af4a0e80dc75fa51c', '%s updated.', 0), +(920, 'en', 'theme wooslider', 'b92b2d51834774283a03a2498cc0c6c8', '%2$s restored to revision from %1$s', 0), +(921, 'en', 'WordPress', 'da38061e9187fd42dc7f074e77d99dba', '%2$s published.', 0), +(922, 'en', 'theme wooslider', 'f7dca9d45127aeaabb1abd1a970608f3', '%s saved.', 0), +(923, 'en', 'theme wooslider', '09775be8670e85c1a9448aa3903463aa', '%2$s submitted.', 0), +(924, 'en', 'theme wooslider', 'aa4bfa9680ae713eb85a1a874f77e67d', '%s scheduled for: %1$s.', 0), +(925, 'en', 'WordPress', '10b77c2da674b82c24eed3a0ea6fc642', ' M j, Y @ G:i', 0), +(926, 'en', 'theme wooslider', '95cb554f8b34a929dc5b2497947a73ec', '%s draft updated.', 0), +(927, 'en', 'theme wooslider', '57c2dd6d3423b4d1f498517849cc959a', 'Enter a title for this slide here', 0), +(928, 'en', 'theme wooslider', '8ac8e707e7992e852f85c6201088392d', 'No Slide Groups Specified', 0), +(929, 'en', 'theme wooslider', 'taxonomy general name: Slide Groups', 'Slide Groups', 0), +(930, 'en', 'theme wooslider', 'taxonomy singular name: Slide Group', 'Slide Group', 0), +(931, 'en', 'theme wooslider', 'post type general name: %s', '%s', 0), +(932, 'en', 'theme wooslider', 'post type singular name: %s', '%s', 0), +(933, 'en', 'theme wooslider', 'b1c94ca2fbc3e78fc30069c8d0f01680', 'All', 0), +(934, 'en', 'theme wooslider', '4c8d168032c76a7d408d76366c5260b6', '%s is a required field', 0), +(935, 'en', 'theme wooslider', '61a07fb96ff0b67fac39b5d27306ed9c', '%s updated', 0), +(936, 'en', 'theme wooslider', '99d419ee85f84a12967dfdff554d59d7', 'Override init_sections() in your class.', 0), +(937, 'en', 'theme wooslider', 'dc5a258bfef5ac35965c912f404aa5a3', 'Override init_fields() in your class.', 0), +(938, 'en', 'theme wooslider', '52f4393e1b52ba63e27310ca92ba098c', 'General Settings', 0), +(939, 'en', 'theme wooslider', '11478e89e316856c00e0cb940f1323d1', 'Settings to apply to all slideshows, unless overridden.', 0), +(940, 'en', 'theme wooslider', 'ffd08596b22e1c77227b1844367049f4', 'Control Settings', 0), +(941, 'en', 'theme wooslider', '2e9494006ebb405ac14318eb49dc8cf3', 'Customise the ways in which slideshows can be controlled.', 0), +(942, 'en', 'theme wooslider', '959e0239647ba75f5e391d1ab213ac81', 'Button Settings', 0), +(943, 'en', 'theme wooslider', '919a902ee0885657a0a6f23c56d97c7b', 'Customise the texts of the various slideshow buttons.', 0), +(944, 'en', 'theme wooslider', 'd6b6b668dbca9d4fe774bb654226ebe3', 'Animation', 0), +(945, 'en', 'theme wooslider', '08ef93f5a86f58d4ba400debce336291', 'The slider animation', 0), +(946, 'en', 'theme wooslider', '04e0385c10aefee8e4681617d2f3ef40', 'Fade', 0), +(947, 'en', 'theme wooslider', '8f5c3e23cb4593a34d0809edc9ff6319', 'Slide Direction', 0), +(948, 'en', 'theme wooslider', 'c6fb4ebe5e0513b2487ee5d15df9e442', 'The direction to slide (if using the "Slide" animation)', 0), +(949, 'en', 'theme wooslider', 'c1b5fa03ecdb95d4a45dd1c40b02527f', 'Horizontal', 0), +(950, 'en', 'theme wooslider', '06ce2a25e5d12c166a36f654dbea6012', 'Vertical', 0), +(951, 'en', 'theme wooslider', 'a62a4c4cb428db8bfc9392b474057f69', 'Slideshow Speed', 0), +(952, 'en', 'theme wooslider', '2ccb2a929c0c9d20c7241dc9d4553b1e', 'Set the delay between each slide animation (in seconds)', 0), +(953, 'en', 'theme wooslider', '0dc52fcd265149dd09a6d1f5b0e5a3b5', 'Animation Speed', 0), +(954, 'en', 'theme wooslider', '2c94b2e0047e3763f1f37df3a48c2f10', 'Set the duration of each slide animation (in seconds)', 0), +(955, 'en', 'theme wooslider', 'eaf7a0dde235906591837abae7679800', '"Previous" Link Text', 0), +(956, 'en', 'theme wooslider', '20ddcfa8f6722682c25f19eab7b976c8', 'The text to display on the "Previous" button.', 0), +(957, 'en', 'theme wooslider', '44f079a2e06cc30c714bf3d822cf4139', '"Next" Link Text', 0), +(958, 'en', 'theme wooslider', '7bedbf02b5313044f4a22b67e2a34426', 'The text to display on the "Next" button.', 0), +(959, 'en', 'theme wooslider', 'd8dbe5b300f3bcc019ec91c6bcbd3a76', '"Play" Button Text', 0), +(960, 'en', 'theme wooslider', '9fea10cc32907ba622029c2eaa90d38c', 'The text to display on the "Play" button.', 0), +(961, 'en', 'theme wooslider', '1c2baeaa48294e7e227180fb5c18de16', '"Pause" Button Text', 0), +(962, 'en', 'theme wooslider', 'e1626398449b5a50949b1b6ac99881ab', 'The text to display on the "Pause" button.', 0), +(963, 'en', 'theme wooslider', '6525a1f9f81c674afc72145edff29c06', 'Animate the slideshows automatically', 0), +(964, 'en', 'theme wooslider', 'e27a4f71d25667b2221788b4421c21fc', 'Adjust the height of the slideshow to the height of the current slide', 0), +(965, 'en', 'theme wooslider', 'f1455620e780926b7558579230b123cc', 'Display the "Previous/Next" navigation', 0), +(966, 'en', 'theme wooslider', 'ad23d95b5d2465ea2f79d0eb0f007a4b', 'Display the slideshow pagination', 0), +(967, 'en', 'theme wooslider', '0b4b3918a295b01a3b3f53778986f704', 'Enable keyboard navigation', 0), +(968, 'en', 'theme wooslider', '96a35cc6dd40602495eec67a775028f5', 'Enable the mousewheel navigation', 0), +(969, 'en', 'theme wooslider', 'c495ea0e290e20171ff61eb2ce2e4e84', 'Enable the touch swipe navigation on touch-screen devices', 0), +(970, 'en', 'theme wooslider', '8e99f857d421d961004dd56b75e5e6a7', 'Enable the "Play/Pause" event', 0), +(971, 'en', 'theme wooslider', '437d13e3965911b8b8bc7434257ebff0', 'Randomize the order of slides in slideshows', 0), +(972, 'en', 'theme wooslider', 'b308ea36ba521ade7bd9f4670c97a76c', 'Loop the slideshow animations', 0), +(973, 'en', 'theme wooslider', '8519ee07510e22994c8afa03f5de50b2', 'Pause the slideshow autoplay when using the pagination or "Previous/Next" navigation', 0), +(974, 'en', 'theme wooslider', '7fd7732b8b6ae8b8f830a4eed8d6d798', 'Pause the slideshow autoplay when hovering over a slide', 0), +(975, 'en', 'theme wooslider', '3b878279a04dc47d60932cb294d96259', 'Overview', 0), +(976, 'en', 'theme wooslider', 'fecc81d838eb17014ef0c8ab8a5661f9', 'This screen contains all the default settings for your slideshows created by WooSlider (animation duration, speeds, display of slideshow controls, etc). Anything set here will apply to all WooSlider slideshows, unless overridden by a slideshow.', 0), +(977, 'en', 'theme wooslider', '0476c0443028bf36e6c5ffdf8cbcbac1', 'The default animation to use for your slideshows ("slide" or "fade").', 0), +(978, 'en', 'theme wooslider', '0c6ae7a5dfaf19d7090a2dfbf7cb4285', 'Slide the slideshows either vertically or horizontally (works only with the "slide" animation).', 0), +(979, 'en', 'theme wooslider', 'f800b81994ca31a72f713bc3b8dae3c8', 'NOTE: When sliding vertically, all slides need to have the same height.', 0), +(980, 'en', 'theme wooslider', '118ebbf615123def2161f6960a1c7f6f', 'The delay between each slide animation (in seconds).', 0), +(981, 'en', 'theme wooslider', 'd842896924aba5dbedc932d8a46ef6e6', 'The duration of each slide animation (in seconds).', 0), +(982, 'en', 'theme wooslider', '23570d3164704227cd408e3e1f75244d', 'Whether or not to automatically animate between the slides (the alternative is to slide only when using the controls).', 0), +(983, 'en', 'theme wooslider', '41a455d3c494f38a20f9d6dc8927f157', 'Alternatively, the slideshow will take the height from it''s tallest slide.', 0), +(984, 'en', 'theme wooslider', 'c94819faa1c9b04b685000ce351cae32', 'Show/hide the "Previous" and "Next" button controls.', 0), +(985, 'en', 'theme wooslider', '3f42623ca2778432e4c85d14998dbf89', 'Show/hide the pagination bar below the slideshow.', 0), +(986, 'en', 'theme wooslider', '3be27d79d292ec39d983d0726b44588b', 'Enable navigation of this slideshow via the "left" and "right" arrow keys on the viewer''s computer keyboard.', 0), +(987, 'en', 'theme wooslider', 'a58cd6391dac4e3ec5ad5534d1b537bd', 'Enable navigation of this slideshow via the viewer''s computer mousewheel.', 0), +(988, 'en', 'theme wooslider', 'c930d0ad4ef03d204f2ebe724a006dac', 'Show/hide the "Play/Pause" button below the slideshow for pausing and resuming the automated slideshow.', 0), +(989, 'en', 'theme wooslider', '768b0c2998dd16b37056deee8b420c77', 'Display the slides in the slideshow in a random order.', 0), +(990, 'en', 'theme wooslider', '95152a5b1bc8c878012c83f7c0c7351b', 'When arriving at the end of the slideshow, carry on sliding from the first slide, indefinitely.', 0), +(991, 'en', 'theme wooslider', '81cea8735f796698b9b308d5fdb7da18', 'Pause the slideshow automation when the viewer decides to navigate using the manual controls.', 0), +(992, 'en', 'theme wooslider', '042a4c7b20b789d0ab0191cc5e69a116', 'Pause the slideshow automation when the viewer hovers over the slideshow.', 0), +(993, 'en', 'theme wooslider', 'aa398308183cdf1de5955c8af4205d2d', 'The text for the "Previous" button.', 0), +(994, 'en', 'theme wooslider', 'bf18b1f3a80e8e7efa88cc7ee5bfc0a6', 'The text for the "Next" button.', 0), +(995, 'en', 'theme wooslider', 'd22fafaa0c74a6eebcf51825853a95d9', 'The text for the "Play" button.', 0), +(996, 'en', 'theme wooslider', 'fb8276253903262b754902725cf65fcf', 'The text for the "Pause" button.', 0), +(997, 'en', 'theme wooslider', '464d5d037322535a4c893493d728183f', 'This screen provides access to all of your posts. You can customize the display of this screen to suit your workflow.', 0), +(998, 'en', 'theme wooslider', '926bd1106f0cb4ea35312a8ce25f5760', 'Screen Content', 0), +(999, 'en', 'theme wooslider', 'a7898991633018a414651177ed3e24ae', 'You can customize the display of this screen''s contents in a number of ways:', 0), +(1000, 'en', 'theme wooslider', 'b988e65082d484b3f5ba487d8a5b9aa7', 'You can hide/display columns based on your needs and decide how many slides to list per screen using the Screen Options tab.', 0), +(1001, 'en', 'theme wooslider', '668372eaf93218f53a548a965ca7a0c1', 'You can filter the list of slides by status using the text links in the upper left to show All, Published, Draft, or Trashed slides. The default view is to show all slides.', 0), +(1002, 'en', 'theme wooslider', 'dcc37ac1214ad0a07017f67b977be2e0', 'You can view slides in a simple title list or with an excerpt. Choose the view you prefer by clicking on the icons at the top of the list on the right.', 0), +(1003, 'en', 'theme wooslider', '19b43b242008d1b5a7ed78740be9bde0', 'You can refine the list to show only slides from a specific month by using the dropdown menus above the slides list. Click the Filter button after making your selection. You also can refine the list by clicking on the slide groups in the slides list.', 0), +(1004, 'en', 'theme wooslider', '0f05ceec0844c366727708a4f37bc8d4', 'Available Actions', 0), +(1005, 'en', 'theme wooslider', '324a8e205fd6e1ed56142378c52931a8', 'Hovering over a row in the posts list will display action links that allow you to manage your post. You can perform the following actions:', 0), +(1006, 'en', 'theme wooslider', '7dce122004969d56ae2e0245cb754d35', 'Edit', 0), +(1007, 'en', 'theme wooslider', '2d89f5569cdb2ee76a4ae6975d47934c', 'takes you to the editing screen for that slide. You can also reach that screen by clicking on the slide title.', 0), +(1008, 'en', 'theme wooslider', '73f79dd90cb67b7438919d31aef50a3f', 'Quick Edit', 0), +(1009, 'en', 'theme wooslider', '092af2ac7300356fd06853b0a3dc5510', 'provides inline access to the metadata of your slide, allowing you to update slide details without leaving this screen.', 0), +(1010, 'en', 'theme wooslider', 'a7e253cd8dd95da3e20daf45519a8dc2', 'Trash', 0), +(1011, 'en', 'theme wooslider', '4d1044dce80363a35e44110007d1722f', 'removes your slide from this list and places it in the trash, from which you can permanently delete it.', 0), +(1012, 'en', 'theme wooslider', '31fde7b05ac8952dacf4af8a704074ec', 'Preview', 0), +(1013, 'en', 'theme wooslider', '80ee32ad633af3f837607b66e26b7dad', 'will show you what your draft slide will look like if you publish it. View will take you to your live site to view the slide. Which link is available depends on your slide''s status.', 0), +(1014, 'en', 'theme wooslider', 'bfab8bcc21a91d9a7e346bbe1143c3ea', 'Bulk Actions', 0), +(1015, 'en', 'theme wooslider', '4bea0a0c26d70e95434a988c0db35ed1', 'You can also edit or move multiple slides to the trash at once. Select the slides you want to act on using the checkboxes, then select the action you want to take from the Bulk Actions menu and click Apply.', 0), +(1016, 'en', 'theme wooslider', '5a45236c6a4f0928c0feab5d7b5a7f8a', 'When using Bulk Edit, you can change the metadata (slide groups, etc) for all selected slides at once. To remove a slide from the grouping, just click the x next to its name in the Bulk Edit area that appears.', 0), +(1017, 'en', 'theme wooslider', '0b0553e3cc7005252765d21031076e10', 'Customize This Display', 0), +(1018, 'en', 'theme wooslider', '60d9557af5a73dc8fea0af00064f86e7', 'The title field and the big Slide Editing Area are fixed in place, but you can reposition all the other boxes using drag and drop, and can minimize or expand them by clicking the title bar of each box. Use the Screen Options tab to unhide more boxes (Excerpt, Featured Image) or to choose a 1- or 2-column layout for this screen.', 0), +(1019, 'en', 'theme wooslider', '1217f8201a6c59d3f6b12b8a6f0acc9e', 'Title and Content Editor', 0), +(1020, 'en', 'theme wooslider', 'b78a3223503896721cca1303f776159b', 'Title', 0), +(1021, 'en', 'theme wooslider', 'd43e86ae7933896c8db710df1c9835cc', 'Enter a title for your slide.', 0), +(1022, 'en', 'theme wooslider', 'd2f9cc6daad1a88e27e909031211c3a8', 'Content Editor', 0), +(1023, 'en', 'theme wooslider', 'aaf9527fd877849ef60f8127013f553c', 'Enter the text for your slide. There are two modes of editing: Visual and HTML. Choose the mode by clicking on the appropriate tab. Visual mode gives you a WYSIWYG editor. Click the last icon in the row to get a second row of controls. The HTML mode allows you to enter raw HTML along with your slide text. You can insert media files by clicking the icons above the content editor and following the directions. You can go to the distraction-free writing screen via the Fullscreen icon in Visual mode (second to last in the top row) or the Fullscreen button in HTML mode (last in the row). Once there, you can make buttons visible by hovering over the top area. Exit Fullscreen back to the regular content editor. This content area is a blank canvas for each slide. Any content added here will display in the slide.\\t', 0), +(1024, 'en', 'theme wooslider', 'e3e1a04f27fad00132b527f1d3372802', 'Publish Box', 0), +(1025, 'en', 'theme wooslider', '110a4b01beabd53b661a47d4b44bd7a8', 'Publish', 0), +(1026, 'en', 'theme wooslider', '9f6e831a973318fb4f4b4ec0aaa888dd', 'You can set the terms of publishing your slide in the Publish box. For Status, Visibility, and Publish (immediately), click on the Edit link to reveal more options. Visibility includes options for password-protecting a post or making it stay at the front of each slideshow it is in (sticky). Publish (immediately) allows you to set a future or past date and time, so you can schedule a slide to be published in the future or backdate a slide.', 0), +(1027, 'en', 'theme wooslider', 'c9344eb2ff26e96823cc252a90f77de8', 'Featured Image', 0), +(1028, 'en', 'theme wooslider', '91aa3a5ffdb1c3ee8f73d0e439fe4b0c', 'This allows you to associate an image with your slide without inserting it. This is used only if the "thumbnails" pagination setting is enabled. Otherwise, the featured image is not used.', 0), +(1029, 'en', 'theme wooslider', '370bd93a64f8cb3d239e816172487d2f', 'You can use slide groups to define groupings of slides to be displayed in various WooSlider slideshows.', 0), +(1030, 'en', 'theme wooslider', '836675fd5204d2e015e4ba09515f1820', 'Adding Slide Groups', 0), +(1031, 'en', 'theme wooslider', '4e09d2d1a4e8a12d0ca59fbc34f7ee0a', 'When adding a new slide group on this screen, you''ll fill in the following fields:', 0), +(1032, 'en', 'theme wooslider', '49ee3087348e8d44e1feda1917443987', 'Name', 0), +(1033, 'en', 'theme wooslider', '43ab2e43cb438622dc97eff81b7efa46', 'The name is how it appears on your site.', 0), +(1034, 'en', 'theme wooslider', '0c908588520b3ef787bce443fc2b507c', 'Slug', 0), +(1035, 'en', 'theme wooslider', 'f04252c9261bb1345797c07702fa94cd', 'The \\"slug\\" is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens.', 0), +(1036, 'en', 'theme wooslider', 'b5a7adde1af5c87d7fd797b6245c2a39', 'Description', 0), +(1037, 'en', 'theme wooslider', 'accbbac378fc6ab7fa90000f670a43b9', 'The description is not prominent by default; however, some themes may display it (WooSlider doesn''t display this anywhere by default).', 0), +(1038, 'en', 'theme wooslider', '55707b4848b3a26a39057e3af6948b43', 'For more information:', 0), +(1039, 'en', 'theme wooslider', 'ce1984c2b712cfdf24c164661990a5de', 'Support Desk', 0), +(1040, 'en', 'theme wooslider', 'c413cf1ac4e1fb9ef92b05670ba2621b', 'Attached Images', 0), +(1041, 'en', 'theme wooslider', '5dc52ca9ffdc26147075682c92a0a853', 'Posts', 0), +(1042, 'en', 'theme wooslider', 'dc2060107865779ee6d0dc38cf883a76', 'Text Left', 0), +(1043, 'en', 'theme wooslider', '4e9e3763a198043d6c44ccfa79677a58', 'Text Right', 0), +(1044, 'en', 'theme wooslider', 'a51c2b512c3d1e9e51a849baa16f82d2', 'Text Top', 0), +(1045, 'en', 'theme wooslider', '50e2f5582f4adeee9daa3d870cb1caf2', 'Text Bottom', 0), +(1046, 'en', 'theme wooslider', '7a1920d61156abc05a60135aefe8bc67', 'Default', 0), +(1047, 'en', 'theme wooslider', '6a8b4eadd4a14c5176702187c8e66983', 'Slideshow Settings', 0), +(1048, 'en', 'theme wooslider', 'f4f70727dc34561dfde1a3c529b6205c', 'Settings', 0), +(1049, 'en', 'theme wooslider', '3813c26733e4f79d014de1240f0fff9d', 'A slideshow of the images attached to the current page/post', 0), +(1050, 'en', 'theme wooslider', '814a9fdc88926f7d4355f6a41cc1cba3', 'Attached Images Slideshow (FlexSlider)', 0), +(1051, 'en', 'theme wooslider', 'fff0d600f8a0b5e19e88bfb821dd1157', 'Images', 0), +(1052, 'en', 'theme wooslider', 'bc86cc16904dacf9cb4defa5af9dc849', 'A slideshow of the content on your site', 0), +(1053, 'en', 'theme wooslider', '397ddd6dda4e36b9d2ec1ac6fa36d51b', 'Slideshow (FlexSlider)', 0), +(1054, 'en', 'theme wooslider', 'eb54ab8c3f3cefcafad5a67eb6458ae3', 'Title (optional):', 0), +(1055, 'en', 'theme wooslider', '5193d35bb026f9b7c270aa841c6f476c', 'Slideshow Theme:', 0), +(1056, 'en', 'theme wooslider', 'e3ef79a4befcbd80175a3bbb679e3ecb', 'Customise Advanced Settings', 0), +(1057, 'en', 'theme wooslider', 'f7b8a592e8257a0f5a02dbb7c474dc1b', 'Save the widget settings with this checkbox checked to customise slideshow settings.', 0), +(1058, 'en', 'theme wooslider', '641b311ce774adf0c710307565642972', 'A slideshow of posts on your site', 0), +(1059, 'en', 'theme wooslider', 'e3d2298225d1023e12dd7a5d21cbfbbd', 'Posts Slideshow (FlexSlider)', 0), +(1060, 'en', 'theme wooslider', '86c0f2f8f63e520f0242015de3a3ec3f', 'A slideshow of slides on your site', 0), +(1061, 'en', 'theme wooslider', 'df1a74f4d9cf3d5e332104b97f46d68e', 'Slides Slideshow (Flexslider)', 0), +(1062, 'en', 'theme Avada', '5862ba6b9399ea36ab7d486f299754c8', '%1$s at %2$s', 1), +(1063, 'en', 'theme Avada', '787ee0b3d8dcf131da613bade1ef7873', ' - Edit', 1), +(1064, 'en', 'theme Avada', '4f255458d9b7fd3d589990ca43060865', ' - Reply', 0), +(1065, 'en', 'theme Avada', '6954378552054e698cfff1a52b0eca9d', 'Your comment is awaiting moderation.', 1), +(1066, 'en', 'theme Avada', '857ecb2ae9191bf8449f80abc89b8083', 'Theme Options', 1), +(1067, 'en', 'theme Avada', 'ec434af0a2786fa23b468584c5622fe1', 'Go to...', 1), +(1068, 'en', 'theme Avada', 'b75443a19207ed3a3552edda86536857', 'Shopping Cart', 0), +(1069, 'en', 'theme Avada', '89d2d6748d3d718e6a99fb666368fb84', 'All posts displayed', 0), +(1070, 'en', 'theme Avada', '9a1dc1e92f772868a9fd98b5bf52ad2c', 'Loading the next set of posts...', 0), +(1071, 'en', 'theme Avada', 'e06645be9f00d5cb266104d208c82320', 'Loading Portfolio Items...', 1), +(1072, 'en', 'theme Avada', '3b340ac59e178c70f764a4c1313b6a0a', 'Loading FAQ Items...', 1), +(1073, 'en', 'theme Avada', '33d8042bd735c559cc3206f4bc99aedc', 'Sort by', 0), +(1074, 'en', 'theme Avada', '253cd15656be62df689c67c9ecc768bf', 'Default Order', 0), +(1075, 'en', 'theme Avada', '49ee3087348e8d44e1feda1917443987', 'Name', 0), +(1076, 'en', 'theme Avada', '3601146c4e948c32b6424d2c0a7f0118', 'Price', 0), +(1077, 'en', 'theme Avada', '44749712dbec183e983dcd78a7736c41', 'Date', 0), +(1078, 'en', 'theme Avada', 'dda9c06f33071c9b6fc237ee164109d8', 'Rating', 0), +(1079, 'en', 'theme Avada', '498f79c4c5bbde77f1bceb6c86fd0f6d', 'Show', 0), +(1080, 'en', 'theme Avada', '666b55c4082e2318433e0164b132ba32', ' Products', 0), +(1081, 'en', 'theme Avada', '068f80c7519d0528fb08e82137a72131', 'Products', 0), +(1082, 'en', 'WordPress', '3fa62b745d8a9ab6d46d61b70ffc9c12', 'Sucessfully imported demo data!', 0), +(1083, 'en', 'theme Avada', 'e5dba1c9996ec7f313c1abeecf6ff291', 'Search results for:', 1), +(1084, 'en', 'theme Avada', '21ba5005b9eb7e6569cf871b4f6db9c4', 'Error 404 Page', 1), +(1085, 'en', 'theme Avada', '509ddf70d4ec2ea525ddf92ef58c1dd5', 'Daily Archives: %s', 0), +(1086, 'en', 'theme Avada', 'e18556cfbb55240493ce4c5aa52d6ffc', 'Monthly Archives: %s', 0), +(1087, 'en', 'theme Avada', 'ca3a598d3659dcda98453974e0a42b48', 'Yearly Archives: %s', 0), +(1088, 'en', 'theme Avada', 'monthly archives date format: F Y', 'F Y', 0), +(1089, 'en', 'theme Avada', 'yearly archives date format: Y', 'Y', 0), +(1090, 'en', 'theme Avada', 'f5395c9793af8a11b406ca7c1ac70da9', 'Learn More', 1), +(1091, 'en', 'theme Avada', '716f3cb27c271759e1fb0d39972706e3', 'View Project', 1), +(1092, 'en', 'theme Avada', '0ca81ab2e2fcd5ef38aecf8c7624d533', 'Couldn''t find what you''re looking for!', 0), +(1093, 'en', 'theme Avada', '50717588689bf6a591f54c262359f0cc', 'Oops!', 0), +(1094, 'en', 'theme Avada', '0912f8f8b87c237b8415f1b4c0a50438', 'Try again!', 0), +(1095, 'en', 'theme Avada', 'b52ddfb7fddb89c4226ace319475c323', 'If you want to rephrase your query, here is your chance:', 0), +(1096, 'en', 'theme Avada', '13a1c246a6d1a5ae1a40f5260a99ac1e', 'Back to Parent Page', 0), +(1097, 'en', 'theme Avada', '498431355a10a934543eb9a3ad24518e', 'Project Description', 0), +(1098, 'en', 'theme Avada', 'ba516011f8955ad772f70ea105fcec9f', 'Project Details', 0), +(1099, 'en', 'theme Avada', 'c5e2e6a5cf227abeb35ed19bad3f18d4', 'Skills Needed', 0), +(1100, 'en', 'theme Avada', 'af1b98adf7f686b84cd0b443e022b7a0', 'Categories', 1), +(1101, 'en', 'theme Avada', '189f63f277cd73395561651753563065', 'Tags', 0), +(1102, 'en', 'theme Avada', '9bc13a6d723ab331f1dc83876593dda8', 'Project URL', 0), +(1103, 'en', 'theme Avada', '6016a2b341113bf496b719905398ecd2', 'Copyright', 0), +(1104, 'en', 'theme Avada', '89ec20af684bf65c3be23fa5743cfe7a', 'Related Projects', 1), +(1105, 'en', 'theme Avada', 'dd9e123ac85d2c75f6a5ff9c7354e35c', 'Share This Story, Choose Your Platform!', 1), +(1106, 'en', 'theme Avada', 'a85d110a7b47233be31e99ae463c6910', 'About the Author:', 1), +(1107, 'en', 'theme Avada', '177f0eb97c41c1d839bff85af7cb1120', 'Related Posts', 1), +(1108, 'en', 'theme Avada', '673ae02fffb72f0fe68a66f096a01347', 'Phone:', 0), +(1109, 'en', 'theme Avada', 'ffcb08c10f0f79e2f023967154ddbeed', 'Mobile:', 0), +(1110, 'en', 'theme Avada', '0e2fb5b02182fd28b9b96e86ed27838f', 'Fax:', 0), +(1111, 'en', 'theme Avada', '76612ef17d4d7ead66155f357461bced', 'Web:', 0), +(1112, 'en', 'theme Avada', '2cc1943d4c0b46bfcf503a75c44f988b', 'Popular', 1), +(1113, 'en', 'theme Avada', 'dae52b80711ee1029c7006f95018d300', 'Recent', 1), +(1114, 'en', 'theme Avada', '84eeb81e61c76ad3f4103b0b051c7021', 'says', 0), +(1115, 'en', 'theme woocommerce', '877300276a72c788dc01d357238b515b', 'Your cart is currently empty.', 0), +(1116, 'en', 'theme woocommerce', '36f68b3d66b768280a7704d6d246c8e5', '← Return To Shop', 0), +(1117, 'en', 'theme Avada', '05511af084e123329efece90bba218ae', 'You Have %d items In Your Cart', 0), +(1118, 'en', 'theme woocommerce', '44b1a01a236d82c7c7fed8b780c61933', 'Available on backorder', 0), +(1119, 'en', 'theme woocommerce', '9f6a6a4a7f5b24e3801c7ecd0ca7fcb8', 'Remove this item', 0), +(1120, 'en', 'theme Avada', '7d74f3b92b19da5e606d737d339a9679', 'Item', 0), +(1121, 'en', 'theme woocommerce', '3601146c4e948c32b6424d2c0a7f0118', 'Price', 0), +(1122, 'en', 'theme woocommerce', '694e8d1f2ee056f98ee488bdc4982d73', 'Quantity', 0), +(1123, 'en', 'theme woocommerce', '96b0141273eabab320119c467cdcaf17', 'Total', 0), +(1124, 'en', 'theme Avada', '0733b91b6077c4844e47d54f0f112a1c', 'Have A Promotional Code?', 0), +(1125, 'en', 'theme Avada', '9639e32cab248434a17ab32237cb3b71', 'Apply', 0), +(1126, 'en', 'theme woocommerce', '8a1ac57c0cc4eb3f6b2fe4c252518c37', 'Update Cart', 0), +(1127, 'en', 'theme woocommerce', '18d096e4305de4c18ad6526578c459db', 'Proceed to Checkout →', 0), +(1128, 'en', 'theme woocommerce', 'Product quantity input tooltip: Qty', 'Qty', 0), +(1129, 'en', 'theme woocommerce', 'dec40bcb36518a54f3d3ffca2f6aa431', 'You may be interested in…', 0), +(1130, 'en', 'theme woocommerce', '47fffe3e93fbb9948af64f5669fa228a', 'No products in the cart.', 0), +(1131, 'en', 'theme woocommerce', '2194aaec8cc7086ab0e93f74547e5f53', 'Subtotal', 0), +(1132, 'en', 'theme woocommerce', '11e82ac99b5bf8a59a5982e71bb29b82', 'View Cart →', 0), +(1133, 'en', 'theme woocommerce', '3b7cd841461ecd13d3b957410685a13e', 'Checkout →', 0), +(1134, 'en', 'theme woocommerce', '864ab983e749a730c0dfffef9213643d', 'Calculate Shipping', 0), +(1135, 'en', 'theme woocommerce', 'ccfc91b6f80517beecb3c97b5da76e54', 'Select a country…', 0), +(1136, 'en', 'theme woocommerce', 'cae5525291eaab98f5f40aaeb887b905', 'State / county', 0), +(1137, 'en', 'theme woocommerce', '9af88cc63e966ba56859eddb93fbac0a', 'Select a state…', 0), +(1138, 'en', 'theme woocommerce', '57d056ed0984166336b7879c2af3657f', 'City', 0), +(1139, 'en', 'theme woocommerce', '7f31c21ec327680832c6cccf3fdfa765', 'Postcode / Zip', 0), +(1140, 'en', 'theme woocommerce', '9e577ed1de69d7677a6d506da987c7fc', 'Update Totals', 0), +(1141, 'en', 'theme woocommerce', 'b24ce0cd392a5b0b8dedc66c25213594', 'Free', 0), +(1142, 'en', 'theme woocommerce', '138b4693b0ebcd62ea1993d7e3cc5aa2', 'Please fill in your details to see available shipping methods.', 0), +(1143, 'en', 'theme woocommerce', '2644d67d8a5183abea1c6a3839a5c77c', 'Sorry, it seems that there are no available shipping methods for your location (%s).', 0), +(1144, 'en', 'theme woocommerce', 'a0b3910af882f64b0da12cab26039661', 'If you require assistance or wish to make alternate arrangements please contact us.', 0), +(1145, 'en', 'theme woocommerce', '6c0b22af5ab0673b91c6765d9a30c5e8', '(Includes %s)', 0), +(1146, 'en', 'theme woocommerce', '48b6987a77fa9a7c4c0f1dbd010641c7', ' (taxes estimated for %s)', 0), +(1147, 'en', 'theme woocommerce', '201e46819596dfb5e90db1e9126a33ca', 'Note: Shipping and taxes are estimated%s and will be updated during checkout based on your billing and shipping information.', 0), +(1148, 'en', 'theme woocommerce', '6ebcab45d6ecacaaa800b56784c6ac09', 'Cart Totals', 0), +(1149, 'en', 'theme woocommerce', '9e378856bce2dad60f7355c9c3e1cf10', 'Cart Subtotal', 0), +(1150, 'en', 'theme woocommerce', 'c94fb2c50276f5677d9d43b1bf599cf4', 'Cart Discount', 0), +(1151, 'en', 'theme woocommerce', 'd881691af2de80f2ed2a94e83bd5fbb3', '[Remove]', 0), +(1152, 'en', 'theme woocommerce', 'ea9cf7e47ff33b2be14e6dd07cbcefc6', 'Shipping', 0), +(1153, 'en', 'theme woocommerce', '6b9e9f2472786ed1e76005bfc37bc8af', 'Order Discount', 0), +(1154, 'en', 'theme woocommerce', 'fcf35bd8e66b772c865588339b93bfec', 'Order Total', 0), +(1155, 'en', 'theme woocommerce', 'ecc124d78723936b2e9c88bfadcd78ea', 'No shipping methods were found; please recalculate your shipping and enter your state/county and zip/postcode to ensure there are no other available methods for your location.', 0), +(1156, 'en', 'theme woocommerce', '3fce4ef786a3208906906aa4258ea550', 'There are some issues with the items in your cart (shown above). Please go back to the cart page and resolve these issues before checking out.', 0), +(1157, 'en', 'theme woocommerce', '5eddc360434ebd6e2e52c1bac965edc4', '← Return To Cart', 0), +(1158, 'en', 'theme woocommerce', '1a436d078c302d8811f7f6c562f38b23', 'Billing & Shipping', 0), +(1159, 'en', 'theme woocommerce', '28a59051cd90053f87bacd5f1ffbc0b8', 'Billing Address', 0), +(1160, 'en', 'theme woocommerce', 'c5612b0739d3d3940622d9944e40e3cf', 'Create an account?', 0), +(1161, 'en', 'theme woocommerce', 'fee386c8d0629e95c0a9803f43c9bdd2', 'Create an account by entering the information below. If you are a returning customer please login at the top of the page.', 0), +(1162, 'en', 'theme woocommerce', '401e078d2884e8a9afbc56860359562b', 'You must be logged in to checkout.', 0), +(1163, 'en', 'theme Avada', '28a59051cd90053f87bacd5f1ffbc0b8', 'Billing Address', 0), +(1164, 'en', 'theme Avada', '48974cc3df177e6b565c39aa155458cd', 'Shipping Address', 0), +(1165, 'en', 'theme Avada', 'a1224651f7ebc5a8a7278892a886204a', 'Review & Payment', 0), +(1166, 'en', 'theme Avada', 'a0bfb8e59e6c13fc8d990781f77694fe', 'Continue', 0), +(1167, 'en', 'theme Avada', '3c04c1caf5d06b97b8097cf787801526', 'Review & Payment', 0), +(1168, 'en', 'theme woocommerce', 'be4ec0fda224d554a53bf294c003e227', 'Have a coupon?', 0), +(1169, 'en', 'theme woocommerce', '0f3ae7b23abffd0b07ae4167cd9ad3df', 'Click here to enter your code', 0), +(1170, 'en', 'theme woocommerce', '5290e2630e9d54a0fa82d0d3b69d2139', 'Coupon code', 0), +(1171, 'en', 'theme woocommerce', '6b4f3302b7a65e6b4b86f62fcb37f95c', 'Apply Coupon', 0), +(1172, 'en', 'theme woocommerce', 'c36e511b5cda84fbaee7dba8720db309', 'Returning customer?', 0), +(1173, 'en', 'theme woocommerce', '43c95044847956460d2a89e37c9ffed5', 'If you have shopped with us before, please enter your details in the boxes below. If you are a new customer please proceed to the Billing & Shipping section.', 0), +(1174, 'en', 'theme woocommerce', '260dec0131c4f637a69580b6bd3df850', 'Click here to login', 0), +(1175, 'en', 'theme woocommerce', 'e55886d128b7d655c82fedf3ba683d2e', 'Sorry, it seems that there are no available payment methods for your location. Please contact us if you require assistance or wish to make alternate arrangements.', 0), +(1176, 'en', 'theme woocommerce', 'deb10517653c255364175796ace3553f', 'Product', 0), +(1177, 'en', 'theme woocommerce', '03ab340b3f99e03cff9e84314ead38c0', 'Qty', 0), +(1178, 'en', 'theme woocommerce', 'edd291d1439a6c1c18fe38bee411580f', 'Totals', 0), +(1179, 'en', 'theme woocommerce', 'bde11c7566878fd8967de0d028a09bfd', 'Pay for order', 0), +(1180, 'en', 'theme woocommerce', '02498b1f66c174c1d18b92e4e6c712e2', 'Ship to billing address?', 0), +(1181, 'en', 'theme woocommerce', '48974cc3df177e6b565c39aa155458cd', 'Shipping Address', 0), +(1182, 'en', 'theme woocommerce', '092bf78f9c97ba171b8232ddff585392', 'Additional Information', 0), +(1183, 'en', 'theme woocommerce', '8b3b6e13c987e525410f8b0f63b823ea', 'Please fill in your details above to see available payment methods.', 0), +(1184, 'en', 'theme woocommerce', '2b87772ce0a2054f2fd357a30dd096f8', 'Sorry, it seems that there are no available payment methods for your state. Please contact us if you require assistance or wish to make alternate arrangements.', 0), +(1185, 'en', 'theme woocommerce', 'e7965ae5942a09b8778af5a9fd481460', 'Place order', 0), +(1186, 'en', 'theme woocommerce', '2861776d171783ae347dec7ca7106010', 'Since your browser does not support JavaScript, or it is disabled, please ensure you click the Update Totals button before placing your order. You may be charged more than the amount stated above if you fail to do so.', 0), +(1187, 'en', 'theme woocommerce', 'd2d2c964ed724f8494988a1ae24f3659', 'Update totals', 0), +(1188, 'en', 'theme woocommerce', '9258cdb88f76574c5b600b603315b9e5', 'I have read and accept the', 0), +(1189, 'en', 'theme woocommerce', '4ab1891a1bb56bcdc29d3c4238df3027', 'terms & conditions', 0), +(1190, 'en', 'theme woocommerce', '9b9bf858de1ba79303b433a3ec8c7523', 'Unfortunately your order cannot be processed as the originating bank/merchant has declined your transaction.', 0), +(1191, 'en', 'theme woocommerce', 'ab2f4b9681f7ace55ef926155b44f426', 'Please attempt your purchase again or go to your account page.', 0), +(1192, 'en', 'theme woocommerce', 'da2e5769d0995eafb1fff631663a41d1', 'Please attempt your purchase again.', 0), +(1193, 'en', 'theme woocommerce', '99938b17c91170dfb0c2f3f8bc9f2a85', 'Pay', 0), +(1194, 'en', 'theme woocommerce', 'bea8d9e6a0d57c4a264756b4f9822ed9', 'My Account', 0), +(1195, 'en', 'theme woocommerce', '2afe257b1674f4160f5297c50bb8ab77', 'Thank you. Your order has been received.', 0), +(1196, 'en', 'theme woocommerce', '2ca3deb5cd68fa9119b285804fab572f', 'Order:', 0), +(1197, 'en', 'theme woocommerce', '0d8d58008ef5dd7afce337373ef73993', 'Date:', 0), +(1198, 'en', 'theme woocommerce', '66c4c5112f455a19afde47829df363fa', 'Total:', 0), +(1199, 'en', 'theme woocommerce', 'c1f6368d15f7c13c4e5e8f70c68c747f', 'Payment method:', 0), +(1200, 'en', 'theme Avada', 'd53907d724bf05eff15a2e80205f2d1e', 'Show details', 1), +(1201, 'en', 'theme woocommerce', 'decbe415d8accca7c2c16d48a79ee934', 'Read More', 0), +(1202, 'en', 'theme woocommerce', 'ddd939ce0f9bfb3f2caeb2924bbb705e', 'Select options', 0), +(1203, 'en', 'theme woocommerce', 'fac8e7847e2fce9df0cbc0e5483c1124', 'View options', 0), +(1204, 'en', 'theme woocommerce', '2d0f6b8300be19cf35e89e66f0677f95', 'Add to cart', 0), +(1205, 'en', 'theme woocommerce', '3a333fda25966563b0527e0c5a493bd5', 'No products found which match your selection.', 0), +(1206, 'en', 'theme woocommerce', 'd31b5a27f304cb619b0ae9185d5106c6', 'Default sorting', 0), +(1207, 'en', 'theme woocommerce', 'f0ae4d0498a86dd89e7552a89eceaa8a', 'Sort by popularity', 0), +(1208, 'en', 'theme woocommerce', '098c0b1d311949db63ef4219cb962862', 'Sort by average rating', 0), +(1209, 'en', 'theme woocommerce', '3cbcf5531001e862deb157dd2c2c9c0a', 'Sort by newness', 0), +(1210, 'en', 'theme woocommerce', '47a20f63866bd5f5b00747dd6cab1b9c', 'Sort by price: low to high', 0), +(1211, 'en', 'theme woocommerce', '1f07ebc5cb1fe1f05af7f60fe21eb8c4', 'Sort by price: high to low', 0), +(1212, 'en', 'theme woocommerce', '39954e218089b7ad6099c5ab4cc41d29', 'Showing all %d results', 0), +(1213, 'en', 'theme woocommerce', '0c70ddbfa5c1aa0e202575a74cf8bb54', 'Showing the single result', 0), +(1214, 'en', 'theme woocommerce', '%1$d = first, %2$d = last, %3$d = total: Showing %1$d–%2$d of %3$d results', 'Showing %1$d–%2$d of %3$d results', 0), +(1215, 'en', 'theme woocommerce', 'bb63f16d5ebfcfa8a651642a7bb2ea5c', 'Sale!', 0), +(1216, 'en', 'theme Avada', '8f1e77e0d2be21da93cd4d9a939148f7', 'Change Password', 0), +(1217, 'en', 'theme Avada', '13f3b9db265780f9d37bfa41700df6d6', 'Enter the following fields to change the password on your account', 0), +(1218, 'en', 'theme woocommerce', '3544848f820b9d94a3f3871a382cf138', 'New password', 0), +(1219, 'en', 'theme woocommerce', '4d618dcc37c1cd539a9609f8b784329c', 'Re-enter new password', 0), +(1220, 'en', 'theme woocommerce', 'c9cc8cce247e49bae79f15173ce97354', 'Save', 0), +(1221, 'en', 'theme woocommerce', '56ed5ee3432287e536a4913eabb9227e', 'Save Address', 0), +(1222, 'en', 'theme Avada', 'cf3d773f9027c67a7f9e81c3c845223d', 'I''m a Returning Customer', 0), +(1223, 'en', 'theme Avada', '2dc51259aa01455fe5bec5b1ad553e07', 'Username or Email Address', 0), +(1224, 'en', 'theme Avada', '99dea78007133396a7b8ed70578ac6ae', 'Login', 0), +(1225, 'en', 'theme Avada', 'aadcd99aeca1955de435c5d3c94a4a6e', 'Lost Password?', 0), +(1226, 'en', 'theme Avada', '1025805a662c875a45ef95828abcc1ae', 'Register An Account', 0), +(1227, 'en', 'theme Avada', 'ce8ae9da5b7cd6c3df2929543a9af92d', 'Email', 0), +(1228, 'en', 'theme Avada', '3dc4f4e67ea1865935d47aafc14c98dc', 'Re-enter password', 0), +(1229, 'en', 'theme woocommerce', '0ba7583639a274c434bbe6ef797115a4', 'Register', 0), +(1230, 'en', 'theme woocommerce', 'f2fa95a43776a99adb13dd852c0c4fad', 'Lost your password? Please enter your username or email address. You will receive a link to create a new password via email.', 0), +(1231, 'en', 'theme woocommerce', '34721e8ed2afcd09ffbe8327b21022c0', 'Enter a new password below.', 0), +(1232, 'en', 'theme woocommerce', '6072e83b7f35887c76e64920bd370f4a', 'Reset Password', 0), +(1233, 'en', 'theme woocommerce', 'c8b1d00cf350d4af96cd763852d9c520', 'Username or email', 0), +(1234, 'en', 'theme woocommerce', 'fd3458547ef9c3a8bd0e1e1b4ef2b4dd', 'Recent Orders', 0), +(1235, 'en', 'theme woocommerce', 'ea4788705e6873b424c65e91c2846b19', 'Cancel', 0), +(1236, 'en', 'theme woocommerce', '4351cfebe4b61d8aa5efa1d020710005', 'View', 0), +(1237, 'en', 'theme woocommerce', '87dcb72ef896c13c9767da5dbcefc32f', 'Order No.', 0), +(1238, 'en', 'theme woocommerce', '44749712dbec183e983dcd78a7736c41', 'Date', 0), +(1239, 'en', 'theme woocommerce', 'ec53a8c4f07baed5d8825072c89799be', 'Status', 0), +(1240, 'en', 'theme woocommerce', '3ec365dd533ddb7ef3d1c111186ce872', 'Details', 0), +(1241, 'en', 'theme woocommerce', '01aa312e8a4fe57af295b8405462fa00', 'My Addresses', 0), +(1242, 'en', 'theme woocommerce', '0bf3928d84fde940f6feafac75062280', 'My Address', 0), +(1243, 'en', 'theme woocommerce', '28787f558a0ea8defb612aa91276f531', 'The following addresses will be used on the checkout page by default.', 0), +(1244, 'en', 'theme woocommerce', '65068abe708d2f84f29782ddab7cd9c3', 'You have not set up this type of address yet.', 0), +(1245, 'en', 'theme woocommerce', '7dce122004969d56ae2e0245cb754d35', 'Edit', 0), +(1246, 'en', 'theme woocommerce', 'd673a9be03d216ce9a2ef3939160f06c', 'Available downloads', 0), +(1247, 'en', 'theme Avada', 'dd40a3644e7e77aa24f79d691ce34c19', 'View Orders', 0), +(1248, 'en', 'theme Avada', '343eb235cf6b5426fc4f92f739876c27', 'Change Address', 0), +(1249, 'en', 'theme woocommerce', '0f6d4311e8c5fd353d25d708b52f813a', 'To track your order please enter your Order ID in the box below and press return. This was given to you on your receipt and in the confirmation email you should have received.', 0), +(1250, 'en', 'theme woocommerce', 'd79cf3f429596f77db95c65074663a54', 'Order ID', 0), +(1251, 'en', 'theme woocommerce', 'd11e3a0f35802e2bd5ef0112f0850d27', 'Found in your order confirmation email.', 0), +(1252, 'en', 'theme woocommerce', '11fcf6449aacfc168f3c4c5d3a8f387d', 'Billing Email', 0), +(1253, 'en', 'theme woocommerce', '094660fc3011952d0176f4c73c9ce855', 'Email you used during checkout.', 0), +(1254, 'en', 'theme woocommerce', '92ea731d3af6677905303c88689f5d55', 'Track', 0), +(1255, 'en', 'theme woocommerce', 'f2ba066ea349c7d02e787c6036e6c4de', 'Download file%s', 0), +(1256, 'en', 'theme woocommerce', '6a1e265f92087bb6dd18194833fe946b', 'Email:', 0), +(1257, 'en', 'theme woocommerce', '20111867ed1071462a3178f54754aec0', 'Telephone:', 0), +(1258, 'en', 'theme woocommerce', 'c5c8ac6bbc6d7f5c95d0a888527554d3', 'Order Details', 0), +(1259, 'en', 'theme woocommerce', '0ebdd5877f8f4da9297c1d44f5a2126c', 'Order Again', 0), +(1260, 'en', 'theme woocommerce', 'ed616fc7d3ad764449f6146bca1ad05d', 'Customer details', 0), +(1261, 'en', 'theme woocommerce', '382b0f5185773fa0f67a8ed8056c7759', 'N/A', 0), +(1262, 'en', 'theme woocommerce', '9cfbeb5cba9cedff9c7ff19ad62dcb6f', 'Order %s which was made %s has the status “%s”', 0), +(1263, 'en', 'theme woocommerce', '6d0a578ca2f2c0e792fc923002fccbe3', 'ago', 0), +(1264, 'en', 'theme woocommerce', '792780442c517081f589a3fd62f55ba2', 'and was completed', 0), +(1265, 'en', 'theme woocommerce', '64384e10d876a1b9a318a7b2206d1ba4', ' ago', 0), +(1266, 'en', 'theme woocommerce', '9fc3ef13608e0ddb215f47505aec489a', 'Order Updates', 0), +(1267, 'en', 'theme woocommerce', '8f665db16b59b7478f1abf44581580db', 'Products tagged “', 0), +(1268, 'en', 'theme woocommerce', '02919096998c791a44a054853cbcdf6e', 'Search results for “', 0), +(1269, 'en', 'theme woocommerce', 'bfd56f3cafc12f6317ae3351ad712eff', 'Error 404', 0), +(1270, 'en', 'theme woocommerce', 'eb417e6a59b2797ef76b789606dcb9e2', 'Posts tagged “', 0), +(1271, 'en', 'theme woocommerce', '91401f053501b716b4a695b048c9b827', 'Author:', 0), +(1272, 'en', 'theme woocommerce', '193cfc9be3b995831c6af2fea6650e60', 'Page', 0), +(1273, 'en', 'theme woocommerce', 'dc647eb65e6711e155375218212b3964', 'Password', 0), +(1274, 'en', 'theme woocommerce', '99dea78007133396a7b8ed70578ac6ae', 'Login', 0), +(1275, 'en', 'theme woocommerce', 'aadcd99aeca1955de435c5d3c94a4a6e', 'Lost Password?', 0), +(1276, 'en', 'theme woocommerce', 'e26eee82f3164e729a78542a7219eecf', 'Choose an option', 0), +(1277, 'en', 'theme woocommerce', '80ffff123555bd5173345bc8f144edeb', 'Clear selection', 0), +(1278, 'en', 'theme woocommerce', '2bf5ae55eb0ead91dda7d1f6c8524b98', 'SKU:', 0), +(1279, 'en', 'theme woocommerce', '8c489d0946f66d17d73f26366a4bf620', 'Weight', 0), +(1280, 'en', 'theme woocommerce', 'f4843c1c797abf1a256c8802b6cd9f51', 'Dimensions', 0), +(1281, 'en', 'theme woocommerce', '347da0da598694c57fff1cbaa197d615', 'Related Products', 0), +(1282, 'en', 'theme woocommerce', '0a811f2dbf73443c3bbcdb3de571921c', 'verified owner', 0), +(1283, 'en', 'theme woocommerce', '438af3650bc32151f66474934d2a6648', 'Rated %d out of 5', 0), +(1284, 'en', 'theme woocommerce', 'c95af97705d6d9ede0d6b440d0985d19', 'Your comment is awaiting approval', 0), +(1285, 'en', 'theme woocommerce', 'fada9acff9fc19803c2a6a8abc2c87c6', 'out of 5', 0), +(1286, 'en', 'theme woocommerce', '854ee576475a63775d79cbfd6e4b13b6', 'Product Description', 0), +(1287, 'en', 'theme Avada', 'cf48c3336343e0cdd9048c3d255f6468', 'Share On', 0), +(1288, 'en', 'theme Avada', '396874b26083996931681c44fba73cab', 'Tweet This', 0), +(1289, 'en', 'theme Avada', 'deb10517653c255364175796ace3553f', 'Product', 0), +(1290, 'en', 'theme Avada', '1d8067ce4f707a88d4ee97bc7cebf855', 'Pin This', 0), +(1291, 'en', 'theme Avada', '8498b5e4d8ad0accc065bea8c8d93a11', 'Mail This', 0), +(1292, 'en', 'theme woocommerce', '3ac92084c33ea921877c234d1ae82b5c', 'You May Also Like', 0), +(1293, 'en', 'theme woocommerce', '9e477f98daac602166664df8effe3b23', 'Rated %s out of 5', 0), +(1294, 'en', 'theme woocommerce', '34e80a799d144cfe4af46815e103f017', 'Reviews', 0), +(1295, 'en', 'theme woocommerce', '620de9736e28e9cff9afe50f76cfe48a', ' Previous', 0), +(1296, 'en', 'theme woocommerce', 'f275690bb0c9db9dec5b708dc63a78a9', 'Next ', 0), +(1297, 'en', 'theme woocommerce', '139c175a2c6768062ce00ec3542d37d0', 'Add Your Review', 0), +(1298, 'en', 'theme woocommerce', '87108100eebf98d9a8cede6eea9d9472', 'Add Review', 0), +(1299, 'en', 'theme woocommerce', '6fa3d86805af28f394d29be219701719', 'Add a review', 0), +(1300, 'en', 'theme woocommerce', 'f476f0ae9f076828ba82d2205cb86c5d', 'Be the first to review', 0), +(1301, 'en', 'theme woocommerce', 'ce18a807ada501196ff0e2f18328d638', 'There are no reviews yet, would you like to submit yours?', 0), +(1302, 'en', 'theme woocommerce', '49ee3087348e8d44e1feda1917443987', 'Name', 0), +(1303, 'en', 'theme woocommerce', 'ce8ae9da5b7cd6c3df2929543a9af92d', 'Email', 0), +(1304, 'en', 'theme woocommerce', 'c94e361d50788acc57075dd339a93050', 'Submit Review', 0), +(1305, 'en', 'theme woocommerce', 'dda9c06f33071c9b6fc237ee164109d8', 'Rating', 0), +(1306, 'en', 'theme woocommerce', '4de7403220165d6129ad1f10d47cb0f4', 'Rate…', 0), +(1307, 'en', 'theme woocommerce', '56cdd7e9e3cef1974f4075c03a80332d', 'Perfect', 0), +(1308, 'en', 'theme woocommerce', '0c6ad70beb3a7e76c3fc7adab7c46acc', 'Good', 0), +(1309, 'en', 'theme woocommerce', 'b1897515d548a960afe49ecf66a29021', 'Average', 0), +(1310, 'en', 'theme woocommerce', 'be3f5d4984bddce13793bb144c133b5c', 'Not that bad', 0), +(1311, 'en', 'theme woocommerce', '2796b346957704947eeb01aa52103963', 'Very Poor', 0), +(1312, 'en', 'theme woocommerce', '08d964f5f38ffd179c1570e41692c346', 'Your Review', 0), +(1313, 'en', 'theme Avada', '1a398886f0a87366494032615ec7f42e', 'Hello, %s:', 0), +(1314, 'en', 'theme double-r-group', '3c8d2f0f325aa1837c89c155647dc1ce', 'Horses', 1), +(1315, 'en', 'theme double-r-group', '38069b4eb64e325cb7ac65bd641b2188', 'Horse', 1), +(1316, 'en', 'theme double-r-group', 'af1b98adf7f686b84cd0b443e022b7a0', 'Categories', 1), +(1317, 'en', 'theme double-r-group', '189f63f277cd73395561651753563065', 'Tags', 1), +(1318, 'en', 'theme double-r-group', '434b2e5a6c06e0fe0e9972e8d43393b3', 'Genders', 1), +(1319, 'en', 'theme Avada', '642fa08fba951378dca25cf328a60b56', 'Image gallery', 1), +(1320, 'en', 'theme Avada', '1bd4e734c62ac931c1be15b08a079544', 'Video gallery', 1), +(1321, 'en', 'theme double-r-group', '8918a6f94c79ba27cf1be696f78e4efb', 'Breeds', 1), +(1322, 'en', 'theme double-r-group', '6c4991757bc3d446fd4e6728424d3d10', 'Ages', 1), +(1323, 'en', 'plugin wpml-string-translation', '640053a0d26d44fbf33cd7cb85d5407f', 'Because your default language is not English, you need to enter all strings in English and translate them to %s and %s. Read more', 0), +(1324, 'en', 'WordPress', '9d1a0949c39e66a0cd65240bc0ac9177', 'Sunday', 0), +(1325, 'en', 'WordPress', '6f8522e0610541f1ef215a22ffa66ff6', 'Monday', 0), +(1326, 'en', 'WordPress', '5792315f09a5d54fb7e3d066672b507f', 'Tuesday', 0), +(1327, 'en', 'WordPress', '796c163589f295373e171842f37265d5', 'Wednesday', 0), +(1328, 'en', 'WordPress', '78ae6f0cd191d25147e252dc54768238', 'Thursday', 0), +(1329, 'en', 'WordPress', 'c33b138a163847cdb6caeeb7c9a126b4', 'Friday', 0), +(1330, 'en', 'WordPress', '8b7051187b9191cdcdae6ed5a10e5adc', 'Saturday', 0), +(1331, 'en', 'WordPress', 'ae8dae70180844a5731caa811ef950dd', 'S_Sunday_initial', 0), +(1332, 'en', 'WordPress', '6ae5acdfe6d14ddda658d2cf75c071ee', 'M_Monday_initial', 0), +(1333, 'en', 'WordPress', 'ef6e12fc4240d030f376be5b6fdbac29', 'T_Tuesday_initial', 0), +(1334, 'en', 'WordPress', '9719e16ea05051a98851954a5996ffd3', 'W_Wednesday_initial', 0), +(1335, 'en', 'WordPress', '1594d08f0bbd717b061da4254623214f', 'T_Thursday_initial', 0), +(1336, 'en', 'WordPress', 'f55a9e51f324cba25700b7022e22d873', 'F_Friday_initial', 0); +INSERT INTO `drgrp_icl_strings` (`id`, `language`, `context`, `name`, `value`, `status`) VALUES +(1337, 'en', 'WordPress', 'c288d0b5f13e167c13f37a9a3c2190f2', 'S_Saturday_initial', 0), +(1338, 'en', 'WordPress', 'ef6572e4cd58bb39a3f4e82fc64fe9f0', 'Sun', 0), +(1339, 'en', 'WordPress', 'fd29458ae58ac32a2d8734ed90ad51ec', 'Mon', 0), +(1340, 'en', 'WordPress', '2ddecde85408faf230652444db78cb72', 'Tue', 0), +(1341, 'en', 'WordPress', '510c292b1686eb070d9e90a575f74106', 'Wed', 0), +(1342, 'en', 'WordPress', 'ed5e8353dfc585f4c6b3a55d1a9fc01d', 'Thu', 0), +(1343, 'en', 'WordPress', 'ac616f844b9a5ea5a827bf7fb99b1ad5', 'Fri', 0), +(1344, 'en', 'WordPress', '13c7d2d737f81f7bf89aed9fbcd0ad55', 'Sat', 0), +(1345, 'en', 'WordPress', '86f5978d9b80124f509bdb71786e929e', 'January', 0), +(1346, 'en', 'WordPress', '659e59f062c75f81259d22786d6c44aa', 'February', 0), +(1347, 'en', 'WordPress', 'fa3e5edac607a88d8fd7ecb9d6d67424', 'March', 0), +(1348, 'en', 'WordPress', '3fcf026bbfffb63fb24b8de9d0446949', 'April', 0), +(1349, 'en', 'WordPress', '195fbb57ffe7449796d23466085ce6d8', 'May', 0), +(1350, 'en', 'WordPress', '688937ccaf2a2b0c45a1c9bbba09698d', 'June', 0), +(1351, 'en', 'WordPress', '1b539f6f34e8503c97f6d3421346b63c', 'July', 0), +(1352, 'en', 'WordPress', '41ba70891fb6f39327d8ccb9b1dafb84', 'August', 0), +(1353, 'en', 'WordPress', 'cc5d90569e1c8313c2b1c2aab1401174', 'September', 0), +(1354, 'en', 'WordPress', 'eca60ae8611369fe28a02e2ab8c5d12e', 'October', 0), +(1355, 'en', 'WordPress', '7e823b37564da492ca1629b4732289a8', 'November', 0), +(1356, 'en', 'WordPress', '82331503174acbae012b2004f6431fa5', 'December', 0), +(1357, 'en', 'WordPress', '261b8bfba31955859768bc4e801db630', 'Jan_January_abbreviation', 0), +(1358, 'en', 'WordPress', '41d00f37238e4919998bfe097e066c4d', 'Feb_February_abbreviation', 0), +(1359, 'en', 'WordPress', 'a65520a4d31e3375d751893b9e5b41b7', 'Mar_March_abbreviation', 0), +(1360, 'en', 'WordPress', 'a099803dca47a365c86ed6220ca3797e', 'Apr_April_abbreviation', 0), +(1361, 'en', 'WordPress', '087bc523b6da106377da033e4a4a18df', 'May_May_abbreviation', 0), +(1362, 'en', 'WordPress', '252278a2cd443f7f042d48063429be78', 'Jun_June_abbreviation', 0), +(1363, 'en', 'WordPress', '9c31f3eeb0fc1f46d70126273cb972d4', 'Jul_July_abbreviation', 0), +(1364, 'en', 'WordPress', 'abd3008b12c080f09f40c0d0d46aa5d9', 'Aug_August_abbreviation', 0), +(1365, 'en', 'WordPress', '38569de1a2db173d7c1c1baea24edde8', 'Sep_September_abbreviation', 0), +(1366, 'en', 'WordPress', 'ee4fa62276ab5e609f4c19827957f3a3', 'Oct_October_abbreviation', 0), +(1367, 'en', 'WordPress', '118d7993c5aded1faa0583095fac0f89', 'Nov_November_abbreviation', 0), +(1368, 'en', 'WordPress', 'cc6a9ff21ef7c0cd6318a782508f3c59', 'Dec_December_abbreviation', 0), +(1369, 'en', 'WordPress', 'c04cd38aeb30f3ad1f8ab4e64a0ded7b', 'am', 0), +(1370, 'en', 'WordPress', '5109d85d95fece7816d9704e6e5b1279', 'pm', 0), +(1371, 'en', 'WordPress', '25ec916d56b8212e569dbf2e4e4b51d4', 'AM', 0), +(1372, 'en', 'WordPress', '21b7eb30013b04776f5b06bc59209391', 'PM', 0), +(1373, 'en', 'WordPress', '862b796393fb64766820ec1e33bfd9bd', 'number_format_thousands_sep', 0), +(1374, 'en', 'WordPress', 'd445e4a26044411d024021a16f3b10ee', 'number_format_decimal_point', 0), +(1375, 'en', 'WordPress', 'text direction: ltr', 'ltr', 0), +(1376, 'en', 'WordPress', 'Post format: Standard', 'Standard', 0), +(1377, 'en', 'WordPress', 'Post format: Aside', 'Aside', 0), +(1378, 'en', 'WordPress', 'Post format: Chat', 'Chat', 0), +(1379, 'en', 'WordPress', 'Post format: Gallery', 'Gallery', 0), +(1380, 'en', 'WordPress', 'Post format: Link', 'Link', 0), +(1381, 'en', 'WordPress', 'Post format: Image', 'Image', 0), +(1382, 'en', 'WordPress', 'Post format: Quote', 'Quote', 0), +(1383, 'en', 'WordPress', 'Post format: Status', 'Status', 0), +(1384, 'en', 'WordPress', 'Post format: Video', 'Video', 0), +(1385, 'en', 'WordPress', 'Post format: Audio', 'Audio', 0), +(1386, 'en', 'WordPress', '2da47af339b86412bb0e45b01fdeab50', 'Sidebar %d', 0), +(1387, 'en', 'WordPress', 'add new on admin bar: Post', 'Post', 0), +(1388, 'en', 'WordPress', 'post type general name: Posts', 'Posts', 0), +(1389, 'en', 'WordPress', 'post type general name: Pages', 'Pages', 0), +(1390, 'en', 'WordPress', 'post type singular name: Page', 'Page', 0), +(1391, 'en', 'WordPress', 'post: Add New', 'Add New', 0), +(1392, 'en', 'WordPress', 'a736aadab8267b784c2d2320f1ef8ae1', 'Add New Post', 0), +(1393, 'en', 'WordPress', '004c87b62d5274851115f4263bd6b5b7', 'Add New Page', 0), +(1394, 'en', 'WordPress', '17ebfcf145608c383876bfdcdd90b901', 'Edit Post', 0), +(1395, 'en', 'WordPress', '5b8a065f8920024116be94abfa72d317', 'Edit Page', 0), +(1396, 'en', 'WordPress', '43eabef16cc9c1702542a370405489ce', 'New Post', 0), +(1397, 'en', 'WordPress', 'eb687b46e8635c2b0a9febbc44ba0a30', 'New Page', 0), +(1398, 'en', 'WordPress', '36d0c22e8ec7773b71039c8225cb3dcf', 'View Post', 0), +(1399, 'en', 'WordPress', 'e4b846392f10f46b032cf155c39a0eaf', 'View Page', 0), +(1400, 'en', 'WordPress', 'c3ab2ce5aa0200fb9d5821565d048d34', 'Search Posts', 0), +(1401, 'en', 'WordPress', 'c64142496069f3e3c157198a932a3acd', 'Search Pages', 0), +(1402, 'en', 'WordPress', '67c6a14173727312f1e8d615e6122e1d', 'No posts found.', 0), +(1403, 'en', 'WordPress', 'ec3c98c1f47b3befed46f4aa669607a1', 'No pages found.', 0), +(1404, 'en', 'WordPress', '314c67959c9027dc1b4b0fdf2d76c9c8', 'No posts found in Trash.', 0), +(1405, 'en', 'WordPress', '673d19ab14c76bcd4fdd37a474eb17bd', 'No pages found in Trash.', 0), +(1406, 'en', 'WordPress', '62599d32d811c48ded6a541767a88577', 'Parent Page:', 0), +(1407, 'en', 'WordPress', '76b9c2f5e2ea8a61a0803dae4d42ca7f', 'All Posts', 0), +(1408, 'en', 'WordPress', '93ddb948766e84b565489787d313b16e', 'All Pages', 0), +(1409, 'en', 'WordPress', 'post type general name: Media', 'Media', 0), +(1410, 'en', 'WordPress', 'add new from admin bar: Media', 'Media', 0), +(1411, 'en', 'WordPress', 'add new media: Add New', 'Add New', 0), +(1412, 'en', 'WordPress', '96b60a1bf66653894616670b8c91edab', 'Edit Media', 0), +(1413, 'en', 'WordPress', '3a70b86b7a951d9859529cafcd3dd036', 'View Attachment Page', 0), +(1414, 'en', 'WordPress', 'fd88b11cfde6aa5e3c7ff0553b534885', 'Revisions', 0), +(1415, 'en', 'WordPress', '32c676ac5296556c0573a301ef5ab07b', 'Revision', 0), +(1416, 'en', 'WordPress', '957a193a19401d00ca237c67476d3a9c', 'Navigation Menu Items', 0), +(1417, 'en', 'WordPress', 'e9f6a8196a5105f456009717d8924b98', 'Navigation Menu Item', 0), +(1418, 'en', 'WordPress', 'post: Published', 'Published', 0), +(1419, 'en', 'WordPress', 'post: Scheduled', 'Scheduled', 0), +(1420, 'en', 'WordPress', 'post: Draft', 'Draft', 0), +(1421, 'en', 'WordPress', 'post: Pending', 'Pending', 0), +(1422, 'en', 'WordPress', 'post: Private', 'Private', 0), +(1423, 'en', 'WordPress', 'post: Trash', 'Trash', 0), +(1424, 'en', 'WordPress', 'taxonomy general name: Tags', 'Tags', 0), +(1425, 'en', 'WordPress', 'taxonomy general name: Categories', 'Categories', 0), +(1426, 'en', 'WordPress', 'taxonomy singular name: Tag', 'Tag', 0), +(1427, 'en', 'WordPress', 'taxonomy singular name: Category', 'Category', 0), +(1428, 'en', 'WordPress', '51471f9b4ed42bc4b88b01609626046a', 'Search Tags', 0), +(1429, 'en', 'WordPress', '547d406d2d88b3851d13a6850a72f81a', 'Search Categories', 0), +(1430, 'en', 'WordPress', '7b247f76c157672226ab7131e6ac91c0', 'Popular Tags', 0), +(1431, 'en', 'WordPress', '45d2c2fb420a3be0221248dc1bd2575e', 'All Tags', 0), +(1432, 'en', 'WordPress', 'a6a2a55bea8760389dfca77132905b7c', 'All Categories', 0), +(1433, 'en', 'WordPress', '4e98e60e38a29ab7bd94ea815c4f2ef2', 'Parent Category', 0), +(1434, 'en', 'WordPress', 'dc5b753561079ca416a04fa17e221bee', 'Parent Category:', 0), +(1435, 'en', 'WordPress', '3854516c160b786e4a58a349089ade9d', 'Edit Tag', 0), +(1436, 'en', 'WordPress', '176bf027c77f1139b35c26a2b0641497', 'Edit Category', 0), +(1437, 'en', 'WordPress', '3ef43c95f7b82ae64a8407f95caeabe5', 'View Tag', 0), +(1438, 'en', 'WordPress', 'a0925476f70856079fc6f34624318308', 'View Category', 0), +(1439, 'en', 'WordPress', '639aa9045afb08bc935d23192a9845bc', 'Update Tag', 0), +(1440, 'en', 'WordPress', '17f72185527df754fda2147fe9214a68', 'Update Category', 0), +(1441, 'en', 'WordPress', '96cea70c8b05778849a8ae1028cc2eb0', 'Add New Tag', 0), +(1442, 'en', 'WordPress', '3eccdfd36e2570f5ce58a84fb9f820d9', 'Add New Category', 0), +(1443, 'en', 'WordPress', 'c2d69d5f50c4f0647ea555125cda82d0', 'New Tag Name', 0), +(1444, 'en', 'WordPress', '9b7a46d3a470693216a0a43364f2454f', 'New Category Name', 0), +(1445, 'en', 'WordPress', 'fdc1564548beb786ed722cc8c4c44849', 'Separate tags with commas', 0), +(1446, 'en', 'WordPress', '25c97f1e993635c78ecd9e502db5aad6', 'Add or remove tags', 0), +(1447, 'en', 'WordPress', '3bff3aeeec617721788b4bf3e6020392', 'Choose from the most used tags', 0), +(1448, 'en', 'WordPress', '378c846e4e8b6e5cc0e8bc52e8e1c106', 'No tags found.', 0), +(1449, 'en', 'WordPress', 'eba120172df6983accea097877998749', 'Navigation Menus', 0), +(1450, 'en', 'WordPress', 'b0da3c0d5d8c569614d0e2f52be3384d', 'Navigation Menu', 0), +(1451, 'en', 'WordPress', '9123d6c49956ccfa54dc6d1c36cf2aec', 'Link Categories', 0), +(1452, 'en', 'WordPress', '5c78717576a09beb76f3a7c7b063b06d', 'Link Category', 0), +(1453, 'en', 'WordPress', '29d041598b13642f9630d3b2b662c793', 'Search Link Categories', 0), +(1454, 'en', 'WordPress', '7011ec429bcd35354f238c4fd2426f93', 'All Link Categories', 0), +(1455, 'en', 'WordPress', '60fdd28c62d11545e568f150608d946f', 'Edit Link Category', 0), +(1456, 'en', 'WordPress', '4328855ee46e155ebc33bd4a65d6fbf5', 'Update Link Category', 0), +(1457, 'en', 'WordPress', 'a444fbb2bae691fe082ef9a9773e3bca', 'Add New Link Category', 0), +(1458, 'en', 'WordPress', '04a4586ce021a9328c6231317cbf9566', 'New Link Category Name', 0), +(1459, 'en', 'WordPress', 'post format: Format', 'Format', 0), +(1460, 'en', 'WordPress', '7b791ef51ffb6d2f88273518c28a3823', 'A list of your site’s Pages.', 0), +(1461, 'en', 'WordPress', '53586d20c42106bd4bdf09c604cd2ed7', 'A calendar of your site’s Posts.', 0), +(1462, 'en', 'WordPress', '8ff922bbcd8ad41cdfc48d3c5163b2ab', 'Calendar', 0), +(1463, 'en', 'WordPress', 'b58e5d033078bc5bccebf415a20447f6', 'A monthly archive of your site’s Posts.', 0), +(1464, 'en', 'WordPress', '178fde647037235223ac2a188a7106b1', 'Archives', 0), +(1465, 'en', 'WordPress', '00246f446b4bf43f772f0f49cd012437', 'Login, RSS, & WordPress.org links.', 0), +(1466, 'en', 'WordPress', 'b6755d218d5f4e1cef9cce9cc39aeda9', 'Meta', 0), +(1467, 'en', 'WordPress', '88e309b62c9d2dd682e95db34bc971c9', 'A search form for your site.', 0), +(1468, 'en', 'WordPress', '13348442cc6a27032d2b4aa28b75a5d3', 'Search', 0), +(1469, 'en', 'WordPress', '5ffeed04e23d3c2eb122420ec7587ba4', 'Arbitrary text or HTML.', 0), +(1470, 'en', 'WordPress', '9dffbf69ffba8bc38bc4e01abf4b1675', 'Text', 0), +(1471, 'en', 'WordPress', 'b2a3cfd1f4f03aa19eacf441e0a5d3ab', 'A list or dropdown of categories.', 0), +(1472, 'en', 'WordPress', '58e974b48f13693748ffb8886cfa58d5', 'Your site’s most recent Posts.', 0), +(1473, 'en', 'WordPress', '341825a909ae0a19dd9dbea98ef3e021', 'Recent Posts', 0), +(1474, 'en', 'WordPress', 'd712a4388edca136bcebcbe390bd16e8', 'Your site’s most recent comments.', 0), +(1475, 'en', 'WordPress', '69e7df6b9f7404b4007d936978a45c81', 'Recent Comments', 0), +(1476, 'en', 'WordPress', '09f21420c2703ae0d38817c70e909e66', 'Entries from any RSS or Atom feed.', 0), +(1477, 'en', 'WordPress', 'bf1981220040a8ac147698c85d55334f', 'RSS', 0), +(1478, 'en', 'WordPress', '38e22ddf6565bc9713f34aa14292258f', 'A cloud of your most used tags.', 0), +(1479, 'en', 'WordPress', 'ea911fe5664a3e79364a7e39370548c6', 'Tag Cloud', 0), +(1480, 'en', 'WordPress', '430c8c6e9f2a14718ee7ed29b97a79f9', 'Add a custom menu to your sidebar.', 0), +(1481, 'en', 'WordPress', '6c8b9b6d4f94a709dda529602f19ef5c', 'Custom Menu', 0), +(1482, 'en', 'plugin gravityforms', 'a70675d121c8a4a3a0209fd9c3661b71', 'Gravity Forms Widget', 0), +(1483, 'en', 'plugin gravityforms', 'd359c6df99b25183d81f7d728b71de0e', 'Form', 0), +(1484, 'en', 'plugin revslider', 'b12d187a59762d40065990a4b96be209', 'Displays a revolution slider on the page', 0), +(1485, 'en', 'plugin revslider', 'd6a4d07d1b4022d886df52322dcd8a6f', 'Revolution Slider', 0), +(1486, 'en', 'plugin wpml-string-translation', 'ebd83288b1b4ca950ca2986099e93777', 'Multilingual arbitrary text or HTML', 0), +(1487, 'en', 'plugin wpml-string-translation', '79a2f2031003f676ae69711f7dfc6ac5', 'Multilingual Text', 0), +(1488, 'en', 'WordPress', '695b87c638943d0bf0077a8869ec3d70', 'You are about to permanently delete the selected items.\n ''Cancel'' to stop, ''OK'' to delete.', 0), +(1489, 'en', 'WordPress', 'c7a59caaf257d42a1853059a664a54e0', 'Close all open tags', 0), +(1490, 'en', 'WordPress', '90198d984e80ec049134bbc7f7e92a1f', 'close tags', 0), +(1491, 'en', 'WordPress', '29903600533e7d928c16df1cb9787885', 'Enter the URL', 0), +(1492, 'en', 'WordPress', '6109eec2cfbf630c3b4f71cc40c5f0fa', 'Enter the URL of the image', 0), +(1493, 'en', 'WordPress', 'bb4112f230fd3646913d058a5156683c', 'Enter a description of the image', 0), +(1494, 'en', 'WordPress', '74ba0736dad9b7236e2c7db4f4f4b874', 'fullscreen', 0), +(1495, 'en', 'WordPress', 'a757b68f63f07496914e91d95e5550fe', 'Toggle fullscreen mode', 0), +(1496, 'en', 'WordPress', '5a5ef0e36141d96fcd78dc566777bb4f', 'text direction', 0), +(1497, 'en', 'WordPress', '4b0efc98ab40ccb97706c360ac603d5f', 'Toggle Editor Text Direction', 0), +(1498, 'en', 'WordPress', '1f93d63d0a5baa28ad577633f496b4c3', 'You do not have permission to do that.', 0), +(1499, 'en', 'WordPress', '004705d7a2ca9d199122c07dcb65b2c2', 'An unidentified error has occurred.', 0), +(1500, 'en', 'WordPress', 'c8a59e7135a20b362f9c768b09454fdb', 'Dismiss', 0), +(1501, 'en', 'WordPress', '14631d23680a54f2a2e9990cfd2af7b9', 'Your session has expired. You can log in again from this page or go to the login page.', 0), +(1502, 'en', 'WordPress', '3ef61c7b2bd8bdefe44e782cd85a63cf', 'Next >', 0), +(1503, 'en', 'WordPress', '93819e8f150b7082ff169deef942fe5f', '< Prev', 0), +(1504, 'en', 'WordPress', '8bf8854bebe108183caeb845c7676ae4', 'of', 0), +(1505, 'en', 'WordPress', 'd3d2e617335f08df83599665eef8a418', 'Close', 0), +(1506, 'en', 'WordPress', '416feffd5cb14a0cdca85835446f2c96', 'This feature requires inline frames. You have iframes disabled or your browser does not support them.', 0), +(1507, 'en', 'WordPress', '5bf74857f394c28d0557fc94f56c870a', 'You have attempted to queue too many files.', 0), +(1508, 'en', 'WordPress', '9df6f136606e06c8fb8a192af1182186', '%s exceeds the maximum upload size for this site.', 0), +(1509, 'en', 'WordPress', '15bbfc8d24495b5c259e64c803bdcd75', 'This file is empty. Please try another.', 0), +(1510, 'en', 'WordPress', '557c5c93490044af122d711e88c4ff6a', 'This file type is not allowed. Please try another.', 0), +(1511, 'en', 'WordPress', 'fb6ffaf9ee797657db63054a2cbbf416', 'This file is not an image. Please try another.', 0), +(1512, 'en', 'WordPress', 'd75006a65a7feb16da2758870875244d', 'Memory exceeded. Please try another smaller file.', 0), +(1513, 'en', 'WordPress', 'e7a5c3907191e9bd4c886775e39bb269', 'This is larger than the maximum size. Please try another.', 0), +(1514, 'en', 'WordPress', '3c381e588a08d56b443ec775596a0f57', 'An error occurred in the upload. Please try again later.', 0), +(1515, 'en', 'WordPress', 'bc755039bc92216220af1b18d910a6c3', 'There was a configuration error. Please contact the server administrator.', 0), +(1516, 'en', 'WordPress', '782efed2c1b74869e4a2c285675fee08', 'You may only upload 1 file.', 0), +(1517, 'en', 'WordPress', '8d41dcf3c3971ffa0531b6e96ac2d1ac', 'HTTP error.', 0), +(1518, 'en', 'WordPress', 'cde28f5998d2dd5da84a4ab21143bc67', 'Upload failed.', 0), +(1519, 'en', 'WordPress', '2812f6aa95814b2e90121ffabcfa86c7', 'Please try uploading this file with the %1$sbrowser uploader%2$s.', 0), +(1520, 'en', 'WordPress', 'bf9e89898a40abef46220b2cd89fab84', '%s exceeds the maximum upload size for the multi-file uploader when used in your browser.', 0), +(1521, 'en', 'WordPress', '060dc976eff512760d472fbc3cc2f423', 'IO error.', 0), +(1522, 'en', 'WordPress', '11b0e87d9dba6dffd9915678ccec9535', 'Security error.', 0), +(1523, 'en', 'WordPress', '17da121a5831fbef43e5b0a5ef52cb1c', 'File canceled.', 0), +(1524, 'en', 'WordPress', '884d69a38dca21484bdb10764a87544a', 'Upload stopped.', 0), +(1525, 'en', 'WordPress', 'df04b0e50e0e512b17ca76c086b9f5a7', 'Crunching…', 0), +(1526, 'en', 'WordPress', 'a97a317b23af9ee558c7cca5c93958d7', 'moved to the trash.', 0), +(1527, 'en', 'WordPress', 'ccbcc04032c67ee46bd597278b239a32', '“%s” has failed to upload.', 0), +(1528, 'en', 'WordPress', '0829ea6734059d66e6bf87096b215dc1', 'Fullscreen', 0), +(1529, 'en', 'WordPress', 'b85aacb0e1401de4d155972d9cc47087', 'Download File', 0), +(1530, 'en', 'WordPress', '45478649ca94a2e85048a1c2713ce76a', 'Download Video', 0), +(1531, 'en', 'WordPress', '10a4f77608e4bda03999e8bfeb299584', 'Play/Pause', 0), +(1532, 'en', 'WordPress', 'db7644136327bb1ba362507a6a9f0b9f', 'Mute Toggle', 0), +(1533, 'en', 'WordPress', '6adf97f83acf6453d4a6a4b1070f3754', 'None', 0), +(1534, 'en', 'WordPress', 'b966700942bd57bf4fa40d731b3bb47f', 'Turn off Fullscreen', 0), +(1535, 'en', 'WordPress', '97ae1147c0ccb2a816eaee11e2b397d2', 'Go Fullscreen', 0), +(1536, 'en', 'WordPress', '454761c561b8a59823e80dff51fc49d1', 'Unmute', 0), +(1537, 'en', 'WordPress', '00cd7be4cb21c59179316d7844a8cfc4', 'Mute', 0), +(1538, 'en', 'WordPress', '19b1ff75dcae5221019c1d72ef950b3d', 'Captions/Subtitles', 0), +(1539, 'en', 'WordPress', 'dcfe1066398eb40086555827eda0358e', 'Strength indicator', 0), +(1540, 'en', 'WordPress', '30a3534b67a9a2c4cb3f1bb8659b321f', 'Very weak', 0), +(1541, 'en', 'WordPress', '7324e3727807d95037eb19d304fd91ec', 'Weak', 0), +(1542, 'en', 'WordPress', 'password strength: Medium', 'Medium', 0), +(1543, 'en', 'WordPress', 'c43e0fd449c758dab8f891d8e19eb1a9', 'Strong', 0), +(1544, 'en', 'WordPress', '5b0a8637935072d1ec30e60bb2cae1e6', 'Mismatch', 0), +(1545, 'en', 'WordPress', 'a4be07f83159246e9fa26048e982999a', 'Insert/edit link', 0), +(1546, 'en', 'WordPress', '06933067aafd48425d67bcb01bba5cb6', 'Update', 0), +(1547, 'en', 'WordPress', '580b21aac58f1b73cece26e272cdfbee', 'Add Link', 0), +(1548, 'en', 'WordPress', '2e46eab92bf73b409799a8baaa13f8f2', '(no title)', 0), +(1549, 'en', 'WordPress', 'f7e2fe044011a710d68a3c4e165ef7bf', 'No matches found.', 0), +(1550, 'en', 'WordPress', 'word count: words or characters?: words', 'words', 0), +(1551, 'en', 'WordPress', '695b57b17805db33fa091a8a074dfbb7', 'Save & Activate', 0), +(1552, 'en', 'WordPress', '7df2b1ddee4dfe3745b3becfdca5840f', 'Save & Publish', 0), +(1553, 'en', 'WordPress', '248336101b461380a4b2391a7625493d', 'Saved', 0), +(1554, 'en', 'WordPress', '9518057257a393dcb3440f33bef9f22a', 'Cheatin’ uh?', 0), +(1555, 'en', 'WordPress', '6c6651f3271d97a4e1d1a762905c1a96', 'Allowed Files', 0), +(1556, 'en', 'WordPress', 'Open Sans font: on or off: on', 'on', 0), +(1557, 'en', 'WordPress', 'Open Sans font: add new subset (greek, cyrillic, vietnamese): no-subset', 'no-subset', 0), +(1558, 'en', 'plugin gravityforms', '3ef61c7b2bd8bdefe44e782cd85a63cf', 'Next >', 0), +(1559, 'en', 'plugin gravityforms', '93819e8f150b7082ff169deef942fe5f', '< Prev', 0), +(1560, 'en', 'plugin gravityforms', 'be53a0541a6d36f6ecb879fa2c584b08', 'Image', 0), +(1561, 'en', 'plugin gravityforms', '8bf8854bebe108183caeb845c7676ae4', 'of', 0), +(1562, 'en', 'plugin gravityforms', 'd3d2e617335f08df83599665eef8a418', 'Close', 0), +(1563, 'en', 'plugin gravityforms', '416feffd5cb14a0cdca85835446f2c96', 'This feature requires inline frames. You have iframes disabled or your browser does not support them.', 0), +(1564, 'en', 'plugin wpml-cms-nav', '795614697a1755c518ab0f4041cc83c5', 'Sidebar Navigation', 0), +(1565, 'en', 'theme tgmpa', '8d496fe225b423ae91cafb2913fe60fc', 'Install Required Plugins', 0), +(1566, 'en', 'theme tgmpa', '4eff3a34f0ddf963f7d0610d3cb79354', 'Install Plugins', 0), +(1567, 'en', 'theme tgmpa', '07867e5fd7b858b877323ffd402ac38e', 'Installing Plugin: %s', 0), +(1568, 'en', 'theme tgmpa', 'a5971f89797a3dc6d0b203dc73e74aeb', 'Something went wrong with the plugin API.', 0), +(1569, 'en', 'theme tgmpa', 'bb885c3eedde441b8398dbc9586e09b5', 'Return to Required Plugins Installer', 0), +(1570, 'en', 'theme tgmpa', '37829e778cf85fe234ef2d80be24527a', 'Plugin activated successfully.', 0), +(1571, 'en', 'theme tgmpa', '4bb247711c901a4064f5793151db5d38', 'All plugins installed and activated successfully. %s', 0), +(1572, 'en', 'theme wooslider', 'slide: Add New %s', 'Add New %s', 0), +(1573, 'en', 'WordPress', 'opening curly double quote: “', '“', 0), +(1574, 'en', 'WordPress', 'closing curly double quote: ”', '”', 0), +(1575, 'en', 'WordPress', 'apostrophe: ’', '’', 0), +(1576, 'en', 'WordPress', 'prime: ′', '′', 0), +(1577, 'en', 'WordPress', 'double prime: ″', '″', 0), +(1578, 'en', 'WordPress', 'opening curly single quote: ‘', '‘', 0), +(1579, 'en', 'WordPress', 'en dash: –', '–', 0), +(1580, 'en', 'WordPress', 'em dash: —', '—', 0), +(1581, 'en', 'WordPress', 'dd14bf45255c8ac41b90923ad267598c', 'Main Index Template', 0), +(1582, 'en', 'WordPress', 'c350bb18c3cdfbd4e5444faa63be6586', 'Stylesheet', 0), +(1583, 'en', 'WordPress', '65bc186a570d4bef02799592c872b7d3', 'Visual Editor Stylesheet', 0), +(1584, 'en', 'WordPress', '880f9edc338d58c20db71a4ca149e940', 'Visual Editor RTL Stylesheet', 0), +(1585, 'en', 'WordPress', 'a26f1a8216765f55c355c86626a0873a', 'RTL Stylesheet', 0), +(1586, 'en', 'WordPress', '8413c683b4b27cc3f4dbd4c90329d8ba', 'Comments', 0), +(1587, 'en', 'WordPress', '9236373a3c6472574c4a4d24272e6432', 'Popup Comments', 0), +(1588, 'en', 'WordPress', 'ded40f2a77c30efc6062db0cbd857746', 'Footer', 0), +(1589, 'en', 'WordPress', 'bf50d5e661106d0abe925af3c2e6f7e7', 'Header', 0), +(1590, 'en', 'WordPress', '219ff7705d67d0c798779951dcf82e95', 'Sidebar', 0), +(1591, 'en', 'WordPress', '5d6b95203546f1e05f4250c03e211086', 'Author Template', 0), +(1592, 'en', 'WordPress', 'aea4dfd39fd61dcaf450d05ee0b0ba6f', 'Tag Template', 0), +(1593, 'en', 'WordPress', '3927b173cdbb7c43bd2939febd02012f', 'Category Template', 0), +(1594, 'en', 'WordPress', 'ec2fd1d4b88e244960104512b85ab31c', 'Page Template', 0), +(1595, 'en', 'WordPress', '32df01b9cf0491a879250b58ba2744ba', 'Search Results', 0), +(1596, 'en', 'WordPress', '96b74c49a42ae2c72bada15f266b465c', 'Search Form', 0), +(1597, 'en', 'WordPress', 'cb058a8ac3e1e0003fcf674adbdbaef1', 'Single Post', 0), +(1598, 'en', 'WordPress', 'b61a776652b36bdbd2176e392f9b3b3a', '404 Template', 0), +(1599, 'en', 'WordPress', '0e834bf99b1bb1a30a6c95bcef8a0aa2', 'Links Template', 0), +(1600, 'en', 'WordPress', 'd04e0cd57066d832af12a518be910168', 'Theme Functions', 0), +(1601, 'en', 'WordPress', 'fec5e4af8d540b72eb43f959e9870177', 'Attachment Template', 0), +(1602, 'en', 'WordPress', 'f1daa5de35312c743db4bba47fa4e3a5', 'Image Attachment Template', 0), +(1603, 'en', 'WordPress', '398ba866603f7c0b6755185ffe74b5a0', 'Video Attachment Template', 0), +(1604, 'en', 'WordPress', '23b3c660506714d17b9b06169a38589e', 'Audio Attachment Template', 0), +(1605, 'en', 'WordPress', 'c314eea177cfe60611cc82c4e25bcbfe', 'Application Attachment Template', 0), +(1606, 'en', 'WordPress', '9a5aefea59903d8b42aa4ffb150f7132', 'my-hacks.php (legacy hacks support)', 0), +(1607, 'en', 'WordPress', 'c1221766e64caafa5e61ccf3921047fe', '.htaccess (for rewrite rules )', 0), +(1608, 'en', 'WordPress', '31e876d49f82ab7813ea075beb68d802', 'Comments Template', 0), +(1609, 'en', 'WordPress', '21b4bbd7aa6d4c18622958ad7ad83397', 'Popup Comments Template', 0), +(1610, 'en', 'WordPress', 'feed link: »', '»', 0), +(1611, 'en', 'WordPress', 'b5fbdfe294b506fc6fd08c8ec96fa380', '%1$s %2$s Feed', 0), +(1612, 'en', 'WordPress', '12ce94c6bb28d6ed4191eba412825e90', '%1$s %2$s Comments Feed', 0), +(1613, 'en', 'WordPress', '39038157f6187c0a354f243360e91735', '%1$s %2$s %3$s Comments Feed', 0), +(1614, 'en', 'WordPress', '230e67845330966224471674ef20b1d9', '%1$s %2$s %3$s Category Feed', 0), +(1615, 'en', 'WordPress', 'd0c87f0848a6335f4b781bf781446351', '%1$s %2$s %3$s Tag Feed', 0), +(1616, 'en', 'WordPress', '654541dd689fb4f19d9254dc55f7695b', '%1$s %2$s Posts by %3$s Feed', 0), +(1617, 'en', 'WordPress', '7f7a8b7ee70c3244c67422b1cbe3c3e8', '%1$s %2$s Search Results for “%3$s” Feed', 0), +(1618, 'en', 'WordPress', '96c6df252efdfa0e6334d315a3b8c836', '%1$s %2$s %3$s Feed', 0), +(1619, 'en', 'WordPress', '268c10aa3a88647c8d11953fde01b177', 'Saving Draft…', 0), +(1620, 'en', 'WordPress', '3f76a323c846e340d120e8ca24d28e30', 'The changes you made will be lost if you navigate away from this page.', 0), +(1621, 'en', 'WordPress', '90589c47f06eb971d548591f23c285af', 'Custom', 0), +(1622, 'en', 'WordPress', 'f14392b01768540f6a4ca1a11b25a020', '…', 0), +(1623, 'en', 'WordPress', '54d0d7ad584d2f68657459fa49b9fa80', '(more…)', 0), +(1624, 'en', 'WordPress', '87bdf2b1731f2c475caf4afc3eae14d0', 'No categories', 0), +(1625, 'en', 'WordPress', '9e044a9008a2b4f7d0815ac716d8bc81', 'View all posts filed under %s', 0), +(1626, 'en', 'WordPress', '172933330266e4edc4737e235d321263', '%1$s %2$d', 0), +(1627, 'en', 'WordPress', '40a0b2f70a97066aa0b2f79ca64248d1', 'Edit My Profile', 0), +(1628, 'en', 'WordPress', 'b0c2b25b3312c7a32d7aa9d701b6ae1d', 'Log Out', 0), +(1629, 'en', 'WordPress', '72ac2e58fa75ec74eec521af088b71d5', 'Howdy, %1$s', 0), +(1630, 'en', 'WordPress', 'bea8d9e6a0d57c4a264756b4f9822ed9', 'My Account', 0), +(1631, 'en', 'WordPress', '8645701e256da7e5855b9cb2cf4684dd', 'About WordPress', 0), +(1632, 'en', 'WordPress', 'c33becbc6922818abb41629bf42c156c', 'WordPress.org', 0), +(1633, 'en', 'WordPress', '8e73c6b5bc5ba66d98238874d1d08cfb', 'http://wordpress.org/', 0), +(1634, 'en', 'WordPress', '5b6cf869265c13af8566f192b4ab3d2a', 'Documentation', 0), +(1635, 'en', 'WordPress', '92e94be9e239aee87374f062f227d35e', 'http://codex.wordpress.org/', 0), +(1636, 'en', 'WordPress', 'e8209ff97e2fd1fd89a08e2dbee3673c', 'Support Forums', 0), +(1637, 'en', 'WordPress', '1456808f2203afff679945a4720401b1', 'http://wordpress.org/support/', 0), +(1638, 'en', 'WordPress', 'bea4c2c8eb82d05891ddd71584881b56', 'Feedback', 0), +(1639, 'en', 'WordPress', '4cbc46fe06bda28a4e19126174ad7646', 'http://wordpress.org/support/forum/requests-and-feedback', 0), +(1640, 'en', 'WordPress', '2938c7f7e560ed972f8a4f68e80ff834', 'Dashboard', 0), +(1641, 'en', 'WordPress', '83915d1254927f41241e8630890bec6e', 'Themes', 0), +(1642, 'en', 'WordPress', '63a78ed4647f7c63c2929e35ec1c95e3', 'Customize', 0), +(1643, 'en', 'WordPress', 'fa07652cb6a5517c5dffb407c8eca014', 'Widgets', 0), +(1644, 'en', 'WordPress', '06145a21dcec7395085b033e6e169b61', 'Menus', 0), +(1645, 'en', 'WordPress', 'd65e96bfe21fb8479e04375e75a4d3e1', '%d Plugin Update', 0), +(1646, 'en', 'WordPress', '9d2c6e7ff8745ac410937f9812aeb47a', '%s comments awaiting moderation', 0), +(1647, 'en', 'WordPress', 'add new from admin bar: User', 'User', 0), +(1648, 'en', 'WordPress', 'admin bar menu group label: New', 'New', 0), +(1649, 'en', 'WordPress', 'e1a8aa054be5be9312d644cc4b041ff9', 'Skip to toolbar', 0), +(1650, 'en', 'WordPress', 'e63435561a8172399387a66660af0806', 'Top navigation toolbar.', 0), +(1651, 'en', 'plugin gravityforms', '1e3dee0634d7a42e5d6753ade55fefd3', 'This field is for validation purposes and should be left unchanged.', 0), +(1652, 'en', 'plugin gravityforms', '518395ba1e93b3376f8caddab3171685', 'click to duplicate this field', 0), +(1653, 'en', 'plugin gravityforms', '06381e230b567e9dbe01f7848e4d893d', 'click to delete this field', 0), +(1654, 'en', 'plugin gravityforms', 'b5b37d225f2a48b7109e21f4d06fcf4f', 'Single Line Text', 0), +(1655, 'en', 'plugin gravityforms', 'ce8ae9da5b7cd6c3df2929543a9af92d', 'Email', 0), +(1656, 'en', 'plugin gravityforms', 'bc6be52a80b09e4f15695172b83b3a6f', 'Paragraph Text', 0), +(1657, 'en', 'plugin gravityforms', 'a4d3b161ce1309df1c4e25df28694b7b', 'Submit', 0), +(1658, 'en', 'plugin gravityforms', '5a72c22d8bf40f024b6df490b100fb3c', 'Australian Dollar', 0), +(1659, 'en', 'plugin gravityforms', '24fab478439c08246c967718b9c2e9c9', 'Brazilian Real', 0), +(1660, 'en', 'plugin gravityforms', 'd74d703c1a1c41c454d5fdf7449b0ad1', 'Canadian Dollar', 0), +(1661, 'en', 'plugin gravityforms', '7539d6d8b51fee80dc81e46e0a3b4075', 'Czech Koruna', 0), +(1662, 'en', 'plugin gravityforms', '2110b2d4ab2fe4ef4180b413cc8947e8', 'Danish Krone', 0), +(1663, 'en', 'plugin gravityforms', '3e823fac7473e42888932c7761c224fc', 'Euro', 0), +(1664, 'en', 'plugin gravityforms', 'b237c23a2fb4fa9cca352e1ed4e9812f', 'Hong Kong Dollar', 0), +(1665, 'en', 'plugin gravityforms', 'a4f21bb2aa5dbc7a52e15b3d47a0735b', 'Hungarian Forint', 0), +(1666, 'en', 'plugin gravityforms', '36d4b3bae5135e7756b545783c00954b', 'Israeli New Sheqel', 0), +(1667, 'en', 'plugin gravityforms', 'a753ba91b1557de6930d8972b2e16bd6', 'Japanese Yen', 0), +(1668, 'en', 'plugin gravityforms', 'e12c176a6390cc50c6bc10dc4299d297', 'Malaysian Ringgit', 0), +(1669, 'en', 'plugin gravityforms', '3e0e19191835092dc11254c519e901d7', 'Mexican Peso', 0), +(1670, 'en', 'plugin gravityforms', '0224fbdf63721a050759cd59a8a9fddd', 'Norwegian Krone', 0), +(1671, 'en', 'plugin gravityforms', 'b69b040eacbb10016ea6ff6bb78e3d52', 'New Zealand Dollar', 0), +(1672, 'en', 'plugin gravityforms', '21deb8b3dceb859c9092bd8720c46504', 'Philippine Peso', 0), +(1673, 'en', 'plugin gravityforms', '521458528f5faf39e1d25c32098d5c0c', 'Polish Zloty', 0), +(1674, 'en', 'plugin gravityforms', '14fffa9dfc344af7f580d6a2c91507d4', 'Pound Sterling', 0), +(1675, 'en', 'plugin gravityforms', '11bca8d16b4a87096df210ae9aaaa323', 'Singapore Dollar', 0), +(1676, 'en', 'plugin gravityforms', '33ee712c3451768da98c4e7114dc19d3', 'Swedish Krona', 0), +(1677, 'en', 'plugin gravityforms', '74086e9575acbfc9716ce2022d71a172', 'Swiss Franc', 0), +(1678, 'en', 'plugin gravityforms', 'f61aa5d4cce6750834bd0e47d665cdbc', 'Taiwan New Dollar', 0), +(1679, 'en', 'plugin gravityforms', 'e91203579f334586b5de2bb59479c7e0', 'Thai Baht', 0), +(1680, 'en', 'plugin gravityforms', 'fe1757afe51000356591cb256a5c65f4', 'U.S. Dollar', 0), +(1681, 'en', 'theme double-r-group', '642fa08fba951378dca25cf328a60b56', 'Image gallery', 1), +(1682, 'en', 'theme double-r-group', 'dd1f775e443ff3b9a89270713580a51b', 'Previous', 1), +(1683, 'en', 'theme double-r-group', '10ac3d04253ef7e1ddc73e6091c0cd55', 'Next', 1), +(1684, 'en', 'WordPress', '0974d2c2f4c6420089275c2a41c4b41c', 'Pages:', 0), +(1685, 'en', 'WordPress', '374bea6cf8bd1e8fd64570b629cc6562', 'Next page', 0), +(1686, 'en', 'WordPress', '16ded2dc32322d80ce2362a47f4d7ef4', 'Previous page', 0), +(1687, 'en', 'Widgets', 'widget title - af1b98adf7f686b84cd0b443e022b7a0', '', 0), +(1722, 'en', 'Widgets', 'widget title - baa7a52965b99778f38ef37f235e9053', 'asas', 0), +(1721, 'en', 'Widgets', 'widget title - 898b47bd8333eeac1acfb12b8ea11943', 'Caballos por razas', 0), +(1690, 'en', 'WordPress', '6770c747a98d3821494d455352f90d14', 'Posts by %s', 0), +(1691, 'en', 'WordPress', '2fa470c1f30537dd5ab5cec8a93a1ccc', 'ERROR: The password you entered for the username %1$s is incorrect. Lost your password?', 0), +(1692, 'en', 'WordPress', '3bbbad631029e3575da7a151bba4f37c', 'Log In', 0), +(1693, 'en', 'WordPress', 'ca4765209dd2f16dce065d130cb158ad', 'Powered by WordPress', 0), +(1694, 'en', 'WordPress', 'f6039d44b29456b20f8f373155ae4973', 'Username', 0), +(1695, 'en', 'WordPress', 'dc647eb65e6711e155375218212b3964', 'Password', 0), +(1696, 'en', 'WordPress', 'e857817b07c27f3c57caa6c40f7499d4', 'Remember Me', 0), +(1697, 'en', 'WordPress', 'f97a400e851039612143280e1a9e4982', 'You have logged in successfully.', 0), +(1698, 'en', 'theme double-r-group', 'b83c6a2891d61c7c85740d174e63fe5a', 'Add New Horse', 1), +(1699, 'en', 'theme double-r-group', '0cb1116e0e3359b02d66685d67de75fa', 'Edit Horse', 1), +(1700, 'en', 'theme double-r-group', '756b3bdfdc6c0f33b4441824a3caa69c', 'New Horse', 1), +(1701, 'en', 'theme double-r-group', '75aa1e80443dd1145389881af846e102', 'View Horse', 1), +(1702, 'en', 'theme double-r-group', '6f1930431edc0cb96f07121d0f6638b1', 'Search Horses', 1), +(1703, 'en', 'theme double-r-group', 'f0d3c34bd9ab51287a47839c3599133a', 'No Horses found', 1), +(1704, 'en', 'theme double-r-group', 'e444f933d7edb94424e862fb751179fb', 'No Horses found in Trash', 1), +(1705, 'en', 'theme double-r-group', 'ccd60527ba2c9e372a715b16b59197f9', 'Parent Horse', 1), +(1720, 'en', 'Widgets', 'widget title - 0a25e3680d265c53368dde50f60c925f', 'Contacto', 0), +(1706, 'en', 'theme double-r-group', 'f3f43e30c8c7d78c6ac0173515e57a00', 'Filters', 1), +(1707, 'en', 'theme double-r-group', 'a19abdd6c9cec47663ba630959799af0', 'Horse Options', 1), +(1708, 'en', 'theme double-r-group', '62f5d708d6ad1fa1ddd9429a65cccbea', 'All categories', 1), +(1709, 'en', 'theme double-r-group', 'aeac069962b532af367f6916553c660a', 'Horse categories', 1), +(1710, 'en', 'theme double-r-group', 'c32bcbf6d7f9194c2e4bb2ed218ceab7', 'Choose what horse category you want to display on this page. Leave blank for all categories.', 1), +(1711, 'en', 'theme double-r-group', 'b69082840cb4c3ca749e9f3760c3a227', 'All breeds', 1), +(1712, 'en', 'theme double-r-group', '365c2127b3fa7d33f1a418bd099f0c06', 'All ages', 1), +(1713, 'en', 'theme double-r-group', 'b6228717feeab7967285f262fea1aecf', 'All genders', 1), +(1714, 'en', 'theme double-r-group', '054d47e7e645532ada0243db651912e8', 'Related horses', 1), +(1715, 'en', 'theme double-r-group', '79adaa2947747efbe1e376210b3be4d3', 'Breed', 1), +(1716, 'en', 'theme double-r-group', '019ec3132cdf8ee0f2e2a75cf5d3e459', 'Gender', 1), +(1717, 'en', 'theme double-r-group', '9d8d2d5ab12b515182a505f54db7f538', 'Age', 1), +(1718, 'en', 'theme double-r-group', '1bd4e734c62ac931c1be15b08a079544', 'Video gallery', 1), +(1723, 'en', 'Widgets', 'widget title - 7450c540d4c3fef04b723fdeadbc6842', 'Recent Tweets', 0), +(1724, 'en', 'Widgets', 'widget title - 341825a909ae0a19dd9dbea98ef3e021', '', 0), +(1725, 'en', 'WordPress', 'taxonomy singular name: Géneros', 'Géneros', 1), +(1726, 'en', 'WordPress', 'taxonomy general name: Géneros', 'Géneros', 1), +(1727, 'en', 'WordPress', 'taxonomy singular name: Razas', 'Razas', 1), +(1728, 'en', 'WordPress', 'taxonomy general name: Razas', 'Razas', 1), +(1729, 'en', 'LayerSlider WP', ' layer on slide #1 in slider #3', 'Cría de caballos para competición', 0), +(1730, 'en', 'LayerSlider WP', ' layer on slide #1 in slider #3', 'fs dfsd fsf sf sf sf sdf', 0), +(1731, 'en', 'LayerSlider WP', ' layer on slide #1 in slider #3', ' ', 0), +(1732, 'en', 'LayerSlider WP', ' layer on slide #2 in slider #3', 'Instalaciones para el desarrollo y el entrenamiento de los caballos ', 0); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_string_positions` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_string_positions` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `string_id` bigint(20) NOT NULL, + `kind` tinyint(4) DEFAULT NULL, + `position_in_page` varchar(255) NOT NULL, + PRIMARY KEY (`id`), + KEY `string_id` (`string_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2270 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_string_positions` +-- + +INSERT INTO `drgrp_icl_string_positions` (`id`, `string_id`, `kind`, `position_in_page`) VALUES +(1464, 1177, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::94'), +(6, 28, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/admin/classes/class.options_machine.php::475'), +(7, 29, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/admin/front-end/options.php::47'), +(8, 30, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/admin/front-end/options.php::72'), +(9, 31, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/admin/functions/functions.mediauploader.php::20'), +(10, 32, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/admin/functions/functions.mediauploader.php::210'), +(11, 33, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/admin/functions/functions.mediauploader.php::210'), +(2268, 1291, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/tabs/tabs.php::71'), +(2269, 1313, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/user-welcome.php::7'), +(2266, 1289, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/tabs/tabs.php::58'), +(2267, 1290, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/tabs/tabs.php::65'), +(2265, 1288, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/tabs/tabs.php::58'), +(19, 41, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/author.php::46'), +(21, 43, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/author.php::57'), +(2262, 1247, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount-nav.php::5'), +(2263, 1248, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount-nav.php::10'), +(24, 46, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/content-search.php::19'), +(2261, 1228, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-login.php::90'), +(26, 48, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/content-single-topic-lead.php::18'), +(27, 49, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/content-single-topic-lead.php::22'), +(2264, 1287, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/tabs/tabs.php::52'), +(29, 51, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply-move.php::22'), +(30, 52, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply-move.php::39'), +(31, 53, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply-move.php::40'), +(32, 54, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply-move.php::56'), +(33, 55, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply-move.php::27'), +(34, 56, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply-move.php::31'), +(35, 57, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply-move.php::35'), +(36, 58, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply-move.php::47'), +(37, 59, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply-move.php::67'), +(38, 60, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply-move.php::71'), +(39, 61, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply-move.php::84'), +(40, 62, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply-move.php::84'), +(41, 63, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply.php::27'), +(42, 64, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply.php::74'), +(43, 65, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply.php::142'), +(44, 66, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply.php::150'), +(45, 67, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply.php::44'), +(46, 68, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply.php::55'), +(47, 69, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply.php::70'), +(48, 70, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply.php::109'), +(49, 71, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply.php::113'), +(50, 72, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply.php::158'), +(51, 73, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-reply.php::158'), +(52, 74, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::22'), +(53, 75, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::49'), +(54, 76, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::27'), +(55, 77, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::28'), +(56, 78, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::32'), +(57, 79, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::36'), +(58, 80, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::40'), +(59, 81, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::55'), +(60, 82, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::63'), +(61, 83, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::70'), +(62, 84, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::75'), +(63, 85, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::80'), +(64, 86, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::105'), +(65, 87, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-merge.php::105'), +(66, 88, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-split.php::22'), +(67, 89, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-split.php::40'), +(68, 90, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-split.php::27'), +(69, 91, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-split.php::31'), +(70, 92, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-split.php::35'), +(71, 93, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-split.php::74'), +(72, 94, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-split.php::79'), +(73, 95, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-split.php::84'), +(74, 96, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::18'), +(75, 97, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::73'), +(76, 98, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::101'), +(77, 99, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::22'), +(78, 100, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::25'), +(79, 101, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::29'), +(80, 102, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::35'), +(81, 103, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::40'), +(82, 104, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::59'), +(83, 105, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::62'), +(84, 106, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::68'), +(85, 107, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::88'), +(86, 108, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::91'), +(87, 109, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::94'), +(88, 110, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::95'), +(89, 111, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic-tag.php::45'), +(90, 112, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic.php::39'), +(91, 113, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic.php::41'), +(92, 114, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic.php::55'), +(93, 115, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic.php::97'), +(94, 116, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic.php::41'), +(95, 117, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic.php::94'), +(96, 118, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic.php::113'), +(97, 119, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic.php::125'), +(98, 120, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic.php::216'), +(99, 121, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic.php::216'), +(100, 122, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-forums.php::19'), +(101, 123, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-forums.php::20'), +(102, 124, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-forums.php::21'), +(103, 125, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-forums.php::21'), +(104, 126, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-forums.php::22'), +(105, 127, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-search-forum.php::30'), +(106, 128, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-search-forum.php::26'), +(2260, 1227, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-login.php::81'), +(108, 130, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-search-reply.php::42'), +(109, 131, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-search-topic.php::48'), +(110, 132, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-search-topic.php::53'), +(111, 133, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-search-topic.php::57'), +(112, 130, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-single-reply.php::48'), +(113, 135, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-single-topic.php::60'), +(114, 136, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-single-topic.php::68'), +(115, 137, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-topics.php::20'), +(116, 138, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-details.php::40'), +(117, 139, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-details.php::46'), +(118, 140, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-details.php::52'), +(119, 141, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-details.php::63'), +(120, 142, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-details.php::73'), +(121, 143, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-details.php::80'), +(122, 144, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-details.php::40'), +(123, 145, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-details.php::46'), +(124, 146, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-details.php::52'), +(125, 147, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-details.php::63'), +(126, 148, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-details.php::73'), +(127, 149, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-details.php::80'), +(2258, 1225, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-login.php::53'), +(2259, 1226, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-login.php::63'), +(2257, 1224, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-login.php::40'), +(2255, 1222, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-login.php::26'), +(2256, 1223, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-login.php::31'), +(2254, 1217, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-change-password.php::23'), +(2251, 1167, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-checkout.php::92'), +(2252, 214, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/content-product.php::65'), +(2253, 1216, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-change-password.php::21'), +(2250, 1166, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-checkout.php::69'), +(2248, 1164, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-checkout.php::42'), +(2249, 1165, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-checkout.php::48'), +(2247, 1163, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-checkout.php::36'), +(2246, 1125, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::156'), +(2244, 1120, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::29'), +(2245, 1124, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::153'), +(2243, 1117, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::22'), +(2241, 1113, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/widgets/tabs_widget.php::49'), +(2242, 1114, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/widgets/tabs_widget.php::132'), +(2239, 1111, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/widgets/contact_info.php::53'), +(2240, 1112, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/widgets/tabs_widget.php::46'), +(2238, 1110, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/widgets/contact_info.php::45'), +(2237, 1109, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/widgets/contact_info.php::41'), +(2236, 1108, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/widgets/contact_info.php::37'), +(2235, 1107, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/single-wpfc_sermon.php::298'), +(2234, 1106, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/single-wpfc_sermon.php::282'), +(2233, 1105, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/single-wpfc_sermon.php::179'), +(2232, 1104, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/single-avada_portfolio.php::291'), +(2231, 1103, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/single-avada_portfolio.php::276'), +(2230, 1102, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/single-avada_portfolio.php::270'), +(2229, 1101, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/single-avada_portfolio.php::262'), +(2228, 1100, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/single-avada_portfolio.php::254'), +(2227, 1099, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/single-avada_portfolio.php::246'), +(2226, 1098, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/single-avada_portfolio.php::243'), +(2224, 1096, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/side-navigation.php::56'), +(2225, 1097, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/single-avada_portfolio.php::239'), +(2221, 1093, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/search.php::72'), +(2222, 1094, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/search.php::86'), +(2223, 1095, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/search.php::87'), +(1407, 530, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1126'), +(2220, 1092, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/search.php::68'), +(2219, 1091, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/portfolio-one-column-text.php::203'), +(2218, 1090, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/portfolio-one-column-text.php::201'), +(2217, 1089, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/header.php::982'), +(2216, 1088, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/header.php::980'), +(2215, 1087, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/header.php::982'), +(2214, 1086, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/header.php::980'), +(2213, 1085, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/header.php::978'), +(2212, 1084, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/header.php::965'), +(2211, 1083, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/header.php::947'), +(2210, 1081, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::870'), +(2209, 1080, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::868'), +(2208, 1079, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::868'), +(2207, 1078, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::849'), +(2206, 1077, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::848'), +(2205, 1076, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::847'), +(2204, 1075, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::846'), +(2203, 1074, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::843'), +(2202, 1073, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::843'), +(2201, 1072, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::696'), +(2200, 1071, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::695'), +(2199, 1070, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::694'), +(2198, 1069, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::693'), +(2197, 1068, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::689'), +(2196, 1067, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::688'), +(2195, 1066, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::406'), +(2194, 1065, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::316'), +(2192, 1063, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::311'), +(2193, 1064, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::311'), +(2188, 236, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/headers/header-main-menu.php::64'), +(2189, 237, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/headers/header-menu.php::44'), +(2191, 1062, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::311'), +(2190, 238, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/headers/header-menu.php::46'), +(2187, 235, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/headers/header-main-menu.php::63'), +(2185, 233, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/headers/header-main-menu.php::29'), +(2186, 234, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/headers/header-main-menu.php::38'), +(2183, 231, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/headers/header-main-menu.php::15'), +(2184, 232, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/headers/header-main-menu.php::26'), +(2182, 230, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/headers/header-main-menu.php::23'), +(2180, 228, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/custom_functions.php::185'), +(2181, 229, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/headers/header-main-menu.php::20'), +(217, 239, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/ambrosite-post-link-plus.php::302'), +(218, 240, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/ambrosite-post-link-plus.php::302'), +(219, 241, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/envato-wordpress-toolkit-library/class-envato-protected-api.php::67'), +(220, 242, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/envato-wordpress-toolkit-library/class-envato-protected-api.php::71'), +(221, 243, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/envato-wordpress-toolkit-library/class-envato-protected-api.php::96'), +(222, 244, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/envato-wordpress-toolkit-library/class-envato-protected-api.php::167'), +(223, 245, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/envato-wordpress-toolkit-library/class-envato-wordpress-theme-upgrader.php::280'), +(224, 246, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/envato-wordpress-toolkit-library/class-envato-wordpress-theme-upgrader.php::291'), +(225, 247, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/parsers.php::42'), +(226, 248, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/parsers.php::43'), +(227, 249, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/parsers.php::84'), +(228, 250, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::134'), +(229, 251, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::135'), +(230, 252, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::178'), +(231, 253, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::178'), +(232, 254, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::179'), +(233, 255, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::199'), +(234, 256, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::215'), +(235, 257, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::240'), +(236, 258, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::269'), +(237, 259, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::324'), +(238, 260, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::374'), +(239, 261, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::425'), +(240, 262, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::465'), +(241, 263, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::511'), +(242, 264, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::537'), +(243, 265, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::559'), +(244, 266, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::618'), +(245, 267, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::790'), +(246, 268, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::853'), +(247, 269, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::866'), +(248, 270, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::910'), +(249, 271, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::916'), +(250, 272, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::923'), +(251, 273, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::928'), +(252, 274, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::934'), +(253, 275, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::1033'), +(254, 276, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::1040'), +(255, 277, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::1055'), +(256, 278, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::1056'), +(257, 279, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::266'), +(258, 280, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::267'), +(259, 281, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::279'), +(260, 282, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::282'), +(261, 283, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::299'), +(262, 284, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::310'), +(263, 285, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::313'), +(264, 286, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::321'), +(265, 287, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::323'), +(266, 288, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::783'), +(267, 289, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/importer/wordpress-importer.php::286'), +(268, 290, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::14'), +(269, 291, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::16'), +(270, 292, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::28'), +(271, 293, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::30'), +(272, 294, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::42'), +(273, 295, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::44'), +(274, 296, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::51'), +(275, 297, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::53'), +(276, 298, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::67'), +(277, 299, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::69'), +(278, 300, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::79'), +(279, 301, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::81'), +(280, 302, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::92'), +(281, 303, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::94'), +(282, 304, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::107'), +(283, 305, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::109'), +(284, 306, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::115'), +(285, 307, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::117'), +(286, 308, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::123'), +(287, 309, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::125'), +(288, 310, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::134'), +(289, 311, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::136'), +(290, 312, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::142'), +(291, 313, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::144'), +(292, 314, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::151'), +(293, 315, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::153'), +(294, 316, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::160'), +(295, 317, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::162'), +(296, 318, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::170'), +(297, 319, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::172'), +(298, 320, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::178'), +(299, 321, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::180'), +(300, 322, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::186'), +(301, 323, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::188'), +(302, 324, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::199'), +(303, 325, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::201'), +(304, 326, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::208'), +(305, 327, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::210'), +(306, 328, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::216'), +(307, 329, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::218'), +(308, 330, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::225'), +(309, 331, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::227'), +(310, 332, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::240'), +(311, 333, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::242'), +(312, 334, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::249'), +(313, 335, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::251'), +(314, 336, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::257'), +(315, 337, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::259'), +(316, 338, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::265'), +(317, 339, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::267'), +(318, 340, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::274'), +(319, 341, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::276'), +(320, 342, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::282'), +(321, 343, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::284'), +(322, 344, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::291'), +(323, 345, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::293'), +(324, 346, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::305'), +(325, 347, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::307'), +(326, 348, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::309'), +(327, 349, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::310'), +(328, 350, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::311'), +(329, 351, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::318'), +(330, 352, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::320'), +(331, 353, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::326'), +(332, 354, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::328'), +(333, 355, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::337'), +(334, 356, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::339'), +(335, 357, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::349'), +(336, 358, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::351'), +(337, 359, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::361'), +(338, 360, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::363'), +(339, 361, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::377'); +INSERT INTO `drgrp_icl_string_positions` (`id`, `string_id`, `kind`, `position_in_page`) VALUES +(340, 362, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::379'), +(341, 363, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::387'), +(342, 364, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::389'), +(343, 365, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::391'), +(344, 366, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::392'), +(345, 367, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::393'), +(346, 368, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::407'), +(347, 369, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::409'), +(348, 370, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::411'), +(349, 371, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::412'), +(350, 372, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::413'), +(351, 373, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::414'), +(352, 374, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::425'), +(353, 375, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::427'), +(354, 376, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::432'), +(355, 377, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::434'), +(356, 378, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::442'), +(357, 379, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::444'), +(358, 380, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::457'), +(359, 381, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::459'), +(360, 382, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::466'), +(361, 383, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::468'), +(362, 384, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::475'), +(363, 385, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::477'), +(364, 386, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::484'), +(365, 387, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::486'), +(366, 388, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::612'), +(367, 389, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::614'), +(368, 390, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::626'), +(369, 391, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::628'), +(370, 392, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::644'), +(371, 393, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::646'), +(372, 394, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::675'), +(373, 395, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::677'), +(374, 396, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::685'), +(375, 397, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::687'), +(376, 398, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::696'), +(377, 399, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::698'), +(378, 400, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::713'), +(379, 401, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::715'), +(380, 402, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::720'), +(381, 403, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::722'), +(382, 404, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::735'), +(383, 405, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::737'), +(384, 406, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::813'), +(385, 407, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::815'), +(386, 408, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::820'), +(387, 409, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::822'), +(388, 410, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::830'), +(389, 411, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::832'), +(390, 412, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::841'), +(391, 413, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::843'), +(392, 414, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::852'), +(393, 415, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::854'), +(394, 416, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::859'), +(395, 417, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::861'), +(396, 418, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::869'), +(397, 419, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::871'), +(398, 420, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::876'), +(399, 421, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::878'), +(400, 422, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::883'), +(401, 423, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::885'), +(402, 424, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::890'), +(403, 425, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::892'), +(404, 426, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::897'), +(405, 427, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::899'), +(406, 428, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::904'), +(407, 429, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::906'), +(408, 430, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::912'), +(409, 431, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::914'), +(410, 432, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::920'), +(411, 433, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::922'), +(412, 434, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::931'), +(413, 435, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::938'), +(414, 436, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::948'), +(415, 437, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::957'), +(416, 438, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::959'), +(417, 439, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::988'), +(418, 440, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::995'), +(419, 441, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1002'), +(420, 442, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1009'), +(421, 443, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1016'), +(422, 444, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1023'), +(423, 445, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1031'), +(424, 446, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1044'), +(425, 447, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1046'), +(426, 448, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1053'), +(427, 449, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1066'), +(428, 450, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1075'), +(429, 451, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1077'), +(430, 452, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1087'), +(431, 453, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1097'), +(432, 454, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1112'), +(433, 455, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1114'), +(434, 456, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1126'), +(435, 457, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1128'), +(436, 458, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1136'), +(437, 459, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1138'), +(438, 460, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1154'), +(439, 461, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1156'), +(440, 462, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1164'), +(441, 463, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1166'), +(442, 464, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1174'), +(443, 465, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1176'), +(444, 466, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1184'), +(445, 467, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1186'), +(446, 468, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1196'), +(447, 469, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1204'), +(448, 470, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1206'), +(449, 471, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1214'), +(450, 472, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1216'), +(451, 473, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1226'), +(452, 474, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1236'), +(453, 475, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1246'), +(454, 476, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1256'), +(455, 477, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1266'), +(456, 478, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1274'), +(457, 479, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1276'), +(458, 480, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1284'), +(459, 481, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1286'), +(460, 482, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1294'), +(461, 483, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1296'), +(462, 484, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1304'), +(463, 485, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1306'), +(464, 486, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1314'), +(465, 487, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1316'), +(466, 488, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1324'), +(467, 489, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1326'), +(468, 490, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1344'), +(469, 491, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1346'), +(470, 492, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1364'), +(471, 493, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1366'), +(472, 494, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1374'), +(473, 495, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1376'), +(474, 496, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1384'), +(475, 497, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1386'), +(476, 498, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1394'), +(477, 499, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1396'), +(478, 500, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1404'), +(479, 501, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/config/defaults.php::1406'), +(480, 502, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/layerslider.php::100'), +(481, 503, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/layerslider.php::116'), +(482, 504, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/layerslider.php::121'), +(483, 505, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::23'), +(484, 506, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::25'), +(485, 507, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::30'), +(486, 508, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::38'), +(487, 509, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::39'), +(488, 510, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::45'), +(489, 511, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::55'), +(490, 512, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::56'), +(491, 513, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::58'), +(492, 514, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::70'), +(493, 515, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::75'), +(494, 516, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::77'), +(495, 517, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/skin_editor.php::78'), +(496, 518, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::84'), +(497, 519, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::92'), +(498, 520, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::95'), +(499, 521, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::98'), +(500, 522, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::101'), +(501, 523, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::104'), +(502, 524, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::106'), +(503, 525, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::130'), +(504, 526, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::154'), +(505, 527, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::155'), +(506, 528, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::168'), +(507, 529, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::169'), +(508, 530, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::169'), +(509, 531, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::180'), +(510, 532, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::198'), +(511, 533, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::200'), +(512, 534, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::205'), +(513, 535, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::212'), +(514, 536, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::228'), +(515, 537, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::245'), +(516, 538, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::255'), +(517, 539, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::255'), +(518, 540, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::283'), +(519, 541, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::284'), +(520, 542, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::285'), +(521, 543, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::289'), +(522, 544, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::290'), +(523, 545, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::291'), +(524, 546, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::292'), +(525, 547, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::293'), +(526, 548, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::314'), +(527, 549, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::315'), +(528, 550, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::316'), +(529, 551, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::317'), +(530, 552, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::325'), +(531, 553, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::326'), +(532, 554, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::327'), +(533, 555, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::328'), +(534, 556, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::329'), +(535, 557, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::330'), +(536, 558, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::331'), +(537, 559, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::347'), +(538, 560, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::348'), +(539, 561, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::354'), +(540, 562, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::358'), +(541, 563, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::360'), +(542, 564, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::386'), +(543, 565, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::387'), +(544, 566, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::389'), +(545, 567, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::434'), +(546, 568, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::473'), +(547, 569, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::512'), +(548, 570, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::517'), +(549, 571, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::517'), +(550, 572, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::538'), +(551, 573, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::549'), +(552, 574, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::560'), +(553, 575, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::571'), +(554, 576, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::587'), +(555, 577, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::588'), +(556, 578, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::591'), +(557, 579, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::625'), +(558, 580, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::637'), +(559, 581, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::647'), +(560, 582, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::657'), +(561, 583, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::667'), +(562, 584, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::677'), +(563, 585, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::687'), +(564, 586, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::697'), +(565, 587, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::707'), +(566, 588, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit.php::718'), +(567, 589, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_posts.php::34'), +(568, 590, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_posts.php::53'), +(569, 591, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_posts.php::65'), +(570, 592, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_posts.php::77'), +(571, 593, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_posts.php::105'), +(572, 594, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_posts.php::106'), +(573, 595, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_posts.php::118'), +(574, 596, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_posts.php::120'), +(575, 597, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_posts.php::125'), +(576, 598, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_posts.php::128'), +(577, 599, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::6'), +(578, 600, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::16'), +(579, 601, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::17'), +(580, 602, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::18'), +(581, 603, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::19'), +(582, 346, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::20'), +(583, 605, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::21'), +(584, 606, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::30'), +(585, 607, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::41'), +(586, 608, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::52'), +(587, 609, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::72'), +(588, 610, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::83'), +(589, 611, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::94'), +(590, 612, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::105'), +(591, 613, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::109'), +(592, 614, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::116'), +(593, 615, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::149'), +(594, 616, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::174'), +(595, 617, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::180'), +(596, 618, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::196'), +(597, 619, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::207'), +(598, 620, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::233'), +(599, 621, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_edit_settings.php::244'), +(600, 622, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::56'), +(601, 623, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::57'), +(602, 624, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::58'), +(603, 625, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::59'), +(604, 626, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::60'), +(605, 627, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::61'), +(606, 628, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::62'), +(607, 629, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::63'), +(608, 630, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::64'), +(609, 631, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::65'), +(610, 632, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::66'), +(611, 633, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::74'), +(612, 634, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::76'), +(613, 635, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::77'), +(614, 636, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::86'), +(615, 637, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::87'), +(616, 638, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::88'), +(617, 639, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::102'), +(618, 640, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::103'), +(619, 641, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::113'), +(620, 642, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::115'), +(621, 643, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::116'), +(622, 644, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::130'), +(623, 645, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::131'), +(624, 646, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::132'), +(625, 647, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::134'), +(626, 648, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::135'), +(627, 649, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::161'), +(628, 650, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::165'), +(629, 651, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::168'), +(630, 652, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::172'), +(631, 653, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::181'), +(632, 654, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::188'); +INSERT INTO `drgrp_icl_string_positions` (`id`, `string_id`, `kind`, `position_in_page`) VALUES +(633, 655, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::189'), +(634, 656, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::190'), +(635, 657, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::192'), +(636, 658, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::194'), +(637, 659, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::202'), +(638, 660, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::221'), +(639, 661, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::225'), +(640, 662, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::228'), +(641, 663, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::230'), +(642, 664, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::238'), +(643, 665, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::241'), +(644, 666, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::244'), +(645, 667, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::253'), +(646, 668, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::266'), +(647, 669, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::271'), +(648, 670, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::275'), +(649, 671, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::277'), +(650, 672, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::278'), +(651, 673, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::279'), +(652, 674, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::280'), +(653, 675, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::281'), +(654, 676, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::284'), +(655, 677, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::285'), +(656, 678, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::285'), +(657, 679, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::288'), +(658, 680, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::302'), +(659, 681, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::308'), +(660, 682, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::309'), +(661, 683, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::310'), +(662, 684, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::311'), +(663, 685, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::312'), +(664, 686, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::313'), +(665, 687, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::315'), +(666, 688, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::339'), +(667, 689, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::340'), +(668, 690, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::346'), +(669, 691, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::348'), +(670, 692, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::351'), +(671, 693, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::353'), +(672, 694, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::356'), +(673, 695, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::358'), +(674, 696, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::361'), +(675, 697, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::363'), +(676, 698, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::366'), +(677, 699, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::368'), +(678, 700, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::383'), +(679, 701, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::394'), +(680, 702, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::406'), +(681, 703, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::416'), +(682, 704, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::418'), +(683, 705, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::423'), +(684, 706, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::430'), +(685, 707, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::431'), +(686, 708, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::440'), +(687, 709, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::442'), +(688, 710, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::444'), +(689, 711, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::445'), +(690, 712, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::446'), +(691, 713, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::447'), +(692, 714, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::450'), +(693, 715, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::450'), +(694, 716, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::474'), +(695, 717, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/slider_list.php::474'), +(696, 718, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/style_editor.php::38'), +(697, 719, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/style_editor.php::53'), +(698, 720, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/style_editor.php::62'), +(699, 721, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/style_editor.php::64'), +(700, 722, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/style_editor.php::77'), +(701, 723, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/style_editor.php::80'), +(702, 724, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::77'), +(703, 725, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::82'), +(704, 726, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::83'), +(705, 727, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::86'), +(706, 728, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::87'), +(707, 729, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::88'), +(708, 730, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::89'), +(709, 731, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::94'), +(710, 732, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::100'), +(711, 733, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::101'), +(712, 734, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::103'), +(713, 735, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::104'), +(714, 736, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::105'), +(715, 737, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::106'), +(716, 738, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::107'), +(717, 739, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::108'), +(718, 740, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::115'), +(719, 741, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::117'), +(720, 742, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::119'), +(721, 743, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::127'), +(722, 744, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::129'), +(723, 745, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::137'), +(724, 746, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::140'), +(725, 637, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::173'), +(726, 748, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::175'), +(727, 749, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::187'), +(728, 750, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::229'), +(729, 751, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::231'), +(730, 752, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::232'), +(731, 753, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::233'), +(732, 754, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::263'), +(733, 755, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::322'), +(734, 756, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::328'), +(735, 757, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::403'), +(736, 758, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::445'), +(737, 759, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::446'), +(738, 760, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::448'), +(739, 761, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::453'), +(740, 762, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::459'), +(741, 763, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::460'), +(742, 764, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::461'), +(743, 765, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::462'), +(744, 766, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::473'), +(745, 767, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::500'), +(746, 768, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::516'), +(747, 769, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::518'), +(748, 770, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::525'), +(749, 771, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::535'), +(750, 772, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::544'), +(751, 773, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::880'), +(752, 774, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::881'), +(753, 775, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::1050'), +(754, 776, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::1066'), +(755, 777, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::1091'), +(756, 778, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/views/transition_builder.php::1091'), +(757, 779, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/actions.php::556'), +(758, 780, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/actions.php::556'), +(759, 781, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/actions.php::570'), +(760, 782, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/actions.php::570'), +(761, 783, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/compatibility.php::16'), +(762, 784, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/compatibility.php::18'), +(763, 785, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/compatibility.php::20'), +(764, 786, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/menus.php::45'), +(765, 787, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/menus.php::50'), +(766, 788, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/notices.php::22'), +(767, 789, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/notices.php::20'), +(768, 790, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/notices.php::25'), +(769, 791, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/shortcodes.php::10'), +(770, 792, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/shortcodes.php::23'), +(771, 793, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/widgets.php::10'), +(772, 794, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/widgets.php::12'), +(773, 795, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/widgets.php::33'), +(774, 796, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/widgets.php::39'), +(775, 797, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/widgets.php::52'), +(776, 798, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/LayerSlider/wp/widgets.php::56'), +(777, 799, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::165'), +(778, 800, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::169'), +(779, 801, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::327'), +(780, 802, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::182'), +(781, 803, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::214'), +(782, 804, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::223'), +(783, 805, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::230'), +(784, 806, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::236'), +(785, 807, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::243'), +(786, 808, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::248'), +(787, 809, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::254'), +(788, 810, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::260'), +(789, 811, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::262'), +(790, 812, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::269'), +(791, 813, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::275'), +(792, 814, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::280'), +(793, 815, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::282'), +(794, 816, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::293'), +(795, 817, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::295'), +(796, 818, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::305'), +(797, 819, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::315'), +(798, 820, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::316'), +(799, 821, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::317'), +(800, 822, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::320'), +(801, 823, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::340'), +(802, 824, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::341'), +(803, 825, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::197'), +(804, 826, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/mega-menus.php::210'), +(805, 827, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/functions.php::65'), +(806, 828, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/functions.php::66'), +(807, 829, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/functions.php::66'), +(808, 830, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/functions.php::67'), +(809, 831, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/functions.php::67'), +(810, 832, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::16'), +(811, 833, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::28'), +(812, 834, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::34'), +(813, 835, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::39'), +(814, 836, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::42'), +(815, 837, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::43'), +(816, 838, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::44'), +(817, 839, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::45'), +(818, 840, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::46'), +(819, 841, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::52'), +(820, 842, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::56'), +(821, 843, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::58'), +(822, 844, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::61'), +(823, 845, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::74'), +(824, 846, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::83'), +(825, 847, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::98'), +(826, 848, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::102'), +(827, 849, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/include/options.php::111'), +(828, 850, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/post-types-order.php::514'), +(829, 851, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/post-types-order.php::107'), +(830, 852, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/post-types-order.php::107'), +(831, 853, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/post-types-order.php::107'), +(832, 854, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/post-types-order.php::468'), +(833, 855, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/post-types-order/post-types-order.php::497'), +(834, 856, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::67'), +(835, 857, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::92'), +(836, 858, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::447'), +(837, 859, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::447'), +(838, 860, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::448'), +(839, 861, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::448'), +(840, 862, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::481'), +(841, 863, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::481'), +(842, 864, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::482'), +(843, 865, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::482'), +(844, 866, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::483'), +(845, 867, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::542'), +(846, 868, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::542'), +(847, 869, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::542'), +(848, 870, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::556'), +(849, 871, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::556'), +(850, 872, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::558'), +(851, 873, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::558'), +(852, 874, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::559'), +(853, 875, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::559'), +(854, 876, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::560'), +(855, 877, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::560'), +(856, 878, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::561'), +(857, 879, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::561'), +(858, 880, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::562'), +(859, 881, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::562'), +(860, 882, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::563'), +(861, 883, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::563'), +(862, 884, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::94'), +(863, 885, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::96'), +(864, 886, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::169'), +(865, 887, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::177'), +(866, 888, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::187'), +(867, 889, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::195'), +(868, 890, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::202'), +(869, 891, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::204'), +(870, 892, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::224'), +(871, 893, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php::226'), +(872, 894, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-frontend.php::173'), +(873, 895, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-frontend.php::174'), +(874, 896, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-frontend.php::175'), +(875, 897, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-frontend.php::176'), +(876, 898, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::90'), +(877, 899, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::91'), +(878, 900, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::92'), +(879, 901, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::93'), +(880, 902, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::94'), +(881, 903, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::95'), +(882, 904, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::96'), +(883, 905, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::97'), +(884, 906, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::121'), +(885, 907, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::121'), +(886, 908, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::138'), +(887, 909, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::139'), +(888, 910, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::140'), +(889, 911, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::141'), +(890, 912, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::142'), +(891, 913, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::143'), +(892, 914, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::144'), +(893, 915, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::145'), +(894, 916, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::180'), +(895, 917, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::181'), +(896, 918, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::182'), +(897, 919, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::183'), +(898, 920, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::185'), +(899, 921, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::186'), +(900, 922, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::187'), +(901, 923, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::188'), +(902, 924, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::189'), +(903, 925, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::191'), +(904, 926, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::192'), +(905, 927, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::207'), +(906, 928, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::251'), +(907, 864, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::88'), +(908, 930, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::89'), +(909, 931, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::135'), +(910, 931, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php::136'), +(911, 933, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings-api.php::161'), +(912, 934, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings-api.php::781'), +(913, 935, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings-api.php::792'), +(914, 936, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings-api.php::131'), +(915, 937, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings-api.php::142'), +(916, 938, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::70'), +(917, 939, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::71'), +(918, 940, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::75'); +INSERT INTO `drgrp_icl_string_positions` (`id`, `string_id`, `kind`, `position_in_page`) VALUES +(919, 941, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::76'), +(920, 942, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::80'), +(921, 943, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::81'), +(922, 944, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::102'), +(923, 945, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::103'), +(924, 946, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::108'), +(925, 947, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::112'), +(926, 948, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::113'), +(927, 949, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::118'), +(928, 950, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::118'), +(929, 951, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::122'), +(930, 952, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::123'), +(931, 953, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::132'), +(932, 954, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::133'), +(933, 955, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::143'), +(934, 956, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::144'), +(935, 957, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::151'), +(936, 958, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::152'), +(937, 959, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::159'), +(938, 960, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::160'), +(939, 961, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::167'), +(940, 962, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::168'), +(941, 963, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::177'), +(942, 964, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::185'), +(943, 965, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::193'), +(944, 966, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::201'), +(945, 967, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::209'), +(946, 968, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::217'), +(947, 969, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::225'), +(948, 970, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::233'), +(949, 971, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::241'), +(950, 972, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::249'), +(951, 973, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::257'), +(952, 974, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::265'), +(953, 975, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::318'), +(954, 976, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::320'), +(955, 977, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::329'), +(956, 978, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::330'), +(957, 979, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::330'), +(958, 980, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::331'), +(959, 981, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::332'), +(960, 982, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::342'), +(961, 983, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::343'), +(962, 984, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::344'), +(963, 985, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::345'), +(964, 986, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::346'), +(965, 987, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::347'), +(966, 988, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::348'), +(967, 989, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::349'), +(968, 990, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::350'), +(969, 991, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::351'), +(970, 992, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::352'), +(971, 993, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::362'), +(972, 994, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::363'), +(973, 995, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::364'), +(974, 996, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::365'), +(975, 997, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::376'), +(976, 998, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::381'), +(977, 999, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::383'), +(978, 1000, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::385'), +(979, 1001, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::386'), +(980, 1002, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::387'), +(981, 1003, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::388'), +(982, 1004, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::394'), +(983, 1005, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::396'), +(984, 1006, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::398'), +(985, 1007, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::398'), +(986, 1008, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::399'), +(987, 1009, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::399'), +(988, 1010, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::400'), +(989, 1011, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::400'), +(990, 1012, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::401'), +(991, 1013, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::401'), +(992, 1014, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::407'), +(993, 1015, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::409'), +(994, 1016, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::410'), +(995, 1017, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::418'), +(996, 1018, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::420'), +(997, 1019, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::425'), +(998, 1020, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::427'), +(999, 1021, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::427'), +(1000, 1022, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::428'), +(1001, 1023, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::428'), +(1002, 1024, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::433'), +(1003, 1025, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::435'), +(1004, 1026, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::435'), +(1005, 1027, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::436'), +(1006, 1028, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::436'), +(1007, 1029, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::446'), +(1008, 1030, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::451'), +(1009, 1031, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::453'), +(1010, 1032, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::455'), +(1011, 1033, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::455'), +(1012, 1034, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::456'), +(1013, 1035, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::456'), +(1014, 1036, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::457'), +(1015, 1037, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::457'), +(1016, 1038, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::463'), +(1017, 1039, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php::464'), +(1018, 1040, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-utils.php::30'), +(1019, 1041, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-utils.php::32'), +(1020, 1042, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-utils.php::44'), +(1021, 1043, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-utils.php::45'), +(1022, 1044, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-utils.php::46'), +(1023, 1045, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-utils.php::47'), +(1024, 1046, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider-utils.php::79'), +(1025, 1047, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider.php::67'), +(1026, 1048, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/classes/class-wooslider.php::68'), +(1027, 1049, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-attachments.php::31'), +(1028, 1050, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-attachments.php::33'), +(1029, 1051, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-attachments.php::38'), +(1030, 1052, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-base.php::45'), +(1031, 1053, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-base.php::47'), +(1032, 1054, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-base.php::260'), +(1033, 1055, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-base.php::266'), +(1034, 1056, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-base.php::297'), +(1035, 1057, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-base.php::299'), +(1036, 1058, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-posts.php::31'), +(1037, 1059, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-posts.php::33'), +(1038, 1060, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-slides.php::31'), +(1039, 1061, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-slides.php::33'), +(2175, 223, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::2041'), +(2176, 224, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/custom_functions.php::88'), +(2177, 225, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/custom_functions.php::98'), +(2178, 226, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/custom_functions.php::124'), +(2179, 227, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/custom_functions.php::184'), +(2173, 221, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::2039'), +(2174, 222, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::2040'), +(2169, 217, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::2032'), +(2170, 218, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::2036'), +(2171, 219, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::2037'), +(2172, 220, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::2038'), +(2165, 213, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::2030'), +(2166, 214, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::2030'), +(2164, 212, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::2029'), +(1060, 1082, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/functions.php::1133'), +(2168, 216, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::2031'), +(2167, 215, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::2030'), +(2158, 206, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1904'), +(2159, 207, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1905'), +(2160, 208, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1906'), +(2161, 209, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1907'), +(2163, 211, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1919'), +(2162, 210, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1908'), +(2156, 204, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1393'), +(2157, 205, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1903'), +(2154, 202, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1374'), +(2155, 203, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1392'), +(2153, 201, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1373'), +(2151, 199, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1371'), +(2152, 200, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1372'), +(2149, 197, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1161'), +(2150, 198, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1355'), +(2148, 196, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1159'), +(2146, 194, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1155'), +(2147, 195, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1157'), +(2145, 193, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1152'), +(2143, 191, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1149'), +(2144, 192, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1152'), +(2141, 189, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1142'), +(1093, 1115, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart-empty.php::15'), +(1094, 1116, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart-empty.php::15'), +(2140, 188, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1137'), +(1096, 1118, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::69'), +(1097, 1119, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::111'), +(2142, 190, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::1145'), +(1099, 1121, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::30'), +(1100, 1122, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::31'), +(1101, 1123, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::32'), +(2138, 186, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::565'), +(2139, 187, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::750'), +(1104, 1126, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::171'), +(1105, 1127, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::171'), +(1106, 1128, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cart.php::94'), +(1107, 1129, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/cross-sells.php::39'), +(1108, 1130, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/mini-cart.php::55'), +(1109, 1131, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/mini-cart.php::63'), +(1110, 1132, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/mini-cart.php::68'), +(1111, 1133, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/mini-cart.php::69'), +(1112, 1134, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/shipping-calculator.php::20'), +(1113, 1135, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/shipping-calculator.php::26'), +(1114, 1136, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/shipping-calculator.php::42'), +(1115, 1137, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/shipping-calculator.php::49'), +(1116, 1138, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/shipping-calculator.php::68'), +(1117, 1139, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/shipping-calculator.php::76'), +(1118, 1140, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/shipping-calculator.php::81'), +(1119, 1141, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/shipping-methods.php::32'), +(1120, 1142, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/shipping-methods.php::68'), +(1121, 1143, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/shipping-methods.php::76'), +(1122, 1144, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/shipping-methods.php::76'), +(1123, 1145, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/totals.php::105'), +(1124, 1146, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/totals.php::121'), +(1125, 1147, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/totals.php::123'), +(1126, 1148, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/totals.php::22'), +(1127, 1149, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/totals.php::28'), +(1128, 1150, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/totals.php::35'), +(1129, 1151, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/totals.php::35'), +(1130, 1152, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/totals.php::46'), +(1131, 1153, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/totals.php::83'), +(1132, 1154, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/totals.php::92'), +(1133, 1155, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/cart/totals.php::135'), +(1134, 1156, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/cart-errors.php::16'), +(1135, 1157, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/cart-errors.php::20'), +(1136, 1158, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-billing.php::17'), +(1137, 1159, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-billing.php::21'), +(1138, 1160, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-billing.php::41'), +(1139, 1161, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-billing.php::50'), +(1140, 1162, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-checkout.php::22'), +(2135, 183, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::181'), +(2136, 184, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::182'), +(2137, 185, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::537'), +(2133, 181, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::167'), +(1146, 1168, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-coupon.php::16'), +(1147, 1169, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-coupon.php::19'), +(1148, 1170, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-coupon.php::24'), +(1149, 1171, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-coupon.php::28'), +(1150, 1172, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-login.php::14'), +(1151, 1173, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-login.php::22'), +(1152, 1174, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-login.php::17'), +(1153, 1175, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-pay.php::78'), +(1154, 1176, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-pay.php::19'), +(1155, 1177, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-pay.php::20'), +(1156, 1178, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-pay.php::21'), +(1157, 1179, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-pay.php::87'), +(1158, 1180, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-shipping.php::32'), +(1159, 1181, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-shipping.php::35'), +(1160, 1182, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/form-shipping.php::59'), +(1161, 1183, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/review-order.php::189'), +(1162, 1184, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/review-order.php::191'), +(1163, 1185, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/review-order.php::207'), +(1164, 1186, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/review-order.php::200'), +(1165, 1140, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/review-order.php::200'), +(1166, 1188, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/review-order.php::214'), +(1167, 1189, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/review-order.php::214'), +(1168, 1190, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/thankyou.php::20'), +(1169, 1191, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/thankyou.php::24'), +(1170, 1192, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/thankyou.php::26'), +(1171, 1193, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/thankyou.php::30'), +(1172, 1194, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/thankyou.php::32'), +(1173, 1195, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/thankyou.php::38'), +(1174, 1196, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/thankyou.php::43'), +(1175, 1197, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/thankyou.php::47'), +(1176, 1198, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/thankyou.php::51'), +(1177, 1199, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/checkout/thankyou.php::56'), +(2134, 182, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::180'), +(1179, 1201, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/add-to-cart.php::17'), +(1180, 1202, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/add-to-cart.php::33'), +(1181, 1203, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/add-to-cart.php::37'), +(1182, 1204, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/add-to-cart.php::46'), +(1183, 1205, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/no-products-found.php::14'), +(1184, 1206, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/orderby.php::21'), +(1185, 1207, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/orderby.php::22'), +(1186, 1208, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/orderby.php::23'), +(1187, 1209, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/orderby.php::24'), +(1188, 1210, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/orderby.php::25'), +(1189, 1211, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/orderby.php::26'), +(1190, 1212, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/result-count.php::30'), +(1191, 1213, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/result-count.php::28'), +(1192, 1214, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/result-count.php::32'), +(1193, 1215, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/loop/sale-flash.php::16'), +(2132, 180, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::166'), +(1316, 128, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/form-topic.php::94'), +(1196, 1218, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-change-password.php::30'), +(1197, 1219, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-change-password.php::33'), +(1198, 1220, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-change-password.php::37'), +(1199, 1221, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-edit-address.php::49'), +(2130, 178, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::164'), +(2131, 179, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/framework/class-tgm-plugin-activation.php::165'), +(2129, 177, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/faqs.php::39'), +(2128, 176, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/contact.php::132'), +(2127, 175, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/contact.php::116'), +(2126, 174, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/contact.php::110'), +(1207, 1229, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-login.php::101'), +(1208, 1230, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-lost-password.php::26'), +(1209, 1231, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-lost-password.php::32'), +(1210, 1232, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-lost-password.php::47'), +(1211, 1233, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/form-lost-password.php::28'), +(1212, 1234, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-account.php::35'), +(1213, 1235, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-account.php::87'), +(1214, 1236, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-account.php::92'), +(1215, 1237, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-account.php::41'), +(1216, 1238, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-account.php::42'), +(1217, 1239, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-account.php::43'), +(1218, 1240, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-account.php::45'), +(1219, 1241, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-address.php::17'), +(1220, 1242, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-address.php::23'), +(1221, 1243, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-address.php::41'), +(1222, 1244, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-address.php::67'), +(1223, 1245, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-address.php::73'), +(1224, 1246, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/myaccount/my-downloads.php::18'), +(2125, 173, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/contact.php::98'), +(2124, 172, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/contact.php::98'), +(1227, 1249, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/form-tracking.php::17'), +(1228, 1250, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/form-tracking.php::19'), +(1229, 1251, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/form-tracking.php::19'), +(1230, 1252, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/form-tracking.php::20'); +INSERT INTO `drgrp_icl_string_positions` (`id`, `string_id`, `kind`, `position_in_page`) VALUES +(1231, 1253, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/form-tracking.php::20'), +(1232, 1254, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/form-tracking.php::23'), +(1233, 1255, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/order-details.php::73'), +(1234, 1256, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/order-details.php::128'), +(1235, 1257, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/order-details.php::129'), +(1236, 1258, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/order-details.php::19'), +(1237, 1259, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/order-details.php::113'), +(1238, 1260, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/order-details.php::124'), +(1239, 1261, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/order-details.php::146'), +(1240, 1262, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/tracking.php::18'), +(1241, 1263, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/tracking.php::18'), +(1242, 1264, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/tracking.php::20'), +(1243, 1265, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/tracking.php::20'), +(1244, 1266, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/order/tracking.php::31'), +(1245, 1267, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/shop/breadcrumb.php::63'), +(1246, 1268, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/shop/breadcrumb.php::91'), +(1247, 1269, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/shop/breadcrumb.php::146'), +(1248, 1270, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/shop/breadcrumb.php::192'), +(1249, 1271, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/shop/breadcrumb.php::197'), +(1250, 1272, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/shop/breadcrumb.php::202'), +(1251, 1273, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/shop/form-login.php::24'), +(1252, 1274, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/shop/form-login.php::31'), +(1253, 1275, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/shop/form-login.php::33'), +(1254, 1276, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/add-to-cart/variable.php::24'), +(1255, 1277, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/add-to-cart/variable.php::74'), +(1256, 1278, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/meta.php::19'), +(1257, 1279, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/product-attributes.php::28'), +(1258, 1280, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/product-attributes.php::37'), +(1259, 1281, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/related.php::38'), +(1260, 1282, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/review.php::32'), +(1261, 1283, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/review.php::40'), +(1262, 1284, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/review.php::25'), +(1263, 1285, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/review.php::41'), +(1264, 1286, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/tabs/description.php::14'), +(2123, 171, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/contact.php::93'), +(2122, 170, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/contact.php::56'), +(2121, 169, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/contact.php::55'), +(2120, 168, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/contact.php::54'), +(2119, 167, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/contact.php::53'), +(1270, 1292, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product/up-sells.php::41'), +(1271, 1293, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::28'), +(1272, 1294, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::36'), +(1273, 1295, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::58'), +(1274, 1296, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::59'), +(1275, 1297, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::62'), +(1276, 1298, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::62'), +(1277, 1299, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::63'), +(1278, 1300, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::67'), +(1279, 1301, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::69'), +(1280, 1302, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::82'), +(1281, 1303, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::84'), +(1282, 1304, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::87'), +(1283, 1305, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::94'), +(1284, 1306, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::95'), +(1285, 1307, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::96'), +(1286, 1308, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::97'), +(1287, 1309, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::98'), +(1288, 1310, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::99'), +(1289, 1311, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::100'), +(1290, 1312, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/woocommerce/single-product-reviews.php::105'), +(2118, 166, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::69'), +(1292, 1314, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::11'), +(1293, 1315, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::12'), +(1294, 1316, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::22'), +(1295, 1317, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::25'), +(1296, 1318, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::26'), +(2117, 165, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::67'), +(2116, 164, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::64'), +(2115, 163, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::64'), +(2114, 162, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::64'), +(2113, 161, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::63'), +(2112, 160, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::61'), +(2111, 159, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::54'), +(2110, 158, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::52'), +(2109, 157, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::50'), +(2108, 156, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::37'), +(2107, 155, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::18'), +(2106, 154, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::18'), +(2105, 153, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/comments.php::7'), +(2104, 152, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-profile.php::26'), +(2103, 151, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-profile.php::25'), +(2102, 150, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/user-profile.php::24'), +(2101, 129, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/loop-search-reply.php::22'), +(2100, 50, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/content-single-topic.php::32'), +(2099, 47, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/content-search.php::21'), +(2098, 45, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/content-search.php::15'), +(2097, 44, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/bbpress/content-search.php::14'), +(2096, 42, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/author.php::55'), +(2095, 40, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/author.php::45'), +(2093, 38, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/archive-wpfc_sermon.php::38'), +(1488, 1321, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::23'), +(1489, 1322, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::24'), +(1490, 1318, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::25'), +(1491, 1317, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::26'), +(2094, 39, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/archive.php::196'), +(2091, 36, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/archive-wpfc_sermon.php::35'), +(2092, 37, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/archive-wpfc_sermon.php::35'), +(2090, 35, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/archive-wpfc_sermon.php::35'), +(2089, 34, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/archive-wpfc_sermon.php::35'), +(2088, 27, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/404.php::28'), +(2087, 26, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/404.php::25'), +(2086, 25, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/404.php::24'), +(2085, 24, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/404.php::13'), +(2084, 23, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/Avada/404.php::6'), +(1680, 1707, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_meta_boxes.php::17'), +(1681, 1708, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_meta_boxes.php::31'), +(1682, 1709, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_meta_boxes.php::39'), +(1683, 1710, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_meta_boxes.php::41'), +(1684, 1314, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::9'), +(1685, 1315, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::10'), +(1686, 1698, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::11'), +(1687, 1699, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::12'), +(1688, 1700, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::13'), +(1689, 1701, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::14'), +(1690, 1702, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::15'), +(1691, 1703, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::16'), +(1692, 1704, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::17'), +(1693, 1705, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::18'), +(1694, 1316, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::30'), +(1695, 1321, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::31'), +(1696, 1322, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::32'), +(1697, 1318, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::33'), +(1698, 1317, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/framework/custom_post_types.php::34'), +(1699, 1706, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/partials/horse-list.php::255'), +(1700, 1711, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/partials/horse-list.php::273'), +(1701, 1712, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/partials/horse-list.php::284'), +(1702, 1713, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/partials/horse-list.php::295'), +(1703, 1714, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/partials/horse_related_horses.php::11'), +(1704, 1682, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/partials/horse_related_horses.php::39'), +(1705, 1683, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/partials/horse_related_horses.php::39'), +(1706, 1715, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/single-drg_horse.php::109'), +(1707, 1716, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/single-drg_horse.php::117'), +(1708, 1717, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/single-drg_horse.php::126'), +(1709, 1681, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/single-drg_horse.php::148'), +(1710, 1718, 0, 'D:\\Trabajo\\DoubleRGroup\\InstantWP_4.3.1\\iwpserver\\htdocs\\wordpress/wp-content/themes/double-r-group/single-drg_horse.php::163'); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_string_status` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_string_status` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `rid` bigint(20) NOT NULL, + `string_translation_id` bigint(20) NOT NULL, + `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `md5` varchar(32) NOT NULL, + PRIMARY KEY (`id`), + KEY `string_translation_id` (`string_translation_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_string_status` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_string_translations` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_string_translations` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `string_id` bigint(20) unsigned NOT NULL, + `language` varchar(10) NOT NULL, + `status` tinyint(4) NOT NULL, + `value` text, + `translator_id` bigint(20) unsigned DEFAULT NULL, + `translation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `string_language` (`string_id`,`language`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=137 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_string_translations` +-- + +INSERT INTO `drgrp_icl_string_translations` (`id`, `string_id`, `language`, `status`, `value`, `translator_id`, `translation_date`) VALUES +(1, 1318, 'es', 1, 'Géneros', NULL, '2014-02-25 17:02:41'), +(2, 1317, 'es', 1, 'Etiquetas', NULL, '2014-02-25 17:02:48'), +(3, 1316, 'es', 1, 'Categorías', NULL, '2014-02-25 17:02:55'), +(4, 1315, 'es', 1, 'Caballo', NULL, '2014-02-25 17:03:03'), +(5, 1314, 'es', 1, 'Caballos', NULL, '2014-02-25 17:03:11'), +(6, 1063, 'es', 1, ' - Editar', NULL, '2014-02-26 18:32:12'), +(7, 1062, 'es', 1, '%1$s en %2$s', NULL, '2014-02-26 18:32:12'), +(8, 213, 'es', 1, '%1$s instalado y activado correctamente.', NULL, '2014-02-26 18:32:12'), +(9, 221, 'es', 1, '%1$s ha sido instalado con éxito.', NULL, '2014-02-26 18:32:12'), +(10, 35, 'es', 1, '0 comentarios', NULL, '2014-02-26 18:32:12'), +(11, 36, 'es', 1, '1 comentario', NULL, '2014-02-26 18:32:12'), +(12, 227, 'es', 1, 'Error 404: página no encontrada', NULL, '2014-02-26 18:32:12'), +(13, 1106, 'es', 1, 'Acerca del autor:', NULL, '2014-02-26 18:32:12'), +(14, 204, 'es', 1, 'Activar', NULL, '2014-02-26 18:32:12'), +(15, 177, 'es', 1, 'Todos', NULL, '2014-02-26 18:32:12'), +(16, 216, 'es', 1, 'Todas las instalaciones y activaciones se han completado.', NULL, '2014-02-26 18:32:12'), +(17, 222, 'es', 1, 'Se ha completado toda la instalación.', NULL, '2014-02-26 18:32:12'), +(18, 184, 'es', 1, 'Todos los plugins instalados y activados con éxito. %1$s', NULL, '2014-02-26 18:32:12'), +(19, 219, 'es', 1, 'Se produjo un error durante la instalación de %1$s: %2$s.', NULL, '2014-02-26 18:32:12'), +(20, 34, 'es', 1, 'Por', NULL, '2014-02-26 18:32:12'), +(21, 26, 'es', 1, '¿No encuentra lo que necesita?
¡Realice una búsqueda en un momento!', NULL, '2014-02-26 18:32:12'), +(22, 165, 'es', 1, 'Comentar...', NULL, '2014-02-26 18:32:12'), +(23, 37, 'es', 1, 'Comentarios', NULL, '2014-02-26 18:32:12'), +(24, 156, 'es', 1, 'No se permiten comentarios.', NULL, '2014-02-26 18:32:12'), +(25, 187, 'es', 1, 'Ignorar este aviso', NULL, '2014-02-26 18:32:12'), +(26, 206, 'es', 1, 'Descargando la instalación del paquete desde %s #8230;', NULL, '2014-02-26 18:32:12'), +(27, 158, 'es', 1, 'Correo electrónico (requerido)', NULL, '2014-02-26 18:32:12'), +(28, 1084, 'es', 1, 'Error 404: página no encontrada', NULL, '2014-02-26 18:32:12'), +(29, 188, 'es', 1, 'Enlaces externos', NULL, '2014-02-26 18:32:12'), +(30, 24, 'es', 1, 'Algunos enlaces útiles:', NULL, '2014-02-26 18:32:12'), +(31, 215, 'es', 1, 'Ocultar detalles', NULL, '2014-02-26 18:32:12'), +(32, 226, 'es', 1, 'Inicio', NULL, '2014-02-26 18:32:12'), +(33, 203, 'es', 1, 'Instalar', NULL, '2014-02-26 18:32:12'), +(34, 179, 'es', 1, 'Instalar plugins', NULL, '2014-02-26 18:32:12'), +(35, 178, 'es', 1, 'Instalar plugins requeridos', NULL, '2014-02-26 18:32:12'), +(36, 205, 'es', 1, 'No se permite instalar el paquete.', NULL, '2014-02-26 18:32:12'), +(37, 195, 'es', 1, 'Instalado pero no activado', NULL, '2014-02-26 18:32:12'), +(38, 223, 'es', 1, 'Instalando plugin %1$s (%2$d/%3$d)', NULL, '2014-02-26 18:32:12'), +(39, 180, 'es', 1, 'Instalando plugin:%s', NULL, '2014-02-26 18:32:12'), +(40, 217, 'es', 1, 'Instalando y activando plugin %1$s (%2$d/%3$d)', NULL, '2014-02-26 18:32:12'), +(41, 208, 'es', 1, 'Instalando el plugin…', NULL, '2014-02-26 18:32:12'), +(42, 1090, 'es', 1, 'Más información', NULL, '2014-02-26 18:32:12'), +(43, 160, 'es', 1, 'Deje su comentario', NULL, '2014-02-26 18:32:12'), +(44, 164, 'es', 1, 'Cerrar sesión »', NULL, '2014-02-26 18:32:12'), +(45, 162, 'es', 1, 'Conectado como', NULL, '2014-02-26 18:32:12'), +(46, 175, 'es', 1, 'Mensaje', NULL, '2014-02-26 18:32:12'), +(47, 157, 'es', 1, 'Nombre (requerido)', NULL, '2014-02-26 18:32:12'), +(48, 225, 'es', 1, 'Siguiente', NULL, '2014-02-26 18:32:12'), +(49, 154, 'es', 1, 'No hay comentarios', NULL, '2014-02-26 18:32:12'), +(50, 198, 'es', 1, 'No hay plugins para instalar o activar. Volver al escritorio', NULL, '2014-02-26 18:32:12'), +(51, 194, 'es', 1, 'No se ha instalado', NULL, '2014-02-26 18:32:12'), +(52, 155, 'es', 1, 'Un comentario', NULL, '2014-02-26 18:32:12'), +(53, 23, 'es', 1, '¡Vaya! No hemos podido encontrar esa página', NULL, '2014-02-26 18:32:12'), +(54, 171, 'es', 1, 'Por favor, compruebe si se han rellenado todos los campos con información válida. Gracias.', NULL, '2014-02-26 18:32:12'), +(55, 199, 'es', 1, 'Plugin', NULL, '2014-02-26 18:32:12'), +(56, 183, 'es', 1, 'Plugin activado con éxito.', NULL, '2014-02-26 18:32:12'), +(57, 211, 'es', 1, 'La activación del plugin ha fallado.', NULL, '2014-02-26 18:32:12'), +(58, 209, 'es', 1, 'Ha fallado la instalación del plugin.', NULL, '2014-02-26 18:32:12'), +(59, 210, 'es', 1, 'Plugin instalado con éxito.', NULL, '2014-02-26 18:32:12'), +(60, 1112, 'es', 1, 'Popular', NULL, '2014-02-26 18:32:12'), +(61, 166, 'es', 1, 'Publicar comentario', NULL, '2014-02-26 18:32:12'), +(62, 190, 'es', 1, 'Pre-empaquetados', NULL, '2014-02-26 18:32:12'), +(63, 224, 'es', 1, 'Anterior', NULL, '2014-02-26 18:32:12'), +(64, 189, 'es', 1, 'Repositorio privado', NULL, '2014-02-26 18:32:12'), +(65, 38, 'es', 1, 'Más información', NULL, '2014-02-26 18:32:13'), +(66, 1113, 'es', 1, 'Reciente', NULL, '2014-02-26 18:32:13'), +(67, 193, 'es', 1, 'Recomendado', NULL, '2014-02-26 18:32:13'), +(68, 1107, 'es', 1, 'Artículos relacionados', NULL, '2014-02-26 18:32:13'), +(69, 1104, 'es', 1, 'Proyectos relacionados', NULL, '2014-02-26 18:32:13'), +(70, 192, 'es', 1, 'Requerido', NULL, '2014-02-26 18:32:13'), +(71, 182, 'es', 1, 'Volver al instalador de plugins requeridos', NULL, '2014-02-26 18:32:13'), +(72, 185, 'es', 1, 'Volver al escritorio', NULL, '2014-02-26 18:32:13'), +(73, 228, 'es', 1, 'Buscar', NULL, '2014-02-26 18:32:13'), +(74, 27, 'es', 1, 'Buscar...', NULL, '2014-02-26 18:32:13'), +(75, 25, 'es', 1, 'Busque en nuestra web', NULL, '2014-02-26 18:32:13'), +(76, 1083, 'es', 1, 'Resultados de la búsqueda de:', NULL, '2014-02-26 18:32:13'), +(77, 1105, 'es', 1, 'Para compartir esta historia, elija cualquier plataforma', NULL, '2014-02-26 18:32:13'), +(78, 214, 'es', 1, 'Mostrar detalles', NULL, '2014-02-26 18:32:13'), +(79, 181, 'es', 1, '¡Algo salió mal!', NULL, '2014-02-26 18:32:13'), +(80, 200, 'es', 1, 'Fuente', NULL, '2014-02-26 18:32:13'), +(81, 202, 'es', 1, 'Estado', NULL, '2014-02-26 18:32:13'), +(82, 174, 'es', 1, 'Asunto', NULL, '2014-02-26 18:32:13'), +(83, 176, 'es', 1, 'Enviar formulario', NULL, '2014-02-26 18:32:13'), +(84, 172, 'es', 1, 'Gracias', NULL, '2014-02-26 18:32:13'), +(85, 186, 'es', 1, 'El siguiente plugin se activó con éxito:%s.', NULL, '2014-02-26 18:32:13'), +(86, 212, 'es', 1, 'Se está iniciado el proceso de instalación y activación. Este proceso puede llevar un tiempo en algunos ordenadores, así que por favor tenga paciencia.', NULL, '2014-02-26 18:32:13'), +(87, 220, 'es', 1, 'Ha fallado la instalación de %1$s.', NULL, '2014-02-26 18:32:13'), +(88, 218, 'es', 1, 'Se esta iniciando el proceso de instalación. Este proceso puede llevar un tiempo en algunos ordenadores, así que por favor tenga paciencia.', NULL, '2014-02-26 18:32:13'), +(89, 1066, 'es', 1, 'Opciones del tema', NULL, '2014-02-26 18:32:13'), +(90, 153, 'es', 1, 'Esta entrada está protegida con contraseña. Introduzca la contraseña para ver los comentarios.', NULL, '2014-02-26 18:32:13'), +(91, 201, 'es', 1, 'Tipo', NULL, '2014-02-26 18:32:13'), +(92, 207, 'es', 1, 'Descomprimiendo el paquete…', NULL, '2014-02-26 18:32:13'), +(93, 1091, 'es', 1, 'Ver proyecto', NULL, '2014-02-26 18:32:13'), +(94, 159, 'es', 1, 'Sitio web', NULL, '2014-02-26 18:32:13'), +(95, 191, 'es', 1, 'Repositorio de WordPress', NULL, '2014-02-26 18:32:13'), +(96, 1065, 'es', 1, 'Su comentario está a la espera de ser aprobado.', NULL, '2014-02-26 18:32:13'), +(97, 173, 'es', 1, 'por utilizar mi formulario de contacto. Su correo electrónico fue enviado correctamente.', NULL, '2014-02-26 18:32:13'), +(98, 1321, 'es', 1, 'Razas', NULL, '2014-02-25 17:08:57'), +(99, 1322, 'es', 1, 'Edades', NULL, '2014-02-25 17:09:05'), +(100, 1706, 'es', 1, 'Filtros', NULL, '2014-02-26 17:20:42'), +(101, 1703, 'es', 1, 'No se encontraron caballos', NULL, '2014-02-26 17:21:12'), +(102, 1702, 'es', 1, 'Buscar caballos', NULL, '2014-02-26 17:21:22'), +(103, 1701, 'es', 1, 'Ver caballo', NULL, '2014-02-26 17:21:30'), +(104, 1705, 'es', 1, 'Caballo padre en jerarquía', NULL, '2014-02-26 17:21:41'), +(105, 1704, 'es', 1, 'Ningún caballo encontrado en la papelera', NULL, '2014-02-26 17:22:11'), +(106, 1700, 'es', 1, 'Nuevo caballo', NULL, '2014-02-26 17:22:36'), +(107, 1699, 'es', 1, 'Editar caballo', NULL, '2014-02-26 17:22:44'), +(108, 1698, 'es', 1, 'Añadir nuevo caballo', NULL, '2014-02-26 17:23:11'), +(109, 1683, 'es', 1, 'Siguiente', NULL, '2014-02-26 17:23:24'), +(110, 1682, 'es', 1, 'Anterior', NULL, '2014-02-26 17:23:29'), +(111, 1681, 'es', 1, 'Galería', NULL, '2014-02-26 17:24:10'), +(112, 1718, 'es', 1, 'Video', NULL, '2014-02-26 17:27:22'), +(113, 1717, 'es', 1, 'Edad', NULL, '2014-02-26 17:27:30'), +(114, 1716, 'es', 1, 'Género', NULL, '2014-02-26 17:27:36'), +(115, 1715, 'es', 1, 'Raza', NULL, '2014-02-26 17:27:42'), +(116, 1714, 'es', 1, 'Otros caballos', NULL, '2014-02-26 17:28:00'), +(117, 1713, 'es', 1, 'Todos', NULL, '2014-02-26 17:28:09'), +(118, 1712, 'es', 1, 'Todas', NULL, '2014-02-26 17:28:17'), +(119, 1711, 'es', 1, 'Todas', NULL, '2014-02-26 17:28:23'), +(120, 1710, 'es', 1, 'Elija qué categorías de caballo se mostrarán en la página. Dejar en blanco para mostrar todas las categorías.', NULL, '2014-02-26 17:28:59'), +(121, 1709, 'es', 1, 'Categorías de caballo', NULL, '2014-02-26 17:29:15'), +(122, 1708, 'es', 1, 'Todas', NULL, '2014-02-26 17:29:39'), +(123, 1707, 'es', 1, 'Opciones', NULL, '2014-02-26 18:38:30'), +(127, 1726, 'es', 1, 'Gender', NULL, '2014-02-27 16:31:28'), +(126, 1725, 'es', 1, 'Genders', NULL, '2014-02-27 16:31:28'), +(128, 1727, 'es', 1, 'Breed', NULL, '2014-02-27 16:32:16'), +(129, 1728, 'es', 1, 'Breeds', NULL, '2014-02-27 16:32:16'), +(130, 1067, 'es', 1, 'Ir a...', NULL, '2014-02-28 16:55:22'), +(131, 1100, 'es', 1, 'Categorías', NULL, '2014-02-28 16:55:32'), +(132, 1320, 'es', 1, 'Galería de video', NULL, '2014-02-28 16:56:01'), +(133, 1319, 'es', 1, 'Galería de imágenes', NULL, '2014-02-28 16:56:09'), +(134, 1200, 'es', 1, 'Ver detalles', NULL, '2014-02-28 16:56:24'), +(135, 1071, 'es', 1, 'Cargando...', NULL, '2014-02-28 16:56:56'), +(136, 1072, 'es', 1, 'Cargando...', NULL, '2014-02-28 16:57:18'); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_translate` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_translate` ( + `tid` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `job_id` bigint(20) unsigned NOT NULL, + `content_id` bigint(20) unsigned NOT NULL, + `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `field_type` varchar(128) NOT NULL, + `field_format` varchar(16) NOT NULL, + `field_translate` tinyint(4) NOT NULL, + `field_data` text NOT NULL, + `field_data_translated` text NOT NULL, + `field_finished` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`tid`), + KEY `job_id` (`job_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=113 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_translate` +-- + +INSERT INTO `drgrp_icl_translate` (`tid`, `job_id`, `content_id`, `timestamp`, `field_type`, `field_format`, `field_translate`, `field_data`, `field_data_translated`, `field_finished`) VALUES +(1, 1, 0, '2014-02-26 17:39:14', 'title', 'base64', 1, 'Tm9zb3Ryb3M=', 'QWJvdXQgdXM=', 1), +(2, 1, 0, '2014-02-26 17:39:14', 'body', 'base64', 1, 'W3NlcGFyYXRvciB0b3A9Ii01NSIgc3R5bGU9Im5vbmUiXQ0KW2Z1bGx3aWR0aCBib3JkZXJzaXplPSIwIiBwYWRkaW5nVG9wPSIyMHB4IiBwYWRkaW5nQm90dG9tPSIyMHB4Il0NCjxoMT5Eb3VibGUgUiBHcm91cDwvaDE+DQo8aDMgc3R5bGU9ImZvbnQtc2l6ZToyMXB4OyI+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gTnVuYyBwb3J0YSBsYWN1cyB2ZWwgYWxpcXVhbSBpbXBlcmRpZXQuIE51bmMgZmVybWVudHVtIGZlbGlzIG1ldHVzLCBxdWlzIHBoYXJldHJhIGZlbGlzIHNhZ2l0dGlzIHZpdGFlLiBBbGlxdWFtIGVyYXQgdm9sdXRwYXQuIFByb2luIGxhY2luaWEgYmliZW5kdW0gZ3JhdmlkYS4gVmVzdGlidWx1bSB1bHRyaWNlcyB2ZWwgdmVsaXQgc2l0IGFtZXQgc3VzY2lwaXQuPC9oMz4NCjwvY2VudGVyPg0KW3NlcGFyYXRvciB0b3A9IjEwIiBzdHlsZT0ic2hhZG93Il0NClsvZnVsbHdpZHRoXQ0KDQpbc2VwYXJhdG9yIHRvcD0iMjAiXQ0KW2Z1bGx3aWR0aCBiYWNrZ3JvdW5kY29sb3I9IiNmZmYiIGJhY2tncm91bmRpbWFnZT0iIiBiYWNrZ3JvdW5kcmVwZWF0PSJuby1yZXBlYXQiIGJhY2tncm91bmRwb3NpdGlvbj0ibGVmdCB0b3AiIGJhY2tncm91bmRhdHRhY2htZW50PSJzY3JvbGwiIGJvcmRlcnNpemU9IjBweCIgYm9yZGVyY29sb3I9IiNlNWU0ZTQiIHBhZGRpbmdUb3A9IjIwcHgiIHBhZGRpbmdCb3R0b209IjIwcHgiXQ0KW29uZV9oYWxmIGxhc3Q9Im5vIl0NCltzZXBhcmF0b3IgdG9wPSI1MCJdDQo8ZGl2IGNsYXNzPSJwaG90by1mcmFtZSI+PGltZyBjbGFzcz0id3AtaW1hZ2UiIGFsdD0iRXF1aXBvIiBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvZl9lcXVpcG8uanBnIiAvPjwvZGl2Pg0KWy9vbmVfaGFsZl0NCltvbmVfaGFsZiBsYXN0PSJ5ZXMiXQ0KW3RpdGxlIHNpemU9IjIiXUZpbG9zb2bDrWFbL3RpdGxlXQ0KTGlkIGVzdCBsYWJvcnVtIGRvbG8gcnVtZXMgZnVnYXRzIHVudHJhcy4gRXRoYXJ1bXMgc2VyIHF1aWRlbSByZXJ1bSBmYWNpbGlzIGRvbG9yZXMgbmVtaXMgb21uaXMgZnVnYXRzIHZpdGFlcyBuZW1vIG1pbmltYSByZXJ1bXMgdW5zZXJzIHNhZGlwcyBhbWV0cy4gU2VkIHV0IHBlcnNwaWNpYXRpcyB1bmRlIG9tbmlzIGlzdGUgbmF0dXMgZXJyb3Igc2l0IHZvbHVwdGF0ZW0gYWNjdXNhbnRpdW0gZG9sb3JlbXF1ZSBsYXVkYW50aXVtLCB0b3RhbSByZW0gYXBlcmlhbSwgZWFxdWUgaXBzYSBxdWFlIGFiIGlsbG8gaW52ZW50b3JlIHZlcml0YXRpcyBldCBxdWFzaSBhcmNoaXRlY3RvIGJlYXRhZSB2aXRhZSBkaWN0YSBzdW50IGV4cGxpY2Fiby4gTmVtbyBlbmltIGlwc2FtIHZvbHVwdGF0ZW0gcXVpYSB2b2x1cHRhcyBzaXQgYXNwZXJuYXR1ciBhdXQgb2RpdCBhdXQgZnVnaXQsIHNlZCBxdWlhIGNvbnNlcXV1bnR1ciBtYWduaSBkb2xvcmVzIGVvcyBxdWkgcmF0aW9uZSB2b2x1cHRhdGVtIHNlcXVpIG5lc2NpdW50Li4gTmVxdWUgcG9ycm8gcXVpc3F1YW0gZXN0LCBxdWkgZG9sb3JlbSBpcHN1bSBxdWlhIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciwgYWRpcGlzY2kgdmVsaXQsIHNlZCBxdWlhIG5vbiBudW1xdWFtIGVpdXMgbW9kaSB0ZW1wb3JhIGluY2lkdW50IHV0IGxhYm9yZSBkb2xvcmUgbWFnbm0gYWxpcXVhbSBxdWFlcmF0IHZvbHVwdGF0ZW0uDQpbL29uZV9oYWxmXQ0KWy9mdWxsd2lkdGhdDQoNCg0KDQpbc2VwYXJhdG9yIHRvcD0iMTAiXQ0KW2Z1bGx3aWR0aCBiYWNrZ3JvdW5kY29sb3I9IiNmOGY4ZjgiIGJhY2tncm91bmRpbWFnZT0iIiBiYWNrZ3JvdW5kcmVwZWF0PSJuby1yZXBlYXQiIGJhY2tncm91bmRwb3NpdGlvbj0ibGVmdCB0b3AiIGJhY2tncm91bmRhdHRhY2htZW50PSJzY3JvbGwiIGJvcmRlcnNpemU9IjFweCIgYm9yZGVyY29sb3I9IiNlNWU0ZTQiIHBhZGRpbmdUb3A9IjIwcHgiIHBhZGRpbmdCb3R0b209IjIwcHgiXQ0KW3NlcGFyYXRvciB0b3A9IjEwIl0NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiIGljb25jb2xvcj0iIiBjaXJjbGVjb2xvcj0iIiBjaXJjbGVib3JkZXJjb2xvcj0iIiBiYWNrZ3JvdW5kY29sb3I9IiJdDQpbY29udGVudF9ib3ggdGl0bGU9Ik51ZXN0cmFzIGluc3RhbGFjaW9uZXMiIGljb249IiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTMvMTAvYmtnZDExLTMwMHgxNzMuanBnIiBpbWFnZV93aWR0aD0iMzAwIiBpbWFnZV9oZWlnaHQ9IjEwMCIgbGluaz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy8/cGFnZV9pZD00NjIzIyIgbGlua3RhcmdldD0iX3NlbGYiIGxpbmt0ZXh0PSIiIGFuaW1hdGlvbl90eXBlPSIwIiBhbmltYXRpb25fZGlyZWN0aW9uPSJkb3duIiBhbmltYXRpb25fc3BlZWQ9IjAuMSJdRXRoYXJ1bXMgc2VyIHF1aWRlbSByZXJ1bSBmYWNpbGlzIGRvbG9yZXMgbmVtaXMgb21uaXMgZnVnYXRzIHZpdGFlcyBuZW1vIG1pbmltYSByZXJ1bXMgdW5zZXJzIHNhZGlwcyBhbWV0cy5bL2NvbnRlbnRfYm94XQ0KDQpbY29udGVudF9ib3ggdGl0bGU9IkN1aWRhZG8gZGUgbG9zIGNhYmFsbG9zIiBpY29uPSIiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL2hvcnNlLTAzLTEwMjR4NjU0LmpwZyIgaW1hZ2Vfd2lkdGg9IjMwMCIgaW1hZ2VfaGVpZ2h0PSIxMDAiIGxpbms9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3MvP3BhZ2VfaWQ9NDYyMyMiIGxpbmt0YXJnZXQ9Il9zZWxmIiBsaW5rdGV4dD0iIiBhbmltYXRpb25fdHlwZT0iMCIgYW5pbWF0aW9uX2RpcmVjdGlvbj0iZG93biIgYW5pbWF0aW9uX3NwZWVkPSIwLjEiXUV0aGFydW1zIHNlciBxdWlkZW0gcmVydW0gZmFjaWxpcyBkb2xvcmVzIG5lbWlzIG9tbmlzIGZ1Z2F0cyB2aXRhZXMgbmVtbyBtaW5pbWEgcmVydW1zIHVuc2VycyBzYWRpcHMgYW1ldHMuWy9jb250ZW50X2JveF0NCg0KW2NvbnRlbnRfYm94IHRpdGxlPSJQZXJzb25hbCBjdWFsaWZpY2FkbyIgaWNvbj0iIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi9ob3JzZS0wMTEtMTAyNHg2NTQuanBnIiBpbWFnZV93aWR0aD0iMzAwIiBpbWFnZV9oZWlnaHQ9IjEwMCIgbGluaz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy8/cGFnZV9pZD00NjIzIyIgbGlua3RhcmdldD0iX3NlbGYiIGxpbmt0ZXh0PSIiIGFuaW1hdGlvbl90eXBlPSIwIiBhbmltYXRpb25fZGlyZWN0aW9uPSJkb3duIiBhbmltYXRpb25fc3BlZWQ9IjAuMSJdRXRoYXJ1bXMgc2VyIHF1aWRlbSByZXJ1bSBmYWNpbGlzIGRvbG9yZXMgbmVtaXMgb21uaXMgZnVnYXRzIHZpdGFlcyBuZW1vIG1pbmltYSByZXJ1bXMgdW5zZXJzIHNhZGlwcyBhbWV0cy5bL2NvbnRlbnRfYm94XQ0KDQpbL2NvbnRlbnRfYm94ZXNdDQpbc2VwYXJhdG9yIHRvcD0iNTUiXQ0KWy9mdWxsd2lkdGhdDQpbc2VwYXJhdG9yIHRvcD0iLTU1Il0=', '', 1), +(3, 1, 0, '2014-02-26 17:39:14', 'original_id', '', 0, '4623', '', 1), +(4, 2, 0, '2014-02-26 17:40:26', 'title', 'base64', 1, 'SW5zdGFsYWNpb25lcw==', 'RmFjaWxpdGllcw==', 1), +(5, 2, 0, '2014-02-26 17:40:26', 'body', 'base64', 1, 'W3NlcGFyYXRvciB0b3A9Ii0yMCJdDQpbc2xpZGVyXVtzbGlkZV1odHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL1NhbnRheW5lei5qcGdbL3NsaWRlXVtzbGlkZV1odHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzAzX2Jhbm5lcmhvbWVfYWxsb3RqYW1lbnRfMi5qcGdbL3NsaWRlXVtzbGlkZV1odHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzA5X2Jhbm5lcmhvbWVfY2FiYWxsb18xLmpwZ1svc2xpZGVdWy9zbGlkZXJdDQpbc2VwYXJhdG9yIHRvcD0iLTMwIiBzdHlsZT0ibm9uZSJdDQo8c3Ryb25nPjxlbT5BIGNpZW4ga2lsw7NtZXRyb3MgZGUgTWFkcmlkIGVzdMOhbiBsYXMgaW5zdGFsYWNpb25lcyBkZSBEb3VibGUgUiBHcm91cC4gRW4gdW5hIGZpbmNhIGRlIHRyZWludGEgaGVjdMOhcmVhcyBkZXNhcnJvbGxhbW9zIGxhcyBhY3RpdmlkYWRlcyBkZSBjcsOtYSB5IGVudHJlbmFtaWVudG8gZGUgY2FiYWxsb3MgcGFyYSBsYSBhbHRhIGNvbXBldGljacOzbi48L2VtPjwvc3Ryb25nPg0KDQpbc2VwYXJhdG9yIHRvcD0iNTAiXQ0KDQpbdHdvX3RoaXJkIGxhc3Q9Im5vIl0NClt0aXRsZSBzaXplPSIyIl1Eb3RhY2lvbmVzWy90aXRsZV0NCg0KRG91YmxlIFIgR3JvdXAgdGllbmUgdG9kYSBsYSBpbmZyYWVzdHJ1Y3R1cmEgbmVjZXNhcmlhIHBhcmEgZWwgZGVzYXJyb2xsbyB5IGVsIGVudHJlbmFtaWVudG8gZGUgbG9zIGNhYmFsbG9zIGVuIHRvZGFzIHN1cyBmYXNlcw0KDQpbY2hlY2tsaXN0IGljb249ImNpcmNsZS1hcnJvdy1yaWdodCIgaWNvbmNvbG9yPSIzOTVCN0IiIGNpcmNsZT0ibm8iXQ0KPHVsPg0KCTxsaT5GaW5jYSBkZSBtw6FzIGRlIHRyZWludGEgaGVjdMOhcmVhcy48L2xpPg0KCTxsaT5QaXN0YXMgZGUgdHJhYmFqbyB5IHNhbHRvPC9saT4NCgk8bGk+UGlzdGFzIHBhcmEgZGFyIGN1ZXJkYTwvbGk+DQoJPGxpPlBpc3RhcyBkZSBnYWxvcGU8L2xpPg0KCTxsaT5DYW1pbmFkb3JlczwvbGk+DQoJPGxpPlN1ZWxvcyBkZSBjb25kaWNpb25lcyDDs3B0aW1hczwvbGk+DQo8L3VsPg0KWy9jaGVja2xpc3RdDQpbL3R3b190aGlyZF0NCg0KW29uZV90aGlyZCBsYXN0PSJ5ZXMiXQ0KW3RpdGxlIHNpemU9IjIiXUxvY2FsaXphY2nDs25bL3RpdGxlXQ0KPGlmcmFtZSBzcmM9Imh0dHBzOi8vbWFwcy5nb29nbGUuY29tL21hcHM/Zj1xJmFtcDtzb3VyY2U9c19xJmFtcDtobD1lbiZhbXA7Z2VvY29kZT0mYW1wO3E9Nzc1K05ldytZb3JrK0F2ZSwrQnJvb2tseW4sK0tpbmdzLCtOZXcrWW9yaysxMTIwMyZhbXA7YXE9JmFtcDtzbGw9MjcuNjk4NjM4LC04My44MDQ2MDEmYW1wO3NzcG49MjEuNzcwMTMxLDQ3Ljg3ODQxOCZhbXA7aWU9VVRGOCZhbXA7aHE9JmFtcDtobmVhcj03NzUrRStOZXcrWW9yaytBdmUsK0Jyb29rbHluLCtOZXcrWW9yaysxMTIwMyZhbXA7dD1tJmFtcDt6PTE0JmFtcDtsbD00MC42NjI0NDEsLTczLjkzNjkzNSZhbXA7b3V0cHV0PWVtYmVkIiBoZWlnaHQ9IjE1MCIgd2lkdGg9IjI4OCIgZnJhbWVib3JkZXI9IjAiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIHNjcm9sbGluZz0ibm8iPjwvaWZyYW1lPg0KPHNtYWxsPjwvc21hbGw+DQo8aDQ+SW5zdGFsYWNpb25lcyBlbiBsYSBDb211bmlkYWQgZGUgTWFkcmlkPC9oND4NClsvb25lX3RoaXJkXQ0KDQpbc2VwYXJhdG9yIHRvcD0iMTUiXQ0KW3RpdGxlIHNpemU9IjIiXUltw6FnZW5lcyBkZSBsYXMgaW5zdGFsYWNpb25lc1svdGl0bGVdDQoNCltpbWFnZXMgbGlnaHRib3g9InllcyJdDQpbaW1hZ2UgbGluaz0iIiBsaW5rdGFyZ2V0PSJfc2VsZiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvMS5qcGciIGFsdD0iIl0NCltpbWFnZSBsaW5rPSIiIGxpbmt0YXJnZXQ9Il9zZWxmIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi8yLmpwZyIgYWx0PSIiXQ0KW2ltYWdlIGxpbms9IiIgbGlua3RhcmdldD0iX3NlbGYiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzMuanBnIiBhbHQ9IiJdDQpbaW1hZ2UgbGluaz0iIiBsaW5rdGFyZ2V0PSJfc2VsZiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvNC5qcGciIGFsdD0iIl0NCltpbWFnZSBsaW5rPSIiIGxpbmt0YXJnZXQ9Il9zZWxmIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi81LmpwZyIgYWx0PSIiXQ0KW2ltYWdlIGxpbms9IiIgbGlua3RhcmdldD0iX3NlbGYiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzYuanBnIiBhbHQ9IiJdDQpbaW1hZ2UgbGluaz0iIiBsaW5rdGFyZ2V0PSJfc2VsZiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvNy5qcGciIGFsdD0iIl0NClsvaW1hZ2VzXQ==', '', 1), +(6, 2, 0, '2014-02-26 17:40:26', 'original_id', '', 0, '4824', '', 1), +(7, 3, 0, '2014-02-26 17:49:53', 'title', 'base64', 1, 'Tm90aWNpYXM=', 'TmV3cw==', 1), +(8, 3, 0, '2014-02-26 17:49:53', 'body', 'base64', 1, 'W2Jsb2cgbnVtYmVyX3Bvc3RzPSI2IiBjYXRfc2x1Zz0iIiB0aXRsZT0ieWVzIiB0aHVtYm5haWw9InllcyIgZXhjZXJwdD0ieWVzIiBleGNlcnB0X3dvcmRzPSI1NSIgbWV0YV9hbGw9InllcyIgbWV0YV9hdXRob3I9InllcyIgbWV0YV9jYXRlZ29yaWVzPSJ5ZXMiIG1ldGFfY29tbWVudHM9InllcyIgbWV0YV9kYXRlPSJ5ZXMiIG1ldGFfbGluaz0ieWVzIiBwYWdpbmc9InllcyIgc2Nyb2xsaW5nPSJwYWdpbmF0aW9uIiBzdHJpcF9odG1sPSJ5ZXMiIGxheW91dD0ibWVkaXVtIl1bL2Jsb2dd', 'W2Jsb2cgbnVtYmVyX3Bvc3RzPSI2IiBjYXRfc2x1Zz0iIiB0aXRsZT0ieWVzIiB0aHVtYm5haWw9InllcyIgZXhjZXJwdD0ieWVzIiBleGNlcnB0X3dvcmRzPSI1NSIgbWV0YV9hbGw9InllcyIgbWV0YV9hdXRob3I9Im5vIiBtZXRhX2NhdGVnb3JpZXM9InllcyIgbWV0YV9jb21tZW50cz0ibm8iIG1ldGFfZGF0ZT0ieWVzIiBtZXRhX2xpbms9InllcyIgcGFnaW5nPSJ5ZXMiIHNjcm9sbGluZz0icGFnaW5hdGlvbiIgc3RyaXBfaHRtbD0ieWVzIiBsYXlvdXQ9ImxhcmdlLWFsdGVybmF0ZSJdWy9ibG9nXQ==', 1), +(9, 3, 0, '2014-02-26 17:49:53', 'original_id', '', 0, '4698', '', 1), +(10, 4, 0, '2014-02-26 17:52:01', 'title', 'base64', 1, 'Tm90aWNpYXM=', 'TmV3cw==', 1), +(11, 4, 0, '2014-02-26 17:52:01', 'body', 'base64', 1, 'W2Jsb2cgbnVtYmVyX3Bvc3RzPSI2IiBjYXRfc2x1Zz0iIiB0aXRsZT0ieWVzIiB0aHVtYm5haWw9InllcyIgZXhjZXJwdD0ieWVzIiBleGNlcnB0X3dvcmRzPSI1NSIgbWV0YV9hbGw9InllcyIgbWV0YV9hdXRob3I9Im5vIiBtZXRhX2NhdGVnb3JpZXM9InllcyIgbWV0YV9jb21tZW50cz0ibm8iIG1ldGFfZGF0ZT0ieWVzIiBtZXRhX2xpbms9InllcyIgcGFnaW5nPSJ5ZXMiIHNjcm9sbGluZz0icGFnaW5hdGlvbiIgc3RyaXBfaHRtbD0ieWVzIiBsYXlvdXQ9ImxhcmdlLWFsdGVybmF0ZSJdWy9ibG9nXQ==', 'W2Jsb2cgbnVtYmVyX3Bvc3RzPSI2IiBjYXRfc2x1Zz0iIiB0aXRsZT0ieWVzIiB0aHVtYm5haWw9InllcyIgZXhjZXJwdD0ieWVzIiBleGNlcnB0X3dvcmRzPSI1NSIgbWV0YV9hbGw9InllcyIgbWV0YV9hdXRob3I9Im5vIiBtZXRhX2NhdGVnb3JpZXM9InllcyIgbWV0YV9jb21tZW50cz0ibm8iIG1ldGFfZGF0ZT0ieWVzIiBtZXRhX2xpbms9InllcyIgcGFnaW5nPSJ5ZXMiIHNjcm9sbGluZz0icGFnaW5hdGlvbiIgc3RyaXBfaHRtbD0ieWVzIiBsYXlvdXQ9ImxhcmdlLWFsdGVybmF0ZSJdWy9ibG9nXQ==', 1), +(12, 4, 0, '2014-02-26 17:52:01', 'original_id', '', 0, '4698', '', 1), +(13, 5, 0, '2014-02-26 17:59:39', 'title', 'base64', 1, 'Q3LDrWE=', 'QnJlZWRpbmc=', 1), +(14, 5, 0, '2014-02-26 17:59:39', 'body', 'base64', 1, '', '', 1), +(15, 5, 0, '2014-02-26 17:59:39', 'original_id', '', 0, '4897', '', 1), +(16, 6, 0, '2014-02-26 18:00:21', 'title', 'base64', 1, 'Q29tcGV0aWNpw7Nu', 'Q29tcGV0aXRpb24=', 1), +(17, 6, 0, '2014-02-26 18:00:21', 'body', 'base64', 1, '', '', 1), +(18, 6, 0, '2014-02-26 18:00:21', 'original_id', '', 0, '4899', '', 1), +(19, 7, 0, '2014-02-26 18:01:28', 'title', 'base64', 1, 'Q29udGFjdG8=', 'Q29udGFjdA==', 1), +(20, 7, 0, '2014-02-26 18:01:28', 'body', 'base64', 1, 'W3R3b190aGlyZCBsYXN0PSJubyJdDQpbdGl0bGUgc2l6ZT0iMyJdRm9ybXVsYXJpbyBkZSBjb250YWN0b1svdGl0bGVdDQpbZ3Jhdml0eWZvcm0gaWQ9IjEiIG5hbWU9IkNvbnRhY3RvIiBhamF4PSJ0cnVlIiB0aXRsZT0iZmFsc2UiXQ0KWy90d29fdGhpcmRdDQpbb25lX3RoaXJkIGxhc3Q9InllcyJdDQpbdGl0bGUgc2l6ZT0iMyJdRG91YmxlIFIgR3JvdXBbL3RpdGxlXQ0KPHA+W2ZvbnRhd2Vzb21lIGljb249Im1hcC1tYXJrZXIiIGNpcmNsZT0ibm8iIHNpemU9Im1lZGl1bSIgaWNvbmNvbG9yPSIjMjk1ZTgxIiBjaXJjbGVjb2xvcj0iIiBjaXJjbGVib3JkZXJjb2xvcj0iIiBhbmltYXRpb25fdHlwZT0iMCIgYW5pbWF0aW9uX2RpcmVjdGlvbj0iZG93biIgYW5pbWF0aW9uX3NwZWVkPSIwLjEiXSBDYWxsZSBkZSBBbG1hZ3JvLCAyMSwgMjgwMTAgTWFkcmlkPC9wPg0KPHA+W2ZvbnRhd2Vzb21lIGljb249InBob25lIiBjaXJjbGU9Im5vIiBzaXplPSJtZWRpdW0iIGljb25jb2xvcj0iIzI5NWU4MSIgY2lyY2xlY29sb3I9IiIgY2lyY2xlYm9yZGVyY29sb3I9IiIgYW5pbWF0aW9uX3R5cGU9IjAiIGFuaW1hdGlvbl9kaXJlY3Rpb249ImRvd24iIGFuaW1hdGlvbl9zcGVlZD0iMC4xIl0rMzQgNjE5IDY4NiA2MzM8L3A+DQo8cD5bZm9udGF3ZXNvbWUgaWNvbj0iZW52ZWxvcGUiIGNpcmNsZT0ibm8iIHNpemU9Im1lZGl1bSIgaWNvbmNvbG9yPSIjMjk1ZTgxIiBjaXJjbGVjb2xvcj0iIiBjaXJjbGVib3JkZXJjb2xvcj0iIiBhbmltYXRpb25fdHlwZT0iMCIgYW5pbWF0aW9uX2RpcmVjdGlvbj0iZG93biIgYW5pbWF0aW9uX3NwZWVkPSIwLjEiXWluZm9AZG91Ymxlcmdyb3VwLmNvbTwvcD4NCjxwPltmb250YXdlc29tZSBpY29uPSJnbG9iZSIgY2lyY2xlPSJubyIgc2l6ZT0ibWVkaXVtIiBpY29uY29sb3I9IiMyOTVlODEiIGNpcmNsZWNvbG9yPSIiIGNpcmNsZWJvcmRlcmNvbG9yPSIiIGFuaW1hdGlvbl90eXBlPSIwIiBhbmltYXRpb25fZGlyZWN0aW9uPSJkb3duIiBhbmltYXRpb25fc3BlZWQ9IjAuMSJdd3d3LmRvdWJsZXJncm91cC5jb208L3A+DQpbL29uZV90aGlyZF0NCg==', 'W3R3b190aGlyZCBsYXN0PSJubyJdDQpbdGl0bGUgc2l6ZT0iMyJdQ29udGFjdCBmb3JtWy90aXRsZV0NCltncmF2aXR5Zm9ybSBpZD0iMSIgbmFtZT0iQ29udGFjdG8iIGFqYXg9InRydWUiIHRpdGxlPSJmYWxzZSJdDQpbL3R3b190aGlyZF0NCltvbmVfdGhpcmQgbGFzdD0ieWVzIl0NClt0aXRsZSBzaXplPSIzIl1Eb3VibGUgUiBHcm91cFsvdGl0bGVdDQo8cD5bZm9udGF3ZXNvbWUgaWNvbj0ibWFwLW1hcmtlciIgY2lyY2xlPSJubyIgc2l6ZT0ibWVkaXVtIiBpY29uY29sb3I9IiMyOTVlODEiIGNpcmNsZWNvbG9yPSIiIGNpcmNsZWJvcmRlcmNvbG9yPSIiIGFuaW1hdGlvbl90eXBlPSIwIiBhbmltYXRpb25fZGlyZWN0aW9uPSJkb3duIiBhbmltYXRpb25fc3BlZWQ9IjAuMSJdIENhbGxlIGRlIEFsbWFncm8sIDIxLCAyODAxMCBNYWRyaWQ8L3A+DQo8cD5bZm9udGF3ZXNvbWUgaWNvbj0icGhvbmUiIGNpcmNsZT0ibm8iIHNpemU9Im1lZGl1bSIgaWNvbmNvbG9yPSIjMjk1ZTgxIiBjaXJjbGVjb2xvcj0iIiBjaXJjbGVib3JkZXJjb2xvcj0iIiBhbmltYXRpb25fdHlwZT0iMCIgYW5pbWF0aW9uX2RpcmVjdGlvbj0iZG93biIgYW5pbWF0aW9uX3NwZWVkPSIwLjEiXSszNCA2MTkgNjg2IDYzMzwvcD4NCjxwPltmb250YXdlc29tZSBpY29uPSJlbnZlbG9wZSIgY2lyY2xlPSJubyIgc2l6ZT0ibWVkaXVtIiBpY29uY29sb3I9IiMyOTVlODEiIGNpcmNsZWNvbG9yPSIiIGNpcmNsZWJvcmRlcmNvbG9yPSIiIGFuaW1hdGlvbl90eXBlPSIwIiBhbmltYXRpb25fZGlyZWN0aW9uPSJkb3duIiBhbmltYXRpb25fc3BlZWQ9IjAuMSJdaW5mb0Bkb3VibGVyZ3JvdXAuY29tPC9wPg0KPHA+W2ZvbnRhd2Vzb21lIGljb249Imdsb2JlIiBjaXJjbGU9Im5vIiBzaXplPSJtZWRpdW0iIGljb25jb2xvcj0iIzI5NWU4MSIgY2lyY2xlY29sb3I9IiIgY2lyY2xlYm9yZGVyY29sb3I9IiIgYW5pbWF0aW9uX3R5cGU9IjAiIGFuaW1hdGlvbl9kaXJlY3Rpb249ImRvd24iIGFuaW1hdGlvbl9zcGVlZD0iMC4xIl13d3cuZG91Ymxlcmdyb3VwLmNvbTwvcD4NClsvb25lX3RoaXJkXQ0K', 1), +(21, 7, 0, '2014-02-26 18:01:28', 'original_id', '', 0, '4671', '', 1), +(22, 8, 0, '2014-02-26 18:08:59', 'title', 'base64', 1, 'SW5pY2lv', 'SW5pY2lv', 1), +(23, 8, 0, '2014-02-26 18:08:59', 'body', 'base64', 1, 'W3NlcGFyYXRvciB0b3A9Ii01NSJdDQoNCltmdWxsd2lkdGggYm9yZGVyc2l6ZT0iMCJdDQoNCiZuYnNwOw0KDQpbdGl0bGUgc2l6ZT0iMiJdTnVlc3Ryb3MgY2FiYWxsb3NbL3RpdGxlXQ0KDQpbcmVjZW50X3dvcmtzIGxheW91dD0iZ3JpZC13aXRoLWV4Y2VycHRzIiBmaWx0ZXJzPSJubyIgY29sdW1ucz0iNCIgY2F0X3NsdWc9IiIgbnVtYmVyX3Bvc3RzPSI0IiBleGNlcnB0X3dvcmRzPSIxNSIgYW5pbWF0aW9uX3R5cGU9ImJvdW5jZSIgYW5pbWF0aW9uX2RpcmVjdGlvbj0iZG93biIgYW5pbWF0aW9uX3NwZWVkPSIwLjEiXVsvcmVjZW50X3dvcmtzXQ0KWy9mdWxsd2lkdGhdDQpbZnVsbHdpZHRoIGJhY2tncm91bmRjb2xvcj0iI2YwZjBmZiIgYmFja2dyb3VuZGltYWdlPSIiIGJhY2tncm91bmRyZXBlYXQ9Im5vLXJlcGVhdCIgYmFja2dyb3VuZHBvc2l0aW9uPSJsZWZ0IHRvcCIgYmFja2dyb3VuZGF0dGFjaG1lbnQ9InNjcm9sbCIgYm9yZGVyc2l6ZT0iMXB4IiBib3JkZXJjb2xvcj0iI2U1ZTRlNCIgcGFkZGluZ1RvcD0iNjBweCIgcGFkZGluZ0JvdHRvbT0iMjBweCJdW29uZV9oYWxmIGxhc3Q9Im5vIl1beW91dHViZSBpZD0iSzcwOFE0emlwRXciIHdpZHRoPSI2MDAiIGhlaWdodD0iMzM4IiBhdXRvcGxheT0ibm8iXVsvb25lX2hhbGZdDQpbb25lX2hhbGYgbGFzdD0ieWVzIl1bdGl0bGUgc2l6ZT0iMiJdQ2FiYWxsb3MgZGUgY29tcGV0aWNpw7NuWy90aXRsZV0NCkludGVnZXIgdGluY2lkdW50IG5lcXVlIGNvbW1vZG8gYmxhbmRpdCBsb2JvcnRpcy4gRG9uZWMgdmVzdGlidWx1bSBlcm9zIHNpdCBhbWV0IGFudGUgY29uZ3VlIG1hbGVzdWFkYSBldSB2aXRhZSBsYWN1cy4gSW50ZWdlciBlZ2V0IGVsaXQgbWV0dXMuIERvbmVjIGluIGRvbG9yIHNlZCB0dXJwaXMgY29uZGltZW50dW0gYWxpcXVhbS4gU2VkIHVsdHJpY2VzIGFjIGxpYmVybyBldSBsdWN0dXMuIE51bGxhbSB1dCBhdWN0b3IgYXJjdSwgbm9uIGFjY3Vtc2FuIGVsaXQuIFNlZCBwb3J0dGl0b3IgZnJpbmdpbGxhIG51bmMuIFZlc3RpYnVsdW0gcGVsbGVudGVzcXVlIGlhY3VsaXMgZWxpdCBldSB0aW5jaWR1bnQuIEludGVnZXIgbm9uIG9ybmFyZSBtYWduYSwgc2l0IGFtZXQgcnV0cnVtIG5lcXVlLg0KWy9vbmVfaGFsZl0NClsvZnVsbHdpZHRoXQ0KW2Z1bGx3aWR0aCBib3JkZXJzaXplPSIwIl0NCltzZXBhcmF0b3IgdG9wPSI0MCIgc3R5bGU9InNoYWRvdyJdDQpbb25lX3RoaXJkIGxhc3Q9Im5vIl0NCjxkaXYgY2xhc3M9InBob3RvLWZyYW1lIj48aW1nIGNsYXNzPSJ3cC1pbWFnZSIgYWx0PSJTZXJ2aWNpb3MiIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi9ob3JzZS0wMy0xMDI0eDY1NC5qcGciIC8+PC9kaXY+DQpbY29udGVudF9ib3hlcyBsYXlvdXQ9Imljb24tb24tdG9wIl1bY29udGVudF9ib3ggdGl0bGU9IkNyw61hIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KW29uZV90aGlyZCBsYXN0PSJubyJdDQo8ZGl2IGNsYXNzPSJwaG90by1mcmFtZSI+PGltZyBjbGFzcz0id3AtaW1hZ2UiIGFsdD0iU2VydmljaW9zIiBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvaG9yc2UtMDIxLTEwMjR4NjU0LmpwZyIgLz48L2Rpdj4NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiXVtjb250ZW50X2JveCB0aXRsZT0iQ29tcGV0aWNpw7NuIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KW29uZV90aGlyZCBsYXN0PSJ5ZXMiXQ0KPGRpdiBjbGFzcz0icGhvdG8tZnJhbWUiPjxpbWcgY2xhc3M9IndwLWltYWdlIiBhbHQ9IlNlcnZpY2lvcyIgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL3N0YWJsZXMxLmpwZyIgLz48L2Rpdj4NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiXVtjb250ZW50X2JveCB0aXRsZT0iU2VydmljaW9zIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KWy9mdWxsd2lkdGhdDQpbZnVsbHdpZHRoIGJvcmRlcnNpemU9IjAiXQ0KW2NsaWVudHNdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdWy9jbGllbnRzXQ0KWy9mdWxsd2lkdGhd', 'W3NlcGFyYXRvciB0b3A9Ii01NSJdDQoNCltmdWxsd2lkdGggYm9yZGVyc2l6ZT0iMCJdDQoNCiZuYnNwOw0KDQpbdGl0bGUgc2l6ZT0iMiJdTnVlc3Ryb3MgY2FiYWxsb3NbL3RpdGxlXQ0KDQpbcmVjZW50X3dvcmtzIGxheW91dD0iZ3JpZC13aXRoLWV4Y2VycHRzIiBmaWx0ZXJzPSJubyIgY29sdW1ucz0iNCIgY2F0X3NsdWc9IiIgbnVtYmVyX3Bvc3RzPSI0IiBleGNlcnB0X3dvcmRzPSIxNSIgYW5pbWF0aW9uX3R5cGU9ImJvdW5jZSIgYW5pbWF0aW9uX2RpcmVjdGlvbj0iZG93biIgYW5pbWF0aW9uX3NwZWVkPSIwLjEiXVsvcmVjZW50X3dvcmtzXQ0KWy9mdWxsd2lkdGhdDQpbZnVsbHdpZHRoIGJhY2tncm91bmRjb2xvcj0iI2YwZjBmZiIgYmFja2dyb3VuZGltYWdlPSIiIGJhY2tncm91bmRyZXBlYXQ9Im5vLXJlcGVhdCIgYmFja2dyb3VuZHBvc2l0aW9uPSJsZWZ0IHRvcCIgYmFja2dyb3VuZGF0dGFjaG1lbnQ9InNjcm9sbCIgYm9yZGVyc2l6ZT0iMXB4IiBib3JkZXJjb2xvcj0iI2U1ZTRlNCIgcGFkZGluZ1RvcD0iNjBweCIgcGFkZGluZ0JvdHRvbT0iMjBweCJdW29uZV9oYWxmIGxhc3Q9Im5vIl1beW91dHViZSBpZD0iSzcwOFE0emlwRXciIHdpZHRoPSI2MDAiIGhlaWdodD0iMzM4IiBhdXRvcGxheT0ibm8iXVsvb25lX2hhbGZdDQpbb25lX2hhbGYgbGFzdD0ieWVzIl1bdGl0bGUgc2l6ZT0iMiJdQ2FiYWxsb3MgZGUgY29tcGV0aWNpw7NuWy90aXRsZV0NCkludGVnZXIgdGluY2lkdW50IG5lcXVlIGNvbW1vZG8gYmxhbmRpdCBsb2JvcnRpcy4gRG9uZWMgdmVzdGlidWx1bSBlcm9zIHNpdCBhbWV0IGFudGUgY29uZ3VlIG1hbGVzdWFkYSBldSB2aXRhZSBsYWN1cy4gSW50ZWdlciBlZ2V0IGVsaXQgbWV0dXMuIERvbmVjIGluIGRvbG9yIHNlZCB0dXJwaXMgY29uZGltZW50dW0gYWxpcXVhbS4gU2VkIHVsdHJpY2VzIGFjIGxpYmVybyBldSBsdWN0dXMuIE51bGxhbSB1dCBhdWN0b3IgYXJjdSwgbm9uIGFjY3Vtc2FuIGVsaXQuIFNlZCBwb3J0dGl0b3IgZnJpbmdpbGxhIG51bmMuIFZlc3RpYnVsdW0gcGVsbGVudGVzcXVlIGlhY3VsaXMgZWxpdCBldSB0aW5jaWR1bnQuIEludGVnZXIgbm9uIG9ybmFyZSBtYWduYSwgc2l0IGFtZXQgcnV0cnVtIG5lcXVlLg0KWy9vbmVfaGFsZl0NClsvZnVsbHdpZHRoXQ0KW2Z1bGx3aWR0aCBib3JkZXJzaXplPSIwIl0NCltzZXBhcmF0b3IgdG9wPSI0MCIgc3R5bGU9InNoYWRvdyJdDQpbb25lX3RoaXJkIGxhc3Q9Im5vIl0NCjxkaXYgY2xhc3M9InBob3RvLWZyYW1lIj48aW1nIGNsYXNzPSJ3cC1pbWFnZSIgYWx0PSJTZXJ2aWNpb3MiIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi9ob3JzZS0wMy0xMDI0eDY1NC5qcGciIC8+PC9kaXY+DQpbY29udGVudF9ib3hlcyBsYXlvdXQ9Imljb24tb24tdG9wIl1bY29udGVudF9ib3ggdGl0bGU9IkNyw61hIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KW29uZV90aGlyZCBsYXN0PSJubyJdDQo8ZGl2IGNsYXNzPSJwaG90by1mcmFtZSI+PGltZyBjbGFzcz0id3AtaW1hZ2UiIGFsdD0iU2VydmljaW9zIiBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvaG9yc2UtMDIxLTEwMjR4NjU0LmpwZyIgLz48L2Rpdj4NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiXVtjb250ZW50X2JveCB0aXRsZT0iQ29tcGV0aWNpw7NuIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KW29uZV90aGlyZCBsYXN0PSJ5ZXMiXQ0KPGRpdiBjbGFzcz0icGhvdG8tZnJhbWUiPjxpbWcgY2xhc3M9IndwLWltYWdlIiBhbHQ9IlNlcnZpY2lvcyIgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL3N0YWJsZXMxLmpwZyIgLz48L2Rpdj4NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiXVtjb250ZW50X2JveCB0aXRsZT0iU2VydmljaW9zIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KWy9mdWxsd2lkdGhdDQpbZnVsbHdpZHRoIGJvcmRlcnNpemU9IjAiXQ0KW2NsaWVudHNdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdWy9jbGllbnRzXQ0KWy9mdWxsd2lkdGhd', 1), +(24, 8, 0, '2014-02-26 18:08:59', 'original_id', '', 0, '4705', '', 1), +(107, 19, 0, '2014-02-28 13:03:04', 'title', 'base64', 1, 'SW5pY2lv', 'SW5pY2lv', 1), +(25, 9, 0, '2014-02-26 18:57:29', 'title', 'base64', 1, 'SW5zdGFsYWNpb25lcw==', 'RmFjaWxpdGllcw==', 1), +(26, 9, 0, '2014-02-26 18:57:29', 'body', 'base64', 1, 'W3NlcGFyYXRvciB0b3A9Ii0yMCJdDQpbc2xpZGVyXVtzbGlkZV1odHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL1NhbnRheW5lei5qcGdbL3NsaWRlXVtzbGlkZV1odHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzAzX2Jhbm5lcmhvbWVfYWxsb3RqYW1lbnRfMi5qcGdbL3NsaWRlXVtzbGlkZV1odHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzA5X2Jhbm5lcmhvbWVfY2FiYWxsb18xLmpwZ1svc2xpZGVdWy9zbGlkZXJdDQpbc2VwYXJhdG9yIHRvcD0iLTMwIiBzdHlsZT0ibm9uZSJdDQo8c3Ryb25nPjxlbT5BIGNpZW4ga2lsw7NtZXRyb3MgZGUgTWFkcmlkIGVzdMOhbiBsYXMgaW5zdGFsYWNpb25lcyBkZSBEb3VibGUgUiBHcm91cC4gRW4gdW5hIGZpbmNhIGRlIHRyZWludGEgaGVjdMOhcmVhcyBkZXNhcnJvbGxhbW9zIGxhcyBhY3RpdmlkYWRlcyBkZSBjcsOtYSB5IGVudHJlbmFtaWVudG8gZGUgY2FiYWxsb3MgcGFyYSBsYSBhbHRhIGNvbXBldGljacOzbi48L2VtPjwvc3Ryb25nPg0KDQpbc2VwYXJhdG9yIHRvcD0iNTAiXQ0KDQpbdHdvX3RoaXJkIGxhc3Q9Im5vIl0NClt0aXRsZSBzaXplPSIzIl1Eb3RhY2lvbmVzWy90aXRsZV0NCg0KRG91YmxlIFIgR3JvdXAgdGllbmUgdG9kYSBsYSBpbmZyYWVzdHJ1Y3R1cmEgbmVjZXNhcmlhIHBhcmEgZWwgZGVzYXJyb2xsbyB5IGVsIGVudHJlbmFtaWVudG8gZGUgbG9zIGNhYmFsbG9zIGVuIHRvZGFzIHN1cyBmYXNlcw0KDQpbY2hlY2tsaXN0IGljb249ImNpcmNsZS1hcnJvdy1yaWdodCIgaWNvbmNvbG9yPSIzOTVCN0IiIGNpcmNsZT0ibm8iXQ0KPHVsPg0KCTxsaT5GaW5jYSBkZSBtw6FzIGRlIHRyZWludGEgaGVjdMOhcmVhcy48L2xpPg0KCTxsaT5QaXN0YXMgZGUgdHJhYmFqbyB5IHNhbHRvPC9saT4NCgk8bGk+UGlzdGFzIHBhcmEgZGFyIGN1ZXJkYTwvbGk+DQoJPGxpPlBpc3RhcyBkZSBnYWxvcGU8L2xpPg0KCTxsaT5DYW1pbmFkb3JlczwvbGk+DQoJPGxpPlN1ZWxvcyBkZSBjb25kaWNpb25lcyDDs3B0aW1hczwvbGk+DQo8L3VsPg0KWy9jaGVja2xpc3RdDQpbL3R3b190aGlyZF0NCg0KW29uZV90aGlyZCBsYXN0PSJ5ZXMiXQ0KW3RpdGxlIHNpemU9IjMiXUxvY2FsaXphY2nDs25bL3RpdGxlXQ0KPGlmcmFtZSBzcmM9Imh0dHBzOi8vbWFwcy5nb29nbGUuY29tL21hcHM/Zj1xJmFtcDtzb3VyY2U9c19xJmFtcDtobD1lbiZhbXA7Z2VvY29kZT0mYW1wO3E9Nzc1K05ldytZb3JrK0F2ZSwrQnJvb2tseW4sK0tpbmdzLCtOZXcrWW9yaysxMTIwMyZhbXA7YXE9JmFtcDtzbGw9MjcuNjk4NjM4LC04My44MDQ2MDEmYW1wO3NzcG49MjEuNzcwMTMxLDQ3Ljg3ODQxOCZhbXA7aWU9VVRGOCZhbXA7aHE9JmFtcDtobmVhcj03NzUrRStOZXcrWW9yaytBdmUsK0Jyb29rbHluLCtOZXcrWW9yaysxMTIwMyZhbXA7dD1tJmFtcDt6PTE0JmFtcDtsbD00MC42NjI0NDEsLTczLjkzNjkzNSZhbXA7b3V0cHV0PWVtYmVkIiBoZWlnaHQ9IjE1MCIgd2lkdGg9IjI4OCIgZnJhbWVib3JkZXI9IjAiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIHNjcm9sbGluZz0ibm8iPjwvaWZyYW1lPg0KPHNtYWxsPkluc3RhbGFjaW9uZXMgZW4gbGEgQ29tdW5pZGFkIGRlIE1hZHJpZDwvc21hbGw+DQpbL29uZV90aGlyZF0NCg0KW3NlcGFyYXRvciB0b3A9IjE1Il0NClt0aXRsZSBzaXplPSIzIl1JbcOhZ2VuZXMgZGUgbGFzIGluc3RhbGFjaW9uZXNbL3RpdGxlXQ0KDQpbaW1hZ2VzIGxpZ2h0Ym94PSJ5ZXMiXQ0KW2ltYWdlIGxpbms9IiIgbGlua3RhcmdldD0iX3NlbGYiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzEuanBnIiBhbHQ9IiJdDQpbaW1hZ2UgbGluaz0iIiBsaW5rdGFyZ2V0PSJfc2VsZiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvMi5qcGciIGFsdD0iIl0NCltpbWFnZSBsaW5rPSIiIGxpbmt0YXJnZXQ9Il9zZWxmIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi8zLmpwZyIgYWx0PSIiXQ0KW2ltYWdlIGxpbms9IiIgbGlua3RhcmdldD0iX3NlbGYiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzQuanBnIiBhbHQ9IiJdDQpbaW1hZ2UgbGluaz0iIiBsaW5rdGFyZ2V0PSJfc2VsZiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvNS5qcGciIGFsdD0iIl0NCltpbWFnZSBsaW5rPSIiIGxpbmt0YXJnZXQ9Il9zZWxmIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi82LmpwZyIgYWx0PSIiXQ0KW2ltYWdlIGxpbms9IiIgbGlua3RhcmdldD0iX3NlbGYiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzcuanBnIiBhbHQ9IiJdDQpbL2ltYWdlc10=', '', 0), +(27, 9, 0, '2014-02-26 18:57:29', 'original_id', '', 0, '4824', '', 0), +(28, 10, 0, '2014-02-26 20:04:44', 'title', 'base64', 1, 'Tm9zb3Ryb3M=', 'QWJvdXQgdXM=', 1), +(29, 10, 0, '2014-02-26 20:04:44', 'body', 'base64', 1, 'W3NlcGFyYXRvciB0b3A9Ii01NSIgc3R5bGU9Im5vbmUiXQ0KW2Z1bGx3aWR0aCBib3JkZXJzaXplPSIwIiBwYWRkaW5nVG9wPSIyMHB4IiBwYWRkaW5nQm90dG9tPSIyMHB4IiBiYWNrZ3JvdW5kY29sb3I9IiNmOGY4ZjgiIGJvcmRlcnNpemU9IjFweCIgYm9yZGVyY29sb3I9IiNlNWU0ZTQiXQ0KW29uZV9oYWxmIGxhc3Q9Im5vIl0NCltzZXBhcmF0b3IgdG9wPSI1MCJdDQo8ZGl2IGNsYXNzPSJwaG90by1mcmFtZSI+PGltZyBjbGFzcz0id3AtaW1hZ2UiIGFsdD0iRXF1aXBvIiBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvZl9lcXVpcG8uanBnIiAvPjwvZGl2Pg0KWy9vbmVfaGFsZl0NCltvbmVfaGFsZiBsYXN0PSJ5ZXMiXQ0KW3RpdGxlIHNpemU9IjIiXUZpbG9zb2bDrWFbL3RpdGxlXQ0KTGlkIGVzdCBsYWJvcnVtIGRvbG8gcnVtZXMgZnVnYXRzIHVudHJhcy4gRXRoYXJ1bXMgc2VyIHF1aWRlbSByZXJ1bSBmYWNpbGlzIGRvbG9yZXMgbmVtaXMgb21uaXMgZnVnYXRzIHZpdGFlcyBuZW1vIG1pbmltYSByZXJ1bXMgdW5zZXJzIHNhZGlwcyBhbWV0cy4gU2VkIHV0IHBlcnNwaWNpYXRpcyB1bmRlIG9tbmlzIGlzdGUgbmF0dXMgZXJyb3Igc2l0IHZvbHVwdGF0ZW0gYWNjdXNhbnRpdW0gZG9sb3JlbXF1ZSBsYXVkYW50aXVtLCB0b3RhbSByZW0gYXBlcmlhbSwgZWFxdWUgaXBzYSBxdWFlIGFiIGlsbG8gaW52ZW50b3JlIHZlcml0YXRpcyBldCBxdWFzaSBhcmNoaXRlY3RvIGJlYXRhZSB2aXRhZSBkaWN0YSBzdW50IGV4cGxpY2Fiby4gTmVtbyBlbmltIGlwc2FtIHZvbHVwdGF0ZW0gcXVpYSB2b2x1cHRhcyBzaXQgYXNwZXJuYXR1ciBhdXQgb2RpdCBhdXQgZnVnaXQsIHNlZCBxdWlhIGNvbnNlcXV1bnR1ciBtYWduaSBkb2xvcmVzIGVvcyBxdWkgcmF0aW9uZSB2b2x1cHRhdGVtIHNlcXVpIG5lc2NpdW50Li4gTmVxdWUgcG9ycm8gcXVpc3F1YW0gZXN0LCBxdWkgZG9sb3JlbSBpcHN1bSBxdWlhIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciwgYWRpcGlzY2kgdmVsaXQsIHNlZCBxdWlhIG5vbiBudW1xdWFtIGVpdXMgbW9kaSB0ZW1wb3JhIGluY2lkdW50IHV0IGxhYm9yZSBkb2xvcmUgbWFnbm0gYWxpcXVhbSBxdWFlcmF0IHZvbHVwdGF0ZW0uDQpbL29uZV9oYWxmXQ0KWy9mdWxsd2lkdGhdDQoNCltzZXBhcmF0b3IgdG9wPSIyMCJdDQpbZnVsbHdpZHRoIGJhY2tncm91bmRjb2xvcj0iIiBiYWNrZ3JvdW5kaW1hZ2U9IiIgYmFja2dyb3VuZHJlcGVhdD0ibm8tcmVwZWF0IiBiYWNrZ3JvdW5kcG9zaXRpb249ImxlZnQgdG9wIiBiYWNrZ3JvdW5kYXR0YWNobWVudD0ic2Nyb2xsIiBib3JkZXJzaXplPSIwIiBib3JkZXJjb2xvcj0iI2U1ZTRlNCIgcGFkZGluZ1RvcD0iMHB4IiBwYWRkaW5nQm90dG9tPSIwcHgiXQ0KW3NlcGFyYXRvciB0b3A9IjEwIl0NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiIGljb25jb2xvcj0iIiBjaXJjbGVjb2xvcj0iIiBjaXJjbGVib3JkZXJjb2xvcj0iIiBiYWNrZ3JvdW5kY29sb3I9IiJdDQpbY29udGVudF9ib3ggdGl0bGU9Ik51ZXN0cmFzIGluc3RhbGFjaW9uZXMiIGljb249IiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvMS5qcGciIGltYWdlX3dpZHRoPSIzMDAiIGltYWdlX2hlaWdodD0iMjAwIiBsaW5rPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzLz9wYWdlX2lkPTQ2MjMjIiBsaW5rdGFyZ2V0PSJfc2VsZiIgbGlua3RleHQ9IiIgYW5pbWF0aW9uX3R5cGU9IjAiIGFuaW1hdGlvbl9kaXJlY3Rpb249ImRvd24iIGFuaW1hdGlvbl9zcGVlZD0iMC4xIl1FdGhhcnVtcyBzZXIgcXVpZGVtIHJlcnVtIGZhY2lsaXMgZG9sb3JlcyBuZW1pcyBvbW5pcyBmdWdhdHMgdml0YWVzIG5lbW8gbWluaW1hIHJlcnVtcyB1bnNlcnMgc2FkaXBzIGFtZXRzLlsvY29udGVudF9ib3hdDQoNCltjb250ZW50X2JveCB0aXRsZT0iQ3VpZGFkbyBkZSBsb3MgY2FiYWxsb3MiIGljb249IiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvaG9yc2UtMDMtMTAyNHg2NTQuanBnIiBpbWFnZV93aWR0aD0iMzAwIiBpbWFnZV9oZWlnaHQ9IjIwMCIgbGluaz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy8/cGFnZV9pZD00NjIzIyIgbGlua3RhcmdldD0iX3NlbGYiIGxpbmt0ZXh0PSIiIGFuaW1hdGlvbl90eXBlPSIwIiBhbmltYXRpb25fZGlyZWN0aW9uPSJkb3duIiBhbmltYXRpb25fc3BlZWQ9IjAuMSJdRXRoYXJ1bXMgc2VyIHF1aWRlbSByZXJ1bSBmYWNpbGlzIGRvbG9yZXMgbmVtaXMgb21uaXMgZnVnYXRzIHZpdGFlcyBuZW1vIG1pbmltYSByZXJ1bXMgdW5zZXJzIHNhZGlwcyBhbWV0cy5bL2NvbnRlbnRfYm94XQ0KDQpbY29udGVudF9ib3ggdGl0bGU9IlBlcnNvbmFsIGN1YWxpZmljYWRvIiBpY29uPSIiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL2hvcnNlLTAxMS0xMDI0eDY1NC5qcGciIGltYWdlX3dpZHRoPSIzMDAiIGltYWdlX2hlaWdodD0iMjAwIiBsaW5rPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzLz9wYWdlX2lkPTQ2MjMjIiBsaW5rdGFyZ2V0PSJfc2VsZiIgbGlua3RleHQ9IiIgYW5pbWF0aW9uX3R5cGU9IjAiIGFuaW1hdGlvbl9kaXJlY3Rpb249ImRvd24iIGFuaW1hdGlvbl9zcGVlZD0iMC4xIl1FdGhhcnVtcyBzZXIgcXVpZGVtIHJlcnVtIGZhY2lsaXMgZG9sb3JlcyBuZW1pcyBvbW5pcyBmdWdhdHMgdml0YWVzIG5lbW8gbWluaW1hIHJlcnVtcyB1bnNlcnMgc2FkaXBzIGFtZXRzLlsvY29udGVudF9ib3hdDQoNClsvY29udGVudF9ib3hlc10NCltzZXBhcmF0b3IgdG9wPSI1NSJdDQpbL2Z1bGx3aWR0aF0NCg0KW3NlcGFyYXRvciB0b3A9IjEwIl0NCltmdWxsd2lkdGggYmFja2dyb3VuZGNvbG9yPSIjZjhmOGY4IiBiYWNrZ3JvdW5kaW1hZ2U9IiIgYmFja2dyb3VuZHJlcGVhdD0ibm8tcmVwZWF0IiBiYWNrZ3JvdW5kcG9zaXRpb249ImxlZnQgdG9wIiBiYWNrZ3JvdW5kYXR0YWNobWVudD0ic2Nyb2xsIiBib3JkZXJzaXplPSIxcHgiIGJvcmRlcmNvbG9yPSIjZTVlNGU0IiBwYWRkaW5nVG9wPSIyMHB4IiBwYWRkaW5nQm90dG9tPSIyMHB4Il0NCltvbmVfdGhpcmQgbGFzdD0ibm8iXQ0KW3NlcGFyYXRvciB0b3A9IjUwIl0NCjxkaXYgY2xhc3M9InBob3RvLWZyYW1lIj48aW1nIGNsYXNzPSJhbGlnbm5vbmUgc2l6ZS1tZWRpdW0gd3AtaW1hZ2UtNDcxNyIgYWx0PSJob3JzZS0wMjEtMTAyNHg2NTQiIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi9ob3JzZS0wMjEtMTAyNHg2NTQtMzAweDE5MS5qcGciIHdpZHRoPSIzMDAiIGhlaWdodD0iMTkxIiAvPjwvZGl2Pg0KWy9vbmVfdGhpcmRdDQpbdHdvX3RoaXJkIGxhc3Q9InllcyJdDQpbdGl0bGUgc2l6ZT0iMyJdTnVlc3Ryb3Mgc2VtZW50YWxlc1svdGl0bGVdDQpOdWVzdHJvIG9iamV0aXZvIGVzIHRlbmVyIHVuIGdydXBvIGRlIHNlbWVudGFsZXMgY29tcGV0aXRpdm9zIGVuIGxhIGNvbXBldGljacOzbiBlIGludGVyZXNhbnRlIHBhcmEgbGEgY3LDrWEuIEludGVudGFtb3MgcXVlIGVsIHNlbWVudGFsIHNlYSBsbyBtw6FzIGNvbXBsZXRvIHBvc2libGUgcGFyYSBsb3MgY3JpYWRvcmVzLiBIZW1vcyBidXNjYWRvIGxvcyBzZW1lbnRhbGVzIGVudHJlIGxvcyBtZWpvcmVzIG9yw61nZW5lcywgc2llbXByZSBjb24gdW4gYnVlbiBmw61zaWNvIHkgYnVlbm9zIG1vdmltaWVudG9zIHF1ZSBwZXJtaXRhbiBxdWUgZWwgc2VtZW50YWwgdGVuZ2EgdW5hIGdyYW4gY2FwYWNpZGFkIHBhcmEgc2FsdGFyLg0KRHVyYW50ZSBsYSB0ZW1wb3JhZGEgZGUgY3VicmljaW9uZXMsIGxvcyBzZW1lbnRhbGVzIGNvbWJpbmFuIHN1cyB0YXJlYXMgZGUgcmVwcm9kdWNjacOzbiBjb24gbGEgY29tcGV0aWNpw7NuLCBlIGludGVudGFtb3Mgb2ZyZWNlciB1biBidWVuIHNlcnZpY2lvIGEgbG9zIGNyaWFkb3Jlcy4gUGFyYSBsYSBleHRyYWNjacOzbiB5IG1hbmlwdWxhY2nDs24gZGVsIHNlbWVuLCBsYSBZZWd1YWRhIENhbXBvcyBwb3NlZSBsYXMgw7psdGltYXMgdGVjbm9sb2fDrWFzIHF1ZSBub3MgcGVybWl0ZW4gZW52aWFyIHNlbWVuIGZyZXNjbyB5IGNvbmdlbGFkbyBhIGN1YWxxdWllciBwdW50byBkZSBFdXJvcGEgZW4gbWVub3MgZGUgMjQgaG9yYXMuDQpbL3R3b190aGlyZF0gDQpbc2VwYXJhdG9yIHRvcD0iNTUiXQ0KW29uZV90aGlyZCBsYXN0PSJubyJdDQpbc2VwYXJhdG9yIHRvcD0iNTAiXQ0KPGRpdiBjbGFzcz0icGhvdG8tZnJhbWUiPjxpbWcgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL2NhYmFsbG8teWVndWEtY29uLXN1LWNyaWEtby1wb3Ryby1iZWJlLWVxdWlub3MtMzAweDE4Ny5qcGciIGFsdD0iWWVndWEiIHdpZHRoPSIzMDAiIGhlaWdodD0iMTg3IiBjbGFzcz0iYWxpZ25ub25lIHNpemUtbWVkaXVtIHdwLWltYWdlLTUwNjgiIC8+PC9kaXY+DQpbL29uZV90aGlyZF0NClt0d29fdGhpcmQgbGFzdD0ieWVzIl0NClt0aXRsZSBzaXplPSIzIl1OdWVzdHJhcyB5ZWd1YXNbL3RpdGxlXQ0KUGFyYSBwb2RlciBjdW1wbGlyIG51ZXN0cm8gb2JqZXRpdm8sIHRvZGFzIGxhcyB5ZWd1YXMgaGFuIHNpZG8gc2VsZWNjaW9uYWRhcyBtdXkgY3VpZGFkb3NhbWVudGUgZW50cmUgbGFzIG1lam9yZXMgZmFtaWxpYXMgbWF0ZXJuYXMgcGFyYSBwcm9kdWNpciBwb3Ryb3MgcXVlIHNlcsOhbiBkZXN0aW5hZG9zIGEgY29tcGV0aXIgZW4gZWwgbcOheGltbyBuaXZlbCBpbnRlcm5hY2lvbmFsLg0KWy90d29fdGhpcmRdDQoNClsvZnVsbHdpZHRoXQ0KW3NlcGFyYXRvciB0b3A9Ii01NSJd', 'W3NlcGFyYXRvciB0b3A9Ii01NSIgc3R5bGU9Im5vbmUiXQ0KW2Z1bGx3aWR0aCBib3JkZXJzaXplPSIwIiBwYWRkaW5nVG9wPSIyMHB4IiBwYWRkaW5nQm90dG9tPSIyMHB4IiBiYWNrZ3JvdW5kY29sb3I9IiNmOGY4ZjgiIGJvcmRlcnNpemU9IjFweCIgYm9yZGVyY29sb3I9IiNlNWU0ZTQiXQ0KW29uZV9oYWxmIGxhc3Q9Im5vIl0NCltzZXBhcmF0b3IgdG9wPSI1MCJdDQo8ZGl2IGNsYXNzPSJwaG90by1mcmFtZSI+PGltZyBjbGFzcz0id3AtaW1hZ2UiIGFsdD0iRXF1aXBvIiBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvZl9lcXVpcG8uanBnIiAvPjwvZGl2Pg0KWy9vbmVfaGFsZl0NCltvbmVfaGFsZiBsYXN0PSJ5ZXMiXQ0KW3RpdGxlIHNpemU9IjIiXUZpbG9zb2bDrWFbL3RpdGxlXQ0KTGlkIGVzdCBsYWJvcnVtIGRvbG8gcnVtZXMgZnVnYXRzIHVudHJhcy4gRXRoYXJ1bXMgc2VyIHF1aWRlbSByZXJ1bSBmYWNpbGlzIGRvbG9yZXMgbmVtaXMgb21uaXMgZnVnYXRzIHZpdGFlcyBuZW1vIG1pbmltYSByZXJ1bXMgdW5zZXJzIHNhZGlwcyBhbWV0cy4gU2VkIHV0IHBlcnNwaWNpYXRpcyB1bmRlIG9tbmlzIGlzdGUgbmF0dXMgZXJyb3Igc2l0IHZvbHVwdGF0ZW0gYWNjdXNhbnRpdW0gZG9sb3JlbXF1ZSBsYXVkYW50aXVtLCB0b3RhbSByZW0gYXBlcmlhbSwgZWFxdWUgaXBzYSBxdWFlIGFiIGlsbG8gaW52ZW50b3JlIHZlcml0YXRpcyBldCBxdWFzaSBhcmNoaXRlY3RvIGJlYXRhZSB2aXRhZSBkaWN0YSBzdW50IGV4cGxpY2Fiby4gTmVtbyBlbmltIGlwc2FtIHZvbHVwdGF0ZW0gcXVpYSB2b2x1cHRhcyBzaXQgYXNwZXJuYXR1ciBhdXQgb2RpdCBhdXQgZnVnaXQsIHNlZCBxdWlhIGNvbnNlcXV1bnR1ciBtYWduaSBkb2xvcmVzIGVvcyBxdWkgcmF0aW9uZSB2b2x1cHRhdGVtIHNlcXVpIG5lc2NpdW50Li4gTmVxdWUgcG9ycm8gcXVpc3F1YW0gZXN0LCBxdWkgZG9sb3JlbSBpcHN1bSBxdWlhIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciwgYWRpcGlzY2kgdmVsaXQsIHNlZCBxdWlhIG5vbiBudW1xdWFtIGVpdXMgbW9kaSB0ZW1wb3JhIGluY2lkdW50IHV0IGxhYm9yZSBkb2xvcmUgbWFnbm0gYWxpcXVhbSBxdWFlcmF0IHZvbHVwdGF0ZW0uDQpbL29uZV9oYWxmXQ0KWy9mdWxsd2lkdGhdDQoNCltzZXBhcmF0b3IgdG9wPSIyMCJdDQpbZnVsbHdpZHRoIGJhY2tncm91bmRjb2xvcj0iIiBiYWNrZ3JvdW5kaW1hZ2U9IiIgYmFja2dyb3VuZHJlcGVhdD0ibm8tcmVwZWF0IiBiYWNrZ3JvdW5kcG9zaXRpb249ImxlZnQgdG9wIiBiYWNrZ3JvdW5kYXR0YWNobWVudD0ic2Nyb2xsIiBib3JkZXJzaXplPSIwIiBib3JkZXJjb2xvcj0iI2U1ZTRlNCIgcGFkZGluZ1RvcD0iMHB4IiBwYWRkaW5nQm90dG9tPSIwcHgiXQ0KW3NlcGFyYXRvciB0b3A9IjEwIl0NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiIGljb25jb2xvcj0iIiBjaXJjbGVjb2xvcj0iIiBjaXJjbGVib3JkZXJjb2xvcj0iIiBiYWNrZ3JvdW5kY29sb3I9IiJdDQpbY29udGVudF9ib3ggdGl0bGU9Ik51ZXN0cmFzIGluc3RhbGFjaW9uZXMiIGljb249IiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvMS5qcGciIGltYWdlX3dpZHRoPSIzMDAiIGltYWdlX2hlaWdodD0iMjAwIiBsaW5rPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzLz9wYWdlX2lkPTQ2MjMjIiBsaW5rdGFyZ2V0PSJfc2VsZiIgbGlua3RleHQ9IiIgYW5pbWF0aW9uX3R5cGU9IjAiIGFuaW1hdGlvbl9kaXJlY3Rpb249ImRvd24iIGFuaW1hdGlvbl9zcGVlZD0iMC4xIl1FdGhhcnVtcyBzZXIgcXVpZGVtIHJlcnVtIGZhY2lsaXMgZG9sb3JlcyBuZW1pcyBvbW5pcyBmdWdhdHMgdml0YWVzIG5lbW8gbWluaW1hIHJlcnVtcyB1bnNlcnMgc2FkaXBzIGFtZXRzLlsvY29udGVudF9ib3hdDQoNCltjb250ZW50X2JveCB0aXRsZT0iQ3VpZGFkbyBkZSBsb3MgY2FiYWxsb3MiIGljb249IiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvaG9yc2UtMDMtMTAyNHg2NTQuanBnIiBpbWFnZV93aWR0aD0iMzAwIiBpbWFnZV9oZWlnaHQ9IjIwMCIgbGluaz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy8/cGFnZV9pZD00NjIzIyIgbGlua3RhcmdldD0iX3NlbGYiIGxpbmt0ZXh0PSIiIGFuaW1hdGlvbl90eXBlPSIwIiBhbmltYXRpb25fZGlyZWN0aW9uPSJkb3duIiBhbmltYXRpb25fc3BlZWQ9IjAuMSJdRXRoYXJ1bXMgc2VyIHF1aWRlbSByZXJ1bSBmYWNpbGlzIGRvbG9yZXMgbmVtaXMgb21uaXMgZnVnYXRzIHZpdGFlcyBuZW1vIG1pbmltYSByZXJ1bXMgdW5zZXJzIHNhZGlwcyBhbWV0cy5bL2NvbnRlbnRfYm94XQ0KDQpbY29udGVudF9ib3ggdGl0bGU9IlBlcnNvbmFsIGN1YWxpZmljYWRvIiBpY29uPSIiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL2hvcnNlLTAxMS0xMDI0eDY1NC5qcGciIGltYWdlX3dpZHRoPSIzMDAiIGltYWdlX2hlaWdodD0iMjAwIiBsaW5rPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzLz9wYWdlX2lkPTQ2MjMjIiBsaW5rdGFyZ2V0PSJfc2VsZiIgbGlua3RleHQ9IiIgYW5pbWF0aW9uX3R5cGU9IjAiIGFuaW1hdGlvbl9kaXJlY3Rpb249ImRvd24iIGFuaW1hdGlvbl9zcGVlZD0iMC4xIl1FdGhhcnVtcyBzZXIgcXVpZGVtIHJlcnVtIGZhY2lsaXMgZG9sb3JlcyBuZW1pcyBvbW5pcyBmdWdhdHMgdml0YWVzIG5lbW8gbWluaW1hIHJlcnVtcyB1bnNlcnMgc2FkaXBzIGFtZXRzLlsvY29udGVudF9ib3hdDQoNClsvY29udGVudF9ib3hlc10NCltzZXBhcmF0b3IgdG9wPSI1NSJdDQpbL2Z1bGx3aWR0aF0NCg0KW3NlcGFyYXRvciB0b3A9IjEwIl0NCltmdWxsd2lkdGggYmFja2dyb3VuZGNvbG9yPSIjZjhmOGY4IiBiYWNrZ3JvdW5kaW1hZ2U9IiIgYmFja2dyb3VuZHJlcGVhdD0ibm8tcmVwZWF0IiBiYWNrZ3JvdW5kcG9zaXRpb249ImxlZnQgdG9wIiBiYWNrZ3JvdW5kYXR0YWNobWVudD0ic2Nyb2xsIiBib3JkZXJzaXplPSIxcHgiIGJvcmRlcmNvbG9yPSIjZTVlNGU0IiBwYWRkaW5nVG9wPSIyMHB4IiBwYWRkaW5nQm90dG9tPSIyMHB4Il0NCltvbmVfdGhpcmQgbGFzdD0ibm8iXQ0KW3NlcGFyYXRvciB0b3A9IjUwIl0NCjxkaXYgY2xhc3M9InBob3RvLWZyYW1lIj48aW1nIGNsYXNzPSJhbGlnbm5vbmUgc2l6ZS1tZWRpdW0gd3AtaW1hZ2UtNDcxNyIgYWx0PSJob3JzZS0wMjEtMTAyNHg2NTQiIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi9ob3JzZS0wMjEtMTAyNHg2NTQtMzAweDE5MS5qcGciIHdpZHRoPSIzMDAiIGhlaWdodD0iMTkxIiAvPjwvZGl2Pg0KWy9vbmVfdGhpcmRdDQpbdHdvX3RoaXJkIGxhc3Q9InllcyJdDQpbdGl0bGUgc2l6ZT0iMyJdTnVlc3Ryb3Mgc2VtZW50YWxlc1svdGl0bGVdDQpOdWVzdHJvIG9iamV0aXZvIGVzIHRlbmVyIHVuIGdydXBvIGRlIHNlbWVudGFsZXMgY29tcGV0aXRpdm9zIGVuIGxhIGNvbXBldGljacOzbiBlIGludGVyZXNhbnRlIHBhcmEgbGEgY3LDrWEuIEludGVudGFtb3MgcXVlIGVsIHNlbWVudGFsIHNlYSBsbyBtw6FzIGNvbXBsZXRvIHBvc2libGUgcGFyYSBsb3MgY3JpYWRvcmVzLiBIZW1vcyBidXNjYWRvIGxvcyBzZW1lbnRhbGVzIGVudHJlIGxvcyBtZWpvcmVzIG9yw61nZW5lcywgc2llbXByZSBjb24gdW4gYnVlbiBmw61zaWNvIHkgYnVlbm9zIG1vdmltaWVudG9zIHF1ZSBwZXJtaXRhbiBxdWUgZWwgc2VtZW50YWwgdGVuZ2EgdW5hIGdyYW4gY2FwYWNpZGFkIHBhcmEgc2FsdGFyLg0KRHVyYW50ZSBsYSB0ZW1wb3JhZGEgZGUgY3VicmljaW9uZXMsIGxvcyBzZW1lbnRhbGVzIGNvbWJpbmFuIHN1cyB0YXJlYXMgZGUgcmVwcm9kdWNjacOzbiBjb24gbGEgY29tcGV0aWNpw7NuLCBlIGludGVudGFtb3Mgb2ZyZWNlciB1biBidWVuIHNlcnZpY2lvIGEgbG9zIGNyaWFkb3Jlcy4gUGFyYSBsYSBleHRyYWNjacOzbiB5IG1hbmlwdWxhY2nDs24gZGVsIHNlbWVuLCBsYSBZZWd1YWRhIENhbXBvcyBwb3NlZSBsYXMgw7psdGltYXMgdGVjbm9sb2fDrWFzIHF1ZSBub3MgcGVybWl0ZW4gZW52aWFyIHNlbWVuIGZyZXNjbyB5IGNvbmdlbGFkbyBhIGN1YWxxdWllciBwdW50byBkZSBFdXJvcGEgZW4gbWVub3MgZGUgMjQgaG9yYXMuDQpbL3R3b190aGlyZF0gDQpbc2VwYXJhdG9yIHRvcD0iNTUiXQ0KW29uZV90aGlyZCBsYXN0PSJubyJdDQpbc2VwYXJhdG9yIHRvcD0iNTAiXQ0KPGRpdiBjbGFzcz0icGhvdG8tZnJhbWUiPjxpbWcgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL2NhYmFsbG8teWVndWEtY29uLXN1LWNyaWEtby1wb3Ryby1iZWJlLWVxdWlub3MtMzAweDE4Ny5qcGciIGFsdD0iWWVndWEiIHdpZHRoPSIzMDAiIGhlaWdodD0iMTg3IiBjbGFzcz0iYWxpZ25ub25lIHNpemUtbWVkaXVtIHdwLWltYWdlLTUwNjgiIC8+PC9kaXY+DQpbL29uZV90aGlyZF0NClt0d29fdGhpcmQgbGFzdD0ieWVzIl0NClt0aXRsZSBzaXplPSIzIl1OdWVzdHJhcyB5ZWd1YXNbL3RpdGxlXQ0KUGFyYSBwb2RlciBjdW1wbGlyIG51ZXN0cm8gb2JqZXRpdm8sIHRvZGFzIGxhcyB5ZWd1YXMgaGFuIHNpZG8gc2VsZWNjaW9uYWRhcyBtdXkgY3VpZGFkb3NhbWVudGUgZW50cmUgbGFzIG1lam9yZXMgZmFtaWxpYXMgbWF0ZXJuYXMgcGFyYSBwcm9kdWNpciBwb3Ryb3MgcXVlIHNlcsOhbiBkZXN0aW5hZG9zIGEgY29tcGV0aXIgZW4gZWwgbcOheGltbyBuaXZlbCBpbnRlcm5hY2lvbmFsLg0KWy90d29fdGhpcmRdDQoNClsvZnVsbHdpZHRoXQ0KW3NlcGFyYXRvciB0b3A9Ii01NSJd', 1), +(30, 10, 0, '2014-02-26 20:04:44', 'original_id', '', 0, '4623', '', 1), +(31, 11, 0, '2014-02-27 16:29:49', 'title', 'base64', 1, 'WmluZWRpbmU=', 'WmluZWRpbmU=', 1), +(32, 11, 0, '2014-02-27 16:29:49', 'body', 'base64', 1, 'PGg0PktXUE4gLSBjaGVzdG51dCAtIDIwMDQgLSAxNiwyIGhhbmRzPC9oND4NCg0KQXBwcm92ZWQgZm9yOiBXZXN0ZmFsZW4sIFJoZWlubGFuZCwgT1MsIEhhbm5vdmVyLCBhbGxlIHPDvGRkZXV0c2NoZW4gVmVyYsOkbmRlLiBPdGhlciB2ZXJiYW5kcyBvbiByZXF1ZXN0Lg0KSW5zZW1pbmF0aW9uIGZlZTogMTAwMOKCrCogKyBJbi1mb2FsIGZlZTogMTAwMOKCrCogKEZTK1RHKQ0KRm9yZWlnbiBjdXN0b21lcnMgbXVzdCBwYXkgZnVsbCBzdHVkIGZlZSBpbiBhZHZhbmNlLiBSZWZ1bmQgb2YgdGhlIGhhbGYgYXQgbm9uLXByZWduYW5jeQ0KDQoyMDEyIGVpZ2h0aCBpbiBoaXMgZmlyc3QgV29ybGQgQ3VwIGluIFN0dXR0Z2FydCBhZnRlciB3aW5uaW5nIGEgbnVtYmVyIG9mIHRlc3RzIGluIHRoZSBpbnRlcm5hdGlvbmFsIFlvdW5nc3RlciBUb3VyLiBQbGFjZWQgaW4gMjAxMywgYXMgYSBuaW5lLXllYXIgb2xkLCBhbW9uZyB0aGUgYmVzdCBpbiBDaGFudGlsbHkvRlJBLCBOZXVtw7xuc3Rlci9HRVIsIEFhY2hlbi9HRVIgYW5kIGBzIEhlcnRvZ2VuYm9zY2gvTkVELiBIaXMgc2lyZSBHdWlkYW0gKGJ5IFF1aWRhbSBkZSBSZXZlbCkgcHJvZHVjZWQgbWFueSBjaGFtcGlvbnNoaXAgb2Zmc3ByaW5nLiBEYW1gcyBzaXJlIEhlYXJ0YnJlYWtlciBpcyB0aGUgZm91cnRoLWJlc3QtanVtcGVyLW1ha2VyLiANCg0KW3RpdGxlIHNpemU9IjMiXVByb2dlbnlbL3RpdGxlXQ0KDQpGbG9yZW5jaWFub+KAmXMgZGVidXQgYXMgYSBzaXJlIHdhcyBicmlsbGlhbnQuIEluIGtlZXBpbmcgd2l0aCBoaXMgb3V0c3RhbmRpbmcgZmlyc3QgZm9hbCBjcm9wcywgaGlzIGRhdWdodGVyIEZlaW5lIFJvc2EgdG9vayB0aGUgMjAxMSBDaGFtcGlvbiBNYXJlIHRpdGxlIGF0IHRoZSBHZXJtYW4gRWxpdGUgQnJvb2RtYXJlIENoYW1waW9uc2hpcHMgYXMgd2VsbCBhcyB0aGUgUmhpbmVsYW5kIENoYW1waW9uIE1hcmUgdGl0bGUsIGhpcyBkYXVnaHRlciBGbG9yZW5jaWFuYSBGIGJlY2FtZSB0aGUgV2VzdHBoYWxpYW4gQ2hhbXBpb24gTWFyZSBhbmQgaGlzIGRhdWdodGVyIEZvciBDb210ZXNzIHdvbiB0aGUgV2VzdHBoYWxpYW4gQ2hhbXBpb25zaGlwcywgdGhlIFdlc3RwaGFsaWFuIFdhcHBlbiBhbmQgYWxzbyBwYXJ0aWNpcGF0ZWQgaW4gdGhlIEJ1bmRlc2NoYW1waW9uYXQgRmluYWwuIFRocmVlIG9mIGhpcyBzb25zIHdlcmUgbGljZW5zZWQsIGluY2x1ZGluZyB0aGUgMjAxMiBOUlcgcHJlbWl1bSBzdGFsbGlvbiwgRmFyYmVuc3BpZWwuIEhpcyBvZmZzcHJpbmcgYXJlIG9mZiB0byBhIGhpZ2hseSBwcm9taXNpbmcgc3RhcnQgaW4gYmFzaWMgdGVzdHMgZm9yIHlvdW5nc3RlcnMuIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUGVkaWdyZWVbL3RpdGxlXQ0KDQpIaXMgc2lyZSBpcyB0aGUgdHdvLXRpbWUgV29ybGQgQ2hhbXBpb24gb2YgeW91bmcgZHJlc3NhZ2UgaG9yc2VzLCBGbG9yZW5jaW8gSS4NCg0KRmxvcmVuY2lhbm/igJlzIGhpZ2hseSBkZWNvcmF0ZWQgZGFtIGxpbmUgb3JpZ2luYXRlZCBpbiB0aGUgTmV0aGVybGFuZHMuIEhpcyBkYW0gU3QuUHIuU3QuIEx1bmRpIFQgd29uIGVpZ2h0IG1lZGl1bSAoTSkgbGV2ZWwgZHJlc3NhZ2UgdGVzdHMgYW5kIHJlY2VpdmVkIOKAnHBlcmZvcm1hbmNlIG1hcmUgZHJlc3NhZ2XigJ0gc3RhdHVzLiAgVGhlIGRhbeKAmXMgc2lyZSBIYXZpZG9mZiwgYnkgdGhlIEdyYW5kIFByaXggc3RhbGxpb24gQ2xhdmVjaW1iZWwsIHdhcyBhd2FyZGVkIOKAnGtldXLigJ0gc3RhdHVzLiBNYW55IG9mIGhpcyBvZmZzcHJpbmcgd2luIHJpYmJvbnMgYXQgR3JhbmQgUHJpeCBsZXZlbCBzdWNoIGFzIGhpcyBsaWNlbnNlZCBzb24sIFBhZ2FuaW5pLiBHcmFuZGRhbSBBbnVza2EgcHJvZHVjZWQgc2V2ZXJhbCBob3JzZXMgdGhhdCB3ZXJlIHN1Y2Nlc3NmdWwgaW4gZHJlc3NhZ2UgcmluZ3MuIA0KDQpUaGUgcGVyZm9ybWFuY2UgZG9taW5hdGUgZGFtIGxpbmUgYWxzbyBwcm9kdWNlZCB0aGUgbGljZW5zZWQgWm/Dtmxvb2cgKGJ5IEdvbmRvbGllcikgd2hvIGhhcyBwbGFjZWQgaW4gaW50ZXJuYXRpb25hbCBkcmVzc2FnZSBjb21wZXRpdGlvbnMsIHRoZSB3b3JsZCBjbGFzcyBzaG93IGp1bXBlciBNaXN0ZXIgU3Bvb24gKGJ5IFphZG9jKS9DYW5kaWNlIEtpbmcvVVNBIGFuZCBOaWV0amUgKGJ5IFppZWhpbSksIHdobyB0b29rIGdvbGQgb24gdGhlIER1dGNoIHRlYW0gYXQgdGhlIDIwMDYgV29ybGQgRXF1ZXN0cmlhbiBHYW1lcyBpbiBBYWNoZW4gaW4gS29vcyBkZSBSb25kZeKAmXMgZHJpdmluZyB0ZWFtIG9mIGZvdXIgYXMgd2VsbCBhcyBtYW55IFN0YXRlIFByZW1pdW0gbWFyZXMgYW5kIGF1Y3Rpb24gaG9yc2VzLg0KDQo8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Ii8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL0dQM3ExREJxRjlZIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==', 'PGg0PktXUE4gLSBjaGVzdG51dCAtIDIwMDQgLSAxNiwyIGhhbmRzPC9oND4NCg0KQXBwcm92ZWQgZm9yOiBXZXN0ZmFsZW4sIFJoZWlubGFuZCwgT1MsIEhhbm5vdmVyLCBhbGxlIHPDvGRkZXV0c2NoZW4gVmVyYsOkbmRlLiBPdGhlciB2ZXJiYW5kcyBvbiByZXF1ZXN0Lg0KSW5zZW1pbmF0aW9uIGZlZTogMTAwMOKCrCogKyBJbi1mb2FsIGZlZTogMTAwMOKCrCogKEZTK1RHKQ0KRm9yZWlnbiBjdXN0b21lcnMgbXVzdCBwYXkgZnVsbCBzdHVkIGZlZSBpbiBhZHZhbmNlLiBSZWZ1bmQgb2YgdGhlIGhhbGYgYXQgbm9uLXByZWduYW5jeQ0KDQoyMDEyIGVpZ2h0aCBpbiBoaXMgZmlyc3QgV29ybGQgQ3VwIGluIFN0dXR0Z2FydCBhZnRlciB3aW5uaW5nIGEgbnVtYmVyIG9mIHRlc3RzIGluIHRoZSBpbnRlcm5hdGlvbmFsIFlvdW5nc3RlciBUb3VyLiBQbGFjZWQgaW4gMjAxMywgYXMgYSBuaW5lLXllYXIgb2xkLCBhbW9uZyB0aGUgYmVzdCBpbiBDaGFudGlsbHkvRlJBLCBOZXVtw7xuc3Rlci9HRVIsIEFhY2hlbi9HRVIgYW5kIGBzIEhlcnRvZ2VuYm9zY2gvTkVELiBIaXMgc2lyZSBHdWlkYW0gKGJ5IFF1aWRhbSBkZSBSZXZlbCkgcHJvZHVjZWQgbWFueSBjaGFtcGlvbnNoaXAgb2Zmc3ByaW5nLiBEYW1gcyBzaXJlIEhlYXJ0YnJlYWtlciBpcyB0aGUgZm91cnRoLWJlc3QtanVtcGVyLW1ha2VyLiANCg0KW3RpdGxlIHNpemU9IjMiXVByb2dlbnlbL3RpdGxlXQ0KDQpGbG9yZW5jaWFub+KAmXMgZGVidXQgYXMgYSBzaXJlIHdhcyBicmlsbGlhbnQuIEluIGtlZXBpbmcgd2l0aCBoaXMgb3V0c3RhbmRpbmcgZmlyc3QgZm9hbCBjcm9wcywgaGlzIGRhdWdodGVyIEZlaW5lIFJvc2EgdG9vayB0aGUgMjAxMSBDaGFtcGlvbiBNYXJlIHRpdGxlIGF0IHRoZSBHZXJtYW4gRWxpdGUgQnJvb2RtYXJlIENoYW1waW9uc2hpcHMgYXMgd2VsbCBhcyB0aGUgUmhpbmVsYW5kIENoYW1waW9uIE1hcmUgdGl0bGUsIGhpcyBkYXVnaHRlciBGbG9yZW5jaWFuYSBGIGJlY2FtZSB0aGUgV2VzdHBoYWxpYW4gQ2hhbXBpb24gTWFyZSBhbmQgaGlzIGRhdWdodGVyIEZvciBDb210ZXNzIHdvbiB0aGUgV2VzdHBoYWxpYW4gQ2hhbXBpb25zaGlwcywgdGhlIFdlc3RwaGFsaWFuIFdhcHBlbiBhbmQgYWxzbyBwYXJ0aWNpcGF0ZWQgaW4gdGhlIEJ1bmRlc2NoYW1waW9uYXQgRmluYWwuIFRocmVlIG9mIGhpcyBzb25zIHdlcmUgbGljZW5zZWQsIGluY2x1ZGluZyB0aGUgMjAxMiBOUlcgcHJlbWl1bSBzdGFsbGlvbiwgRmFyYmVuc3BpZWwuIEhpcyBvZmZzcHJpbmcgYXJlIG9mZiB0byBhIGhpZ2hseSBwcm9taXNpbmcgc3RhcnQgaW4gYmFzaWMgdGVzdHMgZm9yIHlvdW5nc3RlcnMuIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUGVkaWdyZWVbL3RpdGxlXQ0KDQpIaXMgc2lyZSBpcyB0aGUgdHdvLXRpbWUgV29ybGQgQ2hhbXBpb24gb2YgeW91bmcgZHJlc3NhZ2UgaG9yc2VzLCBGbG9yZW5jaW8gSS4NCg0KRmxvcmVuY2lhbm/igJlzIGhpZ2hseSBkZWNvcmF0ZWQgZGFtIGxpbmUgb3JpZ2luYXRlZCBpbiB0aGUgTmV0aGVybGFuZHMuIEhpcyBkYW0gU3QuUHIuU3QuIEx1bmRpIFQgd29uIGVpZ2h0IG1lZGl1bSAoTSkgbGV2ZWwgZHJlc3NhZ2UgdGVzdHMgYW5kIHJlY2VpdmVkIOKAnHBlcmZvcm1hbmNlIG1hcmUgZHJlc3NhZ2XigJ0gc3RhdHVzLiAgVGhlIGRhbeKAmXMgc2lyZSBIYXZpZG9mZiwgYnkgdGhlIEdyYW5kIFByaXggc3RhbGxpb24gQ2xhdmVjaW1iZWwsIHdhcyBhd2FyZGVkIOKAnGtldXLigJ0gc3RhdHVzLiBNYW55IG9mIGhpcyBvZmZzcHJpbmcgd2luIHJpYmJvbnMgYXQgR3JhbmQgUHJpeCBsZXZlbCBzdWNoIGFzIGhpcyBsaWNlbnNlZCBzb24sIFBhZ2FuaW5pLiBHcmFuZGRhbSBBbnVza2EgcHJvZHVjZWQgc2V2ZXJhbCBob3JzZXMgdGhhdCB3ZXJlIHN1Y2Nlc3NmdWwgaW4gZHJlc3NhZ2UgcmluZ3MuIA0KDQpUaGUgcGVyZm9ybWFuY2UgZG9taW5hdGUgZGFtIGxpbmUgYWxzbyBwcm9kdWNlZCB0aGUgbGljZW5zZWQgWm/Dtmxvb2cgKGJ5IEdvbmRvbGllcikgd2hvIGhhcyBwbGFjZWQgaW4gaW50ZXJuYXRpb25hbCBkcmVzc2FnZSBjb21wZXRpdGlvbnMsIHRoZSB3b3JsZCBjbGFzcyBzaG93IGp1bXBlciBNaXN0ZXIgU3Bvb24gKGJ5IFphZG9jKS9DYW5kaWNlIEtpbmcvVVNBIGFuZCBOaWV0amUgKGJ5IFppZWhpbSksIHdobyB0b29rIGdvbGQgb24gdGhlIER1dGNoIHRlYW0gYXQgdGhlIDIwMDYgV29ybGQgRXF1ZXN0cmlhbiBHYW1lcyBpbiBBYWNoZW4gaW4gS29vcyBkZSBSb25kZeKAmXMgZHJpdmluZyB0ZWFtIG9mIGZvdXIgYXMgd2VsbCBhcyBtYW55IFN0YXRlIFByZW1pdW0gbWFyZXMgYW5kIGF1Y3Rpb24gaG9yc2VzLg0KDQo8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Ii8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL0dQM3ExREJxRjlZIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==', 1), +(33, 11, 0, '2014-02-27 16:29:49', 'original_id', '', 0, '4994', '', 1), +(34, 11, 0, '2014-02-27 16:29:49', 'horse_categories', 'csv_base64', 1, '"Q29tcGV0aWNpw7Nu"', '', 1), +(35, 11, 0, '2014-02-27 16:29:49', 'horse_categories_ids', '', 0, '56', '', 1), +(36, 11, 0, '2014-02-27 16:29:49', 'horse_breeds', 'csv_base64', 1, '"SG9sc3RlaW5lcg=="', '', 1), +(37, 11, 0, '2014-02-27 16:29:49', 'horse_breeds_ids', '', 0, '65', '', 1), +(38, 11, 0, '2014-02-27 16:29:49', 'horse_genders', 'csv_base64', 1, '"U2VtZW50YWw="', '', 1), +(39, 11, 0, '2014-02-27 16:29:49', 'horse_genders_ids', '', 0, '57', '', 1), +(40, 12, 0, '2014-02-27 16:29:49', 'title', 'base64', 1, 'RmxvcmVuY2lhbm8=', 'RmxvcmVuY2lhbm8=', 1); +INSERT INTO `drgrp_icl_translate` (`tid`, `job_id`, `content_id`, `timestamp`, `field_type`, `field_format`, `field_translate`, `field_data`, `field_data_translated`, `field_finished`) VALUES +(41, 12, 0, '2014-02-27 16:29:49', 'body', 'base64', 1, 'PGg0PktXUE4gLSBiYXkgLSAyMDA0IC0gMTYuMyBoYW5kczwvaDQ+DQoNCkFwcHJvdmVkIGZvciBPbGRlbmJ1cmcsIE1lY2tsZW5idXJnLCBSaGluZWxhbmQsIFdlc3RwaGFsaWEgYW5kIGFsbCBTb3V0aGVybiBHZXJtYW4gVmVyYmFuZHMuDQpPdGhlciBWZXJiYW5kcyBvbiByZXF1ZXN0IQ0KDQpJbnNlbWluYXRpb24gZmVlOiA1MDAg4oKsKiArIEluLWZvYWwgZmVlOiA1MDAg4oKsKihGUyArIFRHKQ0KDQpGcmVzaCBzZW1lbiBzaGlwcGluZyB3aXRoaW4gR2VybWFueSENCg0KDQpBIGZhYnVsb3VzbHkgbW92aW5nIHN1bm55IGJveSB3aXRoIGEgcmVtYXJrYWJsZSBvdXRjcm9zcyBwZWRpZ3JlZSDigJMgdGhhdOKAmXMgRmxvcmVuY2lhbm8hDQoNCkZsb3JlbmNpYW5vIHdhcyBsaWNlbnNlZCBpbiAyMDA2IGluIE3DvG5zdGVyLUhhbmRvcmYsIHdvbiBoaXMgMzAtZGF5IHRlc3QgaW4gMjAwNyAoZ3Vlc3QgcmlkZXIgMTAuMCkgYW5kIHRoZW4gd29uIHRoZSBwcmVzdGlnaW91cyBPcHRpbXVtIGluIDIwMDguIFRoZXNlIGFjaGlldmVtZW50cyB3ZXJlIGZvbGxvd2VkIGJ5IHF1YWxpZmljYXRpb24gZm9yIHRoZSBCdW5kZXNjaGFtcGlvbmF0IGFuZCBtYW55IHZpY3RvcmllcyBpbiBkcmVzc2FnZSB1cCB0byBtZWRpdW0gKE0pIGxldmVsLiBJbiAyMDExIGF0IHRoZSBhZ2Ugb2Ygc2V2ZW4sIGhpcyBmaXJzdCB2aWN0b3JpZXMgaW4gU3QuIEdlb3JnZXMgZHJlc3NhZ2UgdGVzdHMgd2VyZSBhZGRlZC4gVGhlIE9seW1waWMgd2lubmluZyByaWRlciwgSHViZXJ0dXMgU2NobWlkdCwgaGFzIHRha2VuIG92ZXIgRmxvcmVuY2lhbm/igJlzIGZ1cnRoZXIgdHJhaW5pbmcuICANCg0KDQpbdGl0bGUgc2l6ZT0iMyJdUHJvZ2VueVsvdGl0bGVdDQoNCkZsb3JlbmNpYW5v4oCZcyBkZWJ1dCBhcyBhIHNpcmUgd2FzIGJyaWxsaWFudC4gSW4ga2VlcGluZyB3aXRoIGhpcyBvdXRzdGFuZGluZyBmaXJzdCBmb2FsIGNyb3BzLCBoaXMgZGF1Z2h0ZXIgRmVpbmUgUm9zYSB0b29rIHRoZSAyMDExIENoYW1waW9uIE1hcmUgdGl0bGUgYXQgdGhlIEdlcm1hbiBFbGl0ZSBCcm9vZG1hcmUgQ2hhbXBpb25zaGlwcyBhcyB3ZWxsIGFzIHRoZSBSaGluZWxhbmQgQ2hhbXBpb24gTWFyZSB0aXRsZSwgaGlzIGRhdWdodGVyIEZsb3JlbmNpYW5hIEYgYmVjYW1lIHRoZSBXZXN0cGhhbGlhbiBDaGFtcGlvbiBNYXJlIGFuZCBoaXMgZGF1Z2h0ZXIgRm9yIENvbXRlc3Mgd29uIHRoZSBXZXN0cGhhbGlhbiBDaGFtcGlvbnNoaXBzLCB0aGUgV2VzdHBoYWxpYW4gV2FwcGVuIGFuZCBhbHNvIHBhcnRpY2lwYXRlZCBpbiB0aGUgQnVuZGVzY2hhbXBpb25hdCBGaW5hbC4gVGhyZWUgb2YgaGlzIHNvbnMgd2VyZSBsaWNlbnNlZCwgaW5jbHVkaW5nIHRoZSAyMDEyIE5SVyBwcmVtaXVtIHN0YWxsaW9uLCBGYXJiZW5zcGllbC4gSGlzIG9mZnNwcmluZyBhcmUgb2ZmIHRvIGEgaGlnaGx5IHByb21pc2luZyBzdGFydCBpbiBiYXNpYyB0ZXN0cyBmb3IgeW91bmdzdGVycy4gDQoNClt0aXRsZSBzaXplPSIzIl1QZWRpZ3JlZVsvdGl0bGVdDQoNCkhpcyBzaXJlIGlzIHRoZSB0d28tdGltZSBXb3JsZCBDaGFtcGlvbiBvZiB5b3VuZyBkcmVzc2FnZSBob3JzZXMsIEZsb3JlbmNpbyBJLg0KDQpGbG9yZW5jaWFub+KAmXMgaGlnaGx5IGRlY29yYXRlZCBkYW0gbGluZSBvcmlnaW5hdGVkIGluIHRoZSBOZXRoZXJsYW5kcy4gSGlzIGRhbSBTdC5Qci5TdC4gTHVuZGkgVCB3b24gZWlnaHQgbWVkaXVtIChNKSBsZXZlbCBkcmVzc2FnZSB0ZXN0cyBhbmQgcmVjZWl2ZWQg4oCccGVyZm9ybWFuY2UgbWFyZSBkcmVzc2FnZeKAnSBzdGF0dXMuICBUaGUgZGFt4oCZcyBzaXJlIEhhdmlkb2ZmLCBieSB0aGUgR3JhbmQgUHJpeCBzdGFsbGlvbiBDbGF2ZWNpbWJlbCwgd2FzIGF3YXJkZWQg4oCca2V1cuKAnSBzdGF0dXMuIE1hbnkgb2YgaGlzIG9mZnNwcmluZyB3aW4gcmliYm9ucyBhdCBHcmFuZCBQcml4IGxldmVsIHN1Y2ggYXMgaGlzIGxpY2Vuc2VkIHNvbiwgUGFnYW5pbmkuIEdyYW5kZGFtIEFudXNrYSBwcm9kdWNlZCBzZXZlcmFsIGhvcnNlcyB0aGF0IHdlcmUgc3VjY2Vzc2Z1bCBpbiBkcmVzc2FnZSByaW5ncy4gDQoNClRoZSBwZXJmb3JtYW5jZSBkb21pbmF0ZSBkYW0gbGluZSBhbHNvIHByb2R1Y2VkIHRoZSBsaWNlbnNlZCBab8O2bG9vZyAoYnkgR29uZG9saWVyKSB3aG8gaGFzIHBsYWNlZCBpbiBpbnRlcm5hdGlvbmFsIGRyZXNzYWdlIGNvbXBldGl0aW9ucywgdGhlIHdvcmxkIGNsYXNzIHNob3cganVtcGVyIE1pc3RlciBTcG9vbiAoYnkgWmFkb2MpL0NhbmRpY2UgS2luZy9VU0EgYW5kIE5pZXRqZSAoYnkgWmllaGltKSwgd2hvIHRvb2sgZ29sZCBvbiB0aGUgRHV0Y2ggdGVhbSBhdCB0aGUgMjAwNiBXb3JsZCBFcXVlc3RyaWFuIEdhbWVzIGluIEFhY2hlbiBpbiBLb29zIGRlIFJvbmRl4oCZcyBkcml2aW5nIHRlYW0gb2YgZm91ciBhcyB3ZWxsIGFzIG1hbnkgU3RhdGUgUHJlbWl1bSBtYXJlcyBhbmQgYXVjdGlvbiBob3JzZXMuDQoNCjxpZnJhbWUgd2lkdGg9IjU2MCIgaGVpZ2h0PSIzMTUiIHNyYz0iLy93d3cueW91dHViZS5jb20vZW1iZWQvMmszNUFuR3ZoYzgiIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+', 'PGg0PktXUE4gLSBiYXkgLSAyMDA0IC0gMTYuMyBoYW5kczwvaDQ+DQoNCkFwcHJvdmVkIGZvciBPbGRlbmJ1cmcsIE1lY2tsZW5idXJnLCBSaGluZWxhbmQsIFdlc3RwaGFsaWEgYW5kIGFsbCBTb3V0aGVybiBHZXJtYW4gVmVyYmFuZHMuDQpPdGhlciBWZXJiYW5kcyBvbiByZXF1ZXN0IQ0KDQpJbnNlbWluYXRpb24gZmVlOiA1MDAg4oKsKiArIEluLWZvYWwgZmVlOiA1MDAg4oKsKihGUyArIFRHKQ0KDQpGcmVzaCBzZW1lbiBzaGlwcGluZyB3aXRoaW4gR2VybWFueSENCg0KDQpBIGZhYnVsb3VzbHkgbW92aW5nIHN1bm55IGJveSB3aXRoIGEgcmVtYXJrYWJsZSBvdXRjcm9zcyBwZWRpZ3JlZSDigJMgdGhhdOKAmXMgRmxvcmVuY2lhbm8hDQoNCkZsb3JlbmNpYW5vIHdhcyBsaWNlbnNlZCBpbiAyMDA2IGluIE3DvG5zdGVyLUhhbmRvcmYsIHdvbiBoaXMgMzAtZGF5IHRlc3QgaW4gMjAwNyAoZ3Vlc3QgcmlkZXIgMTAuMCkgYW5kIHRoZW4gd29uIHRoZSBwcmVzdGlnaW91cyBPcHRpbXVtIGluIDIwMDguIFRoZXNlIGFjaGlldmVtZW50cyB3ZXJlIGZvbGxvd2VkIGJ5IHF1YWxpZmljYXRpb24gZm9yIHRoZSBCdW5kZXNjaGFtcGlvbmF0IGFuZCBtYW55IHZpY3RvcmllcyBpbiBkcmVzc2FnZSB1cCB0byBtZWRpdW0gKE0pIGxldmVsLiBJbiAyMDExIGF0IHRoZSBhZ2Ugb2Ygc2V2ZW4sIGhpcyBmaXJzdCB2aWN0b3JpZXMgaW4gU3QuIEdlb3JnZXMgZHJlc3NhZ2UgdGVzdHMgd2VyZSBhZGRlZC4gVGhlIE9seW1waWMgd2lubmluZyByaWRlciwgSHViZXJ0dXMgU2NobWlkdCwgaGFzIHRha2VuIG92ZXIgRmxvcmVuY2lhbm/igJlzIGZ1cnRoZXIgdHJhaW5pbmcuICANCg0KDQpbdGl0bGUgc2l6ZT0iMyJdUHJvZ2VueVsvdGl0bGVdDQoNCkZsb3JlbmNpYW5v4oCZcyBkZWJ1dCBhcyBhIHNpcmUgd2FzIGJyaWxsaWFudC4gSW4ga2VlcGluZyB3aXRoIGhpcyBvdXRzdGFuZGluZyBmaXJzdCBmb2FsIGNyb3BzLCBoaXMgZGF1Z2h0ZXIgRmVpbmUgUm9zYSB0b29rIHRoZSAyMDExIENoYW1waW9uIE1hcmUgdGl0bGUgYXQgdGhlIEdlcm1hbiBFbGl0ZSBCcm9vZG1hcmUgQ2hhbXBpb25zaGlwcyBhcyB3ZWxsIGFzIHRoZSBSaGluZWxhbmQgQ2hhbXBpb24gTWFyZSB0aXRsZSwgaGlzIGRhdWdodGVyIEZsb3JlbmNpYW5hIEYgYmVjYW1lIHRoZSBXZXN0cGhhbGlhbiBDaGFtcGlvbiBNYXJlIGFuZCBoaXMgZGF1Z2h0ZXIgRm9yIENvbXRlc3Mgd29uIHRoZSBXZXN0cGhhbGlhbiBDaGFtcGlvbnNoaXBzLCB0aGUgV2VzdHBoYWxpYW4gV2FwcGVuIGFuZCBhbHNvIHBhcnRpY2lwYXRlZCBpbiB0aGUgQnVuZGVzY2hhbXBpb25hdCBGaW5hbC4gVGhyZWUgb2YgaGlzIHNvbnMgd2VyZSBsaWNlbnNlZCwgaW5jbHVkaW5nIHRoZSAyMDEyIE5SVyBwcmVtaXVtIHN0YWxsaW9uLCBGYXJiZW5zcGllbC4gSGlzIG9mZnNwcmluZyBhcmUgb2ZmIHRvIGEgaGlnaGx5IHByb21pc2luZyBzdGFydCBpbiBiYXNpYyB0ZXN0cyBmb3IgeW91bmdzdGVycy4gDQoNClt0aXRsZSBzaXplPSIzIl1QZWRpZ3JlZVsvdGl0bGVdDQoNCkhpcyBzaXJlIGlzIHRoZSB0d28tdGltZSBXb3JsZCBDaGFtcGlvbiBvZiB5b3VuZyBkcmVzc2FnZSBob3JzZXMsIEZsb3JlbmNpbyBJLg0KDQpGbG9yZW5jaWFub+KAmXMgaGlnaGx5IGRlY29yYXRlZCBkYW0gbGluZSBvcmlnaW5hdGVkIGluIHRoZSBOZXRoZXJsYW5kcy4gSGlzIGRhbSBTdC5Qci5TdC4gTHVuZGkgVCB3b24gZWlnaHQgbWVkaXVtIChNKSBsZXZlbCBkcmVzc2FnZSB0ZXN0cyBhbmQgcmVjZWl2ZWQg4oCccGVyZm9ybWFuY2UgbWFyZSBkcmVzc2FnZeKAnSBzdGF0dXMuICBUaGUgZGFt4oCZcyBzaXJlIEhhdmlkb2ZmLCBieSB0aGUgR3JhbmQgUHJpeCBzdGFsbGlvbiBDbGF2ZWNpbWJlbCwgd2FzIGF3YXJkZWQg4oCca2V1cuKAnSBzdGF0dXMuIE1hbnkgb2YgaGlzIG9mZnNwcmluZyB3aW4gcmliYm9ucyBhdCBHcmFuZCBQcml4IGxldmVsIHN1Y2ggYXMgaGlzIGxpY2Vuc2VkIHNvbiwgUGFnYW5pbmkuIEdyYW5kZGFtIEFudXNrYSBwcm9kdWNlZCBzZXZlcmFsIGhvcnNlcyB0aGF0IHdlcmUgc3VjY2Vzc2Z1bCBpbiBkcmVzc2FnZSByaW5ncy4gDQoNClRoZSBwZXJmb3JtYW5jZSBkb21pbmF0ZSBkYW0gbGluZSBhbHNvIHByb2R1Y2VkIHRoZSBsaWNlbnNlZCBab8O2bG9vZyAoYnkgR29uZG9saWVyKSB3aG8gaGFzIHBsYWNlZCBpbiBpbnRlcm5hdGlvbmFsIGRyZXNzYWdlIGNvbXBldGl0aW9ucywgdGhlIHdvcmxkIGNsYXNzIHNob3cganVtcGVyIE1pc3RlciBTcG9vbiAoYnkgWmFkb2MpL0NhbmRpY2UgS2luZy9VU0EgYW5kIE5pZXRqZSAoYnkgWmllaGltKSwgd2hvIHRvb2sgZ29sZCBvbiB0aGUgRHV0Y2ggdGVhbSBhdCB0aGUgMjAwNiBXb3JsZCBFcXVlc3RyaWFuIEdhbWVzIGluIEFhY2hlbiBpbiBLb29zIGRlIFJvbmRl4oCZcyBkcml2aW5nIHRlYW0gb2YgZm91ciBhcyB3ZWxsIGFzIG1hbnkgU3RhdGUgUHJlbWl1bSBtYXJlcyBhbmQgYXVjdGlvbiBob3JzZXMuDQoNCjxpZnJhbWUgd2lkdGg9IjU2MCIgaGVpZ2h0PSIzMTUiIHNyYz0iLy93d3cueW91dHViZS5jb20vZW1iZWQvMmszNUFuR3ZoYzgiIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+', 1), +(42, 12, 0, '2014-02-27 16:29:49', 'original_id', '', 0, '4990', '', 1), +(43, 12, 0, '2014-02-27 16:29:49', 'horse_categories', 'csv_base64', 1, '"Q29tcGV0aWNpw7Nu"', '', 1), +(44, 12, 0, '2014-02-27 16:29:49', 'horse_categories_ids', '', 0, '56', '', 1), +(45, 12, 0, '2014-02-27 16:29:49', 'horse_breeds', 'csv_base64', 1, '"T2xkZW5idXJn"', '', 1), +(46, 12, 0, '2014-02-27 16:29:49', 'horse_breeds_ids', '', 0, '62', '', 1), +(47, 12, 0, '2014-02-27 16:29:49', 'horse_genders', 'csv_base64', 1, '"Q2Fww7Nu"', '', 1), +(48, 12, 0, '2014-02-27 16:29:49', 'horse_genders_ids', '', 0, '59', '', 1), +(49, 13, 0, '2014-02-27 16:29:49', 'title', 'base64', 1, 'Q3Jpc3RhbGxv', 'Q3Jpc3RhbGxv', 1), +(50, 13, 0, '2014-02-27 16:29:49', 'body', 'base64', 1, 'PGg0Pldlc3RmYWxlIC0gZ3JleSAtIDIwMDcgLSAxNi4zIMK9IGhhbmRzPC9oND4NCg0KQnJlZWRlcjogRHIuIEF4ZWwgU2NodWVybmVyLCBOaWRlZ2dlbiwgR2VybWFueSANCg0KQXBwcm92ZWQgZm9yIEhhbm92ZXIsIE9TLCBNZWNrbGVuYnVyZywgUmhpbmVsYW5kLCBXZXN0cGhhbGlhIGFuZCBhbGwgU291dGhlcm4gR2VybWFuIFZlcmJhbmRzLg0KT3RoZXIgVmVyYmFuZHMgb24gcmVxdWVzdCENCg0KSW5zZW1pbmF0aW9uIGZlZTogNTAwIOKCrCogKyBJbi1mb2FsIGZlZTogNTAwIOKCrCogKEZTICsgVEcpDQoNCkZvcmVpZ24gY3VzdG9tZXJzIG11c3QgcGF5IGZ1bGwgc3R1ZCBmZWUgaW4gYWR2YW5jZS4gUmVmdW5kIG9mIHRoZSBoYWxmIGF0IG5vbi1wcmVnbmFuY3kuDQoNCk9yZGVycyBmb3IgZnJlc2ggc2VtZW4gbXVzdCBiZSByZWNlaXZlZCBieSA5OjAwIGEubS4gdGhlIGRheSBiZWZvcmUgc2luY2UgdGhlIHN0YWxsaW9uIGlzIHN0YXRpb25lZCBpbiBJdGFseSENCg0KIA0KDQpBbHRob3VnaCBDcmlzdGFsbG8gSSwgd2hvIGlzIGFsc28gc3RhdGlvbmVkIGluIFJpZXNlbmJlY2ssIGlzIGFscmVhZHkgc3VjY2Vzc2Z1bCBpbnRlcm5hdGlvbmFsbHksIENyaXN0YWxsbyBJSSBpcyBqdXN0IGFzIGdvb2QgYXMgaGlzIGZ1bGwgYnJvdGhlciBpbiBldmVyeSB3YXkuIEluIDIwMDkgQ3Jpc3RhbGxvIElJIGxlZnQgdGhlIE5SVyBsaWNlbnNpbmcgdmVudWUgaW4gTcO8bnN0ZXItSGFuZG9yZiBhcyB0aGUgY2VsZWJyYXRlZCBqdW1wZXIgY2hhbXBpb24gYW5kIHBhc3NlZCBoaXMgc3RhbGxpb24gcGVyZm9ybWFuY2UgdGVzdCBpbiAyMDEwIGF0IHRoZSBzYW1lIHZlbnVlIGFzIHRoZSByZXNlcnZlIGNoYW1waW9uIGp1bXBlciB3aXRoIGhpZ2ggc2NvcmVzIGZvciBoaXMgZ2FpdHMgYW5kIHJpZGVhYmlsaXR5LiBJbiAyMDExIGhlIHRvb2sgc2lsdmVyIGF0IHRoZSBXZXN0cGhhbGlhbiBDaGFtcGlvbnNoaXBzICg0LXllYXIgb2xkcykgYW5kIGluIDIwMTIgaGUgcXVhbGlmaWVkIGZvciB0aGUgQnVuZGVzY2hhbXBpb25hdC4gDQoNClt0aXRsZSBzaXplPSIzIl1Qcm9nZW55Wy90aXRsZV0NCg0KQ3Jpc3RhbGxvIElJ4oCZcyBvZmZzcHJpbmcgZXhjZWVkZWQgYWxsIGV4cGVjdGF0aW9ucy4gSGlzIGZvYWxzIGFyZSBwbGVhc2luZyB3aXRoIHRoZWlyIG1vZGVybiBsb29rcywgZ2VuZXJvdXMgbGluZXMgYW5kIHdvbmRlcmZ1bGx5IHN1cHBsZSBtb3ZlbWVudHMuIE1hbnkgb2YgdGhlbSBoYXZlIGJlZW4gYWRtaXR0ZWQgdG8gYXVjdGlvbnMuIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUGVkaWdyZWVbL3RpdGxlXQ0KDQpIaXMgc2lyZSBDb3JuZXQgT2JvbGVuc2t5IGhhcyBjb25zaWRlcmFibHkgaW5mbHVlbmNlZCBtb2Rlcm4tZGF5IGp1bXBlciBicmVlZGluZy4gSnVzdCBsaWtlIHRoZSBkYW3igJlzIHNpcmUgQ2Fzc2luaSBJLCBoZSBoYXMgYW4gb3V0c3RhbmRpbmcgcGVyZm9ybWFuY2UgYW5kIGJyZWVkaW5nIHJlY29yZC4gDQoNCkNyaXN0YWxsb+KAmXMgZGFtIENhc3NpZSBwbGFjZWQgaW4gc2hvdyBqdW1waW5nIHVwIHRvIG1lZGl1bSAoTSkgbGV2ZWwgdW5kZXIgaGVyIHNwb3J0IG5hbWUgQ2FzY2F2ZWxsYS4gSGVyIHNvbiBDcmlzdGFsbG8gSSB3YXMgYSBOUlcgcHJlbWl1bSBzdGFsbGlvbiwgd29uIGhpcyBzdGFsbGlvbiBwZXJmb3JtYW5jZSB0ZXN0LCB3YXMgV2VzdHBoYWxpYW4gSnVtcGVyIENoYW1waW9uLCBwYXJ0aWNpcGF0ZWQgaW4gdGhlIEJ1bmRlc2NoYW1waW9uYXQgRmluYWxzIHR3aWNlIGFuZCBtZWFud2hpbGUgd2lucyByaWJib25zIGluIGludGVybmF0aW9uYWwgY29tcGV0aXRpb25zLiANCg0KSGlzIGdyYW5kZGFtIFByb2ZpbGRhIHdhcyBzdWNjZXNzZnVsIGluIHNob3cganVtcGluZyB1cCB0byBhZHZhbmNlZCAoUykgbGV2ZWwgdW5kZXIgaGVyIHNwb3J0IG5hbWUgUGFwYXlhIGJlZm9yZSBzaGUgZ2F2ZSBiaXJ0aCB0byBhIG1lZGl1bSAoTSkgbGV2ZWwgc2hvdyBqdW1wZXIgbmFtZWQgQ29zaW1hIChieSBDYWxpZG8gSSkuIFByb2ZpbGRhIGlzIGEgZnVsbCBzaXN0ZXIgb2YgYSBsaWNlbnNlZCBzdGFsbGlvbiBuYW1lZCBQb2NhbGlubyAoYnkgUG9seWRvciksIHdpdGggd2hvbSBKZW5zIER1bW1leWVyIHBsYWNlZCBpbiBpbnRlcm5hdGlvbmFsIGNvbXBldGl0aW9ucywgYW5kIG9mIGEgbWVkaXVtIChNKSBsZXZlbCBzaG93IGp1bXBlciBuYW1lZCBQYWdhbmluaSBhcyB3ZWxsIGFzIGEgaGFsZi1zaXN0ZXIgb2YgdGhlIFN0YXRlIFByZW1pdW0gbWFyZXMgTGV0aWNpYSAoYnkgTGFuY2VyIElJSSkgYW5kIENlbGVzdGluZSAoYnkgQ29ybmV0IE9ib2xlbnNreSkuIFRoZSBXZXN0cGhhbGlhbiBBbG1mZWUgbGluZSBhbHNvIHByb2R1Y2VkIHRoZSBzaXJlcyBBcGFydG9zLCBBdm9jYWRvLCBBeWVycyBSb2NrLCBEaXNuZXksIFBhcGFnZW5vLCBQYXJsYW5kbyBJIGFuZCBJSSBhbmQgUGFzdGVsbCBhcyB3ZWxsIGFzIHRoZSAyMDA5IEJ1bmRlc2NoYW1waW9uIG9mIGZvdXIteWVhciBvbGQgbWFyZXMgYW5kIGdlbGRpbmdzLCBQcmV6aW9zYS4NCg0KUGVyZm9ybWFuY2UgbGluZSBvZiAgQWxtZmVlIA0KDQo8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Ii8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL0s3MDhRNHppcEV3IiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==', 'PGg0Pldlc3RmYWxlIC0gZ3JleSAtIDIwMDcgLSAxNi4zIMK9IGhhbmRzPC9oND4NCg0KQnJlZWRlcjogRHIuIEF4ZWwgU2NodWVybmVyLCBOaWRlZ2dlbiwgR2VybWFueSANCg0KQXBwcm92ZWQgZm9yIEhhbm92ZXIsIE9TLCBNZWNrbGVuYnVyZywgUmhpbmVsYW5kLCBXZXN0cGhhbGlhIGFuZCBhbGwgU291dGhlcm4gR2VybWFuIFZlcmJhbmRzLg0KT3RoZXIgVmVyYmFuZHMgb24gcmVxdWVzdCENCg0KSW5zZW1pbmF0aW9uIGZlZTogNTAwIOKCrCogKyBJbi1mb2FsIGZlZTogNTAwIOKCrCogKEZTICsgVEcpDQoNCkZvcmVpZ24gY3VzdG9tZXJzIG11c3QgcGF5IGZ1bGwgc3R1ZCBmZWUgaW4gYWR2YW5jZS4gUmVmdW5kIG9mIHRoZSBoYWxmIGF0IG5vbi1wcmVnbmFuY3kuDQoNCk9yZGVycyBmb3IgZnJlc2ggc2VtZW4gbXVzdCBiZSByZWNlaXZlZCBieSA5OjAwIGEubS4gdGhlIGRheSBiZWZvcmUgc2luY2UgdGhlIHN0YWxsaW9uIGlzIHN0YXRpb25lZCBpbiBJdGFseSENCg0KIA0KDQpBbHRob3VnaCBDcmlzdGFsbG8gSSwgd2hvIGlzIGFsc28gc3RhdGlvbmVkIGluIFJpZXNlbmJlY2ssIGlzIGFscmVhZHkgc3VjY2Vzc2Z1bCBpbnRlcm5hdGlvbmFsbHksIENyaXN0YWxsbyBJSSBpcyBqdXN0IGFzIGdvb2QgYXMgaGlzIGZ1bGwgYnJvdGhlciBpbiBldmVyeSB3YXkuIEluIDIwMDkgQ3Jpc3RhbGxvIElJIGxlZnQgdGhlIE5SVyBsaWNlbnNpbmcgdmVudWUgaW4gTcO8bnN0ZXItSGFuZG9yZiBhcyB0aGUgY2VsZWJyYXRlZCBqdW1wZXIgY2hhbXBpb24gYW5kIHBhc3NlZCBoaXMgc3RhbGxpb24gcGVyZm9ybWFuY2UgdGVzdCBpbiAyMDEwIGF0IHRoZSBzYW1lIHZlbnVlIGFzIHRoZSByZXNlcnZlIGNoYW1waW9uIGp1bXBlciB3aXRoIGhpZ2ggc2NvcmVzIGZvciBoaXMgZ2FpdHMgYW5kIHJpZGVhYmlsaXR5LiBJbiAyMDExIGhlIHRvb2sgc2lsdmVyIGF0IHRoZSBXZXN0cGhhbGlhbiBDaGFtcGlvbnNoaXBzICg0LXllYXIgb2xkcykgYW5kIGluIDIwMTIgaGUgcXVhbGlmaWVkIGZvciB0aGUgQnVuZGVzY2hhbXBpb25hdC4gDQoNClt0aXRsZSBzaXplPSIzIl1Qcm9nZW55Wy90aXRsZV0NCg0KQ3Jpc3RhbGxvIElJ4oCZcyBvZmZzcHJpbmcgZXhjZWVkZWQgYWxsIGV4cGVjdGF0aW9ucy4gSGlzIGZvYWxzIGFyZSBwbGVhc2luZyB3aXRoIHRoZWlyIG1vZGVybiBsb29rcywgZ2VuZXJvdXMgbGluZXMgYW5kIHdvbmRlcmZ1bGx5IHN1cHBsZSBtb3ZlbWVudHMuIE1hbnkgb2YgdGhlbSBoYXZlIGJlZW4gYWRtaXR0ZWQgdG8gYXVjdGlvbnMuIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUGVkaWdyZWVbL3RpdGxlXQ0KDQpIaXMgc2lyZSBDb3JuZXQgT2JvbGVuc2t5IGhhcyBjb25zaWRlcmFibHkgaW5mbHVlbmNlZCBtb2Rlcm4tZGF5IGp1bXBlciBicmVlZGluZy4gSnVzdCBsaWtlIHRoZSBkYW3igJlzIHNpcmUgQ2Fzc2luaSBJLCBoZSBoYXMgYW4gb3V0c3RhbmRpbmcgcGVyZm9ybWFuY2UgYW5kIGJyZWVkaW5nIHJlY29yZC4gDQoNCkNyaXN0YWxsb+KAmXMgZGFtIENhc3NpZSBwbGFjZWQgaW4gc2hvdyBqdW1waW5nIHVwIHRvIG1lZGl1bSAoTSkgbGV2ZWwgdW5kZXIgaGVyIHNwb3J0IG5hbWUgQ2FzY2F2ZWxsYS4gSGVyIHNvbiBDcmlzdGFsbG8gSSB3YXMgYSBOUlcgcHJlbWl1bSBzdGFsbGlvbiwgd29uIGhpcyBzdGFsbGlvbiBwZXJmb3JtYW5jZSB0ZXN0LCB3YXMgV2VzdHBoYWxpYW4gSnVtcGVyIENoYW1waW9uLCBwYXJ0aWNpcGF0ZWQgaW4gdGhlIEJ1bmRlc2NoYW1waW9uYXQgRmluYWxzIHR3aWNlIGFuZCBtZWFud2hpbGUgd2lucyByaWJib25zIGluIGludGVybmF0aW9uYWwgY29tcGV0aXRpb25zLiANCg0KSGlzIGdyYW5kZGFtIFByb2ZpbGRhIHdhcyBzdWNjZXNzZnVsIGluIHNob3cganVtcGluZyB1cCB0byBhZHZhbmNlZCAoUykgbGV2ZWwgdW5kZXIgaGVyIHNwb3J0IG5hbWUgUGFwYXlhIGJlZm9yZSBzaGUgZ2F2ZSBiaXJ0aCB0byBhIG1lZGl1bSAoTSkgbGV2ZWwgc2hvdyBqdW1wZXIgbmFtZWQgQ29zaW1hIChieSBDYWxpZG8gSSkuIFByb2ZpbGRhIGlzIGEgZnVsbCBzaXN0ZXIgb2YgYSBsaWNlbnNlZCBzdGFsbGlvbiBuYW1lZCBQb2NhbGlubyAoYnkgUG9seWRvciksIHdpdGggd2hvbSBKZW5zIER1bW1leWVyIHBsYWNlZCBpbiBpbnRlcm5hdGlvbmFsIGNvbXBldGl0aW9ucywgYW5kIG9mIGEgbWVkaXVtIChNKSBsZXZlbCBzaG93IGp1bXBlciBuYW1lZCBQYWdhbmluaSBhcyB3ZWxsIGFzIGEgaGFsZi1zaXN0ZXIgb2YgdGhlIFN0YXRlIFByZW1pdW0gbWFyZXMgTGV0aWNpYSAoYnkgTGFuY2VyIElJSSkgYW5kIENlbGVzdGluZSAoYnkgQ29ybmV0IE9ib2xlbnNreSkuIFRoZSBXZXN0cGhhbGlhbiBBbG1mZWUgbGluZSBhbHNvIHByb2R1Y2VkIHRoZSBzaXJlcyBBcGFydG9zLCBBdm9jYWRvLCBBeWVycyBSb2NrLCBEaXNuZXksIFBhcGFnZW5vLCBQYXJsYW5kbyBJIGFuZCBJSSBhbmQgUGFzdGVsbCBhcyB3ZWxsIGFzIHRoZSAyMDA5IEJ1bmRlc2NoYW1waW9uIG9mIGZvdXIteWVhciBvbGQgbWFyZXMgYW5kIGdlbGRpbmdzLCBQcmV6aW9zYS4NCg0KUGVyZm9ybWFuY2UgbGluZSBvZiAgQWxtZmVlIA0KDQo8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Ii8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL0s3MDhRNHppcEV3IiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==', 1), +(51, 13, 0, '2014-02-27 16:29:49', 'original_id', '', 0, '4971', '', 1), +(52, 13, 0, '2014-02-27 16:29:49', 'horse_categories', 'csv_base64', 1, '"Q29tcGV0aWNpw7Nu"', '', 1), +(53, 13, 0, '2014-02-27 16:29:49', 'horse_categories_ids', '', 0, '56', '', 1), +(54, 13, 0, '2014-02-27 16:29:49', 'horse_breeds', 'csv_base64', 1, '"V2VzdHBoYWxpYW4="', '', 1), +(55, 13, 0, '2014-02-27 16:29:49', 'horse_breeds_ids', '', 0, '61', '', 1), +(56, 13, 0, '2014-02-27 16:29:49', 'horse_genders', 'csv_base64', 1, '"Q2Fww7Nu"', '', 1), +(57, 13, 0, '2014-02-27 16:29:49', 'horse_genders_ids', '', 0, '59', '', 1), +(58, 14, 0, '2014-02-27 16:29:49', 'title', 'base64', 1, 'Q2FydGhhbm8=', 'Q2FydGhhbm8=', 1), +(59, 14, 0, '2014-02-27 16:29:49', 'body', 'base64', 1, 'PGg0PkhvbHN0ZWluLCBiYXksIEJvcm46IDIwMDgsIDE2OWNtPC9oND4NCg0KSW5zZW1pbmF0aW9uIGZlZTogNzAwIOKCrCogKG9ubHkgZnJvemVuIHNlbWVuKQ0KDQogDQpBcHBwcm92ZWQgZm9yOiBIb2xzdGVpbiwgT2xkZW5idXJnLCBPbGRlbmJ1cmctSW50ZXJuYXRpb25hbCwgV2VzdGZhbGVuIGFuZCBSaGVpbmxhbmQuIEFzIHdlbGwgYXMgYWxsIHRoZSBTb3V0aCBHZXJtYW4gU3R1ZCBCb29rcyBhbmQgdGhlIG5ld2x5IGZvcm1lZCBHZXJtYW4gU3RhdGVzIFN0dWQgQm9va3MuDQoNCiANCg0KQ2FydGhhbm8gSUkgd2FzIHRoZSBjZWxlYnJhdGVkIHByZW1pdW0gc2lyZSBhdCBoaXMgYXBwcm92YWxzIGluIEhvbHN0ZWluIGluIDIwMTAsIHNob3dpbmcgZW5vcm1vdXMgYWJpbGl0eSBpbiBoaXMgcGFjZXMsIGNvcnJlY3QgY29uZm9ybWF0aW9uLCBhbmQgYW4gYWJ1bmRhbmNlIG9mIOKAnHN0YWxsaW9uIHByZXNlbmNl4oCdLiBDYXJ0aGFubyBJSSBhbHNvIGhhcyBhbiBvdXRzdGFuZGluZyB0cm90OyB0aGlzIGlzIGR1ZSB0byBoaXMgZW5vcm1vdXNseSBwb3dlcmZ1bCBoaW5kIGxlZ3MuIEhlIGhhcyBhIGJhbGFuY2VkIGNvbnNpc3RlbnQgcmh5dGhtIGFuZCBsYXJnZSwgZmxleGlibGUgZ2FpdHMuIEhpcyBqdW1waW5nIHNjb3BlLCBnb29kIGxlZyB0ZWNobmlxdWUgYW5kIHF1aWNrIHJlYWN0aW9ucyBhdCB0aGUgZmVuY2UgYXJlIGV5ZS1jYXRjaGluZy4gV2l0aCBhbGwgdGhlc2UgYXR0cmlidXRlcywgQ2FydGhhbm8gSUkgaXMgdW5kaXNwdXRlZGx5IG9uZSBvZiB0aGUgdG9wIHN0YWxsaW9ucyBvZiBoaXMgYWdlIGdyb3VwLiANCg0KSW4gMjAxMSBDYXJ0aGFubyBJSSBjb21wbGV0ZWQgYW4gZXhjZWxsZW50IDMwLWRheS10ZXN0IGluIFp3ZWlicsO8Y2tlbi4gIEhlIGNvbmZpcm1lZCB0aGUgaGlnaCBleHBlY3RhdGlvbnMgYnkgc2NvcmluZyAxMjYgcG9pbnRzIGluIHRoZSDigJxWQS1adWNodHdlcnTigJ0gZm9yIGp1bXBpbmcuIEFsc28gd29ydGggYSBtZW50aW9uIHdhcyB0aGUgZGVzZXJ2ZWQgaGlnaCBwb2ludHMgYXdhcmRlZCBmb3IgaGlzIHdlbGwtdGVtcGVyZWQgY2hhcmFjdGVyIGFuZCBncmVhdCBhdHRpdHVkZS4gDQoNCkNhdGhhbm8gbGwgYmVnaW5zIGhpcyBwcmVwYXJhdGlvbiBmb3IgdGhlIE5hdGlvbmFsIFlvdW5nIEhvcnNlIENoYW1waW9uc2hpcHMgaW4gMjAxMyB3aXRoIGhpcyBmaXJzdCBzaG93IGp1bXBpbmcgZXZlbnRzIHRoaXMgY29taW5nIHNlYXNvbi4gICANCg0KW3RpdGxlIHNpemU9IjMiXVByb2dlbnlbL3RpdGxlXQ0KDQpXZSBhcmUgbG9va2luZyBmb3J3YXJkIHdpdGggZ3JlYXQgZXhwZWN0YXRpb24gdG8gQ2FydGhhbm/igJlzIGZpcnN0IGZvYWxzIGluIDIwMTIuIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUGVkaWdyZWVbL3RpdGxlXQ0KDQpDYXJ0aGFubyBJScK0cyBzaXJlLCBDb250ZW5kZXIgd29uIGhpcyBzdGFsbGlvbiBwZXJmb3JtYW5jZSB0ZXN0IGluIEFkZWxoZWlkc2RvcmYgaW4gMTk4Ny4gT3ZlciB0aGUgeWVhcnMsIHRoZSBzb24gb2YgQ2FseXBzbyBJSSBoYXMgZGV2ZWxvcGVkIGludG8gYSB2YWx1ZWQgYW5kIGhpZ2hseSByZWdhcmRlZCBicmVlZGluZyBzdGFsbGlvbiB3aXRoIG92ZXIgb25lIGh1bmRyZWQgb2YgaGlzIGFwcHJvdmVkIHNvbnMgYWN0aXZlbHkgc2VydmluZyBhcm91bmQgdGhlIHdvcmxkIHRvZGF5LiBDb250ZW5kZXIgaGltc2VsZiB3YXMgYSBsaXZpbmcgbGVnZW5kLiBBbW9uZ3N0IG90aGVycyBoZSBzaXJlZCBDaGVja21hdGUvTS4gTWljaGFlbHMtQmVlcmJhdW0sIHR3by10aW1lIHdpbm5lciBvZiB0aGUgUmlkZXJzIFRvdXIgYW5kIHRlYW0gRXVyb3BlYW4gY2hhbXBpb24sIGFzIHdlbGwgYXMgTW9udGVuZGVyL00uIEt1dHNjaGVyIHdobyB3b24gdHdvIE9seW1waWMgYnJvbnplIG1lZGFscyBpbiAyMDA0IGFuZCB0d28gZ29sZCBtZWRhbHMgYXQgdGhlIEV1cm9wZWFuIENoYW1waW9uc2hpcHMgaW4gU2FuIFBhdHJpZ25hbm8gKElUQSkgaW4gMjAwNS4NCg0KIA0KDQogDQoNClRoZSBkYW3igJlzIHNpcmUgQ2FydGhhZ28gYmVnYW4gaGlzIGNhcmVlciBhdCB0aGUgSG9sc3RlaW5WZXJiYW5kLCBoZSB3ZW50IG9uIHRvIHBhcnRpY2lwYXRlIGF0IHR3byBPbHltcGljIEdhbWVzIHdpdGggaGlzIHJpZGVyIEpvcyBMYW5zaW5rLiAgSGUgaGFzIHNpcmVkIG92ZXIgdGhpcnR5IGFwcHJvdmVkIHN0YWxsaW9ucyBhbmQgbWFueSBpbnRlcm5hdGlvbmFsIHRvcCBzcG9ydCBob3JzZXMgc3VjaCBhcyBDYXNoIHJpZGRlbiBieSBNYXJjbyBLdXRzY2hlci4gQ2FydGhhZ28gd2FzIHJhbmtlZCBzZWNvbmQgaW4gMjAxMCBvbiB0aGUgV0JGU0gtUmFua2luZyBvZiB0aGUgd29ybGTigJlzIGJlc3Qgc2hvdyBqdW1waW5nIHNpcmVzIHRoYW5rcyB0byBoaXMgc3VjY2Vzc2Z1bCBvZmZzcHJpbmcuDQoNCkNhcnRoYW5vIElJ4oCZcyAgZGFtIEctQ2F0YW5pYSBwcm9kdWNlZCB0aGUgdHdvIGZ1bGwtYnJvdGhlcnMgYW5kIGFwcHJvdmVkIHN0YWxsaW9ucyBDYXJ0aGFubyBJIGFuZCBJSSBhcyB3ZWxsIGFzIHR3byBzdHVkIGJvb2sgcHJlbWl1bSBtYXJlcyBhbmQgZm91ciBzcG9ydCBob3JzZXMuIFR3byBvZiB3aGljaCwgUGh5bGxpcyBhbmQgUGF1bGEsIGJvdGggc2lyZWQgYnkgQ2FtYnJpZGdlIGhhdmUgYmVlbiBzdWNjZXNzZnVsIGluIDEuNDAgYW5kIGhpZ2hlciBqdW1waW5nIGNsYXNzZXMuIFRoZSB0aGlyZCBtYXRlcm5hbCBkYW0sIE1lY2h0aGlsZCBzaXJlZCBieSBTYWNyYW1lbnRvIFNvbmcgeHggcHJvZHVjZWQgdGhyZWUgc3VjY2Vzc2Z1bCBzcG9ydCBob3JzZXM6IExlb25hcmRvIGJ5IExhbmRtZWlzdGVyLCBDYXJ0b3VjaGUgYnkgQ2FyZGluYWwgdW5kIExhc3NvIGJ5IExhbmRtZWlzdGVyLg0KDQpUaGUgZm9sbG93aW5nIGFwcHJvdmVkIHN0YWxsaW9ucyBhbGwgY29tZSBmcm9tIHRoZSBIb2xzdGVpbiBsaW5lYWdlIDIwNjc6IEFjb25pdG8gKGJ5IEFjb3JhZG8pLCBDYW50ZXJidXJyeSAoYnkgQ2FsZXR0byBJKSwgQ2FudHVyYW5vIEkgYW5kICBJSSAoYnkgQ2FudHVybyksIENhcnRoYW5vIEkgYW5kIElJIChieSBDb250ZW5kZXIpLCBDb24gQ2FsZXR0byAoYnkgQ29udGVuZGVyKSwgQ29uIFNwaXJpdG8gKGJ5IENvbnRlbmRlciksIENvc2lkbyAoYnkgQ29zaW1vKSwgQ3Jpc3Rpbm8gKGJ5IENhcmV0aW5vKSwgSmFxdWlubyAoYnkgSmF5YWRldm8gZGUgTWFja2luYWMpLCBMYW5kc3RyZWljaGVyIChieSBMYW5kZ3JhZiBJKSwgTG9yZG9uIChieSBMb3JkKSwgTWFzZXR0byAoYnkgTW9udGFudXMpLCBPY3RhdmlvIChieSBPZ2xpbyksIFJhbmRvIChieSBSb21pbm8pIGFuZCBTeW1wYXRpY28gKGJ5IFNhY3JhbWVudG8gU29uZyB4eCkuDQoNCkFtb25nc3QgdGhlIDQ5MCBjdXJyZW50bHkgIHJlZ2lzdGVyZWQgc3BvcnQgaG9yc2VzIGFyZSAgTGFuZHN0cmVpY2hlciAoYnkgTGFuZGdyYWYgSSksIENhemFybyAoYnkgQ2hhbWJlcnRpbiksIENsYWltIENvbGxpbiAoYnkgQ29ycmFkbyBJKSBhbmQgQ29vbCBNYW4gKGJ5IENvbnRlbmRlcikgYWxsIHN1Y2Nlc3NmdWwgdXAgdG8gUy1sZXZlbC4gDQoNCjxpZnJhbWUgd2lkdGg9IjU2MCIgaGVpZ2h0PSIzMTUiIHNyYz0iLy93d3cueW91dHViZS5jb20vZW1iZWQvSzcwOFE0emlwRXciIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+', 'PGg0PkhvbHN0ZWluLCBiYXksIEJvcm46IDIwMDgsIDE2OWNtPC9oND4NCg0KSW5zZW1pbmF0aW9uIGZlZTogNzAwIOKCrCogKG9ubHkgZnJvemVuIHNlbWVuKQ0KDQogDQpBcHBwcm92ZWQgZm9yOiBIb2xzdGVpbiwgT2xkZW5idXJnLCBPbGRlbmJ1cmctSW50ZXJuYXRpb25hbCwgV2VzdGZhbGVuIGFuZCBSaGVpbmxhbmQuIEFzIHdlbGwgYXMgYWxsIHRoZSBTb3V0aCBHZXJtYW4gU3R1ZCBCb29rcyBhbmQgdGhlIG5ld2x5IGZvcm1lZCBHZXJtYW4gU3RhdGVzIFN0dWQgQm9va3MuDQoNCiANCg0KQ2FydGhhbm8gSUkgd2FzIHRoZSBjZWxlYnJhdGVkIHByZW1pdW0gc2lyZSBhdCBoaXMgYXBwcm92YWxzIGluIEhvbHN0ZWluIGluIDIwMTAsIHNob3dpbmcgZW5vcm1vdXMgYWJpbGl0eSBpbiBoaXMgcGFjZXMsIGNvcnJlY3QgY29uZm9ybWF0aW9uLCBhbmQgYW4gYWJ1bmRhbmNlIG9mIOKAnHN0YWxsaW9uIHByZXNlbmNl4oCdLiBDYXJ0aGFubyBJSSBhbHNvIGhhcyBhbiBvdXRzdGFuZGluZyB0cm90OyB0aGlzIGlzIGR1ZSB0byBoaXMgZW5vcm1vdXNseSBwb3dlcmZ1bCBoaW5kIGxlZ3MuIEhlIGhhcyBhIGJhbGFuY2VkIGNvbnNpc3RlbnQgcmh5dGhtIGFuZCBsYXJnZSwgZmxleGlibGUgZ2FpdHMuIEhpcyBqdW1waW5nIHNjb3BlLCBnb29kIGxlZyB0ZWNobmlxdWUgYW5kIHF1aWNrIHJlYWN0aW9ucyBhdCB0aGUgZmVuY2UgYXJlIGV5ZS1jYXRjaGluZy4gV2l0aCBhbGwgdGhlc2UgYXR0cmlidXRlcywgQ2FydGhhbm8gSUkgaXMgdW5kaXNwdXRlZGx5IG9uZSBvZiB0aGUgdG9wIHN0YWxsaW9ucyBvZiBoaXMgYWdlIGdyb3VwLiANCg0KSW4gMjAxMSBDYXJ0aGFubyBJSSBjb21wbGV0ZWQgYW4gZXhjZWxsZW50IDMwLWRheS10ZXN0IGluIFp3ZWlicsO8Y2tlbi4gIEhlIGNvbmZpcm1lZCB0aGUgaGlnaCBleHBlY3RhdGlvbnMgYnkgc2NvcmluZyAxMjYgcG9pbnRzIGluIHRoZSDigJxWQS1adWNodHdlcnTigJ0gZm9yIGp1bXBpbmcuIEFsc28gd29ydGggYSBtZW50aW9uIHdhcyB0aGUgZGVzZXJ2ZWQgaGlnaCBwb2ludHMgYXdhcmRlZCBmb3IgaGlzIHdlbGwtdGVtcGVyZWQgY2hhcmFjdGVyIGFuZCBncmVhdCBhdHRpdHVkZS4gDQoNCkNhdGhhbm8gbGwgYmVnaW5zIGhpcyBwcmVwYXJhdGlvbiBmb3IgdGhlIE5hdGlvbmFsIFlvdW5nIEhvcnNlIENoYW1waW9uc2hpcHMgaW4gMjAxMyB3aXRoIGhpcyBmaXJzdCBzaG93IGp1bXBpbmcgZXZlbnRzIHRoaXMgY29taW5nIHNlYXNvbi4gICANCg0KW3RpdGxlIHNpemU9IjMiXVByb2dlbnlbL3RpdGxlXQ0KDQpXZSBhcmUgbG9va2luZyBmb3J3YXJkIHdpdGggZ3JlYXQgZXhwZWN0YXRpb24gdG8gQ2FydGhhbm/igJlzIGZpcnN0IGZvYWxzIGluIDIwMTIuIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUGVkaWdyZWVbL3RpdGxlXQ0KDQpDYXJ0aGFubyBJScK0cyBzaXJlLCBDb250ZW5kZXIgd29uIGhpcyBzdGFsbGlvbiBwZXJmb3JtYW5jZSB0ZXN0IGluIEFkZWxoZWlkc2RvcmYgaW4gMTk4Ny4gT3ZlciB0aGUgeWVhcnMsIHRoZSBzb24gb2YgQ2FseXBzbyBJSSBoYXMgZGV2ZWxvcGVkIGludG8gYSB2YWx1ZWQgYW5kIGhpZ2hseSByZWdhcmRlZCBicmVlZGluZyBzdGFsbGlvbiB3aXRoIG92ZXIgb25lIGh1bmRyZWQgb2YgaGlzIGFwcHJvdmVkIHNvbnMgYWN0aXZlbHkgc2VydmluZyBhcm91bmQgdGhlIHdvcmxkIHRvZGF5LiBDb250ZW5kZXIgaGltc2VsZiB3YXMgYSBsaXZpbmcgbGVnZW5kLiBBbW9uZ3N0IG90aGVycyBoZSBzaXJlZCBDaGVja21hdGUvTS4gTWljaGFlbHMtQmVlcmJhdW0sIHR3by10aW1lIHdpbm5lciBvZiB0aGUgUmlkZXJzIFRvdXIgYW5kIHRlYW0gRXVyb3BlYW4gY2hhbXBpb24sIGFzIHdlbGwgYXMgTW9udGVuZGVyL00uIEt1dHNjaGVyIHdobyB3b24gdHdvIE9seW1waWMgYnJvbnplIG1lZGFscyBpbiAyMDA0IGFuZCB0d28gZ29sZCBtZWRhbHMgYXQgdGhlIEV1cm9wZWFuIENoYW1waW9uc2hpcHMgaW4gU2FuIFBhdHJpZ25hbm8gKElUQSkgaW4gMjAwNS4NCg0KIA0KDQogDQoNClRoZSBkYW3igJlzIHNpcmUgQ2FydGhhZ28gYmVnYW4gaGlzIGNhcmVlciBhdCB0aGUgSG9sc3RlaW5WZXJiYW5kLCBoZSB3ZW50IG9uIHRvIHBhcnRpY2lwYXRlIGF0IHR3byBPbHltcGljIEdhbWVzIHdpdGggaGlzIHJpZGVyIEpvcyBMYW5zaW5rLiAgSGUgaGFzIHNpcmVkIG92ZXIgdGhpcnR5IGFwcHJvdmVkIHN0YWxsaW9ucyBhbmQgbWFueSBpbnRlcm5hdGlvbmFsIHRvcCBzcG9ydCBob3JzZXMgc3VjaCBhcyBDYXNoIHJpZGRlbiBieSBNYXJjbyBLdXRzY2hlci4gQ2FydGhhZ28gd2FzIHJhbmtlZCBzZWNvbmQgaW4gMjAxMCBvbiB0aGUgV0JGU0gtUmFua2luZyBvZiB0aGUgd29ybGTigJlzIGJlc3Qgc2hvdyBqdW1waW5nIHNpcmVzIHRoYW5rcyB0byBoaXMgc3VjY2Vzc2Z1bCBvZmZzcHJpbmcuDQoNCkNhcnRoYW5vIElJ4oCZcyAgZGFtIEctQ2F0YW5pYSBwcm9kdWNlZCB0aGUgdHdvIGZ1bGwtYnJvdGhlcnMgYW5kIGFwcHJvdmVkIHN0YWxsaW9ucyBDYXJ0aGFubyBJIGFuZCBJSSBhcyB3ZWxsIGFzIHR3byBzdHVkIGJvb2sgcHJlbWl1bSBtYXJlcyBhbmQgZm91ciBzcG9ydCBob3JzZXMuIFR3byBvZiB3aGljaCwgUGh5bGxpcyBhbmQgUGF1bGEsIGJvdGggc2lyZWQgYnkgQ2FtYnJpZGdlIGhhdmUgYmVlbiBzdWNjZXNzZnVsIGluIDEuNDAgYW5kIGhpZ2hlciBqdW1waW5nIGNsYXNzZXMuIFRoZSB0aGlyZCBtYXRlcm5hbCBkYW0sIE1lY2h0aGlsZCBzaXJlZCBieSBTYWNyYW1lbnRvIFNvbmcgeHggcHJvZHVjZWQgdGhyZWUgc3VjY2Vzc2Z1bCBzcG9ydCBob3JzZXM6IExlb25hcmRvIGJ5IExhbmRtZWlzdGVyLCBDYXJ0b3VjaGUgYnkgQ2FyZGluYWwgdW5kIExhc3NvIGJ5IExhbmRtZWlzdGVyLg0KDQpUaGUgZm9sbG93aW5nIGFwcHJvdmVkIHN0YWxsaW9ucyBhbGwgY29tZSBmcm9tIHRoZSBIb2xzdGVpbiBsaW5lYWdlIDIwNjc6IEFjb25pdG8gKGJ5IEFjb3JhZG8pLCBDYW50ZXJidXJyeSAoYnkgQ2FsZXR0byBJKSwgQ2FudHVyYW5vIEkgYW5kICBJSSAoYnkgQ2FudHVybyksIENhcnRoYW5vIEkgYW5kIElJIChieSBDb250ZW5kZXIpLCBDb24gQ2FsZXR0byAoYnkgQ29udGVuZGVyKSwgQ29uIFNwaXJpdG8gKGJ5IENvbnRlbmRlciksIENvc2lkbyAoYnkgQ29zaW1vKSwgQ3Jpc3Rpbm8gKGJ5IENhcmV0aW5vKSwgSmFxdWlubyAoYnkgSmF5YWRldm8gZGUgTWFja2luYWMpLCBMYW5kc3RyZWljaGVyIChieSBMYW5kZ3JhZiBJKSwgTG9yZG9uIChieSBMb3JkKSwgTWFzZXR0byAoYnkgTW9udGFudXMpLCBPY3RhdmlvIChieSBPZ2xpbyksIFJhbmRvIChieSBSb21pbm8pIGFuZCBTeW1wYXRpY28gKGJ5IFNhY3JhbWVudG8gU29uZyB4eCkuDQoNCkFtb25nc3QgdGhlIDQ5MCBjdXJyZW50bHkgIHJlZ2lzdGVyZWQgc3BvcnQgaG9yc2VzIGFyZSAgTGFuZHN0cmVpY2hlciAoYnkgTGFuZGdyYWYgSSksIENhemFybyAoYnkgQ2hhbWJlcnRpbiksIENsYWltIENvbGxpbiAoYnkgQ29ycmFkbyBJKSBhbmQgQ29vbCBNYW4gKGJ5IENvbnRlbmRlcikgYWxsIHN1Y2Nlc3NmdWwgdXAgdG8gUy1sZXZlbC4gDQoNCjxpZnJhbWUgd2lkdGg9IjU2MCIgaGVpZ2h0PSIzMTUiIHNyYz0iLy93d3cueW91dHViZS5jb20vZW1iZWQvSzcwOFE0emlwRXciIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+', 1), +(60, 14, 0, '2014-02-27 16:29:49', 'original_id', '', 0, '4970', '', 1), +(61, 14, 0, '2014-02-27 16:29:49', 'horse_categories', 'csv_base64', 1, '"Q29tcGV0aWNpw7Nu"', '', 1), +(62, 14, 0, '2014-02-27 16:29:49', 'horse_categories_ids', '', 0, '56', '', 1), +(63, 14, 0, '2014-02-27 16:29:49', 'horse_breeds', 'csv_base64', 1, '"WmFuZ2Vyc2hlaWRl"', '', 1), +(64, 14, 0, '2014-02-27 16:29:49', 'horse_breeds_ids', '', 0, '64', '', 1), +(65, 14, 0, '2014-02-27 16:29:49', 'horse_genders', 'csv_base64', 1, '"U2VtZW50YWw="', '', 1), +(66, 14, 0, '2014-02-27 16:29:49', 'horse_genders_ids', '', 0, '57', '', 1), +(67, 15, 0, '2014-02-27 16:29:50', 'title', 'base64', 1, 'QmxhY2sgSmFjaw==', 'QmxhY2sgSmFjaw==', 1), +(68, 15, 0, '2014-02-27 16:29:50', 'body', 'base64', 1, 'PGg0Pldlc3RwaGFsaWFuIC0gZGFyayBicm93biAtIDIwMDYgLSAxNi4yIGhhbmRzPC9oND4NCg0KPHN0cm9uZz5BZ2U8L3N0cm9uZz46IDAzLzA2LzIwMDYNCjxzdHJvbmc+R2VuZGVyPC9zdHJvbmc+OiBDb2x0DQo8c3Ryb25nPkNvbG9yPC9zdHJvbmc+OiBkYXJrIGJyb3duDQo8c3Ryb25nPkJyZWVkZXI8L3N0cm9uZz46IFRob21hcyBTY2hpbmRsZXIsIEZhdXRlbmJhY2gsIEdlcm1hbnkNCg0KQXBwcm92ZWQgZm9yIE1lY2tsZW5idXJnLCBSaGluZWxhbmQsIFdlc3RwaGFsaWEgYW5kIGFsbCBTb3V0aGVybiBHZXJtYW4gVmVyYmFuZHMuIA0KT3RoZXIgVmVyYmFuZHMgb24gcmVxdWVzdCENCg0KSW5zZW1pbmF0aW9uIGZlZTogNTAwIOKCrCogKyBJbi1mb2FsIGZlZTogNTAwIOKCrCogKEZTICsgVEcpDQoNCkZvcmVpZ24gY3VzdG9tZXJzIG11c3QgcGF5IGZ1bGwgc3R1ZCBmZWUgaW4gYWR2YW5jZS4gUmVmdW5kIG9mIHRoZSBoYWxmIGF0IG5vbi1wcmVnbmFuY3kuDQoNCk9yZGVycyBmb3IgZnJlc2ggc2VtZW4gbXVzdCBiZSByZWNlaXZlZCBieSA5OjAwIGEubS4gdGhlIGRheSBiZWZvcmUgc2luY2UgdGhlIHN0YWxsaW9uIGlzIHN0YXRpb25lZCBpbiBJdGFseSENCg0KDQpSZXBlYXRpbmcgaGlzIHBlcmZvcm1hbmNlIGluIDIwMTEsIEJsYWNrIEphY2sgYWdhaW4gd29uIHRoZSBxdWFsaWZpZXIgaW4gUmllc2VuYmVjayBpbiAyMDEyIGFuZCB0aHVzIGEgdGlja2V0IGZvciB0aGUgQnVuZGVzY2hhbXBpb25hdCBmb3Igc2hvdyBqdW1wZXJzLiBUaGlzIGZlYXQgaGFkIGJlZW4gcHJlY2VkZWQgYnkgYSBzZXJpZXMgb2YgcmliYm9ucyBpbiBtZWRpdW0gKE0qKSBsZXZlbCB0ZXN0cyBmb3IgeW91bmcgc2hvdyBqdW1wZXJzIGFuZCBtZWRpdW0gKE0qKikgbGV2ZWwgc2hvdyBqdW1waW5nIHRlc3RzLiAgDQoNCkNsZWFybHkgcmVmaW5lZCBieSBoaXMgZGFt4oCZcyBUaG9yb3VnaGJyZWQgc2lyZSBIZXJhbGRpayB4eCwgdGhlIGdvcmdlb3VzLCBwYXRlbnQgbGVhdGhlciBibGFjayAgQmxhY2sgSmFjayB3YXMgb25lIG9mIHRoZSBoaWdobGlnaHRzIGF0IHRoZSAxOHRoIE5SVyBsaWNlbnNpbmcgaW4gTcO8bnN0ZXItSGFuZG9yZiAgaW4gMjAwOC4gIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUHJvZ2VueVsvdGl0bGVdDQoNCkhpZ2hseSByZWZpbmVkIGhpbXNlbGYsIHRoZSBjaGFybWluZyBCbGFjayBKYWNrIG5vdCBvbmx5IHBhc3NlcyBvbiBoaXMgZ29vZCBsb29rcyBidXQgYWxzbyBoaXMgYWJpbGl0eSB0byBqdW1wLCBoaXMgcXVhbGl0eSBtb3ZlbWVudHMgYW5kIHJpZGVhYmlsaXR5LiBIaXMgZmlyc3Qgc29ucyBhbmQgZGF1Z2h0ZXJzLCBub3cgdW5kZXIgc2FkZGxlLCBtYWtlIGEgaGlnaGx5IHByb21pc2luZyBpbXByZXNzaW9uLiANCg0KQmxhY2sgSmFja+KAmXMgZm9hbHMgcXVpY2tseSBmaW5kIGJ1eWVycy4gSGlzIHNvbiBCb3LDqWFsIGRlcyBQcsOpcyB3YXMgc29sZCBmb3IgMTIsNTAwIFN3aXNzIEZyYW5jcyBpbiAyMDEyIGF0IHRoZSBTcG9ydCBGb2FscyBBdWN0aW9uIGluIFN1cnNlZS9TVUkuIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUGVkaWdyZWVbL3RpdGxlXQ0KDQpIaXMgc2lyZSBCYWxvdWJldCBkdSBSb3VldCB3b24gaW5kaXZpZHVhbCBPbHltcGljIGdvbGQgd2l0aCBSb2RyaWdvIFBlc3NvYS9CUkEgaW4gMjAwNCBvbiB0aGUgY291cnNlIG9mIEF0aGVucy9HUkUuIEhlIGFsc28gdG9vayB0aGUgV29ybGQgQ3VwIHRpdGxlIHRocmVlIHRpbWVzIGluIGEgcm93IGFuZCB3b24gdGhlIHVub2ZmaWNpYWwgaW5kb29yIFdvcmxkIENoYW1waW9uc2hpcHMgdHdpY2UgaW4gMjAwMiBhbmQgMjAwMy4gVGhlIGNoZXN0bnV0IFNlbGxlIEZyYW5jYWlzIHN0YWxsaW9uIHdobyBhZ2FpbiBsZWFkcyB0aGUgV0JGU0ggIChXb3JsZCBCcmVlZGluZyBGZWRlcmF0aW9uIGZvciBTcG9ydCBIb3JzZXMpIHJhbmtpbmcgb2YgdGhlIHdvcmxk4oCZcyBiZXN0IGp1bXBlci1tYWtlcnMg4oCTIGFsc28gdGhhbmtzIHRvIENoYW1hbiB3aG8gaXMgYWxzbyBzdGF0aW9uZWQgaW4gUmllc2VuYmVjayDigJMgaXMgYSBHYWxvdWJldCBBIHNvbi4gR2Fsb3ViZXQgQSwgYSBzb24gb2YgdGhlIHRyYWRlbWFyayBzdGFsbGlvbiBBbG3DqSBaIHdobyB3YXMgb24gdGhlIEZyZW5jaCBnb2xkIHdpbm5pbmcgdGVhbSBhdCB0aGUgMTk4MiBXb3JsZCBDaGFtcGlvbnNoaXBzIG9mIER1Ymxpbi9JUkwgd2l0aCBHaWxsZXMgQmVydHJhbmQgZGUgQmFsbGFuZGEsIHdvbiB0aGUgRnJlbmNoIENoYW1waW9uc2hpcHMgc2V2ZXJhbCB0aW1lcyBhbmQgY29sbGVjdGVkIGRvemVucyBvZiBmaXJzdCBwbGFjZSByaWJib25zIGluIE5hdGlvbnMgQ3VwcyBhbmQgIEdyYW5kIFByaXguIE1vcmUgdGhhbiAzMCBvZiBoaXMgc29ucyBhcmUgYWN0aXZlIGluIGJyZWVkaW5nLCBpbmNsdWRpbmcgVeKAmUdyYW5kIEpldGUsIEVvbGUgYW5kIE1lcmVkaXRoIE1pY2hhZWxzLUJlZXJiYXVt4oCZcyBRdWljayBTdGFyLg0KDQpIaXMgZGFtIFN0LlByLlN0LiBXaW56ZXJpbiwgd2hvIHBhc3NlZCBoZXIgYnJvb2RtYXJlIHBlcmZvcm1hbmNlIHRlc3Qgd2l0aCBvdXRzdGFuZGluZyBzY29yZXMsIGlzIGFsc28gdGhlIGRhbSBvZiAgR3V0IE5ldWVuaG9mcyBMZXZhbnRhZG9zIChieSBMYW5jZXIgSUkpIHdobyB3aW5zIHNob3cganVtcGluZyBjbGFzc2VzIHVwIHRvIGFkdmFuY2VkIChTKioqKSBsZXZlbCwgYXMgd2VsbCBhcyBhIHNldmVuLXllYXIgb2xkIGZ1bGwgc2lzdGVyIG9mIEJhbG91dGVsbGkgbmFtZWQgR3V0IE5ldWVuaG9mcyBCYWNhcm9sZS9IZW5yaWsgdm9uIEVja2VybWFubi9TV0Ugd2hvIGlzIGFsc28gaGlnaGx5IHN1Y2Nlc3NmdWwgaW4gaW50ZXJuYXRpb25hbCBjb21wZXRpdGlvbnMsIGFuZCAgR3V0IE5ldWVuaG9mcyBDYXR5IChieSBDcmlzdGFsbG8gSSkgd2hvIHF1YWxpZmllZCBmb3IgdGhlIEJ1bmRlc2NoYW1waW9uYXQuDQoNCjxpZnJhbWUgd2lkdGg9IjU2MCIgaGVpZ2h0PSIzMTUiIHNyYz0iLy93d3cueW91dHViZS5jb20vZW1iZWQvSzcwOFE0emlwRXciIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+', 'PGg0Pldlc3RwaGFsaWFuIC0gZGFyayBicm93biAtIDIwMDYgLSAxNi4yIGhhbmRzPC9oND4NCg0KPHN0cm9uZz5BZ2U8L3N0cm9uZz46IDAzLzA2LzIwMDYNCjxzdHJvbmc+R2VuZGVyPC9zdHJvbmc+OiBDb2x0DQo8c3Ryb25nPkNvbG9yPC9zdHJvbmc+OiBkYXJrIGJyb3duDQo8c3Ryb25nPkJyZWVkZXI8L3N0cm9uZz46IFRob21hcyBTY2hpbmRsZXIsIEZhdXRlbmJhY2gsIEdlcm1hbnkNCg0KQXBwcm92ZWQgZm9yIE1lY2tsZW5idXJnLCBSaGluZWxhbmQsIFdlc3RwaGFsaWEgYW5kIGFsbCBTb3V0aGVybiBHZXJtYW4gVmVyYmFuZHMuIA0KT3RoZXIgVmVyYmFuZHMgb24gcmVxdWVzdCENCg0KSW5zZW1pbmF0aW9uIGZlZTogNTAwIOKCrCogKyBJbi1mb2FsIGZlZTogNTAwIOKCrCogKEZTICsgVEcpDQoNCkZvcmVpZ24gY3VzdG9tZXJzIG11c3QgcGF5IGZ1bGwgc3R1ZCBmZWUgaW4gYWR2YW5jZS4gUmVmdW5kIG9mIHRoZSBoYWxmIGF0IG5vbi1wcmVnbmFuY3kuDQoNCk9yZGVycyBmb3IgZnJlc2ggc2VtZW4gbXVzdCBiZSByZWNlaXZlZCBieSA5OjAwIGEubS4gdGhlIGRheSBiZWZvcmUgc2luY2UgdGhlIHN0YWxsaW9uIGlzIHN0YXRpb25lZCBpbiBJdGFseSENCg0KDQpSZXBlYXRpbmcgaGlzIHBlcmZvcm1hbmNlIGluIDIwMTEsIEJsYWNrIEphY2sgYWdhaW4gd29uIHRoZSBxdWFsaWZpZXIgaW4gUmllc2VuYmVjayBpbiAyMDEyIGFuZCB0aHVzIGEgdGlja2V0IGZvciB0aGUgQnVuZGVzY2hhbXBpb25hdCBmb3Igc2hvdyBqdW1wZXJzLiBUaGlzIGZlYXQgaGFkIGJlZW4gcHJlY2VkZWQgYnkgYSBzZXJpZXMgb2YgcmliYm9ucyBpbiBtZWRpdW0gKE0qKSBsZXZlbCB0ZXN0cyBmb3IgeW91bmcgc2hvdyBqdW1wZXJzIGFuZCBtZWRpdW0gKE0qKikgbGV2ZWwgc2hvdyBqdW1waW5nIHRlc3RzLiAgDQoNCkNsZWFybHkgcmVmaW5lZCBieSBoaXMgZGFt4oCZcyBUaG9yb3VnaGJyZWQgc2lyZSBIZXJhbGRpayB4eCwgdGhlIGdvcmdlb3VzLCBwYXRlbnQgbGVhdGhlciBibGFjayAgQmxhY2sgSmFjayB3YXMgb25lIG9mIHRoZSBoaWdobGlnaHRzIGF0IHRoZSAxOHRoIE5SVyBsaWNlbnNpbmcgaW4gTcO8bnN0ZXItSGFuZG9yZiAgaW4gMjAwOC4gIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUHJvZ2VueVsvdGl0bGVdDQoNCkhpZ2hseSByZWZpbmVkIGhpbXNlbGYsIHRoZSBjaGFybWluZyBCbGFjayBKYWNrIG5vdCBvbmx5IHBhc3NlcyBvbiBoaXMgZ29vZCBsb29rcyBidXQgYWxzbyBoaXMgYWJpbGl0eSB0byBqdW1wLCBoaXMgcXVhbGl0eSBtb3ZlbWVudHMgYW5kIHJpZGVhYmlsaXR5LiBIaXMgZmlyc3Qgc29ucyBhbmQgZGF1Z2h0ZXJzLCBub3cgdW5kZXIgc2FkZGxlLCBtYWtlIGEgaGlnaGx5IHByb21pc2luZyBpbXByZXNzaW9uLiANCg0KQmxhY2sgSmFja+KAmXMgZm9hbHMgcXVpY2tseSBmaW5kIGJ1eWVycy4gSGlzIHNvbiBCb3LDqWFsIGRlcyBQcsOpcyB3YXMgc29sZCBmb3IgMTIsNTAwIFN3aXNzIEZyYW5jcyBpbiAyMDEyIGF0IHRoZSBTcG9ydCBGb2FscyBBdWN0aW9uIGluIFN1cnNlZS9TVUkuIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUGVkaWdyZWVbL3RpdGxlXQ0KDQpIaXMgc2lyZSBCYWxvdWJldCBkdSBSb3VldCB3b24gaW5kaXZpZHVhbCBPbHltcGljIGdvbGQgd2l0aCBSb2RyaWdvIFBlc3NvYS9CUkEgaW4gMjAwNCBvbiB0aGUgY291cnNlIG9mIEF0aGVucy9HUkUuIEhlIGFsc28gdG9vayB0aGUgV29ybGQgQ3VwIHRpdGxlIHRocmVlIHRpbWVzIGluIGEgcm93IGFuZCB3b24gdGhlIHVub2ZmaWNpYWwgaW5kb29yIFdvcmxkIENoYW1waW9uc2hpcHMgdHdpY2UgaW4gMjAwMiBhbmQgMjAwMy4gVGhlIGNoZXN0bnV0IFNlbGxlIEZyYW5jYWlzIHN0YWxsaW9uIHdobyBhZ2FpbiBsZWFkcyB0aGUgV0JGU0ggIChXb3JsZCBCcmVlZGluZyBGZWRlcmF0aW9uIGZvciBTcG9ydCBIb3JzZXMpIHJhbmtpbmcgb2YgdGhlIHdvcmxk4oCZcyBiZXN0IGp1bXBlci1tYWtlcnMg4oCTIGFsc28gdGhhbmtzIHRvIENoYW1hbiB3aG8gaXMgYWxzbyBzdGF0aW9uZWQgaW4gUmllc2VuYmVjayDigJMgaXMgYSBHYWxvdWJldCBBIHNvbi4gR2Fsb3ViZXQgQSwgYSBzb24gb2YgdGhlIHRyYWRlbWFyayBzdGFsbGlvbiBBbG3DqSBaIHdobyB3YXMgb24gdGhlIEZyZW5jaCBnb2xkIHdpbm5pbmcgdGVhbSBhdCB0aGUgMTk4MiBXb3JsZCBDaGFtcGlvbnNoaXBzIG9mIER1Ymxpbi9JUkwgd2l0aCBHaWxsZXMgQmVydHJhbmQgZGUgQmFsbGFuZGEsIHdvbiB0aGUgRnJlbmNoIENoYW1waW9uc2hpcHMgc2V2ZXJhbCB0aW1lcyBhbmQgY29sbGVjdGVkIGRvemVucyBvZiBmaXJzdCBwbGFjZSByaWJib25zIGluIE5hdGlvbnMgQ3VwcyBhbmQgIEdyYW5kIFByaXguIE1vcmUgdGhhbiAzMCBvZiBoaXMgc29ucyBhcmUgYWN0aXZlIGluIGJyZWVkaW5nLCBpbmNsdWRpbmcgVeKAmUdyYW5kIEpldGUsIEVvbGUgYW5kIE1lcmVkaXRoIE1pY2hhZWxzLUJlZXJiYXVt4oCZcyBRdWljayBTdGFyLg0KDQpIaXMgZGFtIFN0LlByLlN0LiBXaW56ZXJpbiwgd2hvIHBhc3NlZCBoZXIgYnJvb2RtYXJlIHBlcmZvcm1hbmNlIHRlc3Qgd2l0aCBvdXRzdGFuZGluZyBzY29yZXMsIGlzIGFsc28gdGhlIGRhbSBvZiAgR3V0IE5ldWVuaG9mcyBMZXZhbnRhZG9zIChieSBMYW5jZXIgSUkpIHdobyB3aW5zIHNob3cganVtcGluZyBjbGFzc2VzIHVwIHRvIGFkdmFuY2VkIChTKioqKSBsZXZlbCwgYXMgd2VsbCBhcyBhIHNldmVuLXllYXIgb2xkIGZ1bGwgc2lzdGVyIG9mIEJhbG91dGVsbGkgbmFtZWQgR3V0IE5ldWVuaG9mcyBCYWNhcm9sZS9IZW5yaWsgdm9uIEVja2VybWFubi9TV0Ugd2hvIGlzIGFsc28gaGlnaGx5IHN1Y2Nlc3NmdWwgaW4gaW50ZXJuYXRpb25hbCBjb21wZXRpdGlvbnMsIGFuZCAgR3V0IE5ldWVuaG9mcyBDYXR5IChieSBDcmlzdGFsbG8gSSkgd2hvIHF1YWxpZmllZCBmb3IgdGhlIEJ1bmRlc2NoYW1waW9uYXQuDQoNCjxpZnJhbWUgd2lkdGg9IjU2MCIgaGVpZ2h0PSIzMTUiIHNyYz0iLy93d3cueW91dHViZS5jb20vZW1iZWQvSzcwOFE0emlwRXciIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+', 1), +(69, 15, 0, '2014-02-27 16:29:50', 'original_id', '', 0, '4955', '', 1), +(70, 15, 0, '2014-02-27 16:29:50', 'horse_categories', 'csv_base64', 1, '"Q29tcGV0aWNpw7Nu"', '', 1), +(71, 15, 0, '2014-02-27 16:29:50', 'horse_categories_ids', '', 0, '56', '', 1), +(72, 15, 0, '2014-02-27 16:29:50', 'horse_breeds', 'csv_base64', 1, '"SG9sc3RlaW5lcg=="', '', 1), +(73, 15, 0, '2014-02-27 16:29:50', 'horse_breeds_ids', '', 0, '65', '', 1), +(74, 15, 0, '2014-02-27 16:29:50', 'horse_genders', 'csv_base64', 1, '"U2VtZW50YWw="', '', 1), +(75, 15, 0, '2014-02-27 16:29:50', 'horse_genders_ids', '', 0, '57', '', 1), +(76, 15, 0, '2014-02-27 16:29:50', 'horse_tags', 'csv_base64', 1, '"cA=="', '', 1), +(77, 15, 0, '2014-02-27 16:29:50', 'horse_tags_ids', '', 0, '66', '', 1), +(78, 16, 0, '2014-02-27 16:29:50', 'title', 'base64', 1, 'Q2Fycmljbw==', 'Q2Fycmljbw==', 1), +(79, 16, 0, '2014-02-27 16:29:50', 'body', 'base64', 1, 'PGg0PkhvbHN0ZWluZXIgLSBMaW5lIDQ3MDUgLSBiYXkgLSAyMDAzIC0gIDE2LjMgwr0gaGFuZHMgPC9oND4NCkJyZWVkZXI6IFBldGVyIELDtmdlLCBTY2jDtm5ob3JzdCwgR2VybWFueQ0KDQpBcHByb3ZlZCBmb3IgSGFub3ZlciwgSG9sc3RlaW4sIE9TLCBNZWNrbGVuYnVyZywgUmhpbmVsYW5kLCBXZXN0cGhhbGlhIGFuZCBhbGwgU291dGhlcm4gR2VybWFuIFZlcmJhbmRzLmFzIHdlbGwgYXMgRGVubWFyaywgU3dlZGVuIGFuZCBGcmFuY2UuDQoNCkluc2VtaW5hdGlvbiBmZWU6IDUwMCDigqwqICsgSW4tZm9hbCBmZWU6IDUwMCDigqwqIChGUyArIFRHKQ0KDQpGb3JlaWduIGN1c3RvbWVycyBtdXN0IHBheSBmdWxsIHN0dWQgZmVlIGluIGFkdmFuY2UuIFJlZnVuZCBvZiB0aGUgaGFsZiBhdCBub24tcHJlZ25hbmN5DQoNCkNhcnJpY28gaGFzIG5vdyBiZWNvbWUgZmlybWx5IGVzdGFibGlzaGVkIGluIHVwcGVyIGxldmVsLCBpbnRlcm5hdGlvbmFsIHNob3cganVtcGluZyBhZnRlciBwbGFjaW5nIGluIERvcnRtdW5kLCBIYWdlbiBhLlQuVy4sIENoYW50aWxseS9GUkEsIE3DvG5zdGVyLCBQYWRlcmJvcm4gYW5kIE5ldW3DvG5zdGVyIHVuZGVyIFBoaWxpcHAgV2Vpc2hhdXB0IGFuZCBIZW5yaWsgdm9uIEVja2VybWFubi9TV0UuDQoNCkF3YXJkZWQgYSBwcmVtaXVtIGluIDIwMDUgaW4gTmV1bcO8bnN0ZXIsIENhcnJpY28gdGhlbiB0b29rIGhpcyBzdGFsbGlvbiBwZXJmb3JtYW5jZSB0ZXN0IGluIFJlZGVmaW4gd2hlcmUgaGUgd29uIHRoZSBqdW1waW5nIGFzIHdlbGwgYXMgdGhlIGRyZXNzYWdlIGluZGV4LCBmaW5pc2hpbmcgZmlyc3Qgb3ZlcmFsbC4gSW4gMjAwOCBoZSB3b24gYSBxdWFsaWZpZXIgYXQgdGhlIEJ1bmRlc2NoYW1waW9uYXQgd2l0aCBhIDkuNSBhbmQgaW4gMjAwOSBoZSBwbGFjZWQgaW4gdGhlIEZpbmFsIGZvciBzaXgteWVhciBvbGQgc2hvdyBqdW1wZXJzIGluIFdhcmVuZG9yZi4gQXQgdGhlIGFnZSBvZiBqdXN0IHNldmVuLCBoZSB3b24gaGlzIGZpcnN0IHJpYmJvbnMgaW4gYWR2YW5jZWQgbGV2ZWwgY2xhc3Nlcy4NCg==', 'PGg0PkhvbHN0ZWluZXIgLSBMaW5lIDQ3MDUgLSBiYXkgLSAyMDAzIC0gIDE2LjMgwr0gaGFuZHMgPC9oND4NCkJyZWVkZXI6IFBldGVyIELDtmdlLCBTY2jDtm5ob3JzdCwgR2VybWFueQ0KDQpBcHByb3ZlZCBmb3IgSGFub3ZlciwgSG9sc3RlaW4sIE9TLCBNZWNrbGVuYnVyZywgUmhpbmVsYW5kLCBXZXN0cGhhbGlhIGFuZCBhbGwgU291dGhlcm4gR2VybWFuIFZlcmJhbmRzLmFzIHdlbGwgYXMgRGVubWFyaywgU3dlZGVuIGFuZCBGcmFuY2UuDQoNCkluc2VtaW5hdGlvbiBmZWU6IDUwMCDigqwqICsgSW4tZm9hbCBmZWU6IDUwMCDigqwqIChGUyArIFRHKQ0KDQpGb3JlaWduIGN1c3RvbWVycyBtdXN0IHBheSBmdWxsIHN0dWQgZmVlIGluIGFkdmFuY2UuIFJlZnVuZCBvZiB0aGUgaGFsZiBhdCBub24tcHJlZ25hbmN5DQoNCkNhcnJpY28gaGFzIG5vdyBiZWNvbWUgZmlybWx5IGVzdGFibGlzaGVkIGluIHVwcGVyIGxldmVsLCBpbnRlcm5hdGlvbmFsIHNob3cganVtcGluZyBhZnRlciBwbGFjaW5nIGluIERvcnRtdW5kLCBIYWdlbiBhLlQuVy4sIENoYW50aWxseS9GUkEsIE3DvG5zdGVyLCBQYWRlcmJvcm4gYW5kIE5ldW3DvG5zdGVyIHVuZGVyIFBoaWxpcHAgV2Vpc2hhdXB0IGFuZCBIZW5yaWsgdm9uIEVja2VybWFubi9TV0UuDQoNCkF3YXJkZWQgYSBwcmVtaXVtIGluIDIwMDUgaW4gTmV1bcO8bnN0ZXIsIENhcnJpY28gdGhlbiB0b29rIGhpcyBzdGFsbGlvbiBwZXJmb3JtYW5jZSB0ZXN0IGluIFJlZGVmaW4gd2hlcmUgaGUgd29uIHRoZSBqdW1waW5nIGFzIHdlbGwgYXMgdGhlIGRyZXNzYWdlIGluZGV4LCBmaW5pc2hpbmcgZmlyc3Qgb3ZlcmFsbC4gSW4gMjAwOCBoZSB3b24gYSBxdWFsaWZpZXIgYXQgdGhlIEJ1bmRlc2NoYW1waW9uYXQgd2l0aCBhIDkuNSBhbmQgaW4gMjAwOSBoZSBwbGFjZWQgaW4gdGhlIEZpbmFsIGZvciBzaXgteWVhciBvbGQgc2hvdyBqdW1wZXJzIGluIFdhcmVuZG9yZi4gQXQgdGhlIGFnZSBvZiBqdXN0IHNldmVuLCBoZSB3b24gaGlzIGZpcnN0IHJpYmJvbnMgaW4gYWR2YW5jZWQgbGV2ZWwgY2xhc3Nlcy4NCg==', 1), +(80, 16, 0, '2014-02-27 16:29:50', 'original_id', '', 0, '4953', '', 1), +(81, 16, 0, '2014-02-27 16:29:50', 'horse_categories', 'csv_base64', 1, '"Q3LDrWE="', '', 1), +(82, 16, 0, '2014-02-27 16:29:50', 'horse_categories_ids', '', 0, '55', '', 1), +(83, 16, 0, '2014-02-27 16:29:50', 'horse_breeds', 'csv_base64', 1, '"Q3J1emFkbw=="', '', 1), +(84, 16, 0, '2014-02-27 16:29:50', 'horse_breeds_ids', '', 0, '63', '', 1), +(85, 16, 0, '2014-02-27 16:29:50', 'horse_genders', 'csv_base64', 1, '"Q2Fww7Nu"', '', 1), +(86, 16, 0, '2014-02-27 16:29:50', 'horse_genders_ids', '', 0, '59', '', 1), +(87, 17, 0, '2014-02-27 16:29:50', 'title', 'base64', 1, 'R2FsYW50ZQ==', 'R2FsYW50ZQ==', 1), +(88, 17, 0, '2014-02-27 16:29:50', 'body', 'base64', 1, 'PGg0Pldlc3RwaGFsaWFuIC0gYnJvd24gLSAyMDExIC0gMTYuMiBoYW5kczwvaDQ+DQoNCjxzdHJvbmc+Tm9tYnJlPC9zdHJvbmc+OiBHYWxhbnRlDQo8c3Ryb25nPkHDsW8gZGUgbmFjaW1pZW50bzwvc3Ryb25nPjogMjAxMSANCjxzdHJvbmc+Q2FwYTwvc3Ryb25nPjogQ2FzdGHDsW8NCg0KW3RpdGxlIHNpemU9IjMiXVByb2dlbnlbL3RpdGxlXQ0KDQpIaWdobHkgcmVmaW5lZCBoaW1zZWxmLCB0aGUgY2hhcm1pbmcgQmxhY2sgSmFjayBub3Qgb25seSBwYXNzZXMgb24gaGlzIGdvb2QgbG9va3MgYnV0IGFsc28gaGlzIGFiaWxpdHkgdG8ganVtcCwgaGlzIHF1YWxpdHkgbW92ZW1lbnRzIGFuZCByaWRlYWJpbGl0eS4gSGlzIGZpcnN0IHNvbnMgYW5kIGRhdWdodGVycywgbm93IHVuZGVyIHNhZGRsZSwgbWFrZSBhIGhpZ2hseSBwcm9taXNpbmcgaW1wcmVzc2lvbi4gDQoNCkJsYWNrIEphY2vigJlzIGZvYWxzIHF1aWNrbHkgZmluZCBidXllcnMuIEhpcyBzb24gQm9yw6lhbCBkZXMgUHLDqXMgd2FzIHNvbGQgZm9yIDEyLDUwMCBTd2lzcyBGcmFuY3MgaW4gMjAxMiBhdCB0aGUgU3BvcnQgRm9hbHMgQXVjdGlvbiBpbiBTdXJzZWUvU1VJLiANCg0KW3RpdGxlIHNpemU9IjMiXVBlZGlncmVlWy90aXRsZV0NCg0KSGlzIHNpcmUgQmFsb3ViZXQgZHUgUm91ZXQgd29uIGluZGl2aWR1YWwgT2x5bXBpYyBnb2xkIHdpdGggUm9kcmlnbyBQZXNzb2EvQlJBIGluIDIwMDQgb24gdGhlIGNvdXJzZSBvZiBBdGhlbnMvR1JFLiBIZSBhbHNvIHRvb2sgdGhlIFdvcmxkIEN1cCB0aXRsZSB0aHJlZSB0aW1lcyBpbiBhIHJvdyBhbmQgd29uIHRoZSB1bm9mZmljaWFsIGluZG9vciBXb3JsZCBDaGFtcGlvbnNoaXBzIHR3aWNlIGluIDIwMDIgYW5kIDIwMDMuIFRoZSBjaGVzdG51dCBTZWxsZSBGcmFuY2FpcyBzdGFsbGlvbiB3aG8gYWdhaW4gbGVhZHMgdGhlIFdCRlNIICAoV29ybGQgQnJlZWRpbmcgRmVkZXJhdGlvbiBmb3IgU3BvcnQgSG9yc2VzKSByYW5raW5nIG9mIHRoZSB3b3JsZOKAmXMgYmVzdCBqdW1wZXItbWFrZXJzIOKAkyBhbHNvIHRoYW5rcyB0byBDaGFtYW4gd2hvIGlzIGFsc28gc3RhdGlvbmVkIGluIFJpZXNlbmJlY2sg4oCTIGlzIGEgR2Fsb3ViZXQgQSBzb24uIEdhbG91YmV0IEEsIGEgc29uIG9mIHRoZSB0cmFkZW1hcmsgc3RhbGxpb24gQWxtw6kgWiB3aG8gd2FzIG9uIHRoZSBGcmVuY2ggZ29sZCB3aW5uaW5nIHRlYW0gYXQgdGhlIDE5ODIgV29ybGQgQ2hhbXBpb25zaGlwcyBvZiBEdWJsaW4vSVJMIHdpdGggR2lsbGVzIEJlcnRyYW5kIGRlIEJhbGxhbmRhLCB3b24gdGhlIEZyZW5jaCBDaGFtcGlvbnNoaXBzIHNldmVyYWwgdGltZXMgYW5kIGNvbGxlY3RlZCBkb3plbnMgb2YgZmlyc3QgcGxhY2UgcmliYm9ucyBpbiBOYXRpb25zIEN1cHMgYW5kICBHcmFuZCBQcml4LiBNb3JlIHRoYW4gMzAgb2YgaGlzIHNvbnMgYXJlIGFjdGl2ZSBpbiBicmVlZGluZywgaW5jbHVkaW5nIFXigJlHcmFuZCBKZXRlLCBFb2xlIGFuZCBNZXJlZGl0aCBNaWNoYWVscy1CZWVyYmF1beKAmXMgUXVpY2sgU3Rhci4NCg0KSGlzIGRhbSBTdC5Qci5TdC4gV2luemVyaW4sIHdobyBwYXNzZWQgaGVyIGJyb29kbWFyZSBwZXJmb3JtYW5jZSB0ZXN0IHdpdGggb3V0c3RhbmRpbmcgc2NvcmVzLCBpcyBhbHNvIHRoZSBkYW0gb2YgIEd1dCBOZXVlbmhvZnMgTGV2YW50YWRvcyAoYnkgTGFuY2VyIElJKSB3aG8gd2lucyBzaG93IGp1bXBpbmcgY2xhc3NlcyB1cCB0byBhZHZhbmNlZCAoUyoqKikgbGV2ZWwsIGFzIHdlbGwgYXMgYSBzZXZlbi15ZWFyIG9sZCBmdWxsIHNpc3RlciBvZiBCYWxvdXRlbGxpIG5hbWVkIEd1dCBOZXVlbmhvZnMgQmFjYXJvbGUvSGVucmlrIHZvbiBFY2tlcm1hbm4vU1dFIHdobyBpcyBhbHNvIGhpZ2hseSBzdWNjZXNzZnVsIGluIGludGVybmF0aW9uYWwgY29tcGV0aXRpb25zLCBhbmQgIEd1dCBOZXVlbmhvZnMgQ2F0eSAoYnkgQ3Jpc3RhbGxvIEkpIHdobyBxdWFsaWZpZWQgZm9yIHRoZSBCdW5kZXNjaGFtcGlvbmF0Lg0KDQo8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Ii8vd3d3LnlvdXR1YmUtbm9jb29raWUuY29tL2VtYmVkL0EwUFNZNmtlam5RP3JlbD0wIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==', 'PGg0Pldlc3RwaGFsaWFuIC0gYnJvd24gLSAyMDExIC0gMTYuMiBoYW5kczwvaDQ+DQoNCjxzdHJvbmc+Tm9tYnJlPC9zdHJvbmc+OiBHYWxhbnRlDQo8c3Ryb25nPkHDsW8gZGUgbmFjaW1pZW50bzwvc3Ryb25nPjogMjAxMSANCjxzdHJvbmc+Q2FwYTwvc3Ryb25nPjogQ2FzdGHDsW8NCg0KW3RpdGxlIHNpemU9IjMiXVByb2dlbnlbL3RpdGxlXQ0KDQpIaWdobHkgcmVmaW5lZCBoaW1zZWxmLCB0aGUgY2hhcm1pbmcgQmxhY2sgSmFjayBub3Qgb25seSBwYXNzZXMgb24gaGlzIGdvb2QgbG9va3MgYnV0IGFsc28gaGlzIGFiaWxpdHkgdG8ganVtcCwgaGlzIHF1YWxpdHkgbW92ZW1lbnRzIGFuZCByaWRlYWJpbGl0eS4gSGlzIGZpcnN0IHNvbnMgYW5kIGRhdWdodGVycywgbm93IHVuZGVyIHNhZGRsZSwgbWFrZSBhIGhpZ2hseSBwcm9taXNpbmcgaW1wcmVzc2lvbi4gDQoNCkJsYWNrIEphY2vigJlzIGZvYWxzIHF1aWNrbHkgZmluZCBidXllcnMuIEhpcyBzb24gQm9yw6lhbCBkZXMgUHLDqXMgd2FzIHNvbGQgZm9yIDEyLDUwMCBTd2lzcyBGcmFuY3MgaW4gMjAxMiBhdCB0aGUgU3BvcnQgRm9hbHMgQXVjdGlvbiBpbiBTdXJzZWUvU1VJLiANCg0KW3RpdGxlIHNpemU9IjMiXVBlZGlncmVlWy90aXRsZV0NCg0KSGlzIHNpcmUgQmFsb3ViZXQgZHUgUm91ZXQgd29uIGluZGl2aWR1YWwgT2x5bXBpYyBnb2xkIHdpdGggUm9kcmlnbyBQZXNzb2EvQlJBIGluIDIwMDQgb24gdGhlIGNvdXJzZSBvZiBBdGhlbnMvR1JFLiBIZSBhbHNvIHRvb2sgdGhlIFdvcmxkIEN1cCB0aXRsZSB0aHJlZSB0aW1lcyBpbiBhIHJvdyBhbmQgd29uIHRoZSB1bm9mZmljaWFsIGluZG9vciBXb3JsZCBDaGFtcGlvbnNoaXBzIHR3aWNlIGluIDIwMDIgYW5kIDIwMDMuIFRoZSBjaGVzdG51dCBTZWxsZSBGcmFuY2FpcyBzdGFsbGlvbiB3aG8gYWdhaW4gbGVhZHMgdGhlIFdCRlNIICAoV29ybGQgQnJlZWRpbmcgRmVkZXJhdGlvbiBmb3IgU3BvcnQgSG9yc2VzKSByYW5raW5nIG9mIHRoZSB3b3JsZOKAmXMgYmVzdCBqdW1wZXItbWFrZXJzIOKAkyBhbHNvIHRoYW5rcyB0byBDaGFtYW4gd2hvIGlzIGFsc28gc3RhdGlvbmVkIGluIFJpZXNlbmJlY2sg4oCTIGlzIGEgR2Fsb3ViZXQgQSBzb24uIEdhbG91YmV0IEEsIGEgc29uIG9mIHRoZSB0cmFkZW1hcmsgc3RhbGxpb24gQWxtw6kgWiB3aG8gd2FzIG9uIHRoZSBGcmVuY2ggZ29sZCB3aW5uaW5nIHRlYW0gYXQgdGhlIDE5ODIgV29ybGQgQ2hhbXBpb25zaGlwcyBvZiBEdWJsaW4vSVJMIHdpdGggR2lsbGVzIEJlcnRyYW5kIGRlIEJhbGxhbmRhLCB3b24gdGhlIEZyZW5jaCBDaGFtcGlvbnNoaXBzIHNldmVyYWwgdGltZXMgYW5kIGNvbGxlY3RlZCBkb3plbnMgb2YgZmlyc3QgcGxhY2UgcmliYm9ucyBpbiBOYXRpb25zIEN1cHMgYW5kICBHcmFuZCBQcml4LiBNb3JlIHRoYW4gMzAgb2YgaGlzIHNvbnMgYXJlIGFjdGl2ZSBpbiBicmVlZGluZywgaW5jbHVkaW5nIFXigJlHcmFuZCBKZXRlLCBFb2xlIGFuZCBNZXJlZGl0aCBNaWNoYWVscy1CZWVyYmF1beKAmXMgUXVpY2sgU3Rhci4NCg0KSGlzIGRhbSBTdC5Qci5TdC4gV2luemVyaW4sIHdobyBwYXNzZWQgaGVyIGJyb29kbWFyZSBwZXJmb3JtYW5jZSB0ZXN0IHdpdGggb3V0c3RhbmRpbmcgc2NvcmVzLCBpcyBhbHNvIHRoZSBkYW0gb2YgIEd1dCBOZXVlbmhvZnMgTGV2YW50YWRvcyAoYnkgTGFuY2VyIElJKSB3aG8gd2lucyBzaG93IGp1bXBpbmcgY2xhc3NlcyB1cCB0byBhZHZhbmNlZCAoUyoqKikgbGV2ZWwsIGFzIHdlbGwgYXMgYSBzZXZlbi15ZWFyIG9sZCBmdWxsIHNpc3RlciBvZiBCYWxvdXRlbGxpIG5hbWVkIEd1dCBOZXVlbmhvZnMgQmFjYXJvbGUvSGVucmlrIHZvbiBFY2tlcm1hbm4vU1dFIHdobyBpcyBhbHNvIGhpZ2hseSBzdWNjZXNzZnVsIGluIGludGVybmF0aW9uYWwgY29tcGV0aXRpb25zLCBhbmQgIEd1dCBOZXVlbmhvZnMgQ2F0eSAoYnkgQ3Jpc3RhbGxvIEkpIHdobyBxdWFsaWZpZWQgZm9yIHRoZSBCdW5kZXNjaGFtcGlvbmF0Lg0KDQo8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Ii8vd3d3LnlvdXR1YmUtbm9jb29raWUuY29tL2VtYmVkL0EwUFNZNmtlam5RP3JlbD0wIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==', 1), +(89, 17, 0, '2014-02-27 16:29:50', 'excerpt', 'base64', 1, 'MjAxMSAtIENhc3Rhw7Fv', 'MjAxMSAtIENhc3Rhw7Fv', 1), +(90, 17, 0, '2014-02-27 16:29:50', 'original_id', '', 0, '4951', '', 1), +(91, 17, 0, '2014-02-27 16:29:50', 'horse_categories', 'csv_base64', 1, '"Q3LDrWE="', '', 1), +(92, 17, 0, '2014-02-27 16:29:50', 'horse_categories_ids', '', 0, '55', '', 1), +(93, 17, 0, '2014-02-27 16:29:50', 'horse_breeds', 'csv_base64', 1, '"Q3J1emFkbw=="', '', 1), +(94, 17, 0, '2014-02-27 16:29:50', 'horse_breeds_ids', '', 0, '63', '', 1), +(95, 17, 0, '2014-02-27 16:29:50', 'horse_genders', 'csv_base64', 1, '"Q2Fww7Nu"', '', 1), +(96, 17, 0, '2014-02-27 16:29:50', 'horse_genders_ids', '', 0, '59', '', 1), +(97, 18, 0, '2014-02-27 16:29:50', 'title', 'base64', 1, 'SMOpcmN1bGVz', 'SMOpcmN1bGVz', 1); +INSERT INTO `drgrp_icl_translate` (`tid`, `job_id`, `content_id`, `timestamp`, `field_type`, `field_format`, `field_translate`, `field_data`, `field_data_translated`, `field_finished`) VALUES +(98, 18, 0, '2014-02-27 16:29:50', 'body', 'base64', 1, 'PGg0Pldlc3RwaGFsaWFuIC0gZ3JpcyAtIDIwMTIgLSAxNi4yIGhhbmRzPC9oND4NCg0KPHN0cm9uZz5Ob21icmU8L3N0cm9uZz46IEjDqXJjdWxlcw0KPHN0cm9uZz5Bw7FvIGRlIG5hY2ltaWVudG88L3N0cm9uZz46IDIwMTIgDQo8c3Ryb25nPkNhcGE8L3N0cm9uZz46IGdyaXMgDQoNClt0aXRsZSBzaXplPSIzIl1Qcm9nZW55Wy90aXRsZV0NCg0KSGlnaGx5IHJlZmluZWQgaGltc2VsZiwgdGhlIGNoYXJtaW5nIEJsYWNrIEphY2sgbm90IG9ubHkgcGFzc2VzIG9uIGhpcyBnb29kIGxvb2tzIGJ1dCBhbHNvIGhpcyBhYmlsaXR5IHRvIGp1bXAsIGhpcyBxdWFsaXR5IG1vdmVtZW50cyBhbmQgcmlkZWFiaWxpdHkuIEhpcyBmaXJzdCBzb25zIGFuZCBkYXVnaHRlcnMsIG5vdyB1bmRlciBzYWRkbGUsIG1ha2UgYSBoaWdobHkgcHJvbWlzaW5nIGltcHJlc3Npb24uIA0KDQpCbGFjayBKYWNr4oCZcyBmb2FscyBxdWlja2x5IGZpbmQgYnV5ZXJzLiBIaXMgc29uIEJvcsOpYWwgZGVzIFByw6lzIHdhcyBzb2xkIGZvciAxMiw1MDAgU3dpc3MgRnJhbmNzIGluIDIwMTIgYXQgdGhlIFNwb3J0IEZvYWxzIEF1Y3Rpb24gaW4gU3Vyc2VlL1NVSS4gDQoNClt0aXRsZSBzaXplPSIzIl1QZWRpZ3JlZVsvdGl0bGVdDQoNCkhpcyBzaXJlIEJhbG91YmV0IGR1IFJvdWV0IHdvbiBpbmRpdmlkdWFsIE9seW1waWMgZ29sZCB3aXRoIFJvZHJpZ28gUGVzc29hL0JSQSBpbiAyMDA0IG9uIHRoZSBjb3Vyc2Ugb2YgQXRoZW5zL0dSRS4gSGUgYWxzbyB0b29rIHRoZSBXb3JsZCBDdXAgdGl0bGUgdGhyZWUgdGltZXMgaW4gYSByb3cgYW5kIHdvbiB0aGUgdW5vZmZpY2lhbCBpbmRvb3IgV29ybGQgQ2hhbXBpb25zaGlwcyB0d2ljZSBpbiAyMDAyIGFuZCAyMDAzLiBUaGUgY2hlc3RudXQgU2VsbGUgRnJhbmNhaXMgc3RhbGxpb24gd2hvIGFnYWluIGxlYWRzIHRoZSBXQkZTSCAgKFdvcmxkIEJyZWVkaW5nIEZlZGVyYXRpb24gZm9yIFNwb3J0IEhvcnNlcykgcmFua2luZyBvZiB0aGUgd29ybGTigJlzIGJlc3QganVtcGVyLW1ha2VycyDigJMgYWxzbyB0aGFua3MgdG8gQ2hhbWFuIHdobyBpcyBhbHNvIHN0YXRpb25lZCBpbiBSaWVzZW5iZWNrIOKAkyBpcyBhIEdhbG91YmV0IEEgc29uLiBHYWxvdWJldCBBLCBhIHNvbiBvZiB0aGUgdHJhZGVtYXJrIHN0YWxsaW9uIEFsbcOpIFogd2hvIHdhcyBvbiB0aGUgRnJlbmNoIGdvbGQgd2lubmluZyB0ZWFtIGF0IHRoZSAxOTgyIFdvcmxkIENoYW1waW9uc2hpcHMgb2YgRHVibGluL0lSTCB3aXRoIEdpbGxlcyBCZXJ0cmFuZCBkZSBCYWxsYW5kYSwgd29uIHRoZSBGcmVuY2ggQ2hhbXBpb25zaGlwcyBzZXZlcmFsIHRpbWVzIGFuZCBjb2xsZWN0ZWQgZG96ZW5zIG9mIGZpcnN0IHBsYWNlIHJpYmJvbnMgaW4gTmF0aW9ucyBDdXBzIGFuZCAgR3JhbmQgUHJpeC4gTW9yZSB0aGFuIDMwIG9mIGhpcyBzb25zIGFyZSBhY3RpdmUgaW4gYnJlZWRpbmcsIGluY2x1ZGluZyBV4oCZR3JhbmQgSmV0ZSwgRW9sZSBhbmQgTWVyZWRpdGggTWljaGFlbHMtQmVlcmJhdW3igJlzIFF1aWNrIFN0YXIuDQoNCkhpcyBkYW0gU3QuUHIuU3QuIFdpbnplcmluLCB3aG8gcGFzc2VkIGhlciBicm9vZG1hcmUgcGVyZm9ybWFuY2UgdGVzdCB3aXRoIG91dHN0YW5kaW5nIHNjb3JlcywgaXMgYWxzbyB0aGUgZGFtIG9mICBHdXQgTmV1ZW5ob2ZzIExldmFudGFkb3MgKGJ5IExhbmNlciBJSSkgd2hvIHdpbnMgc2hvdyBqdW1waW5nIGNsYXNzZXMgdXAgdG8gYWR2YW5jZWQgKFMqKiopIGxldmVsLCBhcyB3ZWxsIGFzIGEgc2V2ZW4teWVhciBvbGQgZnVsbCBzaXN0ZXIgb2YgQmFsb3V0ZWxsaSBuYW1lZCBHdXQgTmV1ZW5ob2ZzIEJhY2Fyb2xlL0hlbnJpayB2b24gRWNrZXJtYW5uL1NXRSB3aG8gaXMgYWxzbyBoaWdobHkgc3VjY2Vzc2Z1bCBpbiBpbnRlcm5hdGlvbmFsIGNvbXBldGl0aW9ucywgYW5kICBHdXQgTmV1ZW5ob2ZzIENhdHkgKGJ5IENyaXN0YWxsbyBJKSB3aG8gcXVhbGlmaWVkIGZvciB0aGUgQnVuZGVzY2hhbXBpb25hdC4NCg0KPGlmcmFtZSB3aWR0aD0iNTYwIiBoZWlnaHQ9IjMxNSIgc3JjPSIvL3d3dy55b3V0dWJlLW5vY29va2llLmNvbS9lbWJlZC90RkpHZ0VheHI2RT9saXN0PVVVMEhsMTJPU1ZWdUlhWDBIVXhtT3RhUSIgZnJhbWVib3JkZXI9IjAiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4=', 'PGg0Pldlc3RwaGFsaWFuIC0gZ3JpcyAtIDIwMTIgLSAxNi4yIGhhbmRzPC9oND4NCg0KPHN0cm9uZz5Ob21icmU8L3N0cm9uZz46IEjDqXJjdWxlcw0KPHN0cm9uZz5Bw7FvIGRlIG5hY2ltaWVudG88L3N0cm9uZz46IDIwMTIgDQo8c3Ryb25nPkNhcGE8L3N0cm9uZz46IGdyaXMgDQoNClt0aXRsZSBzaXplPSIzIl1Qcm9nZW55Wy90aXRsZV0NCg0KSGlnaGx5IHJlZmluZWQgaGltc2VsZiwgdGhlIGNoYXJtaW5nIEJsYWNrIEphY2sgbm90IG9ubHkgcGFzc2VzIG9uIGhpcyBnb29kIGxvb2tzIGJ1dCBhbHNvIGhpcyBhYmlsaXR5IHRvIGp1bXAsIGhpcyBxdWFsaXR5IG1vdmVtZW50cyBhbmQgcmlkZWFiaWxpdHkuIEhpcyBmaXJzdCBzb25zIGFuZCBkYXVnaHRlcnMsIG5vdyB1bmRlciBzYWRkbGUsIG1ha2UgYSBoaWdobHkgcHJvbWlzaW5nIGltcHJlc3Npb24uIA0KDQpCbGFjayBKYWNr4oCZcyBmb2FscyBxdWlja2x5IGZpbmQgYnV5ZXJzLiBIaXMgc29uIEJvcsOpYWwgZGVzIFByw6lzIHdhcyBzb2xkIGZvciAxMiw1MDAgU3dpc3MgRnJhbmNzIGluIDIwMTIgYXQgdGhlIFNwb3J0IEZvYWxzIEF1Y3Rpb24gaW4gU3Vyc2VlL1NVSS4gDQoNClt0aXRsZSBzaXplPSIzIl1QZWRpZ3JlZVsvdGl0bGVdDQoNCkhpcyBzaXJlIEJhbG91YmV0IGR1IFJvdWV0IHdvbiBpbmRpdmlkdWFsIE9seW1waWMgZ29sZCB3aXRoIFJvZHJpZ28gUGVzc29hL0JSQSBpbiAyMDA0IG9uIHRoZSBjb3Vyc2Ugb2YgQXRoZW5zL0dSRS4gSGUgYWxzbyB0b29rIHRoZSBXb3JsZCBDdXAgdGl0bGUgdGhyZWUgdGltZXMgaW4gYSByb3cgYW5kIHdvbiB0aGUgdW5vZmZpY2lhbCBpbmRvb3IgV29ybGQgQ2hhbXBpb25zaGlwcyB0d2ljZSBpbiAyMDAyIGFuZCAyMDAzLiBUaGUgY2hlc3RudXQgU2VsbGUgRnJhbmNhaXMgc3RhbGxpb24gd2hvIGFnYWluIGxlYWRzIHRoZSBXQkZTSCAgKFdvcmxkIEJyZWVkaW5nIEZlZGVyYXRpb24gZm9yIFNwb3J0IEhvcnNlcykgcmFua2luZyBvZiB0aGUgd29ybGTigJlzIGJlc3QganVtcGVyLW1ha2VycyDigJMgYWxzbyB0aGFua3MgdG8gQ2hhbWFuIHdobyBpcyBhbHNvIHN0YXRpb25lZCBpbiBSaWVzZW5iZWNrIOKAkyBpcyBhIEdhbG91YmV0IEEgc29uLiBHYWxvdWJldCBBLCBhIHNvbiBvZiB0aGUgdHJhZGVtYXJrIHN0YWxsaW9uIEFsbcOpIFogd2hvIHdhcyBvbiB0aGUgRnJlbmNoIGdvbGQgd2lubmluZyB0ZWFtIGF0IHRoZSAxOTgyIFdvcmxkIENoYW1waW9uc2hpcHMgb2YgRHVibGluL0lSTCB3aXRoIEdpbGxlcyBCZXJ0cmFuZCBkZSBCYWxsYW5kYSwgd29uIHRoZSBGcmVuY2ggQ2hhbXBpb25zaGlwcyBzZXZlcmFsIHRpbWVzIGFuZCBjb2xsZWN0ZWQgZG96ZW5zIG9mIGZpcnN0IHBsYWNlIHJpYmJvbnMgaW4gTmF0aW9ucyBDdXBzIGFuZCAgR3JhbmQgUHJpeC4gTW9yZSB0aGFuIDMwIG9mIGhpcyBzb25zIGFyZSBhY3RpdmUgaW4gYnJlZWRpbmcsIGluY2x1ZGluZyBV4oCZR3JhbmQgSmV0ZSwgRW9sZSBhbmQgTWVyZWRpdGggTWljaGFlbHMtQmVlcmJhdW3igJlzIFF1aWNrIFN0YXIuDQoNCkhpcyBkYW0gU3QuUHIuU3QuIFdpbnplcmluLCB3aG8gcGFzc2VkIGhlciBicm9vZG1hcmUgcGVyZm9ybWFuY2UgdGVzdCB3aXRoIG91dHN0YW5kaW5nIHNjb3JlcywgaXMgYWxzbyB0aGUgZGFtIG9mICBHdXQgTmV1ZW5ob2ZzIExldmFudGFkb3MgKGJ5IExhbmNlciBJSSkgd2hvIHdpbnMgc2hvdyBqdW1waW5nIGNsYXNzZXMgdXAgdG8gYWR2YW5jZWQgKFMqKiopIGxldmVsLCBhcyB3ZWxsIGFzIGEgc2V2ZW4teWVhciBvbGQgZnVsbCBzaXN0ZXIgb2YgQmFsb3V0ZWxsaSBuYW1lZCBHdXQgTmV1ZW5ob2ZzIEJhY2Fyb2xlL0hlbnJpayB2b24gRWNrZXJtYW5uL1NXRSB3aG8gaXMgYWxzbyBoaWdobHkgc3VjY2Vzc2Z1bCBpbiBpbnRlcm5hdGlvbmFsIGNvbXBldGl0aW9ucywgYW5kICBHdXQgTmV1ZW5ob2ZzIENhdHkgKGJ5IENyaXN0YWxsbyBJKSB3aG8gcXVhbGlmaWVkIGZvciB0aGUgQnVuZGVzY2hhbXBpb25hdC4NCg0KPGlmcmFtZSB3aWR0aD0iNTYwIiBoZWlnaHQ9IjMxNSIgc3JjPSIvL3d3dy55b3V0dWJlLW5vY29va2llLmNvbS9lbWJlZC90RkpHZ0VheHI2RT9saXN0PVVVMEhsMTJPU1ZWdUlhWDBIVXhtT3RhUSIgZnJhbWVib3JkZXI9IjAiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4=', 1), +(99, 18, 0, '2014-02-27 16:29:50', 'excerpt', 'base64', 1, 'Z3JpcyAtIDIwMTI=', 'Z3JpcyAtIDIwMTI=', 1), +(100, 18, 0, '2014-02-27 16:29:50', 'original_id', '', 0, '4948', '', 1), +(101, 18, 0, '2014-02-27 16:29:50', 'horse_categories', 'csv_base64', 1, '"Q3LDrWE="', '', 1), +(102, 18, 0, '2014-02-27 16:29:50', 'horse_categories_ids', '', 0, '55', '', 1), +(103, 18, 0, '2014-02-27 16:29:50', 'horse_breeds', 'csv_base64', 1, '"Q3J1emFkbw=="', '', 1), +(104, 18, 0, '2014-02-27 16:29:50', 'horse_breeds_ids', '', 0, '63', '', 1), +(105, 18, 0, '2014-02-27 16:29:50', 'horse_genders', 'csv_base64', 1, '"Q2Fww7Nu"', '', 1), +(106, 18, 0, '2014-02-27 16:29:50', 'horse_genders_ids', '', 0, '59', '', 1), +(108, 19, 0, '2014-02-28 13:03:04', 'body', 'base64', 1, 'W3NlcGFyYXRvciB0b3A9Ii01NSJdDQpbZnVsbHdpZHRoIGJvcmRlcnNpemU9IjAiXQ0KDQpbL2Z1bGx3aWR0aF0NCg0KW2Z1bGx3aWR0aCBib3JkZXJzaXplPSIwIl0NCg0KJm5ic3A7DQoNClt0aXRsZSBzaXplPSIyIl1OdWVzdHJvcyBjYWJhbGxvc1svdGl0bGVdDQoNCltyZWNlbnRfd29ya3MgbGF5b3V0PSJncmlkLXdpdGgtZXhjZXJwdHMiIGZpbHRlcnM9Im5vIiBjb2x1bW5zPSI0IiBjYXRfc2x1Zz0iIiBudW1iZXJfcG9zdHM9IjQiIGV4Y2VycHRfd29yZHM9IjE1IiBhbmltYXRpb25fdHlwZT0iYm91bmNlIiBhbmltYXRpb25fZGlyZWN0aW9uPSJkb3duIiBhbmltYXRpb25fc3BlZWQ9IjAuMSJdWy9yZWNlbnRfd29ya3NdDQpbL2Z1bGx3aWR0aF0NCltmdWxsd2lkdGggYmFja2dyb3VuZGNvbG9yPSIjZjBmMGZmIiBiYWNrZ3JvdW5kaW1hZ2U9IiIgYmFja2dyb3VuZHJlcGVhdD0ibm8tcmVwZWF0IiBiYWNrZ3JvdW5kcG9zaXRpb249ImxlZnQgdG9wIiBiYWNrZ3JvdW5kYXR0YWNobWVudD0ic2Nyb2xsIiBib3JkZXJzaXplPSIxcHgiIGJvcmRlcmNvbG9yPSIjZTVlNGU0IiBwYWRkaW5nVG9wPSI2MHB4IiBwYWRkaW5nQm90dG9tPSIyMHB4Il1bb25lX2hhbGYgbGFzdD0ibm8iXVt5b3V0dWJlIGlkPSJLNzA4UTR6aXBFdyIgd2lkdGg9IjYwMCIgaGVpZ2h0PSIzMzgiIGF1dG9wbGF5PSJubyJdWy9vbmVfaGFsZl0NCltvbmVfaGFsZiBsYXN0PSJ5ZXMiXVt0aXRsZSBzaXplPSIyIl1DYWJhbGxvcyBkZSBjb21wZXRpY2nDs25bL3RpdGxlXQ0KSW50ZWdlciB0aW5jaWR1bnQgbmVxdWUgY29tbW9kbyBibGFuZGl0IGxvYm9ydGlzLiBEb25lYyB2ZXN0aWJ1bHVtIGVyb3Mgc2l0IGFtZXQgYW50ZSBjb25ndWUgbWFsZXN1YWRhIGV1IHZpdGFlIGxhY3VzLiBJbnRlZ2VyIGVnZXQgZWxpdCBtZXR1cy4gRG9uZWMgaW4gZG9sb3Igc2VkIHR1cnBpcyBjb25kaW1lbnR1bSBhbGlxdWFtLiBTZWQgdWx0cmljZXMgYWMgbGliZXJvIGV1IGx1Y3R1cy4gTnVsbGFtIHV0IGF1Y3RvciBhcmN1LCBub24gYWNjdW1zYW4gZWxpdC4gU2VkIHBvcnR0aXRvciBmcmluZ2lsbGEgbnVuYy4gVmVzdGlidWx1bSBwZWxsZW50ZXNxdWUgaWFjdWxpcyBlbGl0IGV1IHRpbmNpZHVudC4gSW50ZWdlciBub24gb3JuYXJlIG1hZ25hLCBzaXQgYW1ldCBydXRydW0gbmVxdWUuDQpbL29uZV9oYWxmXQ0KWy9mdWxsd2lkdGhdDQpbZnVsbHdpZHRoIGJvcmRlcnNpemU9IjAiXQ0KW3NlcGFyYXRvciB0b3A9IjQwIiBzdHlsZT0ic2hhZG93Il0NCltvbmVfdGhpcmQgbGFzdD0ibm8iXQ0KPGRpdiBjbGFzcz0icGhvdG8tZnJhbWUiPjxpbWcgY2xhc3M9IndwLWltYWdlIiBhbHQ9IlNlcnZpY2lvcyIgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL2hvcnNlLTAzLTEwMjR4NjU0LmpwZyIgLz48L2Rpdj4NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiXVtjb250ZW50X2JveCB0aXRsZT0iQ3LDrWEiXVsvY29udGVudF9ib3hdWy9jb250ZW50X2JveGVzXQ0KWy9vbmVfdGhpcmRdDQpbb25lX3RoaXJkIGxhc3Q9Im5vIl0NCjxkaXYgY2xhc3M9InBob3RvLWZyYW1lIj48aW1nIGNsYXNzPSJ3cC1pbWFnZSIgYWx0PSJTZXJ2aWNpb3MiIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi9ob3JzZS0wMjEtMTAyNHg2NTQuanBnIiAvPjwvZGl2Pg0KW2NvbnRlbnRfYm94ZXMgbGF5b3V0PSJpY29uLW9uLXRvcCJdW2NvbnRlbnRfYm94IHRpdGxlPSJDb21wZXRpY2nDs24iXVsvY29udGVudF9ib3hdWy9jb250ZW50X2JveGVzXQ0KWy9vbmVfdGhpcmRdDQpbb25lX3RoaXJkIGxhc3Q9InllcyJdDQo8ZGl2IGNsYXNzPSJwaG90by1mcmFtZSI+PGltZyBjbGFzcz0id3AtaW1hZ2UiIGFsdD0iU2VydmljaW9zIiBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvc3RhYmxlczEuanBnIiAvPjwvZGl2Pg0KW2NvbnRlbnRfYm94ZXMgbGF5b3V0PSJpY29uLW9uLXRvcCJdW2NvbnRlbnRfYm94IHRpdGxlPSJTZXJ2aWNpb3MiXVsvY29udGVudF9ib3hdWy9jb250ZW50X2JveGVzXQ0KWy9vbmVfdGhpcmRdDQpbL2Z1bGx3aWR0aF0NCltmdWxsd2lkdGggYm9yZGVyc2l6ZT0iMCJdDQpbY2xpZW50c11bY2xpZW50IGxpbms9IiMiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEzLzEwL2NsaWVudDEucG5nIl1bY2xpZW50IGxpbms9IiMiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEzLzEwL2NsaWVudDEucG5nIl1bY2xpZW50IGxpbms9IiMiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEzLzEwL2NsaWVudDEucG5nIl1bY2xpZW50IGxpbms9IiMiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEzLzEwL2NsaWVudDEucG5nIl1bY2xpZW50IGxpbms9IiMiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEzLzEwL2NsaWVudDEucG5nIl1bY2xpZW50IGxpbms9IiMiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEzLzEwL2NsaWVudDEucG5nIl1bL2NsaWVudHNdDQpbL2Z1bGx3aWR0aF0=', 'W3NlcGFyYXRvciB0b3A9Ii01NSJdDQpbZnVsbHdpZHRoIGJvcmRlcnNpemU9IjAiXQ0KDQpbL2Z1bGx3aWR0aF0NCg0KW2Z1bGx3aWR0aCBib3JkZXJzaXplPSIwIl0NCg0KJm5ic3A7DQoNClt0aXRsZSBzaXplPSIyIl1OdWVzdHJvcyBjYWJhbGxvc1svdGl0bGVdDQoNCltyZWNlbnRfd29ya3MgbGF5b3V0PSJncmlkLXdpdGgtZXhjZXJwdHMiIGZpbHRlcnM9Im5vIiBjb2x1bW5zPSI0IiBjYXRfc2x1Zz0iIiBudW1iZXJfcG9zdHM9IjQiIGV4Y2VycHRfd29yZHM9IjE1IiBhbmltYXRpb25fdHlwZT0iYm91bmNlIiBhbmltYXRpb25fZGlyZWN0aW9uPSJkb3duIiBhbmltYXRpb25fc3BlZWQ9IjAuMSJdWy9yZWNlbnRfd29ya3NdDQpbL2Z1bGx3aWR0aF0NCltmdWxsd2lkdGggYmFja2dyb3VuZGNvbG9yPSIjZjBmMGZmIiBiYWNrZ3JvdW5kaW1hZ2U9IiIgYmFja2dyb3VuZHJlcGVhdD0ibm8tcmVwZWF0IiBiYWNrZ3JvdW5kcG9zaXRpb249ImxlZnQgdG9wIiBiYWNrZ3JvdW5kYXR0YWNobWVudD0ic2Nyb2xsIiBib3JkZXJzaXplPSIxcHgiIGJvcmRlcmNvbG9yPSIjZTVlNGU0IiBwYWRkaW5nVG9wPSI2MHB4IiBwYWRkaW5nQm90dG9tPSIyMHB4Il1bb25lX2hhbGYgbGFzdD0ibm8iXVt5b3V0dWJlIGlkPSJLNzA4UTR6aXBFdyIgd2lkdGg9IjYwMCIgaGVpZ2h0PSIzMzgiIGF1dG9wbGF5PSJubyJdWy9vbmVfaGFsZl0NCltvbmVfaGFsZiBsYXN0PSJ5ZXMiXVt0aXRsZSBzaXplPSIyIl1DYWJhbGxvcyBkZSBjb21wZXRpY2nDs25bL3RpdGxlXQ0KSW50ZWdlciB0aW5jaWR1bnQgbmVxdWUgY29tbW9kbyBibGFuZGl0IGxvYm9ydGlzLiBEb25lYyB2ZXN0aWJ1bHVtIGVyb3Mgc2l0IGFtZXQgYW50ZSBjb25ndWUgbWFsZXN1YWRhIGV1IHZpdGFlIGxhY3VzLiBJbnRlZ2VyIGVnZXQgZWxpdCBtZXR1cy4gRG9uZWMgaW4gZG9sb3Igc2VkIHR1cnBpcyBjb25kaW1lbnR1bSBhbGlxdWFtLiBTZWQgdWx0cmljZXMgYWMgbGliZXJvIGV1IGx1Y3R1cy4gTnVsbGFtIHV0IGF1Y3RvciBhcmN1LCBub24gYWNjdW1zYW4gZWxpdC4gU2VkIHBvcnR0aXRvciBmcmluZ2lsbGEgbnVuYy4gVmVzdGlidWx1bSBwZWxsZW50ZXNxdWUgaWFjdWxpcyBlbGl0IGV1IHRpbmNpZHVudC4gSW50ZWdlciBub24gb3JuYXJlIG1hZ25hLCBzaXQgYW1ldCBydXRydW0gbmVxdWUuDQpbL29uZV9oYWxmXQ0KWy9mdWxsd2lkdGhdDQpbZnVsbHdpZHRoIGJvcmRlcnNpemU9IjAiXQ0KW3NlcGFyYXRvciB0b3A9IjQwIiBzdHlsZT0ic2hhZG93Il0NCltvbmVfdGhpcmQgbGFzdD0ibm8iXQ0KPGRpdiBjbGFzcz0icGhvdG8tZnJhbWUiPjxpbWcgY2xhc3M9IndwLWltYWdlIiBhbHQ9IlNlcnZpY2lvcyIgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL2hvcnNlLTAzLTEwMjR4NjU0LmpwZyIgLz48L2Rpdj4NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiXVtjb250ZW50X2JveCB0aXRsZT0iQ3LDrWEiXVsvY29udGVudF9ib3hdWy9jb250ZW50X2JveGVzXQ0KWy9vbmVfdGhpcmRdDQpbb25lX3RoaXJkIGxhc3Q9Im5vIl0NCjxkaXYgY2xhc3M9InBob3RvLWZyYW1lIj48aW1nIGNsYXNzPSJ3cC1pbWFnZSIgYWx0PSJTZXJ2aWNpb3MiIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi9ob3JzZS0wMjEtMTAyNHg2NTQuanBnIiAvPjwvZGl2Pg0KW2NvbnRlbnRfYm94ZXMgbGF5b3V0PSJpY29uLW9uLXRvcCJdW2NvbnRlbnRfYm94IHRpdGxlPSJDb21wZXRpY2nDs24iXVsvY29udGVudF9ib3hdWy9jb250ZW50X2JveGVzXQ0KWy9vbmVfdGhpcmRdDQpbb25lX3RoaXJkIGxhc3Q9InllcyJdDQo8ZGl2IGNsYXNzPSJwaG90by1mcmFtZSI+PGltZyBjbGFzcz0id3AtaW1hZ2UiIGFsdD0iU2VydmljaW9zIiBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvc3RhYmxlczEuanBnIiAvPjwvZGl2Pg0KW2NvbnRlbnRfYm94ZXMgbGF5b3V0PSJpY29uLW9uLXRvcCJdW2NvbnRlbnRfYm94IHRpdGxlPSJTZXJ2aWNpb3MiXVsvY29udGVudF9ib3hdWy9jb250ZW50X2JveGVzXQ0KWy9vbmVfdGhpcmRdDQpbL2Z1bGx3aWR0aF0NCltmdWxsd2lkdGggYm9yZGVyc2l6ZT0iMCJdDQpbY2xpZW50c11bY2xpZW50IGxpbms9IiMiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEzLzEwL2NsaWVudDEucG5nIl1bY2xpZW50IGxpbms9IiMiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEzLzEwL2NsaWVudDEucG5nIl1bY2xpZW50IGxpbms9IiMiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEzLzEwL2NsaWVudDEucG5nIl1bY2xpZW50IGxpbms9IiMiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEzLzEwL2NsaWVudDEucG5nIl1bY2xpZW50IGxpbms9IiMiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEzLzEwL2NsaWVudDEucG5nIl1bY2xpZW50IGxpbms9IiMiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEzLzEwL2NsaWVudDEucG5nIl1bL2NsaWVudHNdDQpbL2Z1bGx3aWR0aF0=', 1), +(109, 19, 0, '2014-02-28 13:03:04', 'original_id', '', 0, '4705', '', 1), +(110, 20, 0, '2014-02-28 13:06:59', 'title', 'base64', 1, 'SW5pY2lv', 'SW5pY2lv', 1), +(111, 20, 0, '2014-02-28 13:06:59', 'body', 'base64', 1, 'W3NlcGFyYXRvciB0b3A9Ii01NSJdDQpbZnVsbHdpZHRoIGJvcmRlcnNpemU9IjAiXQ0KDQpbdGl0bGUgc2l6ZT0iMiJdTnVlc3Ryb3MgY2FiYWxsb3NbL3RpdGxlXQ0KDQpbcmVjZW50X3dvcmtzIGxheW91dD0iZ3JpZC13aXRoLWV4Y2VycHRzIiBmaWx0ZXJzPSJubyIgY29sdW1ucz0iNCIgY2F0X3NsdWc9IiIgbnVtYmVyX3Bvc3RzPSI0IiBleGNlcnB0X3dvcmRzPSIxNSIgYW5pbWF0aW9uX3R5cGU9ImJvdW5jZSIgYW5pbWF0aW9uX2RpcmVjdGlvbj0iZG93biIgYW5pbWF0aW9uX3NwZWVkPSIwLjEiXVsvcmVjZW50X3dvcmtzXQ0KWy9mdWxsd2lkdGhdDQpbZnVsbHdpZHRoIGJhY2tncm91bmRjb2xvcj0iI2YwZjBmZiIgYmFja2dyb3VuZGltYWdlPSIiIGJhY2tncm91bmRyZXBlYXQ9Im5vLXJlcGVhdCIgYmFja2dyb3VuZHBvc2l0aW9uPSJsZWZ0IHRvcCIgYmFja2dyb3VuZGF0dGFjaG1lbnQ9InNjcm9sbCIgYm9yZGVyc2l6ZT0iMXB4IiBib3JkZXJjb2xvcj0iI2U1ZTRlNCIgcGFkZGluZ1RvcD0iNjBweCIgcGFkZGluZ0JvdHRvbT0iMjBweCJdW29uZV9oYWxmIGxhc3Q9Im5vIl1beW91dHViZSBpZD0iSzcwOFE0emlwRXciIHdpZHRoPSI2MDAiIGhlaWdodD0iMzM4IiBhdXRvcGxheT0ibm8iXVsvb25lX2hhbGZdDQpbb25lX2hhbGYgbGFzdD0ieWVzIl1bdGl0bGUgc2l6ZT0iMiJdQ2FiYWxsb3MgZGUgY29tcGV0aWNpw7NuWy90aXRsZV0NCkludGVnZXIgdGluY2lkdW50IG5lcXVlIGNvbW1vZG8gYmxhbmRpdCBsb2JvcnRpcy4gRG9uZWMgdmVzdGlidWx1bSBlcm9zIHNpdCBhbWV0IGFudGUgY29uZ3VlIG1hbGVzdWFkYSBldSB2aXRhZSBsYWN1cy4gSW50ZWdlciBlZ2V0IGVsaXQgbWV0dXMuIERvbmVjIGluIGRvbG9yIHNlZCB0dXJwaXMgY29uZGltZW50dW0gYWxpcXVhbS4gU2VkIHVsdHJpY2VzIGFjIGxpYmVybyBldSBsdWN0dXMuIE51bGxhbSB1dCBhdWN0b3IgYXJjdSwgbm9uIGFjY3Vtc2FuIGVsaXQuIFNlZCBwb3J0dGl0b3IgZnJpbmdpbGxhIG51bmMuIFZlc3RpYnVsdW0gcGVsbGVudGVzcXVlIGlhY3VsaXMgZWxpdCBldSB0aW5jaWR1bnQuIEludGVnZXIgbm9uIG9ybmFyZSBtYWduYSwgc2l0IGFtZXQgcnV0cnVtIG5lcXVlLg0KWy9vbmVfaGFsZl0NClsvZnVsbHdpZHRoXQ0KW2Z1bGx3aWR0aCBib3JkZXJzaXplPSIwIl0NCltzZXBhcmF0b3IgdG9wPSI0MCIgc3R5bGU9InNoYWRvdyJdDQpbb25lX3RoaXJkIGxhc3Q9Im5vIl0NCjxkaXYgY2xhc3M9InBob3RvLWZyYW1lIj48aW1nIGNsYXNzPSJ3cC1pbWFnZSIgYWx0PSJTZXJ2aWNpb3MiIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi9ob3JzZS0wMy0xMDI0eDY1NC5qcGciIC8+PC9kaXY+DQpbY29udGVudF9ib3hlcyBsYXlvdXQ9Imljb24tb24tdG9wIl1bY29udGVudF9ib3ggdGl0bGU9IkNyw61hIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KW29uZV90aGlyZCBsYXN0PSJubyJdDQo8ZGl2IGNsYXNzPSJwaG90by1mcmFtZSI+PGltZyBjbGFzcz0id3AtaW1hZ2UiIGFsdD0iU2VydmljaW9zIiBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvaG9yc2UtMDIxLTEwMjR4NjU0LmpwZyIgLz48L2Rpdj4NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiXVtjb250ZW50X2JveCB0aXRsZT0iQ29tcGV0aWNpw7NuIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KW29uZV90aGlyZCBsYXN0PSJ5ZXMiXQ0KPGRpdiBjbGFzcz0icGhvdG8tZnJhbWUiPjxpbWcgY2xhc3M9IndwLWltYWdlIiBhbHQ9IlNlcnZpY2lvcyIgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL3N0YWJsZXMxLmpwZyIgLz48L2Rpdj4NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiXVtjb250ZW50X2JveCB0aXRsZT0iU2VydmljaW9zIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KWy9mdWxsd2lkdGhdDQpbZnVsbHdpZHRoIGJvcmRlcnNpemU9IjAiXQ0KW2NsaWVudHNdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdWy9jbGllbnRzXQ0KWy9mdWxsd2lkdGhd', 'W3NlcGFyYXRvciB0b3A9Ii01NSJdDQpbZnVsbHdpZHRoIGJvcmRlcnNpemU9IjAiXQ0KDQpbdGl0bGUgc2l6ZT0iMiJdTnVlc3Ryb3MgY2FiYWxsb3NbL3RpdGxlXQ0KDQpbcmVjZW50X3dvcmtzIGxheW91dD0iZ3JpZC13aXRoLWV4Y2VycHRzIiBmaWx0ZXJzPSJubyIgY29sdW1ucz0iNCIgY2F0X3NsdWc9IiIgbnVtYmVyX3Bvc3RzPSI0IiBleGNlcnB0X3dvcmRzPSIxNSIgYW5pbWF0aW9uX3R5cGU9ImJvdW5jZSIgYW5pbWF0aW9uX2RpcmVjdGlvbj0iZG93biIgYW5pbWF0aW9uX3NwZWVkPSIwLjEiXVsvcmVjZW50X3dvcmtzXQ0KWy9mdWxsd2lkdGhdDQpbZnVsbHdpZHRoIGJhY2tncm91bmRjb2xvcj0iI2YwZjBmZiIgYmFja2dyb3VuZGltYWdlPSIiIGJhY2tncm91bmRyZXBlYXQ9Im5vLXJlcGVhdCIgYmFja2dyb3VuZHBvc2l0aW9uPSJsZWZ0IHRvcCIgYmFja2dyb3VuZGF0dGFjaG1lbnQ9InNjcm9sbCIgYm9yZGVyc2l6ZT0iMXB4IiBib3JkZXJjb2xvcj0iI2U1ZTRlNCIgcGFkZGluZ1RvcD0iNjBweCIgcGFkZGluZ0JvdHRvbT0iMjBweCJdW29uZV9oYWxmIGxhc3Q9Im5vIl1beW91dHViZSBpZD0iSzcwOFE0emlwRXciIHdpZHRoPSI2MDAiIGhlaWdodD0iMzM4IiBhdXRvcGxheT0ibm8iXVsvb25lX2hhbGZdDQpbb25lX2hhbGYgbGFzdD0ieWVzIl1bdGl0bGUgc2l6ZT0iMiJdQ2FiYWxsb3MgZGUgY29tcGV0aWNpw7NuWy90aXRsZV0NCkludGVnZXIgdGluY2lkdW50IG5lcXVlIGNvbW1vZG8gYmxhbmRpdCBsb2JvcnRpcy4gRG9uZWMgdmVzdGlidWx1bSBlcm9zIHNpdCBhbWV0IGFudGUgY29uZ3VlIG1hbGVzdWFkYSBldSB2aXRhZSBsYWN1cy4gSW50ZWdlciBlZ2V0IGVsaXQgbWV0dXMuIERvbmVjIGluIGRvbG9yIHNlZCB0dXJwaXMgY29uZGltZW50dW0gYWxpcXVhbS4gU2VkIHVsdHJpY2VzIGFjIGxpYmVybyBldSBsdWN0dXMuIE51bGxhbSB1dCBhdWN0b3IgYXJjdSwgbm9uIGFjY3Vtc2FuIGVsaXQuIFNlZCBwb3J0dGl0b3IgZnJpbmdpbGxhIG51bmMuIFZlc3RpYnVsdW0gcGVsbGVudGVzcXVlIGlhY3VsaXMgZWxpdCBldSB0aW5jaWR1bnQuIEludGVnZXIgbm9uIG9ybmFyZSBtYWduYSwgc2l0IGFtZXQgcnV0cnVtIG5lcXVlLg0KWy9vbmVfaGFsZl0NClsvZnVsbHdpZHRoXQ0KW2Z1bGx3aWR0aCBib3JkZXJzaXplPSIwIl0NCltzZXBhcmF0b3IgdG9wPSI0MCIgc3R5bGU9InNoYWRvdyJdDQpbb25lX3RoaXJkIGxhc3Q9Im5vIl0NCjxkaXYgY2xhc3M9InBob3RvLWZyYW1lIj48aW1nIGNsYXNzPSJ3cC1pbWFnZSIgYWx0PSJTZXJ2aWNpb3MiIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi9ob3JzZS0wMy0xMDI0eDY1NC5qcGciIC8+PC9kaXY+DQpbY29udGVudF9ib3hlcyBsYXlvdXQ9Imljb24tb24tdG9wIl1bY29udGVudF9ib3ggdGl0bGU9IkNyw61hIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KW29uZV90aGlyZCBsYXN0PSJubyJdDQo8ZGl2IGNsYXNzPSJwaG90by1mcmFtZSI+PGltZyBjbGFzcz0id3AtaW1hZ2UiIGFsdD0iU2VydmljaW9zIiBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvaG9yc2UtMDIxLTEwMjR4NjU0LmpwZyIgLz48L2Rpdj4NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiXVtjb250ZW50X2JveCB0aXRsZT0iQ29tcGV0aWNpw7NuIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KW29uZV90aGlyZCBsYXN0PSJ5ZXMiXQ0KPGRpdiBjbGFzcz0icGhvdG8tZnJhbWUiPjxpbWcgY2xhc3M9IndwLWltYWdlIiBhbHQ9IlNlcnZpY2lvcyIgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL3N0YWJsZXMxLmpwZyIgLz48L2Rpdj4NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiXVtjb250ZW50X2JveCB0aXRsZT0iU2VydmljaW9zIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KWy9mdWxsd2lkdGhdDQpbZnVsbHdpZHRoIGJvcmRlcnNpemU9IjAiXQ0KW2NsaWVudHNdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdWy9jbGllbnRzXQ0KWy9mdWxsd2lkdGhd', 1), +(112, 20, 0, '2014-02-28 13:06:59', 'original_id', '', 0, '4705', '', 1); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_translate_job` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_translate_job` ( + `job_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `rid` bigint(20) unsigned NOT NULL, + `translator_id` int(10) unsigned NOT NULL, + `translated` tinyint(3) unsigned NOT NULL DEFAULT '0', + `manager_id` int(10) unsigned NOT NULL, + `revision` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`job_id`), + KEY `rid` (`rid`,`translator_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_translate_job` +-- + +INSERT INTO `drgrp_icl_translate_job` (`job_id`, `rid`, `translator_id`, `translated`, `manager_id`, `revision`) VALUES +(1, 1, 1, 1, 1, 1), +(2, 2, 1, 1, 1, 1), +(3, 3, 1, 1, 1, 1), +(4, 3, 1, 1, 1, NULL), +(5, 4, 1, 1, 1, NULL), +(6, 5, 1, 1, 1, NULL), +(7, 6, 1, 1, 1, NULL), +(8, 7, 1, 1, 1, 1), +(9, 2, 1, 0, 1, NULL), +(10, 1, 1, 1, 1, NULL), +(11, 8, 1, 1, 1, NULL), +(12, 9, 1, 1, 1, NULL), +(13, 10, 1, 1, 1, NULL), +(14, 11, 1, 1, 1, NULL), +(15, 12, 1, 1, 1, NULL), +(16, 13, 1, 1, 1, NULL), +(17, 14, 1, 1, 1, NULL), +(18, 15, 1, 1, 1, NULL), +(19, 7, 1, 1, 1, 2), +(20, 7, 1, 1, 1, NULL); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_translations` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_translations` ( + `translation_id` bigint(20) NOT NULL AUTO_INCREMENT, + `element_type` varchar(36) NOT NULL DEFAULT 'post_post', + `element_id` bigint(20) DEFAULT NULL, + `trid` bigint(20) NOT NULL, + `language_code` varchar(7) NOT NULL, + `source_language_code` varchar(7) DEFAULT NULL, + PRIMARY KEY (`translation_id`), + UNIQUE KEY `trid_lang` (`trid`,`language_code`), + UNIQUE KEY `el_type_id` (`element_type`,`element_id`), + KEY `trid` (`trid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1752 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_translations` +-- + +INSERT INTO `drgrp_icl_translations` (`translation_id`, `element_type`, `element_id`, `trid`, `language_code`, `source_language_code`) VALUES +(1, 'post_avada_faq', 1876, 1876, 'es', NULL), +(2, 'post_avada_faq', 1877, 1877, 'es', NULL), +(3, 'post_avada_faq', 1878, 1878, 'es', NULL), +(4, 'post_avada_faq', 1879, 1879, 'es', NULL), +(5, 'post_avada_faq', 1880, 1880, 'es', NULL), +(6, 'post_avada_faq', 1881, 1881, 'es', NULL), +(7, 'post_avada_portfolio', 192, 192, 'es', NULL), +(8, 'post_avada_portfolio', 193, 193, 'es', NULL), +(9, 'post_avada_portfolio', 196, 196, 'es', NULL), +(10, 'post_avada_portfolio', 195, 195, 'es', NULL), +(11, 'post_avada_portfolio', 191, 191, 'es', NULL), +(12, 'post_avada_portfolio', 198, 198, 'es', NULL), +(13, 'post_nav_menu_item', 4697, 4697, 'es', NULL), +(1554, 'post_nav_menu_item', 4461, 5982, 'es', NULL), +(1566, 'post_nav_menu_item', 4462, 5994, 'es', NULL), +(1639, 'post_nav_menu_item', 5035, 6035, 'en', 'es'), +(1567, 'post_nav_menu_item', 4466, 5995, 'es', NULL), +(1543, 'post_nav_menu_item', 4467, 5971, 'es', NULL), +(1642, 'tax_nav_menu', 72, 6045, 'es', NULL), +(1509, 'post_nav_menu_item', 4469, 5937, 'es', NULL), +(1510, 'post_nav_menu_item', 4470, 5938, 'es', NULL), +(1513, 'post_nav_menu_item', 4471, 5941, 'es', NULL), +(1516, 'post_nav_menu_item', 4472, 5944, 'es', NULL), +(1519, 'post_nav_menu_item', 4473, 5947, 'es', NULL), +(1524, 'post_nav_menu_item', 4477, 5952, 'es', NULL), +(1525, 'post_nav_menu_item', 4478, 5953, 'es', NULL), +(1564, 'post_nav_menu_item', 4479, 5992, 'es', NULL), +(1638, 'post_nav_menu_item', 5034, 6034, 'en', 'es'), +(1637, 'post_page', 5031, 4671, 'en', 'es'), +(1636, 'post_page', 5027, 5678, 'en', 'es'), +(1635, 'post_page', 5023, 5338, 'en', 'es'), +(1632, 'post_nav_menu_item', 5020, 6033, 'en', 'es'), +(1631, 'tax_horse_categories', 71, 5806, 'en', 'es'), +(1633, 'post_nav_menu_item', 5021, 6036, 'en', 'es'), +(1523, 'post_nav_menu_item', 4487, 5951, 'es', NULL), +(1634, 'post_nav_menu_item', 5022, 6037, 'en', 'es'), +(1623, 'tax_nav_menu', 69, 4764, 'en', 'es'), +(1526, 'post_nav_menu_item', 4492, 5954, 'es', NULL), +(1527, 'post_nav_menu_item', 4493, 5955, 'es', NULL), +(1528, 'post_nav_menu_item', 4494, 5956, 'es', NULL), +(1529, 'post_nav_menu_item', 4495, 5957, 'es', NULL), +(1622, 'post_page', 5009, 4698, 'en', 'es'), +(1530, 'post_nav_menu_item', 4497, 5958, 'es', NULL), +(1619, 'post_drg_horse', 4994, 6044, 'es', NULL), +(1531, 'post_nav_menu_item', 4499, 5959, 'es', NULL), +(1617, 'post_drg_horse', 4990, 6043, 'es', NULL), +(1615, 'post_drg_horse', 4971, 6042, 'es', NULL), +(52, 'post_nav_menu_item', 4502, 4502, 'es', NULL), +(53, 'post_nav_menu_item', 4503, 4503, 'es', NULL), +(54, 'post_nav_menu_item', 4504, 4504, 'es', NULL), +(55, 'post_nav_menu_item', 4505, 4505, 'es', NULL), +(1532, 'post_nav_menu_item', 4506, 5960, 'es', NULL), +(1604, 'post_nav_menu_item', 4968, 6032, 'es', NULL), +(1534, 'post_nav_menu_item', 4509, 5962, 'es', NULL), +(1533, 'post_nav_menu_item', 4510, 5961, 'es', NULL), +(1562, 'post_nav_menu_item', 4511, 5990, 'es', NULL), +(1565, 'post_nav_menu_item', 4512, 5993, 'es', NULL), +(1609, 'post_nav_menu_item', 4967, 6037, 'es', NULL), +(1606, 'post_nav_menu_item', 4966, 6034, 'es', NULL), +(1607, 'post_nav_menu_item', 4965, 6035, 'es', NULL), +(1600, 'post_nav_menu_item', 4964, 6028, 'es', NULL), +(1537, 'post_nav_menu_item', 4517, 5965, 'es', NULL), +(1536, 'post_nav_menu_item', 4518, 5964, 'es', NULL), +(1535, 'post_nav_menu_item', 4519, 5963, 'es', NULL), +(1599, 'post_nav_menu_item', 4963, 6027, 'es', NULL), +(1598, 'post_nav_menu_item', 4962, 6026, 'es', NULL), +(1590, 'post_nav_menu_item', 4522, 6018, 'es', NULL), +(1589, 'post_nav_menu_item', 4523, 6017, 'es', NULL), +(1588, 'post_nav_menu_item', 4524, 6016, 'es', NULL), +(1586, 'post_nav_menu_item', 4525, 6014, 'es', NULL), +(1585, 'post_nav_menu_item', 4526, 6013, 'es', NULL), +(1584, 'post_nav_menu_item', 4527, 6012, 'es', NULL), +(1583, 'post_nav_menu_item', 4528, 6011, 'es', NULL), +(1582, 'post_nav_menu_item', 4529, 6010, 'es', NULL), +(1581, 'post_nav_menu_item', 4530, 6009, 'es', NULL), +(1580, 'post_nav_menu_item', 4531, 6008, 'es', NULL), +(1575, 'post_nav_menu_item', 4532, 6003, 'es', NULL), +(1576, 'post_nav_menu_item', 4533, 6004, 'es', NULL), +(1597, 'post_nav_menu_item', 4961, 6025, 'es', NULL), +(1594, 'post_nav_menu_item', 4535, 6022, 'es', NULL), +(1593, 'post_nav_menu_item', 4536, 6021, 'es', NULL), +(1592, 'post_nav_menu_item', 4537, 6020, 'es', NULL), +(1591, 'post_nav_menu_item', 4538, 6019, 'es', NULL), +(1577, 'post_nav_menu_item', 4539, 6005, 'es', NULL), +(1578, 'post_nav_menu_item', 4540, 6006, 'es', NULL), +(1579, 'post_nav_menu_item', 4541, 6007, 'es', NULL), +(1587, 'post_nav_menu_item', 4542, 6015, 'es', NULL), +(1539, 'post_nav_menu_item', 4543, 5967, 'es', NULL), +(1538, 'post_nav_menu_item', 4544, 5966, 'es', NULL), +(95, 'post_nav_menu_item', 4545, 4545, 'es', NULL), +(96, 'post_nav_menu_item', 4546, 4546, 'es', NULL), +(97, 'post_nav_menu_item', 4547, 4547, 'es', NULL), +(98, 'post_nav_menu_item', 4548, 4548, 'es', NULL), +(1558, 'post_nav_menu_item', 4549, 5986, 'es', NULL), +(1559, 'post_nav_menu_item', 4550, 5987, 'es', NULL), +(1557, 'post_nav_menu_item', 4551, 5985, 'es', NULL), +(1555, 'post_nav_menu_item', 4552, 5983, 'es', NULL), +(1512, 'post_nav_menu_item', 4553, 5940, 'es', NULL), +(1511, 'post_nav_menu_item', 4554, 5939, 'es', NULL), +(1556, 'post_nav_menu_item', 4555, 5984, 'es', NULL), +(1560, 'post_nav_menu_item', 4556, 5988, 'es', NULL), +(1561, 'post_nav_menu_item', 4557, 5989, 'es', NULL), +(1574, 'post_nav_menu_item', 4558, 6002, 'es', NULL), +(1573, 'post_nav_menu_item', 4559, 6001, 'es', NULL), +(1572, 'post_nav_menu_item', 4560, 6000, 'es', NULL), +(1571, 'post_nav_menu_item', 4561, 5999, 'es', NULL), +(1570, 'post_nav_menu_item', 4562, 5998, 'es', NULL), +(1569, 'post_nav_menu_item', 4563, 5997, 'es', NULL), +(1568, 'post_nav_menu_item', 4564, 5996, 'es', NULL), +(1548, 'post_nav_menu_item', 4565, 5976, 'es', NULL), +(1547, 'post_nav_menu_item', 4566, 5975, 'es', NULL), +(1546, 'post_nav_menu_item', 4567, 5974, 'es', NULL), +(1545, 'post_nav_menu_item', 4568, 5973, 'es', NULL), +(1640, 'post_nav_menu_item', 5036, 6038, 'en', 'es'), +(1641, 'post_page', 5037, 4849, 'en', 'es'), +(122, 'post_nav_menu_item', 4572, 4572, 'es', NULL), +(1552, 'post_nav_menu_item', 4573, 5980, 'es', NULL), +(1551, 'post_nav_menu_item', 4574, 5979, 'es', NULL), +(1550, 'post_nav_menu_item', 4575, 5978, 'es', NULL), +(1549, 'post_nav_menu_item', 4576, 5977, 'es', NULL), +(1563, 'post_nav_menu_item', 4577, 5991, 'es', NULL), +(1515, 'post_nav_menu_item', 4578, 5943, 'es', NULL), +(1514, 'post_nav_menu_item', 4579, 5942, 'es', NULL), +(1518, 'post_nav_menu_item', 4580, 5946, 'es', NULL), +(1517, 'post_nav_menu_item', 4581, 5945, 'es', NULL), +(1373, 'tax_horse_genders', 57, 5807, 'es', NULL), +(894, 'post_avada_portfolio', 4869, 5333, 'es', NULL), +(1687, 'post_attachment', 4883, 6086, 'es', NULL), +(1544, 'post_nav_menu_item', 4586, 5972, 'es', NULL), +(1553, 'post_nav_menu_item', 4587, 5981, 'es', NULL), +(1596, 'post_nav_menu_item', 4960, 6024, 'es', NULL), +(1595, 'post_nav_menu_item', 4959, 6023, 'es', NULL), +(140, 'post_nav_menu_item', 4590, 4590, 'es', NULL), +(141, 'post_nav_menu_item', 4591, 4591, 'es', NULL), +(1522, 'post_nav_menu_item', 4592, 5950, 'es', NULL), +(1521, 'post_nav_menu_item', 4593, 5949, 'es', NULL), +(1520, 'post_nav_menu_item', 4594, 5948, 'es', NULL), +(1605, 'post_nav_menu_item', 4694, 6033, 'es', NULL), +(1630, 'tax_horse_categories', 70, 5805, 'en', 'es'), +(1614, 'post_drg_horse', 4970, 6041, 'es', NULL), +(1608, 'post_nav_menu_item', 4699, 6036, 'es', NULL), +(1611, 'post_drg_horse', 4969, 6039, 'es', NULL), +(1610, 'post_nav_menu_item', 4693, 6038, 'es', NULL), +(151, 'post_options', 1348, 1348, 'es', NULL), +(152, 'post_options', 1394, 1394, 'es', NULL), +(153, 'post_options', 1395, 1395, 'es', NULL), +(154, 'post_options', 1396, 1396, 'es', NULL), +(155, 'post_options', 1397, 1397, 'es', NULL), +(156, 'post_options', 1398, 1398, 'es', NULL), +(157, 'post_options', 3088, 3088, 'es', NULL), +(158, 'post_options', 3522, 3522, 'es', NULL), +(159, 'post_options', 3523, 3523, 'es', NULL), +(160, 'post_options', 3605, 3605, 'es', NULL), +(161, 'post_options', 3606, 3606, 'es', NULL), +(162, 'post_options', 3607, 3607, 'es', NULL), +(163, 'post_options', 3806, 3806, 'es', NULL), +(164, 'post_options', 3807, 3807, 'es', NULL), +(165, 'post_options', 3808, 3808, 'es', NULL), +(166, 'post_options', 4, 4, 'es', NULL), +(167, 'post_options', 5, 5, 'es', NULL), +(168, 'post_options', 6, 6, 'es', NULL), +(169, 'post_options', 7, 7, 'es', NULL), +(170, 'post_options', 8, 8, 'es', NULL), +(171, 'post_options', 9, 9, 'es', NULL), +(172, 'post_options', 10, 10, 'es', NULL), +(173, 'post_options', 11, 11, 'es', NULL), +(174, 'post_options', 12, 12, 'es', NULL), +(175, 'post_options', 13, 13, 'es', NULL), +(176, 'post_options', 14, 14, 'es', NULL), +(177, 'post_page', 4474, 4474, 'es', NULL), +(178, 'post_page', 4475, 4475, 'es', NULL), +(179, 'post_page', 33, 33, 'es', NULL), +(180, 'post_page', 35, 35, 'es', NULL), +(181, 'post_page', 54, 54, 'es', NULL), +(182, 'post_page', 69, 69, 'es', NULL), +(183, 'post_page', 72, 72, 'es', NULL), +(184, 'post_page', 84, 84, 'es', NULL), +(1621, 'post_page', 5007, 5091, 'en', 'es'), +(186, 'post_page', 94, 94, 'es', NULL), +(187, 'post_page', 80, 80, 'es', NULL), +(188, 'post_page', 96, 96, 'es', NULL), +(189, 'post_page', 98, 98, 'es', NULL), +(190, 'post_page', 100, 100, 'es', NULL), +(191, 'post_page', 730, 730, 'es', NULL), +(192, 'post_page', 923, 923, 'es', NULL), +(193, 'post_page', 1290, 1290, 'es', NULL), +(194, 'post_page', 1298, 1298, 'es', NULL), +(195, 'post_page', 1345, 1345, 'es', NULL), +(196, 'post_page', 1522, 1522, 'es', NULL), +(197, 'post_page', 1693, 1693, 'es', NULL), +(198, 'post_page', 1862, 1862, 'es', NULL), +(199, 'post_page', 2291, 2291, 'es', NULL), +(200, 'post_page', 2300, 2300, 'es', NULL), +(201, 'post_page', 2318, 2318, 'es', NULL), +(202, 'post_page', 2367, 2367, 'es', NULL), +(203, 'post_page', 2398, 2398, 'es', NULL), +(204, 'post_page', 2466, 2466, 'es', NULL), +(205, 'post_page', 2660, 2660, 'es', NULL), +(206, 'post_page', 2712, 2712, 'es', NULL), +(207, 'post_page', 2745, 2745, 'es', NULL), +(208, 'post_page', 2776, 2776, 'es', NULL), +(209, 'post_page', 2803, 2803, 'es', NULL), +(210, 'post_page', 3073, 3073, 'es', NULL), +(211, 'post_page', 3089, 3089, 'es', NULL), +(212, 'post_page', 3474, 3474, 'es', NULL), +(213, 'post_page', 3492, 3492, 'es', NULL), +(214, 'post_page', 3494, 3494, 'es', NULL), +(215, 'post_page', 3496, 3496, 'es', NULL), +(216, 'post_page', 3524, 3524, 'es', NULL), +(217, 'post_page', 3526, 3526, 'es', NULL), +(218, 'post_page', 3528, 3528, 'es', NULL), +(219, 'post_page', 3530, 3530, 'es', NULL), +(220, 'post_page', 4204, 4204, 'es', NULL), +(221, 'post_page', 3539, 3539, 'es', NULL), +(222, 'post_page', 3610, 3610, 'es', NULL), +(223, 'post_page', 3628, 3628, 'es', NULL), +(224, 'post_page', 3638, 3638, 'es', NULL), +(225, 'post_page', 3652, 3652, 'es', NULL), +(226, 'post_page', 3655, 3655, 'es', NULL), +(227, 'post_page', 3658, 3658, 'es', NULL), +(228, 'post_page', 3660, 3660, 'es', NULL), +(229, 'post_page', 3662, 3662, 'es', NULL), +(230, 'post_page', 3664, 3664, 'es', NULL), +(231, 'post_page', 3670, 3670, 'es', NULL), +(232, 'post_page', 3678, 3678, 'es', NULL), +(233, 'post_page', 3697, 3697, 'es', NULL), +(234, 'post_page', 3698, 3698, 'es', NULL), +(235, 'post_page', 3699, 3699, 'es', NULL), +(236, 'post_page', 3700, 3700, 'es', NULL), +(237, 'post_page', 3705, 3705, 'es', NULL), +(238, 'post_page', 3713, 3713, 'es', NULL), +(239, 'post_page', 3717, 3717, 'es', NULL), +(240, 'post_page', 3719, 3719, 'es', NULL), +(241, 'post_page', 3721, 3721, 'es', NULL), +(242, 'post_page', 3723, 3723, 'es', NULL), +(243, 'post_page', 3725, 3725, 'es', NULL), +(244, 'post_page', 3727, 3727, 'es', NULL), +(245, 'post_page', 3729, 3729, 'es', NULL), +(246, 'post_page', 3731, 3731, 'es', NULL), +(247, 'post_page', 3733, 3733, 'es', NULL), +(248, 'post_page', 3735, 3735, 'es', NULL), +(249, 'post_page', 3737, 3737, 'es', NULL), +(250, 'post_page', 3739, 3739, 'es', NULL), +(251, 'post_page', 3741, 3741, 'es', NULL), +(252, 'post_page', 3743, 3743, 'es', NULL), +(253, 'post_page', 3745, 3745, 'es', NULL), +(254, 'post_page', 3747, 3747, 'es', NULL), +(255, 'post_page', 3749, 3749, 'es', NULL), +(256, 'post_page', 3751, 3751, 'es', NULL), +(257, 'post_page', 3754, 3754, 'es', NULL), +(258, 'post_page', 3756, 3756, 'es', NULL), +(259, 'post_page', 3813, 3813, 'es', NULL), +(260, 'post_page', 3815, 3815, 'es', NULL), +(261, 'post_page', 3846, 3846, 'es', NULL), +(262, 'post_page', 4097, 4097, 'es', NULL), +(263, 'post_page', 4098, 4098, 'es', NULL), +(264, 'post_page', 4099, 4099, 'es', NULL), +(265, 'post_page', 4100, 4100, 'es', NULL), +(266, 'post_page', 4101, 4101, 'es', NULL), +(267, 'post_page', 4102, 4102, 'es', NULL), +(268, 'post_page', 4103, 4103, 'es', NULL), +(269, 'post_page', 4104, 4104, 'es', NULL), +(270, 'post_page', 4105, 4105, 'es', NULL), +(271, 'post_page', 4106, 4106, 'es', NULL), +(272, 'post_page', 4107, 4107, 'es', NULL), +(273, 'post_page', 4120, 4120, 'es', NULL), +(274, 'post_page', 4126, 4126, 'es', NULL), +(275, 'post_page', 4138, 4138, 'es', NULL), +(276, 'post_page', 4140, 4140, 'es', NULL), +(277, 'post_page', 4142, 4142, 'es', NULL), +(278, 'post_page', 4144, 4144, 'es', NULL), +(279, 'post_page', 4146, 4146, 'es', NULL), +(280, 'post_page', 4148, 4148, 'es', NULL), +(281, 'post_page', 4150, 4150, 'es', NULL), +(282, 'post_page', 4169, 4169, 'es', NULL), +(283, 'post_page', 4172, 4172, 'es', NULL), +(284, 'post_page', 4356, 4356, 'es', NULL), +(285, 'post_page', 4427, 4427, 'es', NULL), +(286, 'post_page', 4442, 4442, 'es', NULL), +(287, 'post_page', 4476, 4476, 'es', NULL), +(288, 'post_page', 2, 2, 'es', NULL), +(289, 'post_page', 4623, 4623, 'es', NULL), +(290, 'post_page', 4671, 4671, 'es', NULL), +(291, 'post_page', 4698, 4698, 'es', NULL), +(292, 'post_post', 207, 207, 'es', NULL), +(293, 'post_post', 209, 209, 'es', NULL), +(294, 'post_post', 211, 211, 'es', NULL), +(295, 'post_post', 202, 202, 'es', NULL), +(296, 'post_post', 215, 215, 'es', NULL), +(297, 'post_post', 213, 213, 'es', NULL), +(298, 'post_post', 1, 1, 'es', NULL), +(299, 'post_slide', 3876, 3876, 'es', NULL), +(300, 'post_slide', 3877, 3877, 'es', NULL), +(301, 'post_slide', 3878, 3878, 'es', NULL), +(302, 'post_themefusion_elastic', 4052, 4052, 'es', NULL), +(303, 'post_themefusion_elastic', 4055, 4055, 'es', NULL), +(304, 'tax_category', 1, 4702, 'es', NULL), +(1368, 'post_post', 4939, 5802, 'es', NULL), +(1367, 'post_post', 4938, 5801, 'es', NULL), +(1366, 'post_page', 4937, 5800, 'es', NULL), +(1365, 'post_post', 4936, 5799, 'es', NULL), +(1654, 'post_post', 5045, 6056, 'es', NULL), +(1656, 'post_post', 5048, 6057, 'es', NULL), +(1658, 'post_post', 5051, 6058, 'es', NULL), +(1660, 'post_post', 5053, 6059, 'es', NULL), +(1684, 'post_attachment', 4880, 6083, 'es', NULL), +(1685, 'post_attachment', 4881, 6084, 'es', NULL), +(1686, 'post_attachment', 4882, 6085, 'es', NULL), +(318, 'tax_nav_menu', 32, 4756, 'es', NULL), +(319, 'tax_nav_menu', 33, 4757, 'es', NULL), +(320, 'tax_nav_menu', 34, 4758, 'es', NULL), +(321, 'tax_nav_menu', 40, 4764, 'es', NULL), +(323, 'tax_category', 41, 4702, 'en', 'es'), +(1376, 'tax_horse_genders', 60, 5808, 'en', 'es'), +(1375, 'tax_horse_genders', 59, 5808, 'es', NULL), +(1374, 'tax_horse_genders', 58, 5807, 'en', 'es'), +(1370, 'post_post', 4945, 5804, 'es', NULL), +(1371, 'tax_horse_categories', 56, 5805, 'es', NULL), +(1372, 'tax_horse_categories', 55, 5806, 'es', NULL), +(1651, 'post_nav_menu_item', 5043, 6054, 'es', NULL), +(1650, 'post_nav_menu_item', 5042, 6053, 'es', NULL), +(1649, 'post_nav_menu_item', 5041, 6052, 'es', NULL), +(1508, 'tax_horse_tags', 66, 5936, 'es', NULL), +(1541, 'post_nav_menu_item', 4958, 5969, 'es', NULL), +(1540, 'post_nav_menu_item', 4957, 5968, 'es', NULL), +(1385, 'post_drg_horse', 4955, 5813, 'es', NULL), +(1383, 'post_drg_horse', 4953, 5812, 'es', NULL), +(1381, 'post_drg_horse', 4951, 5811, 'es', NULL), +(1378, 'post_drg_horse', 4948, 5809, 'es', NULL), +(1379, 'post_drg_horse', 4950, 5810, 'es', NULL), +(1503, 'tax_horse_breeds', 61, 5931, 'es', NULL), +(343, 'tax_themefusion_es_groups', 20, 4786, 'es', NULL), +(344, 'tax_slide-page', 19, 4787, 'es', NULL), +(1680, 'post_attachment', 4876, 6079, 'es', NULL), +(1681, 'post_attachment', 4877, 6080, 'es', NULL), +(348, 'post_attachment', 3873, 4791, 'es', NULL), +(349, 'post_attachment', 3875, 4792, 'es', NULL), +(1682, 'post_attachment', 4878, 6081, 'es', NULL), +(1683, 'post_attachment', 4879, 6082, 'es', NULL), +(353, 'post_attachment', 3890, 4796, 'es', NULL), +(1674, 'post_attachment', 4848, 6073, 'es', NULL), +(1675, 'post_attachment', 4849, 6074, 'es', NULL), +(1676, 'post_attachment', 4850, 6075, 'es', NULL), +(1677, 'post_attachment', 4861, 6076, 'es', NULL), +(1678, 'post_attachment', 4862, 6077, 'es', NULL), +(1679, 'post_attachment', 4863, 6078, 'es', NULL), +(361, 'post_attachment', 3936, 4804, 'es', NULL), +(363, 'post_attachment', 3978, 4806, 'es', NULL), +(364, 'post_attachment', 4010, 4807, 'es', NULL), +(365, 'post_attachment', 4053, 4808, 'es', NULL), +(366, 'post_attachment', 4054, 4809, 'es', NULL), +(367, 'post_attachment', 4069, 4810, 'es', NULL), +(368, 'post_attachment', 4073, 4811, 'es', NULL), +(369, 'post_attachment', 4074, 4812, 'es', NULL), +(370, 'post_attachment', 4076, 4813, 'es', NULL), +(1661, 'post_attachment', 4708, 6060, 'es', NULL), +(1662, 'post_attachment', 4715, 6061, 'es', NULL), +(1663, 'post_attachment', 4716, 6062, 'es', NULL), +(1664, 'post_attachment', 4717, 6063, 'es', NULL), +(1665, 'post_attachment', 4718, 6064, 'es', NULL), +(1666, 'post_attachment', 4779, 6065, 'es', NULL), +(1667, 'post_attachment', 4808, 6066, 'es', NULL), +(1668, 'post_attachment', 4842, 6067, 'es', NULL), +(381, 'post_attachment', 4595, 4824, 'es', NULL), +(382, 'post_attachment', 4596, 4825, 'es', NULL), +(1669, 'post_attachment', 4843, 6068, 'es', NULL), +(1670, 'post_attachment', 4844, 6069, 'es', NULL), +(386, 'post_attachment', 4600, 4829, 'es', NULL), +(1671, 'post_attachment', 4845, 6070, 'es', NULL), +(388, 'post_attachment', 4602, 4831, 'es', NULL), +(389, 'post_attachment', 4603, 4832, 'es', NULL), +(390, 'post_attachment', 4604, 4833, 'es', NULL), +(1672, 'post_attachment', 4846, 6071, 'es', NULL), +(1673, 'post_attachment', 4847, 6072, 'es', NULL), +(394, 'post_attachment', 4612, 4837, 'es', NULL), +(395, 'post_attachment', 4618, 4838, 'es', NULL), +(396, 'post_attachment', 4619, 4839, 'es', NULL), +(397, 'post_attachment', 4621, 4840, 'es', NULL), +(398, 'post_attachment', 4622, 4841, 'es', NULL), +(399, 'post_attachment', 4628, 4842, 'es', NULL), +(400, 'post_attachment', 4655, 4843, 'es', NULL), +(401, 'post_attachment', 4686, 4844, 'es', NULL), +(402, 'post_attachment', 4687, 4845, 'es', NULL), +(403, 'post_attachment', 4688, 4846, 'es', NULL), +(1369, 'post_post', 4944, 5803, 'es', NULL), +(407, 'post_page', 4705, 4849, 'es', NULL), +(651, 'post_page', 4824, 5091, 'es', NULL), +(1620, 'post_page', 5005, 4623, 'en', 'es'), +(1542, 'post_nav_menu_item', 4867, 5970, 'es', NULL), +(1648, 'post_nav_menu_item', 5040, 6051, 'es', NULL), +(897, 'post_avada_portfolio', 4887, 5335, 'es', NULL), +(1688, 'post_attachment', 4884, 6087, 'es', NULL), +(1652, 'post_nav_menu_item', 5044, 6055, 'es', NULL), +(901, 'post_page', 4897, 5338, 'es', NULL), +(1242, 'post_page', 4899, 5678, 'es', NULL), +(1357, 'post_avada_portfolio', 4906, 5792, 'es', NULL), +(1359, 'post_avada_portfolio', 4917, 5793, 'es', NULL), +(1504, 'tax_horse_breeds', 62, 5932, 'es', NULL), +(1505, 'tax_horse_breeds', 63, 5933, 'es', NULL), +(1506, 'tax_horse_breeds', 64, 5934, 'es', NULL), +(1507, 'tax_horse_breeds', 65, 5935, 'es', NULL), +(1689, 'post_attachment', 4888, 6088, 'es', NULL), +(1690, 'post_attachment', 4907, 6089, 'es', NULL), +(1691, 'post_attachment', 4908, 6090, 'es', NULL), +(1692, 'post_attachment', 4909, 6091, 'es', NULL), +(1693, 'post_attachment', 4910, 6092, 'es', NULL), +(1694, 'post_attachment', 4919, 6093, 'es', NULL), +(1695, 'post_attachment', 4920, 6094, 'es', NULL), +(1696, 'post_attachment', 4921, 6095, 'es', NULL), +(1697, 'post_attachment', 4922, 6096, 'es', NULL), +(1698, 'post_attachment', 4923, 6097, 'es', NULL), +(1699, 'post_attachment', 4924, 6098, 'es', NULL), +(1700, 'post_attachment', 4925, 6099, 'es', NULL), +(1701, 'post_attachment', 4976, 6100, 'es', NULL), +(1702, 'post_attachment', 4977, 6101, 'es', NULL), +(1703, 'post_attachment', 4978, 6102, 'es', NULL), +(1704, 'post_attachment', 4979, 6103, 'es', NULL), +(1705, 'post_attachment', 4984, 6104, 'es', NULL), +(1706, 'post_attachment', 4985, 6105, 'es', NULL), +(1707, 'post_attachment', 4986, 6106, 'es', NULL), +(1708, 'post_attachment', 4987, 6107, 'es', NULL), +(1709, 'post_attachment', 4988, 6108, 'es', NULL), +(1710, 'post_attachment', 4992, 6109, 'es', NULL), +(1711, 'post_attachment', 4993, 6110, 'es', NULL), +(1712, 'post_attachment', 4995, 6111, 'es', NULL), +(1713, 'post_attachment', 4996, 6112, 'es', NULL), +(1714, 'post_attachment', 4997, 6113, 'es', NULL), +(1715, 'post_attachment', 4998, 6114, 'es', NULL), +(1716, 'post_attachment', 5000, 6115, 'es', NULL), +(1717, 'post_attachment', 5001, 6116, 'es', NULL), +(1718, 'post_attachment', 5002, 6117, 'es', NULL), +(1719, 'post_attachment', 5003, 6118, 'es', NULL), +(1720, 'post_attachment', 5047, 6119, 'es', NULL), +(1721, 'tax_nav_menu', 73, 6045, 'en', 'es'), +(1722, 'tax_horse_breeds', 74, 5933, 'en', 'es'), +(1723, 'post_drg_horse', 5073, 6044, 'en', 'es'), +(1724, 'tax_horse_categories', 48, 6120, 'en', NULL), +(1725, 'tax_horse_breeds', 75, 5935, 'en', 'es'), +(1726, 'tax_horse_genders', 41, 6121, 'en', NULL), +(1727, 'post_drg_horse', 5074, 6043, 'en', 'es'), +(1728, 'tax_horse_breeds', 76, 5932, 'en', 'es'), +(1729, 'tax_horse_genders', 43, 6122, 'en', NULL), +(1730, 'post_drg_horse', 5075, 6042, 'en', 'es'), +(1731, 'tax_horse_breeds', 77, 5931, 'en', 'es'), +(1732, 'post_drg_horse', 5076, 6041, 'en', 'es'), +(1733, 'tax_horse_breeds', 78, 5934, 'en', 'es'), +(1734, 'post_drg_horse', 5077, 5813, 'en', 'es'), +(1735, 'tax_horse_breeds', 53, 6123, 'en', NULL), +(1736, 'tax_horse_tags', 79, 5936, 'en', 'es'), +(1737, 'post_drg_horse', 5078, 5812, 'en', 'es'), +(1738, 'tax_horse_categories', 49, 6124, 'en', NULL), +(1739, 'tax_horse_breeds', 52, 6125, 'en', NULL), +(1740, 'post_drg_horse', 5079, 5811, 'en', 'es'), +(1741, 'post_drg_horse', 5080, 5809, 'en', 'es'), +(1742, 'post_nav_menu_item', 5081, 6051, 'en', 'es'), +(1743, 'post_nav_menu_item', 5082, 6052, 'en', 'es'), +(1744, 'post_nav_menu_item', 5083, 6053, 'en', 'es'), +(1745, 'post_nav_menu_item', 5084, 6054, 'en', 'es'), +(1746, 'post_nav_menu_item', 5085, 6055, 'en', 'es'), +(1747, 'post_post', 5090, 6126, 'es', NULL), +(1748, 'post_themefusion_elastic', 5094, 6127, 'es', NULL), +(1749, 'tax_themefusion_es_groups', 80, 6128, 'es', NULL); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_icl_translation_status` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_icl_translation_status` ( + `rid` bigint(20) NOT NULL AUTO_INCREMENT, + `translation_id` bigint(20) NOT NULL, + `status` tinyint(4) NOT NULL, + `translator_id` bigint(20) NOT NULL, + `needs_update` tinyint(4) NOT NULL, + `md5` varchar(32) NOT NULL, + `translation_service` varchar(16) NOT NULL, + `translation_package` text NOT NULL, + `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `links_fixed` tinyint(4) NOT NULL DEFAULT '0', + `_prevstate` longtext, + PRIMARY KEY (`rid`), + UNIQUE KEY `translation_id` (`translation_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_icl_translation_status` +-- + +INSERT INTO `drgrp_icl_translation_status` (`rid`, `translation_id`, `status`, `translator_id`, `needs_update`, `md5`, `translation_service`, `translation_package`, `timestamp`, `links_fixed`, `_prevstate`) VALUES +(1, 1620, 10, 1, 0, '794fdf80aa04ed996896cf963d02a7b8', 'local', 'a:2:{s:3:"url";s:44:"http://127.0.0.1:4001/wordpress?page_id=4623";s:8:"contents";a:3:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:12:"Tm9zb3Ryb3M=";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:6608:"W3NlcGFyYXRvciB0b3A9Ii01NSIgc3R5bGU9Im5vbmUiXQ0KW2Z1bGx3aWR0aCBib3JkZXJzaXplPSIwIiBwYWRkaW5nVG9wPSIyMHB4IiBwYWRkaW5nQm90dG9tPSIyMHB4IiBiYWNrZ3JvdW5kY29sb3I9IiNmOGY4ZjgiIGJvcmRlcnNpemU9IjFweCIgYm9yZGVyY29sb3I9IiNlNWU0ZTQiXQ0KW29uZV9oYWxmIGxhc3Q9Im5vIl0NCltzZXBhcmF0b3IgdG9wPSI1MCJdDQo8ZGl2IGNsYXNzPSJwaG90by1mcmFtZSI+PGltZyBjbGFzcz0id3AtaW1hZ2UiIGFsdD0iRXF1aXBvIiBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvZl9lcXVpcG8uanBnIiAvPjwvZGl2Pg0KWy9vbmVfaGFsZl0NCltvbmVfaGFsZiBsYXN0PSJ5ZXMiXQ0KW3RpdGxlIHNpemU9IjIiXUZpbG9zb2bDrWFbL3RpdGxlXQ0KTGlkIGVzdCBsYWJvcnVtIGRvbG8gcnVtZXMgZnVnYXRzIHVudHJhcy4gRXRoYXJ1bXMgc2VyIHF1aWRlbSByZXJ1bSBmYWNpbGlzIGRvbG9yZXMgbmVtaXMgb21uaXMgZnVnYXRzIHZpdGFlcyBuZW1vIG1pbmltYSByZXJ1bXMgdW5zZXJzIHNhZGlwcyBhbWV0cy4gU2VkIHV0IHBlcnNwaWNpYXRpcyB1bmRlIG9tbmlzIGlzdGUgbmF0dXMgZXJyb3Igc2l0IHZvbHVwdGF0ZW0gYWNjdXNhbnRpdW0gZG9sb3JlbXF1ZSBsYXVkYW50aXVtLCB0b3RhbSByZW0gYXBlcmlhbSwgZWFxdWUgaXBzYSBxdWFlIGFiIGlsbG8gaW52ZW50b3JlIHZlcml0YXRpcyBldCBxdWFzaSBhcmNoaXRlY3RvIGJlYXRhZSB2aXRhZSBkaWN0YSBzdW50IGV4cGxpY2Fiby4gTmVtbyBlbmltIGlwc2FtIHZvbHVwdGF0ZW0gcXVpYSB2b2x1cHRhcyBzaXQgYXNwZXJuYXR1ciBhdXQgb2RpdCBhdXQgZnVnaXQsIHNlZCBxdWlhIGNvbnNlcXV1bnR1ciBtYWduaSBkb2xvcmVzIGVvcyBxdWkgcmF0aW9uZSB2b2x1cHRhdGVtIHNlcXVpIG5lc2NpdW50Li4gTmVxdWUgcG9ycm8gcXVpc3F1YW0gZXN0LCBxdWkgZG9sb3JlbSBpcHN1bSBxdWlhIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciwgYWRpcGlzY2kgdmVsaXQsIHNlZCBxdWlhIG5vbiBudW1xdWFtIGVpdXMgbW9kaSB0ZW1wb3JhIGluY2lkdW50IHV0IGxhYm9yZSBkb2xvcmUgbWFnbm0gYWxpcXVhbSBxdWFlcmF0IHZvbHVwdGF0ZW0uDQpbL29uZV9oYWxmXQ0KWy9mdWxsd2lkdGhdDQoNCltzZXBhcmF0b3IgdG9wPSIyMCJdDQpbZnVsbHdpZHRoIGJhY2tncm91bmRjb2xvcj0iIiBiYWNrZ3JvdW5kaW1hZ2U9IiIgYmFja2dyb3VuZHJlcGVhdD0ibm8tcmVwZWF0IiBiYWNrZ3JvdW5kcG9zaXRpb249ImxlZnQgdG9wIiBiYWNrZ3JvdW5kYXR0YWNobWVudD0ic2Nyb2xsIiBib3JkZXJzaXplPSIwIiBib3JkZXJjb2xvcj0iI2U1ZTRlNCIgcGFkZGluZ1RvcD0iMHB4IiBwYWRkaW5nQm90dG9tPSIwcHgiXQ0KW3NlcGFyYXRvciB0b3A9IjEwIl0NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiIGljb25jb2xvcj0iIiBjaXJjbGVjb2xvcj0iIiBjaXJjbGVib3JkZXJjb2xvcj0iIiBiYWNrZ3JvdW5kY29sb3I9IiJdDQpbY29udGVudF9ib3ggdGl0bGU9Ik51ZXN0cmFzIGluc3RhbGFjaW9uZXMiIGljb249IiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvMS5qcGciIGltYWdlX3dpZHRoPSIzMDAiIGltYWdlX2hlaWdodD0iMjAwIiBsaW5rPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzLz9wYWdlX2lkPTQ2MjMjIiBsaW5rdGFyZ2V0PSJfc2VsZiIgbGlua3RleHQ9IiIgYW5pbWF0aW9uX3R5cGU9IjAiIGFuaW1hdGlvbl9kaXJlY3Rpb249ImRvd24iIGFuaW1hdGlvbl9zcGVlZD0iMC4xIl1FdGhhcnVtcyBzZXIgcXVpZGVtIHJlcnVtIGZhY2lsaXMgZG9sb3JlcyBuZW1pcyBvbW5pcyBmdWdhdHMgdml0YWVzIG5lbW8gbWluaW1hIHJlcnVtcyB1bnNlcnMgc2FkaXBzIGFtZXRzLlsvY29udGVudF9ib3hdDQoNCltjb250ZW50X2JveCB0aXRsZT0iQ3VpZGFkbyBkZSBsb3MgY2FiYWxsb3MiIGljb249IiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvaG9yc2UtMDMtMTAyNHg2NTQuanBnIiBpbWFnZV93aWR0aD0iMzAwIiBpbWFnZV9oZWlnaHQ9IjIwMCIgbGluaz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy8/cGFnZV9pZD00NjIzIyIgbGlua3RhcmdldD0iX3NlbGYiIGxpbmt0ZXh0PSIiIGFuaW1hdGlvbl90eXBlPSIwIiBhbmltYXRpb25fZGlyZWN0aW9uPSJkb3duIiBhbmltYXRpb25fc3BlZWQ9IjAuMSJdRXRoYXJ1bXMgc2VyIHF1aWRlbSByZXJ1bSBmYWNpbGlzIGRvbG9yZXMgbmVtaXMgb21uaXMgZnVnYXRzIHZpdGFlcyBuZW1vIG1pbmltYSByZXJ1bXMgdW5zZXJzIHNhZGlwcyBhbWV0cy5bL2NvbnRlbnRfYm94XQ0KDQpbY29udGVudF9ib3ggdGl0bGU9IlBlcnNvbmFsIGN1YWxpZmljYWRvIiBpY29uPSIiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL2hvcnNlLTAxMS0xMDI0eDY1NC5qcGciIGltYWdlX3dpZHRoPSIzMDAiIGltYWdlX2hlaWdodD0iMjAwIiBsaW5rPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzLz9wYWdlX2lkPTQ2MjMjIiBsaW5rdGFyZ2V0PSJfc2VsZiIgbGlua3RleHQ9IiIgYW5pbWF0aW9uX3R5cGU9IjAiIGFuaW1hdGlvbl9kaXJlY3Rpb249ImRvd24iIGFuaW1hdGlvbl9zcGVlZD0iMC4xIl1FdGhhcnVtcyBzZXIgcXVpZGVtIHJlcnVtIGZhY2lsaXMgZG9sb3JlcyBuZW1pcyBvbW5pcyBmdWdhdHMgdml0YWVzIG5lbW8gbWluaW1hIHJlcnVtcyB1bnNlcnMgc2FkaXBzIGFtZXRzLlsvY29udGVudF9ib3hdDQoNClsvY29udGVudF9ib3hlc10NCltzZXBhcmF0b3IgdG9wPSI1NSJdDQpbL2Z1bGx3aWR0aF0NCg0KW3NlcGFyYXRvciB0b3A9IjEwIl0NCltmdWxsd2lkdGggYmFja2dyb3VuZGNvbG9yPSIjZjhmOGY4IiBiYWNrZ3JvdW5kaW1hZ2U9IiIgYmFja2dyb3VuZHJlcGVhdD0ibm8tcmVwZWF0IiBiYWNrZ3JvdW5kcG9zaXRpb249ImxlZnQgdG9wIiBiYWNrZ3JvdW5kYXR0YWNobWVudD0ic2Nyb2xsIiBib3JkZXJzaXplPSIxcHgiIGJvcmRlcmNvbG9yPSIjZTVlNGU0IiBwYWRkaW5nVG9wPSIyMHB4IiBwYWRkaW5nQm90dG9tPSIyMHB4Il0NCltvbmVfdGhpcmQgbGFzdD0ibm8iXQ0KW3NlcGFyYXRvciB0b3A9IjUwIl0NCjxkaXYgY2xhc3M9InBob3RvLWZyYW1lIj48aW1nIGNsYXNzPSJhbGlnbm5vbmUgc2l6ZS1tZWRpdW0gd3AtaW1hZ2UtNDcxNyIgYWx0PSJob3JzZS0wMjEtMTAyNHg2NTQiIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi9ob3JzZS0wMjEtMTAyNHg2NTQtMzAweDE5MS5qcGciIHdpZHRoPSIzMDAiIGhlaWdodD0iMTkxIiAvPjwvZGl2Pg0KWy9vbmVfdGhpcmRdDQpbdHdvX3RoaXJkIGxhc3Q9InllcyJdDQpbdGl0bGUgc2l6ZT0iMyJdTnVlc3Ryb3Mgc2VtZW50YWxlc1svdGl0bGVdDQpOdWVzdHJvIG9iamV0aXZvIGVzIHRlbmVyIHVuIGdydXBvIGRlIHNlbWVudGFsZXMgY29tcGV0aXRpdm9zIGVuIGxhIGNvbXBldGljacOzbiBlIGludGVyZXNhbnRlIHBhcmEgbGEgY3LDrWEuIEludGVudGFtb3MgcXVlIGVsIHNlbWVudGFsIHNlYSBsbyBtw6FzIGNvbXBsZXRvIHBvc2libGUgcGFyYSBsb3MgY3JpYWRvcmVzLiBIZW1vcyBidXNjYWRvIGxvcyBzZW1lbnRhbGVzIGVudHJlIGxvcyBtZWpvcmVzIG9yw61nZW5lcywgc2llbXByZSBjb24gdW4gYnVlbiBmw61zaWNvIHkgYnVlbm9zIG1vdmltaWVudG9zIHF1ZSBwZXJtaXRhbiBxdWUgZWwgc2VtZW50YWwgdGVuZ2EgdW5hIGdyYW4gY2FwYWNpZGFkIHBhcmEgc2FsdGFyLg0KRHVyYW50ZSBsYSB0ZW1wb3JhZGEgZGUgY3VicmljaW9uZXMsIGxvcyBzZW1lbnRhbGVzIGNvbWJpbmFuIHN1cyB0YXJlYXMgZGUgcmVwcm9kdWNjacOzbiBjb24gbGEgY29tcGV0aWNpw7NuLCBlIGludGVudGFtb3Mgb2ZyZWNlciB1biBidWVuIHNlcnZpY2lvIGEgbG9zIGNyaWFkb3Jlcy4gUGFyYSBsYSBleHRyYWNjacOzbiB5IG1hbmlwdWxhY2nDs24gZGVsIHNlbWVuLCBsYSBZZWd1YWRhIENhbXBvcyBwb3NlZSBsYXMgw7psdGltYXMgdGVjbm9sb2fDrWFzIHF1ZSBub3MgcGVybWl0ZW4gZW52aWFyIHNlbWVuIGZyZXNjbyB5IGNvbmdlbGFkbyBhIGN1YWxxdWllciBwdW50byBkZSBFdXJvcGEgZW4gbWVub3MgZGUgMjQgaG9yYXMuDQpbL3R3b190aGlyZF0gDQpbc2VwYXJhdG9yIHRvcD0iNTUiXQ0KW29uZV90aGlyZCBsYXN0PSJubyJdDQpbc2VwYXJhdG9yIHRvcD0iNTAiXQ0KPGRpdiBjbGFzcz0icGhvdG8tZnJhbWUiPjxpbWcgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL2NhYmFsbG8teWVndWEtY29uLXN1LWNyaWEtby1wb3Ryby1iZWJlLWVxdWlub3MtMzAweDE4Ny5qcGciIGFsdD0iWWVndWEiIHdpZHRoPSIzMDAiIGhlaWdodD0iMTg3IiBjbGFzcz0iYWxpZ25ub25lIHNpemUtbWVkaXVtIHdwLWltYWdlLTUwNjgiIC8+PC9kaXY+DQpbL29uZV90aGlyZF0NClt0d29fdGhpcmQgbGFzdD0ieWVzIl0NClt0aXRsZSBzaXplPSIzIl1OdWVzdHJhcyB5ZWd1YXNbL3RpdGxlXQ0KUGFyYSBwb2RlciBjdW1wbGlyIG51ZXN0cm8gb2JqZXRpdm8sIHRvZGFzIGxhcyB5ZWd1YXMgaGFuIHNpZG8gc2VsZWNjaW9uYWRhcyBtdXkgY3VpZGFkb3NhbWVudGUgZW50cmUgbGFzIG1lam9yZXMgZmFtaWxpYXMgbWF0ZXJuYXMgcGFyYSBwcm9kdWNpciBwb3Ryb3MgcXVlIHNlcsOhbiBkZXN0aW5hZG9zIGEgY29tcGV0aXIgZW4gZWwgbcOheGltbyBuaXZlbCBpbnRlcm5hY2lvbmFsLg0KWy90d29fdGhpcmRdDQoNClsvZnVsbHdpZHRoXQ0KW3NlcGFyYXRvciB0b3A9Ii01NSJd";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4623;}}}', '2014-02-26 17:39:14', 0, NULL), +(2, 1621, 10, 1, 1, '3ad0e6303a0911fc8ada1761b7443db0', 'local', 'a:2:{s:3:"url";s:44:"http://127.0.0.1:4001/wordpress?page_id=4824";s:8:"contents";a:3:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:20:"SW5zdGFsYWNpb25lcw==";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:3532:"W3NlcGFyYXRvciB0b3A9Ii0yMCJdDQpbc2xpZGVyXVtzbGlkZV1odHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL1NhbnRheW5lei5qcGdbL3NsaWRlXVtzbGlkZV1odHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzAzX2Jhbm5lcmhvbWVfYWxsb3RqYW1lbnRfMi5qcGdbL3NsaWRlXVtzbGlkZV1odHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzA5X2Jhbm5lcmhvbWVfY2FiYWxsb18xLmpwZ1svc2xpZGVdWy9zbGlkZXJdDQpbc2VwYXJhdG9yIHRvcD0iLTMwIiBzdHlsZT0ibm9uZSJdDQo8c3Ryb25nPjxlbT5BIGNpZW4ga2lsw7NtZXRyb3MgZGUgTWFkcmlkIGVzdMOhbiBsYXMgaW5zdGFsYWNpb25lcyBkZSBEb3VibGUgUiBHcm91cC4gRW4gdW5hIGZpbmNhIGRlIHRyZWludGEgaGVjdMOhcmVhcyBkZXNhcnJvbGxhbW9zIGxhcyBhY3RpdmlkYWRlcyBkZSBjcsOtYSB5IGVudHJlbmFtaWVudG8gZGUgY2FiYWxsb3MgcGFyYSBsYSBhbHRhIGNvbXBldGljacOzbi48L2VtPjwvc3Ryb25nPg0KDQpbc2VwYXJhdG9yIHRvcD0iNTAiXQ0KDQpbdHdvX3RoaXJkIGxhc3Q9Im5vIl0NClt0aXRsZSBzaXplPSIzIl1Eb3RhY2lvbmVzWy90aXRsZV0NCg0KRG91YmxlIFIgR3JvdXAgdGllbmUgdG9kYSBsYSBpbmZyYWVzdHJ1Y3R1cmEgbmVjZXNhcmlhIHBhcmEgZWwgZGVzYXJyb2xsbyB5IGVsIGVudHJlbmFtaWVudG8gZGUgbG9zIGNhYmFsbG9zIGVuIHRvZGFzIHN1cyBmYXNlcw0KDQpbY2hlY2tsaXN0IGljb249ImNpcmNsZS1hcnJvdy1yaWdodCIgaWNvbmNvbG9yPSIzOTVCN0IiIGNpcmNsZT0ibm8iXQ0KPHVsPg0KCTxsaT5GaW5jYSBkZSBtw6FzIGRlIHRyZWludGEgaGVjdMOhcmVhcy48L2xpPg0KCTxsaT5QaXN0YXMgZGUgdHJhYmFqbyB5IHNhbHRvPC9saT4NCgk8bGk+UGlzdGFzIHBhcmEgZGFyIGN1ZXJkYTwvbGk+DQoJPGxpPlBpc3RhcyBkZSBnYWxvcGU8L2xpPg0KCTxsaT5DYW1pbmFkb3JlczwvbGk+DQoJPGxpPlN1ZWxvcyBkZSBjb25kaWNpb25lcyDDs3B0aW1hczwvbGk+DQo8L3VsPg0KWy9jaGVja2xpc3RdDQpbL3R3b190aGlyZF0NCg0KW29uZV90aGlyZCBsYXN0PSJ5ZXMiXQ0KW3RpdGxlIHNpemU9IjMiXUxvY2FsaXphY2nDs25bL3RpdGxlXQ0KPGlmcmFtZSBzcmM9Imh0dHBzOi8vbWFwcy5nb29nbGUuY29tL21hcHM/Zj1xJmFtcDtzb3VyY2U9c19xJmFtcDtobD1lbiZhbXA7Z2VvY29kZT0mYW1wO3E9Nzc1K05ldytZb3JrK0F2ZSwrQnJvb2tseW4sK0tpbmdzLCtOZXcrWW9yaysxMTIwMyZhbXA7YXE9JmFtcDtzbGw9MjcuNjk4NjM4LC04My44MDQ2MDEmYW1wO3NzcG49MjEuNzcwMTMxLDQ3Ljg3ODQxOCZhbXA7aWU9VVRGOCZhbXA7aHE9JmFtcDtobmVhcj03NzUrRStOZXcrWW9yaytBdmUsK0Jyb29rbHluLCtOZXcrWW9yaysxMTIwMyZhbXA7dD1tJmFtcDt6PTE0JmFtcDtsbD00MC42NjI0NDEsLTczLjkzNjkzNSZhbXA7b3V0cHV0PWVtYmVkIiBoZWlnaHQ9IjE1MCIgd2lkdGg9IjI4OCIgZnJhbWVib3JkZXI9IjAiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIHNjcm9sbGluZz0ibm8iPjwvaWZyYW1lPg0KPHNtYWxsPkluc3RhbGFjaW9uZXMgZW4gbGEgQ29tdW5pZGFkIGRlIE1hZHJpZDwvc21hbGw+DQpbL29uZV90aGlyZF0NCg0KW3NlcGFyYXRvciB0b3A9IjE1Il0NClt0aXRsZSBzaXplPSIzIl1JbcOhZ2VuZXMgZGUgbGFzIGluc3RhbGFjaW9uZXNbL3RpdGxlXQ0KDQpbaW1hZ2VzIGxpZ2h0Ym94PSJ5ZXMiXQ0KW2ltYWdlIGxpbms9IiIgbGlua3RhcmdldD0iX3NlbGYiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzEuanBnIiBhbHQ9IiJdDQpbaW1hZ2UgbGluaz0iIiBsaW5rdGFyZ2V0PSJfc2VsZiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvMi5qcGciIGFsdD0iIl0NCltpbWFnZSBsaW5rPSIiIGxpbmt0YXJnZXQ9Il9zZWxmIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi8zLmpwZyIgYWx0PSIiXQ0KW2ltYWdlIGxpbms9IiIgbGlua3RhcmdldD0iX3NlbGYiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzQuanBnIiBhbHQ9IiJdDQpbaW1hZ2UgbGluaz0iIiBsaW5rdGFyZ2V0PSJfc2VsZiIgaW1hZ2U9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvNS5qcGciIGFsdD0iIl0NCltpbWFnZSBsaW5rPSIiIGxpbmt0YXJnZXQ9Il9zZWxmIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi82LmpwZyIgYWx0PSIiXQ0KW2ltYWdlIGxpbms9IiIgbGlua3RhcmdldD0iX3NlbGYiIGltYWdlPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyLzcuanBnIiBhbHQ9IiJdDQpbL2ltYWdlc10=";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4824;}}}', '2014-02-26 17:40:26', 0, NULL), +(3, 1622, 10, 1, 0, 'c3cce63b58363e9bea5e3dd74afe6f7b', 'local', 'a:2:{s:3:"url";s:44:"http://127.0.0.1:4001/wordpress?page_id=4698";s:8:"contents";a:3:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:12:"Tm90aWNpYXM=";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:384:"W2Jsb2cgbnVtYmVyX3Bvc3RzPSI2IiBjYXRfc2x1Zz0iIiB0aXRsZT0ieWVzIiB0aHVtYm5haWw9InllcyIgZXhjZXJwdD0ieWVzIiBleGNlcnB0X3dvcmRzPSI1NSIgbWV0YV9hbGw9InllcyIgbWV0YV9hdXRob3I9Im5vIiBtZXRhX2NhdGVnb3JpZXM9InllcyIgbWV0YV9jb21tZW50cz0ibm8iIG1ldGFfZGF0ZT0ieWVzIiBtZXRhX2xpbms9InllcyIgcGFnaW5nPSJ5ZXMiIHNjcm9sbGluZz0icGFnaW5hdGlvbiIgc3RyaXBfaHRtbD0ieWVzIiBsYXlvdXQ9ImxhcmdlLWFsdGVybmF0ZSJdWy9ibG9nXQ==";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4698;}}}', '2014-02-26 17:49:53', 0, NULL), +(4, 1635, 10, 1, 0, '075d436ad95e14d495c2dafeb13144da', 'local', 'a:2:{s:3:"url";s:44:"http://127.0.0.1:4001/wordpress?page_id=4897";s:8:"contents";a:3:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:8:"Q3LDrWE=";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:0:"";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4897;}}}', '2014-02-26 17:59:39', 0, NULL), +(5, 1636, 10, 1, 0, '2fe91b50e60a69b3392622461104223c', 'local', 'a:2:{s:3:"url";s:44:"http://127.0.0.1:4001/wordpress?page_id=4899";s:8:"contents";a:3:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:16:"Q29tcGV0aWNpw7Nu";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:0:"";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4899;}}}', '2014-02-26 18:00:21', 0, NULL), +(6, 1637, 10, 1, 0, 'ffa5fcef5b7eb72b524151914517bc39', 'local', 'a:2:{s:3:"url";s:44:"http://127.0.0.1:4001/wordpress?page_id=4671";s:8:"contents";a:3:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:12:"Q29udGFjdG8=";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:1424:"W3R3b190aGlyZCBsYXN0PSJubyJdDQpbdGl0bGUgc2l6ZT0iMyJdRm9ybXVsYXJpbyBkZSBjb250YWN0b1svdGl0bGVdDQpbZ3Jhdml0eWZvcm0gaWQ9IjEiIG5hbWU9IkNvbnRhY3RvIiBhamF4PSJ0cnVlIiB0aXRsZT0iZmFsc2UiXQ0KWy90d29fdGhpcmRdDQpbb25lX3RoaXJkIGxhc3Q9InllcyJdDQpbdGl0bGUgc2l6ZT0iMyJdRG91YmxlIFIgR3JvdXBbL3RpdGxlXQ0KPHA+W2ZvbnRhd2Vzb21lIGljb249Im1hcC1tYXJrZXIiIGNpcmNsZT0ibm8iIHNpemU9Im1lZGl1bSIgaWNvbmNvbG9yPSIjMjk1ZTgxIiBjaXJjbGVjb2xvcj0iIiBjaXJjbGVib3JkZXJjb2xvcj0iIiBhbmltYXRpb25fdHlwZT0iMCIgYW5pbWF0aW9uX2RpcmVjdGlvbj0iZG93biIgYW5pbWF0aW9uX3NwZWVkPSIwLjEiXSBDYWxsZSBkZSBBbG1hZ3JvLCAyMSwgMjgwMTAgTWFkcmlkPC9wPg0KPHA+W2ZvbnRhd2Vzb21lIGljb249InBob25lIiBjaXJjbGU9Im5vIiBzaXplPSJtZWRpdW0iIGljb25jb2xvcj0iIzI5NWU4MSIgY2lyY2xlY29sb3I9IiIgY2lyY2xlYm9yZGVyY29sb3I9IiIgYW5pbWF0aW9uX3R5cGU9IjAiIGFuaW1hdGlvbl9kaXJlY3Rpb249ImRvd24iIGFuaW1hdGlvbl9zcGVlZD0iMC4xIl0rMzQgNjE5IDY4NiA2MzM8L3A+DQo8cD5bZm9udGF3ZXNvbWUgaWNvbj0iZW52ZWxvcGUiIGNpcmNsZT0ibm8iIHNpemU9Im1lZGl1bSIgaWNvbmNvbG9yPSIjMjk1ZTgxIiBjaXJjbGVjb2xvcj0iIiBjaXJjbGVib3JkZXJjb2xvcj0iIiBhbmltYXRpb25fdHlwZT0iMCIgYW5pbWF0aW9uX2RpcmVjdGlvbj0iZG93biIgYW5pbWF0aW9uX3NwZWVkPSIwLjEiXWluZm9AZG91Ymxlcmdyb3VwLmNvbTwvcD4NCjxwPltmb250YXdlc29tZSBpY29uPSJnbG9iZSIgY2lyY2xlPSJubyIgc2l6ZT0ibWVkaXVtIiBpY29uY29sb3I9IiMyOTVlODEiIGNpcmNsZWNvbG9yPSIiIGNpcmNsZWJvcmRlcmNvbG9yPSIiIGFuaW1hdGlvbl90eXBlPSIwIiBhbmltYXRpb25fZGlyZWN0aW9uPSJkb3duIiBhbmltYXRpb25fc3BlZWQ9IjAuMSJdd3d3LmRvdWJsZXJncm91cC5jb208L3A+DQpbL29uZV90aGlyZF0NCg==";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4671;}}}', '2014-02-26 18:01:28', 0, NULL), +(7, 1641, 9, 1, 0, 'c1ddd4dd4776539754f3fc2c1bb8229c', 'local', 'a:2:{s:3:"url";s:44:"http://127.0.0.1:4001/wordpress?page_id=4705";s:8:"contents";a:3:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:8:"SW5pY2lv";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:3640:"W3NlcGFyYXRvciB0b3A9Ii01NSJdDQpbZnVsbHdpZHRoIGJvcmRlcnNpemU9IjAiXQ0KDQpbdGl0bGUgc2l6ZT0iMiJdTnVlc3Ryb3MgY2FiYWxsb3NbL3RpdGxlXQ0KDQpbcmVjZW50X3dvcmtzIGxheW91dD0iZ3JpZC13aXRoLWV4Y2VycHRzIiBmaWx0ZXJzPSJubyIgY29sdW1ucz0iNCIgY2F0X3NsdWc9IiIgbnVtYmVyX3Bvc3RzPSI0IiBleGNlcnB0X3dvcmRzPSIxNSIgYW5pbWF0aW9uX3R5cGU9ImJvdW5jZSIgYW5pbWF0aW9uX2RpcmVjdGlvbj0iZG93biIgYW5pbWF0aW9uX3NwZWVkPSIwLjEiXVsvcmVjZW50X3dvcmtzXQ0KWy9mdWxsd2lkdGhdDQpbZnVsbHdpZHRoIGJhY2tncm91bmRjb2xvcj0iI2YwZjBmZiIgYmFja2dyb3VuZGltYWdlPSIiIGJhY2tncm91bmRyZXBlYXQ9Im5vLXJlcGVhdCIgYmFja2dyb3VuZHBvc2l0aW9uPSJsZWZ0IHRvcCIgYmFja2dyb3VuZGF0dGFjaG1lbnQ9InNjcm9sbCIgYm9yZGVyc2l6ZT0iMXB4IiBib3JkZXJjb2xvcj0iI2U1ZTRlNCIgcGFkZGluZ1RvcD0iNjBweCIgcGFkZGluZ0JvdHRvbT0iMjBweCJdW29uZV9oYWxmIGxhc3Q9Im5vIl1beW91dHViZSBpZD0iSzcwOFE0emlwRXciIHdpZHRoPSI2MDAiIGhlaWdodD0iMzM4IiBhdXRvcGxheT0ibm8iXVsvb25lX2hhbGZdDQpbb25lX2hhbGYgbGFzdD0ieWVzIl1bdGl0bGUgc2l6ZT0iMiJdQ2FiYWxsb3MgZGUgY29tcGV0aWNpw7NuWy90aXRsZV0NCkludGVnZXIgdGluY2lkdW50IG5lcXVlIGNvbW1vZG8gYmxhbmRpdCBsb2JvcnRpcy4gRG9uZWMgdmVzdGlidWx1bSBlcm9zIHNpdCBhbWV0IGFudGUgY29uZ3VlIG1hbGVzdWFkYSBldSB2aXRhZSBsYWN1cy4gSW50ZWdlciBlZ2V0IGVsaXQgbWV0dXMuIERvbmVjIGluIGRvbG9yIHNlZCB0dXJwaXMgY29uZGltZW50dW0gYWxpcXVhbS4gU2VkIHVsdHJpY2VzIGFjIGxpYmVybyBldSBsdWN0dXMuIE51bGxhbSB1dCBhdWN0b3IgYXJjdSwgbm9uIGFjY3Vtc2FuIGVsaXQuIFNlZCBwb3J0dGl0b3IgZnJpbmdpbGxhIG51bmMuIFZlc3RpYnVsdW0gcGVsbGVudGVzcXVlIGlhY3VsaXMgZWxpdCBldSB0aW5jaWR1bnQuIEludGVnZXIgbm9uIG9ybmFyZSBtYWduYSwgc2l0IGFtZXQgcnV0cnVtIG5lcXVlLg0KWy9vbmVfaGFsZl0NClsvZnVsbHdpZHRoXQ0KW2Z1bGx3aWR0aCBib3JkZXJzaXplPSIwIl0NCltzZXBhcmF0b3IgdG9wPSI0MCIgc3R5bGU9InNoYWRvdyJdDQpbb25lX3RoaXJkIGxhc3Q9Im5vIl0NCjxkaXYgY2xhc3M9InBob3RvLWZyYW1lIj48aW1nIGNsYXNzPSJ3cC1pbWFnZSIgYWx0PSJTZXJ2aWNpb3MiIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMi9ob3JzZS0wMy0xMDI0eDY1NC5qcGciIC8+PC9kaXY+DQpbY29udGVudF9ib3hlcyBsYXlvdXQ9Imljb24tb24tdG9wIl1bY29udGVudF9ib3ggdGl0bGU9IkNyw61hIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KW29uZV90aGlyZCBsYXN0PSJubyJdDQo8ZGl2IGNsYXNzPSJwaG90by1mcmFtZSI+PGltZyBjbGFzcz0id3AtaW1hZ2UiIGFsdD0iU2VydmljaW9zIiBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6NDAwMS93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMDIvaG9yc2UtMDIxLTEwMjR4NjU0LmpwZyIgLz48L2Rpdj4NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiXVtjb250ZW50X2JveCB0aXRsZT0iQ29tcGV0aWNpw7NuIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KW29uZV90aGlyZCBsYXN0PSJ5ZXMiXQ0KPGRpdiBjbGFzcz0icGhvdG8tZnJhbWUiPjxpbWcgY2xhc3M9IndwLWltYWdlIiBhbHQ9IlNlcnZpY2lvcyIgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjQwMDEvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzAyL3N0YWJsZXMxLmpwZyIgLz48L2Rpdj4NCltjb250ZW50X2JveGVzIGxheW91dD0iaWNvbi1vbi10b3AiXVtjb250ZW50X2JveCB0aXRsZT0iU2VydmljaW9zIl1bL2NvbnRlbnRfYm94XVsvY29udGVudF9ib3hlc10NClsvb25lX3RoaXJkXQ0KWy9mdWxsd2lkdGhdDQpbZnVsbHdpZHRoIGJvcmRlcnNpemU9IjAiXQ0KW2NsaWVudHNdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdW2NsaWVudCBsaW5rPSIjIiBpbWFnZT0iaHR0cDovLzEyNy4wLjAuMTo0MDAxL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMC9jbGllbnQxLnBuZyJdWy9jbGllbnRzXQ0KWy9mdWxsd2lkdGhd";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4705;}}}', '2014-02-26 18:08:59', 0, NULL), +(8, 1723, 9, 1, 0, '3b8b330cdb85b34c4c58c409ded74c28', 'local', 'a:2:{s:3:"url";s:38:"http://127.0.0.1:4001/wordpress?p=4994";s:8:"contents";a:9:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:12:"WmluZWRpbmU=";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:3272:"PGg0PktXUE4gLSBjaGVzdG51dCAtIDIwMDQgLSAxNiwyIGhhbmRzPC9oND4NCg0KQXBwcm92ZWQgZm9yOiBXZXN0ZmFsZW4sIFJoZWlubGFuZCwgT1MsIEhhbm5vdmVyLCBhbGxlIHPDvGRkZXV0c2NoZW4gVmVyYsOkbmRlLiBPdGhlciB2ZXJiYW5kcyBvbiByZXF1ZXN0Lg0KSW5zZW1pbmF0aW9uIGZlZTogMTAwMOKCrCogKyBJbi1mb2FsIGZlZTogMTAwMOKCrCogKEZTK1RHKQ0KRm9yZWlnbiBjdXN0b21lcnMgbXVzdCBwYXkgZnVsbCBzdHVkIGZlZSBpbiBhZHZhbmNlLiBSZWZ1bmQgb2YgdGhlIGhhbGYgYXQgbm9uLXByZWduYW5jeQ0KDQoyMDEyIGVpZ2h0aCBpbiBoaXMgZmlyc3QgV29ybGQgQ3VwIGluIFN0dXR0Z2FydCBhZnRlciB3aW5uaW5nIGEgbnVtYmVyIG9mIHRlc3RzIGluIHRoZSBpbnRlcm5hdGlvbmFsIFlvdW5nc3RlciBUb3VyLiBQbGFjZWQgaW4gMjAxMywgYXMgYSBuaW5lLXllYXIgb2xkLCBhbW9uZyB0aGUgYmVzdCBpbiBDaGFudGlsbHkvRlJBLCBOZXVtw7xuc3Rlci9HRVIsIEFhY2hlbi9HRVIgYW5kIGBzIEhlcnRvZ2VuYm9zY2gvTkVELiBIaXMgc2lyZSBHdWlkYW0gKGJ5IFF1aWRhbSBkZSBSZXZlbCkgcHJvZHVjZWQgbWFueSBjaGFtcGlvbnNoaXAgb2Zmc3ByaW5nLiBEYW1gcyBzaXJlIEhlYXJ0YnJlYWtlciBpcyB0aGUgZm91cnRoLWJlc3QtanVtcGVyLW1ha2VyLiANCg0KW3RpdGxlIHNpemU9IjMiXVByb2dlbnlbL3RpdGxlXQ0KDQpGbG9yZW5jaWFub+KAmXMgZGVidXQgYXMgYSBzaXJlIHdhcyBicmlsbGlhbnQuIEluIGtlZXBpbmcgd2l0aCBoaXMgb3V0c3RhbmRpbmcgZmlyc3QgZm9hbCBjcm9wcywgaGlzIGRhdWdodGVyIEZlaW5lIFJvc2EgdG9vayB0aGUgMjAxMSBDaGFtcGlvbiBNYXJlIHRpdGxlIGF0IHRoZSBHZXJtYW4gRWxpdGUgQnJvb2RtYXJlIENoYW1waW9uc2hpcHMgYXMgd2VsbCBhcyB0aGUgUmhpbmVsYW5kIENoYW1waW9uIE1hcmUgdGl0bGUsIGhpcyBkYXVnaHRlciBGbG9yZW5jaWFuYSBGIGJlY2FtZSB0aGUgV2VzdHBoYWxpYW4gQ2hhbXBpb24gTWFyZSBhbmQgaGlzIGRhdWdodGVyIEZvciBDb210ZXNzIHdvbiB0aGUgV2VzdHBoYWxpYW4gQ2hhbXBpb25zaGlwcywgdGhlIFdlc3RwaGFsaWFuIFdhcHBlbiBhbmQgYWxzbyBwYXJ0aWNpcGF0ZWQgaW4gdGhlIEJ1bmRlc2NoYW1waW9uYXQgRmluYWwuIFRocmVlIG9mIGhpcyBzb25zIHdlcmUgbGljZW5zZWQsIGluY2x1ZGluZyB0aGUgMjAxMiBOUlcgcHJlbWl1bSBzdGFsbGlvbiwgRmFyYmVuc3BpZWwuIEhpcyBvZmZzcHJpbmcgYXJlIG9mZiB0byBhIGhpZ2hseSBwcm9taXNpbmcgc3RhcnQgaW4gYmFzaWMgdGVzdHMgZm9yIHlvdW5nc3RlcnMuIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUGVkaWdyZWVbL3RpdGxlXQ0KDQpIaXMgc2lyZSBpcyB0aGUgdHdvLXRpbWUgV29ybGQgQ2hhbXBpb24gb2YgeW91bmcgZHJlc3NhZ2UgaG9yc2VzLCBGbG9yZW5jaW8gSS4NCg0KRmxvcmVuY2lhbm/igJlzIGhpZ2hseSBkZWNvcmF0ZWQgZGFtIGxpbmUgb3JpZ2luYXRlZCBpbiB0aGUgTmV0aGVybGFuZHMuIEhpcyBkYW0gU3QuUHIuU3QuIEx1bmRpIFQgd29uIGVpZ2h0IG1lZGl1bSAoTSkgbGV2ZWwgZHJlc3NhZ2UgdGVzdHMgYW5kIHJlY2VpdmVkIOKAnHBlcmZvcm1hbmNlIG1hcmUgZHJlc3NhZ2XigJ0gc3RhdHVzLiAgVGhlIGRhbeKAmXMgc2lyZSBIYXZpZG9mZiwgYnkgdGhlIEdyYW5kIFByaXggc3RhbGxpb24gQ2xhdmVjaW1iZWwsIHdhcyBhd2FyZGVkIOKAnGtldXLigJ0gc3RhdHVzLiBNYW55IG9mIGhpcyBvZmZzcHJpbmcgd2luIHJpYmJvbnMgYXQgR3JhbmQgUHJpeCBsZXZlbCBzdWNoIGFzIGhpcyBsaWNlbnNlZCBzb24sIFBhZ2FuaW5pLiBHcmFuZGRhbSBBbnVza2EgcHJvZHVjZWQgc2V2ZXJhbCBob3JzZXMgdGhhdCB3ZXJlIHN1Y2Nlc3NmdWwgaW4gZHJlc3NhZ2UgcmluZ3MuIA0KDQpUaGUgcGVyZm9ybWFuY2UgZG9taW5hdGUgZGFtIGxpbmUgYWxzbyBwcm9kdWNlZCB0aGUgbGljZW5zZWQgWm/Dtmxvb2cgKGJ5IEdvbmRvbGllcikgd2hvIGhhcyBwbGFjZWQgaW4gaW50ZXJuYXRpb25hbCBkcmVzc2FnZSBjb21wZXRpdGlvbnMsIHRoZSB3b3JsZCBjbGFzcyBzaG93IGp1bXBlciBNaXN0ZXIgU3Bvb24gKGJ5IFphZG9jKS9DYW5kaWNlIEtpbmcvVVNBIGFuZCBOaWV0amUgKGJ5IFppZWhpbSksIHdobyB0b29rIGdvbGQgb24gdGhlIER1dGNoIHRlYW0gYXQgdGhlIDIwMDYgV29ybGQgRXF1ZXN0cmlhbiBHYW1lcyBpbiBBYWNoZW4gaW4gS29vcyBkZSBSb25kZeKAmXMgZHJpdmluZyB0ZWFtIG9mIGZvdXIgYXMgd2VsbCBhcyBtYW55IFN0YXRlIFByZW1pdW0gbWFyZXMgYW5kIGF1Y3Rpb24gaG9yc2VzLg0KDQo8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Ii8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL0dQM3ExREJxRjlZIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4994;}s:16:"horse_categories";a:3:{s:9:"translate";i:1;s:4:"data";s:18:""Q29tcGV0aWNpw7Nu"";s:6:"format";s:10:"csv_base64";}s:20:"horse_categories_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"56";}s:12:"horse_breeds";a:3:{s:9:"translate";i:1;s:4:"data";s:18:""SG9sc3RlaW5lcg=="";s:6:"format";s:10:"csv_base64";}s:16:"horse_breeds_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"65";}s:13:"horse_genders";a:3:{s:9:"translate";i:1;s:4:"data";s:14:""U2VtZW50YWw="";s:6:"format";s:10:"csv_base64";}s:17:"horse_genders_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"57";}}}', '2014-02-27 16:29:49', 0, NULL), +(9, 1727, 9, 1, 0, '0ce53461bf8a439300c080d31fc843e2', 'local', 'a:2:{s:3:"url";s:38:"http://127.0.0.1:4001/wordpress?p=4990";s:8:"contents";a:9:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:16:"RmxvcmVuY2lhbm8=";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:3472:"PGg0PktXUE4gLSBiYXkgLSAyMDA0IC0gMTYuMyBoYW5kczwvaDQ+DQoNCkFwcHJvdmVkIGZvciBPbGRlbmJ1cmcsIE1lY2tsZW5idXJnLCBSaGluZWxhbmQsIFdlc3RwaGFsaWEgYW5kIGFsbCBTb3V0aGVybiBHZXJtYW4gVmVyYmFuZHMuDQpPdGhlciBWZXJiYW5kcyBvbiByZXF1ZXN0IQ0KDQpJbnNlbWluYXRpb24gZmVlOiA1MDAg4oKsKiArIEluLWZvYWwgZmVlOiA1MDAg4oKsKihGUyArIFRHKQ0KDQpGcmVzaCBzZW1lbiBzaGlwcGluZyB3aXRoaW4gR2VybWFueSENCg0KDQpBIGZhYnVsb3VzbHkgbW92aW5nIHN1bm55IGJveSB3aXRoIGEgcmVtYXJrYWJsZSBvdXRjcm9zcyBwZWRpZ3JlZSDigJMgdGhhdOKAmXMgRmxvcmVuY2lhbm8hDQoNCkZsb3JlbmNpYW5vIHdhcyBsaWNlbnNlZCBpbiAyMDA2IGluIE3DvG5zdGVyLUhhbmRvcmYsIHdvbiBoaXMgMzAtZGF5IHRlc3QgaW4gMjAwNyAoZ3Vlc3QgcmlkZXIgMTAuMCkgYW5kIHRoZW4gd29uIHRoZSBwcmVzdGlnaW91cyBPcHRpbXVtIGluIDIwMDguIFRoZXNlIGFjaGlldmVtZW50cyB3ZXJlIGZvbGxvd2VkIGJ5IHF1YWxpZmljYXRpb24gZm9yIHRoZSBCdW5kZXNjaGFtcGlvbmF0IGFuZCBtYW55IHZpY3RvcmllcyBpbiBkcmVzc2FnZSB1cCB0byBtZWRpdW0gKE0pIGxldmVsLiBJbiAyMDExIGF0IHRoZSBhZ2Ugb2Ygc2V2ZW4sIGhpcyBmaXJzdCB2aWN0b3JpZXMgaW4gU3QuIEdlb3JnZXMgZHJlc3NhZ2UgdGVzdHMgd2VyZSBhZGRlZC4gVGhlIE9seW1waWMgd2lubmluZyByaWRlciwgSHViZXJ0dXMgU2NobWlkdCwgaGFzIHRha2VuIG92ZXIgRmxvcmVuY2lhbm/igJlzIGZ1cnRoZXIgdHJhaW5pbmcuICANCg0KDQpbdGl0bGUgc2l6ZT0iMyJdUHJvZ2VueVsvdGl0bGVdDQoNCkZsb3JlbmNpYW5v4oCZcyBkZWJ1dCBhcyBhIHNpcmUgd2FzIGJyaWxsaWFudC4gSW4ga2VlcGluZyB3aXRoIGhpcyBvdXRzdGFuZGluZyBmaXJzdCBmb2FsIGNyb3BzLCBoaXMgZGF1Z2h0ZXIgRmVpbmUgUm9zYSB0b29rIHRoZSAyMDExIENoYW1waW9uIE1hcmUgdGl0bGUgYXQgdGhlIEdlcm1hbiBFbGl0ZSBCcm9vZG1hcmUgQ2hhbXBpb25zaGlwcyBhcyB3ZWxsIGFzIHRoZSBSaGluZWxhbmQgQ2hhbXBpb24gTWFyZSB0aXRsZSwgaGlzIGRhdWdodGVyIEZsb3JlbmNpYW5hIEYgYmVjYW1lIHRoZSBXZXN0cGhhbGlhbiBDaGFtcGlvbiBNYXJlIGFuZCBoaXMgZGF1Z2h0ZXIgRm9yIENvbXRlc3Mgd29uIHRoZSBXZXN0cGhhbGlhbiBDaGFtcGlvbnNoaXBzLCB0aGUgV2VzdHBoYWxpYW4gV2FwcGVuIGFuZCBhbHNvIHBhcnRpY2lwYXRlZCBpbiB0aGUgQnVuZGVzY2hhbXBpb25hdCBGaW5hbC4gVGhyZWUgb2YgaGlzIHNvbnMgd2VyZSBsaWNlbnNlZCwgaW5jbHVkaW5nIHRoZSAyMDEyIE5SVyBwcmVtaXVtIHN0YWxsaW9uLCBGYXJiZW5zcGllbC4gSGlzIG9mZnNwcmluZyBhcmUgb2ZmIHRvIGEgaGlnaGx5IHByb21pc2luZyBzdGFydCBpbiBiYXNpYyB0ZXN0cyBmb3IgeW91bmdzdGVycy4gDQoNClt0aXRsZSBzaXplPSIzIl1QZWRpZ3JlZVsvdGl0bGVdDQoNCkhpcyBzaXJlIGlzIHRoZSB0d28tdGltZSBXb3JsZCBDaGFtcGlvbiBvZiB5b3VuZyBkcmVzc2FnZSBob3JzZXMsIEZsb3JlbmNpbyBJLg0KDQpGbG9yZW5jaWFub+KAmXMgaGlnaGx5IGRlY29yYXRlZCBkYW0gbGluZSBvcmlnaW5hdGVkIGluIHRoZSBOZXRoZXJsYW5kcy4gSGlzIGRhbSBTdC5Qci5TdC4gTHVuZGkgVCB3b24gZWlnaHQgbWVkaXVtIChNKSBsZXZlbCBkcmVzc2FnZSB0ZXN0cyBhbmQgcmVjZWl2ZWQg4oCccGVyZm9ybWFuY2UgbWFyZSBkcmVzc2FnZeKAnSBzdGF0dXMuICBUaGUgZGFt4oCZcyBzaXJlIEhhdmlkb2ZmLCBieSB0aGUgR3JhbmQgUHJpeCBzdGFsbGlvbiBDbGF2ZWNpbWJlbCwgd2FzIGF3YXJkZWQg4oCca2V1cuKAnSBzdGF0dXMuIE1hbnkgb2YgaGlzIG9mZnNwcmluZyB3aW4gcmliYm9ucyBhdCBHcmFuZCBQcml4IGxldmVsIHN1Y2ggYXMgaGlzIGxpY2Vuc2VkIHNvbiwgUGFnYW5pbmkuIEdyYW5kZGFtIEFudXNrYSBwcm9kdWNlZCBzZXZlcmFsIGhvcnNlcyB0aGF0IHdlcmUgc3VjY2Vzc2Z1bCBpbiBkcmVzc2FnZSByaW5ncy4gDQoNClRoZSBwZXJmb3JtYW5jZSBkb21pbmF0ZSBkYW0gbGluZSBhbHNvIHByb2R1Y2VkIHRoZSBsaWNlbnNlZCBab8O2bG9vZyAoYnkgR29uZG9saWVyKSB3aG8gaGFzIHBsYWNlZCBpbiBpbnRlcm5hdGlvbmFsIGRyZXNzYWdlIGNvbXBldGl0aW9ucywgdGhlIHdvcmxkIGNsYXNzIHNob3cganVtcGVyIE1pc3RlciBTcG9vbiAoYnkgWmFkb2MpL0NhbmRpY2UgS2luZy9VU0EgYW5kIE5pZXRqZSAoYnkgWmllaGltKSwgd2hvIHRvb2sgZ29sZCBvbiB0aGUgRHV0Y2ggdGVhbSBhdCB0aGUgMjAwNiBXb3JsZCBFcXVlc3RyaWFuIEdhbWVzIGluIEFhY2hlbiBpbiBLb29zIGRlIFJvbmRl4oCZcyBkcml2aW5nIHRlYW0gb2YgZm91ciBhcyB3ZWxsIGFzIG1hbnkgU3RhdGUgUHJlbWl1bSBtYXJlcyBhbmQgYXVjdGlvbiBob3JzZXMuDQoNCjxpZnJhbWUgd2lkdGg9IjU2MCIgaGVpZ2h0PSIzMTUiIHNyYz0iLy93d3cueW91dHViZS5jb20vZW1iZWQvMmszNUFuR3ZoYzgiIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4990;}s:16:"horse_categories";a:3:{s:9:"translate";i:1;s:4:"data";s:18:""Q29tcGV0aWNpw7Nu"";s:6:"format";s:10:"csv_base64";}s:20:"horse_categories_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"56";}s:12:"horse_breeds";a:3:{s:9:"translate";i:1;s:4:"data";s:14:""T2xkZW5idXJn"";s:6:"format";s:10:"csv_base64";}s:16:"horse_breeds_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"62";}s:13:"horse_genders";a:3:{s:9:"translate";i:1;s:4:"data";s:10:""Q2Fww7Nu"";s:6:"format";s:10:"csv_base64";}s:17:"horse_genders_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"59";}}}', '2014-02-27 16:29:49', 0, NULL), +(10, 1730, 9, 1, 0, 'ef5a8f6fcddb408c7aeb2d4da451b53a', 'local', 'a:2:{s:3:"url";s:38:"http://127.0.0.1:4001/wordpress?p=4971";s:8:"contents";a:9:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:12:"Q3Jpc3RhbGxv";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:3576:"PGg0Pldlc3RmYWxlIC0gZ3JleSAtIDIwMDcgLSAxNi4zIMK9IGhhbmRzPC9oND4NCg0KQnJlZWRlcjogRHIuIEF4ZWwgU2NodWVybmVyLCBOaWRlZ2dlbiwgR2VybWFueSANCg0KQXBwcm92ZWQgZm9yIEhhbm92ZXIsIE9TLCBNZWNrbGVuYnVyZywgUmhpbmVsYW5kLCBXZXN0cGhhbGlhIGFuZCBhbGwgU291dGhlcm4gR2VybWFuIFZlcmJhbmRzLg0KT3RoZXIgVmVyYmFuZHMgb24gcmVxdWVzdCENCg0KSW5zZW1pbmF0aW9uIGZlZTogNTAwIOKCrCogKyBJbi1mb2FsIGZlZTogNTAwIOKCrCogKEZTICsgVEcpDQoNCkZvcmVpZ24gY3VzdG9tZXJzIG11c3QgcGF5IGZ1bGwgc3R1ZCBmZWUgaW4gYWR2YW5jZS4gUmVmdW5kIG9mIHRoZSBoYWxmIGF0IG5vbi1wcmVnbmFuY3kuDQoNCk9yZGVycyBmb3IgZnJlc2ggc2VtZW4gbXVzdCBiZSByZWNlaXZlZCBieSA5OjAwIGEubS4gdGhlIGRheSBiZWZvcmUgc2luY2UgdGhlIHN0YWxsaW9uIGlzIHN0YXRpb25lZCBpbiBJdGFseSENCg0KIA0KDQpBbHRob3VnaCBDcmlzdGFsbG8gSSwgd2hvIGlzIGFsc28gc3RhdGlvbmVkIGluIFJpZXNlbmJlY2ssIGlzIGFscmVhZHkgc3VjY2Vzc2Z1bCBpbnRlcm5hdGlvbmFsbHksIENyaXN0YWxsbyBJSSBpcyBqdXN0IGFzIGdvb2QgYXMgaGlzIGZ1bGwgYnJvdGhlciBpbiBldmVyeSB3YXkuIEluIDIwMDkgQ3Jpc3RhbGxvIElJIGxlZnQgdGhlIE5SVyBsaWNlbnNpbmcgdmVudWUgaW4gTcO8bnN0ZXItSGFuZG9yZiBhcyB0aGUgY2VsZWJyYXRlZCBqdW1wZXIgY2hhbXBpb24gYW5kIHBhc3NlZCBoaXMgc3RhbGxpb24gcGVyZm9ybWFuY2UgdGVzdCBpbiAyMDEwIGF0IHRoZSBzYW1lIHZlbnVlIGFzIHRoZSByZXNlcnZlIGNoYW1waW9uIGp1bXBlciB3aXRoIGhpZ2ggc2NvcmVzIGZvciBoaXMgZ2FpdHMgYW5kIHJpZGVhYmlsaXR5LiBJbiAyMDExIGhlIHRvb2sgc2lsdmVyIGF0IHRoZSBXZXN0cGhhbGlhbiBDaGFtcGlvbnNoaXBzICg0LXllYXIgb2xkcykgYW5kIGluIDIwMTIgaGUgcXVhbGlmaWVkIGZvciB0aGUgQnVuZGVzY2hhbXBpb25hdC4gDQoNClt0aXRsZSBzaXplPSIzIl1Qcm9nZW55Wy90aXRsZV0NCg0KQ3Jpc3RhbGxvIElJ4oCZcyBvZmZzcHJpbmcgZXhjZWVkZWQgYWxsIGV4cGVjdGF0aW9ucy4gSGlzIGZvYWxzIGFyZSBwbGVhc2luZyB3aXRoIHRoZWlyIG1vZGVybiBsb29rcywgZ2VuZXJvdXMgbGluZXMgYW5kIHdvbmRlcmZ1bGx5IHN1cHBsZSBtb3ZlbWVudHMuIE1hbnkgb2YgdGhlbSBoYXZlIGJlZW4gYWRtaXR0ZWQgdG8gYXVjdGlvbnMuIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUGVkaWdyZWVbL3RpdGxlXQ0KDQpIaXMgc2lyZSBDb3JuZXQgT2JvbGVuc2t5IGhhcyBjb25zaWRlcmFibHkgaW5mbHVlbmNlZCBtb2Rlcm4tZGF5IGp1bXBlciBicmVlZGluZy4gSnVzdCBsaWtlIHRoZSBkYW3igJlzIHNpcmUgQ2Fzc2luaSBJLCBoZSBoYXMgYW4gb3V0c3RhbmRpbmcgcGVyZm9ybWFuY2UgYW5kIGJyZWVkaW5nIHJlY29yZC4gDQoNCkNyaXN0YWxsb+KAmXMgZGFtIENhc3NpZSBwbGFjZWQgaW4gc2hvdyBqdW1waW5nIHVwIHRvIG1lZGl1bSAoTSkgbGV2ZWwgdW5kZXIgaGVyIHNwb3J0IG5hbWUgQ2FzY2F2ZWxsYS4gSGVyIHNvbiBDcmlzdGFsbG8gSSB3YXMgYSBOUlcgcHJlbWl1bSBzdGFsbGlvbiwgd29uIGhpcyBzdGFsbGlvbiBwZXJmb3JtYW5jZSB0ZXN0LCB3YXMgV2VzdHBoYWxpYW4gSnVtcGVyIENoYW1waW9uLCBwYXJ0aWNpcGF0ZWQgaW4gdGhlIEJ1bmRlc2NoYW1waW9uYXQgRmluYWxzIHR3aWNlIGFuZCBtZWFud2hpbGUgd2lucyByaWJib25zIGluIGludGVybmF0aW9uYWwgY29tcGV0aXRpb25zLiANCg0KSGlzIGdyYW5kZGFtIFByb2ZpbGRhIHdhcyBzdWNjZXNzZnVsIGluIHNob3cganVtcGluZyB1cCB0byBhZHZhbmNlZCAoUykgbGV2ZWwgdW5kZXIgaGVyIHNwb3J0IG5hbWUgUGFwYXlhIGJlZm9yZSBzaGUgZ2F2ZSBiaXJ0aCB0byBhIG1lZGl1bSAoTSkgbGV2ZWwgc2hvdyBqdW1wZXIgbmFtZWQgQ29zaW1hIChieSBDYWxpZG8gSSkuIFByb2ZpbGRhIGlzIGEgZnVsbCBzaXN0ZXIgb2YgYSBsaWNlbnNlZCBzdGFsbGlvbiBuYW1lZCBQb2NhbGlubyAoYnkgUG9seWRvciksIHdpdGggd2hvbSBKZW5zIER1bW1leWVyIHBsYWNlZCBpbiBpbnRlcm5hdGlvbmFsIGNvbXBldGl0aW9ucywgYW5kIG9mIGEgbWVkaXVtIChNKSBsZXZlbCBzaG93IGp1bXBlciBuYW1lZCBQYWdhbmluaSBhcyB3ZWxsIGFzIGEgaGFsZi1zaXN0ZXIgb2YgdGhlIFN0YXRlIFByZW1pdW0gbWFyZXMgTGV0aWNpYSAoYnkgTGFuY2VyIElJSSkgYW5kIENlbGVzdGluZSAoYnkgQ29ybmV0IE9ib2xlbnNreSkuIFRoZSBXZXN0cGhhbGlhbiBBbG1mZWUgbGluZSBhbHNvIHByb2R1Y2VkIHRoZSBzaXJlcyBBcGFydG9zLCBBdm9jYWRvLCBBeWVycyBSb2NrLCBEaXNuZXksIFBhcGFnZW5vLCBQYXJsYW5kbyBJIGFuZCBJSSBhbmQgUGFzdGVsbCBhcyB3ZWxsIGFzIHRoZSAyMDA5IEJ1bmRlc2NoYW1waW9uIG9mIGZvdXIteWVhciBvbGQgbWFyZXMgYW5kIGdlbGRpbmdzLCBQcmV6aW9zYS4NCg0KUGVyZm9ybWFuY2UgbGluZSBvZiAgQWxtZmVlIA0KDQo8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Ii8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL0s3MDhRNHppcEV3IiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4971;}s:16:"horse_categories";a:3:{s:9:"translate";i:1;s:4:"data";s:18:""Q29tcGV0aWNpw7Nu"";s:6:"format";s:10:"csv_base64";}s:20:"horse_categories_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"56";}s:12:"horse_breeds";a:3:{s:9:"translate";i:1;s:4:"data";s:18:""V2VzdHBoYWxpYW4="";s:6:"format";s:10:"csv_base64";}s:16:"horse_breeds_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"61";}s:13:"horse_genders";a:3:{s:9:"translate";i:1;s:4:"data";s:10:""Q2Fww7Nu"";s:6:"format";s:10:"csv_base64";}s:17:"horse_genders_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"59";}}}', '2014-02-27 16:29:49', 0, NULL), +(11, 1732, 9, 1, 0, 'a441cf5b3d7572e942ce4a58c67bba06', 'local', 'a:2:{s:3:"url";s:38:"http://127.0.0.1:4001/wordpress?p=4970";s:8:"contents";a:9:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:12:"Q2FydGhhbm8=";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:4888:"PGg0PkhvbHN0ZWluLCBiYXksIEJvcm46IDIwMDgsIDE2OWNtPC9oND4NCg0KSW5zZW1pbmF0aW9uIGZlZTogNzAwIOKCrCogKG9ubHkgZnJvemVuIHNlbWVuKQ0KDQogDQpBcHBwcm92ZWQgZm9yOiBIb2xzdGVpbiwgT2xkZW5idXJnLCBPbGRlbmJ1cmctSW50ZXJuYXRpb25hbCwgV2VzdGZhbGVuIGFuZCBSaGVpbmxhbmQuIEFzIHdlbGwgYXMgYWxsIHRoZSBTb3V0aCBHZXJtYW4gU3R1ZCBCb29rcyBhbmQgdGhlIG5ld2x5IGZvcm1lZCBHZXJtYW4gU3RhdGVzIFN0dWQgQm9va3MuDQoNCiANCg0KQ2FydGhhbm8gSUkgd2FzIHRoZSBjZWxlYnJhdGVkIHByZW1pdW0gc2lyZSBhdCBoaXMgYXBwcm92YWxzIGluIEhvbHN0ZWluIGluIDIwMTAsIHNob3dpbmcgZW5vcm1vdXMgYWJpbGl0eSBpbiBoaXMgcGFjZXMsIGNvcnJlY3QgY29uZm9ybWF0aW9uLCBhbmQgYW4gYWJ1bmRhbmNlIG9mIOKAnHN0YWxsaW9uIHByZXNlbmNl4oCdLiBDYXJ0aGFubyBJSSBhbHNvIGhhcyBhbiBvdXRzdGFuZGluZyB0cm90OyB0aGlzIGlzIGR1ZSB0byBoaXMgZW5vcm1vdXNseSBwb3dlcmZ1bCBoaW5kIGxlZ3MuIEhlIGhhcyBhIGJhbGFuY2VkIGNvbnNpc3RlbnQgcmh5dGhtIGFuZCBsYXJnZSwgZmxleGlibGUgZ2FpdHMuIEhpcyBqdW1waW5nIHNjb3BlLCBnb29kIGxlZyB0ZWNobmlxdWUgYW5kIHF1aWNrIHJlYWN0aW9ucyBhdCB0aGUgZmVuY2UgYXJlIGV5ZS1jYXRjaGluZy4gV2l0aCBhbGwgdGhlc2UgYXR0cmlidXRlcywgQ2FydGhhbm8gSUkgaXMgdW5kaXNwdXRlZGx5IG9uZSBvZiB0aGUgdG9wIHN0YWxsaW9ucyBvZiBoaXMgYWdlIGdyb3VwLiANCg0KSW4gMjAxMSBDYXJ0aGFubyBJSSBjb21wbGV0ZWQgYW4gZXhjZWxsZW50IDMwLWRheS10ZXN0IGluIFp3ZWlicsO8Y2tlbi4gIEhlIGNvbmZpcm1lZCB0aGUgaGlnaCBleHBlY3RhdGlvbnMgYnkgc2NvcmluZyAxMjYgcG9pbnRzIGluIHRoZSDigJxWQS1adWNodHdlcnTigJ0gZm9yIGp1bXBpbmcuIEFsc28gd29ydGggYSBtZW50aW9uIHdhcyB0aGUgZGVzZXJ2ZWQgaGlnaCBwb2ludHMgYXdhcmRlZCBmb3IgaGlzIHdlbGwtdGVtcGVyZWQgY2hhcmFjdGVyIGFuZCBncmVhdCBhdHRpdHVkZS4gDQoNCkNhdGhhbm8gbGwgYmVnaW5zIGhpcyBwcmVwYXJhdGlvbiBmb3IgdGhlIE5hdGlvbmFsIFlvdW5nIEhvcnNlIENoYW1waW9uc2hpcHMgaW4gMjAxMyB3aXRoIGhpcyBmaXJzdCBzaG93IGp1bXBpbmcgZXZlbnRzIHRoaXMgY29taW5nIHNlYXNvbi4gICANCg0KW3RpdGxlIHNpemU9IjMiXVByb2dlbnlbL3RpdGxlXQ0KDQpXZSBhcmUgbG9va2luZyBmb3J3YXJkIHdpdGggZ3JlYXQgZXhwZWN0YXRpb24gdG8gQ2FydGhhbm/igJlzIGZpcnN0IGZvYWxzIGluIDIwMTIuIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUGVkaWdyZWVbL3RpdGxlXQ0KDQpDYXJ0aGFubyBJScK0cyBzaXJlLCBDb250ZW5kZXIgd29uIGhpcyBzdGFsbGlvbiBwZXJmb3JtYW5jZSB0ZXN0IGluIEFkZWxoZWlkc2RvcmYgaW4gMTk4Ny4gT3ZlciB0aGUgeWVhcnMsIHRoZSBzb24gb2YgQ2FseXBzbyBJSSBoYXMgZGV2ZWxvcGVkIGludG8gYSB2YWx1ZWQgYW5kIGhpZ2hseSByZWdhcmRlZCBicmVlZGluZyBzdGFsbGlvbiB3aXRoIG92ZXIgb25lIGh1bmRyZWQgb2YgaGlzIGFwcHJvdmVkIHNvbnMgYWN0aXZlbHkgc2VydmluZyBhcm91bmQgdGhlIHdvcmxkIHRvZGF5LiBDb250ZW5kZXIgaGltc2VsZiB3YXMgYSBsaXZpbmcgbGVnZW5kLiBBbW9uZ3N0IG90aGVycyBoZSBzaXJlZCBDaGVja21hdGUvTS4gTWljaGFlbHMtQmVlcmJhdW0sIHR3by10aW1lIHdpbm5lciBvZiB0aGUgUmlkZXJzIFRvdXIgYW5kIHRlYW0gRXVyb3BlYW4gY2hhbXBpb24sIGFzIHdlbGwgYXMgTW9udGVuZGVyL00uIEt1dHNjaGVyIHdobyB3b24gdHdvIE9seW1waWMgYnJvbnplIG1lZGFscyBpbiAyMDA0IGFuZCB0d28gZ29sZCBtZWRhbHMgYXQgdGhlIEV1cm9wZWFuIENoYW1waW9uc2hpcHMgaW4gU2FuIFBhdHJpZ25hbm8gKElUQSkgaW4gMjAwNS4NCg0KIA0KDQogDQoNClRoZSBkYW3igJlzIHNpcmUgQ2FydGhhZ28gYmVnYW4gaGlzIGNhcmVlciBhdCB0aGUgSG9sc3RlaW5WZXJiYW5kLCBoZSB3ZW50IG9uIHRvIHBhcnRpY2lwYXRlIGF0IHR3byBPbHltcGljIEdhbWVzIHdpdGggaGlzIHJpZGVyIEpvcyBMYW5zaW5rLiAgSGUgaGFzIHNpcmVkIG92ZXIgdGhpcnR5IGFwcHJvdmVkIHN0YWxsaW9ucyBhbmQgbWFueSBpbnRlcm5hdGlvbmFsIHRvcCBzcG9ydCBob3JzZXMgc3VjaCBhcyBDYXNoIHJpZGRlbiBieSBNYXJjbyBLdXRzY2hlci4gQ2FydGhhZ28gd2FzIHJhbmtlZCBzZWNvbmQgaW4gMjAxMCBvbiB0aGUgV0JGU0gtUmFua2luZyBvZiB0aGUgd29ybGTigJlzIGJlc3Qgc2hvdyBqdW1waW5nIHNpcmVzIHRoYW5rcyB0byBoaXMgc3VjY2Vzc2Z1bCBvZmZzcHJpbmcuDQoNCkNhcnRoYW5vIElJ4oCZcyAgZGFtIEctQ2F0YW5pYSBwcm9kdWNlZCB0aGUgdHdvIGZ1bGwtYnJvdGhlcnMgYW5kIGFwcHJvdmVkIHN0YWxsaW9ucyBDYXJ0aGFubyBJIGFuZCBJSSBhcyB3ZWxsIGFzIHR3byBzdHVkIGJvb2sgcHJlbWl1bSBtYXJlcyBhbmQgZm91ciBzcG9ydCBob3JzZXMuIFR3byBvZiB3aGljaCwgUGh5bGxpcyBhbmQgUGF1bGEsIGJvdGggc2lyZWQgYnkgQ2FtYnJpZGdlIGhhdmUgYmVlbiBzdWNjZXNzZnVsIGluIDEuNDAgYW5kIGhpZ2hlciBqdW1waW5nIGNsYXNzZXMuIFRoZSB0aGlyZCBtYXRlcm5hbCBkYW0sIE1lY2h0aGlsZCBzaXJlZCBieSBTYWNyYW1lbnRvIFNvbmcgeHggcHJvZHVjZWQgdGhyZWUgc3VjY2Vzc2Z1bCBzcG9ydCBob3JzZXM6IExlb25hcmRvIGJ5IExhbmRtZWlzdGVyLCBDYXJ0b3VjaGUgYnkgQ2FyZGluYWwgdW5kIExhc3NvIGJ5IExhbmRtZWlzdGVyLg0KDQpUaGUgZm9sbG93aW5nIGFwcHJvdmVkIHN0YWxsaW9ucyBhbGwgY29tZSBmcm9tIHRoZSBIb2xzdGVpbiBsaW5lYWdlIDIwNjc6IEFjb25pdG8gKGJ5IEFjb3JhZG8pLCBDYW50ZXJidXJyeSAoYnkgQ2FsZXR0byBJKSwgQ2FudHVyYW5vIEkgYW5kICBJSSAoYnkgQ2FudHVybyksIENhcnRoYW5vIEkgYW5kIElJIChieSBDb250ZW5kZXIpLCBDb24gQ2FsZXR0byAoYnkgQ29udGVuZGVyKSwgQ29uIFNwaXJpdG8gKGJ5IENvbnRlbmRlciksIENvc2lkbyAoYnkgQ29zaW1vKSwgQ3Jpc3Rpbm8gKGJ5IENhcmV0aW5vKSwgSmFxdWlubyAoYnkgSmF5YWRldm8gZGUgTWFja2luYWMpLCBMYW5kc3RyZWljaGVyIChieSBMYW5kZ3JhZiBJKSwgTG9yZG9uIChieSBMb3JkKSwgTWFzZXR0byAoYnkgTW9udGFudXMpLCBPY3RhdmlvIChieSBPZ2xpbyksIFJhbmRvIChieSBSb21pbm8pIGFuZCBTeW1wYXRpY28gKGJ5IFNhY3JhbWVudG8gU29uZyB4eCkuDQoNCkFtb25nc3QgdGhlIDQ5MCBjdXJyZW50bHkgIHJlZ2lzdGVyZWQgc3BvcnQgaG9yc2VzIGFyZSAgTGFuZHN0cmVpY2hlciAoYnkgTGFuZGdyYWYgSSksIENhemFybyAoYnkgQ2hhbWJlcnRpbiksIENsYWltIENvbGxpbiAoYnkgQ29ycmFkbyBJKSBhbmQgQ29vbCBNYW4gKGJ5IENvbnRlbmRlcikgYWxsIHN1Y2Nlc3NmdWwgdXAgdG8gUy1sZXZlbC4gDQoNCjxpZnJhbWUgd2lkdGg9IjU2MCIgaGVpZ2h0PSIzMTUiIHNyYz0iLy93d3cueW91dHViZS5jb20vZW1iZWQvSzcwOFE0emlwRXciIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4970;}s:16:"horse_categories";a:3:{s:9:"translate";i:1;s:4:"data";s:18:""Q29tcGV0aWNpw7Nu"";s:6:"format";s:10:"csv_base64";}s:20:"horse_categories_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"56";}s:12:"horse_breeds";a:3:{s:9:"translate";i:1;s:4:"data";s:18:""WmFuZ2Vyc2hlaWRl"";s:6:"format";s:10:"csv_base64";}s:16:"horse_breeds_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"64";}s:13:"horse_genders";a:3:{s:9:"translate";i:1;s:4:"data";s:14:""U2VtZW50YWw="";s:6:"format";s:10:"csv_base64";}s:17:"horse_genders_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"57";}}}', '2014-02-27 16:29:49', 0, NULL), +(12, 1734, 9, 1, 0, '961746eaa29de4fd4a59b16a88cd1974', 'local', 'a:2:{s:3:"url";s:38:"http://127.0.0.1:4001/wordpress?p=4955";s:8:"contents";a:11:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:16:"QmxhY2sgSmFjaw==";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:4084:"PGg0Pldlc3RwaGFsaWFuIC0gZGFyayBicm93biAtIDIwMDYgLSAxNi4yIGhhbmRzPC9oND4NCg0KPHN0cm9uZz5BZ2U8L3N0cm9uZz46IDAzLzA2LzIwMDYNCjxzdHJvbmc+R2VuZGVyPC9zdHJvbmc+OiBDb2x0DQo8c3Ryb25nPkNvbG9yPC9zdHJvbmc+OiBkYXJrIGJyb3duDQo8c3Ryb25nPkJyZWVkZXI8L3N0cm9uZz46IFRob21hcyBTY2hpbmRsZXIsIEZhdXRlbmJhY2gsIEdlcm1hbnkNCg0KQXBwcm92ZWQgZm9yIE1lY2tsZW5idXJnLCBSaGluZWxhbmQsIFdlc3RwaGFsaWEgYW5kIGFsbCBTb3V0aGVybiBHZXJtYW4gVmVyYmFuZHMuIA0KT3RoZXIgVmVyYmFuZHMgb24gcmVxdWVzdCENCg0KSW5zZW1pbmF0aW9uIGZlZTogNTAwIOKCrCogKyBJbi1mb2FsIGZlZTogNTAwIOKCrCogKEZTICsgVEcpDQoNCkZvcmVpZ24gY3VzdG9tZXJzIG11c3QgcGF5IGZ1bGwgc3R1ZCBmZWUgaW4gYWR2YW5jZS4gUmVmdW5kIG9mIHRoZSBoYWxmIGF0IG5vbi1wcmVnbmFuY3kuDQoNCk9yZGVycyBmb3IgZnJlc2ggc2VtZW4gbXVzdCBiZSByZWNlaXZlZCBieSA5OjAwIGEubS4gdGhlIGRheSBiZWZvcmUgc2luY2UgdGhlIHN0YWxsaW9uIGlzIHN0YXRpb25lZCBpbiBJdGFseSENCg0KDQpSZXBlYXRpbmcgaGlzIHBlcmZvcm1hbmNlIGluIDIwMTEsIEJsYWNrIEphY2sgYWdhaW4gd29uIHRoZSBxdWFsaWZpZXIgaW4gUmllc2VuYmVjayBpbiAyMDEyIGFuZCB0aHVzIGEgdGlja2V0IGZvciB0aGUgQnVuZGVzY2hhbXBpb25hdCBmb3Igc2hvdyBqdW1wZXJzLiBUaGlzIGZlYXQgaGFkIGJlZW4gcHJlY2VkZWQgYnkgYSBzZXJpZXMgb2YgcmliYm9ucyBpbiBtZWRpdW0gKE0qKSBsZXZlbCB0ZXN0cyBmb3IgeW91bmcgc2hvdyBqdW1wZXJzIGFuZCBtZWRpdW0gKE0qKikgbGV2ZWwgc2hvdyBqdW1waW5nIHRlc3RzLiAgDQoNCkNsZWFybHkgcmVmaW5lZCBieSBoaXMgZGFt4oCZcyBUaG9yb3VnaGJyZWQgc2lyZSBIZXJhbGRpayB4eCwgdGhlIGdvcmdlb3VzLCBwYXRlbnQgbGVhdGhlciBibGFjayAgQmxhY2sgSmFjayB3YXMgb25lIG9mIHRoZSBoaWdobGlnaHRzIGF0IHRoZSAxOHRoIE5SVyBsaWNlbnNpbmcgaW4gTcO8bnN0ZXItSGFuZG9yZiAgaW4gMjAwOC4gIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUHJvZ2VueVsvdGl0bGVdDQoNCkhpZ2hseSByZWZpbmVkIGhpbXNlbGYsIHRoZSBjaGFybWluZyBCbGFjayBKYWNrIG5vdCBvbmx5IHBhc3NlcyBvbiBoaXMgZ29vZCBsb29rcyBidXQgYWxzbyBoaXMgYWJpbGl0eSB0byBqdW1wLCBoaXMgcXVhbGl0eSBtb3ZlbWVudHMgYW5kIHJpZGVhYmlsaXR5LiBIaXMgZmlyc3Qgc29ucyBhbmQgZGF1Z2h0ZXJzLCBub3cgdW5kZXIgc2FkZGxlLCBtYWtlIGEgaGlnaGx5IHByb21pc2luZyBpbXByZXNzaW9uLiANCg0KQmxhY2sgSmFja+KAmXMgZm9hbHMgcXVpY2tseSBmaW5kIGJ1eWVycy4gSGlzIHNvbiBCb3LDqWFsIGRlcyBQcsOpcyB3YXMgc29sZCBmb3IgMTIsNTAwIFN3aXNzIEZyYW5jcyBpbiAyMDEyIGF0IHRoZSBTcG9ydCBGb2FscyBBdWN0aW9uIGluIFN1cnNlZS9TVUkuIA0KDQpbdGl0bGUgc2l6ZT0iMyJdUGVkaWdyZWVbL3RpdGxlXQ0KDQpIaXMgc2lyZSBCYWxvdWJldCBkdSBSb3VldCB3b24gaW5kaXZpZHVhbCBPbHltcGljIGdvbGQgd2l0aCBSb2RyaWdvIFBlc3NvYS9CUkEgaW4gMjAwNCBvbiB0aGUgY291cnNlIG9mIEF0aGVucy9HUkUuIEhlIGFsc28gdG9vayB0aGUgV29ybGQgQ3VwIHRpdGxlIHRocmVlIHRpbWVzIGluIGEgcm93IGFuZCB3b24gdGhlIHVub2ZmaWNpYWwgaW5kb29yIFdvcmxkIENoYW1waW9uc2hpcHMgdHdpY2UgaW4gMjAwMiBhbmQgMjAwMy4gVGhlIGNoZXN0bnV0IFNlbGxlIEZyYW5jYWlzIHN0YWxsaW9uIHdobyBhZ2FpbiBsZWFkcyB0aGUgV0JGU0ggIChXb3JsZCBCcmVlZGluZyBGZWRlcmF0aW9uIGZvciBTcG9ydCBIb3JzZXMpIHJhbmtpbmcgb2YgdGhlIHdvcmxk4oCZcyBiZXN0IGp1bXBlci1tYWtlcnMg4oCTIGFsc28gdGhhbmtzIHRvIENoYW1hbiB3aG8gaXMgYWxzbyBzdGF0aW9uZWQgaW4gUmllc2VuYmVjayDigJMgaXMgYSBHYWxvdWJldCBBIHNvbi4gR2Fsb3ViZXQgQSwgYSBzb24gb2YgdGhlIHRyYWRlbWFyayBzdGFsbGlvbiBBbG3DqSBaIHdobyB3YXMgb24gdGhlIEZyZW5jaCBnb2xkIHdpbm5pbmcgdGVhbSBhdCB0aGUgMTk4MiBXb3JsZCBDaGFtcGlvbnNoaXBzIG9mIER1Ymxpbi9JUkwgd2l0aCBHaWxsZXMgQmVydHJhbmQgZGUgQmFsbGFuZGEsIHdvbiB0aGUgRnJlbmNoIENoYW1waW9uc2hpcHMgc2V2ZXJhbCB0aW1lcyBhbmQgY29sbGVjdGVkIGRvemVucyBvZiBmaXJzdCBwbGFjZSByaWJib25zIGluIE5hdGlvbnMgQ3VwcyBhbmQgIEdyYW5kIFByaXguIE1vcmUgdGhhbiAzMCBvZiBoaXMgc29ucyBhcmUgYWN0aXZlIGluIGJyZWVkaW5nLCBpbmNsdWRpbmcgVeKAmUdyYW5kIEpldGUsIEVvbGUgYW5kIE1lcmVkaXRoIE1pY2hhZWxzLUJlZXJiYXVt4oCZcyBRdWljayBTdGFyLg0KDQpIaXMgZGFtIFN0LlByLlN0LiBXaW56ZXJpbiwgd2hvIHBhc3NlZCBoZXIgYnJvb2RtYXJlIHBlcmZvcm1hbmNlIHRlc3Qgd2l0aCBvdXRzdGFuZGluZyBzY29yZXMsIGlzIGFsc28gdGhlIGRhbSBvZiAgR3V0IE5ldWVuaG9mcyBMZXZhbnRhZG9zIChieSBMYW5jZXIgSUkpIHdobyB3aW5zIHNob3cganVtcGluZyBjbGFzc2VzIHVwIHRvIGFkdmFuY2VkIChTKioqKSBsZXZlbCwgYXMgd2VsbCBhcyBhIHNldmVuLXllYXIgb2xkIGZ1bGwgc2lzdGVyIG9mIEJhbG91dGVsbGkgbmFtZWQgR3V0IE5ldWVuaG9mcyBCYWNhcm9sZS9IZW5yaWsgdm9uIEVja2VybWFubi9TV0Ugd2hvIGlzIGFsc28gaGlnaGx5IHN1Y2Nlc3NmdWwgaW4gaW50ZXJuYXRpb25hbCBjb21wZXRpdGlvbnMsIGFuZCAgR3V0IE5ldWVuaG9mcyBDYXR5IChieSBDcmlzdGFsbG8gSSkgd2hvIHF1YWxpZmllZCBmb3IgdGhlIEJ1bmRlc2NoYW1waW9uYXQuDQoNCjxpZnJhbWUgd2lkdGg9IjU2MCIgaGVpZ2h0PSIzMTUiIHNyYz0iLy93d3cueW91dHViZS5jb20vZW1iZWQvSzcwOFE0emlwRXciIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4955;}s:16:"horse_categories";a:3:{s:9:"translate";i:1;s:4:"data";s:18:""Q29tcGV0aWNpw7Nu"";s:6:"format";s:10:"csv_base64";}s:20:"horse_categories_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"56";}s:12:"horse_breeds";a:3:{s:9:"translate";i:1;s:4:"data";s:18:""SG9sc3RlaW5lcg=="";s:6:"format";s:10:"csv_base64";}s:16:"horse_breeds_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"65";}s:13:"horse_genders";a:3:{s:9:"translate";i:1;s:4:"data";s:14:""U2VtZW50YWw="";s:6:"format";s:10:"csv_base64";}s:17:"horse_genders_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"57";}s:10:"horse_tags";a:3:{s:9:"translate";i:1;s:4:"data";s:6:""cA=="";s:6:"format";s:10:"csv_base64";}s:14:"horse_tags_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"66";}}}', '2014-02-27 16:29:50', 0, NULL), +(13, 1737, 9, 1, 0, 'd2f01e60b9ed716b84738d1b8b482999', 'local', 'a:2:{s:3:"url";s:38:"http://127.0.0.1:4001/wordpress?p=4953";s:8:"contents";a:9:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:12:"Q2Fycmljbw==";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:1400:"PGg0PkhvbHN0ZWluZXIgLSBMaW5lIDQ3MDUgLSBiYXkgLSAyMDAzIC0gIDE2LjMgwr0gaGFuZHMgPC9oND4NCkJyZWVkZXI6IFBldGVyIELDtmdlLCBTY2jDtm5ob3JzdCwgR2VybWFueQ0KDQpBcHByb3ZlZCBmb3IgSGFub3ZlciwgSG9sc3RlaW4sIE9TLCBNZWNrbGVuYnVyZywgUmhpbmVsYW5kLCBXZXN0cGhhbGlhIGFuZCBhbGwgU291dGhlcm4gR2VybWFuIFZlcmJhbmRzLmFzIHdlbGwgYXMgRGVubWFyaywgU3dlZGVuIGFuZCBGcmFuY2UuDQoNCkluc2VtaW5hdGlvbiBmZWU6IDUwMCDigqwqICsgSW4tZm9hbCBmZWU6IDUwMCDigqwqIChGUyArIFRHKQ0KDQpGb3JlaWduIGN1c3RvbWVycyBtdXN0IHBheSBmdWxsIHN0dWQgZmVlIGluIGFkdmFuY2UuIFJlZnVuZCBvZiB0aGUgaGFsZiBhdCBub24tcHJlZ25hbmN5DQoNCkNhcnJpY28gaGFzIG5vdyBiZWNvbWUgZmlybWx5IGVzdGFibGlzaGVkIGluIHVwcGVyIGxldmVsLCBpbnRlcm5hdGlvbmFsIHNob3cganVtcGluZyBhZnRlciBwbGFjaW5nIGluIERvcnRtdW5kLCBIYWdlbiBhLlQuVy4sIENoYW50aWxseS9GUkEsIE3DvG5zdGVyLCBQYWRlcmJvcm4gYW5kIE5ldW3DvG5zdGVyIHVuZGVyIFBoaWxpcHAgV2Vpc2hhdXB0IGFuZCBIZW5yaWsgdm9uIEVja2VybWFubi9TV0UuDQoNCkF3YXJkZWQgYSBwcmVtaXVtIGluIDIwMDUgaW4gTmV1bcO8bnN0ZXIsIENhcnJpY28gdGhlbiB0b29rIGhpcyBzdGFsbGlvbiBwZXJmb3JtYW5jZSB0ZXN0IGluIFJlZGVmaW4gd2hlcmUgaGUgd29uIHRoZSBqdW1waW5nIGFzIHdlbGwgYXMgdGhlIGRyZXNzYWdlIGluZGV4LCBmaW5pc2hpbmcgZmlyc3Qgb3ZlcmFsbC4gSW4gMjAwOCBoZSB3b24gYSBxdWFsaWZpZXIgYXQgdGhlIEJ1bmRlc2NoYW1waW9uYXQgd2l0aCBhIDkuNSBhbmQgaW4gMjAwOSBoZSBwbGFjZWQgaW4gdGhlIEZpbmFsIGZvciBzaXgteWVhciBvbGQgc2hvdyBqdW1wZXJzIGluIFdhcmVuZG9yZi4gQXQgdGhlIGFnZSBvZiBqdXN0IHNldmVuLCBoZSB3b24gaGlzIGZpcnN0IHJpYmJvbnMgaW4gYWR2YW5jZWQgbGV2ZWwgY2xhc3Nlcy4NCg==";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4953;}s:16:"horse_categories";a:3:{s:9:"translate";i:1;s:4:"data";s:10:""Q3LDrWE="";s:6:"format";s:10:"csv_base64";}s:20:"horse_categories_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"55";}s:12:"horse_breeds";a:3:{s:9:"translate";i:1;s:4:"data";s:14:""Q3J1emFkbw=="";s:6:"format";s:10:"csv_base64";}s:16:"horse_breeds_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"63";}s:13:"horse_genders";a:3:{s:9:"translate";i:1;s:4:"data";s:10:""Q2Fww7Nu"";s:6:"format";s:10:"csv_base64";}s:17:"horse_genders_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"59";}}}', '2014-02-27 16:29:50', 0, NULL), +(14, 1740, 9, 1, 0, '55fb4161704b30b74177344336a80944', 'local', 'a:2:{s:3:"url";s:38:"http://127.0.0.1:4001/wordpress?p=4951";s:8:"contents";a:10:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:12:"R2FsYW50ZQ==";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:2848:"PGg0Pldlc3RwaGFsaWFuIC0gYnJvd24gLSAyMDExIC0gMTYuMiBoYW5kczwvaDQ+DQoNCjxzdHJvbmc+Tm9tYnJlPC9zdHJvbmc+OiBHYWxhbnRlDQo8c3Ryb25nPkHDsW8gZGUgbmFjaW1pZW50bzwvc3Ryb25nPjogMjAxMSANCjxzdHJvbmc+Q2FwYTwvc3Ryb25nPjogQ2FzdGHDsW8NCg0KW3RpdGxlIHNpemU9IjMiXVByb2dlbnlbL3RpdGxlXQ0KDQpIaWdobHkgcmVmaW5lZCBoaW1zZWxmLCB0aGUgY2hhcm1pbmcgQmxhY2sgSmFjayBub3Qgb25seSBwYXNzZXMgb24gaGlzIGdvb2QgbG9va3MgYnV0IGFsc28gaGlzIGFiaWxpdHkgdG8ganVtcCwgaGlzIHF1YWxpdHkgbW92ZW1lbnRzIGFuZCByaWRlYWJpbGl0eS4gSGlzIGZpcnN0IHNvbnMgYW5kIGRhdWdodGVycywgbm93IHVuZGVyIHNhZGRsZSwgbWFrZSBhIGhpZ2hseSBwcm9taXNpbmcgaW1wcmVzc2lvbi4gDQoNCkJsYWNrIEphY2vigJlzIGZvYWxzIHF1aWNrbHkgZmluZCBidXllcnMuIEhpcyBzb24gQm9yw6lhbCBkZXMgUHLDqXMgd2FzIHNvbGQgZm9yIDEyLDUwMCBTd2lzcyBGcmFuY3MgaW4gMjAxMiBhdCB0aGUgU3BvcnQgRm9hbHMgQXVjdGlvbiBpbiBTdXJzZWUvU1VJLiANCg0KW3RpdGxlIHNpemU9IjMiXVBlZGlncmVlWy90aXRsZV0NCg0KSGlzIHNpcmUgQmFsb3ViZXQgZHUgUm91ZXQgd29uIGluZGl2aWR1YWwgT2x5bXBpYyBnb2xkIHdpdGggUm9kcmlnbyBQZXNzb2EvQlJBIGluIDIwMDQgb24gdGhlIGNvdXJzZSBvZiBBdGhlbnMvR1JFLiBIZSBhbHNvIHRvb2sgdGhlIFdvcmxkIEN1cCB0aXRsZSB0aHJlZSB0aW1lcyBpbiBhIHJvdyBhbmQgd29uIHRoZSB1bm9mZmljaWFsIGluZG9vciBXb3JsZCBDaGFtcGlvbnNoaXBzIHR3aWNlIGluIDIwMDIgYW5kIDIwMDMuIFRoZSBjaGVzdG51dCBTZWxsZSBGcmFuY2FpcyBzdGFsbGlvbiB3aG8gYWdhaW4gbGVhZHMgdGhlIFdCRlNIICAoV29ybGQgQnJlZWRpbmcgRmVkZXJhdGlvbiBmb3IgU3BvcnQgSG9yc2VzKSByYW5raW5nIG9mIHRoZSB3b3JsZOKAmXMgYmVzdCBqdW1wZXItbWFrZXJzIOKAkyBhbHNvIHRoYW5rcyB0byBDaGFtYW4gd2hvIGlzIGFsc28gc3RhdGlvbmVkIGluIFJpZXNlbmJlY2sg4oCTIGlzIGEgR2Fsb3ViZXQgQSBzb24uIEdhbG91YmV0IEEsIGEgc29uIG9mIHRoZSB0cmFkZW1hcmsgc3RhbGxpb24gQWxtw6kgWiB3aG8gd2FzIG9uIHRoZSBGcmVuY2ggZ29sZCB3aW5uaW5nIHRlYW0gYXQgdGhlIDE5ODIgV29ybGQgQ2hhbXBpb25zaGlwcyBvZiBEdWJsaW4vSVJMIHdpdGggR2lsbGVzIEJlcnRyYW5kIGRlIEJhbGxhbmRhLCB3b24gdGhlIEZyZW5jaCBDaGFtcGlvbnNoaXBzIHNldmVyYWwgdGltZXMgYW5kIGNvbGxlY3RlZCBkb3plbnMgb2YgZmlyc3QgcGxhY2UgcmliYm9ucyBpbiBOYXRpb25zIEN1cHMgYW5kICBHcmFuZCBQcml4LiBNb3JlIHRoYW4gMzAgb2YgaGlzIHNvbnMgYXJlIGFjdGl2ZSBpbiBicmVlZGluZywgaW5jbHVkaW5nIFXigJlHcmFuZCBKZXRlLCBFb2xlIGFuZCBNZXJlZGl0aCBNaWNoYWVscy1CZWVyYmF1beKAmXMgUXVpY2sgU3Rhci4NCg0KSGlzIGRhbSBTdC5Qci5TdC4gV2luemVyaW4sIHdobyBwYXNzZWQgaGVyIGJyb29kbWFyZSBwZXJmb3JtYW5jZSB0ZXN0IHdpdGggb3V0c3RhbmRpbmcgc2NvcmVzLCBpcyBhbHNvIHRoZSBkYW0gb2YgIEd1dCBOZXVlbmhvZnMgTGV2YW50YWRvcyAoYnkgTGFuY2VyIElJKSB3aG8gd2lucyBzaG93IGp1bXBpbmcgY2xhc3NlcyB1cCB0byBhZHZhbmNlZCAoUyoqKikgbGV2ZWwsIGFzIHdlbGwgYXMgYSBzZXZlbi15ZWFyIG9sZCBmdWxsIHNpc3RlciBvZiBCYWxvdXRlbGxpIG5hbWVkIEd1dCBOZXVlbmhvZnMgQmFjYXJvbGUvSGVucmlrIHZvbiBFY2tlcm1hbm4vU1dFIHdobyBpcyBhbHNvIGhpZ2hseSBzdWNjZXNzZnVsIGluIGludGVybmF0aW9uYWwgY29tcGV0aXRpb25zLCBhbmQgIEd1dCBOZXVlbmhvZnMgQ2F0eSAoYnkgQ3Jpc3RhbGxvIEkpIHdobyBxdWFsaWZpZWQgZm9yIHRoZSBCdW5kZXNjaGFtcGlvbmF0Lg0KDQo8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Ii8vd3d3LnlvdXR1YmUtbm9jb29raWUuY29tL2VtYmVkL0EwUFNZNmtlam5RP3JlbD0wIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==";s:6:"format";s:6:"base64";}s:7:"excerpt";a:3:{s:9:"translate";i:1;s:4:"data";s:20:"MjAxMSAtIENhc3Rhw7Fv";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4951;}s:16:"horse_categories";a:3:{s:9:"translate";i:1;s:4:"data";s:10:""Q3LDrWE="";s:6:"format";s:10:"csv_base64";}s:20:"horse_categories_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"55";}s:12:"horse_breeds";a:3:{s:9:"translate";i:1;s:4:"data";s:14:""Q3J1emFkbw=="";s:6:"format";s:10:"csv_base64";}s:16:"horse_breeds_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"63";}s:13:"horse_genders";a:3:{s:9:"translate";i:1;s:4:"data";s:10:""Q2Fww7Nu"";s:6:"format";s:10:"csv_base64";}s:17:"horse_genders_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"59";}}}', '2014-02-27 16:29:50', 0, NULL); +INSERT INTO `drgrp_icl_translation_status` (`rid`, `translation_id`, `status`, `translator_id`, `needs_update`, `md5`, `translation_service`, `translation_package`, `timestamp`, `links_fixed`, `_prevstate`) VALUES +(15, 1741, 9, 1, 0, '6e0e1b23ae97f2658102c5f80d579f99', 'local', 'a:2:{s:3:"url";s:38:"http://127.0.0.1:4001/wordpress?p=4948";s:8:"contents";a:10:{s:5:"title";a:3:{s:9:"translate";i:1;s:4:"data";s:12:"SMOpcmN1bGVz";s:6:"format";s:6:"base64";}s:4:"body";a:3:{s:9:"translate";i:1;s:4:"data";s:2876:"PGg0Pldlc3RwaGFsaWFuIC0gZ3JpcyAtIDIwMTIgLSAxNi4yIGhhbmRzPC9oND4NCg0KPHN0cm9uZz5Ob21icmU8L3N0cm9uZz46IEjDqXJjdWxlcw0KPHN0cm9uZz5Bw7FvIGRlIG5hY2ltaWVudG88L3N0cm9uZz46IDIwMTIgDQo8c3Ryb25nPkNhcGE8L3N0cm9uZz46IGdyaXMgDQoNClt0aXRsZSBzaXplPSIzIl1Qcm9nZW55Wy90aXRsZV0NCg0KSGlnaGx5IHJlZmluZWQgaGltc2VsZiwgdGhlIGNoYXJtaW5nIEJsYWNrIEphY2sgbm90IG9ubHkgcGFzc2VzIG9uIGhpcyBnb29kIGxvb2tzIGJ1dCBhbHNvIGhpcyBhYmlsaXR5IHRvIGp1bXAsIGhpcyBxdWFsaXR5IG1vdmVtZW50cyBhbmQgcmlkZWFiaWxpdHkuIEhpcyBmaXJzdCBzb25zIGFuZCBkYXVnaHRlcnMsIG5vdyB1bmRlciBzYWRkbGUsIG1ha2UgYSBoaWdobHkgcHJvbWlzaW5nIGltcHJlc3Npb24uIA0KDQpCbGFjayBKYWNr4oCZcyBmb2FscyBxdWlja2x5IGZpbmQgYnV5ZXJzLiBIaXMgc29uIEJvcsOpYWwgZGVzIFByw6lzIHdhcyBzb2xkIGZvciAxMiw1MDAgU3dpc3MgRnJhbmNzIGluIDIwMTIgYXQgdGhlIFNwb3J0IEZvYWxzIEF1Y3Rpb24gaW4gU3Vyc2VlL1NVSS4gDQoNClt0aXRsZSBzaXplPSIzIl1QZWRpZ3JlZVsvdGl0bGVdDQoNCkhpcyBzaXJlIEJhbG91YmV0IGR1IFJvdWV0IHdvbiBpbmRpdmlkdWFsIE9seW1waWMgZ29sZCB3aXRoIFJvZHJpZ28gUGVzc29hL0JSQSBpbiAyMDA0IG9uIHRoZSBjb3Vyc2Ugb2YgQXRoZW5zL0dSRS4gSGUgYWxzbyB0b29rIHRoZSBXb3JsZCBDdXAgdGl0bGUgdGhyZWUgdGltZXMgaW4gYSByb3cgYW5kIHdvbiB0aGUgdW5vZmZpY2lhbCBpbmRvb3IgV29ybGQgQ2hhbXBpb25zaGlwcyB0d2ljZSBpbiAyMDAyIGFuZCAyMDAzLiBUaGUgY2hlc3RudXQgU2VsbGUgRnJhbmNhaXMgc3RhbGxpb24gd2hvIGFnYWluIGxlYWRzIHRoZSBXQkZTSCAgKFdvcmxkIEJyZWVkaW5nIEZlZGVyYXRpb24gZm9yIFNwb3J0IEhvcnNlcykgcmFua2luZyBvZiB0aGUgd29ybGTigJlzIGJlc3QganVtcGVyLW1ha2VycyDigJMgYWxzbyB0aGFua3MgdG8gQ2hhbWFuIHdobyBpcyBhbHNvIHN0YXRpb25lZCBpbiBSaWVzZW5iZWNrIOKAkyBpcyBhIEdhbG91YmV0IEEgc29uLiBHYWxvdWJldCBBLCBhIHNvbiBvZiB0aGUgdHJhZGVtYXJrIHN0YWxsaW9uIEFsbcOpIFogd2hvIHdhcyBvbiB0aGUgRnJlbmNoIGdvbGQgd2lubmluZyB0ZWFtIGF0IHRoZSAxOTgyIFdvcmxkIENoYW1waW9uc2hpcHMgb2YgRHVibGluL0lSTCB3aXRoIEdpbGxlcyBCZXJ0cmFuZCBkZSBCYWxsYW5kYSwgd29uIHRoZSBGcmVuY2ggQ2hhbXBpb25zaGlwcyBzZXZlcmFsIHRpbWVzIGFuZCBjb2xsZWN0ZWQgZG96ZW5zIG9mIGZpcnN0IHBsYWNlIHJpYmJvbnMgaW4gTmF0aW9ucyBDdXBzIGFuZCAgR3JhbmQgUHJpeC4gTW9yZSB0aGFuIDMwIG9mIGhpcyBzb25zIGFyZSBhY3RpdmUgaW4gYnJlZWRpbmcsIGluY2x1ZGluZyBV4oCZR3JhbmQgSmV0ZSwgRW9sZSBhbmQgTWVyZWRpdGggTWljaGFlbHMtQmVlcmJhdW3igJlzIFF1aWNrIFN0YXIuDQoNCkhpcyBkYW0gU3QuUHIuU3QuIFdpbnplcmluLCB3aG8gcGFzc2VkIGhlciBicm9vZG1hcmUgcGVyZm9ybWFuY2UgdGVzdCB3aXRoIG91dHN0YW5kaW5nIHNjb3JlcywgaXMgYWxzbyB0aGUgZGFtIG9mICBHdXQgTmV1ZW5ob2ZzIExldmFudGFkb3MgKGJ5IExhbmNlciBJSSkgd2hvIHdpbnMgc2hvdyBqdW1waW5nIGNsYXNzZXMgdXAgdG8gYWR2YW5jZWQgKFMqKiopIGxldmVsLCBhcyB3ZWxsIGFzIGEgc2V2ZW4teWVhciBvbGQgZnVsbCBzaXN0ZXIgb2YgQmFsb3V0ZWxsaSBuYW1lZCBHdXQgTmV1ZW5ob2ZzIEJhY2Fyb2xlL0hlbnJpayB2b24gRWNrZXJtYW5uL1NXRSB3aG8gaXMgYWxzbyBoaWdobHkgc3VjY2Vzc2Z1bCBpbiBpbnRlcm5hdGlvbmFsIGNvbXBldGl0aW9ucywgYW5kICBHdXQgTmV1ZW5ob2ZzIENhdHkgKGJ5IENyaXN0YWxsbyBJKSB3aG8gcXVhbGlmaWVkIGZvciB0aGUgQnVuZGVzY2hhbXBpb25hdC4NCg0KPGlmcmFtZSB3aWR0aD0iNTYwIiBoZWlnaHQ9IjMxNSIgc3JjPSIvL3d3dy55b3V0dWJlLW5vY29va2llLmNvbS9lbWJlZC90RkpHZ0VheHI2RT9saXN0PVVVMEhsMTJPU1ZWdUlhWDBIVXhtT3RhUSIgZnJhbWVib3JkZXI9IjAiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4=";s:6:"format";s:6:"base64";}s:7:"excerpt";a:3:{s:9:"translate";i:1;s:4:"data";s:16:"Z3JpcyAtIDIwMTI=";s:6:"format";s:6:"base64";}s:11:"original_id";a:2:{s:9:"translate";i:0;s:4:"data";i:4948;}s:16:"horse_categories";a:3:{s:9:"translate";i:1;s:4:"data";s:10:""Q3LDrWE="";s:6:"format";s:10:"csv_base64";}s:20:"horse_categories_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"55";}s:12:"horse_breeds";a:3:{s:9:"translate";i:1;s:4:"data";s:14:""Q3J1emFkbw=="";s:6:"format";s:10:"csv_base64";}s:16:"horse_breeds_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"63";}s:13:"horse_genders";a:3:{s:9:"translate";i:1;s:4:"data";s:10:""Q2Fww7Nu"";s:6:"format";s:10:"csv_base64";}s:17:"horse_genders_ids";a:2:{s:9:"translate";i:0;s:4:"data";s:2:"59";}}}', '2014-02-27 16:29:50', 0, NULL); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_layerslider` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_layerslider` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `name` varchar(100) COLLATE latin1_general_ci NOT NULL, + `data` mediumtext COLLATE latin1_general_ci NOT NULL, + `date_c` int(10) NOT NULL, + `date_m` int(11) NOT NULL, + `flag_hidden` tinyint(1) NOT NULL DEFAULT '0', + `flag_deleted` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_layerslider` +-- + +INSERT INTO `drgrp_layerslider` (`id`, `name`, `data`, `date_c`, `date_m`, `flag_hidden`, `flag_deleted`) VALUES +(1, 'Avada Full Width', '{"properties":{"title":"Avada Full Width","width":"100%","height":"400px","forceresponsive":"on","responsiveunder":"960","sublayercontainer":"960","autostart":"on","pauseonhover":"on","firstlayer":"1","animatefirstlayer":"on","twowayslideshow":"on","loops":"0","forceloopnum":"on","autopauseslideshow":"auto","youtubepreview":"maxresdefault.jpg","keybnav":"on","touchnav":"on","skin":"avada","backgroundcolor":"#f6f6f6","backgroundimage":"","sliderstyle":"","navprevnext":"on","navstartstop":"on","navbuttons":"on","circletimer":"on","thumb_nav":"hover","thumb_width":"100","thumb_height":"60","thumb_container_width":"60%","thumb_active_opacity":"35","thumb_inactive_opacity":"100","imgpreload":"on","bodyinclude":"on","yourlogo":"","yourlogostyle":"","yourlogolink":"","yourlogotarget":"_self","cbinit":"function(element) { }","cbstart":"function(data) { }","cbstop":"function(data) { }","cbpause":"function(data) { }","cbanimstart":"function(data) { }","cbanimstop":"function(data) { }","cbprev":"function(data) { }","cbnext":"function(data) { }"},"layers":[{"properties":{"3d_transitions":"","2d_transitions":"","custom_3d_transitions":"","custom_2d_transitions":"","background":"","thumbnail":"","slidedelay":"6000","new_transitions":"on","slidedirection":"right","timeshift":"0","durationin":"1500","easingin":"easeInOutQuint","delayin":"0","durationout":"1500","easingout":"easeInOutQuint","delayout":"0","layer_link":"","layer_link_target":"_self","id":"","deeplink":""},"sublayers":[{"subtitle":"Clouds","type":"img","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/slide_4.jpg","html":"","slidedirection":"fade","durationin":"1000","easingin":"easeInOutQuint","delayin":"0","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{}","top":"0px","left":"0px","style":"","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Mac","type":"img","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/mac.png","html":"","slidedirection":"left","durationin":"1500","easingin":"easeInOutQuint","delayin":"0","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{}","top":"34px","left":"506px","style":"","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"iPad","type":"img","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/ipad2.png","html":"","slidedirection":"top","durationin":"1500","easingin":"easeInOutQuint","delayin":"400","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{}","top":"157px","left":"457px","style":"","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"iPhone","type":"img","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/iphone.png","html":"","slidedirection":"right","durationin":"1500","easingin":"easeInOutQuint","delayin":"800","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{}","top":"209px","left":"403px","style":"","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Avada Wordpress Theme","type":"h1","image":"","html":"Avada Wordpress Theme","slidedirection":"top","durationin":"1000","easingin":"easeInOutQuint","delayin":"1400","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"font-family\\\\\\":\\\\\\"serif\\\\\\",\\\\\\"font-size\\\\\\":\\\\\\"40\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#333333\\\\\\"}","top":"83px","left":"1px","style":"","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Made With Care...","type":"h1","image":"","html":"Made With Care For Our Users","slidedirection":"bottom","durationin":"1000","easingin":"easeInOutQuint","delayin":"1800","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"width\\\\\\":\\\\\\"357\\\\\\",\\\\\\"height\\\\\\":\\\\\\"38\\\\\\",\\\\\\"font-size\\\\\\":\\\\\\"24\\\\\\",\\\\\\"line-height\\\\\\":\\\\\\"38\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#ffffff\\\\\\",\\\\\\"background\\\\\\":\\\\\\"#a0ce4e\\\\\\"}","top":"135px","left":"1px","style":"text-align: center; font-weight: normal;","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Lid est laborum ...","type":"p","image":"","html":"Lid est laborum dolo rumes fugats untras. Et harums ser quidem
\\r\\nrerum facilisdolores nemis omnis fugiats vitaes nemo minima
\\r\\nrerums unsers sadips amets sadips ipsums","slidedirection":"fade","durationin":"1000","easingin":"easeInOutQuint","delayin":"2200","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"color\\\\\\":\\\\\\"#333333\\\\\\"}","top":"195px","left":"2px","style":"","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Purchase Now","type":"p","image":"","html":"Purchase Now<\\/a>","slidedirection":"bottom","durationin":"2000","easingin":"easeInOutQuint","delayin":"2400","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{}","top":"279px","left":"1px","style":"","id":"","class":"","title":"","alt":"","rel":""}]},{"properties":{"3d_transitions":"","2d_transitions":"","custom_3d_transitions":"","custom_2d_transitions":"","background":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/slide_5.jpg","thumbnail":"","slidedelay":"4000","new_transitions":"on","slidedirection":"right","timeshift":"0","durationin":"1500","easingin":"easeInOutQuint","delayin":"0","durationout":"1500","easingout":"easeInOutQuint","delayout":"0","layer_link":"","layer_link_target":"_self","id":"","deeplink":""},"sublayers":[{"subtitle":"iPad","type":"img","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/ipad.png","html":"","slidedirection":"right","durationin":"2000","easingin":"easeInOutQuint","delayin":"0","rotatein":"0","scalein":".2","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{}","top":"54px","left":"-1px","style":"","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Avada Is Better ...","type":"h1","image":"","html":"Avada Is Better Than Ever","slidedirection":"top","durationin":"1000","easingin":"easeInOutQuint","delayin":"700","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"width\\\\\\":\\\\\\"295\\\\\\",\\\\\\"height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"font-size\\\\\\":\\\\\\"22px\\\\\\",\\\\\\"line-height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#a0ce4e\\\\\\",\\\\\\"background\\\\\\":\\\\\\"#333333\\\\\\"}","top":"67px","left":"666px","style":"text-align: center; font-weight: normal;","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"100% Fully Responsive","type":"h1","image":"","html":"100% Fully Responsive","slidedirection":"bottom","durationin":"1000","easingin":"easeInOutQuint","delayin":"1100","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"width\\\\\\":\\\\\\"250\\\\\\",\\\\\\"height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"font-size\\\\\\":\\\\\\"22px\\\\\\",\\\\\\"line-height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#a0ce4e\\\\\\",\\\\\\"background\\\\\\":\\\\\\"#333333\\\\\\"}","top":"106px","left":"711px","style":"text-align: center; font-weight: normal;","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"With Numerous","type":"h1","image":"","html":"With Numerous","slidedirection":"top","durationin":"1000","easingin":"easeInOutQuint","delayin":"1500","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"width\\\\\\":\\\\\\"190\\\\\\",\\\\\\"height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"font-size\\\\\\":\\\\\\"22px\\\\\\",\\\\\\"line-height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#333333\\\\\\",\\\\\\"background\\\\\\":\\\\\\"#a0ce4e\\\\\\"}","top":"175px","left":"770px","style":"text-align: center; font-weight: normal;","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Additions & Optimizations","type":"h1","image":"","html":"Additions & Optimizations","slidedirection":"bottom","durationin":"1000","easingin":"easeInOutQuint","delayin":"1800","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"width\\\\\\":\\\\\\"285\\\\\\",\\\\\\"height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"font-size\\\\\\":\\\\\\"22px\\\\\\",\\\\\\"line-height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#333333\\\\\\",\\\\\\"background\\\\\\":\\\\\\"#a0ce4e\\\\\\"}","top":"215px","left":"675px","style":"text-align: center; font-weight: normal;","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"It Doesn\\\\''t Get Better","type":"h1","image":"","html":"It Doesn\\\\''t Get Better Than This","slidedirection":"top","durationin":"1000","easingin":"easeInOutQuint","delayin":"2100","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"width\\\\\\":\\\\\\"342\\\\\\",\\\\\\"height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"font-size\\\\\\":\\\\\\"22px\\\\\\",\\\\\\"line-height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#a0ce4e\\\\\\",\\\\\\"background\\\\\\":\\\\\\"#333333\\\\\\"}","top":"289px","left":"617px","style":"text-align: center; font-weight: normal;","id":"","class":"","title":"","alt":"","rel":""}]},{"properties":{"3d_transitions":"","2d_transitions":"","custom_3d_transitions":"","custom_2d_transitions":"","background":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/slide_3.jpg","thumbnail":"","slidedelay":"4000","new_transitions":"on","slidedirection":"right","timeshift":"0","durationin":"1500","easingin":"easeInOutQuint","delayin":"0","durationout":"1500","easingout":"easeInOutQuint","delayout":"0","layer_link":"","layer_link_target":"_self","id":"","deeplink":""},"sublayers":[{"subtitle":"Create Fantastic...","type":"h1","image":"","html":"Create Fantastic Sliders With Animations","slidedirection":"top","durationin":"1000","easingin":"easeInOutQuint","delayin":"200","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"width\\\\\\":\\\\\\"430\\\\\\",\\\\\\"height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"font-size\\\\\\":\\\\\\"21px\\\\\\",\\\\\\"line-height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#ffffff\\\\\\",\\\\\\"background\\\\\\":\\\\\\"#000000\\\\\\"}","top":"82px","left":"270px","style":"text-align: center; font-weight: normal;","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Be Creative","type":"h1","image":"","html":"BE CREATIVE","slidedirection":"right","durationin":"1000","easingin":"easeInOutQuint","delayin":"700","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"font-size\\\\\\":\\\\\\"150px\\\\\\",\\\\\\"line-height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#ffffff\\\\\\"}","top":"178px","left":"81px","style":"text-align: center; font-weight: normal; text-shadow: 0px 2px 5px rgba(0, 0, 0, 1);","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"The Possibilities Are...","type":"h1","image":"","html":"The Possibilities Are Endless And Results Stunning","slidedirection":"bottom","durationin":"1000","easingin":"easeInOutQuint","delayin":"1000","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"width\\\\\\":\\\\\\"515\\\\\\",\\\\\\"height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"font-size\\\\\\":\\\\\\"21px\\\\\\",\\\\\\"line-height\\\\\\":\\\\\\"35\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#ffffff\\\\\\",\\\\\\"background\\\\\\":\\\\\\"#000000\\\\\\"}","top":"275px","left":"232px","style":"text-align: center; font-weight: normal;","id":"","class":"","title":"","alt":"","rel":""}]}]}', 1391029630, 1391029630, 0, 0), +(2, 'Avada Small Slider', '{"properties":{"title":"Avada Small Slider","width":"451px","height":"220px","responsive":"on","responsiveunder":"0","sublayercontainer":"0","autostart":"on","pauseonhover":"on","firstlayer":"1","animatefirstlayer":"on","twowayslideshow":"on","loops":"0","forceloopnum":"on","autoplayvideos":"on","autopauseslideshow":"auto","youtubepreview":"maxresdefault.jpg","keybnav":"on","touchnav":"on","skin":"borderlesslight3d","backgroundcolor":"#f6f6f6","backgroundimage":"","sliderstyle":"","navstartstop":"on","navbuttons":"on","hoverprevnext":"on","circletimer":"on","thumb_nav":"hover","thumb_width":"100","thumb_height":"60","thumb_container_width":"60%","thumb_active_opacity":"35","thumb_inactive_opacity":"100","imgpreload":"on","bodyinclude":"on","yourlogo":"","yourlogostyle":"left: 10px; top: 10px;","yourlogolink":"","yourlogotarget":"_self","cbinit":"function(element) { }","cbstart":"function(data) { }","cbstop":"function(data) { }","cbpause":"function(data) { }","cbanimstart":"function(data) { }","cbanimstop":"function(data) { }","cbprev":"function(data) { }","cbnext":"function(data) { }"},"layers":[{"properties":{"3d_transitions":"","2d_transitions":"","custom_3d_transitions":"","custom_2d_transitions":"","background":"","thumbnail":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/iphone.png","slidedelay":"4000","new_transitions":"on","slidedirection":"right","timeshift":"0","durationin":"1500","easingin":"easeInOutQuint","delayin":"0","durationout":"1500","easingout":"easeInOutQuint","delayout":"0","layer_link":"","layer_link_target":"_self","id":"","deeplink":""},"sublayers":[{"subtitle":"iPhone","type":"img","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/iphone.png","html":"","slidedirection":"right","durationin":"1000","easingin":"easeInOutQuint","delayin":"200","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{}","top":"28px","left":"73px","style":"","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Logo","type":"img","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/logo.png","html":"","slidedirection":"top","durationin":"1000","easingin":"easeInOutQuint","delayin":"500","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{}","top":"66px","left":"194px","style":"","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Wordpress Theme","type":"p","image":"","html":"Wordpress Theme","slidedirection":"bottom","durationin":"1000","easingin":"easeInOutQuint","delayin":"1000","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"font-size\\\\\\":\\\\\\"23px\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#a0ce4e\\\\\\"}","top":"114px","left":"195px","style":"font-weight: normal;","id":"","class":"","title":"","alt":"","rel":""}]},{"properties":{"3d_transitions":"","2d_transitions":"","custom_3d_transitions":"","custom_2d_transitions":"","background":"","thumbnail":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/ipad2.png","slidedelay":"4000","new_transitions":"on","slidedirection":"right","timeshift":"0","durationin":"1500","easingin":"easeInOutQuint","delayin":"0","durationout":"1500","easingout":"easeInOutQuint","delayout":"0","layer_link":"","layer_link_target":"_self","id":"","deeplink":""},"sublayers":[{"subtitle":"iPad","type":"img","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/ipad2.png","html":"","slidedirection":"right","durationin":"1000","easingin":"easeInOutQuint","delayin":"200","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{}","top":"33px","left":"40px","style":"","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Logo","type":"img","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/themes\\/avada\\/framework\\/plugins\\/LayerSlider\\/sampleslider\\/logo.png","html":"","slidedirection":"top","durationin":"1000","easingin":"easeInOutQuint","delayin":"500","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{}","top":"70px","left":"235px","style":"","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"#1 Selling Theme","type":"p","image":"","html":"#1 Selling Theme","slidedirection":"bottom","durationin":"1000","easingin":"easeInOutQuint","delayin":"1000","rotatein":"0","scalein":"1.0","slideoutdirection":"auto","durationout":"1000","easingout":"easeInOutQuint","delayout":"0","rotateout":"0","scaleout":"1.0","level":"-1","showuntil":"0","url":"","target":"_self","styles":"{\\\\\\"font-size\\\\\\":\\\\\\"23px\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#a0ce4e\\\\\\"}","top":"115px","left":"234px","style":"font-weight: normal;","id":"","class":"","title":"","alt":"","rel":""}]}]}', 1391029630, 1391029630, 0, 0), +(3, 'Portada', '{"properties":{"post_taxonomy":"0","post_orderby":"date","post_order":"DESC","post_offset":"-1","title":"Portada","width":"100%","height":"300px","responsive":"on","maxwidth":"100%","forceresponsive":"on","responsiveunder":"960","sublayercontainer":"960","autostart":"on","pauseonhover":"on","firstlayer":"1","animatefirstlayer":"on","keybnav":"on","touchnav":"on","loops":"0","forceloopnum":"on","randomslideshow":"on","skin":"avada","backgroundcolor":"","backgroundimage":"","sliderstyle":"margin: 0px;","navprevnext":"on","hoverprevnext":"on","circletimer":"on","thumb_nav":"hover","thumb_container_width":"60%","thumb_width":"100","thumb_height":"60","thumb_active_opacity":"35","thumb_inactive_opacity":"100","autoplayvideos":"on","autopauseslideshow":"auto","youtubepreview":"maxresdefault.jpg","imgpreload":"on","lazyload":"on","yourlogoId":"","yourlogo":"","yourlogostyle":"left: -10px; top: -10px;","yourlogolink":"","yourlogotarget":"_self","cbinit":"function(element) {\\r\\n\\r\\n}","cbstart":"function(data) {\\r\\n\\r\\n}","cbstop":"function(data) {\\r\\n\\r\\n}","cbpause":"function(data) {\\r\\n\\r\\n}","cbanimstart":"function(data) {\\r\\n\\r\\n}","cbanimstop":"function(data) {\\r\\n\\r\\n}","cbprev":"function(data) {\\r\\n\\r\\n}","cbnext":"function(data) {\\r\\n\\r\\n}"},"layers":[{"properties":{"post_offset":"-1","3d_transitions":"","2d_transitions":"all","custom_3d_transitions":"","custom_2d_transitions":"","backgroundId":"4612","background":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/2014\\/01\\/cropped-header-01.jpg","thumbnailId":"","thumbnail":"","slidedelay":"8000","timeshift":"0","layer_link":"","layer_link_target":"_self","id":"","deeplink":""},"sublayers":[{"subtitle":"Fondo","media":"text","type":"p","imageId":"","image":"","html":"\\r\\n","post_text_length":"","transition":"{\\\\\\"offsetxin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"offsetyin\\\\\\":\\\\\\"top\\\\\\",\\\\\\"durationin\\\\\\":\\\\\\"1500\\\\\\",\\\\\\"delayin\\\\\\":\\\\\\"500\\\\\\",\\\\\\"easingin\\\\\\":\\\\\\"easeInOutQuint\\\\\\",\\\\\\"fadein\\\\\\":true,\\\\\\"rotatein\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotatexin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotateyin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"transformoriginin\\\\\\":\\\\\\"50% 50% 0\\\\\\",\\\\\\"skewxin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"skewyin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"scalexin\\\\\\":\\\\\\"1\\\\\\",\\\\\\"scaleyin\\\\\\":\\\\\\"1\\\\\\",\\\\\\"offsetxout\\\\\\":\\\\\\"right\\\\\\",\\\\\\"offsetyout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"durationout\\\\\\":\\\\\\"1500\\\\\\",\\\\\\"showuntil\\\\\\":\\\\\\"0\\\\\\",\\\\\\"easingout\\\\\\":\\\\\\"easeOutQuint\\\\\\",\\\\\\"fadeout\\\\\\":true,\\\\\\"rotateout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotatexout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotateyout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"transformoriginout\\\\\\":\\\\\\"50% 50% 0\\\\\\",\\\\\\"skewxout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"skewyout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"scalexout\\\\\\":\\\\\\"1\\\\\\",\\\\\\"scaleyout\\\\\\":\\\\\\"1\\\\\\",\\\\\\"parallaxlevel\\\\\\":\\\\\\"0\\\\\\"}","url":"","target":"_self","styles":"{\\\\\\"width\\\\\\":\\\\\\"100%\\\\\\",\\\\\\"height\\\\\\":\\\\\\"33%\\\\\\"}","top":"85%","left":"50%","style":"background-color:rgba(0,0,0,0.4);","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Cr\\u00eda de caballos para competici\\u00f3n","media":"text","type":"h1","imageId":"4708","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/2014\\/02\\/texto-banner-portada1.png","html":"Cr\\u00eda de caballos para competici\\u00f3n","post_text_length":"","transition":"{\\\\\\"offsetxin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"offsetyin\\\\\\":\\\\\\"bottom\\\\\\",\\\\\\"durationin\\\\\\":\\\\\\"3000\\\\\\",\\\\\\"delayin\\\\\\":\\\\\\"500\\\\\\",\\\\\\"easingin\\\\\\":\\\\\\"easeInOutQuint\\\\\\",\\\\\\"fadein\\\\\\":true,\\\\\\"rotatein\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotatexin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotateyin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"transformoriginin\\\\\\":\\\\\\"50% 50% 0\\\\\\",\\\\\\"skewxin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"skewyin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"scalexin\\\\\\":\\\\\\"1\\\\\\",\\\\\\"scaleyin\\\\\\":\\\\\\"1\\\\\\",\\\\\\"offsetxout\\\\\\":\\\\\\"right\\\\\\",\\\\\\"offsetyout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"durationout\\\\\\":\\\\\\"1500\\\\\\",\\\\\\"showuntil\\\\\\":\\\\\\"0\\\\\\",\\\\\\"easingout\\\\\\":\\\\\\"easeOutCubic\\\\\\",\\\\\\"fadeout\\\\\\":true,\\\\\\"rotateout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotatexout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotateyout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"transformoriginout\\\\\\":\\\\\\"50% 50% 0\\\\\\",\\\\\\"skewxout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"skewyout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"scalexout\\\\\\":\\\\\\"1\\\\\\",\\\\\\"scaleyout\\\\\\":\\\\\\"1\\\\\\",\\\\\\"parallaxlevel\\\\\\":\\\\\\"0\\\\\\"}","url":"","target":"_self","styles":"{\\\\\\"width\\\\\\":\\\\\\"100%\\\\\\",\\\\\\"height\\\\\\":\\\\\\"50%\\\\\\",\\\\\\"padding-top\\\\\\":\\\\\\"30px\\\\\\",\\\\\\"padding-bottom\\\\\\":\\\\\\"0\\\\\\",\\\\\\"font-family\\\\\\":\\\\\\"\\\\\\\\\\\\\\"Roboto\\\\\\\\\\\\\\", Arial, Helvetica, sans-serif\\\\\\",\\\\\\"font-size\\\\\\":\\\\\\"36\\\\\\",\\\\\\"line-height\\\\\\":\\\\\\"44\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#ffffff\\\\\\"}","top":"99%","left":"50%","style":"text-shadow:2px 2px 1px #333333; text-align: center; text-transform: uppercase; ","id":"","class":"","title":"","alt":"","rel":""}]},{"properties":{"post_offset":"-1","3d_transitions":"","2d_transitions":"all","custom_3d_transitions":"","custom_2d_transitions":"","backgroundId":"4718","background":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/2014\\/02\\/stables1.jpg","thumbnailId":"","thumbnail":"","slidedelay":"8000","timeshift":"0","layer_link":"","layer_link_target":"_self","id":"","deeplink":""},"sublayers":[{"subtitle":"Fondo","media":"text","type":"p","imageId":"","image":"","html":"","post_text_length":"","transition":"{\\\\\\"offsetxin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"offsetyin\\\\\\":\\\\\\"bottom\\\\\\",\\\\\\"durationin\\\\\\":\\\\\\"1500\\\\\\",\\\\\\"delayin\\\\\\":\\\\\\"250\\\\\\",\\\\\\"easingin\\\\\\":\\\\\\"easeInOutQuint\\\\\\",\\\\\\"fadein\\\\\\":true,\\\\\\"rotatein\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotatexin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotateyin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"transformoriginin\\\\\\":\\\\\\"50% 50% 0\\\\\\",\\\\\\"skewxin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"skewyin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"scalexin\\\\\\":\\\\\\"1\\\\\\",\\\\\\"scaleyin\\\\\\":\\\\\\"1\\\\\\",\\\\\\"offsetxout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"offsetyout\\\\\\":\\\\\\"bottom\\\\\\",\\\\\\"durationout\\\\\\":\\\\\\"1500\\\\\\",\\\\\\"showuntil\\\\\\":\\\\\\"0\\\\\\",\\\\\\"easingout\\\\\\":\\\\\\"easeInOutQuint\\\\\\",\\\\\\"fadeout\\\\\\":true,\\\\\\"rotateout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotatexout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotateyout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"transformoriginout\\\\\\":\\\\\\"50% 50% 0\\\\\\",\\\\\\"skewxout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"skewyout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"scalexout\\\\\\":\\\\\\"1\\\\\\",\\\\\\"scaleyout\\\\\\":\\\\\\"1\\\\\\",\\\\\\"parallaxlevel\\\\\\":\\\\\\"0\\\\\\"}","url":"","target":"_self","styles":"{\\\\\\"width\\\\\\":\\\\\\"100%\\\\\\",\\\\\\"height\\\\\\":\\\\\\"33%\\\\\\"}","top":"85%","left":"50%","style":"background-color:rgba(0,0,0,0.4);","id":"","class":"","title":"","alt":"","rel":""},{"subtitle":"Instalaciones","media":"text","type":"h1","imageId":"","image":"","html":"Instalaciones para el desarrollo y el entrenamiento de los caballos ","post_text_length":"","transition":"{\\\\\\"offsetxin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"offsetyin\\\\\\":\\\\\\"top\\\\\\",\\\\\\"durationin\\\\\\":\\\\\\"1500\\\\\\",\\\\\\"delayin\\\\\\":\\\\\\"300\\\\\\",\\\\\\"easingin\\\\\\":\\\\\\"easeInOutQuint\\\\\\",\\\\\\"fadein\\\\\\":true,\\\\\\"rotatein\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotatexin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotateyin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"transformoriginin\\\\\\":\\\\\\"50% 50% 0\\\\\\",\\\\\\"skewxin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"skewyin\\\\\\":\\\\\\"0\\\\\\",\\\\\\"scalexin\\\\\\":\\\\\\"1\\\\\\",\\\\\\"scaleyin\\\\\\":\\\\\\"1\\\\\\",\\\\\\"offsetxout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"offsetyout\\\\\\":\\\\\\"top\\\\\\",\\\\\\"durationout\\\\\\":\\\\\\"1500\\\\\\",\\\\\\"showuntil\\\\\\":\\\\\\"0\\\\\\",\\\\\\"easingout\\\\\\":\\\\\\"easeInOutQuint\\\\\\",\\\\\\"fadeout\\\\\\":true,\\\\\\"rotateout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotatexout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"rotateyout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"transformoriginout\\\\\\":\\\\\\"50% 50% 0\\\\\\",\\\\\\"skewxout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"skewyout\\\\\\":\\\\\\"0\\\\\\",\\\\\\"scalexout\\\\\\":\\\\\\"1\\\\\\",\\\\\\"scaleyout\\\\\\":\\\\\\"1\\\\\\",\\\\\\"parallaxlevel\\\\\\":\\\\\\"0\\\\\\"}","url":"","target":"_self","styles":"{\\\\\\"width\\\\\\":\\\\\\"100%\\\\\\",\\\\\\"font-family\\\\\\":\\\\\\"\\\\\\\\\\\\\\"Roboto\\\\\\\\\\\\\\", Arial, Helvetica, sans-serif\\\\\\",\\\\\\"font-size\\\\\\":\\\\\\"36\\\\\\",\\\\\\"line-height\\\\\\":\\\\\\"44\\\\\\",\\\\\\"color\\\\\\":\\\\\\"#ffffff\\\\\\"}","top":"85%","left":"50%","wordwrap":"on","style":"text-shadow:2px 2px 1px #333333; text-align: center; text-transform: uppercase; ","id":"","class":"","title":"","alt":"","rel":""}]}]}', 1392736626, 1393604521, 0, 0); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_links` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_links` ( + `link_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `link_url` varchar(255) NOT NULL DEFAULT '', + `link_name` varchar(255) NOT NULL DEFAULT '', + `link_image` varchar(255) NOT NULL DEFAULT '', + `link_target` varchar(25) NOT NULL DEFAULT '', + `link_description` varchar(255) NOT NULL DEFAULT '', + `link_visible` varchar(20) NOT NULL DEFAULT 'Y', + `link_owner` bigint(20) unsigned NOT NULL DEFAULT '1', + `link_rating` int(11) NOT NULL DEFAULT '0', + `link_updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `link_rel` varchar(255) NOT NULL DEFAULT '', + `link_notes` mediumtext NOT NULL, + `link_rss` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`link_id`), + KEY `link_visible` (`link_visible`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_links` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_options` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_options` ( + `option_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `option_name` varchar(64) NOT NULL DEFAULT '', + `option_value` longtext NOT NULL, + `autoload` varchar(20) NOT NULL DEFAULT 'yes', + PRIMARY KEY (`option_id`), + UNIQUE KEY `option_name` (`option_name`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1615 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_options` +-- + +INSERT INTO `drgrp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES +(1, 'siteurl', 'http://127.0.0.1:4001/wordpress', 'yes'), +(2, 'blogname', 'Double R Group', 'yes'), +(3, 'blogdescription', 'Cría y alta competición de caballos', 'yes'), +(4, 'users_can_register', '0', 'yes'), +(5, 'admin_email', 'darranz@rodax-software.com', 'yes'), +(6, 'start_of_week', '1', 'yes'), +(7, 'use_balanceTags', '0', 'yes'), +(8, 'use_smilies', '1', 'yes'), +(9, 'require_name_email', '1', 'yes'), +(10, 'comments_notify', '1', 'yes'), +(11, 'posts_per_rss', '10', 'yes'), +(12, 'rss_use_excerpt', '1', 'yes'), +(13, 'mailserver_url', 'mail.example.com', 'yes'), +(14, 'mailserver_login', 'login@example.com', 'yes'), +(15, 'mailserver_pass', 'password', 'yes'), +(16, 'mailserver_port', '110', 'yes'), +(17, 'default_category', '1', 'yes'), +(18, 'default_comment_status', 'closed', 'yes'), +(19, 'default_ping_status', 'open', 'yes'), +(20, 'default_pingback_flag', '1', 'yes'), +(21, 'posts_per_page', '10', 'yes'), +(22, 'date_format', 'j F, Y', 'yes'), +(23, 'time_format', 'g:i a', 'yes'), +(24, 'links_updated_date_format', 'j F, Y g:i a', 'yes'), +(25, 'links_recently_updated_prepend', '', 'yes'), +(26, 'links_recently_updated_append', '', 'yes'), +(27, 'links_recently_updated_time', '120', 'yes'), +(28, 'comment_moderation', '1', 'yes'), +(29, 'moderation_notify', '1', 'yes'), +(30, 'permalink_structure', '/%postname%/', 'yes'), +(31, 'gzipcompression', '0', 'yes'), +(32, 'hack_file', '0', 'yes'), +(33, 'blog_charset', 'UTF-8', 'yes'), +(34, 'moderation_keys', '', 'no'), +(35, 'active_plugins', 'a:10:{i:0;s:29:"gravityforms/gravityforms.php";i:1;s:27:"fusion-core/fusion-core.php";i:2;s:52:"onet-regenerate-thumbnails/onet-regen-thumbnails.php";i:3;s:38:"post-duplicator/m4c-postduplicator.php";i:4;s:40:"sitepress-multilingual-cms/sitepress.php";i:5;s:41:"wp-google-maps-pro/wp-google-maps-pro.php";i:6;s:23:"wpml-cms-nav/plugin.php";i:8;s:28:"wpml-sticky-links/plugin.php";i:9;s:34:"wpml-string-translation/plugin.php";i:10;s:38:"wpml-translation-management/plugin.php";}', 'yes'), +(36, 'home', 'http://127.0.0.1:4001/wordpress', 'yes'), +(37, 'category_base', '', 'yes'), +(38, 'ping_sites', 'http://rpc.pingomatic.com/', 'yes'), +(39, 'advanced_edit', '0', 'yes'), +(40, 'comment_max_links', '2', 'yes'), +(41, 'gmt_offset', '', 'yes'), +(42, 'default_email_category', '1', 'yes'), +(43, 'recently_edited', '', 'no'), +(44, 'template', 'Avada', 'yes'), +(45, 'stylesheet', 'double-r-group', 'yes'), +(46, 'comment_whitelist', '1', 'yes'), +(47, 'blacklist_keys', '', 'no'), +(48, 'comment_registration', '', 'yes'), +(49, 'html_type', 'text/html', 'yes'), +(50, 'use_trackback', '0', 'yes'), +(51, 'default_role', 'subscriber', 'yes'), +(52, 'db_version', '26691', 'yes'), +(53, 'uploads_use_yearmonth_folders', '1', 'yes'), +(54, 'upload_path', '', 'yes'), +(55, 'blog_public', '1', 'yes'), +(56, 'default_link_category', '2', 'yes'), +(57, 'show_on_front', 'page', 'yes'), +(58, 'tag_base', '', 'yes'), +(59, 'show_avatars', '1', 'yes'), +(60, 'avatar_rating', 'G', 'yes'), +(61, 'upload_url_path', '', 'yes'), +(62, 'thumbnail_size_w', '150', 'yes'), +(63, 'thumbnail_size_h', '150', 'yes'), +(64, 'thumbnail_crop', '1', 'yes'), +(65, 'medium_size_w', '300', 'yes'), +(66, 'medium_size_h', '300', 'yes'), +(67, 'avatar_default', 'mystery', 'yes'), +(68, 'large_size_w', '1024', 'yes'), +(69, 'large_size_h', '1024', 'yes'), +(70, 'image_default_link_type', 'file', 'yes'), +(71, 'image_default_size', '', 'yes'), +(72, 'image_default_align', '', 'yes'), +(73, 'close_comments_for_old_posts', '', 'yes'), +(74, 'close_comments_days_old', '14', 'yes'), +(75, 'thread_comments', '1', 'yes'), +(76, 'thread_comments_depth', '5', 'yes'), +(77, 'page_comments', '', 'yes'), +(78, 'comments_per_page', '50', 'yes'), +(79, 'default_comments_page', 'newest', 'yes'), +(80, 'comment_order', 'asc', 'yes'), +(81, 'sticky_posts', 'a:0:{}', 'yes'), +(82, 'widget_categories', 'a:3:{i:2;a:4:{s:5:"title";s:11:"Categorías";s:5:"count";i:0;s:12:"hierarchical";i:0;s:8:"dropdown";i:0;}i:7;a:4:{s:5:"title";s:0:"";s:5:"count";i:0;s:12:"hierarchical";i:0;s:8:"dropdown";i:0;}s:12:"_multiwidget";i:1;}', 'yes'), +(83, 'widget_text', 'a:10:{i:6;a:3:{s:5:"title";s:0:"";s:4:"text";s:1099:"[accordian][toggle title="Our Company Mission"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\r\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\r\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\r\n[toggle title="We Can Deliver On Projects"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle][/accordian]";s:6:"filter";b:0;}i:7;a:3:{s:5:"title";s:0:"";s:4:"text";s:489:"[testimonials]\r\n[testimonial name="John Doe" company="My Company"]Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consec tetur, adipisci velit, sed quia non numquam eius modi tempora voluptas amets unser. [/testimonial]\r\n[testimonial name="Luke Beck" company="Theme Fusion"]Aliquam erat volutpat. Quisque at est id ligula facilisis laoreet eget pulvinar nibh. Suspendisse at ultrices dui. Curabitur ac felis arcu sadips ipsums fugiats nemis.[/testimonial]\r\n[/testimonials]";s:6:"filter";b:0;}i:3;a:3:{s:5:"title";s:0:"";s:4:"text";s:350:"\r\n

Lorem ipsum ex vix illud nonummy, novum tation et his. At vix scriptaset patrioque scribentur, at pro fugit erts verterem molestiae, sed et vivendo ali Lorem ipsum ex vix illud nonummy, novum tation et his. At vix scripta patrioque scribentur...

";s:6:"filter";b:1;}i:10;a:3:{s:5:"title";s:23:"This Is A Custom Widget";s:4:"text";s:364:"This Sliding Bar can be switched on or off in theme options, and can take any widget you throw at it or even fill it with your custom HTML Code. Its perfect for grabbing the attention of your viewers. Choose between 1, 2, 3 or 4 columns, set the background color, widget divider color, activate transparency, a top border or fully disable it on desktop and mobile.";s:6:"filter";b:0;}i:11;a:3:{s:5:"title";s:23:"This Is A Custom Widget";s:4:"text";s:364:"This Sliding Bar can be switched on or off in theme options, and can take any widget you throw at it or even fill it with your custom HTML Code. Its perfect for grabbing the attention of your viewers. Choose between 1, 2, 3 or 4 columns, set the background color, widget divider color, activate transparency, a top border or fully disable it on desktop and mobile.";s:6:"filter";b:0;}i:8;a:3:{s:5:"title";b:0;s:4:"text";s:826:"[accordian][toggle title="Our Company Mission"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\r\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\r\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\r\n[/accordian]";s:6:"filter";b:0;}i:5;a:3:{s:5:"title";s:0:"";s:4:"text";s:489:"[testimonials]\r\n[testimonial name="John Doe" company="My Company"]Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consec tetur, adipisci velit, sed quia non numquam eius modi tempora voluptas amets unser. [/testimonial]\r\n[testimonial name="Luke Beck" company="Theme Fusion"]Aliquam erat volutpat. Quisque at est id ligula facilisis laoreet eget pulvinar nibh. Suspendisse at ultrices dui. Curabitur ac felis arcu sadips ipsums fugiats nemis.[/testimonial]\r\n[/testimonials]";s:6:"filter";b:0;}i:9;a:3:{s:5:"title";s:0:"";s:4:"text";s:1099:"[accordian][toggle title="Our Company Mission"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\r\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\r\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\r\n[toggle title="We Can Deliver On Projects"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle][/accordian]";s:6:"filter";b:0;}i:4;a:3:{s:5:"title";s:17:"Basic Text Widget";s:4:"text";s:189:"Fugiat dapibus, tellus ac cursus commo do, mauris sit condime ntum nibh, uter sitse fermentum massa justo vitaes amet r quia consequuntur magni uns mauris sit condime ntum nibh, uter sitse.";s:6:"filter";b:0;}s:12:"_multiwidget";i:1;}', 'yes'), +(84, 'widget_rss', 'a:1:{s:12:"_multiwidget";i:1;}', 'yes'), +(85, 'uninstall_plugins', 'a:1:{s:136:"D:/Trabajo/DoubleRGroup/InstantWP_4.3.1/iwpserver/htdocs/wordpress/wp-content/themes/avada/framework/plugins/LayerSlider/layerslider.php";s:29:"layerslider_uninstall_scripts";}', 'no'), +(86, 'timezone_string', 'Europe/Madrid', 'yes'), +(87, 'page_for_posts', '5009', 'yes'), +(88, 'page_on_front', '5037', 'yes'), +(89, 'default_post_format', '0', 'yes'), +(90, 'link_manager_enabled', '0', 'yes'), +(91, 'initial_db_version', '26691', 'yes'), +(92, 'drgrp_user_roles', 'a:5:{s:13:"administrator";a:2:{s:4:"name";s:13:"Administrator";s:12:"capabilities";a:62:{s:13:"switch_themes";b:1;s:11:"edit_themes";b:1;s:16:"activate_plugins";b:1;s:12:"edit_plugins";b:1;s:10:"edit_users";b:1;s:10:"edit_files";b:1;s:14:"manage_options";b:1;s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:6:"import";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:8:"level_10";b:1;s:7:"level_9";b:1;s:7:"level_8";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;s:12:"delete_users";b:1;s:12:"create_users";b:1;s:17:"unfiltered_upload";b:1;s:14:"edit_dashboard";b:1;s:14:"update_plugins";b:1;s:14:"delete_plugins";b:1;s:15:"install_plugins";b:1;s:13:"update_themes";b:1;s:14:"install_themes";b:1;s:11:"update_core";b:1;s:10:"list_users";b:1;s:12:"remove_users";b:1;s:9:"add_users";b:1;s:13:"promote_users";b:1;s:18:"edit_theme_options";b:1;s:13:"delete_themes";b:1;s:6:"export";b:1;}}s:6:"editor";a:2:{s:4:"name";s:6:"Editor";s:12:"capabilities";a:34:{s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;}}s:6:"author";a:2:{s:4:"name";s:6:"Author";s:12:"capabilities";a:10:{s:12:"upload_files";b:1;s:10:"edit_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:4:"read";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;s:22:"delete_published_posts";b:1;}}s:11:"contributor";a:2:{s:4:"name";s:11:"Contributor";s:12:"capabilities";a:5:{s:10:"edit_posts";b:1;s:4:"read";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;}}s:10:"subscriber";a:2:{s:4:"name";s:10:"Subscriber";s:12:"capabilities";a:2:{s:4:"read";b:1;s:7:"level_0";b:1;}}}', 'yes'), +(93, '_transient_random_seed', 'cf91b4ad4d1d6f3c2406fe01e7cbe141', 'yes'), +(94, 'widget_search', 'a:1:{s:12:"_multiwidget";i:1;}', 'yes'), +(95, 'widget_recent-posts', 'a:6:{i:2;a:3:{s:5:"title";s:18:"Noticias recientes";s:6:"number";i:5;s:9:"show_date";b:0;}i:5;a:3:{s:5:"title";s:12:"Recent Posts";s:6:"number";i:5;s:9:"show_date";b:0;}i:6;a:3:{s:5:"title";s:0:"";s:6:"number";i:5;s:9:"show_date";b:0;}i:3;a:2:{s:5:"title";s:0:"";s:6:"number";i:5;}i:7;a:3:{s:5:"title";s:18:"Noticias recientes";s:6:"number";i:5;s:9:"show_date";b:0;}s:12:"_multiwidget";i:1;}', 'yes'), +(96, 'widget_recent-comments', 'a:1:{s:12:"_multiwidget";i:1;}', 'yes'), +(97, 'widget_archives', 'a:2:{i:2;a:3:{s:5:"title";s:19:"Archivo de noticias";s:5:"count";i:0;s:8:"dropdown";i:0;}s:12:"_multiwidget";i:1;}', 'yes'), +(98, 'widget_meta', 'a:1:{s:12:"_multiwidget";i:1;}', 'yes'), +(99, 'sidebars_widgets', 'a:15:{s:19:"wp_inactive_widgets";a:14:{i:0;s:21:"recent_works-widget-6";i:1;s:21:"recent_works-widget-5";i:2;s:6:"text-6";i:3;s:6:"text-7";i:4;s:6:"text-3";i:5;s:7:"text-10";i:6;s:7:"text-11";i:7;s:6:"text-5";i:8;s:6:"text-9";i:9;s:6:"text-4";i:10;s:12:"categories-7";i:11;s:14:"recent-posts-5";i:12;s:14:"recent-posts-6";i:13;s:14:"recent-posts-3";}s:18:"avada-blog-sidebar";a:4:{i:0;s:19:"ad_125_125-widget-3";i:1;s:14:"recent-posts-2";i:2;s:12:"categories-2";i:3;s:10:"archives-2";}s:21:"avada-footer-widget-1";a:1:{i:0;s:10:"nav_menu-2";}s:21:"avada-footer-widget-2";a:1:{i:0;s:14:"recent-posts-7";}s:21:"avada-footer-widget-3";a:1:{i:0;s:21:"contact_info-widget-5";}s:21:"avada-footer-widget-4";a:0:{}s:25:"avada-slidingbar-widget-1";a:0:{}s:25:"avada-slidingbar-widget-2";a:0:{}s:25:"avada-slidingbar-widget-3";a:0:{}s:25:"avada-slidingbar-widget-4";a:0:{}s:18:"drg-horses-sidebar";a:1:{i:0;s:14:"gform_widget-3";}s:35:"avada-custom-sidebar-contactsidebar";a:0:{}s:36:"avada-custom-sidebar-homepagesidebar";a:0:{}s:18:"orphaned_widgets_1";a:3:{i:0;s:6:"text-8";i:1;s:21:"contact_info-widget-4";i:2;s:14:"gform_widget-2";}s:13:"array_version";i:3;}', 'yes'), +(1269, '_site_transient_timeout_poptags_40cd750bba9870f18aada2478b24840a', '1393425232', 'yes'), +(1270, '_site_transient_poptags_40cd750bba9870f18aada2478b24840a', 'a:40:{s:6:"widget";a:3:{s:4:"name";s:6:"widget";s:4:"slug";s:6:"widget";s:5:"count";s:4:"3898";}s:4:"post";a:3:{s:4:"name";s:4:"Post";s:4:"slug";s:4:"post";s:5:"count";s:4:"2456";}s:6:"plugin";a:3:{s:4:"name";s:6:"plugin";s:4:"slug";s:6:"plugin";s:5:"count";s:4:"2344";}s:5:"admin";a:3:{s:4:"name";s:5:"admin";s:4:"slug";s:5:"admin";s:5:"count";s:4:"1930";}s:5:"posts";a:3:{s:4:"name";s:5:"posts";s:4:"slug";s:5:"posts";s:5:"count";s:4:"1856";}s:7:"sidebar";a:3:{s:4:"name";s:7:"sidebar";s:4:"slug";s:7:"sidebar";s:5:"count";s:4:"1583";}s:7:"twitter";a:3:{s:4:"name";s:7:"twitter";s:4:"slug";s:7:"twitter";s:5:"count";s:4:"1329";}s:6:"google";a:3:{s:4:"name";s:6:"google";s:4:"slug";s:6:"google";s:5:"count";s:4:"1325";}s:8:"comments";a:3:{s:4:"name";s:8:"comments";s:4:"slug";s:8:"comments";s:5:"count";s:4:"1310";}s:6:"images";a:3:{s:4:"name";s:6:"images";s:4:"slug";s:6:"images";s:5:"count";s:4:"1260";}s:4:"page";a:3:{s:4:"name";s:4:"page";s:4:"slug";s:4:"page";s:5:"count";s:4:"1225";}s:5:"image";a:3:{s:4:"name";s:5:"image";s:4:"slug";s:5:"image";s:5:"count";s:4:"1121";}s:9:"shortcode";a:3:{s:4:"name";s:9:"shortcode";s:4:"slug";s:9:"shortcode";s:5:"count";s:4:"1000";}s:8:"facebook";a:3:{s:4:"name";s:8:"Facebook";s:4:"slug";s:8:"facebook";s:5:"count";s:3:"982";}s:5:"links";a:3:{s:4:"name";s:5:"links";s:4:"slug";s:5:"links";s:5:"count";s:3:"974";}s:3:"seo";a:3:{s:4:"name";s:3:"seo";s:4:"slug";s:3:"seo";s:5:"count";s:3:"950";}s:9:"wordpress";a:3:{s:4:"name";s:9:"wordpress";s:4:"slug";s:9:"wordpress";s:5:"count";s:3:"844";}s:7:"gallery";a:3:{s:4:"name";s:7:"gallery";s:4:"slug";s:7:"gallery";s:5:"count";s:3:"821";}s:6:"social";a:3:{s:4:"name";s:6:"social";s:4:"slug";s:6:"social";s:5:"count";s:3:"780";}s:3:"rss";a:3:{s:4:"name";s:3:"rss";s:4:"slug";s:3:"rss";s:5:"count";s:3:"722";}s:7:"widgets";a:3:{s:4:"name";s:7:"widgets";s:4:"slug";s:7:"widgets";s:5:"count";s:3:"686";}s:6:"jquery";a:3:{s:4:"name";s:6:"jquery";s:4:"slug";s:6:"jquery";s:5:"count";s:3:"681";}s:5:"pages";a:3:{s:4:"name";s:5:"pages";s:4:"slug";s:5:"pages";s:5:"count";s:3:"678";}s:5:"email";a:3:{s:4:"name";s:5:"email";s:4:"slug";s:5:"email";s:5:"count";s:3:"623";}s:4:"ajax";a:3:{s:4:"name";s:4:"AJAX";s:4:"slug";s:4:"ajax";s:5:"count";s:3:"615";}s:5:"media";a:3:{s:4:"name";s:5:"media";s:4:"slug";s:5:"media";s:5:"count";s:3:"595";}s:10:"javascript";a:3:{s:4:"name";s:10:"javascript";s:4:"slug";s:10:"javascript";s:5:"count";s:3:"572";}s:5:"video";a:3:{s:4:"name";s:5:"video";s:4:"slug";s:5:"video";s:5:"count";s:3:"570";}s:10:"buddypress";a:3:{s:4:"name";s:10:"buddypress";s:4:"slug";s:10:"buddypress";s:5:"count";s:3:"541";}s:4:"feed";a:3:{s:4:"name";s:4:"feed";s:4:"slug";s:4:"feed";s:5:"count";s:3:"539";}s:7:"content";a:3:{s:4:"name";s:7:"content";s:4:"slug";s:7:"content";s:5:"count";s:3:"530";}s:5:"photo";a:3:{s:4:"name";s:5:"photo";s:4:"slug";s:5:"photo";s:5:"count";s:3:"522";}s:4:"link";a:3:{s:4:"name";s:4:"link";s:4:"slug";s:4:"link";s:5:"count";s:3:"506";}s:6:"photos";a:3:{s:4:"name";s:6:"photos";s:4:"slug";s:6:"photos";s:5:"count";s:3:"505";}s:5:"login";a:3:{s:4:"name";s:5:"login";s:4:"slug";s:5:"login";s:5:"count";s:3:"471";}s:4:"spam";a:3:{s:4:"name";s:4:"spam";s:4:"slug";s:4:"spam";s:5:"count";s:3:"458";}s:5:"stats";a:3:{s:4:"name";s:5:"stats";s:4:"slug";s:5:"stats";s:5:"count";s:3:"453";}s:8:"category";a:3:{s:4:"name";s:8:"category";s:4:"slug";s:8:"category";s:5:"count";s:3:"452";}s:7:"youtube";a:3:{s:4:"name";s:7:"youtube";s:4:"slug";s:7:"youtube";s:5:"count";s:3:"436";}s:7:"comment";a:3:{s:4:"name";s:7:"comment";s:4:"slug";s:7:"comment";s:5:"count";s:3:"432";}}', 'yes'), +(101, 'cron', 'a:5:{i:1393611849;a:1:{s:29:"icl_hourly_translation_pickup";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:6:"hourly";s:4:"args";a:0:{}s:8:"interval";i:3600;}}}i:1393614900;a:1:{s:20:"wp_maybe_auto_update";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:10:"twicedaily";s:4:"args";a:0:{}s:8:"interval";i:43200;}}}i:1393621493;a:4:{s:19:"wp_scheduled_delete";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:5:"daily";s:4:"args";a:0:{}s:8:"interval";i:86400;}}s:16:"wp_version_check";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:10:"twicedaily";s:4:"args";a:0:{}s:8:"interval";i:43200;}}s:17:"wp_update_plugins";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:10:"twicedaily";s:4:"args";a:0:{}s:8:"interval";i:43200;}}s:16:"wp_update_themes";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:10:"twicedaily";s:4:"args";a:0:{}s:8:"interval";i:43200;}}}i:1393673993;a:1:{s:30:"wp_scheduled_auto_draft_delete";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:5:"daily";s:4:"args";a:0:{}s:8:"interval";i:86400;}}}s:7:"version";i:2;}', 'yes'), +(102, '_site_transient_update_core', 'O:8:"stdClass":4:{s:7:"updates";a:2:{i:0;O:8:"stdClass":10:{s:8:"response";s:6:"latest";s:8:"download";s:49:"http://es.wordpress.org/wordpress-3.8.1-es_ES.zip";s:6:"locale";s:5:"es_ES";s:8:"packages";O:8:"stdClass":5:{s:4:"full";s:49:"http://es.wordpress.org/wordpress-3.8.1-es_ES.zip";s:10:"no_content";b:0;s:11:"new_bundled";b:0;s:7:"partial";b:0;s:8:"rollback";b:0;}s:7:"current";s:5:"3.8.1";s:7:"version";s:5:"3.8.1";s:11:"php_version";s:5:"5.2.4";s:13:"mysql_version";s:3:"5.0";s:11:"new_bundled";s:3:"3.8";s:15:"partial_version";s:0:"";}i:1;O:8:"stdClass":10:{s:8:"response";s:6:"latest";s:8:"download";s:41:"https://wordpress.org/wordpress-3.8.1.zip";s:6:"locale";s:5:"en_US";s:8:"packages";O:8:"stdClass":5:{s:4:"full";s:41:"https://wordpress.org/wordpress-3.8.1.zip";s:10:"no_content";s:52:"https://wordpress.org/wordpress-3.8.1-no-content.zip";s:11:"new_bundled";s:53:"https://wordpress.org/wordpress-3.8.1-new-bundled.zip";s:7:"partial";b:0;s:8:"rollback";b:0;}s:7:"current";s:5:"3.8.1";s:7:"version";s:5:"3.8.1";s:11:"php_version";s:5:"5.2.4";s:13:"mysql_version";s:3:"5.0";s:11:"new_bundled";s:3:"3.8";s:15:"partial_version";s:0:"";}}s:12:"last_checked";i:1393585363;s:15:"version_checked";s:5:"3.8.1";s:12:"translations";a:0:{}}', 'yes'), +(1545, '_site_transient_timeout_theme_roots', '1393587161', 'yes'), +(1546, '_site_transient_theme_roots', 'a:5:{s:5:"avada";s:7:"/themes";s:14:"double-r-group";s:7:"/themes";s:14:"twentyfourteen";s:7:"/themes";s:14:"twentythirteen";s:7:"/themes";s:12:"twentytwelve";s:7:"/themes";}', 'yes'), +(106, '_site_transient_update_themes', 'O:8:"stdClass":4:{s:12:"last_checked";i:1393585362;s:7:"checked";a:5:{s:5:"avada";s:5:"3.3.1";s:14:"double-r-group";s:0:"";s:14:"twentyfourteen";s:3:"1.0";s:14:"twentythirteen";s:3:"1.1";s:12:"twentytwelve";s:3:"1.3";}s:8:"response";a:0:{}s:12:"translations";a:0:{}}', 'yes'), +(353, '_site_transient_timeout_browser_043122d71f0e1c9aa31b4150c975ea1b', '1392996777', 'yes'), +(354, '_site_transient_browser_043122d71f0e1c9aa31b4150c975ea1b', 'a:9:{s:8:"platform";s:7:"Windows";s:4:"name";s:7:"Firefox";s:7:"version";s:4:"26.0";s:10:"update_url";s:23:"http://www.firefox.com/";s:7:"img_src";s:50:"http://s.wordpress.org/images/browsers/firefox.png";s:11:"img_src_ssl";s:49:"https://wordpress.org/images/browsers/firefox.png";s:15:"current_version";s:2:"16";s:7:"upgrade";b:0;s:8:"insecure";b:0;}', 'yes'), +(111, 'can_compress_scripts', '1', 'yes'), +(1571, '_transient_timeout_feed_mod_ac0b00fe65abe10e0c5b588f3ed8c7ca', '1393631684', 'no'), +(1572, '_transient_feed_mod_ac0b00fe65abe10e0c5b588f3ed8c7ca', '1393588484', 'no'), +(1569, '_transient_timeout_feed_ac0b00fe65abe10e0c5b588f3ed8c7ca', '1393631684', 'no'); +INSERT INTO `drgrp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES +(1570, '_transient_feed_ac0b00fe65abe10e0c5b588f3ed8c7ca', 'a:4:{s:5:"child";a:1:{s:0:"";a:1:{s:3:"rss";a:1:{i:0;a:6:{s:4:"data";s:3:"\n\n\n";s:7:"attribs";a:1:{s:0:"";a:1:{s:7:"version";s:3:"2.0";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:1:{s:0:"";a:1:{s:7:"channel";a:1:{i:0;a:6:{s:4:"data";s:51:"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:3:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:14:"WordPress News";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:25:"http://wordpress.org/news";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:14:"WordPress News";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:13:"lastBuildDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 23 Jan 2014 20:54:06 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"language";a:1:{i:0;a:5:{s:4:"data";s:5:"en-US";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:9:"generator";a:1:{i:0;a:5:{s:4:"data";s:39:"http://wordpress.org/?v=3.9-alpha-27234";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"item";a:10:{i:0;a:6:{s:4:"data";s:42:"\n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:35:"WordPress 3.8.1 Maintenance Release";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:50:"http://wordpress.org/news/2014/01/wordpress-3-8-1/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:59:"http://wordpress.org/news/2014/01/wordpress-3-8-1/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 23 Jan 2014 20:37:49 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:8:"Releases";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"http://wordpress.org/news/?p=3063";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:358:"After six weeks and more than 9.3 million downloads of WordPress 3.8, we’re pleased to announce WordPress 3.8.1 is now available. Version 3.8.1 is a maintenance releases that addresses 31 bugs in 3.8, including various fixes and improvements for the new dashboard design and new themes admin screen. An issue with taxonomy queries in WP_Query […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"Andrew Nacin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:3809:"

After six weeks and more than 9.3 million downloads of WordPress 3.8, we’re pleased to announce WordPress 3.8.1 is now available.

\n

Version 3.8.1 is a maintenance releases that addresses 31 bugs in 3.8, including various fixes and improvements for the new dashboard design and new themes admin screen. An issue with taxonomy queries in WP_Query was resolved. And if you’ve been frustrated by submit buttons that won’t do anything when you click on them (or thought you were going crazy, like some of us), we’ve found and fixed this “dead zone” on submit buttons.

\n

It also contains a fix for embedding tweets (by placing the URL to the tweet on its own line), which was broken due to a recent Twitter API change. (For more on Embeds, see the Codex.)

\n

For a full list of changes, consult the list of tickets and the changelog. There’s also a detailed summary for developers on the development blog.

\n

If you are one of the millions already running WordPress 3.8, we will start rolling out automatic background updates for WordPress 3.8.1 in the next few hours. For sites that support them, of course.

\n

Download WordPress 3.8.1 or venture over to Dashboard → Updates and simply click “Update Now.”

\n

Thanks to all of these fine individuals for contributing to 3.8.1:

\n

Aaron Jorbin, Allan Collins, Andrew Nacin, Andrew Ozz, Aubrey Portwood, Ben Dunkle, Connor Jennings, Dion Hulse, Dominik Schilling, fboender, Janneke Van Dorpe, janrenn, Joe Dolson, John Blackbourn, José Pino, Konstantin Kovshenin, Matias Ventura, Matthew Haines-Young, Matt Thomas, Mel Choyce, Mohammad Jangda, Morgan Estes, nivijah, Scott Taylor, Sergey Biryukov, undergroundnetwork, and Yuri Victor.

\n

WordPress three eight one
\nWe heard you didn’t like bugs
\nSo we took them out

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:55:"http://wordpress.org/news/2014/01/wordpress-3-8-1/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:1;a:6:{s:4:"data";s:42:"\n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:26:"WordPress 3.8 “Parker”";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:41:"http://wordpress.org/news/2013/12/parker/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:50:"http://wordpress.org/news/2013/12/parker/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 12 Dec 2013 17:00:06 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:8:"Releases";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"http://wordpress.org/news/?p=2765";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:354:"Version 3.8 of WordPress, named “Parker” in honor of Charlie Parker, bebop innovator, is available for download or update in your WordPress dashboard. We hope you’ll think this is the most beautiful update yet. Introducing a modern new design WordPress has gotten a facelift. 3.8 brings a fresh new look to the entire admin dashboard. […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:14:"Matt Mullenweg";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:18740:"

Version 3.8 of WordPress, named “Parker” in honor of Charlie Parker, bebop innovator, is available for download or update in your WordPress dashboard. We hope you’ll think this is the most beautiful update yet.

\n
\n

Introducing a modern new design

\n

overview

\n

WordPress has gotten a facelift. 3.8 brings a fresh new look to the entire admin dashboard. Gone are overbearing gradients and dozens of shades of grey — bring on a bigger, bolder, more colorful design!

\n

about-modern-wordpress

\n

Modern aesthetic

\n

The new WordPress dashboard has a fresh, uncluttered design that embraces clarity and simplicity.

\n

Clean typography

\n

The Open Sans typeface provides simple, friendly text that is optimized for both desktop and mobile viewing. It’s even open source, just like WordPress.

\n

Refined contrast

\n

We think beautiful design should never sacrifice legibility. With superior contrast and large, comfortable type, the new design is easy to read and a pleasure to navigate.

\n
\n

WordPress on every device

\n

responsiveWe all access the internet in different ways. Smartphone, tablet, notebook, desktop — no matter what you use, WordPress will adapt and you’ll feel right at home.

\n

High definition at high speed

\n

WordPress is sharper than ever with new vector-based icons that scale to your screen. By ditching pixels, pages load significantly faster, too.

\n
\n

Admin color schemes to match your personality

\n

colors

\n

WordPress just got a colorful new update. We’ve included eight new admin color schemes so you can pick the one that suits you best.

\n

Color schemes can be previewed and changed from your Profile page.

\n
\n

Refined theme management

\n

themesThe new themes screen lets you survey your themes at a glance. Or want more information? Click to discover more. Then sit back and use your keyboard’s navigation arrows to flip through every theme you’ve got.

\n

Smoother widget experience

\n

Drag-drag-drag. Scroll-scroll-scroll. Widget management can be complicated. With the new design, we’ve worked to streamline the widgets screen.

\n

Have a large monitor? Multiple widget areas stack side-by-side to use the available space. Using a tablet? Just tap a widget to add it.

\n
\n

Twenty Fourteen, a sleek new magazine theme

\n

The new Twenty Fourteen theme displayed on a laptop. tablet and phone

\n

Turn your blog into a magazine

\n

Create a beautiful magazine-style site with WordPress and Twenty Fourteen. Choose a grid or a slider to display featured content on your homepage. Customize your site with three widget areas or change your layout with two page templates.

\n

With a striking design that does not compromise our trademark simplicity, Twenty Fourteen is our most intrepid default theme yet.

\n
\n

Beginning of a new era

\n

This release was led by Matt Mullenweg. This is our second release using the new plugin-first development process, with a much shorter timeframe than in the past. We think it’s been going great. You can check out the features currently in production on the make/core blog.

\n

There are 188 contributors with props in this release:

\n

Aaron Holbrook, Aaron Jorbin, adamsilverstein, admiralthrawn, Alexander Hoereth, Allan Collins, Amy Hendrix (sabreuse), Andrew Nacin, Andrew Ozz, Andrey Kabakchiev, Andy Peatling, Ankit Gade, Anton Timmermans, Arkadiusz Rzadkowolski, Aubrey Portwood, bassgang, Ben Dunkle, Billy (bananastalktome), binarymoon, Brady Vercher, Brandon Kraft, Brian Richards, Bryan Petty, Calin Don, Carl Danley, Caroline Moore, Caspie, Chris Jean, Clinton Montague, cojennin, Corphi, Dan Bernardic, Daniel Dudzic, Daryl Koopersmith, datafeedr, Dave Martin, Dave Whitley, Dion Hulse, Dominik Schilling, Doug Wollison, Drew Jaynes, dziudek, Eric Andrew Lewis, Eric Mann, Erick Hitter, Evan Solomon, Faison, fboender, Frank Klein, Gary Jones, Gary Pendergast, Gennady Kovshenin, George Stephanis, gnarf37, Gregory Karpinsky, hanni, Helen Hou-Sandi, Ian Dunn, Ipstenu (Mika Epstein), Isaac Keyet, J.D. Grimes, Jack Lenox, janhenckens, Janneke Van Dorpe, janrenn, Jeff Bowen, Jeff Chandler, Jen Mylo, Jeremy Buller, Jeremy Felt, Jeremy Herve, Jeremy Pry, Jesper Johansen (jayjdk), jhned, jim912, Joan Artes, Joe Dolson, Joen Asmussen, John Blackbourn, John Fish, John James Jacoby, Jon Cave, Joost de Valk, Joshua Abenazer, Junko Nukaga, Justin de Vesine, Justin Sainton, K. Adam White, Kailey (trepmal), Kat Hagan, Kate Whitley, Kelly Dwan, Kim Parsell, Kirk Wight, Konstantin Dankov, Konstantin Kovshenin, Konstantin Obenland, Krzysiek Drozdz, Lance Willett, Lee Willis, lite3, Luc Princen, Lutz Schroer, Mako, Mark Jaquith, Mark McWilliams, Marko Heijnen, Matt Mullenweg, Matt Thomas, Matt Wiebe, Matthew Denton, Matthew Haines-Young, Matías Ventura, megane9988, Mel Choyce, micahwave, Michael Cain, Michael Erlewine, Michel - xiligroup dev, Michelle Langston, Mike Burns, Mike Hansen, Mike Little, Mike Schroder, Milan Dinic, Mohammad Jangda, Morgan Estes, moto hachi, Naoko Takano, Neil Pie, Nick Daugherty, Nick Halsey, Nikolay Bachiyski, ninio, ninnypants, nivijah, nofearinc, Nowell VanHoesen, odyssey, OriginalEXE, Pascal Birchler, Paul de Wouters, pavelevap, Peter Westwood, Piet, Ptah Dunbar, Raam Dev, Rachel Carden, rachelbaker, Radices, Ram Ratan Maurya, Remkus de Vries, Rescuework Support, Ricky Lee Whittemore, Robert Dall, Robert Wetzlmayr, PHP-Programmierer, Rodrigo Primo, Ryan Boren, Samuel Wood, sanchothefat, sboisvert, Scott Basgaard, Scott Reilly, Scott Taylor, scribu, Sean Hayes, Sergey Biryukov, Shaun Andrews, Sheri Bigelow (designsimply), ShinichiN, Simon Wheatley, Siobhan, Siobhan Bamber (siobhyb), sirbrillig, solarissmoke, Stephen Edgar, Stephen Harris, Steven Word, Takashi Irie, Takayuki Miyauchi, Takuma Morikawa, Thomas Guillot, tierra, Till Krüss, TLA Media, TobiasBg, tommcfarlin, Torsten Landsiedel, Tracy Rotton, trishasalas, Tyler Smith, Ulrich, undergroundnetwork, Vladimir, Weston Ruter, Yoav Farhi, yonasy, Yuri Victor, and Zack Tollman. Also thanks to Ben Morrison and Christine Webb for help with the video.

\n

Thanks for choosing WordPress. See you soon for version 3.9!

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:46:"http://wordpress.org/news/2013/12/parker/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:2;a:6:{s:4:"data";s:45:"\n \n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:7:"3.8 RC2";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:42:"http://wordpress.org/news/2013/12/3-8-rc2/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:51:"http://wordpress.org/news/2013/12/3-8-rc2/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 10 Dec 2013 01:08:38 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:11:"Development";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:8:"Releases";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"http://wordpress.org/news/?p=2805";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:343:"Release candidate 2 of WordPress 3.8 is now available for download. This is the last pre-release, and we expect it to be effectively identical to what’s officially released to the public on Thursday. This means if you are a plugin or theme developer, start your engines! (If they’re not going already.) Lots of admin code […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:14:"Matt Mullenweg";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:1180:"

Release candidate 2 of WordPress 3.8 is now available for download. This is the last pre-release, and we expect it to be effectively identical to what’s officially released to the public on Thursday.

\n

This means if you are a plugin or theme developer, start your engines! (If they’re not going already.) Lots of admin code has changed so it’s especially important to see if your plugin works well within the new admin design and layout, and update the “Tested up to:” part of your plugin readme.txt.

\n

If there is something in your plugin that you’re unable to fix, or if you think you’ve found a bug, join us in #wordpress-dev in IRC, especially if you’re able to join during the dev chat on Wednesday, or post in the alpha/beta forum. The developers and designers who worked on this release are happy to help anyone update their code before the 3.8 release.

\n

Happy hacking, everybody!

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:47:"http://wordpress.org/news/2013/12/3-8-rc2/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:3;a:6:{s:4:"data";s:45:"\n \n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:17:"WordPress 3.8 RC1";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:45:"http://wordpress.org/news/2013/12/3-8-almost/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:54:"http://wordpress.org/news/2013/12/3-8-almost/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 04 Dec 2013 09:54:48 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:11:"Development";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:8:"Releases";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"http://wordpress.org/news/?p=2760";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:345:"We’re entering the quiet but busy part of a release, whittling down issues to bring you all of the new features you’re excited about with the stability you expect from WordPress. There are just a few days from the “code freeze” for our 3.8 release, which includes a number of exciting enhancements, so the focus […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:14:"Matt Mullenweg";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:1873:"

We’re entering the quiet but busy part of a release, whittling down issues to bring you all of the new features you’re excited about with the stability you expect from WordPress. There are just a few days from the “code freeze” for our 3.8 release, which includes a number of exciting enhancements, so the focus is on identifying any major issues and resolving them as soon as possible.

\n

If you’ve ever wondered about how to contribute to WordPress, here’s a time you can: download this release candidate and use it in as many ways as you can imagine. Try to break it, and if you do, let us know how you did it so we can make sure it never happens again. If you work for a web host, this is the release you should test as much as possible and start getting your automatic upgrade systems and 1-click installers ready.

\n

Download WordPress 3.8 RC1 (zip) or use the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”).

\n

If you think you’ve found a bug, you can post to the Alpha/Beta area in the support forums. Or, if you’re comfortable writing a reproducible bug report, file one on the WordPress Trac. There, you can also find a list of known bugs and everything we’ve fixed so far.

\n

We’re so close to the
\nfinish line, jump in and help
\ngood karma is yours.

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:50:"http://wordpress.org/news/2013/12/3-8-almost/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:4;a:6:{s:4:"data";s:45:"\n \n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:20:"WordPress 3.8 Beta 1";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:55:"http://wordpress.org/news/2013/11/wordpress-3-8-beta-1/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:64:"http://wordpress.org/news/2013/11/wordpress-3-8-beta-1/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 21 Nov 2013 05:21:56 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:11:"Development";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:8:"Releases";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"http://wordpress.org/news/?p=2754";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:307:"The first beta of the 3.8 is now available, and the next dates to watch out for are code freeze on December 5th and a final release on December 12th. 3.8 brings together several of the features as plugins projects and while this isn’t our first rodeo, expect this to be more beta than usual. […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:14:"Matt Mullenweg";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:2236:"

The first beta of the 3.8 is now available, and the next dates to watch out for are code freeze on December 5th and a final release on December 12th.

\n

3.8 brings together several of the features as plugins projects and while this isn’t our first rodeo, expect this to be more beta than usual. The headline things to test out in this release are:

\n
    \n
  • The new admin design, especially the responsive aspect of it. Try it out on different devices and browsers, see how it goes, especially the more complex pages like widgets or seldom-looked-at-places like Press This. Color schemes, which you can change on your profile, have also been spruced up.
  • \n
  • The dashboard homepage has been refreshed, poke and prod it.
  • \n
  • Choosing themes under Appearance is completely different, try to break it however possible.
  • \n
  • There’s a new default theme, Twenty Fourteen.
  • \n
  • Over 250 issues closed already.
  • \n
\n

Given how many things in the admin have changed it’s extra super duper important to test as many plugins and themes with admin pages against the new stuff. Also if you’re a developer consider how you can make your admin interface fit the MP6 aesthetic better.

\n

As always, if you think you’ve found a bug, you can post to the Alpha/Beta area in the support forums. Or, if you’re comfortable writing a reproducible bug report, file one on the WordPress Trac. There, you can also find a list of known bugs and everything we’ve fixed so far.

\n

Download WordPress 3.8 Beta 1 (zip) or use the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”).

\n

Alphabet soup of
\nPlugins as features galore
\nThe future is here

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:60:"http://wordpress.org/news/2013/11/wordpress-3-8-beta-1/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:5;a:6:{s:4:"data";s:45:"\n \n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:35:"WordPress 3.7.1 Maintenance Release";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:50:"http://wordpress.org/news/2013/10/wordpress-3-7-1/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:59:"http://wordpress.org/news/2013/10/wordpress-3-7-1/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 29 Oct 2013 21:04:59 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:8:"Releases";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:8:"Security";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"http://wordpress.org/news/?p=2745";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:371:"WordPress 3.7.1 is now available! This maintenance release addresses 11 bugs in WordPress 3.7, including: Images with captions no longer appear broken in the visual editor. Allow some sites running on old or poorly configured servers to continue to check for updates from WordPress.org. Avoid fatal errors with certain plugins that were incorrectly calling some […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"Andrew Nacin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:1594:"

WordPress 3.7.1 is now available! This maintenance release addresses 11 bugs in WordPress 3.7, including:

\n
    \n
  • Images with captions no longer appear broken in the visual editor.
  • \n
  • Allow some sites running on old or poorly configured servers to continue to check for updates from WordPress.org.
  • \n
  • Avoid fatal errors with certain plugins that were incorrectly calling some WordPress functions too early.
  • \n
  • Fix hierarchical sorting in get_pages(), exclusions in wp_list_categories(), and in_category() when called with empty values.
  • \n
  • Fix a warning that may occur in certain setups while performing a search, and a few other notices.
  • \n
\n

For a full list of changes, consult the list of tickets and the changelog.

\n

If you are one of the nearly two million already running WordPress 3.7, we will start rolling out the all-new automatic background updates for WordPress 3.7.1 in the next few hours. For sites that support them, of course.

\n

Download WordPress 3.7.1 or venture over to Dashboard → Updates and simply click “Update Now.”

\n

Just a few fixes
\nYour new update attitude:
\nZero clicks given

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:55:"http://wordpress.org/news/2013/10/wordpress-3-7-1/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:6;a:6:{s:4:"data";s:42:"\n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:25:"WordPress 3.7 “Basie”";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:40:"http://wordpress.org/news/2013/10/basie/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:49:"http://wordpress.org/news/2013/10/basie/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 24 Oct 2013 22:35:10 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:8:"Releases";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"http://wordpress.org/news/?p=2736";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:357:"Version 3.7 of WordPress, named “Basie” in honor of Count Basie, is available for download or update in your WordPress dashboard. This release features some of the most important architectural updates we’ve made to date. Here are the big ones: Updates while you sleep: With WordPress 3.7, you don’t have to lift a finger to […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:14:"Matt Mullenweg";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:17229:"

Version 3.7 of WordPress, named “Basie” in honor of Count Basie, is available for download or update in your WordPress dashboard. This release features some of the most important architectural updates we’ve made to date. Here are the big ones:

\n
    \n
  • Updates while you sleep: With WordPress 3.7, you don’t have to lift a finger to apply maintenance and security updates. Most sites are now able to automatically apply these updates in the background. The update process also has been made even more reliable and secure, with dozens of new checks and safeguards.
  • \n
  • Stronger password recommendations: Your password is your site’s first line of defense. It’s best to create passwords that are complex, long, and unique. To that end, our password meter has been updated in WordPress 3.7 to recognize common mistakes that can weaken your password: dates, names, keyboard patterns (123456789), and even pop culture references.
  • \n
  • Better global support: Localized versions of WordPress will receive faster and more complete translations. WordPress 3.7 adds support for automatically installing the right language files and keeping them up to date, a boon for the many millions who use WordPress in a language other than English.
  • \n
\n

For developers there are lots of options around how to control the new updates feature, including allowing it to handle major upgrades as well as minor ones, more sophisticated date query support, and multisite improvements. As always, if you’re hungry for more dive into the Codex or browse the over 400 closed tickets on Trac.

\n

A New Wave

\n

This release was led by Andrew Nacin, backed up by Dion Hulse and Jon Cave. This is our first release using the new plugin-first development process, with a much shorter timeframe than in the past. (3.6 was released in August.) The 3.8 release, due in December, will continue this plugin-led development cycle that gives much more autonomy to plugin leads and allows us to decouple feature development from a release. You can follow this grand experiment, and what we’re learning from it, on the make/core blog. There are 211 contributors with props in this release:

\n

Aaron BrazellAaron D. CampbellAaron HolbrookAaron JorbinadamsilversteinAlexander HoerethAlex Mills (Viper007Bond)Amy Hendrix (sabreuse)andg, Andrew NacinAndrew NorcrossAndrew OzzAndrew SpittleaskapacheatimmerBarryBeau Lebensben.moodyBen MillerBernhard RiedlBFTrick, Billy (bananastalktome)bmbBrandon KraftbrianhoggBrian RichardsBryan PettyCarl DanleyCharlesClarksonChip BennettChoubyChris Olbekson, Chris RudzkicoderaaronCoen JacobsColin RobinsoncyoniteDaan KortenbachDaniel BachhuberDaniel ConvissordartissDaryl Koopersmith, Dave RossDavid LaiettaDion HulsedllhDominik Schilling (ocean90)dpashDrew JaynesDrProtocolsDustin FilippinidzverEdward Caissieenej, Eric Andrew LewisEric MannEvan SolomonfaishalFaisonFoofyFrankie JarrettFrank KleinGary CaoGary PendergastGaya Kessler, George StephanisGizburdtgoldenapplesgradyetcGregory CorneliusGustavo BordonihakreHelen Hou-SandiIan DunnIpstenu (Mika Epstein)itinerant, J.D. Grimesjakub.tyrchaJames CollinsJen MyloJeremy BullerJeremy FeltJesper Johansen (jayjdk)Joe HoyleJoey KudishJohn Beales, John Blackbourn (johnbillion)John FishJohn James JacobyJohn P. BlochJonas Bolinder (jond3r)Jonathan ChristopherJonathan DesrosiersJon Cave, Jon LynchJoost de ValkJoseph ScottJosh BetzJustin de VesineJustin SaintonK.Adam WhiteKailey (trepmal)KetwarookevinBKim Parsellkitchin, Konstantin KovsheninKonstantin ObenlandkoopersmithKurt PayneLance WillettLee Willis (leewillis77)lessbloatLew AyotteLuke Gedeon, Marcin PietrzakMarco CimminoMarco GalassoMark JaquithMark McWilliamsMarko HeijnenMel ChoyceMichael BeckwithMike Hansen, Mike SchinkelMike SchroderMilan Dinicmitcho (Michael Yoshitaka Erlewine)Mr PapaNaoko TakanoNaomiNashwan DoaqanNateJacobsnathanrice, Niall KennedyNick DaughertyNick HalseyNick MomrikNikhil Vimal (NikV)Nikolay BachiyskinoahsilversteinnofearincnukaganullvariableOleg Butuzov, Paolo BelcastroParhamPaul BironPaul de WouterspavelevappeterjaapPeter WestwoodPhilip Arthur MoorePippin WilliamsonplochaPollett, Ptah DunbarRami YushuvaevRasheed BydousiRayBernardrborenReuben Gundayrfair404Richard TapeRick RadkoRobert ChapinRobert Dall, Rodrigo PrimoRon RennickrpattilloRyan BorenRyan McCueSam HotchkissScott ReillyscottswebScott Taylorscribuscruffian, Seisuke Kuraishi (tenpura)Sergey BiryukovShinichiNSimon ProsserSimon WheatleySiobhanSiobhan Bamber (siobhyb)sirzoorosolarissmoke, Stephanie LearyStephen Edgar (@netweb)Stephen Harrisstrangerstudiossweetie089swissspidyTakayuki MiyauchiTakuma MorikawaTaylor Lovett, tivnetTobiasBgTom AugertoschoTravis SmithUlrich SossouvericgarVinod DalviWeston RuterwikicmsWill NorrisWojtek Szkutnikwycks, Yoav Farhi, and Yuri Victor.

\n

Enjoy what may be one of your last few manual updates. See you soon for version 3.8!

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:45:"http://wordpress.org/news/2013/10/basie/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:7;a:6:{s:4:"data";s:45:"\n \n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:33:"WordPress 3.7 Release Candidate 2";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:68:"http://wordpress.org/news/2013/10/wordpress-3-7-release-candidate-2/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:77:"http://wordpress.org/news/2013/10/wordpress-3-7-release-candidate-2/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 23 Oct 2013 00:05:30 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:11:"Development";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:8:"Releases";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"http://wordpress.org/news/?p=2729";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:417:"The second release candidate of WordPress 3.7 is now available for testing! Those of you already testing WordPress 3.7 will be updated automatically to RC2. (Nice.) If you’d like to start testing, there’s no time like the present! Try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”) or download the release candidate here (zip). Please post to the Alpha/Beta […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"Andrew Nacin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:1183:"

The second release candidate of WordPress 3.7 is now available for testing!

\n

Those of you already testing WordPress 3.7 will be updated automatically to RC2. (Nice.) If you’d like to start testing, there’s no time like the present! Try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”) or download the release candidate here (zip). Please post to the Alpha/Beta area in the support forums if you think you’ve found a bug, and if any known issues are raised, you’ll be able to find them here.

\n

Developers, please test your plugins and themes against WordPress 3.7. If there is a compatibility issue, let us know as soon as possible so we can deal with it before the final release.

\n

For more on WordPress 3.7, check out the announcement post for Release Candidate 1.

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:73:"http://wordpress.org/news/2013/10/wordpress-3-7-release-candidate-2/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:8;a:6:{s:4:"data";s:45:"\n \n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:18:"Upcoming WordCamps";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:55:"http://wordpress.org/news/2013/10/upcoming-wordcamps-4/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:64:"http://wordpress.org/news/2013/10/upcoming-wordcamps-4/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 22 Oct 2013 19:25:26 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:9:"Community";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:8:"WordCamp";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"http://wordpress.org/news/?p=2723";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:368:"WordCamps are casual, locally-organized conferences that celebrate everything related to WordPress, and are a great opportunity to meet other WordPress users and professionals in your community. This has been a great year for WordCamps — there have been 56 so far in more than 20 countries, and there another 15 on the calendar before the year’s […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:8:"Jen Mylo";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:3584:"

WordCamps are casual, locally-organized conferences that celebrate everything related to WordPress, and are a great opportunity to meet other WordPress users and professionals in your community. This has been a great year for WordCamps — there have been 56 so far in more than 20 countries, and there another 15 on the calendar before the year’s over. If there’s one near you, check it out! In addition to getting to know your local WordPress community, most WordCamps attract some traveling visitors a well, giving you the chance to meet contributors to the WordPress open source project and get involved yourself.

\n

Here are the WordCamps on the schedule for the rest of this year.

\n

October 25-27: WordCamp Boston, Boston, MA, USA
\nOctober 25-26: WordCamp Malaga, Spain
\nOctober 26: WordCamp Nepal, Kathmandu, Nepal
\nOctober 26: WordCamp Sofia, Bulgaria
\nNovember 7: WordCamp Cape Town, South Africa
\nNovember 9: WordCamp Porto, Portugal
\nNovember 9-10: WordCamp Kenya, Nairobi, Kenya
\nNovember 15: WordCamp Edmonton, AB, Canada
\nNovember 16-17: WordCamp Orlando, FL, USA
\nNovember 16: WordCamp Denver, CO, USA
\nNovember 23-24: WordCamp London, UK
\nNovember 23-24: WordCamp Raleigh, NC, USA
\nNovember 23: WordCamp São Paulo, Brazil
\nDecember 14: WordCamp Las Vegas, NV, USA
\nDecember 14-15: WordCamp Sevilla, Spain

\n

No WordCamps on this list in your area? Not to worry! There are thriving WordPress meetups all over the world where you can meet like-minded people, and we maintain a library of WordCamp videos at WordPress.tv.

\n

Get Involved

\n
    \n
  • If you’re interested in organizing a WordCamp in your area, check out our WordCamp planning site.
  • \n
  • If you’re interested in starting a WordPress meetup in your area, let us know and we can set up a group on meetup.com for you.
  • \n
  • And speaking of WordCamp videos, we’ve recently enabled volunteer-generated subtitles/closed captioning of the videos on WordPress.tv to make them more accessible. Interested in helping? Check out the WordPress.tv subtitling instructions.
  • \n
\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:60:"http://wordpress.org/news/2013/10/upcoming-wordcamps-4/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:9;a:6:{s:4:"data";s:45:"\n \n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:31:"WordPress 3.7 Release Candidate";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:66:"http://wordpress.org/news/2013/10/wordpress-3-7-release-candidate/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:75:"http://wordpress.org/news/2013/10/wordpress-3-7-release-candidate/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 18 Oct 2013 19:52:14 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:11:"Development";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:8:"Releases";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"http://wordpress.org/news/?p=2718";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:331:"The first release candidate for WordPress 3.7 is now available! In RC 1, we’ve made some adjustments to the update process to make it more reliable than ever. We hope to ship WordPress 3.7 next week, but we need your help to get there. If you haven’t tested 3.7 yet, there’s no time like the present. (Please, […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"Andrew Nacin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:2274:"

The first release candidate for WordPress 3.7 is now available!

\n

In RC 1, we’ve made some adjustments to the update process to make it more reliable than ever. We hope to ship WordPress 3.7 next week, but we need your help to get there. If you haven’t tested 3.7 yet, there’s no time like the present. (Please, not on a production site, unless you’re adventurous.)

\n

WordPress 3.7 introduces automatic background updates for security and minor releases (like updating from 3.7 to 3.7.1). These are really easy to test  — RC 1 will update every 12 hours or so to the latest development version, and then email you the results. (You may get two emails: one for debugging, and one all users of 3.7 will receive.) If something went wrong, you can report it.

\n

Think you’ve found a bug? Please post to the Alpha/Beta area in the support forums. If any known issues come up, you’ll be able to find them here.

\n

To test WordPress 3.7 RC1, try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”). Or you can download the release candidate here (zip). If you’d like to learn more about what’s new in WordPress 3.7, visit the awesome About screen in your dashboard ( → About in the toolbar). There, you can also see if your install is eligible for background updates. WordPress won’t automatically update, for example, if you’re using version control like Subversion or Git.

\n

Developers, please test your plugins and themes against WordPress 3.7, so that if there is a compatibility issue, we can figure it out before the final release. Make sure you post any issues to the support forums.

\n

WordPress three seven
\nA self-updating engine
\nLies beneath the hood

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:71:"http://wordpress.org/news/2013/10/wordpress-3-7-release-candidate/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}}s:27:"http://www.w3.org/2005/Atom";a:1:{s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:3:{s:4:"href";s:31:"http://wordpress.org/news/feed/";s:3:"rel";s:4:"self";s:4:"type";s:19:"application/rss+xml";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:44:"http://purl.org/rss/1.0/modules/syndication/";a:2:{s:12:"updatePeriod";a:1:{i:0;a:5:{s:4:"data";s:6:"hourly";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:15:"updateFrequency";a:1:{i:0;a:5:{s:4:"data";s:1:"1";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}}}}}}}s:4:"type";i:128;s:7:"headers";a:8:{s:6:"server";s:5:"nginx";s:4:"date";s:29:"Fri, 28 Feb 2014 11:58:01 GMT";s:12:"content-type";s:23:"text/xml; charset=UTF-8";s:10:"connection";s:5:"close";s:4:"vary";s:15:"Accept-Encoding";s:10:"x-pingback";s:36:"http://wordpress.org/news/xmlrpc.php";s:13:"last-modified";s:29:"Thu, 23 Jan 2014 20:54:06 GMT";s:4:"x-nc";s:11:"HIT lax 250";}s:5:"build";s:14:"20130911030210";}', 'no'); +INSERT INTO `drgrp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES +(1575, '_transient_timeout_feed_mod_867bd5c64f85878d03a060509cd2f92c', '1393631685', 'no'), +(1576, '_transient_feed_mod_867bd5c64f85878d03a060509cd2f92c', '1393588485', 'no'), +(1573, '_transient_timeout_feed_867bd5c64f85878d03a060509cd2f92c', '1393631685', 'no'); +INSERT INTO `drgrp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES +(1574, '_transient_feed_867bd5c64f85878d03a060509cd2f92c', 'a:4:{s:5:"child";a:1:{s:0:"";a:1:{s:3:"rss";a:1:{i:0;a:6:{s:4:"data";s:3:"\n\n\n";s:7:"attribs";a:1:{s:0:"";a:1:{s:7:"version";s:3:"2.0";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:1:{s:0:"";a:1:{s:7:"channel";a:1:{i:0;a:6:{s:4:"data";s:61:"\n \n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:1:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:16:"WordPress Planet";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:28:"http://planet.wordpress.org/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"language";a:1:{i:0;a:5:{s:4:"data";s:2:"en";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:47:"WordPress Planet - http://planet.wordpress.org/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"item";a:50:{i:0;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:89:"WPTavern: WordPress.com Partners With Hosted E-Commerce Solutions to Launch Online Stores";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17767";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:222:"http://wptavern.com/wordpress-com-partners-with-hosted-e-commerce-solutions-to-launch-online-stores?utm_source=rss&utm_medium=rss&utm_campaign=wordpress-com-partners-with-hosted-e-commerce-solutions-to-launch-online-stores";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:5095:"

WordPress.com made a big move to branch out into hosted e-commerce this week. For $299/year, Business users get unlimited access to premium themes, unlimited storage, live chat and email support, custom domains, no ads and the newest feature: “hassle-free” e-commerce.

\n

The company opted to offer its new online stores via partnerships with three hosted e-commerce providers: Ecwid, Shopify, and ShopLocket. Additional and/or monthly fees are also applicable, depending on the store provider selected.

\n

ecommerce

\n

WordPress.com E-Commerce Excludes Native WordPress Solutions

\n

Notably absent from its partners are any native WordPress e-commerce plugins. This isn’t surprising, given that Automattic has historically favored SaaS solutions when it comes to WordPress products.

\n

The new offering was not without criticism from those who had hoped to see a few of WordPress’ high quality e-commerce plugins thrown into the mix. Commenting on the announcement post, WordPress developer Brent Shepherd said:

\n

It’s incredibly exciting to see WordPress.com offer eCommerce, but a real shame to see the many excellent open-source options snubbed (including those built specifically for WordPress).

\n

I understand the many very good reasons why it makes sense to partner with existing hosted services, but I hope that one day, we’ll see WooCommerce, Easy Digital Downloads (EDD) and other open-source eCommerce options alongside these initial launch partners.

\n

This is a point of contention for those who would like to see more fluidity for users transitioning between WordPress.com and self-hosted WordPress installations. A native WordPress e-commerce option might make it easier to transition stores that have outgrown the hosted solution.

\n

Whereas some have perceived the decision to partner with outside e-commerce providers as an outright snubbing of WordPress’ home grown solutions, the reality is that most WordPress.com users probably don’t care what’s under the hood to power their stores. If they did, they would likely be more inclined to go the self-hosted route.

\n

WordPress.com was created to help make the process of setting up and hosting a WordPress blog virtually painless for those who don’t want to dive into the technical details of setup and maintenance. The e-commerce partners they have selected have a similar audience of sellers who do not wish to be bothered with the technical burden of hosting their own e-commerce installations.

\n

The Rising Demand for Hosted E-Commerce

\n

WordPress.com’s $299/year price point is actually quite tempting for those who simply want to marry a hosted WordPress blog to a hosted store under one domain. This product attracts those who prefer to offload the burden of PCI compliance, SSL certificates, payment gateway maintenance and everything else required for selling online.

\n

Granular control of individual product display is limited to shortcode attributes within the WordPress.com stores, but customers are more than happy to trade deeper level customization for convenience. Aside from slapping a “Pay Now” Paypal button on a website, most modern e-commerce implementations require a tech-savvy administrator who isn’t afraid to tackle a few challenges. A hosted storefront is a more approachable option than the prospect of having to learn everything involved. It’s also more affordable than hiring a developer.

\n

Last year we featured Cart66′s launch as a fully managed WordPress e-commerce platform. With Automattic getting into the game, you know there’s a clear demand for this. People are looking to seamlessly couple the power of WordPress publishing with an online storefront and they’re willing to pay for convenience. As more retailers turn to the internet to expand their sales to a global audience, the demand for hosted e-commerce solutions will continue to rise. Any company that can provide a painless experience for customers will take a huge slice of this market.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 28 Feb 2014 00:58:44 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:1;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:75:"WPTavern: How To Redirect Automatic Update Email Notifications In WordPress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17934";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:194:"http://wptavern.com/how-to-redirect-automatic-update-email-notifications-in-wordpress?utm_source=rss&utm_medium=rss&utm_campaign=how-to-redirect-automatic-update-email-notifications-in-wordpress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:4229:"

One of the biggest features to land in WordPress 3.7 were automatic updates. When automatic updates are completed, an email notification is sent to the address specified within Settings > General which is typically the website administrator. However, if you maintain websites for clients, you probably want those notifications to be forwarded to you and not the client. Since other events are tied to the email address such as new user registrations, you can’t substitute the address with your own.

\n
Plugin Header

Plugin Header

\n

A new WordPress plugin called Background Update Notification Email Address developed by Phil Wylie, Laura Vaquero, and Interactive Web Solutions solves the problem by changing the email address update notifications are sent to when an automatic background update is completed. By only changing the email address for automatic update notifications, clients are able to continue receiving emails related to administering their website.

\n
Where Updates Will Go

Where Updates Will Go

\n

After activating the plugin, you’ll find the notification email address located in Settings > Update Notifications. Place the email address where update notifications will go into the field, save the changes and wait for a security or maintenance release of WordPress.

\n

Filters and Hooks Are A Plugin Authors Best Friend

\n

I asked Phil, how was he able to redirect update notifications without affecting the other administrative emails generated by WordPress. I also asked him why they created the plugin. His response:

\n

In terms of how we redirect only the background update emails, WordPress provides us with a handy filter (auto_core_update_email and auto_core_update_send_email) we hook into in order to replace the email address. The filter only fires during an automatic background update and so all other WordPress emails are unaffected.

\n

Background updates are a valuable feature of WordPress, ensuring sites receive bug/security fixes quickly. There are a number of plugins which control background update behaviour. However, to my knowledge there are no plugins which redirect the email notifications.

\n

Phil suggests if a number of client sites are under your control to create a set of email rules to help organize the notifications.

\n

I’ve got this plugin setup in conjunction with a few email rules. Success notifications are archived and failed updates flagged for manual assessment.

\n

Great Plugin With One Drawback

\n

The only drawback I see is the possibility of clients deactivating the plugin, preventing the email from reaching its intended target. Outside of that, this plugin is a neat example of how the presence of filters and hooks in WordPress give plugin authors the opportunity to bend WordPress to their will.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 27 Feb 2014 22:40:41 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Jeff Chandler";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:2;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:96:"WPTavern: Better WordPress Security Plugin Gets Major Update To Address Security Vulnerabilities";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17946";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:236:"http://wptavern.com/better-wordpress-security-plugin-gets-major-update-to-address-security-vulnerabilities?utm_source=rss&utm_medium=rss&utm_campaign=better-wordpress-security-plugin-gets-major-update-to-address-security-vulnerabilities";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:1585:"

Chris Wiegman of iThemes has announced the latest update to the Better WP Security plugin contains fixes for vulnerabilities discovered in 3.6.3.  The updates address compatibility with InfiniteWP, the removal of their in-dashboard support form, and FooPlugins support form code.

\n
Better WordPress Security Scan

Better WordPress Security Scan

\n

While support for InfiniteWP was removed in 3.6.4, it’s been restored in 3.6.5 as they have since come up with a satisfactory solution eliminating the security risk. Wiegman goes into detail on each issue on the iThemes blog and assures everyone that as of version 3.6.5, the plugin contains no security vulnerabilities.

\n

Users of Better WordPress Security are encouraged to update to the latest version to receive the security patches.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 27 Feb 2014 22:20:36 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Jeff Chandler";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:3;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:69:"WordPress.tv: Vitaly Friedman: Behind the Scenes at Smashing Magazine";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31506";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:86:"http://wordpress.tv/2014/02/27/vitaly-friedman-behind-the-scenes-at-smashing-magazine/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:660:"
\n

wceu – Kim Gjerstad1
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 27 Feb 2014 18:11:35 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:4;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:87:"WPTavern: WordPress Accepted As A Mentoring Organization For Google Summer of Code 2014";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17895";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:218:"http://wptavern.com/wordpress-accepted-as-a-mentoring-organization-for-google-summer-of-code-2014?utm_source=rss&utm_medium=rss&utm_campaign=wordpress-accepted-as-a-mentoring-organization-for-google-summer-of-code-2014";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:2835:"

gsoc

\n

WordPress has been approved to participate in the Google Summer of Code (GSoC) as a mentoring organization for 2014. GSoC is a global program that offers promising students an opportunity to contribute code to open source projects with a stipend provided by Google.

\n

Last year 1,192 students were part of the program. The 2014 program marks the 10th year of GSoC and Google is expecting to sponsor 10% more students than it did in 2013. WordPress is a veteran organization entering its 7th year of participation and is one of 190 mentoring organizations that were selected this year.

\n

In 2012 WordPress was rejected as a mentoring organization due to a lack of ideas prepared for student projects. However, this year is a different story. The GSoC 2014 codex page is brimming with ideas and there are more than 20 potential mentors already on board. Here’s a quick sampling of some of the ideas put forth for this summer:

\n
    \n
  • Full-throttle Trac Annihilation
  • \n
  • Forms Plugin
  • \n
  • New BuddyPress Template Pack
  • \n
  • bbPress Per Forum Moderation
  • \n
  • WordCamp Mobile App
  • \n
  • Turn the Beta Testers Plugin into a QA Plugin
  • \n
\n

What does WordPress hope to gain by participating in the GSoC project? This was one of the questions on the application, which was submitted by Jen Mylo. “It’s a good opportunity to reach students who might not otherwise have considered contributing to WordPress,” she said. “And even if they don’t stick around as frequent contributors, it helps us to evaluate how we ramp up and communicate with new contributors.” Several participants from prior years of GSoC have gone on to become valuable contributors to WordPress, including Dion Hulse, Daryl Koopersmith and Andrew Nacin, to name just a few.

\n

Student applications open on March 10th. If you’re interested to be part of the program, check out the GSoC 2014 codex page for information on how to apply.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 27 Feb 2014 15:29:12 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:5;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:63:"WordPress.tv: Bram Duvigneau: Practical WordPress Accessibility";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31494";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:80:"http://wordpress.tv/2014/02/27/bram-duvigneau-practical-wordpress-accessibility/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:646:"
\n

wceu-BramDuvigneau
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 27 Feb 2014 15:08:40 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:6;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:55:"WordPress.tv: Sara Rosso: Why Big Brands Love WordPress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31501";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:72:"http://wordpress.tv/2014/02/27/sara-rosso-why-big-brands-love-wordpress/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:630:"
\n

wceu-SaraRosso
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 27 Feb 2014 13:00:18 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:7;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:83:"WordPress.tv: Roció Valdivia: BuddyPress and Multisite Case Study: El Club Express";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31492";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:98:"http://wordpress.tv/2014/02/26/rocio-valdivia-buddypress-and-multisite-case-study-el-club-express/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:664:"
\n

wceu-RocioValdivia
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 27 Feb 2014 06:58:00 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:8;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:120:"WordPress.tv: Vladimir Prelovac: From plugin developer to running a successful WordPress business: A ManageWP Case Study";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31499";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:136:"http://wordpress.tv/2014/02/26/vladimir-prelovac-from-plugin-developer-to-running-a-successful-wordpress-business-a-managewp-case-study/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:708:"
\n

wceu-VladimirPrelovac
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 27 Feb 2014 06:11:44 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:9;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:101:"WordPress.tv: Samuel “Otto” Wood: On Internationalization: Plugins and themes for the whole world";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31490";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:111:"http://wordpress.tv/2014/02/26/samuel-otto-wood-on-internationalization-plugins-and-themes-for-the-whole-world/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:667:"
\n

wceu-OttoWood
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 27 Feb 2014 03:20:19 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:10;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:89:"WPTavern: Theme Foundry Partners With Typekit to Add Commerical Fonts to WordPress Themes";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17813";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:222:"http://wptavern.com/theme-foundry-partners-with-typekit-to-add-commerical-fonts-to-wordpress-themes?utm_source=rss&utm_medium=rss&utm_campaign=theme-foundry-partners-with-typekit-to-add-commerical-fonts-to-wordpress-themes";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:3529:"

When WordPress theme shops build typography options into their themes, they almost universally opt for integrating Google Fonts. It’s no wonder, given that Google fonts are free, easy to browse and generally fast-loading.

\n

The Theme Foundry is one of the first to step outside the box to integrate commercial fonts into their themes, via a partnership with Typekit. This is the first case of a theme shop selling a self-hosted WordPress theme that includes Typekit fonts right out of the box.

\n

While other themes may offer support for Typekit, none have included it within the purchase price of the theme until now. Theme Foundry’s Oxford theme is their first product to be bundled with Typekit support.

\n

oxford

\n

I spoke with Drew Strojny, founder of Theme Foundry, to find out why they sought a partnership with Typekit. He said that it was essentially a matter of providing convenience for the customer. “Asking someone to buy a Typekit subscription to get full value out of their theme isn’t fair,” Strojny said. “So we needed to find a different way.”

\n

Theme Foundry plans to roll out Typekit fonts across their entire collection over the next few weeks. Strojny said that Google Fonts, which they previously used, could no longer meet their design standards. “We pride ourselves on world-class design, and not having access to a library of commercial grade fonts was really holding us back,” he said. “Adobe Typekit is the de facto standard for commercial fonts, and we really wanted to keep pushing ahead with better typography and better design.”

\n

Strojny would not disclose the details of the partnership with Typekit but said that it’s “pretty straightforward and it’s not based on sales or anything like that. Instead, we’re paying for Typekit fonts on behalf of our customers.” This removes the burden of the customer having to maintain his own subscription with Typekit. Instead, Theme Foundry keeps them on the hook with a $39 annual service fee that will allow the customer to continue to use the fonts.

\n

The technical challenges of integrating Typekit are invisible to the consumer. “As a customer, you just authorize using your Theme Foundry account credentials, and your fonts are turned on,” Strojny explained. “We’re using OAuth 2.0 with Memberful and a custom WordPress plugin to handle all the hard stuff.” Theme Foundry customers who fail to renew will fall back to a predefined set of defaults.

\n

Theme Foundry is the first to employ a typography service partnership in order to add value to theme club subscriptions. Whereas a customer may not always opt to renew a theme club membership for the sake of support and updates, the notion of preserving the sophistication of the typography used within the themes may be more compelling.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 26 Feb 2014 23:19:30 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:11;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:54:"WordPress.tv: Andrew Nacin: WordPress 3.7: Foundations";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31497";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:70:"http://wordpress.tv/2014/02/26/andrew-nacin-wordpress-3-7-foundations/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:622:"
\n

wceu-ANacin
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 26 Feb 2014 22:55:09 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:12;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:103:"WPTavern: WordPress Admin Bookmarks: Quickly Access Frequently Edited Pages, Posts or Custom Post Types";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17841";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:246:"http://wptavern.com/wordpress-admin-bookmarks-quickly-access-frequently-edited-pages-posts-or-custom-post-types?utm_source=rss&utm_medium=rss&utm_campaign=wordpress-admin-bookmarks-quickly-access-frequently-edited-pages-posts-or-custom-post-types";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:3335:"

Admin Bookmarks developed by Brad Vincent, allows you easily bookmark posts, pages and custom post types. This is especially useful if you find yourself repeatedly editing the same pages or posts.

\n

Upon activation, a new dashicon in the shape of a star will appear next to the title of every post, page, and custom post type. The icon is what’s used to mark items as favorites. Dashicons became a part of WordPress beginning with 3.8. This explains why WordPress 3.8 or above is required to run Admin Bookmarks.

\n
Star Dashicon Used To Favorite Things

Star Dashicon Used To Favorite Things

\n

When an item is marked as a favorite, a direct link to the item is added to the left hand menu. This helps to quickly find the post instead of having to search for it. By using AJAX, the entire page doesn’t have to reload which is an added convenience.

\n
Shortcuts To Posts Added To The Left Hand Menu

Shortcuts To Posts Added To The Left Hand Menu

\n

Direct links to posts only show up in the left hand menu on the administration page for that item. For example, you won’t see links to favorites on the Appearance page. However, you’ll see them on the All Posts page or the Posts flyout menu. There’s also a dashboard widget with Edit and View links to quickly manage favorites.

\n
Admin Bookmarks Dashboard Widget

Admin Bookmarks Dashboard Widget

\n

Admin Bookmarks is an example of a great WordPress plugin. It’s simple to install, easy to use, and focuses on solving one problem. If you find yourself constantly having to find the same post or page to edit, give Admin Bookmarks a try and let me know what you think.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 26 Feb 2014 22:07:01 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Jeff Chandler";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:13;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:75:"WPTavern: Jetpack 2.9 Introduces Multisite Support and Related Posts Module";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17820";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:194:"http://wptavern.com/jetpack-2-9-introduces-multisite-support-and-related-posts-module?utm_source=rss&utm_medium=rss&utm_campaign=jetpack-2-9-introduces-multisite-support-and-related-posts-module";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:3897:"

Jetpack 2.9 was released today with the long-awaited Related Posts module, which was introduced on WordPress.com in early November 2013.

\n

Server resource-intensive features such as stats tracking and related posts are very difficult to accomplish in an efficient way. Jetpack’s new Related Posts module uses WordPress.com resources to do this instead, which is undoubtedly a huge relief to hosting companies who have had to deal with the negative effects of customers using inefficient plugins.

\n

We’ve turned the module on for the Tavern website, as you can see below this post. When you configure the module, you’ll be presented with the option of using plain text for the related content or a more visually striking display that includes featured images:

\n
Configuration options for related posts module

Configuration options for related posts module

\n

Customizing Related Posts

\n

Related content is determined based on the content of the post and any tags or categories applied. The module also supports custom post types in that it defaults to posts of the same post type. This can be changed by using the ‘jetpack_relatedposts_filter_post_type’ filter.

\n

Additionally, you can customize this module by creating your own functionality plugin, the preferred method for extending related posts. The Jetpack docs outline several examples for customizing related content using the available filters. This allows you to easily change the number of related posts, modify where they are displayed, exclude specific posts and more.

\n

New Multisite Support

\n

Jetpack is now multisite-aware with the added ability to manage all multisite connections in the network admin. Previously, super admins had to manage the connections on an individual site basis, even though Jetpack could be activated network-wide. Network activating Jetpack allows you to administer all your connections from one master account and unlocks a new Jetpack > Settings tab in the network admin. This screen allows you to do three things:

\n
    \n
  • Manage all your sites’ connections
  • \n
  • Control whether individual site admins can reconnect with their own accounts
  • \n
  • Designate which Jetpack modules are activated by default
  • \n
\n

New Options Added to Single Sign On

\n

Jetpack 2.9 gives site administrators a new whip to crack in order to ensure a higher level of security. Site admins using the Single Sign On module now have the option to require users to have two-step authentication enabled on their WordPress.com account before they are allowed to log in.

\n

This release also offers new shortcodes and oEmbed capabilities for Mixcloud and Gist content. For a full list of all the enhancements and bug fixes in 2.9, check out the Jetpack changelog.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 26 Feb 2014 21:14:32 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:14;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:77:"WPTavern: This Week On WPWeekly: Dre Armeda and Tony Perez of Sucuri Security";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17773";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:196:"http://wptavern.com/this-week-on-wpweekly-dre-armeda-and-tony-perez-of-sucuri-security?utm_source=rss&utm_medium=rss&utm_campaign=this-week-on-wpweekly-dre-armeda-and-tony-perez-of-sucuri-security";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:3327:"

SucuriLogoTony Perez and Dre Armeda of Sucuri Security will be our special guests on this weeks edition of WordPress Weekly. We’ll spend the majority of the episode talking about WordPress security and what users can do to protect themselves against the bad guys. We’ll also figure out why the company was founded and what trends they’ve noticed over the past year when it comes to attacks on sites powered by WordPress.

\n

I asked Perez to come up with three areas that website owners need to pay particular attention to. He responded with access control, software vulnerabilities, and layered defenses.

\n

Access Control – There are two key issues in today’s attack. Access and vulnerabilities. For the everyday website owner, access is by far the most important to me. We are seeing too many attacks exploiting weak credentials, leaving website owners vulnerable to attacks. It’s why we continue to see a spike in Brute Force attacks.

\n

Software Vulnerabilities – This one isn’t as actionable as access control for most website owners which is why it’s second to me. Today’s website owners are not developers, they are your uncles, moms and dads, starting online businesses or learning to write about their daily experiences. Either way, many are not technical, leaving them susceptible to the world of vulnerabilities. Untrusted sources continue to be leveraged, attackers continue to find ways to circumvent systems in place to keep users safe, and this has the potential to be catastrophic for website owners.

\n

It’s time website owners start looking beyond their existing plugin architectures and start leveraging Software as a Service based services that provide them a perimeter defense, or website firewall. Every network has it, every desktop should have one, and every website will require it in the future.

\n

Layered Defenses – We have learned from our desktop and network predecessors, and we do this by thinking in the form of layers. Too many website owners are looking for one solution that will cure all its problems, but the problem is too big for that. They have been putting controls and layers in place that keep them in tune with what is going on with their website. Who is logging in? Who is changing what? Are things changing? Should they be? Website owners have to learn how to administer their website again. This idea of “set and forget” is harming us as much as it is helping.

\n

Leave Your Questions In The Comments

\n

This is a small sample of what we’ll be discussing this Friday at 3P.M. Eastern. If you have any questions about Sucuri or WordPress security in general, leave them in the comments and we’ll ask them near the end of the show.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 26 Feb 2014 19:06:20 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Jeff Chandler";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:15;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:64:"WPTavern: WordPress.org Profiles On Track to Be Totally Revamped";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17755";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:172:"http://wptavern.com/wordpress-org-profiles-on-track-to-be-totally-revamped?utm_source=rss&utm_medium=rss&utm_campaign=wordpress-org-profiles-on-track-to-be-totally-revamped";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:4365:"
photo credit: Huasonic - cc

photo credit: Huasoniccc

\n

WordPress.org profiles are set to get a revamp in the very near future. Jen Mylo posted yeseterday, asking for thoughts and ideas about what to incorporate into the new profiles. She will be working with Mel Choyce to design a new UI for the profile data.

\n

Mylo also initiated an effort to get speaker information from past WordCamp organizers as part of the plan is to bring in data from a user’s involvement in WordPress activities outside of WordPress.org. One of the biggest challenges, however, is ensuring that the profiles will be attractive for all users, including those with very little activity.

\n

More User Data to Be Added to the Activity Stream

\n

The current profiles on WordPress.org track support forum topics, ideas, and various activities related to Trac. The team plans to add the following additions:

\n
    \n
  • International Forums – new topic or reply (for poster)
  • \n
  • Plugins Directory – released a new plugin (for plugin author)
  • \n
  • Themes Directory – released a new theme (for theme author)
  • \n
  • Make P2s – newly published post (for post author)
  • \n
  • Make P2s – new comment (for commenter)
  • \n
  • Trac – new comment (for commenter)
  • \n
  • Trac – new props (for user getting prop’d)
  • \n
  • WordCamps – new speaker added
  • \n
  • WordCamps – new organizer added
  • \n
\n

profiles-sketchThe updated activity stream should be in place soon. Mylo floated a working sketch earlier today to illustrate some of the ideas they’ve been discussing. She emphasized that the changes to profiles are likely to be added over several iterations.

\n

Ultimately, the team plans to merge the new WordPress.org profiles with the forums profiles, but this will probably be completed further down the road.

\n

Your WordPress Resume and Dashboard

\n

The feedback on Mylo’s post regarding how people use their WordPress.org profiles indicates that contributors want to be able to easily find trac tickets and conversations they’re involved in. Others commented that contact information and contributions such as plugins and themes are high on the list of items they look for when viewing a person’s profile.

\n

“The way I’m looking at profiles from a UX perspective is that for a visitor, the profile serves as someone’s WP resume,” Mylo said. “While for the profile owner, it serves as the dashboard for their involvement in the open source project.”

\n

In the past, many people haven’t bothered to use or update their WordPress.org profiles, perhaps due to the lack of relevant information displayed about user activities. The planned changes will make WordPress.org profiles the go-to place for finding out about someone’s interactions and contributions to the WordPress project. If you’re looking to hire a WordPress professional who has a history of contributing back, the new WordPress.org profiles will soon be the best representation of a person’s involvement with WordPress.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 26 Feb 2014 17:37:03 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:16;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:56:"WordPress.tv: Panel: The State of Multilingual WordPress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31477";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:73:"http://wordpress.tv/2014/02/25/panel-the-state-of-multilingual-wordpress/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:691:"
\n

wceu – The State of Multilingual WordPress
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 26 Feb 2014 06:11:35 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:17;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:64:"WPTavern: Quickly Navigate The WordPress Backend With WP Hotkeys";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17713";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:172:"http://wptavern.com/quickly-navigate-the-wordpress-backend-with-wp-hotkeys?utm_source=rss&utm_medium=rss&utm_campaign=quickly-navigate-the-wordpress-backend-with-wp-hotkeys";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:3094:"

WP hot Keys 1WP Hotkeys is a plugin developed by McGuive7 and MIGHTYminnow that adds the ability to navigate the backend of WordPress with just a keyboard using shortcuts. The plugin works out of the box with a predefined set of hotkeys for each standard dashboard menu item. If you don’t want to see the shortcut helpers in the menu, you can disable them from the settings page. You can also change existing hotkeys or create new ones.

\n
WP Hotkeys Settings Page

WP Hotkeys Settings Page

\n

This is a brand new plugin so don’t be surprised if you encounter an issue or two. I discovered a few bugs during testing but they were quickly fixed after reporting them.

\n

Built-in Keyboard Shortcuts For Comment Moderation

\n

Starting with 2.7, WordPress ships with built-in keyboard shortcuts to moderate comments. In order to use them, you’ll need to browse to Users > Your Profile. Make sure the box for  ‘Enable keyboard shortcuts for comment moderation.‘ is checked.

\n
Check The Box To Enable Keyboard Shortcuts

Check The Box To Enable Keyboard Shortcuts

\n

At this time, WordPress does not have a standard set of keyboard shortcuts for navigating the rest of the backend.

\n

Conclusion:

\n

Navigating through the WordPress administration area with the keyboard was a lot faster and more convenient than using the mouse. Pressing the wrong key and loading the wrong page induced panic. That’s when the mouse came in handy to browse back a page. I doubt there is a faster way to get to where you’re going in the backend of WordPress so long as you can remember the key combinations.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 25 Feb 2014 22:53:46 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Jeff Chandler";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:18;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:53:"WordPress.tv: Frederick Townes: Business Optimization";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31475";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:72:"http://wordpress.tv/2014/02/25/frederick-townes-business-optimization-2/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:642:"
\n

wceu-FrederickTownes
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 25 Feb 2014 22:15:45 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:19;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:74:"WPTavern: Manchester to Host Its First WordPress Contributor Day March 1st";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17651";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:192:"http://wptavern.com/manchester-to-host-its-first-wordpress-contributor-day-march-1st?utm_source=rss&utm_medium=rss&utm_campaign=manchester-to-host-its-first-wordpress-contributor-day-march-1st";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:3026:"

wpcontributordayWP Contributor Day is a new WordPress event that is coming up this weekend. It will be held Saturday, March 1st, 2014, in Manchester, England from 10:00 – 18:00. The goal is to have eight solid hours of contributors working together to improve WordPress.

\n

Jenny Wong, the organizer of the event, regularly attends the WordPress user group in Manchester, which is led by Mike Little. Wong’s first contributor day experience happened at WordCamp London 2013. She enjoyed it so much that she spoke with Little about hosting a contributor day in Manchester. He loved idea and the event started to take shape.

\n

WP Contributor Day will have several experts on hand to help new contributors find their niches. Mike Little will be available to help with core contributions. Graham Armfield will assist with accessibility contributions and Noel Tock will be on hand for BuddyPress. Wong hopes to add more current contributors to help lead groups for the event, ideally, those who have experience contributing in themes, plugins, support and documentation.

\n

“My hope is to remove the fear for newcomers who want to take the plunge to contribute to the WordPress project,” Wong said, explaining her vision for the event. She hopes that the experience will help new contributors to gain confidence in contributing back to the project.

\n

“For current contributors, I hope the event allows them to take a block of time from their busy lives and concentrate on one task,” she said. “I know from personal experience it sometimes takes an event for you to book time to do something you have been meaning to do.”

\n

They aim to keep the first Manchester Contributor Day event simple and learn from it before planning more. Wong hopes that in the future other WordPress user groups will set up their own contributor days and she is happy to promote them all on the WP Contributor Day site.

\n

“It would be super cool to have them on the same day / week to make it a global event similar to Start Up Weekend,” she said. “But that involves a lot of logistics. The bottom line is that this is a project which will grow organically and we’ll see where it takes us.”

\n

If you’d like to participate in the WordPress Contributor Day event in Manchester this weekend, sign up for a free ticket on the website. Current contributors who can help lead a group are encouraged to get in touch with Jenny Wong.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 25 Feb 2014 19:04:37 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:20;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:64:"WordPress.tv: David Coveney: Unlocking Enterprise with WordPress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31473";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:81:"http://wordpress.tv/2014/02/25/david-coveney-unlocking-enterprise-with-wordpress/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:718:"
\n

wceu-Unlocking Enterprise with WordPress- Dave Coveney
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 25 Feb 2014 18:11:39 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:21;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:72:"WordPress.tv: Kim Gjerstad: Is the Freemium Model Right for Your Plugin?";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31471";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:88:"http://wordpress.tv/2014/02/25/kim-gjerstad-is-the-freemium-model-right-for-your-plugin/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:662:"
\n

wceu – Kim Gjerstad1
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 25 Feb 2014 16:09:00 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:22;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:70:"WPTavern: Quickly Setup A WordPress Testing Environment With InstantWP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17514";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:184:"http://wptavern.com/quickly-setup-a-wordpress-testing-environment-with-instantwp?utm_source=rss&utm_medium=rss&utm_campaign=quickly-setup-a-wordpress-testing-environment-with-instantwp";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:3229:"

InstantWP is a free tool used to quickly and easily create a WordPress testing environment. It ships with everything you need to get a local install of WordPress up and running. Apache, PHP, MySQL, and WordPress 3.6 are prepackaged.

\n

You may be wondering why WordPress 3.6 is installed and not the latest version. Seamus Brady, developer of InstantWP, told me he keeps it a few versions behind since people use it to test upgrades. Upgrading to the latest version is accomplished from the backend of WordPress.

\n
Control Panel After Installation

Control Panel After Installation

\n

While InstantWP is compatible with Windows based machines, it doesn’t work on Macs and doesn’t support WordPress multisite. However, the software is portable as you can install and run it from a USB thumbdrive. I use WampServer to handle my local WordPress install but InstantWP was faster to use. I didn’t have to create a database, administrator account or password. You can only run one instance of the software at a time. Creating a second test site is as simple as installing InstantWP into a different folder.

\n

It also comes with a set of demo content that comes in handy for testing plugins and themes.

\n
Dummy Content Already In Place

Dummy Content Already In Place

\n

Don’t mind the WordPress fauxgo in the dummy content. I’ve already notified Seamus and referred him to the proper logo to use.

\n

InstantWP Is Almost Instant

\n

ServerPress which we covered a few months ago has more features and is cross-platform compatible but in terms of speed, InstantWP is close to living up to its name. It’s easier than installing WampServer or a different LAMP package. If you primarily use Windows and just need a quick testing environment for WordPress, I recommend adding InstantWP to your tool belt.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 25 Feb 2014 14:00:45 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Jeff Chandler";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:23;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:70:"WPTavern: How to Add Subscript and Superscript Characters in WordPress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17707";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:184:"http://wptavern.com/how-to-add-subscript-and-superscript-characters-in-wordpress?utm_source=rss&utm_medium=rss&utm_campaign=how-to-add-subscript-and-superscript-characters-in-wordpress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:3554:"
photo credit: Lori Greig - cc

photo credit: Lori Greigcc

\n

Did you know that WordPress has built-in support for subscript and superscript characters? This information is not easy to find, as it’s tucked away under the Editing Help page in the codex.

\n

Although the WordPress editor doesn’t show subscript and superscript buttons, you can add these characters anytime using the sub or sup tags. For example, to display H20, you would write it like this:

\n
H<sub>2</sub>0
\n

Superscript characters can be added like this:

\n
My reference<sup>1</sup>
\n

That above example would display: My reference1

\n

Add Subscript and Superscript Buttons to the Visual Editor

\n

There are many TinyMCE buttons that are disabled by default so as not to clutter up the WordPress editor with buttons that most people rarely use. If you find that you often need to add characters above or below the normal line of type, you may want to consider adding the Subscript and Superscript buttons to the visual editor for your own convenience.

\n

The WordPress codex section on enabling hidden MCE buttons, which demonstrates how to filter the button list. You can create a quick functionality plugin using the snippet below:

\n
function my_mce_buttons_2($buttons) {	\n	/**\n	 * Add in a core button that''s disabled by default\n	 */\n	$buttons[] = ''sup'';\n	$buttons[] = ''sub'';\n\n	return $buttons;\n}\nadd_filter(''mce_buttons_2'', ''my_mce_buttons_2'');
\n

Filtering mce_buttons_2 will add the buttons to the second line in the visual editor. Filtering mce_buttons_3 will display the added buttons on a third line.

\n

new-buttons

\n

For more technical writing that goes beyond basic subscript and superscript characters, you may need to employ an additional tool such as the open source LaTeX typesetting system. LaTeX makes it possible to post complex scientific and mathematical equations. Jetpack includes a LaTeX module and the WordPress Plugin Directory also has a wide assortment of LaTeX plugins.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 25 Feb 2014 13:01:10 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:24;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:73:"WPTavern: Hexa: A Free Colorful WordPress Theme Highlighting Post Formats";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17636";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:188:"http://wptavern.com/hexa-a-free-colorful-wordpress-theme-highlighting-post-formats?utm_source=rss&utm_medium=rss&utm_campaign=hexa-a-free-colorful-wordpress-theme-highlighting-post-formats";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:3547:"

The latest trend in WordPress blogging themes is to put post formats on center stage with a colorful palette selected to highlight the variety of content. Hexa is a beautiful new example of this trend in action. The theme launched last week on WordPress.com and hit WordPress.org over the weekend.

\n

hexa

\n

Named for the geometric shapes used throughout the theme, Hexa connects each post to the next with a colorful line extending from the hexagonal icon designated for each. This bright, geometric design is perfect for crystallizing your thoughts into structured posts.

\n

Big Featured Images

\n

hexa-featuredOne of the distinguishing features of this design is the large (842 pixels wide) featured image area above posts, as seen on the index and archive pages.

\n

If you’re switching to Hexa, appropriately-sized featured images are something important to consider. However, you can always regenerate thumbnails.

\n

Hidden Extras

\n

widget-areas

\n

Hexa keeps its three widget areas neatly out of sight with a unique pull down section, activated by the corresponding icon in the header.

\n

The icon menu in the header also pulls down a hidden search bar, navigation and social icons. Anything peripheral to the content is kept out of sight unless opened by the visitor.

\n

Custom Header, Background and Menu

\n

Hexa’s customization options are built into WordPress’ native customizer. You can add your own header or background image. The theme has support for one custom menu and its design matches the color palette:

\n

hexa-menu

\n

Check out the Hexa demo to see this theme in action. Self-hosted WordPress sites can download Hexa for free via the “Add New” theme menu. If you like Hexa, you may also be interested in Sorbet, another theme with a similar structure for widgets, post formats and social links.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 24 Feb 2014 23:14:53 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:25;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:48:"WordPress.tv: Hanni Ros: Being Part of WordPress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31484";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:65:"http://wordpress.tv/2014/02/24/hanni-ros-being-part-of-wordpress/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:689:"
\n

wceu – Being Part of WordPress – Hanni Ross
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 24 Feb 2014 18:11:24 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:26;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:23:"Matt: WhatsApp Takeaway";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:21:"http://ma.tt/?p=43494";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:39:"http://ma.tt/2014/02/whatsapp-takeaway/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:3310:"

whatsappFor better or worse, a great deal of investment in technology is driven by pattern matching. In that world any company (including Automattic) that generally eschews hype, is largely subscription driven, and has a small number of employees relative to its audience should be thrilled at the 19 billion dollar acquisition of WhatsApp. The deal is incredible.

\n

This has kicked off another round of pattern matching and halo effects, which are currently incredibly favorable but will evolve over the coming years based on how things go post-integration, just like the public perceptions of Geocities, Youtube, Doubleclick, Bebo, and Skype wildly shifted based largely on the press coverage over their latest traded value.

\n

I’m thrilled with the outcome for WhatsApp and the manner in which they built their company, their product, and I hope they bring more of that thinking to Facebook, but I don’t think they should become a playbook any more than Instagram should inspire a no-revenue playbook. The pattern we should take away from this story is that there is no pattern. (In Perl, “there’s more than one way to do it” or Tim Toady.) As an entrepreneur making decisions for your company, always go back to your first principles of what’s important to you and why you started in the first place. As a journalist, try not to fit everyone into arcs you’ve seen before or ascribe value to previous coverage (or lack of coverage). As an investor try to evaluate every situation on its unique merits. Should founders be CEOs or not? Well, it depends on the founders, the company, and what it means to be CEO, not what an over-normalized sample of a few hundred companies did before in completely different contexts.

\n

There are also products that succeed with design that seems childish or terrible on the surface (Myspace, eBay, Snapchat). A lot of what it comes down to is have you made something people want, and are they finding out about it from their friends. That’s often the realm people think of as marketing. The best marketers in the world don’t fit our preconceptions of what that word means because they’re in hoodies instead of suits and create environments and ecosystems rather than the traditional trappings of marketing.

\n

Update: From @dsa, here’s a great follow-up read on Techcrunch: What Games Are: Flappy Bird, Patterns, And Context.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 24 Feb 2014 17:52:55 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:14:"Matt Mullenweg";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:27;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:76:"WPTavern: Graph Paper Press Offers Customers WordPress Child Theme Generator";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:44:"http://wptavern.com?p=17549&preview_id=17549";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:196:"http://wptavern.com/graph-paper-press-offers-customers-wordpress-child-theme-generator?utm_source=rss&utm_medium=rss&utm_campaign=graph-paper-press-offers-customers-wordpress-child-theme-generator";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:4700:"

A child theme is defined in the WordPress codex as a theme that inherits the functionality of another theme, called the parent theme. Child themes allow you to modify, or add to the functionality of that parent theme. A child theme is the safest and easiest way to modify an existing theme, whether you want to make a few tiny changes or extensive changes. Instead of modifying the theme files directly, you can create a child theme and override within.

\n
Child theme Generator Featured Image

photo credit: Tambako the Jaguarcc

\n

Graph Paper Press has created a WordPress child theme generator for their customers. Unfortunately, too many people make changes to their theme without using the child theme technique. If the theme is upgraded, the changes are usually lost. Graph Paper Press has an excellent explanation on why using child themes is important.

\n

But Jake had spent hours and hours customizing the theme he downloaded and upgrading to the latest version would wipe out all of his changes.

\n

Jake was stuck. He could either upgrade his theme to the new version so he could take advantage of all the new features or stick with his older customized version. That’s not a place we want anyone to be in.

\n

I’ve seen a lot of theme companies provide documentation explaining to customers how to create a child theme. Graph Paper Press on the other hand is the first company I’ve seen create a generator for their customers to use. This greatly decreases the chance a customer will create the child theme in the wrong way or place the files in the wrong location.

\n

To use the generator, customers put the child theme name into the appropriate field and then select the parent theme. The advanced options show fields to add an author name, author URI, and a description. Once the fields have been filled, click the generate button. This produces a zip file to download.

\n
Step One Of The Generator

Step One Of The Generator

\n

The zip file contains a properly formatted style.css and functions.php file based on the names provided in the generator. CSS code added to the style.css file will override any styles defined within the parent theme. You can also add template files from the parent theme such as home.php and tweak them to your liking. Once you’re satisfied with the changes, upload and activate the theme in WordPress as you would with any other theme.

\n

The Beginning Of A Trend?

\n

Child themes are an easy way to make changes to themes without having to worry them being lost if the parent theme needs to be upgraded. They’re also a great way to organize changes made to a parent theme. This is a great move by Graph Paper Press and is something I’d like to see become standard with other commercial theme shops.

\n

Child plugins work on the same concept but are created and implemented differently. Read our guide to learn how to create a child plugin.

\n

Do you know of other commercial WordPress theme companies that offer their customers a child theme generator? If so, let me know about them in the comments.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 24 Feb 2014 17:00:41 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Jeff Chandler";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:28;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:76:"WPTavern: Give All Editors In WordPress A New Look With The WP Editor Plugin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17522";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:196:"http://wptavern.com/give-all-editors-in-wordpress-a-new-look-with-the-wp-editor-plugin?utm_source=rss&utm_medium=rss&utm_campaign=give-all-editors-in-wordpress-a-new-look-with-the-wp-editor-plugin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:4874:"

WP Editor is a free WordPress plugin developed by Benjamin Projas. It replaces the default plugin, theme, post, and page editors and is integrated with CodeMirror and Fancybox. By integrating these two technologies, the editor resembles an environment coders will be familiar with.

\n

The first thing I noticed when writing my first post with the plugin enabled was the inability to use the TAB key to move to the next line. I had to manually click inside the editor window to begin writing my post. I found out this plugin only manipulates the Text or HTML version of the editor. At first, I thought the editor-style.css file that’s part of Stargazer was overriding WP Post Editor. However, after I switched themes, I determined WP Editor doesn’t alter the Visual editor in any way.

\n
WordPress Text Editor Using Lesser Dark Theme

WordPress Text Editor Using Lesser Dark Theme

\n

The settings page contains five different sections: Main settings, Theme Editor, Plugin Editor, Post Editor, and Overview. They’re self-explanatory but you’ll want to visit the main settings page first. By default, WP Post Editor hides the WordPress version of the theme and plugin editor links and will load the WP Editor version of the theme and plugin editors. You can turn them back on from the main settings page.

\n
WP Post Editor Main Settings

WP Post Editor Main Settings

\n

WP Post Editor ships with twelve different themes. I’ve been looking for a way to darken the post editor and this plugin accomplishes that by offering twelve different themes. The downside to using this plugin is that each registered user who has access to the post editor will see the WP Post Editor version. It would be great if the editor and themes could be tied to users, perhaps through their profile. Also, depending on the post editor theme selected, some colors are hard to see.

\n
Some Colors Hard To See

Some Colors Hard To See

\n

The strength of this plugin lies within the plugin and theme editors. WP Post Editor has built-in support for file uploading. This is a killer feature because it enables files to be uploaded without the use of FTP. Uploading files is quick and painless. The code within the editor is a step up from what WordPress offers out of the box. It’s color coded and features line numbers. You can also download the file or the entire plugin from within the editor.

\n
WP Editor Version Of The Plugin Editor

WP Editor Version Of The Plugin Editor

\n

Nice Plugin But Doesn’t Solve My Problem

\n

Overall, WP Editor is a neat plugin containing a myriad of options to change the look and feel of each editor in WordPress. Since I’ve grown accustomed to the visual editor, thanks in large part to the use of style-editor.css, I don’t see myself using this plugin in the future. My search for a plugin that changes the post editor to a darker background color without it being a global change continues.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 24 Feb 2014 14:00:10 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Jeff Chandler";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:29;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:59:"WordPress.tv: Stanko Metodiev: WordPress – From the Start";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=30759";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:72:"http://wordpress.tv/2014/02/24/stanko-metodiev-wordpress-from-the-start/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:669:"
\n

Stanko Metodiev: WordPress – From the Start
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 24 Feb 2014 12:29:02 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:30;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:124:"WordPress.tv: Ruth Carter: Blogging And Social Media Horror Stories From The Legal Trenches (And How To Avoid The Same Fate)";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31454";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:139:"http://wordpress.tv/2014/02/24/ruth-carter-blogging-and-social-media-horror-stories-from-the-legal-trenches-and-how-to-avoid-the-same-fate/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:795:"
\n

Ruth Carter: Blogging And Social Media Horror Stories From The Legal Trenches (And How To Avoid The Same Fate)
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 24 Feb 2014 09:27:31 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:31;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:63:"WPTavern: Big Performance Improvements Coming in BuddyPress 2.0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17571";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:170:"http://wptavern.com/big-performance-improvements-coming-to-buddypress-2-0?utm_source=rss&utm_medium=rss&utm_campaign=big-performance-improvements-coming-to-buddypress-2-0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:3920:"

BuddyPress 2.0, due sometime in mid-April, officially kicked off development a couple weeks ago. This release will include some exciting, visible new features, including the ability to edit BuddyPress profiles in the WordPress admin. But there are also some major improvements happening under the hood that will help BuddyPress to scale better in the near future.

\n

Moving the user ‘last_activity’ data out of the wp_usermeta table has been a on the roadmap for awhile, but what does that really mean and who will it affect?

\n

The ‘last_activity’ data is what you see displayed on user profiles:

\n

last-active

\n

This data is also used within BuddyPress to sort results and to determine whether a user is a valid site member. In an update last week, BuddyPress core developer Boone Gorges explained why the issue has developed into what he calls “a perennial performance bottleneck”:

\n

In the case of users, the information was stored in wp_usermeta. This table gets exceptionally bloated on busy sites, and it’s not properly indexed for the sorts of ORDER BY queries we were performing on it.

\n

Gorges put a fix in place to address the issue. BuddyPress 2.0 will now store user last_activity data in its own row within the wp_bp_activity table, even if the site has the Activity component disabled. “The performance improvements are pretty extreme,” Gorges said and promised to post benchmarks as development for BuddyPress 2.0 approaches release.

\n

When applying the first patch to the issue, Gorges shared a few preliminary metrics that should give you an idea of the performance improvements in this fix:

\n

Basically, the main query went from about 57ms to .3ms. Roughly two orders of magnitude improvement. This will become more dramatic on larger sites (usermeta’s performance will degrade in a greater-than-linear fashion), especially where usermeta is filled with lots of other junk from other plugins.

\n

‘Last_activty’ data will be indefinitely mirrored in both the old and new locations in order to maintain backwards compatibility with plugins. However, plugin authors are encouraged to update their extensions to get data via the BuddyPress API functions instead of the old method. Gorges offers an example in his update and lists a few plugins from the WordPress Plugin Directory that will need to be updated.

\n

Plugin developers who want to take advantage of these performance improvements have plenty of time to prepare an updated version to have on deck to coincide with the 2.0 release. Leave a comment on the BuddyPress Development blog if you have any questions regarding the changes or need help updating your code.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 24 Feb 2014 02:52:22 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:32;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:78:"WordPress.tv: Hristo Chakarov: Choosing The Right JS Framework/Library/Toolkit";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=30009";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:93:"http://wordpress.tv/2014/02/23/hristo-chakarov-choosing-the-right-js-frameworklibrarytoolkit/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:709:"
\n

Hristo Chakarov: Choosing The Right JS Framework/Library/Toolkit
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 24 Feb 2014 00:40:14 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:33;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:54:"WordPress.tv: Mario Peshev: Choosing A WordPress Theme";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=30757";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:71:"http://wordpress.tv/2014/02/23/mario-peshev-choosing-a-wordpress-theme/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:663:"
\n

Mario Peshev: Choosing A WordPress Theme
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 24 Feb 2014 00:37:31 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:34;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:37:"WordPress.tv: Matt Mullenweg: Q&A";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31487";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:49:"http://wordpress.tv/2014/02/23/matt-mullenweg-qa/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:617:"
\n

wceu-MattMullenweg1
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Sun, 23 Feb 2014 22:15:29 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:35;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:37:"WordPress.tv: Svetlin Nakov: WPdotNet";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=30751";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:54:"http://wordpress.tv/2014/02/22/svetlin-nakov-wpdotnet/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:629:"
\n

Svetlin Nakov: WPdotNet
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Sun, 23 Feb 2014 00:34:51 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:36;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:82:"WordPress.tv: Hristo Pandjarov: How To Make WordPress Life Easier Using The WP-CLI";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=30735";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:99:"http://wordpress.tv/2014/02/22/hristo-pandjarov-how-to-make-wordpress-life-easier-using-the-wp-cli/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:719:"
\n

Hristo Pandjarov: How To Make WordPress Life Easier Using The WP-CLI
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Sun, 23 Feb 2014 00:26:41 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:37;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:86:"WPTavern: WPWeekly Episode 139 – Interview With Chris Wallace Co-Founder Of UpThemes";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:44:"http://wptavern.com?p=17578&preview_id=17578";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:208:"http://wptavern.com/wpweekly-episode-139-interview-with-chris-wallace-co-founder-of-upthemes?utm_source=rss&utm_medium=rss&utm_campaign=wpweekly-episode-139-interview-with-chris-wallace-co-founder-of-upthemes";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:4171:"

In this episode, Marcus Couch and I sat down with Chris Wallace, co-founder of UpThemes and discussed in detail the reasons behind the open letter published by the company. We learned how Chris got involved with WordPress theme development and the circumstances leading to the creation of UpThemes.

\n

Chris explained how hard it was to make a profit on commercial themes and how early development decisions played a large role in revenue disappearing nearly causing the company to fail. Last but not least, we talked about the trend of theme shops simplifying their products while relying on plugins to provide specific functionality.

\n

Near the end of the interview, Chris gave us a heads up on a new product they are working on called IssuePress. It enables developers to use the Github repository issue tracker to provide support.

\n

Stories Discussed:

\n

Duo Security Plugin Vulnerability Affecting A Subset Of WordPress Multisite Networks
\nAesop Story Engine Now Available On WordPress.org
\nTips For Promoting Newly Released WordPress Plugins
\n“Adopt-Me” Plugin Tag Is Now in Use in the WordPress Plugin Directory

\n

Plugins Picked By Marcus:

\n

WP Pipes makes a similar WordPress based “service” just like Yahoo Pipes!

\n
    \n
  • Here are things you can do with WP Pipes (just like Yahoo Pipes):
  • \n
  • Get Posts from WordPress Posts > Export as RSS Feed
  • \n
  • Get Posts from WordPress Posts > Export as iTunes Podcast
  • \n
  • Get Posts from WordPress Posts > Export as Google XML Sitemap
  • \n
  • Get Documents from WordPress > Export to Google Drive
  • \n
  • Get WooCommerce Products > Export as RSS Feed or Google XML Sitemap
  • \n
\n

WP Construction Mode can set the entire website or specific pages under construction or maintenance. Admin can still view the site, perfect for developing new websites or pages

\n

Link Images to None – Automatically Link images to none in selecting and uploading images in WordPress.

\n

WPWeekly Meta:

\n

Next Episode: Friday, February 28th 3 P.M. Eastern – Dre Armeda and Tony Perez Of Sucuri Security

\n

Subscribe To WPWeekly Via Itunes: Click here to subscribe

\n

Subscribe To WPWeekly Via RSS: Click here to subscribe

\n

Subscribe To WPWeekly Via Stitcher Radio: Click here to subscribe

\n

Listen To Episode #139:
\n

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Sat, 22 Feb 2014 01:51:47 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Jeff Chandler";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:38;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:47:"WordPress.tv: Ivelina Dimova: WooCommerce Magic";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=30733";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:64:"http://wordpress.tv/2014/02/21/ivelina-dimova-woocommerce-magic/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:649:"
\n

Ivelina Dimova: WooCommerce Magic
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Sat, 22 Feb 2014 00:17:06 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:39;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:63:"WordPress.tv: Stefan Chekanov: How To Make Money With WordPress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=30755";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:80:"http://wordpress.tv/2014/02/21/stefan-chekanov-how-to-make-money-with-wordpress/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:681:"
\n

Stefan Chekanov: How To Make Money With WordPress
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Sat, 22 Feb 2014 00:11:03 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:40;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:51:"WPTavern: How to Stop WordPress From Sending Emails";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17552";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:146:"http://wptavern.com/how-to-stop-wordpress-from-sending-emails?utm_source=rss&utm_medium=rss&utm_campaign=how-to-stop-wordpress-from-sending-emails";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:3609:"

empty-mailbox

\n

WordPress doesn’t send out too many emails. They’re usually only generated for an important notice, or when an action is required on your part. However, there are a few different circumstances under which you may not want WordPress to send any emails.

\n

For example, when working on a development site, or even a production site, you may inadvertently trigger emails that send to real users when testing or making changes.

\n

The best developers are able to stay invisible. Ideally, you don’t want any users to know or suspect that you are working on the site, so it’s important to suppress emails that might be triggered by your work. Fortunately, there are two plugins that will do this for you automatically.

\n

Stop Emails

\n

The Stop Emails plugin, created by Sal Ferrarello, works silently to prevent any outgoing emails from being sent using wp_mail() function. WordPress will continue to act normally, as if the emails were sent successfully.

\n

When the plugin is active, you’ll see a notice in the admin area to remind you that emails are not currently being sent.

\n

no-emails-notice

\n

Stop Emails also has a filter that you can use, which will allow you to log emails and send the information to the php_error.log:

\n
add_filter(''fe_stop_emails_log_email'', ''__return_true'');
\n

Disable Emails

\n

Disable Emails is a similar plugin, created by WordPress plugin developer Ross McKay. It stops any and all emails, using the standard wp_mail() function by replacing it with an empty function. Disable Emails is different in that it is totally silent and does not show an admin notice to remind you that emails are stopped.

\n

It also has a more explanatory readme.txt file that cites several scenarios wherein you might consider shutting WordPress emails off:

\n
    \n
  • Demonstration websites that allow users to do things that normally send emails
  • \n
  • Development / test websites with live data that might email real customers
  • \n
  • Bulk-loading data into websites which might trigger emails
  • \n
  • Adding new sites into multisite installations
  • \n
\n

Both of these plugins are aimed at developers who probably want to turn emails off temporarily or only on a development site. You could also use the plugin to create a totally silent WordPress site that never sends out any notifications, although this is probably not recommended.

\n

Email notifications are still one of the easiest ways to keep your finger on the pulse of your website when you don’t visit every day. If you opt to use one of these plugins temporarily on a live site, it’s important to remember to turn the plugin off when you’re finished working.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 21 Feb 2014 12:03:24 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:41;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:83:"WPTavern: “Adopt-Me” Plugin Tag Is Now in Use in the WordPress Plugin Directory";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17499";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:164:"http://wptavern.com/adopt-me-plugin-tag-is-now-in-use-on-wordpress-org?utm_source=rss&utm_medium=rss&utm_campaign=adopt-me-plugin-tag-is-now-in-use-on-wordpress-org";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:4526:"

adopt-me-yellow

\n

Recently we explored the question of whether or not a clear path for WordPress.org plugin adoption could help to lower the rate of abandonment. Some have suggested that having a standard (unofficial) adoption tag might help to bring more exposure to plugins that need a new owner.

\n

“Adopt-Me” was suggested as one possible tag for developers to use to identify plugins that they would prefer to adopt out rather than abandon. WordPress developer Christian Foellmann is the first to make use of the tag. If you visit the “adopt-me” plugin tag page, you’ll find his Google Analytics MU plugin available for adoption.

\n

Foellmann put his plugin up for adoption because he was no longer able to provide adequate support for it. “I really believe that you have to ‘choose your battles’ when it comes to open source contribution,” he said. “You need to make sure that you do not stretch yourself too thin. So I finally realized that I can only support a plugin (project) properly if I deploy it myself.”

\n

“Free to a Good Home”

\n

Foellmann has a rather unique reason for wanting to find the plugin a new home. “I run all my sites in multisite installations so the tracking of a complete network is something really appealing at first,” he said. “Until you realize the implications of EU and especially German privacy law. When it comes to user tracking the functionality of the plugin can get you into hot water – fast.” It’s for this reason that he’s decided to remove the plugin from his toolbox.

\n

Already on the lookout for a best practice for plugin adoption, Foellmann saw our recent article and decided to be the first to use the “adopt-me” tag in hopes of keeping his plugin alive. He said that the ideal new owner would be a current user who is wiling to keep development open on Github. Foellmann will happily transfer over the Github repo.

\n

Will the “Adopt-Me” tag take off?

\n

The “adopt-me” tag will never catch on if nobody knows about it. Though the tag is technically unofficial, it will require developers to use it and recommend it, if there’s any possibility of it becoming a useful designation on WordPress.org.

\n

When I discussed the matter of an unofficial tag with Samuel “Otto” Wood in a previous conversation, he had little hope of it gaining any traction. His thoughts:

\n

I don’t think it will take off because it’s edge-casey and relies on authors giving away their plugins intentionally instead of simply letting them die from neglect.

\n

His assessment would indicate that most developers who abandon their plugins are likely not motivated enough to put their extensions on the path to adoption, even if there is a known tag.

\n

Foellmann has more hope for his Google Analytics MU plugin, which is actually a fork of a plugin that he originally tried to adopt. Since there was no process at the time and the plugin’s author was unreachable, he was forced to fork the original plugin.

\n

This type of situation may be a contributing factor to the repository having so many plugins which seem to perform the same function. No path for adoption makes it easier to fork an existing work to make small changes or updates.

\n

When I asked Foellmann if he thinks the “adopt-me” tag will take off, he said, “I really hope so. It might reduce the number of corpses rotting away in the repo.”

\n

Is anyone else planning on making use of the tag?

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 21 Feb 2014 01:57:54 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:42;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:67:"WordPress.tv: Stefan Kanev: Test-Driven Development And Refactoring";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=30753";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:84:"http://wordpress.tv/2014/02/20/stefan-kanev-test-driven-development-and-refactoring/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:689:"
\n

Stefan Kanev: Test-Driven Development And Refactoring
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 20 Feb 2014 23:53:42 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:43;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:55:"WPTavern: Bob Dunn Launches New WordPress Learning Site";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17444";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:154:"http://wptavern.com/bob-dunn-launches-new-wordpress-learning-site?utm_source=rss&utm_medium=rss&utm_campaign=bob-dunn-launches-new-wordpress-learning-site";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:9522:"

Bob DunnBob Dunn, who’s been teaching WordPress for years, has launched an all new website dedicated to helping people learn WordPress. The new site is filled with tutorials, up to date information about WordPress, and in the near future, complimentary eBooks. I got in touch with Bob and asked him a few questions about the new site.

\n

How will Bobwptutorials differentiate itself from other WordPress learning sites?

\n

When I was thinking about what this new service might look like, I kept hearing the voices of the thousands of people I have trained. They shared their frustrations with listening to audio without the visual references they needed. Some of them had tried other video tutorials but couldn’t keep up and absorb the information because the trainer’s pace was too fast.

\n

Landing Page For BobWPTutorials

\n

Everyone learns differently and people need to find the instructional style that works best for them. My teaching style is different from other WordPress trainers. My tutorials are less formal, less scripted and more like I am having a conversation with my students. I give them a little more time to take in the information so it makes more sense. I provide screenshots as well, so students who learn better through visual styles can get what they need. That’s not everyone’s style of learning, but some people are naturally drawn to my approach.

\n

But what really sets BobWPTutorials apart from the others is that I have a deep focus on two themes, Genesis Child Themes and WooThemes so members can explore the themes thoroughly and figure out what they need upfront, before they make a purchase. This has been a recurring issue with people who have come to me after having a bad experience. They have bought a theme and now they find it isn’t the one that will work best for their needs.

\n
A Sample Of The Free Videos Available

A Sample Of The Free Videos Available

\n

So I wanted to hit that pain point. For each theme, members get an overview tutorial that lets them know what they can and cannot do with it out-of-the-box, without customizations. (Because most people who work with me fear code.) One of the hardest things for users to do is to visualize what their site might look like by just looking at the theme demo. The second video helps members set up their chosen theme step by step, primarily that all-important home page. In this second video, I also give them other setup options, so they understand they are not stuck with the exact look of the theme provider’s demo.

\n

Lastly, I have added Video Highlights. This is a separate text and screenshot instruction that goes over the major points of the video. This way a member can revisit the important details without having to watch the entire video again.

\n

Based on your experience, what is the most common area of WordPress people struggle with?

\n

Wow, where do I start? I think in a general sense, it’s the non-intuitiveness of the interface. Lots of smart people get lost there and some of the simplest features are well-hidden. One example: During a training session, I shared how to expand the editor window by dragging the edged corner. You cannot imagine how many “ah-ha’s” I heard in the audience. One person even shared that they had been frustrated by that for six months.

\n
Lots Of Themes To Choose From

Lots Of Themes To Choose From

\n

Another thing people struggle with is theme choice. I know several WordPress people who say “just grab one and start with it”. But I have seen too many people struggle because they hadn’t thought through what they need their theme to do. Some will wallow in the sea of themes for months, frustrated and still not finding what they are looking for.

\n

Those are just two of the areas users struggle with. It really depends on the person and their comfort level with technology. I know some very smart people who have Masters and Doctorates, but, still, they find it all very confusing.

\n

On average, what demographic represents the majority of your customers?

\n

It’s all over the board, but my one-on-one training is skewed toward the 40+ crowd. If I had to choose, I’d say it’s stronger on the female side. Often, they are people who are at a certain age and changing careers, starting a new business, stepping into the world of technology, or wanting to grow their hobby or interest. A lot of people in that age bracket feel they have been left behind by technology. I tend to attract them probably because of my age and my patience, maybe. You need to be a very patient person to be a WordPress trainer.

\n

I have dealt with all ages, skill levels, genders and ethnic backgrounds. I’m a pretty laid-back guy with an open mind and a love for people.

\n

WordPress is an ever-evolving piece of software. Are you finding it harder or easier to explain how it works to new users?

\n

It’s true, it keeps me on the ball, keeping up with the changes and communicating them to my clients. But I wouldn’t say it’s any harder to explain as time passes. It can always be a challenge to teach an old dog a new trick. But it’s also what I love about my job. Constantly learning new things and finding ways to make the new and difficult easy for the next person to understand. I love that things change and evolve.

\n

Out of curiosity, what membership plugin are you using for Bobwptutorials and why did you choose it over others?

\n

I’m using Woo Commerce and a combination of extensions, including Groups and Subscriptions. My choice had a lot to do with my history with WooThemes, and, yes, Genesis child themes. With my personal training and Bobwptutorials, I focus on Genesis child themes and WooThemes. Why? Because I have used them both since I started with WordPress back in 2008 and I know and trust them.

\n

Woo Commerce Grey

\n

My site bobwp.com is built on a Genesis child theme, so I wanted to make my second site with a WooTheme, you know, to share the love. When I first came up with the idea of this site, I contacted Matt at WooThemes, laid it out and said, can I make this work with a WooTheme and WooCommerce (the latter of which I already had some experience with)? He said yes, so that decided that. I love things that are simple, and if I can use something I already know well, I’m on it. I have tried a couple of membership plugins in the past on other sites, some I like, some not so much. But I can say there are some really good membership plugins out there. This was just the best route for me to go for this site.

\n

Bob Is The Man

\n

Be sure to check out the four free videos he’s made available. For example, this video explains the differences between posts and pages. I found it to be informative without being boring. If you are having trouble learning WordPress and need a patient individual to help guide you through the trenches, Bob Dunn is an excellent choice.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 20 Feb 2014 23:28:34 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Jeff Chandler";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:44;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:65:"WPTavern: Speed Up WordPress Development With The Titan Framework";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17167";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:174:"http://wptavern.com/speed-up-wordpress-development-with-the-titan-framework?utm_source=rss&utm_medium=rss&utm_campaign=speed-up-wordpress-development-with-the-titan-framework";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:7169:"

The Titan Framework is a new WordPress options framework that was released on WordPress.org this week. This set of tools was created to make it easy for WordPress theme and plugin developers to add options to their projects. This first release contains more than 20 options, including meta boxes, Google font selector, a media uploader, multicheck categories and taxonomies, theme customizer options and more.

\n

Titan claims to be the easiest options framework you’ll ever use. With just a few simple lines of code you can quickly add customization options that are easy for clients to use and understand. For example, to get an instance of the Titan Framework for your plugin, you’d add just one line to the the main plugin file:

\n
$titan = TitanFramework::getInstance( ''my-plugin'' );
\n

Setting up an admin page and menu for your options is as easy as adding a couple lines of code:

\n
$panel = $titan->createAdminPanel( array(\n    name => ''Theme Options'',\n) );
\n

This helps to keep your code clean with the Titan engine powering the details related to building options.

\n

The Titan Framework Was Built For Efficiency

\n

me2I had the chance to speak with Benjamin Intal, Titan Framework’s creator, to ask him why he decided to put another WordPress options framework out into the wild, despite the fact that there are already so many. Intal said that Titan resulted from a bit of spring cleaning he completed on his themes.

\n

“When I started creating WordPress themes 4 years ago, as my number of projects grew, I had a hard time managing all the code from the different themes I had,” he said. “By instinct, I started unifying all the similar code to make things more manageable. After months of work, I ended up with a huge framework that handled everything the theme needed.”

\n

From there his private framework evolved as he learned more about WordPress best practices. Intal began removing much of the functionality and turning it into plugins:

\n

My mindset was that every feature should be included with the theme. As I learned more and more about the ins and outs of WordPress, I learned that what I did was a big no no. So now, I’m dissecting those themes, and turning its innards into plugins. One of those is the Titan Framework.

\n

Intal’s spring cleaning resulted in a powerful set of options that speed up development. He uses it regularly in client projects. In one example he needed to provide information on various locations on a map, so he created a custom post type for locations and Titan powers most of the meta box options for inputting custom fields such as latitude, longitude and other location properties.

\n

While Intal maintains the framework for the purpose of efficiency in his own work, it’s now something that anyone can use. “Titan Framework focuses on ease of use,” he said. “For me, that translates to minimal coding and fewer things to remember.”

\n

When creating the Titan Framework, Intal wanted to make a standardized way of adding options, so that it’s easy for developers to remember how to accomplish common tasks. He described the problem he was trying to solve and how Titan can improve your workflow:

\n

In WordPress, admin options, custom fields and theme customizer controls are all different from each other. These are set up differently and getting the saved values for each type is performed differently. Titan Framework unifies all these so that you won’t really have to know whether you’re using an admin option, a custom field or a customizer control. Everything is just an option. Because of this, getting your saved values is just one simple method: the getOption method.

\n

How to Include the Titan Framework in Your Project

\n

options
\nCurrently, if you want to use Titan with your work, you’ll need to have the plugin activated alongside your own theme or plugin. This will allow you to call the framework’s functions inside your project. Refer to the developers’ documentation on the Titan project page for further instructions and a snippet for checking to see if Titan has been activated.

\n

“Ideally, Titan should always be a plugin that’s separate from your theme or plugin so that Titan can be updated for bug fixes or new features,” Intal said. However, he recognizes that some developers might want to bundle the framework within their projects. He plans on performing an update soon that will make that possible.

\n

Future Additions to the Titan Framework

\n

Intal has plans to expand the number of options in the framework, which currently includes most of the basics. He’ll be adding a palette selector, widget area selector and menu selector further down the road.

\n

He also plans to include functionality for easily creating and selecting widget areas, as well as new functions for creating shortcodes.

\n

Ital said that what he’s trying to accomplish with Titan is not based on a desire to improve deficiencies he’s seen in other frameworks. “When I was in the process of creating Titan Framework, I honestly did not dive into the other existing frameworks since I already had everything I needed to complete it,” he said. “I’ve just started now to check out what’s out there and I’m finding that there are a lot of great frameworks such as Redux and OptionTree.”

\n

Of course, if you’re trying to learn how to code plugin and theme options from the inside out, then using an options framework is not the way to go. The idea behind using a framework is to save yourself time in development and focus on building your project. There’s no need to reinvent the wheel every time you need to add a few options. Titan saves you the hassle of having to code them from scratch. For more information and examples on how to use it, check out the Titan Framework homepage and documentation.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 20 Feb 2014 21:46:12 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:45;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:71:"WordPress.tv: Brian Messenlehner: WordPress As An Application Framework";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=30745";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:88:"http://wordpress.tv/2014/02/20/brian-messenlehner-wordpress-as-an-application-framework/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:691:"
\n

Brian Messenlehner: WordPress As An Application Framework
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 20 Feb 2014 19:34:52 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:46;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:67:"WordPress.tv: Mike Little: 10 Years Of WordPress A Founder’s View";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wordpress.tv/?p=31554";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:81:"http://wordpress.tv/2014/02/20/mike-little-10-years-of-wordpress-a-founders-view/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:684:"
\n

Mike Little: 10 Years Of WordPress A Founder’s View
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 20 Feb 2014 19:23:38 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"WordPress.tv";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:47;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:71:"WPTavern: WordPress Theme Shops Move Toward Preserving Data Portability";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17381";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:188:"http://wptavern.com/wordpress-theme-shops-move-towards-preserving-data-portability?utm_source=rss&utm_medium=rss&utm_campaign=wordpress-theme-shops-move-towards-preserving-data-portability";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:6572:"
photo credit: kthread - cc

photo credit: kthreadcc

\n

In the old days, WordPress theme developers used to build loads of specific functionality into their themes, i.e. recipes, portfolios, testimonials, analytics, fundraising capabilities, custom post types etc. Commercial theme providers competed fiercely with one another to see who could pack the most functionality into their offerings. Many companies sought to become a one-stop-shop for everything an individual or business might need in order to launch an online presence.

\n

The practice of locking users into using a theme by tying their content/data to the use of the theme is now highly discouraged. WordPress theme shops have slowly started to separate function from design in favor of preserving data portability.

\n

restaurantThis past week we’ve seen more evidence of this trend as two major theme providers have released plugins for functionality that users might previously have expected to find within themes. Justin Tadlock, who has long been a vocal advocate of data portability in themes, released a new free Restaurant plugin. The plugin allows restaurants to manage a food and beverage menu and works as a companion to themes.

\n

WooThemes released Projects this week, a new plugin to handle portfolio capabilities. They said that preserving data portability is one of the main reasons behind this decision:

\n

You’ve probably already noticed that our product strategy has deviated to separating features and code wherever possible, shifting our functionality into plugins, rather than bundling into each theme…It also ensures your data is portable, which aligns with a core WordPress philosophy.

\n

UpThemes’ recent open letter to the WordPress Community is further demonstration that the tides are turning in favor of data portability. In it, they openly admit that it was impossible for them to continue to support all of the extra stuff that they had been building into themes:

\n

Gone are the days of locking custom post types in a theme. No longer do we build pluginesque functionality into the core of a theme. We now build themes that rely on existing, awesome plugins that offer features that can be used with other themes, should you choose to update your design or build your own theme.

\n

UpThemes is starting fresh and making use of plugins such as Church Theme Content and Recipe Schema to add extra functionality, instead of packing it all into themes.

\n

We’re witnessing the end of an era in WordPress theme development. Bloat is no longer acceptable. Theme authors are creating leaner products with a stronger focus on designing for specific use cases. Anything extra is plugin territory.

\n

This should be quite liberating for theme authors who no longer bear the pressure of having to pack all kinds of complex functionality and options into their products. Themes and plugins will no longer overlap as heavily as they have in the past but will act as compliments to one another.

\n

Tips For Consumers

\n
photo credit: Leo Reynolds - cc

photo credit: Leo Reynoldscc

\n

If you’re looking at this issue from a consumer standpoint, the most important thing to remember is that you are the guardian of your own data. If you choose a theme that locks you in, you are the one who will suffer the inconvenience of trying to transfer data when you change to a new theme.

\n

Before installing a new theme, whether its free or commercial, ask yourself if you’ll be able to take all of your data with you, if and when you decide to stop using that theme. If the theme advertises dozens of capabilities, examine each of them to make sure that they don’t tie you down.

\n

Last year we discussed this issue in a post about why you should never add analytics code to your WordPress theme. This is because analytics have nothing to do with the design of the theme. It’s a function that you’ll need to maintain throughout years of using WordPress with many different themes. You don’t want to have to transfer that data every time. Store it in a plugin and be done with it.

\n

The same goes for portfolios, testimonials, recipes and custom post types. You’re likely to want this data on your website for years to come. Make sure that the theme you choose will give you that freedom. Find plugin substitutes for any data-driven functionality that is built into your theme. It’s not as convenient, but ultimately you’ll be glad that you kept your data separate from the design.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 20 Feb 2014 13:01:09 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:48;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:61:"WPTavern: Tips For Promoting Newly Released WordPress Plugins";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17390";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:166:"http://wptavern.com/tips-for-promoting-newly-released-wordpress-plugins?utm_source=rss&utm_medium=rss&utm_campaign=tips-for-promoting-newly-released-wordpress-plugins";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:4939:"

So you just created and released a cool WordPress plugin that solves a problem. It’s now among 29,000 other plugins on the plugin directory. How do you tell the world your plugin exists? WordPress.org doesn’t have an area to publish press releases or announcements of new plugins.

\n
photo credit: jono dot com - cc

photo credit: jono dot comcc

\n

However, all plugins published to the repository show up on the newest plugins list. This list has an RSS feed but you have to know where to look to subscribe to it. In WordPress 3.8, the dashboard widget showing the newest plugins released was removed.

\n
News Plugins Released On WordPress.org

News Plugins Released On WordPress.org

\n

If Your Plugin Solves a Problem, We Want To Hear About It

\n

The best way to get your plugin noticed is to contact authors of websites that primarily focus on WordPress. For example, you can contact us. When pitching your plugin, don’t pretend it’s a sales pitch. Provide the name of the plugin, it’s target audience and the problem it solves. There is no guarantee that WPTavern or any other website will write about your plugin, even if that information is provided. But it’s worth a shot.

\n

When we write about plugins on WPTavern, they’re either cool, innovative, or solve a problem for a large number of users. One of the hardest things to do as a writer is to write about something that is not interesting. The plugins reviewed on WPTavern are seen by a huge audience. I love hearing stories from new plugin authors of how an article on WPTavern put their plugin on the map.

\n

WordPress Podcast Dedicated To Plugins

\n

Plugins A-Z is a podcast dedicated to WordPress plugins. Hosted by Marcus Couch and John Overall, they discuss new plugins that have caught their eye. You can get in touch with them via their contact form. Don’t only submit information about your plugin, but extend an offer to be on their show as a guest. Who knows a plugin better than the person who created it?

\n

Subreddit Dedicated To WordPress Plugins

\n

Reddit LogoA few weeks ago, we mentioned Reddit was a good place to hang out if you enjoyed discussing WordPress topics. There is a subreddit available dedicated to WordPress plugins. Developers are welcome to show off their plugins for feedback and offer custom development services when needed.

\n

Plugin Developers Are Problem Solvers

\n

In general, plugin developers are not looking for fame. Most plugins are solutions to a problem or scratch a developer’s itch. By releasing a plugin into the wild, the hope is it will solve the same problem for others. Thank you to every plugin developer who has placed their code onto the WordPress.org plugin repository. More often then not, those plugins are solutions to problems.

\n

If you know any other outlets authors can use to promote their new plugins, please share them in the comments.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 20 Feb 2014 02:28:58 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Jeff Chandler";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:49;a:6:{s:4:"data";s:13:"\n \n \n \n \n \n \n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:91:"WPTavern: Own Your Content: Postcard Social Sharing App Launches With WordPress Integration";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://wptavern.com/?p=17326";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:224:"http://wptavern.com/own-your-content-postcard-social-sharing-app-launches-with-wordpress-integration?utm_source=rss&utm_medium=rss&utm_campaign=own-your-content-postcard-social-sharing-app-launches-with-wordpress-integration";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:5397:"

postcard-appPostcard is a new free social sharing app for iOS that landed in the app store today. The app makes it easy for you to share content from your phone to multiple social networks at once.

\n

The golden feature of this app is its “Custom Network” capability, which allows you to share to your own website. Many times people will share content, such as a quick status or photo, to Facebook or Twitter. The content is then hosted on the social networks, which gobble up all the traffic.

\n

Postcard addresses this problem by allowing you to set your own website as the “host” network and direct all the traffic to your site where the content is hosted.

\n

WordPress Plugin Connects Postcard to Your Website

\n

Given that WordPress is the world’s leading publishing platform, Postcard’s creator decided to launch with WordPress integration available from day one.

\n

This plugin performs two main functions:

\n
    \n
  1. Links the Postcard App to your WordPress site
  2. \n
  3. Makes it possible to display content sent via Postcard on your site
  4. \n
\n

When you send your content to be hosted on your site, you won’t have any of the character restrictions that come with sharing to other social networks. The plugin creates shareable permalinks attached to the messages that you share to Facebook, Twitter and other networks.

\n

The Postcard WordPress plugin also gives you a number of shortcodes to use in the post/page editor for inserting content that comes from the app. The shortcodes make it easy to display an archive, feed or gallery of your Postcard content. The content can also be filtered using the designated attributes, such as tags or count:

\n
[postcard-feed tags="interesting,useful"]
\n

The Postcard Social Networking Plugin is available for free on WordPress.org. With the plugin and the app working hand-in-hand, you can create an archive of all the data that you share to social networks from your phone, even if you don’t choose to use shortcodes to display it on the front-end.

\n

Own Your Content and Boost Traffic to Your WordPress Site

\n

Kyle Newsome, the app’s creator, said that the ability to share to your own website is the feature that he is the most excited about: “It represents most strongly why I started building this app in the first place – to help people solve content ownership and control issues I see prevalent in the shape of social media today.”

\n

Newsome designed Postcard to be a tool that can help people to keep their website content fresh. “There is a big opportunity with this app to make sure your website doesn’t go stale as you post regular short form content to social networks,” he said. Since many people are already putting quite a bit of effort into updating their social networks, Postcard gives you a way to broadcast to all of them while passing the resulting traffic on to your own website.

\n

One important thing to note is that Postcard doesn’t store your content or use it to create a social network of any kind. I asked Newsome to clarify how it works. “It doesn’t store data or use 3rd party servers,” he said. “All credentials are local and securely stored on the phone.” This is an important distinction when comparing Postcard to other apps that claim to let you own your own data. If you use the Custom Network feature, the app simply couriers that data to your site where you own the content.

\n

An App to Fundamentally Change How We Use Social Networks

\n

Postcard presents a new way to interact with social networks. When announcing the upcoming launch, Newsome said, “For those of us who are active content creators, I think this marks a very important change in the way we use social media.” Having your own website as the canonical source for the content you create has value beyond the traffic that you gain. That link to your site and the fact that you host the data assigns ownership of that content to you. It also provides a lasting archive of your content that can be sorted and presented in any way that you choose.

\n

Right now Postcard is only available for iOS. I asked Newsome if an Android app is in the works. He replied, “Yes, cross-platform is in the plan. I’m looking at ways to hit both desktop and more mobile platforms.” As soon as these tools are available, Postcard will be set to double, if not triple its user base, given that Android currently dominates the smartphone market. We’ll keep you updated as these tools continue to develop.

";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 19 Feb 2014 21:01:23 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Sarah Gooding";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}}}}}}}}}}}s:4:"type";i:128;s:7:"headers";a:9:{s:6:"server";s:5:"nginx";s:4:"date";s:29:"Fri, 28 Feb 2014 11:58:02 GMT";s:12:"content-type";s:8:"text/xml";s:14:"content-length";s:6:"172233";s:10:"connection";s:5:"close";s:4:"vary";s:15:"Accept-Encoding";s:13:"last-modified";s:29:"Fri, 28 Feb 2014 11:45:13 GMT";s:4:"x-nc";s:11:"HIT lax 249";s:13:"accept-ranges";s:5:"bytes";}s:5:"build";s:14:"20130911030210";}', 'no'); +INSERT INTO `drgrp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES +(1399, 'rewrite_rules', 'a:188:{s:8:"horse/?$";s:29:"index.php?post_type=drg_horse";s:38:"horse/feed/(feed|rdf|rss|rss2|atom)/?$";s:46:"index.php?post_type=drg_horse&feed=$matches[1]";s:33:"horse/(feed|rdf|rss|rss2|atom)/?$";s:46:"index.php?post_type=drg_horse&feed=$matches[1]";s:25:"horse/page/([0-9]{1,})/?$";s:47:"index.php?post_type=drg_horse&paged=$matches[1]";s:47:"category/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$";s:52:"index.php?category_name=$matches[1]&feed=$matches[2]";s:42:"category/(.+?)/(feed|rdf|rss|rss2|atom)/?$";s:52:"index.php?category_name=$matches[1]&feed=$matches[2]";s:35:"category/(.+?)/page/?([0-9]{1,})/?$";s:53:"index.php?category_name=$matches[1]&paged=$matches[2]";s:17:"category/(.+?)/?$";s:35:"index.php?category_name=$matches[1]";s:44:"tag/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:42:"index.php?tag=$matches[1]&feed=$matches[2]";s:39:"tag/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:42:"index.php?tag=$matches[1]&feed=$matches[2]";s:32:"tag/([^/]+)/page/?([0-9]{1,})/?$";s:43:"index.php?tag=$matches[1]&paged=$matches[2]";s:14:"tag/([^/]+)/?$";s:25:"index.php?tag=$matches[1]";s:45:"type/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:50:"index.php?post_format=$matches[1]&feed=$matches[2]";s:40:"type/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:50:"index.php?post_format=$matches[1]&feed=$matches[2]";s:33:"type/([^/]+)/page/?([0-9]{1,})/?$";s:51:"index.php?post_format=$matches[1]&paged=$matches[2]";s:15:"type/([^/]+)/?$";s:33:"index.php?post_format=$matches[1]";s:33:"horse/[^/]+/attachment/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:43:"horse/[^/]+/attachment/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:63:"horse/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:58:"horse/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:58:"horse/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";s:26:"horse/([^/]+)/trackback/?$";s:36:"index.php?drg_horse=$matches[1]&tb=1";s:46:"horse/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:48:"index.php?drg_horse=$matches[1]&feed=$matches[2]";s:41:"horse/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:48:"index.php?drg_horse=$matches[1]&feed=$matches[2]";s:34:"horse/([^/]+)/page/?([0-9]{1,})/?$";s:49:"index.php?drg_horse=$matches[1]&paged=$matches[2]";s:41:"horse/([^/]+)/comment-page-([0-9]{1,})/?$";s:49:"index.php?drg_horse=$matches[1]&cpage=$matches[2]";s:26:"horse/([^/]+)(/[0-9]+)?/?$";s:48:"index.php?drg_horse=$matches[1]&page=$matches[2]";s:22:"horse/[^/]+/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:32:"horse/[^/]+/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:52:"horse/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:47:"horse/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:47:"horse/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";s:57:"horse_categories/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:55:"index.php?horse_categories=$matches[1]&feed=$matches[2]";s:52:"horse_categories/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:55:"index.php?horse_categories=$matches[1]&feed=$matches[2]";s:45:"horse_categories/([^/]+)/page/?([0-9]{1,})/?$";s:56:"index.php?horse_categories=$matches[1]&paged=$matches[2]";s:27:"horse_categories/([^/]+)/?$";s:38:"index.php?horse_categories=$matches[1]";s:53:"horse_breeds/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:51:"index.php?horse_breeds=$matches[1]&feed=$matches[2]";s:48:"horse_breeds/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:51:"index.php?horse_breeds=$matches[1]&feed=$matches[2]";s:41:"horse_breeds/([^/]+)/page/?([0-9]{1,})/?$";s:52:"index.php?horse_breeds=$matches[1]&paged=$matches[2]";s:23:"horse_breeds/([^/]+)/?$";s:34:"index.php?horse_breeds=$matches[1]";s:51:"horse_ages/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?horse_ages=$matches[1]&feed=$matches[2]";s:46:"horse_ages/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?horse_ages=$matches[1]&feed=$matches[2]";s:39:"horse_ages/([^/]+)/page/?([0-9]{1,})/?$";s:50:"index.php?horse_ages=$matches[1]&paged=$matches[2]";s:21:"horse_ages/([^/]+)/?$";s:32:"index.php?horse_ages=$matches[1]";s:54:"horse_genders/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:52:"index.php?horse_genders=$matches[1]&feed=$matches[2]";s:49:"horse_genders/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:52:"index.php?horse_genders=$matches[1]&feed=$matches[2]";s:42:"horse_genders/([^/]+)/page/?([0-9]{1,})/?$";s:53:"index.php?horse_genders=$matches[1]&paged=$matches[2]";s:24:"horse_genders/([^/]+)/?$";s:35:"index.php?horse_genders=$matches[1]";s:51:"horse_tags/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?horse_tags=$matches[1]&feed=$matches[2]";s:46:"horse_tags/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?horse_tags=$matches[1]&feed=$matches[2]";s:39:"horse_tags/([^/]+)/page/?([0-9]{1,})/?$";s:50:"index.php?horse_tags=$matches[1]&paged=$matches[2]";s:21:"horse_tags/([^/]+)/?$";s:32:"index.php?horse_tags=$matches[1]";s:43:"portfolio-items/[^/]+/attachment/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:53:"portfolio-items/[^/]+/attachment/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:73:"portfolio-items/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:68:"portfolio-items/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:68:"portfolio-items/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";s:36:"portfolio-items/([^/]+)/trackback/?$";s:42:"index.php?avada_portfolio=$matches[1]&tb=1";s:44:"portfolio-items/([^/]+)/page/?([0-9]{1,})/?$";s:55:"index.php?avada_portfolio=$matches[1]&paged=$matches[2]";s:51:"portfolio-items/([^/]+)/comment-page-([0-9]{1,})/?$";s:55:"index.php?avada_portfolio=$matches[1]&cpage=$matches[2]";s:36:"portfolio-items/([^/]+)(/[0-9]+)?/?$";s:54:"index.php?avada_portfolio=$matches[1]&page=$matches[2]";s:32:"portfolio-items/[^/]+/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:42:"portfolio-items/[^/]+/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:62:"portfolio-items/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:57:"portfolio-items/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:57:"portfolio-items/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";s:59:"portfolio_category/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:57:"index.php?portfolio_category=$matches[1]&feed=$matches[2]";s:54:"portfolio_category/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:57:"index.php?portfolio_category=$matches[1]&feed=$matches[2]";s:47:"portfolio_category/([^/]+)/page/?([0-9]{1,})/?$";s:58:"index.php?portfolio_category=$matches[1]&paged=$matches[2]";s:29:"portfolio_category/([^/]+)/?$";s:40:"index.php?portfolio_category=$matches[1]";s:57:"portfolio_skills/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:55:"index.php?portfolio_skills=$matches[1]&feed=$matches[2]";s:52:"portfolio_skills/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:55:"index.php?portfolio_skills=$matches[1]&feed=$matches[2]";s:45:"portfolio_skills/([^/]+)/page/?([0-9]{1,})/?$";s:56:"index.php?portfolio_skills=$matches[1]&paged=$matches[2]";s:27:"portfolio_skills/([^/]+)/?$";s:38:"index.php?portfolio_skills=$matches[1]";s:55:"portfolio_tags/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:53:"index.php?portfolio_tags=$matches[1]&feed=$matches[2]";s:50:"portfolio_tags/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:53:"index.php?portfolio_tags=$matches[1]&feed=$matches[2]";s:43:"portfolio_tags/([^/]+)/page/?([0-9]{1,})/?$";s:54:"index.php?portfolio_tags=$matches[1]&paged=$matches[2]";s:25:"portfolio_tags/([^/]+)/?$";s:36:"index.php?portfolio_tags=$matches[1]";s:37:"faq-items/[^/]+/attachment/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:47:"faq-items/[^/]+/attachment/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:67:"faq-items/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:62:"faq-items/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:62:"faq-items/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";s:30:"faq-items/([^/]+)/trackback/?$";s:36:"index.php?avada_faq=$matches[1]&tb=1";s:38:"faq-items/([^/]+)/page/?([0-9]{1,})/?$";s:49:"index.php?avada_faq=$matches[1]&paged=$matches[2]";s:45:"faq-items/([^/]+)/comment-page-([0-9]{1,})/?$";s:49:"index.php?avada_faq=$matches[1]&cpage=$matches[2]";s:30:"faq-items/([^/]+)(/[0-9]+)?/?$";s:48:"index.php?avada_faq=$matches[1]&page=$matches[2]";s:26:"faq-items/[^/]+/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:36:"faq-items/[^/]+/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:56:"faq-items/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:51:"faq-items/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:51:"faq-items/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";s:53:"faq_category/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:51:"index.php?faq_category=$matches[1]&feed=$matches[2]";s:48:"faq_category/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:51:"index.php?faq_category=$matches[1]&feed=$matches[2]";s:41:"faq_category/([^/]+)/page/?([0-9]{1,})/?$";s:52:"index.php?faq_category=$matches[1]&paged=$matches[2]";s:23:"faq_category/([^/]+)/?$";s:34:"index.php?faq_category=$matches[1]";s:41:"elastic-slide/[^/]+/attachment/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:51:"elastic-slide/[^/]+/attachment/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:71:"elastic-slide/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:66:"elastic-slide/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:66:"elastic-slide/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";s:34:"elastic-slide/([^/]+)/trackback/?$";s:46:"index.php?themefusion_elastic=$matches[1]&tb=1";s:42:"elastic-slide/([^/]+)/page/?([0-9]{1,})/?$";s:59:"index.php?themefusion_elastic=$matches[1]&paged=$matches[2]";s:49:"elastic-slide/([^/]+)/comment-page-([0-9]{1,})/?$";s:59:"index.php?themefusion_elastic=$matches[1]&cpage=$matches[2]";s:34:"elastic-slide/([^/]+)(/[0-9]+)?/?$";s:58:"index.php?themefusion_elastic=$matches[1]&page=$matches[2]";s:30:"elastic-slide/[^/]+/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:40:"elastic-slide/[^/]+/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:60:"elastic-slide/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:55:"elastic-slide/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:55:"elastic-slide/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";s:62:"themefusion_es_groups/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:60:"index.php?themefusion_es_groups=$matches[1]&feed=$matches[2]";s:57:"themefusion_es_groups/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:60:"index.php?themefusion_es_groups=$matches[1]&feed=$matches[2]";s:50:"themefusion_es_groups/([^/]+)/page/?([0-9]{1,})/?$";s:61:"index.php?themefusion_es_groups=$matches[1]&paged=$matches[2]";s:32:"themefusion_es_groups/([^/]+)/?$";s:43:"index.php?themefusion_es_groups=$matches[1]";s:34:"slider/[^/]+/attachment/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:44:"slider/[^/]+/attachment/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:64:"slider/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:59:"slider/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:59:"slider/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";s:27:"slider/([^/]+)/trackback/?$";s:32:"index.php?slide=$matches[1]&tb=1";s:35:"slider/([^/]+)/page/?([0-9]{1,})/?$";s:45:"index.php?slide=$matches[1]&paged=$matches[2]";s:42:"slider/([^/]+)/comment-page-([0-9]{1,})/?$";s:45:"index.php?slide=$matches[1]&cpage=$matches[2]";s:27:"slider/([^/]+)(/[0-9]+)?/?$";s:44:"index.php?slide=$matches[1]&page=$matches[2]";s:23:"slider/[^/]+/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:33:"slider/[^/]+/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:53:"slider/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:48:"slider/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:48:"slider/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";s:51:"slide-page/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?slide-page=$matches[1]&feed=$matches[2]";s:46:"slide-page/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?slide-page=$matches[1]&feed=$matches[2]";s:39:"slide-page/([^/]+)/page/?([0-9]{1,})/?$";s:50:"index.php?slide-page=$matches[1]&paged=$matches[2]";s:21:"slide-page/([^/]+)/?$";s:32:"index.php?slide-page=$matches[1]";s:48:".*wp-(atom|rdf|rss|rss2|feed|commentsrss2)\\.php$";s:18:"index.php?feed=old";s:20:".*wp-app\\.php(/.*)?$";s:19:"index.php?error=403";s:18:".*wp-register.php$";s:23:"index.php?register=true";s:32:"feed/(feed|rdf|rss|rss2|atom)/?$";s:27:"index.php?&feed=$matches[1]";s:27:"(feed|rdf|rss|rss2|atom)/?$";s:27:"index.php?&feed=$matches[1]";s:20:"page/?([0-9]{1,})/?$";s:28:"index.php?&paged=$matches[1]";s:27:"comment-page-([0-9]{1,})/?$";s:41:"index.php?&page_id=5037&cpage=$matches[1]";s:41:"comments/feed/(feed|rdf|rss|rss2|atom)/?$";s:42:"index.php?&feed=$matches[1]&withcomments=1";s:36:"comments/(feed|rdf|rss|rss2|atom)/?$";s:42:"index.php?&feed=$matches[1]&withcomments=1";s:44:"search/(.+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:40:"index.php?s=$matches[1]&feed=$matches[2]";s:39:"search/(.+)/(feed|rdf|rss|rss2|atom)/?$";s:40:"index.php?s=$matches[1]&feed=$matches[2]";s:32:"search/(.+)/page/?([0-9]{1,})/?$";s:41:"index.php?s=$matches[1]&paged=$matches[2]";s:14:"search/(.+)/?$";s:23:"index.php?s=$matches[1]";s:47:"author/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:50:"index.php?author_name=$matches[1]&feed=$matches[2]";s:42:"author/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:50:"index.php?author_name=$matches[1]&feed=$matches[2]";s:35:"author/([^/]+)/page/?([0-9]{1,})/?$";s:51:"index.php?author_name=$matches[1]&paged=$matches[2]";s:17:"author/([^/]+)/?$";s:33:"index.php?author_name=$matches[1]";s:69:"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$";s:80:"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]";s:64:"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$";s:80:"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]";s:57:"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/page/?([0-9]{1,})/?$";s:81:"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&paged=$matches[4]";s:39:"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$";s:63:"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]";s:56:"([0-9]{4})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$";s:64:"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]";s:51:"([0-9]{4})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$";s:64:"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]";s:44:"([0-9]{4})/([0-9]{1,2})/page/?([0-9]{1,})/?$";s:65:"index.php?year=$matches[1]&monthnum=$matches[2]&paged=$matches[3]";s:26:"([0-9]{4})/([0-9]{1,2})/?$";s:47:"index.php?year=$matches[1]&monthnum=$matches[2]";s:43:"([0-9]{4})/feed/(feed|rdf|rss|rss2|atom)/?$";s:43:"index.php?year=$matches[1]&feed=$matches[2]";s:38:"([0-9]{4})/(feed|rdf|rss|rss2|atom)/?$";s:43:"index.php?year=$matches[1]&feed=$matches[2]";s:31:"([0-9]{4})/page/?([0-9]{1,})/?$";s:44:"index.php?year=$matches[1]&paged=$matches[2]";s:13:"([0-9]{4})/?$";s:26:"index.php?year=$matches[1]";s:27:".?.+?/attachment/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:37:".?.+?/attachment/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:57:".?.+?/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:52:".?.+?/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:52:".?.+?/attachment/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";s:20:"(.?.+?)/trackback/?$";s:35:"index.php?pagename=$matches[1]&tb=1";s:40:"(.?.+?)/feed/(feed|rdf|rss|rss2|atom)/?$";s:47:"index.php?pagename=$matches[1]&feed=$matches[2]";s:35:"(.?.+?)/(feed|rdf|rss|rss2|atom)/?$";s:47:"index.php?pagename=$matches[1]&feed=$matches[2]";s:28:"(.?.+?)/page/?([0-9]{1,})/?$";s:48:"index.php?pagename=$matches[1]&paged=$matches[2]";s:35:"(.?.+?)/comment-page-([0-9]{1,})/?$";s:48:"index.php?pagename=$matches[1]&cpage=$matches[2]";s:20:"(.?.+?)(/[0-9]+)?/?$";s:47:"index.php?pagename=$matches[1]&page=$matches[2]";s:27:"[^/]+/attachment/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:37:"[^/]+/attachment/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:57:"[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:52:"[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:52:"[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";s:20:"([^/]+)/trackback/?$";s:31:"index.php?name=$matches[1]&tb=1";s:40:"([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:43:"index.php?name=$matches[1]&feed=$matches[2]";s:35:"([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:43:"index.php?name=$matches[1]&feed=$matches[2]";s:28:"([^/]+)/page/?([0-9]{1,})/?$";s:44:"index.php?name=$matches[1]&paged=$matches[2]";s:35:"([^/]+)/comment-page-([0-9]{1,})/?$";s:44:"index.php?name=$matches[1]&cpage=$matches[2]";s:20:"([^/]+)(/[0-9]+)?/?$";s:43:"index.php?name=$matches[1]&page=$matches[2]";s:16:"[^/]+/([^/]+)/?$";s:32:"index.php?attachment=$matches[1]";s:26:"[^/]+/([^/]+)/trackback/?$";s:37:"index.php?attachment=$matches[1]&tb=1";s:46:"[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:41:"[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$";s:49:"index.php?attachment=$matches[1]&feed=$matches[2]";s:41:"[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$";s:50:"index.php?attachment=$matches[1]&cpage=$matches[2]";}', 'yes'), +(1582, '_transient_dash_4077549d03da2e451c8b5f002294ff51', '
  • WordPress 3.8.1 Maintenance Release 23 enero, 2014
    After six weeks and more than 9.3 million downloads of WordPress 3.8, we’re pleased to announce WordPress 3.8.1 is now available. Version 3.8.1 is a maintenance releases that addresses 31 bugs in 3.8, including various fixes and improvements for the new dashboard design and new themes admin screen. An issue with taxonomy queries in WP_Query […]
', 'no'), +(196, 'theme_mods_avada-child-theme', 'a:3:{i:0;b:0;s:18:"nav_menu_locations";a:4:{s:15:"main_navigation";i:26;s:14:"top_navigation";i:28;s:9:"404_pages";i:27;s:17:"sticky_navigation";i:0;}s:16:"sidebars_widgets";a:2:{s:4:"time";i:1391710296;s:4:"data";a:14:{s:19:"wp_inactive_widgets";a:0:{}s:18:"avada-blog-sidebar";a:12:{i:0;s:8:"search-2";i:1;s:14:"recent-posts-2";i:2;s:17:"recent-comments-2";i:3;s:10:"archives-2";i:4;s:12:"categories-2";i:5;s:6:"meta-2";i:6;s:18:"pyre_tabs-widget-6";i:7;s:6:"text-6";i:8;s:21:"recent_works-widget-4";i:9;s:14:"recent-posts-5";i:10;s:6:"text-7";i:11;s:21:"contact_info-widget-3";}s:21:"avada-footer-widget-1";a:1:{i:0;s:6:"text-3";}s:21:"avada-footer-widget-2";a:1:{i:0;s:14:"recent-posts-6";}s:21:"avada-footer-widget-3";a:1:{i:0;s:12:"categories-7";}s:21:"avada-footer-widget-4";a:1:{i:0;s:21:"recent_works-widget-6";}s:25:"avada-slidingbar-widget-1";a:1:{i:0;s:7:"text-10";}s:25:"avada-slidingbar-widget-2";a:1:{i:0;s:7:"text-11";}s:25:"avada-slidingbar-widget-3";N;s:25:"avada-slidingbar-widget-4";N;s:35:"avada-custom-sidebar-contactsidebar";a:3:{i:0;s:21:"contact_info-widget-2";i:1;s:6:"text-8";i:2;s:21:"social_links-widget-3";}s:24:"avada-custom-sidebar-faq";a:2:{i:0;s:8:"search-3";i:1;s:18:"pyre_tabs-widget-5";}s:36:"avada-custom-sidebar-homepagesidebar";a:5:{i:0;s:8:"search-4";i:1;s:18:"pyre_tabs-widget-4";i:2;s:21:"recent_works-widget-5";i:3;s:14:"recent-posts-3";i:4;s:6:"text-5";}s:30:"avada-custom-sidebar-portfolio";a:3:{i:0;s:18:"pyre_tabs-widget-3";i:1;s:6:"text-9";i:2;s:6:"text-4";}}}}', 'yes'), +(203, 'nav_menu_options', 'a:2:{i:0;b:0;s:8:"auto_add";a:0:{}}', 'yes'), +(210, 'WPGMZA_PRO', 'a:2:{s:7:"version";s:3:"3.6";s:14:"version_string";N;}', 'yes'), +(205, 'wpgmza_db_version', '5.22', 'yes'), +(206, 'wpgmza_permission', 'y', 'yes'), +(211, 'gravityformsaddon_gravityformswebapi_version', '1.0', 'yes'), +(212, 'rg_form_version', '1.8.3', 'yes'), +(1613, '_transient_timeout_gform_update_info', '1393695374', 'no'), +(1614, '_transient_gform_update_info', 'a:5:{s:7:"headers";a:6:{s:4:"date";s:29:"Fri, 28 Feb 2014 17:39:32 GMT";s:6:"server";s:118:"Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.27 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g mod_perl/2.0.3 Perl/v5.8.8";s:12:"x-powered-by";s:21:"PHP/5.2.4-2ubuntu5.27";s:14:"content-length";s:2:"82";s:10:"connection";s:5:"close";s:12:"content-type";s:9:"text/html";}s:4:"body";s:82:"{"is_valid_key":"0","expiration_time":0,"version":"1.7.9","url":"","offerings":[]}";s:8:"response";a:2:{s:4:"code";i:200;s:7:"message";s:2:"OK";}s:7:"cookies";a:0:{}s:8:"filename";N;}', 'no'), +(218, '_transient_timeout_GFCache_cfe0a0cbdc7f79e17592a33a99c06fbb', '1391777337', 'no'), +(219, '_transient_GFCache_cfe0a0cbdc7f79e17592a33a99c06fbb', '1', 'no'), +(220, '_transient_timeout_GFCache_451d693043e4c7bcc8c5ffb136df161b', '1391777346', 'no'), +(221, '_transient_GFCache_451d693043e4c7bcc8c5ffb136df161b', '1', 'no'), +(317, '_transient_timeout_GFCache_7f2d0e7d5924073f78149ca9766cf10f', '1391797214', 'no'), +(318, '_transient_GFCache_7f2d0e7d5924073f78149ca9766cf10f', '1', 'no'), +(250, 'widget_facebook-like-widget', 'a:1:{s:12:"_multiwidget";i:1;}', 'yes'), +(1004, 'widget_gform_widget', 'a:3:{i:2;a:7:{s:5:"title";s:21:"Contacta con nosotros";s:7:"form_id";s:1:"1";s:9:"showtitle";N;s:4:"ajax";N;s:15:"disable_scripts";N;s:15:"showdescription";N;s:8:"tabindex";s:1:"1";}i:3;a:7:{s:5:"title";s:17:"Más información";s:7:"form_id";s:1:"1";s:9:"showtitle";N;s:4:"ajax";s:1:"1";s:15:"disable_scripts";s:1:"1";s:15:"showdescription";N;s:8:"tabindex";s:1:"1";}s:12:"_multiwidget";i:1;}', 'yes'), +(413, 'widget_text_icl', 'a:1:{s:12:"_multiwidget";i:1;}', 'yes'), +(1579, '_transient_timeout_feed_mod_b9388c83948825c1edaef0d856b7b109', '1393631685', 'no'), +(1580, '_transient_feed_mod_b9388c83948825c1edaef0d856b7b109', '1393588485', 'no'), +(1581, '_transient_timeout_dash_4077549d03da2e451c8b5f002294ff51', '1393631685', 'no'), +(1577, '_transient_timeout_feed_b9388c83948825c1edaef0d856b7b109', '1393631685', 'no'); +INSERT INTO `drgrp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES +(1578, '_transient_feed_b9388c83948825c1edaef0d856b7b109', 'a:4:{s:5:"child";a:1:{s:0:"";a:1:{s:3:"rss";a:1:{i:0;a:6:{s:4:"data";s:3:"\n \n";s:7:"attribs";a:1:{s:0:"";a:1:{s:7:"version";s:3:"2.0";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:1:{s:0:"";a:1:{s:7:"channel";a:1:{i:0;a:6:{s:4:"data";s:72:"\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:39:"WordPress Plugins » View: Most Popular";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:44:"http://wordpress.org/plugins/browse/popular/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:39:"WordPress Plugins » View: Most Popular";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"language";a:1:{i:0;a:5:{s:4:"data";s:5:"en-US";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 28 Feb 2014 11:42:38 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:9:"generator";a:1:{i:0;a:5:{s:4:"data";s:25:"http://bbpress.org/?v=1.1";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"item";a:15:{i:0;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:14:"Contact Form 7";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:54:"http://wordpress.org/plugins/contact-form-7/#post-2141";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 02 Aug 2007 12:45:03 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:34:"2141@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:54:"Just another contact form plugin. Simple but flexible.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:16:"Takayuki Miyoshi";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:1;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:19:"All in One SEO Pack";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:58:"http://wordpress.org/plugins/all-in-one-seo-pack/#post-753";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 30 Mar 2007 20:08:18 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"753@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:126:"All in One SEO Pack is a WordPress SEO plugin to automatically optimize your WordPress blog for Search Engines such as Google.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:8:"uberdose";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:2;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:22:"WordPress SEO by Yoast";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:53:"http://wordpress.org/plugins/wordpress-seo/#post-8321";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 01 Jan 2009 20:34:44 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:34:"8321@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:131:"Improve your WordPress SEO: Write better content and have a fully optimized WordPress site using the WordPress SEO plugin by Yoast.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Joost de Valk";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:3;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:24:"Jetpack by WordPress.com";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:48:"http://wordpress.org/plugins/jetpack/#post-23862";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 20 Jan 2011 02:21:38 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:35:"23862@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:104:"Supercharge your WordPress site with powerful features previously only available to WordPress.com users.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:9:"Tim Moore";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:4;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:33:"WooCommerce - excelling eCommerce";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:52:"http://wordpress.org/plugins/woocommerce/#post-29860";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 05 Sep 2011 08:13:36 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:35:"29860@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:97:"WooCommerce is a powerful, extendable eCommerce plugin that helps you sell anything. Beautifully.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:9:"WooThemes";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:5;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:18:"WordPress Importer";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:59:"http://wordpress.org/plugins/wordpress-importer/#post-18101";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 20 May 2010 17:42:45 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:35:"18101@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:101:"Import posts, pages, comments, custom fields, categories, tags and more from a WordPress export file.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:14:"Brian Colinger";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:6;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:30:"Google Analytics for WordPress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:70:"http://wordpress.org/plugins/google-analytics-for-wordpress/#post-2316";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 14 Sep 2007 12:15:27 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:34:"2316@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:145:"Track your WordPress site easily and with lots of metadata: views per author & category, automatic tracking of outbound clicks and pageviews.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Joost de Valk";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:7;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:19:"Google XML Sitemaps";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:63:"http://wordpress.org/plugins/google-sitemap-generator/#post-132";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 09 Mar 2007 22:31:32 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"132@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:105:"This plugin will generate a special XML sitemap which will help search engines to better index your blog.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"Arnee";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:8;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:7:"Akismet";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:45:"http://wordpress.org/plugins/akismet/#post-15";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 09 Mar 2007 22:11:30 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:32:"15@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:98:"Akismet checks your comments against the Akismet web service to see if they look like spam or not.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:14:"Matt Mullenweg";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:9;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:18:"Better WP Security";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:59:"http://wordpress.org/plugins/better-wp-security/#post-21738";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 22 Oct 2010 22:06:05 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:35:"21738@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:107:"The easiest, most effective way to secure WordPress. Improve the security of any WordPress site in seconds.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:13:"Chris Wiegman";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:10;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:11:"WP-PageNavi";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:50:"http://wordpress.org/plugins/wp-pagenavi/#post-363";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 09 Mar 2007 23:17:57 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"363@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:49:"Adds a more advanced paging navigation interface.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:11:"Lester Chan";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:11;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:15:"NextGEN Gallery";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:55:"http://wordpress.org/plugins/nextgen-gallery/#post-1169";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 23 Apr 2007 20:08:06 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:34:"1169@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:122:"The most popular WordPress gallery plugin and one of the most popular plugins of all time with over 7.5 million downloads.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:9:"Alex Rabe";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:12;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:12:"Contact Form";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:60:"http://wordpress.org/plugins/contact-form-plugin/#post-26890";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 26 May 2011 07:34:58 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:35:"26890@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:43:"Add Contact Form to your WordPress website.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:11:"bestwebsoft";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:13;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:24:"Share Buttons by AddThis";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:47:"http://wordpress.org/plugins/addthis/#post-8124";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 17 Dec 2008 16:03:39 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:34:"8124@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:134:"AddThis Share Buttons help drive traffic to your site by helping visitors share, bookmark and email your content to over 330 services.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"_mjk_";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:14;a:6:{s:4:"data";s:30:"\n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:16:"TinyMCE Advanced";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:56:"http://wordpress.org/plugins/tinymce-advanced/#post-2082";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 27 Jun 2007 15:00:26 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:34:"2082@http://wordpress.org/plugins/";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:71:"Enables the advanced features of TinyMCE, the WordPress WYSIWYG editor.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:10:"Andrew Ozz";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}}s:27:"http://www.w3.org/2005/Atom";a:1:{s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:3:{s:4:"href";s:45:"http://wordpress.org/plugins/rss/view/popular";s:3:"rel";s:4:"self";s:4:"type";s:19:"application/rss+xml";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}}}}}}}s:4:"type";i:128;s:7:"headers";a:10:{s:6:"server";s:5:"nginx";s:4:"date";s:29:"Fri, 28 Feb 2014 11:58:03 GMT";s:12:"content-type";s:23:"text/xml; charset=UTF-8";s:10:"connection";s:5:"close";s:4:"vary";s:15:"Accept-Encoding";s:7:"expires";s:29:"Fri, 28 Feb 2014 12:17:38 GMT";s:13:"cache-control";s:0:"";s:6:"pragma";s:0:"";s:13:"last-modified";s:31:"Fri, 28 Feb 2014 11:42:38 +0000";s:4:"x-nc";s:11:"HIT lax 250";}s:5:"build";s:14:"20130911030210";}', 'no'), +(443, '_transient_timeout_plugin_slugs', '1393600470', 'no'), +(444, '_transient_plugin_slugs', 'a:15:{i:0;s:27:"fusion-core/fusion-core.php";i:1;s:29:"gravityforms/gravityforms.php";i:2;s:36:"gravityforms-multilingual/plugin.php";i:3;s:52:"onet-regenerate-thumbnails/onet-regen-thumbnails.php";i:4;s:38:"post-duplicator/m4c-postduplicator.php";i:5;s:23:"revslider/revslider.php";i:6;s:35:"wordpress-reset/wordpress-reset.php";i:7;s:31:"wp-google-maps/wpGoogleMaps.php";i:8;s:41:"wp-google-maps-pro/wp-google-maps-pro.php";i:9;s:23:"wpml-cms-nav/plugin.php";i:10;s:40:"sitepress-multilingual-cms/sitepress.php";i:11;s:28:"wpml-sticky-links/plugin.php";i:12;s:34:"wpml-string-translation/plugin.php";i:13;s:37:"wpml-translation-analytics/plugin.php";i:14;s:38:"wpml-translation-management/plugin.php";}', 'no'), +(1405, 'drgrp_icl_non_translators_cached', 'a:0:{}', 'yes'), +(1404, 'drgrp_icl_translators_cached', 'a:1:{i:0;O:8:"stdClass":1:{s:2:"ID";s:1:"1";}}', 'yes'), +(185, 'ls-plugin-version', '5.0.2', 'yes'), +(186, 'ls-installed', '1', 'yes'), +(187, 'ls-google-fonts', 'a:4:{i:0;a:2:{s:5:"param";s:28:"Lato:100,300,regular,700,900";s:5:"admin";b:0;}i:1;a:2:{s:5:"param";s:13:"Open+Sans:300";s:5:"admin";b:0;}i:2;a:2:{s:5:"param";s:20:"Indie+Flower:regular";s:5:"admin";b:0;}i:3;a:2:{s:5:"param";s:22:"Oswald:300,regular,700";s:5:"admin";b:0;}}', 'yes'), +(194, '_site_transient_timeout_wporg_theme_feature_list', '1391720806', 'yes'), +(195, '_site_transient_wporg_theme_feature_list', 'a:5:{s:6:"Colors";a:15:{i:0;s:5:"black";i:1;s:4:"blue";i:2;s:5:"brown";i:3;s:4:"gray";i:4;s:5:"green";i:5;s:6:"orange";i:6;s:4:"pink";i:7;s:6:"purple";i:8;s:3:"red";i:9;s:6:"silver";i:10;s:3:"tan";i:11;s:5:"white";i:12;s:6:"yellow";i:13;s:4:"dark";i:14;s:5:"light";}s:7:"Columns";a:6:{i:0;s:10:"one-column";i:1;s:11:"two-columns";i:2;s:13:"three-columns";i:3;s:12:"four-columns";i:4;s:12:"left-sidebar";i:5;s:13:"right-sidebar";}s:6:"Layout";a:3:{i:0;s:12:"fixed-layout";i:1;s:12:"fluid-layout";i:2;s:17:"responsive-layout";}s:8:"Features";a:20:{i:0;s:19:"accessibility-ready";i:1;s:8:"blavatar";i:2;s:10:"buddypress";i:3;s:17:"custom-background";i:4;s:13:"custom-colors";i:5;s:13:"custom-header";i:6;s:11:"custom-menu";i:7;s:12:"editor-style";i:8;s:21:"featured-image-header";i:9;s:15:"featured-images";i:10;s:15:"flexible-header";i:11;s:20:"front-page-post-form";i:12;s:19:"full-width-template";i:13;s:12:"microformats";i:14;s:12:"post-formats";i:15;s:20:"rtl-language-support";i:16;s:11:"sticky-post";i:17;s:13:"theme-options";i:18;s:17:"threaded-comments";i:19;s:17:"translation-ready";}s:7:"Subject";a:3:{i:0;s:7:"holiday";i:1;s:13:"photoblogging";i:2;s:8:"seasonal";}}', 'yes'), +(129, 'current_theme', 'Double R Group', 'yes'), +(130, 'theme_mods_avada', 'a:3:{i:0;b:0;s:18:"nav_menu_locations";a:3:{s:15:"main_navigation";i:29;s:9:"404_pages";s:2:"27";s:14:"top_navigation";s:2:"28";}s:16:"sidebars_widgets";a:2:{s:4:"time";i:1391710044;s:4:"data";a:14:{s:19:"wp_inactive_widgets";a:0:{}s:18:"avada-blog-sidebar";a:12:{i:0;s:8:"search-2";i:1;s:14:"recent-posts-2";i:2;s:17:"recent-comments-2";i:3;s:10:"archives-2";i:4;s:12:"categories-2";i:5;s:6:"meta-2";i:6;s:18:"pyre_tabs-widget-6";i:7;s:6:"text-6";i:8;s:21:"recent_works-widget-4";i:9;s:14:"recent-posts-5";i:10;s:6:"text-7";i:11;s:21:"contact_info-widget-3";}s:21:"avada-footer-widget-1";a:1:{i:0;s:6:"text-3";}s:21:"avada-footer-widget-2";a:1:{i:0;s:14:"recent-posts-6";}s:21:"avada-footer-widget-3";a:1:{i:0;s:12:"categories-7";}s:21:"avada-footer-widget-4";a:1:{i:0;s:21:"recent_works-widget-6";}s:25:"avada-slidingbar-widget-1";a:1:{i:0;s:7:"text-10";}s:25:"avada-slidingbar-widget-2";a:1:{i:0;s:7:"text-11";}s:25:"avada-slidingbar-widget-3";N;s:25:"avada-slidingbar-widget-4";N;s:35:"avada-custom-sidebar-contactsidebar";a:3:{i:0;s:21:"contact_info-widget-2";i:1;s:6:"text-8";i:2;s:21:"social_links-widget-3";}s:24:"avada-custom-sidebar-faq";a:2:{i:0;s:8:"search-3";i:1;s:18:"pyre_tabs-widget-5";}s:36:"avada-custom-sidebar-homepagesidebar";a:5:{i:0;s:8:"search-4";i:1;s:18:"pyre_tabs-widget-4";i:2;s:21:"recent_works-widget-5";i:3;s:14:"recent-posts-3";i:4;s:6:"text-5";}s:30:"avada-custom-sidebar-portfolio";a:3:{i:0;s:18:"pyre_tabs-widget-3";i:1;s:6:"text-9";i:2;s:6:"text-4";}}}}', 'yes'), +(131, 'theme_switched', '', 'yes'), +(132, 'avada_int_plugins', '1', 'yes'), +(133, 'avada_layerslider_activated', '1', 'yes'), +(134, 'avada_layerslider_last_version', '4.6.6', 'yes'), +(135, 'shop_catalog_image_size', 'a:3:{s:5:"width";i:500;s:6:"height";s:0:"";i:0;i:0;}', 'yes'), +(136, 'shop_single_image_size', 'a:3:{s:5:"width";i:500;s:6:"height";s:0:"";i:0;i:0;}', 'yes'), +(137, 'shop_thumbnail_image_size', 'a:3:{s:5:"width";i:120;s:6:"height";s:0:"";i:0;i:0;}', 'yes'), +(138, 'Avada_options', 'a:405:{s:10:"responsive";s:1:"1";s:12:"ipad_potrait";s:1:"1";s:16:"google_analytics";s:0:"";s:10:"space_head";s:0:"";s:10:"space_body";s:0:"";s:13:"header_layout";s:2:"v4";s:19:"header_left_content";s:11:"Leave Empty";s:20:"header_right_content";s:11:"Leave Empty";s:17:"header_v4_content";s:7:"Tagline";s:18:"header_banner_code";s:0:"";s:13:"header_number";s:15:"+34 619 686 633";s:12:"header_email";s:21:"info@doublergroup.com";s:14:"header_tagline";s:37:"Cría y alta competición de caballos";s:15:"header_bg_image";s:0:"";s:14:"header_bg_full";s:1:"0";s:18:"header_bg_parallax";s:1:"0";s:16:"header_bg_repeat";s:6:"repeat";s:16:"icons_header_new";s:1:"1";s:17:"margin_header_top";s:3:"0px";s:20:"margin_header_bottom";s:3:"0px";s:13:"header_sticky";s:1:"0";s:20:"header_sticky_tablet";s:1:"0";s:20:"header_sticky_mobile";s:1:"0";s:21:"header_sticky_opacity";s:0:"";s:25:"header_sticky_nav_padding";s:0:"";s:27:"header_sticky_nav_font_size";s:0:"";s:28:"header_sticky_logo_max_width";s:0:"";s:4:"logo";s:70:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Logo-RR.png";s:11:"logo_retina";s:80:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Logo-RR@2x-300x51.png";s:17:"retina_logo_width";s:3:"200";s:18:"retina_logo_height";s:2:"35";s:14:"logo_alignment";s:4:"Left";s:16:"margin_logo_left";s:3:"0px";s:17:"margin_logo_right";s:3:"0px";s:15:"margin_logo_top";s:3:"0px";s:18:"margin_logo_bottom";s:3:"0px";s:7:"favicon";s:0:"";s:11:"iphone_icon";s:0:"";s:18:"iphone_icon_retina";s:0:"";s:9:"ipad_icon";s:0:"";s:16:"ipad_icon_retina";s:0:"";s:10:"nav_height";s:2:"40";s:11:"nav_padding";s:2:"35";s:19:"dropdown_menu_width";s:5:"170px";s:20:"main_nav_search_icon";s:1:"1";s:20:"main_nav_icon_circle";s:1:"1";s:14:"page_title_bar";s:1:"1";s:17:"page_title_height";s:4:"65px";s:13:"page_title_bg";s:0:"";s:20:"page_title_bg_retina";s:0:"";s:18:"page_title_bg_full";s:1:"1";s:22:"page_title_bg_parallax";s:1:"0";s:19:"page_title_bg_color";s:7:"#F6F6F6";s:23:"page_title_border_color";s:7:"#d2d3d4";s:17:"page_title_bar_bs";s:11:"Breadcrumbs";s:10:"breadcrumb";s:1:"1";s:17:"breadcrumb_mobile";s:1:"0";s:16:"breacrumb_prefix";s:0:"";s:18:"slidingbar_widgets";s:1:"0";s:25:"mobile_slidingbar_widgets";s:1:"1";s:21:"slidingbar_top_border";s:1:"0";s:32:"slidingbar_bg_color_transparency";s:1:"0";s:23:"slidingbar_open_on_load";s:1:"0";s:26:"slidingbar_widgets_columns";s:1:"2";s:14:"footer_widgets";s:1:"1";s:22:"footer_widgets_columns";s:1:"3";s:16:"footerw_bg_image";s:69:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/footer.png";s:15:"footerw_bg_full";s:1:"0";s:23:"footer_area_bg_parallax";s:1:"0";s:17:"footerw_bg_repeat";s:8:"repeat-x";s:14:"footerw_bg_pos";s:8:"top left";s:23:"footer_area_top_padding";s:0:"";s:26:"footer_area_bottom_padding";s:0:"";s:16:"footer_copyright";s:1:"1";s:11:"footer_text";s:164:"Copyright 2014 Double R Group | All Rights Reserved | Powered by WordPress | Theme Fusion";s:12:"icons_footer";s:1:"1";s:16:"icons_footer_new";s:1:"1";s:21:"copyright_top_padding";s:0:"";s:24:"copyright_bottom_padding";s:0:"";s:6:"layout";s:4:"Wide";s:8:"bg_image";s:0:"";s:7:"bg_full";s:1:"0";s:9:"bg_repeat";s:6:"repeat";s:8:"bg_color";s:7:"#d7d6d6";s:17:"bg_pattern_option";s:1:"0";s:10:"bg_pattern";s:8:"pattern1";s:16:"content_bg_image";s:0:"";s:15:"content_bg_full";s:1:"0";s:17:"content_bg_repeat";s:6:"repeat";s:16:"custom_font_woff";s:0:"";s:15:"custom_font_ttf";s:0:"";s:15:"custom_font_svg";s:0:"";s:15:"custom_font_eot";s:0:"";s:11:"google_body";s:8:"PT Serif";s:10:"google_nav";s:7:"PT Sans";s:15:"google_headings";s:6:"Roboto";s:22:"google_footer_headings";s:6:"Roboto";s:13:"standard_body";s:11:"Select Font";s:12:"standard_nav";s:11:"Select Font";s:17:"standard_headings";s:11:"Select Font";s:24:"standard_footer_headings";s:11:"Select Font";s:14:"body_font_size";s:2:"15";s:13:"nav_font_size";s:2:"16";s:22:"nav_dropdown_font_size";s:2:"14";s:14:"snav_font_size";s:2:"12";s:18:"side_nav_font_size";s:2:"14";s:21:"breadcrumbs_font_size";s:2:"14";s:15:"sidew_font_size";s:2:"15";s:20:"slidingbar_font_size";s:2:"13";s:15:"footw_font_size";s:2:"13";s:19:"copyright_font_size";s:2:"12";s:12:"h1_font_size";s:2:"32";s:12:"h2_font_size";s:2:"26";s:12:"h3_font_size";s:2:"16";s:12:"h4_font_size";s:2:"13";s:12:"h5_font_size";s:2:"12";s:12:"h6_font_size";s:2:"11";s:17:"tagline_font_size";s:2:"16";s:20:"page_title_font_size";s:2:"24";s:30:"page_title_subheader_font_size";s:2:"18";s:12:"body_font_lh";s:2:"21";s:10:"h1_font_lh";s:2:"44";s:10:"h2_font_lh";s:2:"27";s:10:"h3_font_lh";s:2:"24";s:10:"h4_font_lh";s:2:"20";s:10:"h5_font_lh";s:2:"18";s:10:"h6_font_lh";s:2:"17";s:11:"scheme_type";s:5:"Light";s:12:"color_scheme";s:4:"Blue";s:13:"primary_color";s:7:"#395b7b";s:19:"slidingbar_bg_color";s:7:"#363839";s:22:"header_sticky_bg_color";s:7:"#ffffff";s:15:"header_bg_color";s:7:"#ffffff";s:19:"header_border_color";s:7:"#e5e5e5";s:19:"header_top_bg_color";s:7:"#395b7b";s:16:"content_bg_color";s:7:"#ffffff";s:15:"footer_bg_color";s:7:"#ffffff";s:19:"footer_border_color";s:7:"#ffffff";s:18:"copyright_bg_color";s:7:"#1f1f1f";s:22:"copyright_border_color";s:7:"#242424";s:24:"image_gradient_top_color";s:7:"#c1daeb";s:27:"image_gradient_bottom_color";s:7:"#395b7b";s:25:"button_gradient_top_color";s:7:"#c1daeb";s:28:"button_gradient_bottom_color";s:7:"#395b7b";s:24:"slidingbar_divider_color";s:7:"#282A2B";s:20:"footer_divider_color";s:7:"#505152";s:13:"form_bg_color";s:7:"#ffffff";s:15:"form_text_color";s:7:"#333333";s:17:"form_border_color";s:7:"#d2d2d2";s:17:"timeline_bg_color";s:11:"transparent";s:14:"timeline_color";s:7:"#ebeaea";s:12:"qty_bg_color";s:7:"#fbfaf9";s:18:"qty_bg_hover_color";s:7:"#ffffff";s:19:"bbp_forum_header_bg";s:7:"#ebeaea";s:22:"bbp_forum_border_color";s:7:"#ebeaea";s:21:"socialbox_icons_color";s:4:"Dark";s:18:"header_icons_color";s:5:"Light";s:18:"footer_icons_color";s:4:"Dark";s:16:"main_top_padding";s:0:"";s:19:"main_bottom_padding";s:0:"";s:16:"hundredp_padding";s:0:"";s:18:"button_text_shadow";s:1:"1";s:22:"slidingbar_text_shadow";s:1:"1";s:18:"footer_text_shadow";s:1:"1";s:26:"button_gradient_text_color";s:7:"#395b7b";s:18:"tagline_font_color";s:7:"#747474";s:16:"page_title_color";s:7:"#333333";s:8:"h1_color";s:7:"#333333";s:8:"h2_color";s:7:"#333333";s:8:"h3_color";s:7:"#333333";s:8:"h4_color";s:7:"#333333";s:8:"h5_color";s:7:"#333333";s:8:"h6_color";s:7:"#333333";s:15:"body_text_color";s:7:"#333333";s:10:"link_color";s:7:"#395b7b";s:22:"breadcrumbs_text_color";s:7:"#8C8989";s:25:"slidingbar_headings_color";s:7:"#DDDDDD";s:21:"slidingbar_text_color";s:7:"#8C8989";s:21:"slidingbar_link_color";s:7:"#BFBFBF";s:21:"sidebar_heading_color";s:7:"#333333";s:21:"footer_headings_color";s:7:"#DDDDDD";s:17:"footer_text_color";s:7:"#464849";s:17:"footer_link_color";s:7:"#BFBFBF";s:17:"menu_h45_bg_color";s:7:"#395b7b";s:16:"menu_first_color";s:7:"#ededed";s:22:"menu_hover_first_color";s:7:"#ffffff";s:17:"menu_sub_bg_color";s:7:"#395b7b";s:19:"menu_bg_hover_color";s:7:"#B4C2CD";s:14:"menu_sub_color";s:7:"#ededed";s:18:"menu_sub_sep_color";s:7:"#B4C2CD";s:10:"snav_color";s:7:"#ffffff";s:29:"header_top_first_border_color";s:7:"#B4C2CD";s:23:"header_top_sub_bg_color";s:7:"#395b7b";s:25:"header_top_menu_sub_color";s:7:"#747474";s:30:"header_top_menu_bg_hover_color";s:7:"#fafafa";s:31:"header_top_menu_sub_hover_color";s:7:"#333333";s:29:"header_top_menu_sub_sep_color";s:7:"#B4C2CD";s:17:"woo_cart_bg_color";s:7:"#fafafa";s:24:"accordian_inactive_color";s:7:"#333333";s:20:"counter_filled_color";s:7:"#1a80b6";s:22:"counter_unfilled_color";s:7:"#f6f6f6";s:15:"dates_box_color";s:7:"#eef0f2";s:18:"carousel_nav_color";s:7:"#999999";s:20:"carousel_hover_color";s:7:"#808080";s:20:"content_box_bg_color";s:11:"transparent";s:21:"checklist_icons_color";s:7:"#ffffff";s:18:"title_border_color";s:7:"#e0dede";s:17:"icon_circle_color";s:7:"#333333";s:17:"icon_border_color";s:7:"#333333";s:10:"icon_color";s:7:"#ffffff";s:21:"imgframe_border_color";s:7:"#f6f6f6";s:20:"imgframe_style_color";s:7:"#000000";s:29:"sep_pricing_box_heading_color";s:7:"#333333";s:36:"full_boxed_pricing_box_heading_color";s:7:"#333333";s:17:"pricing_box_color";s:7:"#62a2c4";s:16:"pricing_bg_color";s:7:"#ffffff";s:20:"pricing_border_color";s:7:"#f8f8f8";s:21:"pricing_divider_color";s:7:"#ededed";s:9:"sep_color";s:7:"#e0dede";s:18:"social_links_color";s:4:"Dark";s:15:"social_bg_color";s:7:"#f6f6f6";s:13:"tabs_bg_color";s:7:"#ffffff";s:19:"tabs_inactive_color";s:7:"#ebeaea";s:10:"tagline_bg";s:7:"#f6f6f6";s:20:"tagline_border_color";s:7:"#f6f6f6";s:20:"testimonial_bg_color";s:7:"#f6f6f6";s:22:"testimonial_text_color";s:7:"#747474";s:10:"blog_title";s:4:"Blog";s:11:"blog_layout";s:5:"Large";s:21:"blog_sidebar_position";s:5:"Right";s:19:"blog_archive_layout";s:5:"Large";s:20:"blog_archive_sidebar";s:4:"None";s:20:"blog_pagination_type";s:10:"Pagination";s:17:"blog_grid_columns";s:1:"3";s:14:"content_length";s:7:"Excerpt";s:19:"excerpt_length_blog";s:2:"55";s:18:"strip_html_excerpt";s:1:"1";s:15:"blog_full_width";s:1:"0";s:22:"single_post_full_width";s:1:"0";s:15:"featured_images";s:1:"1";s:32:"alternate_date_format_month_year";s:0:"";s:25:"alternate_date_format_day";s:0:"";s:20:"timeline_date_format";s:0:"";s:22:"featured_images_single";s:1:"1";s:11:"blog_pn_nav";s:1:"0";s:15:"blog_post_title";s:1:"1";s:11:"author_info";s:1:"1";s:18:"social_sharing_box";s:1:"1";s:13:"related_posts";s:1:"1";s:13:"blog_comments";s:1:"1";s:9:"post_meta";s:1:"1";s:16:"post_meta_author";s:1:"0";s:14:"post_meta_date";s:1:"0";s:14:"post_meta_cats";s:1:"0";s:18:"post_meta_comments";s:1:"0";s:14:"post_meta_read";s:1:"0";s:11:"date_format";s:7:"F jS, Y";s:15:"portfolio_items";s:2:"10";s:24:"portfolio_archive_layout";s:20:"Portfolio One Column";s:25:"portfolio_archive_sidebar";s:4:"None";s:24:"portfolio_content_length";s:7:"Excerpt";s:24:"excerpt_length_portfolio";s:2:"55";s:20:"grid_pagination_type";s:10:"Pagination";s:14:"portfolio_slug";s:15:"portfolio-items";s:25:"portfolio_featured_images";s:1:"0";s:16:"portfolio_pn_nav";s:1:"0";s:18:"portfolio_comments";s:1:"0";s:16:"portfolio_author";s:1:"0";s:16:"sharing_facebook";s:1:"1";s:15:"sharing_twitter";s:1:"1";s:14:"sharing_reddit";s:1:"0";s:16:"sharing_linkedin";s:1:"0";s:14:"sharing_google";s:1:"0";s:14:"sharing_tumblr";s:1:"0";s:17:"sharing_pinterest";s:1:"0";s:13:"sharing_email";s:1:"1";s:13:"facebook_link";s:1:"#";s:11:"flickr_link";s:0:"";s:8:"rss_link";s:0:"";s:12:"twitter_link";s:1:"#";s:10:"vimeo_link";s:0:"";s:12:"youtube_link";s:63:"https://www.youtube.com/channel/UCGXuZZA95xD9LdOesfHG9sQ/videos";s:14:"pinterest_link";s:0:"";s:11:"tumblr_link";s:0:"";s:11:"google_link";s:0:"";s:13:"dribbble_link";s:0:"";s:9:"digg_link";s:0:"";s:13:"linkedin_link";s:0:"";s:12:"blogger_link";s:0:"";s:10:"skype_link";s:0:"";s:11:"forrst_link";s:0:"";s:12:"myspace_link";s:0:"";s:15:"deviantart_link";s:0:"";s:10:"yahoo_link";s:0:"";s:11:"reddit_link";s:0:"";s:16:"custom_icon_name";s:0:"";s:17:"custom_icon_image";s:0:"";s:24:"custom_icon_image_retina";s:0:"";s:17:"retina_icon_width";s:0:"";s:18:"retina_icon_height";s:0:"";s:16:"custom_icon_link";s:0:"";s:15:"posts_slideshow";s:1:"1";s:22:"posts_slideshow_number";s:1:"5";s:18:"slideshow_autoplay";s:1:"1";s:23:"slideshow_smooth_height";s:1:"0";s:15:"slideshow_speed";s:4:"7000";s:17:"flexslider_number";s:1:"5";s:22:"pagination_video_slide";s:1:"0";s:22:"legacy_posts_slideshow";s:1:"0";s:16:"flexslider_width";s:5:"940px";s:18:"flexslider_circles";s:1:"0";s:13:"tfs_animation";s:4:"fade";s:12:"tfs_autoplay";s:1:"1";s:19:"tfs_slideshow_speed";s:4:"7000";s:19:"tfs_animation_speed";s:3:"600";s:18:"flexsliders_number";s:1:"1";s:12:"flexslider_1";a:3:{i:1;a:5:{s:5:"order";s:1:"1";s:5:"title";s:148:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam";s:3:"url";s:71:"http://theme-fusion.com/avadaxml/wp-content/uploads/2013/10/slide_1.jpg";s:4:"link";s:0:"";s:11:"description";s:0:"";}i:2;a:5:{s:5:"order";s:1:"2";s:5:"title";s:0:"";s:3:"url";s:0:"";s:4:"link";s:0:"";s:11:"description";s:116:"";}i:3;a:5:{s:5:"order";s:1:"3";s:5:"title";s:148:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam";s:3:"url";s:71:"http://theme-fusion.com/avadaxml/wp-content/uploads/2012/11/slide_2.jpg";s:4:"link";s:0:"";s:11:"description";s:0:"";}}s:17:"tfes_slider_width";s:4:"100%";s:18:"tfes_slider_height";s:5:"400px";s:14:"tfes_animation";s:5:"sides";s:13:"tfes_autoplay";s:1:"1";s:13:"tfes_interval";s:4:"3000";s:10:"tfes_speed";s:3:"800";s:10:"tfes_width";s:3:"150";s:18:"es_title_font_size";s:2:"42";s:20:"es_caption_font_size";s:2:"20";s:14:"es_title_color";s:7:"#333333";s:16:"es_caption_color";s:7:"#747474";s:24:"lightbox_animation_speed";s:4:"Fast";s:16:"lightbox_gallery";s:1:"1";s:17:"lightbox_autoplay";s:1:"0";s:24:"lightbox_slideshow_speed";s:4:"5000";s:16:"lightbox_opacity";s:3:"0.8";s:14:"lightbox_title";s:1:"1";s:13:"lightbox_desc";s:1:"1";s:15:"lightbox_social";s:1:"1";s:20:"lightbox_post_images";s:1:"0";s:9:"gmap_type";s:7:"roadmap";s:10:"gmap_width";s:4:"100%";s:11:"gmap_height";s:5:"415px";s:12:"gmap_address";s:49:"775 New York Ave, Brooklyn, Kings, New York 11203";s:13:"email_address";s:0:"";s:14:"map_zoom_level";s:1:"8";s:7:"map_pin";s:1:"0";s:9:"map_popup";s:1:"0";s:15:"map_scrollwheel";s:1:"0";s:9:"map_scale";s:1:"0";s:15:"map_zoomcontrol";s:1:"0";s:16:"recaptcha_public";s:0:"";s:17:"recaptcha_private";s:0:"";s:22:"recaptcha_color_scheme";s:3:"red";s:16:"sidebar_bg_color";s:11:"transparent";s:13:"content_width";s:10:"71.1702128";s:13:"sidebar_width";s:10:"23.4042553";s:15:"sidebar_padding";s:1:"0";s:14:"dev_shortcodes";s:1:"0";s:16:"avada_rev_styles";s:1:"0";s:18:"testimonials_speed";s:4:"4000";s:19:"default_sidebar_pos";s:5:"Right";s:16:"sidenav_behavior";s:5:"Hover";s:20:"number_related_posts";s:1:"5";s:14:"comments_pages";s:1:"0";s:14:"link_read_more";s:1:"0";s:16:"disable_excerpts";s:1:"0";s:21:"featured_images_pages";s:1:"0";s:18:"faq_featured_image";s:1:"0";s:21:"nofollow_social_links";s:1:"0";s:14:"image_rollover";s:1:"1";s:19:"link_image_rollover";s:1:"0";s:19:"zoom_image_rollover";s:1:"0";s:20:"title_image_rollover";s:1:"0";s:25:"title_link_image_rollover";s:1:"0";s:19:"cats_image_rollover";s:1:"0";s:22:"image_rollover_opacity";s:1:"1";s:14:"search_content";s:15:"Posts and Pages";s:14:"search_excerpt";s:1:"0";s:23:"search_results_per_page";s:2:"10";s:22:"search_featured_images";s:1:"0";s:22:"bbpress_global_sidebar";s:1:"0";s:15:"ppbress_sidebar";s:4:"None";s:8:"ubermenu";s:1:"0";s:15:"post_type_order";s:1:"0";s:18:"status_layerslider";s:1:"0";s:16:"status_revslider";s:1:"0";s:17:"status_flexslider";s:1:"0";s:15:"use_animate_css";s:1:"0";s:26:"disable_mobile_animate_css";s:1:"1";s:15:"status_lightbox";s:1:"0";s:11:"status_gmap";s:1:"0";s:9:"status_yt";s:1:"0";s:12:"status_vimeo";s:1:"0";s:14:"status_jqcycle";s:1:"0";s:14:"status_eslider";s:1:"0";s:12:"status_totop";s:1:"1";s:19:"status_totop_mobile";s:1:"1";s:9:"woo_items";s:2:"12";s:27:"woocommerce_archive_sidebar";s:4:"None";s:28:"woocommerce_acc_link_top_nav";s:1:"1";s:29:"woocommerce_cart_link_top_nav";s:1:"1";s:29:"woocommerce_acc_link_main_nav";s:1:"0";s:30:"woocommerce_cart_link_main_nav";s:1:"1";s:24:"woocommerce_social_links";s:1:"0";s:13:"woo_acc_msg_1";s:55:"Need Assistance? Call customer service at 888-555-5555.";s:13:"woo_acc_msg_2";s:32:"E-mail them at info@yourshop.com";s:10:"custom_css";s:0:"";}', 'yes'), +(151, 'sbg_sidebars', 'a:2:{s:14:"ContactSidebar";s:15:"Contact Sidebar";s:15:"HomepageSidebar";s:17:"Home Page Sidebar";}', 'yes'), +(198, 'theme_mods_double-r-group', 'a:2:{i:0;b:0;s:18:"nav_menu_locations";a:4:{s:14:"top_navigation";s:2:"28";s:9:"404_pages";s:2:"27";s:15:"main_navigation";s:2:"30";s:17:"sticky_navigation";i:0;}}', 'yes'), +(152, 'widget_pyre_tabs-widget', 'a:1:{s:12:"_multiwidget";i:1;}', 'yes'), +(139, 'recently_activated', 'a:4:{s:21:"wpml-media/plugin.php";i:1393514058;s:23:"revslider/revslider.php";i:1393513701;s:67:"custom-taxonomies-menu-widget/sgr-custom-taxonomies-menu-widget.php";i:1393414359;s:31:"wp-google-maps/wpGoogleMaps.php";i:1393264073;}', 'yes'), +(140, 'avada_revslider_css', '1', 'yes'), +(398, 'category_children', 'a:0:{}', 'yes'), +(1081, 'portfolio_skills_children', 'a:0:{}', 'yes'), +(149, 'faq_category_children', 'a:0:{}', 'yes'), +(150, 'slide-page_children', 'a:0:{}', 'yes'), +(153, 'widget_recent_works-widget', 'a:3:{i:6;a:2:{s:5:"title";s:12:"Recent Works";s:6:"number";s:1:"6";}i:5;a:2:{s:5:"title";s:12:"Recent Works";s:6:"number";s:1:"6";}s:12:"_multiwidget";i:1;}', 'yes'), +(154, 'widget_contact_info-widget', 'a:3:{i:4;a:9:{s:5:"title";s:8:"Contacto";s:7:"address";s:0:"";s:5:"phone";s:0:"";s:6:"mobile";s:15:"+34 619 686 633";s:3:"fax";s:0:"";s:5:"email";s:21:"info@doublergroup.com";s:8:"emailtxt";s:0:"";s:3:"web";s:0:"";s:6:"webtxt";s:0:"";}i:5;a:9:{s:5:"title";s:12:"Contact Info";s:7:"address";s:34:"Calle de Almagro, 21, 28010 Madrid";s:5:"phone";s:0:"";s:6:"mobile";s:15:"+34 619 686 633";s:3:"fax";s:0:"";s:5:"email";s:21:"info@doublergroup.com";s:8:"emailtxt";s:0:"";s:3:"web";s:27:"http://www.doublergroup.com";s:6:"webtxt";s:0:"";}s:12:"_multiwidget";i:1;}', 'yes'), +(155, 'widget_social_links-widget', 'a:1:{s:12:"_multiwidget";i:1;}', 'yes'), +(1178, 'widget_sgr-custom-taxonomies-menu', 'a:1:{s:12:"_multiwidget";i:1;}', 'yes'), +(1479, '_site_transient_update_plugins', 'O:8:"stdClass":4:{s:12:"last_checked";i:1393585363;s:7:"checked";a:15:{s:27:"fusion-core/fusion-core.php";s:5:"1.2.1";s:29:"gravityforms/gravityforms.php";s:5:"1.8.3";s:36:"gravityforms-multilingual/plugin.php";s:3:"1.1";s:52:"onet-regenerate-thumbnails/onet-regen-thumbnails.php";s:4:"1.31";s:38:"post-duplicator/m4c-postduplicator.php";s:3:"2.3";s:23:"revslider/revslider.php";s:5:"4.1.4";s:35:"wordpress-reset/wordpress-reset.php";s:5:"1.3.3";s:31:"wp-google-maps/wpGoogleMaps.php";s:4:"5.25";s:41:"wp-google-maps-pro/wp-google-maps-pro.php";s:3:"3.6";s:23:"wpml-cms-nav/plugin.php";s:3:"1.4";s:40:"sitepress-multilingual-cms/sitepress.php";s:7:"3.0.2-a";s:28:"wpml-sticky-links/plugin.php";s:3:"1.3";s:34:"wpml-string-translation/plugin.php";s:5:"2.0.1";s:37:"wpml-translation-analytics/plugin.php";s:5:"1.0.1";s:38:"wpml-translation-management/plugin.php";s:5:"1.9.1";}s:8:"response";a:0:{}s:12:"translations";a:0:{}}', 'yes'), +(1274, 'mtphr_post_duplicator_settings', '', 'yes'), +(1410, 'rg_gforms_enable_html5', '0', 'yes'), +(1411, 'gform_enable_noconflict', '0', 'yes'), +(1412, 'rg_gforms_enable_akismet', '', 'yes'), +(1413, 'rg_gforms_captcha_public_key', '', 'yes'), +(1414, 'rg_gforms_captcha_private_key', '', 'yes'), +(1415, 'rg_gforms_currency', 'EUR', 'yes'), +(1416, 'rg_gforms_message', '\r\n
\\"unlicensed
\r\n', 'yes'), +(393, 'icl_sitepress_version', '3.0.2-a', 'yes'); +INSERT INTO `drgrp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES +(394, 'icl_sitepress_settings', 'a:75:{s:19:"hide_upgrade_notice";s:7:"3.0.2-a";s:21:"interview_translators";i:1;s:34:"existing_content_language_verified";i:1;s:25:"language_negotiation_type";s:1:"3";s:23:"theme_localization_type";i:1;s:14:"icl_lso_header";i:0;s:18:"icl_lso_link_empty";i:1;s:13:"icl_lso_flags";i:1;s:19:"icl_lso_native_lang";i:0;s:20:"icl_lso_display_lang";i:0;s:18:"sync_page_ordering";i:1;s:16:"sync_page_parent";i:1;s:18:"sync_page_template";i:1;s:16:"sync_ping_status";i:1;s:19:"sync_comment_status";i:1;s:16:"sync_sticky_flag";i:1;s:17:"sync_private_flag";i:1;s:16:"sync_post_format";i:1;s:11:"sync_delete";i:0;s:15:"sync_delete_tax";i:0;s:20:"sync_post_taxonomies";i:1;s:14:"sync_post_date";i:0;s:21:"sync_taxonomy_parents";i:0;s:25:"translation_pickup_method";i:1;s:15:"notify_complete";i:1;s:26:"translated_document_status";i:1;s:17:"remote_management";i:0;s:15:"auto_adjust_ids";i:1;s:11:"alert_delay";i:0;s:12:"promote_wpml";i:0;s:23:"troubleshooting_options";a:1:{s:18:"http_communication";i:1;}s:18:"automatic_redirect";i:0;s:17:"remember_language";i:24;s:17:"icl_lang_sel_type";s:4:"list";s:18:"icl_lang_sel_stype";s:11:"mobile-auto";s:24:"icl_lang_sel_orientation";s:10:"horizontal";s:28:"icl_lang_sel_copy_parameters";s:0:"";s:21:"icl_widget_title_show";i:1;s:28:"translated_document_page_url";s:13:"auto-generate";s:28:"sync_comments_on_duplicates ";i:0;s:3:"seo";a:2:{s:10:"head_langs";i:1;s:27:"canonicalization_duplicates";i:1;}s:22:"posts_slug_translation";a:1:{s:2:"on";i:0;}s:15:"languages_order";a:2:{i:0;s:2:"es";i:1;s:2:"en";}s:4:"urls";a:5:{s:30:"directory_for_default_language";i:0;s:12:"show_on_root";s:0:"";s:19:"root_html_file_path";s:0:"";s:9:"root_page";i:0;s:23:"hide_language_switchers";i:1;}s:22:"admin_default_language";s:2:"es";s:18:"ajx_health_checked";i:1;s:27:"dont_show_help_admin_notice";b:1;s:17:"setup_wizard_step";i:3;s:18:"default_categories";a:2:{s:2:"es";s:1:"1";s:2:"en";i:41;}s:16:"default_language";s:2:"es";s:22:"translation-management";a:8:{s:12:"notification";a:5:{s:7:"new-job";i:1;s:9:"completed";i:1;s:8:"resigned";i:1;s:9:"dashboard";b:1;s:9:"purge-old";i:7;}s:25:"custom_fields_translation";a:6:{s:5:"title";i:2;s:11:"description";i:2;s:8:"keywords";i:2;s:17:"_cms_nav_minihome";i:1;s:16:"_cms_nav_section";i:2;s:17:"_top_nav_excluded";i:1;}s:22:"doc_translation_method";i:0;s:35:"__custom_types_readonly_config_prev";a:8:{s:10:"attachment";i:1;s:9:"drg_horse";i:1;s:19:"themefusion_elastic";i:1;s:5:"slide";i:1;s:11:"layerslider";i:1;s:9:"revslider";i:1;s:9:"avada_faq";i:1;s:15:"avada_portfolio";i:1;}s:28:"custom_types_readonly_config";a:7:{s:9:"drg_horse";i:1;s:19:"themefusion_elastic";i:1;s:5:"slide";i:1;s:11:"layerslider";i:1;s:9:"revslider";i:1;s:9:"avada_faq";i:1;s:15:"avada_portfolio";i:1;}s:36:"__custom_fields_readonly_config_prev";a:6:{i:0;s:5:"title";i:1;s:11:"description";i:2;s:8:"keywords";i:3;s:17:"_cms_nav_minihome";i:4;s:16:"_cms_nav_section";i:5;s:17:"_top_nav_excluded";}s:29:"custom_fields_readonly_config";a:6:{i:0;s:5:"title";i:1;s:11:"description";i:2;s:8:"keywords";i:3;s:17:"_cms_nav_minihome";i:4;s:16:"_cms_nav_section";i:5;s:17:"_top_nav_excluded";}s:26:"taxonomies_readonly_config";a:10:{s:16:"horse_categories";i:1;s:12:"horse_breeds";i:1;s:10:"horse_ages";i:1;s:13:"horse_genders";i:1;s:10:"horse_tags";i:1;s:18:"portfolio_category";i:1;s:12:"faq_category";i:1;s:16:"portfolio_skills";i:1;s:21:"themefusion_es_groups";i:1;s:10:"slide-page";i:1;}}s:24:"custom_posts_sync_option";a:8:{s:19:"themefusion_elastic";i:1;s:5:"slide";i:1;s:11:"layerslider";i:1;s:9:"revslider";i:1;s:9:"avada_faq";i:1;s:15:"avada_portfolio";i:1;s:10:"attachment";i:1;s:9:"drg_horse";i:1;}s:19:"icl_lang_sel_config";a:9:{s:19:"font-current-normal";s:7:"#444444";s:18:"font-current-hover";s:7:"#000000";s:25:"background-current-normal";s:7:"#ffffff";s:24:"background-current-hover";s:7:"#eeeeee";s:17:"font-other-normal";s:7:"#444444";s:16:"font-other-hover";s:7:"#000000";s:23:"background-other-normal";s:7:"#ffffff";s:22:"background-other-hover";s:7:"#eeeeee";s:6:"border";s:7:"#cdcdcd";}s:26:"icl_lang_sel_footer_config";a:10:{s:19:"font-current-normal";s:7:"#444444";s:18:"font-current-hover";s:7:"#000000";s:25:"background-current-normal";s:7:"#ffffff";s:24:"background-current-hover";s:7:"#eeeeee";s:17:"font-other-normal";s:7:"#444444";s:16:"font-other-hover";s:7:"#000000";s:23:"background-other-normal";s:7:"#ffffff";s:22:"background-other-hover";s:7:"#eeeeee";s:6:"border";s:7:"#cdcdcd";s:10:"background";s:7:"#ffffff";}s:29:"icl_language_switcher_sidebar";s:1:"0";s:19:"icl_lang_sel_footer";i:0;s:21:"icl_post_availability";i:0;s:30:"icl_post_availability_position";s:5:"below";s:26:"icl_post_availability_text";s:45:"Esta entrada también está disponible en: %s";s:29:"language_selector_initialized";i:1;s:14:"setup_complete";i:1;s:18:"icl_additional_css";s:56:" ";s:18:"display_ls_in_menu";i:0;s:11:"menu_for_ls";i:26;s:2:"st";a:7:{s:2:"sw";a:0:{}s:16:"strings_per_page";s:3:"100";s:15:"icl_st_auto_reg";s:7:"disable";s:16:"strings_language";s:2:"en";s:16:"translated-users";a:0:{}s:26:"theme_localization_domains";a:14:{i:0;s:5:"Avada";i:1;s:16:"optionsframework";i:2;s:0:"";i:3;s:7:"bbpress";i:4;s:9:"ambrosite";i:5;s:6:"envato";i:6;s:18:"wordpress-importer";i:7;s:11:"LayerSlider";i:8;s:16:"fusion-framework";i:9;s:3:"cpt";i:10;s:3:"pto";i:11;s:9:"wooslider";i:12;s:11:"woocommerce";i:13;s:14:"double-r-group";}s:16:"auto_download_mo";i:1;}s:28:"show_untranslated_blog_posts";s:1:"1";s:38:"hide_professional_translation_controls";s:1:"1";s:34:"theme_localization_load_textdomain";i:0;s:25:"gettext_theme_domain_name";s:0:"";s:22:"taxonomies_sync_option";a:10:{s:18:"portfolio_category";i:1;s:12:"faq_category";i:1;s:16:"portfolio_skills";i:1;s:21:"themefusion_es_groups";i:1;s:10:"slide-page";i:1;s:16:"horse_categories";i:1;s:12:"horse_breeds";i:1;s:10:"horse_ages";i:1;s:13:"horse_genders";i:1;s:10:"horse_tags";i:1;}s:21:"hide_how_to_translate";s:1:"1";s:22:"show_translations_flag";i:1;s:21:"icl_disable_reminders";i:0;s:19:"icl_notify_complete";i:0;s:9:"dashboard";a:1:{s:14:"hide_icl_promo";i:1;}}', 'yes'), +(396, 'Avada_options_', 'a:405:{s:10:"responsive";s:1:"1";s:12:"ipad_potrait";s:1:"1";s:16:"google_analytics";s:0:"";s:10:"space_head";s:0:"";s:10:"space_body";s:0:"";s:13:"header_layout";s:2:"v4";s:19:"header_left_content";s:11:"Leave Empty";s:20:"header_right_content";s:11:"Leave Empty";s:17:"header_v4_content";s:16:"Tagline + Search";s:18:"header_banner_code";s:0:"";s:13:"header_number";s:15:"+34 619 686 633";s:12:"header_email";s:21:"info@doublergroup.com";s:14:"header_tagline";s:37:"Cría y alta competición de caballos";s:15:"header_bg_image";s:0:"";s:14:"header_bg_full";s:1:"0";s:18:"header_bg_parallax";s:1:"0";s:16:"header_bg_repeat";s:6:"repeat";s:16:"icons_header_new";s:1:"1";s:17:"margin_header_top";s:3:"0px";s:20:"margin_header_bottom";s:3:"0px";s:13:"header_sticky";s:1:"0";s:20:"header_sticky_tablet";s:1:"0";s:20:"header_sticky_mobile";s:1:"0";s:21:"header_sticky_opacity";s:0:"";s:25:"header_sticky_nav_padding";s:0:"";s:27:"header_sticky_nav_font_size";s:0:"";s:28:"header_sticky_logo_max_width";s:0:"";s:4:"logo";s:70:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Logo-RR.png";s:11:"logo_retina";s:80:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Logo-RR@2x-300x51.png";s:17:"retina_logo_width";s:3:"200";s:18:"retina_logo_height";s:2:"35";s:14:"logo_alignment";s:4:"Left";s:16:"margin_logo_left";s:3:"0px";s:17:"margin_logo_right";s:3:"0px";s:15:"margin_logo_top";s:3:"0px";s:18:"margin_logo_bottom";s:3:"0px";s:7:"favicon";s:0:"";s:11:"iphone_icon";s:0:"";s:18:"iphone_icon_retina";s:0:"";s:9:"ipad_icon";s:0:"";s:16:"ipad_icon_retina";s:0:"";s:10:"nav_height";s:2:"40";s:11:"nav_padding";s:2:"35";s:19:"dropdown_menu_width";s:5:"170px";s:20:"main_nav_search_icon";s:1:"0";s:20:"main_nav_icon_circle";s:1:"1";s:14:"page_title_bar";s:1:"1";s:17:"page_title_height";s:4:"65px";s:13:"page_title_bg";s:0:"";s:20:"page_title_bg_retina";s:0:"";s:18:"page_title_bg_full";s:1:"1";s:22:"page_title_bg_parallax";s:1:"0";s:19:"page_title_bg_color";s:7:"#F6F6F6";s:23:"page_title_border_color";s:7:"#d2d3d4";s:17:"page_title_bar_bs";s:11:"Breadcrumbs";s:10:"breadcrumb";s:1:"1";s:17:"breadcrumb_mobile";s:1:"0";s:16:"breacrumb_prefix";s:0:"";s:18:"slidingbar_widgets";s:1:"0";s:25:"mobile_slidingbar_widgets";s:1:"1";s:21:"slidingbar_top_border";s:1:"0";s:32:"slidingbar_bg_color_transparency";s:1:"0";s:23:"slidingbar_open_on_load";s:1:"0";s:26:"slidingbar_widgets_columns";s:1:"2";s:14:"footer_widgets";s:1:"1";s:22:"footer_widgets_columns";s:1:"3";s:16:"footerw_bg_image";s:69:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/footer.png";s:15:"footerw_bg_full";s:1:"0";s:23:"footer_area_bg_parallax";s:1:"0";s:17:"footerw_bg_repeat";s:8:"repeat-x";s:14:"footerw_bg_pos";s:8:"top left";s:23:"footer_area_top_padding";s:0:"";s:26:"footer_area_bottom_padding";s:0:"";s:16:"footer_copyright";s:1:"1";s:11:"footer_text";s:164:"Copyright 2014 Double R Group | All Rights Reserved | Powered by WordPress | Theme Fusion";s:12:"icons_footer";s:1:"1";s:16:"icons_footer_new";s:1:"1";s:21:"copyright_top_padding";s:0:"";s:24:"copyright_bottom_padding";s:0:"";s:6:"layout";s:4:"Wide";s:8:"bg_image";s:0:"";s:7:"bg_full";s:1:"0";s:9:"bg_repeat";s:6:"repeat";s:8:"bg_color";s:7:"#d7d6d6";s:17:"bg_pattern_option";s:1:"0";s:10:"bg_pattern";s:8:"pattern1";s:16:"content_bg_image";s:0:"";s:15:"content_bg_full";s:1:"0";s:17:"content_bg_repeat";s:6:"repeat";s:16:"custom_font_woff";s:0:"";s:15:"custom_font_ttf";s:0:"";s:15:"custom_font_svg";s:0:"";s:15:"custom_font_eot";s:0:"";s:11:"google_body";s:8:"PT Serif";s:10:"google_nav";s:7:"PT Sans";s:15:"google_headings";s:6:"Roboto";s:22:"google_footer_headings";s:6:"Roboto";s:13:"standard_body";s:11:"Select Font";s:12:"standard_nav";s:11:"Select Font";s:17:"standard_headings";s:11:"Select Font";s:24:"standard_footer_headings";s:11:"Select Font";s:14:"body_font_size";s:2:"15";s:13:"nav_font_size";s:2:"16";s:22:"nav_dropdown_font_size";s:2:"14";s:14:"snav_font_size";s:2:"12";s:18:"side_nav_font_size";s:2:"14";s:21:"breadcrumbs_font_size";s:2:"14";s:15:"sidew_font_size";s:2:"15";s:20:"slidingbar_font_size";s:2:"13";s:15:"footw_font_size";s:2:"13";s:19:"copyright_font_size";s:2:"12";s:12:"h1_font_size";s:2:"32";s:12:"h2_font_size";s:2:"26";s:12:"h3_font_size";s:2:"16";s:12:"h4_font_size";s:2:"13";s:12:"h5_font_size";s:2:"12";s:12:"h6_font_size";s:2:"11";s:17:"tagline_font_size";s:2:"16";s:20:"page_title_font_size";s:2:"24";s:30:"page_title_subheader_font_size";s:2:"18";s:12:"body_font_lh";s:2:"21";s:10:"h1_font_lh";s:2:"44";s:10:"h2_font_lh";s:2:"27";s:10:"h3_font_lh";s:2:"24";s:10:"h4_font_lh";s:2:"20";s:10:"h5_font_lh";s:2:"18";s:10:"h6_font_lh";s:2:"17";s:11:"scheme_type";s:5:"Light";s:12:"color_scheme";s:4:"Blue";s:13:"primary_color";s:7:"#395b7b";s:19:"slidingbar_bg_color";s:7:"#363839";s:22:"header_sticky_bg_color";s:7:"#ffffff";s:15:"header_bg_color";s:7:"#ffffff";s:19:"header_border_color";s:7:"#e5e5e5";s:19:"header_top_bg_color";s:7:"#395b7b";s:16:"content_bg_color";s:7:"#ffffff";s:15:"footer_bg_color";s:7:"#ffffff";s:19:"footer_border_color";s:7:"#ffffff";s:18:"copyright_bg_color";s:7:"#1f1f1f";s:22:"copyright_border_color";s:7:"#242424";s:24:"image_gradient_top_color";s:7:"#c1daeb";s:27:"image_gradient_bottom_color";s:7:"#395b7b";s:25:"button_gradient_top_color";s:7:"#c1daeb";s:28:"button_gradient_bottom_color";s:7:"#395b7b";s:24:"slidingbar_divider_color";s:7:"#282A2B";s:20:"footer_divider_color";s:7:"#505152";s:13:"form_bg_color";s:7:"#ffffff";s:15:"form_text_color";s:7:"#333333";s:17:"form_border_color";s:7:"#d2d2d2";s:17:"timeline_bg_color";s:11:"transparent";s:14:"timeline_color";s:7:"#ebeaea";s:12:"qty_bg_color";s:7:"#fbfaf9";s:18:"qty_bg_hover_color";s:7:"#ffffff";s:19:"bbp_forum_header_bg";s:7:"#ebeaea";s:22:"bbp_forum_border_color";s:7:"#ebeaea";s:21:"socialbox_icons_color";s:4:"Dark";s:18:"header_icons_color";s:5:"Light";s:18:"footer_icons_color";s:4:"Dark";s:16:"main_top_padding";s:0:"";s:19:"main_bottom_padding";s:0:"";s:16:"hundredp_padding";s:0:"";s:18:"button_text_shadow";s:1:"1";s:22:"slidingbar_text_shadow";s:1:"1";s:18:"footer_text_shadow";s:1:"1";s:26:"button_gradient_text_color";s:7:"#395b7b";s:18:"tagline_font_color";s:7:"#747474";s:16:"page_title_color";s:7:"#333333";s:8:"h1_color";s:7:"#333333";s:8:"h2_color";s:7:"#333333";s:8:"h3_color";s:7:"#333333";s:8:"h4_color";s:7:"#333333";s:8:"h5_color";s:7:"#333333";s:8:"h6_color";s:7:"#333333";s:15:"body_text_color";s:7:"#333333";s:10:"link_color";s:7:"#395b7b";s:22:"breadcrumbs_text_color";s:7:"#8C8989";s:25:"slidingbar_headings_color";s:7:"#DDDDDD";s:21:"slidingbar_text_color";s:7:"#8C8989";s:21:"slidingbar_link_color";s:7:"#BFBFBF";s:21:"sidebar_heading_color";s:7:"#333333";s:21:"footer_headings_color";s:7:"#DDDDDD";s:17:"footer_text_color";s:7:"#464849";s:17:"footer_link_color";s:7:"#BFBFBF";s:17:"menu_h45_bg_color";s:7:"#395b7b";s:16:"menu_first_color";s:7:"#ededed";s:22:"menu_hover_first_color";s:7:"#ffffff";s:17:"menu_sub_bg_color";s:7:"#395b7b";s:19:"menu_bg_hover_color";s:7:"#B4C2CD";s:14:"menu_sub_color";s:7:"#ededed";s:18:"menu_sub_sep_color";s:7:"#B4C2CD";s:10:"snav_color";s:7:"#ffffff";s:29:"header_top_first_border_color";s:7:"#B4C2CD";s:23:"header_top_sub_bg_color";s:7:"#395b7b";s:25:"header_top_menu_sub_color";s:7:"#747474";s:30:"header_top_menu_bg_hover_color";s:7:"#fafafa";s:31:"header_top_menu_sub_hover_color";s:7:"#333333";s:29:"header_top_menu_sub_sep_color";s:7:"#B4C2CD";s:17:"woo_cart_bg_color";s:7:"#fafafa";s:24:"accordian_inactive_color";s:7:"#333333";s:20:"counter_filled_color";s:7:"#1a80b6";s:22:"counter_unfilled_color";s:7:"#f6f6f6";s:15:"dates_box_color";s:7:"#eef0f2";s:18:"carousel_nav_color";s:7:"#999999";s:20:"carousel_hover_color";s:7:"#808080";s:20:"content_box_bg_color";s:11:"transparent";s:21:"checklist_icons_color";s:7:"#ffffff";s:18:"title_border_color";s:7:"#e0dede";s:17:"icon_circle_color";s:7:"#333333";s:17:"icon_border_color";s:7:"#333333";s:10:"icon_color";s:7:"#ffffff";s:21:"imgframe_border_color";s:7:"#f6f6f6";s:20:"imgframe_style_color";s:7:"#000000";s:29:"sep_pricing_box_heading_color";s:7:"#333333";s:36:"full_boxed_pricing_box_heading_color";s:7:"#333333";s:17:"pricing_box_color";s:7:"#62a2c4";s:16:"pricing_bg_color";s:7:"#ffffff";s:20:"pricing_border_color";s:7:"#f8f8f8";s:21:"pricing_divider_color";s:7:"#ededed";s:9:"sep_color";s:7:"#e0dede";s:18:"social_links_color";s:4:"Dark";s:15:"social_bg_color";s:7:"#f6f6f6";s:13:"tabs_bg_color";s:7:"#ffffff";s:19:"tabs_inactive_color";s:7:"#ebeaea";s:10:"tagline_bg";s:7:"#f6f6f6";s:20:"tagline_border_color";s:7:"#f6f6f6";s:20:"testimonial_bg_color";s:7:"#f6f6f6";s:22:"testimonial_text_color";s:7:"#747474";s:10:"blog_title";s:4:"Blog";s:11:"blog_layout";s:5:"Large";s:21:"blog_sidebar_position";s:5:"Right";s:19:"blog_archive_layout";s:5:"Large";s:20:"blog_archive_sidebar";s:4:"None";s:20:"blog_pagination_type";s:10:"Pagination";s:17:"blog_grid_columns";s:1:"3";s:14:"content_length";s:7:"Excerpt";s:19:"excerpt_length_blog";s:2:"55";s:18:"strip_html_excerpt";s:1:"1";s:15:"blog_full_width";s:1:"0";s:22:"single_post_full_width";s:1:"0";s:15:"featured_images";s:1:"1";s:32:"alternate_date_format_month_year";s:0:"";s:25:"alternate_date_format_day";s:0:"";s:20:"timeline_date_format";s:0:"";s:22:"featured_images_single";s:1:"1";s:11:"blog_pn_nav";s:1:"0";s:15:"blog_post_title";s:1:"1";s:11:"author_info";s:1:"1";s:18:"social_sharing_box";s:1:"1";s:13:"related_posts";s:1:"1";s:13:"blog_comments";s:1:"1";s:9:"post_meta";s:1:"1";s:16:"post_meta_author";s:1:"0";s:14:"post_meta_date";s:1:"0";s:14:"post_meta_cats";s:1:"0";s:18:"post_meta_comments";s:1:"0";s:14:"post_meta_read";s:1:"0";s:11:"date_format";s:7:"F jS, Y";s:15:"portfolio_items";s:2:"10";s:24:"portfolio_archive_layout";s:20:"Portfolio One Column";s:25:"portfolio_archive_sidebar";s:4:"None";s:24:"portfolio_content_length";s:7:"Excerpt";s:24:"excerpt_length_portfolio";s:2:"55";s:20:"grid_pagination_type";s:10:"Pagination";s:14:"portfolio_slug";s:15:"portfolio-items";s:25:"portfolio_featured_images";s:1:"0";s:16:"portfolio_pn_nav";s:1:"0";s:18:"portfolio_comments";s:1:"0";s:16:"portfolio_author";s:1:"0";s:16:"sharing_facebook";s:1:"1";s:15:"sharing_twitter";s:1:"1";s:14:"sharing_reddit";s:1:"0";s:16:"sharing_linkedin";s:1:"0";s:14:"sharing_google";s:1:"0";s:14:"sharing_tumblr";s:1:"0";s:17:"sharing_pinterest";s:1:"0";s:13:"sharing_email";s:1:"1";s:13:"facebook_link";s:1:"#";s:11:"flickr_link";s:0:"";s:8:"rss_link";s:0:"";s:12:"twitter_link";s:1:"#";s:10:"vimeo_link";s:0:"";s:12:"youtube_link";s:63:"https://www.youtube.com/channel/UCGXuZZA95xD9LdOesfHG9sQ/videos";s:14:"pinterest_link";s:0:"";s:11:"tumblr_link";s:0:"";s:11:"google_link";s:0:"";s:13:"dribbble_link";s:0:"";s:9:"digg_link";s:0:"";s:13:"linkedin_link";s:0:"";s:12:"blogger_link";s:0:"";s:10:"skype_link";s:0:"";s:11:"forrst_link";s:0:"";s:12:"myspace_link";s:0:"";s:15:"deviantart_link";s:0:"";s:10:"yahoo_link";s:0:"";s:11:"reddit_link";s:0:"";s:16:"custom_icon_name";s:0:"";s:17:"custom_icon_image";s:0:"";s:24:"custom_icon_image_retina";s:0:"";s:17:"retina_icon_width";s:0:"";s:18:"retina_icon_height";s:0:"";s:16:"custom_icon_link";s:0:"";s:15:"posts_slideshow";s:1:"1";s:22:"posts_slideshow_number";s:1:"5";s:18:"slideshow_autoplay";s:1:"1";s:23:"slideshow_smooth_height";s:1:"0";s:15:"slideshow_speed";s:4:"7000";s:17:"flexslider_number";s:1:"5";s:22:"pagination_video_slide";s:1:"0";s:22:"legacy_posts_slideshow";s:1:"0";s:16:"flexslider_width";s:5:"940px";s:18:"flexslider_circles";s:1:"0";s:13:"tfs_animation";s:4:"fade";s:12:"tfs_autoplay";s:1:"1";s:19:"tfs_slideshow_speed";s:4:"7000";s:19:"tfs_animation_speed";s:3:"600";s:18:"flexsliders_number";s:1:"1";s:12:"flexslider_1";a:3:{i:1;a:5:{s:5:"order";s:1:"1";s:5:"title";s:148:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam";s:3:"url";s:71:"http://theme-fusion.com/avadaxml/wp-content/uploads/2013/10/slide_1.jpg";s:4:"link";s:0:"";s:11:"description";s:0:"";}i:2;a:5:{s:5:"order";s:1:"2";s:5:"title";s:0:"";s:3:"url";s:0:"";s:4:"link";s:0:"";s:11:"description";s:116:"";}i:3;a:5:{s:5:"order";s:1:"3";s:5:"title";s:148:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam";s:3:"url";s:71:"http://theme-fusion.com/avadaxml/wp-content/uploads/2012/11/slide_2.jpg";s:4:"link";s:0:"";s:11:"description";s:0:"";}}s:17:"tfes_slider_width";s:4:"100%";s:18:"tfes_slider_height";s:5:"400px";s:14:"tfes_animation";s:5:"sides";s:13:"tfes_autoplay";s:1:"1";s:13:"tfes_interval";s:4:"3000";s:10:"tfes_speed";s:3:"800";s:10:"tfes_width";s:3:"150";s:18:"es_title_font_size";s:2:"42";s:20:"es_caption_font_size";s:2:"20";s:14:"es_title_color";s:7:"#333333";s:16:"es_caption_color";s:7:"#747474";s:24:"lightbox_animation_speed";s:4:"Fast";s:16:"lightbox_gallery";s:1:"1";s:17:"lightbox_autoplay";s:1:"0";s:24:"lightbox_slideshow_speed";s:4:"5000";s:16:"lightbox_opacity";s:3:"0.8";s:14:"lightbox_title";s:1:"1";s:13:"lightbox_desc";s:1:"1";s:15:"lightbox_social";s:1:"1";s:20:"lightbox_post_images";s:1:"0";s:9:"gmap_type";s:7:"roadmap";s:10:"gmap_width";s:4:"100%";s:11:"gmap_height";s:5:"415px";s:12:"gmap_address";s:49:"775 New York Ave, Brooklyn, Kings, New York 11203";s:13:"email_address";s:0:"";s:14:"map_zoom_level";s:1:"8";s:7:"map_pin";s:1:"0";s:9:"map_popup";s:1:"0";s:15:"map_scrollwheel";s:1:"0";s:9:"map_scale";s:1:"0";s:15:"map_zoomcontrol";s:1:"0";s:16:"recaptcha_public";s:0:"";s:17:"recaptcha_private";s:0:"";s:22:"recaptcha_color_scheme";s:3:"red";s:16:"sidebar_bg_color";s:11:"transparent";s:13:"content_width";s:10:"71.1702128";s:13:"sidebar_width";s:10:"23.4042553";s:15:"sidebar_padding";s:1:"0";s:14:"dev_shortcodes";s:1:"0";s:16:"avada_rev_styles";s:1:"0";s:18:"testimonials_speed";s:4:"4000";s:19:"default_sidebar_pos";s:5:"Right";s:16:"sidenav_behavior";s:5:"Hover";s:20:"number_related_posts";s:1:"5";s:14:"comments_pages";s:1:"0";s:14:"link_read_more";s:1:"0";s:16:"disable_excerpts";s:1:"0";s:21:"featured_images_pages";s:1:"0";s:18:"faq_featured_image";s:1:"0";s:21:"nofollow_social_links";s:1:"0";s:14:"image_rollover";s:1:"1";s:19:"link_image_rollover";s:1:"0";s:19:"zoom_image_rollover";s:1:"0";s:20:"title_image_rollover";s:1:"0";s:25:"title_link_image_rollover";s:1:"0";s:19:"cats_image_rollover";s:1:"0";s:22:"image_rollover_opacity";s:1:"1";s:14:"search_content";s:15:"Posts and Pages";s:14:"search_excerpt";s:1:"0";s:23:"search_results_per_page";s:2:"10";s:22:"search_featured_images";s:1:"0";s:22:"bbpress_global_sidebar";s:1:"0";s:15:"ppbress_sidebar";s:4:"None";s:8:"ubermenu";s:1:"0";s:15:"post_type_order";s:1:"0";s:18:"status_layerslider";s:1:"0";s:16:"status_revslider";s:1:"0";s:17:"status_flexslider";s:1:"0";s:15:"use_animate_css";s:1:"0";s:26:"disable_mobile_animate_css";s:1:"1";s:15:"status_lightbox";s:1:"0";s:11:"status_gmap";s:1:"0";s:9:"status_yt";s:1:"0";s:12:"status_vimeo";s:1:"0";s:14:"status_jqcycle";s:1:"0";s:14:"status_eslider";s:1:"0";s:12:"status_totop";s:1:"1";s:19:"status_totop_mobile";s:1:"1";s:9:"woo_items";s:2:"12";s:27:"woocommerce_archive_sidebar";s:4:"None";s:28:"woocommerce_acc_link_top_nav";s:1:"1";s:29:"woocommerce_cart_link_top_nav";s:1:"1";s:29:"woocommerce_acc_link_main_nav";s:1:"0";s:30:"woocommerce_cart_link_main_nav";s:1:"1";s:24:"woocommerce_social_links";s:1:"0";s:13:"woo_acc_msg_1";s:55:"Need Assistance? Call customer service at 888-555-5555.";s:13:"woo_acc_msg_2";s:32:"E-mail them at info@yourshop.com";s:10:"custom_css";s:0:"";}', 'yes'), +(397, 'Avada_options_es', 'a:405:{s:10:"responsive";s:1:"1";s:12:"ipad_potrait";s:1:"1";s:16:"google_analytics";s:0:"";s:10:"space_head";s:0:"";s:10:"space_body";s:0:"";s:13:"header_layout";s:2:"v4";s:19:"header_left_content";s:11:"Leave Empty";s:20:"header_right_content";s:11:"Leave Empty";s:17:"header_v4_content";s:7:"Tagline";s:18:"header_banner_code";s:0:"";s:13:"header_number";s:15:"+34 619 686 633";s:12:"header_email";s:21:"info@doublergroup.com";s:14:"header_tagline";s:37:"Cría y alta competición de caballos";s:15:"header_bg_image";s:0:"";s:14:"header_bg_full";s:1:"0";s:18:"header_bg_parallax";s:1:"0";s:16:"header_bg_repeat";s:6:"repeat";s:16:"icons_header_new";s:1:"1";s:17:"margin_header_top";s:3:"0px";s:20:"margin_header_bottom";s:3:"0px";s:13:"header_sticky";s:1:"0";s:20:"header_sticky_tablet";s:1:"0";s:20:"header_sticky_mobile";s:1:"0";s:21:"header_sticky_opacity";s:0:"";s:25:"header_sticky_nav_padding";s:0:"";s:27:"header_sticky_nav_font_size";s:0:"";s:28:"header_sticky_logo_max_width";s:0:"";s:4:"logo";s:70:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Logo-RR.png";s:11:"logo_retina";s:80:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Logo-RR@2x-300x51.png";s:17:"retina_logo_width";s:3:"200";s:18:"retina_logo_height";s:2:"35";s:14:"logo_alignment";s:4:"Left";s:16:"margin_logo_left";s:3:"0px";s:17:"margin_logo_right";s:3:"0px";s:15:"margin_logo_top";s:3:"0px";s:18:"margin_logo_bottom";s:3:"0px";s:7:"favicon";s:0:"";s:11:"iphone_icon";s:0:"";s:18:"iphone_icon_retina";s:0:"";s:9:"ipad_icon";s:0:"";s:16:"ipad_icon_retina";s:0:"";s:10:"nav_height";s:2:"40";s:11:"nav_padding";s:2:"35";s:19:"dropdown_menu_width";s:5:"170px";s:20:"main_nav_search_icon";s:1:"1";s:20:"main_nav_icon_circle";s:1:"0";s:14:"page_title_bar";s:1:"1";s:17:"page_title_height";s:4:"65px";s:13:"page_title_bg";s:74:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/page_bkgd31.jpg";s:20:"page_title_bg_retina";s:0:"";s:18:"page_title_bg_full";s:1:"1";s:22:"page_title_bg_parallax";s:1:"0";s:19:"page_title_bg_color";s:7:"#F6F6F6";s:23:"page_title_border_color";s:7:"#d2d3d4";s:17:"page_title_bar_bs";s:11:"Breadcrumbs";s:10:"breadcrumb";s:1:"0";s:17:"breadcrumb_mobile";s:1:"0";s:16:"breacrumb_prefix";s:0:"";s:18:"slidingbar_widgets";s:1:"0";s:25:"mobile_slidingbar_widgets";s:1:"1";s:21:"slidingbar_top_border";s:1:"0";s:32:"slidingbar_bg_color_transparency";s:1:"0";s:23:"slidingbar_open_on_load";s:1:"0";s:26:"slidingbar_widgets_columns";s:1:"2";s:14:"footer_widgets";s:1:"1";s:22:"footer_widgets_columns";s:1:"3";s:16:"footerw_bg_image";s:69:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/footer.png";s:15:"footerw_bg_full";s:1:"0";s:23:"footer_area_bg_parallax";s:1:"0";s:17:"footerw_bg_repeat";s:8:"repeat-x";s:14:"footerw_bg_pos";s:8:"top left";s:23:"footer_area_top_padding";s:0:"";s:26:"footer_area_bottom_padding";s:0:"";s:16:"footer_copyright";s:1:"1";s:11:"footer_text";s:101:"Copyright 2014 Double R Group | Aviso legal | Política de privacidad";s:12:"icons_footer";s:1:"1";s:16:"icons_footer_new";s:1:"1";s:21:"copyright_top_padding";s:2:"18";s:24:"copyright_bottom_padding";s:2:"18";s:6:"layout";s:4:"Wide";s:8:"bg_image";s:0:"";s:7:"bg_full";s:1:"0";s:9:"bg_repeat";s:6:"repeat";s:8:"bg_color";s:7:"#d7d6d6";s:17:"bg_pattern_option";s:1:"0";s:10:"bg_pattern";s:8:"pattern1";s:16:"content_bg_image";s:68:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/fondo.jpg";s:15:"content_bg_full";s:1:"0";s:17:"content_bg_repeat";s:6:"repeat";s:16:"custom_font_woff";s:0:"";s:15:"custom_font_ttf";s:0:"";s:15:"custom_font_svg";s:0:"";s:15:"custom_font_eot";s:0:"";s:11:"google_body";s:11:"Droid Serif";s:10:"google_nav";s:6:"Roboto";s:15:"google_headings";s:6:"Roboto";s:22:"google_footer_headings";s:6:"Roboto";s:13:"standard_body";s:11:"Select Font";s:12:"standard_nav";s:11:"Select Font";s:17:"standard_headings";s:11:"Select Font";s:24:"standard_footer_headings";s:11:"Select Font";s:14:"body_font_size";s:2:"14";s:13:"nav_font_size";s:2:"16";s:22:"nav_dropdown_font_size";s:2:"16";s:14:"snav_font_size";s:2:"12";s:18:"side_nav_font_size";s:2:"14";s:21:"breadcrumbs_font_size";s:2:"14";s:15:"sidew_font_size";s:2:"15";s:20:"slidingbar_font_size";s:2:"13";s:15:"footw_font_size";s:2:"15";s:19:"copyright_font_size";s:2:"12";s:12:"h1_font_size";s:2:"36";s:12:"h2_font_size";s:2:"29";s:12:"h3_font_size";s:2:"24";s:12:"h4_font_size";s:2:"18";s:12:"h5_font_size";s:2:"15";s:12:"h6_font_size";s:2:"15";s:17:"tagline_font_size";s:2:"16";s:20:"page_title_font_size";s:2:"18";s:30:"page_title_subheader_font_size";s:2:"18";s:12:"body_font_lh";s:2:"21";s:10:"h1_font_lh";s:2:"44";s:10:"h2_font_lh";s:2:"44";s:10:"h3_font_lh";s:2:"29";s:10:"h4_font_lh";s:2:"25";s:10:"h5_font_lh";s:2:"21";s:10:"h6_font_lh";s:2:"21";s:11:"scheme_type";s:5:"Light";s:12:"color_scheme";s:4:"Blue";s:13:"primary_color";s:7:"#395b7b";s:19:"slidingbar_bg_color";s:7:"#363839";s:22:"header_sticky_bg_color";s:7:"#ffffff";s:15:"header_bg_color";s:7:"#ffffff";s:19:"header_border_color";s:7:"#e5e5e5";s:19:"header_top_bg_color";s:7:"#395b7b";s:16:"content_bg_color";s:7:"#ffffff";s:15:"footer_bg_color";s:7:"#ffffff";s:19:"footer_border_color";s:7:"#ffffff";s:18:"copyright_bg_color";s:7:"#1f1f1f";s:22:"copyright_border_color";s:7:"#242424";s:24:"image_gradient_top_color";s:7:"#395b7b";s:27:"image_gradient_bottom_color";s:7:"#395b7b";s:25:"button_gradient_top_color";s:7:"#395b7b";s:28:"button_gradient_bottom_color";s:7:"#395b7b";s:24:"slidingbar_divider_color";s:7:"#282A2B";s:20:"footer_divider_color";s:7:"#464849";s:13:"form_bg_color";s:7:"#ffffff";s:15:"form_text_color";s:7:"#333333";s:17:"form_border_color";s:7:"#d2d2d2";s:17:"timeline_bg_color";s:11:"transparent";s:14:"timeline_color";s:7:"#ebeaea";s:12:"qty_bg_color";s:7:"#fbfaf9";s:18:"qty_bg_hover_color";s:7:"#ffffff";s:19:"bbp_forum_header_bg";s:7:"#ebeaea";s:22:"bbp_forum_border_color";s:7:"#ebeaea";s:21:"socialbox_icons_color";s:4:"Dark";s:18:"header_icons_color";s:5:"Light";s:18:"footer_icons_color";s:4:"Dark";s:16:"main_top_padding";s:0:"";s:19:"main_bottom_padding";s:0:"";s:16:"hundredp_padding";s:0:"";s:18:"button_text_shadow";s:1:"1";s:22:"slidingbar_text_shadow";s:1:"1";s:18:"footer_text_shadow";s:1:"1";s:26:"button_gradient_text_color";s:7:"#ebeaea";s:18:"tagline_font_color";s:7:"#395b7b";s:16:"page_title_color";s:7:"#395b7b";s:8:"h1_color";s:7:"#333333";s:8:"h2_color";s:7:"#333333";s:8:"h3_color";s:7:"#333333";s:8:"h4_color";s:7:"#333333";s:8:"h5_color";s:7:"#333333";s:8:"h6_color";s:7:"#333333";s:15:"body_text_color";s:7:"#333333";s:10:"link_color";s:7:"#395b7b";s:22:"breadcrumbs_text_color";s:7:"#8C8989";s:25:"slidingbar_headings_color";s:7:"#DDDDDD";s:21:"slidingbar_text_color";s:7:"#8C8989";s:21:"slidingbar_link_color";s:7:"#BFBFBF";s:21:"sidebar_heading_color";s:7:"#333333";s:21:"footer_headings_color";s:7:"#B4C2CD";s:17:"footer_text_color";s:7:"#666666";s:17:"footer_link_color";s:7:"#B4C2CD";s:17:"menu_h45_bg_color";s:7:"#395b7b";s:16:"menu_first_color";s:7:"#B4C2CD";s:22:"menu_hover_first_color";s:7:"#ffffff";s:17:"menu_sub_bg_color";s:7:"#395b7b";s:19:"menu_bg_hover_color";s:7:"#ffffff";s:14:"menu_sub_color";s:7:"#B4C2CD";s:18:"menu_sub_sep_color";s:7:"#B4C2CD";s:10:"snav_color";s:7:"#ffffff";s:29:"header_top_first_border_color";s:7:"#B4C2CD";s:23:"header_top_sub_bg_color";s:7:"#395b7b";s:25:"header_top_menu_sub_color";s:7:"#747474";s:30:"header_top_menu_bg_hover_color";s:7:"#fafafa";s:31:"header_top_menu_sub_hover_color";s:7:"#333333";s:29:"header_top_menu_sub_sep_color";s:7:"#B4C2CD";s:17:"woo_cart_bg_color";s:7:"#fafafa";s:24:"accordian_inactive_color";s:7:"#333333";s:20:"counter_filled_color";s:7:"#1a80b6";s:22:"counter_unfilled_color";s:7:"#f6f6f6";s:15:"dates_box_color";s:7:"#eef0f2";s:18:"carousel_nav_color";s:7:"#999999";s:20:"carousel_hover_color";s:7:"#808080";s:20:"content_box_bg_color";s:11:"transparent";s:21:"checklist_icons_color";s:7:"#ffffff";s:18:"title_border_color";s:7:"#e0dede";s:17:"icon_circle_color";s:7:"#333333";s:17:"icon_border_color";s:7:"#333333";s:10:"icon_color";s:7:"#ffffff";s:21:"imgframe_border_color";s:7:"#f6f6f6";s:20:"imgframe_style_color";s:7:"#000000";s:29:"sep_pricing_box_heading_color";s:7:"#333333";s:36:"full_boxed_pricing_box_heading_color";s:7:"#333333";s:17:"pricing_box_color";s:7:"#62a2c4";s:16:"pricing_bg_color";s:7:"#ffffff";s:20:"pricing_border_color";s:7:"#f8f8f8";s:21:"pricing_divider_color";s:7:"#ededed";s:9:"sep_color";s:7:"#e0dede";s:18:"social_links_color";s:4:"Dark";s:15:"social_bg_color";s:7:"#f6f6f6";s:13:"tabs_bg_color";s:7:"#ffffff";s:19:"tabs_inactive_color";s:7:"#ebeaea";s:10:"tagline_bg";s:7:"#f6f6f6";s:20:"tagline_border_color";s:7:"#f6f6f6";s:20:"testimonial_bg_color";s:7:"#f6f6f6";s:22:"testimonial_text_color";s:7:"#747474";s:10:"blog_title";s:8:"Noticias";s:11:"blog_layout";s:15:"Large Alternate";s:21:"blog_sidebar_position";s:5:"Right";s:19:"blog_archive_layout";s:15:"Large Alternate";s:20:"blog_archive_sidebar";s:12:"Blog Sidebar";s:20:"blog_pagination_type";s:10:"Pagination";s:17:"blog_grid_columns";s:1:"3";s:14:"content_length";s:7:"Excerpt";s:19:"excerpt_length_blog";s:2:"55";s:18:"strip_html_excerpt";s:1:"1";s:15:"blog_full_width";s:1:"0";s:22:"single_post_full_width";s:1:"0";s:15:"featured_images";s:1:"1";s:32:"alternate_date_format_month_year";s:3:"M Y";s:25:"alternate_date_format_day";s:1:"d";s:20:"timeline_date_format";s:0:"";s:22:"featured_images_single";s:1:"1";s:11:"blog_pn_nav";s:1:"0";s:15:"blog_post_title";s:1:"1";s:11:"author_info";s:1:"0";s:18:"social_sharing_box";s:1:"1";s:13:"related_posts";s:1:"0";s:13:"blog_comments";s:1:"0";s:9:"post_meta";s:1:"1";s:16:"post_meta_author";s:1:"1";s:14:"post_meta_date";s:1:"0";s:14:"post_meta_cats";s:1:"1";s:18:"post_meta_comments";s:1:"1";s:14:"post_meta_read";s:1:"0";s:11:"date_format";s:6:"j F, Y";s:15:"portfolio_items";s:1:"9";s:24:"portfolio_archive_layout";s:27:"Portfolio Three Column Text";s:25:"portfolio_archive_sidebar";s:4:"None";s:24:"portfolio_content_length";s:7:"Excerpt";s:24:"excerpt_length_portfolio";s:2:"15";s:20:"grid_pagination_type";s:10:"Pagination";s:14:"portfolio_slug";s:15:"portfolio_items";s:25:"portfolio_featured_images";s:1:"0";s:16:"portfolio_pn_nav";s:1:"0";s:18:"portfolio_comments";s:1:"0";s:16:"portfolio_author";s:1:"0";s:16:"sharing_facebook";s:1:"1";s:15:"sharing_twitter";s:1:"1";s:14:"sharing_reddit";s:1:"0";s:16:"sharing_linkedin";s:1:"0";s:14:"sharing_google";s:1:"0";s:14:"sharing_tumblr";s:1:"0";s:17:"sharing_pinterest";s:1:"0";s:13:"sharing_email";s:1:"1";s:13:"facebook_link";s:1:"#";s:11:"flickr_link";s:0:"";s:8:"rss_link";s:0:"";s:12:"twitter_link";s:1:"#";s:10:"vimeo_link";s:0:"";s:12:"youtube_link";s:63:"https://www.youtube.com/channel/UCGXuZZA95xD9LdOesfHG9sQ/videos";s:14:"pinterest_link";s:0:"";s:11:"tumblr_link";s:0:"";s:11:"google_link";s:0:"";s:13:"dribbble_link";s:0:"";s:9:"digg_link";s:0:"";s:13:"linkedin_link";s:0:"";s:12:"blogger_link";s:0:"";s:10:"skype_link";s:0:"";s:11:"forrst_link";s:0:"";s:12:"myspace_link";s:0:"";s:15:"deviantart_link";s:0:"";s:10:"yahoo_link";s:0:"";s:11:"reddit_link";s:0:"";s:16:"custom_icon_name";s:0:"";s:17:"custom_icon_image";s:0:"";s:24:"custom_icon_image_retina";s:0:"";s:17:"retina_icon_width";s:0:"";s:18:"retina_icon_height";s:0:"";s:16:"custom_icon_link";s:0:"";s:15:"posts_slideshow";s:1:"1";s:22:"posts_slideshow_number";s:1:"5";s:18:"slideshow_autoplay";s:1:"1";s:23:"slideshow_smooth_height";s:1:"0";s:15:"slideshow_speed";s:4:"7000";s:17:"flexslider_number";s:1:"5";s:22:"pagination_video_slide";s:1:"0";s:22:"legacy_posts_slideshow";s:1:"0";s:16:"flexslider_width";s:5:"940px";s:18:"flexslider_circles";s:1:"0";s:13:"tfs_animation";s:4:"fade";s:12:"tfs_autoplay";s:1:"1";s:19:"tfs_slideshow_speed";s:4:"7000";s:19:"tfs_animation_speed";s:3:"600";s:18:"flexsliders_number";s:1:"1";s:12:"flexslider_1";a:3:{i:1;a:5:{s:5:"order";s:1:"1";s:5:"title";s:148:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam";s:3:"url";s:71:"http://theme-fusion.com/avadaxml/wp-content/uploads/2013/10/slide_1.jpg";s:4:"link";s:0:"";s:11:"description";s:0:"";}i:2;a:5:{s:5:"order";s:1:"2";s:5:"title";s:0:"";s:3:"url";s:0:"";s:4:"link";s:0:"";s:11:"description";s:116:"";}i:3;a:5:{s:5:"order";s:1:"3";s:5:"title";s:148:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam";s:3:"url";s:71:"http://theme-fusion.com/avadaxml/wp-content/uploads/2012/11/slide_2.jpg";s:4:"link";s:0:"";s:11:"description";s:0:"";}}s:17:"tfes_slider_width";s:4:"100%";s:18:"tfes_slider_height";s:5:"400px";s:14:"tfes_animation";s:6:"center";s:13:"tfes_autoplay";s:1:"1";s:13:"tfes_interval";s:4:"8000";s:10:"tfes_speed";s:3:"800";s:10:"tfes_width";s:3:"150";s:18:"es_title_font_size";s:2:"42";s:20:"es_caption_font_size";s:2:"20";s:14:"es_title_color";s:7:"#333333";s:16:"es_caption_color";s:7:"#747474";s:24:"lightbox_animation_speed";s:4:"Fast";s:16:"lightbox_gallery";s:1:"1";s:17:"lightbox_autoplay";s:1:"0";s:24:"lightbox_slideshow_speed";s:4:"5000";s:16:"lightbox_opacity";s:3:"0.8";s:14:"lightbox_title";s:1:"1";s:13:"lightbox_desc";s:1:"1";s:15:"lightbox_social";s:1:"1";s:20:"lightbox_post_images";s:1:"0";s:9:"gmap_type";s:7:"roadmap";s:10:"gmap_width";s:4:"100%";s:11:"gmap_height";s:5:"415px";s:12:"gmap_address";s:34:"Calle de Almagro, 21, 28010 Madrid";s:13:"email_address";s:21:"info@doublergroup.com";s:14:"map_zoom_level";s:1:"8";s:7:"map_pin";s:1:"0";s:9:"map_popup";s:1:"0";s:15:"map_scrollwheel";s:1:"0";s:9:"map_scale";s:1:"0";s:15:"map_zoomcontrol";s:1:"0";s:16:"recaptcha_public";s:0:"";s:17:"recaptcha_private";s:0:"";s:22:"recaptcha_color_scheme";s:3:"red";s:16:"sidebar_bg_color";s:11:"transparent";s:13:"content_width";s:10:"71.1702128";s:13:"sidebar_width";s:10:"23.4042553";s:15:"sidebar_padding";s:1:"0";s:14:"dev_shortcodes";s:1:"0";s:16:"avada_rev_styles";s:1:"0";s:18:"testimonials_speed";s:4:"4000";s:19:"default_sidebar_pos";s:5:"Right";s:16:"sidenav_behavior";s:5:"Hover";s:20:"number_related_posts";s:1:"5";s:14:"comments_pages";s:1:"0";s:14:"link_read_more";s:1:"0";s:16:"disable_excerpts";s:1:"0";s:21:"featured_images_pages";s:1:"0";s:18:"faq_featured_image";s:1:"0";s:21:"nofollow_social_links";s:1:"0";s:14:"image_rollover";s:1:"0";s:19:"link_image_rollover";s:1:"0";s:19:"zoom_image_rollover";s:1:"0";s:20:"title_image_rollover";s:1:"0";s:25:"title_link_image_rollover";s:1:"0";s:19:"cats_image_rollover";s:1:"0";s:22:"image_rollover_opacity";s:1:"1";s:14:"search_content";s:15:"Posts and Pages";s:14:"search_excerpt";s:1:"0";s:23:"search_results_per_page";s:2:"10";s:22:"search_featured_images";s:1:"0";s:22:"bbpress_global_sidebar";s:1:"0";s:15:"ppbress_sidebar";s:4:"None";s:8:"ubermenu";s:1:"0";s:15:"post_type_order";s:1:"0";s:18:"status_layerslider";s:1:"0";s:16:"status_revslider";s:1:"0";s:17:"status_flexslider";s:1:"1";s:15:"use_animate_css";s:1:"0";s:26:"disable_mobile_animate_css";s:1:"1";s:15:"status_lightbox";s:1:"0";s:11:"status_gmap";s:1:"0";s:9:"status_yt";s:1:"0";s:12:"status_vimeo";s:1:"0";s:14:"status_jqcycle";s:1:"1";s:14:"status_eslider";s:1:"1";s:12:"status_totop";s:1:"1";s:19:"status_totop_mobile";s:1:"1";s:9:"woo_items";s:2:"12";s:27:"woocommerce_archive_sidebar";s:4:"None";s:28:"woocommerce_acc_link_top_nav";s:1:"1";s:29:"woocommerce_cart_link_top_nav";s:1:"1";s:29:"woocommerce_acc_link_main_nav";s:1:"0";s:30:"woocommerce_cart_link_main_nav";s:1:"1";s:24:"woocommerce_social_links";s:1:"0";s:13:"woo_acc_msg_1";s:55:"Need Assistance? Call customer service at 888-555-5555.";s:13:"woo_acc_msg_2";s:32:"E-mail them at info@yourshop.com";s:10:"custom_css";s:0:"";}', 'yes'), +(401, 'icl_admin_messages', 'a:2:{s:8:"messages";a:1:{s:28:"_st_default_language_warning";a:6:{s:4:"text";s:160:"How to translate strings when default language is not English";s:4:"type";b:0;s:4:"hide";b:0;s:13:"text_fallback";b:0;s:13:"type_fallback";b:0;s:5:"group";s:18:"string-translation";}}s:16:"instant_messages";a:0:{}}', 'yes'), +(402, 'wpml_cms_nav_settings', 'a:9:{s:10:"page_order";s:10:"menu_order";s:13:"show_cat_menu";i:0;s:19:"cat_menu_page_order";s:1:"0";s:17:"cat_menu_contents";s:5:"posts";s:13:"heading_start";s:0:"";s:11:"heading_end";s:0:"";s:5:"cache";i:0;s:21:"breadcrumbs_separator";s:9:" » ";s:14:"cat_menu_title";s:4:"News";}', 'yes'), +(403, '_wpml_media', 'a:3:{s:7:"version";s:5:"2.1.1";s:13:"starting_help";b:0;s:20:"new_content_settings";a:3:{s:22:"always_translate_media";b:1;s:15:"duplicate_media";b:1;s:18:"duplicate_featured";b:1;}}', 'yes'), +(915, 'widget_ad_125_125-widget', 'a:2:{i:3;a:9:{s:12:"ad_125_img_1";s:0:"";s:13:"ad_125_link_1";s:0:"";s:12:"ad_125_img_2";s:0:"";s:13:"ad_125_link_2";s:0:"";s:12:"ad_125_img_3";s:0:"";s:13:"ad_125_link_3";s:0:"";s:12:"ad_125_img_4";s:0:"";s:13:"ad_125_link_4";s:0:"";s:5:"title";b:0;}s:12:"_multiwidget";i:1;}', 'yes'), +(1407, '_transient_timeout_GFCache_842044387317ac1e8e0e949459be6a36', '1393436213', 'no'), +(1408, '_transient_GFCache_842044387317ac1e8e0e949459be6a36', '1', 'no'), +(1409, 'rg_gforms_disable_css', '0', 'yes'), +(404, 'icl_adl_settings', 'a:4:{s:12:"translations";a:1:{s:2:"es";a:5:{s:4:"core";a:1:{s:9:"available";s:32:"137d6d5447d5d9a27d8f1cb0c9c5a620";}s:9:"twentyten";a:1:{s:9:"available";s:32:"a878951c62eb8e3ee11ecdbfc2764ed5";}s:12:"twentyeleven";a:1:{s:9:"available";s:32:"cd3b3089099d1ec98bd0eab952bc38aa";}s:2:"cc";a:1:{s:9:"available";s:32:"7d08df9de5debb0ca9e87abe563b13af";}s:12:"twentytwelve";a:1:{s:9:"available";s:32:"d2c27891ec91b1ea02cf4727a910d4b3";}}}s:10:"wp_version";s:5:"3.8.1";s:19:"last_time_xml_check";i:1392635663;s:27:"last_time_xml_check_trigger";s:9:"wp-update";}', 'yes'), +(405, '_icl_admin_option_names', 'a:34:{s:5:"theme";a:3:{s:5:"Avada";a:0:{}s:5:"avada";a:0:{}s:14:"double-r-group";a:0:{}}i:0;s:16:"Avada_options_es";i:1;s:16:"Avada_backups_es";i:2;s:18:"recently_activated";i:3;s:19:"avada_revslider_css";i:4;s:12:"sbg_sidebars";i:5;s:13:"show_on_front";i:6;s:13:"page_on_front";i:7;s:14:"page_for_posts";i:8;s:16:"sidebars_widgets";i:9;s:18:"widget_\\'' . $title";i:10;s:27:"layerslider-release-channel";i:11;s:25:"layerslider-purchase-code";i:12;s:21:"layerslider-validated";i:13;s:15:"ls-google-fonts";i:14;s:11:"ls_\\''.$item";i:15;s:17:"ls-screen-options";i:16;s:18:"ls-collapsed-boxes";i:17;s:29:"layerslider_custom_capability";i:18;s:17:"ls-plugin-version";i:19;s:12:"ls-installed";i:20;s:13:"ls-db-version";i:21;s:12:"cpto_options";i:22;s:14:"CPT_configured";i:23;s:24:"wooslider\\'' . \\''-version";i:24;s:17:"avada_int_plugins";i:25;s:27:"avada_layerslider_activated";i:26;s:30:"avada_layerslider_last_version";i:27;s:23:"shop_catalog_image_size";i:28;s:22:"shop_single_image_size";i:29;s:25:"shop_thumbnail_image_size";i:30;s:21:"avada_ubermenu_notice";i:31;s:28:"avada_ubermenu_notice_hidden";i:32;s:38:"cfTwitterToken_\\''.$args[\\''widget_id\\'']";}', 'yes'), +(1422, 'widget_nav_menu', 'a:2:{i:2;a:2:{s:5:"title";s:18:"Caballos por razas";s:8:"nav_menu";i:50;}s:12:"_multiwidget";i:1;}', 'yes'), +(1473, 'theme_mods_twentyfourteen', 'a:1:{s:16:"sidebars_widgets";a:2:{s:4:"time";i:1393513223;s:4:"data";a:4:{s:19:"wp_inactive_widgets";a:17:{i:0;s:14:"recent-posts-7";i:1;s:10:"nav_menu-2";i:2;s:14:"gform_widget-2";i:3;s:14:"gform_widget-3";i:4;s:6:"text-6";i:5;s:6:"text-7";i:6;s:6:"text-3";i:7;s:7:"text-10";i:8;s:7:"text-11";i:9;s:6:"text-8";i:10;s:6:"text-5";i:11;s:6:"text-9";i:12;s:6:"text-4";i:13;s:12:"categories-7";i:14;s:14:"recent-posts-5";i:15;s:14:"recent-posts-6";i:16;s:14:"recent-posts-3";}s:9:"sidebar-1";a:3:{i:0;s:14:"recent-posts-2";i:1;s:10:"archives-2";i:2;s:12:"categories-2";}s:9:"sidebar-2";a:0:{}s:9:"sidebar-3";a:0:{}}}}', 'yes'), +(412, 'widget_icl_lang_sel_widget', 'a:1:{i:1;a:1:{s:5:"title";b:0;}}', 'yes'), +(1122, '_site_transient_timeout_browser_dbbaf6ebb0240fdf90c82a951e227dd1', '1393947901', 'yes'), +(1123, '_site_transient_browser_dbbaf6ebb0240fdf90c82a951e227dd1', 'a:9:{s:8:"platform";s:7:"Windows";s:4:"name";s:7:"Firefox";s:7:"version";s:4:"27.0";s:10:"update_url";s:23:"http://www.firefox.com/";s:7:"img_src";s:50:"http://s.wordpress.org/images/browsers/firefox.png";s:11:"img_src_ssl";s:49:"https://wordpress.org/images/browsers/firefox.png";s:15:"current_version";s:2:"16";s:7:"upgrade";b:0;s:8:"insecure";b:0;}', 'yes'), +(1567, '_transient_timeout_feed_mod_90703ac594673efe43c980672b645276', '1393631681', 'no'), +(1568, '_transient_feed_mod_90703ac594673efe43c980672b645276', '1393588481', 'no'), +(1216, 'portfolio_category_children', 'a:0:{}', 'yes'); +INSERT INTO `drgrp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES +(1099, 'Avada_backups_es', 'a:406:{s:10:"responsive";s:1:"1";s:12:"ipad_potrait";s:1:"1";s:16:"google_analytics";s:0:"";s:10:"space_head";s:0:"";s:10:"space_body";s:0:"";s:13:"header_layout";s:2:"v4";s:19:"header_left_content";s:11:"Leave Empty";s:20:"header_right_content";s:11:"Leave Empty";s:17:"header_v4_content";s:7:"Tagline";s:18:"header_banner_code";s:0:"";s:13:"header_number";s:15:"+34 619 686 633";s:12:"header_email";s:21:"info@doublergroup.com";s:14:"header_tagline";s:37:"Cría y alta competición de caballos";s:15:"header_bg_image";s:0:"";s:14:"header_bg_full";s:1:"0";s:18:"header_bg_parallax";s:1:"0";s:16:"header_bg_repeat";s:6:"repeat";s:16:"icons_header_new";s:1:"1";s:17:"margin_header_top";s:3:"0px";s:20:"margin_header_bottom";s:3:"0px";s:13:"header_sticky";s:1:"0";s:20:"header_sticky_tablet";s:1:"0";s:20:"header_sticky_mobile";s:1:"0";s:21:"header_sticky_opacity";s:0:"";s:25:"header_sticky_nav_padding";s:0:"";s:27:"header_sticky_nav_font_size";s:0:"";s:28:"header_sticky_logo_max_width";s:0:"";s:4:"logo";s:70:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Logo-RR.png";s:11:"logo_retina";s:80:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Logo-RR@2x-300x51.png";s:17:"retina_logo_width";s:3:"200";s:18:"retina_logo_height";s:2:"35";s:14:"logo_alignment";s:4:"Left";s:16:"margin_logo_left";s:3:"0px";s:17:"margin_logo_right";s:3:"0px";s:15:"margin_logo_top";s:3:"0px";s:18:"margin_logo_bottom";s:3:"0px";s:7:"favicon";s:0:"";s:11:"iphone_icon";s:0:"";s:18:"iphone_icon_retina";s:0:"";s:9:"ipad_icon";s:0:"";s:16:"ipad_icon_retina";s:0:"";s:10:"nav_height";s:2:"40";s:11:"nav_padding";s:2:"35";s:19:"dropdown_menu_width";s:5:"170px";s:20:"main_nav_search_icon";s:1:"1";s:20:"main_nav_icon_circle";s:1:"1";s:14:"page_title_bar";s:1:"1";s:17:"page_title_height";s:4:"65px";s:13:"page_title_bg";s:74:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/page_bkgd31.jpg";s:20:"page_title_bg_retina";s:0:"";s:18:"page_title_bg_full";s:1:"1";s:22:"page_title_bg_parallax";s:1:"0";s:19:"page_title_bg_color";s:7:"#F6F6F6";s:23:"page_title_border_color";s:7:"#d2d3d4";s:17:"page_title_bar_bs";s:11:"Breadcrumbs";s:10:"breadcrumb";s:1:"0";s:17:"breadcrumb_mobile";s:1:"0";s:16:"breacrumb_prefix";s:0:"";s:18:"slidingbar_widgets";s:1:"0";s:25:"mobile_slidingbar_widgets";s:1:"1";s:21:"slidingbar_top_border";s:1:"0";s:32:"slidingbar_bg_color_transparency";s:1:"0";s:23:"slidingbar_open_on_load";s:1:"0";s:26:"slidingbar_widgets_columns";s:1:"2";s:14:"footer_widgets";s:1:"1";s:22:"footer_widgets_columns";s:1:"3";s:16:"footerw_bg_image";s:69:"http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/footer.png";s:15:"footerw_bg_full";s:1:"0";s:23:"footer_area_bg_parallax";s:1:"0";s:17:"footerw_bg_repeat";s:8:"repeat-x";s:14:"footerw_bg_pos";s:8:"top left";s:23:"footer_area_top_padding";s:0:"";s:26:"footer_area_bottom_padding";s:0:"";s:16:"footer_copyright";s:1:"1";s:11:"footer_text";s:101:"Copyright 2014 Double R Group | Aviso legal | Política de privacidad";s:12:"icons_footer";s:1:"1";s:16:"icons_footer_new";s:1:"1";s:21:"copyright_top_padding";s:2:"18";s:24:"copyright_bottom_padding";s:2:"18";s:6:"layout";s:4:"Wide";s:8:"bg_image";s:0:"";s:7:"bg_full";s:1:"0";s:9:"bg_repeat";s:6:"repeat";s:8:"bg_color";s:7:"#d7d6d6";s:17:"bg_pattern_option";s:1:"0";s:10:"bg_pattern";s:8:"pattern1";s:16:"content_bg_image";s:0:"";s:15:"content_bg_full";s:1:"0";s:17:"content_bg_repeat";s:6:"repeat";s:16:"custom_font_woff";s:0:"";s:15:"custom_font_ttf";s:0:"";s:15:"custom_font_svg";s:0:"";s:15:"custom_font_eot";s:0:"";s:11:"google_body";s:11:"Droid Serif";s:10:"google_nav";s:6:"Roboto";s:15:"google_headings";s:6:"Roboto";s:22:"google_footer_headings";s:6:"Roboto";s:13:"standard_body";s:11:"Select Font";s:12:"standard_nav";s:11:"Select Font";s:17:"standard_headings";s:11:"Select Font";s:24:"standard_footer_headings";s:11:"Select Font";s:14:"body_font_size";s:2:"15";s:13:"nav_font_size";s:2:"16";s:22:"nav_dropdown_font_size";s:2:"14";s:14:"snav_font_size";s:2:"12";s:18:"side_nav_font_size";s:2:"14";s:21:"breadcrumbs_font_size";s:2:"14";s:15:"sidew_font_size";s:2:"15";s:20:"slidingbar_font_size";s:2:"13";s:15:"footw_font_size";s:2:"13";s:19:"copyright_font_size";s:2:"12";s:12:"h1_font_size";s:2:"32";s:12:"h2_font_size";s:2:"26";s:12:"h3_font_size";s:2:"16";s:12:"h4_font_size";s:2:"13";s:12:"h5_font_size";s:2:"12";s:12:"h6_font_size";s:2:"11";s:17:"tagline_font_size";s:2:"16";s:20:"page_title_font_size";s:2:"24";s:30:"page_title_subheader_font_size";s:2:"18";s:12:"body_font_lh";s:2:"21";s:10:"h1_font_lh";s:2:"44";s:10:"h2_font_lh";s:2:"27";s:10:"h3_font_lh";s:2:"24";s:10:"h4_font_lh";s:2:"20";s:10:"h5_font_lh";s:2:"18";s:10:"h6_font_lh";s:2:"17";s:11:"scheme_type";s:5:"Light";s:12:"color_scheme";s:4:"Blue";s:13:"primary_color";s:7:"#395b7b";s:19:"slidingbar_bg_color";s:7:"#363839";s:22:"header_sticky_bg_color";s:7:"#ffffff";s:15:"header_bg_color";s:7:"#ffffff";s:19:"header_border_color";s:7:"#e5e5e5";s:19:"header_top_bg_color";s:7:"#395b7b";s:16:"content_bg_color";s:7:"#ffffff";s:15:"footer_bg_color";s:7:"#ffffff";s:19:"footer_border_color";s:7:"#ffffff";s:18:"copyright_bg_color";s:7:"#1f1f1f";s:22:"copyright_border_color";s:7:"#242424";s:24:"image_gradient_top_color";s:7:"#395b7b";s:27:"image_gradient_bottom_color";s:7:"#395b7b";s:25:"button_gradient_top_color";s:7:"#395b7b";s:28:"button_gradient_bottom_color";s:7:"#395b7b";s:24:"slidingbar_divider_color";s:7:"#282A2B";s:20:"footer_divider_color";s:7:"#505152";s:13:"form_bg_color";s:7:"#ffffff";s:15:"form_text_color";s:7:"#333333";s:17:"form_border_color";s:7:"#d2d2d2";s:17:"timeline_bg_color";s:11:"transparent";s:14:"timeline_color";s:7:"#ebeaea";s:12:"qty_bg_color";s:7:"#fbfaf9";s:18:"qty_bg_hover_color";s:7:"#ffffff";s:19:"bbp_forum_header_bg";s:7:"#ebeaea";s:22:"bbp_forum_border_color";s:7:"#ebeaea";s:21:"socialbox_icons_color";s:4:"Dark";s:18:"header_icons_color";s:5:"Light";s:18:"footer_icons_color";s:4:"Dark";s:16:"main_top_padding";s:0:"";s:19:"main_bottom_padding";s:0:"";s:16:"hundredp_padding";s:0:"";s:18:"button_text_shadow";s:1:"1";s:22:"slidingbar_text_shadow";s:1:"1";s:18:"footer_text_shadow";s:1:"1";s:26:"button_gradient_text_color";s:7:"#ebeaea";s:18:"tagline_font_color";s:7:"#747474";s:16:"page_title_color";s:7:"#333333";s:8:"h1_color";s:7:"#333333";s:8:"h2_color";s:7:"#333333";s:8:"h3_color";s:7:"#333333";s:8:"h4_color";s:7:"#333333";s:8:"h5_color";s:7:"#333333";s:8:"h6_color";s:7:"#333333";s:15:"body_text_color";s:7:"#333333";s:10:"link_color";s:7:"#395b7b";s:22:"breadcrumbs_text_color";s:7:"#8C8989";s:25:"slidingbar_headings_color";s:7:"#DDDDDD";s:21:"slidingbar_text_color";s:7:"#8C8989";s:21:"slidingbar_link_color";s:7:"#BFBFBF";s:21:"sidebar_heading_color";s:7:"#333333";s:21:"footer_headings_color";s:7:"#DDDDDD";s:17:"footer_text_color";s:7:"#464849";s:17:"footer_link_color";s:7:"#BFBFBF";s:17:"menu_h45_bg_color";s:7:"#395b7b";s:16:"menu_first_color";s:7:"#ededed";s:22:"menu_hover_first_color";s:7:"#ffffff";s:17:"menu_sub_bg_color";s:7:"#395b7b";s:19:"menu_bg_hover_color";s:7:"#B4C2CD";s:14:"menu_sub_color";s:7:"#ededed";s:18:"menu_sub_sep_color";s:7:"#B4C2CD";s:10:"snav_color";s:7:"#ffffff";s:29:"header_top_first_border_color";s:7:"#B4C2CD";s:23:"header_top_sub_bg_color";s:7:"#395b7b";s:25:"header_top_menu_sub_color";s:7:"#747474";s:30:"header_top_menu_bg_hover_color";s:7:"#fafafa";s:31:"header_top_menu_sub_hover_color";s:7:"#333333";s:29:"header_top_menu_sub_sep_color";s:7:"#B4C2CD";s:17:"woo_cart_bg_color";s:7:"#fafafa";s:24:"accordian_inactive_color";s:7:"#333333";s:20:"counter_filled_color";s:7:"#1a80b6";s:22:"counter_unfilled_color";s:7:"#f6f6f6";s:15:"dates_box_color";s:7:"#eef0f2";s:18:"carousel_nav_color";s:7:"#999999";s:20:"carousel_hover_color";s:7:"#808080";s:20:"content_box_bg_color";s:11:"transparent";s:21:"checklist_icons_color";s:7:"#ffffff";s:18:"title_border_color";s:7:"#e0dede";s:17:"icon_circle_color";s:7:"#333333";s:17:"icon_border_color";s:7:"#333333";s:10:"icon_color";s:7:"#ffffff";s:21:"imgframe_border_color";s:7:"#f6f6f6";s:20:"imgframe_style_color";s:7:"#000000";s:29:"sep_pricing_box_heading_color";s:7:"#333333";s:36:"full_boxed_pricing_box_heading_color";s:7:"#333333";s:17:"pricing_box_color";s:7:"#62a2c4";s:16:"pricing_bg_color";s:7:"#ffffff";s:20:"pricing_border_color";s:7:"#f8f8f8";s:21:"pricing_divider_color";s:7:"#ededed";s:9:"sep_color";s:7:"#e0dede";s:18:"social_links_color";s:4:"Dark";s:15:"social_bg_color";s:7:"#f6f6f6";s:13:"tabs_bg_color";s:7:"#ffffff";s:19:"tabs_inactive_color";s:7:"#ebeaea";s:10:"tagline_bg";s:7:"#f6f6f6";s:20:"tagline_border_color";s:7:"#f6f6f6";s:20:"testimonial_bg_color";s:7:"#f6f6f6";s:22:"testimonial_text_color";s:7:"#747474";s:10:"blog_title";s:8:"Noticias";s:11:"blog_layout";s:15:"Large Alternate";s:21:"blog_sidebar_position";s:5:"Right";s:19:"blog_archive_layout";s:15:"Large Alternate";s:20:"blog_archive_sidebar";s:12:"Blog Sidebar";s:20:"blog_pagination_type";s:10:"Pagination";s:17:"blog_grid_columns";s:1:"3";s:14:"content_length";s:7:"Excerpt";s:19:"excerpt_length_blog";s:2:"55";s:18:"strip_html_excerpt";s:1:"1";s:15:"blog_full_width";s:1:"0";s:22:"single_post_full_width";s:1:"0";s:15:"featured_images";s:1:"1";s:32:"alternate_date_format_month_year";s:3:"M Y";s:25:"alternate_date_format_day";s:1:"d";s:20:"timeline_date_format";s:0:"";s:22:"featured_images_single";s:1:"1";s:11:"blog_pn_nav";s:1:"0";s:15:"blog_post_title";s:1:"1";s:11:"author_info";s:1:"0";s:18:"social_sharing_box";s:1:"1";s:13:"related_posts";s:1:"0";s:13:"blog_comments";s:1:"0";s:9:"post_meta";s:1:"1";s:16:"post_meta_author";s:1:"1";s:14:"post_meta_date";s:1:"0";s:14:"post_meta_cats";s:1:"1";s:18:"post_meta_comments";s:1:"1";s:14:"post_meta_read";s:1:"0";s:11:"date_format";s:6:"j F, Y";s:15:"portfolio_items";s:1:"9";s:24:"portfolio_archive_layout";s:27:"Portfolio Three Column Text";s:25:"portfolio_archive_sidebar";s:4:"None";s:24:"portfolio_content_length";s:7:"Excerpt";s:24:"excerpt_length_portfolio";s:2:"15";s:20:"grid_pagination_type";s:10:"Pagination";s:14:"portfolio_slug";s:15:"portfolio_items";s:25:"portfolio_featured_images";s:1:"0";s:16:"portfolio_pn_nav";s:1:"0";s:18:"portfolio_comments";s:1:"0";s:16:"portfolio_author";s:1:"0";s:16:"sharing_facebook";s:1:"1";s:15:"sharing_twitter";s:1:"1";s:14:"sharing_reddit";s:1:"0";s:16:"sharing_linkedin";s:1:"0";s:14:"sharing_google";s:1:"0";s:14:"sharing_tumblr";s:1:"0";s:17:"sharing_pinterest";s:1:"0";s:13:"sharing_email";s:1:"1";s:13:"facebook_link";s:1:"#";s:11:"flickr_link";s:0:"";s:8:"rss_link";s:0:"";s:12:"twitter_link";s:1:"#";s:10:"vimeo_link";s:0:"";s:12:"youtube_link";s:63:"https://www.youtube.com/channel/UCGXuZZA95xD9LdOesfHG9sQ/videos";s:14:"pinterest_link";s:0:"";s:11:"tumblr_link";s:0:"";s:11:"google_link";s:0:"";s:13:"dribbble_link";s:0:"";s:9:"digg_link";s:0:"";s:13:"linkedin_link";s:0:"";s:12:"blogger_link";s:0:"";s:10:"skype_link";s:0:"";s:11:"forrst_link";s:0:"";s:12:"myspace_link";s:0:"";s:15:"deviantart_link";s:0:"";s:10:"yahoo_link";s:0:"";s:11:"reddit_link";s:0:"";s:16:"custom_icon_name";s:0:"";s:17:"custom_icon_image";s:0:"";s:24:"custom_icon_image_retina";s:0:"";s:17:"retina_icon_width";s:0:"";s:18:"retina_icon_height";s:0:"";s:16:"custom_icon_link";s:0:"";s:15:"posts_slideshow";s:1:"1";s:22:"posts_slideshow_number";s:1:"5";s:18:"slideshow_autoplay";s:1:"1";s:23:"slideshow_smooth_height";s:1:"0";s:15:"slideshow_speed";s:4:"7000";s:17:"flexslider_number";s:1:"5";s:22:"pagination_video_slide";s:1:"0";s:22:"legacy_posts_slideshow";s:1:"0";s:16:"flexslider_width";s:5:"940px";s:18:"flexslider_circles";s:1:"0";s:13:"tfs_animation";s:4:"fade";s:12:"tfs_autoplay";s:1:"1";s:19:"tfs_slideshow_speed";s:4:"7000";s:19:"tfs_animation_speed";s:3:"600";s:18:"flexsliders_number";s:1:"1";s:12:"flexslider_1";a:3:{i:1;a:5:{s:5:"order";s:1:"1";s:5:"title";s:148:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam";s:3:"url";s:71:"http://theme-fusion.com/avadaxml/wp-content/uploads/2013/10/slide_1.jpg";s:4:"link";s:0:"";s:11:"description";s:0:"";}i:2;a:5:{s:5:"order";s:1:"2";s:5:"title";s:0:"";s:3:"url";s:0:"";s:4:"link";s:0:"";s:11:"description";s:116:"";}i:3;a:5:{s:5:"order";s:1:"3";s:5:"title";s:148:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam";s:3:"url";s:71:"http://theme-fusion.com/avadaxml/wp-content/uploads/2012/11/slide_2.jpg";s:4:"link";s:0:"";s:11:"description";s:0:"";}}s:17:"tfes_slider_width";s:4:"100%";s:18:"tfes_slider_height";s:5:"400px";s:14:"tfes_animation";s:5:"sides";s:13:"tfes_autoplay";s:1:"1";s:13:"tfes_interval";s:4:"3000";s:10:"tfes_speed";s:3:"800";s:10:"tfes_width";s:3:"150";s:18:"es_title_font_size";s:2:"42";s:20:"es_caption_font_size";s:2:"20";s:14:"es_title_color";s:7:"#333333";s:16:"es_caption_color";s:7:"#747474";s:24:"lightbox_animation_speed";s:4:"Fast";s:16:"lightbox_gallery";s:1:"1";s:17:"lightbox_autoplay";s:1:"0";s:24:"lightbox_slideshow_speed";s:4:"5000";s:16:"lightbox_opacity";s:3:"0.8";s:14:"lightbox_title";s:1:"1";s:13:"lightbox_desc";s:1:"1";s:15:"lightbox_social";s:1:"1";s:20:"lightbox_post_images";s:1:"0";s:9:"gmap_type";s:7:"roadmap";s:10:"gmap_width";s:4:"100%";s:11:"gmap_height";s:5:"415px";s:12:"gmap_address";s:49:"775 New York Ave, Brooklyn, Kings, New York 11203";s:13:"email_address";s:0:"";s:14:"map_zoom_level";s:1:"8";s:7:"map_pin";s:1:"0";s:9:"map_popup";s:1:"0";s:15:"map_scrollwheel";s:1:"0";s:9:"map_scale";s:1:"0";s:15:"map_zoomcontrol";s:1:"0";s:16:"recaptcha_public";s:0:"";s:17:"recaptcha_private";s:0:"";s:22:"recaptcha_color_scheme";s:3:"red";s:16:"sidebar_bg_color";s:11:"transparent";s:13:"content_width";s:10:"71.1702128";s:13:"sidebar_width";s:10:"23.4042553";s:15:"sidebar_padding";s:1:"0";s:14:"dev_shortcodes";s:1:"0";s:16:"avada_rev_styles";s:1:"0";s:18:"testimonials_speed";s:4:"4000";s:19:"default_sidebar_pos";s:5:"Right";s:16:"sidenav_behavior";s:5:"Hover";s:20:"number_related_posts";s:1:"5";s:14:"comments_pages";s:1:"0";s:14:"link_read_more";s:1:"0";s:16:"disable_excerpts";s:1:"0";s:21:"featured_images_pages";s:1:"0";s:18:"faq_featured_image";s:1:"0";s:21:"nofollow_social_links";s:1:"0";s:14:"image_rollover";s:1:"1";s:19:"link_image_rollover";s:1:"0";s:19:"zoom_image_rollover";s:1:"0";s:20:"title_image_rollover";s:1:"0";s:25:"title_link_image_rollover";s:1:"0";s:19:"cats_image_rollover";s:1:"0";s:22:"image_rollover_opacity";s:1:"1";s:14:"search_content";s:15:"Posts and Pages";s:14:"search_excerpt";s:1:"0";s:23:"search_results_per_page";s:2:"10";s:22:"search_featured_images";s:1:"0";s:22:"bbpress_global_sidebar";s:1:"0";s:15:"ppbress_sidebar";s:4:"None";s:8:"ubermenu";s:1:"0";s:15:"post_type_order";s:1:"0";s:18:"status_layerslider";s:1:"0";s:16:"status_revslider";s:1:"0";s:17:"status_flexslider";s:1:"0";s:15:"use_animate_css";s:1:"0";s:26:"disable_mobile_animate_css";s:1:"1";s:15:"status_lightbox";s:1:"0";s:11:"status_gmap";s:1:"0";s:9:"status_yt";s:1:"0";s:12:"status_vimeo";s:1:"0";s:14:"status_jqcycle";s:1:"0";s:14:"status_eslider";s:1:"0";s:12:"status_totop";s:1:"1";s:19:"status_totop_mobile";s:1:"1";s:9:"woo_items";s:2:"12";s:27:"woocommerce_archive_sidebar";s:4:"None";s:28:"woocommerce_acc_link_top_nav";s:1:"1";s:29:"woocommerce_cart_link_top_nav";s:1:"1";s:29:"woocommerce_acc_link_main_nav";s:1:"0";s:30:"woocommerce_cart_link_main_nav";s:1:"1";s:24:"woocommerce_social_links";s:1:"0";s:13:"woo_acc_msg_1";s:55:"Need Assistance? Call customer service at 888-555-5555.";s:13:"woo_acc_msg_2";s:32:"E-mail them at info@yourshop.com";s:10:"custom_css";s:0:"";s:10:"backup_log";s:31:"Wed, 26 Feb 2014 17:03:21 +0000";}', 'yes'), +(916, 'widget_tweets-widget', 'a:1:{s:12:"_multiwidget";i:1;}', 'yes'), +(1534, 'horse_breeds_children', 'a:0:{}', 'yes'), +(1535, 'horse_categories_children', 'a:0:{}', 'yes'), +(1536, 'horse_ages_children', 'a:0:{}', 'yes'), +(1537, 'horse_genders_children', 'a:0:{}', 'yes'), +(1607, '_wpml_cms_nav_cache', 'a:1:{s:31:"cms_nav_offsite_url_cache_class";a:15:{s:24:"4824_cms_nav_offsite_url";s:0:"";s:24:"5007_cms_nav_offsite_url";s:0:"";s:24:"4623_cms_nav_offsite_url";s:0:"";s:24:"4897_cms_nav_offsite_url";s:0:"";s:24:"4899_cms_nav_offsite_url";s:0:"";s:24:"4698_cms_nav_offsite_url";s:0:"";s:24:"4671_cms_nav_offsite_url";s:0:"";s:22:"33_cms_nav_offsite_url";s:0:"";s:22:"69_cms_nav_offsite_url";s:0:"";s:24:"2466_cms_nav_offsite_url";s:0:"";s:22:"72_cms_nav_offsite_url";s:0:"";s:24:"5027_cms_nav_offsite_url";s:0:"";s:24:"2712_cms_nav_offsite_url";s:0:"";s:24:"3496_cms_nav_offsite_url";s:0:"";s:24:"4475_cms_nav_offsite_url";s:0:"";}}', 'yes'), +(1609, '_icl_cache', 'a:2:{s:25:"language_name_cache_class";a:6:{s:21:"language_details_eses";a:5:{s:4:"code";s:2:"es";s:12:"english_name";s:7:"Spanish";s:5:"major";s:1:"1";s:6:"active";s:1:"1";s:12:"display_name";s:8:"Español";}s:14:"in_language_es";a:2:{i:0;a:7:{s:2:"id";s:1:"1";s:4:"code";s:2:"en";s:12:"english_name";s:7:"English";s:6:"active";s:1:"1";s:12:"display_name";s:7:"Inglés";s:10:"encode_url";s:1:"0";s:3:"tag";s:5:"en-US";}i:1;a:7:{s:2:"id";s:1:"2";s:4:"code";s:2:"es";s:12:"english_name";s:7:"Spanish";s:6:"active";s:1:"1";s:12:"display_name";s:8:"Español";s:10:"encode_url";s:1:"0";s:3:"tag";s:5:"es-ES";}}s:9:"languages";a:2:{i:0;O:8:"stdClass":2:{s:13:"language_code";s:2:"en";s:4:"name";s:7:"English";}i:1;O:8:"stdClass":2:{s:13:"language_code";s:2:"es";s:4:"name";s:8:"Español";}}s:4:"eses";s:8:"Español";s:4:"enen";s:7:"English";s:4:"enes";s:7:"Inglés";}s:17:"flags_cache_class";a:2:{s:2:"en";O:8:"stdClass":2:{s:4:"flag";s:6:"en.png";s:13:"from_template";s:1:"0";}s:2:"es";O:8:"stdClass":2:{s:4:"flag";s:6:"es.png";s:13:"from_template";s:1:"0";}}}', 'yes'), +(943, 'widget_calendar', 'a:1:{s:12:"_multiwidget";i:1;}', 'yes'), +(1041, 'onetrt_tasks', 'a:4:{i:696661142;O:8:"stdClass":7:{s:2:"id";s:9:"696661142";s:7:"created";i:1393322291;s:7:"updated";i:1393322452;s:8:"finished";i:1393322452;s:11:"items_total";i:88;s:10:"items_left";i:0;s:10:"items_done";i:88;}i:696661463;O:8:"stdClass":7:{s:2:"id";s:9:"696661463";s:7:"created";i:1393322929;s:7:"updated";i:1393323091;s:8:"finished";i:1393323091;s:11:"items_total";i:88;s:10:"items_left";i:0;s:10:"items_done";i:88;}i:696662714;O:8:"stdClass":7:{s:2:"id";s:9:"696662714";s:7:"created";i:1393325421;s:7:"updated";i:1393325580;s:8:"finished";i:1393325580;s:11:"items_total";i:88;s:10:"items_left";i:0;s:10:"items_done";i:88;}i:696662833;O:8:"stdClass":7:{s:2:"id";s:9:"696662833";s:7:"created";i:1393325675;s:7:"updated";i:1393326004;s:8:"finished";i:1393326004;s:11:"items_total";i:88;s:10:"items_left";i:0;s:10:"items_done";i:88;}}', 'no'), +(1042, 'onetrt_task_696661142', '', 'no'), +(1043, 'onetrt_opts', 'a:9:{s:15:"after_media_btn";b:0;s:15:"only_complement";b:0;s:11:"bulk_action";b:1;s:8:"advanced";b:1;s:7:"massgen";b:0;s:13:"success_redir";b:0;s:17:"quality_overwrite";b:0;s:7:"quality";i:90;s:6:"thumbs";a:0:{}}', 'yes'), +(1061, 'onetrt_task_696662714', '', 'no'), +(1062, 'onetrt_task_696662833', '', 'no'), +(1047, 'onetrt_task_696661463', '', 'no'), +(1565, '_transient_timeout_feed_90703ac594673efe43c980672b645276', '1393631681', 'no'); +INSERT INTO `drgrp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES +(1566, '_transient_feed_90703ac594673efe43c980672b645276', 'a:4:{s:5:"child";a:1:{s:0:"";a:1:{s:3:"rss";a:1:{i:0;a:6:{s:4:"data";s:3:"\n\n\n";s:7:"attribs";a:1:{s:0:"";a:1:{s:7:"version";s:3:"2.0";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:1:{s:0:"";a:1:{s:7:"channel";a:1:{i:0;a:6:{s:4:"data";s:51:"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:3:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:4:"WPML";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:15:"http://wpml.org";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:52:"The Plugin for Building Multilingual WordPress Sites";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:13:"lastBuildDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 28 Feb 2014 11:53:23 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"language";a:1:{i:0;a:5:{s:4:"data";s:5:"en-US";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:9:"generator";a:1:{i:0;a:5:{s:4:"data";s:29:"http://wordpress.org/?v=3.8.1";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"item";a:10:{i:0;a:6:{s:4:"data";s:42:"\n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:102:"This week compatible – Adventure, The Organic Shop, Reatro, Ditty News Ticker and Posts 2 Posts WPML";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:107:"http://wpml.org/2014/02/week-compatible-adventure-organic-shop-reatro-ditty-news-ticker-posts-2-posts-wpml/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:116:"http://wpml.org/2014/02/week-compatible-adventure-organic-shop-reatro-ditty-news-ticker-posts-2-posts-wpml/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 26 Feb 2014 07:33:00 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:22:"Compatibility Bulletin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:25:"http://wpml.org/?p=347412";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:311:"Today we are happy to announce that we have another 3 themes and 2 plugins to add to our compatibility list. The themes are Adventure, The Organic Shop, Reatro and the plugins are Ditty News Ticker, Posts 2 Posts WPML. If you want to review the entire multilingual ready list of themes and plugins you […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:9:"Dominykas";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:5397:"

Today we are happy to announce that we have another 3 themes and 2 plugins to add to our compatibility list. The themes are Adventure, The Organic Shop, Reatro and the plugins are Ditty News Ticker, Posts 2 Posts WPML.

\n

If you want to review the entire multilingual ready list of themes and plugins you are welcome to view it here:

\n\n

Also, if you’re a theme or a plugin author and you want to make it compatible with WPML, we welcome you and ready to help: You are welcome to contact us at go global program page.

\n

In order to expedite the process we strongly recommend that you test your theme or plugin with our Achieving WPML compatibility for your themes and plugins. It easily tests compatibility with WPML and helps you quickly make your theme or plugin Multilingual Ready.

\n
\n

Adventure theme

\n

ekho

\n

Adventure is a responsive and retina optimized WordPress theme designed for sharing life adventures. The theme was created with travelers, explorers and adventure related businesses in mind. Adventure features a full width featured slideshow for showcasing you’re most important articles.

\n

Purchase Adventure

\n
\n
\n

The Organic Shop theme

\n

ekho

\n

The Shop Theme is designed for eCommerce. The theme was developed to work with the popular and free WooCommerce plugin. The design is clean, modern and flexible — accommodating a large variety of brands and products. The Shop Theme also features a responsive layout for mobile devices, making it easier for mobile users to purchase products from your site.

\n

Purchase The Organic Shop

\n
\n
\n

Reatro theme

\n

ekho

\n

Reatro is a professional business & eCommerce WordPress theme, it can be used for multi-purpose, easy to install and customize with clean and flexible design. The colors option can help you to customize the inteface in 5 mins. If you want to build a business or eCommerce website, reatro is a good choice.

\n

Purchase Reatro

\n
\n
\n

Ditty News Ticker plugin

\n

Ditty News Ticker is a multi-functional data display plugin. Easily add custom news tickers to your site either through shortcodes, direct functions, or in a custom Ditty News Ticker Widget.

\n

Download Ditty News Ticker

\n
\n
\n

Posts 2 Posts WPML plugin

\n

Integration between Posts 2 Posts and WPML. Posts 2 Posts plugin allows you to create many-to-many relationships between posts of any type: post, page, custom etc. Additionally, you can create many-to-many relationships between posts and users.

\n

Download Posts 2 Posts WPML

\n
\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:112:"http://wpml.org/2014/02/week-compatible-adventure-organic-shop-reatro-ditty-news-ticker-posts-2-posts-wpml/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:1;a:6:{s:4:"data";s:42:"\n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:90:"Making a multilingual site ready for search engine indexing: a case study of oneFerro site";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:78:"http://wpml.org/2014/02/making-multilingual-site-ready-search-engine-indexing/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:87:"http://wpml.org/2014/02/making-multilingual-site-ready-search-engine-indexing/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 25 Feb 2014 07:14:23 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:12:"Case studies";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:25:"http://wpml.org/?p=343822";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:327:"What is the main reason to make your site multilingual? “To attract more foreign customers.” This is how WPML users submitting their work to our showcase usually justify the need for going global with the WordPress sites. However, the point is that you will not gain new customers unless your site is easy to find […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:10:"Agnes Bury";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:18284:"

What is the main reason to make your site multilingual? “To attract more foreign customers.” This is how WPML users submitting their work to our showcase usually justify the need for going global with the WordPress sites. However, the point is that you will not gain new customers unless your site is easy to find through search engines. Today, we examine Marek Dziok’s site OneFerro.com built with WPML to meet Google’s official guidelines for multilingual sites.

\n

In this case study, the project’s author shares his experience, practices, and the results he gained in terms of Google SEPRs with his multilingual site. You will also find some useful tips and hints that can help make any WPML site ready to crawl and be indexed by search engines.

\n

About the project

\n

oneferro multilingual site

oneFerro.com

oneferro.com

\n

Oneferro specializes in secondary steel trading. The site was created by Marek Dziok, a WordPress fan and a business participator of the oneFerro company.

\n

The main project goals that the author wanted to achieve

\n
    \n
  • To present secondary steel offers from all over the world in different languages.
  • \n
  • To easily manage product offer items.
  • \n
  • To display the product offers in a well-structured manner, using tables, having PDFs attached, etc.
  • \n
  • To make his site ready for mobile devices (responsive web design).
  • \n
  • To get the highest positions in the Google search engine for certain selected keywords.
  • \n
\n

What was the reason to make the site multilingual?

\n

The site was built for a company operating in the international market. Therefore, it was supposed to be in three basic languages:

\n
    \n
  • Polish (as the native language; the company is based in Poland)
  • \n
  • English (as an international standard in worldwide trading)
  • \n
  • Russian (as a measure to open gates for new Eastern markets)
  • \n
\n

About the author

\n
Marek Dziok - oneFerro.com site author

Marek Dziok – oneFerro.com site author

\n

Marek Dziok

\n

An Internet and SEO hothead. He treats WP-development and webmastering as a hobby. Professionally, he is a member of the board of an insurance brokerage company. In the picture on the right, Marek is with his daughter Zoe.

\n

What Marek says about himself

\n

“Internet is my hobby and a love, but WP-development and website building is only a path that leads to my biggest Internet love: SEO.

\n

I’d rather not be precise when I describe who I am. My wife calls me a “lifetime learner.” This is nice, and I like it. I’d rather say who I’d like to be: a freelancer who can work on whatever he wants to instead of being forced to.”

\n
\n

How Marek found out and learnt WPML

\n

Being asked how he’d come across WPML, Marek smiles and says, “Using the net. Actually, it was Uncle Google who gave me the track. I had just asked him a specific query.”

\n

Marek says that he didn’t learn WPML. He had just seen its site, bought the product, installed it, and started working with it. Several extra elements were done by his son (he also likes webmastering despite working in the financial industry).

\n

“WPML is readable enough for an average WordPress user. As far I remember, I happened to use the documentation, but I’m not 100% sure…”

\n

Google’s guidelines for multilingual sites

\n

Webmasters who care about Google indexing done right will focus on creating an XML site map first. Then, they will use Google Webmaster Tools, which let them see their sites through the eyes of Google. This is a good practice to follow.

\n

However, before we jump to that step and view Marek’s site in terms of adapting language versions for SEO, let’s see what the official Google’s directives are in the multilingual area.

\n

Official news on crawling and indexing sites for Google index

\n
\n
One language for each page and for all elements
\n
Google tries to determine the main language of each one of your pages. Note that Google will ignore all code-level language information. This means that Google tries to guess the language by analyzing the contents of the page.

\n

How you can help:

\n
    \n
  • by sticking to only one language per page
  • \n
  • by avoiding side-by-side translations
  • \n
  • by using the same language for all elements (headers, sidebars, menus, etc.)
  • \n
\n
\n
URL structure
\n
The URL structure doesn’t matter for Google. Using folders or subdomains for different languages is the same from Google’s point of view.

\n

Therefore, you don’t have to create any special URLs when developing a multilingual website. However, Google recommends the addition of a language identifier to your URLs for your site visitors’ comfort. For example, to let French readers know that they’re on the French section of this site, you could use:

\n
    \n
  • http://example.com/fr/subpage.html
  • \n
  • http://fr.example.com/subpage.html
  • \n
\n
\n
Crawling and indexing your multilingual website\n
\n
To make all of your site’s content more crawlable, avoid automatic redirections based on the user’s perceived language. These redirections could prevent users (and search engines) from viewing all the versions of your site.

\n

Help Google bots to get your site indexed:

\n
    \n
  • cross-link page by page
  • \n
  • avoid automatic redirections
  • \n
  • provide valuable content
  • \n
\n
\n
\n

“More importantly, the point of making a multilingual website is to reach a larger audience by providing valuable content in several languages. If your users can’t understand an automated translation or if it feels artificial to them, you should ask yourself whether you really want to present this kind of content to them.”

\n

Official news on crawling and indexing sites for Google index

\n

\n

\n
\n

Now let’s examine whether the oneferro.com site meets the abovementioned criteria.

\n

How OneFerro.com created with WPML meets Google’s multilingual site criteria

\n

One language for each page and for all elements

\n

The common mistake that most WordPress users make while translating the contents of a website is that they focus only on the WordPress pages and posts (title and body content); all other elements (such as sliders, widgets, and contact forms) are neglected. This is wrong.

\n

Let’s look at the OneFerro site page by page, taking each WordPress element into consideration.

\n

Home page

\n
oneFerro.com home page

oneFerro.com home page

\n

Elements to be translated: menu, slider, widgets.

\n
\n

Menu
\n

menu synchronization

menu synchronization


\nAll elements of the menu were translated into other languages using the WPML Menu synchronization feature.

\n
\n

Sliders
\n

slider in oneFerro dashboard

a slider in oneFerro dashboard


\nAll slider headings, lead titles, and link titles were translated. For each language, the site author created a separate slider, a feature built-in theme.

\n
\n

Widgets
\n

wpml widget translations

oneFerro widget translations


\nWPML users often ask this question in our support forum:

\n

“If you are using the WordPress default widgets, will you be able to translate both the title and the content under the ‘WPML -> String Translation’ screen?” explains Sarah, a WPML forum moderator.

\n

Here, she shares more useful tips for widget translation.

\n

In the case of the oneFerro.com home page, the widgets were translated using this method. However, in the last widget, the author has performed side-by-side translation, which is not recommended by Google.

\n
\n

Product page

\n

This page list all the product offers, the most important part of the site. Marek says that this was implemented using custom PHP code, as a special module to easily manage the product offers. To make it work with WPML, he used WPML Code API.

\n
oneFerro products

oneFerro products

\n
a single product page

a single product page

\n
\n

A tip from us
\nCustom offers can be managed using custom post types, easily defined with Types, a free WordPress plugin created by our company. WPML supports this plugin.

\n

Help pages

\n

Here, all the content was added as the body content for WP pages, and the translation was handled by using a basic WPML functionality.

\n

Images were used but not translated. Filling out the alt and title attributes for images is a good SEO practice. The use of the WPML Media translation module can help here. In this way, images can be adjusted to different languages without being physically copied for each language version.

\n

Contact page

\n

A separate contact form was created for each language version. The contact form functionality was integrated within the theme that the author used.

\n

URL structure

\n
choosing language format

choosing language format

\n

Different language versions of the site are maintained on URLs in the subfolders format. This assists a visitor to quickly guess the basic site language while navigating the site.

\n
\n

Crawling and indexing your multilingual website

\n
oneferro in Google's results

oneferro in Google’s results

\n

Cross-linking page by page and language switcher
\nThis was done right. Irrespective of which page you are on, you will be always moved to its equivalent in the other language (by clicking on the corresponding flag icon). You can see that even pages with pdfs have their one-to-one equivalents.

\n

This cross page-by-page linking is also useful when you get a link to a specific subpage (which is in English, for example) and you notice your native language (for instance, Russian) in the switcher.

\n

A custom language switcher was implemented using flags.

\n

Avoiding automatic redirections
\nThere are no automatic redirections on this site. All subpages were indexed well, and a user can easily find a page in the language that he/she is looking for by using search engines.

\n

Providing valuable content
\nThe site was translated into other languages by humans. No automated translations were made. The fact that the website had good-quality valuable content referencing the secondary steel area seemed to play a significant role in ensuring its better ranking by the Google search engine.

\n

Let’s look at the results that were achieved.

\n

oneFerro results in Google

\n

There were 253 urls indexed for the oneFerro site in Google.

\n
oneFerro in Google' results

oneFerro in Google’ results

\n
\n

Marek summarizes

\n

“I managed to gain top positions for all keyword phrases that I cared about, even though I didn’t add anything new to this site for months (didn’t even log in). For example: “stal drugogatunkowa” (English: secondary steel) in Google PL was in the first position in SERPs; for Google RU (Russian), it was in the top three.”

\n

When asked about the additional SEO WordPress plug-ins that he used, Marek replied
\n“I know this famous SEO Yoast plug-in. In my opinion, Yoast is meant more for bloggers; for me, it’s like a toy. I’m using SEO Ultimate and other SEO tools, both online and desktop ones, like MOZ, and Rank Track.”

\n

How the author summaries working with WPML

\n

“For me, WPML is like a part of WordPress. Yeah, at first, I was thinking about using different solutions like WordPress MultiSite install. Quickly, I realized that this is not the right way to go.” Marek comments.\n

\n

The advantages of WPML according to Marek are as follows:

\n
    \n
  • great functionally as compared to its relatively low price
  • \n
  • super-easy installation and ease of use
  • \n
  • lots of compatible themes (almost 100% of these the author had considered while choosing the ones to use for the site)
  • \n
\n

Your way to make WPML-based site ready for search engine indexing

\n

What is your way to make a multilingual site ready for search engine indexing? Feel free to share your comments with us.

\n

If there is anything special about your site using WPML, please also let us know. Most interesting cases will be covered in the next articles in this new Case Studies series.

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:83:"http://wpml.org/2014/02/making-multilingual-site-ready-search-engine-indexing/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:2;a:6:{s:4:"data";s:42:"\n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:87:"This week compatible – SmartScreen, Muzak, Acoustic, Invicta, Kause and Store Locator";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:95:"http://wpml.org/2014/02/week-compatible-smartscreen-muzak-acoustic-invicta-kause-store-locator/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:104:"http://wpml.org/2014/02/week-compatible-smartscreen-muzak-acoustic-invicta-kause-store-locator/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Sun, 23 Feb 2014 08:38:51 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:22:"Compatibility Bulletin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:25:"http://wpml.org/?p=345408";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:316:"Today we are happy to announce that we have another 5 themes and 1 plugin to add to our compatibility list. The themes are SmartScreen, Muzak, Acoustic, Invicta, Kause and the plugin is Store Locator. If you want to review the entire Multilingual ready list of themes and plugins you are welcome to view it […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:9:"Dominykas";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:6939:"

Today we are happy to announce that we have another 5 themes and 1 plugin to add to our compatibility list. The themes are SmartScreen, Muzak, Acoustic, Invicta, Kause and the plugin is Store Locator.

\n

If you want to review the entire Multilingual ready list of themes and plugins you are welcome to view it here:

\n\n

Also, if you’re a theme or a plugin author and you want to make it compatible with WPML, we welcome you and ready to help: You are welcome to contact us at go global program page.

\n

In order to expedite the process we strongly recommend that you test your theme or plugin with our Achieving WPML compatibility for your themes and plugins. It easily tests compatibility with WPML and helps you quickly make your theme or plugin Multilingual Ready.

\n
\n

SmartScreen theme

\n

ekho

\n

SmartScreen is a multipurpose WordPress theme suitable for companies or individuals. SmartScreen is WooCommerce ready, parallax ready and much more. It includes 500+ Google web fonts, child themes support, many shortcodes and fullscreen slideshow.

\n

Purchase SmartScreen

\n
\n
\n

Muzak theme

\n

dante

\n

A WordPress theme for bands, musicians, djs and everyone involved in the music business. With Muzak you can display your upcoming events in a really nice way. It also includes audio/video and artists management.

\n

Purchase Muzak

\n
\n
\n

Acoustic theme

\n

dante

\n

Acoustic is designed for DJs, solo artists, bands, collectives, club owners, events producers and anyone in the music industry. Some features of Acoustic are: 6 Custom Post Types (slider, discography, videos, photo galleries, events, artists), child theme support, home page layout options and sample content.

\n

Purchase Acoustic

\n
\n
\n

Invicta theme

\n

dante

\n

Invicta is a flexible and responsive WordPress Theme, with a clean and modern design, suited for any kind of website: business, corporate, products, portfolio, blog, etc. All the main WordPress features are covered by Invicta. Widgets, sidebars, shortcodes, menus are entirely supported and ready to use.

\n

Purchase Invicta

\n
\n
\n

Kause theme

\n

dante

\n

Kause is a flexible WordPress theme designed for churches, charities and non-profit websites. This theme is clean and minimal, and puts direct focus on your message. Some features of Kause are: easy admin panel, 600+ Google web fonts, portfolio/galleries and embed media support.

\n

Purchase Kause

\n
\n
\n

Store Locator plugin

\n

Store Locator Plus is an advanced system for managing multiple physical locations via a fully integrated WordPress solution. Whether you have ten locations or ten-thousand, you manage them with ease right from within your WordPress admin panel.

\n

Purchase Store Locator

\n
\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:100:"http://wpml.org/2014/02/week-compatible-smartscreen-muzak-acoustic-invicta-kause-store-locator/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:3;a:6:{s:4:"data";s:42:"\n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:17:"WPML 3.1.4 Beta 4";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:42:"http://wpml.org/2014/02/wpml-3-1-4-beta-4/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:51:"http://wpml.org/2014/02/wpml-3-1-4-beta-4/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 19 Feb 2014 18:10:28 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:13:"WPML versions";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:25:"http://wpml.org/?p=343544";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:288:"Like you might have noticed, WPML 3.1 release, last week, didn’t go so well. In fact, due to a number of bugs, we had to pull that version down and go back to the previous 3.0.2. After a very intense week of debug and repair, we are ready with a fourth beta, which is very […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:4:"Amir";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:4909:"

Like you might have noticed, WPML 3.1 release, last week, didn’t go so well. In fact, due to a number of bugs, we had to pull that version down and go back to the previous 3.0.2. After a very intense week of debug and repair, we are ready with a fourth beta, which is very close to the final WPML 3.1.x release.

\n

First, I would like to apologize and explain what happened.

\n

Our goal in WPML 3.1 was to improve performance where ever we could. We ended up editing every singe file and every function in WPML’s code. The results of this are actually pretty good. Here is a screenshot of our server monitoring:

\n
Server load went to 50% after we moved to WPML 3.1

Server load went to 50% after we moved to WPML 3.1

\n

Not all this change is due to WPML update. We did other site optimizations to get to this result, but WPML update is a big part of it. A lot of the activity in wpml.org is in the forum and it’s all dynamic content, so it’s not cached. That performance update for WPML did a lot of good for our server load.

\n

Problem is, too many bugs slipped through our QA.

\n

As we edited every corner in WPML, some changes were made, which only effected configurations that we didn’t test. That’s the root cause of this release mess.

\n

Today, we are after a long and extensive bugfix round. We’ve had 6 developers handling these bugs (besides the normal support team). We stopped all other development and made sure that every problem on every client site is fully debugged. Even if that means spending a whole day on it and even if the problem might not even be related to this update. Without complete debug, there’s no way to tell.

\n

We also assigned developers to repair any site that got broken due to this release. It’s our fault and we should handle it.

\n

Our own site is running this version and (now) it’s running smoothly. Just like you suffered from some of the bugs, our own site had dysfunctional parts. It’s all working fine now and performance is still great.

\n

Fixes in WPML 3.1.4

\n

Here is a list of major problems fixed from the initial release of WPML 3.1 (which we took down) and until now:

\n
    \n
  • Translations losing relationsships
  • \n
  • Problems with WordPress installed in directory
  • \n
  • Some strings not translated
  • \n
  • Problems with category templates
  • \n
  • Problems with default menus on translated languages
  • \n
  • Portuguese language switched locale
  • \n
  • Custom post types producing 404
  • \n
  • Category selector in post-edit not complete
  • \n
  • Auto-adjust-ID not working correctly
  • \n
  • PHP errors when updating only WPML components without core
  • \n
  • Conflicts with plugins that manage capabilities
  • \n
\n

Of course, all these issues didn’t happen on all sites. They all got triggered by different combinations of factors. The interesting thing is, when you have these many sites running WPML, all combinations happen. We should have tested many more configurations after such large changes and we’ll be sure to do so going forward.

\n

Since Friday, just after this unfortunate update, we found around 10 issues per day. That rate had dropped now and the last bug we found came in today in the morning. We’re down to very rare situations and it looks like WPML is back to being very stable.

\n

We’ll take the next few days to make sure that everyone is OK and no site has any sort of problem and then we’ll release the final WPML 3.1.4 version.

\n

Download

\n

The latest version, pretty close to a final release is WPML 3.1.4-b4. You can get it only from your wpml.org account (no automatic update). To use this version, please follow this:

\n
    \n
  1. Back up your database. Seriously.
  2. \n
  3. Log in to your wpml.org account and click on Downloads.
  4. \n
  5. Scroll to the bottom and download the Beta package.
  6. \n
  7. Unzip it. Inside the package, you will find all WPML components. If you update WPML, make sure to update ALL components that you are using.
  8. \n
\n

Feedback

\n

If you need any technical help with WPML, please open a new thread in our support forum. If it’s related to this release, indicate it clearly in the subject, so that it gets routed to our development team.

\n

Again, be sure to back up your database before installing this beta version.

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:47:"http://wpml.org/2014/02/wpml-3-1-4-beta-4/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:2:"14";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:4;a:6:{s:4:"data";s:42:"\n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:93:"This week compatible – Ekho, Dante, Rise, Sushi, Skadi, App Mojo and Content Aware Sidebars";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:100:"http://wpml.org/2014/02/week-compatible-ekho-dante-rise-sushi-skadi-app-mojo-content-aware-sidebars/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:109:"http://wpml.org/2014/02/week-compatible-ekho-dante-rise-sushi-skadi-app-mojo-content-aware-sidebars/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Sat, 15 Feb 2014 06:09:10 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:22:"Compatibility Bulletin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:25:"http://wpml.org/?p=340481";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:311:"Today we are happy to announce that we have another 6 themes and 1 plugin to add to our compatibility list. The themes are Ekho, Dante, Rise, Sushi, Skadi, App Mojo and the plugin is Content Aware Sidebars. If you want to review the entire Multilingual ready list of themes and plugins you are welcome […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:9:"Dominykas";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:8380:"

Today we are happy to announce that we have another 6 themes and 1 plugin to add to our compatibility list. The themes are Ekho, Dante, Rise, Sushi, Skadi, App Mojo and the plugin is Content Aware Sidebars.

\n

If you want to review the entire Multilingual ready list of themes and plugins you are welcome to view it here:

\n\n

Also, if you’re a theme or a plugin author and you want to make it compatible with WPML, we welcome you and ready to help: You are welcome to contact us at go global program page.

\n

In order to expedite the process we strongly recommend that you test your theme or plugin with our Achieving WPML compatibility for your themes and plugins. It easily tests compatibility with WPML and helps you quickly make your theme or plugin Multilingual Ready.

\n
\n

Ekho theme

\n

ekho

\n

Ekho is a multi-purpose WordPress theme, you can use this theme as business, agency or portfolio website, built-in theme option framework so you can easily to customize beyond your idea and also this theme is responsive.

\n

Purchase Ekho

\n
\n
\n

Dante theme

\n

dante

\n

Dante is a clean, modern and minimal multi-purpose WordPress theme. This theme offers you a good number of options needed to build a nice site. Code is easy to modify and understand so you can personalize it in the easiest way.

\n

Purchase Dante

\n
\n
\n

Rise theme

\n

rise

\n

Rise is a flexible, and efficiently minimal portfolio theme for WordPress. You can use it to showcase your brand into a single page, or use it as a full site, with standard inner pages. It also includes revolution and layer sliders.

\n

Purchase Rise

\n
\n
\n

Sushi theme

\n

sushi

\n

Sushi WordPress theme is a slick and customizable theme for restaurants and anything alike. It features powerful admin panel, premium slider plugins, menu or catalogue custom post with WooCommerce to make comfortable payment.

\n

Purchase Sushi

\n
\n
\n

Skadi theme

\n

skadi

\n

Skadi is a flexible multi-purpose WordPress Theme that is suitable for any business (corporate, agency, portfolio, creative people, photography and blog websites). It includes a good number of features, such as shortcodes generator, awesome page builder, revolution slider, layer slider and much more.

\n

Purchase Skadi

\n
\n
\n

App Mojo theme

\n

appmojo

\n

WordPress theme suitable for bed and breakfast, small hotels or accommodations. Some features of App Mojo are: visual shortcode builder, 20 color skins, unlimited layout possibilities and one click demo install.

\n

Purchase App Mojo

\n
\n
\n

Content Aware Sidebars plugin

\n

Manage an infinite number of sidebars. Make your WordPress site even more dynamic and boost SEO by controlling what content your sidebars should be displayed with.

\n

Download Content Aware Sidebars

\n
\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:105:"http://wpml.org/2014/02/week-compatible-ekho-dante-rise-sushi-skadi-app-mojo-content-aware-sidebars/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:5;a:6:{s:4:"data";s:42:"\n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:58:"WPML 3.1 – Performance Boost, Admin Permissions and More";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:69:"http://wpml.org/2014/02/wpml-3-1-performance-boost-admin-permissions/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:78:"http://wpml.org/2014/02/wpml-3-1-performance-boost-admin-permissions/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 13 Feb 2014 07:39:30 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:13:"WPML versions";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:25:"http://wpml.org/?p=338497";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:316:"We found several issues with WPML 3.1 release and we had to take down that version from the downloads page. Instead, there is a Beta version, which includes fixes to all known problems. You will find it in your WPML.org account, under Downloads. Scroll all the way to the bottom, where you can download the […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:4:"Amir";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:8109:"
\n

We found several issues with WPML 3.1 release and we had to take down that version from the downloads page. Instead, there is a Beta version, which includes fixes to all known problems. You will find it in your WPML.org account, under Downloads. Scroll all the way to the bottom, where you can download the CMS Beta Package 3.1.4-b2. This is a ZIP that contains all of WPML’s components.

\n

Before installing, please back up your database. Our own site is currently running this version and we are happy with it.

\n

We will be finishing re-testing tomorrow and will have this as a production release. If you installed WPML 3.1 and your site is stuck due to problems, you can use this beta. Please, please backup your database. If anything goes wrong, it’s easy to go back and we can debug what’s happened.

\n
\n

The biggest news about WPML 3.1 is the new internal languages caching, which offers a performance boost that any site will feel. WPML 3.1 also allows to grant permission to its admin screens to different users and fixes a number of nagging problems.

\n

20% to 50% Less CPU and DB Load

\n

WPML 3.1 uses the same advanced caching techniques for language information, as WordPress uses for posts and taxonomy. WPML now preloads the language information for posts that will appear on the page. It means that many individual queries are collapsed into a single database access. In plain English, the number of queries and the amount of CPU processing goes dramatically down. This improvement is most noticeable on the homepage or blog page, or where ever multiple posts are displayed. Heck, even rendering the standard WordPress menus just got a lot faster.

\n

Are we there yet? Almost. After we eliminated the per-post database calls, other calls became more noticeable. This version of WPML cuts the CPU and processing time by half, for many pages. We are going to continue on this path and gradually optimize more areas in upcoming releases. When you get into it, performance optimization becomes fun!

\n

If you are tracking our Toolset plugins, you might have noticed that a similar performance boost just completed for Views. Now, you can build sites with Views, in a fraction of the time it takes to code them in PHP, and achieve the same performance as you can get with finely optimized PHP. Views and WPML developers worked on this performance optimization together and the results of multilingual Toolset sites are just amazing.

\n

Custom Capabilities for Custom Roles

\n

Did you ever want to create users who can manage translations, but don’t necessarily have full administrator privileges? How about users who will be able to edit strings, or taxonomy?

\n

WPML 3.1 makes this easy, by using custom capabilities. Each admin screen and admin operation in WPML is now linked to a custom capability. Naturally, site admins get all these capabilities by default. You can manually grant these capabilities to other users and roles, allowing them specific access to different parts of WPML.

\n

You can assign these new capabilities using several WordPress plugins. Our own Access plugin lets you define custom roles and grant their capabilities. True, it costs money, but it comes with our guarantee and is also fully integrated with WPML. You will see the different WPML capabilities clearly and accurately and can choose which operations you allow to different role types.

\n

Other WPML 3.1 Features

\n

Besides the big performance optimization and the custom capabilities, WPML 3.1 also includes a number of other features, which may make you happy:

\n
    \n
  • When setting a value for “This is a translation of”, and the current content already has translations in other languages, each translation gets properly synchronized, as long as there are no conflicts. In case of conflicts, translation won’t be synchronized, while the current content will be considered as not linked to an original (in line with the old behavior).
  • \n
  • Categories, tags and taxonomies templates files don’t need to be translated anymore (though you can still create a translated file). Taxonomy templates will follow this hierarchy: ‘{taxonomy}-{lang}-{term_slug}-{lang}.php’, ‘{taxonomy}-{term_slug}-{lang}.php’, ‘{taxonomy}-{lang}-{term_slug}-2.php’, ‘{taxonomy}-{term_slug}-2.php’, ‘{taxonomy}-{lang}.php’, ‘{taxonomy}.php’\n
  • \n
  • Administrators can now edit content that have been already sent to translators.
  • \n
  • Added the ability to set, in the post edit page, an orphan post as source of translated post.
  • \n
\n

Bugs Closed

\n
    \n
  • Admin Strings configured with wpml-config.xml files are properly shown and registered in String Translation
  • \n
  • Removed max length issue in translation editor: is now possible to send content of any length
  • \n
  • Taxonomy Translation doesn’t hang anymore on custom hierarchical taxonomies
  • \n
  • Is now possible to translate content when displaying “All languages”, without facing PHP errors
  • \n
  • Fixed issues on moderated and spam comments that exceed 999 items
  • \n
  • Changed “Parsi” to “Farsi” (as it’s more commonly used) and fixed some language translations in Portuguese
  • \n
  • Deleting attachment from post that are duplicated now deleted the duplicated image as well (if “When deleting a post, delete translations as well” is flagged)
  • \n
  • Translated static front-page with pagination won’t loose the template anymore when clicking on pages
  • \n
  • Reactivating WPML after having added content, will properly set the default language to the orphan content
  • \n
  • SSL support is now properly handled in WPML->Languages and when setting a domain per language
  • \n
  • Empty categories archives does not redirect to the home page anymore
  • \n
  • Menu and Footer language switcher now follow all settings in WPML->Languages
  • \n
  • Post metas are now properly synchronized among duplicated content
  • \n
  • Fixed a compatibility issue with SlideDeck2 that wasn’t retrieving images
  • \n
  • Compatibility with WP-Types repeated fields not being properly copied among translations
  • \n
  • Compatibility issue with bbPress
  • \n
  • Removed warnings and unneeded HTML elements when String Translation is not installed/active
  • \n
  • Duplicated content retains the proper status
  • \n
  • Browser redirect for 2 letters language codes now works as expected
  • \n
  • Menu synchronization now properly fetches translated items
  • \n
  • Menu synchronization copy custom items if String Translation is not active, or WPML default languages is different than String Translation language
  • \n
  • When deleting the original post, the source language of translated content is set to null or to the first available language
  • \n
  • Updated localized strings
  • \n
  • Posts losing they relationship with their translations
  • \n
  • Checks if string is already registered before register string for translation. Fixed because it wasn’t possible to translate plural and singular taxonomy names in Woocommerce Multilingual
  • \n
  • Fixed error when with hierarchical taxonomies and taxonomies with same names of terms.
  • \n
\n

Download and Upgrade

\n

As always, the easiest way to get updates for WPML is via our Installer plugin. You can also download WPML manually from your account page.

\n

How do you like this upgrade? Feedback? Ideas? Suggestions? Leave your comments and we’ll get back to you.

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:74:"http://wpml.org/2014/02/wpml-3-1-performance-boost-admin-permissions/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:2:"61";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:6;a:6:{s:4:"data";s:45:"\n \n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:82:"WooCommerce Tab Manager, Subscription and Table Rate Shipping Compatible with WPML";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:97:"http://wpml.org/2014/02/woocommerce-extensions-wpml-tab-manager-subscription-table-rate-shipping/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:106:"http://wpml.org/2014/02/woocommerce-extensions-wpml-tab-manager-subscription-table-rate-shipping/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 12 Feb 2014 09:42:14 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:22:"Compatibility Bulletin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:34:"Woocommerce compatibility bulletin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:25:"http://wpml.org/?p=336920";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:396:"WooCommerce is an excellent e-commerce plugin for WordPress, but what makes it really great is the wealth of quality extensions. Just like WordPress itself, WooCommerce implements a strong skeleton for e-commerce sites. Different stores need different niche functionality and extensions offer this variety, without leading to features bloat. Today we are happy to announce compatibility […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:9:"Dominykas";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:8787:"

WooCommerce is an excellent e-commerce plugin for WordPress, but what makes it really great is the wealth of quality extensions. Just like WordPress itself, WooCommerce implements a strong skeleton for e-commerce sites. Different stores need different niche functionality and extensions offer this variety, without leading to features bloat.

\n

Today we are happy to announce compatibility with four very popular WooCommerce extensions with WPML and WooCommerce Multilingual:

\n\n
\n

WooCommerce Tab Manager

\n

WooCommerce Tab Manager is a popular WooCommerce extension that allows customizing the tabs that show up on the product pages on the front end. It allows you to reorder, remove or rename the built in tabs and also most of the ones added by 3rd party plugins. The Tab Manager also allows creating global tabs that then can be added to more than one product.

\n
Creating tabs

Creating tabs

\n
Tabs on the product front-end

Tabs on the product front-end

\n

WooCommerce Tab Manager works well with WooCommerce Multilingual. The custom tabs added to the products can be translated along with the products using the WooCommerce Multilingual products editor.

\n
Translating tabs

Translating tabs

\n

You can also translate the global tabs. Since these are saved as ‘posts’, you can translate them using the native WPML content translation interface. When you edit a tab, you will see the translation controls.

\n
Translating global tabs

Translating global tabs

\n

Purchase Tab Manager

\n
\n
\n

WooCommerce Subscription

\n

WooCommerce Subscriptions is an WooCommerce extension that offers products and services that require recurring payments in your WooCommerce Store.

\n

This WooCommerce extension is compatible WooCommerce Multilingual (as of version 3.2).

\n

With WooCommerce Multilingual it’s possible to translate the ‘Simple subscription’ products into the other languages of the site (store) but also use different prices and different currencies for the translations of the product.

\n

In order to use multiple currencies for the subscriptions the ‘multi-currency’ mode needs to be enabled in WooCommerce Multilingual from WPML -> WooCommerce Multilingual -> Manage Currencies

\n
Adding subscription prices in the default currency for the subscription product in the default language

Adding subscription prices in the default currency for the subscription product in the default language

\n
Subscription product on a different currency when using multiple currencies

Subscription product on a different currency when using multiple currencies

\n

Purchase Subscription

\n
\n
\n

Table Rate Shipping

\n

Table Rate Shipping is a popular WooCommerce extension that allows to enable and manage advanced shipping options. It allows setting a large number of shipping rates based on different criteria: location, price, weight, or item count.

\n

Here is an example of configuring different shipping rates based on the structure of an order. This is defined for a specific shipping zone previously defined for a set of specific countries.

\n
Configuration for Table Rate Shipping extension

Configuration for Table Rate Shipping extension

\n

WooCommerce Multilingual enables the shipping rates configured with Table Rate Shipping on the translated products too. Moreover, when using WooCommerce Multilingual in the multi-currency mode, the shipping rate totals in the extra currencies are automatically determined and displayed based on the exchange rates defined in the WooCommerce Multilingual Options.

\n
Multiple currencies with Table Rate Shipping

Multiple currencies with Table Rate Shipping

\n

Purchase Table Rate Shipping

\n
\n

Support for the Product Bundles is being added to WooCommerce Multilingual 3.3. If you need it right away, let us know and we’ll send you a development version.

\n
\n

If you want to review the entire Multilingual ready list of themes and plugins you are welcome to view it here:

\n\n

Also, if you are a WooCommerce extensions author and you want to make it compatible with WPML, we welcome you and ready to help: You are welcome to contact us at go global program page.

\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:102:"http://wpml.org/2014/02/woocommerce-extensions-wpml-tab-manager-subscription-table-rate-shipping/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:7;a:6:{s:4:"data";s:42:"\n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:104:"This week compatible – Kodax, Breeze, Universe, 123Medicine and All-in-one WPML Crowdfunding Campaigns";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:42:"http://wpml.org/2014/02/week-compatible-3/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:51:"http://wpml.org/2014/02/week-compatible-3/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 12 Feb 2014 06:49:14 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:22:"Compatibility Bulletin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:25:"http://wpml.org/?p=337829";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:330:"Today we are happy to announce that we have another 4 themes and 1 plugin to add to our compatibility list. The themes are Kodax, Breeze, Universe, 123Medicine and the plugin is All-in-one WPML Crowdfunding Campaigns. If you want to review the entire Multilingual ready list of themes and plugins you are welcome to view […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:9:"Dominykas";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:5824:"

Today we are happy to announce that we have another 4 themes and 1 plugin to add to our compatibility list. The themes are Kodax, Breeze, Universe, 123Medicine and the plugin is All-in-one WPML Crowdfunding Campaigns.

\n

If you want to review the entire Multilingual ready list of themes and plugins you are welcome to view it here:

\n\n

Also, if you’re a theme or a plugin author and you want to make it compatible with WPML, we welcome you and ready to help: You are welcome to contact us at go global program page.

\n

In order to expedite the process we strongly recommend that you test your theme or plugin with our Achieving WPML compatibility for your themes and plugins. It easily tests compatibility with WPML and helps you quickly make your theme or plugin Multilingual Ready.

\n
\n

Kodax theme

\n

\n

Kodax is a clean WordPress theme specially designed for showcasing items in a full screen slider. Some features of Kodax are: 23 custom shortcodes, 4 custom widgets, 3 different blog layouts and 11 different page templates.

\n

Purchase Kodax

\n
\n
\n

Breeze theme

\n

\n

Breeze is a responsive theme designed to make your blogging experience as simple and seamless as possible. Theme has 14 custom widgets most directed at social media (facebook, twitter, google+, instagram, flickr and more), 10+ specially made shortcodes and easily customizable theme options panel.

\n

Purchase Breeze

\n
\n
\n

Universe theme

\n

universe

\n

Universe is a multipurpose WordPress theme with a responsive design. It has 4 different representations of home page (blog, business, law, photos), galleries, image sliders, filterable portfolio, custom posts, custom widgets and more.

\n

Purchase Universe

\n
\n
\n

123Medicine theme

\n

\n

123Medicine is a WooCommerce theme, built on Bootstrap grid system for eCommerce, corporate websites. Theme is compatible with WooCommerce WishLists, WooCommerce Professor Cloud and WooCommerce Compare Products plugins.

\n

Purchase 123Medicine

\n
\n
\n

All-in-one WPML Crowdfunding Campaigns plugin

\n

This plugin supports Franklin crowdfunding theme. If you are running a multi-lingual crowdfunding website and you want a single campaign to have multiple language versions, this is the plugin you need.

\n

Download Crowdfunding Campaigns

\n
\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:47:"http://wpml.org/2014/02/week-compatible-3/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:8;a:6:{s:4:"data";s:42:"\n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:79:"This week compatible – Upstart, Propulsion, Galanty, wpCasa and WP All Import";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:84:"http://wpml.org/2014/02/week-compatible-upstart-propulsion-galanty-wpcasa-wp-import/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:93:"http://wpml.org/2014/02/week-compatible-upstart-propulsion-galanty-wpcasa-wp-import/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Sat, 08 Feb 2014 05:28:54 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:22:"Compatibility Bulletin";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:25:"http://wpml.org/?p=335832";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:308:"Today we are happy to announce that we have another 4 themes and 1 plugin to add to our compatibility list. The themes are Upstart, Propulsion, Galanty, wpCasa and the plugin is WP All Import. If you want to review the entire Multilingual ready list of themes and plugins you are welcome to view it […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:9:"Dominykas";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:5909:"

Today we are happy to announce that we have another 4 themes and 1 plugin to add to our compatibility list. The themes are Upstart, Propulsion, Galanty, wpCasa and the plugin is WP All Import.

\n

If you want to review the entire Multilingual ready list of themes and plugins you are welcome to view it here:

\n\n

Also, if you’re a theme or a plugin author and you want to make it compatible with WPML, we welcome you and ready to help: You are welcome to contact us at go global program page.

\n

In order to expedite the process we strongly recommend that you test your theme or plugin with our Achieving WPML compatibility for your themes and plugins. It easily tests compatibility with WPML and helps you quickly make your theme or plugin Multilingual Ready.

\n
\n

Upstart theme

\n

upstart

\n

Upstart is a clean and simple WordPress theme featuring a flat design. This theme features a quirky full width layout for archive pages immersing visitors in your content. To help you understand how to translate Upstart theme, we wrote a tutorial how to build a multilingual site with Upstart.

\n

Purchase Upstart

\n
\n
\n

Propulsion theme

\n

propulsion

\n

Propulsion is a responsive WordPress theme, suited for users who want to create a business, portfolio or eCommerce site. The theme is built on woocommerce shop plugin as well as the bbPress forum plugin. It comes with a plethora of options so you can modify layout, styling, colors and fonts directly from within the backend.

\n

Purchase Propulsion

\n
\n
\n

Galanty theme

\n

galanty

\n

Galanty is a fullscreen, creative WP Theme with CSS animations, suitable for photographers or creatives. Easy to setup, enhanced with Visual Composer and massive panel. This combination makes creating content extremely easy. It has lots of build in options but it is still easy to use.

\n

Purchase Galanty

\n
\n
\n

wpCasa theme

\n

wpcasa

\n

wpCasa is a WordPress theme framework dedicated to real estate websites. It has nice, clean, minimal design and fully responsive. It comes with a good number of features like: advanced property search, default and grid listing, property slider content, property metaboxes and more.

\n

Purchase wpCasa

\n
\n
\n

WP All Import plugin

\n

WP All Import has a four step import process and an intuitive drag & drop interface that makes complicated import tasks simple and fast. WP All Import can be used for everything from migrating content from a legacy CMS to WordPress to building a store with an affiliate datafeed to displaying live stock quotes or sports scores to building a real estate portal.

\n

Download WP All Import

\n
\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:89:"http://wpml.org/2014/02/week-compatible-upstart-propulsion-galanty-wpcasa-wp-import/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:9;a:6:{s:4:"data";s:42:"\n \n \n \n \n \n \n\n \n \n \n \n \n ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:64:"Maintaining client sites centrally using WPML and Domain Mapping";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:89:"http://wpml.org/2014/02/maintaining-client-sites-centrally-using-wpml-and-domain-mapping/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:98:"http://wpml.org/2014/02/maintaining-client-sites-centrally-using-wpml-and-domain-mapping/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 07 Feb 2014 08:29:22 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:12:"Case studies";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:25:"http://wpml.org/?p=332734";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:383:"Patricia is a WordPress freelancer. She builds and maintains sites for many different clients. To make life easier, Patricia uses a single WordPress install, running a multi-site network. This way, she can update WordPress and plugins once and keep all client sites up-to-date. Working with many European clients, naturally, some of Patricia’s sites are multilingual. […]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:10:"Agnes Bury";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:13488:"

Patricia is a WordPress freelancer. She builds and maintains sites for many different clients. To make life easier, Patricia uses a single WordPress install, running a multi-site network. This way, she can update WordPress and plugins once and keep all client sites up-to-date. Working with many European clients, naturally, some of Patricia’s sites are multilingual.

\n

In this article, Patricia Brun Torre from Switzerland explains how she configures and manages a multisite WordPress network, with WPMUDev Domain Mapping plugin and WPML.

\n

How to manage a network of client sites using Domain Mapping and WPML – the challenges and the idea

\n

Making use of WordPress MultiSite install is a good point to start to manage a network of your clients sites. You will have a separate child site for each of your client’s website. Updating the entire network of client sites now reduces to a single click!

\n

But this also means potential new questions:

\n
    \n
  • Your customers want to see their sites under their original domain names. Theirs, not yours. So instead of your default WordPress MutiliSite client-1.my-main-domain.com subdomain, you client wishes to see client-1-preferable-domain.net.\n
  • \n
  • Some of the sites have to be multilingual. So to make things more complicated, you will have different languages for these different sites on the network.
  • \n
\n

Look at the picture below which summarizes the idea:
\n

WP MultiSite, WPML and domain mapping

WP MultiSite, WPML and domain mapping – the idea

\n

What you will need to handle WPML with different domains in a single WordPress

\n

There are numerous solutions to combine multilingual sites with management of multiple sites from one place using domain mapping.

\n

Below we present both the general idea and a specific solution which has been working well for Patricia.

\n

Network of client sites, WPML and domain mapping – what you will need

\n
    \n
  1. A site with WordPress installation switched to WordPress Multisite mode. This is going to be the main (and only) site to manage all your customers sites. Sounds great? Right, we share your opinion.
  2. \n
  3. A plugin which gives your users the option to map one – or multiple – domains to their own sites, example:\n
      \n
    • client-1.my-main-domain.com -> client-1-prefereable-domain.org
    • \n
    • client-2.my-main-domain.com -> client-2-other-domain.com
    • \n
    \n
  4. \n
  5. A plugin for WordPress Multilingual.
  6. \n
\n

WordPress MultiSite, WPML and domain mapping – Patricia’s choice

\n
    \n
  1. WordPress Multisite under virtuaza.net domain\n
  2. WPMUDev Domain Mapping Plugin
  3. \n
  4. WPML plugin for managing sites in different languages
  5. \n
\n

Patricia decided to use this WPMUDev Domain Mapping Premium Plugin because it comes from the same developers as another handy plugin Patricia uses, WPMUDev Multi-Domains, described further, in the last section.

\n

patricia, wp developer Patricia explains: WPMUDev Domain Mapping and WPMUDev Multi-Domains both share and modify wp-content/sunrise.php.

\n

In my opinion this is the reason why it’s safer to have only one developer (WPMUDev) to provide both plugins, compared to use of the popular WordPress MU Domain Mapping (free in wordpress.org repo), which I’m sure would also work very well.

\n

Network of client sites, domain mapping and WPML – how to configure

\n

Here are the steps to be taken to achieve a similar effect Patricia gained:

\n
    \n
  1. Switch your WordPress to WordPress Multisite network.
  2. \n
  3. Install the WPMUDev Domain Mapping plugin at your network level.
  4. \n
  5. Install WPML plugin at your network level.
  6. \n
  7. For each new customer site:\n
      \n
    1. In your network dashboard add a new site. Assuming your main domain is called my-main-domain.com your new child site name will be client-1.my-main-domain.com.
    2. \n
    3. WP child site to customer domain mapping

      WP child site to customer domain mapping

      Let your customer map his/her domains (you can also do it yourself as superadmin). This way your customer will see the website under his/her original domain name (see pictures below, in the next section).\n

      Note. You might need manually set the mapped domain in the network admin dashboard under “Sites”, and replace the default WP MulitiSite domain with your customer real domain.

    4. \n
    5. Let your customer translate the contents using WPML.
    6. \n
    \n
\n

Managing different languages within a single site – how it looks like from a customer point of view

\n

Now let’s see how your WordPress child site looks like from your single customer point of view.

\n

Due to using WPMUdev domain mapping plugin a customer can see his/her site under their real domain (nice name), both within the dashboard and in the front end (look at the URLs in pictures below).

\n

Since your customer can see his/her WordPress site as if it were a single standard WordPress install, there is nothing new in using WPML plugin. It works out of the box.

\n

Below we present pjmartin.ch website, one of Patricia’s clients who uses WPML to present her site in three languages: English, German, French. pjmartin.ch site is accessible both from Patricia’s WP network (by Patricia as a super admin user) and directly by her customer under the nice domain due to domain mapping.

\n
WPML in a customer dashboard (pjmartin.ch)

Using WPML to manage different languages in a customer site (pjmartin.ch dashboard)

\n
Different languages in a customer site (fron-end)

Different languages in a customer site (pjmartin.ch front-end)

\n
\n

Note, now a customer doesn’t have to bother about:

\n
    \n
  • WP updates
  • \n
  • installing, buying and updating plugins
  • \n
  • installing and updating themes
  • \n
\n

Moving a step further – other handy plugins to manage your WordPress Mulitisite network

\n

For all who have liked the approach and taken their appetites for more, Patricia reveals some other interesting plugins which have helped her in better maintaining various customer sites.

\n\n

WPMUDev Multi-Domains

\n

multi domain mapping

multi domain mapping

This plugin allows you to run an unlimited number of different domains from one WordPress Multisite installation.

\n

In practice this means that you can manage your own different domain in one place (from one WordPress) to have them for different purposes. Let’s see an example:

\n
\n
    \n
  • my-business-domain.com – my master domain
  • \n
  • my-customers.net – domains for my customers
  • \n
      \n
    • client-1-my-customers.net maps to -> client-1-prefereable-domain.org (en, de, fr)
    • \n
    • client-2-my-customers.net maps to -> client-2-other-domain.com
    • \n
    \n
  • my-private-domain.com – another domain, for private purposes
  • \n
\n

Now let’s see how it works for Patricia’s case.

\n
    \n
  • virtuaza.net – Patricia’s main domain
  • \n
  • lesforums.ch – some other domain
  • \n
  • lessites.ch – domain for maintaining all customer domains (note, this is the name used before mapping to customer target domain)\n
      \n
    • pjmartin.lessites.ch -> pjmartin.ch
    • \n
    • biengrandir.lessites.ch -> biengrandir.ch
    • \n
    \n
\n

patricia, wp developerPatricia says: lessites.ch is an added domain to virtuaza.net, which allows me to create a customer under lessites.ch instead of virtuaza.net.

\n

I want to keep subsites of virtuaza.net to mine ones only like support.virtuaza.net, etc.\n

\n

WPMUDev Pro Sites

\n

wpmudev pro sites

wpmudev pro sites


\nThis WordPress Plugin lets you create your own profitable site hosting network, like Edublogs.org or WordPress.com. Your users can upgrade their sites and access features like premium themes, plugins, extra storage, domain mapping or removing advertising.

\n

In Patricia’s case Pro Sites plugin allowed to have customers registered on different levels and then to manage themes and plugins per level. See picture on the right.

\n

WPMUDev Branding

\n

Branding Plugin lets you completely revamp the WordPress backend in minutes. Here, it allowed Patricia to remove Permalinks from WordPress Setting menu for her customers sites. This way all customers sites are forced to use the same type of permalinks.

\n

“I like Ultimate Branding as I can make the dashboard a bit less confusing for beginners, and I could add my logo in the admin bar and a customized code in the footer of all subsites. I can even hide the permalinks menu entry if necessary.” Patricia comments.

\n

What is your way to handle WPML and managing different domains?

\n

How do you like Patricia’s approach? Do you think it could also work for you? What is your way to manage WPML and domain mapping from one place? Feel free to share your comment with us.

\n

If there is anything special about your site using WPML, please also let us know. Most interesting cases will be covered in the next articles in this new Case Studies series.

\n

Other articles related to WPML and Domain Mapping

\n\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:94:"http://wpml.org/2014/02/maintaining-client-sites-centrally-using-wpml-and-domain-mapping/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"4";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}}s:27:"http://www.w3.org/2005/Atom";a:1:{s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:3:{s:4:"href";s:21:"http://wpml.org/feed/";s:3:"rel";s:4:"self";s:4:"type";s:19:"application/rss+xml";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:44:"http://purl.org/rss/1.0/modules/syndication/";a:2:{s:12:"updatePeriod";a:1:{i:0;a:5:{s:4:"data";s:6:"hourly";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:15:"updateFrequency";a:1:{i:0;a:5:{s:4:"data";s:1:"1";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}}}}}}}s:4:"type";i:128;s:7:"headers";a:12:{s:4:"date";s:29:"Fri, 28 Feb 2014 11:57:58 GMT";s:6:"server";s:22:"Apache/2.2.22 (Ubuntu)";s:13:"last-modified";s:29:"Fri, 28 Feb 2014 11:54:52 GMT";s:4:"etag";s:28:""bee081-180db-4f3761b075b00"";s:13:"accept-ranges";s:5:"bytes";s:14:"content-length";s:5:"98523";s:4:"vary";s:22:"Accept-Encoding,Cookie";s:12:"x-powered-by";s:20:"W3 Total Cache/0.9.3";s:6:"pragma";s:6:"public";s:13:"cache-control";s:41:"public, must-revalidate, proxy-revalidate";s:10:"connection";s:5:"close";s:12:"content-type";s:24:"text/html; charset=UTF-8";}s:5:"build";s:14:"20130911030210";}', 'no'); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_postmeta` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_postmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `post_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext, + PRIMARY KEY (`meta_id`), + KEY `post_id` (`post_id`), + KEY `meta_key` (`meta_key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=13276 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_postmeta` +-- + +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(1, 2, '_wp_page_template', 'default'), +(8, 3873, '_wp_attached_file', '2012/11/slide_21.jpg'), +(9, 3873, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:940;s:6:"height";i:434;s:4:"file";s:20:"2012/11/slide_21.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:20:"slide_21-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:20:"slide_21-300x138.jpg";s:5:"width";i:300;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:20:"slide_21-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:20:"slide_21-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:20:"slide_21-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:18:"slide_21-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:20:"slide_21-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:20:"slide_21-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:20:"slide_21-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:20:"slide_21-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:20:"slide_21-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:20:"slide_21-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:20:"slide_21-700x434.jpg";s:5:"width";i:700;s:6:"height";i:434;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:18:"slide_21-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:34:"© Luke Beck - ALL RIGHTS RESERVED";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10, 3875, '_wp_attached_file', '2013/10/slide_11.jpg'), +(11, 3875, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:940;s:6:"height";i:434;s:4:"file";s:20:"2013/10/slide_11.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:20:"slide_11-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:20:"slide_11-300x138.jpg";s:5:"width";i:300;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:20:"slide_11-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:20:"slide_11-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:20:"slide_11-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:18:"slide_11-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:20:"slide_11-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:20:"slide_11-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:20:"slide_11-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:20:"slide_11-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:20:"slide_11-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:20:"slide_11-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:20:"slide_11-700x434.jpg";s:5:"width";i:700;s:6:"height";i:434;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:18:"slide_11-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(18, 3890, '_wp_attached_file', '2012/07/blog_61.jpg'), +(19, 3890, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:700;s:6:"height";i:350;s:4:"file";s:19:"2012/07/blog_61.jpg";s:5:"sizes";a:12:{s:9:"thumbnail";a:4:{s:4:"file";s:19:"blog_61-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:19:"blog_61-300x150.jpg";s:5:"width";i:300;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:19:"blog_61-300x350.jpg";s:5:"width";i:300;s:6:"height";i:350;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:19:"blog_61-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:19:"blog_61-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:17:"blog_61-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:19:"blog_61-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:19:"blog_61-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:19:"blog_61-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:19:"blog_61-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:19:"blog_61-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:17:"blog_61-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(13163, 5085, '_menu_item_url', ''), +(13270, 5098, '_wp_attached_file', '2014/02/splash2.jpg'), +(13271, 5098, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1600;s:6:"height";i:700;s:4:"file";s:19:"2014/02/splash2.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:19:"splash2-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:19:"splash2-300x131.jpg";s:5:"width";i:300;s:6:"height";i:131;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:20:"splash2-1024x448.jpg";s:5:"width";i:1024;s:6:"height";i:448;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:19:"splash2-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:19:"splash2-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:19:"splash2-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:17:"splash2-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:19:"splash2-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:19:"splash2-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:19:"splash2-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:19:"splash2-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:19:"splash2-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:19:"splash2-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:19:"splash2-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:17:"splash2-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(34, 3936, '_wp_attached_file', '2013/10/portfolio_61.jpg'), +(35, 3936, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:940;s:6:"height";i:475;s:4:"file";s:24:"2013/10/portfolio_61.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:24:"portfolio_61-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:24:"portfolio_61-300x151.jpg";s:5:"width";i:300;s:6:"height";i:151;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:24:"portfolio_61-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:24:"portfolio_61-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:24:"portfolio_61-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:22:"portfolio_61-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:24:"portfolio_61-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:24:"portfolio_61-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:24:"portfolio_61-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:24:"portfolio_61-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:24:"portfolio_61-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:24:"portfolio_61-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:24:"portfolio_61-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:22:"portfolio_61-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(38, 3978, '_wp_attached_file', '2013/10/bkgd11.jpg'), +(39, 3978, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1000;s:6:"height";i:578;s:4:"file";s:18:"2013/10/bkgd11.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:18:"bkgd11-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:18:"bkgd11-300x173.jpg";s:5:"width";i:300;s:6:"height";i:173;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:18:"bkgd11-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:18:"bkgd11-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:18:"bkgd11-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:16:"bkgd11-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:18:"bkgd11-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:18:"bkgd11-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:18:"bkgd11-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:18:"bkgd11-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:18:"bkgd11-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:18:"bkgd11-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:18:"bkgd11-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:16:"bkgd11-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:34:"© Luke Beck - ALL RIGHTS RESERVED";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(40, 4010, '_wp_attached_file', '2013/10/person1.jpg'), +(41, 4010, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:580;s:6:"height";i:388;s:4:"file";s:19:"2013/10/person1.jpg";s:5:"sizes";a:12:{s:9:"thumbnail";a:4:{s:4:"file";s:19:"person1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:19:"person1-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:19:"person1-300x388.jpg";s:5:"width";i:300;s:6:"height";i:388;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:19:"person1-580x272.jpg";s:5:"width";i:580;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:19:"person1-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:17:"person1-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:19:"person1-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:19:"person1-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:19:"person1-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:19:"person1-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:19:"person1-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:17:"person1-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(42, 1876, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(43, 1876, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(44, 1876, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(45, 1876, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(46, 1877, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(47, 1877, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(48, 1877, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(49, 1877, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(50, 1878, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(51, 1878, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(52, 1878, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(53, 1878, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(54, 1879, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(55, 1879, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(56, 1879, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(57, 1879, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(58, 4053, '_wp_attached_file', '2013/10/elastic11.jpg'), +(59, 4053, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1500;s:6:"height";i:500;s:4:"file";s:21:"2013/10/elastic11.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:21:"elastic11-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:21:"elastic11-300x100.jpg";s:5:"width";i:300;s:6:"height";i:100;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:22:"elastic11-1024x341.jpg";s:5:"width";i:1024;s:6:"height";i:341;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:21:"elastic11-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:21:"elastic11-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:21:"elastic11-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:19:"elastic11-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:21:"elastic11-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:21:"elastic11-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:21:"elastic11-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:21:"elastic11-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:21:"elastic11-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:21:"elastic11-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:21:"elastic11-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:19:"elastic11-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(60, 4054, '_wp_attached_file', '2013/10/elastic21.jpg'), +(61, 4054, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1500;s:6:"height";i:500;s:4:"file";s:21:"2013/10/elastic21.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:21:"elastic21-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:21:"elastic21-300x100.jpg";s:5:"width";i:300;s:6:"height";i:100;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:22:"elastic21-1024x341.jpg";s:5:"width";i:1024;s:6:"height";i:341;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:21:"elastic21-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:21:"elastic21-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:21:"elastic21-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:19:"elastic21-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:21:"elastic21-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:21:"elastic21-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:21:"elastic21-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:21:"elastic21-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:21:"elastic21-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:21:"elastic21-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:21:"elastic21-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:19:"elastic21-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(62, 4069, '_wp_attached_file', '2013/10/ipad1.png'), +(63, 4069, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:500;s:6:"height";i:308;s:4:"file";s:17:"2013/10/ipad1.png";s:5:"sizes";a:12:{s:9:"thumbnail";a:4:{s:4:"file";s:17:"ipad1-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:6:"medium";a:4:{s:4:"file";s:17:"ipad1-300x184.png";s:5:"width";i:300;s:6:"height";i:184;s:9:"mime-type";s:9:"image/png";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:17:"ipad1-300x308.png";s:5:"width";i:300;s:6:"height";i:308;s:9:"mime-type";s:9:"image/png";}s:10:"blog-large";a:4:{s:4:"file";s:17:"ipad1-500x272.png";s:5:"width";i:500;s:6:"height";i:272;s:9:"mime-type";s:9:"image/png";}s:11:"blog-medium";a:4:{s:4:"file";s:17:"ipad1-320x202.png";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:9:"image/png";}s:8:"tabs-img";a:4:{s:4:"file";s:15:"ipad1-52x50.png";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:9:"image/png";}s:11:"related-img";a:4:{s:4:"file";s:17:"ipad1-180x138.png";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:9:"image/png";}s:13:"portfolio-one";a:4:{s:4:"file";s:17:"ipad1-500x272.png";s:5:"width";i:500;s:6:"height";i:272;s:9:"mime-type";s:9:"image/png";}s:13:"portfolio-two";a:4:{s:4:"file";s:17:"ipad1-460x295.png";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:9:"image/png";}s:15:"portfolio-three";a:4:{s:4:"file";s:17:"ipad1-300x214.png";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:9:"image/png";}s:14:"portfolio-four";a:4:{s:4:"file";s:17:"ipad1-220x161.png";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:9:"image/png";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:15:"ipad1-66x66.png";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(64, 4073, '_wp_attached_file', '2013/10/slide_51.jpg'), +(65, 4073, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1700;s:6:"height";i:400;s:4:"file";s:20:"2013/10/slide_51.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:20:"slide_51-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:19:"slide_51-300x70.jpg";s:5:"width";i:300;s:6:"height";i:70;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:21:"slide_51-1024x240.jpg";s:5:"width";i:1024;s:6:"height";i:240;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:20:"slide_51-300x400.jpg";s:5:"width";i:300;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:20:"slide_51-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:20:"slide_51-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:18:"slide_51-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:20:"slide_51-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:20:"slide_51-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:20:"slide_51-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:20:"slide_51-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:20:"slide_51-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:20:"slide_51-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:20:"slide_51-700x400.jpg";s:5:"width";i:700;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:18:"slide_51-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(66, 4074, '_wp_attached_file', '2013/10/slide_31.jpg'), +(67, 4074, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1700;s:6:"height";i:400;s:4:"file";s:20:"2013/10/slide_31.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:20:"slide_31-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:19:"slide_31-300x70.jpg";s:5:"width";i:300;s:6:"height";i:70;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:21:"slide_31-1024x240.jpg";s:5:"width";i:1024;s:6:"height";i:240;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:20:"slide_31-300x400.jpg";s:5:"width";i:300;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:20:"slide_31-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:20:"slide_31-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:18:"slide_31-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:20:"slide_31-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:20:"slide_31-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:20:"slide_31-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:20:"slide_31-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:20:"slide_31-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:20:"slide_31-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:20:"slide_31-700x400.jpg";s:5:"width";i:700;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:18:"slide_31-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:13:"Iakov Kalinin";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(68, 4076, '_wp_attached_file', '2013/10/slide_41.jpg'), +(69, 4076, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:940;s:6:"height";i:450;s:4:"file";s:20:"2013/10/slide_41.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:20:"slide_41-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:20:"slide_41-300x143.jpg";s:5:"width";i:300;s:6:"height";i:143;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:20:"slide_41-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:20:"slide_41-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:20:"slide_41-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:18:"slide_41-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:20:"slide_41-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:20:"slide_41-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:20:"slide_41-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:20:"slide_41-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:20:"slide_41-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:20:"slide_41-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:20:"slide_41-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:18:"slide_41-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(12719, 5068, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1600;s:6:"height";i:1000;s:4:"file";s:58:"2014/02/caballo-yegua-con-su-cria-o-potro-bebe-equinos.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:58:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:58:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-300x187.jpg";s:5:"width";i:300;s:6:"height";i:187;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:59:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-1024x640.jpg";s:5:"width";i:1024;s:6:"height";i:640;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:58:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:58:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:58:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:56:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:58:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:58:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:58:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:58:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:58:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:58:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:58:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:56:"caballo-yegua-con-su-cria-o-potro-bebe-equinos-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(12748, 5073, '_alp_processed', '1393415872'), +(12749, 5073, '_icl_lang_duplicate_of', '4994'), +(12750, 5073, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12751, 5073, 'slide_template', ''), +(12752, 5073, 'pyre_video', ''), +(12753, 5073, 'pyre_full_width', 'no'), +(12754, 5073, 'pyre_sidebar_position', 'default'), +(12755, 5073, 'pyre_fimg_width', ''), +(12756, 5073, 'pyre_fimg_height', ''), +(12757, 5073, 'pyre_image_rollover_icons', 'linkzoom'), +(12758, 5073, 'pyre_link_icon_url', ''), +(12759, 5073, 'pyre_related_posts', 'yes'), +(12760, 5073, 'pyre_slider_type', 'no'), +(12761, 5073, 'pyre_slider', '0'), +(12762, 5073, 'pyre_wooslider', '0'), +(12763, 5073, 'pyre_flexslider', '0'), +(12764, 5073, 'pyre_revslider', '0'), +(12765, 5073, 'pyre_elasticslider', '0'), +(12766, 5073, 'pyre_fallback', ''), +(12767, 5073, 'pyre_page_bg_layout', 'default'), +(12768, 5073, 'pyre_page_bg', ''), +(12769, 5073, 'pyre_page_bg_color', ''), +(12770, 5073, 'pyre_page_bg_full', 'no'), +(12771, 5073, 'pyre_page_bg_repeat', 'repeat'), +(12772, 5073, 'pyre_wide_page_bg', ''), +(12773, 5073, 'pyre_wide_page_bg_color', ''), +(12774, 5073, 'pyre_wide_page_bg_full', 'no'), +(12775, 5073, 'pyre_wide_page_bg_repeat', 'repeat'), +(12776, 5073, 'pyre_header_bg', ''), +(12777, 5073, 'pyre_header_bg_color', ''), +(12778, 5073, 'pyre_header_bg_full', 'no'), +(12779, 5073, 'pyre_header_bg_repeat', 'repeat'), +(12780, 5073, 'pyre_page_title', 'yes'), +(12781, 5073, 'pyre_page_title_text', 'yes'), +(12782, 5073, 'pyre_page_title_custom_text', ''), +(12783, 5073, 'pyre_page_title_custom_subheader', ''), +(12784, 5073, 'pyre_page_title_height', ''), +(12785, 5073, 'pyre_page_title_bar_bg', ''), +(12786, 5073, 'pyre_page_title_bar_bg_retina', ''), +(12787, 5073, 'pyre_page_title_bar_bg_full', 'default'), +(12788, 5073, 'pyre_page_title_bar_bg_color', ''), +(12789, 5073, 'pyre_page_title_bg_parallax', 'default'), +(12790, 5073, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12791, 5073, 'kd_featured-image-2_drg_horse_id', '5000'), +(12792, 5073, 'kd_featured-image-3_drg_horse_id', '5001'), +(12793, 5073, '_thumbnail_id', '5002'), +(12794, 5073, 'kd_featured-image-4_drg_horse_id', '5003'), +(12795, 5074, '_alp_processed', '1393415754'), +(12796, 5074, '_icl_lang_duplicate_of', '4990'), +(12797, 5074, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12798, 5074, 'slide_template', ''), +(12799, 5074, 'pyre_video', ''), +(12800, 5074, 'pyre_full_width', 'no'), +(12801, 5074, 'pyre_sidebar_position', 'default'), +(12802, 5074, 'pyre_fimg_width', ''), +(12803, 5074, 'pyre_fimg_height', ''), +(12804, 5074, 'pyre_image_rollover_icons', 'linkzoom'), +(12805, 5074, 'pyre_link_icon_url', ''), +(12806, 5074, 'pyre_related_posts', 'yes'), +(12807, 5074, 'pyre_slider_type', 'no'), +(12808, 5074, 'pyre_slider', '0'), +(12809, 5074, 'pyre_wooslider', '0'), +(12810, 5074, 'pyre_flexslider', '0'), +(12811, 5074, 'pyre_revslider', '0'), +(12812, 5074, 'pyre_elasticslider', '0'), +(12813, 5074, 'pyre_fallback', ''), +(12814, 5074, 'pyre_page_bg_layout', 'default'), +(12815, 5074, 'pyre_page_bg', ''), +(12816, 5074, 'pyre_page_bg_color', ''), +(12817, 5074, 'pyre_page_bg_full', 'no'), +(12818, 5074, 'pyre_page_bg_repeat', 'repeat'), +(12819, 5074, 'pyre_wide_page_bg', ''), +(12820, 5074, 'pyre_wide_page_bg_color', ''), +(12821, 5074, 'pyre_wide_page_bg_full', 'no'), +(12822, 5074, 'pyre_wide_page_bg_repeat', 'repeat'), +(12823, 5074, 'pyre_header_bg', ''), +(12824, 5074, 'pyre_header_bg_color', ''), +(12825, 5074, 'pyre_header_bg_full', 'no'), +(12826, 5074, 'pyre_header_bg_repeat', 'repeat'), +(12827, 5074, 'pyre_page_title', 'yes'), +(12828, 5074, 'pyre_page_title_text', 'yes'), +(12829, 5074, 'pyre_page_title_custom_text', ''), +(12830, 5074, 'pyre_page_title_custom_subheader', ''), +(12831, 5074, 'pyre_page_title_height', ''), +(12832, 5074, 'pyre_page_title_bar_bg', ''), +(12833, 5074, 'pyre_page_title_bar_bg_retina', ''), +(12834, 5074, 'pyre_page_title_bar_bg_full', 'default'), +(12835, 5074, 'pyre_page_title_bar_bg_color', ''), +(12836, 5074, 'pyre_page_title_bg_parallax', 'default'), +(12837, 5074, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12838, 5074, 'kd_featured-image-2_drg_horse_id', '4992'), +(12839, 5074, '_thumbnail_id', '4995'), +(12840, 5074, 'kd_featured-image-3_drg_horse_id', '4996'), +(12841, 5074, 'kd_featured-image-4_drg_horse_id', '4993'), +(12842, 5074, 'kd_featured-image-5_drg_horse_id', '4997'), +(12843, 5075, '_alp_processed', '1393415371'), +(12844, 5075, '_icl_lang_duplicate_of', '4971'), +(12845, 5075, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12846, 5075, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12847, 5075, 'kd_featured-image-5_drg_horse_id', '4988'), +(12848, 5075, 'kd_featured-image-4_drg_horse_id', '4987'), +(12849, 5075, 'kd_featured-image-3_drg_horse_id', '4986'), +(12850, 5075, 'kd_featured-image-2_drg_horse_id', '4985'), +(12851, 5075, '_thumbnail_id', '4984'), +(12852, 5075, 'pyre_page_title_bg_parallax', 'default'), +(12853, 5075, 'pyre_page_title_bar_bg_color', ''), +(12854, 5075, 'pyre_page_title_bar_bg_full', 'default'), +(12855, 5075, 'pyre_page_title_bar_bg_retina', ''), +(12856, 5075, 'pyre_page_title_bar_bg', ''), +(12857, 5075, 'pyre_page_title_height', ''), +(12858, 5075, 'pyre_page_title_custom_subheader', ''), +(12859, 5075, 'pyre_page_title_custom_text', ''), +(12860, 5075, 'pyre_page_title_text', 'yes'), +(12861, 5075, 'pyre_page_bg', ''), +(12862, 5075, 'pyre_page_bg_layout', 'default'), +(12863, 5075, 'pyre_fallback', ''), +(12864, 5075, 'pyre_elasticslider', '0'), +(12865, 5075, 'pyre_revslider', '0'), +(12866, 5075, 'pyre_flexslider', '0'), +(12867, 5075, 'pyre_wooslider', '0'), +(12868, 5075, 'pyre_slider', '0'), +(12869, 5075, 'pyre_slider_type', 'no'), +(12870, 5075, 'pyre_related_posts', 'yes'), +(12871, 5075, 'pyre_link_icon_url', ''), +(12872, 5075, 'pyre_image_rollover_icons', 'linkzoom'), +(12873, 5075, 'slide_template', ''), +(12874, 5075, 'pyre_page_title', 'yes'), +(12875, 5075, 'pyre_header_bg_repeat', 'repeat'), +(12876, 5075, 'pyre_wide_page_bg', ''), +(12877, 5075, 'pyre_wide_page_bg_color', ''), +(12878, 5075, 'pyre_wide_page_bg_full', 'no'), +(12879, 5075, 'pyre_wide_page_bg_repeat', 'repeat'), +(12880, 5075, 'pyre_header_bg', ''), +(12881, 5075, 'pyre_header_bg_color', ''), +(12882, 5075, 'pyre_header_bg_full', 'no'), +(12883, 5075, 'pyre_page_bg_color', ''), +(12884, 5075, 'pyre_page_bg_full', 'no'), +(12885, 5075, 'pyre_page_bg_repeat', 'repeat'), +(12886, 5075, 'pyre_video', ''), +(12887, 5075, 'pyre_full_width', 'no'), +(12888, 5075, 'pyre_sidebar_position', 'default'), +(12889, 5075, 'pyre_fimg_width', ''), +(12890, 5075, 'pyre_fimg_height', ''), +(12891, 5076, '_alp_processed', '1393415476'), +(12892, 5076, '_icl_lang_duplicate_of', '4970'), +(12893, 5076, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12894, 5076, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12895, 5076, 'kd_featured-image-4_drg_horse_id', '4976'), +(12896, 5076, 'kd_featured-image-3_drg_horse_id', '4977'), +(12897, 5076, 'kd_featured-image-2_drg_horse_id', '4978'), +(12898, 5076, '_thumbnail_id', '4979'), +(12899, 5076, 'pyre_page_title_custom_text', ''), +(12900, 5076, 'pyre_page_title_text', 'yes'), +(12901, 5076, 'pyre_page_title', 'yes'), +(12902, 5076, 'pyre_header_bg_repeat', 'repeat'), +(12903, 5076, 'pyre_header_bg_full', 'no'), +(12904, 5076, 'pyre_header_bg_color', ''), +(12905, 5076, 'pyre_header_bg', ''), +(12906, 5076, 'pyre_wide_page_bg_color', ''), +(12907, 5076, 'pyre_wide_page_bg_full', 'no'), +(12908, 5076, 'pyre_wide_page_bg_repeat', 'repeat'), +(12909, 5076, 'pyre_wide_page_bg', ''), +(12910, 5076, 'pyre_page_bg_repeat', 'repeat'), +(12911, 5076, 'pyre_page_bg_full', 'no'), +(12912, 5076, 'pyre_page_bg_color', ''), +(12913, 5076, 'pyre_page_bg', ''), +(12914, 5076, 'pyre_page_bg_layout', 'default'), +(12915, 5076, 'pyre_fallback', ''), +(12916, 5076, 'pyre_wooslider', '0'), +(12917, 5076, 'pyre_slider', '0'), +(12918, 5076, 'pyre_slider_type', 'no'), +(12919, 5076, 'pyre_related_posts', 'yes'), +(12920, 5076, 'pyre_link_icon_url', ''), +(12921, 5076, 'pyre_image_rollover_icons', 'linkzoom'), +(12922, 5076, 'pyre_full_width', 'no'), +(12923, 5076, 'pyre_video', ''), +(12924, 5076, 'slide_template', ''), +(12925, 5076, 'pyre_elasticslider', '0'), +(12926, 5076, 'pyre_revslider', '0'), +(12927, 5076, 'pyre_flexslider', '0'), +(12928, 5076, 'pyre_fimg_height', ''), +(12929, 5076, 'pyre_fimg_width', ''), +(12930, 5076, 'pyre_sidebar_position', 'default'), +(12931, 5076, 'pyre_page_title_custom_subheader', ''), +(12932, 5076, 'pyre_page_title_height', ''), +(12933, 5076, 'pyre_page_title_bar_bg', ''), +(12934, 5076, 'pyre_page_title_bar_bg_retina', ''), +(12935, 5076, 'pyre_page_title_bar_bg_full', 'default'), +(12936, 5076, 'pyre_page_title_bar_bg_color', ''), +(12937, 5076, 'pyre_page_title_bg_parallax', 'default'), +(12938, 5077, '_alp_processed', '1393412066'), +(12939, 5077, '_icl_lang_duplicate_of', '4955'), +(12940, 5077, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12941, 5077, 'slide_template', ''), +(12942, 5077, 'pyre_video', ''), +(12943, 5077, 'pyre_full_width', 'no'), +(12944, 5077, 'pyre_sidebar_position', 'default'), +(12945, 5077, 'pyre_fimg_width', ''), +(12946, 5077, 'pyre_fimg_height', ''), +(12947, 5077, 'pyre_image_rollover_icons', 'linkzoom'), +(12948, 5077, 'pyre_link_icon_url', ''), +(12949, 5077, 'pyre_related_posts', 'yes'), +(12950, 5077, 'pyre_slider_type', 'no'), +(12951, 5077, 'pyre_slider', '0'), +(12952, 5077, 'pyre_wooslider', '0'), +(12953, 5077, 'pyre_flexslider', '0'), +(12954, 5077, 'pyre_revslider', '0'), +(12955, 5077, 'pyre_elasticslider', '0'), +(12956, 5077, 'pyre_fallback', ''), +(12957, 5077, 'pyre_page_bg_layout', 'default'), +(12958, 5077, 'pyre_page_bg', ''), +(12959, 5077, 'pyre_page_bg_color', ''), +(12960, 5077, 'pyre_page_bg_full', 'no'), +(12961, 5077, 'pyre_page_bg_repeat', 'repeat'), +(12962, 5077, 'pyre_wide_page_bg', ''), +(12963, 5077, 'pyre_wide_page_bg_color', ''), +(12964, 5077, 'pyre_wide_page_bg_full', 'no'), +(12965, 5077, 'pyre_wide_page_bg_repeat', 'repeat'), +(12966, 5077, 'pyre_header_bg', ''), +(12967, 5077, 'pyre_header_bg_color', ''), +(12968, 5077, 'pyre_header_bg_full', 'no'), +(12969, 5077, 'pyre_header_bg_repeat', 'repeat'), +(12970, 5077, 'pyre_page_title', 'yes'), +(12971, 5077, 'pyre_page_title_text', 'yes'), +(12972, 5077, 'pyre_page_title_custom_text', ''), +(12973, 5077, 'pyre_page_title_custom_subheader', ''), +(12974, 5077, 'pyre_page_title_height', ''), +(12975, 5077, 'pyre_page_title_bar_bg', ''), +(12976, 5077, 'pyre_page_title_bar_bg_retina', ''), +(12977, 5077, 'pyre_page_title_bar_bg_full', 'default'), +(12978, 5077, 'pyre_page_title_bar_bg_color', ''), +(12979, 5077, 'pyre_page_title_bg_parallax', 'default'), +(90, 4461, '_menu_item_type', 'custom'), +(91, 4461, '_menu_item_menu_item_parent', '0'), +(92, 4461, '_menu_item_object_id', '4461'), +(93, 4461, '_menu_item_object', 'custom'), +(94, 4461, '_menu_item_target', ''), +(95, 4461, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(96, 4461, '_menu_item_xfn', ''), +(97, 4461, '_menu_item_url', 'http://127.0.0.1:4001/wordpress/contacto/'), +(8041, 4579, '_menu_item_fusion_megamenu_thumbnail', ''), +(8040, 4579, '_menu_item_fusion_megamenu_widget_area', '0'), +(8037, 4471, '_menu_item_fusion_megamenu_widget_area', '0'), +(8038, 4471, '_menu_item_fusion_megamenu_thumbnail', ''), +(8039, 4579, '_menu_item_fusion_megamenu_columns', ''), +(8036, 4471, '_menu_item_fusion_megamenu_columns', ''), +(8035, 4553, '_menu_item_fusion_megamenu_thumbnail', ''), +(8034, 4553, '_menu_item_fusion_megamenu_widget_area', '0'), +(8033, 4553, '_menu_item_fusion_megamenu_columns', ''), +(8030, 4554, '_menu_item_fusion_megamenu_columns', ''), +(8031, 4554, '_menu_item_fusion_megamenu_widget_area', '0'), +(8032, 4554, '_menu_item_fusion_megamenu_thumbnail', ''), +(8029, 4470, '_menu_item_fusion_megamenu_thumbnail', ''), +(8028, 4470, '_menu_item_fusion_megamenu_widget_area', '0'), +(8026, 4469, '_menu_item_fusion_megamenu_thumbnail', ''), +(8027, 4470, '_menu_item_fusion_megamenu_columns', ''), +(8025, 4469, '_menu_item_fusion_megamenu_widget_area', '0'), +(8024, 4469, '_menu_item_fusion_megamenu_columns', 'auto'), +(8388, 4621, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1400;s:6:"height";i:87;s:4:"file";s:25:"2014/01/page_title_bg.png";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:24:"page_title_bg-150x87.png";s:5:"width";i:150;s:6:"height";i:87;s:9:"mime-type";s:9:"image/png";}s:6:"medium";a:4:{s:4:"file";s:24:"page_title_bg-300x18.png";s:5:"width";i:300;s:6:"height";i:18;s:9:"mime-type";s:9:"image/png";}s:5:"large";a:4:{s:4:"file";s:25:"page_title_bg-1024x63.png";s:5:"width";i:1024;s:6:"height";i:63;s:9:"mime-type";s:9:"image/png";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:24:"page_title_bg-300x87.png";s:5:"width";i:300;s:6:"height";i:87;s:9:"mime-type";s:9:"image/png";}s:10:"blog-large";a:4:{s:4:"file";s:24:"page_title_bg-669x87.png";s:5:"width";i:669;s:6:"height";i:87;s:9:"mime-type";s:9:"image/png";}s:11:"blog-medium";a:4:{s:4:"file";s:24:"page_title_bg-320x87.png";s:5:"width";i:320;s:6:"height";i:87;s:9:"mime-type";s:9:"image/png";}s:8:"tabs-img";a:4:{s:4:"file";s:23:"page_title_bg-52x50.png";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:9:"image/png";}s:11:"related-img";a:4:{s:4:"file";s:24:"page_title_bg-180x87.png";s:5:"width";i:180;s:6:"height";i:87;s:9:"mime-type";s:9:"image/png";}s:13:"portfolio-one";a:4:{s:4:"file";s:24:"page_title_bg-540x87.png";s:5:"width";i:540;s:6:"height";i:87;s:9:"mime-type";s:9:"image/png";}s:13:"portfolio-two";a:4:{s:4:"file";s:24:"page_title_bg-460x87.png";s:5:"width";i:460;s:6:"height";i:87;s:9:"mime-type";s:9:"image/png";}s:15:"portfolio-three";a:4:{s:4:"file";s:24:"page_title_bg-300x87.png";s:5:"width";i:300;s:6:"height";i:87;s:9:"mime-type";s:9:"image/png";}s:14:"portfolio-four";a:4:{s:4:"file";s:24:"page_title_bg-220x87.png";s:5:"width";i:220;s:6:"height";i:87;s:9:"mime-type";s:9:"image/png";}s:14:"portfolio-full";a:4:{s:4:"file";s:24:"page_title_bg-940x87.png";s:5:"width";i:940;s:6:"height";i:87;s:9:"mime-type";s:9:"image/png";}s:12:"recent-posts";a:4:{s:4:"file";s:24:"page_title_bg-700x87.png";s:5:"width";i:700;s:6:"height";i:87;s:9:"mime-type";s:9:"image/png";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:23:"page_title_bg-66x66.png";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(139, 191, 'pyre_project_url', 'http://themeforest.net/user/ThemeFusion'), +(140, 191, 'pyre_project_url_text', 'View Project'), +(141, 191, 'pyre_copy_url', 'http://creattica.com'), +(142, 191, 'pyre_copy_url_text', 'From Creattica'), +(143, 191, 'pyre_page_title_custom_subheader', ''), +(144, 191, 'pyre_page_title', 'yes'), +(145, 191, 'pyre_video', ''), +(146, 191, 'pyre_width', 'half'), +(147, 191, 'pyre_video_url', ''), +(148, 191, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(149, 191, 'pyre_fimg_width', ''), +(150, 191, 'pyre_fimg_height', ''), +(151, 191, 'avada_post_views_count', '43'), +(152, 191, 'pyre_page_title_height', ''), +(153, 191, 'pyre_portfolio_width_100', 'no'), +(154, 191, 'pyre_sidebar', 'no'), +(155, 191, 'pyre_sidebar_position', 'default'), +(156, 191, 'pyre_project_desc_title', 'yes'), +(157, 191, 'pyre_project_details', 'yes'), +(158, 191, 'pyre_image_rollover_icons', 'linkzoom'), +(159, 191, 'pyre_link_icon_url', ''), +(160, 191, 'pyre_related_posts', 'yes'), +(161, 191, 'pyre_slider_type', 'no'), +(162, 191, 'pyre_slider', '0'), +(163, 191, 'pyre_wooslider', '0'), +(164, 191, 'pyre_flexslider', '0'), +(165, 191, 'pyre_revslider', '0'), +(166, 191, 'pyre_elasticslider', '0'), +(167, 191, 'pyre_fallback', ''), +(168, 191, 'pyre_page_bg_layout', 'default'), +(169, 191, 'pyre_page_bg', ''), +(170, 191, 'pyre_page_bg_color', ''), +(171, 191, 'pyre_page_bg_full', 'no'), +(172, 191, 'pyre_page_bg_repeat', 'repeat'), +(173, 191, 'pyre_wide_page_bg', ''); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(174, 191, 'pyre_wide_page_bg_color', ''), +(175, 191, 'pyre_wide_page_bg_full', 'no'), +(176, 191, 'pyre_wide_page_bg_repeat', 'repeat'), +(177, 191, 'pyre_header_bg', ''), +(178, 191, 'pyre_header_bg_color', ''), +(179, 191, 'pyre_header_bg_full', 'no'), +(180, 191, 'pyre_header_bg_repeat', 'repeat'), +(181, 191, 'pyre_page_title_text', 'yes'), +(182, 191, 'pyre_page_title_bar_bg', ''), +(183, 191, 'pyre_page_title_bar_bg_retina', ''), +(184, 191, 'pyre_page_title_bar_bg_full', 'no'), +(185, 191, 'pyre_page_title_bar_bg_color', ''), +(186, 191, '_thumbnail_id', '3406'), +(187, 191, 'pyre_project_url', 'http://themeforest.net/user/ThemeFusion'), +(188, 191, 'pyre_project_url_text', 'View Project'), +(189, 191, 'pyre_copy_url', 'http://creattica.com'), +(190, 191, 'pyre_copy_url_text', 'From Creattica'), +(191, 191, 'pyre_page_title_custom_text', ''), +(192, 191, 'pyre_page_title', 'yes'), +(193, 191, 'pyre_video', ''), +(194, 191, 'pyre_width', 'half'), +(195, 191, 'pyre_video_url', ''), +(196, 191, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(197, 191, 'pyre_fimg_width', ''), +(198, 191, 'pyre_fimg_height', ''), +(199, 191, 'pyre_page_title_bg_parallax', 'default'), +(200, 192, 'pyre_project_url', 'http://themeforest.net/user/ThemeFusion'), +(201, 192, 'pyre_project_url_text', 'View Project'), +(202, 192, 'pyre_copy_url', 'http://creattica.com'), +(203, 192, 'pyre_copy_url_text', 'From Creattica'), +(204, 192, 'avada_post_views_count', '458'), +(206, 192, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(207, 192, 'pyre_page_title', 'yes'), +(208, 192, 'pyre_video', ''), +(209, 192, 'pyre_width', 'full'), +(210, 192, 'pyre_video_url', ''), +(211, 192, 'pyre_page_title_custom_subheader', ''), +(212, 192, 'pyre_fimg_width', ''), +(213, 192, 'pyre_fimg_height', ''), +(214, 192, 'pyre_page_title_height', ''), +(215, 192, 'pyre_portfolio_width_100', 'no'), +(216, 192, 'pyre_sidebar', 'no'), +(217, 192, 'pyre_sidebar_position', 'default'), +(218, 192, 'pyre_project_desc_title', 'yes'), +(219, 192, 'pyre_project_details', 'yes'), +(220, 192, 'pyre_image_rollover_icons', 'linkzoom'), +(221, 192, 'pyre_link_icon_url', ''), +(222, 192, 'pyre_related_posts', 'yes'), +(223, 192, 'pyre_slider_type', 'no'), +(224, 192, 'pyre_slider', '0'), +(225, 192, 'pyre_wooslider', '0'), +(226, 192, 'pyre_flexslider', '0'), +(227, 192, 'pyre_revslider', '0'), +(228, 192, 'pyre_elasticslider', '0'), +(229, 192, 'pyre_fallback', ''), +(230, 192, 'pyre_page_bg_layout', 'default'), +(231, 192, 'pyre_page_bg', ''), +(232, 192, 'pyre_page_bg_color', ''), +(233, 192, 'pyre_page_bg_full', 'no'), +(234, 192, 'pyre_page_bg_repeat', 'repeat'), +(235, 192, 'pyre_wide_page_bg', ''), +(236, 192, 'pyre_wide_page_bg_color', ''), +(237, 192, 'pyre_wide_page_bg_full', 'no'), +(238, 192, 'pyre_wide_page_bg_repeat', 'repeat'), +(239, 192, 'pyre_header_bg', ''), +(240, 192, 'pyre_header_bg_color', ''), +(241, 192, 'pyre_header_bg_full', 'no'), +(242, 192, 'pyre_header_bg_repeat', 'repeat'), +(243, 192, 'pyre_page_title_text', 'yes'), +(244, 192, 'pyre_page_title_bar_bg', ''), +(245, 192, 'pyre_page_title_bar_bg_retina', ''), +(246, 192, 'pyre_page_title_bar_bg_full', 'no'), +(247, 192, 'pyre_page_title_bar_bg_color', ''), +(248, 192, 'pyre_project_url', 'http://themeforest.net/user/ThemeFusion'), +(249, 192, 'pyre_project_url_text', 'View Project'), +(250, 192, 'pyre_copy_url', 'http://creattica.com'), +(251, 192, 'pyre_copy_url_text', 'From Creattica'), +(252, 192, 'avada_post_views_count', '0'), +(253, 192, '_thumbnail_id', '3405'), +(254, 192, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(255, 192, 'pyre_page_title', 'yes'), +(256, 192, 'pyre_video', ''), +(257, 192, 'pyre_width', 'full'), +(258, 192, 'pyre_video_url', ''), +(259, 192, 'pyre_page_title_custom_text', ''), +(260, 192, 'pyre_fimg_width', ''), +(261, 192, 'pyre_fimg_height', ''), +(262, 192, 'pyre_page_title_bg_parallax', 'default'), +(264, 193, 'pyre_project_url', 'http://themeforest.net/user/ThemeFusion'), +(265, 193, 'pyre_project_url_text', 'View Project'), +(266, 193, 'pyre_copy_url', 'http://creattica.com'), +(267, 193, 'pyre_copy_url_text', 'From Creattica'), +(268, 193, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(269, 193, 'pyre_page_title', 'yes'), +(270, 193, 'pyre_video', ''), +(271, 193, 'pyre_width', 'full'), +(272, 193, 'pyre_video_url', ''), +(273, 193, 'avada_post_views_count', '43'), +(274, 193, 'pyre_page_title_custom_subheader', ''), +(275, 193, 'pyre_fimg_width', ''), +(276, 193, 'pyre_fimg_height', ''), +(277, 193, 'pyre_page_title_height', ''), +(278, 193, 'pyre_portfolio_width_100', 'no'), +(279, 193, 'pyre_sidebar', 'no'), +(280, 193, 'pyre_sidebar_position', 'default'), +(281, 193, 'pyre_project_desc_title', 'yes'), +(282, 193, 'pyre_project_details', 'yes'), +(283, 193, 'pyre_image_rollover_icons', 'linkzoom'), +(284, 193, 'pyre_link_icon_url', ''), +(285, 193, 'pyre_related_posts', 'yes'), +(286, 193, 'pyre_slider_type', 'no'), +(287, 193, 'pyre_slider', '0'), +(288, 193, 'pyre_wooslider', '0'), +(289, 193, 'pyre_flexslider', '0'), +(290, 193, 'pyre_revslider', '0'), +(291, 193, 'pyre_elasticslider', '0'), +(292, 193, 'pyre_fallback', ''), +(293, 193, 'pyre_page_bg_layout', 'default'), +(294, 193, 'pyre_page_bg', ''), +(295, 193, 'pyre_page_bg_color', ''), +(296, 193, 'pyre_page_bg_full', 'no'), +(297, 193, 'pyre_page_bg_repeat', 'repeat'), +(298, 193, 'pyre_wide_page_bg', ''), +(299, 193, 'pyre_wide_page_bg_color', ''), +(300, 193, 'pyre_wide_page_bg_full', 'no'), +(301, 193, 'pyre_wide_page_bg_repeat', 'repeat'), +(302, 193, 'pyre_header_bg', ''), +(303, 193, 'pyre_header_bg_color', ''), +(304, 193, 'pyre_header_bg_full', 'no'), +(305, 193, 'pyre_header_bg_repeat', 'repeat'), +(306, 193, 'pyre_page_title_text', 'yes'), +(307, 193, 'pyre_page_title_bar_bg', ''), +(308, 193, 'pyre_page_title_bar_bg_retina', ''), +(309, 193, 'pyre_page_title_bar_bg_full', 'no'), +(310, 193, 'pyre_page_title_bar_bg_color', ''), +(311, 193, '_thumbnail_id', '3405'), +(312, 193, 'pyre_project_url', 'http://themeforest.net/user/ThemeFusion'), +(313, 193, 'pyre_project_url_text', 'View Project'), +(314, 193, 'pyre_copy_url', 'http://creattica.com'), +(315, 193, 'pyre_copy_url_text', 'From Creattica'), +(316, 193, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(317, 193, 'pyre_page_title', 'yes'), +(318, 193, 'pyre_video', ''), +(319, 193, 'pyre_width', 'full'), +(320, 193, 'pyre_video_url', ''), +(321, 193, 'pyre_page_title_custom_text', ''), +(322, 193, 'pyre_fimg_width', ''), +(323, 193, 'pyre_fimg_height', ''), +(324, 193, 'pyre_page_title_bg_parallax', 'default'), +(325, 195, 'pyre_page_title_custom_subheader', ''), +(327, 195, 'pyre_project_url', 'http://themeforest.net/user/ThemeFusion'), +(328, 195, 'pyre_project_url_text', 'View Project'), +(329, 195, 'pyre_copy_url', 'http://creattica.com'), +(330, 195, 'pyre_copy_url_text', 'From Creattica'), +(331, 195, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(332, 195, 'pyre_page_title', 'yes'), +(333, 195, 'pyre_video', ''), +(334, 195, 'pyre_width', 'full'), +(335, 195, 'pyre_video_url', ''), +(336, 195, 'avada_post_views_count', '26'), +(337, 195, 'pyre_fimg_width', ''), +(338, 195, 'pyre_fimg_height', ''), +(339, 195, 'pyre_page_title_height', ''), +(340, 195, 'pyre_portfolio_width_100', 'no'), +(341, 195, 'pyre_sidebar', 'no'), +(342, 195, 'pyre_sidebar_position', 'default'), +(343, 195, 'pyre_project_desc_title', 'yes'), +(344, 195, 'pyre_project_details', 'yes'), +(345, 195, 'pyre_image_rollover_icons', 'linkzoom'), +(346, 195, 'pyre_link_icon_url', ''), +(347, 195, 'pyre_related_posts', 'yes'), +(348, 195, 'pyre_slider_type', 'no'), +(349, 195, 'pyre_slider', '0'), +(350, 195, 'pyre_wooslider', '0'), +(351, 195, 'pyre_flexslider', '0'), +(352, 195, 'pyre_revslider', '0'), +(353, 195, 'pyre_elasticslider', '0'), +(354, 195, 'pyre_fallback', ''), +(355, 195, 'pyre_page_bg_layout', 'default'), +(356, 195, 'pyre_page_bg', ''), +(357, 195, 'pyre_page_bg_color', ''), +(358, 195, 'pyre_page_bg_full', 'no'), +(359, 195, 'pyre_page_bg_repeat', 'repeat'), +(360, 195, 'pyre_wide_page_bg', ''), +(361, 195, 'pyre_wide_page_bg_color', ''), +(362, 195, 'pyre_wide_page_bg_full', 'no'), +(363, 195, 'pyre_wide_page_bg_repeat', 'repeat'), +(364, 195, 'pyre_header_bg', ''), +(365, 195, 'pyre_header_bg_color', ''), +(366, 195, 'pyre_header_bg_full', 'no'), +(367, 195, 'pyre_header_bg_repeat', 'repeat'), +(368, 195, 'pyre_page_title_text', 'yes'), +(369, 195, 'pyre_page_title_bar_bg', ''), +(370, 195, 'pyre_page_title_bar_bg_retina', ''), +(371, 195, 'pyre_page_title_bar_bg_full', 'no'), +(372, 195, 'pyre_page_title_bar_bg_color', ''), +(373, 195, 'pyre_page_title_custom_text', ''), +(374, 195, '_thumbnail_id', '3405'), +(375, 195, 'pyre_project_url', 'http://themeforest.net/user/ThemeFusion'), +(376, 195, 'pyre_project_url_text', 'View Project'), +(377, 195, 'pyre_copy_url', 'http://creattica.com'), +(378, 195, 'pyre_copy_url_text', 'From Creattica'), +(379, 195, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(380, 195, 'pyre_page_title', 'yes'), +(381, 195, 'pyre_video', ''), +(382, 195, 'pyre_width', 'full'), +(383, 195, 'pyre_video_url', ''), +(384, 195, 'pyre_fimg_width', ''), +(385, 195, 'pyre_fimg_height', ''), +(386, 195, 'pyre_page_title_bg_parallax', 'default'), +(388, 196, 'pyre_project_url', 'http://themeforest.net/user/ThemeFusion'), +(389, 196, 'pyre_project_url_text', 'View Project'), +(390, 196, 'pyre_copy_url', 'http://creattica.com'), +(391, 196, 'pyre_copy_url_text', 'From Creattica'), +(392, 196, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(393, 196, 'pyre_page_title', 'yes'), +(394, 196, 'pyre_video', ''), +(395, 196, 'pyre_width', 'half'), +(396, 196, 'pyre_video_url', ''), +(397, 196, 'avada_post_views_count', '231'), +(398, 196, 'pyre_page_title_custom_subheader', ''), +(399, 196, 'pyre_fimg_width', ''), +(400, 196, 'pyre_fimg_height', ''), +(401, 196, 'pyre_page_title_height', ''), +(402, 196, 'pyre_portfolio_width_100', 'no'), +(403, 196, 'pyre_sidebar', 'no'), +(404, 196, 'pyre_sidebar_position', 'default'), +(405, 196, 'pyre_project_desc_title', 'yes'), +(406, 196, 'pyre_project_details', 'yes'), +(407, 196, 'pyre_image_rollover_icons', 'linkzoom'), +(408, 196, 'pyre_link_icon_url', ''), +(409, 196, 'pyre_related_posts', 'yes'), +(410, 196, 'pyre_slider_type', 'no'), +(411, 196, 'pyre_slider', '0'), +(412, 196, 'pyre_wooslider', '0'), +(413, 196, 'pyre_flexslider', '0'), +(414, 196, 'pyre_revslider', '0'), +(415, 196, 'pyre_elasticslider', '0'), +(416, 196, 'pyre_fallback', ''), +(417, 196, 'pyre_page_bg_layout', 'default'), +(418, 196, 'pyre_page_bg', ''), +(419, 196, 'pyre_page_bg_color', ''), +(420, 196, 'pyre_page_bg_full', 'no'), +(421, 196, 'pyre_page_bg_repeat', 'repeat'), +(422, 196, 'pyre_wide_page_bg', ''), +(423, 196, 'pyre_wide_page_bg_color', ''), +(424, 196, 'pyre_wide_page_bg_full', 'no'), +(425, 196, 'pyre_wide_page_bg_repeat', 'repeat'), +(426, 196, 'pyre_header_bg', ''), +(427, 196, 'pyre_header_bg_color', ''), +(428, 196, 'pyre_header_bg_full', 'no'), +(429, 196, 'pyre_header_bg_repeat', 'repeat'), +(430, 196, 'pyre_page_title_text', 'yes'), +(431, 196, 'pyre_page_title_bar_bg', ''), +(432, 196, 'pyre_page_title_bar_bg_retina', ''), +(433, 196, 'pyre_page_title_bar_bg_full', 'no'), +(434, 196, 'pyre_page_title_bar_bg_color', ''), +(435, 196, '_thumbnail_id', '3406'), +(436, 196, 'pyre_project_url', 'http://themeforest.net/user/ThemeFusion'), +(437, 196, 'pyre_project_url_text', 'View Project'), +(438, 196, 'pyre_copy_url', 'http://creattica.com'), +(439, 196, 'pyre_copy_url_text', 'From Creattica'), +(440, 196, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(441, 196, 'pyre_page_title', 'yes'), +(442, 196, 'pyre_video', ''), +(443, 196, 'pyre_width', 'half'), +(444, 196, 'pyre_video_url', ''), +(445, 196, 'pyre_page_title_custom_text', ''), +(446, 196, 'pyre_fimg_width', ''), +(447, 196, 'pyre_fimg_height', ''), +(448, 196, 'pyre_page_title_bg_parallax', 'default'), +(449, 198, 'pyre_project_url', 'http://themeforest.net/user/ThemeFusion'), +(450, 198, 'pyre_project_url_text', 'View Project'), +(451, 198, 'pyre_copy_url', 'http://creattica.com'), +(452, 198, 'pyre_copy_url_text', 'From Creattica'), +(453, 198, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(454, 198, 'avada_post_views_count', '64'), +(455, 198, 'pyre_page_title', 'yes'), +(456, 198, 'pyre_video', ''), +(457, 198, 'pyre_fimg_width', ''), +(458, 198, 'pyre_fimg_height', ''), +(460, 198, 'pyre_width', 'full'), +(461, 198, 'pyre_video_url', 'http://vimeo.com/8245346'), +(462, 198, 'pyre_portfolio_width_100', 'no'), +(463, 198, 'pyre_sidebar', 'no'), +(464, 198, 'pyre_sidebar_position', 'default'), +(465, 198, 'pyre_project_desc_title', 'yes'), +(466, 198, 'pyre_project_details', 'yes'), +(467, 198, 'pyre_image_rollover_icons', 'linkzoom'), +(468, 198, 'pyre_link_icon_url', ''), +(469, 198, 'pyre_related_posts', 'yes'), +(470, 198, 'pyre_slider_type', 'no'), +(471, 198, 'pyre_slider', '0'), +(472, 198, 'pyre_wooslider', '0'), +(473, 198, 'pyre_flexslider', '0'), +(474, 198, 'pyre_revslider', '0'), +(475, 198, 'pyre_elasticslider', '0'), +(476, 198, 'pyre_fallback', ''), +(477, 198, 'pyre_page_bg_layout', 'default'), +(478, 198, 'pyre_page_bg', ''), +(479, 198, 'pyre_page_bg_color', ''), +(480, 198, 'pyre_page_bg_full', 'no'), +(481, 198, 'pyre_page_bg_repeat', 'repeat'), +(482, 198, 'pyre_wide_page_bg', ''), +(483, 198, 'pyre_wide_page_bg_color', ''), +(484, 198, 'pyre_wide_page_bg_full', 'no'), +(485, 198, 'pyre_wide_page_bg_repeat', 'repeat'), +(486, 198, 'pyre_header_bg', ''), +(487, 198, 'pyre_header_bg_color', ''), +(488, 198, 'pyre_header_bg_full', 'no'), +(489, 198, 'pyre_header_bg_repeat', 'repeat'), +(490, 198, 'pyre_page_title_text', 'yes'), +(491, 198, 'pyre_page_title_bar_bg', ''), +(492, 198, 'pyre_page_title_bar_bg_retina', ''), +(493, 198, 'pyre_page_title_bar_bg_full', 'no'), +(494, 198, 'pyre_page_title_bar_bg_color', ''), +(496, 198, 'pyre_project_url', 'http://themeforest.net/user/ThemeFusion'), +(497, 198, 'pyre_project_url_text', 'View Project'), +(498, 198, 'pyre_copy_url', 'http://creattica.com'), +(499, 198, 'pyre_copy_url_text', 'From Creattica'), +(500, 198, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(501, 198, 'pyre_page_title', 'yes'), +(502, 198, 'pyre_video', ''), +(503, 198, 'pyre_fimg_width', ''), +(504, 198, 'pyre_fimg_height', ''), +(505, 198, '_thumbnail_id', '3405'), +(506, 198, 'pyre_width', 'full'), +(507, 198, 'pyre_video_url', 'http://vimeo.com/8245346'), +(508, 198, 'pyre_page_title_custom_text', ''), +(509, 198, 'pyre_page_title_custom_subheader', ''), +(510, 198, 'pyre_page_title_height', ''), +(511, 198, 'pyre_page_title_bg_parallax', 'default'), +(512, 1880, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(513, 1880, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(514, 1880, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(515, 1880, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(516, 1881, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(517, 1881, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(518, 1881, 'avada_post_views_count', '0'), +(519, 1881, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(520, 1881, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(521, 4462, '_menu_item_type', 'custom'), +(522, 4462, '_menu_item_menu_item_parent', '4461'), +(523, 4462, '_menu_item_object_id', '4462'), +(524, 4462, '_menu_item_object', 'custom'), +(525, 4462, '_menu_item_target', ''), +(526, 4462, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(527, 4462, '_menu_item_xfn', ''), +(528, 4462, '_menu_item_url', '#'), +(553, 4466, '_menu_item_type', 'custom'), +(554, 4466, '_menu_item_menu_item_parent', '4462'), +(555, 4466, '_menu_item_object_id', '4466'), +(556, 4466, '_menu_item_object', 'custom'), +(557, 4466, '_menu_item_target', ''), +(558, 4466, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(559, 4466, '_menu_item_xfn', ''), +(560, 4466, '_menu_item_url', '#'), +(561, 4467, '_menu_item_type', 'custom'), +(562, 4467, '_menu_item_menu_item_parent', '0'), +(563, 4467, '_menu_item_object_id', '4467'), +(564, 4467, '_menu_item_object', 'custom'), +(565, 4467, '_menu_item_target', ''), +(566, 4467, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(567, 4467, '_menu_item_xfn', ''), +(568, 4467, '_menu_item_url', 'http://127.0.0.1:4001/wordpress/instalaciones/'), +(577, 4469, '_menu_item_type', 'custom'), +(578, 4469, '_menu_item_menu_item_parent', '0'), +(579, 4469, '_menu_item_object_id', '4469'), +(580, 4469, '_menu_item_object', 'custom'), +(581, 4469, '_menu_item_target', ''), +(582, 4469, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(583, 4469, '_menu_item_xfn', ''), +(584, 4469, '_menu_item_url', 'http://127.0.0.1:4001/wordpress/nosotros/'), +(585, 4470, '_menu_item_type', 'custom'), +(586, 4470, '_menu_item_menu_item_parent', '4469'), +(587, 4470, '_menu_item_object_id', '4470'), +(588, 4470, '_menu_item_object', 'custom'), +(589, 4470, '_menu_item_target', ''), +(590, 4470, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(591, 4470, '_menu_item_xfn', ''), +(592, 4470, '_menu_item_url', '#'), +(593, 4471, '_menu_item_type', 'custom'), +(594, 4471, '_menu_item_menu_item_parent', '4469'), +(595, 4471, '_menu_item_object_id', '4471'), +(596, 4471, '_menu_item_object', 'custom'), +(597, 4471, '_menu_item_target', ''), +(598, 4471, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(599, 4471, '_menu_item_xfn', ''), +(600, 4471, '_menu_item_url', '#'), +(601, 4472, '_menu_item_type', 'custom'), +(602, 4472, '_menu_item_menu_item_parent', '4469'), +(603, 4472, '_menu_item_object_id', '4472'), +(604, 4472, '_menu_item_object', 'custom'), +(605, 4472, '_menu_item_target', ''), +(606, 4472, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(607, 4472, '_menu_item_xfn', ''), +(608, 4472, '_menu_item_url', '#'), +(609, 4473, '_menu_item_type', 'custom'), +(610, 4473, '_menu_item_menu_item_parent', '4469'), +(611, 4473, '_menu_item_object_id', '4473'), +(612, 4473, '_menu_item_object', 'custom'), +(613, 4473, '_menu_item_target', ''), +(614, 4473, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(615, 4473, '_menu_item_xfn', ''), +(616, 4473, '_menu_item_url', '#'), +(617, 4474, 'pyre_portfolio_category', '0'), +(618, 4474, 'pyre_slider', '0'), +(619, 4474, 'pyre_email', ''), +(620, 4474, 'pyre_address', ''), +(621, 4474, 'pyre_phone', ''), +(622, 4474, 'pyre_gmap', ''), +(623, 4474, '_wp_page_template', 'full-width.php'), +(624, 4474, 'avada_post_views_count', '157'), +(625, 4474, 'pyre_page_title', 'no'), +(626, 4474, 'pyre_slider_type', 'rev'), +(627, 4474, 'pyre_wooslider', '0'), +(628, 4474, 'pyre_sidebar_position', 'right'), +(629, 4474, 'pyre_fallback', ''), +(630, 4474, 'pyre_elasticslider', '0'), +(631, 4474, 'pyre_revslider', 'Avada_Full_Width'), +(632, 4474, 'pyre_flexslider', '0'), +(633, 4474, 'pyre_page_bg_color', ''), +(634, 4474, 'pyre_page_bg', ''), +(635, 4474, 'pyre_page_bg_full', 'no'), +(636, 4474, 'pyre_page_bg_repeat', 'repeat'), +(637, 4474, 'pyre_page_title_bar_bg', ''), +(638, 4474, 'pyre_full_width', 'no'), +(639, 4474, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(640, 4474, 'pyre_page_title_bar_bg_color', ''), +(641, 4474, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(642, 4474, 'pyre_portfolio_excerpt', ''), +(643, 4474, 'pyre_portfolio_full_width', 'yes'), +(644, 4474, 'pyre_portfolio_sidebar_position', 'default'), +(645, 4474, 'pyre_portfolio_filters', 'yes'), +(646, 4474, 'pyre_page_bg_layout', 'default'), +(647, 4474, 'pyre_wide_page_bg', ''), +(648, 4474, 'pyre_wide_page_bg_color', ''), +(649, 4474, 'pyre_wide_page_bg_full', 'no'), +(650, 4474, 'pyre_wide_page_bg_repeat', 'repeat'), +(651, 4474, 'pyre_header_bg', ''), +(652, 4474, 'pyre_header_bg_color', ''), +(653, 4474, 'pyre_header_bg_full', 'no'), +(654, 4474, 'pyre_header_bg_repeat', 'repeat'), +(655, 4474, 'pyre_page_title_text', 'yes'), +(656, 4474, 'pyre_page_title_bar_bg_retina', ''), +(657, 4474, 'pyre_page_title_bar_bg_full', 'no'), +(658, 4474, 'pyre_image_rollover_icons', 'linkzoom'), +(659, 4474, 'pyre_link_icon_url', ''), +(660, 4474, 'pyre_portfolio_category', '0'), +(661, 4474, 'pyre_slider', '0'), +(662, 4474, 'pyre_email', ''), +(663, 4474, 'pyre_address', ''), +(664, 4474, 'pyre_phone', ''), +(665, 4474, 'pyre_gmap', ''), +(666, 4474, '_wp_page_template', 'full-width.php'), +(667, 4474, 'avada_post_views_count', '0'), +(668, 4474, 'pyre_page_title', 'no'), +(669, 4474, 'pyre_slider_type', 'no'), +(670, 4474, 'pyre_wooslider', '0'), +(671, 4474, 'pyre_sidebar_position', 'right'), +(672, 4474, 'pyre_fallback', ''), +(673, 4474, 'pyre_elasticslider', '0'), +(674, 4474, 'pyre_revslider', '0'), +(675, 4474, 'pyre_flexslider', '0'), +(676, 4474, 'pyre_page_bg_color', ''), +(677, 4474, 'pyre_page_bg', ''), +(678, 4474, 'pyre_page_bg_full', 'no'), +(679, 4474, 'pyre_page_bg_repeat', 'repeat'), +(680, 4474, 'pyre_page_title_bar_bg', ''), +(681, 4474, 'pyre_full_width', 'no'), +(682, 4474, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(683, 4474, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(684, 4474, 'pyre_page_title_bar_bg_color', ''), +(685, 4475, 'pyre_slider', '0'), +(686, 4475, 'pyre_email', ''), +(687, 4475, 'pyre_address', ''), +(688, 4475, 'pyre_phone', ''), +(689, 4475, 'pyre_gmap', ''), +(690, 4475, '_wp_page_template', 'default'), +(691, 4475, 'pyre_link_icon_url', ''), +(692, 4475, 'pyre_image_rollover_icons', 'linkzoom'), +(693, 4475, 'pyre_page_title_bar_bg_full', 'no'), +(694, 4475, 'pyre_page_title_bar_bg_retina', ''), +(695, 4475, 'pyre_page_title_text', 'yes'), +(696, 4475, 'pyre_header_bg_repeat', 'repeat'), +(697, 4475, 'pyre_header_bg_full', 'no'), +(698, 4475, 'pyre_header_bg_color', ''), +(699, 4475, 'pyre_header_bg', ''), +(700, 4475, 'pyre_wide_page_bg_repeat', 'repeat'), +(701, 4475, 'pyre_wide_page_bg_full', 'no'), +(702, 4475, 'pyre_wide_page_bg_color', ''), +(703, 4475, 'pyre_wide_page_bg', ''), +(704, 4475, 'pyre_page_bg_layout', 'default'), +(705, 4475, 'pyre_portfolio_filters', 'yes'), +(706, 4475, 'pyre_portfolio_sidebar_position', 'default'), +(707, 4475, 'pyre_portfolio_full_width', 'yes'), +(708, 4475, 'pyre_portfolio_excerpt', ''), +(709, 4475, 'pyre_page_title', 'yes'), +(710, 4475, 'pyre_slider_type', 'no'), +(711, 4475, 'pyre_wooslider', '0'), +(712, 4475, 'pyre_fallback', ''), +(713, 4475, 'pyre_sidebar_position', 'right'), +(714, 4475, 'pyre_portfolio_category', '0'), +(715, 4475, 'pyre_flexslider', '0'), +(716, 4475, 'pyre_revslider', '0'), +(717, 4475, 'pyre_page_bg_color', ''), +(718, 4475, 'pyre_page_bg', ''), +(719, 4475, 'pyre_page_bg_full', 'no'), +(720, 4475, 'pyre_page_bg_repeat', 'repeat'), +(721, 4475, 'pyre_page_title_bar_bg', ''), +(722, 4475, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:12:"Blog Sidebar";}'), +(723, 4475, 'pyre_full_width', 'no'), +(724, 4475, 'pyre_elasticslider', '0'), +(725, 4475, 'pyre_page_title_bar_bg_color', ''), +(726, 4475, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(727, 4475, 'pyre_slider', '0'), +(728, 4475, 'pyre_email', ''), +(729, 4475, 'pyre_address', ''), +(730, 4475, 'pyre_phone', ''), +(731, 4475, 'pyre_gmap', ''), +(732, 4475, '_wp_page_template', 'default'), +(733, 4475, 'pyre_link_icon_url', ''), +(734, 4475, 'pyre_image_rollover_icons', 'linkzoom'), +(735, 4475, 'pyre_page_title_bar_bg_full', 'no'), +(736, 4475, 'pyre_page_title_bar_bg_retina', ''), +(737, 4475, 'pyre_page_title_text', 'yes'), +(738, 4475, 'pyre_header_bg_repeat', 'repeat'), +(739, 4475, 'pyre_header_bg_full', 'no'), +(740, 4475, 'pyre_header_bg_color', ''), +(741, 4475, 'pyre_header_bg', ''), +(742, 4475, 'pyre_wide_page_bg_repeat', 'repeat'), +(743, 4475, 'pyre_wide_page_bg_full', 'no'), +(744, 4475, 'pyre_wide_page_bg_color', ''), +(745, 4475, 'pyre_wide_page_bg', ''), +(746, 4475, 'pyre_page_bg_layout', 'default'), +(747, 4475, 'pyre_portfolio_filters', 'yes'), +(748, 4475, 'pyre_portfolio_sidebar_position', 'default'), +(749, 4475, 'pyre_portfolio_full_width', 'yes'), +(750, 4475, 'pyre_portfolio_excerpt', ''), +(751, 4475, 'pyre_page_title', 'yes'), +(752, 4475, 'pyre_slider_type', 'no'), +(753, 4475, 'pyre_wooslider', '0'), +(754, 4475, 'pyre_fallback', ''), +(755, 4475, 'pyre_sidebar_position', 'right'), +(756, 4475, 'pyre_portfolio_category', '0'), +(757, 4475, 'pyre_flexslider', '0'), +(758, 4475, 'pyre_revslider', '0'), +(759, 4475, 'pyre_page_bg_color', ''), +(760, 4475, 'pyre_page_bg', ''), +(761, 4475, 'pyre_page_bg_full', 'no'), +(762, 4475, 'pyre_page_bg_repeat', 'repeat'), +(763, 4475, 'pyre_page_title_bar_bg', ''), +(764, 4475, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:12:"Blog Sidebar";}'), +(765, 4475, 'pyre_full_width', 'no'), +(766, 4475, 'pyre_elasticslider', '0'), +(767, 4475, 'pyre_page_title_bar_bg_color', ''), +(768, 4475, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(769, 33, 'pyre_slider', '0'), +(770, 33, 'pyre_email', ''), +(771, 33, 'pyre_address', ''), +(772, 33, 'pyre_phone', ''), +(773, 33, 'pyre_gmap', ''), +(774, 33, '_wp_page_template', 'full-width.php'), +(775, 33, 'pyre_full_width', 'yes'), +(776, 33, 'avada_post_views_count', '356'), +(777, 33, 'pyre_page_title', 'no'), +(778, 33, 'pyre_slider_type', 'rev'), +(779, 33, 'pyre_wooslider', '0'), +(780, 33, 'pyre_sidebar_position', 'right'), +(781, 33, 'pyre_fallback', ''), +(782, 33, 'pyre_portfolio_category', '13'), +(783, 33, 'pyre_revslider', 'Avada_Full_Width'), +(784, 33, 'pyre_flexslider', '0'), +(785, 33, 'pyre_page_bg_color', ''), +(786, 33, 'pyre_page_bg', ''), +(787, 33, 'pyre_page_bg_full', 'no'), +(788, 33, 'pyre_page_bg_repeat', 'repeat'), +(789, 33, 'pyre_page_title_bar_bg', ''), +(790, 33, 'pyre_page_title_bar_bg_color', ''), +(791, 33, 'pyre_elasticslider', '0'), +(9022, 33, 'slide_template', ''), +(794, 33, 'pyre_portfolio_excerpt', ''), +(795, 33, 'pyre_portfolio_full_width', 'no'), +(796, 33, 'pyre_portfolio_sidebar_position', 'default'), +(797, 33, 'pyre_portfolio_filters', 'yes'), +(798, 33, 'pyre_page_bg_layout', 'default'), +(799, 33, 'pyre_wide_page_bg', ''), +(800, 33, 'pyre_wide_page_bg_color', ''), +(801, 33, 'pyre_wide_page_bg_full', 'no'), +(802, 33, 'pyre_wide_page_bg_repeat', 'repeat'), +(803, 33, 'pyre_header_bg', ''), +(804, 33, 'pyre_header_bg_color', ''), +(805, 33, 'pyre_header_bg_full', 'no'), +(806, 33, 'pyre_header_bg_repeat', 'repeat'), +(807, 33, 'pyre_page_title_text', 'yes'), +(808, 33, 'pyre_page_title_bar_bg_retina', ''), +(809, 33, 'pyre_page_title_bar_bg_full', 'no'), +(810, 33, 'pyre_image_rollover_icons', 'linkzoom'), +(811, 33, 'pyre_link_icon_url', ''), +(812, 33, 'pyre_slider', '0'), +(813, 33, 'pyre_email', ''), +(814, 33, 'pyre_address', ''), +(815, 33, 'pyre_phone', ''), +(816, 33, 'pyre_gmap', ''), +(817, 33, '_wp_page_template', 'full-width.php'), +(818, 33, 'pyre_full_width', 'yes'), +(819, 33, 'pyre_page_title', 'no'), +(820, 33, 'pyre_slider_type', 'rev'), +(821, 33, 'pyre_wooslider', '0'), +(822, 33, 'pyre_sidebar_position', 'right'), +(823, 33, 'pyre_fallback', ''), +(824, 33, 'pyre_portfolio_category', '13'), +(825, 33, 'pyre_revslider', 'Avada_Full_Width'), +(826, 33, 'pyre_flexslider', '0'), +(827, 33, 'pyre_page_bg_color', ''), +(828, 33, 'pyre_page_bg', ''), +(829, 33, 'pyre_page_bg_full', 'no'), +(830, 33, 'pyre_page_bg_repeat', 'repeat'), +(831, 33, 'pyre_page_title_bar_bg', ''), +(832, 33, 'pyre_page_title_bar_bg_color', ''), +(833, 33, 'pyre_elasticslider', '0'), +(9032, 33, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(9033, 33, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(836, 35, 'pyre_slider', '0'), +(837, 35, 'pyre_email', ''), +(838, 35, 'pyre_address', ''), +(839, 35, 'pyre_phone', ''), +(840, 35, 'pyre_gmap', ''), +(841, 35, '_wp_page_template', 'full-width.php'), +(842, 35, 'avada_post_views_count', '124'), +(843, 35, 'pyre_page_title', 'no'), +(844, 35, 'pyre_slider_type', 'rev'), +(845, 35, 'pyre_wooslider', '0'), +(846, 35, 'pyre_sidebar_position', 'right'), +(847, 35, 'pyre_fallback', ''), +(848, 35, 'pyre_portfolio_category', '0'), +(849, 35, 'pyre_revslider', 'Avada_Full_Width'), +(850, 35, 'pyre_wide_page_bg', ''), +(851, 35, 'pyre_page_bg_layout', 'default'), +(852, 35, 'pyre_portfolio_filters', 'yes'), +(853, 35, 'pyre_portfolio_sidebar_position', 'default'), +(854, 35, 'pyre_flexslider', '0'), +(855, 35, 'pyre_page_bg_color', ''), +(856, 35, 'pyre_page_bg', ''), +(857, 35, 'pyre_page_bg_full', 'no'), +(858, 35, 'pyre_page_bg_repeat', 'repeat'), +(859, 35, 'pyre_page_title_bar_bg', ''), +(860, 35, 'pyre_elasticslider', '0'), +(861, 35, 'pyre_link_icon_url', ''), +(862, 35, 'pyre_image_rollover_icons', 'linkzoom'), +(863, 35, 'pyre_page_title_bar_bg_full', 'no'), +(864, 35, 'pyre_page_title_bar_bg_retina', ''), +(865, 35, 'pyre_page_title_text', 'yes'), +(866, 35, 'pyre_header_bg_repeat', 'repeat'), +(867, 35, 'pyre_header_bg_full', 'no'), +(868, 35, 'pyre_header_bg_color', ''), +(869, 35, 'pyre_header_bg', ''), +(870, 35, 'pyre_wide_page_bg_repeat', 'repeat'), +(871, 35, 'pyre_wide_page_bg_full', 'no'), +(872, 35, 'pyre_wide_page_bg_color', ''), +(873, 35, 'pyre_full_width', 'no'), +(874, 35, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(875, 35, 'pyre_portfolio_full_width', 'yes'), +(876, 35, 'pyre_portfolio_excerpt', ''), +(877, 35, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(878, 35, 'pyre_page_title_bar_bg_color', ''), +(879, 35, 'pyre_slider', '0'), +(880, 35, 'pyre_email', ''), +(881, 35, 'pyre_address', ''), +(882, 35, 'pyre_phone', ''), +(883, 35, 'pyre_gmap', ''), +(884, 35, '_wp_page_template', 'full-width.php'), +(885, 35, 'avada_post_views_count', '0'), +(886, 35, 'pyre_page_title', 'no'), +(887, 35, 'pyre_slider_type', 'no'), +(888, 35, 'pyre_wooslider', '0'), +(889, 35, 'pyre_sidebar_position', 'right'), +(890, 35, 'pyre_fallback', ''), +(891, 35, 'pyre_portfolio_category', '0'), +(892, 35, 'pyre_revslider', '0'), +(893, 35, 'pyre_flexslider', '0'), +(894, 35, 'pyre_page_bg_color', ''), +(895, 35, 'pyre_page_bg', ''), +(896, 35, 'pyre_page_bg_full', 'no'), +(897, 35, 'pyre_page_bg_repeat', 'repeat'), +(898, 35, 'pyre_page_title_bar_bg', ''), +(899, 35, 'pyre_elasticslider', '0'), +(900, 35, 'pyre_full_width', 'no'), +(901, 35, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(902, 35, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(903, 35, 'pyre_page_title_bar_bg_color', ''), +(904, 54, 'pyre_slider', '0'), +(905, 54, 'pyre_email', ''), +(906, 54, 'pyre_address', ''), +(907, 54, 'pyre_phone', ''), +(908, 54, 'pyre_gmap', ''), +(909, 54, '_wp_page_template', 'side-navigation.php'), +(910, 54, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(911, 54, 'pyre_page_title', 'yes'), +(912, 54, 'pyre_sidebar_position', 'left'), +(913, 54, 'pyre_slider_type', 'no'), +(914, 54, 'pyre_wooslider', '0'), +(915, 54, 'pyre_fallback', ''), +(916, 54, 'pyre_portfolio_category', '0'), +(917, 54, 'pyre_page_title_bg_parallax', 'default'), +(918, 54, 'pyre_page_title_height', ''), +(919, 54, 'pyre_page_title_custom_subheader', ''), +(920, 54, 'pyre_page_title_custom_text', ''), +(921, 54, 'pyre_flexslider', '0'), +(922, 54, 'pyre_revslider', '0'), +(923, 54, 'pyre_full_width', 'no'), +(924, 54, 'pyre_page_bg_color', ''), +(925, 54, 'pyre_page_bg', ''), +(926, 54, 'pyre_page_bg_full', 'no'), +(927, 54, 'pyre_page_bg_repeat', 'repeat'), +(928, 54, 'pyre_page_title_bar_bg', ''), +(929, 54, 'pyre_page_title_bar_bg_color', ''), +(930, 54, 'pyre_elasticslider', '0'), +(931, 54, 'avada_post_views_count', '29'), +(932, 54, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(933, 54, 'pyre_portfolio_excerpt', ''), +(934, 54, 'pyre_portfolio_full_width', 'yes'), +(935, 54, 'pyre_portfolio_sidebar_position', 'default'), +(936, 54, 'pyre_portfolio_filters', 'yes'), +(937, 54, 'pyre_page_bg_layout', 'default'), +(938, 54, 'pyre_wide_page_bg', ''), +(939, 54, 'pyre_wide_page_bg_color', ''), +(940, 54, 'pyre_wide_page_bg_full', 'no'), +(941, 54, 'pyre_wide_page_bg_repeat', 'repeat'), +(942, 54, 'pyre_header_bg', ''), +(943, 54, 'pyre_header_bg_color', ''), +(944, 54, 'pyre_header_bg_full', 'no'), +(945, 54, 'pyre_header_bg_repeat', 'repeat'), +(946, 54, 'pyre_page_title_text', 'yes'), +(947, 54, 'pyre_page_title_bar_bg_retina', ''), +(948, 54, 'pyre_page_title_bar_bg_full', 'no'), +(949, 54, 'pyre_image_rollover_icons', 'linkzoom'), +(950, 54, 'pyre_link_icon_url', ''), +(951, 69, 'pyre_slider', '0'), +(952, 69, 'pyre_email', ''), +(953, 69, 'pyre_address', ''), +(954, 69, 'pyre_phone', ''), +(955, 69, 'pyre_gmap', ''), +(956, 69, '_wp_page_template', 'full-width.php'), +(957, 69, 'pyre_page_title', 'yes'), +(958, 69, 'pyre_page_bg_repeat', 'repeat'), +(959, 69, 'pyre_slider_type', 'no'), +(960, 69, 'pyre_wooslider', '0'), +(961, 69, 'pyre_fallback', ''), +(962, 69, 'pyre_sidebar_position', 'right'), +(963, 69, 'pyre_portfolio_category', '0'), +(964, 69, 'pyre_revslider', '0'), +(965, 69, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(966, 69, 'pyre_page_title_bar_bg', ''), +(967, 69, 'pyre_page_bg', ''), +(968, 69, 'pyre_page_bg_full', 'no'), +(969, 69, 'pyre_page_bg_color', ''), +(970, 69, 'pyre_full_width', 'no'), +(971, 69, 'pyre_flexslider', '0'), +(972, 69, 'pyre_link_icon_url', ''), +(973, 69, 'pyre_image_rollover_icons', 'linkzoom'), +(974, 69, 'pyre_page_title_bar_bg_full', 'no'), +(975, 69, 'pyre_page_title_bar_bg_retina', ''), +(976, 69, 'pyre_page_title_text', 'yes'), +(977, 69, 'pyre_header_bg_repeat', 'repeat'), +(978, 69, 'pyre_header_bg_full', 'no'), +(979, 69, 'pyre_header_bg_color', ''), +(980, 69, 'pyre_header_bg', ''), +(981, 69, 'pyre_page_title_bar_bg_color', ''), +(982, 69, 'avada_post_views_count', '133'), +(983, 69, 'pyre_wide_page_bg_color', ''), +(984, 69, 'pyre_wide_page_bg', ''), +(985, 69, 'pyre_page_bg_layout', 'default'), +(986, 69, 'pyre_portfolio_filters', 'yes'), +(987, 69, 'pyre_portfolio_sidebar_position', 'default'), +(988, 69, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(989, 69, 'pyre_portfolio_excerpt', ''), +(990, 69, 'pyre_portfolio_full_width', 'yes'), +(991, 69, 'pyre_wide_page_bg_repeat', 'repeat'), +(992, 69, 'pyre_elasticslider', '0'), +(993, 69, 'pyre_wide_page_bg_full', 'no'), +(994, 69, 'pyre_slider', '0'), +(995, 69, 'pyre_email', ''), +(996, 69, 'pyre_address', ''), +(997, 69, 'pyre_phone', ''), +(998, 69, 'pyre_gmap', ''), +(999, 69, '_wp_page_template', 'full-width.php'), +(1000, 69, 'pyre_page_title', 'yes'), +(1001, 69, 'pyre_page_bg_repeat', 'repeat'), +(1002, 69, 'pyre_slider_type', 'no'), +(1003, 69, 'pyre_wooslider', '0'), +(1004, 69, 'pyre_fallback', ''), +(1005, 69, 'pyre_sidebar_position', 'right'), +(1006, 69, 'pyre_portfolio_category', '0'), +(1007, 69, 'pyre_revslider', '0'), +(1008, 69, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1009, 69, 'pyre_page_title_bar_bg', ''), +(1010, 69, 'pyre_page_bg', ''), +(1011, 69, 'pyre_page_bg_full', 'no'), +(1012, 69, 'pyre_page_bg_color', ''), +(1013, 69, 'pyre_full_width', 'no'), +(1014, 69, 'pyre_flexslider', '0'), +(1015, 69, 'pyre_page_title_bar_bg_color', ''), +(1016, 69, 'pyre_elasticslider', '0'), +(1017, 69, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1018, 72, 'pyre_slider', '0'), +(1019, 72, 'pyre_email', ''), +(1020, 72, 'pyre_address', ''), +(1021, 72, 'pyre_phone', ''), +(1022, 72, 'pyre_gmap', ''), +(1023, 72, '_wp_page_template', 'full-width.php'), +(1024, 72, 'pyre_header_bg_repeat', 'repeat'), +(1025, 72, 'pyre_header_bg_full', 'no'), +(1026, 72, 'pyre_header_bg_color', ''), +(1027, 72, 'pyre_header_bg', ''), +(1028, 72, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1029, 72, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1030, 72, 'pyre_page_title', 'yes'), +(1031, 72, 'pyre_wide_page_bg_repeat', 'repeat'), +(1032, 72, 'pyre_wide_page_bg_full', 'no'), +(1033, 72, 'pyre_wide_page_bg_color', ''), +(1034, 72, 'pyre_elasticslider', '0'), +(1035, 72, 'pyre_slider_type', 'no'), +(1036, 72, 'pyre_wooslider', '0'), +(1037, 72, 'pyre_fallback', ''), +(1038, 72, 'pyre_sidebar_position', 'right'), +(1039, 72, 'pyre_wide_page_bg', ''), +(1040, 72, 'pyre_page_bg_layout', 'default'), +(1041, 72, 'pyre_portfolio_category', '0'), +(1042, 72, 'pyre_portfolio_filters', 'yes'), +(1043, 72, 'pyre_portfolio_sidebar_position', 'default'), +(1044, 72, 'pyre_link_icon_url', ''), +(1045, 72, 'pyre_image_rollover_icons', 'linkzoom'), +(1046, 72, 'pyre_portfolio_full_width', 'yes'), +(1047, 72, 'pyre_portfolio_excerpt', ''), +(1048, 72, 'pyre_flexslider', '0'), +(1049, 72, 'pyre_revslider', '0'), +(1050, 72, 'pyre_full_width', 'no'), +(1051, 72, 'pyre_page_bg_color', ''), +(1052, 72, 'pyre_page_bg', ''), +(1053, 72, 'pyre_page_bg_full', 'no'), +(1054, 72, 'pyre_page_bg_repeat', 'repeat'), +(1055, 72, 'pyre_page_title_bar_bg', ''), +(1056, 72, 'pyre_page_title_bar_bg_color', ''), +(1057, 72, 'avada_post_views_count', '103'), +(1058, 72, 'pyre_page_title_bar_bg_full', 'no'), +(1059, 72, 'pyre_page_title_bar_bg_retina', ''), +(1060, 72, 'pyre_page_title_text', 'yes'), +(1061, 72, 'pyre_slider', '0'), +(1062, 72, 'pyre_email', ''), +(1063, 72, 'pyre_address', ''), +(1064, 72, 'pyre_phone', ''), +(1065, 72, 'pyre_gmap', ''), +(1066, 72, '_wp_page_template', 'full-width.php'), +(1067, 72, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1068, 72, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1069, 72, 'pyre_page_title', 'yes'), +(1070, 72, 'pyre_elasticslider', '0'), +(1071, 72, 'pyre_slider_type', 'no'), +(1072, 72, 'pyre_wooslider', '0'), +(1073, 72, 'pyre_fallback', ''), +(1074, 72, 'pyre_sidebar_position', 'right'), +(1075, 72, 'pyre_portfolio_category', '0'), +(1076, 72, 'pyre_flexslider', '0'), +(1077, 72, 'pyre_revslider', '0'), +(1078, 72, 'pyre_full_width', 'no'), +(1079, 72, 'pyre_page_bg_color', ''), +(1080, 72, 'pyre_page_bg', ''), +(1081, 72, 'pyre_page_bg_full', 'no'), +(1082, 72, 'pyre_page_bg_repeat', 'repeat'), +(1083, 72, 'pyre_page_title_bar_bg', ''), +(1084, 72, 'pyre_page_title_bar_bg_color', ''), +(1085, 80, 'pyre_slider', '0'), +(1086, 80, 'pyre_email', ''), +(1087, 80, 'pyre_address', ''), +(1088, 80, 'pyre_phone', ''), +(1089, 80, 'pyre_gmap', ''), +(1090, 80, '_wp_page_template', 'side-navigation.php'), +(1091, 80, 'pyre_sidebar_position', 'left'), +(1092, 80, 'pyre_page_title', 'yes'), +(1093, 80, 'pyre_slider_type', 'no'), +(1094, 80, 'pyre_wooslider', '0'), +(1095, 80, 'pyre_fallback', ''), +(1096, 80, 'pyre_portfolio_category', '0'), +(1097, 80, 'pyre_full_width', 'no'), +(1098, 80, 'pyre_revslider', '0'), +(1099, 80, 'pyre_flexslider', '0'), +(1100, 80, 'pyre_page_bg_color', ''), +(1101, 80, 'pyre_page_bg', ''), +(1102, 80, 'pyre_page_bg_full', 'no'), +(1103, 80, 'pyre_page_bg_repeat', 'repeat'), +(1104, 80, 'pyre_page_title_bar_bg', ''), +(1105, 80, 'pyre_elasticslider', '0'), +(1106, 80, 'pyre_page_title_bar_bg_color', ''), +(1107, 80, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1108, 80, 'avada_post_views_count', '78'), +(1109, 80, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1110, 80, 'pyre_portfolio_excerpt', ''), +(1111, 80, 'pyre_portfolio_full_width', 'yes'), +(1112, 80, 'pyre_portfolio_sidebar_position', 'default'), +(1113, 80, 'pyre_portfolio_filters', 'yes'), +(1114, 80, 'pyre_page_bg_layout', 'default'), +(1115, 80, 'pyre_wide_page_bg', ''), +(1116, 80, 'pyre_wide_page_bg_color', ''), +(1117, 80, 'pyre_wide_page_bg_full', 'no'), +(1118, 80, 'pyre_wide_page_bg_repeat', 'repeat'), +(1119, 80, 'pyre_header_bg', ''), +(1120, 80, 'pyre_header_bg_color', ''), +(1121, 80, 'pyre_header_bg_full', 'no'), +(1122, 80, 'pyre_header_bg_repeat', 'repeat'), +(1123, 80, 'pyre_page_title_text', 'yes'), +(1124, 80, 'pyre_page_title_bar_bg_retina', ''), +(1125, 80, 'pyre_page_title_bar_bg_full', 'no'), +(1126, 80, 'pyre_image_rollover_icons', 'linkzoom'), +(1127, 80, 'pyre_link_icon_url', ''), +(1128, 80, 'pyre_slider', '0'), +(1129, 80, 'pyre_email', ''), +(1130, 80, 'pyre_address', ''), +(1131, 80, 'pyre_phone', ''), +(1132, 80, 'pyre_gmap', ''), +(1133, 80, '_wp_page_template', 'side-navigation.php'), +(1134, 80, 'pyre_sidebar_position', 'left'), +(1135, 80, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1136, 80, 'pyre_page_title', 'yes'), +(1137, 80, 'pyre_slider_type', 'no'), +(1138, 80, 'pyre_wooslider', '0'), +(1139, 80, 'pyre_fallback', ''), +(1140, 80, 'pyre_portfolio_category', '0'), +(1141, 80, 'pyre_full_width', 'no'), +(1142, 80, 'pyre_revslider', '0'), +(1143, 80, 'pyre_flexslider', '0'), +(1144, 80, 'pyre_page_bg_color', ''), +(1145, 80, 'pyre_page_bg', ''), +(1146, 80, 'pyre_page_bg_full', 'no'), +(1147, 80, 'pyre_page_bg_repeat', 'repeat'), +(1148, 80, 'pyre_page_title_bar_bg', ''), +(1149, 80, 'pyre_elasticslider', '0'), +(1150, 80, 'pyre_page_title_bar_bg_color', ''), +(1151, 80, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:10:"No Sidebar";}'), +(1152, 84, 'pyre_slider', '0'), +(1153, 84, 'pyre_email', ''), +(1154, 84, 'pyre_address', ''), +(1155, 84, 'pyre_phone', ''), +(1156, 84, 'pyre_gmap', ''), +(1157, 84, '_wp_page_template', 'full-width.php'), +(1158, 84, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1159, 84, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1160, 84, 'avada_post_views_count', '47'), +(1161, 84, 'pyre_page_title', 'yes'), +(1162, 84, 'pyre_link_icon_url', ''), +(1163, 84, 'pyre_image_rollover_icons', 'linkzoom'), +(1164, 84, 'pyre_page_title_bar_bg_full', 'no'), +(1165, 84, 'pyre_page_title_bar_bg_retina', ''), +(1166, 84, 'pyre_page_title_text', 'yes'), +(1167, 84, 'pyre_header_bg_repeat', 'repeat'), +(1168, 84, 'pyre_header_bg_full', 'no'), +(1169, 84, 'pyre_header_bg_color', ''), +(1170, 84, 'pyre_header_bg', ''), +(1171, 84, 'pyre_wide_page_bg_repeat', 'repeat'), +(1172, 84, 'pyre_wide_page_bg_full', 'no'), +(1173, 84, 'pyre_wide_page_bg_color', ''), +(1174, 84, 'pyre_wide_page_bg', ''), +(1175, 84, 'pyre_page_bg_layout', 'default'), +(1176, 84, 'pyre_portfolio_filters', 'yes'), +(1177, 84, 'pyre_portfolio_excerpt', ''), +(1178, 84, 'pyre_portfolio_full_width', 'yes'), +(1179, 84, 'pyre_portfolio_sidebar_position', 'default'), +(1180, 84, 'pyre_slider_type', 'no'), +(1181, 84, 'pyre_wooslider', '0'), +(1182, 84, 'pyre_flexslider', '0'), +(1183, 84, 'pyre_revslider', '0'), +(1184, 84, 'pyre_elasticslider', '0'), +(1185, 84, 'pyre_fallback', ''), +(1186, 84, 'pyre_full_width', 'no'), +(1187, 84, 'pyre_sidebar_position', 'right'), +(1188, 84, 'pyre_page_bg_color', ''), +(1189, 84, 'pyre_page_bg', ''), +(1190, 84, 'pyre_page_bg_full', 'no'), +(1191, 84, 'pyre_page_bg_repeat', 'repeat'), +(1192, 84, 'pyre_page_title_bar_bg', ''), +(1193, 84, 'pyre_page_title_bar_bg_color', ''), +(1194, 84, 'pyre_slider', '0'), +(1195, 84, 'pyre_email', ''), +(1196, 84, 'pyre_address', ''), +(1197, 84, 'pyre_phone', ''), +(1198, 84, 'pyre_gmap', ''), +(1199, 84, '_wp_page_template', 'full-width.php'), +(1200, 84, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1201, 84, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1202, 84, 'pyre_page_title', 'yes'), +(1203, 84, 'pyre_slider_type', 'no'), +(1204, 84, 'pyre_wooslider', '0'), +(1205, 84, 'pyre_flexslider', '0'), +(1206, 84, 'pyre_revslider', '0'), +(1207, 84, 'pyre_elasticslider', '0'), +(1208, 84, 'pyre_fallback', ''), +(1209, 84, 'pyre_full_width', 'no'), +(1210, 84, 'pyre_sidebar_position', 'right'), +(1211, 84, 'pyre_page_bg_color', ''), +(1212, 84, 'pyre_page_bg', ''), +(1213, 84, 'pyre_page_bg_full', 'no'), +(1214, 84, 'pyre_page_bg_repeat', 'repeat'), +(1215, 84, 'pyre_page_title_bar_bg', ''), +(1216, 84, 'pyre_page_title_bar_bg_color', ''), +(11968, 5009, 'pyre_page_title_bar_bg_full', 'default'), +(11967, 5009, 'pyre_page_title_bar_bg_color', ''), +(11966, 5009, 'pyre_page_title_bar_bg_retina', ''), +(11965, 5009, 'pyre_page_title_bar_bg', ''), +(11964, 5009, 'pyre_page_title_height', ''), +(11963, 5009, 'pyre_page_title_custom_subheader', ''), +(11962, 5009, 'pyre_page_title_custom_text', ''), +(11961, 5009, 'pyre_page_title_text', 'yes'), +(11960, 5009, 'pyre_page_title', 'yes'), +(11959, 5009, 'pyre_header_bg_repeat', 'repeat'), +(11958, 5009, 'pyre_header_bg_full', 'no'), +(11957, 5009, 'pyre_header_bg_color', ''), +(11956, 5009, 'pyre_header_bg', ''), +(11955, 5009, 'pyre_wide_page_bg_repeat', 'repeat'), +(11954, 5009, 'pyre_wide_page_bg_full', 'no'), +(11953, 5009, 'pyre_wide_page_bg_color', ''), +(11952, 5009, 'pyre_wide_page_bg', ''), +(11951, 5009, 'pyre_page_bg_repeat', 'repeat'), +(11950, 5009, 'pyre_page_bg_full', 'no'), +(11949, 5009, 'pyre_page_bg_color', ''), +(11948, 5009, 'pyre_page_bg', ''), +(11947, 5009, 'pyre_page_bg_layout', 'default'), +(11946, 5009, 'pyre_portfolio_filters', 'yes'), +(11945, 5009, 'pyre_portfolio_sidebar_position', 'default'), +(11944, 5009, 'pyre_portfolio_full_width', 'yes'), +(11943, 5009, 'pyre_portfolio_excerpt', ''), +(11942, 5009, 'pyre_hundredp_padding', ''), +(11941, 5009, 'pyre_main_bottom_padding', ''), +(11940, 5009, 'pyre_main_top_padding', ''), +(11939, 5009, 'pyre_sidebar_position', 'default'), +(11938, 5009, 'pyre_full_width', 'no'), +(11937, 5009, 'pyre_fallback', ''), +(11936, 5009, 'pyre_elasticslider', '0'), +(11907, 5007, '_alp_processed', '1393432826'), +(11902, 5007, 'pyre_page_title_bg_parallax', 'default'), +(11901, 5007, 'pyre_page_title_bar_bg_full', 'default'), +(11900, 5007, 'pyre_page_title_bar_bg_color', ''), +(11899, 5007, 'pyre_page_title_bar_bg_retina', ''), +(11898, 5007, 'pyre_page_title_bar_bg', ''), +(11897, 5007, 'pyre_page_title_height', ''), +(11896, 5007, 'pyre_page_title_custom_subheader', ''), +(11895, 5007, 'pyre_page_title_custom_text', ''), +(11894, 5007, 'pyre_page_title_text', 'yes'), +(11893, 5007, 'pyre_page_title', 'yes'), +(11892, 5007, 'pyre_header_bg_repeat', 'repeat'), +(11891, 5007, 'pyre_header_bg_full', 'no'), +(11890, 5007, 'pyre_header_bg_color', ''), +(11889, 5007, 'pyre_header_bg', ''), +(11888, 5007, 'pyre_wide_page_bg_repeat', 'repeat'), +(11887, 5007, 'pyre_wide_page_bg_full', 'no'), +(1289, 94, 'pyre_slider', '0'), +(1290, 94, 'pyre_email', ''), +(1291, 94, 'pyre_address', ''), +(1292, 94, 'pyre_phone', ''), +(1293, 94, 'pyre_gmap', ''), +(1294, 94, '_wp_page_template', 'portfolio-one-column.php'), +(1295, 94, 'pyre_page_title', 'yes'), +(1296, 94, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1297, 94, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1298, 94, 'pyre_slider_type', 'no'), +(1299, 94, 'pyre_wooslider', '0'), +(1300, 94, 'pyre_revslider', '0'), +(1301, 94, 'pyre_sidebar_position', 'right'), +(1302, 94, 'pyre_portfolio_category', 'a:1:{i:0;s:1:"0";}'), +(1303, 94, 'pyre_flexslider', '0'), +(1304, 94, 'pyre_page_bg_color', ''), +(1305, 94, 'pyre_page_bg', ''), +(1306, 94, 'pyre_page_bg_full', 'yes'), +(1307, 94, 'pyre_page_bg_repeat', 'no-repeat'), +(1308, 94, 'pyre_page_title_bar_bg', ''), +(1309, 94, 'pyre_fallback', ''), +(1310, 94, 'pyre_portfolio_sidebar_position', 'default'), +(1311, 94, 'pyre_portfolio_full_width', 'yes'), +(1312, 94, 'pyre_portfolio_excerpt', ''), +(1313, 94, 'pyre_elasticslider', '0'), +(1314, 94, 'avada_post_views_count', '158'), +(1315, 94, 'pyre_image_rollover_icons', 'linkzoom'), +(1316, 94, 'pyre_page_title_bar_bg_full', 'no'), +(1317, 94, 'pyre_page_title_bar_bg_color', ''), +(1318, 94, 'pyre_page_title_bar_bg_retina', ''), +(1319, 94, 'pyre_page_title_text', 'yes'), +(1320, 94, 'pyre_header_bg_repeat', 'repeat'), +(1321, 94, 'pyre_header_bg_full', 'no'), +(1322, 94, 'pyre_header_bg_color', ''), +(1323, 94, 'pyre_header_bg', ''), +(1324, 94, 'pyre_wide_page_bg_repeat', 'repeat'), +(1325, 94, 'pyre_wide_page_bg_full', 'no'), +(1326, 94, 'pyre_wide_page_bg_color', ''), +(1327, 94, 'pyre_wide_page_bg', ''), +(1328, 94, 'pyre_page_bg_layout', 'default'), +(1329, 94, 'pyre_portfolio_filters', 'yes'), +(1330, 94, 'pyre_link_icon_url', ''), +(1331, 94, 'pyre_full_width', 'no'), +(1332, 94, 'pyre_slider', '0'), +(1333, 94, 'pyre_email', ''), +(1334, 94, 'pyre_address', ''), +(1335, 94, 'pyre_phone', ''), +(1336, 94, 'pyre_gmap', ''), +(1337, 94, '_wp_page_template', 'portfolio-one-column.php'), +(1338, 94, 'pyre_page_title', 'yes'), +(1339, 94, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1340, 94, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1341, 94, 'pyre_slider_type', 'no'), +(1342, 94, 'pyre_wooslider', '0'), +(1343, 94, 'pyre_revslider', '0'), +(1344, 94, 'pyre_sidebar_position', 'right'), +(1345, 94, 'pyre_portfolio_category', 'a:1:{i:0;s:1:"0";}'), +(1346, 94, 'pyre_flexslider', '0'), +(1347, 94, 'pyre_page_bg_color', ''), +(1348, 94, 'pyre_page_bg', ''), +(1349, 94, 'pyre_page_bg_full', 'yes'), +(1350, 94, 'pyre_page_bg_repeat', 'no-repeat'), +(1351, 94, 'pyre_page_title_bar_bg', ''), +(1352, 94, 'pyre_fallback', ''), +(1353, 94, 'pyre_portfolio_sidebar_position', 'default'), +(1354, 94, 'pyre_portfolio_full_width', 'yes'), +(1355, 94, 'pyre_portfolio_excerpt', ''), +(1356, 94, 'pyre_elasticslider', '0'), +(1357, 94, 'avada_post_views_count', '1'), +(1358, 94, 'pyre_image_rollover_icons', 'linkzoom'), +(1359, 94, 'pyre_page_title_bar_bg_full', 'no'), +(1360, 94, 'pyre_page_title_bar_bg_color', ''), +(1361, 94, 'pyre_page_title_bar_bg_retina', ''), +(1362, 94, 'pyre_page_title_text', 'yes'), +(1363, 94, 'pyre_header_bg_repeat', 'repeat'), +(1364, 94, 'pyre_header_bg_full', 'no'), +(1365, 94, 'pyre_header_bg_color', ''), +(1366, 94, 'pyre_header_bg', ''), +(1367, 94, 'pyre_wide_page_bg_repeat', 'repeat'), +(1368, 94, 'pyre_wide_page_bg_full', 'no'), +(1369, 94, 'pyre_wide_page_bg_color', ''), +(1370, 94, 'pyre_wide_page_bg', ''), +(1371, 94, 'pyre_page_bg_layout', 'default'), +(1372, 94, 'pyre_portfolio_filters', 'yes'), +(1373, 94, 'pyre_link_icon_url', ''), +(1374, 94, 'pyre_full_width', 'no'), +(1375, 96, 'pyre_slider', '0'), +(1376, 96, 'pyre_email', ''), +(1377, 96, 'pyre_address', ''), +(1378, 96, 'pyre_phone', ''), +(1379, 96, 'pyre_gmap', ''), +(1380, 96, '_wp_page_template', 'portfolio-two-column.php'), +(1381, 96, 'pyre_page_title', 'yes'), +(1382, 96, 'pyre_slider_type', 'no'), +(1383, 96, 'pyre_wooslider', '0'), +(1384, 96, 'pyre_flexslider', '0'), +(1385, 96, 'pyre_revslider', '0'), +(1386, 96, 'pyre_sidebar_position', 'right'), +(1387, 96, 'pyre_page_bg_color', ''), +(1388, 96, 'pyre_page_bg', ''), +(1389, 96, 'pyre_page_bg_full', 'no'), +(1390, 96, 'pyre_page_bg_repeat', 'repeat'), +(1391, 96, 'pyre_page_title_bar_bg', ''), +(1392, 96, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1393, 96, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1394, 96, 'pyre_portfolio_category', 'a:1:{i:0;s:1:"0";}'), +(1395, 96, 'avada_post_views_count', '95'), +(1396, 96, 'pyre_header_bg_full', 'no'), +(1397, 96, 'pyre_header_bg_color', ''), +(1398, 96, 'pyre_portfolio_sidebar_position', 'default'), +(1399, 96, 'pyre_portfolio_full_width', 'yes'), +(1400, 96, 'pyre_portfolio_excerpt', ''), +(1401, 96, 'pyre_full_width', 'no'), +(1402, 96, 'pyre_fallback', ''), +(1403, 96, 'pyre_elasticslider', '0'), +(1404, 96, 'pyre_portfolio_filters', 'yes'), +(1405, 96, 'pyre_link_icon_url', ''), +(1406, 96, 'pyre_image_rollover_icons', 'linkzoom'), +(1407, 96, 'pyre_page_title_bar_bg_full', 'no'), +(1408, 96, 'pyre_page_title_bar_bg_color', ''), +(1409, 96, 'pyre_page_title_bar_bg_retina', ''), +(1410, 96, 'pyre_page_title_text', 'yes'), +(1411, 96, 'pyre_header_bg_repeat', 'repeat'), +(1412, 96, 'pyre_header_bg', ''), +(1413, 96, 'pyre_wide_page_bg_repeat', 'repeat'), +(1414, 96, 'pyre_wide_page_bg_full', 'no'), +(1415, 96, 'pyre_wide_page_bg_color', ''), +(1416, 96, 'pyre_wide_page_bg', ''), +(1417, 96, 'pyre_page_bg_layout', 'default'), +(1418, 96, 'pyre_slider', '0'), +(1419, 96, 'pyre_email', ''), +(1420, 96, 'pyre_address', ''), +(1421, 96, 'pyre_phone', ''), +(1422, 96, 'pyre_gmap', ''), +(1423, 96, '_wp_page_template', 'portfolio-two-column.php'), +(1424, 96, 'pyre_page_title', 'yes'), +(1425, 96, 'pyre_slider_type', 'no'), +(1426, 96, 'pyre_wooslider', '0'), +(1427, 96, 'pyre_flexslider', '0'), +(1428, 96, 'pyre_revslider', '0'), +(1429, 96, 'pyre_sidebar_position', 'right'), +(1430, 96, 'pyre_page_bg_color', ''), +(1431, 96, 'pyre_page_bg', ''), +(1432, 96, 'pyre_page_bg_full', 'no'), +(1433, 96, 'pyre_page_bg_repeat', 'repeat'), +(1434, 96, 'pyre_page_title_bar_bg', ''), +(1435, 96, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1436, 96, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1437, 96, 'pyre_portfolio_category', 'a:1:{i:0;s:1:"0";}'), +(1438, 96, 'avada_post_views_count', '0'), +(1439, 96, 'pyre_header_bg_full', 'no'), +(1440, 96, 'pyre_header_bg_color', ''), +(1441, 96, 'pyre_portfolio_sidebar_position', 'default'), +(1442, 96, 'pyre_portfolio_full_width', 'yes'), +(1443, 96, 'pyre_portfolio_excerpt', ''), +(1444, 96, 'pyre_full_width', 'no'), +(1445, 96, 'pyre_fallback', ''), +(1446, 96, 'pyre_elasticslider', '0'), +(1447, 96, 'pyre_portfolio_filters', 'yes'), +(1448, 96, 'pyre_link_icon_url', ''), +(1449, 96, 'pyre_image_rollover_icons', 'linkzoom'), +(1450, 96, 'pyre_page_title_bar_bg_full', 'no'), +(1451, 96, 'pyre_page_title_bar_bg_color', ''), +(1452, 96, 'pyre_page_title_bar_bg_retina', ''), +(1453, 96, 'pyre_page_title_text', 'yes'), +(1454, 96, 'pyre_header_bg_repeat', 'repeat'), +(1455, 96, 'pyre_header_bg', ''), +(1456, 96, 'pyre_wide_page_bg_repeat', 'repeat'), +(1457, 96, 'pyre_wide_page_bg_full', 'no'), +(1458, 96, 'pyre_wide_page_bg_color', ''); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(1459, 96, 'pyre_wide_page_bg', ''), +(1460, 96, 'pyre_page_bg_layout', 'default'), +(1461, 98, 'pyre_slider', '0'), +(1462, 98, 'pyre_email', ''), +(1463, 98, 'pyre_address', ''), +(1464, 98, 'pyre_phone', ''), +(1465, 98, 'pyre_gmap', ''), +(1466, 98, '_wp_page_template', 'portfolio-three-column.php'), +(1467, 98, 'pyre_page_title', 'yes'), +(1468, 98, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1469, 98, 'avada_post_views_count', '81'), +(1470, 98, 'pyre_link_icon_url', ''), +(1471, 98, 'pyre_image_rollover_icons', 'linkzoom'), +(1472, 98, 'pyre_page_title_bar_bg_full', 'no'), +(1473, 98, 'pyre_page_title_bar_bg_retina', ''), +(1474, 98, 'pyre_page_title_text', 'yes'), +(1475, 98, 'pyre_header_bg_repeat', 'repeat'), +(1476, 98, 'pyre_header_bg_full', 'no'), +(1477, 98, 'pyre_header_bg_color', ''), +(1478, 98, 'pyre_header_bg', ''), +(1479, 98, 'pyre_wide_page_bg_repeat', 'repeat'), +(1480, 98, 'pyre_wide_page_bg_full', 'no'), +(1481, 98, 'pyre_wide_page_bg_color', ''), +(1482, 98, 'pyre_wide_page_bg', ''), +(1483, 98, 'pyre_page_bg_layout', 'default'), +(1484, 98, 'pyre_portfolio_filters', 'yes'), +(1485, 98, 'pyre_portfolio_sidebar_position', 'default'), +(1486, 98, 'pyre_portfolio_full_width', 'yes'), +(1487, 98, 'pyre_portfolio_excerpt', ''), +(1488, 98, 'pyre_elasticslider', '0'), +(1489, 98, 'pyre_slider_type', 'no'), +(1490, 98, 'pyre_wooslider', '0'), +(1491, 98, 'pyre_flexslider', '0'), +(1492, 98, 'pyre_revslider', '0'), +(1493, 98, 'pyre_fallback', ''), +(1494, 98, 'pyre_full_width', 'no'), +(1495, 98, 'pyre_sidebar_position', 'right'), +(1496, 98, 'pyre_page_bg_color', ''), +(1497, 98, 'pyre_page_bg', ''), +(1498, 98, 'pyre_page_bg_full', 'no'), +(1499, 98, 'pyre_page_bg_repeat', 'repeat'), +(1500, 98, 'pyre_page_title_bar_bg', ''), +(1501, 98, 'pyre_page_title_bar_bg_color', ''), +(1502, 98, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1503, 98, 'pyre_slider', '0'), +(1504, 98, 'pyre_email', ''), +(1505, 98, 'pyre_address', ''), +(1506, 98, 'pyre_phone', ''), +(1507, 98, 'pyre_gmap', ''), +(1508, 98, '_wp_page_template', 'portfolio-three-column.php'), +(1509, 98, 'pyre_page_title', 'yes'), +(1510, 98, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1511, 98, 'avada_post_views_count', '0'), +(1512, 98, 'pyre_link_icon_url', ''), +(1513, 98, 'pyre_image_rollover_icons', 'linkzoom'), +(1514, 98, 'pyre_page_title_bar_bg_full', 'no'), +(1515, 98, 'pyre_page_title_bar_bg_retina', ''), +(1516, 98, 'pyre_page_title_text', 'yes'), +(1517, 98, 'pyre_header_bg_repeat', 'repeat'), +(1518, 98, 'pyre_header_bg_full', 'no'), +(1519, 98, 'pyre_header_bg_color', ''), +(1520, 98, 'pyre_header_bg', ''), +(1521, 98, 'pyre_wide_page_bg_repeat', 'repeat'), +(1522, 98, 'pyre_wide_page_bg_full', 'no'), +(1523, 98, 'pyre_wide_page_bg_color', ''), +(1524, 98, 'pyre_wide_page_bg', ''), +(1525, 98, 'pyre_page_bg_layout', 'default'), +(1526, 98, 'pyre_portfolio_filters', 'yes'), +(1527, 98, 'pyre_portfolio_sidebar_position', 'default'), +(1528, 98, 'pyre_portfolio_full_width', 'yes'), +(1529, 98, 'pyre_portfolio_excerpt', ''), +(1530, 98, 'pyre_elasticslider', '0'), +(1531, 98, 'pyre_slider_type', 'no'), +(1532, 98, 'pyre_wooslider', '0'), +(1533, 98, 'pyre_flexslider', '0'), +(1534, 98, 'pyre_revslider', '0'), +(1535, 98, 'pyre_fallback', ''), +(1536, 98, 'pyre_full_width', 'no'), +(1537, 98, 'pyre_sidebar_position', 'right'), +(1538, 98, 'pyre_page_bg_color', ''), +(1539, 98, 'pyre_page_bg', ''), +(1540, 98, 'pyre_page_bg_full', 'no'), +(1541, 98, 'pyre_page_bg_repeat', 'repeat'), +(1542, 98, 'pyre_page_title_bar_bg', ''), +(1543, 98, 'pyre_page_title_bar_bg_color', ''), +(1544, 98, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1545, 100, 'pyre_slider', '0'), +(1546, 100, 'pyre_email', ''), +(1547, 100, 'pyre_address', ''), +(1548, 100, 'pyre_phone', ''), +(1549, 100, 'pyre_gmap', ''), +(1550, 100, '_wp_page_template', 'portfolio-four-column.php'), +(1551, 100, 'avada_post_views_count', '94'), +(1552, 100, 'pyre_page_title', 'yes'), +(1553, 100, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1554, 100, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1555, 100, 'pyre_page_bg_repeat', 'repeat'), +(1556, 100, 'pyre_page_bg_full', 'no'), +(1557, 100, 'pyre_page_bg_color', ''), +(1558, 100, 'pyre_page_bg', ''), +(1559, 100, 'pyre_page_bg_layout', 'default'), +(1560, 100, 'pyre_portfolio_filters', 'yes'), +(1561, 100, 'pyre_portfolio_sidebar_position', 'default'), +(1562, 100, 'pyre_portfolio_full_width', 'yes'), +(1563, 100, 'pyre_portfolio_excerpt', ''), +(1564, 100, 'pyre_sidebar_position', 'default'), +(1565, 100, 'pyre_full_width', 'no'), +(1566, 100, 'pyre_fallback', ''), +(1567, 100, 'pyre_elasticslider', '0'), +(1568, 100, 'pyre_revslider', '0'), +(1569, 100, 'pyre_flexslider', '0'), +(1570, 100, 'pyre_wooslider', '0'), +(1571, 100, 'pyre_slider_type', 'no'), +(1572, 100, 'pyre_page_title_text', 'yes'), +(1573, 100, 'pyre_page_title_bar_bg', ''), +(1574, 100, 'pyre_page_title_bar_bg_retina', ''), +(1575, 100, 'pyre_page_title_bar_bg_color', ''), +(1576, 100, 'pyre_page_title_bar_bg_full', 'no'), +(1577, 100, 'pyre_image_rollover_icons', 'linkzoom'), +(1578, 100, 'pyre_link_icon_url', ''), +(1579, 100, 'pyre_header_bg_repeat', 'repeat'), +(1580, 100, 'pyre_header_bg_full', 'no'), +(1581, 100, 'pyre_header_bg_color', ''), +(1582, 100, 'pyre_header_bg', ''), +(1583, 100, 'pyre_wide_page_bg_repeat', 'repeat'), +(1584, 100, 'pyre_wide_page_bg_full', 'no'), +(1585, 100, 'pyre_wide_page_bg_color', ''), +(1586, 100, 'pyre_wide_page_bg', ''), +(1587, 100, 'pyre_slider', '0'), +(1588, 100, 'pyre_email', ''), +(1589, 100, 'pyre_address', ''), +(1590, 100, 'pyre_phone', ''), +(1591, 100, 'pyre_gmap', ''), +(1592, 100, '_wp_page_template', 'portfolio-four-column.php'), +(1593, 100, 'avada_post_views_count', '2'), +(1594, 100, 'pyre_page_title', 'yes'), +(1595, 100, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1596, 100, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1597, 100, 'pyre_page_bg_repeat', 'repeat'), +(1598, 100, 'pyre_page_bg_full', 'no'), +(1599, 100, 'pyre_page_bg_color', ''), +(1600, 100, 'pyre_page_bg', ''), +(1601, 100, 'pyre_page_bg_layout', 'default'), +(1602, 100, 'pyre_portfolio_filters', 'yes'), +(1603, 100, 'pyre_portfolio_sidebar_position', 'default'), +(1604, 100, 'pyre_portfolio_full_width', 'yes'), +(1605, 100, 'pyre_portfolio_excerpt', ''), +(1606, 100, 'pyre_sidebar_position', 'default'), +(1607, 100, 'pyre_full_width', 'no'), +(1608, 100, 'pyre_fallback', ''), +(1609, 100, 'pyre_elasticslider', '0'), +(1610, 100, 'pyre_revslider', '0'), +(1611, 100, 'pyre_flexslider', '0'), +(1612, 100, 'pyre_wooslider', '0'), +(1613, 100, 'pyre_slider_type', 'no'), +(1614, 100, 'pyre_page_title_text', 'yes'), +(1615, 100, 'pyre_page_title_bar_bg', ''), +(1616, 100, 'pyre_page_title_bar_bg_retina', ''), +(1617, 100, 'pyre_page_title_bar_bg_color', ''), +(1618, 100, 'pyre_page_title_bar_bg_full', 'no'), +(1619, 100, 'pyre_image_rollover_icons', 'linkzoom'), +(1620, 100, 'pyre_link_icon_url', ''), +(1621, 100, 'pyre_header_bg_repeat', 'repeat'), +(1622, 100, 'pyre_header_bg_full', 'no'), +(1623, 100, 'pyre_header_bg_color', ''), +(1624, 100, 'pyre_header_bg', ''), +(1625, 100, 'pyre_wide_page_bg_repeat', 'repeat'), +(1626, 100, 'pyre_wide_page_bg_full', 'no'), +(1627, 100, 'pyre_wide_page_bg_color', ''), +(1628, 100, 'pyre_wide_page_bg', ''), +(1629, 730, 'pyre_portfolio_filters', 'yes'), +(1630, 730, 'pyre_portfolio_sidebar_position', 'default'), +(1631, 730, 'pyre_portfolio_full_width', 'yes'), +(1632, 730, 'pyre_portfolio_excerpt', ''), +(1633, 730, 'pyre_full_width', 'no'), +(1634, 730, 'pyre_fallback', ''), +(1635, 730, 'pyre_elasticslider', '0'), +(1636, 730, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1637, 730, 'avada_post_views_count', '79'), +(1638, 730, 'pyre_wide_page_bg', ''), +(1639, 730, 'pyre_wide_page_bg_full', 'no'), +(1640, 730, 'pyre_page_bg_layout', 'default'), +(1641, 730, 'pyre_wide_page_bg_color', ''), +(1642, 730, 'pyre_wide_page_bg_repeat', 'repeat'), +(1643, 730, 'pyre_header_bg', ''), +(1644, 730, 'pyre_header_bg_color', ''), +(1645, 730, 'pyre_header_bg_full', 'no'), +(1646, 730, 'pyre_header_bg_repeat', 'repeat'), +(1647, 730, 'pyre_page_title_text', 'yes'), +(1648, 730, 'pyre_page_title_bar_bg_retina', ''), +(1649, 730, 'pyre_page_title_bar_bg_color', ''), +(1650, 730, 'pyre_page_title_bar_bg_full', 'no'), +(1651, 730, 'pyre_image_rollover_icons', 'linkzoom'), +(1652, 730, 'pyre_link_icon_url', ''), +(1653, 730, '_wp_page_template', 'default'), +(1654, 730, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:12:"Blog Sidebar";}'), +(1655, 730, 'pyre_gmap', ''), +(1656, 730, 'pyre_sidebar_position', 'right'), +(1657, 730, 'pyre_slider', '0'), +(1658, 730, 'pyre_page_title', 'yes'), +(1659, 730, 'pyre_slider_type', 'no'), +(1660, 730, 'pyre_wooslider', '0'), +(1661, 730, 'pyre_flexslider', '0'), +(1662, 730, 'pyre_revslider', '0'), +(1663, 730, 'pyre_page_bg_color', ''), +(1664, 730, 'pyre_page_bg', ''), +(1665, 730, 'pyre_page_bg_full', 'no'), +(1666, 730, 'pyre_page_bg_repeat', 'repeat'), +(1667, 730, 'pyre_page_title_bar_bg', ''), +(1668, 730, 'pyre_portfolio_filters', 'yes'), +(1669, 730, 'pyre_portfolio_sidebar_position', 'default'), +(1670, 730, 'pyre_portfolio_full_width', 'yes'), +(1671, 730, 'pyre_portfolio_excerpt', ''), +(1672, 730, 'pyre_full_width', 'no'), +(1673, 730, 'pyre_fallback', ''), +(1674, 730, 'pyre_elasticslider', '0'), +(1675, 730, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1676, 730, 'avada_post_views_count', '3'), +(1677, 730, 'pyre_wide_page_bg', ''), +(1678, 730, 'pyre_wide_page_bg_full', 'no'), +(1679, 730, 'pyre_page_bg_layout', 'default'), +(1680, 730, 'pyre_wide_page_bg_color', ''), +(1681, 730, 'pyre_wide_page_bg_repeat', 'repeat'), +(1682, 730, 'pyre_header_bg', ''), +(1683, 730, 'pyre_header_bg_color', ''), +(1684, 730, 'pyre_header_bg_full', 'no'), +(1685, 730, 'pyre_header_bg_repeat', 'repeat'), +(1686, 730, 'pyre_page_title_text', 'yes'), +(1687, 730, 'pyre_page_title_bar_bg_retina', ''), +(1688, 730, 'pyre_page_title_bar_bg_color', ''), +(1689, 730, 'pyre_page_title_bar_bg_full', 'no'), +(1690, 730, 'pyre_image_rollover_icons', 'linkzoom'), +(1691, 730, 'pyre_link_icon_url', ''), +(1692, 730, '_wp_page_template', 'default'), +(1693, 730, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:12:"Blog Sidebar";}'), +(1694, 730, 'pyre_gmap', ''), +(1695, 730, 'pyre_sidebar_position', 'right'), +(1696, 730, 'pyre_slider', '0'), +(1697, 730, 'pyre_page_title', 'yes'), +(1698, 730, 'pyre_slider_type', 'no'), +(1699, 730, 'pyre_wooslider', '0'), +(1700, 730, 'pyre_flexslider', '0'), +(1701, 730, 'pyre_revslider', '0'), +(1702, 730, 'pyre_page_bg_color', ''), +(1703, 730, 'pyre_page_bg', ''), +(1704, 730, 'pyre_page_bg_full', 'no'), +(1705, 730, 'pyre_page_bg_repeat', 'repeat'), +(1706, 730, 'pyre_page_title_bar_bg', ''), +(1707, 923, 'pyre_page_title_text', 'yes'), +(1708, 923, 'pyre_header_bg_repeat', 'repeat'), +(1709, 923, 'avada_post_views_count', '48'), +(1710, 923, 'pyre_page_title', 'no'), +(1711, 923, 'pyre_slider_type', 'flex'), +(1712, 923, 'pyre_slider', '0'), +(1713, 923, 'pyre_wooslider', 'group-1'), +(1714, 923, 'pyre_sidebar_position', 'right'), +(1715, 923, 'pyre_gmap', ''), +(1716, 923, '_wp_page_template', 'full-width.php'), +(1717, 923, 'pyre_fallback', ''), +(1718, 923, 'pyre_full_width', 'no'), +(1719, 923, 'pyre_flexslider', '0'), +(1720, 923, 'pyre_revslider', '0'), +(1721, 923, 'pyre_page_bg_color', ''), +(1722, 923, 'pyre_page_bg', ''), +(1723, 923, 'pyre_page_bg_full', 'yes'), +(1724, 923, 'pyre_page_bg_repeat', 'repeat'), +(1725, 923, 'pyre_page_title_bar_bg', ''), +(1726, 923, 'pyre_header_bg_full', 'no'), +(1727, 923, 'pyre_header_bg_color', ''), +(1728, 923, 'pyre_header_bg', ''), +(1729, 923, 'pyre_wide_page_bg_repeat', 'repeat'), +(1730, 923, 'pyre_wide_page_bg_full', 'no'), +(1731, 923, 'pyre_wide_page_bg_color', ''), +(1732, 923, 'pyre_wide_page_bg', ''), +(1733, 923, 'pyre_page_bg_layout', 'default'), +(1734, 923, 'pyre_portfolio_filters', 'yes'), +(1735, 923, 'pyre_portfolio_sidebar_position', 'default'), +(1736, 923, 'pyre_portfolio_full_width', 'yes'), +(1737, 923, 'pyre_portfolio_excerpt', ''), +(1738, 923, 'pyre_link_icon_url', ''), +(1739, 923, 'pyre_image_rollover_icons', 'linkzoom'), +(1740, 923, 'pyre_page_title_bar_bg_full', 'no'), +(1741, 923, 'pyre_page_title_bar_bg_retina', ''), +(1742, 923, 'pyre_hundredp_padding', ''), +(1743, 923, 'pyre_elasticslider', '0'), +(1744, 923, 'pyre_page_title_bar_bg_color', ''), +(1745, 923, 'pyre_page_title_custom_subheader', ''), +(1746, 923, 'pyre_page_title_custom_text', ''), +(1747, 923, 'pyre_page_title', 'no'), +(1748, 923, 'pyre_slider_type', 'flex'), +(1749, 923, 'pyre_slider', '0'), +(1750, 923, 'pyre_wooslider', 'group-1'), +(1751, 923, 'pyre_sidebar_position', 'right'), +(1752, 923, 'pyre_gmap', ''), +(1753, 923, '_wp_page_template', 'full-width.php'), +(1754, 923, 'pyre_fallback', ''), +(1755, 923, 'pyre_full_width', 'no'), +(1756, 923, 'pyre_flexslider', '0'), +(1757, 923, 'pyre_revslider', '0'), +(1758, 923, 'pyre_page_bg_color', ''), +(1759, 923, 'pyre_page_bg', ''), +(1760, 923, 'pyre_page_bg_full', 'yes'), +(1761, 923, 'pyre_page_bg_repeat', 'repeat'), +(1762, 923, 'pyre_page_title_bar_bg', ''), +(1763, 923, 'pyre_elasticslider', '0'), +(1764, 923, 'pyre_page_title_bar_bg_color', ''), +(1765, 923, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1766, 923, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1767, 923, 'slide_template', ''), +(1768, 923, 'pyre_main_top_padding', ''), +(1769, 923, 'pyre_main_bottom_padding', ''), +(1770, 923, 'pyre_page_title_height', ''), +(1771, 923, 'pyre_page_title_bg_parallax', 'default'), +(1772, 1290, 'avada_post_views_count', '137'), +(1773, 1290, 'pyre_flexslider', '0'), +(1774, 1290, 'pyre_fallback', ''), +(1775, 1290, 'pyre_page_bg_color', ''), +(1776, 1290, 'pyre_page_title', 'no'), +(1777, 1290, 'pyre_slider_type', 'layer'), +(1778, 1290, 'pyre_slider', '1'), +(1779, 1290, 'pyre_wooslider', '0'), +(1780, 1290, 'pyre_revslider', '0'), +(1781, 1290, 'pyre_sidebar_position', 'right'), +(1782, 1290, 'pyre_portfolio_category', '0'), +(1783, 1290, 'pyre_email', ''), +(1784, 1290, 'pyre_gmap', ''), +(1785, 1290, '_wp_page_template', 'full-width.php'), +(1786, 1290, 'pyre_elasticslider', '0'), +(1787, 1290, 'pyre_full_width', 'no'), +(1788, 1290, 'pyre_page_bg', ''), +(1789, 1290, 'pyre_page_bg_full', 'no'), +(1790, 1290, 'pyre_page_bg_repeat', 'repeat'), +(1791, 1290, 'pyre_page_title_bar_bg', ''), +(1792, 1290, 'pyre_page_title_bar_bg_color', ''), +(1793, 1290, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1794, 1290, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1795, 1290, 'pyre_portfolio_excerpt', ''), +(1796, 1290, 'pyre_portfolio_full_width', 'yes'), +(1797, 1290, 'pyre_portfolio_sidebar_position', 'default'), +(1798, 1290, 'pyre_portfolio_filters', 'yes'), +(1799, 1290, 'pyre_page_bg_layout', 'default'), +(1800, 1290, 'pyre_wide_page_bg', ''), +(1801, 1290, 'pyre_wide_page_bg_color', ''), +(1802, 1290, 'pyre_wide_page_bg_full', 'no'), +(1803, 1290, 'pyre_wide_page_bg_repeat', 'repeat'), +(1804, 1290, 'pyre_header_bg', ''), +(1805, 1290, 'pyre_header_bg_color', ''), +(1806, 1290, 'pyre_header_bg_full', 'no'), +(1807, 1290, 'pyre_header_bg_repeat', 'repeat'), +(1808, 1290, 'pyre_page_title_text', 'yes'), +(1809, 1290, 'pyre_page_title_bar_bg_retina', ''), +(1810, 1290, 'pyre_page_title_bar_bg_full', 'no'), +(1811, 1290, 'pyre_image_rollover_icons', 'linkzoom'), +(1812, 1290, 'pyre_link_icon_url', ''), +(1813, 1290, 'pyre_page_title_height', ''), +(1814, 1290, 'pyre_page_title_bg_parallax', 'default'), +(1815, 1290, 'pyre_page_title_custom_text', ''), +(1816, 1290, 'pyre_page_title_custom_subheader', ''), +(1817, 1290, 'slide_template', ''), +(1818, 1290, 'pyre_main_top_padding', ''), +(1819, 1290, 'pyre_main_bottom_padding', ''), +(1820, 1290, 'pyre_hundredp_padding', ''), +(1821, 1298, 'pyre_page_title', 'no'), +(1822, 1298, 'pyre_slider_type', 'rev'), +(1823, 1298, 'pyre_slider', '0'), +(1824, 1298, 'pyre_wooslider', '0'), +(1825, 1298, 'pyre_revslider', 'Avada_Full_Width'), +(1826, 1298, 'pyre_sidebar_position', 'right'), +(1827, 1298, 'pyre_portfolio_category', '0'), +(1828, 1298, 'pyre_email', ''), +(1829, 1298, 'pyre_gmap', ''), +(1830, 1298, '_wp_page_template', 'full-width.php'), +(1831, 1298, 'pyre_full_width', 'no'), +(1832, 1298, 'pyre_flexslider', '0'), +(1833, 1298, 'pyre_fallback', ''), +(1834, 1298, 'pyre_page_bg_color', ''), +(1835, 1298, 'pyre_page_bg', ''), +(1836, 1298, 'pyre_page_bg_full', 'no'), +(1837, 1298, 'pyre_page_bg_repeat', 'repeat'), +(1838, 1298, 'pyre_page_title_bar_bg', ''), +(1839, 1298, 'pyre_page_title_custom_subheader', ''), +(1840, 1298, 'pyre_page_title_custom_text', ''), +(1841, 1298, 'avada_post_views_count', '155'), +(1842, 1298, 'pyre_elasticslider', '0'), +(1843, 1298, 'pyre_page_title_bar_bg_color', ''), +(1844, 1298, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1845, 1298, 'pyre_header_bg_full', 'no'), +(1846, 1298, 'pyre_header_bg_repeat', 'repeat'), +(1847, 1298, 'pyre_page_title_text', 'yes'), +(1848, 1298, 'pyre_page_title_bar_bg_retina', ''), +(1849, 1298, 'pyre_page_title_bar_bg_full', 'no'), +(1850, 1298, 'pyre_image_rollover_icons', 'linkzoom'), +(1851, 1298, 'pyre_link_icon_url', ''), +(1852, 1298, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1853, 1298, 'pyre_header_bg', ''), +(1854, 1298, 'pyre_portfolio_excerpt', ''), +(1855, 1298, 'pyre_portfolio_full_width', 'yes'), +(1856, 1298, 'pyre_portfolio_sidebar_position', 'default'), +(1857, 1298, 'pyre_portfolio_filters', 'yes'), +(1858, 1298, 'pyre_page_bg_layout', 'default'), +(1859, 1298, 'pyre_wide_page_bg', ''), +(1860, 1298, 'pyre_wide_page_bg_color', ''), +(1861, 1298, 'pyre_wide_page_bg_full', 'no'), +(1862, 1298, 'pyre_wide_page_bg_repeat', 'repeat'), +(1863, 1298, 'pyre_header_bg_color', ''), +(1864, 1298, 'pyre_page_title_height', ''), +(1865, 1298, 'pyre_page_title_bg_parallax', 'default'), +(1866, 1298, 'pyre_page_title', 'no'), +(1867, 1298, 'pyre_slider_type', 'no'), +(1868, 1298, 'pyre_slider', '0'), +(1869, 1298, 'pyre_wooslider', '0'), +(1870, 1298, 'pyre_revslider', '0'), +(1871, 1298, 'pyre_sidebar_position', 'right'), +(1872, 1298, 'pyre_portfolio_category', '0'), +(1873, 1298, 'pyre_email', ''), +(1874, 1298, 'pyre_gmap', ''), +(1875, 1298, '_wp_page_template', 'full-width.php'), +(1876, 1298, 'pyre_full_width', 'no'), +(1877, 1298, 'pyre_flexslider', '0'), +(1878, 1298, 'pyre_fallback', ''), +(1879, 1298, 'pyre_page_bg_color', ''), +(1880, 1298, 'pyre_page_bg', ''), +(1881, 1298, 'pyre_page_bg_full', 'no'), +(1882, 1298, 'pyre_page_bg_repeat', 'repeat'), +(1883, 1298, 'pyre_page_title_bar_bg', ''), +(1884, 1298, 'pyre_elasticslider', '0'), +(1885, 1298, 'pyre_page_title_bar_bg_color', ''), +(1886, 1298, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1887, 1298, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1888, 1345, 'avada_post_views_count', '230'), +(1889, 1345, 'pyre_page_title_bar_bg_color', ''), +(1890, 1345, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1891, 1345, 'pyre_page_title', 'no'), +(1892, 1345, 'pyre_slider_type', 'rev'), +(1893, 1345, 'pyre_slider', '0'), +(1894, 1345, 'pyre_wooslider', '0'), +(1895, 1345, 'pyre_revslider', 'Avada_Full_Width'), +(1896, 1345, 'pyre_sidebar_position', 'right'), +(1897, 1345, 'pyre_portfolio_category', '0'), +(1898, 1345, 'pyre_email', ''), +(1899, 1345, 'pyre_gmap', ''), +(1900, 1345, '_wp_page_template', 'full-width.php'), +(1901, 1345, 'pyre_flexslider', '0'), +(1902, 1345, 'pyre_fallback', ''), +(1903, 1345, 'pyre_full_width', 'no'), +(1904, 1345, 'pyre_page_bg_color', ''), +(1905, 1345, 'pyre_page_bg', ''), +(1906, 1345, 'pyre_page_bg_full', 'no'), +(1907, 1345, 'pyre_page_bg_repeat', 'repeat'), +(1908, 1345, 'pyre_page_title_bar_bg', ''), +(1909, 1345, 'pyre_elasticslider', '0'), +(1910, 1345, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1911, 1345, 'pyre_portfolio_excerpt', ''), +(1912, 1345, 'pyre_portfolio_full_width', 'yes'), +(1913, 1345, 'pyre_portfolio_sidebar_position', 'default'), +(1914, 1345, 'pyre_portfolio_filters', 'yes'), +(1915, 1345, 'pyre_page_bg_layout', 'default'), +(1916, 1345, 'pyre_wide_page_bg', ''), +(1917, 1345, 'pyre_wide_page_bg_color', ''), +(1918, 1345, 'pyre_wide_page_bg_full', 'no'), +(1919, 1345, 'pyre_wide_page_bg_repeat', 'repeat'), +(1920, 1345, 'pyre_header_bg', ''), +(1921, 1345, 'pyre_header_bg_color', ''), +(1922, 1345, 'pyre_header_bg_full', 'no'), +(1923, 1345, 'pyre_header_bg_repeat', 'repeat'), +(1924, 1345, 'pyre_page_title_text', 'yes'), +(1925, 1345, 'pyre_page_title_bar_bg_retina', ''), +(1926, 1345, 'pyre_page_title_bar_bg_full', 'no'), +(1927, 1345, 'pyre_image_rollover_icons', 'linkzoom'), +(1928, 1345, 'pyre_link_icon_url', ''), +(1929, 1345, 'avada_post_views_count', '0'), +(1930, 1345, 'pyre_page_title_bar_bg_color', ''), +(1931, 1345, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1932, 1345, 'pyre_page_title', 'no'), +(1933, 1345, 'pyre_slider_type', 'no'), +(1934, 1345, 'pyre_slider', '0'), +(1935, 1345, 'pyre_wooslider', '0'), +(1936, 1345, 'pyre_revslider', '0'), +(1937, 1345, 'pyre_sidebar_position', 'right'), +(1938, 1345, 'pyre_portfolio_category', '0'), +(1939, 1345, 'pyre_email', ''), +(1940, 1345, 'pyre_gmap', ''), +(1941, 1345, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1942, 1345, '_wp_page_template', 'full-width.php'), +(1943, 1345, 'pyre_flexslider', '0'), +(1944, 1345, 'pyre_fallback', ''), +(1945, 1345, 'pyre_full_width', 'no'), +(1946, 1345, 'pyre_page_bg_color', ''), +(1947, 1345, 'pyre_page_bg', ''), +(1948, 1345, 'pyre_page_bg_full', 'no'), +(1949, 1345, 'pyre_page_bg_repeat', 'repeat'), +(1950, 1345, 'pyre_page_title_bar_bg', ''), +(1951, 1345, 'pyre_elasticslider', '0'), +(1952, 1522, 'avada_post_views_count', '58'), +(1953, 1522, '_wp_page_template', 'full-width.php'), +(1954, 1522, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1955, 1522, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1956, 1522, 'pyre_elasticslider', '0'), +(1957, 1522, 'pyre_fallback', ''), +(1958, 1522, 'pyre_full_width', 'no'), +(1959, 1522, 'pyre_portfolio_excerpt', ''), +(1960, 1522, 'pyre_portfolio_full_width', 'yes'), +(1961, 1522, 'pyre_portfolio_sidebar_position', 'default'), +(1962, 1522, 'pyre_portfolio_filters', 'yes'), +(1963, 1522, 'pyre_page_bg_layout', 'default'), +(1964, 1522, 'pyre_wide_page_bg', ''), +(1965, 1522, 'pyre_wide_page_bg_color', ''), +(1966, 1522, 'pyre_wide_page_bg_full', 'no'), +(1967, 1522, 'pyre_wide_page_bg_repeat', 'repeat'), +(1968, 1522, 'pyre_header_bg', ''), +(1969, 1522, 'pyre_header_bg_color', ''), +(1970, 1522, 'pyre_header_bg_full', 'no'), +(1971, 1522, 'pyre_header_bg_repeat', 'repeat'), +(1972, 1522, 'pyre_page_title_text', 'yes'), +(1973, 1522, 'pyre_page_title_bar_bg_retina', ''), +(1974, 1522, 'pyre_page_title_bar_bg_color', ''), +(1975, 1522, 'pyre_page_title_bar_bg_full', 'no'), +(1976, 1522, 'pyre_image_rollover_icons', 'linkzoom'), +(1977, 1522, 'pyre_link_icon_url', ''), +(1978, 1522, 'pyre_page_title', 'yes'), +(1979, 1522, 'pyre_slider_type', 'no'), +(1980, 1522, 'pyre_slider', '0'), +(1981, 1522, 'pyre_wooslider', '0'), +(1982, 1522, 'pyre_flexslider', '0'), +(1983, 1522, 'pyre_revslider', '0'), +(1984, 1522, 'pyre_sidebar_position', 'right'), +(1985, 1522, 'pyre_page_bg_color', ''), +(1986, 1522, 'pyre_page_bg', ''), +(1987, 1522, 'pyre_page_bg_full', 'no'), +(1988, 1522, 'pyre_page_bg_repeat', 'repeat'), +(1989, 1522, 'pyre_page_title_bar_bg', ''), +(1990, 1522, 'pyre_email', ''), +(1991, 1522, 'pyre_gmap', ''), +(1992, 1522, 'avada_post_views_count', '1'), +(1993, 1522, '_wp_page_template', 'full-width.php'), +(1994, 1522, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(1995, 1522, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(1996, 1522, 'pyre_elasticslider', '0'), +(1997, 1522, 'pyre_fallback', ''), +(1998, 1522, 'pyre_full_width', 'no'), +(1999, 1522, 'pyre_portfolio_excerpt', ''), +(2000, 1522, 'pyre_portfolio_full_width', 'yes'), +(2001, 1522, 'pyre_portfolio_sidebar_position', 'default'), +(2002, 1522, 'pyre_portfolio_filters', 'yes'), +(2003, 1522, 'pyre_page_bg_layout', 'default'), +(2004, 1522, 'pyre_wide_page_bg', ''), +(2005, 1522, 'pyre_wide_page_bg_color', ''), +(2006, 1522, 'pyre_wide_page_bg_full', 'no'), +(2007, 1522, 'pyre_wide_page_bg_repeat', 'repeat'), +(2008, 1522, 'pyre_header_bg', ''), +(2009, 1522, 'pyre_header_bg_color', ''), +(2010, 1522, 'pyre_header_bg_full', 'no'), +(2011, 1522, 'pyre_header_bg_repeat', 'repeat'), +(2012, 1522, 'pyre_page_title_text', 'yes'), +(2013, 1522, 'pyre_page_title_bar_bg_retina', ''), +(2014, 1522, 'pyre_page_title_bar_bg_color', ''), +(2015, 1522, 'pyre_page_title_bar_bg_full', 'no'), +(2016, 1522, 'pyre_image_rollover_icons', 'linkzoom'), +(2017, 1522, 'pyre_link_icon_url', ''), +(2018, 1522, 'pyre_page_title', 'yes'), +(2019, 1522, 'pyre_slider_type', 'no'), +(2020, 1522, 'pyre_slider', '0'), +(2021, 1522, 'pyre_wooslider', '0'), +(2022, 1522, 'pyre_flexslider', '0'), +(2023, 1522, 'pyre_revslider', '0'), +(2024, 1522, 'pyre_sidebar_position', 'right'), +(2025, 1522, 'pyre_page_bg_color', ''), +(2026, 1522, 'pyre_page_bg', ''), +(2027, 1522, 'pyre_page_bg_full', 'no'), +(2028, 1522, 'pyre_page_bg_repeat', 'repeat'), +(2029, 1522, 'pyre_page_title_bar_bg', ''), +(2030, 1522, 'pyre_email', ''), +(2031, 1522, 'pyre_gmap', ''), +(2032, 1693, 'avada_post_views_count', '48'), +(2033, 1693, 'pyre_page_title_bar_bg_color', ''), +(2034, 1693, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2035, 1693, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2036, 1693, 'pyre_page_title', 'yes'), +(2037, 1693, 'pyre_slider_type', 'no'), +(2038, 1693, 'pyre_slider', '0'), +(2039, 1693, 'pyre_wooslider', '0'), +(2040, 1693, 'pyre_flexslider', '0'), +(2041, 1693, 'pyre_revslider', '0'), +(2042, 1693, 'pyre_fallback', ''), +(2043, 1693, 'pyre_sidebar_position', 'right'), +(2044, 1693, 'pyre_page_bg_color', ''), +(2045, 1693, 'pyre_page_bg', ''), +(2046, 1693, 'pyre_page_bg_full', 'no'), +(2047, 1693, 'pyre_page_bg_repeat', 'repeat'), +(2048, 1693, 'pyre_page_title_bar_bg', ''), +(2049, 1693, '_wp_page_template', 'full-width.php'), +(2050, 1693, 'pyre_full_width', 'no'), +(2051, 1693, 'pyre_elasticslider', '0'), +(2052, 1693, 'pyre_page_title_bar_bg_color', ''), +(2053, 1693, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2054, 1693, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2055, 1693, 'pyre_page_title', 'yes'), +(2056, 1693, 'pyre_slider_type', 'no'), +(2057, 1693, 'pyre_slider', '0'), +(2058, 1693, 'pyre_wooslider', '0'), +(2059, 1693, 'pyre_flexslider', '0'), +(2060, 1693, 'pyre_revslider', '0'), +(2061, 1693, 'pyre_fallback', ''), +(2062, 1693, 'pyre_sidebar_position', 'right'), +(2063, 1693, 'pyre_page_bg_color', ''), +(2064, 1693, 'pyre_page_bg', ''), +(2065, 1693, 'pyre_page_bg_full', 'no'), +(2066, 1693, 'pyre_page_bg_repeat', 'repeat'), +(2067, 1693, 'pyre_page_title_bar_bg', ''), +(2068, 1693, '_wp_page_template', 'full-width.php'), +(2069, 1693, 'pyre_full_width', 'no'), +(2070, 1693, 'pyre_elasticslider', '0'), +(2071, 1862, 'pyre_portfolio_sidebar_position', 'default'), +(2072, 1862, 'avada_post_views_count', '39'), +(2073, 1862, 'pyre_page_title', 'no'), +(2074, 1862, 'pyre_slider_type', 'flex2'), +(2075, 1862, 'pyre_slider', '0'), +(2076, 1862, 'pyre_wooslider', '0'), +(2077, 1862, 'pyre_flexslider', 'flexslider_1'), +(2078, 1862, 'pyre_revslider', '0'), +(2079, 1862, 'pyre_fallback', ''), +(2080, 1862, 'pyre_full_width', 'no'), +(2081, 1862, 'pyre_sidebar_position', 'right'), +(2082, 1862, 'pyre_page_bg_color', ''), +(2083, 1862, 'pyre_page_bg', ''), +(2084, 1862, 'pyre_page_bg_full', 'no'), +(2085, 1862, 'pyre_page_bg_repeat', 'repeat'), +(2086, 1862, 'pyre_page_title_bar_bg', ''), +(2087, 1862, '_wp_page_template', 'full-width.php'), +(2088, 1862, 'pyre_portfolio_full_width', 'yes'), +(2089, 1862, 'pyre_portfolio_excerpt', ''), +(2090, 1862, 'pyre_elasticslider', '0'), +(2091, 1862, 'pyre_page_title_bar_bg_color', ''), +(2092, 1862, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2093, 1862, 'pyre_link_icon_url', ''), +(2094, 1862, 'pyre_image_rollover_icons', 'linkzoom'), +(2095, 1862, 'pyre_page_title_bar_bg_full', 'no'), +(2096, 1862, 'pyre_page_title_bar_bg_retina', ''), +(2097, 1862, 'pyre_page_title_text', 'yes'), +(2098, 1862, 'pyre_header_bg_repeat', 'repeat'), +(2099, 1862, 'pyre_header_bg_full', 'no'), +(2100, 1862, 'pyre_header_bg_color', ''), +(2101, 1862, 'pyre_header_bg', ''), +(2102, 1862, 'pyre_wide_page_bg_repeat', 'repeat'), +(2103, 1862, 'pyre_wide_page_bg_full', 'no'), +(2104, 1862, 'pyre_wide_page_bg_color', ''), +(2105, 1862, 'pyre_wide_page_bg', ''), +(2106, 1862, 'pyre_page_bg_layout', 'default'), +(2107, 1862, 'pyre_portfolio_filters', 'yes'), +(2108, 1862, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2109, 1862, 'pyre_page_title', 'no'), +(2110, 1862, 'pyre_slider_type', 'no'), +(2111, 1862, 'pyre_slider', '0'), +(2112, 1862, 'pyre_wooslider', '0'), +(2113, 1862, 'pyre_flexslider', '0'), +(2114, 1862, 'pyre_revslider', '0'), +(2115, 1862, 'pyre_fallback', ''), +(2116, 1862, 'pyre_full_width', 'no'), +(2117, 1862, 'pyre_sidebar_position', 'right'), +(2118, 1862, 'pyre_page_bg_color', ''), +(2119, 1862, 'pyre_page_bg', ''), +(2120, 1862, 'pyre_page_bg_full', 'no'), +(2121, 1862, 'pyre_page_bg_repeat', 'repeat'), +(2122, 1862, 'pyre_page_title_bar_bg', ''), +(2123, 1862, '_wp_page_template', 'full-width.php'), +(2124, 1862, 'pyre_elasticslider', '0'), +(2125, 1862, 'pyre_page_title_bar_bg_color', ''), +(2126, 1862, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2127, 1862, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2128, 2291, 'pyre_page_title_bar_bg', ''), +(2129, 2291, 'pyre_full_width', 'no'), +(2130, 2291, 'pyre_fallback', ''), +(2131, 2291, 'pyre_revslider', '0'), +(2132, 2291, 'pyre_flexslider', '0'), +(2133, 2291, 'pyre_wooslider', '0'), +(2134, 2291, 'pyre_slider', '0'), +(2135, 2291, 'pyre_slider_type', 'no'), +(2136, 2291, 'pyre_page_title', 'yes'), +(2137, 2291, 'pyre_page_bg_repeat', 'repeat'), +(2138, 2291, 'pyre_page_bg_full', 'no'), +(2139, 2291, 'pyre_page_bg_color', ''), +(2140, 2291, 'pyre_page_bg', ''), +(2141, 2291, 'pyre_sidebar_position', 'left'), +(2142, 2291, '_wp_page_template', 'default'), +(2143, 2291, 'pyre_elasticslider', '0'), +(2144, 2291, 'pyre_page_title_bg_parallax', 'default'), +(2145, 2291, 'pyre_page_title_height', ''), +(2146, 2291, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2147, 2291, 'pyre_portfolio_excerpt', ''), +(2148, 2291, 'pyre_portfolio_full_width', 'yes'), +(2149, 2291, 'pyre_portfolio_sidebar_position', 'default'), +(2150, 2291, 'pyre_portfolio_filters', 'yes'), +(2151, 2291, 'pyre_page_bg_layout', 'default'), +(2152, 2291, 'pyre_wide_page_bg', ''), +(2153, 2291, 'pyre_wide_page_bg_color', ''), +(2154, 2291, 'pyre_wide_page_bg_full', 'no'), +(2155, 2291, 'pyre_wide_page_bg_repeat', 'repeat'), +(2156, 2291, 'pyre_header_bg', ''), +(2157, 2291, 'pyre_header_bg_color', ''), +(2158, 2291, 'pyre_header_bg_full', 'no'), +(2159, 2291, 'pyre_header_bg_repeat', 'repeat'), +(2160, 2291, 'pyre_page_title_text', 'yes'), +(2161, 2291, 'pyre_page_title_bar_bg_retina', ''), +(2162, 2291, 'pyre_page_title_bar_bg_full', 'no'), +(2163, 2291, 'pyre_image_rollover_icons', 'linkzoom'), +(2164, 2291, 'pyre_link_icon_url', ''), +(2165, 2291, 'pyre_page_title_bar_bg_color', ''), +(2166, 2291, 'pyre_page_title_custom_subheader', ''), +(2167, 2291, 'avada_post_views_count', '24'), +(2168, 2291, 'pyre_page_title_custom_text', ''), +(2169, 2291, 'pyre_page_title_bar_bg', ''), +(2170, 2291, 'pyre_full_width', 'no'), +(2171, 2291, 'pyre_fallback', ''), +(2172, 2291, 'pyre_revslider', '0'), +(2173, 2291, 'pyre_flexslider', '0'), +(2174, 2291, 'pyre_wooslider', '0'), +(2175, 2291, 'pyre_slider', '0'), +(2176, 2291, 'pyre_slider_type', 'no'), +(2177, 2291, 'pyre_page_title', 'yes'), +(2178, 2291, 'pyre_page_bg_repeat', 'repeat'), +(2179, 2291, 'pyre_page_bg_full', 'no'), +(2180, 2291, 'pyre_page_bg_color', ''), +(2181, 2291, 'pyre_page_bg', ''), +(2182, 2291, 'pyre_sidebar_position', 'left'), +(2183, 2291, '_wp_page_template', 'default'), +(2184, 2291, 'pyre_elasticslider', '0'), +(2185, 2291, 'pyre_page_title_bar_bg_color', ''), +(2186, 2291, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2187, 2300, 'avada_post_views_count', '111'), +(2188, 2300, 'pyre_elasticslider', '0'), +(2189, 2300, 'pyre_page_title_bar_bg_color', ''), +(2190, 2300, 'pyre_page_title', 'no'), +(2191, 2300, 'pyre_slider_type', 'rev'), +(2192, 2300, 'pyre_slider', '0'), +(2193, 2300, 'pyre_wooslider', '0'), +(2194, 2300, 'pyre_flexslider', '0'), +(2195, 2300, 'pyre_revslider', 'Avada_Full_Width'), +(2196, 2300, 'pyre_fallback', ''), +(2197, 2300, 'pyre_full_width', 'no'), +(2198, 2300, 'pyre_sidebar_position', 'right'), +(2199, 2300, 'pyre_page_bg_color', ''), +(2200, 2300, 'pyre_page_bg', ''), +(2201, 2300, 'pyre_page_bg_full', 'no'), +(2202, 2300, 'pyre_page_bg_repeat', 'repeat'), +(2203, 2300, 'pyre_page_title_bar_bg', ''), +(2204, 2300, '_wp_page_template', 'full-width.php'), +(2205, 2300, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2206, 2300, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2207, 2300, 'pyre_portfolio_excerpt', ''), +(2208, 2300, 'pyre_portfolio_full_width', 'yes'), +(2209, 2300, 'pyre_portfolio_sidebar_position', 'default'), +(2210, 2300, 'pyre_portfolio_filters', 'yes'), +(2211, 2300, 'pyre_page_bg_layout', 'default'), +(2212, 2300, 'pyre_wide_page_bg', ''), +(2213, 2300, 'pyre_wide_page_bg_color', ''), +(2214, 2300, 'pyre_wide_page_bg_full', 'no'), +(2215, 2300, 'pyre_wide_page_bg_repeat', 'repeat'), +(2216, 2300, 'pyre_header_bg', ''), +(2217, 2300, 'pyre_header_bg_color', ''), +(2218, 2300, 'pyre_header_bg_full', 'no'), +(2219, 2300, 'pyre_header_bg_repeat', 'repeat'), +(2220, 2300, 'pyre_page_title_text', 'yes'), +(2221, 2300, 'pyre_page_title_bar_bg_retina', ''), +(2222, 2300, 'pyre_page_title_bar_bg_full', 'no'), +(2223, 2300, 'pyre_image_rollover_icons', 'linkzoom'), +(2224, 2300, 'pyre_link_icon_url', ''), +(2225, 2300, 'avada_post_views_count', '0'), +(2226, 2300, 'pyre_elasticslider', '0'), +(2227, 2300, 'pyre_page_title_bar_bg_color', ''), +(2228, 2300, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2229, 2300, 'pyre_page_title', 'no'), +(2230, 2300, 'pyre_slider_type', 'no'), +(2231, 2300, 'pyre_slider', '0'), +(2232, 2300, 'pyre_wooslider', '0'), +(2233, 2300, 'pyre_flexslider', '0'), +(2234, 2300, 'pyre_revslider', '0'), +(2235, 2300, 'pyre_fallback', ''), +(2236, 2300, 'pyre_full_width', 'no'), +(2237, 2300, 'pyre_sidebar_position', 'right'), +(2238, 2300, 'pyre_page_bg_color', ''), +(2239, 2300, 'pyre_page_bg', ''), +(2240, 2300, 'pyre_page_bg_full', 'no'), +(2241, 2300, 'pyre_page_bg_repeat', 'repeat'), +(2242, 2300, 'pyre_page_title_bar_bg', ''), +(2243, 2300, '_wp_page_template', 'full-width.php'), +(2244, 2300, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2245, 2318, 'avada_post_views_count', '81'), +(2246, 2318, 'pyre_page_title', 'no'), +(2247, 2318, 'pyre_slider_type', 'rev'), +(2248, 2318, 'pyre_slider', '0'), +(2249, 2318, 'pyre_wooslider', '0'), +(2250, 2318, 'pyre_flexslider', '0'), +(2251, 2318, 'pyre_revslider', 'Avada_Full_Width'), +(2252, 2318, 'pyre_fallback', ''), +(2253, 2318, 'pyre_full_width', 'no'), +(2254, 2318, 'pyre_sidebar_position', 'right'), +(2255, 2318, 'pyre_page_bg_color', ''), +(2256, 2318, 'pyre_page_bg', ''), +(2257, 2318, 'pyre_page_bg_full', 'no'), +(2258, 2318, 'pyre_page_bg_repeat', 'repeat'), +(2259, 2318, 'pyre_page_title_bar_bg', ''), +(2260, 2318, '_wp_page_template', 'default'), +(2261, 2318, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2262, 2318, 'pyre_elasticslider', '0'), +(2263, 2318, 'pyre_page_title_bar_bg_color', ''), +(2264, 2318, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:17:"Home Page Sidebar";}'), +(2265, 2318, 'pyre_portfolio_excerpt', ''), +(2266, 2318, 'pyre_portfolio_full_width', 'yes'), +(2267, 2318, 'pyre_portfolio_sidebar_position', 'default'), +(2268, 2318, 'pyre_portfolio_filters', 'yes'), +(2269, 2318, 'pyre_page_bg_layout', 'default'), +(2270, 2318, 'pyre_wide_page_bg', ''), +(2271, 2318, 'pyre_wide_page_bg_color', ''), +(2272, 2318, 'pyre_wide_page_bg_full', 'no'), +(2273, 2318, 'pyre_wide_page_bg_repeat', 'repeat'), +(2274, 2318, 'pyre_header_bg', ''), +(2275, 2318, 'pyre_header_bg_color', ''), +(2276, 2318, 'pyre_header_bg_full', 'no'), +(2277, 2318, 'pyre_header_bg_repeat', 'repeat'), +(2278, 2318, 'pyre_page_title_text', 'yes'), +(2279, 2318, 'pyre_page_title_bar_bg_retina', ''), +(2280, 2318, 'pyre_page_title_bar_bg_full', 'no'), +(2281, 2318, 'pyre_image_rollover_icons', 'linkzoom'), +(2282, 2318, 'pyre_link_icon_url', ''), +(2283, 2367, 'avada_post_views_count', '76'), +(2284, 2367, 'pyre_page_title', 'no'), +(2285, 2367, 'pyre_slider_type', 'rev'), +(2286, 2367, 'pyre_slider', '0'), +(2287, 2367, 'pyre_wooslider', '0'), +(2288, 2367, 'pyre_flexslider', '0'), +(2289, 2367, 'pyre_revslider', 'Avada_Full_Width'), +(2290, 2367, 'pyre_fallback', ''), +(2291, 2367, 'pyre_full_width', 'no'), +(2292, 2367, 'pyre_sidebar_position', 'right'), +(2293, 2367, 'pyre_page_bg_color', ''), +(2294, 2367, 'pyre_page_bg', ''), +(2295, 2367, 'pyre_page_bg_full', 'no'), +(2296, 2367, 'pyre_page_bg_repeat', 'repeat'), +(2297, 2367, 'pyre_page_title_bar_bg', ''), +(2298, 2367, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2299, 2367, '_wp_page_template', 'full-width.php'), +(2300, 2367, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2301, 2367, 'pyre_elasticslider', '0'), +(2302, 2367, 'pyre_page_title_bar_bg_color', ''), +(2303, 2367, 'pyre_portfolio_excerpt', ''), +(2304, 2367, 'pyre_portfolio_full_width', 'yes'), +(2305, 2367, 'pyre_portfolio_sidebar_position', 'default'), +(2306, 2367, 'pyre_portfolio_filters', 'yes'), +(2307, 2367, 'pyre_page_bg_layout', 'default'), +(2308, 2367, 'pyre_wide_page_bg', ''), +(2309, 2367, 'pyre_wide_page_bg_color', ''), +(2310, 2367, 'pyre_wide_page_bg_full', 'no'), +(2311, 2367, 'pyre_wide_page_bg_repeat', 'repeat'), +(2312, 2367, 'pyre_header_bg', ''), +(2313, 2367, 'pyre_header_bg_color', ''), +(2314, 2367, 'pyre_header_bg_full', 'no'), +(2315, 2367, 'pyre_header_bg_repeat', 'repeat'), +(2316, 2367, 'pyre_page_title_text', 'yes'), +(2317, 2367, 'pyre_page_title_bar_bg_retina', ''), +(2318, 2367, 'pyre_page_title_bar_bg_full', 'no'), +(2319, 2367, 'pyre_image_rollover_icons', 'linkzoom'), +(2320, 2367, 'pyre_link_icon_url', ''), +(2321, 2367, 'avada_post_views_count', '0'), +(2322, 2367, 'pyre_page_title', 'no'), +(2323, 2367, 'pyre_slider_type', 'no'), +(2324, 2367, 'pyre_slider', '0'), +(2325, 2367, 'pyre_wooslider', '0'), +(2326, 2367, 'pyre_flexslider', '0'), +(2327, 2367, 'pyre_revslider', '0'), +(2328, 2367, 'pyre_fallback', ''), +(2329, 2367, 'pyre_full_width', 'no'), +(2330, 2367, 'pyre_sidebar_position', 'right'), +(2331, 2367, 'pyre_page_bg_color', ''), +(2332, 2367, 'pyre_page_bg', ''), +(2333, 2367, 'pyre_page_bg_full', 'no'), +(2334, 2367, 'pyre_page_bg_repeat', 'repeat'), +(2335, 2367, 'pyre_page_title_bar_bg', ''), +(2336, 2367, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2337, 2367, '_wp_page_template', 'full-width.php'), +(2338, 2367, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2339, 2367, 'pyre_elasticslider', '0'), +(2340, 2367, 'pyre_page_title_bar_bg_color', ''), +(2341, 2398, 'avada_post_views_count', '70'), +(2342, 2398, 'pyre_page_title', 'no'), +(2343, 2398, 'pyre_slider_type', 'rev'), +(2344, 2398, 'pyre_slider', '0'), +(2345, 2398, 'pyre_wooslider', '0'), +(2346, 2398, 'pyre_flexslider', '0'), +(2347, 2398, 'pyre_revslider', 'drg_homepage'), +(2348, 2398, 'pyre_fallback', ''), +(2349, 2398, 'pyre_full_width', 'no'), +(2350, 2398, 'pyre_sidebar_position', 'right'), +(2351, 2398, 'pyre_page_bg_color', ''), +(2352, 2398, 'pyre_page_bg', ''), +(2353, 2398, 'pyre_page_bg_full', 'no'), +(2354, 2398, 'pyre_page_bg_repeat', 'repeat'), +(2355, 2398, 'pyre_page_title_bar_bg', ''), +(2356, 2398, '_wp_page_template', '100-width.php'), +(2357, 2398, 'pyre_page_title_bar_bg_color', ''), +(8009, 2398, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2359, 2398, 'pyre_elasticslider', '0'), +(2361, 2398, 'pyre_portfolio_excerpt', ''), +(2362, 2398, 'pyre_portfolio_full_width', 'yes'), +(2363, 2398, 'pyre_portfolio_sidebar_position', 'default'), +(2364, 2398, 'pyre_portfolio_filters', 'yes'), +(2365, 2398, 'pyre_page_bg_layout', 'default'), +(2366, 2398, 'pyre_wide_page_bg', ''), +(2367, 2398, 'pyre_wide_page_bg_color', ''), +(2368, 2398, 'pyre_wide_page_bg_full', 'no'), +(2369, 2398, 'pyre_wide_page_bg_repeat', 'repeat'), +(2370, 2398, 'pyre_header_bg', ''), +(2371, 2398, 'pyre_header_bg_color', ''), +(2372, 2398, 'pyre_header_bg_full', 'no'), +(2373, 2398, 'pyre_header_bg_repeat', 'repeat'), +(2374, 2398, 'pyre_page_title_text', 'yes'), +(2375, 2398, 'pyre_page_title_bar_bg_retina', ''), +(2376, 2398, 'pyre_page_title_bar_bg_full', 'no'), +(2377, 2398, 'pyre_image_rollover_icons', 'linkzoom'), +(2378, 2398, 'pyre_link_icon_url', ''), +(2379, 2398, 'avada_post_views_count', '0'), +(2380, 2398, 'pyre_page_title', 'no'), +(2381, 2398, 'pyre_slider_type', 'rev'), +(2382, 2398, 'pyre_slider', '0'), +(2383, 2398, 'pyre_wooslider', '0'), +(2384, 2398, 'pyre_flexslider', '0'), +(2385, 2398, 'pyre_revslider', 'drg_homepage'), +(2386, 2398, 'pyre_fallback', ''), +(2387, 2398, 'pyre_full_width', 'no'), +(2388, 2398, 'pyre_sidebar_position', 'right'), +(2389, 2398, 'pyre_page_bg_color', ''), +(2390, 2398, 'pyre_page_bg', ''), +(2391, 2398, 'pyre_page_bg_full', 'no'), +(2392, 2398, 'pyre_page_bg_repeat', 'repeat'), +(2393, 2398, 'pyre_page_title_bar_bg', ''), +(7913, 2398, 'slide_template', ''), +(2395, 2398, '_wp_page_template', '100-width.php'), +(2396, 2398, 'pyre_page_title_bar_bg_color', ''), +(8010, 2398, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2398, 2398, 'pyre_elasticslider', '0'), +(2399, 2466, 'pyre_page_title_bar_bg_color', ''), +(2400, 2466, 'pyre_wide_page_bg_repeat', 'repeat'), +(2401, 2466, 'pyre_wide_page_bg_full', 'no'), +(2402, 2466, 'pyre_wide_page_bg_color', ''), +(2403, 2466, 'pyre_wide_page_bg', ''), +(2404, 2466, 'pyre_page_bg_layout', 'default'), +(2405, 2466, 'pyre_portfolio_filters', 'yes'), +(2406, 2466, 'pyre_portfolio_sidebar_position', 'default'), +(2407, 2466, 'pyre_portfolio_full_width', 'yes'), +(2408, 2466, 'pyre_page_title', 'yes'), +(2409, 2466, 'pyre_slider_type', 'no'), +(2410, 2466, 'pyre_slider', '0'), +(2411, 2466, 'pyre_wooslider', '0'), +(2412, 2466, 'pyre_flexslider', '0'), +(2413, 2466, 'pyre_revslider', '0'), +(2414, 2466, 'pyre_fallback', ''), +(2415, 2466, 'pyre_full_width', 'no'), +(2416, 2466, 'pyre_sidebar_position', 'right'), +(2417, 2466, 'pyre_page_bg_color', ''), +(2418, 2466, 'pyre_page_bg', ''), +(2419, 2466, 'pyre_page_bg_full', 'no'), +(2420, 2466, 'pyre_page_bg_repeat', 'repeat'), +(2421, 2466, 'pyre_page_title_bar_bg', ''), +(2422, 2466, 'pyre_portfolio_excerpt', ''), +(2423, 2466, '_wp_page_template', 'faqs.php'), +(2424, 2466, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:3:"FAQ";}'), +(2425, 2466, 'pyre_page_title_bg_parallax', 'default'), +(2426, 2466, 'pyre_image_rollover_icons', 'linkzoom'), +(2427, 2466, 'pyre_link_icon_url', ''), +(2428, 2466, 'pyre_page_title_bar_bg_full', 'default'), +(2429, 2466, 'pyre_page_title_bar_bg_retina', ''), +(2430, 2466, 'avada_post_views_count', '68'), +(2431, 2466, 'pyre_page_title_height', ''), +(2432, 2466, 'pyre_header_bg', ''), +(2433, 2466, 'pyre_header_bg_color', ''), +(2434, 2466, 'pyre_header_bg_full', 'no'), +(2435, 2466, 'pyre_header_bg_repeat', 'repeat'), +(2436, 2466, 'pyre_page_title_text', 'yes'), +(2437, 2466, 'pyre_page_title_custom_text', ''), +(2438, 2466, 'pyre_page_title_custom_subheader', ''), +(2439, 2466, 'pyre_page_title_bar_bg_color', ''), +(2440, 2466, 'pyre_page_title', 'yes'), +(2441, 2466, 'pyre_slider_type', 'no'), +(2442, 2466, 'pyre_slider', '0'), +(2443, 2466, 'pyre_wooslider', '0'), +(2444, 2466, 'pyre_flexslider', '0'), +(2445, 2466, 'pyre_revslider', '0'), +(2446, 2466, 'pyre_fallback', ''), +(2447, 2466, 'pyre_full_width', 'no'), +(2448, 2466, 'pyre_sidebar_position', 'right'), +(2449, 2466, 'pyre_page_bg_color', ''), +(2450, 2466, 'pyre_page_bg', ''), +(2451, 2466, 'pyre_page_bg_full', 'no'), +(2452, 2466, 'pyre_page_bg_repeat', 'repeat'), +(2453, 2466, 'pyre_page_title_bar_bg', ''), +(2454, 2466, 'pyre_elasticslider', '0'), +(2455, 2466, '_wp_page_template', 'faqs.php'), +(2456, 2466, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2457, 2660, 'pyre_page_bg_color', ''), +(2458, 2660, 'avada_post_views_count', '68'), +(2459, 2660, 'pyre_sidebar_position', 'right'), +(2460, 2660, 'pyre_full_width', 'no'), +(2461, 2660, 'pyre_fallback', ''), +(2462, 2660, 'pyre_revslider', 'Avada_Full_Width'), +(2463, 2660, 'pyre_flexslider', '0'), +(2464, 2660, 'pyre_wooslider', '0'), +(2465, 2660, 'pyre_slider', '0'), +(2466, 2660, 'pyre_slider_type', 'rev'), +(2467, 2660, 'pyre_page_title', 'no'), +(2468, 2660, 'pyre_page_bg', ''), +(2469, 2660, 'pyre_page_bg_full', 'no'), +(2470, 2660, 'pyre_page_bg_repeat', 'repeat'), +(2471, 2660, 'pyre_page_title_bar_bg', ''), +(2472, 2660, 'pyre_page_title_bar_bg_color', ''), +(2473, 2660, '_wp_page_template', 'full-width.php'), +(2474, 2660, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2475, 2660, 'pyre_elasticslider', '0'), +(2476, 2660, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2477, 2660, 'pyre_portfolio_excerpt', ''), +(2478, 2660, 'pyre_portfolio_full_width', 'yes'), +(2479, 2660, 'pyre_portfolio_sidebar_position', 'default'), +(2480, 2660, 'pyre_portfolio_filters', 'yes'), +(2481, 2660, 'pyre_page_bg_layout', 'default'), +(2482, 2660, 'pyre_wide_page_bg', ''), +(2483, 2660, 'pyre_wide_page_bg_color', ''), +(2484, 2660, 'pyre_wide_page_bg_full', 'no'), +(2485, 2660, 'pyre_wide_page_bg_repeat', 'repeat'), +(2486, 2660, 'pyre_header_bg', ''), +(2487, 2660, 'pyre_header_bg_color', ''), +(2488, 2660, 'pyre_header_bg_full', 'no'), +(2489, 2660, 'pyre_header_bg_repeat', 'repeat'), +(2490, 2660, 'pyre_page_title_text', 'yes'), +(2491, 2660, 'pyre_page_title_bar_bg_retina', ''), +(2492, 2660, 'pyre_page_title_bar_bg_full', 'no'), +(2493, 2660, 'pyre_image_rollover_icons', 'linkzoom'), +(2494, 2660, 'pyre_link_icon_url', ''), +(2495, 2660, 'pyre_page_bg_color', ''), +(2496, 2660, 'avada_post_views_count', '0'), +(2497, 2660, 'pyre_sidebar_position', 'right'), +(2498, 2660, 'pyre_full_width', 'no'), +(2499, 2660, 'pyre_fallback', ''), +(2500, 2660, 'pyre_revslider', '0'), +(2501, 2660, 'pyre_flexslider', '0'), +(2502, 2660, 'pyre_wooslider', '0'), +(2503, 2660, 'pyre_slider', '0'), +(2504, 2660, 'pyre_slider_type', 'no'), +(2505, 2660, 'pyre_page_title', 'no'), +(2506, 2660, 'pyre_page_bg', ''), +(2507, 2660, 'pyre_page_bg_full', 'no'), +(2508, 2660, 'pyre_page_bg_repeat', 'repeat'), +(2509, 2660, 'pyre_page_title_bar_bg', ''), +(2510, 2660, 'pyre_page_title_bar_bg_color', ''), +(2511, 2660, '_wp_page_template', 'full-width.php'), +(2512, 2660, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2513, 2660, 'pyre_elasticslider', '0'), +(2514, 2660, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2515, 2712, 'avada_post_views_count', '62'), +(2516, 2712, 'pyre_page_title_bar_bg_full', 'no'), +(2517, 2712, 'pyre_page_title_bar_bg_retina', ''), +(2518, 2712, 'pyre_page_title_text', 'yes'), +(2519, 2712, 'pyre_header_bg_repeat', 'repeat'), +(2520, 2712, 'pyre_header_bg_full', 'no'), +(2521, 2712, 'pyre_header_bg_color', ''), +(2522, 2712, 'pyre_header_bg', ''), +(2523, 2712, 'pyre_wide_page_bg_repeat', 'repeat'), +(2524, 2712, 'pyre_wide_page_bg_full', 'no'), +(2525, 2712, 'pyre_wide_page_bg_color', ''), +(2526, 2712, 'pyre_wide_page_bg', ''), +(2527, 2712, 'pyre_page_bg_layout', 'default'), +(2528, 2712, 'pyre_portfolio_filters', 'yes'), +(2529, 2712, 'pyre_page_title', 'yes'), +(2530, 2712, 'pyre_slider_type', 'no'), +(2531, 2712, 'pyre_slider', '0'), +(2532, 2712, 'pyre_wooslider', '0'), +(2533, 2712, 'pyre_flexslider', '0'), +(2534, 2712, 'pyre_revslider', '0'), +(2535, 2712, 'pyre_fallback', ''), +(2536, 2712, 'pyre_full_width', 'no'), +(2537, 2712, 'pyre_sidebar_position', 'right'), +(2538, 2712, 'pyre_page_bg_color', ''), +(2539, 2712, 'pyre_page_bg', ''), +(2540, 2712, 'pyre_page_bg_full', 'no'), +(2541, 2712, 'pyre_page_bg_repeat', 'repeat'), +(2542, 2712, 'pyre_page_title_bar_bg', ''), +(2543, 2712, 'pyre_page_title_bar_bg_color', ''), +(2544, 2712, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2545, 2712, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2546, 2712, '_wp_page_template', 'full-width.php'), +(2547, 2712, 'pyre_portfolio_sidebar_position', 'default'), +(2548, 2712, 'pyre_elasticslider', '0'), +(2549, 2712, 'pyre_portfolio_full_width', 'yes'), +(2550, 2712, 'pyre_link_icon_url', ''), +(2551, 2712, 'pyre_image_rollover_icons', 'linkzoom'), +(2552, 2712, 'pyre_portfolio_excerpt', ''), +(2553, 2712, 'avada_post_views_count', '0'), +(2554, 2712, 'pyre_page_title', 'yes'), +(2555, 2712, 'pyre_slider_type', 'no'), +(2556, 2712, 'pyre_slider', '0'), +(2557, 2712, 'pyre_wooslider', '0'), +(2558, 2712, 'pyre_flexslider', '0'), +(2559, 2712, 'pyre_revslider', '0'), +(2560, 2712, 'pyre_fallback', ''), +(2561, 2712, 'pyre_full_width', 'no'), +(2562, 2712, 'pyre_sidebar_position', 'right'), +(2563, 2712, 'pyre_page_bg_color', ''), +(2564, 2712, 'pyre_page_bg', ''), +(2565, 2712, 'pyre_page_bg_full', 'no'), +(2566, 2712, 'pyre_page_bg_repeat', 'repeat'), +(2567, 2712, 'pyre_page_title_bar_bg', ''), +(2568, 2712, 'pyre_page_title_bar_bg_color', ''), +(2569, 2712, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2570, 2712, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2571, 2712, '_wp_page_template', 'full-width.php'), +(2572, 2712, 'pyre_elasticslider', '0'), +(2573, 2745, 'avada_post_views_count', '64'), +(2574, 2745, 'pyre_page_title', 'no'), +(2575, 2745, 'pyre_slider_type', 'rev'), +(2576, 2745, 'pyre_slider', '0'), +(2577, 2745, 'pyre_wooslider', '0'), +(2578, 2745, 'pyre_flexslider', '0'), +(2579, 2745, 'pyre_revslider', 'Avada_Full_Width'), +(2580, 2745, 'pyre_fallback', ''), +(2581, 2745, 'pyre_full_width', 'no'), +(2582, 2745, 'pyre_sidebar_position', 'left'), +(2583, 2745, 'pyre_page_bg_color', ''), +(2584, 2745, 'pyre_page_bg', ''), +(2585, 2745, 'pyre_page_bg_full', 'no'), +(2586, 2745, 'pyre_page_bg_repeat', 'repeat'), +(2587, 2745, 'pyre_page_title_bar_bg', ''), +(2588, 2745, 'pyre_page_title_bar_bg_color', ''), +(2589, 2745, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:17:"Home Page Sidebar";}'), +(2590, 2745, '_wp_page_template', 'default'), +(2591, 2745, 'pyre_elasticslider', '0'), +(2592, 2745, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2593, 2745, 'pyre_portfolio_excerpt', ''), +(2594, 2745, 'pyre_portfolio_full_width', 'yes'), +(2595, 2745, 'pyre_portfolio_sidebar_position', 'default'), +(2596, 2745, 'pyre_portfolio_filters', 'yes'), +(2597, 2745, 'pyre_page_bg_layout', 'default'), +(2598, 2745, 'pyre_wide_page_bg', ''), +(2599, 2745, 'pyre_wide_page_bg_color', ''), +(2600, 2745, 'pyre_wide_page_bg_full', 'no'), +(2601, 2745, 'pyre_wide_page_bg_repeat', 'repeat'), +(2602, 2745, 'pyre_header_bg', ''), +(2603, 2745, 'pyre_header_bg_color', ''), +(2604, 2745, 'pyre_header_bg_full', 'no'), +(2605, 2745, 'pyre_header_bg_repeat', 'repeat'), +(2606, 2745, 'pyre_page_title_text', 'yes'), +(2607, 2745, 'pyre_page_title_bar_bg_retina', ''), +(2608, 2745, 'pyre_page_title_bar_bg_full', 'no'), +(2609, 2745, 'pyre_image_rollover_icons', 'linkzoom'), +(2610, 2745, 'pyre_link_icon_url', ''), +(2611, 2745, 'avada_post_views_count', '0'), +(2612, 2745, 'pyre_page_title', 'no'), +(2613, 2745, 'pyre_slider_type', 'no'), +(2614, 2745, 'pyre_slider', '0'), +(2615, 2745, 'pyre_wooslider', '0'), +(2616, 2745, 'pyre_flexslider', '0'), +(2617, 2745, 'pyre_revslider', '0'), +(2618, 2745, 'pyre_fallback', ''), +(2619, 2745, 'pyre_full_width', 'no'), +(2620, 2745, 'pyre_sidebar_position', 'left'), +(2621, 2745, 'pyre_page_bg_color', ''), +(2622, 2745, 'pyre_page_bg', ''), +(2623, 2745, 'pyre_page_bg_full', 'no'), +(2624, 2745, 'pyre_page_bg_repeat', 'repeat'), +(2625, 2745, 'pyre_page_title_bar_bg', ''), +(2626, 2745, 'pyre_page_title_bar_bg_color', ''), +(2627, 2745, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2628, 2745, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:17:"Home Page Sidebar";}'), +(2629, 2745, '_wp_page_template', 'default'), +(2630, 2745, 'pyre_elasticslider', '0'), +(2631, 2776, 'avada_post_views_count', '85'), +(2632, 2776, 'pyre_image_rollover_icons', 'linkzoom'), +(2633, 2776, 'pyre_link_icon_url', ''), +(2634, 2776, 'pyre_page_title_bar_bg_full', 'no'), +(2635, 2776, 'pyre_page_title_bar_bg_retina', ''), +(2636, 2776, 'pyre_page_title_text', 'yes'), +(2637, 2776, 'pyre_header_bg_repeat', 'repeat'), +(2638, 2776, 'pyre_portfolio_sidebar_position', 'default'); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(2639, 2776, 'pyre_portfolio_full_width', 'yes'), +(2640, 2776, 'pyre_portfolio_excerpt', ''), +(2641, 2776, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2642, 2776, 'pyre_page_title_bar_bg_color', ''), +(2643, 2776, 'pyre_page_title_bar_bg', ''), +(2644, 2776, 'pyre_page_bg_repeat', 'repeat'), +(2645, 2776, 'pyre_page_bg_full', 'no'), +(2646, 2776, 'pyre_page_bg', ''), +(2647, 2776, 'pyre_page_bg_color', ''), +(2648, 2776, 'pyre_sidebar_position', 'right'), +(2649, 2776, 'pyre_full_width', 'no'), +(2650, 2776, 'pyre_fallback', ''), +(2651, 2776, 'pyre_revslider', '0'), +(2652, 2776, 'pyre_flexslider', '0'), +(2653, 2776, 'pyre_wooslider', '0'), +(2654, 2776, 'pyre_slider', '0'), +(2655, 2776, 'pyre_slider_type', 'no'), +(2656, 2776, 'pyre_page_title', 'yes'), +(2657, 2776, 'pyre_main_top_padding', ''), +(2658, 2776, '_wp_page_template', 'full-width.php'), +(2659, 2776, 'pyre_header_bg_full', 'no'), +(2660, 2776, 'pyre_header_bg_color', ''), +(2661, 2776, 'pyre_header_bg', ''), +(2662, 2776, 'pyre_wide_page_bg_repeat', 'repeat'), +(2663, 2776, 'pyre_wide_page_bg_full', 'no'), +(2664, 2776, 'pyre_wide_page_bg_color', ''), +(2665, 2776, 'pyre_page_bg_layout', 'default'), +(2666, 2776, 'pyre_wide_page_bg', ''), +(2667, 2776, 'pyre_elasticslider', '0'), +(2668, 2776, 'pyre_portfolio_filters', 'yes'), +(2669, 2776, 'slide_template', ''), +(2670, 2776, 'pyre_page_title_bar_bg_color', ''), +(2671, 2776, 'pyre_page_title_bar_bg', ''), +(2672, 2776, 'pyre_page_bg_repeat', 'repeat'), +(2673, 2776, 'pyre_page_bg_full', 'no'), +(2674, 2776, 'pyre_page_bg', ''), +(2675, 2776, 'pyre_page_bg_color', ''), +(2676, 2776, 'pyre_sidebar_position', 'right'), +(2677, 2776, 'pyre_full_width', 'no'), +(2678, 2776, 'pyre_fallback', ''), +(2679, 2776, 'pyre_revslider', '0'), +(2680, 2776, 'pyre_flexslider', '0'), +(2681, 2776, 'pyre_wooslider', '0'), +(2682, 2776, 'pyre_slider', '0'), +(2683, 2776, 'pyre_slider_type', 'no'), +(2684, 2776, 'pyre_page_title', 'yes'), +(2685, 2776, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2686, 2776, '_wp_page_template', 'full-width.php'), +(2687, 2776, 'pyre_elasticslider', '0'), +(2688, 2776, 'pyre_main_bottom_padding', ''), +(2689, 2776, 'pyre_hundredp_padding', ''), +(2690, 2776, 'pyre_page_title_custom_text', ''), +(2691, 2776, 'pyre_page_title_custom_subheader', ''), +(2692, 2776, 'pyre_page_title_height', ''), +(2693, 2776, 'pyre_page_title_bg_parallax', 'default'), +(2694, 2803, 'pyre_header_bg_full', 'no'), +(2695, 2803, 'pyre_header_bg_color', ''), +(2696, 2803, 'pyre_header_bg', ''), +(2697, 2803, 'pyre_wide_page_bg_repeat', 'repeat'), +(2698, 2803, 'pyre_wide_page_bg_full', 'no'), +(2699, 2803, 'pyre_wide_page_bg_color', ''), +(2700, 2803, 'pyre_wide_page_bg', ''), +(2701, 2803, 'pyre_page_bg_layout', 'default'), +(2702, 2803, 'pyre_portfolio_filters', 'yes'), +(2703, 2803, 'pyre_portfolio_sidebar_position', 'default'), +(2704, 2803, 'pyre_portfolio_full_width', 'yes'), +(2705, 2803, 'pyre_portfolio_excerpt', ''), +(2706, 2803, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2707, 2803, 'pyre_page_title', 'yes'), +(2708, 2803, 'pyre_slider_type', 'no'), +(2709, 2803, 'pyre_slider', '0'), +(2710, 2803, 'pyre_wooslider', '0'), +(2711, 2803, 'pyre_flexslider', '0'), +(2712, 2803, 'pyre_revslider', '0'), +(2713, 2803, 'pyre_fallback', ''), +(2714, 2803, 'pyre_full_width', 'no'), +(2715, 2803, 'pyre_sidebar_position', 'right'), +(2716, 2803, 'pyre_page_bg_color', ''), +(2717, 2803, 'pyre_page_bg', ''), +(2718, 2803, 'pyre_page_bg_full', 'no'), +(2719, 2803, 'pyre_page_bg_repeat', 'repeat'), +(2720, 2803, 'pyre_page_title_bar_bg', ''), +(2721, 2803, 'pyre_page_title_bar_bg_color', ''), +(2722, 2803, 'pyre_main_top_padding', ''), +(2723, 2803, '_wp_page_template', 'full-width.php'), +(2724, 2803, 'avada_post_views_count', '72'), +(2725, 2803, 'pyre_link_icon_url', ''), +(2726, 2803, 'pyre_image_rollover_icons', 'linkzoom'), +(2727, 2803, 'pyre_page_title_text', 'yes'), +(2728, 2803, 'pyre_page_title_bar_bg_retina', ''), +(2729, 2803, 'pyre_page_title_bar_bg_full', 'no'), +(2730, 2803, 'pyre_elasticslider', '0'), +(2731, 2803, 'pyre_header_bg_repeat', 'repeat'), +(2732, 2803, 'pyre_page_title', 'yes'), +(2733, 2803, 'pyre_slider_type', 'no'), +(2734, 2803, 'pyre_slider', '0'), +(2735, 2803, 'pyre_wooslider', '0'), +(2736, 2803, 'pyre_flexslider', '0'), +(2737, 2803, 'pyre_revslider', '0'), +(2738, 2803, 'pyre_fallback', ''), +(2739, 2803, 'pyre_full_width', 'no'), +(2740, 2803, 'pyre_sidebar_position', 'right'), +(2741, 2803, 'pyre_page_bg_color', ''), +(2742, 2803, 'pyre_page_bg', ''), +(2743, 2803, 'pyre_page_bg_full', 'no'), +(2744, 2803, 'pyre_page_bg_repeat', 'repeat'), +(2745, 2803, 'pyre_page_title_bar_bg', ''), +(2746, 2803, 'pyre_page_title_bar_bg_color', ''), +(2747, 2803, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2748, 2803, '_wp_page_template', 'full-width.php'), +(2749, 2803, 'pyre_elasticslider', '0'), +(2750, 2803, 'slide_template', ''), +(2751, 2803, 'pyre_main_bottom_padding', ''), +(2752, 2803, 'pyre_hundredp_padding', ''), +(2753, 2803, 'pyre_page_title_custom_text', ''), +(2754, 2803, 'pyre_page_title_custom_subheader', ''), +(2755, 2803, 'pyre_page_title_height', ''), +(2756, 2803, 'pyre_page_title_bg_parallax', 'default'), +(2757, 3073, 'avada_post_views_count', '82'), +(2758, 3073, 'pyre_page_title', 'yes'), +(2759, 3073, 'pyre_slider_type', 'no'), +(2760, 3073, 'pyre_slider', '0'), +(2761, 3073, 'pyre_wooslider', '0'), +(2762, 3073, 'pyre_flexslider', '0'), +(2763, 3073, 'pyre_revslider', '0'), +(2764, 3073, 'pyre_fallback', ''), +(2765, 3073, 'pyre_full_width', 'no'), +(2766, 3073, 'pyre_sidebar_position', 'right'), +(2767, 3073, 'pyre_page_bg_color', ''), +(2768, 3073, 'pyre_page_bg', ''), +(2769, 3073, 'pyre_page_bg_full', 'no'), +(2770, 3073, 'pyre_page_bg_repeat', 'repeat'), +(2771, 3073, 'pyre_page_title_bar_bg', ''), +(2772, 3073, 'pyre_page_title_bar_bg_color', ''), +(2773, 3073, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2774, 3073, '_wp_page_template', 'full-width.php'), +(2775, 3073, 'pyre_elasticslider', '0'), +(2776, 3073, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2777, 3073, 'pyre_portfolio_excerpt', ''), +(2778, 3073, 'pyre_portfolio_full_width', 'yes'), +(2779, 3073, 'pyre_portfolio_sidebar_position', 'default'), +(2780, 3073, 'pyre_portfolio_filters', 'yes'), +(2781, 3073, 'pyre_page_bg_layout', 'default'), +(2782, 3073, 'pyre_wide_page_bg', ''), +(2783, 3073, 'pyre_wide_page_bg_color', ''), +(2784, 3073, 'pyre_wide_page_bg_full', 'no'), +(2785, 3073, 'pyre_wide_page_bg_repeat', 'repeat'), +(2786, 3073, 'pyre_header_bg', ''), +(2787, 3073, 'pyre_header_bg_color', ''), +(2788, 3073, 'pyre_header_bg_full', 'no'), +(2789, 3073, 'pyre_header_bg_repeat', 'repeat'), +(2790, 3073, 'pyre_page_title_text', 'yes'), +(2791, 3073, 'pyre_page_title_bar_bg_retina', ''), +(2792, 3073, 'pyre_page_title_bar_bg_full', 'no'), +(2793, 3073, 'pyre_image_rollover_icons', 'linkzoom'), +(2794, 3073, 'pyre_link_icon_url', ''), +(2795, 3073, 'avada_post_views_count', '0'), +(2796, 3073, 'pyre_page_title', 'yes'), +(2797, 3073, 'pyre_slider_type', 'no'), +(2798, 3073, 'pyre_slider', '0'), +(2799, 3073, 'pyre_wooslider', '0'), +(2800, 3073, 'pyre_flexslider', '0'), +(2801, 3073, 'pyre_revslider', '0'), +(2802, 3073, 'pyre_fallback', ''), +(2803, 3073, 'pyre_full_width', 'no'), +(2804, 3073, 'pyre_sidebar_position', 'right'), +(2805, 3073, 'pyre_page_bg_color', ''), +(2806, 3073, 'pyre_page_bg', ''), +(2807, 3073, 'pyre_page_bg_full', 'no'), +(2808, 3073, 'pyre_page_bg_repeat', 'repeat'), +(2809, 3073, 'pyre_page_title_bar_bg', ''), +(2810, 3073, 'pyre_page_title_bar_bg_color', ''), +(2811, 3073, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2812, 3073, '_wp_page_template', 'full-width.php'), +(2813, 3073, 'pyre_elasticslider', '0'), +(2814, 3073, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2815, 3089, 'avada_post_views_count', '50'), +(2816, 3089, 'pyre_page_title', 'no'), +(2817, 3089, 'pyre_slider_type', 'elastic'), +(2818, 3089, 'pyre_slider', '0'), +(2819, 3089, 'pyre_wooslider', '0'), +(2820, 3089, 'pyre_flexslider', '0'), +(2821, 3089, 'pyre_revslider', '0'), +(2822, 3089, 'pyre_elasticslider', 'group1'), +(2823, 3089, 'pyre_fallback', ''), +(2824, 3089, 'pyre_full_width', 'no'), +(2825, 3089, 'pyre_sidebar_position', 'right'), +(2826, 3089, 'pyre_page_bg_color', ''), +(2827, 3089, 'pyre_page_bg', ''), +(2828, 3089, 'pyre_page_bg_full', 'no'), +(2829, 3089, 'pyre_page_bg_repeat', 'repeat'), +(2830, 3089, 'pyre_page_title_bar_bg', ''), +(2831, 3089, 'pyre_page_title_bar_bg_color', ''), +(2832, 3089, 'pyre_page_title_custom_text', ''), +(2833, 3089, '_wp_page_template', 'full-width.php'), +(2834, 3089, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2835, 3089, 'pyre_portfolio_excerpt', ''), +(2836, 3089, 'pyre_portfolio_full_width', 'yes'), +(2837, 3089, 'pyre_portfolio_sidebar_position', 'default'), +(2838, 3089, 'pyre_portfolio_filters', 'yes'), +(2839, 3089, 'pyre_page_bg_layout', 'default'), +(2840, 3089, 'pyre_wide_page_bg', ''), +(2841, 3089, 'pyre_wide_page_bg_color', ''), +(2842, 3089, 'pyre_wide_page_bg_full', 'no'), +(2843, 3089, 'pyre_wide_page_bg_repeat', 'repeat'), +(2844, 3089, 'pyre_header_bg', ''), +(2845, 3089, 'pyre_header_bg_color', ''), +(2846, 3089, 'pyre_header_bg_full', 'no'), +(2847, 3089, 'pyre_header_bg_repeat', 'repeat'), +(2848, 3089, 'pyre_page_title_text', 'yes'), +(2849, 3089, 'pyre_page_title_bar_bg_retina', ''), +(2850, 3089, 'pyre_page_title_bar_bg_full', 'no'), +(2851, 3089, 'pyre_image_rollover_icons', 'linkzoom'), +(2852, 3089, 'pyre_link_icon_url', ''), +(2853, 3089, 'pyre_page_title', 'no'), +(2854, 3089, 'pyre_slider_type', 'elastic'), +(2855, 3089, 'pyre_slider', '0'), +(2856, 3089, 'pyre_wooslider', '0'), +(2857, 3089, 'pyre_flexslider', '0'), +(2858, 3089, 'pyre_revslider', '0'), +(2859, 3089, 'pyre_elasticslider', 'group1'), +(2860, 3089, 'pyre_fallback', ''), +(2861, 3089, 'pyre_full_width', 'no'), +(2862, 3089, 'pyre_sidebar_position', 'right'), +(2863, 3089, 'pyre_page_bg_color', ''), +(2864, 3089, 'pyre_page_bg', ''), +(2865, 3089, 'pyre_page_bg_full', 'no'), +(2866, 3089, 'pyre_page_bg_repeat', 'repeat'), +(2867, 3089, 'pyre_page_title_bar_bg', ''), +(2868, 3089, 'pyre_page_title_bar_bg_color', ''), +(2869, 3089, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2870, 3089, '_wp_page_template', 'full-width.php'), +(2871, 3089, 'slide_template', ''), +(2872, 3089, 'pyre_main_top_padding', ''), +(2873, 3089, 'pyre_main_bottom_padding', ''), +(2874, 3089, 'pyre_hundredp_padding', ''), +(2875, 3089, 'pyre_page_title_custom_subheader', ''), +(2876, 3089, 'pyre_page_title_height', ''), +(2877, 3089, 'pyre_page_title_bg_parallax', 'default'), +(2878, 3474, 'pyre_page_title_height', ''), +(2879, 3474, 'pyre_page_title_bar_bg_color', ''), +(2880, 3474, 'pyre_page_title_bar_bg', ''), +(2881, 3474, 'pyre_page_bg_repeat', 'repeat'), +(2882, 3474, 'pyre_page_bg_full', 'no'), +(2883, 3474, 'pyre_page_bg', ''), +(2884, 3474, 'pyre_page_bg_color', ''), +(2885, 3474, 'pyre_sidebar_position', 'left'), +(2886, 3474, 'pyre_full_width', 'no'), +(2887, 3474, 'pyre_fallback', ''), +(2888, 3474, 'pyre_elasticslider', '0'), +(2889, 3474, 'pyre_revslider', '0'), +(2890, 3474, 'pyre_flexslider', '0'), +(2891, 3474, 'pyre_wooslider', '0'), +(2892, 3474, 'pyre_slider', '0'), +(2893, 3474, 'pyre_slider_type', 'no'), +(2894, 3474, 'pyre_page_title', 'yes'), +(2895, 3474, 'pyre_portfolio_excerpt', ''), +(2896, 3474, 'pyre_portfolio_full_width', 'yes'), +(2897, 3474, 'pyre_portfolio_sidebar_position', 'right'), +(2898, 3474, '_wp_page_template', 'side-navigation.php'), +(2899, 3474, 'avada_post_views_count', '65'), +(2900, 3474, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2901, 3474, 'pyre_portfolio_filters', 'yes'), +(2902, 3474, 'pyre_page_bg_layout', 'default'), +(2903, 3474, 'pyre_wide_page_bg', ''), +(2904, 3474, 'pyre_wide_page_bg_color', ''), +(2905, 3474, 'pyre_wide_page_bg_full', 'no'), +(2906, 3474, 'pyre_wide_page_bg_repeat', 'repeat'), +(2907, 3474, 'pyre_header_bg', ''), +(2908, 3474, 'pyre_header_bg_color', ''), +(2909, 3474, 'pyre_header_bg_full', 'no'), +(2910, 3474, 'pyre_header_bg_repeat', 'repeat'), +(2911, 3474, 'pyre_page_title_text', 'yes'), +(2912, 3474, 'pyre_page_title_bar_bg_retina', ''), +(2913, 3474, 'pyre_page_title_bar_bg_full', 'no'), +(2914, 3474, 'pyre_image_rollover_icons', 'linkzoom'), +(2915, 3474, 'pyre_link_icon_url', ''), +(2916, 3474, 'pyre_page_title_bg_parallax', 'default'), +(2917, 3474, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2918, 3474, 'pyre_page_title_bar_bg_color', ''), +(2919, 3474, 'pyre_page_title_bar_bg', ''), +(2920, 3474, 'pyre_page_bg_repeat', 'repeat'), +(2921, 3474, 'pyre_page_bg_full', 'no'), +(2922, 3474, 'pyre_page_bg', ''), +(2923, 3474, 'pyre_page_bg_color', ''), +(2924, 3474, 'pyre_sidebar_position', 'left'), +(2925, 3474, 'pyre_full_width', 'no'), +(2926, 3474, 'pyre_fallback', ''), +(2927, 3474, 'pyre_elasticslider', '0'), +(2928, 3474, 'pyre_revslider', '0'), +(2929, 3474, 'pyre_flexslider', '0'), +(2930, 3474, 'pyre_wooslider', '0'), +(2931, 3474, 'pyre_slider', '0'), +(2932, 3474, 'pyre_slider_type', 'no'), +(2933, 3474, 'pyre_page_title', 'yes'), +(2934, 3474, 'pyre_portfolio_excerpt', ''), +(2935, 3474, 'pyre_portfolio_full_width', 'yes'), +(2936, 3474, 'pyre_portfolio_sidebar_position', 'right'), +(2937, 3474, '_wp_page_template', 'side-navigation.php'), +(2938, 3474, 'pyre_page_title_custom_text', ''), +(2939, 3474, 'pyre_page_title_custom_subheader', ''), +(2940, 3492, 'avada_post_views_count', '62'), +(2941, 3492, 'pyre_slider_type', 'rev'), +(2942, 3492, 'pyre_page_title', 'no'), +(2943, 3492, 'pyre_slider', '0'), +(2944, 3492, 'pyre_wooslider', '0'), +(2945, 3492, 'pyre_flexslider', '0'), +(2946, 3492, 'pyre_revslider', 'Avada_Full_Width'), +(2947, 3492, 'pyre_elasticslider', '0'), +(2948, 3492, 'pyre_fallback', ''), +(2949, 3492, 'pyre_full_width', 'no'), +(2950, 3492, 'pyre_sidebar_position', 'right'), +(2951, 3492, 'pyre_page_bg_color', ''), +(2952, 3492, 'pyre_page_bg', ''), +(2953, 3492, 'pyre_page_bg_full', 'no'), +(2954, 3492, 'pyre_page_bg_repeat', 'repeat'), +(2955, 3492, 'pyre_page_title_bar_bg', ''), +(2956, 3492, 'pyre_page_title_bar_bg_color', ''), +(2957, 3492, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2958, 3492, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2959, 3492, '_wp_page_template', 'full-width.php'), +(2960, 3492, 'pyre_portfolio_excerpt', ''), +(2961, 3492, 'pyre_portfolio_full_width', 'yes'), +(2962, 3492, 'pyre_portfolio_sidebar_position', 'default'), +(2963, 3492, 'pyre_portfolio_filters', 'yes'), +(2964, 3492, 'pyre_page_bg_layout', 'default'), +(2965, 3492, 'pyre_wide_page_bg', ''), +(2966, 3492, 'pyre_wide_page_bg_color', ''), +(2967, 3492, 'pyre_wide_page_bg_full', 'no'), +(2968, 3492, 'pyre_wide_page_bg_repeat', 'repeat'), +(2969, 3492, 'pyre_header_bg', ''), +(2970, 3492, 'pyre_header_bg_color', ''), +(2971, 3492, 'pyre_header_bg_full', 'no'), +(2972, 3492, 'pyre_header_bg_repeat', 'repeat'), +(2973, 3492, 'pyre_page_title_text', 'yes'), +(2974, 3492, 'pyre_page_title_bar_bg_retina', ''), +(2975, 3492, 'pyre_page_title_bar_bg_full', 'no'), +(2976, 3492, 'pyre_image_rollover_icons', 'linkzoom'), +(2977, 3492, 'pyre_link_icon_url', ''), +(2978, 3494, 'avada_post_views_count', '58'), +(2979, 3494, 'pyre_page_title', 'no'), +(2980, 3494, 'pyre_slider_type', 'rev'), +(2981, 3494, 'pyre_slider', '0'), +(2982, 3494, 'pyre_wooslider', '0'), +(2983, 3494, 'pyre_flexslider', '0'), +(2984, 3494, 'pyre_revslider', 'Avada_Full_Width'), +(2985, 3494, 'pyre_elasticslider', '0'), +(2986, 3494, 'pyre_fallback', ''), +(2987, 3494, 'pyre_full_width', 'no'), +(2988, 3494, 'pyre_sidebar_position', 'right'), +(2989, 3494, 'pyre_page_bg_color', ''), +(2990, 3494, 'pyre_page_bg', ''), +(2991, 3494, 'pyre_page_bg_full', 'no'), +(2992, 3494, 'pyre_page_bg_repeat', 'repeat'), +(2993, 3494, 'pyre_page_title_bar_bg', ''), +(2994, 3494, 'pyre_page_title_bar_bg_color', ''), +(2995, 3494, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(2996, 3494, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(2997, 3494, '_wp_page_template', 'full-width.php'), +(2998, 3494, 'pyre_page_title_custom_text', ''), +(2999, 3494, 'pyre_page_title_custom_subheader', ''), +(3000, 3494, 'pyre_portfolio_excerpt', ''), +(3001, 3494, 'pyre_portfolio_full_width', 'yes'), +(3002, 3494, 'pyre_portfolio_sidebar_position', 'default'), +(3003, 3494, 'pyre_portfolio_filters', 'yes'), +(3004, 3494, 'pyre_page_bg_layout', 'default'), +(3005, 3494, 'pyre_wide_page_bg', ''), +(3006, 3494, 'pyre_wide_page_bg_color', ''), +(3007, 3494, 'pyre_wide_page_bg_full', 'no'), +(3008, 3494, 'pyre_wide_page_bg_repeat', 'repeat'), +(3009, 3494, 'pyre_header_bg', ''), +(3010, 3494, 'pyre_header_bg_color', ''), +(3011, 3494, 'pyre_header_bg_full', 'no'), +(3012, 3494, 'pyre_header_bg_repeat', 'repeat'), +(3013, 3494, 'pyre_page_title_text', 'yes'), +(3014, 3494, 'pyre_page_title_bar_bg_retina', ''), +(3015, 3494, 'pyre_page_title_bar_bg_full', 'no'), +(3016, 3494, 'pyre_image_rollover_icons', 'linkzoom'), +(3017, 3494, 'pyre_link_icon_url', ''), +(3018, 3494, 'pyre_page_title_bg_parallax', 'default'), +(3019, 3494, 'pyre_page_title_height', ''), +(3020, 3496, 'pyre_page_title_bar_bg_retina', ''), +(3021, 3496, 'pyre_page_title_text', 'yes'), +(3022, 3496, 'avada_post_views_count', '95'), +(3023, 3496, 'pyre_header_bg_repeat', 'repeat'), +(3024, 3496, 'pyre_header_bg_full', 'no'), +(3025, 3496, 'pyre_header_bg_color', ''), +(3026, 3496, 'pyre_header_bg', ''), +(3027, 3496, 'pyre_wide_page_bg_full', 'no'), +(3028, 3496, 'pyre_wide_page_bg_repeat', 'repeat'), +(3029, 3496, 'pyre_wide_page_bg_color', ''), +(3030, 3496, 'pyre_wide_page_bg', ''), +(3031, 3496, 'pyre_page_bg_layout', 'default'), +(3032, 3496, 'pyre_portfolio_filters', 'yes'), +(3033, 3496, 'pyre_link_icon_url', ''), +(3034, 3496, 'pyre_page_title', 'yes'), +(3035, 3496, 'pyre_slider_type', 'no'), +(3036, 3496, 'pyre_slider', '0'), +(3037, 3496, 'pyre_wooslider', '0'), +(3038, 3496, 'pyre_flexslider', '0'), +(3039, 3496, 'pyre_revslider', '0'), +(3040, 3496, 'pyre_elasticslider', '0'), +(3041, 3496, 'pyre_fallback', ''), +(3042, 3496, 'pyre_full_width', 'no'), +(3043, 3496, 'pyre_sidebar_position', 'right'), +(3044, 3496, 'pyre_page_bg_color', ''), +(3045, 3496, 'pyre_page_bg', ''), +(3046, 3496, 'pyre_page_bg_full', 'no'), +(3047, 3496, 'pyre_page_bg_repeat', 'repeat'), +(3048, 3496, 'pyre_page_title_bar_bg', ''), +(3049, 3496, 'pyre_page_title_bar_bg_color', ''), +(3050, 3496, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3051, 3496, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3052, 3496, '_wp_page_template', 'full-width.php'), +(3053, 3496, 'pyre_portfolio_sidebar_position', 'default'), +(3054, 3496, 'pyre_portfolio_full_width', 'yes'), +(3055, 3496, 'pyre_portfolio_excerpt', ''), +(3056, 3496, 'pyre_image_rollover_icons', 'linkzoom'), +(3057, 3496, 'pyre_page_title_bar_bg_full', 'no'), +(3058, 3496, 'pyre_page_title', 'yes'), +(3059, 3496, 'pyre_slider_type', 'no'), +(3060, 3496, 'pyre_slider', '0'), +(3061, 3496, 'pyre_wooslider', '0'), +(3062, 3496, 'pyre_flexslider', '0'), +(3063, 3496, 'pyre_revslider', '0'), +(3064, 3496, 'pyre_elasticslider', '0'), +(3065, 3496, 'pyre_fallback', ''), +(3066, 3496, 'pyre_full_width', 'no'), +(3067, 3496, 'pyre_sidebar_position', 'right'), +(3068, 3496, 'pyre_page_bg_color', ''), +(3069, 3496, 'pyre_page_bg', ''), +(3070, 3496, 'pyre_page_bg_full', 'no'), +(3071, 3496, 'pyre_page_bg_repeat', 'repeat'), +(3072, 3496, 'pyre_page_title_bar_bg', ''), +(3073, 3496, 'pyre_page_title_bar_bg_color', ''), +(3074, 3496, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3075, 3496, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3076, 3496, '_wp_page_template', 'full-width.php'), +(3077, 3524, 'pyre_page_title', 'yes'), +(3078, 3524, 'pyre_slider_type', 'no'), +(3079, 3524, 'pyre_slider', '0'), +(3080, 3524, 'pyre_wooslider', '0'), +(3081, 3524, 'pyre_flexslider', '0'), +(3082, 3524, 'pyre_revslider', '0'), +(3083, 3524, 'pyre_elasticslider', '0'), +(3084, 3524, 'pyre_fallback', ''), +(3085, 3524, 'pyre_full_width', 'no'), +(3086, 3524, 'pyre_sidebar_position', 'right'), +(3087, 3524, 'pyre_portfolio_excerpt', ''), +(3088, 3524, 'pyre_portfolio_full_width', 'yes'), +(3089, 3524, 'pyre_portfolio_sidebar_position', 'right'), +(3090, 3524, 'pyre_page_bg_color', ''), +(3091, 3524, 'pyre_page_bg', ''), +(3092, 3524, 'pyre_page_bg_full', 'no'), +(3093, 3524, 'pyre_page_bg_repeat', 'repeat'), +(3094, 3524, 'pyre_page_title_bar_bg', ''), +(3095, 3524, 'pyre_page_title_bar_bg_color', ''), +(3096, 3524, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3097, 3524, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3098, 3524, '_wp_page_template', 'portfolio-one-column-text.php'), +(3099, 3524, 'avada_post_views_count', '62'), +(3100, 3524, 'pyre_page_title', 'yes'), +(3101, 3524, 'pyre_slider_type', 'no'), +(3102, 3524, 'pyre_slider', '0'), +(3103, 3524, 'pyre_wooslider', '0'), +(3104, 3524, 'pyre_flexslider', '0'), +(3105, 3524, 'pyre_revslider', '0'), +(3106, 3524, 'pyre_elasticslider', '0'), +(3107, 3524, 'pyre_fallback', ''), +(3108, 3524, 'pyre_full_width', 'no'), +(3109, 3524, 'pyre_sidebar_position', 'right'), +(3110, 3524, 'pyre_portfolio_excerpt', ''), +(3111, 3524, 'pyre_portfolio_full_width', 'yes'), +(3112, 3524, 'pyre_portfolio_sidebar_position', 'right'), +(3113, 3524, 'pyre_page_bg_color', ''), +(3114, 3524, 'pyre_page_bg', ''), +(3115, 3524, 'pyre_page_bg_full', 'no'), +(3116, 3524, 'pyre_page_bg_repeat', 'repeat'), +(3117, 3524, 'pyre_page_title_bar_bg', ''), +(3118, 3524, 'pyre_page_title_bar_bg_color', ''), +(3119, 3524, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3120, 3524, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3121, 3524, '_wp_page_template', 'portfolio-one-column-text.php'), +(3122, 3526, 'avada_post_views_count', '52'), +(3123, 3526, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3124, 3526, 'pyre_header_bg_repeat', 'repeat'), +(3125, 3526, 'pyre_header_bg_full', 'no'), +(3126, 3526, 'pyre_header_bg_color', ''), +(3127, 3526, 'pyre_header_bg', ''), +(3128, 3526, 'pyre_wide_page_bg_repeat', 'repeat'), +(3129, 3526, 'pyre_wide_page_bg_full', 'no'), +(3130, 3526, 'pyre_wide_page_bg_color', ''), +(3131, 3526, 'pyre_wide_page_bg', ''), +(3132, 3526, 'pyre_page_bg_layout', 'default'), +(3133, 3526, 'pyre_portfolio_filters', 'yes'), +(3134, 3526, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3135, 3526, 'pyre_page_title', 'yes'), +(3136, 3526, 'pyre_slider_type', 'no'), +(3137, 3526, 'pyre_slider', '0'), +(3138, 3526, 'pyre_wooslider', '0'), +(3139, 3526, 'pyre_flexslider', '0'), +(3140, 3526, 'pyre_revslider', '0'), +(3141, 3526, 'pyre_elasticslider', '0'), +(3142, 3526, 'pyre_fallback', ''), +(3143, 3526, 'pyre_full_width', 'no'), +(3144, 3526, 'pyre_sidebar_position', 'right'), +(3145, 3526, 'pyre_portfolio_excerpt', '47'), +(3146, 3526, 'pyre_portfolio_full_width', 'yes'), +(3147, 3526, 'pyre_portfolio_sidebar_position', 'right'), +(3148, 3526, 'pyre_page_bg_color', ''), +(3149, 3526, 'pyre_page_bg', ''), +(3150, 3526, 'pyre_page_bg_full', 'no'), +(3151, 3526, 'pyre_page_bg_repeat', 'repeat'), +(3152, 3526, 'pyre_page_title_bar_bg', ''), +(3153, 3526, 'pyre_page_title_bar_bg_color', ''), +(3154, 3526, 'pyre_page_title_text', 'yes'), +(3155, 3526, 'pyre_page_title_bar_bg_retina', ''), +(3156, 3526, 'pyre_page_title_bar_bg_full', 'no'), +(3157, 3526, 'pyre_image_rollover_icons', 'linkzoom'), +(3158, 3526, 'pyre_link_icon_url', ''), +(3159, 3526, '_wp_page_template', 'portfolio-two-column-text.php'), +(3160, 3526, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3161, 3526, 'pyre_page_title', 'yes'), +(3162, 3526, 'pyre_slider_type', 'no'), +(3163, 3526, 'pyre_slider', '0'), +(3164, 3526, 'pyre_wooslider', '0'), +(3165, 3526, 'pyre_flexslider', '0'), +(3166, 3526, 'pyre_revslider', '0'), +(3167, 3526, 'pyre_elasticslider', '0'), +(3168, 3526, 'pyre_fallback', ''), +(3169, 3526, 'pyre_full_width', 'no'), +(3170, 3526, 'pyre_sidebar_position', 'right'), +(3171, 3526, 'pyre_portfolio_excerpt', ''), +(3172, 3526, 'pyre_portfolio_full_width', 'yes'), +(3173, 3526, 'pyre_portfolio_sidebar_position', 'right'), +(3174, 3526, 'pyre_page_bg_color', ''), +(3175, 3526, 'pyre_page_bg', ''), +(3176, 3526, 'pyre_page_bg_full', 'no'), +(3177, 3526, 'pyre_page_bg_repeat', 'repeat'), +(3178, 3526, 'pyre_page_title_bar_bg', ''), +(3179, 3526, 'pyre_page_title_bar_bg_color', ''), +(3180, 3526, '_wp_page_template', 'portfolio-two-column-text.php'), +(3181, 3526, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3182, 3528, 'avada_post_views_count', '51'), +(3183, 3528, 'pyre_page_title_text', 'yes'), +(3184, 3528, 'pyre_header_bg_repeat', 'repeat'), +(3185, 3528, 'pyre_header_bg_full', 'no'), +(3186, 3528, 'pyre_header_bg_color', ''), +(3187, 3528, 'pyre_header_bg', ''), +(3188, 3528, 'pyre_wide_page_bg_repeat', 'repeat'), +(3189, 3528, 'pyre_wide_page_bg_full', 'no'), +(3190, 3528, 'pyre_wide_page_bg_color', ''), +(3191, 3528, 'pyre_wide_page_bg', ''), +(3192, 3528, 'pyre_page_bg_layout', 'default'), +(3193, 3528, 'pyre_portfolio_filters', 'yes'), +(3194, 3528, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3195, 3528, 'pyre_link_icon_url', ''), +(3196, 3528, 'pyre_image_rollover_icons', 'linkzoom'), +(3197, 3528, 'pyre_page_title_bar_bg_full', 'no'), +(3198, 3528, 'pyre_page_title_bar_bg_retina', ''), +(3199, 3528, 'pyre_page_title', 'yes'), +(3200, 3528, 'pyre_slider_type', 'no'), +(3201, 3528, 'pyre_slider', '0'), +(3202, 3528, 'pyre_wooslider', '0'), +(3203, 3528, 'pyre_flexslider', '0'), +(3204, 3528, 'pyre_revslider', '0'), +(3205, 3528, 'pyre_elasticslider', '0'), +(3206, 3528, 'pyre_fallback', ''), +(3207, 3528, 'pyre_full_width', 'no'), +(3208, 3528, 'pyre_sidebar_position', 'right'), +(3209, 3528, 'pyre_portfolio_excerpt', '32'), +(3210, 3528, 'pyre_portfolio_full_width', 'yes'), +(3211, 3528, 'pyre_portfolio_sidebar_position', 'right'), +(3212, 3528, 'pyre_page_bg_color', ''), +(3213, 3528, 'pyre_page_bg', ''), +(3214, 3528, 'pyre_page_bg_full', 'no'), +(3215, 3528, 'pyre_page_bg_repeat', 'repeat'), +(3216, 3528, 'pyre_page_title_bar_bg', ''), +(3217, 3528, 'pyre_page_title_bar_bg_color', ''), +(3218, 3528, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3219, 3528, '_wp_page_template', 'portfolio-three-column-text.php'), +(3220, 3528, 'pyre_page_title', 'yes'), +(3221, 3528, 'pyre_slider_type', 'no'), +(3222, 3528, 'pyre_slider', '0'), +(3223, 3528, 'pyre_wooslider', '0'), +(3224, 3528, 'pyre_flexslider', '0'), +(3225, 3528, 'pyre_revslider', '0'), +(3226, 3528, 'pyre_elasticslider', '0'), +(3227, 3528, 'pyre_fallback', ''), +(3228, 3528, 'pyre_full_width', 'no'), +(3229, 3528, 'pyre_sidebar_position', 'right'), +(3230, 3528, 'pyre_portfolio_excerpt', ''), +(3231, 3528, 'pyre_portfolio_full_width', 'yes'), +(3232, 3528, 'pyre_portfolio_sidebar_position', 'right'), +(3233, 3528, 'pyre_page_bg_color', ''), +(3234, 3528, 'pyre_page_bg', ''), +(3235, 3528, 'pyre_page_bg_full', 'no'), +(3236, 3528, 'pyre_page_bg_repeat', 'repeat'), +(3237, 3528, 'pyre_page_title_bar_bg', ''), +(3238, 3528, 'pyre_page_title_bar_bg_color', ''), +(3239, 3528, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3240, 3528, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3241, 3528, '_wp_page_template', 'portfolio-three-column-text.php'), +(3242, 3530, 'pyre_page_bg_layout', 'default'), +(3243, 3530, 'pyre_header_bg_repeat', 'repeat'), +(3244, 3530, 'avada_post_views_count', '59'), +(3245, 3530, 'pyre_link_icon_url', ''), +(3246, 3530, 'pyre_image_rollover_icons', 'linkzoom'), +(3247, 3530, 'pyre_portfolio_filters', 'yes'), +(3248, 3530, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3249, 3530, 'pyre_page_title_bar_bg_full', 'no'), +(3250, 3530, 'pyre_page_title_bar_bg_retina', ''), +(3251, 3530, 'pyre_page_title_text', 'yes'), +(3252, 3530, 'pyre_wide_page_bg', ''), +(3253, 3530, 'pyre_wide_page_bg_color', ''), +(3254, 3530, 'pyre_wide_page_bg_full', 'no'), +(3255, 3530, 'pyre_wide_page_bg_repeat', 'repeat'), +(3256, 3530, 'pyre_header_bg', ''), +(3257, 3530, 'pyre_header_bg_color', ''), +(3258, 3530, 'pyre_header_bg_full', 'no'), +(3259, 3530, 'pyre_page_title', 'yes'), +(3260, 3530, 'pyre_slider_type', 'no'), +(3261, 3530, 'pyre_slider', '0'), +(3262, 3530, 'pyre_wooslider', '0'), +(3263, 3530, 'pyre_flexslider', '0'), +(3264, 3530, 'pyre_revslider', '0'), +(3265, 3530, 'pyre_elasticslider', '0'), +(3266, 3530, 'pyre_fallback', ''), +(3267, 3530, 'pyre_full_width', 'no'), +(3268, 3530, 'pyre_sidebar_position', 'right'), +(3269, 3530, 'pyre_portfolio_excerpt', '22'), +(3270, 3530, 'pyre_portfolio_full_width', 'yes'), +(3271, 3530, 'pyre_portfolio_sidebar_position', 'right'), +(3272, 3530, 'pyre_page_bg_color', ''), +(3273, 3530, 'pyre_page_bg', ''), +(3274, 3530, 'pyre_page_bg_full', 'no'), +(3275, 3530, 'pyre_page_bg_repeat', 'repeat'), +(3276, 3530, 'pyre_page_title_bar_bg', ''), +(3277, 3530, 'pyre_page_title_bar_bg_color', ''), +(3278, 3530, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3279, 3530, '_wp_page_template', 'portfolio-four-column-text.php'), +(3280, 3530, 'pyre_page_title', 'yes'), +(3281, 3530, 'pyre_slider_type', 'no'), +(3282, 3530, 'pyre_slider', '0'), +(3283, 3530, 'pyre_wooslider', '0'), +(3284, 3530, 'pyre_flexslider', '0'), +(3285, 3530, 'pyre_revslider', '0'), +(3286, 3530, 'pyre_elasticslider', '0'), +(3287, 3530, 'pyre_fallback', ''), +(3288, 3530, 'pyre_full_width', 'no'), +(3289, 3530, 'pyre_sidebar_position', 'right'), +(3290, 3530, 'pyre_portfolio_excerpt', ''), +(3291, 3530, 'pyre_portfolio_full_width', 'yes'), +(3292, 3530, 'pyre_portfolio_sidebar_position', 'right'), +(3293, 3530, 'pyre_page_bg_color', ''), +(3294, 3530, 'pyre_page_bg', ''), +(3295, 3530, 'pyre_page_bg_full', 'no'), +(3296, 3530, 'pyre_page_bg_repeat', 'repeat'), +(3297, 3530, 'pyre_page_title_bar_bg', ''), +(3298, 3530, 'pyre_page_title_bar_bg_color', ''), +(3299, 3530, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3300, 3530, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3301, 3530, '_wp_page_template', 'portfolio-four-column-text.php'), +(3302, 3539, 'pyre_slider_type', 'no'), +(3303, 3539, 'pyre_slider', '0'), +(3304, 3539, 'pyre_wooslider', '0'), +(3305, 3539, 'pyre_flexslider', '0'), +(3306, 3539, 'pyre_revslider', '0'), +(3307, 3539, 'pyre_page_title', 'yes'), +(3308, 3539, 'pyre_fallback', ''), +(3309, 3539, 'pyre_full_width', 'no'), +(3310, 3539, 'pyre_sidebar_position', 'right'), +(3311, 3539, 'pyre_portfolio_excerpt', ''), +(3312, 3539, 'pyre_portfolio_full_width', 'yes'), +(3313, 3539, 'pyre_portfolio_sidebar_position', 'right'), +(3314, 3539, 'pyre_page_bg_color', ''), +(3315, 3539, 'pyre_page_bg', ''), +(3316, 3539, 'pyre_page_bg_full', 'no'), +(3317, 3539, 'pyre_page_bg_repeat', 'repeat'), +(3318, 3539, 'pyre_page_title_bar_bg', ''), +(3319, 3539, 'pyre_page_title_bar_bg_color', ''), +(3320, 3539, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3321, 3539, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3322, 3539, '_wp_page_template', 'full-width.php'), +(3323, 3539, 'pyre_elasticslider', '0'), +(3324, 3539, 'avada_post_views_count', '56'), +(3325, 3539, 'pyre_slider_type', 'no'), +(3326, 3539, 'pyre_slider', '0'), +(3327, 3539, 'pyre_wooslider', '0'), +(3328, 3539, 'pyre_flexslider', '0'), +(3329, 3539, 'pyre_revslider', '0'), +(3330, 3539, 'pyre_page_title', 'yes'), +(3331, 3539, 'pyre_fallback', ''), +(3332, 3539, 'pyre_full_width', 'no'), +(3333, 3539, 'pyre_sidebar_position', 'right'), +(3334, 3539, 'pyre_portfolio_excerpt', ''), +(3335, 3539, 'pyre_portfolio_full_width', 'yes'), +(3336, 3539, 'pyre_portfolio_sidebar_position', 'right'), +(3337, 3539, 'pyre_page_bg_color', ''), +(3338, 3539, 'pyre_page_bg', ''), +(3339, 3539, 'pyre_page_bg_full', 'no'), +(3340, 3539, 'pyre_page_bg_repeat', 'repeat'), +(3341, 3539, 'pyre_page_title_bar_bg', ''), +(3342, 3539, 'pyre_page_title_bar_bg_color', ''), +(3343, 3539, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3344, 3539, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3345, 3539, '_wp_page_template', 'full-width.php'), +(3346, 3539, 'pyre_elasticslider', '0'), +(3347, 3610, 'avada_post_views_count', '494'), +(3348, 3610, '_wp_page_template', '100-width.php'), +(3349, 3610, 'pyre_page_title_bar_bg_full', 'no'), +(3350, 3610, 'pyre_header_bg_repeat', 'repeat'), +(3351, 3610, 'pyre_header_bg_full', 'no'), +(3352, 3610, 'pyre_header_bg_color', ''), +(3353, 3610, 'pyre_header_bg', ''), +(3354, 3610, 'pyre_wide_page_bg_repeat', 'repeat'), +(3355, 3610, 'pyre_wide_page_bg_full', 'no'), +(3356, 3610, 'pyre_wide_page_bg_color', ''), +(3357, 3610, 'pyre_wide_page_bg', ''), +(3358, 3610, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3359, 3610, 'pyre_page_bg_layout', 'default'), +(3360, 3610, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3361, 3610, 'pyre_link_icon_url', ''), +(3362, 3610, 'pyre_image_rollover_icons', 'linkzoom'), +(3363, 3610, 'pyre_page_title_bar_bg_color', ''), +(3364, 3610, 'pyre_page_title_bar_bg_retina', ''), +(3365, 3610, 'pyre_page_title_bar_bg', ''), +(3366, 3610, 'pyre_page_bg_repeat', 'repeat'), +(3367, 3610, 'pyre_page_bg_full', 'no'), +(3368, 3610, 'pyre_page_bg', ''), +(3369, 3610, 'pyre_page_bg_color', ''), +(3370, 3610, 'pyre_portfolio_filters', 'yes'), +(3371, 3610, 'pyre_portfolio_sidebar_position', 'default'), +(3372, 3610, 'pyre_portfolio_full_width', 'yes'), +(3373, 3610, 'pyre_portfolio_excerpt', ''), +(3374, 3610, 'pyre_sidebar_position', 'default'), +(3375, 3610, 'pyre_full_width', 'no'), +(3376, 3610, 'pyre_fallback', ''), +(3377, 3610, 'pyre_elasticslider', '0'), +(3378, 3610, 'pyre_revslider', 'Avada_Full_Width'), +(3379, 3610, 'pyre_wooslider', '0'), +(3380, 3610, 'pyre_flexslider', '0'), +(3381, 3610, 'pyre_page_title', 'no'), +(3382, 3610, 'pyre_page_title_text', 'yes'), +(3383, 3610, 'pyre_slider_type', 'rev'), +(3384, 3610, 'pyre_slider', '0'), +(3385, 3610, 'pyre_page_title_custom_subheader', ''), +(3386, 3610, 'pyre_page_title_custom_text', ''), +(3387, 3610, 'pyre_page_title_height', ''), +(3388, 3610, 'pyre_page_title_bg_parallax', 'default'), +(3389, 3610, 'avada_post_views_count', '13'), +(3390, 3610, '_wp_page_template', '100-width.php'), +(3391, 3610, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3392, 3610, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3393, 3610, 'pyre_link_icon_url', ''), +(3394, 3610, 'pyre_image_rollover_icons', 'linkzoom'), +(3395, 3610, 'pyre_page_title_bar_bg_color', ''), +(3396, 3610, 'pyre_page_title_bar_bg_retina', ''), +(3397, 3610, 'pyre_page_title_bar_bg', ''), +(3398, 3610, 'pyre_page_bg_repeat', 'repeat'), +(3399, 3610, 'pyre_page_bg_full', 'no'), +(3400, 3610, 'pyre_page_bg', ''), +(3401, 3610, 'pyre_page_bg_color', ''), +(3402, 3610, 'pyre_portfolio_filters', 'yes'), +(3403, 3610, 'pyre_portfolio_sidebar_position', 'default'), +(3404, 3610, 'pyre_portfolio_full_width', 'yes'), +(3405, 3610, 'pyre_portfolio_excerpt', ''), +(3406, 3610, 'pyre_sidebar_position', 'default'), +(3407, 3610, 'pyre_full_width', 'no'), +(3408, 3610, 'pyre_fallback', ''), +(3409, 3610, 'pyre_elasticslider', '0'), +(3410, 3610, 'pyre_revslider', '0'), +(3411, 3610, 'pyre_wooslider', '0'), +(3412, 3610, 'pyre_flexslider', '0'), +(3413, 3610, 'pyre_page_title', 'no'), +(3414, 3610, 'pyre_page_title_text', 'yes'), +(3415, 3610, 'pyre_slider_type', 'no'), +(3416, 3610, 'pyre_slider', '0'), +(3417, 3628, 'avada_post_views_count', '66'), +(3418, 3628, 'pyre_page_title', 'no'), +(3419, 3628, 'pyre_page_title_text', 'yes'), +(3420, 3628, 'pyre_slider_type', 'rev'), +(3421, 3628, 'pyre_slider', '0'), +(3422, 3628, 'pyre_wooslider', '0'), +(3423, 3628, 'pyre_flexslider', '0'), +(3424, 3628, 'pyre_revslider', 'Avada_Full_Width'), +(3425, 3628, 'pyre_elasticslider', '0'), +(3426, 3628, 'pyre_fallback', ''), +(3427, 3628, 'pyre_full_width', 'no'), +(3428, 3628, 'pyre_sidebar_position', 'default'), +(3429, 3628, 'pyre_portfolio_excerpt', ''), +(3430, 3628, 'pyre_portfolio_full_width', 'yes'), +(3431, 3628, 'pyre_portfolio_sidebar_position', 'default'), +(3432, 3628, 'pyre_portfolio_filters', 'yes'), +(3433, 3628, 'pyre_page_bg_color', ''), +(3434, 3628, 'pyre_page_bg', ''), +(3435, 3628, 'pyre_page_bg_full', 'no'), +(3436, 3628, 'pyre_page_bg_repeat', 'repeat'), +(3437, 3628, 'pyre_page_title_bar_bg', ''), +(3438, 3628, 'pyre_page_title_bar_bg_retina', ''), +(3439, 3628, 'pyre_page_title_bar_bg_color', ''), +(3440, 3628, 'pyre_image_rollover_icons', 'linkzoom'), +(3441, 3628, 'pyre_link_icon_url', ''), +(3442, 3628, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3443, 3628, '_wp_page_template', '100-width.php'), +(3444, 3628, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3445, 3628, 'pyre_page_bg_layout', 'default'), +(3446, 3628, 'pyre_wide_page_bg', ''), +(3447, 3628, 'pyre_wide_page_bg_color', ''), +(3448, 3628, 'pyre_wide_page_bg_full', 'no'), +(3449, 3628, 'pyre_wide_page_bg_repeat', 'repeat'), +(3450, 3628, 'pyre_header_bg', ''), +(3451, 3628, 'pyre_header_bg_color', ''), +(3452, 3628, 'pyre_header_bg_full', 'no'), +(3453, 3628, 'pyre_header_bg_repeat', 'repeat'), +(3454, 3628, 'pyre_page_title_bar_bg_full', 'no'), +(3455, 3628, 'avada_post_views_count', '1'), +(3456, 3628, 'pyre_page_title', 'no'), +(3457, 3628, 'pyre_page_title_text', 'yes'), +(3458, 3628, 'pyre_slider_type', 'no'), +(3459, 3628, 'pyre_slider', '0'), +(3460, 3628, 'pyre_wooslider', '0'), +(3461, 3628, 'pyre_flexslider', '0'), +(3462, 3628, 'pyre_revslider', '0'), +(3463, 3628, 'pyre_elasticslider', '0'), +(3464, 3628, 'pyre_fallback', ''), +(3465, 3628, 'pyre_full_width', 'no'), +(3466, 3628, 'pyre_sidebar_position', 'default'), +(3467, 3628, 'pyre_portfolio_excerpt', ''), +(3468, 3628, 'pyre_portfolio_full_width', 'yes'), +(3469, 3628, 'pyre_portfolio_sidebar_position', 'default'), +(3470, 3628, 'pyre_portfolio_filters', 'yes'), +(3471, 3628, 'pyre_page_bg_color', ''), +(3472, 3628, 'pyre_page_bg', ''), +(3473, 3628, 'pyre_page_bg_full', 'no'), +(3474, 3628, 'pyre_page_bg_repeat', 'repeat'), +(3475, 3628, 'pyre_page_title_bar_bg', ''), +(3476, 3628, 'pyre_page_title_bar_bg_retina', ''), +(3477, 3628, 'pyre_page_title_bar_bg_color', ''), +(3478, 3628, 'pyre_image_rollover_icons', 'linkzoom'), +(3479, 3628, 'pyre_link_icon_url', ''), +(3480, 3628, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3481, 3628, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3482, 3628, '_wp_page_template', '100-width.php'), +(3483, 3638, 'avada_post_views_count', '76'), +(3484, 3638, 'pyre_page_title', 'no'), +(3485, 3638, 'pyre_page_title_text', 'yes'), +(3486, 3638, 'pyre_slider_type', 'rev'), +(3487, 3638, 'pyre_slider', '0'), +(3488, 3638, 'pyre_wooslider', '0'), +(3489, 3638, 'pyre_flexslider', '0'), +(3490, 3638, 'pyre_revslider', 'Avada_Full_Width'), +(3491, 3638, 'pyre_elasticslider', '0'), +(3492, 3638, 'pyre_fallback', ''), +(3493, 3638, 'pyre_full_width', 'no'), +(3494, 3638, 'pyre_sidebar_position', 'default'), +(3495, 3638, 'pyre_portfolio_excerpt', ''), +(3496, 3638, 'pyre_portfolio_full_width', 'yes'), +(3497, 3638, 'pyre_portfolio_sidebar_position', 'default'), +(3498, 3638, 'pyre_portfolio_filters', 'yes'), +(3499, 3638, 'pyre_page_bg_color', ''), +(3500, 3638, 'pyre_page_bg', ''), +(3501, 3638, 'pyre_page_bg_full', 'no'), +(3502, 3638, 'pyre_page_bg_repeat', 'repeat'), +(3503, 3638, 'pyre_page_title_bar_bg', ''), +(3504, 3638, 'pyre_page_title_bar_bg_retina', ''), +(3505, 3638, 'pyre_page_title_bar_bg_color', ''), +(3506, 3638, 'pyre_image_rollover_icons', 'linkzoom'), +(3507, 3638, 'pyre_link_icon_url', ''), +(3508, 3638, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3509, 3638, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3510, 3638, '_wp_page_template', '100-width.php'), +(3511, 3638, 'pyre_page_bg_layout', 'default'), +(3512, 3638, 'pyre_wide_page_bg', ''), +(3513, 3638, 'pyre_wide_page_bg_color', ''), +(3514, 3638, 'pyre_wide_page_bg_full', 'no'), +(3515, 3638, 'pyre_wide_page_bg_repeat', 'repeat'), +(3516, 3638, 'pyre_header_bg', ''), +(3517, 3638, 'pyre_header_bg_color', ''), +(3518, 3638, 'pyre_header_bg_full', 'no'), +(3519, 3638, 'pyre_header_bg_repeat', 'repeat'), +(3520, 3638, 'pyre_page_title_bar_bg_full', 'no'), +(3521, 3638, 'avada_post_views_count', '1'), +(3522, 3638, 'pyre_page_title', 'no'), +(3523, 3638, 'pyre_page_title_text', 'yes'), +(3524, 3638, 'pyre_slider_type', 'no'), +(3525, 3638, 'pyre_slider', '0'), +(3526, 3638, 'pyre_wooslider', '0'), +(3527, 3638, 'pyre_flexslider', '0'), +(3528, 3638, 'pyre_revslider', '0'), +(3529, 3638, 'pyre_elasticslider', '0'), +(3530, 3638, 'pyre_fallback', ''), +(3531, 3638, 'pyre_full_width', 'no'), +(3532, 3638, 'pyre_sidebar_position', 'default'), +(3533, 3638, 'pyre_portfolio_excerpt', ''), +(3534, 3638, 'pyre_portfolio_full_width', 'yes'), +(3535, 3638, 'pyre_portfolio_sidebar_position', 'default'), +(3536, 3638, 'pyre_portfolio_filters', 'yes'), +(3537, 3638, 'pyre_page_bg_color', ''), +(3538, 3638, 'pyre_page_bg', ''), +(3539, 3638, 'pyre_page_bg_full', 'no'), +(3540, 3638, 'pyre_page_bg_repeat', 'repeat'), +(3541, 3638, 'pyre_page_title_bar_bg', ''), +(3542, 3638, 'pyre_page_title_bar_bg_retina', ''), +(3543, 3638, 'pyre_page_title_bar_bg_color', ''), +(3544, 3638, 'pyre_image_rollover_icons', 'linkzoom'), +(3545, 3638, 'pyre_link_icon_url', ''), +(3546, 3638, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3547, 3638, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3548, 3638, '_wp_page_template', '100-width.php'), +(3549, 3652, 'avada_post_views_count', '158'), +(3550, 3652, 'pyre_page_title', 'no'), +(3551, 3652, 'pyre_page_title_text', 'yes'), +(3552, 3652, 'pyre_slider_type', 'no'), +(3553, 3652, 'pyre_slider', '0'), +(3554, 3652, 'pyre_wooslider', '0'), +(3555, 3652, 'pyre_flexslider', '0'), +(3556, 3652, 'pyre_revslider', '0'), +(3557, 3652, 'pyre_elasticslider', '0'), +(3558, 3652, 'pyre_fallback', ''), +(3559, 3652, 'pyre_full_width', 'no'), +(3560, 3652, 'pyre_sidebar_position', 'default'), +(3561, 3652, 'pyre_portfolio_excerpt', ''), +(3562, 3652, 'pyre_portfolio_full_width', 'yes'), +(3563, 3652, 'pyre_portfolio_sidebar_position', 'default'), +(3564, 3652, 'pyre_portfolio_filters', 'yes'), +(3565, 3652, 'pyre_page_bg_color', ''), +(3566, 3652, 'pyre_page_bg', ''), +(3567, 3652, 'pyre_page_bg_full', 'no'), +(3568, 3652, 'pyre_page_bg_repeat', 'repeat'), +(3569, 3652, 'pyre_page_title_bar_bg', ''), +(3570, 3652, 'pyre_page_title_bar_bg_retina', ''), +(3571, 3652, 'pyre_page_title_bar_bg_color', ''), +(3572, 3652, 'pyre_image_rollover_icons', 'linkzoom'), +(3573, 3652, 'pyre_link_icon_url', ''), +(3574, 3652, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3575, 3652, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3576, 3652, '_wp_page_template', 'full-width.php'), +(3577, 3652, 'avada_post_views_count', '0'), +(3578, 3652, 'pyre_page_title', 'no'), +(3579, 3652, 'pyre_page_title_text', 'yes'), +(3580, 3652, 'pyre_slider_type', 'no'), +(3581, 3652, 'pyre_slider', '0'), +(3582, 3652, 'pyre_wooslider', '0'), +(3583, 3652, 'pyre_flexslider', '0'), +(3584, 3652, 'pyre_revslider', '0'), +(3585, 3652, 'pyre_elasticslider', '0'), +(3586, 3652, 'pyre_fallback', ''), +(3587, 3652, 'pyre_full_width', 'no'), +(3588, 3652, 'pyre_sidebar_position', 'default'), +(3589, 3652, 'pyre_portfolio_excerpt', ''), +(3590, 3652, 'pyre_portfolio_full_width', 'yes'), +(3591, 3652, 'pyre_portfolio_sidebar_position', 'default'), +(3592, 3652, 'pyre_portfolio_filters', 'yes'), +(3593, 3652, 'pyre_page_bg_color', ''), +(3594, 3652, 'pyre_page_bg', ''), +(3595, 3652, 'pyre_page_bg_full', 'no'), +(3596, 3652, 'pyre_page_bg_repeat', 'repeat'), +(3597, 3652, 'pyre_page_title_bar_bg', ''), +(3598, 3652, 'pyre_page_title_bar_bg_retina', ''), +(3599, 3652, 'pyre_page_title_bar_bg_color', ''), +(3600, 3652, 'pyre_image_rollover_icons', 'linkzoom'), +(3601, 3652, 'pyre_link_icon_url', ''), +(3602, 3652, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3603, 3652, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3604, 3652, '_wp_page_template', 'full-width.php'), +(3605, 3655, 'pyre_page_title', 'no'), +(3606, 3655, 'pyre_page_title_text', 'yes'), +(3607, 3655, 'pyre_slider_type', 'no'), +(3608, 3655, 'pyre_slider', '0'), +(3609, 3655, 'pyre_wooslider', '0'), +(3610, 3655, 'pyre_flexslider', '0'), +(3611, 3655, 'pyre_revslider', '0'), +(3612, 3655, 'pyre_elasticslider', '0'), +(3613, 3655, 'pyre_fallback', ''), +(3614, 3655, 'pyre_full_width', 'no'), +(3615, 3655, 'pyre_sidebar_position', 'default'), +(3616, 3655, 'pyre_portfolio_excerpt', ''), +(3617, 3655, 'pyre_portfolio_full_width', 'yes'), +(3618, 3655, 'pyre_portfolio_sidebar_position', 'default'), +(3619, 3655, 'pyre_portfolio_filters', 'yes'), +(3620, 3655, 'pyre_page_bg_color', ''), +(3621, 3655, 'pyre_page_bg', ''), +(3622, 3655, 'pyre_page_bg_full', 'no'), +(3623, 3655, 'pyre_page_bg_repeat', 'repeat'), +(3624, 3655, 'pyre_page_title_bar_bg', ''), +(3625, 3655, 'pyre_page_title_bar_bg_retina', ''), +(3626, 3655, 'pyre_page_title_bar_bg_color', ''), +(3627, 3655, 'pyre_image_rollover_icons', 'linkzoom'), +(3628, 3655, 'pyre_link_icon_url', ''), +(3629, 3655, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3630, 3655, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3631, 3655, '_wp_page_template', '100-width.php'), +(3632, 3655, 'avada_post_views_count', '105'), +(3633, 3655, 'pyre_page_title', 'no'), +(3634, 3655, 'pyre_page_title_text', 'yes'), +(3635, 3655, 'pyre_slider_type', 'no'), +(3636, 3655, 'pyre_slider', '0'), +(3637, 3655, 'pyre_wooslider', '0'), +(3638, 3655, 'pyre_flexslider', '0'), +(3639, 3655, 'pyre_revslider', '0'), +(3640, 3655, 'pyre_elasticslider', '0'), +(3641, 3655, 'pyre_fallback', ''), +(3642, 3655, 'pyre_full_width', 'no'), +(3643, 3655, 'pyre_sidebar_position', 'default'), +(3644, 3655, 'pyre_portfolio_excerpt', ''), +(3645, 3655, 'pyre_portfolio_full_width', 'yes'), +(3646, 3655, 'pyre_portfolio_sidebar_position', 'default'), +(3647, 3655, 'pyre_portfolio_filters', 'yes'), +(3648, 3655, 'pyre_page_bg_color', ''), +(3649, 3655, 'pyre_page_bg', ''), +(3650, 3655, 'pyre_page_bg_full', 'no'), +(3651, 3655, 'pyre_page_bg_repeat', 'repeat'), +(3652, 3655, 'pyre_page_title_bar_bg', ''), +(3653, 3655, 'pyre_page_title_bar_bg_retina', ''), +(3654, 3655, 'pyre_page_title_bar_bg_color', ''), +(3655, 3655, 'pyre_image_rollover_icons', 'linkzoom'), +(3656, 3655, 'pyre_link_icon_url', ''), +(3657, 3655, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3658, 3655, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3659, 3655, '_wp_page_template', '100-width.php'), +(3660, 3658, 'avada_post_views_count', '93'), +(3661, 3658, 'pyre_page_title', 'yes'), +(3662, 3658, 'pyre_page_title_text', 'yes'), +(3663, 3658, 'pyre_slider_type', 'no'), +(3664, 3658, 'pyre_slider', '0'), +(3665, 3658, 'pyre_wooslider', '0'), +(3666, 3658, 'pyre_flexslider', '0'), +(3667, 3658, 'pyre_revslider', '0'), +(3668, 3658, 'pyre_elasticslider', '0'), +(3669, 3658, 'pyre_fallback', ''), +(3670, 3658, 'pyre_full_width', 'no'), +(3671, 3658, 'pyre_sidebar_position', 'default'), +(3672, 3658, 'pyre_portfolio_excerpt', ''), +(3673, 3658, 'pyre_portfolio_full_width', 'yes'), +(3674, 3658, 'pyre_portfolio_sidebar_position', 'default'), +(3675, 3658, 'pyre_portfolio_filters', 'yes'), +(3676, 3658, 'pyre_page_bg_color', ''), +(3677, 3658, 'pyre_page_bg', ''), +(3678, 3658, 'pyre_page_bg_full', 'no'), +(3679, 3658, 'pyre_page_bg_repeat', 'repeat'), +(3680, 3658, 'pyre_page_title_bar_bg', ''), +(3681, 3658, 'pyre_page_title_bar_bg_retina', ''), +(3682, 3658, 'pyre_page_title_bar_bg_color', ''), +(3683, 3658, 'pyre_image_rollover_icons', 'linkzoom'), +(3684, 3658, 'pyre_link_icon_url', ''), +(3685, 3658, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3686, 3658, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3687, 3658, '_wp_page_template', 'default'), +(3688, 3658, 'pyre_page_title_bar_bg_full', 'no'), +(3689, 3658, 'pyre_header_bg_repeat', 'repeat'), +(3690, 3658, 'pyre_header_bg_full', 'no'), +(3691, 3658, 'pyre_header_bg_color', ''), +(3692, 3658, 'pyre_header_bg', ''), +(3693, 3658, 'pyre_wide_page_bg_repeat', 'repeat'), +(3694, 3658, 'pyre_wide_page_bg_full', 'no'), +(3695, 3658, 'pyre_wide_page_bg_color', ''), +(3696, 3658, 'pyre_wide_page_bg', ''), +(3697, 3658, 'pyre_page_bg_layout', 'default'), +(3698, 3658, 'pyre_page_title', 'yes'), +(3699, 3658, 'pyre_page_title_text', 'yes'), +(3700, 3658, 'pyre_slider_type', 'no'), +(3701, 3658, 'pyre_slider', '0'), +(3702, 3658, 'pyre_wooslider', '0'), +(3703, 3658, 'pyre_flexslider', '0'), +(3704, 3658, 'pyre_revslider', '0'), +(3705, 3658, 'pyre_elasticslider', '0'), +(3706, 3658, 'pyre_fallback', ''), +(3707, 3658, 'pyre_full_width', 'no'), +(3708, 3658, 'pyre_sidebar_position', 'default'), +(3709, 3658, 'pyre_portfolio_excerpt', ''), +(3710, 3658, 'pyre_portfolio_full_width', 'yes'), +(3711, 3658, 'pyre_portfolio_sidebar_position', 'default'), +(3712, 3658, 'pyre_portfolio_filters', 'yes'), +(3713, 3658, 'pyre_page_bg_color', ''), +(3714, 3658, 'pyre_page_bg', ''), +(3715, 3658, 'pyre_page_bg_full', 'no'), +(3716, 3658, 'pyre_page_bg_repeat', 'repeat'), +(3717, 3658, 'pyre_page_title_bar_bg', ''), +(3718, 3658, 'pyre_page_title_bar_bg_retina', ''), +(3719, 3658, 'pyre_page_title_bar_bg_color', ''), +(3720, 3658, 'pyre_image_rollover_icons', 'linkzoom'), +(3721, 3658, 'pyre_link_icon_url', ''), +(3722, 3658, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3723, 3658, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3724, 3658, '_wp_page_template', 'default'), +(3725, 3660, 'avada_post_views_count', '53'), +(3726, 3660, 'pyre_page_title', 'no'), +(3727, 3660, 'pyre_page_title_text', 'yes'), +(3728, 3660, 'pyre_slider_type', 'no'), +(3729, 3660, 'pyre_slider', '0'), +(3730, 3660, 'pyre_wooslider', '0'), +(3731, 3660, 'pyre_flexslider', '0'), +(3732, 3660, 'pyre_revslider', '0'), +(3733, 3660, 'pyre_elasticslider', '0'), +(3734, 3660, 'pyre_fallback', ''), +(3735, 3660, 'pyre_full_width', 'no'), +(3736, 3660, 'pyre_sidebar_position', 'default'), +(3737, 3660, 'pyre_portfolio_excerpt', ''), +(3738, 3660, 'pyre_portfolio_full_width', 'yes'), +(3739, 3660, 'pyre_portfolio_sidebar_position', 'default'), +(3740, 3660, 'pyre_portfolio_filters', 'yes'), +(3741, 3660, 'pyre_page_bg_color', ''), +(3742, 3660, 'pyre_page_bg', ''), +(3743, 3660, 'pyre_page_bg_full', 'no'), +(3744, 3660, 'pyre_page_bg_repeat', 'repeat'), +(3745, 3660, 'pyre_page_title_bar_bg', ''), +(3746, 3660, 'pyre_page_title_bar_bg_retina', ''), +(3747, 3660, 'pyre_page_title_bar_bg_color', ''), +(3748, 3660, 'pyre_image_rollover_icons', 'linkzoom'), +(3749, 3660, 'pyre_link_icon_url', ''), +(3750, 3660, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3751, 3660, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3752, 3660, '_wp_page_template', 'full-width.php'), +(3753, 3660, 'pyre_page_title', 'no'), +(3754, 3660, 'pyre_page_title_text', 'yes'), +(3755, 3660, 'pyre_slider_type', 'no'), +(3756, 3660, 'pyre_slider', '0'), +(3757, 3660, 'pyre_wooslider', '0'), +(3758, 3660, 'pyre_flexslider', '0'), +(3759, 3660, 'pyre_revslider', '0'), +(3760, 3660, 'pyre_elasticslider', '0'), +(3761, 3660, 'pyre_fallback', ''), +(3762, 3660, 'pyre_full_width', 'no'), +(3763, 3660, 'pyre_sidebar_position', 'default'), +(3764, 3660, 'pyre_portfolio_excerpt', ''), +(3765, 3660, 'pyre_portfolio_full_width', 'yes'), +(3766, 3660, 'pyre_portfolio_sidebar_position', 'default'), +(3767, 3660, 'pyre_portfolio_filters', 'yes'), +(3768, 3660, 'pyre_page_bg_color', ''), +(3769, 3660, 'pyre_page_bg', ''), +(3770, 3660, 'pyre_page_bg_full', 'no'), +(3771, 3660, 'pyre_page_bg_repeat', 'repeat'), +(3772, 3660, 'pyre_page_title_bar_bg', ''), +(3773, 3660, 'pyre_page_title_bar_bg_retina', ''), +(3774, 3660, 'pyre_page_title_bar_bg_color', ''), +(3775, 3660, 'pyre_image_rollover_icons', 'linkzoom'), +(3776, 3660, 'pyre_link_icon_url', ''), +(3777, 3660, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3778, 3660, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3779, 3660, '_wp_page_template', 'full-width.php'), +(3780, 3662, 'pyre_page_title_bar_bg_full', 'no'), +(3781, 3662, 'pyre_header_bg_repeat', 'repeat'), +(3782, 3662, 'pyre_header_bg_full', 'no'), +(3783, 3662, 'pyre_page_title', 'no'), +(3784, 3662, 'pyre_page_title_text', 'yes'), +(3785, 3662, 'pyre_slider_type', 'no'), +(3786, 3662, 'pyre_slider', '0'), +(3787, 3662, 'pyre_wooslider', '0'), +(3788, 3662, 'pyre_flexslider', '0'), +(3789, 3662, 'pyre_revslider', '0'), +(3790, 3662, 'pyre_elasticslider', '0'), +(3791, 3662, 'pyre_fallback', ''), +(3792, 3662, 'pyre_full_width', 'no'), +(3793, 3662, 'pyre_sidebar_position', 'default'), +(3794, 3662, 'pyre_portfolio_excerpt', ''), +(3795, 3662, 'pyre_portfolio_full_width', 'yes'), +(3796, 3662, 'pyre_portfolio_sidebar_position', 'default'); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(3797, 3662, 'pyre_portfolio_filters', 'yes'), +(3798, 3662, 'pyre_page_bg_color', ''), +(3799, 3662, 'pyre_page_bg', ''), +(3800, 3662, 'pyre_page_bg_full', 'no'), +(3801, 3662, 'pyre_page_bg_repeat', 'repeat'), +(3802, 3662, 'pyre_page_title_bar_bg', ''), +(3803, 3662, 'pyre_page_title_bar_bg_retina', ''), +(3804, 3662, 'pyre_page_title_bar_bg_color', ''), +(3805, 3662, 'pyre_image_rollover_icons', 'linkzoom'), +(3806, 3662, 'pyre_link_icon_url', ''), +(3807, 3662, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3808, 3662, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3809, 3662, '_wp_page_template', '100-width.php'), +(3810, 3662, 'pyre_header_bg_color', ''), +(3811, 3662, 'pyre_header_bg', ''), +(3812, 3662, 'pyre_wide_page_bg_repeat', 'repeat'), +(3813, 3662, 'pyre_wide_page_bg_full', 'no'), +(3814, 3662, 'pyre_wide_page_bg_color', ''), +(3815, 3662, 'pyre_wide_page_bg', ''), +(3816, 3662, 'pyre_page_bg_layout', 'default'), +(3817, 3662, 'avada_post_views_count', '64'), +(3818, 3664, 'avada_post_views_count', '94'), +(3819, 3664, 'pyre_wide_page_bg_full', 'no'), +(3820, 3664, 'pyre_wide_page_bg_color', ''), +(3821, 3664, 'pyre_image_rollover_icons', 'linkzoom'), +(3822, 3664, 'pyre_link_icon_url', ''), +(3823, 3664, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3824, 3664, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3825, 3664, '_wp_page_template', '100-width.php'), +(3826, 3664, 'pyre_page_title_bar_bg_color', ''), +(3827, 3664, 'pyre_page_title', 'no'), +(3828, 3664, 'pyre_page_title_text', 'yes'), +(3829, 3664, 'pyre_slider_type', 'no'), +(3830, 3664, 'pyre_slider', '0'), +(3831, 3664, 'pyre_wooslider', '0'), +(3832, 3664, 'pyre_flexslider', '0'), +(3833, 3664, 'pyre_revslider', '0'), +(3834, 3664, 'pyre_elasticslider', '0'), +(3835, 3664, 'pyre_fallback', ''), +(3836, 3664, 'pyre_full_width', 'no'), +(3837, 3664, 'pyre_sidebar_position', 'default'), +(3838, 3664, 'pyre_portfolio_excerpt', ''), +(3839, 3664, 'pyre_portfolio_full_width', 'yes'), +(3840, 3664, 'pyre_portfolio_sidebar_position', 'default'), +(3841, 3664, 'pyre_portfolio_filters', 'yes'), +(3842, 3664, 'pyre_page_bg_color', ''), +(3843, 3664, 'pyre_page_bg', ''), +(3844, 3664, 'pyre_page_bg_full', 'no'), +(3845, 3664, 'pyre_page_bg_repeat', 'repeat'), +(3846, 3664, 'pyre_page_title_bar_bg', ''), +(3847, 3664, 'pyre_page_title_bar_bg_retina', ''), +(3848, 3664, 'pyre_page_bg_layout', 'default'), +(3849, 3664, 'pyre_wide_page_bg', ''), +(3850, 3664, 'pyre_page_title_bar_bg_full', 'no'), +(3851, 3664, 'pyre_header_bg_repeat', 'repeat'), +(3852, 3664, 'pyre_header_bg_full', 'no'), +(3853, 3664, 'pyre_header_bg_color', ''), +(3854, 3664, 'pyre_header_bg', ''), +(3855, 3664, 'pyre_wide_page_bg_repeat', 'repeat'), +(3856, 3664, 'avada_post_views_count', '0'), +(3857, 3664, 'pyre_image_rollover_icons', 'linkzoom'), +(3858, 3664, 'pyre_link_icon_url', ''), +(3859, 3664, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3860, 3664, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3861, 3664, '_wp_page_template', '100-width.php'), +(3862, 3664, 'pyre_page_title_bar_bg_color', ''), +(3863, 3664, 'pyre_page_title', 'no'), +(3864, 3664, 'pyre_page_title_text', 'yes'), +(3865, 3664, 'pyre_slider_type', 'no'), +(3866, 3664, 'pyre_slider', '0'), +(3867, 3664, 'pyre_wooslider', '0'), +(3868, 3664, 'pyre_flexslider', '0'), +(3869, 3664, 'pyre_revslider', '0'), +(3870, 3664, 'pyre_elasticslider', '0'), +(3871, 3664, 'pyre_fallback', ''), +(3872, 3664, 'pyre_full_width', 'no'), +(3873, 3664, 'pyre_sidebar_position', 'default'), +(3874, 3664, 'pyre_portfolio_excerpt', ''), +(3875, 3664, 'pyre_portfolio_full_width', 'yes'), +(3876, 3664, 'pyre_portfolio_sidebar_position', 'default'), +(3877, 3664, 'pyre_portfolio_filters', 'yes'), +(3878, 3664, 'pyre_page_bg_color', ''), +(3879, 3664, 'pyre_page_bg', ''), +(3880, 3664, 'pyre_page_bg_full', 'no'), +(3881, 3664, 'pyre_page_bg_repeat', 'repeat'), +(3882, 3664, 'pyre_page_title_bar_bg', ''), +(3883, 3664, 'pyre_page_title_bar_bg_retina', ''), +(3884, 3670, 'avada_post_views_count', '64'), +(3885, 3670, 'pyre_page_title', 'no'), +(3886, 3670, 'pyre_page_title_text', 'yes'), +(3887, 3670, 'pyre_slider_type', 'no'), +(3888, 3670, 'pyre_slider', '0'), +(3889, 3670, 'pyre_wooslider', '0'), +(3890, 3670, 'pyre_flexslider', '0'), +(3891, 3670, 'pyre_revslider', '0'), +(3892, 3670, 'pyre_elasticslider', '0'), +(3893, 3670, 'pyre_fallback', ''), +(3894, 3670, 'pyre_full_width', 'no'), +(3895, 3670, 'pyre_sidebar_position', 'default'), +(3896, 3670, 'pyre_portfolio_excerpt', ''), +(3897, 3670, 'pyre_portfolio_full_width', 'yes'), +(3898, 3670, 'pyre_portfolio_sidebar_position', 'default'), +(3899, 3670, 'pyre_portfolio_filters', 'yes'), +(3900, 3670, 'pyre_page_bg_color', ''), +(3901, 3670, 'pyre_page_bg', ''), +(3902, 3670, 'pyre_page_bg_full', 'no'), +(3903, 3670, 'pyre_page_bg_repeat', 'repeat'), +(3904, 3670, 'pyre_page_title_bar_bg', ''), +(3905, 3670, 'pyre_page_title_bar_bg_retina', ''), +(3906, 3670, 'pyre_page_title_bar_bg_color', ''), +(3907, 3670, 'pyre_image_rollover_icons', 'linkzoom'), +(3908, 3670, 'pyre_link_icon_url', ''), +(3909, 3670, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3910, 3670, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3911, 3670, '_wp_page_template', '100-width.php'), +(3912, 3670, 'pyre_page_title_bar_bg_full', 'no'), +(3913, 3670, 'pyre_header_bg_repeat', 'repeat'), +(3914, 3670, 'pyre_header_bg_full', 'no'), +(3915, 3670, 'pyre_header_bg_color', ''), +(3916, 3670, 'pyre_header_bg', ''), +(3917, 3670, 'pyre_wide_page_bg_repeat', 'repeat'), +(3918, 3670, 'pyre_wide_page_bg_full', 'no'), +(3919, 3670, 'pyre_wide_page_bg_color', ''), +(3920, 3670, 'pyre_wide_page_bg', ''), +(3921, 3670, 'pyre_page_bg_layout', 'default'), +(3922, 3670, 'avada_post_views_count', '0'), +(3923, 3670, 'pyre_page_title', 'no'), +(3924, 3670, 'pyre_page_title_text', 'yes'), +(3925, 3670, 'pyre_slider_type', 'no'), +(3926, 3670, 'pyre_slider', '0'), +(3927, 3670, 'pyre_wooslider', '0'), +(3928, 3670, 'pyre_flexslider', '0'), +(3929, 3670, 'pyre_revslider', '0'), +(3930, 3670, 'pyre_elasticslider', '0'), +(3931, 3670, 'pyre_fallback', ''), +(3932, 3670, 'pyre_full_width', 'no'), +(3933, 3670, 'pyre_sidebar_position', 'default'), +(3934, 3670, 'pyre_portfolio_excerpt', ''), +(3935, 3670, 'pyre_portfolio_full_width', 'yes'), +(3936, 3670, 'pyre_portfolio_sidebar_position', 'default'), +(3937, 3670, 'pyre_portfolio_filters', 'yes'), +(3938, 3670, 'pyre_page_bg_color', ''), +(3939, 3670, 'pyre_page_bg', ''), +(3940, 3670, 'pyre_page_bg_full', 'no'), +(3941, 3670, 'pyre_page_bg_repeat', 'repeat'), +(3942, 3670, 'pyre_page_title_bar_bg', ''), +(3943, 3670, 'pyre_page_title_bar_bg_retina', ''), +(3944, 3670, 'pyre_page_title_bar_bg_color', ''), +(3945, 3670, 'pyre_image_rollover_icons', 'linkzoom'), +(3946, 3670, 'pyre_link_icon_url', ''), +(3947, 3670, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3948, 3670, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3949, 3670, '_wp_page_template', '100-width.php'), +(3950, 3678, 'pyre_page_title', 'yes'), +(3951, 3678, 'pyre_page_title_text', 'yes'), +(3952, 3678, 'pyre_slider_type', 'no'), +(3953, 3678, 'pyre_slider', '0'), +(3954, 3678, 'pyre_wooslider', '0'), +(3955, 3678, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(3956, 3678, 'pyre_page_title_bar_bg', ''), +(3957, 3678, 'pyre_page_title_bar_bg_retina', ''), +(3958, 3678, 'pyre_page_title_bar_bg_color', ''), +(3959, 3678, 'pyre_image_rollover_icons', 'linkzoom'), +(3960, 3678, 'pyre_link_icon_url', ''), +(3961, 3678, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3962, 3678, 'pyre_flexslider', '0'), +(3963, 3678, 'pyre_revslider', '0'), +(3964, 3678, 'pyre_elasticslider', '0'), +(3965, 3678, 'pyre_fallback', ''), +(3966, 3678, 'pyre_full_width', 'no'), +(3967, 3678, 'pyre_sidebar_position', 'default'), +(3968, 3678, 'pyre_portfolio_excerpt', ''), +(3969, 3678, 'pyre_portfolio_full_width', 'yes'), +(3970, 3678, 'pyre_portfolio_sidebar_position', 'default'), +(3971, 3678, 'pyre_portfolio_filters', 'yes'), +(3972, 3678, 'pyre_page_bg_color', ''), +(3973, 3678, 'pyre_page_bg', ''), +(3974, 3678, 'pyre_page_bg_full', 'no'), +(3975, 3678, 'pyre_page_bg_repeat', 'repeat'), +(3976, 3678, '_wp_page_template', 'full-width.php'), +(3977, 3678, 'pyre_wide_page_bg_repeat', 'repeat'), +(3978, 3678, 'avada_post_views_count', '75'), +(3979, 3678, 'pyre_wide_page_bg_full', 'no'), +(3980, 3678, 'pyre_wide_page_bg_color', ''), +(3981, 3678, 'pyre_wide_page_bg', ''), +(3982, 3678, 'pyre_page_bg_layout', 'default'), +(3983, 3678, 'pyre_page_title_bar_bg_full', 'no'), +(3984, 3678, 'pyre_header_bg_repeat', 'repeat'), +(3985, 3678, 'pyre_header_bg_full', 'no'), +(3986, 3678, 'pyre_header_bg_color', ''), +(3987, 3678, 'pyre_header_bg', ''), +(3988, 3678, 'pyre_page_title', 'yes'), +(3989, 3678, 'pyre_page_title_text', 'yes'), +(3990, 3678, 'pyre_slider_type', 'no'), +(3991, 3678, 'pyre_slider', '0'), +(3992, 3678, 'pyre_wooslider', '0'), +(3993, 3678, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(3994, 3678, 'pyre_page_title_bar_bg', ''), +(3995, 3678, 'pyre_page_title_bar_bg_retina', ''), +(3996, 3678, 'pyre_page_title_bar_bg_color', ''), +(3997, 3678, 'pyre_image_rollover_icons', 'linkzoom'), +(3998, 3678, 'pyre_link_icon_url', ''), +(3999, 3678, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4000, 3678, 'pyre_flexslider', '0'), +(4001, 3678, 'pyre_revslider', '0'), +(4002, 3678, 'pyre_elasticslider', '0'), +(4003, 3678, 'pyre_fallback', ''), +(4004, 3678, 'pyre_full_width', 'no'), +(4005, 3678, 'pyre_sidebar_position', 'default'), +(4006, 3678, 'pyre_portfolio_excerpt', ''), +(4007, 3678, 'pyre_portfolio_full_width', 'yes'), +(4008, 3678, 'pyre_portfolio_sidebar_position', 'default'), +(4009, 3678, 'pyre_portfolio_filters', 'yes'), +(4010, 3678, 'pyre_page_bg_color', ''), +(4011, 3678, 'pyre_page_bg', ''), +(4012, 3678, 'pyre_page_bg_full', 'no'), +(4013, 3678, 'pyre_page_bg_repeat', 'repeat'), +(4014, 3678, '_wp_page_template', 'full-width.php'), +(4015, 4204, 'pyre_page_title', 'yes'), +(4016, 4204, 'pyre_slider_type', 'no'), +(4017, 4204, 'pyre_slider', '0'), +(4018, 4204, 'pyre_wooslider', '0'), +(4019, 4204, 'pyre_flexslider', '0'), +(4020, 4204, 'pyre_revslider', '0'), +(4021, 4204, 'pyre_elasticslider', '0'), +(4022, 4204, 'pyre_fallback', ''), +(4023, 4204, 'pyre_full_width', 'no'), +(4024, 4204, 'pyre_sidebar_position', 'right'), +(4025, 4204, 'pyre_portfolio_excerpt', ''), +(4026, 4204, 'pyre_portfolio_full_width', 'yes'), +(4027, 4204, 'pyre_portfolio_sidebar_position', 'right'), +(4028, 4204, 'pyre_page_bg_color', ''), +(4029, 4204, 'pyre_page_bg', ''), +(4030, 4204, 'pyre_page_bg_full', 'no'), +(4031, 4204, 'pyre_page_bg_repeat', 'repeat'), +(4032, 4204, 'pyre_page_title_bar_bg', ''), +(4033, 4204, 'pyre_page_title_bar_bg_color', ''), +(4034, 4204, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4035, 4204, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4036, 4204, '_wp_page_template', 'full-width.php'), +(4037, 3697, 'pyre_page_title', 'yes'), +(4038, 3697, 'pyre_page_bg_layout', 'default'), +(4039, 3697, 'pyre_wide_page_bg', ''), +(4040, 3697, 'pyre_wide_page_bg_color', ''), +(4041, 3697, 'pyre_wide_page_bg_full', 'no'), +(4042, 3697, 'pyre_wide_page_bg_repeat', 'repeat'), +(4043, 3697, 'pyre_header_bg', ''), +(4044, 3697, 'pyre_header_bg_color', ''), +(4045, 3697, 'pyre_header_bg_full', 'no'), +(4046, 3697, 'pyre_header_bg_repeat', 'repeat'), +(4047, 3697, 'pyre_page_title_bar_bg_full', 'no'), +(4048, 3697, 'avada_post_views_count', '171'), +(4049, 3697, 'pyre_page_title_text', 'yes'), +(4050, 3697, 'pyre_slider_type', 'no'), +(4051, 3697, '_wp_page_template', 'full-width.php'), +(4052, 3697, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4053, 3697, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4054, 3697, 'pyre_wooslider', '0'), +(4055, 3697, 'pyre_flexslider', '0'), +(4056, 3697, 'pyre_revslider', '0'), +(4057, 3697, 'pyre_elasticslider', '0'), +(4058, 3697, 'pyre_fallback', ''), +(4059, 3697, 'pyre_full_width', 'no'), +(4060, 3697, 'pyre_sidebar_position', 'default'), +(4061, 3697, 'pyre_portfolio_excerpt', ''), +(4062, 3697, 'pyre_portfolio_full_width', 'yes'), +(4063, 3697, 'pyre_portfolio_sidebar_position', 'default'), +(4064, 3697, 'pyre_portfolio_filters', 'yes'), +(4065, 3697, 'pyre_page_bg_color', ''), +(4066, 3697, 'pyre_page_bg', ''), +(4067, 3697, 'pyre_page_bg_full', 'no'), +(4068, 3697, 'pyre_page_bg_repeat', 'repeat'), +(4069, 3697, 'pyre_page_title_bar_bg', ''), +(4070, 3697, 'pyre_page_title_bar_bg_retina', ''), +(4071, 3697, 'pyre_page_title_bar_bg_color', ''), +(4072, 3697, 'pyre_image_rollover_icons', 'linkzoom'), +(4073, 3697, 'pyre_link_icon_url', ''), +(4074, 3697, 'pyre_slider', '0'), +(4075, 3697, 'pyre_page_title', 'yes'), +(4076, 3697, 'pyre_page_bg_layout', 'default'), +(4077, 3697, 'pyre_wide_page_bg', ''), +(4078, 3697, 'pyre_wide_page_bg_color', ''), +(4079, 3697, 'pyre_wide_page_bg_full', 'no'), +(4080, 3697, 'pyre_wide_page_bg_repeat', 'repeat'), +(4081, 3697, 'pyre_header_bg', ''), +(4082, 3697, 'pyre_header_bg_color', ''), +(4083, 3697, 'pyre_header_bg_full', 'no'), +(4084, 3697, 'pyre_header_bg_repeat', 'repeat'), +(4085, 3697, 'pyre_page_title_bar_bg_full', 'no'), +(4086, 3697, 'avada_post_views_count', '18'), +(4087, 3697, 'pyre_page_title_text', 'yes'), +(4088, 3697, 'pyre_slider_type', 'no'), +(4089, 3697, '_wp_page_template', 'full-width.php'), +(4090, 3697, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4091, 3697, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4092, 3697, 'pyre_wooslider', '0'), +(4093, 3697, 'pyre_flexslider', '0'), +(4094, 3697, 'pyre_revslider', '0'), +(4095, 3697, 'pyre_elasticslider', '0'), +(4096, 3697, 'pyre_fallback', ''), +(4097, 3697, 'pyre_full_width', 'no'), +(4098, 3697, 'pyre_sidebar_position', 'default'), +(4099, 3697, 'pyre_portfolio_excerpt', ''), +(4100, 3697, 'pyre_portfolio_full_width', 'yes'), +(4101, 3697, 'pyre_portfolio_sidebar_position', 'default'), +(4102, 3697, 'pyre_portfolio_filters', 'yes'), +(4103, 3697, 'pyre_page_bg_color', ''), +(4104, 3697, 'pyre_page_bg', ''), +(4105, 3697, 'pyre_page_bg_full', 'no'), +(4106, 3697, 'pyre_page_bg_repeat', 'repeat'), +(4107, 3697, 'pyre_page_title_bar_bg', ''), +(4108, 3697, 'pyre_page_title_bar_bg_retina', ''), +(4109, 3697, 'pyre_page_title_bar_bg_color', ''), +(4110, 3697, 'pyre_image_rollover_icons', 'linkzoom'), +(4111, 3697, 'pyre_link_icon_url', ''), +(4112, 3697, 'pyre_slider', '0'), +(4113, 3698, 'pyre_page_title_bar_bg_full', 'no'), +(4114, 3698, 'pyre_header_bg_repeat', 'repeat'), +(4115, 3698, 'avada_post_views_count', '125'), +(4116, 3698, 'pyre_page_bg_layout', 'default'), +(4117, 3698, 'pyre_wide_page_bg', ''), +(4118, 3698, 'pyre_wide_page_bg_color', ''), +(4119, 3698, 'pyre_wide_page_bg_full', 'no'), +(4120, 3698, 'pyre_wide_page_bg_repeat', 'repeat'), +(4121, 3698, 'pyre_header_bg', ''), +(4122, 3698, 'pyre_header_bg_color', ''), +(4123, 3698, 'pyre_header_bg_full', 'no'), +(4124, 3698, 'pyre_fallback', ''), +(4125, 3698, 'pyre_full_width', 'no'), +(4126, 3698, 'pyre_sidebar_position', 'default'), +(4127, 3698, 'pyre_portfolio_excerpt', ''), +(4128, 3698, 'pyre_portfolio_full_width', 'yes'), +(4129, 3698, 'pyre_portfolio_sidebar_position', 'default'), +(4130, 3698, 'pyre_portfolio_filters', 'yes'), +(4131, 3698, 'pyre_page_bg_color', ''), +(4132, 3698, 'pyre_page_bg', ''), +(4133, 3698, 'pyre_page_bg_full', 'no'), +(4134, 3698, 'pyre_page_bg_repeat', 'repeat'), +(4135, 3698, 'pyre_page_title_bar_bg', ''), +(4136, 3698, 'pyre_page_title_bar_bg_retina', ''), +(4137, 3698, 'pyre_page_title_bar_bg_color', ''), +(4138, 3698, 'pyre_image_rollover_icons', 'linkzoom'), +(4139, 3698, 'pyre_link_icon_url', ''), +(4140, 3698, 'pyre_elasticslider', '0'), +(4141, 3698, 'pyre_revslider', '0'), +(4142, 3698, 'pyre_flexslider', '0'), +(4143, 3698, 'pyre_wooslider', '0'), +(4144, 3698, 'pyre_slider', '0'), +(4145, 3698, '_wp_page_template', 'full-width.php'), +(4146, 3698, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4147, 3698, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4148, 3698, 'pyre_page_title', 'yes'), +(4149, 3698, 'pyre_page_title_text', 'yes'), +(4150, 3698, 'pyre_slider_type', 'no'), +(4151, 3698, 'pyre_page_title_bar_bg_full', 'no'), +(4152, 3698, 'pyre_header_bg_repeat', 'repeat'), +(4153, 3698, 'avada_post_views_count', '3'), +(4154, 3698, 'pyre_page_bg_layout', 'default'), +(4155, 3698, 'pyre_wide_page_bg', ''), +(4156, 3698, 'pyre_wide_page_bg_color', ''), +(4157, 3698, 'pyre_wide_page_bg_full', 'no'), +(4158, 3698, 'pyre_wide_page_bg_repeat', 'repeat'), +(4159, 3698, 'pyre_header_bg', ''), +(4160, 3698, 'pyre_header_bg_color', ''), +(4161, 3698, 'pyre_header_bg_full', 'no'), +(4162, 3698, 'pyre_fallback', ''), +(4163, 3698, 'pyre_full_width', 'no'), +(4164, 3698, 'pyre_sidebar_position', 'default'), +(4165, 3698, 'pyre_portfolio_excerpt', ''), +(4166, 3698, 'pyre_portfolio_full_width', 'yes'), +(4167, 3698, 'pyre_portfolio_sidebar_position', 'default'), +(4168, 3698, 'pyre_portfolio_filters', 'yes'), +(4169, 3698, 'pyre_page_bg_color', ''), +(4170, 3698, 'pyre_page_bg', ''), +(4171, 3698, 'pyre_page_bg_full', 'no'), +(4172, 3698, 'pyre_page_bg_repeat', 'repeat'), +(4173, 3698, 'pyre_page_title_bar_bg', ''), +(4174, 3698, 'pyre_page_title_bar_bg_retina', ''), +(4175, 3698, 'pyre_page_title_bar_bg_color', ''), +(4176, 3698, 'pyre_image_rollover_icons', 'linkzoom'), +(4177, 3698, 'pyre_link_icon_url', ''), +(4178, 3698, 'pyre_elasticslider', '0'), +(4179, 3698, 'pyre_revslider', '0'), +(4180, 3698, 'pyre_flexslider', '0'), +(4181, 3698, 'pyre_wooslider', '0'), +(4182, 3698, 'pyre_slider', '0'), +(4183, 3698, '_wp_page_template', 'full-width.php'), +(4184, 3698, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4185, 3698, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4186, 3698, 'pyre_page_title', 'yes'), +(4187, 3698, 'pyre_page_title_text', 'yes'), +(4188, 3698, 'pyre_slider_type', 'no'), +(4189, 3699, 'pyre_page_title_bar_bg_full', 'no'), +(4190, 3699, 'pyre_header_bg_repeat', 'repeat'), +(4191, 3699, 'pyre_header_bg_full', 'no'), +(4192, 3699, 'pyre_header_bg_color', ''), +(4193, 3699, 'pyre_header_bg', ''), +(4194, 3699, 'pyre_wide_page_bg_repeat', 'repeat'), +(4195, 3699, 'pyre_wide_page_bg_full', 'no'), +(4196, 3699, 'pyre_wide_page_bg_color', ''), +(4197, 3699, 'pyre_wide_page_bg', ''), +(4198, 3699, 'pyre_page_bg_layout', 'default'), +(4199, 3699, 'avada_post_views_count', '89'), +(4200, 3699, '_wp_page_template', 'default'), +(4201, 3699, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:12:"Blog Sidebar";}'), +(4202, 3699, 'pyre_page_title', 'yes'), +(4203, 3699, 'pyre_page_title_text', 'yes'), +(4204, 3699, 'pyre_slider_type', 'no'), +(4205, 3699, 'pyre_slider', '0'), +(4206, 3699, 'pyre_wooslider', '0'), +(4207, 3699, 'pyre_flexslider', '0'), +(4208, 3699, 'pyre_revslider', '0'), +(4209, 3699, 'pyre_elasticslider', '0'), +(4210, 3699, 'pyre_fallback', ''), +(4211, 3699, 'pyre_full_width', 'no'), +(4212, 3699, 'pyre_sidebar_position', 'default'), +(4213, 3699, 'pyre_portfolio_excerpt', ''), +(4214, 3699, 'pyre_portfolio_full_width', 'yes'), +(4215, 3699, 'pyre_portfolio_sidebar_position', 'default'), +(4216, 3699, 'pyre_portfolio_filters', 'yes'), +(4217, 3699, 'pyre_page_bg_color', ''), +(4218, 3699, 'pyre_page_bg', ''), +(4219, 3699, 'pyre_page_bg_full', 'no'), +(4220, 3699, 'pyre_page_bg_repeat', 'repeat'), +(4221, 3699, 'pyre_page_title_bar_bg', ''), +(4222, 3699, 'pyre_page_title_bar_bg_retina', ''), +(4223, 3699, 'pyre_page_title_bar_bg_color', ''), +(4224, 3699, 'pyre_image_rollover_icons', 'linkzoom'), +(4225, 3699, 'pyre_link_icon_url', ''), +(4226, 3699, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4227, 3699, 'pyre_page_title_bar_bg_full', 'no'), +(4228, 3699, 'pyre_header_bg_repeat', 'repeat'), +(4229, 3699, 'pyre_header_bg_full', 'no'), +(4230, 3699, 'pyre_header_bg_color', ''), +(4231, 3699, 'pyre_header_bg', ''), +(4232, 3699, 'pyre_wide_page_bg_repeat', 'repeat'), +(4233, 3699, 'pyre_wide_page_bg_full', 'no'), +(4234, 3699, 'pyre_wide_page_bg_color', ''), +(4235, 3699, 'pyre_wide_page_bg', ''), +(4236, 3699, 'pyre_page_bg_layout', 'default'), +(4237, 3699, 'avada_post_views_count', '4'), +(4238, 3699, '_wp_page_template', 'default'), +(4239, 3699, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:12:"Blog Sidebar";}'), +(4240, 3699, 'pyre_page_title', 'yes'), +(4241, 3699, 'pyre_page_title_text', 'yes'), +(4242, 3699, 'pyre_slider_type', 'no'), +(4243, 3699, 'pyre_slider', '0'), +(4244, 3699, 'pyre_wooslider', '0'), +(4245, 3699, 'pyre_flexslider', '0'), +(4246, 3699, 'pyre_revslider', '0'), +(4247, 3699, 'pyre_elasticslider', '0'), +(4248, 3699, 'pyre_fallback', ''), +(4249, 3699, 'pyre_full_width', 'no'), +(4250, 3699, 'pyre_sidebar_position', 'default'), +(4251, 3699, 'pyre_portfolio_excerpt', ''), +(4252, 3699, 'pyre_portfolio_full_width', 'yes'), +(4253, 3699, 'pyre_portfolio_sidebar_position', 'default'), +(4254, 3699, 'pyre_portfolio_filters', 'yes'), +(4255, 3699, 'pyre_page_bg_color', ''), +(4256, 3699, 'pyre_page_bg', ''), +(4257, 3699, 'pyre_page_bg_full', 'no'), +(4258, 3699, 'pyre_page_bg_repeat', 'repeat'), +(4259, 3699, 'pyre_page_title_bar_bg', ''), +(4260, 3699, 'pyre_page_title_bar_bg_retina', ''), +(4261, 3699, 'pyre_page_title_bar_bg_color', ''), +(4262, 3699, 'pyre_image_rollover_icons', 'linkzoom'), +(4263, 3699, 'pyre_link_icon_url', ''), +(4264, 3699, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4265, 3700, 'avada_post_views_count', '61'), +(4266, 3700, 'pyre_page_bg_layout', 'default'), +(4267, 3700, 'pyre_wide_page_bg', ''), +(4268, 3700, 'pyre_wide_page_bg_color', ''), +(4269, 3700, 'pyre_wide_page_bg_full', 'no'), +(4270, 3700, 'pyre_wide_page_bg_repeat', 'repeat'), +(4271, 3700, 'pyre_header_bg', ''), +(4272, 3700, 'pyre_header_bg_color', ''), +(4273, 3700, 'pyre_header_bg_full', 'no'), +(4274, 3700, 'pyre_header_bg_repeat', 'repeat'), +(4275, 3700, 'pyre_page_title_bar_bg_full', 'no'), +(4276, 3700, '_wp_page_template', 'default'), +(4277, 3700, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4278, 3700, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4279, 3700, 'pyre_page_title', 'yes'), +(4280, 3700, 'pyre_page_title_text', 'yes'), +(4281, 3700, 'pyre_slider_type', 'no'), +(4282, 3700, 'pyre_slider', '0'), +(4283, 3700, 'pyre_wooslider', '0'), +(4284, 3700, 'pyre_flexslider', '0'), +(4285, 3700, 'pyre_revslider', '0'), +(4286, 3700, 'pyre_elasticslider', '0'), +(4287, 3700, 'pyre_fallback', ''), +(4288, 3700, 'pyre_full_width', 'no'), +(4289, 3700, 'pyre_sidebar_position', 'default'), +(4290, 3700, 'pyre_portfolio_excerpt', ''), +(4291, 3700, 'pyre_portfolio_full_width', 'yes'), +(4292, 3700, 'pyre_portfolio_sidebar_position', 'default'), +(4293, 3700, 'pyre_portfolio_filters', 'yes'), +(4294, 3700, 'pyre_page_bg_color', ''), +(4295, 3700, 'pyre_page_bg', ''), +(4296, 3700, 'pyre_page_bg_full', 'no'), +(4297, 3700, 'pyre_page_bg_repeat', 'repeat'), +(4298, 3700, 'pyre_page_title_bar_bg', ''), +(4299, 3700, 'pyre_page_title_bar_bg_retina', ''), +(4300, 3700, 'pyre_page_title_bar_bg_color', ''), +(4301, 3700, 'pyre_image_rollover_icons', 'linkzoom'), +(4302, 3700, 'pyre_link_icon_url', ''), +(4303, 3700, 'avada_post_views_count', '2'), +(4304, 3700, 'pyre_page_bg_layout', 'default'), +(4305, 3700, 'pyre_wide_page_bg', ''), +(4306, 3700, 'pyre_wide_page_bg_color', ''), +(4307, 3700, 'pyre_wide_page_bg_full', 'no'), +(4308, 3700, 'pyre_wide_page_bg_repeat', 'repeat'), +(4309, 3700, 'pyre_header_bg', ''), +(4310, 3700, 'pyre_header_bg_color', ''), +(4311, 3700, 'pyre_header_bg_full', 'no'), +(4312, 3700, 'pyre_header_bg_repeat', 'repeat'), +(4313, 3700, 'pyre_page_title_bar_bg_full', 'no'), +(4314, 3700, '_wp_page_template', 'default'), +(4315, 3700, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4316, 3700, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4317, 3700, 'pyre_page_title', 'yes'), +(4318, 3700, 'pyre_page_title_text', 'yes'), +(4319, 3700, 'pyre_slider_type', 'no'), +(4320, 3700, 'pyre_slider', '0'), +(4321, 3700, 'pyre_wooslider', '0'), +(4322, 3700, 'pyre_flexslider', '0'), +(4323, 3700, 'pyre_revslider', '0'), +(4324, 3700, 'pyre_elasticslider', '0'), +(4325, 3700, 'pyre_fallback', ''), +(4326, 3700, 'pyre_full_width', 'no'), +(4327, 3700, 'pyre_sidebar_position', 'default'), +(4328, 3700, 'pyre_portfolio_excerpt', ''), +(4329, 3700, 'pyre_portfolio_full_width', 'yes'), +(4330, 3700, 'pyre_portfolio_sidebar_position', 'default'), +(4331, 3700, 'pyre_portfolio_filters', 'yes'), +(4332, 3700, 'pyre_page_bg_color', ''), +(4333, 3700, 'pyre_page_bg', ''), +(4334, 3700, 'pyre_page_bg_full', 'no'), +(4335, 3700, 'pyre_page_bg_repeat', 'repeat'), +(4336, 3700, 'pyre_page_title_bar_bg', ''), +(4337, 3700, 'pyre_page_title_bar_bg_retina', ''), +(4338, 3700, 'pyre_page_title_bar_bg_color', ''), +(4339, 3700, 'pyre_image_rollover_icons', 'linkzoom'), +(4340, 3700, 'pyre_link_icon_url', ''), +(4341, 3705, 'avada_post_views_count', '92'), +(4342, 3705, 'pyre_page_title', 'yes'), +(4343, 3705, 'pyre_page_title_text', 'yes'), +(4344, 3705, 'pyre_slider_type', 'no'), +(4345, 3705, 'pyre_slider', '0'), +(4346, 3705, 'pyre_wooslider', '0'), +(4347, 3705, 'pyre_flexslider', '0'), +(4348, 3705, 'pyre_revslider', '0'), +(4349, 3705, 'pyre_elasticslider', '0'), +(4350, 3705, 'pyre_fallback', ''), +(4351, 3705, 'pyre_full_width', 'no'), +(4352, 3705, 'pyre_sidebar_position', 'default'), +(4353, 3705, 'pyre_portfolio_excerpt', ''), +(4354, 3705, 'pyre_portfolio_full_width', 'yes'), +(4355, 3705, 'pyre_portfolio_sidebar_position', 'default'), +(4356, 3705, 'pyre_portfolio_filters', 'yes'), +(4357, 3705, 'pyre_page_bg_color', ''), +(4358, 3705, 'pyre_page_bg', ''), +(4359, 3705, 'pyre_page_bg_full', 'no'), +(4360, 3705, 'pyre_page_bg_repeat', 'repeat'), +(4361, 3705, 'pyre_page_title_bar_bg', ''), +(4362, 3705, 'pyre_page_title_bar_bg_retina', ''), +(4363, 3705, 'pyre_page_title_bar_bg_color', ''), +(4364, 3705, 'pyre_image_rollover_icons', 'linkzoom'), +(4365, 3705, 'pyre_link_icon_url', ''), +(4366, 3705, 'pyre_page_title_custom_subheader', ''), +(4367, 3705, 'pyre_page_title_custom_text', ''), +(4368, 3705, '_wp_page_template', 'full-width.php'), +(4369, 3705, 'pyre_page_title_bg_parallax', 'default'), +(4370, 3705, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4371, 3705, 'pyre_page_bg_layout', 'default'), +(4372, 3705, 'pyre_wide_page_bg', ''), +(4373, 3705, 'pyre_wide_page_bg_color', ''), +(4374, 3705, 'pyre_wide_page_bg_full', 'no'), +(4375, 3705, 'pyre_wide_page_bg_repeat', 'repeat'), +(4376, 3705, 'pyre_header_bg', ''), +(4377, 3705, 'pyre_header_bg_color', ''), +(4378, 3705, 'pyre_header_bg_full', 'no'), +(4379, 3705, 'pyre_header_bg_repeat', 'repeat'), +(4380, 3705, 'pyre_page_title_bar_bg_full', 'no'), +(4381, 3705, 'avada_post_views_count', '0'), +(4382, 3705, 'pyre_page_title', 'yes'), +(4383, 3705, 'pyre_page_title_text', 'yes'), +(4384, 3705, 'pyre_slider_type', 'no'), +(4385, 3705, 'pyre_slider', '0'), +(4386, 3705, 'pyre_wooslider', '0'), +(4387, 3705, 'pyre_flexslider', '0'), +(4388, 3705, 'pyre_revslider', '0'), +(4389, 3705, 'pyre_elasticslider', '0'), +(4390, 3705, 'pyre_fallback', ''), +(4391, 3705, 'pyre_full_width', 'no'), +(4392, 3705, 'pyre_sidebar_position', 'default'), +(4393, 3705, 'pyre_portfolio_excerpt', ''), +(4394, 3705, 'pyre_portfolio_full_width', 'yes'), +(4395, 3705, 'pyre_portfolio_sidebar_position', 'default'), +(4396, 3705, 'pyre_portfolio_filters', 'yes'), +(4397, 3705, 'pyre_page_bg_color', ''), +(4398, 3705, 'pyre_page_bg', ''), +(4399, 3705, 'pyre_page_bg_full', 'no'), +(4400, 3705, 'pyre_page_bg_repeat', 'repeat'), +(4401, 3705, 'pyre_page_title_bar_bg', ''), +(4402, 3705, 'pyre_page_title_bar_bg_retina', ''), +(4403, 3705, 'pyre_page_title_bar_bg_color', ''), +(4404, 3705, 'pyre_image_rollover_icons', 'linkzoom'), +(4405, 3705, 'pyre_link_icon_url', ''), +(4406, 3705, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4407, 3705, '_wp_page_template', 'full-width.php'), +(4408, 3705, 'pyre_page_title_height', ''), +(4409, 3713, 'pyre_page_title', 'no'), +(4410, 3713, 'pyre_page_title_text', 'yes'), +(4411, 3713, 'pyre_slider_type', 'no'), +(4412, 3713, 'pyre_slider', '0'), +(4413, 3713, 'pyre_wooslider', '0'), +(4414, 3713, 'pyre_flexslider', '0'), +(4415, 3713, 'pyre_revslider', '0'), +(4416, 3713, 'pyre_elasticslider', '0'), +(4417, 3713, 'pyre_fallback', ''), +(4418, 3713, 'pyre_full_width', 'no'), +(4419, 3713, 'pyre_sidebar_position', 'default'), +(4420, 3713, 'pyre_portfolio_excerpt', ''), +(4421, 3713, 'pyre_portfolio_full_width', 'yes'), +(4422, 3713, 'pyre_portfolio_sidebar_position', 'default'), +(4423, 3713, 'pyre_portfolio_filters', 'yes'), +(4424, 3713, 'pyre_page_bg_color', ''), +(4425, 3713, 'pyre_page_bg', ''), +(4426, 3713, 'pyre_page_bg_full', 'no'), +(4427, 3713, 'pyre_page_bg_repeat', 'repeat'), +(4428, 3713, 'pyre_page_title_bar_bg', ''), +(4429, 3713, 'pyre_page_title_bar_bg_retina', ''), +(4430, 3713, 'pyre_page_title_bar_bg_color', ''), +(4431, 3713, 'pyre_image_rollover_icons', 'linkzoom'), +(4432, 3713, 'pyre_link_icon_url', ''), +(4433, 3713, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4434, 3713, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4435, 3713, '_wp_page_template', '100-width.php'), +(4436, 3713, 'avada_post_views_count', '51'), +(4437, 3713, 'pyre_page_title_bar_bg_full', 'no'), +(4438, 3713, 'pyre_wide_page_bg_repeat', 'repeat'), +(4439, 3713, 'pyre_page_bg_layout', 'default'), +(4440, 3713, 'pyre_wide_page_bg', ''), +(4441, 3713, 'pyre_wide_page_bg_color', ''), +(4442, 3713, 'pyre_wide_page_bg_full', 'no'), +(4443, 3713, 'pyre_header_bg_repeat', 'repeat'), +(4444, 3713, 'pyre_header_bg_full', 'no'), +(4445, 3713, 'pyre_header_bg_color', ''), +(4446, 3713, 'pyre_header_bg', ''), +(4447, 3713, 'pyre_page_title', 'yes'), +(4448, 3713, 'pyre_page_title_text', 'yes'), +(4449, 3713, 'pyre_slider_type', 'no'), +(4450, 3713, 'pyre_slider', '0'), +(4451, 3713, 'pyre_wooslider', '0'), +(4452, 3713, 'pyre_flexslider', '0'), +(4453, 3713, 'pyre_revslider', '0'), +(4454, 3713, 'pyre_elasticslider', '0'), +(4455, 3713, 'pyre_fallback', ''), +(4456, 3713, 'pyre_full_width', 'no'), +(4457, 3713, 'pyre_sidebar_position', 'default'), +(4458, 3713, 'pyre_portfolio_excerpt', ''), +(4459, 3713, 'pyre_portfolio_full_width', 'yes'), +(4460, 3713, 'pyre_portfolio_sidebar_position', 'default'), +(4461, 3713, 'pyre_portfolio_filters', 'yes'), +(4462, 3713, 'pyre_page_bg_color', ''), +(4463, 3713, 'pyre_page_bg', ''), +(4464, 3713, 'pyre_page_bg_full', 'no'), +(4465, 3713, 'pyre_page_bg_repeat', 'repeat'), +(4466, 3713, 'pyre_page_title_bar_bg', ''), +(4467, 3713, 'pyre_page_title_bar_bg_retina', ''), +(4468, 3713, 'pyre_page_title_bar_bg_color', ''), +(4469, 3713, 'pyre_image_rollover_icons', 'linkzoom'), +(4470, 3713, 'pyre_link_icon_url', ''), +(4471, 3713, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4472, 3713, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4473, 3713, '_wp_page_template', '100-width.php'), +(4474, 3717, 'pyre_slider_type', 'no'), +(4475, 3717, 'pyre_page_title_text', 'yes'), +(4476, 3717, 'pyre_page_title', 'yes'), +(4477, 3717, 'avada_post_views_count', '103'), +(4478, 3717, 'pyre_wooslider', '0'), +(4479, 3717, 'pyre_flexslider', '0'), +(4480, 3717, 'pyre_revslider', '0'), +(4481, 3717, 'pyre_elasticslider', '0'), +(4482, 3717, 'pyre_fallback', ''), +(4483, 3717, 'pyre_full_width', 'no'), +(4484, 3717, 'pyre_sidebar_position', 'default'), +(4485, 3717, 'pyre_portfolio_excerpt', ''), +(4486, 3717, 'pyre_portfolio_full_width', 'yes'), +(4487, 3717, 'pyre_portfolio_sidebar_position', 'default'), +(4488, 3717, 'pyre_portfolio_filters', 'yes'), +(4489, 3717, 'pyre_page_bg_color', ''), +(4490, 3717, 'pyre_page_bg', ''), +(4491, 3717, 'pyre_page_bg_full', 'no'), +(4492, 3717, 'pyre_page_bg_repeat', 'repeat'), +(4493, 3717, 'pyre_page_title_bar_bg', ''), +(4494, 3717, 'pyre_page_title_bar_bg_retina', ''), +(4495, 3717, 'pyre_page_title_bar_bg_color', ''), +(4496, 3717, 'pyre_image_rollover_icons', 'linkzoom'), +(4497, 3717, 'pyre_link_icon_url', ''), +(4498, 3717, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4499, 3717, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4500, 3717, '_wp_page_template', 'full-width.php'), +(4501, 3717, 'pyre_page_title_bar_bg_full', 'no'), +(4502, 3717, 'pyre_page_bg_layout', 'default'), +(4503, 3717, 'pyre_wide_page_bg', ''), +(4504, 3717, 'pyre_wide_page_bg_color', ''), +(4505, 3717, 'pyre_wide_page_bg_full', 'no'), +(4506, 3717, 'pyre_wide_page_bg_repeat', 'repeat'), +(4507, 3717, 'pyre_header_bg', ''), +(4508, 3717, 'pyre_header_bg_color', ''), +(4509, 3717, 'pyre_header_bg_full', 'no'), +(4510, 3717, 'pyre_header_bg_repeat', 'repeat'), +(4511, 3717, 'pyre_slider', '0'), +(4512, 3719, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4513, 3719, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4514, 3719, 'pyre_link_icon_url', ''), +(4515, 3719, '_wp_page_template', 'full-width.php'), +(4516, 3719, 'avada_post_views_count', '66'), +(4517, 3719, 'pyre_image_rollover_icons', 'linkzoom'), +(4518, 3719, 'pyre_page_title_bar_bg_color', ''), +(4519, 3719, 'pyre_page_bg_repeat', 'repeat'), +(4520, 3719, 'pyre_page_title_bar_bg', ''), +(4521, 3719, 'pyre_page_title_bar_bg_retina', ''), +(4522, 3719, 'pyre_page_bg_full', 'no'), +(4523, 3719, 'pyre_page_bg', ''), +(4524, 3719, 'pyre_page_bg_color', ''), +(4525, 3719, 'pyre_portfolio_filters', 'yes'), +(4526, 3719, 'pyre_portfolio_sidebar_position', 'default'), +(4527, 3719, 'pyre_portfolio_full_width', 'yes'), +(4528, 3719, 'pyre_portfolio_excerpt', ''), +(4529, 3719, 'pyre_sidebar_position', 'default'), +(4530, 3719, 'pyre_page_title', 'yes'), +(4531, 3719, 'pyre_page_title_text', 'yes'), +(4532, 3719, 'pyre_slider_type', 'no'), +(4533, 3719, 'pyre_slider', '0'), +(4534, 3719, 'pyre_wooslider', '0'), +(4535, 3719, 'pyre_flexslider', '0'), +(4536, 3719, 'pyre_revslider', '0'), +(4537, 3719, 'pyre_elasticslider', '0'), +(4538, 3719, 'pyre_fallback', ''), +(4539, 3719, 'pyre_full_width', 'no'), +(4540, 3719, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4541, 3719, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4542, 3719, 'pyre_link_icon_url', ''), +(4543, 3719, '_wp_page_template', 'full-width.php'), +(4544, 3719, 'pyre_image_rollover_icons', 'linkzoom'), +(4545, 3719, 'pyre_page_title_bar_bg_color', ''), +(4546, 3719, 'pyre_page_bg_repeat', 'repeat'), +(4547, 3719, 'pyre_page_title_bar_bg', ''), +(4548, 3719, 'pyre_page_title_bar_bg_retina', ''), +(4549, 3719, 'pyre_page_bg_full', 'no'), +(4550, 3719, 'pyre_page_bg', ''), +(4551, 3719, 'pyre_page_bg_color', ''), +(4552, 3719, 'pyre_portfolio_filters', 'yes'), +(4553, 3719, 'pyre_portfolio_sidebar_position', 'default'), +(4554, 3719, 'pyre_portfolio_full_width', 'yes'), +(4555, 3719, 'pyre_portfolio_excerpt', ''), +(4556, 3719, 'pyre_sidebar_position', 'default'), +(4557, 3719, 'pyre_page_title', 'yes'), +(4558, 3719, 'pyre_page_title_text', 'yes'), +(4559, 3719, 'pyre_slider_type', 'no'), +(4560, 3719, 'pyre_slider', '0'), +(4561, 3719, 'pyre_wooslider', '0'), +(4562, 3719, 'pyre_flexslider', '0'), +(4563, 3719, 'pyre_revslider', '0'), +(4564, 3719, 'pyre_elasticslider', '0'), +(4565, 3719, 'pyre_fallback', ''), +(4566, 3719, 'pyre_full_width', 'no'), +(4567, 3721, 'pyre_wooslider', '0'), +(4568, 3721, 'pyre_slider', '0'), +(4569, 3721, 'pyre_slider_type', 'no'), +(4570, 3721, 'pyre_page_title_text', 'yes'), +(4571, 3721, 'pyre_page_title', 'yes'), +(4572, 3721, 'pyre_fallback', ''), +(4573, 3721, 'pyre_full_width', 'no'), +(4574, 3721, 'pyre_sidebar_position', 'default'), +(4575, 3721, 'pyre_portfolio_excerpt', ''), +(4576, 3721, 'pyre_portfolio_full_width', 'yes'), +(4577, 3721, 'pyre_portfolio_sidebar_position', 'default'), +(4578, 3721, 'pyre_portfolio_filters', 'yes'), +(4579, 3721, 'pyre_page_bg_color', ''), +(4580, 3721, 'pyre_page_bg', ''), +(4581, 3721, 'pyre_page_bg_full', 'no'), +(4582, 3721, 'pyre_page_bg_repeat', 'repeat'), +(4583, 3721, 'pyre_page_title_bar_bg', ''), +(4584, 3721, 'pyre_page_title_bar_bg_retina', ''), +(4585, 3721, 'pyre_page_title_bar_bg_color', ''), +(4586, 3721, 'pyre_image_rollover_icons', 'linkzoom'), +(4587, 3721, 'pyre_link_icon_url', ''), +(4588, 3721, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4589, 3721, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4590, 3721, '_wp_page_template', 'full-width.php'), +(4591, 3721, 'pyre_flexslider', '0'), +(4592, 3721, 'pyre_revslider', '0'), +(4593, 3721, 'pyre_elasticslider', '0'), +(4594, 3721, 'avada_post_views_count', '104'), +(4595, 3721, 'pyre_wooslider', '0'), +(4596, 3721, 'pyre_slider', '0'), +(4597, 3721, 'pyre_slider_type', 'no'), +(4598, 3721, 'pyre_page_title_text', 'yes'), +(4599, 3721, 'pyre_page_title', 'yes'), +(4600, 3721, 'pyre_fallback', ''), +(4601, 3721, 'pyre_full_width', 'no'), +(4602, 3721, 'pyre_sidebar_position', 'default'), +(4603, 3721, 'pyre_portfolio_excerpt', ''), +(4604, 3721, 'pyre_portfolio_full_width', 'yes'), +(4605, 3721, 'pyre_portfolio_sidebar_position', 'default'), +(4606, 3721, 'pyre_portfolio_filters', 'yes'), +(4607, 3721, 'pyre_page_bg_color', ''), +(4608, 3721, 'pyre_page_bg', ''), +(4609, 3721, 'pyre_page_bg_full', 'no'), +(4610, 3721, 'pyre_page_bg_repeat', 'repeat'), +(4611, 3721, 'pyre_page_title_bar_bg', ''), +(4612, 3721, 'pyre_page_title_bar_bg_retina', ''), +(4613, 3721, 'pyre_page_title_bar_bg_color', ''), +(4614, 3721, 'pyre_image_rollover_icons', 'linkzoom'), +(4615, 3721, 'pyre_link_icon_url', ''), +(4616, 3721, '_wp_page_template', 'full-width.php'), +(4617, 3721, 'pyre_flexslider', '0'), +(4618, 3721, 'pyre_revslider', '0'), +(4619, 3721, 'pyre_elasticslider', '0'), +(4620, 3721, 'pyre_page_title_bg_parallax', 'default'), +(4621, 3721, 'pyre_page_title_bar_bg_full', 'default'), +(4622, 3721, 'pyre_page_title_height', ''), +(4623, 3721, 'pyre_page_title_custom_subheader', ''), +(4624, 3721, 'pyre_page_title_custom_text', ''), +(4625, 3721, 'pyre_header_bg_repeat', 'repeat'), +(4626, 3721, 'pyre_header_bg_full', 'no'), +(4627, 3721, 'pyre_header_bg_color', ''), +(4628, 3721, 'pyre_header_bg', ''), +(4629, 3721, 'pyre_wide_page_bg_repeat', 'repeat'), +(4630, 3721, 'pyre_wide_page_bg_full', 'no'), +(4631, 3721, 'pyre_wide_page_bg_color', ''), +(4632, 3721, 'pyre_page_bg_layout', 'default'), +(4633, 3721, 'pyre_wide_page_bg', ''), +(4634, 3723, 'avada_post_views_count', '102'), +(4635, 3723, 'pyre_page_title', 'yes'), +(4636, 3723, 'pyre_page_title_text', 'yes'), +(4637, 3723, 'pyre_slider_type', 'no'), +(4638, 3723, 'pyre_slider', '0'), +(4639, 3723, 'pyre_wooslider', '0'), +(4640, 3723, 'pyre_flexslider', '0'), +(4641, 3723, 'pyre_revslider', '0'), +(4642, 3723, 'pyre_elasticslider', '0'), +(4643, 3723, 'pyre_fallback', ''), +(4644, 3723, 'pyre_full_width', 'no'), +(4645, 3723, 'pyre_sidebar_position', 'default'), +(4646, 3723, 'pyre_portfolio_excerpt', ''), +(4647, 3723, 'pyre_portfolio_full_width', 'yes'), +(4648, 3723, 'pyre_portfolio_sidebar_position', 'default'), +(4649, 3723, 'pyre_portfolio_filters', 'yes'), +(4650, 3723, 'pyre_page_bg_color', ''), +(4651, 3723, 'pyre_page_bg', ''), +(4652, 3723, 'pyre_page_bg_full', 'no'), +(4653, 3723, 'pyre_page_bg_repeat', 'repeat'), +(4654, 3723, 'pyre_page_title_bar_bg', ''), +(4655, 3723, 'pyre_page_title_bar_bg_retina', ''), +(4656, 3723, 'pyre_page_title_bar_bg_color', ''), +(4657, 3723, 'pyre_image_rollover_icons', 'linkzoom'), +(4658, 3723, 'pyre_link_icon_url', ''), +(4659, 3723, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4660, 3723, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4661, 3723, '_wp_page_template', 'full-width.php'), +(4662, 3725, 'avada_post_views_count', '77'), +(4663, 3725, 'pyre_page_title', 'yes'), +(4664, 3725, 'pyre_page_title_text', 'yes'), +(4665, 3725, 'pyre_slider_type', 'no'), +(4666, 3725, 'pyre_slider', '0'), +(4667, 3725, 'pyre_wooslider', '0'), +(4668, 3725, 'pyre_flexslider', '0'), +(4669, 3725, 'pyre_revslider', '0'), +(4670, 3725, 'pyre_elasticslider', '0'), +(4671, 3725, 'pyre_fallback', ''), +(4672, 3725, 'pyre_full_width', 'no'), +(4673, 3725, 'pyre_sidebar_position', 'default'), +(4674, 3725, 'pyre_portfolio_excerpt', ''), +(4675, 3725, 'pyre_portfolio_full_width', 'yes'), +(4676, 3725, 'pyre_portfolio_sidebar_position', 'default'), +(4677, 3725, 'pyre_portfolio_filters', 'yes'), +(4678, 3725, 'pyre_page_bg_color', ''), +(4679, 3725, 'pyre_page_bg', ''), +(4680, 3725, 'pyre_page_bg_full', 'no'), +(4681, 3725, 'pyre_page_bg_repeat', 'repeat'), +(4682, 3725, 'pyre_page_title_bar_bg', ''), +(4683, 3725, 'pyre_page_title_bar_bg_retina', ''), +(4684, 3725, 'pyre_page_title_bar_bg_color', ''), +(4685, 3725, 'pyre_image_rollover_icons', 'linkzoom'), +(4686, 3725, 'pyre_link_icon_url', ''), +(4687, 3725, 'pyre_page_title_custom_subheader', ''), +(4688, 3725, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4689, 3725, '_wp_page_template', 'full-width.php'), +(4690, 3725, 'pyre_page_bg_layout', 'default'), +(4691, 3725, 'pyre_wide_page_bg', ''), +(4692, 3725, 'pyre_wide_page_bg_color', ''), +(4693, 3725, 'pyre_wide_page_bg_full', 'no'), +(4694, 3725, 'pyre_wide_page_bg_repeat', 'repeat'), +(4695, 3725, 'pyre_header_bg', ''), +(4696, 3725, 'pyre_header_bg_color', ''), +(4697, 3725, 'pyre_header_bg_full', 'no'), +(4698, 3725, 'pyre_header_bg_repeat', 'repeat'), +(4699, 3725, 'pyre_page_title_bar_bg_full', 'no'), +(4700, 3725, 'pyre_page_title_height', ''), +(4701, 3725, 'pyre_page_title', 'yes'), +(4702, 3725, 'pyre_page_title_text', 'yes'), +(4703, 3725, 'pyre_slider_type', 'no'), +(4704, 3725, 'pyre_slider', '0'), +(4705, 3725, 'pyre_wooslider', '0'), +(4706, 3725, 'pyre_flexslider', '0'), +(4707, 3725, 'pyre_revslider', '0'), +(4708, 3725, 'pyre_elasticslider', '0'), +(4709, 3725, 'pyre_fallback', ''), +(4710, 3725, 'pyre_full_width', 'no'), +(4711, 3725, 'pyre_sidebar_position', 'default'), +(4712, 3725, 'pyre_portfolio_excerpt', ''), +(4713, 3725, 'pyre_portfolio_full_width', 'yes'), +(4714, 3725, 'pyre_portfolio_sidebar_position', 'default'), +(4715, 3725, 'pyre_portfolio_filters', 'yes'), +(4716, 3725, 'pyre_page_bg_color', ''), +(4717, 3725, 'pyre_page_bg', ''), +(4718, 3725, 'pyre_page_bg_full', 'no'), +(4719, 3725, 'pyre_page_bg_repeat', 'repeat'), +(4720, 3725, 'pyre_page_title_bar_bg', ''), +(4721, 3725, 'pyre_page_title_bar_bg_retina', ''), +(4722, 3725, 'pyre_page_title_bar_bg_color', ''), +(4723, 3725, 'pyre_image_rollover_icons', 'linkzoom'), +(4724, 3725, 'pyre_link_icon_url', ''), +(4725, 3725, 'pyre_page_title_custom_text', ''), +(4726, 3725, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4727, 3725, '_wp_page_template', 'full-width.php'), +(4728, 3725, 'pyre_page_title_bg_parallax', 'default'), +(4729, 3727, 'pyre_page_title', 'yes'), +(4730, 3727, 'pyre_page_title_text', 'yes'), +(4731, 3727, 'pyre_slider_type', 'no'), +(4732, 3727, 'pyre_slider', '0'), +(4733, 3727, 'pyre_wooslider', '0'), +(4734, 3727, 'pyre_flexslider', '0'), +(4735, 3727, 'pyre_revslider', '0'), +(4736, 3727, 'pyre_elasticslider', '0'), +(4737, 3727, 'pyre_fallback', ''), +(4738, 3727, 'pyre_full_width', 'no'), +(4739, 3727, 'pyre_sidebar_position', 'default'), +(4740, 3727, 'pyre_portfolio_excerpt', ''), +(4741, 3727, 'pyre_portfolio_full_width', 'yes'), +(4742, 3727, 'pyre_portfolio_sidebar_position', 'default'), +(4743, 3727, 'pyre_portfolio_filters', 'yes'), +(4744, 3727, 'pyre_page_bg_color', ''), +(4745, 3727, 'pyre_page_bg', ''), +(4746, 3727, 'pyre_page_bg_full', 'no'), +(4747, 3727, 'pyre_page_bg_repeat', 'repeat'), +(4748, 3727, 'pyre_page_title_bar_bg', ''), +(4749, 3727, 'pyre_page_title_bar_bg_retina', ''), +(4750, 3727, 'pyre_page_title_bar_bg_color', ''), +(4751, 3727, 'pyre_image_rollover_icons', 'linkzoom'), +(4752, 3727, 'pyre_link_icon_url', ''), +(4753, 3727, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4754, 3727, '_wp_page_template', 'full-width.php'), +(4755, 3727, 'pyre_page_title_custom_text', ''), +(4756, 3727, 'pyre_header_bg_repeat', 'repeat'), +(4757, 3727, 'pyre_header_bg_full', 'no'), +(4758, 3727, 'pyre_header_bg_color', ''), +(4759, 3727, 'pyre_header_bg', ''), +(4760, 3727, 'pyre_wide_page_bg_repeat', 'repeat'), +(4761, 3727, 'pyre_wide_page_bg_full', 'no'), +(4762, 3727, 'pyre_wide_page_bg_color', ''), +(4763, 3727, 'pyre_wide_page_bg', ''), +(4764, 3727, 'pyre_page_bg_layout', 'default'), +(4765, 3727, 'avada_post_views_count', '95'), +(4766, 3727, 'pyre_page_title_custom_subheader', ''), +(4767, 3727, 'pyre_page_title', 'yes'), +(4768, 3727, 'pyre_page_title_text', 'yes'), +(4769, 3727, 'pyre_slider_type', 'no'), +(4770, 3727, 'pyre_slider', '0'), +(4771, 3727, 'pyre_wooslider', '0'), +(4772, 3727, 'pyre_flexslider', '0'), +(4773, 3727, 'pyre_revslider', '0'), +(4774, 3727, 'pyre_elasticslider', '0'), +(4775, 3727, 'pyre_fallback', ''), +(4776, 3727, 'pyre_full_width', 'no'), +(4777, 3727, 'pyre_sidebar_position', 'default'), +(4778, 3727, 'pyre_portfolio_excerpt', ''), +(4779, 3727, 'pyre_portfolio_full_width', 'yes'), +(4780, 3727, 'pyre_portfolio_sidebar_position', 'default'), +(4781, 3727, 'pyre_portfolio_filters', 'yes'), +(4782, 3727, 'pyre_page_bg_color', ''), +(4783, 3727, 'pyre_page_bg', ''), +(4784, 3727, 'pyre_page_bg_full', 'no'), +(4785, 3727, 'pyre_page_bg_repeat', 'repeat'), +(4786, 3727, 'pyre_page_title_bar_bg', ''), +(4787, 3727, 'pyre_page_title_bar_bg_retina', ''), +(4788, 3727, 'pyre_page_title_bar_bg_color', ''), +(4789, 3727, 'pyre_image_rollover_icons', 'linkzoom'), +(4790, 3727, 'pyre_link_icon_url', ''), +(4791, 3727, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4792, 3727, '_wp_page_template', 'full-width.php'), +(4793, 3727, 'pyre_page_title_bg_parallax', 'default'), +(4794, 3727, 'pyre_page_title_height', ''), +(4795, 3727, 'pyre_page_title_bar_bg_full', 'default'), +(4796, 3729, 'avada_post_views_count', '76'), +(4797, 3729, 'pyre_page_title', 'yes'), +(4798, 3729, 'pyre_page_title_text', 'yes'), +(4799, 3729, 'pyre_slider_type', 'no'), +(4800, 3729, 'pyre_slider', '0'), +(4801, 3729, 'pyre_wooslider', '0'), +(4802, 3729, 'pyre_flexslider', '0'), +(4803, 3729, 'pyre_revslider', '0'), +(4804, 3729, 'pyre_elasticslider', '0'), +(4805, 3729, 'pyre_fallback', ''), +(4806, 3729, 'pyre_full_width', 'no'), +(4807, 3729, 'pyre_sidebar_position', 'default'), +(4808, 3729, 'pyre_portfolio_excerpt', ''), +(4809, 3729, 'pyre_portfolio_full_width', 'yes'), +(4810, 3729, 'pyre_portfolio_sidebar_position', 'default'), +(4811, 3729, 'pyre_portfolio_filters', 'yes'), +(4812, 3729, 'pyre_page_bg_color', ''), +(4813, 3729, 'pyre_page_bg', ''), +(4814, 3729, 'pyre_page_bg_full', 'no'), +(4815, 3729, 'pyre_page_bg_repeat', 'repeat'), +(4816, 3729, 'pyre_page_title_bar_bg', ''), +(4817, 3729, 'pyre_page_title_bar_bg_retina', ''), +(4818, 3729, 'pyre_page_title_bar_bg_color', ''), +(4819, 3729, 'pyre_image_rollover_icons', 'linkzoom'), +(4820, 3729, 'pyre_link_icon_url', ''), +(4821, 3729, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4822, 3729, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4823, 3729, '_wp_page_template', 'full-width.php'), +(4824, 3729, 'avada_post_views_count', '0'), +(4825, 3729, 'pyre_page_title', 'yes'), +(4826, 3729, 'pyre_page_title_text', 'yes'), +(4827, 3729, 'pyre_slider_type', 'no'), +(4828, 3729, 'pyre_slider', '0'), +(4829, 3729, 'pyre_wooslider', '0'), +(4830, 3729, 'pyre_flexslider', '0'), +(4831, 3729, 'pyre_revslider', '0'), +(4832, 3729, 'pyre_elasticslider', '0'), +(4833, 3729, 'pyre_fallback', ''), +(4834, 3729, 'pyre_full_width', 'no'), +(4835, 3729, 'pyre_sidebar_position', 'default'), +(4836, 3729, 'pyre_portfolio_excerpt', ''), +(4837, 3729, 'pyre_portfolio_full_width', 'yes'), +(4838, 3729, 'pyre_portfolio_sidebar_position', 'default'), +(4839, 3729, 'pyre_portfolio_filters', 'yes'), +(4840, 3729, 'pyre_page_bg_color', ''), +(4841, 3729, 'pyre_page_bg', ''), +(4842, 3729, 'pyre_page_bg_full', 'no'), +(4843, 3729, 'pyre_page_bg_repeat', 'repeat'), +(4844, 3729, 'pyre_page_title_bar_bg', ''), +(4845, 3729, 'pyre_page_title_bar_bg_retina', ''), +(4846, 3729, 'pyre_page_title_bar_bg_color', ''), +(4847, 3729, 'pyre_image_rollover_icons', 'linkzoom'), +(4848, 3729, 'pyre_link_icon_url', ''), +(4849, 3729, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4850, 3729, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4851, 3729, '_wp_page_template', 'full-width.php'), +(4852, 3731, 'avada_post_views_count', '84'), +(4853, 3731, 'pyre_page_title', 'yes'), +(4854, 3731, 'pyre_page_title_text', 'yes'), +(4855, 3731, 'pyre_slider_type', 'no'), +(4856, 3731, 'pyre_slider', '0'), +(4857, 3731, 'pyre_wooslider', '0'), +(4858, 3731, 'pyre_flexslider', '0'), +(4859, 3731, 'pyre_revslider', '0'), +(4860, 3731, 'pyre_elasticslider', '0'), +(4861, 3731, 'pyre_fallback', ''), +(4862, 3731, 'pyre_full_width', 'no'), +(4863, 3731, 'pyre_sidebar_position', 'default'), +(4864, 3731, 'pyre_portfolio_excerpt', ''), +(4865, 3731, 'pyre_portfolio_full_width', 'yes'), +(4866, 3731, 'pyre_portfolio_sidebar_position', 'default'), +(4867, 3731, 'pyre_portfolio_filters', 'yes'), +(4868, 3731, 'pyre_page_bg_color', ''), +(4869, 3731, 'pyre_page_bg', ''), +(4870, 3731, 'pyre_page_bg_full', 'no'), +(4871, 3731, 'pyre_page_bg_repeat', 'repeat'), +(4872, 3731, 'pyre_page_title_bar_bg', ''), +(4873, 3731, 'pyre_page_title_bar_bg_retina', ''), +(4874, 3731, 'pyre_page_title_bar_bg_color', ''), +(4875, 3731, 'pyre_image_rollover_icons', 'linkzoom'), +(4876, 3731, 'pyre_link_icon_url', ''), +(4877, 3731, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4878, 3731, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4879, 3731, '_wp_page_template', 'full-width.php'), +(4880, 3731, 'pyre_page_title', 'yes'), +(4881, 3731, 'pyre_page_title_text', 'yes'), +(4882, 3731, 'pyre_slider_type', 'no'), +(4883, 3731, 'pyre_slider', '0'), +(4884, 3731, 'pyre_wooslider', '0'), +(4885, 3731, 'pyre_flexslider', '0'), +(4886, 3731, 'pyre_revslider', '0'), +(4887, 3731, 'pyre_elasticslider', '0'), +(4888, 3731, 'pyre_fallback', ''), +(4889, 3731, 'pyre_full_width', 'no'), +(4890, 3731, 'pyre_sidebar_position', 'default'), +(4891, 3731, 'pyre_portfolio_excerpt', ''), +(4892, 3731, 'pyre_portfolio_full_width', 'yes'), +(4893, 3731, 'pyre_portfolio_sidebar_position', 'default'), +(4894, 3731, 'pyre_portfolio_filters', 'yes'), +(4895, 3731, 'pyre_page_bg_color', ''), +(4896, 3731, 'pyre_page_bg', ''), +(4897, 3731, 'pyre_page_bg_full', 'no'), +(4898, 3731, 'pyre_page_bg_repeat', 'repeat'), +(4899, 3731, 'pyre_page_title_bar_bg', ''), +(4900, 3731, 'pyre_page_title_bar_bg_retina', ''), +(4901, 3731, 'pyre_page_title_bar_bg_color', ''), +(4902, 3731, 'pyre_image_rollover_icons', 'linkzoom'), +(4903, 3731, 'pyre_link_icon_url', ''), +(4904, 3731, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4905, 3731, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4906, 3731, '_wp_page_template', 'full-width.php'), +(4907, 3733, 'avada_post_views_count', '62'), +(4908, 3733, 'pyre_page_bg', ''), +(4909, 3733, 'pyre_page_bg_color', ''), +(4910, 3733, 'pyre_portfolio_filters', 'yes'), +(4911, 3733, 'pyre_portfolio_sidebar_position', 'default'), +(4912, 3733, 'pyre_portfolio_full_width', 'yes'), +(4913, 3733, 'pyre_portfolio_excerpt', ''), +(4914, 3733, 'pyre_sidebar_position', 'default'), +(4915, 3733, 'pyre_full_width', 'no'), +(4916, 3733, 'pyre_page_title', 'yes'), +(4917, 3733, 'pyre_page_title_text', 'yes'), +(4918, 3733, 'pyre_slider_type', 'no'), +(4919, 3733, 'pyre_slider', '0'), +(4920, 3733, 'pyre_wooslider', '0'), +(4921, 3733, 'pyre_flexslider', '0'), +(4922, 3733, '_wp_page_template', '100-width.php'), +(4923, 3733, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4924, 3733, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4925, 3733, 'pyre_link_icon_url', ''), +(4926, 3733, 'pyre_image_rollover_icons', 'linkzoom'), +(4927, 3733, 'pyre_page_title_bar_bg_color', ''), +(4928, 3733, 'pyre_page_title_bar_bg_retina', ''), +(4929, 3733, 'pyre_page_title_bar_bg', ''), +(4930, 3733, 'pyre_page_bg_repeat', 'repeat'), +(4931, 3733, 'pyre_page_bg_full', 'no'), +(4932, 3733, 'pyre_fallback', ''), +(4933, 3733, 'pyre_elasticslider', '0'), +(4934, 3733, 'pyre_revslider', '0'), +(4935, 3733, 'pyre_page_bg_layout', 'default'), +(4936, 3733, 'pyre_wide_page_bg', ''), +(4937, 3733, 'pyre_wide_page_bg_color', ''), +(4938, 3733, 'pyre_wide_page_bg_full', 'no'), +(4939, 3733, 'pyre_wide_page_bg_repeat', 'repeat'), +(4940, 3733, 'pyre_header_bg', ''), +(4941, 3733, 'pyre_header_bg_color', ''), +(4942, 3733, 'pyre_header_bg_full', 'no'), +(4943, 3733, 'pyre_header_bg_repeat', 'repeat'), +(4944, 3733, 'pyre_page_title_bar_bg_full', 'no'), +(4945, 3733, 'pyre_page_bg', ''), +(4946, 3733, 'pyre_page_bg_color', ''), +(4947, 3733, 'pyre_portfolio_filters', 'yes'), +(4948, 3733, 'pyre_portfolio_sidebar_position', 'default'), +(4949, 3733, 'pyre_portfolio_full_width', 'yes'); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(4950, 3733, 'pyre_portfolio_excerpt', ''), +(4951, 3733, 'pyre_sidebar_position', 'default'), +(4952, 3733, 'pyre_full_width', 'no'), +(4953, 3733, 'pyre_page_title', 'yes'), +(4954, 3733, 'pyre_page_title_text', 'yes'), +(4955, 3733, 'pyre_slider_type', 'no'), +(4956, 3733, 'pyre_slider', '0'), +(4957, 3733, 'pyre_wooslider', '0'), +(4958, 3733, 'pyre_flexslider', '0'), +(4959, 3733, '_wp_page_template', '100-width.php'), +(4960, 3733, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4961, 3733, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(4962, 3733, 'pyre_link_icon_url', ''), +(4963, 3733, 'pyre_image_rollover_icons', 'linkzoom'), +(4964, 3733, 'pyre_page_title_bar_bg_color', ''), +(4965, 3733, 'pyre_page_title_bar_bg_retina', ''), +(4966, 3733, 'pyre_page_title_bar_bg', ''), +(4967, 3733, 'pyre_page_bg_repeat', 'repeat'), +(4968, 3733, 'pyre_page_bg_full', 'no'), +(4969, 3733, 'pyre_fallback', ''), +(4970, 3733, 'pyre_elasticslider', '0'), +(4971, 3733, 'pyre_revslider', '0'), +(4972, 3735, 'avada_post_views_count', '233'), +(4973, 3735, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(4974, 3735, 'pyre_link_icon_url', ''), +(4975, 3735, 'pyre_image_rollover_icons', 'linkzoom'), +(4976, 3735, 'pyre_page_title_bar_bg_color', ''), +(4977, 3735, 'pyre_page_title_bg_parallax', 'default'), +(4978, 3735, 'pyre_page_title_bar_bg_full', 'default'), +(4979, 3735, 'pyre_page_title_height', ''), +(4980, 3735, 'pyre_page_title_custom_subheader', ''), +(4981, 3735, 'pyre_wide_page_bg', ''), +(4982, 3735, 'pyre_page_bg_repeat', 'repeat'), +(4983, 3735, 'pyre_page_bg_full', 'no'), +(4984, 3735, 'pyre_page_bg', ''), +(4985, 3735, 'pyre_page_bg_color', ''), +(4986, 3735, 'pyre_portfolio_filters', 'yes'), +(4987, 3735, 'pyre_portfolio_sidebar_position', 'default'), +(4988, 3735, 'pyre_portfolio_full_width', 'yes'), +(4989, 3735, 'pyre_portfolio_excerpt', ''), +(4990, 3735, 'pyre_sidebar_position', 'default'), +(4991, 3735, 'pyre_wooslider', '0'), +(4992, 3735, 'pyre_flexslider', '0'), +(4993, 3735, 'pyre_revslider', '0'), +(4994, 3735, 'pyre_elasticslider', '0'), +(4995, 3735, 'pyre_fallback', ''), +(4996, 3735, 'pyre_full_width', 'no'), +(4997, 3735, 'pyre_slider', '0'), +(4998, 3735, 'pyre_slider_type', 'no'), +(4999, 3735, 'pyre_page_title_text', 'yes'), +(5000, 3735, 'pyre_page_title', 'yes'), +(5001, 3735, 'pyre_page_title_bar_bg_retina', ''), +(5002, 3735, 'pyre_page_title_bar_bg', ''), +(5003, 3735, '_wp_page_template', 'full-width.php'), +(5004, 3735, 'pyre_page_title_custom_text', ''), +(5005, 3735, 'pyre_header_bg_repeat', 'repeat'), +(5006, 3735, 'pyre_header_bg_full', 'no'), +(5007, 3735, 'pyre_header_bg_color', ''), +(5008, 3735, 'pyre_header_bg', ''), +(5009, 3735, 'pyre_wide_page_bg_repeat', 'repeat'), +(5010, 3735, 'pyre_wide_page_bg_full', 'no'), +(5011, 3735, 'pyre_page_bg_layout', 'default'), +(5012, 3735, 'avada_post_views_count', '0'), +(5013, 3735, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5014, 3735, 'pyre_link_icon_url', ''), +(5015, 3735, 'pyre_image_rollover_icons', 'linkzoom'), +(5016, 3735, 'pyre_page_title_bar_bg_color', ''), +(5017, 3735, 'pyre_page_bg_repeat', 'repeat'), +(5018, 3735, 'pyre_page_bg_full', 'no'), +(5019, 3735, 'pyre_page_bg', ''), +(5020, 3735, 'pyre_page_bg_color', ''), +(5021, 3735, 'pyre_portfolio_filters', 'yes'), +(5022, 3735, 'pyre_portfolio_sidebar_position', 'default'), +(5023, 3735, 'pyre_portfolio_full_width', 'yes'), +(5024, 3735, 'pyre_portfolio_excerpt', ''), +(5025, 3735, 'pyre_sidebar_position', 'default'), +(5026, 3735, 'pyre_wooslider', '0'), +(5027, 3735, 'pyre_flexslider', '0'), +(5028, 3735, 'pyre_revslider', '0'), +(5029, 3735, 'pyre_elasticslider', '0'), +(5030, 3735, 'pyre_fallback', ''), +(5031, 3735, 'pyre_full_width', 'no'), +(5032, 3735, 'pyre_slider', '0'), +(5033, 3735, 'pyre_slider_type', 'no'), +(5034, 3735, 'pyre_page_title_text', 'yes'), +(5035, 3735, 'pyre_page_title', 'yes'), +(5036, 3735, 'pyre_page_title_bar_bg_retina', ''), +(5037, 3735, 'pyre_page_title_bar_bg', ''), +(5038, 3735, '_wp_page_template', 'full-width.php'), +(5039, 3735, 'pyre_wide_page_bg_color', ''), +(5040, 3737, 'pyre_elasticslider', '0'), +(5041, 3737, 'pyre_fallback', ''), +(5042, 3737, 'pyre_full_width', 'no'), +(5043, 3737, 'pyre_sidebar_position', 'default'), +(5044, 3737, 'pyre_portfolio_excerpt', ''), +(5045, 3737, 'pyre_portfolio_full_width', 'yes'), +(5046, 3737, 'pyre_portfolio_sidebar_position', 'default'), +(5047, 3737, 'pyre_portfolio_filters', 'yes'), +(5048, 3737, 'pyre_page_bg_color', ''), +(5049, 3737, 'pyre_page_bg', ''), +(5050, 3737, 'pyre_page_bg_full', 'no'), +(5051, 3737, 'pyre_page_bg_repeat', 'repeat'), +(5052, 3737, 'pyre_page_title_bar_bg', ''), +(5053, 3737, 'pyre_page_title_bar_bg_retina', ''), +(5054, 3737, 'pyre_page_title_bar_bg_color', ''), +(5055, 3737, 'pyre_image_rollover_icons', 'linkzoom'), +(5056, 3737, 'pyre_link_icon_url', ''), +(5057, 3737, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5058, 3737, '_wp_page_template', 'full-width.php'), +(5059, 3737, 'pyre_revslider', '0'), +(5060, 3737, 'pyre_flexslider', '0'), +(5061, 3737, 'pyre_wooslider', '0'), +(5062, 3737, 'pyre_slider', '0'), +(5063, 3737, 'pyre_slider_type', 'no'), +(5064, 3737, 'pyre_page_title_text', 'yes'), +(5065, 3737, 'pyre_page_title', 'yes'), +(5066, 3737, 'avada_post_views_count', '91'), +(5067, 3737, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5068, 3737, 'pyre_page_bg_layout', 'default'), +(5069, 3737, 'pyre_wide_page_bg', ''), +(5070, 3737, 'pyre_wide_page_bg_color', ''), +(5071, 3737, 'pyre_wide_page_bg_full', 'no'), +(5072, 3737, 'pyre_wide_page_bg_repeat', 'repeat'), +(5073, 3737, 'pyre_header_bg', ''), +(5074, 3737, 'pyre_header_bg_color', ''), +(5075, 3737, 'pyre_header_bg_full', 'no'), +(5076, 3737, 'pyre_header_bg_repeat', 'repeat'), +(5077, 3737, 'pyre_page_title_bar_bg_full', 'no'), +(5078, 3739, 'pyre_image_rollover_icons', 'linkzoom'), +(5079, 3739, 'pyre_page_title_bar_bg_color', ''), +(5080, 3739, 'pyre_page_title_bar_bg_retina', ''), +(5081, 3739, 'pyre_link_icon_url', ''), +(5082, 3739, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5083, 3739, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5084, 3739, '_wp_page_template', 'full-width.php'), +(5085, 3739, 'avada_post_views_count', '60'), +(5086, 3739, 'pyre_page_title_bar_bg', ''), +(5087, 3739, 'pyre_page_bg_repeat', 'repeat'), +(5088, 3739, 'pyre_page_bg_full', 'no'), +(5089, 3739, 'pyre_page_bg', ''), +(5090, 3739, 'pyre_page_bg_color', ''), +(5091, 3739, 'pyre_page_title', 'yes'), +(5092, 3739, 'pyre_page_title_text', 'yes'), +(5093, 3739, 'pyre_slider_type', 'no'), +(5094, 3739, 'pyre_slider', '0'), +(5095, 3739, 'pyre_wooslider', '0'), +(5096, 3739, 'pyre_flexslider', '0'), +(5097, 3739, 'pyre_revslider', '0'), +(5098, 3739, 'pyre_elasticslider', '0'), +(5099, 3739, 'pyre_fallback', ''), +(5100, 3739, 'pyre_full_width', 'no'), +(5101, 3739, 'pyre_sidebar_position', 'default'), +(5102, 3739, 'pyre_portfolio_excerpt', ''), +(5103, 3739, 'pyre_portfolio_full_width', 'yes'), +(5104, 3739, 'pyre_portfolio_sidebar_position', 'default'), +(5105, 3739, 'pyre_portfolio_filters', 'yes'), +(5106, 3739, 'pyre_page_bg_layout', 'default'), +(5107, 3739, 'pyre_wide_page_bg', ''), +(5108, 3739, 'pyre_wide_page_bg_color', ''), +(5109, 3739, 'pyre_wide_page_bg_full', 'no'), +(5110, 3739, 'pyre_wide_page_bg_repeat', 'repeat'), +(5111, 3739, 'pyre_header_bg', ''), +(5112, 3739, 'pyre_header_bg_color', ''), +(5113, 3739, 'pyre_header_bg_full', 'no'), +(5114, 3739, 'pyre_header_bg_repeat', 'repeat'), +(5115, 3739, 'pyre_page_title_bar_bg_full', 'no'), +(5116, 3739, 'pyre_image_rollover_icons', 'linkzoom'), +(5117, 3739, 'pyre_page_title_bar_bg_color', ''), +(5118, 3739, 'pyre_page_title_bar_bg_retina', ''), +(5119, 3739, 'pyre_link_icon_url', ''), +(5120, 3739, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5121, 3739, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5122, 3739, '_wp_page_template', 'full-width.php'), +(5123, 3739, 'pyre_page_title_bar_bg', ''), +(5124, 3739, 'pyre_page_bg_repeat', 'repeat'), +(5125, 3739, 'pyre_page_bg_full', 'no'), +(5126, 3739, 'pyre_page_bg', ''), +(5127, 3739, 'pyre_page_bg_color', ''), +(5128, 3739, 'pyre_page_title', 'yes'), +(5129, 3739, 'pyre_page_title_text', 'yes'), +(5130, 3739, 'pyre_slider_type', 'no'), +(5131, 3739, 'pyre_slider', '0'), +(5132, 3739, 'pyre_wooslider', '0'), +(5133, 3739, 'pyre_flexslider', '0'), +(5134, 3739, 'pyre_revslider', '0'), +(5135, 3739, 'pyre_elasticslider', '0'), +(5136, 3739, 'pyre_fallback', ''), +(5137, 3739, 'pyre_full_width', 'no'), +(5138, 3739, 'pyre_sidebar_position', 'default'), +(5139, 3739, 'pyre_portfolio_excerpt', ''), +(5140, 3739, 'pyre_portfolio_full_width', 'yes'), +(5141, 3739, 'pyre_portfolio_sidebar_position', 'default'), +(5142, 3739, 'pyre_portfolio_filters', 'yes'), +(5143, 3741, 'pyre_page_title', 'yes'), +(5144, 3741, 'pyre_page_title_text', 'yes'), +(5145, 3741, 'pyre_slider_type', 'no'), +(5146, 3741, 'pyre_slider', '0'), +(5147, 3741, 'pyre_wooslider', '0'), +(5148, 3741, 'pyre_flexslider', '0'), +(5149, 3741, 'pyre_revslider', '0'), +(5150, 3741, 'pyre_elasticslider', '0'), +(5151, 3741, 'pyre_fallback', ''), +(5152, 3741, 'pyre_full_width', 'no'), +(5153, 3741, 'pyre_sidebar_position', 'default'), +(5154, 3741, 'pyre_portfolio_excerpt', ''), +(5155, 3741, 'pyre_portfolio_full_width', 'yes'), +(5156, 3741, 'pyre_portfolio_sidebar_position', 'default'), +(5157, 3741, 'pyre_portfolio_filters', 'yes'), +(5158, 3741, 'pyre_page_bg_color', ''), +(5159, 3741, 'pyre_page_bg', ''), +(5160, 3741, 'pyre_page_bg_full', 'no'), +(5161, 3741, 'pyre_page_bg_repeat', 'repeat'), +(5162, 3741, 'pyre_page_title_bar_bg', ''), +(5163, 3741, 'pyre_page_title_bar_bg_retina', ''), +(5164, 3741, 'pyre_page_title_bar_bg_color', ''), +(5165, 3741, 'pyre_image_rollover_icons', 'linkzoom'), +(5166, 3741, 'pyre_link_icon_url', ''), +(5167, 3741, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5168, 3741, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5169, 3741, '_wp_page_template', 'full-width.php'), +(5170, 3741, 'avada_post_views_count', '49'), +(5171, 3741, 'pyre_wide_page_bg_full', 'no'), +(5172, 3741, 'pyre_page_bg_layout', 'default'), +(5173, 3741, 'pyre_wide_page_bg', ''), +(5174, 3741, 'pyre_wide_page_bg_color', ''), +(5175, 3741, 'pyre_wide_page_bg_repeat', 'repeat'), +(5176, 3741, 'pyre_header_bg', ''), +(5177, 3741, 'pyre_header_bg_color', ''), +(5178, 3741, 'pyre_header_bg_full', 'no'), +(5179, 3741, 'pyre_header_bg_repeat', 'repeat'), +(5180, 3741, 'pyre_page_title_custom_text', ''), +(5181, 3741, 'pyre_page_title_custom_subheader', ''), +(5182, 3741, 'pyre_page_title_height', ''), +(5183, 3741, 'pyre_page_title_bar_bg_full', 'default'), +(5184, 3741, 'pyre_page_title_bg_parallax', 'default'), +(5185, 3741, 'pyre_page_title', 'yes'), +(5186, 3741, 'pyre_page_title_text', 'yes'), +(5187, 3741, 'pyre_slider_type', 'no'), +(5188, 3741, 'pyre_slider', '0'), +(5189, 3741, 'pyre_wooslider', '0'), +(5190, 3741, 'pyre_flexslider', '0'), +(5191, 3741, 'pyre_revslider', '0'), +(5192, 3741, 'pyre_elasticslider', '0'), +(5193, 3741, 'pyre_fallback', ''), +(5194, 3741, 'pyre_full_width', 'no'), +(5195, 3741, 'pyre_sidebar_position', 'default'), +(5196, 3741, 'pyre_portfolio_excerpt', ''), +(5197, 3741, 'pyre_portfolio_full_width', 'yes'), +(5198, 3741, 'pyre_portfolio_sidebar_position', 'default'), +(5199, 3741, 'pyre_portfolio_filters', 'yes'), +(5200, 3741, 'pyre_page_bg_color', ''), +(5201, 3741, 'pyre_page_bg', ''), +(5202, 3741, 'pyre_page_bg_full', 'no'), +(5203, 3741, 'pyre_page_bg_repeat', 'repeat'), +(5204, 3741, 'pyre_page_title_bar_bg', ''), +(5205, 3741, 'pyre_page_title_bar_bg_retina', ''), +(5206, 3741, 'pyre_page_title_bar_bg_color', ''), +(5207, 3741, 'pyre_image_rollover_icons', 'linkzoom'), +(5208, 3741, 'pyre_link_icon_url', ''), +(5209, 3741, '_wp_page_template', 'full-width.php'), +(5210, 3741, 'avada_post_views_count', '0'), +(5211, 3743, 'pyre_page_title', 'yes'), +(5212, 3743, 'pyre_page_title_text', 'yes'), +(5213, 3743, 'pyre_slider_type', 'no'), +(5214, 3743, 'pyre_slider', '0'), +(5215, 3743, 'pyre_wooslider', '0'), +(5216, 3743, 'pyre_flexslider', '0'), +(5217, 3743, 'pyre_revslider', '0'), +(5218, 3743, 'pyre_elasticslider', '0'), +(5219, 3743, 'pyre_fallback', ''), +(5220, 3743, 'pyre_full_width', 'no'), +(5221, 3743, 'pyre_sidebar_position', 'default'), +(5222, 3743, 'pyre_portfolio_excerpt', ''), +(5223, 3743, 'pyre_portfolio_full_width', 'yes'), +(5224, 3743, 'pyre_portfolio_sidebar_position', 'default'), +(5225, 3743, 'pyre_portfolio_filters', 'yes'), +(5226, 3743, 'pyre_page_bg_color', ''), +(5227, 3743, 'pyre_page_bg', ''), +(5228, 3743, 'pyre_page_bg_full', 'no'), +(5229, 3743, 'pyre_page_bg_repeat', 'repeat'), +(5230, 3743, 'pyre_page_title_bar_bg', ''), +(5231, 3743, 'pyre_page_title_bar_bg_retina', ''), +(5232, 3743, 'pyre_page_title_bar_bg_color', ''), +(5233, 3743, 'pyre_image_rollover_icons', 'linkzoom'), +(5234, 3743, 'pyre_link_icon_url', ''), +(5235, 3743, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5236, 3743, '_wp_page_template', 'full-width.php'), +(5237, 3743, 'pyre_wide_page_bg', ''), +(5238, 3743, 'avada_post_views_count', '71'), +(5239, 3743, 'pyre_page_title_bg_parallax', 'default'), +(5240, 3743, 'pyre_page_title_bar_bg_full', 'default'), +(5241, 3743, 'pyre_page_title_height', ''), +(5242, 3743, 'pyre_page_title_custom_subheader', ''), +(5243, 3743, 'pyre_page_title_custom_text', ''), +(5244, 3743, 'pyre_header_bg_repeat', 'repeat'), +(5245, 3743, 'pyre_header_bg_full', 'no'), +(5246, 3743, 'pyre_header_bg_color', ''), +(5247, 3743, 'pyre_header_bg', ''), +(5248, 3743, 'pyre_wide_page_bg_repeat', 'repeat'), +(5249, 3743, 'pyre_wide_page_bg_full', 'no'), +(5250, 3743, 'pyre_wide_page_bg_color', ''), +(5251, 3743, 'pyre_page_title', 'yes'), +(5252, 3743, 'pyre_page_title_text', 'yes'), +(5253, 3743, 'pyre_slider_type', 'no'), +(5254, 3743, 'pyre_slider', '0'), +(5255, 3743, 'pyre_wooslider', '0'), +(5256, 3743, 'pyre_flexslider', '0'), +(5257, 3743, 'pyre_revslider', '0'), +(5258, 3743, 'pyre_elasticslider', '0'), +(5259, 3743, 'pyre_fallback', ''), +(5260, 3743, 'pyre_full_width', 'no'), +(5261, 3743, 'pyre_sidebar_position', 'default'), +(5262, 3743, 'pyre_portfolio_excerpt', ''), +(5263, 3743, 'pyre_portfolio_full_width', 'yes'), +(5264, 3743, 'pyre_portfolio_sidebar_position', 'default'), +(5265, 3743, 'pyre_portfolio_filters', 'yes'), +(5266, 3743, 'pyre_page_bg_color', ''), +(5267, 3743, 'pyre_page_bg', ''), +(5268, 3743, 'pyre_page_bg_full', 'no'), +(5269, 3743, 'pyre_page_bg_repeat', 'repeat'), +(5270, 3743, 'pyre_page_title_bar_bg', ''), +(5271, 3743, 'pyre_page_title_bar_bg_retina', ''), +(5272, 3743, 'pyre_page_title_bar_bg_color', ''), +(5273, 3743, 'pyre_image_rollover_icons', 'linkzoom'), +(5274, 3743, 'pyre_link_icon_url', ''), +(5275, 3743, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5276, 3743, '_wp_page_template', 'full-width.php'), +(5277, 3743, 'pyre_page_bg_layout', 'default'), +(5278, 3745, 'pyre_page_title_custom_text', ''), +(5279, 3745, 'pyre_header_bg_repeat', 'repeat'), +(5280, 3745, 'pyre_header_bg_full', 'no'), +(5281, 3745, 'pyre_header_bg_color', ''), +(5282, 3745, 'pyre_header_bg', ''), +(5283, 3745, 'pyre_page_title_custom_subheader', ''), +(5284, 3745, 'pyre_page_title_height', ''), +(5285, 3745, 'pyre_page_title', 'yes'), +(5286, 3745, 'pyre_page_title_text', 'yes'), +(5287, 3745, 'pyre_slider_type', 'no'), +(5288, 3745, 'pyre_slider', '0'), +(5289, 3745, 'pyre_wooslider', '0'), +(5290, 3745, 'pyre_flexslider', '0'), +(5291, 3745, 'pyre_revslider', '0'), +(5292, 3745, 'pyre_elasticslider', '0'), +(5293, 3745, 'pyre_fallback', ''), +(5294, 3745, 'pyre_full_width', 'no'), +(5295, 3745, 'pyre_sidebar_position', 'default'), +(5296, 3745, 'pyre_portfolio_excerpt', ''), +(5297, 3745, 'pyre_portfolio_full_width', 'yes'), +(5298, 3745, 'pyre_portfolio_sidebar_position', 'default'), +(5299, 3745, 'pyre_portfolio_filters', 'yes'), +(5300, 3745, 'pyre_page_bg_color', ''), +(5301, 3745, 'pyre_page_bg', ''), +(5302, 3745, 'pyre_page_bg_full', 'no'), +(5303, 3745, 'pyre_page_bg_repeat', 'repeat'), +(5304, 3745, 'pyre_page_title_bar_bg', ''), +(5305, 3745, 'pyre_page_title_bar_bg_retina', ''), +(5306, 3745, 'pyre_page_title_bar_bg_color', ''), +(5307, 3745, 'pyre_image_rollover_icons', 'linkzoom'), +(5308, 3745, 'pyre_link_icon_url', ''), +(5309, 3745, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5310, 3745, '_wp_page_template', 'full-width.php'), +(5311, 3745, 'pyre_wide_page_bg', ''), +(5312, 3745, 'pyre_wide_page_bg_repeat', 'repeat'), +(5313, 3745, 'pyre_wide_page_bg_full', 'no'), +(5314, 3745, 'pyre_wide_page_bg_color', ''), +(5315, 3745, 'avada_post_views_count', '51'), +(5316, 3745, 'pyre_page_title_bg_parallax', 'default'), +(5317, 3745, 'pyre_page_title_bar_bg_full', 'default'), +(5318, 3745, 'pyre_page_title', 'yes'), +(5319, 3745, 'pyre_page_title_text', 'yes'), +(5320, 3745, 'pyre_slider_type', 'no'), +(5321, 3745, 'pyre_slider', '0'), +(5322, 3745, 'pyre_wooslider', '0'), +(5323, 3745, 'pyre_flexslider', '0'), +(5324, 3745, 'pyre_revslider', '0'), +(5325, 3745, 'pyre_elasticslider', '0'), +(5326, 3745, 'pyre_fallback', ''), +(5327, 3745, 'pyre_full_width', 'no'), +(5328, 3745, 'pyre_sidebar_position', 'default'), +(5329, 3745, 'pyre_portfolio_excerpt', ''), +(5330, 3745, 'pyre_portfolio_full_width', 'yes'), +(5331, 3745, 'pyre_portfolio_sidebar_position', 'default'), +(5332, 3745, 'pyre_portfolio_filters', 'yes'), +(5333, 3745, 'pyre_page_bg_color', ''), +(5334, 3745, 'pyre_page_bg', ''), +(5335, 3745, 'pyre_page_bg_full', 'no'), +(5336, 3745, 'pyre_page_bg_repeat', 'repeat'), +(5337, 3745, 'pyre_page_title_bar_bg', ''), +(5338, 3745, 'pyre_page_title_bar_bg_retina', ''), +(5339, 3745, 'pyre_page_title_bar_bg_color', ''), +(5340, 3745, 'pyre_image_rollover_icons', 'linkzoom'), +(5341, 3745, 'pyre_link_icon_url', ''), +(5342, 3745, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5343, 3745, '_wp_page_template', 'full-width.php'), +(5344, 3745, 'pyre_page_bg_layout', 'default'), +(5345, 3747, 'pyre_page_title', 'yes'), +(5346, 3747, 'pyre_page_title_text', 'yes'), +(5347, 3747, 'pyre_slider_type', 'no'), +(5348, 3747, 'pyre_slider', '0'), +(5349, 3747, 'pyre_wooslider', '0'), +(5350, 3747, 'pyre_flexslider', '0'), +(5351, 3747, 'pyre_revslider', '0'), +(5352, 3747, 'pyre_elasticslider', '0'), +(5353, 3747, 'pyre_fallback', ''), +(5354, 3747, 'pyre_full_width', 'no'), +(5355, 3747, 'pyre_sidebar_position', 'default'), +(5356, 3747, 'pyre_portfolio_excerpt', ''), +(5357, 3747, 'pyre_portfolio_full_width', 'yes'), +(5358, 3747, 'pyre_portfolio_sidebar_position', 'default'), +(5359, 3747, 'pyre_portfolio_filters', 'yes'), +(5360, 3747, 'pyre_page_bg_color', ''), +(5361, 3747, 'pyre_page_bg', ''), +(5362, 3747, 'pyre_page_bg_full', 'no'), +(5363, 3747, 'pyre_page_bg_repeat', 'repeat'), +(5364, 3747, 'pyre_page_title_bar_bg', ''), +(5365, 3747, 'pyre_page_title_bar_bg_retina', ''), +(5366, 3747, 'pyre_page_title_bar_bg_color', ''), +(5367, 3747, 'pyre_image_rollover_icons', 'linkzoom'), +(5368, 3747, 'pyre_link_icon_url', ''), +(5369, 3747, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5370, 3747, '_wp_page_template', 'full-width.php'), +(5371, 3747, 'pyre_page_title_bg_parallax', 'default'), +(5372, 3747, 'pyre_page_title_bar_bg_full', 'default'), +(5373, 3747, 'pyre_page_title_height', ''), +(5374, 3747, 'pyre_page_title_custom_subheader', ''), +(5375, 3747, 'pyre_page_title_custom_text', ''), +(5376, 3747, 'pyre_header_bg_repeat', 'repeat'), +(5377, 3747, 'pyre_header_bg_full', 'no'), +(5378, 3747, 'avada_post_views_count', '39'), +(5379, 3747, 'pyre_header_bg_color', ''), +(5380, 3747, 'pyre_header_bg', ''), +(5381, 3747, 'pyre_wide_page_bg_repeat', 'repeat'), +(5382, 3747, 'pyre_wide_page_bg_full', 'no'), +(5383, 3747, 'pyre_wide_page_bg_color', ''), +(5384, 3747, 'pyre_wide_page_bg', ''), +(5385, 3747, 'pyre_page_bg_layout', 'default'), +(5386, 3747, 'pyre_page_title', 'yes'), +(5387, 3747, 'pyre_page_title_text', 'yes'), +(5388, 3747, 'pyre_slider_type', 'no'), +(5389, 3747, 'pyre_slider', '0'), +(5390, 3747, 'pyre_wooslider', '0'), +(5391, 3747, 'pyre_flexslider', '0'), +(5392, 3747, 'pyre_revslider', '0'), +(5393, 3747, 'pyre_elasticslider', '0'), +(5394, 3747, 'pyre_fallback', ''), +(5395, 3747, 'pyre_full_width', 'no'), +(5396, 3747, 'pyre_sidebar_position', 'default'), +(5397, 3747, 'pyre_portfolio_excerpt', ''), +(5398, 3747, 'pyre_portfolio_full_width', 'yes'), +(5399, 3747, 'pyre_portfolio_sidebar_position', 'default'), +(5400, 3747, 'pyre_portfolio_filters', 'yes'), +(5401, 3747, 'pyre_page_bg_color', ''), +(5402, 3747, 'pyre_page_bg', ''), +(5403, 3747, 'pyre_page_bg_full', 'no'), +(5404, 3747, 'pyre_page_bg_repeat', 'repeat'), +(5405, 3747, 'pyre_page_title_bar_bg', ''), +(5406, 3747, 'pyre_page_title_bar_bg_retina', ''), +(5407, 3747, 'pyre_page_title_bar_bg_color', ''), +(5408, 3747, 'pyre_image_rollover_icons', 'linkzoom'), +(5409, 3747, 'pyre_link_icon_url', ''), +(5410, 3747, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5411, 3747, '_wp_page_template', 'full-width.php'), +(5412, 3749, 'pyre_header_bg_color', ''), +(5413, 3749, 'pyre_header_bg', ''), +(5414, 3749, 'pyre_wide_page_bg_repeat', 'repeat'), +(5415, 3749, 'pyre_wide_page_bg_full', 'no'), +(5416, 3749, 'pyre_page_title', 'yes'), +(5417, 3749, 'pyre_page_title_text', 'yes'), +(5418, 3749, 'pyre_slider_type', 'no'), +(5419, 3749, 'pyre_slider', '0'), +(5420, 3749, 'pyre_wooslider', '0'), +(5421, 3749, 'pyre_flexslider', '0'), +(5422, 3749, 'pyre_revslider', '0'), +(5423, 3749, 'pyre_elasticslider', '0'), +(5424, 3749, 'pyre_fallback', ''), +(5425, 3749, 'pyre_full_width', 'no'), +(5426, 3749, 'pyre_sidebar_position', 'default'), +(5427, 3749, 'pyre_portfolio_excerpt', ''), +(5428, 3749, 'pyre_portfolio_full_width', 'yes'), +(5429, 3749, 'pyre_portfolio_sidebar_position', 'default'), +(5430, 3749, 'pyre_portfolio_filters', 'yes'), +(5431, 3749, 'pyre_page_bg_color', ''), +(5432, 3749, 'pyre_page_bg', ''), +(5433, 3749, 'pyre_page_bg_full', 'no'), +(5434, 3749, 'pyre_page_bg_repeat', 'repeat'), +(5435, 3749, 'pyre_page_title_bar_bg', ''), +(5436, 3749, 'pyre_page_title_bar_bg_retina', ''), +(5437, 3749, 'pyre_page_title_bar_bg_color', ''), +(5438, 3749, 'pyre_image_rollover_icons', 'linkzoom'), +(5439, 3749, 'pyre_link_icon_url', ''), +(5440, 3749, 'pyre_page_bg_layout', 'default'), +(5441, 3749, '_wp_page_template', 'full-width.php'), +(5442, 3749, 'pyre_wide_page_bg_color', ''), +(5443, 3749, 'avada_post_views_count', '39'), +(5444, 3749, 'pyre_header_bg_full', 'no'), +(5445, 3749, 'pyre_header_bg_repeat', 'repeat'), +(5446, 3749, 'pyre_page_title_bg_parallax', 'default'), +(5447, 3749, 'pyre_page_title_bar_bg_full', 'default'), +(5448, 3749, 'pyre_page_title_height', ''), +(5449, 3749, 'pyre_page_title_custom_subheader', ''), +(5450, 3749, 'pyre_page_title_custom_text', ''), +(5451, 3749, 'pyre_page_title', 'yes'), +(5452, 3749, 'pyre_page_title_text', 'yes'), +(5453, 3749, 'pyre_slider_type', 'no'), +(5454, 3749, 'pyre_slider', '0'), +(5455, 3749, 'pyre_wooslider', '0'), +(5456, 3749, 'pyre_flexslider', '0'), +(5457, 3749, 'pyre_revslider', '0'), +(5458, 3749, 'pyre_elasticslider', '0'), +(5459, 3749, 'pyre_fallback', ''), +(5460, 3749, 'pyre_full_width', 'no'), +(5461, 3749, 'pyre_sidebar_position', 'default'), +(5462, 3749, 'pyre_portfolio_excerpt', ''), +(5463, 3749, 'pyre_portfolio_full_width', 'yes'), +(5464, 3749, 'pyre_portfolio_sidebar_position', 'default'), +(5465, 3749, 'pyre_portfolio_filters', 'yes'), +(5466, 3749, 'pyre_page_bg_color', ''), +(5467, 3749, 'pyre_page_bg', ''), +(5468, 3749, 'pyre_page_bg_full', 'no'), +(5469, 3749, 'pyre_page_bg_repeat', 'repeat'), +(5470, 3749, 'pyre_page_title_bar_bg', ''), +(5471, 3749, 'pyre_page_title_bar_bg_retina', ''), +(5472, 3749, 'pyre_page_title_bar_bg_color', ''), +(5473, 3749, 'pyre_image_rollover_icons', 'linkzoom'), +(5474, 3749, 'pyre_link_icon_url', ''), +(5475, 3749, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5476, 3749, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5477, 3749, '_wp_page_template', 'full-width.php'), +(5478, 3749, 'avada_post_views_count', '0'), +(5479, 3749, 'pyre_wide_page_bg', ''), +(5480, 3751, 'pyre_page_title', 'yes'), +(5481, 3751, 'pyre_page_title_text', 'yes'), +(5482, 3751, 'pyre_slider_type', 'no'), +(5483, 3751, 'pyre_slider', '0'), +(5484, 3751, 'pyre_wooslider', '0'), +(5485, 3751, 'pyre_flexslider', '0'), +(5486, 3751, 'pyre_revslider', '0'), +(5487, 3751, 'pyre_elasticslider', '0'), +(5488, 3751, 'pyre_fallback', ''), +(5489, 3751, 'pyre_full_width', 'no'), +(5490, 3751, 'pyre_sidebar_position', 'default'), +(5491, 3751, 'pyre_portfolio_excerpt', ''), +(5492, 3751, 'pyre_portfolio_full_width', 'yes'), +(5493, 3751, 'pyre_portfolio_sidebar_position', 'default'), +(5494, 3751, 'pyre_portfolio_filters', 'yes'), +(5495, 3751, 'pyre_page_bg_color', ''), +(5496, 3751, 'pyre_page_bg', ''), +(5497, 3751, 'pyre_page_bg_full', 'no'), +(5498, 3751, 'pyre_page_bg_repeat', 'repeat'), +(5499, 3751, 'pyre_page_title_bar_bg', ''), +(5500, 3751, 'pyre_page_title_bar_bg_retina', ''), +(5501, 3751, 'pyre_page_title_bar_bg_color', ''), +(5502, 3751, 'pyre_image_rollover_icons', 'linkzoom'), +(5503, 3751, 'pyre_link_icon_url', ''), +(5504, 3751, 'pyre_page_title_custom_subheader', ''), +(5505, 3751, 'pyre_page_title_custom_text', ''), +(5506, 3751, '_wp_page_template', 'full-width.php'), +(5507, 3751, 'avada_post_views_count', '45'), +(5508, 3751, 'pyre_page_bg_layout', 'default'), +(5509, 3751, 'pyre_wide_page_bg', ''), +(5510, 3751, 'pyre_wide_page_bg_color', ''), +(5511, 3751, 'pyre_wide_page_bg_full', 'no'), +(5512, 3751, 'pyre_wide_page_bg_repeat', 'repeat'), +(5513, 3751, 'pyre_header_bg', ''), +(5514, 3751, 'pyre_header_bg_color', ''), +(5515, 3751, 'pyre_header_bg_full', 'no'), +(5516, 3751, 'pyre_header_bg_repeat', 'repeat'), +(5517, 3751, 'pyre_page_title_bar_bg_full', 'no'), +(5518, 3751, 'pyre_page_title_bg_parallax', 'default'), +(5519, 3751, 'pyre_page_title_height', ''), +(5520, 3751, 'pyre_page_title', 'yes'), +(5521, 3751, 'pyre_page_title_text', 'yes'), +(5522, 3751, 'pyre_slider_type', 'no'), +(5523, 3751, 'pyre_slider', '0'), +(5524, 3751, 'pyre_wooslider', '0'), +(5525, 3751, 'pyre_flexslider', '0'), +(5526, 3751, 'pyre_revslider', '0'), +(5527, 3751, 'pyre_elasticslider', '0'), +(5528, 3751, 'pyre_fallback', ''), +(5529, 3751, 'pyre_full_width', 'no'), +(5530, 3751, 'pyre_sidebar_position', 'default'), +(5531, 3751, 'pyre_portfolio_excerpt', ''), +(5532, 3751, 'pyre_portfolio_full_width', 'yes'), +(5533, 3751, 'pyre_portfolio_sidebar_position', 'default'), +(5534, 3751, 'pyre_portfolio_filters', 'yes'), +(5535, 3751, 'pyre_page_bg_color', ''), +(5536, 3751, 'pyre_page_bg', ''), +(5537, 3751, 'pyre_page_bg_full', 'no'), +(5538, 3751, 'pyre_page_bg_repeat', 'repeat'), +(5539, 3751, 'pyre_page_title_bar_bg', ''), +(5540, 3751, 'pyre_page_title_bar_bg_retina', ''), +(5541, 3751, 'pyre_page_title_bar_bg_color', ''), +(5542, 3751, 'pyre_image_rollover_icons', 'linkzoom'), +(5543, 3751, 'pyre_link_icon_url', ''), +(5544, 3751, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5545, 3751, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5546, 3751, '_wp_page_template', 'full-width.php'), +(5547, 3754, 'pyre_page_title', 'yes'), +(5548, 3754, 'pyre_page_title_text', 'yes'), +(5549, 3754, 'pyre_slider_type', 'no'), +(5550, 3754, 'pyre_slider', '0'), +(5551, 3754, 'pyre_wooslider', '0'), +(5552, 3754, 'pyre_flexslider', '0'), +(5553, 3754, 'pyre_revslider', '0'), +(5554, 3754, 'pyre_elasticslider', '0'), +(5555, 3754, 'pyre_fallback', ''), +(5556, 3754, 'pyre_full_width', 'no'), +(5557, 3754, 'pyre_sidebar_position', 'default'), +(5558, 3754, 'pyre_portfolio_excerpt', ''), +(5559, 3754, 'pyre_portfolio_full_width', 'yes'), +(5560, 3754, 'pyre_portfolio_sidebar_position', 'default'), +(5561, 3754, 'pyre_portfolio_filters', 'yes'), +(5562, 3754, 'pyre_page_bg_color', ''), +(5563, 3754, 'pyre_page_bg', ''), +(5564, 3754, 'pyre_page_bg_full', 'no'), +(5565, 3754, 'pyre_page_bg_repeat', 'repeat'), +(5566, 3754, 'pyre_page_title_bar_bg', ''), +(5567, 3754, 'pyre_page_title_bar_bg_retina', ''), +(5568, 3754, 'pyre_page_title_bar_bg_color', ''), +(5569, 3754, 'pyre_image_rollover_icons', 'linkzoom'), +(5570, 3754, 'pyre_link_icon_url', ''), +(5571, 3754, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5572, 3754, '_wp_page_template', 'full-width.php'), +(5573, 3754, 'pyre_page_title_bg_parallax', 'default'), +(5574, 3754, 'pyre_page_title_height', ''), +(5575, 3754, 'pyre_page_title_custom_subheader', ''), +(5576, 3754, 'pyre_page_title_custom_text', ''), +(5577, 3754, 'pyre_header_bg_repeat', 'repeat'), +(5578, 3754, 'pyre_header_bg_full', 'no'), +(5579, 3754, 'pyre_header_bg', ''), +(5580, 3754, 'pyre_header_bg_color', ''), +(5581, 3754, 'pyre_wide_page_bg_repeat', 'repeat'), +(5582, 3754, 'avada_post_views_count', '39'), +(5583, 3754, 'pyre_page_title_bar_bg_full', 'default'), +(5584, 3754, 'pyre_page_bg_layout', 'default'), +(5585, 3754, 'pyre_wide_page_bg', ''), +(5586, 3754, 'pyre_wide_page_bg_color', ''), +(5587, 3754, 'pyre_wide_page_bg_full', 'no'), +(5588, 3754, 'pyre_page_title', 'yes'), +(5589, 3754, 'pyre_page_title_text', 'yes'), +(5590, 3754, 'pyre_slider_type', 'no'), +(5591, 3754, 'pyre_slider', '0'), +(5592, 3754, 'pyre_wooslider', '0'), +(5593, 3754, 'pyre_flexslider', '0'), +(5594, 3754, 'pyre_revslider', '0'), +(5595, 3754, 'pyre_elasticslider', '0'), +(5596, 3754, 'pyre_fallback', ''), +(5597, 3754, 'pyre_full_width', 'no'), +(5598, 3754, 'pyre_sidebar_position', 'default'), +(5599, 3754, 'pyre_portfolio_excerpt', ''), +(5600, 3754, 'pyre_portfolio_full_width', 'yes'), +(5601, 3754, 'pyre_portfolio_sidebar_position', 'default'), +(5602, 3754, 'pyre_portfolio_filters', 'yes'), +(5603, 3754, 'pyre_page_bg_color', ''), +(5604, 3754, 'pyre_page_bg', ''), +(5605, 3754, 'pyre_page_bg_full', 'no'), +(5606, 3754, 'pyre_page_bg_repeat', 'repeat'), +(5607, 3754, 'pyre_page_title_bar_bg', ''), +(5608, 3754, 'pyre_page_title_bar_bg_retina', ''), +(5609, 3754, 'pyre_page_title_bar_bg_color', ''), +(5610, 3754, 'pyre_image_rollover_icons', 'linkzoom'), +(5611, 3754, 'pyre_link_icon_url', ''), +(5612, 3754, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5613, 3754, '_wp_page_template', 'full-width.php'), +(5614, 3756, 'pyre_page_title', 'yes'), +(5615, 3756, 'pyre_page_title_text', 'yes'), +(5616, 3756, 'pyre_slider_type', 'no'), +(5617, 3756, 'pyre_slider', '0'), +(5618, 3756, 'pyre_wooslider', '0'), +(5619, 3756, 'pyre_flexslider', '0'), +(5620, 3756, 'pyre_revslider', '0'), +(5621, 3756, 'pyre_elasticslider', '0'), +(5622, 3756, 'pyre_fallback', ''), +(5623, 3756, 'pyre_full_width', 'no'), +(5624, 3756, 'pyre_sidebar_position', 'default'), +(5625, 3756, 'pyre_portfolio_excerpt', ''), +(5626, 3756, 'pyre_portfolio_full_width', 'yes'), +(5627, 3756, 'pyre_portfolio_sidebar_position', 'default'), +(5628, 3756, 'pyre_portfolio_filters', 'yes'), +(5629, 3756, 'pyre_page_bg_color', ''), +(5630, 3756, 'pyre_page_bg', ''), +(5631, 3756, 'pyre_page_bg_full', 'no'), +(5632, 3756, 'pyre_page_bg_repeat', 'repeat'), +(5633, 3756, 'pyre_page_title_bar_bg', ''), +(5634, 3756, 'pyre_page_title_bar_bg_retina', ''), +(5635, 3756, 'pyre_page_title_bar_bg_color', ''), +(5636, 3756, 'pyre_image_rollover_icons', 'linkzoom'), +(5637, 3756, 'pyre_link_icon_url', ''), +(5638, 3756, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5639, 3756, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5640, 3756, '_wp_page_template', 'full-width.php'), +(5641, 3756, 'avada_post_views_count', '50'), +(5642, 3756, 'pyre_page_title', 'yes'), +(5643, 3756, 'pyre_page_title_text', 'yes'), +(5644, 3756, 'pyre_slider_type', 'no'), +(5645, 3756, 'pyre_slider', '0'), +(5646, 3756, 'pyre_wooslider', '0'), +(5647, 3756, 'pyre_flexslider', '0'), +(5648, 3756, 'pyre_revslider', '0'), +(5649, 3756, 'pyre_elasticslider', '0'), +(5650, 3756, 'pyre_fallback', ''), +(5651, 3756, 'pyre_full_width', 'no'), +(5652, 3756, 'pyre_sidebar_position', 'default'), +(5653, 3756, 'pyre_portfolio_excerpt', ''), +(5654, 3756, 'pyre_portfolio_full_width', 'yes'), +(5655, 3756, 'pyre_portfolio_sidebar_position', 'default'), +(5656, 3756, 'pyre_portfolio_filters', 'yes'), +(5657, 3756, 'pyre_page_bg_color', ''), +(5658, 3756, 'pyre_page_bg', ''), +(5659, 3756, 'pyre_page_bg_full', 'no'), +(5660, 3756, 'pyre_page_bg_repeat', 'repeat'), +(5661, 3756, 'pyre_page_title_bar_bg', ''), +(5662, 3756, 'pyre_page_title_bar_bg_retina', ''), +(5663, 3756, 'pyre_page_title_bar_bg_color', ''), +(5664, 3756, 'pyre_image_rollover_icons', 'linkzoom'), +(5665, 3756, 'pyre_link_icon_url', ''), +(5666, 3756, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5667, 3756, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5668, 3756, '_wp_page_template', 'full-width.php'), +(5669, 3813, '_wp_page_template', '100-width.php'), +(7992, 3813, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5671, 3813, 'pyre_slider_type', 'rev'), +(5672, 3813, 'pyre_slider', '0'), +(5673, 3813, 'pyre_wooslider', '0'), +(5674, 3813, 'pyre_flexslider', '0'), +(5675, 3813, 'pyre_revslider', 'Avada_Full_Width'), +(5676, 3813, 'pyre_elasticslider', '0'), +(5677, 3813, 'pyre_fallback', ''), +(5678, 3813, 'pyre_full_width', 'no'), +(5679, 3813, 'pyre_sidebar_position', 'default'), +(5680, 3813, 'pyre_portfolio_excerpt', ''), +(5681, 3813, 'pyre_portfolio_full_width', 'yes'), +(5682, 3813, 'pyre_portfolio_sidebar_position', 'default'), +(5683, 3813, 'pyre_portfolio_filters', 'yes'), +(5684, 3813, 'pyre_page_bg_layout', 'default'), +(5685, 3813, 'pyre_page_bg', ''), +(5686, 3813, 'pyre_page_bg_color', ''), +(5687, 3813, 'pyre_page_bg_full', 'no'), +(5688, 3813, 'pyre_page_bg_repeat', 'repeat'), +(5689, 3813, 'pyre_wide_page_bg', ''), +(5690, 3813, 'pyre_wide_page_bg_color', ''), +(5691, 3813, 'pyre_wide_page_bg_full', 'no'), +(5692, 3813, 'pyre_wide_page_bg_repeat', 'repeat'), +(5693, 3813, 'pyre_header_bg', ''), +(5694, 3813, 'pyre_header_bg_color', ''), +(5695, 3813, 'pyre_header_bg_full', 'no'), +(5696, 3813, 'pyre_header_bg_repeat', 'repeat'), +(5697, 3813, 'pyre_page_title', 'no'), +(5698, 3813, 'pyre_page_title_text', 'yes'), +(5699, 3813, 'pyre_page_title_bar_bg', ''), +(5700, 3813, 'pyre_page_title_bar_bg_retina', ''), +(5701, 3813, 'pyre_page_title_bar_bg_color', ''), +(5702, 3813, 'pyre_page_title_bar_bg_full', 'no'), +(5703, 3813, 'pyre_image_rollover_icons', 'linkzoom'), +(5704, 3813, 'pyre_link_icon_url', ''), +(5705, 3813, 'avada_post_views_count', '67'), +(7993, 3813, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5707, 3815, 'pyre_page_bg', ''), +(5708, 3815, 'pyre_sidebar_position', 'default'), +(5709, 3815, 'pyre_portfolio_excerpt', ''), +(5710, 3815, 'pyre_portfolio_full_width', 'yes'), +(5711, 3815, 'pyre_page_bg_layout', 'default'), +(5712, 3815, 'pyre_portfolio_filters', 'yes'), +(5713, 3815, 'pyre_portfolio_sidebar_position', 'default'), +(5714, 3815, '_wp_page_template', '100-width.php'), +(5715, 3815, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5716, 3815, 'pyre_slider_type', 'rev'), +(5717, 3815, 'pyre_slider', '0'), +(5718, 3815, 'pyre_wooslider', '0'), +(5719, 3815, 'pyre_flexslider', '0'), +(5720, 3815, 'pyre_revslider', 'Avada_Full_Width'), +(5721, 3815, 'pyre_elasticslider', '0'), +(5722, 3815, 'pyre_fallback', ''), +(5723, 3815, 'pyre_full_width', 'no'), +(5724, 3815, 'pyre_page_bg_color', ''), +(5725, 3815, 'pyre_page_bg_full', 'no'), +(5726, 3815, 'pyre_page_bg_repeat', 'repeat'), +(5727, 3815, 'pyre_wide_page_bg', ''), +(5728, 3815, 'pyre_wide_page_bg_color', ''), +(5729, 3815, 'pyre_wide_page_bg_full', 'no'), +(5730, 3815, 'pyre_wide_page_bg_repeat', 'repeat'), +(5731, 3815, 'pyre_header_bg', ''), +(5732, 3815, 'pyre_header_bg_color', ''), +(5733, 3815, 'pyre_header_bg_full', 'no'), +(5734, 3815, 'pyre_header_bg_repeat', 'repeat'), +(5735, 3815, 'pyre_page_title', 'no'), +(5736, 3815, 'pyre_page_title_text', 'yes'), +(5737, 3815, 'pyre_page_title_bar_bg', ''), +(5738, 3815, 'pyre_page_title_bar_bg_retina', ''), +(5739, 3815, 'pyre_page_title_bar_bg_color', ''), +(5740, 3815, 'pyre_page_title_bar_bg_full', 'no'), +(5741, 3815, 'pyre_image_rollover_icons', 'linkzoom'), +(5742, 3815, 'pyre_link_icon_url', ''), +(5743, 3815, '_post_restored_from', 'a:3:{s:20:"restored_revision_id";i:3843;s:16:"restored_by_user";i:1;s:13:"restored_time";i:1376934397;}'), +(5744, 3815, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5745, 3815, 'avada_post_views_count', '88'), +(5746, 3815, 'pyre_page_bg', ''), +(5747, 3815, 'pyre_sidebar_position', 'default'), +(5748, 3815, 'pyre_portfolio_excerpt', ''), +(5749, 3815, 'pyre_portfolio_full_width', 'yes'), +(5750, 3815, 'pyre_page_bg_layout', 'default'), +(5751, 3815, 'pyre_portfolio_filters', 'yes'), +(5752, 3815, 'pyre_portfolio_sidebar_position', 'default'), +(5753, 3815, '_wp_page_template', '100-width.php'), +(5754, 3815, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5755, 3815, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5756, 3815, 'pyre_slider_type', 'no'), +(5757, 3815, 'pyre_slider', '0'), +(5758, 3815, 'pyre_wooslider', '0'), +(5759, 3815, 'pyre_flexslider', '0'), +(5760, 3815, 'pyre_revslider', '0'), +(5761, 3815, 'pyre_elasticslider', '0'), +(5762, 3815, 'pyre_fallback', ''), +(5763, 3815, 'pyre_full_width', 'no'), +(5764, 3815, 'pyre_page_bg_color', ''), +(5765, 3815, 'pyre_page_bg_full', 'no'), +(5766, 3815, 'pyre_page_bg_repeat', 'repeat'), +(5767, 3815, 'pyre_wide_page_bg', ''), +(5768, 3815, 'pyre_wide_page_bg_color', ''), +(5769, 3815, 'pyre_wide_page_bg_full', 'no'), +(5770, 3815, 'pyre_wide_page_bg_repeat', 'repeat'), +(5771, 3815, 'pyre_header_bg', ''), +(5772, 3815, 'pyre_header_bg_color', ''), +(5773, 3815, 'pyre_header_bg_full', 'no'), +(5774, 3815, 'pyre_header_bg_repeat', 'repeat'), +(5775, 3815, 'pyre_page_title', 'no'), +(5776, 3815, 'pyre_page_title_text', 'yes'), +(5777, 3815, 'pyre_page_title_bar_bg', ''), +(5778, 3815, 'pyre_page_title_bar_bg_retina', ''), +(5779, 3815, 'pyre_page_title_bar_bg_color', ''), +(5780, 3815, 'pyre_page_title_bar_bg_full', 'no'), +(5781, 3815, 'pyre_image_rollover_icons', 'linkzoom'), +(5782, 3815, 'pyre_link_icon_url', ''), +(5783, 3815, '_post_restored_from', 'a:3:{s:20:"restored_revision_id";i:3843;s:16:"restored_by_user";i:1;s:13:"restored_time";i:1376934397;}'), +(5784, 3815, 'avada_post_views_count', '5'), +(5785, 3846, '_wp_page_template', 'portfolio-grid.php'), +(5786, 3846, 'pyre_slider_type', 'no'), +(5787, 3846, 'pyre_slider', '0'), +(5788, 3846, 'pyre_wooslider', '0'), +(5789, 3846, 'pyre_flexslider', '0'), +(5790, 3846, 'pyre_revslider', '0'), +(5791, 3846, 'pyre_elasticslider', '0'), +(5792, 3846, 'pyre_fallback', ''), +(5793, 3846, 'pyre_full_width', 'no'), +(5794, 3846, 'pyre_sidebar_position', 'default'), +(5795, 3846, 'pyre_portfolio_excerpt', ''), +(5796, 3846, 'pyre_portfolio_full_width', 'yes'), +(5797, 3846, 'pyre_portfolio_sidebar_position', 'default'), +(5798, 3846, 'pyre_portfolio_filters', 'yes'), +(5799, 3846, 'pyre_page_bg_layout', 'default'), +(5800, 3846, 'pyre_page_bg', ''), +(5801, 3846, 'pyre_page_bg_color', ''), +(5802, 3846, 'pyre_page_bg_full', 'no'), +(5803, 3846, 'pyre_page_bg_repeat', 'repeat'), +(5804, 3846, 'pyre_wide_page_bg', ''), +(5805, 3846, 'pyre_wide_page_bg_color', ''), +(5806, 3846, 'pyre_wide_page_bg_full', 'no'), +(5807, 3846, 'pyre_wide_page_bg_repeat', 'repeat'), +(5808, 3846, 'pyre_header_bg', ''), +(5809, 3846, 'pyre_header_bg_color', ''), +(5810, 3846, 'pyre_header_bg_full', 'no'), +(5811, 3846, 'pyre_header_bg_repeat', 'repeat'), +(5812, 3846, 'pyre_page_title', 'yes'), +(5813, 3846, 'pyre_page_title_text', 'yes'), +(5814, 3846, 'pyre_page_title_bar_bg', ''), +(5815, 3846, 'pyre_page_title_bar_bg_retina', ''), +(5816, 3846, 'pyre_page_title_bar_bg_color', ''), +(5817, 3846, 'pyre_page_title_bar_bg_full', 'no'), +(5818, 3846, 'pyre_image_rollover_icons', 'linkzoom'), +(5819, 3846, 'pyre_link_icon_url', ''), +(5820, 3846, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5821, 3846, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5822, 3846, 'avada_post_views_count', '219'), +(5823, 3846, '_wp_page_template', 'portfolio-grid.php'), +(5824, 3846, 'pyre_slider_type', 'no'), +(5825, 3846, 'pyre_slider', '0'), +(5826, 3846, 'pyre_wooslider', '0'), +(5827, 3846, 'pyre_flexslider', '0'), +(5828, 3846, 'pyre_revslider', '0'), +(5829, 3846, 'pyre_elasticslider', '0'), +(5830, 3846, 'pyre_fallback', ''), +(5831, 3846, 'pyre_full_width', 'no'), +(5832, 3846, 'pyre_sidebar_position', 'default'), +(5833, 3846, 'pyre_portfolio_excerpt', ''), +(5834, 3846, 'pyre_portfolio_full_width', 'yes'), +(5835, 3846, 'pyre_portfolio_sidebar_position', 'default'), +(5836, 3846, 'pyre_portfolio_filters', 'yes'), +(5837, 3846, 'pyre_page_bg_layout', 'default'), +(5838, 3846, 'pyre_page_bg', ''), +(5839, 3846, 'pyre_page_bg_color', ''), +(5840, 3846, 'pyre_page_bg_full', 'no'), +(5841, 3846, 'pyre_page_bg_repeat', 'repeat'), +(5842, 3846, 'pyre_wide_page_bg', ''), +(5843, 3846, 'pyre_wide_page_bg_color', ''), +(5844, 3846, 'pyre_wide_page_bg_full', 'no'), +(5845, 3846, 'pyre_wide_page_bg_repeat', 'repeat'), +(5846, 3846, 'pyre_header_bg', ''), +(5847, 3846, 'pyre_header_bg_color', ''), +(5848, 3846, 'pyre_header_bg_full', 'no'), +(5849, 3846, 'pyre_header_bg_repeat', 'repeat'), +(5850, 3846, 'pyre_page_title', 'yes'), +(5851, 3846, 'pyre_page_title_text', 'yes'), +(5852, 3846, 'pyre_page_title_bar_bg', ''), +(5853, 3846, 'pyre_page_title_bar_bg_retina', ''), +(5854, 3846, 'pyre_page_title_bar_bg_color', ''), +(5855, 3846, 'pyre_page_title_bar_bg_full', 'no'), +(5856, 3846, 'pyre_image_rollover_icons', 'linkzoom'), +(5857, 3846, 'pyre_link_icon_url', ''), +(5858, 3846, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5859, 3846, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5860, 3846, 'avada_post_views_count', '1'), +(5861, 4097, '_wp_page_template', 'full-width.php'), +(5862, 4097, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5863, 4097, 'pyre_slider_type', 'no'), +(5864, 4097, 'pyre_slider', '0'), +(5865, 4097, 'pyre_wooslider', '0'), +(5866, 4097, 'pyre_flexslider', '0'), +(5867, 4097, 'pyre_revslider', '0'), +(5868, 4097, 'pyre_elasticslider', '0'), +(5869, 4097, 'pyre_fallback', ''), +(5870, 4097, 'pyre_full_width', 'no'), +(5871, 4097, 'pyre_sidebar_position', 'default'), +(5872, 4097, 'pyre_portfolio_excerpt', ''), +(5873, 4097, 'pyre_portfolio_full_width', 'yes'), +(5874, 4097, 'pyre_portfolio_sidebar_position', 'default'), +(5875, 4097, 'pyre_portfolio_filters', 'yes'), +(5876, 4097, 'pyre_page_bg_layout', 'default'), +(5877, 4097, 'pyre_page_bg', ''), +(5878, 4097, 'pyre_page_bg_color', ''), +(5879, 4097, 'pyre_page_bg_full', 'no'), +(5880, 4097, 'pyre_page_bg_repeat', 'repeat'), +(5881, 4097, 'pyre_wide_page_bg', ''), +(5882, 4097, 'pyre_wide_page_bg_color', ''), +(5883, 4097, 'pyre_wide_page_bg_full', 'no'), +(5884, 4097, 'pyre_wide_page_bg_repeat', 'repeat'), +(5885, 4097, 'pyre_header_bg', ''), +(5886, 4097, 'pyre_header_bg_color', ''), +(5887, 4097, 'pyre_header_bg_full', 'no'), +(5888, 4097, 'pyre_header_bg_repeat', 'repeat'), +(5889, 4097, 'pyre_page_title', 'yes'), +(5890, 4097, 'pyre_page_title_text', 'yes'), +(5891, 4097, 'pyre_page_title_custom_text', ''), +(5892, 4097, 'pyre_page_title_custom_subheader', ''), +(5893, 4097, 'pyre_page_title_height', ''), +(5894, 4097, 'pyre_page_title_bar_bg', ''), +(5895, 4097, 'pyre_page_title_bar_bg_retina', ''), +(5896, 4097, 'pyre_page_title_bar_bg_color', ''), +(5897, 4097, 'pyre_page_title_bar_bg_full', 'default'), +(5898, 4097, 'pyre_page_title_bg_parallax', 'default'), +(5899, 4097, 'pyre_image_rollover_icons', 'linkzoom'), +(5900, 4097, 'pyre_link_icon_url', ''), +(5901, 4097, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5904, 202, 'pyre_video', ''), +(5905, 202, 'pyre_overall_score', '0'), +(5906, 202, 'pyre_page_title', 'yes'), +(5907, 202, 'pyre_sidebar_position', 'right'), +(5908, 202, 'pyre_slider_type', 'no'), +(5909, 202, 'pyre_slider', '0'), +(5910, 202, 'pyre_wooslider', '0'), +(5911, 202, 'pyre_flexslider', '0'), +(5912, 202, 'pyre_revslider', '0'), +(5913, 202, 'pyre_page_bg_color', ''), +(5914, 202, 'pyre_page_bg', ''), +(5915, 202, 'pyre_page_bg_full', 'no'), +(5916, 202, 'pyre_page_bg_repeat', 'repeat'), +(5917, 202, 'pyre_page_title_bar_bg', ''), +(5918, 202, 'pyre_fimg_width', ''), +(5919, 202, 'pyre_fimg_height', ''), +(5920, 202, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5923, 202, 'pyre_full_width', 'no'), +(5924, 202, 'pyre_elasticslider', '0'), +(5925, 202, 'pyre_fallback', ''), +(5926, 202, 'pyre_page_title_bar_bg_color', ''), +(5927, 202, 'avada_post_views_count', '5'), +(5929, 202, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5930, 202, 'pyre_image_rollover_icons', 'linkzoom'), +(5931, 202, 'pyre_link_icon_url', ''), +(5932, 202, 'pyre_related_posts', 'yes'), +(5933, 202, 'pyre_page_bg_layout', 'default'), +(5934, 202, 'pyre_wide_page_bg', ''), +(5935, 202, 'pyre_wide_page_bg_color', ''), +(5936, 202, 'pyre_wide_page_bg_full', 'no'), +(5937, 202, 'pyre_wide_page_bg_repeat', 'repeat'), +(5938, 202, 'pyre_header_bg', ''), +(5939, 202, 'pyre_header_bg_color', ''), +(5940, 202, 'pyre_header_bg_full', 'no'), +(5941, 202, 'pyre_header_bg_repeat', 'repeat'), +(5942, 202, 'pyre_page_title_text', 'yes'), +(5943, 202, 'pyre_page_title_bar_bg_retina', ''), +(5944, 202, 'pyre_page_title_bar_bg_full', 'no'), +(5948, 202, 'pyre_page_title_custom_text', ''), +(5949, 202, 'pyre_page_title_custom_subheader', ''), +(5950, 202, 'pyre_page_title_height', ''), +(5951, 202, 'pyre_page_title_bg_parallax', 'default'), +(5954, 207, 'pyre_video', ''), +(5955, 207, 'pyre_overall_score', '0'), +(5956, 207, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5957, 207, 'pyre_page_title', 'yes'), +(5958, 207, 'pyre_sidebar_position', 'right'), +(5959, 207, 'pyre_slider_type', 'no'), +(5960, 207, 'pyre_slider', '0'), +(5961, 207, 'pyre_wooslider', '0'), +(5962, 207, 'pyre_flexslider', '0'), +(5963, 207, 'pyre_revslider', '0'), +(5964, 207, 'pyre_page_bg_color', ''), +(5965, 207, 'pyre_page_bg', ''), +(5966, 207, 'pyre_page_bg_full', 'no'), +(5967, 207, 'pyre_page_bg_repeat', 'repeat'), +(5968, 207, 'pyre_page_title_bar_bg', ''), +(5969, 207, 'pyre_fimg_width', ''), +(5970, 207, 'pyre_fimg_height', ''), +(5971, 207, 'pyre_full_width', 'no'), +(5972, 207, 'pyre_fallback', ''), +(5973, 207, 'pyre_page_title_bar_bg_color', ''), +(5974, 207, '_thumbnail_id', '3890'), +(5975, 207, 'pyre_elasticslider', '0'), +(5976, 207, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(5977, 207, 'avada_post_views_count', '8'), +(5978, 207, 'pyre_video', ''), +(5979, 207, 'pyre_overall_score', '0'), +(5980, 207, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(5981, 207, 'pyre_page_title', 'yes'), +(5982, 207, 'pyre_sidebar_position', 'right'), +(5983, 207, 'pyre_slider_type', 'no'), +(5984, 207, 'pyre_slider', '0'), +(5985, 207, 'pyre_wooslider', '0'), +(5986, 207, 'pyre_flexslider', '0'), +(5987, 207, 'pyre_revslider', '0'), +(5988, 207, 'pyre_page_bg_color', ''), +(5989, 207, 'pyre_page_bg', ''), +(5990, 207, 'pyre_page_bg_full', 'no'), +(5991, 207, 'pyre_page_bg_repeat', 'repeat'), +(5992, 207, 'pyre_page_title_bar_bg', ''), +(5993, 207, 'pyre_fimg_width', ''), +(5994, 207, 'pyre_fimg_height', ''), +(5995, 207, 'pyre_full_width', 'no'), +(5996, 207, 'pyre_fallback', ''), +(5997, 207, 'pyre_page_title_bar_bg_color', ''), +(5998, 207, '_thumbnail_id', '3508'), +(5999, 207, 'pyre_elasticslider', '0'), +(6000, 207, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6003, 209, 'avada_post_views_count', '11'), +(6004, 209, 'pyre_image_rollover_icons', 'linkzoom'), +(6005, 209, 'pyre_link_icon_url', ''), +(6006, 209, 'pyre_related_posts', 'yes'), +(6007, 209, 'pyre_page_bg_layout', 'default'), +(6008, 209, 'pyre_wide_page_bg', ''), +(6009, 209, 'pyre_wide_page_bg_color', ''), +(6010, 209, 'pyre_wide_page_bg_full', 'no'), +(6011, 209, 'pyre_wide_page_bg_repeat', 'repeat'), +(6012, 209, 'pyre_header_bg', ''), +(6013, 209, 'pyre_header_bg_color', ''), +(6014, 209, 'pyre_header_bg_full', 'no'), +(6015, 209, 'pyre_header_bg_repeat', 'repeat'), +(6016, 209, 'pyre_page_title_text', 'yes'), +(6017, 209, 'pyre_page_title_bar_bg_retina', ''), +(6018, 209, 'pyre_page_title_bar_bg_full', 'no'), +(6020, 209, 'pyre_page_title_custom_subheader', ''), +(6021, 209, 'pyre_video', ''), +(6022, 209, 'pyre_overall_score', '0'), +(6023, 209, 'pyre_sidebar_position', 'right'), +(6024, 209, 'pyre_page_title', 'yes'), +(6025, 209, 'pyre_slider', '0'), +(6026, 209, 'pyre_slider_type', 'no'), +(6027, 209, 'pyre_wooslider', '0'), +(6028, 209, 'pyre_fallback', ''), +(6029, 209, 'pyre_flexslider', '0'), +(6030, 209, 'pyre_revslider', '0'), +(6031, 209, 'pyre_page_bg_color', ''), +(6032, 209, 'pyre_page_bg', ''), +(6033, 209, 'pyre_page_bg_full', 'no'), +(6034, 209, 'pyre_page_bg_repeat', 'repeat'), +(6035, 209, 'pyre_page_title_bar_bg', ''), +(6036, 209, 'pyre_fimg_width', ''), +(6037, 209, 'pyre_fimg_height', ''), +(6038, 209, 'pyre_full_width', 'no'), +(6039, 209, 'pyre_page_title_bar_bg_color', ''), +(6040, 209, 'pyre_page_title_custom_text', ''), +(12990, 5078, 'slide_template', ''), +(6042, 209, 'pyre_elasticslider', '0'), +(6044, 209, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6045, 209, 'pyre_page_title_height', ''), +(6046, 209, 'pyre_page_title_bg_parallax', 'default'), +(6049, 209, 'avada_post_views_count', '11'), +(6050, 209, 'pyre_image_rollover_icons', 'linkzoom'), +(6051, 209, 'pyre_link_icon_url', ''), +(6052, 209, 'pyre_related_posts', 'yes'), +(6053, 209, 'pyre_page_bg_layout', 'default'), +(6054, 209, 'pyre_wide_page_bg', ''), +(6055, 209, 'pyre_wide_page_bg_color', ''), +(6056, 209, 'pyre_wide_page_bg_full', 'no'), +(6057, 209, 'pyre_wide_page_bg_repeat', 'repeat'), +(6058, 209, 'pyre_header_bg', ''), +(6059, 209, 'pyre_header_bg_color', ''), +(6060, 209, 'pyre_header_bg_full', 'no'), +(6061, 209, 'pyre_header_bg_repeat', 'repeat'), +(6062, 209, 'pyre_page_title_text', 'yes'), +(6063, 209, 'pyre_page_title_bar_bg_retina', ''), +(6064, 209, 'pyre_page_title_bar_bg_full', 'no'), +(6065, 209, 'pyre_video', ''), +(6066, 209, 'pyre_overall_score', '0'), +(6067, 209, 'slide_template', 'default'), +(6068, 209, 'pyre_sidebar_position', 'right'), +(6069, 209, 'pyre_page_title', 'yes'), +(6070, 209, 'pyre_slider', '0'), +(6071, 209, 'pyre_slider_type', 'no'), +(6072, 209, 'pyre_wooslider', '0'), +(6073, 209, 'pyre_fallback', ''), +(6074, 209, 'pyre_flexslider', '0'), +(6075, 209, 'pyre_revslider', '0'), +(6076, 209, 'pyre_page_bg_color', ''), +(6077, 209, 'pyre_page_bg', ''), +(6078, 209, 'pyre_page_bg_full', 'no'), +(6079, 209, 'pyre_page_bg_repeat', 'repeat'), +(6080, 209, 'pyre_page_title_bar_bg', ''), +(6081, 209, 'pyre_fimg_width', ''), +(6082, 209, 'pyre_fimg_height', ''), +(6083, 209, 'pyre_full_width', 'no'), +(6084, 209, 'pyre_page_title_bar_bg_color', ''), +(6085, 209, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6088, 209, 'pyre_elasticslider', '0'), +(6091, 211, 'slide_template', ''), +(6093, 211, 'pyre_video', ''), +(6094, 211, 'pyre_overall_score', '0'), +(6095, 211, 'pyre_elasticslider', '0'), +(6096, 211, 'pyre_slider_type', 'no'), +(6097, 211, 'pyre_page_title', 'yes'), +(6098, 211, 'pyre_sidebar_position', 'right'), +(6099, 211, 'pyre_slider', '0'), +(6100, 211, 'pyre_wooslider', '0'), +(6101, 211, 'pyre_flexslider', '0'), +(6102, 211, 'pyre_revslider', '0'), +(6103, 211, 'pyre_page_bg_color', ''), +(6104, 211, 'pyre_page_bg', ''), +(6105, 211, 'pyre_page_bg_full', 'no'), +(6106, 211, 'pyre_page_bg_repeat', 'repeat'), +(6107, 211, 'pyre_page_title_bar_bg', ''), +(6108, 211, 'pyre_fimg_width', ''), +(6109, 211, 'pyre_fimg_height', ''), +(6110, 211, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6111, 211, 'pyre_full_width', 'no'), +(6112, 211, 'pyre_fallback', ''), +(6113, 211, 'avada_post_views_count', '23'), +(6115, 211, 'pyre_page_title_bar_bg_color', ''), +(6116, 211, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6117, 211, 'pyre_video', ''), +(6118, 211, 'pyre_overall_score', '0'), +(6119, 211, 'pyre_elasticslider', '0'), +(6120, 211, 'pyre_slider_type', 'no'), +(6121, 211, 'pyre_page_title', 'yes'), +(6122, 211, 'pyre_sidebar_position', 'right'), +(6123, 211, 'pyre_slider', '0'), +(6124, 211, 'pyre_wooslider', '0'), +(6125, 211, 'pyre_flexslider', '0'), +(6126, 211, 'pyre_revslider', '0'), +(6127, 211, 'pyre_page_bg_color', ''), +(6128, 211, 'pyre_page_bg', ''), +(6129, 211, 'pyre_page_bg_full', 'no'), +(6130, 211, 'pyre_page_bg_repeat', 'repeat'), +(6131, 211, 'pyre_page_title_bar_bg', ''), +(6132, 211, 'pyre_fimg_width', ''), +(6133, 211, 'pyre_fimg_height', ''), +(6134, 211, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6135, 211, 'pyre_full_width', 'no'), +(6136, 211, 'pyre_fallback', ''), +(6137, 211, '_thumbnail_id', '3508'); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(6138, 211, 'pyre_page_title_bar_bg_color', ''), +(6139, 211, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6142, 215, 'pyre_page_title_custom_subheader', ''), +(6144, 215, 'slide_template', 'default'), +(6145, 215, 'pyre_video', ''), +(6146, 215, 'pyre_page_title_bar_bg_color', ''), +(6147, 215, 'pyre_slider_type', 'no'), +(6148, 215, 'pyre_overall_score', '0'), +(6149, 215, 'pyre_page_title', 'yes'), +(6150, 215, 'pyre_sidebar_position', 'right'), +(6151, 215, 'pyre_fallback', ''), +(6152, 215, 'pyre_wooslider', '0'), +(6153, 215, 'pyre_slider', '0'), +(6154, 215, 'pyre_flexslider', '0'), +(6155, 215, 'pyre_revslider', '0'), +(6156, 215, 'pyre_page_bg_color', ''), +(6157, 215, 'pyre_page_bg', ''), +(6158, 215, 'pyre_page_bg_full', 'no'), +(6159, 215, 'pyre_page_bg_repeat', 'repeat'), +(6160, 215, 'pyre_page_title_bar_bg', ''), +(6161, 215, 'pyre_fimg_width', ''), +(6162, 215, 'pyre_fimg_height', ''), +(6163, 215, 'pyre_full_width', 'no'), +(6164, 215, 'avada_post_views_count', '46'), +(6165, 215, 'pyre_elasticslider', '0'), +(6168, 215, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6169, 215, 'pyre_image_rollover_icons', 'linkzoom'), +(6170, 215, 'pyre_link_icon_url', ''), +(6171, 215, 'pyre_related_posts', 'yes'), +(6172, 215, 'pyre_page_bg_layout', 'default'), +(6173, 215, 'pyre_wide_page_bg', ''), +(6174, 215, 'pyre_wide_page_bg_color', ''), +(6175, 215, 'pyre_wide_page_bg_full', 'no'), +(6176, 215, 'pyre_wide_page_bg_repeat', 'repeat'), +(6177, 215, 'pyre_header_bg', ''), +(6178, 215, 'pyre_header_bg_color', ''), +(6179, 215, 'pyre_header_bg_full', 'no'), +(6180, 215, 'pyre_header_bg_repeat', 'repeat'), +(6181, 215, 'pyre_page_title_text', 'yes'), +(6182, 215, 'pyre_page_title_bar_bg_retina', ''), +(6183, 215, 'pyre_page_title_bar_bg_full', 'no'), +(6185, 215, 'pyre_page_title_height', ''), +(6186, 215, 'pyre_page_title_bg_parallax', 'default'), +(6187, 215, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6188, 215, 'pyre_video', ''), +(6189, 215, 'pyre_page_title_custom_text', ''), +(6190, 215, 'pyre_page_title_bar_bg_color', ''), +(6191, 215, 'pyre_slider_type', 'no'), +(6192, 215, 'pyre_overall_score', '0'), +(6193, 215, 'pyre_page_title', 'yes'), +(6194, 215, 'pyre_sidebar_position', 'right'), +(6195, 215, 'pyre_fallback', ''), +(6196, 215, 'pyre_wooslider', '0'), +(6197, 215, 'pyre_slider', '0'), +(6198, 215, 'pyre_flexslider', '0'), +(6199, 215, 'pyre_revslider', '0'), +(6200, 215, 'pyre_page_bg_color', ''), +(6201, 215, 'pyre_page_bg', ''), +(6202, 215, 'pyre_page_bg_full', 'no'), +(6203, 215, 'pyre_page_bg_repeat', 'repeat'), +(6204, 215, 'pyre_page_title_bar_bg', ''), +(6205, 215, 'pyre_fimg_width', ''), +(6206, 215, 'pyre_fimg_height', ''), +(6207, 215, 'pyre_full_width', 'no'), +(6208, 215, 'avada_post_views_count', '46'), +(6209, 215, 'pyre_elasticslider', '0'), +(6210, 215, '_thumbnail_id', '3508'), +(6212, 4120, '_wp_page_template', '100-width.php'), +(6213, 4120, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6214, 4120, 'pyre_slider_type', 'no'), +(6215, 4120, 'pyre_slider', '0'), +(6216, 4120, 'pyre_wooslider', '0'), +(6217, 4120, 'pyre_flexslider', '0'), +(6218, 4120, 'pyre_revslider', '0'), +(6219, 4120, 'pyre_elasticslider', '0'), +(6220, 4120, 'pyre_fallback', ''), +(6221, 4120, 'pyre_full_width', 'no'), +(6222, 4120, 'pyre_sidebar_position', 'default'), +(6223, 4120, 'pyre_portfolio_excerpt', ''), +(6224, 4120, 'pyre_portfolio_full_width', 'yes'), +(6225, 4120, 'pyre_portfolio_sidebar_position', 'default'), +(6226, 4120, 'pyre_portfolio_filters', 'yes'), +(6227, 4120, 'pyre_page_bg_layout', 'default'), +(6228, 4120, 'pyre_page_bg', ''), +(6229, 4120, 'pyre_page_bg_color', ''), +(6230, 4120, 'pyre_page_bg_full', 'no'), +(6231, 4120, 'pyre_page_bg_repeat', 'repeat'), +(6232, 4120, 'pyre_wide_page_bg', ''), +(6233, 4120, 'pyre_wide_page_bg_color', ''), +(6234, 4120, 'pyre_wide_page_bg_full', 'no'), +(6235, 4120, 'pyre_wide_page_bg_repeat', 'repeat'), +(6236, 4120, 'pyre_header_bg', ''), +(6237, 4120, 'pyre_header_bg_color', ''), +(6238, 4120, 'pyre_header_bg_full', 'no'), +(6239, 4120, 'pyre_header_bg_repeat', 'repeat'), +(6240, 4120, 'pyre_page_title', 'no'), +(6241, 4120, 'pyre_page_title_text', 'yes'), +(6242, 4120, 'pyre_page_title_custom_text', ''), +(6243, 4120, 'pyre_page_title_custom_subheader', ''), +(6244, 4120, 'pyre_page_title_height', ''), +(6245, 4120, 'pyre_page_title_bar_bg', ''), +(6246, 4120, 'pyre_page_title_bar_bg_retina', ''), +(6247, 4120, 'pyre_page_title_bar_bg_color', ''), +(6248, 4120, 'pyre_page_title_bar_bg_full', 'default'), +(6249, 4120, 'pyre_page_title_bg_parallax', 'default'), +(6250, 4120, 'pyre_image_rollover_icons', 'linkzoom'), +(6251, 4120, 'pyre_link_icon_url', ''), +(6252, 4120, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6253, 4126, '_wp_page_template', '100-width.php'), +(6254, 4126, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6255, 4126, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6256, 4126, 'pyre_slider_type', 'rev'), +(6257, 4126, 'pyre_slider', '0'), +(6258, 4126, 'pyre_wooslider', '0'), +(6259, 4126, 'pyre_flexslider', '0'), +(6260, 4126, 'pyre_revslider', 'Avada_Full_Width'), +(6261, 4126, 'pyre_elasticslider', '0'), +(6262, 4126, 'pyre_fallback', ''), +(6263, 4126, 'pyre_full_width', 'no'), +(6264, 4126, 'pyre_sidebar_position', 'default'), +(6265, 4126, 'pyre_portfolio_excerpt', ''), +(6266, 4126, 'pyre_portfolio_full_width', 'yes'), +(6267, 4126, 'pyre_portfolio_sidebar_position', 'default'), +(6268, 4126, 'pyre_portfolio_filters', 'yes'), +(6269, 4126, 'pyre_page_bg_layout', 'default'), +(6270, 4126, 'pyre_page_bg', ''), +(6271, 4126, 'pyre_page_bg_color', ''), +(6272, 4126, 'pyre_page_bg_full', 'no'), +(6273, 4126, 'pyre_page_bg_repeat', 'repeat'), +(6274, 4126, 'pyre_wide_page_bg', ''), +(6275, 4126, 'pyre_wide_page_bg_color', ''), +(6276, 4126, 'pyre_wide_page_bg_full', 'no'), +(6277, 4126, 'pyre_wide_page_bg_repeat', 'repeat'), +(6278, 4126, 'pyre_header_bg', ''), +(6279, 4126, 'pyre_header_bg_color', ''), +(6280, 4126, 'pyre_header_bg_full', 'no'), +(6281, 4126, 'pyre_header_bg_repeat', 'repeat'), +(6282, 4126, 'pyre_page_title', 'no'), +(6283, 4126, 'pyre_page_title_text', 'yes'), +(6284, 4126, 'pyre_page_title_custom_text', ''), +(6285, 4126, 'pyre_page_title_custom_subheader', ''), +(6286, 4126, 'pyre_page_title_height', ''), +(6287, 4126, 'pyre_page_title_bar_bg', ''), +(6288, 4126, 'pyre_page_title_bar_bg_retina', ''), +(6289, 4126, 'pyre_page_title_bar_bg_color', ''), +(6290, 4126, 'pyre_page_title_bar_bg_full', 'default'), +(6291, 4126, 'pyre_page_title_bg_parallax', 'default'), +(6292, 4126, 'pyre_image_rollover_icons', 'linkzoom'), +(6293, 4126, 'pyre_link_icon_url', ''), +(6294, 4138, '_wp_page_template', '100-width.php'), +(6295, 4138, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6296, 4138, 'pyre_slider_type', 'no'), +(6297, 4138, 'pyre_slider', '0'), +(6298, 4138, 'pyre_wooslider', '0'), +(6299, 4138, 'pyre_flexslider', '0'), +(6300, 4138, 'pyre_revslider', '0'), +(6301, 4138, 'pyre_elasticslider', '0'), +(6302, 4138, 'pyre_fallback', ''), +(6303, 4138, 'pyre_full_width', 'no'), +(6304, 4138, 'pyre_sidebar_position', 'default'), +(6305, 4138, 'pyre_portfolio_excerpt', ''), +(6306, 4138, 'pyre_portfolio_full_width', 'yes'), +(6307, 4138, 'pyre_portfolio_sidebar_position', 'default'), +(6308, 4138, 'pyre_portfolio_filters', 'yes'), +(6309, 4138, 'pyre_page_bg_layout', 'default'), +(6310, 4138, 'pyre_page_bg', ''), +(6311, 4138, 'pyre_page_bg_color', ''), +(6312, 4138, 'pyre_page_bg_full', 'no'), +(6313, 4138, 'pyre_page_bg_repeat', 'repeat'), +(6314, 4138, 'pyre_wide_page_bg', ''), +(6315, 4138, 'pyre_wide_page_bg_color', ''), +(6316, 4138, 'pyre_wide_page_bg_full', 'no'), +(6317, 4138, 'pyre_wide_page_bg_repeat', 'repeat'), +(6318, 4138, 'pyre_header_bg', ''), +(6319, 4138, 'pyre_header_bg_color', ''), +(6320, 4138, 'pyre_header_bg_full', 'no'), +(6321, 4138, 'pyre_header_bg_repeat', 'repeat'), +(6322, 4138, 'pyre_page_title', 'yes'), +(6323, 4138, 'pyre_page_title_text', 'yes'), +(6324, 4138, 'pyre_page_title_custom_text', ''), +(6325, 4138, 'pyre_page_title_custom_subheader', ''), +(6326, 4138, 'pyre_page_title_height', ''), +(6327, 4138, 'pyre_page_title_bar_bg', ''), +(6328, 4138, 'pyre_page_title_bar_bg_retina', ''), +(6329, 4138, 'pyre_page_title_bar_bg_color', ''), +(6330, 4138, 'pyre_page_title_bar_bg_full', 'default'), +(6331, 4138, 'pyre_page_title_bg_parallax', 'default'), +(6332, 4138, 'pyre_image_rollover_icons', 'linkzoom'), +(6333, 4138, 'pyre_link_icon_url', ''), +(6334, 4138, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6335, 4140, '_wp_page_template', 'full-width.php'), +(6336, 4140, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6337, 4140, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6338, 4140, 'pyre_slider_type', 'no'), +(6339, 4140, 'pyre_slider', '0'), +(6340, 4140, 'pyre_wooslider', '0'), +(6341, 4140, 'pyre_flexslider', '0'), +(6342, 4140, 'pyre_revslider', '0'), +(6343, 4140, 'pyre_elasticslider', '0'), +(6344, 4140, 'pyre_fallback', ''), +(6345, 4140, 'pyre_full_width', 'no'), +(6346, 4140, 'pyre_sidebar_position', 'default'), +(6347, 4140, 'pyre_portfolio_excerpt', ''), +(6348, 4140, 'pyre_portfolio_full_width', 'yes'), +(6349, 4140, 'pyre_portfolio_sidebar_position', 'default'), +(6350, 4140, 'pyre_portfolio_filters', 'yes'), +(6351, 4140, 'pyre_page_bg_layout', 'default'), +(6352, 4140, 'pyre_page_bg', ''), +(6353, 4140, 'pyre_page_bg_color', ''), +(6354, 4140, 'pyre_page_bg_full', 'no'), +(6355, 4140, 'pyre_page_bg_repeat', 'repeat'), +(6356, 4140, 'pyre_wide_page_bg', ''), +(6357, 4140, 'pyre_wide_page_bg_color', ''), +(6358, 4140, 'pyre_wide_page_bg_full', 'no'), +(6359, 4140, 'pyre_wide_page_bg_repeat', 'repeat'), +(6360, 4140, 'pyre_header_bg', ''), +(6361, 4140, 'pyre_header_bg_color', ''), +(6362, 4140, 'pyre_header_bg_full', 'no'), +(6363, 4140, 'pyre_header_bg_repeat', 'repeat'), +(6364, 4140, 'pyre_page_title', 'yes'), +(6365, 4140, 'pyre_page_title_text', 'yes'), +(6366, 4140, 'pyre_page_title_custom_text', ''), +(6367, 4140, 'pyre_page_title_custom_subheader', ''), +(6368, 4140, 'pyre_page_title_height', ''), +(6369, 4140, 'pyre_page_title_bar_bg', ''), +(6370, 4140, 'pyre_page_title_bar_bg_retina', ''), +(6371, 4140, 'pyre_page_title_bar_bg_color', ''), +(6372, 4140, 'pyre_page_title_bar_bg_full', 'default'), +(6373, 4140, 'pyre_page_title_bg_parallax', 'default'), +(6374, 4140, 'pyre_image_rollover_icons', 'linkzoom'), +(6375, 4140, 'pyre_link_icon_url', ''), +(6376, 4142, '_wp_page_template', 'full-width.php'), +(6377, 4142, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6378, 4142, 'pyre_slider_type', 'no'), +(6379, 4142, 'pyre_slider', '0'), +(6380, 4142, 'pyre_wooslider', '0'), +(6381, 4142, 'pyre_flexslider', '0'), +(6382, 4142, 'pyre_revslider', '0'), +(6383, 4142, 'pyre_elasticslider', '0'), +(6384, 4142, 'pyre_fallback', ''), +(6385, 4142, 'pyre_full_width', 'no'), +(6386, 4142, 'pyre_sidebar_position', 'default'), +(6387, 4142, 'pyre_portfolio_excerpt', ''), +(6388, 4142, 'pyre_portfolio_full_width', 'yes'), +(6389, 4142, 'pyre_portfolio_sidebar_position', 'default'), +(6390, 4142, 'pyre_portfolio_filters', 'yes'), +(6391, 4142, 'pyre_page_bg_layout', 'default'), +(6392, 4142, 'pyre_page_bg', ''), +(6393, 4142, 'pyre_page_bg_color', ''), +(6394, 4142, 'pyre_page_bg_full', 'no'), +(6395, 4142, 'pyre_page_bg_repeat', 'repeat'), +(6396, 4142, 'pyre_wide_page_bg', ''), +(6397, 4142, 'pyre_wide_page_bg_color', ''), +(6398, 4142, 'pyre_wide_page_bg_full', 'no'), +(6399, 4142, 'pyre_wide_page_bg_repeat', 'repeat'), +(6400, 4142, 'pyre_header_bg', ''), +(6401, 4142, 'pyre_header_bg_color', ''), +(6402, 4142, 'pyre_header_bg_full', 'no'), +(6403, 4142, 'pyre_header_bg_repeat', 'repeat'), +(6404, 4142, 'pyre_page_title', 'yes'), +(6405, 4142, 'pyre_page_title_text', 'yes'), +(6406, 4142, 'pyre_page_title_custom_text', ''), +(6407, 4142, 'pyre_page_title_custom_subheader', ''), +(6408, 4142, 'pyre_page_title_height', ''), +(6409, 4142, 'pyre_page_title_bar_bg', ''), +(6410, 4142, 'pyre_page_title_bar_bg_retina', ''), +(6411, 4142, 'pyre_page_title_bar_bg_color', ''), +(6412, 4142, 'pyre_page_title_bar_bg_full', 'default'), +(6413, 4142, 'pyre_page_title_bg_parallax', 'default'), +(6414, 4142, 'pyre_image_rollover_icons', 'linkzoom'), +(6415, 4142, 'pyre_link_icon_url', ''), +(6416, 4142, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6417, 4144, '_wp_page_template', 'full-width.php'), +(6418, 4144, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6419, 4144, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6420, 4144, 'pyre_slider_type', 'no'), +(6421, 4144, 'pyre_slider', '0'), +(6422, 4144, 'pyre_wooslider', '0'), +(6423, 4144, 'pyre_flexslider', '0'), +(6424, 4144, 'pyre_revslider', '0'), +(6425, 4144, 'pyre_elasticslider', '0'), +(6426, 4144, 'pyre_fallback', ''), +(6427, 4144, 'pyre_full_width', 'no'), +(6428, 4144, 'pyre_sidebar_position', 'default'), +(6429, 4144, 'pyre_portfolio_excerpt', ''), +(6430, 4144, 'pyre_portfolio_full_width', 'yes'), +(6431, 4144, 'pyre_portfolio_sidebar_position', 'default'), +(6432, 4144, 'pyre_portfolio_filters', 'yes'), +(6433, 4144, 'pyre_page_bg_layout', 'default'), +(6434, 4144, 'pyre_page_bg', ''), +(6435, 4144, 'pyre_page_bg_color', ''), +(6436, 4144, 'pyre_page_bg_full', 'no'), +(6437, 4144, 'pyre_page_bg_repeat', 'repeat'), +(6438, 4144, 'pyre_wide_page_bg', ''), +(6439, 4144, 'pyre_wide_page_bg_color', ''), +(6440, 4144, 'pyre_wide_page_bg_full', 'no'), +(6441, 4144, 'pyre_wide_page_bg_repeat', 'repeat'), +(6442, 4144, 'pyre_header_bg', ''), +(6443, 4144, 'pyre_header_bg_color', ''), +(6444, 4144, 'pyre_header_bg_full', 'no'), +(6445, 4144, 'pyre_header_bg_repeat', 'repeat'), +(6446, 4144, 'pyre_page_title', 'yes'), +(6447, 4144, 'pyre_page_title_text', 'yes'), +(6448, 4144, 'pyre_page_title_custom_text', ''), +(6449, 4144, 'pyre_page_title_custom_subheader', ''), +(6450, 4144, 'pyre_page_title_height', ''), +(6451, 4144, 'pyre_page_title_bar_bg', ''), +(6452, 4144, 'pyre_page_title_bar_bg_retina', ''), +(6453, 4144, 'pyre_page_title_bar_bg_color', ''), +(6454, 4144, 'pyre_page_title_bar_bg_full', 'default'), +(6455, 4144, 'pyre_page_title_bg_parallax', 'default'), +(6456, 4144, 'pyre_image_rollover_icons', 'linkzoom'), +(6457, 4144, 'pyre_link_icon_url', ''), +(6458, 4146, '_wp_page_template', 'full-width.php'), +(6459, 4146, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6460, 4146, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6461, 4146, 'pyre_slider_type', 'no'), +(6462, 4146, 'pyre_slider', '0'), +(6463, 4146, 'pyre_wooslider', '0'), +(6464, 4146, 'pyre_flexslider', '0'), +(6465, 4146, 'pyre_revslider', '0'), +(6466, 4146, 'pyre_elasticslider', '0'), +(6467, 4146, 'pyre_fallback', ''), +(6468, 4146, 'pyre_full_width', 'no'), +(6469, 4146, 'pyre_sidebar_position', 'default'), +(6470, 4146, 'pyre_portfolio_excerpt', ''), +(6471, 4146, 'pyre_portfolio_full_width', 'yes'), +(6472, 4146, 'pyre_portfolio_sidebar_position', 'default'), +(6473, 4146, 'pyre_portfolio_filters', 'yes'), +(6474, 4146, 'pyre_page_bg_layout', 'default'), +(6475, 4146, 'pyre_page_bg', ''), +(6476, 4146, 'pyre_page_bg_color', ''), +(6477, 4146, 'pyre_page_bg_full', 'no'), +(6478, 4146, 'pyre_page_bg_repeat', 'repeat'), +(6479, 4146, 'pyre_wide_page_bg', ''), +(6480, 4146, 'pyre_wide_page_bg_color', ''), +(6481, 4146, 'pyre_wide_page_bg_full', 'no'), +(6482, 4146, 'pyre_wide_page_bg_repeat', 'repeat'), +(6483, 4146, 'pyre_header_bg', ''), +(6484, 4146, 'pyre_header_bg_color', ''), +(6485, 4146, 'pyre_header_bg_full', 'no'), +(6486, 4146, 'pyre_header_bg_repeat', 'repeat'), +(6487, 4146, 'pyre_page_title', 'yes'), +(6488, 4146, 'pyre_page_title_text', 'yes'), +(6489, 4146, 'pyre_page_title_custom_text', ''), +(6490, 4146, 'pyre_page_title_custom_subheader', ''), +(6491, 4146, 'pyre_page_title_height', ''), +(6492, 4146, 'pyre_page_title_bar_bg', ''), +(6493, 4146, 'pyre_page_title_bar_bg_retina', ''), +(6494, 4146, 'pyre_page_title_bar_bg_color', ''), +(6495, 4146, 'pyre_page_title_bar_bg_full', 'default'), +(6496, 4146, 'pyre_page_title_bg_parallax', 'default'), +(6497, 4146, 'pyre_image_rollover_icons', 'linkzoom'), +(6498, 4146, 'pyre_link_icon_url', ''), +(6499, 4148, '_wp_page_template', 'full-width.php'), +(6500, 4148, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6501, 4148, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6502, 4148, 'pyre_slider_type', 'no'), +(6503, 4148, 'pyre_slider', '0'), +(6504, 4148, 'pyre_wooslider', '0'), +(6505, 4148, 'pyre_flexslider', '0'), +(6506, 4148, 'pyre_revslider', '0'), +(6507, 4148, 'pyre_elasticslider', '0'), +(6508, 4148, 'pyre_fallback', ''), +(6509, 4148, 'pyre_full_width', 'no'), +(6510, 4148, 'pyre_sidebar_position', 'default'), +(6511, 4148, 'pyre_portfolio_excerpt', ''), +(6512, 4148, 'pyre_portfolio_full_width', 'yes'), +(6513, 4148, 'pyre_portfolio_sidebar_position', 'default'), +(6514, 4148, 'pyre_portfolio_filters', 'yes'), +(6515, 4148, 'pyre_page_bg_layout', 'default'), +(6516, 4148, 'pyre_page_bg', ''), +(6517, 4148, 'pyre_page_bg_color', ''), +(6518, 4148, 'pyre_page_bg_full', 'no'), +(6519, 4148, 'pyre_page_bg_repeat', 'repeat'), +(6520, 4148, 'pyre_wide_page_bg', ''), +(6521, 4148, 'pyre_wide_page_bg_color', ''), +(6522, 4148, 'pyre_wide_page_bg_full', 'no'), +(6523, 4148, 'pyre_wide_page_bg_repeat', 'repeat'), +(6524, 4148, 'pyre_header_bg', ''), +(6525, 4148, 'pyre_header_bg_color', ''), +(6526, 4148, 'pyre_header_bg_full', 'no'), +(6527, 4148, 'pyre_header_bg_repeat', 'repeat'), +(6528, 4148, 'pyre_page_title', 'yes'), +(6529, 4148, 'pyre_page_title_text', 'yes'), +(6530, 4148, 'pyre_page_title_custom_text', ''), +(6531, 4148, 'pyre_page_title_custom_subheader', ''), +(6532, 4148, 'pyre_page_title_height', ''), +(6533, 4148, 'pyre_page_title_bar_bg', ''), +(6534, 4148, 'pyre_page_title_bar_bg_retina', ''), +(6535, 4148, 'pyre_page_title_bar_bg_color', ''), +(6536, 4148, 'pyre_page_title_bar_bg_full', 'default'), +(6537, 4148, 'pyre_page_title_bg_parallax', 'default'), +(6538, 4148, 'pyre_image_rollover_icons', 'linkzoom'), +(6539, 4148, 'pyre_link_icon_url', ''), +(6540, 4150, '_wp_page_template', 'full-width.php'), +(6541, 4150, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6542, 4150, 'pyre_slider_type', 'no'), +(6543, 4150, 'pyre_slider', '0'), +(6544, 4150, 'pyre_wooslider', '0'), +(6545, 4150, 'pyre_flexslider', '0'), +(6546, 4150, 'pyre_revslider', '0'), +(6547, 4150, 'pyre_elasticslider', '0'), +(6548, 4150, 'pyre_fallback', ''), +(6549, 4150, 'pyre_full_width', 'no'), +(6550, 4150, 'pyre_sidebar_position', 'default'), +(6551, 4150, 'pyre_portfolio_excerpt', ''), +(6552, 4150, 'pyre_portfolio_full_width', 'yes'), +(6553, 4150, 'pyre_portfolio_sidebar_position', 'default'), +(6554, 4150, 'pyre_portfolio_filters', 'yes'), +(6555, 4150, 'pyre_page_bg_layout', 'default'), +(6556, 4150, 'pyre_page_bg', ''), +(6557, 4150, 'pyre_page_bg_color', ''), +(6558, 4150, 'pyre_page_bg_full', 'no'), +(6559, 4150, 'pyre_page_bg_repeat', 'repeat'), +(6560, 4150, 'pyre_wide_page_bg', ''), +(6561, 4150, 'pyre_wide_page_bg_color', ''), +(6562, 4150, 'pyre_wide_page_bg_full', 'no'), +(6563, 4150, 'pyre_wide_page_bg_repeat', 'repeat'), +(6564, 4150, 'pyre_header_bg', ''), +(6565, 4150, 'pyre_header_bg_color', ''), +(6566, 4150, 'pyre_header_bg_full', 'no'), +(6567, 4150, 'pyre_header_bg_repeat', 'repeat'), +(6568, 4150, 'pyre_page_title', 'yes'), +(6569, 4150, 'pyre_page_title_text', 'yes'), +(6570, 4150, 'pyre_page_title_custom_text', ''), +(6571, 4150, 'pyre_page_title_custom_subheader', ''), +(6572, 4150, 'pyre_page_title_height', ''), +(6573, 4150, 'pyre_page_title_bar_bg', ''), +(6574, 4150, 'pyre_page_title_bar_bg_retina', ''), +(6575, 4150, 'pyre_page_title_bar_bg_color', ''), +(6576, 4150, 'pyre_page_title_bar_bg_full', 'default'), +(6577, 4150, 'pyre_page_title_bg_parallax', 'default'), +(6578, 4150, 'pyre_image_rollover_icons', 'linkzoom'), +(6579, 4150, 'pyre_link_icon_url', ''), +(6580, 4150, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6581, 4169, '_wp_page_template', 'blank.php'), +(6582, 4169, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6583, 4169, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6584, 4169, 'pyre_slider_type', 'no'), +(6585, 4169, 'pyre_slider', '0'), +(6586, 4169, 'pyre_wooslider', '0'), +(6587, 4169, 'pyre_flexslider', '0'), +(6588, 4169, 'pyre_revslider', '0'), +(6589, 4169, 'pyre_elasticslider', '0'), +(6590, 4169, 'pyre_fallback', ''), +(6591, 4169, 'pyre_full_width', 'no'), +(6592, 4169, 'pyre_sidebar_position', 'default'), +(6593, 4169, 'pyre_portfolio_excerpt', ''), +(6594, 4169, 'pyre_portfolio_full_width', 'yes'), +(6595, 4169, 'pyre_portfolio_sidebar_position', 'default'), +(6596, 4169, 'pyre_portfolio_filters', 'yes'), +(6597, 4169, 'pyre_page_bg_layout', 'default'), +(6598, 4169, 'pyre_page_bg', ''), +(6599, 4169, 'pyre_page_bg_color', ''), +(6600, 4169, 'pyre_page_bg_full', 'no'), +(6601, 4169, 'pyre_page_bg_repeat', 'repeat'), +(6602, 4169, 'pyre_wide_page_bg', ''), +(6603, 4169, 'pyre_wide_page_bg_color', ''), +(6604, 4169, 'pyre_wide_page_bg_full', 'no'), +(6605, 4169, 'pyre_wide_page_bg_repeat', 'repeat'), +(6606, 4169, 'pyre_header_bg', ''), +(6607, 4169, 'pyre_header_bg_color', ''), +(6608, 4169, 'pyre_header_bg_full', 'no'), +(6609, 4169, 'pyre_header_bg_repeat', 'repeat'), +(6610, 4169, 'pyre_page_title', 'no'), +(6611, 4169, 'pyre_page_title_text', 'yes'), +(6612, 4169, 'pyre_page_title_custom_text', ''), +(6613, 4169, 'pyre_page_title_custom_subheader', ''), +(6614, 4169, 'pyre_page_title_height', ''), +(6615, 4169, 'pyre_page_title_bar_bg', ''), +(6616, 4169, 'pyre_page_title_bar_bg_retina', ''), +(6617, 4169, 'pyre_page_title_bar_bg_color', ''), +(6618, 4169, 'pyre_page_title_bar_bg_full', 'default'), +(6619, 4169, 'pyre_page_title_bg_parallax', 'default'), +(6620, 4169, 'pyre_image_rollover_icons', 'linkzoom'), +(6621, 4169, 'pyre_link_icon_url', ''), +(6622, 4172, '_wp_page_template', 'blank.php'), +(6623, 4172, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6624, 4172, 'pyre_slider_type', 'no'), +(6625, 4172, 'pyre_slider', '0'), +(6626, 4172, 'pyre_wooslider', '0'), +(6627, 4172, 'pyre_flexslider', '0'), +(6628, 4172, 'pyre_revslider', '0'), +(6629, 4172, 'pyre_elasticslider', '0'), +(6630, 4172, 'pyre_fallback', ''), +(6631, 4172, 'pyre_full_width', 'no'), +(6632, 4172, 'pyre_sidebar_position', 'default'), +(6633, 4172, 'pyre_portfolio_excerpt', ''), +(6634, 4172, 'pyre_portfolio_full_width', 'yes'), +(6635, 4172, 'pyre_portfolio_sidebar_position', 'default'), +(6636, 4172, 'pyre_portfolio_filters', 'yes'), +(6637, 4172, 'pyre_page_bg_layout', 'default'), +(6638, 4172, 'pyre_page_bg', ''), +(6639, 4172, 'pyre_page_bg_color', ''), +(6640, 4172, 'pyre_page_bg_full', 'no'), +(6641, 4172, 'pyre_page_bg_repeat', 'repeat'), +(6642, 4172, 'pyre_wide_page_bg', ''), +(6643, 4172, 'pyre_wide_page_bg_color', ''), +(6644, 4172, 'pyre_wide_page_bg_full', 'no'), +(6645, 4172, 'pyre_wide_page_bg_repeat', 'repeat'), +(6646, 4172, 'pyre_header_bg', ''), +(6647, 4172, 'pyre_header_bg_color', ''), +(6648, 4172, 'pyre_header_bg_full', 'no'), +(6649, 4172, 'pyre_header_bg_repeat', 'repeat'), +(6650, 4172, 'pyre_page_title', 'no'), +(6651, 4172, 'pyre_page_title_text', 'yes'), +(6652, 4172, 'pyre_page_title_custom_text', ''), +(6653, 4172, 'pyre_page_title_custom_subheader', ''), +(6654, 4172, 'pyre_page_title_height', ''), +(6655, 4172, 'pyre_page_title_bar_bg', ''), +(6656, 4172, 'pyre_page_title_bar_bg_retina', ''), +(6657, 4172, 'pyre_page_title_bar_bg_color', ''), +(6658, 4172, 'pyre_page_title_bar_bg_full', 'default'), +(6659, 4172, 'pyre_page_title_bg_parallax', 'default'), +(6660, 4172, 'pyre_image_rollover_icons', 'linkzoom'), +(6661, 4172, 'pyre_link_icon_url', ''), +(6662, 4172, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6663, 4356, 'pyre_page_bg_repeat', 'repeat'), +(6664, 4356, 'pyre_page_bg_full', 'no'), +(6665, 4356, 'pyre_page_bg_color', ''), +(6666, 4356, 'pyre_page_bg', ''), +(6667, 4356, 'pyre_page_bg_layout', 'default'), +(6668, 4356, 'pyre_portfolio_filters', 'yes'), +(6669, 4356, 'pyre_portfolio_sidebar_position', 'default'), +(6670, 4356, 'pyre_link_icon_url', ''), +(6671, 4356, 'pyre_image_rollover_icons', 'linkzoom'), +(6672, 4356, 'pyre_page_title_bg_parallax', 'default'), +(6673, 4356, 'pyre_page_title_bar_bg_full', 'default'), +(6674, 4356, 'pyre_portfolio_full_width', 'no'), +(6675, 4356, 'pyre_page_title_bar_bg_color', ''), +(6676, 4356, 'pyre_wide_page_bg', ''), +(6677, 4356, 'pyre_wide_page_bg_color', ''), +(6678, 4356, 'pyre_wide_page_bg_full', 'no'), +(6679, 4356, 'pyre_page_title_bar_bg_retina', ''), +(6680, 4356, 'pyre_page_title_bar_bg', ''), +(6681, 4356, 'pyre_portfolio_excerpt', ''), +(6682, 4356, 'pyre_sidebar_position', 'default'), +(6683, 4356, 'pyre_page_title_custom_subheader', ''), +(6684, 4356, 'pyre_page_title_height', ''), +(6685, 4356, 'pyre_fallback', ''), +(6686, 4356, 'pyre_full_width', 'no'), +(6687, 4356, 'pyre_elasticslider', '0'), +(6688, 4356, 'pyre_revslider', '0'), +(6689, 4356, 'pyre_flexslider', '0'), +(6690, 4356, 'pyre_wooslider', '0'), +(6691, 4356, 'pyre_slider', '0'), +(6692, 4356, 'pyre_slider_type', 'no'), +(6693, 4356, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6694, 4356, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:9:"Portfolio";}'), +(6695, 4356, '_wp_page_template', 'portfolio-two-column.php'), +(6696, 4356, 'pyre_page_title_custom_text', ''), +(6697, 4356, 'pyre_page_title_text', 'yes'), +(6698, 4356, 'pyre_page_title', 'yes'), +(6699, 4356, 'pyre_header_bg_repeat', 'repeat'), +(6700, 4356, 'pyre_header_bg_full', 'no'), +(6701, 4356, 'pyre_header_bg_color', ''), +(6702, 4356, 'pyre_header_bg', ''), +(6703, 4356, 'pyre_wide_page_bg_repeat', 'repeat'), +(6704, 4427, 'pyre_wide_page_bg', ''), +(6705, 4427, 'pyre_page_bg_repeat', 'repeat'), +(6706, 4427, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6707, 4427, 'pyre_page_bg_full', 'no'), +(6708, 4427, 'pyre_page_bg_color', ''), +(6709, 4427, 'pyre_page_bg', ''), +(6710, 4427, 'pyre_portfolio_filters', 'yes'), +(6711, 4427, 'pyre_page_bg_layout', 'default'), +(6712, 4427, 'pyre_page_title_bg_parallax', 'default'), +(6713, 4427, 'pyre_page_title_bar_bg_full', 'default'), +(6714, 4427, 'pyre_page_title_bar_bg_color', ''), +(6715, 4427, 'pyre_page_title_bar_bg_retina', ''), +(6716, 4427, 'pyre_portfolio_sidebar_position', 'default'), +(6717, 4427, 'pyre_portfolio_full_width', 'yes'), +(6718, 4427, 'pyre_portfolio_excerpt', ''), +(6719, 4427, 'pyre_page_title_bar_bg', ''), +(6720, 4427, 'pyre_page_title_height', ''), +(6721, 4427, 'pyre_page_title_custom_text', ''), +(6722, 4427, 'pyre_page_title_custom_subheader', ''), +(6723, 4427, 'pyre_page_title', 'no'), +(6724, 4427, 'pyre_page_title_text', 'yes'), +(6725, 4427, 'pyre_hundredp_padding', ''), +(6726, 4427, 'pyre_main_bottom_padding', ''), +(6727, 4427, 'pyre_main_top_padding', ''), +(6728, 4427, 'pyre_sidebar_position', 'default'), +(6729, 4427, 'pyre_full_width', 'no'), +(6730, 4427, 'pyre_fallback', ''), +(6731, 4427, 'pyre_revslider', '0'), +(6732, 4427, 'pyre_elasticslider', '0'), +(6733, 4427, '_wp_page_template', '100-width.php'), +(6734, 4427, 'pyre_header_bg_repeat', 'repeat'), +(6735, 4427, 'pyre_wooslider', '0'), +(6736, 4427, 'pyre_flexslider', '0'), +(6737, 4427, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6738, 4427, 'pyre_header_bg_full', 'no'), +(6739, 4427, 'pyre_header_bg_color', ''), +(6740, 4427, 'pyre_header_bg', ''), +(6741, 4427, 'pyre_slider', '0'), +(6742, 4427, 'pyre_slider_type', 'no'), +(6743, 4427, 'slide_template', ''), +(6744, 4427, 'pyre_wide_page_bg_repeat', 'repeat'), +(6745, 4427, 'pyre_wide_page_bg_full', 'no'), +(6746, 4427, 'pyre_wide_page_bg_color', ''), +(6747, 4442, '_wp_page_template', 'full-width.php'), +(6748, 4442, 'pyre_portfolio_sidebar_position', 'default'), +(6749, 4442, 'pyre_portfolio_full_width', 'yes'), +(6750, 4442, 'pyre_portfolio_excerpt', ''), +(6751, 4442, 'pyre_hundredp_padding', ''), +(6752, 4442, 'pyre_main_bottom_padding', ''), +(6753, 4442, 'pyre_main_top_padding', ''), +(6754, 4442, 'pyre_sidebar_position', 'default'), +(6755, 4442, 'pyre_full_width', 'no'), +(6756, 4442, '_post_restored_from', 'a:3:{s:20:"restored_revision_id";i:4452;s:16:"restored_by_user";i:1;s:13:"restored_time";i:1387211734;}'), +(6757, 4442, 'pyre_fallback', ''), +(6758, 4442, 'pyre_elasticslider', '0'), +(6759, 4442, 'pyre_revslider', '0'), +(6760, 4442, 'pyre_flexslider', '0'), +(6761, 4442, 'pyre_wooslider', '0'), +(6762, 4442, 'pyre_slider', '0'), +(6763, 4442, 'pyre_slider_type', 'no'), +(6764, 4442, 'slide_template', ''), +(6765, 4442, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6766, 4442, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6767, 4442, 'pyre_page_title_height', ''), +(6768, 4442, 'pyre_page_title_custom_subheader', ''), +(6769, 4442, 'pyre_page_title_custom_text', ''), +(6770, 4442, 'pyre_page_title_text', 'yes'), +(6771, 4442, 'pyre_page_title', 'no'), +(6772, 4442, 'pyre_header_bg_repeat', 'repeat'), +(6773, 4442, 'pyre_header_bg_full', 'no'), +(6774, 4442, 'pyre_header_bg_color', ''), +(6775, 4442, 'pyre_header_bg', ''), +(6776, 4442, 'pyre_wide_page_bg_repeat', 'repeat'), +(6777, 4442, 'pyre_wide_page_bg_full', 'no'), +(6778, 4442, 'pyre_wide_page_bg_color', ''), +(6779, 4442, 'pyre_wide_page_bg', ''), +(6780, 4442, 'pyre_page_bg_repeat', 'repeat'), +(6781, 4442, 'pyre_page_bg_color', ''), +(6782, 4442, 'pyre_page_bg_full', 'yes'), +(6783, 4442, 'pyre_page_title_bar_bg', ''), +(6784, 4442, 'pyre_page_title_bar_bg_retina', ''), +(6785, 4442, 'pyre_page_title_bar_bg_color', ''), +(6786, 4442, 'pyre_page_title_bar_bg_full', 'default'), +(6787, 4442, 'pyre_page_title_bg_parallax', 'default'), +(6788, 4442, 'pyre_portfolio_filters', 'yes'), +(6789, 4442, 'pyre_page_bg_layout', 'boxed'), +(6790, 4442, 'pyre_page_bg', 'http://theme-fusion.com/avadaxml/wp-content/uploads/2013/10/bkgd1.jpg'), +(6791, 4476, 'pyre_slider_type', 'no'), +(6792, 4476, 'pyre_page_title_bg_parallax', 'default'), +(6793, 4476, 'pyre_page_title_bar_bg_full', 'default'), +(6794, 4476, 'pyre_page_title_bar_bg_color', ''), +(6795, 4476, 'pyre_page_title_bar_bg_retina', ''), +(6796, 4476, 'pyre_page_title_bar_bg', ''), +(6797, 4476, 'pyre_page_title_height', ''), +(6798, 4476, 'pyre_page_title_custom_subheader', ''), +(6799, 4476, 'pyre_page_title_custom_text', ''), +(6800, 4476, 'pyre_page_title_text', 'yes'), +(6801, 4476, 'pyre_page_title', 'no'), +(6802, 4476, 'pyre_header_bg_repeat', 'repeat'), +(6803, 4476, 'pyre_header_bg_full', 'no'), +(6804, 4476, 'pyre_header_bg_color', ''), +(6805, 4476, 'pyre_wide_page_bg_repeat', 'repeat'), +(6806, 4476, 'pyre_header_bg', ''), +(6807, 4476, 'pyre_wide_page_bg_full', 'no'), +(6808, 4476, 'pyre_wide_page_bg_color', ''), +(6809, 4476, 'pyre_wide_page_bg', ''), +(6810, 4476, 'pyre_page_bg_repeat', 'repeat'), +(6811, 4476, 'pyre_page_bg_full', 'no'), +(6812, 4476, 'pyre_page_bg_color', ''), +(6813, 4476, 'pyre_page_bg', ''), +(6814, 4476, 'pyre_page_bg_layout', 'default'), +(6815, 4476, 'pyre_portfolio_filters', 'yes'), +(6816, 4476, 'pyre_portfolio_sidebar_position', 'default'), +(6817, 4476, 'pyre_portfolio_full_width', 'yes'), +(6818, 4476, 'pyre_portfolio_excerpt', ''), +(6819, 4476, 'pyre_hundredp_padding', ''), +(6820, 4476, 'pyre_main_bottom_padding', ''), +(6821, 4476, 'pyre_main_top_padding', ''), +(6822, 4476, 'pyre_sidebar_position', 'default'), +(6823, 4476, 'pyre_full_width', 'no'), +(6824, 4476, 'pyre_fallback', ''), +(6825, 4476, 'pyre_elasticslider', '0'), +(6826, 4476, 'pyre_revslider', '0'), +(6827, 4476, 'pyre_flexslider', '0'), +(6828, 4476, 'pyre_wooslider', '0'), +(6829, 4476, 'pyre_slider', '0'), +(6830, 4476, 'slide_template', ''), +(6831, 4476, '_wp_page_template', 'default'), +(6832, 4476, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6833, 4476, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6836, 213, 'avada_post_views_count', '476'), +(6837, 213, 'pyre_video', ''), +(6838, 213, 'pyre_overall_score', '0'), +(6839, 213, 'pyre_page_title_bar_bg_color', ''), +(6840, 213, 'pyre_page_title', 'yes'), +(6841, 213, 'pyre_sidebar_position', 'right'), +(6842, 213, 'pyre_slider_type', 'no'), +(6843, 213, 'pyre_slider', '0'), +(6844, 213, 'pyre_wooslider', '0'), +(6845, 213, 'pyre_flexslider', '0'), +(6846, 213, 'pyre_revslider', '0'), +(6847, 213, 'pyre_page_bg_color', ''), +(6848, 213, 'pyre_page_bg', ''), +(6849, 213, 'pyre_page_bg_full', 'no'), +(6850, 213, 'pyre_page_bg_repeat', 'repeat'), +(6851, 213, 'pyre_page_title_bar_bg', ''), +(6852, 213, 'pyre_fimg_width', ''), +(6853, 213, 'pyre_fimg_height', ''), +(6854, 213, 'pyre_full_width', 'no'), +(6855, 213, 'pyre_fallback', ''), +(6856, 213, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6857, 213, 'pyre_elasticslider', '0'), +(6861, 213, 'pyre_image_rollover_icons', 'linkzoom'), +(6862, 213, 'pyre_link_icon_url', ''), +(6863, 213, 'pyre_related_posts', 'yes'), +(6864, 213, 'pyre_page_bg_layout', 'default'), +(6865, 213, 'pyre_wide_page_bg', ''), +(6866, 213, 'pyre_wide_page_bg_color', ''), +(6867, 213, 'pyre_wide_page_bg_full', 'no'), +(6868, 213, 'pyre_wide_page_bg_repeat', 'repeat'), +(6869, 213, 'pyre_header_bg', ''), +(6870, 213, 'pyre_header_bg_color', ''), +(6871, 213, 'pyre_header_bg_full', 'no'), +(6872, 213, 'pyre_header_bg_repeat', 'repeat'), +(6873, 213, 'pyre_page_title_text', 'yes'), +(6874, 213, 'pyre_page_title_bar_bg_retina', ''), +(6875, 213, 'pyre_page_title_bar_bg_full', 'no'), +(6879, 213, 'pyre_page_title_custom_text', ''), +(6880, 213, 'pyre_page_title_custom_subheader', ''), +(6881, 213, 'pyre_page_title_height', ''), +(6882, 213, 'pyre_page_title_bg_parallax', 'default'), +(6886, 213, 'avada_post_views_count', '476'), +(6887, 213, 'pyre_video', ''), +(6888, 213, 'pyre_overall_score', '0'), +(6889, 213, 'pyre_page_title_bar_bg_color', ''), +(6890, 213, 'pyre_page_title', 'yes'), +(6891, 213, 'pyre_sidebar_position', 'right'), +(6892, 213, 'pyre_slider_type', 'no'), +(6893, 213, 'pyre_slider', '0'), +(6894, 213, 'pyre_wooslider', '0'), +(6895, 213, 'pyre_flexslider', '0'), +(6896, 213, 'pyre_revslider', '0'), +(6897, 213, 'pyre_page_bg_color', ''), +(6898, 213, 'pyre_page_bg', ''), +(6899, 213, 'pyre_page_bg_full', 'no'), +(6900, 213, 'pyre_page_bg_repeat', 'repeat'), +(6901, 213, 'pyre_page_title_bar_bg', ''), +(6902, 213, 'pyre_fimg_width', ''), +(6903, 213, 'pyre_fimg_height', ''), +(6904, 213, 'pyre_full_width', 'no'), +(6905, 213, 'pyre_fallback', ''), +(6906, 213, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6907, 213, 'pyre_elasticslider', '0'), +(6908, 213, 'slide_template', 'default'), +(6909, 213, '_thumbnail_id', '3508'), +(6910, 213, 'kd_featured-image-2_post_id', '3508'), +(6912, 3876, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6913, 3876, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6914, 3877, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6915, 3877, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6916, 3878, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6917, 3878, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6918, 4052, '_thumbnail_id', '4054'), +(6919, 4052, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6920, 4052, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6921, 4052, 'pyre_caption_1', 'Elastic Slider'), +(6922, 4052, 'pyre_caption_2', 'Simple. Elegant. Beautiful.'), +(6923, 4055, '_thumbnail_id', '4053'), +(6924, 4055, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(6925, 4055, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(6926, 4055, 'pyre_caption_1', 'Elastic Slider'), +(6927, 4055, 'pyre_caption_2', 'Simple. Elegant. Beautiful.'), +(6928, 4477, '_menu_item_type', 'post_type'), +(6929, 4477, '_menu_item_menu_item_parent', '4469'), +(6930, 4477, '_menu_item_object_id', '4474'), +(6931, 4477, '_menu_item_object', 'page'), +(6932, 4477, '_menu_item_target', ''), +(6933, 4477, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(6934, 4477, '_menu_item_xfn', ''), +(6935, 4477, '_menu_item_url', ''), +(6936, 4478, '_menu_item_type', 'post_type'), +(6937, 4478, '_menu_item_menu_item_parent', '4469'), +(6938, 4478, '_menu_item_object_id', '35'), +(6939, 4478, '_menu_item_object', 'page'), +(6940, 4478, '_menu_item_target', ''), +(6941, 4478, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(6942, 4478, '_menu_item_xfn', ''), +(6943, 4478, '_menu_item_url', ''), +(6944, 4479, '_menu_item_type', 'post_type'), +(6945, 4479, '_menu_item_menu_item_parent', '4461'), +(6946, 4479, '_menu_item_object_id', '54'), +(6947, 4479, '_menu_item_object', 'page'), +(6948, 4479, '_menu_item_target', ''), +(6949, 4479, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(6950, 4479, '_menu_item_xfn', ''), +(6951, 4479, '_menu_item_url', ''), +(11618, 4977, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:3830;s:6:"height";i:2724;s:4:"file";s:38:"2014/02/DSC9548CarthanoIISprung_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:38:"DSC9548CarthanoIISprung_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:38:"DSC9548CarthanoIISprung_01-300x213.jpg";s:5:"width";i:300;s:6:"height";i:213;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:39:"DSC9548CarthanoIISprung_01-1024x728.jpg";s:5:"width";i:1024;s:6:"height";i:728;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:38:"DSC9548CarthanoIISprung_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:38:"DSC9548CarthanoIISprung_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:38:"DSC9548CarthanoIISprung_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:36:"DSC9548CarthanoIISprung_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:38:"DSC9548CarthanoIISprung_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:38:"DSC9548CarthanoIISprung_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:38:"DSC9548CarthanoIISprung_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:38:"DSC9548CarthanoIISprung_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:38:"DSC9548CarthanoIISprung_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:38:"DSC9548CarthanoIISprung_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:38:"DSC9548CarthanoIISprung_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:36:"DSC9548CarthanoIISprung_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:10:"Picasa 2.7";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11617, 4977, '_wp_attached_file', '2014/02/DSC9548CarthanoIISprung_01.jpg'), +(7008, 4487, '_menu_item_type', 'post_type'), +(7009, 4487, '_menu_item_menu_item_parent', '4469'), +(7010, 4487, '_menu_item_object_id', '1345'), +(7011, 4487, '_menu_item_object', 'page'), +(7012, 4487, '_menu_item_target', ''), +(7013, 4487, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7014, 4487, '_menu_item_xfn', ''), +(7015, 4487, '_menu_item_url', ''), +(7048, 4492, '_menu_item_type', 'post_type'), +(7049, 4492, '_menu_item_menu_item_parent', '4469'), +(7050, 4492, '_menu_item_object_id', '2300'), +(7051, 4492, '_menu_item_object', 'page'), +(7052, 4492, '_menu_item_target', ''), +(7053, 4492, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7054, 4492, '_menu_item_xfn', ''), +(7055, 4492, '_menu_item_url', ''), +(7056, 4493, '_menu_item_type', 'post_type'), +(7057, 4493, '_menu_item_menu_item_parent', '4469'), +(7058, 4493, '_menu_item_object_id', '2318'), +(7059, 4493, '_menu_item_object', 'page'), +(7060, 4493, '_menu_item_target', ''), +(7061, 4493, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7062, 4493, '_menu_item_xfn', ''), +(7063, 4493, '_menu_item_url', ''), +(7064, 4494, '_menu_item_type', 'post_type'), +(7065, 4494, '_menu_item_menu_item_parent', '4469'), +(7066, 4494, '_menu_item_object_id', '2367'), +(7067, 4494, '_menu_item_object', 'page'), +(7068, 4494, '_menu_item_target', ''), +(7069, 4494, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7070, 4494, '_menu_item_xfn', ''), +(7071, 4494, '_menu_item_url', ''), +(7072, 4495, '_menu_item_type', 'post_type'), +(7073, 4495, '_menu_item_menu_item_parent', '4469'), +(7074, 4495, '_menu_item_object_id', '2398'), +(7075, 4495, '_menu_item_object', 'page'), +(7076, 4495, '_menu_item_target', ''), +(7077, 4495, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7078, 4495, '_menu_item_xfn', ''), +(7079, 4495, '_menu_item_url', ''), +(7088, 4497, '_menu_item_type', 'post_type'), +(7089, 4497, '_menu_item_menu_item_parent', '4469'), +(7090, 4497, '_menu_item_object_id', '2660'), +(7091, 4497, '_menu_item_object', 'page'), +(7092, 4497, '_menu_item_target', ''), +(7093, 4497, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7094, 4497, '_menu_item_xfn', ''), +(7095, 4497, '_menu_item_url', ''), +(11616, 4976, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:3361;s:6:"height";i:2396;s:4:"file";s:34:"2014/02/DSC8891CarthanoTrab_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:34:"DSC8891CarthanoTrab_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:34:"DSC8891CarthanoTrab_01-300x213.jpg";s:5:"width";i:300;s:6:"height";i:213;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:35:"DSC8891CarthanoTrab_01-1024x729.jpg";s:5:"width";i:1024;s:6:"height";i:729;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:34:"DSC8891CarthanoTrab_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:34:"DSC8891CarthanoTrab_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:34:"DSC8891CarthanoTrab_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:32:"DSC8891CarthanoTrab_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:34:"DSC8891CarthanoTrab_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:34:"DSC8891CarthanoTrab_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:34:"DSC8891CarthanoTrab_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:34:"DSC8891CarthanoTrab_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:34:"DSC8891CarthanoTrab_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:34:"DSC8891CarthanoTrab_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:34:"DSC8891CarthanoTrab_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:32:"DSC8891CarthanoTrab_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:10:"Picasa 2.7";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11615, 4976, '_wp_attached_file', '2014/02/DSC8891CarthanoTrab_01.jpg'), +(11614, 4970, '_wp_old_slug', 'black-jack-2'), +(11655, 4971, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11656, 4971, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(7104, 4499, '_menu_item_type', 'post_type'), +(7105, 4499, '_menu_item_menu_item_parent', '4469'), +(7106, 4499, '_menu_item_object_id', '2745'), +(7107, 4499, '_menu_item_object', 'page'), +(7108, 4499, '_menu_item_target', ''), +(7109, 4499, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7110, 4499, '_menu_item_xfn', ''), +(7111, 4499, '_menu_item_url', ''), +(11611, 4971, 'kd_featured-image-5_drg_horse_id', '4988'), +(11610, 4971, 'kd_featured-image-4_drg_horse_id', '4987'), +(11609, 4971, 'kd_featured-image-3_drg_horse_id', '4986'), +(11608, 4971, 'kd_featured-image-2_drg_horse_id', '4985'), +(11607, 4971, '_thumbnail_id', '4984'), +(11606, 4971, 'pyre_page_title_bg_parallax', 'default'), +(11605, 4971, 'pyre_page_title_bar_bg_color', ''), +(11604, 4971, 'pyre_page_title_bar_bg_full', 'default'), +(7128, 4502, '_menu_item_type', 'post_type'), +(7129, 4502, '_menu_item_menu_item_parent', '0'), +(7130, 4502, '_menu_item_object_id', '69'), +(7131, 4502, '_menu_item_object', 'page'), +(7132, 4502, '_menu_item_target', ''), +(7133, 4502, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7134, 4502, '_menu_item_xfn', ''), +(7135, 4502, '_menu_item_url', ''), +(7136, 4503, '_menu_item_type', 'post_type'), +(7137, 4503, '_menu_item_menu_item_parent', '0'), +(7138, 4503, '_menu_item_object_id', '86'), +(7139, 4503, '_menu_item_object', 'page'), +(7140, 4503, '_menu_item_target', ''), +(7141, 4503, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7142, 4503, '_menu_item_xfn', ''), +(7143, 4503, '_menu_item_url', ''), +(7144, 4504, '_menu_item_type', 'post_type'), +(7145, 4504, '_menu_item_menu_item_parent', '0'), +(7146, 4504, '_menu_item_object_id', '2466'), +(7147, 4504, '_menu_item_object', 'page'), +(7148, 4504, '_menu_item_target', ''), +(7149, 4504, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7150, 4504, '_menu_item_xfn', ''), +(7151, 4504, '_menu_item_url', ''), +(7152, 4505, '_menu_item_type', 'post_type'), +(7153, 4505, '_menu_item_menu_item_parent', '0'), +(7154, 4505, '_menu_item_object_id', '72'), +(7155, 4505, '_menu_item_object', 'page'), +(7156, 4505, '_menu_item_target', ''), +(7157, 4505, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7158, 4505, '_menu_item_xfn', ''), +(7159, 4505, '_menu_item_url', ''), +(7160, 4506, '_menu_item_type', 'post_type'), +(7161, 4506, '_menu_item_menu_item_parent', '4469'), +(7162, 4506, '_menu_item_object_id', '3073'), +(7163, 4506, '_menu_item_object', 'page'), +(7164, 4506, '_menu_item_target', ''), +(7165, 4506, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7166, 4506, '_menu_item_xfn', ''), +(7167, 4506, '_menu_item_url', ''), +(11603, 4971, 'pyre_page_title_bar_bg_retina', ''), +(11602, 4971, 'pyre_page_title_bar_bg', ''), +(11601, 4971, 'pyre_page_title_height', ''), +(11600, 4971, 'pyre_page_title_custom_subheader', ''), +(11599, 4971, 'pyre_page_title_custom_text', ''), +(11598, 4971, 'pyre_page_title_text', 'yes'), +(11585, 4971, 'pyre_page_bg', ''), +(11584, 4971, 'pyre_page_bg_layout', 'default'), +(11583, 4971, 'pyre_fallback', ''), +(11582, 4971, 'pyre_elasticslider', '0'), +(11581, 4971, 'pyre_revslider', '0'), +(11580, 4971, 'pyre_flexslider', '0'), +(7184, 4509, '_menu_item_type', 'post_type'), +(7185, 4509, '_menu_item_menu_item_parent', '4469'), +(7186, 4509, '_menu_item_object_id', '3494'), +(7187, 4509, '_menu_item_object', 'page'), +(7188, 4509, '_menu_item_target', ''), +(7189, 4509, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7190, 4509, '_menu_item_xfn', ''), +(7191, 4509, '_menu_item_url', ''), +(7192, 4510, '_menu_item_type', 'post_type'), +(7193, 4510, '_menu_item_menu_item_parent', '4469'), +(7194, 4510, '_menu_item_object_id', '3492'), +(7195, 4510, '_menu_item_object', 'page'), +(7196, 4510, '_menu_item_target', ''), +(7197, 4510, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7198, 4510, '_menu_item_xfn', ''), +(7199, 4510, '_menu_item_url', ''), +(7200, 4511, '_menu_item_type', 'post_type'), +(7201, 4511, '_menu_item_menu_item_parent', '4461'), +(7202, 4511, '_menu_item_object_id', '3539'), +(7203, 4511, '_menu_item_object', 'page'), +(7204, 4511, '_menu_item_target', ''), +(7205, 4511, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7206, 4511, '_menu_item_xfn', ''), +(7207, 4511, '_menu_item_url', ''), +(7208, 4512, '_menu_item_type', 'post_type'), +(7209, 4512, '_menu_item_menu_item_parent', '4479'), +(7210, 4512, '_menu_item_object_id', '3474'), +(7211, 4512, '_menu_item_object', 'page'), +(7212, 4512, '_menu_item_target', ''), +(7213, 4512, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7214, 4512, '_menu_item_xfn', ''), +(7215, 4512, '_menu_item_url', ''), +(11579, 4971, 'pyre_wooslider', '0'), +(11578, 4971, 'pyre_slider', '0'), +(11577, 4971, 'pyre_slider_type', 'no'), +(11576, 4971, 'pyre_related_posts', 'yes'), +(11575, 4971, 'pyre_link_icon_url', ''), +(11574, 4971, 'pyre_image_rollover_icons', 'linkzoom'), +(11568, 4971, 'slide_template', ''), +(11567, 4971, '_edit_lock', '1393415349:1'), +(11566, 4971, '_edit_last', '1'), +(11565, 4971, '_alp_processed', '1393415371'), +(11564, 4971, '_alp_processed', '1393415371'); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(11642, 4984, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:2056;s:6:"height";i:3074;s:4:"file";s:47:"2014/02/Cristallo_II_Portrait_Recki_2011_04.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:47:"Cristallo_II_Portrait_Recki_2011_04-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:47:"Cristallo_II_Portrait_Recki_2011_04-200x300.jpg";s:5:"width";i:200;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:48:"Cristallo_II_Portrait_Recki_2011_04-684x1024.jpg";s:5:"width";i:684;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:47:"Cristallo_II_Portrait_Recki_2011_04-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:47:"Cristallo_II_Portrait_Recki_2011_04-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:47:"Cristallo_II_Portrait_Recki_2011_04-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:45:"Cristallo_II_Portrait_Recki_2011_04-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:47:"Cristallo_II_Portrait_Recki_2011_04-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:47:"Cristallo_II_Portrait_Recki_2011_04-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:47:"Cristallo_II_Portrait_Recki_2011_04-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:47:"Cristallo_II_Portrait_Recki_2011_04-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:47:"Cristallo_II_Portrait_Recki_2011_04-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:47:"Cristallo_II_Portrait_Recki_2011_04-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:47:"Cristallo_II_Portrait_Recki_2011_04-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:45:"Cristallo_II_Portrait_Recki_2011_04-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11641, 4984, '_wp_attached_file', '2014/02/Cristallo_II_Portrait_Recki_2011_04.jpg'), +(11627, 4970, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11628, 4970, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(11560, 4970, 'kd_featured-image-4_drg_horse_id', '4976'), +(11559, 4970, 'kd_featured-image-3_drg_horse_id', '4977'), +(11558, 4970, 'kd_featured-image-2_drg_horse_id', '4978'), +(11557, 4970, '_thumbnail_id', '4979'), +(11556, 4970, '_alp_processed', '1393415476'), +(7248, 4517, '_menu_item_type', 'post_type'), +(7249, 4517, '_menu_item_menu_item_parent', '4469'), +(7250, 4517, '_menu_item_object_id', '3638'), +(7251, 4517, '_menu_item_object', 'page'), +(7252, 4517, '_menu_item_target', ''), +(7253, 4517, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7254, 4517, '_menu_item_xfn', ''), +(7255, 4517, '_menu_item_url', ''), +(7256, 4518, '_menu_item_type', 'post_type'), +(7257, 4518, '_menu_item_menu_item_parent', '4469'), +(7258, 4518, '_menu_item_object_id', '3628'), +(7259, 4518, '_menu_item_object', 'page'), +(7260, 4518, '_menu_item_target', ''), +(7261, 4518, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7262, 4518, '_menu_item_xfn', ''), +(7263, 4518, '_menu_item_url', ''), +(7264, 4519, '_menu_item_type', 'post_type'), +(7265, 4519, '_menu_item_menu_item_parent', '4469'), +(7266, 4519, '_menu_item_object_id', '3610'), +(7267, 4519, '_menu_item_object', 'page'), +(7268, 4519, '_menu_item_target', ''), +(7269, 4519, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7270, 4519, '_menu_item_xfn', ''), +(7271, 4519, '_menu_item_url', ''), +(11548, 4970, 'pyre_page_title_custom_text', ''), +(11547, 4970, 'pyre_page_title_text', 'yes'), +(11546, 4970, 'pyre_page_title', 'yes'), +(11545, 4970, 'pyre_header_bg_repeat', 'repeat'), +(11544, 4970, 'pyre_header_bg_full', 'no'), +(11543, 4970, 'pyre_header_bg_color', ''), +(11352, 4964, '_menu_item_type', 'taxonomy'), +(11351, 4963, '_menu_item_orphaned', '1393404665'), +(11350, 4963, '_menu_item_url', ''), +(11349, 4963, '_menu_item_xfn', ''), +(11348, 4963, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(11347, 4963, '_menu_item_target', ''), +(7288, 4522, '_menu_item_type', 'post_type'), +(7289, 4522, '_menu_item_menu_item_parent', '4462'), +(7290, 4522, '_menu_item_object_id', '3745'), +(7291, 4522, '_menu_item_object', 'page'), +(7292, 4522, '_menu_item_target', ''), +(7293, 4522, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7294, 4522, '_menu_item_xfn', ''), +(7295, 4522, '_menu_item_url', ''), +(7296, 4523, '_menu_item_type', 'post_type'), +(7297, 4523, '_menu_item_menu_item_parent', '4462'), +(7298, 4523, '_menu_item_object_id', '3743'), +(7299, 4523, '_menu_item_object', 'page'), +(7300, 4523, '_menu_item_target', ''), +(7301, 4523, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7302, 4523, '_menu_item_xfn', ''), +(7303, 4523, '_menu_item_url', ''), +(7304, 4524, '_menu_item_type', 'post_type'), +(7305, 4524, '_menu_item_menu_item_parent', '4462'), +(7306, 4524, '_menu_item_object_id', '3741'), +(7307, 4524, '_menu_item_object', 'page'), +(7308, 4524, '_menu_item_target', ''), +(7309, 4524, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7310, 4524, '_menu_item_xfn', ''), +(7311, 4524, '_menu_item_url', ''), +(7312, 4525, '_menu_item_type', 'post_type'), +(7313, 4525, '_menu_item_menu_item_parent', '4462'), +(7314, 4525, '_menu_item_object_id', '3739'), +(7315, 4525, '_menu_item_object', 'page'), +(7316, 4525, '_menu_item_target', ''), +(7317, 4525, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7318, 4525, '_menu_item_xfn', ''), +(7319, 4525, '_menu_item_url', ''), +(7320, 4526, '_menu_item_type', 'post_type'), +(7321, 4526, '_menu_item_menu_item_parent', '4462'), +(7322, 4526, '_menu_item_object_id', '3737'), +(7323, 4526, '_menu_item_object', 'page'), +(7324, 4526, '_menu_item_target', ''), +(7325, 4526, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7326, 4526, '_menu_item_xfn', ''), +(7327, 4526, '_menu_item_url', ''), +(7328, 4527, '_menu_item_type', 'post_type'), +(7329, 4527, '_menu_item_menu_item_parent', '4462'), +(7330, 4527, '_menu_item_object_id', '3735'), +(7331, 4527, '_menu_item_object', 'page'), +(7332, 4527, '_menu_item_target', ''), +(7333, 4527, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7334, 4527, '_menu_item_xfn', ''), +(7335, 4527, '_menu_item_url', ''), +(7336, 4528, '_menu_item_type', 'post_type'), +(7337, 4528, '_menu_item_menu_item_parent', '4462'), +(7338, 4528, '_menu_item_object_id', '3733'), +(7339, 4528, '_menu_item_object', 'page'), +(7340, 4528, '_menu_item_target', ''), +(7341, 4528, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7342, 4528, '_menu_item_xfn', ''), +(7343, 4528, '_menu_item_url', ''), +(7344, 4529, '_menu_item_type', 'post_type'), +(7345, 4529, '_menu_item_menu_item_parent', '4462'), +(7346, 4529, '_menu_item_object_id', '3731'), +(7347, 4529, '_menu_item_object', 'page'), +(7348, 4529, '_menu_item_target', ''), +(7349, 4529, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7350, 4529, '_menu_item_xfn', ''), +(7351, 4529, '_menu_item_url', ''), +(7352, 4530, '_menu_item_type', 'post_type'), +(7353, 4530, '_menu_item_menu_item_parent', '4462'), +(7354, 4530, '_menu_item_object_id', '3729'), +(7355, 4530, '_menu_item_object', 'page'), +(7356, 4530, '_menu_item_target', ''), +(7357, 4530, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7358, 4530, '_menu_item_xfn', ''), +(7359, 4530, '_menu_item_url', ''), +(7360, 4531, '_menu_item_type', 'post_type'), +(7361, 4531, '_menu_item_menu_item_parent', '4462'), +(7362, 4531, '_menu_item_object_id', '3727'), +(7363, 4531, '_menu_item_object', 'page'), +(7364, 4531, '_menu_item_target', ''), +(7365, 4531, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7366, 4531, '_menu_item_xfn', ''), +(7367, 4531, '_menu_item_url', ''), +(7368, 4532, '_menu_item_type', 'post_type'), +(7369, 4532, '_menu_item_menu_item_parent', '4462'), +(7370, 4532, '_menu_item_object_id', '3717'), +(7371, 4532, '_menu_item_object', 'page'), +(7372, 4532, '_menu_item_target', ''), +(7373, 4532, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7374, 4532, '_menu_item_xfn', ''), +(7375, 4532, '_menu_item_url', ''), +(7376, 4533, '_menu_item_type', 'post_type'), +(7377, 4533, '_menu_item_menu_item_parent', '4462'), +(7378, 4533, '_menu_item_object_id', '3719'), +(7379, 4533, '_menu_item_object', 'page'), +(7380, 4533, '_menu_item_target', ''), +(7381, 4533, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7382, 4533, '_menu_item_xfn', ''), +(7383, 4533, '_menu_item_url', ''), +(11338, 4962, '_menu_item_target', ''), +(11337, 4962, '_menu_item_object', 'horse_breeds'), +(11336, 4962, '_menu_item_object_id', '35'), +(11335, 4962, '_menu_item_menu_item_parent', '0'), +(11334, 4962, '_menu_item_type', 'taxonomy'), +(11333, 4961, '_menu_item_orphaned', '1393404665'), +(7392, 4535, '_menu_item_type', 'post_type'), +(7393, 4535, '_menu_item_menu_item_parent', '4462'), +(7394, 4535, '_menu_item_object_id', '3754'), +(7395, 4535, '_menu_item_object', 'page'), +(7396, 4535, '_menu_item_target', ''), +(7397, 4535, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7398, 4535, '_menu_item_xfn', ''), +(7399, 4535, '_menu_item_url', ''), +(7400, 4536, '_menu_item_type', 'post_type'), +(7401, 4536, '_menu_item_menu_item_parent', '4462'), +(7402, 4536, '_menu_item_object_id', '3751'), +(7403, 4536, '_menu_item_object', 'page'), +(7404, 4536, '_menu_item_target', ''), +(7405, 4536, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7406, 4536, '_menu_item_xfn', ''), +(7407, 4536, '_menu_item_url', ''), +(7408, 4537, '_menu_item_type', 'post_type'), +(7409, 4537, '_menu_item_menu_item_parent', '4462'), +(7410, 4537, '_menu_item_object_id', '3749'), +(7411, 4537, '_menu_item_object', 'page'), +(7412, 4537, '_menu_item_target', ''), +(7413, 4537, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7414, 4537, '_menu_item_xfn', ''), +(7415, 4537, '_menu_item_url', ''), +(7416, 4538, '_menu_item_type', 'post_type'), +(7417, 4538, '_menu_item_menu_item_parent', '4462'), +(7418, 4538, '_menu_item_object_id', '3747'), +(7419, 4538, '_menu_item_object', 'page'), +(7420, 4538, '_menu_item_target', ''), +(7421, 4538, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7422, 4538, '_menu_item_xfn', ''), +(7423, 4538, '_menu_item_url', ''), +(7424, 4539, '_menu_item_type', 'post_type'), +(7425, 4539, '_menu_item_menu_item_parent', '4462'), +(7426, 4539, '_menu_item_object_id', '3721'), +(7427, 4539, '_menu_item_object', 'page'), +(7428, 4539, '_menu_item_target', ''), +(7429, 4539, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7430, 4539, '_menu_item_xfn', ''), +(7431, 4539, '_menu_item_url', ''), +(7432, 4540, '_menu_item_type', 'post_type'), +(7433, 4540, '_menu_item_menu_item_parent', '4462'), +(7434, 4540, '_menu_item_object_id', '3723'), +(7435, 4540, '_menu_item_object', 'page'), +(7436, 4540, '_menu_item_target', ''), +(7437, 4540, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7438, 4540, '_menu_item_xfn', ''), +(7439, 4540, '_menu_item_url', ''), +(7440, 4541, '_menu_item_type', 'post_type'), +(7441, 4541, '_menu_item_menu_item_parent', '4462'), +(7442, 4541, '_menu_item_object_id', '3725'), +(7443, 4541, '_menu_item_object', 'page'), +(7444, 4541, '_menu_item_target', ''), +(7445, 4541, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7446, 4541, '_menu_item_xfn', ''), +(7447, 4541, '_menu_item_url', ''), +(7448, 4542, '_menu_item_type', 'post_type'), +(7449, 4542, '_menu_item_menu_item_parent', '4462'), +(7450, 4542, '_menu_item_object_id', '3705'), +(7451, 4542, '_menu_item_object', 'page'), +(7452, 4542, '_menu_item_target', ''), +(7453, 4542, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7454, 4542, '_menu_item_xfn', ''), +(7455, 4542, '_menu_item_url', ''), +(7456, 4543, '_menu_item_type', 'post_type'), +(7457, 4543, '_menu_item_menu_item_parent', '4469'), +(7458, 4543, '_menu_item_object_id', '3815'), +(7459, 4543, '_menu_item_object', 'page'), +(7460, 4543, '_menu_item_target', ''), +(7461, 4543, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7462, 4543, '_menu_item_xfn', ''), +(7463, 4543, '_menu_item_url', ''), +(7464, 4544, '_menu_item_type', 'post_type'), +(7465, 4544, '_menu_item_menu_item_parent', '4469'), +(7466, 4544, '_menu_item_object_id', '3813'), +(7467, 4544, '_menu_item_object', 'page'), +(7468, 4544, '_menu_item_target', ''), +(7469, 4544, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7470, 4544, '_menu_item_xfn', ''), +(7471, 4544, '_menu_item_url', ''), +(7472, 4545, '_menu_item_type', 'post_type'), +(7473, 4545, '_menu_item_menu_item_parent', '0'), +(7474, 4545, '_menu_item_object_id', '69'), +(7475, 4545, '_menu_item_object', 'page'), +(7476, 4545, '_menu_item_target', ''), +(7477, 4545, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7478, 4545, '_menu_item_xfn', ''), +(7479, 4545, '_menu_item_url', ''), +(7480, 4546, '_menu_item_type', 'post_type'), +(7481, 4546, '_menu_item_menu_item_parent', '0'), +(7482, 4546, '_menu_item_object_id', '4475'), +(7483, 4546, '_menu_item_object', 'page'), +(7484, 4546, '_menu_item_target', ''), +(7485, 4546, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7486, 4546, '_menu_item_xfn', ''), +(7487, 4546, '_menu_item_url', ''), +(7488, 4547, '_menu_item_type', 'post_type'), +(7489, 4547, '_menu_item_menu_item_parent', '0'), +(7490, 4547, '_menu_item_object_id', '2466'), +(7491, 4547, '_menu_item_object', 'page'), +(7492, 4547, '_menu_item_target', ''), +(7493, 4547, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7494, 4547, '_menu_item_xfn', ''), +(7495, 4547, '_menu_item_url', ''), +(7496, 4548, '_menu_item_type', 'post_type'), +(7497, 4548, '_menu_item_menu_item_parent', '0'), +(7498, 4548, '_menu_item_object_id', '33'), +(7499, 4548, '_menu_item_object', 'page'), +(7500, 4548, '_menu_item_target', ''), +(7501, 4548, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7502, 4548, '_menu_item_xfn', ''), +(7503, 4548, '_menu_item_url', ''), +(7504, 4549, '_menu_item_type', 'post_type'), +(7505, 4549, '_menu_item_menu_item_parent', '4552'), +(7506, 4549, '_menu_item_object_id', '4100'), +(7507, 4549, '_menu_item_object', 'page'), +(7508, 4549, '_menu_item_target', ''), +(7509, 4549, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7510, 4549, '_menu_item_xfn', ''), +(7511, 4549, '_menu_item_url', ''), +(7512, 4550, '_menu_item_type', 'post_type'), +(7513, 4550, '_menu_item_menu_item_parent', '4552'), +(7514, 4550, '_menu_item_object_id', '4099'), +(7515, 4550, '_menu_item_object', 'page'), +(7516, 4550, '_menu_item_target', ''), +(7517, 4550, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7518, 4550, '_menu_item_xfn', ''), +(7519, 4550, '_menu_item_url', ''), +(7520, 4551, '_menu_item_type', 'post_type'), +(7521, 4551, '_menu_item_menu_item_parent', '4552'), +(7522, 4551, '_menu_item_object_id', '4098'), +(7523, 4551, '_menu_item_object', 'page'), +(7524, 4551, '_menu_item_target', ''), +(7525, 4551, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7526, 4551, '_menu_item_xfn', ''), +(7527, 4551, '_menu_item_url', ''), +(7528, 4552, '_menu_item_type', 'post_type'), +(7529, 4552, '_menu_item_menu_item_parent', '4461'), +(7530, 4552, '_menu_item_object_id', '4097'), +(7531, 4552, '_menu_item_object', 'page'), +(7532, 4552, '_menu_item_target', ''), +(7533, 4552, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7534, 4552, '_menu_item_xfn', ''), +(7535, 4552, '_menu_item_url', ''), +(7536, 4553, '_menu_item_type', 'post_type'), +(7537, 4553, '_menu_item_menu_item_parent', '4470'), +(7538, 4553, '_menu_item_object_id', '4126'), +(7539, 4553, '_menu_item_object', 'page'), +(7540, 4553, '_menu_item_target', ''), +(7541, 4553, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7542, 4553, '_menu_item_xfn', ''), +(7543, 4553, '_menu_item_url', ''), +(7544, 4554, '_menu_item_type', 'post_type'), +(7545, 4554, '_menu_item_menu_item_parent', '4470'), +(7546, 4554, '_menu_item_object_id', '4120'), +(7547, 4554, '_menu_item_object', 'page'), +(7548, 4554, '_menu_item_target', ''), +(7549, 4554, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7550, 4554, '_menu_item_xfn', ''), +(7551, 4554, '_menu_item_url', ''), +(7552, 4555, '_menu_item_type', 'post_type'), +(7553, 4555, '_menu_item_menu_item_parent', '4552'), +(7554, 4555, '_menu_item_object_id', '4097'), +(7555, 4555, '_menu_item_object', 'page'), +(7556, 4555, '_menu_item_target', ''), +(7557, 4555, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7558, 4555, '_menu_item_xfn', ''), +(7559, 4555, '_menu_item_url', ''), +(7560, 4556, '_menu_item_type', 'post_type'), +(7561, 4556, '_menu_item_menu_item_parent', '4552'), +(7562, 4556, '_menu_item_object_id', '4105'), +(7563, 4556, '_menu_item_object', 'page'), +(7564, 4556, '_menu_item_target', ''), +(7565, 4556, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7566, 4556, '_menu_item_xfn', ''), +(7567, 4556, '_menu_item_url', ''), +(7568, 4557, '_menu_item_type', 'post_type'), +(7569, 4557, '_menu_item_menu_item_parent', '4552'), +(7570, 4557, '_menu_item_object_id', '4103'), +(7571, 4557, '_menu_item_object', 'page'), +(7572, 4557, '_menu_item_target', ''), +(7573, 4557, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7574, 4557, '_menu_item_xfn', ''), +(7575, 4557, '_menu_item_url', ''), +(7576, 4558, '_menu_item_type', 'post_type'), +(7577, 4558, '_menu_item_menu_item_parent', '4466'), +(7578, 4558, '_menu_item_object_id', '4150'), +(7579, 4558, '_menu_item_object', 'page'), +(7580, 4558, '_menu_item_target', ''), +(7581, 4558, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7582, 4558, '_menu_item_xfn', ''), +(7583, 4558, '_menu_item_url', ''), +(7584, 4559, '_menu_item_type', 'post_type'), +(7585, 4559, '_menu_item_menu_item_parent', '4466'), +(7586, 4559, '_menu_item_object_id', '4148'), +(7587, 4559, '_menu_item_object', 'page'), +(7588, 4559, '_menu_item_target', ''), +(7589, 4559, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7590, 4559, '_menu_item_xfn', ''), +(7591, 4559, '_menu_item_url', ''), +(7592, 4560, '_menu_item_type', 'post_type'), +(7593, 4560, '_menu_item_menu_item_parent', '4466'), +(7594, 4560, '_menu_item_object_id', '4146'), +(7595, 4560, '_menu_item_object', 'page'), +(7596, 4560, '_menu_item_target', ''), +(7597, 4560, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7598, 4560, '_menu_item_xfn', ''), +(7599, 4560, '_menu_item_url', ''), +(7600, 4561, '_menu_item_type', 'post_type'), +(7601, 4561, '_menu_item_menu_item_parent', '4466'), +(7602, 4561, '_menu_item_object_id', '4144'), +(7603, 4561, '_menu_item_object', 'page'), +(7604, 4561, '_menu_item_target', ''), +(7605, 4561, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7606, 4561, '_menu_item_xfn', ''), +(7607, 4561, '_menu_item_url', ''), +(7608, 4562, '_menu_item_type', 'post_type'), +(7609, 4562, '_menu_item_menu_item_parent', '4466'), +(7610, 4562, '_menu_item_object_id', '4142'), +(7611, 4562, '_menu_item_object', 'page'), +(7612, 4562, '_menu_item_target', ''), +(7613, 4562, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7614, 4562, '_menu_item_xfn', ''), +(7615, 4562, '_menu_item_url', ''), +(7616, 4563, '_menu_item_type', 'post_type'), +(7617, 4563, '_menu_item_menu_item_parent', '4466'), +(7618, 4563, '_menu_item_object_id', '4140'), +(7619, 4563, '_menu_item_object', 'page'), +(7620, 4563, '_menu_item_target', ''), +(7621, 4563, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7622, 4563, '_menu_item_xfn', ''), +(7623, 4563, '_menu_item_url', ''), +(7624, 4564, '_menu_item_type', 'post_type'), +(7625, 4564, '_menu_item_menu_item_parent', '4466'), +(7626, 4564, '_menu_item_object_id', '4138'), +(7627, 4564, '_menu_item_object', 'page'), +(7628, 4564, '_menu_item_target', ''), +(7629, 4564, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7630, 4564, '_menu_item_xfn', ''), +(7631, 4564, '_menu_item_url', ''), +(7632, 4565, '_menu_item_type', 'post_type'), +(7633, 4565, '_menu_item_menu_item_parent', '4467'), +(7634, 4565, '_menu_item_object_id', '100'), +(7635, 4565, '_menu_item_object', 'page'), +(7636, 4565, '_menu_item_target', ''), +(7637, 4565, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7638, 4565, '_menu_item_xfn', ''), +(7639, 4565, '_menu_item_url', ''), +(7640, 4566, '_menu_item_type', 'post_type'), +(7641, 4566, '_menu_item_menu_item_parent', '4467'), +(7642, 4566, '_menu_item_object_id', '98'), +(7643, 4566, '_menu_item_object', 'page'), +(7644, 4566, '_menu_item_target', ''), +(7645, 4566, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7646, 4566, '_menu_item_xfn', ''), +(7647, 4566, '_menu_item_url', ''), +(7648, 4567, '_menu_item_type', 'post_type'), +(7649, 4567, '_menu_item_menu_item_parent', '4467'), +(7650, 4567, '_menu_item_object_id', '96'), +(7651, 4567, '_menu_item_object', 'page'), +(7652, 4567, '_menu_item_target', ''), +(7653, 4567, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7654, 4567, '_menu_item_xfn', ''), +(7655, 4567, '_menu_item_url', ''), +(7656, 4568, '_menu_item_type', 'post_type'), +(7657, 4568, '_menu_item_menu_item_parent', '4467'), +(7658, 4568, '_menu_item_object_id', '94'), +(7659, 4568, '_menu_item_object', 'page'), +(7660, 4568, '_menu_item_target', ''), +(7661, 4568, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7662, 4568, '_menu_item_xfn', ''), +(7663, 4568, '_menu_item_url', ''), +(10330, 4876, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1559;s:6:"height";i:2357;s:4:"file";s:34:"2014/02/BJ_Mauer_Ausschnitt_02.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:34:"BJ_Mauer_Ausschnitt_02-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:34:"BJ_Mauer_Ausschnitt_02-198x300.jpg";s:5:"width";i:198;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:35:"BJ_Mauer_Ausschnitt_02-677x1024.jpg";s:5:"width";i:677;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:34:"BJ_Mauer_Ausschnitt_02-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:34:"BJ_Mauer_Ausschnitt_02-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:34:"BJ_Mauer_Ausschnitt_02-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:32:"BJ_Mauer_Ausschnitt_02-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:34:"BJ_Mauer_Ausschnitt_02-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:34:"BJ_Mauer_Ausschnitt_02-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:34:"BJ_Mauer_Ausschnitt_02-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:34:"BJ_Mauer_Ausschnitt_02-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:34:"BJ_Mauer_Ausschnitt_02-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:34:"BJ_Mauer_Ausschnitt_02-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:34:"BJ_Mauer_Ausschnitt_02-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:32:"BJ_Mauer_Ausschnitt_02-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10329, 4876, '_wp_attached_file', '2014/02/BJ_Mauer_Ausschnitt_02.jpg'), +(10280, 4869, '_alp_processed', '1393439319'), +(10275, 4869, 'pyre_page_title_bg_parallax', 'default'), +(10274, 4869, 'pyre_page_title_bar_bg_color', ''), +(10273, 4869, 'pyre_page_title_bar_bg_full', 'default'), +(10272, 4869, 'pyre_page_title_bar_bg_retina', ''), +(10271, 4869, 'pyre_page_title_bar_bg', ''), +(10270, 4869, 'pyre_page_title_height', ''), +(10269, 4869, 'pyre_page_title_custom_subheader', ''), +(10268, 4869, 'pyre_page_title_custom_text', ''), +(10267, 4869, 'pyre_page_title_text', 'yes'), +(7688, 4572, '_menu_item_type', 'post_type'), +(7689, 4572, '_menu_item_menu_item_parent', '0'), +(7690, 4572, '_menu_item_object_id', '33'), +(7691, 4572, '_menu_item_object', 'page'), +(7692, 4572, '_menu_item_target', ''), +(7693, 4572, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7694, 4572, '_menu_item_xfn', ''), +(7695, 4572, '_menu_item_url', ''), +(7696, 4573, '_menu_item_type', 'post_type'), +(7697, 4573, '_menu_item_menu_item_parent', '4467'), +(7698, 4573, '_menu_item_object_id', '3530'), +(7699, 4573, '_menu_item_object', 'page'), +(7700, 4573, '_menu_item_target', ''), +(7701, 4573, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7702, 4573, '_menu_item_xfn', ''), +(7703, 4573, '_menu_item_url', ''), +(7704, 4574, '_menu_item_type', 'post_type'), +(7705, 4574, '_menu_item_menu_item_parent', '4467'), +(7706, 4574, '_menu_item_object_id', '3528'), +(7707, 4574, '_menu_item_object', 'page'), +(7708, 4574, '_menu_item_target', ''), +(7709, 4574, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7710, 4574, '_menu_item_xfn', ''), +(7711, 4574, '_menu_item_url', ''), +(7712, 4575, '_menu_item_type', 'post_type'), +(7713, 4575, '_menu_item_menu_item_parent', '4467'), +(7714, 4575, '_menu_item_object_id', '3526'), +(7715, 4575, '_menu_item_object', 'page'), +(7716, 4575, '_menu_item_target', ''), +(7717, 4575, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7718, 4575, '_menu_item_xfn', ''), +(7719, 4575, '_menu_item_url', ''), +(7720, 4576, '_menu_item_type', 'post_type'), +(7721, 4576, '_menu_item_menu_item_parent', '4467'), +(7722, 4576, '_menu_item_object_id', '3524'), +(7723, 4576, '_menu_item_object', 'page'), +(7724, 4576, '_menu_item_target', ''), +(7725, 4576, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7726, 4576, '_menu_item_xfn', ''), +(7727, 4576, '_menu_item_url', ''), +(7728, 4577, '_menu_item_type', 'post_type'), +(7729, 4577, '_menu_item_menu_item_parent', '4461'), +(7730, 4577, '_menu_item_object_id', '4204'), +(7731, 4577, '_menu_item_object', 'page'), +(7732, 4577, '_menu_item_target', ''), +(7733, 4577, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7734, 4577, '_menu_item_xfn', ''), +(7735, 4577, '_menu_item_url', ''), +(7736, 4578, '_menu_item_type', 'post_type'), +(7737, 4578, '_menu_item_menu_item_parent', '4471'), +(7738, 4578, '_menu_item_object_id', '3655'), +(7739, 4578, '_menu_item_object', 'page'), +(7740, 4578, '_menu_item_target', ''), +(7741, 4578, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7742, 4578, '_menu_item_xfn', ''), +(7743, 4578, '_menu_item_url', ''), +(7744, 4579, '_menu_item_type', 'post_type'), +(7745, 4579, '_menu_item_menu_item_parent', '4471'), +(7746, 4579, '_menu_item_object_id', '3652'), +(7747, 4579, '_menu_item_object', 'page'), +(7748, 4579, '_menu_item_target', ''), +(7749, 4579, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7750, 4579, '_menu_item_xfn', ''), +(7751, 4579, '_menu_item_url', ''), +(7752, 4580, '_menu_item_type', 'post_type'), +(7753, 4580, '_menu_item_menu_item_parent', '4472'), +(7754, 4580, '_menu_item_object_id', '3660'), +(7755, 4580, '_menu_item_object', 'page'), +(7756, 4580, '_menu_item_target', ''), +(7757, 4580, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7758, 4580, '_menu_item_xfn', ''), +(7759, 4580, '_menu_item_url', ''), +(7760, 4581, '_menu_item_type', 'post_type'), +(7761, 4581, '_menu_item_menu_item_parent', '4472'), +(7762, 4581, '_menu_item_object_id', '3658'), +(7763, 4581, '_menu_item_object', 'page'), +(7764, 4581, '_menu_item_target', ''), +(7765, 4581, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7766, 4581, '_menu_item_xfn', ''), +(7767, 4581, '_menu_item_url', ''), +(10266, 4869, 'pyre_page_title', 'yes'), +(10265, 4869, 'pyre_header_bg_repeat', 'repeat'), +(10264, 4869, 'pyre_header_bg_full', 'no'), +(10263, 4869, 'pyre_header_bg_color', ''), +(10262, 4869, 'pyre_header_bg', ''), +(10261, 4869, 'pyre_wide_page_bg_repeat', 'repeat'), +(10260, 4869, 'pyre_wide_page_bg_full', 'no'), +(10259, 4869, 'pyre_wide_page_bg_color', ''), +(10258, 4869, 'pyre_wide_page_bg', ''), +(10257, 4869, 'pyre_page_bg_repeat', 'repeat'), +(10256, 4869, 'pyre_page_bg_full', 'no'), +(10255, 4869, 'pyre_page_bg_color', ''), +(10254, 4869, 'pyre_page_bg', ''), +(10253, 4869, 'pyre_page_bg_layout', 'default'), +(10252, 4869, 'pyre_fallback', ''), +(10251, 4869, 'pyre_elasticslider', '0'), +(10250, 4869, 'pyre_revslider', '0'), +(10249, 4869, 'pyre_flexslider', '0'), +(10248, 4869, 'pyre_wooslider', '0'), +(10247, 4869, 'pyre_slider', '0'), +(10246, 4869, 'pyre_slider_type', 'no'), +(10245, 4869, 'pyre_related_posts', 'yes'), +(10244, 4869, 'pyre_link_icon_target', 'no'), +(10243, 4869, 'pyre_link_icon_url', ''), +(10242, 4869, 'pyre_image_rollover_icons', 'no'), +(7800, 4586, '_menu_item_type', 'post_type'), +(7801, 4586, '_menu_item_menu_item_parent', '4467'), +(7802, 4586, '_menu_item_object_id', '3846'), +(7803, 4586, '_menu_item_object', 'page'), +(7804, 4586, '_menu_item_target', ''), +(7805, 4586, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7806, 4586, '_menu_item_xfn', ''), +(7807, 4586, '_menu_item_url', ''), +(7808, 4587, '_menu_item_type', 'post_type'), +(7809, 4587, '_menu_item_menu_item_parent', '4467'), +(7810, 4587, '_menu_item_object_id', '4356'), +(7811, 4587, '_menu_item_object', 'page'), +(7812, 4587, '_menu_item_target', ''), +(7813, 4587, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7814, 4587, '_menu_item_xfn', ''), +(7815, 4587, '_menu_item_url', ''), +(11329, 4961, '_menu_item_target', ''), +(11328, 4961, '_menu_item_object', 'horse_breeds'), +(11327, 4961, '_menu_item_object_id', '34'), +(11326, 4961, '_menu_item_menu_item_parent', '0'), +(11325, 4961, '_menu_item_type', 'taxonomy'), +(11324, 4960, '_menu_item_orphaned', '1393404665'), +(11320, 4960, '_menu_item_target', ''), +(11319, 4960, '_menu_item_object', 'horse_breeds'), +(11318, 4960, '_menu_item_object_id', '36'), +(11317, 4960, '_menu_item_menu_item_parent', '0'), +(11316, 4960, '_menu_item_type', 'taxonomy'), +(11315, 4959, '_menu_item_orphaned', '1393404655'), +(7832, 4590, '_menu_item_type', 'post_type'), +(7833, 4590, '_menu_item_menu_item_parent', '4545'), +(7834, 4590, '_menu_item_object_id', '2712'), +(7835, 4590, '_menu_item_object', 'page'), +(7836, 4590, '_menu_item_target', ''), +(7837, 4590, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7838, 4590, '_menu_item_xfn', ''), +(7839, 4590, '_menu_item_url', ''), +(7840, 4591, '_menu_item_type', 'post_type'), +(7841, 4591, '_menu_item_menu_item_parent', '4545'), +(7842, 4591, '_menu_item_object_id', '3496'), +(7843, 4591, '_menu_item_object', 'page'), +(7844, 4591, '_menu_item_target', ''), +(7845, 4591, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7846, 4591, '_menu_item_xfn', ''), +(7847, 4591, '_menu_item_url', ''), +(7848, 4592, '_menu_item_type', 'post_type'), +(7849, 4592, '_menu_item_menu_item_parent', '4473'), +(7850, 4592, '_menu_item_object_id', '4476'), +(7851, 4592, '_menu_item_object', 'page'), +(7852, 4592, '_menu_item_target', ''), +(7853, 4592, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7854, 4592, '_menu_item_xfn', ''), +(7855, 4592, '_menu_item_url', ''), +(7856, 4593, '_menu_item_type', 'post_type'), +(7857, 4593, '_menu_item_menu_item_parent', '4473'), +(7858, 4593, '_menu_item_object_id', '4442'), +(7859, 4593, '_menu_item_object', 'page'), +(7860, 4593, '_menu_item_target', ''), +(7861, 4593, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7862, 4593, '_menu_item_xfn', ''), +(7863, 4593, '_menu_item_url', ''), +(7864, 4594, '_menu_item_type', 'post_type'), +(7865, 4594, '_menu_item_menu_item_parent', '4473'), +(7866, 4594, '_menu_item_object_id', '4427'), +(7867, 4594, '_menu_item_object', 'page'), +(7868, 4594, '_menu_item_target', ''), +(7869, 4594, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(7870, 4594, '_menu_item_xfn', ''), +(7871, 4594, '_menu_item_url', ''), +(7872, 4595, '_wp_attached_file', 'revslider/Avada_Full_Width/slide_3.jpg'), +(7873, 4595, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1700;s:6:"height";i:400;s:4:"file";s:38:"revslider/Avada_Full_Width/slide_3.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:19:"slide_3-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:18:"slide_3-300x70.jpg";s:5:"width";i:300;s:6:"height";i:70;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:20:"slide_3-1024x240.jpg";s:5:"width";i:1024;s:6:"height";i:240;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:19:"slide_3-300x400.jpg";s:5:"width";i:300;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:19:"slide_3-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:19:"slide_3-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:17:"slide_3-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:19:"slide_3-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:19:"slide_3-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:19:"slide_3-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:19:"slide_3-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:19:"slide_3-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:19:"slide_3-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:19:"slide_3-700x400.jpg";s:5:"width";i:700;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:17:"slide_3-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:13:"Iakov Kalinin";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(7874, 4596, '_wp_attached_file', 'revslider/Avada_Full_Width/slide_4.jpg'), +(7875, 4596, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:940;s:6:"height";i:450;s:4:"file";s:38:"revslider/Avada_Full_Width/slide_4.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:19:"slide_4-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:19:"slide_4-300x143.jpg";s:5:"width";i:300;s:6:"height";i:143;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:19:"slide_4-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:19:"slide_4-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:19:"slide_4-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:17:"slide_4-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:19:"slide_4-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:19:"slide_4-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:19:"slide_4-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:19:"slide_4-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:19:"slide_4-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:19:"slide_4-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:19:"slide_4-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:17:"slide_4-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(13051, 5079, 'pyre_fallback', ''), +(13000, 5078, 'pyre_slider', '0'), +(13001, 5078, 'pyre_wooslider', '0'), +(13002, 5078, 'pyre_flexslider', '0'), +(13003, 5078, 'pyre_revslider', '0'), +(13004, 5078, 'pyre_elasticslider', '0'), +(13005, 5078, 'pyre_fallback', ''), +(13006, 5078, 'pyre_page_bg_layout', 'default'), +(13007, 5078, 'pyre_page_bg', ''), +(13008, 5078, 'pyre_page_bg_color', ''), +(13009, 5078, 'pyre_page_bg_full', 'no'), +(13010, 5078, 'pyre_page_bg_repeat', 'repeat'), +(13011, 5078, 'pyre_wide_page_bg', ''), +(13012, 5078, 'pyre_wide_page_bg_color', ''), +(13013, 5078, 'pyre_wide_page_bg_full', 'no'), +(13014, 5078, 'pyre_wide_page_bg_repeat', 'repeat'), +(13015, 5078, 'pyre_header_bg', ''), +(13016, 5078, 'pyre_header_bg_color', ''), +(13017, 5078, 'pyre_header_bg_full', 'no'), +(13018, 5078, 'pyre_header_bg_repeat', 'repeat'), +(13019, 5078, 'pyre_page_title', 'yes'), +(13020, 5078, 'pyre_page_title_text', 'yes'), +(13021, 5078, 'pyre_page_title_custom_text', ''), +(13022, 5078, 'pyre_page_title_custom_subheader', ''), +(13023, 5078, 'pyre_page_title_height', ''), +(13024, 5078, 'pyre_page_title_bar_bg', ''), +(13025, 5078, 'pyre_page_title_bar_bg_retina', ''), +(13026, 5078, 'pyre_page_title_bar_bg_full', 'default'), +(13027, 5078, 'pyre_page_title_bar_bg_color', ''), +(13028, 5078, 'pyre_page_title_bg_parallax', 'default'), +(13029, 5079, '_alp_processed', '1393432497'), +(13030, 5079, '_icl_lang_duplicate_of', '4951'), +(13031, 5079, '_thumbnail_id', '4908'), +(13032, 5079, 'kd_featured-image-2_drg_horse_id', '4907'), +(13033, 5079, 'kd_featured-image-3_drg_horse_id', '4910'), +(13034, 5079, 'kd_featured-image-4_drg_horse_id', '4909'), +(13035, 5079, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(13036, 5079, 'slide_template', ''), +(13037, 5079, 'pyre_video', ''), +(13038, 5079, 'pyre_full_width', 'no'), +(13039, 5079, 'pyre_sidebar_position', 'default'), +(13040, 5079, 'pyre_fimg_width', ''), +(13041, 5079, 'pyre_fimg_height', ''), +(13042, 5079, 'pyre_image_rollover_icons', 'linkzoom'), +(13043, 5079, 'pyre_link_icon_url', ''), +(13044, 5079, 'pyre_related_posts', 'yes'), +(13045, 5079, 'pyre_slider_type', 'no'), +(13046, 5079, 'pyre_slider', '0'), +(13047, 5079, 'pyre_wooslider', '0'), +(13048, 5079, 'pyre_flexslider', '0'), +(13049, 5079, 'pyre_revslider', '0'), +(13050, 5079, 'pyre_elasticslider', '0'), +(13070, 5079, 'pyre_page_title_bar_bg', ''), +(13053, 5079, 'pyre_page_bg', ''), +(13054, 5079, 'pyre_page_bg_color', ''), +(13055, 5079, 'pyre_page_bg_full', 'no'), +(13056, 5079, 'pyre_page_bg_repeat', 'repeat'), +(13057, 5079, 'pyre_wide_page_bg', ''), +(13058, 5079, 'pyre_wide_page_bg_color', ''), +(13059, 5079, 'pyre_wide_page_bg_full', 'no'), +(13060, 5079, 'pyre_wide_page_bg_repeat', 'repeat'), +(13061, 5079, 'pyre_header_bg', ''), +(13062, 5079, 'pyre_header_bg_color', ''), +(13063, 5079, 'pyre_header_bg_full', 'no'), +(13064, 5079, 'pyre_header_bg_repeat', 'repeat'), +(13065, 5079, 'pyre_page_title', 'yes'), +(13066, 5079, 'pyre_page_title_text', 'yes'), +(13067, 5079, 'pyre_page_title_custom_text', ''), +(13068, 5079, 'pyre_page_title_custom_subheader', ''), +(13069, 5079, 'pyre_page_title_height', ''), +(7882, 4600, '_wp_attached_file', 'revslider/Avada_Full_Width/slide_5.jpg'), +(7883, 4600, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1700;s:6:"height";i:400;s:4:"file";s:38:"revslider/Avada_Full_Width/slide_5.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:19:"slide_5-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:18:"slide_5-300x70.jpg";s:5:"width";i:300;s:6:"height";i:70;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:20:"slide_5-1024x240.jpg";s:5:"width";i:1024;s:6:"height";i:240;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:19:"slide_5-300x400.jpg";s:5:"width";i:300;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:19:"slide_5-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:19:"slide_5-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:17:"slide_5-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:19:"slide_5-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:19:"slide_5-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:19:"slide_5-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:19:"slide_5-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:19:"slide_5-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:19:"slide_5-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:19:"slide_5-700x400.jpg";s:5:"width";i:700;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:17:"slide_5-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(13103, 5080, 'pyre_wide_page_bg_repeat', 'repeat'), +(13073, 5079, 'pyre_page_title_bar_bg_color', ''), +(13074, 5079, 'pyre_page_title_bg_parallax', 'default'), +(13075, 5079, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(13076, 5080, '_alp_processed', '1393432504'), +(13077, 5080, '_icl_lang_duplicate_of', '4948'), +(13078, 5080, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(13079, 5080, 'slide_template', ''), +(13080, 5080, 'pyre_video', ''), +(13081, 5080, 'pyre_full_width', 'no'), +(13082, 5080, 'pyre_sidebar_position', 'default'), +(13083, 5080, 'pyre_fimg_width', ''), +(13084, 5080, 'pyre_fimg_height', ''), +(13085, 5080, 'pyre_image_rollover_icons', 'linkzoom'), +(13086, 5080, 'pyre_link_icon_url', ''), +(13087, 5080, 'pyre_related_posts', 'yes'), +(13088, 5080, 'pyre_slider_type', 'no'), +(13089, 5080, 'pyre_slider', '0'), +(13090, 5080, 'pyre_wooslider', '0'), +(13091, 5080, 'pyre_flexslider', '0'), +(13092, 5080, 'pyre_revslider', '0'), +(13093, 5080, 'pyre_elasticslider', '0'), +(13094, 5080, 'pyre_fallback', ''), +(13095, 5080, 'pyre_page_bg_layout', 'default'), +(13096, 5080, 'pyre_page_bg', ''), +(13097, 5080, 'pyre_page_bg_color', ''), +(13098, 5080, 'pyre_page_bg_full', 'no'), +(13099, 5080, 'pyre_page_bg_repeat', 'repeat'), +(13100, 5080, 'pyre_wide_page_bg', ''), +(13101, 5080, 'pyre_wide_page_bg_color', ''), +(13102, 5080, 'pyre_wide_page_bg_full', 'no'), +(7886, 4602, '_wp_attached_file', 'revslider/Avada_Page_Slider/slide_1.jpg'), +(7887, 4602, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:940;s:6:"height";i:434;s:4:"file";s:39:"revslider/Avada_Page_Slider/slide_1.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:19:"slide_1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:19:"slide_1-300x138.jpg";s:5:"width";i:300;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:19:"slide_1-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:19:"slide_1-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:19:"slide_1-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:17:"slide_1-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:19:"slide_1-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:19:"slide_1-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:19:"slide_1-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:19:"slide_1-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:19:"slide_1-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:19:"slide_1-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:19:"slide_1-700x434.jpg";s:5:"width";i:700;s:6:"height";i:434;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:17:"slide_1-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(7888, 4603, '_wp_attached_file', 'revslider/Avada_Page_Slider/slide_2.jpg'), +(7889, 4603, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:940;s:6:"height";i:434;s:4:"file";s:39:"revslider/Avada_Page_Slider/slide_2.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:19:"slide_2-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:19:"slide_2-300x138.jpg";s:5:"width";i:300;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:19:"slide_2-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:19:"slide_2-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:19:"slide_2-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:17:"slide_2-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:19:"slide_2-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:19:"slide_2-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:19:"slide_2-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:19:"slide_2-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:19:"slide_2-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:19:"slide_2-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:19:"slide_2-700x434.jpg";s:5:"width";i:700;s:6:"height";i:434;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:17:"slide_2-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:34:"© Luke Beck - ALL RIGHTS RESERVED";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(7890, 4604, '_wp_attached_file', 'revslider/Avada_Small_Slider/slide_4.jpg'); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(7891, 4604, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:940;s:6:"height";i:450;s:4:"file";s:40:"revslider/Avada_Small_Slider/slide_4.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:19:"slide_4-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:19:"slide_4-300x143.jpg";s:5:"width";i:300;s:6:"height";i:143;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:19:"slide_4-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:19:"slide_4-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:19:"slide_4-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:17:"slide_4-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:19:"slide_4-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:19:"slide_4-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:19:"slide_4-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:19:"slide_4-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:19:"slide_4-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:19:"slide_4-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:19:"slide_4-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:17:"slide_4-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(13154, 5084, '_menu_item_xfn', ''), +(13104, 5080, 'pyre_header_bg', ''), +(13105, 5080, 'pyre_header_bg_color', ''), +(13106, 5080, 'pyre_header_bg_full', 'no'), +(13107, 5080, 'pyre_header_bg_repeat', 'repeat'), +(13108, 5080, 'pyre_page_title', 'yes'), +(13109, 5080, 'pyre_page_title_text', 'yes'), +(13110, 5080, 'pyre_page_title_custom_text', ''), +(13111, 5080, 'pyre_page_title_custom_subheader', ''), +(13112, 5080, 'pyre_page_title_height', ''), +(13113, 5080, 'pyre_page_title_bar_bg', ''), +(13114, 5080, 'pyre_page_title_bar_bg_retina', ''), +(13115, 5080, 'pyre_page_title_bar_bg_full', 'default'), +(13116, 5080, 'pyre_page_title_bar_bg_color', ''), +(13117, 5080, 'pyre_page_title_bg_parallax', 'default'), +(13118, 5080, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(13119, 5080, '_thumbnail_id', '4919'), +(13120, 5080, 'kd_featured-image-2_drg_horse_id', '4924'), +(13121, 5080, 'kd_featured-image-3_drg_horse_id', '4923'), +(13122, 5080, 'kd_featured-image-4_drg_horse_id', '4925'), +(13123, 5080, 'kd_featured-image-5_drg_horse_id', '4920'), +(13124, 5081, '_menu_item_type', 'taxonomy'), +(13125, 5081, '_menu_item_menu_item_parent', '0'), +(13126, 5081, '_menu_item_object_id', '52'), +(13127, 5081, '_menu_item_object', 'horse_breeds'), +(13128, 5081, '_menu_item_target', ''), +(13129, 5081, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(13130, 5081, '_menu_item_xfn', ''), +(13131, 5081, '_menu_item_url', ''), +(13132, 5082, '_menu_item_type', 'taxonomy'), +(13133, 5082, '_menu_item_menu_item_parent', '0'), +(13134, 5082, '_menu_item_object_id', '53'), +(13135, 5082, '_menu_item_object', 'horse_breeds'), +(13136, 5082, '_menu_item_target', ''), +(13137, 5082, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(13138, 5082, '_menu_item_xfn', ''), +(13139, 5082, '_menu_item_url', ''), +(13140, 5083, '_menu_item_type', 'taxonomy'), +(13141, 5083, '_menu_item_menu_item_parent', '0'), +(13142, 5083, '_menu_item_object_id', '54'), +(13143, 5083, '_menu_item_object', 'horse_breeds'), +(13144, 5083, '_menu_item_target', ''), +(13145, 5083, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(13146, 5083, '_menu_item_xfn', ''), +(13147, 5083, '_menu_item_url', ''), +(13148, 5084, '_menu_item_type', 'taxonomy'), +(13149, 5084, '_menu_item_menu_item_parent', '0'), +(13150, 5084, '_menu_item_object_id', '55'), +(13151, 5084, '_menu_item_object', 'horse_breeds'), +(13152, 5084, '_menu_item_target', ''), +(13153, 5084, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(8011, 4618, '_wp_attached_file', '2014/02/Logo-RR.png'), +(8012, 4618, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:200;s:6:"height";i:35;s:4:"file";s:19:"2014/02/Logo-RR.png";s:5:"sizes";a:4:{s:9:"thumbnail";a:4:{s:4:"file";s:18:"Logo-RR-150x35.png";s:5:"width";i:150;s:6:"height";i:35;s:9:"mime-type";s:9:"image/png";}s:8:"tabs-img";a:4:{s:4:"file";s:17:"Logo-RR-52x35.png";s:5:"width";i:52;s:6:"height";i:35;s:9:"mime-type";s:9:"image/png";}s:11:"related-img";a:4:{s:4:"file";s:18:"Logo-RR-180x35.png";s:5:"width";i:180;s:6:"height";i:35;s:9:"mime-type";s:9:"image/png";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:17:"Logo-RR-66x35.png";s:5:"width";i:66;s:6:"height";i:35;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(8013, 4619, '_wp_attached_file', '2014/02/Logo-RR@2x.png'), +(8014, 4619, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:400;s:6:"height";i:69;s:4:"file";s:22:"2014/02/Logo-RR@2x.png";s:5:"sizes";a:9:{s:9:"thumbnail";a:4:{s:4:"file";s:21:"Logo-RR@2x-150x69.png";s:5:"width";i:150;s:6:"height";i:69;s:9:"mime-type";s:9:"image/png";}s:6:"medium";a:4:{s:4:"file";s:21:"Logo-RR@2x-300x51.png";s:5:"width";i:300;s:6:"height";i:51;s:9:"mime-type";s:9:"image/png";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:21:"Logo-RR@2x-300x69.png";s:5:"width";i:300;s:6:"height";i:69;s:9:"mime-type";s:9:"image/png";}s:11:"blog-medium";a:4:{s:4:"file";s:21:"Logo-RR@2x-320x69.png";s:5:"width";i:320;s:6:"height";i:69;s:9:"mime-type";s:9:"image/png";}s:8:"tabs-img";a:4:{s:4:"file";s:20:"Logo-RR@2x-52x50.png";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:9:"image/png";}s:11:"related-img";a:4:{s:4:"file";s:21:"Logo-RR@2x-180x69.png";s:5:"width";i:180;s:6:"height";i:69;s:9:"mime-type";s:9:"image/png";}s:15:"portfolio-three";a:4:{s:4:"file";s:21:"Logo-RR@2x-300x69.png";s:5:"width";i:300;s:6:"height";i:69;s:9:"mime-type";s:9:"image/png";}s:14:"portfolio-four";a:4:{s:4:"file";s:21:"Logo-RR@2x-220x69.png";s:5:"width";i:220;s:6:"height";i:69;s:9:"mime-type";s:9:"image/png";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:20:"Logo-RR@2x-66x66.png";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(7906, 3610, '_edit_lock', '1392909290:1'), +(7907, 2398, '_edit_lock', '1391037511:1'), +(7908, 4612, '_wp_attached_file', '2014/01/cropped-header-01.jpg'), +(7909, 4612, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1600;s:6:"height";i:500;s:4:"file";s:29:"2014/01/cropped-header-01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:29:"cropped-header-01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:28:"cropped-header-01-300x93.jpg";s:5:"width";i:300;s:6:"height";i:93;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:30:"cropped-header-01-1024x320.jpg";s:5:"width";i:1024;s:6:"height";i:320;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:29:"cropped-header-01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:29:"cropped-header-01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:29:"cropped-header-01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:27:"cropped-header-01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:29:"cropped-header-01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:29:"cropped-header-01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:29:"cropped-header-01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:29:"cropped-header-01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:29:"cropped-header-01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:29:"cropped-header-01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:29:"cropped-header-01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:27:"cropped-header-01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(7910, 2398, '_edit_last', '1'), +(7914, 2398, 'pyre_main_top_padding', ''), +(7915, 2398, 'pyre_main_bottom_padding', ''), +(7916, 2398, 'pyre_hundredp_padding', ''), +(7917, 2398, 'pyre_page_title_custom_text', ''), +(7918, 2398, 'pyre_page_title_custom_subheader', ''), +(7919, 2398, 'pyre_page_title_height', ''), +(7920, 2398, 'pyre_page_title_bg_parallax', 'default'), +(7955, 3813, '_edit_lock', '1391773535:1'), +(7956, 3813, 'slide_template', ''), +(7957, 3813, 'pyre_main_top_padding', ''), +(7958, 3813, 'pyre_main_bottom_padding', ''), +(7959, 3813, 'pyre_hundredp_padding', ''), +(7960, 3813, 'pyre_page_title_custom_text', ''), +(7961, 3813, 'pyre_page_title_custom_subheader', ''), +(7962, 3813, 'pyre_page_title_height', ''), +(7963, 3813, 'pyre_page_title_bg_parallax', 'default'), +(8006, 3743, '_edit_lock', '1391037474:1'), +(8042, 4578, '_menu_item_fusion_megamenu_columns', ''), +(8043, 4578, '_menu_item_fusion_megamenu_widget_area', '0'), +(8044, 4578, '_menu_item_fusion_megamenu_thumbnail', ''), +(8045, 4472, '_menu_item_fusion_megamenu_columns', ''), +(8046, 4472, '_menu_item_fusion_megamenu_widget_area', '0'), +(8047, 4472, '_menu_item_fusion_megamenu_thumbnail', ''), +(8048, 4581, '_menu_item_fusion_megamenu_columns', ''), +(8049, 4581, '_menu_item_fusion_megamenu_widget_area', '0'), +(8050, 4581, '_menu_item_fusion_megamenu_thumbnail', ''), +(8051, 4580, '_menu_item_fusion_megamenu_columns', ''), +(8052, 4580, '_menu_item_fusion_megamenu_widget_area', '0'), +(8053, 4580, '_menu_item_fusion_megamenu_thumbnail', ''), +(8054, 4473, '_menu_item_fusion_megamenu_columns', ''), +(8055, 4473, '_menu_item_fusion_megamenu_widget_area', '0'), +(8056, 4473, '_menu_item_fusion_megamenu_thumbnail', ''), +(8057, 4594, '_menu_item_fusion_megamenu_columns', ''), +(8058, 4594, '_menu_item_fusion_megamenu_widget_area', '0'), +(8059, 4594, '_menu_item_fusion_megamenu_thumbnail', ''), +(8060, 4593, '_menu_item_fusion_megamenu_columns', ''), +(8061, 4593, '_menu_item_fusion_megamenu_widget_area', '0'), +(8062, 4593, '_menu_item_fusion_megamenu_thumbnail', ''), +(8063, 4592, '_menu_item_fusion_megamenu_columns', ''), +(8064, 4592, '_menu_item_fusion_megamenu_widget_area', '0'), +(8065, 4592, '_menu_item_fusion_megamenu_thumbnail', ''), +(8066, 4487, '_menu_item_fusion_megamenu_columns', ''), +(8067, 4487, '_menu_item_fusion_megamenu_widget_area', '0'), +(8068, 4487, '_menu_item_fusion_megamenu_thumbnail', ''), +(8069, 4477, '_menu_item_fusion_megamenu_columns', ''), +(8070, 4477, '_menu_item_fusion_megamenu_widget_area', '0'), +(8071, 4477, '_menu_item_fusion_megamenu_thumbnail', ''), +(8072, 4478, '_menu_item_fusion_megamenu_columns', ''), +(8073, 4478, '_menu_item_fusion_megamenu_widget_area', '0'), +(8074, 4478, '_menu_item_fusion_megamenu_thumbnail', ''), +(8075, 4492, '_menu_item_fusion_megamenu_columns', ''), +(8076, 4492, '_menu_item_fusion_megamenu_widget_area', '0'), +(8077, 4492, '_menu_item_fusion_megamenu_thumbnail', ''), +(8078, 4493, '_menu_item_fusion_megamenu_columns', ''), +(8079, 4493, '_menu_item_fusion_megamenu_widget_area', '0'), +(8080, 4493, '_menu_item_fusion_megamenu_thumbnail', ''), +(8081, 4494, '_menu_item_fusion_megamenu_columns', ''), +(8082, 4494, '_menu_item_fusion_megamenu_widget_area', '0'), +(8083, 4494, '_menu_item_fusion_megamenu_thumbnail', ''), +(8084, 4495, '_menu_item_fusion_megamenu_columns', ''), +(8085, 4495, '_menu_item_fusion_megamenu_widget_area', '0'), +(8086, 4495, '_menu_item_fusion_megamenu_thumbnail', ''), +(8087, 4497, '_menu_item_fusion_megamenu_columns', ''), +(8088, 4497, '_menu_item_fusion_megamenu_widget_area', '0'), +(8089, 4497, '_menu_item_fusion_megamenu_thumbnail', ''), +(8090, 4499, '_menu_item_fusion_megamenu_columns', ''), +(8091, 4499, '_menu_item_fusion_megamenu_widget_area', '0'), +(8092, 4499, '_menu_item_fusion_megamenu_thumbnail', ''), +(8093, 4506, '_menu_item_fusion_megamenu_columns', ''), +(8094, 4506, '_menu_item_fusion_megamenu_widget_area', '0'), +(8095, 4506, '_menu_item_fusion_megamenu_thumbnail', ''), +(8096, 4510, '_menu_item_fusion_megamenu_columns', ''), +(8097, 4510, '_menu_item_fusion_megamenu_widget_area', '0'), +(8098, 4510, '_menu_item_fusion_megamenu_thumbnail', ''), +(8099, 4509, '_menu_item_fusion_megamenu_columns', ''), +(8100, 4509, '_menu_item_fusion_megamenu_widget_area', '0'), +(8101, 4509, '_menu_item_fusion_megamenu_thumbnail', ''), +(8102, 4519, '_menu_item_fusion_megamenu_columns', ''), +(8103, 4519, '_menu_item_fusion_megamenu_widget_area', '0'), +(8104, 4519, '_menu_item_fusion_megamenu_thumbnail', ''), +(8105, 4518, '_menu_item_fusion_megamenu_columns', ''), +(8106, 4518, '_menu_item_fusion_megamenu_widget_area', '0'), +(8107, 4518, '_menu_item_fusion_megamenu_thumbnail', ''), +(8108, 4517, '_menu_item_fusion_megamenu_columns', ''), +(8109, 4517, '_menu_item_fusion_megamenu_widget_area', '0'), +(8110, 4517, '_menu_item_fusion_megamenu_thumbnail', ''), +(8111, 4544, '_menu_item_fusion_megamenu_columns', ''), +(8112, 4544, '_menu_item_fusion_megamenu_widget_area', '0'), +(8113, 4544, '_menu_item_fusion_megamenu_thumbnail', ''), +(8114, 4543, '_menu_item_fusion_megamenu_columns', ''), +(8115, 4543, '_menu_item_fusion_megamenu_widget_area', '0'), +(8116, 4543, '_menu_item_fusion_megamenu_thumbnail', ''), +(11597, 4971, 'pyre_page_title', 'yes'), +(11596, 4971, 'pyre_header_bg_repeat', 'repeat'), +(11589, 4971, 'pyre_wide_page_bg', ''), +(11590, 4971, 'pyre_wide_page_bg_color', ''), +(11591, 4971, 'pyre_wide_page_bg_full', 'no'), +(11592, 4971, 'pyre_wide_page_bg_repeat', 'repeat'), +(11593, 4971, 'pyre_header_bg', ''), +(11594, 4971, 'pyre_header_bg_color', ''), +(11595, 4971, 'pyre_header_bg_full', 'no'), +(11542, 4970, 'pyre_header_bg', ''), +(11356, 4964, '_menu_item_target', ''), +(11357, 4964, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(11358, 4964, '_menu_item_xfn', ''), +(11359, 4964, '_menu_item_url', ''), +(11360, 4964, '_menu_item_orphaned', '1393404665'), +(11364, 4965, '_menu_item_object', 'page'), +(11365, 4965, '_menu_item_target', ''), +(11366, 4965, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(11367, 4965, '_menu_item_xfn', ''), +(11368, 4965, '_menu_item_url', ''), +(11400, 4965, '_menu_item_fusion_megamenu_columns', 'auto'), +(11370, 4966, '_menu_item_type', 'post_type'), +(11371, 4966, '_menu_item_menu_item_parent', '0'), +(11372, 4966, '_menu_item_object_id', '4897'), +(11373, 4966, '_menu_item_object', 'page'), +(11374, 4966, '_menu_item_target', ''), +(11375, 4966, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(11376, 4966, '_menu_item_xfn', ''), +(11377, 4966, '_menu_item_url', ''), +(11397, 4966, '_menu_item_fusion_megamenu_columns', 'auto'), +(11379, 4967, '_menu_item_type', 'post_type'), +(11380, 4967, '_menu_item_menu_item_parent', '0'), +(11381, 4967, '_menu_item_object_id', '4824'), +(11382, 4967, '_menu_item_object', 'page'), +(11383, 4967, '_menu_item_target', ''), +(11384, 4967, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(11385, 4967, '_menu_item_xfn', ''), +(11386, 4967, '_menu_item_url', ''), +(11403, 4967, '_menu_item_fusion_megamenu_columns', 'auto'), +(11388, 4968, '_menu_item_type', 'post_type'), +(11389, 4968, '_menu_item_menu_item_parent', '0'), +(11390, 4968, '_menu_item_object_id', '4705'), +(11391, 4968, '_menu_item_object', 'page'), +(11392, 4968, '_menu_item_target', ''), +(11393, 4968, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(11394, 4968, '_menu_item_xfn', ''), +(11395, 4968, '_menu_item_url', ''), +(11396, 4968, '_menu_item_orphaned', '1393405136'), +(11398, 4966, '_menu_item_fusion_megamenu_widget_area', '0'), +(11399, 4966, '_menu_item_fusion_megamenu_thumbnail', ''), +(11401, 4965, '_menu_item_fusion_megamenu_widget_area', '0'), +(11402, 4965, '_menu_item_fusion_megamenu_thumbnail', ''), +(11404, 4967, '_menu_item_fusion_megamenu_widget_area', '0'), +(11405, 4967, '_menu_item_fusion_megamenu_thumbnail', ''), +(11539, 4970, 'pyre_wide_page_bg_color', ''), +(11540, 4970, 'pyre_wide_page_bg_full', 'no'), +(11541, 4970, 'pyre_wide_page_bg_repeat', 'repeat'), +(11346, 4963, '_menu_item_object', 'horse_breeds'), +(11345, 4963, '_menu_item_object_id', '37'), +(11341, 4962, '_menu_item_url', ''), +(11342, 4962, '_menu_item_orphaned', '1393404665'), +(11343, 4963, '_menu_item_type', 'taxonomy'), +(11344, 4963, '_menu_item_menu_item_parent', '0'), +(11323, 4960, '_menu_item_url', ''), +(11322, 4960, '_menu_item_xfn', ''), +(11314, 4959, '_menu_item_url', '#'), +(11313, 4959, '_menu_item_xfn', ''), +(11310, 4959, '_menu_item_object', 'custom'), +(11311, 4959, '_menu_item_target', ''), +(11312, 4959, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(8201, 4467, '_menu_item_fusion_megamenu_columns', 'auto'), +(8202, 4467, '_menu_item_fusion_megamenu_widget_area', '0'), +(8203, 4467, '_menu_item_fusion_megamenu_thumbnail', ''), +(8204, 4586, '_menu_item_fusion_megamenu_columns', ''), +(8205, 4586, '_menu_item_fusion_megamenu_widget_area', '0'), +(8206, 4586, '_menu_item_fusion_megamenu_thumbnail', ''), +(8207, 4568, '_menu_item_fusion_megamenu_columns', ''), +(8208, 4568, '_menu_item_fusion_megamenu_widget_area', '0'), +(8209, 4568, '_menu_item_fusion_megamenu_thumbnail', ''), +(8210, 4567, '_menu_item_fusion_megamenu_columns', ''), +(8211, 4567, '_menu_item_fusion_megamenu_widget_area', '0'), +(8212, 4567, '_menu_item_fusion_megamenu_thumbnail', ''), +(8213, 4566, '_menu_item_fusion_megamenu_columns', ''), +(8214, 4566, '_menu_item_fusion_megamenu_widget_area', '0'), +(8215, 4566, '_menu_item_fusion_megamenu_thumbnail', ''), +(8216, 4565, '_menu_item_fusion_megamenu_columns', ''), +(8217, 4565, '_menu_item_fusion_megamenu_widget_area', '0'), +(8218, 4565, '_menu_item_fusion_megamenu_thumbnail', ''), +(8219, 4576, '_menu_item_fusion_megamenu_columns', ''), +(8220, 4576, '_menu_item_fusion_megamenu_widget_area', '0'), +(8221, 4576, '_menu_item_fusion_megamenu_thumbnail', ''), +(8222, 4575, '_menu_item_fusion_megamenu_columns', ''), +(8223, 4575, '_menu_item_fusion_megamenu_widget_area', '0'), +(8224, 4575, '_menu_item_fusion_megamenu_thumbnail', ''), +(8225, 4574, '_menu_item_fusion_megamenu_columns', ''), +(8226, 4574, '_menu_item_fusion_megamenu_widget_area', '0'), +(8227, 4574, '_menu_item_fusion_megamenu_thumbnail', ''), +(8228, 4573, '_menu_item_fusion_megamenu_columns', ''), +(8229, 4573, '_menu_item_fusion_megamenu_widget_area', '0'), +(8230, 4573, '_menu_item_fusion_megamenu_thumbnail', ''), +(8231, 4587, '_menu_item_fusion_megamenu_columns', ''), +(8232, 4587, '_menu_item_fusion_megamenu_widget_area', '0'), +(8233, 4587, '_menu_item_fusion_megamenu_thumbnail', ''), +(10241, 4869, 'pyre_fimg_height', 'auto'), +(10240, 4869, 'pyre_fimg_width', 'auto'), +(10215, 1, 'avada_post_views_count', '24'), +(10222, 4869, '_edit_last', '1'), +(10223, 4869, '_edit_lock', '1393346570:1'), +(11050, 4869, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(11049, 4869, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(10226, 4869, 'slide_template', ''), +(10227, 4869, 'pyre_width', 'full'), +(10228, 4869, 'pyre_portfolio_width_100', 'no'), +(10229, 4869, 'pyre_sidebar', 'no'), +(10230, 4869, 'pyre_sidebar_position', 'default'), +(10231, 4869, 'pyre_project_desc_title', 'yes'), +(10232, 4869, 'pyre_project_details', 'yes'), +(10233, 4869, 'pyre_show_first_featured_image', 'no'), +(10234, 4869, 'pyre_video', ''), +(10235, 4869, 'pyre_video_url', ''), +(10236, 4869, 'pyre_project_url', ''), +(10237, 4869, 'pyre_project_url_text', ''), +(10238, 4869, 'pyre_copy_url', ''), +(10239, 4869, 'pyre_copy_url_text', ''), +(8258, 4552, '_menu_item_fusion_megamenu_columns', ''), +(8259, 4552, '_menu_item_fusion_megamenu_widget_area', '0'), +(8260, 4552, '_menu_item_fusion_megamenu_thumbnail', ''), +(8261, 4555, '_menu_item_fusion_megamenu_columns', ''), +(8262, 4555, '_menu_item_fusion_megamenu_widget_area', '0'), +(8263, 4555, '_menu_item_fusion_megamenu_thumbnail', ''), +(8264, 4551, '_menu_item_fusion_megamenu_columns', ''), +(8265, 4551, '_menu_item_fusion_megamenu_widget_area', '0'), +(8266, 4551, '_menu_item_fusion_megamenu_thumbnail', ''), +(8267, 4549, '_menu_item_fusion_megamenu_columns', ''), +(8268, 4549, '_menu_item_fusion_megamenu_widget_area', '0'), +(8269, 4549, '_menu_item_fusion_megamenu_thumbnail', ''), +(8270, 4550, '_menu_item_fusion_megamenu_columns', ''), +(8271, 4550, '_menu_item_fusion_megamenu_widget_area', '0'), +(8272, 4550, '_menu_item_fusion_megamenu_thumbnail', ''), +(8273, 4556, '_menu_item_fusion_megamenu_columns', ''), +(8274, 4556, '_menu_item_fusion_megamenu_widget_area', '0'), +(8275, 4556, '_menu_item_fusion_megamenu_thumbnail', ''), +(8276, 4557, '_menu_item_fusion_megamenu_columns', ''), +(8277, 4557, '_menu_item_fusion_megamenu_widget_area', '0'), +(8278, 4557, '_menu_item_fusion_megamenu_thumbnail', ''), +(8279, 4461, '_menu_item_fusion_megamenu_columns', 'auto'), +(8280, 4461, '_menu_item_fusion_megamenu_widget_area', '0'), +(8281, 4461, '_menu_item_fusion_megamenu_thumbnail', ''), +(8282, 4511, '_menu_item_fusion_megamenu_columns', ''), +(8283, 4511, '_menu_item_fusion_megamenu_widget_area', '0'), +(8284, 4511, '_menu_item_fusion_megamenu_thumbnail', ''), +(8285, 4577, '_menu_item_fusion_megamenu_columns', ''), +(8286, 4577, '_menu_item_fusion_megamenu_widget_area', '0'), +(8287, 4577, '_menu_item_fusion_megamenu_thumbnail', ''), +(8288, 4479, '_menu_item_fusion_megamenu_columns', ''), +(8289, 4479, '_menu_item_fusion_megamenu_widget_area', '0'), +(8290, 4479, '_menu_item_fusion_megamenu_thumbnail', ''), +(8291, 4512, '_menu_item_fusion_megamenu_columns', ''), +(8292, 4512, '_menu_item_fusion_megamenu_widget_area', '0'), +(8293, 4512, '_menu_item_fusion_megamenu_thumbnail', ''), +(8294, 4462, '_menu_item_fusion_megamenu_columns', ''), +(8295, 4462, '_menu_item_fusion_megamenu_widget_area', '0'), +(8296, 4462, '_menu_item_fusion_megamenu_thumbnail', ''), +(8297, 4466, '_menu_item_fusion_megamenu_columns', ''), +(8298, 4466, '_menu_item_fusion_megamenu_widget_area', '0'), +(8299, 4466, '_menu_item_fusion_megamenu_thumbnail', ''), +(8300, 4564, '_menu_item_fusion_megamenu_columns', ''), +(8301, 4564, '_menu_item_fusion_megamenu_widget_area', '0'), +(8302, 4564, '_menu_item_fusion_megamenu_thumbnail', ''), +(8303, 4563, '_menu_item_fusion_megamenu_columns', ''), +(8304, 4563, '_menu_item_fusion_megamenu_widget_area', '0'), +(8305, 4563, '_menu_item_fusion_megamenu_thumbnail', ''), +(8306, 4562, '_menu_item_fusion_megamenu_columns', ''), +(8307, 4562, '_menu_item_fusion_megamenu_widget_area', '0'), +(8308, 4562, '_menu_item_fusion_megamenu_thumbnail', ''), +(8309, 4561, '_menu_item_fusion_megamenu_columns', ''), +(8310, 4561, '_menu_item_fusion_megamenu_widget_area', '0'), +(8311, 4561, '_menu_item_fusion_megamenu_thumbnail', ''), +(8312, 4560, '_menu_item_fusion_megamenu_columns', ''), +(8313, 4560, '_menu_item_fusion_megamenu_widget_area', '0'), +(8314, 4560, '_menu_item_fusion_megamenu_thumbnail', ''), +(8315, 4559, '_menu_item_fusion_megamenu_columns', ''), +(8316, 4559, '_menu_item_fusion_megamenu_widget_area', '0'), +(8317, 4559, '_menu_item_fusion_megamenu_thumbnail', ''), +(8318, 4558, '_menu_item_fusion_megamenu_columns', ''), +(8319, 4558, '_menu_item_fusion_megamenu_widget_area', '0'), +(8320, 4558, '_menu_item_fusion_megamenu_thumbnail', ''), +(8321, 4532, '_menu_item_fusion_megamenu_columns', ''), +(8322, 4532, '_menu_item_fusion_megamenu_widget_area', '0'), +(8323, 4532, '_menu_item_fusion_megamenu_thumbnail', ''), +(8324, 4533, '_menu_item_fusion_megamenu_columns', ''), +(8325, 4533, '_menu_item_fusion_megamenu_widget_area', '0'), +(8326, 4533, '_menu_item_fusion_megamenu_thumbnail', ''), +(8327, 4539, '_menu_item_fusion_megamenu_columns', ''), +(8328, 4539, '_menu_item_fusion_megamenu_widget_area', '0'), +(8329, 4539, '_menu_item_fusion_megamenu_thumbnail', ''), +(8330, 4540, '_menu_item_fusion_megamenu_columns', ''), +(8331, 4540, '_menu_item_fusion_megamenu_widget_area', '0'), +(8332, 4540, '_menu_item_fusion_megamenu_thumbnail', ''), +(8333, 4541, '_menu_item_fusion_megamenu_columns', ''), +(8334, 4541, '_menu_item_fusion_megamenu_widget_area', '0'), +(8335, 4541, '_menu_item_fusion_megamenu_thumbnail', ''), +(8336, 4531, '_menu_item_fusion_megamenu_columns', ''), +(8337, 4531, '_menu_item_fusion_megamenu_widget_area', '0'), +(8338, 4531, '_menu_item_fusion_megamenu_thumbnail', ''), +(8339, 4530, '_menu_item_fusion_megamenu_columns', ''), +(8340, 4530, '_menu_item_fusion_megamenu_widget_area', '0'), +(8341, 4530, '_menu_item_fusion_megamenu_thumbnail', ''), +(8342, 4529, '_menu_item_fusion_megamenu_columns', ''), +(8343, 4529, '_menu_item_fusion_megamenu_widget_area', '0'), +(8344, 4529, '_menu_item_fusion_megamenu_thumbnail', ''), +(8345, 4528, '_menu_item_fusion_megamenu_columns', ''), +(8346, 4528, '_menu_item_fusion_megamenu_widget_area', '0'), +(8347, 4528, '_menu_item_fusion_megamenu_thumbnail', ''), +(8348, 4527, '_menu_item_fusion_megamenu_columns', ''), +(8349, 4527, '_menu_item_fusion_megamenu_widget_area', '0'), +(8350, 4527, '_menu_item_fusion_megamenu_thumbnail', ''), +(8351, 4526, '_menu_item_fusion_megamenu_columns', ''), +(8352, 4526, '_menu_item_fusion_megamenu_widget_area', '0'), +(8353, 4526, '_menu_item_fusion_megamenu_thumbnail', ''), +(8354, 4525, '_menu_item_fusion_megamenu_columns', ''), +(8355, 4525, '_menu_item_fusion_megamenu_widget_area', '0'), +(8356, 4525, '_menu_item_fusion_megamenu_thumbnail', ''), +(8357, 4542, '_menu_item_fusion_megamenu_columns', ''), +(8358, 4542, '_menu_item_fusion_megamenu_widget_area', '0'), +(8359, 4542, '_menu_item_fusion_megamenu_thumbnail', ''), +(8360, 4524, '_menu_item_fusion_megamenu_columns', ''), +(8361, 4524, '_menu_item_fusion_megamenu_widget_area', '0'), +(8362, 4524, '_menu_item_fusion_megamenu_thumbnail', ''), +(8363, 4523, '_menu_item_fusion_megamenu_columns', ''), +(8364, 4523, '_menu_item_fusion_megamenu_widget_area', '0'), +(8365, 4523, '_menu_item_fusion_megamenu_thumbnail', ''), +(8366, 4522, '_menu_item_fusion_megamenu_columns', ''), +(8367, 4522, '_menu_item_fusion_megamenu_widget_area', '0'), +(8368, 4522, '_menu_item_fusion_megamenu_thumbnail', ''), +(8369, 4538, '_menu_item_fusion_megamenu_columns', ''), +(8370, 4538, '_menu_item_fusion_megamenu_widget_area', '0'), +(8371, 4538, '_menu_item_fusion_megamenu_thumbnail', ''), +(8372, 4537, '_menu_item_fusion_megamenu_columns', ''), +(8373, 4537, '_menu_item_fusion_megamenu_widget_area', '0'), +(8374, 4537, '_menu_item_fusion_megamenu_thumbnail', ''), +(8375, 4536, '_menu_item_fusion_megamenu_columns', ''), +(8376, 4536, '_menu_item_fusion_megamenu_widget_area', '0'), +(8377, 4536, '_menu_item_fusion_megamenu_thumbnail', ''), +(8378, 4535, '_menu_item_fusion_megamenu_columns', ''), +(8379, 4535, '_menu_item_fusion_megamenu_widget_area', '0'), +(8380, 4535, '_menu_item_fusion_megamenu_thumbnail', ''), +(11332, 4961, '_menu_item_url', ''), +(11331, 4961, '_menu_item_xfn', ''), +(11330, 4961, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(8387, 4621, '_wp_attached_file', '2014/01/page_title_bg.png'), +(8389, 4622, '_wp_attached_file', '2014/01/page_title_bg@2x.png'), +(8390, 4622, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:2800;s:6:"height";i:174;s:4:"file";s:28:"2014/01/page_title_bg@2x.png";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:28:"page_title_bg@2x-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:6:"medium";a:4:{s:4:"file";s:27:"page_title_bg@2x-300x18.png";s:5:"width";i:300;s:6:"height";i:18;s:9:"mime-type";s:9:"image/png";}s:5:"large";a:4:{s:4:"file";s:28:"page_title_bg@2x-1024x63.png";s:5:"width";i:1024;s:6:"height";i:63;s:9:"mime-type";s:9:"image/png";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:28:"page_title_bg@2x-300x174.png";s:5:"width";i:300;s:6:"height";i:174;s:9:"mime-type";s:9:"image/png";}s:10:"blog-large";a:4:{s:4:"file";s:28:"page_title_bg@2x-669x174.png";s:5:"width";i:669;s:6:"height";i:174;s:9:"mime-type";s:9:"image/png";}s:11:"blog-medium";a:4:{s:4:"file";s:28:"page_title_bg@2x-320x174.png";s:5:"width";i:320;s:6:"height";i:174;s:9:"mime-type";s:9:"image/png";}s:8:"tabs-img";a:4:{s:4:"file";s:26:"page_title_bg@2x-52x50.png";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:9:"image/png";}s:11:"related-img";a:4:{s:4:"file";s:28:"page_title_bg@2x-180x138.png";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:9:"image/png";}s:13:"portfolio-one";a:4:{s:4:"file";s:28:"page_title_bg@2x-540x174.png";s:5:"width";i:540;s:6:"height";i:174;s:9:"mime-type";s:9:"image/png";}s:13:"portfolio-two";a:4:{s:4:"file";s:28:"page_title_bg@2x-460x174.png";s:5:"width";i:460;s:6:"height";i:174;s:9:"mime-type";s:9:"image/png";}s:15:"portfolio-three";a:4:{s:4:"file";s:28:"page_title_bg@2x-300x174.png";s:5:"width";i:300;s:6:"height";i:174;s:9:"mime-type";s:9:"image/png";}s:14:"portfolio-four";a:4:{s:4:"file";s:28:"page_title_bg@2x-220x161.png";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:9:"image/png";}s:14:"portfolio-full";a:4:{s:4:"file";s:28:"page_title_bg@2x-940x174.png";s:5:"width";i:940;s:6:"height";i:174;s:9:"mime-type";s:9:"image/png";}s:12:"recent-posts";a:4:{s:4:"file";s:28:"page_title_bg@2x-700x174.png";s:5:"width";i:700;s:6:"height";i:174;s:9:"mime-type";s:9:"image/png";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:26:"page_title_bg@2x-66x66.png";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(8391, 4623, '_edit_last', '1'), +(8392, 4623, '_edit_lock', '1393588243:1'), +(8393, 4623, '_wp_page_template', '100-width.php'), +(12741, 4623, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12740, 4623, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(8396, 4623, 'slide_template', ''), +(8397, 4623, 'pyre_slider_type', 'no'), +(8398, 4623, 'pyre_slider', '0'), +(8399, 4623, 'pyre_wooslider', '0'), +(8400, 4623, 'pyre_flexslider', '0'), +(8401, 4623, 'pyre_revslider', '0'), +(8402, 4623, 'pyre_elasticslider', '0'), +(8403, 4623, 'pyre_fallback', ''), +(8404, 4623, 'pyre_full_width', 'yes'), +(8405, 4623, 'pyre_sidebar_position', 'default'), +(8406, 4623, 'pyre_main_top_padding', ''), +(8407, 4623, 'pyre_main_bottom_padding', ''), +(8408, 4623, 'pyre_hundredp_padding', ''), +(8409, 4623, 'pyre_portfolio_excerpt', ''), +(8410, 4623, 'pyre_portfolio_full_width', 'yes'), +(8411, 4623, 'pyre_portfolio_sidebar_position', 'default'), +(8412, 4623, 'pyre_portfolio_filters', 'yes'), +(8413, 4623, 'pyre_page_bg_layout', 'default'), +(8414, 4623, 'pyre_page_bg', ''), +(8415, 4623, 'pyre_page_bg_color', ''), +(8416, 4623, 'pyre_page_bg_full', 'no'), +(8417, 4623, 'pyre_page_bg_repeat', 'repeat'), +(8418, 4623, 'pyre_wide_page_bg', ''), +(8419, 4623, 'pyre_wide_page_bg_color', ''), +(8420, 4623, 'pyre_wide_page_bg_full', 'no'), +(8421, 4623, 'pyre_wide_page_bg_repeat', 'repeat'), +(8422, 4623, 'pyre_header_bg', ''), +(8423, 4623, 'pyre_header_bg_color', ''), +(8424, 4623, 'pyre_header_bg_full', 'no'), +(8425, 4623, 'pyre_header_bg_repeat', 'repeat'), +(8426, 4623, 'pyre_page_title', 'yes'), +(8427, 4623, 'pyre_page_title_text', 'yes'), +(8428, 4623, 'pyre_page_title_custom_text', ''), +(8429, 4623, 'pyre_page_title_custom_subheader', ''), +(8430, 4623, 'pyre_page_title_height', ''), +(8431, 4623, 'pyre_page_title_bar_bg', ''), +(8432, 4623, 'pyre_page_title_bar_bg_retina', ''), +(8433, 4623, 'pyre_page_title_bar_bg_color', ''), +(8434, 4623, 'pyre_page_title_bar_bg_full', 'default'), +(8435, 4623, 'pyre_page_title_bg_parallax', 'default'), +(8464, 4628, '_wp_attached_file', '2014/02/background_photo.jpg'), +(8465, 4628, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1920;s:6:"height";i:1080;s:4:"file";s:28:"2014/02/background_photo.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:28:"background_photo-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:28:"background_photo-300x168.jpg";s:5:"width";i:300;s:6:"height";i:168;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:29:"background_photo-1024x576.jpg";s:5:"width";i:1024;s:6:"height";i:576;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:28:"background_photo-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:28:"background_photo-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:28:"background_photo-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:26:"background_photo-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:28:"background_photo-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:28:"background_photo-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:28:"background_photo-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:28:"background_photo-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:28:"background_photo-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:28:"background_photo-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:28:"background_photo-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:26:"background_photo-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(8466, 4628, '_edit_lock', '1391773728:1'), +(8627, 4655, '_wp_attached_file', '2014/02/background_photo1.jpg'), +(8628, 4655, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1920;s:6:"height";i:1080;s:4:"file";s:29:"2014/02/background_photo1.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:29:"background_photo1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:29:"background_photo1-300x168.jpg";s:5:"width";i:300;s:6:"height";i:168;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:30:"background_photo1-1024x576.jpg";s:5:"width";i:1024;s:6:"height";i:576;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:29:"background_photo1-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:29:"background_photo1-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:29:"background_photo1-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:27:"background_photo1-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:29:"background_photo1-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:29:"background_photo1-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:29:"background_photo1-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:29:"background_photo1-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:29:"background_photo1-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:29:"background_photo1-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:29:"background_photo1-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:27:"background_photo1-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(8629, 4655, '_edit_lock', '1391774791:1'), +(8654, 69, '_edit_lock', '1391793017:1'), +(8721, 4671, '_edit_last', '1'), +(8722, 4671, '_edit_lock', '1393433955:1'), +(8723, 4671, '_wp_page_template', 'full-width.php'), +(10221, 4671, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(8726, 4671, 'slide_template', ''), +(8727, 4671, 'pyre_slider_type', 'no'), +(8728, 4671, 'pyre_slider', '0'), +(8729, 4671, 'pyre_wooslider', '0'), +(8730, 4671, 'pyre_flexslider', '0'), +(8731, 4671, 'pyre_revslider', '0'), +(8732, 4671, 'pyre_elasticslider', '0'), +(8733, 4671, 'pyre_fallback', ''), +(8734, 4671, 'pyre_full_width', 'no'), +(8735, 4671, 'pyre_sidebar_position', 'default'), +(8736, 4671, 'pyre_main_top_padding', ''), +(8737, 4671, 'pyre_main_bottom_padding', ''), +(8738, 4671, 'pyre_hundredp_padding', ''), +(8739, 4671, 'pyre_portfolio_excerpt', ''), +(8740, 4671, 'pyre_portfolio_full_width', 'yes'), +(8741, 4671, 'pyre_portfolio_sidebar_position', 'default'), +(8742, 4671, 'pyre_portfolio_filters', 'yes'), +(8743, 4671, 'pyre_page_bg_layout', 'default'), +(8744, 4671, 'pyre_page_bg', ''), +(8745, 4671, 'pyre_page_bg_color', ''), +(8746, 4671, 'pyre_page_bg_full', 'no'), +(8747, 4671, 'pyre_page_bg_repeat', 'repeat'), +(8748, 4671, 'pyre_wide_page_bg', ''), +(8749, 4671, 'pyre_wide_page_bg_color', ''), +(8750, 4671, 'pyre_wide_page_bg_full', 'no'), +(8751, 4671, 'pyre_wide_page_bg_repeat', 'repeat'), +(8752, 4671, 'pyre_header_bg', ''), +(8753, 4671, 'pyre_header_bg_color', ''), +(8754, 4671, 'pyre_header_bg_full', 'no'), +(8755, 4671, 'pyre_header_bg_repeat', 'repeat'), +(8756, 4671, 'pyre_page_title', 'yes'), +(8757, 4671, 'pyre_page_title_text', 'yes'), +(8758, 4671, 'pyre_page_title_custom_text', ''), +(8759, 4671, 'pyre_page_title_custom_subheader', ''), +(8760, 4671, 'pyre_page_title_height', ''), +(8761, 4671, 'pyre_page_title_bar_bg', ''), +(8762, 4671, 'pyre_page_title_bar_bg_retina', ''), +(8763, 4671, 'pyre_page_title_bar_bg_color', ''), +(8764, 4671, 'pyre_page_title_bar_bg_full', 'default'), +(8765, 4671, 'pyre_page_title_bg_parallax', 'default'), +(10220, 4671, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(8788, 3731, '_edit_lock', '1391777587:1'), +(9878, 4671, '_alp_processed', '1392983417'), +(8833, 3749, '_edit_lock', '1391795703:1'), +(8858, 4686, '_wp_attached_file', '2014/01/footer.png'), +(8859, 4686, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:500;s:6:"height";i:998;s:4:"file";s:18:"2014/01/footer.png";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:18:"footer-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:6:"medium";a:4:{s:4:"file";s:18:"footer-150x300.png";s:5:"width";i:150;s:6:"height";i:300;s:9:"mime-type";s:9:"image/png";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:18:"footer-300x421.png";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:9:"image/png";}s:10:"blog-large";a:4:{s:4:"file";s:18:"footer-500x272.png";s:5:"width";i:500;s:6:"height";i:272;s:9:"mime-type";s:9:"image/png";}s:11:"blog-medium";a:4:{s:4:"file";s:18:"footer-320x202.png";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:9:"image/png";}s:8:"tabs-img";a:4:{s:4:"file";s:16:"footer-52x50.png";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:9:"image/png";}s:11:"related-img";a:4:{s:4:"file";s:18:"footer-180x138.png";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:9:"image/png";}s:13:"portfolio-one";a:4:{s:4:"file";s:18:"footer-500x272.png";s:5:"width";i:500;s:6:"height";i:272;s:9:"mime-type";s:9:"image/png";}s:13:"portfolio-two";a:4:{s:4:"file";s:18:"footer-460x295.png";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:9:"image/png";}s:15:"portfolio-three";a:4:{s:4:"file";s:18:"footer-300x214.png";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:9:"image/png";}s:14:"portfolio-four";a:4:{s:4:"file";s:18:"footer-220x161.png";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:9:"image/png";}s:14:"portfolio-full";a:4:{s:4:"file";s:18:"footer-500x400.png";s:5:"width";i:500;s:6:"height";i:400;s:9:"mime-type";s:9:"image/png";}s:12:"recent-posts";a:4:{s:4:"file";s:18:"footer-500x441.png";s:5:"width";i:500;s:6:"height";i:441;s:9:"mime-type";s:9:"image/png";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:16:"footer-66x66.png";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(8860, 4687, '_wp_attached_file', '2014/02/Logo-RR-footer.png'), +(8861, 4687, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:156;s:6:"height";i:27;s:4:"file";s:26:"2014/02/Logo-RR-footer.png";s:5:"sizes";a:3:{s:9:"thumbnail";a:4:{s:4:"file";s:25:"Logo-RR-footer-150x27.png";s:5:"width";i:150;s:6:"height";i:27;s:9:"mime-type";s:9:"image/png";}s:8:"tabs-img";a:4:{s:4:"file";s:24:"Logo-RR-footer-52x27.png";s:5:"width";i:52;s:6:"height";i:27;s:9:"mime-type";s:9:"image/png";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:24:"Logo-RR-footer-66x27.png";s:5:"width";i:66;s:6:"height";i:27;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(8862, 4688, '_wp_attached_file', '2014/02/Logo-RR-footer@2x.png'), +(8863, 4688, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:312;s:6:"height";i:54;s:4:"file";s:29:"2014/02/Logo-RR-footer@2x.png";s:5:"sizes";a:8:{s:9:"thumbnail";a:4:{s:4:"file";s:28:"Logo-RR-footer@2x-150x54.png";s:5:"width";i:150;s:6:"height";i:54;s:9:"mime-type";s:9:"image/png";}s:6:"medium";a:4:{s:4:"file";s:28:"Logo-RR-footer@2x-300x51.png";s:5:"width";i:300;s:6:"height";i:51;s:9:"mime-type";s:9:"image/png";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:28:"Logo-RR-footer@2x-300x54.png";s:5:"width";i:300;s:6:"height";i:54;s:9:"mime-type";s:9:"image/png";}s:8:"tabs-img";a:4:{s:4:"file";s:27:"Logo-RR-footer@2x-52x50.png";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:9:"image/png";}s:11:"related-img";a:4:{s:4:"file";s:28:"Logo-RR-footer@2x-180x54.png";s:5:"width";i:180;s:6:"height";i:54;s:9:"mime-type";s:9:"image/png";}s:15:"portfolio-three";a:4:{s:4:"file";s:28:"Logo-RR-footer@2x-300x54.png";s:5:"width";i:300;s:6:"height";i:54;s:9:"mime-type";s:9:"image/png";}s:14:"portfolio-four";a:4:{s:4:"file";s:28:"Logo-RR-footer@2x-220x54.png";s:5:"width";i:220;s:6:"height";i:54;s:9:"mime-type";s:9:"image/png";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:27:"Logo-RR-footer@2x-66x54.png";s:5:"width";i:66;s:6:"height";i:54;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(8864, 4687, '_edit_lock', '1391793870:1'), +(8883, 4693, '_menu_item_type', 'post_type'), +(8884, 4693, '_menu_item_menu_item_parent', '0'), +(8885, 4693, '_menu_item_object_id', '4671'), +(8886, 4693, '_menu_item_object', 'page'), +(8887, 4693, '_menu_item_target', ''), +(8888, 4693, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(8889, 4693, '_menu_item_xfn', ''), +(8890, 4693, '_menu_item_url', ''), +(8963, 4693, '_menu_item_fusion_megamenu_columns', 'auto'), +(8892, 4694, '_menu_item_type', 'post_type'), +(8893, 4694, '_menu_item_menu_item_parent', '0'), +(8894, 4694, '_menu_item_object_id', '4623'), +(8895, 4694, '_menu_item_object', 'page'), +(8896, 4694, '_menu_item_target', ''), +(8897, 4694, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(8898, 4694, '_menu_item_xfn', ''), +(8899, 4694, '_menu_item_url', ''), +(8948, 4694, '_menu_item_fusion_megamenu_columns', 'auto'), +(11538, 4970, 'pyre_wide_page_bg', ''), +(11537, 4970, 'pyre_page_bg_repeat', 'repeat'), +(11536, 4970, 'pyre_page_bg_full', 'no'), +(11535, 4970, 'pyre_page_bg_color', ''), +(11534, 4970, 'pyre_page_bg', ''), +(11533, 4970, 'pyre_page_bg_layout', 'default'), +(11532, 4970, 'pyre_fallback', ''), +(11528, 4970, 'pyre_wooslider', '0'), +(11527, 4970, 'pyre_slider', '0'), +(11526, 4970, 'pyre_slider_type', 'no'), +(11525, 4970, 'pyre_related_posts', 'yes'), +(11524, 4970, 'pyre_link_icon_url', ''), +(11523, 4970, 'pyre_image_rollover_icons', 'linkzoom'), +(8919, 4697, '_menu_item_type', 'custom'), +(8920, 4697, '_menu_item_menu_item_parent', '0'), +(8921, 4697, '_menu_item_object_id', '4697'), +(8922, 4697, '_menu_item_object', 'custom'), +(8923, 4697, '_menu_item_target', ''), +(8924, 4697, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(8925, 4697, '_menu_item_xfn', ''), +(8926, 4697, '_menu_item_url', '#'), +(8927, 4697, '_menu_item_orphaned', '1392051759'), +(8928, 4698, '_edit_last', '1'), +(8929, 4698, '_edit_lock', '1393433427:1'), +(8930, 4699, '_menu_item_type', 'post_type'), +(8931, 4699, '_menu_item_menu_item_parent', '0'), +(8932, 4699, '_menu_item_object_id', '4698'), +(8933, 4699, '_menu_item_object', 'page'), +(8934, 4699, '_menu_item_target', ''), +(8935, 4699, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(8936, 4699, '_menu_item_xfn', ''), +(8937, 4699, '_menu_item_url', ''), +(8957, 4699, '_menu_item_fusion_megamenu_columns', 'auto'), +(11519, 4970, 'pyre_full_width', 'no'), +(11518, 4970, 'pyre_video', ''), +(11517, 4970, 'slide_template', ''), +(11516, 4970, '_edit_lock', '1393431538:1'), +(11515, 4970, '_edit_last', '1'), +(11514, 4970, '_alp_processed', '1393415476'), +(8949, 4694, '_menu_item_fusion_megamenu_widget_area', '0'), +(8950, 4694, '_menu_item_fusion_megamenu_thumbnail', ''), +(11531, 4970, 'pyre_elasticslider', '0'), +(11530, 4970, 'pyre_revslider', '0'), +(11529, 4970, 'pyre_flexslider', '0'), +(11522, 4970, 'pyre_fimg_height', ''), +(11521, 4970, 'pyre_fimg_width', ''), +(11520, 4970, 'pyre_sidebar_position', 'default'), +(8958, 4699, '_menu_item_fusion_megamenu_widget_area', '0'), +(8959, 4699, '_menu_item_fusion_megamenu_thumbnail', ''), +(11512, 4899, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11503, 4897, 'drg_horse_category', 'a:1:{i:0;s:2:"39";}'), +(8964, 4693, '_menu_item_fusion_megamenu_widget_area', '0'), +(8965, 4693, '_menu_item_fusion_megamenu_thumbnail', ''), +(8966, 730, '_edit_lock', '1392114747:1'), +(8967, 4698, '_wp_page_template', 'default'), +(11996, 4698, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11924, 4698, '_alp_processed', '1393433521'), +(8970, 4698, 'slide_template', ''), +(8971, 4698, 'pyre_slider_type', 'no'), +(8972, 4698, 'pyre_slider', '0'), +(8973, 4698, 'pyre_wooslider', '0'), +(8974, 4698, 'pyre_flexslider', '0'), +(8975, 4698, 'pyre_revslider', '0'), +(8976, 4698, 'pyre_elasticslider', '0'), +(8977, 4698, 'pyre_fallback', ''), +(8978, 4698, 'pyre_full_width', 'no'), +(8979, 4698, 'pyre_sidebar_position', 'default'), +(8980, 4698, 'pyre_main_top_padding', ''), +(8981, 4698, 'pyre_main_bottom_padding', ''), +(8982, 4698, 'pyre_hundredp_padding', ''), +(8983, 4698, 'pyre_portfolio_excerpt', ''), +(8984, 4698, 'pyre_portfolio_full_width', 'yes'), +(8985, 4698, 'pyre_portfolio_sidebar_position', 'default'), +(8986, 4698, 'pyre_portfolio_filters', 'yes'), +(8987, 4698, 'pyre_page_bg_layout', 'default'), +(8988, 4698, 'pyre_page_bg', ''), +(8989, 4698, 'pyre_page_bg_color', ''), +(8990, 4698, 'pyre_page_bg_full', 'no'), +(8991, 4698, 'pyre_page_bg_repeat', 'repeat'), +(8992, 4698, 'pyre_wide_page_bg', ''), +(8993, 4698, 'pyre_wide_page_bg_color', ''), +(8994, 4698, 'pyre_wide_page_bg_full', 'no'), +(8995, 4698, 'pyre_wide_page_bg_repeat', 'repeat'), +(8996, 4698, 'pyre_header_bg', ''), +(8997, 4698, 'pyre_header_bg_color', ''), +(8998, 4698, 'pyre_header_bg_full', 'no'), +(8999, 4698, 'pyre_header_bg_repeat', 'repeat'), +(9000, 4698, 'pyre_page_title', 'yes'), +(9001, 4698, 'pyre_page_title_text', 'yes'), +(9002, 4698, 'pyre_page_title_custom_text', ''), +(9003, 4698, 'pyre_page_title_custom_subheader', ''), +(9004, 4698, 'pyre_page_title_height', ''), +(9005, 4698, 'pyre_page_title_bar_bg', ''), +(9006, 4698, 'pyre_page_title_bar_bg_retina', ''), +(9007, 4698, 'pyre_page_title_bar_bg_color', ''), +(9008, 4698, 'pyre_page_title_bar_bg_full', 'default'), +(9009, 4698, 'pyre_page_title_bg_parallax', 'default'), +(11997, 4698, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:12:"Blog Sidebar";}'), +(9018, 33, '_edit_lock', '1392652078:1'), +(9019, 33, '_edit_last', '1'), +(9023, 33, 'pyre_main_top_padding', ''); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(9024, 33, 'pyre_main_bottom_padding', ''), +(9025, 33, 'pyre_hundredp_padding', ''), +(9026, 33, 'pyre_page_title_custom_text', ''), +(9027, 33, 'pyre_page_title_custom_subheader', ''), +(9028, 33, 'pyre_page_title_height', ''), +(9029, 33, 'pyre_page_title_bg_parallax', 'default'), +(9034, 35, '_edit_lock', '1392812309:1'), +(9035, 4705, '_edit_last', '1'), +(9036, 4705, '_edit_lock', '1393590165:1'), +(9037, 4705, '_wp_page_template', '100-width.php'), +(13265, 4705, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(9040, 4705, 'slide_template', ''), +(9041, 4705, 'pyre_slider_type', 'layer'), +(9042, 4705, 'pyre_slider', '3'), +(9043, 4705, 'pyre_wooslider', '0'), +(9044, 4705, 'pyre_flexslider', '0'), +(9045, 4705, 'pyre_revslider', '0'), +(9046, 4705, 'pyre_elasticslider', '0'), +(9047, 4705, 'pyre_fallback', ''), +(9048, 4705, 'pyre_full_width', 'no'), +(9049, 4705, 'pyre_sidebar_position', 'default'), +(9050, 4705, 'pyre_main_top_padding', ''), +(9051, 4705, 'pyre_main_bottom_padding', ''), +(9052, 4705, 'pyre_hundredp_padding', ''), +(9053, 4705, 'pyre_portfolio_excerpt', ''), +(9054, 4705, 'pyre_portfolio_full_width', 'yes'), +(9055, 4705, 'pyre_portfolio_sidebar_position', 'default'), +(9056, 4705, 'pyre_portfolio_filters', 'yes'), +(9057, 4705, 'pyre_page_bg_layout', 'default'), +(9058, 4705, 'pyre_page_bg', ''), +(9059, 4705, 'pyre_page_bg_color', ''), +(9060, 4705, 'pyre_page_bg_full', 'no'), +(9061, 4705, 'pyre_page_bg_repeat', 'repeat'), +(9062, 4705, 'pyre_wide_page_bg', ''), +(9063, 4705, 'pyre_wide_page_bg_color', ''), +(9064, 4705, 'pyre_wide_page_bg_full', 'no'), +(9065, 4705, 'pyre_wide_page_bg_repeat', 'repeat'), +(9066, 4705, 'pyre_header_bg', ''), +(9067, 4705, 'pyre_header_bg_color', ''), +(9068, 4705, 'pyre_header_bg_full', 'no'), +(9069, 4705, 'pyre_header_bg_repeat', 'repeat'), +(9070, 4705, 'pyre_page_title', 'no'), +(9071, 4705, 'pyre_page_title_text', 'no'), +(9072, 4705, 'pyre_page_title_custom_text', ''), +(9073, 4705, 'pyre_page_title_custom_subheader', ''), +(9074, 4705, 'pyre_page_title_height', ''), +(9075, 4705, 'pyre_page_title_bar_bg', ''), +(9076, 4705, 'pyre_page_title_bar_bg_retina', ''), +(9077, 4705, 'pyre_page_title_bar_bg_color', ''), +(9078, 4705, 'pyre_page_title_bar_bg_full', 'default'), +(9079, 4705, 'pyre_page_title_bg_parallax', 'default'), +(13264, 4705, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(9082, 4705, '_wpml_media_duplicate', '1'), +(9083, 4705, '_wpml_media_featured', '1'), +(9086, 4705, '_alp_processed', '1393589528'), +(9466, 3678, '_edit_lock', '1392909085:1'), +(9165, 4715, '_wp_attached_file', '2014/02/horse-03-1024x654.jpg'), +(9166, 4715, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1024;s:6:"height";i:654;s:4:"file";s:29:"2014/02/horse-03-1024x654.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:29:"horse-03-1024x654-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:29:"horse-03-1024x654-300x191.jpg";s:5:"width";i:300;s:6:"height";i:191;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:29:"horse-03-1024x654-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:29:"horse-03-1024x654-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:29:"horse-03-1024x654-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:27:"horse-03-1024x654-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:29:"horse-03-1024x654-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:29:"horse-03-1024x654-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:29:"horse-03-1024x654-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:29:"horse-03-1024x654-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:29:"horse-03-1024x654-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:29:"horse-03-1024x654-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:29:"horse-03-1024x654-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:27:"horse-03-1024x654-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(9167, 4716, '_wp_attached_file', '2014/02/horse-011-1024x654.jpg'), +(9129, 4708, '_wp_attached_file', '2014/02/texto-banner-portada1.png'), +(9130, 4708, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:2600;s:6:"height";i:158;s:4:"file";s:33:"2014/02/texto-banner-portada1.png";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:33:"texto-banner-portada1-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:6:"medium";a:4:{s:4:"file";s:32:"texto-banner-portada1-300x18.png";s:5:"width";i:300;s:6:"height";i:18;s:9:"mime-type";s:9:"image/png";}s:5:"large";a:4:{s:4:"file";s:33:"texto-banner-portada1-1024x62.png";s:5:"width";i:1024;s:6:"height";i:62;s:9:"mime-type";s:9:"image/png";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:33:"texto-banner-portada1-300x158.png";s:5:"width";i:300;s:6:"height";i:158;s:9:"mime-type";s:9:"image/png";}s:10:"blog-large";a:4:{s:4:"file";s:33:"texto-banner-portada1-669x158.png";s:5:"width";i:669;s:6:"height";i:158;s:9:"mime-type";s:9:"image/png";}s:11:"blog-medium";a:4:{s:4:"file";s:33:"texto-banner-portada1-320x158.png";s:5:"width";i:320;s:6:"height";i:158;s:9:"mime-type";s:9:"image/png";}s:8:"tabs-img";a:4:{s:4:"file";s:31:"texto-banner-portada1-52x50.png";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:9:"image/png";}s:11:"related-img";a:4:{s:4:"file";s:33:"texto-banner-portada1-180x138.png";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:9:"image/png";}s:13:"portfolio-one";a:4:{s:4:"file";s:33:"texto-banner-portada1-540x158.png";s:5:"width";i:540;s:6:"height";i:158;s:9:"mime-type";s:9:"image/png";}s:13:"portfolio-two";a:4:{s:4:"file";s:33:"texto-banner-portada1-460x158.png";s:5:"width";i:460;s:6:"height";i:158;s:9:"mime-type";s:9:"image/png";}s:15:"portfolio-three";a:4:{s:4:"file";s:33:"texto-banner-portada1-300x158.png";s:5:"width";i:300;s:6:"height";i:158;s:9:"mime-type";s:9:"image/png";}s:14:"portfolio-four";a:4:{s:4:"file";s:33:"texto-banner-portada1-220x158.png";s:5:"width";i:220;s:6:"height";i:158;s:9:"mime-type";s:9:"image/png";}s:14:"portfolio-full";a:4:{s:4:"file";s:33:"texto-banner-portada1-940x158.png";s:5:"width";i:940;s:6:"height";i:158;s:9:"mime-type";s:9:"image/png";}s:12:"recent-posts";a:4:{s:4:"file";s:33:"texto-banner-portada1-700x158.png";s:5:"width";i:700;s:6:"height";i:158;s:9:"mime-type";s:9:"image/png";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:31:"texto-banner-portada1-66x66.png";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(9168, 4716, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1024;s:6:"height";i:654;s:4:"file";s:30:"2014/02/horse-011-1024x654.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:30:"horse-011-1024x654-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:30:"horse-011-1024x654-300x191.jpg";s:5:"width";i:300;s:6:"height";i:191;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:30:"horse-011-1024x654-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:30:"horse-011-1024x654-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:30:"horse-011-1024x654-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:28:"horse-011-1024x654-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:30:"horse-011-1024x654-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:30:"horse-011-1024x654-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:30:"horse-011-1024x654-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:30:"horse-011-1024x654-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:30:"horse-011-1024x654-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:30:"horse-011-1024x654-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:30:"horse-011-1024x654-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:28:"horse-011-1024x654-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(9169, 4717, '_wp_attached_file', '2014/02/horse-021-1024x654.jpg'), +(9170, 4717, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1024;s:6:"height";i:654;s:4:"file";s:30:"2014/02/horse-021-1024x654.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:30:"horse-021-1024x654-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:30:"horse-021-1024x654-300x191.jpg";s:5:"width";i:300;s:6:"height";i:191;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:30:"horse-021-1024x654-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:30:"horse-021-1024x654-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:30:"horse-021-1024x654-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:28:"horse-021-1024x654-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:30:"horse-021-1024x654-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:30:"horse-021-1024x654-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:30:"horse-021-1024x654-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:30:"horse-021-1024x654-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:30:"horse-021-1024x654-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:30:"horse-021-1024x654-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:30:"horse-021-1024x654-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:28:"horse-021-1024x654-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(9171, 4718, '_wp_attached_file', '2014/02/stables1.jpg'), +(9172, 4718, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1024;s:6:"height";i:654;s:4:"file";s:20:"2014/02/stables1.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:20:"stables1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:20:"stables1-300x191.jpg";s:5:"width";i:300;s:6:"height";i:191;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:20:"stables1-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:20:"stables1-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:20:"stables1-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:18:"stables1-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:20:"stables1-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:20:"stables1-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:20:"stables1-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:20:"stables1-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:20:"stables1-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:20:"stables1-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:20:"stables1-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:18:"stables1-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(9173, 4718, '_edit_lock', '1392740802:1'), +(9174, 4715, '_edit_lock', '1392910320:1'), +(9175, 4717, '_edit_lock', '1392740848:1'), +(9348, 198, '_edit_lock', '1393320494:1'), +(9349, 3745, '_edit_lock', '1392909087:1'), +(9563, 2776, '_edit_lock', '1392911641:1'), +(11880, 5007, 'pyre_page_bg_layout', 'default'), +(11879, 5007, 'pyre_portfolio_filters', 'yes'), +(11844, 5005, 'pyre_page_title_custom_text', ''), +(11845, 5005, 'pyre_page_title_custom_subheader', ''), +(11846, 5005, 'pyre_page_title_height', ''), +(11878, 5007, 'pyre_portfolio_sidebar_position', 'default'), +(11877, 5007, 'pyre_portfolio_full_width', 'yes'), +(11876, 5007, 'pyre_portfolio_excerpt', ''), +(11875, 5007, 'pyre_hundredp_padding', ''), +(11874, 5007, 'pyre_main_bottom_padding', ''), +(11873, 5007, 'pyre_main_top_padding', ''), +(11872, 5007, 'pyre_sidebar_position', 'default'), +(11871, 5007, 'pyre_full_width', 'no'), +(11870, 5007, 'pyre_fallback', ''), +(11869, 5007, 'pyre_elasticslider', '0'), +(11868, 5007, 'pyre_revslider', '0'), +(11867, 5007, 'pyre_flexslider', '0'), +(11866, 5007, 'pyre_wooslider', '0'), +(11865, 5007, 'pyre_slider', '0'), +(11864, 5007, 'pyre_slider_type', 'no'), +(11863, 5007, 'slide_template', ''), +(11905, 5007, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11906, 5007, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(11860, 5007, '_wp_page_template', 'full-width.php'), +(11859, 5007, '_edit_lock', '1393434009:1'), +(11858, 5007, '_edit_last', '1'), +(11857, 5005, '_edit_lock', '1393525382:1'), +(11851, 5005, 'pyre_page_title_bg_parallax', 'default'), +(11850, 5005, 'pyre_page_title_bar_bg_full', 'default'), +(11849, 5005, 'pyre_page_title_bar_bg_color', ''), +(11848, 5005, 'pyre_page_title_bar_bg_retina', ''), +(11847, 5005, 'pyre_page_title_bar_bg', ''), +(11843, 5005, 'pyre_page_title_text', 'yes'), +(11882, 5007, 'pyre_page_bg_color', ''), +(11881, 5007, 'pyre_page_bg', ''), +(9630, 4623, '_alp_processed', '1393514557'), +(9631, 4779, '_wp_attached_file', '2014/02/f_equipo.jpg'), +(9632, 4779, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:600;s:6:"height";i:338;s:4:"file";s:20:"2014/02/f_equipo.jpg";s:5:"sizes";a:12:{s:9:"thumbnail";a:4:{s:4:"file";s:20:"f_equipo-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:20:"f_equipo-300x169.jpg";s:5:"width";i:300;s:6:"height";i:169;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:20:"f_equipo-300x338.jpg";s:5:"width";i:300;s:6:"height";i:338;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:20:"f_equipo-600x272.jpg";s:5:"width";i:600;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:20:"f_equipo-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:18:"f_equipo-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:20:"f_equipo-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:20:"f_equipo-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:20:"f_equipo-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:20:"f_equipo-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:20:"f_equipo-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:18:"f_equipo-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(9685, 4716, '_edit_lock', '1392910359:1'), +(9716, 3662, '_edit_lock', '1392978180:1'), +(9811, 4808, '_wp_attached_file', '2014/01/page_bkgd31.jpg'), +(9812, 4808, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:940;s:6:"height";i:451;s:4:"file";s:23:"2014/01/page_bkgd31.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:23:"page_bkgd31-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:23:"page_bkgd31-300x143.jpg";s:5:"width";i:300;s:6:"height";i:143;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:23:"page_bkgd31-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:23:"page_bkgd31-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:23:"page_bkgd31-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:21:"page_bkgd31-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:23:"page_bkgd31-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:23:"page_bkgd31-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:23:"page_bkgd31-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:23:"page_bkgd31-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:23:"page_bkgd31-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:23:"page_bkgd31-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:23:"page_bkgd31-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:21:"page_bkgd31-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11886, 5007, 'pyre_wide_page_bg_color', ''), +(11885, 5007, 'pyre_wide_page_bg', ''), +(11884, 5007, 'pyre_page_bg_repeat', 'repeat'), +(11883, 5007, 'pyre_page_bg_full', 'no'), +(11969, 5009, 'pyre_page_title_bg_parallax', 'default'), +(9915, 4824, '_edit_last', '1'), +(9916, 4824, '_edit_lock', '1393601904:1'), +(9917, 4824, '_wp_page_template', 'full-width.php'), +(13275, 4824, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(9920, 4824, 'slide_template', ''), +(9921, 4824, 'pyre_slider_type', 'no'), +(9922, 4824, 'pyre_slider', '0'), +(9923, 4824, 'pyre_wooslider', '0'), +(9924, 4824, 'pyre_flexslider', '0'), +(9925, 4824, 'pyre_revslider', '0'), +(9926, 4824, 'pyre_elasticslider', '0'), +(9927, 4824, 'pyre_fallback', ''), +(9928, 4824, 'pyre_full_width', 'no'), +(9929, 4824, 'pyre_sidebar_position', 'default'), +(9930, 4824, 'pyre_main_top_padding', ''), +(9931, 4824, 'pyre_main_bottom_padding', ''), +(9932, 4824, 'pyre_hundredp_padding', ''), +(9933, 4824, 'pyre_portfolio_excerpt', ''), +(9934, 4824, 'pyre_portfolio_full_width', 'yes'), +(9935, 4824, 'pyre_portfolio_sidebar_position', 'default'), +(9936, 4824, 'pyre_portfolio_filters', 'yes'), +(9937, 4824, 'pyre_page_bg_layout', 'default'), +(9938, 4824, 'pyre_page_bg', ''), +(9939, 4824, 'pyre_page_bg_color', ''), +(9940, 4824, 'pyre_page_bg_full', 'no'), +(9941, 4824, 'pyre_page_bg_repeat', 'repeat'), +(9942, 4824, 'pyre_wide_page_bg', ''), +(9943, 4824, 'pyre_wide_page_bg_color', ''), +(9944, 4824, 'pyre_wide_page_bg_full', 'no'), +(9945, 4824, 'pyre_wide_page_bg_repeat', 'repeat'), +(9946, 4824, 'pyre_header_bg', ''), +(9947, 4824, 'pyre_header_bg_color', ''), +(9948, 4824, 'pyre_header_bg_full', 'no'), +(9949, 4824, 'pyre_header_bg_repeat', 'repeat'), +(9950, 4824, 'pyre_page_title', 'yes'), +(9951, 4824, 'pyre_page_title_text', 'yes'), +(9952, 4824, 'pyre_page_title_custom_text', ''), +(9953, 4824, 'pyre_page_title_custom_subheader', ''), +(9954, 4824, 'pyre_page_title_height', ''), +(9955, 4824, 'pyre_page_title_bar_bg', ''), +(9956, 4824, 'pyre_page_title_bar_bg_retina', ''), +(9957, 4824, 'pyre_page_title_bar_bg_color', ''), +(9958, 4824, 'pyre_page_title_bar_bg_full', 'default'), +(9959, 4824, 'pyre_page_title_bg_parallax', 'default'), +(13274, 4824, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(9964, 4824, '_alp_processed', '1393599309'), +(9977, 3496, '_edit_lock', '1392914624:1'), +(10056, 4842, '_wp_attached_file', '2014/02/1.jpg'), +(10057, 4842, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:650;s:6:"height";i:488;s:4:"file";s:13:"2014/02/1.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:13:"1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:13:"1-300x225.jpg";s:5:"width";i:300;s:6:"height";i:225;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:13:"1-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:13:"1-650x272.jpg";s:5:"width";i:650;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:13:"1-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:11:"1-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:13:"1-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:13:"1-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:13:"1-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:13:"1-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:13:"1-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:13:"1-650x400.jpg";s:5:"width";i:650;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:13:"1-650x441.jpg";s:5:"width";i:650;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:11:"1-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10058, 4843, '_wp_attached_file', '2014/02/2.jpg'), +(10059, 4843, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:650;s:6:"height";i:434;s:4:"file";s:13:"2014/02/2.jpg";s:5:"sizes";a:13:{s:9:"thumbnail";a:4:{s:4:"file";s:13:"2-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:13:"2-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:13:"2-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:13:"2-650x272.jpg";s:5:"width";i:650;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:13:"2-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:11:"2-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:13:"2-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:13:"2-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:13:"2-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:13:"2-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:13:"2-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:13:"2-650x400.jpg";s:5:"width";i:650;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:11:"2-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10060, 4844, '_wp_attached_file', '2014/02/3.jpg'), +(10061, 4844, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:650;s:6:"height";i:450;s:4:"file";s:13:"2014/02/3.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:13:"3-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:13:"3-300x207.jpg";s:5:"width";i:300;s:6:"height";i:207;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:13:"3-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:13:"3-650x272.jpg";s:5:"width";i:650;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:13:"3-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:11:"3-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:13:"3-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:13:"3-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:13:"3-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:13:"3-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:13:"3-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:13:"3-650x400.jpg";s:5:"width";i:650;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:13:"3-650x441.jpg";s:5:"width";i:650;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:11:"3-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10062, 4845, '_wp_attached_file', '2014/02/4.jpg'), +(10063, 4845, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:650;s:6:"height";i:488;s:4:"file";s:13:"2014/02/4.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:13:"4-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:13:"4-300x225.jpg";s:5:"width";i:300;s:6:"height";i:225;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:13:"4-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:13:"4-650x272.jpg";s:5:"width";i:650;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:13:"4-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:11:"4-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:13:"4-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:13:"4-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:13:"4-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:13:"4-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:13:"4-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:13:"4-650x400.jpg";s:5:"width";i:650;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:13:"4-650x441.jpg";s:5:"width";i:650;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:11:"4-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10064, 4846, '_wp_attached_file', '2014/02/5.jpg'), +(10065, 4846, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:650;s:6:"height";i:434;s:4:"file";s:13:"2014/02/5.jpg";s:5:"sizes";a:13:{s:9:"thumbnail";a:4:{s:4:"file";s:13:"5-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:13:"5-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:13:"5-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:13:"5-650x272.jpg";s:5:"width";i:650;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:13:"5-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:11:"5-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:13:"5-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:13:"5-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:13:"5-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:13:"5-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:13:"5-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:13:"5-650x400.jpg";s:5:"width";i:650;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:11:"5-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10066, 4847, '_wp_attached_file', '2014/02/6.jpg'), +(10067, 4847, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:650;s:6:"height";i:434;s:4:"file";s:13:"2014/02/6.jpg";s:5:"sizes";a:13:{s:9:"thumbnail";a:4:{s:4:"file";s:13:"6-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:13:"6-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:13:"6-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:13:"6-650x272.jpg";s:5:"width";i:650;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:13:"6-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:11:"6-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:13:"6-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:13:"6-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:13:"6-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:13:"6-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:13:"6-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:13:"6-650x400.jpg";s:5:"width";i:650;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:11:"6-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10068, 4848, '_wp_attached_file', '2014/02/7.jpg'), +(10069, 4848, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:650;s:6:"height";i:407;s:4:"file";s:13:"2014/02/7.jpg";s:5:"sizes";a:13:{s:9:"thumbnail";a:4:{s:4:"file";s:13:"7-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:13:"7-300x187.jpg";s:5:"width";i:300;s:6:"height";i:187;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:13:"7-300x407.jpg";s:5:"width";i:300;s:6:"height";i:407;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:13:"7-650x272.jpg";s:5:"width";i:650;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:13:"7-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:11:"7-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:13:"7-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:13:"7-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:13:"7-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:13:"7-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:13:"7-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:13:"7-650x400.jpg";s:5:"width";i:650;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:11:"7-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10070, 4849, '_wp_attached_file', '2014/02/8.jpg'), +(10071, 4849, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:650;s:6:"height";i:427;s:4:"file";s:13:"2014/02/8.jpg";s:5:"sizes";a:13:{s:9:"thumbnail";a:4:{s:4:"file";s:13:"8-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:13:"8-300x197.jpg";s:5:"width";i:300;s:6:"height";i:197;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:13:"8-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:13:"8-650x272.jpg";s:5:"width";i:650;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:13:"8-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:11:"8-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:13:"8-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:13:"8-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:13:"8-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:13:"8-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:13:"8-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:13:"8-650x400.jpg";s:5:"width";i:650;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:11:"8-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10072, 4850, '_wp_attached_file', '2014/02/9.jpg'), +(10073, 4850, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:650;s:6:"height";i:435;s:4:"file";s:13:"2014/02/9.jpg";s:5:"sizes";a:13:{s:9:"thumbnail";a:4:{s:4:"file";s:13:"9-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:13:"9-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:13:"9-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:13:"9-650x272.jpg";s:5:"width";i:650;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:13:"9-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:11:"9-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:13:"9-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:13:"9-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:13:"9-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:13:"9-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:13:"9-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:13:"9-650x400.jpg";s:5:"width";i:650;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:11:"9-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10138, 4861, '_wp_attached_file', '2014/02/Santaynez.jpg'), +(10139, 4861, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:950;s:6:"height";i:450;s:4:"file";s:21:"2014/02/Santaynez.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:21:"Santaynez-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:21:"Santaynez-300x142.jpg";s:5:"width";i:300;s:6:"height";i:142;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:21:"Santaynez-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:21:"Santaynez-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:21:"Santaynez-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:19:"Santaynez-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:21:"Santaynez-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:21:"Santaynez-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:21:"Santaynez-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:21:"Santaynez-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:21:"Santaynez-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:21:"Santaynez-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:21:"Santaynez-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:19:"Santaynez-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10140, 4862, '_wp_attached_file', '2014/02/03_bannerhome_allotjament_2.jpg'), +(10141, 4862, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:950;s:6:"height";i:450;s:4:"file";s:39:"2014/02/03_bannerhome_allotjament_2.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:39:"03_bannerhome_allotjament_2-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:39:"03_bannerhome_allotjament_2-300x142.jpg";s:5:"width";i:300;s:6:"height";i:142;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:39:"03_bannerhome_allotjament_2-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:39:"03_bannerhome_allotjament_2-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:39:"03_bannerhome_allotjament_2-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:37:"03_bannerhome_allotjament_2-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:39:"03_bannerhome_allotjament_2-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:39:"03_bannerhome_allotjament_2-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:39:"03_bannerhome_allotjament_2-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:39:"03_bannerhome_allotjament_2-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:39:"03_bannerhome_allotjament_2-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:39:"03_bannerhome_allotjament_2-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:39:"03_bannerhome_allotjament_2-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:37:"03_bannerhome_allotjament_2-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10142, 4863, '_wp_attached_file', '2014/02/09_bannerhome_caballo_1.jpg'); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(10143, 4863, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:950;s:6:"height";i:450;s:4:"file";s:35:"2014/02/09_bannerhome_caballo_1.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:35:"09_bannerhome_caballo_1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:35:"09_bannerhome_caballo_1-300x142.jpg";s:5:"width";i:300;s:6:"height";i:142;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:35:"09_bannerhome_caballo_1-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:35:"09_bannerhome_caballo_1-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:35:"09_bannerhome_caballo_1-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:33:"09_bannerhome_caballo_1-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:35:"09_bannerhome_caballo_1-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:35:"09_bannerhome_caballo_1-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:35:"09_bannerhome_caballo_1-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:35:"09_bannerhome_caballo_1-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:35:"09_bannerhome_caballo_1-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:35:"09_bannerhome_caballo_1-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:35:"09_bannerhome_caballo_1-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:33:"09_bannerhome_caballo_1-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11841, 5005, 'pyre_header_bg_repeat', 'repeat'), +(11840, 5005, 'pyre_header_bg_full', 'no'), +(11839, 5005, 'pyre_header_bg_color', ''), +(11809, 5005, '_wp_page_template', '100-width.php'), +(12747, 5005, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(11838, 5005, 'pyre_header_bg', ''), +(11837, 5005, 'pyre_wide_page_bg_repeat', 'repeat'), +(11836, 5005, 'pyre_wide_page_bg_full', 'no'), +(11835, 5005, 'pyre_wide_page_bg_color', ''), +(11834, 5005, 'pyre_wide_page_bg', ''), +(11833, 5005, 'pyre_page_bg_repeat', 'repeat'), +(11832, 5005, 'pyre_page_bg_full', 'no'), +(11831, 5005, 'pyre_page_bg_color', ''), +(11830, 5005, 'pyre_page_bg', ''), +(11829, 5005, 'pyre_page_bg_layout', 'default'), +(11828, 5005, 'pyre_portfolio_filters', 'yes'), +(11827, 5005, 'pyre_portfolio_sidebar_position', 'default'), +(11826, 5005, 'pyre_portfolio_full_width', 'yes'), +(11825, 5005, 'pyre_portfolio_excerpt', ''), +(11824, 5005, 'pyre_hundredp_padding', ''), +(11823, 5005, 'pyre_main_bottom_padding', ''), +(11822, 5005, 'pyre_main_top_padding', ''), +(11821, 5005, 'pyre_sidebar_position', 'default'), +(11820, 5005, 'pyre_full_width', 'no'), +(11819, 5005, 'pyre_fallback', ''), +(11818, 5005, 'pyre_elasticslider', '0'), +(11817, 5005, 'pyre_revslider', '0'), +(11816, 5005, 'pyre_flexslider', '0'), +(11815, 5005, 'pyre_wooslider', '0'), +(11814, 5005, 'pyre_slider', '0'), +(11813, 5005, 'pyre_slider_type', 'no'), +(11856, 5005, '_alp_processed', '1393514755'), +(11812, 5005, 'slide_template', ''), +(12746, 5005, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11808, 5005, '_edit_last', '1'), +(10200, 3699, '_edit_lock', '1392983670:1'), +(11842, 5005, 'pyre_page_title', 'yes'), +(10203, 4867, '_menu_item_type', 'post_type'), +(10204, 4867, '_menu_item_menu_item_parent', '0'), +(10205, 4867, '_menu_item_object_id', '4698'), +(10206, 4867, '_menu_item_object', 'page'), +(10207, 4867, '_menu_item_target', ''), +(10208, 4867, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(10209, 4867, '_menu_item_xfn', ''), +(10210, 4867, '_menu_item_url', ''), +(10212, 4867, '_menu_item_fusion_megamenu_columns', 'auto'), +(10213, 4867, '_menu_item_fusion_megamenu_widget_area', '0'), +(10214, 4867, '_menu_item_fusion_megamenu_thumbnail', ''), +(10331, 4877, '_wp_attached_file', '2014/02/Black_Jack_2012_Portrait_Hagemeister_08.jpg'), +(10332, 4877, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:3212;s:6:"height";i:4787;s:4:"file";s:51:"2014/02/Black_Jack_2012_Portrait_Hagemeister_08.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:51:"Black_Jack_2012_Portrait_Hagemeister_08-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:51:"Black_Jack_2012_Portrait_Hagemeister_08-201x300.jpg";s:5:"width";i:201;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:52:"Black_Jack_2012_Portrait_Hagemeister_08-687x1024.jpg";s:5:"width";i:687;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:51:"Black_Jack_2012_Portrait_Hagemeister_08-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:51:"Black_Jack_2012_Portrait_Hagemeister_08-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:51:"Black_Jack_2012_Portrait_Hagemeister_08-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:49:"Black_Jack_2012_Portrait_Hagemeister_08-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:51:"Black_Jack_2012_Portrait_Hagemeister_08-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:51:"Black_Jack_2012_Portrait_Hagemeister_08-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:51:"Black_Jack_2012_Portrait_Hagemeister_08-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:51:"Black_Jack_2012_Portrait_Hagemeister_08-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:51:"Black_Jack_2012_Portrait_Hagemeister_08-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:51:"Black_Jack_2012_Portrait_Hagemeister_08-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:51:"Black_Jack_2012_Portrait_Hagemeister_08-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:49:"Black_Jack_2012_Portrait_Hagemeister_08-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10333, 4878, '_wp_attached_file', '2014/02/Black_Jack_Freispringen_01.jpg'), +(10334, 4878, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:2362;s:6:"height";i:1575;s:4:"file";s:38:"2014/02/Black_Jack_Freispringen_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:38:"Black_Jack_Freispringen_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:38:"Black_Jack_Freispringen_01-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:39:"Black_Jack_Freispringen_01-1024x682.jpg";s:5:"width";i:1024;s:6:"height";i:682;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:38:"Black_Jack_Freispringen_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:38:"Black_Jack_Freispringen_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:38:"Black_Jack_Freispringen_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:36:"Black_Jack_Freispringen_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:38:"Black_Jack_Freispringen_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:38:"Black_Jack_Freispringen_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:38:"Black_Jack_Freispringen_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:38:"Black_Jack_Freispringen_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:38:"Black_Jack_Freispringen_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:38:"Black_Jack_Freispringen_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:38:"Black_Jack_Freispringen_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:36:"Black_Jack_Freispringen_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:104:"@ Guido Recki\rErler Str. 14\r46286 Dorsten\rTel. 02866-188780\rFax 02866-18878-18\remail reckiwa@t-online.de";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:21:"NRW Hauptkörung 2008";}}'), +(10335, 4879, '_wp_attached_file', '2014/02/Black_Jack_Gelaende_1a_klein_01.jpg'), +(10336, 4879, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:429;s:6:"height";i:640;s:4:"file";s:43:"2014/02/Black_Jack_Gelaende_1a_klein_01.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:43:"Black_Jack_Gelaende_1a_klein_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:43:"Black_Jack_Gelaende_1a_klein_01-201x300.jpg";s:5:"width";i:201;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:43:"Black_Jack_Gelaende_1a_klein_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:43:"Black_Jack_Gelaende_1a_klein_01-429x272.jpg";s:5:"width";i:429;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:43:"Black_Jack_Gelaende_1a_klein_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:41:"Black_Jack_Gelaende_1a_klein_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:43:"Black_Jack_Gelaende_1a_klein_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:43:"Black_Jack_Gelaende_1a_klein_01-429x272.jpg";s:5:"width";i:429;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:43:"Black_Jack_Gelaende_1a_klein_01-429x295.jpg";s:5:"width";i:429;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:43:"Black_Jack_Gelaende_1a_klein_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:43:"Black_Jack_Gelaende_1a_klein_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:43:"Black_Jack_Gelaende_1a_klein_01-429x400.jpg";s:5:"width";i:429;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:43:"Black_Jack_Gelaende_1a_klein_01-429x441.jpg";s:5:"width";i:429;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:41:"Black_Jack_Gelaende_1a_klein_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10337, 4880, '_wp_attached_file', '2014/02/Black_Jack_Riesenbeck_Hagemeister_01.jpg'), +(10338, 4880, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:3651;s:6:"height";i:2434;s:4:"file";s:48:"2014/02/Black_Jack_Riesenbeck_Hagemeister_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:48:"Black_Jack_Riesenbeck_Hagemeister_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:48:"Black_Jack_Riesenbeck_Hagemeister_01-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:49:"Black_Jack_Riesenbeck_Hagemeister_01-1024x682.jpg";s:5:"width";i:1024;s:6:"height";i:682;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:48:"Black_Jack_Riesenbeck_Hagemeister_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:48:"Black_Jack_Riesenbeck_Hagemeister_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:48:"Black_Jack_Riesenbeck_Hagemeister_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:46:"Black_Jack_Riesenbeck_Hagemeister_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:48:"Black_Jack_Riesenbeck_Hagemeister_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:48:"Black_Jack_Riesenbeck_Hagemeister_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:48:"Black_Jack_Riesenbeck_Hagemeister_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:48:"Black_Jack_Riesenbeck_Hagemeister_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:48:"Black_Jack_Riesenbeck_Hagemeister_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:48:"Black_Jack_Riesenbeck_Hagemeister_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:48:"Black_Jack_Riesenbeck_Hagemeister_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:46:"Black_Jack_Riesenbeck_Hagemeister_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10339, 4881, '_wp_attached_file', '2014/02/Black_Jack_Seite_01.jpg'), +(10340, 4881, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:576;s:6:"height";i:420;s:4:"file";s:31:"2014/02/Black_Jack_Seite_01.jpg";s:5:"sizes";a:13:{s:9:"thumbnail";a:4:{s:4:"file";s:31:"Black_Jack_Seite_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:31:"Black_Jack_Seite_01-300x218.jpg";s:5:"width";i:300;s:6:"height";i:218;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:31:"Black_Jack_Seite_01-300x420.jpg";s:5:"width";i:300;s:6:"height";i:420;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:31:"Black_Jack_Seite_01-576x272.jpg";s:5:"width";i:576;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:31:"Black_Jack_Seite_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:29:"Black_Jack_Seite_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:31:"Black_Jack_Seite_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:31:"Black_Jack_Seite_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:31:"Black_Jack_Seite_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:31:"Black_Jack_Seite_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:31:"Black_Jack_Seite_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:31:"Black_Jack_Seite_01-576x400.jpg";s:5:"width";i:576;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:29:"Black_Jack_Seite_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10341, 4882, '_wp_attached_file', '2014/02/Black_Jack_Standbild_2011_V_Hagemeister_01.jpg'), +(10342, 4882, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:4498;s:6:"height";i:3004;s:4:"file";s:54:"2014/02/Black_Jack_Standbild_2011_V_Hagemeister_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:54:"Black_Jack_Standbild_2011_V_Hagemeister_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:54:"Black_Jack_Standbild_2011_V_Hagemeister_01-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:55:"Black_Jack_Standbild_2011_V_Hagemeister_01-1024x683.jpg";s:5:"width";i:1024;s:6:"height";i:683;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:54:"Black_Jack_Standbild_2011_V_Hagemeister_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:54:"Black_Jack_Standbild_2011_V_Hagemeister_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:54:"Black_Jack_Standbild_2011_V_Hagemeister_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:52:"Black_Jack_Standbild_2011_V_Hagemeister_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:54:"Black_Jack_Standbild_2011_V_Hagemeister_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:54:"Black_Jack_Standbild_2011_V_Hagemeister_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:54:"Black_Jack_Standbild_2011_V_Hagemeister_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:54:"Black_Jack_Standbild_2011_V_Hagemeister_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:54:"Black_Jack_Standbild_2011_V_Hagemeister_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:54:"Black_Jack_Standbild_2011_V_Hagemeister_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:54:"Black_Jack_Standbild_2011_V_Hagemeister_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:52:"Black_Jack_Standbild_2011_V_Hagemeister_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10343, 4883, '_wp_attached_file', '2014/02/Black_Jack_Turnier_2011_2_Ausschnitt_01.jpg'), +(10344, 4883, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1727;s:6:"height";i:2608;s:4:"file";s:51:"2014/02/Black_Jack_Turnier_2011_2_Ausschnitt_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:51:"Black_Jack_Turnier_2011_2_Ausschnitt_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:51:"Black_Jack_Turnier_2011_2_Ausschnitt_01-198x300.jpg";s:5:"width";i:198;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:52:"Black_Jack_Turnier_2011_2_Ausschnitt_01-678x1024.jpg";s:5:"width";i:678;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:51:"Black_Jack_Turnier_2011_2_Ausschnitt_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:51:"Black_Jack_Turnier_2011_2_Ausschnitt_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:51:"Black_Jack_Turnier_2011_2_Ausschnitt_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:49:"Black_Jack_Turnier_2011_2_Ausschnitt_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:51:"Black_Jack_Turnier_2011_2_Ausschnitt_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:51:"Black_Jack_Turnier_2011_2_Ausschnitt_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:51:"Black_Jack_Turnier_2011_2_Ausschnitt_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:51:"Black_Jack_Turnier_2011_2_Ausschnitt_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:51:"Black_Jack_Turnier_2011_2_Ausschnitt_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:51:"Black_Jack_Turnier_2011_2_Ausschnitt_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:51:"Black_Jack_Turnier_2011_2_Ausschnitt_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:49:"Black_Jack_Turnier_2011_2_Ausschnitt_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10345, 4884, '_wp_attached_file', '2014/02/BlackJack_K1G9469_Recki_01.jpg'), +(10346, 4884, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:2128;s:6:"height";i:3246;s:4:"file";s:38:"2014/02/BlackJack_K1G9469_Recki_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:38:"BlackJack_K1G9469_Recki_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:38:"BlackJack_K1G9469_Recki_01-196x300.jpg";s:5:"width";i:196;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:39:"BlackJack_K1G9469_Recki_01-671x1024.jpg";s:5:"width";i:671;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:38:"BlackJack_K1G9469_Recki_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:38:"BlackJack_K1G9469_Recki_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:38:"BlackJack_K1G9469_Recki_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:36:"BlackJack_K1G9469_Recki_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:38:"BlackJack_K1G9469_Recki_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:38:"BlackJack_K1G9469_Recki_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:38:"BlackJack_K1G9469_Recki_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:38:"BlackJack_K1G9469_Recki_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:38:"BlackJack_K1G9469_Recki_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:38:"BlackJack_K1G9469_Recki_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:38:"BlackJack_K1G9469_Recki_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:36:"BlackJack_K1G9469_Recki_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10376, 4869, '_thumbnail_id', '4877'), +(10348, 4869, 'kd_featured-image-2_avada_portfolio_id', '4882'), +(10349, 4869, 'kd_featured-image-3_avada_portfolio_id', '4881'), +(10350, 4869, 'kd_featured-image-4_avada_portfolio_id', '4879'), +(10351, 4869, 'kd_featured-image-5_avada_portfolio_id', '4878'), +(11935, 5009, 'pyre_revslider', '0'), +(11934, 5009, 'pyre_flexslider', '0'), +(11931, 5009, 'pyre_slider_type', 'no'), +(10385, 4887, '_edit_last', '1'), +(10386, 4887, '_edit_lock', '1393332746:1'), +(10387, 4888, '_wp_attached_file', '2014/02/Carrico_Portrait_2012_Hagemeister_07.jpg'), +(10388, 4888, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:3160;s:6:"height";i:4692;s:4:"file";s:48:"2014/02/Carrico_Portrait_2012_Hagemeister_07.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:48:"Carrico_Portrait_2012_Hagemeister_07-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:48:"Carrico_Portrait_2012_Hagemeister_07-202x300.jpg";s:5:"width";i:202;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:49:"Carrico_Portrait_2012_Hagemeister_07-689x1024.jpg";s:5:"width";i:689;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:48:"Carrico_Portrait_2012_Hagemeister_07-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:48:"Carrico_Portrait_2012_Hagemeister_07-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:48:"Carrico_Portrait_2012_Hagemeister_07-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:46:"Carrico_Portrait_2012_Hagemeister_07-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:48:"Carrico_Portrait_2012_Hagemeister_07-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:48:"Carrico_Portrait_2012_Hagemeister_07-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:48:"Carrico_Portrait_2012_Hagemeister_07-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:48:"Carrico_Portrait_2012_Hagemeister_07-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:48:"Carrico_Portrait_2012_Hagemeister_07-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:48:"Carrico_Portrait_2012_Hagemeister_07-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:48:"Carrico_Portrait_2012_Hagemeister_07-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:46:"Carrico_Portrait_2012_Hagemeister_07-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10497, 3737, '_edit_lock', '1393263316:1'), +(11012, 4887, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(11011, 4887, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(10392, 4887, 'slide_template', ''), +(10393, 4887, 'pyre_width', 'full'), +(10394, 4887, 'pyre_portfolio_width_100', 'no'), +(10395, 4887, 'pyre_sidebar', 'no'), +(10396, 4887, 'pyre_sidebar_position', 'default'), +(10397, 4887, 'pyre_project_desc_title', 'yes'), +(10398, 4887, 'pyre_project_details', 'yes'), +(10399, 4887, 'pyre_show_first_featured_image', 'no'), +(10400, 4887, 'pyre_video', ''), +(10401, 4887, 'pyre_video_url', ''), +(10402, 4887, 'pyre_project_url', ''), +(10403, 4887, 'pyre_project_url_text', ''), +(10404, 4887, 'pyre_copy_url', ''), +(10405, 4887, 'pyre_copy_url_text', ''), +(10406, 4887, 'pyre_fimg_width', ''), +(10407, 4887, 'pyre_fimg_height', ''), +(10408, 4887, 'pyre_image_rollover_icons', 'linkzoom'), +(10409, 4887, 'pyre_link_icon_url', ''), +(10410, 4887, 'pyre_link_icon_target', 'no'), +(10411, 4887, 'pyre_related_posts', 'yes'), +(10412, 4887, 'pyre_slider_type', 'no'), +(10413, 4887, 'pyre_slider', '0'), +(10414, 4887, 'pyre_wooslider', '0'), +(10415, 4887, 'pyre_flexslider', '0'), +(10416, 4887, 'pyre_revslider', '0'), +(10417, 4887, 'pyre_elasticslider', '0'), +(10418, 4887, 'pyre_fallback', ''), +(10419, 4887, 'pyre_page_bg_layout', 'default'), +(10420, 4887, 'pyre_page_bg', ''), +(10421, 4887, 'pyre_page_bg_color', ''), +(10422, 4887, 'pyre_page_bg_full', 'no'), +(10423, 4887, 'pyre_page_bg_repeat', 'repeat'), +(10424, 4887, 'pyre_wide_page_bg', ''), +(10425, 4887, 'pyre_wide_page_bg_color', ''), +(10426, 4887, 'pyre_wide_page_bg_full', 'no'), +(10427, 4887, 'pyre_wide_page_bg_repeat', 'repeat'), +(10428, 4887, 'pyre_header_bg', ''), +(10429, 4887, 'pyre_header_bg_color', ''), +(10430, 4887, 'pyre_header_bg_full', 'no'), +(10431, 4887, 'pyre_header_bg_repeat', 'repeat'), +(10432, 4887, 'pyre_page_title', 'yes'), +(10433, 4887, 'pyre_page_title_text', 'yes'), +(10434, 4887, 'pyre_page_title_custom_text', ''), +(10435, 4887, 'pyre_page_title_custom_subheader', ''), +(10436, 4887, 'pyre_page_title_height', ''), +(10437, 4887, 'pyre_page_title_bar_bg', ''), +(10438, 4887, 'pyre_page_title_bar_bg_retina', ''), +(10439, 4887, 'pyre_page_title_bar_bg_full', 'default'), +(10440, 4887, 'pyre_page_title_bar_bg_color', ''), +(10441, 4887, 'pyre_page_title_bg_parallax', 'default'), +(10446, 4887, '_alp_processed', '1393439319'), +(10498, 3725, '_edit_lock', '1393263320:1'), +(10499, 3739, '_edit_lock', '1393263317:1'), +(10500, 3530, '_edit_lock', '1393264046:1'), +(10501, 4897, '_edit_last', '1'), +(10502, 4897, '_edit_lock', '1393433852:1'), +(10503, 4897, '_wp_page_template', 'template-caballos-cria.php'), +(11797, 4897, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:14:"Horses Sidebar";}'), +(10506, 4897, 'slide_template', ''), +(10507, 4897, 'pyre_slider_type', 'no'), +(10508, 4897, 'pyre_slider', '0'), +(10509, 4897, 'pyre_wooslider', '0'), +(10510, 4897, 'pyre_flexslider', '0'), +(10511, 4897, 'pyre_revslider', '0'), +(10512, 4897, 'pyre_elasticslider', '0'), +(10513, 4897, 'pyre_fallback', ''), +(10514, 4897, 'pyre_full_width', 'no'), +(10515, 4897, 'pyre_sidebar_position', 'default'), +(10516, 4897, 'pyre_main_top_padding', ''), +(10517, 4897, 'pyre_main_bottom_padding', ''), +(10518, 4897, 'pyre_hundredp_padding', ''), +(10519, 4897, 'pyre_portfolio_excerpt', ''), +(10520, 4897, 'pyre_portfolio_full_width', 'no'), +(10521, 4897, 'pyre_portfolio_sidebar_position', 'right'), +(10522, 4897, 'pyre_portfolio_category', 'a:1:{i:0;s:2:"39";}'), +(10523, 4897, 'pyre_portfolio_filters', 'yes'), +(10524, 4897, 'pyre_page_bg_layout', 'default'), +(10525, 4897, 'pyre_page_bg', ''), +(10526, 4897, 'pyre_page_bg_color', ''), +(10527, 4897, 'pyre_page_bg_full', 'no'), +(10528, 4897, 'pyre_page_bg_repeat', 'repeat'), +(10529, 4897, 'pyre_wide_page_bg', ''), +(10530, 4897, 'pyre_wide_page_bg_color', ''), +(10531, 4897, 'pyre_wide_page_bg_full', 'no'), +(10532, 4897, 'pyre_wide_page_bg_repeat', 'repeat'), +(10533, 4897, 'pyre_header_bg', ''), +(10534, 4897, 'pyre_header_bg_color', ''), +(10535, 4897, 'pyre_header_bg_full', 'no'), +(10536, 4897, 'pyre_header_bg_repeat', 'repeat'), +(10537, 4897, 'pyre_page_title', 'yes'), +(10538, 4897, 'pyre_page_title_text', 'yes'), +(10539, 4897, 'pyre_page_title_custom_text', ''), +(10540, 4897, 'pyre_page_title_custom_subheader', ''), +(10541, 4897, 'pyre_page_title_height', ''), +(10542, 4897, 'pyre_page_title_bar_bg', ''), +(10543, 4897, 'pyre_page_title_bar_bg_retina', ''), +(10544, 4897, 'pyre_page_title_bar_bg_color', ''), +(10545, 4897, 'pyre_page_title_bar_bg_full', 'default'), +(10546, 4897, 'pyre_page_title_bg_parallax', 'default'), +(10551, 4897, '_alp_processed', '1393431616'), +(10552, 4469, '_menu_item_fusion_megamenu_width', ''), +(10553, 4470, '_menu_item_fusion_megamenu_width', ''), +(10554, 4554, '_menu_item_fusion_megamenu_width', ''), +(10555, 4553, '_menu_item_fusion_megamenu_width', ''), +(10556, 4471, '_menu_item_fusion_megamenu_width', ''), +(10557, 4579, '_menu_item_fusion_megamenu_width', ''), +(10558, 4578, '_menu_item_fusion_megamenu_width', ''), +(10559, 4472, '_menu_item_fusion_megamenu_width', ''), +(10560, 4581, '_menu_item_fusion_megamenu_width', ''), +(10561, 4580, '_menu_item_fusion_megamenu_width', ''), +(10562, 4473, '_menu_item_fusion_megamenu_width', ''), +(10563, 4594, '_menu_item_fusion_megamenu_width', ''), +(10564, 4593, '_menu_item_fusion_megamenu_width', ''), +(10565, 4592, '_menu_item_fusion_megamenu_width', ''), +(10566, 4487, '_menu_item_fusion_megamenu_width', ''), +(10567, 4477, '_menu_item_fusion_megamenu_width', ''), +(10568, 4478, '_menu_item_fusion_megamenu_width', ''), +(10569, 4492, '_menu_item_fusion_megamenu_width', ''), +(10570, 4493, '_menu_item_fusion_megamenu_width', ''), +(10571, 4494, '_menu_item_fusion_megamenu_width', ''), +(10572, 4495, '_menu_item_fusion_megamenu_width', ''), +(10573, 4497, '_menu_item_fusion_megamenu_width', ''), +(10574, 4499, '_menu_item_fusion_megamenu_width', ''), +(10575, 4506, '_menu_item_fusion_megamenu_width', ''), +(10576, 4510, '_menu_item_fusion_megamenu_width', ''), +(10577, 4509, '_menu_item_fusion_megamenu_width', ''), +(10578, 4519, '_menu_item_fusion_megamenu_width', ''), +(10579, 4518, '_menu_item_fusion_megamenu_width', ''), +(10580, 4517, '_menu_item_fusion_megamenu_width', ''), +(10581, 4544, '_menu_item_fusion_megamenu_width', ''), +(10582, 4543, '_menu_item_fusion_megamenu_width', ''), +(10665, 4899, '_edit_last', '1'), +(11586, 4971, 'pyre_page_bg_color', ''), +(11587, 4971, 'pyre_page_bg_full', 'no'), +(11588, 4971, 'pyre_page_bg_repeat', 'repeat'), +(11353, 4964, '_menu_item_menu_item_parent', '0'), +(11354, 4964, '_menu_item_object_id', '33'), +(11355, 4964, '_menu_item_object', 'horse_breeds'), +(11569, 4971, 'pyre_video', ''), +(11570, 4971, 'pyre_full_width', 'no'), +(11571, 4971, 'pyre_sidebar_position', 'default'), +(11572, 4971, 'pyre_fimg_width', ''), +(11573, 4971, 'pyre_fimg_height', ''), +(11549, 4970, 'pyre_page_title_custom_subheader', ''), +(11550, 4970, 'pyre_page_title_height', ''), +(11551, 4970, 'pyre_page_title_bar_bg', ''), +(11552, 4970, 'pyre_page_title_bar_bg_retina', ''), +(11553, 4970, 'pyre_page_title_bar_bg_full', 'default'), +(11554, 4970, 'pyre_page_title_bar_bg_color', ''), +(11555, 4970, 'pyre_page_title_bg_parallax', 'default'), +(11339, 4962, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(11340, 4962, '_menu_item_xfn', ''), +(11321, 4960, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(11307, 4959, '_menu_item_type', 'custom'), +(11308, 4959, '_menu_item_menu_item_parent', '0'), +(11309, 4959, '_menu_item_object_id', '4959'), +(10612, 4867, '_menu_item_fusion_megamenu_width', ''), +(10613, 4467, '_menu_item_fusion_megamenu_width', ''), +(10614, 4586, '_menu_item_fusion_megamenu_width', ''), +(10615, 4568, '_menu_item_fusion_megamenu_width', ''), +(10616, 4567, '_menu_item_fusion_megamenu_width', ''), +(10617, 4566, '_menu_item_fusion_megamenu_width', ''), +(10618, 4565, '_menu_item_fusion_megamenu_width', ''), +(10619, 4576, '_menu_item_fusion_megamenu_width', ''), +(10620, 4575, '_menu_item_fusion_megamenu_width', ''), +(10621, 4574, '_menu_item_fusion_megamenu_width', ''), +(10622, 4573, '_menu_item_fusion_megamenu_width', ''), +(10623, 4587, '_menu_item_fusion_megamenu_width', ''), +(10624, 4461, '_menu_item_fusion_megamenu_width', ''), +(10625, 4552, '_menu_item_fusion_megamenu_width', ''), +(10626, 4555, '_menu_item_fusion_megamenu_width', ''), +(10627, 4551, '_menu_item_fusion_megamenu_width', ''), +(10628, 4549, '_menu_item_fusion_megamenu_width', ''), +(10629, 4550, '_menu_item_fusion_megamenu_width', ''), +(10630, 4556, '_menu_item_fusion_megamenu_width', ''), +(10631, 4557, '_menu_item_fusion_megamenu_width', ''), +(10632, 4511, '_menu_item_fusion_megamenu_width', ''), +(10633, 4577, '_menu_item_fusion_megamenu_width', ''), +(10634, 4479, '_menu_item_fusion_megamenu_width', ''), +(10635, 4512, '_menu_item_fusion_megamenu_width', ''), +(10636, 4462, '_menu_item_fusion_megamenu_width', ''), +(10637, 4466, '_menu_item_fusion_megamenu_width', ''), +(10638, 4564, '_menu_item_fusion_megamenu_width', ''), +(10639, 4563, '_menu_item_fusion_megamenu_width', ''), +(10640, 4562, '_menu_item_fusion_megamenu_width', ''), +(10641, 4561, '_menu_item_fusion_megamenu_width', ''), +(10642, 4560, '_menu_item_fusion_megamenu_width', ''), +(10643, 4559, '_menu_item_fusion_megamenu_width', ''), +(10644, 4558, '_menu_item_fusion_megamenu_width', ''), +(10645, 4532, '_menu_item_fusion_megamenu_width', ''), +(10646, 4533, '_menu_item_fusion_megamenu_width', ''), +(10647, 4539, '_menu_item_fusion_megamenu_width', ''), +(10648, 4540, '_menu_item_fusion_megamenu_width', ''), +(10649, 4541, '_menu_item_fusion_megamenu_width', ''), +(10650, 4531, '_menu_item_fusion_megamenu_width', ''), +(10651, 4530, '_menu_item_fusion_megamenu_width', ''), +(10652, 4529, '_menu_item_fusion_megamenu_width', ''), +(10653, 4528, '_menu_item_fusion_megamenu_width', ''), +(10654, 4527, '_menu_item_fusion_megamenu_width', ''), +(10655, 4526, '_menu_item_fusion_megamenu_width', ''), +(10656, 4525, '_menu_item_fusion_megamenu_width', ''), +(10657, 4542, '_menu_item_fusion_megamenu_width', ''), +(10658, 4524, '_menu_item_fusion_megamenu_width', ''), +(10659, 4523, '_menu_item_fusion_megamenu_width', ''), +(10660, 4522, '_menu_item_fusion_megamenu_width', ''), +(10661, 4538, '_menu_item_fusion_megamenu_width', ''), +(10662, 4537, '_menu_item_fusion_megamenu_width', ''), +(10663, 4536, '_menu_item_fusion_megamenu_width', ''), +(10664, 4535, '_menu_item_fusion_megamenu_width', ''), +(10666, 4899, '_edit_lock', '1393433890:1'), +(10667, 4899, '_wp_page_template', 'template-caballos-competicion.php'), +(11513, 4899, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:14:"Horses Sidebar";}'), +(10670, 4899, 'slide_template', ''), +(10671, 4899, 'pyre_slider_type', 'no'), +(10672, 4899, 'pyre_slider', '0'), +(10673, 4899, 'pyre_wooslider', '0'), +(10674, 4899, 'pyre_flexslider', '0'), +(10675, 4899, 'pyre_revslider', '0'), +(10676, 4899, 'pyre_elasticslider', '0'), +(10677, 4899, 'pyre_fallback', ''), +(10678, 4899, 'pyre_full_width', 'no'), +(10679, 4899, 'pyre_sidebar_position', 'default'), +(10680, 4899, 'pyre_main_top_padding', ''), +(10681, 4899, 'pyre_main_bottom_padding', ''), +(10682, 4899, 'pyre_hundredp_padding', ''), +(10683, 4899, 'pyre_portfolio_excerpt', ''), +(10684, 4899, 'pyre_portfolio_full_width', 'no'), +(10685, 4899, 'pyre_portfolio_sidebar_position', 'default'), +(10686, 4899, 'pyre_portfolio_filters', 'yes'), +(10687, 4899, 'pyre_page_bg_layout', 'default'), +(10688, 4899, 'pyre_page_bg', ''), +(10689, 4899, 'pyre_page_bg_color', ''), +(10690, 4899, 'pyre_page_bg_full', 'no'), +(10691, 4899, 'pyre_page_bg_repeat', 'repeat'), +(10692, 4899, 'pyre_wide_page_bg', ''), +(10693, 4899, 'pyre_wide_page_bg_color', ''), +(10694, 4899, 'pyre_wide_page_bg_full', 'no'), +(10695, 4899, 'pyre_wide_page_bg_repeat', 'repeat'), +(10696, 4899, 'pyre_header_bg', ''), +(10697, 4899, 'pyre_header_bg_color', ''), +(10698, 4899, 'pyre_header_bg_full', 'no'), +(10699, 4899, 'pyre_header_bg_repeat', 'repeat'), +(10700, 4899, 'pyre_page_title', 'yes'), +(10701, 4899, 'pyre_page_title_text', 'yes'), +(10702, 4899, 'pyre_page_title_custom_text', ''), +(10703, 4899, 'pyre_page_title_custom_subheader', ''), +(10704, 4899, 'pyre_page_title_height', ''), +(10705, 4899, 'pyre_page_title_bar_bg', ''), +(10706, 4899, 'pyre_page_title_bar_bg_retina', ''), +(10707, 4899, 'pyre_page_title_bar_bg_color', ''), +(10708, 4899, 'pyre_page_title_bar_bg_full', 'default'), +(10709, 4899, 'pyre_page_title_bg_parallax', 'default'), +(10714, 4899, '_alp_processed', '1393411132'), +(10717, 4899, 'pyre_portfolio_category', 'a:1:{i:0;s:2:"38";}'), +(10720, 198, '_edit_last', '1'), +(10721, 198, 'slide_template', ''), +(10722, 198, '_alp_processed', '1393327475'), +(10723, 191, '_edit_last', '1'), +(10724, 191, 'slide_template', ''), +(10725, 191, '_alp_processed', '1393327475'), +(10726, 191, '_edit_lock', '1393320536:1'), +(10727, 192, '_edit_last', '1'), +(10728, 192, 'slide_template', ''), +(10729, 192, '_alp_processed', '1393327476'), +(10730, 192, '_edit_lock', '1393320546:1'), +(10731, 193, '_edit_last', '1'), +(10732, 193, 'slide_template', ''), +(10733, 193, '_alp_processed', '1393327476'), +(10734, 193, '_edit_lock', '1393320556:1'), +(10735, 196, '_edit_last', '1'), +(10736, 196, 'slide_template', ''), +(10737, 196, '_alp_processed', '1393327476'), +(10738, 196, '_edit_lock', '1393320563:1'), +(10747, 4877, '_edit_lock', '1393322161:1'), +(13158, 5085, '_menu_item_object_id', '56'), +(13159, 5085, '_menu_item_object', 'horse_breeds'), +(13160, 5085, '_menu_item_target', ''), +(13161, 5085, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(13162, 5085, '_menu_item_xfn', ''), +(12982, 5077, 'kd_featured-image-2_drg_horse_id', '4878'), +(12983, 5077, 'kd_featured-image-3_drg_horse_id', '4881'), +(12984, 5077, 'kd_featured-image-4_drg_horse_id', '4884'), +(12985, 5077, 'kd_featured-image-5_drg_horse_id', '4883'), +(12986, 5078, '_alp_processed', '1393432466'), +(12999, 5078, 'pyre_slider_type', 'no'), +(13157, 5085, '_menu_item_menu_item_parent', '0'), +(12718, 5068, '_wp_attached_file', '2014/02/caballo-yegua-con-su-cria-o-potro-bebe-equinos.jpg'), +(12980, 5077, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12981, 5077, '_thumbnail_id', '4877'), +(12987, 5078, '_icl_lang_duplicate_of', '4953'), +(12988, 5078, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12989, 5078, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12991, 5078, 'pyre_video', ''), +(12992, 5078, 'pyre_full_width', 'no'), +(12993, 5078, 'pyre_sidebar_position', 'default'), +(12994, 5078, 'pyre_fimg_width', ''), +(12995, 5078, 'pyre_fimg_height', ''), +(12996, 5078, 'pyre_image_rollover_icons', 'linkzoom'), +(12997, 5078, 'pyre_link_icon_url', ''), +(12998, 5078, 'pyre_related_posts', 'yes'), +(13052, 5079, 'pyre_page_bg_layout', 'default'), +(13071, 5079, 'pyre_page_title_bar_bg_retina', ''), +(13072, 5079, 'pyre_page_title_bar_bg_full', 'default'), +(13155, 5084, '_menu_item_url', ''), +(13156, 5085, '_menu_item_type', 'taxonomy'), +(10779, 4907, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1000;s:6:"height";i:783;s:4:"file";s:43:"2014/02/galante_vibrante_alcame_DSC9490.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9490-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9490-300x234.jpg";s:5:"width";i:300;s:6:"height";i:234;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9490-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9490-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9490-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:41:"galante_vibrante_alcame_DSC9490-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9490-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9490-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9490-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9490-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9490-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9490-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9490-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:41:"galante_vibrante_alcame_DSC9490-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10778, 4907, '_wp_attached_file', '2014/02/galante_vibrante_alcame_DSC9490.jpg'), +(10777, 4906, '_edit_lock', '1393346419:1'), +(10776, 4906, '_edit_last', '1'), +(10781, 4906, '_thumbnail_id', '4907'), +(10782, 4908, '_wp_attached_file', '2014/02/GALANTE_39_VIBRANTE_ALCAME_DSC9191_.jpg'); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(10783, 4908, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1000;s:6:"height";i:664;s:4:"file";s:47:"2014/02/GALANTE_39_VIBRANTE_ALCAME_DSC9191_.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:47:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:47:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-300x199.jpg";s:5:"width";i:300;s:6:"height";i:199;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:47:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:47:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:47:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:45:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:47:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:47:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:47:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:47:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:47:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:47:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:47:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:45:"GALANTE_39_VIBRANTE_ALCAME_DSC9191_-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10784, 4906, 'kd_featured-image-2_avada_portfolio_id', '4908'), +(10785, 4909, '_wp_attached_file', '2014/02/galante_vibrante_alcame_DSC9402.jpg'), +(10786, 4909, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1000;s:6:"height";i:761;s:4:"file";s:43:"2014/02/galante_vibrante_alcame_DSC9402.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9402-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9402-300x228.jpg";s:5:"width";i:300;s:6:"height";i:228;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9402-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9402-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9402-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:41:"galante_vibrante_alcame_DSC9402-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9402-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9402-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9402-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9402-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9402-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9402-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:43:"galante_vibrante_alcame_DSC9402-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:41:"galante_vibrante_alcame_DSC9402-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10787, 4910, '_wp_attached_file', '2014/02/YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959.jpg'), +(10788, 4910, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1000;s:6:"height";i:622;s:4:"file";s:65:"2014/02/YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:65:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:65:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-300x186.jpg";s:5:"width";i:300;s:6:"height";i:186;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:65:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:65:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:65:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:63:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:65:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:65:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:65:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:65:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:65:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:65:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:65:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:63:"YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10789, 4906, 'kd_featured-image-3_avada_portfolio_id', '4909'), +(10790, 4906, 'kd_featured-image-4_avada_portfolio_id', '4910'), +(10998, 4906, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(10997, 4906, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(10793, 4906, 'slide_template', ''), +(10794, 4906, 'pyre_width', 'full'), +(10795, 4906, 'pyre_portfolio_width_100', 'no'), +(10796, 4906, 'pyre_sidebar', 'no'), +(10797, 4906, 'pyre_sidebar_position', 'default'), +(10798, 4906, 'pyre_project_desc_title', 'yes'), +(10799, 4906, 'pyre_project_details', 'yes'), +(10800, 4906, 'pyre_show_first_featured_image', 'no'), +(10801, 4906, 'pyre_video', ''), +(11930, 5009, 'slide_template', ''), +(10802, 4906, 'pyre_video_url', ''), +(11027, 213, '_alp_processed', '1393432984'), +(10803, 4906, 'pyre_project_url', ''), +(10804, 4906, 'pyre_project_url_text', ''), +(10805, 4906, 'pyre_copy_url', ''), +(10806, 4906, 'pyre_copy_url_text', ''), +(10807, 4906, 'pyre_fimg_width', ''), +(10808, 4906, 'pyre_fimg_height', ''), +(10809, 4906, 'pyre_image_rollover_icons', 'no'), +(10810, 4906, 'pyre_link_icon_url', ''), +(10811, 4906, 'pyre_link_icon_target', 'no'), +(10812, 4906, 'pyre_related_posts', 'yes'), +(10813, 4906, 'pyre_slider_type', 'no'), +(10814, 4906, 'pyre_slider', '0'), +(10815, 4906, 'pyre_wooslider', '0'), +(10816, 4906, 'pyre_flexslider', '0'), +(10817, 4906, 'pyre_revslider', '0'), +(10818, 4906, 'pyre_elasticslider', '0'), +(10819, 4906, 'pyre_fallback', ''), +(10820, 4906, 'pyre_page_bg_layout', 'default'), +(10821, 4906, 'pyre_page_bg', ''), +(10822, 4906, 'pyre_page_bg_color', ''), +(10823, 4906, 'pyre_page_bg_full', 'no'), +(10824, 4906, 'pyre_page_bg_repeat', 'repeat'), +(10825, 4906, 'pyre_wide_page_bg', ''), +(10826, 4906, 'pyre_wide_page_bg_color', ''), +(10827, 4906, 'pyre_wide_page_bg_full', 'no'), +(10828, 4906, 'pyre_wide_page_bg_repeat', 'repeat'), +(10829, 4906, 'pyre_header_bg', ''), +(10830, 4906, 'pyre_header_bg_color', ''), +(10831, 4906, 'pyre_header_bg_full', 'no'), +(10832, 4906, 'pyre_header_bg_repeat', 'repeat'), +(10833, 4906, 'pyre_page_title', 'yes'), +(10834, 4906, 'pyre_page_title_text', 'yes'), +(10835, 4906, 'pyre_page_title_custom_text', ''), +(10836, 4906, 'pyre_page_title_custom_subheader', ''), +(10837, 4906, 'pyre_page_title_height', ''), +(10838, 4906, 'pyre_page_title_bar_bg', ''), +(10839, 4906, 'pyre_page_title_bar_bg_retina', ''), +(10840, 4906, 'pyre_page_title_bar_bg_full', 'default'), +(10841, 4906, 'pyre_page_title_bar_bg_color', ''), +(10842, 4906, 'pyre_page_title_bg_parallax', 'default'), +(10847, 4906, '_alp_processed', '1393439319'), +(10880, 4917, '_edit_last', '1'), +(10881, 4917, '_edit_lock', '1393410820:1'), +(10988, 4917, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(10987, 4917, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(10884, 4917, 'slide_template', ''), +(10885, 4917, 'pyre_width', 'full'), +(10886, 4917, 'pyre_portfolio_width_100', 'no'), +(10887, 4917, 'pyre_sidebar', 'no'), +(10888, 4917, 'pyre_sidebar_position', 'default'), +(10889, 4917, 'pyre_project_desc_title', 'yes'), +(10890, 4917, 'pyre_project_details', 'yes'), +(10891, 4917, 'pyre_show_first_featured_image', 'no'), +(10892, 4917, 'pyre_video', ''), +(11030, 215, '_alp_processed', '1393432984'), +(10893, 4917, 'pyre_video_url', ''), +(11933, 5009, 'pyre_wooslider', '0'), +(10894, 4917, 'pyre_project_url', ''), +(10895, 4917, 'pyre_project_url_text', ''), +(10896, 4917, 'pyre_copy_url', ''), +(10897, 4917, 'pyre_copy_url_text', ''), +(10898, 4917, 'pyre_fimg_width', ''), +(10899, 4917, 'pyre_fimg_height', ''), +(10900, 4917, 'pyre_image_rollover_icons', 'linkzoom'), +(10901, 4917, 'pyre_link_icon_url', ''), +(10902, 4917, 'pyre_link_icon_target', 'no'), +(10903, 4917, 'pyre_related_posts', 'yes'), +(10904, 4917, 'pyre_slider_type', 'no'), +(10905, 4917, 'pyre_slider', '0'), +(10906, 4917, 'pyre_wooslider', '0'), +(10907, 4917, 'pyre_flexslider', '0'), +(10908, 4917, 'pyre_revslider', '0'), +(10909, 4917, 'pyre_elasticslider', '0'), +(10910, 4917, 'pyre_fallback', ''), +(10911, 4917, 'pyre_page_bg_layout', 'default'), +(10912, 4917, 'pyre_page_bg', ''), +(10913, 4917, 'pyre_page_bg_color', ''), +(10914, 4917, 'pyre_page_bg_full', 'no'), +(10915, 4917, 'pyre_page_bg_repeat', 'repeat'), +(10916, 4917, 'pyre_wide_page_bg', ''), +(10917, 4917, 'pyre_wide_page_bg_color', ''), +(10918, 4917, 'pyre_wide_page_bg_full', 'no'), +(10919, 4917, 'pyre_wide_page_bg_repeat', 'repeat'), +(10920, 4917, 'pyre_header_bg', ''), +(10921, 4917, 'pyre_header_bg_color', ''), +(10922, 4917, 'pyre_header_bg_full', 'no'), +(10923, 4917, 'pyre_header_bg_repeat', 'repeat'), +(10924, 4917, 'pyre_page_title', 'yes'), +(10925, 4917, 'pyre_page_title_text', 'yes'), +(10926, 4917, 'pyre_page_title_custom_text', ''), +(10927, 4917, 'pyre_page_title_custom_subheader', ''), +(10928, 4917, 'pyre_page_title_height', ''), +(10929, 4917, 'pyre_page_title_bar_bg', ''), +(10930, 4917, 'pyre_page_title_bar_bg_retina', ''), +(10931, 4917, 'pyre_page_title_bar_bg_full', 'default'), +(10932, 4917, 'pyre_page_title_bar_bg_color', ''), +(10933, 4917, 'pyre_page_title_bg_parallax', 'default'), +(10938, 4917, '_alp_processed', '1393439319'), +(10939, 4919, '_wp_attached_file', '2014/02/hercules_DSC9326.jpg'), +(10940, 4919, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1000;s:6:"height";i:841;s:4:"file";s:28:"2014/02/hercules_DSC9326.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:28:"hercules_DSC9326-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:28:"hercules_DSC9326-300x252.jpg";s:5:"width";i:300;s:6:"height";i:252;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:28:"hercules_DSC9326-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:28:"hercules_DSC9326-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:28:"hercules_DSC9326-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:26:"hercules_DSC9326-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:28:"hercules_DSC9326-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:28:"hercules_DSC9326-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:28:"hercules_DSC9326-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:28:"hercules_DSC9326-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:28:"hercules_DSC9326-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:28:"hercules_DSC9326-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:28:"hercules_DSC9326-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:26:"hercules_DSC9326-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10941, 4917, '_thumbnail_id', '4919'), +(10942, 4920, '_wp_attached_file', '2014/02/HERCULES_72_DSC9793_.jpg'), +(10943, 4920, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:866;s:6:"height";i:611;s:4:"file";s:32:"2014/02/HERCULES_72_DSC9793_.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9793_-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9793_-300x211.jpg";s:5:"width";i:300;s:6:"height";i:211;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9793_-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9793_-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9793_-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:30:"HERCULES_72_DSC9793_-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9793_-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9793_-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9793_-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9793_-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9793_-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9793_-866x400.jpg";s:5:"width";i:866;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9793_-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:30:"HERCULES_72_DSC9793_-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10944, 4921, '_wp_attached_file', '2014/02/HERCULES_72_DSC9822_.jpg'), +(10945, 4921, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:942;s:6:"height";i:584;s:4:"file";s:32:"2014/02/HERCULES_72_DSC9822_.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9822_-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9822_-300x185.jpg";s:5:"width";i:300;s:6:"height";i:185;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9822_-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9822_-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9822_-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:30:"HERCULES_72_DSC9822_-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9822_-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9822_-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9822_-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9822_-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9822_-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9822_-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9822_-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:30:"HERCULES_72_DSC9822_-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10946, 4922, '_wp_attached_file', '2014/02/HERCULES_72_DSC9826_.jpg'), +(10947, 4917, 'kd_featured-image-2_avada_portfolio_id', '4920'), +(10948, 4922, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:582;s:6:"height";i:543;s:4:"file";s:32:"2014/02/HERCULES_72_DSC9826_.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9826_-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9826_-300x279.jpg";s:5:"width";i:300;s:6:"height";i:279;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9826_-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9826_-582x272.jpg";s:5:"width";i:582;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9826_-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:30:"HERCULES_72_DSC9826_-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9826_-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9826_-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9826_-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9826_-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9826_-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9826_-582x400.jpg";s:5:"width";i:582;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:32:"HERCULES_72_DSC9826_-582x441.jpg";s:5:"width";i:582;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:30:"HERCULES_72_DSC9826_-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10949, 4923, '_wp_attached_file', '2014/02/hercules_DSC9303.jpg'), +(10950, 4917, 'kd_featured-image-3_avada_portfolio_id', '4921'), +(10951, 4923, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1000;s:6:"height";i:659;s:4:"file";s:28:"2014/02/hercules_DSC9303.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:28:"hercules_DSC9303-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:28:"hercules_DSC9303-300x197.jpg";s:5:"width";i:300;s:6:"height";i:197;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:28:"hercules_DSC9303-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:28:"hercules_DSC9303-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:28:"hercules_DSC9303-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:26:"hercules_DSC9303-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:28:"hercules_DSC9303-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:28:"hercules_DSC9303-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:28:"hercules_DSC9303-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:28:"hercules_DSC9303-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:28:"hercules_DSC9303-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:28:"hercules_DSC9303-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:28:"hercules_DSC9303-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:26:"hercules_DSC9303-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10952, 4924, '_wp_attached_file', '2014/02/hercules_DSC9350.jpg'), +(10953, 4917, 'kd_featured-image-4_avada_portfolio_id', '4922'), +(10954, 4924, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1000;s:6:"height";i:672;s:4:"file";s:28:"2014/02/hercules_DSC9350.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:28:"hercules_DSC9350-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:28:"hercules_DSC9350-300x201.jpg";s:5:"width";i:300;s:6:"height";i:201;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:28:"hercules_DSC9350-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:28:"hercules_DSC9350-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:28:"hercules_DSC9350-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:26:"hercules_DSC9350-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:28:"hercules_DSC9350-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:28:"hercules_DSC9350-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:28:"hercules_DSC9350-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:28:"hercules_DSC9350-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:28:"hercules_DSC9350-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:28:"hercules_DSC9350-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:28:"hercules_DSC9350-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:26:"hercules_DSC9350-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10955, 4925, '_wp_attached_file', '2014/02/YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466.jpg'), +(10956, 4925, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1000;s:6:"height";i:702;s:4:"file";s:53:"2014/02/YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:53:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:53:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-300x210.jpg";s:5:"width";i:300;s:6:"height";i:210;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:53:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:53:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:53:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:51:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:53:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:53:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:53:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:53:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:53:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:53:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:53:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:51:"YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(10957, 4917, 'kd_featured-image-5_avada_portfolio_id', '4924'), +(10962, 198, '_wp_trash_meta_status', 'publish'), +(10963, 198, '_wp_trash_meta_time', '1393327475'), +(10964, 191, '_wp_trash_meta_status', 'publish'), +(10965, 191, '_wp_trash_meta_time', '1393327475'), +(10966, 195, '_wp_trash_meta_status', 'publish'), +(10967, 195, '_wp_trash_meta_time', '1393327475'), +(10968, 195, '_alp_processed', '1393327476'), +(10969, 196, '_wp_trash_meta_status', 'publish'), +(10970, 196, '_wp_trash_meta_time', '1393327476'), +(10971, 193, '_wp_trash_meta_status', 'publish'), +(10972, 193, '_wp_trash_meta_time', '1393327476'), +(10973, 192, '_wp_trash_meta_status', 'publish'), +(10974, 192, '_wp_trash_meta_time', '1393327476'), +(11466, 4899, 'drg_horse_category', 'a:1:{i:0;s:2:"38";}'), +(11932, 5009, 'pyre_slider', '0'), +(11033, 202, '_alp_processed', '1393432984'), +(12013, 5009, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:12:"Blog Sidebar";}'), +(11036, 211, '_alp_processed', '1393432984'), +(11926, 5009, '_edit_lock', '1393434006:1'), +(11927, 5009, '_wp_page_template', 'default'), +(11039, 209, '_alp_processed', '1393432984'), +(11925, 5009, '_edit_last', '1'), +(11042, 207, '_alp_processed', '1393432984'), +(11051, 4948, '_edit_last', '1'), +(11052, 4948, '_edit_lock', '1393432504:1'), +(11107, 4948, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(11055, 4948, 'slide_template', ''), +(11056, 4948, 'pyre_video', ''), +(11057, 4948, 'pyre_full_width', 'no'), +(11058, 4948, 'pyre_sidebar_position', 'default'), +(11059, 4948, 'pyre_fimg_width', ''), +(11060, 4948, 'pyre_fimg_height', ''), +(11061, 4948, 'pyre_image_rollover_icons', 'linkzoom'), +(11062, 4948, 'pyre_link_icon_url', ''), +(11063, 4948, 'pyre_related_posts', 'yes'), +(11064, 4948, 'pyre_slider_type', 'no'), +(11065, 4948, 'pyre_slider', '0'), +(11066, 4948, 'pyre_wooslider', '0'), +(11067, 4948, 'pyre_flexslider', '0'), +(11068, 4948, 'pyre_revslider', '0'), +(11069, 4948, 'pyre_elasticslider', '0'), +(11070, 4948, 'pyre_fallback', ''), +(11071, 4948, 'pyre_page_bg_layout', 'default'), +(11072, 4948, 'pyre_page_bg', ''), +(11073, 4948, 'pyre_page_bg_color', ''), +(11074, 4948, 'pyre_page_bg_full', 'no'), +(11075, 4948, 'pyre_page_bg_repeat', 'repeat'), +(11076, 4948, 'pyre_wide_page_bg', ''), +(11077, 4948, 'pyre_wide_page_bg_color', ''), +(11078, 4948, 'pyre_wide_page_bg_full', 'no'), +(11079, 4948, 'pyre_wide_page_bg_repeat', 'repeat'), +(11080, 4948, 'pyre_header_bg', ''), +(11081, 4948, 'pyre_header_bg_color', ''), +(11082, 4948, 'pyre_header_bg_full', 'no'), +(11083, 4948, 'pyre_header_bg_repeat', 'repeat'), +(11084, 4948, 'pyre_page_title', 'yes'), +(11085, 4948, 'pyre_page_title_text', 'yes'), +(11086, 4948, 'pyre_page_title_custom_text', ''), +(11087, 4948, 'pyre_page_title_custom_subheader', ''), +(11088, 4948, 'pyre_page_title_height', ''), +(11089, 4948, 'pyre_page_title_bar_bg', ''), +(11090, 4948, 'pyre_page_title_bar_bg_retina', ''), +(11091, 4948, 'pyre_page_title_bar_bg_full', 'default'), +(11092, 4948, 'pyre_page_title_bar_bg_color', ''), +(11093, 4948, 'pyre_page_title_bg_parallax', 'default'), +(11106, 4948, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11098, 4948, '_alp_processed', '1393432504'), +(11099, 4948, '_thumbnail_id', '4919'), +(11100, 4948, 'kd_featured-image-2_drg_horse_id', '4924'), +(11101, 4948, 'kd_featured-image-3_drg_horse_id', '4923'), +(11102, 4948, 'kd_featured-image-4_drg_horse_id', '4925'), +(11103, 4948, 'kd_featured-image-5_drg_horse_id', '4920'), +(11108, 4951, '_edit_last', '1'), +(11109, 4951, '_edit_lock', '1393432497:1'), +(11110, 4951, '_thumbnail_id', '4908'), +(11111, 4951, 'kd_featured-image-2_drg_horse_id', '4907'), +(11112, 4951, 'kd_featured-image-3_drg_horse_id', '4910'), +(11113, 4951, 'kd_featured-image-4_drg_horse_id', '4909'), +(11158, 4951, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(11116, 4951, 'slide_template', ''), +(11117, 4951, 'pyre_video', ''), +(11118, 4951, 'pyre_full_width', 'no'), +(11119, 4951, 'pyre_sidebar_position', 'default'), +(11120, 4951, 'pyre_fimg_width', ''), +(11121, 4951, 'pyre_fimg_height', ''), +(11122, 4951, 'pyre_image_rollover_icons', 'linkzoom'), +(11123, 4951, 'pyre_link_icon_url', ''), +(11124, 4951, 'pyre_related_posts', 'yes'), +(11125, 4951, 'pyre_slider_type', 'no'), +(11126, 4951, 'pyre_slider', '0'), +(11127, 4951, 'pyre_wooslider', '0'), +(11128, 4951, 'pyre_flexslider', '0'), +(11129, 4951, 'pyre_revslider', '0'), +(11130, 4951, 'pyre_elasticslider', '0'), +(11131, 4951, 'pyre_fallback', ''), +(11132, 4951, 'pyre_page_bg_layout', 'default'), +(11133, 4951, 'pyre_page_bg', ''), +(11134, 4951, 'pyre_page_bg_color', ''), +(11135, 4951, 'pyre_page_bg_full', 'no'), +(11136, 4951, 'pyre_page_bg_repeat', 'repeat'), +(11137, 4951, 'pyre_wide_page_bg', ''), +(11138, 4951, 'pyre_wide_page_bg_color', ''), +(11139, 4951, 'pyre_wide_page_bg_full', 'no'), +(11140, 4951, 'pyre_wide_page_bg_repeat', 'repeat'), +(11141, 4951, 'pyre_header_bg', ''), +(11142, 4951, 'pyre_header_bg_color', ''), +(11143, 4951, 'pyre_header_bg_full', 'no'), +(11144, 4951, 'pyre_header_bg_repeat', 'repeat'), +(11145, 4951, 'pyre_page_title', 'yes'), +(11146, 4951, 'pyre_page_title_text', 'yes'), +(11147, 4951, 'pyre_page_title_custom_text', ''), +(11148, 4951, 'pyre_page_title_custom_subheader', ''), +(11149, 4951, 'pyre_page_title_height', ''), +(11150, 4951, 'pyre_page_title_bar_bg', ''), +(11151, 4951, 'pyre_page_title_bar_bg_retina', ''), +(11152, 4951, 'pyre_page_title_bar_bg_full', 'default'), +(11153, 4951, 'pyre_page_title_bar_bg_color', ''), +(11154, 4951, 'pyre_page_title_bg_parallax', 'default'), +(11157, 4951, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11159, 4951, '_alp_processed', '1393432497'), +(11160, 4953, '_edit_last', '1'), +(11161, 4953, '_edit_lock', '1393432370:1'), +(11807, 4953, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(11806, 4953, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11164, 4953, 'slide_template', ''), +(11165, 4953, 'pyre_video', ''), +(11166, 4953, 'pyre_full_width', 'no'), +(11167, 4953, 'pyre_sidebar_position', 'default'), +(11168, 4953, 'pyre_fimg_width', ''), +(11169, 4953, 'pyre_fimg_height', ''), +(11170, 4953, 'pyre_image_rollover_icons', 'linkzoom'), +(11171, 4953, 'pyre_link_icon_url', ''), +(11172, 4953, 'pyre_related_posts', 'yes'), +(11173, 4953, 'pyre_slider_type', 'no'), +(11174, 4953, 'pyre_slider', '0'), +(11175, 4953, 'pyre_wooslider', '0'), +(11176, 4953, 'pyre_flexslider', '0'), +(11177, 4953, 'pyre_revslider', '0'), +(11178, 4953, 'pyre_elasticslider', '0'), +(11179, 4953, 'pyre_fallback', ''), +(11180, 4953, 'pyre_page_bg_layout', 'default'), +(11181, 4953, 'pyre_page_bg', ''), +(11182, 4953, 'pyre_page_bg_color', ''), +(11183, 4953, 'pyre_page_bg_full', 'no'), +(11184, 4953, 'pyre_page_bg_repeat', 'repeat'), +(11185, 4953, 'pyre_wide_page_bg', ''), +(11186, 4953, 'pyre_wide_page_bg_color', ''), +(11187, 4953, 'pyre_wide_page_bg_full', 'no'), +(11188, 4953, 'pyre_wide_page_bg_repeat', 'repeat'), +(11189, 4953, 'pyre_header_bg', ''), +(11190, 4953, 'pyre_header_bg_color', ''), +(11191, 4953, 'pyre_header_bg_full', 'no'), +(11192, 4953, 'pyre_header_bg_repeat', 'repeat'), +(11193, 4953, 'pyre_page_title', 'yes'), +(11194, 4953, 'pyre_page_title_text', 'yes'), +(11195, 4953, 'pyre_page_title_custom_text', ''), +(11196, 4953, 'pyre_page_title_custom_subheader', ''), +(11197, 4953, 'pyre_page_title_height', ''), +(11198, 4953, 'pyre_page_title_bar_bg', ''), +(11199, 4953, 'pyre_page_title_bar_bg_retina', ''), +(11200, 4953, 'pyre_page_title_bar_bg_full', 'default'), +(11201, 4953, 'pyre_page_title_bar_bg_color', ''), +(11202, 4953, 'pyre_page_title_bg_parallax', 'default'), +(11207, 4953, '_alp_processed', '1393432466'), +(11216, 4955, '_edit_last', '1'), +(11217, 4955, '_edit_lock', '1393412066:1'), +(11276, 4955, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(11220, 4955, 'slide_template', ''), +(11221, 4955, 'pyre_video', ''), +(11222, 4955, 'pyre_full_width', 'no'), +(11223, 4955, 'pyre_sidebar_position', 'default'), +(11224, 4955, 'pyre_fimg_width', ''), +(11225, 4955, 'pyre_fimg_height', ''), +(11226, 4955, 'pyre_image_rollover_icons', 'linkzoom'), +(11227, 4955, 'pyre_link_icon_url', ''), +(11228, 4955, 'pyre_related_posts', 'yes'), +(11229, 4955, 'pyre_slider_type', 'no'), +(11230, 4955, 'pyre_slider', '0'), +(11231, 4955, 'pyre_wooslider', '0'), +(11232, 4955, 'pyre_flexslider', '0'), +(11233, 4955, 'pyre_revslider', '0'), +(11234, 4955, 'pyre_elasticslider', '0'), +(11235, 4955, 'pyre_fallback', ''), +(11236, 4955, 'pyre_page_bg_layout', 'default'), +(11237, 4955, 'pyre_page_bg', ''), +(11238, 4955, 'pyre_page_bg_color', ''), +(11239, 4955, 'pyre_page_bg_full', 'no'), +(11240, 4955, 'pyre_page_bg_repeat', 'repeat'), +(11241, 4955, 'pyre_wide_page_bg', ''), +(11242, 4955, 'pyre_wide_page_bg_color', ''), +(11243, 4955, 'pyre_wide_page_bg_full', 'no'), +(11244, 4955, 'pyre_wide_page_bg_repeat', 'repeat'), +(11245, 4955, 'pyre_header_bg', ''), +(11246, 4955, 'pyre_header_bg_color', ''), +(11247, 4955, 'pyre_header_bg_full', 'no'), +(11248, 4955, 'pyre_header_bg_repeat', 'repeat'), +(11249, 4955, 'pyre_page_title', 'yes'), +(11250, 4955, 'pyre_page_title_text', 'yes'), +(11251, 4955, 'pyre_page_title_custom_text', ''), +(11252, 4955, 'pyre_page_title_custom_subheader', ''), +(11253, 4955, 'pyre_page_title_height', ''), +(11254, 4955, 'pyre_page_title_bar_bg', ''), +(11255, 4955, 'pyre_page_title_bar_bg_retina', ''), +(11256, 4955, 'pyre_page_title_bar_bg_full', 'default'), +(11257, 4955, 'pyre_page_title_bar_bg_color', ''), +(11258, 4955, 'pyre_page_title_bg_parallax', 'default'), +(11275, 4955, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11263, 4955, '_alp_processed', '1393412066'), +(11268, 4955, '_thumbnail_id', '4877'), +(11269, 4955, 'kd_featured-image-2_drg_horse_id', '4878'), +(11270, 4955, 'kd_featured-image-3_drg_horse_id', '4881'), +(11271, 4955, 'kd_featured-image-4_drg_horse_id', '4884'), +(11272, 4955, 'kd_featured-image-5_drg_horse_id', '4883'), +(11277, 4957, '_menu_item_type', 'taxonomy'), +(11278, 4957, '_menu_item_menu_item_parent', '0'), +(11279, 4957, '_menu_item_object_id', '39'), +(11280, 4957, '_menu_item_object', 'horse_categories'), +(11281, 4957, '_menu_item_target', ''), +(11282, 4957, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(11283, 4957, '_menu_item_xfn', ''), +(11284, 4957, '_menu_item_url', ''), +(11295, 4957, '_menu_item_fusion_megamenu_width', ''), +(11286, 4958, '_menu_item_type', 'taxonomy'), +(11287, 4958, '_menu_item_menu_item_parent', '0'), +(11288, 4958, '_menu_item_object_id', '38'), +(11289, 4958, '_menu_item_object', 'horse_categories'), +(11290, 4958, '_menu_item_target', ''), +(11291, 4958, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(11292, 4958, '_menu_item_xfn', ''), +(11293, 4958, '_menu_item_url', ''), +(11299, 4958, '_menu_item_fusion_megamenu_width', ''), +(11296, 4957, '_menu_item_fusion_megamenu_columns', 'auto'), +(11297, 4957, '_menu_item_fusion_megamenu_widget_area', '0'), +(11298, 4957, '_menu_item_fusion_megamenu_thumbnail', ''), +(11300, 4958, '_menu_item_fusion_megamenu_columns', 'auto'), +(11301, 4958, '_menu_item_fusion_megamenu_widget_area', '0'), +(11302, 4958, '_menu_item_fusion_megamenu_thumbnail', ''), +(11361, 4965, '_menu_item_type', 'post_type'), +(11362, 4965, '_menu_item_menu_item_parent', '0'), +(11363, 4965, '_menu_item_object_id', '4899'), +(11619, 4978, '_wp_attached_file', '2014/02/Carthano_K1G9342_B4_01.jpg'), +(11620, 4978, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:2126;s:6:"height";i:1535;s:4:"file";s:34:"2014/02/Carthano_K1G9342_B4_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:34:"Carthano_K1G9342_B4_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:34:"Carthano_K1G9342_B4_01-300x216.jpg";s:5:"width";i:300;s:6:"height";i:216;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:35:"Carthano_K1G9342_B4_01-1024x739.jpg";s:5:"width";i:1024;s:6:"height";i:739;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:34:"Carthano_K1G9342_B4_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:34:"Carthano_K1G9342_B4_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:34:"Carthano_K1G9342_B4_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:32:"Carthano_K1G9342_B4_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:34:"Carthano_K1G9342_B4_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:34:"Carthano_K1G9342_B4_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:34:"Carthano_K1G9342_B4_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:34:"Carthano_K1G9342_B4_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:34:"Carthano_K1G9342_B4_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:34:"Carthano_K1G9342_B4_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:34:"Carthano_K1G9342_B4_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:32:"Carthano_K1G9342_B4_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:11:"Guido Recki";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:128:"@ Guido Recki, Erler Str. 14, 46286 Dorsten, Tel. 02866-188780, Fax 02866-1887818, Bankverbindung: Deutsche Bank Essen, Konto 52";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11621, 4979, '_wp_attached_file', '2014/02/Carthano_K1G9347_B2_05.jpg'), +(11622, 4979, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1535;s:6:"height";i:1950;s:4:"file";s:34:"2014/02/Carthano_K1G9347_B2_05.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:34:"Carthano_K1G9347_B2_05-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:34:"Carthano_K1G9347_B2_05-236x300.jpg";s:5:"width";i:236;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:35:"Carthano_K1G9347_B2_05-806x1024.jpg";s:5:"width";i:806;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:34:"Carthano_K1G9347_B2_05-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:34:"Carthano_K1G9347_B2_05-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:34:"Carthano_K1G9347_B2_05-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:32:"Carthano_K1G9347_B2_05-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:34:"Carthano_K1G9347_B2_05-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:34:"Carthano_K1G9347_B2_05-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:34:"Carthano_K1G9347_B2_05-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:34:"Carthano_K1G9347_B2_05-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:34:"Carthano_K1G9347_B2_05-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:34:"Carthano_K1G9347_B2_05-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:34:"Carthano_K1G9347_B2_05-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:32:"Carthano_K1G9347_B2_05-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11643, 4985, '_wp_attached_file', '2014/02/Cristallo_II_BuCha2013.jpg'); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(11644, 4985, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:4256;s:6:"height";i:2832;s:4:"file";s:34:"2014/02/Cristallo_II_BuCha2013.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:34:"Cristallo_II_BuCha2013-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:34:"Cristallo_II_BuCha2013-300x199.jpg";s:5:"width";i:300;s:6:"height";i:199;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:35:"Cristallo_II_BuCha2013-1024x681.jpg";s:5:"width";i:1024;s:6:"height";i:681;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:34:"Cristallo_II_BuCha2013-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:34:"Cristallo_II_BuCha2013-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:34:"Cristallo_II_BuCha2013-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:32:"Cristallo_II_BuCha2013-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:34:"Cristallo_II_BuCha2013-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:34:"Cristallo_II_BuCha2013-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:34:"Cristallo_II_BuCha2013-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:34:"Cristallo_II_BuCha2013-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:34:"Cristallo_II_BuCha2013-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:34:"Cristallo_II_BuCha2013-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:34:"Cristallo_II_BuCha2013-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:32:"Cristallo_II_BuCha2013-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11645, 4986, '_wp_attached_file', '2014/02/Cristallo_II_Freispringen_01.jpg'), +(11646, 4986, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:3543;s:6:"height";i:2357;s:4:"file";s:40:"2014/02/Cristallo_II_Freispringen_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:40:"Cristallo_II_Freispringen_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:40:"Cristallo_II_Freispringen_01-300x199.jpg";s:5:"width";i:300;s:6:"height";i:199;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:41:"Cristallo_II_Freispringen_01-1024x681.jpg";s:5:"width";i:1024;s:6:"height";i:681;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:40:"Cristallo_II_Freispringen_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:40:"Cristallo_II_Freispringen_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:40:"Cristallo_II_Freispringen_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:38:"Cristallo_II_Freispringen_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:40:"Cristallo_II_Freispringen_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:40:"Cristallo_II_Freispringen_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:40:"Cristallo_II_Freispringen_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:40:"Cristallo_II_Freispringen_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:40:"Cristallo_II_Freispringen_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:40:"Cristallo_II_Freispringen_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:40:"Cristallo_II_Freispringen_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:38:"Cristallo_II_Freispringen_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:12:"KIKI BEELITZ";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:15:"kiki-beelitz.de";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11647, 4987, '_wp_attached_file', '2014/02/Cristallo_II_Galopp_Recki_01.jpg'), +(11648, 4987, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:4896;s:6:"height";i:3264;s:4:"file";s:40:"2014/02/Cristallo_II_Galopp_Recki_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:40:"Cristallo_II_Galopp_Recki_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:40:"Cristallo_II_Galopp_Recki_01-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:41:"Cristallo_II_Galopp_Recki_01-1024x682.jpg";s:5:"width";i:1024;s:6:"height";i:682;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:40:"Cristallo_II_Galopp_Recki_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:40:"Cristallo_II_Galopp_Recki_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:40:"Cristallo_II_Galopp_Recki_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:38:"Cristallo_II_Galopp_Recki_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:40:"Cristallo_II_Galopp_Recki_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:40:"Cristallo_II_Galopp_Recki_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:40:"Cristallo_II_Galopp_Recki_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:40:"Cristallo_II_Galopp_Recki_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:40:"Cristallo_II_Galopp_Recki_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:40:"Cristallo_II_Galopp_Recki_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:40:"Cristallo_II_Galopp_Recki_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:38:"Cristallo_II_Galopp_Recki_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11649, 4988, '_wp_attached_file', '2014/02/CristalloII_Trab_4_01.jpg'), +(11650, 4988, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:849;s:6:"height";i:566;s:4:"file";s:33:"2014/02/CristalloII_Trab_4_01.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:33:"CristalloII_Trab_4_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:33:"CristalloII_Trab_4_01-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:33:"CristalloII_Trab_4_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:33:"CristalloII_Trab_4_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:33:"CristalloII_Trab_4_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:31:"CristalloII_Trab_4_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:33:"CristalloII_Trab_4_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:33:"CristalloII_Trab_4_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:33:"CristalloII_Trab_4_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:33:"CristalloII_Trab_4_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:33:"CristalloII_Trab_4_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:33:"CristalloII_Trab_4_01-849x400.jpg";s:5:"width";i:849;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:33:"CristalloII_Trab_4_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:31:"CristalloII_Trab_4_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:11:"Guido Recki";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:128:"@ Guido Recki, Erler Str. 14, 46286 Dorsten, Tel. 02866-188780, Fax 02866-1887818, Bankverbindung: Deutsche Bank Essen, Konto 52";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11657, 4990, '_edit_last', '1'), +(11658, 4990, '_edit_lock', '1393431488:1'), +(11727, 4990, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(11661, 4990, 'slide_template', ''), +(11662, 4990, 'pyre_video', ''), +(11663, 4990, 'pyre_full_width', 'no'), +(11664, 4990, 'pyre_sidebar_position', 'default'), +(11665, 4990, 'pyre_fimg_width', ''), +(11666, 4990, 'pyre_fimg_height', ''), +(11667, 4990, 'pyre_image_rollover_icons', 'linkzoom'), +(11668, 4990, 'pyre_link_icon_url', ''), +(11669, 4990, 'pyre_related_posts', 'yes'), +(11670, 4990, 'pyre_slider_type', 'no'), +(11671, 4990, 'pyre_slider', '0'), +(11672, 4990, 'pyre_wooslider', '0'), +(11673, 4990, 'pyre_flexslider', '0'), +(11674, 4990, 'pyre_revslider', '0'), +(11675, 4990, 'pyre_elasticslider', '0'), +(11676, 4990, 'pyre_fallback', ''), +(11677, 4990, 'pyre_page_bg_layout', 'default'), +(11678, 4990, 'pyre_page_bg', ''), +(11679, 4990, 'pyre_page_bg_color', ''), +(11680, 4990, 'pyre_page_bg_full', 'no'), +(11681, 4990, 'pyre_page_bg_repeat', 'repeat'), +(11682, 4990, 'pyre_wide_page_bg', ''), +(11683, 4990, 'pyre_wide_page_bg_color', ''), +(11684, 4990, 'pyre_wide_page_bg_full', 'no'), +(11685, 4990, 'pyre_wide_page_bg_repeat', 'repeat'), +(11686, 4990, 'pyre_header_bg', ''), +(11687, 4990, 'pyre_header_bg_color', ''), +(11688, 4990, 'pyre_header_bg_full', 'no'), +(11689, 4990, 'pyre_header_bg_repeat', 'repeat'), +(11690, 4990, 'pyre_page_title', 'yes'), +(11691, 4990, 'pyre_page_title_text', 'yes'), +(11692, 4990, 'pyre_page_title_custom_text', ''), +(11693, 4990, 'pyre_page_title_custom_subheader', ''), +(11694, 4990, 'pyre_page_title_height', ''), +(11695, 4990, 'pyre_page_title_bar_bg', ''), +(11696, 4990, 'pyre_page_title_bar_bg_retina', ''), +(11697, 4990, 'pyre_page_title_bar_bg_full', 'default'), +(11698, 4990, 'pyre_page_title_bar_bg_color', ''), +(11699, 4990, 'pyre_page_title_bg_parallax', 'default'), +(11726, 4990, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11704, 4990, '_alp_processed', '1393415754'), +(11705, 4992, '_wp_attached_file', '2014/02/Florenciano_Burger_Trabbild_1_01.jpg'), +(11706, 4992, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:2241;s:6:"height";i:1557;s:4:"file";s:44:"2014/02/Florenciano_Burger_Trabbild_1_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:44:"Florenciano_Burger_Trabbild_1_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:44:"Florenciano_Burger_Trabbild_1_01-300x208.jpg";s:5:"width";i:300;s:6:"height";i:208;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:45:"Florenciano_Burger_Trabbild_1_01-1024x711.jpg";s:5:"width";i:1024;s:6:"height";i:711;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:44:"Florenciano_Burger_Trabbild_1_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:44:"Florenciano_Burger_Trabbild_1_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:44:"Florenciano_Burger_Trabbild_1_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:42:"Florenciano_Burger_Trabbild_1_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:44:"Florenciano_Burger_Trabbild_1_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:44:"Florenciano_Burger_Trabbild_1_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:44:"Florenciano_Burger_Trabbild_1_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:44:"Florenciano_Burger_Trabbild_1_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:44:"Florenciano_Burger_Trabbild_1_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:44:"Florenciano_Burger_Trabbild_1_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:44:"Florenciano_Burger_Trabbild_1_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:42:"Florenciano_Burger_Trabbild_1_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11707, 4993, '_wp_attached_file', '2014/02/Florenciano_Kampmann_Galopp_01.jpg'), +(11708, 4990, 'kd_featured-image-2_drg_horse_id', '4992'), +(11709, 4994, '_edit_last', '1'), +(11710, 4994, '_edit_lock', '1393512740:1'), +(11711, 4993, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:4458;s:6:"height";i:2972;s:4:"file";s:42:"2014/02/Florenciano_Kampmann_Galopp_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:42:"Florenciano_Kampmann_Galopp_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:42:"Florenciano_Kampmann_Galopp_01-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:43:"Florenciano_Kampmann_Galopp_01-1024x682.jpg";s:5:"width";i:1024;s:6:"height";i:682;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:42:"Florenciano_Kampmann_Galopp_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:42:"Florenciano_Kampmann_Galopp_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:42:"Florenciano_Kampmann_Galopp_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:40:"Florenciano_Kampmann_Galopp_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:42:"Florenciano_Kampmann_Galopp_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:42:"Florenciano_Kampmann_Galopp_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:42:"Florenciano_Kampmann_Galopp_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:42:"Florenciano_Kampmann_Galopp_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:42:"Florenciano_Kampmann_Galopp_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:42:"Florenciano_Kampmann_Galopp_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:42:"Florenciano_Kampmann_Galopp_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:40:"Florenciano_Kampmann_Galopp_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11712, 4995, '_wp_attached_file', '2014/02/Florenciano_Portrait_Recki_05.jpg'), +(11713, 4995, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:2122;s:6:"height";i:3237;s:4:"file";s:41:"2014/02/Florenciano_Portrait_Recki_05.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:41:"Florenciano_Portrait_Recki_05-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:41:"Florenciano_Portrait_Recki_05-196x300.jpg";s:5:"width";i:196;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:42:"Florenciano_Portrait_Recki_05-671x1024.jpg";s:5:"width";i:671;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:41:"Florenciano_Portrait_Recki_05-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:41:"Florenciano_Portrait_Recki_05-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:41:"Florenciano_Portrait_Recki_05-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:39:"Florenciano_Portrait_Recki_05-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:41:"Florenciano_Portrait_Recki_05-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:41:"Florenciano_Portrait_Recki_05-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:41:"Florenciano_Portrait_Recki_05-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:41:"Florenciano_Portrait_Recki_05-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:41:"Florenciano_Portrait_Recki_05-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:41:"Florenciano_Portrait_Recki_05-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:41:"Florenciano_Portrait_Recki_05-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:39:"Florenciano_Portrait_Recki_05-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11714, 4996, '_wp_attached_file', '2014/02/Florenciano_Standbild_Recki_01.jpg'), +(11715, 4996, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:3543;s:6:"height";i:2371;s:4:"file";s:42:"2014/02/Florenciano_Standbild_Recki_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:42:"Florenciano_Standbild_Recki_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:42:"Florenciano_Standbild_Recki_01-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:43:"Florenciano_Standbild_Recki_01-1024x685.jpg";s:5:"width";i:1024;s:6:"height";i:685;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:42:"Florenciano_Standbild_Recki_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:42:"Florenciano_Standbild_Recki_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:42:"Florenciano_Standbild_Recki_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:40:"Florenciano_Standbild_Recki_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:42:"Florenciano_Standbild_Recki_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:42:"Florenciano_Standbild_Recki_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:42:"Florenciano_Standbild_Recki_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:42:"Florenciano_Standbild_Recki_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:42:"Florenciano_Standbild_Recki_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:42:"Florenciano_Standbild_Recki_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:42:"Florenciano_Standbild_Recki_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:40:"Florenciano_Standbild_Recki_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11716, 4997, '_wp_attached_file', '2014/02/Galopp_07.jpg'), +(11717, 4997, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:800;s:6:"height";i:1200;s:4:"file";s:21:"2014/02/Galopp_07.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:21:"Galopp_07-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:21:"Galopp_07-200x300.jpg";s:5:"width";i:200;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:22:"Galopp_07-682x1024.jpg";s:5:"width";i:682;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:21:"Galopp_07-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:21:"Galopp_07-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:21:"Galopp_07-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:19:"Galopp_07-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:21:"Galopp_07-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:21:"Galopp_07-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:21:"Galopp_07-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:21:"Galopp_07-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:21:"Galopp_07-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:21:"Galopp_07-800x400.jpg";s:5:"width";i:800;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:21:"Galopp_07-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:19:"Galopp_07-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11718, 4998, '_wp_attached_file', '2014/02/Starparade_Koerung_Galopp2_01.jpg'), +(11719, 4998, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:800;s:6:"height";i:533;s:4:"file";s:41:"2014/02/Starparade_Koerung_Galopp2_01.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:41:"Starparade_Koerung_Galopp2_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:41:"Starparade_Koerung_Galopp2_01-300x199.jpg";s:5:"width";i:300;s:6:"height";i:199;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:41:"Starparade_Koerung_Galopp2_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:41:"Starparade_Koerung_Galopp2_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:41:"Starparade_Koerung_Galopp2_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:39:"Starparade_Koerung_Galopp2_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:41:"Starparade_Koerung_Galopp2_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:41:"Starparade_Koerung_Galopp2_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:41:"Starparade_Koerung_Galopp2_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:41:"Starparade_Koerung_Galopp2_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:41:"Starparade_Koerung_Galopp2_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:41:"Starparade_Koerung_Galopp2_01-800x400.jpg";s:5:"width";i:800;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:41:"Starparade_Koerung_Galopp2_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:39:"Starparade_Koerung_Galopp2_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11720, 4990, '_thumbnail_id', '4995'), +(11721, 4990, 'kd_featured-image-3_drg_horse_id', '4996'), +(11722, 4990, 'kd_featured-image-4_drg_horse_id', '4993'), +(11723, 4990, 'kd_featured-image-5_drg_horse_id', '4997'), +(11789, 4994, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(11730, 4994, 'slide_template', ''), +(11731, 4994, 'pyre_video', ''), +(11732, 4994, 'pyre_full_width', 'no'), +(11733, 4994, 'pyre_sidebar_position', 'default'), +(11734, 4994, 'pyre_fimg_width', ''), +(11735, 4994, 'pyre_fimg_height', ''), +(11736, 4994, 'pyre_image_rollover_icons', 'linkzoom'), +(11737, 4994, 'pyre_link_icon_url', ''), +(11738, 4994, 'pyre_related_posts', 'yes'), +(11739, 4994, 'pyre_slider_type', 'no'), +(11740, 4994, 'pyre_slider', '0'), +(11741, 4994, 'pyre_wooslider', '0'), +(11742, 4994, 'pyre_flexslider', '0'), +(11743, 4994, 'pyre_revslider', '0'), +(11744, 4994, 'pyre_elasticslider', '0'), +(11745, 4994, 'pyre_fallback', ''), +(11746, 4994, 'pyre_page_bg_layout', 'default'), +(11747, 4994, 'pyre_page_bg', ''), +(11748, 4994, 'pyre_page_bg_color', ''), +(11749, 4994, 'pyre_page_bg_full', 'no'), +(11750, 4994, 'pyre_page_bg_repeat', 'repeat'), +(11751, 4994, 'pyre_wide_page_bg', ''), +(11752, 4994, 'pyre_wide_page_bg_color', ''), +(11753, 4994, 'pyre_wide_page_bg_full', 'no'), +(11754, 4994, 'pyre_wide_page_bg_repeat', 'repeat'), +(11755, 4994, 'pyre_header_bg', ''), +(11756, 4994, 'pyre_header_bg_color', ''), +(11757, 4994, 'pyre_header_bg_full', 'no'), +(11758, 4994, 'pyre_header_bg_repeat', 'repeat'), +(11759, 4994, 'pyre_page_title', 'yes'), +(11760, 4994, 'pyre_page_title_text', 'yes'), +(11761, 4994, 'pyre_page_title_custom_text', ''), +(11762, 4994, 'pyre_page_title_custom_subheader', ''), +(11763, 4994, 'pyre_page_title_height', ''), +(11764, 4994, 'pyre_page_title_bar_bg', ''), +(11765, 4994, 'pyre_page_title_bar_bg_retina', ''), +(11766, 4994, 'pyre_page_title_bar_bg_full', 'default'), +(11767, 4994, 'pyre_page_title_bar_bg_color', ''), +(11768, 4994, 'pyre_page_title_bg_parallax', 'default'), +(11788, 4994, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11773, 4994, '_alp_processed', '1393415872'), +(11774, 5000, '_wp_attached_file', '2014/02/Hannover_jr_271012_0187_02.jpg'), +(11775, 5000, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:800;s:6:"height";i:773;s:4:"file";s:38:"2014/02/Hannover_jr_271012_0187_02.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:38:"Hannover_jr_271012_0187_02-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:38:"Hannover_jr_271012_0187_02-300x289.jpg";s:5:"width";i:300;s:6:"height";i:289;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:38:"Hannover_jr_271012_0187_02-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:38:"Hannover_jr_271012_0187_02-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:38:"Hannover_jr_271012_0187_02-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:36:"Hannover_jr_271012_0187_02-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:38:"Hannover_jr_271012_0187_02-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:38:"Hannover_jr_271012_0187_02-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:38:"Hannover_jr_271012_0187_02-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:38:"Hannover_jr_271012_0187_02-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:38:"Hannover_jr_271012_0187_02-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:38:"Hannover_jr_271012_0187_02-800x400.jpg";s:5:"width";i:800;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:38:"Hannover_jr_271012_0187_02-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:36:"Hannover_jr_271012_0187_02-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:11:"©Julia Rau";s:6:"camera";s:0:"";s:7:"caption";s:347:"Hannover Messehallen 27.10.2012 Reitturnier German Classics hier Youngster-Springen mit Stechen: Ludger Beerbaum (GER) und Zinedine Foto: Julia Rau Am Schinnergraben 57 55129 Mainz Tel.: 06131-507751 Mobil: 0171-9517199 Rüsselsheimer Volksbank BLZ 500 930 00 Kto.: 6514006 Es gelten ausschliesslich meine Allgemeinen Geschäftsbedingungen";s:17:"created_timestamp";i:1351333323;s:9:"copyright";s:11:"©Julia Rau";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11776, 5001, '_wp_attached_file', '2014/02/Stuttgart_jr_151112_0852_01.jpg'), +(11777, 5001, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:571;s:6:"height";i:800;s:4:"file";s:39:"2014/02/Stuttgart_jr_151112_0852_01.jpg";s:5:"sizes";a:14:{s:9:"thumbnail";a:4:{s:4:"file";s:39:"Stuttgart_jr_151112_0852_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:39:"Stuttgart_jr_151112_0852_01-214x300.jpg";s:5:"width";i:214;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:39:"Stuttgart_jr_151112_0852_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:39:"Stuttgart_jr_151112_0852_01-571x272.jpg";s:5:"width";i:571;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:39:"Stuttgart_jr_151112_0852_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:37:"Stuttgart_jr_151112_0852_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:39:"Stuttgart_jr_151112_0852_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:39:"Stuttgart_jr_151112_0852_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:39:"Stuttgart_jr_151112_0852_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:39:"Stuttgart_jr_151112_0852_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:39:"Stuttgart_jr_151112_0852_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:39:"Stuttgart_jr_151112_0852_01-571x400.jpg";s:5:"width";i:571;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:39:"Stuttgart_jr_151112_0852_01-571x441.jpg";s:5:"width";i:571;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:37:"Stuttgart_jr_151112_0852_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:11:"©Julia Rau";s:6:"camera";s:0:"";s:7:"caption";s:383:"Stuttgart Schleyerhalle 14.11.2012 Internat. Reitturnier Stuttgart German Masters hier Erˆffnungsspringen (deutsche Reiter): Ludger Beerbaum (GER) und Zinedine Foto: ©Julia Rau Am Schinnergraben 57 55129 Mainz Tel.: 06131-507751 Mobil: 0171-9517199 R¸sselsheimer Volksbank BLZ 500 930 00 Kto.: 6514006 Es gelten ausschliesslich meine Allgemeinen Gesch‰ftsbedingungen";s:17:"created_timestamp";i:1352983562;s:9:"copyright";s:11:"©Julia Rau";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11778, 5002, '_wp_attached_file', '2014/02/Zinedine_Kopf_Riesenbeck_12_BECKER_10.jpg'), +(11779, 5002, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1357;s:6:"height";i:2000;s:4:"file";s:49:"2014/02/Zinedine_Kopf_Riesenbeck_12_BECKER_10.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:49:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:49:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-203x300.jpg";s:5:"width";i:203;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:50:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-694x1024.jpg";s:5:"width";i:694;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:49:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:49:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:49:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:47:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:49:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:49:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:49:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:49:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:49:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:49:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:49:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:47:"Zinedine_Kopf_Riesenbeck_12_BECKER_10-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11780, 4994, 'kd_featured-image-2_drg_horse_id', '5000'), +(11781, 5003, '_wp_attached_file', '2014/02/Zinedine_Stand_2_Riesenbeck_12_BECKER_01.jpg'), +(11782, 4994, 'kd_featured-image-3_drg_horse_id', '5001'), +(11783, 5003, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:1588;s:6:"height";i:1280;s:4:"file";s:52:"2014/02/Zinedine_Stand_2_Riesenbeck_12_BECKER_01.jpg";s:5:"sizes";a:15:{s:9:"thumbnail";a:4:{s:4:"file";s:52:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:52:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-300x241.jpg";s:5:"width";i:300;s:6:"height";i:241;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:53:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-1024x825.jpg";s:5:"width";i:1024;s:6:"height";i:825;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:52:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-300x421.jpg";s:5:"width";i:300;s:6:"height";i:421;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:52:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-669x272.jpg";s:5:"width";i:669;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:52:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-320x202.jpg";s:5:"width";i:320;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:50:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:52:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:52:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-540x272.jpg";s:5:"width";i:540;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:52:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-460x295.jpg";s:5:"width";i:460;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:52:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:52:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-full";a:4:{s:4:"file";s:52:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-940x400.jpg";s:5:"width";i:940;s:6:"height";i:400;s:9:"mime-type";s:10:"image/jpeg";}s:12:"recent-posts";a:4:{s:4:"file";s:52:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-700x441.jpg";s:5:"width";i:700;s:6:"height";i:441;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:50:"Zinedine_Stand_2_Riesenbeck_12_BECKER_01-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:30:"DR. TANJA BECKER, EQUITARIS.DE";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:30:"DR. TANJA BECKER, EQUITARIS.DE";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(11784, 4994, '_thumbnail_id', '5002'), +(11785, 4994, 'kd_featured-image-4_drg_horse_id', '5003'), +(11796, 4897, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(11974, 5009, '_alp_processed', '1393433565'), +(11975, 5009, '_icl_lang_duplicate_of', '4698'), +(12012, 5009, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12133, 5023, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:14:"Horses Sidebar";}'), +(12072, 5023, '_wp_page_template', 'template-caballos-cria.php'), +(12071, 5023, '_edit_last', '1'), +(12070, 5022, '_menu_item_url', ''), +(12069, 5022, '_menu_item_xfn', ''), +(12068, 5022, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(12067, 5022, '_menu_item_target', ''), +(12066, 5022, '_menu_item_object', 'page'), +(12065, 5022, '_menu_item_object_id', '5007'), +(12064, 5022, '_menu_item_menu_item_parent', '0'), +(12063, 5022, '_menu_item_type', 'post_type'), +(12062, 5021, '_menu_item_url', ''), +(12061, 5021, '_menu_item_xfn', ''), +(12060, 5021, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(12059, 5021, '_menu_item_target', ''), +(12058, 5021, '_menu_item_object', 'page'), +(12057, 5021, '_menu_item_object_id', '5009'), +(12050, 5020, '_menu_item_object', 'page'), +(12051, 5020, '_menu_item_target', ''), +(12052, 5020, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(12053, 5020, '_menu_item_xfn', ''), +(12054, 5020, '_menu_item_url', ''), +(12055, 5021, '_menu_item_type', 'post_type'), +(12056, 5021, '_menu_item_menu_item_parent', '0'), +(12049, 5020, '_menu_item_object_id', '5005'), +(12048, 5020, '_menu_item_menu_item_parent', '0'), +(12047, 5020, '_menu_item_type', 'post_type'), +(12132, 5023, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12075, 5023, 'slide_template', ''), +(12076, 5023, 'pyre_slider_type', 'no'), +(12077, 5023, 'pyre_slider', '0'), +(12078, 5023, 'pyre_wooslider', '0'), +(12079, 5023, 'pyre_flexslider', '0'), +(12080, 5023, 'pyre_revslider', '0'), +(12081, 5023, 'pyre_elasticslider', '0'), +(12082, 5023, 'pyre_fallback', ''), +(12083, 5023, 'pyre_full_width', 'no'), +(12084, 5023, 'pyre_sidebar_position', 'default'), +(12085, 5023, 'pyre_main_top_padding', ''), +(12086, 5023, 'pyre_main_bottom_padding', ''), +(12087, 5023, 'pyre_hundredp_padding', ''), +(12088, 5023, 'pyre_portfolio_excerpt', ''), +(12089, 5023, 'pyre_portfolio_full_width', 'no'), +(12090, 5023, 'pyre_portfolio_sidebar_position', 'right'), +(12091, 5023, 'pyre_portfolio_filters', 'yes'), +(12092, 5023, 'pyre_page_bg_layout', 'default'), +(12093, 5023, 'pyre_page_bg', ''), +(12094, 5023, 'pyre_page_bg_color', ''), +(12095, 5023, 'pyre_page_bg_full', 'no'), +(12096, 5023, 'pyre_page_bg_repeat', 'repeat'), +(12097, 5023, 'pyre_wide_page_bg', ''), +(12098, 5023, 'pyre_wide_page_bg_color', ''), +(12099, 5023, 'pyre_wide_page_bg_full', 'no'), +(12100, 5023, 'pyre_wide_page_bg_repeat', 'repeat'), +(12101, 5023, 'pyre_header_bg', ''), +(12102, 5023, 'pyre_header_bg_color', ''), +(12103, 5023, 'pyre_header_bg_full', 'no'), +(12104, 5023, 'pyre_header_bg_repeat', 'repeat'), +(12105, 5023, 'pyre_page_title', 'yes'), +(12106, 5023, 'pyre_page_title_text', 'yes'), +(12107, 5023, 'pyre_page_title_custom_text', ''), +(12108, 5023, 'pyre_page_title_custom_subheader', ''), +(12109, 5023, 'pyre_page_title_height', ''), +(12110, 5023, 'pyre_page_title_bar_bg', ''), +(12111, 5023, 'pyre_page_title_bar_bg_retina', ''), +(12112, 5023, 'pyre_page_title_bar_bg_color', ''), +(12113, 5023, 'pyre_page_title_bar_bg_full', 'default'), +(12114, 5023, 'pyre_page_title_bg_parallax', 'default'), +(12119, 5023, '_alp_processed', '1393434011'), +(12120, 5023, '_edit_lock', '1393433935:1'), +(12121, 5023, '_icl_lang_duplicate_of', '4897'), +(12122, 5023, 'drg_horse_category', 'a:1:{i:0;s:2:"39";}'), +(12123, 5023, 'pyre_portfolio_category', 'a:1:{i:0;s:2:"39";}'), +(12134, 5027, '_edit_last', '1'), +(12135, 5027, '_wp_page_template', 'template-caballos-competicion.php'), +(12192, 5027, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:14:"Horses Sidebar";}'), +(12138, 5027, 'slide_template', ''), +(12139, 5027, 'pyre_slider_type', 'no'), +(12140, 5027, 'pyre_slider', '0'), +(12141, 5027, 'pyre_wooslider', '0'), +(12142, 5027, 'pyre_flexslider', '0'), +(12143, 5027, 'pyre_revslider', '0'), +(12144, 5027, 'pyre_elasticslider', '0'), +(12145, 5027, 'pyre_fallback', ''), +(12146, 5027, 'pyre_full_width', 'no'), +(12147, 5027, 'pyre_sidebar_position', 'default'), +(12148, 5027, 'pyre_main_top_padding', ''), +(12149, 5027, 'pyre_main_bottom_padding', ''), +(12150, 5027, 'pyre_hundredp_padding', ''), +(12151, 5027, 'pyre_portfolio_excerpt', ''), +(12152, 5027, 'pyre_portfolio_full_width', 'no'), +(12153, 5027, 'pyre_portfolio_sidebar_position', 'default'), +(12154, 5027, 'pyre_portfolio_filters', 'yes'), +(12155, 5027, 'pyre_page_bg_layout', 'default'), +(12156, 5027, 'pyre_page_bg', ''), +(12157, 5027, 'pyre_page_bg_color', ''), +(12158, 5027, 'pyre_page_bg_full', 'no'), +(12159, 5027, 'pyre_page_bg_repeat', 'repeat'), +(12160, 5027, 'pyre_wide_page_bg', ''), +(12161, 5027, 'pyre_wide_page_bg_color', ''), +(12162, 5027, 'pyre_wide_page_bg_full', 'no'), +(12163, 5027, 'pyre_wide_page_bg_repeat', 'repeat'), +(12164, 5027, 'pyre_header_bg', ''), +(12165, 5027, 'pyre_header_bg_color', ''), +(12166, 5027, 'pyre_header_bg_full', 'no'), +(12167, 5027, 'pyre_header_bg_repeat', 'repeat'), +(12168, 5027, 'pyre_page_title', 'yes'), +(12169, 5027, 'pyre_page_title_text', 'yes'), +(12170, 5027, 'pyre_page_title_custom_text', ''), +(12171, 5027, 'pyre_page_title_custom_subheader', ''), +(12172, 5027, 'pyre_page_title_height', ''), +(12173, 5027, 'pyre_page_title_bar_bg', ''), +(12174, 5027, 'pyre_page_title_bar_bg_retina', ''), +(12175, 5027, 'pyre_page_title_bar_bg_color', ''), +(12176, 5027, 'pyre_page_title_bar_bg_full', 'default'), +(12177, 5027, 'pyre_page_title_bg_parallax', 'default'), +(12182, 5027, '_alp_processed', '1393434039'), +(12183, 5027, '_edit_lock', '1393433943:1'), +(12184, 5027, '_icl_lang_duplicate_of', '4899'), +(12185, 5027, 'pyre_portfolio_category', 'a:1:{i:0;s:2:"38";}'), +(12186, 5027, 'drg_horse_category', 'a:1:{i:0;s:2:"38";}'), +(12191, 5027, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12193, 5031, '_edit_last', '1'), +(12194, 5031, '_edit_lock', '1393434005:1'), +(12195, 5031, '_wp_page_template', 'full-width.php'); +INSERT INTO `drgrp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES +(12248, 5031, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12247, 5031, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12198, 5031, 'slide_template', ''), +(12199, 5031, 'pyre_slider_type', 'no'), +(12200, 5031, 'pyre_slider', '0'), +(12201, 5031, 'pyre_wooslider', '0'), +(12202, 5031, 'pyre_flexslider', '0'), +(12203, 5031, 'pyre_revslider', '0'), +(12204, 5031, 'pyre_elasticslider', '0'), +(12205, 5031, 'pyre_fallback', ''), +(12206, 5031, 'pyre_full_width', 'no'), +(12207, 5031, 'pyre_sidebar_position', 'default'), +(12208, 5031, 'pyre_main_top_padding', ''), +(12209, 5031, 'pyre_main_bottom_padding', ''), +(12210, 5031, 'pyre_hundredp_padding', ''), +(12211, 5031, 'pyre_portfolio_excerpt', ''), +(12212, 5031, 'pyre_portfolio_full_width', 'yes'), +(12213, 5031, 'pyre_portfolio_sidebar_position', 'default'), +(12214, 5031, 'pyre_portfolio_filters', 'yes'), +(12215, 5031, 'pyre_page_bg_layout', 'default'), +(12216, 5031, 'pyre_page_bg', ''), +(12217, 5031, 'pyre_page_bg_color', ''), +(12218, 5031, 'pyre_page_bg_full', 'no'), +(12219, 5031, 'pyre_page_bg_repeat', 'repeat'), +(12220, 5031, 'pyre_wide_page_bg', ''), +(12221, 5031, 'pyre_wide_page_bg_color', ''), +(12222, 5031, 'pyre_wide_page_bg_full', 'no'), +(12223, 5031, 'pyre_wide_page_bg_repeat', 'repeat'), +(12224, 5031, 'pyre_header_bg', ''), +(12225, 5031, 'pyre_header_bg_color', ''), +(12226, 5031, 'pyre_header_bg_full', 'no'), +(12227, 5031, 'pyre_header_bg_repeat', 'repeat'), +(12228, 5031, 'pyre_page_title', 'yes'), +(12229, 5031, 'pyre_page_title_text', 'yes'), +(12230, 5031, 'pyre_page_title_custom_text', ''), +(12231, 5031, 'pyre_page_title_custom_subheader', ''), +(12232, 5031, 'pyre_page_title_height', ''), +(12233, 5031, 'pyre_page_title_bar_bg', ''), +(12234, 5031, 'pyre_page_title_bar_bg_retina', ''), +(12235, 5031, 'pyre_page_title_bar_bg_color', ''), +(12236, 5031, 'pyre_page_title_bar_bg_full', 'default'), +(12237, 5031, 'pyre_page_title_bg_parallax', 'default'), +(12242, 5031, '_alp_processed', '1393434105'), +(12249, 5034, '_menu_item_type', 'post_type'), +(12250, 5034, '_menu_item_menu_item_parent', '0'), +(12251, 5034, '_menu_item_object_id', '5023'), +(12252, 5034, '_menu_item_object', 'page'), +(12253, 5034, '_menu_item_target', ''), +(12254, 5034, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(12255, 5034, '_menu_item_xfn', ''), +(12256, 5034, '_menu_item_url', ''), +(12257, 5035, '_menu_item_type', 'post_type'), +(12258, 5035, '_menu_item_menu_item_parent', '0'), +(12259, 5035, '_menu_item_object_id', '5027'), +(12260, 5035, '_menu_item_object', 'page'), +(12261, 5035, '_menu_item_target', ''), +(12262, 5035, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(12263, 5035, '_menu_item_xfn', ''), +(12264, 5035, '_menu_item_url', ''), +(12265, 5036, '_menu_item_type', 'post_type'), +(12266, 5036, '_menu_item_menu_item_parent', '0'), +(12267, 5036, '_menu_item_object_id', '5031'), +(12268, 5036, '_menu_item_object', 'page'), +(12269, 5036, '_menu_item_target', ''), +(12270, 5036, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(12271, 5036, '_menu_item_xfn', ''), +(12272, 5036, '_menu_item_url', ''), +(12273, 5037, '_alp_processed', '1393589528'), +(12274, 5037, '_icl_lang_duplicate_of', '4705'), +(12275, 5037, '_wp_page_template', '100-width.php'), +(13269, 5037, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12277, 5037, 'slide_template', ''), +(12278, 5037, 'pyre_slider_type', 'layer'), +(12279, 5037, 'pyre_slider', '3'), +(12280, 5037, 'pyre_wooslider', '0'), +(12281, 5037, 'pyre_flexslider', '0'), +(12282, 5037, 'pyre_revslider', '0'), +(12283, 5037, 'pyre_elasticslider', '0'), +(12284, 5037, 'pyre_fallback', ''), +(12285, 5037, 'pyre_full_width', 'no'), +(12286, 5037, 'pyre_sidebar_position', 'default'), +(12287, 5037, 'pyre_main_top_padding', ''), +(12288, 5037, 'pyre_main_bottom_padding', ''), +(12289, 5037, 'pyre_hundredp_padding', ''), +(12290, 5037, 'pyre_portfolio_excerpt', ''), +(12291, 5037, 'pyre_portfolio_full_width', 'yes'), +(12292, 5037, 'pyre_portfolio_sidebar_position', 'default'), +(12293, 5037, 'pyre_portfolio_filters', 'yes'), +(12294, 5037, 'pyre_page_bg_layout', 'default'), +(12295, 5037, 'pyre_page_bg', ''), +(12296, 5037, 'pyre_page_bg_color', ''), +(12297, 5037, 'pyre_page_bg_full', 'no'), +(12298, 5037, 'pyre_page_bg_repeat', 'repeat'), +(12299, 5037, 'pyre_wide_page_bg', ''), +(12300, 5037, 'pyre_wide_page_bg_color', ''), +(12301, 5037, 'pyre_wide_page_bg_full', 'no'), +(12302, 5037, 'pyre_wide_page_bg_repeat', 'repeat'), +(12303, 5037, 'pyre_header_bg', ''), +(12304, 5037, 'pyre_header_bg_color', ''), +(12305, 5037, 'pyre_header_bg_full', 'no'), +(12306, 5037, 'pyre_header_bg_repeat', 'repeat'), +(12307, 5037, 'pyre_page_title', 'no'), +(12308, 5037, 'pyre_page_title_text', 'no'), +(12309, 5037, 'pyre_page_title_custom_text', ''), +(12310, 5037, 'pyre_page_title_custom_subheader', ''), +(12311, 5037, 'pyre_page_title_height', ''), +(12312, 5037, 'pyre_page_title_bar_bg', ''), +(12313, 5037, 'pyre_page_title_bar_bg_retina', ''), +(12314, 5037, 'pyre_page_title_bar_bg_color', ''), +(12315, 5037, 'pyre_page_title_bar_bg_full', 'default'), +(12316, 5037, 'pyre_page_title_bg_parallax', 'default'), +(12318, 5037, '_wpml_media_duplicate', '1'), +(12319, 5037, '_wpml_media_featured', '1'), +(12320, 5037, '_edit_lock', '1393436119:1'), +(12321, 5037, '_edit_last', '1'), +(13268, 5037, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12334, 5040, '_menu_item_type', 'taxonomy'), +(12335, 5040, '_menu_item_menu_item_parent', '0'), +(12336, 5040, '_menu_item_object_id', '36'), +(12337, 5040, '_menu_item_object', 'horse_breeds'), +(12338, 5040, '_menu_item_target', ''), +(12339, 5040, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(12340, 5040, '_menu_item_xfn', ''), +(12341, 5040, '_menu_item_url', ''), +(12379, 5040, '_menu_item_fusion_megamenu_columns', 'auto'), +(12343, 5041, '_menu_item_type', 'taxonomy'), +(12344, 5041, '_menu_item_menu_item_parent', '0'), +(12345, 5041, '_menu_item_object_id', '34'), +(12346, 5041, '_menu_item_object', 'horse_breeds'), +(12347, 5041, '_menu_item_target', ''), +(12348, 5041, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(12349, 5041, '_menu_item_xfn', ''), +(12350, 5041, '_menu_item_url', ''), +(12382, 5041, '_menu_item_fusion_megamenu_columns', 'auto'), +(12352, 5042, '_menu_item_type', 'taxonomy'), +(12353, 5042, '_menu_item_menu_item_parent', '0'), +(12354, 5042, '_menu_item_object_id', '35'), +(12355, 5042, '_menu_item_object', 'horse_breeds'), +(12356, 5042, '_menu_item_target', ''), +(12357, 5042, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(12358, 5042, '_menu_item_xfn', ''), +(12359, 5042, '_menu_item_url', ''), +(12385, 5042, '_menu_item_fusion_megamenu_columns', 'auto'), +(12361, 5043, '_menu_item_type', 'taxonomy'), +(12362, 5043, '_menu_item_menu_item_parent', '0'), +(12363, 5043, '_menu_item_object_id', '37'), +(12364, 5043, '_menu_item_object', 'horse_breeds'), +(12365, 5043, '_menu_item_target', ''), +(12366, 5043, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(12367, 5043, '_menu_item_xfn', ''), +(12368, 5043, '_menu_item_url', ''), +(12388, 5043, '_menu_item_fusion_megamenu_columns', 'auto'), +(12370, 5044, '_menu_item_type', 'taxonomy'), +(12371, 5044, '_menu_item_menu_item_parent', '0'), +(12372, 5044, '_menu_item_object_id', '33'), +(12373, 5044, '_menu_item_object', 'horse_breeds'), +(12374, 5044, '_menu_item_target', ''), +(12375, 5044, '_menu_item_classes', 'a:1:{i:0;s:0:"";}'), +(12376, 5044, '_menu_item_xfn', ''), +(12377, 5044, '_menu_item_url', ''), +(12391, 5044, '_menu_item_fusion_megamenu_columns', 'auto'), +(12380, 5040, '_menu_item_fusion_megamenu_widget_area', '0'), +(12381, 5040, '_menu_item_fusion_megamenu_thumbnail', ''), +(12383, 5041, '_menu_item_fusion_megamenu_widget_area', '0'), +(12384, 5041, '_menu_item_fusion_megamenu_thumbnail', ''), +(12386, 5042, '_menu_item_fusion_megamenu_widget_area', '0'), +(12387, 5042, '_menu_item_fusion_megamenu_thumbnail', ''), +(12389, 5043, '_menu_item_fusion_megamenu_widget_area', '0'), +(12390, 5043, '_menu_item_fusion_megamenu_thumbnail', ''), +(12392, 5044, '_menu_item_fusion_megamenu_widget_area', '0'), +(12393, 5044, '_menu_item_fusion_megamenu_thumbnail', ''), +(12394, 4917, '_wp_trash_meta_status', 'publish'), +(12395, 4917, '_wp_trash_meta_time', '1393439319'), +(12396, 4906, '_wp_trash_meta_status', 'publish'), +(12397, 4906, '_wp_trash_meta_time', '1393439319'), +(12398, 4887, '_wp_trash_meta_status', 'publish'), +(12399, 4887, '_wp_trash_meta_time', '1393439319'), +(12400, 4869, '_wp_trash_meta_status', 'publish'), +(12401, 4869, '_wp_trash_meta_time', '1393439319'), +(12402, 5045, '_edit_last', '1'), +(12403, 5045, '_edit_lock', '1393441148:1'), +(12454, 5047, '_wp_attached_file', '2014/01/fondo.jpg'), +(12465, 5045, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12410, 5045, 'slide_template', ''), +(12411, 5045, 'pyre_video', ''), +(12412, 5045, 'pyre_full_width', 'no'), +(12413, 5045, 'pyre_sidebar_position', 'default'), +(12414, 5045, 'pyre_fimg_width', ''), +(12415, 5045, 'pyre_fimg_height', ''), +(12416, 5045, 'pyre_image_rollover_icons', 'linkzoom'), +(12417, 5045, 'pyre_link_icon_url', ''), +(12418, 5045, 'pyre_related_posts', 'yes'), +(12419, 5045, 'pyre_slider_type', 'no'), +(12420, 5045, 'pyre_slider', '0'), +(12421, 5045, 'pyre_wooslider', '0'), +(12422, 5045, 'pyre_flexslider', '0'), +(12423, 5045, 'pyre_revslider', '0'), +(12424, 5045, 'pyre_elasticslider', '0'), +(12425, 5045, 'pyre_fallback', ''), +(12426, 5045, 'pyre_page_bg_layout', 'default'), +(12427, 5045, 'pyre_page_bg', ''), +(12428, 5045, 'pyre_page_bg_color', ''), +(12429, 5045, 'pyre_page_bg_full', 'no'), +(12430, 5045, 'pyre_page_bg_repeat', 'repeat'), +(12431, 5045, 'pyre_wide_page_bg', ''), +(12432, 5045, 'pyre_wide_page_bg_color', ''), +(12433, 5045, 'pyre_wide_page_bg_full', 'no'), +(12434, 5045, 'pyre_wide_page_bg_repeat', 'repeat'), +(12435, 5045, 'pyre_header_bg', ''), +(12436, 5045, 'pyre_header_bg_color', ''), +(12437, 5045, 'pyre_header_bg_full', 'no'), +(12438, 5045, 'pyre_header_bg_repeat', 'repeat'), +(12439, 5045, 'pyre_page_title', 'yes'), +(12440, 5045, 'pyre_page_title_text', 'yes'), +(12441, 5045, 'pyre_page_title_custom_text', ''), +(12442, 5045, 'pyre_page_title_custom_subheader', ''), +(12443, 5045, 'pyre_page_title_height', ''), +(12444, 5045, 'pyre_page_title_bar_bg', ''), +(12445, 5045, 'pyre_page_title_bar_bg_retina', ''), +(12446, 5045, 'pyre_page_title_bar_bg_full', 'default'), +(12447, 5045, 'pyre_page_title_bar_bg_color', ''), +(12448, 5045, 'pyre_page_title_bg_parallax', 'default'), +(12464, 5045, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12453, 5045, '_alp_processed', '1393441148'), +(12455, 5047, '_wp_attachment_metadata', 'a:5:{s:5:"width";i:304;s:6:"height";i:306;s:4:"file";s:17:"2014/01/fondo.jpg";s:5:"sizes";a:12:{s:9:"thumbnail";a:4:{s:4:"file";s:17:"fondo-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:17:"fondo-298x300.jpg";s:5:"width";i:298;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:24:"portfolio-three-vertical";a:4:{s:4:"file";s:17:"fondo-300x306.jpg";s:5:"width";i:300;s:6:"height";i:306;s:9:"mime-type";s:10:"image/jpeg";}s:10:"blog-large";a:4:{s:4:"file";s:17:"fondo-304x272.jpg";s:5:"width";i:304;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:11:"blog-medium";a:4:{s:4:"file";s:17:"fondo-304x202.jpg";s:5:"width";i:304;s:6:"height";i:202;s:9:"mime-type";s:10:"image/jpeg";}s:8:"tabs-img";a:4:{s:4:"file";s:15:"fondo-52x50.jpg";s:5:"width";i:52;s:6:"height";i:50;s:9:"mime-type";s:10:"image/jpeg";}s:11:"related-img";a:4:{s:4:"file";s:17:"fondo-180x138.jpg";s:5:"width";i:180;s:6:"height";i:138;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-one";a:4:{s:4:"file";s:17:"fondo-304x272.jpg";s:5:"width";i:304;s:6:"height";i:272;s:9:"mime-type";s:10:"image/jpeg";}s:13:"portfolio-two";a:4:{s:4:"file";s:17:"fondo-304x295.jpg";s:5:"width";i:304;s:6:"height";i:295;s:9:"mime-type";s:10:"image/jpeg";}s:15:"portfolio-three";a:4:{s:4:"file";s:17:"fondo-300x214.jpg";s:5:"width";i:300;s:6:"height";i:214;s:9:"mime-type";s:10:"image/jpeg";}s:14:"portfolio-four";a:4:{s:4:"file";s:17:"fondo-220x161.jpg";s:5:"width";i:220;s:6:"height";i:161;s:9:"mime-type";s:10:"image/jpeg";}s:22:"recent-works-thumbnail";a:4:{s:4:"file";s:15:"fondo-66x66.jpg";s:5:"width";i:66;s:6:"height";i:66;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'), +(12456, 5045, 'avada_post_views_count', '17'), +(12457, 5045, '_thumbnail_id', '5000'), +(12467, 5048, '_edit_lock', '1393441015:1'), +(12466, 5048, '_edit_last', '1'), +(12468, 5048, '_thumbnail_id', '4976'), +(12526, 5048, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12475, 5048, 'slide_template', 'default'), +(12476, 5048, 'pyre_video', ''), +(12477, 5048, 'pyre_full_width', 'no'), +(12478, 5048, 'pyre_sidebar_position', 'default'), +(12479, 5048, 'pyre_fimg_width', ''), +(12480, 5048, 'pyre_fimg_height', ''), +(12481, 5048, 'pyre_image_rollover_icons', 'linkzoom'), +(12482, 5048, 'pyre_link_icon_url', ''), +(12483, 5048, 'pyre_related_posts', 'yes'), +(12484, 5048, 'pyre_slider_type', 'no'), +(12485, 5048, 'pyre_slider', '0'), +(12486, 5048, 'pyre_wooslider', '0'), +(12487, 5048, 'pyre_flexslider', '0'), +(12488, 5048, 'pyre_revslider', '0'), +(12489, 5048, 'pyre_elasticslider', '0'), +(12490, 5048, 'pyre_fallback', ''), +(12491, 5048, 'pyre_page_bg_layout', 'default'), +(12492, 5048, 'pyre_page_bg', ''), +(12493, 5048, 'pyre_page_bg_color', ''), +(12494, 5048, 'pyre_page_bg_full', 'no'), +(12495, 5048, 'pyre_page_bg_repeat', 'repeat'), +(12496, 5048, 'pyre_wide_page_bg', ''), +(12497, 5048, 'pyre_wide_page_bg_color', ''), +(12498, 5048, 'pyre_wide_page_bg_full', 'no'), +(12499, 5048, 'pyre_wide_page_bg_repeat', 'repeat'), +(12500, 5048, 'pyre_header_bg', ''), +(12501, 5048, 'pyre_header_bg_color', ''), +(12502, 5048, 'pyre_header_bg_full', 'no'), +(12503, 5048, 'pyre_header_bg_repeat', 'repeat'), +(12504, 5048, 'pyre_page_title', 'yes'), +(12505, 5048, 'pyre_page_title_text', 'yes'), +(12506, 5048, 'pyre_page_title_custom_text', ''), +(12507, 5048, 'pyre_page_title_custom_subheader', ''), +(12508, 5048, 'pyre_page_title_height', ''), +(12509, 5048, 'pyre_page_title_bar_bg', ''), +(12510, 5048, 'pyre_page_title_bar_bg_retina', ''), +(12511, 5048, 'pyre_page_title_bar_bg_full', 'default'), +(12512, 5048, 'pyre_page_title_bar_bg_color', ''), +(12513, 5048, 'pyre_page_title_bg_parallax', 'default'), +(12525, 5048, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12518, 5048, '_alp_processed', '1393441122'), +(12527, 1, '_wp_trash_meta_status', 'publish'), +(12528, 1, '_wp_trash_meta_time', '1393441135'), +(12529, 1, '_alp_processed', '1393441135'), +(12533, 5051, '_edit_lock', '1393441114:1'), +(12532, 5051, '_edit_last', '1'), +(12534, 5051, '_thumbnail_id', '4880'), +(12586, 5053, '_edit_lock', '1393441939:1'), +(12585, 5053, '_edit_last', '1'), +(12583, 5051, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12582, 5051, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12541, 5051, 'slide_template', 'default'), +(12542, 5051, 'pyre_video', ''), +(12543, 5051, 'pyre_full_width', 'no'), +(12544, 5051, 'pyre_sidebar_position', 'default'), +(12545, 5051, 'pyre_fimg_width', ''), +(12546, 5051, 'pyre_fimg_height', ''), +(12547, 5051, 'pyre_image_rollover_icons', 'linkzoom'), +(12548, 5051, 'pyre_link_icon_url', ''), +(12549, 5051, 'pyre_related_posts', 'yes'), +(12550, 5051, 'pyre_slider_type', 'no'), +(12551, 5051, 'pyre_slider', '0'), +(12552, 5051, 'pyre_wooslider', '0'), +(12553, 5051, 'pyre_flexslider', '0'), +(12554, 5051, 'pyre_revslider', '0'), +(12555, 5051, 'pyre_elasticslider', '0'), +(12556, 5051, 'pyre_fallback', ''), +(12557, 5051, 'pyre_page_bg_layout', 'default'), +(12558, 5051, 'pyre_page_bg', ''), +(12559, 5051, 'pyre_page_bg_color', ''), +(12560, 5051, 'pyre_page_bg_full', 'no'), +(12561, 5051, 'pyre_page_bg_repeat', 'repeat'), +(12562, 5051, 'pyre_wide_page_bg', ''), +(12563, 5051, 'pyre_wide_page_bg_color', ''), +(12564, 5051, 'pyre_wide_page_bg_full', 'no'), +(12565, 5051, 'pyre_wide_page_bg_repeat', 'repeat'), +(12566, 5051, 'pyre_header_bg', ''), +(12567, 5051, 'pyre_header_bg_color', ''), +(12568, 5051, 'pyre_header_bg_full', 'no'), +(12569, 5051, 'pyre_header_bg_repeat', 'repeat'), +(12570, 5051, 'pyre_page_title', 'yes'), +(12571, 5051, 'pyre_page_title_text', 'yes'), +(12572, 5051, 'pyre_page_title_custom_text', ''), +(12573, 5051, 'pyre_page_title_custom_subheader', ''), +(12574, 5051, 'pyre_page_title_height', ''), +(12575, 5051, 'pyre_page_title_bar_bg', ''), +(12576, 5051, 'pyre_page_title_bar_bg_retina', ''), +(12577, 5051, 'pyre_page_title_bar_bg_full', 'default'), +(12578, 5051, 'pyre_page_title_bar_bg_color', ''), +(12579, 5051, 'pyre_page_title_bg_parallax', 'default'), +(12584, 5051, '_alp_processed', '1393441219'), +(12587, 5053, '_thumbnail_id', '5000'), +(12638, 5053, 'avada_post_views_count', '0'), +(12636, 5053, 'sbg_selected_sidebar_replacement', 'a:1:{i:0;s:1:"0";}'), +(12635, 5053, 'sbg_selected_sidebar', 'a:1:{i:0;s:1:"0";}'), +(12594, 5053, 'slide_template', 'default'), +(12595, 5053, 'pyre_video', ''), +(12596, 5053, 'pyre_full_width', 'no'), +(12597, 5053, 'pyre_sidebar_position', 'default'), +(12598, 5053, 'pyre_fimg_width', ''), +(12599, 5053, 'pyre_fimg_height', ''), +(12600, 5053, 'pyre_image_rollover_icons', 'linkzoom'), +(12601, 5053, 'pyre_link_icon_url', ''), +(12602, 5053, 'pyre_related_posts', 'yes'), +(12603, 5053, 'pyre_slider_type', 'no'), +(12604, 5053, 'pyre_slider', '0'), +(12605, 5053, 'pyre_wooslider', '0'), +(12606, 5053, 'pyre_flexslider', '0'), +(12607, 5053, 'pyre_revslider', '0'), +(12608, 5053, 'pyre_elasticslider', '0'), +(12609, 5053, 'pyre_fallback', ''), +(12610, 5053, 'pyre_page_bg_layout', 'default'), +(12611, 5053, 'pyre_page_bg', ''), +(12612, 5053, 'pyre_page_bg_color', ''), +(12613, 5053, 'pyre_page_bg_full', 'no'), +(12614, 5053, 'pyre_page_bg_repeat', 'repeat'), +(12615, 5053, 'pyre_wide_page_bg', ''), +(12616, 5053, 'pyre_wide_page_bg_color', ''), +(12617, 5053, 'pyre_wide_page_bg_full', 'no'), +(12618, 5053, 'pyre_wide_page_bg_repeat', 'repeat'), +(12619, 5053, 'pyre_header_bg', ''), +(12620, 5053, 'pyre_header_bg_color', ''), +(12621, 5053, 'pyre_header_bg_full', 'no'), +(12622, 5053, 'pyre_header_bg_repeat', 'repeat'), +(12623, 5053, 'pyre_page_title', 'yes'), +(12624, 5053, 'pyre_page_title_text', 'yes'), +(12625, 5053, 'pyre_page_title_custom_text', ''), +(12626, 5053, 'pyre_page_title_custom_subheader', ''), +(12627, 5053, 'pyre_page_title_height', ''), +(12628, 5053, 'pyre_page_title_bar_bg', ''), +(12629, 5053, 'pyre_page_title_bar_bg_retina', ''), +(12630, 5053, 'pyre_page_title_bar_bg_full', 'default'), +(12631, 5053, 'pyre_page_title_bar_bg_color', ''), +(12632, 5053, 'pyre_page_title_bg_parallax', 'default'), +(12637, 5053, '_alp_processed', '1393441288'), +(12693, 5003, '_edit_lock', '1393514027:1'); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_posts` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_posts` ( + `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `post_author` bigint(20) unsigned NOT NULL DEFAULT '0', + `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_content` longtext NOT NULL, + `post_title` text NOT NULL, + `post_excerpt` text NOT NULL, + `post_status` varchar(20) NOT NULL DEFAULT 'publish', + `comment_status` varchar(20) NOT NULL DEFAULT 'open', + `ping_status` varchar(20) NOT NULL DEFAULT 'open', + `post_password` varchar(20) NOT NULL DEFAULT '', + `post_name` varchar(200) NOT NULL DEFAULT '', + `to_ping` text NOT NULL, + `pinged` text NOT NULL, + `post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_content_filtered` longtext NOT NULL, + `post_parent` bigint(20) unsigned NOT NULL DEFAULT '0', + `guid` varchar(255) NOT NULL DEFAULT '', + `menu_order` int(11) NOT NULL DEFAULT '0', + `post_type` varchar(20) NOT NULL DEFAULT 'post', + `post_mime_type` varchar(100) NOT NULL DEFAULT '', + `comment_count` bigint(20) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`), + KEY `post_name` (`post_name`), + KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`), + KEY `post_parent` (`post_parent`), + KEY `post_author` (`post_author`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5099 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_posts` +-- + +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(1, 1, '2014-01-29 21:04:51', '2014-01-29 21:04:51', 'Bienvenido a WordPress. Esta es tu primera entrada. Edítala o bórrala, ¡y comienza a publicar!.', '¡Hola mundo!', '', 'trash', 'open', 'open', '', 'hola-mundo', '', '', '2014-02-26 19:58:55', '2014-02-26 18:58:55', '', 0, 'http://127.0.0.1:4001/wordpress/?p=1', 0, 'post', '', 0), +(2, 1, '2014-01-29 21:04:51', '2014-01-29 21:04:51', 'Esto es una página de ejemplo. Es diferente a una entrada porque permanece fija en un lugar y se mostrará en la navegación de tu sitio (en la mayoría de los temas). La mayoría de la gente empieza con una página de Acerca de, que les presenta a los potenciales visitantes del sitio. Podría ser algo como esto:\n\n
¡Hola! Soy mensajero por el día, aspirante a actor por la noche, y este es mi blog. Vivo en Madrid, tengo un perrazo llamado Duque y me gustan las piñas coladas (y que me pille un chaparrón)
\n\n...o algo así:\n\n
La empresa XYZ se fundó en 1971 y ha estado ofreciendo "cosas" de calidad al público desde entonces. Situada en Madrid, XYZ emplea a más de 2.000 personas y hace todo tipo de cosas sorprendentes para la comunidad de Madrid.
\n\nSi eres nuevo en WordPress deberías ir a tu escritorio para borrar esta páginay crear páginas nuevas con tu propio contenido. ¡Pásalo bien!', 'Página de ejemplo', '', 'publish', 'open', 'open', '', 'pagina-ejemplo', '', '', '2014-01-29 21:04:51', '2014-01-29 21:04:51', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=2', 0, 'page', '', 0), +(4624, 1, '2014-02-07 11:40:03', '2014-02-07 11:40:03', '', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:40:03', '2014-02-07 11:40:03', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4624', 0, 'revision', '', 0), +(4, 1, '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 'Header Bg Image', '', 'draft', 'closed', 'closed', '', 'of-header_bg_image', '', '', '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=options&p=4', 0, 'options', '', 0), +(5, 1, '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 'Logo', '', 'draft', 'closed', 'closed', '', 'of-logo', '', '', '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=options&p=5', 0, 'options', '', 0), +(6, 1, '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 'Logo Retina', '', 'draft', 'closed', 'closed', '', 'of-logo_retina', '', '', '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=options&p=6', 0, 'options', '', 0), +(7, 1, '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 'Page Title Bg', '', 'draft', 'closed', 'closed', '', 'of-page_title_bg', '', '', '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=options&p=7', 0, 'options', '', 0), +(8, 1, '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 'Page Title Bg Retina', '', 'draft', 'closed', 'closed', '', 'of-page_title_bg_retina', '', '', '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=options&p=8', 0, 'options', '', 0), +(9, 1, '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 'Footerw Bg Image', '', 'draft', 'closed', 'closed', '', 'of-footerw_bg_image', '', '', '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=options&p=9', 0, 'options', '', 0), +(10, 1, '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 'Bg Image', '', 'draft', 'closed', 'closed', '', 'of-bg_image', '', '', '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=options&p=10', 0, 'options', '', 0), +(11, 1, '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 'Content Bg Image', '', 'draft', 'closed', 'closed', '', 'of-content_bg_image', '', '', '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=options&p=11', 0, 'options', '', 0), +(12, 1, '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 'Custom Icon Image', '', 'draft', 'closed', 'closed', '', 'of-custom_icon_image', '', '', '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=options&p=12', 0, 'options', '', 0), +(13, 1, '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 'Custom Icon Image Retina', '', 'draft', 'closed', 'closed', '', 'of-custom_icon_image_retina', '', '', '2014-01-29 21:05:06', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=options&p=13', 0, 'options', '', 0), +(14, 1, '2014-01-29 21:05:10', '0000-00-00 00:00:00', '', 'Flexslider 1', '', 'draft', 'closed', 'closed', '', 'of-flexslider_1', '', '', '2014-01-29 21:05:10', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=options&p=14', 0, 'options', '', 0), +(3873, 1, '2013-10-14 14:52:19', '2013-10-14 14:52:19', '', 'slide_2', '', 'inherit', 'closed', 'closed', '', 'slide_2', '', '', '2013-10-14 14:52:19', '2013-10-14 14:52:19', '', 1394, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/11/slide_21.jpg', 0, 'attachment', 'image/jpeg', 0), +(3875, 1, '2013-10-14 14:54:12', '2013-10-14 14:54:12', '', 'slide_1', '', 'inherit', 'closed', 'closed', '', 'slide_1', '', '', '2013-10-14 14:54:12', '2013-10-14 14:54:12', '', 1394, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/slide_11.jpg', 0, 'attachment', 'image/jpeg', 0), +(3890, 1, '2013-10-14 15:39:01', '2013-10-14 15:39:01', '', 'blog_6', '', 'inherit', 'closed', 'closed', '', 'blog_6', '', '', '2013-10-14 15:39:01', '2013-10-14 15:39:01', '', 207, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/blog_61.jpg', 0, 'attachment', 'image/jpeg', 0), +(3936, 1, '2013-10-14 16:48:57', '2013-10-14 16:48:57', '', 'portfolio_6', '', 'inherit', 'closed', 'closed', '', 'portfolio_6', '', '', '2013-10-14 16:48:57', '2013-10-14 16:48:57', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/portfolio_61.jpg', 0, 'attachment', 'image/jpeg', 0), +(3978, 1, '2013-10-14 17:25:44', '2013-10-14 17:25:44', '', 'bkgd1', '', 'inherit', 'closed', 'closed', '', 'bkgd1', '', '', '2013-10-14 17:25:44', '2013-10-14 17:25:44', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11.jpg', 0, 'attachment', 'image/jpeg', 0), +(4010, 1, '2013-10-14 17:54:54', '2013-10-14 17:54:54', '', 'person', '', 'inherit', 'closed', 'closed', '', 'person', '', '', '2013-10-14 17:54:54', '2013-10-14 17:54:54', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg', 0, 'attachment', 'image/jpeg', 0), +(1876, 1, '2012-11-27 14:42:55', '2012-11-27 14:42:55', 'Vestibulum egestas pharetra felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse dignissim bibendum lectus, quis ornare tortor elementum quis. Aenean semper vehicula elementum. Nulla massa est, faucibus non semper quis, laoreet et sapien. Suspendisse massa odio, aliquet nec commodo et, venenatis ut velit. Pellentesque mauris lorem, dictum vitae feugiat quis, placerat vitae eros. Vestibulum quis purus vel urna convallis faucibus. Etiam vel mauris nisi, non vehicula est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam leo lorem, tincidunt sed molestie id, egestas feugiat quam. Aliquam sed ipsum non nulla tempus mollis elementum ac dolor. Curabitur ac metus et enim pellentesque pellentesque. Nunc ultrices, felis elementum iaculis semper, libero turpis semper erat, in dapibus nisi urna vel mi. Nulla sed nibh libero. Maecenas a libero mauris, sed malesuada dui.\n\nNunc euismod lobortis massa, id sollicitudin augue auctor vel. Integer ornare sollicitudin turpis vitae vestibulum. Curabitur faucibus ullamcorper lorem sed egestas. Pellentesque laoreet auctor eros, et consectetur eros auctor eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum tortor nisi, egestas eget molestie tincidunt, tempus sed justo. Vestibulum ultricies auctor varius. Fusce consequat tincidunt dui, ac adipiscing turpis adipiscing pulvinar. Aliquam erat volutpat. Vivamus eleifend rhoncus nulla in laoreet.', ' Class aptent taciti sociosqu ad litora torquent per conubia nostra pers.', '', 'publish', 'open', 'closed', '', 'class-aptent-taciti-sociosqu-ad-litora-torquent-per-conubia-nostra-pers', '', '', '2012-11-27 14:42:55', '2012-11-27 14:42:55', '', 0, 'http://theme-fusion.com/avadatest/?post_type=avada_faq&p=1876', 0, 'avada_faq', '', 0), +(1877, 1, '2012-11-27 14:43:24', '2012-11-27 14:43:24', 'blog_5Nunc euismod lobortis massa, id sollicitudin augue auctor vel. Integer ornare sollicitudin turpis vitae vestibulum. Curabitur faucibus ullamcorper lorem sed egestas. Pellentesque laoreet auctor eros, et consectetur eros auctor eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum tortor nisi, egestas eget molestie tincidunt, tempus sed justo. Vestibulum ultricies auctor varius. Fusce consequat tincidunt dui, ac adipiscing turpis adipiscing pulvinar. Aliquam erat volutpat. Vivamus eleifend rhoncus nulla in laoreet.\n\nAliquam commodo gravida magna eget tincidunt. Fusce nisi augue, malesuada in commodo quis, euismod quis orci. Integer vitae nisl non augue ullamcorper blandit. Donec vitae nibh ipsum, vitae semper orci. Nunc sed elit in nulla auctor imperdiet. Ut a nisl sit amet odio accumsan laoreet. Sed pharetra lectus in arcu pellentesque et iaculis justo pellentesque. Etiam laoreet sodales sapien, id congue magna malesuada ut. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.Vestibulum tortor nisi, egestas eget molestie tincidunt, tempus sed justo. Vestibulum ultricies auctor varius. Fusce consequat tincidunt dui, ac adipiscing turpis adipiscing pulvinar. Aliquam erat volutpat. Vivamus eleifend rhoncus nulla in laoreet.', 'Fusce nisi augue, malesuada in commodo quis, euismod quis orci integer vitae nisl non.', '', 'publish', 'open', 'closed', '', 'fusce-nisi-augue-malesuada-in-commodo-quis-euismod-quis-orci-integer-vitae-nisl-non', '', '', '2012-11-27 14:43:24', '2012-11-27 14:43:24', '', 0, 'http://theme-fusion.com/avadatest/?post_type=avada_faq&p=1877', 0, 'avada_faq', '', 0), +(1878, 1, '2012-11-27 14:43:43', '2012-11-27 14:43:43', 'Nunc euismod lobortis massa, id sollicitudin augue auctor vel. Integer ornare sollicitudin turpis vitae vestibulum. Curabitur faucibus ullamcorper lorem sed egestas. Pellentesque laoreet auctor eros, et consectetur eros auctor eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum tortor nisi, egestas eget molestie tincidunt, tempus sed justo. Vestibulum ultricies auctor varius. Fusce consequat tincidunt dui, ac adipiscing turpis adipiscing pulvinar. Aliquam erat volutpat. Vivamus eleifend rhoncus nulla in laoreet.\n\nAliquam commodo gravida magna eget tincidunt. Fusce nisi augue, malesuada in commodo quis, euismod quis orci. Integer vitae nisl non augue ullamcorper blandit. Donec vitae nibh ipsum, vitae semper orci. Nunc sed elit in nulla auctor imperdiet. Ut a nisl sit amet odio accumsan laoreet. Sed pharetra lectus in arcu pellentesque et iaculis justo pellentesque. Etiam laoreet sodales sapien, id congue magna malesuada ut. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\n', ' Integer vitae nisl non augue ullamcorper blandit donec vitae nibh ipsums.', '', 'publish', 'open', 'closed', '', 'integer-vitae-nisl-non-augue-ullamcorper-blandit-donec-vitae-nibh-ipsums', '', '', '2012-11-27 14:43:43', '2012-11-27 14:43:43', '', 0, 'http://theme-fusion.com/avadatest/?post_type=avada_faq&p=1878', 0, 'avada_faq', '', 0), +(1879, 1, '2012-11-27 14:44:05', '2012-11-27 14:44:05', 'blog_5Nunc euismod lobortis massa, id sollicitudin augue auctor vel. Integer ornare sollicitudin turpis vitae vestibulum. Curabitur faucibus ullamcorper lorem sed egestas. Pellentesque laoreet auctor eros, et consectetur eros auctor eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum tortor nisi, egestas eget molestie tincidunt, tempus sed justo. Vestibulum ultricies auctor varius. Fusce consequat tincidunt dui, ac adipiscing turpis adipiscing pulvinar. Aliquam erat volutpat. Vivamus eleifend rhoncus nulla in laoreet.\n\nAliquam commodo gravida magna eget tincidunt. Fusce nisi augue, malesuada in commodo quis, euismod quis orci. Integer vitae nisl non augue ullamcorper blandit. Donec vitae nibh ipsum, vitae semper orci. Nunc sed elit in nulla auctor imperdiet. Ut a nisl sit amet odio accumsan laoreet. Sed pharetra lectus in arcu pellentesque et iaculis justo pellentesque. Etiam laoreet sodales sapien, id congue magna malesuada ut. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.Vestibulum tortor nisi, egestas eget molestie tincidunt, tempus sed justo. Vestibulum ultricies auctor varius. Fusce consequat tincidunt dui, ac adipiscing turpis adipiscing pulvinar. Aliquam erat volutpat. Vivamus eleifend rhoncus nulla in laoreet.', 'Vivamus ullamcorper nim sit amet consequat laoreet tortor tortor dictum egestas urna.', '', 'publish', 'open', 'closed', '', 'vivamus-ullamcorper-nim-sit-amet-consequat-laoreet-tortor-tortor-dictum-egestas-urna', '', '', '2012-11-27 14:44:05', '2012-11-27 14:44:05', '', 0, 'http://theme-fusion.com/avadatest/?post_type=avada_faq&p=1879', 0, 'avada_faq', '', 0), +(4053, 1, '2013-10-14 18:33:09', '2013-10-14 18:33:09', '', 'elastic1', '', 'inherit', 'closed', 'closed', '', 'elastic1', '', '', '2013-10-14 18:33:09', '2013-10-14 18:33:09', '', 4052, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/elastic11.jpg', 0, 'attachment', 'image/jpeg', 0), +(4054, 1, '2013-10-14 18:33:10', '2013-10-14 18:33:10', '', 'elastic2', '', 'inherit', 'closed', 'closed', '', 'elastic2', '', '', '2013-10-14 18:33:10', '2013-10-14 18:33:10', '', 4052, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/elastic21.jpg', 0, 'attachment', 'image/jpeg', 0), +(4069, 1, '2013-10-14 19:18:59', '2013-10-14 19:18:59', '', 'ipad', '', 'inherit', 'closed', 'closed', '', 'ipad', '', '', '2013-10-14 19:18:59', '2013-10-14 19:18:59', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/ipad1.png', 0, 'attachment', 'image/png', 0), +(4073, 1, '2013-10-14 21:35:42', '2013-10-14 21:35:42', '', 'slide_5', '', 'inherit', 'closed', 'closed', '', 'slide_5', '', '', '2013-10-14 21:35:42', '2013-10-14 21:35:42', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/slide_51.jpg', 0, 'attachment', 'image/jpeg', 0), +(4074, 1, '2013-10-15 15:07:22', '2013-10-15 15:07:22', '', 'slide_3', '', 'inherit', 'closed', 'closed', '', 'slide_3', '', '', '2013-10-15 15:07:22', '2013-10-15 15:07:22', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/slide_31.jpg', 0, 'attachment', 'image/jpeg', 0), +(4076, 1, '2013-10-15 15:37:30', '2013-10-15 15:37:30', '', 'slide_4', '', 'inherit', 'closed', 'closed', '', 'slide_4', '', '', '2013-10-15 15:37:30', '2013-10-15 15:37:30', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/slide_41.jpg', 0, 'attachment', 'image/jpeg', 0), +(5065, 1, '2014-02-27 16:16:12', '2014-02-27 15:16:12', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
horse-021-1024x654
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="3"]Nuestros sementales[/title]\r\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\r\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\r\n[/one_half]\r\n[separator top="55"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="3"]Nuestras yeguas[/title]\r\nPara poder cumplir nuestro objetivo, todas las yeguas han sido seleccionadas muy cuidadosamente entre las mejores familias maternas para producir potros que serán destinados a competir en el máximo nivel internacional.\r\n[/one_half]\r\n\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-27 16:16:12', '2014-02-27 15:16:12', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5064, 1, '2014-02-27 16:15:32', '2014-02-27 15:15:32', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
horse-021-1024x654
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="3"]Nuestros sementales[/title]\r\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\r\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\r\n[/one_half]\r\n[separator top="55"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
horse-03-1024x654
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="3"]Nuestras yeguas[/title]\r\nPara poder cumplir nuestro objetivo, todas las yeguas han sido seleccionadas muy cuidadosamente entre las mejores familias maternas para producir potros que serán destinados a competir en el máximo nivel internacional.\r\n[/one_half]\r\n\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-27 16:15:32', '2014-02-27 15:15:32', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4461, 1, '2014-01-29 21:07:00', '2014-01-29 21:07:00', '', 'Contacto', '', 'publish', 'open', 'open', '', 'features', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4461', 46, 'nav_menu_item', '', 0), +(4633, 1, '2014-02-07 11:54:14', '2014-02-07 11:54:14', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="100px" paddingBottom="100px"]\r\n\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:54:14', '2014-02-07 11:54:14', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4633', 0, 'revision', '', 0), +(4632, 1, '2014-02-07 11:52:31', '2014-02-07 11:52:31', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="100px" paddingBottom="100px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:52:31', '2014-02-07 11:52:31', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4632', 0, 'revision', '', 0), +(4631, 1, '2014-02-07 11:50:47', '2014-02-07 11:50:47', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="100px" paddingBottom="100px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n\r\n\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:50:47', '2014-02-07 11:50:47', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4631', 0, 'revision', '', 0), +(4621, 1, '2014-02-07 11:37:03', '2014-02-07 11:37:03', '', 'page_title_bg', '', 'inherit', 'open', 'open', '', 'page_title_bg', '', '', '2014-02-07 11:37:03', '2014-02-07 11:37:03', '', 7, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/page_title_bg.png', 0, 'attachment', 'image/png', 0), +(4622, 1, '2014-02-07 11:37:04', '2014-02-07 11:37:04', '', 'page_title_bg@2x', '', 'inherit', 'open', 'open', '', 'page_title_bg2x', '', '', '2014-02-07 11:37:04', '2014-02-07 11:37:04', '', 7, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/page_title_bg@2x.png', 0, 'attachment', 'image/png', 0), +(4623, 1, '2014-02-07 11:40:03', '2014-02-07 11:40:03', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" image_width="300" image_height="200" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="200" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="200" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
horse-021-1024x654
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestros sementales[/title]\r\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\r\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\r\n[/two_third] \r\n[separator top="55"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
Yegua
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestras yeguas[/title]\r\nPara poder cumplir nuestro objetivo, todas las yeguas han sido seleccionadas muy cuidadosamente entre las mejores familias maternas para producir potros que serán destinados a competir en el máximo nivel internacional.\r\n[/two_third]\r\n\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'publish', 'open', 'open', '', 'nosotros', '', '', '2014-02-27 16:22:36', '2014-02-27 15:22:36', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=4623', 0, 'page', '', 0), +(4625, 1, '2014-02-26 20:09:22', '2014-02-26 19:09:22', '[separator top="-55" style="none"]\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\n[one_half last="no"]\n[separator top="50"]\n
Equipo
\n[/one_half]\n[one_half last="yes"]\n[title size="2"]Filosofía[/title]\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\n[/one_half]\n[/fullwidth]\n\n[separator top="20"]\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\n[separator top="10"]\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\n\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\n\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\n\n[/content_boxes]\n[separator top="55"]\n\n[/fullwidth]\n\n\n\n[separator top="10"]\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\n[one_half last="no"]\n[separator top="50"]\n
\n[/one_half]\n[one_half last="yes"]\n[title size="3"]Nuestros sementales[/title]\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\n[/one_half]\n[/fullwidth]\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-autosave-v1', '', '', '2014-02-26 20:09:22', '2014-02-26 19:09:22', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4625', 0, 'revision', '', 0), +(191, 1, '2012-07-31 16:54:02', '2012-07-31 16:54:02', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricie est justos.', 'Mauris Fringilla Voluts', '', 'trash', 'closed', 'closed', '', 'mauris-fringilla-voluts', '', '', '2014-02-25 11:24:35', '2014-02-25 11:24:35', '', 0, 'http://theme-fusion.com/avada/?post_type=avada_portfolio&p=191', 0, 'avada_portfolio', '', 0), +(192, 1, '2012-07-31 16:43:55', '2012-07-31 16:43:55', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim ornare nisi, vitae mattis nulla ante id dui. Ut lectus purus, commodo et tincidunt vel, interdum sed lectus. Vestibulum adipiscing tempor nisi id elementu sadips ipsums dolores uns fugiats gravida nam elit vols nulla dolores amet untras sitsers.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.', 'Suspendisse Pharetra Urna', '', 'trash', 'closed', 'closed', '', 'suspendisse-pharetra-urna', '', '', '2014-02-25 11:24:36', '2014-02-25 11:24:36', '', 0, 'http://theme-fusion.com/avada/?post_type=avada_portfolio&p=192', 0, 'avada_portfolio', '', 0), +(193, 1, '2012-07-31 16:44:55', '2012-07-31 16:44:55', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim ornare nisi, vitae mattis nulla ante id dui. Ut lectus purus, commodo et tincidunt vel, interdum sed lectus. Vestibulum adipiscing tempor nisi id elementu sadips ipsums dolores uns fugiats gravida nam elit vols nulla dolores amet untras sitsers.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'Curabitur Malesuada Lorem', '', 'trash', 'closed', 'closed', '', 'curabitur-malesuada-lorem', '', '', '2014-02-25 11:24:36', '2014-02-25 11:24:36', '', 0, 'http://theme-fusion.com/avada/?post_type=avada_portfolio&p=193', 0, 'avada_portfolio', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(195, 1, '2012-07-31 16:53:51', '2012-07-31 16:53:51', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim ornare nisi, vitae mattis nulla ante id dui. Ut lectus purus, commodo et tincidunt vel, interdum sed lectus. Vestibulum adipiscing tempor nisi id elementu sadips ipsums dolores uns fugiats gravida nam elit vols nulla dolores amet untras sitsers.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus. Proin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorems metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum.', 'Proin Sodales Quam', '', 'trash', 'open', 'open', '', 'proin-sodales-quam', '', '', '2014-02-25 11:24:35', '2014-02-25 11:24:35', '', 0, 'http://theme-fusion.com/avada/?post_type=avada_portfolio&p=195', 0, 'avada_portfolio', '', 0), +(196, 1, '2012-07-31 16:53:09', '2012-07-31 16:53:09', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim ornare nisi, vitae mattis nulla ante id dui. Ut lectus purus, commodo et tincidunt vel, interdum sed lectus. Vestibulum adipiscing tempor gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et.', 'Nam Viverra Euismod', '', 'trash', 'closed', 'closed', '', 'nam-viverra-euismod', '', '', '2014-02-25 11:24:36', '2014-02-25 11:24:36', '', 0, 'http://theme-fusion.com/avada/?post_type=avada_portfolio&p=196', 0, 'avada_portfolio', '', 0), +(198, 1, '2012-07-31 17:00:15', '2012-07-31 17:00:15', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim ornare nisi, vitae mattis nulla ante id dui. Ut lectus purus, commodo et tincidunt vel, interdum sed lectus. Vestibulum adipiscing tempor nisi id elementu sadips ipsums dolores uns fugiats gravida nam elit vols nulla dolores amet untras sitsers.\n\nCras id erat arcu. Suspendisse nec lacinia eros. Morbi in nisl ut quam vulputate elementum. Donec ornare, turpis eget rhoncus pharetra, nunc augue porta orci, eu volutpat enim nisi ac risus. Proin a tortor id orci fermentum sollicitudin tincidunt in magna. Quisque semper, leo a malesuada dictum, orci massa blandit diam, nec porttitor quam nunc laoreet odio. Maecenas sed felis ante, non cursus justo. Vivamus semper euismod vulputate. Praesent a hendrerit sapien. Sed dapibus leo rutrum lorem convallis et commodo urna tempus. Quisque hendrerit imperdiet erat id fringilla. Vivamus vitae odio nisi, sit amet pellentesque justo. Pellentesque enim enim, ultricies sit amet blandit a, sagittis vel dolor. Cras lorem purus, posuere sed hendrerit ac, varius vel eros. Quisque nisl ante, posuere pulvinar bibendum a, malesuada sed mi.', 'Donec Ornare Turpis Eget', '', 'trash', 'open', 'closed', '', 'donec-ornare-turpis-eget', '', '', '2014-02-25 11:24:35', '2014-02-25 11:24:35', '', 0, 'http://theme-fusion.com/avada/?post_type=avada_portfolio&p=198', 0, 'avada_portfolio', '', 0), +(1880, 1, '2012-11-27 14:44:31', '2012-11-27 14:44:31', 'Nunc euismod lobortis massa, id sollicitudin augue auctor vel. Integer ornare sollicitudin turpis vitae vestibulum. Curabitur faucibus ullamcorper lorem sed egestas. Pellentesque laoreet auctor eros, et consectetur eros auctor eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum tortor nisi, egestas eget molestie tincidunt, tempus sed justo. Vestibulum ultricies auctor varius. Fusce consequat tincidunt dui, ac adipiscing turpis adipiscing pulvinar. Aliquam erat volutpat. Vivamus eleifend rhoncus nulla in laoreet.\n\nAliquam commodo gravida magna eget tincidunt. Fusce nisi augue, malesuada in commodo quis, euismod quis orci. Integer vitae nisl non augue ullamcorper blandit. Donec vitae nibh ipsum, vitae semper orci. Nunc sed elit in nulla auctor imperdiet. Ut a nisl sit amet odio accumsan laoreet. Sed pharetra lectus in arcu pellentesque et iaculis justo pellentesque. Etiam laoreet sodales sapien, id congue magna malesuada ut. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.', 'Fusce nisi malesuada in commodo quis, euismod quis orci on augue ullamcorpers.', '', 'publish', 'open', 'closed', '', 'fusce-nisi-malesuada-in-commodo-quis-euismod-quis-orci-onteger-vitae-nisl-non-augue-ullamcorpers', '', '', '2012-11-27 14:44:31', '2012-11-27 14:44:31', '', 0, 'http://theme-fusion.com/avadatest/?post_type=avada_faq&p=1880', 0, 'avada_faq', '', 0), +(1881, 1, '2012-11-27 14:44:54', '2012-11-27 14:44:54', 'blog_5Nunc euismod lobortis massa, id sollicitudin augue auctor vel. Integer ornare sollicitudin turpis vitae vestibulum. Curabitur faucibus ullamcorper lorem sed egestas. Pellentesque laoreet auctor eros, et consectetur eros auctor eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum tortor nisi, egestas eget molestie tincidunt, tempus sed justo. Vestibulum ultricies auctor varius. Fusce consequat tincidunt dui, ac adipiscing turpis adipiscing pulvinar. Aliquam erat volutpat. Vivamus eleifend rhoncus nulla in laoreet.\n\nAliquam commodo gravida magna eget tincidunt. Fusce nisi augue, malesuada in commodo quis, euismod quis orci. Integer vitae nisl non augue ullamcorper blandit. Donec vitae nibh ipsum, vitae semper orci. Nunc sed elit in nulla auctor imperdiet. Ut a nisl sit amet odio accumsan laoreet. Sed pharetra lectus in arcu pellentesque et iaculis justo pellentesque. Etiam laoreet sodales sapien, id congue magna malesuada ut. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.Vestibulum tortor nisi, egestas eget molestie tincidunt, tempus sed justo. Vestibulum ultricies auctor varius. Fusce consequat tincidunt dui, ac adipiscing turpis adipiscing pulvinar. Aliquam erat volutpat. Vivamus eleifend rhoncus nulla in laoreet.', 'Curabitur eget leo at velit imperdiet varius eu ipsum vitae velit congue iaculis vitaes.', '', 'publish', 'open', 'closed', '', 'curabitur-eget-leo-at-velit-imperdiet-varius-eu-ipsum-vitae-velit-congue-iaculis-vitaes', '', '', '2012-11-27 14:44:54', '2012-11-27 14:44:54', '', 0, 'http://theme-fusion.com/avadatest/?post_type=avada_faq&p=1881', 0, 'avada_faq', '', 0), +(4462, 1, '2014-01-29 21:07:01', '2014-01-29 21:07:01', '', 'Shortcodes', '', 'publish', 'open', 'open', '', 'shortcodes', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4462', 58, 'nav_menu_item', '', 0), +(4466, 1, '2014-01-29 21:07:01', '2014-01-29 21:07:01', '', 'Shop Shortcodes', '', 'publish', 'open', 'open', '', 'shop-shortcodes', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4466', 59, 'nav_menu_item', '', 0), +(4467, 1, '2014-01-29 21:07:01', '2014-01-29 21:07:01', '', 'Instalaciones', '', 'publish', 'open', 'open', '', 'portfolio', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4467', 35, 'nav_menu_item', '', 0), +(4469, 1, '2014-01-29 21:07:01', '2014-01-29 21:07:01', '', 'Nosotros', '', 'publish', 'open', 'open', '', 'home', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4469', 1, 'nav_menu_item', '', 0), +(1348, 1, '2012-11-11 07:39:32', '0000-00-00 00:00:00', '', 'Logo', '', 'draft', 'closed', 'closed', '', 'of-logo', '', '', '2012-11-11 07:39:32', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadatest/?post_type=options&p=1348', 0, 'options', '', 0), +(1394, 1, '2012-11-15 00:59:08', '0000-00-00 00:00:00', '', 'Flexslider 1', '', 'draft', 'closed', 'closed', '', 'of-flexslider_1', '', '', '2012-11-15 00:59:08', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadatest/?post_type=options&p=1394', 0, 'options', '', 0), +(1395, 1, '2012-11-15 00:59:08', '0000-00-00 00:00:00', '', 'Flexslider 2', '', 'draft', 'closed', 'closed', '', 'of-flexslider_2', '', '', '2012-11-15 00:59:08', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadatest/?post_type=options&p=1395', 0, 'options', '', 0), +(1396, 1, '2012-11-15 00:59:08', '0000-00-00 00:00:00', '', 'Flexslider 3', '', 'draft', 'closed', 'closed', '', 'of-flexslider_3', '', '', '2012-11-15 00:59:08', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadatest/?post_type=options&p=1396', 0, 'options', '', 0), +(1397, 1, '2012-11-15 00:59:08', '0000-00-00 00:00:00', '', 'Flexslider 4', '', 'draft', 'closed', 'closed', '', 'of-flexslider_4', '', '', '2012-11-15 00:59:08', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadatest/?post_type=options&p=1397', 0, 'options', '', 0), +(1398, 1, '2012-11-15 00:59:08', '0000-00-00 00:00:00', '', 'Flexslider 5', '', 'draft', 'closed', 'closed', '', 'of-flexslider_5', '', '', '2012-11-15 00:59:08', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadatest/?post_type=options&p=1398', 0, 'options', '', 0), +(3088, 1, '2013-02-09 20:01:48', '0000-00-00 00:00:00', '', 'Logo Retina', '', 'draft', 'closed', 'closed', '', 'of-logo_retina', '', '', '2013-02-09 20:01:48', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avada2/?post_type=options&p=3088', 0, 'options', '', 0), +(3522, 1, '2013-04-08 23:12:45', '0000-00-00 00:00:00', '', 'Page Title Bg', '', 'draft', 'closed', 'closed', '', 'of-page_title_bg', '', '', '2013-04-08 23:12:45', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=options&p=3522', 0, 'options', '', 0), +(3523, 1, '2013-04-08 23:12:45', '0000-00-00 00:00:00', '', 'Page Title Bg Retina', '', 'draft', 'closed', 'closed', '', 'of-page_title_bg_retina', '', '', '2013-04-08 23:12:45', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=options&p=3523', 0, 'options', '', 0), +(3605, 1, '2013-05-24 19:12:06', '0000-00-00 00:00:00', '', 'Header Bg Image', '', 'draft', 'closed', 'closed', '', 'of-header_bg_image', '', '', '2013-05-24 19:12:06', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=options&p=3605', 0, 'options', '', 0), +(3606, 1, '2013-05-24 19:12:06', '0000-00-00 00:00:00', '', 'Bg Image', '', 'draft', 'closed', 'closed', '', 'of-bg_image', '', '', '2013-05-24 19:12:06', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=options&p=3606', 0, 'options', '', 0), +(4470, 1, '2014-01-29 21:07:01', '2014-01-29 21:07:01', '', 'Shop Style', '', 'publish', 'open', 'open', '', 'shop-style', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4470', 2, 'nav_menu_item', '', 0), +(4471, 1, '2014-01-29 21:07:01', '2014-01-29 21:07:01', '', 'Portfolio Style', '', 'publish', 'open', 'open', '', 'portfolio-style', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4471', 5, 'nav_menu_item', '', 0), +(4472, 1, '2014-01-29 21:07:01', '2014-01-29 21:07:01', '', 'Blog Style', '', 'publish', 'open', 'open', '', 'blog-style', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4472', 8, 'nav_menu_item', '', 0), +(4473, 1, '2014-01-29 21:07:01', '2014-01-29 21:07:01', '', 'Magazine Style', '', 'publish', 'open', 'open', '', 'magazine-style', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4473', 11, 'nav_menu_item', '', 0), +(4474, 1, '2012-07-30 23:32:32', '2012-07-30 23:32:32', '[content_boxes]\n[content_box title="Responsive Design" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size, its incredibly flexible. Try resizing your browser window to see the adaptation in action.[/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both of the sliders have awesome plugins making it super easy to use.[/content_box]\n[content_box last="yes" title="Unlimited Colors"  image="" icon="tint"  link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Any of the elements can be changed, including the super awesome CSS3 gradients![/content_box]\n[/content_boxes]\n\n[title size="2"]Recent Work[/title]\n[recent_works][/recent_works]\n\n[separator top="80"]\n\n[one_half last="no"]\n[title size="2"]Why Choose Us[/title]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase important content
  • \n
  • Unlimited color options with a backed color picker, including the gradients
  • \n
  • Multiple layout options for home pages, portfolio section & blog section
  • \n
  • We offer free support because we care about your site as much as you do.
  • \n
\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]What Clients Say[/title]\n[testimonials]\n[testimonial name="BlueOrchard" company="Crucio Theme"]To anybody thinking of buying this theme – buy it! The theme itself is amazing, and on top of that, the support is outstanding! I wanted some features put in, and the theme developer was more than willing to help me out![/testimonial]\n[testimonial name="Flygirly" company="Imperio Theme"]I would like to extend a special thank you for your excellent support. Is has been a great experience. I love this template and more so because you provided excellent support and feedback.Thank you for such a great template! A must have![/testimonial]\n[testimonial name="FWN" company="Crucio Theme"]Thank You for the speedy reply and the addition to the next update ThemeFusion, now purchased![/testimonial]\n[testimonial name="Utcrayons" company="Imperio Theme"]It’s my first time buying on here and I’m very please, so easy to customize! Cheers for your help again, very satisfied customer!!!![/testimonial]\n[testimonial name="isaed" company="Imperio Theme"]Themes like yours make people want to upgrade their business quality to fit in such beauty … really thanks and all the best luck in sales.[/testimonial]\n[/testimonials]\n[/one_half]', 'Home Version 2', '', 'publish', 'open', 'open', '', 'home', '', '', '2012-07-30 23:32:32', '2012-07-30 23:32:32', '', 0, 'http://theme-fusion.com/avada/?page_id=6', 0, 'page', '', 0), +(4475, 1, '2012-07-30 23:33:19', '2012-07-30 23:33:19', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="35" meta_all="yes" meta_author="yes" meta_categories="yes" meta_comments="yes" meta_date="yes" meta_link="yes" paging="no" scrolling="pagination" strip_html="yes" layout="large"][/blog]', 'Blog Large', '', 'publish', 'open', 'open', '', 'blog', '', '', '2012-07-30 23:33:19', '2012-07-30 23:33:19', '', 0, 'http://theme-fusion.com/avada/?page_id=9', 0, 'page', '', 0), +(33, 1, '2012-07-31 02:06:41', '2012-07-31 02:06:41', '[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\r\n\r\n[content_boxes]\r\n[content_box title="Responsive Design" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it happen.[/content_box]\r\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\r\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including the gradients![/content_box]\r\n[content_box last="yes" title="500+ Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings and body copy with ease![/content_box]\r\n[/content_boxes]\r\n\r\n[three_fourth last="no"]\r\n[title size="2"]Latest From The Blog[/title]\r\n[recent_posts columns="3" number_posts="3" cat_id="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="15"][/recent_posts]\r\n[/three_fourth]\r\n\r\n[one_fourth last="yes"]\r\n[title size="2"]What Client''s Say[/title]\r\n[testimonials]\r\n[testimonial name="Borchard" gender="male" company="Crucio Theme"]To anybody thinking of buying this theme – buy it! The theme itself is amazing, and on top of that, the support is outstanding! I wanted some features put in, and the theme developer was more than willing to help me out![/testimonial]\r\n[testimonial name="Flygirly" gender="female" company="Imperio Theme"]I would like to extend a special thank you for your excellent support. Is has been a great experience. I love this template and more so because you provided excellent support and feedback.Thank you for such a great template! A must have![/testimonial]\r\n[testimonial name="FWN" gender="female" company="Crucio Theme"]Thank You for the speedy reply and the addition to the next update ThemeFusion, now purchased![/testimonial]\r\n[testimonial name="Utcrayons" gender="male" company="Imperio Theme"]It’s my first time buying on here and I’m very please, so easy to customize! Cheers for your help again, very satisfied customer!!!![/testimonial]\r\n[testimonial name="isaed" gender="male" company="Imperio Theme"]Themes like yours make people want to upgrade their business quality to fit in such beauty … really thanks and all the best luck in sales.[/testimonial]\r\n[/testimonials]\r\n[/one_fourth]', 'Home', '', 'publish', 'open', 'closed', '', 'home-2', '', '', '2014-02-14 15:37:58', '2014-02-14 15:37:58', '', 0, 'http://theme-fusion.com/avada/?page_id=33', 0, 'page', '', 0), +(35, 1, '2012-07-31 02:06:57', '2012-07-31 02:06:57', '[one_third last="no"]\n\n

Ultra-Responsive Design

\nAvada is fully responsive and can adapt to any screen size, its incredibly fast and flexible. Try resizing your browser window to see the adaptation in action.\n[/one_third]\n\n[one_third last="no"]\n\n

Awesome Powerful Sliders

\nAvada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both of the sliders have awesome plugins making it super easy to use.\n[/one_third]\n\n[one_third last="yes"]\n\n

Loaded With Options

\nThis theme is loaded, unlimited color options, 500+ google fonts, 4 post types, advanced theme options, 3 home page layouts, boxed & wide to name a few.\n[/one_third]\n\n[separator top="40"]\n\n[one_half last="no"]\n[tabs tab1="Tab Data #1" tab2="Tab Data #2" tab3="Tab Data #3"]\n\n[tab id=1]\n[fontawesome icon="random" circle="yes" size="large"]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo.\n[/tab]\n[tab id=2]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo. amets dolores.[/tab]\n[tab id=3]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo. amets dolores.[/tab]\n[/tabs]\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Why Choose Us[/title]\n
    \n
      \n
        \n
      • Fully responsive so your content will always look good on any screen size
      • \n
      • Awesome sliders give you the opportunity to showcase your content
      • \n
      • Unlimited color options with a backed color picker, including the gradients
      • \n
      • Multiple layout options for home pages, portfolio and blog section
      • \n
      • We offer free support because we care about your site as much as you.
      • \n
      \n
    \n
\n[/one_half]\n\n[separator top="10"]\n\n[title size="2"]Our Happy Clients[/title]\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]', 'Home Version 3', '', 'publish', 'open', 'open', '', 'home-version-3', '', '', '2012-07-31 02:06:57', '2012-07-31 02:06:57', '', 0, 'http://theme-fusion.com/avada/?page_id=35', 0, 'page', '', 0), +(54, 1, '2012-07-31 02:10:38', '2012-07-31 02:10:38', '\n[separator top="50"]\n[title size="2"]Sample Feature Page[/title]\nThis is s sample feature page from our live demo. You will notice that there are a lot more on our live demo, but they are all the exact same page, just with a different image and text. For size purpsoes, we only included a few of these, including this sample page.', 'Sample Feature Page', '', 'publish', 'open', 'open', '', 'great-support', '', '', '2012-07-31 02:10:38', '2012-07-31 02:10:38', '', 80, 'http://theme-fusion.com/avada/?page_id=54', 0, 'page', '', 0), +(69, 1, '2012-07-31 02:15:48', '2012-07-31 02:15:48', '[one_half last="no"]\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Welcome To Avada[/title]\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\n[/one_half]\n\n[one_half last="no"]\n[title size="2"]Who Is Avada[/title]\n[accordian]\n[toggle title="Our Company Mission"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="We Can Deliver On Projects"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[/accordian]\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Our Crazy Skills[/title]\n[progress percentage="90"]Web Design[/progress][progress percentage="95"]HTML/CSS[/progress][progress percentage="85"]Graphic Design[/progress]\n[progress percentage="75"]WordPress[/progress]\n[/one_half]\n\n[separator top="30"]\n\n[title size="2"]Meet Our Team[/title]\n[one_third last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[one_third last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[one_third last="yes"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/portfolio_61.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[separator top="60"]\n[title size="2"]Our Happy Clients[/title]\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]', 'About Us Page 1', '', 'publish', 'open', 'open', '', 'about-us', '', '', '2012-07-31 02:15:48', '2012-07-31 02:15:48', '', 0, 'http://theme-fusion.com/avada/?page_id=69', 0, 'page', '', 0), +(72, 1, '2012-07-31 02:16:22', '2012-07-31 02:16:22', '[one_half last="no"]\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Avada’s Four Areas of Expertise[/title]\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnam aliuam quaerat voluptatem.\n[/one_half]\n\n[content_boxes]\n[content_box title="Responsive Design" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it happen.[/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including the gradients![/content_box]\n[content_box last="yes" title="500+ Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings and body copy with ease![/content_box]\n[/content_boxes]\n\n\n[title size="2"]Avada’s Other Services[/title]\n

Lid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores tium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi archgit, magnam aliquam quaerat voluptatem. Asunt in anim uis aute irure dolor ins. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes ser.

\n[tabs tab1="Service #1" tab2="Service #2" tab3="Service #3" tab4="Service #4" tab5="Service #5" tab6="Service #6"]\n\n[tab id=1]\n[fontawesome icon="random" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Etharums ser quidem rerum. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.\n
    \n
  • Cras rutrum leo at odio volutpat donec fermentum porttitor nunc maecenas quis Etharums ser quidem rerum facilis
  • \n
  • Aenean faucibus sapien a odios suspendisse venenatis euismod cras dolores amets unsers fugiats.
  • \n
\n\n[/tab]\n[tab id=2][fontawesome icon="magic" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerums facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni uns.\n[/tab]\n\n[tab id=3][fontawesome icon="desktop" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Etharums ser quidem rerum. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.\n
    \n
  • Cras rutrum leo at odio volutpat donec fermentum porttitor nunc maecenas quis Etharums ser quidem rerum facilis
  • \n
  • Aenean faucibus sapien a odios suspendisse venenatis euismod cras dolores amets unsers fugiats.
  • \n
\n[/tab]\n\n[tab id=4][fontawesome icon="magic" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerums facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni uns.\n[/tab]\n\n[tab id=5]\n[fontawesome icon="tint" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Etharums ser quidem rerum. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.\n
    \n
  • Cras rutrum leo at odio volutpat donec fermentum porttitor nunc maecenas quis Etharums ser quidem rerum facilis
  • \n
  • Aenean faucibus sapien a odios suspendisse venenatis euismod cras dolores amets unsers fugiats.
  • \n
\n[/tab]\n\n[tab id=6][fontawesome icon="thumbs-up" circle="yes" size="large"]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerums facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni uns.\n[/tab]\n[/tabs]\n\n[separator top="80"]\n\n[one_half last="no"]\n[title size="2"]Why Choose Us[/title]\n
    \n
      \n
        \n
      • Fully responsive so your content will always look good on any screen size
      • \n
      • Awesome sliders give you the opportunity to showcase important content
      • \n
      • Unlimited color options with a backed color picker, including the gradients
      • \n
      • Multiple layout options for home pages, portfolio section & blog section
      • \n
      • We offer free support because we care about your site as much as you do.
      • \n
      \n
    \n
\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]What Client''s Say[/title]\n[testimonials]\n[testimonial name="BlueOrchard" company="Crucio Theme"]To anybody thinking of buying this theme – buy it! The theme itself is amazing, and on top of that, the support is outstanding! I wanted some features put in, and the theme developer was more than willing to help me out![/testimonial]\n[testimonial name="Flygirly" company="Imperio Theme"]I would like to extend a special thank you for your excellent support. Is has been a great experience. I love this template and more so because you provided excellent support and feedback.Thank you for such a great template! A must have![/testimonial]\n[testimonial name="FWN" company="Crucio Theme"]Thank You for the speedy reply and the addition to the next update ThemeFusion, now purchased![/testimonial]\n[testimonial name="Utcrayons" company="Imperio Theme"]It’s my first time buying on here and I’m very please, so easy to customize! Cheers for your help again, very satisfied customer!!!![/testimonial]\n[testimonial name="isaed" company="Imperio Theme"]Themes like yours make people want to upgrade their business quality to fit in such beauty … really thanks and all the best luck in sales.[/testimonial]\n[/testimonials]\n[/one_half]', 'Services Page 1', '', 'publish', 'open', 'open', '', 'services', '', '', '2012-07-31 02:16:22', '2012-07-31 02:16:22', '', 0, 'http://theme-fusion.com/avada/?page_id=72', 0, 'page', '', 0), +(80, 1, '2012-07-31 02:20:18', '2012-07-31 02:20:18', '\n\n[separator top="50"]\n[title size="2"]Avada Includes A Side Navigation Template[/title]\nWith Avada''s side navigation template, you can add even more content to your site. With the page template, its very easy to set up and use and it can be positioned on the left or right. Check out all other features listed in the side navigation menu!', 'Side Navigation', '', 'publish', 'open', 'open', '', 'side-navigation', '', '', '2012-07-31 02:20:18', '2012-07-31 02:20:18', '', 0, 'http://theme-fusion.com/avada/?page_id=80', 0, 'page', '', 0), +(84, 1, '2012-07-31 02:17:47', '2012-07-31 02:17:47', '\n\n[separator top="50"]\n[title size="2"]This is Avada’s Full Width Page Option[/title]\nAt vero eos et accusamus et iusto odios un dignissimos ducimus qui blan ditiis prasixer esentium voluptatum un deleniti atqueste sites excep turiitate non providentsimils. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, consequunturser magni dolores eos qui ratione voluptatem sequi nesciunt. Lorem ipsum dolor sit amet consect adipiscing elit, sed diam non ummy nibh euismod tincidunt ut laoreet, dolore magna aliquam.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Proin tristique eleifend ipsum non facilisis. Donec elementum auctor orci in dictum. Donec non tortor mauris, in iaculis leo. Aenean orci arcu, fringilla adipiscing posuere vitae, congue id nunc. Phasellus nisl dolor, blandit a varius sit amet, dictum in libero. Integer ultricies tempor ornare. Mauris vitae tortor quis lorem feugiat varius non sed turpis. Suspendisse potenti. Vestibulum non lectus tincidunt magna euismod imperdiet sit amet eu lectus. In hac habitasse platea dictumst. Vestibulum vestibulum, turpis quis malesuada molestie, quam ante aliquet lacus, quis molestie urna sapien at lectus. Integer id semper elit. Cras neque nulla, convallis non commodo et, euismod non tortor. Mauris eu facilisis nisl. Ut eu tincidunt mauris.\n
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper susci. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quirs.
\nNam semper, ligula id mattis varius, ligula tortor tempus elit, a hendrerit nisi dui et velit. Ut rhoncus porta sapien euismod dictum. Fusce dictum eleifend dignissim. Quisque vel condimentum nisl. Pellentesque aliquet felis eget massa elementum suscipit. Vivamus ut ultricies nibh. Duis vitae sapien arcu. aPellentesque nisi ligula, facilisis sed rutrum sit amet, lobortis at justo. Suspendisse accumsan elementum suscipit. Pellentesque pharetra pretium neque, a tincidunt enim faucibus non. Fusce ultrices accumsan ultrices. Cras malesuada eros et nibh laoreet dictum. Duis metus turpis, sit amet, consequat vel arcu. Vestibulum rhoncus velit eget augue adipiscing vitae imperdiet turpis is sed rutrum sit amet, lobortis at justo. Suspendisse accumsan eleme eleifend.\n\nPhasellus quis ligula in odio aliquet pellentesque. Sed nec nunc quis mauris pretium commodo et cursus velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris eu nunc a erat egestas dignissim. Vivamus eget orci dui. Cras varius arcu vitae dolor posuere facilisis. Nunc sit amet nisi metus. Morbi pellentesque venenatis rhoncus. Cras sed sapien purus, eu dignissim ipsum. Duis quam sapien, interdum nec consequat nec, pellentesque vitae erat. Praesent sollicitudin tellus ac nisl tincidunt ac tincidunt nulla ultricis sed rutrum sit amet, lobortis at justo. Suspendisse accumsan eleme dolores fugiats voluptas amets sadips ies.', 'Full Width', '', 'publish', 'open', 'open', '', 'full-width', '', '', '2012-07-31 02:17:47', '2012-07-31 02:17:47', '', 0, 'http://theme-fusion.com/avada/?page_id=84', 0, 'page', '', 0), +(5030, 1, '2014-02-26 18:00:39', '2014-02-26 17:00:39', '', 'Competition', '', 'inherit', 'closed', 'open', '', '5027-revision-v1', '', '', '2014-02-26 18:00:39', '2014-02-26 17:00:39', '', 5027, 'http://127.0.0.1:4001/wordpress/5027-revision-v1/', 0, 'revision', '', 0), +(5031, 1, '2014-02-26 18:01:27', '2014-02-26 17:01:27', '[two_third last="no"]\r\n[title size="3"]Contact form[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title="false"]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="3"]Double R Group[/title]\r\n

[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] Calle de Almagro, 21, 28010 Madrid

\r\n

[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633

\r\n

[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com

\r\n

[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com

\r\n[/one_third]\r\n', 'Contact', '', 'publish', 'open', 'open', '', 'contact', '', '', '2014-02-26 18:01:45', '2014-02-26 17:01:45', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=5031', 0, 'page', '', 0), +(94, 1, '2012-07-31 02:20:13', '2012-07-31 02:20:13', '', '1 Column Classic', '', 'publish', 'open', 'open', '', '1-column', '', '', '2012-07-31 02:20:13', '2012-07-31 02:20:13', '', 0, 'http://theme-fusion.com/avada/?page_id=94', 0, 'page', '', 0), +(96, 1, '2012-07-31 02:20:24', '2012-07-31 02:20:24', '', '2 Column Classic', '', 'publish', 'open', 'open', '', '2-column', '', '', '2012-07-31 02:20:24', '2012-07-31 02:20:24', '', 0, 'http://theme-fusion.com/avada/?page_id=96', 0, 'page', '', 0), +(98, 1, '2012-07-31 02:20:35', '2012-07-31 02:20:35', '', '3 Column Classic', '', 'publish', 'open', 'open', '', '3-column', '', '', '2012-07-31 02:20:35', '2012-07-31 02:20:35', '', 0, 'http://theme-fusion.com/avada/?page_id=98', 0, 'page', '', 0), +(100, 1, '2012-07-31 02:20:47', '2012-07-31 02:20:47', '', '4 Column Classic', '', 'publish', 'open', 'open', '', '4-column', '', '', '2012-07-31 02:20:47', '2012-07-31 02:20:47', '', 0, 'http://theme-fusion.com/avada/?page_id=100', 0, 'page', '', 0), +(730, 1, '2012-08-08 02:54:23', '2012-08-08 02:54:23', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="55" meta_all="yes" meta_author="yes" meta_categories="yes" meta_comments="yes" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="medium"][/blog]', 'Blog Medium Image', '', 'publish', 'open', 'open', '', 'blog-medium', '', '', '2012-08-08 02:54:23', '2012-08-08 02:54:23', '', 0, 'http://theme-fusion.com/avada/?page_id=730', 0, 'page', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(923, 1, '2012-08-09 13:55:00', '2012-08-09 13:55:00', '[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Need a simple slider? Avada includes the FlexSlider 2 with awesome plugin!" description="FlexSlider is fully responsive, you can use images & videos and organize many slides into groups and adjust control settings."][/tagline_box]\n\n[content_boxes]\n[content_box title="Fully Responsive" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it adapt![/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including gradients![/content_box]\n[content_box last="yes" title="Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings & body copy with ease![/content_box]\n[/content_boxes]\n\n[one_half last="no"]\n[title size="2"]Why Choose Avada?[/title]\nThe FlexSlider can easily be used as the large slider at the top of the page, or you can use it as a shortcode inside page content. For the large slider at the top of the page, users can use the WooSlider plugin, or use it via Theme Options. Avada 2.0 now has it integrated into our Theme Options for use with captions.\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase important content
  • \n
  • Unlimited color options with a backed color picker, including the gradients
  • \n
  • Multiple layout options for home pages, portfolio section & blog section
  • \n
  • We offer free support because we care about your site as much as you do.
  • \n
\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Use Our Flexslider Anywhere With Shortcodes![/title]\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n[/one_half]', 'FlexSlider', '', 'publish', 'open', 'open', '', 'flexslider', '', '', '2012-08-09 13:55:00', '2012-08-09 13:55:00', '', 0, 'http://theme-fusion.com/avada/?page_id=923', 0, 'page', '', 0), +(3607, 1, '2013-05-24 19:12:06', '0000-00-00 00:00:00', '', 'Content Bg Image', '', 'draft', 'closed', 'closed', '', 'of-content_bg_image', '', '', '2013-05-24 19:12:06', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=options&p=3607', 0, 'options', '', 0), +(3806, 1, '2013-08-19 17:04:37', '0000-00-00 00:00:00', '', 'Footerw Bg Image', '', 'draft', 'closed', 'closed', '', 'of-footerw_bg_image', '', '', '2013-08-19 17:04:37', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=options&p=3806', 0, 'options', '', 0), +(3807, 1, '2013-08-19 17:04:37', '0000-00-00 00:00:00', '', 'Custom Icon Image', '', 'draft', 'closed', 'closed', '', 'of-custom_icon_image', '', '', '2013-08-19 17:04:37', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=options&p=3807', 0, 'options', '', 0), +(3808, 1, '2013-08-19 17:04:37', '0000-00-00 00:00:00', '', 'Custom Icon Image Retina', '', 'draft', 'closed', 'closed', '', 'of-custom_icon_image_retina', '', '', '2013-08-19 17:04:37', '0000-00-00 00:00:00', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=options&p=3808', 0, 'options', '', 0), +(1290, 1, '2012-11-08 15:19:54', '2012-11-08 15:19:54', '[separator top="30"]\n\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Need a cool slider? Avada Includes The Amazingly Cool Layer Slider!" description="Now its fully responsive with an entirely new graphical user interface, new skins and lots of options. Its absolutely awesome!"][/tagline_box]\n\n[one_half last="no"]\n[title size="2"]Why Choose Avada?[/title]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase important content
  • \n
  • Unlimited color options with a backed color picker, including the gradients
  • \n
  • Multiple layout options for home pages, portfolio section & blog section
  • \n
  • We offer free support because we care about your site as much as you do
  • \n
  • Avada will constantly be updated with brand new features and additions
  • \n
  • Advanced Theme options makes it easy for you to customize the theme
  • \n
\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Use The Slider Anywhere With Shortcodes[/title]\n[layerslider id="2"]\n[/one_half]', 'Layer Slider', '', 'publish', 'open', 'closed', '', 'layer-slider-3-0', '', '', '2012-11-08 15:19:54', '2012-11-08 15:19:54', '', 0, 'http://theme-fusion.com/avadatest/?page_id=1290', 0, 'page', '', 0), +(1298, 1, '2012-11-08 15:43:23', '2012-11-08 15:43:23', '[separator top="20"]\n\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada includes the popular Revolution Slider for even more slider options" description="This slider is fully responsive, can be any size, used with any content and has a very intuitive user interface that is easy to use!"][/tagline_box]\n\n[one_half last="no"]\n[title size="2"]Why Choose Avada?[/title]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase important content
  • \n
  • Unlimited color options with a backed color picker, including the gradients
  • \n
  • Multiple layout options for home pages, portfolio section & blog section
  • \n
  • We offer free support because we care about your site as much as you do.
  • \n
  • Avada will constantly be updated with brand new features and additions
  • \n
  • Advanced Theme Options makes it easy for you to customize your settings
  • \n
\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Use The Slider Anywhere With Shortcodes[/title]\n[rev_slider Avada_Small_Slider]\n[/one_half]', 'Revolution Slider ', '', 'publish', 'open', 'closed', '', 'slider-revolution', '', '', '2012-11-08 15:43:23', '2012-11-08 15:43:23', '', 0, 'http://theme-fusion.com/avadatest/?page_id=1298', 0, 'page', '', 0), +(1345, 1, '2012-11-10 03:12:49', '2012-11-10 03:12:49', '[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\n\n[content_boxes]\n[content_box title="Responsive Design" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it happen.[/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including the gradients![/content_box]\n[content_box last="yes" title="500+ Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings and body copy with ease![/content_box]\n[/content_boxes]\n\n[three_fourth last="no"]\n[title size="2"]Latest From The Blog[/title]\n[recent_posts columns="3" number_posts="3" cat_id="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="15"][/recent_posts]\n[/three_fourth]\n\n[one_fourth last="yes"]\n[title size="2"]What Client''s Say[/title]\n[testimonials]\n[testimonial name="Borchard" gender="male" company="Crucio Theme"]To anybody thinking of buying this theme – buy it! The theme itself is amazing, and on top of that, the support is outstanding! I wanted some features put in, and the theme developer was more than willing to help me out![/testimonial]\n[testimonial name="Flygirly" gender="female" company="Imperio Theme"]I would like to extend a special thank you for your excellent support. Is has been a great experience. I love this template and more so because you provided excellent support and feedback.Thank you for such a great template! A must have![/testimonial]\n[testimonial name="FWN" gender="female" company="Crucio Theme"]Thank You for the speedy reply and the addition to the next update ThemeFusion, now purchased![/testimonial]\n[testimonial name="Utcrayons" gender="male" company="Imperio Theme"]It’s my first time buying on here and I’m very please, so easy to customize! Cheers for your help again, very satisfied customer!!!![/testimonial]\n[testimonial name="isaed" gender="male" company="Imperio Theme"]Themes like yours make people want to upgrade their business quality to fit in such beauty … really thanks and all the best luck in sales.[/testimonial]\n[/testimonials]\n[/one_fourth]', 'Home Version 1', '', 'publish', 'open', 'closed', '', 'home-version-1', '', '', '2012-11-10 03:12:49', '2012-11-10 03:12:49', '', 0, 'http://theme-fusion.com/avadatest/?page_id=1345', 0, 'page', '', 0), +(1522, 1, '2012-11-16 15:47:45', '2012-11-16 15:47:45', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="65" meta_all="yes" meta_author="yes" meta_categories="yes" meta_comments="yes" meta_date="yes" meta_link="yes" paging="no" scrolling="pagination" strip_html="yes" layout="large"][/blog]', 'Blog Full Width', '', 'publish', 'open', 'closed', '', 'blog-2', '', '', '2012-11-16 15:47:45', '2012-11-16 15:47:45', '', 0, 'http://theme-fusion.com/avadatest/?page_id=1522', 0, 'page', '', 0), +(1693, 1, '2012-11-21 20:50:59', '2012-11-21 20:50:59', '[title size="2"]Avada Has The Right Pricing For You With These Responsive Pricing Tables![/title]\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec eros eget nisl fringilla commodo. Maecenas ornare, augue ut ultricies tristique, enim lectus pretium quam, quis bibendum metus tellus sed magna. Donec eu dolor lacus. Mauris sit amet augue in odio venenatis interdum. Cras auctor hendrerit velit, non feugiat dolor semper non. Proin quis felis gravida justo vehicula congue. Etiam pellentesque faucibus justo, vitae ornare magna elementum nec. Vestibulum sed magna lorem. Etiam non felis magna. Cras tristique viverra lorem, ac congue odio pharetra sollicitudin. Integer elementum mollis nisl, ac placerat ante consequat congue. Fusce scelerisque adipiscing euismod. Donec pharetra pellentesque ligula, id elementum mi aliquet nec. Vivamus arcu mauris, condimentum sed rutrum vitae, tincidunt viverra.\n\n[separator top="60"]\n\n[pricing_table type="1"]\n[pricing_column title="Standard"]\n[pricing_price currency="$" price="19.99" time="monthly"][/pricing_price]\n[pricing_row]5 Projects[/pricing_row]\n[pricing_row]5 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]10 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[pricing_column title="Premium"]\n[pricing_price currency="$" price="29.99" time="monthly"][/pricing_price]\n[pricing_row]10 Projects[/pricing_row]\n[pricing_row]15 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]20 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[pricing_column title="Professional"]\n[pricing_price currency="$" price="39.99" time="monthly"][/pricing_price]\n[pricing_row]15 Projects[/pricing_row]\n[pricing_row]30 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]50 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[pricing_column title="Maximum"]\n[pricing_price currency="$" price="49.99" time="monthly"][/pricing_price]\n[pricing_row]30 Projects[/pricing_row]\n[pricing_row]100 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]150 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[pricing_column title="Extreme"]\n[pricing_price currency="$" price="59.99" time="monthly"][/pricing_price]\n[pricing_row]Unlimited Projects[/pricing_row]\n[pricing_row]Unlimited Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]Unlimited Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[/pricing_table]\n\n[separator top="60"]\n\n[pricing_table type="2"]\n[pricing_column title="Premium"]\n[pricing_price currency="$" price="19.99" time="mo"][/pricing_price]\n[pricing_row]5 Projects[/pricing_row]\n[pricing_row]5 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]10 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[pricing_column title="Premium"]\n[pricing_price currency="$" price="29.99" time="mo"][/pricing_price]\n[pricing_row]20 Projects[/pricing_row]\n[pricing_row]40 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]50 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[pricing_column title="Premium"]\n[pricing_price currency="$" price="39.99" time="mo"][/pricing_price]\n[pricing_row]65 Projects[/pricing_row]\n[pricing_row]100 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]150 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[/pricing_table]', 'Pricing Options', '', 'publish', 'open', 'closed', '', 'pricing-options', '', '', '2012-11-21 20:50:59', '2012-11-21 20:50:59', '', 0, 'http://theme-fusion.com/avadatest/?page_id=1693', 0, 'page', '', 0), +(1862, 1, '2012-11-27 14:26:31', '2012-11-27 14:26:31', '[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada also includes the ThemeFusion Slider powered by FlexSlider 2!" description="Themefusion Slider is fully responsive and its perfect for creating slides with beautiful images and videos with captions."][/tagline_box]\n\n[content_boxes]\n[content_box title="Responsive Design" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size, its incredibly flexible. Try resizing your browser window to see the adaptation in action.[/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both of the sliders have awesome plugins making it super easy to use.[/content_box]\n[content_box last="yes" title="Unlimited Colors"  image="" icon="tint"  link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Any of the elements can be changed, including the super awesome CSS3 gradients![/content_box]\n[/content_boxes]\n\n[one_half last="no"]\n[title size="2"]Why Choose Avada?[/title]\nThe FlexSlider can easily be used as the large slider at the top of the page, or you can use it as a shortcode inside page content. For the large slider at the top of the page, users can use the WooSlider plugin, or use it via Theme Options. Avada 2.0 now has it integrated into our Theme Options for use with captions.\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase important content
  • \n
  • Unlimited color options with a backed color picker, including the gradients
  • \n
  • Multiple layout options for home pages, portfolio section & blog section
  • \n
  • We offer free support because we care about your site as much as you do.
  • \n
\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Use Our Flexslider Anywhere With Shortcodes![/title]\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n[/one_half]', 'ThemeFusion Slider', '', 'publish', 'open', 'closed', '', 'themefusion-slider', '', '', '2012-11-27 14:26:31', '2012-11-27 14:26:31', '', 0, 'http://theme-fusion.com/avadatest/?page_id=1862', 0, 'page', '', 0), +(2291, 1, '2012-12-03 02:56:42', '2012-12-03 02:56:42', '\n\n[separator top="50"]\n[title size="2"]This Is An Example Of Our Sidebar Page[/title]\nQuisque ligulas ipsum, euismod atras vulputate iltricies etri elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exercitation.Sed tincidunt semper lorem. Etiam in libero felis, at blandit felis. Integer in est ultrices sapien ultrices condimentum at porttitor arcu. Nam congue nunc ac leo pretium sit amet fermentum leo feugiat. Donec erat magna, lobortis in pretium vitae, sollicitudin ac ante. Maecenas ullamcorper augue pretium lacus lacinia in accumsan lorem auctor. Quisque massa sem, faucibus sit amet porttitor ac, feugiat id tortor. Integer mattis elit sit amet enim eleifend mattis sagittis ante dapibus. Nunc erat dui, tincidunt vel pharetra.
\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.\n\nSed tincidunt semper lorem. Etiam in libero felis, at blandit felis. Integer in est ultrices sapien ultrices condimentum at porttitor arcu. Nam congue nunc ac leo pretium sit amet fermentum leo feugiat. Donec erat magna, lobortis in pretium vitae, sollicitudin ac ante. Maecenas ullamcorper augue pretium lacus lacinia in accumsan lorem auctor. Quisque massa sem, faucibus sit amet porttitor ac, feugiat id tortor. Integer mattis elit sit amet enim eleifend mattis sagittis ante dapibus. Nunc erat dui, tincidunt vel pharetra ac, egestas ut mi. Mauris ut nunc vel nunc malesuada facilisis ac quis augue.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.', 'Sidebar Page', '', 'publish', 'open', 'closed', '', 'sidebar-left', '', '', '2012-12-03 02:56:42', '2012-12-03 02:56:42', '', 0, 'http://theme-fusion.com/avada/?page_id=2291', 0, 'page', '', 0), +(2300, 1, '2012-12-04 15:19:54', '2012-12-04 15:19:54', '[separator top="10"]\n\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada makes is so easy to build pages with tons of shortcodes!" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\n\n[one_half last="no"]\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n[/one_half]\n\n[one_half last="yes"]\n[accordian]\n[toggle title="Our Company Mission" open="yes"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="We Can Deliver On Projects"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[/accordian]\n[/one_half]\n\n[title size="2"]Latest From The Blog[/title]\n[recent_posts columns="4" number_posts="4" cat_id="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="15"][/recent_posts]', 'Home Version 4', '', 'publish', 'open', 'closed', '', 'home-version-4', '', '', '2012-12-04 15:19:54', '2012-12-04 15:19:54', '', 0, 'http://theme-fusion.com/avada/?page_id=2300', 0, 'page', '', 0), +(2318, 1, '2012-12-04 15:53:01', '2012-12-04 15:53:01', '[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is very versatile with multiple layouts" description="And its so easy to make your own layouts with our numerous shortcodes!"][/tagline_box]\n[separator top="-30"]\n\n[title size="2"]Latest From The Blog[/title]\n[recent_posts columns="3" number_posts="3" cat_id="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="15"][/recent_posts]\n\n[tabs tab1="Tab #1" tab2="Tab #2" tab3="Tab #3"]\n[tab id=1]\n[fontawesome icon="random" circle="yes" size="large"]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerums facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums.\n[/tab]\n[tab id=2][fontawesome icon="thumbs-up" circle="yes" size="large"]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerums facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums.\n[/tab]\n[tab id=3][fontawesome icon="magic" circle="yes" size="large"]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerums facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums.\n[/tab]\n[/tabs]\n\n[separator top="30"]\n\n[one_half last="no"]\n[title size="2"]Meet Our Gurus[/title]\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Crazy Skills[/title]\n
[progress percentage="90"]Web Design[/progress][progress percentage="95"]HTML/CSS[/progress][progress percentage="85"]Graphic Design[/progress][progress percentage="75"]WordPress[/progress]
\n[/one_half]', 'Home Version 5', '', 'publish', 'open', 'closed', '', 'home-version-5', '', '', '2012-12-04 15:53:01', '2012-12-04 15:53:01', '', 0, 'http://theme-fusion.com/avada/?page_id=2318', 0, 'page', '', 0), +(2367, 1, '2012-12-04 17:27:32', '2012-12-04 17:27:32', '[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\n\n[separator top="-20"]\n[one_half last="no"]\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Welcome To Avada![/title]\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Asunt in anim uis aute irure dolor in reprehenderit in volupte velit esse cillum.\n[/one_half]\n\n[three_fourth last="no"]\n[title size="2"]Latest From The Blog[/title]\n[recent_posts columns="3" number_posts="3" cat_id="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="15"][/recent_posts]\n[/three_fourth]\n[one_fourth last="yes"]\n\n[title size="2"]Our Happy Clients[/title]\n[testimonials]\n[testimonial name="John Die" gender="female" company="My Company"]Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consec tetur, adipisci velit, sed quia non numquam eius modi tempora incidunt utis labore et dolore magnam aliquam quaerat voluptatem.[/testimonial]\n[testimonial name="John Die" gender="male" company="My Company"]Dolorem ipsum quia dolor sit amet, consec tetur, adipisci velit, sed quia non numquam eius modi tempora incidunt utis labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minimas veniam, quis nostrum exerc.[/testimonial]\n[/testimonials]\n[/one_fourth]', 'Home Version 6', '', 'publish', 'open', 'closed', '', 'home-version-6', '', '', '2012-12-04 17:27:32', '2012-12-04 17:27:32', '', 0, 'http://theme-fusion.com/avada/?page_id=2367', 0, 'page', '', 0), +(2398, 1, '2012-12-04 17:53:50', '2012-12-04 17:53:50', '[separator top="-55"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/slide_41-300x143.jpg" backgroundrepeat="no-repeat" backgroundposition="center top" backgroundattachment="fixed" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Avada: Themeforest''s #1 Selling Wordpress Theme of All Time

\r\nWith over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.\r\n\r\n[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]\r\n\r\n \r\n\r\n \r\n\r\n[content_boxes]\r\n[content_box title="Responsive Design" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it happen.[/content_box]\r\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\r\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including the gradients![/content_box]\r\n[content_box last="yes" title="500+ Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings and body copy with ease![/content_box]\r\n[/content_boxes]\r\n\r\n[/fullwidth]\r\n\r\n[separator top="-10"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Latest From The Blog[/title]\r\n[recent_posts columns="3" number_posts="3" cat_id="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="20"][/recent_posts]\r\n\r\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\r\n\r\n[/fullwidth]\r\n\r\n[separator top="30"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n[title size="2"]Our Recent Work[/title][recent_works cat_id=""][/recent_works]\r\n\r\n[/fullwidth]', 'Home Version 7', '', 'publish', 'open', 'closed', '', 'home-version-7', '', '', '2014-01-29 23:14:00', '2014-01-29 23:14:00', '', 0, 'http://theme-fusion.com/avada/?page_id=2398', 0, 'page', '', 0), +(2466, 1, '2012-12-05 17:20:13', '2012-12-05 17:20:13', '', 'FAQ Page', '', 'publish', 'open', 'closed', '', 'faq-page-1', '', '', '2012-12-05 17:20:13', '2012-12-05 17:20:13', '', 0, 'http://theme-fusion.com/avadatest/?page_id=2466', 0, 'page', '', 0), +(2660, 1, '2013-01-14 19:44:32', '2013-01-14 19:44:32', '[separator top="30"]\n\n[one_fourth last="no"]\n\n

100% Ultra Responsive

\nAvada is fully responsive and can adapt to any screen size, its incredibly fast and super flexible.\n[/one_fourth]\n\n[one_fourth last="no"]\n\n

Amazingly Cool Sliders

\nAvada includes the awesome Layer Slider, Revolution Slider as well as the ever popular FlexSlider2.\n[/one_fourth]\n\n[one_fourth last="no"]\n\n

Advanced Admin Area

\nAvada includes an advanced admin panel making it fun and very easy to customize your theme.\n[/one_fourth]\n\n[one_fourth last="yes"]\n\n

Loaded With Options

\nThis theme is loaded with options and we are constantly updating Avada with new features.\n[/one_fourth]\n\n[separator top="20"]\n\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\n\n[separator top="-15"]\n\n[one_half last="no"]\n[accordian]\n[toggle title="Our Company Mission" open="yes"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[/accordian]\n[/one_half]\n\n[one_half last="yes"]\n[tabs tab1="Tab Data #1" tab2="Tab Data #2" tab3="Tab Data #3"]\n[tab id=1]\n[fontawesome icon="random" circle="yes" size="large"]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerums facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam.Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet.\n[/tab]\n[tab id=2]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo. amets dolores.[/tab]\n[tab id=3]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo. amets dolores.[/tab]\n[/tabs]\n[/one_half]\n\n[separator top="20"]\n\n[title size="2"]Stay In Touch With Us![/title]\n[social_links rss="#" facebook="#" twitter="#" dribbble="#" google="#" linkedin="#" blogger="#" tumblr="#" reddit="#" yahoo="#" deviantart="#" vimeo="#" youtube="#" pinterest="#" digg="#" flickr="#" forrst="#" myspace="#" skype="#"]', 'Home Version 8', '', 'publish', 'open', 'closed', '', 'home-version-8', '', '', '2013-01-14 19:44:32', '2013-01-14 19:44:32', '', 0, 'http://theme-fusion.com/avada/?page_id=2660', 0, 'page', '', 0), +(2712, 1, '2013-01-19 20:28:10', '2013-01-19 20:28:10', '[one_half last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="President & Founder" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enim.[/person]\n[/one_half]\n\n[one_half last="yes"]\n[person name="Jane Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="CEO" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enim.[/person]\n[/one_half]\n\n[separator top="30"]\n\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada includes multiple page layouts ready to use, just insert your content!" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\n\n[separator top="-10"]\n\n[title size="2"]Our Valuable Team Members[/title]\n[one_third last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[one_third last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[one_third last="yes"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[separator top="40"]\n\n[one_third last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[one_third last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[one_third last="yes"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]', 'Meet The Team', '', 'publish', 'open', 'closed', '', 'meet-the-team', '', '', '2013-01-19 20:28:10', '2013-01-19 20:28:10', '', 0, 'http://theme-fusion.com/avada/?page_id=2712', 0, 'page', '', 0), +(2745, 1, '2013-01-21 17:11:03', '2013-01-21 17:11:03', '[one_third last="no"]\n\n

Responsive Design

\nAvada is fully responsive and can adapt to any screen size, its incredibly fast and flexible. Try resizing your browser window to see the adaptation in action.\n[/one_third]\n\n[one_third last="no"]\n\n

Awesome Sliders

\nAvada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both of the sliders have awesome plugins making it super easy to use.\n[/one_third]\n\n[one_third last="yes"]\n\n

Loaded With Options

\nThis theme is loaded, unlimited color options, 500+ google fonts, 4 post types, advanced theme options, 3 home page layouts, boxed & wide to name a few.\n[/one_third]\n\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is very versatile with multiple layouts" description="And its so easy to make your own layouts with our numerous shortcodes!"][/tagline_box][separator top="-20"]\n\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n\n[title size="2"]Keep In Touch! Choose Your Platform![/title]\n[social_links rss="#" facebook="#" twitter="#" dribbble="#" google="#" linkedin="#" blogger="#" tumblr="#" reddit="#" yahoo="#" deviantart="#" vimeo="#" pinterest="#"]', 'Home Version 9', '', 'publish', 'open', 'closed', '', 'home-version-9', '', '', '2013-01-21 17:11:03', '2013-01-21 17:11:03', '', 0, 'http://theme-fusion.com/avada/?page_id=2745', 0, 'page', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(2776, 1, '2013-01-21 19:10:06', '2013-01-21 19:10:06', '[rev_slider Avada_Page_Slider]\n\n[separator top="60"]\n\n[three_fourth last="no"]\n[title size="2"]We Are Here To Serve You[/title]\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui.\n\nRatione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla.\n[/three_fourth]\n\n[one_fourth last="yes"]\n[title size="2"]Our Crazy Skills[/title]\n
[progress percentage="90"]Web Design[/progress][progress percentage="95"]HTML/CSS[/progress][progress percentage="85"]Graphic Design[/progress][progress percentage="75"]WordPress[/progress]
\n[/one_fourth]\n\n[separator top="10"]\n\n[title size="2"]Our Valuable Team Members[/title]\n[one_fourth last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo. [/person]\n[/one_fourth]\n[one_fourth last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\n[/one_fourth]\n[one_fourth last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/portfolio_61.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\n[/one_fourth]\n[one_fourth last="yes"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\n[/one_fourth]\n\n[separator top="30"]\n\n[title size="2"]Our Happy Clients[/title]\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]', 'About Us Page 2', '', 'publish', 'open', 'closed', '', 'about-us-page-2', '', '', '2013-01-21 19:10:06', '2013-01-21 19:10:06', '', 0, 'http://theme-fusion.com/avada/?page_id=2776', 0, 'page', '', 0), +(2803, 1, '2013-01-21 20:24:32', '2013-01-21 20:24:32', '[rev_slider Avada_Page_Slider]\n\n[separator top="60"]\n\n[two_third last="no"]\n[title size="2"]We Are Here To Serve You[/title]\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui.Ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius.\n[/two_third]\n\n[one_third last="yes"]\n[title size="2"]Why Are We The Best?[/title]\n[accordian]\n[toggle title="Our Company Mission"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem.[/toggle]\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem.[/toggle]\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem.[/toggle]\n[/accordian]\n[/one_third]\n\n[separator top="40"]\n\n[one_third last="no"]\n\n

Ultra-Responsive Design

\nAvada is fully responsive and can adapt to any screen size, its incredibly fast and flexible. Try resizing your browser window to see the adaptation in action.\n[/one_third]\n\n[one_third last="no"]\n\n

Awesome Powerful Sliders

\nAvada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both of the sliders have awesome plugins making it super easy to use.\n[/one_third]\n\n[one_third last="yes"]\n\n

Loaded With Options

\nThis theme is loaded, unlimited color options, 500+ google fonts, 4 post types, advanced theme options, 3 home page layouts, boxed & wide to name a few.\n[/one_third]\n\n[separator top="30"]\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]', 'Services Page 2', '', 'publish', 'open', 'closed', '', 'services-page-2', '', '', '2013-01-21 20:24:32', '2013-01-21 20:24:32', '', 0, 'http://theme-fusion.com/avada/?page_id=2803', 0, 'page', '', 0), +(3073, 1, '2013-02-05 21:19:50', '2013-02-05 21:19:50', 'home_10_img\n\n[separator top="55"]\n\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="We''ll tell you why you should buy Avada and join our ever growing user base!" description="We truly care about our users and our product. Which is why we are constantly improving Avada for our beloved users."][/tagline_box]\n\n[separator top="-12"]\n\n[content_boxes]\n[content_box title="Responsive Design" icon="tablet" ]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see the adaptation![/content_box]\n[content_box title="Awesome Sliders" icon="random"]Avada includes the awesome Layer Slider, the amazing Revolution Slider, as well as the popular FlexSlider2! [/content_box]\n[content_box title="Unlimited Colors" icon="tint"]We included a backend color picker for unlimited color options. Anything can be changed, including the gradients![/content_box]\n[content_box last="yes" title="Advanced Fonts" icon="text-width"]Avada loves fonts, choose from over 500+ Google Fonts, Standard Fonts, or upload your own Custom Font![/content_box]\n[/content_boxes]\n\n[separator top="-40"]\n\n[content_boxes]\n[content_box title="Excellent Support" icon="thumbs-up" ]We truly care about our users and our product. You can rest assure that you will get the best after sale support![/content_box]\n[content_box title="Advanced Admin" icon="cog"]With Avada’s advanced theme options panel, you can customize just about any part of your site quickly and easily![/content_box]\n[content_box title="Elite Author" icon="trophy"]We have a proven history of quality products and buyer satisfaction. Trust in us and you will not be disappointed![/content_box]\n[content_box last="yes" title="Translation Ready" icon="globe"]We include the translation files to translate the theme, and we also provide 4 languages already translated![/content_box]\n[/content_boxes]\n\n[title size="2"]Our Happy Clients[/title]\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]', 'Home Version 10', '', 'publish', 'open', 'closed', '', 'home-version-10', '', '', '2013-02-05 21:19:50', '2013-02-05 21:19:50', '', 0, 'http://theme-fusion.com/avada/?page_id=3073', 0, 'page', '', 0), +(3089, 1, '2013-02-09 20:23:28', '2013-02-09 20:23:28', '[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada also includes the stylish Elastic Slider! Beautiful. Simple. Elegant" description="The Elastic Slider is fully responsive and perfect for a simply, beautiful slider. Customize sizes, captions, animation and more!"][/tagline_box]\n\n[content_boxes]\n[content_box title="Fully Responsive" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it adapt![/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including gradients![/content_box]\n[content_box last="yes" title="Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings & body copy with ease![/content_box]\n[/content_boxes]\n\n[one_half last="no"]\n[title size="2"]Why Choose Avada[/title]\nThe FlexSlider can easily be used as the large slider at the top of the page, or you can use it as a shortcode inside page content. For the large slider at the top of the page, users can use the WooSlider plugin, or use it via Theme Options. Avada 2.0 now has it integrated into our Theme Options for use with captions.\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase important content
  • \n
  • Unlimited color options with a backed color picker, including the gradients
  • \n
  • Multiple layout options for home pages, portfolio section & blog section
  • \n
  • We offer free support because we care about your site as much as you do.
  • \n
\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Use Our Flexslider Anywhere With Shortcodes![/title]\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n[/one_half]', 'Elastic Slider', '', 'publish', 'open', 'closed', '', 'elastic-slider', '', '', '2013-02-09 20:23:28', '2013-02-09 20:23:28', '', 0, 'http://theme-fusion.com/avada2/?page_id=3089', 0, 'page', '', 0), +(3474, 1, '2013-02-13 17:51:22', '2013-02-13 17:51:22', '[gallery link="file" ids="3895,3894,3892,3891,3904,3888"]', 'Featured Child Page', '', 'publish', 'open', 'closed', '', 'gallery-of-screenshots', '', '', '2013-02-13 17:51:22', '2013-02-13 17:51:22', '', 54, 'http://theme-fusion.com/avadaxml/?page_id=3474', 0, 'page', '', 0), +(3492, 1, '2013-04-04 15:17:18', '2013-04-04 15:17:18', '\n\n[title size="2"]Meet Your New Best Friends[/title]\n[one_fourth last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo. [/person]\n[/one_fourth]\n[one_fourth last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\n[/one_fourth]\n[one_fourth last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/portfolio_61.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\n[/one_fourth]\n[one_fourth last="yes"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\n[/one_fourth]\n\n\n\n[separator top="40"]\n[one_half last="no"]\n[title size="2"]We Are Here To Serve You[/title]\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia.\n\n[checklist]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase important content
  • \n
  • Unlimited color options with a backed color picker, including the gradients
  • \n
  • We offer free support because we care about your site as much as you do.
  • \n
\n[/checklist]\n[/one_half]\n\n\n\n[one_half last="yes"]\n[title size="2"]Our Workplace[/title]\n\nView Larger Map\n[/one_half]\n\n\n\n[separator top="40"]\n\n[title size="2"]Our Happy Clients[/title]\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]', 'Home Version 11', '', 'publish', 'open', 'closed', '', 'home-version-11', '', '', '2013-04-04 15:17:18', '2013-04-04 15:17:18', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3492', 0, 'page', '', 0), +(3494, 1, '2013-04-04 15:17:53', '2013-04-04 15:17:53', '\n\n[two_third last="no"]\n\n[separator top="25"]\n[title size="2"]Avada Includes So Many Different Pre-Built Page Layouts[/title]\n[separator top="-10"]\nAvada is fully responsive and can adapt to any screen size, its incredibly fast and flexible. Try resizing your browser window to see the adaptation in action. Avada is fully responsive and can adapt to any screen size, its incredibly fast and flexible. Try resizing your browser window to see the adaptation in action.Avada is fully responsive and can adapt to any screen size, its incredibly fast and flexible.\n[/two_third]\n\n\n\n[one_third last="yes"]\n\n\n

Located In Beautiful New York City

\n[separator top="10"]\n12345 North Main Street,\nNew York, NY 555555\nPhone: 1.800.555.6789\nFax: 1.800.555.6789\nWeb: www.yoursite.com\n[/one_third]\n\n\n\n[separator top="20"]\n[tagline_box link="http://themeforest.net/user/ThemeFusion" linktarget="" button="Purchase Now" title="Do you need a home page without a slider? No problem here!" description="Avada allows you to easily select any of our sliders and assign them to a page, or you can choose to not use one at all!"][/tagline_box]\n\n\n\n[separator top="-10"]\n[one_third last="no"]\n[tabs tab1="Tab Data #1" tab2="Tab Data #2"]\n[tab id=1]\n[fontawesome icon="random" circle="yes" size="large"]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets unsers sit.\n[/tab]\n[tab id=2]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores.[/tab]\n[/tabs]\n[/one_third]\n\n\n\n[one_third last="no"]\n[title size="2"]Why Choose Us[/title]\n
    \n
      \n
        \n
      • Fully responsive so your content will always look good on any screen size
      • \n
      • Awesome sliders give you the opportunity to showcase your content
      • \n
      • Multiple layout options for home pages, portfolio and blog section
      • \n
      • We offer free support because we care about your site as much as you.
      • \n
      \n
    \n
\n[/one_third]\n\n\n\n[one_third last="yes"]\n[title size="2"]Slider Content[/title]\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n\n[/one_third]', 'Home Version 12', '', 'publish', 'open', 'closed', '', 'home-version-12', '', '', '2013-04-04 15:17:53', '2013-04-04 15:17:53', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3494', 0, 'page', '', 0), +(3496, 1, '2013-04-04 15:18:43', '2013-04-04 15:18:43', '\n\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n\n\n\n\n[two_third last="no"]\n[title size="2"]We Love To Work & We Love Where We Work[/title]\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui.\n\nRatione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla.\n\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\n[/two_third]\n\n\n\n[one_third last="yes"]\n[title size="2"]Our Location[/title]\n\n\n

Located In Beautiful New York City

\n12345 Main Street, New York, NY 02781\nPhone: 1.800.555.6789\nWeb: www.yoursite.com\n[/one_third]\n\n\n\n[separator top="15"]\n[title size="2"]Images Of Our Workplace[/title]\n[one_fourth last="no"]\nimage 1\n[/one_fourth]\n[one_fourth last="no"]\nimage 1\n[/one_fourth]\n[one_fourth last="no"]\nimage 1\n[/one_fourth]\n[one_fourth last="yes"]\nimage 1\n[/one_fourth]', 'Our Office', '', 'publish', 'open', 'closed', '', 'our-office', '', '', '2013-04-04 15:18:43', '2013-04-04 15:18:43', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3496', 0, 'page', '', 0), +(3524, 1, '2013-04-08 23:13:00', '2013-04-08 23:13:00', '', '1 Column Text', '', 'publish', 'open', 'closed', '', '1-column-text', '', '', '2013-04-08 23:13:00', '2013-04-08 23:13:00', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3524', 0, 'page', '', 0), +(3526, 1, '2013-04-08 23:13:10', '2013-04-08 23:13:10', '', '2 Column Text', '', 'publish', 'open', 'closed', '', '2-column-text', '', '', '2013-04-08 23:13:10', '2013-04-08 23:13:10', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3526', 0, 'page', '', 0), +(3528, 1, '2013-04-08 23:13:22', '2013-04-08 23:13:22', '', '3 Column Text', '', 'publish', 'open', 'closed', '', '3-column-text', '', '', '2013-04-08 23:13:22', '2013-04-08 23:13:22', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3528', 0, 'page', '', 0), +(3530, 1, '2013-04-08 23:13:33', '2013-04-08 23:13:33', '', '4 Column Text', '', 'publish', 'open', 'closed', '', '4-column-text', '', '', '2013-04-08 23:13:33', '2013-04-08 23:13:33', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3530', 0, 'page', '', 0), +(3539, 1, '2013-04-08 23:17:45', '2013-04-08 23:17:45', '[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="We''ll tell you why you should buy Avada and join our ever growing user base!" description="We truly care about our users and our product. Which is why we are constantly improving Avada for our beloved users."][/tagline_box]\n\n[separator top="-12"]\n\n[content_boxes]\n[content_box title="Responsive Design" icon="tablet" ]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see the adaptation![/content_box]\n[content_box title="Awesome Sliders" icon="random"]Avada includes the Layer Slider, the Revolution Slider, the Elastic Slider as well as the popular FlexSlider2! [/content_box]\n[content_box title="Unlimited Colors" icon="tint"]We included a backend color picker for unlimited color options. Anything can be changed, including the gradients![/content_box]\n[content_box last="yes" title="Advanced Fonts" icon="text-width"]Avada loves fonts, choose from over 500+ Google Fonts, Standard Fonts, or upload your own Custom Font![/content_box]\n[/content_boxes]\n\n[separator top="-40"]\n\n[content_boxes]\n[content_box title="Retina Ready" icon="magic" ]Avada is now Retina Ready so everything looks amazingly sharp and crisp on high resolution screens![/content_box]\n[content_box title="Font Awesome" icon="flag"]Font Awesome icons are fully integratd into the theme. Use them in 3 sizes and with or without a circle![/content_box]\n[content_box title="5 Header Designs" icon="ok"]Choose from 5 different header designs that include icons, text, links and more. Easily select them via Theme Options![/content_box]\n[content_box last="yes" title="10 Home Pages" icon="home"]Avada includes 10 different home page layouts, and you can easily create your own using our shortcodes![/content_box]\n[/content_boxes]\n\n[separator top="-40"]\n\n[content_boxes]\n[content_box title="Excellent Support" icon="thumbs-up" ]We truly care about our users and our product. You can rest assure that you will get the best after sale support![/content_box]\n[content_box title="Advanced Admin" icon="cog"]With Avada’s advanced theme options panel, you can customize just about any part of your site quickly and easily![/content_box]\n[content_box title="Elite Author" icon="trophy"]We have a proven history of quality products and buyer satisfaction. Trust in us and you will not be disappointed![/content_box]\n[content_box last="yes" title="Translation Ready" icon="globe"]We include the translation files to translate the theme, and we also provide 4 languages already translated![/content_box]\n[/content_boxes]\n\n[separator top="-40"]\n\n[content_boxes]\n[content_box title="9 Page Layouts" icon="copy" ]Avada offers many different page layouts so you can quickly and easily create your pages with no hassle![/content_box]\n[content_box title="Custom Widgets" icon="beaker"]We offer many custom widgets that are all stylized and ready for use. Simply drag and drop into place to activate! [/content_box]\n[content_box title="Shortcodes" icon="check"]Users can quickly and easily built their own custom pages using all the various shortcodes that Avada includes! [/content_box]\n[content_box last="yes" title="Demo Content" icon="time"]Avada includes a complete set our demo pages so users can quickly set up their theme by importing the XML file![/content_box]\n[/content_boxes]\n\n[separator top="-40"]\n\n[content_boxes]\n[content_box title="Extensive Docs" icon="book" ]Our documentation is the best around with extremely detailed instructions that include screenshots and videos![/content_box]\n[content_box title="Alternate Layouts" icon="list"]9 home pages, 1-4 column portfolio, 3 blog layouts and multiple other alternate layouts for interior pages![/content_box]\n[content_box title="Multiple Portfolio" icon="list-alt"]Avada allows you to create an unlimited amount of portfolio pages & you can select custom categories![/content_box]\n[content_box last="yes" title="Multiple Sidebar" icon="columns"]Unlimited sidebars allow users to create custom sidebars for each page that match the style and layout![/content_box]\n[/content_boxes]\n\n[separator top="-40"]\n\n[content_boxes]\n[content_box title="Easy To Customize" icon="edit" ]With advanced theme options, page options & extensive docs, its never been easier to customize a theme![/content_box]\n[content_box title="Lots of Possibilities" icon="plus"]With all our various shortcodes and page layouts, users have endless possibilities to create beautiful layouts![/content_box]\n[content_box title="Video Support" icon="play"]We support both Vimeo and Youtube videos throughout the entire theme so they can be used on any page or post![/content_box]\n[content_box last="yes" title="Touch Enabled" icon="hand-up"]All of the sliders we use are touch enabled so your viewers on mobile devices can easily navigate your slides![/content_box]\n[/content_boxes]\n\n[separator top="-40"]\n\n[content_boxes]\n[content_box title="Google Maps" icon="map-marker" ]We have Goole Maps fully integrated into the theme and users can select custom sizes for the contact page map![/content_box]\n[content_box title="Social Media" icon="twitter"]Want your users to stay in touch? No problem, Avada has Social Media icons all throughout the theme for you![/content_box]\n[content_box title="SEO Optimized" icon="search"]Avada has been created with best SEO practices in mind which allows search engines to index your site content![/content_box]\n[content_box last="yes" title="Always Improving" icon="signal"]We love Avada, and so do our users which is why we our constantly adding new features requested by them.[/content_box]\n[/content_boxes]\n\n[one_half last="no"]\n[tagline_box title="We know you will love Avada as much as we do. We put so much time and effort into Avada, and our wonderful users who buy it. But dont take our word for it, see our testimonials from our dedicated users!"][/tagline_box]\n[/one_half]\n\n[one_half last="yes"]\n[testimonials]\n[testimonial name="William Genske" gender="male" company="Avada Theme"]Thank you for your very professional and prompt response. I went to look for answers to my own questions and quickly realized that the information I was requesting was very easy to find. As were the videos and the instructions. In fact everything has been perfect so far. This is by far the most well supported theme I have ever had the pleasure to work with. Lots of wonderful options. I wished I had found you before I spent money on a competitors theme. Thanks again for the great support and for a great product. [/testimonial]\n\n[testimonial name="Stuartyboy," gender="male" company="Avada Theme"]If I could give 100 stars for support and attention to detail I definitely would. I’ve purchased a good number of Wordpress themes from various developers that look good on Themeforest but after you buy them you find numerous problems, bugs, crazy admin and very very poor support. I purchased the Avada theme and there were a couple of problems too, but the guys from ThemeFusion were remarkable – I really mean this. The speed of support and attention to detail is quite phenomenal. If you are considering buying this theme at all then take it from me, you will be extremely pleased. Thanks very much to Luke & Muhammad! [/testimonial]\n\n[testimonial name="Tashigyaltsen" gender="male" company="Avada Theme"]Excellent template. One of the best theme I have ever used. Every minor detail has been taken care of. Awesome support as well. Not 5 but 10 Star Ratings. [/testimonial]\n\n[testimonial name="Lucasgriffin" gender="male" company="Avada Theme"]Amazing theme and top class support, as I’m a beginner, Luke helped me above and beyond and was more than patient, his responses were quick and he has a genuine care for you to enjoy and move forward with your theme!.. highly recommended theme and author! [/testimonial]\n\n[testimonial name="Sarumbear" gender="male" company="Avada Theme"]I bought a copy of this theme to test and I am impressed. Not only the theme is well thought out with good amount options and excellent customisation facilities but their support at their support forum is exemplary.\nI can thoroughly recommend the theme and the developer. I will be buying more licenses.[/testimonial]\n\n[testimonial name="Rel1961" gender="male" company="Avada Theme"]I have to echo sarumbear’s post on the previous page (82), I too can highly recomend this theme for it’s ease of use and support. Hell I manufacture cupboards for a living and have no previous experince with web design, so only use this to build our own company website and am finding it so easy, all the work is done for you. To the Avada team – thank you ALL for all the hard work especially after this huge update when you have released a further update the minute a problem was encountered.[/testimonial]\n\n[testimonial name="Strata1" gender="male" company="Avada Theme"]Hi, I just wanted to say thanks for the great theme. I’m finding new ways to improve it every day and find that it’s been the most user-friendly theme I’ve ever purchased. I am practically computer illiterate and know extremely little if anything at all about code, CSS, or any of the inner workings of a website. The Avada theme removes all the worry, hassle, frustration and angst that beginners (and novices) feel when designing websites. If you can read and follow directions, this theme is for you. I’ve tried a hundred plug-ins with other themes and the Avada theme makes almost all of them unnecessary and obsolete.[/testimonial]\n\n[testimonial name="Die_wonne" gender="male" company="Avada Theme"]Just wanna say THANK YOU! Avada is just great. It’s easy to use and has some really neat features. It’s a pleasure to work with it. My clients are happy and so am I. Go ahead![/testimonial]\n\n[testimonial name="Stephanvuuren" gender="male" company="Avada Theme"]Thanks so much for the quick support. You solved my problem. I can’t believe it was such a simple oversight from my side. I misunderstood the instructions, but makes complete sense in hindsight. You rock! Thanks so much for taking the time to help a novice like me. The theme is really great and easy to install, even for someone like me who comes predominantly from a print design and comms background. I’m really impressed with your service and support! [/testimonial]\n\n[testimonial name="Javed_iqbal" gender="male" company="Avada Theme"]I have to say the documentation must be the best I have come across with a theme, Thanks![/testimonial]\n\n[testimonial name="Gojcus" gender="male" company="Avada Theme"]Let me say something. You have an amazing theme and amazing/awesome support. They helped me on weekend. This is what I call an “extra mile” in customer relationship. So I gave 5 stars for the theme and if I could, I’d give 10 stars for support.[/testimonial]\n\n[testimonial name="eMKT" gender="male" company="Avada Theme"]This developer ISNT joking about customer service. If you are about to buy it, close your eyes and invest this 40 USD. That is nothing compare to the quality of this template.[/testimonial]\n\n[testimonial name="Martinitgirl" gender="male" company="Avada Theme"]I love this theme… it totally kicks ass[/testimonial]\n\n[testimonial name="Tobedoit" gender="male" company="Avada Theme"]u know what? u r so great that I want to buy whatever u wl make. After Service is tremendous :)[/testimonial]\n\n[testimonial name="Jwhosky1" gender="male" company="Avada Theme"]You guys really have the best user comment response I have seen. I have purchased nearly 45 themes in the last 2 years and I am really impressed with your service.[/testimonial]\n\n[testimonial name="Ferry" gender="male" company="Avada Theme"]Hey, I Love This Theme!! It’s amazing… Never had any issues with it! It works fine and is surely one of the top themes of this age![/testimonial]\n\n[testimonial name="jvgDesign" gender="male" company="Avada Theme"]Thank you so much for your quick and accurate responses. Your theme is really wonderful![/testimonial]\n\n[testimonial name="3elevenmedia" gender="male" company="Avada Theme"]Thank you so much! amazing support! amazing theme![/testimonial]\n\n[testimonial name="kdt784" gender="male" company="Avada Theme"]Awesome! Thank you. I seriously love this theme. The features are outstanding and the support rocks. Someone recommended it to me and I''m so glad they did. Good stuff. [/testimonial]\n\n[testimonial name="Aajami" gender="male" company="Avada Theme"]I bought this theme and i would like to recommend it to every one interested in building a website without knowledge of php or html. It is very convenient and the customer service is very reactive. I will say it in French “Bravo” for this work![/testimonial]\n\n[testimonial name="Christobar9" gender="male" company="Avada Theme"]Thanks. You guys are awesome! Your support is just as (if not more) ‘responsive’ as this amazing theme. [/testimonial]\n\n[testimonial name="Ross Sadler" gender="male" company="Avada Theme"]Awesome theme, awesome support! 5*Stars! [/testimonial]\n\n[/testimonials]\n[/one_half]', 'Why Avada?', '', 'publish', 'open', 'closed', '', 'why-avada', '', '', '2013-04-08 23:17:45', '2013-04-08 23:17:45', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3539', 0, 'page', '', 0), +(3610, 1, '2013-05-24 19:42:07', '2013-05-24 19:42:07', '[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#f6f6f6" paddingTop="0px" paddingBottom="0px"]\n[content_boxes layout="icon-with-title" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="transparent"]\n[content_box title="Beautifully Simplistic" icon="tablet" image="" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226?ref=ThemeFusion" linktarget="" linktext=""]If you''re a code nerd or a Word Press newbie, Avada is for you. It''s [tooltip title="That''s Right, It''s For You!"]simply built for everyone[/tooltip], and can be as simple or complex as you want it to be. [/content_box]\n[content_box title="Free Support & Updates" icon="magic" image="" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226?ref=ThemeFusion" linktarget="" linktext=""] We truly care about our users & end product which is why[tooltip title="Over 32,000 Users!"] our users love Avada![/tooltip] You will too with free updates & the most incredible support around.[/content_box]\n[content_box title="Blissful Layout Options " icon="thumbs-up" image="" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226?ref=ThemeFusion" linktarget="" linktext=""]Avada includes so many different options and designs. Users can make [tooltip title="Like This Text Tooltip!"]amazingly cool layouts[/tooltip] with all the tools we provide. It doesn''t get any better.[/content_box]\n[/content_boxes]\n[separator top="-25"]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="0px"]\n

Avada: Themeforest''s #1 Selling Wordpress Theme of All Time

\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\n[separator top="40" style="double"]\n[imageframe lightbox="yes" style="none" bordercolor="" bordersize="0px" stylecolor="" align="left" animation_type="fade" animation_direction="up" animation_speed="1"][/imageframe]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#f6f6f6" paddingTop="65px" paddingBottom="0px"]\n[one_half last="no"]\n

What Else? We Have The Best Support Around

\n[separator top="30" style="single"]\nAvada is [tooltip title="Everting You Need To Build A Website!"]loaded with useful, functional options[/tooltip] that allow users to quickly and easily create stunning websites. But that''s not all, when you buy Avada you will also get the [tooltip title="Support Forum, Online Docs & Videos!"]most amazing customer support around![/tooltip]\n[separator top="28"]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Advanced theme options panel to easily customize your website
  • \n
\n[/checklist]\n[separator top="35" style="single"]\n[button color="green" size="large" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226?ref=ThemeFusion" target="_self" animation_type="fade" animation_direction="right" animation_speed="1"]Purchase Avada Now![/button]\n[separator top="35"]\n[/one_half]\n\n[one_half last="yes"][separator top="10" style="none"]\n[recent_posts layout="thumbnails-on-side" columns="1" number_posts="3" cat_slug="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="12" strip_html="true" animation_type="fade" animation_direction="left" animation_speed="1"][/recent_posts]\n[/one_half]\n[/fullwidth]\n\n[separator top="-25"]\n\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="30px" paddingBottom="0px"]\n

More Ways Than Ever To Display Your Hard Work!

\n

We''ve added several [tooltip title="Lots of Them!"]useful shortcodes[/tooltip] and more [tooltip title="6 Total Layouts!"]amazing blog layouts[/tooltip] that allow you to build amazing pages for your website.

\n[separator top="40" style="double"]\n[recent_works layout="grid" filters="true or false" columns="3" cat_slug="" number_posts="6" excerpt_words="15"][/recent_works]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="70px" paddingBottom="5px"]\n[one_half last="no"]\n[title size="2"]Amazing Tools To Build Awesome Websites[/title]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Advanced theme options panel to easily customize your website
  • \n
  • Multiple layout options for home pages, portfolio and blog section
  • \n
  • Amazing shortcodes loaded with meta options for easy customization
  • \n
  • We offer free support because we care about your site as much as you.
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[imageframe lightbox="yes" style="none" bordercolor="" bordersize="0px" stylecolor="" align="left" animation_type="fade" animation_direction="right" animation_speed="1"][/imageframe]\n[/one_half]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/07/bkgd13.jpg" backgroundrepeat="no-repeat" backgroundposition="center center" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="50px" paddingBottom="45px"]\n[tagline_box backgroundcolor="#ffffff" shadow="yes" border="1px" bordercolor="#e5e4e4" highlightposition="left" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226?ref=ThemeFusion" linktarget="" button="Purchase Now" title="Avada is the ultimate multi-purpose wordpress theme!" description="Loaded with awesome features, premium sliders, unlimited colors, advanced theme options & much more!"][/tagline_box]\n[/fullwidth]\n[separator top="-120"]', 'Home Version 13', '', 'publish', 'open', 'closed', '', 'home-page-13', '', '', '2013-05-24 19:42:07', '2013-05-24 19:42:07', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3610', 0, 'page', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(3628, 1, '2013-05-24 19:48:46', '2013-05-24 19:48:46', '[separator top="-25"]\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#f6f6f6" paddingTop="0px" paddingBottom="0px"]\n

Avada 3.0: The Best Version Yet With over 100 New Features!

\n

Yes that''s right, we''ve added over 100 new features! New layouts, short codes, theme options & more, along with lots of love & a hefty sprinkle of pixie dust!!

\n[separator top="40" style="double"]\n[separator top="80"]\n[content_boxes layout="icon-boxed" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n[content_box title="Beautifully Simplistic" icon="tablet" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]If you''re a code nerd or a Word Press newbie, Avada is for you. It''s built for everyone, and can be as simple or complex as you want. [/content_box]\n[content_box title="Free Support & Updates" icon="magic" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""] We truly care about our users and our end product. Our users love Avada, and you will too with free updates & incredible support.[/content_box]\n[content_box title="Blissful Layout Options " icon="thumbs-up" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]Avada includes so many different options and designs. Users are able to make amazingly cool layouts with all the tools we provide.[/content_box]\n[/content_boxes]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="45px" paddingBottom="25px"]\n[one_half last="no"]\n[flexslider layout="attachments"][/flexslider]\n[/one_half]\n[one_half last="yes"]\n[title size="2"]Over 20,000 Purchases, We Know You''ll Love Avada![/title]\n[separator top="25" style="single"]\nAvada 3.0 has over 100 new features! New layouts, short codes, theme options and more. We''ve put lots of love into this update!\n[separator top="23"]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Advanced theme options panel to easily customize your website
  • \n
  • Multiple layout options for home pages, portfolio and blog section
  • \n
  • Amazing shortcodes loaded with meta options for easy customization
  • \n
\n[/checklist]\n[separator top="30" style="single"]\n[button color="green" size="large" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target="_self"]Purchase Avada Now![/button][/one_half]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="35px" paddingBottom="0px"]\n

More Ways Than Ever To Display Your Hard Work!

\n

We''ve added several new shortcodes and more blog layouts that allow you to build amazing pages for your website.

\n[separator top="40" style="double"]\n[recent_works layout="grid" filters="false" columns="3" cat_slug="" number_posts="6"][/recent_works]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="50px" paddingBottom="50px"]\n[title size="2"]So What Else Does Avada Include? We''ll Tell You![/title]\n[two_third last="no"]\nAvada is loaded with features and options that make it easy for you to build an online presence. We''ve put a lot of thought and care into making Avada user-friendly, and our 20,000+ sales are proof to that point. We know you will enjoy Avada as much as we do. It offers so many different options like multiple styles of portfolio layouts that allow you to choose text excerpts or not, sidebars or 1-4 columns. We also offer 7 different blog blog layouts that include new grid and timeline styles. And of course it includes all of our pre made demo pages. Include all of that with over 100 shortcodes and you have endless layout and design options to build your website. Avada also includes free support and future updates that will always include new features from user feedback, this can be the last theme you ever buy!\n[/two_third]\n[one_third last="yes"]\n[accordian]\n[toggle title="Our Company Mission"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[/accordian]\n[/one_third]\n[separator top="20" style="none"]\n[counters_box][counter_box value="75"]Counter Title Goes Here[/counter_box][counter_box value="55"]Counter Title Goes Here[/counter_box][counter_box value="65"]Counter Title Goes Here[/counter_box][counter_box value="85"]Counter Title Goes Here[/counter_box][/counters_box]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="65px" paddingBottom="0px"]\n[one_half last="no"]\n[title size="2"]Amazing Tools To Build Awesome Websites[/title]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Advanced theme options panel to easily customize your website
  • \n
  • Multiple layout options for home pages, portfolio and blog section
  • \n
  • Amazing shortcodes loaded with meta options for easy customization
  • \n
  • We offer free support because we care about your site as much as you.
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\nlightbox title\n[/one_half]\n[/fullwidth]\n\n[separator top="-25" style="none"]', 'Home Version 14', '', 'publish', 'open', 'closed', '', 'home-version-14-2', '', '', '2013-05-24 19:48:46', '2013-05-24 19:48:46', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3628', 0, 'page', '', 0), +(3638, 1, '2013-05-24 19:50:44', '2013-05-24 19:50:44', '\n\n[separator top="-56" style="none"]\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avadatest4/wp-content/uploads/2013/05/page_bkgd1.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="#f6f6f6" paddingTop="40px" paddingBottom="40px"]\nimage_2\n[/fullwidth]\n[separator top="-25" style="none"]\n\n\n\n[fullwidth backgroundcolor="#f6f6f6" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\n

Avada 3.0: The Best Version Yet With over 100 New Features!

\n

Yes that''s right, we''ve added over 100 new features! New layouts, short codes, theme options & more, along with lots of love & a hefty sprinkle of pixie dust!!

\n[separator top="20" style="double"]\n[/fullwidth]\n\n\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#f6f6f6" paddingTop="20px" paddingBottom="20"]\n[separator top="80" style="none"]\n[content_boxes layout="icon-boxed" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n[content_box title="Beautifully Simplistic" icon="tablet" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]If you''re a code nerd or a Word Press newbie, Avada is for you. It''s built for everyone, and can be as simple or complex as you want. [/content_box]\n[content_box title="Free Support & Updates" icon="magic" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""] We truly care about our users and our end product. Our users love Avada, and you will too with free updates & incredible support.[/content_box]\n[content_box title="Blissful Layout Options " icon="thumbs-up" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]Avada includes so many different options and designs. Users are able to make amazingly cool layouts with the tools we provide.[/content_box]\n[/content_boxes]\n[separator top="65" style="none"]\n[content_boxes layout="icon-boxed" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n[content_box title="Beautifully Simplistic" icon="tablet" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]If you''re a code nerd or a Word Press newbie, Avada is for you. It''s built for everyone, and can be as simple or complex as you want. [/content_box]\n[content_box title="Free Support & Updates" icon="magic" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""] We truly care about our users and our end product. Our users love Avada, and you will too with free updates & incredible support.[/content_box]\n[content_box title="Blissful Layout Options " icon="thumbs-up" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]Avada includes so many different options and designs. Users are able to make amazingly cool layouts with the tools we provide.[/content_box]\n[/content_boxes]\n[/fullwidth]\n\n\n\n[fullwidth backgroundcolor="#f6f6f6" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="50px" paddingBottom="0px"]\n[one_half last="no"]\n

What Else? Over 21,000 Users Choose Avada!

\n[separator top="30" style="single"]\nAvada 3.0 has over 100 new features! New layouts, short codes, theme options and more, along with a hefty sprinkle of pixie dust! We''ve put lots of love into this update and have included something for everyone!\n[separator top="28"]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Advanced theme options panel to easily customize your website
  • \n
\n[/checklist]\n[separator top="35" style="single"]\n[button color="green" size="large" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target="_self"]Purchase Avada Now![/button]\n[/one_half]\n\n[one_half last="yes"][separator top="10" style="none"]\n[recent_posts layout="thumbnails-on-side" columns="1" number_posts="3" cat_slug="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="12" strip_html="true"][/recent_posts]\n[/one_half]\n[/fullwidth]\n[separator top="-40"]\n\n\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="0px"]\n[title size="2"]Amazingly Versatile Shortcodes[/title]\n[one_third last="no"]\nLid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets.\n
    \n
  • Fully responsive so your content looks great
  • \n
  • Loaded with lots of amazing shortcodes
  • \n
  • Unlimited color options via theme options
  • \n
\n[/one_third]\n\n[two_third last="yes"]\n[tabs tab1="Tab Data #1" tab2="Tab Data #2" tab3="Tab Data #3" layout="vertical"]\n[tab id=1]\n[fontawesome icon="random" circle="yes" size="large"]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo.\n[/tab]\n[tab id=2]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo. amets dolores.[/tab]\n[tab id=3]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo. amets dolores.[/tab]\n[/tabs]\n[/two_third][/fullwidth]\n[separator top="-50" style="none"]', 'Home Version 15', '', 'publish', 'open', 'closed', '', 'home-version-15', '', '', '2013-05-24 19:50:44', '2013-05-24 19:50:44', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3638', 0, 'page', '', 0), +(3652, 1, '2013-05-24 19:55:33', '2013-05-24 19:55:33', '\n\n[separator top="-15"]\n

Hey, We''re Avada & We Make Beautiful Things! Check It Out!

\n

Yes that''s right, we''ve added over 100 new features! New layouts, short codes, theme options & more, along with lots of love & a hefty sprinkle of pixie dust!!

\n[separator top="65" style="none"]\n\n\n\n\n[recent_works layout="grid" filters="true" columns="3" cat_slug="" number_posts="12"][/recent_works]\n\n\n\n\n[separator top="65" style="double"]\n[one_half last="no"][testimonials]\n[testimonial name="William Genske" gender="male" company="Avada Theme" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]"Thank you for your very professional and prompt response. I went to look for answers to my own questions and quickly realized tha the information I was requesting was very easy to find. As were the videos and the instructions. In fact everything has been perfect so far. This is by far the most well supported theme I have ever had the pleasure to work with. Yes, I have purchased it and it is working great. Lots of wonderful options. I wished I had found you before I spent money on a competitors theme. Thanks again for the great support and for a great product. "[/testimonial]\n\n[testimonial name="Stuartyboy" gender="female" company="Avada Theme" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]"If I could give 100 stars for support and attention to detail I definitely would. I''ve purchased a good number of Wordpress themes from various developers that look good on Themeforest but after you buy them you find numerous problems, bugs, crazy admin and very very poor support. I purchased the Avada theme and there were a couple of problems too, but the guys from ThemeFusion were remarkable – I really mean this. The speed of support and attention to detail is quite phenomenal. If you are considering buying this theme at all then take it from me, you will be extremely pleased. Thanks very much to Luke & Muhammad!"[/testimonial]\n\n\n[testimonial name="Rel1961" gender="male" company="Avada Theme" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]"I have to echo sarumbear''s post on the previous page (82), I too can highly recomend this theme for it''s ease of use and support. Hell I manufacture cupboards for a living and have no previous experince with web design, so only use this to build our own company website and am finding it so easy, all the work is done for you. To the Avada team – thank you ALL for all the hard work especially after this huge update when you have released a further update the minute a problem was encountered. PS:- Mell I often have a good laugh at your responses to difficult customers"[/testimonial]\n\n[testimonial name="Strata1" gender="male" company="Avada Theme" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]"Hi, I just wanted to say thanks for the great theme. I''m finding new ways to improve it every day and find that it''s been the most user-friendly theme I''ve ever purchased. I am practically computer illiterate and know extremely little if anything at all about code, CSS, or any of the inner workings of a website. The Avada theme removes all the worry, hassle, frustration and angst that beginners (and novices) feel when designing websites. If you can read and follow directions, this theme is for you. I''ve tried a hundred plug-ins with other themes and the Avada theme makes almost all of them unnecessary and obsolete."[/testimonial]\n[/testimonials]\n[/one_half]\n\n[one_half last="yes"]\n

What Else? Over 21,000 Users Choose Avada!

\n[separator top="30" style="single"]\nAvada 3.0 has over 100 new features! New layouts, short codes, theme options and more, along with a hefty sprinkle of pixie dust! We''ve put lots of love into this update and have included something for everyone!\n[separator top="28"]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Advanced theme options panel to easily customize your website
  • \n
\n[/checklist][/one_half]\n', 'Home Portfolio Style 1', '', 'publish', 'open', 'closed', '', 'home-portfolio-style-1', '', '', '2013-05-24 19:55:33', '2013-05-24 19:55:33', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3652', 0, 'page', '', 0), +(3655, 1, '2013-05-24 19:56:24', '2013-05-24 19:56:24', '\n\n[separator top="-56" style="none"]\n[fullwidth backgroundcolor="#f6f6f6" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\n

Hey, We''re Avada & We Make Beautiful Things! Check It Out!

\n

Yes that''s right, we''ve added over 100 new features! New layouts, short codes, theme options & more, along with lots of love & a hefty sprinkle of pixie dust!

\n[separator top="20" style="none"]\n[/fullwidth]\n\n\n\n\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="#e5e4e4" paddingTop="50px" paddingBottom="25px"]\n[recent_works layout="grid-with-excerpts" filters="true" columns="2" cat_slug="" number_posts="6" excerpt_words="22"][/recent_works]\n[/fullwidth]\n\n\n\n\n[fullwidth backgroundcolor="#f6f6f6" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="50px" paddingBottom="20px"]\n[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#f6f6f6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\n[/fullwidth]\n[separator top="-100" style="none"]\n', 'Home Portfolio Style 2', '', 'publish', 'open', 'closed', '', 'home-portfolio-style-2', '', '', '2013-05-24 19:56:24', '2013-05-24 19:56:24', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3655', 0, 'page', '', 0), +(3658, 1, '2013-05-24 19:56:57', '2013-05-24 19:56:57', '\n\n[flexslider layout="posts" excerpt="25" category="" limit="3" id=""][/flexslider][separator top="40" style="none"]\n\n\n\n[tagline_box backgroundcolor="#f6f6f6" shadow="no" border="1px" bordercolor="#f6f6f6" highlightposition="bottom" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="Avada includes a blog shortcode you can use anywhere on the site!" description="This blog shortcode was submitted by Markus, one of our 20,000+ Avada users! It just goes to show what an awesome community we have, everyone is willing to help & share ideas.  Dont wait, be apart of it today!"][/tagline_box]\n\n\n\n[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="35" meta_all="yes" meta_author="yes" meta_categories="yes" meta_comments="yes" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="grid"][/blog]', 'Home Blog Style 1', '', 'publish', 'open', 'closed', '', 'home-blog-style-1', '', '', '2013-05-24 19:56:57', '2013-05-24 19:56:57', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3658', 0, 'page', '', 0), +(3660, 1, '2013-05-24 19:57:49', '2013-05-24 19:57:49', '\n\n[tagline_box backgroundcolor="#f6f6f6" shadow="no" border="1px" bordercolor="#f6f6f6" highlightposition="bottom" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="Avada includes a blog shortcode you can use anywhere on the site!" description="This blog shortcode was submitted by Markus, one of our 20,000+ Avada users! It just goes to show what an awesome community we have, everyone is willing to help and share ideas. Our first priority is to provide solutions to our users, and we are happy to do that. Dont wait, come be apart of it today!"][/tagline_box]\n\n\n\n\n[blog posts_per_page="3" author="" author_name="" category_name="" category="" order="DESC" orderby="date" post_status="publish" post_type="post" tag="" nopaging="false" blog_layout="large"][/blog]\n', 'Home Blog Style 2', '', 'publish', 'open', 'closed', '', 'home-blog-style-2', '', '', '2013-05-24 19:57:49', '2013-05-24 19:57:49', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3660', 0, 'page', '', 0), +(3662, 1, '2013-05-24 19:58:21', '2013-05-24 19:58:21', '\n\n[separator top="-55" style="none"]\n[fullwidth backgroundcolor="#f6f6f6" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\n

Avada 3.0: This Is An Example Page For A Product Launch

\n

Yes that''s right, we''ve added over 100 new features! New layouts, short codes, theme options & more, along with lots of love & a hefty sprinkle of pixie dust!!

\n[/fullwidth]\n\n\n\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="px" bordercolor="" paddingTop="66px" paddingBottom="50px"]\n[one_half last="no"]\n

What Else? Over 21,000 Users Choose Avada!

\n[separator top="25" style="single"]\n

This is where your amazing product promotion text can go so your viewers can read about all the features and see awesome it is!

\n[separator top="15"]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
\n[/checklist]\n[separator top="25" style="single"]\n[button color="green" size="large" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target="_self"]Purchase Avada Now![/button]\n[/one_half]\n[one_half last="yes"]\nlightbox title\n[/one_half]\n[/fullwidth]\n\n\n\n\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="40px" paddingBottom="40px"]\n

Amazing Product: Get It Before Anyone Else!

\n

This is where your amazing product promotion text can go so your viewers can read about how awesome it is!

\n[separator top="20" style="none"]\nlightbox title\n[/fullwidth]\n\n\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="px" bordercolor="" paddingTop="70px" paddingBottom="40px"]\n[one_half last="no"]\n[title size="2"]Amazing Tools To Build Awesome Websites[/title]\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolores.\n[separator top="30" style="none"]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Advanced theme options panel to easily customize your website
  • \n
\n[/checklist]\n[/one_half]\n[one_half last="yes"]\n\n[/one_half]\n[/fullwidth]\n\n\n\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="#f6f6f6" paddingTop="30px" paddingBottom="0px"]\n

Get This Amazing Product Now! See Details Below!

\n

This is where your amazing product promotion text can go so your viewers can read about all the features and see awesome it is!

\n[separator top="40" style="none"]\nlightbox title\n[/fullwidth]\n\n\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="" paddingTop="65px" paddingBottom="0px"]\n[one_half last="no"]\nlightbox title\n[/one_half]\n[one_half last="yes"]\n

What Else? Over 21,000 Users Choose Avada!

\n[separator top="25" style="single"]\n

This is where your amazing product promotion text can go so your viewers can read about all the features and see awesome it is!

\n[separator top="15"]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
\n[/checklist]\n[separator top="25" style="single"]\n[button color="green" size="large" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target="_self"]Purchase Avada Now![/button]\n[/one_half]\n[/fullwidth]\n[separator top="-25" style="none"]', 'Product Launch', '', 'publish', 'open', 'closed', '', 'product-launch', '', '', '2013-05-24 19:58:21', '2013-05-24 19:58:21', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3662', 0, 'page', '', 0), +(3664, 1, '2013-05-24 19:59:03', '2013-05-24 19:59:03', '\n\n[separator top="-55" style="none"]\n[fullwidth backgroundcolor="#333333" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="#e5e4e4" paddingTop="50px" paddingBottom="40px"]\nimage_2\n[/fullwidth]\n\n\n\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="60px" paddingBottom="0px"]\n[one_half last="no"]\n

What Else? Over 21,000 Users Choose Avada!

\n[separator top="30" style="single"]\nAvada 3.0 has over 100 new features! New layouts, short codes, theme options and more, along with a hefty sprinkle of pixie dust! We''ve put lots of love into this update and have included something for everyone!\n[separator top="28"]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Advanced theme options panel to easily customize your website
  • \n
\n[/checklist]\n[separator top="35" style="single"]\n[button color="green" size="large" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target="_self"]Purchase Avada Now![/button][/one_half]\n\n[one_half last="yes"][separator top="10" style="none"]\n[recent_posts layout="thumbnails-on-side" columns="1" number_posts="3" cat_slug="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="13" strip_html="true"][/recent_posts]\n[/one_half]\n[/fullwidth]\n\n\n\n\n[separator top="-25" style="none"]\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd1.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="" paddingTop="40px" paddingBottom="8px"]\n[separator top="20" style="double"]\n

Full Width Sections Are Very Cool, Add Background Image With Fixed Scrolling, or Add Background Color With A Border

\n[separator top="20" style="double"]\n[separator top="40" style="none"]\n[recent_works layout="grid" filters="true or false" columns="3" cat_slug="" number_posts="9" excerpt_words="15"][/recent_works]\n[/fullwidth]\n\n\n\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\n[separator top="20" style="double"]\n

Avada 3.0: The Best Version Yet With over 100 New Features!

\n

Yes that''s right, we''ve added over 100 new features! New layouts, short codes, theme options & more, along with lots of love & a hefty sprinkle of pixie dust!!

\n[separator top="20" style="double"]\n[/fullwidth]\n[separator top="-45" style="none"]\n', 'Example Page 1', '', 'publish', 'open', 'closed', '', 'example-page-1', '', '', '2013-05-24 19:59:03', '2013-05-24 19:59:03', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3664', 0, 'page', '', 0), +(3670, 1, '2013-05-24 20:00:14', '2013-05-24 20:00:14', '\n\n[separator top="-55" style="none"]\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="0px"]\n

Avada 3.0: Now With Full Width Page Templates & Sections

\n

Yes that''s right, we''ve added over 100 new features! New layouts, short codes, theme options & more, along with lots of love & a hefty sprinkle of pixie dust!!

\n[separator top="50" style="double"]\n[separator top="80" style="none"]\n\n[content_boxes layout="icon-boxed" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="#f2f2f2"]\n[content_box title="Beautifully Simplistic" icon="tablet" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]If you''re a code nerd or a Word Press newbie, Avada is for you. It''s built for everyone, and can be as simple or complex as you want. [/content_box]\n[content_box title="Free Support & Updates" icon="magic" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""] We truly care about our users and our end product. Our users love Avada, and you will too with free updates & incredible support.[/content_box]\n[content_box title="Blissful Layout Options " icon="thumbs-up" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]Avada includes so many different options and designs. Users are able to make amazingly cool layouts with the tools we provide.[/content_box]\n[/content_boxes]\n[separator top="65" style="none"]\n[content_boxes layout="icon-boxed" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="#f2f2f2"]\n[content_box title="Beautifully Simplistic" icon="tablet" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]If you''re a code nerd or a Word Press newbie, Avada is for you. It''s built for everyone, and can be as simple or complex as you want. [/content_box]\n[content_box title="Free Support & Updates" icon="magic" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""] We truly care about our users and our end product. Our users love Avada, and you will too with free updates & incredible support.[/content_box]\n[content_box title="Blissful Layout Options " icon="thumbs-up" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]Avada includes so many different options and designs. Users are able to make amazingly cool layouts with the tools we provide.[/content_box]\n[/content_boxes]\n\n[separator top="75" style="double"]\n[one_half last="no"]\n[slider][slide]http://theme-fusion.com/avadaxml/wp-content/uploads/2013/05/blog_1.jpg[/slide][slide]http://theme-fusion.com/avadaxml/wp-content/uploads/2013/05/blog_2.jpg[/slide][/slider]\n[/one_half]\n[one_half last="yes"]\n[title size="2"]Over 20,000 Purchases, We Know You''ll Love Avada![/title]\n[separator top="30" style="single"]\nAvada 3.0 has over 100 new features! New layouts, short codes, theme options and more, along with a hefty sprinkle of pixie dust!\n[separator top="28"]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Advanced theme options panel to easily customize your website
  • \n\n
\n[/checklist]\n[separator top="35" style="single"]\n[button color="green" size="large" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target="_self"]Purchase Avada Now![/button][/one_half]\n\n[separator top="-25" style="none"]\n[separator top="50" style="double"]\n\n[tagline_box backgroundcolor="" shadow="yes" border="0px" bordercolor="" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\n\n[/fullwidth]\n[separator top="-45" style="none"]', 'Example Page 2', '', 'publish', 'open', 'closed', '', 'example-page-2', '', '', '2013-05-24 20:00:14', '2013-05-24 20:00:14', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3670', 0, 'page', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(3678, 1, '2013-05-24 20:01:55', '2013-05-24 20:01:55', '\n\n[two_third last="no"]image_3b[/two_third]\n\n\n\n\n[one_third last="yes"][title size="2"]Who Am I?[/title]\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam vols.\n[separator top="40" style="single"]\n[checklist icon="plus" iconcolor="light" circle="yes"]\n
    \n
  • Fully responsive so content looks great
  • \n
  • Awesome sliders to showcase content
  • \n
  • Advanced theme options panel
  • \n
  • Amazing shortcodes loaded with options
  • \n
\n[/checklist]\n[/one_third]\n\n\n\n[separator top="0" style="double"]\n[separator top="50" style="none"]\n[counters_circle][counter_circle filledcolor="#a0ce4e" unfilledcolor="#e3edd1" value="95"]HTML[/counter_circle][counter_circle filledcolor="#a0ce4e" unfilledcolor="#e3edd1" value="85"]CSS[/counter_circle][counter_circle filledcolor="#a0ce4e" unfilledcolor="#e3edd1" value="90"]WP[/counter_circle][counter_circle filledcolor="#a0ce4e" unfilledcolor="#e3edd1" value="100"][fontawesome icon="thumbs-up" circle="no" size="large" iconcolor="##747474" circlecolor="#333333" circlebordercolor="#333333"][/counter_circle][/counters_circle]\n\n\n\n\n[separator top="70" style="none"]\n[one_half last="no"]\n[title size="2"]Profile Picture[/title]\n[person name="Johnathan Dorian" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Front End Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadip ipsums uns.[/person]\n[/one_half]\n\n\n\n\n[one_half last="yes"]\n[title size="2"]Some of my highlights[/title]\n[accordian]\n[toggle title="My Favorite Projects" open="yes"]Fugiat dapibus, tellus ac cursus commodo, mauris sit perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rers.\n[separator top="20" style="none"]\n[checklist icon="plus" iconcolor="light" circle="yes"]\n
    \n
  • Fully responsive so content looks great
  • \n
  • Awesome sliders to showcase content
  • \n
  • Amazing shortcodes loaded with options
  • \n
\n[/checklist][/toggle]\n[toggle title="The Highest Accomplishment"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam vols.[/toggle]\n[toggle title="My Work Process"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un velit, sed quia nons. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enisi.[/toggle]\n[toggle title="Off Topic Favorite Things to Do"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam vols.[/toggle]\n[/accordian]\n[/one_half]\n\n\n\n\n[separator top="55" style="double"]\n

Here''s The Good Stuff. Some of My Best Work Is Featured Below.

\n

Yes that''s right, we''ve added over 100 new features! New layouts, short codes, theme options & more, along with lots of love & a hefty sprinkle of pixie dust!!

\n[separator top="60" style="none"]\n\n[recent_works layout="grid" filters="false" columns="3" cat_slug="" number_posts="6" excerpt_words="15"][/recent_works]\n\n\n\n\n[tagline_box backgroundcolor="" shadow="yes" border="1px" bordercolor="" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]', 'About Me', '', 'publish', 'open', 'closed', '', 'about-me', '', '', '2013-05-24 20:01:55', '2013-05-24 20:01:55', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3678', 0, 'page', '', 0), +(4204, 1, '2013-04-08 23:16:22', '2013-04-08 23:16:22', '[tagline_box title="We know you will love Avada as much as we do. We put so much time and effort into Avada, and our wonderful users who buy it. But dont take our word for it, just ask our users!  Check below to read testimonials from our dedicated users!"][/tagline_box]\n\n[separator top="-15"]\n\n[one_half last="no"]\n[testimonial name="William Genske" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.[/testimonial]\n[/one_half]\n\n[one_half last="yes"]\n[testimonial name="Stuartyboy" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.[/testimonial]\n[/one_half]\n\n[separator top="10"]\n\n[one_third last="no"]\n[testimonial name="Aajami" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_third]\n\n[one_third last="no"]\n[testimonial name="Lucasgriffin" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_third]\n\n[one_third last="yes"]\n[testimonial name="Gojcus" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_third]\n\n[separator top="20"]\n\n[testimonial name="Strata1" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n\n[separator top="85"]\n\n[one_half last="no"]\n\n[testimonial name="Stephanvuuren" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_half]\n\n[one_half last="yes"]\n[testimonial name="Rel1961" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_half]\n\n[separator top="20"]\n\n[one_third last="no"]\n[testimonial name="Martinitgirl" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus ers.[/testimonial]\n[/one_third]\n\n[two_third last="yes"]\n[testimonial name="eMKT" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore.[/testimonial]\n[/two_third]\n\n[separator top="20"]\n\n[two_third last="no"]\n[testimonial name="Sarumbear" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/two_third]\n\n[one_third last="yes"]\n[testimonial name="Die_wonne" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_third]\n\n[separator top="10"]\n\n[one_fourth last="no"]\n[testimonial name="Javed_iqbal" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_fourth]\n\n[one_fourth last="no"]\n[testimonial name="Tobedoit" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_fourth]\n\n[one_fourth last="no"]\n[testimonial name="jvgDesign" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_fourth]\n\n[one_fourth last="yes"]\n[testimonial name="Christobar9" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_fourth]\n\n[separator top="20"]\n\n[testimonial name="kdt784" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n\n[separator top="85"]\n\n[one_half last="no"]\n[testimonial name="Jwhosky1" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_half]\n\n[one_half last="yes"]\n[testimonial name="Tashigyaltsen" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_half]\n\n[separator top="20"]\n\n[one_third last="no"]\n[testimonial name="Ferry" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n[/one_third]\n\n[one_third last="no"]\n[testimonial name="3elevenmedia" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas.[/testimonial]\n\n[/one_third]\n\n[one_third last="yes"]\n[testimonial name="Ross Sadler" gender="male" company="Avada Theme"]Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas. [/testimonial]\n\n[/one_third]\n\n[separator top="40"]\n\n[tagline_box link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" button="Purchase Now" title="Want to join the club and experience these awesome results our users have had?" description="All you need to do is buy Avada! You will not be disappointed, our theme and service are top of the line! Buy now!"][/tagline_box]', 'User Reviews', '', 'publish', 'open', 'closed', '', 'user-reviews-2', '', '', '2013-04-08 23:16:22', '2013-04-08 23:16:22', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3537', 0, 'page', '', 0), +(3697, 1, '2013-05-24 20:06:34', '2013-05-24 20:06:34', '[blog number_posts="10" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="35" meta_all="yes" meta_author="yes" meta_categories="yes" meta_comments="yes" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="grid"][/blog]', 'Grid', '', 'publish', 'open', 'closed', '', 'grid', '', '', '2013-05-24 20:06:34', '2013-05-24 20:06:34', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3697', 0, 'page', '', 0), +(3698, 1, '2013-05-24 20:06:42', '2013-05-24 20:06:42', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="35" meta_all="yes" meta_author="yes or no" meta_categories="yes or no" meta_comments="yes or no" meta_date="yes or no" meta_link="yes or no" paging="no" scrolling="infinite" strip_html="yes" layout="timeline"][/blog]', 'Timeline', '', 'publish', 'open', 'closed', '', 'timeline', '', '', '2013-05-24 20:06:42', '2013-05-24 20:06:42', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3698', 0, 'page', '', 0), +(3699, 1, '2013-05-24 20:06:48', '2013-05-24 20:06:48', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="35" meta_all="yes" meta_author="yes" meta_categories="yes" meta_comments="yes" meta_date="yes" meta_link="yes" paging="no" scrolling="pagination" strip_html="yes" layout="large alternate"][/blog]', 'Large Alternate', '', 'publish', 'open', 'closed', '', 'large-alternate', '', '', '2013-05-24 20:06:48', '2013-05-24 20:06:48', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3699', 0, 'page', '', 0), +(3700, 1, '2013-05-24 20:06:54', '2013-05-24 20:06:54', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="15" meta_all="yes" meta_author="yes" meta_categories="yes" meta_comments="yes" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="medium alternate"][/blog]', 'Medium Alternate', '', 'publish', 'open', 'closed', '', 'medium-alternate', '', '', '2013-05-24 20:06:54', '2013-05-24 20:06:54', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3700', 0, 'page', '', 0), +(3705, 1, '2013-05-24 20:18:58', '2013-05-24 20:18:58', '[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="We have 4 different post/page sliders to choose from!" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\n\n[separator top="20"]\n\n[two_third last="no"][flexslider layout="posts" category="audio"][/flexslider][/two_third]\n[one_third last="yes"]\n[title size="2"]Post Slider With Titles[/title]\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ac nisl eget metus imperdiet venenatis non at nisi. Nam vitae risus neque, sed egestas sem. Suspendisse tristique, purus et ullamcorper tempor, purus enim scelerisque nisl, eget mollis turpis tellus ac augue. Proin aliquet lorem at magna eleifend molestie. Donec eu malesuada odio. Pellentesque euismod nulla eget lorem fringilla pharetra. In odio leo, interdum nec laoreet sed, tempus sit amet.\n\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Unlimited use per page
  • \n
  • Auto pulls recent blog posts & titles
  • \n
  • Many parameters to control content & slide
  • \n
\n[/checklist]\n[/one_third]\n\n[separator top="100" style="shadow"]\n[one_third last="no"]\n[title size="2"]Post Slider Excerpt & Titles[/title]\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ac nisl eget metus imperdiet venenatis non at nisi. Nam vitae risus neque, sed egestas sem. Suspendisse tristique, purus et ullamcorper tempor, purus enim scelerisque nisl, eget mollis turpis tellus ac augue. Proin aliquet lorem at magna eleifend molestie. Donec eu malesuada odio. Pellentesque euismod nulla eget lorem fringilla pharetra. In odio leo, interdum nec laoreet sed, tempus sit amet.\nor.\n\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Unlimited use per page
  • \n
  • Auto pulls recent blog posts, titles, excerpt
  • \n
  • Many parameters to control content & slide
  • \n
\n[/checklist]\n[/one_third][two_third last="yes"][flexslider layout="posts-with-excerpt" category="audio" excerpt="20"][/flexslider][/two_third]\n\n[separator top="100" style="shadow"]\n[two_third last="no"][flexslider layout="attachments" limit="10"][/flexslider][/two_third]\n[one_third last="yes"]\n[title size="2"]Post Slider With Attachments[/title]\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ac nisl eget metus imperdiet venenatis non at nisi. Nam vitae risus neque, sed egestas sem. Suspendisse tristique, purus et ullamcorper tempor, purus enim scelerisque nisl, eget mollis turpis tellus ac augue. Proin aliquet lorem at magna eleifend molestie. Donec eu malesuada odio. Pellentesque euismod nulla eget lorem fringilla pharetra.\n\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Unlimited use per page
  • \n
  • Auto pulls recent blog posts, titles, excerpt
  • \n
  • Many parameters to control content & slide
  • \n
\n[/checklist]\n[/one_third]\n\n[separator top="100" style="shadow"]\n[one_third last="no"]\n[title size="2"]Slider With Images or Videos[/title]\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ac nisl eget metus imperdiet venenatis non at nisi. Nam vitae risus neque, sed egestas sem. Suspendisse tristique, purus et ullamcorper tempor, purus enim scelerisque nisl, eget mollis turpis tellus ac augue. Proin aliquet lorem at magna eleifend molestie. Donec eu malesuada odio. Pellentesque euismod nulla eget lorem fringilla pharetra.\n\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Unlimited use per page
  • \n
  • Auto pulls recent blog posts, titles, excerpt
  • \n
  • Many parameters to control content & slide
  • \n
\n[/checklist]\n[/one_third][two_third last="yes"][slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n[/two_third]', 'Page Post Sliders', '', 'publish', 'open', 'closed', '', 'page-post-sliders', '', '', '2013-05-24 20:18:58', '2013-05-24 20:18:58', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3705', 0, 'page', '', 0), +(3713, 1, '2013-05-24 20:22:31', '2013-05-24 20:22:31', '[separator top="-55" style="none"]\n[fullwidth backgroundcolor="#f6f6f6" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="10px" paddingBottom="20px"]\n[separator top="0" style="none"]\n

Avada 3.0: Now Includes The Ability For A 100% Width Page

\n

Yes that''s right, you can now have a 100& Full Width Page! Along with the new page template is a full width shortcode that you can use to contain content, insert background images or use a background color along with awesome scrolling effects. The new layout possibilities are absolutely stunning!

\n[/fullwidth]\n[separator top="50" style="none"]\n[one_fourth last="no"]\nimage 1\n[/one_fourth]\n[one_fourth last="no"]\nimage 1\n[/one_fourth]\n[one_fourth last="no"]\nimage 1\n[/one_fourth]\n[one_fourth last="yes"]\nimage 1\n[/one_fourth]', 'Full Width 100%', '', 'publish', 'open', 'closed', '', 'full-width-100', '', '', '2013-05-24 20:22:31', '2013-05-24 20:22:31', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3713', 0, 'page', '', 0), +(3717, 1, '2013-05-24 20:54:51', '2013-05-24 20:54:51', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Accordions and Toggles are perfect for adding multiple sections of  information with varying content and titles.  Accordions are best to use when you want the reader to only see one section at a time, and toggles are best to use when you want the reader to be able to open multiple sections at a time."][/tagline_box]\n\n[one_half last="no"]\n[title size="2"]One Toggle Open At A Time[/title]\n[accordian]\n[toggle title="Our Company Mission"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="We Can Deliver On Projects"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[/accordian]\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Multiple Toggles Open At A Time[/title]\n[toggle title="Our Company Mission"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="We Can Deliver On Projects"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[/one_half]\n\n[separator top="55" style="none"]\n\n[title size="2"]Specify A Toggle To Open By Default When The Page Loads[/title]\n[accordian]\n[toggle title="Our Company Mission" open="yes"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim.[/toggle]\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="We Can Deliver On Projects"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[/accordian]\n\n\n[separator top="55" style="none"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • You can have unlimited accordions on one page
  • \n
  • Insert images, graphics, or other shortcodes in the text description area
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • You can have unlimited accordion-items within each set
  • \n
  • You can set a specific toggle to be open by default when the page loads
  • \n
\n[/checklist]\n[/one_half]', 'Accordions & Toggles', '', 'publish', 'open', 'closed', '', 'accordions-toggles', '', '', '2013-05-24 20:54:51', '2013-05-24 20:54:51', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3717', 0, 'page', '', 0), +(3719, 1, '2013-05-24 20:55:29', '2013-05-24 20:55:29', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Alert messages can be used throughout the site. There are 4 styles; general, error, success and notice. The messages will close when the ''x'' is clicked. These messages are also integrated into the contact form for users when they submit the form. Use with column shortcodes to control the width."][/tagline_box]\n\n[alert type="general"]General Message. Your Message Goes Here.[/alert]\n[separator top="20" style="none"]\n[alert type="error"]Error Message. Your Message Goes Here.[/alert]\n[separator top="20" style="none"]\n[alert type="success"]Success Message. Your Message Goes Here.[/alert]\n[separator top="20" style="none"]\n[alert type="notice"]Notice Message. Your Message Goes Here.[/alert]\n\n[separator top="65" style=""]\n\n[title size="2"]Use Buttons And Other Shortcodes![/title]\n\n[one_half last="no"]\n[alert type="general"]You can insert buttons or any other shortcodes you wish into the message boxes.
[button color="e.g. green, darkgreen, orange, blue, red, pink, darkgray, lightgray or leave blank" size="large or small" link="" target=""]Hey! I''m a button![/button]
\n\n[/alert]\n[/one_half]\n[one_half last="yes"]\n[alert type="general"]You can insert icons or any other shortcodes you wish into the message box for added content.\n
[social_links colorscheme="dark" linktarget="" rss="#" facebook="#" twitter="#" dribbble="#" google="#" linkedin="#"]
\n[/alert]\n[/one_half]\n[separator top="45" style=""]\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Use four different message types; general, error, success, notice
  • \n
  • Can be inserted in any column width to control the size
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Use other shortcodes inside the message box
  • \n
  • Unlimited use on any page, and unlimited text message
  • \n
\n[/checklist]\n[/one_half]', 'Alert Messages', '', 'publish', 'open', 'closed', '', 'alert-messages', '', '', '2013-05-24 20:55:29', '2013-05-24 20:55:29', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3719', 0, 'page', '', 0), +(3721, 1, '2013-05-24 20:55:45', '2013-05-24 20:55:45', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada includes 3 different sets of animated counters; circles, boxes and bars. These are great for displaying varying types of data to your viewers, wether its sales percentages, skill levels, promotional levels or any other numbers."][/tagline_box]\n\n[separator top="20"]\n\n[title size="2"]Animated Counter Circles[/title]\n[counters_circle][counter_circle filledcolor="" unfilledcolor="" value="75"]75%[/counter_circle][counter_circle filledcolor="" unfilledcolor="" value="30"][fontawesome icon="adjust" circle="no" size="large"][/counter_circle][counter_circle filledcolor="" unfilledcolor="" value="70"]7/10[/counter_circle][counter_circle filledcolor="" unfilledcolor="" value="50"]Title[/counter_circle][/counters_circle]\n\n[separator top="70"]\n[title size="2"]Animated Counter Boxes[/title]\n[counters_box][counter_box value="75"]Counter Title Goes Here[/counter_box][counter_box value="55"]Counter Title Goes Here[/counter_box][counter_box value="65"]Counter Title Goes Here[/counter_box][counter_box value="85"]Counter Title Goes Here[/counter_box][/counters_box]\n\n[separator top="70"]\n[title size="2"]Animated Counter Progress Bars[/title]\n[progress percentage="95"]Your Title Here[/progress]\n[progress percentage="80"]Your Title Here[/progress]\n[progress percentage="75"]Your Title Here[/progress]\n[progress percentage="60"]Your Title Here[/progress]\n\n[separator top="70"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • 3 different styles with nice jQuery animation effects
  • \n
  • Insert custom titles and %''s per item, unlimited use per page
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Use %, Icon, Number Scale & Title with the counter circles
  • \n
  • Customize the filled and unfilled colors for circles and boxes
  • \n
\n[/checklist]\n[/one_half]', 'Animated Counters', '', 'publish', 'open', 'closed', '', 'animated-counters', '', '', '2013-05-24 20:55:45', '2013-05-24 20:55:45', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3721', 0, 'page', '', 0), +(3723, 1, '2013-05-24 20:56:07', '2013-05-24 20:56:07', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Accordions and Toggles are perfect for adding multiple sections of  information with varying content and titles.  Accordions are best to use when you want the reader to only see one section at a time, and toggles are best to use when you want the reader to be able to open multiple sections at a time."][/tagline_box]\n\n[title size="2"]Large And Small Buttons[/title]\n[one_fourth]\n[button color="green" size="large" gradient1="" gradient2="" link="" target=""]LARGE BUTTON[/button]\n[/one_fourth]\n\n[one_fourth]\n[button color="darkgreen" size="large" gradient1="" gradient2="" link="" target=""]LARGE BUTTON[/button]\n[/one_fourth]\n\n[one_fourth]\n[button color="orange" size="large" gradient1="" gradient2="" link="" target=""]LARGE BUTTON[/button]\n[/one_fourth]\n\n[one_fourth last="yes"]\n[button color="blue" size="large" gradient1="" gradient2="" link="" target=""]LARGE BUTTON[/button]\n[/one_fourth]\n\n[one_fourth]\n[button color="red" size="large" gradient1="" gradient2="" link="" target=""]LARGE BUTTON[/button]\n[/one_fourth]\n\n[one_fourth]\n[button color="pink" size="large" gradient1="" gradient2="" link="" target=""]LARGE BUTTON[/button]\n[/one_fourth]\n\n[one_fourth]\n[button color="darkgray" size="large" gradient1="" gradient2="" link="" target=""]LARGE BUTTON[/button]\n[/one_fourth]\n\n[one_fourth last="yes"]\n[button color="lightgray" size="large" gradient1="" gradient2="" link="" target=""]LARGE BUTTON[/button]\n[/one_fourth]\n\n[one_fourth]\n[button color="green" size="small" gradient1="" gradient2="" link="" target=""]small BUTTON[/button]\n[/one_fourth]\n\n[one_fourth]\n[button color="darkgreen" size="small" gradient1="" gradient2="" link="" target=""]small BUTTON[/button]\n[/one_fourth]\n\n[one_fourth]\n[button color="orange" size="small" gradient1="" gradient2="" link="" target=""]small BUTTON[/button]\n[/one_fourth]\n\n[one_fourth last="yes"]\n[button color="blue" size="small" gradient1="" gradient2="" link="" target=""]small BUTTON[/button]\n[/one_fourth]\n\n[one_fourth]\n[button color="red" size="small" gradient1="" gradient2="" link="" target=""]small BUTTON[/button]\n[/one_fourth]\n\n[one_fourth]\n[button color="pink" size="small" gradient1="" gradient2="" link="" target=""]small BUTTON[/button]\n[/one_fourth]\n\n[one_fourth]\n[button color="darkgray" size="small" gradient1="" gradient2="" link="" target=""]small BUTTON[/button]\n[/one_fourth]\n\n[one_fourth last="yes"]\n[button color="lightgray" size="small" gradient1="" gradient2="" link="" target=""]small BUTTON[/button]\n[/one_fourth]\n\n[separator top="55" style="none"]\n\n[title size="2"]Dark Social Icons[/title]\n\n[social_links colorscheme="dark" linktarget="#" rss="#" facebook="#" twitter="#" dribbble="#" google="#" linkedin="#" blogger="#" tumblr="#" reddit="#" yahoo="#" deviantart="#" vimeo="#" youtube="#" pinterest="#" digg="#" flickr="#" forrst="#" myspace="#" skype="#"]\n[separator top="55" style="none"]\n[title size="2"]Light Social Icons[/title]\n
[social_links colorscheme="light" linktarget="#" rss="#" facebook="#" twitter="#" dribbble="#" google="#" linkedin="#" blogger="#" tumblr="#" reddit="#" yahoo="#" deviantart="#" vimeo="#" youtube="#" pinterest="#" digg="#" flickr="#" forrst="#" myspace="#" skype="#"]
\n\n[separator top="55" style="none"]\n\n[title size="2"]Social Share Box For Post Sharing[/title]\n[separator top="-25" style="none"]\n[sharing tagline="Share This Story, Choose Your Platform!" title="Title To Share" link="http://google.com" description="A small description of the page"][/sharing]\n\n\n\n[separator top="65" style="none"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Buttons: 8 Predefined color skins with nice hover effect
  • \n
  • Buttons: Use custom gradients per button, or global theme option
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Buttons & Social Icons: Set custom links and link target attribute
  • \n
  • Social Share Box: Customize tagline, insert title and link
  • \n
\n[/checklist]\n[/one_half]', 'Buttons & Social Icons', '', 'publish', 'open', 'closed', '', 'buttons-social-icons', '', '', '2013-05-24 20:56:07', '2013-05-24 20:56:07', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3723', 0, 'page', '', 0), +(3725, 1, '2013-05-24 20:56:23', '2013-05-24 20:56:23', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada comes with several carousel sliders to display your images. Recent Work works directly with your portfolio posts, Client Carousel is used to display client logos or images, and the Image Carousel is perfect for random images that need to be displayed on your site. "][/tagline_box]\n\n[separator top="20"]\n\n[title size="2"]Recent Work Carousel[/title]\n[recent_works][/recent_works]\n\n[separator top="30" style="single"]\n[one_third last="no"]\n

Use Carousels With Columns

\nThe recent work carousel can be used inside of column shortcodes to control the size. By default it will display all categories of portfolio posts. Users can specify that only a specific category is displayed instead of all categories, which gives you full control over what posts are seen by viewers.[/one_third]\n\n[two_third last="yes"][separator top="25" style="none"][recent_works][/recent_works][/two_third]\n\n[separator top="50"]\n\n[title size="2"]Client Carousel[/title]\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\n\n[separator top="30" style="single"]\n[one_third last="no"]\n

Use Carousels With Columns

\nThe client logo carousel can be used in column shortcodes. And its perfect to display client logos that link directly to projects on your site, or to an external page. There is also a "linktarget" attribute that allows you to select how the link will open.[/one_third]\n\n[two_third last="yes"][separator top="25" style="none"][clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients][/two_third]\n\n\n[separator top="50"]\n\n[title size="2"]Image Carousel[/title]\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][/clients]\n\n[separator top="30" style="single"]\n[one_third last="no"]\n

Use Carousels With Columns

\nThe client logo carousel can be used in column shortcodes. And its perfect to display client logos that link directly to projects on your site, or to an external page. There is also a "linktarget" attribute that allows you to select how the link will open.[/one_third]\n\n[two_third last="yes"][separator top="25" style="none"][clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][/clients]\n[/two_third]\n\n[separator top="40"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Unlimited use and items per carousel and per page
  • \n
  • Specify a specific category to display in recent work carousel
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Use with column shortcodes to control the width
  • \n
  • Set the link target attribute to control how the link opens
  • \n
\n[/checklist]\n[/one_half]', 'Carousel Sliders', '', 'publish', 'open', 'closed', '', 'carousel-sliders', '', '', '2013-05-24 20:56:23', '2013-05-24 20:56:23', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3725', 0, 'page', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(3727, 1, '2013-05-24 20:56:37', '2013-05-24 20:56:37', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada includes 4 design options for content boxes. Each one has been carefully designed and includes font awesome or image icon integration. You can use each set with either 1-4 column and it will adjust accordingly. You can set the icon color, circle color, circle border and background color for icon-boxed style."][/tagline_box]\n\n[separator top="20"]\n[title size="2"]Choose From 4 Different Design Styles[/title][separator top="80"]\n[content_boxes layout="icon-with-title" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="transparent"]\n[content_box title="Fully Responsive" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it adapt![/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including gradients![/content_box]\n[content_box last="yes" title="Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings & body copy with ease![/content_box]\n[/content_boxes]\n\n[separator top="80" style="shadow"]\n[content_boxes layout="icon-on-top" iconcolor="#333333" circlecolor="#fff" circlebordercolor="#333333" backgroundcolor="transparent"]\n[content_box title="Fully Responsive" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it adapt![/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including gradients![/content_box]\n[content_box last="yes" title="Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings & body copy with ease![/content_box]\n[/content_boxes]\n\n[separator top="80" style="shadow"]\n[content_boxes layout="icon-on-side" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="transparent"]\n[content_box title="Fully Responsive" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it adapt![/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including gradients![/content_box]\n[content_box last="yes" title="Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings & body copy with ease![/content_box]\n[/content_boxes]\n\n[separator top="105" style="shadow"]\n[content_boxes layout="icon-boxed" iconcolor="#333333" circlecolor="#ffffff" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n[content_box title="Fully Responsive" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it adapt![/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including gradients![/content_box]\n[content_box last="yes" title="Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings & body copy with ease![/content_box]\n[/content_boxes]\n\n[separator top="60"]\n[title size="2"]Use Them With 1-4 Columns[/title][separator top="80"]\n[content_boxes layout="icon-boxed" iconcolor="#333333" circlecolor="#ffffff" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n[content_box title="Fully Responsive" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it adapt![/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including gradients![/content_box]\n[content_box last="yes" title="Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings & body copy with ease![/content_box]\n[/content_boxes]\n\n[separator top="40"]\n\n[content_boxes layout="icon-boxed" iconcolor="#333333" circlecolor="#ffffff" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n[content_box title="Fully Responsive" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it adapt![/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including gradients![/content_box]\n[/content_boxes]\n\n[separator top="40"]\n[content_boxes layout="icon-boxed" iconcolor="#333333" circlecolor="#ffffff" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n[content_box title="Fully Responsive" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it adapt![/content_box]\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\n[/content_boxes]\n\n[separator top="40"]\n[content_boxes layout="icon-boxed" iconcolor="#333333" circlecolor="#ffffff" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n[content_box title="Fully Responsive" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it adapt![/content_box]\n[/content_boxes]\n\n[separator top="65"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Four beautiful and clean designs to choose from
  • \n
  • Use each set with either 1-4 items per column
  • \n
  • Use font awesome icons or your own image icons with each style
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Easily specify the icon color, circle color and circle border color
  • \n
  • Specify the background color for the icon-boxed style
  • \n
  • Custom link per item, custom link target, or remove the "Learn More" link
  • \n
\n[/checklist]\n[/one_half]', 'Content Boxes', '', 'publish', 'open', 'closed', '', 'content-boxes', '', '', '2013-05-24 20:56:37', '2013-05-24 20:56:37', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3727', 0, 'page', '', 0), +(3729, 1, '2013-05-24 20:56:50', '2013-05-24 20:56:50', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada includes five different divider lines; single, double, dotted, dashed and shadow. They are perfect to use to break up content and draw the users eye to the next section. Each divider short code also has a spacer element included that allows you to adjust the spacing to obtain more or less around the divider. "][/tagline_box]\n\n[title size="2"]5 Divider Styles[/title]\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eros ipsum, facilisis eget scelerisque non, fermentum at tellus. Etiam eleifend nibh quis eros gravida luctus. Vestibulum et velit tellus. Maecenas at fermentum dui. Nam metus nisl, volutpat id faucibus non, auctor at lectus. Nulla elementum, tortor non ornare feugiat, sapien nulla commodo velit, eget ultrices mauris nisi vitae ipsum. Ut vel dolor vel lacus venenatis egestas eget vel ante. Sed id mi turpis, sed ultrices orci ulla ids.\n\n[separator top="40" style="shadow"]\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eros ipsum, facilisis eget scelerisque non, fermentum at tellus. Etiam eleifend nibh quis eros gravida luctus. Vestibulum et velit tellus. Maecenas at fermentum dui. Nam metus nisl, volutpat id faucibus non, auctor at lectus. Nulla elementum, tortor non ornare feugiat, sapien nulla commodo velit, eget ultrices mauris nisi vitae ipsum. Ut vel dolor vel lacus venenatis egestas eget vel ante. Sed id mi turpis, sed ultrices orci ulla ids.\n\n[separator top="40" style="double"]\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eros ipsum, facilisis eget scelerisque non, fermentum at tellus. Etiam eleifend nibh quis eros gravida luctus. Vestibulum et velit tellus. Maecenas at fermentum dui. Nam metus nisl, volutpat id faucibus non, auctor at lectus. Nulla elementum, tortor non ornare feugiat, sapien nulla commodo velit, eget ultrices mauris nisi vitae ipsum. Ut vel dolor vel lacus venenatis egestas eget vel ante. Sed id mi turpis, sed ultrices orci ulla ids.\n\n[separator top="40" style="single"]\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eros ipsum, facilisis eget scelerisque non, fermentum at tellus. Etiam eleifend nibh quis eros gravida luctus. Vestibulum et velit tellus. Maecenas at fermentum dui. Nam metus nisl, volutpat id faucibus non, auctor at lectus. Nulla elementum, tortor non ornare feugiat, sapien nulla commodo velit, eget ultrices mauris nisi vitae ipsum. Ut vel dolor vel lacus venenatis egestas eget vel ante. Sed id mi turpis, sed ultrices orci ulla ids.\n\n[separator top="40" style="dashed"]\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eros ipsum, facilisis eget scelerisque non, fermentum at tellus. Etiam eleifend nibh quis eros gravida luctus. Vestibulum et velit tellus. Maecenas at fermentum dui. Nam metus nisl, volutpat id faucibus non, auctor at lectus. Nulla elementum, tortor non ornare feugiat, sapien nulla commodo velit, eget ultrices mauris nisi vitae ipsum. Ut vel dolor vel lacus venenatis egestas eget vel ante. Sed id mi turpis, sed ultrices orci ulla ids.\n\n[separator top="40" style="dotted"]\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eros ipsum, facilisis eget scelerisque non, fermentum at tellus. Etiam eleifend nibh quis eros gravida luctus. Vestibulum et velit tellus. Maecenas at fermentum dui. Nam metus nisl, volutpat id faucibus non, auctor at lectus. Nulla elementum, tortor non ornare feugiat, sapien nulla commodo velit, eget ultrices mauris nisi vitae ipsum. Ut vel dolor vel lacus venenatis egestas eget vel ante. Sed id mi turpis, sed ultrices orci ulla ids.\n[separator top="65" style="none"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • You can choose from five different divider styles
  • \n
  • Single, Double, Dotted, Dashed and Shadow
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Spacer element is included in the short code to obtain more or less space
  • \n
  • You can use "none" to not show a divider and only use it for spacing
  • \n
\n[/checklist]\n[/one_half]', 'Dividers', '', 'publish', 'open', 'closed', '', 'dividers', '', '', '2013-05-24 20:56:50', '2013-05-24 20:56:50', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3729', 0, 'page', '', 0), +(3731, 1, '2013-05-24 20:57:15', '2013-05-24 20:57:15', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Font Awesome Icons are incredibly awesome. Avada has them built right into the theme so you can use any of the 300+ icons. Each one comes in 3 sizes and can be used with or without a circle and every one is 100% full vector so they look incredibly sharp and are retina-ready!"][/tagline_box]\n\n[title size="2"]Avada Includes Font Awesome, 300+ Icon Set![/title]\n
[fontawesome icon="tablet" circle="yes" size="large"][fontawesome icon="beaker" circle="yes" size="large"][fontawesome icon="magic" circle="yes" size="large"][fontawesome icon="book" circle="yes" size="large"][fontawesome icon="cloud" circle="yes" size="large"][fontawesome icon="comments-alt" circle="yes" size="large"][fontawesome icon="random" circle="yes" size="large"][fontawesome icon="thumbs-up" circle="yes" size="large"][fontawesome icon="umbrella" circle="yes" size="large"][fontawesome icon="laptop" circle="yes" size="large"][fontawesome icon="key" circle="yes" size="large"]
\n[separator top="75" style="none"]\n\n[one_third last="no"]\n[title size="2"]Large Icons[/title]\n[fontawesome icon="stethoscope" circle="yes" size="large"][fontawesome icon="picture" circle="yes" size="large"][fontawesome icon="sitemap" circle="yes" size="large"]\n[/one_third]\n\n[one_third last="no"]\n[title size="2"]Medium Icons[/title]\n[fontawesome icon="magnet" circle="yes" size="medium"][fontawesome icon="asterisk" circle="yes" size="medium"][fontawesome icon="bar-chart" circle="yes" size="medium"][fontawesome icon="beer" circle="yes" size="medium"][fontawesome icon="bell" circle="yes" size="medium"][fontawesome icon="bookmark" circle="yes" size="medium"][fontawesome icon="fighter-jet" circle="yes" size="medium"][fontawesome icon="cloud-upload" circle="yes" size="medium"][fontawesome icon="credit-card" circle="yes" size="medium"][fontawesome icon="mobile-phone" circle="yes" size="medium"][fontawesome icon="edit" circle="yes" size="medium"][fontawesome icon="legal" circle="yes" size="medium"]\n[/one_third]\n\n[one_third last="yes"]\n[title size="2"]Small Icons[/title]\n[fontawesome icon="wrench" circle="yes" size="small"][fontawesome icon="save" circle="yes" size="small"][fontawesome icon="user" circle="yes" size="small"][fontawesome icon="columns" circle="yes" size="small"][fontawesome icon="upload" circle="yes" size="small"][fontawesome icon="file" circle="yes" size="small"][fontawesome icon="tint" circle="yes" size="small"][fontawesome icon="envelope" circle="yes" size="small"][fontawesome icon="link" circle="yes" size="small"][fontawesome icon="eye-open" circle="yes" size="small"][fontawesome icon="thumbs-up" circle="yes" size="small"][fontawesome icon="coffee" circle="yes" size="small"][fontawesome icon="tasks" circle="yes" size="small"][fontawesome icon="check-empty" circle="yes" size="small"][fontawesome icon="tag" circle="yes" size="small"][fontawesome icon="gift" circle="yes" size="small"][fontawesome icon="spinner" circle="yes" size="small"][fontawesome icon="pushpin" circle="yes" size="small"][fontawesome icon="move" circle="yes" size="small"][fontawesome icon="headphones" circle="yes" size="small"][fontawesome icon="music" circle="yes" size="small"][fontawesome icon="heart-empty" circle="yes" size="small"][fontawesome icon="ok" circle="yes" size="small"][fontawesome icon="remove" circle="yes" size="small"][fontawesome icon="pencil" circle="yes" size="small"][fontawesome icon="minus" circle="yes" size="small"][fontawesome icon="phone" circle="yes" size="small"][fontawesome icon="refresh" circle="yes" size="small"][fontawesome icon="plus" circle="yes" size="small"][fontawesome icon="font" circle="yes" size="small"][fontawesome icon="star-empty" circle="yes" size="small"][fontawesome icon="rocket" circle="yes" size="small"][fontawesome icon="bullseye" circle="yes" size="small"][fontawesome icon="smile" circle="yes" size="small"][fontawesome icon="code" circle="yes" size="small"][fontawesome icon="shield" circle="yes" size="small"]\n[/one_third]\n\n[separator top="45" style="none"]\n\n[title size="2"]Use them With or Without Circles[/title]\n
[fontawesome icon="desktop" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="fire" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="film" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="gift" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="check" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="cog" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="leaf" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="dashboard" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="lock" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="user" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="flag" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="bolt" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="smile" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="lightbulb" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="signal" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="truck" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="screenshot" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="time" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="camera-retro" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="print" circle="no" size="large" iconcolor="#9a9a9a"]
\n\n[separator top="80" style="none"]\n\n[title size="2"]Easily Control The Circle Color, Icon Color & Border Color[/title]\n
\n[fontawesome icon="tablet" circle="yes" size="large" iconcolor="#ffffff" circlecolor="#a0ce4e" circlebordercolor="#54770f"]\n[fontawesome icon="beaker" circle="yes" size="large" iconcolor="#ffffff" circlecolor="#398cd2" circlebordercolor="#398cd2"]\n[fontawesome icon="magic" circle="yes" size="large" iconcolor="#e27d3a" circlecolor="#ffffff" circlebordercolor="#e27d3a"]\n[fontawesome icon="cloud" circle="yes" size="large" iconcolor="#ffffff" circlecolor="#b83e2a" circlebordercolor="#b83e2a"]\n[fontawesome icon="book" circle="yes" size="large" iconcolor="#5c5d5c" circlecolor="#b1b1b1" circlebordercolor="#5c5d5c"]\n[fontawesome icon="comments-alt" circle="yes" size="large" iconcolor="#ffffff" circlecolor="#96947a" circlebordercolor="#96947a"]\n[fontawesome icon="random" circle="yes" size="large" iconcolor="#24469b" circlecolor="#ffffff" circlebordercolor="#24469b"]\n[fontawesome icon="thumbs-up" circle="yes" size="large" iconcolor="#ffffff" circlecolor="#6b5694" circlebordercolor="#6b5694"]\n[fontawesome icon="umbrella" circle="yes" size="large" iconcolor="#74a37b" circlecolor="#4f7a55" circlebordercolor="#4f7a55"]\n[fontawesome icon="laptop" circle="yes" size="large" iconcolor="#ffffff" circlecolor="#98a7c5" circlebordercolor="#98a7c5"]\n[fontawesome icon="key" circle="yes" size="large" iconcolor="#333333" circlecolor="#ffffff" circlebordercolor="#333333"]
', 'Font Awesome', '', 'publish', 'open', 'closed', '', 'font-awesome', '', '', '2013-05-24 20:57:15', '2013-05-24 20:57:15', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3731', 0, 'page', '', 0), +(3733, 1, '2013-05-24 20:57:42', '2013-05-24 20:57:42', '[fullwidth backgroundcolor="#ffffff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#f6f6f6" paddingTop="0px" paddingBottom="0px"]\n[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada now includes a full width 100% page template. Using this you can use full width sections that span the entire width of your browser window, or keep content contained inside the 960px width. Use background images, borders, colors, padding, positioning and more with the shortcode"][/tagline_box]\n[/fullwidth]\n\n[separator top="-10" style="none"]\n\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="#f6f6f6" paddingTop="30px" paddingBottom="20px"]\n

Avada 3.0: Now With Full Width Page Templates & Sections

\n

Yes that''s right, we''ve added over 100 new features! New layouts, short codes, theme options & more, along with lots of love & a hefty sprinkle of pixie dust!

\n[separator top="50" style="shadow"]\n[separator top="80" style="none"]\n[content_boxes layout="icon-boxed" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n[content_box title="Beautifully Simplistic" icon="tablet" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]If you''re a code nerd or a Word Press newbie, Avada is for you. It''s built for everyone, and can be as simple or complex as you want. [/content_box]\n[content_box title="Free Support & Updates" icon="magic" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""] We truly care about our users and our end product. Our users love Avada, and you will too with free updates & incredible support.[/content_box]\n[content_box title="Blissful Layout Options " icon="thumbs-up" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]Avada includes so many different options and designs. Users are able to make amazingly cool layouts with the tools we provide.[/content_box]\n[/content_boxes]\n[separator top="65" style="none"]\n[content_boxes layout="icon-boxed" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n[content_box title="Beautifully Simplistic" icon="tablet" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]If you''re a code nerd or a Word Press newbie, Avada is for you. It''s built for everyone, and can be as simple or complex as you want. [/content_box]\n[content_box title="Free Support & Updates" icon="magic" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""] We truly care about our users and our end product. Our users love Avada, and you will too with free updates & incredible support.[/content_box]\n[content_box title="Blissful Layout Options " icon="thumbs-up" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]Avada includes so many different options and designs. Users are able to make amazingly cool layouts with the tools we provide.[/content_box]\n[/content_boxes]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="50px" paddingBottom="20px"]\n[three_fourth last="no"]\n[title size="2"]We Are Here To Serve You[/title]\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui.\n\nRatione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla.\n[/three_fourth]\n\n[one_fourth last="yes"]\n[title size="2"]Our Crazy Skills[/title]\n
[progress percentage="90"]Web Design[/progress][progress percentage="95"]HTML/CSS[/progress][progress percentage="85"]Graphic Design[/progress][progress percentage="75"]WordPress[/progress]
\n[/one_fourth]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#f6f6f6" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#eae9e9" paddingTop="50px" paddingBottom="0px"]\n[one_half last="no"]\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\n[/one_half]\n[one_half last="yes"]\n[title size="2"]This Is A Full Width Section, Pretty Cool Heh?[/title]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Advanced theme options panel to easily customize your website
  • \n
  • Multiple layout options for home pages, portfolio and blog section
  • \n
  • Amazing shortcodes loaded with meta options for easy customization
  • \n
  • We offer free support because we care about your site as much as you.
  • \n
\n[/checklist]\n[/one_half]\n[/fullwidth]\n\n[separator top="-15" style="none"]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="50px" paddingBottom="0px"]\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Full With 100% page template and section
  • \n
  • Used in conjunction with one another to create beautiful layouts
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Use as many full width sections as you need on one page
  • \n
  • Change the background image, color, border-size & color, padding, postion
  • \n
\n[/checklist]\n[/one_half]\n[/fullwidth]', 'Full Width Section', '', 'publish', 'open', 'closed', '', 'full-width-section', '', '', '2013-05-24 20:57:42', '2013-05-24 20:57:42', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3733', 0, 'page', '', 0), +(3735, 1, '2013-05-24 20:57:55', '2013-05-24 20:57:55', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada''s google map shortocde is very versatile. Choose from 4 map styles; terrain, roadmap, hybrid, satellite. Use multiple map markers, insert custom width and height and also control many display/funtion options like zoom control, mouse wheel control, zoom level and scale"][/tagline_box]\n\n[separator top="20"]\n\n[map address="new york city, ny | 579 Allen Road Basking Ridge, NJ 07920 | Mount Arlington, NJ 07856" type="roadmap" width="100%" height="425px" zoom="8" scrollwheel="true" scale="true" zoom_pancontrol="true"][/map]\n\n[separator top="65"]\n\n[one_half last="no"]\n[title size="2"]Google Map Roadmap[/title]\n[map address="new york city, ny" type="roadmap" width="100%" height="300px" zoom="8" scrollwheel="true" scale="true" zoom_pancontrol="true"][/map]\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Google Map Satellite[/title]\n[map address="new york city, ny" type="satellite" width="100%" height="300px" zoom="8" scrollwheel="true" scale="true" zoom_pancontrol="true"][/map]\n[/one_half]\n\n[separator top="40"]\n\n[one_half last="no"]\n[title size="2"]Google Map Hybrid[/title]\n[map address="new york city, ny" type="hybrid" width="100%" height="300px" zoom="8" scrollwheel="true" scale="true" zoom_pancontrol="true"][/map]\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Google Map Terrain[/title]\n[map address="new york city, ny" type="terrain" width="100%" height="300px" zoom="8" scrollwheel="true" scale="true" zoom_pancontrol="true"][/map]\n[/one_half]\n\n[separator top="55"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • 4 different map styles; roadmap, terrain, satellite, hybrid
  • \n
  • Unlimited use per page, use with column shortcodes
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Multiple customizations available within the shortcode
  • \n
  • Set width, height, zoom level, scrollwheel, scale, zoom & pan & more
  • \n
\n[/checklist]\n[/one_half]', 'Google Maps', '', 'publish', 'open', 'closed', '', 'google-maps', '', '', '2013-05-24 20:57:55', '2013-05-24 20:57:55', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3735', 0, 'page', '', 0), +(3737, 1, '2013-05-24 20:58:09', '2013-05-24 20:58:09', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada includes four styles of image frames to help your images stand out. Choose from border, glow, dropshhdow and bottom shadow. Choose the border size and color, and style color for glow and dropshadow styles. These subtle effects will help your images look great!"][/tagline_box]\n\n[separator top="20"]\n[one_half last="no"]\n[imageframe style="border" bordercolor="#f6f6f6" bordersize="6px" stylecolor="#ffffff" align=""]blog_opt_3[/imageframe]\n[/one_half]\n\n[one_half last="yes"]\n[imageframe style="glow"  bordercolor="#f6f6f6" bordersize="6px" stylecolor="#000" align=""]blog_opt_3[/imageframe]\n[/one_half]\n\n[separator top="40" style="none"]\n[one_half last="no"]\n[imageframe style="dropshadow"  bordercolor="#3e3e3e" bordersize="0px" stylecolor="#000" align=""]blog_opt_3[/imageframe][/one_half]\n\n[one_half last="yes"]\n[imageframe style="bottomshadow"  bordercolor="#d1d1d1" bordersize="0px" stylecolor="#ffffff" align=""]blog_opt_3[/imageframe][/one_half]\n\n[separator top="60"]\n[title size="2"]Image Frames Look Great Aligned With Content[/title]\n[imageframe style="bottomshadow"  bordercolor="#ffffff" bordersize="10px" stylecolor="#ffffff" align="left"]blog_opt_3[/imageframe]Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ac augue est, non porta lectus. Aenean scelerisque tellus sit amet sem fringilla sed pellentesque purus dapibus. Phasellus elementum pharetra justo, ac iaculis mauris consectetur sit amet. Proin venenatis semper nulla vitae molestie. Praesent pharetra erat lorem, dignissim auctor mi. Vivamus fringilla ultrices luctus. Donec sit amet libero sit amet arcu laoreet lacinia. Aenean vitae est neque. Morbi tempus mauris ut nibh malesuada mattis. Suspendisse a tellus eget dolor ornare blandit. Phasellus porta dictum ligula ac porttitor. Nunc ut ante sit amet dolor rutrum feugiat non vel mi. Vivamus urna velit, convallis non porta vel, feugiat in urna. Praesent rutrum felis a turpis luctus ut accumsan sem facilisis. Mauris at mi in nibh posuere molestie. Vivamus quis ante nec dolor fermentum sagittis. Ut aliquet eleifend nunc, eu pretium magna eleifend non. Nullam et orci eros. Sed tempor lectus id arcu consequat faucibus. Fusce et quam eros. Mauris non nunc at orci.\n\nClass aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus sodales pulvinar gravida. Aenean egestas accumsan porttitor. Sed ante odio, tincidunt ultrices congue sit amet.\n\n[imageframe style="bottomshadow"  bordercolor="#ffffff" bordersize="10px" stylecolor="#ffffff" align="right"]blog_opt_3[/imageframe]\n\nCurabitur lacinia faucibus est, quis consectetur nibh luctus non. Praesent condimentum sodales erat nec tristique. Suspendisse id tincidunt arcu. Nunc consequat ante vel nulla sodales porttitor. Morbi commodo nisl scelerisque mauris ornare nec fringilla lacus vulputate. Quisque scelerisque feugiat purus vitae bibendum. Etiam rutrum justo eget velit mollis suscipit. Aliquam vitae orci libero, eget sollicitudin eros. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ac augue est, non porta lectus. Aenean scelerisque tellus sit amet sem fringilla sed pellentesque purus dapibus. Phasellus elementum pharetra justo, ac iaculis mauris consectetur sit amet. Proin venenatis semper nulla vitae molestie. Praesent pharetra erat lorem, dignissim auctor mi. Vivamus fringilla ultrices luctus. Donec sit amet libero sit amet arcu laoreet lacinia. Aenean vitae est neque. Morbi tempus mauris ut nibh malesuada mattis. Suspendisse a tellus eget dolor ornare blandit. Phasellus porta dictum ligula ac porttitor.\n\n[separator top="70"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • 4 Styles of Image frames, border, glow. dropshadow, bottomshadow
  • \n
  • Change the border size and color on all styles
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Change the style color for glow and dropshadow style
  • \n
  • Use with column shortcodes to control the width
  • \n
\n[/checklist]\n[/one_half]\n\n', 'Image Frames', '', 'publish', 'open', 'closed', '', 'image-frames', '', '', '2013-05-24 20:58:09', '2013-05-24 20:58:09', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3737', 0, 'page', '', 0), +(3739, 1, '2013-05-24 20:58:53', '2013-05-24 20:58:53', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada has several built in short codes to manage your media. Youtube and Vimeo videos can be used all throughout the sit and are fully responsive. Images and videos can open in a lightbox, and you can use Soundcloud for all your audio files. All of this is easily accessed via built-in short codes."][/tagline_box]\n\n[title size="2"]Lightbox Images / Videos[/title]\n[one_fourth last="no"]\nimage 1\n[/one_fourth]\n[one_fourth last="no"]\nimage 1\n[/one_fourth]\n[one_fourth last="no"]\nimage 1\n[/one_fourth]\n[one_fourth last="yes"]\nimage 1\n[/one_fourth]\n\n[separator top="80"]\n[title size="2"]Youtube Videos[/title]\n[youtube id="dSn72h_6I9Q" width="940" height="425"]\n\n[separator top="90"]\n[title size="2"]Vimeo Videos[/title]\n[vimeo id="32987274" width="940" height="529"]\n\n[separator top="90"]\n[title size="2"]Soundcloud Audio[/title]\n[soundcloud url="http://soundcloud.com/futuresounds-bgr/aaliyah-enough-said-feat-drake" comments="true" auto_play="false" color="ff7700" width="100%" height="81"]\n\n[separator top="80" style="none"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • All media elements are fully responsive
  • \n
  • Lightbox: images and videos can be used in combination with any size column
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Soundcloud meta options; comments, auto play, color, width and height
  • \n
  • Youtube and Vimeo Videos only need video ID, width/height is adjustable
  • \n
\n[/checklist]\n[/one_half]', 'Media', '', 'publish', 'open', 'closed', '', 'media', '', '', '2013-05-24 20:58:53', '2013-05-24 20:58:53', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3739', 0, 'page', '', 0), +(3741, 1, '2013-05-24 20:59:10', '2013-05-24 20:59:10', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada includes two pricing tables and two regular tables, each with its own styles. You can use style 1 with 1-4 column, and style 2 with 1-3 column. Each column has its title, price, content rows and custom button. Users can specify the type of currency as well as the type of payment time, such as monthly or weekly."][/tagline_box]\n\n[separator top="20"]\n\n[title size="2"]Pricing Table Style 1[/title]\n[pricing_table type="1" backgroundcolor="" bordercolor="" dividercolor=""]\n[pricing_column title="Standard"]\n[pricing_price currency="$" price="19.99" time="monthly"][/pricing_price]\n[pricing_row]5 Projects[/pricing_row]\n[pricing_row]5 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]10 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[pricing_column title="Premium"]\n[pricing_price currency="$" price="29.99" time="monthly"][/pricing_price]\n[pricing_row]10 Projects[/pricing_row]\n[pricing_row]15 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]20 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[pricing_column title="Professional"]\n[pricing_price currency="$" price="39.99" time="monthly"][/pricing_price]\n[pricing_row]15 Projects[/pricing_row]\n[pricing_row]30 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]50 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[pricing_column title="Maximum"]\n[pricing_price currency="$" price="49.99" time="monthly"][/pricing_price]\n[pricing_row]30 Projects[/pricing_row]\n[pricing_row]100 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]150 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[pricing_column title="Extreme"]\n[pricing_price currency="$" price="59.99" time="monthly"][/pricing_price]\n[pricing_row]Unlimited Projects[/pricing_row]\n[pricing_row]Unlimited Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]Unlimited Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[/pricing_table]\n\n[separator top="60"]\n[title size="2"]Pricing Table Style 2[/title]\n\n[pricing_table type="2" backgroundcolor="" bordercolor="" dividercolor=""]\n[pricing_column title="Premium"]\n[pricing_price currency="$" price="19.99" time="mo"][/pricing_price]\n[pricing_row]5 Projects[/pricing_row]\n[pricing_row]5 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]10 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[pricing_column title="Premium"]\n[pricing_price currency="$" price="29.99" time="mo"][/pricing_price]\n[pricing_row]20 Projects[/pricing_row]\n[pricing_row]40 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]50 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[pricing_column title="Premium"]\n[pricing_price currency="$" price="39.99" time="mo"][/pricing_price]\n[pricing_row]65 Projects[/pricing_row]\n[pricing_row]100 GB Storage[/pricing_row]\n[pricing_row]Unlimited Users[/pricing_row]\n[pricing_row]150 GB Bandwith[/pricing_row]\n[pricing_row]Enhanced Security[/pricing_row]\n[pricing_footer][button color="" size="small" link="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226" target=""]Sign Up Now![/button][/pricing_footer]\n[/pricing_column]\n[/pricing_table]\n\n[separator top="60"]\n[title size="2"]Data Table Style 1[/title]\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Column 1Column 2Column 3Column 4
Item #1DescriptionSubtotal:$1.00
Item #2DescriptionDiscount:$2.00
Item #3DescriptionShipping:$3.00
Item #4DescriptionTax:$4.00
All ItemsDescriptionYour Total:$10.00
\n[separator top="40" style="none"]\n\n
\n[separator top="60"]\n[title size="2"]Data Table Style 2[/title]\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Column 1Column 2Column 3Column 4
Item #1DescriptionSubtotal:$1.00
Item #2DescriptionDiscount:$2.00
Item #3DescriptionShipping:$3.00
Item #4DescriptionTax:$4.00
All ItemsDescriptionYour Total:$10.00
\n
\n[separator top="70"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Two responsive pricing table styles with 1-4 columns
  • \n
  • Select price, price currency, and payment time such as monthly or weekly
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Use with column shortcodes to control the width
  • \n
  • Unlimited tables and rows per page
  • \n
\n[/checklist]\n[/one_half]', 'Pricing Tables', '', 'publish', 'open', 'closed', '', 'pricing-tables', '', '', '2013-05-24 20:59:10', '2013-05-24 20:59:10', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3741', 0, 'page', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(3743, 1, '2013-05-24 20:59:35', '2013-05-24 20:59:35', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada''s promotion box is very versatile and has numerous meta options for easy customization. Insert  a title, body copy and a button link for default, or customize it with adding a shadow, changing the background color, border size, border color and highlight position. Users can set custom links and link target for the button."][/tagline_box]\n\n[tagline_box backgroundcolor="#f6f6f6" shadow="no" border="0px" bordercolor="#f6f6f6" highlightposition="left" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="Purchase Now" title="These boxes are very customizable with numerous options to choose from!" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\n\n[separator top="-20"]\n\n[one_half last="no"][tagline_box backgroundcolor="#fff" shadow="no" border="3px" bordercolor="#ededed" highlightposition="right, left, top or bottom" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="Purchase Now" title="Promo boxes also work with 1-4 columns" description="These promo boxes are very flexible and have several options that can be set to customize it for your needs! Avada has some awesome features, premium sliders, unlimited colors, advanced theme options, light and dark version, multiple blog and portfolio layouts, 5 header designs, custom post options, tons of shortcodes and so much more!"][/tagline_box][/one_half]\n[one_half last="yes"][tagline_box backgroundcolor="#f6f6f6" shadow="no" border="1px" bordercolor="#f6f6f6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="This is a promo box in a one half column shortocde with no button displaying." description="These promo boxes are very flexible and have several options that can be set to customize it for your needs! Avada has some awesome features, premium sliders, unlimited colors, advanced theme options, light and dark version, multiple blog and portfolio layouts, 5 header designs, custom post options, tons of shortcodes and so much more!"][/tagline_box][/one_half]\n\n[separator top="-105"]\n\n[tagline_box backgroundcolor="#fff" shadow="yes" border="0px" bordercolor="#a0ce4e" highlightposition="left" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="This is a promo box with no shadow, no border, highlight position on left and with no description. But it has a very long title that keeps going and going. Good way to capture the viewers eye!" description=""][/tagline_box]\n\n[separator top="-20"]\n\n[tagline_box backgroundcolor="#f6f6f6" shadow="yes" border="0px" bordercolor="#f6f6f6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="Purchase Now" title="This is a promo box with a shadow, no border, highlight position on top, and no description. But has a long title that keeps going. Good for capturing viewers eyes!" description=""][/tagline_box]\n\n[separator top="-20"]\n\n[tagline_box backgroundcolor="#f6f6f6" shadow="no" border="0px" bordercolor="#f6f6f6" highlightposition="bottom" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="This is a promo box with no shadow or border, highlight position on the bottom and does not have a title but just a very long description that keeps going and going and going some more. These promo boxes are very flexible and have several options that can be set to customize it for your needs!"][/tagline_box]\n\n[separator top="-20"]\n\n[two_third last="no"][tagline_box backgroundcolor="#fff" shadow="no" border="1px" bordercolor="#ededed" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="Purchase!" title="This is a smaller promo box inside a column shortcode to control the width. And there is no description with it, just a headline and button!" description="And it has some awesome features, premium sliders, advanced theme options and much more!"][/tagline_box][/two_third]\n\n[one_third last="yes"][tagline_box backgroundcolor="#fff" shadow="no" border="1px" bordercolor="#ededed" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="This is a small promo box for your title and copy" description="And it has some awesome features so you can easily customize and stylize it!"][/tagline_box][/one_third]\n\n[separator top="-20"]\n\n[tagline_box backgroundcolor="#f6f6f6" shadow="yes" border="0px" bordercolor="#f6f6f6" highlightposition="right" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="Purchase Now" title="This is a promo box with a shadow, no border and highlight position on rightt" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\n\n[separator top="-20"]\n\n[tagline_box backgroundcolor="#fff" shadow="no" border="3px" bordercolor="#a0ce4e" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="This is a promo box with no shadow and a 3px border all the way around with a white background color and a very, very long title that keeps going and going and can be as long as you''d like!" description="These promo boxes are very flexible and have several options that can be set to customize it for your needs! Avada has some awesome features, premium sliders, unlimited colors, advanced theme options, light and dark version, multiple blog and portfolio layouts, 5 header designs and so much more!"][/tagline_box]\n\n[separator top="-20"]\n\n[tagline_box backgroundcolor="#fff" shadow="no" border="1px" bordercolor="#ededed" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="If You Need A Longer Button, No Problem!" title="This is a promo box with no shadow and 1px gray border." description="And it has some awesome features, premium sliders, advanced theme options and much more!"][/tagline_box]\n\n[separator top="40"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Promo Box with several meta options to control
  • \n
  • Background color, border size & color, highlight position, shadow
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Use with column shortcodes to control the width
  • \n
  • Use with or without a button, custom links with link target attribute
  • \n
\n[/checklist]\n[/one_half]', 'Promotion Boxes', '', 'publish', 'open', 'closed', '', 'promotion-boxes', '', '', '2013-05-24 20:59:35', '2013-05-24 20:59:35', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3743', 0, 'page', '', 0), +(3745, 1, '2013-05-24 20:59:46', '2013-05-24 20:59:46', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada includes 3 different styles of recent work shortcodes that allow you to display your portfolio posts on any page you wish. Use a carousel, grid, or grid with excerpts. All styles can specify a certain category and number of posts. Both the grid and grid with excerpts can also use 1-4 columns and show filters."][/tagline_box]\n\n[separator top="20"]\n\n[title size="2"]Recent Work Carousel[/title][separator top="45"]\n[recent_works layout="carousel" filters="true" columns="4" cat_slug="" number_posts="10"][/recent_works]\n\n[separator top="110"]\n\n[title size="2"]Recent Work Grid[/title][separator top="45"]\n[recent_works layout="grid" filters="false" columns="3" cat_slug="" number_posts="6"][/recent_works]\n\n[separator top="110"]\n\n[title size="2"]Recent Work Grid With Filters[/title][separator top="45"]\n[recent_works layout="grid" filters="true" columns="4" cat_slug="" number_posts="8"][/recent_works]\n\n[separator top="110"]\n\n[title size="2"]Recent Work Grid With Excerpts[/title][separator top="45"]\n[recent_works layout="grid-with-excerpts" filters="false" columns="4" cat_slug="" number_posts="4"][/recent_works]\n\n[separator top="110"]\n\n[title size="2"]Recent Work Grid With Excerpts And Filters[/title][separator top="45"]\n[recent_works layout="grid-with-excerpts" filters="true" columns="3" cat_slug="" number_posts="3" excerpt_words="13"][/recent_works]\n\n[separator top="70"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • 3 design styles; carousel, grid, grid with excerpts
  • \n
  • Use filters and set 1-4 column width with grid and grid with excerpt style
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Specify the number of posts, and the category for all styles
  • \n
  • Unlimited use per page
  • \n
\n[/checklist]\n[/one_half]', 'Recent Work', '', 'publish', 'open', 'closed', '', 'recent-work', '', '', '2013-05-24 20:59:46', '2013-05-24 20:59:46', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3745', 0, 'page', '', 0), +(3747, 1, '2013-05-24 21:00:04', '2013-05-24 21:00:04', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada comes packaged with several shortcode designs to display your recent blog posts. And each style has several meta options that allow you to customize the shortcode; choose number of columns 1-4, number of posts, set a category, show or hide thumbnails, meta, excerpt, excerpt length and more! "][/tagline_box]\n\n[separator top="10"]\n\n[title size="2"]Recent News Default Style [/title]\n[recent_posts layout="default" columns="4" number_posts="4" cat_slug="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="15" strip_html="true"][/recent_posts]\n\n[separator top="60" style="none"]\n\n[title size="2"]Recent News Thumbnails On Side Style[/title]\n[recent_posts layout="thumbnails-on-side" columns="2" number_posts="4" cat_slug="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="13" strip_html="true"][/recent_posts]\n\n[separator top="60" style="none"]\n\n[title size="2"]Recent News Date On Side Style[/title]\n[recent_posts layout="date-on-side" columns="2" number_posts="4" cat_slug="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="27" strip_html="true"][/recent_posts]\n\n[separator top="60" style="none"]\n\n[title size="2"]Use Them In 1-4 Columns[/title]\n[recent_posts layout="default" columns="2" number_posts="2" cat_slug="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="35" strip_html="true"][/recent_posts]\n\n[title size="2"]Many Meta Options Like Excerpt Length, Category, Posts, Columns[/title]\n[one_half last="no"][recent_posts layout="thumbnails-on-side" columns="1" number_posts="3" cat_slug="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="61" strip_html="true"][/recent_posts][/one_half]\n\n[one_half last="yes"][recent_posts layout="date-on-side" columns="1" number_posts="3" cat_slug="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="61" strip_html="true"][/recent_posts][/one_half]\n\n[separator top="10"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Three awesome designs to choose from
  • \n
  • Works with all column sizes and unlimited use and posts
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Set columns, posts, category, thumbnails, title, meta, excerpt & length
  • \n
  • Perfect for using on any page you need to highlight your blog posts
  • \n
\n[/checklist]\n[/one_half]', 'Recent Posts', '', 'publish', 'open', 'closed', '', 'recent-posts', '', '', '2013-05-24 21:00:04', '2013-05-24 21:00:04', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3747', 0, 'page', '', 0), +(3749, 1, '2013-05-24 21:00:17', '2013-05-24 21:00:17', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada includes 2 different styles of tabs; vertical or horizontal. Tabs are perfect for displaying a bunch of organized information in a small area. You can use any of the other shortcodes inside the tabs, insert images, icons, checklists and more, whatever you need to get your information to your viewer."][/tagline_box]\n\n[separator top="20"]\n\n[title size="2"]Horizontal Tabs[/title][separator top="45"]\n\n[tabs tab1="Service #1" tab2="Service #2" tab3="Service #3" tab4="Service #4" tab5="Service #5" tab6="Service #6" layout="horizontal"]\n[tab id=1]\n[fontawesome icon="random" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Etharums ser quidem rerum. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.\n[/tab]\n\n[tab id=2][fontawesome icon="magic" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerums facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni uns.\n[/tab]\n\n[tab id=3][fontawesome icon="desktop" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Etharums ser quidem rerum. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.\n
    \n
  • Cras rutrum leo at odio volutpat donec fermentum porttitor nunc maecenas quis Etharums ser quidem rerum facilis
  • \n
  • Aenean faucibus sapien a odios suspendisse venenatis euismod cras dolores amets unsers fugiats.
  • \n
\n[/tab]\n\n[tab id=4][fontawesome icon="magic" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerums facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni uns.\n[/tab]\n\n[tab id=5]\n[fontawesome icon="tint" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Etharums ser quidem rerum. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.\n
    \n
  • Cras rutrum leo at odio volutpat donec fermentum porttitor nunc maecenas quis Etharums ser quidem rerum facilis
  • \n
  • Aenean faucibus sapien a odios suspendisse venenatis euismod cras dolores amets unsers fugiats.
  • \n
\n[/tab]\n\n[tab id=6][fontawesome icon="thumbs-up" circle="yes" size="large"]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerums facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni uns.\n[/tab]\n[/tabs]\n\n[separator top="60"]\n\n[one_half last="no"]\n[title size="3"]Use Them With Columns[/title]\nLid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia.\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Loaded with shortcodes so you can build amazing pages for your site
  • \n
  • Unlimited color options with a backed color picker, including the gradients
  • \n
\n[/one_half]\n\n[one_half last="yes"]\n[tabs tab1="Tab Data #1" tab2="Tab Data #2" tab3="Tab Data #3"]\n\n[tab id=1]\n[fontawesome icon="random" circle="yes" size="large"]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo.\n[/tab]\n[tab id=2]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo. amets dolores.[/tab]\n[tab id=3]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo. amets dolores.[/tab]\n[/tabs]\n[/one_half]\n\n[separator top="25"]\n\n[title size="2"]Vertical Tabs[/title][separator top="45"]\n\n[tabs tab1="Service #1" tab2="Service #2" tab3="Service #3" tab4="Service #4" tab5="Service #5" layout="vertical"]\n[tab id=1]\n[fontawesome icon="random" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Etharums ser quidem rerum. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.\n[/tab]\n\n[tab id=2][fontawesome icon="magic" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerums facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni uns.\n[/tab]\n\n[tab id=3][fontawesome icon="desktop" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Etharums ser quidem rerum. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.\n
    \n
  • Cras rutrum leo at odio volutpat donec fermentum porttitor nunc maecenas quis Etharums ser quidem rerum facilis
  • \n
  • Aenean faucibus sapien a odios suspendisse venenatis euismod cras dolores amets unsers fugiats.
  • \n
\n[/tab]\n\n[tab id=4][fontawesome icon="magic" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerums facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni uns.\n[/tab]\n\n[tab id=5]\n[fontawesome icon="tint" circle="yes" size="large"] Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns. Etharums ser quidem rerum. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud neque porro quisquam est. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla dolores ipsums fugiats voluptas amet uns.\n
    \n
  • Cras rutrum leo at odio volutpat donec fermentum porttitor nunc maecenas quis Etharums ser quidem rerum facilis
  • \n
  • Aenean faucibus sapien a odios suspendisse venenatis euismod cras dolores amets unsers fugiats.
  • \n
\n[/tab]\n\n[/tabs]\n\n[separator top="50"]\n\n[one_third last="no"]\n[title size="3"]Use Them With Columns[/title]\nLid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets.\n
    \n
  • Fully responsive so your content looks great
  • \n
  • Loaded with lots of amazing shortcodes
  • \n
  • Unlimited color options via theme options
  • \n
\n[/one_third]\n\n[two_third last="yes"]\n[tabs tab1="Tab Data #1" tab2="Tab Data #2" tab3="Tab Data #3" layout="vertical"]\n\n[tab id=1]\n[fontawesome icon="random" circle="yes" size="large"]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo.\n[/tab]\n[tab id=2]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo. amets dolores.[/tab]\n[tab id=3]Lid est laborum dolo rumes fugats untras. Etha rums ser quidem rerum facilis dolores nemis onis fugats vitaes nemo minima rerums unsers sadips amets. Ut enim ad minim veniam, quis nostrud Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci amets uns.  Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips ameet quasi architecto beatae vitae dicta sunt explicabo. amets dolores.[/tab]\n[/tabs]\n[/two_third]\n\n[separator top="40"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • 3 design styles; carousel, grid, grid with excerpts
  • \n
  • Use filters and set column width with grid and grid with excerpt style
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Specify the number of posts, and the category for all styles
  • \n
  • Unlimited use per page
  • \n
\n[/checklist]\n[/one_half]', 'Tabs', '', 'publish', 'open', 'closed', '', 'tabs', '', '', '2013-05-24 21:00:17', '2013-05-24 21:00:17', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3749', 0, 'page', '', 0), +(3751, 1, '2013-05-24 21:00:43', '2013-05-24 21:00:43', '[one_half last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="President & Founder" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enim.[/person]\n[/one_half]\n\n[one_half last="yes"]\n[person name="Jane Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="CEO" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enim.[/person]\n[/one_half]\n\n[separator top="40"]\n\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada includes multiple page layouts ready to use, just insert your content!" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\n\n[separator top="-10"]\n\n[title size="2"]Our Valuable Team Members[/title]\n[one_third last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[one_third last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[one_third last="yes"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[separator top="40"]\n\n[one_third last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[one_third last="no"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]\n\n[one_third last="yes"]\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/person1.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo inventore veritatis et quasi architectos beatae vitae dicta sunt explicabo. Nemo enims sadips ipsums un.[/person]\n[/one_third]', 'Team Members', '', 'publish', 'open', 'closed', '', 'meet-the-team-2', '', '', '2013-05-24 21:00:43', '2013-05-24 21:00:43', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3751', 0, 'page', '', 0), +(3754, 1, '2013-05-24 21:01:06', '2013-05-24 21:01:06', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Testimonials are the perfect way to show your potential clients the kind of work you can provide. Avada allows you to use testimonial sliders or individual testimonial boxes. Choose a male or female icon, and also select the speed at which the slider rotates."][/tagline_box]\n\n[separator top="20"]\n\n[title size="2"]Testimonial Slider[/title]\n[testimonials]\n[testimonial name="William Genske" gender="male" company="My Company" link="#" target=""]"Thank you for your very professional and prompt response. I went to look for answers to my own questions and quickly realized that the information I was requesting was very easy to find. As were the videos and the instructions. In fact everything has been perfect so far. This is by far the most well supported theme I have ever had the pleasure to work with. Lots of wonderful options. I wished I had found you before I spent money on a competitors theme. Thanks again for the great support and for a great product."[/testimonial]\n\n[testimonial name="Stuartyboy" gender="male" company="Avada Theme" link="#" target=""]"If I could give 100 stars for support and attention to detail I definitely would. I’ve purchased a good number of WordPress themes from various developers that look good on Themeforest but after you buy them you find numerous problems, bugs, crazy admin and very very poor support. I purchased the Avada theme and there were a couple of problems too, but the guys from ThemeFusion were remarkable – I really mean this. The speed of support and attention to detail is quite phenomenal. If you are considering buying this theme at all then take it from me, you will be extremely pleased."[/testimonial]\n\n[testimonial name="Strata1" gender="male" company="Avada Theme" link="#" target=""]"Hi, I just wanted to say thanks for the great theme. I’m finding new ways to improve it every day and find that it’s been the most user-friendly theme I’ve ever purchased. I am practically computer illiterate and know extremely little if anything at all about code, CSS, or any of the inner workings of a website. The Avada theme removes all the worry, hassle, frustration and angst that beginners (and novices) feel when designing websites. If you can read and follow directions, this theme is for you. I’ve tried a hundred plug-ins with other themes and the Avada theme makes almost all of them unnecessary and obsolete."[/testimonial]\n[/testimonials]\n\n[separator top="60" style="none"]\n\n[title size="2"]Single Testimonials[/title]\n\n[one_third last="no"]\n[one_third last="no"]\n[testimonial name="Aajami" gender="male" company="Avada Theme" link="#" target=""]I bought this theme and i would like to recommend it to every one interested in building a website without knowledge of php or html. It is very convenient and the customer service is very reactive. I will say it in French “Bravo” for this work![/testimonial]\n[/one_third]\n\n[one_third last="no"]\n[testimonial name="Lucasgriffin" gender="male" company="Avada Theme" link="#" target=""]Amazing theme and top class support, as I’m a beginner, Luke helped me above and beyond and was more than patient, his responses were quick and he has a genuine care for you to enjoy and move forward with your theme!.. highly recommended theme and author! [/testimonial]\n[/one_third]\n\n[one_third last="yes"]\n[testimonial name="Gojcus" gender="male" company="Avada Theme" link="#" target=""]Let me say something. You have an amazing theme and amazing/awesome support. They helped me on weekend. This is what I call an “extra mile” in customer relationship. So I gave 5 stars for the theme and if I could, I’d give 10 stars for support.[/testimonial]\n[/one_third]\n\n[separator top="50" style="none"]\n\n[title size="2"]Use Them In Any Column Size[/title]\n\n[two_third last="no"]\n[testimonial name="Stiggandr1" gender="male" company="Avada Theme" link="#" target=""]Hey Theme Fusion. Just wanted to say thanks for the great videos. I''ve recently expanded from Joomla to Wordpress and am using your Avada theme. These videos have been a huge help in learning my way around WP as well as using the Avada theme to its full potential.[/testimonial]\n[/two_third]\n\n[one_third last="yes"]\n[testimonial name="Breakbeat" gender="male" company="Avada Theme" link="#" target=""]Avada is the best theme I’ve ever bought! Theme Fusion has the best support over the net! Keep it up![/testimonial]\n[/one_third]\n\n[separator top="40"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Unlimited use and testimonials per slider, per page
  • \n
  • Testimonial Slider speed can be controlled via theme options
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Use with column shortcodes to control the width
  • \n
  • Set a male or female icon, company name can be a link
  • \n
\n[/checklist]\n[/one_half]', 'Testimonials', '', 'publish', 'open', 'closed', '', 'testimonials', '', '', '2013-05-24 21:01:06', '2013-05-24 21:01:06', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3754', 0, 'page', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(3756, 1, '2013-05-24 21:01:19', '2013-05-24 21:01:19', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada includes several short codes to help you with typography on your site. THere are headings, dropcaps, highlights, underline, block quotes, and lists. With these options you can ensure that the typography on your site is stylized and looks sharp."][/tagline_box]\n\n[three_fourth last="no"]\n[separator top="15"]\n[title size="2"]All Heading Sizes Can Be Used With Double Lines[/title]Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque diam sem, hendrerit ut faucibus sit amet, bibendum vel lacus. Nunc molestie magna sed sapien ornare tempus. Curabitur venenatis ipsum nec ligula placerat sollicitudin. Curabitur sit amet magna quam. Praesent in libero vel turpis pellentesque egestas sit amet vel nunc. Nunc lobortis dui neque, quis accumsan dolor. Aenean aliquet dignissim semper. Maecenas ullamcorper est vitae sem ornare interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer dolor diam, tincidunt ac euismod ac, sollicitudin varius ante. Pellentesque elementum commodo dolor sit amet semper. Nullam id massa a turpis bibendum tincidunt. Donec non augue id augue dignissim molestie elementum vitae velit. Quisque laoreet eleifend posuere. Mauris congue venenatis nisl ut varius. In posuere sem lorem, eu iaculis ante. Quisque eget turpis sem. Phasellus varius tempor tellus, imperdiet auctor urna commodo vel ger dolor diam, tincidunt ac euismod ac, sollicitudin varius ante sadips ipsums dolores sits.\n[/three_fourth]\n\n[one_fourth last="yes"]\n

H1 Heading

\n

H2 Heading

\n

H3 Heading

\n

H4 Heading

\n
H5 Heading
\n
H6 Heading
\n[/one_fourth]\n\n[separator top="50"]\n\n[title size="2"]Text Tooltips[/title]\nPraesent in libero vel turpis pellentesque egestas sit amet vel nunc. [tooltip title="This Is A Tooltip!"]Hover over this text for Tooltip![/tooltip]  Nunc lobortis dui neque, quis accumsan dolor. Aenean aliquet dignissim semper. Maecenas ullamcorper est vitae sem ornare interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer dolor diam, tincidunt ac euismod ac, sollicitudin varius ante. Pellentesque elementum commodo dolor sit amet semper. Nullam id massa a turpis bibendum tincidunt. Donec non augue id augue dignissim molestie. [tooltip title="This Is A Tooltip That Keeps Going!"]Hey, here''s another text tooltip![/tooltip] Elementum vitae veli uisque laoreet eleifend posuere. Mauris congue venenatis nisl ut varius. In posuere sem lorem, eu iaculis ante. Quisque eget turpis sem. Phasellus varius tempor tellus, imperdiet auctor urna commodo vel ger dolor diam, tincidunt ac euismod ac, sollicits.\n\n[separator top="65"]\n\n[title size="2"]Highlights[/title]\nLorem ipsums sit [highlight color="black"]This is text highlighted in black[/highlight] diam molestie taciti sadips ipsumes dolores. Bibendum tas sadips [highlight color="yellow"]This is text highlighted in yellow[/highlight] Sollicitudin eros sapien, ultrices primis. Volutpat tempor tur duis mattis dapibus, felis amet faucibus. fames etiam sit enim fermentum etiam quam eros velit aptent netus faucibus. Duis lectus integer malesuada mattis tempus commodoiam molestie taciti eleifend donec fames platea molestie donec, bibendum vehicula nam turpis faucibus sadips ipsums dolores fugiats sits. [highlight color="#a0ce4e"]You can also use any highlight color you want![/highlight] Quisque eget turpis sem. Phasellus varius tempor tellus, imperdiet auctor urna commodo vel ger dolor diam, tincidunt ac euismod ac, sollicits. Voluptas sadips ipsums amet untras.Sollicitudin eros sapien, ultrices primis sadips ipsums dolores voluptas sits vehicula nam turpis faucibus olup.\n\n[separator top="65"]\n\n[title size="2"]HTML Styles[/title]\nThis is a text link tincidunt quisque tristique. This is underlined text. Sollicitudin eros sapien, ultrices primis. This is Bold Emphasized text volutpat tempor tur duis mattis dapibus, felis amet faucibus. fames etiam sit enim fermentum etiam quam eros velit aptent netus faucibus duis lectus integer malesuada, mattis tempus commodos. Bibendum vehicula nam turpis faucibus. Voluptas sadips ipsums amet untras.Sollicitudin eros sapien, ultrices primis. This is Bold text volutpat tempor tur duis mattis dapibus, felis amet faucibus. fames etiam sit enim fermentum etiam quam eros velit aptent netus faucibus.Duis lectus integer malesuada mattis tempus commodoiam molestie taciti eleifend donec fames platea molestie donec, bibendum vehicula nam turpis faucibus. Quisque eget turpis sem. Phasellus varius tempor tellus, imperdiet auctor urna.\n[separator top="60"]\n\n[title size="2"]Dropcap[/title]\n[dropcap]D[/dropcap]Curabitur sit amet magna quam. Praesent in libero vel turpis pellentesque egestas sit amet vel nunc. Nunc lobortis dui neque, quis accumsan dolor. Aenean aliquet dignissim semper. Maecenas ullamcorper est vitae sem ornare interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer dolor diam, tincidunt ac euismod ac, sollicitudin varius ante. Pellentesque elementum commodo dolor sit amet semper. Nullam id massa a turpis bibendum tincidunt. Donec non augue id augue dignissim molestie elementum vitae velit. Quisque laoreet eleifend posuere. Mauris congue venenatis nisl ut varius. In posuere sem lorem, eu iaculis ante. Quisque eget turpis sem. Phasellus varius tempor tellus, imperdiet auctor urna commodo vel ger dolor diam, tincidunt ac euismod ac, sollicits.\n[separator top="65"]\n\n[title size="2"]Blockquote[/title]\nCurabitur sit amet magna quam. Praesent in libero vel turpis pellentesque egestas sit amet vel nunc. Nunc lobortis dui neque, quis accumsan dolor. Aenean aliquet dignissim semper. Maecenas ullamcorper est vitae sem ornare interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer dolor diam, tincidunt ac euismod ac, sollicitudin varius ante. Pellentesque elementum commodo dolor sit amet semper. Nullam id massa a turpis bibendum tincidunt.\n
Sollicitudin eros sapien, ultrices primis. Volutpat tempor tur duis mattis dapibus, felis amet faucibus. fames etiam sit enim fermentum etiam quam eros velit aptent netus faucibus duis lectus integer malesuada, mattis tempus commodoiam molestie taciti eleifend donec fames platea molestie donec, bibendum vehicula nam turpis faucibus, Tncidunt quisque tristique. Sollicitudin eros sapien, ultrices primis. Folutpat tempor tur duis mattis dapibus, felis amet faucibus.
\n \n\nCurabitur sit amet magna quam. Praesent in libero vel turpis pellentesque egestas sit amet vel nunc. Nunc lobortis dui neque, quis accumsan dolor. Aenean aliquet dignissim semper. Maecenas ullamcorper est vitae sem ornare interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer dolor diam, tincidunt ac euismod ac, sollicitudin varius ante. Pellentesque elementum commodo dolor sit amet semper. Nullam id massa a turpis bibendum tincidunt.\n[separator top="65"]\n[title size="2"]Checklists Have 6 Styles, Choose Light or Dark[/title]\n\n[one_third last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
\n[/checklist]\n[/one_third]\n\n[one_third last="no"]\n[checklist icon="star" iconcolor="light" circle="yes"]\n
    \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
\n[/checklist]\n[/one_third]\n\n[one_third last="yes"]\n[checklist icon="arrow" iconcolor="light or dark" circle="yes or no"]\n
    \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
\n[/checklist]\n[/one_third]\n\n[one_third last="no"]\n[checklist icon="asterik" iconcolor="light" circle="yes"]\n
    \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
\n[/checklist]\n[/one_third]\n\n[one_third last="no"]\n[checklist icon="cross" iconcolor="light" circle="yes"]\n
    \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
\n[/checklist]\n[/one_third]\n\n[one_third last="yes"]\n[checklist icon="plus" iconcolor="light or dark" circle="yes or no"]\n
    \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
\n[/checklist]\n[/one_third]\n\n[separator top="65" style="none"][title size="2"]Use Them With or Without Circles[/title]\n\n[one_third last="no"]\n[checklist icon="check" iconcolor="dark" circle="no"]\n
    \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
\n[/checklist]\n[/one_third]\n\n[one_third last="no"]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
\n[/checklist]\n[/one_third]\n\n[one_third last="yes"]\n[checklist icon="arrow" iconcolor="dark" circle="no"]\n
    \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
\n[/checklist]\n[/one_third]\n\n[one_third last="no"]\n[checklist icon="asterik" iconcolor="dark" circle="no"]\n
    \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
\n[/checklist]\n[/one_third]\n\n\n[one_third last="no"]\n[checklist icon="cross" iconcolor="dark" circle="no"]\n
    \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
\n[/checklist]\n[/one_third]\n\n[one_third last="yes"]\n[checklist icon="plus" iconcolor="dark" circle="no"]\n
    \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
  • This is a checklist item where your copy can go
  • \n
\n[/checklist]\n[/one_third]\n\n[separator top="65" style="none"]\n[title size="2"]Ordered & Unordered Lists[/title]\n\n[one_half last="no"]\n
    \n
  1. This is an item in an ordered bulleted list wrapped in a half column
  2. \n
  3. This is an item in an ordered bulleted list wrapped in a half column
  4. \n
  5. This is an item in an ordered bulleted list wrapped in a half column
  6. \n
\n[/one_half]\n\n[one_half last="yes"]\n
    \n
  • This is an item in an unordered bulleted list wrapped in a half column
  • \n
  • This is an item in an unordered bulleted list wrapped in a half column
  • \n
  • This is an item in an unordered bulleted list wrapped in a half column
  • \n
\n[/one_half]\n[separator top="50"]\n\n[title size="2"]Columns[/title]\n[one_half last="no"]\n

One Half

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n[/one_half]\n\n[one_half last="yes"]\n

One Half

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n[/one_half]\n\n[one_third last="no"]\n

One Third

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui.\n[/one_third]\n\n[one_third last="no"]\n

One Third

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui.\n[/one_third]\n\n[one_third last="yes"]\n

One Third

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui.\n[/one_third]\n\n[one_third last="no"]\n

One Third

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui.\n[/one_third]\n\n[two_third last="yes"]\n

Two Third

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui. Ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliqunon proident, sunt in culpa qui.\n[/two_third]\n\n[one_fourth last="no"]\n

One Fourth

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud sitsers exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n[/one_fourth]\n\n[one_fourth last="no"]\n

One Fourth

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud sitsers exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n[/one_fourth]\n\n[one_fourth last="no"]\n

One Fourth

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud sitsers exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n[/one_fourth]\n\n[one_fourth last="yes"]\n

One Fourth

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud sitsers exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n[/one_fourth]\n\n[one_fourth last="no"]\n

One Fourth

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud sitsers exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n[/one_fourth]\n\n[three_fourth last="yes"]\n

Three Fourth

\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliqu enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip\n[/three_fourth]', 'Typography', '', 'publish', 'open', 'closed', '', 'typography', '', '', '2013-05-24 21:01:19', '2013-05-24 21:01:19', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3756', 0, 'page', '', 0), +(3813, 1, '2013-08-19 17:07:46', '2013-08-19 17:07:46', '[separator top="-55"]\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\n

Avada: Themeforest''s #1 Selling Wordpress Theme of All Time

\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\n[/fullwidth]\n\n[separator top="55"]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#f6f6f6" paddingTop="0px" paddingBottom="0px"]\n[content_boxes layout="icon-on-top" iconcolor="#333333" circlecolor="#fff" circlebordercolor="#333333" backgroundcolor="transparent"]\n[content_box title="Beautifully Simplistic" icon="tablet" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]If you''re a code nerd or a Word Press newbie, Avada is for you. It''s [tooltip title="That''s Right, It''s For You!"]simply built for everyone[/tooltip], and can be as simple or complex as you want it to be. [/content_box]\n[content_box title="Free Support & Updates" icon="magic" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""] We truly care about our users & end product which is why[tooltip title="Over 32,000 Users!"] our users love Avada![/tooltip] You will too with free updates & the most incredible support around.[/content_box]\n[content_box title="Blissful Layout Options " icon="thumbs-up" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]Avada includes so many different options and designs. Users are able to make [tooltip title="Like This Text Tooltip!"]amazingly cool layouts[/tooltip] with all the tools we provide. It doesn''t get better than this.[/content_box]\n[/content_boxes]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="100px" paddingBottom="100px"]\n\n[/fullwidth]\n\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="55px" paddingBottom="30px"]\n\n

We Are Dedicated To Our Users & Product

\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\n[separator top="40" style="double"]\n[one_third last="no"][dropcap]L[/dropcap]orem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et elementum erat, ut luctus mi. Quisque consequat risus quis tincidunt fringilla. Ut sed rhoncus metus, in rhoncus dolor. Integer tempor ligula est, sed luctus metus tempus a. Pellentesque tempor libero et arcu bibendum mollis. Aliquam eu odio eget diam egestas euismod vel sed orci. Aenean placerat, massa sit amet malesuada ultris.\n[/one_third]\n[one_third last="no"]Quisque blandit dolor risus, sed dapibus dui facilisis sed. Donec eu porta elit. Aliquam porta sollicitudin ante, ac fermentum orci mattis et. Phasellus ac nibh eleifend, sagittis purus nec, elementum massa. Quisque tincidunt sapien a sem porttitor, id convallis dolor pharetra. Donec tempor cursus facilisis. Ut eu elementum arcu, vel hendrerit nisi. Cras sed euismod nibh, a adipiscing nunc. Nunc vitae puru.[/one_third]\n[one_third last="yes"]\n[accordian]\n[toggle title="Our Company Mission"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[toggle title="We Can Deliver On Projects"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia nons.[/toggle]\n[/accordian][/one_third]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/11/slide_21.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="" paddingTop="55px" paddingBottom="35px"]\n

Amazing Nature Full HD 1080p | TheChokAAA

\n[separator top="25" style=""]\n[youtube id="6v2L2UGZJAM" width="940" height="560"]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="65px" paddingBottom="20px"]\n[one_half last="no"]\n[title size="2"]Amazing Tools To Build Awesome Websites[/title]\n[checklist icon="star" iconcolor="dark" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Advanced theme options panel to easily customize your website
  • \n
  • Multiple layout options for home pages, portfolio and blog section
  • \n
  • Amazing shortcodes loaded with meta options for easy customization
  • \n
  • We offer free support because we care about your site as much as you.
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\nlightbox title\n[/one_half]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/slide_11.jpg" backgroundrepeat="no-repeat" backgroundposition="center center" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="55px" paddingBottom="45px"]\n

Over 32,000 Users, Let''s See What Some Have To Say?

\n

We [tooltip title="Yep, we certainly do!"]love our users[/tooltip], and are fully dedicated to keeping their trust. When you buy Avada, [tooltip title="We strive to please our users"]you won''t ever have to worry [/tooltip]about customer support!

\n[separator top="45" style=""]\n[one_third last="no"]\n[testimonial name="Aajami" gender="male" company="Avada Theme"]I bought this theme and i would like to recommend it to every one interested in building a website without knowledge of php or html. It is very convenient and the customer service is very reactive. I will say it in French “Bravo” for this work![/testimonial]\n[/one_third]\n[one_third last="no"]\n[testimonial name="Lucasgriffin" gender="male" company="Avada Theme"]Amazing theme and top class support, as I’m a beginner, Luke helped me above and beyond and was more than patient, his responses were quick and he has a genuine care for you to enjoy and move forward with your theme!.. highly recommended theme and author! [/testimonial]\n[/one_third]\n[one_third last="yes"]\n[testimonial name="Gojcus" gender="male" company="Avada Theme"]Let me say something. You have an amazing theme and amazing/awesome support. They helped me on weekend. This is what I call an “extra mile” in customer relationship. So I gave 5 stars for the theme and if I could, I’d give 10 stars for support.[/testimonial]\n[/one_third]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="center center" backgroundattachment="fixed" bordersize="0px" bordercolor="#e5e4e4" paddingTop="50px" paddingBottom="45px"]\n[tagline_box backgroundcolor="#ffffff" shadow="yes" border="1px" bordercolor="#e5e4e4" highlightposition="left" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="Purchase Now" title="Avada 3.1 is the ultimate multi-purpose wordpress theme!" description="Loaded with awesome features, premium sliders, unlimited colors, advanced theme options & much more!"][/tagline_box]\n[/fullwidth]\n[separator top="-120"]', 'Home Version 16', '', 'publish', 'open', 'closed', '', 'home-version-16', '', '', '2013-08-19 17:07:46', '2013-08-19 17:07:46', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3813', 0, 'page', '', 0), +(3815, 1, '2013-08-19 17:08:12', '2013-08-19 17:08:12', '[separator top="-30" style=""]\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="" paddingTop="0px" paddingBottom="10px"]\n

Avada has Over 32,000 Users And Counting!

\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\n[/fullwidth]\n[separator top="30" style="single"]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="" paddingTop="25px" paddingBottom="20px"]\n[one_half last="no"]\n\n[separator top="30" style="none"]\n

All About Avada

\nIf you''re a code nerd or a Word Press newbie, Avada is for you. It''s [tooltip title="That''s Right, It''s For You!"]simply built for everyone[/tooltip], and can be as simple or complex as you want it to be. We truly care about our users & end product which is why[tooltip title="Over 32,000 Users!"] our users love Avada![/tooltip] You will too with free updates & the most incredible support around. Avada includes so many different options and designs. Users are able to make [tooltip title="Like This Text Tooltip!"]amazingly cool layouts[/tooltip] with all the tools we provide. It doesn''t get better than this.\n[/one_half]\n\n[one_half last="yes"]\n\n[separator top="40" style="none"]\n[checklist icon="star" iconcolor="#747474" circle="no"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Unlimited color options with a backed color picker, including the gradients
  • \n
  • Multiple layout options for home pages, portfolio and blog section
  • \n
  • We offer free support because we care about your site as much as you.
  • \n
\n[/checklist]\n[/one_half]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="70px"]\n

Come In And Check Us Out, We''d Love To Say Hello!

\n[separator top="20" style="double"]\n[separator top="40" style="none"]\n[map address="new york city, ny | 579 Allen Road Basking Ridge, NJ 07920 | Mount Arlington, NJ 07856" type="terrain" width="100%" height="415px" zoom="8" scrollwheel="yes" scale="yes" zoom_pancontrol="no"][/map]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="65px" paddingBottom="90px"]\n[counters_circle][counter_circle filledcolor="#a0ce4e" unfilledcolor="#e3edd1" value="95"]HTML[/counter_circle][counter_circle filledcolor="#a0ce4e" unfilledcolor="#e3edd1" value="85"]CSS[/counter_circle][counter_circle filledcolor="#a0ce4e" unfilledcolor="#e3edd1" value="90"]WP[/counter_circle][counter_circle filledcolor="#a0ce4e" unfilledcolor="#e3edd1" value="100"][fontawesome icon="thumbs-up" circle="no" size="large" iconcolor="#747474" circlecolor="#333333" circlebordercolor="#333333"][/counter_circle][/counters_circle]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/slide_11.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="30px" paddingBottom="50px"]\n

Over 32,000 Users, Let''s See What Some Have To Say?

\n

We [tooltip title="Yep, we certainly do!"]love our users[/tooltip], and are fully dedicated to keeping their trust. When you buy Avada, [tooltip title="We strive to please our users"]you won''t ever have to worry [/tooltip]about customer support!

\n[separator top="45" style=""]\n[one_third last="no"]\n[testimonial name="Aajami" gender="male" company="Avada Theme"]I bought this theme and i would like to recommend it to every one interested in building a website without knowledge of php or html. It is very convenient and the customer service is very reactive. I will say it in French “Bravo” for this work![/testimonial]\n[/one_third]\n[one_third last="no"]\n[testimonial name="Lucasgriffin" gender="male" company="Avada Theme"]Amazing theme and top class support, as I’m a beginner, Luke helped me above and beyond and was more than patient, his responses were quick and he has a genuine care for you to enjoy and move forward with your theme!.. highly recommended theme and author! [/testimonial]\n[/one_third]\n[one_third last="yes"]\n[testimonial name="Gojcus" gender="male" company="Avada Theme"]Let me say something. You have an amazing theme and amazing/awesome support. They helped me on weekend. This is what I call an “extra mile” in customer relationship. So I gave 5 stars for the theme and if I could, I’d give 10 stars for support.[/testimonial]\n[/one_third]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="#e5e4e4" paddingTop="70px" paddingBottom="70px"]\n[two_third last="no"][/two_third]\n[one_third last="yes"][title size="2"]Who Are We?[/title]\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo.\n[separator top="40" style="single"]\n[checklist icon="plus" iconcolor="light" circle="yes"]\n
    \n
  • Fully responsive so content looks great
  • \n
  • Awesome sliders to showcase content
  • \n
  • Advanced theme options panel
  • \n
\n[/checklist]\n[/one_third]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/slide_11.jpg" backgroundrepeat="no-repeat" backgroundposition="center center" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="50px" paddingBottom="45px"]\n[tagline_box backgroundcolor="#ffffff" shadow="yes" border="1px" bordercolor="#e5e4e4" highlightposition="left" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="Purchase Now" title="Avada 3.1 is the ultimate multi-purpose wordpress theme!" description="Loaded with awesome features, premium sliders, unlimited colors, advanced theme options & much more!"][/tagline_box]\n[/fullwidth]\n[separator top="-120"]', 'Home Version 17', '', 'publish', 'open', 'closed', '', 'home-page-17', '', '', '2013-08-19 17:08:12', '2013-08-19 17:08:12', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3815', 0, 'page', '', 0), +(3846, 1, '2013-08-19 17:47:12', '2013-08-19 17:47:12', '', 'Portfolio Grid', '', 'publish', 'open', 'closed', '', 'portfolio-grid', '', '', '2013-08-19 17:47:12', '2013-08-19 17:47:12', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=3846', 0, 'page', '', 0), +(4097, 1, '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 'Shop', '', 'publish', 'closed', 'closed', '', 'shop', '', '', '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 0, 'http://theme-fusion.com/avadaxml/shop/', 0, 'page', '', 0), +(4098, 1, '2013-10-16 15:12:13', '2013-10-16 15:12:13', '[woocommerce_cart]', 'Cart', '', 'publish', 'closed', 'closed', '', 'cart', '', '', '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 0, 'http://theme-fusion.com/avadaxml/cart/', 0, 'page', '', 0), +(4099, 1, '2013-10-16 15:12:13', '2013-10-16 15:12:13', '[woocommerce_checkout]', 'Checkout', '', 'publish', 'closed', 'closed', '', 'checkout', '', '', '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 0, 'http://theme-fusion.com/avadaxml/checkout/', 0, 'page', '', 0), +(4100, 1, '2013-10-16 15:12:13', '2013-10-16 15:12:13', '[woocommerce_my_account]', 'My Account', '', 'publish', 'closed', 'closed', '', 'my-account', '', '', '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 0, 'http://theme-fusion.com/avadaxml/my-account/', 0, 'page', '', 0), +(4101, 1, '2013-10-16 15:12:13', '2013-10-16 15:12:13', '[woocommerce_lost_password]', 'Lost Password', '', 'publish', 'closed', 'closed', '', 'lost-password', '', '', '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 4100, 'http://theme-fusion.com/avadaxml/my-account/lost-password/', 0, 'page', '', 0), +(4102, 1, '2013-10-16 15:12:13', '2013-10-16 15:12:13', '[woocommerce_edit_address]', 'Edit My Address', '', 'publish', 'closed', 'closed', '', 'edit-address', '', '', '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 4100, 'http://theme-fusion.com/avadaxml/my-account/edit-address/', 0, 'page', '', 0), +(4103, 1, '2013-10-16 15:12:13', '2013-10-16 15:12:13', '[woocommerce_view_order]', 'View Order', '', 'publish', 'closed', 'closed', '', 'view-order', '', '', '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 4100, 'http://theme-fusion.com/avadaxml/my-account/view-order/', 0, 'page', '', 0), +(4104, 1, '2013-10-16 15:12:13', '2013-10-16 15:12:13', '[woocommerce_change_password]', 'Change Password', '', 'publish', 'closed', 'closed', '', 'change-password', '', '', '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 4100, 'http://theme-fusion.com/avadaxml/my-account/change-password/', 0, 'page', '', 0), +(4105, 1, '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 'Logout', '', 'publish', 'closed', 'closed', '', 'logout', '', '', '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 4100, 'http://theme-fusion.com/avadaxml/my-account/logout/', 0, 'page', '', 0), +(4106, 1, '2013-10-16 15:12:13', '2013-10-16 15:12:13', '[woocommerce_pay]', 'Checkout → Pay', '', 'publish', 'closed', 'closed', '', 'pay', '', '', '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 4099, 'http://theme-fusion.com/avadaxml/checkout/pay/', 0, 'page', '', 0), +(4107, 1, '2013-10-16 15:12:13', '2013-10-16 15:12:13', '[woocommerce_thankyou]', 'Order Received', '', 'publish', 'closed', 'closed', '', 'order-received', '', '', '2013-10-16 15:12:13', '2013-10-16 15:12:13', '', 4099, 'http://theme-fusion.com/avadaxml/checkout/order-received/', 0, 'page', '', 0), +(202, 1, '2012-07-31 17:24:55', '2012-07-31 17:24:55', 'Quisque ligula ipsum, euismod a vulputate a, ultricies et elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.', 'Class Aptent Taciti Soci Ad Litora', '', 'publish', 'open', 'open', '', 'class-aptent-taciti-sociosqu-ad-litora', '', '', '2014-02-26 17:43:04', '2014-02-26 16:43:04', '', 0, 'http://theme-fusion.com/avada/?p=202', 5, 'post', '', 0), +(207, 1, '2012-07-31 17:22:22', '2012-07-31 17:22:22', 'Quisque ligula ipsum, euismod a vulputate a, ultricies et elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.', 'Nunc Tincidunt Elit Cursus', '', 'publish', 'open', 'open', '', 'nunc-tincidunt-elit-non-cursus', '', '', '2014-02-26 17:43:04', '2014-02-26 16:43:04', '', 0, 'http://theme-fusion.com/avada/?p=207', 4, 'post', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(209, 1, '2012-07-31 17:23:05', '2012-07-31 17:23:05', 'Quisque ligula ipsum, euismod aturesit vulputate a, ultricies et elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.', 'Proin Sodales Quam Nec Sollicit', '', 'publish', 'open', 'open', '', 'proin-sodales-quam-nec-ante-sollicits', '', '', '2014-02-26 17:43:04', '2014-02-26 16:43:04', '', 0, 'http://theme-fusion.com/avada/?p=209', 3, 'post', '', 0), +(211, 1, '2012-07-31 17:23:43', '2012-07-31 17:23:43', 'Quisque ligulas ipsum, euismod atras vulputate iltricies etri elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.', 'Nullam Vitae Nibh Un Odiosters', '', 'publish', 'open', 'open', '', 'nullam-vitae-nibh-un-odio', '', '', '2014-02-26 17:43:04', '2014-02-26 16:43:04', '', 0, 'http://theme-fusion.com/avada/?p=211', 2, 'post', '', 0), +(215, 1, '2012-07-31 17:25:18', '2012-07-31 17:25:18', 'Quisque ligulas ipsum, euismod atras vulputate iltricies etri elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exercitation.
\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.\n\n ', 'Donec At Mauris Enims', '', 'publish', 'open', 'open', '', 'donec-at-mauris-enim-duis-nisi-tellus', '', '', '2014-02-26 17:43:04', '2014-02-26 16:43:04', '', 0, 'http://theme-fusion.com/avada/?p=215', 1, 'post', '', 0), +(4120, 1, '2013-10-16 15:51:29', '2013-10-16 15:51:29', '[separator top="-55" style="none"]\n[featured_products_slider]\n[separator top="-26" style="none"]\n\n[fullwidth backgroundcolor="#a0ce4e" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="10px" paddingBottom="20px"]\n

Avada: Themeforest''s #1 Selling Wordpress Theme of All Time

\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="#e5e4e4" paddingTop="65px" paddingBottom="20px"]\n[product_category category="category-1" per_page="8" columns="4" orderby="date" order="desc"]\n[/fullwidth]\n\n[separator top="25"]\n\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/07/bkgd13.jpg" backgroundrepeat="no-repeat" backgroundposition="center center" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="45px"]\n[tagline_box backgroundcolor="#ffffff" shadow="yes" border="1px" bordercolor="#e5e4e4" highlightposition="left" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="Purchase Now" title="Avada is the ultimate multi-purpose wordpress theme!" description="Loaded with awesome features, premium sliders, unlimited colors, advanced theme options & much more!"][/tagline_box]\n[/fullwidth]\n[separator top="-120"]', 'Home Shop Style 1', '', 'publish', 'closed', 'closed', '', 'home-shop-style-1', '', '', '2013-10-16 15:51:29', '2013-10-16 15:51:29', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4120', 0, 'page', '', 0), +(4126, 1, '2013-10-16 15:53:45', '2013-10-16 15:53:45', '[separator top="-55" style="none"]\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\n

Avada: Themeforest''s #1 Selling Wordpress Theme of All Time

\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\n[separator top="40" style=""]\n[featured_products per_page="4" columns="4" orderby="date" order="desc"]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="70px" paddingBottom="20px"]\n\n[two_third last="no"]\n[title size="2"]Top Selling Products[/title]\n[recent_products per_page="6" columns="3" orderby="name" order="asc"]\n[/two_third]\n\n[one_third last="yes"]\n[title size="2"]Company Information[/title]\nAvada is [tooltip title="Everting You Need To Build A Website!"]loaded with useful, functional options[/tooltip] that allow users to quickly and easily create stunning websites. But that''s not all, when you buy Avada you will also get [tooltip title="Support Forum, Online Docs & Videos!"]amazing customer support around![/tooltip] It simply doesn''t get better than this.\n[separator top="40" style=""]\n[accordian]\n[toggle title="Our Company Mission"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem.[/toggle]\n[toggle title="The Avada Philosophy"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem.[/toggle]\n[toggle title="The Avada Promise"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem.[/toggle]\n[toggle title="We Can Deliver On Projects"]Fugiat dapibus, tellus ac cursus commodo, mauris sit condim eser ntumsi nibh, uum a justo vitaes amet risus amets un. Posi sectetut amet fermntum orem.[/toggle]\n[/accordian]\n[separator top="50" style="none"]\n[youtube id="mcixldqDIEQ" width="288" height="169"]\n[separator top="50" style="none"]\n[testimonials]\n[testimonial name="MarketingMonsters" company="Theme Fusion"]WOW – I dont really know what else to say. This is the Best Theme I have ever seen. I am a full time web dev, and this theme blows me away. I wanted to thank you for all your hard work. I am really looking forward to building my new site! I think you thought of everything and then some. But thank you so much for this theme, Best $40 bucks I have ever spent in my entire life! WOW- AMAZING!. [/testimonial]\n[testimonial name="Agustin666" company="Theme Fusion"]Great theme, I had to build a site in a hurry , and could choose no better, in 10 hours I have the site up and running, the best part is that I never had to ask for support, all parameter change was made within the theme and with a little css customization (also within the theme). Best wordpress theme I ever used![/testimonial]\n[/testimonials]\n[/one_third]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#fff" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd6.jpg" backgroundrepeat="no-repeat" backgroundposition="center center" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="80px" paddingBottom="40px"]\n[content_boxes layout="icon-boxed" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n[content_box title="Beautifully Simplistic" icon="tablet" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]If you''re a code nerd or a Word Press newbie, Avada is for you. It''s [tooltip title="That''s Right, It''s For You!"]built for everyone[/tooltip], and can be as simple or complex as you want.[/content_box]\n[content_box title="Free Support & Updates" icon="magic" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""] We truly care about our users & end product which is why[tooltip title="Over 32,000 Users!"] our users love Avada![/tooltip] You will too with free updates & amazing support.[/content_box]\n[content_box title="Blissful Layout Options " icon="thumbs-up" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]Avada includes so many different options and designs. Create [tooltip title="Like This Text Tooltip!"]amazingly cool layouts[/tooltip] with all the different tools we provide.[/content_box]\n[/content_boxes]\n[/fullwidth]\n[separator top="-120"]', 'Home Shop Style 2', '', 'publish', 'closed', 'closed', '', 'home-shop-style-2', '', '', '2013-10-16 15:53:45', '2013-10-16 15:53:45', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4126', 0, 'page', '', 0), +(4138, 1, '2013-10-16 15:59:31', '2013-10-16 15:59:31', '[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"][tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada includes an awesome Flexsldier plugin that comes bundled with shortcodes. There are 4 different post sliders that can be used on any page. Two of them work directly with your blog posts, one is for image attachments, and the last is for any image or video. They are great for displaying images & videos on your site."][/tagline_box][/fullwidth]\n\n[separator top="-10"]\n\n[featured_products_slider]\n\n[separator top="70"]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\n\n[one_half last="no"][featured_products_slider][/one_half]\n[one_half last="yes"]\n[title size="2"]WooCommerce Featured Product Slider[/title]\nThis is the WooCommerce Featured product slide. A beautiful design with nice large product images that will surely grab the viewers attention. Fully responsive and looks fantastic in any sized column or mobile device.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ac nisl eget metus imperdiet venenatis non at nisi. Nam vitae risus neque, sed egestas sem. Suspendisse tristique, purus et ullamcorper tempor, purus enim scelerisque nisl, eget mollis turpis tellus ac augue. Proin aliquet lorem at magna eleifend molestie. Donec eu malesuada odio. Pellentesque euismod nulla eget lorem fringilla pharetra. In odio leo, interdum nec laoreet sed, tempus sit amet tortor. Etiam non sem eleifend sapien auctor aliquet sit amet in est. Suspendisse sagittis congue tempor.  Suspendisse tristique, purus et ullamcorper tempor, purus enim scelerisque nisl, eget mollis turpis tellus ac augue. Proin aliquet lorem at magna eleifend molestie. Donec eu malesuada odio. Pellentesque euismod nulla eget lorem fringilla pharetra. In odio leo, interdum nec laoreet sed, tempus sits.\n\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Beautiful design with large product images
  • \n
  • Automatically pulls your Featured products
  • \n
  • Use the shortcode in any sized column
  • \n
  • Full responsive and looks great on mobile devices
  • \n
  • Unlimited use per page
  • \n
\n[/checklist]\n[/one_half]\n\n[/fullwidth]\n\n ', 'Featured Product Slider', '', 'publish', 'closed', 'closed', '', 'featured-product-slider', '', '', '2013-10-16 15:59:31', '2013-10-16 15:59:31', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4138', 0, 'page', '', 0), +(4140, 1, '2013-10-16 16:00:02', '2013-10-16 16:00:02', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada comes with a WooCommerce product carousel slider that can be isnerted on any page and automatically pull your product posts. Specify only one category to show, or a combination of them, or show all. Show or hide the rollover elements like categories, price and buttons. "][/tagline_box]\n\n[separator top="20"]\n[title size="2"]WooCommerce Product Carousel[/title]\n[products_slider cat_slug="" number_posts="5" show_cats="no" show_price="yes" show_buttons="no"]\n\n[separator top="30" style="single"]\n[one_third last="no"]\n

Use Carousel With Columns

\nThe recent work carousel can be used inside of column shortcodes to control the size. By default it will display all categories of portfolio posts. Users can specify that only a specific category is displayed instead of all categories, which gives you full control over what posts are seen by viewers.[/one_third]\n\n[two_third last="yes"][separator top="25" style="none"][products_slider cat_slug="" number_posts="5" show_cats="no" show_price="yes" show_buttons="no"][/two_third]\n\n[separator top="40"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Unlimited use and items per carousel and per page
  • \n
  • Specify a specific category to display in recent work carousel
  • \n
  • Specify the number of posts that will be displayed
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Show/hide categories, price and buttons on rollover
  • \n
  • Use with column shortcodes to control the width
  • \n
  • Set the link target attribute to control how the link opens
  • \n
\n[/checklist]\n[/one_half]', 'Product Carousel', '', 'publish', 'closed', 'closed', '', 'product-carousel', '', '', '2013-10-16 16:00:02', '2013-10-16 16:00:02', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4140', 0, 'page', '', 0), +(4142, 1, '2013-10-16 16:00:28', '2013-10-16 16:00:28', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="WooCommerce includes several built-in shortcodes for you to display your products. With Avada''s custom styles, they really help your products stand out. This is the Recent Products shortcode that allows you to insert your products by category on any page. Adjust column size, items per page, order by format."][/tagline_box]\n\n[separator top="20"]\n[title size="2"]WooCommerce Recent Products [/title]\n[recent_products per_page="4" columns="4" orderby="date" order="desc"]\n\n[separator top="70" style="none"]\n[title size="2"]Use Them In 1-4 Columns[/title]\n[recent_products per_page="3" columns="3" orderby="date" order="desc"]\n\n[separator top="50"]\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Display products based on category
  • \n
  • Specify how many items will show in the short code
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Specify the column layout, accepts 1-4 column
  • \n
  • Change the order by format and type
  • \n
\n[/checklist]\n[/one_half]', 'Recent Products', '', 'publish', 'closed', 'closed', '', 'recent-products', '', '', '2013-10-16 16:00:28', '2013-10-16 16:00:28', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4142', 0, 'page', '', 0), +(4144, 1, '2013-10-16 16:00:52', '2013-10-16 16:00:52', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="WooCommerce includes several built-in shortcodes for you to display your products. With Avada''s custom styles, they really help your products stand out. This is the Featured Products shortcode that allows you to insert your products by category on any page. Adjust column size, items per page, order by format."][/tagline_box]\n\n[separator top="20"]\n[title size="2"]WooCommerce Recent Products [/title]\n[featured_products per_page="4" columns="4" orderby="date" order="desc"]\n\n[separator top="70" style="none"]\n[title size="2"]Use Them In 1-4 Columns[/title]\n[featured_products per_page="3" columns="3" orderby="date" order="desc"]\n\n[separator top="60"]\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Display featured products on any page
  • \n
  • Specify how many items will show in the short code
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Specify the column layout, accepts 1-4 column
  • \n
  • Change the order by format and type
  • \n
\n[/checklist]\n[/one_half]', 'Featured Products', '', 'publish', 'closed', 'closed', '', 'featured-products', '', '', '2013-10-16 16:00:52', '2013-10-16 16:00:52', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4144', 0, 'page', '', 0), +(4146, 1, '2013-10-16 16:01:20', '2013-10-16 16:01:20', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="WooCommerce includes several built-in shortcodes for you to display your products. With Avada''s custom styles, they really help your products stand out. This is the Product Category short code that you can use to display a category box and a number that shows how many products are in that category."][/tagline_box]\n\n[separator top="20"]\n[title size="2"]WooCommerce Product Categories[/title]\n[product_categories number="8"]\n\n ', 'Product Categories', '', 'publish', 'closed', 'closed', '', 'product-categories', '', '', '2013-10-16 16:01:20', '2013-10-16 16:01:20', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4146', 0, 'page', '', 0), +(4148, 1, '2013-10-16 16:02:09', '2013-10-16 16:02:09', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="WooCommerce includes several built-in shortcodes for you to display your products. With Avada''s custom styles, they really help your products stand out. This shortcode allows you to display products based on SKU or ID, and it can be used in any size column and the size will adapt."][/tagline_box]\n\n[separator top="20" style="none"]\n[title size="2"]WooCommerce Products By SKU/ID[/title]\n[products skus="003,005,007,004"]\n\n[separator top="70" style="none"]\n[title size="2"]Use Them In 1-4 Columns[/title]\n[one_third last="no"][product sku="015"][/one_third]\n[one_third last="no"][product sku="014"][/one_third]\n[one_third last="yes"][product sku="013"][/one_third]\n\n[separator top="50"]\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Use with columns and unlimited use per page
  • \n
  • Specify a product ID or SKU
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Use Product By SKU/ID for single product
  • \n
  • Use Products By SKU/ID for multiple products
  • \n
\n[/checklist]\n[/one_half]', 'Products By SKU/ID', '', 'publish', 'closed', 'closed', '', 'products-by-skuid', '', '', '2013-10-16 16:02:09', '2013-10-16 16:02:09', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4148', 0, 'page', '', 0), +(4150, 1, '2013-10-16 16:02:59', '2013-10-16 16:02:59', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="WooCommerce includes several built-in shortcodes for you to display your products. With Avada''s custom styles, they really help your products stand out. This is the Products By Category shortcode that allows you to insert your products by category on any page. Adjust column size, items per page, order by format."][/tagline_box]\n\n[separator top="20"]\n[title size="2"]WooCommerce Products By Category [/title]\n[product_category category="category-1" per_page="4" columns="4" orderby="date" order="desc"]\n\n[separator top="70" style="none"]\n[title size="2"]Use Them In 1-4 Columns[/title]\n[product_category category="category-1" per_page="3" columns="3" orderby="date" order="desc"]\n\n[separator top="50"]\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Display products based on category
  • \n
  • Specify how many items will show in the short code
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="" circle="yes"]\n
    \n
  • Specify the column layout, accepts 1-4 column
  • \n
  • Change the order by format and type
  • \n
\n[/checklist]\n[/one_half]', 'Product By Category', '', 'publish', 'closed', 'closed', '', 'product-by-category', '', '', '2013-10-16 16:02:59', '2013-10-16 16:02:59', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4150', 0, 'page', '', 0), +(4169, 1, '2013-10-16 17:59:24', '2013-10-16 17:59:24', '[fullwidth backgroundcolor="#f8f8f8" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#c8c8c8" paddingTop="20px" paddingBottom="0px"]\n[content_boxes layout="icon-boxed" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n

Maintenance Mode

\n

Avada includes blank pages so you can build all kinds of awesome stuff, like a maintenance mode page!

\n[separator top="80" style="none"]\n[content_box title="Beautifully Simplistic" icon="tablet" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]If you''re a code nerd or a Word Press newbie, Avada is for you. It''s [tooltip title="That''s Right, It''s For You!"]built for everyone[/tooltip], and can be as simple or complex as you want.[/content_box]\n[content_box title="Free Support & Updates" icon="magic" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""] We truly care about our users & end product which is why[tooltip title="Over 32,000 Users!"] our users love Avada![/tooltip] You will too with free updates & amazing support.[/content_box]\n[content_box title="Blissful Layout Options " icon="thumbs-up" image="" link="http://themeforest.net/user/ThemeFusion" linktarget="" linktext=""]Avada includes so many different options and designs. Create [tooltip title="Like This Text Tooltip!"]amazingly cool layouts[/tooltip] with all the different tools we provide.[/content_box]\n[/content_boxes]\n[/fullwidth]', 'Maintenance Mode', '', 'publish', 'closed', 'closed', '', 'maintenance-mode', '', '', '2013-10-16 17:59:24', '2013-10-16 17:59:24', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4169', 0, 'page', '', 0), +(4172, 1, '2013-10-16 19:41:10', '2013-10-16 19:41:10', '[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="0px"]\n[content_boxes layout="icon-boxed" iconcolor="#ffffff" circlecolor="#333333" circlebordercolor="#333333" backgroundcolor="#f6f6f6"]\n

Coming Soon

\n

Avada includes blank pages so you can build all kinds of awesome stuff, like a coming soon page!

\n[separator top="40" style="none"]\n[counters_circle][counter_circle filledcolor="#a0ce4e" unfilledcolor="#e3edd1" value="90"]DESIGN[/counter_circle][counter_circle filledcolor="#a0ce4e" unfilledcolor="#e3edd1" value="85"]CODE[/counter_circle][counter_circle filledcolor="#a0ce4e" unfilledcolor="#e3edd1" value="90"]MISC[/counter_circle][counter_circle filledcolor="#a0ce4e" unfilledcolor="#e3edd1" value="100"][fontawesome icon="thumbs-up" circle="no" size="large" iconcolor="#747474" circlecolor="#333333" circlebordercolor="#333333"][/counter_circle][/counters_circle]\n[/content_boxes]\n[one_half last="no"]\n[title size="2"]Email Me When It''s Done[/title]\n[contact-form-7 id="7144" title="Contact form 1"]\n[/one_half]\n[one_half last="yes"][title size="2"]Our Top Priorities[/title]\n[checklist icon="check" iconcolor="#ffffff" circle="yes"]\n
    \n
  • Fully responsive so your content will always look good on any screen size
  • \n
  • Awesome sliders give you the opportunity to showcase your content
  • \n
  • Unlimited color options with a backed color picker, including the gradients
  • \n
  • Multiple layout options for home pages, portfolio and blog section
  • \n
  • We offer free support because we care about your site as much as you.
  • \n
\n[/checklist]\n[/one_half]\n\n[/fullwidth]', 'Coming Soon', '', 'publish', 'closed', 'closed', '', 'coming-soon', '', '', '2013-10-16 19:41:10', '2013-10-16 19:41:10', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4172', 0, 'page', '', 0), +(4356, 1, '2013-10-25 20:12:54', '2013-10-25 20:12:54', '', 'Portfolio Sidebar Page', '', 'publish', 'closed', 'closed', '', 'portfolio-sidebar-page', '', '', '2013-10-25 20:12:54', '2013-10-25 20:12:54', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4356', 0, 'page', '', 0), +(4427, 1, '2013-12-16 16:05:11', '2013-12-16 16:05:11', '[separator top="-55" style="none"]\n\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/12/page_bkgd14.jpg" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="40px" paddingBottom="20px"]\n[two_third last="no"]\n[flexslider layout="posts-with-excerpt" excerpt="45" category="design" limit="2" id="" lightbox="yes"][/flexslider]\n[/two_third]\n[one_third last="yes"]\n[flexslider layout="posts" excerpt="15" category="uncategorized" limit="2" id="" lightbox="yes"][/flexslider]\n[separator top="38" style="none"]\ncol_image_1[/one_third]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#6a6970" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\n[imageframe lightbox="no" style="none" bordercolor="" bordersize="0px" stylecolor="" align="left" animation_type="fade" animation_direction="right" animation_speed="1"][/imageframe]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#f6f6f6" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="65px" paddingBottom="0px"]\n[title size="2"]Featured Posts of The Month[/title][separator top="50" style="none"]\n[recent_posts layout="default" columns="3" number_posts="3" cat_slug="" exclude_cats="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="35" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""][/recent_posts]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="#e5e4e4" paddingTop="50px" paddingBottom="0px"]\n[two_third last="no"]\n[title size="2"]Creative News[/title]\n[recent_posts layout="thumbnails-on-side" columns="1" number_posts="3" cat_slug="design" exclude_cats="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="23" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""]\n[/two_third]\n[one_third last="yes"]\n[title size="2"]Photography News[/title]\n[flexslider layout="posts" excerpt="15" category="creative" limit="2" id="" lightbox="yes"][/flexslider]\n[separator top="15" style="none"]\n[/one_third]\n[/fullwidth]\n\n[separator top="-25" style="none"]\n\n[fullwidth backgroundcolor="#6a6970" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\n[imageframe lightbox="no" style="none" bordercolor="" bordersize="0px" stylecolor="" align="left" animation_type="fade" animation_direction="right" animation_speed="1"][/imageframe]\n[/fullwidth]\n\n[fullwidth backgroundcolor="#f6f6f6" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="#e5e4e4" paddingTop="80px" paddingBottom="0px"]\n[one_half last="no"]\n[title size="2"]Video News[/title]\n[recent_posts layout="default" columns="1" number_posts="1" cat_slug="videos" exclude_cats="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="23" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""]\n[/one_half]\n[one_half last="yes"]\n[title size="2"]World News[/title]\n[recent_posts layout="date-on-side" columns="1" number_posts="3" cat_slug="design" exclude_cats="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="23" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""]\n[separator top="-25" style="none"]\n[/one_half]\n[/fullwidth]\n\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="0px" bordercolor="#e5e4e4" paddingTop="80px" paddingBottom="0px"]\n[title size="2"]Most Shared Posts[/title]\n[recent_posts layout="default" columns="4" number_posts="4" cat_slug="" exclude_cats="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="23" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""]\n[/fullwidth]\n\n[separator top="-45" style="none"]\n', 'Home Magazine Style 1', '', 'publish', 'closed', 'closed', '', 'home-magazine-style-1', '', '', '2013-12-16 16:05:11', '2013-12-16 16:05:11', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4427', 0, 'page', '', 0), +(4442, 1, '2013-12-16 16:14:47', '2013-12-16 16:14:47', '[separator top="-55" style="none"]\n\n[two_third last="no"]\n[flexslider layout="posts-with-excerpt" excerpt="45" category="design" limit="2" id="" lightbox="yes"][/flexslider]\n[/two_third]\n[one_third last="yes"]\n[flexslider layout="posts" excerpt="15" category="uncategorized" limit="2" id="" lightbox="yes"][/flexslider]\n[separator top="38" style="none"]\ncol_image_1\n[/one_third]\n\n[separator top="15" style="none"]\n\n[imageframe lightbox="no" style="none" bordercolor="" bordersize="0px" stylecolor="" align="left" animation_type="fade" animation_direction="right" animation_speed="1"][/imageframe]\n\n \n\n[separator top="10" style="double"][separator top="45" style="none"]\n[blog number_posts="3" cat_slug="wordpress" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="23" meta_all="yes" meta_author="yes" meta_categories="yes" meta_comments="yes" meta_date="yes" meta_link="yes" paging="no" scrolling="pagination" strip_html="yes" layout="grid"][/blog]\n\n[title size="2"]Creative News[/title]\n[one_half last="no"]\n[flexslider layout="posts" excerpt="15" category="creative" limit="2" id="" lightbox="yes"][/flexslider]\n[separator top="45" style="none"]\n[imageframe lightbox="no" style="none" bordercolor="" bordersize="0px" stylecolor="" align="left" animation_type="fade" animation_direction="right" animation_speed="1"][/imageframe]\n[/one_half]\n[one_half last="yes"]\n[flexslider layout="posts" excerpt="" category="design" limit="3" id="" lightbox="yes"][/flexslider]\n[separator top="35" style="none"]\n[recent_posts layout="thumbnails-on-side" columns="1" number_posts="3" cat_slug="design" exclude_cats="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="15" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""]\n[/one_half]\n\n\n[title size="2"]Wordpress News[/title]\n[blog number_posts="1" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="93" meta_all="no" meta_author="yes" meta_categories="yes" meta_comments="yes" meta_date="yes" meta_link="yes" paging="no" scrolling="pagination" strip_html="yes" layout="medium"][/blog]\n[separator top="-40" style="none"]\n[one_half last="no"]\n[recent_posts layout="date-on-side" columns="1" number_posts="2" cat_slug="design" exclude_cats="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="28" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""]\n[separator top="-45" style="none"]\n[/one_half]\n\n[one_half last="yes"]\n[recent_posts layout="date-on-side" columns="1" number_posts="2" cat_slug="design" exclude_cats="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="28" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""]\n[separator top="-45" style="none"]\n[/one_half]\n\n[title size="2"]Photography News[/title]\n[recent_posts layout="default" columns="4" number_posts="4" cat_slug="" exclude_cats="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="15" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""]\n\n[separator top="20" style="none"]\n\n[imageframe lightbox="no" style="none" bordercolor="" bordersize="0px" stylecolor="" align="left" animation_type="fade" animation_direction="right" animation_speed="1"][/imageframe]', 'Home Magazine Style 2', '', 'publish', 'closed', 'closed', '', 'home-magazine-style-2', '', '', '2013-12-16 16:14:47', '2013-12-16 16:14:47', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4442', 0, 'page', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4476, 1, '2013-12-16 16:38:06', '2013-12-16 16:38:06', '[flexslider layout="posts-with-excerpt" excerpt="45" category="design" limit="2" id="" lightbox="yes"][/flexslider]\n\n[separator top="35" style="none"]\n\n[imageframe lightbox="no" style="none" bordercolor="" bordersize="0px" stylecolor="" align="left" animation_type="fade" animation_direction="right" animation_speed="1"][/imageframe]\n\n \n[separator top="15" style="double"]\n[separator top="48" style="none"]\n\n[blog number_posts="1" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="55" meta_all="no" meta_author="yes" meta_categories="yes" meta_comments="yes" meta_date="yes" meta_link="yes" paging="no" scrolling="pagination" strip_html="yes" layout="medium"][/blog]\n\n[separator top="-28" style="none"]\n[title size="2"]Wordpress News[/title]\n[recent_posts layout="default" columns="3" number_posts="3" cat_slug="" exclude_cats="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="15" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""][/recent_posts]\n\n\n\n[one_half last="no"][separator top="-10" style="none"]\n[title size="2"]Photography News[/title]\n[recent_posts layout="date-on-side" columns="1" number_posts="2" cat_slug="" exclude_cats="" thumbnail="yes" title="yes" meta="no" excerpt="yes" excerpt_words="22" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""][/recent_posts]\n[separator top="-45" style="none"]\n[/one_half]\n\n[one_half last="yes"][separator top="-10" style="none"]\n[title size="2"]Creative News[/title]\n[recent_posts layout="date-on-side" columns="1" number_posts="2" cat_slug="" exclude_cats="" thumbnail="yes" title="yes" meta="no" excerpt="yes" excerpt_words="22" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""][/recent_posts]\n[separator top="-45" style="none"]\n[/one_half]\n\n\n[imageframe lightbox="no" style="none" bordercolor="" bordersize="0px" stylecolor="" align="left" animation_type="fade" animation_direction="right" animation_speed="1"][/imageframe]\n\n [separator top="48" style="none"]\n\n[one_half last="no"]\n[title size="2"]Video News[/title]\n[recent_posts layout="default" columns="1" number_posts="1" cat_slug="videos" exclude_cats="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="15" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""][/recent_posts]\n[separator top="-35" style="none"]\n[recent_posts layout="thumbnails-on-side" columns="1" number_posts="2" cat_slug="" exclude_cats="" thumbnail="yes" title="yes" meta="no" excerpt="yes" excerpt_words="10" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""][/recent_posts]\n[separator top="-50" style="none"]\n[/one_half]\n\n[one_half last="yes"]\n[title size="2"]Off Beat News[/title]\n[recent_posts layout="default" columns="1" number_posts="1" cat_slug="" exclude_cats="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="15" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""][/recent_posts]\n[separator top="-35" style="none"]\n[recent_posts layout="thumbnails-on-side" columns="1" number_posts="2" cat_slug="" exclude_cats="" thumbnail="yes" title="yes" meta="no" excerpt="yes" excerpt_words="10" strip_html="yes" animation_type="0" animation_direction="down" animation_speed=""][/recent_posts]\n[separator top="-50" style="none"]\n[/one_half]\n', 'Home Magazine Style 3', '', 'publish', 'closed', 'closed', '', 'home-magazine-style-3', '', '', '2013-12-16 16:38:06', '2013-12-16 16:38:06', '', 0, 'http://theme-fusion.com/avadaxml/?page_id=4461', 0, 'page', '', 0), +(213, 1, '2012-07-31 17:26:20', '2012-07-31 17:26:20', 'Quisque ligulas ipsum, euismod atras vulputate iltricies etri elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.', 'Praesent Et Urna Turpis', '', 'publish', 'open', 'open', '', 'praesent-et-urna-turpis-sadips', '', '', '2014-02-26 17:43:04', '2014-02-26 16:43:04', '', 0, 'http://theme-fusion.com/avada/?p=213', 0, 'post', '', 0), +(3876, 1, '2013-10-14 14:55:14', '2013-10-14 14:55:14', 'slide_2', 'Slide 1', '', 'publish', 'closed', 'closed', '', 'slide-1', '', '', '2013-10-14 14:55:14', '2013-10-14 14:55:14', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=slide&p=3876', 0, 'slide', '', 0), +(3877, 1, '2013-10-14 14:55:48', '2013-10-14 14:55:48', '[youtube id="mcixldqDIEQ" width="940" height="560"]', 'Slide 2', '', 'publish', 'closed', 'closed', '', 'slide-2', '', '', '2013-10-14 14:55:48', '2013-10-14 14:55:48', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=slide&p=3877', 0, 'slide', '', 0), +(3878, 1, '2013-10-14 14:56:01', '2013-10-14 14:56:01', 'slide_1', 'Slide 3', '', 'publish', 'closed', 'closed', '', 'slide-3', '', '', '2013-10-14 14:56:01', '2013-10-14 14:56:01', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=slide&p=3878', 0, 'slide', '', 0), +(4052, 1, '2013-10-14 18:33:43', '2013-10-14 18:33:43', '', 'Slide 1', '', 'publish', 'closed', 'closed', '', 'slide-1', '', '', '2013-10-14 18:33:43', '2013-10-14 18:33:43', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=themefusion_elastic&p=4052', 0, 'themefusion_elastic', '', 0), +(4055, 1, '2013-10-14 18:34:03', '2013-10-14 18:34:03', '', 'Slide 2', '', 'publish', 'closed', 'closed', '', 'slide-2', '', '', '2013-10-14 18:34:03', '2013-10-14 18:34:03', '', 0, 'http://theme-fusion.com/avadaxml/?post_type=themefusion_elastic&p=4055', 0, 'themefusion_elastic', '', 0), +(4477, 1, '2014-01-29 21:07:06', '2014-01-29 21:07:06', ' ', '', '', 'publish', 'open', 'open', '', '4477', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4477', 16, 'nav_menu_item', '', 0), +(4478, 1, '2014-01-29 21:07:06', '2014-01-29 21:07:06', ' ', '', '', 'publish', 'open', 'open', '', '4478', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4478', 17, 'nav_menu_item', '', 0), +(4479, 1, '2014-01-29 21:07:06', '2014-01-29 21:07:06', ' ', '', '', 'publish', 'open', 'open', '', '4479', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 80, 'http://127.0.0.1:4001/wordpress/?p=4479', 56, 'nav_menu_item', '', 0), +(4487, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4487', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4487', 15, 'nav_menu_item', '', 0), +(4492, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4492', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4492', 18, 'nav_menu_item', '', 0), +(4493, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4493', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4493', 19, 'nav_menu_item', '', 0), +(4494, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4494', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4494', 20, 'nav_menu_item', '', 0), +(4495, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4495', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4495', 21, 'nav_menu_item', '', 0), +(4497, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4497', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4497', 22, 'nav_menu_item', '', 0), +(4499, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4499', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4499', 23, 'nav_menu_item', '', 0), +(4502, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', '', 'About Us ', '', 'publish', 'open', 'open', '', 'about-us', '', '', '2014-01-29 21:07:07', '2014-01-29 21:07:07', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4502', 2, 'nav_menu_item', '', 0), +(4503, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', '', 'Contact ', '', 'publish', 'open', 'open', '', 'contact', '', '', '2014-01-29 21:07:07', '2014-01-29 21:07:07', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4503', 5, 'nav_menu_item', '', 0), +(4504, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', '', 'FAQ ', '', 'publish', 'open', 'open', '', 'faq', '', '', '2014-01-29 21:07:07', '2014-01-29 21:07:07', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4504', 3, 'nav_menu_item', '', 0), +(4505, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', '', 'Services', '', 'publish', 'open', 'open', '', 'services', '', '', '2014-01-29 21:07:07', '2014-01-29 21:07:07', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4505', 4, 'nav_menu_item', '', 0), +(4506, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4506', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4506', 24, 'nav_menu_item', '', 0), +(4968, 1, '2014-02-26 08:58:56', '0000-00-00 00:00:00', ' ', '', '', 'draft', 'closed', 'open', '', '', '', '', '2014-02-26 08:58:56', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4968', 1, 'nav_menu_item', '', 0), +(4509, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4509', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4509', 26, 'nav_menu_item', '', 0), +(4510, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4510', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4510', 25, 'nav_menu_item', '', 0), +(4511, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4511', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4511', 54, 'nav_menu_item', '', 0), +(4512, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4512', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 54, 'http://127.0.0.1:4001/wordpress/?p=4512', 57, 'nav_menu_item', '', 0), +(4967, 1, '2014-02-26 08:59:16', '2014-02-26 08:59:16', ' ', '', '', 'publish', 'closed', 'open', '', '4967', '', '', '2014-02-26 08:59:16', '2014-02-26 08:59:16', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4967', 5, 'nav_menu_item', '', 0), +(4966, 1, '2014-02-26 08:59:16', '2014-02-26 08:59:16', ' ', '', '', 'publish', 'closed', 'open', '', '4966', '', '', '2014-02-26 08:59:16', '2014-02-26 08:59:16', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4966', 2, 'nav_menu_item', '', 0), +(4965, 1, '2014-02-26 08:59:16', '2014-02-26 08:59:16', ' ', '', '', 'publish', 'closed', 'open', '', '4965', '', '', '2014-02-26 08:59:16', '2014-02-26 08:59:16', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4965', 3, 'nav_menu_item', '', 0), +(4964, 1, '2014-02-26 08:51:05', '0000-00-00 00:00:00', ' ', '', '', 'draft', 'closed', 'open', '', '', '', '', '2014-02-26 08:51:05', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4964', 1, 'nav_menu_item', '', 0), +(4517, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4517', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4517', 29, 'nav_menu_item', '', 0), +(4518, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4518', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4518', 28, 'nav_menu_item', '', 0), +(4519, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4519', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4519', 27, 'nav_menu_item', '', 0), +(4963, 1, '2014-02-26 08:51:05', '0000-00-00 00:00:00', ' ', '', '', 'draft', 'closed', 'open', '', '', '', '', '2014-02-26 08:51:05', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4963', 1, 'nav_menu_item', '', 0), +(4962, 1, '2014-02-26 08:51:05', '0000-00-00 00:00:00', ' ', '', '', 'draft', 'closed', 'open', '', '', '', '', '2014-02-26 08:51:05', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4962', 1, 'nav_menu_item', '', 0), +(4522, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4522', '', '', '2014-02-25 18:34:19', '2014-02-25 18:34:19', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4522', 82, 'nav_menu_item', '', 0), +(4523, 1, '2014-01-29 21:07:07', '2014-01-29 21:07:07', ' ', '', '', 'publish', 'open', 'open', '', '4523', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4523', 81, 'nav_menu_item', '', 0), +(4524, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4524', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4524', 80, 'nav_menu_item', '', 0), +(4525, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4525', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4525', 78, 'nav_menu_item', '', 0), +(4526, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4526', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4526', 77, 'nav_menu_item', '', 0), +(4527, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4527', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4527', 76, 'nav_menu_item', '', 0), +(4528, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4528', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4528', 75, 'nav_menu_item', '', 0), +(4529, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4529', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4529', 74, 'nav_menu_item', '', 0), +(4530, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4530', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4530', 73, 'nav_menu_item', '', 0), +(4531, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4531', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4531', 72, 'nav_menu_item', '', 0), +(4532, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', '', 'Accordions & Toggles', '', 'publish', 'open', 'open', '', '4532', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4532', 67, 'nav_menu_item', '', 0), +(4533, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4533', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4533', 68, 'nav_menu_item', '', 0), +(4961, 1, '2014-02-26 08:51:05', '0000-00-00 00:00:00', ' ', '', '', 'draft', 'closed', 'open', '', '', '', '', '2014-02-26 08:51:05', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4961', 1, 'nav_menu_item', '', 0), +(4535, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4535', '', '', '2014-02-25 18:34:19', '2014-02-25 18:34:19', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4535', 86, 'nav_menu_item', '', 0), +(4536, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4536', '', '', '2014-02-25 18:34:19', '2014-02-25 18:34:19', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4536', 85, 'nav_menu_item', '', 0), +(4537, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4537', '', '', '2014-02-25 18:34:19', '2014-02-25 18:34:19', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4537', 84, 'nav_menu_item', '', 0), +(4538, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4538', '', '', '2014-02-25 18:34:19', '2014-02-25 18:34:19', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4538', 83, 'nav_menu_item', '', 0), +(4539, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4539', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4539', 69, 'nav_menu_item', '', 0), +(4540, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', '', 'Buttons & Social Icons', '', 'publish', 'open', 'open', '', '4540', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4540', 70, 'nav_menu_item', '', 0), +(4541, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4541', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4541', 71, 'nav_menu_item', '', 0), +(4542, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4542', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4542', 79, 'nav_menu_item', '', 0), +(4543, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4543', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4543', 31, 'nav_menu_item', '', 0), +(4544, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4544', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4544', 30, 'nav_menu_item', '', 0), +(4545, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', '', 'About Us', '', 'publish', 'open', 'open', '', 'about-us-2', '', '', '2014-01-29 21:07:08', '2014-01-29 21:07:08', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4545', 2, 'nav_menu_item', '', 0), +(4546, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', '', 'Blog', '', 'publish', 'open', 'open', '', 'blog-2', '', '', '2014-01-29 21:07:08', '2014-01-29 21:07:08', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4546', 5, 'nav_menu_item', '', 0), +(4547, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', '', 'FAQ ', '', 'publish', 'open', 'open', '', 'faq-2', '', '', '2014-01-29 21:07:08', '2014-01-29 21:07:08', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4547', 6, 'nav_menu_item', '', 0), +(4548, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4548', '', '', '2014-01-29 21:07:08', '2014-01-29 21:07:08', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4548', 1, 'nav_menu_item', '', 0), +(4549, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4549', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4549', 50, 'nav_menu_item', '', 0), +(4550, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4550', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4550', 51, 'nav_menu_item', '', 0), +(4551, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', '', 'Shopping Cart', '', 'publish', 'open', 'open', '', 'shopping-cart', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4551', 49, 'nav_menu_item', '', 0), +(4552, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4552', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4552', 47, 'nav_menu_item', '', 0), +(4553, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4553', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4553', 4, 'nav_menu_item', '', 0), +(4554, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4554', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4554', 3, 'nav_menu_item', '', 0), +(4555, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', '', 'Shop Page Full Width', '', 'publish', 'open', 'open', '', 'shop-page-full-width', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4555', 48, 'nav_menu_item', '', 0), +(4556, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4556', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 4100, 'http://127.0.0.1:4001/wordpress/?p=4556', 52, 'nav_menu_item', '', 0), +(4557, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4557', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 4100, 'http://127.0.0.1:4001/wordpress/?p=4557', 53, 'nav_menu_item', '', 0), +(4558, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4558', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4558', 66, 'nav_menu_item', '', 0), +(4559, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4559', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4559', 65, 'nav_menu_item', '', 0), +(4560, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4560', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4560', 64, 'nav_menu_item', '', 0), +(4561, 1, '2014-01-29 21:07:08', '2014-01-29 21:07:08', ' ', '', '', 'publish', 'open', 'open', '', '4561', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4561', 63, 'nav_menu_item', '', 0), +(4562, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4562', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4562', 62, 'nav_menu_item', '', 0), +(4563, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4563', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4563', 61, 'nav_menu_item', '', 0), +(4564, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4564', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4564', 60, 'nav_menu_item', '', 0), +(4565, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4565', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4565', 40, 'nav_menu_item', '', 0), +(4566, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4566', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4566', 39, 'nav_menu_item', '', 0), +(4567, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4567', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4567', 38, 'nav_menu_item', '', 0), +(4568, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4568', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4568', 37, 'nav_menu_item', '', 0), +(4572, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4572', '', '', '2014-01-29 21:07:09', '2014-01-29 21:07:09', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4572', 1, 'nav_menu_item', '', 0), +(4573, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4573', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4573', 44, 'nav_menu_item', '', 0), +(4574, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4574', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4574', 43, 'nav_menu_item', '', 0), +(4575, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4575', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4575', 42, 'nav_menu_item', '', 0), +(4576, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4576', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4576', 41, 'nav_menu_item', '', 0), +(4577, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4577', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4577', 55, 'nav_menu_item', '', 0), +(4578, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4578', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4578', 7, 'nav_menu_item', '', 0), +(4579, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4579', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4579', 6, 'nav_menu_item', '', 0), +(4580, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4580', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4580', 10, 'nav_menu_item', '', 0), +(4581, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4581', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4581', 9, 'nav_menu_item', '', 0), +(4868, 1, '2014-02-21 11:50:17', '2014-02-21 11:50:17', '[two_third last="no"]\r\n[title size="3"]Formulario de contacto[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title="false"]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="3"]Double R Group[/title]\r\n

[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] Calle de Almagro, 21, 28010 Madrid

\r\n

[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633

\r\n

[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com

\r\n

[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com

\r\n[/one_third]\r\n', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-21 11:50:17', '2014-02-21 11:50:17', '', 4671, 'http://127.0.0.1:4001/wordpress/4671-revision-v1/', 0, 'revision', '', 0), +(4586, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4586', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4586', 36, 'nav_menu_item', '', 0), +(4587, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4587', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4587', 45, 'nav_menu_item', '', 0), +(4960, 1, '2014-02-26 08:51:05', '0000-00-00 00:00:00', ' ', '', '', 'draft', 'closed', 'open', '', '', '', '', '2014-02-26 08:51:05', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4960', 1, 'nav_menu_item', '', 0), +(4959, 1, '2014-02-26 08:50:55', '0000-00-00 00:00:00', '', 'Razas', '', 'draft', 'closed', 'open', '', '', '', '', '2014-02-26 08:50:55', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4959', 1, 'nav_menu_item', '', 0), +(4590, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4590', '', '', '2014-01-29 21:07:09', '2014-01-29 21:07:09', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4590', 3, 'nav_menu_item', '', 0), +(4591, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4591', '', '', '2014-01-29 21:07:09', '2014-01-29 21:07:09', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4591', 4, 'nav_menu_item', '', 0), +(4592, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4592', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4592', 14, 'nav_menu_item', '', 0), +(4593, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4593', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4593', 13, 'nav_menu_item', '', 0), +(4594, 1, '2014-01-29 21:07:09', '2014-01-29 21:07:09', ' ', '', '', 'publish', 'open', 'open', '', '4594', '', '', '2014-02-25 18:34:17', '2014-02-25 18:34:17', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4594', 12, 'nav_menu_item', '', 0), +(4595, 1, '2014-01-29 21:07:10', '2014-01-29 21:07:10', '', 'slide_3.jpg', '', 'inherit', 'closed', 'closed', '', 'slide-3-jpg', '', '', '2014-01-29 21:07:10', '2014-01-29 21:07:10', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/revslider/Avada_Full_Width/slide_3.jpg', 0, 'attachment', 'image/jpeg', 0), +(4596, 1, '2014-01-29 21:07:13', '2014-01-29 21:07:13', '', 'slide_4.jpg', '', 'inherit', 'closed', 'closed', '', 'slide-4-jpg', '', '', '2014-01-29 21:07:13', '2014-01-29 21:07:13', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/revslider/Avada_Full_Width/slide_4.jpg', 0, 'attachment', 'image/jpeg', 0), +(4600, 1, '2014-01-29 21:07:17', '2014-01-29 21:07:17', '', 'slide_5.jpg', '', 'inherit', 'closed', 'closed', '', 'slide-5-jpg', '', '', '2014-01-29 21:07:17', '2014-01-29 21:07:17', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/revslider/Avada_Full_Width/slide_5.jpg', 0, 'attachment', 'image/jpeg', 0), +(4602, 1, '2014-01-29 21:07:20', '2014-01-29 21:07:20', '', 'slide_1.jpg', '', 'inherit', 'closed', 'closed', '', 'slide-1-jpg', '', '', '2014-01-29 21:07:20', '2014-01-29 21:07:20', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/revslider/Avada_Page_Slider/slide_1.jpg', 0, 'attachment', 'image/jpeg', 0), +(4603, 1, '2014-01-29 21:07:23', '2014-01-29 21:07:23', '', 'slide_2.jpg', '', 'inherit', 'closed', 'closed', '', 'slide-2-jpg', '', '', '2014-01-29 21:07:23', '2014-01-29 21:07:23', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/revslider/Avada_Page_Slider/slide_2.jpg', 0, 'attachment', 'image/jpeg', 0), +(4604, 1, '2014-01-29 21:07:25', '2014-01-29 21:07:25', '', 'slide_4.jpg', '', 'inherit', 'closed', 'closed', '', 'slide-4-jpg-2', '', '', '2014-01-29 21:07:25', '2014-01-29 21:07:25', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/revslider/Avada_Small_Slider/slide_4.jpg', 0, 'attachment', 'image/jpeg', 0), +(4619, 1, '2014-02-06 17:13:41', '2014-02-06 17:13:41', '', 'Logo-RR@2x', '', 'inherit', 'open', 'open', '', 'logo-rr2x', '', '', '2014-02-06 17:13:41', '2014-02-06 17:13:41', '', 6, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Logo-RR@2x.png', 0, 'attachment', 'image/png', 0), +(4618, 1, '2014-02-06 17:13:41', '2014-02-06 17:13:41', '', 'Logo-RR', '', 'inherit', 'open', 'open', '', 'logo-rr', '', '', '2014-02-06 17:13:41', '2014-02-06 17:13:41', '', 5, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Logo-RR.png', 0, 'attachment', 'image/png', 0), +(4612, 1, '2014-01-29 22:43:11', '2014-01-29 22:43:11', '', 'cropped-header-01', '', 'inherit', 'open', 'open', '', 'cropped-header-01', '', '', '2014-01-29 22:43:11', '2014-01-29 22:43:11', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/cropped-header-01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4613, 1, '2014-01-29 22:43:44', '2014-01-29 22:43:44', '[separator top="40"]\r\n\r\n[content_boxes]\r\n[content_box title="Responsive Design" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it happen.[/content_box]\r\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\r\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including the gradients![/content_box]\r\n[content_box last="yes" title="500+ Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings and body copy with ease![/content_box]\r\n[/content_boxes]\r\n\r\n[separator top="-10"]\r\n\r\n[title size="2"]Latest From The Blog[/title]\r\n[recent_posts columns="3" number_posts="3" cat_id="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="20"][/recent_posts]\r\n\r\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\r\n\r\n[separator top="30"]\r\n[title size="2"]Our Recent Work[/title][recent_works cat_id=""][/recent_works]', 'Home Version 7', '', 'inherit', 'open', 'open', '', '2398-revision-v1', '', '', '2014-01-29 22:43:44', '2014-01-29 22:43:44', '', 2398, 'http://127.0.0.1:4001/wordpress/?p=4613', 0, 'revision', '', 0), +(4614, 1, '2014-01-29 23:19:47', '2014-01-29 23:19:47', '[separator top="-55"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/slide_41-300x143.jpg" backgroundrepeat="no-repeat" backgroundposition="center top" backgroundattachment="fixed" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Avada: Themeforest''s #1 Selling Wordpress Theme of All Time

\r\nWith over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.\r\n\r\n[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]\r\n\r\n \r\n\r\n \r\n\r\n[content_boxes]\r\n[content_box title="Responsive Design" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it happen.[/content_box]\r\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\r\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including the gradients![/content_box]\r\n[content_box last="yes" title="500+ Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings and body copy with ease![/content_box]\r\n[/content_boxes]\r\n\r\n[tagline_box backgroundcolor="#1e73be" shadow="yes" shadowopacity="0.1" border="1px" bordercolor="" highlightposition="top" link="" linktarget="_self" buttoncolor="" button="" title="Title" description="TEXTO" animation_type="fade" animation_direction="up" animation_speed="0.1"][/tagline_box]\r\n\r\n[/fullwidth]\r\n\r\n[separator top="-10"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Latest From The Blog[/title]\r\n[recent_posts columns="3" number_posts="3" cat_id="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="20"][/recent_posts]\r\n\r\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\r\n\r\n[/fullwidth]\r\n\r\n[separator top="30"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n[title size="2"]Our Recent Work[/title][recent_works cat_id=""][/recent_works]\r\n\r\n[/fullwidth]', 'Home Version 7', '', 'inherit', 'open', 'open', '', '2398-autosave-v1', '', '', '2014-01-29 23:19:47', '2014-01-29 23:19:47', '', 2398, 'http://127.0.0.1:4001/wordpress/?p=4614', 0, 'revision', '', 0), +(4626, 1, '2014-02-07 11:46:21', '2014-02-07 11:46:21', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:46:21', '2014-02-07 11:46:21', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4626', 0, 'revision', '', 0), +(4627, 1, '2014-02-07 11:48:00', '2014-02-07 11:48:00', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="100px" paddingBottom="100px"]\r\n\r\n[/fullwidth]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:48:00', '2014-02-07 11:48:00', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4627', 0, 'revision', '', 0), +(4628, 1, '2014-02-07 11:48:39', '2014-02-07 11:48:39', '', 'background_photo', '', 'inherit', 'open', 'open', '', 'background_photo', '', '', '2014-02-07 11:48:39', '2014-02-07 11:48:39', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg', 0, 'attachment', 'image/jpeg', 0), +(4629, 1, '2014-02-07 11:48:59', '2014-02-07 11:48:59', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="100px" paddingBottom="100px"]\r\n\r\n[/fullwidth]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:48:59', '2014-02-07 11:48:59', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4629', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4630, 1, '2014-02-07 11:49:44', '2014-02-07 11:49:44', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="100px" paddingBottom="100px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n\r\n\r\n[/fullwidth]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:49:44', '2014-02-07 11:49:44', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4630', 0, 'revision', '', 0), +(4616, 1, '2014-01-29 23:13:09', '2014-01-29 23:13:09', '[separator top="-55"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/slide_41-300x143.jpg" backgroundrepeat="no-repeat" backgroundposition="center top" backgroundattachment="fixed" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Avada: Themeforest''s #1 Selling Wordpress Theme of All Time

\r\nWith over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.\r\n\r\n[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]\r\n\r\n \r\n\r\n \r\n\r\n[content_boxes]\r\n[content_box title="Responsive Design" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it happen.[/content_box]\r\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\r\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including the gradients![/content_box]\r\n[content_box last="yes" title="500+ Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings and body copy with ease![/content_box]\r\n[/content_boxes]\r\n\r\n[/fullwidth]\r\n\r\n[separator top="-10"]\r\n\r\n[title size="2"]Latest From The Blog[/title]\r\n[recent_posts columns="3" number_posts="3" cat_id="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="20"][/recent_posts]\r\n\r\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\r\n\r\n[separator top="30"]\r\n[title size="2"]Our Recent Work[/title][recent_works cat_id=""][/recent_works]', 'Home Version 7', '', 'inherit', 'open', 'open', '', '2398-revision-v1', '', '', '2014-01-29 23:13:09', '2014-01-29 23:13:09', '', 2398, 'http://127.0.0.1:4001/wordpress/?p=4616', 0, 'revision', '', 0), +(4617, 1, '2014-01-29 23:14:00', '2014-01-29 23:14:00', '[separator top="-55"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/slide_41-300x143.jpg" backgroundrepeat="no-repeat" backgroundposition="center top" backgroundattachment="fixed" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Avada: Themeforest''s #1 Selling Wordpress Theme of All Time

\r\nWith over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.\r\n\r\n[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]\r\n\r\n \r\n\r\n \r\n\r\n[content_boxes]\r\n[content_box title="Responsive Design" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it happen.[/content_box]\r\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\r\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including the gradients![/content_box]\r\n[content_box last="yes" title="500+ Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings and body copy with ease![/content_box]\r\n[/content_boxes]\r\n\r\n[/fullwidth]\r\n\r\n[separator top="-10"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Latest From The Blog[/title]\r\n[recent_posts columns="3" number_posts="3" cat_id="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="20"][/recent_posts]\r\n\r\n[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\r\n\r\n[/fullwidth]\r\n\r\n[separator top="30"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n[title size="2"]Our Recent Work[/title][recent_works cat_id=""][/recent_works]\r\n\r\n[/fullwidth]', 'Home Version 7', '', 'inherit', 'open', 'open', '', '2398-revision-v1', '', '', '2014-01-29 23:14:00', '2014-01-29 23:14:00', '', 2398, 'http://127.0.0.1:4001/wordpress/?p=4617', 0, 'revision', '', 0), +(4634, 1, '2014-02-07 11:54:27', '2014-02-07 11:54:27', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="100px" paddingBottom="100px"]\r\n\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:54:27', '2014-02-07 11:54:27', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4634', 0, 'revision', '', 0), +(4635, 1, '2014-02-07 11:55:00', '2014-02-07 11:55:00', '[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="100px" paddingBottom="100px"]\r\n[/fullwidth]\r\n[separator top="-55"]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:55:00', '2014-02-07 11:55:00', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4635', 0, 'revision', '', 0), +(4636, 1, '2014-02-07 11:55:16', '2014-02-07 11:55:16', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="100px" paddingBottom="100px"]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:55:16', '2014-02-07 11:55:16', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4636', 0, 'revision', '', 0), +(4637, 1, '2014-02-07 11:55:36', '2014-02-07 11:55:36', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="100px" paddingBottom="100px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:55:36', '2014-02-07 11:55:36', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4637', 0, 'revision', '', 0), +(4638, 1, '2014-02-07 11:55:48', '2014-02-07 11:55:48', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="50px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:55:48', '2014-02-07 11:55:48', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4638', 0, 'revision', '', 0), +(4639, 1, '2014-02-07 11:56:20', '2014-02-07 11:56:20', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="50px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:56:20', '2014-02-07 11:56:20', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4639', 0, 'revision', '', 0), +(4640, 1, '2014-02-07 11:56:34', '2014-02-07 11:56:34', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:56:34', '2014-02-07 11:56:34', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4640', 0, 'revision', '', 0), +(4641, 1, '2014-02-07 11:56:48', '2014-02-07 11:56:48', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:56:48', '2014-02-07 11:56:48', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4641', 0, 'revision', '', 0), +(4642, 1, '2014-02-07 11:57:06', '2014-02-07 11:57:06', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:57:06', '2014-02-07 11:57:06', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4642', 0, 'revision', '', 0), +(4643, 1, '2014-02-07 11:57:34', '2014-02-07 11:57:34', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center left" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:57:34', '2014-02-07 11:57:34', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4643', 0, 'revision', '', 0), +(4644, 1, '2014-02-07 11:57:51', '2014-02-07 11:57:51', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="bottom center" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:57:51', '2014-02-07 11:57:51', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4644', 0, 'revision', '', 0), +(4646, 1, '2014-02-07 11:59:30', '2014-02-07 11:59:30', '[separator top="-55"]\r\n\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="bottom center" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:59:30', '2014-02-07 11:59:30', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4646', 0, 'revision', '', 0), +(4645, 1, '2014-02-07 11:59:08', '2014-02-07 11:59:08', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center bottom" backgroundattachment="fixed" bordersize="0px" bordercolor="" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[/fullwidth]\r\n\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="bottom center" backgroundattachment="fixed" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:59:08', '2014-02-07 11:59:08', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4645', 0, 'revision', '', 0), +(4648, 1, '2014-02-07 12:00:36', '2014-02-07 12:00:36', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="bottom center" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:00:36', '2014-02-07 12:00:36', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4648', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4647, 1, '2014-02-07 11:59:48', '2014-02-07 11:59:48', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center bottom" backgroundattachment="fixed" bordersize="0px" bordercolor="" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="bottom center" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 11:59:48', '2014-02-07 11:59:48', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4647', 0, 'revision', '', 0), +(4649, 1, '2014-02-07 12:00:52', '2014-02-07 12:00:52', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center center" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:00:52', '2014-02-07 12:00:52', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4649', 0, 'revision', '', 0), +(4650, 1, '2014-02-07 12:01:07', '2014-02-07 12:01:07', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="-100px center" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="30px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:01:07', '2014-02-07 12:01:07', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4650', 0, 'revision', '', 0), +(4651, 1, '2014-02-07 12:02:26', '2014-02-07 12:02:26', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:02:26', '2014-02-07 12:02:26', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4651', 0, 'revision', '', 0), +(4652, 1, '2014-02-07 12:02:44', '2014-02-07 12:02:44', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:02:44', '2014-02-07 12:02:44', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4652', 0, 'revision', '', 0), +(4653, 1, '2014-02-07 12:03:12', '2014-02-07 12:03:12', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#000" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:03:12', '2014-02-07 12:03:12', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4653', 0, 'revision', '', 0), +(4654, 1, '2014-02-07 12:03:24', '2014-02-07 12:03:24', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#333" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:03:24', '2014-02-07 12:03:24', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4654', 0, 'revision', '', 0), +(4655, 1, '2014-02-07 12:06:23', '2014-02-07 12:06:23', '', 'background_photo', '', 'inherit', 'open', 'open', '', 'background_photo-2', '', '', '2014-02-07 12:06:23', '2014-02-07 12:06:23', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg', 0, 'attachment', 'image/jpeg', 0), +(4656, 1, '2014-02-07 12:06:44', '2014-02-07 12:06:44', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#333" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:06:44', '2014-02-07 12:06:44', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4656', 0, 'revision', '', 0), +(4657, 1, '2014-02-07 12:07:29', '2014-02-07 12:07:29', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#333" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:07:29', '2014-02-07 12:07:29', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4657', 0, 'revision', '', 0), +(4658, 1, '2014-02-07 12:07:45', '2014-02-07 12:07:45', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#333" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:07:45', '2014-02-07 12:07:45', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4658', 0, 'revision', '', 0), +(4659, 1, '2014-02-07 12:08:05', '2014-02-07 12:08:05', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#666" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#eaeaea" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:08:05', '2014-02-07 12:08:05', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4659', 0, 'revision', '', 0), +(4660, 1, '2014-02-07 12:13:52', '2014-02-07 12:13:52', '\r\n[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#666" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Welcome To Avada[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:13:52', '2014-02-07 12:13:52', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4660', 0, 'revision', '', 0), +(4661, 1, '2014-02-07 12:14:15', '2014-02-07 12:14:15', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#666" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Welcome To Avada[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:14:15', '2014-02-07 12:14:15', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4661', 0, 'revision', '', 0), +(4662, 1, '2014-02-07 12:14:30', '2014-02-07 12:14:30', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#a0a0a0" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Welcome To Avada[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:14:30', '2014-02-07 12:14:30', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4662', 0, 'revision', '', 0), +(4663, 1, '2014-02-07 12:14:51', '2014-02-07 12:14:51', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#a0a0a0" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="55"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="15px"]\r\n

Why to ride at The Equestrian Club?

\r\n

With over [tooltip title="800+ Sales Per Week!"]32,000 Users and counting[/tooltip], Avada is the right choice for you! Simply put, its the [tooltip title="We Love Our Users!"]most complete and trusted[/tooltip] wordpress theme on the market.

\r\n

[button color="" size="large" link="" target="http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226"]Purchase Avada Now![/button]

\r\n[/fullwidth]\r\n[separator top="55"]\r\n

Why to ride at The Equestrian Club?

\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.\r\n\r\n ', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:14:51', '2014-02-07 12:14:51', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4663', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4664, 1, '2014-02-07 12:19:34', '2014-02-07 12:19:34', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#a0a0a0" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:19:34', '2014-02-07 12:19:34', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4664', 0, 'revision', '', 0), +(4665, 1, '2014-02-07 12:20:04', '2014-02-07 12:20:04', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#a0a0a0" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="" paddingTop="20px" paddingBottom="20px"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:20:04', '2014-02-07 12:20:04', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4665', 0, 'revision', '', 0), +(4666, 1, '2014-02-07 12:33:42', '2014-02-07 12:33:42', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:33:42', '2014-02-07 12:33:42', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4666', 0, 'revision', '', 0), +(4667, 1, '2014-02-07 12:34:08', '2014-02-07 12:34:08', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="-55"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:34:08', '2014-02-07 12:34:08', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4667', 0, 'revision', '', 0), +(4668, 1, '2014-02-07 12:34:18', '2014-02-07 12:34:18', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:34:18', '2014-02-07 12:34:18', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4668', 0, 'revision', '', 0), +(4669, 1, '2014-02-07 12:35:19', '2014-02-07 12:35:19', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:35:19', '2014-02-07 12:35:19', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4669', 0, 'revision', '', 0), +(4670, 1, '2014-02-07 12:35:45', '2014-02-07 12:35:45', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-07 12:35:45', '2014-02-07 12:35:45', '', 4623, 'http://127.0.0.1:4001/wordpress/?p=4670', 0, 'revision', '', 0), +(4671, 1, '2014-02-07 12:37:09', '2014-02-07 12:37:09', '[two_third last="no"]\r\n[title size="3"]Formulario de contacto[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title="false"]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="3"]Double R Group[/title]\r\n

[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] Calle de Almagro, 21, 28010 Madrid

\r\n

[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633

\r\n

[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com

\r\n

[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com

\r\n[/one_third]\r\n', 'Contacto', '', 'publish', 'open', 'open', '', 'contacto', '', '', '2014-02-21 11:50:17', '2014-02-21 11:50:17', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=4671', 0, 'page', '', 0), +(4672, 1, '2014-02-07 12:37:09', '2014-02-07 12:37:09', '', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 12:37:09', '2014-02-07 12:37:09', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4672', 0, 'revision', '', 0), +(4673, 1, '2014-02-07 12:48:06', '2014-02-07 12:48:06', '[gravityform id="1" name="Contacto" ajax="true"]', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 12:48:06', '2014-02-07 12:48:06', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4673', 0, 'revision', '', 0), +(4674, 1, '2014-02-20 16:32:24', '2014-02-20 16:32:24', '[two_third last="no"]\n[title size="2"]Formulario de contacto[/title]\n[gravityform id="1" name="Contacto" ajax="true" title="false"]\n[/two_third]\n[one_third last="yes"]\n[title size="2"]Double R Group[/title]\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] Calle de Almagro, 21, 28010 Madrid\n\n[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633\n\n[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com\n\n[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com\n\n \n\n[/one_third]\n\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-autosave-v1', '', '', '2014-02-20 16:32:24', '2014-02-20 16:32:24', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4674', 0, 'revision', '', 0), +(4675, 1, '2014-02-07 12:51:03', '2014-02-07 12:51:03', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Font Awesome Icons are incredibly awesome. Avada has them built right into the theme so you can use any of the 300+ icons. Each one comes in 3 sizes and can be used with or without a circle and every one is 100% full vector so they look incredibly sharp and are retina-ready!"][/tagline_box]\n\n[title size="2"]Avada Includes Font Awesome, 300+ Icon Set![/title]\n
[fontawesome icon="tablet" circle="yes" size="large"][fontawesome icon="beaker" circle="yes" size="large"][fontawesome icon="magic" circle="yes" size="large"][fontawesome icon="book" circle="yes" size="large"][fontawesome icon="cloud" circle="yes" size="large"][fontawesome icon="comments-alt" circle="yes" size="large"][fontawesome icon="random" circle="yes" size="large"][fontawesome icon="thumbs-up" circle="yes" size="large"][fontawesome icon="umbrella" circle="yes" size="large"][fontawesome icon="laptop" circle="yes" size="large"][fontawesome icon="key" circle="yes" size="large"]
\n[separator top="75" style="none"]\n\n[one_third last="no"]\n[title size="2"]Large Icons[/title]\n[fontawesome icon="stethoscope" circle="yes" size="large"][fontawesome icon="picture" circle="yes" size="large"][fontawesome icon="sitemap" circle="yes" size="large"]\n[/one_third]\n\n[one_third last="no"]\n[title size="2"]Medium Icons[/title]\n[fontawesome icon="magnet" circle="yes" size="medium"][fontawesome icon="asterisk" circle="yes" size="medium"][fontawesome icon="bar-chart" circle="yes" size="medium"][fontawesome icon="beer" circle="yes" size="medium"][fontawesome icon="bell" circle="yes" size="medium"][fontawesome icon="bookmark" circle="yes" size="medium"][fontawesome icon="fighter-jet" circle="yes" size="medium"][fontawesome icon="cloud-upload" circle="yes" size="medium"][fontawesome icon="credit-card" circle="yes" size="medium"][fontawesome icon="mobile-phone" circle="yes" size="medium"][fontawesome icon="edit" circle="yes" size="medium"][fontawesome icon="legal" circle="yes" size="medium"]\n[/one_third]\n\n[one_third last="yes"]\n[title size="2"]Small Icons[/title]\n[fontawesome icon="wrench" circle="yes" size="small"][fontawesome icon="save" circle="yes" size="small"][fontawesome icon="user" circle="yes" size="small"][fontawesome icon="columns" circle="yes" size="small"][fontawesome icon="upload" circle="yes" size="small"][fontawesome icon="file" circle="yes" size="small"][fontawesome icon="tint" circle="yes" size="small"][fontawesome icon="envelope" circle="yes" size="small"][fontawesome icon="link" circle="yes" size="small"][fontawesome icon="eye-open" circle="yes" size="small"][fontawesome icon="thumbs-up" circle="yes" size="small"][fontawesome icon="coffee" circle="yes" size="small"][fontawesome icon="tasks" circle="yes" size="small"][fontawesome icon="check-empty" circle="yes" size="small"][fontawesome icon="tag" circle="yes" size="small"][fontawesome icon="gift" circle="yes" size="small"][fontawesome icon="spinner" circle="yes" size="small"][fontawesome icon="pushpin" circle="yes" size="small"][fontawesome icon="move" circle="yes" size="small"][fontawesome icon="headphones" circle="yes" size="small"][fontawesome icon="music" circle="yes" size="small"][fontawesome icon="heart-empty" circle="yes" size="small"][fontawesome icon="ok" circle="yes" size="small"][fontawesome icon="remove" circle="yes" size="small"][fontawesome icon="pencil" circle="yes" size="small"][fontawesome icon="minus" circle="yes" size="small"][fontawesome icon="phone" circle="yes" size="small"][fontawesome icon="refresh" circle="yes" size="small"][fontawesome icon="plus" circle="yes" size="small"][fontawesome icon="font" circle="yes" size="small"][fontawesome icon="star-empty" circle="yes" size="small"][fontawesome icon="rocket" circle="yes" size="small"][fontawesome icon="bullseye" circle="yes" size="small"][fontawesome icon="smile" circle="yes" size="small"][fontawesome icon="code" circle="yes" size="small"][fontawesome icon="shield" circle="yes" size="small"]\n[/one_third]\n\n[separator top="45" style="none"]\n\n[title size="2"]Use them With or Without Circles[/title]\n
[fontawesome icon="desktop" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="fire" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="film" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="gift" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="check" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="cog" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="leaf" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="dashboard" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="lock" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="user" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="flag" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="bolt" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="smile" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="lightbulb" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="signal" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="truck" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="screenshot" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="time" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="camera-retro" circle="no" size="large" iconcolor="#9a9a9a"][fontawesome icon="print" circle="no" size="large" iconcolor="#9a9a9a"]
\n[separator top="80" style="none"]\n\n[title size="2"]Easily Control The Circle Color, Icon Color & Border Color[/title]\n
[fontawesome icon="tablet" circle="yes" size="large" iconcolor="#ffffff" circlecolor="#a0ce4e" circlebordercolor="#54770f"]\n[fontawesome icon="beaker" circle="yes" size="large" iconcolor="#ffffff" circlecolor="#398cd2" circlebordercolor="#398cd2"]\n[fontawesome icon="magic" circle="yes" size="large" iconcolor="#e27d3a" circlecolor="#ffffff" circlebordercolor="#e27d3a"]\n[fontawesome icon="cloud" circle="yes" size="large" iconcolor="#ffffff" circlecolor="#b83e2a" circlebordercolor="#b83e2a"]\n[fontawesome icon="book" circle="yes" size="large" iconcolor="#5c5d5c" circlecolor="#b1b1b1" circlebordercolor="#5c5d5c"]\n[fontawesome icon="comments-alt" circle="yes" size="large" iconcolor="#ffffff" circlecolor="#96947a" circlebordercolor="#96947a"]\n[fontawesome icon="random" circle="yes" size="large" iconcolor="#24469b" circlecolor="#ffffff" circlebordercolor="#24469b"]\n[fontawesome icon="thumbs-up" circle="yes" size="large" iconcolor="#ffffff" circlecolor="#6b5694" circlebordercolor="#6b5694"]\n[fontawesome icon="umbrella" circle="yes" size="large" iconcolor="#74a37b" circlecolor="#4f7a55" circlebordercolor="#4f7a55"]\n[fontawesome icon="laptop" circle="yes" size="large" iconcolor="#ffffff" circlecolor="#98a7c5" circlebordercolor="#98a7c5"]\n[fontawesome icon="key" circle="yes" size="large" iconcolor="#333333" circlecolor="#ffffff" circlebordercolor="#333333"]
', 'Font Awesome', '', 'inherit', 'open', 'open', '', '3731-autosave-v1', '', '', '2014-02-07 12:51:03', '2014-02-07 12:51:03', '', 3731, 'http://127.0.0.1:4001/wordpress/?p=4675', 0, 'revision', '', 0), +(4676, 1, '2014-02-07 12:51:58', '2014-02-07 12:51:58', '[two_third last="no"][gravityform id="1" name="Contacto" ajax="true"][/two_third]\r\n[one_third last="yes"]\r\n
DOUBLE R GROUP
\r\n
    \r\n
  •  [fontawesome icon="map-marker" circle="no" size="small" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
  • \r\n
  •  +44 203 290 1502
  • \r\n
  •  support@curlythemes.com
  • \r\n
  •  www.curlythemes.com
  • \r\n
\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 12:51:58', '2014-02-07 12:51:58', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4676', 0, 'revision', '', 0), +(4677, 1, '2014-02-07 12:52:37', '2014-02-07 12:52:37', '[two_third last="no"][gravityform id="1" name="Contacto" ajax="true"][/two_third]\r\n[one_third last="yes"]\r\n
DOUBLE R GROUP
\r\n[fontawesome icon="map-marker" circle="no" size="small" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
\r\n+44 203 290 1502
\r\nsupport@curlythemes.com
\r\nwww.curlythemes.com
\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 12:52:37', '2014-02-07 12:52:37', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4677', 0, 'revision', '', 0), +(4678, 1, '2014-02-07 12:52:50', '2014-02-07 12:52:50', '[two_third last="no"][gravityform id="1" name="Contacto" ajax="true"][/two_third]\r\n[one_third last="yes"]\r\n
DOUBLE R GROUP
\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
\r\n+44 203 290 1502
\r\nsupport@curlythemes.com
\r\nwww.curlythemes.com
\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 12:52:50', '2014-02-07 12:52:50', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4678', 0, 'revision', '', 0), +(4679, 1, '2014-02-07 12:53:13', '2014-02-07 12:53:13', '[two_third last="no"][gravityform id="1" name="Contacto" ajax="true"][/two_third]\r\n[one_third last="yes"]\r\n

DOUBLE R GROUP

\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
\r\n+44 203 290 1502
\r\nsupport@curlythemes.com
\r\nwww.curlythemes.com
\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 12:53:13', '2014-02-07 12:53:13', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4679', 0, 'revision', '', 0), +(4680, 1, '2014-02-07 12:56:37', '2014-02-07 12:56:37', '[two_third last="no"][gravityform id="1" name="Contacto" ajax="true"][/two_third]\r\n[one_third last="yes"]\r\n

DOUBLE R GROUP

\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
\r\n[fontawesome icon="map-phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633
\r\n[fontawesome icon="map-mail" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com
\r\n[fontawesome icon="map-globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com
\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 12:56:37', '2014-02-07 12:56:37', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4680', 0, 'revision', '', 0), +(4681, 1, '2014-02-07 12:57:05', '2014-02-07 12:57:05', '[two_third last="no"][gravityform id="1" name="Contacto" ajax="true"][/two_third]\r\n[one_third last="yes"]\r\n

Double R Group

\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
\r\n[fontawesome icon="map-phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633
\r\n[fontawesome icon="map-mail" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com
\r\n[fontawesome icon="map-globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com
\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 12:57:05', '2014-02-07 12:57:05', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4681', 0, 'revision', '', 0), +(4682, 1, '2014-02-07 12:58:26', '2014-02-07 12:58:26', '[two_third last="no"][gravityform id="1" name="Contacto" ajax="true"][/two_third]\r\n[one_third last="yes"]\r\n[title size="3"]Double R Group[/title]\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
\r\n[fontawesome icon="map-phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633
\r\n[fontawesome icon="map-mail" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com
\r\n[fontawesome icon="map-globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com
\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 12:58:26', '2014-02-07 12:58:26', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4682', 0, 'revision', '', 0), +(4683, 1, '2014-02-07 13:01:15', '2014-02-07 13:01:15', '[two_third last="no"][gravityform id="1" name="Contacto" ajax="true"][/two_third]\r\n[one_third last="yes"]\r\n[title size="3"]Double R Group[/title]\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
\r\n[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633
\r\n[fontawesome icon="mail" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com
\r\n[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com
\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 13:01:15', '2014-02-07 13:01:15', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4683', 0, 'revision', '', 0), +(4684, 1, '2014-02-07 13:01:54', '2014-02-07 13:01:54', '[two_third last="no"][gravityform id="1" name="Contacto" ajax="true"][/two_third]\r\n[one_third last="yes"]\r\n[title size="3"]Double R Group[/title]\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
\r\n[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633
\r\n[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com
\r\n[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com
\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 13:01:54', '2014-02-07 13:01:54', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4684', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4685, 1, '2014-02-07 13:02:16', '2014-02-07 13:02:16', '[two_third last="no"][gravityform id="1" name="Contacto" ajax="true" title="no"][/two_third]\r\n[one_third last="yes"]\r\n[title size="3"]Double R Group[/title]\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
\r\n[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633
\r\n[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com
\r\n[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com
\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 13:02:16', '2014-02-07 13:02:16', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4685', 0, 'revision', '', 0), +(4686, 1, '2014-02-07 17:03:07', '2014-02-07 17:03:07', '', 'footer', '', 'inherit', 'open', 'open', '', 'footer', '', '', '2014-02-07 17:03:07', '2014-02-07 17:03:07', '', 9, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/footer.png', 0, 'attachment', 'image/png', 0), +(4687, 1, '2014-02-07 17:24:27', '2014-02-07 17:24:27', '', 'Logo-RR-footer', '', 'inherit', 'open', 'open', '', 'logo-rr-footer', '', '', '2014-02-07 17:24:27', '2014-02-07 17:24:27', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Logo-RR-footer.png', 0, 'attachment', 'image/png', 0), +(4688, 1, '2014-02-07 17:24:28', '2014-02-07 17:24:28', '', 'Logo-RR-footer@2x', '', 'inherit', 'open', 'open', '', 'logo-rr-footer2x', '', '', '2014-02-07 17:24:28', '2014-02-07 17:24:28', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Logo-RR-footer@2x.png', 0, 'attachment', 'image/png', 0), +(4689, 1, '2014-02-07 17:57:20', '2014-02-07 17:57:20', '[two_third last="no"]\r\n[title size="3"]Formulario de contacto[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title=""]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="3"]Double R Group[/title]\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
\r\n[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633
\r\n[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com
\r\n[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com
\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 17:57:20', '2014-02-07 17:57:20', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4689', 0, 'revision', '', 0), +(4690, 1, '2014-02-07 17:57:38', '2014-02-07 17:57:38', '[two_third last="no"]\r\n[title size="2"]Formulario de contacto[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title=""]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="2"]Double R Group[/title]\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
\r\n[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633
\r\n[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com
\r\n[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com
\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 17:57:38', '2014-02-07 17:57:38', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4690', 0, 'revision', '', 0), +(4819, 1, '2014-02-20 16:31:21', '2014-02-20 16:31:21', '[two_third last="no"]\r\n[title size="2"]Formulario de contacto[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title="false"]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="2"]Double R Group[/title]\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire\r\n\r\n[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633\r\n\r\n[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com\r\n\r\n[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-20 16:31:21', '2014-02-20 16:31:21', '', 4671, 'http://127.0.0.1:4001/wordpress/4671-revision-v1/', 0, 'revision', '', 0), +(4691, 1, '2014-02-07 17:58:03', '2014-02-07 17:58:03', '[two_third last="no"]\r\n[title size="2"]Formulario de contacto[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title="false"]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="2"]Double R Group[/title]\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] 10th Manhattan Blvd, London, UK Theale, Reading, Berkshire
\r\n[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633
\r\n[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com
\r\n[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com
\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-07 17:58:03', '2014-02-07 17:58:03', '', 4671, 'http://127.0.0.1:4001/wordpress/?p=4691', 0, 'revision', '', 0), +(4975, 1, '2014-02-26 11:40:17', '2014-02-26 11:40:17', '

Holstein, bay, Born: 2008, 169cm

\n\nInsemination fee: 700 €* (only frozen semen)\n\n \nAppproved for: Holstein, Oldenburg, Oldenburg-International, Westfalen and Rheinland. As well as all the South German Stud Books and the newly formed German States Stud Books.\n\n \n\nCarthano II was the celebrated premium sire at his approvals in Holstein in 2010, showing enormous ability in his paces, correct conformation, and an abundance of “stallion presence”. Carthano II also has an outstanding trot; this is due to his enormously powerful hind legs. He has a balanced consistent rhythm and large, flexible gaits. His jumping scope, good leg technique and quick reactions at the fence are eye-catching. With all these attributes, Carthano II is undisputedly one of the top stallions of his age group. \n\nIn 2011 Carthano II completed an excellent 30-day-test in Zweibrücken. He confirmed the high expectations by scoring 126 points in the “VA-Zuchtwert” for jumping. Also worth a mention was the deserved high points awarded for his well-tempered character and great attitude. \n\nCathano ll begins his preparation for the National Young Horse Championships in 2013 with his first show jumping events this coming season. \n\n[title size="3"]Progeny[/title]\n\nWe are looking forward with great expectation to Carthano’s first foals in 2012. \n\n[title size="3"]Pedigree[/title]\n\nCarthano II´s sire, Contender won his stallion performance test in Adelheidsdorf in 1987. Over the years, the son of Calypso II has developed into a valued and highly regarded breeding stallion with over one hundred of his approved sons actively serving around the world today. Contender himself was a living legend. Amongst others he sired Checkmate/M. Michaels-Beerbaum, two-time winner of the Riders Tour and team European champion, as well as Montender/M. Kutscher who won two Olympic bronze medals in 2004 and two gold medals at the European Championships in San Patrignano (ITA) in 2005.\n\n \n\n \n\nThe dam’s sire Carthago began his career at the HolsteinVerband, he went on to participate at two Olympic Games with his rider Jos Lansink. He has sired over thirty approved stallions and many international top sport horses such as Cash ridden by Marco Kutscher. Carthago was ranked second in 2010 on the WBFSH-Ranking of the world’s best show jumping sires thanks to his successful offspring.\n\nCarthano II’s dam G-Catania produced the two full-brothers and approved stallions Carthano I and II as well as two stud book premium mares and four sport horses. Two of which, Phyllis and Paula, both sired by Cambridge have been successful in 1.40 and higher jumping classes. The third maternal dam, Mechthild sired by Sacramento Song xx produced three successful sport horses: Leonardo by Landmeister, Cartouche by Cardinal und Lasso by Landmeister.\n\nThe following approved stallions all come from the Holstein lineage 2067: Aconito (by Acorado), Canterburry (by Caletto I), Canturano I and II (by Canturo), Carthano I and II (by Contender), Con Caletto (by Contender), Con Spirito (by Contender), Cosido (by Cosimo), Cristino (by Caretino), Jaquino (by Jayadevo de Mackinac), Landstreicher (by Landgraf I), Lordon (by Lord), Masetto (by Montanus), Octavio (by Oglio), Rando (by Romino) and Sympatico (by Sacramento Song xx).\n\nAmongst the 490 currently registered sport horses are Landstreicher (by Landgraf I), Cazaro (by Chambertin), Claim Collin (by Corrado I) and Cool Man (by Contender) all successful up to S-level. \n\n', 'Carthano', '', 'inherit', 'closed', 'open', '', '4970-autosave-v1', '', '', '2014-02-26 11:40:17', '2014-02-26 11:40:17', '', 4970, 'http://127.0.0.1:4001/wordpress/4970-autosave-v1/', 0, 'revision', '', 0), +(4693, 1, '2014-02-10 17:04:06', '2014-02-10 17:04:06', ' ', '', '', 'publish', 'open', 'open', '', '4693', '', '', '2014-02-26 08:59:16', '2014-02-26 08:59:16', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4693', 6, 'nav_menu_item', '', 0), +(4694, 1, '2014-02-10 17:04:05', '2014-02-10 17:04:05', ' ', '', '', 'publish', 'open', 'open', '', '4694', '', '', '2014-02-26 08:59:16', '2014-02-26 08:59:16', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4694', 1, 'nav_menu_item', '', 0), +(4697, 1, '2014-02-10 17:02:39', '0000-00-00 00:00:00', '', 'Noticias', '', 'draft', 'open', 'open', '', '', '', '', '2014-02-10 17:02:39', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4697', 1, 'nav_menu_item', '', 0), +(4698, 1, '2014-02-10 17:04:51', '2014-02-10 17:04:51', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="55" meta_all="yes" meta_author="no" meta_categories="yes" meta_comments="no" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="large-alternate"][/blog]', 'Noticias', '', 'publish', 'open', 'open', '', 'noticias', '', '', '2014-02-26 17:52:01', '2014-02-26 16:52:01', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=4698', 0, 'page', '', 0), +(4699, 1, '2014-02-10 17:04:05', '2014-02-10 17:04:05', ' ', '', '', 'publish', 'open', 'open', '', '4699', '', '', '2014-02-26 08:59:16', '2014-02-26 08:59:16', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4699', 4, 'nav_menu_item', '', 0), +(4970, 1, '2014-02-25 16:42:42', '2014-02-25 16:42:42', '

Holstein, bay, Born: 2008, 169cm

\r\n\r\nInsemination fee: 700 €* (only frozen semen)\r\n\r\n \r\nAppproved for: Holstein, Oldenburg, Oldenburg-International, Westfalen and Rheinland. As well as all the South German Stud Books and the newly formed German States Stud Books.\r\n\r\n \r\n\r\nCarthano II was the celebrated premium sire at his approvals in Holstein in 2010, showing enormous ability in his paces, correct conformation, and an abundance of “stallion presence”. Carthano II also has an outstanding trot; this is due to his enormously powerful hind legs. He has a balanced consistent rhythm and large, flexible gaits. His jumping scope, good leg technique and quick reactions at the fence are eye-catching. With all these attributes, Carthano II is undisputedly one of the top stallions of his age group. \r\n\r\nIn 2011 Carthano II completed an excellent 30-day-test in Zweibrücken. He confirmed the high expectations by scoring 126 points in the “VA-Zuchtwert” for jumping. Also worth a mention was the deserved high points awarded for his well-tempered character and great attitude. \r\n\r\nCathano ll begins his preparation for the National Young Horse Championships in 2013 with his first show jumping events this coming season. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nWe are looking forward with great expectation to Carthano’s first foals in 2012. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nCarthano II´s sire, Contender won his stallion performance test in Adelheidsdorf in 1987. Over the years, the son of Calypso II has developed into a valued and highly regarded breeding stallion with over one hundred of his approved sons actively serving around the world today. Contender himself was a living legend. Amongst others he sired Checkmate/M. Michaels-Beerbaum, two-time winner of the Riders Tour and team European champion, as well as Montender/M. Kutscher who won two Olympic bronze medals in 2004 and two gold medals at the European Championships in San Patrignano (ITA) in 2005.\r\n\r\n \r\n\r\n \r\n\r\nThe dam’s sire Carthago began his career at the HolsteinVerband, he went on to participate at two Olympic Games with his rider Jos Lansink. He has sired over thirty approved stallions and many international top sport horses such as Cash ridden by Marco Kutscher. Carthago was ranked second in 2010 on the WBFSH-Ranking of the world’s best show jumping sires thanks to his successful offspring.\r\n\r\nCarthano II’s dam G-Catania produced the two full-brothers and approved stallions Carthano I and II as well as two stud book premium mares and four sport horses. Two of which, Phyllis and Paula, both sired by Cambridge have been successful in 1.40 and higher jumping classes. The third maternal dam, Mechthild sired by Sacramento Song xx produced three successful sport horses: Leonardo by Landmeister, Cartouche by Cardinal und Lasso by Landmeister.\r\n\r\nThe following approved stallions all come from the Holstein lineage 2067: Aconito (by Acorado), Canterburry (by Caletto I), Canturano I and II (by Canturo), Carthano I and II (by Contender), Con Caletto (by Contender), Con Spirito (by Contender), Cosido (by Cosimo), Cristino (by Caretino), Jaquino (by Jayadevo de Mackinac), Landstreicher (by Landgraf I), Lordon (by Lord), Masetto (by Montanus), Octavio (by Oglio), Rando (by Romino) and Sympatico (by Sacramento Song xx).\r\n\r\nAmongst the 490 currently registered sport horses are Landstreicher (by Landgraf I), Cazaro (by Chambertin), Claim Collin (by Corrado I) and Cool Man (by Contender) all successful up to S-level. \r\n\r\n', 'Carthano', '', 'publish', 'closed', 'closed', '', '4970', '', '', '2014-02-26 11:51:16', '2014-02-26 11:51:16', '', 0, 'http://127.0.0.1:4001/wordpress/horse/black-jack-2/', 0, 'drg_horse', '', 0), +(4969, 1, '2014-02-26 09:48:29', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-26 09:48:29', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=4969', 0, 'drg_horse', '', 0), +(4701, 1, '2014-02-10 17:04:51', '2014-02-10 17:04:51', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="55" meta_all="yes" meta_author="yes" meta_categories="yes" meta_comments="yes" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="medium"][/blog]', 'Noticias', '', 'inherit', 'open', 'open', '', '4698-revision-v1', '', '', '2014-02-10 17:04:51', '2014-02-10 17:04:51', '', 4698, 'http://127.0.0.1:4001/wordpress/?p=4701', 0, 'revision', '', 0), +(4702, 1, '2014-02-14 15:37:58', '2014-02-14 15:37:58', '[tagline_box link="http://themeforest.net/user/ThemeFusion" button="Purchase Now" title="Avada is incredibly responsive, with a refreshingly clean design" description="And it has some awesome features, premium sliders, unlimited colors, advanced theme options and so much more!"][/tagline_box]\r\n\r\n[content_boxes]\r\n[content_box title="Responsive Design" image="" icon="tablet" link="http://themeforest.net/user/ThemeFusionhttp://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada is fully responsive and can adapt to any screen size. Try resizing your browser window to see it happen.[/content_box]\r\n[content_box title="Awesome Sliders" image="" icon="random" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both are easy to use![/content_box]\r\n[content_box title="Unlimited Colors"  image="" icon="tint" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]We included a backend color picker for unlimited color options. Anything can be changed, including the gradients![/content_box]\r\n[content_box last="yes" title="500+ Google Fonts" image="" icon="text-width" link="http://themeforest.net/user/ThemeFusion" linktext="Learn More"]Avada loves fonts, choose from over 500+ Google Fonts. You can change all headings and body copy with ease![/content_box]\r\n[/content_boxes]\r\n\r\n[three_fourth last="no"]\r\n[title size="2"]Latest From The Blog[/title]\r\n[recent_posts columns="3" number_posts="3" cat_id="" thumbnail="yes" title="yes" meta="yes" excerpt="yes" excerpt_words="15"][/recent_posts]\r\n[/three_fourth]\r\n\r\n[one_fourth last="yes"]\r\n[title size="2"]What Client''s Say[/title]\r\n[testimonials]\r\n[testimonial name="Borchard" gender="male" company="Crucio Theme"]To anybody thinking of buying this theme – buy it! The theme itself is amazing, and on top of that, the support is outstanding! I wanted some features put in, and the theme developer was more than willing to help me out![/testimonial]\r\n[testimonial name="Flygirly" gender="female" company="Imperio Theme"]I would like to extend a special thank you for your excellent support. Is has been a great experience. I love this template and more so because you provided excellent support and feedback.Thank you for such a great template! A must have![/testimonial]\r\n[testimonial name="FWN" gender="female" company="Crucio Theme"]Thank You for the speedy reply and the addition to the next update ThemeFusion, now purchased![/testimonial]\r\n[testimonial name="Utcrayons" gender="male" company="Imperio Theme"]It’s my first time buying on here and I’m very please, so easy to customize! Cheers for your help again, very satisfied customer!!!![/testimonial]\r\n[testimonial name="isaed" gender="male" company="Imperio Theme"]Themes like yours make people want to upgrade their business quality to fit in such beauty … really thanks and all the best luck in sales.[/testimonial]\r\n[/testimonials]\r\n[/one_fourth]', 'Home', '', 'inherit', 'open', 'open', '', '33-revision-v1', '', '', '2014-02-14 15:37:58', '2014-02-14 15:37:58', '', 33, 'http://127.0.0.1:4001/wordpress/?p=4702', 0, 'revision', '', 0), +(4705, 1, '2014-02-18 15:02:59', '2014-02-18 15:02:59', '[separator top="-55"]\r\n[fullwidth bordersize="0"]\r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40" style="shadow"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]', 'Inicio', '', 'publish', 'open', 'open', '', 'inicio', '', '', '2014-02-28 13:12:08', '2014-02-28 12:12:08', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=4705', 0, 'page', '', 0), +(4706, 1, '2014-02-18 15:02:59', '2014-02-18 15:02:59', '[one_third last="no"]\r\n\r\n

Ultra-Responsive Design

\r\nAvada is fully responsive and can adapt to any screen size, its incredibly fast and flexible. Try resizing your browser window to see the adaptation in action.\r\n[/one_third]\r\n\r\n[one_third last="no"]\r\n\r\n

Awesome Powerful Sliders

\r\nAvada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both of the sliders have awesome plugins making it super easy to use.\r\n[/one_third]\r\n\r\n[one_third last="yes"]\r\n\r\n

Loaded With Options

\r\nThis theme is loaded, unlimited color options, 500+ google fonts, 4 post types, advanced theme options, 3 home page layouts, boxed & wide to name a few.\r\n[/one_third]\r\n\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-18 15:02:59', '2014-02-18 15:02:59', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4706', 0, 'revision', '', 0), +(4719, 1, '2014-02-18 16:27:50', '2014-02-18 16:27:50', '[one_third last="no"]\r\n

Servicios

\r\n

Cría

\r\n[/one_third]\r\n\r\n[one_third last="no"]\r\n

Servicios

\r\n

Competición

\r\n[/one_third]\r\n\r\n[one_third last="yes"]\r\n

Servicios

\r\n

Servicios

\r\n[/one_third]\r\n\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-18 16:27:50', '2014-02-18 16:27:50', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4719', 0, 'revision', '', 0), +(4708, 1, '2014-02-18 15:46:25', '2014-02-18 15:46:25', '', 'texto-banner-portada', '', 'inherit', 'open', 'open', '', 'texto-banner-portada-2', '', '', '2014-02-18 15:46:25', '2014-02-18 15:46:25', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/texto-banner-portada1.png', 0, 'attachment', 'image/png', 0), +(4709, 1, '2014-02-18 15:54:54', '2014-02-18 15:54:54', '[one_third last="no"]\r\n\r\n[imageframe lightbox="no" style="border" bordercolor="#cccccc" bordersize="2px" stylecolor="" align="center" animation_type="0" animation_direction="down" animation_speed="0.1"][/imageframe]\r\n

Ultra-Responsive Design

\r\nAvada is fully responsive and can adapt to any screen size, its incredibly fast and flexible. Try resizing your browser window to see the adaptation in action.\r\n[/one_third]\r\n\r\n[one_third last="no"]\r\n\r\n

Awesome Powerful Sliders

\r\nAvada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both of the sliders have awesome plugins making it super easy to use.\r\n[/one_third]\r\n\r\n[one_third last="yes"]\r\n\r\n

Loaded With Options

\r\nThis theme is loaded, unlimited color options, 500+ google fonts, 4 post types, advanced theme options, 3 home page layouts, boxed & wide to name a few.\r\n[/one_third]\r\n\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-18 15:54:54', '2014-02-18 15:54:54', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4709', 0, 'revision', '', 0), +(4710, 1, '2014-02-18 15:55:10', '2014-02-18 15:55:10', '[one_third last="no"]\r\n\r\n[imageframe lightbox="no" style="border" bordercolor="#cccccc" bordersize="10px" stylecolor="" align="center" animation_type="0" animation_direction="down" animation_speed="0.1"][/imageframe]\r\n

Ultra-Responsive Design

\r\nAvada is fully responsive and can adapt to any screen size, its incredibly fast and flexible. Try resizing your browser window to see the adaptation in action.\r\n[/one_third]\r\n\r\n[one_third last="no"]\r\n\r\n

Awesome Powerful Sliders

\r\nAvada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both of the sliders have awesome plugins making it super easy to use.\r\n[/one_third]\r\n\r\n[one_third last="yes"]\r\n\r\n

Loaded With Options

\r\nThis theme is loaded, unlimited color options, 500+ google fonts, 4 post types, advanced theme options, 3 home page layouts, boxed & wide to name a few.\r\n[/one_third]\r\n\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-18 15:55:10', '2014-02-18 15:55:10', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4710', 0, 'revision', '', 0), +(4713, 1, '2014-02-18 16:20:14', '2014-02-18 16:20:14', '[one_third last="no"]\r\n
\r\n\r\n

Ultra-Responsive Design

\r\nAvada is fully responsive and can adapt to any screen size, its incredibly fast and flexible. Try resizing your browser window to see the adaptation in action.\r\n[/one_third]\r\n\r\n[one_third last="no"]\r\n\r\n

Awesome Powerful Sliders

\r\nAvada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both of the sliders have awesome plugins making it super easy to use.\r\n[/one_third]\r\n\r\n[one_third last="yes"]\r\n\r\n

Loaded With Options

\r\nThis theme is loaded, unlimited color options, 500+ google fonts, 4 post types, advanced theme options, 3 home page layouts, boxed & wide to name a few.\r\n[/one_third]\r\n\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-18 16:20:14', '2014-02-18 16:20:14', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4713', 0, 'revision', '', 0), +(4711, 1, '2014-02-18 16:05:59', '2014-02-18 16:05:59', '[one_third last="no"]\r\n\r\n[imageframe lightbox="no" style="border" bordercolor="#cccccc" bordersize="10px" stylecolor="" align="center" animation_type="0" animation_direction="down" animation_speed="0.1"][/imageframe]\r\n\r\n

Ultra-Responsive Design

\r\nAvada is fully responsive and can adapt to any screen size, its incredibly fast and flexible. Try resizing your browser window to see the adaptation in action.\r\n[/one_third]\r\n\r\n[one_third last="no"]\r\n\r\n

Awesome Powerful Sliders

\r\nAvada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both of the sliders have awesome plugins making it super easy to use.\r\n[/one_third]\r\n\r\n[one_third last="yes"]\r\n\r\n

Loaded With Options

\r\nThis theme is loaded, unlimited color options, 500+ google fonts, 4 post types, advanced theme options, 3 home page layouts, boxed & wide to name a few.\r\n[/one_third]\r\n\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-18 16:05:59', '2014-02-18 16:05:59', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4711', 0, 'revision', '', 0), +(4715, 1, '2014-02-18 16:26:13', '2014-02-18 16:26:13', '', 'horse-03-1024x654', '', 'inherit', 'open', 'open', '', 'horse-03-1024x654', '', '', '2014-02-18 16:26:13', '2014-02-18 16:26:13', '', 4623, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg', 0, 'attachment', 'image/jpeg', 0), +(4716, 1, '2014-02-18 16:26:17', '2014-02-18 16:26:17', '', 'horse-011-1024x654', '', 'inherit', 'open', 'open', '', 'horse-011-1024x654', '', '', '2014-02-18 16:26:17', '2014-02-18 16:26:17', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg', 0, 'attachment', 'image/jpeg', 0), +(4717, 1, '2014-02-18 16:26:21', '2014-02-18 16:26:21', '', 'horse-021-1024x654', '', 'inherit', 'open', 'open', '', 'horse-021-1024x654', '', '', '2014-02-18 16:26:21', '2014-02-18 16:26:21', '', 4623, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-021-1024x654.jpg', 0, 'attachment', 'image/jpeg', 0), +(4714, 1, '2014-02-18 16:20:42', '2014-02-18 16:20:42', '[one_third last="no"]\r\n

\r\n

Ultra-Responsive Design

\r\nAvada is fully responsive and can adapt to any screen size, its incredibly fast and flexible. Try resizing your browser window to see the adaptation in action.\r\n[/one_third]\r\n\r\n[one_third last="no"]\r\n\r\n

Awesome Powerful Sliders

\r\nAvada includes the awesome Layer Parallax Slider as well as the popular FlexSlider2. Both of the sliders have awesome plugins making it super easy to use.\r\n[/one_third]\r\n\r\n[one_third last="yes"]\r\n\r\n

Loaded With Options

\r\nThis theme is loaded, unlimited color options, 500+ google fonts, 4 post types, advanced theme options, 3 home page layouts, boxed & wide to name a few.\r\n[/one_third]\r\n\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-18 16:20:42', '2014-02-18 16:20:42', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4714', 0, 'revision', '', 0), +(4718, 1, '2014-02-18 16:26:25', '2014-02-18 16:26:25', '', 'stables1', '', 'inherit', 'open', 'open', '', 'stables1', '', '', '2014-02-18 16:26:25', '2014-02-18 16:26:25', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/stables1.jpg', 0, 'attachment', 'image/jpeg', 0), +(4720, 1, '2014-02-18 16:28:04', '2014-02-18 16:28:04', '[one_third last="no"]\r\n

Servicios

\r\n

Cría

\r\n[/one_third]\r\n\r\n[one_third last="no"]\r\n

Servicios

\r\n

Competición

\r\n[/one_third]\r\n\r\n[one_third last="yes"]\r\n

Servicios

\r\n

Servicios

\r\n[/one_third]\r\n\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-18 16:28:04', '2014-02-18 16:28:04', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4720', 0, 'revision', '', 0), +(4721, 1, '2014-02-18 16:30:14', '2014-02-18 16:30:14', '[one_third last="no"]\r\n

Servicios

\r\n[title size="2"]Cría[/title]\r\n[/one_third]\r\n\r\n[one_third last="no"]\r\n

Servicios

\r\ncCompetición[/title]\r\n[/one_third]\r\n\r\n[one_third last="yes"]\r\n

Servicios

\r\n[title size="2"]Servicios[/title]\r\n[/one_third]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-18 16:30:14', '2014-02-18 16:30:14', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4721', 0, 'revision', '', 0), +(4722, 1, '2014-02-18 16:31:01', '2014-02-18 16:31:01', '[one_third last="no"]\r\n

Servicios

\r\n[title size="2"]Cría[/title]\r\n[/one_third]\r\n[one_third last="no"]\r\n

Servicios

\r\n[title size="2"]Competición[/title]\r\n[/one_third]\r\n[one_third last="yes"]\r\n

Servicios

\r\n[title size="2"]Servicios[/title]\r\n[/one_third]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-18 16:31:01', '2014-02-18 16:31:01', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4722', 0, 'revision', '', 0), +(4723, 1, '2014-02-18 16:34:26', '2014-02-18 16:34:26', '[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-18 16:34:26', '2014-02-18 16:34:26', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4723', 0, 'revision', '', 0), +(4724, 1, '2014-02-19 12:16:00', '2014-02-19 12:16:00', '[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[separator top="40"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:16:00', '2014-02-19 12:16:00', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4724', 0, 'revision', '', 0), +(4725, 1, '2014-02-19 12:21:14', '2014-02-19 12:21:14', '[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[separator top="40"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="70px" paddingBottom="5px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:21:14', '2014-02-19 12:21:14', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4725', 0, 'revision', '', 0), +(4726, 1, '2014-02-19 12:22:14', '2014-02-19 12:22:14', '[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="70px" paddingBottom="5px"]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="40"]\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:22:14', '2014-02-19 12:22:14', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4726', 0, 'revision', '', 0), +(4727, 1, '2014-02-19 12:25:09', '2014-02-19 12:25:09', '[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]Your Content Goes Here[/fullwidth]\r\n\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="40"]\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:25:09', '2014-02-19 12:25:09', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4727', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4728, 1, '2014-02-19 12:25:31', '2014-02-19 12:25:31', '[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="40"]\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:25:31', '2014-02-19 12:25:31', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4728', 0, 'revision', '', 0), +(4729, 1, '2014-02-19 12:26:19', '2014-02-19 12:26:19', '[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="0" paddingBottom="20px"]\r\n\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="40"]\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:26:19', '2014-02-19 12:26:19', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4729', 0, 'revision', '', 0), +(4730, 1, '2014-02-19 12:26:42', '2014-02-19 12:26:42', '[separator top="-40"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="40"]\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:26:42', '2014-02-19 12:26:42', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4730', 0, 'revision', '', 0), +(4731, 1, '2014-02-19 12:26:55', '2014-02-19 12:26:55', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="40"]\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:26:55', '2014-02-19 12:26:55', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4731', 0, 'revision', '', 0), +(4732, 1, '2014-02-19 12:27:46', '2014-02-19 12:27:46', '[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[separator top="40"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:27:46', '2014-02-19 12:27:46', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4732', 0, 'revision', '', 0), +(4733, 1, '2014-02-19 12:42:01', '2014-02-19 12:42:01', '[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[separator top="40"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:42:01', '2014-02-19 12:42:01', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4733', 0, 'revision', '', 0), +(4739, 1, '2014-02-19 12:48:58', '2014-02-19 12:48:58', '[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:48:58', '2014-02-19 12:48:58', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4739', 0, 'revision', '', 0), +(4734, 1, '2014-02-19 12:42:39', '2014-02-19 12:42:39', '[fullwidth]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="40"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:42:39', '2014-02-19 12:42:39', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4734', 0, 'revision', '', 0), +(4738, 1, '2014-02-19 12:45:24', '2014-02-19 12:45:24', '[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="40"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:45:24', '2014-02-19 12:45:24', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4738', 0, 'revision', '', 0), +(4735, 1, '2014-02-19 12:43:11', '2014-02-19 12:43:11', '[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="40"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:43:11', '2014-02-19 12:43:11', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4735', 0, 'revision', '', 0), +(4737, 1, '2014-02-19 12:44:56', '2014-02-19 12:44:56', '[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="40"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:44:56', '2014-02-19 12:44:56', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4737', 0, 'revision', '', 0), +(4736, 1, '2014-02-19 12:43:54', '2014-02-19 12:43:54', '[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[separator top="-10"]\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
\r\n\r\nServicios\r\n\r\n
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="40"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:43:54', '2014-02-19 12:43:54', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4736', 0, 'revision', '', 0), +(4746, 1, '2014-02-20 14:34:55', '2014-02-20 14:34:55', '[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[recent_works layout="grid" filters="false" columns="3" cat_slug="" number_posts="6"][/recent_works]\r\n[one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:34:55', '2014-02-20 14:34:55', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4746', 0, 'revision', '', 0), +(4742, 1, '2014-02-19 13:01:04', '2014-02-19 13:01:04', '[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"]\r\n\r\n[recent_works layout="grid" filters="no" columns="2" cat_slug="" number_posts="4" excerpt_words="15" animation_type="0" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 13:01:04', '2014-02-19 13:01:04', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4742', 0, 'revision', '', 0), +(4740, 1, '2014-02-19 12:57:06', '2014-02-19 12:57:06', '[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n\r\n[/one_half]\r\n[one_half last="yes"]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:57:06', '2014-02-19 12:57:06', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4740', 0, 'revision', '', 0), +(4741, 1, '2014-02-19 12:59:09', '2014-02-19 12:59:09', '[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-19 12:59:09', '2014-02-19 12:59:09', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4741', 0, 'revision', '', 0), +(4743, 1, '2014-02-20 14:33:55', '2014-02-20 14:33:55', '[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"]\r\n\r\n[recent_works layout="grid" filters="no" columns="5" cat_slug="" number_posts="4" excerpt_words="15" animation_type="0" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:33:55', '2014-02-20 14:33:55', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4743', 0, 'revision', '', 0), +(4744, 1, '2014-02-28 12:54:52', '2014-02-28 11:54:52', '[separator top="-55"]\n[fullwidth bordersize="0"]\n\n[/fullwidth]\n\n\n[fullwidth bordersize="0"]\n\n \n\n[title size="2"]Nuestros caballos[/title]\n\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\n[/fullwidth]\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\n[/one_half]\n[/fullwidth]\n[fullwidth bordersize="0"]\n[separator top="40" style="shadow"]\n[one_third last="no"]\n
Servicios
\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\n[/one_third]\n[one_third last="no"]\n
Servicios
\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\n[/one_third]\n[one_third last="yes"]\n
Servicios
\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\n[/one_third]\n[/fullwidth]\n[fullwidth bordersize="0"]\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\n[/fullwidth]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-autosave-v1', '', '', '2014-02-28 12:54:52', '2014-02-28 11:54:52', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4744', 0, 'revision', '', 0), +(4745, 1, '2014-02-20 14:34:16', '2014-02-20 14:34:16', '[recent_works layout="grid" filters="no" columns="5" cat_slug="" number_posts="4" excerpt_words="15" animation_type="0" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:34:16', '2014-02-20 14:34:16', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4745', 0, 'revision', '', 0), +(4747, 1, '2014-02-20 14:35:18', '2014-02-20 14:35:18', '[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[recent_works layout="grid" filters="false" columns="4" cat_slug="" number_posts="8"][/recent_works]\r\n[one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:35:18', '2014-02-20 14:35:18', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4747', 0, 'revision', '', 0), +(4748, 1, '2014-02-20 14:35:40', '2014-02-20 14:35:40', '[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[recent_works layout="grid" filters="false" columns="5" cat_slug="" number_posts="10"][/recent_works]\r\n[one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:35:40', '2014-02-20 14:35:40', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4748', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4749, 1, '2014-02-20 14:36:02', '2014-02-20 14:36:02', '[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[recent_works layout="grid" filters="false" columns="4" cat_slug="" number_posts="4"][/recent_works]\r\n[one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:36:02', '2014-02-20 14:36:02', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4749', 0, 'revision', '', 0), +(4750, 1, '2014-02-20 14:37:11', '2014-02-20 14:37:11', '[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half][one_half last="yes"]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[recent_works layout="grid" filters="false" columns="4" cat_slug="" number_posts="4"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:37:11', '2014-02-20 14:37:11', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4750', 0, 'revision', '', 0), +(4751, 1, '2014-02-20 14:40:36', '2014-02-20 14:40:36', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half][one_half last="yes"]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[recent_works layout="grid" filters="false" columns="4" cat_slug="" number_posts="4"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:40:36', '2014-02-20 14:40:36', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4751', 0, 'revision', '', 0), +(4752, 1, '2014-02-20 14:40:48', '2014-02-20 14:40:48', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="yes"][/one_half][one_half last="yes"]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[recent_works layout="grid" filters="false" columns="4" cat_slug="" number_posts="4"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:40:48', '2014-02-20 14:40:48', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4752', 0, 'revision', '', 0), +(4753, 1, '2014-02-20 14:43:27', '2014-02-20 14:43:27', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"][one_half last="no"][imageframe lightbox="no" style="border" bordercolor="#dbdbdb" bordersize="5px" stylecolor="#848484" align="left" animation_type="0" animation_direction="down" animation_speed="0.1"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="yes"][/imageframe][/one_half][one_half last="yes"]\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[recent_works layout="grid" filters="false" columns="4" cat_slug="" number_posts="4"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:43:27', '2014-02-20 14:43:27', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4753', 0, 'revision', '', 0), +(4755, 1, '2014-02-20 14:45:13', '2014-02-20 14:45:13', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="yes"][/one_half]\r\n[one_half last="yes"]dada dasdas[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[recent_works layout="grid" filters="false" columns="4" cat_slug="" number_posts="4"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:45:13', '2014-02-20 14:45:13', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4755', 0, 'revision', '', 0), +(4754, 1, '2014-02-20 14:44:13', '2014-02-20 14:44:13', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"][one_half last="no"][imageframe lightbox="no" style="border" bordercolor="#dbdbdb" bordersize="5px" stylecolor="#848484" align="left" animation_type="0" animation_direction="down" animation_speed="0.1"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="yes"][/imageframe][/one_half]\r\n[one_half last="yes"]dada dasdas[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[recent_works layout="grid" filters="false" columns="4" cat_slug="" number_posts="4"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:44:13', '2014-02-20 14:44:13', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4754', 0, 'revision', '', 0), +(4775, 1, '2014-02-20 15:03:14', '2014-02-20 15:03:14', '[separator top="-55"]\r\n\r\n[fullwidth bordersize="0"]\r\n\r\n \r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 15:03:14', '2014-02-20 15:03:14', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4775', 0, 'revision', '', 0), +(4756, 1, '2014-02-20 14:46:47', '2014-02-20 14:46:47', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="yes"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque. \r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[recent_works layout="grid" filters="false" columns="4" cat_slug="" number_posts="4"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:46:47', '2014-02-20 14:46:47', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4756', 0, 'revision', '', 0), +(4757, 1, '2014-02-20 14:47:05', '2014-02-20 14:47:05', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque. \r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[recent_works layout="grid" filters="false" columns="4" cat_slug="" number_posts="4"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:47:05', '2014-02-20 14:47:05', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4757', 0, 'revision', '', 0), +(4758, 1, '2014-02-20 14:47:27', '2014-02-20 14:47:27', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="40px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque. \r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[recent_works layout="grid" filters="false" columns="4" cat_slug="" number_posts="4"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:47:27', '2014-02-20 14:47:27', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4758', 0, 'revision', '', 0), +(4759, 1, '2014-02-20 14:47:43', '2014-02-20 14:47:43', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque. \r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[recent_works layout="grid" filters="false" columns="4" cat_slug="" number_posts="4"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:47:43', '2014-02-20 14:47:43', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4759', 0, 'revision', '', 0), +(5096, 1, '2014-02-28 13:06:59', '2014-02-28 12:06:59', '[separator top="-55"]\r\n[fullwidth bordersize="0"]\r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40" style="shadow"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]', 'Inicio', '', 'inherit', 'closed', 'open', '', '4705-revision-v1', '', '', '2014-02-28 13:06:59', '2014-02-28 12:06:59', '', 4705, 'http://127.0.0.1:4001/wordpress/4705-revision-v1/', 0, 'revision', '', 0), +(5092, 1, '2014-02-28 13:03:04', '2014-02-28 12:03:04', '[separator top="-55"]\r\n[fullwidth bordersize="0"]\r\n\r\n[/fullwidth]\r\n\r\n[fullwidth bordersize="0"]\r\n\r\n \r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40" style="shadow"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]', 'Inicio', '', 'inherit', 'closed', 'open', '', '4705-revision-v1', '', '', '2014-02-28 13:03:04', '2014-02-28 12:03:04', '', 4705, 'http://127.0.0.1:4001/wordpress/4705-revision-v1/', 0, 'revision', '', 0), +(4760, 1, '2014-02-20 14:52:58', '2014-02-20 14:52:58', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[title size="3"]Nuestros caballos[/title][separator top="45"]\r\n[recent_works layout="carousel" filters="true" columns="4" cat_slug="" number_posts="10"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:52:58', '2014-02-20 14:52:58', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4760', 0, 'revision', '', 0), +(4761, 1, '2014-02-20 14:53:25', '2014-02-20 14:53:25', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[title size="2"]Nuestros caballos[/title][separator top="45"]\r\n[recent_works layout="carousel" filters="true" columns="4" cat_slug="" number_posts="10"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:53:25', '2014-02-20 14:53:25', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4761', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4762, 1, '2014-02-20 14:55:00', '2014-02-20 14:55:00', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="45"]\r\n[one_third last="no"][title size="2"]Nuestros caballos[/title]\r\nUt viverra urna urna, eget pulvinar elit tristique fermentum. Praesent ut elementum tortor. Aenean nec tempor metus. Nulla nulla quam, mattis a magna.\r\n[/one_third]\r\n[two_third last="yes"][recent_works layout="carousel" filters="true" columns="3" cat_slug="" number_posts="10"][/recent_works][/two_third]\r\n\r\n\r\n\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:55:00', '2014-02-20 14:55:00', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4762', 0, 'revision', '', 0), +(4763, 1, '2014-02-20 14:55:23', '2014-02-20 14:55:23', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n\r\n[one_third last="no"][title size="2"]Nuestros caballos[/title]\r\nUt viverra urna urna, eget pulvinar elit tristique fermentum. Praesent ut elementum tortor. Aenean nec tempor metus. Nulla nulla quam, mattis a magna.\r\n[/one_third]\r\n[two_third last="yes"][recent_works layout="carousel" filters="true" columns="3" cat_slug="" number_posts="10"][/recent_works][/two_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:55:23', '2014-02-20 14:55:23', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4763', 0, 'revision', '', 0), +(4764, 1, '2014-02-20 14:55:41', '2014-02-20 14:55:41', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40"]\r\n[one_third last="no"][title size="2"]Nuestros caballos[/title]\r\nUt viverra urna urna, eget pulvinar elit tristique fermentum. Praesent ut elementum tortor. Aenean nec tempor metus. Nulla nulla quam, mattis a magna.\r\n[/one_third]\r\n[two_third last="yes"][recent_works layout="carousel" filters="true" columns="3" cat_slug="" number_posts="10"][/recent_works][/two_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:55:41', '2014-02-20 14:55:41', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4764', 0, 'revision', '', 0), +(4765, 1, '2014-02-20 14:55:57', '2014-02-20 14:55:57', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40"]\r\n[one_third last="no"][title size="2"]Nuestros caballos[/title]\r\nUt viverra urna urna, eget pulvinar elit tristique fermentum. Praesent ut elementum tortor. Aenean nec tempor metus. Nulla nulla quam, mattis a magna.\r\n[/one_third]\r\n[two_third last="yes"][recent_works layout="grid" filters="false" columns="3" cat_slug="" number_posts="10"][/recent_works][/two_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:55:57', '2014-02-20 14:55:57', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4765', 0, 'revision', '', 0), +(4766, 1, '2014-02-20 14:56:14', '2014-02-20 14:56:14', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40"]\r\n[one_third last="no"][title size="2"]Nuestros caballos[/title]\r\nUt viverra urna urna, eget pulvinar elit tristique fermentum. Praesent ut elementum tortor. Aenean nec tempor metus. Nulla nulla quam, mattis a magna.\r\n[/one_third]\r\n[two_third last="yes"][recent_works layout="grid" filters="false" columns="2" cat_slug="" number_posts="10"][/recent_works][/two_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:56:14', '2014-02-20 14:56:14', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4766', 0, 'revision', '', 0), +(4767, 1, '2014-02-20 14:57:04', '2014-02-20 14:57:04', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40"]\r\n[one_third last="no"][title size="2"]Nuestros caballos[/title]\r\nUt viverra urna urna, eget pulvinar elit tristique fermentum. Praesent ut elementum tortor. Aenean nec tempor metus. Nulla nulla quam, mattis a magna.\r\n[/one_third]\r\n[two_third last="yes"][recent_works layout="grid" filters="no" columns="2" cat_slug="" number_posts="10" excerpt_words="15" animation_type="fade" animation_direction="down" animation_speed="0.1"][/recent_works][/two_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:57:04', '2014-02-20 14:57:04', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4767', 0, 'revision', '', 0), +(4768, 1, '2014-02-20 14:57:26', '2014-02-20 14:57:26', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40"]\r\n[one_third last="no"][title size="2"]Nuestros caballos[/title]\r\nUt viverra urna urna, eget pulvinar elit tristique fermentum. Praesent ut elementum tortor. Aenean nec tempor metus. Nulla nulla quam, mattis a magna.\r\n[/one_third]\r\n[two_third last="yes"][recent_works layout="grid" filters="no" columns="3" cat_slug="" number_posts="10" excerpt_words="15" animation_type="fade" animation_direction="down" animation_speed="0.1"][/recent_works][/two_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:57:26', '2014-02-20 14:57:26', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4768', 0, 'revision', '', 0), +(4769, 1, '2014-02-20 14:57:57', '2014-02-20 14:57:57', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40"]\r\n[one_third last="no"][title size="2"]Nuestros caballos[/title]\r\nUt viverra urna urna, eget pulvinar elit tristique fermentum. Praesent ut elementum tortor. Aenean nec tempor metus. Nulla nulla quam, mattis a magna.\r\n[/one_third]\r\n[two_third last="yes"][recent_works layout="grid" filters="no" columns="4" cat_slug="" number_posts="10" excerpt_words="15" animation_type="fade" animation_direction="down" animation_speed="0.1"][/recent_works][/two_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:57:57', '2014-02-20 14:57:57', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4769', 0, 'revision', '', 0), +(4771, 1, '2014-02-20 15:00:04', '2014-02-20 15:00:04', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40"]\r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 15:00:04', '2014-02-20 15:00:04', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4771', 0, 'revision', '', 0), +(4770, 1, '2014-02-20 14:58:42', '2014-02-20 14:58:42', '[separator top="-55"]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40"]\r\n[one_fourth last="no"][title size="2"]Nuestros caballos[/title]\r\nUt viverra urna urna, eget pulvinar elit tristique fermentum. Praesent ut elementum tortor. Aenean nec tempor metus. Nulla nulla quam, mattis a magna.\r\n[/one_fourth]\r\n[two_third last="yes"][recent_works layout="grid" filters="no" columns="4" cat_slug="" number_posts="10" excerpt_words="15" animation_type="fade" animation_direction="down" animation_speed="0.1"][/recent_works][/two_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 14:58:42', '2014-02-20 14:58:42', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4770', 0, 'revision', '', 0), +(4772, 1, '2014-02-20 15:00:58', '2014-02-20 15:00:58', '[separator top="-55"]\r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40"]\r\n\r\n \r\n\r\n[fullwidth bordersize="0"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 15:00:58', '2014-02-20 15:00:58', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4772', 0, 'revision', '', 0), +(4774, 1, '2014-02-20 15:02:12', '2014-02-20 15:02:12', '[separator top="-55"]\r\n\r\n[fullwidth bordersize="0"]\r\n\r\n \r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"][title size="3"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 15:02:12', '2014-02-20 15:02:12', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4774', 0, 'revision', '', 0), +(4773, 1, '2014-02-20 15:01:23', '2014-02-20 15:01:23', '[separator top="-55"]\r\n\r\n[fullwidth bordersize="0"]\r\n\r\n \r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40"]\r\n\r\n \r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[title size="2"]Patrocinios[/title]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]\r\n[separator top="40"]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 15:01:23', '2014-02-20 15:01:23', '', 4705, 'http://127.0.0.1:4001/wordpress/?p=4773', 0, 'revision', '', 0), +(5004, 1, '2014-02-26 17:34:26', '2014-02-26 16:34:26', '

Holsteiner - Line 4705 - bay - 2003 - 16.3 ½ hands

\r\nBreeder: Peter Böge, Schönhorst, Germany\r\n\r\nApproved for Hanover, Holstein, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.as well as Denmark, Sweden and France.\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\nCarrico has now become firmly established in upper level, international show jumping after placing in Dortmund, Hagen a.T.W., Chantilly/FRA, Münster, Paderborn and Neumünster under Philipp Weishaupt and Henrik von Eckermann/SWE.\r\n\r\nAwarded a premium in 2005 in Neumünster, Carrico then took his stallion performance test in Redefin where he won the jumping as well as the dressage index, finishing first overall. In 2008 he won a qualifier at the Bundeschampionat with a 9.5 and in 2009 he placed in the Final for six-year old show jumpers in Warendorf. At the age of just seven, he won his first ribbons in advanced level classes.\r\n', 'Carrico', '', 'inherit', 'closed', 'open', '', '4953-revision-v1', '', '', '2014-02-26 17:34:26', '2014-02-26 16:34:26', '', 4953, 'http://127.0.0.1:4001/wordpress/4953-revision-v1/', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(5005, 1, '2014-02-26 17:39:14', '2014-02-26 16:39:14', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" image_width="300" image_height="200" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="200" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="200" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
horse-021-1024x654
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestros sementales[/title]\r\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\r\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\r\n[/two_third] \r\n[separator top="55"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
Yegua
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestras yeguas[/title]\r\nPara poder cumplir nuestro objetivo, todas las yeguas han sido seleccionadas muy cuidadosamente entre las mejores familias maternas para producir potros que serán destinados a competir en el máximo nivel internacional.\r\n[/two_third]\r\n\r\n[/fullwidth]\r\n[separator top="-55"]', 'About us', '', 'publish', 'open', 'open', '', 'about-us', '', '', '2014-02-27 16:25:55', '2014-02-27 15:25:55', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=5005', 0, 'page', '', 0), +(5006, 1, '2014-02-26 17:39:14', '2014-02-26 16:39:14', '', 'About us', '', 'inherit', 'closed', 'open', '', '5005-revision-v1', '', '', '2014-02-26 17:39:14', '2014-02-26 16:39:14', '', 5005, 'http://127.0.0.1:4001/wordpress/5005-revision-v1/', 0, 'revision', '', 0), +(5007, 1, '2014-02-26 17:40:26', '2014-02-26 16:40:26', '', 'Facilities', '', 'publish', 'open', 'open', '', 'facilities', '', '', '2014-02-26 17:40:26', '2014-02-26 16:40:26', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=5007', 0, 'page', '', 0), +(5008, 1, '2014-02-26 17:40:26', '2014-02-26 16:40:26', '', 'Facilities', '', 'inherit', 'closed', 'open', '', '5007-revision-v1', '', '', '2014-02-26 17:40:26', '2014-02-26 16:40:26', '', 5007, 'http://127.0.0.1:4001/wordpress/5007-revision-v1/', 0, 'revision', '', 0), +(5009, 1, '2014-02-10 17:04:51', '2014-02-10 17:04:51', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="55" meta_all="yes" meta_author="no" meta_categories="yes" meta_comments="no" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="large-alternate"][/blog]', 'News', '', 'publish', 'open', 'open', '', 'news', '', '', '2014-02-26 17:52:45', '2014-02-26 16:52:45', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=5009', 0, 'page', '', 0), +(5010, 1, '2014-02-26 17:49:52', '2014-02-26 16:49:52', '', 'News', '', 'inherit', 'closed', 'open', '', '5009-revision-v1', '', '', '2014-02-26 17:49:52', '2014-02-26 16:49:52', '', 5009, 'http://127.0.0.1:4001/wordpress/5009-revision-v1/', 0, 'revision', '', 0), +(5011, 1, '2014-02-26 17:50:06', '2014-02-26 16:50:06', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="55" meta_all="yes" meta_author="yes" meta_categories="yes" meta_comments="yes" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="medium"][/blog]', 'Noticias', '', 'inherit', 'closed', 'open', '', '5009-revision-v1', '', '', '2014-02-26 17:50:06', '2014-02-26 16:50:06', '', 5009, 'http://127.0.0.1:4001/wordpress/5009-revision-v1/', 0, 'revision', '', 0), +(5012, 1, '2014-02-26 17:50:58', '2014-02-26 16:50:58', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="55" meta_all="yes" meta_author="no" meta_categories="yes" meta_comments="no" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="large-alternate"][/blog]', 'Noticias', '', 'inherit', 'closed', 'open', '', '5009-revision-v1', '', '', '2014-02-26 17:50:58', '2014-02-26 16:50:58', '', 5009, 'http://127.0.0.1:4001/wordpress/5009-revision-v1/', 0, 'revision', '', 0), +(5013, 1, '2014-02-26 17:51:31', '2014-02-26 16:51:31', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="55" meta_all="yes" meta_author="no" meta_categories="yes" meta_comments="no" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="large-alternate"][/blog]', 'News', '', 'inherit', 'closed', 'open', '', '5009-revision-v1', '', '', '2014-02-26 17:51:31', '2014-02-26 16:51:31', '', 5009, 'http://127.0.0.1:4001/wordpress/5009-revision-v1/', 0, 'revision', '', 0), +(5014, 1, '2014-02-26 17:52:01', '2014-02-26 16:52:01', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="55" meta_all="yes" meta_author="no" meta_categories="yes" meta_comments="no" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="large-alternate"][/blog]', 'Noticias', '', 'inherit', 'closed', 'open', '', '4698-revision-v1', '', '', '2014-02-26 17:52:01', '2014-02-26 16:52:01', '', 4698, 'http://127.0.0.1:4001/wordpress/4698-revision-v1/', 0, 'revision', '', 0), +(5015, 1, '2014-02-26 17:52:01', '2014-02-26 16:52:01', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="55" meta_all="yes" meta_author="no" meta_categories="yes" meta_comments="no" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="large-alternate"][/blog]', 'Noticias', '', 'inherit', 'closed', 'open', '', '5009-revision-v1', '', '', '2014-02-26 17:52:01', '2014-02-26 16:52:01', '', 5009, 'http://127.0.0.1:4001/wordpress/5009-revision-v1/', 0, 'revision', '', 0), +(5016, 1, '2014-02-26 17:52:35', '2014-02-26 16:52:35', '[blog number_posts="6" cat_slug="" title="yes" thumbnail="yes" excerpt="yes" excerpt_words="55" meta_all="yes" meta_author="no" meta_categories="yes" meta_comments="no" meta_date="yes" meta_link="yes" paging="yes" scrolling="pagination" strip_html="yes" layout="large-alternate"][/blog]', 'News', '', 'inherit', 'closed', 'open', '', '5009-revision-v1', '', '', '2014-02-26 17:52:35', '2014-02-26 16:52:35', '', 5009, 'http://127.0.0.1:4001/wordpress/5009-revision-v1/', 0, 'revision', '', 0), +(5029, 1, '2014-02-26 18:00:27', '2014-02-26 17:00:27', '', 'Competición', '', 'inherit', 'closed', 'open', '', '5027-revision-v1', '', '', '2014-02-26 18:00:27', '2014-02-26 17:00:27', '', 5027, 'http://127.0.0.1:4001/wordpress/5027-revision-v1/', 0, 'revision', '', 0), +(5020, 1, '2014-02-26 17:58:11', '2014-02-26 16:58:11', ' ', '', '', 'publish', 'closed', 'open', '', '5020', '', '', '2014-02-26 17:58:11', '2014-02-26 16:58:11', '', 0, 'http://127.0.0.1:4001/wordpress/5020/', 1, 'nav_menu_item', '', 0), +(5021, 1, '2014-02-26 17:58:11', '2014-02-26 16:58:11', ' ', '', '', 'publish', 'closed', 'open', '', '5021', '', '', '2014-02-26 17:58:11', '2014-02-26 16:58:11', '', 0, 'http://127.0.0.1:4001/wordpress/5021/', 4, 'nav_menu_item', '', 0), +(5022, 1, '2014-02-26 17:58:11', '2014-02-26 16:58:11', ' ', '', '', 'publish', 'closed', 'open', '', '5022', '', '', '2014-02-26 17:58:11', '2014-02-26 16:58:11', '', 0, 'http://127.0.0.1:4001/wordpress/5022/', 5, 'nav_menu_item', '', 0), +(5023, 1, '2014-02-24 17:36:05', '2014-02-24 17:36:05', '', 'Breeding', '', 'publish', 'closed', 'open', '', 'breeding', '', '', '2014-02-26 18:00:11', '2014-02-26 17:00:11', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=5023', 0, 'page', '', 0), +(5024, 1, '2014-02-26 17:59:38', '2014-02-26 16:59:38', '', 'Breeding', '', 'inherit', 'closed', 'open', '', '5023-revision-v1', '', '', '2014-02-26 17:59:38', '2014-02-26 16:59:38', '', 5023, 'http://127.0.0.1:4001/wordpress/5023-revision-v1/', 0, 'revision', '', 0), +(5025, 1, '2014-02-26 17:59:46', '2014-02-26 16:59:46', '', 'Cría', '', 'inherit', 'closed', 'open', '', '5023-revision-v1', '', '', '2014-02-26 17:59:46', '2014-02-26 16:59:46', '', 5023, 'http://127.0.0.1:4001/wordpress/5023-revision-v1/', 0, 'revision', '', 0), +(5026, 1, '2014-02-26 17:59:58', '2014-02-26 16:59:58', '', 'Breeding', '', 'inherit', 'closed', 'open', '', '5023-revision-v1', '', '', '2014-02-26 17:59:58', '2014-02-26 16:59:58', '', 5023, 'http://127.0.0.1:4001/wordpress/5023-revision-v1/', 0, 'revision', '', 0), +(5027, 1, '2014-02-24 18:24:48', '2014-02-24 18:24:48', '', 'Competition', '', 'publish', 'closed', 'open', '', 'competition', '', '', '2014-02-26 18:00:39', '2014-02-26 17:00:39', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=5027', 0, 'page', '', 0), +(5028, 1, '2014-02-26 18:00:21', '2014-02-26 17:00:21', '', 'Competition', '', 'inherit', 'closed', 'open', '', '5027-revision-v1', '', '', '2014-02-26 18:00:21', '2014-02-26 17:00:21', '', 5027, 'http://127.0.0.1:4001/wordpress/5027-revision-v1/', 0, 'revision', '', 0), +(4780, 1, '2014-02-20 15:18:41', '2014-02-20 15:18:41', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[title size="2"]Our Valuable Team Members[/title]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo. [/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/portfolio_61.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:18:41', '2014-02-20 15:18:41', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4778, 1, '2014-02-20 15:14:07', '2014-02-20 15:14:07', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[title size="2"]Our Valuable Team Members[/title]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo. [/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/portfolio_61.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:14:07', '2014-02-20 15:14:07', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4801, 1, '2014-02-20 15:57:15', '2014-02-20 15:57:15', '[separator top="-55" style="none"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="40px" paddingBottom="40px"]\r\n
\r\n

Amazing Product: Get It Before Anyone Else!

\r\n

This is where your amazing product promotion text can go so your viewers can read about how awesome it is!

\r\n
\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:57:15', '2014-02-20 15:57:15', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4793, 1, '2014-02-20 15:52:33', '2014-02-20 15:52:33', '\r\n[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:52:33', '2014-02-20 15:52:33', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4790, 1, '2014-02-20 15:47:58', '2014-02-20 15:47:58', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:47:58', '2014-02-20 15:47:58', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4789, 1, '2014-02-20 15:47:25', '2014-02-20 15:47:25', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[one_third last="no"]\r\n
\r\n
Servicios
\r\n

Nuestras instalaciones

\r\n\r\n
\r\n[/one_third]\r\n[one_third last="no"][/one_third]\r\n[one_third last="yes"][/one_third]\r\n\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n \r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:47:25', '2014-02-20 15:47:25', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4779, 1, '2014-02-20 15:18:15', '2014-02-20 15:18:15', '', 'f_equipo', '', 'inherit', 'open', 'open', '', 'f_equipo', '', '', '2014-02-20 15:18:15', '2014-02-20 15:18:15', '', 4623, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/f_equipo.jpg', 0, 'attachment', 'image/jpeg', 0), +(4781, 1, '2014-02-20 15:19:18', '2014-02-20 15:19:18', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="10"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[title size="2"]Our Valuable Team Members[/title]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo. [/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/portfolio_61.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:19:18', '2014-02-20 15:19:18', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4782, 1, '2014-02-20 15:19:52', '2014-02-20 15:19:52', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[title size="2"]Our Valuable Team Members[/title]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo. [/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/portfolio_61.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:19:52', '2014-02-20 15:19:52', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4783, 1, '2014-02-20 15:22:44', '2014-02-20 15:22:44', '[separator top="-55"]\r\n\r\n[fullwidth bordersize="0"]\r\n\r\n \r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40" style="shadow"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]', 'Inicio', '', 'inherit', 'open', 'open', '', '4705-revision-v1', '', '', '2014-02-20 15:22:44', '2014-02-20 15:22:44', '', 4705, 'http://127.0.0.1:4001/wordpress/4705-revision-v1/', 0, 'revision', '', 0), +(4785, 1, '2014-02-20 15:28:37', '2014-02-20 15:28:37', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[title size="2"]Our Valuable Team Members[/title]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo. [/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/portfolio_61.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:28:37', '2014-02-20 15:28:37', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4784, 1, '2014-02-20 15:27:12', '2014-02-20 15:27:12', '[separator top="-55" style="shadow"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[title size="2"]Our Valuable Team Members[/title]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo. [/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/portfolio_61.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:27:12', '2014-02-20 15:27:12', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4787, 1, '2014-02-20 15:30:54', '2014-02-20 15:30:54', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:30:54', '2014-02-20 15:30:54', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4786, 1, '2014-02-20 15:29:41', '2014-02-20 15:29:41', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Nuestra misión[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[fullwidth bordersize="0"]\r\n[title size="2"]Our Valuable Team Members[/title]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo. [/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/portfolio_61.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\n[person name="John Doe" picture="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg" title="Developer" facebook="http://facebook.com" twitter="http://twitter.com" linkedin="http://linkedin.com" dribbble="http://dribbble.com"]Redantium, totam rem aperiam, eaque ipsa qu ab illo un inventore veritatis et quasi architectos beatae vitae dicta sunt est explicabo.[/person]\r\n[/one_fourth]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:29:41', '2014-02-20 15:29:41', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4788, 1, '2014-02-20 15:32:49', '2014-02-20 15:32:49', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="Leer más" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:32:49', '2014-02-20 15:32:49', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4791, 1, '2014-02-20 15:49:05', '2014-02-20 15:49:05', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="25"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:49:05', '2014-02-20 15:49:05', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4792, 1, '2014-02-20 15:49:23', '2014-02-20 15:49:23', '[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:49:23', '2014-02-20 15:49:23', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4794, 1, '2014-02-20 15:52:41', '2014-02-20 15:52:41', '\r\n[separator top="-55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:52:41', '2014-02-20 15:52:41', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4797, 1, '2014-02-20 15:55:28', '2014-02-20 15:55:28', '[separator top="-55"]\r\n\r\n\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="40px" paddingBottom="40px"]\r\n
\r\n

Amazing Product: Get It Before Anyone Else!

\r\n

This is where your amazing product promotion text can go so your viewers can read about how awesome it is!

\r\n
\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:55:28', '2014-02-20 15:55:28', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4796, 1, '2014-02-20 15:54:35', '2014-02-20 15:54:35', '[separator top="-55"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="40px" paddingBottom="40px"]\r\n

Amazing Product: Get It Before Anyone Else!

\r\n

This is where your amazing product promotion text can go so your viewers can read about how awesome it is!

\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:54:35', '2014-02-20 15:54:35', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4795, 1, '2014-02-20 15:54:06', '2014-02-20 15:54:06', '[separator top="-55"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="40px" paddingBottom="40px"]\r\n

Amazing Product: Get It Before Anyone Else!

\r\n

This is where your amazing product promotion text can go so your viewers can read about how awesome it is!

\r\n[separator top="20" style="none"]\r\nlightbox title\r\n[/fullwidth]\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/background_photo1.jpg" backgroundrepeat="no-repeat" backgroundposition="center -570px" backgroundattachment="" bordersize="1px" bordercolor="#e5e4e4" paddingTop="25px" paddingBottom="50px"]\r\n

Cría y alta competición de caballos

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:54:06', '2014-02-20 15:54:06', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4798, 1, '2014-02-20 15:55:49', '2014-02-20 15:55:49', '\r\n[separator top="-55"]\r\n\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="40px" paddingBottom="40px"]\r\n
\r\n

Amazing Product: Get It Before Anyone Else!

\r\n

This is where your amazing product promotion text can go so your viewers can read about how awesome it is!

\r\n
\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:55:49', '2014-02-20 15:55:49', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4799, 1, '2014-02-20 15:56:15', '2014-02-20 15:56:15', '\r\n[separator top="-55" style="none"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="40px" paddingBottom="40px"]\r\n
\r\n

Amazing Product: Get It Before Anyone Else!

\r\n

This is where your amazing product promotion text can go so your viewers can read about how awesome it is!

\r\n
\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:56:15', '2014-02-20 15:56:15', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4800, 1, '2014-02-20 15:56:55', '2014-02-20 15:56:55', '[separator top="-55" style="none"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="40px" paddingBottom="40px"]\r\n
\r\n

Amazing Product: Get It Before Anyone Else!

\r\n

This is where your amazing product promotion text can go so your viewers can read about how awesome it is!

\r\n
\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:56:55', '2014-02-20 15:56:55', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4804, 1, '2014-02-20 15:59:51', '2014-02-20 15:59:51', '[separator top="-55" style="none"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="20px" paddingBottom="30px"]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:59:51', '2014-02-20 15:59:51', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4802, 1, '2014-02-20 15:57:36', '2014-02-20 15:57:36', '[separator top="-55" style="none"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="40px" paddingBottom="40px"]\r\n
\r\n

Amazing Product: Get It Before Anyone Else!

\r\n

This is where your amazing product promotion text can go so your viewers can read about how awesome it is!

\r\n
\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:57:36', '2014-02-20 15:57:36', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4803, 1, '2014-02-20 15:58:18', '2014-02-20 15:58:18', '[separator top="-55" style="none"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="20px" paddingBottom="30px"]\r\n
\r\n

Amazing Product: Get It Before Anyone Else!

\r\n

This is where your amazing product promotion text can go so your viewers can read about how awesome it is!

\r\n
\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 15:58:18', '2014-02-20 15:58:18', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4809, 1, '2014-02-20 16:08:57', '2014-02-20 16:08:57', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="1px" bordercolor="#dadada" paddingTop="20px" paddingBottom="30px"]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 16:08:57', '2014-02-20 16:08:57', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4806, 1, '2014-02-20 16:02:10', '2014-02-20 16:02:10', '[separator top="-55" style="none"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="20px" paddingBottom="30px"]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 16:02:10', '2014-02-20 16:02:10', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4805, 1, '2014-02-20 16:00:12', '2014-02-20 16:00:12', '[separator top="-55" style="none"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="20px" paddingBottom="30px"]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 16:00:12', '2014-02-20 16:00:12', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4807, 1, '2014-02-20 16:02:40', '2014-02-20 16:02:40', '[separator top="-55" style="none"]\r\n[fullwidth backgroundcolor="" backgroundimage="http://theme-fusion.com/avada/wp-content/uploads/2013/05/page_bkgd3.jpg" backgroundrepeat="no-repeat" backgroundposition="top left" backgroundattachment="fixed" bordersize="1px" bordercolor="#dadada" paddingTop="20px" paddingBottom="30px"]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 16:02:40', '2014-02-20 16:02:40', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4808, 1, '2014-02-20 16:08:08', '2014-02-20 16:08:08', '', 'page_bkgd3', '', 'inherit', 'open', 'open', '', 'page_bkgd31', '', '', '2014-02-20 16:08:08', '2014-02-20 16:08:08', '', 7, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/page_bkgd31.jpg', 0, 'attachment', 'image/jpeg', 0), +(4810, 1, '2014-02-20 16:09:13', '2014-02-20 16:09:13', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="30px"]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="20" style="none"]\r\n[/fullwidth]\r\n\r\n\r\n\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 16:09:13', '2014-02-20 16:09:13', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4811, 1, '2014-02-20 16:09:37', '2014-02-20 16:09:37', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px"]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="10" style="shadow"]\r\n[/fullwidth]\r\n\r\n[separator top="55"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 16:09:37', '2014-02-20 16:09:37', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4812, 1, '2014-02-20 16:09:52', '2014-02-20 16:09:52', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px"]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="10" style="shadow"]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 16:09:52', '2014-02-20 16:09:52', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4814, 1, '2014-02-20 16:11:57', '2014-02-20 16:11:57', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px"]\r\n

Double R Group

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="10" style="shadow"]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 16:11:57', '2014-02-20 16:11:57', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(4813, 1, '2014-02-20 16:10:23', '2014-02-20 16:10:23', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px"]\r\n

Why to ride at The Equestrian Club?

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="10" style="shadow"]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="#fff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'open', 'open', '', '4623-revision-v1', '', '', '2014-02-20 16:10:23', '2014-02-20 16:10:23', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5032, 1, '2014-02-26 18:01:27', '2014-02-26 17:01:27', '[two_third last="no"]\r\n[title size="3"]Formulario de contacto[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title="false"]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="3"]Double R Group[/title]\r\n

[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] Calle de Almagro, 21, 28010 Madrid

\r\n

[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633

\r\n

[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com

\r\n

[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com

\r\n[/one_third]\r\n', 'Contact', '', 'inherit', 'closed', 'open', '', '5031-revision-v1', '', '', '2014-02-26 18:01:27', '2014-02-26 17:01:27', '', 5031, 'http://127.0.0.1:4001/wordpress/5031-revision-v1/', 0, 'revision', '', 0), +(4820, 1, '2014-02-20 16:34:28', '2014-02-20 16:34:28', '[two_third last="no"]\r\n[title size="2"]Formulario de contacto[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title="false"]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="2"]Double R Group[/title]\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] Calle de Almagro, 21, 28010 Madrid\r\n\r\n[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633\r\n\r\n[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com\r\n\r\n[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-20 16:34:28', '2014-02-20 16:34:28', '', 4671, 'http://127.0.0.1:4001/wordpress/4671-revision-v1/', 0, 'revision', '', 0), +(4821, 1, '2014-02-20 16:35:55', '2014-02-20 16:35:55', '[two_third last="no"]\r\n[title size="3"]Formulario de contacto[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title="false"]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="3"]Double R Group[/title]\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] Calle de Almagro, 21, 28010 Madrid\r\n\r\n[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633\r\n\r\n[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com\r\n\r\n[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-20 16:35:55', '2014-02-20 16:35:55', '', 4671, 'http://127.0.0.1:4001/wordpress/4671-revision-v1/', 0, 'revision', '', 0), +(4822, 1, '2014-02-20 16:36:16', '2014-02-20 16:36:16', '[two_third last="no"]\r\n[title size="3"]Formulario de contacto[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title="false"]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="2"]Double R Group[/title]\r\n[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] Calle de Almagro, 21, 28010 Madrid\r\n[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633\r\n[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com\r\n[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com\r\n\r\n \r\n\r\n[/one_third]\r\n\r\n ', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-20 16:36:16', '2014-02-20 16:36:16', '', 4671, 'http://127.0.0.1:4001/wordpress/4671-revision-v1/', 0, 'revision', '', 0), +(4823, 1, '2014-02-20 16:36:50', '2014-02-20 16:36:50', '[two_third last="no"]\r\n[title size="3"]Formulario de contacto[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title="false"]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="2"]Double R Group[/title]\r\n

[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] Calle de Almagro, 21, 28010 Madrid

\r\n

[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633

\r\n

[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com

\r\n

[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com

\r\n[/one_third]\r\n', 'Contacto', '', 'inherit', 'open', 'open', '', '4671-revision-v1', '', '', '2014-02-20 16:36:50', '2014-02-20 16:36:50', '', 4671, 'http://127.0.0.1:4001/wordpress/4671-revision-v1/', 0, 'revision', '', 0), +(4824, 1, '2014-02-20 16:40:12', '2014-02-20 16:40:12', '[separator top="-20"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Santaynez.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/03_bannerhome_allotjament_2.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/09_bannerhome_caballo_1.jpg[/slide][/slider]\r\n[separator top="-30" style="none"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="3"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="3"]Localización[/title]\r\n\r\nInstalaciones en la Comunidad de Madrid\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="3"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]', 'Instalaciones', '', 'publish', 'open', 'open', '', 'instalaciones', '', '', '2014-02-28 15:55:09', '2014-02-28 14:55:09', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=4824', 0, 'page', '', 0), +(4825, 1, '2014-02-20 16:40:12', '2014-02-20 16:40:12', '', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 16:40:12', '2014-02-20 16:40:12', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4826, 1, '2014-02-28 12:47:38', '2014-02-28 11:47:38', '[separator top="-20"]\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Santaynez.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/03_bannerhome_allotjament_2.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/09_bannerhome_caballo_1.jpg[/slide][/slider]\n[separator top="-30" style="none"]\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\n\n[separator top="50"]\n\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\n[two_third last="no"]\n[title size="3"]Dotaciones[/title]\n\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\n\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\n
    \n
  • Finca de más de treinta hectáreas.
  • \n
  • Pistas de trabajo y salto
  • \n
  • Pistas para dar cuerda
  • \n
  • Pistas de galope
  • \n
  • Caminadores
  • \n
  • Suelos de condiciones óptimas
  • \n
\n[/checklist]\n[/two_third]\n\n[one_third last="yes"]\n[title size="3"]Localización[/title]\n\nInstalaciones en la Comunidad de Madrid\n[/one_third]\n\n[separator top="15"]\n[title size="3"]Imágenes de las instalaciones[/title]\n\n[images lightbox="yes"]\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\n[/images]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-autosave-v1', '', '', '2014-02-28 12:47:38', '2014-02-28 11:47:38', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-autosave-v1/', 0, 'revision', '', 0), +(4827, 1, '2014-02-20 16:42:17', '2014-02-20 16:42:17', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px"]\r\n

Double R Group

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="10" style="shadow"]\r\n[/fullwidth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 16:42:17', '2014-02-20 16:42:17', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4828, 1, '2014-02-20 16:42:36', '2014-02-20 16:42:36', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px"]\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="10" style="shadow"]\r\n[/fullwidth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 16:42:36', '2014-02-20 16:42:36', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4851, 1, '2014-02-20 17:16:43', '2014-02-20 17:16:43', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Imágenes de las instalaciones/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:16:43', '2014-02-20 17:16:43', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4840, 1, '2014-02-20 17:14:37', '2014-02-20 17:14:37', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Images Of Our Workplace[/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:14:37', '2014-02-20 17:14:37', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4829, 1, '2014-02-20 16:44:38', '2014-02-20 16:44:38', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px"]\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="10" style="shadow"]\r\n[/fullwidth]\r\n\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n\r\n\r\n[two_third last="no"]\r\n[title size="2"]We Love To Work & We Love Where We Work[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui.\r\n\r\nRatione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla.\r\n\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Our Location[/title]\r\n\r\n\r\n

Located In Beautiful New York City

\r\n12345 Main Street, New York, NY 02781\r\nPhone: 1.800.555.6789\r\nWeb: www.yoursite.com\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Images Of Our Workplace[/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 16:44:38', '2014-02-20 16:44:38', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4830, 1, '2014-02-20 16:45:06', '2014-02-20 16:45:06', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px"]\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[/fullwidth]\r\n\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n\r\n\r\n[two_third last="no"]\r\n[title size="2"]We Love To Work & We Love Where We Work[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui.\r\n\r\nRatione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla.\r\n\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Our Location[/title]\r\n\r\n\r\n

Located In Beautiful New York City

\r\n12345 Main Street, New York, NY 02781\r\nPhone: 1.800.555.6789\r\nWeb: www.yoursite.com\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Images Of Our Workplace[/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 16:45:06', '2014-02-20 16:45:06', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4835, 1, '2014-02-20 17:06:23', '2014-02-20 17:06:23', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid, en Talavera de la Reina, está situada la Yeguada Campos. En una finca de treinta hectáreas desarrollamos las actividades de la yeguada: cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="5" style="none"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Nuestras instalaciones[/title]\r\nA cien kilómetros de Madrid, en Talavera de la Reina, está situada la Yeguada Campos. En una finca de treinta hectáreas desarrollamos las actividades de la yeguada: cría y entrenamiento de caballos para la alta competición.\r\n\r\nEl objetivo de la Yeguada Campos es disponer de un grupo de sementales dedicados a la cría y a la alta competición.\r\n\r\nLa finca está dividida en dos zonas: una dedicada a la cría y la otra dedicada al entrenamiento de los caballos.\r\n\r\nLa Yeguada Campos tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases: pistas de trabajo y salto con los mejores suelos, pistas para dar cuerda, caminadores, pistas de galope...\r\n\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Our Location[/title]\r\n\r\n\r\n

Located In Beautiful New York City

\r\n12345 Main Street, New York, NY 02781\r\nPhone: 1.800.555.6789\r\nWeb: www.yoursite.com\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Images Of Our Workplace[/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:06:23', '2014-02-20 17:06:23', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4831, 1, '2014-02-20 16:45:35', '2014-02-20 16:45:35', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px"]\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[/fullwidth]\r\n\r\n[separator top="5" style="none"]\r\n\r\n\r\n\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n\r\n\r\n\r\n\r\n[two_third last="no"]\r\n[title size="2"]We Love To Work & We Love Where We Work[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui.\r\n\r\nRatione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla.\r\n\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Our Location[/title]\r\n\r\n\r\n

Located In Beautiful New York City

\r\n12345 Main Street, New York, NY 02781\r\nPhone: 1.800.555.6789\r\nWeb: www.yoursite.com\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Images Of Our Workplace[/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 16:45:35', '2014-02-20 16:45:35', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4863, 1, '2014-02-20 18:27:21', '2014-02-20 18:27:21', '', '09_bannerhome_caballo_1', '', 'inherit', 'open', 'open', '', '09_bannerhome_caballo_1', '', '', '2014-02-20 18:27:21', '2014-02-20 18:27:21', '', 4824, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/09_bannerhome_caballo_1.jpg', 0, 'attachment', 'image/jpeg', 0), +(4833, 1, '2014-02-20 17:05:32', '2014-02-20 17:05:32', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px"]\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n\r\n\r\n[/fullwidth]\r\n\r\n[separator top="5" style="none"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Nuestras instalaciones[/title]\r\nA cien kilómetros de Madrid, en Talavera de la Reina, está situada la Yeguada Campos. En una finca de treinta hectáreas desarrollamos las actividades de la yeguada: cría y entrenamiento de caballos para la alta competición.\r\n\r\nEl objetivo de la Yeguada Campos es disponer de un grupo de sementales dedicados a la cría y a la alta competición.\r\n\r\nLa finca está dividida en dos zonas: una dedicada a la cría y la otra dedicada al entrenamiento de los caballos.\r\n\r\nLa Yeguada Campos tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases: pistas de trabajo y salto con los mejores suelos, pistas para dar cuerda, caminadores, pistas de galope...\r\n\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Our Location[/title]\r\n\r\n\r\n

Located In Beautiful New York City

\r\n12345 Main Street, New York, NY 02781\r\nPhone: 1.800.555.6789\r\nWeb: www.yoursite.com\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Images Of Our Workplace[/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:05:32', '2014-02-20 17:05:32', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4832, 1, '2014-02-20 17:04:43', '2014-02-20 17:04:43', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px"]\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n\r\n\r\n[/fullwidth]\r\n\r\n[separator top="5" style="none"]\r\n\r\n\r\n\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n\r\n\r\n\r\n\r\n[two_third last="no"]\r\n[title size="2"]We Love To Work & We Love Where We Work[/title]\r\nA cien kilómetros de Madrid, en Talavera de la Reina, está situada la Yeguada Campos. En una finca de treinta hectáreas desarrollamos las actividades de la yeguada: cría y entrenamiento de caballos para la alta competición.\r\n\r\nEl objetivo de la Yeguada Campos es disponer de un grupo de sementales dedicados a la cría y a la alta competición.\r\n\r\nLa finca está dividida en dos zonas: una dedicada a la cría y la otra dedicada al entrenamiento de los caballos.\r\n\r\nLa Yeguada Campos tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases: pistas de trabajo y salto con los mejores suelos, pistas para dar cuerda, caminadores, pistas de galope...\r\n\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Our Location[/title]\r\n\r\n\r\n

Located In Beautiful New York City

\r\n12345 Main Street, New York, NY 02781\r\nPhone: 1.800.555.6789\r\nWeb: www.yoursite.com\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Images Of Our Workplace[/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:04:43', '2014-02-20 17:04:43', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4834, 1, '2014-02-20 17:05:46', '2014-02-20 17:05:46', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n\r\n\r\n[/fullwidth]\r\n\r\n[separator top="5" style="none"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Nuestras instalaciones[/title]\r\nA cien kilómetros de Madrid, en Talavera de la Reina, está situada la Yeguada Campos. En una finca de treinta hectáreas desarrollamos las actividades de la yeguada: cría y entrenamiento de caballos para la alta competición.\r\n\r\nEl objetivo de la Yeguada Campos es disponer de un grupo de sementales dedicados a la cría y a la alta competición.\r\n\r\nLa finca está dividida en dos zonas: una dedicada a la cría y la otra dedicada al entrenamiento de los caballos.\r\n\r\nLa Yeguada Campos tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases: pistas de trabajo y salto con los mejores suelos, pistas para dar cuerda, caminadores, pistas de galope...\r\n\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Our Location[/title]\r\n\r\n\r\n

Located In Beautiful New York City

\r\n12345 Main Street, New York, NY 02781\r\nPhone: 1.800.555.6789\r\nWeb: www.yoursite.com\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Images Of Our Workplace[/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:05:46', '2014-02-20 17:05:46', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4839, 1, '2014-02-20 17:13:11', '2014-02-20 17:13:11', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Our Location[/title]\r\n\r\n\r\n

Located In Beautiful New York City

\r\n12345 Main Street, New York, NY 02781\r\nPhone: 1.800.555.6789\r\nWeb: www.yoursite.com\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Images Of Our Workplace[/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:13:11', '2014-02-20 17:13:11', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4836, 1, '2014-02-20 17:06:50', '2014-02-20 17:06:50', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid, en Talavera de la Reina, está situada la Yeguada Campos. En una finca de treinta hectáreas desarrollamos las actividades de la yeguada: cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="5" style="shadow"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Nuestras instalaciones[/title]\r\nA cien kilómetros de Madrid, en Talavera de la Reina, está situada la Yeguada Campos. En una finca de treinta hectáreas desarrollamos las actividades de la yeguada: cría y entrenamiento de caballos para la alta competición.\r\n\r\nEl objetivo de la Yeguada Campos es disponer de un grupo de sementales dedicados a la cría y a la alta competición.\r\n\r\nLa finca está dividida en dos zonas: una dedicada a la cría y la otra dedicada al entrenamiento de los caballos.\r\n\r\nLa Yeguada Campos tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases: pistas de trabajo y salto con los mejores suelos, pistas para dar cuerda, caminadores, pistas de galope...\r\n\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Our Location[/title]\r\n\r\n\r\n

Located In Beautiful New York City

\r\n12345 Main Street, New York, NY 02781\r\nPhone: 1.800.555.6789\r\nWeb: www.yoursite.com\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Images Of Our Workplace[/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:06:50', '2014-02-20 17:06:50', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4837, 1, '2014-02-20 17:07:33', '2014-02-20 17:07:33', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid, en Talavera de la Reina, está situada la Yeguada Campos. En una finca de treinta hectáreas desarrollamos las actividades de la yeguada: cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50" style="single"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Nuestras instalaciones[/title]\r\nA cien kilómetros de Madrid, en Talavera de la Reina, está situada la Yeguada Campos. En una finca de treinta hectáreas desarrollamos las actividades de la yeguada: cría y entrenamiento de caballos para la alta competición.\r\n\r\nEl objetivo de la Yeguada Campos es disponer de un grupo de sementales dedicados a la cría y a la alta competición.\r\n\r\nLa finca está dividida en dos zonas: una dedicada a la cría y la otra dedicada al entrenamiento de los caballos.\r\n\r\nLa Yeguada Campos tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases: pistas de trabajo y salto con los mejores suelos, pistas para dar cuerda, caminadores, pistas de galope...\r\n\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Our Location[/title]\r\n\r\n\r\n

Located In Beautiful New York City

\r\n12345 Main Street, New York, NY 02781\r\nPhone: 1.800.555.6789\r\nWeb: www.yoursite.com\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Images Of Our Workplace[/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:07:33', '2014-02-20 17:07:33', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4838, 1, '2014-02-20 17:07:49', '2014-02-20 17:07:49', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid, en Talavera de la Reina, está situada la Yeguada Campos. En una finca de treinta hectáreas desarrollamos las actividades de la yeguada: cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Nuestras instalaciones[/title]\r\nA cien kilómetros de Madrid, en Talavera de la Reina, está situada la Yeguada Campos. En una finca de treinta hectáreas desarrollamos las actividades de la yeguada: cría y entrenamiento de caballos para la alta competición.\r\n\r\nEl objetivo de la Yeguada Campos es disponer de un grupo de sementales dedicados a la cría y a la alta competición.\r\n\r\nLa finca está dividida en dos zonas: una dedicada a la cría y la otra dedicada al entrenamiento de los caballos.\r\n\r\nLa Yeguada Campos tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases: pistas de trabajo y salto con los mejores suelos, pistas para dar cuerda, caminadores, pistas de galope...\r\n\r\n Avada is the perfect choice for your business. It''s loaded with features, options & page layouts. Plus we have the best customer support around, but dont take our word for it, ask any of our 15,000+ users!\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Our Location[/title]\r\n\r\n\r\n

Located In Beautiful New York City

\r\n12345 Main Street, New York, NY 02781\r\nPhone: 1.800.555.6789\r\nWeb: www.yoursite.com\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Images Of Our Workplace[/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:07:49', '2014-02-20 17:07:49', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4841, 1, '2014-02-20 17:14:56', '2014-02-20 17:14:56', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n\r\n\r\n[separator top="15"]\r\n[title size="2"]Imágenes de las instalaciones/title]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:14:56', '2014-02-20 17:14:56', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4842, 1, '2014-02-20 17:15:20', '2014-02-20 17:15:20', '', '1', '', 'inherit', 'open', 'open', '', '1', '', '', '2014-02-20 17:15:20', '2014-02-20 17:15:20', '', 4824, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg', 0, 'attachment', 'image/jpeg', 0), +(4843, 1, '2014-02-20 17:15:22', '2014-02-20 17:15:22', '', '2', '', 'inherit', 'open', 'open', '', '2', '', '', '2014-02-20 17:15:22', '2014-02-20 17:15:22', '', 4824, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg', 0, 'attachment', 'image/jpeg', 0), +(4844, 1, '2014-02-20 17:15:25', '2014-02-20 17:15:25', '', '3', '', 'inherit', 'open', 'open', '', '3', '', '', '2014-02-20 17:15:25', '2014-02-20 17:15:25', '', 4824, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg', 0, 'attachment', 'image/jpeg', 0), +(4845, 1, '2014-02-20 17:15:27', '2014-02-20 17:15:27', '', '4', '', 'inherit', 'open', 'open', '', '4', '', '', '2014-02-20 17:15:27', '2014-02-20 17:15:27', '', 4824, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg', 0, 'attachment', 'image/jpeg', 0), +(4846, 1, '2014-02-20 17:15:29', '2014-02-20 17:15:29', '', '5', '', 'inherit', 'open', 'open', '', '5', '', '', '2014-02-20 17:15:29', '2014-02-20 17:15:29', '', 4824, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg', 0, 'attachment', 'image/jpeg', 0), +(4847, 1, '2014-02-20 17:15:32', '2014-02-20 17:15:32', '', '6', '', 'inherit', 'open', 'open', '', '6', '', '', '2014-02-20 17:15:32', '2014-02-20 17:15:32', '', 4824, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg', 0, 'attachment', 'image/jpeg', 0), +(4848, 1, '2014-02-20 17:15:34', '2014-02-20 17:15:34', '', '7', '', 'inherit', 'open', 'open', '', '7', '', '', '2014-02-20 17:15:34', '2014-02-20 17:15:34', '', 4824, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg', 0, 'attachment', 'image/jpeg', 0), +(4849, 1, '2014-02-20 17:15:36', '2014-02-20 17:15:36', '', '8', '', 'inherit', 'open', 'open', '', '8', '', '', '2014-02-20 17:15:36', '2014-02-20 17:15:36', '', 4824, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/8.jpg', 0, 'attachment', 'image/jpeg', 0), +(4850, 1, '2014-02-20 17:15:38', '2014-02-20 17:15:38', '', '9', '', 'inherit', 'open', 'open', '', '9', '', '', '2014-02-20 17:15:38', '2014-02-20 17:15:38', '', 4824, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/9.jpg', 0, 'attachment', 'image/jpeg', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4852, 1, '2014-02-20 17:18:16', '2014-02-20 17:18:16', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="2"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[/images]\r\n\r\n[separator top="15"]\r\n\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:18:16', '2014-02-20 17:18:16', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4854, 1, '2014-02-20 17:19:30', '2014-02-20 17:19:30', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="2"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]\r\n\r\n', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:19:30', '2014-02-20 17:19:30', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4853, 1, '2014-02-20 17:19:01', '2014-02-20 17:19:01', '[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="2"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]\r\n\r\n[separator top="15"]\r\n\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="no"]\r\nimage 1\r\n[/one_fourth]\r\n[one_fourth last="yes"]\r\nimage 1\r\n[/one_fourth]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:19:01', '2014-02-20 17:19:01', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4862, 1, '2014-02-20 18:27:08', '2014-02-20 18:27:08', '', '03_bannerhome_allotjament_2', '', 'inherit', 'open', 'open', '', '03_bannerhome_allotjament_2', '', '', '2014-02-20 18:27:08', '2014-02-20 18:27:08', '', 4824, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/03_bannerhome_allotjament_2.jpg', 0, 'attachment', 'image/jpeg', 0), +(4857, 1, '2014-02-20 17:54:08', '2014-02-20 17:54:08', '[separator top="-20"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0" paddingBottom="0"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="2"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:54:08', '2014-02-20 17:54:08', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4855, 1, '2014-02-20 17:53:36', '2014-02-20 17:53:36', '[separator top="-50"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="2"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:53:36', '2014-02-20 17:53:36', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4856, 1, '2014-02-20 17:53:50', '2014-02-20 17:53:50', '[separator top="-20"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\n[fullwidth bordersize="0" paddingTop="0px" paddingBottom="20px"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="2"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:53:50', '2014-02-20 17:53:50', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4859, 1, '2014-02-20 17:55:06', '2014-02-20 17:55:06', '[separator top="-20"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-30" style="none"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="2"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:55:06', '2014-02-20 17:55:06', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4858, 1, '2014-02-20 17:54:30', '2014-02-20 17:54:30', '[separator top="-20"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_51.jpg[/slide][/slider]\r\n[separator top="-10" style="none"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n[fullwidth bordersize="0" paddingTop="0" paddingBottom="0"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n[/fullwidth]\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="2"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 17:54:30', '2014-02-20 17:54:30', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4860, 1, '2014-02-20 18:06:10', '2014-02-20 18:06:10', '[separator top="-20"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg[/slide][/slider]\r\n[separator top="-30" style="none"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="2"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 18:06:10', '2014-02-20 18:06:10', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4861, 1, '2014-02-20 18:25:47', '2014-02-20 18:25:47', '', 'Santaynez', '', 'inherit', 'open', 'open', '', 'santaynez', '', '', '2014-02-20 18:25:47', '2014-02-20 18:25:47', '', 4824, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Santaynez.jpg', 0, 'attachment', 'image/jpeg', 0), +(4864, 1, '2014-02-20 18:28:01', '2014-02-20 18:28:01', '[separator top="-20"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Santaynez.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/03_bannerhome_allotjament_2.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/09_bannerhome_caballo_1.jpg[/slide][/slider]\r\n[separator top="-30" style="none"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="2"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="2"]Localización[/title]\r\n\r\n\r\n

Instalaciones en la Comunidad de Madrid

\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="2"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]', 'Instalaciones', '', 'inherit', 'open', 'open', '', '4824-revision-v1', '', '', '2014-02-20 18:28:01', '2014-02-20 18:28:01', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(4867, 1, '2014-02-21 10:29:02', '2014-02-21 10:29:02', ' ', '', '', 'publish', 'open', 'open', '', '4867', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4867', 34, 'nav_menu_item', '', 0), +(4869, 1, '2014-02-24 08:54:16', '2014-02-24 08:54:16', '

Westphalian - dark brown - 2006 - 16.2 hands

\r\n\r\nAge: 03/06/2006\r\nGender: Colt\r\nColor: dark brown\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Black Jack', 'Westphalian - dark brown - 2006 - 16.2 hands', 'trash', 'closed', 'closed', '', 'black-jack', '', '', '2014-02-26 19:28:39', '2014-02-26 18:28:39', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=avada_portfolio&p=4869', 0, 'avada_portfolio', '', 0), +(4870, 1, '2014-02-24 08:54:16', '2014-02-24 08:54:16', '', 'Baloutelli', '', 'inherit', 'open', 'open', '', '4869-revision-v1', '', '', '2014-02-24 08:54:16', '2014-02-24 08:54:16', '', 4869, 'http://127.0.0.1:4001/wordpress/4869-revision-v1/', 0, 'revision', '', 0), +(4871, 1, '2014-02-24 08:56:10', '2014-02-24 08:56:10', 'Westphalian – bay – 2011 - 16.3 hands', 'Baloutelli', '', 'inherit', 'open', 'open', '', '4869-revision-v1', '', '', '2014-02-24 08:56:10', '2014-02-24 08:56:10', '', 4869, 'http://127.0.0.1:4001/wordpress/4869-revision-v1/', 0, 'revision', '', 0), +(4872, 1, '2014-02-24 10:28:37', '2014-02-24 10:28:37', 'Westphalian - dark brown - 2006 - 16.2 hands\n\nAge: 03/06/2006\nGender: Colt\nColor: dark brown\nBreeder: Thomas Schindler, Fautenbach, Germany\n\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \nOther Verbands on request!\n\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\n\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\n\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\n\n\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \n\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \n\n[title size="3"]Progeny[/title]\n\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \n\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \n\n[title size="3"]Pedigree[/title]\n\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\n\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\n\nThe dam’s sire Weinberg is deemed very versatile sire. He is known for the Olympic dressage winning Goldstern/Klaus Balkenhol and the world class show jumpers Wisby D/Ulrich Meyer zu Bexten, Wum/Kurt Gravemeier and Warren NRW/Lutz Gripshöver.\n\nGranddam Pretty Woman produced four horses that mastered courses with international dimensions: Akadia BT (by Aurelio I), Caesario‘s Pretty Woman (by Caesario), Comtesse (by Cantonius) and Akazia (by Argentinus). The latter is also the dam of a licensed stallion named Florentino (by Feuerglanz).\n\nIn his day, Pilot was the youngest millionaire when it comes to offspring earnings. Among his most significant offspring are the team Olympic winner of Seoul/COR, Pedro/Wolfgang Brinkmann, the team World Champion of Den Haag/NED, P.S. Priamos/Dirk Hafemeister, and of Rome/ITA, P.S. Priamos/Ludger Beerbaum, Pialotta/Edwina Alexander/AUS who took fourth place individually in the World Championships of Aachen/GER, and the Swiss Champion, M&C Pirol/Leslie McNaught/SUI.\n\nThe highly decorated dam line is also the origin of the advanced (S) level show jumpers Pamina (by Parcours), Lucky (by Lapaz L), Lazarillo (by La Poco), Couleur Contango v HD (by Contango), Contina (by Casparino) and What’s Up H.D. (by Walzertakt).', 'Black Jack', '', 'inherit', 'open', 'open', '', '4869-autosave-v1', '', '', '2014-02-24 10:28:37', '2014-02-24 10:28:37', '', 4869, 'http://127.0.0.1:4001/wordpress/4869-autosave-v1/', 0, 'revision', '', 0), +(4873, 1, '2014-02-24 08:57:39', '2014-02-24 08:57:39', 'Westphalian – bay – 2011 - 16.3 hands\r\n\r\nBreeder: Gestüt Gut Neuenhof, Nideggen\r\n\r\nApproved for Westphalia, OS. Other Verbands upon request!\r\n\r\nInsemination fee: 400 €* + In-foal fee: 400 €* (fresh + frozen semen)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\n\r\nAt the 2013 Westphalian licensing in Münster-Handorf, Baloutelli demonstrated an ability to jump that you seldom see in this form. It wasn’t just the exemplary sequence of his jumping that was so impressive but also his noteworthy ambition combined with the necessary caution and a cool head. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\nThe dam’s sire Weinberg is deemed very versatile sire. He is known for the Olympic dressage winning Goldstern/Klaus Balkenhol and the world class show jumpers Wisby D/Ulrich Meyer zu Bexten, Wum/Kurt Gravemeier and Warren NRW/Lutz Gripshöver.\r\n\r\nGranddam Pretty Woman produced four horses that mastered courses with international dimensions: Akadia BT (by Aurelio I), Caesario‘s Pretty Woman (by Caesario), Comtesse (by Cantonius) and Akazia (by Argentinus). The latter is also the dam of a licensed stallion named Florentino (by Feuerglanz).\r\n\r\nIn his day, Pilot was the youngest millionaire when it comes to offspring earnings. Among his most significant offspring are the team Olympic winner of Seoul/COR, Pedro/Wolfgang Brinkmann, the team World Champion of Den Haag/NED, P.S. Priamos/Dirk Hafemeister, and of Rome/ITA, P.S. Priamos/Ludger Beerbaum, Pialotta/Edwina Alexander/AUS who took fourth place individually in the World Championships of Aachen/GER, and the Swiss Champion, M&C Pirol/Leslie McNaught/SUI.\r\n\r\nThe highly decorated dam line is also the origin of the advanced (S) level show jumpers Pamina (by Parcours), Lucky (by Lapaz L), Lazarillo (by La Poco), Couleur Contango v HD (by Contango), Contina (by Casparino) and What’s Up H.D. (by Walzertakt).', 'Baloutelli', '', 'inherit', 'open', 'open', '', '4869-revision-v1', '', '', '2014-02-24 08:57:39', '2014-02-24 08:57:39', '', 4869, 'http://127.0.0.1:4001/wordpress/4869-revision-v1/', 0, 'revision', '', 0), +(4874, 1, '2014-02-24 08:58:11', '2014-02-24 08:58:11', 'Westphalian – bay – 2011 - 16.3 hands\r\n\r\nBreeder: Gestüt Gut Neuenhof, Nideggen\r\n\r\nApproved for Westphalia, OS. Other Verbands upon request!\r\n\r\nInsemination fee: 400 €* + In-foal fee: 400 €* (fresh + frozen semen)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\n\r\nAt the 2013 Westphalian licensing in Münster-Handorf, Baloutelli demonstrated an ability to jump that you seldom see in this form. It wasn’t just the exemplary sequence of his jumping that was so impressive but also his noteworthy ambition combined with the necessary caution and a cool head. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\nThe dam’s sire Weinberg is deemed very versatile sire. He is known for the Olympic dressage winning Goldstern/Klaus Balkenhol and the world class show jumpers Wisby D/Ulrich Meyer zu Bexten, Wum/Kurt Gravemeier and Warren NRW/Lutz Gripshöver.\r\n\r\nGranddam Pretty Woman produced four horses that mastered courses with international dimensions: Akadia BT (by Aurelio I), Caesario‘s Pretty Woman (by Caesario), Comtesse (by Cantonius) and Akazia (by Argentinus). The latter is also the dam of a licensed stallion named Florentino (by Feuerglanz).\r\n\r\nIn his day, Pilot was the youngest millionaire when it comes to offspring earnings. Among his most significant offspring are the team Olympic winner of Seoul/COR, Pedro/Wolfgang Brinkmann, the team World Champion of Den Haag/NED, P.S. Priamos/Dirk Hafemeister, and of Rome/ITA, P.S. Priamos/Ludger Beerbaum, Pialotta/Edwina Alexander/AUS who took fourth place individually in the World Championships of Aachen/GER, and the Swiss Champion, M&C Pirol/Leslie McNaught/SUI.\r\n\r\nThe highly decorated dam line is also the origin of the advanced (S) level show jumpers Pamina (by Parcours), Lucky (by Lapaz L), Lazarillo (by La Poco), Couleur Contango v HD (by Contango), Contina (by Casparino) and What’s Up H.D. (by Walzertakt).', 'Black Jack', '', 'inherit', 'open', 'open', '', '4869-revision-v1', '', '', '2014-02-24 08:58:11', '2014-02-24 08:58:11', '', 4869, 'http://127.0.0.1:4001/wordpress/4869-revision-v1/', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4875, 1, '2014-02-24 08:58:37', '2014-02-24 08:58:37', 'Westphalian - dark brown - 2006 - 16.2 hands\r\n\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\nThe dam’s sire Weinberg is deemed very versatile sire. He is known for the Olympic dressage winning Goldstern/Klaus Balkenhol and the world class show jumpers Wisby D/Ulrich Meyer zu Bexten, Wum/Kurt Gravemeier and Warren NRW/Lutz Gripshöver.\r\n\r\nGranddam Pretty Woman produced four horses that mastered courses with international dimensions: Akadia BT (by Aurelio I), Caesario‘s Pretty Woman (by Caesario), Comtesse (by Cantonius) and Akazia (by Argentinus). The latter is also the dam of a licensed stallion named Florentino (by Feuerglanz).\r\n\r\nIn his day, Pilot was the youngest millionaire when it comes to offspring earnings. Among his most significant offspring are the team Olympic winner of Seoul/COR, Pedro/Wolfgang Brinkmann, the team World Champion of Den Haag/NED, P.S. Priamos/Dirk Hafemeister, and of Rome/ITA, P.S. Priamos/Ludger Beerbaum, Pialotta/Edwina Alexander/AUS who took fourth place individually in the World Championships of Aachen/GER, and the Swiss Champion, M&C Pirol/Leslie McNaught/SUI.\r\n\r\nThe highly decorated dam line is also the origin of the advanced (S) level show jumpers Pamina (by Parcours), Lucky (by Lapaz L), Lazarillo (by La Poco), Couleur Contango v HD (by Contango), Contina (by Casparino) and What’s Up H.D. (by Walzertakt).', 'Black Jack', '', 'inherit', 'open', 'open', '', '4869-revision-v1', '', '', '2014-02-24 08:58:37', '2014-02-24 08:58:37', '', 4869, 'http://127.0.0.1:4001/wordpress/4869-revision-v1/', 0, 'revision', '', 0), +(4876, 1, '2014-02-24 09:33:23', '2014-02-24 09:33:23', '', 'BJ_Mauer_Ausschnitt_02', '', 'inherit', 'closed', 'open', '', 'bj_mauer_ausschnitt_02', '', '', '2014-02-24 09:33:23', '2014-02-24 09:33:23', '', 4869, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/BJ_Mauer_Ausschnitt_02.jpg', 0, 'attachment', 'image/jpeg', 0), +(4877, 1, '2014-02-24 09:33:31', '2014-02-24 09:33:31', '', 'Black_Jack_2012_Portrait_Hagemeister_08', '', 'inherit', 'closed', 'open', '', 'black_jack_2012_portrait_hagemeister_08', '', '', '2014-02-24 09:33:31', '2014-02-24 09:33:31', '', 4869, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Black_Jack_2012_Portrait_Hagemeister_08.jpg', 0, 'attachment', 'image/jpeg', 0), +(4878, 1, '2014-02-24 09:33:53', '2014-02-24 09:33:53', '', 'NRW Hauptkörung 2008', '', 'inherit', 'closed', 'open', '', 'nrw-hauptkorung-2008', '', '', '2014-02-24 09:33:53', '2014-02-24 09:33:53', '', 4869, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Black_Jack_Freispringen_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4879, 1, '2014-02-24 09:34:03', '2014-02-24 09:34:03', '', 'Black_Jack_Gelaende_1a_klein_01', '', 'inherit', 'closed', 'open', '', 'black_jack_gelaende_1a_klein_01', '', '', '2014-02-24 09:34:03', '2014-02-24 09:34:03', '', 4869, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Black_Jack_Gelaende_1a_klein_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4880, 1, '2014-02-24 09:34:05', '2014-02-24 09:34:05', '', 'Black_Jack_Riesenbeck_Hagemeister_01', '', 'inherit', 'closed', 'open', '', 'black_jack_riesenbeck_hagemeister_01', '', '', '2014-02-24 09:34:05', '2014-02-24 09:34:05', '', 4869, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Black_Jack_Riesenbeck_Hagemeister_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4881, 1, '2014-02-24 09:34:25', '2014-02-24 09:34:25', '', 'Black_Jack_Seite_01', '', 'inherit', 'closed', 'open', '', 'black_jack_seite_01', '', '', '2014-02-24 09:34:25', '2014-02-24 09:34:25', '', 4869, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Black_Jack_Seite_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4882, 1, '2014-02-24 09:34:27', '2014-02-24 09:34:27', '', 'Black_Jack_Standbild_2011_V_Hagemeister_01', '', 'inherit', 'closed', 'open', '', 'black_jack_standbild_2011_v_hagemeister_01', '', '', '2014-02-24 09:34:27', '2014-02-24 09:34:27', '', 4869, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Black_Jack_Standbild_2011_V_Hagemeister_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4883, 1, '2014-02-24 09:34:55', '2014-02-24 09:34:55', '', 'Black_Jack_Turnier_2011_2_Ausschnitt_01', '', 'inherit', 'closed', 'open', '', 'black_jack_turnier_2011_2_ausschnitt_01', '', '', '2014-02-24 09:34:55', '2014-02-24 09:34:55', '', 4869, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Black_Jack_Turnier_2011_2_Ausschnitt_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4884, 1, '2014-02-24 09:35:04', '2014-02-24 09:35:04', '', 'BlackJack_K1G9469_Recki_01', '', 'inherit', 'closed', 'open', '', 'blackjack_k1g9469_recki_01', '', '', '2014-02-24 09:35:04', '2014-02-24 09:35:04', '', 4869, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/BlackJack_K1G9469_Recki_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4885, 1, '2014-02-24 10:23:34', '2014-02-24 10:23:34', 'Westphalian - dark brown - 2006 - 16.2 hands\r\n\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\nThe dam’s sire Weinberg is deemed very versatile sire. He is known for the Olympic dressage winning Goldstern/Klaus Balkenhol and the world class show jumpers Wisby D/Ulrich Meyer zu Bexten, Wum/Kurt Gravemeier and Warren NRW/Lutz Gripshöver.\r\n\r\nGranddam Pretty Woman produced four horses that mastered courses with international dimensions: Akadia BT (by Aurelio I), Caesario‘s Pretty Woman (by Caesario), Comtesse (by Cantonius) and Akazia (by Argentinus). The latter is also the dam of a licensed stallion named Florentino (by Feuerglanz).\r\n\r\nIn his day, Pilot was the youngest millionaire when it comes to offspring earnings. Among his most significant offspring are the team Olympic winner of Seoul/COR, Pedro/Wolfgang Brinkmann, the team World Champion of Den Haag/NED, P.S. Priamos/Dirk Hafemeister, and of Rome/ITA, P.S. Priamos/Ludger Beerbaum, Pialotta/Edwina Alexander/AUS who took fourth place individually in the World Championships of Aachen/GER, and the Swiss Champion, M&C Pirol/Leslie McNaught/SUI.\r\n\r\nThe highly decorated dam line is also the origin of the advanced (S) level show jumpers Pamina (by Parcours), Lucky (by Lapaz L), Lazarillo (by La Poco), Couleur Contango v HD (by Contango), Contina (by Casparino) and What’s Up H.D. (by Walzertakt).', 'Black Jack', '', 'inherit', 'closed', 'open', '', '4869-revision-v1', '', '', '2014-02-24 10:23:34', '2014-02-24 10:23:34', '', 4869, 'http://127.0.0.1:4001/wordpress/4869-revision-v1/', 0, 'revision', '', 0), +(4886, 1, '2014-02-24 10:29:03', '2014-02-24 10:29:03', 'Westphalian - dark brown - 2006 - 16.2 hands\r\n\r\nAge: 03/06/2006\r\nGender: Colt\r\nColor: dark brown\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\nThe dam’s sire Weinberg is deemed very versatile sire. He is known for the Olympic dressage winning Goldstern/Klaus Balkenhol and the world class show jumpers Wisby D/Ulrich Meyer zu Bexten, Wum/Kurt Gravemeier and Warren NRW/Lutz Gripshöver.\r\n\r\nGranddam Pretty Woman produced four horses that mastered courses with international dimensions: Akadia BT (by Aurelio I), Caesario‘s Pretty Woman (by Caesario), Comtesse (by Cantonius) and Akazia (by Argentinus). The latter is also the dam of a licensed stallion named Florentino (by Feuerglanz).\r\n\r\nIn his day, Pilot was the youngest millionaire when it comes to offspring earnings. Among his most significant offspring are the team Olympic winner of Seoul/COR, Pedro/Wolfgang Brinkmann, the team World Champion of Den Haag/NED, P.S. Priamos/Dirk Hafemeister, and of Rome/ITA, P.S. Priamos/Ludger Beerbaum, Pialotta/Edwina Alexander/AUS who took fourth place individually in the World Championships of Aachen/GER, and the Swiss Champion, M&C Pirol/Leslie McNaught/SUI.\r\n\r\nThe highly decorated dam line is also the origin of the advanced (S) level show jumpers Pamina (by Parcours), Lucky (by Lapaz L), Lazarillo (by La Poco), Couleur Contango v HD (by Contango), Contina (by Casparino) and What’s Up H.D. (by Walzertakt).', 'Black Jack', '', 'inherit', 'closed', 'open', '', '4869-revision-v1', '', '', '2014-02-24 10:29:03', '2014-02-24 10:29:03', '', 4869, 'http://127.0.0.1:4001/wordpress/4869-revision-v1/', 0, 'revision', '', 0), +(4887, 1, '2014-02-24 10:46:22', '2014-02-24 10:46:22', '

Holsteiner - Line 4705 - bay - 2003 - 16.3 ½ hands

\r\nBreeder: Peter Böge, Schönhorst, Germany\r\n\r\nApproved for Hanover, Holstein, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.as well as Denmark, Sweden and France.\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\nCarrico has now become firmly established in upper level, international show jumping after placing in Dortmund, Hagen a.T.W., Chantilly/FRA, Münster, Paderborn and Neumünster under Philipp Weishaupt and Henrik von Eckermann/SWE.\r\n\r\nAwarded a premium in 2005 in Neumünster, Carrico then took his stallion performance test in Redefin where he won the jumping as well as the dressage index, finishing first overall. In 2008 he won a qualifier at the Bundeschampionat with a 9.5 and in 2009 he placed in the Final for six-year old show jumpers in Warendorf. At the age of just seven, he won his first ribbons in advanced level classes.\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nCarrico passes on his outstanding overall quality. His foals qualified for the German Foal Championships in Lienen again in 2012. A daughter named Cashmere Touch proved her ability to jump at the German Elite Broodmare Championships. Four sons have been licensed so far and his offspring in sport win tests for youngsters in the corresponding age classes. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Catoki, who has been stationed in Riesenbeck for a long time, has won numerous World Cup and Grand Prix competitions. \r\n\r\nHis dam Kapitale is also the dam of the advanced (S) level show jumpers Coldheart (by Chambertin) and Catokina (by Catoki).\r\n\r\nCapitol II, Lord, Calypso II and Meteor xx, all outstanding performance sires, follow in his pedigree. \r\n\r\nThe granddam Frühlingsfee is the dam of the licensed stallion Casino van de Helle (by Cassini I) and an advanced (S) level show jumper named Corrados (by Corrado I).\r\n\r\nLine 4705, forever linked to the Gerken breeding farm, is also the origin of the licensed stallions Chalan (by Cambridge), Chandor (by Cor de la Bryère), Chateau (by Cambridge), Codec (by Chambertin), Conoglio (by Contender), Larso (by Liostro), Levantos I and II (both by Liostro), Orleandro (by Oglio xx) and Rocadero (by Ronald) as well as many top, international horses. \r\n\r\n\r\n', 'Carrico', '', 'trash', 'closed', 'closed', '', 'carrico', '', '', '2014-02-26 19:28:39', '2014-02-26 18:28:39', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=avada_portfolio&p=4887', 0, 'avada_portfolio', '', 0), +(4888, 1, '2014-02-24 10:45:11', '2014-02-24 10:45:11', '', 'Carrico_Portrait_2012_Hagemeister_07', '', 'inherit', 'closed', 'open', '', 'carrico_portrait_2012_hagemeister_07', '', '', '2014-02-24 10:45:11', '2014-02-24 10:45:11', '', 4887, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Carrico_Portrait_2012_Hagemeister_07.jpg', 0, 'attachment', 'image/jpeg', 0), +(4889, 1, '2014-02-24 10:46:22', '2014-02-24 10:46:22', 'Holsteiner - Line 4705 - bay - 2003 - 16.3 ½ hands \r\nBreeder: Peter Böge, Schönhorst, Germany\r\n\r\nApproved for Hanover, Holstein, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.as well as Denmark, Sweden and France.\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\nCarrico has now become firmly established in upper level, international show jumping after placing in Dortmund, Hagen a.T.W., Chantilly/FRA, Münster, Paderborn and Neumünster under Philipp Weishaupt and Henrik von Eckermann/SWE.\r\n\r\nAwarded a premium in 2005 in Neumünster, Carrico then took his stallion performance test in Redefin where he won the jumping as well as the dressage index, finishing first overall. In 2008 he won a qualifier at the Bundeschampionat with a 9.5 and in 2009 he placed in the Final for six-year old show jumpers in Warendorf. At the age of just seven, he won his first ribbons in advanced level classes.\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nCarrico passes on his outstanding overall quality. His foals qualified for the German Foal Championships in Lienen again in 2012. A daughter named Cashmere Touch proved her ability to jump at the German Elite Broodmare Championships. Four sons have been licensed so far and his offspring in sport win tests for youngsters in the corresponding age classes. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Catoki, who has been stationed in Riesenbeck for a long time, has won numerous World Cup and Grand Prix competitions. \r\n\r\nHis dam Kapitale is also the dam of the advanced (S) level show jumpers Coldheart (by Chambertin) and Catokina (by Catoki).\r\n\r\nCapitol II, Lord, Calypso II and Meteor xx, all outstanding performance sires, follow in his pedigree. \r\n\r\nThe granddam Frühlingsfee is the dam of the licensed stallion Casino van de Helle (by Cassini I) and an advanced (S) level show jumper named Corrados (by Corrado I).\r\n\r\nLine 4705, forever linked to the Gerken breeding farm, is also the origin of the licensed stallions Chalan (by Cambridge), Chandor (by Cor de la Bryère), Chateau (by Cambridge), Codec (by Chambertin), Conoglio (by Contender), Larso (by Liostro), Levantos I and II (both by Liostro), Orleandro (by Oglio xx) and Rocadero (by Ronald) as well as many top, international horses. \r\n\r\n\r\n', 'Carrico', '', 'inherit', 'closed', 'open', '', '4887-revision-v1', '', '', '2014-02-24 10:46:22', '2014-02-24 10:46:22', '', 4887, 'http://127.0.0.1:4001/wordpress/4887-revision-v1/', 0, 'revision', '', 0), +(4890, 1, '2014-02-24 10:48:26', '2014-02-24 10:48:26', 'Holsteiner - Line 4705 - bay - 2003 - 16.3 ½ hands \nBreeder: Peter Böge, Schönhorst, Germany\n\nApproved for Hanover, Holstein, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.as well as Denmark, Sweden and France.\n\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\n\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\n\nCarrico has now become firmly established in upper level, international show jumping after placing in Dortmund, Hagen a.T.W., Chantilly/FRA, Münster, Paderborn and Neumünster under Philipp Weishaupt and Henrik von Eckermann/SWE.\n\nAwarded a premium in 2005 in Neumünster, Carrico then took his stallion performance test in Redefin where he won the jumping as well as the dressage index, finishing first overall. In 2008 he won a qualifier at the Bundeschampionat with a 9.5 and in 2009 he placed in the Final for six-year old show jumpers in Warendorf. At the age of just seven, he won his first ribbons in advanced level classes.\n\n[title size="3"]Progeny[/title]\n\nCarrico passes on his outstanding overall quality. His foals qualified for the German Foal Championships in Lienen again in 2012. A daughter named Cashmere Touch proved her ability to jump at the German Elite Broodmare Championships. Four sons have been licensed so far and his offspring in sport win tests for youngsters in the corresponding age classes. \n\n[title size="3"]Pedigree[/title]\n\nHis sire Catoki, who has been stationed in Riesenbeck for a long time, has won numerous World Cup and Grand Prix competitions. \n\nHis dam Kapitale is also the dam of the advanced (S) level show jumpers Coldheart (by Chambertin) and Catokina (by Catoki).\n\nCapitol II, Lord, Calypso II and Meteor xx, all outstanding performance sires, follow in his pedigree. \n\nThe granddam Frühlingsfee is the dam of the licensed stallion Casino van de Helle (by Cassini I) and an advanced (S) level show jumper named Corrados (by Corrado I).\n\nLine 4705, forever linked to the Gerken breeding farm, is also the origin of the licensed stallions Chalan (by Cambridge), Chandor (by Cor de la Bryère), Chateau (by Cambridge), Codec (by Chambertin), Conoglio (by Contender), Larso (by Liostro), Levantos I and II (both by Liostro), Orleandro (by Oglio xx) and Rocadero (by Ronald) as well as many top, international horses. \n\n\n', 'Carrico', '', 'inherit', 'closed', 'open', '', '4887-autosave-v1', '', '', '2014-02-24 10:48:26', '2014-02-24 10:48:26', '', 4887, 'http://127.0.0.1:4001/wordpress/4887-autosave-v1/', 0, 'revision', '', 0), +(4891, 1, '2014-02-24 10:48:35', '2014-02-24 10:48:35', 'Holsteiner - Line 4705 - bay - 2003 - 16.3 ½ hands \r\nBreeder: Peter Böge, Schönhorst, Germany\r\n\r\nApproved for Hanover, Holstein, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.as well as Denmark, Sweden and France.\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\nCarrico has now become firmly established in upper level, international show jumping after placing in Dortmund, Hagen a.T.W., Chantilly/FRA, Münster, Paderborn and Neumünster under Philipp Weishaupt and Henrik von Eckermann/SWE.\r\n\r\nAwarded a premium in 2005 in Neumünster, Carrico then took his stallion performance test in Redefin where he won the jumping as well as the dressage index, finishing first overall. In 2008 he won a qualifier at the Bundeschampionat with a 9.5 and in 2009 he placed in the Final for six-year old show jumpers in Warendorf. At the age of just seven, he won his first ribbons in advanced level classes.\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nCarrico passes on his outstanding overall quality. His foals qualified for the German Foal Championships in Lienen again in 2012. A daughter named Cashmere Touch proved her ability to jump at the German Elite Broodmare Championships. Four sons have been licensed so far and his offspring in sport win tests for youngsters in the corresponding age classes. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Catoki, who has been stationed in Riesenbeck for a long time, has won numerous World Cup and Grand Prix competitions. \r\n\r\nHis dam Kapitale is also the dam of the advanced (S) level show jumpers Coldheart (by Chambertin) and Catokina (by Catoki).\r\n\r\nCapitol II, Lord, Calypso II and Meteor xx, all outstanding performance sires, follow in his pedigree. \r\n\r\nThe granddam Frühlingsfee is the dam of the licensed stallion Casino van de Helle (by Cassini I) and an advanced (S) level show jumper named Corrados (by Corrado I).\r\n\r\nLine 4705, forever linked to the Gerken breeding farm, is also the origin of the licensed stallions Chalan (by Cambridge), Chandor (by Cor de la Bryère), Chateau (by Cambridge), Codec (by Chambertin), Conoglio (by Contender), Larso (by Liostro), Levantos I and II (both by Liostro), Orleandro (by Oglio xx) and Rocadero (by Ronald) as well as many top, international horses. \r\n\r\n\r\n', 'Carrico', '', 'inherit', 'closed', 'open', '', '4887-revision-v1', '', '', '2014-02-24 10:48:35', '2014-02-24 10:48:35', '', 4887, 'http://127.0.0.1:4001/wordpress/4887-revision-v1/', 0, 'revision', '', 0), +(4892, 1, '2014-02-24 10:48:48', '2014-02-24 10:48:48', '

Holsteiner - Line 4705 - bay - 2003 - 16.3 ½ hands

\r\nBreeder: Peter Böge, Schönhorst, Germany\r\n\r\nApproved for Hanover, Holstein, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.as well as Denmark, Sweden and France.\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\nCarrico has now become firmly established in upper level, international show jumping after placing in Dortmund, Hagen a.T.W., Chantilly/FRA, Münster, Paderborn and Neumünster under Philipp Weishaupt and Henrik von Eckermann/SWE.\r\n\r\nAwarded a premium in 2005 in Neumünster, Carrico then took his stallion performance test in Redefin where he won the jumping as well as the dressage index, finishing first overall. In 2008 he won a qualifier at the Bundeschampionat with a 9.5 and in 2009 he placed in the Final for six-year old show jumpers in Warendorf. At the age of just seven, he won his first ribbons in advanced level classes.\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nCarrico passes on his outstanding overall quality. His foals qualified for the German Foal Championships in Lienen again in 2012. A daughter named Cashmere Touch proved her ability to jump at the German Elite Broodmare Championships. Four sons have been licensed so far and his offspring in sport win tests for youngsters in the corresponding age classes. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Catoki, who has been stationed in Riesenbeck for a long time, has won numerous World Cup and Grand Prix competitions. \r\n\r\nHis dam Kapitale is also the dam of the advanced (S) level show jumpers Coldheart (by Chambertin) and Catokina (by Catoki).\r\n\r\nCapitol II, Lord, Calypso II and Meteor xx, all outstanding performance sires, follow in his pedigree. \r\n\r\nThe granddam Frühlingsfee is the dam of the licensed stallion Casino van de Helle (by Cassini I) and an advanced (S) level show jumper named Corrados (by Corrado I).\r\n\r\nLine 4705, forever linked to the Gerken breeding farm, is also the origin of the licensed stallions Chalan (by Cambridge), Chandor (by Cor de la Bryère), Chateau (by Cambridge), Codec (by Chambertin), Conoglio (by Contender), Larso (by Liostro), Levantos I and II (both by Liostro), Orleandro (by Oglio xx) and Rocadero (by Ronald) as well as many top, international horses. \r\n\r\n\r\n', 'Carrico', '', 'inherit', 'closed', 'open', '', '4887-revision-v1', '', '', '2014-02-24 10:48:48', '2014-02-24 10:48:48', '', 4887, 'http://127.0.0.1:4001/wordpress/4887-revision-v1/', 0, 'revision', '', 0), +(4893, 1, '2014-02-24 10:48:59', '2014-02-24 10:48:59', '

Holsteiner - Line 4705 - bay - 2003 - 16.3 ½ hands

\r\nBreeder: Peter Böge, Schönhorst, Germany\r\n\r\nApproved for Hanover, Holstein, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.as well as Denmark, Sweden and France.\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\nCarrico has now become firmly established in upper level, international show jumping after placing in Dortmund, Hagen a.T.W., Chantilly/FRA, Münster, Paderborn and Neumünster under Philipp Weishaupt and Henrik von Eckermann/SWE.\r\n\r\nAwarded a premium in 2005 in Neumünster, Carrico then took his stallion performance test in Redefin where he won the jumping as well as the dressage index, finishing first overall. In 2008 he won a qualifier at the Bundeschampionat with a 9.5 and in 2009 he placed in the Final for six-year old show jumpers in Warendorf. At the age of just seven, he won his first ribbons in advanced level classes.\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nCarrico passes on his outstanding overall quality. His foals qualified for the German Foal Championships in Lienen again in 2012. A daughter named Cashmere Touch proved her ability to jump at the German Elite Broodmare Championships. Four sons have been licensed so far and his offspring in sport win tests for youngsters in the corresponding age classes. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Catoki, who has been stationed in Riesenbeck for a long time, has won numerous World Cup and Grand Prix competitions. \r\n\r\nHis dam Kapitale is also the dam of the advanced (S) level show jumpers Coldheart (by Chambertin) and Catokina (by Catoki).\r\n\r\nCapitol II, Lord, Calypso II and Meteor xx, all outstanding performance sires, follow in his pedigree. \r\n\r\nThe granddam Frühlingsfee is the dam of the licensed stallion Casino van de Helle (by Cassini I) and an advanced (S) level show jumper named Corrados (by Corrado I).\r\n\r\nLine 4705, forever linked to the Gerken breeding farm, is also the origin of the licensed stallions Chalan (by Cambridge), Chandor (by Cor de la Bryère), Chateau (by Cambridge), Codec (by Chambertin), Conoglio (by Contender), Larso (by Liostro), Levantos I and II (both by Liostro), Orleandro (by Oglio xx) and Rocadero (by Ronald) as well as many top, international horses. \r\n\r\n\r\n', 'Carrico', '', 'inherit', 'closed', 'open', '', '4887-revision-v1', '', '', '2014-02-24 10:48:59', '2014-02-24 10:48:59', '', 4887, 'http://127.0.0.1:4001/wordpress/4887-revision-v1/', 0, 'revision', '', 0), +(4894, 1, '2014-02-24 10:49:17', '2014-02-24 10:49:17', '

Westphalian - dark brown - 2006 - 16.2 hands

\r\n\r\nAge: 03/06/2006\r\nGender: Colt\r\nColor: dark brown\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\nThe dam’s sire Weinberg is deemed very versatile sire. He is known for the Olympic dressage winning Goldstern/Klaus Balkenhol and the world class show jumpers Wisby D/Ulrich Meyer zu Bexten, Wum/Kurt Gravemeier and Warren NRW/Lutz Gripshöver.\r\n\r\nGranddam Pretty Woman produced four horses that mastered courses with international dimensions: Akadia BT (by Aurelio I), Caesario‘s Pretty Woman (by Caesario), Comtesse (by Cantonius) and Akazia (by Argentinus). The latter is also the dam of a licensed stallion named Florentino (by Feuerglanz).\r\n\r\nIn his day, Pilot was the youngest millionaire when it comes to offspring earnings. Among his most significant offspring are the team Olympic winner of Seoul/COR, Pedro/Wolfgang Brinkmann, the team World Champion of Den Haag/NED, P.S. Priamos/Dirk Hafemeister, and of Rome/ITA, P.S. Priamos/Ludger Beerbaum, Pialotta/Edwina Alexander/AUS who took fourth place individually in the World Championships of Aachen/GER, and the Swiss Champion, M&C Pirol/Leslie McNaught/SUI.\r\n\r\nThe highly decorated dam line is also the origin of the advanced (S) level show jumpers Pamina (by Parcours), Lucky (by Lapaz L), Lazarillo (by La Poco), Couleur Contango v HD (by Contango), Contina (by Casparino) and What’s Up H.D. (by Walzertakt).', 'Black Jack', '', 'inherit', 'closed', 'open', '', '4869-revision-v1', '', '', '2014-02-24 10:49:17', '2014-02-24 10:49:17', '', 4869, 'http://127.0.0.1:4001/wordpress/4869-revision-v1/', 0, 'revision', '', 0), +(4895, 1, '2014-02-24 11:59:11', '2014-02-24 11:59:11', '

Westphalian - dark brown - 2006 - 16.2 hands

\r\n\r\nAge: 03/06/2006\r\nGender: Colt\r\nColor: dark brown\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\nThe dam’s sire Weinberg is deemed very versatile sire. He is known for the Olympic dressage winning Goldstern/Klaus Balkenhol and the world class show jumpers Wisby D/Ulrich Meyer zu Bexten, Wum/Kurt Gravemeier and Warren NRW/Lutz Gripshöver.\r\n\r\nGranddam Pretty Woman produced four horses that mastered courses with international dimensions: Akadia BT (by Aurelio I), Caesario‘s Pretty Woman (by Caesario), Comtesse (by Cantonius) and Akazia (by Argentinus). The latter is also the dam of a licensed stallion named Florentino (by Feuerglanz).\r\n\r\nIn his day, Pilot was the youngest millionaire when it comes to offspring earnings. Among his most significant offspring are the team Olympic winner of Seoul/COR, Pedro/Wolfgang Brinkmann, the team World Champion of Den Haag/NED, P.S. Priamos/Dirk Hafemeister, and of Rome/ITA, P.S. Priamos/Ludger Beerbaum, Pialotta/Edwina Alexander/AUS who took fourth place individually in the World Championships of Aachen/GER, and the Swiss Champion, M&C Pirol/Leslie McNaught/SUI.\r\n\r\nThe highly decorated dam line is also the origin of the advanced (S) level show jumpers Pamina (by Parcours), Lucky (by Lapaz L), Lazarillo (by La Poco), Couleur Contango v HD (by Contango), Contina (by Casparino) and What’s Up H.D. (by Walzertakt).', 'Black Jack', 'Westphalian - dark brown - 2006 - 16.2 hands', 'inherit', 'closed', 'open', '', '4869-revision-v1', '', '', '2014-02-24 11:59:11', '2014-02-24 11:59:11', '', 4869, 'http://127.0.0.1:4001/wordpress/4869-revision-v1/', 0, 'revision', '', 0), +(4896, 1, '2014-02-24 14:31:31', '2014-02-24 14:31:31', '[tagline_box backgroundcolor="#fff" shadow="yes" border="1px" bordercolor="#e8e6e6" highlightposition="top" link="http://themeforest.net/user/ThemeFusion" linktarget="" button="" title="" description="Avada comes with several carousel sliders to display your images. Recent Work works directly with your portfolio posts, Client Carousel is used to display client logos or images, and the Image Carousel is perfect for random images that need to be displayed on your site. "][/tagline_box]\n\n[separator top="20"]\n\n[title size="2"]Recent Work Carousel[/title]\n[recent_works][/recent_works]\n\n[separator top="30" style="single"]\n[one_third last="no"]\n

Use Carousels With Columns

\nThe recent work carousel can be used inside of column shortcodes to control the size. By default it will display all categories of portfolio posts. Users can specify that only a specific category is displayed instead of all categories, which gives you full control over what posts are seen by viewers.[/one_third]\n\n[two_third last="yes"][separator top="25" style="none"][recent_works][/recent_works][/two_third]\n\n[separator top="50"]\n\n[title size="2"]Client Carousel[/title]\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\n\n[separator top="30" style="single"]\n[one_third last="no"]\n

Use Carousels With Columns

\nThe client logo carousel can be used in column shortcodes. And its perfect to display client logos that link directly to projects on your site, or to an external page. There is also a "linktarget" attribute that allows you to select how the link will open.[/one_third]\n\n[two_third last="yes"][separator top="25" style="none"][clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients][/two_third]\n\n[separator top="50"]\n\n[title size="2"]Image Carousel[/title]\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][/clients]\n\n[separator top="30" style="single"]\n[one_third last="no"]\n

Use Carousels With Columns

\nThe client logo carousel can be used in column shortcodes. And its perfect to display client logos that link directly to projects on your site, or to an external page. There is also a "linktarget" attribute that allows you to select how the link will open.[/one_third]\n\n[two_third last="yes"][separator top="25" style="none"][clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2012/07/portfolio_41.jpg"][/clients]\n[/two_third]\n\n[separator top="40"]\n\n[title size="2"]Features and Customizations[/title]\n\n[one_half last="no"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Unlimited use and items per carousel and per page
  • \n
  • Specify a specific category to display in recent work carousel
  • \n
\n[/checklist]\n[/one_half]\n\n[one_half last="yes"]\n[checklist icon="check" iconcolor="light" circle="yes"]\n
    \n
  • Use with column shortcodes to control the width
  • \n
  • Set the link target attribute to control how the link opens
  • \n
\n[/checklist]\n[/one_half]', 'Carousel Sliders', '', 'inherit', 'closed', 'open', '', '3725-autosave-v1', '', '', '2014-02-24 14:31:31', '2014-02-24 14:31:31', '', 3725, 'http://127.0.0.1:4001/wordpress/3725-autosave-v1/', 0, 'revision', '', 0), +(4897, 1, '2014-02-24 17:36:05', '2014-02-24 17:36:05', '', 'Cría', '', 'publish', 'closed', 'open', '', 'cria', '', '', '2014-02-26 17:20:16', '2014-02-26 16:20:16', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=4897', 0, 'page', '', 0), +(4898, 1, '2014-02-24 17:36:05', '2014-02-24 17:36:05', '', 'Cría', '', 'inherit', 'closed', 'open', '', '4897-revision-v1', '', '', '2014-02-24 17:36:05', '2014-02-24 17:36:05', '', 4897, 'http://127.0.0.1:4001/wordpress/4897-revision-v1/', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4929, 1, '2014-02-25 11:58:05', '2014-02-25 11:58:05', '

Westphalian - dark brown - 2006 - 16.2 hands

\r\n\r\nAge: 03/06/2006\r\nGender: Colt\r\nColor: dark brown\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Black Jack', 'Westphalian - dark brown - 2006 - 16.2 hands', 'inherit', 'closed', 'open', '', '4869-revision-v1', '', '', '2014-02-25 11:58:05', '2014-02-25 11:58:05', '', 4869, 'http://127.0.0.1:4001/wordpress/4869-revision-v1/', 0, 'revision', '', 0), +(4899, 1, '2014-02-24 18:24:48', '2014-02-24 18:24:48', '', 'Competición', '', 'publish', 'closed', 'open', '', 'competicion', '', '', '2014-02-26 10:38:52', '2014-02-26 10:38:52', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=4899', 0, 'page', '', 0), +(4900, 1, '2014-02-24 18:24:48', '2014-02-24 18:24:48', '', 'Competición', '', 'inherit', 'closed', 'open', '', '4899-revision-v1', '', '', '2014-02-24 18:24:48', '2014-02-24 18:24:48', '', 4899, 'http://127.0.0.1:4001/wordpress/4899-revision-v1/', 0, 'revision', '', 0), +(4901, 1, '2014-02-25 09:28:14', '2014-02-25 09:28:14', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim ornare nisi, vitae mattis nulla ante id dui. Ut lectus purus, commodo et tincidunt vel, interdum sed lectus. Vestibulum adipiscing tempor nisi id elementu sadips ipsums dolores uns fugiats gravida nam elit vols nulla dolores amet untras sitsers.\n\nCras id erat arcu. Suspendisse nec lacinia eros. Morbi in nisl ut quam vulputate elementum. Donec ornare, turpis eget rhoncus pharetra, nunc augue porta orci, eu volutpat enim nisi ac risus. Proin a tortor id orci fermentum sollicitudin tincidunt in magna. Quisque semper, leo a malesuada dictum, orci massa blandit diam, nec porttitor quam nunc laoreet odio. Maecenas sed felis ante, non cursus justo. Vivamus semper euismod vulputate. Praesent a hendrerit sapien. Sed dapibus leo rutrum lorem convallis et commodo urna tempus. Quisque hendrerit imperdiet erat id fringilla. Vivamus vitae odio nisi, sit amet pellentesque justo. Pellentesque enim enim, ultricies sit amet blandit a, sagittis vel dolor. Cras lorem purus, posuere sed hendrerit ac, varius vel eros. Quisque nisl ante, posuere pulvinar bibendum a, malesuada sed mi.', 'Donec Ornare Turpis Eget', '', 'inherit', 'closed', 'open', '', '198-revision-v1', '', '', '2014-02-25 09:28:14', '2014-02-25 09:28:14', '', 198, 'http://127.0.0.1:4001/wordpress/198-revision-v1/', 0, 'revision', '', 0), +(4902, 1, '2014-02-25 09:28:56', '2014-02-25 09:28:56', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricie est justos.', 'Mauris Fringilla Voluts', '', 'inherit', 'closed', 'open', '', '191-revision-v1', '', '', '2014-02-25 09:28:56', '2014-02-25 09:28:56', '', 191, 'http://127.0.0.1:4001/wordpress/191-revision-v1/', 0, 'revision', '', 0), +(4903, 1, '2014-02-25 09:29:06', '2014-02-25 09:29:06', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim ornare nisi, vitae mattis nulla ante id dui. Ut lectus purus, commodo et tincidunt vel, interdum sed lectus. Vestibulum adipiscing tempor nisi id elementu sadips ipsums dolores uns fugiats gravida nam elit vols nulla dolores amet untras sitsers.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.', 'Suspendisse Pharetra Urna', '', 'inherit', 'closed', 'open', '', '192-revision-v1', '', '', '2014-02-25 09:29:06', '2014-02-25 09:29:06', '', 192, 'http://127.0.0.1:4001/wordpress/192-revision-v1/', 0, 'revision', '', 0), +(4904, 1, '2014-02-25 09:29:16', '2014-02-25 09:29:16', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim ornare nisi, vitae mattis nulla ante id dui. Ut lectus purus, commodo et tincidunt vel, interdum sed lectus. Vestibulum adipiscing tempor nisi id elementu sadips ipsums dolores uns fugiats gravida nam elit vols nulla dolores amet untras sitsers.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'Curabitur Malesuada Lorem', '', 'inherit', 'closed', 'open', '', '193-revision-v1', '', '', '2014-02-25 09:29:16', '2014-02-25 09:29:16', '', 193, 'http://127.0.0.1:4001/wordpress/193-revision-v1/', 0, 'revision', '', 0), +(4905, 1, '2014-02-25 09:29:23', '2014-02-25 09:29:23', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim ornare nisi, vitae mattis nulla ante id dui. Ut lectus purus, commodo et tincidunt vel, interdum sed lectus. Vestibulum adipiscing tempor gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et.', 'Nam Viverra Euismod', '', 'inherit', 'closed', 'open', '', '196-revision-v1', '', '', '2014-02-25 09:29:23', '2014-02-25 09:29:23', '', 196, 'http://127.0.0.1:4001/wordpress/196-revision-v1/', 0, 'revision', '', 0), +(4906, 1, '2014-02-25 11:12:48', '2014-02-25 11:12:48', '

Westphalian - brown - 2011 - 16.2 hands

\r\n\r\nNombre: Galante\r\nAño de nacimiento: 2011 \r\nCapa: Castaño\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Galante', '2011 - Castaño', 'trash', 'closed', 'open', '', 'galante', '', '', '2014-02-26 19:28:39', '2014-02-26 18:28:39', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=avada_portfolio&p=4906', 0, 'avada_portfolio', '', 0), +(4907, 1, '2014-02-25 11:10:42', '2014-02-25 11:10:42', '', 'galante_vibrante_alcame_DSC9490', '', 'inherit', 'closed', 'open', '', 'galante_vibrante_alcame_dsc9490', '', '', '2014-02-25 11:10:42', '2014-02-25 11:10:42', '', 4906, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/galante_vibrante_alcame_DSC9490.jpg', 0, 'attachment', 'image/jpeg', 0), +(4908, 1, '2014-02-25 11:11:13', '2014-02-25 11:11:13', '', 'GALANTE_39_VIBRANTE_ALCAME_DSC9191_', '', 'inherit', 'closed', 'open', '', 'galante_39_vibrante_alcame_dsc9191_', '', '', '2014-02-25 11:11:13', '2014-02-25 11:11:13', '', 4906, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/GALANTE_39_VIBRANTE_ALCAME_DSC9191_.jpg', 0, 'attachment', 'image/jpeg', 0), +(4909, 1, '2014-02-25 11:11:35', '2014-02-25 11:11:35', '', 'galante_vibrante_alcame_DSC9402', '', 'inherit', 'closed', 'open', '', 'galante_vibrante_alcame_dsc9402', '', '', '2014-02-25 11:11:35', '2014-02-25 11:11:35', '', 4906, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/galante_vibrante_alcame_DSC9402.jpg', 0, 'attachment', 'image/jpeg', 0), +(4910, 1, '2014-02-25 11:11:38', '2014-02-25 11:11:38', '', 'YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959', '', 'inherit', 'closed', 'open', '', 'yeguada_la_perla_39_galante_x_vibrante_alcame_dsc5959', '', '', '2014-02-25 11:11:38', '2014-02-25 11:11:38', '', 4906, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/YEGUADA_LA_PERLA_39_GALANTE_X_VIBRANTE_ALCAME_DSC5959.jpg', 0, 'attachment', 'image/jpeg', 0), +(4911, 1, '2014-02-25 11:12:48', '2014-02-25 11:12:48', '', 'Galante', '', 'inherit', 'closed', 'open', '', '4906-revision-v1', '', '', '2014-02-25 11:12:48', '2014-02-25 11:12:48', '', 4906, 'http://127.0.0.1:4001/wordpress/4906-revision-v1/', 0, 'revision', '', 0), +(4912, 1, '2014-02-25 11:13:51', '2014-02-25 11:13:51', '

Westphalian - brown - 2011 - 16.2 hands

\n\nAge: 03/06/2011\nGender: Colt\nColor: dark brown\nBreeder: Thomas Schindler, Fautenbach, Germany\nNombre: Galante\nAño de nacimiento: 2011 \nCapa: Castaño\n\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \nOther Verbands on request!\n\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\n\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\n\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\n\n\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \n\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \n\n[title size="3"]Progeny[/title]\n\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \n\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \n\n[title size="3"]Pedigree[/title]\n\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\n\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\n\nThe dam’s sire Weinberg is deemed very versatile sire. He is known for the Olympic dressage winning Goldstern/Klaus Balkenhol and the world class show jumpers Wisby D/Ulrich Meyer zu Bexten, Wum/Kurt Gravemeier and Warren NRW/Lutz Gripshöver.\n\nGranddam Pretty Woman produced four horses that mastered courses with international dimensions: Akadia BT (by Aurelio I), Caesario‘s Pretty Woman (by Caesario), Comtesse (by Cantonius) and Akazia (by Argentinus). The latter is also the dam of a licensed stallion named Florentino (by Feuerglanz).\n\nIn his day, Pilot was the youngest millionaire when it comes to offspring earnings. Among his most significant offspring are the team Olympic winner of Seoul/COR, Pedro/Wolfgang Brinkmann, the team World Champion of Den Haag/NED, P.S. Priamos/Dirk Hafemeister, and of Rome/ITA, P.S. Priamos/Ludger Beerbaum, Pialotta/Edwina Alexander/AUS who took fourth place individually in the World Championships of Aachen/GER, and the Swiss Champion, M&C Pirol/Leslie McNaught/SUI.\n\nThe highly decorated dam line is also the origin of the advanced (S) level show jumpers Pamina (by Parcours), Lucky (by Lapaz L), Lazarillo (by La Poco), Couleur Contango v HD (by Contango), Contina (by Casparino) and What’s Up H.D. (by Walzertakt).', 'Galante', '', 'inherit', 'closed', 'open', '', '4906-autosave-v1', '', '', '2014-02-25 11:13:51', '2014-02-25 11:13:51', '', 4906, 'http://127.0.0.1:4001/wordpress/4906-autosave-v1/', 0, 'revision', '', 0), +(4913, 1, '2014-02-25 11:14:09', '2014-02-25 11:14:09', '

Westphalian - brown - 2011 - 16.2 hands

\r\n\r\nNombre: Galante\r\nAño de nacimiento: 2011 \r\nCapa: Castaño\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\nThe dam’s sire Weinberg is deemed very versatile sire. He is known for the Olympic dressage winning Goldstern/Klaus Balkenhol and the world class show jumpers Wisby D/Ulrich Meyer zu Bexten, Wum/Kurt Gravemeier and Warren NRW/Lutz Gripshöver.\r\n\r\nGranddam Pretty Woman produced four horses that mastered courses with international dimensions: Akadia BT (by Aurelio I), Caesario‘s Pretty Woman (by Caesario), Comtesse (by Cantonius) and Akazia (by Argentinus). The latter is also the dam of a licensed stallion named Florentino (by Feuerglanz).\r\n\r\nIn his day, Pilot was the youngest millionaire when it comes to offspring earnings. Among his most significant offspring are the team Olympic winner of Seoul/COR, Pedro/Wolfgang Brinkmann, the team World Champion of Den Haag/NED, P.S. Priamos/Dirk Hafemeister, and of Rome/ITA, P.S. Priamos/Ludger Beerbaum, Pialotta/Edwina Alexander/AUS who took fourth place individually in the World Championships of Aachen/GER, and the Swiss Champion, M&C Pirol/Leslie McNaught/SUI.\r\n\r\nThe highly decorated dam line is also the origin of the advanced (S) level show jumpers Pamina (by Parcours), Lucky (by Lapaz L), Lazarillo (by La Poco), Couleur Contango v HD (by Contango), Contina (by Casparino) and What’s Up H.D. (by Walzertakt).', 'Galante', '', 'inherit', 'closed', 'open', '', '4906-revision-v1', '', '', '2014-02-25 11:14:09', '2014-02-25 11:14:09', '', 4906, 'http://127.0.0.1:4001/wordpress/4906-revision-v1/', 0, 'revision', '', 0), +(4916, 1, '2014-02-25 11:18:17', '2014-02-25 11:18:17', '

Westphalian - brown - 2011 - 16.2 hands

\r\n\r\nNombre: Galante\r\nAño de nacimiento: 2011 \r\nCapa: Castaño\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Galante', '2011 - Castaño', 'inherit', 'closed', 'open', '', '4906-revision-v1', '', '', '2014-02-25 11:18:17', '2014-02-25 11:18:17', '', 4906, 'http://127.0.0.1:4001/wordpress/4906-revision-v1/', 0, 'revision', '', 0), +(4914, 1, '2014-02-25 11:14:37', '2014-02-25 11:14:37', '

Westphalian - brown - 2011 - 16.2 hands

\r\n\r\nNombre: Galante\r\nAño de nacimiento: 2011 \r\nCapa: Castaño\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\nThe dam’s sire Weinberg is deemed very versatile sire. He is known for the Olympic dressage winning Goldstern/Klaus Balkenhol and the world class show jumpers Wisby D/Ulrich Meyer zu Bexten, Wum/Kurt Gravemeier and Warren NRW/Lutz Gripshöver.\r\n\r\nGranddam Pretty Woman produced four horses that mastered courses with international dimensions: Akadia BT (by Aurelio I), Caesario‘s Pretty Woman (by Caesario), Comtesse (by Cantonius) and Akazia (by Argentinus). The latter is also the dam of a licensed stallion named Florentino (by Feuerglanz).\r\n\r\nIn his day, Pilot was the youngest millionaire when it comes to offspring earnings. Among his most significant offspring are the team Olympic winner of Seoul/COR, Pedro/Wolfgang Brinkmann, the team World Champion of Den Haag/NED, P.S. Priamos/Dirk Hafemeister, and of Rome/ITA, P.S. Priamos/Ludger Beerbaum, Pialotta/Edwina Alexander/AUS who took fourth place individually in the World Championships of Aachen/GER, and the Swiss Champion, M&C Pirol/Leslie McNaught/SUI.\r\n\r\nThe highly decorated dam line is also the origin of the advanced (S) level show jumpers Pamina (by Parcours), Lucky (by Lapaz L), Lazarillo (by La Poco), Couleur Contango v HD (by Contango), Contina (by Casparino) and What’s Up H.D. (by Walzertakt).', 'Galante', 'Nombre: Galante\r\nAño de nacimiento: 2011\r\nCapa: Castaño', 'inherit', 'closed', 'open', '', '4906-revision-v1', '', '', '2014-02-25 11:14:37', '2014-02-25 11:14:37', '', 4906, 'http://127.0.0.1:4001/wordpress/4906-revision-v1/', 0, 'revision', '', 0), +(4915, 1, '2014-02-25 11:16:33', '2014-02-25 11:16:33', '

Westphalian - brown - 2011 - 16.2 hands

\r\n\r\nNombre: Galante\r\nAño de nacimiento: 2011 \r\nCapa: Castaño\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\nThe dam’s sire Weinberg is deemed very versatile sire. He is known for the Olympic dressage winning Goldstern/Klaus Balkenhol and the world class show jumpers Wisby D/Ulrich Meyer zu Bexten, Wum/Kurt Gravemeier and Warren NRW/Lutz Gripshöver.\r\n\r\nGranddam Pretty Woman produced four horses that mastered courses with international dimensions: Akadia BT (by Aurelio I), Caesario‘s Pretty Woman (by Caesario), Comtesse (by Cantonius) and Akazia (by Argentinus). The latter is also the dam of a licensed stallion named Florentino (by Feuerglanz).\r\n\r\nIn his day, Pilot was the youngest millionaire when it comes to offspring earnings. Among his most significant offspring are the team Olympic winner of Seoul/COR, Pedro/Wolfgang Brinkmann, the team World Champion of Den Haag/NED, P.S. Priamos/Dirk Hafemeister, and of Rome/ITA, P.S. Priamos/Ludger Beerbaum, Pialotta/Edwina Alexander/AUS who took fourth place individually in the World Championships of Aachen/GER, and the Swiss Champion, M&C Pirol/Leslie McNaught/SUI.\r\n\r\nThe highly decorated dam line is also the origin of the advanced (S) level show jumpers Pamina (by Parcours), Lucky (by Lapaz L), Lazarillo (by La Poco), Couleur Contango v HD (by Contango), Contina (by Casparino) and What’s Up H.D. (by Walzertakt).', 'Galante', '2011 - Castaño', 'inherit', 'closed', 'open', '', '4906-revision-v1', '', '', '2014-02-25 11:16:33', '2014-02-25 11:16:33', '', 4906, 'http://127.0.0.1:4001/wordpress/4906-revision-v1/', 0, 'revision', '', 0), +(4917, 1, '2014-02-25 11:19:55', '2014-02-25 11:19:55', '

Westphalian - gris - 2012 - 16.2 hands

\r\n\r\nNombre: Hércules\r\nAño de nacimiento: 2012 \r\nCapa: gris \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Hércules', 'gris - 2012', 'trash', 'closed', 'open', '', 'hercules', '', '', '2014-02-26 19:28:39', '2014-02-26 18:28:39', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=avada_portfolio&p=4917', 0, 'avada_portfolio', '', 0), +(4918, 1, '2014-02-25 11:19:55', '2014-02-25 11:19:55', '

Westphalian - gris - 2012 - 16.2 hands

\r\n\r\nNombre: Hércules\r\nAño de nacimiento: 2012 \r\nCapa: gris \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Hércules', 'gris - 2012', 'inherit', 'closed', 'open', '', '4917-revision-v1', '', '', '2014-02-25 11:19:55', '2014-02-25 11:19:55', '', 4917, 'http://127.0.0.1:4001/wordpress/4917-revision-v1/', 0, 'revision', '', 0), +(4919, 1, '2014-02-25 11:20:31', '2014-02-25 11:20:31', '', 'hercules_DSC9326', '', 'inherit', 'closed', 'open', '', 'hercules_dsc9326', '', '', '2014-02-25 11:20:31', '2014-02-25 11:20:31', '', 4917, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/hercules_DSC9326.jpg', 0, 'attachment', 'image/jpeg', 0), +(4920, 1, '2014-02-25 11:21:20', '2014-02-25 11:21:20', '', 'HERCULES_72_DSC9793_', '', 'inherit', 'closed', 'open', '', 'hercules_72_dsc9793_', '', '', '2014-02-25 11:21:20', '2014-02-25 11:21:20', '', 4917, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/HERCULES_72_DSC9793_.jpg', 0, 'attachment', 'image/jpeg', 0), +(4921, 1, '2014-02-25 11:21:23', '2014-02-25 11:21:23', '', 'HERCULES_72_DSC9822_', '', 'inherit', 'closed', 'open', '', 'hercules_72_dsc9822_', '', '', '2014-02-25 11:21:23', '2014-02-25 11:21:23', '', 4917, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/HERCULES_72_DSC9822_.jpg', 0, 'attachment', 'image/jpeg', 0), +(4922, 1, '2014-02-25 11:21:26', '2014-02-25 11:21:26', '', 'HERCULES_72_DSC9826_', '', 'inherit', 'closed', 'open', '', 'hercules_72_dsc9826_', '', '', '2014-02-25 11:21:26', '2014-02-25 11:21:26', '', 4917, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/HERCULES_72_DSC9826_.jpg', 0, 'attachment', 'image/jpeg', 0), +(4923, 1, '2014-02-25 11:21:29', '2014-02-25 11:21:29', '', 'hercules_DSC9303', '', 'inherit', 'closed', 'open', '', 'hercules_dsc9303', '', '', '2014-02-25 11:21:29', '2014-02-25 11:21:29', '', 4917, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/hercules_DSC9303.jpg', 0, 'attachment', 'image/jpeg', 0), +(4924, 1, '2014-02-25 11:21:33', '2014-02-25 11:21:33', '', 'hercules_DSC9350', '', 'inherit', 'closed', 'open', '', 'hercules_dsc9350', '', '', '2014-02-25 11:21:33', '2014-02-25 11:21:33', '', 4917, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/hercules_DSC9350.jpg', 0, 'attachment', 'image/jpeg', 0), +(4925, 1, '2014-02-25 11:21:37', '2014-02-25 11:21:37', '', 'YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466', '', 'inherit', 'closed', 'open', '', 'yeguada_la_perla_72_hercules_2012_dsc6466', '', '', '2014-02-25 11:21:37', '2014-02-25 11:21:37', '', 4917, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/YEGUADA_LA_PERLA_72_HERCULES_2012_DSC6466.jpg', 0, 'attachment', 'image/jpeg', 0), +(4926, 1, '2014-02-25 11:24:35', '2014-02-25 11:24:35', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim ornare nisi, vitae mattis nulla ante id dui. Ut lectus purus, commodo et tincidunt vel, interdum sed lectus. Vestibulum adipiscing tempor nisi id elementu sadips ipsums dolores uns fugiats gravida nam elit vols nulla dolores amet untras sitsers.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus. Proin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorems metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum.', 'Proin Sodales Quam', '', 'inherit', 'closed', 'open', '', '195-revision-v1', '', '', '2014-02-25 11:24:35', '2014-02-25 11:24:35', '', 195, 'http://127.0.0.1:4001/wordpress/195-revision-v1/', 0, 'revision', '', 0), +(4927, 1, '2014-02-25 11:39:44', '2014-02-25 11:39:44', '

Westphalian - gris - 2012 - 16.2 hands

\r\n\r\nNombre: Hércules\r\nAño de nacimiento: 2012 \r\nCapa: gris \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Hércules', 'gris - 2012', 'inherit', 'closed', 'open', '', '4917-revision-v1', '', '', '2014-02-25 11:39:44', '2014-02-25 11:39:44', '', 4917, 'http://127.0.0.1:4001/wordpress/4917-revision-v1/', 0, 'revision', '', 0), +(4928, 1, '2014-02-25 11:40:56', '2014-02-25 11:40:56', '

Westphalian - brown - 2011 - 16.2 hands

\r\n\r\nNombre: Galante\r\nAño de nacimiento: 2011 \r\nCapa: Castaño\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Galante', '2011 - Castaño', 'inherit', 'closed', 'open', '', '4906-revision-v1', '', '', '2014-02-25 11:40:56', '2014-02-25 11:40:56', '', 4906, 'http://127.0.0.1:4001/wordpress/4906-revision-v1/', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4930, 1, '2014-02-25 12:53:14', '2014-02-25 12:53:14', 'Quisque ligulas ipsum, euismod atras vulputate iltricies etri elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.', 'Praesent Et Urna Turpis', '', 'inherit', 'closed', 'open', '', '213-revision-v1', '', '', '2014-02-25 12:53:14', '2014-02-25 12:53:14', '', 213, 'http://127.0.0.1:4001/wordpress/213-revision-v1/', 0, 'revision', '', 0), +(4931, 1, '2014-02-25 12:53:14', '2014-02-25 12:53:14', 'Quisque ligulas ipsum, euismod atras vulputate iltricies etri elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exercitation.
\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.\n\n ', 'Donec At Mauris Enims', '', 'inherit', 'closed', 'open', '', '215-revision-v1', '', '', '2014-02-25 12:53:14', '2014-02-25 12:53:14', '', 215, 'http://127.0.0.1:4001/wordpress/215-revision-v1/', 0, 'revision', '', 0), +(4932, 1, '2014-02-25 12:53:14', '2014-02-25 12:53:14', 'Quisque ligula ipsum, euismod a vulputate a, ultricies et elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.', 'Class Aptent Taciti Soci Ad Litora', '', 'inherit', 'closed', 'open', '', '202-revision-v1', '', '', '2014-02-25 12:53:14', '2014-02-25 12:53:14', '', 202, 'http://127.0.0.1:4001/wordpress/202-revision-v1/', 0, 'revision', '', 0), +(4933, 1, '2014-02-25 12:53:15', '2014-02-25 12:53:15', 'Quisque ligulas ipsum, euismod atras vulputate iltricies etri elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.', 'Nullam Vitae Nibh Un Odiosters', '', 'inherit', 'closed', 'open', '', '211-revision-v1', '', '', '2014-02-25 12:53:15', '2014-02-25 12:53:15', '', 211, 'http://127.0.0.1:4001/wordpress/211-revision-v1/', 0, 'revision', '', 0), +(4934, 1, '2014-02-25 12:53:15', '2014-02-25 12:53:15', 'Quisque ligula ipsum, euismod aturesit vulputate a, ultricies et elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.', 'Proin Sodales Quam Nec Sollicit', '', 'inherit', 'closed', 'open', '', '209-revision-v1', '', '', '2014-02-25 12:53:15', '2014-02-25 12:53:15', '', 209, 'http://127.0.0.1:4001/wordpress/209-revision-v1/', 0, 'revision', '', 0), +(4935, 1, '2014-02-25 12:53:15', '2014-02-25 12:53:15', 'Quisque ligula ipsum, euismod a vulputate a, ultricies et elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla nunc dui, tristique in semper vel, congue sed ligula. Nam dolor ligula, faucibus id sodales in, auctor fringilla libero. Pellentesque pellentesque tempor tellus eget hendrerit. Morbi id aliquam ligula. Aliquam id dui sem. Proin rhoncus consequat nisl, eu ornare mauris tincidunt vitae.\n\nVestibulum sodales ante a purus volutpat euismod. Proin sodales quam nec ante sollicitudin lacinia. Ut egestas bibendum tempor. Morbi non nibh sit amet ligula blandit ullamcorper in nec risus. Pellentesque fringilla diam faucibus tortor bibendum vulputate. Etiam turpis urna, rhoncus et mattis ut, dapibus eu nunc. Nunc sed aliquet nisi. Nullam ut magna non lacus adipiscing volutpat. Aenean odio mauris, consectetur quis consequat quis, blandit a nunc. Sed orci erat, placerat ac interdum ut, suscipit eu augue. Nunc vitae mi tortor. Ut vel justo quis lectus elementum ullamcorper volutpat vel libero.\n\nDonec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris euismod placerat sit amet ut metus. Sed imperdiet fringilla sem eget euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque adipiscing, neque ut pulvinar tincidunt, est sem euismod odio, eu ullamcorper turpis nisl sit amet velit. Nullam vitae nibh odio, non scelerisque nibh. Vestibulum ut est augue, in varius purus.\n\nProin dictum lobortis justo at pretium. Nunc malesuada ante sit amet purus ornare pulvinar. Donec suscipit dignissim ipsum at euismod. Curabitur malesuada lorem sed metus adipiscing in vehicula quam commodo. Sed porttitor elementum elementum. Proin eu ligula eget leo consectetur sodales et non mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nNunc tincidunt, elit non cursus euismod, lacus augue ornare metus, egestas imperdiet nulla nisl quis mauris. Suspendisse a pharetra urna. Morbi dui lectus, pharetra nec elementum eget, vulputate ut nisi. Aliquam accumsan, nulla sed feugiat vehicula, lacus justo semper libero, quis porttitor turpis odio sit amet ligula. Duis dapibus fermentum orci, nec malesuada libero vehicula ut. Integer sodales, urna eget interdum eleifend, nulla nibh laoreet nisl, quis dignissim mauris dolor eget mi. Donec at mauris enim. Duis nisi tellus, adipiscing a convallis quis, tristique vitae risus. Nullam molestie gravida lobortis. Proin ut nibh quis felis auctor ornare. Cras ultricies, nibh at mollis faucibus, justo eros porttitor mi, quis auctor lectus arcu sit amet nunc. Vivamus gravida vehicula arcu, vitae vulputate augue lacinia faucibus.\n\nUt porttitor euismod cursus. Mauris suscipit, turpis ut dapibus rhoncus, odio erat egestas orci, in sollicitudin enim erat id est. Sed auctor gravida arcu, nec fringilla orci aliquet ut. Nullam eu pretium purus. Maecenas fermentum posuere sem vel posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ornare convallis lectus a faucibus. Praesent et urna turpis. Fusce tincidunt augue in velit tincidunt sed tempor felis porta. Nunc sodales, metus ut vestibulum ornare, est magna laoreet lectus, ut adipiscing massa odio sed turpis. In nec lorem porttitor urna consequat sagittis. Nullam eget elit ante. Pellentesque justo urna, semper nec faucibus sit amet, aliquam at mi. Maecenas eget diam nec mi dignissim pharetra.', 'Nunc Tincidunt Elit Cursus', '', 'inherit', 'closed', 'open', '', '207-revision-v1', '', '', '2014-02-25 12:53:15', '2014-02-25 12:53:15', '', 207, 'http://127.0.0.1:4001/wordpress/207-revision-v1/', 0, 'revision', '', 0), +(4936, 1, '2014-02-25 14:35:02', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 14:35:02', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4936', 0, 'post', '', 0), +(4937, 1, '2014-02-25 15:00:12', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 15:00:12', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=4937', 0, 'page', '', 0), +(4938, 1, '2014-02-25 15:00:20', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 15:00:20', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4938', 0, 'post', '', 0), +(4939, 1, '2014-02-25 15:01:17', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 15:01:17', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4939', 0, 'post', '', 0), +(4940, 1, '2014-02-25 15:45:31', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 15:45:31', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_caballo&p=4940', 0, 'drg_caballo', '', 0), +(4941, 1, '2014-02-25 15:48:24', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 15:48:24', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_caballo&p=4941', 0, 'drg_caballo', '', 0), +(4942, 1, '2014-02-25 15:48:47', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 15:48:47', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_caballo&p=4942', 0, 'drg_caballo', '', 0), +(4943, 1, '2014-02-25 15:48:59', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 15:48:59', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_caballo&p=4943', 0, 'drg_caballo', '', 0), +(4944, 1, '2014-02-25 15:51:39', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 15:51:39', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4944', 0, 'post', '', 0), +(4945, 1, '2014-02-25 15:52:57', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 15:52:57', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4945', 0, 'post', '', 0), +(4946, 1, '2014-02-25 16:09:47', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 16:09:47', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=4946', 0, 'drg_horse', '', 0), +(4947, 1, '2014-02-25 16:09:54', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 16:09:54', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=4947', 0, 'drg_horse', '', 0), +(4948, 1, '2014-02-25 16:25:33', '2014-02-25 15:25:33', '

Westphalian - gris - 2012 - 16.2 hands

\r\n\r\nNombre: Hércules\r\nAño de nacimiento: 2012 \r\nCapa: gris \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Hércules', 'gris - 2012', 'publish', 'closed', 'closed', '', 'hercules', '', '', '2014-02-26 17:35:04', '2014-02-26 16:35:04', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=4948', 0, 'drg_horse', '', 0), +(4949, 1, '2014-02-25 16:25:33', '2014-02-25 16:25:33', '

Westphalian - gris - 2012 - 16.2 hands

\r\n\r\nNombre: Hércules\r\nAño de nacimiento: 2012 \r\nCapa: gris \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Hércules', 'gris - 2012', 'inherit', 'closed', 'open', '', '4948-revision-v1', '', '', '2014-02-25 16:25:33', '2014-02-25 16:25:33', '', 4948, 'http://127.0.0.1:4001/wordpress/4948-revision-v1/', 0, 'revision', '', 0), +(4950, 1, '2014-02-25 16:28:19', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-25 16:28:19', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=4950', 0, 'drg_horse', '', 0), +(4951, 1, '2014-02-25 16:38:57', '2014-02-25 15:38:57', '

Westphalian - brown - 2011 - 16.2 hands

\r\n\r\nNombre: Galante\r\nAño de nacimiento: 2011 \r\nCapa: Castaño\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Galante', '2011 - Castaño', 'publish', 'closed', 'closed', '', 'galante', '', '', '2014-02-26 17:34:57', '2014-02-26 16:34:57', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=4951', 0, 'drg_horse', '', 0), +(4952, 1, '2014-02-25 16:38:57', '2014-02-25 16:38:57', '

Westphalian - brown - 2011 - 16.2 hands

\r\n\r\nNombre: Galante\r\nAño de nacimiento: 2011 \r\nCapa: Castaño\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Galante', '2011 - Castaño', 'inherit', 'closed', 'open', '', '4951-revision-v1', '', '', '2014-02-25 16:38:57', '2014-02-25 16:38:57', '', 4951, 'http://127.0.0.1:4001/wordpress/4951-revision-v1/', 0, 'revision', '', 0), +(4953, 1, '2014-02-25 16:41:50', '2014-02-25 16:41:50', '

Holsteiner - Line 4705 - bay - 2003 - 16.3 ½ hands

\r\nBreeder: Peter Böge, Schönhorst, Germany\r\n\r\nApproved for Hanover, Holstein, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.as well as Denmark, Sweden and France.\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\nCarrico has now become firmly established in upper level, international show jumping after placing in Dortmund, Hagen a.T.W., Chantilly/FRA, Münster, Paderborn and Neumünster under Philipp Weishaupt and Henrik von Eckermann/SWE.\r\n\r\nAwarded a premium in 2005 in Neumünster, Carrico then took his stallion performance test in Redefin where he won the jumping as well as the dressage index, finishing first overall. In 2008 he won a qualifier at the Bundeschampionat with a 9.5 and in 2009 he placed in the Final for six-year old show jumpers in Warendorf. At the age of just seven, he won his first ribbons in advanced level classes.\r\n', 'Carrico', '', 'publish', 'closed', 'closed', '', 'carrico', '', '', '2014-02-26 17:34:26', '2014-02-26 16:34:26', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=4953', 0, 'drg_horse', '', 0), +(4954, 1, '2014-02-25 16:41:50', '2014-02-25 16:41:50', '', 'Carrico', '', 'inherit', 'closed', 'open', '', '4953-revision-v1', '', '', '2014-02-25 16:41:50', '2014-02-25 16:41:50', '', 4953, 'http://127.0.0.1:4001/wordpress/4953-revision-v1/', 0, 'revision', '', 0), +(4955, 1, '2014-02-25 16:42:42', '2014-02-25 16:42:42', '

Westphalian - dark brown - 2006 - 16.2 hands

\r\n\r\nAge: 03/06/2006\r\nGender: Colt\r\nColor: dark brown\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Black Jack', '', 'publish', 'closed', 'closed', '', 'black-jack', '', '', '2014-02-26 10:54:26', '2014-02-26 10:54:26', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=4955', 0, 'drg_horse', '', 0), +(4956, 1, '2014-02-25 16:42:42', '2014-02-25 16:42:42', '

Westphalian - dark brown - 2006 - 16.2 hands

\r\n\r\nAge: 03/06/2006\r\nGender: Colt\r\nColor: dark brown\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Black Jack', '', 'inherit', 'closed', 'open', '', '4955-revision-v1', '', '', '2014-02-25 16:42:42', '2014-02-25 16:42:42', '', 4955, 'http://127.0.0.1:4001/wordpress/4955-revision-v1/', 0, 'revision', '', 0), +(4957, 1, '2014-02-25 16:46:37', '2014-02-25 16:46:37', ' ', '', '', 'publish', 'closed', 'open', '', '4957', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4957', 32, 'nav_menu_item', '', 0), +(4958, 1, '2014-02-25 16:46:37', '2014-02-25 16:46:37', ' ', '', '', 'publish', 'closed', 'open', '', '4958', '', '', '2014-02-25 18:34:18', '2014-02-25 18:34:18', '', 0, 'http://127.0.0.1:4001/wordpress/?p=4958', 33, 'nav_menu_item', '', 0), +(4971, 1, '2014-02-25 16:42:42', '2014-02-25 16:42:42', '

Westfale - grey - 2007 - 16.3 ½ hands

\r\n\r\nBreeder: Dr. Axel Schuerner, Nideggen, Germany \r\n\r\nApproved for Hanover, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.\r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n \r\n\r\nAlthough Cristallo I, who is also stationed in Riesenbeck, is already successful internationally, Cristallo II is just as good as his full brother in every way. In 2009 Cristallo II left the NRW licensing venue in Münster-Handorf as the celebrated jumper champion and passed his stallion performance test in 2010 at the same venue as the reserve champion jumper with high scores for his gaits and rideability. In 2011 he took silver at the Westphalian Championships (4-year olds) and in 2012 he qualified for the Bundeschampionat. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nCristallo II’s offspring exceeded all expectations. His foals are pleasing with their modern looks, generous lines and wonderfully supple movements. Many of them have been admitted to auctions. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Cornet Obolensky has considerably influenced modern-day jumper breeding. Just like the dam’s sire Cassini I, he has an outstanding performance and breeding record. \r\n\r\nCristallo’s dam Cassie placed in show jumping up to medium (M) level under her sport name Cascavella. Her son Cristallo I was a NRW premium stallion, won his stallion performance test, was Westphalian Jumper Champion, participated in the Bundeschampionat Finals twice and meanwhile wins ribbons in international competitions. \r\n\r\nHis granddam Profilda was successful in show jumping up to advanced (S) level under her sport name Papaya before she gave birth to a medium (M) level show jumper named Cosima (by Calido I). Profilda is a full sister of a licensed stallion named Pocalino (by Polydor), with whom Jens Dummeyer placed in international competitions, and of a medium (M) level show jumper named Paganini as well as a half-sister of the State Premium mares Leticia (by Lancer III) and Celestine (by Cornet Obolensky). The Westphalian Almfee line also produced the sires Apartos, Avocado, Ayers Rock, Disney, Papageno, Parlando I and II and Pastell as well as the 2009 Bundeschampion of four-year old mares and geldings, Preziosa.\r\n\r\nPerformance line of Almfee \r\n\r\n', 'Cristallo', '', 'publish', 'closed', 'closed', '', 'cristallo', '', '', '2014-02-26 11:49:31', '2014-02-26 11:49:31', '', 0, 'http://127.0.0.1:4001/wordpress/horse/black-jack-2-2/', 0, 'drg_horse', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(4989, 1, '2014-02-26 11:49:31', '2014-02-26 11:49:31', '

Westfale - grey - 2007 - 16.3 ½ hands

\r\n\r\nBreeder: Dr. Axel Schuerner, Nideggen, Germany \r\n\r\nApproved for Hanover, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.\r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n \r\n\r\nAlthough Cristallo I, who is also stationed in Riesenbeck, is already successful internationally, Cristallo II is just as good as his full brother in every way. In 2009 Cristallo II left the NRW licensing venue in Münster-Handorf as the celebrated jumper champion and passed his stallion performance test in 2010 at the same venue as the reserve champion jumper with high scores for his gaits and rideability. In 2011 he took silver at the Westphalian Championships (4-year olds) and in 2012 he qualified for the Bundeschampionat. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nCristallo II’s offspring exceeded all expectations. His foals are pleasing with their modern looks, generous lines and wonderfully supple movements. Many of them have been admitted to auctions. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Cornet Obolensky has considerably influenced modern-day jumper breeding. Just like the dam’s sire Cassini I, he has an outstanding performance and breeding record. \r\n\r\nCristallo’s dam Cassie placed in show jumping up to medium (M) level under her sport name Cascavella. Her son Cristallo I was a NRW premium stallion, won his stallion performance test, was Westphalian Jumper Champion, participated in the Bundeschampionat Finals twice and meanwhile wins ribbons in international competitions. \r\n\r\nHis granddam Profilda was successful in show jumping up to advanced (S) level under her sport name Papaya before she gave birth to a medium (M) level show jumper named Cosima (by Calido I). Profilda is a full sister of a licensed stallion named Pocalino (by Polydor), with whom Jens Dummeyer placed in international competitions, and of a medium (M) level show jumper named Paganini as well as a half-sister of the State Premium mares Leticia (by Lancer III) and Celestine (by Cornet Obolensky). The Westphalian Almfee line also produced the sires Apartos, Avocado, Ayers Rock, Disney, Papageno, Parlando I and II and Pastell as well as the 2009 Bundeschampion of four-year old mares and geldings, Preziosa.\r\n\r\nPerformance line of Almfee \r\n\r\n', 'Cristallo', '', 'inherit', 'closed', 'open', '', '4971-revision-v1', '', '', '2014-02-26 11:49:31', '2014-02-26 11:49:31', '', 4971, 'http://127.0.0.1:4001/wordpress/4971-revision-v1/', 0, 'revision', '', 0), +(4982, 1, '2014-02-26 11:46:09', '2014-02-26 11:46:09', '

Westfale - grey - 2007 - 16.3 ½ hands

\r\n\r\nBreeder: Dr. Axel Schuerner, Nideggen, Germany \r\n\r\nApproved for Hanover, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.\r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n \r\n\r\nAlthough Cristallo I, who is also stationed in Riesenbeck, is already successful internationally, Cristallo II is just as good as his full brother in every way. In 2009 Cristallo II left the NRW licensing venue in Münster-Handorf as the celebrated jumper champion and passed his stallion performance test in 2010 at the same venue as the reserve champion jumper with high scores for his gaits and rideability. In 2011 he took silver at the Westphalian Championships (4-year olds) and in 2012 he qualified for the Bundeschampionat. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Cristallo', '', 'inherit', 'closed', 'open', '', '4971-revision-v1', '', '', '2014-02-26 11:46:09', '2014-02-26 11:46:09', '', 4971, 'http://127.0.0.1:4001/wordpress/4971-revision-v1/', 0, 'revision', '', 0), +(4972, 1, '2014-02-26 11:35:30', '2014-02-26 11:35:30', '

Westphalian - dark brown - 2006 - 16.2 hands

\r\n\r\nAge: 03/06/2006\r\nGender: Colt\r\nColor: dark brown\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Black Jack Copy Copy', '', 'inherit', 'closed', 'open', '', '4971-revision-v1', '', '', '2014-02-26 11:35:30', '2014-02-26 11:35:30', '', 4971, 'http://127.0.0.1:4001/wordpress/4971-revision-v1/', 0, 'revision', '', 0), +(4973, 1, '2014-02-26 11:35:40', '2014-02-26 11:35:40', '

Westphalian - dark brown - 2006 - 16.2 hands

\r\n\r\nAge: 03/06/2006\r\nGender: Colt\r\nColor: dark brown\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Black Jack Copy', '', 'inherit', 'closed', 'open', '', '4970-revision-v1', '', '', '2014-02-26 11:35:40', '2014-02-26 11:35:40', '', 4970, 'http://127.0.0.1:4001/wordpress/4970-revision-v1/', 0, 'revision', '', 0), +(4974, 1, '2014-02-26 11:38:40', '2014-02-26 11:38:40', '

Westphalian - dark brown - 2006 - 16.2 hands

\r\n\r\nAge: 03/06/2006\r\nGender: Colt\r\nColor: dark brown\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Carthano', '', 'inherit', 'closed', 'open', '', '4970-revision-v1', '', '', '2014-02-26 11:38:40', '2014-02-26 11:38:40', '', 4970, 'http://127.0.0.1:4001/wordpress/4970-revision-v1/', 0, 'revision', '', 0), +(4976, 1, '2014-02-26 11:40:44', '2014-02-26 11:40:44', '', '_DSC8891CarthanoTrab_01', '', 'inherit', 'closed', 'open', '', '_dsc8891carthanotrab_01', '', '', '2014-02-26 11:40:44', '2014-02-26 11:40:44', '', 4970, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/DSC8891CarthanoTrab_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4977, 1, '2014-02-26 11:41:04', '2014-02-26 11:41:04', '', '_DSC9548CarthanoIISprung_01', '', 'inherit', 'closed', 'open', '', '_dsc9548carthanoiisprung_01', '', '', '2014-02-26 11:41:04', '2014-02-26 11:41:04', '', 4970, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/DSC9548CarthanoIISprung_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4978, 1, '2014-02-26 11:41:27', '2014-02-26 11:41:27', '', 'Carthano_K1G9342_B4_01', '', 'inherit', 'closed', 'open', '', 'carthano_k1g9342_b4_01', '', '', '2014-02-26 11:41:27', '2014-02-26 11:41:27', '', 4970, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Carthano_K1G9342_B4_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4979, 1, '2014-02-26 11:41:38', '2014-02-26 11:41:38', '', 'Carthano_K1G9347_B2_05', '', 'inherit', 'closed', 'open', '', 'carthano_k1g9347_b2_05', '', '', '2014-02-26 11:41:38', '2014-02-26 11:41:38', '', 4970, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Carthano_K1G9347_B2_05.jpg', 0, 'attachment', 'image/jpeg', 0), +(4980, 1, '2014-02-26 11:44:00', '2014-02-26 11:44:00', '

Holstein, bay, Born: 2008, 169cm

\r\n\r\nInsemination fee: 700 €* (only frozen semen)\r\n\r\n \r\nAppproved for: Holstein, Oldenburg, Oldenburg-International, Westfalen and Rheinland. As well as all the South German Stud Books and the newly formed German States Stud Books.\r\n\r\n \r\n\r\nCarthano II was the celebrated premium sire at his approvals in Holstein in 2010, showing enormous ability in his paces, correct conformation, and an abundance of “stallion presence”. Carthano II also has an outstanding trot; this is due to his enormously powerful hind legs. He has a balanced consistent rhythm and large, flexible gaits. His jumping scope, good leg technique and quick reactions at the fence are eye-catching. With all these attributes, Carthano II is undisputedly one of the top stallions of his age group. \r\n\r\nIn 2011 Carthano II completed an excellent 30-day-test in Zweibrücken. He confirmed the high expectations by scoring 126 points in the “VA-Zuchtwert” for jumping. Also worth a mention was the deserved high points awarded for his well-tempered character and great attitude. \r\n\r\nCathano ll begins his preparation for the National Young Horse Championships in 2013 with his first show jumping events this coming season. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nWe are looking forward with great expectation to Carthano’s first foals in 2012. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nCarthano II´s sire, Contender won his stallion performance test in Adelheidsdorf in 1987. Over the years, the son of Calypso II has developed into a valued and highly regarded breeding stallion with over one hundred of his approved sons actively serving around the world today. Contender himself was a living legend. Amongst others he sired Checkmate/M. Michaels-Beerbaum, two-time winner of the Riders Tour and team European champion, as well as Montender/M. Kutscher who won two Olympic bronze medals in 2004 and two gold medals at the European Championships in San Patrignano (ITA) in 2005.\r\n\r\n \r\n\r\n \r\n\r\nThe dam’s sire Carthago began his career at the HolsteinVerband, he went on to participate at two Olympic Games with his rider Jos Lansink. He has sired over thirty approved stallions and many international top sport horses such as Cash ridden by Marco Kutscher. Carthago was ranked second in 2010 on the WBFSH-Ranking of the world’s best show jumping sires thanks to his successful offspring.\r\n\r\nCarthano II’s dam G-Catania produced the two full-brothers and approved stallions Carthano I and II as well as two stud book premium mares and four sport horses. Two of which, Phyllis and Paula, both sired by Cambridge have been successful in 1.40 and higher jumping classes. The third maternal dam, Mechthild sired by Sacramento Song xx produced three successful sport horses: Leonardo by Landmeister, Cartouche by Cardinal und Lasso by Landmeister.\r\n\r\nThe following approved stallions all come from the Holstein lineage 2067: Aconito (by Acorado), Canterburry (by Caletto I), Canturano I and II (by Canturo), Carthano I and II (by Contender), Con Caletto (by Contender), Con Spirito (by Contender), Cosido (by Cosimo), Cristino (by Caretino), Jaquino (by Jayadevo de Mackinac), Landstreicher (by Landgraf I), Lordon (by Lord), Masetto (by Montanus), Octavio (by Oglio), Rando (by Romino) and Sympatico (by Sacramento Song xx).\r\n\r\nAmongst the 490 currently registered sport horses are Landstreicher (by Landgraf I), Cazaro (by Chambertin), Claim Collin (by Corrado I) and Cool Man (by Contender) all successful up to S-level. \r\n\r\n', 'Carthano', '', 'inherit', 'closed', 'open', '', '4970-revision-v1', '', '', '2014-02-26 11:44:00', '2014-02-26 11:44:00', '', 4970, 'http://127.0.0.1:4001/wordpress/4970-revision-v1/', 0, 'revision', '', 0), +(4981, 1, '2014-02-26 11:45:37', '2014-02-26 11:45:37', '

Westphalian - dark brown - 2006 - 16.2 hands

\r\n\r\nAge: 03/06/2006\r\nGender: Colt\r\nColor: dark brown\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Cristallo', '', 'inherit', 'closed', 'open', '', '4971-revision-v1', '', '', '2014-02-26 11:45:37', '2014-02-26 11:45:37', '', 4971, 'http://127.0.0.1:4001/wordpress/4971-revision-v1/', 0, 'revision', '', 0), +(4983, 1, '2014-02-26 11:47:13', '2014-02-26 11:47:13', '

Westfale - grey - 2007 - 16.3 ½ hands

\n\nBreeder: Dr. Axel Schuerner, Nideggen, Germany \n\nApproved for Hanover, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.\nOther Verbands on request!\n\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\n\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\n\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\n\n \n\nAlthough Cristallo I, who is also stationed in Riesenbeck, is already successful internationally, Cristallo II is just as good as his full brother in every way. In 2009 Cristallo II left the NRW licensing venue in Münster-Handorf as the celebrated jumper champion and passed his stallion performance test in 2010 at the same venue as the reserve champion jumper with high scores for his gaits and rideability. In 2011 he took silver at the Westphalian Championships (4-year olds) and in 2012 he qualified for the Bundeschampionat. \n\n[title size="3"]Progeny[/title]\n\nCristallo II’s offspring exceeded all expectations. His foals are pleasing with their modern looks, generous lines and wonderfully supple movements. Many of them have been admitted to auctions. \n\n[title size="3"]Pedigree[/title]\n\nHis sire Cornet Obolensky has considerably influenced modern-day jumper breeding. Just like the dam’s sire Cassini I, he has an outstanding performance and breeding record. \n\nCristallo’s dam Cassie placed in show jumping up to medium (M) level under her sport name Cascavella. Her son Cristallo I was a NRW premium stallion, won his stallion performance test, was Westphalian Jumper Champion, participated in the Bundeschampionat Finals twice and meanwhile wins ribbons in international competitions. \n\nHis granddam Profilda was successful in show jumping up to advanced (S) level under her sport name Papaya before she gave birth to a medium (M) level show jumper named Cosima (by Calido I). Profilda is a full sister of a licensed stallion named Pocalino (by Polydor), with whom Jens Dummeyer placed in international competitions, and of a medium (M) level show jumper named Paganini as well as a half-sister of the State Premium mares Leticia (by Lancer III) and Celestine (by Cornet Obolensky). The Westphalian Almfee line also produced the sires Apartos, Avocado, Ayers Rock, Disney, Papageno, Parlando I and II and Pastell as well as the 2009 Bundeschampion of four-year old mares and geldings, Preziosa.\n\nPerformance line of Almfee \n\n', 'Cristallo', '', 'inherit', 'closed', 'open', '', '4971-autosave-v1', '', '', '2014-02-26 11:47:13', '2014-02-26 11:47:13', '', 4971, 'http://127.0.0.1:4001/wordpress/4971-autosave-v1/', 0, 'revision', '', 0), +(4984, 1, '2014-02-26 11:47:19', '2014-02-26 11:47:19', '', 'Cristallo_II_Portrait_Recki_2011_04', '', 'inherit', 'closed', 'open', '', 'cristallo_ii_portrait_recki_2011_04', '', '', '2014-02-26 11:47:19', '2014-02-26 11:47:19', '', 4971, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Cristallo_II_Portrait_Recki_2011_04.jpg', 0, 'attachment', 'image/jpeg', 0), +(4985, 1, '2014-02-26 11:47:57', '2014-02-26 11:47:57', '', 'Cristallo_II_BuCha2013', '', 'inherit', 'closed', 'open', '', 'cristallo_ii_bucha2013', '', '', '2014-02-26 11:47:57', '2014-02-26 11:47:57', '', 4971, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Cristallo_II_BuCha2013.jpg', 0, 'attachment', 'image/jpeg', 0), +(4986, 1, '2014-02-26 11:48:23', '2014-02-26 11:48:23', '', 'Cristallo_II_Freispringen_01', '', 'inherit', 'closed', 'open', '', 'cristallo_ii_freispringen_01', '', '', '2014-02-26 11:48:23', '2014-02-26 11:48:23', '', 4971, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Cristallo_II_Freispringen_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4987, 1, '2014-02-26 11:48:43', '2014-02-26 11:48:43', '', 'Cristallo_II_Galopp_Recki_01', '', 'inherit', 'closed', 'open', '', 'cristallo_ii_galopp_recki_01', '', '', '2014-02-26 11:48:43', '2014-02-26 11:48:43', '', 4971, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Cristallo_II_Galopp_Recki_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4988, 1, '2014-02-26 11:49:17', '2014-02-26 11:49:17', '', 'CristalloII_Trab_4_01', '', 'inherit', 'closed', 'open', '', 'cristalloii_trab_4_01', '', '', '2014-02-26 11:49:17', '2014-02-26 11:49:17', '', 4971, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/CristalloII_Trab_4_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4990, 1, '2014-02-26 11:53:20', '2014-02-26 11:53:20', '

KWPN - bay - 2004 - 16.3 hands

\r\n\r\nApproved for Oldenburg, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.\r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €*(FS + TG)\r\n\r\nFresh semen shipping within Germany!\r\n\r\n\r\nA fabulously moving sunny boy with a remarkable outcross pedigree – that’s Florenciano!\r\n\r\nFlorenciano was licensed in 2006 in Münster-Handorf, won his 30-day test in 2007 (guest rider 10.0) and then won the prestigious Optimum in 2008. These achievements were followed by qualification for the Bundeschampionat and many victories in dressage up to medium (M) level. In 2011 at the age of seven, his first victories in St. Georges dressage tests were added. The Olympic winning rider, Hubertus Schmidt, has taken over Florenciano’s further training. \r\n\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nFlorenciano’s debut as a sire was brilliant. In keeping with his outstanding first foal crops, his daughter Feine Rosa took the 2011 Champion Mare title at the German Elite Broodmare Championships as well as the Rhineland Champion Mare title, his daughter Florenciana F became the Westphalian Champion Mare and his daughter For Comtess won the Westphalian Championships, the Westphalian Wappen and also participated in the Bundeschampionat Final. Three of his sons were licensed, including the 2012 NRW premium stallion, Farbenspiel. His offspring are off to a highly promising start in basic tests for youngsters. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire is the two-time World Champion of young dressage horses, Florencio I.\r\n\r\nFlorenciano’s highly decorated dam line originated in the Netherlands. His dam St.Pr.St. Lundi T won eight medium (M) level dressage tests and received “performance mare dressage” status. The dam’s sire Havidoff, by the Grand Prix stallion Clavecimbel, was awarded “keur” status. Many of his offspring win ribbons at Grand Prix level such as his licensed son, Paganini. Granddam Anuska produced several horses that were successful in dressage rings. \r\n\r\nThe performance dominate dam line also produced the licensed Zoöloog (by Gondolier) who has placed in international dressage competitions, the world class show jumper Mister Spoon (by Zadoc)/Candice King/USA and Nietje (by Ziehim), who took gold on the Dutch team at the 2006 World Equestrian Games in Aachen in Koos de Ronde’s driving team of four as well as many State Premium mares and auction horses.\r\n\r\n', 'Florenciano', '', 'publish', 'closed', 'closed', '', 'florenciano', '', '', '2014-02-26 11:55:54', '2014-02-26 11:55:54', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=4990', 0, 'drg_horse', '', 0), +(4991, 1, '2014-02-26 11:53:20', '2014-02-26 11:53:20', '

KWPN - bay - 2004 - 16.3 hands

\r\n\r\nApproved for Oldenburg, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.\r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €*(FS + TG)\r\n\r\nFresh semen shipping within Germany!\r\n\r\n\r\nA fabulously moving sunny boy with a remarkable outcross pedigree – that’s Florenciano!\r\n\r\nFlorenciano was licensed in 2006 in Münster-Handorf, won his 30-day test in 2007 (guest rider 10.0) and then won the prestigious Optimum in 2008. These achievements were followed by qualification for the Bundeschampionat and many victories in dressage up to medium (M) level. In 2011 at the age of seven, his first victories in St. Georges dressage tests were added. The Olympic winning rider, Hubertus Schmidt, has taken over Florenciano’s further training. \r\n\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nFlorenciano’s debut as a sire was brilliant. In keeping with his outstanding first foal crops, his daughter Feine Rosa took the 2011 Champion Mare title at the German Elite Broodmare Championships as well as the Rhineland Champion Mare title, his daughter Florenciana F became the Westphalian Champion Mare and his daughter For Comtess won the Westphalian Championships, the Westphalian Wappen and also participated in the Bundeschampionat Final. Three of his sons were licensed, including the 2012 NRW premium stallion, Farbenspiel. His offspring are off to a highly promising start in basic tests for youngsters. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire is the two-time World Champion of young dressage horses, Florencio I.\r\n\r\nFlorenciano’s highly decorated dam line originated in the Netherlands. His dam St.Pr.St. Lundi T won eight medium (M) level dressage tests and received “performance mare dressage” status. The dam’s sire Havidoff, by the Grand Prix stallion Clavecimbel, was awarded “keur” status. Many of his offspring win ribbons at Grand Prix level such as his licensed son, Paganini. Granddam Anuska produced several horses that were successful in dressage rings. \r\n\r\nThe performance dominate dam line also produced the licensed Zoöloog (by Gondolier) who has placed in international dressage competitions, the world class show jumper Mister Spoon (by Zadoc)/Candice King/USA and Nietje (by Ziehim), who took gold on the Dutch team at the 2006 World Equestrian Games in Aachen in Koos de Ronde’s driving team of four as well as many State Premium mares and auction horses.\r\n\r\n', 'Florenciano', '', 'inherit', 'closed', 'open', '', '4990-revision-v1', '', '', '2014-02-26 11:53:20', '2014-02-26 11:53:20', '', 4990, 'http://127.0.0.1:4001/wordpress/4990-revision-v1/', 0, 'revision', '', 0), +(4992, 1, '2014-02-26 11:53:47', '2014-02-26 11:53:47', '', 'Florenciano_Burger_Trabbild_1_01', '', 'inherit', 'closed', 'open', '', 'florenciano_burger_trabbild_1_01', '', '', '2014-02-26 11:53:47', '2014-02-26 11:53:47', '', 4990, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Florenciano_Burger_Trabbild_1_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4993, 1, '2014-02-26 11:53:59', '2014-02-26 11:53:59', '', 'Florenciano_Kampmann_Galopp_01', '', 'inherit', 'closed', 'open', '', 'florenciano_kampmann_galopp_01', '', '', '2014-02-26 11:53:59', '2014-02-26 11:53:59', '', 4990, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Florenciano_Kampmann_Galopp_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4994, 1, '2014-02-26 11:56:19', '2014-02-26 11:56:19', '

KWPN - chestnut - 2004 - 16,2 hands

\r\n\r\nApproved for: Westfalen, Rheinland, OS, Hannover, alle süddeutschen Verbände. Other verbands on request.\r\nInsemination fee: 1000€* + In-foal fee: 1000€* (FS+TG)\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\n2012 eighth in his first World Cup in Stuttgart after winning a number of tests in the international Youngster Tour. Placed in 2013, as a nine-year old, among the best in Chantilly/FRA, Neumünster/GER, Aachen/GER and `s Hertogenbosch/NED. His sire Guidam (by Quidam de Revel) produced many championship offspring. Dam`s sire Heartbreaker is the fourth-best-jumper-maker. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nFlorenciano’s debut as a sire was brilliant. In keeping with his outstanding first foal crops, his daughter Feine Rosa took the 2011 Champion Mare title at the German Elite Broodmare Championships as well as the Rhineland Champion Mare title, his daughter Florenciana F became the Westphalian Champion Mare and his daughter For Comtess won the Westphalian Championships, the Westphalian Wappen and also participated in the Bundeschampionat Final. Three of his sons were licensed, including the 2012 NRW premium stallion, Farbenspiel. His offspring are off to a highly promising start in basic tests for youngsters. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire is the two-time World Champion of young dressage horses, Florencio I.\r\n\r\nFlorenciano’s highly decorated dam line originated in the Netherlands. His dam St.Pr.St. Lundi T won eight medium (M) level dressage tests and received “performance mare dressage” status. The dam’s sire Havidoff, by the Grand Prix stallion Clavecimbel, was awarded “keur” status. Many of his offspring win ribbons at Grand Prix level such as his licensed son, Paganini. Granddam Anuska produced several horses that were successful in dressage rings. \r\n\r\nThe performance dominate dam line also produced the licensed Zoöloog (by Gondolier) who has placed in international dressage competitions, the world class show jumper Mister Spoon (by Zadoc)/Candice King/USA and Nietje (by Ziehim), who took gold on the Dutch team at the 2006 World Equestrian Games in Aachen in Koos de Ronde’s driving team of four as well as many State Premium mares and auction horses.\r\n\r\n', 'Zinedine', '', 'publish', 'closed', 'closed', '', 'zinedine', '', '', '2014-02-26 11:57:51', '2014-02-26 11:57:51', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=4994', 0, 'drg_horse', '', 0), +(4995, 1, '2014-02-26 11:54:27', '2014-02-26 11:54:27', '', 'Florenciano_Portrait_Recki_05', '', 'inherit', 'closed', 'open', '', 'florenciano_portrait_recki_05', '', '', '2014-02-26 11:54:27', '2014-02-26 11:54:27', '', 4990, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Florenciano_Portrait_Recki_05.jpg', 0, 'attachment', 'image/jpeg', 0), +(4996, 1, '2014-02-26 11:54:40', '2014-02-26 11:54:40', '', 'Florenciano_Standbild_Recki_01', '', 'inherit', 'closed', 'open', '', 'florenciano_standbild_recki_01', '', '', '2014-02-26 11:54:40', '2014-02-26 11:54:40', '', 4990, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Florenciano_Standbild_Recki_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4997, 1, '2014-02-26 11:55:00', '2014-02-26 11:55:00', '', 'Galopp_07', '', 'inherit', 'closed', 'open', '', 'galopp_07', '', '', '2014-02-26 11:55:00', '2014-02-26 11:55:00', '', 4990, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Galopp_07.jpg', 0, 'attachment', 'image/jpeg', 0), +(4998, 1, '2014-02-26 11:55:04', '2014-02-26 11:55:04', '', 'Starparade_Koerung_Galopp2_01', '', 'inherit', 'closed', 'open', '', 'starparade_koerung_galopp2_01', '', '', '2014-02-26 11:55:04', '2014-02-26 11:55:04', '', 4990, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Starparade_Koerung_Galopp2_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(4999, 1, '2014-02-26 11:56:19', '2014-02-26 11:56:19', '

KWPN - chestnut - 2004 - 16,2 hands

\r\n\r\nApproved for: Westfalen, Rheinland, OS, Hannover, alle süddeutschen Verbände. Other verbands on request.\r\nInsemination fee: 1000€* + In-foal fee: 1000€* (FS+TG)\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\n2012 eighth in his first World Cup in Stuttgart after winning a number of tests in the international Youngster Tour. Placed in 2013, as a nine-year old, among the best in Chantilly/FRA, Neumünster/GER, Aachen/GER and `s Hertogenbosch/NED. His sire Guidam (by Quidam de Revel) produced many championship offspring. Dam`s sire Heartbreaker is the fourth-best-jumper-maker. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nFlorenciano’s debut as a sire was brilliant. In keeping with his outstanding first foal crops, his daughter Feine Rosa took the 2011 Champion Mare title at the German Elite Broodmare Championships as well as the Rhineland Champion Mare title, his daughter Florenciana F became the Westphalian Champion Mare and his daughter For Comtess won the Westphalian Championships, the Westphalian Wappen and also participated in the Bundeschampionat Final. Three of his sons were licensed, including the 2012 NRW premium stallion, Farbenspiel. His offspring are off to a highly promising start in basic tests for youngsters. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire is the two-time World Champion of young dressage horses, Florencio I.\r\n\r\nFlorenciano’s highly decorated dam line originated in the Netherlands. His dam St.Pr.St. Lundi T won eight medium (M) level dressage tests and received “performance mare dressage” status. The dam’s sire Havidoff, by the Grand Prix stallion Clavecimbel, was awarded “keur” status. Many of his offspring win ribbons at Grand Prix level such as his licensed son, Paganini. Granddam Anuska produced several horses that were successful in dressage rings. \r\n\r\nThe performance dominate dam line also produced the licensed Zoöloog (by Gondolier) who has placed in international dressage competitions, the world class show jumper Mister Spoon (by Zadoc)/Candice King/USA and Nietje (by Ziehim), who took gold on the Dutch team at the 2006 World Equestrian Games in Aachen in Koos de Ronde’s driving team of four as well as many State Premium mares and auction horses.\r\n\r\n', 'Zinedine', '', 'inherit', 'closed', 'open', '', '4994-revision-v1', '', '', '2014-02-26 11:56:19', '2014-02-26 11:56:19', '', 4994, 'http://127.0.0.1:4001/wordpress/4994-revision-v1/', 0, 'revision', '', 0), +(5000, 1, '2014-02-26 11:57:17', '2014-02-26 11:57:17', 'Hannover Messehallen 27.10.2012 Reitturnier German Classics hier Youngster-Springen mit Stechen: Ludger Beerbaum (GER) und Zinedine Foto: Julia Rau Am Schinnergraben 57 55129 Mainz Tel.: 06131-507751 Mobil: 0171-9517199 Rüsselsheimer Volksbank BLZ 500 930 00 Kto.: 6514006 Es gelten ausschliesslich meine Allgemeinen Geschäftsbedingungen', 'Hannover_jr_271012_0187_02', '', 'inherit', 'closed', 'open', '', 'hannover_jr_271012_0187_02', '', '', '2014-02-26 11:57:17', '2014-02-26 11:57:17', '', 4994, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Hannover_jr_271012_0187_02.jpg', 0, 'attachment', 'image/jpeg', 0), +(5001, 1, '2014-02-26 11:57:21', '2014-02-26 11:57:21', 'Stuttgart Schleyerhalle 14.11.2012 Internat. Reitturnier Stuttgart German Masters hier Erˆffnungsspringen (deutsche Reiter): Ludger Beerbaum (GER) und Zinedine Foto: ©Julia Rau Am Schinnergraben 57 55129 Mainz Tel.: 06131-507751 Mobil: 0171-9517199 R¸sselsheimer Volksbank BLZ 500 930 00 Kto.: 6514006 Es gelten ausschliesslich meine Allgemeinen Gesch‰ftsbedingungen', 'Stuttgart_jr_151112_0852_01', '', 'inherit', 'closed', 'open', '', 'stuttgart_jr_151112_0852_01', '', '', '2014-02-26 11:57:21', '2014-02-26 11:57:21', '', 4994, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Stuttgart_jr_151112_0852_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(5002, 1, '2014-02-26 11:57:23', '2014-02-26 11:57:23', '', 'Zinedine_Kopf_Riesenbeck_12_BECKER_10', '', 'inherit', 'closed', 'open', '', 'zinedine_kopf_riesenbeck_12_becker_10', '', '', '2014-02-26 11:57:23', '2014-02-26 11:57:23', '', 4994, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Zinedine_Kopf_Riesenbeck_12_BECKER_10.jpg', 0, 'attachment', 'image/jpeg', 0), +(5003, 1, '2014-02-26 11:57:31', '2014-02-26 11:57:31', '', 'Zinedine_Stand_2_Riesenbeck_12_BECKER_01', '', 'inherit', 'closed', 'open', '', 'zinedine_stand_2_riesenbeck_12_becker_01', '', '', '2014-02-26 11:57:31', '2014-02-26 11:57:31', '', 4994, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Zinedine_Stand_2_Riesenbeck_12_BECKER_01.jpg', 0, 'attachment', 'image/jpeg', 0), +(5033, 1, '2014-02-26 18:01:45', '2014-02-26 17:01:45', '[two_third last="no"]\r\n[title size="3"]Contact form[/title]\r\n[gravityform id="1" name="Contacto" ajax="true" title="false"]\r\n[/two_third]\r\n[one_third last="yes"]\r\n[title size="3"]Double R Group[/title]\r\n

[fontawesome icon="map-marker" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"] Calle de Almagro, 21, 28010 Madrid

\r\n

[fontawesome icon="phone" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]+34 619 686 633

\r\n

[fontawesome icon="envelope" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]info@doublergroup.com

\r\n

[fontawesome icon="globe" circle="no" size="medium" iconcolor="#295e81" circlecolor="" circlebordercolor="" animation_type="0" animation_direction="down" animation_speed="0.1"]www.doublergroup.com

\r\n[/one_third]\r\n', 'Contact', '', 'inherit', 'closed', 'open', '', '5031-revision-v1', '', '', '2014-02-26 18:01:45', '2014-02-26 17:01:45', '', 5031, 'http://127.0.0.1:4001/wordpress/5031-revision-v1/', 0, 'revision', '', 0), +(5034, 1, '2014-02-26 18:02:10', '2014-02-26 17:02:10', ' ', '', '', 'publish', 'closed', 'open', '', '5034', '', '', '2014-02-26 18:02:10', '2014-02-26 17:02:10', '', 0, 'http://127.0.0.1:4001/wordpress/5034/', 2, 'nav_menu_item', '', 0), +(5035, 1, '2014-02-26 18:02:10', '2014-02-26 17:02:10', ' ', '', '', 'publish', 'closed', 'open', '', '5035', '', '', '2014-02-26 18:02:10', '2014-02-26 17:02:10', '', 0, 'http://127.0.0.1:4001/wordpress/5035/', 3, 'nav_menu_item', '', 0), +(5036, 1, '2014-02-26 18:02:10', '2014-02-26 17:02:10', ' ', '', '', 'publish', 'closed', 'open', '', '5036', '', '', '2014-02-26 18:02:10', '2014-02-26 17:02:10', '', 0, 'http://127.0.0.1:4001/wordpress/5036/', 6, 'nav_menu_item', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(5037, 1, '2014-02-18 15:02:59', '2014-02-18 15:02:59', '[separator top="-55"]\r\n[fullwidth bordersize="0"]\r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40" style="shadow"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]', 'Inicio', '', 'publish', 'open', 'open', '', 'inicio', '', '', '2014-02-28 13:12:08', '2014-02-28 12:12:08', '', 0, 'http://127.0.0.1:4001/wordpress/?page_id=5037', 0, 'page', '', 0), +(5038, 1, '2014-02-26 18:09:17', '2014-02-26 17:09:17', '[separator top="-55"]\r\n\r\n[fullwidth bordersize="0"]\r\n\r\n \r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40" style="shadow"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]', 'Homepage', '', 'inherit', 'closed', 'open', '', '5037-revision-v1', '', '', '2014-02-26 18:09:17', '2014-02-26 17:09:17', '', 5037, 'http://127.0.0.1:4001/wordpress/5037-revision-v1/', 0, 'revision', '', 0), +(5039, 1, '2014-02-26 18:57:29', '2014-02-26 17:57:29', '[separator top="-20"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Santaynez.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/03_bannerhome_allotjament_2.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/09_bannerhome_caballo_1.jpg[/slide][/slider]\r\n[separator top="-30" style="none"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="3"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="3"]Localización[/title]\r\n\r\nInstalaciones en la Comunidad de Madrid\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="3"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]', 'Instalaciones', '', 'inherit', 'closed', 'open', '', '4824-revision-v1', '', '', '2014-02-26 18:57:29', '2014-02-26 17:57:29', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(5040, 1, '2014-02-26 19:04:16', '2014-02-26 18:04:16', ' ', '', '', 'publish', 'closed', 'open', '', '5040', '', '', '2014-02-26 19:04:16', '2014-02-26 18:04:16', '', 0, 'http://127.0.0.1:4001/wordpress/?p=5040', 1, 'nav_menu_item', '', 0), +(5041, 1, '2014-02-26 19:04:16', '2014-02-26 18:04:16', ' ', '', '', 'publish', 'closed', 'open', '', '5041', '', '', '2014-02-26 19:04:16', '2014-02-26 18:04:16', '', 0, 'http://127.0.0.1:4001/wordpress/?p=5041', 2, 'nav_menu_item', '', 0), +(5042, 1, '2014-02-26 19:04:16', '2014-02-26 18:04:16', ' ', '', '', 'publish', 'closed', 'open', '', '5042', '', '', '2014-02-26 19:04:16', '2014-02-26 18:04:16', '', 0, 'http://127.0.0.1:4001/wordpress/?p=5042', 3, 'nav_menu_item', '', 0), +(5043, 1, '2014-02-26 19:04:16', '2014-02-26 18:04:16', ' ', '', '', 'publish', 'closed', 'open', '', '5043', '', '', '2014-02-26 19:04:16', '2014-02-26 18:04:16', '', 0, 'http://127.0.0.1:4001/wordpress/?p=5043', 4, 'nav_menu_item', '', 0), +(5044, 1, '2014-02-26 19:04:16', '2014-02-26 18:04:16', ' ', '', '', 'publish', 'closed', 'open', '', '5044', '', '', '2014-02-26 19:04:16', '2014-02-26 18:04:16', '', 0, 'http://127.0.0.1:4001/wordpress/?p=5044', 5, 'nav_menu_item', '', 0), +(5045, 1, '2013-12-12 19:29:42', '2013-12-12 18:29:42', 'Kullen and Clarucci are both sons of Clarence that were approved for studbooks as BWP en Holstein. This year they are getting 4 years old and the stallion competition at Sentower Park was their first official competition. They both made very nice clear rounds. The videos will come online later.', 'First competition for Kullen and Clarucci', '', 'publish', 'closed', 'open', '', 'first-competition-for-kullen-and-clarucci', '', '', '2014-02-26 19:59:08', '2014-02-26 18:59:08', '', 0, 'http://127.0.0.1:4001/wordpress/?p=5045', 0, 'post', '', 0), +(5046, 1, '2014-02-26 19:29:42', '2014-02-26 18:29:42', 'Kullen and Clarucci are both sons of Clarence that were approved for studbooks as BWP en Holstein. This year they are getting 4 years old and the stallion competition at Sentower Park was their first official competition. They both made very nice clear rounds. The videos will come online later.', 'First competition for Kullen and Clarucci', '', 'inherit', 'closed', 'open', '', '5045-revision-v1', '', '', '2014-02-26 19:29:42', '2014-02-26 18:29:42', '', 5045, 'http://127.0.0.1:4001/wordpress/5045-revision-v1/', 0, 'revision', '', 0), +(5047, 1, '2014-02-26 19:35:31', '2014-02-26 18:35:31', '', 'fondo', '', 'inherit', 'closed', 'open', '', 'fondo', '', '', '2014-02-26 19:35:31', '2014-02-26 18:35:31', '', 11, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/fondo.jpg', 0, 'attachment', 'image/jpeg', 0), +(5048, 1, '2014-01-26 19:58:18', '2014-01-26 18:58:18', 'Inar ya mostró sus habilidades de salto en la aprobación BWP a principios de este año y ahora lo ha confirmado durante el CSI de Lummen donde realizó recorridos sin falta con Nick Vrins.\r\n\r\n', 'Inar comienza bien en la temporada al aire libre', '', 'publish', 'closed', 'open', '', 'inar-comienza-bien-en-la-temporada-al-aire-libre', '', '', '2014-02-26 19:58:42', '2014-02-26 18:58:42', '', 0, 'http://127.0.0.1:4001/wordpress/?p=5048', 0, 'post', '', 0), +(5049, 1, '2014-02-26 19:58:18', '2014-02-26 18:58:18', 'Inar ya mostró sus habilidades de salto en la aprobación BWP a principios de este año y ahora lo ha confirmado durante el CSI de Lummen donde realizó recorridos sin falta con Nick Vrins.\r\n\r\n', 'Inar comienza bien en la temporada al aire libre', '', 'inherit', 'closed', 'open', '', '5048-revision-v1', '', '', '2014-02-26 19:58:18', '2014-02-26 18:58:18', '', 5048, 'http://127.0.0.1:4001/wordpress/5048-revision-v1/', 0, 'revision', '', 0), +(5050, 1, '2014-02-26 19:58:55', '2014-02-26 18:58:55', 'Bienvenido a WordPress. Esta es tu primera entrada. Edítala o bórrala, ¡y comienza a publicar!.', '¡Hola mundo!', '', 'inherit', 'closed', 'open', '', '1-revision-v1', '', '', '2014-02-26 19:58:55', '2014-02-26 18:58:55', '', 1, 'http://127.0.0.1:4001/wordpress/1-revision-v1/', 0, 'revision', '', 0), +(5051, 1, '2014-01-09 19:59:17', '2014-01-09 18:59:17', 'After a small period of rest a after the busy breeding season of last year Cumthago retook the competitions. He finished last season with winning the final of the Belgian championship for 4 year old horses LRV. This winter he made already two stallion competitions. Last week he made a nice clear round in Hulsterlo and this weekend he jumped again clear in the WEN competition. He is ex aequo first in the total ranking for the moment.', 'Cumthago again clear in stallion competition', '', 'publish', 'closed', 'open', '', 'cumthago-again-clear-in-stallion-competition', '', '', '2014-02-26 20:00:19', '2014-02-26 19:00:19', '', 0, 'http://127.0.0.1:4001/wordpress/?p=5051', 0, 'post', '', 0), +(5052, 1, '2014-02-26 20:00:19', '2014-02-26 19:00:19', 'After a small period of rest a after the busy breeding season of last year Cumthago retook the competitions. He finished last season with winning the final of the Belgian championship for 4 year old horses LRV. This winter he made already two stallion competitions. Last week he made a nice clear round in Hulsterlo and this weekend he jumped again clear in the WEN competition. He is ex aequo first in the total ranking for the moment.', 'Cumthago again clear in stallion competition', '', 'inherit', 'closed', 'open', '', '5051-revision-v1', '', '', '2014-02-26 20:00:19', '2014-02-26 19:00:19', '', 5051, 'http://127.0.0.1:4001/wordpress/5051-revision-v1/', 0, 'revision', '', 0), +(5053, 1, '2014-02-03 20:00:28', '2014-02-03 19:00:28', 'El pasado fin de semana, algunos de nuestros sementales compitieron en el circuito de Belgica en Heusden con buenos resultados. En la categoría de 4 años, Quirow C (Quidam de revel) y Copitol C (Contender) hicieron doble recorridos sin falta en lo que fue el primer concurso de ambos semantales. En 5 años, Condor C (Cassini I), Figaro C (Berlin) y Cassinger C ( Cassini I) también hicieron recorridos sin falta y todos mostraron un gran potencial para el futuro…', 'Algunos de nuestros sementales en Bélgica', '', 'publish', 'closed', 'open', '', 'algunos-de-nuestros-sementales-en-belgica', '', '', '2014-02-26 20:01:28', '2014-02-26 19:01:28', '', 0, 'http://127.0.0.1:4001/wordpress/?p=5053', 0, 'post', '', 0), +(5054, 1, '2014-02-26 20:01:28', '2014-02-26 19:01:28', 'El pasado fin de semana, algunos de nuestros sementales compitieron en el circuito de Belgica en Heusden con buenos resultados. En la categoría de 4 años, Quirow C (Quidam de revel) y Copitol C (Contender) hicieron doble recorridos sin falta en lo que fue el primer concurso de ambos semantales. En 5 años, Condor C (Cassini I), Figaro C (Berlin) y Cassinger C ( Cassini I) también hicieron recorridos sin falta y todos mostraron un gran potencial para el futuro…', 'Algunos de nuestros sementales en Bélgica', '', 'inherit', 'closed', 'open', '', '5053-revision-v1', '', '', '2014-02-26 20:01:28', '2014-02-26 19:01:28', '', 5053, 'http://127.0.0.1:4001/wordpress/5053-revision-v1/', 0, 'revision', '', 0), +(5056, 1, '2014-02-26 20:05:14', '2014-02-26 19:05:14', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8"]\r\n

Double R Group

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-26 20:05:14', '2014-02-26 19:05:14', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5055, 1, '2014-02-26 20:04:44', '2014-02-26 19:04:44', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#fff"]\r\n

Double R Group

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[separator top="10" style="shadow"]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-26 20:04:44', '2014-02-26 19:04:44', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5057, 1, '2014-02-26 20:05:39', '2014-02-26 19:05:39', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8"]\r\n

Double R Group

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-26 20:05:39', '2014-02-26 19:05:39', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5058, 1, '2014-02-26 20:05:58', '2014-02-26 19:05:58', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8"]\r\n

Double R Group

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-26 20:05:58', '2014-02-26 19:05:58', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5059, 1, '2014-02-26 20:06:26', '2014-02-26 19:06:26', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8"]\r\n

Double R Group

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-26 20:06:26', '2014-02-26 19:06:26', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5060, 1, '2014-02-26 20:06:37', '2014-02-26 19:06:37', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n

Double R Group

\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc porta lacus vel aliquam imperdiet. Nunc fermentum felis metus, quis pharetra felis sagittis vitae. Aliquam erat volutpat. Proin lacinia bibendum gravida. Vestibulum ultrices vel velit sit amet suscipit.

\r\n\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-26 20:06:37', '2014-02-26 19:06:37', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5062, 1, '2014-02-26 20:11:22', '2014-02-26 19:11:22', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="3"]Nuestros sementales[/title]\r\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\r\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\r\n[/one_half]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-26 20:11:22', '2014-02-26 19:11:22', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5061, 1, '2014-02-26 20:07:18', '2014-02-26 19:07:18', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-26 20:07:18', '2014-02-26 19:07:18', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(5063, 1, '2014-02-26 20:13:15', '2014-02-26 19:13:15', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="3"]Nuestros sementales[/title]\r\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\r\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\r\n[/one_half]\r\n[separator top="55"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="3"]Nuestras yeguas[/title]\r\nPara poder cumplir nuestro objetivo, todas las yeguas han sido seleccionadas muy cuidadosamente entre las mejores familias maternas para producir potros que serán destinados a competir en el máximo nivel internacional.\r\n[/one_half]\r\n\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-26 20:13:15', '2014-02-26 19:13:15', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5066, 1, '2014-02-27 16:17:15', '2014-02-27 15:17:15', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n\r\n[/fullwidth]\r\n\r\n\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
horse-021-1024x654
\r\n[/one_third ]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestros sementales[/title]\r\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\r\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\r\n[/two_third]\r\n[separator top="55"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestras yeguas[/title]\r\nPara poder cumplir nuestro objetivo, todas las yeguas han sido seleccionadas muy cuidadosamente entre las mejores familias maternas para producir potros que serán destinados a competir en el máximo nivel internacional.\r\n[/two_third]\r\n\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-27 16:17:15', '2014-02-27 15:17:15', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5067, 1, '2014-02-27 16:19:10', '2014-02-27 15:19:10', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
horse-021-1024x654
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestros sementales[/title]\r\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\r\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\r\n[/two_third] \r\n[separator top="55"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestras yeguas[/title]\r\nPara poder cumplir nuestro objetivo, todas las yeguas han sido seleccionadas muy cuidadosamente entre las mejores familias maternas para producir potros que serán destinados a competir en el máximo nivel internacional.\r\n[/two_third]\r\n\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-27 16:19:10', '2014-02-27 15:19:10', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5068, 1, '2014-02-27 16:20:32', '2014-02-27 15:20:32', '', 'Yegua', '', 'inherit', 'closed', 'open', '', 'caballo-yegua-con-su-cria-o-potro-bebe-equinos', '', '', '2014-02-27 16:20:32', '2014-02-27 15:20:32', '', 4623, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/caballo-yegua-con-su-cria-o-potro-bebe-equinos.jpg', 0, 'attachment', 'image/jpeg', 0), +(5069, 1, '2014-02-27 16:20:51', '2014-02-27 15:20:51', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/bkgd11-300x173.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
horse-021-1024x654
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestros sementales[/title]\r\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\r\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\r\n[/two_third] \r\n[separator top="55"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
Yegua
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestras yeguas[/title]\r\nPara poder cumplir nuestro objetivo, todas las yeguas han sido seleccionadas muy cuidadosamente entre las mejores familias maternas para producir potros que serán destinados a competir en el máximo nivel internacional.\r\n[/two_third]\r\n\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-27 16:20:51', '2014-02-27 15:20:51', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5070, 1, '2014-02-27 16:21:44', '2014-02-27 15:21:44', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="100" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
horse-021-1024x654
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestros sementales[/title]\r\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\r\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\r\n[/two_third] \r\n[separator top="55"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
Yegua
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestras yeguas[/title]\r\nPara poder cumplir nuestro objetivo, todas las yeguas han sido seleccionadas muy cuidadosamente entre las mejores familias maternas para producir potros que serán destinados a competir en el máximo nivel internacional.\r\n[/two_third]\r\n\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-27 16:21:44', '2014-02-27 15:21:44', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5071, 1, '2014-02-27 16:22:18', '2014-02-27 15:22:18', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" image_width="300" image_height="200" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="200" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="200" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
horse-021-1024x654
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestros sementales[/title]\r\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\r\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\r\n[/two_third] \r\n[separator top="55"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
Yegua
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestras yeguas[/title]\r\nPara poder cumplir nuestro objetivo, todas las yeguas han sido seleccionadas muy cuidadosamente entre las mejores familias maternas para producir potros que serán destinados a competir en el máximo nivel internacional.\r\n[/two_third]\r\n\r\n[/fullwidth]\r\n[separator top="-55"]', 'Nosotros', '', 'inherit', 'closed', 'open', '', '4623-revision-v1', '', '', '2014-02-27 16:22:18', '2014-02-27 15:22:18', '', 4623, 'http://127.0.0.1:4001/wordpress/4623-revision-v1/', 0, 'revision', '', 0), +(5072, 1, '2014-02-27 16:25:55', '2014-02-27 15:25:55', '[separator top="-55" style="none"]\r\n[fullwidth bordersize="0" paddingTop="20px" paddingBottom="20px" backgroundcolor="#f8f8f8" bordersize="1px" bordercolor="#e5e4e4"]\r\n[one_half last="no"]\r\n[separator top="50"]\r\n
Equipo
\r\n[/one_half]\r\n[one_half last="yes"]\r\n[title size="2"]Filosofía[/title]\r\nLid est laborum dolo rumes fugats untras. Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore dolore magnm aliquam quaerat voluptatem.\r\n[/one_half]\r\n[/fullwidth]\r\n\r\n[separator top="20"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n[separator top="10"]\r\n[content_boxes layout="icon-on-top" iconcolor="" circlecolor="" circlebordercolor="" backgroundcolor=""]\r\n[content_box title="Nuestras instalaciones" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" image_width="300" image_height="200" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Cuidado de los caballos" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-03-1024x654.jpg" image_width="300" image_height="200" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[content_box title="Personal cualificado" icon="" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/horse-011-1024x654.jpg" image_width="300" image_height="200" link="http://127.0.0.1:4001/wordpress/?page_id=4623#" linktarget="_self" linktext="" animation_type="0" animation_direction="down" animation_speed="0.1"]Etharums ser quidem rerum facilis dolores nemis omnis fugats vitaes nemo minima rerums unsers sadips amets.[/content_box]\r\n\r\n[/content_boxes]\r\n[separator top="55"]\r\n[/fullwidth]\r\n\r\n[separator top="10"]\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
horse-021-1024x654
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestros sementales[/title]\r\nNuestro objetivo es tener un grupo de sementales competitivos en la competición e interesante para la cría. Intentamos que el semental sea lo más completo posible para los criadores. Hemos buscado los sementales entre los mejores orígenes, siempre con un buen físico y buenos movimientos que permitan que el semental tenga una gran capacidad para saltar.\r\nDurante la temporada de cubriciones, los sementales combinan sus tareas de reproducción con la competición, e intentamos ofrecer un buen servicio a los criadores. Para la extracción y manipulación del semen, la Yeguada Campos posee las últimas tecnologías que nos permiten enviar semen fresco y congelado a cualquier punto de Europa en menos de 24 horas.\r\n[/two_third] \r\n[separator top="55"]\r\n[one_third last="no"]\r\n[separator top="50"]\r\n
Yegua
\r\n[/one_third]\r\n[two_third last="yes"]\r\n[title size="3"]Nuestras yeguas[/title]\r\nPara poder cumplir nuestro objetivo, todas las yeguas han sido seleccionadas muy cuidadosamente entre las mejores familias maternas para producir potros que serán destinados a competir en el máximo nivel internacional.\r\n[/two_third]\r\n\r\n[/fullwidth]\r\n[separator top="-55"]', 'About us', '', 'inherit', 'closed', 'open', '', '5005-revision-v1', '', '', '2014-02-27 16:25:55', '2014-02-27 15:25:55', '', 5005, 'http://127.0.0.1:4001/wordpress/5005-revision-v1/', 0, 'revision', '', 0), +(5073, 1, '2014-02-26 11:56:19', '2014-02-26 11:56:19', '

KWPN - chestnut - 2004 - 16,2 hands

\r\n\r\nApproved for: Westfalen, Rheinland, OS, Hannover, alle süddeutschen Verbände. Other verbands on request.\r\nInsemination fee: 1000€* + In-foal fee: 1000€* (FS+TG)\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\n2012 eighth in his first World Cup in Stuttgart after winning a number of tests in the international Youngster Tour. Placed in 2013, as a nine-year old, among the best in Chantilly/FRA, Neumünster/GER, Aachen/GER and `s Hertogenbosch/NED. His sire Guidam (by Quidam de Revel) produced many championship offspring. Dam`s sire Heartbreaker is the fourth-best-jumper-maker. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nFlorenciano’s debut as a sire was brilliant. In keeping with his outstanding first foal crops, his daughter Feine Rosa took the 2011 Champion Mare title at the German Elite Broodmare Championships as well as the Rhineland Champion Mare title, his daughter Florenciana F became the Westphalian Champion Mare and his daughter For Comtess won the Westphalian Championships, the Westphalian Wappen and also participated in the Bundeschampionat Final. Three of his sons were licensed, including the 2012 NRW premium stallion, Farbenspiel. His offspring are off to a highly promising start in basic tests for youngsters. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire is the two-time World Champion of young dressage horses, Florencio I.\r\n\r\nFlorenciano’s highly decorated dam line originated in the Netherlands. His dam St.Pr.St. Lundi T won eight medium (M) level dressage tests and received “performance mare dressage” status. The dam’s sire Havidoff, by the Grand Prix stallion Clavecimbel, was awarded “keur” status. Many of his offspring win ribbons at Grand Prix level such as his licensed son, Paganini. Granddam Anuska produced several horses that were successful in dressage rings. \r\n\r\nThe performance dominate dam line also produced the licensed Zoöloog (by Gondolier) who has placed in international dressage competitions, the world class show jumper Mister Spoon (by Zadoc)/Candice King/USA and Nietje (by Ziehim), who took gold on the Dutch team at the 2006 World Equestrian Games in Aachen in Koos de Ronde’s driving team of four as well as many State Premium mares and auction horses.\r\n\r\n', 'Zinedine', '', 'draft', 'closed', 'closed', '', 'zinedine', '', '', '2014-02-26 11:56:19', '2014-02-26 11:56:19', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=5073', 0, 'drg_horse', '', 0), +(5074, 1, '2014-02-26 11:53:20', '2014-02-26 11:53:20', '

KWPN - bay - 2004 - 16.3 hands

\r\n\r\nApproved for Oldenburg, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.\r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €*(FS + TG)\r\n\r\nFresh semen shipping within Germany!\r\n\r\n\r\nA fabulously moving sunny boy with a remarkable outcross pedigree – that’s Florenciano!\r\n\r\nFlorenciano was licensed in 2006 in Münster-Handorf, won his 30-day test in 2007 (guest rider 10.0) and then won the prestigious Optimum in 2008. These achievements were followed by qualification for the Bundeschampionat and many victories in dressage up to medium (M) level. In 2011 at the age of seven, his first victories in St. Georges dressage tests were added. The Olympic winning rider, Hubertus Schmidt, has taken over Florenciano’s further training. \r\n\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nFlorenciano’s debut as a sire was brilliant. In keeping with his outstanding first foal crops, his daughter Feine Rosa took the 2011 Champion Mare title at the German Elite Broodmare Championships as well as the Rhineland Champion Mare title, his daughter Florenciana F became the Westphalian Champion Mare and his daughter For Comtess won the Westphalian Championships, the Westphalian Wappen and also participated in the Bundeschampionat Final. Three of his sons were licensed, including the 2012 NRW premium stallion, Farbenspiel. His offspring are off to a highly promising start in basic tests for youngsters. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire is the two-time World Champion of young dressage horses, Florencio I.\r\n\r\nFlorenciano’s highly decorated dam line originated in the Netherlands. His dam St.Pr.St. Lundi T won eight medium (M) level dressage tests and received “performance mare dressage” status. The dam’s sire Havidoff, by the Grand Prix stallion Clavecimbel, was awarded “keur” status. Many of his offspring win ribbons at Grand Prix level such as his licensed son, Paganini. Granddam Anuska produced several horses that were successful in dressage rings. \r\n\r\nThe performance dominate dam line also produced the licensed Zoöloog (by Gondolier) who has placed in international dressage competitions, the world class show jumper Mister Spoon (by Zadoc)/Candice King/USA and Nietje (by Ziehim), who took gold on the Dutch team at the 2006 World Equestrian Games in Aachen in Koos de Ronde’s driving team of four as well as many State Premium mares and auction horses.\r\n\r\n', 'Florenciano', '', 'draft', 'closed', 'closed', '', 'florenciano', '', '', '2014-02-26 11:53:20', '2014-02-26 11:53:20', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=5074', 0, 'drg_horse', '', 0), +(5075, 1, '2014-02-25 16:42:42', '2014-02-25 16:42:42', '

Westfale - grey - 2007 - 16.3 ½ hands

\r\n\r\nBreeder: Dr. Axel Schuerner, Nideggen, Germany \r\n\r\nApproved for Hanover, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.\r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n \r\n\r\nAlthough Cristallo I, who is also stationed in Riesenbeck, is already successful internationally, Cristallo II is just as good as his full brother in every way. In 2009 Cristallo II left the NRW licensing venue in Münster-Handorf as the celebrated jumper champion and passed his stallion performance test in 2010 at the same venue as the reserve champion jumper with high scores for his gaits and rideability. In 2011 he took silver at the Westphalian Championships (4-year olds) and in 2012 he qualified for the Bundeschampionat. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nCristallo II’s offspring exceeded all expectations. His foals are pleasing with their modern looks, generous lines and wonderfully supple movements. Many of them have been admitted to auctions. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Cornet Obolensky has considerably influenced modern-day jumper breeding. Just like the dam’s sire Cassini I, he has an outstanding performance and breeding record. \r\n\r\nCristallo’s dam Cassie placed in show jumping up to medium (M) level under her sport name Cascavella. Her son Cristallo I was a NRW premium stallion, won his stallion performance test, was Westphalian Jumper Champion, participated in the Bundeschampionat Finals twice and meanwhile wins ribbons in international competitions. \r\n\r\nHis granddam Profilda was successful in show jumping up to advanced (S) level under her sport name Papaya before she gave birth to a medium (M) level show jumper named Cosima (by Calido I). Profilda is a full sister of a licensed stallion named Pocalino (by Polydor), with whom Jens Dummeyer placed in international competitions, and of a medium (M) level show jumper named Paganini as well as a half-sister of the State Premium mares Leticia (by Lancer III) and Celestine (by Cornet Obolensky). The Westphalian Almfee line also produced the sires Apartos, Avocado, Ayers Rock, Disney, Papageno, Parlando I and II and Pastell as well as the 2009 Bundeschampion of four-year old mares and geldings, Preziosa.\r\n\r\nPerformance line of Almfee \r\n\r\n', 'Cristallo', '', 'draft', 'closed', 'closed', '', 'cristallo', '', '', '2014-02-25 16:42:42', '2014-02-25 16:42:42', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=5075', 0, 'drg_horse', '', 0); +INSERT INTO `drgrp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES +(5076, 1, '2014-02-25 16:42:42', '2014-02-25 16:42:42', '

Holstein, bay, Born: 2008, 169cm

\r\n\r\nInsemination fee: 700 €* (only frozen semen)\r\n\r\n \r\nAppproved for: Holstein, Oldenburg, Oldenburg-International, Westfalen and Rheinland. As well as all the South German Stud Books and the newly formed German States Stud Books.\r\n\r\n \r\n\r\nCarthano II was the celebrated premium sire at his approvals in Holstein in 2010, showing enormous ability in his paces, correct conformation, and an abundance of “stallion presence”. Carthano II also has an outstanding trot; this is due to his enormously powerful hind legs. He has a balanced consistent rhythm and large, flexible gaits. His jumping scope, good leg technique and quick reactions at the fence are eye-catching. With all these attributes, Carthano II is undisputedly one of the top stallions of his age group. \r\n\r\nIn 2011 Carthano II completed an excellent 30-day-test in Zweibrücken. He confirmed the high expectations by scoring 126 points in the “VA-Zuchtwert” for jumping. Also worth a mention was the deserved high points awarded for his well-tempered character and great attitude. \r\n\r\nCathano ll begins his preparation for the National Young Horse Championships in 2013 with his first show jumping events this coming season. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nWe are looking forward with great expectation to Carthano’s first foals in 2012. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nCarthano II´s sire, Contender won his stallion performance test in Adelheidsdorf in 1987. Over the years, the son of Calypso II has developed into a valued and highly regarded breeding stallion with over one hundred of his approved sons actively serving around the world today. Contender himself was a living legend. Amongst others he sired Checkmate/M. Michaels-Beerbaum, two-time winner of the Riders Tour and team European champion, as well as Montender/M. Kutscher who won two Olympic bronze medals in 2004 and two gold medals at the European Championships in San Patrignano (ITA) in 2005.\r\n\r\n \r\n\r\n \r\n\r\nThe dam’s sire Carthago began his career at the HolsteinVerband, he went on to participate at two Olympic Games with his rider Jos Lansink. He has sired over thirty approved stallions and many international top sport horses such as Cash ridden by Marco Kutscher. Carthago was ranked second in 2010 on the WBFSH-Ranking of the world’s best show jumping sires thanks to his successful offspring.\r\n\r\nCarthano II’s dam G-Catania produced the two full-brothers and approved stallions Carthano I and II as well as two stud book premium mares and four sport horses. Two of which, Phyllis and Paula, both sired by Cambridge have been successful in 1.40 and higher jumping classes. The third maternal dam, Mechthild sired by Sacramento Song xx produced three successful sport horses: Leonardo by Landmeister, Cartouche by Cardinal und Lasso by Landmeister.\r\n\r\nThe following approved stallions all come from the Holstein lineage 2067: Aconito (by Acorado), Canterburry (by Caletto I), Canturano I and II (by Canturo), Carthano I and II (by Contender), Con Caletto (by Contender), Con Spirito (by Contender), Cosido (by Cosimo), Cristino (by Caretino), Jaquino (by Jayadevo de Mackinac), Landstreicher (by Landgraf I), Lordon (by Lord), Masetto (by Montanus), Octavio (by Oglio), Rando (by Romino) and Sympatico (by Sacramento Song xx).\r\n\r\nAmongst the 490 currently registered sport horses are Landstreicher (by Landgraf I), Cazaro (by Chambertin), Claim Collin (by Corrado I) and Cool Man (by Contender) all successful up to S-level. \r\n\r\n', 'Carthano', '', 'draft', 'closed', 'closed', '', '4970', '', '', '2014-02-25 16:42:42', '2014-02-25 16:42:42', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=5076', 0, 'drg_horse', '', 0), +(5077, 1, '2014-02-25 16:42:42', '2014-02-25 16:42:42', '

Westphalian - dark brown - 2006 - 16.2 hands

\r\n\r\nAge: 03/06/2006\r\nGender: Colt\r\nColor: dark brown\r\nBreeder: Thomas Schindler, Fautenbach, Germany\r\n\r\nApproved for Mecklenburg, Rhineland, Westphalia and all Southern German Verbands. \r\nOther Verbands on request!\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy.\r\n\r\nOrders for fresh semen must be received by 9:00 a.m. the day before since the stallion is stationed in Italy!\r\n\r\n\r\nRepeating his performance in 2011, Black Jack again won the qualifier in Riesenbeck in 2012 and thus a ticket for the Bundeschampionat for show jumpers. This feat had been preceded by a series of ribbons in medium (M*) level tests for young show jumpers and medium (M**) level show jumping tests. \r\n\r\nClearly refined by his dam’s Thoroughbred sire Heraldik xx, the gorgeous, patent leather black Black Jack was one of the highlights at the 18th NRW licensing in Münster-Handorf in 2008. \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Black Jack', '', 'draft', 'closed', 'closed', '', 'black-jack', '', '', '2014-02-25 16:42:42', '2014-02-25 16:42:42', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=5077', 0, 'drg_horse', '', 0), +(5078, 1, '2014-02-25 16:41:50', '2014-02-25 16:41:50', '

Holsteiner - Line 4705 - bay - 2003 - 16.3 ½ hands

\r\nBreeder: Peter Böge, Schönhorst, Germany\r\n\r\nApproved for Hanover, Holstein, OS, Mecklenburg, Rhineland, Westphalia and all Southern German Verbands.as well as Denmark, Sweden and France.\r\n\r\nInsemination fee: 500 €* + In-foal fee: 500 €* (FS + TG)\r\n\r\nForeign customers must pay full stud fee in advance. Refund of the half at non-pregnancy\r\n\r\nCarrico has now become firmly established in upper level, international show jumping after placing in Dortmund, Hagen a.T.W., Chantilly/FRA, Münster, Paderborn and Neumünster under Philipp Weishaupt and Henrik von Eckermann/SWE.\r\n\r\nAwarded a premium in 2005 in Neumünster, Carrico then took his stallion performance test in Redefin where he won the jumping as well as the dressage index, finishing first overall. In 2008 he won a qualifier at the Bundeschampionat with a 9.5 and in 2009 he placed in the Final for six-year old show jumpers in Warendorf. At the age of just seven, he won his first ribbons in advanced level classes.\r\n', 'Carrico', '', 'draft', 'closed', 'closed', '', 'carrico', '', '', '2014-02-25 16:41:50', '2014-02-25 16:41:50', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=5078', 0, 'drg_horse', '', 0), +(5079, 1, '2014-02-25 16:38:57', '2014-02-25 15:38:57', '

Westphalian - brown - 2011 - 16.2 hands

\r\n\r\nNombre: Galante\r\nAño de nacimiento: 2011 \r\nCapa: Castaño\r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Galante', '2011 - Castaño', 'draft', 'closed', 'closed', '', 'galante', '', '', '2014-02-25 16:38:57', '2014-02-25 15:38:57', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=5079', 0, 'drg_horse', '', 0), +(5080, 1, '2014-02-25 16:25:33', '2014-02-25 15:25:33', '

Westphalian - gris - 2012 - 16.2 hands

\r\n\r\nNombre: Hércules\r\nAño de nacimiento: 2012 \r\nCapa: gris \r\n\r\n[title size="3"]Progeny[/title]\r\n\r\nHighly refined himself, the charming Black Jack not only passes on his good looks but also his ability to jump, his quality movements and rideability. His first sons and daughters, now under saddle, make a highly promising impression. \r\n\r\nBlack Jack’s foals quickly find buyers. His son Boréal des Prés was sold for 12,500 Swiss Francs in 2012 at the Sport Foals Auction in Sursee/SUI. \r\n\r\n[title size="3"]Pedigree[/title]\r\n\r\nHis sire Baloubet du Rouet won individual Olympic gold with Rodrigo Pessoa/BRA in 2004 on the course of Athens/GRE. He also took the World Cup title three times in a row and won the unofficial indoor World Championships twice in 2002 and 2003. The chestnut Selle Francais stallion who again leads the WBFSH (World Breeding Federation for Sport Horses) ranking of the world’s best jumper-makers – also thanks to Chaman who is also stationed in Riesenbeck – is a Galoubet A son. Galoubet A, a son of the trademark stallion Almé Z who was on the French gold winning team at the 1982 World Championships of Dublin/IRL with Gilles Bertrand de Ballanda, won the French Championships several times and collected dozens of first place ribbons in Nations Cups and Grand Prix. More than 30 of his sons are active in breeding, including U’Grand Jete, Eole and Meredith Michaels-Beerbaum’s Quick Star.\r\n\r\nHis dam St.Pr.St. Winzerin, who passed her broodmare performance test with outstanding scores, is also the dam of Gut Neuenhofs Levantados (by Lancer II) who wins show jumping classes up to advanced (S***) level, as well as a seven-year old full sister of Baloutelli named Gut Neuenhofs Bacarole/Henrik von Eckermann/SWE who is also highly successful in international competitions, and Gut Neuenhofs Caty (by Cristallo I) who qualified for the Bundeschampionat.\r\n\r\n', 'Hércules', 'gris - 2012', 'draft', 'closed', 'closed', '', 'hercules', '', '', '2014-02-25 16:25:33', '2014-02-25 15:25:33', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=drg_horse&p=5080', 0, 'drg_horse', '', 0), +(5081, 1, '2014-02-27 16:33:57', '2014-02-27 15:33:57', ' ', '', '', 'publish', 'closed', 'open', '', '5081', '', '', '2014-02-27 16:33:57', '2014-02-27 15:33:57', '', 0, 'http://127.0.0.1:4001/wordpress/5081/', 1, 'nav_menu_item', '', 0), +(5082, 1, '2014-02-27 16:33:57', '2014-02-27 15:33:57', ' ', '', '', 'publish', 'closed', 'open', '', '5082', '', '', '2014-02-27 16:33:57', '2014-02-27 15:33:57', '', 0, 'http://127.0.0.1:4001/wordpress/5082/', 2, 'nav_menu_item', '', 0), +(5083, 1, '2014-02-27 16:33:57', '2014-02-27 15:33:57', ' ', '', '', 'publish', 'closed', 'open', '', '5083', '', '', '2014-02-27 16:33:57', '2014-02-27 15:33:57', '', 0, 'http://127.0.0.1:4001/wordpress/5083/', 3, 'nav_menu_item', '', 0), +(5084, 1, '2014-02-27 16:33:57', '2014-02-27 15:33:57', ' ', '', '', 'publish', 'closed', 'open', '', '5084', '', '', '2014-02-27 16:33:57', '2014-02-27 15:33:57', '', 0, 'http://127.0.0.1:4001/wordpress/5084/', 4, 'nav_menu_item', '', 0), +(5085, 1, '2014-02-27 16:33:57', '2014-02-27 15:33:57', ' ', '', '', 'publish', 'closed', 'open', '', '5085', '', '', '2014-02-27 16:33:57', '2014-02-27 15:33:57', '', 0, 'http://127.0.0.1:4001/wordpress/5085/', 5, 'nav_menu_item', '', 0), +(5086, 1, '2014-02-28 12:50:49', '2014-02-28 11:50:49', '[separator top="-20"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Santaynez.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/03_bannerhome_allotjament_2.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/09_bannerhome_caballo_1.jpg[/slide][/slider]\r\n[separator top="-30" style="none"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n\r\n[separator top="50"]\r\n[fullwidth backgroundcolor="" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="0" bordercolor="#e5e4e4" paddingTop="0px" paddingBottom="0px"]\r\n\r\n[two_third last="no"]\r\n[title size="3"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="3"]Localización[/title]\r\n\r\nInstalaciones en la Comunidad de Madrid\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="15"]\r\n[title size="3"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]', 'Instalaciones', '', 'inherit', 'closed', 'open', '', '4824-revision-v1', '', '', '2014-02-28 12:50:49', '2014-02-28 11:50:49', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(5088, 1, '2014-02-28 12:52:28', '2014-02-28 11:52:28', '[separator top="-20"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Santaynez.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/03_bannerhome_allotjament_2.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/09_bannerhome_caballo_1.jpg[/slide][/slider]\r\n[separator top="-30" style="none"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n\r\n[separator top="50"]\r\n\r\n[two_third last="no"]\r\n[title size="3"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="3"]Localización[/title]\r\n\r\nInstalaciones en la Comunidad de Madrid\r\n[/one_third]\r\n\r\n[separator top="15"]\r\n[title size="3"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]', 'Instalaciones', '', 'inherit', 'closed', 'open', '', '4824-revision-v1', '', '', '2014-02-28 12:52:28', '2014-02-28 11:52:28', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(5087, 1, '2014-02-28 12:51:35', '2014-02-28 11:51:35', '[separator top="-20"]\r\n[slider][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/Santaynez.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/03_bannerhome_allotjament_2.jpg[/slide][slide]http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/09_bannerhome_caballo_1.jpg[/slide][/slider]\r\n[separator top="-30" style="none"]\r\nA cien kilómetros de Madrid están las instalaciones de Double R Group. En una finca de treinta hectáreas desarrollamos las actividades de cría y entrenamiento de caballos para la alta competición.\r\n\r\n[separator top="50"]\r\n\r\n[fullwidth backgroundcolor="#f8f8f8" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="20px" paddingBottom="20px"]\r\n\r\n[two_third last="no"]\r\n[title size="3"]Dotaciones[/title]\r\n\r\nDouble R Group tiene toda la infraestructura necesaria para el desarrollo y el entrenamiento de los caballos en todas sus fases\r\n\r\n[checklist icon="circle-arrow-right" iconcolor="395B7B" circle="no"]\r\n
    \r\n
  • Finca de más de treinta hectáreas.
  • \r\n
  • Pistas de trabajo y salto
  • \r\n
  • Pistas para dar cuerda
  • \r\n
  • Pistas de galope
  • \r\n
  • Caminadores
  • \r\n
  • Suelos de condiciones óptimas
  • \r\n
\r\n[/checklist]\r\n[/two_third]\r\n\r\n[one_third last="yes"]\r\n[title size="3"]Localización[/title]\r\n\r\nInstalaciones en la Comunidad de Madrid\r\n[/one_third]\r\n[/fullwidth]\r\n[separator top="15"]\r\n[title size="3"]Imágenes de las instalaciones[/title]\r\n\r\n[images lightbox="yes"]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/1.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/2.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/3.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/4.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/5.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/6.jpg" alt=""]\r\n[image link="" linktarget="_self" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/7.jpg" alt=""]\r\n[/images]', 'Instalaciones', '', 'inherit', 'closed', 'open', '', '4824-revision-v1', '', '', '2014-02-28 12:51:35', '2014-02-28 11:51:35', '', 4824, 'http://127.0.0.1:4001/wordpress/4824-revision-v1/', 0, 'revision', '', 0), +(5089, 1, '2014-02-28 12:53:18', '2014-02-28 11:53:18', '[separator top="-55"]\r\n\r\n[fullwidth bordersize="0"]\r\n\r\n \r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40" style="shadow"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]', 'Inicio', '', 'inherit', 'closed', 'open', '', '5037-revision-v1', '', '', '2014-02-28 12:53:18', '2014-02-28 11:53:18', '', 5037, 'http://127.0.0.1:4001/wordpress/5037-revision-v1/', 0, 'revision', '', 0), +(5090, 1, '2014-02-28 12:54:41', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-28 12:54:41', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?p=5090', 0, 'post', '', 0), +(5097, 1, '2014-02-28 13:06:59', '2014-02-28 12:06:59', '[separator top="-55"]\r\n[fullwidth bordersize="0"]\r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40" style="shadow"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]', 'Inicio', '', 'inherit', 'closed', 'open', '', '5037-revision-v1', '', '', '2014-02-28 13:06:59', '2014-02-28 12:06:59', '', 5037, 'http://127.0.0.1:4001/wordpress/5037-revision-v1/', 0, 'revision', '', 0), +(5093, 1, '2014-02-28 13:03:04', '2014-02-28 12:03:04', '[separator top="-55"]\r\n[fullwidth bordersize="0"]\r\n\r\n[/fullwidth]\r\n\r\n[fullwidth bordersize="0"]\r\n\r\n \r\n\r\n[title size="2"]Nuestros caballos[/title]\r\n\r\n[recent_works layout="grid-with-excerpts" filters="no" columns="4" cat_slug="" number_posts="4" excerpt_words="15" animation_type="bounce" animation_direction="down" animation_speed="0.1"][/recent_works]\r\n[/fullwidth]\r\n[fullwidth backgroundcolor="#f0f0ff" backgroundimage="" backgroundrepeat="no-repeat" backgroundposition="left top" backgroundattachment="scroll" bordersize="1px" bordercolor="#e5e4e4" paddingTop="60px" paddingBottom="20px"][one_half last="no"][youtube id="K708Q4zipEw" width="600" height="338" autoplay="no"][/one_half]\r\n[one_half last="yes"][title size="2"]Caballos de competición[/title]\r\nInteger tincidunt neque commodo blandit lobortis. Donec vestibulum eros sit amet ante congue malesuada eu vitae lacus. Integer eget elit metus. Donec in dolor sed turpis condimentum aliquam. Sed ultrices ac libero eu luctus. Nullam ut auctor arcu, non accumsan elit. Sed porttitor fringilla nunc. Vestibulum pellentesque iaculis elit eu tincidunt. Integer non ornare magna, sit amet rutrum neque.\r\n[/one_half]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[separator top="40" style="shadow"]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Cría"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="no"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Competición"][/content_box][/content_boxes]\r\n[/one_third]\r\n[one_third last="yes"]\r\n
Servicios
\r\n[content_boxes layout="icon-on-top"][content_box title="Servicios"][/content_box][/content_boxes]\r\n[/one_third]\r\n[/fullwidth]\r\n[fullwidth bordersize="0"]\r\n[clients][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][client link="#" image="http://127.0.0.1:4001/wordpress/wp-content/uploads/2013/10/client1.png"][/clients]\r\n[/fullwidth]', 'Inicio', '', 'inherit', 'closed', 'open', '', '5037-revision-v1', '', '', '2014-02-28 13:03:04', '2014-02-28 12:03:04', '', 5037, 'http://127.0.0.1:4001/wordpress/5037-revision-v1/', 0, 'revision', '', 0), +(5094, 1, '2014-02-28 13:05:23', '0000-00-00 00:00:00', '', 'Borrador automático', '', 'auto-draft', 'closed', 'open', '', '', '', '', '2014-02-28 13:05:23', '0000-00-00 00:00:00', '', 0, 'http://127.0.0.1:4001/wordpress/?post_type=themefusion_elastic&p=5094', 0, 'themefusion_elastic', '', 0), +(5098, 1, '2014-02-28 13:13:51', '2014-02-28 12:13:51', '', 'splash2', '', 'inherit', 'closed', 'open', '', 'splash2', '', '', '2014-02-28 13:13:51', '2014-02-28 12:13:51', '', 0, 'http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/02/splash2.jpg', 0, 'attachment', 'image/jpeg', 0); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_revslider_css` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_revslider_css` ( + `id` int(9) NOT NULL AUTO_INCREMENT, + `handle` text NOT NULL, + `settings` text, + `hover` text, + `params` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=62 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_revslider_css` +-- + +INSERT INTO `drgrp_revslider_css` (`id`, `handle`, `settings`, `hover`, `params`) VALUES +(1, '.tp-caption.medium_grey', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"0px 2px 5px rgba(0, 0, 0, 0.5)","font-weight":"700","font-size":"20px","line-height":"20px","font-family":"Arial","padding":"2px 4px","margin":"0px","border-width":"0px","border-style":"none","background-color":"#888","white-space":"nowrap"}'), +(2, '.tp-caption.small_text', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"0px 2px 5px rgba(0, 0, 0, 0.5)","font-weight":"700","font-size":"14px","line-height":"20px","font-family":"Arial","margin":"0px","border-width":"0px","border-style":"none","white-space":"nowrap"}'), +(3, '.tp-caption.medium_text', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"0px 2px 5px rgba(0, 0, 0, 0.5)","font-weight":"700","font-size":"20px","line-height":"20px","font-family":"Arial","margin":"0px","border-width":"0px","border-style":"none","white-space":"nowrap"}'), +(4, '.tp-caption.large_text', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"0px 2px 5px rgba(0, 0, 0, 0.5)","font-weight":"700","font-size":"40px","line-height":"40px","font-family":"Arial","margin":"0px","border-width":"0px","border-style":"none","white-space":"nowrap"}'), +(5, '.tp-caption.very_large_text', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"0px 2px 5px rgba(0, 0, 0, 0.5)","font-weight":"700","font-size":"60px","line-height":"60px","font-family":"Arial","margin":"0px","border-width":"0px","border-style":"none","white-space":"nowrap","letter-spacing":"-2px"}'), +(6, '.tp-caption.very_big_white', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"none","font-weight":"800","font-size":"60px","line-height":"60px","font-family":"Arial","margin":"0px","border-width":"0px","border-style":"none","white-space":"nowrap","padding":"0px 4px","padding-top":"1px","background-color":"#000"}'), +(7, '.tp-caption.very_big_black', NULL, NULL, '{"position":"absolute","color":"#000","text-shadow":"none","font-weight":"700","font-size":"60px","line-height":"60px","font-family":"Arial","margin":"0px","border-width":"0px","border-style":"none","white-space":"nowrap","padding":"0px 4px","padding-top":"1px","background-color":"#fff"}'), +(8, '.tp-caption.modern_medium_fat', NULL, NULL, '{"position":"absolute","color":"#000","text-shadow":"none","font-weight":"800","font-size":"24px","line-height":"20px","font-family":"\\"Open Sans\\", sans-serif","margin":"0px","border-width":"0px","border-style":"none","white-space":"nowrap"}'), +(9, '.tp-caption.modern_medium_fat_white', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"none","font-weight":"800","font-size":"24px","line-height":"20px","font-family":"\\"Open Sans\\", sans-serif","margin":"0px","border-width":"0px","border-style":"none","white-space":"nowrap"}'), +(10, '.tp-caption.modern_medium_light', NULL, NULL, '{"position":"absolute","color":"#000","text-shadow":"none","font-weight":"300","font-size":"24px","line-height":"20px","font-family":"\\"Open Sans\\", sans-serif","margin":"0px","border-width":"0px","border-style":"none","white-space":"nowrap"}'), +(11, '.tp-caption.modern_big_bluebg', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"none","font-weight":"800","font-size":"30px","line-height":"36px","font-family":"\\"Open Sans\\", sans-serif","padding":"3px 10px","margin":"0px","border-width":"0px","border-style":"none","background-color":"#4e5b6c","letter-spacing":"0"}'), +(12, '.tp-caption.modern_big_redbg', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"none","font-weight":"300","font-size":"30px","line-height":"36px","font-family":"\\"Open Sans\\", sans-serif","padding":"3px 10px","padding-top":"1px","margin":"0px","border-width":"0px","border-style":"none","background-color":"#de543e","letter-spacing":"0"}'), +(13, '.tp-caption.modern_small_text_dark', NULL, NULL, '{"position":"absolute","color":"#555","text-shadow":"none","font-size":"14px","line-height":"22px","font-family":"Arial","margin":"0px","border-width":"0px","border-style":"none","white-space":"nowrap"}'), +(14, '.tp-caption.boxshadow', NULL, NULL, '{"-moz-box-shadow":"0px 0px 20px rgba(0, 0, 0, 0.5)","-webkit-box-shadow":"0px 0px 20px rgba(0, 0, 0, 0.5)","box-shadow":"0px 0px 20px rgba(0, 0, 0, 0.5)"}'), +(15, '.tp-caption.black', NULL, NULL, '{"color":"#000","text-shadow":"none"}'), +(16, '.tp-caption.noshadow', NULL, NULL, '{"text-shadow":"none"}'), +(17, '.tp-caption.thinheadline_dark', NULL, NULL, '{"position":"absolute","color":"rgba(0,0,0,0.85)","text-shadow":"none","font-weight":"300","font-size":"30px","line-height":"30px","font-family":"\\"Open Sans\\"","background-color":"transparent"}'), +(18, '.tp-caption.thintext_dark', NULL, NULL, '{"position":"absolute","color":"rgba(0,0,0,0.85)","text-shadow":"none","font-weight":"300","font-size":"16px","line-height":"26px","font-family":"\\"Open Sans\\"","background-color":"transparent"}'), +(19, '.tp-caption.largeblackbg', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"none","font-weight":"300","font-size":"50px","line-height":"70px","font-family":"\\"Open Sans\\"","background-color":"#000","padding":"0px 20px","-webkit-border-radius":"0px","-moz-border-radius":"0px","border-radius":"0px"}'), +(20, '.tp-caption.largepinkbg', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"none","font-weight":"300","font-size":"50px","line-height":"70px","font-family":"\\"Open Sans\\"","background-color":"#db4360","padding":"0px 20px","-webkit-border-radius":"0px","-moz-border-radius":"0px","border-radius":"0px"}'), +(21, '.tp-caption.largewhitebg', NULL, NULL, '{"position":"absolute","color":"#000","text-shadow":"none","font-weight":"300","font-size":"50px","line-height":"70px","font-family":"\\"Open Sans\\"","background-color":"#fff","padding":"0px 20px","-webkit-border-radius":"0px","-moz-border-radius":"0px","border-radius":"0px"}'), +(22, '.tp-caption.largegreenbg', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"none","font-weight":"300","font-size":"50px","line-height":"70px","font-family":"\\"Open Sans\\"","background-color":"#67ae73","padding":"0px 20px","-webkit-border-radius":"0px","-moz-border-radius":"0px","border-radius":"0px"}'), +(23, '.tp-caption.excerpt', NULL, NULL, '{"font-size":"36px","line-height":"36px","font-weight":"700","font-family":"Arial","color":"#ffffff","text-decoration":"none","background-color":"rgba(0, 0, 0, 1)","text-shadow":"none","margin":"0px","letter-spacing":"-1.5px","padding":"1px 4px 0px 4px","width":"150px","white-space":"normal !important","height":"auto","border-width":"0px","border-color":"rgb(255, 255, 255)","border-style":"none"}'), +(24, '.tp-caption.large_bold_grey', NULL, NULL, '{"font-size":"60px","line-height":"60px","font-weight":"800","font-family":"\\"Open Sans\\"","color":"rgb(102, 102, 102)","text-decoration":"none","background-color":"transparent","text-shadow":"none","margin":"0px","padding":"1px 4px 0px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(25, '.tp-caption.medium_thin_grey', NULL, NULL, '{"font-size":"34px","line-height":"30px","font-weight":"300","font-family":"\\"Open Sans\\"","color":"rgb(102, 102, 102)","text-decoration":"none","background-color":"transparent","padding":"1px 4px 0px","text-shadow":"none","margin":"0px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(26, '.tp-caption.small_thin_grey', NULL, NULL, '{"font-size":"18px","line-height":"26px","font-weight":"300","font-family":"\\"Open Sans\\"","color":"rgb(117, 117, 117)","text-decoration":"none","background-color":"transparent","padding":"1px 4px 0px","text-shadow":"none","margin":"0px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(27, '.tp-caption.lightgrey_divider', NULL, NULL, '{"text-decoration":"none","background-color":"rgba(235, 235, 235, 1)","width":"370px","height":"3px","background-position":"initial initial","background-repeat":"initial initial","border-width":"0px","border-color":"rgb(34, 34, 34)","border-style":"none"}'), +(28, '.tp-caption.large_bold_darkblue', NULL, NULL, '{"font-size":"58px","line-height":"60px","font-weight":"800","font-family":"\\"Open Sans\\"","color":"rgb(52, 73, 94)","text-decoration":"none","background-color":"transparent","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(29, '.tp-caption.medium_bg_darkblue', NULL, NULL, '{"font-size":"20px","line-height":"20px","font-weight":"800","font-family":"\\"Open Sans\\"","color":"rgb(255, 255, 255)","text-decoration":"none","background-color":"rgb(52, 73, 94)","padding":"10px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(30, '.tp-caption.medium_bold_red', NULL, NULL, '{"font-size":"24px","line-height":"30px","font-weight":"800","font-family":"\\"Open Sans\\"","color":"rgb(227, 58, 12)","text-decoration":"none","background-color":"transparent","padding":"0px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(31, '.tp-caption.medium_light_red', NULL, NULL, '{"font-size":"21px","line-height":"26px","font-weight":"300","font-family":"\\"Open Sans\\"","color":"rgb(227, 58, 12)","text-decoration":"none","background-color":"transparent","padding":"0px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(32, '.tp-caption.medium_bg_red', NULL, NULL, '{"font-size":"20px","line-height":"20px","font-weight":"800","font-family":"\\"Open Sans\\"","color":"rgb(255, 255, 255)","text-decoration":"none","background-color":"rgb(227, 58, 12)","padding":"10px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(33, '.tp-caption.medium_bold_orange', NULL, NULL, '{"font-size":"24px","line-height":"30px","font-weight":"800","font-family":"\\"Open Sans\\"","color":"rgb(243, 156, 18)","text-decoration":"none","background-color":"transparent","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(34, '.tp-caption.medium_bg_orange', NULL, NULL, '{"font-size":"20px","line-height":"20px","font-weight":"800","font-family":"\\"Open Sans\\"","color":"rgb(255, 255, 255)","text-decoration":"none","background-color":"rgb(243, 156, 18)","padding":"10px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(35, '.tp-caption.grassfloor', NULL, NULL, '{"text-decoration":"none","background-color":"rgba(160, 179, 151, 1)","width":"4000px","height":"150px","border-width":"0px","border-color":"rgb(34, 34, 34)","border-style":"none"}'), +(36, '.tp-caption.large_bold_white', NULL, NULL, '{"font-size":"58px","line-height":"60px","font-weight":"800","font-family":"\\"Open Sans\\"","color":"rgb(255, 255, 255)","text-decoration":"none","background-color":"transparent","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(37, '.tp-caption.medium_light_white', NULL, NULL, '{"font-size":"30px","line-height":"36px","font-weight":"300","font-family":"\\"Open Sans\\"","color":"rgb(255, 255, 255)","text-decoration":"none","background-color":"transparent","padding":"0px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(38, '.tp-caption.mediumlarge_light_white', NULL, NULL, '{"font-size":"34px","line-height":"40px","font-weight":"300","font-family":"\\"Open Sans\\"","color":"rgb(255, 255, 255)","text-decoration":"none","background-color":"transparent","padding":"0px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(39, '.tp-caption.mediumlarge_light_white_center', NULL, NULL, '{"font-size":"34px","line-height":"40px","font-weight":"300","font-family":"\\"Open Sans\\"","color":"#ffffff","text-decoration":"none","background-color":"transparent","padding":"0px 0px 0px 0px","text-align":"center","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(40, '.tp-caption.medium_bg_asbestos', NULL, NULL, '{"font-size":"20px","line-height":"20px","font-weight":"800","font-family":"\\"Open Sans\\"","color":"rgb(255, 255, 255)","text-decoration":"none","background-color":"rgb(127, 140, 141)","padding":"10px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(41, '.tp-caption.medium_light_black', NULL, NULL, '{"font-size":"30px","line-height":"36px","font-weight":"300","font-family":"\\"Open Sans\\"","color":"rgb(0, 0, 0)","text-decoration":"none","background-color":"transparent","padding":"0px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(42, '.tp-caption.large_bold_black', NULL, NULL, '{"font-size":"58px","line-height":"60px","font-weight":"800","font-family":"\\"Open Sans\\"","color":"rgb(0, 0, 0)","text-decoration":"none","background-color":"transparent","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(43, '.tp-caption.mediumlarge_light_darkblue', NULL, NULL, '{"font-size":"34px","line-height":"40px","font-weight":"300","font-family":"\\"Open Sans\\"","color":"rgb(52, 73, 94)","text-decoration":"none","background-color":"transparent","padding":"0px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(44, '.tp-caption.small_light_white', NULL, NULL, '{"font-size":"17px","line-height":"28px","font-weight":"300","font-family":"\\"Open Sans\\"","color":"rgb(255, 255, 255)","text-decoration":"none","background-color":"transparent","padding":"0px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(45, '.tp-caption.roundedimage', NULL, NULL, '{"border-width":"0px","border-color":"rgb(34, 34, 34)","border-style":"none"}'), +(46, '.tp-caption.large_bg_black', NULL, NULL, '{"font-size":"40px","line-height":"40px","font-weight":"800","font-family":"\\"Open Sans\\"","color":"rgb(255, 255, 255)","text-decoration":"none","background-color":"rgb(0, 0, 0)","padding":"10px 20px 15px","border-width":"0px","border-color":"rgb(255, 214, 88)","border-style":"none"}'), +(47, '.tp-caption.mediumwhitebg', NULL, NULL, '{"font-size":"30px","line-height":"30px","font-weight":"300","font-family":"\\"Open Sans\\"","color":"rgb(0, 0, 0)","text-decoration":"none","background-color":"rgb(255, 255, 255)","padding":"5px 15px 10px","text-shadow":"none","border-width":"0px","border-color":"rgb(0, 0, 0)","border-style":"none"}'), +(48, '.avada_huge_white_text', NULL, NULL, '{"position":"absolute","color":"#ffffff","font-size":"130px","line-height":"45px","font-family":"museoslab500regular"}'), +(49, '.avada_huge_black_text', NULL, NULL, '{"position":"absolute","color":"#000000","font-size":"130px","line-height":"45px","font-family":"museoslab500regular;}'), +(50, '.avada_big_black_text', NULL, NULL, '{"position":"absolute","color":"#333333","font-size":"42px","line-height":"45px","font-family":"museoslab500regular"}'), +(51, '.avada_big_white_text', NULL, NULL, '{"position":"absolute","color":"#fff","font-size":"42px","line-height":"45px","font-family":"museoslab500regular"}'), +(52, '.avada_big_black_text_center', NULL, NULL, '{"position":"absolute","color":"#333333","font-size":"38px","line-height":"45px","font-family":"museoslab500regular","text-align":"center"}'), +(53, '.avada_med_green_text', NULL, NULL, '{"position":"absolute","color":"#A0CE4E","font-size":"24px","line-height":"24px","font-family":"PTSansRegular, Arial, Helvetica, sans-serif"}'), +(54, '.avada_small_gray_text', NULL, NULL, '{"position":"absolute","color":"#747474","font-size":"13px","line-height":"20px","font-family":"PTSansRegular, Arial, Helvetica, sans-serif"}'), +(55, '.avada_small_white_text', NULL, NULL, '{"position":"absolute","color":"#fff","font-size":"13px","line-height":"20px","font-family":"PTSansRegular, Arial, Helvetica, sans-serif","text-shadow":"0px 2px 5px rgba(0, 0, 0, 0.5)","font-weight":"700"}'), +(56, '.avada_block_black', NULL, NULL, '{"position":"absolute","color":"#A0CE4E","text-shadow":"none","font-size":"22px","line-height":"34px","padding":"0px 10px","padding-top":"1px","margin":"0px","border-width":"0px","border-style":"none","background-color":"#000","font-family":"PTSansRegular, Arial, Helvetica, sans-serif"}'), +(57, '.avada_block_green', NULL, NULL, '{"position":"absolute","color":"#000","text-shadow":"none","font-size":"22px","line-height":"34px","padding":"0px 10px","padding-top":"1px","margin":"0px","border-width":"0px","border-style":"none","background-color":"#A0CE4E","font-family":"PTSansRegular, Arial, Helvetica, sans-serif"}'), +(58, '.avada_block_white', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"none","font-size":"22px","line-height":"34px","padding":"0px 10px","padding-top":"1px","margin":"0px","border-width":"0px","border-style":"none","background-color":"#000","font-family":"PTSansRegular, Arial, Helvetica, sans-serif"}'), +(59, '.avada_block_white_trans', NULL, NULL, '{"position":"absolute","color":"#fff","text-shadow":"none","font-size":"22px","line-height":"34px","padding":"0px 10px","padding-top":"1px","margin":"0px","border-width":"0px","border-style":"none","background-color":"rgba(0, 0, 0, 0.6)","font-family":"PTSansRegular, Arial, Helvetica, sans-serif"}'), +(60, '.tp-caption.avada_block_black', NULL, NULL, '{"text-decoration":"none","background-color":"rgb(0, 0, 0)","border-width":"0px","border-color":"rgb(34, 34, 34)","border-style":"none"}'), +(61, '.tp-caption.portada_h1', '{"hover":"false"}', '""', '{"text-decoration":"none","background-color":"transparent","font-family":"\\"Roboto\\"","font-transform":"uppercase","color":"#ffffff","border-width":"0px","border-color":"rgb(34, 34, 34)","border-style":"none"}'); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_revslider_layer_animations` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_revslider_layer_animations` ( + `id` int(9) NOT NULL AUTO_INCREMENT, + `handle` text NOT NULL, + `params` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_revslider_layer_animations` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_revslider_settings` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_revslider_settings` ( + `id` int(9) NOT NULL AUTO_INCREMENT, + `general` text NOT NULL, + `params` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_revslider_settings` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_revslider_sliders` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_revslider_sliders` ( + `id` int(9) NOT NULL AUTO_INCREMENT, + `title` tinytext NOT NULL, + `alias` tinytext, + `params` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_revslider_sliders` +-- + +INSERT INTO `drgrp_revslider_sliders` (`id`, `title`, `alias`, `params`) VALUES +(1, 'Avada_Full_Width', 'Avada_Full_Width', '{"title":"Avada_Full_Width","alias":"Avada_Full_Width","shortcode":"[rev_slider Avada_Full_Width]","slider_type":"fullwidth","fullscreen_offset_container":"","width":"960","height":"450","responsitive_w1":"940","responsitive_sw1":"770","responsitive_w2":"780","responsitive_sw2":"500","responsitive_w3":"510","responsitive_sw3":"310","responsitive_w4":"","responsitive_sw4":"","responsitive_w5":"","responsitive_sw5":"","responsitive_w6":"","responsitive_sw6":"","delay":"9000","shuffle":"off","lazy_load":"off","use_wpml":"off","load_googlefont":"false","google_font":"PT+Sans+Narrow:400,700","stop_slider":"off","stop_after_loops":"0","stop_at_slide":"2","position":"center","margin_top":"0","margin_bottom":"0","margin_left":"0","margin_right":"0","shadow_type":"0","show_timerbar":"hide","background_color":"#ffffff","padding":"0","show_background_image":"false","background_image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/","touchenabled":"on","stop_on_hover":"on","navigaion_type":"none","navigation_arrows":"solo","navigation_style":"round","navigaion_always_on":"false","hide_thumbs":"200","navigaion_align_hor":"center","navigaion_align_vert":"bottom","navigaion_offset_hor":"0","navigaion_offset_vert":"20","leftarrow_align_hor":"left","leftarrow_align_vert":"center","leftarrow_offset_hor":"20","leftarrow_offset_vert":"0","rightarrow_align_hor":"right","rightarrow_align_vert":"center","rightarrow_offset_hor":"20","rightarrow_offset_vert":"0","thumb_width":"100","thumb_height":"50","thumb_amount":"5","hide_slider_under":"0","hide_defined_layers_under":"0","hide_all_layers_under":"0","start_with_slide":"1","first_transition_type":"fade","first_transition_duration":"300","first_transition_slot_amount":"7","jquery_noconflict":"on","js_to_body":"false","output_type":"none"}'), +(2, 'Avada_Page_Slider', 'Avada_Page_Slider', '{"title":"Avada_Page_Slider","alias":"Avada_Page_Slider","shortcode":"[rev_slider Avada_Page_Slider]","source_type":"gallery","post_types":"post","post_category":"category_9","post_sortby":"ID","posts_sort_direction":"DESC","max_slider_posts":"30","excerpt_limit":"55","slider_template_id":"","posts_list":"","slider_type":"responsitive","fullscreen_offset_container":"","fullscreen_min_height":"","full_screen_align_force":"off","auto_height":"off","force_full_width":"off","width":"940","height":"300","responsitive_w1":"940","responsitive_sw1":"770","responsitive_w2":"780","responsitive_sw2":"500","responsitive_w3":"510","responsitive_sw3":"310","responsitive_w4":"0","responsitive_sw4":"0","responsitive_w5":"0","responsitive_sw5":"0","responsitive_w6":"0","responsitive_sw6":"0","delay":"9000","shuffle":"off","lazy_load":"off","use_wpml":"off","stop_slider":"off","stop_after_loops":0,"stop_at_slide":2,"load_googlefont":"false","google_font":[""],"position":"center","margin_top":0,"margin_bottom":0,"margin_left":0,"margin_right":0,"shadow_type":"3","show_timerbar":"hide","padding":0,"background_color":"#E9E9E9","background_dotted_overlay":"none","show_background_image":"false","background_image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/","bg_fit":"cover","bg_repeat":"no-repeat","bg_position":"center top","touchenabled":"on","stop_on_hover":"on","navigaion_type":"thumb","navigation_arrows":"none","navigation_style":"square-old","navigaion_always_on":"false","hide_thumbs":200,"navigaion_align_hor":"center","navigaion_align_vert":"bottom","navigaion_offset_hor":"0","navigaion_offset_vert":20,"leftarrow_align_hor":"left","leftarrow_align_vert":"center","leftarrow_offset_hor":20,"leftarrow_offset_vert":0,"rightarrow_align_hor":"right","rightarrow_align_vert":"center","rightarrow_offset_hor":20,"rightarrow_offset_vert":0,"thumb_width":100,"thumb_height":50,"thumb_amount":5,"hide_slider_under":0,"hide_defined_layers_under":0,"hide_all_layers_under":0,"hide_thumbs_under_resolution":0,"start_with_slide":"1","first_transition_type":"fade","first_transition_duration":300,"first_transition_slot_amount":7,"reset_transitions":"","reset_transition_duration":0,"0":"Execute settings on all slides","jquery_noconflict":"on","js_to_body":"false","output_type":"none","template":"false"}'), +(3, 'Avada_Small_Slider', 'Avada_Small_Slider', '{"title":"Avada_Small_Slider","alias":"Avada_Small_Slider","shortcode":"[rev_slider Avada_Small_Slider]","slider_type":"responsitive","fullscreen_offset_container":"","width":"451","height":"220","responsitive_w1":"940","responsitive_sw1":"770","responsitive_w2":"780","responsitive_sw2":"500","responsitive_w3":"510","responsitive_sw3":"310","responsitive_w4":"","responsitive_sw4":"","responsitive_w5":"","responsitive_sw5":"","responsitive_w6":"","responsitive_sw6":"","delay":"9000","shuffle":"off","lazy_load":"off","use_wpml":"off","load_googlefont":"false","google_font":"PT+Sans+Narrow:400,700","stop_slider":"off","stop_after_loops":"0","stop_at_slide":"2","position":"center","margin_top":"0","margin_bottom":"0","margin_left":"0","margin_right":"0","shadow_type":"1","show_timerbar":"top","background_color":"#E9E9E9","padding":"0","show_background_image":"false","background_image":"http:\\/\\/theme-fusion.com\\/avadaxml\\/wp-content\\/","touchenabled":"on","stop_on_hover":"on","navigaion_type":"none","navigation_arrows":"none","navigation_style":"round","navigaion_always_on":"false","hide_thumbs":"200","navigaion_align_hor":"center","navigaion_align_vert":"bottom","navigaion_offset_hor":"0","navigaion_offset_vert":"20","leftarrow_align_hor":"left","leftarrow_align_vert":"center","leftarrow_offset_hor":"20","leftarrow_offset_vert":"0","rightarrow_align_hor":"right","rightarrow_align_vert":"center","rightarrow_offset_hor":"20","rightarrow_offset_vert":"0","thumb_width":"100","thumb_height":"50","thumb_amount":"5","hide_slider_under":"0","hide_defined_layers_under":"0","hide_all_layers_under":"0","start_with_slide":"1","first_transition_type":"fade","first_transition_duration":"300","first_transition_slot_amount":"7","jquery_noconflict":"on","js_to_body":"false","output_type":"none"}'), +(4, 'DRG Homepage', 'drg_homepage', '{"title":"DRG Homepage","alias":"drg_homepage","shortcode":"[rev_slider drg_homepage]","source_type":"gallery","post_types":"post","post_category":"category_2","post_sortby":"ID","posts_sort_direction":"DESC","max_slider_posts":"30","excerpt_limit":"55","slider_template_id":"","posts_list":"","slider_type":"fullwidth","fullscreen_offset_container":"","fullscreen_min_height":"","full_screen_align_force":"off","auto_height":"off","force_full_width":"off","width":"960","height":"450","responsitive_w1":"940","responsitive_sw1":"770","responsitive_w2":"780","responsitive_sw2":"500","responsitive_w3":"510","responsitive_sw3":"310","responsitive_w4":"0","responsitive_sw4":"0","responsitive_w5":"0","responsitive_sw5":"0","responsitive_w6":"0","responsitive_sw6":"0","delay":"9000","shuffle":"off","lazy_load":"off","use_wpml":"off","stop_slider":"off","stop_after_loops":0,"stop_at_slide":2,"load_googlefont":"false","google_font":[""],"position":"center","margin_top":0,"margin_bottom":0,"margin_left":0,"margin_right":0,"shadow_type":"0","show_timerbar":"hide","padding":0,"background_color":"#ffffff","background_dotted_overlay":"none","show_background_image":"false","background_image":"","bg_fit":"cover","bg_repeat":"no-repeat","bg_position":"center top","touchenabled":"on","stop_on_hover":"on","navigaion_type":"bullet","navigation_arrows":"solo","navigation_style":"round","navigaion_always_on":"false","hide_thumbs":200,"navigaion_align_hor":"center","navigaion_align_vert":"bottom","navigaion_offset_hor":"0","navigaion_offset_vert":20,"leftarrow_align_hor":"left","leftarrow_align_vert":"center","leftarrow_offset_hor":20,"leftarrow_offset_vert":0,"rightarrow_align_hor":"right","rightarrow_align_vert":"center","rightarrow_offset_hor":20,"rightarrow_offset_vert":0,"thumb_width":100,"thumb_height":50,"thumb_amount":5,"hide_slider_under":0,"hide_defined_layers_under":0,"hide_all_layers_under":0,"hide_thumbs_under_resolution":0,"start_with_slide":"1","first_transition_type":"fade","first_transition_duration":300,"first_transition_slot_amount":7,"reset_transitions":"","reset_transition_duration":0,"0":"Execute settings on all slides","jquery_noconflict":"on","js_to_body":"false","output_type":"none","template":"false"}'); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_revslider_slides` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_revslider_slides` ( + `id` int(9) NOT NULL AUTO_INCREMENT, + `slider_id` int(9) NOT NULL, + `slide_order` int(11) NOT NULL, + `params` text NOT NULL, + `layers` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_revslider_slides` +-- + +INSERT INTO `drgrp_revslider_slides` (`id`, `slider_id`, `slide_order`, `params`, `layers`) VALUES +(1, 1, 1, '{"background_type":"solid","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Full_Width\\/slide_3.jpg","image_id":"4074","title":"Slide","state":"published","slide_transition":"fade","0":"Choose Image","slot_amount":"7","transition_rotation":"0","transition_duration":"300","delay":"","enable_link":"false","link_type":"regular","link":"","link_open_in":"same","slide_link":"nothing","link_pos":"front","slide_thumb":"","fullwidth_centering":"true","date_from":"","date_to":"","slide_bg_color":"#f6f6f6"}', '[{"style":"","text":"Image 2","type":"image","image_url":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Full_Width\\/slide_4.jpg","left":9,"top":0,"animation":"fade","easing":"easeOutExpo","speed":300,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","time":300,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"0","endTimeFinal":8700,"endSpeedFinal":300,"realEndTime":9000,"timeLast":8700},{"style":"","text":"Image 3","type":"image","image_url":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Full_Width\\/mac.png","left":512,"top":61,"animation":"lfl","easing":"easeOutExpo","speed":1500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","time":800,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"1","endTimeFinal":7500,"endSpeedFinal":300,"realEndTime":9000,"timeLast":8200},{"style":"","text":"Image 4","type":"image","image_url":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Full_Width\\/ipad2.png","left":453,"top":188,"animation":"lft","easing":"easeOutExpo","speed":1500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","time":1100,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"2","endTimeFinal":7500,"endSpeedFinal":300,"realEndTime":9000,"timeLast":7900},{"style":"","text":"Image 5","type":"image","image_url":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Full_Width\\/iphone.png","left":394,"top":241,"animation":"lfr","easing":"easeOutExpo","speed":1500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","time":1400,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"3","endTimeFinal":7500,"endSpeedFinal":300,"realEndTime":9000,"timeLast":7600},{"text":"Avada Wordpress Theme","type":"text","left":-1,"top":94,"animation":"sft","easing":"easeOutExpo","speed":1000,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_big_black_text","time":2100,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"4","endTimeFinal":8000,"endSpeedFinal":300,"realEndTime":9000,"timeLast":6900},{"text":"Made With Care For Our Users","type":"text","left":0,"top":152,"animation":"sfb","easing":"easeOutExpo","speed":1000,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_med_green_text","time":2400,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"5","endTimeFinal":8000,"endSpeedFinal":300,"realEndTime":9000,"timeLast":6600},{"text":"Lid est laborum dolo rumes fugats untras. Et harums ser quidem
rerum facilisdolores nemis omnis fugiats vitaes nemo minima
rerums unsers sadips amets sadips ipsums","type":"text","left":0,"top":200,"animation":"fade","easing":"easeOutExpo","speed":1000,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_small_gray_text","time":2800,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"6","endTimeFinal":8000,"endSpeedFinal":300,"realEndTime":9000,"timeLast":6200},{"text":"Purchase Now<\\/a>","type":"text","left":0,"top":310,"animation":"lfb","easing":"easeOutExpo","speed":3000,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_small_gray_text","time":2700,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"7","endTimeFinal":6000,"endSpeedFinal":300,"realEndTime":9000,"timeLast":6300}]'), +(2, 1, 2, '{"background_type":"image","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Full_Width\\/slide_5.jpg","image_id":"4073","title":"Slide","state":"published","slide_transition":"fade","0":"Choose Image","slot_amount":7,"transition_rotation":0,"transition_duration":300,"delay":"","enable_link":"false","link_type":"regular","link":"","link_open_in":"same","slide_link":"nothing","link_pos":"front","slide_thumb":"","fullwidth_centering":"true","date_from":"","date_to":"","slide_bg_color":"#E7E7E7","slide_bg_external":"","bg_fit":"cover","bg_fit_x":"100","bg_fit_y":"100","bg_repeat":"no-repeat","bg_position":"center top","bg_position_x":"0","bg_position_y":"0","kenburn_effect":"off","kb_start_fit":"100","kb_end_fit":"100","bg_end_position":"center top","kb_duration":"9000","kb_easing":"Linear.easeNone"}', '[{"style":"","text":"Image 2","type":"image","image_url":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Full_Width\\/ipad.png","left":0,"top":64,"animation":"lfr","easing":"easeOutExpo","speed":1500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","time":500,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"0","endTimeFinal":7500,"endSpeedFinal":300,"realEndTime":9000,"timeLast":8500,"width":500,"height":308},{"text":"Avada Is Better Than Ever","type":"text","left":675,"top":90,"animation":"sft","easing":"easeOutExpo","speed":750,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_block_black","time":1100,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"1","endTimeFinal":8250,"endSpeedFinal":300,"realEndTime":9000,"timeLast":7900,"width":-1,"height":-1,"alt":"","scaleX":"","scaleY":"","scaleProportional":false,"attrID":"","attrClasses":"","attrTitle":"","attrRel":""},{"text":"100% Fully Responsive","type":"text","left":702,"top":130,"animation":"sfb","easing":"easeOutExpo","speed":750,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_block_black","time":1400,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"2","endTimeFinal":8250,"endSpeedFinal":300,"realEndTime":9000,"timeLast":7600,"width":-1,"height":-1},{"text":"With Numerous","type":"text","left":778,"top":200,"animation":"sft","easing":"easeOutExpo","speed":750,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_block_green","time":1700,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"3","endTimeFinal":8250,"endSpeedFinal":300,"realEndTime":9000,"timeLast":7300,"width":-1,"height":-1},{"text":"Additions & Optimizations","type":"text","left":679,"top":240,"animation":"sfb","easing":"easeOutExpo","speed":750,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_block_green","time":2000,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"4","endTimeFinal":8250,"endSpeedFinal":300,"realEndTime":9000,"timeLast":7000,"width":-1,"height":-1},{"text":"It Doesn''t Get Better Than This","type":"text","left":628,"top":318,"animation":"sft","easing":"easeOutExpo","speed":750,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_block_black","time":2300,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"5","endTimeFinal":8250,"endSpeedFinal":300,"realEndTime":9000,"timeLast":6700,"width":-1,"height":-1}]'), +(3, 1, 3, '{"background_type":"image","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Full_Width\\/slide_3.jpg","image_id":"4074","title":"Slide","state":"published","slide_transition":"fade","0":"Choose Image","slot_amount":"7","transition_rotation":"0","transition_duration":"300","delay":"","enable_link":"false","link_type":"regular","link":"","link_open_in":"same","slide_link":"nothing","link_pos":"front","slide_thumb":"","fullwidth_centering":"true","date_from":"","date_to":"","slide_bg_color":"#E7E7E7"}', '[{"text":"Create Fantastic Sliders With Animations","type":"text","left":272,"top":75,"animation":"lft","easing":"easeOutExpo","speed":750,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_block_white","time":500,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"0","endTimeFinal":8250,"endSpeedFinal":300,"realEndTime":9000,"timeLast":8500},{"text":"BE CREATIVE","type":"text","left":52,"top":160,"animation":"lfr","easing":"easeOutExpo","speed":750,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_huge_white_text","time":900,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"1","endTimeFinal":8250,"endSpeedFinal":300,"realEndTime":9000,"timeLast":8300},{"text":"The Possibilities Are Endless","type":"text","left":331,"top":260,"animation":"lfb","easing":"easeOutExpo","speed":750,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_block_white","time":1100,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"2","endTimeFinal":8250,"endSpeedFinal":300,"realEndTime":9000,"timeLast":8100},{"text":"[fontawesome icon=\\\\\\"thumbs-up\\\\\\" circle=\\\\\\"no\\\\\\" size=\\\\\\"large\\\\\\" iconcolor=\\\\\\"#fff\\\\\\" circlecolor=\\\\\\"\\\\\\" circlebordercolor=\\\\\\"\\\\\\"]","type":"text","left":57,"top":351,"animation":"sft","easing":"easeOutExpo","speed":500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"noshadow","time":1300,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"3","endTimeFinal":8500,"endSpeedFinal":300,"realEndTime":9000,"timeLast":7800},{"text":"[fontawesome icon=\\\\\\"rocket\\\\\\" circle=\\\\\\"no\\\\\\" size=\\\\\\"large\\\\\\" iconcolor=\\\\\\"#fff\\\\\\" circlecolor=\\\\\\"\\\\\\" circlebordercolor=\\\\\\"\\\\\\"]","type":"text","left":187,"top":351,"animation":"sfb","easing":"easeOutExpo","speed":500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"noshadow","time":1600,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"4","endTimeFinal":8500,"endSpeedFinal":300,"realEndTime":9000,"timeLast":7500},{"text":"[fontawesome icon=\\\\\\"search\\\\\\" circle=\\\\\\"no\\\\\\" size=\\\\\\"large\\\\\\" iconcolor=\\\\\\"#fff\\\\\\" circlecolor=\\\\\\"\\\\\\" circlebordercolor=\\\\\\"\\\\\\"]","type":"text","left":317,"top":351,"animation":"sft","easing":"easeOutExpo","speed":500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"noshadow","time":1900,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"5","endTimeFinal":8500,"endSpeedFinal":300,"realEndTime":9000,"timeLast":7200},{"text":"[fontawesome icon=\\\\\\"music\\\\\\" circle=\\\\\\"no\\\\\\" size=\\\\\\"large\\\\\\" iconcolor=\\\\\\"#fff\\\\\\" circlecolor=\\\\\\"\\\\\\" circlebordercolor=\\\\\\"\\\\\\"]","type":"text","left":447,"top":351,"animation":"sfb","easing":"easeOutExpo","speed":500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"noshadow","time":2200,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"6","endTimeFinal":8500,"endSpeedFinal":300,"realEndTime":9000,"timeLast":6900},{"text":"[fontawesome icon=\\\\\\"leaf\\\\\\" circle=\\\\\\"no\\\\\\" size=\\\\\\"large\\\\\\" iconcolor=\\\\\\"#fff\\\\\\" circlecolor=\\\\\\"\\\\\\" circlebordercolor=\\\\\\"\\\\\\"]","type":"text","left":577,"top":351,"animation":"sft","easing":"easeOutExpo","speed":500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"noshadow","time":2500,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"7","endTimeFinal":8500,"endSpeedFinal":300,"realEndTime":9000,"timeLast":6600},{"text":"[fontawesome icon=\\\\\\"globe\\\\\\" circle=\\\\\\"no\\\\\\" size=\\\\\\"large\\\\\\" iconcolor=\\\\\\"#fff\\\\\\" circlecolor=\\\\\\"\\\\\\" circlebordercolor=\\\\\\"\\\\\\"]","type":"text","left":707,"top":351,"animation":"sfb","easing":"easeOutExpo","speed":500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"noshadow","time":2800,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"8","endTimeFinal":8500,"endSpeedFinal":300,"realEndTime":9000,"timeLast":6300},{"text":"[fontawesome icon=\\\\\\"heart\\\\\\" circle=\\\\\\"no\\\\\\" size=\\\\\\"large\\\\\\" iconcolor=\\\\\\"#fff\\\\\\" circlecolor=\\\\\\"\\\\\\" circlebordercolor=\\\\\\"\\\\\\"]","type":"text","left":837,"top":351,"animation":"sft","easing":"easeOutExpo","speed":500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"noshadow","time":3100,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"9","endTimeFinal":8500,"endSpeedFinal":300,"realEndTime":9000,"timeLast":5900}]'), +(4, 2, 1, '{"background_type":"image","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Page_Slider\\/slide_1.jpg","image_id":"3875","title":"Slide","state":"published","date_from":"","date_to":"","slide_transition":"random","0":"Choose Image","slot_amount":7,"transition_rotation":0,"transition_duration":300,"delay":"","enable_link":"false","link_type":"regular","link":"","link_open_in":"same","slide_link":"nothing","link_pos":"front","slide_thumb":"","slide_bg_color":"#E7E7E7","slide_bg_external":"","bg_fit":"cover","bg_fit_x":"100","bg_fit_y":"100","bg_repeat":"no-repeat","bg_position":"center center","bg_position_x":"0","bg_position_y":"0","kenburn_effect":"off","kb_start_fit":"100","kb_end_fit":"100","bg_end_position":"center top","kb_duration":"9000","kb_easing":"Linear.easeNone"}', '[{"text":"Ultra Responsive","type":"text","left":584,"top":87,"animation":"lfr","easing":"Power3.easeInOut","speed":300,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":true,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_block_white","time":500,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","width":166,"height":34,"serial":"0","endTimeFinal":8700,"endSpeedFinal":300,"realEndTime":9000,"timeLast":8500,"alt":"","scaleX":"","scaleY":"","scaleProportional":false,"attrID":"","attrClasses":"","attrTitle":"","attrRel":""},{"text":"Loaded With Options","type":"text","left":597,"top":129,"animation":"lfr","easing":"Power3.easeInOut","speed":750,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":true,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_block_white","time":800,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","width":203,"height":34,"serial":1,"endTimeFinal":8250,"endSpeedFinal":300,"realEndTime":9000,"timeLast":8200,"alt":"","scaleX":"","scaleY":"","scaleProportional":false,"attrID":"","attrClasses":"","attrTitle":"","attrRel":""}]'), +(5, 2, 2, '{"background_type":"image","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Page_Slider\\/slide_2.jpg","image_id":"3873","title":"Slide","state":"published","date_from":"","date_to":"","slide_transition":"random","0":"Choose Image","slot_amount":7,"transition_rotation":0,"transition_duration":300,"delay":"","enable_link":"false","link_type":"regular","link":"","link_open_in":"same","slide_link":"nothing","link_pos":"front","slide_thumb":"","slide_bg_color":"#E7E7E7","slide_bg_external":"","bg_fit":"cover","bg_fit_x":"100","bg_fit_y":"100","bg_repeat":"no-repeat","bg_position":"center center","bg_position_x":"0","bg_position_y":"0","kenburn_effect":"off","kb_start_fit":"100","kb_end_fit":"100","bg_end_position":"center top","kb_duration":"9000","kb_easing":"Linear.easeNone"}', '[{"text":"Ultra Responsive","type":"text","left":584,"top":87,"animation":"lfr","easing":"Power3.easeInOut","speed":300,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":true,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_block_white","time":500,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","width":166,"height":34,"serial":"0","endTimeFinal":8700,"endSpeedFinal":300,"realEndTime":9000,"timeLast":8500,"alt":"","scaleX":"","scaleY":"","scaleProportional":false,"attrID":"","attrClasses":"","attrTitle":"","attrRel":""},{"text":"Loaded With Options","type":"text","left":597,"top":129,"animation":"lfr","easing":"Power3.easeInOut","speed":750,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":true,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_block_white","time":800,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","width":203,"height":34,"serial":1,"endTimeFinal":8250,"endSpeedFinal":300,"realEndTime":9000,"timeLast":8200,"alt":"","scaleX":"","scaleY":"","scaleProportional":false,"attrID":"","attrClasses":"","attrTitle":"","attrRel":""}]'), +(6, 3, 1, '{"title":"Slide","state":"published","slide_transition":"fade","0":"Choose Image","slot_amount":"7","transition_rotation":"0","transition_duration":"300","delay":"6000","enable_link":"false","link_type":"regular","link":"","link_open_in":"same","slide_link":"nothing","link_pos":"front","slide_thumb":"","fullwidth_centering":"true","background_type":"image","image_id":"4076","slide_bg_color":"#E7E7E7","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Small_Slider\\/slide_4.jpg","date_from":"","date_to":""}', '[{"style":"","text":"Image 5","type":"image","image_url":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Small_Slider\\/logo.png","left":191,"top":71,"animation":"lfl","easing":"easeOutExpo","speed":1500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","time":1000,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"1","endTimeFinal":4500,"endSpeedFinal":300,"realEndTime":6000,"timeLast":5000},{"style":"","text":"Image 6","type":"image","image_url":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Small_Slider\\/iphone.png","left":72,"top":29,"animation":"lfr","easing":"easeOutExpo","speed":1500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","time":800,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"2","endTimeFinal":4500,"endSpeedFinal":300,"realEndTime":6000,"timeLast":5200},{"text":"Wordpress Theme","type":"text","left":191,"top":119,"animation":"fade","easing":"easeOutExpo","speed":1000,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_med_green_text","time":1400,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"3","endTimeFinal":5000,"endSpeedFinal":300,"realEndTime":6000,"timeLast":4600}]'), +(7, 3, 2, '{"title":"Slide","state":"published","slide_transition":"fade","0":"Choose Image","slot_amount":"7","transition_rotation":"0","transition_duration":"300","delay":"6000","enable_link":"false","link_type":"regular","link":"","link_open_in":"same","slide_link":"nothing","link_pos":"front","slide_thumb":"","fullwidth_centering":"true","background_type":"image","image_id":"4076","slide_bg_color":"#E7E7E7","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Small_Slider\\/slide_4.jpg","date_from":"","date_to":""}', '[{"style":"","text":"Image 5","type":"image","image_url":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Small_Slider\\/logo.png","left":228,"top":76,"animation":"lfl","easing":"easeOutExpo","speed":1500,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","time":1400,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"0","endTimeFinal":4500,"endSpeedFinal":300,"realEndTime":6000,"timeLast":4600},{"text":"#1 Selling Theme","type":"text","left":228,"top":126,"animation":"fade","easing":"easeOutExpo","speed":1000,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"avada_med_green_text","time":1700,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"2","endTimeFinal":5000,"endSpeedFinal":300,"realEndTime":6000,"timeLast":4300},{"style":"","text":"Image 5","type":"image","image_url":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/revslider\\/Avada_Small_Slider\\/ipad2.png","left":31,"top":34,"animation":"lfb","easing":"easeOutExpo","speed":2000,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":false,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","time":1000,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","serial":"4","endTimeFinal":4000,"endSpeedFinal":300,"realEndTime":6000,"timeLast":5000}]'), +(8, 4, 1, '{"background_type":"solid","image":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/2014\\/01\\/cropped-header-01.jpg","image_id":"4612","title":"Slide","state":"published","date_from":"","date_to":"","slide_transition":"fade","0":"Choose Image","slot_amount":7,"transition_rotation":0,"transition_duration":300,"delay":"","enable_link":"false","link_type":"regular","link":"","link_open_in":"same","slide_link":"nothing","link_pos":"front","slide_thumb":"","slide_bg_color":"#E7E7E7","slide_bg_external":"","bg_fit":"contain","bg_fit_x":"100","bg_fit_y":"100","bg_repeat":"no-repeat","bg_position":"center top","bg_position_x":"0","bg_position_y":"0","kenburn_effect":"off","kb_start_fit":"100","kb_end_fit":"100","bg_end_position":"center top","kb_duration":"9000","kb_easing":"Linear.easeNone","0":"Choose Image"}', '[{"style":"","text":"Image 2","type":"image","image_url":"http:\\/\\/127.0.0.1:4001\\/wordpress\\/wp-content\\/uploads\\/2014\\/01\\/cropped-header-01.jpg","left":-87,"top":1,"animation":"tp-fade","easing":"Power3.easeInOut","speed":300,"align_hor":"left","align_vert":"top","hiddenunder":false,"resizeme":true,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","time":100,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","width":1120,"height":350,"serial":"0","endTimeFinal":8700,"endSpeedFinal":300,"realEndTime":9000,"timeLast":8900,"alt":"","scaleX":"1120","scaleY":"350","scaleProportional":true,"attrID":"","attrClasses":"","attrTitle":"","attrRel":""},{"text":"PROFFESIONALISM & PASSION FOR HORSES","type":"text","left":20,"top":48,"animation":"lfb","easing":"Quad.easeIn","speed":1000,"align_hor":"center","align_vert":"middle","hiddenunder":false,"resizeme":true,"link":"","link_open_in":"same","link_slide":"nothing","scrollunder_offset":"","style":"portada_h1","time":500,"endtime":"","endspeed":300,"endanimation":"auto","endeasing":"nothing","corner_left":"nothing","corner_right":"nothing","width":263,"height":18,"serial":"1","endTimeFinal":8000,"endSpeedFinal":300,"realEndTime":9000,"timeLast":8500,"alt":"","scaleX":"","scaleY":"","scaleProportional":false,"attrID":"","attrClasses":"","attrTitle":"","attrRel":"","link_id":"","link_class":"","link_title":"","link_rel":""}]'); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_rg_form` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_rg_form` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(150) NOT NULL, + `date_created` datetime NOT NULL, + `is_active` tinyint(1) NOT NULL DEFAULT '1', + `is_trash` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_rg_form` +-- + +INSERT INTO `drgrp_rg_form` (`id`, `title`, `date_created`, `is_active`, `is_trash`) VALUES +(1, 'Contacto', '2014-02-07 12:45:55', 1, 0); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_rg_form_meta` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_rg_form_meta` ( + `form_id` mediumint(8) unsigned NOT NULL, + `display_meta` longtext, + `entries_grid_meta` longtext, + `confirmations` longtext, + `notifications` longtext, + PRIMARY KEY (`form_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Volcar la base de datos para la tabla `drgrp_rg_form_meta` +-- + +INSERT INTO `drgrp_rg_form_meta` (`form_id`, `display_meta`, `entries_grid_meta`, `confirmations`, `notifications`) VALUES +(1, '{"title":"Contacto","description":"","labelPlacement":"top_label","descriptionPlacement":"below","button":{"type":"text","text":"Enviar","imageUrl":""},"fields":[{"adminLabel":"","adminOnly":"","allowsPrepopulate":false,"defaultValue":"","description":"","content":"","cssClass":"gf_left_half","errorMessage":"","id":1,"inputName":"","isRequired":true,"label":"Nombre","noDuplicates":"","size":"medium","type":"text","postCustomFieldName":"","displayAllCategories":false,"displayCaption":"","displayDescription":"","displayTitle":"","inputType":"","rangeMin":"","rangeMax":"","calendarIconType":"","calendarIconUrl":"","dateType":"","dateFormat":"","phoneFormat":"","addressType":"","defaultCountry":"","defaultProvince":"","defaultState":"","hideAddress2":"","hideCountry":"","hideState":"","inputs":null,"nameFormat":"","allowedExtensions":"","captchaType":"","pageNumber":1,"captchaTheme":"","simpleCaptchaSize":"","simpleCaptchaFontColor":"","simpleCaptchaBackgroundColor":"","failed_validation":"","productField":"","enablePasswordInput":"","maxLength":"","enablePrice":"","basePrice":"","multipleFiles":false,"maxFiles":"","calculationFormula":"","calculationRounding":"","enableCalculation":"","disableQuantity":false,"inputMask":false,"inputMaskValue":"","formId":1,"descriptionPlacement":"below"},{"adminLabel":"","adminOnly":"","allowsPrepopulate":false,"defaultValue":"","description":"","content":"","cssClass":"gf_right_half","errorMessage":"","id":2,"inputName":"","isRequired":true,"label":"Email","noDuplicates":"","size":"medium","type":"email","postCustomFieldName":"","displayAllCategories":false,"displayCaption":"","displayDescription":"","displayTitle":"","inputType":"","rangeMin":"","rangeMax":"","calendarIconType":"","calendarIconUrl":"","dateType":"","dateFormat":"","phoneFormat":"","addressType":"","defaultCountry":"","defaultProvince":"","defaultState":"","hideAddress2":"","hideCountry":"","hideState":"","inputs":null,"nameFormat":"","allowedExtensions":"","captchaType":"","pageNumber":1,"captchaTheme":"","simpleCaptchaSize":"","simpleCaptchaFontColor":"","simpleCaptchaBackgroundColor":"","failed_validation":"","productField":"","enablePasswordInput":"","maxLength":"","enablePrice":"","basePrice":"","multipleFiles":false,"maxFiles":"","calculationFormula":"","calculationRounding":"","enableCalculation":"","disableQuantity":false,"inputMask":false,"inputMaskValue":"","formId":1,"descriptionPlacement":"below"},{"adminLabel":"","adminOnly":"","allowsPrepopulate":false,"defaultValue":"","description":"","content":"","cssClass":"","errorMessage":"","id":3,"inputName":"","isRequired":true,"label":"Mensaje","noDuplicates":"","size":"medium","type":"textarea","postCustomFieldName":"","displayAllCategories":false,"displayCaption":"","displayDescription":"","displayTitle":"","inputType":"","rangeMin":"","rangeMax":"","calendarIconType":"","calendarIconUrl":"","dateType":"","dateFormat":"","phoneFormat":"","addressType":"","defaultCountry":"","defaultProvince":"","defaultState":"","hideAddress2":"","hideCountry":"","hideState":"","inputs":null,"nameFormat":"","allowedExtensions":"","captchaType":"","pageNumber":1,"captchaTheme":"","simpleCaptchaSize":"","simpleCaptchaFontColor":"","simpleCaptchaBackgroundColor":"","failed_validation":"","productField":"","enablePasswordInput":"","maxLength":"","enablePrice":"","basePrice":"","multipleFiles":false,"maxFiles":"","calculationFormula":"","calculationRounding":"","enableCalculation":"","disableQuantity":false,"inputMask":false,"inputMaskValue":"","formId":1,"descriptionPlacement":"below"}],"id":1,"useCurrentUserAsAuthor":true,"postContentTemplateEnabled":false,"postTitleTemplateEnabled":false,"postTitleTemplate":"","postContentTemplate":"","lastPageButton":null,"pagination":null,"firstPageCssClass":null,"cssClass":"","enableHoneypot":"1","enableAnimation":"","limitEntries":"","limitEntriesCount":"","limitEntriesPeriod":"","limitEntriesMessage":"","scheduleForm":"","scheduleStart":"","scheduleStartHour":"","scheduleStartMinute":"","scheduleStartAmpm":"","scheduleEnd":"","scheduleEndHour":"","scheduleEndMinute":"","scheduleEndAmpm":"","schedulePendingMessage":"","scheduleMessage":"","requireLogin":"","requireLoginMessage":""}', NULL, '{"52f4d583e2fcc":{"id":"52f4d583e2fcc","name":"Confirmaci\\u00f3n por defecto","isDefault":true,"type":"message","message":"\\u00a1Gracias por contactar con nosotros! Nos pondremos en contacto contigo muy pronto.","url":"","pageId":"","queryString":""}}', '{"52f4d583e2e42":{"id":"52f4d583e2e42","to":"{admin_email}","name":"Notificaci\\u00f3n del Administrador","event":"form_submission","toType":"email","subject":"Nuevos env\\u00edos de {form_title}","message":"{all_fields}"}}'); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_rg_form_view` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_rg_form_view` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `form_id` mediumint(8) unsigned NOT NULL, + `date_created` datetime NOT NULL, + `ip` char(15) DEFAULT NULL, + `count` mediumint(8) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `form_id` (`form_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=32 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_rg_form_view` +-- + +INSERT INTO `drgrp_rg_form_view` (`id`, `form_id`, `date_created`, `ip`, `count`) VALUES +(1, 1, '2014-02-07 12:52:07', '127.0.0.1', 8), +(2, 1, '2014-02-07 13:01:17', '127.0.0.1', 2), +(3, 1, '2014-02-07 17:57:23', '127.0.0.1', 4), +(4, 1, '2014-02-07 18:01:17', '127.0.0.1', 16), +(5, 1, '2014-02-14 15:54:40', '127.0.0.1', 2), +(6, 1, '2014-02-20 16:30:54', '127.0.0.1', 11), +(7, 1, '2014-02-21 10:01:53', '127.0.0.1', 4), +(8, 1, '2014-02-21 11:38:47', '127.0.0.1', 2), +(9, 1, '2014-02-21 12:23:14', '127.0.0.1', 1), +(10, 1, '2014-02-24 17:40:28', '127.0.0.1', 9), +(11, 1, '2014-02-24 18:08:58', '127.0.0.1', 21), +(12, 1, '2014-02-25 11:23:58', '127.0.0.1', 9), +(13, 1, '2014-02-25 12:17:56', '127.0.0.1', 8), +(14, 1, '2014-02-25 16:00:33', '127.0.0.1', 5), +(15, 1, '2014-02-25 17:07:53', '127.0.0.1', 10), +(16, 1, '2014-02-25 18:01:58', '127.0.0.1', 14), +(17, 1, '2014-02-26 08:50:12', '127.0.0.1', 1), +(18, 1, '2014-02-26 09:30:51', '127.0.0.1', 2), +(19, 1, '2014-02-26 10:30:45', '127.0.0.1', 21), +(20, 1, '2014-02-26 11:02:13', '127.0.0.1', 30), +(21, 1, '2014-02-26 12:00:41', '127.0.0.1', 30), +(22, 1, '2014-02-26 13:04:53', '127.0.0.1', 5), +(23, 1, '2014-02-26 15:10:53', '127.0.0.1', 55), +(24, 1, '2014-02-26 16:01:14', '127.0.0.1', 54), +(25, 1, '2014-02-26 17:00:52', '127.0.0.1', 34), +(26, 1, '2014-02-26 18:01:14', '127.0.0.1', 64), +(27, 1, '2014-02-26 19:02:44', '127.0.0.1', 6), +(28, 1, '2014-02-27 14:45:43', '127.0.0.1', 2), +(29, 1, '2014-02-27 15:23:03', '127.0.0.1', 35), +(30, 1, '2014-02-28 11:03:10', '127.0.0.1', 11), +(31, 1, '2014-02-28 17:29:07', '127.0.0.1', 4); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_rg_lead` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_rg_lead` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `form_id` mediumint(8) unsigned NOT NULL, + `post_id` bigint(20) unsigned DEFAULT NULL, + `date_created` datetime NOT NULL, + `is_starred` tinyint(1) NOT NULL DEFAULT '0', + `is_read` tinyint(1) NOT NULL DEFAULT '0', + `ip` varchar(39) NOT NULL, + `source_url` varchar(200) NOT NULL DEFAULT '', + `user_agent` varchar(250) NOT NULL DEFAULT '', + `currency` varchar(5) DEFAULT NULL, + `payment_status` varchar(15) DEFAULT NULL, + `payment_date` datetime DEFAULT NULL, + `payment_amount` decimal(19,2) DEFAULT NULL, + `payment_method` varchar(30) DEFAULT NULL, + `transaction_id` varchar(50) DEFAULT NULL, + `is_fulfilled` tinyint(1) DEFAULT NULL, + `created_by` bigint(20) unsigned DEFAULT NULL, + `transaction_type` tinyint(1) DEFAULT NULL, + `status` varchar(20) NOT NULL DEFAULT 'active', + PRIMARY KEY (`id`), + KEY `form_id` (`form_id`), + KEY `status` (`status`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_rg_lead` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_rg_lead_detail` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_rg_lead_detail` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `lead_id` int(10) unsigned NOT NULL, + `form_id` mediumint(8) unsigned NOT NULL, + `field_number` float NOT NULL, + `value` varchar(200) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `form_id` (`form_id`), + KEY `lead_id` (`lead_id`), + KEY `lead_field_number` (`lead_id`,`field_number`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_rg_lead_detail` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_rg_lead_detail_long` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_rg_lead_detail_long` ( + `lead_detail_id` bigint(20) unsigned NOT NULL, + `value` longtext, + PRIMARY KEY (`lead_detail_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Volcar la base de datos para la tabla `drgrp_rg_lead_detail_long` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_rg_lead_meta` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_rg_lead_meta` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `form_id` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lead_id` bigint(20) unsigned NOT NULL, + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext, + PRIMARY KEY (`id`), + KEY `meta_key` (`meta_key`), + KEY `lead_id` (`lead_id`), + KEY `form_id_meta_key` (`form_id`,`meta_key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_rg_lead_meta` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_rg_lead_notes` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_rg_lead_notes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `lead_id` int(10) unsigned NOT NULL, + `user_name` varchar(250) DEFAULT NULL, + `user_id` bigint(20) DEFAULT NULL, + `date_created` datetime NOT NULL, + `value` longtext, + PRIMARY KEY (`id`), + KEY `lead_id` (`lead_id`), + KEY `lead_user_key` (`lead_id`,`user_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_rg_lead_notes` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_terms` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_terms` ( + `term_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(200) NOT NULL DEFAULT '', + `slug` varchar(200) NOT NULL DEFAULT '', + `term_group` bigint(10) NOT NULL DEFAULT '0', + PRIMARY KEY (`term_id`), + UNIQUE KEY `slug` (`slug`), + KEY `name` (`name`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=59 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_terms` +-- + +INSERT INTO `drgrp_terms` (`term_id`, `name`, `slug`, `term_group`) VALUES +(1, 'Sin categoría', 'sin-categoria', 0), +(51, 'Enlaces a razas - Inglés0', 'enlaces-a-razas-ingles0', 0), +(43, 'Gelding', 'gelding', 0), +(40, 'Semental', 'semental', 0), +(42, 'Capón', 'capon', 0), +(41, 'Stallion', 'stallion', 0), +(54, 'Oldenburg @en', 'oldenburg-en', 0), +(14, 'Group 1', 'group-1', 0), +(15, 'group1', 'group1', 0), +(53, 'Holsteiner @en', 'holsteiner-en', 0), +(50, 'Enlaces a razas', 'enlaces-a-razas', 0), +(44, 'p', 'p', 0), +(48, 'Competition', 'competition', 0), +(47, 'Menú principal - Inglés', 'menu-principal-ingles', 0), +(49, 'Breeding', 'breeding', 0), +(26, 'Main', 'main', 0), +(27, '404', '404', 0), +(28, 'Top', 'top', 0), +(30, 'Menú principal', 'menu-principal', 0), +(31, 'Sin categoría @en', 'sin-categoria-en', 0), +(52, 'Cross', 'cross', 0), +(33, 'Zangersheide', 'zangersheide', 0), +(34, 'Holsteiner', 'holsteiner', 0), +(35, 'Oldenburg', 'oldenburg', 0), +(36, 'Cruzado', 'cruzado', 0), +(37, 'Westphalian', 'westphalian', 0), +(38, 'Competición', 'competicion', 0), +(39, 'Cría', 'cria', 0), +(55, 'Westphalian @en', 'westphalian-en', 0), +(56, 'Zangersheide @en', 'zangersheide-en', 0), +(57, 'p @en', 'p-en', 0), +(58, 'Portada', 'portada', 0); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_term_relationships` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_term_relationships` ( + `object_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `term_taxonomy_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `term_order` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`object_id`,`term_taxonomy_id`), + KEY `term_taxonomy_id` (`term_taxonomy_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Volcar la base de datos para la tabla `drgrp_term_relationships` +-- + +INSERT INTO `drgrp_term_relationships` (`object_id`, `term_taxonomy_id`, `term_order`) VALUES +(1, 1, 0), +(5048, 1, 0), +(5045, 1, 0), +(4955, 57, 0), +(5051, 1, 0), +(4461, 32, 0), +(4867, 32, 0), +(4693, 40, 0), +(4970, 56, 0), +(4699, 40, 0), +(4990, 62, 0), +(4970, 57, 0), +(4694, 40, 0), +(5079, 71, 0), +(5076, 58, 0), +(5076, 78, 0), +(5078, 60, 0), +(5076, 70, 0), +(5078, 74, 0), +(5085, 73, 0), +(5074, 70, 0), +(5073, 58, 0), +(5084, 73, 0), +(5075, 60, 0), +(5078, 71, 0), +(5075, 77, 0), +(5083, 73, 0), +(5075, 70, 0), +(5074, 60, 0), +(4955, 65, 0), +(4955, 66, 0), +(4462, 32, 0), +(5044, 72, 0), +(5043, 72, 0), +(5042, 72, 0), +(4466, 32, 0), +(4467, 32, 0), +(4469, 32, 0), +(4470, 32, 0), +(4471, 32, 0), +(4472, 32, 0), +(4473, 32, 0), +(4951, 55, 0), +(4958, 32, 0), +(4955, 56, 0), +(5077, 70, 0), +(5080, 74, 0), +(207, 1, 0), +(5079, 74, 0), +(209, 1, 0), +(215, 1, 0), +(5082, 73, 0), +(5080, 71, 0), +(202, 1, 0), +(4957, 32, 0), +(4953, 55, 0), +(4948, 55, 0), +(5080, 60, 0), +(213, 1, 0), +(5081, 73, 0), +(5079, 60, 0), +(211, 1, 0), +(3876, 19, 0), +(3877, 19, 0), +(3878, 19, 0), +(4052, 20, 0), +(4055, 20, 0), +(4477, 32, 0), +(4478, 32, 0), +(4479, 32, 0), +(5041, 72, 0), +(5040, 72, 0), +(5036, 69, 0), +(5035, 69, 0), +(5034, 69, 0), +(5020, 69, 0), +(5021, 69, 0), +(4487, 32, 0), +(5022, 69, 0), +(4948, 59, 0), +(4948, 63, 0), +(4951, 59, 0), +(4492, 32, 0), +(4493, 32, 0), +(4494, 32, 0), +(4495, 32, 0), +(4951, 63, 0), +(4497, 32, 0), +(4953, 59, 0), +(4499, 32, 0), +(4953, 63, 0), +(4994, 57, 0), +(4502, 33, 0), +(4503, 33, 0), +(4504, 33, 0), +(4505, 33, 0), +(4506, 32, 0), +(4994, 65, 0), +(4994, 56, 0), +(4509, 32, 0), +(4510, 32, 0), +(4511, 32, 0), +(4512, 32, 0), +(4990, 56, 0), +(4970, 64, 0), +(4990, 59, 0), +(4971, 59, 0), +(4517, 32, 0), +(4518, 32, 0), +(4519, 32, 0), +(4971, 56, 0), +(4971, 61, 0), +(4522, 32, 0), +(4523, 32, 0), +(4524, 32, 0), +(4525, 32, 0), +(4526, 32, 0), +(4527, 32, 0), +(4528, 32, 0), +(4529, 32, 0), +(4530, 32, 0), +(4531, 32, 0), +(4532, 32, 0), +(4533, 32, 0), +(4967, 40, 0), +(4535, 32, 0), +(4536, 32, 0), +(4537, 32, 0), +(4538, 32, 0), +(4539, 32, 0), +(4540, 32, 0), +(4541, 32, 0), +(4542, 32, 0), +(4543, 32, 0), +(4544, 32, 0), +(4545, 34, 0), +(4546, 34, 0), +(4547, 34, 0), +(4548, 34, 0), +(4549, 32, 0), +(4550, 32, 0), +(4551, 32, 0), +(4552, 32, 0), +(4553, 32, 0), +(4554, 32, 0), +(4555, 32, 0), +(4556, 32, 0), +(4557, 32, 0), +(4558, 32, 0), +(4559, 32, 0), +(4560, 32, 0), +(4561, 32, 0), +(4562, 32, 0), +(4563, 32, 0), +(4564, 32, 0), +(4565, 32, 0), +(4566, 32, 0), +(4567, 32, 0), +(4568, 32, 0), +(5074, 76, 0), +(5077, 79, 0), +(5077, 58, 0), +(4572, 33, 0), +(4573, 32, 0), +(4574, 32, 0), +(4575, 32, 0), +(4576, 32, 0), +(4577, 32, 0), +(4578, 32, 0), +(4579, 32, 0), +(4580, 32, 0), +(4581, 32, 0), +(5073, 75, 0), +(5077, 75, 0), +(5073, 70, 0), +(5053, 1, 0), +(4586, 32, 0), +(4587, 32, 0), +(4965, 40, 0), +(4966, 40, 0), +(4590, 34, 0), +(4591, 34, 0), +(4592, 32, 0), +(4593, 32, 0), +(4594, 32, 0); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_term_taxonomy` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_term_taxonomy` ( + `term_taxonomy_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `term_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `taxonomy` varchar(32) NOT NULL DEFAULT '', + `description` longtext NOT NULL, + `parent` bigint(20) unsigned NOT NULL DEFAULT '0', + `count` bigint(20) NOT NULL DEFAULT '0', + PRIMARY KEY (`term_taxonomy_id`), + UNIQUE KEY `term_id_taxonomy` (`term_id`,`taxonomy`), + KEY `taxonomy` (`taxonomy`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=81 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_term_taxonomy` +-- + +INSERT INTO `drgrp_term_taxonomy` (`term_taxonomy_id`, `term_id`, `taxonomy`, `description`, `parent`, `count`) VALUES +(1, 1, 'category', '', 0, 10), +(56, 38, 'horse_categories', '', 0, 5), +(55, 39, 'horse_categories', '', 0, 3), +(66, 44, 'horse_tags', '', 0, 1), +(19, 14, 'slide-page', '', 0, 3), +(20, 15, 'themefusion_es_groups', '', 0, 2), +(64, 33, 'horse_breeds', '', 0, 1), +(65, 34, 'horse_breeds', '', 0, 2), +(63, 36, 'horse_breeds', '', 0, 3), +(70, 48, 'horse_categories', '', 0, 0), +(71, 49, 'horse_categories', '', 0, 0), +(60, 43, 'horse_genders', '', 0, 0), +(32, 26, 'nav_menu', '', 0, 86), +(33, 27, 'nav_menu', '', 0, 0), +(34, 28, 'nav_menu', '', 0, 0), +(61, 37, 'horse_breeds', '', 0, 1), +(62, 35, 'horse_breeds', '', 0, 1), +(76, 54, 'horse_breeds', '', 0, 0), +(77, 55, 'horse_breeds', '', 0, 0), +(78, 56, 'horse_breeds', '', 0, 0), +(57, 40, 'horse_genders', '', 0, 3), +(59, 42, 'horse_genders', '', 0, 5), +(58, 41, 'horse_genders', '', 0, 0), +(40, 30, 'nav_menu', '', 0, 0), +(41, 31, 'category', '', 0, 0), +(69, 47, 'nav_menu', '', 0, 6), +(72, 50, 'nav_menu', '', 0, 5), +(73, 51, 'nav_menu', '', 0, 5), +(74, 52, 'horse_breeds', '', 0, 0), +(75, 53, 'horse_breeds', '', 0, 0), +(79, 57, 'horse_tags', '', 0, 0), +(80, 58, 'themefusion_es_groups', '', 0, 0); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_usermeta` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_usermeta` ( + `umeta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext, + PRIMARY KEY (`umeta_id`), + KEY `user_id` (`user_id`), + KEY `meta_key` (`meta_key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=36 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_usermeta` +-- + +INSERT INTO `drgrp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES +(1, 1, 'first_name', ''), +(2, 1, 'last_name', ''), +(3, 1, 'nickname', 'rodax'), +(4, 1, 'description', ''), +(5, 1, 'rich_editing', 'true'), +(6, 1, 'comment_shortcuts', 'false'), +(7, 1, 'admin_color', 'fresh'), +(8, 1, 'use_ssl', '0'), +(9, 1, 'show_admin_bar_front', 'true'), +(10, 1, 'drgrp_capabilities', 'a:2:{s:13:"administrator";b:1;s:9:"translate";b:1;}'), +(11, 1, 'drgrp_user_level', '10'), +(12, 1, 'dismissed_wp_pointers', 'wp330_toolbar,wp330_saving_widgets,wp340_choose_image_from_library,wp340_customize_current_theme_link,wp350_media,wp360_revisions,wp360_locks'), +(13, 1, 'default_password_nag', ''), +(14, 1, 'show_welcome_panel', '1'), +(15, 1, 'drgrp_user-settings', 'm6=o&hidetb=1&editor=html&m10=o&m5=o&urlbutton=none&imgsize=medium&align=none&galfile=1&galcols=2&m9=o&m8=o&m7=o&m11=o&m13=o&m4=o&m15=c&m12=o&m14=c&m2=o&m1=o&m0=o&libraryContent=browse&ed_size=644&wplink=1'), +(16, 1, 'drgrp_user-settings-time', '1393589215'), +(17, 1, 'drgrp_dashboard_quick_press_last_post_id', '5090'), +(19, 1, 'nav_menu_recently_edited', '50'), +(20, 1, 'managenav-menuscolumnshidden', 'a:4:{i:0;s:11:"link-target";i:1;s:11:"css-classes";i:2;s:3:"xfn";i:3;s:11:"description";}'), +(21, 1, 'metaboxhidden_nav-menus', 'a:12:{i:0;s:8:"add-post";i:1;s:19:"add-avada_portfolio";i:2;s:13:"add-avada_faq";i:3;s:23:"add-themefusion_elastic";i:4;s:12:"add-post_tag";i:5;s:15:"add-post_format";i:6;s:22:"add-portfolio_category";i:7;s:20:"add-portfolio_skills";i:8;s:18:"add-portfolio_tags";i:9;s:16:"add-faq_category";i:10;s:25:"add-themefusion_es_groups";i:11;s:14:"add-slide-page";}'), +(22, 1, 'drgrp_nav_menu_recently_edited', '26'), +(23, 1, 'meta-box-order_dashboard', 'a:2:{i:0;b:0;s:4:"side";s:21:"icl_dashboard_widget,";}'), +(24, 1, 'closedpostboxes_page', 'a:4:{i:0;s:9:"cmsnavdiv";i:1;s:12:"revisionsdiv";i:2;s:10:"postcustom";i:3;s:14:"icl_div_config";}'), +(25, 1, 'metaboxhidden_page', 'a:4:{i:0;s:16:"commentstatusdiv";i:1;s:11:"commentsdiv";i:2;s:7:"slugdiv";i:3;s:9:"authordiv";}'), +(26, 1, 'layerslider_help_wp_pointer', '1'), +(27, 1, 'closedpostboxes_avada_portfolio', 'a:5:{i:0;s:7:"icl_div";i:1;s:9:"formatdiv";i:2;s:19:"portfolio_skillsdiv";i:3;s:10:"postcustom";i:4;s:14:"icl_div_config";}'), +(28, 1, 'metaboxhidden_avada_portfolio', 'a:1:{i:0;s:7:"slugdiv";}'), +(29, 1, 'meta-box-order_avada_portfolio', 'a:4:{s:4:"side";s:251:"icl_div,submitdiv,formatdiv,portfolio_categorydiv,portfolio_skillsdiv,tagsdiv-portfolio_tags,pageparentdiv,postimagediv,featured-image-2_avada_portfolio,featured-image-3_avada_portfolio,featured-image-4_avada_portfolio,featured-image-5_avada_portfolio";s:6:"normal";s:97:"postexcerpt,revisionsdiv,postcustom,commentstatusdiv,commentsdiv,slugdiv,authordiv,icl_div_config";s:3:"sbg";s:7:"sbg_box";s:8:"advanced";s:22:"pyre_portfolio_options";}'), +(30, 1, 'screen_layout_avada_portfolio', '2'), +(31, 1, 'closedpostboxes_drg_horse', 'a:3:{i:0;s:10:"postcustom";i:1;s:14:"icl_div_config";i:2;s:17:"pyre_post_options";}'), +(32, 1, 'metaboxhidden_drg_horse', 'a:1:{i:0;s:7:"slugdiv";}'), +(33, 1, 'drgrp_language_pairs', 'a:1:{s:2:"es";a:1:{s:2:"en";i:1;}}'), +(34, 1, 'tgmpa_dismissed_notice', '1'), +(35, 1, 'layerslider_builder_help_wp_pointer', '1'); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_users` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_users` ( + `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `user_login` varchar(60) NOT NULL DEFAULT '', + `user_pass` varchar(64) NOT NULL DEFAULT '', + `user_nicename` varchar(50) NOT NULL DEFAULT '', + `user_email` varchar(100) NOT NULL DEFAULT '', + `user_url` varchar(100) NOT NULL DEFAULT '', + `user_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `user_activation_key` varchar(60) NOT NULL DEFAULT '', + `user_status` int(11) NOT NULL DEFAULT '0', + `display_name` varchar(250) NOT NULL DEFAULT '', + PRIMARY KEY (`ID`), + KEY `user_login_key` (`user_login`), + KEY `user_nicename` (`user_nicename`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_users` +-- + +INSERT INTO `drgrp_users` (`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status`, `display_name`) VALUES +(1, 'rodax', '$P$BxywYypksbo.1I8FRGqirAnI.s7CRh.', 'rodax', 'darranz@rodax-software.com', '', '2014-01-29 21:04:51', '', 0, 'rodax'); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_wpgmza` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_wpgmza` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `map_id` int(11) NOT NULL, + `address` varchar(700) NOT NULL, + `description` mediumtext NOT NULL, + `pic` varchar(700) NOT NULL, + `link` varchar(700) NOT NULL, + `icon` varchar(700) NOT NULL, + `lat` varchar(100) NOT NULL, + `lng` varchar(100) NOT NULL, + `anim` varchar(3) NOT NULL, + `title` varchar(700) NOT NULL, + `infoopen` varchar(3) NOT NULL, + `category` int(11) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_wpgmza` +-- + +INSERT INTO `drgrp_wpgmza` (`id`, `map_id`, `address`, `description`, `pic`, `link`, `icon`, `lat`, `lng`, `anim`, `title`, `infoopen`, `category`) VALUES +(1, 1, 'London', '', '', '', '', '51.5081290', '-0.1280050', '', '', '', 0); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_wpgmza_categories` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_wpgmza_categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `active` tinyint(1) NOT NULL, + `category_name` varchar(50) NOT NULL, + `category_icon` varchar(700) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_wpgmza_categories` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_wpgmza_maps` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_wpgmza_maps` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `map_title` varchar(50) NOT NULL, + `map_width` varchar(6) NOT NULL, + `map_height` varchar(6) NOT NULL, + `map_start_lat` varchar(700) NOT NULL, + `map_start_lng` varchar(700) NOT NULL, + `map_start_location` varchar(700) NOT NULL, + `map_start_zoom` int(10) NOT NULL, + `default_marker` varchar(700) NOT NULL, + `type` int(10) NOT NULL, + `alignment` int(10) NOT NULL, + `directions_enabled` int(10) NOT NULL, + `styling_enabled` int(10) NOT NULL, + `styling_json` mediumtext NOT NULL, + `active` int(1) NOT NULL, + `kml` varchar(700) NOT NULL, + `bicycle` int(10) NOT NULL, + `traffic` int(10) NOT NULL, + `dbox` int(10) NOT NULL, + `dbox_width` varchar(10) NOT NULL, + `listmarkers` int(10) NOT NULL, + `listmarkers_advanced` int(10) NOT NULL, + `ugm_enabled` int(10) NOT NULL, + `fusion` varchar(100) NOT NULL, + `map_width_type` varchar(3) NOT NULL, + `map_height_type` varchar(3) NOT NULL, + `mass_marker_support` int(10) NOT NULL, + `ugm_access` int(10) NOT NULL, + `order_markers_by` int(10) NOT NULL, + `order_markers_choice` int(10) NOT NULL, + `show_user_location` int(3) NOT NULL, + `filterbycat` tinyint(1) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_wpgmza_maps` +-- + +INSERT INTO `drgrp_wpgmza_maps` (`id`, `map_title`, `map_width`, `map_height`, `map_start_lat`, `map_start_lng`, `map_start_location`, `map_start_zoom`, `default_marker`, `type`, `alignment`, `directions_enabled`, `styling_enabled`, `styling_json`, `active`, `kml`, `bicycle`, `traffic`, `dbox`, `dbox_width`, `listmarkers`, `listmarkers_advanced`, `ugm_enabled`, `fusion`, `map_width_type`, `map_height_type`, `mass_marker_support`, `ugm_access`, `order_markers_by`, `order_markers_choice`, `show_user_location`, `filterbycat`) VALUES +(1, 'My first map', '600', '400', '51.5081290', '-0.1280050', '51.5081290,-0.1280050', 1, '0', 1, 0, 1, 0, '', 0, '', 2, 2, 1, '250', 0, 0, 0, '', 'px', 'px', 1, 0, 1, 2, 0, 0); + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_wpgmza_polygon` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_wpgmza_polygon` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `map_id` int(11) NOT NULL, + `polydata` longtext NOT NULL, + `linecolor` varchar(7) NOT NULL, + `fillcolor` varchar(7) NOT NULL, + `opacity` varchar(3) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_wpgmza_polygon` +-- + + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `drgrp_wpgmza_polylines` +-- + +CREATE TABLE IF NOT EXISTS `drgrp_wpgmza_polylines` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `map_id` int(11) NOT NULL, + `polydata` longtext NOT NULL, + `linecolor` varchar(7) NOT NULL, + `linethickness` varchar(3) NOT NULL, + `opacity` varchar(3) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- +-- Volcar la base de datos para la tabla `drgrp_wpgmza_polylines` +-- + diff --git a/información/LOGOS RR/RR LOGO 001.eps b/información/LOGOS RR/RR LOGO 001.eps new file mode 100644 index 0000000..2d681fb Binary files /dev/null and b/información/LOGOS RR/RR LOGO 001.eps differ diff --git a/información/LOGOS RR/RR LOGO 001.jpg b/información/LOGOS RR/RR LOGO 001.jpg new file mode 100644 index 0000000..b8ecb93 Binary files /dev/null and b/información/LOGOS RR/RR LOGO 001.jpg differ diff --git a/información/LOGOS RR/RR LOGO 001.pdf b/información/LOGOS RR/RR LOGO 001.pdf new file mode 100644 index 0000000..9c46a07 --- /dev/null +++ b/información/LOGOS RR/RR LOGO 001.pdf @@ -0,0 +1,1650 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + RR LOGO 001 + + + + + 2013-11-03T14:15:50+04:00 + 2013-11-03T14:15:50+04:00 + 2013-11-03T14:15:50+04:00 + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 44 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgALAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AB4VdirsVdirsVeq/kP8A 72ax/wAY4P8AiT4Cr2DFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq+SsKpv5U8vy+YNetdLjf0hMSZZaV4RoCzGnjQbe+KvZ0/KDyLDCPWhlfiPilknZSfc8Sq /hgVb/yq78uf99f9PL/81Yquj/Kj8v5CRHbs5HULcSH9TYqxPzwjfl/eWn+FJGsf0hG/1vlxn5ek w4f3wkpTmemKsb/5Wv5//wCrp/yQtv8AqnhV3/K1/P8A/wBXT/khbf8AVPFV0X5tefUkVm1FZFBq Y2ggCn2PFFP3HFXtXkzzIvmLy/b6mUEczVS4jXosiGjUrXY9RgVO8VePeefza1u31m503RGS3hs3 aF7koskjyIaPTmCoUNsNsVYsv5j/AJgS1ZNSmYV3KxR0r9CYVc35ifmCqlm1GdVHUmOMD/iGKp55 W/N7zKuq21vqzpe2k8ixSN6aJIoc05KYwoNK9CN8VTH80/OXmbR/M62mm3721ubaNzGqoRyZmBPx KT2wKw7/AJWZ56/6u0n/AAEX/NGFXf8AKzPPX/V2k/4CL/mjFUVYfmz53tZ1eS+F1EDVoZo4yrDw 5KquPoOKvVfMf5gwab5OtdftoRJLqAQWkDnYO6ljzpQkJxNaYFeUTfmj59u5wI78oWPwQwRRjr2H wlj9JwqtPmz8yia/W7/f/Ib/AJpxVtfzL/MCzl4y6hIHHWOaKM7e4ZK4q9W/LbzzL5osbhLuNI9Q syol9OoR0evFwDWh+E1H9cCvK9O/MjztLqFrFJqsjRvNGrrwj3BYAj7OFX0LgVDanLJDpt3LGeMk cMjo3gyoSDirwfRPzF86XGs2EE2qSPFLcwpIhSPdWcAjZfDCrJPzT85eZtH8zraabfvbW5to3Maq hHJmYE/EpPbArDv+Vmeev+rtJ/wEX/NGFW/+Vmeev+rtJ/wEX/NGKp75Y/OHzHFqkEesypeWMrhJ mMaRvGGNOamMIPh60IxV51irL/yp1C0sfOlq91IIo5UkiEjEBQzL8NSfEimKvTPza8ua/rek2cek oZxBKXuLYMqlgVorfEVB477e+BXlf/Ks/PX/AFaZP+Di/wCa8Ks+/KLyp5h0XUr+XVLNrWOWFUjZ mQ1YPWnwk4FS/wDPj/ezR/8AjHP/AMSTEKgvyk83eXtAg1NNWu/qzXDxGEenLJyCB+X92r06jrhV 6B/ytfyB/wBXT/khc/8AVPAryf8AM/X9B1vzAl1o45RrCqT3HAx+q9Sa8WCtsCBUjCr0/wDJ6wub TyZG06GP6zNJPEGFDwYKqmh8eNR7YFZtir5W1lmfV752NWa4lJPuXOFX06kdtpOk8IIwtvZQHhGg A+GNa0HzpgV50356aQ6lW0mZlYUZS6EEHsdsVYpb67+Wv12KWPy/dJL6ishFyeIblUbV6YpVfzq/ 5TFf+YSL/iT4QhP/AMs/PflTRfK6WOp331e6E0jmP0pn+FiKGqIw/HArK/8Ala/kD/q6f8kLn/qn irxXzrqem6v5ovb7S4ilrOy+mOPEuwUBn4jpyYE/24VZP5/s7rT/ACJ5TsblSkqrK8sb15KxCsFN elOdKYqmX5DQQtPrU7IDNGtuiSHqFcylgPnwGJV69gV5t+edtA3lyxuig9eO8WJZKCoR4pGYV+aD FWP/AJFSEa7qMdNmtQ1f9WRR/wAbYSrz7Sf+OrZf8Z4v+JjFX1VgVB6z/wAci+/5h5f+IHFXzP5d /wCUg0z/AJi4P+Ti4VZb+dX/ACmK/wDMJF/xJ8QrI/yw86+V9I8rJZ6jfrb3ImkcxlZCeLEUNVUj ArKZ/wAz/IPovz1NJEIIaMRStyB7U4d8VfPUpWa6cwJxSRz6UfcBj8K4VUsVZJ+Xvl+013zTa2N5 U2lHlmQEgsEWvGo3FTSvtir2fzV5h07yNoUElrYCSN5RDFbRt6Q+ySWLcX7L4YFYf/yvv/tRf9PX /XnDSsn8ifmN/iu8urb9H/Uvq0Yk5et6vKrUpThHTArEvz4/3s0f/jHP/wASTEKxfyP+X83muK8k jvVtPqjIpDIX5eoGPZl6ccKso/5UPef9XiP/AJEN/wA14LVhHmry5eeVNdFkbkSyoiTw3EQKGjVp sehBXxwq9v8Ay212/wBa8qW93fsJLlHeF5QAOYQ7MQKCtDgVlGKvmHzbp8un+ZtTtZEKFLmUoD3R mLIwr4qQcKvQLD88YxYxW2o6SZ3CCOeRZRxk2oTwZP2u4rgpUDN+ZPkoBvR8mWbGnwF0gAr7gRHC rB9ItZtT160t4Y/3l1cIBHGKAcnqaDsFH3DFWW/nV/ymK/8AMJF/xJ8QrvJn5V/4l0RdT/Sn1TlI 8fo+h6n2O/L1E/Viqe/8qE/7Xv8A06/9fsbV57qNtqflXzJPbQXRS8sJKJcRErUEBgaHxB3BxVn3 5ive65+Xmha7InKVCpuyo2HqrxL7dAXQffgViPkTz1ceVLm5dbZbu3u1QTRFvTasZPEq1G/nPbCr N/8AlfNr/wBWZ/8AkeP+qeBWJefPzIn81W9vaLZiztIJPVKmT1Gd6FQSeKAUDHthVkv5E6fP62qa gVIg4x26MRsz1LsAf8kUr88BV5ld2t7pOqSW06mK7s5aMD2ZDsfl3GFXpdv+fNysQFxoySy0HJ47 gxqT3+ExyfrxpUNrP53X17p9xaWulpatcRtEZXmMpUOCpIASPeh2xpWG+S9NutQ81aZb26lmW4jl kIFQscbhnY/IDFWR/nV/ymK/8wkX/EnxCqflD8rbjzJoy6nHqCWytI8fpNGXPwd6hhiqd/8AKhrz /q8R/wDIhv8AmvG1Tzy3+TOlaXqMV9e3rag1uwkhi9MRR813UsOUhah3pXArw7CqM0nWNS0m8F5p 05t7lVKiRQCaN1HxAjFUXrPm3zFrUCQapetcxRtzRGVBRqEV+EDscVSjFUx0bzDrOiyyS6XdNayS qFkZQpqoNafEDir0H8v4l89Xl7/istqf1GNPqnJmi4eozc/7kx1rxHXAr07QfK2g6AsyaTa/VluC pmHqSScileP94z06npiqa4qkWt+RvK2t3gvdUsvrFyEEYk9WZPhUkgUR1HfwxVH6Noml6LZCx0yH 6vahi4j5O/xN1NXLH8cVR2KpXrPlby/rXE6pYxXLqOKyMCsgHWgdSrU9q4qkT/lH5EZqixdB/Ks8 1P8AhmOKtL+UXkQMCbJ2A/ZM8tD9zA4qnei+UPLWiuZNMsI7eUjj6vxPJTw5uWb8cVUdb8jeVtbv Be6pZfWLkIIxJ6syfCpJAojqO/hiqP0bRNL0WyFjpkP1e1DFxHyd/ibqauWP44qjsVY5qf5d+TtU vpr++0/1rucgyyetOtSAB0V1XoOwxVOLTSdOtNNTTIIFFhGnprbvWReB/ZPMsT9OKpBdflf5FuXZ 20tY3bvFJLGB8lVgv4Yqhv8AlUPkX/ljk/5HS/8ANWKq1v8AlV5EhIb9G+owNaySzN+HPj+GKsnt LO0s7dLa0hS3t4xRIo1CKPkBiqA1jyt5e1khtTsIrl12EpHGSnhzXi1PpxVJJPyk8huRx09o6dln m3/4J2xVuL8pvIaddOMhrUFp5/4OBiqf6R5f0TR4ymmWUVqGFHZF+NgP5nNWb6TiqC1vyN5W1u8F 7qll9YuQgjEnqzJ8KkkCiOo7+GKo/RtE0vRbIWOmQ/V7UMXEfJ3+Jupq5Y/jiqOxV2KvkrCrsVdi rsVdir1X8h/97NY/4xwf8SfAVewYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FX/9k= + + + + + + uuid:b8b8cb8f-48ac-fc42-b266-798d6fe63c39 + xmp.did:0380117407206811822AB503FB0ACEDA + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + xmp.iid:0280117407206811822AB503FB0ACEDA + xmp.did:0280117407206811822AB503FB0ACEDA + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:0280117407206811822AB503FB0ACEDA + 2013-11-03T14:15:38+04:00 + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:0380117407206811822AB503FB0ACEDA + 2013-11-03T14:15:47+04:00 + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Print + + + False + False + 1 + + 79.999251 + 17.638889 + Millimeters + + + + PANTONE Cool Gray 9 C + + + + + + Grupo de muestras por defecto + 0 + + + + Blanco + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Negro + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Rojo CMYK + CMYK + PROCESS + 0.000000 + 100.000000 + 100.000000 + 0.000000 + + + Amarillo CMYK + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Verde CMYK + CMYK + PROCESS + 100.000000 + 0.000000 + 100.000000 + 0.000000 + + + Cian CMYK + CMYK + PROCESS + 100.000000 + 0.000000 + 0.000000 + 0.000000 + + + Azul CMYK + CMYK + PROCESS + 100.000000 + 100.000000 + 0.000000 + 0.000000 + + + Magenta CMYK + CMYK + PROCESS + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=15 M=100 Y=90 K=10 + CMYK + PROCESS + 14.999998 + 100.000000 + 90.000000 + 10.000002 + + + C=0 M=90 Y=85 K=0 + CMYK + PROCESS + 0.000000 + 90.000000 + 85.000000 + 0.000000 + + + C=0 M=80 Y=95 K=0 + CMYK + PROCESS + 0.000000 + 80.000000 + 95.000000 + 0.000000 + + + C=0 M=50 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 50.000000 + 100.000000 + 0.000000 + + + C=0 M=35 Y=85 K=0 + CMYK + PROCESS + 0.000000 + 35.000004 + 85.000000 + 0.000000 + + + C=5 M=0 Y=90 K=0 + CMYK + PROCESS + 5.000001 + 0.000000 + 90.000000 + 0.000000 + + + C=20 M=0 Y=100 K=0 + CMYK + PROCESS + 19.999998 + 0.000000 + 100.000000 + 0.000000 + + + C=50 M=0 Y=100 K=0 + CMYK + PROCESS + 50.000000 + 0.000000 + 100.000000 + 0.000000 + + + C=75 M=0 Y=100 K=0 + CMYK + PROCESS + 75.000000 + 0.000000 + 100.000000 + 0.000000 + + + C=85 M=10 Y=100 K=10 + CMYK + PROCESS + 85.000000 + 10.000002 + 100.000000 + 10.000002 + + + C=90 M=30 Y=95 K=30 + CMYK + PROCESS + 90.000000 + 30.000002 + 95.000000 + 30.000002 + + + C=75 M=0 Y=75 K=0 + CMYK + PROCESS + 75.000000 + 0.000000 + 75.000000 + 0.000000 + + + C=80 M=10 Y=45 K=0 + CMYK + PROCESS + 80.000000 + 10.000002 + 45.000000 + 0.000000 + + + C=70 M=15 Y=0 K=0 + CMYK + PROCESS + 70.000000 + 14.999998 + 0.000000 + 0.000000 + + + C=85 M=50 Y=0 K=0 + CMYK + PROCESS + 85.000000 + 50.000000 + 0.000000 + 0.000000 + + + C=100 M=95 Y=5 K=0 + CMYK + PROCESS + 100.000000 + 95.000000 + 5.000001 + 0.000000 + + + C=100 M=100 Y=25 K=25 + CMYK + PROCESS + 100.000000 + 100.000000 + 25.000000 + 25.000000 + + + C=75 M=100 Y=0 K=0 + CMYK + PROCESS + 75.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=50 M=100 Y=0 K=0 + CMYK + PROCESS + 50.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=35 M=100 Y=35 K=10 + CMYK + PROCESS + 35.000004 + 100.000000 + 35.000004 + 10.000002 + + + C=10 M=100 Y=50 K=0 + CMYK + PROCESS + 10.000002 + 100.000000 + 50.000000 + 0.000000 + + + C=0 M=95 Y=20 K=0 + CMYK + PROCESS + 0.000000 + 95.000000 + 19.999998 + 0.000000 + + + C=25 M=25 Y=40 K=0 + CMYK + PROCESS + 25.000000 + 25.000000 + 39.999996 + 0.000000 + + + C=40 M=45 Y=50 K=5 + CMYK + PROCESS + 39.999996 + 45.000000 + 50.000000 + 5.000001 + + + C=50 M=50 Y=60 K=25 + CMYK + PROCESS + 50.000000 + 50.000000 + 60.000004 + 25.000000 + + + C=55 M=60 Y=65 K=40 + CMYK + PROCESS + 55.000000 + 60.000004 + 65.000000 + 39.999996 + + + C=25 M=40 Y=65 K=0 + CMYK + PROCESS + 25.000000 + 39.999996 + 65.000000 + 0.000000 + + + C=30 M=50 Y=75 K=10 + CMYK + PROCESS + 30.000002 + 50.000000 + 75.000000 + 10.000002 + + + C=35 M=60 Y=80 K=25 + CMYK + PROCESS + 35.000004 + 60.000004 + 80.000000 + 25.000000 + + + C=40 M=65 Y=90 K=35 + CMYK + PROCESS + 39.999996 + 65.000000 + 90.000000 + 35.000004 + + + C=40 M=70 Y=100 K=50 + CMYK + PROCESS + 39.999996 + 70.000000 + 100.000000 + 50.000000 + + + C=50 M=70 Y=80 K=70 + CMYK + PROCESS + 50.000000 + 70.000000 + 80.000000 + 70.000000 + + + PANTONE Cool Gray 9 C + SPOT + 100.000000 + LAB + 50.196079 + 0 + -2 + + + PANTONE 7700 C + SPOT + 100.000000 + LAB + 35.686275 + -11 + -26 + + + + + + Grises + 1 + + + + C=0 M=0 Y=0 K=100 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + C=0 M=0 Y=0 K=90 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 89.999405 + + + C=0 M=0 Y=0 K=80 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 79.998795 + + + C=0 M=0 Y=0 K=70 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 69.999702 + + + C=0 M=0 Y=0 K=60 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 59.999104 + + + C=0 M=0 Y=0 K=50 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 50.000000 + + + C=0 M=0 Y=0 K=40 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 39.999401 + + + C=0 M=0 Y=0 K=30 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 29.998802 + + + C=0 M=0 Y=0 K=20 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 19.999701 + + + C=0 M=0 Y=0 K=10 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 9.999103 + + + C=0 M=0 Y=0 K=5 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 4.998803 + + + + + + Brillantes + 1 + + + + C=0 M=100 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 100.000000 + 100.000000 + 0.000000 + + + C=0 M=75 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 75.000000 + 100.000000 + 0.000000 + + + C=0 M=10 Y=95 K=0 + CMYK + PROCESS + 0.000000 + 10.000002 + 95.000000 + 0.000000 + + + C=85 M=10 Y=100 K=0 + CMYK + PROCESS + 85.000000 + 10.000002 + 100.000000 + 0.000000 + + + C=100 M=90 Y=0 K=0 + CMYK + PROCESS + 100.000000 + 90.000000 + 0.000000 + 0.000000 + + + C=60 M=90 Y=0 K=0 + CMYK + PROCESS + 60.000004 + 90.000000 + 0.003099 + 0.003099 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 12 0 R/TrimBox[28.3465 28.3465 255.116 78.3465]/Type/Page>> endobj 8 0 obj <>stream +HlVKnd7 )t'K"6N d4Y@=0lEb޾BN5At\)ߟ?¿SW?n߱C.%fGYM?vkV GUj W-p-QcNyDJ$ҝb~;֢\}I<56|J >20؈C  .cUN  ǿBuC<taEkI6]/SL øSus?n_ &kH˳zn33n8,dv?wT6L4%XF`A5`^#%F69o V,Qz +J'$I{T>o,QQ5+U5#PX5=4,Jv) +&dd3\PP3n# M8%1 MvK g|ɖ +/Z6SpI3…*IN->\7j8x8;L쫂~Sa>3٥T%UӀ|ubcM:TcouP+hk}qi8PĂW/(SҳUUצ|VBRTP!8dL+zs F^"JFyKDCH*)062 A:CIƓ'K ʎc[C7u,CHjf/#F̬[SW3ɳ^duت:Bf{BLɄi÷6Ǐy@P{/p}A䨉.{a_R=`q/hh3- qJnGJjȜvCDP&YLm 2n:㖫92|c_jǹA8D Vә$^𮚎 5 +2X/xkrkX#ek;=! .'ϞXkOWIw /> endstream endobj 12 0 obj <>stream +8;Xp,I;jbW0G)1',V0A&!f2E/7Mn2qbXOAl%73JAVGmZj@E04^J6CJI/d'KlDLoB0 +TE.<.!<@+B:+-~> endstream endobj 13 0 obj [/Indexed/DeviceRGB 255 14 0 R] endobj 14 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 11 0 obj <> endobj 10 0 obj [/Separation/PANTONE#20Cool#20Gray#209#20C 17 0 R<>] endobj 17 0 obj [/Lab<>] endobj 9 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (GAG) () %%Title: (RR LOGO 001.eps) %%CreationDate: 03/11/13 14:15 %%Canvassize: 16383 %%BoundingBox: 11 -245 216 -208 %%HiResBoundingBox: 11.1025 -244.1006 215.5371 -208.9385 %%DocumentProcessColors: %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%DocumentCustomColors: (PANTONE Cool Gray 9 C) %%RGBCustomColor: 0.11025 0.353432 0.48886 (PANTONE 7700 C) %%+ 0.468179 0.467416 0.47835 (PANTONE Cool Gray 9 C) %%CMYKProcessColor: 1 1 1 1 ([Registro]) %AI3_Cropmarks: 0 -249.0635 226.7695 -199.0635 %AI3_TemplateBox: 113.5 -227.5 113.5 -227.5 %AI3_TileBox: -289.6152 -503.5635 493.3848 55.4365 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -360 43 1.26 1196 689 18 0 0 78 98 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 56.6929 8 56.6929 8 1 0 0.756863 0.145098 0.129412 0.878431 0.572549 0.564706 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 20 0 obj <>stream +%%BoundingBox: 11 -245 216 -208 %%HiResBoundingBox: 11.1025 -244.1006 215.5371 -208.9385 %AI7_Thumbnail: 128 24 8 %%BeginData: 4958 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C457D527D527D527D527D527D527D527D527D527D527D52FD6AFF527D %5252527D5252527D5252527D5252527D5252527DA8FD69FF7D527D527D52 %7D527D527D527D527D527D527D527D52FD6AFF5252525352525253525252 %5352525253525252535252A8FD69FF7D527D527D527D527D527D5253527D %5253527D525252FD6AFF5252527D525252537DA17DA87DA17DA87DA17DA8 %7D7D7DA87DA17DA87DA17DA87DA17DA8FD0AFFA8A8FD097DA8A8FFFFA8FD %0D7DFD05FFA8A2FD047D76FD047DA8A8FFFFFF7D7D7DA8FD08FF7D7D7DA8 %FFA8FD0B7DA8A8FF7D527D527D52537DFD0EFF5252535252525352525253 %525252A8FD08FF7D5352595252525952525253527DA8FF7D525259525252 %595252527D525252FFFFFF7D7D5252527D525252595252527DA8FFFF7D52 %527DFD07FFA85352527DFF7D5252595252525952525253527DA85253FD05 %52FD0FFFFD0B5253525252FD07FFA8FD0C5253527DFFA1FD0B527D52527D %FFA1525277FD0B527DFFFF5252527DFD07FFA85253527DFFA1FD0B525352 %7D7D527D527D527DFD04FFFD07A8FFFFFFCA7D527D527D7DA8FD047D527D %527DA8FD06FFA8527D527D7DA87DA87DA87D7D52527DFF7D59527D7DA17D %A8FD047D527D52A1FFA8527D527D7DFD05A87D7D527D52FFFF7D527D7DFD %07FFA87D52597DFF7D59527D7DA17DA87DA17D7D527D52527DFD04527DFF %FFFF7DFD0752A8FFFFFF5252527DFD07FFA8525252A8FD06FF7D525252A8 %FD07FF7D7D527DFFA8525252FD07FFA87D525252FF7D52527DA8FD07FF7D %525259A8FF5259527DFD07FFA8527D527DFFA8525252FD07FF525352527D %527D527D527DFFFFFF7D527D527D525352FFFFFFA87D525377FD07FFA87D %5252A8FD06FF7D527D52FD09FFA8FFFFFF7D7D527DA8FD07FF777D527DFF %7D527D52FD08FFA8527D52FFFF7D527D7DFD07FFA87D527D7DFF7D7D527D %A8FD06FF7D527DFD045253525252FFFFFF7D535253527D5252A8FFFFFF52 %52527DA8FFA8FFA8FFA87D525252A8FD06FF7D52527DFD04FF767D527D7D %7D527DFF7D525352A8A8FFA8FFA8FFA15252527DFF52525277A8FD07FF7D %525252A1FF5252527DFD07FFA8525252A1FF7D525352A8FD04FFA8FF5252 %52537D527D527D527DA8FFFFFFA8FFA8FFA8FFA8FFFFFFA87D527D527D52 %7D527D527D527D527DFD07FF7D527D52FFFFFFA8FD045253527D7DFF7D7D %527D527D527D527D527D527D7DFFFF7D527D52FD08FFA8527D52A8FF7D52 %7D7DFD07FFA87D527D7DFF7D7D527D76FD057D527D527DFD04527DFD0452 %7DFD0DFF527DFD0B527DFD08FF7D52527DFD04FF7D7D7DA85252527DFF7D %527DFD0B52A8FFFF5253527DFD08FF7D525252A8FF5252527DFD07FFCA52 %5252A8FF7D527DFD075253525252A87D527D527D527D7DFD0DFFA87D527D %5253527D5253527D527D52A1FD07FFA8527D52A8FD07FF7D52537DFF7D52 %527D5253527D527D527D527D52FFFF7D527D52A8FD07FF7D527D52FFFF7D %527D52FD07FF7D7D52527DFF7D52527D5253527D5253527D527DFF5253FD %0552FFFFFFA8FD077DA8FFFFFF5252527D7DA87DA8A1A87D7D525252A8FD %06FF7DFD04527D7DA87DA17D7D5253527DFFA1525252FD07A87D5252527D %FF7DFD04527D7DA1FD047D52525253A8FFFD0552FD057D5252525352A8FF %7D525252A8A8A87DA87DA8A8CAFFFF7D527D527D527DFFFFFFA8527D5253 %527D52CAFFFFFF7D527D7DFD07FF7D59527DA8FD07FF527D527D527D527D %5259527D52527DFF7D59527DA8FD07FF527D527DFFA8527D527D527D527D %527D527D527D7DFFFFA8527D527D5253527D527D527D527DA8FF7D59527D %A8FD0AFF527DFD04527DFFFFFF7D52527D52525259A8FFFFFF5252527DFD %07FF7D525252A8FD07FFA8FD0B52537DFFFF7D525252A8FD06FFA8FD0452 %FFFF7DFD0D52FFFFFFA87DFD0B527DA8FFFF7D525252A8FD0AFF7D527D52 %7D527D7DA87D7D527D527D527D527D7DA87DA8A1A8A1FD07FFA8A87DA8A8 %FD09FFA8A87DA87DA17DA87DA8A8FFFFFFA8A87DA8A8FD07FF7DA87DA8FD %04FF7DA87DA17DA87DA17DA8A8FD07FFA8A87DA87D7D7DA8A1A8CAFFFFFF %A8A87DA8A8FD0AFF52525253FD07527D52525253FD0652A8FD69FF7D527D %527D527D527D527D527D527D527D527D527D52FD6AFF5252527D5252527D %5252527D5252527D5252527D5252A8FD69FF7D527D527D527D527D527D52 %7D527D527D527D527D52FD6AFF5253525252535252525352525253525252 %535252527DA8FD68FFFF %%EndData endstream endobj 21 0 obj <>stream +HWnI}CA w껪w~%0 v ŽV;n30/rH`\a7QĮ[u?9ٴiհ~Žʏ_v&tU =WxFݕ^va6o?.ż-eyTMm|!|~}냇ۦ쾈U|6 / '4l8?._ȝ\|ݵM -IrXo)[qս(7]@OIϏYWrk6' u.Qu"raSCyS.G]eՌ>&GlړG(U=cf/C/r|.l}ZI ?S|l׻c.Fƃvv E0xz_ehj|PbQ ź&SjuX&Ax߃]׉1~O77^UݣK!+u75V8bL$CJ_Q]ٚ[e&#Bҩp^6y}bp&wNnAɿwA֣h9{%m%aӧLyu4qُ&ڣޣ?'O-Vqd?\@b1*2Iz2ZP +P/*[!KJqr#6Ȩ 9L?OIˆ1) V.H$:H\;8+ +(&*gBiRDv_唴)pyU)x`()"@ 8 4Z0zKIC3,(i(&kh ѽjE$}$8eu#iЏ^;gŊF|,D0L }ȍ#,HTc]0- $pD^$PD z,)#@M:IV,VEUy  ,rEBeї#R/(d}@u, +tEGEfP\Jv@^sH5RT8DZ:IU>%Q@0Q=,R "Ik +0猐dly,E˰ޥ-FA|,aXPaE#tIQ\gAJ;j|eEBԚ +)#,LZ< 1\8^2>/#enGDNjbG*(8iyZ)A<`BRuchIa ([́_ :GR#m0ѠӇ@g;IY2d=$ME!jBH3^0,1<% +30A"5i&R\;ɐS$ݨ"Rh]QDbF"y D%jLTI ;# K=0~Ajˆ!!I4 "Üj"FoXHqZ|mW?|H +Mcij B!c߾2ap=z+@״&K }DQ.LڊUOUR*'p^6D+1G0rX P0~ږQ1czXk*aGÉdn75p +2UDsOzdޫhb`V$?haMOmD]<=L'dYv{ Qj>YBn4hND|HQ="$XE(pL[h0Nf +.{Eye֌CXDAۂɚઆ{X*c 1B)%%GCֈ+n) X- :fMiqi X-좕2<&d X6Rxò+qs>Ѝ'c2Bg [DntilZK2Τ3u\(:xFܧA:V]Pf0#_8;¤2̀BGY89DCmG΁=zw8|t~;jwx5:с=rʠAz5zª6Tdm+ ?kp OyaSu + ]U/e0eQsL&ov2߉DvDZo:LB [1c IWi%ƻq$P<#0).%#VԏvdrB0Ya,G؝dƘ9UBW;N:¯dR E&JZk ʗ[\9 ^N$BLf!0lR"(ձ""J(FXji# Ŭ>6A|5d*0 #O,iibll]YߣJ.QJ*^hZqQm>AF?6:k*&XfxA0[r-~WOln\kM1X^?0-Ǐ'/޼x뷧?jQs=}/?yӧ?] =x3g>ziNo}?c_^{]}~~sӱuNtzƓ_@? +wa&J5y+(S-އ޽G;,oyΚtB'id!-hS. h N?}^'!#E%25*/.0l Ү#۰m@!*)#[Nbyi8p4t&߽+Hh!I +VMq +R}[Y+A4嚩L) +1UXҵa {+5`!<42ގA7?SulOdZOOsxw{pIƷ&ReA#r@]eラW)1'm0ub.Cљ毜pq9R7/u .!QW $rY*|auR{ﴑMpƿx +9kfx[W)|$p6͑k"Dz^M13em|T9Ig t#++}yӢb` Ls&WJ&`ީXd #l-azE1[`;t\Ɣ%3{)k1&+f=n wJW8I2 +hJ+2i78wJ0\Gzn]*p#)V +<; %͡!%ߵS$xB;*G IʇU uJa"4>.IO }@hySjg˰Mzo.b머ȍ$ĝ9^ 't2/6]lHh,P IOT$nncqjW}@_ήs:O:F-4'icl]wWUD\61t#he ܲ-],t;Oҟ|"EVg]EO"ҭSj)݆z( 2pW0iBY7!PnupX1+D%vY%0&R?8#~Į:mULRY@)V*z]ghgM[x-ajݞ%u9tEuCRڧ]c?7)_+ךs{F̀:Kj H*:Z'X6v.ĸ~`_e:'`p&2Bo!(2ڋ:Y1"UBZ=-nSٔj)O~)_ 2StZGZSi䉗CrLS? Ex}ll;J72Ǚ34]OS7-bPf-l0no\tAA=D} +?Joqgsb3TD1¦tw!57 +|&#CߩN9m}LW>s4RI`*h1@1.֍iޔ _SBɈ~r0ʜ$1!7za Ʒ&̂_WRq{%msqg>X(+ueRVl9r8ݽ]=,km +c`9 +e;J~VG2#DkȾ=w&f15ދZᕽ_5 N,;4n0*~U(&Xuֲ/L! z?_TYUaK~@-¾@A&UҲ‰J-,$3@v9胗 \9w|RKU?a Fw2"(V*sxۧĚJ$ +鼆hZJ5N|tm7!~M;TlI,Kqi;y _…E``k6'8Bg[x:cF#?yCy6ai +:eg0]+-CBfG:%fA#!.寲 1ՒŻE|?ˢHuk͈r KQ-ѰfN ֜f3`E {yqo#(19;k{* ˉ>{6VCXduY}y"X|F zJzPCwpC햭X\)}3-u>YY蛷qxcuGŭ;Vf,MZ X-F%Fy(5ɺ lm)G,3e3H;xcx<~^frN 28h'E&/d͞?DH^$ >-O!^` * ͱ.6v|AeջYBv~D/`Ȱ]^4@=!^g+I1m<&pmIsו^&1J1^rTV{%5|3-Vo ؕv˱-Jߠ16χB&7|yPk D߭> } c0;BhnjbZlÝHq2-lbٷ;nQ0 8AK~>`|Ҧ|hɪ["e$%9c4aS0aHCf.d*kJD1÷stޓzW5М0NQ*:o[UR w(lѳT+VqmY+TwdLv_{SXE@\pO5\9K8%?KBK#^{{)O,kJg!/dԴQug߫*e FE>b-سxU 'jH,ۢrvƕ*McVRy BAE{qYO2BZ%+Sey[ BGQ2>@v*e'Bj$J/Е +4 7^(Z˰*b_rhᣌٜuk`ҿ4@Ix5~˚5TK锏%Q"U5o`eL$:IPC8:w\B}Vσ gRkn@CP ]Dų\^NjMk8]Ge>oUH(^Q+go@yC7ZT|@hll~s 5DK˘Gn 7}.W{Э[Mc09e!7ͧaoúj "] nbG5 *ab-i[dkG [^eW 7˟+U}\KGB Q5iSqfEEycˑAEPv63nmٸ9RLóyR7)(_˽6Ҭk7/quU +c+ժJ UJ1LԮ-7$3 =:|',g5R99Us^um'ۗ#=:Jv2:&h2 +V) +ŀ 9αQ@,QȞ#6cuX45[YokR##GT|v!H!=1׃z*`x + +z×yzGFS@6׫ +r?jbi^.eٰfL<>\qn%\[ Yf@z ς\;SpP1ͅ+ PZdOYa(E̴b)OI/F}6Oh%qYpݛ Uy¬}E|Yn"v PM+s6|8 ,v,y"y;%Vl ] EH`(цPշy%њG e ެG6WH)6奔X,X4ZjRQgu)VQՊ-kuکP1ɐAc2.S!uΫ_ 7y]뀪/@R(;i8hƎƍ,*A v&45RQ_'upȿȑޮ:užt+!J +~)YmM""}ҸKT|U¡!xէQcܨu/=nyzۧ_2bI&@VJ1F,?=QsR52l+|Xӳ ]ɘkg"=ʹY KσkFO~c%t%| +.(˸zxFv]*:u-~/ e!\x=>&6:YWH3kp"(Ĵ};{RHI߲0(g2  +Ͽ-_V96*BUΈ4SdDZ@ +O}wZ^r4`S,0o%SOX#W2#{ѱwjo @ˮhÃ6'f6׬Ekt9>-Ӷ5$sL +ՠҨi2Lt^;cNLB0 +xJǨX EekJ^֘4hClװFrL<~wY$2 eB=UB-[G*ugȁS@_@~eso6%~`CT&vÚ?wYtwH! K$Z-SK@xZΩ>9tRhn2"ɬ}%P +Ȅ}.i6簂xN4 wHNGIک?Ac9XfZ"NEk51{ !wE}#G{tl3R,\$OMQg+N)j{O,g2╼*](]L ĦX%2yd2~ƾ l!o4G ҕ8XI32+x^/>XBGsC3mZg)3dhӞ8x>d<7T-l0 wXs;k$]{.փ +,,Nix)TEN +;jRLb6JΙi +o ekly![*a@S.K'!Pi~ |@/. ؎qْ<5oWz`Ͼꛮ5\LE-fs^m+vG ?dPK<$lFȣIP<3 +WR.ݽ $\]u_%LI`'R.)N9 ްcK#4CEAZa=?\E4N41V!w;j=>p:.Xx +y@[Iʬ^35{PѣTJEg:!D2ez5A01be6*J@xn,=,"OipQ +M,i2 5PԚ2-0F#@V&x(:. =m Pd#8 m;"L&T-п=p'ʉ=kޞ@ԭж![10͛H 5Oi.8_Hq8=vzط,[MꞛoZmj˛p=v7\-rL1LRiΠ1)7n̨cӍ3c[䨾4eQ[nhv[-4\RFZh)Xr-x/MQg##kg^]ުOXtl?b?hRۈ +•s9hRazx>MSjÞf +@W())S]Ϡ$5kق$\js TC>92 +,>k!eF=++)F9sǻ;E|՛s'W|}>>E"^}w?[ȿ8yνSg֟s +1"?O{AOqYEc .~FOX>y?ϨgvfǕVPjgX`|\id:5JJ^SǕfVg ԢJD3Nz\c$+kPFh +_w_kxK1wb(8Dy7*|v?[ߜOӗ"=POyy2/|#3F\#Cw@%Q+=q`AY0j Hf\d]E| zwjmb$e=zg qN^CL"B(`,aļ 2g'UCc'frW Ժ >3 E EN\UУR *[%AM*4v4e1= ԲSJqڽrHźlP"cD`WG H^ly;j]GFA] jsVFCv;kĢA 20~(U|T\a& fV-$!m}GfJэF/FgHfGl݊9+Q % O(,I[Oq*1WMTpCzg͡۝I#*=`b6տˉˋjsj,\(d;4嫡xMȲs*rY#XOJ>h$iR% AboGDOJgU +cKoM]k\R-pKi5NL.A.-oSAF7guUմdm7DhrPz1DVmv/FztV vޮHr*F9 j/Pp kѐ@hc>%|<|{S^$Sbc?\Į̷_ Ha(R6yd]'8A{",8b%\<8wqPр"0`3[y!1%2RW-Vܦ8d! (.vؔ,,USl #zW94 +VP lZ=CA#pwȟ]XUܜ^Qz7XüMنIrqNFNajm NbVIeHA. &8 J5.jD0kY=k;.I^1]4QJ֘AJ2HEiV/.H-͕]rR9l{u2!}E2|(&T?ve2n[UM f,#;S'ʱwJђ]tpDd15c&ؼN4Tw):G-u qBc*/(ӱdv [)&&\؍U8J-3yT: gn죾E$YW"fL虑3r'eJ嶲{N+{XzhnAA<D0olE%ۦi6pє~'ξ{.DzLCE0"pڗh,4ޥ- +$eNv|=xr +u9z=<0Kx#X“GJW7ҽ+v_雹/bZi0֯ptPnw~Y:p(;j~o'Kn;xJ=B=KK +#΍R/:p6/P0\ At[Eh52z ~z\ݞV韐l^;RA%"ND3f̊-WヒS aq1OAz0ףV(靣0PqzHć>pq-"dZs ݿ +rIFYJ:v$ "6_7P>^ÍF뎧3?T0f]ǝN%͎a?W]OkֶhJwTjⅧ=6}6z4m濽msoҷ&3/E #F"U1WLh|[,28C@wmse]WcW)}k.eԖiku%}DاZ{槃qсۧz@tŃ&eEPʐ}רJ62wYsUn2͌-|B},dŞ{.f &`V[9~Un!4@g.װ[Kh/mlz#v1QQD|)?2h 2ZY MDR;|M~vR*[2Ďv/A2,M!!LM Ȉ"L"ǖ 7ݺLЪ+rI[VAnP;Jg\aۢMݹ>޲Q~w:n+nnԞY Շ! e℘ܻ i!T}W\En[d +Bͽ%$ ۭTO S/_!5n uphҌ7(5~ͺfI=txuXao.g +VT"g:\1jCP9?gMGzJiB-RWu6C+UUư8+ڽki`auMHh/Evݱ6?%LDvgb`8J:.Bg_^Od-b UpYԠ#[ӥCBwSh}@끊y1nv +3Q߶J% --+ {Mڇ+ڳ(,}-Qu#QIUi-vs,zL'D#uW Z Ǘ2A-5" GQjN͆RèvB4BtwYo#b2:|tb~kłm)Q"Z\⹪.SO2P O {m*V1JD+>!#; +ǑSXcwI)ה*v#ljJ=nArqs\qhUD˱Dp'Imx=>CB|q=}-C(]qp{CRd)CbE:ysbzNFxjtHܛk1ز17cKNppGt 1PS/oi ^.>H?٥|ˏ?y?}hso_U^nԓJsG#4K_tm>ʨɋJ%پ>= H^9DϡRg1M } ڦVm]~ۈR&CM O+MN>ZMCTNXt<5ڕ|dU:T3D'[Ź$8Cϔ#=ZBvB{PlZ)d \WVɽ|X*W9fHT?T\b-6Sd *Ckd5(ow*xɨq5YtȞܡ5<"KH5+AD#̙TeL:0/6nBX/k!>pX dâ4_n6+]]-^Ӣa\asWu.:_( E]Y<۬CٔLVK(@yL_yea5ea#g1>n`1C3˵>5`$C^0Dҁal,wd̝?~>k8׵!;yd-zYOezQ8%\My +6X+y2FaH"QѲxRqbG Y==>@a<>9(YMw#Qq>stream +HWۊ}~RS0A32Jzo^%U9ǧ1gO!?> iDŽrZ +QW"k!=7BN(1Lt>Neqb~a;)V#Q*yaN 'z8'{ 82T#F)ܐN|C:ث]AƘJ}h +*ZKaz:ebpT̔<2 Db6R); E|b:_LG*DG`9B hs"?Kl3z,v xѮS,z^ʥ3#QM5' |>PR Aݴ|6єY7a?Ɣ%Th-^ɓkImC!#dq-CrG +`V2˧r |;WYW`Cd^/ȩGmQġD /%>/<~#9?#'|%/YtG(~/?}:%<ߩ~{/?j_D ʼeZھNHQHェ#+H+eqA&Ε6*Ug@P:16!P~\(N$$PT(%jX.Z-jAH +%SVY&ٚC'z-鹀C:w d cv U`h) FS9ZBHy7h=qLbڨ ##-菜exL:d-I4H$ QJv`/u=gYd%:! V⁄>rǁ]iޝ\oĻRWN^3ISk  ʶ9%V-UlhG& r BsTMreO,4F~ޑ}I+=J;*zeL HzPkLxj z +]^݋ <[O8G +&\UYO@rNKҫhT_}ٝ(P=&Qej8qqP 9mT+l#CMyMmܐ8E DۓGt`lFԎaU #,GM Jި2 UK]A,U$vM/pȾ6QyBgʾhJR'}exdFu;C̄Bv ٖ`sUGC#Br[/p]MF0RH%ZlVvXກ,:?PxIvQY±Z|YrJ;Ŏ 2SklDo¸J9Nbl 6P jyv#]Wz)r_y'v*Q+x :D7kD*ڐ5Ub-\g햠DDJeJ tJ1B MR kYI|Ia]вܙ=ɥ=e/,)(S2ʸ1v <߬#gq61Uk쐏((ݝQ^1-E5f6>i+)}F3B?9Z, Gڲ%µ*tةG/o2tҢϊe^]\&,T3KR A۷lB5M@:[E6UY՜9# +R`ǯ0;OfhXsa3pemD3)Ř0F{IYh;δs}OR(\Y=@tٗlT},`_h>~#J@Wݲ JΒ&ڌ_;-5`g m?+svsSFsF-`gK@bk{e:F`l9G؄L[e +rwIAg,)`KB0N+`rcЖKnޏb"Zb6^;0t)旆89 "lP$HɴC疲^seki̩_YS* n|!ͩ'"vUG +/__~}KxuÛ/y_`g,L;y}ܟQ_u8X&,ͳpuI_+&3'LnKBpNغ=%)ZG]8rNj҂ZfH9 ' rkB$zmv:؛@цF{$q`(nIp)x~F\'w?H2M//u#~uzy@4/RhD`n?ut=i(Kfٚ'츤uRot[!x5YvN5h1\i +Swmq+M2~zݻtOp )y8^<[0Iy,%FFm_wV]D%Yl$&n$?Hf8B +Dji O5kۧ? >ʹ>O)?y<^=|XT~ +?n:nt_GVR~6XUOX:S6ȋhR~| frK?f%{EK6a.*3ka 8],0U #FENE7z)F +D4\Ƭut-BSX6U(_lo$iU +sQӦD7"РA|oyyu#xhh"jYQ[PJ|c {\efԶ9a&~1 {log® Pz氞 388|ä́07}`[zQuS 9&؛oԞ +f昚nֹY5f6qh9L&@CbԬ +@h~@ک?z2+'w^>xztvruv]>tIt./ϻճ.oׯ7?o>~2 PV;K_6'{fN6NgN7۫5o6\#Ŗr t6-bw^o;8*^>ޞ&sݼ<ہrzӺ;;8ۮO/!`Ż5d a? ?{;%.ZR8~ ! u9-#;г蓳*SS~t1OYB]pWbsڽޭO6Q1Q01z.Bv􊀎oʇeq磕}{qQsC8q uG'4}tH] HIާYCxBGO=>2mmw1(G;: +q&3 5fN+ N}} t}[f-or<$% 9'RkiiZK!1:>,X3DGEcC%l"<V h )1Bk w0!kw\S2 ߙ-Rj㏎NT[")Ooh:aU:PjwfQcM<א(AyR7Rܪ_!pŠ>$5=% ;]ت~mpg\J@H0)QrN㿑~z +h͋8>Rp|! `6+5Y|) oDZ(p"^̙Զ:W:ZXT]nJ*s<,5ٚ! +5׎˜(C +0" U)kut]mVLIvH[!S3vE!OVS'U+f||>{M!N7ݿ\~ּjcf#yAfkz|Ibop퍦T#P)X~\u \ +pT8][a! EjU'FI ~ޠlK>㽴yf0D:PC 5ѣ 9m<[:h+(J)T{YI3MQjCY)qKOg<*- DF-eV*bRV `XJ{eq#*ƶ@}`%Q ")oQ0gSt&D9DIN aN O;C%aF[63!CrN)Xh[NԪN>0qabhE 7TF3}jap/E+B<<d r+|0hND:x:=*%6ԕnS PQsD@9\.\`re"V=ҙKLH)+/r&WC%pI{=뻼~P]Wv^$+ EB%Trn6m??#Gb#y-23~ +Yc +-}12 bs5?ڧV< ̫+HKo@.7&rjYr4=/ihו~r:=r9$=7S Es`W#{ϫ r ڪ~OJ>JKF+4=+ [zr^KYU4:_n9Ц{QֳR,x"A"iW}obV! CAFmKS@9h7 H5"GS^D1vhֻΑ+ ќu +`pTk],$aSa%=ν8bgZ|S@|s]"nHҕpڠ%D|s/Eh"]tm>SLV u];D՗F}.*Uԥ+~E [v곍6Gd/WQgOz%uz/PVܹ|<tvQw*<85-;wM {nMk'_Q +]USNU`.l (.qk>%Fc>yhUkpUŁX!OH72EXZG{uOݧ7t(byۈKhfyFB~R8e@rWl6}rm;YW\bY+["9_"5{8.3դہͶNUM*dCL qhJ.QU|>!~kB]_l41 ~Ap&ObL j-oP= |sQHy'Kw Nm[U38J+BX&P͎i,zJhH0;Ɨ*[Qt'"7"q&`y_ [MJxp{8*gd6\g5NPAnK6]c\%uV1wչb=vc}YO]l.Wx*"rRS+%g1ᛆ#I{cpX/%ˠ5,'j8bp)6\+ADmF#OS,Qtyڭqm ;{R+E h2 F(\R&%lTQ=x n4F5)5ge5G)=8r㑩AVMwYةge2?T3?LeXaB|.kf 4#cӽs)`9<4-P>hε=uC^e>z&_E?P4a!\g#-F-#ÖWW+ :es#C]tAejī5Y  T}֗;ۢdiq*R_cn;U. d-zeI\M֭r@Y⎀>ũVaW'mKWi4\t:)gkp/%Cu9?dF +jOsx3/anYAI:ڐDQvʋ*ZAQoif(8ǻi%G:xmcY$z.A +fEԈ{=5r%e?xڥ+g xCݒ_-DZ޸*NQbFB"b;S"/ܫ0eS`sl`x—"☘$+T8>:ҋ8 녥xrtWj? e=k>~oe>S<s8nYe.@d()3:Cv%rp)R ryv2t"fT?6合 mA^ÉB}ddHAyd_a2.ڋ y#[A]Ì`lQHdYbr1[ +Z*aL <ބwDƆr&(@hRPi)2 LWa4. +Ѡzt//+ߑ[a3laGυ!L8Rqb'r4/d\* _^TX +jc!M70NlH`H C(cW#4.w 5i$Y*4b^GQXmfye)ʐ򱄝9(pJ`ޟ/K +DLHy]s 0BH.б 42E(i +mf[ qq)+*[S(+(C)do +{Bye@X3'苼w =e&d(9|퐅%юb]3f"g>2u0 gm9m# J :Ԭ'$%",@:yA ɘl<?9ZM3+syQl9_o {r=Ɍ$ɀ%F!#.gLׂr(j1L U&6䆉 R#xiqq}4J@L1NScpVPRE,tp(x0GB or&gv V$v]D~r\fiӘUuPK/XG@$>K$w zhRCYC.FBnC) YBHXbԕQLS ZBe/AbL}N=*Ŧ :0g'J Cs'͇k V# `P3@!0Q};$Đ<(VI7%^fLGbG"QStԷz짊 q8v('$JQ)x4IvD%t7 Ɖ2LsL}(- V:UzS˫E1QL!],'Ɏ;ȍ8&^`JHZx0$ C䍘( &@00\ D@(A#y 2%`2Y#ID cDOL)4`!Ո +%2 O 0 $%zj.*e0 gR'_P0݃ՅrvH>~$P ɏ,N&RRnl3B@*&t,Y+D +s +|ҥEk“pׂd!πKE~rNYkg&򏌼_ȎEbȢ- #ɡȹ%o1I=6TD +a~je𰄂'T;c烐2R! rz0`Sd@mA>@4| +B d"i[ԃ'Oar{`pdfW4WXI\ۘH2 +L+Gib!4Rf;-QNN&<*ȩVv>ɩcIU>LBm&&0NF#}| +@y-%Y- |I4ɉ +"9pғ=ńtaFKT+xIi66M}#K)V0lKa(D1N0HcҔldapPys&%yOzj`iHYȻ2嬦ZQГ{?p4Ϛ٢j6Ɣ5ӗllt˳64?bS<|N߷rDo~=Գq>X_Ile '^Frk@b3=u/#Gj@.73]/꼩_{Y$RgXrd`=LbD ̎ r5G(#AH:KoJFh(s1{V%xOKfgΤm@F{#?&9 +4U20Kn|0D߾͙MW]IlIwwIo ><¡.M'$,^JCF6HP+  <VwdG+ٕJGX/f;h{J,IH;.> vm0e89Fc Oh Zup4K[zO'Iأ!rI,H;Q~%f7}ZS \UT]Xv OjƫjO舤I><jI!qܥ鄄ԥ kJR@Lsqf$%# GĬmWp9b.uT|nN{ISgř؞h'JB˺rX kV.yzՑE_< +骡oRQYDQi'_Y,ʐKBt2Ll+(^~a!Qky5f!^'r[][YPꘞVw\Es*fԍ;d~ğDcϭ~6@p'芢 (s朰WP CӢk`mG&+It]̎(q4^he$#$lڥ7 唰h(nv1c4KfYΜI3<3ԋpa0Pꔁ!M\*hSn|0D߾͙ͳHӧ*!(& D$ Ow< +yz7bt n.UވԜkЕ$Iz BAl(aB۠Ihs0Hʉ< UGdXJ5|-9bbCXQ.oAbb jÐ 7kpy@ ¬AE=.M%HaO2cƭ Q1eLyD"^UȌOӼ-fUŬpZZ7exj;c9G٪QZyyp%CXptq}\Mrf$ V[1(q0 ,Cx(fiꍫΪ75cu4eYK)ȱ&ĥm\)oIQT9Z f>Xn65 YA.rH+FDGר\pŽ`J2.Uafjw:bv-+5Tr6=: ֦. D +zpn;>KNQJ7l]TYaOl3( !4AdB41w!3ۏ|.v)? ?C@BKktoLUc+>SL?r0|[l 8parmB>autmmtAf +PU~5vX@ژmCX)_&~JS&7SRJ&Ӈ,߄ـrYӄYl7{f7aZ`Ds70}F^o9kS0(.6`7J%=: q |hͦ>ڵdOg\O?VA*3_c,*]ZoB|8ϔnbs]_r?$)J%|Q)09=':\(js.ߞK,¿Nܵ[#j:>?V4% ~+NsקhŽϜ,1I\82E\lMZ[o>&dp 3XE~v#7CK2rM&- m( PF%Ʀ1IoŐVqMHbmňzF_ӊ}N8SR!AA *U+40cy_g16_/Hg܏s=|"SZh~g&ۊ8".2eagI/IK8Bs0kВlLs75*EPr 8|O,*י:~-AuJi<^+Nnp`p`k?1Ȋ'$2y=A-nNY"H8Sے?4#m'fJ+֥%CUYbƐV(x~MTfI}%91Қ#9WJ@3vM}.f YSZ$gui~a1xhaے摐$P5'bKDYuС[E-;~ZLRHnIuKm"%1L/S'b{A]#FzB9{}IVg0 ʛm|jF$M׵B)if і zeW)B9ޭ(VV3g,.S1ίטښ{ţf\iN7zq|o.]VUBB3~Þ.5Ch`ӏ[FCN!7n+~tk >t($|@=<-4SןMZZ +:DKlHĊK?sIƥYT4zs)%Щ Q^LxrydR#*[)ifeE=N=ɸW~ {o>ocZ=J8yl/J/ xj!$L12 w4;t`IވeG;!ac=Qו.Ӕˋ/58RdW@Gi!?1)xW,$QM&qņ'hvA!pPJ$cw܌=Wpl۽я+#c?X??lGfLBIv< ~՞E0:/XiB& endstream endobj 23 0 obj <>stream +HԗVwH` D-7QܨTZU;$DC&XkG8/v\Ro| 闩nh +ٍCL4]p?KBk ڲg[~FTCC0goe]r{wbW+kPVE[ F?fMWctMQ+RH6u'\ko5/Žby]?4O֪B(JZ^͑$0PZgKǍrMBbɴGjcHb2Ԥ)4UbTѯqzlDHT,],t-l`* k5ASfbxajy-gz:%TI@؋[X +q-HŹ!\G'^F {dΛ3qLKm +})l*@-Ɛ'"ZOפ{,Guh_յd@}tu {jt;K~\ +1pzrPtd(V^>cjwz/IqM6OdrٵZ]2|[rV@ }4CP4Cjv]%G2M4%V0^{!,)öz4T0+b) Mfe |HUE#̯N@Ȱk0/ k@xm#la2 Y:w9m?c?-1)|֍JjbŠ3'nâov p B5 =~MṈ:HNLO?Y'Ϻ6iS5KG*񱰅zh(Q$0[VbP^8*f@ZC+ۗ$: i:N!6kB8V֩h?x3[lo&P^˅P"0$|Ne}t\pn1cGR f?<{)F'Q pMh N:2bt7'LsʯM1'HrRkJb!(Tz{ZEg YUDHƿ0G~]!,&s LLZZM9"Hj$`jEU/y.c1ꝍ1k8{a}d`|FCb!ctȞaaYcsnxYdKCi{ 86A0m/# LEJ/8 ;ja.]Z duAea5瘳œbD4$SUDT+WC1)V5fcNl}pe(1Y2'3eMcp ^VZ!(n"Usyr(twp)HrQ-T +|5VC-1})f@Of+_鎚!c]/ jv[ Ҵ_ҍ$ }{B[S潮Ip%[S<>#<* hAhtT{N +M%P& ACdZI}{*]r0L'eQpa&x ԇ% TSJ_1: jwΏ}(KB݃eMk:TƠ~yLp>g/wuz2TƛΛlz!m?7+O'Gם:s\8OIf>ڏq6Uދ구Bn#Utƛz-Hix媞';儷/ƔX;Qy괋[7G}f#φ¶䃑|kcK4U굧]iMY:H9|{ڣϕQs[omE}ܸr@eֺi{v4wM3Rc:+֤P5R{ۙE[ia椪(Izf)C2նU3Wl[M6R]a(;y5'OjcUR";X˫C_0M]O] nm8{PbmyHnLZw##m!-ߔ?Oo˻^j^tyΡvM o))3GSooe +󙣣l~|ɹ9UNj{' Ynյ,Es[A-FL `ξ*жg9s΍Pk%h0 |^ѻGjq~rMqrnt lqUZcydx92쑳4"m>Ueq Mk[L-@cRg{K_q*\Pd?S l@ѿ"`}4ʒo6ݼqӵ'dm8yrE5@Tz3L_;3fd# +{zGd큽`Nnq"/v<7*1L>Mp8!cyU‚TR-aiH3P$\s}!rT/yAi?~KЄ~z=W5˳ 0YZK+kM۽|@H1<2RMZX0jɒx2\m! +R*FLJ̶fsŧPWb'L9U[xgOK ZE[ Qg^e|Y= XMϏzVf'}v:vDž*aj/=l[m{}=QQ!~4ԝXeLvKaĘQzk +õ$7SGEN͂:->U _g .hz}AϒJDXQl`v)5jKti2䷥3K3hw`yU̯9H: ] Mʣ/K +5*Lkl Z?S5W-'}T9k{^zkr=p7r_`iq3ARp1XidSa*jeFR(y8diwYm`V'ik,mf赋qJ-za:Cd?W'ͷ|LJhSN)Hnw‡MvljP|Ai%l4ȒCbOoł\u~@wReyw.,3N=I-%h~ +V]SL͒X<~2)ef>썑u@wQË?^!0{*ׄyI}/JGI"+-]J>K1<֝s߳/]II'ev.13˜Q*3qCwD͛E2QxF"DB- +HǞ B-o"*6vhp`J+9FCם̎0y.943 }oImܤwi. MҰh~iĿIMer-]D35SAYdUR*3xe|q75ICb}4Ip~Kk8hY +H`#~ȶݗB;KIVH?y&Tyi^#]n!ʵ{KPit%=ׂΩ^J}1Ap{r|TA٣m:#" +Ifc75߂8t9E1 7w;^vُ+@U]֢WMI +fcOa +k2QYEp^ cM |Y%la""@P\ {Ŧh[nݪ[uԩ(=@(مvIu BK_CP75JJEi謗b."O-mɋ@bdq| ݵy_zrjq3 +#kU0C>|A =PE +'H{$ +ً2,bzx:ILE-(bzف8{r&{S +x\N$L?5ATɩ|=~PO,%`o>d ĬBbzh(Z7@WV]w;Gv` RW S ނ7iE;KA&E7Q `eIZY"O>1؞pT!={`[`d[7ps-|(9_l/>wCd~h iWƺھ2?}>B3^ P `l.6x9)=:Լ +AGsJ h%xfOy|juξ%T=9[ZO*[Qeq{a419jBލ"JMڅp38x]i4҃w2;n;qGwBY\^:2!}/ZXd;ivXCnփt+bN}l b̓z 8[yrp@/y.`{ /CgU=;@8ox2=Lȫ4RF Z 6rrqjb8 s\/tDQ}q,u)RU!vowK2-P{@ݓJ,+ʜ"TMF>oz<ª[3',3%POD&Z,KZ!߅7K`{ͽ-¤ryV3Rw?>ǣ|YmނDmAAkV<BGkQL4Aj|-ZbX*;эP.bu/U᪎ou/YOBdդŰ#Jq'kN+CTEqp(%gʹF Ht9I\+ +]5I2uC U\ю"򪀞 MTf.3௉i =ʫl6>))I2H1 +YQBO?[8Ft|s:ՑhLj_l13n5RRtN^ItU2H7Xb i.4$QA.u? 6}Ng3"8Cho{ؓ9R*Fda9`6)`5NW莎!%lq.$+ǜع)ON6h5CTG+$~˭ kH.*ױ cgo]SjeQM4MceU=J&ߎB"B#{`֣Ns5:9*'v:I]" bl{|êYL^s0B5UDpHGOD:{i,-~85!rD߱=c;2c*OXlyY6l/V=$UP?GS;ҸO@Q_6W\2D ]p4I{ƾ g+nQ$^W.^vi0A}=,{q_?##NE}⋶nQfne'@y@8Q$KJt<ֹ=v5Y߾!jU]*V6 [1C~CQ%oTĂݳۄ¬>vg!p(+]?VO,bܖKwU#EV2R$]jV h[H)Nę'Xq6V;ay>fJXp  r̺0 qpvoa$q b8Cܒ`0’30">FCY  NgI >j×{ⰑBRuZ*|[\éz??ff%7ϋExYm·0a)'%p)Qj*_3PBP:]m#‚xRLvy>V/"㖂VX!{X +g^["Z>$܎hAwGI+ + 賿yڀw xwkڲ +Y_ՃXfO,z +͊phP/67Bh$ee=՛"Hm7>/&WCK6XHvu[/˖?aje^lM,:{v%IzGS}U&t١KGɒ +"y.\LQ0U!Wϸ\vQ;͇ǤK3o0V.A5[.CBW)a{[{zkp*­"v7%bZנ↶2)Q=2SaWL~Ҧ'goF:d})A)Q$[e=t,N9FSi:wZʀՠc2fH((GLʣA-]sX1Fco4ZF,oJWhfEwNGAl8BZ3lxQn0~O \ a!7@#]* +}v: h0;jP-LU{:{8hBî 9lkgܹ/e}ѧ'?zx2FC;Pk3n'3IkFv eoj'e2dU28߉dVƻ:Э?BI:'zlh@cnUe$e(1VL3>r0mEyjd}se +}uXhݝ/dF>3Vz>dcjMFYz~?͡\e6N&Ӯ!Crv]U1qH{9= +;kylE%1 ]Do%&~1Gʳ7مZ_'BiX@c6缛C# +6dn};,]yKtu 7ЕaӠr E^u pB~_tNPCQZ(T}͐-'*}ݮr ^n4Z~2nz>g32fV~=q\t杪Ey\P]5A«gQGp[ʧ=rG +.P4 B:K"۷*r{ rX&PT\_eʠU5Wm \\Fڭf^V~y/ +ڳnWƃg>@(M%-jlu 1<@t]gj"rr.>).>"`sX,e?G13QM~Jg`}3YSVSY~`(Jf_1wt^OKt BV(Ѕp1`r] VV˨-D91m:JV6 :z|ޒGteYvO!6-ߦS~qؓ (%y0Y{*us-sHxK4k|PPdw_4>Uʗ]?]JSioXYjv 9XHA/nTW974*h*0 ,ސ0L JL$nzfҧJ9؜`1Jc$] SUbDPX !pNx})_&y?W_IG= aIGÊ.P_4 +6,'uEpBCj.7cm +Ne&ɼ+pl""󜒟;XKhi4XtU5iqC2X6d+8nŽ&('\SU;MĈHYljXN|O?FuP`^fJPRdTg45hk28+W?t/=Fs hiRFhV6hk"F (NpFٟp,5h:J縛t`Dhc4嚔أW<'{M9J}y-aRtf5k2#, +6"YMi]1(kH + GڃQp-8p( +`q?H,.`{^ Q}I.X5DM!̽/oi@^e"- bkrb8>j*F({qTPa{!}Юω6=y4R WPZIr&T^vߗkYĔI +t^f| s@-g&B|r)k_/^j,2YRA +rOٺ/RNW\LA J嚚`M:?Hط`c^7N3I>"'|"4ݞ 'bklEVӳ/7ea৹Z̿8<4BŇP]jOPjr?1۳P~UßߙRml4^ +㫯WE1oE&kÅr wA9=zj=lE0 tc&M h{%(dH߭Q3|͝=fW֯# =D?zx=U}2}Y32y6|.J1&Ft/ѯբ<:t`~zfosChag?c+ ާohwOv#?O =loC෗o/s{l3YE5 g0lIʕ?Z!s]'NJn묃-lKY_ɓ^L+B_wPmݻKTSe+io=P0kgT ++H-f{OX'PHJSBiΪ}YT8s+>'8^f9NJ" f޻>M +wݻ#龨 I2;rMD8lB<4Xfi^2aQj-bÐ+Ճ 9SBJ;1mJ }--b^ƀ.Prʰ9dsnv+ %jSO3D ŖJ4;CfBY<(]c36v’yGN:zVBgVi\ӋNyK ]y UXJmH׏np$il!Gnk^J8fMrP;mjŕ 8>5}m"ף zGdkEዡMS[iGN)e{w+47u_2\sa|PUrFB9O0WG,?Z˵{1NYr Z:rW 6]+T8 .5* c!?n){sm){PM%dܗnwZl+\١q__K#^wM:ctE8d: m뼒ȲJV\]&\y*Md9s#[*`! Z;sՍc//;)QJ.8ͳиS( } +T*&P5%%U:eHR+XYg&kܽ f%̘[:3 ʏBb5]l(Fiwϕh}Ds=Eg.Y-V rʰrG +;%jPϹۥe"`OcR^sPl3^qY ,/$)2ku5,; +BZ7.2&7168}8_i +D1F?~ecڷK[R[Idk 8%?KK&&AGY\n;L1ܒ4+~g1. Ё@d+vҪkcVITRn4IHcX u=<ٗ!^Iv `/U+8Pc ǰ7C x{ӋF3Iy`pիmg N^#xE%CyI폪哝wr)Ire2qfe 7B PwPbnDs`l+]~CyN)M6 ;h`.X.]Yih1JA>XV5XO~r•p !̠c=h+dQ4_1rPh@ L qTd6ץ͖ZKz*a ԈkЕY7x*ދ7bCxa{*bfֈa#KLED EɈ! +w"QPtU4kdh͘B ?X'){jŭ5&wy87ZBu<\C55KY9ӼṿO lmWٻ=~0Gޞ5znsCpU c໳lnw~>@r{1 -\0Q!swU՟fdR׻?DN%# -rZuNCaN4߼_1NnwÑ_EN_$NLp:F|QI-+vLRw_9>I8tΗ/Fqj__lwwZ= +x +s7'Bh(r8u6̪.bţ%w绸9 v``QPW4}ֲXJtlrJ%UOsN$hvr&j':+U{xl$M]>߯)w3༨HzH8|7[c4//bBuTp=>/(nB @D$S0 +0~ {Dzq!tp*g[GkeBH^哝U1p@Yifҍ(CQ[||*LI-V3Zm!OF)S˄5Db +΋INVjNZZM yaI:~VJ`5(q;0밠;Y)?Jʹ\"Rc4M0k$aP\"6ODk3rrP >h:s1n4IGV EQ*t=x(ZJ_E 1S,}L z!n k܀_=c /x-u +A6= 2.^H)iP{~̾)DL-%ݖd:J3ٻ˘<۬)~\v*shު +n/[m8*Ta%CĹUޙ'6vr;\8$7yNI7[`4k <۰Ljj{z8VJҨ{Z$,7>+ϫ 5⧺P> F + t Hț,2XnP` @ǩ} +cSVBibv +D.yD“prHp*>stream +HWZJ}<@H  i H,^ ?3L$)еk}ϚX֬]뾖j䥊z7RyNj~̛]Rn.F~TFS׾Wk s3ߥ-2cAGR +Ixu}a)yvS[}Zr\)ONYHq>KoYv9"}&ֳeMuEjpã.ܨe=fY&u5:A` / $ $QՑR]NgI* 6(v A&u9a]1W|!o`,GMYtPqNoZƄD uOQ>9Z?9pe2Ҩ\+x{l7ה=/X vy9`LBK~Iy'x +vcy8V"༃7pr G#`BۯֹAE0 PmM< [ksc,|u< }JOC!!C,fN!>9/3ZVڷ}#r󳴞)S-jC)/cukfq sG0? pm ;UJA4Ih9^v/ps'^+废Ij4o8[zJ3td¬P]x 0:y`3V2Jדg#'wnj>%qϨ)}Jn]KJDG~~ݧK9j*wh۳=w&A̓_t:$y!!9y>'#HY +LuSz0V +dS)ҥ8A6KȼA|ZtKW{KHS ɷC0S7[NKIv 4oq]$h}L|5lh񑺛2/NrDKsja~L|W;tld7rѕ#+OE+r|%Qs15/Vyxrzc͊;$1BĘa c -ovvG\+aZI7 dR-f@6(AٙH#B47x}aJyuqɩt/=W2a>|s{y)L!yeZ}c!N7]^}F#( 3I[`tRTt}YI>51/5!.N,#K0cSE8Rs e w+^E J61cARcA].G? +\݆ ^|`r\ƞ2w1zcZ:3'>l}1 ή T ^NBX +f_|fܱnA #Nb,~K1_ҹq Ж!ũ4]VY Xu 8cg#Y& | QBh۩ԩ&кnfgv%wGcg*:N]Js.d9١gGjfzV>~ןSSPR3'ՀT8'=cE"pΘr25e 3EF=z?WMϙ"Y-Lb猝JR'z\ĈYFoknr3] ]sZ p:fc<+lm\PtU,[Q[;4dzzЉV0휀rKн_;+su=:'wNVVO0.C&'fլoEDJ*d)pw+cC^)\%vw2gJff.ڞ7UeӢv6ɿ{"꬧j^mHC]ED e%_{77׋ sV)?-*!6-:%UAϕsr+a┱oAyaZ2jn$Z=@qٳ]88ZFڿ2x= Ef;DŽZ;3Row+-#zA +E%մ=тxY+]Gv +t .cFwF%Ֆ,)t\YޫW-9ɼqߢVh 4 +ܦ|z_V _"ЦErSbbaHioc^D_^83+ KF6Y7Wj3M/ڂ&q%J$?T=@,,+i@bn cunHoco56r]jΣߥn/LAK_4Az"/`;Kocvmy 43, wQ/&]6ϏSllBݕU`&Ra2hؼw{T'<ۅ!d DW$"K)ln*zy)hț׌Eib:UnL'聧 +G(⓺$Y*Ɵ/1~Kl^=8u3<^HA""wm0Ҋ|`B8 }pQ + !qňSR/wuH:uwê"V@M$nq0~7It ƀfKjInAV)mfpKiv|S ml>r߄U*,6q,XiX0?ް|C2gn])r,<6 (ɪ3AOۢ]5)n{?P,ԙ]BSBMh_P#J 2ddQ&ATZ߯ΐA[I*ԩSk>$T2ɐ};}pN p{E&5g,SEtۢJ^ء u3&mZjs)׊8wNnD!٘ a''YlW6' +o"t;2dq=HDN^E 8۰KQZ"%RG○T|VZu<*o<0,gW,A9H'n6M'rR|նꂄU W/V]n#6&lo[IS:đEɿ Y ]@ ;P*^5 UWDT`j+i4jG3CgzLKRVq8݅}bŀw0D%i'@*k.+H?2i\ܸ4n{;"OVeS )ݛSnsl_9|pqX_X?^E^2Woԗ4{+OאP? dgc{`"%c!B\S}OR"ЖqS]C=AKp(?uCC =AEdrb`[V;D|&UBz輴eQUUZZaői[UXtra]tW$S~'6&"Mah &Yѓj.ԘAWKr_{|Md2|dv{4㔎alA<,נVp]ne3+/=(VZLAz]jp6S`n1D87΁ߨ h/ƪ`MWdҼ"L..q"LUrw2oZmQӎ,w֋nY2rWET!пI=^`(v=hФ +!(?A]P'ǁZPvK"౫@FT{7+Mn!sLta{Ӊ u {$ Mc 2ޒ呻_'z%Xܖ4cb [ r9`$ ^Tͺ/+zP#j6R3 +M#Z5삖v 0'kW}{5A̭jWˀT-Icҳޢ_ߤ}[9?( +3_)X̑J.b掔y|~UB\2 {I% +D|W:Bp$$0|VAH~7(*P}4yyL[{Ygqi֏K +/$P&nV8@"BC ++شi%Oe[Ez1-"mQob:K/B7K'M ^ХrɢVz-W-T|D#(/Z "b=8Yn!'9GYB7/4-|"r\"maEYHoɄ<]\&RLshPg@@nr^澥LA+.dI0׀؇0x r`v..jFnN즴ߧ9o(pC5D H [,~ +ˁRvЄr56K[-qnw_*5ŐsNϬq.>uAA>2tP:qVB?rBSEEabI DbnjRkE >93Ry9ǫ@..jJ{zmtޒc>+}ˎer2ޚY|\fWʝڭO6kuy% 0n2 V%8o*21W9Kj?!/cllzcw,ݤKVz^/onmX ܤ7TÆN7ÆK3ӳ<6y ,0\λa(Tc C5j,|aAh + 3{PKӫImg/Hb{dL>HYx[|­t\>J]"9ʇeAM>ݑ~No``{%dյS<X|^ŃRnqMMgvzާ+//?4oz F/EF#JI[MFFS}uSr}M& >- n/y#}Nm+ɼ9aCvݿhb9B+3R*Pd'x?Y$ Ť}ezϧeϱ =w1c9Xz٪z{Ħ:5Wtp5D,.~]VX$vL]KI!ZƁsY.uTS\T..wԱo*_Ex<"H~7]گ7goˏ#1N|Q)iZ9fcŀ +.Jn./U,f*󋧫۵ֽE\`f5Lc<񙅒,"蘅%:$% +Ph2٣@bf_xTR?BTZb~>5iIT*r81W +>=bV;QXOZ77#t9jڅ q|] -nDU?=O "J1Li%e_ T)4Xqyuho7GxcYF4 '|l7~Č; _ "'̂InVP.dv0`DQ ih*TY$NH?09Y'VLD1#‚%DK~Vǧ>ML4+˜D{41RpAXUbH3. 38.DŽ"BUdk 3e}D6d ,^ÌM3 %D05,'3S+bBHIr)e%ڀ3 QAޡ`BBX' g'(S"o z Ԑ#(  ܥeyS@K.9l`ʚrvh,-M,$g^qzZLpZ (N/mO88h(\<Ҍ&\ `PG~ǀskxSc_P%߉L $q8Vsٰi +knAI*$@.`(!Zɷ0c0d+$,F٤NQCܟp8Ǵ`)^r-S# wqg|Ha+]ɳ`r+} ˳`Ix^iր& +gx&D5A$`FNU-˄(K_V@ += +)p1o<8 +Zp6B7x,@Rk/L(7LA™'U s3Ǒ˕4E-m?\wz?z=*{Ѹws7Gç޿qa4Mǃh<@dK `C* endstream endobj 25 0 obj <>stream +HWmo6EwRAqI颻ImQfuTs~Cʉ\.܍= ^f"ZwxM0ۏ~v{7 i?IG1N}AE~q޽\fO95QGFnv/w/ˏâ[-cQX|ݣ3ŗպ]z? ԹY>>صO^x&~t ucOφ]?}qgT^[ Za$w:yF3n) !ԡ +>`CLADH꺮j_emj]Z֢5iMPUUU*+URD+Vъk_yks<Wyu3N;;# YkKkJ+,RKPeUҕ,KS\ - 6kJc2Htd0C A׺^;muZii!ZU+*uh: +STLYJz餕4RH. jQ /FhBp^{3J-3SNX`5gYV24SL28n eZӊzꨥ%EMфRA9e=xFpgAAb&lȾHҍ]GsK IZC[t[mV請r w.n|DC4Gwe"#( H$O=/|F-Sy,W&floZ"_8O }\QZ . +Wj[\ +=T@ !!Ag҃:lS6sPE8_{_ppȜqw{A#Id~'`󫐈vh>nCa&b1f) 0vc?8N .j'k)~ +S70TFK,PHf 8f$9'M` _WCwi[1gfgՉy*IZ3@[f0Lʁ83..n+{Y[*(%hnVY:g4^oybӷiJZ}3x~-+課şڵiڰ{ m!O ҏOߛN~>kz/?n?SbNŏo7,"Dz@c8a+ _0rƭ¤6s,J<452I{S ,y8fG,zX ͪ&5fk*#DBn&T$D`2d&&&OOHOOBPP(rT fE**3+O +ଞ5F2j +UPj,W +YJ"C[QH*v)V ԟ 2g<ڐn%9daMD5+[{51$uY'I9.RaS̾7jñ8,ad\Drкe2Up׊kn+R>Gh8gMƧ֧W3*YS=A&lIkDRM˕5*l^;9z#s32ϝwAzeb^t /q;(|,E 'Jf3nLg8o-6筞:St_ +Mٵe̸m3Rf̮Ϭͺ-&krz-6vrhj@XJn}&t=I$d$d`mG#@PĈAHH4L,0SF5Ff8вUʽR*j\QUCU.J`ˑI#O)QEQ6jUkCTG YKd(Vv4!rQod7jn +g2aHMUT8e/YdsPtI.2OC'| ?x|WccL 0B_ 'O3-)o=~"՗yK$>Kb%;bwGr+W߆*Lׁqqa_Mdx-2ţth4rRK0/BY#a8VU+m}3>vq9t#^ٳW⡳rܸ/0+iXON"i869BP lG4{Gd`v.{s^cgߥ)?wsp-̿/X_3'kPalUiSVǨ6UM`Pj97!򪠊*6цdU}zLUjMxs5ʩ*{2E5>V[ܮvuHէTg^6;^jNfOmgm.8jfX% MzsM^=aNB 99;\#]PWjk23'nP8(x$վѾ&~ Xxf[x%gl,;skېesrV>^sCG?M&P|sF뿛~zݰ[w'鰧s.ݛ !j/wXu ۳o}ᆗxXB'>Yw'MLa[i˯_W>џo~/oGovќ~|+u*4$eX#=2~f?;2?9)*e6Go騳`wr5ǣVmciʦѲij{?FBl*roO-"@ pݟ)Sذjқ-n[8q9ĦˌR7W/Y@A vϹw8|3žx3G3 \9GME Iޠ +tiirfMܞ-"+2`0'7Fla.eh`PT.3‘f+<.g: 2vm +jxFDf8eZ1-OhW IE%lmX,VivK ' t{4O[{yϗ~*2p).KdԠ͜,KF$Qy!Aj:N[U):m>XB[8?xSv{5onɷso0OxSy(Wp7lKʵ(e1a/0ZĨR3(3&̱τI22K"[}@CSOywP]e 6ޑfցN ǛTՉ;3:},N%6!:+=>rh=5W<γ>P>i^="ꨟ40T҈6%nܰ }hՅlݳw /zP$bg~-y hm:N03ij +Hg |2ltp4MpVL_[_V  4%iHA-0f8y>C_D}x^(:")b`ŀ1 YnHFQGfc#Ft}1zɢ2BE:"x=em>"Бn7vrHɧ$gMv<`NvL<5 +!zXXCzLʬ "qs!7rs12!z.$eQVE.uYM'NIbIO(Do~_y`j |m=5-7ݡh 6mp\ɺOEe{7˼^|V}^= fhoYUp.,=<3'V WT%>žJ]WKx=Mwz>S: +hV8F11x[U])e8~j+js-m>j>W7w޾;ϊz8\p{SMmGnpc$7{¸Z/0_2x4Qk u28 a]!åX&>עd1v.4I! NHq!?Kd˜dqŸDqĠ_z\ +[+i(ìdh3tlEH |Z(2Yg1qGE8l9.sf!G$ ,Kssz< .b$&9tOڸ!bg-sdh}1cL +ex=ab'Dd*,} +ȥ2{p?0:99mfV&f߿#ecYrTE8#ϖB¨KTcю{cR6X- +wG҅KU)/MC^]-䖞WB>؉~ÄL+擖RnSД,%~$tܒtC9Jr'|Il)HJ&xdAzQ~̈fuLdILgȐhJ+ 4xNBef5*ɐ$UQ 5.h'tz)`0X,l +xfj(-Xs6N\;0鄀JxhB6`W H " |3q_`!9ߑ6U"sb@B(\F +Ar6@k;pVS_\ZsFoȊFy],x z6M]C36#ytN\^4l6 =0v$c\wT#)H8X#4":KWO"ƀf*^L`V+,4hO4b'hBDj5xc7ʡ>VX)J(1(e O3>bw~wTSG/_=o>$;GD'_]?>>pt۷JwW5xa B]L,3Ɩ0$گh߿wt$M3c?& ڇtzI7_iA_6.i߽~?\?R|Fi{Ί6+J")JC6jƎ-N{jz'x` +/ƶT8iQu ,Ђ14ᕈJK̈́8,Mp:Ǽ9.;g$1WXBC8V]QS5SIA{z"B1 OևP-8p-+8_˥Wev;u6^$$@a[v`A1lHYغC]]U5BkJ٢hcZ)EP [|V֕J jn8{YmŚމAB8 +ON-(6*}hF:\@L"'|!c}W߸?c%5|㿑OB({αl ;ŗ_=h.iRCZ\C-Y֡ )aŽBvC_nρC̶K5z#FZpe[my@zSCH`-Cږ3g|I#VDbhQ MQ GpS35tD@Z;|W @MLƼ&f?_T$Xa)˹Q ܕ.&#t} > Uj$cY [!RdG9n@4rI;yeYbӽ94)k]K܅w!Gx.T,=,USM'%O.vZ)| +o7HKXW$T BEqdGS$jNktu Oj_d@K\VڛE a),P˸!u?qHx&܁IIʍXc/&6Z-dƑ$ytvX92(-;v+bo CM;(5TQ.{ENSp l´,hѰc⺽xSwtjTk}I\r~G~zYHluwU=j`1GV4&%A[QJ- u/( d"Gp"Q!$f9+B< ػЯF1|1q6;i[:4:4A#{5 Ũ(.5*fM5ꖒ"v,A+@䠔ToS)jvf~&fYnOvvMZ;eZ$SN~,"_.VcIE76OA`\htq#=oT #$E^'kR` )h% +3#2?Qfc7Z7.^% 5:_l (F:DX +}(0jZqbZqr*WnM1dDl+KiNɸn:s #lрLy%K)c]YPh.9[ Ko4vkblRZ􂣖d +,QQiP]{9G~gǭ&r)~LCcގx?=;fcrӉrxEX=+ԣ\pa =*jrfD Xj[9X ǧ^Kw1R sQ[,f_O̦AU]9 kV}c7=(EG/,43N:̳qZcX4c5Fhj^['XGO\ı >"%n1LR +|JAcXɐ t観ZbP%7ೢ% +Z(f ̷"K'P{ȍx~JĐ#!x,M+Jvڊ~؝C%4b)J7,4TPd;(uGY~) l>,Y$Y@pb Nvy^y,e$S^|*q9rzb/ U~'}$jӲ +OimH$򳿽<:f)Ե y)/0* ,m +3}XYNK"(!(|ی$ 6$;jt>oygK$Wqst*rKD֛0MؕfM%GS'x4>R?V`ffi$-r.j>:ܨ)X$ +~OR.쏰Ȧ@$Z ÃTrB:.f&ʺڵm](3 H뉦8NPD2Ee쐟iea ;>F1e2dXI#)I"gOI[(H:HJtbNSʑj 1O(;uYEC(=ً?r2զx>T(J(Gᰏ)BL#Y]QQ)tz[} [}ԇ-o:Rɉ\8fb6ɰ"UJ0߄k7wq+H9NaVNHw=tiϓ9 5xzAː/Y0ot H Omu= mIYE9춨c)G$|4+%Iާ 0yٮ%mt9?QG8u#+v),)U .oqzW%?d=[Ϊh-n홢xIK) +cN*Ic픴C0ӦYtpg4HHf h n0>$"PqM x(]K1~*Nya"ecfdoƊRen2 K +h_I(!6ק (0 x)fS +R1e\Hl#װ*s()TI:qBпu|EK׭-wsfUB3=by+COþ"CC037O<фRFBT(vyęoMAޞWC5^SBD0d5+\mU.znTEγyZr 탹>zs@cȥI_R=q  %r}5;%ͨ w.a[kyTyfhc_=.xC}86öT} n>@9r5TJ+h?emꒈ?O=&lزHRwq],U N^**uxuvdAFEɩuu͓] phAcC%xD/3t7OTG)Tv1[f{I(EXpVv&+e: N5Mo lI::~~c+ ?Z؅jVi"nB T'$93Ȋ]u>IC?m[Q[\mqnZ!Ƕ Q=f"ؖޓo5}Ǥš^s9{\Φ exHYx6.mmfRFJ/{.$Def}Z3n`:jG] +}Tf\?]iӾzS̳z-6cm8zzꑏ#gcBkpVhmyyyw W7߽ǻ/o~sp^s}?0Ê4P:t'` +@lsjjR4'VĄ~10x$ H'/$:4\ +N+Ez] yEHxfd j-Xaw gSfA-l!-31>b8_98u!@,cM0(A6Cߥrڂx}Aόz#fr}7}4bYJʌ Aw"o!KhOƒcDS\urgUHƐk^0 RQ%ȋ*M>@my\ً'@FQA m1?yQEqY'w?g  gŁo!OFWJPCLmwCDI<#/TQNBX'}҇송YB|OoSaIi=_`f{,`(ĉ+A<*$B1hF-c,/4AƂ +Dd.bZ`e\YѭM6+`[Սh y,ީ:(/߭)!F +ل$?xvb/QA(L +_PHCnԣ;Iޜhw'@]YJ*f%Z*i$'02١} M83'@ZxdNR^mQsYs" zkIlDQNr -V[vH >#CD«9L%ȐMm_K7Z=W~d#+k(T[TC<ɨV &/-cH.,ap\g)^j# =i){lٟ}ؔO])[~qȃ/h\i@g"Oj4du3tNΟ$5. TmAk?z@8@?H)?oȟpxݾ!K$JUYF˄ + ?͗ c"Ffp(rޖē Џ,19\&. ^/eޖ-:@4 1t^ +:`,%2:#y!פl„`A6ԅe7 +*"lG*i/jnd* v#`cbr֎AoEVuzU\`Oi'U$ VY`I!i.y>:M;)|'\|ܴ[D >jCnvYBwN-`QQhUI2Ev"Cw)ƒ3cQ9/)#jVh"jx^|Ye]EWUTd+OZ@slj3&Z .=@_$rvz>Xs *6$4l90V+vd0)D_<|a,rjFT3b!w!R(Am&}TL;*_4He6I2-R] #A90E E#l+~^YKhHڂ 8hQA{k`fP@[1 <(G0ʪR](WH6,JfYiɹw .ڔ* #9 t'298-4HtJ[+ ->E3o]f*F o@! }|,zŖ@gHu+ocShj?):^ [n]uPU7ñw1WE*>%-,XᎻ2A7{V*[sGEp Ę@>T]bR2|OEczǖHvkO0i,(P^oˆ1s?-,`>; Q]S endstream endobj 26 0 obj <>stream +HlW9$7o-v)U.0vxL&jWj~W'kw߭Ju]ǼjHxY‘ٰůXPck-0'!buܣ|FDnbmwCdT_6u͸rX69^R7nTY[BLH ۬v[{TX`bc>, kEF (F9 C\c޽`AC{NF~ǭ +W,qWCziMC[ǀ&YB<U ۴X$Gvic{5]vNsxHzZY<7 +MKggcit~TIQM?zy=;_q1H/s RAi2Q`ZVt%|kօ(,Ԃp⾎~{Qf҉ilt!Ytw8[%ƨ+|̇4},he&A q#8[;gQQy2+ (]q^j[-0MfrXpsr+o3+ZŦ#.F|%8@jsPmֳc/ޣ7m^dE+c{m^0-idp,Mۦ{>W(^maulBy/vDnC4'ѭA44>ԧA9/s9YS'#FO=+?E7~[ bFB>]Nka{voOx5>|4=ᵂt--2mDvץX";W`dW +Đ>SwJ>OOlB#$-GIYA9Ƕ%8Y*F/A*g;5+#ݶBLGCg~6Po +έ]*oip~_t2] &בn@(ifo)ΰ2ZEa-r4%KubAd{|_@k#K%zw"=1 fK؄+BURiƇؤx]8VbQ 8)b)\k|WjԖZfz[E8{xd3xX$n°U=VK,)IRhmAx@@o?+ +B==\6:#Eh_5 &uYyVmhNۿIɱCoFu zrd LmMT'pe/dP9 |<r ,c/ǃlV&f2U",XўJ"ASlq\$)UQ"Yݼ/`X_TW/6QtЧoQhXuӾB |hFW +EJwNvf]ڣVe` +!jч(PN1މ +W_W? +t౧X"RO$sފ+'S8w fOggpEh~x9[<[z #7tGrA.Pfy8if 8<;)H(9<_CggHUʦpٹ[*GπVKLfzk=:fpUJD::k3[+s>D Epkz A5Fy^sΝ׸3ԐB@' r{4"EF#; +fE)M;)dwFlk04Uz]kT^ ͩξɉẻ98iiن:-d^)^mξc>>>^>#6`j,Sno NX /9+빟^sU0yL"@3X?l}ޭiهX^}窿9r8W#e'96 D> 4(BD2`h UcOɲs1鮮Vk8҄J]L{V QҌ(<b1206C3/{^q ꎔ{ͅ'uwQkޖC)-kcxq6IQ"4db2/6Ϣ@_@d>G# B̌$.,I7H8 a}! ܡL}N"~طb?K6~'jšGح3}l؞톑2dx[YP͜"9>)&$w2kERO\N$;ΐNR]k>5JG-1Ig&^8y=HKOKfI|o!եQvuRQ*0ꭱ5* RbtخACole(}y+>0j19NnM4}6xٴ3 g&$tL$Y9'4+=kaqI]03ZJ/4i.noW7n_-o#`5/HEGxO0ɹ"ry7?^z|Ӈǟk^?<,/?]==~_cwxk?zaGa9{uW;珷.g3~S&XxVe4^bҗҼ暅ƒk넆R7ڴ%Fui,Xָhs*:Jn57YM9ChEHd%YV~nm~p|y~z4/[kၲ.{5T1qcJKz/rtx߽퍸[꤁4~ , mQG` qY1k +NhP[WLmadXɊ$ZX.2L{{@\IB\р_!\QBIK^qx5)e5U@SR-JU"˭9 ez4nOUOx4' 8*\d#icBrҍLJ616YwR27׆QdEju-ݧz9D|1Tc&CBb̼|+7҂O?x[|_OXɡ t`-Rߧ]D-jϡMظ$ٖ( +$?UmPeȎUq|D\Q 3jI).ʖ1Å8dq4ȘүRX&;g}ܕ֕7FG >xLoJw +W4qQl[3-rW?~c`䓫 @^R6:QR\9UZ7pDU{$wD'?SiL}Xȼ%uӱڦy$U<~C!<_`YVxYVj#AǓ]^64!d>pN! 6+) + +jP#pX Hr-'Z"^dn&lW(B9HE[B&!=zN eiR3`m :S/)_{/lbt% +ADX!3ώٲeCB " KH$WV#h =qk<2R oow:2hX+Vw+1lk ˹*f}pGFz,m  +5Ln #C71( 8lGsKbԓCɥZ%0@fBGj%Ҁ`: ص!N;4u"` +g$͎ЗH?t*+(5)Y@_ @UWRQ{.'ujzlݶm"]˴bz-BBpX4QiF^gF bID9HyGLs(f[ߓ5%STĪT[{I5`K4 J lD*#YB𱟔Ga#~In ;=CGEbtAC( bQb5Ql/ 9-N_W֑ހ/do2C[8E)Vk4gU⑛ś/+~C[sutC0ON_MMFέ aL%qk:5Ww#ްǏC[y͙Y` pxW(8风^ DXFr5˭;3U:kYLH#kQE]|֕Ҍ:|5z:@$/N<wO}IeZ*诜Li`8ԫF4ܤRyqc=Tok# + d(XF)iE$P6 AOrRu&X3ջRdc|fݠ^I7lr6AP4 E摙6 +3iK_>u&+ՌMq$|Jsro+y. ,ѪԔ` _8T^tFD=!'Rzth- +oPh =D լ@veT-aBU2=4+F*߀zp׺P=1nM CڙRf]_&S:.jM(\ׇ%R?}: BMe>=M!MO+H`psᮅ(bކQot D(@ÍI*[Rm3"}3c<Vb:2oJ"O~X47|c +|aw _vA(IhX!HmEjS]IDܑr*T.>AtP('=helUT{o^Q^@4lrS.fR0K&Vsb$|0]itYH Eq'mBfl{_gqkN$zG\ϡ@2/:\ÔB\yu6B92#:HB(@N4ĵ a$ąG. fSLTKLP?An[IH,2}:(q>M8+V;cudž: 83+Q#5 Z~gJW2Q2 ,}szP/[n^Jj^6Ӯ gu3϶&1i=sRH60I?ŅGs4VH,rJy]؄ȯ8+|eVȃ"1# L!l*ЀUL nHXQb;Ӽ45^5  ]HQT4}S~MN̊A15MIl2K[25B`VM&j'hB#J6U^5!g2ingAb\DS5fڐ]Ѥhj"KP͒&z,0sa}A;Ʈx\xI)͘rt$|vwN!"}%ŚlFLcrWLR1 V+{O[no +{><|^FBF`Qo<9;r4"U^/+Wyrš2E}THx!iw%=+]qZZ=Kݺ; o~7@Ck`Mh0U!nT>?C9}'z*b=]gV)<&^@K}mpZ <f~l׏__|>W/?-OTtwW0~?cQWٗ6b\]p19̕5d 3{'"%vza:sǾ$69HꡦX?~G߼yw_~}[ٸxOÓ_v<ۿ]zjG^y!on~xf~_^7QÓ61bo>䀓0I0iBTMG+/a"BCs ,E11 7eEH5/Z$" 7 KxgUHZ]JȼFUrQ-S3]iCG \^+}Y2}LU"H!0acbf^&іf_4<((ۗ~#[jS֪eђ4r A1+E*,:; b}>S 8m96igB- kЀnQ􆂨`$IU,"#":&+Ct= L bp[]ԀDu525h;}KkXy(!p!~;u;#f}]%|LP +%T#iT7El$]\"LD jt`37Ҡ48bޢ;_߅rvxEV+9tM)oDz(fS)pnrWZ/s &|>7$cC]jzdj,HxIV9%V!Z`0ލi4nga)!,57Ipa t)59! C8l)jm% +kj\V?JDf̒fSl'9q6l-ٰ'\{kƶevYݼ*T=77W>y7quqsVs6mf eo}̉OeT z+C֓ +Q\')E=aerKlc\50ߖ%l1vl'r+3i3Wؙ븁PF% 3ǝMҘ[ [:kJ~<ӏQ+eCP'SYn.]KՍ=| +˥쬮#JKFE~B_WXE.[hVB>J]2#iD ȪF['@ԊG/*Mb?x8M{/ʓ +Jt81i%! {r~goxn]Fi|)1ɑTOϾA |?>_"_@= ) s:) u@Ը 6SA󜢎t:G`G*7z vfh vZ vn;ƆdqCNO=h96Tw#GAa;m;W d;0Zk;ɹ; Xu(I:IcXsPn54l[vnj[s=.Tn!mvɵ>܆/ܾGo q3-8!}yBhGPd1p'cQPj;fb m^}](T焢6;Kjd$h.n@PCZ@ pw:18`xp<wy9D<+#Y0)"}ʠ;JN-T9Q3@USmg%|&5/sgf`BpHp K:֡r:B;oh _@Ewm"Қ=!ET,!ԝa'dM&B1Lhj{6spf=Q"pܦl"5ݲacˢP "hU#|555$ƋPfU Bg]ǸJ&SA~I0 Hy5I)_Rwr_{Ϳi(!c*A=%3 8N_ $+j(e,PuJbg6y#Y;ԍc1({ dưvP!V$P+aCvUKw B(V+zjP9Ifw#+ņӜؐv>Q"O(VcFW4&b)6XeRl@Ef:(n"Ůsѻ {b)N 6l]~#XtJV}V7pJ( IR=&ױ#XOMpM5ZܳldD識leD'YE7!H1->S2 kBŕc2p2"69F?; &GnV* &NJ ,Y'd%&&:BjϱJ>9n˨Y(n'Ūkz\GKgs j+,ETJWYe^sCP?Gyy6+fp\ށA*U[St)IRa).kL^C9=ٕpU9aѢ +ƶǿ/$Kr^%2Sa-]ֵ ?@RZ*WiApUhf&^YMA7k_T!3?'Mbbh.QY"Uy U%|cX[^94KKI7"zp C%r͹;gЌ`^94](rhP[L 0.V4k)K# +Rt $]u(E +Tq NhP)M*  +0Jv}{ 4MP.h .A0J*?Zf)L~s1mђC 9mWTJRΰifmY80HEt@nLѠ|fN͝_G5A83JNtrr5B6lKu7cyN,y⚚,;='U2N4r6pZ"D{ö=u5 +݀78 2fT˞>)) Fw1?k I YYn{tJkoJDt +6lW΋VHr\ ,;Y5 }6Uw x66pc L^ ^)yʥz?x8]>&e2y06̓EB*`~́{s%w*RmU#S&SAW0u5cҥ^0 ?ktBsByjV ;A x̙4b-F<-ыqX!m.<ƣB|Ef!sא:$J!q뛮^&b:ww3zʒ&Iރ„n;BsP7W+Xc?j+'\WjsE-eÿg_[yVw#܏&m* +| +cEdbxhxhheúsp2LnaYc };SJdß"`^!|X2wy ÞXQν3aШ;s"@[g`'  (㹪xM@sO`ejkCR(V P r^t$:o E9 +y @\E;xK-#\IqG(^ᑆix/iN=aB2r3.{TI`(#=wPhc J(aKAXD^H}ѹLrxg+N0+Jkۃb8 H;z +eBFLw13r:j8T͔QX= + +'`s^ ,^|p +bޗ.@\Ev;oJ0)MQǚw5&+b 6WaP}=5B,&p緳E\Ng6vz瞜_5.|JM"c٘\v["Ztf`dԔZXĢ pә[+VOۑyۥL 7shWtO}20[XD뢽"v=b +<( +ڳ>U+uq71) qW6mY`a4N,nUyԌİ!]F>9%x -_SNYF{O˳)@6RiT|Ȁ94y{k/zÙc_mN[OWX|g2g״Ly Pb Hi]YtS5~]WmZ$;Qd3lF/5mhl`i9j.Mr\CBΦBk*aȲQpn `1UH+r8i}u(N2I@м,ɾXV"OZ]^^!5ȼvT$VU{ZRl$Ϳff@FY>v֦ f |ݖ0-ahAѧATZp t̐ēLE2_?<(hS.3'q.hR6;w)P oo/ɳw?}}7/x_>{%'^߽;/O?wyS귗'^>ۿ"|^Y|٭˗T(w[AիU\uI}%<U'd]'iMlǢ5|'٤#BEv:x^B\'KۚcAW[Y$V,LzރNAJ,wkBGձީ8OY(47pW)@N.w\_˼ > jyE[[0#.u :WTRATaEsK zcRBqKFvhއ<]*hzYΖu\A"R7ln>S;l$*&lewIT#ռߦUYv;^mlj5rʜprV{2=7N4@4M;w[ʔmM: +fDmU-:[y[WDg=IqΉީ Fs3ʽJGJstqD]QoFrmBf1wk6D'Ta<r0Y!"oµ A5j(_ѕ C8BR''$ AA=_>N0Y*JYUfLMT7zV +ADooG? 0~6Էcuf3/c\e1 Ơ'Y:G4ψ%7MDʹ,@2p!ä<`&>zGŌYpdKNa‘іp[`@HvԁGbs#&d#3mq O+9ORGZI>I=⑞&2ɱr2&y`GkģQr1G(KXCЂRrGWmabVb Voc] GQ|lf7(w4ȳ %(t`(P!K}!'m4IbmwT ncɭzCDzurXh I@%z޻].d=*NGYHݖK&V]#H2JJ21HRz.CA2&!c[AIl)&ѱ@輬0<LCO1J~\HtWK/<3BlQ"4J81 p%P;/׍il3x>IF Y "ck51QwfU9qՏFqo]J!.Բ{ *~8Gyx4yiWO6NCHlI=mQM O& ?"+NtCJ 2 Yz"N˒ W`gA1VHiɌ8ח.1b.%y U]U%/ۚW,'#r}%)}cC9q'.ź|=S%Gd}K$j1}JP+71+7BG+%nrq2Kk+յO0djjJ{{bH2o8oZ_B ,F>Źs[$P~rjx _o,Y?@ׯ?ڻ?&Tc 0uꢥ{eVaسQ(مzRӑ~ic\γz&t-x sgt9xи2KׇnUM_ӕGcJ_N1;E^= .im1{}ϩR⸁Ӗ33S4z}fz3*o*f8&S'izW`[|%oouH(WE]OLeWw-+=L`R3/ ^l!jn6xY(ે],"u>Jod]0H;&ӃAh+m|b,3;o>r;}V^~VбΟG#0|KGrB_ZyʗzdNO)%t%^ac5#JPZ":sTiдzGAW_PӔSy(HO;*j¢Ȗur} sM$j\E7Sn18WXPZa QsN !c.TU~$gAYnp*jWUP{w*4 S-j%|)l|f.d6YR'8ojD^% 85X׸n6>+_75:k?mfW6"kLY}x,la(Cņ6QS/\(XQ[vb2`JUa&֝-4%|8"M+iBn.>L2($NK0 /)UR[ǰlkZBL,X>!bƐՉ}$íqPb%ԼMloYa DIa`?lwaL VTnRklubX˄`(Q"bXTJ+t " cFg4m*fa T0Maۭa: \FT#h0fU#k=h*i76IO=r/$WF'ᐁv4}#)E^.yV+.ᐓ,(hi:+CHlP4{xIhM`؆(yx.}ȓ೥zBSO~eq\!Qi^]ZJ*A:B$=:se]Qα:bc}Ii? ~jJ  rw*mV?grʨо7>UR_n<;Er285OqkIپчȇrzK9A2z2 eI8Ȝ0&#OH2VeMk:! _pЀmP;&c'lpI<[06;҄ /{HPt u5Jkz@ F6!Y;uBn/>ل_0|ʝ$_gW8s0Jሒd p䅡4gm,ft*.'z&T[ӝbNN}D}qpۢ LC cL1tYt(O$\҆&ٕ?N2"pN~QбEYf?uVY̙P N!f$ySk22)_eCt)\755@ ]~:f@x, YQVӝH+.%`}Sw>#K8$d%npv%q{Hg7t{7m0پ(V75h7&05=JwK(]!e;U9(hX F>4QZ"lZnyJ)@!hW]Ԯ%*I d1rv5:`khwfpׇ E0QaKbj)@Et}cML]z%y߮zDr'3xAWD~o$#|4m3aH]_ǴUE6l1YY\j_w}z:x̌}J{JY Ad;6h"R69]ABA6OVeT/Z7c?jqfiH7!C`.2&Q޻%{i%pO4: +ē.<($cur #SnٰvK8ѕ}qZ>[k=6CG 5+[lxKϗYÒP0B$?f%E؃j|,̞`Tg 5 jI17̲6ϔ{"p24]1"; D9&w$cLH@SbZ D%s䀧^`'F 8z1j>W:uٷ>|}wywK М*PP8,~}$n1֏WQZzCxĀPEG0r-XAn3)1<[X/2GH+>LJyR[܎*82ߨ:v˶REN 7$deMZr{Y.P>1wuzs܌nriU0 ż +d&Iي4MU '1) X;z &˓G$Sgp>SQ@[{!ϧ?O_Dbd~2e{d-qDE_=-|0ܮN D)WW5pX'.nB2_)dˎ*WY8B`bdGgTrv6wf//ua*m]cqAɼ[:E>}1laI`k<='Ty1 endstream endobj 27 0 obj <>stream +HWn\}.kr!9/q뢆4bJg[+z3佻rF"khg6j'T*LY)&e/GB:>;Ej{~yCI'0~~D_xRYd2 W92@Nes3XH2nBt9(14[{BB(bLd눳pDVu,p*Zrq#Rc+S}P(S爵#u2͹8r;7Ī:``̱P4\6B_\gJkui4&GJ:*b]5AIrrDkRg2TumK}OOP%A!C\uw+bAs$Q;uH-jCiUʼnH?@x2P|-Jgi!.G8Ss4F?K33ÒMiLO 'QTAG@hq^e&'t/ƻ Sgj#'vl8f`dIV֍(YȽqyq^tn1s0h)T)ypj7뭇ydGdp-tOܪHIR&6%] 5c;am@xIN0)+ϩ0T= R섩[ybEcԋS.0+̯>:17_r]2h_>_0e0Ց&G?22ADv&XHl瞹XD1JYDCef*JYK#Q;ԛAHH䖙raXSg!bSCO}r"Z Y=q%ş+DrHO3YKz +ՌUӃ|ⷆ?0ӟ2g xYg 4v+ޔ|# S(YF nu ,1r' _?Srz) o?x\ "whQ4\ 2h5jz";`@vIn%PPlEY5v+RVkq]9ܴ^CBU~9Pa)0@(&1ﰹ1DŽ1M Jq1۩& wC*"^G>uV@s PN BiLzJHr03kp @?RQVMc, +2o= w( z`AxBJK=LE{!-p, +Tj% MB{;~>ǻnBcf!лNOp%G͑ + oMQ +89-#4# ^p'S\ +2'-X9I2 " XYַ kuSJ\hxzH]œkqHul44Ϣq4 ۼ\(A%'rVltSJ0rL$@(J:A}pQSY«C0bXw>D qr}p7\ {+u. ɆӍk0Ef5fq# GAfrg${M4Z FsmfhInke%#ĿZ޿r'G'q<Ux 1F!09JR:5ı1_ + tIYw ^W@Y`Ƨ +X`HƠ& c5[;&?4&xE|Y'f5FiPD>yAQnv±BВIP> eq[@C/(XY(G+p"?h`C8!.]n]=FD׻eS z&#K5בeLCxXCKE R G+fu A{*Q=IwǜVzVAUz 5a-K!bHx{Yuyk]V2#"$H\vG7U@a;ݫ]p@ǘe8\ྶd[TXeqAՙ_5B~l#=@5rhk*tاJ(@a%0@\B#d7շST I-̭Gi`^јɸT3T2|&:W4A;Kjuk{X<@ugmIm6 m*BV&((* +7H W@=kBE2048}2t>I0 +NOJY;QtDS޽ZsqykV%Zo7A3WLy02(/[,ڈ:O+7rT# F>vdQ 5=O@v`:&Iah11kr]Y&7 &UrKQ%w)$QFoyU=&wT1& Z?E@;ﴺzĀn/A14YL[Ztl8~6[|WE˧u$~DjW>t:=77K +03"`Z(f?@;fLsY+FMߺi.I HI#WZԿ:Cї +QФ cx0Fw] J=W˔!ܒvbB9D%-fy\wixl>J&KmHu1w')=lzf>Y/{/sB `EA1ߴ#Eߤȸ2+AlZ=f694zqv94tz!rYS?3mz>>.5JpQd*.Z,"4P~Wenv\$4kEG#WU6Kd/l_$ꄓ_D-U4%DjȏbB%BH3o($SYBw!N:ㅬ.3흄}3U܈RztqxUFyCF-ѣͨ*  vorc |{XL85g2yNNCX{ެAш&6- +"OqqjTeZ>-!͕&BQ dH77NibB֔sn_R.`X̔"Ki$xXvRCr+f^ڎaI\/$BaVeoF+J1N56Y[.ۨfN GR9i!&CL$Of YBtJMF^ROuyDG=%PSRǙAE[LYcV +RWWe-OiA- Zb[vU98+2f-uSk!|350GZ28g ~ꨔY:$O*q fAz mm6 n'akoP_nVR2*^y7" W k.1leG/2HEX&obFBpu,TH EdEF zN58~랸UPPǿ4.q:&Bvs$MD7ٮ5'휭T=Ա3$)(:( /I@b 'Ĕdid^N#L;#}|O5`f3|<)] kc#O3@}2կ E;,ó+L2BBXf=ANgf5 +U& +iz7gK:3zŪyr&M< ˢ4GXҒDFyAoHD+pJ?LsK]HP&z?è[X*z3M82J{\O#ThBJڥ\ruT;~p+Z]HbHw$Z%082*e E*1 ZdUJ@d9\qUt#uޒ*6$j\/ADj<3lMi1q')4w}xFd$6gL:jN#k= Nƒz/fQÚ<[hck/L2%K?[\Ųc&6L]!m䖤4;h$L|VJPd&4v2;B'i#w! 8*ZJV#7z\d^hK*ډr2R[Mg>ZwAz!nэOlR{#97Λfʩ%J޴4%6y3lcu='eTTTC8O—?⧟۟o~@‡OKw?/oo?~GFIZzcsR02 ~ON~pi?>+F&,`'871 gh[@1h^joΝD䄸A %Xm\>MC?y!BMC:5e$@exe^1h"ʯP'5䪦v +f3ix~NB}Ψ!?o1-d\1ݞhf N0:hRH[,c6ǕfPRDv^k_ 3r_ˡoSVU4O+#.',tkG-#]B必mܔۈw̦_^WrC. !/@&i4BY;"%rޫG b"q;#禧} +qVk<`I <ǒW;y'7*qRM8qK'Mc`ASǍ8&YYtt2О&x2%RP/Az*7 d*G=󶴦 dYΫT6@8 5n&QVk l,t*PBK4;&Wkeg<;㩨`˹F9S {s.<{Ʈf^AS[w a@m,{}=q1Д{tl''mThKZnދd"}Y0Z9W,֪|}jS%=/~ N|}ƲYߨ +urٱ Ҭs߭~?lYM]4jآ~^)D?U^T'rzA{M()G[ Tpݚ-\)WYLGZSiHfՏj{'*ZaݕhToMԆȼ^o! "ga pDwȰ,"M< R̽6Y9}&J$[iFe-Q'v !`P u+[F-4VHg`ϺP\G32}j(1"e/Xv;}q,Z`q@B- +do>;>R#( +ZהW# 8omE5Cl;:VIdfV0[bTo@h6Ö:{r:,v%Ոn+"X9VFBrn"?g;0᱌n\éGxC)!GOUz_8p +#!F(߅I48Hb}NjDr>FjDZOLJ&,5˽hiX(3L eT!Xl_we|^`hNg%-u^W/ ym/i'•:A8Ӥ"xJDuxX#{F.} 2~$#LFDzucY]fYFT\#|~5%!/VZ4*H7zsOqԙYQ@ȽjQ!h+9,skU qj;~I7o}rJ +,b ݩ%8;F2{Sp.m>T-N#u<#"`{WsWSH'#!e)6i!ζMO`Fb=ٍ"[IiTtZfyn$&WiwH!N|"U\!mCN|i' v'=| t<+mG4VqWsN>5"J9#+%AZ`vJ?|N4m14<%rxhS\-kRVB4hKBAסfP3z m%*hEv`Ҥ(F1P 1DFkQe<+ppGЖəCmU/C~c?)IG𙞴-:"w²b[ϝ0gL#!餸Ӣ4 ?+.iEUŷ1:Ņ1+62nɥ87>sF +p`QRӥS+1 /?,|΁s8,%)^UPGTz0gr|flnr!IkuN>{*?T[\(\ȫn a!Ur.$Q7{ZS(FC}-!)/}w dZ  C,VϊTud=n7D{9dmZ+^`w7Ǘ߀Z.%yKLq<{Xr1ZP-; WˀR*Fߞwn":y7 XTf h,^ 1s8p0KY90I$1ǿžŤb5J$US_ITj: i}Z@%ڰx? Gou\<9['j|S,۟ ` ]?K6ŶdFcIYWl`s`Au)U& `q$=@q5j5 +;u9&Avuٹc@S9ƕ^)2?<H9%l&9i}5ϭz+!GBHw%(WݣgiI'#i*lPl g( ~PYUҙ~z8 HO%ZI)-J`YbJ?+[} 9L4"nQ]#zVY:Ǭx\K+4Ä&g8>x¡Ǎ}EԍڳB^8׃vY6J|B$BHv^tK6@']R%1eH2\0Sפ5ќ^$m$W>BXݳm:mG<5&Ox}ߺǹ@J uگ҅.߹uFu?ɪD CpN"/>Zg2܁d$a*2D+QD-400O$փ|=sFduR$*2L;`~oR#gEΑBK|wQE#N|)\L;o#{ /g sXΞKS*-<颕0ⓝؤ0XtI"ƋDb"^+Ϳ"ʄ?}PY3ѰGR&~R_!|*yOLIޖYxlfF"F>ffp#kE>̘CgPuޥSi@X%@tFK iOWpFp cR] E$;ȼ /o}o)"0!43qIH.V|Tš6PAn"`#Bl\8+m#o$ۖC5bCGM h)DXL2¥3Q[#~k*3[b4Y:C0Jyy@HOD4sp +Ǹ3ZOnjg;")2D *LRx1PA]j{~lAJK]<.\ʘwDf)K2+@({rH+JuF V$sndep#b9}፵LP%9?-0\Fڠm-*}8+ ^Dǽ|El jA ρNuGJ/AOs : eí1!]4#kV~&j+ +BsEYR LGʅ[LQYM &%vؠ2->|CEeʙz!X s%X> ѕ>_|@JyOyj O SB * ASFq}*2Q<~yR05m +Ab:2{}HAT}z_h֚: +kq'I|4r1!Ur k"H9j3)G 8ϝK3Rڥ8)/>vJ՚̼ +"ޓ/;i\)@l' +nb#.Du̵6 fĚ0qwiaab)OS~ 7m;Q兊$̈́/qu;/r8jW45<ŭ/I8hII&0bb)#J/P +ΏۼDQ՘: .|0N +g;sID]Z8b`'ﴰX("KcPKKproǔF7=hO0)K;UzJ4N]CFmFz, : 33?{Zb,`YcTaozBkQ~wIuNU +ҸABdѢ~1-Z}3xάؠ| YVf딓Dp-,+.ꪈ HVZo22jf c&ŊsW>!Dأ]fJvVbb`M̥O̿{xw@~kՙ_^?/^~ݗ??j7#w?e#]=,^^}|_or{7?|O_>G>|p xyV~r,o6eLh&]>.zd.5 ԯ.0/F ;SM1FM$nxѯ>5J;4t11$viyB(l7r4Dr$o*4ϤAͣEh%gX>瘴%mNM +u2ţ^REDc!jA"(nE2yQ^J]Q#HW[8r@qMXI(7 iTC[ՉCe2 ow\/?*Co'48=)bYђ x >-y=tEyB| +0PL(%B.H+)ϡ +9=4 +Uv_^B!a19:8&LL nDV41NϬZk ق-hh:- Xi }A&0c\[4{"On@ihmQq{_)qH yc7ɉ1"Nkqo[X4N +%Gyatڧϴ($Rt Ӛ) 3ϊdj:NZ.^W7k%qPϘ0L&V|)"sFmӁ'%0ZYYKJnBV"VN\` [u *#V>hPBjɐ9_gj t)/BR>s$^*$/|'YbʐfiR +!O{SRW(ʲP5;؅6g^ m[|5N95vf9(,qb;fnb̸'u%a+#0Sif45{|>\f?.^M!&X{-k>*TNl.[J(ikO0 ]A tb%+ÏQ .ICE"Q +Q$!WmH6rކsӼ$Э`vNĀk#ѕ>-ɿrPKƓMzG Odq<5w&5K~\@|XݾAJox)F[tvk`%g3Xqi(}RWAPЪzeU'!Zv^?5rؚsL3 Mgse +[8 P +}Հ1mH<.yTUM@ip(DTןY mcᔪz -N-Ƌ׳d_XMG Aj6 Ta67\͐4{ش\Z8]/.ٹ4乾 ,E;`'ƊpeMGӚ;[8rLma(کd1 lAa9'ɏ +PT)&[yMJbt-ޗaCf@9ID 4hBL%K]0{42xf`lN}ø)X#d. tIOiLIC +VR#Z Xi)"qTǴm"*"eQ G]`fֆ,ʇ戇oO#C +0p0 '1-L@?qz1{ +ZS[AaE;l:8(<ߛ -qLڄ 㦕cq'gf0T?"wj3I, yN(BMSU"%M RRTMhoNt(<:@emb cyt5F8`NͭŏEs +9Jbf\HqnbINi9cL5 +U[A's 2BZ(=jg>Y/{/(15@,wiI䊆1Ͻa%Վ̉8n!+o!UIdBkF5s}euj-n[)1H\ԯ/$I xͲ[4ssh/ z]iSevY#ҺМ *;MZ@LA+7#_8ߠRrOJ+</RZst3dB`H1鲌PL <0OYSU6>H[]"+j^∇Q"AQmHj*BwB|Hq^z5#]մ)nPƎCA݀?F si+cnhQ"?C <8Lg q^3i9^Z si$dS[܈Rzt+tpPB^&4DžΆ.* 1n7^êeaɔa-6kޅ e"F#ظ #~.862n)X>-w>dj*@'JqMA9nnٽ{ft<[Ȱߚߜۇ OV=3:Uڈ#a)c_1By bP ՍBNq>tYxEJ,_Fykj9mT3>>㊊^.+82:]fw+SF{"+={#>z&7J2̼ z,Zodۮ%8Fv)zL)&B#%ΗF}i:Dk@l|ʮ"3ѕ1ҒRd:֍_A.vjTW|ՒYGc ~EY:$ӸN)!_aF=Aїy&Nֈ/PpPtA\zIȥYF(<MobH4J"6|Lϔw|4 p 8d[*)5{Q,q0,S{Zk uK!Iczq4t811Bvs؛D"˚)'휭TDD}%)o:|Җ*F`R )Z,~_ןo[~6HoFI䷃ O EJNJ2䯅T+ T~m(b׳awx3S̀PװY+|Nb>(YMB] Mka'{s>I=aIW''+h!n>FDQOAMl򀥉`GR]T$f:8%<8ѥ*e$hT٩FO>>ccsHm+xI{R 74e]J&2&,`'87PqD zPY4osA*r,iHUn2t@} +5$uVSEVlY"{ݑ@O 'U~$:!W5 +`jM;nϘwLx~eB}!7_, WLz'ڨ+B +9d4@Bڒ +#FJet#3eWZC8fX"(- +e}.cݻR)+rvgb)儥@R 7HMd M9 +@Z1iFjzBvV$.;F_eB&C DHH'!Ug#RSv_}PHFn"sD"0&fr:Pa; ˕|B(ލGJ}$7@2[ۆN.29XꉞګsYmϓzJS!͛_x2幫yrȗvgv'W-(Y[>0 Yze/^pQ4XDUoi7Wᆊǜllؾ~8;^$}ExCa|!7&v >V,[M[t-d&L KfShS$wY];'zbDw{t(နbjf*68;]&Ǥ}3>q Gv]y|hv8*/_Cґ4\`t&Hb0@sBݳaʞB+%}{[|˺~h@Brf4rkH:A FJ'<=@)̴G%$9_GxVQH WF+PNfῪ1QY0-i}JVOYAz?^}V.gD|S+|N jR +te0^ 7xU`uBIQ 錑 ƵwVָO'7 +F5=r F\VsECrt(#勾NTLQGD +JlM!A;B 7Qspt%nuaQp]z;']9c۽@ |EEs+JpV*( u'6B~0J|gꎱ gÎVtݹzYEP}V{Tȕ9+{X`6#B@:0 >CX6fc(6<8vP hvc]꫞Aʸ%zV\Z*tI/X`t)jb>!N_³M".C$$0qsC<,F剩H|UbYBݨ*js'DdŌi]?0t' V$>v8:Z vH[hf}j;\WLed^R-͍E㷈TKךSq?9 >g솞-es$ᶈV04>@17(\$_#3E5o0sW]~g@$.,>ius [q+(Mwܠ7C"1Y%CNơb,|xO/!'TeROgrr*45栤Fl[ʲRإ(~ǻ8nW|9k8uUT9y|6q{K&7 X󛨶gv4 P|QہCRDQ? WmoSسt@Q|"zeP0~L̜r*B~.Cb[_W <_\@V(T|tn 'ӥ&g}Xg 9VɅɽSa(Z[%+55w9%[:캿 W!uAW,.{Wh`9#z[gՇW.7S+p-ڨp#,@nݵMt[Δ%>|*%U,lDʌj$e5R{blu7mӟtn,a,M2,tMȐ{g>1Mho"O,ڸzM7u}gSRb[_s巔g0O &l "&(;8&TPlt!&AHJF|Yt6Rdԫےr~dBǁŔ”AByy$Ҹ$/̖tq+"VjO#3#5Fǔ/nH4*+ﱮ,-+zG}6%J+S^Hy@ +l V5Oa:|Y!-7TG` S:6=!dl$JAsl鉬e0.mVT' X{`J+08F<r_Ц^d2zP75EŽ&2 :_U@Ӝ'ڹ%P>M(ŭ #"3u'[\{ UT +uxܣFceUnTPˆGBb#a-bT9|`{8_~o/cȶ N @Y/;U^@y}%4/gr$\tz֑vOќ b{CΔQ> `JGYhkjYv{G52{}HH:ƃJGGs0 `|K 몜W9ך*ך ENY%~.Hiե\T|1)I܃Ü2Y)<=m>*Q՘|Elb>ND{Rj:8-2b Ҿ]# ؅ToS⣨h)~˼ǔ4=˘Cbĭ8RfZZ58u#4ٯgԱS4^Ό0z +B2 RT=d\)Juߓ6S%ib(O7s-ή0D9Ѣsg4I^  3Sz!tĥ? jl +ٷ:L s/]!sKs V>9_v;0OhD nƫRc!CsKQky3 @+5vOй{g(spAzG&pd =CO{jN@J9ͳM lȻ2]![O5`(pWul* cUyW +[ljmgUN\wf?r V@hKv?XtfΎ8w@vSn(. "%jDUYM3Q>g t!w 3@z6"ۧ%1(^DNʣ/hR"dKGB"k<ϼjg uwgpUQ_ڳ|LIXE]7c0Ue0 j)NE]l2-z:$T啀uXV5x@;;> + G$xAUxl ސpq6jL"1 +"G_G$,JsSYI"IJXZtHwoJ$a+y)17k4$NVv3ŵlF`>ը \VNN9 +TM3|ٮeMV![[')%QGd DM@]g@Bm;3 +$Lr\YnʡҾYn`>xO!嫴YWMu6n +bS(K@ BI+P3@ΒK*bf6xU*8K?B!dأ̗o761>?O}|Ƿ_~k':nOݞ<իOx|_~?~?m(;k~i'_~X=}ۓg㛏_|xo>}w>}߿/ >ޟ|o'-~Nזb&|{)c55 bSH3i)GFې+nD3IJ'rD63!oXNUy3Лک5-qJRԁ^[lRJ @& є}ɇ]6݁;ȧv2I g{RDb˦>aD{UreɕR!~f.Nv.AAqEWU$\ܥk4ۓ +.Vk=J6xKǩd$ѮAo25=!0'DD[ ^t{X* hBVhGz})Es1U!$a9t)w=,;,|Q= rT7~s@[3V%jnPQ\, Pf1-Ş4} f#v-X (UGYi=nXn$j2ݳx*XJ1Qg6ySe){RRA7u7wm@ˈ:RA +CXh+n&m)j`spoIQe{:Uh.wNyᇗ4/𵕀cr"-VX,FRcFB +]%VC6r#v"X喴_' aJnGH,)e^⇚*`nH4Xހdi@t{a:PpYYP\R>f(7WԿO%vT)gI jZDgUGPcii"NQU5lfѵqXško7N\cXDzhi1'. 8B\6XW@ʹA&ώ%XR<P[^Em}x Ғ#&~UT_}=厩n"ȡ6!S{¸.K͐nFzX`1ȑ^)n]T8 vA>O[BPl62^,oo$[oƙfC]3+tckB4R d {D\f zz*[%,E3IQױlFQ8hV&AEEOX2 +'¯lCC t"4v0FZܒ7#7^?.fI+$^G%[!UMgdR+/!U*;*qeU}0{Z5]h-GBIedGQ"wC %[A6[jHcgM]Kkݪh+5&\d9.5gqxX2fnV6CdPzDwo4~}U +Cb#Ch`9-UH& +)^>k/Dbt5ÃVўkA8S?ݰrv$^wƼPsWy%tWv鋳_48 +[N:ibU)2Av=[.x>nj)Ep!k̲Y"!#wڻ#4p49\-ElݞϷq{}n9pU;zoX@J|pwJPnpڡ*ͣsRD~HjgQҌt")b5E/Pe*(6N ,W8.P<=VBޕ57^[Ӗ4z+:X(tLxuf%? "sCimOM=xOy!!ZxoxWǰlyb.3t+Bх.fﰴ:Ӫ2XmE( pҎPZp,R[wG$f;t@Sycy~AKzT]yB5rn5VZ/hj]22 bfTBMQË룫&.!ςzd3>\d`2d 0T+Jف,z㚐d?ˢEqK!+}xVےj6PKZe)% 4TEk[)O%Ҁt X>#Z +ntfQx =PU=IQB*Qrom;56B~1ib8Px=? q[ +: (2e p]<@$58 +ȜǺ~?*1?PrI2= ~^(9EPlv0B\hPe_a.t_lCnΨo^c%ZF*!!x\Ty9Jfm۲D({оn~\&r nqVW#` 0BE endstream endobj 28 0 obj <>stream +HWX ûHE)JJOI- + X N)PoIaW(j8ڌ;mz}qnY3g^ӟnuv6ek'y~ǎ}g9|Yֺmq|sm{#Nn{[׷:-W{cy!mW~alc/?v㍯vϿ~{vÞ 7p6u.^|,9VY|XСϱ.q͔NAB[;9ޏ'Q7=dei&-}cHɔ53.W s-}#:]-p[> +3Yw݃{w L{=bK`mqO# hj^cW xb`hmղ՗ ˻ sGWfm-ٱ Un8:ѹ. 'PMD$L_Od)LvV_vG{ܝ0 aR]5 EcPɲNK:yA˽3^=ߔֱW=d,1gy$ aD5?[Flny|܇Rgx/&!M|P-8.l.<>ΙUݽӭ<']ApVhc8877˖0_廧Rܠ +2jfFQUmYǦ.QFc Xܳ҄VAna~ZRإ%6 ;"zQ!beTo\WTMTTmGd{߬<ԳnDKR2AP DFl|xMFkՐaOw_R)q,"\_c2%b o%g +T$YAL6^1Occh$ŀ0Q AS؆dk : L`<1H87$gЄrH0ZŚ!xU0QFMhH5 +*'Y5((ܬ)H4P t\b*z;sn,ǖ#E`AD!jo$ )1db:n+Ѓo7Q? gu-"6mx +qC1={9G-4H@'F$maݰnA͋ I_DĎ$N-w - o}A<i R7{9+DbfNFk߫Kwey Fy֛cH݅me݄ @*.d E-=cdE;W4*H}LYR-5% <IԑhCZXz,%Ll `W)E J ?N >bpMvއTx8]nhU)L5Z'HNyh!t潕G9&KC=:Fr98oΚ ǧFh*=>[tG+} `+@%) +> =6vu~42jrGp$?~ʗڅ+{`$ Koꕶ: j9D| 2NYށ`[6䈡ƣ3L͎7P +PܨnEd.16Io|^ߙ>s^o}y+~/P5 Z7TB[U,^~(LCmjP> yԴa3U`&: :i]!#8BjID] +aj1>(;Y2~hN79U'bG]8?I. \8haɋ8Kд("HXl7$EюGT-;3MPX9%auٖuՌ^Bo!#+!FuTos`XL1je 4٫J!Sr\YyA+pA"Qnܨ\i(y^iQRdY/O,Zt᬴]Jt)͠B +~9s#_0h+OedF޸<􀈏-qkLhjtRabjɼ^h @H(F0FHXA VQqL!0FD ]6*3j:NDeP!tJωs%(LBz{p#T ]֎@ߗ ۍ)}˲]3@rX#P כj?CLki2CL5xP$qf~AweO1k6+!|(p2B`C,q)Qc,F|9:F;8$L7$yUl8uJh0˂ |0F\½Y8H#_y N;)i! +)tm3RC6j&dѾ} -"Zwb_}aGӟbnόIDgDU#~]*^ϰ;4ƧOXpVo +MD+x9kF5-'A+ި}g=Hm: (E3H1W<0Bg'^}vM|/|:4tMc`Y"al7t+g4MDPnSt G8Tq:s$Vq$lBSEE2VjV@~M!"䑶}.>.J)K B{™Z} +7M75\swђ N'bJ@,BJ,4ZY2%d}L5AGb%FI"0SNte㭣U. JV'l'u胅It0cIXQ7k]$v|JEcT*B}е Q7_QT˛ ;N ˪}{͒E`ce;, VF i.x±uVjh}`atGP!b3i@j("؃H`!XFu!BD ʑŽ%uz#\1ՂɢU^` [2h3!A}5~-%W&Z" +Ay[0x<.n R\~';̇MRF-p $!{`Ҷ'9.tgʆTu^D#@\289,0$ }@Z˯C+T7hjq<|N/Wiy,뱹W>~~ßO_ +<|Ͼ?qOНA0JO94Hʊйx嗃Q(6w859Ce,gxNNDX6 ;?~BUClS }#ɸ&FZ|j*u$9 f&±}.DO~?xDngKS\I&,Ap%b֬:6|m &M/Zx Ld1؀HZb#$ }1PI]p=)b_ݧlfRwDa8LМb2Bx>́NN _SH*PŌJvZ\  :PUZRTm;3C}bV@p0iu>Hw;O "4J>A w5o\!={ntV>bE/\w9J3`G<9#fG n= UӶQ~N4Z!^Ã1ѠۛHgRr+m`̵ #iZ-zP+n|ҍVbˆWvR]>'eݷ)7j&߀͙+\\$F+ؕ\%*HuLEi6t*3kFM*Fpޝ"hfo%ܞ1+}XD?m@!r@`nW@zFƪ#V@IWIA&#4gz'6.4ȇ^3委gj6e4p4ܮ$":(,lrhM`ֹ'|㎗5USea`}ݴ̑Z m0G*: + >rmy^,&q҃KLkeC^Ad:93z 嗩+94"J@k*_?8i2%cޡ}޶1#~y*_NibX/^" s_3 B@DɲYGʿYkoK;Y]]u "u(9K'=C`dÒ:V EJ$n۹El?4+ǘ "p~k׉Ҷ-:'Z( Ee/{a}Um:P!Js lH*%+ i2'Ѵ2UE0GL",,)0\;.R]Q65F=k۾ 1f @ p=M9-5AQ,[W~*_"p(@Z{Xf$$5ĐH/jT`º;3J|+vDuvHF$\Ň:QIVNQͻfh#L쭾A8R*OR-ngu4Yo!Oi``Ki%m +r_y;-3GCT'TWs?NS'8A)2q4GÈi' }6ShDC=1$fTFXVer1YtDjY@@^׹#`I%#Iq^7 y#prV+'pF؅0ʷږ 2+α#%Fߚ+nl|@i:ڣD7W]ciQ Ao2H%esfH-˴qU=Tԓ/)h[7JIYBP%q"?o)/ؾ 1`ԩp +aZ79F뺫'q"D:fK+Z9)cm1`MWaYT=OTmXw$"r4CRn]E: +`P/!o$:x&i]"HRXʔ);#r|qhU+Tmr[^׹ +6IFe8{rj~`Q-\Ӭ7CjIHn3֕Lē%ҼS BIH@4a&mm4YƜ%۳e SiE YGtpRVCy.tBC-{A)>e_7igxPcr3ϩұ %õ$n t F{ 4;9x}"Umɥ|,>k{ ʁ)&ǣyA*>t.,M1.&_wRSmJ?EzS/Ayy i[$_NV)tM~XkoRhe&[خE' uQ9õ3X,@E$go}oě>jQ! lCđ֬q-[/,}T/038$%آ^}]m&sbiawpӉbllX:IXa05;Ԥƒ9Ddf[HP?w/dsq17.:ܺNA}ya?3o:M5pEF0/tiOS薖Mp*Ll5 foq2[b\Ni10DEnuG ~Fw?G]"]9`@Y<LEmlc$؟ YĻQ3gaQ!B|3|+: 8hp]v@ +WobڀbJ~ݪf``ҪѠ0Y=> [im5)/A^c#'ɲunm?דo&BygK*5CMU^.3{Mns5o@BFq魄B3 !t#Cy^F{_1.uEC# az Zẝ=TiH; EmzOV~(婺48Da*>Q1aT|p):2p/F8 +jdL|3ܲdTͨ2W94ngȮqI?W6ɕĊJy/&;~.*˱0ALҚoVX|ikw_ob +~f̛*r(HȐ7g /12w;4b1c2$!yCV\++4 DCa;^ހQU=zpPݰYad>dAT#sW`?Bb pÞ8a2!qJok zt?AvFX"djD +]̺dsyT!# !E!YyH̥ц!d'/H~QWT=[ V퓶[}%lU2sm T4U)vg]mL=K &(n|1Zn_iQk7 yT!nuM2R*AM[$ԋN`Q ?8 B6e)-]1ZŰtvƹsv>(X͂Ԇ0 gRdg>e?%σfqҀlNL]焘1_[ d>!Jxe}9a!~"-n+Ѽ^6fNur^oٴxκoc%I7HtE"!PJA]+y9y*Muᛰ7(RqFY[8+W| w^Q Pk}Hll)"-r): + 3{l1!3(8_Q4}!pПZ*6Lo82E]$*23N|5DC@ c_Ta?_mʆ 6!H܊p#kBOU%ROdQ&+$MDehPsErd{.^BxQ!hK/gT@uz-dLk<¦!ki&c|oɊ)e +oщҋ "QЩ^h*qAΉ)/pl; erUli]z1">E5- +R9NE&Ns)@@'^㚢s ]L)dAsj;v]ȐMSoc&cL|Q\PJi|^%RWe%' qM;lTZ(I zadǝQZHv"U_10b`rnI|4ڋh<{JBۋ%z|f^7* +ߛ?ٶ+K=]⾊PlDW4J, e>e1Ȓ^1R^EYJExA]D~g S,F짔ؐ/~ۈ)y`?5JTK4Du;@qsrE;S$[^2HEX&YJX:[*T*0Y<I =ǭ!BAɃuOr 7krG7&&@/ +~!q[Bc\v*(*gQR}KF QLRd$>[Sl|ݗu'$Ch\별6u?xHW+i`>_t} +d9Ө],e*Ҡmfv8( 5Qlɽ(lٙE9*r;VONd3šGlQ< .RPN$gJ|z':i~aS«4JfݻMXgS-.uMD$~i5}@ͼ?zzZ:Cy]~(o x0C +R爗]rʳU:8@$RNb:DVQېc-ȉ:NHwr%YBdntG)(ElKJТg3JMrf@ĝ537bNGZQ|!EUaOzۘ $J)`q?)3N#2SLbǠ5d!יon+,tJ$O~Gíq)ip>a`^$}W#Bh]2#-&vz0iYȜH9^cL{ U')*<jSOv8bQuUhZeJ [4%`ST6R?O?}᷷oj|lk_}|~c|FS.If"[Kp ~QX"vZ |/%9Dވ\"~̈́P#aӀc#wD{mYy'}ڱsW!Md]#UՒA멉|wjbћ5Jijo>JMʙU,* +ΠM(ٻI}-c+?왎dΕ:vP hM25__O<8ZA+'22G7`A5>3Ys2 unH;}5Oj1e WF +3Ba,0"vN:=nN7TdcC%9-wAJ +{rRj qc{KKC|'LMRJH0}6.0G]b0tl}T !" 9c]. +8 t<-,B9P|23?xFmZ3EܝEM?7/*lsg]TS,M|GۡսI1a^A1g q?|buA3fvymv`c}]HDt-%LƈY깩=:)WH}JzgK`B`V]YFy '߬VR|F&]B +klR.o70 * 0O~nƒfLz䆈II}9XٚLlm6WQʍ"ĵE)'MOru[$o\' Jf֣SxPyR6J3n*CUt C UJjuBu(!!ŝᰩU;骊tuO:d5kK{U@/~q ׀.v瓑5u"ۃyЧ'HEz ݫ6r']9Ft}NAHJp lx.d:6%Ylam`ՉBɉ>=rffү} S9sP]PF9sd0=82?QڏWd3ݒ0 w{\;gjf'dݛ%F]_m`XS5C[=IE-O,܉(_'N:K3ݔO +NQɹJk5'֔)J7GBγ*ZJgS=L]u1Y;i0 &TrWVH'ex{Jg GiOK|O }Yҍ07E:O6k/SNXHU` +#uə/E̜9zzO SvSXųBtlZZ/m\Jtf@³>[z`޾DXN|ToAZ7ĵȆnCJA6.ꮨs獛$/ٜ֗ RԤ/w"reUg i~jLtje1>({D{8['ejbezzymtHגg?ϙlõN:15Q$91T`sک`f\E CiD]aD~5ёQ6{%"I7bZ[9!e1nBHtSK6 +rP]E;(rz OP/R t1bK<k晡 2'2u! >vdOޑHjDD+I!M$KGũtlQ5=l,*KAyr6ێ\1ɭǛ.J䃣O&0[N$d]H`3˲}h$taFzQ\QUPbF`"%Cd dE2xo'b`sw.fcr@LcS 1Ae.\uǣ;6I䤅U1|֧xB6EU͑eb 3;Q+ H08|pSXyHB3x霞(1pzjU_3;7rA 3!L=&{pE3㉗*n]p)НF<0\ !F +[ԢZMEef,%5I߉ +cݨ`ga/VcpբjBeSB64 Ru )0"lF }aq&_I'YKW 2G |˻cg-j9w#6j lE|("t~ +;Cht$KcϖNBrLy IJ +"}Ӹ䪛9$Ne`;q7 uK_igQ<̳"^yޘR@228ZSͣLEcQF*i'@kggE d(@zY-xGUAX1^>:ͯ hCErqީzzh9j6Bªx'!jzipStk;ߕdiN9EY^,Rc'ZNG/US p)L@c m;qB $ND!Ie?;U['ӳ㒤ZΔ%] Crh$!:A$cVO\_9?v{/̿A}YGQiTPZW6f5Nu +QtX][&a̳SRq\@?[tZEqqVVu*.Cmpn{WZmJs:oK|e7v+n-8ipR-\xBA +Ƽۄ>]|<)@Ȩ b|vH TN6G-%$nb6bEz=^g7"66p 1=JdX`"7`ߍaA^=udN$yg9<߉&ӿh4 p'H}8S71krmB3iL`p=u>6LC{էMhޤpx4BǯU %i=.G@t4d+yZTq"攸В&Lr&e[LtRZ]'q"[ԥ*/w4 7d?@LT` Z&ܣ+}uT +FP՝3-8|ۏ~Mg)˗?|_o޾~_E+?>Ӄ~a^߿s>wOfK,(By6>0%TKћ OfKкpsBuu@5kf1i-/J}̶o|)OhwoPnX ɜ|b +# /"^7}`2V1(2}e0$]]i3bjΰ"ᷝ5HA[lTD;eݽOERԪ+訋64ž}tҶb@s$.uyz,nTRǴFVx Ϸ@-Vm8Nt[ /sŠ0l|'c0 ;2##o2~5`yX=VM7 +q]"xl%\Wq2v_년OٟcaG2:!Ayĕ+ǺY +Gd?A0bQ$p|kt`F /U$sYrey=KPntݽNTXX(3юS9bcΨ2?KmDmȏi%MSi<[u"\q9NwP'Ј+G#B""l^3A4[$c3a tW|AU F>deE{o>cAt;PO[lѳ^mHѪ3 -H@D[ΙF>OV4x%,%وLҗNh IsVT$bLByX QG#qBb*޹J 4;m썌C$ mxn=Gg+T>AtrMj*?I[OL|xס7C.N<*Bϕ5QkJd>38G+9J/< n..H"FJeشsEVѽ!w#Vs&v!Y +ď* ѿؙ(T<ks R&ӕ詣|g"괚B֧\9u[0sj$J | D%;tš6Ppw6&`إ_;ozƕy8zS:nϡiqV9-P.ܟgr*j٥y ?rih]kP;,gRIJ{y@P";{98I c]-+7;w锑]Iz.4a7R/ +?%ezzjݝS{ܐ_e-jE$P +0]ܓ/嶣QDW/vpe;EE+˲dA<G޿!+{jMYBlA 6.ҮsQO|e?¤ Y'd$<_J-dǒ"oe X,$"=Էڨr,86/H*"[gڕa >LOw#e+؄rهyiI1d{"Jc4+⤲#RL! 6SgΖbCS2-ER!YoC.vY@ LmIcAˠxXtHWƅf`q |\@x^qIz)[챍$Fv $Gn|׊sobwc*Gm$D0U`rUQV#\0@ $LAɑUhe!ŗ6 i_E@V,{11L @MiXn=!']hW:qN5seKw [IZ;ғV+ -40 R +1?B3s1 TfIHi;e%4wR˜;\hF-揞&B9U1 dD.I,0=-J j<R*}h<`Sb޺#X33K8j\w#{l0*RkiaImPQjϓxZRHBhZi+2!u\s $Kgm";1QV҄1(+2KLCuΙ+NqHTtю/΂p f]y;5IT̥C+HOM"d l^Oįb22eS.621ScBa~}\Cz #>'#W:ל+`C2wIzGB !ոx\hqزnH þ'ۙi7aa2>nU1824/jJFF;Uս⺒ͩmy:ePs1Rll۸֮1 a0Z(^)mHQhE{kGZY7 q@F/d-=wj(;z2`AGXNEh6CY S +VB碫҈/v4 >U)rO;y-TlRr4_ wQ3&Z_ v75U%Bᛲؽ!\P4&(I0EfT%YbA>q2qҭ(`i/0MYԾgq(6hY-صTYoHVx'C`n;lEU,eh=F߳f4=ّvATe)  / M!A"B2`*+3 t[!'K^T)e "$C D˫]6ucIZHvx:G3S}X>Oǡk\P)RF-`Ut[me#q7 41;Q(¼?.&.ݚkc +\%"RekdMzGÒUsGxtJCŸqr3dk+1!lk@kAi&GVt(,\}M1({M6TBD9 =fGzS-lvk:{[Vyr_>$ +#vGكrBI=Ԛ?y_c͘yީcؗ]=PE#CV8 sa2"-!ˏ +rQ`&W&XO+NWLT,dޑ眍Fl=)aM.+ 4{\Jn"U.XJ:Oݛ!/5Icv\qv7ڙ7lW4 %b`T6᱋Pg#Qc ̊M!aem_ƅ*U9}ǚfޣjW +}) w5MO#Wl̩ٔxˏb=-#?Ϟz^['h8L_ݞ}ߞx͛?}Zc{pS8r-nOX={ۓO^}Wzëy߿}O?}Ʒ>{+bsvgӳcC@f<BP뙃 +ͺ!xiHO5Su7ㄏ)Ji \+H#FZ>BQ A ]oc!iy|¯l75ťs/gb69ϋܤXvHѻITҝ;TeEAP13PI|^Gh Ɉ._A\nJסKZ; +jB"6N5tCz nm!TD(9J5s495E>ߙcECfEˍC/qAmkAG(_*Y^4Sb3hqsqv" +QL{&hTh'| K!I2Pza&?y92j_ygy& 78Fo>5oR@S,QkmT˼HF68S̠D3yܿAe9" A7uS^+cucD@FigX4Nh;Gy }??BM$YhC +,mGbZ3e;%S/%>kq*5PZ(Rփ*qM +f1\T°(|ο.s#Kn 0p򪴟6?@C؁+LU(yTӳʯ =祇˅mܞ6V6g:U +唾ZDwg*-aN>c*,*08 `W=zsTءY"ZExxv+%1sfFNu۷UM.tQ\FJb +wMrr\ދg%x3.H4WDxN{;5MmNLgT9*=g︆rdtNҮ20i}څhX[,70e :vu'(ϸ9"&͊ z.6Ђ遫kZ i"aa6?$ĩUX_$V˝yQ2Hlmᯋܫ;Nv`DP*c-sh .Bⶅzzf5KbҾj 5ZEYLgY 4NͿjHvkX~8t$"ʜ74DZv Z'ZcEw܎Aę9EUX9Cvآ-đu[*0AZ~"e=oᴎ/:Dn='w^;e/J˖".khW@|ęa \}GD{ !$6c dހFn6)_6&m@Vf3lxٌ^ăh=zpP}f5Dx¢2 JFMpBz GZ~h pÞ8d qJokͶpF܏ŽI|팲":x^T%P}+gMIluER3J,]QA2F59>p`~H; +zd*G_ğG'k-2S ?hAe"{ӡlbDzL\US9P(mM[k+7`b=H /XD/_zzu +& -NUhfC[d#]]D+ܙuasSō.@E#ֈp.ܚ{UZAD%cf dqGF1ygfkm;. 8d.ǼdHs`mbCBh+zs9;N+MSɃȈEREC$=Jd6OBD2]}PQ zQY /6q+3?Qq~KL%j<B;B kh:ڧd7LS~ +oщ ^wE^T>ڌs?c3LfI}A"bBH5;,E^tʜSvg٭JP,Y(\9S^3ӝC2]4gs؄r)^(k ыx_17/P=\t*w`$rjAʑ?betyM12'V#EWu;NMZT^Zs7yP$5"#(lەQc}*wS )Dv3(DW4n%a-2 Xb3.-MKC_}^Ac~\vD~wLߟQzvZYK0F)iC?PǤ,'ƍ͛SjTP7ƒH@THeX/M# +J/M/ +'e^Xx{DFlu*32\TvSPxo7JA"=:VzSG\ڀ^iHbw6PUP\$,{c͒"E! 2EͿ#~ +/߫w* mHD׭8J\犕(XI^]7^Le +r#U߰G*'Ϙ|H;V/~~71[5/IKD>ͨdE=h ҡe#OBp}m]a`PyUDQ+#ZN( +ibx_+;j )d8.hG,65,eB2ou)d&ܥ-v6`.m"qWb+\d'KWNnPx'׼Q&{zgXcw߲k.t g *2͕j3.^ ΐ `w,j˵MTNXl8?ޟ^@ XAh KsjKmCVm4F'8!%YBd]Q> + +&-•F=qR@ޱjBĝY s+To*I"UO-焓Hy*e2ڌd 7Ԯ;H.=AY]26hhG@?/DmOM +k3$_w?}}5*o_O߷Ͼˏ?~g??$IFkOioML6l^~Q\TmQ}Bw HA _+aT\-mw(ʼnNijEzNNƱ>!MJW#UՒ4 T4_o }  Ģ;I7##k][[.tV7;VFvYYy9oݛ Qwa.?_02ӞJ)Kƨw~?AA-U(r"#+ǮUZTbYfsCkNC52x!8IsY.IA05%#f}+ ))EjYO6)}BTZtZ<'FzE$@9ˡTW%o J0`7|:Hĵ}:WѬ.9oiX7mSS! W-%Hp՛\ES\!&j ,'*GcA +S/߁OFቼZBx:+M-oRJO(;zZxZDC^(z#ѹ@:@,~)*>L*d#v!-*U@NBΤ-=sV6VNN +if֫ɵx;BVŇʓzN#R-Q2Cq_ ^+[> U_&:<̓Pp!!ᰉ+Fj޾COԟi)ujצB6+Z!}ie䤰}c2eԙ=8RSs)t`;`>8 :g#jz i6x. d:6n[!Ai-xPvQf s_ 하,l&Ǝ2?')%gtVd3ݒH.kV^0\w|Qdj&s_^WU5DwPFn;g:&/"؂Fd4djP$mnk'NvbQx[#>Sklš3h$HyUtsa)j8{cl2Piu:&20Rke9-^g#Y)8lb>|'lUe b.˶0]7 +,^YMU/#T`ӀP*NY8r .k&+WCQPނ}2+1Ȯ )V#F g _*epau!@# d# 7L=O+3 Y.L' r% +zNߍϻ A=FVtbk!< z \÷U]GZ S%DGFF7ըdSOU;ǰ_.E@A +j([m]# Ip xL5sEN#$Ǯt''Dh%Ɍ1]&W0ȇ#Hu?-@{]O(Y9^l$<2}lO6N9(=;+W*k|zLFߙr,\ z*!1Ghr3hr| IeŒa=NZO"\IgT~.]rMsA/p$NgB'r9ds}/:*,J,// -Ev ! 9/yˡIiz7Dh|6L.3k)J7< +O|аuNҭ]]p{Km!cE+c&wJEɲ='n6M,"UM*LLp5'{f?+M8NS}ݯk~!UI=7*B7r$ ov[_~8dݸ2GTm^z7b{һfW43j@zSl!9@9Zu%u'Xs'Q"| 1'׮(F9 e=_M\nG` k:вa-BSp?
    =Wvn;Q5obBJă;uZe/'T=DZݳI~)GY0rϏ'FE':Mv;Ūz`F6bZ." _ʝJ|ѵ(^J2 Cyj2}k[H>.oS{*NE9N] oqX[1W CovƗCx @ +X +(k߆SܩO +"V>stream +HWʜ||9%W#A6wU̷+ !BүЇ͸bT{>/z)Q_M{ӟc^k t\e(Z6uLկa?Z@2f@z_kβt>~w?5}ٗû~||7_}~=~+V/L<_}ۿW~U[VoxA5\B m8'Qሆ٨ +]ް,l.ZZQ=j"sʼ-ÍAE}4kM5-Hd]{g(I |am5ְ˯0fxC$;*_ͣJeQcho1!^u +icpvO}$!dG)+75kQ*f\Lnu;/u+}d`W'PQqıxps5G6% \avhҺ AHC ot:nZP'D $2[ak`djpUu]uz\ʤOeB U$横q>U"ߟhxUz IZ_OqnuE0xeFFcȁ^QY 0Ar~:tUs].d)bO ZY!2%A( @htgnD0шW_cyIMN۬9k[Y, ͎$Tz:\^h=۱`@euXYl 6d tմdBUҲ! D2Dxi*L[I7P/_h@ʫ+&>[%c@yϑ; 6GlhLQ]I@h-#rN < Ĺ,,A$WN'mĎs(+RF%Q;(ĦuJ:"."h5zIY@D^ i3۲eʂI 0jU)?TkӡhQKr]cx 95ɑ7COВAP NBJb׻ިoYYJa t陪L}s:&%8A1Fih>ID) Ċ$Q]$ ;Q֏k+5AW#X O2x=%I?$eTNkYL]ٔ_Q 3V!euj~UX WĢ%2[6)DYFu, h; RHϠ#"11IF|UYp8A827L0wKk`39GvE[`v)Q  TY +K;ٜl1A]ysv\(p1 X5,cU7 unmt/C] Z,)jZX8>.Ra]`iImYПD@!=_K.cߚdtﬗˎ^G_:) B@3, Lo֮s3^SE}/jObqcB%Qd OtEdzTt; DH(.«"JL aaFOfI[xz!NPt%p=A +RcM|ŕrЀT-[Pߧo$#5V +@5y Af7Vp }:ڞ)Nw=^T9`r#qzx2`Loe-ɼ)d:;r0_97jӍ@ݾd_Fqa(5NWn+c}h[uϼP5(j5? j%]t礁A1 "eD2Gi[읛e-W_4ث`ļgcwHwD 6vybA+L7PƲ`㿐l}7k8f۾IU1AFFX;΢aCdȋ[G j#^zd+>Χ?KYٌ4Wm# i$*ԂlLC%q%&zߚ $Rq? +Bw|k79խ&22A89XTe:2+pp2kJH$ͱ9ؔR~/d*u_ƅBC}P=_Ӫ:团W)2@Ճ4bqǯ߽}|Ϸ_ z+x:U=w~{勷o? cR#?O߫ρ^}W˷/y{?y|?yW?~~~w>kO瓿#I?GltM=<}@STP f`tA|)8:ԟ_ܐR!^zxϥM=u/ࡧz#j(aYYn00۟7$ia|F,Z 6xD!E;nW1zwYHRmSM` Oo9+o=J8ƩT]upJ2]pOo<9y%2kt*&^i| 1ۿ$0czT4n6ا`s茈#PP  dZ)x>;UpE~tSGT';u"?A$9FJ&[x+iфp]6~ƒemn< +\>&3KaDAgWk:XQG9(#f8gʦp(P!T#5X}B1sӓw(PM*R:,+RI6b2;ilY=O\(gp8iܻ7jiԏB\c7c~N!x^~_O]Wti^b)}і삟@f#eнehG ';&'NYh~JNtҩ5OC3ݤi+ow!HI[tsXغ/ +w 9a2/aԒƦjj W9)IYܖdc9.H"<RNKLE5N>rF+3A"@CD2-$jE,\3b)yKMq +HMV:[ūYE| 捿 L-ri*AEU(tZ0PLLHFH@~ Hvy}B ԡ9CG^Ƚ;!:BaEFXGy"uaUʝpؓm\+/cWz,k_Jæ)%J,A~Zu.g.M$^mK̊>^[7#ǰ?˴*7%bM.TjS9N#QI6} +[)65$ap@Lk1MYu9FI JTT^T/kJ*31 =uCZWvJ댷@P뤌-+^vCneoUCsY*qcz`b`Tߘ<'bhmm]h(UhWP H+.pjb5q$J.- X!9\u-U :e_R%qϲ1Q(~ч+$zegkq&}ꡲ*q 2\wgBZwf9ehVZ\16E'BrДlo86u:N).(\Q.az['<^@q9H U=%Y|؉~;Ls`Eș'yO*mx "* +8Uo X4m.*=(P?q5y"!=OG9 tʭ#.2%f R[=f6|g8_cc 3FY; .s1X枋)/>TmeXKM5M+YE˜$/21қ= u>q'h'_%_'%լ맜 +3]Tbܘw_g3SU%J +&3u'36qA$[DǮJސs*mFKTqkUթtu $ ׃ʍn{W::Z"1`Ujat()v{!O5kڬ-5p5hsTmx\#=p!7D1 2p[ '_Ţgf +VE[x_͐_H;tFeg}&\ %vэ׏*,Q;oJaLZK{ZԭOdX*ҭ*f{Iob&&u*){aRuitK?6¯`WH^=QЗi vLy"xP2*u@<5.= +˨c_FEvY)gbg$S1O`7>,GyZM$^bYJc aX40DT{Fc)q5fTǼV.LLʣ,/7*lMr2%سѲj{KqaYe~. +j_Lǿ=n}Q!ײ } &8!S *"Jd"*k0OM7D&?3Y|[*OkvA %㛽OZcv!>/?>b?TR(IJU$$%cJJl(D)J+,=*@l=sxSPil<D2f&h<3o[{sO}c.=lAED>9%,zw.]oʸDw/:fΌW&>ݺ|DTKu2KN_2QYw~Ks;d  ]K*?Տ_=ʆvν G`&p~׃@ ]##D3 `EUI y.-&A(* PڦVkhe 4'Dj`|˯~>ݏ?|oٟdu|?~_/ǟeȿÑ-enU?l&:mJ/TGW\c1 ;P5eH݈ml$[t(d:,6="U*+#Ttg\&I:`?AH @[%;7 D2++k^7:vHzf7 U5" Z4 ռ#Ү,h Up +VMyqGJc\{d7Y c?X/n\r:׉bk;zhv>[,AH`,I\ޣ7;g"l|!; +7? ժAJ,așaZE!Y )B:hwp8Sq/t?L%?X5O p_>{4KtlG)~Ikm09Ė1) 1HK:PY!r 2Nj5+5u[ɐWD4G%ʇxxQSRƷM{Z+2cs"]>tnC%6E=T.\ҽPmL&/]%&$ +_"uǍ\9U)W{k=`;IVH7WK@v?z*# 1{jm)O։Dima+khߣrDtH#;"Tn̑# 斷rу]6#'"g 7P +Y{/w"kT?@M#J)[׮#{VYn ^̎oٹ"#hCE{!*"  Ee3}uG +%E&CJ (9GZG9/,(L}B +0`VӋ(^O"-L~k +F@衵A@όOXbln'S'WT_x8k"eh_Q(ÔĆ>ad^vA W]p>8"QH!SG0F˜ +aMgQ!dќGp%"nwL3iny(N+}m!w*bJj^%OP@XIhXV%ckPΤ2|(ⓒJu-u@=Q31=2-, :2esJ_:79?q'[~H1nPbяINIi3ߥNp!sT&ӕLHyT=W?P_Qa V^Jf<]8Dgux4HXgZ.U7} T>"t0+GwKz*l00WjqhTgܒQhg3nT~cl\כJZ] 5-VJq#ك^A{,˦u +ۍ5/w&>?Ъ5͙&3/O MlSStg%BDأ,c9 zE_JwOi==o){dTGGi8Iq[K݆M"alݕeq#hýlh5"EiϕC +KR 5!ݓ]"cp:;~2zR E:nZWRU'E7 ;N *oc +SE m""kc2r9ZQ<:_o`PɊ2U`N9 d/tq]|( `de=Fv\=a,>(G(~΄H7QV +VDc]DdSjkhZeᑔ86%G,2@rf lhqfj)qY0̈~LOjڀUg4[_.`VGg|,2dJ,o{yFh!=]4 ۢ𭽱N@HotQ^Kr\"7ڣ e$ \h(947T[5)-YCN5elD3ƹCN )]Y/]Ɏ*J m8'Fv @HL+amն'VSu -f|HSϨ"gObbgQ/au +ZM!?0μ_f6ByG@#rP2E;SIɽ|>>q_Ҏ?}{~FU/_HϿy )|ACF Lvx7Lly&}dpCE VsO^hY8DF"ƌˈ̴S[%ȰCY'SF*}8 HLYr%vE& K'ƿ τrA^ "!!t@s96ƙ(cEJTfGű-hŅs7=կ4鴴l]{2^I=<|R Pw S\v-JN<=jXF#vVBE`Zn=%6 NL%fʮ?/Y=Q@{H7ZE 6TvE!%H Gu^\d9ȻQ1zj罦#9M> p䨱IMȲDI'^tsm 6S.HUMM6Paj} a~ c2Vq gʜ9ƕ}p +d?/PõYsƌ蠅ưOM30Lp IO +ڋ_+(y;$@cYP,- qd6!q +r4)۠`a$d6+#cs+PtRߧwϴw1 ^QػUHfPZR@@@%r퀦"a2p~_^ȩtAb]+E"7TmĚfeDB `X@i1QφVğ ;II#w&rFBeꕟ(*9,Bفǹ@\ u)/!N!{8?4_ÑP+)ցUH`=M:JuD7;G>abvm?*o`v-(W4>eI0P8Ԡ7ʓ3ٳ݂ũXIO5*Y3L +3SYZioon&LR>O55A PWUݺDdwN[/D\vd\/@!/<"F E67;*uK)mx<ǂ mO!E2]-T&%CO)4 +.@ +(; ]/%77p Ypn_{u㵚.zD *?54f$0Z8gH; &Z'fRkvcu\mTeaP E#)-Z" + +q+X-L50PӀߎ +iRX<t3vbW58]k6hĎ5oj~c߀:=.ߡ"HB٠J(]{WlFo`/p>$(lY.L/.$ι ۔51ghƆ@ޣRb| Ί^2{6W@p3stN0OWOc-Y@mPtEJhzEcQr{7Qm~?ۧw|5Ћ_+ ?}o/>Ï<=Ondo/׷Ŏo/>}Y}?n/>O߼ë^~/~x>Ӈb>7?ylu+~3uVǍP!0R +i'됒h<d="CHi@kdq:!Fh$Qf!_Z.?ˌQMB-V yT +j@]$_)J6K#`t UR&WJ-vhRGycfJ4=xtl%Λבv#sd!021b̴1iHREl0`֎I4vQT x5UH>2*() Ձm`Ff6)4GPKȚy"mR)TGMLCWâf9s%;lu>zC]E|!"i4X$uSNy\*ظL`c0;A%J陕;}Q4 +z\^O!>3{ +qf ɣK5j |`N;F؜4+I5sk'k!/e#Imѡ/L~vlYScjty +ft >ۈHa@ޥ\572ed!2gr M)mTlIjC nrдnwz̼IbIr&壬=Sy aDZ[xE >Vܕx&Ϋ98I 43/#Z-n'Y6K{ BH w!\#l 5B.WǑX7zf+=g\H=yrik#ډQ!)N3SFq! t;I@erUhd0Ku"m ЖDe1:øZvȄAF]="R>b헀,Y8g"QhzU=sGd[U}c\*z FѳDv }$Ag¢`AH6s?A5PЈRh/Q0(_c D]gļﵔ1G@0%$v4,mݑIljqGhrϼPľ@ +V!Vxb6)8-6; ]yUb%J;,{޴myXr&m zvj!k; Eu"Иpr8) +6.ȿ>b7r[qEW%iyiH"$PAoYtx8֮5縤c >dAB˰{wcHxm!fk d'ڸ|jPm@ (lP/Z,=zhnGYr12OQ5 AT#sWZ~([aob2[Ǹ=T3]Y.ez޻?W7GSsBykXZyFuEGsN0OjAiqDVrQoyPTB[2թ!4prO \tX P95FvJ&5C5ѫ܀"-aut_m/әJTx& -NUXϔƎݗLX}f+v}SezkaU !Ql&^QںePA] TNix`K(ad;]2mwj3vz@, 2vf̎2+r]͒>jD MݮSsX m`۔L4.,MFe߃\ŧg(gf5+DLy#pae3Ƴ b.)ù惊ED'/BXxiَ[]~9P[dl3(d0?:u؉1mY/J]qU|Xqf EE\|w8̽ޖ ;/ RK[SPNE8-:QV"Oo4oRugw6WfB=@VρtdAc59$uMsVI=~sn_0^{v+rٱ_ ‹\ 7_G2دDi}ARMIR}2ǻ5wc`IF2bdO GΊ;{Ъ&-/}!ʒ4mvpN)10 )E6b= K>ըխ$|%Ķ̷\KgU3EKg:y~Gcj'SjLwl_D}:1ZIrBsyۍ[; ugSF ]J.w^팧|%Φ)裋< qQu&yQ+P8XCqJRq#k`=J"{3TNL&{%mB6BիLsT{CTXIYũHt5d+Xc!]>oo/#}|?G?VQǐ#ȍ*ڠپ4K.XT2βIl38MF^R@ڜ3jB8&t:cK*Yg{{ILI?9t[g69G3O3=G"dUIP]a$G +TuBRXrX +2&zGq).Fì:Uy7>בz8T~-Che`1)c q!DSYMỏ,8o^\zJ4Ɓ2Wip &v] "PaOҠ +-+=$|/}? Ozni)|O?>>/ӧoY/ל!c2Msjb?f[*5lqjbAvɄ$#IP#eÀcX#wDMCJyVƱ\q&M:d+eՒ$oF΁&fFM,zst1R1FJjFDZ[[v=;0 ;Ffn0.xr?o_02ݞiK).T7Q+O>V6o<ǵ +&dXggL`##)H졑g-I"wI:SS2R-iV"n%1(z1B0PVXPudħ@OK!sK])^'p<]b}9";" #4647tKHFrK$;N;Q^&zW~ mrFn%$g}kLƖTSG=ժV'-īPt.HZtRXK}D9ڡ[ji3u.meZBʎwBZp`+ݠs@0$bGNgY ҘbE&#" pyx5|nNtPCo~GD% }+M=C̵$$S#.Z K.x[ >LgD]d+Eɝx^0\6sW +Fi΁dPLmpTkV~+ѐ8&jA 'RI6,exeQLD]sݼr-4b&+?L--u )3HR:pO Љߨcl NYXÑ9@)Qa܍>'$׀ 93۾%L u+rD!^#=@.>v1"ĬDȋtdwR#o :7J;ٸ[pvݭa':]JHZW# !;tCJ}(pRGgN@e: +zh LdI %zy[ +rY*!.qNw؅pUsfy og;(>2Dž9];4,= )|pyd@ad3EV=<cN a6v2ڜ+ԹHk= ^ȕ3)cTQNDʠo7%Rw>S/ʝ+ ѓ%YOf-~VTOMuCMwy^$/͂F2HOUqqXZ%nܨfA4)ǔG +Csv$.G+wMʠ}vDݭ^7=e՜W48xd|DDzo"ZY6Q,=6;>`Rd=n + Wj;璞X1!Lg+'Y` dze&Ӂrx+Qb' h*/ۮ St-iu@Y9 _6OnU-9CllAv s -$^oɰ7/,LLvSwynubH'*l̅] }j )sjPSp$ҁ޷>Knqe_zq<Ic:FH~&.][Irz*.T,I?2„J?A_>̕(9- G[NARRJxc )}7jjzx1>WQ?#qHeLGG^ nc8JH_[ۈk_+gYJ&.GFjT-+xW8a(ᇢH %߈ DWzK≄8k3ĸ_: >r`Ija@Um.mw=ۏG:f1W^6վ."qlPjLoĶ\Bd!zJ-PL &mTB|GDdFN)܉0G@q3ʹ2b˕ߨ$p~rI½`I qnJ [=*I#MnE? I$G'to(Rb剷s&c2Җ k +l}? n +L_%J543xfֵŜd]p75yZi< +@N\*nkJ-:M}%̶|ufBYغo )ޢ-2!!yD~zw%ᄪ%g"=)߸@,ӪWG ҄ +D;HC8s' A1Tb³sIS#]:[P͔g\% BqHSG{?o?~O~Ǐ}B_޶廯㇟_?ȷ_m Wyzq+At+Zfxq"ɪz0 .35cDƟ^(܄#0W ]ٺd}Fqz@5cf1e Gjtb ?f }"42*FeNΖyO1 띖J7);!^GD\H$RY+&ҷ5PLw`4D"POv,"Hj 3!"\3O FAsA͈-L`fںi"6R9bzbi[1I U9\X X;TRG(4ƋGUYt{2*/EE3h\pư[K$Skd lOs[>yg~ *DtqKIj[ vih#?\$~Ӫqc,oH_V'$a\Ar+^e7OA!fSѢ8 CwhJE[Ö^U$sYreY\_7:'*F,(GLLRʁ9bbNPz6M%82JQpI+KRp*;BF{LR0_K1AP9a@:~^1@vUL\ˑGAʽ 8I}mmb%jiCuEuN)]'~TI6jxm)Z51bF<net=J mXӣYdÝׄpd +s HH^P|˷sGÈǂb@Ո\t f.LG{"q8Y@ču1蓒\djnuUO_>W2 r[#0ϳ#7UTGd/17 L† <v?N؝N8#Ewßj3Zw}K+5IKBy QE#Eb*J 4f=D Hck6OqT]zQȈ%@٬.$"Qd>&&)\ɣ(T@:ƙOR.I\ޘL2ųRm$rk1 S1S0[D\a]r;QstpFLP_;Gs1P}cL+7YIJ-#8BoO/uI0gD?ofMvb(W܂*! +}Rrt]E 0;07z#. IKAyEʲkBIvO̕U2%ۋxd^T8. >_1iCE aFx2*8ȉM xMY,-$lD˼MgH-^m3\=qY(kiR\Wql\&DĢLd|'Jip XQNbLܣF}e$)ƢG͋!u+Xo.J`M~qlY.̋Ph~PKhHlOW>Ϡw zʟwFR]{-}=vHUQXFvodk+HQí %݇^e0 +Kb dk5Ǹ!i, bP%ޝR,$6,0J)a:)/ +-O3Ea J9pmAYqLh%Z[vBz:]̵1$oxڧjxkS4u/4w2TK僈M,T/z35n@Q+buܴ0 +~Q[ z$?yrEC i\|d˦w ղɷL{9HhPYL +a++1qd8rF;SN-tmEʠYQ8>==#UxǨĢ"5]Tf# [_L=7&cOaK;5-Is_v*gUsȴS1X)!i3ĦxD9O1/;$(R(%Sgb"SiǞ{г4}PNfY'J6*Ҋb``J"c jO5w_w=lN.+A +ir* c; ]赁d'wۈg:Qo%6NnFŦR @ѓzrٱs%TӔcVXz\}]q0iA=6)L!&' :~BuF *|9mddKcl@eEܩyrIͶ2w0:gYW|T{棦((MԽG8*T`+豦2Go'rD<{7~+^aO_;JWrE|ycg~% +6ƳG5] X6L +%5+^WrTe:8ocQq44 {aVF}yToXZUG9DIeӦKɿEQ4ryT^j7vԋ3dJ}O+ W_k endstream endobj 30 0 obj <>stream +HWݎ9}ޡoe*"բj%Y4da*ww(7s9u֊ﵨm˻&s|kUvo_kٛNsÿ2Ko\VwS|}w]>`zCPjj{)84Ԟ'jss!,Gٽ7 Sv 2J:n2p^'*{w^>8gxOon7W\O={w_>ko~ڬlJ{5{|۳ۛ?g/ӇOwo?ݽ~߿×yo>8_x/wO{|WבoHZ 9.(2@x JI*qo e71koA ݋ }>k_:jtlk(@'RD] p! ]ԙ3uN5MKCK6vkﻪc]^ҸWҸF .e%wg.}v^ l`S6Ag ) + -Od¾2;\&0@FG7ٍ@Κbc&yfnr @+5mmJ)VuUk 4R ~C݁"^`:zbvC’@C_|x#﬐@+hq# j޲. 5ԚQcYSDLCSic`HLj*?W+ԼblVspj^:\:+yCȉy1V/dt1׽1yD\X'nuD# +Ur}<ض0@7iY;"Ґf" +ҲTYH'킙Q!JjH|u'P9䂊/l VY}AFhwDEsBh{"1 +k0V)JKH op.ꦠ5X +0Xzt@l@&ʚHwOa{7Sqs"R--`S"J}M2_N<6r*‚HGfΑ,Bԃ,C(5iA/ɲK#D\$֓)K( G#a!f ͚-blX +w`3WqpN~$u!e"/g0ff3CXi(A7_ڒf_F/2kadHR\`p[F]"(Iv&‚!! wPJ V@(u1^1QɽA"Ȁ6: Pڍj(DCZG"@ |<P +$3upMfϽv/5J DQ,QP/sdy iuCcеN'2D1% R!26,z\JڿAl+<'iv Qv +5&ɒ_ +R1;X`c /oo +.Ld!S2,ѥ2@h?=Cv^gXbZ'$BF츞x ^p%Pi\"Hǣ4Hc$ ++=1irr~ԹAx(TuutcG1КQג̾c`r&ӂ*(MtOPNPBP^)Gq.ݭ!Iz"d q#I!pÒA!fR)q@V/R.L4~!zh $<TЗ(I>oÀhBe1u=6$,@$n7 \(ٶ%9mԡr lydp,Asҙi6Pb >LO FmusQt1# dX&7TAgXn!q$3񌺬C0(/}Qg`KAW…SvHJ: pc^Ǫ7`uil2hI&9Bc` z +8i $EavhAPFDdjzG yZ"8hgZD^:-O*{`05GGkFߐ'#㎜Ih~E8="Y N{ QNu 4v {9PVlfy! nQ!e[Ť8쓁FCj 3Yb"xr&HDS;sh +rgd{G )GD@6j%Rϕŵ|}@Vl,dIܐv΃DQUgƑC)c < +XB g-p2 阷 Z*t-e౓ʈ)U;Q49o˥ծbe7ޏ{[jAPP!D1fw+!dZs<,>G!*aZp:˦LXZ𨭝v4pV8XBIⷼEU=#Ж%J␮'^iFk|n)-K[A(aILl KNR//zz5и>a74r@qz+v!p̈́@4άܐn-ʥi33ka Йbq9ʯ] `0`[E̵2STeB|5Jj3fYUcF;M6f"eVp]|6oN)ԃJe5ȳHS7JstIw;BL0{44t@,˖n4ߙmjêQ3nL3*4Wmv0!(:#fRdg>e6Q9bh1yA^*Clz!3d%(l~%g/d-D}*-jňH + sg4 pk*D Dͦ]EBB lO>"H0nTRaJHP y*MuMDU:#$[m5且+^*wXwĊcqܧ\%uj@z7&$L <0YÃhq35*mvZ55NoLQ<GͶ jW\þSCٍs!ar*=Rs*<B9^o]CpjQᨮ +&D6OD2]QXDQ &zZ=#Aǭ]~9B3o)$i5| +ݦ!K +Md3s}Jv +o1r:zAa{PU0~c7plsfȽw./6Dz;>R)vTU( +Bc/7QNh|NsI(' t"o=bJ!|t î iBr͹}Hل3sՒ˥ b.0) u͐):6CU-hj*E4=8ANDqE,jH}(q8Vm ) )&zY=<{#E;~MJ M]͟lە@ypyfJ1FIjԗ[I9 +Ķ̧z!d1eƌKKY.c+7N̓oZ?Is#i$uJ I7Yƍ͛@wyF:<2?5 +7T +FsO0E܍\)oT#iot)gPĽA"](du3=vtbhh%3-*4.'L=e)=Q q-`3O(/IzX_HܖPqIҦD"˨)S휭T;]OTxƋYI*j+fS/?(aQe|GbR?1(]o ~ɏx~<HOGI跃u-#C[H-BMxG8M˂A}~i3S]QB23 +RLe39U )z1 dk3QTŧǬ'o+)\N| ldJ٣S\T[$ELb&Z=*%Ns#OU=+AbPe[yK=0wov7Rg7$"NLJE+C>1Yl\~]Tݡڞˬ3BFձ^[E=&Ż3pch).\KY QԂ>= ׎S7(L,]JDbj-`Hyg7Q ]y$éq5J,zqGB.ډv2R0boڄ6J^'f4"YH\R)xOmRq{MOI H9q}#PT2JӞӔdpiuˠJ4a~~Lo޽~@|sӊ|㓯??k짏?W=D6E+ā( "Zb]aWHօ $';3R%GÆcX;FwSĮ,͖c+sŮt\P-IMJ$qm*P!ȳD3&.FHTԧ@{E |, +&C%iŨ7bb=F\)BǔE@s&qEQYvM`7<Yv5: 3a>#(aK-WMׯb.ETƾb3h#,ihID(~tjlejos,P*rҊqO3RUBh`i>T+0| +mG1wdӉl\"Km8K]㉳pwqJv-p*n1 O2v9PK }!O^U{h!ѡE[Oaﳎ -{aqy|ܐv+g;sf[Q)%v镨AeV4 ~!#Q@Hwog٠wb<::TkA3RW9Q‡XF$Zg]VO\r'vumN`*5#Ghk8 L•DIT348(4VO\j]]tmhv6/hk}ސJ^#yxgkL7:T ;iIӴ`ZЈ+]=^|@5kV]>_~PeN٢m:YCIuXN&Rт7LxY5COԟGVs[Cl5!}e pJ!05{@w )_k:-w;h@;8Y.,kuŨ 7#,T?&yVQBfSe^D'*}u{K22 @:^ǪzDٟȴå!Zyvux$cEciYlYrM28;Qaf,V67w QXy`q=JQ{ heAɌ͇m|1 Lp3f7R x,mY8쀴FISQYιTϫ17<9$Uaj'j9jPV&nM,$fV>ʕdR )V#F geoĿd':]$ 扶Zg4Cʰݚ$%Jx@|c;8XUwY)&l7uSֹ^oT՗99^O!fߤ^}yɕB:Hp!~r~݇ }mr۱)] 2h9cwT%W3ؘ +|{#]b|Fbsub:!sW"~:㡏4]w> +Pkkq$Ȉx<+tA:#x#bk_+'!V. e7SK6 +r/bapQBY+w@-CS5bK|W^Ѐ>Ond4B|J#9w$,DD ^$s6Χk6g#6YMSڛ,y8ԙ٢{@*&r5Yu1C*~JwPgUmA{gBa"?"6@gДZLēc%b˕R.*K:Nn=(x.S9I^Fb6>r8 g&b [ݨ R;oe$sZ'BGܝF\9jp$)h6_Hs}C)wg13̬^2RC1/n]v8IF 讯r |IsXB40,Ls%_`ĖXeiF!Bߦ+7m4 aжœU*;E|~E]>T]&DՠˑH70}C^7iq:_IsA-;}Uk^ \|ޅZ]KSWA듿gO1Y9@9R tDlsQVT`jE̞<*_5iC( R]5.+rM+`Pl[0_iwyv+S’:6έ)Z?%0 4,N'Mad('@g?WZ@"ϼ>~~;hpfHLJ Jsgs|zvRf\mJ"=,L.E g㑤9,^9pB;EȟsBx #JE!bfAMT%|$F%:1$aXNP1ITyW\'ab+EN* >}8I+N +b}#2t( T ~xmtIMX&~[|8<UF{YE+!/H~*u*d>$60#DԻܺ%U)ƙgb@,:Q/^.S@Xi1{rCCpN +@A~Y {Nz΂;Ҭ>Yh(h<ŚJєY_|ӧo>~闷? MW_}Ooדw6}?_<5YzPP6ǥ:B%_R+f눕djq +U5:sD5Ϭ0RGj b ?WN D,YZZHW,'zcNAx+#K!&eW-5-[ao4;H-0/c8d;{*/pdP0^ L%'ÖqZ?Zi 5c   ezcy%D̒< GqOQc-omu";ú/2ڃZVADouVic8J(lQg ]ca5; 3:@$s[N@i ƾv߾YQ8[D:7ݎDO4{A=:nDVd=nd<@AD\ o#pZ?]edCMda\$̰<:S'l:Ns1j<}8:R܁jt .{dw x{5zx>9-MvSn>J&B6XBh)f2tdCpe 4ەЃz%9]w[XD7ICy]*|Nʎo&lT$Bf_S3*S,FbTrh%VݛHXD)qޚ-īߔAuZ/JFJq+A>֧-I=hﰐD*B o4i6|+]rJ||OLЎYx,8d9]6<2>llBm݋<R[OIVmMNdZ3mB=+ >{ R~]->@Q|SJW3(4oS' Gk&aL,tZmD8K: +vPpC1*RlĂ b~W>+q8]Ip)$#gĥ!;)iv/ŗy&[TdWA\j^ْZ2aԂwU +c8IC7ƈO]P5x 3ZWnzD}x/IJ*L$^ ~h:ZGvlCw۫kF s; ^4 ꜤFeu]uxފI0"~֧Ȼl\.pdsЁIã jEO}6rd7hEzqXE|.󺮋NNt 6\rpp3\d<>u^"VOO`ݹı|kMBǛEXwc͵j (&H\+ir es.%$}H,^aʻ0*lu<СlzlbTuҨq<>7^TB+_#.=]@:g7T͹ow'dbzmL*MsM{⿾(3Wۇ[?;[P $5"XYXb@ NM(EU:nX`Hi)^T?}IgA% 72c$uF1Y_[QivM9fNNĨLRc]mEqk̡0-y椋0L- rEC 9b|u-љBzށTc=+ΡLWYF»#pnM-6ڙA}>u&MqܩiDUi"m{oDa0O,/'b^Tb#JMm&tkd >uT4iϙ >L"M2`hȴAMJqY"X$ƦHڮŽSfxg<)5,&4]ҢN__O<,Sw&j">~梙 H+IBPS̆@#6ƋWI[D}GaDY*s3Il'~҃hi?}wP/货"Z+%tF]7sϡ5BxЌA}aD>v*GpQ| v]?sqXͶJ4j%tNL}x fz8 W@{OS.E@ɲY`#U +!sN/k厮0x%6,B2Rݮ[;Om@Ӊ/,v)Aۨn+p@}*( +iXҗ}SgbةTrH!W +Th\^5X+;#ð.AO664e-z]u+/?)v|UKi#f JgbP<,dx#FqVAVc}DKuwZᔣ7U=K$T.XVp7ɩn5m7bLd4 . hn$EźVޤMcw$vؔ9$sB˸PPj}m*ptzkD8RRPt?0K9#iQOϿo޿@/~%}n/^Oϯ4/_|_K7*ߒOܾg?oۋ/ӫ7޿_/_=˧^Ͽ7?y|ͭkug?GxZȧ~x<޻1@-=e3Z +/Ը5YJDܨc${xwryv&93&=5FZI i%3cHtLT2 +&TjCA!!K*%聹cT7/UBSxOiKjrd(`= ʶD.^ g2s@ P9ҩej5/ +YE2dڡxx0|Y_$lؿ/wUق;}=<ŧ +r6QCdwqXݟ]T<s`n1r w]˪C? QrETfiǺEUQ(ef~jt}[zΝxrW/Vҏ7ίhPs/Ms/oΩTDiW2b.1:=b<ۿ5P!2=*PR|Eas, l*4##ӝJV+"?uYYFOv*R]_4ŋR+2f79 "?g,y +V6f9(Mee:g2\pPm(A:X:0F0BV+Feu$mPBMBl[hTb)2SKxSz,#KNaK/(ey^6zBhe܂gP +,՟{3֝jQ[b$۾_4ǎű~`y'\ Qp~_OMTr֡xmԌ鵄̢n2Ȫ{3U7"xi9XwT~Ƭٵs(R-Mtk^NZ=s[8R3{fj p6ƈhܵbV)v9jФAAN@ڍ}?d;QZɩ9bXhi7O1STЛP[#tN~ANzRqx=%:' V\y͊'Ȗʡ|:;@,qwNO-cxLwzuЇFr/-֥1xJ  TL=RtGMѢ0ڃ|Qj +=,J\kiwpP[È$yʔ;ReӚFFqW$룙óQXHruC^̐Xo@䙠Ng×F|($Dwq +U4='pqǯՈT]SIt?K"-2S-LqX rN ,XDFgH +U@v+|;?rADt֓PlbcQ{Hxrѥ 'ͱxe$ͱZ3&Bbj25sks`@dCiB1sũ^W=N#]l#M M*J2 !2F&MOus!/!%oLolU}"2 iٞ' lVwcSEH\qYIb㦤*XSƆ xZwr1‘p!m=#,u!ymDX+^pLZS#&B*:c-o` 7}%Dp(0=ȦzLS+_i1):b'lQf."H7H +ι1 +)zKN 4G)2{eF`h.ueTJow$;MQ@NFLPSGl+I-|&sĉfFq<3ԃwd<扪rI^i(,c|gQKVݲ.^9p%_4f~I2Uz2uhvų/ Y TLYH=g}EEՈMjs~2g(GКXHCy!AZ6>-jy@S %avj}8EB(&HBEmFkjͻq HFZ<>!qFo̹" /fm.{9P駛^qqҜd6p/~TgV脣=o\+"Vgv}".V1ٔ8Z*1_N?\_SK2Unkl +DKGɮD, |iNM&DIVrأ'Cr.apq67'b^F.L%QdH=Q(~ч$zN=zV*gr ʂLU.ȈsU i]3|Y/{E@+AQJqb5N[etǦnV)e BFDaz[d&Mݭb/E8i귢Ms`Kӓnk|.e]vQXn@b:`k?V,KE+fQF"Oq\MC)[.yFAp d@r+nbΞ 55cfmL ~>4|VZTFv{&C*ԇ:Z,)DIƗB┇T\FF1=꧑ c" > )jYYCBjP7SRz5TԈOD|RډOTdWEb.bmPk;t@Sqc^ ٝds93,FK$an@c2 h葃F3ZBF0{u*]]Iۡ҂Qm9|NHC~ 2kbVU00<)v{"w_ƩR#{ 7Uj8ѮF>*UH @:\"A阞-K d3sX_eW._@kv36Q{ManPlp[K ++ xVhv >N +aS^5ƆuS4 ]EY+^҆ @@L{jMcވW|mFDc#1M|5u K똇Uqa`A@- Ѥi1/=s߿~;d݈8Ixݺz1KDE+Qfv7Yw~Ks;mmd)@e[N']_W#aD!]M1R1}L6=.փ@ ]##D3 >^MQD02J*qBA(EQ +ac LVݏ0i +>?/S->_|7oo|ϟd엏4c82̭fS1'N %14IG>WUc]1 ;͌Ht2FlDo!12GFVm`cH22O DKB}k$O0̫P$8%J(9@f~M 6$FTF]`p[. av .qG>%5SL\Ҩd{4aYڑ]N">4H_M欣qep5CYv Bf:&96!J4J[b^'ޢ/,|W to"Kϝ7{iڪRc/2<rΙdɎTv\0~C 1M0#{,Em:=GSS0׆+{NZفxȻ:VjX A2xcYh]vCzP:H7oSp9qip]r yPFs!oAMqzO{Cq"VRSЈb [LETrѤ8,~W0,e^"$[р|'lteUfdĹpyNGl^ȓ4g{qM* <>dU~CE=h7AԖ.e[`y; zY<4B@NQ7S]wf =ނTQ>.t(8oJ#ud44S !TӚYmC.\nѵ)_GQ5gouyɜB|PDZW|K\yu!X2 h_1f7q=#huaۄicPt=آ$CC}^_>|Et{,+rzLG` +͝2Cu*Y>Quto,%Ƶ3Ĩ3*%ho~/:|_%cƪՠ.Ao =2|'J" \6f8 +qx@'G>PmAs| …QgTa*~ddZg-d[^5t3[$CJ +[CѐG)`,APg1ʚ1/U(s+^%iiIrI|3hՀ gMWLtjh9$-9xtHV +Y\]ٶæ^δ֐ju#ǎ4Vq=HEae>>\Ylb wI}3iCȀj5JMϰ'^^ TMj9*\JoJBHQls#Ǽ$\[U`5o{>M +u91+wK1yՠ 2lQ]=WjiL.dE϶Gtq#dd= 'e'ȏUzO$J"WdQ7OW+m+|,ưޑrB{ҦNwb0^te095B N뉇`kƥD~h ]h^qcb2$+TR xіQТpxyk`ʵOI'TWKΫM݅`W_!(s|egnCT QyOlU> A\B2"dnhe1Fn( HH}.wп^(oZZP +2q )p:T5^=yja3 q!$–hS'e2-tfy_wғ7=_Z5-HOo7#(jAɀ z 6F,>Jk;k~\,d*eHgX;N!ҳNh2J t.ZgW6sgtz s;r1SG`}4:2 xڍClƳPF7A:sRyue;7s3k>yeЛkx%VeR??خgzߡ3ث)U(,hdc_"wOM\ŵ4A-s݀ eer$ˍQUZhA(?yC9[7 DrBGqBi԰|}TMK.c`D!u_EÊZǰ7Qڊ 9j:\8p̕c]ê̟j@6Z'dϸ~1":hڿ593W0X$+gocEȑNI"@zlTl% r2QM9D۠`0>ON1<=F(S+A7bŴclxvNKFQJoG@ʭ\v߾WX;cӹqD#:C(DJ6sܡUR5G~!ze:wa%G%J{NuJi3ƣ, *o#5+enATq in~Ԩdͨ] _RUZY:{{#& +)+iq> +\=d!vvri5wad >Mu>ɐYQ#զҸӕ |"]572E(i{VєxbOo)FeLlmj !KE7]9Y鐩H pzID`F'2 42V3 O8O2ĊHV]0Q|bSk;+SNV4 D\hX:4epB@-a*5U߅Vؠmv1VLף]rry9e$NtfF7H'|Yn;/?94"}"ôُ,S +0m;k3G.:ӦiK/3ªWI(a[';Lr=.IJkv̕:R,Xm ůT[ |M_"p\k@]tv.af8(oZeT=Ib_ql"r SJUñPCp +9iJx& PP.X5l#W8י@ +@+ 0=uFEN?/˵dFm-*n&nvp7.RJְi9}}qYYdr_( ٬%+ ! =xx'~|{Ň(34K}!Ho>hn'3uXLuC>Tδ> 5}b3EuUsPCeA%ѿ[:ث>O<IV,<37>Cph!DJUN@šdͰR!@1æaFm1"lqbyJ5J u%of=L 'm9,h)AX~Kwi<0zaE ^k\j'& Gw<JųD&s,F4oaE DB=\jg&lw rYȔD콛ʱ$=ot_Ja5#vc#A#xE>f0kw?D 15_~P +T býۀ5 4L +Ni2z\?_б:#O*'5< LQ!rW>B%"pbB@3/f_?~ HR4< q>ShGlNY7鬫H ˉۻ$}'ĚAc& J# ei.3Ff([F܃zxWP@brb|ƭ@nf+$r".Kʹvl o1RJ"}1µvY!W< >2[6a`¼LA$SGa ; %~(oe|^ \yIHDVu!r>j_7CiN\Cus# JH1żp=RH bDg&b~麘:)1h\3r!ҚC+T%N6z`at6 ԠNkX97[Ь{6PgqwFMB3HN鲪u5i~@"RdmwJbTs QYGD+퐤yhVYhC"\T?C*N3V =42Fn D]Va%S1XPeX7̈VUf`Џ~'Y*zY4oZSu\;Uˈ fw}#@lNL=WsS2&MǏ?lNְ틀'~39<Pu1+laH'Ql˶ԤJ4?Wn}W!G%](Z9NXeA}NuUΒK}%jS8xp8Sk +6 XR0ρ݀ɀTitYU H3IgHa>{2[-^xA0-TV JoYЫghs"yk@@0{<<ٳ󫫇>~xw?O~s~ybwu{~q}᎝.x\7kW~q~w+6iZ1rqͧǓ~ff_־fefs1~sfKi|^qgFq$QSK vhޚS47W~v/~qү_^f=W(=m> _o +G @>>39>ワ=رO@_08foΞ+˴\'""Ru ѭe؟8(;B쀯 +Gȣ:5«)}TsW\EyO)D˙OAg.izLm#xshTxS{n|?{{@̴D`ڛ$sƻ,FV˶洹:.| >tzl{z,ƒF.GtŅ$QSIGGC&-khI.>w11l,Zg / qJ%A+"|̠`A T,^i,5M)$1xvd Y s rę`*#40r:C ayhj@Upg+I^=7 T\8b$>6m +6}UX ~z5eਚlO <\AٶɁ\ZSФz1S˶tĜsJa`%miPO+ 2}jaja`|vZ6Ibmaa砩W$[(/з 鑰c $psAS.^-s n8+z3>tYcK𨾖m֣T7$?p'!TWmǭd6>~1g4.6;,ܢ܉'fxaX9)F;βcm5˱ +HY܋ZDdzkלU +YKt0L ]Z-Ij"J3RJṂRĜzx饃@Z)GmY TF EW˚Xf̔0Vtě/-R<˘3}da®=ߨ W5fbnW&D<r[y'/4+ReR9- ^(9*8LDGUuMݲ$I;'do,Mpc0l0?0ղEQF FxjP8 OVZ<'NGxb= ?r:ǶթgM:wة4,+i٦JIr /|,q. 1'ou-T0J.( `'o.s3v2)*`-Mr\im1}" }6"*y fs! Y) !Q]p`36|d֢Ml0J4FnrnuZ4564WˮqCz:ZM3N 띮KgpՌֿݝ/Z8^2ЫXY|v1N<&/ SJScjd5N95ѪhJ8wrPIcg ЉyP8YiPXd`J& JskHZԩM܉>a11C 8(.?, a(pK_cL8^)AjنrM^Odd: c*e?3jDS[2jS`ƒA\0`e9qaZB#5=]`7`b`cİEWKCoR{ ̶* )Wgj"+Ũ+,)zךArj^T k[ɨUe.vE9tL4U}ukEe覥ye61Щ4ƪ2V +$oUOYA N)IDRʙZԕEjrt}tn5^]U-zY`|k ĸ:U9s>i{-~Չ|S  K-JԨ`R2NSS܋я ڇ"v0 &w*-0Th&J,5OhNQcC2>^,Kg ;@i^$ko0kب7Zgy +uZ%X?C$%tr(e=LJO 8I h؍ 0M5ی[Aq$m endstream endobj 31 0 obj <>stream +HWMre=\Ax #ƞzfD*ߪov# I2}%opԕlq|Bۻ +ׅ,Ru_lޠr id9o/#ЦMwZ +#rF(~ud4Wz#[m׽b{50 g߯}Î7Da6`f"w[ ^V1XCFr{ԩ}LwPMۀ*,5I;@<FPf{2j[p6O :?_>It{ U$v/{oy- /G'{i'/guhNXٞ p'੬?e9]^<%7۸*3N+uGzicLp?/n/0=€n7n˄a +w$amR +jPm%}^lL%nѻ"HT@5{j0 5ͬ`y$8m׬ꂷ^v3!痉.0WL (7+"p: _x2%i^e=GB݊-FݾE˪0e/hm}@Vu¿ڀmwӷ>rkx0-+5NiRʢ{8' /*iQ#i"%KpB%1Ӏm04Iyńw0 +Wj~ÑC0%WwJ2.,3t,B$Ppl\:0& Rm6ěݪ(CY)GY=**5𘲺$_nx4 x@DE„ovF܅֭.*>w ,V*/_: (P"axz! O_QͨȻ/@9g^`vC`tLWy%8mB7ј*Ooh>t GU7˨i#m`=-^>r@טsHS2đ:μhx Nvjx"\rvjNFkuaky?K-RrP3XX sZY+(|*pkj!bc0ٞ!N9(7;`H_X҃n btȅp5 uA D^ĝB)u]{ }HA!w_ƨe^3zI<GGd;0?9?]iI˦ +72CwYSY}r?K Mzbi_C_i&d30 Iu +6j1-@4h/I)9,B}"ygrFgAYtT >.G[9V ~Too׶%- eeWCvw?lUHH$DԳvJ].*pfp#Pe P hkgKxB#%hUmv^.kdKKZ3z{>Z#?DVco^p,Fhr)ri -u>cmQ lIS7 q873Q\OV\}.S;k1M9oN=|G G9Y``N f:{]|T*jګ5y|]ڒE? kL'#p7T20eALҀQ%Gkytu͎a|gD,X7b巸V<5@+Z{6Eqۖbr +Xj W/_d}>S,]w/=mߩS1x#xB7p7zT瘝YZkqaIDÒ'rMPǩvDf;gރB[x (I0CH M{ +)%TtŽw@2|NtUiŵ&ً,< eRV x%iV圾[uj9=ǡfsV-9 L +~wғ_s^CRZ 8?]#|vw#}LTsh SuolTnez֯WZ9ќgQZ`lӜiO-fpjNB=b4DcIaȴlKϑH泵U]?.,n[@V!j7; `eӒTU-K }OrT͑2aCǍsd7wƪ8MTcJo].ƦK/|X4B3/h[~W_!KE37sp{5A^\L,仿o.l+1^QDw-[EFEfتE3|U& +8G¦1Gi_Y]۩DZGtJ^XJ qgטg%@ў@XЎdmvkF9tm6ˆڐ(gnis4ysjH{ 4hRCLnSɥIq-mƹ3>l|>}ViA\~#Q w,?3E]r:[٣͢qf40A 4 ap=FXud^Yj Wuź.55~?qmwJh宮i@\kaJ곜*,OwѤ4%sqUݗWhN`쩠J+:\ȎFWtY`է8'Ah}f^;VY4Fz6G +&} =w)%}Lsue! X#K8`PedKzJ}QaJ6G&a6_ՙ5@Fg'Jqm˼限.|trVtV%xOΉ|vמL6J<T_4vYY˩s*w=fsDՒ|^)CsU)RUm_W +NT>CX,F;|ϐ񋰳dA#Zmf~u +:OrZڣ춮q &QqP6;OeSϐ.bw"l^0VwJ H8BAut1ƌ|={mҵ469UKZl:O,7_x3RUTߟܞdr>FE̳ɂbz =/R㝦3ѝ[shU8ǔ=7tLd%zcQRRRdyD}Vի(#zhD6,Gsݠ{>pHc]r6!&iϙ(EԻz;MLHn R͜@lz7{uk-|Idzrp[up+.†HcaJj <F0+w!1Ҙ$QkcΠ#D W{(vt]wJ\b⬳ oNNT/^<| R 8"_`UZLt>x}D^?(]\}p\T(76$Cʊ u0Zi׫=?oåmlzpAD=-aL ֻPzd6$gH$ /}o:`CuV`Rv35U C1&}xZzü9Y%fS*ܧ^/A.pE ae2n6CcY@W1J;ooʗ)ckwOO礶->ՍI}}-_ҹr\]ȁeFAp*N{oKJ% WQCOu7dpҗSCy͕]Nrrzb/Km,#Zv] }\9ݼFp;d*5e򬥦i[hcz#aUz w/OV#Xd.tKbӡg {#[۔M߄axjхyToyn3<C U, %þ\v8CX *$)a^K4 +GmD7Xr&x_Be1Df'^H)x8hV)kMN +D,**eCS`:<:mg) qV6D/@!g`Ց6>$XPpkY *es~<3~!l*& +p'-2%څ&`k3hl(,"s _+ iw`!k^<$~T+Cf/Ɗ,h3~-o +cbviw0_7e]WBe5u@SZ_f`?0`6'\5ǴY؊ `!NhD` 5R0̱'Gˬ@UwA}eрQlUz 7FkPY0 *+86K(@d38m])Z˵T<lup2 b"0~`X$Xfu6 îzX<,aP&d vLv.ahRA*70Ʈ3 $!d,?TN+F Tز/ :Ӵ":3glFY?SPdX ,C>ΦWkQu5:t7eN YJ:Th5i$@e3$/ YsЙшXv#3*!."3 &<:P?@'" +^Xz8K6a8z$g?ifI&qS֍lpY g'+< ?(u㓠THF|Nh#5ZآԝL*@Zk0dVvV,35~'-%:]tjb;#z `X-^薌t^Es!l{6 Ξz8٦1Ʒ]S_lzǠ +s M n?IcD7ţ%d Cb7e8VN|=  qF2#0MXGm`&±˭7ݰW,J IE6xdFP]CXϠHtn]Jey22**|#={}w?eVO^6ůyMŧu>-&C##×Q|~|K$8׿hKߎ2E 1.|L(Y> +nIIK7K5vR'XV + ,prUD38@D*:F[^8_cGS ԠuH'lm4Sfa0=rvͭ[k::Ek>cC W`ΙS[F!A>@oSZ,®X]pjƃ,X+~tY:ؽD8Xg^[++V>y$J}"2z22-RE;gRlf|qSV +:FEyA`(a?g ĿBcBFF{%-4b A"[THLE8gEt^Df:Gpa״ooe;&M^WA +qo. y@w7*;7TdKA fi_mۛRkRW +%X5 +%pjR{ )%@$1vH*Ey!Ժx2mʺ-O{{vatr_D?efF诣G'I?_㶜ys}ۇg_U <[yhi㋲4EeS._eߞ8y.pU^-ڋt޾% ._xK9i/)3}.٢{/g_C靻x<`Ʃ:?PVA lIx^V#,{<򿷻-U]4gEUla_:Y>/^7 p]ٵq-~rV+"\l V/om~uf-')ʭ)*\ + -܍z=xXN>r[.e}Gx[4x͸//q8{zRwd2,5|,ygټl;N$8~Mi7nv DvT&)\n|#`p܍p7Fn܍h b7>eSHG?#{ӻI녃"*jaRV]6^!?{D>)oRph[ FdzbV>v5mW6Oմ`B p=yV[^ē`F%ߜϋߞt?oqW'rWᓶ7¶Y)OS ~v5,/BML=&(Y5k6`7o'2G`6ڶ@0?lK7E;DԔU|~Ɵ) O&e[^k再S =~|JrkL.;Ɛ%q^ ܰqfx1]Ty{/ՒFDO;ILQREP5Ӹ?'g2 76[^KU_wOmxF'-KŪc򸄑き*|TUf;8ZMq.+L(gHKAY[3z#< |UB LպB8#BG!uo>KfԧdJ,^W+J +LPı-;=V ŖuNȻж[q#78=t2'wd?i$$qWZW<\ٞ_:$1QiP* z7 6VfGafrf{4'M)W&mKכ}DQ )Y(C731Q]JQgwNSȳk]rIxʲ4){Ǽ 0>F8A-xj eXO;|zq޽*/Ru2PX\TK3`KK$$Y̟҃r:ᮦD$G A/'Cf*x#gUH8CڔWMTEC (pQj"pFY+S|Kp8_MT=Bb +W.*6)jV.jN +RNwR,߿l~ԚI ,# endstream endobj 32 0 obj <>stream +HQr7O;ehI*Z>暥%¬kTࠇf1%N9E.!i8ph!Mv{MN֊͍Rd׳Q劉 I4[2N^Joz]BO"&F~`yf}覬7McM=I^?s',L +>97ʆX&,LD 2'V?"[> +(L3-U;Mΰd +*5j0x5KPPzs/+r&FS)(QwcFp>lN24i*qmcwϿiݬਜ gϮ7h}B!/3La8qjplߓc`w&kn#8@]!4{,~27S9uy +gw9qTv-sy?.F+&9]*FR@]Zػp9VK+<"]9}I+#|wD?Xa8RJ5N$ol9Qf=_;ϤQ\rID/J2]ۓѮUųO8BY?il£+Yb8/zԡg;Xi xC x 幩KJscK}/ӓ(h<1MQ[Mo'O#/؉P|EFhK@cW&h +-?u#2}݅y jėp{55?7z֟nr2=FPK0Ky6TW .Ww3Yw&=Uh$ŵd*wx=|VB3iT\͹q()1Uň;Q!pe:TU:4à {%y^;CRcSۆJq6&bHdS]ԗ/`boxggT/H}2=FP{tO/ n&"wmѓ7l[8i"q wCXp,|}X1R2I+q. tǶL*FɘM~- ŋ }p x}1ާWR{3P/E;6mHAz_HEmoLTrɲql#'FwMbBj2<%?vǟ=zFF'bH5+nz _'{a}HH9 TN`H} &fn%^0%c'c.I/&!Ãx^I = =i&Tglچ(}6]t* %әa& [FeF\ځ +,;=eD!ꚁCkh"LP5"<цzp L/@3$=-RW@UJ*i\KA/ |+OeDώ fZ= ]hEn88p;rLw;y깣)>K"߲]5nLIxBR` +Dܽ`Z@E`ΉjuoۨJ!jj1ӌĘ{Ch,hS[TϠ5^sm3_RӰ}ؖocw\?i!IK*1*AsJ2W̓_h^LBd`5nj3Z`gI1ks7uhsb:_N"8S((mt|pIU@#^c ؠ61Pʚ&V;ɁMlr`bf0Z059пxGVp +$V.І)l +#Eف,bD omH$.VhƴaICi J4u#(|LD`]Jh-8|[e+\xJ$$BuS-a4mQByœqq1c/OZ_O-К ymX6TVPU7Rpw-S>|ךΗLqN(#導7䋄Kkm!d[8(rrc;q1-"(>/ZsKbs8K.ywu[\XGXZ,/m%| +:s^.XwQoC2պgppultaے>y =Ȅ`͐h`A`Ž endstream endobj 6 0 obj [5 0 R] endobj 33 0 obj <> endobj xref 0 34 0000000000 65535 f +0000000016 00000 n +0000000144 00000 n +0000044550 00000 n +0000000000 00000 f +0000046860 00000 n +0000279966 00000 n +0000044601 00000 n +0000044980 00000 n +0000047462 00000 n +0000047158 00000 n +0000047045 00000 n +0000046078 00000 n +0000046299 00000 n +0000046347 00000 n +0000046929 00000 n +0000046960 00000 n +0000047344 00000 n +0000047535 00000 n +0000047973 00000 n +0000049180 00000 n +0000054341 00000 n +0000072573 00000 n +0000087600 00000 n +0000103216 00000 n +0000113811 00000 n +0000132634 00000 n +0000156579 00000 n +0000184075 00000 n +0000211338 00000 n +0000238079 00000 n +0000264278 00000 n +0000275984 00000 n +0000279989 00000 n +trailer <]>> startxref 280179 %%EOF \ No newline at end of file diff --git a/información/LOGOS RR/RR LOGO 002.eps b/información/LOGOS RR/RR LOGO 002.eps new file mode 100644 index 0000000..c931dde Binary files /dev/null and b/información/LOGOS RR/RR LOGO 002.eps differ diff --git a/información/LOGOS RR/RR LOGO 002.jpg b/información/LOGOS RR/RR LOGO 002.jpg new file mode 100644 index 0000000..0b3632b Binary files /dev/null and b/información/LOGOS RR/RR LOGO 002.jpg differ diff --git a/información/LOGOS RR/RR LOGO 002.pdf b/información/LOGOS RR/RR LOGO 002.pdf new file mode 100644 index 0000000..a7f5a27 --- /dev/null +++ b/información/LOGOS RR/RR LOGO 002.pdf @@ -0,0 +1,1571 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + RR LOGO 002 + + + + + 2013-11-03T14:16:47+04:00 + 2013-11-03T14:16:47+04:00 + 2013-11-03T14:16:47+04:00 + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 184 + JPEG + /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAuAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AJPNnnLzR5x8zSqLqeWO6 uPR07T43IjCu/CJFQELU7VPc5uMeOMIvP5s88k6B67Mhg/5x2/MWWMM62cDH9iSepG3+Qrj8crOs h5to7OyeST+Zfyp8++UrUaldQj6vzEX1i0l5kMd1qBxehp1pk4Z4T2YT0mTGL+5nXkPzN5k1H8q/ O1lq1xcTNptpytJ7gsZAs0cgKB2+IhTFt4VyjLCIyRI6uVgyTOKYleweV+WNJ8xeZdYi0jS5ma8m DsiySlFpGpdviJ8BmVOUYiy4GITySoH7Wbf8qJ/Nbxi/6S8o/NY3K/JZu/7SxTzX5a86eTr+CDV2 lt5pl9W2mimLqwU0JVlOxU9uuXY5wmNnHzQyYzuftesXf5o+YI/yLtNWW4Zdbnuf0Wb7q9V5t6gP 85ijpy8d+uYgwDxa6c3POpkMAl/EdnlXlfyf5y8/X9wLN2u5LcB7q7u5m4qZCQtXbkxLcT08My55 I4w4GLFkzHny72Uf9C4/mF/vyw/5Hv8A9U8q/OQ827+TsnePx8GI6pY+c/IWu/UpLibTdQjCzI1t MeLI3RgUNGU8aUP05bExyC+bRMZMMqunpv5r+Zr3XPyi8q6y7mO6u7gfWGjPEGSOOSNyAvQFkJpm NggI5CHO1WUywxl3pl/zjFPPLY+YPVkaSkttTkSafDJ45HWjcM+zpExN9727MF2L5P8Azxu7qP8A NHWkjmkRB9VoqsQB/okPYHNtpgPDDotbOQymj3fcn35xXNynkb8t2SV1Z9LJchiCT9XtOtOuV6cD jn7/ANbZq5kQx79P1MW8ofl157826bLqOjyB7aKZrdzLcGM+oqK52Pakgy3JmhA0WrDhy5BYP2pn qP5L/mnYWU15IgligRpJRFdKWCICzEAla7DoN8iNTjJbJaTMBd/aqfkf521yw862OlSXcs+makzQ S2sjs6KxUlHQMfhIYCtOowarEDG+oRos8uMRJsF9SZq3duxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv jD8vZYrfz7oD3BEcaahb82fYL+9Aqa9KHN1m3gfc85pjWSN976p/MSDzjP5bePyjJ6eserGVblGv 7sE895fhzVYjHi9XJ32YTMfR9TxXzPqf/OQPlnTP0nrGpmC09RYg4e0cl3rQBVUntmbCOGRoB1uW WohGydvgjPJfnPzP5l/L3z/+nL9736pYR/V+aovD1En504KvXgMjkxxjONDqnBnnPHPiN0P1vK/K HmrUfKuuw61p8cMt1ArqiXAZoyJEKGoRkbofHMvJjExRcDDmOOVh6D/0Mx57/wCWDS/+RVx/2UZj /kod5cv+UsncPx8WG+c/P2ueeNStZ9Ze3tkt19KFYUdYYw5BZzvNIa0FevsMux4hAbOPm1EspHFQ egfmBomn6P8AkR5etrG9j1GGTUkna9hr6bvJDcFuINDRfs7gHbcA7Zj4ZGWU3ts5epgI4IgG9/1p p/zi9PD6HmGDmPW5W0np9ytJRUfTkdcNw2dmnYh7rmA7N8y/85KTwyefrVI3DPDpsKSqDurGaZ6H 34uD9ObPR/R8XSdo/wB4Pd+tZ5pR1/IDyeGFP9OuT9DS3JH4YYf30vd+pOUVpo+/9bKf+cXpovq/ mGDmPWL2ziOvxcaSCtPCuU60bhv7NPpL3TMF2b5H/O6eGf8ANHXHhdZEDW6FlNRyS1iRht3VlIOb fTf3Yef1v96fx0ZD+cv/ACgn5a/9ss/9Q9plem+ufv8A1t2s/u8fu/UkXkL84dc8l6PNpdhZWtxD NcNdM84k5BnREIHBlFKRjLMunEzZLVp9YcUaAtO9T/5yO8332nXNkNPsYfrMTwmVVlZlDqVJUNJS tDtXK46OIN2W6XaUiNgEn/I/y/qGqfmBp11BExtNNc3F3cUPBAqngpPSrtQAfT2yeqmBAjvatDjJ yA9A+sc1LvnYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXzl51/5x780DWru68vejeadcytLDA0gili5k sUIeiELWgIb6M2OLVxqpc3UZ9BIyJjyKVxflp+fcUaxxR3scaiioupQhQPYC4yfjYfL5Nfgajz/0 37VK4/J385tUdV1G2llC/Ze6voZQvbb97IfwwjUYhy+5B0meX1faXp3ln8o9T8vflv5i0oSR3eva 3AyssZ4xAhGWKMO/GtC7EsadcxZ6gSmD0DnYtKYY5R/ikxb8rfyc84aN5ztNQ17TYf0ZGkwl5Swz CrRMq/AC1fiI7Zbn1EZRoHdp0uknCdy5Pcv8PaB/1bbX/kRH/wA05g8R73Z8IePfnH+Ueva75gtL zyxpdututqI7kxtDb1lDsalSUqeJG+Zmn1AiKkXX6zSynIGNJzpX5U6lffk/F5S1crZapFNJcQPy EqJJ6rMhJQkEMrEGnjkJZwMnEOTZHTE4eCXP9ry+X8ifzV064LWNskzqSqz2l1HHUHuDI0LU+jMr 81jPNwPyOWO4+wqzflr+fbJ6bR3rR9OB1KEig9vrGDxsPl8k+BqfP/TftWaf/wA4/wD5k6hdA6hF DYhzWWe4nSVuu5pCZSxxOrgOSx0GSRs7Pa/MP5V6bqn5eWvlCGcw/o9Y2srtlr+/jBBd1H8/NuVP HMKGcifE7LJphLHwdzxC7/IL8zrKc/VLWG747LNbXMaVHt6xhb8Mzhq8Z5usOgyx5feo/wDKmfzh /wCrZL/0m2v/AFWw/mMXf9iPyufz+f7U10D/AJxy86Xd2g1eSDTbMEeswkE0pXvwVKrX/WYZCesi Btu2Q7OmT6jQZ3+c/wCWev69Y+W7Hy1aLLbaPFPAyPKkfBCsCxD4ytdojlGmzCJJl1crWaaUxER6 Jn+Tn5eXWgeWLqz8yabb/XpL2SaPmIpz6RiiUfEOVPiRtshqMolK4noz0eAwjUu9nn+HtA/6ttr/ AMiI/wDmnKOI97l8IRdvbW9vGIreJIYh0SNQqj6BQZElKpirsVdirsVdirsVdirsVdirsVdirsVd irDP+VveRf8Alsk/5Ey/804q7/lb3kX/AJbJP+RMv/NOKu/5W95F/wCWyT/kTL/zTirv+VveRf8A lsk/5Ey/804q7/lb3kX/AJbJP+RMv/NOKu/5W95F/wCWyT/kTL/zTirv+VveRf8Alsk/5Ey/804q 7/lb3kX/AJbJP+RMv/NOKu/5W95F/wCWyT/kTL/zTirv+VveRf8Alsk/5Ey/804q7/lb3kX/AJbJ P+RMv/NOKu/5W95F/wCWyT/kTL/zTirv+VveRf8Alsk/5Ey/804q7/lb3kX/AJbJP+RMv/NOKu/5 W95F/wCWyT/kTL/zTirv+VveRf8Alsk/5Ey/804q7/lb3kX/AJbJP+RMv/NOKu/5W95F/wCWyT/k TL/zTiqtZfml5Nvb23s7e6ka4uZEhhUwyAF5GCqKkbbnFWW4q7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq+SsKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVN/KH/KWaJ/zH2v/J5cVfT2BXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXyVhV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kpv 5Q/5SzRP+Y+1/wCTy4q+nsCuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvkrCrsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVTfyh/wApZon/ADH2v/J5cVfT2BXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXyVhV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kpv5Q/5SzRP+Y+1/5PLir6ewK7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq+SsKuxV2KuxV2KuxVlfkf8AL/UfNE7SBvq2mwtxnuiKknrw jHdqfQMVewaT+WPkzTY1A09buQfalu/3xP8AsT8H3LgVOB5a8uAUGlWYA6D6vF/zTirf+GvLv/Vq s/8ApHi/5pxV3+GvLv8A1arP/pHi/wCacVd/hry7/wBWqz/6R4v+acVd/hry7/1arP8A6R4v+acV d/hry7/1arP/AKR4v+acVd/hry7/ANWqz/6R4v8AmnFXf4a8u/8AVqs/+keL/mnFXf4a8u/9Wqz/ AOkeL/mnFXf4a8u/9Wqz/wCkeL/mnFUh896Jo1r5R1O5tbC2guIoeUU0UKI6sGFCrKAQcVeCfpbV f+W2f/ka/wDXCrv0tqv/AC2z/wDI1/64q79Lar/y2z/8jX/rirv0tqv/AC2z/wDI1/64q79Lar/y 2z/8jX/rirv0tqv/AC2z/wDI1/64q79Lar/y2z/8jX/rirv0tqv/AC2z/wDI1/64q79Lar/y2z/8 jX/rirv0tqv/AC2z/wDI1/64qvi1zWoXDxahcxuOjJNIpH0g4qyjy/8Am15q0uRFu5v0naD7cVx/ eU/yZacq/wCtXFXtnl3zFpvmDTI9Q09y0bHjJG2zxuOqOPHAr5dwq7FXYq7FXYqrWdrNeXcFpAOU 1xIkUS+LOwVR95xV9Q6HpFro+k2um2opDbIEB7s3VmPuzVJwKjsVdirsVdirsVdirsVdirsVdirs VY7+Yn/KE6v/AMYD/wASGKvmzCrsVdirsVdirsVdirsVdirsVdirsVZx+UfmGTTPNMdk70tNT/cS L29QVMTfPl8P04qwfFXYq7FXYq7FWVflhaLdeedLRhVY3eY/OONnX/hgMVfReBXYq7FWB69+cXlv TLx7S3jl1CSIlZZIeIiBGxAcn4qewp74qlf/ACvfSv8Aq1z/APIxP6Yq7/le+lf9Wuf/AJGJ/TFX f8r30r/q1z/8jE/pirv+V76V/wBWuf8A5GJ/TFXf8r30r/q1z/8AIxP6Yqn3k38yrLzRqkthBZSW zxQNOXdlYEK6pTb/AF8VZlirsVY7+Yn/AChOr/8AGA/8SGKvmzCrsVdir0Kw/JbX7yxt7yO+tFju YkmRWMlQJFDAGie+Kq//ACovzF/y32f3y/8ANGNq7/lRfmL/AJb7P75f+aMbV3/Ki/MX/LfZ/fL/ AM0Y2rv+VF+Yv+W+z++X/mjG1d/yovzF/wAt9n98v/NGNqxPzP5M13y3MiajEvpS1EVzEecTkdgS AQfYgHFUixV2KojTrprTULW7U0a3lSVT4FGDfwxVD4q7FXYq7FXYqzT8oCo882lRUmObifA+mf4Y q+gcCuxVjP5k6pPpvkvUp4GKzOiwow6j1XCMa/6rHFXzhhV2KuxV2KuxV2KvRPyN/wCUsu/+YCT/ AJPQ4q9xwK7FWO/mJ/yhOr/8YD/xIYq+bMKuxV2KvqTy1/yjulf8wdv/AMmlwKmOKuxV2KuxV2Kp L500qDVPK+pWkyhj6DyRE/syRqXRh/sh92KvmTCrsVdirsVdirsVdirsVZP+Wl6tn540qRzRZJGh PuZkaNf+GYYq+jsCuxVJPOuhvrnli/02KnryoGgr/vyNg6ivbkVpir5omhlhleGZDHLGSskbCjKw 2IIOFVmKuxV2KuxV2KvRPyN/5Sy7/wCYCT/k9Dir3HArsVY7+Yn/AChOr/8AGA/8SGKvmzCrsVdi r6k8tf8AKO6V/wAwdv8A8mlwKmOKuxV2KuxV2KsW/MfzLbaL5ZuwZAL28ja3tIq/ETIOLPTwRTWv jir5zwq7FUXpFk99qtnZIKtczxxAf67hf44qhMVdirsVdirsVXxSyRSpLGxSSNgyMOoYGoIxV9Fe RvPeneZbCMGRYtVjUC5tCQCSBu8Y7qfwwKyjFXYqkus+TPK+sy+tqWnRTz0oZhyjkI6bvGVY/ScV Sz/lVHkD/q1/8l7n/qpirv8AlVHkD/q1/wDJe5/6qYq7/lVHkD/q1/8AJe5/6qYq7/lVHkD/AKtf /Je5/wCqmKu/5VR5A/6tf/Je5/6qYqmOh+SfLGhXb3elWX1a4kjMTv6sr1QsGIpI7DqoxVPMVdir HfzE/wCUJ1f/AIwH/iQxV82YVdirsVZJb/mL50t4I7eHVJEhhRY40Cx7KooBuvYDFV//ACszz1/1 dpP+Ai/5oxV3/KzPPX/V2k/4CL/mjFXf8rM89f8AV2k/4CL/AJoxV3/KzPPX/V2k/wCAi/5oxVpv zK88spB1aWh8FjB+8LiqRX+o3+oXDXN9cSXM7dZJWLtTwqe2KobFXYq9U/KTyHeG+j8w6lEYoIQT YxOKM7sKepQ/sgHbxO+BXleFXYq7FXYq7FXYqm/lvy3r+t3gj0iB3kiIL3APBI/AtJtQ+HfwxV7Z 5Z8r+eLGJBqPmVpgPtW4iWf/AJLTfH+GBWYqCFAY8iBQt0qfHbFW8VdirsVdirsVdirsVdirsVY7 +Yn/AChOr/8AGA/8SGKvmzCrsVdirsVdirsVdirsVdirsVXxsiyKzoJFB+JCSKj5jfFXoHk7zj+X +nTR/XfL4t51IpfBjdUP83GTdP8AY1xV7Tp2pWGpWkd5YzpcW0gqkqGo+XsR3BwK+U8KuxV2KuxV 2KorS9Pm1HUrWwh/vbqVIUJ6AuwWp+VcVfTmh6JYaLpkOnWMYSGEbn9p2/adj3Zu+BUfirsVSbWv OXljRJfS1PUI4JqA+iA0kgB6EpGHYV9xiqV/8rX8gf8AV0/5IXP/AFTxV3/K1/IH/V0/5IXP/VPF Xf8AK1/IH/V0/wCSFz/1TxV3/K1/IH/V0/5IXP8A1TxV3/K1/IH/AFdP+SFz/wBU8VTHQ/O3ljXb t7TSr36zcRxmV09KVKIGCk1kRR1YYqnmKuxVjv5if8oTq/8AxgP/ABIYq+bMKuxV2Kskt/y686XE EdxDpcjwzIskbho91YVB3buDiq//AJVn56/6tMn/AAcX/NeKu/5Vn56/6tMn/Bxf814q7/lWfnr/ AKtMn/Bxf814q7/lWfnr/q0yf8HF/wA14q4/lp55AJ/RMm3g0Z/42xVIL7T76wuGtr23ktrhdzFK pRqHvQ9sVQ+KuxVmv5V+aLnSPMlvZNIf0fqTiCaIn4RI+0bjwPKgPtirCsVdirsVdirsVZN+Wqq3 nnSQRUeqx+kRsRir6PwK7FVs0gjieQioRSxHyFcVfKd9e3N9eTXly5kuLh2klc92Y1OFVDFXYq7F XYq7FXon5G/8pZd/8wEn/J6HFXuOBXYqx38xP+UJ1f8A4wH/AIkMVfNmFXYq7FX1J5a/5R3Sv+YO 3/5NLgVMcVdirsVdirsVedfnbplvN5bgvyg+s2twqLJ+16cgIZf+C4nFXh+FXYqjNHZl1exZTRhc REEdiHGKoPFXYq7FXYq7FWT/AJZ/8p1pP/GR/wDk0+Kvo7ArsVUb3/eOf/jG/wDxE4q+UMKuxV2K uxV2KuxV6J+Rv/KWXf8AzASf8nocVe44FdirHfzE/wCUJ1f/AIwH/iQxV82YVdirsVfUnlr/AJR3 Sv8AmDt/+TS4FTHFXYq7FXYq7FWDfnL/AMoVJ/zEQ/rOKvA8KuxVF6T/AMdWy/4zxf8AExiqExV2 KuxV2KuxVF6Vql7pWoQ6hZOI7q3JaJyAwBIK9DUdDirKP+Vu+e/+W1P+REX/ADTirv8Albvnv/lt T/kRF/zTiq2T82vPLoyNeoVYFWHoxdDt/LirDsVdirsVdirsVdiqZ+X/ADHq2gXj3mlyiG4kjMLM yq/wMysRRgR1QYqyD/lbvnv/AJbU/wCREX/NOKu/5W757/5bU/5ERf8ANOKqtl5/80+Yb+z0PU7p ZNP1K4htrpFijRjHJKqsAwWoNMVeif8AKmvJX++7j/kcf6YFd/ypryV/vu4/5HH+mKu/5U15K/33 cf8AI4/0xVmlpaxWlpDaw1EVvGsUYJqeKAKKn5DFVXFXYq7FXYq7FUt8weX9O17Tjp+oBzbl1chG 4mq9N8VYx/ypryV/vu4/5HH+mKu/5U15K/33cf8AI4/0xVfB+UHk2CeOZI5+cTB1rKSKqajtirwD CrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVTfyh/wApZon/ADH2v/J5cVfT2BXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXyVhV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kpv5Q/ 5SzRP+Y+1/5PLir6ewK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq+SsKuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxVN/KH/KWaJ/zH2v8AyeXFX09gV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV4 d/yo3zZ/y12H/Iyb/qjhV3/KjfNn/LXYf8jJv+qOKu/5Ub5s/wCWuw/5GTf9UcVd/wAqN82f8tdh /wAjJv8Aqjirv+VG+bP+Wuw/5GTf9UcVd/yo3zZ/y12H/Iyb/qjirv8AlRvmz/lrsP8AkZN/1RxV 3/KjfNn/AC12H/Iyb/qjirv+VG+bP+Wuw/5GTf8AVHFXf8qN82f8tdh/yMm/6o4q7/lRvmz/AJa7 D/kZN/1RxV3/ACo3zZ/y12H/ACMm/wCqOKu/5Ub5s/5a7D/kZN/1RxV3/KjfNn/LXYf8jJv+qOKu /wCVG+bP+Wuw/wCRk3/VHFXf8qN82f8ALXYf8jJv+qOKu/5Ub5s/5a7D/kZN/wBUcVd/yo3zZ/y1 2H/Iyb/qjiqO0L8nPM+n65p1/NdWTQ2lzDPIqSSliscgchQYgK0Hjir2PArsVdirsVdirsVdirsV dirsVdirsVdir//Z + + + + + + uuid:e11485e2-7f47-7442-bba9-034f798467d9 + xmp.did:0580117407206811822AB503FB0ACEDA + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + xmp.iid:0380117407206811822AB503FB0ACEDA + xmp.did:0380117407206811822AB503FB0ACEDA + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:0280117407206811822AB503FB0ACEDA + 2013-11-03T14:15:38+04:00 + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:0580117407206811822AB503FB0ACEDA + 2013-11-03T14:16:45+04:00 + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Print + + + False + False + 1 + + 26.990256 + 17.638889 + Millimeters + + + + PANTONE 7700 C + PANTONE Cool Gray 9 C + + + + + + Grupo de muestras por defecto + 0 + + + + Blanco + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Negro + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Rojo CMYK + CMYK + PROCESS + 0.000000 + 100.000000 + 100.000000 + 0.000000 + + + Amarillo CMYK + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Verde CMYK + CMYK + PROCESS + 100.000000 + 0.000000 + 100.000000 + 0.000000 + + + Cian CMYK + CMYK + PROCESS + 100.000000 + 0.000000 + 0.000000 + 0.000000 + + + Azul CMYK + CMYK + PROCESS + 100.000000 + 100.000000 + 0.000000 + 0.000000 + + + Magenta CMYK + CMYK + PROCESS + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=15 M=100 Y=90 K=10 + CMYK + PROCESS + 14.999998 + 100.000000 + 90.000000 + 10.000002 + + + C=0 M=90 Y=85 K=0 + CMYK + PROCESS + 0.000000 + 90.000000 + 85.000000 + 0.000000 + + + C=0 M=80 Y=95 K=0 + CMYK + PROCESS + 0.000000 + 80.000000 + 95.000000 + 0.000000 + + + C=0 M=50 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 50.000000 + 100.000000 + 0.000000 + + + C=0 M=35 Y=85 K=0 + CMYK + PROCESS + 0.000000 + 35.000004 + 85.000000 + 0.000000 + + + C=5 M=0 Y=90 K=0 + CMYK + PROCESS + 5.000001 + 0.000000 + 90.000000 + 0.000000 + + + C=20 M=0 Y=100 K=0 + CMYK + PROCESS + 19.999998 + 0.000000 + 100.000000 + 0.000000 + + + C=50 M=0 Y=100 K=0 + CMYK + PROCESS + 50.000000 + 0.000000 + 100.000000 + 0.000000 + + + C=75 M=0 Y=100 K=0 + CMYK + PROCESS + 75.000000 + 0.000000 + 100.000000 + 0.000000 + + + C=85 M=10 Y=100 K=10 + CMYK + PROCESS + 85.000000 + 10.000002 + 100.000000 + 10.000002 + + + C=90 M=30 Y=95 K=30 + CMYK + PROCESS + 90.000000 + 30.000002 + 95.000000 + 30.000002 + + + C=75 M=0 Y=75 K=0 + CMYK + PROCESS + 75.000000 + 0.000000 + 75.000000 + 0.000000 + + + C=80 M=10 Y=45 K=0 + CMYK + PROCESS + 80.000000 + 10.000002 + 45.000000 + 0.000000 + + + C=70 M=15 Y=0 K=0 + CMYK + PROCESS + 70.000000 + 14.999998 + 0.000000 + 0.000000 + + + C=85 M=50 Y=0 K=0 + CMYK + PROCESS + 85.000000 + 50.000000 + 0.000000 + 0.000000 + + + C=100 M=95 Y=5 K=0 + CMYK + PROCESS + 100.000000 + 95.000000 + 5.000001 + 0.000000 + + + C=100 M=100 Y=25 K=25 + CMYK + PROCESS + 100.000000 + 100.000000 + 25.000000 + 25.000000 + + + C=75 M=100 Y=0 K=0 + CMYK + PROCESS + 75.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=50 M=100 Y=0 K=0 + CMYK + PROCESS + 50.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=35 M=100 Y=35 K=10 + CMYK + PROCESS + 35.000004 + 100.000000 + 35.000004 + 10.000002 + + + C=10 M=100 Y=50 K=0 + CMYK + PROCESS + 10.000002 + 100.000000 + 50.000000 + 0.000000 + + + C=0 M=95 Y=20 K=0 + CMYK + PROCESS + 0.000000 + 95.000000 + 19.999998 + 0.000000 + + + C=25 M=25 Y=40 K=0 + CMYK + PROCESS + 25.000000 + 25.000000 + 39.999996 + 0.000000 + + + C=40 M=45 Y=50 K=5 + CMYK + PROCESS + 39.999996 + 45.000000 + 50.000000 + 5.000001 + + + C=50 M=50 Y=60 K=25 + CMYK + PROCESS + 50.000000 + 50.000000 + 60.000004 + 25.000000 + + + C=55 M=60 Y=65 K=40 + CMYK + PROCESS + 55.000000 + 60.000004 + 65.000000 + 39.999996 + + + C=25 M=40 Y=65 K=0 + CMYK + PROCESS + 25.000000 + 39.999996 + 65.000000 + 0.000000 + + + C=30 M=50 Y=75 K=10 + CMYK + PROCESS + 30.000002 + 50.000000 + 75.000000 + 10.000002 + + + C=35 M=60 Y=80 K=25 + CMYK + PROCESS + 35.000004 + 60.000004 + 80.000000 + 25.000000 + + + C=40 M=65 Y=90 K=35 + CMYK + PROCESS + 39.999996 + 65.000000 + 90.000000 + 35.000004 + + + C=40 M=70 Y=100 K=50 + CMYK + PROCESS + 39.999996 + 70.000000 + 100.000000 + 50.000000 + + + C=50 M=70 Y=80 K=70 + CMYK + PROCESS + 50.000000 + 70.000000 + 80.000000 + 70.000000 + + + PANTONE Cool Gray 9 C + SPOT + 100.000000 + LAB + 50.196079 + 0 + -2 + + + PANTONE 7700 C + SPOT + 100.000000 + LAB + 35.686275 + -11 + -26 + + + + + + Grises + 1 + + + + C=0 M=0 Y=0 K=100 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + C=0 M=0 Y=0 K=90 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 89.999405 + + + C=0 M=0 Y=0 K=80 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 79.998795 + + + C=0 M=0 Y=0 K=70 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 69.999702 + + + C=0 M=0 Y=0 K=60 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 59.999104 + + + C=0 M=0 Y=0 K=50 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 50.000000 + + + C=0 M=0 Y=0 K=40 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 39.999401 + + + C=0 M=0 Y=0 K=30 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 29.998802 + + + C=0 M=0 Y=0 K=20 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 19.999701 + + + C=0 M=0 Y=0 K=10 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 9.999103 + + + C=0 M=0 Y=0 K=5 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 4.998803 + + + + + + Brillantes + 1 + + + + C=0 M=100 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 100.000000 + 100.000000 + 0.000000 + + + C=0 M=75 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 75.000000 + 100.000000 + 0.000000 + + + C=0 M=10 Y=95 K=0 + CMYK + PROCESS + 0.000000 + 10.000002 + 95.000000 + 0.000000 + + + C=85 M=10 Y=100 K=0 + CMYK + PROCESS + 85.000000 + 10.000002 + 100.000000 + 0.000000 + + + C=100 M=90 Y=0 K=0 + CMYK + PROCESS + 100.000000 + 90.000000 + 0.000000 + 0.000000 + + + C=60 M=90 Y=0 K=0 + CMYK + PROCESS + 60.000004 + 90.000000 + 0.003099 + 0.003099 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 13 0 R/TrimBox[28.3465 28.3465 104.854 78.3465]/Type/Page>> endobj 8 0 obj <>stream +HlIn+7}hVm !@Ȱ@jI>dE}{O?ۏ-[jSvIis}B23f_?6cp!^p='S-_Fnה9n-%H͎sRȒEz(^Nm'䜲,Pj;tYy6EJ4;{e +[+=?BQ&E9mP-4opN +n-HSp#2!:% DH "KONΌ*NP̪a5uˣ.2/0[W->*KKIR {JTO Ju }ܚjQܓfeRD38PQ<'J˺<*랐8k<$fW!C%ѓ ]APMx͙G_H(Bэv:nڠy ͺ'?`>pgZ)w|7#}y +:4KKmXKzo-}_= endstream endobj 13 0 obj <>stream +8;Xp,ST<'o#)#PFYV;_8(d\KZ%tnotC7m*hUWQq6aFeSukn\dL!s!>]S:L~> endstream endobj 14 0 obj [/Indexed/DeviceRGB 255 15 0 R] endobj 15 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 12 0 obj <> endobj 10 0 obj [/Separation/PANTONE#207700#20C 18 0 R<>] endobj 11 0 obj [/Separation/PANTONE#20Cool#20Gray#209#20C 18 0 R<>] endobj 18 0 obj [/Lab<>] endobj 9 0 obj <> endobj 19 0 obj <> endobj 20 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (GAG) () %%Title: (RR LOGO 001.pdf) %%CreationDate: 03/11/13 14:16 %%Canvassize: 16383 %%BoundingBox: 7 -246 68 -202 %%HiResBoundingBox: 7.60986 -245.1309 67.2222 -202.9961 %%DocumentProcessColors: %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%DocumentCustomColors: (PANTONE 7700 C) %%+ (PANTONE Cool Gray 9 C) %%RGBCustomColor: 0.11025 0.353432 0.48886 (PANTONE 7700 C) %%+ 0.468179 0.467416 0.47835 (PANTONE Cool Gray 9 C) %%CMYKProcessColor: 1 1 1 1 ([Registro]) %AI3_Cropmarks: 0 -249.0635 76.5078 -199.0635 %AI3_TemplateBox: 113.5 -227.5 113.5 -227.5 %AI3_TileBox: -364.7461 -503.5635 418.2539 55.4365 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -360 43 1.26 1196 689 18 0 0 78 98 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 56.6929 8 56.6929 8 1 0 0.756863 0.145098 0.129412 0.878431 0.572549 0.564706 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 21 0 obj <>stream +%%BoundingBox: 7 -246 68 -202 %%HiResBoundingBox: 7.60986 -245.1309 67.2222 -202.9961 %AI7_Thumbnail: 128 92 8 %%BeginData: 15828 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FF7E592E2F0C2F0C2F0C2F2F7EFFFF7D2F2F532E592F532E592F2F %2FFFFFFFA87E2F2F0C2F0C2F0C2F2E597EFFFF7E2E2F53FD07FF2F2F2EA8 %FF592E592F532E592F532E5959FD36FF7D0C060C060C060C062E060C0659 %FF7D062F060C060C060C062F060C2EFFA92F062F060C060C060C062F060C %7DFF590C0653FD06FFA82F060C7DFF0C0C062E060C060C060C060C2FFD35 %FF53062F0C59537E597D532F0C2F0CFF590D062F5359535953590C2F0C2F %A8A8062F062F597E597E5959062F0C59FF7E062F2EFD07FF2E2F0684FF2F %0C2F2E59535953592E2F062FA8FD34FF060C0659FD06FF84532E53FF7D06 %0C2EFD06FFA8062E06A87D0C062EA8FD06FF59062E2EFF530C062FA8FD05 %FFA82F060C7DFF062E067EFD05FFA8060C06A8FD34FF2F0C2F7EFFFFFFA8 %FFA8FFA8FFA8FF592F0659FD06FFA82F0C2FA8A8062F2FFD07FF7D2F0C2F %FF7E0C2F2FFD07FF2E2F0684FF2F0C0D7DFD05FFA82F0C2FA8FD34FF060C %06A8FFFF842F060C062F062FFF7E060C2E7E7D7E7D7E7D53062E2EFF7D0C %0653FD07FF7E062F2EFF590C062FFD07FF2F060C7DFF062F06597EA87E84 %7E59060C06A8FD34FF2F0C2F7EFFFFA92E532F2F062F2EFF592F0C2F060D %060C060D0C2F2EFFFF7E062F2FFD07FF7E0C062FFF7E062F2FFD07FF2E2F %0684FF2F062F0C0C062F0C0C062F0C2FFD35FF062F0659FD06FF7E0C062F %FF7D062F060C062E060C062E062E59FF7D0C062FA8FD06FF59060C2EFF59 %0C062FA8FFA8FFFFFF7E2F060C7DFF0C0C062F060C062E060C062F7EFD35 %FF590C2F0C59597E597E592F0C2F2FFF592F0C2FA8A9A8A9A8FF592F0C2F %FFA8062F0C2F537E597E53590C2F0659FF84062F0C2F2F592F592F2F0C2F %06A8FF2F0C2F59FFA8A9A8A9A8AFFD37FF7D0C060C060C060C060C060C06 %7EFF59060C2EFD06FFA8060C06FFFF2F062F060C060C060C062F060C7DFF %A82F062E060C062E060C062E062FA8FF060C067EFD3FFF7E592F2F0C2F2E %2F0C2F5384FFFF7D2F2E59FD06FF84532F53A8FFA87E2F2F2E2F2E2F2E2F %2E5984FFFFFFAF7E2F532E2F2E2F2E53537EFFFFFF592F2F7EFD42FFA8FF %A8FFA8FFA8FD07FFA8FD07FFA8FD07FFA8FFA8FFA8FFA8FD09FFA8FFA8FF %A8FD07FFA8FDFCFFFD46FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD36FF527D52 %52527D5252527D5252527D5252527D5252527D5252527D5252527D525252 %7D5252527D5252527D5252527D5252527D5252527D5252527D5252527D52 %52527D5252527D5252527D52A8FD34FF7D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %527DFD34FF527D5252527D5252527D5252527D5252527D5252527D525252 %7D5252527D5252527D5252527D5252527D5252527D5252527D5252527D52 %52527D5252527D5252527D5252527D5252527D52A8FD34FF7D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D5253A1FD34FF5252525352525253525252535252525352 %525253525252535252525352525253525252535252525352525253525252 %53525252535252525352525253525252535252525352525253525252A8FD %34FF7D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527DA8FD34FF5252527D5252527D52 %52527D5252527D5252527D5252527D5252527D5252527D5252527D525252 %7D5252527D5252527D5252527D5252527D5252527D5252527D5252527D52 %52527D525252A8FD34FF7D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D52527DFD34FF52 %535252525352525253525252535252525352525253525252535252525352 %525253525252535252525352525253525252535252525352525253525252 %5352525253525252535252525352A8FD34FF7D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D52537DFD34FF527D5252527D5252527D5252527D5252527D5252527D52 %52527D5252527D5252527D5252527D5252527D5252527D5252527D525252 %7D5252527D5252527D5252527D5252527D5252527D52A8FD34FF7D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D5253A1FD34FF525252535252525352525253525252 %535252525352525253525252535252525352525253525252535252525352 %525253525252535252525352525253525252535252525352525253525252 %A8FD34FF7D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527DA8FD34FF5252527D525252 %7D5252527D5252527D5252527D5252527D5252527D5252527D5252527D52 %52527D5252527D5252527D5252527D5252527D5252527D5252527D525252 %7D5252527D525252A8FD34FF7D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D52527DFD34 %FF5253525252535252525352525253525252535252525352525253FD3152 %A8FD34FF7D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D7DFD2BA8FD2D7DA8FD07FF527D5252527D5252527D5252527D %5252527D5252527D5252527D527DA1FD2EFF7DFD2D527D7DFD05FF7D527D %527D527D527D527D527D527D527D527D527D527D527D52A8FD30FF7D5352 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D525952A8FFFFFF52525253525252535252 %5253525252535252525352525253527DFD31FF7D52525253525252535252 %525352525253525252535252525352525253525252535252525352525253 %52525253FD0552A8FFFF7D527D527D527D527D527D527D527D527D527D52 %7D527D527DFD32FF7D7D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D52FF %FF5252527D5252527D5252527D5252527D5252527DFD0452A8FD32FF7D52 %52527D5252527D5252527D5252527D5252527D5252527D5252527D525252 %7D5252527D5252527D5252527D5252527D52527DFF7D527D527D527D527D %527D527D527D527D527D527D527D52FD33FF7D7D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527DFF52535252525352525253525252535252525352 %525253527DFD33FF7D525352525253525252535252525352525253525252 %535252525352525253525252535252525352525253525252535252525352 %A87D527D527D527D527D527D527D527D527D527D527D527DA8FD33FF7D7D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D52537D527D5252527D525252 %7D5252527D5252527D5252527D52FD34FF7D527D5252527D5252527DFD1B %52535252527D5252527D5252527D527D7D527D527D527D527D527D527D52 %7D527D527D527D527DFD0EFFA8A8FD177DA8FD0CFF7D53527D527D527D52 %7D527D52FD19A8527D527D527D527D527D527D527DFD0452535252525352 %5252535252525352525253525252FD0DFF7DFD19527DFD0CFF7D52525253 %52525253FD0452A8FD19FFFD05525352525253525252537D527D527D527D %527D527D527D527D527D527D527D527DFD0CFFA853527D527D527D527D52 %7D527D527D527D527D527D527D527D52A8FD0CFF7D7D527D527D527D527D %527D52A8FD1AFF527D527D527D527D527D527DFD04527D5252527D525252 %7D5252527D5252527D52527DFD0CFF7D5252527D5252527D5252527D5252 %527D5252527D5252527D52527DFD0CFF7D5252527D5252527DFD0452A8FD %1AFFA85252527D5252527D5252527D7D527D527D527D527D527D527D527D %527D527D527D527DFD0CFF527D527D527D527D527D527D527D527D527D52 %7D527D527D527D52A8FD0CFF7D7D527D527D527D527D527D52A8FD1AFFA8 %7D527D527D527D527D527D52525352525253525252535252525352525253 %FD0552FD0BFFA85252535252525352525253525252535252525352525253 %FD04527DFD0CFF7D5253525252535252525352527DFD1AFFA8FD05525352 %52525352527D527D527D527D527D527D527D527D527D527D527D527DFD0C %FF527D527D527D527D527D527D527D527D527D527D527D527D527D52A8FD %0CFF7D7D527D527D527D527D527D52A8FD1AFFA87D527D527D527D527D52 %7D52527D5252527D5252527D5252527D5252527D5252527D52FD0CFF7D52 %7D5252527D5252527D5252527D5252527D5252527DFD04527DFD0CFF7D52 %7D5252527D5252527D5252A1FD1AFFA1527D5252527D5252527D527D7D52 %7D527D527D527D527D527D527D527D527D527D527DA8FD0BFFA852527D52 %7D527D527D527D527D527D527D527D527D527D527D52A8FD0CFF7D53527D %527D527D527D527D52A8FD1AFF527D527D527D527D527D527D7D52525253 %52525253525252535252525352525253525252A8FD0CFF7DFD19527DFD0C %FF7D5252525352525253FD0452A8FD19FF7DFD04525352525253525252A8 %7D527D527D527D527D527D527D527D527D527D527D527D7DFD0DFFA87D52 %7D527D527D527D527D527D527D527D527D527D527D52A8FD0CFF7D7D527D %527D527D527D527D52A8FFFFCAFFA8FFCAFFA8FFCAFFA8FFCAFFA8FFCAFF %A8FFA8A87D7D527D527D527D527D527D527DA85252527D5252527D525252 %7D5252527D5252527D52525253A8FD11FFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FD10FF7D5252527D5252527D5252527D5252527D5252527D5252 %527D5252527D5252527D5252527D5252527D5252527D5252527D52527DFF %7D527D527D527D527D527D527D527D527D527D527D527D527DCAFD31FF7D %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D52537DFFFF5253525252535252 %52535252525352525253525252535252527DA8FD30FF7D52535252525352 %525253525252535252525352525253525252535252525352525253525252 %5352525253FD06527DFFFFFF7D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D7DA8A8FD2DFF7D7D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D7DA8A8FD04FF527D5252527D5252527D5252527D5252527D5252527D52 %52527D52522E7D7DA8A8FD2AFF7D527D5252527D5252527D5252527D5252 %527D5252527D5252527D5252527D5252527D5252527D5252527D527D7DFD %07FF7D527D527D527D527D527D527D527D527D527D527D527D527D527D7D %A8A8FD2DFF7D53527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D52A8A8FD04FF525252 %53525252535252525352525253525252535252527D5252A1FD30FF7D5252 %525352525253525252535252525352525253525252535252525352525253 %525252535252525352525253FD04527DFFFFFF7D527D527D527D527D527D %527D527D527D527D527D527D527DA8FD31FF7D7D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D52537DFFFF5252527D5252527D5252527D5252527D525252 %7D52525253A8FD32FF7D5252527D5252527D5252527D5252527D5252527D %5252527D5252527D5252527D5252527D5252527D5252527D5252527D5252 %7DFF7D527D527D527D527D527D527D527D527D527D527D52527DFD33FF7D %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527DA85253525252535252 %525352525253525252535252525352A8FD0DFFA85253527D5277527D5277 %527D5277527D5277527D527752527DFD0CFF7D5253525252535252525352 %527DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8CA7D7D525252 %53525252535252525352A87D527D527D527D527D527D527D527D527D527D %527D527DA8FD0CFFA8527D527D527D527D527D527D527D527D527D527D52 %7D527D52A8FD0CFF7D7D527D527D527D527D527D52A8FD19FF7D527D527D %527D527D527D527D7D527D5252527D5252527D5252527D5252527D525252 %7D52FD0DFF52535252527D5252527D5252527D5252527D5252527DFD0452 %7DFD0CFF7D527D5252527D5252527D5252A1FD19FF7D52527D5252527D52 %52527D527D7D527D527D527D527D527D527D527D527D527D527D527DA8FD %0CFF7D527D527D527D527D527D527D527D527D527D527D527D527D52A8FD %0CFF7D53527D527D527D527D527D52A8FD19FFCA527D527D527D527D527D %527D7D5252525352525253525252535252525352525253525252FD0DFF52 %525253525252535252525352525253525252535252525352527DFD0CFF7D %5252525352525253FD0452A8FD19FFA8FD045253525252535252527D7D52 %7D527D527D527D527D527D527D527D527D527D527DCAFD0BFFCA7D527D52 %7D527D527D527D527D527D527D527D527D527D527D52A8FD0CFF7D7D527D %527D527D527D527D52A8FD1AFF527D527D527D527D527D527D7D5252527D %5252527D5252527D5252527D5252527D525252FD0DFF5252527D5252527D %5252527D5252527D5252527D5252527D52527DFD0CFF7D5252527D525252 %7DFD0452A8FD19FFA8595252527D5252527D5252527D7D527D527D527D52 %7D527D527D527D527D527D527D527DA8FD0BFFA87D527D527D527D527D52 %7D527D527D527D527D527D527D527D52A8FD0CFF7D7D527D527D527D527D %527D52A8FD19FFCA527D527D527D527D527D52537D525352525253525252 %535252525352525253FD0552FD0DFFFD0552535252525352525253525252 %5352525253FD04527DFD0CFF7D5253525252535252525352527DFD19FFA8 %5252535252525352525253527D7D527D527D527D527D527D527D527D527D %527D527D527DA8FD0BFFA87D527D527D527D527D527D527D527D527D527D %527D527D527D52A8FD0CFF7D7D527D527D527D527D527D52A8FD1AFF527D %527D527D527D527D52597D527D5252527D5252527D5252527D5252527D52 %52527D527D527D527D527D527D527D767D527D5252527D5252527D525252 %7D5252527D5252527D5252527D527D527D527D527D527D527D527DFD0DA8 %FD1AFFFD0CA8CA7D527D527D527D527D527D527D527D527D527D527D527D %5253527D5259527D5259527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D5259527D5259527D52595252A8FD34FF52525253 %525252535252525352525253525252535252525352525253525252535252 %525352525253525252535252525352525253525252535252525352525253 %5252525352525253525252A8FD34FF7D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %A8FD34FF5252527D5252527D5252527D5252527D5252527D5252527D5252 %527D5252527D5252527D5252527D5252527D5252527D5252527D5252527D %5252527D5252527D5252527D5252527D525252A8FD34FF7D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D52527DFD34FF525352525253525252535252525352525253 %525252535252525352525253525252535252525352525253525252535252 %525352525253525252535252525352525253525252535252525352A8FD34 %FF7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D52537DFD34FF527D5252527D5252527D %5252527D5252527D5252527D5252527D5252527D5252527D5252527D5252 %527D5252527D5252527D5252527D5252527D5252527D5252527D5252527D %5252527D52A8FD34FF7D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D5253A1FD34FF5252 %525352525253525252535252525352525253525252535252525352525253 %525252535252525352525253525252535252525352525253525252535252 %52535252525352525253525252A8FD34FF7D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527DA8FD34FF5252527D5252527D5252527D5252527D5252527D5252527D %5252527D5252527D5252527D5252527D5252527D5252527D5252527D5252 %527D5252527D5252527D5252527D5252527D525252A8FD34FF7D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D52527DFD34FF52535252525352525253525252535252 %525352525253525252535252525352525253525252535252525352525253 %5252525352525253525252535252525352525253525252535252525352A8 %FD34FF7D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D52537DFD34FFFD4A522EA2FD34FF %A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87D %A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A8FDB3FFFF %%EndData endstream endobj 22 0 obj <>stream +HWnI}CA w껪w~%0DCvZEv}}}=C3 +#DQn8UzmSvٴiհ~Ń/v&tU =W/M=/ŃoM=)Nm~}9]Ɲy5ZN󶩚vM9c3GC3lT Q,;4|WӰdTS|!w3sbu65lOAM뷓5 'GD[S@7|yf<]ۥoƕLwgW|.Qu8Od4*(w㰿PtT yZe$ʾ4؇Bub9Mo۷Vټ]}ڐzݝޭy5@+.ﶡ遘@rSqW'tϲɬ#ڧ.:e nwo邽-4"w-tg_v^W:]ݏ>]iꏦˮƇ16n'Udt?%9?]9鳶^2h6iF͊ІCʅM MtտU3ViOMR\WN3Ϳ %D4s5Bj^-7)"6ӥF*?+qԇۤ2?i%5dN{@]j0]ՍGNa{q.ɡk4Fw3tuZ1bQ ź&SjuX&Ax߃]׉1~O෮7^WݓK!+u75VٸbL$CF_Q]ٚTM+ƆCiFOqk8'sܮϦW]ٷpbJE}sJ; +qRuotJ+)>^[_U.8esݕخOo_8v%K+gqpusٜ0ٛv:\N@d}`/^ė?3+$?D6&㗃ȍdC-Px&^8K!yrB*C#@;%KLL%)B`zi;#[d WRJy8k K*Lq|2'>%r\y2irD\{88\=.Qd \BeCJ&d``3DTB 6qJp]zXa !LA/(C"KRڂ&RGYs1YǺBL!/ 9ušx&:\ +qցJiHdlaZS'xVGIE0Pdtje7+!Ms@h;[P\p4Z^}I[}x=r^Mf|Rɫ:ojOw(/W[~W+w d c1 +ؘGN{$ -({p%8IH +dT}}'$eCdu]yP + tUJ+\$`$UE΁ +R~3d4pr)"/rJZMؔ +8RQ:PXaŴFVbE#>F>ƑEifAU$1Tt. 8"/Q("wd=t&KfEQ+ye"PKP)g`ph @2> Gz`x`H~G PCD"ӣ"3( .%;Er Y9za`)*XG*匒( (mIUk$ YDlD1AYU Kezj +U@u ЊH)ZĒ+xacU(9GF q>E7mޡ91$!"++{v2wsFH6<eSҖJK>0a"T:( Y5J>˲"!jMՔMKM &|T.OyP/q2p7W#"QEb1G# `a-XvzR\Ky !wЋˆ຀Xh{-Xj/#i)C6 +hCx,b2Zg`!Rs/|TI((( F<">R(F9J/L3Ox8`V*Bt4uNs - +ָJi 4s. ȝd)nTa)KRCtp" +B#W5P&$࿆gR{^Ą H̞A W~HGc? 5aĐŤKlYQ U aN5gb# h,$y@ +-YHowxU]Qw1y~h_46ji(2~k߿(skXkZHhEm?AmŪ'JC^8/ևo#lali9,džV_(CmKR1SL=5갈jD2Ƈm*P9'L2U410f+B0'uX .|&`uu ,Q;Ľp(5O,!}7espuZ'Q">`B} u@U\"k8n&-4NTa'3Lg2Lk!PmA~ Sb4B(fv52"^: ik gtS'*m"˶J= +tAQQ3w!FF1jq΂ۈfl,a ]=FS^$?R0vseyP= Ƥ2%4kq偓%:=׏I p9%#[iqfl҅E\'1X]-NiLb3ҥr9|q1!6:X4@^B- @)JdDWϴ|0M +k5OO[Cka + DѲx;A ,[?UN PeF|VЀowd8W^ݥBj LcRKd)lRp1L;N('kg ˰QQHp Jam +Af>#֖CZγ4w'լ Nq5BU3zlTQiS 1Y[CEuS$53̲lm+Ηafzk!#QiȵX,Ļ}ר"Q51$:ydqpU=,@{!ʔTG !Dk̈Z, dX ۦQuv {^BDe)xZCaY9Fӓ1ó-dxBUL7T4L%RBZgҙ Buh|JK#FNz`qf É ( J3/yRDkauf \ģpޜYjd"!wͶ#@ڻ}qKcor>|b: \aƝTB@;<XTte TSaUM*6D58PCՄ'0):rۮiQQT2d29A&7; jXD"~"dTms7&屆ͤѸRay{FTz+ [FJpTk!b@,a#Nbcs*m@7ر ÍGt@ZqLHG9]SQ-`uP냩Wj!ϓȧj5P_Ar*‰^{m9K4\q +?DqGK'v'ܡ<*JvΝ' Wy2)Mf"o_[5Vn-.Ju؆i/E'_k!`~vSsMBBw)xy TXw%\#,v DXbVf F>Y ͚n2er4 +4V1T6mW,Uڂ܋j@(%d/46 g#ӉJIY,3 Tjn`|67,} G?~Oo^zt̨Թ>ߟ<|ӟ?uG=3_<^>_z|On~/xI?H|^-.3=4~싷߾n^}r/Wz>@?_:WZzsjNO:=/0rt +AS쩖~~Ck|w7Rpeu)q01V>9wЂ^ݞĒ"$LY$$ä fgrԏ5胯T%PsKx7p0kr:)K5WHA }d*B2k"uQaz|oǠK̿훟:'2-][秹Xԉ=G@$[UD +kVxF9k Ǯ2ԫöGte: 1!LjWN8}RG)ۗ:wun}tu9U@rCB)qwH&8q_<5QfrFUE[ZA5GKt"=v{S͙ҲC|r6 ۜ$3ٕpĕᾍi{1YX9+k%BgeTjjՊ0W^]M}vw:lcJ[OęclfjۈnIk;OG$N PzU\;%Tn.֣r=7zܮ{{`Jˑ胅sА?ک^W!^؀j鏈x$ BJ*:?0O$Ig>LMz\<)e&R7Kds1uT\DFeO_fxN&2GW x] M!08=K"Te"*LS Mn[ Rs>/g9'G#1SUǮzjE[|im}4Dzn.b٧O{>E3^vr9`-OU֊ݿynp = Z+@4ț(:8K] YwbqSyxG?lbWl*&,f{XGT3ަ_[ٰKnJ^~ҺJ!)}ZӮ߯qkM=#Af}}%5TKHF$B{G[ ;boS2A0G !a` +ѷʂTE,ߪKz-( _h6pA9g=+SF ܝ %G;;ׄD%p %୎SCwD Y%$DqFbsC?Γ1!_}ؗ'n)0fX-@Ma尣K d[B0zL +xTO;vs) +@N~eu9}H%P/ rX0@:xNJ>#D^04\E[.nosp'r~uCPwZ 'IEN#M c'giġ B=NuuΡ\@ֻPZ:ꏿ 3[*?.zE3U,jp)FABL˚f6`mX{3@% .k0ds;=ԍf KVD!t=)vcw_AMzيlJY'į[sJow~PhU#۩4 k!9lm` iT6C e6no%Z +H̙ZIYb)팛̂d?txZYJz~w7Io.:uZ_>OώadGQs3C]FnKm*aS];SShpj>]L^ux؜Ƕ>+9 ~TWۤQ0WRq +a{iFVxB4oqYځ)Nro %k%PD"1N3%N0Mk +w;f?!dD?9eN؍wV0[`df+)8Oh~6e3yh2)U+9Ԯĵv +Z{1ԜQOԊJ mf%aj+#z5d߁;̊AEگ|`?yMt|Tja*: RkKmg/ wc +[*谥vT{t^?HUda_j XJ*i@wDv tH|KK.׻~\qإO;T}+{U9 +@YbI% t^C 4-v>LyZ*$]4}ډU>2R}+ȥ_H@Zv JĒÐԤXHM`+6%hvPKƽ.y`1ϸR>ql +E*T̋މb u9!Ҡ_)&GtuGmdުc#”ħ 3\R?kV+,%:˧ztWO]L=?*/g;NF-="7$Y]4jS+A`,J18=<]#'n!k + 3{{M-aL9s#ߞE(*yEU*z +=ɑM_Im']IJ:C<T!  gBE|v#4wwxo_ ]m%;)9'Ō]>T"md5Vy%V"h 5%f - +16H3)ȸ9 oynAR8]Gnxg`amqHq 5ޑ :WʒАH f޻,[T1HGj*ciе]X^/xY"05̓}3ĭx<1Nm#=sh=q!{vomp}jf.}>M:VuM81֝b+XL&,Z#s<ևd]s6 A +w 䔣bACӲMmڱ<?I/m3]n9Tbd%ե!:64~"_^+V "fϟX"$xtvS~XɃ/jeZTwvX;>]2]jI挍~!;wL?"0dXZ./o] FXאm䳕\M~6oS/Ur%5a0OXWQKT|Zvz[~+eÙ_7rJ;WX%WoC!כ<ϵkVNEs̈́_1k!tZ7u51DZYN$8nv6[7}oԨm `}fhDK?Z0>iSC>^v~Xd-2MZ1Gψ)EBM$!3X}^nmm5{%јzLG:ɇ?=+hN(mp f֭*)|;_|9rIEOPwwEZAV3If)͵K7Tms!(r.mY.n`'ꦂ5u#2T7y*$Jix`C[37t༡y-*؉uP> VA@466x"%e#M՛>=֭&`ȱ} +yys蜲c0P a ۂW5Jt\7Ma#S䚄UT0ڋyrK4t-5}#τ-}D+Lŕ>#X\gĚC8c"[袼XL怢G(p;G 6A@l\)m<H^^agpiֵ~Ǹ:}*1{jD@ +*iah%}Cj~j3W/6]%;X]nfiQ Iub@QF(lf (bNdO1:Fd 欷5F QnG@P^O#*>;YJd +מAL=R0BZB[Rȿ~~{K<=##)\PYBIZ + VD4sѲlX3n&wj} ʸ-,3 ]gA +)aj8Nqg YB@e}|(-koesNryʎ0 k"fZ'~( B !$/~G!/+S̶ي۫뾚]Y?ɾV_J .fOU}(KW\:Lǯ;Q 鋸-M$UoC ~ݭy}N'ؽDb#=:4M%u/ N(̵%[0L=ї|I}\M>Y^ ',8KTMmR",7MR;¹ iCdkx;< ڒS+z6m`$ h0hCi<M@Hhͣoq#{Kwm +?n,Ok-|5(L ʺGj赊:_p_FwD(dHՠA~1HJ`)JY@:ٛu@CM X[)`Eh4e4cG\F] T;~e/]:p_fno` b_:ە%6ԦL>yi%*>qhsPUS,dL 3U]|K,%|5'}X:BA>NPwj}e\G=<fy@#s;bU[ItfUxʲz`VT ȵM8qg|u[bZ>B)ooU 3れ^ +[~/SGg}PfS*gDhnMXX '>;ZW-/l9dݏ)vM෎)O'd,+;57BCeW`Ay3Yk֢5HU  ki[}a&jPi4N^&\e:/1'Q! < gc@H, xb5Xb/ kL r! kX#9z&A{;,Oņ2pg*q#ʺ3)/M O2 l*G3ޞ6Ib3u@$<"7ljI?!U[Zwa͟@;,m\UZ;b%Gy)%U H<-T:)47 + +sd>Ē (Nd¾l4isX^G|gyul8lm+yu=g_tMWOP.]{8s^m+vG ?dPK<$lFȣIP<3 +WR.ݽ $\]u_yR# FGz{B7,H%MoPQ9{VpXr)a tc*|1yU"gݎZOp?q! #- ~t_DB 3ЖAuOBx&{m' Yp=El$CyS(1d), F%s'NeDOGe&!8[6J5 +ciCfISH>;[vC*2 øWv[_aE$&fu5ci^R@EsHq+sdMO*GϠJB6f1&ԥRK&&nLst!s ye$I Fdu.$*Q񾐓@AZCG5> M.[P!r@'Έ4 ,όa|YD\d B%op"Q5S9?yz~-e2ktyMd!`5tx@(hdN2)`utQjicMLX+3{d6=d1>!s~u8`@ԾBa;K 1H )L !шhA6PaɃd/6 B*tO8Ȇ=yb*=0 i!5o܉{#2_WY)*3{M,|>4R;q8h}":ӢXqhh(:@?6R}̝X:#|'e +,]7'=kԓA^K(C`LW1PPzmJb1XdPr nZ҃| A'YWQ$<_a'yjk)BZIYf\ꢓ= +8K*1o?@}eLjIAe. Un bk8ak+S/Wb b>(@V jP?J+MYL魵5zORv//Rn.Ș8>(Ƒd-btNZ/ixwPgdG\d(u}N$(xkH !=$|# W p":/o iHE- bt#˥Y%Y-Q!#[blNJnByB#S89.K(7u\ +jjU)/vx:4мޙ{svgȠ칾3J&9GO+X 'u/r\m)6,_j(yk,J\ȸ*Sn&Z<4IbkT CvPQѓYEdsSb 6cwFFĴ#KK#mPYq`5m1Y +_8Bc'Ug#f忞#$5g* +FAiCZ801܂&+i!e(h4.('OI1'@⧴؏x54aWlE!=+*#DF!lTxmY =NlH !ؤr 9&(]!o(&T41 tV&lHLd j+LUi 96s- + 68!K>!KhÈoD&Ml$Tzlh}%ۤV>PH0*g5xAf;7CeWF 0yka\S5EZ`ér:8|Rsңz + 3;CꇧR̀ˆVڎKR`e p5fiR-.\k1Ys}؃ -6ͺ:A)]ctA` m$sܬИJ+ t,لå݆rʻ 2vcR Ldc٥`3y;cIǕk{9zfaI>Ar[==C=Y4I   " K7i6M"̒m4_\43a^8 q6S-P̩\%"(5>.= wiI)`Ӈ߬:t5ޢܸB|pz{^;3_*^F=Q$ƍt ʁWfK9uV4%۝oG=hkF!Jyo[ ێRO(pyҒHsԋ 1:x)B)ch+VZ̸^cblhU'$)׎Tl;1~1bk.y{\gS`L%Jz(3L5|O/m\G.+Ǡ\a첂Ƽ\Q0|?I>M7 OWp#~@7<Yq'SF'|83?DUS"'s4Z{xcOc izg*?+E;M?k߽ooILAQe'EՇnL4o>(_`|{]q\YUbJ acAfcb%(!gE ~d`_1֞u\t1]v`IY*T2df5*ⳍ]z\եL3c _P +Yg-(6zhΤbե[HǬ Pb5,KolGLTT4Q_nzVB;Qm]99m K vSHu&g32bH"57e6M.ܡxRU4Ԏ:Wضhzwn,vgۊyh0gCFᬪC>Hᢀ8!&=nge3e9|QEpzuso :v+Sw)eH .ŭ[Czl)`A#O9U6箍zdqV4# JM_lYrR^V[YU>așw{ocDϲ5YS}7n?^~-DwP ,:@ +6qCu1$JvZm-X6u~]K]w bbo.Yl;һDjzY`\;F45hhVtЯ6ZGzF^* j-zIte,EJ⾢z~taEeJm<,h%k_hu}T@mUhn ^2c"2oHV%LrEjwͭQTFaT0&hݾijHN=!Z >5D[J9ƵWvxj+9}cx0GN(Bqd=X|Rᴇ5[rRO[\m\?1vx&9r,+Q,b; Ũ`zR[6^ϐb\O_JmWygDs\=@<^;;E{кlfN<@ޜg#^+]9R'f8Z!l<"q<eT/?*og7Ax6ls.ù\k<7bYL(՞NcG187Ճla|9∿<:0qdizK!FHzi kLY1Ji#_\c%dKaݴ>ޢ'a,]!hv%_!axEUO8)n=Fb-t ͺpi<Elf  +ޡgxx‫}2*u\Mo5=:'wheg1Hw;yJ/QA/sf->kj,LͲ[eP`K<`ZO`1V<yŰ($`ۤJWפC״hWhUv  +xBQz6sDP6e9&g:P<̝)s 6J5਀O2=u^|XglYYXLjrmE' W5 t~DcC#|˝2z=.sOa?!umN-+e=Yaw֓u}ٹ^N05bF ֊qQmzX:RjH'&xT,TgwQm}B{*).p5-vOJ;0rt>ATD2)A9+b ԍQ$_!A\ ""x}q*np#tRTqξ`W'I+lOq^|Y.C+&;yog%иdO{J2q{/L7L|C˒sgɏПB~`Ldz7|b㇧k9i!_^w#|x $[1뱆X+T:׆UK%g; c=6#agץ-:7MʧI#5[p@%KsFHm̎Ը'Hfy4poCR B5޴X:4ilCdLlE!弑UȐV9<9J|u򐈥\/,HGIy@L\^WXF?Zѵ9g³R֐&Y;$J5TCHM"^a-Q/ +o%S»ٛBJ33RB;(sﲎzXn9|VH_ӸA'cU/a.Q +]g[w0h :jX{c=wAdGPXׁ|A%,ݟ`l-Y.F[@[M!;;4&f,dv.OsϞsD'Wv endstream endobj 23 0 obj <>stream +Hيa_Л"wxUxDF~"r(7sqŇQϿ5/I/n뷗oݿ/t E>JT` t}g#,ېl+5;" V6ABs9v`Gugq*G5”SGUIUkz 7mSsH-[5H,.#2B!J29=1#O2"({J9*Y,qLY#V1rpU&|1 +] ^݋5<[O%Lr񊺷WU ܉?9g SKQ}Qcg7LC &,/Twhh ΁cJcqtaa}?:ܔWǡƍ ʞE=ڡmwDhVPKmPܢB~dl!d&U^VMuPg/UVm¤i}8A>o9G:ah@+FSIR U|RW{ڊ 0w,l1#DlȦݾ +TK(ntM&}"RVi7tˁE+#n "l*,TKw4B/KPNswJpR/w n\J9.bXl*@o.V˳ڭKi8ԩx.wY`BhAPF[H9\gV@D +iJ @o)ŌH[K[ұnM>]h&^^ƑRr>SF%]e2zLY瓵6 6w`h ];ZώELP8;$[72>iK)͞G3 9ZD/ Fڢ%±*tإGb]%ŝe]X",R#KRA߷l lۡG[ yF|2Rlκ͙Ι#2 +u°w:hXq6+MHfKmD3(Ŕ0&{Y'X,2fa;WF9F}6Jghɒ +^?0&fY!d7.jKw3q~Co[* \9Yexznq0qvĹ7f=qf"*;n6fd]l8 6o+e +˩rWE3LK +=l]Rhz +*֘D($ m[!ZTQLc %Vb>" !b.7T=j0-CXnmgnpg-.9+uý /<_|Ɵfד\ƿ+_N +/Ͽ5o/I/ oҢ<3ì`ag#ũ,7LXg&(>JUXMzNZݶsEYNs;QvOa.c b:h~iIA3%p\ϭ>2ч>ӖR/qrf0mO vo?fɖۙaNw"ZnQtXRݳFn;xY123:@{oeV?= io#z܈&Ժ7#,>pɠ#L"!j;ڍ7큲M̦Z fڱtIֱݤBV+xl[(m)~ \HN S7X'DA"FkSGAڳ|vJdFIyˎKX z x*Fg%Z2'\ujTӈF0u'jWȱ[Ѵ@+NݽLW wųRz._ba5}AixޥOTBFb+p*o"n.&?HDo#`OLP} ՓwEL0FS*! +Fud,gkËUdC>@/mxz,xyʇn&gShViZxغ[ ?^d,2v\kŢ s +-nZP0ұ:m+\iTtcgnBD%mZGWnA"8jCY AIņhFx`V0W?mAt@) T:WG8 +댆 ^760UfzImfᛰFX]P0V{F `I/캑+ Ei0g0ÁLsgVuwU7Й#k9:k6H`f lphUck1 n60d9(6Iͪ` k@}-N+_$n1̬s'r|q僇Gg'WgC{D{iߜ?~ܜ\=pv|ýw8-) e1e>ڝQQ?]_]mvdd}~}||jXf3|9Rl)g؀N7oө?"vwu/i2#h(wޭ?닳^[\Ov0Z|˟H:)'!SBU/C"zPC:r:=>92e9e]N73?d(79z}ݮ/6luG!dLH |Xq>Zهh5? ]wtRJGt9HbJ}9$'x8#6o{"~gR|Q8@\m`{d"L+ׇ@܇e&;cJ]oI Ƙ*rzBK~&`daQ + ++[aܽ䵞T3&V5ri_b9@ZʑƑPZdz`| -eM~Z-ӏ)&˙"˙%4pѢJ<[nȨyFMz&a<Mڗo0c%ڬcs ԰]V.0#!X +qr +:~hѡh|-ة0n`Hog6.^Ͷ+3a PC(ښ|v5%,5~9zJ{)b[qbQc(V{oM^}Ga`5{ )a?rd7=,/ŭW jCRXصj7y>ͥ4 %'4-1h߼~/s.wr @/ f[wH=oݰFՁg(.xŜ@mK{e[5>E!u覤=BXpZq(B1dZ +#PZ2(^VGv0aU˔lL[dz25SjW d5uRbf{GфN#Z%&1ꆨVb|f-; U5ϮO6t j7k돯6l67d> qɗT!+hHA[>Z?r՘ iȋNZͥJ5:,̡hA+е +2Q]~Qzbw9 ʶS*h:KKLg6 ML5^P=CqBQyY$ROT;ڧ8RqX"$yXAϠL 7G(}C-vD4wУ2Y"nSA]&0P51G$n%&)qZ&poi# zJjN!D%\us?zg;Yx}7.ы@J !V;=^ߋ~JLlX1S)CG jG|Z>df8">'L~#[bVeĪ3kOZ1x|ˋ!WW .X\o"MԔh{"K)^҄Ю+;4@54b3uzs0HzozM GWh@U+|HVh&{xT-Qy:hT[ 2eA$YZ۩3g̺K0Vtyjל4R{\N\fh{$J[3%uV{3̄!(} <ڧxcq>%x:Rݮ0M Y.1uқT7qIMGeOu +]%f~$ +16"벰J(GcEc\9)[usD!J8iZ]ТUwYӬ{X%`HҺ!4[sBFfHVhIөIVE49-"&> \.SŃ%vمVhM]bg=U>zq .U>xѵYAs.R"& Cfy{DJnHvj1(îL>-cuӣD@WJ!Pfw6D$H6v6Lr0m}:W@^[%((}i +uLsM=wgQY(D-xEҮ$_! LYC~%ABU4Urn@X+kD +cwq#?V@19iC-׺X(dI + Dæ.Jz{3q*&=m\DRݐ<+AK^4E?|%w/ky}~Wk\"T1KW(HO gm 8)S _ txϞ4K_졬 +sy =9<>M/Txpk4Zv'&5*''@6ܚN|-9b\(m/Kٴ (M3!LA6P\|FKP)ǃ"}兝#Hσ9%Cר9 2Cpkoe`$F Oop!gQĴ (ѲOpwˀlnM(wD+3VD>rDjp(z]fIg m曶UM]U3r}9dW?=[`_MdNSdX +A^)_Ě P0>xh}_ub)aiAuCK'D|_ݗt$6fq=qJկLGm@]VZ7}(L*țKxqU +l`gk|s/ܖ2m\K&/N._KU밭b:sGGz,pa\2TD>UsVJtc7 G&^JAkqY NqRm`V*>ȍFXʣwV*dPP»;(LJ,[i٨\ozh v9hjVSjD5-j,3 Rzq?b#S+vγfS();ceZ=f~"8N㧱„ƍ*] hPGƦ{;dSTry)iZ}`k Pz(nN}Lڋ~JiJCTGZy)#_2Q@jcHbY>jdv_wAnJ6JNYŒM)(+f@EvGuzdrHY-wXu+?I*4HLK t R32byMA_ :Elo|\[6G-LW'tv6xw =iGbU;8jw1 ʼ>Wk,;@ ?%b;+/93w:9E{!ҶT)*v*ëH']ZX6f[F$S}cS6POږ^i=1uR.μ0_Jr=n9_՞f>TW_¸ݠճ탒t !)Tp 8JQMqwӦKtt³H;]KZ'\{k*vj?ޫv)n>C*H-P`{ql(X'SXk!`}^X'GwB_ճh)V3Ep1>#fUMF22#1;aW"Ț" g /sA'QoFU(s*l[F + [J)5(w@F7 `@&ꢽHP rZ;8]5XM,*&P訥@nMxw@dl)&\` 8Ѡ;D>~1_Acr QîF"B!pDfG Z )Kؙ/jp $v^0oK{'%0=Y(* 0J#a.Q" +H1(fVŸB)2/5҉9YAv7/Q! 5s{DZSfBO`OwYX+6/H1l&bJ~#S' +r66&>Ъ丠KzBR(Br=< 0&1u48#r@)^<̖PFAXO Xb2rt-(X.3PemCJnX "u<ٚ +AG$ 3.1=j (URJ rc}d*f+Iozf'`EbK'eFF?FUQ}DB᳤Mr7&!EK8;D58؎1b4  Q6%4쌄*&M]Yn08E1,[$&@l8LSQlXsv0,lxjq]"ht(y+5uHJ}~7cGrB嘂7ߑzLdGTBOwKKi!4DŽWҲ + lY78uZ+y! ^rH츃܈cFTס C0Dވ Bm( @2128G Y&%1d L2Ft;  ̔B2^]!C^ (LB\GiʮrH^Fcip&E[| =X]h8 /gSIA uȐA a+u,9#aB" uGJt=@:Pl!^'ɘ(]Z_!< g|-hA" T!deHyf"eX |X V,ڑ=R[!SZcsJED早vQK(xH3'Aq>.#̏,])w 6e+V4_yD# @L&ѺE=x W  Gfy8Ase%)rkzL#eV>/ñ)lb3Pj j: +APÄ,ah$jDY1ǧ =Rڪ.&D8q x(=SLI@l$dH߹׾fkۼ7D`t H4-MQL *IfA7n1LPW gZ&1@9 +9)~,Sjj%N=wo'a-kGLY3}-Kgͬ쯺Y|.ksm#V=ſ'}+GKY=[__:m֍\re*<֊ $*?ӣj_Wˡ=rt8z㶙dzmfjutyjQ},CE{_/|7K6^#/骙׋ Ry7ws95~r 6My1z7r}d\5W&'ț[Ittڎ? İ?K D$do@Mlss +8?xrO^T1$^r+0L4Ϙpeo9o945;_v尾ZFX=쬕v[H훛ُ_C؃OLۮ.ISF2ŭu9Gw>`rwL%Xm܍qD"Z8Di?0XM3 P|7(k?W?vйc eߊ`_u[/&W]noC.ۧzu?ҽMp.m}ٸG_E"pfE30u|,gӉV+/cVx FIr~yTz9?я8hbXg<:j=2ȚWTxw/ƛϘ~mwk}w4ws\^fb6."|j.;ӂ=qpvA^ /Jv?<.AT7{twMl_2c~q¿ٯ,:??KLA֒Ce2TNj(Ȓ705oݺlLbs9Qݽw^-+?EBSgw>되=.%TD\֞ϩl  +ɼ7.|:,bBmFAWZgJ&4<$\cә61Am +tV_;{9ɳL/YSguj+Hj^Y-_|U<Ckm+N䲳"[H&\L —"_<&ഢjjY&4K'OּOH^G)o}*If(g!zMňG0k&QF2z9uj$ yؿQz@v1c4Kf@ΜI3&މb}3y$ْ#_}y + C+$n]NHX ^%8O `mv}ӿ7Wرy2>^ɎW+|a(w/c_Hvε?X*Wwl]}x0cXjK1qG,O.5޶-qJQJG)RRR̆J1lb`s]~^B`=SVѦm}n||a} p(?Js26js<4#ϓiDt:NbCG'CzY$vKovn`W՞wwIo}y +ԒBvQK K֔Z2|')HOK G;2f Y) s]tQ/)\07~_/%bă:3em=N4IuFű4K׬$]k-v#^xUCRIKN/ N6ngYJ!c?b 4nɱdV QkB kB(O:{ t};-ʁU91=-ݭk+OۋTU,̨ws=?yޯ[_l~Nn{EQ2^>9a)ďԇA~E|gMV 麘QhBf$HF/GI:KoJ)a yؿQvbYiV+GS>q(9f yf0ìaOS)CTѦމb}3yg}gOUBPLH@:xn35 +\ uCyJAiWv]T%w uMӤbr(&nc M_Uɬ-_QGkb- (^$la%ȣ,8GkOqT\['G$*UJ+R5$l/Bo;ɸ`6ry~x!n.(~zF0}d9O䑵+"HB7FYAلQma.&A=A KZ= Laz$<wy & "ͱ>k[0r4V_E\X߂0 n(!(oDY11CM{\@1+K^tgKW HÞe n [Ac磌#bZ!˘E9 şy[ͪYn@v;s ŏ³Ujeb K8Ա%D \]͜Ib QaԻX·P:EWUo.OkV iHȗRcMK۸.Sߒ+dr q |8lk`]V-\V.؍ Q4-{!6d]-u[@W 8 +N G%kl{pu0M]AhN+v| +ė"s#nغس|gPxB8AiɄ>hbBf\R!~>H~Dq S͓"߶:fT5V|n:TcaԷp=ۄ|G},ڜ07L*k>2b964 lY1ۆ"mR MLod!8:8,LY\ 80 n,n08gMf0xo6a&Lބsצ`fQ\&ln. 3)iK{2u)AdPʛMI+I}kɮ⹞~:UghjY2TT׵ޖq,$;)E;lK~HRP/ +=J<8S`rD +R{O"tB*hP.]\=]X'k-GT1u}|l$riJ8Wx3O=ф9Y< 1c#pd?=3С2$ߐ}MzAvgFn>addf:MjQ[QcKwM{cފ!J(BO+<=/1ꫮm$?hĉ>(RBc{N<8?ƆT%R3wǹ{œPp?,ΝE$JS~g&׉8".R`I')K8Bs0kQlL37 HЁϢpzT{Qr8|O,2o4OBגx #7ڑń^h́^uEdfpK+dN\:)ϸq -dMkĞUY^|81¶!#!g I8ݡ>k8O$eĖ UvСWF-Ϡ'8ĶR([RR[zƅ$fi%~׈P?^5veYîfa6oIucZl630hJl KaRNdX(Xڻʊ^vIsMF2Zq=WZ| +1Th6uqs5;{q7B̮Fa#*!~ž.5}h`Տ[FCN!7n+~t w($@=,-ԡϟMZƊJ¸tډY͗ؐV~cI+Fx2cNi.%NMbPubr[H)dE{4 Uբ\W+?ф{^ڴz Hp^b;^@\,a0=++ؑ7bN(f9֝[RcYRZИ`mxׇj,olP,b[nKbUC[f',r$I?Cu+gcEr=>Q9c+T_~P] 8BJIa; 7؄ +NEG)c(Οq? endstream endobj 24 0 obj <>stream +HԗVJwH`DRiѐIg&VZ#|/vv.IY]]]v͞}UP +>/SM' +޵YB| W=,i $ +KY.T_ڪU#gp93 J +hk>G5 ;ӱj?b^{B#- VǓ8kmfr._XgU8V5j7_,Azc6Gj+h%MB"ɴGcUc}61ԕ)4Ubѯzl*D6Xը},\Yi[XT@:W-ASf`g|LUᣧg2tB'7 + ԟ ++Eq-HŹ!\G#^F dvHV%˥R!pĊ+ro/6`\1]Ba4t˾\Q̊Y_=5Sn]%Џje}GL:8~K5dY9:ji$B?cmSB`qPam3kPvEgGk5n}ʄ*XYUHȜ9ys՜ +ʹ;9yѝ S .{eX6nX "Vmki! \=kYzdH6X*yAsK+IB&Ґ.ϟS<{)'dkH(]E,UW%gt"wAL!L8\Vs|.ƞ^N\D Fx$'$Et~^6:6ē=KC +ѱzpQ7E[VboS*E3u#N0t(6HFcp U>EF޵U5*ZeM@rfaEz kR> >_#xf't>_.\o2n1fC)Z=GdC_Û:Jb`yK}' r{&Qע6ya9)Un +{QCkYt֕Ck*R_Q#aYSΥD#t(聾W&}&c}OM9"Ո{j`}jUH碢E<1Q˜9c;`00[>ġj}ǐ :dְ謱8xnhYZΒ\ + 86A0m/Y#u LEJ +/8;jA.^Z +!d羂˂k1{͋&YVrDWqPL\OXQњG:oML]|a3jǺJ~

    %!@i/P2A+UyT`>O :=N*ciM:RȶʟNʛóJvNMYbq3e8ݪWwZ`uw>W{o :ɇ^Văzp(EqgrUOIN"}=ǻfn1%=$uX4;uQ۹HGa-i$]}m|lW]ԹW8M uZ|wxu92z~RSGĹ9 [*wvil-֫F\7tyg:8f*I6*4ͥ*9O>eW6iKׅRQ[͝$wӸIc^6%qޔ7OծJ~yg=`aݦun6TI}-eý-F6_ݢsSs]7GXK 9:< c8ruQu|‚RR-Bth1ں!W0_H?tzR9<^ܴtPp\B +Rp_T}ၟ}y*P^'"F[ WMfG8p-bs/f\mBѬAV}ka)g +QT%f%ɛ=vI +L97~'G{ࣗMF%p#6S 2jC(h2K3nbacŖ=MRn#[ RzI܃,D B-+M1C +Eit"$VwYJ+XAYr6Nեhh†WH㏦ڨ8$^ cl;HX=<a+0tAqP;`3=~GXۂ +2bѨ1ӳP-V[d08vmdꞒY[n`+9@i;YE˲G<*be&}Zcr76dULՇ>ucQ[Y 5Nf=&z>5ns^GnANxHF~닸f; Yi>yf)o+U!_Okݝ\+xaqQ{y{@pƩ;Vi 6zo%T 3|p$،T0Q~<g~,aX҅bɚ-R&):p#? #3vr}V ˯ 66`t`m)MTEKGǻ,R{2V=/c?iݎ⧨ |u;1j }Rưni +?+MZ +ё?]9P7Լ& ʫ[6s2f@:^W[~vm)px8e+ ¯+Fz,:uZ&t!QJ#Vx9#}M-<6.K(F0ۤ+OғrozV^רjmYMo㽛חq,›Omv,'m˰]`7JhSNHx3»Mw'֏d?2`SKޥ {z)e/vՁ#'8tReys.Polf<رFZ% ?fynε_A)F"ԋX:Gr$^( VMߩ^#zϒP_%KQxȬg`+B!f)F +ʣچ&z`=Q6XAIgUugNFFJu*NLF>{(_ gh̅b;xPl"5gW QPP,#Um%s'{^sb-LAץ\ 3Ƒ~OT7Ap(U9hې3oLCMҨ>i ?i@$]j[n}Gks6r(|::=Wcd#{GˆE;gg'n&_]QMK^\79F0/iݥ-U 0lu>ːAP粬f8tqBœTe멥Q.b%%}B I |ka~Ryz)(DWa{{a~fIeay Tvkmr'g +)f𪊄wYz0ԧBQYẌrZI:E]+Ď׸]}-#ZKך/iյwM"I"(- +!r9|x; %lu͚5fy-蚚5Xl:Qn彋 hβ9 3#r1fLI>s ?@]y3t\r~BPR.s-I#3#'R˨obmVьvؒ< -W"m&y|͈Zs?5)^$!Vt+o)>(a2Ub3, 5OQ2٬P-O$r]--Fb{YB>uC\W7 xV0hjrڴ0Ȕe.`qVrgW70CjYR7 ո-q:,{ru`}<Z'tؤ%M;LYR+^يtt0v;@gm%{Dz97$FLJ8d_[`5o/6GҨ8W+|`ȫL’@0 }PE $׻_/1W1#2CM8@l;;i|prH8|t%҈R2ĵm@*[\ك7,PT]l Z*.je(lkO&in/9q/#g/>e2vTl'Xn 'tkC؂;ZgC^vLyA]v' 5f.zE eik1f>3l suT +{yɾ|qy% +y1d0hv Q"OJƹ +u1}wGS 01tM: TTpʍR,ڇw:{ns~+gLH)70[,\:Or w]nI,ݫ9[cb,!9&#:Ef#5F|O2D zz19ؙHx@o-a&3y':8s6;ybߝm|74 #4Zk0pA8_ ;RdU}ym`K;Ji~YGLOy`^puW$[9!FR,z:%_͕YAW43_ܾ@>Q zk)o~|/c!/G`[~!a f_Sx bw:Glf+ 8x^}#>Xf^3!%I]|ܞ/$49p3\˺u˼]f}"l\0W<Ox6eM5<4oAOѲ`럞'm$hD[W4ݳIH05)e:oj(uUYD1uYy1ބ) +r<<+HXM5OBT4p + xMI2ڊͿ5}ٖgsskOc<='j624Ų#~cy$>A*=e*<&g0p9v!lm4!$/fdMy*+{vakjDS6iu;IݦyX:RϋFΣz{ǥ&jb\q|@j?Z}+zaeUs0KhtyePiZ2+*^L]1^q*t;Ds~+@WT]s5U:9)7v:I[" j8{|iYB^ s0B5U]Dp@_tmʛO'wYJ(EV S/+'qj_x)'m\(4՟X>!=ο~wq6q&I DfXwz] (tVι!몮w5sdX]oD b-y}$#8 +e{b!"$8/aaE}?/Aw~^W"|=tIf9k̄8/c()BmD-+,~ L(cpGBy` +[[^wXaJ?8-OwU=V3R%vw-]A 4` 5'_JQ Xi⿌? x'.;LŚ_sdx>@R.8SX'{#In{p%Ƈ ܂;`n+mK{ +.@[`-2ApxE-;^މ; _Vꕛ_?j +ϋube .#Ją<~ XxRK弒XDc`䗆T\sQ)p(xTDC`Wo"E-Di-nC`!}!H ф&= [AZ"xkY(8eaYJX2pe=,J/ b8ThVo6:{s/ FH + /p{ٺNg+tc+eHٵP7I0IVyqAoù:7vGMY>@|u:n+ 37z)G}ZiLi;qfCq\ٗ&Hn V0zPqk1Vh> B'vB:4?T)shtIr̡OQʤ<:BXk1:esh=sOIBٞۦtplvArg0{:|Vɴ#ԘMdžf3 +8/_+dm"vW]6hDI&]РON{gJ@XbB'YY({u725MeۊC;EwӾkAwTV¾\'74FۦPk#nG3+qkFmVeoby'2`428׎dGtqA=5NuY?ޘͷ!lͲ2AKt3N*Pc_럩B{w0´)OnƵ߆n))|`Ug6W׷*OCarΘC 4a_UG5P23BǏE˭AtY@G z,oz{L&(P@t5LJޏcM}8O5<6{d= +qf]kO̓#OaaI3*=OVA~->I~Β@lV~W7RXTh.7oi'M؞*>(PDѰvIb$9 vR!V-ZjώZg]ѵuԭ7[r`F8Ӻ\`%BӾf7 +/3*OkM0 o]9b<.֦W1xN"=Zft樥eL>{Ssn"\wߑsH֟U=y# H/oEMfYu2SJǘ0 sGzW!}n=^jcIVƙykz~,k ;a`c\TDpui:>lA>3w:Yq_ɭdP:V`1缙C#! +:d.}Un:X(:8-6..KæC ‹=Pnثg,T1PB?ѡ˕c,,GPc ++s_d;hӉ*=EE=EjW 6].w?nr 2f=J;M- +(M\;9A+GIGPAޖ޵ÿJ:TMBAPٽ;?R&klVbˈ֥Ig˔D 'si +,{+QGcy. +>.!JY#('x@ sڷkr|:@(dMnX咦G'n8sturPXҭD&,";83au` çުj?}<ʌ̌V^㏕/tB;h:ݿS߁5c +yHRߒ̧yY(% V86Pʸ`5Y\1lNVny!Xbܑ`ԓܥK=%z4mܝic&{h`c n͏]]8i~<6/V1R\tuy_S\UQU٘mWK_:FsFuM4oP-UzLۓCMS) +"clqwӦɷi4oɣsb8,;҈6G +}nӉ!?DIMŃ~x=F:HvU\$<U9>(V1?{)sgå;C#`AC$ٓX+w岬J."'oNpFQF3r8,(j^NEn7ΩKkbr2Z|9>m8%iHљО_lDˌM(0d5YlJ3C{)1(kH + GڃQp-8(xU/Xi8 9K .^BT_ + V o3A=5{jEZ^8Xpi_]{5q{*#( +QUC[VCF 'kN +AЪȋ6|:Fqi&kIKh($s 9RnnNFn7`Z1%kw]DY='_Ro噉\JDZ׋Z6#KlNTbuY~rTV(2W-[TRa Jŀ +`څ X`ROu:"͟Ř7-d`ɉ#MfB))ʼnY.KuK]xYX=iEo(~9 PG!!D58m3_OuR~h(kZ"8"3ڇbov^;E0Itc6C h{%(dHd߭ nG͗_J5+t&B>ӏ^GG~UGc}Y#26|.J[1&"t/ѯբ<:t`~~gosCha͟qѵ18 3iwOV#}wߡZ۫3◹5w~Y5eܮarV(.mJ'vcuwzo6yEwjJ־$Tj'[9ZӰ]JyŬq  +Is|J MY:ⳓ\>qp<l(Eɼ_d?t\apн;:9)ZT-{'N,$I\6(CmV~妉/!12bWfi?0޴~KDٷجA(B_xW39dsn+ (KӦ:|g-10iu42yW‡k",잊+=9yuާRXcqM?8y.9+3wWqUޔ;\KWNǽHшY^>Cގ>ܔdv.԰+A )}ny.EoG[&|+SHJ# /^3rLIn[Jj:sZ?흭8Ac?'[n ZM '^4ob,*e3bu4 qJcly .;Wq9\ [UdACV8V>I^!d ?4Va~ءI[_lK#^͉{q;c1Yk"2 +b _s^I|d}iQ\&\y*Md:s#*`!F{sՍwc/;)QJ~p9h)I_pREU*H]fotyɒeobGŲ$I}C,:3ť5ޚ`Io13 ~2F_Ha GG!1皮p6lig֝ϕh}lDsJNKDHP{)&^T17Q|t&PhB*WF?Vaj]+l=-yDJPA^oM<+YN~衾sS?ruƓJVՇK𩫂ScHaƮ>9=cha%1+F\nB P"d@ /IHSq~]zZ\3\[>U?jܧbs] juwՕBY\bF aH#,/tOPЍ6-bbuQC^i"b½ȅzob%YYeLDuidrC =v,3v/SQ.3z[g>KC^^Huʮ <皃4˟]{cތYh֚fNsNW=jӿ:zF3Rls"_dֿb |w-C +$wu*餷^,ObA9sMԖ6^Elv&urw0Nss q2ry!NKi9q曝-Ԭ UTϔ1h4.Һb7$.ƭS wzNKat~US"o>>8=gR] k9tNrjmM+]N' ox49 v``}^sKb)ѶOgAD7*\u=YpwN)XSgERpQg^$Wݾ› IOSԜ6ah6B"$EB|yW8!.k) K|tl kqlH^غQ245~z[@/sW l>wVjɿ3joMji?T9[9,e +{ڱo+2n j  Hț,2XfP` @y +c䨤 ZBIr2)]9qم7D“ar8R1O8!dtr%-?LQH +Ivl\|GST[>p"TxY O+^1R%vf] ]JWQNR3ѦJ$%$+n!<F5bSUn߂$5aNVU"+j>/VzFn˭1eږ2ч" 9`к66HCs'tGnm@Q($A."l~3Ժ!5Uy(5/' t[M,E$dct(4apAd$ZSu+wܙ|Tn@#&@s;3$ϡɪD$N]+͝;q%7߬hTsG7kga.ov(ʬlhJ2@ +)amI 9$%2FUvH)kHYgJ^FQ3gf2 ]\(;,(uD$'y҅@F=feBa3q/'.ح&蠦LbTk--q92 k~1x4`O',+oa%|=O@]ɲDZ endstream endobj 25 0 obj <>stream +HWZJ}<@H  i H,^ ?3L$)U\ZlϚYY}J|aOm͒"xRI5Nj~,$Jeȩ9WZ};"Nk֮88}-32KRo+؈y|y< ~Vů}=T7u1;grK[dVvMq>9E+Z+''>-J9]['=Tg-N5ADm,{dyqݼFQ+ f<\77jeYYGVI@N|P.>+ 6qB(IbaTuT~Fl|:u9\QP8c 1(PqNoZƄD tOQ>9Z?9pe2Ҩ\+x{l7ה=/e򁑱oq_r+`ė |Nd;g0X7CCqDyoZ>$*C!&*FxS_y(RrzSiE!E_-`@ջ6ƺX3U0n>9Df.gP +AC"ycoK%מ,!`RAA:Pn]'IX1LdžIk*u9TbVaoȀt۴фʇ7SDGY0 +A00e5fa[(̍0yBjwNX*z %7HPЊlt/|`)_sEaf2 ښ^%y@2:Xxj-0 F.;BCY B\}s_6gJ?+V͵oeFgi=Sf[n'S^*i)'5a~QFpw/hGr _VYOVu?\inqpftɄY ħAat4 +b56fj3~7d.?ѯ')(4FOp,}J&QSܺF ѳ\C3*0xXceU=XQ!#<m&Fͨ Vw'?:#Q6Qg# v.3Wwlޚ1O~|Pn '˳P,:D g)ț?0 SfUn7J7OUJXJxX5(^k^KNն>H^/i +"i].]. "5O 'fY:[N>$Oko;/u&&-мuʒ1Aw"ԌGI?GnʼN:. "ϩ1}q_Нl2iDW<m-D ;[3鉏a7+zzmc13PJIU#rj&Y"8^' 1J8J%ye +pNĸiQ}iifg# 2oOy8i(%ӽd_X\Ɍr~a>vvk-o9~y0==#뾖jw26.8owyy]4j$o4oIR&meR$!$̿Ԅ人8 J|.NwmR TKq%1)x!%*_ڨ~BTώ%K]ΧÏiu{(0su/xq{bس.}X|vdƮ 끏iiX:1,@~;2P Sw**iqǺ5lt8|-ŨBKƁWLB[r + &tY_N.T ZhflW6C|y~tLn?b CHJҥȮ69TOWOWMI0^.4}axb\BI +O\/haj X \F X}^"OKǂJ<- U-XNP]8"T9.|ޕS1K9$"\ZG +Ț}gmoΠ'JoScpE1mocM.01.6"wi(Bh vۦE!A<6)5%4=TQr''j; +SgC@."~xBNhMEXJ= D +f_:Wͬ*B:K" 9cbQpr+eI~Y!0>SZB(y ^i?Jc8لn X1 {9`Ǐ!ȶZ|qW O +P qT=S; #6x RE+jO%39}'ɩLo/-FM`T2c4|m9jcO[xCv<%3c1WG&@2&ѽ%;|g튃sw;vͅʎYɻ.w\w\τSB+coN~1OTNk TBu'rDɬlt>Y Xu 8c^+AA'n%кTnui)$_}ٙgLY?J%wGcg*>N]Js.d9١gKjfzV>|ןSSPR;'ՀT8'=/cE"pΘr25e 3EF=x?WMϙ"Y/Lb猝JR'z\ĈYFkknr34\ ]sZ p:fc<+lm\PtU,[Q[;4dzvЉV0휀rK_໋+su#:' 'P+Fdc~?0.C&'foEDJ*d)P4!.]R)FFƢF;洦lɆ"woQ^$>R4C6ë ih2ALk&4a}*tMp@%٦M*rN__nb40Q27>o~]௻;È5v8bB7$aw"U',V|ZKS؍D2U+`q(.8{V˜u_LWltB߂`?b|Fj#ߢ>"7NYP]8Z]-יu4HkpHGI +R0AnT5*gOANRoIUBG Y6m 9.(:ϐ;*@ DJ{"YiX0?ް(Esp 9rج-xmWDBHu cCunl`@eϧo?P,ԙ]B[ʖ;'aBQ t"]+[<*rZe)Hι&<̧':R ZԳ,2ODC,Uc'X]F"Ġ [:x(<W+t k_]J +-|6@Y}vMr Q | hbrws19B<>bHK,Lc9J6xǨ̶luв@rͯʟ2̮:(ĥ\?X0WknPxs: U+@P%OYI0ncu~a f,B&[`&k< (DjAP#LB nO +pDWg06t y󚱣_bH1CR b9!-„ΟnGS>ztF;ʵ2IY<} s2JZmj-;qYÐ((=8t(98X4bg)<%mNWl2@⬫K +(\݆]Ojy`1*(|eT/jY/B۰5uh 6@ʥ$QѲxMg„\ zvk+N[aUxls2ֳ{oԁT)~X'[olŇu[t c_8a@=BXM`OPmJDŽ_F?]=&̿;2-yCwz!\\W54atq p*3d#NeK !1B?$[5i +->@6f&+-Ek%m<}XQ\-񅳏YW.v(pZ} +wT`aixi=ȜEsua$ BDB$?qovQTxNqHeud02EHҭĹ%A!2<%( + L 2~ ^a:uve!A "!{:}pnYo􊶴@ʒmȄG DJ5}YN52BL.R!N=lArD!hsHPx[GV S~fĞ3E5'qʼ%үh)oJp>]·S9RnW 4:o,0(cW,AȀKelQC1\9.ōyNMOJ?T;6[Fx~5=,?J,#fF7L /kqna}wc_e,΋]X_jvK8[#aKvV/ݛ|P q@CX,-AVn l(wc2#p,z{_md11Bg2ch[P9O*(ʣ;&! q&%GKZaA%(ɤQ^稵"<}LMs&7j`UcEq0嶺ts )޵"tR8pn"+r61oY2tlܲd>ۨHBZwϓ{ؿaGv[YCʸDyAkBj[M|oǎJiQAX,6'1دcJ@', wŸ`Q E"wnjr60-Vf)=jWVVs +DwIMJvd +iOQ +J[t r5=M-0'k={9PAԭjkZ =wYEcI1\s~nvIzy`9 PAXMTk5s#%W7o.rK_F^Y@GreH+DhGH ji`Phmẃ G a HWwAʛD Q \eUK/l~MXOVx!% 2G0Yc+F ?-yʖH,ز.*<#,HHGӱ_~<,JW6tOG*,j-Ol0A 'K"FatnZ "]0^fn!n$8G]fJjQ&܀KV$%B5ה2{@C:r/"8r-ee *_ixzy (yJ)mH>?ƪ蔦sm-lm@n`rb.NC"Ѽ%:$VZ0CXuKD6+Z&n] e3T} mk= >tZzZ;þdr!ĝY=,](|$zhl\: W ) +*s(+4Z˰JMa`frpCuEnνț9'b=].=oB0'|lpkCǭ(Ս;; daXAȆ]A` +.;A@,R߆$k+!cD;P+%' u@}8A` +2ց;Uc@Ae_rV7P Oḧ́OKk$))F'!?U?~iU('4bFB:kL @xRMl +ʗ81諨ky@Ær|؍(C@ c5]r |?fb,Ɣ5 N6Qㅿm_#ƆQ'PEJ`TFr>2 }_0%Þ ?ϲTC˟a|TPfŇ]ZV]Ozo#a z&8ui%s אCϾ_or {>?JU'i-y&./*loEՋLG1h,Ge*=;oB]/0խUus. x՝(6MA^NO;nI8ϛFv.+}q ;ǧw% WƷ_*n*1{*8oh6^W J=/۪y>=6m`t!|iE[K/w}o~PA.aМu]4qg99U/whܕ +:b?R*-lzmcQfOP d~{.TTwX*{祥, +șϫW:n烨5b*C/1fFYno0n5d7L|p|͍s,w j73|{~ffn:gW{e7~ a*iդ(KhHNy9OOeD#zS,i[MY3}Ɗ'gqq{s&י7˚_<3V1LT:󶆅͎g\',|h5>>zGumz'UWc=ӓܾ=v›[mltMS;ņ 33KK7zOg0J\Ijg\X*+U/~-…J7[]aЇ.Ԩ]f O3XR׻9Ez9niM]FZnHOV~FK-gp ?` Om,2X,RVA2ÍsT6Z Æauompw& ca_ExWp0O!gv霅Wc#43IId`cI4>QRZc2n&e@)a̚/#ˈ3cpLrK'q5gJL tښdLpNq+OXd9ZA`#G6̔GmV0 *,] `Jۚgd MG<(Ǻ>S\Dtrc|bvd +AG0wD,zY#1d6"&*%JZ$ⱤzƉRl6x%y!1G(6TBq&=|jD[$Xg嘨.^dcQbu+4MBc^b%#m/YvL!'1tZQy #DW,v:|er?s^dy *! 2FŜ6HO JʹOY˭v2Zxz ("JJgC&F82T'-k偰5݆o?C hpT!,NR&bl5:F8$%XA 69V(Nw8djtM/bRzaцm8N,_`1$F2;9& +"r Y&")- |'Aܺ7gi}e4*#4.TC$g!څ1'M^'5)(w>+"v+c&zcZ0Ri/ Lϲ"TeREIxb3鑽 X^qUG%\ʥqy^CNSbp:]LH%m65,S^rpmX L0 GR[Jͬ*z ~x$565 9R\w=m^9|l4Je=<|h^?GD%Rn`ď endstream endobj 26 0 obj <>stream +HWn`BVܾ_@wTؒ y@273™r9Ҍl$,hHvWW.}N.|ًal0i4XlV1x |z{zu~O[fX *&u(TMۼ_=Mߌymqxm&ǭٺiy`egln@m36j֟rhjHt?J'^b}7O; ޽ E<𙠺CViu\;,-O)~na?t/h?kf\]Ajl?u65Q'Fnv/voâ[-cQX|38պ]>;y5\ҬgtfGoǮ(]luBاayiW+OuҾ3*/-qx0~o}Ѽ@m]~^A;~)뺪:ԾvMkUZԼf5IUWUUVle*]JVhEʺʲ /]iKT,EKVҒ:T ! &蠂 " ׾{7^{{']JwYgvI'wQGlm+[`uZcUVZa9jMeJ7Xc2H# 7PCt+]꠽vjVZjfoUJWNYtZ)BqU$d)I+Do"K&$(E^8aBp׼%s-7\sOYJgYffI&)КVzꨥh +)h3DxL&߫/.up4W#Ish.bŽoB6_ж? ]Yğ +<9G+b(RIpG'Ԣ;~x[\?iƦ.oOKXs۳lׁ2ap !/q3(28 DRTe] x]dd{(*@#"]79m @@2%)R.sHl  O  +CL\ @,@S< @y?T${`p/'_rpu@xQ1*KJ[j@i@s\Www+Y + aJ՚IEYƀi' 10H_X9rd͑#?G=tԑ#[cGΞX;6;K;xH'"T2Ot =Rz$H!?ϓ칊o/W4Hcv-)h|Hu:6e r уQa`v~`y`|`d)]1rI u^{s<9oټ.UAth&7c!P@^ "w"6'jjNSlj 6Ŕ5co39׎wzrcJIIi 7 %% &Kn8U +((C0 ** ++ RhgFk ")Fd$ j4pqr#97H::M;;M<<sOo" $г8tr4c[15'@ˆ)=ˌde?i8UHIII$Ia[-[J9ͣˤ$4&͂.9~\Qh##h2 Q0錩bɺ4) 9G #3 ++VC~QO"M~'OS'p6?  pZ> 3̏^}O9S>xA,y]˿MEcPDB4[佭F%ǜ4%IZ?\R2 `iuO d/gndۏmHH)|brzI֔?8A^޵nMn򄛽 HX(3`&,ւx` VaEV +r-E(ECQ^)k;s]{s̭˃rQﴕ{\_h;΅x;ZVw\>a+;} jGwe>[m:lv耬8oB/"B6=_0r +05Q&t@ £ у$FUaj6b% +zboD2=Ze8Ur;'`6܁- d#OrP%w`;ȈzjHh19n;ҡk#T\ ;~SJ8;v/WBV8&=5sg7;W?:[586ŷGݩ[c?(*ɔ#k=ާ9MnDQ zu}1_u/OZߍTE6ǶP(K2[,=k|TP|K66^Jm[; g4`ybj⑽/G? NM?7om>7S[__K}-?z{o_/S}1G+c` F0x=FnƸ54)0a bd(̓LS'd70EX/ ˚ʒɚȚ9SA|ĢנYɤbMur$H](J L$Ԥ=IIJ +ERlSTP%X%tHXQ=5FDR-"WES5IT]+IaXo42亭imB&w<dU&?,5$l[bIY8$SpƖf^Kc; ;DAIiipkVⰫ 7jñ8al\$ e +5r׆2knRL>7$i8LJƧ֧ײ3ꅪXS=A&bY[YVDWRM덚ڃu*䞒?9zk+2wAzef^ty +ǁ[y@R>U#'j.u{|O泮[y ):/vܴe̴o3RfM6mM[;Mn5הf)F;[nm8h VնгBMz%HI I + +I ڞ;27&f҃$,4(,0=SF5Fa8в_T[崕US7lrOU>I`ˉIХO$I6Kr*S1/Ƣ5 ++;UQhw;utlS3u GjMO[es{A:One2ϞX5s.`^ lN?FPJoI |C3&[r| ^-A{д3X!vDUa?N4O jngsȔңIe4redrcqJXRXKXmJs .Vrq/D`4%pl8rX` ܁((Q-jz0X=#{w]y6{SyUPEUYU{}d&9ꪪ뼈 +[mq!URyYx5bv;=iڬzdਙ-cF`D475NxQc(9!1d pt}7nXC]tDASܬ WFڳ7Sx yfKx%^gYެ ,;Q9ww5Gm2{1|9~}Ϲ m#{Y(9wROע纳T^WFy+:Ra"+,H`T̎EQYED"aԠhG&\HI$T +L%%l4q IS9%d}(+̚=[D.bWd~aOn32@Ē22nGҫyx$0߬G)%sBI,N5=b-R$15EP˵ڰ͘mfmpk ߮wJ;Meh%=Э˚7fzuܳNj0u _q^mRKU\L԰鹞"l@QřjO\h7p1'. }rŠg<U~ ԚD?55Xf[=3 ƀNܱ`zmr!hu +^jzAz"_0'`Nsm. 5~߂gِV -afͷEZ:NZکx`إU|\ +jhQѴ2d{aoyT_QBmTNhu518g4?y~K>v. Fsrx4}^0H-TqN< Ֆj#\y\0W{ǣ7"0cFӂk}W;n4rș9 ]DPB樁]0p2|߄z<ӧ5@s~*2p)nKdijPjNf%#{n ?{x5D<5ӥ~Uc]N~-V<8SVg5oȷqo0OxSyY)Wp7lKʵ6+e1a/0ZĨR3(3&̱τI22K"[}@CSOyuPUe 6ڑF=:9z5׫cy/wVe7-guWRuYrw9JLmPCe:+֢=>rh=5W<~NJƳ>P>i6sZ|~h_uOuxCTlc7 lqFĥ0?3ndK&^OZ ui E̖RoeŶ2[^i+۶i٨ojiMl7Ws RDBMAa;suuOɫm`QBE25$ʥu;Z聯o#ܼݸ_'?!я(4!L ^ , 90ӚC + "l-#¦Gu1 UeRi ,ɴD(,p[zzG3%)(ϸ/ AB3Φ LH?']iQ k7Eܱ!H|0]h/e=z)]J R 0;R.ҧDRq,xⷃ vO͞E>JwT*Y[tZf5h1k0Rp"L"r$&N$PBAF1S,naE +,Z(PpRd"4  Ȳ;pˬ9lSS>p$s|3 .A;R8 u`x:*ކ3ɜ=MM_oL~у"C_D}x^(:")W_S=b`/ s UӤl f&E(rNovC2BE:L46#1{Nͧ*BGۈ-kEiǀvp!CJ>%9nɈlwfrYV 3','\ǚF6 (Ed՛`Rf%\ A|Ysv8t!,:*Tuj:vJ:SN*熘xB!'}*SkhyymLGXiM}:.2/KY8Kyn(7C˪"u!e驆GW?^*9 ?T*t]iK; +=UQH=Fs<1۪/M)S[V?oi{Q7= +pC#p5E|TP0ģD/_/_@CIC +.2A !sḁQMqdtRG +$c Yu&$$  ҃Bd`WZ HC)=f on&C@d+"FmxӒGu̗D!1hϚ=K;*Ga;w3F'P9"g`YRG,3tʥ)6l͝p/, :>"eXƚ-W2LY#' ["ĂM Gs*%6DळR-KP@< ȕcL^ϯjقy4#E123o ڏ0b3 VMy$֯F*NZ]S-˅#q,hZöMH9i2x#it!v]P̾bYԃ;^Ŗ +VYdt tlr@y)dn1tbZC{#!rCNh[1=U{,s@GGqw:?ЇM)%IpĠ%7ȡ}m ; m&KF3-fR,ē D5;!"S $`S@.}ЖS GYa<6gجi321.˒]2UG,J}1LF5\v딲roQ;.w_J!e~i"dnI'%N|Ä&`”X94,r%`)t#) Mפ㖤ȩP;KHdKɈG:W2& ҳ̈cF4cR%HfR=CES\IxwJQz)C0ѯT1M%YtJ8IpMD;3MCq@ea#V3+P;GQoqb.wyI'TkD:@* PAj`H7wÜQi!}zs +0 +F2R8xMsZv氚e7BF7sFVT6 +dǫmгiɣs2ҥID|d~a聁0#ઽz_IYGJa|]z1L5TbX& u]`E{>ئ>tCB'Tce\W2NPBUpAq&.,4/+yiI_j:B*Z-X7U)3;=Ƅ旕rn"P: ͓>TA씁`jHrW.<#X8#l +rD8nĵTm*NYa0Yxgcf©N!P$v9wdϿo-ݏ?-6#OݮJ1 ԷHE WhS"J۴}ByJ^ںq?>;ק:: +4\}yxwx' ؗ?'2<ဣ߾ΟT+ mb +dɝ4!~ECg )h~Ɵ oQ7a>KҜhݼ"oM "`q1O3ROq?سܽ7[M_':6bP +]J֔|$ G` QQ(<ZPڂS!ƙ0,a_f~&1Sq֖ڪ8ΖFF]*k%MeJV՚_^ +E*6;w<<[7Ӈq_UyĔEoח9uGH?.Q𲮜H^b.\F`Z=7h!3h/+m2K;X:/E ʰ-;0@ɿWM6 ,ll]!쮮&5sSCbw( +mYO8o^a;LgƺD?23Xk\)SXh JEX *dOE.&x$V)(iXfҢajA1o YYW*-29BӺYIgkVx' e(t?P:بOP?e~r1Ć򅌝[^IOAк#eJ9%ePJGP}*_x`:y[T0ۨ_^"}OH1΢с =*i3^ C?~^\(}矾˿_}?Ӗ8~owF? ;F?5 <_?o%$CQH ir +PdZ:.$ַn + }MO=bjbQ2R/:h^HimmNѓ!M !9 i[Μ=$@ZIEQ64";H>G=nb,MQjd]1&X%62e~󞛘-*Gn8#uއ R2x]/0VPipAIvle{ڷ>K[:,@]3`M?&Q)M82FKV9}ZjWHiju}4HD +Qs7률Юzf$I1]tBL F<|5Sck/.Fu0`l?sWֻ4|ҡm^0LVBԎgQ7PnJ]ӈb%$يӛBlgM,|w-q:o#-P\Wm_N5l<%i,)tO@Z,"/ar_\R%i\M]`E;c-d<}!Z;Q. +zpYIZjoB7Jy(@a.ょtH1xǩ"f ꛰rև&%+7"Ncُվpd \Pk鷬`+ƓYOQU3qT;Vr֍`N,-T1|ӪcR~幮Sc>o>rNwQ◃G&x:eӉNχ2JaP{Ƞ؆s l ح75\(u6 l*PE_9WN±6 GÎE +MqxҩQ%qQg# ߡVMb?Ϋ9ĐYl1mxVYe-ӍkylW^D=3i2C-+'0vw9d!]S4]v^UkMqk첞\BqO0CA5a>z!*5up\"/˱7kp4P58jPEE! +MdqtjO=R=rث~ 'W8LYQ,T2r%*D\X8qVwv_YKԶT|B['~˚\MTQ7ޞDIuϕcեMͨ!VɅ\&L˅,\,(ee[ bv +!ϷP>gx_s!tX3 .^*nyG8=lT%YV!wYUUQZ^LAuwǦt R>NJRwN9:<2 j`÷&; +e=5ejyjPL ;=|-HZB%2 <q u^B`R90LAz J6lX+?t4\6kTf\8U_pz2rk!JJc}F`"o1]LFynyHbYsf"m?qM663:33I)|+yc}&C2 БjyACʗ܀ϊv(hM{rYCg$H3>,J`cCjP!7Z+C66(?+i+RawS ЈҦ(+e*PAԣqRQGfʶ0.DH&gE N4gÉ H:z汔擄Ny]CDM_/W M*0ϗ="!\80*),}`e9UPT `V.EVȢo38,ؐT}\;${ytLec+܌}DBx.<N"gAm ф]yh)^|4uJ G!5x j񫋐lۨa*kF`.?ӭÍ +O ڛEP7$R;ltJRQ@0$ >ssM(?+<=o.Db'Oyy5T5U*T?KTOvj[Z휱Vb&HeP<%װ^>kzo>d96\/xБD-%-7 ^-W.S,.݌pFG^W{n6{= +"J9ߧcc9l;NşZ9SCI+^CS9֫.Գj¶h-KHD(MpM/MA]UOxjpK|Uk"[WWk7CUcX|GL\iސ.VC:EF5WDg0u(DM2 :.$LLhHg-2Osgl?*э(hFd&GFuxVc\Ɉ j|(vΫ>f#V5YL)%qe5){_ mNdYJi,^_'<54=zXG2CƐ(6`uOc6'HO 镙s[z'xnQfaoxUե_/쫏no/_pa)yqmAmNk{@˥xKZ<0Ë +]i\|z KW>}~?//w{a^=7g_M{znGzy7^ݼ?z[޾d&geiik9H˳?y"`U{bQ(;TIs% 0t>ӢBlUIXm"͐DΞ*|HP]#xNGrYGaypVv\QE O >:bx%z;":xc} 1匲J:hsKO$qqmjܫE"~mhH^w[ពuoO͜ϗ37.;mͼڼu;}EO !_my f8O*Jq]޶WWn10p ק~;S`#O%)BAmoFQn|Qjel=_bʋPT}]tVZ3뇹79`]f&f!ĐzMuBM3c؅]z4dӶqUʵ'U{ rl;ch&mX=YVwL*53i+wlZ~]AgBx&k/oDQBB`]fg5#}$Q٥Gh5ѕ[Q?^7<7b3ކ3ޭw?r6&9IYkuz<6ږww2o~psݛ7W78'S9AkHͿըsLGpy +A)Z8&ZLsbELȊ\KJbO+)t-~IJCsല^بWTDagIYz;I&т~{Ѐq6a&Q:h23 Ø~*VOÈYIdB82d3]J(-Ȼ +X7R!n&'ޗzc݇H#v[X[[oȑt\!OY$<8A1JhU'!wQEd .Uj ;?^= Ԗ˕xz^ ddzlup$8M0n&^{U p˟u.8qZ|wCp{|@ȱnp&Q([a +:zun%;T.~ʔ8v7tLdDȣx1 Bu$D?+P;Np'}n,.4QOk^dhO6V> n!@"B?OsB-Df"0>O3 ,0_ȕQJDyM`cɼUO_݈ &υ诜Fy&T&jaI)MV\7K JRHMU//`[}T${+d@rD ^hpjTL؊ |i* +a1,2`dL/mIJ<٠+pREiⒾ@ZmآKDC +e=o V^"3 I#>72\~M&L(1 &TiS]A]虘P|" +jv`١@v +@H An?6&-kHVd^n[nuZgxWexKN1vPhA2@0` ,gpiCӴͷ{B/΅+MEIf ?䆯m%+tat AݲNm> |_k[Ļ /Sog(b1tW"<8?feҝ2f&N7~}I75_U^@|QuHEdѩ4V6s!hbn +"hTHJ@"g#5'BbO21LÖ jbJ_OHBT"סfL5#r')2`mM$Eq{Pfs$S.b(ݵ0m$Z cQTP4¦ŏ蟵V(4-JN_>'FɛkI: U9 !S.rM!*E?څ".pdRm!dlFᘜk}MR0Bwz/#@yMo#ٲI1NԾZI=efhˊb$1\i͇O΢wYl tt m_bMf<&<%͑ȰU}P +U|Y(=x~Ys Px1\҂iςK |I|i'jkZ/y=w4^t/N L C({-+[4ld QƂlO3²a ysT)  endstream endobj 27 0 obj <>stream +HlW;$7<ޡu+]B/be7 YU3~r~I[ǔ1ѻ΢[_~k,GQgz鼧y mjtܣ~pͻ^/_Mo3jrkr o[c`ݝU0®qO~i#Dj~W*:du, jEF (@r!VME1އcoH︕Ypbw5y8 4~? q $>b~PɸA*ئVDN"=M{lX#ˎ)1Gm\t!m\*,Jdo"*RhZ:;KOJD5)̣HZhݳE|PZgYExq#Hr**%Nղ(!Tҷf]eZnTQop:L:3orlPaxVWCiD$T'],Q뒎uXT75YhET0~F,HOPo8^"pN#z=t26pC@9` +PO2= +j#^+}r7@)$ u2^缒u>`.3U-p7\u,v{sWlgCy4|㳙 L~Spn}RAxK;Z"nrFm枚2 ,O9Q+g@SbDQ'D4˚rqp$^ BO 6y!:A~36iT07i@1C*E+bQW}5"e7 V! `OvO"A禛0lA[S'KGoR1h +藱guB WRvĴKƒ}:+7 \p7?G>p 8V1(/8DՓ+'J`lChd*8Q(-{eS''C;G(B|̨leWޒY ,ǎ@>2q!g= r94I3[၌xa"тLhF4t%D{MsٷU[S.}t36[^1[R͔o9g,L1,CmC0vؾR:PC$ȡшO*>cY4݉xcHlaGzayOEFGy`=ֲve1iFDߩdH )mPiXxS݈0 frE -)04ozi!<ί^9#'R"F=Мpk[4D=z)s"?o vAA(D*GXxPY@:OO?/:[a>DShV*:]<_+o+Cm urA*zf?֨vAS}˘sp ϳ uZɼShŇɽڦ}||}^>PR04~Q)|'Ǝh,їZR*<& [tw+eڢy>\z8 UH!;IN :$d;OM2 }~S\bz ggz~Գ^?+5`in{%.=IsXDKibQF]y ^NJo ˎh!=yiHauGʌBXێZcz ]G5oˡMw喵V kcar&AJˊ6Ң1N# +%MKsB@,+5bP$(y2VV| +w g_ `/G X2䇣̑ ~!fFN]B$$RM Tlu 0>RzAMGu|JP&iU'?P%rd9fF#}>lOGvH2Ƭx(fNgQgC;5f'.f 'gHUpq'Y\ 5AxʼnbLĘ3xd/qn}tOonowz㟮?ׯ^?<޵yݫ|w}[泙t)wK[AZ^,oPO2S_TMr/1HKi^sDcɵuBC)DumڒkCJA^L,Sk\4у9W%7嚛,!4uy?"d2@|UM,+A 6?^8 +{yT CR!!1f^R >wiv-z/'PzO:0 ay{?vVQ)r28}!/iq\r/ ++LO{by-.rvy7OWۺWȯ@>g:dB4Cئ g6$"6hxY k"YS7_]7Zk<~ACm+tyY;t(FOm/<,}[!OCJ( bi|6u>"m ·:M"zFacʮ@ЦzRl\LΈClmQJFXVܟƍ*62mdG * t>tވsk.Ȩęx5T$Ɣ[NqeBP8gdLWs,>dJI#J#MVPv%l+8]ԨE-OK9f1 UMa/r)U( *-IJxM=;4P݌IJ,dSwmDns<@*@nsJI@/rȬ ++} +@ĠɮB28uIC5X`a8${9YŖWN z2i7X6+v`X +!]A' + a4~)ixyE6@ڗݯd6 ~ъl "FLI^glwBg!%$+f 4օ5JT@yrfm7x;Dt4,K+Ӌ;jbwXZ\R3`>W#Kw#= @p6x`rXqA7WA_ҡlV`{Z}O69wG%Z1IԡRӒja3A#@5i@V0EZ H03fǀvZi:hp~jq`,WMJ] תv+֨`=C?U:5n6 f ڇeZ1=HIyJ!}CN!`VqEp,y`#f3]}O#$"u&+ՌMq$|Jsro+y. ,ѪԔ` _8T^tFD=!'Rzth- +oPh =D լ@veT-aBU2=4+F*߀zp׺P=1nM CڙRf]_&S:.jM(\ׇ%R?}: BMe>=M!MO+H`psᮅ(bކQot D(@ÍI*[Rm3"}3c<Vb:2oJ"O~X47|c +|aw _vA(IhX!HmEjS]IDܑr*T.>AtP('=helUT{o^Q^@4lrS.fR0K&Vsb$|0]itYH Eq'mBfl{_gqkN$zG\ϡ@2/:\ÔB\yu6B92#:HB(@N4ĵ a$ąG. fSLTKLP?An[IH,2}:(q>M8+V;cudž: 83+Q#5 Z~gJW2Q2 ,}szP/[n^Jj^6Ӯ gu3϶&1i=sRH60I?ŅGs4VH,rJy]؄ȯ8+|eVȃ"1# L!l*ЀUL nHXQb;Ӽ45^5  ]HQT4}S~MN̊A15MIl2K[25B`VM&j'hB#J6U^5!g2ingAb\DS5fڐ]Ѥhj"KP͒&z,0sa}A;Ʈx\xI)͘rt$|vwN!"}%ŚlFLcrWLR1 V+{O[no +{><|^FBF`Qo<9;r4"U^/+Wyrš2E}THx!iw%=+]qZZ=Kݺ; o~7@Ck`Mh0U!nT>?C9}'z*b=]gV)<&^@K}mpZ <f~l׏__|>W/?-OTts_n;vU~}i#W#!_\Yx@Vl2=߿q"A RbwViaH-~>yKRm#>谪jJ?Ϟͻ˛w/>p>7.?%_Zܟ٫_,>~Tq +h%TEhk(Bi6&AjIkmikE˃}7Exf>1e*9Y-I#)جMR¢ټ/f71?=0i+ЋӖ`3yvnL/n2 Q[@o( +FMrT5"B~<iX@m)=\ k-cj22DУ+龫jL XAQW]-SӇoaЏB93XG3gF':U) W̔PB5F{^Fŵ!˜ltJNKW6}# LC|--:e](':oWdɺCהv,b? wͮ278bKʷsC2q167 +qI֙ btdS"˾~)mnF3yQsz AW!Q301Ö2kݖZ0ٿ* U?lE*dZKT`nv,l6vlgmFܢ {ʵlfl]fYۨҝ|1`Iί8/pqss㛗|W7Wo>'`V8aj`P]6WʜD[F1OM0d=u.~)-^#V\+6ȕQ mYc'Ζ|,23>{U( jd_0s: ! H<`pS8:3RX<eH2| Tx=Ǯ\J?TTzl4\g:!ue^鲅f;)E 3MjqKxΊ,$ȏ#ٴ_R[[clHV؁Y}7tÎ9c\Nu;rdӖsKP'1>A0*45 uVGCϦe<;sIef_\ i\{`Ϗ|mm{| VH5hQaAV6Dz;e? +hL"$2&De* [QV$ǹؿ,B3+W#T*:tPUu/*OـL!0';#\B1,Ϛ*ə eTUrh [cr"@ȑ<.5eQI< w![AgG7cP}Y8|'C̓2RSr,_Ч tNOd߲MuUY:\5vVhR"=wf&g4 7xAßl '*4󆿌F">[tچ)!lPK"BݹVxJ6zd",4S.Ȅ&7j37 +gKMCE)'m&Rӹ-1,Zy V5W\^CbUkV TJz1kxpd2 c bWr%u(Nk.֌8B;S:TŮPhO]]g$/v j7K86g؀jY!O o)n k5ҎaE22lK)j6di7.>aXEDq@,-bfO.Kkv7RlH<{  aG35 "Jb?*m}Ec2)6PbCX&ToFbV'Rx?W˰G(bC2)7+GĭTU"Fދl{OդߨIX1knoVDc7=8) +g )#?!I Gkl +`?&7 @mN+iڗ`uC l ػo+l+p;H9q$T=&I-MM~ɦXFt{UycXKMLC>X+f.t\\9V* *C.2hca3ӟplr~fXbI +bru±MFQarl ɱ)#ƱōbqRi>*E@pt6RmQ$HwU57D u:^..,ǐ2Ab&Ύ]DF6*#YӸgm/GN İHy-v5tuTfotyِ[h|/9m)zqQQm.ݫgKʐ 5["(Ū؀ Ud +Ӓ ۠ [`%#w5ևSzn2ڶ箻_KHd^frà"PNU=Ϊ1怊θ'3 MQuTKBIj%ͧppڟrmp<ϭE*=+Jɹ7jﱒ*:(]I4f>q[XClGF'Zf855 +Pd}x)+<d!2(K&(SZA gB@WFqA`-|k&Y?9ɶh!霶+*%)gXӴ@3,JSY: 7l&~yNIfGCbUdz4APRU6L7b!ԪoHic?H~9aeseYhP> ̯ f%':D99r!s1<''Dለ "ϰ3lǛaϡsX}xex?ǧ&&p(K#)EP=E;9Xuౢ!c7 LĨNUxiFsB4̸PNmٚ䀘X;m`m{_Y/Ȅ \7I}z%dEWnrᆾx; L<uR/^QEz< w_ "ν#>*#3dՀ"Y;0s'@dQ[#2 @J*k&` \msͣ?E.ΥT뭫`EĿhhXN+n yɟ7:+ ݦ6f=Q9>!ضj\Y 0ST2H1,ia]_{(ޙ YhT9Vmí3g0X n\Uo Z"sqCqwu>u[ VjbR%ǟu,7gu + ܣJ !cTx> |1'\ڷMPɰFn|JoK}1J]SG_mM\nyu#%ÛsmD0Һ1\s5?l48w֟!kW@{ m*n~kKM@ȉt&imG|4Lz:0WFΩ܎E "-Y"j:$DlToxI 9O `XIh/θ9G(-TD+0Q,4?eH&ضE-_d:I&„@aZdw;5epLeњ] p?הɈRcJA͊H->EQb8z9r@L*$T9ߓ㊸bJ|##G9sGe2-q'ʼn>ԊٌIAeԷ k>DL.yM 'ywfغd8; +S=)|=+ۈq)ӫP&d$~Ӫ8#CLi%ߣ@-p;`6!.g-}eZaGKȨfh 5|lxWci"`s%/& ׳_@\#aj"[wy~;[5oXIzfs`G[we_#9,8ȧ$bm>ɥk5)Eg Fv]IMU5J, + '(9){bDɛ]4p3*Op(J'厅Ai;.+!"m^۱ߣ+ƒQ=sQk/YBZיAُJw#( |eKn  ^A⶞[uOK <%L؛nӋ!LS,ڐ?љ]>Y%A1MmHӚ7'N89FZ0u{<|w&{vM˔JߟGٰ.y %ƀtfu}E7U#u5Fy3Φ.H^'8wִqՃ7ޝc){9WhwV,Ryo?&"Cfü"SJuY{Zgom[HIhP{"\ 9Z8i8l4FƁws*zLA6ofY֋V8j!J8xfRQ.T GI5j>+4l*.R,!E 7fsa\"SFawX]R@d+ ˲/m%eij^0ꮊ[kLM2* ^nU*Uh,̶MkVldmC@j<ϺomZz\`80m vd}D5p><^L I<9~$XT+ICJyżĩv(c!A^c#<ͽXLP츚pSTG6_l2FҖ!Q5v6s%4e68 ᧺ΤF]v+MЮB!PujWQh(3Х6n5tym+O;1;|l)0f'M9rıY8!v>X7FA_]|͋W//߽{7/5s肶hq-esRL ~{?o<{w_}h?}^r_۽^|0~ןo߾o=~{yo^}k.?|u|ŗ]|h(Gr|˓/ڤigY?c|Jڸ2F ޾o|L'A<]olގz|73Wľb1L6mɛMXT_q54}wD:.SKh’b 2o[r,Hj++J4@ÛiWY{)Hb.xC#:;~) %.*8%EYΒ+r72AuA-``0SfD6ף_"YnR +RVJA6HJ4`n)AZOwLJ("NpIK%M/2q?HC&ݍgž`mDڤR]=w.I0QrDT*nǫ-MFPNJZBcVf@)h#Ơis?N`AҶBg]H;ܶ +ݴEg8o\HZﬧx9I19;h:8yZWQSHQ:`1vX< +WH q[(,Qnq͆脊3<A㟐^&BBC6$PM6~CQp?H#P E;r!cPHʕb!(բ0Kg &KpB#˳ )| FߪP~T!"-U۟szo@<Հvx,?X"%b}K,>a="y$P'"Q:b FƼH2Z9Hf:O T2/{I%BأdJ}m._m~`m5ojN*)3mH@$XT+)eɓxnxF"`_`1un+y q +JZ~&L6;[ch^FJ m]j5 +&dwԝQX"gi'ij{0 +6R{ܵf`"ޒ;)jZo`)(Uf?"VT_ku K@!VDAjcDQI}+rQUvhAF +y(B( W5B>kD 4c2ar=iDB NzcN ${X mt^ Rw!Ƨ%c?w.$DG]W^ad!p(~ry G(ǝ4ui<$q +R#1揈̚;*Ӹ]#7.j=?NWNn<]v^v4+'O!y$6F(O iyGD +^\@B z'![W,u=Ve{yIY +UhrZn+ǿdFK1W ϊ*Wڒڇmh+gbrƾ}Ҕ>P˱l +bM|ꞩ#2ž%ID tK%bpwTj! #Е78TC'hyk2j\i5gp꽽d1j7MNX7NfN/[C{h#Z-rj9srjk5<q|҅W\7n۬ wۿڻ?&?Wc=o?xw[d_cd!Uf 7h i^]OyA:"$/9 KaCܛ&dxtvvI bJnk_ӑɷ,(qѢ]y;Y+4iv$3 ktzXAK%.h`SH $P +|d8\5Q +a?%;*Ϭ5.+<, %=f$sUT,W&5C9̠ߕN1wQTg@g 8jjkf $E6ޟJ$iF[JY䣚Xтȡs=tsB`[AO$74kȊSMZo!ْ45*r)9Mo-:t:Wz(pcVjcDʉAfv:75es +$YigÓs)ͣ!3{AlY̒|1NkIJoݼ+9䌏ZכVP׌`3h*V-Wi4TȞssf<9'E$L +6_ba;OBt: a`vEezJK|;a}R,6/Hi8fK^R|`7%jQqe@:׾?v/h x-C XKzx E-m#9z8upU]xg1eH 'bo ŲR}CKWCShx܃w_"$4Iz=t*VE_D¨ Α/Py;r ,tIED+A6-a|d#> 0uꢥ{eVaسQ(مzRӑ~ic\γz&t-x sgt9xи2KׇnUM_ӕGcJ_N1;E^= .im1{}ϩR⸁Ӗ33S4z}fz3*o*f8&S'izW`[|%oouH(WE]OLeWw-+=L`R3/ ^l!jn6xY(ે],"u>Jod]0H;&ӃAh+m|b,3;o>r;}V^~VбΟG#0|KGrB[yʗzdNO)%t%^ac5#JPZ":sTiдzGAW_PӔSy(HO;*j¢Ȗur} sM$j\E7Sn18WXPZa QsN !c.TU~$gAYnp*jWUP{w*4 S-j%|)l|f.d6YR'8ojD^% 85X׸n6>+_75:k?mfW6"kLY}x,la(Cņ6QS/\(XQ[vb2`JUa&֝-4%|8"M+iBn.>L2($NK0 /)UR[ǰlkZBL,X>!bƐՉ}$íqPb%ԼMloYa DIa`?lwaL VTnRklubX˄`(Q"bXTJ+t " cFg4m*fa T0Maۭa: \FT#h0fU#k=h*i76IO=r/$WF'ᐁv4}\z0W]T1/!']YPd.&uVb+h}:$ Q\KqgI>IRLR =' {A8f(PjC.I F M Zknhϲ(YctX1ğJ5}\9U;e639ueThK*/7ɂQqKWH9'̸ɤlCC9 s~= obk貤sadNL{i$o~cAjdzovQR/8Bhy6( +󁱈t8$-iB`=$(:JӺ ڵe=mmG:!l¯~H>CN3E+lo9pDIa2T`8P3a3vf:=R gѭNJ1P'q`Imep"88_m &~1:,rVNeviC U'DW?9JN EW_tf쪦k(8n*ZT`8'FeӢ,:+,S '{j)ֵ]{XΔIbdYYZΚ\E}dPE?Z3Y<HD,h(}N$[qxq0\F@`;% pYQ8i= :׈6}l_uQG4 +yz%UKoUmʪLd4,#w q-N6-J]T[g`VV®_mj|l2qxH +Y05PZCCKwAJrk0ۥC1a"1K&wq.oWnZT"i+|7L b 0n$[yGbw̮/[c*"ie{V˘tɁ^,r~,.䯻|eo=S]=xH2J4})]Ԯ `M Bs'2O*jx JQk웱5Տ834ڛ!}R0c]bn[`&Ic ٺ%% z h: )<9}-yԃ=% +vEƽi]OIu.s1IcG ˹sWqLkqm#6#nM]R ᏧCW.I^1lY9l˩˶yPv鲀e`-P[%y0ϊ~+zkex8z%FzK*m)f$amw]fO0sRuzuZŤfYFgr]_8ޮs_oyӝczh}F}"Ϗ;1{$l)-Fu9UrS/@#S D=5c:On>޾ym WhNy(CY(~zG+(-!֟//۷-׋ono~݇˯ڞ?}znG?ܾy@qϷom-jyTߔ`<{~y/-hm c%y~h%Sd-7N|y(hmho4d:XۊڤNḆx:h:r MCxx?3R.>ؾd o [ia݋T?W{# tv_JdM΂# $X }ގC<-PnG\pGoThe["aɃ2&-w\,}([Q˻:9ZnF7ઊDRbY2lE`& ᇪL:ȩ2S.Vg$4s A_fUB7:j+S`td4BIae2HZppz Z;C-,MGǒ >eT쓫ܞՉ%K㒀%O!%: +bq/Ud̂-hgѐVH_9SGKLTwH1fgq#C֏[JG;:zT칩u;Xz!b.!egcq/daR jSE.ʗǥQ)Ήcly3 ozՑP{g45Kp@D@EWl'<`V[&qse|Jq hDe|#u)q38\)M(޽_ħOQwo"V1jM?=d8/O i>nU+īCỈ w7t!lueG,Y!0pY3* dx;l{uItt;Dsa 亰N_®1̸dޭl"]Ⱦy- endstream endobj 28 0 obj <>stream +Hm\~A2Qt/'8qqR6L;zT{gaCwlUwuu9)Oٵ<TZbsh.N_~:Pcsk)ɇ6G qssj[ r2Ln)ZͳccC + $*K˞صٹqN3HiJsl.,Zb鳫]{9AR(s +9TnYR\02˕zgǎc,E9ξ!Ӳ\05_a_Gyy9NEQIs5޽?ݞ:\ǛZtzѓgWfӃϦoU=~y8owޝ=ّ}}su}yW{}xˋfr=)oo/OOߝ>Zeܜ~%ܩw _?R$_^<9%t~]0Xbywozs:߻JtPi^|x*|ɧ㛗fA><;~sO.>O֝6-ky Vnzd~_죟G>t\׹9~ͯm/PXQ=_v7ѿsO'ݠR02Ct(<* ׵yu2%O7@T{C~J1ν41VӢGGc1!>T؆QڅY'Uv8`cٲi '풆n0FgSPG r% +rL*_&in[xhlI +N!tc kЎҳ?ZPz|tRBi-C) +Jnr| RC;PϚP L38y O! tSR; F|uAb@+QgwÜ`y`UMЌo$S1ʋ&Kş6/ͨA*թ$)fe{ѢϬ7Y5` mO SE?]qCJ41X>c(0k,C%G2g仝P6:1QIqYre??Rof]IJ$|&˜=(8yXwjP7$9O;x}p@6V;f҇g-de8q_Z{ш[kqJAE&PwN ^nT12$"C#=たK"|*MlIǼnPӤtD;~jޑ ~!.wBD8WL%<5kҩH7)2犫dny@zM2BN?3̓^oxa$ ^\quL޽K$yEkA@$!gJ)Kzx/T꿟U+hYp]- ZUͅRF'n5ˣ#W6ɽ):w1Q nEh2(z  c8.P  +TyHx!ki&L{'!kL7;n2mQސyqhh3jJB<‚ݛܘV- YLvS/D9l7+bP4u9D$»ȓqm7UfK|nseI2{F Y=͍SjqBy,a5%=ۗ /V=3F ࣔ犙mjC=:cXt= 6qUtYxdRS|Mk9ր 6ȑTcGںmP+av'GCRT'S]^,ilgE Ԕqmczm;S$㘕$#=,U٢>!rK_utu 2A|]U/D+ΊAKg8Zo1L|@9e#LőL;قF:*eN#4JA3yпzhMI-"}7c=ʁWލ=,KL>~ pQ2fz8[Pr%B5{Q,~4džS{D :$'n{A/t=eh =:з5IS!Mk8I;g+j."uL( D:28KGù,ЇXC !1e5Y"</H_S--: L&4OxJ(zW}x;!Z= PLkC@;&)luJ-1Ө̀PY+|Ob>(YMBB:;5ْL%eī^j$`.fl'ò+;V$Qz^۪#.*3Q +G8R2 Oe%0Vk tNh"!-øv)\݃'Վ֢4w=yE R]7VI% L +lY=$@J } և3YR1,Yr8W"h(=H)$ + Wq%z08* jS`bZLI +Mh+ 3&>ngOKY԰&Ė$ژ {mϖx0Wxl}G SWyH%)M}# 2D" ̓Lq]H|5Jͯ몊vTbS:Vv]'fD/#ct#i*T:4EHmzbN*Erjj8{79MM ۘv]I/U0ߓϿ篿~ᛟ~3'R>?/_ۏ?~9C.{^y؜Lߓl䪺qڏc  `$&Z@,P F/s Q%9!.#q*t V[>OӐj(b^{PNMI1P^/WGxb8($0I ]Y)`ni+`-g7sP3x1ϛ}L WLz'ڨ3B~9 qҖ-˘kqY120gf3 \0r(%e.0|=⮮Ĕ}JŢ눩 K'6ڑ{ HW1fPo!i7e6b2%'ܐK&CC "$I@x{֪rH Fs:m\aG1ibzDиs>Tc8ߏtp50c+ ּ +s8)&| sK{&1};n>N˕@:ɂQxcrfd`&5|Rq0BYB-2i_D|gOzN ;x\FHZD/VrDNS8PNgPrݔĹ؞k&bA!"1C;W4+rxe x9rP\R6b'˯oF4"|J xxA[+?~S.{5K驉FrW,:X±qړfYT'Ui2ӅBQǞQDItZ#٪k5dl =ӡ/ 5e<} +jovLsNs<(hqN Q kgL, щJ'OOۀOeWsY5¤ڽ?/Uk Z:ji1_IS!U  М]x 4z!jCd>NDzќ6^)OPք"5ҍbÆU}8%SJ)p^1 fDQ2f{t+ш4s_˜Ca&buj*4$5ǮGrZ+hҊ12 ^UWlL%`-qإ6a.{X.[!zQ g;s~.V^zV>${nˈ)f9%SU꫃&6dl̳dRszhOY8hJ =:M̶ʇB*}F-7EE,}-+jkU>>ay)jОM?Db\@>c٬oS IxDpD Sb@][Ƥ :Nl@7~X؄PPƬ>([-$J*)Fcrm wysER?Sb0iVL`jVv&.}5lQLKQ*/OŽ[9g=a ǽ[B-*Xn͖r,& GAcrt]$b~mPΌ7&jCgd@7X08;d؈w&}^> %ϭS#|HO@\QJP?J(:M +ʕ-U[}+D$Uj3g](>On,B>8N-8Wy!ɖP +7^Pu o-k+6֎DxQ$23-17 z4aKtwR9m;jDEHM+#YRm7 +s zXF7q#Q萣mzfp/|VVh8`#YHj $a$>w'5"\[9^#f5'U|@{]^IU^4,Zx`mfu YsYI\ /~|ڻ2 Jc>/w0^4ϳ:W+<ĴEB̠piRi|%Q":N#a>xW?`&#"=ͺ1w,.}Jz#*tgdC@VِKtj+-{y APp8h笁Y mn^ ͨs{j +D +aA칵85KĝB?I$J{R>GVm %i1_TQ#Pt8fD*z D̉:UH q0b++érnԓwZg[[j見'e0#ƍ  ܞFc$4CTDx]I*u:D-3`Q<7 +;'y|* ݶ'\pUvm`>:}Waq{芶#ָ|+ύHݹr'P}us󜑇ߕ -u0JX;Y>'E +seyՌ|@<)i5v)_+} +_P~S3[\ {ƅ{DgX@0]iRh og"#(2[88d +#NH^hK̡*!M?1y֟W$JET#LOQ gaj\ǭNΈ3~tRiGu*[li +Y˜CVR9#8(pRҩhӕטq }vy>9zX#G*hr]B3{9T>@367$5:]Tfa'=  *À-. Ausi!+{97UśDJKF[j7p2m7!'˞Hn J8}WJ.sB +jb̊# #qH."/+.)fJD(Q><r$_~o e\V.K *_pdON" +_yί *j;/k%J)}?/_ǯ47oxow>OC:^ &Ɔ~8h̃˽y&d sI|1'2]A sP}ZT`]@J]jQ%يP"'L%:d@9 l>aIg?YXuf|Ej +*9v(B=㇩O> Đ>YDB2-ZE!gLg 2xRuJ\JFKYt6R/; o@cgġ<¥Tt=I,d-ʅe@)|o;IHk Nц4J / P98,ufWԘd }Nabt%^$l PkP4>M-mX ϣƷ_CH[|:.yͭ5GUr^El%~sb[2s`ٱ$+69` *TZNJjo8`jx Y5J \ubJ/gMS x6wϜƴ>vmF#fd!kһ ++sQ +`yǑT4M6(j6ózvb\b E? Qv,*M?jcTƍc%0],1vӭȾQȜbcŨƒa]=,Y Gk ZcO<.XϥsaBֳMx~Pƾ|âhFYwbtAmŬFqY!j$;/yv%.U2k$|l^}k̚hN/UNNd+XxY6Ķ#@D'<@o\e f%kdpB܉:{\ +@wdUJ!goO'Eҗ_m3O@2I҈0|ɕ tn('A9#q:)ydvuhCH߃ճ" c}HFe>jû"X{'zgWbѽ3 w,g mx%)OUtJLNlҍIY$E^1Bq Veo`eŸ>( Zh# kd)qYXR?)L/Րs>I'foK,s巔gZx\a$$\+ҍqLP~7ELPg!Kx.Oӕն7RfmKʡi֡z "n,tי(- +?ߵN +-}QhU!<s&QȒYpN ANk`mжM>/e>F뢉QsV} ߌYx@˺#^E9O~2O.HDg+?[,T ux&uܣFa-&(ƆG}BbC;lPFMs!zFP|xP~KgX9Os, /> ]|r꼧<RVkzu)!O⌊셠)>(s? y>/4ZhqkM\ @׈\b dc5Ǹi$>*95OI5۔#WfΥ)R +OSQ%DjMsf^T|V +N4Jmv[:]wku3bM{ڻ00y~ܔΧC?e^CBB|fɝwRuA+I${srڤ$nn1wy{zmqۊjL DՋe>'׀$jXX^10kwZX_,n1GEե|87cJ'*X= VcT6#~= |ū˙ep Eq&9f +`wfESji ?lSET|S4юHt.-_NQ2*gFȄ#Z>>!1)}@TBUJf Ɓ:מUUl]{qO8^n+zW~R +TCr%&a0҈(Ϸ'$w0{F@ . tא(B=rqq +YI($P[2êF`{I)Wwdj[Zn3Vw L9xzOX\`mTk ϐѳvr:h6jHnqsMRr԰U]첞uR}Oq(u}.h(Z7'_ s$tEt>Y ]C!?Zm*9|BIs2֣2hkgS-+l[~x',n+}}k?\3ĴfB̳"S硢WnZ!FI&v+.3& 0_ʨQt n 9"VVE/U-7*VcgʈU,Z2dWFDZDʋ + 44I?2Y)lZħT2BFT1',TN65v!4~r+&HebM.SkNyY7*K܄7Ď>3I] wTn?߬{9١ ,%1;ltSr&`A^ (Z +5[ִJ/ibD\RtXTeM@LNTx_5 ~LOKzUЄfEjDu(/%gqVq6zBu[X8^8prKu|KFn1,ٗ%VHuPDp&U͍$#W36M"F6-9&N׋Kv. y!6A0?#ɢ+\YS(>-(4{[mؠ$ +v*pz H8[GyvXIq㦷Uɖp8n%㣒X*5]z0DZeؐul!1M+l&PqE1SRWh>.%0 F?=f4[Sbl:0q +y]ғq6SҐ1|1>i¬Qا$(覵am> r9!jhrȐ* L1qL"O*9{T0VPxF#N8+:&9CQ"nB{+Vq}*ORTM5s/ͼ5=)=Hd Nۘ"bˤbaS}HБ"PJ*(߷֮s NE+Uu{57p=("B*,ӟe/]`!X÷?l/L Zj[=FNbt٘l!7 kۥV#40/77 f26%+P喂5͒\Us7[ˆpTtrCV&N6=z +LdngJ +Y**)[L][.$(x>Ȇ}`zrב̍?yj= ƹ?`*bp"f`d!/dFZŨ; ^ERIRYO /pHy%[<%__41S "n(W^ʲp4Ȁ$F\c6(ت̫a7Yk19i}M Cʕ d;!iY G0 -~WO|K-S>6#H}igjfmfY ⏪`;ڌin=K}@iPԺi.H a2g;Z +N5{Y[5X4t8'¥{skc#s'\|}rx&REcmqؠ%SBsVA̺)JϤ|&8 +gL  `}Z!sebtG~ dcc.s1ξ[[D~k}ڇѸE͜b_qZV +g .,1+:7x" zҮ"tV@D- 9Zd ă^ET]@.4pN>q@e׷27燔zyR +O|7ċ`j&݌;>*٨ز{l,#=<9Spt{M/;VHlp@8!{iPT[".RvuƅJz=-n0_9s!Wu6D^DcMeHe|W5mD4#PP7 jQxC7wʘۢ2Z=DjȏbB%B(3o($YB\C,lf>f; YT7 +2ХDI<9q 3zJB2Ečjpsp2erXM |waC٬Hш&6r{Cj +[9fKyi.s=Љy\S@zAv/32췦$7!ƓULN6xXyJi|W̼PD^8:12x!Cu#Snu]@$$+hEv˗QޚZvՌJ&CLNJ#ўJOFGOu{DEɍ̦|?3o֛?ٶ+eI2DZ]B6SDnIQ_nZ&(/yLte̸Y*埥u#2'oDd4_F)jeN#4SJlȗguعormn S5" ?T;.(]PEo(ױCu;@qs7riuQ-9OE$ͅRM6_73%50B喀 +aJnM^oD( nV qcR&n{A؄?y/ ]2nLL`%з?fmI;g+$`=F1EI[{(h,%fXxb>6#ii}'V%> қg'ySBѻ k!U|l +e_;,x=*3 5,eV +4ʼgVPW"HSZcޜOpDXRFJ2tFQ6QSa7E4[<`i!A!(TNuN=Υ{ntuu )Uv* Q[Xj{3Ө,Dž4{iK&}fR*\'z@),@gU`v=uWE ;T/^䷒<͵Uܜ`}0mo;oB1,YC\)KѪQ{>)$fWŘE'RQD6S`bZLI +MѾW<#2H3f&ݚ:},K~ޒ;9dXqUYJMGtjq ]HHr(FE=?lci AE`ޛۨD֋wN#9'>8*x*>8\lЖXW]܊Z +&Qb=1e!_FFVCb PݯC*qxq>]G2! d $ !Ug#RSv_}\_(`s$~s^79"{I3V} X(lⰌcpҏĄJ>!Y#> dsH-]m`Kl'Kl DOU9WଶIC=#\y<n=MO9+(HZ$P<V9;kFؚG(#Rߑ+x!%s']h70qu8#ŭHSwټp8`>N<᪫!@) ]?j˺dbPqHLP|@v $Jy{38ԽzaQW6mkwb"b1;=ީY,ΛNDՈBq+j 벋`v,;A5k=i¢D`*\dZOX)Pv]P0Gr[UKE741#zlq_@0'dYPh_,v'iN*ʮm>nB9" +6&H\ Zsi~m(?Oe9IOz ~_I &(*b@™@/;(;6i#V ,֕`;)|u&BC{CUB-9$}y38S+}cu5M{ݍdaCP7U3\ ͯf<uUXUPw<9KK3j Zg GǬ-ZgֈB,Shϲr/8 F,vp7› v[pCEcJpD6l_B?flZDBl/>"ͰP>_Vn+-: 2T\CSa)R)RbBX_ ڻl.= "r ;z:wp@J1Ko3s.ncR ܁>?8F#\;.]x;I՗LH.0:n] 1ix{Vcz0ge X>=-ie]?4LfE!E9395b$ԆUp#z|n~Wfڣ +[WX K'hx Qs>+Ob">wJʩwGex'5ttd:{i 2` YzǪ@[O$ШA}tH {Z|;+kܧΓ#F\9q.T"xe!9:{E_'FQbq(#"`%6{ƠP!ᨀ9 {8hS {rT(. ˱^q"Zsg%8+WoυeJ[O44 'XO y-H3{T}awbj(`+lDzB< &rwҠFo8ЃiM]β$ûW/ &̴p ]ȐiB s2L/\#LT j@f`J}O!h[d=.J•taZ66W"5z$.z˰h=yg-҂hFVFVϏ:0vv+2q<+:{֏H,ډ][b[ܫj25=؛{ +5SL0sb;L(VЯ8Y`84bŪc]!^ZGOS Gx%!;V*vl(kzZwV7ᜈ@1eΦ!wCКG03;Fۓğ#]JeeᷲRw\I;!u8R\Iia\:#n\bp=[FEˏ\ƣt%N-X7q,r9=Zr]3vvQ' ܑ`ڰFI،Q@!I?x%pr|OuQcpܳas+\Y"A^=*tJ\=,0  JW̡xvC,e3N1UJ^@A\|SJ_(f~SXUOŠ]e\ b=+.tm-CC] TmJps^W'k/&N![p͉zm`{ʹ!XYF#zk$YʪG,OJ!|AGnTYX\l5q"wbƴƮ?Z:]f+v`N NAb;c-4> X+22/V"Kvp[Dpt*KkӥkM@9j8y3pvCϖL9p[DrJ]txiۛd.י7 +9{+`.?3mq JK_d4rv:r୸&;mdnPa!nc\牘S!'l1V 'L +)@3 +85FRjzRjdkt<^|Wd2 CClT 'Qk meMV[^^A8.y\Zt\k",p[xø+e]e +=y;PӄR0"Ҍ=Xwx~U͵P5I_w=j4V.ZVF% lxG/$6vB1-.F Wʺr1l۰2$BI:^5YT7^PBSBzV)AeL-P|g a7͹ 7D:LɠxtiyĜ5溦HjwT#WۇTcNq\)NP}7yt=8("^H+p8?~[I_Wd&CDԺ'ofKZS   #"i5¼^]HF;>5)>Z  |LiLӳ9D.Iڊ#eEUS1PQ9I#z,yJ;E#( s@`*UK=MeP=)n>UR&#zטSr1W9nd }6]WHzcW@n(9Rpm wƉ2'* +ġ=pdGv +3dǪĩT<栍+$]6|UV ܾ0V^jpu uvVu]\i,ۛ`QGek^g)q;P}x4ATN I:nêȄ_ (N>ީ R(|AO47%$>w|o߿/~zoӇ_o^>yO|qyɧQxqtm)fɷw⾍1_S 6U4vx4iN "JIIk;<1t"Gd3R&@E@Tg1jXӢI)E& /lPMٗ|es|j o'Y( +:pV'uN,lHԾW)'Y \)gV `BktgPt,ZE]vKAK=bU[ֳtoG0tINj&SٓX͍apB}AT5X Ew-d*~v؟Y<S_i!)I aY@gȑrZHbc +hiͲՓ Ku< T8cUR߁6:UlnBˠ/8{iH;HRIӗ/PjV>bR{K܀RpU+MϮ#a/M̮)#=+2Ea}h@Y@A8Xr,7+/utSGqs'0 +#䩐$/ڱ9RcOKDusmF1 7;P*~v8K +UJ1K/*ӎDc:X XI֜Ds Y%Ecrs5n.F6+&X7EhXCe UQƶ7f|Cͩ%*! JsH:;EObyI3ݺL {)!8LnRczQR/qS19!Sw8Ln> 81(0c^cސx +q }j#tzEH6\)M5:Eò`U,}_c$Ƨ*_kPEƻ,]GS[Auxs+6 &3 ''3 ҩYcV + +#$򲎴[6э0 +'8JQ,b`rU~8KPɾi*q,ن2k#G6/^ GwKiR[vףRψ( J"f!ӊS=VUC]P[I,Py5Y]Es_`/kwEC8&g `_K >U>C[Trl'@(@a)ph!`ˎMt^u5,5jXXf]%P&zUpZ1P5jq"sv-z5ۚ,reak%/нH^CBYQF5W`txu LYVHMqfQJs2[dD-H&u1es}( VmPK'*!ზz#t5`%eɻLj$kXRo%e˳5IqPئGj\_ -i8BlWEM<8[ +(L&*Ni2',"Y [ + ƽlwUN_z+9EO(%J`S|(Tq%fw*Lh9a%fiv=dѕz?B(0,"ȿ&(`@#*EqBNI5nw HתҋU,^4uf~heb~Ti_4>B'BcoD-)|S:B;KzroBuH9/GM_Px/RUTvM)Rb¨WV7p ej\Ӆr$DGtHǩ,Z^y<$12$Ƴ_vզ5޳x<j",JV`/>cEJ,CV#ՉۇLk$ԛjel阯foL(ۆY=BN~˛JG& &\[Yy)*O$ǹ/*%QpCȢ8 I3Kɿ,ZQ+)'ge+-)Nf ,YRJLZΊET" HC:yA9Fg5}bUՓd%:%7ֶSc/g#1q&@ u7KIH@0]/SPM 7PuDRa0yWR%l$#c0:7KwjۘSTaY +f#$ՎUj گNw!>5Vrhbr"E>stream +HWX ûHE)JLOI- + X N)PoIaW(j8Mӟsn5Ɲջ+V\ֺ}ns]}{ºiho8Lk_kɺ6/uM,6{ω~dJa G!ǓVw=bdi&-ccHhdZ!l\cy/16a|D_Xв.]dmNJep3={Ǽsb3yi Glmok1{eU +?B BZǖaېaW^-{[mֲ[?d2zG"Åb6QJ#p4p='V'd@B`yρ2fO5 \Wy/H'Lwm"&+0Xcx#QG4{\'Tdϭu QAK ﯞoJ]F*$,3mĦ=9ϙyk#i=ޝw|!/W݄=9Ӣ{4xZ/|W<@2NͺBݷ趁UT|.zKq*$2jv2a?Z(nzc l~,fQwi| Tj?-H`)ehqdGP/ Q/ur!,S|U 0E6XEVV-"-:S_~ӻ//Щld>ǧo~y=~~+bw#U nx~E(Y6G#2@oUHQ7Mm+ "} ~u9m6Z5eXaK`/8GG"\?O +хNo%grT$NL2b$H:+a>fp@T0NaÂ#2^F֎lʿyo@XY-rI Mx-[ o*4 ΫqPh40vބZ}U~0R"dMApشޠS[S +[ +SS&3= @vR|0vW75b:n7Ѓo~gu-!6mx +1!s `.ux'cQ RʼnE<%Ipx79ya>2Kȳ9cx .a,tA}P|*OE8"1O'u.Lq Fyc[H݅e݄ @*! 匋Zz %_ S;cvة )3[jxBW3| &=_{BSGANih +G)aɀxpv^58l 4SkosRt#VR0hX#9NN筷U0:7LЩ5~3jC@?>4@So>(5sܢ +D^- "9q\cCp haXɋKд("Xl$MюNU7~laG,{~86Vl6hsXݭ oek + f6 @ɐjL-ul|9E:c}¦z#۬#0`ՀWI-`M"ʐPSp`0ӣORj pho +A5ɨlj4$J,9Tx<Ӗ1"Wq3@Kch2>+2'O l>AEZQVW*%ki'q`OgL@ePPLis yd3RP kh;$sc+'I%Τ [DKڗ$sŴ{5-oq&m{P3Z9`o@Fݎd 4 |VOq-`YIPU^* y=N s:5[H81<& pqLCdV  T l&sRA66V @S,?%:5Q/R77j:WK^riȢWLwJAR *4ෟ;72UFTFf{ϣ0 NjaU++Z2Jю褖lԎyD@P`+9(^4)Z92QCa5D3:@:ѻFmTؓgt +@e4XsSnXruVv>p^QI 1n"I$M9p>B+% +`5##ka:չ{dzpF;@wRC|Rg+}smL.ɢ}ZD=r#ž0ÈFͧ?s J1PqΈF:LTawh2_3O4+)Vr֌-k[OVQ.ztPf_c%yjaN( X^#JW_6,tFiYPE24nP ViΉܦnA(pPu"H+FIل5eլ"B\E8/5#m\|~]S1Ѕb3T4n&nlk D!T9%N8ŔFYYh@][Y(׵,dJ j\6JbTE6PKCap:n!| [G4\,|)7:NN `NGJSƉo8H3*gǨTv + +١kY ۣnX'U2m7:=wB@U8%NvYhA@. +]cь$¦}~#YB2fXQEm=BT/B4v;҉#{K"G!cjE68&1 +eBfB6 k=Z$) :JME"N(`ay \*ԹNVwa雤Z`}UwIBJ4֥mOer\Ki3]. S74! 1-y">Ʌ h^29!v D[+"7Ѕxtߝ/c}~WnA:B#6pq& @+ a"|Ӈ??34!yw??O}WϿoϟ;??у~as>W?iԕs/Qmpjr8tA߫ +m{."@2XG2<(O>4vcvR uBqɕ#:Kb0U\i^UˣE94,,x>sF9(2ݶ{ml41*X97`UDiBB1bA7;{*-P%V|k&)_G5$$)[>*WpĄ&|DaE]=[OʺoSn + L13W ǹI*3V+-?R?KT !ԑI֋zlpUf֌bU +;EX(J &J=7cWT~2,ۀxCp _-6UG'1ΓL|G +iϺOl]T%imfO)*0m2ii]ID4`uP2nYgКsO4/k",,i#aǵ`}]Tu4T! J^vi٤ (gIE<_?qb8$OԱjPM-R"Ypc΍.b)Y9Tf[یNm99 +@)*x j!Qm$HX`F*Uї(Y]H=펦Z,%=v ` NadM!ڐ1w +Pȶ5]#e6U\Ni=m b9غRSDɜCI*׸NKv2# !$EBxQ2֥Qb;H_g}; { D2"o.>ԉJ/հpBOzn5Dmdfbo ™R|F/PR%(nGu;sh*F#X yJsW]J+iS7H`cao9"O=B v2U: JOCq<8=FL@/*-)G$AzlX]2nJ҃ HJ*k6%eZPpZhI[J,pin#1r%-V|ͅz y#Qթc54I 2)E?x7@RM k] h#EZIjh%%oPI2*{8/ǙGXS; c{j fuf%RKFFJuiDd%ԅem/JMBR 3Ge|lk+2 lm/ߞE7._J+bN>]:6HZsn9Xܛ5H!,rI;+#yNph)%wXuɧCe(4Pv[1@ jN.MխfTwǞ@\$kPd6N)48 RsfIo=ϴu7<,^n۴eU/ԛ2Fc/xx ˳\N E"YVtrMiku_]0|G,3AWvN.8inɴUb*"8~cdu}3V ތVhl}` "L樰fka(zWfz !Qy&1/*7m+0K + ЕXmN`c;I +)^Hy +OGX]@p_Q +>[:v+R0V> @k34DRzú]Izd E30pDjp9h"[{.7lM ۻ*hU\Unt.9ɤvnu4ȻIlXŴ괪M^z˜vQ`]Ro+) LA',ڃ."1ǷW;"%1RDzk>Y*xQP Or7O +LHW'⮆Eⴵm` NLtae*kIBK)dXa.s&[3Q6Φ&5T!"0RDGňkL!q);8MP׷mڲhcuo\Ϭq]A,@czGbVS.HFhVQ*YV6uK0_ӻo )>wϾÏ_?=Onfÿ?-ndyK ^|r{Y}ӿn/>꯯߼^}/~x>Ӈb>7?yWluK sˏi,Gη7@Pχ&)FHHxj@lrSabdf5s<iWbьdӡǐ/BXSp&:cHkMNndrpq~~.KWU#E{mᯠߢX?D|oؑ4q.pvU&vTgBLFs@І 3RĜIy a ΂@?Y 1}?G;& Z| XMn]i! F%+lYw$㥒Rr\!.P +ZWlExLUF0~isW#ŽCZ0e>`6)HEh4#zp\ŨMFsǞȔS.{J|ɽ[Q⤧=Om\vVQn΅)o23 &h!vP=j6#$eE<gZ7+<ubP4::zgD#ĄQ{)Fz:(뫑=g 0]|!r˒iS5¢\и#Ni$\و'W++E , 0Hk$YaY%fe})81oXȡɆc">Hu<6UfΙ#!ՁA +:R^yB#8*k:釃Bq:2[>~|Jb\xQ(ẅ́Nɫ. Dr˖F&O,Ķ +Jf)DqNlb=0HH7ǃqC igڦi٥Ih[MƷ&Ko. 휁bsbr2aH)󙹬ZOF׈ Ah003xTH"d']^옮!+*τ€p[yRWd.lB…[\BsUww[ވݔi;ܘ9^zrH ZǫuSg&~6=L6wc ~]*KƔJ`>]aV&VENf"ON !3[QQ] 4k"7< {Ʉ:).93veb%p\/({7*{?\luE)Ui!0R59Npٷmk'H;) +R/JW+~˃*L%k dVB]t䵸ZZ"1q#]H$X͚YmZdִOSf/CZ&K2^*8}B+7i1Aqz+vV3yR册.d "a;3F>"E^Rlu0G Z9OڢnEfU[TaD̵2STeB|۝ +t3JB,ꛠG h=~IfG\$VQ 6EHy6iJoan?ȒtR/:eDch/ +qؔi_XvDڲojú9hb56 RˆSI=3{=Lx.Z[?"ōrK"*"zJfȲ91~ 3ub +8[!+oe2 m*-j9]2sFz٘9յن{"fӮbE;"l''"IAE+vX_DcE 07Kop/ףH.em\A&{F1C9q#9>psʥ4 +*&H1Ƅ z|GF؃Bffk2 ^S&u8e Y}|Q|). ۰[V"!r+;I +>UeH>EGpУ4]$a}TA1! +@ȑ*z EV.Q!3!;P (珙9F־%+▥+ؾE' +K/ꃈDIC +.2z1)`&;'ñe"0yȽWM<,wih"8D+8J!>Svl3+rX>;x8͕xkBVρt1O5Ωu!C6MHN=9-0^=3EUrBQf+Ex+f^tKj^U \׃68%Rj@$%6wGanj9"~ۉTEHZ*Jkp&Rl%}ʹ%h/VTA+i -n/_dyQTjgn*.~odۮ.8wS *b@!Q:]tt+ֲؖ]"K{E`ƌKK{wg*QRguZ@lW|c-3NQ+tI~RbC?#c҃u m#rv zSiT;<(]P-ќF"I=,O{oMn:z !bћlngʻ[g=D;(>`Xn P1od$1n"'=q2܄~qj岫WqDW9CЗ[2"e<$ Yߪ޿"dNwTK /% TCl* gjZc!Ƙw $ cF*I#ðW+Ƌ LXndQՊTv?Ƙ|H7?*ow}}+￿G-yEͨde{6Bp1D!]oǂ~m%*Lv'Af: THsT$H8֜Fa'wȲQ|9BVmEQt,HU'CE;!)ٞhԫ: Mv R(v6="`Ny=n4Hl q7:Uk tMLdNu7<#(pnK=`#^VvE*Ve̢jRKM;YWhkzXFmCVm4 '8! *5ۗf K\ +.ѯ'k(A~ot(5I$ʙ[wX[b;oiE?UUU>˧Fdtocb2(xv8DLW3Ee֐Я^gžREn+d?Eƥ<K؇qꫂyQ_=ԋ uSNFdˌ`&ڹn g1#s#{+3&DSTZh@Mv?FYTie)1l "PiORSH= ?>{?݇!苿u}տ?~xo_|ˏwO1翻$!T &zl-uL-EU`Zi&\#^ r{#rIF5v@6(Me`w(݇RMfT:hnW0]4u˧T!TKR Zk*& Eo.nF:FH+aDu0:* +r7+gFV{z(86d&VǷOLg:9W +DA%5 wʸFr[װ~}=kHּ3xf>hK0Pc_)Ȗ4 H hAʱO1b +?M#*'BD~;s' +!4sH\4Տz҈}VSdG8[H.AEDƛU׏c;;Ҁn;-g@ԯqNv V>MxutQoyo-~7#W@9tB6CD~;Pٟf̒ l+Q(yKj6č"F.-]r9P{8w25Ku+!QWèɏbڸDs@\!)m,E, ZufA c(6x|NX!:H'yTw )dv'IKVzrn& b_~<KOF3"J$9'C+W`Igk0F|_E)7<:@68;?mavp$(e[:O3BVCI<* srTq, kWVJZ( աk"[wæzW狼*k5CO?ESM/Uo O4C2\rR}OFր9/S:*:Eu$*zXS*~ 9:ʯ.k+*=O0fwMf9︦3Punq@^Z![|fM)Y6{u@:&L9=a/}?%?jdeI7j<$v|{N9b!QWQ}*)'gBpϿ1sl8El>LfMaYri5bkmR|fF `qr)E lo)zaMk8ǃQ}Gj"&%)dΝ7nrRs[_gs.Z_S'HeSREgU۟1A^wC.M3YҩC-gvpn!=^j%:S2_ٶiLx~{#]K],Kk!FVS=ژ:n;rB|&Bo<(E2w>-p`n9u!.?岫GqEW9C@]Kf %$DHY޵v.IbŒaW>1N5Ĭp u$V][ \U5G ]/LlF$ Br _L 8D.bIIx_# szĤEUq|,hP'L\#0 ͌'^>ؿuyIn@w3Às/j*d@oQj5]}LJ'}'*:Cw3ڂarXuU N E 4nWHuhlf{L(ri7ɾ>V7ř|%td9 /]j2r .b$/Z}p ZC|ب.۲5 tDlәf)!,=[: + hv1iAC*T\ѣNznZ8!Z0-}E|0ϊxycJQ`hM53!L=kDjaخm-H.;fUE*bx42 MIx ,w(JfG< +(|aj#!+Nmq|Wre:eAOpz岘K٪;GjA*;EBVN 30EPY-SӶ}|z\ +UF;$TlSOώKj9S2Zwt1I<钌Y=q}w\2jUζCeEQC-k9^ۘ8 +Da1_tmM1NKqJ`romkY%[RשDa]k]i]);E.Z=ۭPdIpW (ot񤬿!!#lPG#>z:}JxȻUڈx P"Tf%*a)>d`7" 7&o]{Ex֑Q;h˞|'pJLu .$wS ANݤ>LQq p1[lD2 U6] _xV1vA6WSG'Ӑki8RG_ljwSBKlD_2ș5n1ѽvKiuWƉlRګd84ܐB3aPB26hp937P+A9Twδ +j?wo??7A_/_^û_~~oyG~ZWLWz=5b-7ԳthbAn” Rb.eFo/'<.3B ՁՖ/po:g*,ΌH v;;NJDPcQ|qETk-'Z Ftuh& 8F#y\ezcc2hYgvm`;ccE4L(1FQ<ݙAa'$s74)*tH3$x=߀iWB|xZIKTZ˼VH vYBt͈-H;úg,Rv oQlu>I ST. nKۊ LΑԱAwOQYK1ӢY<Ï[8m6T +o-ð0K$Skd l1~u׀9ObX7*DtqKw,ౕp _mɘ6.}n?jgZ#lFzWJ/Wg/Ͽ((R:M}F}Ȓa~%Te%,B9v:Qa5bD;bzfNRT|爍=;,]>6!?87NLklՉ(s8ܝCG_(C#{L)zlӒ:klT86bp*^}iJ+)Wq0Nj:MuT<8C>oFz "EF2FȞ@t2 jm5;;g?]"[੖lKd#"2I_:o$$]@l]L|;w)櫄y%P{Rtڏ .q:Y@č8Wef9 \"D?zxCjBh$Lt2!**{[do,W4JrP'Ng:yc9$ +vjQZ%CآSU3y +5*Sc.DY {*-K촱720R>ṥ͆SuTRѱn4DF;mtêТ@_'n=3I_@Sp;8m, +г>WDDq+PS+&+eL,컹TPfT#dU(es*c!GXE"8ZΙvInCf)h?4jlDcgbP9<5HƚOWnMj +_`[rmF̩ 7*]0IL. JtTg@U NR٘ b~Wpr6RFO阺=jY1@%pjeƪm&Qmfw=sAXJ%)(idaDA@it$5xu=6ffvGܥSFFRt%ud"HO(@З vCHEwwSN'nsCBT|P@Q*(Y/* +;t8U0H PPDYV L)o]k3mWWz?œv'H&hb*$Ww gyGq;?W7&m(R' ؖ<ϢP|2(17DyGbR8r{>PAs fMS4t +/'r@־ 8'vG,l,2L/߷J8HKv"Wn>5*]BOYz] X` Kd +ʁ}B[I1d ++Ҿ,{11L @4,Hhyz8p'Оym Iz'VZii b؏P9\FʌX@OU{mTq?Ж)ZK-~! <lռer QNUel,GV[k$/vC\ݜ@*OHRxM:! &׉ELAi'و*vDD}-k_뾙o*D1h̰םe'C\',(q۩dT'r\U]\ +%/yy\>Pۧ䗥6"ĹnS 7Ϋn$Ǿ,G--3=ϙx>l] k#Q)RF0f9V_d }|W`X(YaޟLq ٲ^n赙BPyMT|)m̺5&aYv*剹FLFFx!Cqr(n+< lkB{D]*\PXNǚbPSE8 lTBDK )v5f-W ]6O+&,@{/?z?7{\&R f$fMqY3wi&c +U428=,va-; H9/Q[$Iv+}징L+am&)dR7H#rΉ&lƔdKJ( +oM*@Pw, %'oQi68I;06WS1W0: `x"9Ȩe۱ ŦÀѻdڔ;*jTM +:-GӮwP@ +j8Fز%Xr!GO?{>{ۯ^ ++r߾w~~r%#7cMv~{ۿϟq{WzW_^}ꋧ~~ë~w>_7߿b6|й?xw_?_w~f[z<9l +F3*6FxHKO5ŌSu0ㄏ%Jiy +H3N|!QU.2(c!yy|AXlG|Ү1)E|^&ŲKGJM:4ܩ8ե!(28hӞ@%<;+2d/_AnJסK;=^ՄBEl΢5 #OM#Proknh9JwGˣwJ΍9_.sAm#Pe \|%zk>0gJs-DVEPϙIUOQBcg@5 5T_fiEQΓgƼIBD~B^:;S?Yq@b/s<3@VGo-eM-TA)s>[Wck{\+x:)_:=oUC,ADRO|Se +tԒ˖iR.4t {e k8gN!sI%NbHxB{hg +Kc%n2 KrF"xD3P'_ 2њ=R3sYYkz m>&+gmkri$H+:yEIDDZe sAk{[\9ՖM0L)A6 zf3!6PVor|:lz2Td}?z6VJbϛ98#ԍoUeݛ]袸m{#Dm<,"m, 7r?+ 8#%QJf\h>H3vjiڢ:$-ΨsTzlK'q ]e`ǵ ѰXn%Ia +@0]u4OQZqsDLA%\lW\k4"'El4sIS0̱H&;dI|m=_W;w+Xa74U2Z $?@\.m N#"̬k@ Ĥ}@jYzϲN)@hՐt"qN*;ƝIjED9o>h'caN $66q 4:3s̋r-E [#/l"lUa{P i_tz}O~;$vn_i-#D)]Ю 73 /&.CHmƌȼAܐ'LmRrgqm6M r̾g*C(`QU{0 8jEenA)N92 т=q@l gmጸeەEt\/㽨KWϼ9ϋ gX,ej}MQcfyǖg.<D +wij4vXp$[98[]F9͕.:YP Ds ٽg;db2i*7 3S_˅TQ +/bE3n_z5U~=H}ǩ$Քx)T^4ǻ$-|`##D0bdOGDxSwD":ojIj(EFQ~ٶ+T +06SgQF}iJZw!e>eAd1S4f\Z":փY$ >j4?촲N#aR҆| ~FIYN}7!)zW ȳD7B;<ԨBoX/͊#J/Mݫ^,K4 @Bo"miZѧΩʌH@tH%*BѮx +mF0HUJoh+RkY 5A꼪%0z>jjH(ΰ)mQ>= +~)qPHh|G2Ǩ]tnűCT:W|G!%DJ°twJb.SpٰJ=R9xC|g(oߊd$~сhݧ M`A:lIý/]Am/~g_}Ǐ??}óYO].IfkOioML6l^~Q\TmQ}Bw bAH =)J;e@± {qSڽm5-q楹OjH+p*jIu *Qy55EHixW!"-m:+ ++u#[Yy9oݛLQwa.?_02Ӟ)$s%cTZ;?ğ vU(r"#+ǮUZTb^3aMքkdC|Kq]΃`kJF +3WRR)q fܳl\im4 SB;69|N3Hī_'7Ţ;8DrhԦYm'.ycP vu"`Y]s8=$Үn^NlLׇ4bv&\;#5[ÙzT>spNrv%ų :7?WȜ|0ȋI+]B +\gŵM㮔ғ&-$5Wv'?E4tҬ7b c T|◢B蓗I%lx[N##.BʓIșTsj zgZ2]}0\u0%-1i,TbRl_b4 Ʈ+zLNCVs6We/H! ]K;4,= 'ؔ'G)s\iۃ.Ap>Sklš3l$HyUwaW2>g1#pxfle &tLdK%ea} ѕr붬6:x;Fγ Sp|Oت@\manU" +,ㆬɪ*i@(AdR^, 95/+WCQPޒ}2+1Ȯ )V#F gĿhg*טlD! SLCV,8zŬ 9] u}w.zx3oPu:Èx=pH[ŪV|\DWX + #l#jTW̫vaM.E@A +&PztA +#ā$Zg 4dԉ|I+Lɕ6 D3koOu u) +jprRK$Yv̂s}9> ̸F:[M@d·J=Jbd1hw\+AHy.PNV]I݉E"IBC l {h@|9ʤQGh%$sWz;7䪛Q3Țobt5yn+Sj%! `h]Q,4hlY!r4iaؾJHWH f\I@X;V}r^H$``14g'Y[8n[D1Lpm;_aH(eXcGNqƫ$fΗU.a3B4S0H}\  J %s/OϕNT mб`NVui Uqll|rJQ c8 'AxrщNA?+N}$襨 ˫~×r'!Da1_t-J}׹ P &F**ҥTSpNmp*oVV}'Pk1]=e8ЁV¯F +ڷa.>w!!6y69fsG#>zzG-8n?)!1,ZQ^JEŋ2͆Г,ơ#tH`7." +1&of^ϑQ'/$Q%CT".9TE LqV +kzmC39jp=϶i"B{W#Ko?l{=ϟUL%햱' zu +!'b9aRGr"x%)ap&^+[~ endstream endobj 30 0 obj <>stream +HWʜ||9%W'H.AA}g]a9˸c\kWjeW/b_M{i^kδ,0}XlaQgʄy|X㍆6Zj5Wգ—]s?|}zӏ?|g@_^Ӈ}o>ߏw~ן>_?~f<o_UmїZ^Rn\s c$0h^VJ{XkD#f*W0>vy곹P\hiGIaBJ+ 7Ѵ57!sԴ"[Zƺj'v:Y|rk*hx^CpxXp5Cr+2,'P}*ƎJ痹p?ho1!w\GȬ6f g4GBf{yҾp.[bF`]^V!.^gG{E*o|8 7@Kڌ7G?<\*ػi{dc)\b=mNHZ!4nnKHڪuH@"EAv&|\[U LQ&p\^ @k +SP%w0_%,7jVGZ wl]ld4Eێb j Ɩp!kM>D~MV޾Ȣi-@pE@F3$< ]u#hOF<wKȻVO:el:t2fYs]ނ:l<~`1NPlv$B)/ގ*jg] ';m(u Ce!mǏ%& +#PGOVyG e"B4HYzq l)"HhVoim=G6&@[T1Gav16~&Qu2;94粨NQ^O9 ۈ P3V*x"zVo" -KxEF%Q;(ĦuJ:"."h5zIY@D^ i3۲eʂI 0jU)?TkӡhQ%1@ܠ7TV64`m"P"q.,Mk݃ F T5՚GJr; +,U[>/ٷْ{2'Jîr™">v\fjAטkU5a67[iepXb&"~,oz*aߜIp 1NB4Od:sv 1 M)ۣ+CaYK`n5Xk{YBlj}=7%HU:A(S`Dx$ND>RE\Ұ!߆/3C*$H)IFlbR ~!QD2 Վ8e&}d<AS(e EauLOD|Y +yw|m}q?1gwB ly~qW%ж#6A*PUa x>-"&+ozN6:N4}+FzlJRSMeC!W0EMR P*Q! ,q:-I-+u(d#Rte[s/岣QEWu +FvP$((Œ,!#F۳뜿C %euPߧo$#5V +@5y Af7Vp }:ڞ)Nw=^T9`r#qzx2`Loe-ɼ)d:;r0_97jӍ@ݾd_Fqa(5NWn+c}h[uϼP5(j5? j%]t礁A1 "eD2Gi[읛e-W_4ث`ļgcwHwD 6vybA+L7PƲ`㿐l}7k8f۾IU1AFFX;΢aCdȋ[G j#^zd+>Χ?KYٌ4Wm# i$*ԂlLC%q%&zߚ $Rq? +Bw|k79խ&22A89XTe:2+pp2kJH$ͱ9ؔR~/d*u_ƅBC}P=_Ӫ:团W)2@Ճ4bqǯ߽}|Ϸ_ z+x:U=w~{勷o? cR#?O߫ρ^}W˷/y{?y|?yW?~~~w>kO瓿#I?GltM=<}@STP f`tA|)8:ԟ_ܐR!^zxϥM=u/ࡧz#j(aYYn00۟7$ia|F,Z 6xD!E;nW1zwYHRmSM` Oo9+o=J8ƩT]upJ2]pOo<9y%2kt*&^i| 1ۿ$0czT4n6ا`s茈#PP  dZ)x>;UpE~tSGT';u"?A$9FJ&[x+iфp]6~ƒemn< +\>&3KaDAgWk:XQG9(#f8gʦp(P!T#5X}B1sӓw(PM*R:,+RI6b2;ilY=O\(gp8iܻ7jiԏB\c7c~N!x^~_O]Wti^b)}і삟@f#eнehG ';&'NYh~JNtҩ5OC3ݤi+ow!HI[tsXغ/ +w 9a2/aԒƦjj W9)IYܖdc9.H"<RNKLE5N>rF+3A"@CD2-$jE,\3b)yKMq +HMV:[ūYE| 捿 L-ri*AEU(tZ0PLLHFH@~ Hvy}B ԡ9CG^Ƚ;!:BaEFXGy"uaUʝpؓm\+/cWz,k_Jæ)%J,A~Zu.g.M$^mK̊>^[7#ǰ?˴*7%bM.TjS9N#QI6} +[)65$ap@Lk1MYu9FI JTT^T/kJ*31 =uCZWvJ댷@P뤌-+^vCneoUCsY*qcz`b`Tߘ<'bhmm]h(UhWP H+.pjb5q$J.- X!9\u-U :e_R%qϲ1Q(~ч+$zegkq&}ꡲ*q 2\wgBZwf9ehVZ\16E'BrДlo86u:N).(\Q.az['<^@q9H U=%Y|؉~;Ls`Eș'yO*mx "* +8Uo X4m.*=(P?q5y"!=OG9 tʭ#.2%f R[=f6|g8_cc 3FY; .s1X枋)/>TmeXKM5M+YE˜$/21қ= u>q'h'_%_'%լ맜 +3]Tbܘw_g3SU%J +&3u'36qA$[DǮJސs*mFKTqkUթtu $ ׃ʍn{W::Z"1`Ujat()v{!O5kڬ-5p5hsTmx\#=p!7D1 2p[ '_Ţgf +VE[x_͐_H;tFeg}&\ %vэ׏*,Q;oJaLZK{ZԭOdX*ҭ*f{Iob&&u*){aRuitK?6¯`WH^=QЗi vLy"xP2*u@<5.= +˨c_FEvY)gbg$S1O`7>,GyZM$^bYJc aX40DT{Fc)q5fTǼV.LLʣ,/7*lMr2%سѲj{KqaYe~. +j_Lǿ=n}Q!ײ } &8!S *"Jd"*k0OM7D&?3Y|[*OkvA %㛽OZcv!>/?>b?TR(IJU$$%cJJl(D)J+,=*@l=sxSPil<D2f&h<3o[{sO}c.=lAED>9%,zw.]oʸDw/:fΌW&>ݺ|DTKu2KN_2QYw~Ks;d  ]K*?Տ_=ʆvν G`&p~׃@ ]##D3 `EUI y.-&A(* PڦVkhe 4'Dj`|˯~>ݏ?|oٟdu|?~_/ǟeȿÑ-enU?l&:mJ/TGW\c1 ;P5eH݈ml$[t(d:,6="U*+#Ttg\&I:`?AH @[zcq@t+?Ron|civ Pu1(QD5" Z4 ռ#Ү,h Up +VMyqGJc\{d7Y c?X/n\r:׉bk;zhv>[,AH`,I\ޣ7;g"l|!; +7? ժAJ,așaZE!Y )B:hwp8Sq/t?L%?X5O p_>{4KtlG)~Ikm09Ė1) 1HK:PY!r 2Nj5+5u[ɐWD4G%ʇxxQSRƷM{Z+2cs"]>tnC%6E=T.\ҽPmL&/]%&$ +_"uǍ\9U)W{k=`;IVH7WK@v?z*# 1{jm)O։Dima+khߣrDtH#;"Tn̑# 斷rу]6#'"g 7P +Y{/w"kT?@M#J)[׮#{VYn ^̎oٹ"#hCE{!*"  Ee3}uG +%E&CJ (9GZG9/,(L}B +0`VӋ(^O"-L~k +F@衵A@όOXbln'S'WT_x8k"eh_Q(ÔĆ>ad^vA W]p>8"QH!SG0F˜ +aMgQ!dќGp%"nwL3iny(N+}m!w*bJj^%OP@XIhXV%ckPΤ2|(ⓒJu-u@=Q31=2-, :2esJ_:79?q'[~H1nPbяINIi3ߥNp!sT&ӕLHyT=W?P_Qa V^Jf<]8Dgux4HXgZ.U7} T>"t0+GwKz*l00WjqhTgܒQhg3nT~cl\כJZ] 5-VJq#ك^A{,˦u +ۍ5/w&>?Ъ5͙&3/O MlSStg%BDأ,c9 zE_JwOi==o){dTGGi8Iq[K݆M"alݕeq#hýlh5"EiϕC +KR 5!ݓ]"cp:;~2zR E:nZWRU'E7 ;N *oc +SE m""kc2r9ZQ<:_o`PɊ2U`N9 d/tq]|( `de=Fv\=a,>(G(~΄H7QV +VDc]DdSjkhZeᑔ86%G,2@rf lhqfj)qY0̈~LOjڀUg4[_.`VGg|,2dJ,o{yFh!=]4 ۢ𭽱N@HotQ^Kr\"7ڣ e$ \h(947T[5)-YCN5elD3ƹCN rٕ쨂F}2adԺV ٖZmK{b>q_Ҏ?}{~FU/_HϿy )|ACF Lvx7Lly&}dpCE VsO^hY8DF"ƌˈ̴S[%ȰCY'SF*}8 HLYr%vE& K'ƿ τrA^ "!!t@s96ƙ(cEJTfGű-hŅs7=կ4鴴l]{2^I=<|R Pw S\v-JN<=jXF#vVBE`Zn=%6 NL%fʮ?/Y=Q@{H7ZE 6TvE!%H Gu^\d9ȻQ1zj罦#9M> p䨱IMȲDI'^tsm 6S.HUMM6Paj} a~ c2Vq gʜ9ƕ}p +d?/PõYsƌ蠅ưOM30Lp IO +ڋ_+(y;$@cYP,- qd6!q +r4)۠`a$d6+#cs+PtRߧwϴw1 ^QػUHfPZR@@@%r퀦"a2p~_^ȩtAb]+E"7TmĚfeDB `X@i1QφVğ ;II#w&rFBeꕟ(*9,Bفǹ@\ u)/!N!{8?4_ÑP+)ցUH`=M:JuD7;G>abvm?*o`v-(W4>eI0P8Ԡ7ʓ3ٳ݂ũXIO5*Y3L +3SYZioon&LR>O55A PWUݺDdwN[/D\vd\/@!/<"F E67;*uK)mx<ǂ mO!E2]-T&%CO)4 +.@ +(; ]/%77p Ypn_{u㵚.zD *?54f$0Z8gH; &Z'fRkvcu\mTeaP E#)-Z" + +q+X-L50PӀߎ +iRX<t3vbW58]k6hĎ5oj~c߀:=.ߡ"HB٠J(]{WlFo`/p>$(lY.L/.$ι ۔51ghƆ@ޣRb| Ί^2{6W@p3stN0OWOc-Y@mPtEJzuTAGA O   +O8Ȃx"3FʿZ9SkURg]$)(M5b"F)hpu r1H;8L4I]u wa:9CY>{Jˉs&-z3HV Q5ѴX#euBl3%W=(FM'~!sJ@-DZ(G|8\Yw`FYl|JԤ6މ\Y{KO%-q<"BCb"%w6P:1al + 9f!Miglu=DTJ҅|'׸Z@BZRR[%aV_ޑ q5FoOYVd=/Oq#"%|)=qhDT$*O,aZ$up*{tϼQI#Z+}G6=J2sbpt-GXb2Blbf ?b!gu5օp1B%Vl[Ɽ1ln?Q0s&I*M˱hqiݰόȗO/6ںQ*a> JEQ"Fsx҅QJm] +P/4`KG,+R{eDdMP%ވpKI`_5*ECvb(px []ӋmP. g ++wwNS2ʱjj9ڹ)LT>q+F/WsȀDћ>o޽z@/~0Tٟ߿}ۋ/?~Jc?_;nn}s C_fOO?z~~˯޾{O?|oO~Mo_G[ >|sόkKשN[[FJ7@PHU+FHHCJx GTK!%f篅r PY4D1|מjFgT,3F7 XQ)Hu~W+8B.R]փVmoK\"(ءJTjs)@;K2;`%ӱP8o +ox\GڍΑ>ǸfR1f +c!I!2="D#j1n\v=%RbTVf#u4#w碢T7eHAD/e84X`΅Gd8dq7g V 海T.X[pYoXZ%7,e-;i$ܧFQjbz`lA4:8k逪h(r}F~XT i Mzh"0Wc]ZRuRNk#K(Uփ&BygKj#fnAtFw5}2OW~:Ja Ǎ"4gT]qz+Hn̚͞F[1h&*!UBe̲Fv%|S DryˍO0\QHjd + +wF0BLülc; bv W#k@JE$ӭⶣ7D:T,:OY%R٫RwG|. Lm@k֛W1@Zs!'u|k\RZH7,(ԫ7 o6䁴Ȯ +wT٤BC-=8"k|vuJuR!63}N] v8#eShZH?0. uqU@(;HbM5; fYr` +2"d?ۃ ZB(@gVVIzF9L+qz=D)lƙ],GR$.GרB) 8bsb2 +&Ҹ$Bry$riWF0eN!ҫAf) Ճ o#"zr Ԩr Ȕ9Dp<%4QUw%a~1LAv1f3&ee$uLϦ n1+[qW܊:$1̼lvj캝d,y)7@ J.#9/eopz'=$F^G2{`$ꙭd:*ڼ ^.+W~!_fZ )B (ߘUkoI7jYsK;|=/A ow^5߻sCrkt !6^3f ߟ <%+wV܄E'hbWDٷe,z/dAUу@; pt#|\?"OΒ} Nh6#$F {:-}.9g(h7zGt\/=h79ϋ^_*۴(0+j8cEW>3\9l%bCqt{ /1| Ee/pA׫[e< ӒQٲSQ?hu +o2-އ0@+‹w9avrIwp~a XXO(ФODP$Ŀ7Z)BW,/yQI'anָmRT5(d:H; ɚ:^5vGhh)"*N 5;+kHNmafdoLQ;ZȐPFpq}|c3 dEBV:qRul?ˆ3H0J9QHm,8@[I5T,( B>YO)EKv +ˁ@ԧg$3gcGߝA!qAQ׬N|o”}YU*F~bƢ;_%V6c(*b`|,/ñeLfI}q]ں|Zr*J 7nV҈yN[yk|k>C&%T7 tzÔ !خ lJs؄سS_ˎd8^犝]B=G~]$J4jE8(?-KG (GFp6O#}2 >pVl؃V6iQx Q%T|v>P8o mwJA=I8`N,+Y(]F]4n%[(!ee X8i(Z*>$ ]J°TΪo/NE"|!] DU_Ogy??~??odx:~҅~8hЕP^Y1{ЄM݌-!ЇsT?xhnGz,nXjF +FV +aBiўgg5Ґ oa' ~r|6,qǬh2dE=&%#vҴsS$&z*'J((轟D܄eKn`1#qnہ& TuvD@)vEEӫR iu{5O=}<@.^g.}N',ٮ.[^==)u CR1P2:(AnTy%YBdtWqMb Hq %h7g挝UR1!ۥ}?ѿoIFknSiĤ5"W_Ua[TK H&%Ig'-Q,$"Q;':oRFϳ0ռS5i!_)C$=k5T4w5?53jbћ5RR3":݂ߚٹة_72s;xpm(Ǔ}˯L[2Nv9j]Hy>Uhn~0!@%8;kfdIAd ?o)?N\KҹHlL9w/$]-qXA1ÌQߧR}m#@$>͈oO}Z}[J:u]קsفhO8\DЧysXBR5[j&zjvTQUnh#5CH" Zu-H=["l?5a Jw*\[cUjUzC{(:SZUem- T:O)}>{]ݭ^5m:gX-lheG +;!-Mn9Br r{1skyQ#'³,owR@iL"zTMpu<<\Cj>l7'St N#"֒>_!Z- JG~y".a2ȕEHAH#`QahNPc@߮删sIώSH,?yEˏWI&GHWq-&zeNErc&EOpOЪֺs.ys*n ,͔{.}P JF)Wo2H 2E,{π0E ޒɜVG, lVňߒ3P/QKVtja0'BaeL6{ yC̒jɄ;HDn7u׹fZ'd{<\صЧ2u< J-}&hAn[V#4ctPΈrb8@y+TQNOÅtTjBe8GF[U)7英Ї%GE1hY 8s{[JP } 8FM헷P/'*g$nkqVm 'B+uk{mkel5[D>S7e/6l%PQzj=C8bI<z3BI!8Mia2@@E5Q3 #3:"uɭ(ga!C$rw EJ +ڢt82*u3x-L3x%Wdv#`.tgd?HYoaDYDW{=u[>;| R wKYU[uH,L3d9%4XAf+]N"t&1n_J hMJDJ㯦L_ȳ^yޘR3 wFKh؊:9D4UxC7°=+ҤE$깑NFݍj;/ hi~D* TG$b0J,Qd +$-Uh0軙B.WOIIe~ԣzq;놩Z#[)Wu'}aov`H 8S}^, <(f2ێs#\Sr"62EDD"Ei+5nUqml{(I?L^ʃpnEtꂀQ;}Z$@èDl*;\pDe_څHuWa?"Юe})kIwUyh+K$H]4o*Yq.&X CہuہT/r*a?hBn6Rs*{TErj̃gNH" o!W/OB, "?ZcC,󶫵8@,NEVk,:BWH P$_ 0!*FO1i;AEi*:D 1ezȔAICxg+ ijֶ⊜@p/ebE3"Z6_,{}T4얰4}kXMln Yܬ,0#DԻ.q'T.9+7I-jeyV儽:J`&4_uW A ™;i$h!DUKĘRقj,=;(I3D +4=]>~~߷?)lZk_}ϟ>~_#~{}gh_،?3eɍ/v_b1r'H dheϯ]#I,0Joq襋M9BL|%XKQ Of!i_*jT $[hwy`WYEa />^Fy%yCF 2CJ"2e>`$H4DOڌ2g;v*28k#!D=JuR[]8habE%'Ru5R%߸Ae-|tL#+|k~TEWM!k"(>[4Z4˕g ?D251LȦh15`zMB\AD$Dp ?mɘ6>OfEw^6‘IҶ*1"!zAU"zmO,.yj#8 U#vsс@os k3 쉨]d7ŠOJrɒUZ:U>KC\4m<ώTQз 4X3 .34 PE}tvzr5ϴ jQ9. +®L'/y +5*Sc.DYg*-Ь8{#{ h [p+<řR"v>E "#jg ˋDNSP[\` ^[$pj&ʢP=븲& gR?oKiph'qQ{c2¾KE6ܧNuLmlqqUt-bGΙ6*!Bs1a@C}A:T@Y7%ۉ-Z +78IyfsTJ! vwCϸ2OӕB~0RxJT9T#8)v/şe:1%[FJO + =}bW*`42yy!|ѝT=/f[77B"b_q :o(IU]ve1hJƂ$-qUN*.STe %=1WVɔPn/zQ9Hl\.pd|>Ť u'ԆPg '>6O7h5epXE|.󺮋c4Ş!mڷ{p{xeyJ"MIYrN_ı~k s21(1cE9SH<3);s!0pzE7/ԭ`ʻ2*6=AıeݢZ3/.C3=C.E"Y<]1Nx<>>/()>5*2En ܰD\B~<2LLX_$^^Ebu]mnm 4z/(I,0P]BdK \+h9U HcIDŽb-A7[&?&ŖNN4|+^!<KqߧMJk.jp3$)_k#_b+ E8aA:h:+Uu]zG"%bbFl]r7xV,Εbns HZD\]u}?7nhWJ.I+X= T7#8q,y]ū˙SNq>q:IJ{fVTA'u4 \WQ<;clWڜB$r36Uwg8% "J`۵TtA>Ot6r(' Wk7$G! y36=O:EWkO(7NM-?}y K,PGM ï0鷛 +d"TR +P Ty %[t>'ԀH^Ya wZK9M'XN-W4Ƞ1NlyR-|K̴LۻGz S-GQm3uBWlQV; c;bZewNa0N,/RsyPE%m6! >es8jR1SɌВT0ey+Ze>L;:cV8ClG#)@r*5Rb9x֋.#9%E6|1w'/X hws]ナ 2U VHz9 =LxQ/dud(*(& $2KdPsuA1㺌#a ؒ,0=z>A>h5YS8H#}_ Hq>$ȷw o "G/ +vǾ^^DǮ!†T)(cvcF=l9CDu w` endstream endobj 31 0 obj <>stream +HWݎ9}ޡoe*"բj%Y4da*ww(7s9u<׿]kwks9w-oM^zߧnM.>֊ﵨ} UٽU|eo: l/qYMMivf T yC} llS{]nCYG{np\F\IGMn0xV^CV}K؇G/tF<^߶g^|rX;~¯O[o&y}{|{}X^zx?}z=|Ox|9?~Ӈw8 %.~z3:MQq:%\FhPɁ"P% &&{ 5h{gKGXz eHD같 .va 4:s~f ܩ]ВXװ4xmA4.Qhpnィb@ɣ=+ !*)3h snsa@Z2Qata.AF FZgM1WAwVBKUָ5zoYDܚR|ZjMpʨ{"u)Kȴ Y0c k᫕~L@YMhjZ1h6+ +J98tG J/mZ.y!dDռ2 :ߘ^IL"bmn7pp:"ґ_*9h>rUvbl[Y r𴬝b iH3GiY,KYٓvL(%5$VnrAE6orBEEL![=o5\+%$ z78pluSPP`,~U=z: tf`6n eM;C'ZLЩ9S)>& +Q/ Q9 aA#S?HUNA!K4 dYեx u[ +NQIϔS%rBy#3fMzG@TR16 ,;{d _0+heVS'c:2j3@A3P!4䠛/KmI3K#֎TWD50IMO$)m0Èth`t. + $ +KxZ}@qxa t;(%+YsvIǺ^ J[d@k?Fg5Av}x u"!-ǣ +F} >An(jrx10xྑDQs"y&2W&X)v#5 +e =o~!-àn{iD{ 1uZs(CعBP*0X[OE [^I7uD1:.n(-S.8 +(pdLpNKP1%S].(3dYhڋ{%{x|NP.d$jɎ뉷gKX u.PiKdZ0zh4 0%v )ݮhZiw}{)kkAD:93Fh=,y6I/}b{Nd>iciK)% BcZ{rHƩU9#B~sY,?l9˫iiKh g#/ğT+~ka*I[TeS}A> m^Dn*z2,!fDҲĚY֚Oܰ$Q:vHxSM- +d@,i +LD3 ~ݢ<\v;3F +)֚-ze{Pخ +;n_i Q4lQO:\[ C>U9MU&dʷ]36c[IȞ%Qe0idSZn_)Qk7=ns nB=TV<4usO0/Ht.#G3AcM"o)q@^JHl9FPƪ61*E;8X;~4SBsf 3ˆ?b&Ev}^0)j#|^M0T2#NVLPQ?hqBVBt~'/ +^}ߢf\]2}F:ǩBdOlU$ -iD*oSY-DKAE+v4kNrP̎TGDTs?Bz8_j@K"qϋ5q|74|8>ֈp}UQV!Pj |cBry4Qzq#i5<8=Z[f^S&u!qqlx-/ v5Ʌ< jZ;uI:8v.G8}#59ƒ(%V5 iLd#(I@4(Er>YoCx94܊* :=BrF\̠m$D1S>ڧdڻ[`#ǩdƹ JыMQ%.(}9xoǖ <`{bO$ϼ("iG5y-Q%/.;62~5{l4tr@'qMC9.{Lw0캐!&$ߜۇMO=3'Z-\j/xi z+f^) 㨞P 9hٯ h3ZՂKJVRXOk9qDIWĢԇGLcK0b`rn5^S8ZT^,_sM(ݤPTEɶ]) + +W`N1lmኮF}i:Dk@l|ʮ"K3Yf̸hZ=<"ؼ>y\<خ&x4?G!?,F\ؐ/tߞ`ݼ zgo#CpSpC`aD:TSZ%YF?FrE $RЅRM6_73aK+6.vPb }:POBLpS{H1e R&n;C?y\hG%m $mO$뼌A2J5ۅ~DEJgK?n&<"U7y$&E??ǟH7ǿ#atDā~;h +^Y22dTѲ+!Tڄ~tx40l,ԧn/6:3,$0a ŴhQ=S A@O|>f>NU|z̪yDiz +Mf`=n^>E!~N_$fB5SϫR?7T/?ѳJ=t+V Uf񰅛#sf`Qy3(qv@"BH̤TļR=Q]OU<@:(dϩ^][^UCaR:1iIՋ%iE-3p SپDiV!2eI(ri -BL-&c(&~oψ挙I&cBn_5;ƒ-%]b=cE1!?Lup>C8}-!ޥ4Jy ) +tޜ_w*PQ|{sՙIB>='[n (X[諄y阑ʢ>޾~9!_zCdsZnIP 5+֕|i]8,,Or"𽑺I=S [rD1l@8c|w:UKlx hQ;V>W쪡Iȫ zՒԤDצ΁<;@;3jb!b)NoM} +g]}Ϙ׍ahl2D)<^V[~/֋-&3mdΕ"tLP4nwWO![ɸ5jڔ +Vq3eZCR16#9BR$[yutJ-]Jj++&1f92қKKGw6ǖQ֯/1F@Y>'"G| 4#5[%dfsJ%R<'FwsGv9Ƶ8)*چñU<8,mw'8d8r ↋$h'U+HP* UBZd>HвwXVW iBxCi=g&%;]bJ^JD[1oSi51:ҍ1@}4s%㙦2Pu'JѼ^.E*gF#CG`n [0N pgݽ{WW) DaQtΐѱvGD9ە\ ki֩>/[h^e]HPzeϒḷCX IndSjEؽ@25}v=y j~'ƣCJ4#uO|%|%lA2eq4E-wk\7n ꫬba[>"4[ +Ҽ$\IA5CBo̕ +HEކlgsёiaֺȋJ=Oq d%1r +wƾƄY ~Nհ4MK xnƒ5|] T|IbcNˤNu2&ȉPr'vh{6Wj [" ZXzɉglŇ +z^Fi`e{_-!0%=Qud(:!)-xctHYUh[g|fco}?is=UT;2ȜJٝ-G n"WU1DeѯqYզwV!T\/#b tMŸ́aA<9^9V"\)u\T~ήÈփ2ze$6zaӨS{% -JHĦ;=eeJu !VӮe\A>$"ѵ\r.!W4vϺ Cn_}Wgg1(I(,cܚSIc tdFVЈBya{VsE dʓ%R)>cV˕+ȱ3^rju_aCfˍ$rˀ'#g%5^qviUŐ+6=EiTWF|P.v6l2Kacs  +]RS Ӕ+E1_)r̛-w7vldYT:"&l@[IeXGH"`T__"Cr >De/{yK&! +(I\8g 7b*M@pwwۦ؝NԄKo"ŇS+QeUrݎ4ha)͡W`jN֎S +Ji <"NDͭZRoIy-(2 d^F'74g씡A 藥8ZGW,z*꓅Si My;ŗ?}O۟~y}O?}_o}՗>_-~{=ghٌ?73^OS# o|ќzlw\.PrA%raXٛ Of环PX3?MZ +#e<~DKz8F ƀsİ9OĒu>tr;4 +8z?bRO}Ւ!_ӲeF2 >CGJF^!]bxr>lQlFP9FA !P7W*H4,ɳpw5!8n2;FH[L!B3"ӻ=XeQkLFQP +o6&̓NVI)52ue H?FGWڌ2g;Z6RbP툃;M'UhabE +Dy9R9::6ƃҝn .5:疱3s2&gp[ \'tc稳1d"tmC<ϫdsG"8Mv2K2 тNo؋~:rQ{ [c`kӜ1z;r.`Y~2J +5*G%`; ͟F]"ˢK2_?5Fu"j$iM#}T3@xyX؉ ia@tP# Ounw_Iڄ"`삿#qM^uEӦ6 LĜ_3A"u5VY0cL; VR`jkHsMEsMDZѳAiHƊ|NʝDb6ӥYfIKfl=D)E 㩣?u"ͦ4S׉,%Mb@~W:.w]@g q蓓ܲdjj&C'I6$9/g^6A]=7p!PE8qw:=uE ?~:4gf†NE"d%O:5r15A b$L>+Wi^bѽE4grNZ*M|$\Dj",$n}قϋv I2)t@FfW oR+=ΧhĔ iʂHNFes*c&^(fѽhKNs a:i4An0܆4`DE}A:&d2 @~A 5)S;t8BoO?u[}4fvr}A%\_f@䌳`Z +7+EF, wCϸ2/ӕB0RxI\ʡcګ`R|ɈgEEFyȥ-i~@)F--q^ŰXR>C0J{d8tkبOn4U0~w@ga9wAD{@ᇦ xiZ?t눱f07#H@S^PIj\XU筈 +isn/^m}ʌA= H4 v)&J['3y}K/5j2En {vH՜KA|(yRM&d\]\>״W~+23{}H:c/ᄈ^ @Lb_#2%uUh9*JԄb-a j{]7Skd͝FY&"o/ʸֈNĢ"\~"E+6!6kB'z Fiq)ZSYM5@(F?H[s4)$v*鎖kMLԤ%Hb:ml+ʹtp*>lJש}ZRnB%-EO:uh/l.(龀d!4 +5mlh4bc(~puQM4'J*}F27zX'/=9GpeN{j/2j{Q }q[Bhu3:J](Ԍg͈QNFӈlw}rXʧ`C>;lJ}a^BW:Ĵkчo˭׎ +e?:4Nkdg+}/=m^k5MT08|G"imaM)IC2w!4}>꾌  uצ -KF#%59H[9X\z_}?~ WW_?}ۋ/Jc?ŷit2-a^|vcOO?z~~o޾ӏ?|oO~Wo'>ܺvQ}yz?s1ˏǡ|:  : PF~@9IH]%TA4.ύ:HGw'7Qh˙7ao3#kcQcD kd@V\2:34I* @k$H,`K[nN6t rR\Ҍ;Fu|CRu+4ЎԬ&G6ؓl> aJ0rȬ%:Ϡ9 &8w)#ZY#Q$/I6a^MQϗOfk~`;^z-Ó.P| 'n54IvG` )Es1v ݡ1yׅ +; %WHev+[TuBP6`槦JGѷ?_S=c]E}zyJH4)G%RWC'p;Xne-x&q=T1Z,n@J{%##Fc[(ӣy a/PW6WΒHIcZ=<1ݩd+:Zad'iڪ"?8!EUMS[x+(Cjv l~ƒ`em3r)\H/_fs,% EֱD+5.cQ#dbdPVLҖ%t(ĶHM%V"Ø9; Q>E1K>"DfBP%h)V-|R]7jݩF%FBEpX˱wΰ QOD%wijF[J(h^K,(c7SuJH1,"cuLg̚];iɉ!+RD慘?Ȋ]ճ15 C,(%:'` ݞg#i؁]+fbM4(oCSU#6h5*ƞz3E9.?Bg$餧] (SSypj{ix׬8ql'cJ$"1DŽxK|ǎ'1^A}hԬ>)"i2@A`i]J)0Ӌ79>p@ŴZ{#K9xd>N- +0=(8^uFslpR갋 v6~I o k5XnKLI#u_f9iooyEKryκ>-1<Ÿu*W7e K jq&  +H:|yi$ ʷBbMD{xkXkPhM*s⑎ waXH5e>5DWC$"3 O5AdtQ? ta׸#/D +Ig= 6-65x0;Og,]ڐxb_F(5c"(F.S3>O6f*h3Yu5=U6ҴФ*-#Y"S`DKqn$z[m?RRVV%mݗ."y6j%q76UtLEh9_.>nJ:0?elh!zu(W#Җ?R(QFB)eǴ:5=b""36B.XfQ"QMq<cNPlǔ>5eL"9/vXqbh&!aiz?)Bh(|Dү$؛@{b-*;jk]fDƉj(RWFvG^ѱqՎi :uĶgl9GHlkt8 M=xGlc*g5r2'pVAk)Tj-kB'^Ec.Q%P-\fW<? J(I5d 񑅄a9sW;K\T4{~<'3.aP}F:;ռa}?lӢ: PaַS*dbbڍ$Tf$IVؼnE;\SbogZA̜ +q;,B}l[%_~?')Ia{qMuaUN8ړmFU ++Bm%k'bUMcI5ݑO8DzU\QUz1u$#CFA!D$ YuNw`{N]^F,'Y-(!! *۳ۖ"5Iyݪo݌D^ZO'?)mc\चoWq58 ++wڊt9YF$ XNW9ӔKr _I <Ś^TnfW"[k =;nq+A/jI2!7ekj\{lDrS嶶Ͷ@tHBذ0wV\jH.o%=z=!WksHy"e[%qMՌ}Aԣgq&׽P,tz\傌8]e限5ǜY4 b5تtW!V JQFwlfuR\ `Q K!dDJ{VgEfJ@xm +8qݺ:*]؉~+4g A==/_FمnD)fvcORTbeo$.BZ{d9TyR뉈ҟWhT R J0)F(-6 R[=f6|4yqIaeNedWgbPY8B}ŒrAn|{.$Ny9NZ^_eo/C~<0f-s@ }::$* u ?%n\@U{;)HD'(DExzQ$6B9+V<@ 475/ i; +L[IAzUH U>RZ%m?$Ĵ'ơؤ:X({viK?6¯`WH^[!쎚$N\yH]G.Ӥ t`"-_erP= +˨c_FvY0Y:T~D| UΈ6,40VI]|'rq>5fj[Ѥcnf+OMx&n&^n}܌*~L~7)cȄ`ώNgiEA0f:uÊx5{;fBXU*IဆLm$.u #hTjzA$3F!xoS#4n/x!VԲ xM !~_~=QHٍt,TV"U f!"6r9ɳ/?z dGrՒтK,-e P9pNeK}5~IQt=vx6y<:?S`j=4 z]"gGRKҳͭd2RWD%sըF|tS=Ll`9׀*H\@t M}kTq +3VگR\(uEQ[;P6Dʝgى!k7x$ĩ=d>Hw(n=ND/u1 +5jbTiy\P 9KM)46\3Y/@oSǁo% 953`T''f;˾:D7Utw'ɑ93vܭwaDT]25ifwSAu47C]FT$EU>~8B+FڅN#ӷ{d݃b=x52H8EI y.R)L!ZTN[6?ti` _hG +o>}~o z:2_>?ŷ~G~J#?f##Zګ~LCtjfNΞՓy4_MD&zވ2GHJW6`Q.7BڃssɆE4a ZdߎރQ{ӌ@m"^e]@O@Ci(u3յxk-HB?zMC?2X7NFC3ՀbMe;y_]6RL !][xۙR+E{u]}ZG  )EDȞuʗew+[u c`,aq#3҉VWMX;x9 JkÌ-J24$`U#ʧz]DWzϲr G?t˞(3T]SUGRb\K?;C:nҋy_jsG}U=fZ  2/çjpRjx* {kNei60`< xB}_ A1 \hN5zq+AHGO6[Swu<8%?o|k܌ry΃ +w{M&t>IO4zO0ȠT1(])C&lI4}"ؚ>P +{_e^ ̈^[!ʍ[U/q,0}sdcvloCF;!5XYSFTsgQf99 r|4] +=n̈nHBnyV.fPcZ)fxq?L"AmEڥvNyiT:z(}0:_LYYvnlhE4. +a |`I&eN|FBUC>NH< B5> yDJ Ƃ4UZî)3; ^ʼn2h<7U$ħ(>+=Q xhpX'zie#uɒůkAgL +hF PL] + y%й&_]0b0~H(92Jxo sja'a8'ӧ[iaŢ![;AƎdӜp=ht4;M-v^FџC2ۢGdkߡ*Օm;lLk Y٭V'1rHc3D]Vcõ&npW?8+*> ߩ^R_Ҭ~X :2, S@+=^u2BPQӓPVMhkb[ 佢,M3V 尫 )Ws,plBsE ]{DN߅ҊtKST;¾Xud]Bllk-Y:MVp;FA=bE q7ݩxtK/P hGnt~Gf Pgٸ,kC7JYAWb͠]+o)7RԼܖ! Nti4gԤ( {B=l^46 5I]pn此/e[i{xΖAQ>OG9\E#mXHؒiC F0m5M7:#ZVN/`t6Oks3l>bI4]a—maz_&*Hj 47Xr #*> Wڐrwc OUٓG^:<\B l1uR&BGh 7u'=IxClPqUs*ۥA7hDo7?}~?gA_IIǟŷ~_>}ϳ_QOEE2U޾5 T%CsDctLYujOOdp~q3b͎xk] b#Ϭm󬴶ӻ[%¡ORT}?4"=ѹmd.Am:|xe>wfJ<@70~(?uԎ zOG#Cʀ9 i< etca|3(ّwQw ZsS8w93WFڈWbU.sܚz~F:R‚F=y/K}U\ #PZKLƍ`k ~)\̴+!X@&V(^37.A׍M7hM]yMDk]%,(zϨNW)::^}u51ugy#5Ӡ!,sB7Aoz^c@"< P^&GHU%a_μԁӟ?4ÿuy@/'t'vM ;q +ܷIEj܄";Lr1Y^$<(ϯex {bÅ㹻 g\9\?:7O9 +d?E{pBf[3K(ZK[3sU N ?E }6V QAIldN$ FV *, uЄC$]AaMп +4xcdl@:~1-]L0Ȇ@jj紴+,`P9qD 5m {C.R]|+6QI)u]]:.ĚfeDyGtr o#PZlQPYğz9"!r^(ݪTeͷFjN/pvun;3d~B,;@mK]69E/i{!HzS=6{G41;"Id3*Q%UHLp_fs]~4Q Z\Wᡔ6#h<ʒ`F=RzjQɞ-NAJ֌}@ܕ qE`*\U^72a0࣡EpЃ(Mlk>(g6PsVLLȜ\g_!/C{x 聞e5,~$7ߊûdX!Va\#łR~+NY7je)2ձvEnfVш#uZFE/[CT .le +J!*.J<4P5[h)5g%"U6rsYhޚXgTP\ +@V nmٶBr lfg wa.d mWl< P@}A(rѰ{QҚj:븂h_. +Ѓ7|rk}/]|b7L.38~2SgQT7CL{Pj.6SPkPY<5TV$H^b[`< SL$^* `dEq3sS(9T LK +KXu$K ˌ= /m=lfVQC(W+XC@ZRmYm]f  ohvpbޖP }SZ1ƥvb"p[yD*@}#T6rd1I>H\cKl_E0ͩ + +Z93=ұ6.*؊(εX6VpbƅC"&?'//v# 2&zuXOB?;}a}]/z3:{v`l,BI#h\c%^X~4×>1&gEB)ʭ/ ]+/}~:H"fhRq 7sSOLS\Qw +Uk@I.N"P62M ldqqZ\e=>|)&a*7!!Lo꬯va6ȹB)'2kh@>#*y#\H:h72{p/Ce -qid:0^!N:(+{sPRbAOڪQW85tJ$8hU)u 1zS_K9>=`1nxj:D^N:7@dAS  "./Ftnrl,'虮ٯ 21c< ";ȿ*H5[R?hZ.>Nיa bA z d։%SxC-%* {g|v)w nt-$;1t ._WV<t/" +(@vD.68N;U]!uz?MD{XhIʞG)f_a6$EC9=Ԟbl:jC#,c@Ei%&]^ҹ:E.O%qH UꊅzÌhUew2Ek;Uǵc]̾0ܝn6{Y<ԃ|#U6Q"xg=dV(fIpe+yK{`N ws3|r-6g(>?yhZ73?>E> Co$~QÆ*a>j [ ؾxB73qY_MUzR6)tU٘~̶l9@MzJdAzF';̟HpB$! ^H%c/ZfTWU,D,gNJ\63֨;`Àլ/-%J,8 8~! \OHPMU4S@d ~泷y(#a@eo;E\ jy 6'<=?n/ |C?on? =;zؾ/iX|ɘp7q0ϻ C=tڙ>> _7뗟?^ܮ/vw_׻77~sIp<ݭowbcJOl.|ڬ<\mga~aͿo6_ov_>@77>[o7_fOE8hw]98Ezsݏg/l#~}bݣ^T;^m 33{K eÏnkZ zL5}"NaHho+!UݺZ:m錃ÿh!`!QzƗgZL{O I2GoM.bdl[N +aN;=RʷCǶ̢(`ҲF&@ߌsB Xu:BGd?Q"RWh +@e?RӴhBbCgWKV\50` "G9 +QA:Jo hJa(M.3 )LfV _Um WkYq2Փxs B+/F aѦ `w\%K +7WS4mΥ9M71l;HG̩= ZҖfbhh+ߧf&:ɷoh$ٶV_{jopI}`ȼ ~7aC]x q;, +BZË9[.Bᚊ.%6CMb& m$:$^J * /pVגJeqs4~낂8`P0 +&>;xݭ\\r=xX_8c'ÚR҄ ŹFn+Bkgù!"G`:gQ+`ڐr}QE76haGFm--ĖcM#1h&VǛE[3jZ;H{Jw1 8Ԁڱtfq)QYhZ%zG:Jk#ck0N<5fLVsZ)sg+ , :v OI c +eNd8q.Z4eL*!ɝs9ԀZ Y w@5^@̤s%4ˮm(n5DJMs 2fRP#Z<G +뭱}?fR9-!GYŰxtE+>(Ɣ἞I߈j',: +_%)f/lSg Y w%4Ra]S#KU vS +F?,6F ]tO8!`^l蛐puK&Rb_"I$6=5L ZUYbYC$y_p[ASW\\nZWf#S Jc/3keZZIV_Tĺ2}D4)M]Y4Ѩ6+G7͏GGVUeޒqաJ wf@{]3:瓶Wg0 ~H+1:ԢJ +.%Ԩ?I<5Žؠ}(1~^%G 1;k'3j|ȀGS4QyGs"Fw˳uRE2q` L +2f}u +XUB GE3DC!,^):+@Z)z[)#(F6f',70 M$| endstream endobj 32 0 obj <>stream +H;ne=Gsp5$1vY4p3=&EmWTw)Jcql{I璄>1Mr@/`geXJ`F:{,۰}]<'HYέHb.00d9tշk&;-[ň\hwůh]g ] s{7w`u|ƾp7/]ӟ,^&py噽ۚ\xY`u5ZSӦ^e}C5mxtjIy) ̘e6ն`mğp\F/uLLzc`}OkwUo B[^G_МϽ8s?Lԇ^[t'F >ks^ˋc{]M\zu3N+v2[DF6C$f"p?+;*?~-_(ôB_ &ݸ-=**#oR6z/Y׃)8 ;z7Q8|OUP̚ݵVfff]fVTyG$d,kVua쮨8 xEi֙fdSd C,9ID*><jVlP-8mOe8ſꝆ'm2`mNj5UOȉ2x0-+ExxucI鴟fqSJp7\[]!-Jz$&R⽴ W(VEL4 &pg #͗fEu(KHaH0 D^L;H@1)G3޻'ZW5 V(jT n-;qL@Bse jͰP'jKs:@Vј^:{X޵ꆿ\pÖ ?ߵUi}Gy;¯|Qr?v\҉SaccfS91 rIx/4`F3亠J?_^ǐ#Ej/`L%'p8 V-;aidBJ<ϭFZwa.Bo)+'*YI""t%10+,}F`iy:nň; ME<w)ӟ#麇!ܷ#Ӯ&{NFÃm5h3归 k5+lC,chCVzk~jR`rd cN`~ + \5^XFw啓#A߼B+:hP)SM}A~ ^ ᭕s UGPF1f[_o:t lWGSChzi}ToKanͭ,n[lJ'G·M~ wxո7 #H^I 5ŵ#Ҹr,A~^^%i?PZKaH XkK+,ѽb7VA8٩VbV pݣ+ L38EJ!pE|Qw=^փsfj3蘮J)pgۄ4o1U64|Nkq|bS a=CrPnv"A20$N _jF B;_?8{ '6z8:kk18CEDLc3RֵjQV6ҡk.\q˵iNzTLҎy(8gm'֠thə.2G$|]yذxDQc絲Y̢2g-\B 1Ca_gL];%x^Xǯpo +N!98 va2C!ϥ,ˊ 9ꬑ_ TXeeUdd\D?fGW@_Bq} +~R$V!+ZH},ۀ@/hݓ:os^qnfPtݧ)޹p]vbL}ksz7s {] /k3Z;V=`um/ٝjhU)y?o!-#WkVԻv%~ +טNFoNd=aR/:*3 JˏK7-^ 66XNoK1oq9x \k VԵCm-W#`6S5`q^"1X}Yr7 &^4zv۾S5b^wG|ooΩ1;z&\$,(Oj%_O嚠S!J횉w%,#*(AP <aRƛS>KvKEf){;Cd/ӆkMY"Eky*<2#@Wz=JLY5<9}{G. ,s(zC7~*Zr%@:'`|إ'} UR2698&p~G5%=BG*M+ \K{_y jsy"h +F>G 2!ηheziMoتz<8qI/5bkq{zAЦοW!T9N +1"ў"VƧ%fb';T-33N8GJ鹱bF>R!ͲںBKaA9tĖ"]GLpGWxI`G- + REIɈup?8A1s뷺";LI3K+KGY(T/wa6$4FhAE$? j!ђFL\Vq*jWf +*u T +OI6MDi W ~M<6]6H=u4~ޤO9&}U.&ﴷK:=Y8#']׍\\p?dW͑ 98~I>N[5(zov/]h}DHx!n 0"๖kXX$1_6mP軽n/k"|zױìv"8 n:W%q$?NqV@!1{~aڱS[gNA 7! ֟!ߘmrz5 5Fu[ .@xrM`/y[Z 3Vn+p] %=E<}>ќgQZ`lӜiO-fpjNB=b4DcIaȴlKϑH泵U]?.,n[@V!j7; `eӒTU-K }OrT͑2aCǍsd7wƪ8MTcJo].ƦK/|X4B3/h[~W_!KE37sp{5A^\L,仿o.l+1^QDw-[EFEfتE3|U& +8G¦1Gi_Y]۩DZGtJ^XJ qgטg%@ў@XЎdmvkF9tm6ˆڐ(gnis4ysjH{ 4hRCLnSɥIq-mƹ3>l|>}ViA\~#Q w,?3E]r:[٣͢qf40A 4 ap=FXud^Yj Wuź.55~?qmwJh宮i@\kaJ곜*,OwѤ4%sqUݗWhN`쩠J+:\ȎFWtY`է8'Ah}f^;VY4Fz6G +&} =w)%}Lsue! X#K8`PedKzJ}QaJ6G&a6_ՙ5@Fg'Jqm˼限.|trVtV%xOΉ|vמL6J<T_4vYY˩s*w=fsDՒ|^)CsU)RUm_W +NT>CX,F;|ϐ񋰳dA#Zmf~u +:OrZڣ춮q &QqP6;OeSϐ.bw"l^0VwJ H8BAut1ƌ|={mҵ469UKZl:O,7_x3RUTߟܞdr>FE̳ɂbz =/R㝦3ѝ[shU8ǔ=7tLd%zcQRRRdyD}Vի(#zhD6,Gsݠ{>pHc]r6!&iϙ(EԻz;MLHn R͜@lz7{uk-|Idzrp[up+.†HcaJj <F0+w!1Ҙ$QkcΠ#D W{(vt]wJ\b⬳ oNNT/^<| R 8"_`UZLt>x}D^?(]\}p\T(76$Cʊ u0Zi׫=?oåmlzpAD=-aL ֻPzd6$gH$ /}o:`CuV`Rv35U C1&}xZzü9Y%fS*ܧ^/A.pE ae2n6CcY@W1J;ooʗ)ckwOO礶->ՍI}}-_ҹr\]ȁeFAp*N{oKJ% WQCOu7dpҗSCy͕]Nrrzb/Km,#Zv] }\9ݼFp;d*5e򬥦i[hcz#aUz w/OV#Xd.tKbӡg {#[۔M߄axjхyToyn3< :&Їk~ +λ`by!5@ @611]#L?cuS_#֏tF#DcSqB`$CN3EPdRCpBS"xm P_䰀va1cΔak6!@wWL4D0v Aԋd b/€je,EXM}fݯ CuL|î;8n 1, +Zp=C^ 'Ls愫>U6 [q, VД,^>F*9Zh1,0Jv * :!P%}f l#C2]+^ c_AL$R'-=6:α)"%$JMDFD + / *%7dci睔2Lƚav]+g6\% ʄ ;# -UJ1HE&b]=:~45$Qij[Dǔ`ADg(g* E~8]wTpJy-.³_&W)"KI*p"&͙$(lPpD4%$ku7:3QndF%vSdF3S7g$_D XgIV<8;G7,',?)1vJAǨ(4%猡WYȈc&Ql5Hd ?W`_B2C)w笈+0L]`hTGJ;(ᚍ3 ෹jweWvwJlQ +56M?X9}+6ΰe;/YweU3͸ͯe0B5|Q ^RẸQ'[ߥ~Ƶ٢?6E9uV@.LfE&rÃ%lz9=rÉP_ p9&-nn|*y Y9b3؍{ p7F8ۍ-B=PF<ly~{v{z7 zpP]^OE-L*æ;go'"@S +?<m+!Whx\^̪٧b=ݮj)=LhW6C_c.'j˫xr豤y|ۓM>ndV΃*|Fؖg`y)~_888zvږ"ܭ~WVEX8CJ^L@:^݃Y,\\?twlQAnNIpMUxO\K]I$8M ft"a&D/.Ӣ* q$߆GIo|v_Vu{_>4ק4+~PW\('Ă=%~8fq@Ʋ,UqUP"lX:\f'ԁmɾ(s蕚/6ɤl˫p-ܰqjǏ?qBIwmiUE~8Ϋ1 6ά9/er r /cbb)XE  ;x'gŲ,vg#>XnvjIJ)ɟwt’U|{ ic!_G>SU.a-(ElX`j5Eh3LL=1ΐr1{ Gx/MYxT +ሎ +e0|{)$*a`JFuzp;,oniH4:eUEi!y¸Sj27vJsv8mEn:3E`7j*CnlO.E} +ƑțJFrY\N(XYrba=L,7 &V&Gafrf{4&M)yzGu{MxDm/TG=cG<wBy]xFT3FP֖pOP8ģcVQ){Ǽ0#bPQ iӓO/N߻WEb@}eaYn_S?~ aN`ŵ2,qgs%|8KfIHy~鄻fP j&J(ܫF&:l/"GW{5\$Z-5X翚pE{E& =\d8S'\6o҇bIeM( endstream endobj 33 0 obj <>stream +HQr7O;exI* +DsRʒ\aֵo*pCs" fH3-4\!zC|uQ IZP~<_*E>ȖS׿z[^PCH _+Xf_,)+&gX EjO{RonO 4ʆX&,LD 2'V"[> +(L3-UMΰd +*5j0x5KPPzs/+r&FS)(QwcFp>lN24i*qmcwϿiݬਜ gϮ7h}B!/3La8qjplߓc`w&kn#8@]!4{,~27S9uy +g79qTAbzY;chG!)UH%eKzs=Zӟ@g羚Ą.Šw_"k+#{XAӆj_mNp˫_ ,p>׽-;';j\9$SoShLPșpӶa([VFp>lN24i*qm -ݳoc Y19@mϘ]{XVBp2!bf) 'xI i{FLUhM|pi 3QɧQľ1Al02')ۅGژ`v-sy?.F+&9]*FR@]Zػp9VK+<"]9}I+#|wDYa8RJ5N$ol9Qf=_;ϤQ\rID/J2]ۓѮUųO8BY?il£+Yb8Ozԡg;Xi xC x 幩KJscK}+ӓ(h<1MQ[Mo'O#/؉P|EFhK@cW&h +-u#2}݅y jėp{55?7:M_7 ]V9K#%ݼ+˫,;~*[Z2;<t+FKM +^4*K^.ɷ8x ”bD(2 gJ*IAxu⽒z<@םz)ڱmC]__oxYH81U\.OK\Kt l]x7<33hmt>K#=X:LՆ + zyu7\;-4˳"q wCXp,|}X1R2I+q. tǶL*FɘM~- ŋ }p x}1ާWR{3P/E;6mH?!ڬ=>]ߘ"eOu99➡GO NwMbBj2<%?vǟ=zFF'bH5+nzNx< NSs4@M +^`?Jx9`JLU1"N]$(^LC+;!>zoo{^f{gRe6 E';颋$NVI(Τ0lErCv~j:+HduwAt," 9TW v_;Ga2ȆjwȄm(h7`z!mpׅ)m!< +2/RRIZzI[y.#zvlX6 YD+ri^ۑdcTMY!Zٮ{w`:_N"T |ť!'\v:3{d:o1ڛ  .ͳ2"ps1#lN$DAUfBa/a(0mwLaIGd,Iwr@"`|E“'uGi?B4"1 ӂ*#mvNħV =ހ/xFM?U WNf$=BcADOڢzep/OН%l"jט_ŦxaO=(Ir-o^]_T9'DQ :Swj8' +E+dAV,q\]#PN|8&}Ds9yY6,$ jm J0ɩY> endobj xref 0 35 0000000000 65535 f +0000000016 00000 n +0000000144 00000 n +0000049778 00000 n +0000000000 00000 f +0000052032 00000 n +0000296258 00000 n +0000049829 00000 n +0000050220 00000 n +0000052812 00000 n +0000052330 00000 n +0000052508 00000 n +0000052217 00000 n +0000051271 00000 n +0000051471 00000 n +0000051519 00000 n +0000052101 00000 n +0000052132 00000 n +0000052694 00000 n +0000052885 00000 n +0000053323 00000 n +0000054547 00000 n +0000070577 00000 n +0000088805 00000 n +0000103831 00000 n +0000119510 00000 n +0000130102 00000 n +0000148920 00000 n +0000172868 00000 n +0000200363 00000 n +0000227626 00000 n +0000254369 00000 n +0000280567 00000 n +0000292277 00000 n +0000296281 00000 n +trailer <]>> startxref 296471 %%EOF \ No newline at end of file diff --git a/información/LOGOS RR/RR LOGO 003.eps b/información/LOGOS RR/RR LOGO 003.eps new file mode 100644 index 0000000..df1f92e Binary files /dev/null and b/información/LOGOS RR/RR LOGO 003.eps differ diff --git a/información/LOGOS RR/RR LOGO 003.jpg b/información/LOGOS RR/RR LOGO 003.jpg new file mode 100644 index 0000000..89af4cd Binary files /dev/null and b/información/LOGOS RR/RR LOGO 003.jpg differ diff --git a/información/LOGOS RR/RR LOGO 003.pdf b/información/LOGOS RR/RR LOGO 003.pdf new file mode 100644 index 0000000..505a600 --- /dev/null +++ b/información/LOGOS RR/RR LOGO 003.pdf @@ -0,0 +1,1605 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + RR LOGO 003 + + + + + 2013-11-03T14:17:46+04:00 + 2013-11-03T14:17:46+04:00 + 2013-11-03T14:17:46+04:00 + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 184 + JPEG + /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAuAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8ANvMPmXXvMuuSATyyJPN6 VlZoxCAM3GNVUHjU7b98KpzF+THnR0DMttEf5Hlqf+FVh+ONqluufl/5t8u24vbiMejzEfrW8nIg ncbCjUNPDFWW+U9a1u8/LzzPDqM0sv1OA/VpJixkAdGqvJtyBx28MCXn2hadrOt6lHp1hIWuZQxQ PIVFEUsdz7DChlH/ACqb8wP+K/8ApIxVj/mDQ/M3lu7ii1EvDJIPUgkjl5KQDQlWU9QcVehXHn3W E/Ki31ATMNUln+oG7/a25NzH+V6aUr474FYBoPlvzL5uu5vqzG5eEBp7i4kNF59Ks3I1bifuwqn3 /KlfOP8ANaf8jW/5oxtWOX9r5m8o6t9VeaSxvIwJFaGQ8WU9GBU0INO+Ks6/MHXLnVfy68v6m7FJ 7ib98U+EF0R0c7eLLWmBUb+RMsslrrHqOz0eCnIk9n8cVep4q+e/zVuJ08+6oqSOqj0KAMQP9548 Kpt+ZU8y+VPJJWRlLWBLEEiv7m364qkHlzyX5s8w2L3umsGgjlMLF5uB5qqsdj7OMVR17+WPn60t Zbl0DxwqzyBJwWCqKk0JFdh2xVU/KvzRqtp5otNPe4klsL0mKSB2LKGKkqyg/ZPIb07Yq97wK7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq+Y/J0kcPm3R3mIREvIeRbYD94BvXpTCr3/wA5xeZZdEZPLj8N S9RCrVRfg/a3k+HArzDXb784NCsfr2pXxhtuYj5BrdjyatBRQT2xVE+WfM2u655O83/pW7a6+r2i ejyCjjzWXl9kL14jFWAeXPMF5oGrRapZpHJcQhlVZgzJ8alTUKyHofHCrMf+V5ebP+WSw/5Fzf8A VbFWNeZvN2q+ar63l1NoYFhHpxiNXWNAxHJj/eOem/XFWX+cNLs9N/KbRoLS6S9je+WVrmOvB2eO YnjXf4fs777b0xVH/kNLH6Wsxch6vKB+HfjRxXAVesYq8M/O+WN/N0CowZorKNJAP2WMkjUP+xYH CqzX1Zfyg8t1FP8ASpz98k5GKp/+Q0sfpazFyHqcoGCV340cVpgV6vir51/NKWKXz5qrxuHUGFeS mo5JBGrD6GBGFU5/Mz/lE/JH/MAf+TNviqU+UfzI1byxpslhZ20E0UszTlpufLkyqlPhZdvgxVNL 786vMd1ZT2otLSL10aMyKshIDihIq9K798aVLfyr0e8v/OFlPFG31ayYzXE1PhUBTxBPSrNQUxV9 C4FdirsVdirsVdirsVdirsVdirsVdirsVeK+aPyc14apcXGjelc2cztJHEXEcicjXieVFIHQGuFU BH5H/NuNAkaXSIuyqt9EAB7ATYqpzflr+Zl86i9geQDo1xdRSAf8lHOKs70L8ur7RvJOs6fzS41b VImUqhpGCFIjQM3H+Y7mnXAqQeQvy18yaZ5mtrzVrGL6iiyCTk8UgqyEL8ILdzir1X9DaR/yw2// ACKT+mKvN/zK/LrV9W1m3udCsIRAIAk5RooayB26gla/CRviqZ6f+X19dflunl3UaWt/HK80LVEi o/qMy14k7FWIPzxVgUn5T+f7OblawLKy7CW3uETY+HNo2wqqt5H/ADcZODJdFOnE30RH3etiq2z/ ACf873k4N5HFaBzWSWaZZD13NIzIScVeoaz5Asr/AMmQeW45TH9TVGtbgiv71ARyZR/PyavzwK8s ufyh892sp+r28dxTYSQTotfl6hjOFVL/AJVl+ZH/ACwP/wBJUH/VXFUw0j8lvM9xcqNReKxtgf3j cxLIR/kKlVr8zirLPzN8j6vq9polroduskGmxyxFWkROKERLGPjIrtGcCo/8tPJs+kaFPba3Yw/W 3unkTkI5T6ZjjUfEOX7SnbFWWfobSP8Alht/+RSf0xVEwwQwoI4Y1ijHREAUfcMVX4q7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq87/AOV/fll/1cJf+kab/mnMj8rk7nE/PYu/7C7/AJX9+WX/AFcJf+ka b/mnH8rk7l/PYu/7C7/lf35Zf9XCX/pGm/5px/K5O5fz2Lv+wu/5X9+WX/Vwl/6Rpv8AmnH8rk7l /PYu/wCwu/5X9+WX/Vwl/wCkab/mnH8rk7l/PYu/7C7/AJX9+WX/AFcJf+kab/mnH8rk7l/PYu/7 C7/lf35Zf9XCX/pGm/5px/K5O5fz2Lv+wu/5X9+WX/Vwl/6Rpv8AmnH8rk7l/PYu/wCwu/5X9+WX /Vwl/wCkab/mnH8rk7l/PYu/7C7/AJX9+WX/AFcJf+kab/mnH8rk7l/PYu/7C7/lf35Zf9XCX/pG m/5px/K5O5fz2Lv+wu/5X9+WX/Vwl/6Rpv8AmnH8rk7l/PYu/wCwu/5X9+WX/Vwl/wCkab/mnH8r k7l/PYu/7C7/AJX9+WX/AFcJf+kab/mnH8rk7l/PYu/7C7/lf35Zf9XCX/pGm/5px/K5O5fz2Lv+ wu/5X9+WX/Vwl/6Rpv8AmnH8rk7l/PYu/wCwu/5X9+WX/Vwl/wCkab/mnH8rk7l/PYu/7C7/AJX9 +WX/AFcJf+kab/mnH8rk7l/PYu/7CiNN/O78u9R1G10+0vpXuryaO3t0NvMoMkrBEBJWg3OA6aYF kJjrMZNA8/ezzKHKdirsVdirsVdirsVdirsVdirsVdirsVfB2b55V2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2Kp95A/5Tvy3/21LL/qITIZfoPuLbg/vI+8PtPNI9K7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq+Ds3zyrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVT7yB/ynflv/tqW X/UQmQy/QfcW3B/eR94faeaR6V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV8HZvnlXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYqn3kD/lO/Lf/AG1LL/qITIZfoPuLbg/vI+8PtPNI9K7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq+Ds3zyrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVT7y B/ynflv/ALall/1EJkMv0H3Ftwf3kfeH2nmkeldirsVdirsVdirsVdirsVdirsVdirsVfB2b55V2 KuxV2KuxV2Ks5/LT8qtX863LzB/qejW7Bbm9YciW6+nEu3Jqdew/A0Zs4h73L02kOTflF9A6F+S/ 5daREqjSkv5hTlPff6QzU8Ub92PoQZr5amZ6u2hpMcel+9kA8neUQABoengDoPqsP/NOV+JLvLdw R7g7/B/lL/qyWH/SLD/zTj4ku8p4I9zv8H+Uv+rJYf8ASLD/AM04+JLvK8Ee53+D/KX/AFZLD/pF h/5px8SXeV4I9zv8H+Uv+rJYf9IsP/NOPiS7yvBHud/g/wApf9WSw/6RYf8AmnHxJd5Xgj3O/wAH +Uv+rJYf9IsP/NOPiS7yvBHud/g/yl/1ZLD/AKRYf+acfEl3leCPc7/B/lL/AKslh/0iw/8ANOPi S7yvBHud/g/yl/1ZLD/pFh/5px8SXeV4I9zGPzO8ueXrHyFrV5ZaXaWt3Bb84LiGCKORHDLRkdVD KR4jLMMyZgEtOoiBAkDo+Wv09rv/AFcbr/kdJ/zVm14I9zofGn3n5u/T2u/9XG6/5HSf81Y8Ee5f Gn3n5u/T2u/9XG6/5HSf81Y8Ee5fGn3n5u/T2u/9XG6/5HSf81Y8Ee5fGn3n5u/T2u/9XG6/5HSf 81Y8Ee5fGn3n5u/T2u/9XG6/5HSf81Y8Ee5fGn3n5u/T2u/9XG6/5HSf81Y8Ee5fGn3n5u/T2u/9 XG6/5HSf81Y8Ee5fGn3n5u/T2u/9XG6/5HSf81Y8Ee5fGn3n5u/T2u/9XG6/5HSf81Y8Ee5fGn3n 5qkHmbzJBIJINVvIpB0dLiVWHfqGx8OPcF8af84/Nm3lT8+fPGizIl/cfpmwB+OC6/vaf5M4HOv+ tyHtlGTSwly2crFr5x57h9IeUvNuj+atFi1bSpOUL1WWJqCSKQfajkUVoR+I3G2a3JjMDRdxiyxn Gw+J83bzLsVdirsVdiqI0+xuNQv7awtl5XF3KkEK+LyMEUfecBNC2UY8RA732v5a0Cx8v6FZaPYr xt7OMRg92bq7t7uxLHNJORkbL0sICMQB0TLIs3Yq7FXYq7FXYq7FXYq7FXYq7FWI/m1/5LfX/wDm FP8AxIZbg+sNOp/u5e58eZuXm3Yq7FXYq7FXYq7FXYq7FXYq7FXYq9K/IPzZNo3neHTnkIsNZH1a VD0EwBMD08eXwf7LMbV47jfc52gy8M+HoXmuZLguxV2KuxV2Ks3/ACVsFvfzN0VHFUieSc18YYXd f+HUZRqTUC5ehjeUPrrNQ792KuxV5f5p/wCcgvJ+i6hJYWkU2qzQsUmlt+CwhhsVWRj8RHsKe+ZU NJKQvk4WXXQga5pL/wBDPaF/1ZLr/kbH/TJ/kpd7X/KUO4u/6Ge0L/qyXX/I2P8Apj+Sl3r/AClD uLv+hntC/wCrJdf8jY/6Y/kpd6/ylDuLv+hntC/6sl1/yNj/AKY/kpd6/wApQ7i7/oZ7Qv8AqyXX /I2P+mP5KXev8pQ7iyj8vPzj03zrrU2lWunTWkkNs10ZJXVgQkiR8aL3/eZVl05gLJbsGrjkNAF6 FmO5bsVYj+bX/kt9f/5hT/xIZbg+sNOp/u5e58eZuXm3Yq7FXrGmf845+adQ020v4tSsUivIY50R jNyCyoHANEO++YktZEGqdjHs6RF2if8AoWTzb/1dLD75v+qeD87HuLL+TZd7v+hZPNv/AFdLD75v +qeP52PcV/k2Xe7/AKFk82/9XSw++b/qnj+dj3Ff5Nl3u/6Fk82/9XSw++b/AKp4/nY9xX+TZd7v +hZPNv8A1dLD75v+qeP52PcV/k2XewTzr+XfmfydcRx6vApgmJEF5AxeByOoDEKQfZgDmRjzRnyc PNpp4+bGcsaHYqi9IvmsNWsr5Dxa0uIp1YdQY3Dg/hgkLBDPHKpA9xQmFg7FXYq7FXYq9F/IAoPz MsOS1JhuQhr0Potv91cxtX9Dndn/AN58H1Zmqd47FWG/nDrVzo/5daxdWrFLiREt43XYr68ixsQe xCMae+XaePFMBx9VMxxkh8gZuHnXYq7FXYq7FXYq9a/5xn/5Tu//AO2XL/1EW+Ymt+ge92HZv94f d+p9L5rHdOxViP5tf+S31/8A5hT/AMSGW4PrDTqf7uXufHmbl5t2KuxV9teT/wDlEtE/5gLX/kyu aTJ9R971EPpCb5Bk7FXYq7FXYqxz8xdCtdb8k6xYzoGP1aSWBj+zNEpeNge1GX7ssxS4ZAtWaHHA h8Y5unmnYq7FXYq7FXYq7FXYqzP8m9RTT/zL0OZ2okszWx9zcRtCo/4NxlOpFwLlaKVZQ+vs070D sVY3+Y3lqXzL5L1TR4KfWZow9rWgrNEwkRanpyZONffLMM+GQLTnx8cDF8bXFvPbTyW9xG0U8TFJ YnBVlZTQgg9CM3QNvOEEGip4odirsVdirsVetf8AOM//ACnd/wD9suX/AKiLfMTW/QPe7Ds3+8Pu /U+l81junYqxH82v/Jb6/wD8wp/4kMtwfWGnU/3cvc+PM3LzbsVdir7a8n/8olon/MBa/wDJlc0m T6j73qIfSE3yDJ2KuxV2KuxVhH5v+cbPy35Mvg0qjUdQie1sYK/GWlUq0gA3pGpLV6VoO+X6fGZS Hc4+qzCECevR8i5t3nXYqj9A059T1zT9OjXk95cwwAf8ZHC/xyMzQJZ4o8UgPNAZJg7FXYq7FXYq vgmlgmjnhYpLEweNx1VlNQR8jiRaQSDYfXH5afmdpHnHS4lMqQa5EgF5YsQGLKN5Ih+0jddunQ++ ozYTA+T0On1Ecg82bZQ5DsVY75h/LvyV5in+saxpMNzckUa4HKKUgCg5SRFGanapyyGWUeRasmCE /qCS/wDKi/yr/wCrJ/09Xn/VbLPzWTvafyOLu+0u/wCVF/lX/wBWT/p6vP8Aqtj+ayd6/kcXd9pd /wAqL/Kv/qyf9PV5/wBVsfzWTvX8ji7vtLv+VF/lX/1ZP+nq8/6rY/msnev5HF3faXf8qL/Kv/qy f9PV5/1Wx/NZO9fyOLu+0pv5Z/LbyX5Yv5L/AEPTvql3LEYHk9aeWsbMrlaSyOv2kG9MhPNKQols x6eEDcQyXKm92KsR/Nr/AMlvr/8AzCn/AIkMtwfWGnU/3cvc+PM3LzbsVdirL7X83PzGtLWG1t9b ljt7dFihjCQkKiAKo3TsBlJ08D0ckazKOv3Kv/K5vzN/6vsv/IuH/mjH8tj7k/ncvf8Ac7/lc35m /wDV9l/5Fw/80Y/lsfcv53L3/c7/AJXN+Zv/AFfZf+RcP/NGP5bH3L+dy9/3O/5XN+Zv/V9l/wCR cP8AzRj+Wx9y/ncvf9zTfnJ+ZjKVOvTUOxokIP3hK4/lsfcv53L3/cxfU9W1TVbtrvUruW8um2M0 7tI1B2qxO3tlsYgbBx5zlI2TaEwsXYq9v/IX8r9R/ScPm3V4Gt7W3DHTIJAQ8kjLx9Yqf2FUnj4n ftmDqs4rhDtdDpSDxy+DxDM51TsVdirsVdirsVT/AMn+T/NXmTUBFoFtI8sJDPdBvTjh8GaU0Cnw A38BleTJGI3bsGGcz6fm+j/Jvkr8y9MhjGr+cWuFH2rUQJc/9PE49Q/dmtyZIHlF3eHFkj9Ur/He 9CQMqKGbkwABY0FT47ZjuS3irsVdirsVdirsVdirsVdirEfza/8AJb6//wAwp/4kMtwfWGnU/wB3 L3PjzNy827FXYq7FXYq7FXYq7FXYq7FV8LxpKrSRiVAfijJIBHhVSDiUxNHd6t+Xv5hflXpNxF+k fKotLlSKakHa+o38/Cb4o6f5FcxM2HIeUv0Ox0+pwxO8a8+b6N0nV9M1ewi1DTLmO7s5hWOaI1B8 QfAjuDuM1sokGi7aMhIWOT4ZzevLuxV2KuxV2Ko3RNKuNX1iy0u32nvp47eMnoDIwWp9hWpwSlQJ Z44cUgO99oeWfLeleXNGt9J0yIRW1uoBNPikenxSOe7Mev8ATNJOZkbL0mOAgKHJNMizdirHfMf5 h+S/Lcwg1nVYra4oCbcB5ZQD0JjiV3APuMshilLkGrJnhD6ikv8AyvT8q/8Aq9/9Ot5/1Ryz8rk7 mn89i7/sLv8Alen5V/8AV7/6dbz/AKo4/lcncv57F3/YXf8AK9Pyr/6vf/Tref8AVHH8rk7l/PYu /wCwu/5Xp+Vf/V7/AOnW8/6o4/lcncv57F3/AGF3/K9Pyr/6vf8A063n/VHH8rk7l/PYu/7Cm/ln 8yfJfme/ksND1H63dxRGd4/RnipGrKhassaL9pxtXITwyiLIbMeohM1EslypvdirEfza/wDJb6// AMwp/wCJDLcH1hp1P93L3PjzNy827FXYqy+1/KP8xru1hurfRJZLe4RZYZA8IDI4DKd37g5SdRAd XJGjynp9yr/ypn8zf+rFL/yMh/5rx/M4+9P5LL3fc7/lTP5m/wDVil/5GQ/814/mcfev5LL3fc7/ AJUz+Zv/AFYpf+RkP/NeP5nH3r+Sy933O/5Uz+Zv/Vil/wCRkP8AzXj+Zx96/ksvd9zTfk1+ZoBJ 0Gag32eEn7g+P5nH3r+Sy933MW1PStT0q7az1K1ls7pN2hnRo3oehowGx8ctjIEWHHnAxNEUhcLF 2KvRvyO863mg+cLXTnlP6K1eRba4hJPESv8ADFIo6BudFJ8PozG1WISjfUObocxjPh6F5zmS4TsV dirsVdirM/ybVW/MzQQwqPWc0PiIXI/HKdT/AHZcrRf3o/HR9fZp3oHYqsnlEMEkpFRGrOQO/EVx V8NalqN3qWoXOoXkhluruRpppD3ZzU5vYxAFB5eczIknqhsLF2KuxV2KuxV61/zjP/ynd/8A9suX /qIt8xNb9A97sOzf7w+79T6XzWO6dirEfza/8lvr/wDzCn/iQy3B9YadT/dy9z48zcvNuxV2Kvtr yf8A8olon/MBa/8AJlc0mT6j73qIfSE3yDJ2KuxV2KuxV5H/AM5JaNaXHk621UxqLyxukRZv2vSm VgyfLkFP0Zl6OVSpwO0IA477nzVmzdI7FUf5eZk1/TGU0ZbqAqR1BEi5Gf0lsw/WPeEBkmt2KuxV 2KuxVmn5M/8AkzdC/wCMsn/Jl8p1P92XK0X96Px0fXuad6B2KofUf+Ofc/8AGJ/+InCOal8LZvXl XYq7FXYq7FXYq9a/5xn/AOU7v/8Atly/9RFvmJrfoHvdh2b/AHh936n0vmsd07FWI/m1/wCS31// AJhT/wASGW4PrDTqf7uXufHmbl5t2KuxV9teT/8AlEtE/wCYC1/5MrmkyfUfe9RD6Qm+QZOxV2Ku xV2KvM/+ch//ACXEv/MVb/rOZOk+tw9d/dF8tZtXQuxVHaD/AMd3Tv8AmKh/5OLkZ/SWzD9Y94QO Sa3Yq7FXYq7FUdoWt6joerW+q6bIIr21JaGRlDgEqVPwsCDs2RnESFFnjyGEuIc2a/8AK/PzO/6u MX/SNB/zRlP5SHc5X8oZPJ3/ACvz8zv+rjF/0jQf80Y/lIdy/wAoZPJbL+fH5lyxvG+oxFHBVh9W g6EUP7GP5WHcv8oZPJ59mQ4TsVdirsVdirsVTnyr5v13yrqMmoaLMsF1LCbd3ZEkBjZlcijgj7SD IZMYmKLbhzSxmwyr/lfn5nf9XGL/AKRoP+aMq/KQ7nI/lDJ5O/5X5+Z3/Vxi/wCkaD/mjH8pDuX+ UMnkiNN/NTzt5r1TT/LWs3qS6TrF3bWd9GkMUbNFNMiuFdVqpoeowSwRgDIcwyjrJzIieRNPWv8A oXj8uP8AfV1/0kH+mYf5ubn/AJHF3O/6F4/Lj/fV1/0kH+mP5ua/kcXc7/oXj8uP99XX/SQf6Y/m 5r+Rxdz0WwsoLGxtrK3BEFrEkMQY1PCNQq1PyGY5Nm3LApXwJdirsVdirsVSfzV5V0nzRpLaVqqu 1ozrIRG3BuSbjcZOEzE2GGTGJijyYX/0Lx+XH++rr/pIP9Mu/Nzcb8ji7nf9C8flx/vq6/6SD/TH 83NfyOLuVbX8gfy8trmK4iiuvUhdZErOSOSGo7e2J1UymOixg2A+Vc2roHYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYqn3kD/lO/Lf8A21LL/qITIZfoPuLbg/vI+8PtPNI9K7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq+Ds3zyrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVT7yB/wAp 35b/AO2pZf8AUQmQy/QfcW3B/eR94faeaR6V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV8HZvnlXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqn3kD/AJTvy3/21LL/AKiEyGX6D7i24P7yPvD7 TzSPSuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kvmj/oWfz3/wAt+l/8jbj/ALJ82f52HcXS/wAm5O8f j4O/6Fn89/8ALfpf/I24/wCyfH87DuK/ybk7x+Pg7/oWfz3/AMt+l/8AI24/7J8fzsO4r/JuTvH4 +Dv+hZ/Pf/Lfpf8AyNuP+yfH87DuK/ybk7x+Pg7/AKFn89/8t+l/8jbj/snx/Ow7iv8AJuTvH4+D v+hZ/Pf/AC36X/yNuP8Asnx/Ow7iv8m5O8fj4O/6Fn89/wDLfpf/ACNuP+yfH87DuK/ybk7x+Pg7 /oWfz3/y36X/AMjbj/snx/Ow7iv8m5O8fj4O/wChZ/Pf/Lfpf/I24/7J8fzsO4r/ACbk7x+Pg7/o Wfz3/wAt+l/8jbj/ALJ8fzsO4r/JuTvH4+Dv+hZ/Pf8Ay36X/wAjbj/snx/Ow7iv8m5O8fj4O/6F n89/8t+l/wDI24/7J8fzsO4r/JuTvH4+Dv8AoWfz3/y36X/yNuP+yfH87DuK/wAm5O8fj4O/6Fn8 9/8ALfpf/I24/wCyfH87DuK/ybk7x+Pg7/oWfz3/AMt+l/8AI24/7J8fzsO4r/JuTvH4+Dv+hZ/P f/Lfpf8AyNuP+yfH87DuK/ybk7x+Pg7/AKFn89/8t+l/8jbj/snx/Ow7iv8AJuTvH4+Dv+hZ/Pf/ AC36X/yNuP8Asnx/Ow7iv8m5O8fj4Jn5Y/5x686aV5l0nVLi9017ewvbe5mWOWcuUhlV2CgwKK0X apyM9XExI3Z4tBOMgSRsfx0fQma527sVdirsVdirsVdirsVdirsVdirsVdir/9k= + + + + + + uuid:c9cc53d7-1454-a246-9f7e-c3814b044a20 + xmp.did:0980117407206811822AB503FB0ACEDA + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + xmp.iid:0880117407206811822AB503FB0ACEDA + xmp.did:0880117407206811822AB503FB0ACEDA + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:0280117407206811822AB503FB0ACEDA + 2013-11-03T14:15:38+04:00 + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:0980117407206811822AB503FB0ACEDA + 2013-11-03T14:17:44+04:00 + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Print + + + False + False + 1 + + 26.990256 + 17.638889 + Millimeters + + + + PANTONE 7700 C + PANTONE Cool Gray 9 C + + + + + + Grupo de muestras por defecto + 0 + + + + Blanco + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Negro + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Rojo CMYK + CMYK + PROCESS + 0.000000 + 100.000000 + 100.000000 + 0.000000 + + + Amarillo CMYK + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Verde CMYK + CMYK + PROCESS + 100.000000 + 0.000000 + 100.000000 + 0.000000 + + + Cian CMYK + CMYK + PROCESS + 100.000000 + 0.000000 + 0.000000 + 0.000000 + + + Azul CMYK + CMYK + PROCESS + 100.000000 + 100.000000 + 0.000000 + 0.000000 + + + Magenta CMYK + CMYK + PROCESS + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=15 M=100 Y=90 K=10 + CMYK + PROCESS + 14.999998 + 100.000000 + 90.000000 + 10.000002 + + + C=0 M=90 Y=85 K=0 + CMYK + PROCESS + 0.000000 + 90.000000 + 85.000000 + 0.000000 + + + C=0 M=80 Y=95 K=0 + CMYK + PROCESS + 0.000000 + 80.000000 + 95.000000 + 0.000000 + + + C=0 M=50 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 50.000000 + 100.000000 + 0.000000 + + + C=0 M=35 Y=85 K=0 + CMYK + PROCESS + 0.000000 + 35.000004 + 85.000000 + 0.000000 + + + C=5 M=0 Y=90 K=0 + CMYK + PROCESS + 5.000001 + 0.000000 + 90.000000 + 0.000000 + + + C=20 M=0 Y=100 K=0 + CMYK + PROCESS + 19.999998 + 0.000000 + 100.000000 + 0.000000 + + + C=50 M=0 Y=100 K=0 + CMYK + PROCESS + 50.000000 + 0.000000 + 100.000000 + 0.000000 + + + C=75 M=0 Y=100 K=0 + CMYK + PROCESS + 75.000000 + 0.000000 + 100.000000 + 0.000000 + + + C=85 M=10 Y=100 K=10 + CMYK + PROCESS + 85.000000 + 10.000002 + 100.000000 + 10.000002 + + + C=90 M=30 Y=95 K=30 + CMYK + PROCESS + 90.000000 + 30.000002 + 95.000000 + 30.000002 + + + C=75 M=0 Y=75 K=0 + CMYK + PROCESS + 75.000000 + 0.000000 + 75.000000 + 0.000000 + + + C=80 M=10 Y=45 K=0 + CMYK + PROCESS + 80.000000 + 10.000002 + 45.000000 + 0.000000 + + + C=70 M=15 Y=0 K=0 + CMYK + PROCESS + 70.000000 + 14.999998 + 0.000000 + 0.000000 + + + C=85 M=50 Y=0 K=0 + CMYK + PROCESS + 85.000000 + 50.000000 + 0.000000 + 0.000000 + + + C=100 M=95 Y=5 K=0 + CMYK + PROCESS + 100.000000 + 95.000000 + 5.000001 + 0.000000 + + + C=100 M=100 Y=25 K=25 + CMYK + PROCESS + 100.000000 + 100.000000 + 25.000000 + 25.000000 + + + C=75 M=100 Y=0 K=0 + CMYK + PROCESS + 75.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=50 M=100 Y=0 K=0 + CMYK + PROCESS + 50.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=35 M=100 Y=35 K=10 + CMYK + PROCESS + 35.000004 + 100.000000 + 35.000004 + 10.000002 + + + C=10 M=100 Y=50 K=0 + CMYK + PROCESS + 10.000002 + 100.000000 + 50.000000 + 0.000000 + + + C=0 M=95 Y=20 K=0 + CMYK + PROCESS + 0.000000 + 95.000000 + 19.999998 + 0.000000 + + + C=25 M=25 Y=40 K=0 + CMYK + PROCESS + 25.000000 + 25.000000 + 39.999996 + 0.000000 + + + C=40 M=45 Y=50 K=5 + CMYK + PROCESS + 39.999996 + 45.000000 + 50.000000 + 5.000001 + + + C=50 M=50 Y=60 K=25 + CMYK + PROCESS + 50.000000 + 50.000000 + 60.000004 + 25.000000 + + + C=55 M=60 Y=65 K=40 + CMYK + PROCESS + 55.000000 + 60.000004 + 65.000000 + 39.999996 + + + C=25 M=40 Y=65 K=0 + CMYK + PROCESS + 25.000000 + 39.999996 + 65.000000 + 0.000000 + + + C=30 M=50 Y=75 K=10 + CMYK + PROCESS + 30.000002 + 50.000000 + 75.000000 + 10.000002 + + + C=35 M=60 Y=80 K=25 + CMYK + PROCESS + 35.000004 + 60.000004 + 80.000000 + 25.000000 + + + C=40 M=65 Y=90 K=35 + CMYK + PROCESS + 39.999996 + 65.000000 + 90.000000 + 35.000004 + + + C=40 M=70 Y=100 K=50 + CMYK + PROCESS + 39.999996 + 70.000000 + 100.000000 + 50.000000 + + + C=50 M=70 Y=80 K=70 + CMYK + PROCESS + 50.000000 + 70.000000 + 80.000000 + 70.000000 + + + PANTONE Cool Gray 9 C + SPOT + 100.000000 + LAB + 50.196079 + 0 + -2 + + + PANTONE 7700 C + SPOT + 100.000000 + LAB + 35.686275 + -11 + -26 + + + + + + Grises + 1 + + + + C=0 M=0 Y=0 K=100 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + C=0 M=0 Y=0 K=90 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 89.999405 + + + C=0 M=0 Y=0 K=80 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 79.998795 + + + C=0 M=0 Y=0 K=70 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 69.999702 + + + C=0 M=0 Y=0 K=60 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 59.999104 + + + C=0 M=0 Y=0 K=50 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 50.000000 + + + C=0 M=0 Y=0 K=40 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 39.999401 + + + C=0 M=0 Y=0 K=30 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 29.998802 + + + C=0 M=0 Y=0 K=20 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 19.999701 + + + C=0 M=0 Y=0 K=10 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 9.999103 + + + C=0 M=0 Y=0 K=5 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 4.998803 + + + + + + Brillantes + 1 + + + + C=0 M=100 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 100.000000 + 100.000000 + 0.000000 + + + C=0 M=75 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 75.000000 + 100.000000 + 0.000000 + + + C=0 M=10 Y=95 K=0 + CMYK + PROCESS + 0.000000 + 10.000002 + 95.000000 + 0.000000 + + + C=85 M=10 Y=100 K=0 + CMYK + PROCESS + 85.000000 + 10.000002 + 100.000000 + 0.000000 + + + C=100 M=90 Y=0 K=0 + CMYK + PROCESS + 100.000000 + 90.000000 + 0.000000 + 0.000000 + + + C=60 M=90 Y=0 K=0 + CMYK + PROCESS + 60.000004 + 90.000000 + 0.003099 + 0.003099 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 13 0 R/TrimBox[28.3465 28.3465 104.854 78.3465]/Type/Page>> endobj 8 0 obj <>stream +HlIn+7}hVm !@Ȱ@jI>dE}{O?ۏ-[jSvIis}B23f_?6cp!^p='S-_Fnה9n-%H͎sRȒEz(^Nm'䜲,Pj;tYy6EJ4;{e +[+=?BQ&E9mP-4opN +n-HSp#2!:% DH "KONΌ*NP̪a5uˣ.2/0[W->*KKIR {JTO Ju }ܚjQܓfeRD38PQ<'J˺<*랐8k<$fW!C%ѓ ]APMx͙G_H(Bэv:nڠy ͺ'?`>pgZ)w|7#}y +:4KKmXKzo-}_= endstream endobj 13 0 obj <>stream +8;Xp,ST8,^#D>Wq%O2Hn&4Vce6FaZ_6j9UgF] endstream endobj 14 0 obj [/Indexed/DeviceRGB 255 15 0 R] endobj 15 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 12 0 obj <> endobj 10 0 obj [/Separation/PANTONE#20Cool#20Gray#209#20C 18 0 R<>] endobj 11 0 obj [/Separation/PANTONE#207700#20C 18 0 R<>] endobj 18 0 obj [/Lab<>] endobj 9 0 obj <> endobj 19 0 obj <> endobj 20 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (GAG) () %%Title: (RR LOGO 003.eps) %%CreationDate: 03/11/13 14:17 %%Canvassize: 16383 %%BoundingBox: 7 -246 68 -202 %%HiResBoundingBox: 7.60986 -245.1309 67.2227 -202.9961 %%DocumentProcessColors: %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%DocumentCustomColors: (PANTONE 7700 C) %%+ (PANTONE Cool Gray 9 C) %%RGBCustomColor: 0.11025 0.353432 0.48886 (PANTONE 7700 C) %%+ 0.468179 0.467416 0.47835 (PANTONE Cool Gray 9 C) %%CMYKProcessColor: 1 1 1 1 ([Registro]) %AI3_Cropmarks: 0 -249.0635 76.5078 -199.0635 %AI3_TemplateBox: 113.5 -227.5 113.5 -227.5 %AI3_TileBox: -364.7461 -503.5635 418.2539 55.4365 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -98.3042 -162.937 3.8712 1196 689 18 0 0 78 98 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 56.6929 8 56.6929 8 1 0 0.756863 0.145098 0.129412 0.878431 0.572549 0.564706 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 21 0 obj <>stream +%%BoundingBox: 7 -246 68 -202 %%HiResBoundingBox: 7.60986 -245.1309 67.2227 -202.9961 %AI7_Thumbnail: 128 92 8 %%BeginData: 16524 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFA87D527D527D527D527D7DA8FFFFFD047D527D7D7D52FD047DFF %FFFFA8A87D7D527D527D527D527DA8FFFFA8527D7DFD07FF7D7D52A8FF7D %527D7D7D527D7D7D527D7DFD36FF7DFD0C527DFF7D5259FD075253525252 %FFFF7D527DFD07527D5252A1FF7D52527DFD06FFA87D52527DFFFD0C527D %FD35FF7D527D527D7DA8FD047D525252FF7D5252FD077D527D527DA8A852 %7D527D7DA87DA87D7D527D527DFFA8525977FD07FF527D52A8FF7D527D52 %A1FD047D527D527DA8FD34FF5252527DFD06FFA87D527DFFA1525252FD06 %FFA8525252CA7D525252A8FD06FF7D525252FF7D52527DA8FD05FFCA7752 %527DFF525252A8FD05FFA8525252A8FD34FF7D527DA8FFFFFFCAFFA8FFA8 %FFA8FF7D59527DFD06FFA87D527DA8A8527D7DFD07FFA17D527DFFA8527D %7DFD07FF527D52A8FF7D5252A8FD05FFA87D527DA8FD34FF525252A8FFFF %A8FD04527D527DFFA8525252A87DA87DA87D7D525252FF7D52527DFD07FF %A8525952FF7D52527DFD07FF7D52527DFF5259527DFD05A87D525252CAFD %34FF7D5252A8FFFFFF527D7D7D527D52FF7D7D527D525352525253527D52 %FFFFA8527D7DFD07FFA852527DFFA8527D7DFD07FF527D52A8FF7D527D52 %52527D5252527D527DFD35FF5253527DFD06FFA852527DFF7D5253FD0A52 %7DFF7D52527DA8FD06FF7D525252FF7D52527DA8FFA8FFFFFFA85352527D %FFFD0B527DA8FD35FF7D527D527D7DA87DA87D7D527D7DFF7D7D527DA8FF %A8FFA8FF7D7D527DFFA8527D527D7DA87DA87D7D527D527DFFA8527D52FD %077D527D52A8FF7D527D7DFFA8FFA8FFA8FD38FF7DFD0C52A8FF7D525252 %FD06FFA8525252FFFF7D5253FD0752535252A1FFA87DFD0B527DA8FF5252 %52A8FD3FFFA87D7D7D527D527D527D7DA8FFFF7D7D527DFD06FFA87D7D7D %A8FFA8A87D7D527D527D527D527DA8FD04FFA87D7D527D527D527D7DA8FF %FFFF7D7D7DA8FD42FFCAFFA8FFCAFFA8FD07FFAFFD07FFA8FD07FFA8FFCA %FFA8FFCAFD09FFA8FFCAFFA8FD07FFA8FDFCFFFD46FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA9FD34FF062F062E062F062E062F062E062F062E062F062E %062F062E062F062E062F062E062F062E062F062E062F062E062F062E062F %062E062F062E062F062E062F062E062F062E062F062E062F067EFD34FF2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C0D7DFD34FF062F062E062F062E062F062E %062F062E062F062E062F062E062F062E062F062E062F062E062F062E062F %062E062F062E062F062E062F062E062F062E062F062E062F062E062F062E %062F067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F7DFD34FF060C062F %060C062F060C062F060C062F060C062F060C062F060C062F060C062F060C %062F060C062F060C062F060C062F060C062F060C062F060C062F060C062F %060C062F060C062F060C067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %7DFD34FF062E062F062E062F062E062F062E062F062E062F062E062F062E %062F062E062F062E062F062E062F062E062F062E062F062E062F062E062F %062E062F062E062F062E062F062E062F062E067EFD34FF2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C0C7DFD34FF062F060C062F060C062F060C062F060C062F %060C062F060C062F060C062F060C062F060C062F060C062F060C062F060C %062F060C062F060C062F060C062F060C062F060C062F060C062F067EFD34 %FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C0D7DFD34FF062F062E062F062E062F %062E062F062E062F062E062F062E062F062E062F062E062F062E062F062E %062F062E062F062E062F062E062F062E062F062E062F062E062F062E062F %062E062F067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F7DFD34FF060C %062F060C062F060C062F060C062F060C062F060C062F060C062F060C062F %060C062F060C062F060C062F060C062F060C062F060C062F060C062F060C %062F060C062F060C062F060C067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F7DFD34FF062E062F062E062F062E062F062E062F062E062F062E062F %062E062F062E062F062E062F062E062F062E062F062E062F062E062F062E %062F062E062F062E062F062E062F062E062F062E067EFD34FF2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C0C7DFD34FF062F060C062F060C062F060C062F060C %062F060C062F060C062F060C062E060C060C060C060C060C060C060C060C %060C060C060C060C060C060C060C060C060C060C060C060C060C060C067E %FD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %062F2E597DA884A87EA884A87EA884A87EA884A87EA884A87EA884A87EA8 %84A87EA884A87EA884A87EA884A87EA884A8535953595359535953595359 %535953595359535953595359535953595359535953595359535953595359 %53597DA8AFFD06FF062F062E062F062E062F062E062F062E062F062E062F %062E062F062F7DFD2EFF59062E060C062E060C062E060C062E060C062E06 %0C062E060C062E060C062E060C062E060C062E060C062E060C062F53AFFD %04FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F067EFD %30FF532F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F062F0CA8FFFFFF060C062F06 %0C062F060C062F060C062F060C062F060C062F0659FD31FF59060C062F06 %0C062F060C062F060C062F060C062F060C062F060C062F060C062F060C06 %2F060C062F060C062F060C062E06A8FFFF2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C53FD32FF532F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0CFFFF062E062F062E062F062E062F062E062F062E062F062E %062E84FD32FF59062E062F062E062F062E062F062E062F062E062F062E06 %2F062E062F062E062F062E062F062E062F062E062F062E062F060C53FF2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F2EFD33FF532F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2FA9062F060C062F060C062F06 %0C062F060C062F060C062F067DFD33FF59062F060C062F060C062F060C06 %2F060C062F060C062F060C062F060C062F060C062F060C062F060C062F06 %0C062F060C062F06A82F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F84FD33FF532F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F5906 %2F062E062F062E062F062E062F062E062F062E062F0CA9FD33FF59062F06 %2E062F062E062F062E062E060C062E060C062E060C062E060C062E060C06 %2E060C062F062E062F062E062F062E062F06532F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F062FFD0EFF847E53595359535953595359535953 %5953595359535953592FA8FD0CFF532F0C2F0C2F0C2F0C2F0C2F0C7D84A8 %7EA87EA87EA87EA87EA87EA87EA87EA87EA87EA8847E2E2F0C2F0C2F0C2F %0C2F0C2F0C2F2E060C062F060C062F060C062F060C062F060C062F060C2E %FD0DFF590C060C060C060C060C060C060C060C060C060C060C060C060659 %FD0CFF59060C062F060C062F060C060C7EFD19FF2E0C060C062F060C062F %060C062F2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0659FD0CFF %842F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0684FD0C %FF532F0C2F0C2F0C2F0C2F0C2F0CA8FD1AFF2E2F0C2F0C2F0C2F0C2F0C2F %0C062E062F062E062F062E062F062E062F062E062F060C2FFD0CFF59062E %062F062E062F062E062F062E062F062E062F062E062F060C7DFD0CFF5906 %2E062F062E062F062E062E7EFD1AFF7E062E062F062E062F062E062F2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C59FD0CFF0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F067EFD0CFF532F0C2F0C %2F0C2F0C2F0C2F06A8FD1AFF7E2F0C2F0C2F0C2F0C2F0C2F0C062F060C06 %2F060C062F060C062F060C062F060C062E2EFD0BFFA80C062F060C062F06 %0C062F060C062F060C062F060C062F060C060C7DFD0CFF59062F060C062F %060C062F060C7DFD1AFFA8062F060C062F060C062F060C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C53FD0CFF0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0684FD0CFF532F0C2F0C2F0C2F0C2F %0C2F06A8FD1AFFA82F0C2F0C2F0C2F0C2F0C2F0C062F062E062F062E062F %062E062F062E062F062E062F0CFD0CFF2F062F062E062F062E062F062E06 %2F062E062F062E062F062E060C7DFD0CFF59062F062E062F062E062F060C %7DFD1AFF7D062F062E062F062E062F062F2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F062FA8FD0BFF7E0C0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0684FD0CFF532F0C2F0C2F0C2F0C2F0C2F0CA8FD %1AFF2E2F0C2F0C2F0C2F0C2F0C2F53060C062F060C062F060C062F060C06 %2F060C062F060C0684FD0CFF530C062E060C062E060C062E060C062E060C %062E060C062E060C59FD0CFF59060C062F060C062F060C060C7EFD19FF53 %0C060C062F060C062F060C067E2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F53FD0DFF7D592E2F2E2F2E2F2E2F2E2F2E2F2E2F2E2F2E2F %2E2F2E2F0684FD0CFF532F0C2F0C2F0C2F0C2F0C2F0C84A9FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A82F2F0C2F0C2F0C2F0C2F0C2F0C %2FA8062E062F062E062F062E062F062E062F062E062F062E062FA8FD11FF %A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFAFFD0CFF59062E062F06 %2E062F062E062F062E062F0C2E062F0C2E062F0C2E062F0C2E062F0C2E06 %2F060C062F062E062F062E062F060C53FF2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F062FA8FD31FF532F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F062F0C2F062F0C2F062F0C2F062F0C2F062F0C2F062F0C2F0C2F0C2F %0C2F0C2F062F2FFFFF062F060C062F060C062F060C062F060C062F060C06 %2F060C062F7EFD30FF59062F060C062F060C062F060C062F060C062F060C %062F060C062F060C062F060C062F060C062F060C062F060C062E060C53FF %FFFF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F2F %A8A8FD2DFF532F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F2F7EA8FD04FF062F06 %2E062F062E062F062E062F062E062F062E062F062E062F060C062F53A8A8 %FD2AFF59062F062E062F062E062F062E062F062E062F062E062F062E062F %062E062F062E062F062E062F062E062F06537DFD07FF2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F062F5384A8FD2DFF532F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F2E7EA8FD04FF060C062F060C062F060C062F06 %0C062F060C062F060C062F062E7DFD30FF59060C062F060C062F060C062F %060C062F060C062F060C062F060C062F060C062F060C062F060C062F060C %062F060C060C53FFFFFF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2FA8FD31FF532F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C0D2F %FFFF062E062F062E062F062E062F062E062F062E062F062E062FA8FD32FF %59062E062F062E062F062E062F060C062F060C062F060C062F060C062F06 %0C062F060C062F062E062F062E062F062E062F060C53FF2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F53FD33FF532F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2FA8062F060C062F060C062F060C062F060C06 %2F060C062F0684FD0DFF842E2E062F0C2F062F0C2F062F0C2F062F0C2F06 %2F0C2F062E7DFD0CFF59062F060C062F060C062F060C7DFFA8A9A8AFA8A9 %A8AFA8A9A8AFA8A9A8AFA8A9A8AFA8A87D2F060C062F060C062F060C062F %067E2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2FA8FD0CFFA8 %062F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F067EFD0CFF53 %2F0C2F0C2F0C2F0C2F0C2F06A8FD19FF2F0C2F0C2F0C2F0C2F0C2F0C2F53 %062F062E062F062E062F062E062F062E062F062E062F0CA9FD0CFF2E2F06 %2E062F062E062F062E062F062E062F062E062F062E060C7DFD0CFF59062F %062E062F062E062F060C7DFD19FF7D0C062F062E062F062E062F06532F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F062FA8FD0BFFA82F062F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0684FD0CFF532F0C2F %0C2F0C2F0C2F0C2F0CA8FD19FFA80C2F0C2F0C2F0C2F0C2F0C2F53060C06 %2F060C062F060C062F060C062F060C062F060C06AFFD0BFFAF060C062F06 %0C062F060C062F060C062F060C062F060C062F060C59FD0CFF59060C062F %060C062F060C060C7DFD19FF842E060C062F060C062F060C06592F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2FA8FD0BFFA82F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0684FD0CFF532F0C2F0C2F %0C2F0C2F0C2F0CA8FD19FFA90C2F0C2F0C2F0C2F0C2F0C2F53062E062F06 %2E062F062E062F062E062F062E062F060C06FD0DFF0C0C062F062E062F06 %2E062F062E062F062E062F062E062F060C7DFD0CFF59062E062F062E062F %062E062E7EFD19FF842F062E062F062E062F062E06592F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2FA8FD0BFFA82F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F067EFD0CFF532F0C2F0C2F0C2F0C2F %0C2F06A8FD19FFA8062F0C2F0C2F0C2F0C2F0C2F53062F060C062F060C06 %2F060C062F060C062F060C062E06A9FD0BFFA9062E060C062F060C062F06 %0C062F060C062F060C062F060C060C7DFD0CFF59062F060C062F060C062F %060C7DFD19FF840C062F060C062F060C062F06532F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2FA8FD0BFFA82F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C84FD0CFF532F0C2F0C2F0C2F0C2F0C2F %06A8FD19FFA9062F0C2F0C2F0C2F0C2F0C2F53062F062E062F062E062F06 %2E062F062E062F062E062F062F2E532E532E532E532E532E2F062F062E06 %2F062E062F062E062F062E062F062E062F062E062F2E532E532E532E532E %532E532E7DFD04A884A8A8A884FD04A8FD19FFA8A884A8A8A884A8A8A884 %A8A8A82F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F062F %0C2F062F0C2F062F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F062F0C2F062F0C2F060C7EFD34FF060C062F060C062F %060C062F060C062F060C062F060C062F060C062F060C062F060C062F060C %062F060C062F060C062F060C062F060C062F060C062F060C062F060C062F %060C062F060C067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F7DFD34FF %062E062F062E062F062E062F062E062F062E062F062E062F062E062F062E %062F062E062F062E062F062E062F062E062F062E062F062E062F062E062F %062E062F062E062F062E062F062E067EFD34FF2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C0C7DFD34FF062F060C062F060C062F060C062F060C062F060C062F %060C062F060C062F060C062F060C062F060C062F060C062F060C062F060C %062F060C062F060C062F060C062F060C062F060C062F067EFD34FF2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C0D7DFD34FF062F062E062F062E062F062E062F %062E062F062E062F062E062F062E062F062E062F062E062F062E062F062E %062F062E062F062E062F062E062F062E062F062E062F062E062F062E062F %067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F7DFD34FF060C062F060C %062F060C062F060C062F060C062F060C062F060C062F060C062F060C062F %060C062F060C062F060C062F060C062F060C062F060C062F060C062F060C %062F060C062F060C067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F7DFD %34FF062E062F062E062F062E062F062E062F062E062F062E062F062E062F %062E062F062E062F062E062F062E062F062E062F062E062F062E062F062E %062F062E062F062E062F062E062F062E067EFD34FF2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C0C7DFD34FF062F060C062F060C062F060C062F060C062F060C %062F060C062F060C062F060C062F060C062F060C062F060C062F060C062F %060C062F060C062F060C062F060C062F060C062F060C062F067EFD34FF2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C0D7DFD34FF060C060C060C060C060C060C %060C060C060C060C060C060C060C060C060C060C060C060C060C060C060C %060C060C060C060C060C060C060C060C060C060C060C060C060C060C060C %060C067DFD34FF7E7D847D7E7D847D7E7D847D7E7D847D7E7D847D7E7D84 %7D7E7D847D7E7D847D7E7D847D7E7D847D7E7D847D7E7D847D7E7D847D7E %7D847D7E7D847D7E7D847D7E7D847D7E7D847D7E7D7EA8FDB3FFFF %%EndData endstream endobj 22 0 obj <>stream +HWnI}CA w껪w~%0DCvZEv}}}=C3 +#DQn8g28x\m#06x4,,j]W~c4j~ig8})dkOqj2\̫rZv?M߶k?n>m}A^>Lip~\2 +);əbkXz'a}ڿ`^U#)>gz\3m7 v+t>mݨ:'e2Nڻq_(e:Uކ<2v^uev\Cj7ۋ[SGl.?mHtr=htB IwP@Lz f b wƁ+zt[gdVS^zBB;ώt^/FwG]®4|QGeU|RTד{[QFo2qܟܜY[/xl4NM]vfEh!¦\TO_˪}L ش}ݏ&Q.xzJw'__"9]5xdݛIV}R#E8mwϟ}2J=ٮwc.Fƣvv' E0xz_5Uhj|Prˆb?F )5N ޺q _G mx|kv] /GЃ)Wn5au:2v^ue&+Q;.>vwB-vA߮՘ֈRj'[כsϫI%tە:Gl\\T&álM[,[g"1v|M(v{jՕc]v +s|Rҧ5gcړ9ngu]FΫd8^1J"wd9X}r8tٕ|f/[*~lׇzڧ7y/R܌O;~ВgmG8e8Gۺ`lgM;?.O` C}ď^~do?_៙ȕ~Lv"PFimy(f/ِټZb e!Z!]h aŒͥp&S&e!`wXk=ȝtȭ2逫s)ּ`B 5݄%\Cp>pKa pOT49SY +]= \tnڨBDBL!%i2Z0"* +K8%8.=pϰȅ!|J%pF)mA YN)m£9GF끬ic]Berr:aM eASr.8H@%m۴e$KS6װC)JxФӢ`DB(C:9_o4X A}-(.ztt8-g/۾>l<|ʞI9U3>)U{T]{;_ǫ-~u˫z;2l̀#Lޅ`J=ԋs +VȒR$M2*@>Of!j :wt +<(*C .I0Ā"J + PGD9%&lJAAg +bJ +)iFB| rRP J3ڂktZy@) (@Yc(H0b@#cY Q# ErH"43Ġ**AL p (g;r:j +P%΢xҨUQU@~^CG \PYD%D30 8 +4Gi#p=0f *'΁≮}+("#b +NZ^`JPcXDf=).<`EaDTp]XF,Zb4pAX=,s`5HΑ!bLG4!s OIpD$^xMSx#Je)Is'i0YlmO29Zx:(0!RTG待:*n V57' B`^Q^D5Vd(Qж O?Q 1^!Oj3eX4ӵP36e[%PotETM{;yuv#lB8NgmDd6nÉ  Ӯ)guCj)JJòyUY, Tn cx NKwk "CgZ>yf&5է'!c50hY dEF2w#>r+ h7;HJ2J+/ R!5RVeX%JWc)l'3ReبMd$ 8nC^c6 A3kK֡e-YjVr8k`! +ŪV=64)Ę!":ϋ) f6ǶA0i3B摨zGZDag,]kO[CpxYĥ7j>1{b_`ZzD*!C Nt`O\2h^FAީM&Y +@j“D^vnlD9mWմw(*j2L} dwb,"]?2D69PVXfRUZh\x) xaT0ψ=C#yK*FɈc]Y|#%\o1 jxX0v'1~ιv6f؆: rx8v#y 㩨:(RTs+5IS W̚J(ů }mlD%~.8h%IPvePw;ND<&3{ү-rtCn:lCô/Sz{?٩@& !!ۻH<<* +DuȻl.FZi",}C1+M#fe7 +wS9Kv`*b6[W`m{sRKJV\zTj揍Zʤ,^cVp\gU570S>ZS Ou y?x}ɋ7/^|ZCfT\wOqOw>|Oןy£wO/?W/}/_=>'7?xoȗo^S>o/gto㙏|?|o_X^~rW\tlbt_-9g'Џ] RMm t^y)JTK?woQ;)kf5grsPIYrH ڔKZ}ia.OIHQxɹL + .[9}6l[Pa +ֳ`X^7n}=ݾw +'xkFo}S$G_9ք+oJhhP(Mf*bBLf:8tdnOڣ8}7Tr^d̆*4sD׸u|D+%S*_D)ڲKv}8foPhASdm/MnObsP&,au +3WjDosWO(Wxt\إo< +859WMk҂J^suDu2j!hPz(~ k0XyHo>c%aӭ\,@b# \x "cwńbTY+|:ɺ* pV!_x]8|^;mm/BY3@9Ug +*"k-\MsᣥH:WG;Al=©ki!o~UmNl݈J8pp^轘,XCkm,ӜƵ سw*5VF5Y[jE^Q +a/خ>c;w1-ua^ڱC 63mĊYo[$5#Nb +ZALZ|*. Ν *7EQz?`}nJ={0`Hrk +|ItshywTm/v+/l +GQ4M>݀cYpKKu1]Ӈ=HѢEW`;ϜxƧtkƼZJa8 +ȅj- LPVM[%V.ʄd,Q@]GwuI1T)Ĉ<<6lNuTP +D=գ^~YoS/^ flXkg%/D?eq}Ii]]Q]%oꐔ>FiM׊8ǵ&ܞ 3྾Β@}C#v{ν։Vqy#M쭅i` 1)WΉ ܣ00[yeAFNwoեPO/4zGF wF]8_)#}xNxwkB][EdVǩ!HM +8I\!CzUɘ/>u˓Qb3 Vl iٖV聆rQ͌K-ezj=j&V<֧;mtܹ} ':|M(~~lR,vcT'Jp%W"/Uu`-G_ `\Ny]? N:Vߡ ;$x쑦4WN:lQ +.}f tuC-UDb߅-J=\5`u &eM3zD06=XגU_h9xF|[؄%+S C;ڱ/Ѡ&lE{T6Z +_ +׭@F@BL;?T4ݪTy况q6S϶wv4^_*NE @m$qLb-MĤx1vM@fAT}gs ,%L=af[7:zPP@g0[ǣ.\7ǥ Q.GȩDM)Md4FyBy5HwrzS/{ e0 J~i5_ V}y6G SȂrh1UV-|rtR;=:P*s /5P ,bllp"Rh; L]$>%t]?_.TRO§An B, B:RrS;]MH_@w-[ˮR\NED*OS{yR/Z E\K-TOf%baH jR,$&0_[qNV4d;% HG^A|^\0ngCWk`)ҿ86__t" ZN*HoaDiP/J##6A@2oձfaJS.5|USB:\ҫLGQudw HJCj\'#KCͬ H_ 0kUF֮C5΅=ܽ&`]0krzr؋Ƌ~\ +o"*XDܞȦĤ.q$Q%~!؋GSz b +xv3!"x>}p;Q;V<ΘO@Pwdc(fXkLJːّNI8)`wPxrzl+kLwudn_ϲ9Rݚs3Ȓ~FT u4,5x X.mg{:ƁsL +rbEϞUzj23l]Vwyl|;>Ro8ܐ=nne7V6xz3>EJFcLqvf{s&m^FQqgY&KhV~KQ|JbC9A |[;rQ1 iY &Ҏ6^AiXbSLN*Z1Ox_NS/XI YO,W/{9$';@3žhqd\jSlU$HX rdFoQsZ jǀ)j5? yBF: պ[*խJjU_\35p~O~_'uB^{¥rIWr6~r%9 +xHa@Hc)!ڐ +PBNU +N zEd"M|YP:RAv#3gg@\> +sT :kE긓\Fְ͑;N"\-$3P R͔RMjJ.^DF$;!8\2S Dihг,7҈^tl + G+ l2}qK*5ETJ}QQXK4?,y~/ _@%+~󶨜]q +AX-ThCг}r^6B\kLVp |Tp^ŅbPho}qρ2 +lI"I t`ý Czq?>2l +@#Zm(c6g]/͹6oqީx=~f8x R:#fI~HhU@gu9A!z9NW4C;}U- +ș$ڥ9Pfj6Q,AWfuS:Gבyσdma4Ju<̹mtNY1Mli[m%CHzB&k)krM*Jh|Et<%xٚ>gB>Wƕ|CgJU`PBT3}db͡@TuYj-tQrd`Pg,&Bs@#` 팣ۆw bo6ic6SlM +$r/34Kc\>r昽Jj"RrC0o Ӿ!k Bσ 5KDT+ENNwU܇F] eĮ.I3h̨U⇂:l1 xslz6 s1E'Gpe2Ms#{T7# ('G,sH%B2RHkO J)^!Bgb-_~%k푑PjO$-EZXff׹hY6i7;OWe܇[ @y}^e N05'TLk3,~s! +>>9'YzeStʵ}3~JeUb?S~^!iJiLAVu{l )f[lEUu_q + ۂd_R/AA> +s+fMԝ(E\ۖRnӷ!^nt׼>~ff" z Í b&TՒ:bZtH'Zؒ-jOKqcQ.&mF,/Zq\%*`&yUk0kD_k&TJ܄ !5<KpHNm=6CWBQ0z4J4Tms& lQCق7ս%»D``~CM{7 '?`Tg@Ye]#EUTb Zk}v~/;"i z2j $%˔m,z pj|M~^:ꋡ&A-g"Juy4N2#q#ˮ +ftFIp?2xT.iF8/3rdk|]/J_JVjSH4DD{xչpj)D<`>7c]KdG[{>s̮Xz R jE$OOA*jͲ +>wCWc2&p.>Hrne’`>XI,!cx '(oBJ2{d1wת$D]uK˂*y -mH7G]m&,?^0F8  2SBYD?q=ӣi#˙x%Jh2aSCw6=t~GLo[țM}ѯ=t%VsL +8K,}QvLYYm&㴧.xMng[C>yV(Jqq8Д߇ITzں_#ü:Ћ cj6x ەX/'@|v SqѮwY=9#΋A2(%yRp  l#$(G+cUvY<LD +#ʼn#g=r=c^r |iܒ7~s=H+8GK`щ:\>J۬F +x.C7z +8vX^<=~G_5:bм|OJ`< zJ 4hL'::(Xƴ @&&FFE Ѝ=EWr[䉐Q}?:0 j_ װ%mbU_ZSehDP 0AE~!j cdCzaM1zGAXɄDS9gv6d`+&ty:)1] 5ǎ@%?qKbIsM+Mvy˳bœEiþ0ƁIRS*t]1f~=<-ۃw󛂕5},xyq\vl7\\,j | ͎ݰ=p++XH {<K.O01,Xsdd|풾+[)KT|s<MjTY!rCPTw.M*L/og@u\mSY +%峻"e\f-U8[QMzc.1=*{;gB}_'x"وge"e(~:b'lbvvyT(L``c8BUkPӒCv㬉+c07=?Pjن PXLT"28xðJ̨mэߋwV([7CjSXRWz?wW߽{/Ż{Oxwȓ|zs~{}n}>ݹﯯ>p}ӧէPϫO>;}w~ 'ܹw +sv:|N;&Tw/?)n?=h~~''ԡ5JsJ^ ,+CGڙ&X>WXiCk~J TZ4|\i~iQTw_k8c4C4qe xPqmpoZB}>V?X>oFϮgBU~߿P䞵 /Z%!td&ud(ND=~G1,v2(P97Q }(|<5A[NCR D3.ukID % >2A&$wʲWxxh L*Z7gd5䰵ѩ+1 +zb BAxT\5CƎ,RښB'Z|J)[PX7mJdLL|HIՋM1:o'sQK;(ѳKWm.2>vqn'c rX@5$TVϐeʑj+8RLۊ4YI1,Cwqԑ􏀭[16'v%7j<)%ii:.RXU?檉b@\N`h^Lý9t3idP\_ԙRP,S ۆw9qyQm.YE eLp`|5׼tݵ YzNU.kd\)SS-$5V!U;QIʢAari㹩kKJNa1#fbډ%ȥem6Fθj}M/_Jo1u`Ȫ~_Ί3IN} Ոc4V-e` +}nAv2C4Rhmԧzoڋd SxJlG<ٚUvа`+Ӟ"#ӂi6 eyC*f<6'hsOGlRK箐7n*ИCL:}wf+O@6$&z_X\Ŋ4G9dcnr%WjpaD^J"gTJvB=>mRZ}(h\n t !2+ +\}Rk׼50Q.Ωɚ"Vr0zI\ +9> Q_{=ǝ!Bf@QBeCf?GrmG%) 0Ʋ8J4H[p) (͊Ņ#iKN\!mr/N&Pń +SGãL 4~ˡ Č7ѳeܐuxg$B9.]b2Z `9ƾvt׉f]1:E N9nVhLe:lnCyak9 +Gs&Yg2Rߍ}WvC8=Cy\/u tKx(AjFWBr+}3\L+zF7룞b5@N#߼pC-y mGOTpgiIa׹QEjFk1N}Ff\1avOK6*kG*hD]ĉh杘lYej|PrʁN'6EcPK}.WvYAc^.(QV{CA@æzʧ+vY?ԛ{cu~t +Ƭ )wqp"l)|M9 +UCԱYۆݴOfsZm CV]$x&Š2aXē7&J7/{ Yـ=PFG}mpj1omsְ1 Vam߳W?2/Tkt:.:pTz.x0ۤhQ2Z FF.k=usM\سRp^[ =jz 4gZO-cV(pL[x|k Sw#&*/YAF t7=+ɝXpgI]ܮ[^J6yKP%HE)$?ɳ~VWI$زaA[ ZurEP<)Up *HmjGl+l[IC;7^[;N3mżm4B3!pV!DpQ@{32ę +Ҳ"8mLARH=ۺd;a 2֭!=y‘̜|*vz~s =wsZNlM&/Y׬W9+R\^_TQL;F[m=Q"gY𬩾t7ԟT/p?Vɂ;~QX +JWfhv~gUw6q: Ӯ;VgD,] Gw[]eb"r{_ VK=Es +}#k4Bt4sd+utWSyȣc=PQ#/NVAuq`5 +VZ $^:Eeacq_Q{YzXZ=iC|6zC^Q{Eŵe4ʺ`>*i @*T4mEAnqEsiĂ1WYȷ~ +d~[^&htV(*SiٰCnShFn4n4 mBLFN^wX-%S]Z+tV)pCRŎ`?]M-V6nrK;MJh9(WBbT0=-UgHO1e39 o`ZJ=eh]L6hV' o3\̑[Z핮{3Cp-[6_?F|b}l{ 82q 7m+?%?' /?_woǷ_=?P/ VKmzRih$o [5yA)׸$w8A }+G1H94Sj,)aXD۔ԪKo~Pʄ#ciECG'I+5r ߳?Y"\$QΔHqKR8QWz$WUd/P2JW[s!'l2 +>7(. .nuhw uZ<9Y\vAJݬY&`jϊBL1vգVXATǰw>KImq_pZNq4=٥#$=4wm/1SnZ PoѓNc0;„]aWq K3Tvƨa aJI=WjEP%'Y"{ʩ4P뀮gFj_'jݳdK8ןg`RcUTK(;n^_hX>*ךZYŰ}<آ* ' + ^]@LzfzJ84AehL6Q3<:&˷ٓ;4ò泘Gvfu,lwd,}Q,&uxfǢF㓄sȫH:pv?U1p s'ÏS0g6d'E_Yϰ;ɺ\/ +d՚ps1i?Ok8Oƨv=,)Q$<*Z^;N >!˽`yhu;'%9kI^bnu *"e +mO {Wˊ1F*I¸W""*W߷72 \N'J+yzT+{Ѹv[ڜO;bvo^[A@tnDyYwpeɗ:,)$=H~R 'b~|_ˇ7k/ ߤ|x $[1뱆X+T;V+4rJ63ZXr_G[tnN7Uq@%Ks;$pm ڙ)qOHfhɡކ +١y-~DƬLEmk%4[:4ylEQf%PيBy#}+!5]sxBtB+۸D,za!l/VgVG:HbP_!Z`AxE渟 r[CXg(ըSi#jk/Wx5(ݑ_rJDU! I)PйwY=P-t1>ӸA'cͫ^'š=\rC\zmuVʹtY'PqcJ}D6zT z/<>EPFX:Ũq ;>Wq)q'#3,M7ڌrq.rJWK + endstream endobj 23 0 obj <>stream +Hيa_Л"wxUxDF~"r(7sqC*ϐF~|)?pIaO!/zQ[j}(m>B D1aKqnG(v~7~&Ū0aZi!,tj76X(*Dz[I NܐQ (G]RwCn:QW +"dG/uثA8Ƙ>|i +#(x(P)kC6X\,NՄ뭠 /f[ZcePg&f +ptQ!:J\ꊉ,̀ꕣxh)~]/R=#Q^jlMl`H) Nv 1&lKSjg 1.Bk +Vۿl#2)2J;bW :ӎ&;ffn/Fм{Hԣ(bWpe1b߾ć ?"O/=#6~/?}{Kx˿囿xq7=<%H2O/p؉$F cXUWj=X}LZ1ĆleAج趸V؎}MD:,+ldLR}aLኢRCchZ!)JY5fYjI (0}V֐>j9Q5UW>kQL3Ԛ_`SK˰e3M;ci~BE0SЪz^h.qa-U{#h+QT}ݸK +g.`7EۙMn֗jM;-Qml4Z߿c =ARPͺA}Fe>mAq_Q9XN֒tFDZO ,D,X<]YH"6,JNHC 멡xFؑfD+Q05Qq@ҪĹG~՚5t ~|biu˖w n64#ˈ ƅHRLhre,gnȽ#t쓌#ʆzR~2K\=$Sꈕ kLhr,_jwBׂWdb f m\UUw@pNCRhT}ٍ(P{bI:K(k1kAeCsmRX\GDX_Ϧ07qq#1/5'{Qv@Q;Ui>&TR87'AIAUUS]"TKv0iZN[N`Z8d3 +A(TRT!&Hԕា#"' c41[G02)a襁F#b7Ւ;[/8.DcI,}UZ'r` +ȃG1n7 A%=% PS;] "(ܵƆ ]neR~u;7P&vRe-Nu*^+ *x7kD*Z5TbRW|U#+Qz {ZRB.[J1#8Җ*8t8<).jZߡ;'94lqϔ"j,eIwWYjolhpVdm9 .ZFWqֳ#oQ;D+ΆG(7͢CjORJg Cb!$𠑶hop +)vQvW:idqgeG#DlԶȒ#E#b;m05fvhÖB5pi$+nss g)`iƯ0읎+3V +aAR&Jb1%E V668G$ĕQ0Ge Zy57 *Y*iAH4ڒ c>sۖWoVY9[3Lq;{5qnp|e/.A#=:AYvW0&2~BۊF٢r\1GhgQm x[j׹Znp5&,2BzDC9b,GGXr +*-H)kCh~h) *$kL;r[-,"YKKcN +{6" +5rK|迯~/?}͛Kxu›y|0+X&}jz>|q, S?晉AR&cV휥mQV뾸NԺ]%SXXm,6%_i`RwL:u \&f:s뻏aE{ŴT˦wv0v[fS9OmvvffU70JօC%-L#NTs7)eLXu)G~{Ygw2C_tE}T1JmYYNAg5h1dzAKbYpD"/TwufVaL< x#L^a.[飕s)CGȹ7b H5 O\2*`;ӄH)ڎv:M{Fh'qF[\0cZwH;$@j&B!(HQ{x8yXs0c6vY0ݧԹ}V!eXc6^N8Fh˲jtpT@ pL2? ;pdZyj(:0vZ>>6d:ҡ#ryĘ74TXn> +l02HaͰFN fP[/h҆ +*Fd!p[`Eގ +#t0v,]umi7iP +^(J[;3Sd{1ԍoмH~Х,j,_Ң,QfkR:y^JoLI7dڵ:4r|p+L jrV4Sw:=D]gxlD&屔˗ic~MqPZ=wFf% +ʛK ћ))1<=ԬmCtƒx)p^ڧg7O77'W>\<]:pN{vJCY)zkL/٬ϟvgqoOWW6>;?;<;Ym_;;!hoÃ֤_? sj[6t{݋-xx{wl?wOl>=Ŀ7V/'<һNIkKE/'ԁNFDD~@ϢOΪLYNY >>Ob|= jFcD E@)+:+AAV!E.HT!]zt"%zfqb =>),Šȶ!+ę_l/x;>>jg70S8.$-naN#bD7[|91@J^}DRƆI2YbcBy?{wDR~ۚ9-U-%JMe7y<ټ]6{|['K~:dG$j-Fh` ed|LX--c +5v&@2qM,|g0K﫹_?:8Rm2^@<{TrU['cW@yF}<D6^CJ⢜;M#KpKq~04~(vc ays)-"r¤D : wKF})97/K9`*&K٬dro[7,Gku6>^g{1g>PR&(^V&hbQnv)srdkd(d\; +c{ *ˆ,VL2'.uLX2%!ہ;SV? nއL͔;'>YMTtQ4ӆVILi!32@YNj{ͳ듳;tjskZ㫍)ς}p\%D${y7j?(RP񖺏֏\@5h+cZ42bSq1tsi+R:K0s(ZnC(<tmLAW_'Eb/,h&nh{- +Rr:kMh-@ ׃4D2np\iPDTk*Se%\{6FE< e/=񨴔P0!ALX {YIYAY8c)z{UJOx+wŎ|8]PD1bgH䲦 GSULQЙE%6:-a:.`?v%pyKtn P̄ Q:pTbn9S:h +f ኡ>.PS-&>½TI@^4V3( zP |: Bb<8L۔fPWj LA7@ Gb!" (sIpIyGg [ZHgFH/3.3rG*ON^}"Rz>f"_tS*vD7b6AV TБ#Z߼O?Ȭ1SȖUoSV bpym}7V yi95,9Rʃ4 PrM9́XG 囩^90ꑽZ9mJ'%Rc%էoC ET~!ڼ6V)dCL2u!|:v*eYw.-]5'Mb^>S ׀&d!졒 EI 3!u+,ʮ@;7Ohv)X@|I31sT+d, vd)Ag.GKLa&ՍlmR{EgQ,~ab)W .T7$OJE8mb"4M.6)&{v|^߿Z>f*J"SC-;F#2NT+ݨ޳k=͒:|x{(B\jCOO ;I?bI &߯y(jĮp)X*0JR6mJaS 5ђd#TH9g~ + .E-/=^gjf[mjSm{j2ϡR&@84%n H*w|ByZ~5!/X +]h TF's1ٷeg(nڀx漓6֭x!,Gf[=%m4Ua| X$h}KS-(:t8(Kױ=y!-Da[6:8j#BѰT_?MFFuYG}r1b5E*5͝GbVPQ=+)кƠZmkY\fʰB^OExRعs_Ű`OUjCVQ "ty M~1PV9Lg +FKN[B-JۯuS`[XR(ZV 24aBYmds;Z^LwSExߤUɺ<~WZ +Ҹݒ6- Y>zKr,OGLG_(Oؗl }lWfC#&dL%7ZWݣpJX~ZP !WD%+ cٶu\uDO\R+zz'PMC-&R% R/R1̯X|^S>q|)eWªN8זa˫+ӕ ݲM9BOڑXND] :2o՚,*Ï{>K̝Nm^H8k/ +J*Ii=V2$}.&|cQ,TqG@dTF +擶׫4xdtL.:d3o58̗!뺜C[FW9U0n7hr$BmH(;E +\-743jpRyg]#<6,N=F x3ҢVjĉ=]Z]O0 +R?-)r +։%fZHD3f)O9jdE8 +{ ""u _cbPH/6P@&]W,Z +fo=r>LrD̡Ȼgu H|o-bؕ-Hy.=\ЉDÛQ +C"BRjJx ' +!}ɨh/T`֎1hWdlu 3V&E!A g(o+T&:jƃ3Dfgzr&ϛKA,h3\ (DY@j.W|GVnͰU8D=VH0HiVƉʅ q +Z4|apzQjR`) +9B548 sX%"EG4(_EhWz!.B԰kdDyFE`(Cvg,)Ix*)1A#f t Lρ`p8 +!@ǂ,H؟D +Rp*`:JUl1.ťh + oMt fDVE]( eqa͜/q,CD; vq ԉ€ 䴉,*9.R8\O%L&cILt|h6 z'P +i;G9eT|!Q"&@P$3֓$e1] 9KE: 0!.D3T gF;DP&VH] *fiwx6ƁBA *1 ;vLAZBJáX +qқى/XuqOcQA-#b}Tx,)v܁D IHNQ`d c  rCT $d ;#a FSWDE<>&"s3Nm.hQ ~|?Gz 31N8)@g&;7D(B~& !0ϝ4 +5X0=Bpx`@ecFIC0P G2['i@Hz!A29qwFMҡR걟*6MzQ(E9 cw^6x&0R'n01,"p[lV N.J^tD2tA8'; 7xQ*?"iuh"/Ð4 7b,P9Js7LA Q$FdI$Yݎ;?{d3ЀW#.(xD&??j,B( +4>QQX7IBDtV2-"T}DB2$?8ECJKE@yHvB#gc0]+P)T:[:zIh2&JmO_ ZH<.Aa);Y"dnd2R?2~8_t#;"v$,|'"VH'؜R+e] +8R FPB#K|k,k$sÀMي W)%3,uonQ<=<Ed~‘A^)N\azC$qIoc"gz'0e82HUKpnJD?9X Z${&T)0! F|8Q`)3w絔d*'x`&'r\(Db B$6JOBfЅ%.Rwo'6:qx,XIJy.d(: pKSqg"JEABͽh U<뙳)I??d"eaBN#Fʢ˔ZhEBO]vtwX>kf˦SL_vKY3/.nn\zUOo {}RpVϖ}Nc}'u#x!O"rh`mfjZoZ|T7Pޟ/׸ ͒GK~jb-.`qzNnִmov̳zY=|mj15ϚO͢_MS^ y^0xW {>Fx쉦Vø'n\8_ճjΏl#='&O`, &]c'3_ݚ9fMg橙8l>`FO-jq˶OKǩf76cm=,ͼC.]43]/ꢩ_{omm%*Su$?Pp ! +$| M! twEhPWfN!9h9SK'fVYD*|jzhV_/xPZ'JS?~3.,Hn .&8gro`IE7S5Q2` +{ +AY,YvH2ES1fфy9̚I^ n$lڥ7 iAC^4hs^й]̘=+jh'%3gҌ6 f NĥSk +7ϋAywoLަ+$~$舤ׄ@AB +kcBWa goXb]o$╄vl WJ}%_#i, Rq4s% +m$[dXqŬ:VRL˓Ko)m iRctQ+R [78\>~`+}s:XE]b'2{]'w4ظ$uBW1pUx2}WToeQc}EA +Eg4I!z3~F ( NQS-ɨJҊT 3ɣ7˽N2n/e#\G0ll1ʃ{1;އ̦@nYj5ydmJЍQVwc!h6apA۰stqXmPOPҤVOBuy9S $Oh]Ȇ#rHsCiϚEm1MqW!|,(ַ 1 qC[5a5Q<`aVeg PӠ&PҰ`1vdVX(cꈘV2&9WWe3gC|n!{҆Q\c!Tfd5ȷmkΪ1U[9UF>-~}x06!Q0::6gGG3Lf Sef*ʚfa Xe M[Vm̶H[/{o?)Ya)N% ?sol@9,i,= 0`-YSYn"9ޛM>{ x7a)n KLJZLk{JٸT>fSJRCz맳xNbZZ .ue!v gJDt71۹/%ԋB>(뀂ԞP +Zmg }W9oO%_ ڃ-E5UL~_E`+\f?{Sxpz4agN| $.`z.th}`z- ~7dhrE^8Gݙ"?u%Y{sY~}ZԖ6GXcޘbH+8ʦP$S16rϋ}Eji[#8qڧBtT=Q'kf]hDfϾW< YZ8K4;}fyp[,o"vxtB 8#$j<S6)Ȅ 0s ԁ, +G%W oIQXЈo_b4b]X_Q&j igWh3ٔ@e7]R`/8ѻ:q>V`5uER{Ve{/kۆ\֏%&t>u[*3lTA^s#nc>,H5Ue&^~ >0ɲAJ)V5?1)xOD(vY:t[q8{ZpeFz/N*w@rDۼA3TGI6Xm.5?JՕ!ﷃ[@0MxaO$}<|=%`t CH> endstream endobj 24 0 obj <>stream +HԗVwH _Q@˗(T*Ԫ DL:3׺p_|$!guuu?ڥ7{4 3*kx[!?T5&BE "]?\?KSU)6E!7ajzÅ?PUXB]wfU%W+oQVE[K 3VOb &Vwf*(K^y__aE:d|rͿլAZ,5*i<[*W Zuf&1O#檅$j+h%mBbΉ> +D5Xz&yMoD,*6 9i} +)? +:HFǦL$KFFfAnaS\"XCLž U减JaV)ObވH5mUX%@* z!RQh=3rKV+m +˞b UYZDTt$V 躟+W5ӜW, +B Zi]/Ϯu5 +#T A2NӬ Μ=`AWa)l}v8(0w5HH" Aࣽط>G%Be,*$/_=DzjfDl.npNIhgFC ~/9-[vuUg;:j +~'p-@/)DQ?h.r8= 9IF2S^>cjwz/(lx\k=eʓ䬀bA2. )jv]%G2Ιh)2&KJ`H)c0wY(F)öz40kb) U2D * fG GqP0o k,c]¶q60mr Yw9m?c?-1e>kFbL9pb2'nâoN鿀\`=/i`)GQ`HFrbzbbE5T&$D Y -%ECAň".F{P,wȘ8v/It@N!6VĽk!Vk4ge<ʙIx-6?&Я%_P9X `H 2 +TyBruM>yI1LZ9F&ݜ\F2X\UX8i\ݜO93a̍k6pp] #HyrrnAk+>ן5Dg]9"595u^J4BLj8-xe<`:6T#i'FW#P#d-幌Ib;cxVaP "ˍU{E K/'x.Ͷt2`O3GM-oݴTW)Cmxkc'w}i5OfL7zYH9}{ݍ֚ҞTR\pǷT|o6ܸr@eֹi{/ߴwZM3c:#KδPoR{ۙE[`.II+{sG"U3W5m۬M6R]eH;z(晲עRy}R],#o0mM RNys=0Ky$v}q-J;G쑑6Vo OG]/5AxyͣvM o)*ꗝ3GSodJ l~rɹ9lNj{' ]չfR!C;N*.KiX9S2KƩ\⸺4 Xذ +iєQk@ { <Ҙǿ1?b9,bE`F񽹝.7.*`,{g4qO>Rk4t[PZA"SF,VV"ߚ)/ \11iGM$2FVh?쭩 %$`Ȁ"E"H_ +83%")5s !zE̢32ܳ6m?EU%eɄn8f|zU֪s n޴VQS2k-l%g#]="ur" hY6'WEڄQ>\|ҞbLƆ,Ч}y8j " wf[ɬgքu_٧``M9/`}l5!+MG1l;E\Mc=p%=j<_i |e/#,.jOT#o8u'686Fa&4_.A +B1ʏ/ Y00U3YEj$>E.|g}~r=_.Oʿr}bun7\S3% uI(x8Y`Op A8-]QUߘo}? x'F~ QJX|_6-\vE)7ZKCu>:3GQ~ +šAy5`f7/x.^ Hǫj.g<,mz~N|-ƶ\mg:Wu_ŧ3Vu%H]B_DzN$;n7$JSv/gϰ_~eiwf4tEIzR.:[KU-zbw2CxSNem lFI=xci2O uFx"d4qZ9 VBlJcxdO/Ю:p;N,}͌;SǬ0mݹV+(4ŨUzK'9cRΐD[߫Ź1[:Y;ksU/܃{YRdI: +LlV:,X!^yTpU'8T4ʾn)HcVN }uO+ 흹p8ZlMf#S7a5 +Jx4}p~dkN;躔$w4s8[0cA:Y*~vtMIxI5'M'2 h \Ϳ|-o}>s }Vf@./_G'b lD|hPtd᫻+Ib3כ&1'%qS}\mgrR Vs.x&Yd`R#y/z+YN$?ɑj DFGG\%0sQI,q϶w# t+i|h÷h{ + ++GKGWa,(%C\;ś=xsȲ JEŖ"٨1JQ֎\>eX-wŷ_ +ȶ4JȶdґFSKkb?/~F#Xv~,mWOȦ~ ~B8- u;DeGτaH8zew܀^_o>QTؠ[:휶cvo*Lc;s0w`PA@+8w;Qb8(Cf fcWwWF+xu;\ެvR^@DŽjz'[|䠆$ ;r'}Cteտ_7\$ye@cqe:f6R@ٙRlup2坐֌ `bJ-EuGlRD=pK[1]TjMXQi`,ɶ4JW/]L>Ǻ[)/ 7T8W)ѳ4-Fw/oB ,J [dbc?Xl%nxKDK&6 Q%zu!(pzh{xPgqwy<c#kNڭ@Eܘo!Ţ}(|7@ә6׍8rd^?rs s(ܱ 2o$p ޽n>L5fXy,ɢncB12Sd6Ro'$.9-N2(߬WyQP-/Vڂ1i23~wp3?nmc'ݹwA1LS`PΨVJ n @4[3*OF]՗ǑFM/(X1~oOT%z$|.'fW7pEUb).wSYe\ud{EM3SIx{hհ?V؟'1R?R~F  +ξaɸPkVx; v#j;xf x7 pQeV%9RԅZt%Kz5 0WS}cw%2 .C̿7ޚ.䵡0#gXsY,Ek HAצ"}_Nm9Bb{oyORyfsy8yP/sj)Caϵ!LS[#[ȘKSU88q5qH4N$4:so׋j@Qr 1_Wuտ/P,2Mh@%/0$`WaGaR<[~O,D4_1E>,'%s*Y"g?`,ge %%_-9ed Y}BPV>Laqn}+,Y4:Sj~WұJwFd@ᮥkY>2!l/>8BX8 ++-VGqXKq HGp +ĐybsvėB;I`mN [p2|̭`Q` vVXյhKB@&HCײ[b;1vg!*|\CUr^^yYMA^ypCNl,օw[|D PVGUX8ԏ #xRjWhҐkq.*;O6hsQ5, +M`[_\= \OqtVvw; ,,KZi^BvB'EsWFgqoeޖߛ[IwR᳡s¹PzOV75[7ÖAlenlEõ :f7i&Iߊ=@zk*~d݉Ȍ܂ŕ6,.$‰0 KJצ\BIR63CR&j@EF^hHAg!O>.h-=]5c8wUf)KҝN#= }errxa&A/!O+i9 s'lt(+RrI|ޭFJБ4n:j|M'SnZ(V*eM.IQ9)4XGZ(+;}-?]XlG4a2X(~41И.H :ЕvO/*vӾ)Zc2l@!=}LMuk~ۆ7Ԥ 4@tCLVSi=W!S$75 eF澦ɱl[q]sh~wM3nPؗT`@Wtj|hPte<`|٨*,]^̡U:\Pl]ڑhSt3!PƉ.g6d1И-YV&8hnyIrk3u]ShB^6"叼m5U>Ը28, +BV_ish3L=Wsa5&#˴j=`HJV83O~MsՏema' l@7 Vg-gnP'kY:+J*7 4fC7shd0BY إM EG]^B#=&څtptaCxQ{ *? +A':|uB,Bek |m:PС_*<_F'M;1_l?~]iyE|5)ݙk=g?Hx(i*>R>ݻpWII(*w]d;VVMVJ \lú4il8p.W?:Me\q%^v0E%D^;kW/=zNQvM/Mw+$v8X3&ׁ,-|"X`k ?_dV͍5Ɂ/Vo9 K=]yhSGI0fR0@>FX؍3!@ih#ŕN{^P1H=UEUլYߡzeUasnDa!=JnTڔ(L6ղ?0yXԱ=9$?Pj0Q(;V{7m|VNãBzPHϭy>=uX fL4v"j(~* l2aٸtR"lZNZOTY~v\nK܋ms˅Rۑ0)xF݀~˜'?X[+IisGҡ`CgN:Xʍg:K 79]+䅶R)+(~2 61~]]`&ODe4y}qzpݜ{c7W +ʧ-:!C+bu4ye[9 VVGMD9t:-th>1<:'#˲#x +1ls 6KĚTx>8\ +CN0$0B\n;4OR= eKr].˪p=:S+r֌ +^3g U}Sh-+ 8|2yIu>I-rW<{ȕ XΊ(Eo9v;vJq7 +0xj a~ z`|.8*qa|I<1h.HVEQic2Fd׹T:[VZ A{i#̜4*_ +*0 ,ސ0.<:_&ixr4c϶Fs8YLcH><;|sAb9r=]W}&]6]^'+z@y\ Vva8,B:/Y %ut?okTUw*n55Ov}]uJ^zC9^1xX|,^BK^Y%]K=$eCҎt(5F9OzS)QX'"`'^c9iD +A!?&C6 +rj&"?{(AIʊQ1ьo)f]\UPFf_~<̛4Ӥ6hVO`45}?Yg4a4S+2Z&94].yc~ڍt&-(+s+U7oӆ:o3 @_^+Y F14 CHVAE43>GR$o0qԬ=ׂWREQVSI#䎻ky-D`6SC: _/i{_^ew+U15WS1'8Z8/\@U5k!aU`5dp洐~T +h-͗c6?^^`ҬO2W?#6d,vSy v}OeSv'+EzUs 5!vXʥN{xae3;TJa*VG[=gA.H%M>n"sײE5(ɠT /+o]/p +ET#)bYix:9J&,8tk&R\]WNޅՃz]42Pze~BNB[?CoA6CU dK?Q1.e:VI_}U,R,9}.Vʸ6ʹ{<;mz^DN>f30^rN&~D݊=߀k|4|u^T_#Bg/3uzWz9ݷ5"kJ'©hr >=.2?KZ^-{QMg6G[!h|6?=&8]h>vYNd5"Yy^0axzh.<#~[sg*}L,\\&)Gh lb.[ڦ pRnG_]?v[glqWzKoNmWۺ{dNRO6p@5 ٩WZ0O8˧mU{3/>;e3pW}Nq> =#Άr\Ex>Mf +ݻc龨󟒩Iղ{rMDlB<4Xfi[n2#!6FnI9j!Wartsev!* 3M뷴LD^}t"[wU1*IF=o^}^In;m{`3Y+^gHln(||,|&jޓM_G/J}*U?q^A풳2CWYyWMttK[ 3mM LIk'ZB 䚠疧PvExh̷2`=D`4@b<*VŬ(3uJs͍sW:\;sa|Pu$lN{+Lg!rm"]F 1SNA+VG _4?Fಳ~j|YEx,>QmcϹ~xolj;WxwA?zTiƝG'UTeV1 N),ZvO,qT,K✔W;Ģ:3MX)3cN'cdpT~s +gC)Zvvh\vJ8ǣ(-!*>s8oZ [wU1*gS?U8F /Tp5`K :?UIH-TU*?u[݋595|$t&xdfnD.KS`ےfp&lg6p;"dX$Y6Y1ځY.ֺD3(g)4 @JhTnc2x*qVjEfv:IwS'~_@(S2aJ%my:* n6@*Ui`HX,$ MRbz1nIo)}Y;&$ 5Y^+ٻ^& A-$i'8M:S@Yhkc!5NjGM?XR`rB6e_dD6obmqUq"|D1E+? 0UȚ 1Ņ=)ҩ |Idk $%>KK&k頥,n&azY wnXrGF/'E4:(Db'V}I;?X|̴KV9JʍMo40 §q\p$=o./>Mg+8#Pbqǰ?Cx{ӋFӞIx`0իig䮘D47lE%lHUOgr&I|e3qje&oEζAܒGtaȯt vTsH:b+䷟h`.X.=YKh1w;#'[}C0QAmyx[i5XfhgR'w?7WXN'#ǁ)ҭi٩RNͺnBxN_NLs:FCbYI-+vcLRo:8տp8tFNW5K95/;ӃPh~~f;-NBYN4zxN)ֆٴmT~ҹGS` +Xy,=,m;tDz}PGѓwI}ǓT$MX{ܽ~:S&. +l߯{շs༸Eqn@,$BRdp*˗{}%60TM̶GYI䅭(CQSɱWu>>p +sg{1SF˓\S˄$D" +Lϋ&IVVjNZRtFJ`5(Y;0۰3 w*5Fb%DHζH°0wst>M۟CӹbP𱇯1kR)Svd9X%L6STK;"]^IjH49E+&7Nジxrf{[. XÀX{T9e\(!>Sx}OS4=L]?g[\x/Ͱ/cb:x4[dzs,qbbb芘E6VغNQф ++XΞ~&Μzo<뽱`&AGϫpSf|YKن=Mђ 0^]M]q:ifYARcN{,Vե@l ` @K1 @"!e_fD}^@:FJ ĝTIy{,,.N_r]x#FB3T\M?-HI5[rG% 9b ! 49K\oonJDٵܹWrjʸm9 +M))17:||ﱆ|XmKv$ӎ 4ٖsKR"c$[edaU|ܮtZK[@eU8cyfxoF+ŅÂY\H +HD"i~R-?/]4*`cY&f?gOrⲉ(:Jlj$M2#àvwN6* !t²V_Gl ԕ; 0![ endstream endobj 25 0 obj <>stream +HWZJ}<@H  i H,^ ?3L$)U\jNrsVD)5+׳[_/Þښ%Ejk>RYHhS1]C(hf튃s2C-TQ/\FQ*/7ΗC0k%_Jum~SaNsz&Efylt7HJA_)_rbpӂ3ݵJyr*ۡ{AU}޲J4]s D(ZϲM7kixSp^{d؛}`B30`/DP FUGJEwlF]ΧCXq-E?> 9~ !3!DӰ1?x-S'龆O;Op٥4j. +^p>G&5eK}ـ|`d[{W;BGqk&X!s$<;1Le'|!рKh3W͙gJUsz|پzEYZϔsIʱxZ|IM#fT6\* Ѥe/H8Ukr$5Wbj-\=gFr2aVm.y%a%%WЌ +"L#+i4֘gFFka<.gȨO9Fsf?~G3*9=ɀmΈm0 dl>~ݧK9j*{h۳=w&A̓_t:$y!!9y>'#HY +LuSz0V +dS)ҥ8A6KȼA|ZtKW{KHS ɷC0S7[NKIv 4oq]$h}L|5lh񑺛2/NrDKsja~L|W;tld7rѕ#+OE+r|%Qs15/Vy}yrzc͊;$1BĘa c -ovvG\+aZI7 dR-f@6(AٙH#B47x}aJyuqɩt/=W2a>|s{y)L!yeZ}c!N7]^}F#( 3I[`tRTt}YI>51/5!.N,#K0cSE8Rs e w+^E J61cARcA].G? +\݆ ^|`r\ƞ2w1zcZ:3'>l}1 ή T ^NBX +f_|fܱnA #Nb,~K1_ҹq Ж!ũ4]Vi0 T}|JS gaLtIcr*KQ>a<6_adZސ]>O LEoR&8zlӦSrP\9'/B1h(NXfDs.ݝaDBMg;\{1Bu;Cl}}H*x+>%éfF"ΪS`a0_O=+eNӺk+Rd}LI:oA{ c>#V]oQ՛MRO',J}}(?Z:S8$q) 7|O[̧qey_۷$}zʃ|,tr6̆YHlo|A@BogȝNnA"yq~UxYlά4,MoXv΢9R녜iy9l<6 +W"! m1:760v7ٟJa_^LMV.St-e˝Γ0f:.ו-pG92JG\BDSs`bnWc-Ck{j'"}!K. bL- < []R +:K.lezË>,c>Y9⨅\wpц]41GûȹKNWmr1_r%Kʎ%FcCof[c6ںNhV 9WOmfWTRJgBf $0f6Y?a-דK877`zE[Z SK[[e6d#|*l +y+0F~R#~ NB[qcbUrnt!&FGC)|B ~VE9yt$c(I#fj+ũ +?3#fÙ["8eޒ`WpᔂzI7%zJ8 .C)7y Z7e uwd%n26ɨَ☍tRBM6 a 4ոދ۰q8i5@,6F .rd5v1pQoBW:6QcW0}îyّАBbsA +)rL]^.i¾jl»1lDĢб2C.,گbX%V_y;+IUwMV>(U!,pQr} +z~~K6tF]sY1lbkoݯ62 3|z|1-'jJwH#mf%dRJ(HWsZMFy +lM>&&9P5u8wU:ʹāpWK7]ݕuYMR7R,O6 +nY2tmT$T!-߻I=_V#p;c{СH[eCQ"~J5!LCcG% + ,oHBϓHiDбu +u um ޢe]cF9+cj5[ q9W$ ^&TM;2Z@-j:NZtlvL˞L(jmVYصT-q}һ,"_ߤ}[9? +;$WyFA[=qN6.W+vЅ㔆r9@-eP%&\03X9A8\zGQEz顏ͺ"7^MCr.a!>68TtVmqmOm dî IflA oN@)oCHf˵1z( +B:Od 0~?D@vڱB X |2/9+ (ICdD4fBDP5 +?_OƟRB?*XS# +U5&Ɇc Dj*R? 3.-lrj#G;LpbcֽK6H 1Ð&l&W=gZR铤r`cgf#-~!_?{1ZH["FJec' +M/>̫hm{-|}kk^'Jdnq[HuךEs=[_)#^q4ʡyK.+My 4{Ssu*K/^=7TݶuiSRpɓc#xT/:]nW+pNRtloĎ-XK6m-WMeC3l7GeC+lˆ( 8 ,^ aRpˆ_c!s] 5YMm,4R *i~5Yڙ#1>k&+y?7fh廉[] -Ey$F4֞?Qɵ雍bq}oGj0r-d?͍ɷ}EXﯔ7toa^_읜1W+N?>\ۜEy(xTBﮥe|EwC2t. +N~z(GГ,Tfߒ F~OEV>&>7'2l~Y荾|u.b91ވyaZo5ٻٵ&!:7\GӤT>nRROkgz;3o~zmfoujz쩡LAÉ?NCqzzZS"ooO_[^S^T).OկcM _~d"o+-'+{K(4!G/6WorYeCղw_eYP!FIi\7WWs"ٗo6ER0Q黭Χ/v#OT;>XrgYY,LǼx@’\D}<&.#b}(DyC+u_M=jۜz7㿦z|3j5-}˛.qG/h,wØ7MTrr3?%t?Oc> 1Z>?Gx7bNSDeQ3u +w yq}o^ܙLw; 41axy@c)ɋ7gMIf4:\H-4ZiCGQd"10lQ%B. +˴ęQ!Q 7LP:q?"1*5Ϙ.$,q\"Tkk +" `Jf`TǕ 3,'#rRK2r䱙wc X?dC#{}+I"̖c̎LMX!53C/gs&fRXpa3!I$S0BJK!&t* +rNdXP 3 2!DuY C묯KRg C>RڀQNDs:+5{tr/,9vNx>472O8%/^02UVE}svE($6?fU)$}Bc9)GT q[]>)'`%B ;`Mɪ&ZPRW+XRnZgD&JK0q]) D%kCXHUl@.Tr +>U +碛w cȋ^P"U,_a +T\_Fz +gb"&M'Gyi(x1x+XZM?αR-B`MdKiq2<S-UYi~^cT 돴bĹBJeHtZS #W,2v>ber?sAdL'F,kB(A4;sNuވ!FRqP;jd /hWQBZ>S ӔHhvF5xg*͘PeLIQAt +W|[Kf(%ӹA@thfqa0Nl8Ih` +"+&ST kL$R:C[fAt 1W֠BC X9I2%8?ƱLdh}zQx~:; /87\ iqäKm`+PZ2,o),*J4NUt*rRV.1VT.ZNjq\sBUcRC*iaAgr#PUaڅMyyN,n ݨ-P9fгb)܀HoՊjnxy5. =77p:EK|q76܍oNAZW endstream endobj 26 0 obj <>stream +HWn`BVܾ_@wTؒ y@273™r9Ҍl$,hHvWw.}N.|ًal0i4XlV1 +캍[ؓ +{S0Ԭ?~Αz~OzOoz19~ܬ>~4kqyHMmqYZПS5awj ϲӌnS7{Ьj?1?v{v:0,2ʌ9:Sl^|^峳W+`/zMalƮ}Ɯ|9Ŧ['ԍ=[>כvnT'틻M%e=FrͣGwhp;Oګq8Ⱦxϳ?eu]WuY׮ujY׬5ꪪ*TrL+UJTbHYUY+miR(yJZP*!\TAXW{ks<$s\9N99ꈭmeKZkJ+,G@-1LikL@ijuKN[mJK-4LS T)C+Q(d,e^:iMBr$DԢ '0ݢB.W{&㚫=s8a`5X1 L18%Zӊ4PO 5UTRA9exFH\O0"0 E#*#K?&vU.HڢjƿXqo+۪}C"W@4mOz~pxWh'2O;)A\|Q N!On-=MYFF?QK +ׁ2ap !/q3(28 DRTe] x]?/iQU@GD|d_ ݋orx#;RejKR]eV@ @@ X$X +x~ +&QOI^N2m ᣒB q5F,(m]kp] pܮd 003(0S80F@*Uk&a`fQ`q`W6LH"}]bˑ#7Gv:rґ#SGl N9{b`,wH#GO*~{\DM .TCk؛vWQcZ g:A3^ z9* ̮,o,+{[4IZIVԞ/L(2w"7I2UT,%K0.WdR$yD$ITn݉C'Ճĵ__ KP~q/jIˎD AG2aO0+/јqf&I*I0ӥ(Jbތ8i!\ >svn#tupr& l{sеq{gN+WNNmO9 +9e@'pÈ_a~ԥ,Vw12v]̔2v="SI©S7AxTB{dV1^gV)P_* Cq;soY%.0qXK-wg1\n5ΧΦE~wK\#xcSgu7;3+3kϜx\Lggnry?i +T 'r'g#{D0za[Lyx^É;f_9Йܬ|)1XDđR|PX`sPbHA0àҰj8*vfpit h/ 00 1p*l$9HIiI1۠F'!73zӴēc14&@b)=CJ!Gc8Pq". $rѳH6Z]ԜDR!uڲs   +A= /~<>Ē|KѼT4 E$Dȹz}oMjTrISҘO-P>%u*0VĝMrMئ92Q)i}7[o.F^,)iMSsX5]{fzԈ;&O E8ib-`%V4`e{!71R_bQ_4 93Wze9g>gnܺ<(UN[ɽU^\ۈHIl}W Vлӷe/+o_;ĕ|?Qh:AU5֗һ~Fc k΋{dDP `j{qWF1A ۦ3f=&D)-] mq/##' Y5[`Bg@  <=HbQL +XVl!Z"'F@IO)x1أ]FSXU(sr^ f@6D(-%A^R|G*^1iJS#:BU\`7[;|=diC3lwr%dU,lS3w&|suYC蟍mS|{;ٝU:{©Ly?Һ}::4~?FmL^Π7:l[ǧ̳'V| ?Wݖ[,C5EtBC? +I$ F0+_Dcc؏886S3H0ũiiv=7s;[$C9<|\z_\.xSxEcDFO#d̩)*)# ."bi/-FLFH8]G|g:PE`:̨!%u%ǎ+-7ܹĹ!;B#̷!lC+2lZQ:r=Y?jU'uHUisl+>;/ݳgKŷdm&^qþ~J '6x>ƫ-+ͯ{3lDZ:ӹx&C^x>eu߾?ۿ_S񧷷==us,~T{b9 a{l0|cf[Isp,Jj<4u2I{S ,y8eG,z nULj*T'Gɉԅ"L0IA `IpdLBMMړ@Q*̆8%@e UU"oHWCYYk$oMd."}U$0UԪ L%"6EF*CQH&nR~Wci?AVe/xx/[Ce)䑅C2 mlif4&ϸCd$F\oku-`n{á6ZVeM.OXXlK_+wmp+-,sC򺑆}1d|j}j-;+>^ +I5KڣPlr,feMtU-մި9=Q2N)3w +ȼv\0"}!WfEg-{pع$ESe==q2P R[wd>꽾ڝy1cm7XMI]L6#emִVzMi6ۘRoƎZ aUm;=Kȭ/Ԅ'_М#scbv =H1HI*. 3eTYo-E ګUN[Y:uSY͖+(GXU4j!4]:MRd$2u_o!i,ZӠ@IYmv'SJv/P8U<)GZp{y֤!/Uf?3M~V)(U<_<>炛1eO]k 3gWWDJ7h?kҼ%@^ 5='_ M 9oGT4MѯvH8bŀ]v=iڢxdW]p̖ձJn#@0"'(1n r[œsWD:>P7P7Pd:g"ݠ)qnQH}uM ,V3%O`f^gY;#6}UPkOӽ,ߜP_}=t], :)ܠͅB #=Ny ]ŷξp&#^Fa#NL!қy,!/Si[ey^>۟뿾~yM?zS<? yi>G2\f>#g@C"ҁ]b6ov;k GZ;:mF&UFKZԼvxE_XEj+bL"c窫jZEb ="D{%GGBҡr\j½1sTc 1 Ɋ1>{p"#$y%d z hD;-rd&6gdCW >X^ ws3VmQiq{ClH!z^~q$D %h'~P9sURpSŽ*q$S3FiURut1)={> v˹;s.ӊk}W;n4rș9 ]DPB樁]0p2]o{loBI=S B}//L.E&|:lWɢddOՍ"Dx`wG&p¯JweZP|b3>|hxF_feF{yx; L,S9e[RMEq&( |]E`%FȐ"@F)41}fex&L2̕YB!v:bUzϫx"(OxF^׎t5jHѫp^MKx ,ao)>sVq} /U%wé5$Qv+3Ɋ*m-#SShx#_wK~hn<^cf3ǷC~dlba`ӈ6%.ܰ?7ဴkB>3q%[2:R-Q&0[Jr +ʢnyoۦ!giF6&^ٲo3*f-PzS˅>w?lWt0`JEe"kPIK{]Ow +۵M/ߐ =GyWߣ#qϿOB +"QhBY@s`5C Έ#YF;d+;uI]V:pLk +gwtPrYc9Ex2H20T4wt= 6Fcm{Zddm!}twvA6_2v b0E"yJRoθ"B<克);zc7`;S0"R]0J֖-]7!F #%p +'$J(H2lBD %d1ŲvV$P`Bb .[3U"Yvgg(P <#ă<0xuDZV źVϳQZj@c 0ĴL%5TSN) PyiD.`m!Z._,Ssئt|Hs|3 .A;R8 u`x:*ކ3ɜ=MM_oL~у"bxd|"tDlHߞݲ6\]Dy jr;9S3&;x0v'm&wMe=srrultnAUoIpA/R7rs)7sAA,9F;J (ˢN:7u]*겚NEI'r"7q0a>ǚGіPta68lۨӺP^'^l_|V}r34S*8PR><3'V WT%>žJ]WKx=Mwz>S: +hV8F11x[U])e8~j+j9g5p뛻chhoRg=)&L781= ga\QF-/AE uC>Hx5:0䮐R,#DkR ;'ƜD GD'vdO8ƔQGm2bL8NO8bف/=xNv8$0kxc7p+4 A +bZ2ꨗB,9~ѳ1Ŏa;F7: )DЈ8DUf9C.&%m:vѿkx#7P CeQ,FYGtlYL,]ax +l @؆IgZb`jNPGlEcrN'|~UP $hFqzfcdg4+ t ,ތ3{iFVfέD49-X8+ku-gO.#ıbm2VFI9 ]N>hr24Iw\Ŗ V*fwTl~ÄLyѲ$A-iNbI, AG|? tM}JtiwMՃ̜kX/PP(0JAPr6@k;pVSє_\ZsFoȊFy^-| z6M]C36#ytN\4l6 =0v$c\wT#*눉"9X#4":KWO"ƀf*^L`V+,4hO4b'hBDj5xc7ʡ>VX)J(1(e$O3G'gAm69Nu!DbzxK8b?xӻb>dOH}iX_p6%TUtWڦU7+䥭+Y'>>bw~wTSG/_=o>$;GD'_]?>>pt۷JwW5€B;Yrgd!-aH_qп?6P +~ߡg|CTMO4gZ7o*[ӂ'm\?᱿{xw~Xmqy܏᪽~=/woo} ͤ~B!15%,_(1Ñ!95O" QQ(<ZPڂ S!ƙ0,a_f~&1Sq֖ڪ8ΖFF]*k%Me!0L %50Tlwtyx 0o3@(tRbJKZ#%K(xYWNa$/1.\F`Z?Ҥ+ue,} Gc88+~$$2lWJ")J6jƎ-N{jz'6^BƶT8iQu>PYcji+  ^ qXt4QhT\a&cT%cUE-!rjD@Tk>_5ٜ3u9dL4f*fX!5sSCbw( +mYO8o^a;LgƺD?23Xk\)SXh JEX *dOE.&x$V)(iXfҢajA1o YYW*-29BӺYIgkVx' e(t?P:بOP?e~r1Ć򅌝[^IOAк#eJ9%ePJGP}*_x`:y[T0ۨ_^"}OH1΢с =*i3^ C?~^\(}矾˿_}?Ӗ8~owF? ;F?5 <_?o%$CQH ir +PdZ:.$ַn + }MO=bjbQ2R/:h^HimmNѓ!M !9 i[Μ=$@ZIEQ64";H>G=nb,MQjd]1&X%62e~󞛘-*Gn8#uއ R2x]/0VPipAIvle{ڷ>K[:,@]3`M?&Q)M82FKV9}ZjWHiju}4HD +Qs7률Юzf$I1]tBL F<|5Sck/.Fu0`l?sWֻ4|ҡm^0LVBԎgQ7PnJ]ӈb%$يӛBlgM,|w-q:o#-P\Wm_N5l<%i,)tO@Z,"/ar_\R%i\M]`E;c-d<}!Z;Q. +zpYIZjoB7Jy(@a.ょtH1xǩ"f ꛰rև&%+7"Ncُվpd \Pk鷬`+ƓYOQU3qT;Vr֍`N,-T1|ӪcR~幮Sc>o>rNwQ◃G&x:eӉNχ2JaP{Ƞ؆s l ح75\(u6 l*PE_9WN±6 GÎE +MqxҩQ%qQg# ߡVMb?Ϋ9ĐYl1mxVYe-ӍkylW^D=3i2C-+'0vw9d!]S4]v^UkMqk첞\BqO0CA5a>z!*5up\"/˱7kp4P58jPEE! +MdqtjO=R=rث~ 'W8LYQ,T2r%*D\X8qVwv_YKԶT|B['~˚\MTQ7ޞDIuϕcեMͨ!VɅ\&L˅,\,(ee[ bv +!ϷP>gx_s!tX3 .^*nyG8=lT%YV!wYUUQZ^LAuwǦt R>NJRwN9:<2 j`÷&; +e=5ejyjPL ;=|-HZB%2 <q u^B`R90LAz J6lX+?t4\6kTf\8U_pz2rk!JJc}F`"o1]LFynyHbYsf"m?qM663:33I)|+yc}&C2 БjyACʗ܀ϊv(hM{rYCg$H3>,J`cCjP!7Z+C66(?+i+RawS ЈҦ(+e*PAԣqRQGfʶ0.DH&gE N4gÉ H:z汔擄Ny]CDM_/_.aU~Yg>* (*0+"+EdQBPӷIlH*v>}.E?ɠڌ¿SZ#^SXF +y(7#m-^ũ ϭөY;,im[od4aW5q MRC`H 0HZ1F"$6jڧ89Ϫtp&o`(T@Mg{1duUGF/n]%$lMQjH%'rԚ$Te+IZŭ !8PZ9)"uQw!l>O +0-GJJ-Ok Qg55ƾbi#x{^ xM +UU]քV;grUI4RY<9i5<9Y t$oKID˧M4p,diհK8K7.ܹ mQQǞ}#޿>.O|BRX@ێS箖yN/DkjzPP~+AqΣK":<쪚-b"QJySi(c evt`Wޯ/R6;1_zZUPUk$3WZ)7$lǪNCѾQMYL +$2êkKI#@4RmY$icDۏD{xt#ʿ:=jiQ^C2"-_: +ḝU{bSJIk`@Gͣ|)#cD|m%R#ץI66Ovãqq!O\<<3`beϴB6=TDXK-[-(:V/.}[V6[>6::Ygj̀u gDKP쒹u<1@=1d=>Ƿ́)C4 =Hze&^ ^fǮ`؛)^>FUuF5˿ö<ǫۛ˷W?||X޶pb[-G^#r)ޒ r"BAW+,qy;~|uŇw_~=|ys}w8iahX/WWo~^oo믞Q^zͻWowy7oϢޖ?IYZZj^**|eUÞ'pT$ +N(U)pi4~ <]ϴ꼭6[!qVeH3$7 +~-TlӑADQls^$.(;`TQîm;d^ɰގ1.xo_BL9,\*=8mҵIEn\G$}Z#jx_2(WV|S3ͭN`xA36oN@Cg[^81"N~l&$>.`\slnA  q)੸=7N TXSIAʧPzsPE l%wk(_E~bZ5|",8d"j_`4)/0j&iaM$XjaYY1^SPg&#+va׽^$ ٻmoGmU,>rm2 i:/D#`[.{Ox +kzL>kh#s9&cy!eٸPf4ɚKih*+AlT칐X-kͬrȪeITv)Q!qM`tVO|M1s،ጿw靣G>F珜 9vNRaZOf?w̛_=<|ᄐ{ `@+fn/B5"xA(ylΩIӜX:DⵒJ(.|*"]Dk\r=+8!6u"QX}Rގb z`4`Mq DԺڲkC0_|S0"@vebP;5 }i B=3VTȫɉX!҈]g++3r$)`n!.= AqLRs vȝycT CK yZ$HEN /4Adre/^[D\ NL7 ^Fgݟ o]&?%P.r.IV<}l^[+A ć2% &(^.PE; +ԎS`hIf M?>M'~aea'fhD}b &|#UDQx+BM8&`$Ȇ*2Ým:0wU6 wtwGlS! s!*+Q}ľ?xnbZXfJ99~Ԡ.`Sջ0n ZPeU 俭ILyk#pJ,cd*W1g%",bB*$4_/Dr) *Sy[O6(C? +:codpQ/{c-Tl%[PD7Hg/؀$ N.&`&h).LLu(SQxWyg;PI{QsC ;UI @֖v$|-2 _.7-:3<ԫd%|J;qJ4  nK +Ipy@tϳ !iI=e•͎"J$Vr׶Ut:onYF6s>ZޯhwG˵J̗)3+Oy32yNQBATK >$/*B/ EWnڨ:"[yc+W4r7 wi*$%D +} U!P'MaQ J]k%ד1|~X:ԌfBSC P,MB$wT^4He6I2-R] #A90E E#l+~^YKhHڂ 8hQA{k`fP@[1 <(G0ʪR](W^$hsI%c34 +\xmJZӓ|k}{ɖXMAu:XԕТO.3C[Vd7 J㍐v؄o>~xrbK3h k71x)a4gl /D`ꃺP*BX+"K +ILN,p]|^nT OxN=Q]z*[rGEp Ę@>T]bR2|OEczǖHvkO0i,(Pwߖ iQc~ZX6,4 0 ' endstream endobj 27 0 obj <>stream +HlW;$7<ޡu+]B/be7 YU3 ~v~r~I[ǔ1ѻ΢[{o-E(*S/9/\kSۥUCmޭzijz٥vWWXKxW|j;[W0vxL&jWj~W'kw߭Ju]ǼjHx ‘ٰů +@2)tl}<V=gD6.v7 #"Woƕ +^wb{QeBni +ƫHmVDn.k`zO +kf/vgQ+2Z8~Gw[@,wDj*ry>, h~3D~ǭς+۸!`Q"'~9PBY؄m}UF GHaEB잝/8*‹q?~G}VU(q"-ﭖ-]D 5(,Ԃp⾎~SP2̛_o&{Ad)P4$ lKԺcUMwMV(Z( Q;s8[0+53O1[v^ +EF(a_KĖNDHN"EtӺ!40F՗b-1ZK'5Q8 Ok7ՎXZRxϤ^,ͨ0=i2~*ԢLڈJx܍."} +>"{{~F 9$q+ةLm W^ܕ>![ِ2i* 3ݡJlvcpVЍʫA{''0Q\2O^;J; +vv,;T8[%QAWBc0 IdA(#6 oato? +%ͻYPX)ԝ*Q⼘նJ[`8.Aⱄpsr+o3+ZbnrRjsPmP4ѱы6/ +dDXk`AiDY:#M|QFلV΃6 kfD8iih>ԧA9/s92N͞ 1A#^ly. ൰D{vo<L>|4 +zkf+[ 8J? H:EsC.\b:j+f0vI2VUX+bH a);[AH%mЈ2IKQ|nVPm NʄK +ҳ ;5+#ݶBL#!3>y7.48C/J)&בn@(ifo)ΰ2ZEa-r4%KubAd{|H=)GGKFlCxS%tfl*4anҀcLJ.Uoc&co~2f}@p7bmQB_dQq'WNن>JUpQZ * OO\ym',c3_'Y@͞wW`G{*dOяqS8(WF `yu_Ps}QB^ADB)GF$%?t.uw%8EJC0 +RP,PCtm7Z7-kToIT> /Gcrowz'zn(F\_q]'^[(dw lط^$=H==i9魸r{z0S}wi{|v6w.`Q&Q,˘%˳ XB|dR0B>pC7z{$rEifDGəьh6Jf ?"U)#djo=#e*6]fmv֣c ])Y)r^!%-4'X/c^X B 55`ܱ}+ +t$jO=ICߣ)2T0|0',Ni9L!=Ǿ5БgUٶ '}02a3=1F*+&;{egʮc4S%16@0.T-3SDwQ Ҍ>aޙZRnai,5aICx_sF.ODڡW{ء9A9hX +l{{04U䏅~v:Q{%4V;*''1'&gԓyЊϓ{%M;߽|#6`h,Sno NX /9+빟^sU0yL" >VʴEC}r8W#e'96 D> 4(BD2`h UcOɲs1鮮zQx}Lp 9Ի4'ͭc5-Q>Gyu 4x9)žcd3`4/;m4g_#߻"}A8)3 am;Nj9ߏ5w]1ּ-R61[Z'0Ʈyγz*-+\`_K^8Q(KH6.  v$}CmDhX[7e^+1lE=߿`|2G2l#99wI\ +=XΓo|Hq4U'Pi?0V |PCH 4)C 6VDoC~lzWNa7<[g= #eSכ9ErG}RLId֜1GHxw!Uŝgq/X|k'Z#0cMp<<{2V.xjު3CXKK+xU#aa[ckT<]N#PHV|naB =7 cfs6hFl=uigfcDM8I$I&4sN*8iVzD 5'>ag*^h:~]C-g_,n>?-ſ[8"װ-ee]&TlσhrrP1˜F- 67nxd˅#h4 E1F#-ܲ B |7@5szgG mp?z降']4+٨v8l[^^><|_^{s۫q I?i@l= Y& Ⲧ-Vcׄ=4Ъ<$8QɐIQٱ +]dƙ>Zi1 BpiT7jR2k!/Dvr[EV[sʆh4xZzK iNZpTF"$mpcHmyenD W7%U\2ZUO)/s=bP% JM·ĘyI-Woߥ6C=0]r[ZEdOy\^o rȽ/+8̮3=yvE 巸<<]io_q Rx~ a.ِXڠf1gMMި w@k61U"eҡhO>w:?-~2.'WA6ȥlVu.s2$=;o?R+ቪ6HN@Rw3R'!*yOKcM7I xчf+C$y9"~+ +=&:G' +:Klh.B|BlV"&R#4' `F d[N\ x;6Dɤ`M8Pڅr>Ӌb)L4Bzvʞ+H7܋g8㩫 u4j_Rvj_2JE+R1%y}#0Bfe ˆDTؗHF'Xzx*QuW˙e +ܷ#RteѰW,pO/WcajsU^Kͨ\No,ߍX.9 !jZaʼn7B\F" + Jnb +P |Xqi=٤5hŨ'QKNK +aB4JYLuk5C"w'h"EHڡ/k~ԣU0VQkS^56)=v\ѯZ ]NT"غmd'E.h6i %[I+9Yh&b畃4v=*$s- +=P\)L'kJЩ(g)qUEF"?k vVk˵h12؈2UU4G<^;^c?)P.G:ZX"vl{4*m邆P$Ġk*+^@rZZfI#)_Be,mI D+gujtH^zlW˲]%3ԁ)4 LSz XVߵT*/.~=_4:;䩄F  Ȝ5P7vSҊH"m@L|gwq" {An2"_]lh#3mJ72g4h !'}2MVEӛ +YIN ZeJ #C7KW*+E'X9 ?V]Y U)O@ +ick&Hp⇍zB O-xaz^[A)ޠ&z<Y9W([ dz: iVHu)T!duzcܚ-3fM:ux]BzEPZKJ~ +u|{m5CV‘>&] Q>8 4Pa&Tv) ΥsUijW7fEnVgƖgyP+tecߴDhn<OL6\VPО @CN ٫<ڊ»|#1&4T0\|ӃpNQNz(تpĽh/]`<͛aB!F B6q2v¹#9.TIc( 4`䀩&ye*78*@3_GDtc:耯.noաs] Rt S{pW C9XBh'@$Yn'R6y; W) f2,t򎕓cŀC/]8uI?V߮RX]GK" q'Ehe>biNp:?OQS!r%Õ$SqcMDD) J5evKT&z`EoUYXJtl;#K{6m$drL#r3op[K8H'Bi0B`%!y[*ag80m6MPIanTDˍv0{6m +Bt> H6oIF?-'1ynk@k8X&lar < >CWU +`AHۙDVo+VZBG*9FIȆO^ +౯i]MNAj35;10+HAIϼZ cYf5Q|d4afg*H"ibH+-74'4jGS1B9v:y\ w'WwzrTY +nܪh`WQ|tm(]~'; f +;imMcz椐l`© \iX(AD _q [WʬEcF>.Cƻ$T?߫f.vh+򱢶twyiy^XUojab P񸞚n/fbg۝Lk<\Ӯ֜]o ^cXz?4h&Ǿ,qꦸwEy/&|-*#Љfʰ-Wm+q/n{絋 +6=ƫ +$*jc~>Tx?}jĽj5Ƨ* ,1i."bj>!*~OeRbMMWejQKzMNFmj7SC8d΂>X!0j̴!I`դ D%M X av)ݍ]~9S1/jHDe+ CDJ5]J)官xc8/=Vc[a+69gQ||?x}?^~\[2~v80*Fq һ!|hk2KP $F&%Yeo$`2V|bZUr,ZF.=Rc}!Y"(s(UEwy^^oRc~z8`*V-f lݘ_e1` Q5- +P!jEZyҰڀSz;s0og}gόOtdS)!0#Wj$f聍kC1ٜ6\lFԙ[[tzPNtȊu%)XLq*;%-@*]enqodZbl}4@[o3Bb"o;*D}}S*D &ٻ:f ,6,%=4.>lხ0=C3g:ab-e@׺-DaMU@6؊TGPYul<7&"E?kcX{6#n4+Q;cb__p^7/?.n +|Np=,m<9񉶌Jcr=>Ao7_{`zR!\$SZG5 `W.}m,+9>&&۲D-N-Ynwef8-|;s7P4*Ⱦda渓uBxxk:yK ptzMɏg3 +|y(ʐd*A֥ |z]aյ@|htB +˼(e jwRG@f$hYh$Z(E%YI,X#UGi/"Vy[A'&-$$aONڏY~ 4ϭ (~ô #t; v~T/%?F^<96y7?<9?~yW7Zۇ B u(1$qNP' aߡ$߆:x*hSԑ]QPHVo^ | `P:n߹s0;bv:(a-c +;|aF ^qa'97_?`'ۡNbBE}:I3`T0P'i kNܭ揆M{M} yw%-;Z`.#=§ۚU |j$ +ҁ'-׃lvT- Kј0D(!*xi;5tIdLTR6q1HsYf6W.(G$T$1tZr;}^ UF& ҳ +B4aNwXG bY*2џ5U:3r)ЩAַT6DxTH%rfVe)!mCxz"hg#bH 懾d'T!05D=T2A +AA~Zw(Bqg:/oG4tTg#2ıO6Z[;f$`L4 +Jc Ck }PfgId% 7|h#y\_jHˢHyuTYNC09>nǠcpNJE0s?#lDXh:4;] M\cofn,1RN۔Msc5;[6,c,`YAj$}cFfx׬*AbWCd/HYx55/)&5 >[KQ38k/\:%4pLv2tD'ݩ]}ОdE % \IV_x1o$kql %rϰՖB  8Rj"Êd*veRԼ1ln\|°bNYZ(jEO͞b*"G]4)ndؐxS2@Žbg0j@D *~U(VdRl==ņL ߌPޭO~t5zaP,];2NOeS4Y-oTW̓a[VEn(&IQ4UwFbdC߬n0,{UpS8?V'3RG 35B)`f%h!)&#~6MoڜN V +/BN 6ٺAw0 V*'V:vKqrI F{M""Z,7M$ư`=)ܙ Ň|JVd~]踸rQUycU\d&gp?ʱ@ŒX%cdDT@cSCY9VG4Ǎc5"ޭXuM|UhlNA uۢHJ*kn^'uUy(2_ p%=Bl;0Hj^#z*03I +!,>eSBu^rɫ\t('*/$Kr^%2Sa-]ֵ ?@RZ*WiApp޼a-:XwC ͩL"FΛdn־n[C"fy8J^^{jؗڬ{{Ȕ/>Pt4ن笩"u5Ѭu6O)&,Tj[̧J͟IJP.O?ZJ`$Kk"Hzg~pө}ZOży +4_p\X12mc^94k;5CC]˓C[ e-C"мbK a|z_RhB2O +&>,V/P^2.jǠG f ʷ%14KQK剡Ѓ؍@|\1EJPXQ?rhoŕE "J4s=94w<͡rhƻQ,K]#Oֿa\hRG铥:IPv%6A՝vьRT-`:yA>)h yNgM3^f@Vz|}Ci88;vc \lfM㞵]T9c.":ԘrlUQEddCnAV_HUGGaav^t-e+C&Њ.lQbW5LK&lno.0Aj[>LY9$h۞~-!ɶRy +oc@=O+:^nVU:/Wǘ*:06uFQS=/ +&y\e^6e$i˭T?+y'ިsJ:6[ꈣt%јmѧ"~jcC ׳ebՆfBRRVdkԬ(@!eqX0mȠ| ~/iL]h] a^U~Rd3b&r%sڮaMJwL۲(q`Ljgܰx]/; $ TAIUt2yP]H&"sMS"fH!̕e}A2;/23jpfkt˅mؖnƸX55Yvz4OdiHm +D'gm{%[k\%$oq6aA¿d:ͨj=}DS2S Qb~2y +1p޴em?mٮ@x* aE s?gK+ڐ9BbӅHa 8@,yЎ8 @{8#b!NJH]|W4 ELl-?)dO9~wfÝ1iVbsA-N9 w!9mכwZﶁF.UQzQg?G-tm<bT3]OUU7 qokcl4 ߿[3:rkTvPi 0^LC9ekbceJl"6+p$镐r6j\)c|XvjɅm@6L3ll:ԙJ xuFR1$ܕKy~6h :POg̐EWFg  +rdΝ<AÔ0[U=qIJE&y*ݔh{#VA|+.>yx'WD +DYo4$)Ӫ%p512k8VRk͊ʢ1& bm;u '̏%눯R/wڌ=DU7<`۪q{fﶃl@<<$NÚ_X'o,`<{J +wqga;tfxF=YucOq {0IO4'$tdYO';wmo|~TqN}`MdZ`R!m!$U4KMw9m5KLUإѫFM(ԯaRkƤKEG6a5~P+#؅3,Tլv:Jw:!-3#Bi Z,бy>[kkCu&]XUy_)G'BvB !9t TIXB^7]L8tPf4R%M<*{ w znW~>VO9>Z~; <򬸫!*FM;TZNJNQ/#0דʘu5NdN.vvpme ?DBcdA=w}y{g6/,fQQwDZpWO`2APsU4Wџ$3P4@"THu-T DsVXɁ湊^vE7.2g[FlxaPJ~+# KӾ1j_{*0݅|y=Bre7Qvy1TNʜ ϛ[MyJZћpY۫7DKo+3 je% qTmX$vU?H<ֱܜA*.p*62DR/v8BgOlri7A%u)m.(w%ڣO17qaOuno::;BjHp1̷BR Z_=v3Ml(zn990/M4!'fЙɶ'cu3SecQr6vNu`v$,d9m'XmɲLgFցD\~vkްBi7Tܓ˾F%sX\AqpOIv},KnkSO,=񻞓RkXdNQr:Srkx;7oifMU*Q)O{ ?vt]WV}CD.սcsG3Wla@#U{<1 +^p36FSQ4"$ʦRV;+,A>Ɖm=3>/6yK67ȧC"9Y!#3k|j߿Z)Ky޿~Ż.'xWwo߽䢿{>Ջ`g?O߾}w>zj[˷߼g\>/|P +nq1ȗ'O/_E7%I77β~qeR}#sN/Bugy;t/DջLؼ)hj{U6Wo6|gR@_}0c D 3Bɟm~7汨r ૡ k6i;uDQ] %dF߶;XVV8i:7 ng S|+]ڇF8!Quw2SJ8 \UpJ>)ĝ%Wn2oe!eZ^{;a.̈lGE F%U+Fm(hXRP*E!~J$^Ve`2M2ۻs=>"JI<i{k]0Uaf5﷩jUݎWo[h#yw2'\d=뵄ƞ(uύSd%F&A2m{[Sκ-/v2m[AiqU.?!=\7LlH+țpm~F@͡wtB~N+ (-IECPP=EOa䗪vLJRGgSl8Ս޿U:BD7[[O?߀ xXY~>DhKtY| z1(e'DINDQu@$l%3"y ydr. .3y0i#= GϮ=‘G1`Sp$g%i#5Pv<ݫ;uȃ ټL[#JpxT?VRitsRxx'#)GrlG<‡DG%~hA>Q68%й5ǁGUqy؄`jrXcnx9'į 4>+5C t4@=8d/Ľ &Zl-B +ra\mx,UoH/.B|tM;!Iwd_P{KVׅ,G2h" i]4rI$۪kdԶT)Sf"ؑTIV[VF?Sʒ'. 3DLdb"VNa#H[(L@lw/=>.-=AJjL4lf;D,P;N`jGl5kD%wRԴDSPY@1~dER ȁBZl9}/?)ǠrW&P.-bP P@y~Rkf5#pyI}[yTI ˥I͊bc)*/İ:E^bX)d$}m=A.VsUQe%CcK.l9zm'|hIj4p}X׈hd4>z.CA2&!c[AIl)&ѱ@輬0<LCO1J~\HtWK/<3BlQ"4J81 p%P;/׍il3x>IF Y "ck51QwfU9qՏFqo]J!.Բ{ *~8Gyx4yiWO6NCHlI=mQL~ & ?"+NtCJ 2 Yz"N˒ W`gA1VHiɌ8ח.1b.%y U]U%/ۚW,'#r}%)}cC9q'.ź|=S%Gd}K$j1}JP+71+7BG+%nrq2Kk+յO0djjJ{{bH2o8oZ_B ,F>Źs[$P~rjx _o,YAׯ?wM~:?zt~.ȾȎC@*o +hzt^EH/=_ +s&/, i͇:7M |쒘Ĕwגx#uoqYPE=wPVhnI8=g6,J\D<<] H<pqWqzdYk$JDUwU,Y$k\VxXJzhI檨.XܯL2k'ܝrA+O7 cdѣf;&~p >h9Il'?HЍ*$G59C3z,^!( .:bIoh8ǃא_"'8H!C0N%ijT2;S rZttu|OQ4ƹ +uO^|unkHYΆ'CYCSGCg:2껳%-Pib +/Óڕ޺yoe[#}!A!mW: s>+7 *mf+TZ%:= +;h'=,x rN;$Il$A ^w,+ -uNJ* *.ʴƧwrrYYl^u p֗T#(nKԢm>Asu}~V_Z@(̋2XEWiٯ@H,[@TGrpR%btN.=eat5T+Jg]TDI^i+{T$3 +x4 YQ# _eݡ:w=/}pIY6I9 H-2Vnm<[.,(F}+AaEK@Žg5QS ;,#B>0gםgMZ~@9Г0rHqye"O Q%&nի*]u+3 8+>cwыGz\0(չcw)7lS,q-gZgi(%.ؑvLVĴYfv|,w(c?F`0|i %<v?/gȜ,=XR(KJV$SòjF֡Et +&i9.XU;L)PvU&ՄEo5 xzV(;t-m Pշe52Y/%?dt=vS"ƽ=:z&n@e&=4(ۖ +y C,ڧ[UK +G[845eΕm4n{,IټLٴGdWH< 'S}Ȼa],KX\KZO4ZB*nyNrGj>[%]dz> x?]G!$8yh*IR^4C(*`ğ4wk($ eFz=́%chjgd +'(s#=K +s8BHQ -Ju7 aX$>4}wtUEeVt}93 {U~٘bǨg?D 1&D(1Ӻ?xbR?c {FI,lY|-';R >[I 0@To\1@cq8@0W 7* C6\*e27 I U/ Fgn/ UzpUƃ3hFR[?JSz/\8OmγNpԈJ\ !eqjql|Vnjt~̮l4g{E>[k1XؚPh m^*-PJ"!/k/d UR_n<;Er285OqkIپчȇrzK9A2z2 eI8Ȝ0&#OH2VeMk:! _pЀmP;&c'lpI<[06;҄ /{HPt u5Jkz@ F6!Y;uBn/>ل_0|ʝ$_gW8s0Jሒd p䅡4gm,ft*.'z&T[ӝbNN}D}qpۢ LC cL1tYt(O$\҆&ٕ?N2"pN~QбEYf?uVY̙P N!f$ySk22)_eCt)\755@ ]~:f@x, YQVӝH+.%`}Sw>#K8$d%npv%q{Hg7t{7m0پ(V75h7&05=JwK(]!e;U9(hX F>4QZ"lZnyJ)@!hW]Ԯ%*I d1rv5:`khwfpׇ E0QaKbj)@Et}cML]z%y߮zDr'3xAWD~o$#|4m3aH]_ǴUE6l1YY\j_w}z:x̌}J{JY Ad;6h"R69]ABA6OVeT/Z7c?jqfiH7!C`.2&Q޻%{i%pO4: +ē.<($cur #SnٰvK8ѕ}qZ>[k=6CG 5+[lxKϗYÒP0B$?f%E؃j|,̞`Tg 5 jI17̲6ϔ{"p24]1"; D9&w$cLH@SbZ D%s䀧^`'F 8z1j>W:uٷ>|}wywK М*PP8,~}$n1֏WQZzCxĀPEG0r-XAn3)1<[X/2GH+>LJyR[܎*82ߨ:v˶REN 7$deMZr{Y.P>1wuzs܌nriU0 ż +d&Iي4MU '1) X;z &˓G$Sgp>SQ@[{!ϧ?O_Dbd~2e{d-qDE_=-|0ܮN D)WW5pX'.nB2_)dˎ*WY8B`bdGgTrv6wf//ua*m]cqAɼ[:E>}1l2O_y7 endstream endobj 28 0 obj <>stream +Hm\~A2Qt/'8qqR6L;zT{gaCwlUwuu9sO>٧Zs*M94/?tck(B u1̹G5C#^9Z5ͭxg[ +mxn<;61PAb;]9!町<*,4V­)>ڵgS!)ceY7-\ fSrR}Xq,e2{>>:$vZ>+;K(9/gI;*iƻw?Wxsua\N8tؿ=?;Ֆ_ݗ7ݟP<3կ==^_, \<^oNg{P *݋o?[?ѓ{|rq߿ؿ:,Ӄgo^~)xںӝѦ-$BMo}`_^s|HA>ƹ7'j\#ca!D0X-lXrp۰2qR}+ }B$1ɳV>HvuVπ/^ FA9kPAP^N!zZ#S$$<3>&eh,flnY +['5e^2ٺ/KȵBH~AIICq|g >GH-0{!7w,fJz +Fpi @)ޥW<:+]A§"ݠ'ܰԨdDBRq6sKDI3!0x. F-s) 2hVFPƎXH+t*POWehl@a\ +`l@uskO!zV mKD$BJ4խZx+2r:&q`(*:!6d;fvvna@j! f6#WH[وfs KSQ[c.M6` c-%jf@as(4mwzO`rK -e7ZUdVc@A Is$5@o(/CuNG!3GT@u6q2 HIDn1G9ZZ+)bhil񣣱`xClèvŽ,t;1l4vICF7 +3)h EAيcВDz@m9&C/4j7-<k6$l'Cw1"ޞ@+M"* -]Y-ihjDWe ˋV1%p+(xТ`}RОuJe@E/RݙsX/݊#J/^1,e^"$[, o/"#o]cVfDxV2S +{(l{ N5r3 q ז}L}k +חc9.: ZOyڼF{U-`ݕ_T (LDk]h杶vꟊ! Կ1 ~7k23*w*YfdwT犆5h{@nmpT>:fTEĴ!@WsW79Y!gMH[GOا: F )Q)#] v Ε{ʻWaN0΃<0xCҪD&hx7)F]s OQZǗcf ^TsDz~@޽hgΛ,a'٢QȮ8~BLG$; -&~M+R=fJvx)O0$( 1u䎪5Dhh`VsPo8h2&iK G!`Ofhp^rďHj^g?Nǝ8fUzIfX Qehڌi.=Krweh)[7E4)5)ijUk7wWu(eeNS`5(v_V>r8v 3ACAkZ8ɯzOGMhDmW֭ms ";d}Q/7txMlK u ϥ@FA>&V_cEs +7iR:gd?HHD +[mSr!Y+j^egWsUQ72$=YY#j)8 QW<[Ȱߚ{KRdi#QJwHs̋6qޡS1,:Dh8*,MHHTK&lAoP2KdI% A<_rpavm&p$l  \ʱ[F_+Fju|%&M \ u(du3=CZB咀 +i(HAcCө=` + +e24NBDŽ\nn&۵fwjvg:q&^P|t"eEe#\CҐ, ii}z?~斖ylތ~&q'<%+>VaQ|li^!hs|wx:ziTf@sXˬ'H1i̬&SD!M@OlI{&’2UX5ONVdpGQ6QԓaYf+RZ(=/mՑT(@uN#i{ntuu ^'bU{aVKѵ@ov '4YFIr iҖ +MHa\TݔKӓjNyeUkQ@"V .֛DB[upH%>ACޙJH,9|+Nccמn[WنD8=HGqM)B01-&$&nψ挙IQRqBC\X]~r' Zx]%,jXgbKmLzMXFdbgK<+X6r<ܒ}JQīuS&zG8m.$`AG]%\KJWS muUE;QNF*{ LG+;.3Q"͗1 c R*xO@t6=1'yL95ѽD ۛ&omLGL×J*VzI_}w?O}?Qi)~|||_|/ǟO?ȿߜ!I=RKU/xlN +F&ɉN6rU8LJ|űHd|0FL-tK( }Kڹ\8dr-@˧ig5Z\1=DI{HL+F#<1\TU꤆\.Xc7t{40і3m}9[u<;?+&m!tXAWM +iKԖeRЬj@k3dU.kCu9Ғ2YMqWWbʊibu儥nֽbBUW탛2}n_^WrCK& !/@&i4BY;"%rޫ0񂘴`1="hȹxBG:ϱk ʹGi>D҉GXG>7il'DJg d(EEs,4/"'} h='Z19c%GK8P@9v&(ESژZӫU^9 HDžJ|@v +9D~D)PjX·m#U>w%T]NvvZS -yȟ`ө нq#9}e,HW r]rݸPI,*˓RpF*fBNv!֨cOEmtJDPYlյRk2PD2n>]߷}~T;&9g9|_]R8t'(3 PDm󲫹\EUMa蝹N-yǴ/{)hNbFZ~d鐋td!j2R@^"RUEhNf/J' (C kB{FaCުkGީF%M8bzjhiUqzhD/[y\a̡0xMa:d5rGvBc#9ARq^piA|B6GO8LMR0At,Y-l(3ѝ ?@I/=+ƀFF=eDVV*A _2rY]x = y,AT>Es +$ (v8q<-)?`mFփ3 ΂eI՚wj!0% J9 UEY)x*,r.QN!ȞC\ %O#pD>֝FEX&P3>˞E,GxF 4@}& f[z!>"٢`_>sNK*E°5BIh˦zS._ @lV7ꩅt$Xs<"8"x)D ׀.-c҅G'DnX?,zlBHxe(ES(cVU +Kzۭ|TUb%#u1m6h_&bW%Q(xtI'aǭ0~{F^-JQyxjy_fKh9WUxEѣ1@Z}9.YhcމVXwe6Z(eg~32opY2l;H>sM}VN{VکwE$GYKIkB.b|(%c(x%H&hyʖQ -~"*X.~'7 +Es Nx X+<dK(ٛώT/:„5HA[{|jkDQ"nN+G4HHʬGxDwc N0Xg|㭜Aq*R` n/$y*r/ZJlLt<0S6t:F,,q$G.V?a]j1;/YIKDW@Gd bjfɢpexfP8?4^({^'ށ0BL a0nݘf>~_V{_3_!g w +@lȋ%f:ͽzWn[@Px.8a_uډ*h;6Ci@C+J`otEgUk\>F\Obb:yCJI:%yM"9IJjF[y f>O\ 4WP ҿ~u(u댭^.=Bv="d +ZQ] 4)JQ̄7k3C Zn- +2'$A/%Bry~{ː䦟z<ϫm +bG"|'xݨh㳰lhs'LngHEH?e~D:)hMʣKaz:oC-s4άFqan务[Dcr)΍ϜX8qtTJk̂Kĸ>;<s=K p +WՇT#d^! i*\Hu.*y0O +xa jv:vۇ4޽ΜMmx[z"%qKE -zQz8hQTek|%gؾǫ f9T!\i5]1főOʑs8$3%"@IwVw[ n9d _ۯ'B/rQEW/(W}EVBDAoƬU{ +EH5vZus~IBo>~oׯ?~~+_gzяww;?!/NcC4ZA^K~<_2]hɹT~K ߄9y>-*.U .ڒlEYR(wIYH2 6`$,,SW:e"͇GXp|me ;I a!' +pvtbHK,"!g-"3KճcU݆xg1X:D/IW6ՆZ5@oDyaP6,Qu}/!->x<_m։ԣ*K9'/t6XCyqM?n-QXyqfd@]G*- %57q0Fw5s{~\y`]cI]]v:X1pzqC̏&RIjû"X{'zgWbѽ3 w,g mx%)OUtJLNlҍIY$E^1Bq Veo`eŸ>( Zh# kd)qYXR?)L/Րs>I'foK,s)"0!43qIH.V|Tš6PAn"`#Bl\8+m#o$ۖC5bCGM h)DXL2¥3Q[#~k*3[b4Y:C0Jyy@HOD4sp +Ǹ3ZOnjg;")2D *LRx1PA]j{~lAJK]<.\ʘwDf)K2+@({rH+JuF V$sndep#b9}፵LP%9?-0\Fڠm-*}8+ ^Dǽ|El jA ρNuGJ/AOs : eí1!]4#kV~&j+ +BsEYR LGʅ[LQYM &%vؠ2->|CEeʙz!X s%X> ѕ>_|@JyOyj O SB * ASFq}*2Q<~yR05m +Ab:2{}HAT}z_h֚: +kq'I|4r1!Ur k"H9j3)G 8ϝK3Rڥ8)/>vJ՚̼ +"ޓ/;i\)@l' +nb#.Du̵6 fĚ0qwiaab)OS~ 7m;Q兊$̈́/qu;/r8jW45<ŭ/I8hII&0bb)#J/P +ΏۼDQ՘: .|0N +g;sID]Z8b`'ﴰX("KcPKKproOǔF7=hO0)K;UzJ4N]CFmFz, : 33-9힣 Q'֢cK"P]>mZ<>0 %ETj>~xt7tכo{/{>}ODtBMrDl&_ZQVޕ{PP U*h;/DK!Iސ &t&naF7GFk"+UhgV[lXTM4v,4ZD1-y='7r48/PEwݔ8Xe8v ,'Lo:^ I} gZh )f̊|fi͔ԙgE25g-CE݀BdM8W\(IWgL& qQap+Q9sDd%^f%|S7!QLu+'[nU: XF4(i!ddɯ3\C:!)V9/hfi,n1Le}RشOd '콩DcAWOʁ+eYljBh W3L|/->Ě\֜J;BnU 1{o371}fǓ43I=YL {s.CX/JbvFM,ĽQ *'jviy%45xBΧQ O`Qu\:(!"O(TRJy(qe吉6J$9HoË9i^ӂXVDQCJ +0;'b@ֵJ_9n{RIԦ_=Kņ'8@U՚J%`.aZ >n 7nI-wd5l0zczظc> AhUQ=䲪{-J;/@QLl 9兦Գ2Qf֬g%uCq65Q%]!GO +T:F5b|-rQ޵ rH*L ɢ)ȝ9vYDn:"8}o6ꋬHPP`cKiWY}^ +afq(#$9ʚyٻ-Bj@J6$z<j ͊48lrQ"_JlֱpJUL qD'|zōbY/K&#Z5L0IFfHmE=lZr.-M\\_Cm`~FEcW#Q|iMM[ĝQi`9&ڰAOyI`T2Pq 찜dMo(-Kg Hta\,2p'4 m!ccpb|Lh+-ͅYyB,Cc6Hv(w}\F}ϣOIRQMk| +CsCBݷ' +!T8b㘖&E8TXq=r_=iZ`­񌢝G6qVuMrD4lWUjI^$ 5Vyy5jz|SzSz0ñvq@(ٷ1#R^&-t[+wFjAP2P!Dvsop*]SޫA nzmه{PQDTX?I+>_&B o<_Hy7T;Ԃ58{ <><1Cn `w״շK?:`' ̭Fi`^noRdlJV-k%߹?YmA #o@Iz|Td/LlF{4E4"^fg|rԳ&TTR88D%=)\IQ} + + #@љHzs# ~<&U&aE64B^ R(+׋Qw@*=Q[_+h%&KGcyJ?UQ%nibB&ALE$% -Q&וeirIt^. mj)$QFUW:nDcr40VH+1 ХwBV;Ӳ!`OZ [P}XmGq1θ^͂ L*rUw;Np${eW ʘqiI)T?K}^FdO ;5+jɬ1iqS,Fi\ؐ/sߞݼ n`kDv]QPc=Pv$vn,y +{[r7r1H$ blngʻKka8P2-”ܚ(8Pݎө=nµAǺL E=~8^dݘ +Jpo9MIS"BeڔvVIz">b Q>FYxiK#)}lrE-Gt?/OJ7pK?}^7#$NA󄧄w%c B*T61wY0;<[}{ϙ)Tf@kXˬ>'H1iyϬ&SDd0Г9$ញx+V͓d47l o&hfXyDYCރCQ#.*3Q{KiR2R4T\SA 'j5sf`Qy3QYF)r iҖMH̤TLN:S^YΪ2zꮊ@$[w~_*ni9oS1o%yk95`Tߐwzb Y6ǹRlUo|"%ReI^u6$ +ʋ1/ Nƣ1l*Ĵ8w}xFd$6gL5!u!tY4%wr9}ɰ>EGP ƑbWPN/z +y 0uV 3$yAg7Qm;==Gr6N}qU$U}q +"-h'!#6Mxkzb! Bэ5yb&)D#9Umu7CܨD%N{NSb76]׭R&Ҡ +M/޼{>BK޿'_۷~O119$鶇<I$=)RPʮLx% f@i=,P ^L^7s Q9W\FBSCP*sy7 :wZ:"Bn6xHy'*jFCҐ|g_CgL&rh<2C[>vgtՐcǛ}/+&m!tLPt2moWI!mIeSv2:+eqS`3v_kaFZR沾P{]Ĕ +RƔr҉MTZPt)P$mJF̦h G| 4#5[ @}= + +C_Tp+gutى0*M!/@NoZU6"%ؚ=5mwᕸPHFn"sD"0&fr:Pa; ˕|B(ލGJ}$7@2[ۆN.29XꉞګsYmϓzJS!͛_x2幫yrȗvgv'W-(Y[>0 Yze/^pQ4XDUoi7Wᆊǜllؾ~8;^$}ExCa|!7&v >V,[M[t-d&L KfShS$wY];'zbDw{t(နbjf*68;]&Ǥ}3>q Gv]y|hv8*/_Cґ4\`t&Hb0@sBݳaʞB+%}{[|˺~h@Brf4rkH:A FJ'<=@)̴G%$9_GxVQH WF+PNfῪ1QY0-i}JVOYAz?^}V.gD|S+|N jR +te0^ 7xU`uBIQ 錑 ƵwVָO'7 +F5=r F\VsECrt(#勾NTLQGD +JlM!A;B 7Qspt%nuaQp]z;']9c۽@ |EEs+JpV*( u'6B~0J|gꎱ gÎVtݹzYEP}V{Tȕ9+{X`6#B@:0 >CX6fc(6<8vP hnc]꫞Aʸ%zV\Z*tI/X`t)jb>!N_³M".C$$0qsC<,F剩H|UbYBݨ*js'DdŌi]?0t' V$>v8:Z vH[hf}j;\WLed^R-͍E㷈TKךsq?9 >g솞-es$ᶈV04>@17(\$_#3E5o0sW]~g@$.,>ius [q+(Mwܠ7C"1Y%CNơb,rxO/!'TeROg2.廏_?矾?Yk+ÿFIw3;_."& ×\T[(9w +{ O@R`S_ +Ə3ZNWQzHL>{ h +Y_ߟm$bkqPU7;*0׽ۂ"ѽw*yW `dwܟ2AHGRZo̻ץ4yypE{؞eȍָɕ.s˙הݜOŰDvj%(@QRFjt/S\aFP[=b=tmz9L5i@B&%ix' zB䉅TWI]lJU_CwxkL0fiWm0"X$Ev32ڄRナ2$ uPhߝ=sy8NZF̿z5t[RoqVlP8Q҃0HH4/#DłْN?sbx@$ +Tida5ƈ Feb=ؘ~VT2_Iuxeʒ" )oA]؜ªf=Lo?+fꈚsdTǦ!,$^"hу-=\x{ &åת2#8}kϽWSae٨AN+˚p]5Z*FS踸DYf"sZqWzD;wʧ 5?`aDY{_HlD5찅bZ\*l uAb ٶa dH>xgtuj 4OoSЙ.r[\:n)sAlot2ߙ2*GAL9kuM[ v8+nFfIxt;ZhvN\b dݲc]J0ZREZ4I5/3+Ĕϥ)t}ikG sv>(D%.SoS[ќ~FIhm2HoqVzvQ1#EJ t>-i +e^ C /oTyX|ҹR. ϝG]*9ko)!3ŧ3&%6{p3PF=+E:Wp~g^%*AṀ։uO*P͖B@"%@F Dw:>ky# +v|jR|@\-%}Ҙgs\LGLRcӡTrF4 X ":vٙ1FTO!PA昁U{v?E){Rܦ}6;M#G\mWc#=1/ucr*ڹ@zml*Ʈ2yy$:+2[df('Zt&i[ $bayJZ/Θ'AMr>V?PIaㅵKw>dpnin>A*R'cn' xUj,7dy{ "|PaHFğ1հzՀ1ŋH֩WBy>6M=wBY]_DMNcu!wi_+/$>ﳌnEӟR8qA-qYg&cIW(˭fz WAcOJZ*@E*E( ,{ ;Ԟxb{^k͚+IDؠިwx JvL eAR$sib,M|Lpy7yO.U-eVAvElYIxY=Y, +e\ziתu Ph60sz>5QP9n*ت>5Fߩ:αm]$'նILsgHtC]~gWmNuwbtU*K{)ڜbSCf JV W-3x PHkM]Q@OBD}׼ςRhgg~w@h/J 1u܆Um @P|:f_SAQ$EinJ89 3I$yXփ _ݓiMD1 S}%/%&|͒&ĉS;qmhL]އ _9))Gj)awЛoV8۵tݪw>c+#>$lȡ (H-qyFQSER/8c ڽϢOJ#SW+c8/ Q(mXUC&z&vsTsWj3!nC@)DyKW=pK, _`QI̳CUo@V.ѧ@5I.+# ]9Cڗ3KsЍL0>D|];IΆMAlrBEurh|aZ(=Iv%ç7޼||p:'O$3ϯRd3o;}cL#5Ali&2h(vuEm(vy9b>IDf&Mܩ*8czS;հE;N)S:kMJ)A_؄#2/5;pNPt )rOAY qG3L}*RN4 A6R*Ϭօ).#%8(ΠJ]Y"t@v{RŪzyg7P4``8u$8M'"&~kRaq}`K%-ZUH?(y9vCRB7²2 0g#t8Қe?/'ANwQ&x.zqƪCm~u 14 +b܂A_"p,bw2ؓ/_Ԭ|Į6K1*(V2 ]G _]SF{V][eK)&; &68q,PYzotW*^9覎N` hQG;S!yHbKmM¤-Emy>?q7lUyO +)O4UpL@sW·UʷcR+] +v8#HhPJvFt]D+ܒ`ѕ"L iC%%̋3ZUPsB%̍2hom'WnĻSJ:&YV}H2|!^µcsz‰dH5FcSov%LUTpS@ktPe]: XIOU֠bMwY +5lWlMf@ONDgSN5ح"!66GII1ei0^͍ma^~;dOqFyYb?J$pt}TY #%qg[)e֤GmR_xXA5>[Z*GQ@DBV +{۫X4Zk +Pó.̻&Ιt) +*._0^pM$ +@ |f|PۇNP*R 6ICbAM B1j,-MY)jvJ,35K8tM߉x X6]g_[J6/#uɑC9?񡣩0sDe2Ҁiu#BBIHlTf~W(.[4Xy]ʎ.& s kk/}\Ꮅhc$ k&E>q[6k57Y58ֺK^{0ʍek%Q 5@b9ԑ#̢2e*ȈZ. ^Mb~J`9Q@ڠDROU$C- 9&GkKʒw6Hdٱ`KʖgjkhMAZpįKyq>1BQM19T&5djOX7E` ҍ{٨Yb,R=C?FWV9r܋2PӭK +'. ȧIuQP=JULh9a%fiv=dѕz?B(0,E<MhQFbU $ukLwaS"\UaXŽh&):h7 +ma9Qt}JMՑƏSY/*AxH bdHg^aMkgxy a2omÔ^/rX*pW+3WϾ8fGjn3ާuC,' +iV!9ԂsQ_<}-YHfx*s-"}'uV΂ΘJvJ=.}q˞G@؞qI?@̺*<%=_4ggM; `Y Kd dN{pFYF:KE#b𰈭3c4Nb/o-GS*Ct\C HNwS :X;4]EۢytTJY@Z#*YQN"E&?LR 7% +'Ѕ@jR ʖbBܻҴK4|tڒFo%B E. Vc.3UZ߬Z<DdZ{(|)$dT /V-O,e{nE(V!~ZUwVp*zZ ⣐EjlG<.h*1o;/bY+7PhF5_έJ >Uk;v?tUFAa>Tl=ڌJ)jxq}tE9YP^"}7ǚ YG: :3yH7O1_=ڭ| TkQ z>::72LM3OϙͳRvA5UHs+^TRK ߧjE);Ep\gY4W:n)$VSbOVr[R>\YzI ,Dca&Jh-c2D9~ˇtrD+Q,jIJ'6JouX%Jnmr_FOc>&M 0or$nK`PaZ'^n~S`GaXׯt1XQ Jn9:IF"ato×<ثŷ1²JNFH +%A_⋭C|kX H<2D*/y@ILMQr[V^exԏD/7 endstream endobj 29 0 obj <>stream +HWˎ C_AŇDd{ Adb*R=;Wc;QbˊKV#u_2v}?'[s9;]{<]3N=|]n;cfxľCg:Nh{e[ʺ6/u,-miu nxtq>y{EG?x{ p(Q7լв.]dm +f~Ow\@̼%~r[\@ V+*ޞ~^X {ٞ [gVZW5VZ{ȱ Ֆ)y:͒'<Q"}$ bJ,e:ܪO5M\@L˩(Rǁ4MĤGj7b nJuP@: m]MBY +Z$23L^=ߔV9fj$,3+ۈjjJ<ĵvo>[TxsFhqO?gjtuO\wÙBÙHƉvsTHesiΨ,n +ģANfU5QlzZ6X.<j]Fa~tU~Zإ%028 Ȏ_AGOe8L!a؀E6 rT]Zg6_`K)a/O^_TP2__?x}7_?k?bw#AƢxvET %y"G߈B/m  2g۠4 [fU^ʰ Jsdy4y>eJ+DC:?+>{"6br p4&F _miQtH:ͅÂS^Pr4X;Nh zAf@Z,ZXli0n6 ٫X0 +Au>J( Qnh?J,5Sæ' T2עLE/pg\m+K-ȡ`<9د;x:q`Udf7*2=խ}Z37eJQ? д泾z[mx1!s΂/ux 'eQ Rш#KpnXԼ0U9cKy )a,tA}P|UMi1R7{9+>֙Kj-q Fy3XH -)e + <~4L:iKsE,ՕgpH( ^=?f94OeP)`ŽhA8lPiƧNmyHڪ2-u +S։1ctznZESd(44C i,U#~],QNRS-:;sT£zd2ϐFF50"Qδ{rԁ޴A>%vvQidiͻ^i;VQYeC4OpT) i eA= +`)0exRʬ΍:ЛP 0VpwP@swīZ㭹/oc=`pa֍"-+z5/?VC-lu3 uԴ`.g&& :i]5c!B#FpDGRy&um5XW|x(:RL\B1j 󡇖Aĸ1cP{RQ &[8ǁ r1 q/PlG `Ģ-N^ELW\@v +MdQxFf{B7Y0CicVV>8ѐ7r#=ㅶJO?a2J e7U&>| t07n}.VW[NFklʎЪ_S@ԅY=RK`#OE|S bqNJgFIm>@% +Agڲ3RYd{jn6t muƽ#34a8f*wuu)B_ؘ=}t}%[BQT٪YcXM`-Rt? U4ۯt4ޡ&L1  +Дf*ϒDJ[Tw;HhnhԹe\Z<)(Uj2v9+EХ84 +M+΍<yma[V%l2?-8^Nj9VA8K D ۈ|߽]"HJ#*")5\C@4ӈkF=yFMgCޜԶ *N9qn嚉rP(޿V\y2}n +dk 2B}; pYkFHo*^zS{)~6yM8y@9xB]Ӡb:#.L#}xp8t1XFHslz=07:*|{Yވ/G]gh&:OҔ N^)]fY]3b!0Ͻ&XШSKw< i+ t'% ;W!MqFjb7F,ڷED.7R o1h|3pZ 1茨jϴKv&5t J#"^)h/g͈ݲ~$hiݱMhi>QPBFċRy1teÂOaiu 5x\D #1LbE,}mq?n*U'rD"*n^Mhh`\X*]*o)U3R<ҶZE:e3]h/Q8SK^AfBƠ1KN.Z2A#PL hEH龞Եr]>B&hY$H 6IZdu=wʉ·`uJåR׊xD}0tt!4+jf㯋dߎ1S}zJeࡐ_/pؼ=uR+#*~y3s'ԉdYoYtl琅>mO8J ͸O,l.ݗ7 +1!$c\l&`HZ{ ,D+b(~!DHc#A9ױ$]Oy2Z0Yj ߛacZ&tm&$oðïARyޠDP\D!24a/b >ABoduIʨW}_~7ݾ$D}@c]$z\v ǵ6lQِJ1uNӋӒO,o\ +2 +u-c*:On`JA"2I_l ]Gݙ2v7{#tz#-bzW& UX·hRKF8='$`h^UkռxhMm;I*-4obְe=6o?|ۯ?}KA3Cϟ~__/'_=w_?sßfI]Y:r;E&~LCE\ pU ܉҉(T3tYˆ4| Y6aHm;t$H O@MŲ2!a̤W8څ/#1rq<1 HZ0p:DpQx* v9Wճޖ %vjϵ*UN·A+T9-t "u(9K'=C`dÒ:V EJ$n۹El?4+ǘ "p~k׉Ҷ-:'Z( Ee/{a}Um:P!Js lH*%+ i2'Ѵ2UE0GL",,)0\;.R]Q65F=k۾ 1f @ p=M9-5AQ,[W~*_"p(@Z{Xf$$5ĐH/jT`º;3J|+vDuvHF$\Ň:QIVNQͻfh#L쭾A8R*OR-ngu4Yo!Oi``Ki%m +r_y;-3GCT'TWs?NS'8A)2q4GÈi' }6ShDC=1$fTFXVer1YtDjY@@^׹#`I%#Iq^7 y#prV+'pF؅0ʷږ 2+α#%Fߚ+nl|@i:ڣD7W]ciQ Ao2H%esfH-˴qU=Tԓ/)h[7JIYBP%q"?o)/ؾ 1`ԩp +aZ79F뺫'q"D:fK+Z9)cm1`MWaYT=OTmXw$"r4CRn]E: +`P/!o$:x&i]"HRXʔ);#r|qhU+Tmr[^׹ +6IFe8{rj~`Q-\Ӭ7CjIHn3֕Lē%ҼS BIH@4a&mm4YƜ%۳e SiE YGtpRVCy.tBC-{A)>e_7igxPcr3ϩұ %õ$n t F{ 4;9x}"Umɥ|,>k{ ʁ)&ǣyA*>t.,M1.&_wRSmJ?EzS/Ayy i[$_NV)tM~XkoRhe&[خE' uQ9õ3X,@E$go}oě>jQ! lCđ֬q-[/,}T/038$%آ^}]m&sbiawpӉbllX:IXa05;Ԥƒ9Ddf[HP?w/dsq17.:ܺNA}ya?3o:M5pEF0/tiOS薖Mp*Ll5 foq2[b\Ni10DEnuG ~Fw?G]"]9`@Y<LEmlc$؟ YĻQ3gaQ!B|3uycqAt+\j+u*>.^}]t9)PAihPeӬS-Ƌ46BZdkr\:]67By%NA!|FJZޙ&C~jC7wu޹͌7E !l8R^FVBfmO/Fq԰gf=-p]f6'rbSF?T]zEgN cFGG`0*>yo8HOUb}5 o>D]nY2m{fTXT73W|d8$r+JbErăpuq?X@qY p&i̓7+,Q>Č̻/71gR?3M 9Wz#plU؇ڦ9s8:=HA]+4_hu`Pe<_Avܿ6pP#TT|Ao5ZOIl粩˄ _v +W2dAYC/J宙i7yH.u2ECxvQWV,#M̵wRIx0nHw!mLP434 MbK46vE3PlNX@\ )e>3W1AuX=rm>!f?;bJ]Iׂ+5D|E6"Rw+@#P +̅MtYUtKhnKt4m3K63Y)AxunrD_Ϧ 段 ~+QeɘRgr*@3r٩zooYfYFHoyj$!7 FgR6R{yf+6=\>H3vy 7nNx +VLpK.GEMؖBq?Ygxw$2eHh4Wy62qpJz.6PHjKh:V)Z-ESb"lgBZ9JμB q]KpN()MNE gn4,l¯>s + 9c׌@Hs[YǾj 0}gYW nMK/3ljqgh<\D<3/ʧ ݇b+jj's!N pf|*-[ڱ*6-Fƣ9'i4mDi'YSʱE\ +royPdm,"_x*ӠPCKCRZ$"<&r+KY3M >֚)7`e{|HKduz^KwT0ChTc5:v25X"No. +wf]ڄ/({(ǵ>}$66NyNFAZ=f6ߘ\ޙAZo/Hھ{p8zCl-|]kjd.w'! }_б/*/6edvڊ^$DnE8}Ǒ5I!ӧ'^(zd"O@4(9"D9^=S/!4܊Х3* :=B2}&5|g +aaӿ4e1S>ڷdŔ]ܲt۷VaC}(iTE[F/f4E}dĔ}8Ld2*w.maM\hGY)yʎuEgs"O {qMC9.ɠF9.dȦ ɩ7e˱g&J.O( +_l4/}̋NpB ի2z&GDU-}(M-G$Ïw;*HIKU_wb DtyMdO9$>EJW=h%mE =W>3/JܛJ M͟lەҥsaq_EB (D6J|Q_n%Zw2Bdb̘qixC"J +L.V oZ?SwF)jeN#OSJlȗguLzпrpavmDpAp[Sl|ݗu2NX4ABK;'$Ch\별6u?xHW+i`>_t} +d9Ө],e*Ҡmfv8( 5Qlɽ(lٙE9*r;VONd3šGlQ< .RPN$gJ|z':i~aS«4JfݻMXgS-.uMD$~i5}@ͼ?zzZ:Cy]~(o x0C +R爗]rʳU:8@$RNb:DVQېc-ȉ:NHwr%YBdntG)(ElKJТg3JMrf@ĝ537bNGZQ|!EUaOzۘ $J)`q?)3N#2SLbǠ5d!יon+,tJ$O~Gíq)ip>a`^$}W#Bh]2#-&vz0iYȜH9^cL{ U')*<jSOv8bQuUhZeJ [4%`ST6R?O?}᷷oj|lk_}|~c|FS.If"[Kp ~QX"vZ |/%9Dވ\"~̈́P#aӀc#wD{mYy'}ڱsW!Md]#UՒA멉|wjbћ5Jijo>JMʙU,* +ΠM(ٻI}-c+?왎dΕ:vP hM25__O<8ZA+'22G7`A5>3Ys2 unH;}5Oj1e WF +3Ba,0"vN:=nN7TdcC%9-wAJ +{rRj qc{KKC|'LMRJH0}6.0G]b0tl}T !" 9c]. +8 t<-,B9P|23?xFmZ3EܝEM?7/*lsg]TS,M|GۡսI1a^A1g q?|buA3fvymv`c}]HDt-%LƈY깩=:)WH}JzgK`B`V]YFy '߬VR|F&]B +klR.o70 * 0O~nƒfLz䆈II}9XٚLlm6WQʍ"ĵE)'MOru[$o\' Jf֣SxPyR6J3n*CUt C UJjuBu(!!ŝᰩU;骊tuO:d5kK{U@/~q ׀.v瓑5u"ۃyЧ'HEz ݫ6r']9Ft}NAHJp lx.d:6%Ylam`ՉBɉ>=rffү} S9sP]PF9sd0=82?QڏWd3ݒ0 w{\;gjf'dݛ%F]_m`XS5C[=IE-O,܉(_'N:K3ݔO +NQɹJk5'֔)J7GBγ*ZJgS=L]u1Y;i0 &TrWVH'ex{Jg GiOK|O }Yҍ07E:O6k/SNXHU` +#uə/E̜9zzO SvSXųBtlZZ/m\Jtf@³>[z`޾DXN|ToAZ7ĵȆnCJA6.ꮨs獛$/ٜ֗ RԤ/w"reUg i~jLtje1>({D{8['ejbezzymtHגg?ϙlõN:15Q$91T`sک`f\E CiD]aD~5ёQ6{%"I7bZ[9!e1nBHtSK6 +rP]E;(rz OP/R t1bK<k晡 2'2u! >vdOޑHjDD+I!M$KGũtlQ5=l,*KAyr6ێ\1ɭǛ.J䃣O&0[N$d]Hrգ!Į% 3EJȊ e"YN$[,WuW{]0Б4e1 A0#fcr@LcS 1Ae.\uǣ;6I䤅U1|֧xB6EU͑eb 3;Q+ H08|pSXyHB3x霞(1pzjU_3;7rA 3!L=&{pE3㉗*n]p)НF<0\ !F +[ԢZMEef,%5I߉ +cݨ`ga/VcpբjBeSB64 Ru )0"lF }aq&_I'YKW 2G |˻cg-j9w#6j lE|("t~ +;Cht$KcϖNBrLy IJ +"}Ӹ䪛9$Ne`;q7 uK_igQ<̳"^yޘR@228ZSͣLEcQF*i'@kggE d(@zY-xGUAX1^>:ͯ hCErqީzzh9j6Bªx'!jzipStk;ߕdiN9EY^,Rc'ZNG/US p)L@c m;qB $ND!Ie?;U['ӳ㒤ZΔ%] Crh$!:A$cVO\_9?v{/̿A}YGQiTPZW6f5Nu +QtX][&a̳SRq\@?[tZEqqVVu*.Cmpn{WZmJs:oK|e7v+n-8ipR-\xBA +Ƽۄ>]|<)@Ȩ b|vH TN6G-%$nb6bEz=^g7"66p 1=JdX`"7`ߍaA^=udN$yg9<߉&ӿh4 p'H}8S71krmB3iL`p=u>6LC{էMhޤpx4BǯU %i=.G@t4d+yZTq"攸В&Lr&e[LtRZ]'q"[ԥ*/w4 7d?@LT` Z&ܣ+}uT +FP՝3-8|ۏ~Mg)˗?|_o޾~_E+?>Ӄ~a^߿s>wOfK,(By6>0%TKћ OfKкpsBuu@5kf1i-/J}̶o|)OhwoPnX ɜ|b +# /"^7}`2V1(2}e0$]]i3bjΰ"ᷝ5HA[lTD;eݽOERԪ+訋64ž}tҶb@s$.uyz,nTRǴFVx Ϸ@-Vm8Nt[ /sŠ0l|'c0 ;2##o2~5`yX=VM7 +q]"xl%\Wq2v_년OٟcaG2:!Ayĕ+ǺY +Gd?A0bQ$p|kt`F /U$sYrey=KPntݽNTXX(3юS9bcΨ2?KmDmȏi%MSi<[u"\q9NwP'Ј+G#B""l^3A4[$c3a tW|AU F>deE{o>cAt;PO[lѳ^mHѪ3 -H@D[ΙF>OV4x%,%وLҗNh IsVT$bLByX QG#qBb*޹J 4;m썌C$ mxn=Gg+T>AtrMj*?I[OL|xס7C.N<*Bϕ5QkJd>38G+9J/< n..H"FJeشsEVѽ!w#Vs&v!Y +ď* ѿؙ(T<ks R&ӕ詣|g"괚B֧\9u[0sj$J | D%;tš6Ppw6&`إ_;ozƕy8zS:nϡiqV9-P.ܟgr*j٥y ?rih]kP;,gRIJ{y@P";{98I c]-+7;w锑]Iz.4a7R/ +?%ezzjݝS{ܐ_e-jE$PzuTQܡ9QE"ȲYwdH|k:^#!h+k e)10]&.R < 'mQNU=a||I OȆ$<_ʩodZMB뜶X,$v"^{^yDc!/ɷx9EVUqpRMyqS",!)aR2(&-1,䐖T#sf:'4v X'Ub +xzJYyȜJmY(6H6we-ԣ%ϳ.- gD{Mthޑج|4ܞ;pP<\qYz}l<$ˉ%8r.  x:˨Ex4|RHۮzfͺ6JS֦5^d%`(=r s_VR+2Bj,Bu=Ɗ" +9qL1D8P+ G3t;*Zf^'> 2ghćk:‚j>dy/ɻVmd-4X! f5Q2#>w^6UO=%4wR_H1rG;/0[5CBz=汥69TԭJI<-> hstw>f2"};G`]%>Btى|GIƠ8xohi, 0O9gFNEXuN#LER"!G;?B8 qҙSL +gm}ZqE~iX#_lue%l +dbSqGe~}\C~ Զ?'#Wל;`dl-B0hqAeHŌ vʹ]k:,5#sb+q{Wńˑ9jxDQS22ڹvkJ77(ʟ`JXGݿGl2{NubQ#7yPډ"m6 +Q_ׁo鮆 +Q #3luF3 J8v*:PEðx8䱚A:%{ء`%^q.*)fG]OHQR9|^t1 +KF-(G E#aTʢ>v/ÐTB囲}!Q٠6iM*"(ISąiHe }K+s;nE1H{/km.sjC79εbP~M -b|#[ᝌ\OكXʷNŞ8g0/VyPizdG%Q=\J҆L;e!xdŃ1qaDylx7\%WU8xh3BK^)e:)qnT!kjƱo,Q iLssf~)[8tHeTJ$ԟeLYNYBBy99& +EV'Sbeץ[3zm8?p|kDp|2_J1nbMIhXݡJyb7o5hPk: +y,ۚy4Q# +W:TwAQ.#qJ]3oMgoY}U8ÁyŢf͓|%>P!.8vxˏtG`^(+#).y}cL]:fھ}*B*~bm8Dw=DGRK8G8Di%9JEI +Yԍ҈sI-([}/1?-䒸ʿB[ǭC+KBI|{t&ynڮ+NҎ# &. &ÔELNeN$2jvlE80q6%.㎊US9ci Ѵ+>PN+l\#iQ%?O^kh8ʟ>v{}݇~z~~ |qS߷?r{^|r/{t^|՟^??yW|o߽駟_=߿}?Ţ}o~zXͭktݗgC@f<BQ̅ +͆<2ҒSM1T38cRZBv"3LS-_HTGU A!EH^{_k0fP#1_kvmJWIґRt;#w*Nu*n: %z@aǴg(P5ļ$ DWk:uNW5Pu>s ǸfF7!4D[5ǚ9Z!:]8Qhh]s#%q!\eTx=BkD$_ *EڲL;C4øR;\ UQ$(s&hR`>Afԥ`P(kp\12찧xA[JAg +,."nI'!f0WK<ЩN354FnsJn2҈7M/BLxI"(X{/z绹45xP0 & lV\ TqW#{@j%d'[ppPj̤AѨu{m;j5"@&_*l"VVBpbH|[1է&AQqZY#29yT̘7)\7o\\KZBg`'+3Heg!M@ueڙX":ő"(ez^tjlmVbKvO'E QKGg 9c>HQj}v2鲺o VᏎZr2MU*O3ե₆}L2va̩3dn^;I iQyoPhmLvi3X`Ma^nވ]hs*+a\ ZR|f./s Zͧsvm^. tySGP=Oܷ7ژH_HUul}d.={mx 4|Pڒ 67%h3A/xf9 +RNuoRM]jOG/ކ݊CIy3gĀSlգ{7@ ]¿mo흇EmFg!gb##C ތ ~1N #mS[SzJmD;3ݡ+ LZ_v! D i3LAh]AɁ1J3nr?>d |zkB@Z8HXf8 qj&9Ʉrg^ 8i42cmg"jc+&JXK6!'˥m!iDDuhHMV>kQ1SY֩4Sݚ._$Ω>]34I<2q]B; ؃f&#AF'~qfzyQVPu(a qm]3iЪ꟟q{*[~82[Oo׃Nu8-ûò%|=Z2 qf!e3W$^Bve ͘17 򄩍CW, ":A[.w [%^6c% ,j8aY ->)gQpB&Q@!1Zp3ܰ'N1cۚb-q_;letI7T +7GSs[]yKWTô QGsN02.NYʑ'Qoyɚ$kLT?xPpr)t(X-WTtE-T7JFfu<,Z l/B V'K^tIBSm.YЖCYȨii +wf]\yTq nH&OQ$lgF|/_Dm/2`J+&W7@2i7-#Bf-I]e vgڌn%=K \T;M#lRQkEK q 6eTsFS76N"##U3: B6/X6b;j +RQ3]qdAlv1Dkٌ}^0&C <σWs Sn2Qٲ1SQ?hq +dm2k}"hEx1Ef\X.@9yZg^oH X-^QIj'^$Ŀ +EVBd J< siS78_#VSx/֨mc5" r(gVQj |c 3(Yo/Q4|z<8@Z[bC27Y1/c?&Xo"v䢘|a8zڊ^$\pJT 2"/jѐ* F" GWT,B9.EKv +@Tg$#S3Ў?:37) STߺ[tbCW1]`Qƹ6)*b`|,/2 wE_ǃH.mP3R nd2/6~35|v?(%T' t +zÔ tLlA6Y%>66a{f+r*Z!E"W̼h #T׵]د 85r!%jыUbzxWÖrd䏘8c:]fS UhrU]y*S`U_d\MT>I Ȉ7 +a8vtX]fJ1Q6C>ը/[IX.Ķ̧t=,fƌKKDRЗv_zؼ ;$G7QfgVi0QJڐ/(1A>ˉq/w&;E*yFhǟ7zhVAUz m^ +'e^Xx{Yo#Mӊ>uNUVf\:FxqP^#OB (}BXMu sVjz- q ><BWU#@rFo\gVSmI6e-zGX_W/%.* mH2U׭8J\ʕ(XI^]7^Le +r#U߰G*'Ϙ|H;V/~~71[^l/:4c L7H< }WvǂA}BT5Fw%]Ale:0*A9~pQ7Ȼذg׻Pdh>.x۝۽BONdXbj-D__Ir9h.]-;UBa OY&BXcwcᣬZ z8F +üwZ̫+!R ~#xE {Jb '[AO\ 2$EP\^6dFc}RmPYl_B%D +Kmb Hݢ_/\P茓(5Id+&D^+år%?\׊N; Q)ybЎO=جxlxp:oVLCu]R>*ؐ=~C + ]cYD(z=.0'xNsU0/ I_ϑzqGBGὋ 8tQ-X&ծ`q˸pCz M9Ӳ ׽STe5.+cCv:avA +Tj6m~KO>|w?OMgQ#}??}쫯ox?ɿ9% cIW7Ir҆-ګ/Բ-OHyA,1HTG"EZ ;z'|< H8C1|w/NtJ7U-Fst2ݼ4] iu._>RP-IлΠAE5j"f&ݹHY# *DuBge\A~Szsndq++3{)Jn8̅]~ V&~3dΝoJ@k!d`ܮŵVNddyTص]Vk&l#PӐz ^}o)?N\Ky vMHA|Y_JSJ#%nڟ{+vJ_hG&I{^ xsIkɫ4҈}VSƍLlzE"ɥijt8 +q{ w%#uiSN`GQJ )P7mo8ibjr5oi'^}Dfi\*m (U|-"^o~Vb m9弯,6K:H\`h&=Z.T 56.0b!Fxisb;Du(wB$Zݮ +7S\&ڋ%fBcJ2? ڄ+QFN:]ozE27Gk18TX2{T T7>9ˡTW%o J0`ܑ>$wUl4uND5٩ۂF΄~ǒfk8Sjg"ЩQNx#_ԱA +S/߁OFy1i>_H!]문6zܕrwVzrDĠ=2ҎPF,stYRT}2@c ic$Ez_Tyu; 9q|-lVͲխɵx;BVŇʓzN#R-Q2Cq_ ^W|&:<̓P5B C-Z5aWfս}5{COԟi)ujצB6+Z!}ie䤰}c2e3q{0pޥ8Χ?5Rv6q}:qtF( KplR]&tl +{7FB.p "-Ak<([ +7A\}z.@{%& ۸r` +6T2OzrvԊl[Sޫ/LBsuck+?5^{"NIE[AÈ<, I[cڻɾӦX)nT * +}gct^XӚc&Ø 9c.J,f,= c@ ,~5To!ZY{ݖfYoy>a + [U˲-<6̭rW@atܐ4Y2R6 %RQ딅3!Ⲿ%rj( +*[@r%uR9ej,U4]z᢭>;IR"\aOx_5kX*nkf1<o{]Q;xHf/[K}>o+(OfmB=zݘQNfrFGnW6Shz>epau)@R6H2޴2b{J\iȊGua:!/׹k0OӜvn~EWo_ 7.@ vϽ³;}X5uԊ j> \RAtmdtSJ6 +yՎ1>Ȃ\AJ/=h[aĖ8W_Ѐfq:/2uere ь|8['qwDH]NNc$ NYpβϹ85g#SgK}vp@YGbT\S,c 5ΔkeXL^Pyɍ9r@ȍD9@SKl6HB/f qw2}1Jj< s:@o̗[o +xĆ$qj=8 g!{yPaVdf!}qx!}e8o0$t.hvoihoΙ؏ [MrHӻ'buEafrY_{MɄTVx僆[ΖpnU2[<_pnE +Z73 #VZ-:M$qE "3kB)xqTِz҂8t`" EDa?092$8 ˧$su}\!*:D)N +S`zRϻmh"'P-g6M]hj4|M->zuv2]]N!dAl9=7L[ND1e2 Τ< 0 endstream endobj 30 0 obj <>stream +HWʜ||9%W'H.AA}g]a9zkβ~zW1uk^6QQ#TiV5gZ>, +]e]~ FCjˈիNQ~Ҟw|O߿O?ǟ}zMf㛿}?o߽_~#V6^线WUmїZ^Rn\s c$0hJik~(pDlT{ +.oB@}6 -(59LHieޖƠ">ֵ&d}X$zKXW \.]=OnpMe  o~ s07`푍p!@W:#iBiB[-A#]hI#CiZ#ٱro]W/2FPqz$ 9*>FܶOA'|Bhܨ[i$ ޱuro;5|W#&HZ[V/ZtξjÅ5\,c6A^ X{:c#>RD@;h0~N #tՍ#=Q8@k,#Z=鰗p5guy 2-ϖ;AUّJOCk>x; +Mw`@ց ]HJZ9?H(@= [p p f5"i#XYY2 ټ#`qtnQƔI_D +2"׉k "Kˢ:DM{o>I,l#v3@XD1LXҿ./IdD9u64R)ńTSPyqg qQBNK:@JzE-aA˶H¸Y6D:V8apSpUL# ɒ(Qb:%Q\OF$U, fu{utm2e$PZmh (l\,CNMr AASn$}uRV/14qnTAaNA"o˹(&[znS%+-+=wA-KMٙX(20H"="7r$UgiplvXa4`4HהDgrY +,R328(k +Uw9"]-b4h>nQJDcbk$Y8ǖo@\ -5u|~4^:D"qXS4)p|n=\e/Ӓ4n۲R?B62z-%nK\ƾ5W =_eG¯qH PPYCvGg}k9Jlu/Wթb:Iqsx6xPu$=mG%W{36Uwg8L. "};-"Sء!mDGq9^Ud [0z7H q:+ %Wk+<Ĥڟo@Q+7MPGE ï0鷛vNDLǥf*<3_6ܱ}>㚅'֒gN9 ?ؠlA#7c\KcyR-fABdbPp] #c0ZvQsm\r+l+fʠYQ8hm=I.{S̮-<މJlD1#C| F.qkw5){ܟ"GNj'3BKUG8gRѸiWm,RBe?Ehp 9F+5Rs*q}/&T Fq;E#q`Bm@cF#~͉ rKRچؽ*ءQtz$2KuePs@Wi"ZkKv퇥nE|s ڟm\;V3~V#ʩÈ=\lwr%y\<#2UZ=U=,M8Ĵ,'F-AW҆!ADăS'r\.q`N j:Rgӎ>E%qR 7Ϋ`2ӾLq} W +W m[#Ǔacbm|+knIuխElL!ӑaSD LJ"m̹UnED&@:62wCqRu[ID:D{慪LFQ)MT{-8' Q.#r59Mfg,k +p`bم}^ 8 ;G#bT Zaz6sf&8YS.1Mڗ J42J^Oq ;MD&Þ@^ʨw? +(nXP##n7\q>-XftmYOH#$DUܧ\fcM.+Q41Ho (VJ[ɩn5 Vw5 :OM+Б&v ]cզ^ TD"imaĦ|!SI2.Z}V,H6鏄,'П/>>~㻇o>~Zг_ӹ?۳/_}oN}Z,݈T^}{0nϾX=۳>~xͿ^ͻz^wǟ|t]+<կ[Om 9b{۔.oIoeF@O0Kѡl↔ +Ij$#{.la| &=;QcD J=wcŅ!I 3bZ0# )qBw0ࠈ)ԣ"@j +^n;oxz˩_Q2AY e^aJ[" $Si<fn"6)5|2#E3Ŭaб_˴۶]ۯdY[-b6_7Td_Sxlа޴<6CB.?㶮1 cҎ,Sas .9@qM`%.(z1ѷU|i'Jz{ td~K V1Np肮SWz-'슀~zK E/齖9Uo^çT1amJH &]ɇ <ӣyt{>PW+@gDZM~G@MH ROIݩ`+:Z0< 0#0 $1R4[)L&솃O3<(osVn7{=1]gΘa]ps'2b8X]:aDY09S6CAlG(2\՜CjPJud^Jt)3Oc*y̏uG9ÑHOWN+~vo;_;3vregH|꺢K3Of}d2 \Q (T,F{?b]f 819XwȪܶGk]Wrh Ny"qkgX2rz&\R`V`vPSzOKaIj: ,7!>vN>jNq-9iK/-? +0mG~ dqb۞ҩ.l[Ѥ\*8,_EzX0\rIݧ/Ԉbr[HYq89w ߈P|I|&$䣙ܴF~&],'Pƍ)3$Ckl +DKGɮD,b`FZqS#QRwyoa^ +qvȹtm!Z1/cM({jF>\!Q׳(=[ӈ3SUN\,=Һ3|Y/{EB"|#(>d{7~ñvJq90w5F悬rMG`+ֳ\b>ME"Xbq/N4{a /EΤ==y x}WoQQX@i:|KNJ&isIPEQ?H\i68T QɥШ| e܅ > aSnōq)1dOH1@h;3x$ s+\e6Y8$ua<2\$NylC/Zj~|P|~@nRx\@,/&g@]|IdDH9\~P5k<G;)HB'(BE8v(f]?WI}݌Ƽ 8;y*QR5;ɘ|~; "ݚ%:vU:V`k}Ph3Z[mNk t`Tnp[uM!+R CI yʭ^fmx&8G@jdH Av!Xn8z/=3S](-Wh Bڡk42.< 0qZ8,n~,Ud?w>f,ڱn(xWU 4NeZګТn} Œ`Wn}P1kKPF<P4)6{UO٫K["~՘&@: 쉚$N\c̓0ӴbWty>v1Q\Fs4* +J8K;K'yf9-j*7&UJ%;_@ r]A}Hl%n3#O W351m5:\rQ`fUgyѸUWe3$eoSƐ -Uc]j ,snXQ37Ngb>q +c4 HPQ";Q1]u}xR4h*5!5 ߧۢT}ZیO `A@-}Ҋ !y? |$olN:,TV"U f!"6r~V(.?z dGr"\ԙ \r5q /Q3ѹԨQHw1 LTG*5yiu 3~?C3%rvJ#dLwJd\ϩR0 )J"hxEPzZRsL5UX} "vpBڢ@˘Xä۞mrBytm;M:>;%;vX}DnٵަJlFi?MPĐ5"i Y(1SZTb[Em''uMpP_lU^i@eUb[DěJc! ʕ135@D噹}ڛ{8{_v]9e π-"2g/f˾kuI*|S%}!1sf0qզVw%B]ەytG]zt"Ⱥ[![D^ 1Z +PY''<~qV6,%Kvm>r}3لv㥼Bq$R\La4/&JHEp%Tm1q zGQah6mtXC+@na>!Rh_~|~۟~$-/OߏϾO~?-c?FEh)ska3isp]Pj|!:**c ))k@Fl`#زC! sid)qLRh]¦[?{$犽6I#ȼ jEj(^Xv0ʬ@Op=x[ة"a$T] E_DE $ve@[(SLj ψ;W#7ɂd.zvҕӹN[[!xsw` B+g!LBف>!` QiVRPb c@ά ;MB\%/rbXHyA+~ Yf +,ĪqoxߣY`;JKZk#1$ FLYyGX"8Ё:G +q%{ToOteTy'^ѮJ_ &Qzk@w+{@jĔs∶{j^{-fedȭ )2[wsJÌ7kF%XAK؊^b,3VvӒtRsNCNCztʈ OWS|A7ɭ"@+@CăoaQ웲׭^QczO'͏:Ϟ~BbVQųqn"E`|mII`$d෵oPbׅk4b@#o.n8ؠK(KjԐ +U?ㆷfhH;lTgq@O vaeAfm[91Z9mҮ莩̗ɣͯQ^l/&1j~65 @(_xsDJAIcI$cq5@VA׷ rd p[,ۛ/Y3 +i18 2$Z;L'NΑjzBwuZT2{mh[?jh(!:1RWh?j#wYsaz(P}M!.sѺtGAydJnPĸ6s X4vJ`hoG-VjTOS+vS[VG]Qڡ(wƲ7ɨ'&}'A Ԓǟ3LmZGW cwyc/Q 4E23V-Y + +2/SX'K< *`uMenvx1xxSvƋjڟ7PnZI)v3*1.poc5a~`,95-$Q֮=nʩJ1FP^E)H2B!ؠ^t UGgSkHN$ ^vHk;5XYF{ŗoϝ#GD2pg%@Žpct6N05i=ΰq=??QV~I^ӨjJQLz8v5'rKbvDx΍Y AZt, QiDGP)* ;zUе()4ZWAY,͹(tu dIu˫=/D֨vX;n 5־WUR*yJ@kʴ*'XZDv&F)V]hSaRF:U?㖜B,D#?Ͽwuep,ތTjgiRڏ +KeY6ůSny3!fq_V%am}4yxF+"ea{ dk/R{M|K# e8::-MáFM*]6,o cc~-#xqDfC䥦)J{TR\J b i#ld= c!֓jg-qߔ:U-qvZ0VxS*nhY6󕞮4ъqz3 +8HV 2kTtʁȝMXl x BE3$+1j +$`-G1=Eis&GnjRW"5}$$#uJWCݵ\C* $66ű)9bg1:0K`%@3TKCt&BEaFczRDܾ?Sܢr㸷:z<> =`!SbQ}ۻ3@KXٰBaouGlT/.Bz5߀M^D@L( 1\PjDCș ڪIYlrjo);`#j581wbH9^.UpO&ZWj!RmOؙ2@ Zq<;jZF|F9{2>P.}[^6[WBFh t%z5{-c=?9g5؂/A +:J66RPۆ7i0DbbPΒ ,QːO -01f \:5x&tk5] *}HH IG xM˱AH4Dݘ+T2;-mA\..'~MOxfCl8^-}Od3oTa*]$H*1v/@({ɅhkQrQ87/*jp?.IqlefB(1Sv=uPy>ހEѲ7-M/ +qu-Aj>5$F=ǍG;LP (<5 >gюnwaGx񢤛܀lKX'eoOBpAj%57nl SW e× 8-6ݍ`8S1xux?儻U|U I$'dϸB3ftPD-0~j2ia2Hz"V^JX1FQ#ɜ IU΂bi9ѵ% SIS Gl #!Y#]>%P}8iYޭBF2 Ғ2*"(s?n4mm { S[~FN] J\)jx 4#,#$=$Ro; mJz6T"E_HJk7#6.{WDV8aտ\$"uT=ebKy̌D tR܋A0\\G^IL GjiB]_9UC%Ii$&8򉐅%kQx# |7coFڌ)K +ݧQ,ɞ-NJz2QɚmeR!W%HJgͽL{{#t6a0y9X jЇRg"r֍&Ȉ%sB}$ jv簫'Tzy}otQ4jN(BiL}>Vo'_(/BM333$ wsx؈V-ل"b b+'ۑE+.!SWv]\ P4f4 ȿfk Șu̼3 h d2)*㽛^lmM[K궮jmа 4`'C㇪ڮc>pBnJ5lZ5+i5" AnZIE[o]fvZ!|Qy!RJ8Kzh+lt-pC2˂:rjcy1)D +5]NXorI@9LC3Yt箇!sW0P _ 5j{͝'3r\շwZ u}T!jvȅ2]t,e78< +om+-"(F-e]CTb_CVX VJ6~7K^܍}5kUñPC6/rpFIz Bk^s + З +RآJS=[ENV"/+ 4JuO[hTD6h'૔` Rrآ鞀T̨'HZ+aFoRO{e}' bNa50T]nvaS7_2E8ROқwwS= AoVA40e +7ɗXT@r$#,3:).O@Q .8T lqs?a؉pHJ?^{E2:ОmZ*j1Uv|3Z{ +:/vZ̒7NyyAlf-%5 X[{/'Ol袧*j.݆}ģvb"g8yD*@0Ym; 9Q%]qM>)a0 *XD3e8kk(&_q> 㪶#9@;3Y9[*qѸ)RKGБ۶\Y:A0=mw`V{yآ>S +Z9piwO MllوDr#׈1EX.6.~p͉yD R,&?m];ZϼQ{kP0ȸ0 $tNl;y=_h{b.邍h)2)qzJPpٖ_GNhVHDGfT'z(IHՄ;fȂv +t;&J.V')T1'*'8Cy Hn0):1H\^Sj*'5< tL(վNiQP[oopgBbf̾&vTHǢ0ĥS).yƩZ[ŷHEE#v?{VÀOԉ5p}GP:M D<`pø*`4z3<})P$Aye[ryE;,LX + Z@׮$ĄuNt)42,B䘅4iLlQF*I^j +jIHmE #Z}zG"3>nָeY>7gI[>& Q/'LR S <' dDkkB©=RF]$qh+_d"D2*^@ W̍BfZ 9滷;b{ 5NZÁ %X]Wlǒbf H DU̙$987q."^sD~Zu>3"_?DhGKG:\s3K+gGOIJF!J(EiwN"*BUҀAn6s,q!PK՗6uC8z#/%eiը=ىuJI2Pl**pwN/A(F6@)tp]:MˌR+nnj0STƭ\!Eo~>Wo_?}zϷ_^Pg~~n/ׯ?+KF[~}Z츩oρܾwߛg_<=w/?zO?釗?})63yӛWon]'{?7o;?3w-=^:mm)~(B#UF!q")-QM> 2.J;d)M6BmfHeEH^{5BQe$dbRkG JB^jk4BK FwYZa ],ehrUDb+utPW1jDc/ ߃L6^B(qi72;G #I)L#($Z IΓǨvrڕ?N|,H=bW sT)7\ +Y^7HRtP N :LGychJ&E^ +S 5H +DR ̶لhH [15~z*(j&DlYw$*AawÜޑ^BIe]}Z$YyTΌ8ir +&@A)y&qhD#QzjAW#zp\ŨP!Xь#cOLީŸrSߔ!U^' xpbUZ\;iݜz3Z|̿&SbEn[agci y,jC6ӓ/rB3{D]=hR3A9f HtԪE5NYbQ5@Y24顉\e?eviI%fK9,Hȃ{Ó#jTBZ~./ʛ-q 8D3>U +^?(Q̢5 7aPuIL#Y3kFz{&6{mmƸT U3n_TI^NzەM&D6ʍ-7F< L84rFA#Q),4g+?Q1a ZҎM$ѢہX_1)9NRێBtPi{ h<.gCKevJ9Z|> (!P0Yoz^ &iͅĞeUqI5kw*S'^ 3bpPH6Mې"K(=CRHfkf +Msl'm?цo+ՑJpؔ9Q>t5,a֚3b?&@xW࣯Jn]gr+꼚@32٩ղve佧.t*` +u}<Q#Bn{~H>ugs6eԣϜw 0+V9rLݑҋ^D<35nTNt(]&-x\ՏaK θT)(J m)O[c>eL4Ol#( l*~ ȒcQxx&fqQ3 1|D|s + Tq,X#]ωbX: IԅxF^Ki3yOd (YBbKqw&Q*i/ On`5o5'fiB{CjBjJ#uoӢh )Um[;"m4 +]<>~w:>-JJh ]:7SN k^}51q*GR@Nĵ&x&z01{_7Nbe:tW +/ۤbũJ1)sl./ܝ"v5Ws- ^2!C _Fo)~!{LKjF dNJF5dj[{/FUd9ܚ(s)EB}`Ph$ +^4:cE% vYIQؿCpnܚ떫D;;d{lH.&Jo_У#ip|<8ͶENkJ]Лu2E]$:0k]#CB q:b wC=8 [N_ĭJ!ӷR Ա/Zd +F!LEo='e8|Pd=PY /6q+/?Qu~K̜=|w YG];9F־- SeV 9N"2|X9ڌsǖ29{']!D +wibyjʩ(Y'ܸE'[9J#^i;m9@٣JP,Yh\9S~2h̻&db2i*oKbƋcN|E.; xCx+v^t QfXu(m HR"Rj|OxWn ,5|#6ñڨ>]^fS $hYqcZؤEO7DPY&RC2.{ζ)8&|W9Ų_gat'uѸoؖ`j1hB=xlֳUY$Ut*Q)kO0F+@.Qc҃|N\=oq |gN:t*8<ԨZK #% R u4}tAB .dQ3=/jע@kؽ2_Y4nDur ^;G 3cWԃuovpS/0ׂId _HFz6!]vבv}coJ8;Rty+ R98a.S,wE6U}>=kL>EogH矿G-IyBWB%{%BgA6Bjw3@Qia`>/.b%v+9Z$w( +)E{2՜ +JC45,5(ĝOo;G4X<leJKeO8pWb;\d'멜*p#OL~/q2-yŌwm.Pٍ"iR@JwCO^ gHF`y<]Gj\{y$9XdlyCPxZ&1 IJ@Bbg0bxQUTT2ۗf qK +^UY6- y1Ih+QjH3v&WMHDŽnZ'`ul t~S1zz/)㐩:'N4}F9G9hUIq'H}*3:dPNH + ]cUYD(z8=.ehYJ2/FG?~:RTX|'oswr Bq32F7>e!N4=9h/+91 KOiPuf8PF*ξaӮA +0)TTe/ϟO?gAI->-/g_}w~-k?VE9$!T|^&ziNMLl^~Q\TmQ>P{@,1N"2#p"d$pDlpLcD| ZdhP|9@̨Eo..F*FHI͈Ht ~kngDz>c~TVF…Os'-? V&3mɜ;tX؅J@s4uE "JbV  [ 2sy$i=42,8IsY.I"#qjJF +3J Вt=b=ŠW3FY>JKvs4#b>i=snI+du]ǿK5GdZ$>`Ds]FBƖa ISnudGPé2ٹx( +#aF2Y"dHyo:7Txr%lOݺk +TZBCљҺ*#mkAda~Ja/mdkn!nK9췕j eC+;r.V6 i\h*v ܓ[Cr9eyJcכtj4ADRa9ѝC ݖnp$ޮ +76N0^1ג4Oh1,]pP:rm%0yt A%w.F){46s1`؀ ])9Ag"<2:RE[)oDC☨ĞHN$w.iNqFd3vumnbʾ҈YP*0{% N:" JV=)C|2@'~QfC;:؎ޱ,T#sR¸}NH&c*r^g}qKޙ1~V B`FzZ[5]}/bE$wYi4;_#/;[spb +ӑm4I)D-\(Ddn}y+wMv) -k]& 5 e(F•J9ٗ+5Wm2`2%51ini(eիFkƉ;aVwUQ'&оItL@t?/аL 5{ E[+LrHO:%2PhsP":V7/{`4Œ1,40u"@"kT7|,p(Z0)g~7Mć+~V֝sIϋxVqaiܳp,܀U2Jy2x@9@gȕ(b}4m׆):]EN:bi/f'*Fl}Z +S;9is/cdXҗTfTK&Az&v]7:1$y6®>95s|)_8Wm@[%7A ^\t۲/O1rFG?c][Irz*.T,I?2„J?A_>̕(9- G[NARRJxc )}7jjzx1>7Q?#qHeLGG^ nc8JH_[ۈk_+gYJ&.GFjT-+xW8a(ᇢH %߈ DWzK≄8k3ĸ_: >r`Ija@Um.mw=ۏG:f1W^6վ."qlPjLïb[.!=}˅Y\Ɂh +*!#w"2|#eДbtKL# ۙj\1JroTYu8~rI½`I qnJ [=*I#MnE? I$G'to(Rb剷s&c2Җ k +l}? n +L_%J543xfֵŜd]p75yZi< +@N\*nkJ-:M}%̶ +E~CZtb)TF6\vAʝ*I+": )J]9v+vkgCI)DeVp( +P'P2Qo+}Pպ\4e>$F eޮV쾇#J.r.DBv-LYO긼wC[\"F1|S ͊ vO5 +&r<\Dxᖣp<Ti^b]bfp +-zZcB" Q1z/IY *NOSwxԉ%Z]8, &&6PfÛ`(1F%$"Z.I©uNbq42IgT|-:C x5&V3qatb3~/Gqj+)r0$5 #LOfEw^6‘IҶ*1"!zAU"zmO,.yj#8 U#vsс@os k3 쉨]d7ŠOJrɒUZ:U>KC\4m<ώTQз 4X3 .34 PEE "#jg ˋDNSP[\` ^[$pj&ʢP=븲& gR?oKiph'qQ{c2¾KE6ܧNuLmlqqUt-bGΙ6*!Bs1a@C}A:T@Y7%ۉ-Z +78IyfsTJ! vwCϸ2OӕB~0RxJT9T#8)v/şe:1%[FJO + =}bW*`42yy!|ѝT=/f[77B"b_q :o(IU]ve1hJƂ$-qUN*.STe %=1WVɔPn/zQ9Hl\.pd|>Ť u'ԆPg '>6O7h5epXE|.󺮋c4Ş!mڷ{p{xeyJ"MIYrN_ı~k s21(1cE9SH<3);s!0pzE7/ԭ`ʻ2*6=AıeݢZ3/.C3=C.E"Y<]1Nx<>>/()>It"Sn "UqF!?ocE&yW˯}i"WD:6jw +z $(.!2%u*$UcBxw"H9VP۰8P+G (<ATK2tf>(cõe1+cNU6x$=mF AƄ=|I£@z'v-~ kPݪJ/扩HssyLE"MgϓEѕAƦ:CS@}Gx&ԑs+f&GmuæB4Ԡ}3_6v^pϭ 5 @VXzz'֒gN ?S !2hqA{-FzށT&=3 Ae11S(8ĄǑ^TQԺbL;[Tk*fDDFئVS̮dvQI(fdH4O3,zomds33T=e_-}Ԩv2#$UA٩pV٦!N)Xb<ż8h +J XN3iHNI` _݉/~mjD\"LR>{u{C.4^KC;e(0J+ *~҃hi?!~]PL庌#a ؒ,0=z>A>h5i̩E^k$ۑR󾯅xS8u~K[Ew;pynǷBGiH +c_e//cDaC* +C1Mep{Jհo6v9 #`nu .0 VSE} fd~!Rg =:PSJԷUO*(QwK) }cz^Em (Xk5JNLw"e[ +Ԣ};RY +/O[ˑ>*uIYv`eAU2E@\r;;q0.M||1mTUڴ RFTÿs(+*:uE>{vL!GPoAk;$(2iE^gO2˷ +̿W -z~^EG%uJP٘4L܏RNk|1&T2Q2Xav xyQ06+G\nPko282?QsΣf  1[_L endstream endobj 31 0 obj <>stream +HWݎ9}ޡoe*"բj%Y4da*ww(Fq9ulMMln˻tsZzߚֽٱSD&mmkZR>֪*X'ۀ_c7. ~}w]~*N >R?6q iש= O.q!,Gٽmej8|.#&7mo<`ub+ءrw%}C[#ǧ=?|zu-gѽ.Ϸ~z٫W/߽LJ\|5VOi\+D7Kߞ=V={o><~w|{w?|Cŏ>x9?={ ヒOw|f^z4DuPi.# b@PJDiP}4@z۽fKv, +y"ur \H;fCh?u*|f ܩ]ВXװ4xmA4.Qhpnィb@ɣ=+ !*)3h snsa@Z2Qata.AF FZgM1W-&8eX=:ДEdX,1 +5AJxk iw&45o4Zd-pސo2rj^qՋou$q̃@^G&6W7։a88{H/`u*;m?-,9MtxZH4£,U%ҬIt`&Gs_wv D+TN7 ȷUV_PaQ!"ѢuQ\-Zȷ{Li=lPMAAk濃a"VЙـL5h"2Yo@DZZND ,[ϛ(dF-N6x +FmTT3LO#YV:YN,Qj*$_eU!F'm*(H4:D'=SN QFB"@*5-5ZPI,5<^yFg/kDž:81WDW  +˜\W aM8 |YjKT]v$GنImz"9HqmmF#GuT`00'QXsڍÛ H3A)XYK88x HD%P"$\Ci7:YccI!hQ>moV0>/HX rCQċ$3upMfϽv/5J DQ,QP/sdy iuCcеN'2D1% R!26,z\JڿAl+<'iv Qv +5&ɒ_v[GGm,uA017T@FKp&`ۀpZ2) O@ϐad]h/ئV9*B%;'rB-a 4TB.1ck(=M/GB:JOeL{Z""㴜un AJy!m]v 3&r $oܻ'9 "E`" +Jth;TDQ\Dk ewkHFCHtܰ$zkEx\x Ջ:.M_pE;= =e>JҲ[pp0%"nrٷ8|L]s I''+-Su͎m[b;(N*.)7IA4':q1A-m %zT:lԶz]8gE3@erC`d }um,Q lqG";Ϩ:#Bud4}՘ l-\H:eׁqL .G9|ay|V]Y-ɤu Gh{ s@3Y'd(̎t!Q( L-PD;OKGB+x?bY%)sUZe h(xbudܑ3 ܯGuyC@cۢGW$8c$5)|AN!`z/5ª͌<4o=da#9 +!d wc+}A,;QL>h4 0%v )ݮhZiw}{)kkAD:93Fh=,y6I/}b{Nd>ic m^Dn*z2,!fDҲĚY֚Oܰ$Q:vHxSM- +d@,i +LD3 ~ݢ<\v;3F +)֚-ze{Pخ +;n_i Q4lQO:\[ C>U9MU&dʷ]36c[IȞ%Qe0idSZn_)Qk7=ns nB=TV<4usO0/Ht.#G3AcM"o)q@^JHl9FPƪ61*E;8X;~4SBsf 3ˆ?b&Ev}^0)j#|^M0T2#NVLPQ?hqBVBt~'/ +^}ߢf\]2}F:ǩBdOlU$ -iD*oSY-DKAE+v4kNrP̎TGDTs?Bz8_j@K"qϋ5q|74|8>ֈp}UQV!Pj |cBry4Qzq#i5<8=Z[f^S&u!qqlx-/ v5Ʌ< jZ;uI:8v.G8}#59ƒ(%V5 iLd#(I@4(Er>YoCx94܊* :=BrF\̠m$D1S>ڧdڻ[`#ǩdƹ JыMQ%.(}9xoǖ <`{bO$ϼ("iG5y-Q%/.;62~5{l4tr@'qMC9.{Lw0캐!&$ߜۇMO=3'Z-\j/xi z+f^) 㨞P 9hٯ h3ZՂKJVRXOk9qDIWĢԇGLcK0b`rn5^S8ZT^,_sM(ݤPTEɶ]) + +W`N1lmኮF}i:Dk@l|ʮ"K3Yf̸hZ=<"ؼ>y\<خ&x4?G!?,F\ؐ/tߞ`ݼ zgo#CpSpC`aD:TSZ%YF?FrE $RЅRM6_73aK+6.vPb }:POBLpS{H1e R&n;C?y\hG%m $mO$뼌A2J5ۅ~DEJgK?n&<"U7y$&E??ǟH7ǿ#atDā~;h +^Y22dTѲ+!Tڄ~tx40l,ԧn/6:3,$0a ŴhQ=S A@O|>f>NU|z̪yDiz +Mf`=n^>E!~N_$fB5SϫR?7T/?ѳJ=t+V Uf񰅛#sf`Qy3(qv@"BH̤TļR=Q]OU<@:(dϩ^][^UCaR:1iIՋ%iE-3p SپDiV!2eI(ri -BL-&c(&~oψ挙I&cBn_5;ƒ-%]b=cE1!?Lup>C8}-!ޥ4Jy ) +tޜ_w*PQ|{sՙIB>='[n (X[諄y阑ʢ>޾~9!_zCdsZnIP 5+֕|i]8,,Or"𽑺I=S [rD1l@8c|w:UKlx hQ;V>W쪡Iȫ zՒԤDצ΁<;@;3jb!b)NoM} +g]}Ϙ׍ahl2D)<^V[~/֋-&3mdΕ"tLP4nwWO![ɸ5jڔ +Vq3eZCR16#9BR$[yutJ-]Jj++&1f92қKKGw6ǖQ֯/1F@Y>'"G| 4#5[%dfsJ%R<'FwsGv9Ƶ8)*چñU<8,mw'8d8r ↋$h'U+HP* UBZd>HвwXVW iBxCi=g&%;]bJ^JD[1oSi51:ҍ1@}4s%㙦2zVQ!귎x iLtHn1@B.&|{oU8%uv]]RuO52 Hyd% +}wTu};"/ ϱ߮ +71N0_ǀXKNyB*B+/|~NgdbHr 'W+j訁 $}; ϳlP;1 +ՍW~+(, `yOw.ӧY].b nXq6'u[p0U_e ۚyR5W}&J$ |ftUGz.:64hg;sdLCt4ӵE^Ty>oH%c/S<35&ROwiZ0^-_hsDoOsW^&v?6FH?FN\d;Q-F{R30\ؚѲJ KN<3d#/>Ts5J+./?2\u }`l6AW,$:C^'@ EN)hkC@ +]UBۚ'OW#9^-!}^62ed]{ʚ=u̔ѯĵ{ɻXe],wN ]W:bEaIS*ٟB<(©փ2k/>=rhheʥ_^k\ +́Jb V"wfCrd +zm9Jzj;po$v (a64pF)Ls/{VcU{ Oud-o齑.уtB># Yȹ:1?׹+h?PAS;\V(Sεz dDXH+Zufhf~'72u! >v;I"Um/{95{H聬Jܦ)MA<Pl=j wO!?;(~̪6D0Gz`3hr|wt-n& ʱ1JjsvFl'<փ$/# FU 9ȅ3v`煍ڭnJbf72? -QNx_#e|5J4/9]3˘\fg/Jytá扗 +W.[;[Ut yZ9rR,! kMA9/ZbK,2c4UzPoӕ{϶`e0h[aU "Ju.Uu{BD` k"UjH_s´8BƉ ▝Ⱦ截M/v.\Bͮ i+3,]hPE"69(+SChtYXfVv /4 !AEuY0(S}֭obt4 +<;)EIzEaOwN[h&0F ۳R+-Z S,JY Z[D;V 6^n\'ᕫ_侰8 >+H(\a-L*5⣀r9EaY ?0'oP<\)Y NgTmyPSx`3|P%m%3i>=WVn;Q)lY.6s%DNVet&Xk۳HwJQ a8}'Af!/ gč]JSj_ahdGQхj {۫Ꞿ2 *Բ ήu+/ Pmf@`[NT&Pl#UIo}~L0 6L[2miB FO 0,ggg$*<}+.ϓ_01Q@IE'>Sd@Sn:K[6Mt&, _zq->z_*vA cMi}N{]VsvTRPMnTu"nn֒NߔO}L3n1}VGiu /h s4z=!8c  J ĠF,т=R'WgSiV,44bMKh/7?|۟}Ǧ틿}z쫯oy??FfQ޾Ͽz/i}Xnx,=C(dRw! /uL^nx2 58w|ŚQ9]l"՚gV)a #ZI5B1D͟+'/厥; ᭰ޏ.S_d{8d״lYǍXXN͎7'g|& KY` +' )s? W{.tqeF9sfVB D,"Hvz \6, gD :Qwb/FXE5l9m~d9NsUQYg*), [-S0t4wFHvYӫ.. h8cw׉ JV5R͔9ba'B6 @Ij1MDRhe> :Y<ԌԨ#"3\{FF&@6rf9j7Er֋EF;R|\Ċ$|gkd >|0cs>/;,$ʤ=M _5JA8&9S2cy+ #N#9est ϩm;0[xPE-9ρ餩vBsFӀLa| h^T_פxzO9P +Ϳa[?mFBI5p}EF3ΒbF@j93>(P7J`اߕ=ʼpNWF + HY$q)jȎijJZK%#j{"WmL`ǝ{bJ(id&1bF>(nT ޣŒQߟKRJ&IEƇΧ.`ѧ6[h]#ߚQW MyAyl:'QpbDW"*x9̹_z+3. \&t uhëZѓnG;pYF= hiQ^$lD˼Ӈz + :O(૕Ӥ>Xwql:enfdf+=?@sF9 JܣFBYŜx E4I/ WXo.>J3"2eݦ"k08G?t(ۥh^++o4jϠ$. +H`O-PN "Us.A,I5^qJvqq{\^Eb/V#ĿV:z-0,@=V樫+A£SĻ4Amegjj)ǥRtJ+Ei+"f_AYw õcL%Z-e!Y{؏ 'gku*34 O+^/Xy|Zb +ǂe4dчX>n`1bxZuDYyDsPI@`S*FwŽ9a:cRosуÜ!$OH(D<"~'z8|V8E~j6A"j(OCg,!Z<1nԉ;#7J0ĊD9vj"EB-".IU>_Ǜ4=eC4[beL5P`p:~8J54CgQJhY> " +93geEH&9ɞܰ G!;ECґP1H'%j; ֻTӝ]7*K£@zv-@*: Vg;{)+NRxGXވ;2ۤt!aA-2O{b<F|MGIQw'h"gTfgYe)21*SXop{0lyZ.sic wFK9"5 S Gmh\"vG8G]Ktw gJ{9s0(8UĄ1\vSǪvi`tEߠgOI}6wjQdUd([#:Qps؈DSd A&ťhqOg5Mh =lsF+5ӤC ة{;Z5}>2nPR\V =贱)(*eG~(%^bk KF MӗEK?e]"Ϧ߳h&J(T=:!ЈEm|V4t(QQLR0[I` jOp:?:#Ȩ֊Ew6m Q|s(v P3;4#f|DD9uO#\T`)"]\`bft/V* ;߲ZAbu{ ]yto˭׎ +e?:4Nkdg+}/=m}|^|_^=?WzWo߿ǟ^>߿}Ç?G_mn];s<=9ЊE>ËXo i(#?R$|aƍV Fk$#ǻ(̛7͙511J2X M+.CKw ` +Q-l7QT: +E 9YR).iFlw} DGhS}J[jV#CI@PWM0%wxd|g?wb̑N-SŬF}Q($mŃ(ǃ'a3L5xa{@0z I(>U$#ƘwiИBXVAg@+R2H;֕-F!(0SU#ԃ/p䩞Ǯ<%u$Y+!Sz \L~|q~E8{i*̘{ysN-7RE%J۽s#AdQ<ЅڀR (+ ++@gId _Pɤ1-YTZM0z4umUP-^\ !5iq6ao`S6˙Dhw.{$֗/9si"lXD "ٕ_q1(Z1F(s&iKj:bjDkOa̜_؊Ԅ("E똥da^t +3]|A!(B+̏uG>ZW`xߛyT#ԏ#!A8v,;jgXXݏN녨˧|jn-fm4N%dusu1@Vݛi%$ޏK 1ĺG3fͮDĐBh)l[BdŮvYƘۚ!W0SknO4F@zOQ& E uXn|!۩ҪON@cO[y +R3vj t.)ѩ4jV{u4o 0.śT€PX`bZw=Mu<l2}' IGDW#T96d)uEOV\O 뤆7F,%Sܑ:/477B%<g]L܍b\ƺDR2ez%w8$4[E!&kPH@TB9H^Nӈ;~0F2MuW^ijaZ5AdtQ? ta׸#/D +Ig= 6-65x0;Og,]ڐxb_F(5c"(F.S3>O6f*h3Yu5=U6ҴФ*-#Y"S`DKqn$z[m?RRVV%mݗ."y6j%q76UtLEh9_.>nJ:0?elh!zu(W#Җ?R(QFB)eǴ:5=b""36B.XfQ"QMq<cNPlǔ>5eL"9/vXqbh&!aiz?)Bh(|Dү$؛@{b-*;jk]fDƉj(RWFvG^ѱqՎi :uĶgl9GHlkt8 M=xGlc*g5r2'pVAk)Tj-kB'^Ec.Q%P-\fW<? J(I5d 񑅄a9sW;K\T4{~<'3.aP}F:;ռa}?lӢ: PaַS*dbbڍ$Tf$IVؼnE;\SbogZA̜ +q;,B}l[%_~?')Ia{qMuaUN8ړmFU ++Bm%k'bUMca\v*(*=_0D!%" exo:0EȽ\U.{K(1_\hd],vmK̚nշnF"/Yb觓61.cpR7M8t@b;mDlaE`J, i%LCt9̈́/ȤubM@/*`ww+^cֆ7lwܸ̕ڠ@P }AWWRT25 pi=Au6]x"9r[f[W Z:JvU$UUd!lXEH+.pjb5q$JJ=s ӵ<2raW-|ظ&CjF> QsѳR8^UTe:=rAF LHcz,M_mlUq(;6u:N).(\%2"x+ֳ\"3 % <׶GPhn]Okx .hISmlKW ]Ҟܗt^_s/Bv3tp[;e\*Z1]7~ZjL)Dr+4oXF%r[q#Gu3o Vf8_c2231(,R>bI JZ7=<T-U/27hU?THI9nHQJRÅ釄[7qF|"N|" <( thZqJ| ϭ =T˹՘g1_%!p%FY]eA#DT7*52"٫SHF׍ʍn{αwBYS*IIM2Nmً֖gRqv5=PFzY=Bݯ Jt,7mXZ@|=f'3\Z.;/tao]# ᰉk +wg զK'ުXTXXųF+4tlE5h@qrT 4Ȝ'16[**UTZ)-6ԟbTPlR[F,km4%W0h$ÀvGM@_E.X<$upKiR 0 i؍e1ǯHD]V:|2 .vN2Oh7>,GZ"hM⅊*g juUTWKb+$.8c3h17r3D է&<7\f>}nFU&~Y? suٛ1dBKgG3 + 3HRaEv3EBxzW!WU*p@C6Tt{ DTLպ}xR4h*5 e yzH̷թp nw<אjYo&ELcمxտ/_z1#v6qy⑅JJdúa,BF. yGOt_ZҸ"Zp3j8 t^{sQף0Џ3)g&oY_^! H{?}O?|7A_U^ZO}|w߾?_>Ȉ2NŜ8xR7$ݟ2\Ut$63" D f#ƸuY="U*6hvkj#v3g&~Xg\X(Q*8I.ظrB)Yd>2kR3Jh/! Bs0x-z@YӰ@O1KfV}cbͨeFɓtIsѠK_=!7Rr܁W8{Tsw<+k&a y')R%L3q KғфKxgjGvE8+{ u|5bƁ e +c|-sbbd؄(( onyԞzƾ0ڳڶo^Y29"j$,=w QkZDKD>)s8g%;Sq9L Gxd u&8P4Œq@;_ON^Ti:ie!VTZ}c%i +GJf~<>u :_iB!*8F@: ߐM{DkÅ~ĥ uz%Aqyl]G7MFş3%TLe.(ztPF4eQDWy%+,@-d[ږDܿخ:uȈ3%ܘb-2ƅCv 9 knj5/==&ͯ^ܐ4WD1=6"0 y * zF+/]-tɑ!Ӡ{+p[k}z􌀣IsD㯯^)c i:`rD1nsj!nFzI| +_:(N^-S$]; +: ǸW,7򤮫{<(tml:Z5Y{]m3j'gO<|ڦgj"bW=oN\G#b+(!A99dC"@즡5>ˈk:gW9@T$S2]􋟐$ -oGA(ir?tT/۲.'M4zot jvZ_5KXqG!}S'j@ּگnr)xwS-L=Z>S}klˣHNw""d׺rˇX;׭ :1h0t@0DN{&گeڈh Kk.4'=۸ +[T#'Э੻:Ƌjޟ7`n\9hd9q1;Jetmkq!) +A(ȜA9iV.X7fDmU!<+3(1D3@&AmEڥvNyiT:z(}0:_LYYvnlhE4. +a |`I&eN|FBUC>NH< B5> yDJ Ƃ4UZî)3; ^ʼn2h<7U$ħ(>+=Q xhpX'zie#uɒůkAgL +hF PL] + y%й&_]0b0~H(92Jxo sja'a8'ӧ[iaŢ![;AƎdӜp=ht4;M-v^FџC2ۢGdkߡ*Օm;lLk Y٭V'1rHc3D]Vcõ&npW?8+*> ߩ^R_Ҭ~X :2, S@+=^u2BPQӓPVMhkb[ 佢,M3V 尫 )Ws,plBsE ]{DN߅ҊtKST;¾Xud]Bllk-Y:MVp;FA=bE q7ݩxtK/P hGnt~Gf Pgٸ,kC7JYAWb͠]+o)7RԼܖ! Nti4gԤ( {B=l^46 5I]pn此/e[i{xΖAQg}ĸh/ޡLU0 iov 6[W JAFT|01!tW2f+'t@-,y&1|A:.$@-cL38oNzbgA_IIǟŷ~ï?O?oԓ?zѯs)U%1E: Ǵ=|o]ӓ#=\_܌X!m'H3k<+s p(F=#`cy8 H:btn;Y(56|a~[FjA4^ٰϝM&̥O(Ȑ2h7FdBBX_!Jev]݂ܔ.6]$Aor6XKscf|`TEa^txR=6ArF-TmaRAF#'q ZhoJ<3mqqpJ%V", @U3 +׃} Ǎ|uc ZSB^4ZEI ^3*U%N@x*f_]!+*n @qD໼FّiPXȿ9]s =/P1?H 4˙т:P~Pfcs.o ET"d(  dSNBA:nR7a,Ȏ1m\L} + +kDi+pxnÙ2Wu2;SNOkў">9Bsƌ蠅j\UdbF Hku G;$@Q, +9`G4aIWPbXo>M6^;e|;NߠzLux:9- + E)CTDQ)>nr G}F^a?gT5v)ߊMTwo]hsײ f!u\ H}v@aT'-~a#))sHfW.b6U`ZA *=&{" N'E8R㢍`NtQ Gn^d"`F*ޮTMMC%*qJTI4?AyMT _(:1Ux($QԀ|hog'iS%aP52F`w%H~J};Wif퍌C( |h(p#?J ڭG; ܅/ zF,2'79י vs 'C3zgYD TJNW'`v NЦYES❊=)+rb01%;0_DT,݌vd;gQ\C"6a%x_\/HoXu|2 ? khTu 1Z3TE|Z `~=ZJ[o0]fvZ!~Nʕs9*8љ҃ CҟeAd`,L+ӈ@kf?L (@ØwhxL9#`L-0hϠ> ^%o"0ͷb.$*1bU=0WH`SmE.tM7=;|Gquuѹ۹U4"∢iQVP'b~YƩbR{%O)>T Z +B :)($@9@ bհ\\gV_.* &{=;",ײ`zmj\Ba3Y@XK)YBϳ7CeEg=P_!ʵf4,gg?:>:o{, Zm(ӄK, NYc2 P9Ӟ3􁚋;yV5A  GoOS`(? +X'Y2DtT<r¡8((V]: k52cKg@zdUԻƐ"Պ)1P(=ЦVyk n[wĿtv]05<ԣa!H-ruT腹-t {q7\V +P!H(϶X_ҌJCc/ HrQ\#CG} N95Js']vg#Sn*n|)iT4ڱ\YL?=<_EQ9LsjGŸCFqxFpLO "t섍K&6bl(b2G)Eoc5s9MU4\sryXqaceOI-D5 y֓w_Xm f/,L4PHb~>WX;OuLY}r 6G'-igߴD?RTn_ mT%WԄB+PyKp:voR40):1 q|AꈎT<,0~0J3G]uJ ǺB< V?K{;É μ }pM,sTHC#Kt6ęwLM<9UdͻNߤF#QꗮF/,'jojk.*$ dm`{orC)_AuI coz-:r rcʉL,)aF7*H)|z<Mgu\o eA A\~2hN%7\d,E㓶jz 7p%!n N&ZՅ$n :}]8vLROfX ^;rQ׹΍$*P oc>H!킈ˋ;*zbB ƼqAȭHk5򯬊?$.R͖T:)ć끖ucufx'hXP^?:Yub P lJB~F#@@=v +bº6A d"Fp 3rC#';;˪դU~ƋHB> +) SDUWgOZ;CQdWX=d pQPDN竘/:;μZ%E'uQpZI dFtN`I7Rã{Cb0#ZUA?L?g-ygѼhNqXWF#/#6 w1~;1 6_H}{Y@cE,hU=6YR/$\ +hS¯ Ĺ\6y1 OO?Л4?jT!8JZVC,/Pt\CsxCխĬԳMʫ"DU6f-2:f֫v7>aD#e IHD.Q{'2 >zvfg%`>]U]]uZC +0YP'~.I|TÙ^kPPaj֗mUgyO\MHs(Ц˪ZL@pH2~?C +ۼEj i7xQxӈ".^<@{|\ov__zZ>7GϞ_]=lK >[d 8WFw! ~:OvG/__/onwwtyǛr^$?D@wֈ[Iӊ1ho6[n>m?\? VV630v7/7/{ ߎ-7[J?3'"ZJ]a;\F֜ yk|q~Z6~_ݾFQO0l)>}Sg?G6_ +y=ǎ%n?2o75~s_Y>n0$Kn]-[\ݶtA_b|U(=B5Q^M$ȸ x*S7~FfN1&_| +:sIcrun6fCܥssh3Zg=X'Tv$7ލ&`1Z-x0͝iv)[cSpfp4Buv9xOΈ,.}'r +L:=jz0iY#ENoFpЈac,V:`H|W(P Z)+4gjreaMciZM!1!ij+%+`|.ϚT `k0 #GS y40y&o&CU+*65,8[NI9#Q hSv%ԫ)Ge}NNI +ζM UVל&Z#ԞVR -iK3z_14SP ]۷Il[ +=M7$Byx e0dOu}?̧%񅛳 ׬ޘ`t1*hkpYћK*^Gn{1&?qQF6e +h;n%܌KNRx{{{\iBԇC !qI+yŻ%L.0C*v=1yK6t,%5< {!W*ϫ\[Rt!*b('%C$I##+^͖/Lxudwడ.^Bٸf t{!qd-^Ŝ-G]rDpMEea1^I6ULvN/%fsQ ]Є8ykI2H9UTtuAAX0(n`H"R⦮,hT蕣GG#w2oI8PSU}ld\\ ƽIkqN3jmx?`]jQLFsdqjTޟH$^?W ;tT'A&.ՠ5QWQ)(uޛ8 9YA wBۻ9:B"~ÁǺAGڿ0L +2fFk +X@3DC!L^):3@Z)z[)#(V6K s`u $u endstream endobj 32 0 obj <>stream +H;ne=Gsp5$1vY4p3=&EmWTw)Jc_s껏mo<6;~+璄>1Mr@0 K] HgC_Tp/0wVxxN`[ ]?``Nlso/=GצMwZ._ h^Vuϻv anw}h}o>^ػ?YM 63{5"j"M}56 |jT>e ^ +lSN1līmڈ?-,:?_' x 5kݺ> Gtq巇wr/`浄_vAb{t _-mn$<3mR؆/4ale7H:uI?_W\md9n}ҵi11mdouaA݄L$ٱ$ڛw1Xdfh?l) +~κq4o +ױ6_]QF<^ȟ?C +U} +sJ("v{7-'p9{q~VwO9<| exOA˻ӛfӝVRex |,F*/b?z5/P^Z 0`<=OEϽ" ~?x$tG%@\2tf[0,{ƮWB5$\լrnEYc3RoɕF )JgG9pR# +Iaz㱖km&: gз` +P@!N0$,0FUZ*Q0ߥK[t< +&L6{<* T6c&jgZ|^v/bbST_":gʽwOj0#/QԮtZv6w/՚aN&ՖDt 1ٽtk 5-O;(B~u lk{+s@pBw_@蹾;Zyo?~>Nׯ L7rbA8&xi6iY čݵv*/=x\jlubV_ϲ!<~e)ꢄKԿTpMf>btgŻ]R;0WuJ8k pbng$B?}sL:hjMi\1P+r t=5Sx$v]A1 e|T_h(g2 3uA~-O/!'F&r_2KOg9!+ʯ/57#nҬX8:r6ܛ |=vcY6İ;dCPv20A a{NA*mP뜉~ Kc 2p~ݚVGdu^A*M-{.qggy3(5EvBiI.y4W\,KA&Ԣ[[S[]tTܛc`*Ҩyc?RY cDQkY !/$K-ݛh Ie"eDK7Zt۵6Z\K' +R!|h+fK ";7i d`ýJH-GC'iҕ$# Y*\LJtG ({vݒXX R #PC*eU+[cni)e`̀GwzVRAvq!Hޝdp0 kBOydZ +[7}?|D8߰ø4нýfko>˜i{3F}4W8ѝ}yȰE7Ơ6DT`yhG_0icP0ǿ_pm WCxk%pB9z+Q֗]5єG*cG}_1)՛R[s+ۖ$ôIp!A([?ӿI5I6r@aւ`Lew@Ox5FM}&>RoRBM{q4K}fvWCIFŻR.7VAJ2kht*9MANvzU!mi +:C/̾<NѦRq2\Q'f]h/ZlwL!0:b +6!͛hLͷ4 OHs#?*ޛe4I6Y/9TkL9$)cHg^[qt<Q{w';5<s.9;5'# r굺˵<|smt)H(,,m9pE,UvySG> ~5SFmir|a%#S~E[8<8`4%`i˔<{J?-.O~9`\|Z\{},1?~lO{PiL,fak|cL1:GeW~rQz"P!⺮ݾt]E A$]Qfʯsc2HrYY +#|ewGUYß.ȴ֤@eSCh;׬)BgҟC&Ka4S//y4bW`=O} 5bN~l5,xldP\{/a'%hX"TdDTRРJ_-!H7N.ѝR8Pˢq9.4tBVT]w;؞Xr<%4zDNNLZKgH xL`K4M$d!>SF|t y򳃠,]:Ymz]PMk[2gJ `!F*xC~M$K"Y\;%.8a38Y2(%J< +46;/dJWWeuӥR~=M`]=XJ"L7K/8yHb {^p@6N~\{yƵ&Sڜ7od,^|W 0֎Uy3XD pvgZo*Z@5@J[s}~KaU>omɢB5S*dwԠ +iL(#ҵ' *ZuHz +慲O)Շ^DjSVM4OrN_ѭ:5K +Ѝ_9t m sX?;vI/9/xdyU@ ͇b o.vg a{ ;bP푊w>Ċf94h𩺷q6^|2G=AW+xm:#'mфc?ĂLb-Z84EZSj}cY*ܣ죐8:~* XR;&82-24+s1~Fpxl-8{ՀrA8,?84[*.Uj#Cٴ$:CUlzCߓat7U~sLqc<͝F&E(En;ص[K)$i/,8MPL<8i< ږWD^M%<4 oOK T=$+71J:W٘#Kamtgq.~ VDtb b)š;߮y3q+N 3+MHm<``U}MM{|ې)A{F=/r}|܀nC9( 41R+LPr(M-ysXp#9n +. giLU-لL };'-T,kdl:֞ [ktw=^OKv9[JLW] hVlojkQ̧7_bDfye2]Ͳ!61J-[9M܁9ԣ?`#&wriRhKq#3[O_UZ6rT]"˸Lѽf\y΅A Vhd(y܇ LB*MDHX=,kϳs]0hZ)UrKMdO\[}R=zyx1Zibث, +˱v4i%wyI8t\d{|*ڄX&{*5Jcn:dtd5QDU$5Dzi)I#l;iY廕}jVA{$р }0I&kx} +@;l\{YzȒ 8vY<@9YRCurD͑Ilu={f6A Q} Rb\G2/pz& ?1]U D0-sb) iƵb/:l`bCUr)\^p/@_zk*q-V:qm> V"/..sȾ_}.*!xpe:s`ߴUoåmlzpAD=-aL ֻPzd6$gH$ /}o:`CuV`Rv35U C1&}xZzü9Y%fS*ܧ^/A.pE ae2n6CcY@W1J;ooʗ)ckwOO礶->ՍI}}-_ҹr\]ȁeFAp*N{KJ% WQCOu7dpҗSCy͕]Nrrzb/Km,#Zv] }\9ݼFp;d*5e򬥦i[hcz#aUz w/OV#Xd.tKbӡg {#6n7a:$f<چuta5e(pyy?6%OEI.Ğ6%vWvy7vi. 9n1h-A>^tqd8=A+j8.XJFp6DbmWms6ҙ䦎 'ǹtN'Nrss%:fJQ.E9v)Rrlwe&D},YGbdwT|SFi/ h9Poo;j+z,ـ} $^DT T,L r,A`188gJR_y-̆KAa'<1ٹ`J)DPZϔ&|Dw *S;wPc˾L">eL 4Ca58 +^)ERTxJ8%Xd)PNDդ9ķ^ +$dRεӖFCgF# +[bٍ̨خh&x_PB,(xa,I]c\ƞe'E~u)* ;5@k75$Ex W- \ܔX;YG Cp&hʌ4av.t^ lwP(-$cG7` +@v=ag>"ѥu(+r|@x0ƫ5ߏly_}[=y,m[4_z?{_Ds_F GDg/_ .}; g@E0`2 W1Lg}h+%%]<.M. pHb[)4 U%cgm xD#`|׏!@@XdN>\v7S!  +|HNYo\ٍ7ZmAbLsU^/^A:g+Oުn-xb|LI6kd bu <ÝK}Z `]{(Ңgl|bz cʃ`%zmTFX]p*7t7H)IK`N:X)}Y1r +1 "1"애$-lCCJ"KRQfh"0qy&Ñ]Z^J?߿}y4M{u_f(<ƿ`ݘFX{ܔR]#,5ܲ_Q.5ooJQJq\5+ GcՐJ+AUJi%9!兴CRҷ;Fɬ)붬?y5%~t_w??&|UrVm~}V5|lWV/j5~Ouח~{&| +vOåWyk/E{j$|o3/夽D7hv/gz} w `=zǃ<(B)Xy%\q&Ax6[㎰Tvќ-W}P>gx/ueֳӶlw%˹[r9سq2Z=l\(/paC*7\~s7]`9Y|ooѸvQv:[4&(HߒhvYnx9M/gG~8O.=s~>/o~{m^yp_OY>/^7]'XN۲_ʪk=gCՋHǫ{0o|ҙ=nќ-*=) +Izc+]_G٣)b]6 E^EuZTŸ57nP_(֎^*Ӣnד9f8?O1 +װ| 71X0Ǣgլ9(X޼* +WMk^:-wRSVUU֦p20R>my6N-'B(ᮍ3ʺCy5>$rƙevӈmCޤ>Р>H%+,ė>@$'n,X3s%ɘ˝QJJpl ~r; K(21N=|Y L6@)cc!L.epM H{c!>8c8Ȯ@<ѫ_;|Yn*ȣڔUQ: o>q40 lT޼)|;;d4WoJFg{Y5(C-QQ2 c*wr{tu1wЪ)uDFmqzD18}"Q@Uiss=;t$)H[GbdD$rR@f&z7*cA>LMz0Q̛I9hӶ9~6_oHE]>=68c8Ȯpd kC>stream +HQn9O;e10YI'+v0 ͠6&ek4-%Eݙ,#JDX%)uҟL3)Z۟F +.$gDkFCu,"[2N^Jw_z]BO"&F2bMYn69b)P{ݓ~{#qeC, h&" yE +(TerΖXʪHNNp&LqkqN fgX2M OQpǁ%(( +=r9Ul +9L@(;)#8}6'P4sŶO1Z4 XnVpTDž3fg7h}B!/3La8qjplߓc`w&kn#8ϗ@]!4{,~27S9uy +g79qTfo @CiAoxa쟑l/zXޠ#m.DC)IZ֣t+FM +~gҨ .y$h"sjMxL:r90%c'[i"e9蝳/ZB:ߞDxװONɢpk7\$ixc<>]bk9uh @n cxm4^?f|E b:Sߢ˩OP^X')Z$~QFHe +Si1RIA-~q'F'&1 {1].r2=FP{ı|ôt 9w;mi=uoN*ZA!WԛG0r&mJ zb𖨕> G(eJb'GCf nXnVpLe3fgVLHYf + vRoZ7n(-dkfÀo @CioLl; h ov6&"X!!p}^bQi:#U&|3iT\EE9w|G R&KmI.Ft HY +^Ka+_ҖGm~oS+i+W ^[&(L0oxc|N`,i*qmgwi ݬzON&,3լµR~O֕8DyM|pi Ӳo3/@Cil#.adg[ъIz"bn wc#C$+<.܋ q5ieWh0;+^}0a"+w4kۭ-:^`IeTn]&Ep⎽pl[GQ=lAOPYߨn;p/քG;>۾?֦ <_ShܛrCȭB&0g_&8xɭх r-艇oeD!% (eJܶS7 UA3Z]ߠ Ʉ{tV=Z'%8d]yxMpm D=tFQ|;B +@Y .#XۮxC-]8`% +.>k]`wVī.>@/hÄ5;[7[rvOz5y3iT\=gR/?^ $EkhPOe?hjZ1z@]:4lG8" + /c(4r<7zIIvn Trɲez':)ʙ~GxPI|;Mv HjMaGnTwY0R9A-~rq'F'&1* cicW`Cur{yu7\;|g/_vKR\KRqWN`H} tIk{OKp؅s<=zFF4㍥~~QmАਗWw3YCo~aI#<^/"p>$7R7Pi:#/rX?JwlϔbD)WزPЇW wC}z%y^;CRcSۆo^\kz[*R.YT# {?{?}$&&zY[,a|03hmtp˫,T hy_m]w1̣ ?>)9ǾJ ~ݤ ڭ7c T#bdLE;ń>Dbx+~^!Ep|6j`ȃZ4#1 "|3(#ŀ{q ~,p`T4l*{AyfHkA~9a̧*lRnU9W(ZУY9X6ru@91LY!xZ䜮fΗ88 +J!_$\R&61ЈW6M 􆣶10('fAɁ΁lr`&69z5́LM/Q2 թK!m +[m+HQv Q,r[[7((1mX!D*}  +}R./#Růff%/Kz ?dE½Μ z "0CmېLgFm(]dO0Hur2!X3$&0oss endstream endobj 6 0 obj [5 0 R] endobj 34 0 obj <> endobj xref 0 35 0000000000 65535 f +0000000016 00000 n +0000000144 00000 n +0000051446 00000 n +0000000000 00000 f +0000053694 00000 n +0000298634 00000 n +0000051497 00000 n +0000051888 00000 n +0000054474 00000 n +0000053992 00000 n +0000054178 00000 n +0000053879 00000 n +0000052939 00000 n +0000053133 00000 n +0000053181 00000 n +0000053763 00000 n +0000053794 00000 n +0000054356 00000 n +0000054547 00000 n +0000054985 00000 n +0000056221 00000 n +0000072947 00000 n +0000091171 00000 n +0000106198 00000 n +0000121877 00000 n +0000132471 00000 n +0000151293 00000 n +0000175243 00000 n +0000202736 00000 n +0000230000 00000 n +0000256739 00000 n +0000282942 00000 n +0000294654 00000 n +0000298657 00000 n +trailer <<64F5CEC204E044BBAF23F53F9C0F7329>]>> startxref 298847 %%EOF \ No newline at end of file diff --git a/información/LOGOS RR/RR LOGO 004.eps b/información/LOGOS RR/RR LOGO 004.eps new file mode 100644 index 0000000..459996b Binary files /dev/null and b/información/LOGOS RR/RR LOGO 004.eps differ diff --git a/información/LOGOS RR/RR LOGO 004.jpg b/información/LOGOS RR/RR LOGO 004.jpg new file mode 100644 index 0000000..4dfda55 Binary files /dev/null and b/información/LOGOS RR/RR LOGO 004.jpg differ diff --git a/información/LOGOS RR/RR LOGO 004.pdf b/información/LOGOS RR/RR LOGO 004.pdf new file mode 100644 index 0000000..4b3ee9e --- /dev/null +++ b/información/LOGOS RR/RR LOGO 004.pdf @@ -0,0 +1,1564 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + RR LOGO 004 + + + + + 2013-11-03T14:18:21+04:00 + 2013-11-03T14:18:21+04:00 + 2013-11-03T14:18:21+04:00 + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 152 + JPEG + /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAmAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A5vm+eVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdiqfeQP+U78t/9tSy/6iEyGX6D7i24P7yPvD7TzSPSuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2Kvg7N88q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FU+8gf 8p35b/7all/1EJkMv0H3Ftwf3kfeH2nmkeldirsVdirsVdirsVdirsVdirsVdirsVfB2b55V2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kp95A/5Tvy3/wBtSy/6iEyGX6D7i24P7yPvD7Tz SPSuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kvg7N88q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FU+8gf8p35b/wC2pZf9RCZDL9B9xbcH95H3h9p5pHpXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXwdm+eVdirsVdirsVdiqaeXPLOueY9STTtHtWurlhyYCgVFrQu7H4VUeJyM5iIstmLFKZqL2fQf +cY4fSR9f1h/VNOdvYoAF9hLKGr/AMBmFPW9wdlDs0V6j8mRL/zjf+X4UAzagxAoWM0dT77RDKvz k/JvHZ+Pzb/6Fw/L7/ft/wD8jo/+qeP5yfkv5DE7/oXD8vv9+3//ACOj/wCqeP5yfkv5DE7/AKFw /L7/AH7f/wDI6P8A6p4/nJ+S/kMTv+hcPy+/37f/API6P/qnj+cn5L+QxO/6Fw/L7/ft/wD8jo/+ qeP5yfkv5DE7/oXD8vv9+3//ACOj/wCqeP5yfkv5DE7/AKFw/L7/AH7f/wDI6P8A6p4/nJ+S/kMT v+hcPy+/37f/API6P/qnj+cn5L+QxO/6Fw/L7/ft/wD8jo/+qeP5yfkv5DElXmj8nPKflDQrnzRp Et3+lNG4Xtl60iPH6sMisnNQi1FR0rk4aiUzwnkWGTSQxxMhzjuwH/oYX8yP9/2v/SOv9cyPykHD /lHJ5O/6GF/Mj/f9r/0jr/XH8pBf5RyeTv8AoYX8yP8Af9r/ANI6/wBcfykF/lHJ5O/6GF/Mj/f9 r/0jr/XH8pBf5RyeTv8AoYX8yP8Af9r/ANI6/wBcfykF/lHJ5O/6GF/Mj/f9r/0jr/XH8pBf5Rye Tv8AoYX8yP8Af9r/ANI6/wBcfykF/lHJ5O/6GF/Mj/f9r/0jr/XH8pBf5RyeTv8AoYX8yP8Af9r/ ANI6/wBcfykF/lHJ5O/6GF/Mj/f9r/0jr/XH8pBf5RyeSpB/zkV+YkUnJzZTr/JJAQP+EdD+OA6O Hmn+Ucnkzfyp/wA5KabdTpbeZLA2HM0+u2xMkQr3eM/Go9wW+WUZNGR9JtysXaMTtIU9mtbq2u7a K6tZVntp1EkM0ZDKysKhlI6g5hkU7AG3wnm9eWdirsVdirsVbRHkdURSzsQqqNySdgBioFvsP8sv Itp5Q8swWYjX9JTqsupXAA5PKRXjy/ljrxX7+5zTZspnK+j0enwjHGurLcqb3Yq7FXYq7FXYq7FX Yq7FXYq7FWI/m1/5LfX/APmFP/EhluD6w06n+7l7nx5m5ebdirsVdirsVdirsVdirsVdirsVdir2 r/nHTz3cW+qP5SvZS1pdq0umhjX05kBd418FdQW+Y98wtZi24g7Ts/PvwH4PFczXVuxV2KuxV2Ks t/KfS49T/MbQbWQBkFz67Keh+rK09DX/AIx5VqJVAuRpI3liH2JmmeidirsVSbXPOXlXQnWPV9Vt rOVhVYZJB6hHjwFWp70ycccpcgwnljHmQEq/5W1+W/8A1f7X72/pkvAn3MPzOP8AnB3/ACtr8t/+ r/a/e39MfAn3L+Zx/wA4O/5W1+W//V/tfvb+mPgT7l/M4/5wd/ytr8t/+r/a/e39MfAn3L+Zx/zg 7/lbX5b/APV/tfvb+mPgT7l/M4/5wTLQvPPlLXrt7PR9ThvbmOMzPFESSIwwUtuBtVwMjLHKO5DK GWEjQIKeZBsdirEfza/8lvr/APzCn/iQy3B9YadT/dy9z48zcvNuxV2Kshg/Lvz3cQR3EGg30kMy rJFIsDlWVhVWBp0Iys5od7eNLkPRU/5Vp+YP/Uu3/wD0jyf0wePDvCfymX+a7/lWn5g/9S7f/wDS PJ/THx4d4X8pl/mu/wCVafmD/wBS7f8A/SPJ/THx4d4X8pl/mu/5Vp+YP/Uu3/8A0jyf0x8eHeF/ KZf5rv8AlWn5g/8AUu6h/wBI8n9MfHh3hfymX+akF5ZXllcPbXkEltcxmkkEyNG6n3VgCMtBB5NE okGjso4odiqa+U9TfS/M+k6ipp9Vu4ZW91WQFh9K1GRyRuJDbglwzB80qyTU7FXYq7FXYq9F/IBV P5mWBLUKw3JUeJ9FhT7jXMbV/Q53Z/8AefB9WZqneOxVj35geZm8s+T9T1qMBp7aIC3VtwZpWEcd R3AZwT7ZZihxSAas+TggZPjW9vry+u5ry8me4up2LzTSEszMepJOboAAUHm5SMjZ5qOKHYq7FXYq 7FXrX/OM/wDynd//ANsuX/qIt8xNb9A97sOzf7w+79T6XzWO6dirEfza/wDJb6//AMwp/wCJDLcH 1hp1P93L3PjzNy827FXYq+2vJ/8AyiWif8wFr/yZXNJk+o+96iH0hN8gydirsVdirsVYD+cvkiw8 x+Uby69JRqulwvc2dwB8fGIF3iJ7q6g7eNDmRp8pjLyLjavCJwPeOT5MzbPPOxV2KuxV2KuxV2Ku xVnn5G3aW35naOXICy+vDU+LwOF+9qDKNULxly9DKsofWuah37sVYV+cuj3Oq/lxrEFspeeJEuVQ dSsEiyOP+AVsu08qmHH1cDLGQHyHm4eddirsVdirsVdir1r/AJxn/wCU7v8A/tly/wDURb5ia36B 73Ydm/3h936n0vmsd07FWI/m1/5LfX/+YU/8SGW4PrDTqf7uXufHmbl5t2KuxV9teT/+US0T/mAt f+TK5pMn1H3vUQ+kJvkGTsVdirsVdirH/wAwNattG8l6xf3DABLWSOIH9qWVTHGv0uwyzFHikA15 piMCXxdm6eZdiqvY2r3d7b2qAl7iVIlA61dgo/XgJoWyhGyB3qGFi7FXYq7FXYqjNG1W50nV7LVL X/eixmjuIq9C0bBgD7GlDglGxTPHMxkCOj7S8teYdN8xaLa6vp0gktrpA1P2kb9qNvBlOxzSTgYm i9JCYkLHJM8izcRXY9MVeReaP+ccfLeqX0t5pN9Jo5mbk9uIhPACTU+mnKNlHtyoO222ZkNZICju 4GXs+EjY2ST/AKFb/wC/m/6cf+zjJ/nvL7Wn+TP6X2ftd/0K3/383/Tj/wBnGP57y+1f5M/pfZ+1 3/Qrf/fzf9OP/Zxj+e8vtX+TP6X2ftd/0K3/AN/N/wBOP/Zxj+e8vtX+TP6X2ftd/wBCt/8Afzf9 OP8A2cY/nvL7V/kz+l9n7WW/ln+TH+CNen1X9MfpD17V7X0fq3o05yRycuXqy/76pSnfKs2p4xVU 5Gm0fhSu72el5iua7FWI/m1/5LfX/wDmFP8AxIZbg+sNOp/u5e58eZuXm3Yq7FXs2k/85JX2naVZ aeuhRSLZwRW4kNwwLCJAnKnpmlaZhS0YJu3Zx7SoVw/b+xF/9DQ6h/1L8X/SS3/VPB+RHen+U/6P 2/sd/wBDQ6h/1L8X/SS3/VPH8iO9f5T/AKP2/sd/0NDqH/Uvxf8ASS3/AFTx/IjvX+U/6P2/sd/0 NDqH/Uvxf9JLf9U8fyI71/lP+j9v7Gm/5yh1Gh4+X4QexNwxFf8AkWMfyI71/lP+j9v7Hnvnz80P M3nN401F0gsIW5w2FuCsQelObVLM7U7k7dqVzIxYIw5c3Ez6qWTnyYjlzjOxV6N+Rnky517zlb6g 8Z/Rmjut1cSkfCZV3hjHuXHI+wzG1WThjXUubocJlO+gec5kuE7FXYq7FXYq7FWQeT/Onmryzfep oN08bzkLJacfUjlPYNGa1PYEb+ByvJjjIbt2HPOB9PyfR3kzzn+ZuqQxNq3k/wCrxtTld/WFtuvf 6vNyk/HNbkxwHKTu8OXJL6o1+O56FGXKKXXg5ALLWtD3Fcx3JbxV2KuxV2KuxV2KuxV2KuxViP5t f+S31/8A5hT/AMSGW4PrDTqf7uXufHmbl5t2KuxV2KuxV2KuxV2KuxV2Kr4VjaVVkf04yfienKg+ QxKYgXu9W/L38u/ys1q4iW+81G6umI46aIzYlm/kDzcjJX/IocxM2bJHlH9LsdPpsMj9V+XJ9F6P oulaNYR6fpdrHZ2cX2IYhQVPUnuSe5O5zXSkSbLtoxERQ5PhvN48u7FXYq7FXYqqW9vNcXEVvAhk mmdY4kHVmY0UD5k4k0kAk0H1r+Wn5W6N5P02KR4UuNdkQG7vmHIqxG8cVfsoOm27d/bUZs5mfJ6D T6aOMebOMocl2KuxV2KuxV2KuxV2KuxV2KuxViP5tf8Akt9f/wCYU/8AEhluD6w06n+7l7nx5m5e bdirsVdirsVdirsVdirsVdirsVdir3H8iPzT1JtTh8qa1cNcW9wCumXEpq8bqKiEseqsB8Neh26H bB1WAVxB2uh1RJ4JfB4dmc6p2KuxV2KuxVl/5R20Vz+ZOgRyiqrc+qB/lRI0i/8ADKMp1BqBcnRi 8ofYWad6F2KtO6ojO5oqgliewG5xV8Z+dfPuv+atWuLu9upRaO7fVbEMRFFHU8VCD4a8erdTm6xY hAPO59RLITvsxvLHHdirsVdirsVetf8AOM//ACnd/wD9suX/AKiLfMTW/QPe7Ds3+8Pu/U+l81ju nYqxH82v/Jb6/wD8wp/4kMtwfWGnU/3cvc+PM3LzbsVdir7T8o2Fi3lPRWa3iLGwtSSUUkkwr7Zp MhPEfe9PAekJt+jtP/5Zov8AgF/pkbLOnfo7T/8Almi/4Bf6Y2Vp36O0/wD5Zov+AX+mNlad+jtP /wCWaL/gF/pjZWmm0zTXUq9pCynYqY1II+7Gyinhn/OQX5daFpul23mPR7RLKT1xb3sEChImEisy ycV+FSGWhoN65naTMSeEus1+niI8QFPCsz3UuxVM/K1zLa+ZtJuYjSSG8t3Q+6yqRkcguJ9zbgNT j7wlmSanYq7FXYq7FWafkz/5M3Qv+Msn/Jl8p1P92XK0X96Px0fXuad6B2KofUf+Ofc/8Yn/AOIn COal8LZvXlXYq7FXYq7FXYq9a/5xn/5Tu/8A+2XL/wBRFvmJrfoHvdh2b/eH3fqfS+ax3TsVYj+b X/kt9f8A+YU/8SGW4PrDTqf7uXufHmbl5t2KuxV9teT/APlEtE/5gLX/AJMrmkyfUfe9RD6Qm+QZ OxV2KuxV2KvM/wDnIf8A8lxL/wAxVv8ArOZOk+tw9d/dF8tZtXQuxVHaD/x3dO/5iof+Ti5Gf0ls w/WPeEDkmt2KuxV2KuxVO/JPmNPLfmnT9beA3K2Ts5gVuBbkjJ9ohqfa8MhlhxRIbsGTgmJdz2X/ AKGhsf8AqXpf+klf+qeYX5I97sv5Sj3F3/Q0Nj/1L0v/AEkr/wBU8fyR71/lKPcVK5/5ycsZreWH /D8q+ojJX6yppyFP994jRHvX+Uo9xeCZsHTuxV2KuxV2KuxVmH5X+fIvJOv3Gqy2bXyz2j2oiWQR kF5I5OVSr/77plOfFxinJ0ucY5We56h/0NDY/wDUvS/9JK/9U8xfyR73P/lKPcXf9DQ2P/UvS/8A SSv/AFTx/JHvX+Uo9xQmqfnfB52sz5Rg0h7KbXZIrCO7ecOsbTyqgdlEakgV8cI0xh6r5IlrY5Bw V9W3zQf/AELDr/8A1erX/kXJkvzo7mH8mH+d9jv+hYdf/wCr1a/8i5Mfzo7l/kw/zvsd/wBCw6// ANXq1/5FyY/nR3L/ACYf532Pe9EsH07RbDT3YO9nbQ27OuwYxRhCRXxpmvkbJLtYihSNwJdirsVd irsVYp+Znk2683+V30a2uEtZWmjl9WQFlpGSSKLvluHJwStp1GLxIcLyL/oWHX/+r1a/8i5MzPzo 7nX/AMmH+d9jv+hYdf8A+r1a/wDIuTH86O5f5MP877ERp3/ONeu2moWt02s2rLBLHKVEclSEYNT8 MEtYCKplDs4iQPFyeHZnOpdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqfeQP+U78t/9 tSy/6iEyGX6D7i24P7yPvD7TzSPSuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kvg7N88q7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FU+8gf8p35b/7all/1EJkMv0H3Ftwf3kfeH2nmkeldirsV dirsVdirsVdirsVdirsVdirsVfB2b55V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kp9 5A/5Tvy3/wBtSy/6iEyGX6D7i24P7yPvD7TzSPSuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kviz/AHn v/qW9U/6Qrj/AJozd+LDvHzea8DJ/NPyd/gDz3/1Leqf9IVx/wA0Y+LDvHzXwMn80/J3+APPf/Ut 6p/0hXH/ADRj4sO8fNfAyfzT8nf4A89/9S3qn/SFcf8ANGPiw7x818DJ/NPyd/gDz3/1Leqf9IVx /wA0Y+LDvHzXwMn80/J3+APPf/Ut6p/0hXH/ADRj4sO8fNfAyfzT8nf4A89/9S3qn/SFcf8ANGPi w7x818DJ/NPyd/gDz3/1Leqf9IVx/wA0Y+LDvHzXwMn80/J3+APPf/Ut6p/0hXH/ADRj4sO8fNfA yfzT8nf4A89/9S3qn/SFcf8ANGPiw7x818DJ/NPyd/gDz3/1Leqf9IVx/wA0Y+LDvHzXwMn80/J3 +APPf/Ut6p/0hXH/ADRj4sO8fNfAyfzT8nf4A89/9S3qn/SFcf8ANGPiw7x818DJ/NPyd/gDz3/1 Leqf9IVx/wA0Y+LDvHzXwMn80/J3+APPf/Ut6p/0hXH/ADRj4sO8fNfAyfzT8nf4A89/9S3qn/SF cf8ANGPiw7x818DJ/NPyd/gDz3/1Leqf9IVx/wA0Y+LDvHzXwMn80/J3+APPf/Ut6p/0hXH/ADRj 4sO8fNfAyfzT8k68keSPOlt500C4uNA1KG3h1K0kmmktJ1REWdCzMxQAAAVJOV5csTE7jk24cMxO JMTzHR9c5qHoHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/2Q== + + + + + + uuid:f225d702-ff8a-9644-8c60-9d2714a3bdf9 + xmp.did:E68322F607206811822AB503FB0ACEDA + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + xmp.iid:0980117407206811822AB503FB0ACEDA + xmp.did:0980117407206811822AB503FB0ACEDA + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:0280117407206811822AB503FB0ACEDA + 2013-11-03T14:15:38+04:00 + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:E68322F607206811822AB503FB0ACEDA + 2013-11-03T14:18:19+04:00 + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Print + + + False + False + 1 + + 25.647702 + 15.256089 + Millimeters + + + + PANTONE 7700 C + + + + + + Grupo de muestras por defecto + 0 + + + + Blanco + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Negro + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Rojo CMYK + CMYK + PROCESS + 0.000000 + 100.000000 + 100.000000 + 0.000000 + + + Amarillo CMYK + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Verde CMYK + CMYK + PROCESS + 100.000000 + 0.000000 + 100.000000 + 0.000000 + + + Cian CMYK + CMYK + PROCESS + 100.000000 + 0.000000 + 0.000000 + 0.000000 + + + Azul CMYK + CMYK + PROCESS + 100.000000 + 100.000000 + 0.000000 + 0.000000 + + + Magenta CMYK + CMYK + PROCESS + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=15 M=100 Y=90 K=10 + CMYK + PROCESS + 14.999998 + 100.000000 + 90.000000 + 10.000002 + + + C=0 M=90 Y=85 K=0 + CMYK + PROCESS + 0.000000 + 90.000000 + 85.000000 + 0.000000 + + + C=0 M=80 Y=95 K=0 + CMYK + PROCESS + 0.000000 + 80.000000 + 95.000000 + 0.000000 + + + C=0 M=50 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 50.000000 + 100.000000 + 0.000000 + + + C=0 M=35 Y=85 K=0 + CMYK + PROCESS + 0.000000 + 35.000004 + 85.000000 + 0.000000 + + + C=5 M=0 Y=90 K=0 + CMYK + PROCESS + 5.000001 + 0.000000 + 90.000000 + 0.000000 + + + C=20 M=0 Y=100 K=0 + CMYK + PROCESS + 19.999998 + 0.000000 + 100.000000 + 0.000000 + + + C=50 M=0 Y=100 K=0 + CMYK + PROCESS + 50.000000 + 0.000000 + 100.000000 + 0.000000 + + + C=75 M=0 Y=100 K=0 + CMYK + PROCESS + 75.000000 + 0.000000 + 100.000000 + 0.000000 + + + C=85 M=10 Y=100 K=10 + CMYK + PROCESS + 85.000000 + 10.000002 + 100.000000 + 10.000002 + + + C=90 M=30 Y=95 K=30 + CMYK + PROCESS + 90.000000 + 30.000002 + 95.000000 + 30.000002 + + + C=75 M=0 Y=75 K=0 + CMYK + PROCESS + 75.000000 + 0.000000 + 75.000000 + 0.000000 + + + C=80 M=10 Y=45 K=0 + CMYK + PROCESS + 80.000000 + 10.000002 + 45.000000 + 0.000000 + + + C=70 M=15 Y=0 K=0 + CMYK + PROCESS + 70.000000 + 14.999998 + 0.000000 + 0.000000 + + + C=85 M=50 Y=0 K=0 + CMYK + PROCESS + 85.000000 + 50.000000 + 0.000000 + 0.000000 + + + C=100 M=95 Y=5 K=0 + CMYK + PROCESS + 100.000000 + 95.000000 + 5.000001 + 0.000000 + + + C=100 M=100 Y=25 K=25 + CMYK + PROCESS + 100.000000 + 100.000000 + 25.000000 + 25.000000 + + + C=75 M=100 Y=0 K=0 + CMYK + PROCESS + 75.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=50 M=100 Y=0 K=0 + CMYK + PROCESS + 50.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=35 M=100 Y=35 K=10 + CMYK + PROCESS + 35.000004 + 100.000000 + 35.000004 + 10.000002 + + + C=10 M=100 Y=50 K=0 + CMYK + PROCESS + 10.000002 + 100.000000 + 50.000000 + 0.000000 + + + C=0 M=95 Y=20 K=0 + CMYK + PROCESS + 0.000000 + 95.000000 + 19.999998 + 0.000000 + + + C=25 M=25 Y=40 K=0 + CMYK + PROCESS + 25.000000 + 25.000000 + 39.999996 + 0.000000 + + + C=40 M=45 Y=50 K=5 + CMYK + PROCESS + 39.999996 + 45.000000 + 50.000000 + 5.000001 + + + C=50 M=50 Y=60 K=25 + CMYK + PROCESS + 50.000000 + 50.000000 + 60.000004 + 25.000000 + + + C=55 M=60 Y=65 K=40 + CMYK + PROCESS + 55.000000 + 60.000004 + 65.000000 + 39.999996 + + + C=25 M=40 Y=65 K=0 + CMYK + PROCESS + 25.000000 + 39.999996 + 65.000000 + 0.000000 + + + C=30 M=50 Y=75 K=10 + CMYK + PROCESS + 30.000002 + 50.000000 + 75.000000 + 10.000002 + + + C=35 M=60 Y=80 K=25 + CMYK + PROCESS + 35.000004 + 60.000004 + 80.000000 + 25.000000 + + + C=40 M=65 Y=90 K=35 + CMYK + PROCESS + 39.999996 + 65.000000 + 90.000000 + 35.000004 + + + C=40 M=70 Y=100 K=50 + CMYK + PROCESS + 39.999996 + 70.000000 + 100.000000 + 50.000000 + + + C=50 M=70 Y=80 K=70 + CMYK + PROCESS + 50.000000 + 70.000000 + 80.000000 + 70.000000 + + + PANTONE Cool Gray 9 C + SPOT + 100.000000 + LAB + 50.196079 + 0 + -2 + + + PANTONE 7700 C + SPOT + 100.000000 + LAB + 35.686275 + -11 + -26 + + + + + + Grises + 1 + + + + C=0 M=0 Y=0 K=100 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + C=0 M=0 Y=0 K=90 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 89.999405 + + + C=0 M=0 Y=0 K=80 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 79.998795 + + + C=0 M=0 Y=0 K=70 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 69.999702 + + + C=0 M=0 Y=0 K=60 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 59.999104 + + + C=0 M=0 Y=0 K=50 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 50.000000 + + + C=0 M=0 Y=0 K=40 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 39.999401 + + + C=0 M=0 Y=0 K=30 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 29.998802 + + + C=0 M=0 Y=0 K=20 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 19.999701 + + + C=0 M=0 Y=0 K=10 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 9.999103 + + + C=0 M=0 Y=0 K=5 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 4.998803 + + + + + + Brillantes + 1 + + + + C=0 M=100 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 100.000000 + 100.000000 + 0.000000 + + + C=0 M=75 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 75.000000 + 100.000000 + 0.000000 + + + C=0 M=10 Y=95 K=0 + CMYK + PROCESS + 0.000000 + 10.000002 + 95.000000 + 0.000000 + + + C=85 M=10 Y=100 K=0 + CMYK + PROCESS + 85.000000 + 10.000002 + 100.000000 + 0.000000 + + + C=100 M=90 Y=0 K=0 + CMYK + PROCESS + 100.000000 + 90.000000 + 0.000000 + 0.000000 + + + C=60 M=90 Y=0 K=0 + CMYK + PROCESS + 60.000004 + 90.000000 + 0.003099 + 0.003099 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 12 0 R/TrimBox[28.3465 28.3465 101.049 71.5921]/Type/Page>> endobj 8 0 obj <>stream +HlKN1 9/0nI V!`c"A/$CKH|?v7{_!P2dS: spO˅A-K- r1LQ/c)UBSaJz4(JZgBLr"r.rChh%äX~1cau%1F9s+9&䑱4y&B1L^ + r0Ub0zϒJcG`eC\yD.F+(BF ^3]oL6A KJ^G>+Q/o0Zq-^ۿ4Z[/;t6*(lv=-\둘P47w>OGH endstream endobj 12 0 obj <>stream +8;Xp,ST8,^#D>Wq%O2Hn&4Vce6F]-Ged.Uk;?/t4!GM8T~> endstream endobj 13 0 obj [/Indexed/DeviceRGB 255 14 0 R] endobj 14 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 11 0 obj <> endobj 10 0 obj [/Separation/PANTONE#207700#20C 17 0 R<>] endobj 17 0 obj [/Lab<>] endobj 9 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (GAG) () %%Title: (RR LOGO 003.pdf) %%CreationDate: 03/11/13 14:18 %%Canvassize: 16383 %%BoundingBox: 7 -246 68 -209 %%HiResBoundingBox: 7.60986 -245.1309 67.2227 -209.9688 %%DocumentProcessColors: %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%DocumentCustomColors: (PANTONE 7700 C) %%RGBCustomColor: 0.11025 0.353432 0.48886 (PANTONE 7700 C) %%+ 0.468179 0.467416 0.47835 (PANTONE Cool Gray 9 C) %%CMYKProcessColor: 1 1 1 1 ([Registro]) %AI3_Cropmarks: 0 -249.0635 72.7021 -205.8179 %AI3_TemplateBox: 113.5 -227.5 113.5 -227.5 %AI3_TileBox: -366.6489 -506.9404 416.3516 52.0596 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -98.3042 -162.937 3.8712 1196 689 18 0 0 78 98 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 56.6929 8 56.6929 8 1 0 0.756863 0.145098 0.129412 0.878431 0.572549 0.564706 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 20 0 obj <>stream +%%BoundingBox: 7 -246 68 -209 %%HiResBoundingBox: 7.60986 -245.1309 67.2227 -209.9688 %AI7_Thumbnail: 128 76 8 %%BeginData: 14846 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C452F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C0D7DFD34FF062F062E062F062E %062F062E062F062E062F062E062F062E062F062E062F062E062F062E062F %062E062F062E062F062E062F062E062F062E062F062E062F062E062F062E %062F062E062F067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F7DFD34FF %060C062F060C062F060C062F060C062F060C062F060C062F060C062F060C %062F060C062F060C062F060C062F060C062F060C062F060C062F060C062F %060C062F060C062F060C062F060C067EFD34FF2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F7DFD34FF062E062F062E062F062E062F062E062F062E062F062E %062F062E062F062E062F062E062F062E062F062E062F062E062F062E062F %062E062F062E062F062E062F062E062F062E062F062E067EFD34FF2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C0C7DFD34FF062F060C062F060C062F060C062F %060C062F060C062F060C062F060C062F060C062F060C062F060C062F060C %062F060C062F060C062F060C062F060C062F060C062F060C062F060C062F %067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C0D7DFD34FF062F062E062F %062E062F062E062F062E062F062E062F062E062F062E062F062E062F062E %062F062E062F062E062F062E062F062E062F062E062F062E062F062E062F %062E062F062E062F067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F7DFD %34FF060C062F060C062F060C062F060C062F060C062F060C062F060C062F %060C062F060C062F060C062F060C062F060C062F060C062F060C062F060C %062F060C062F060C062F060C062F060C067EFD34FF2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F7DFD34FF062E062F062E062F062E062F062E062F062E062F %062E062F062E062F062E062F062E062F062E062F062E062F062E062F062E %062F062E062F062E062F062E062F062E062F062E062F062E067EFD34FF2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C0C7DFD34FF062F060C062F060C062F060C %062F060C062F060C062F060C062F060C062F060C062F060C062F060C062F %060C062F060C062F060C062F060C062F060C062F060C062F060C062F060C %062F067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F062F0C2F062F0C2F062F0C2F062F0C2F062F0C2F062F %0C2F062F0C2F062F0C2F062F0C2F062F0C2F062F0C0C7DFD34FF062F062E %062F062E062F062E062F062E062F062E062F062E062F060C062F537D7DA8 %7E847DA87E847DA87E847DA87E847DA87E847DA87E847DA87E847DA87E84 %7DA87E847DA87E847DA87E592F5953595359535953595359535953595359 %535953595359535953595359535953595359535953595359537D7EFD07FF %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F2E84A9 %FD2DFF530C062F0C2F062F0C2F062F0C2F062F0C2F062F0C2F062F0C2F06 %2F0C2F062F0C2F062F0C2F062F0C2F062F062F0C7EA9FD04FF060C062F06 %0C062F060C062F060C062F060C062F060C062F060C53FD30FF59060C062F %060C062F060C062F060C062F060C062F060C062F060C062F060C062F060C %062F060C062F060C062F060C062F7EFFFFFF2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F53FD31FF532F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2FA8FFFF062E062F062E062F062E062F062E062F062E062F %062E062F2EFD32FF59062E062F062E062F062E062F062E062F062E062F06 %2E062F062E062F062E062F062E062F062E062F062E062F062E062F062FA8 %FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F06A8FD32FF53 %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F067EFF062F060C062F060C %062F060C062F060C062F060C062F062FA8FD32FF59062F060C062F060C06 %2F060C062F060C062F060C062F060C062F060C062F060C062F060C062F06 %0C062F060C062F060C062E0CFF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F59FD33FF532F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F7E062F062E062F062E062F062E062F062E062F062E062F06A8FD33FF %59062F062E062F062E062F062E062F062E062F062E062F062E062F062E06 %2F062E062F062E062F062E062F062E062F062E062F067D2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F062FA8FD33FF532F0C2F0C2F0C2F0C2F %0C2F0C2F062F0C2F062F0C2F062F0C2F062F0C2F062F0C2F062F0C0C062F %0C2F0C2F0C2F0C2F0C2F0C2F53060C062F060C062F060C062F060C062F06 %0C062F060C06FD0EFFA8535953592F5953592F5953592F5953592F595359 %2F5953537DFD0CFF59060C062F060C062F060C062E53A87DA87D847DA87D %847DA87D847DA87D847DA87D847DA8592E062F060C062F060C062F060C06 %2F2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0659FD0DFF7E062F %0C2F062F0C2F062F0C2F062F0C2F062F0C2F062F0C2F0684FD0CFF532F0C %2F0C2F0C2F0C2F0C2F0CA8FD18FFA8590C2F0C2F0C2F0C2F0C2F0C2F0C06 %2E062F062E062F062E062F062E062F062E062F060C2EFD0CFFA8060C062F %062E062F062E062F062E062F062E062F062E062F060C7DFD0CFF59062E06 %2F062E062F062E062E7EFD19FFA82F062E062F062E062F062E062F2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C59FD0CFF2F2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F067EFD0CFF532F0C2F0C2F %0C2F0C2F0C2F06A8FD1AFF592F0C2F0C2F0C2F0C2F0C2F0C062F060C062F %060C062F060C062F060C062F060C062E2EFD0BFFA82E062F060C062F060C %062F060C062F060C062F060C062F060C060C7DFD0CFF59062F060C062F06 %0C062F060C7DFD1AFFA8062F060C062F060C062F060C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C59FD0CFF0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0684FD0CFF532F0C2F0C2F0C2F0C2F0C %2F06A8FD1AFFA82F0C2F0C2F0C2F0C2F0C2F0C062F062E062F062E062F06 %2E062F062E062F062E062F2EFD0BFFA82E062F062E062F062E062F062E06 %2F062E062F062E062F062E060C7DFD0CFF59062F062E062F062E062F060C %7DFD1AFFA8062F062E062F062E062F062F2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F062FFD0CFF2F2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0684FD0CFF532F0C2F0C2F0C2F0C2F0C2F0CA8FD1A %FF7D0C0C2F0C2F0C2F0C2F0C2F2F060C062F060C062F060C062F060C062F %060C062F060C06A9FD0BFF84060C062F060C062F060C062F060C062F060C %062F060C062F060C59FD0CFF59060C062F060C062F060C060C7DFD19FFA8 %2F060C062F060C062F060C06592F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F7EFD0CFF59062F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0684FD0CFF532F0C2F0C2F0C2F0C2F0C2F0CA8FD19FF7E0C2F %0C2F0C2F0C2F0C2F0C2F7E062E062F062E062F062E062F062E062F062E06 %2F062E0659FD0DFF7E2E2F0C2F062F0C2F062F0C2F062F0C2F062F0C2F06 %2F0C0C7DFD0CFF59062E062F062E062F062E062F7DFFA8FFA8A9A8FFA8A9 %A8FFA8A9A8FFA8A9A8FFA8A9A8A97E53062F062E062F062E062F060C06A9 %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F06A9FD32FF532F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0659FF062F060C062F060C06 %2F060C062F060C062F060C062F060C2EFD32FF59062F060C062F060C062F %060C062E060C062E060C062E060C062E060C062E060C062E060C062F060C %062F060C062F060C062FA8FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F2FA8FD30FF532F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0659FFFFFF062F062E062F062E062F062E062F062E062F062E062F062E06 %2F06537DFFA9FD2CFF59062F062E062F062E062F062E062F062E062F062E %062F062E062F062E062F062E062F062E062F062E062F062E062F53A8FD04 %FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F060C %0C5984FD2BFF532F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F2F84A8FD06FF060C062F %060C062F060C062F060C062F060C062F060C062F060C06537DA8A8FD2CFF %59060C062F060C062F060C062F060C062F060C062F060C062F060C062F06 %0C062F060C062F060C062F060C062F062F53A9FD04FF2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0CA8FD30FF532F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C7EFFFFFF062E062F062E062F062E062F062E06 %2F062E062F062E062F2EA9FD31FF59062E062F062E062F062E062F062E06 %2F062E062F062E062F062E062F062E062F062E062F062E062F062E062F06 %2E062F062FA8FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F %06A9FD32FF532F0C2F0C2F0C2F0C2F0C2F0C2F0C2F062F0C2F062F0C2F06 %2F0C2F062F0C2F062F0C2F062F0C2F0C2F0C2F0C2F0C2F0C2F067DFF062F %060C062F060C062F060C062F060C062F060C062F0659FD10FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD0EFF59062F060C062F060C062F %060C062F062E062F062E062F062E062F062E062F062E062F060C062E060C %062F060C062F060C062E06A82F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F7EFD0DFF7E592E2F2E2F2E2F2E2F2E2F2E2F2E2F2E2F2E2F2E %2F2E2F0C84FD0CFF532F0C2F0C2F0C2F0C2F0C2F0684FFFFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A82F2F0C2F0C2F0C2F0C2F0C2F0C2F %7D062F062E062F062E062F062E062F062E062F062E062F06A8FD0CFF7D0C %060C062F060C062F060C062F060C062F060C062F060C060C7DFD0CFF5906 %2F062E062F062E062F060C7EFD19FF2E0C062F062E062F062E062F06592F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F062FA8FD0CFF2F062F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0684FD0CFF532F0C2F %0C2F0C2F0C2F0C2F0CA8FD19FF84062F0C2F0C2F0C2F0C2F0C2F53060C06 %2F060C062F060C062F060C062F060C062F060C06AFFD0CFF060C062F060C %062F060C062F060C062F060C062F060C062F060C59FD0CFF59060C062F06 %0C062F060C060C7DFD19FF7E2E060C062F060C062F060C06592F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2FA8FD0BFFA82F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0684FD0CFF532F0C2F0C2F0C %2F0C2F0C2F0CA8FD19FFA90C2F0C2F0C2F0C2F0C2F0C2F53062E062F062E %062F062E062F062E062F062E062F060C06FD0DFF0C0C062F062E062F062E %062F062E062F062E062F062E062F060C7DFD0CFF59062E062F062E062F06 %2E062E7EFD19FF842F062E062F062E062F062E06592F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2FA8FD0BFFA82F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F067EFD0CFF532F0C2F0C2F0C2F0C2F0C %2F06A8FD19FFA8062F0C2F0C2F0C2F0C2F0C2F53062F060C062F060C062F %060C062F060C062F060C062E06A9FD0BFFA9062E060C062F060C062F060C %062F060C062F060C062F060C060C7DFD0CFF59062F060C062F060C062F06 %0C7DFD19FFA80C062F060C062F060C062F06532F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2FA8FD0BFFA82F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0684FD0CFF532F0C2F0C2F0C2F0C2F0C2F06 %A8FD19FFA90C2F0C2F0C2F0C2F0C2F0C2F53062F062E062F062E062F062E %062F062E062F062E062F0CA9FD0BFFA9062F062E062F062E062F062E062F %062E062F062E062F062E060C7DFD0CFF59062F060C062F060C062F060C7D %FD19FFA80C062F060C062F060C062F06532F0C2F0C2F0C2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F2F532E592F532E592F532E592F2F0C2F0C2F0C2F %0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F062F2F532E592F532E592F53 %2E2F59A9A8A9A8A8A8A9A8A8A8A9A8FD1BFFA8A8A8A9A8A8A8A9A8A8A8A9 %A8060C062F060C062F060C062F060C062F060C062F060C062E060C062E06 %0C062E060C062E060C062F060C062F060C062F060C062F060C062F060C06 %2F060C062E060C062E060C062E060C067EFD34FF2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F7DFD34FF062E062F062E062F062E062F062E062F062E062F06 %2E062F062E062F062E062F062E062F062E062F062E062F062E062F062E06 %2F062E062F062E062F062E062F062E062F062E062F062E067EFD34FF2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C0C7DFD34FF062F060C062F060C062F060C06 %2F060C062F060C062F060C062F060C062F060C062F060C062F060C062F06 %0C062F060C062F060C062F060C062F060C062F060C062F060C062F060C06 %2F067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C0D7DFD34FF062F062E06 %2F062E062F062E062F062E062F062E062F062E062F062E062F062E062F06 %2E062F062E062F062E062F062E062F062E062F062E062F062E062F062E06 %2F062E062F062E062F067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F7D %FD34FF060C062F060C062F060C062F060C062F060C062F060C062F060C06 %2F060C062F060C062F060C062F060C062F060C062F060C062F060C062F06 %0C062F060C062F060C062F060C062F060C067EFD34FF2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F7DFD34FF062E062F062E062F062E062F062E062F062E06 %2F062E062F062E062F062E062F062E062F062E062F062E062F062E062F06 %2E062F062E062F062E062F062E062F062E062F062E062F062E067EFD34FF %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C0C7DFD34FF062F060C062F060C062F06 %0C062F060C062F060C062F060C062F060C062F060C062F060C062F060C06 %2F060C062F060C062F060C062F060C062F060C062F060C062F060C062F06 %0C062F067EFD34FF2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C %2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C2F0C0D7DFD34FF062F06 %2E062F062E062F062E062F062E062F062E062F062E062F062E062F062E06 %2F062E062F062E062F062E062F062E062F062E062F062E062F062E062F06 %2E062F062E062F062E062F067EFD34FF0C062F060C062F060C062F060C06 %2F060C062F060C062F060C062F060C062F060C062F060C062F060C062F06 %0C062F060C062F060C062F060C062F060C062F060C062F060C062F060C06 %0C7DFD34FF7D7E597E7D7E597E7D7E597E7D7E597E7D7E597E7D7E597E7D %7E597E7D7E597E7D7E597E7D7E597E7D7E597E7D7E597E7D7E597E7D7E59 %7E7D7E597E7D7E597E7D7E597E7D7E597E7D7E59A8FD33FFFF %%EndData endstream endobj 21 0 obj <>stream +HWnI}CA w껪g~%0 v ŽV;n3/rH`\a7QĮ[u?9OfӦWòͲî+?f?]1qW5\eO?+zvW{_zڼ|r;j/mS5rf鏆g֣n"gW A,;0WӰdTS|!w3sbu65_lOAM뷓5'GD[S@7|Yf<]ۅǕLwgW|.Qu8Od4*(w?WtT yZE$ʾ0؇Bub9Mo۷Vټ]}ڐzݝޭy9@+.ﶡ遘@ggrS㮜OMeWYէGO]tZ/zm B M<;B{[hzEn[ξ~&vt}|۳EM]WIymlR]mEݿrJr}~,κrԗgmXE87m8vٍ ʛrQ=.f19/6`Ӟu?Fݯ)ݝg6J~h +vd㑽ZvoS'YEmKpU~V7Ie&V?Jj)jft1*7V7Ӷ;N . +I$Ќ/Έ{HGeU+Ŵoz\.l(c0Rd0ud2Ƌfו٢=|F]|j]:."iUWmrkd9^+n6-cɒ5@k +R*(4(NlFx2Di ;е3szw J F˶/i+>dRΫiՌ~4yUgmWe?ypׯnyR; @8pWIһЂLX=zqW +YR@F^gxL_6DAVGN@WerE"A_U98XP@!5W9CJ("(ՄM#ȃ4"@LACI!"mH1`uЂ1S^JJaAIC1yX{F[puP+"9#%(kE&PLh~l9+V4c!jaZCn _dfTECE7i] #" rgPNCgYMjdYOb* +KxH`^+*~xG #r' |Լ` 5T@+2=*2RBS$FF?u9OQ(҆aZe1N 8EdFEM]E9AKX& Pd Q7~Y)ҨjHH,_Xjj(HW("8^$sDl?R@I ւL jlȬ'| ( + ˈEKZ.KGقe)9BX1Dl〩>:ہGH:" q&o( +!P B1,5gy) PHKb +`Dɣ,#"ir4* o+4JGNKQ]@ $1:99 2h+hюQިt AI3:☀I"FB늺$5D'+4rK .QeHrkh!uELXh Pw7t8 RF QLIΘ0PTx&F/0xB.;Вl{( ;ߘ@RB ܗz p+UsO0GOW5BTwNL))9JPBF\qˌ(NL0PnlK95˰mJˈKKZma̐qW5!o zHQ<[=uXn4=:gvұ:؀ 4"y'E&]iJ< +͙xF&rl;rѫ4&}S'pUkPKH%pЉIKw@P K5(>;V>Ф"k3\a9H=]5TMx "SX8(.xEE-C)d2y,àNE$'BHՆ:gaJ؊YkLJ+1޽ /%/qh$OqI(}~ oK-DKf9$ 69׮ t0X}ADTώt䙃U?a<X%Qj>jN|<|YSZ /-3ظD[O%^Cwb7iq*γn܉p~'"d&^x/6Qպ]cUnV͡TmhRt%ټbJvg7;5ل!$d{@EyWB0RHk Mo(fe b䓵Ь&SVny*gIpNcLeS f*xR-}ϽxV +tRRIBӊ\jQ r61XT42k +NlxgsZkn!<~o>yūO^=QKwȌJ/n^xÇ>W7Ox<ѣ_<'?^=Ϟ<}\>?7WПsϋtʧE>тb=}/=}<уOszϾx{/^+wr۫OSlN_7v3Q 3!WI+~^1Eɞj>͗>qgy ws֬Lv=I KiAri@K/-ew?5p8 ) +/9Q!~qek Ov؆m +Q7LzvKƑ4{m?7]DBw HRmoSB+Xߚp2_ +)LeRLQL'ǒ cI{TJW0ߋvXfHϝhdJOE(C3S[Vp߮/<csm +-hꛬޱ I,Y }NʄEB2:LbV}f*w]M^m>J_  >wy + GS&窓Ts_imXZPk .зNR--J/a_\ůa7硑v ۾:c{"ҵ~u~H[L]C} O2U5Ad쮘P* amSr*sLJ!,81l{D}\&s9 2ψΤ63w-ռp̑}sWhv9A'YS*W9= +/ m7SY5k(ۺLaT[$x Ui\3|I'҃jh G8՜y--;/o㛠jIXXa/)]?n #/%8{%= 8Q8gHR> ĮbS +qM*|FHԤGů̓R;[m"{Hv9]GEDnT&e']qJ> }#d}tu_FGcIt7\Hz45@ vu U:'0Jrvyq4`m9O3Ue{캻Z Zǝ޶٧pAs,k^nb.ޙ}4)Z:*zl'!]n{ݞژWK6 CYIʊ rĊ\𗬝% +(qκ.)18|&vibJhzTK:C;mߺkl T{,/)ˡ+MǨ>IZ'ք0dYRCohDR/Թ:q*.i# p!;*9{4p} A1=,H^/Xo(h.ߨ Gp:ӻ"?eoB; Rr3۾sMKTb_ 81|IYaUBBgT1 ߑ+67dz[<3Yѧ}y2SQl!5V;`I,T^ g]ĪGc;>WvXwT-WԮ|D)J7B +CU6WPl~~|)/XG;ydQt=0v|I: TT^7*Z nuH0RgP?] n$iFh܆=C Z M6C݈okdEBwߓbhG;%ԤaoqʦUKKA5Hvu[Z<ҺJ#Oܰ#fp].&Ke3P6`ߩVr<ΜIz Bθi,HO7wna{'۬|wSUU +9 S9FVzx7?3ԅ`"6ݥ9=E(W(5N]NtPw' ]|lciJuMSA|%Pw&nmu'H\WxܟT!pZ_JtʪB[jGGTenA +2T tN$Pjmg!BˁG\y˥] [4C@WU9蟣> D%֜T"PH5@RJqjk ɔ nڡbKb_KØܷ_i#s/7b\TX ki D,9 iAM$k+NbSɊl$h+O낞 > {*p ,C7ǦnPd!AIż-(P" %XirDWy&H歺:6,LI|ʀY=%#f"_|WHk^zՑ(^IirV- >ddc)r#zH"55I Q>r5xbй0ܢ+fMT^c>0Y_?W\{x1ҏKAYWT믗ۓvP?0?Ν$ЯC?{hJO!] R/By&DQ'n';BswhQN+Ѡ6X|RE1CK%KXYPc]±i%"RSbRȪY:mSόJn:!A[^Α$e}<@[MnXn +.=|v= tP?su, `K5KqF2 ]r.([<:C܊3țS` KSq-;Zi2;) 86SJ\qqy__/Xxe鮮,-Y5G[snFYψj5s%X4+oe8ܣ̻{AG98pYVa^Nh^ٳJO-R&}F. S/}3b=WփrǭmlƊVoҧHt i9ήlPazD߼è;*nݙ,5+d mJo5*12C ]l}H5'H`ok@N9*fA=4-D+(+6UsjX|IE+IV"Z]kIw*2b 9)2y!k%B'Igh7io<~~ +KPVNHEeh}gwΟ/*sޥƟ4`z}#xCYotq J>[Iyh7ksH*< P5 !WYqHn귲]+[_2q˃\kx_h&nY4Lk5oܱBKuSW]LeDiig˾qӷ@ѷnp\@ _65C[/le燥HV)Ӥ%(sa;? \$D 0sw?&V ^W"t|ӓ2,q PI`ykݪGXC1{̑H(z1C[싌Gȥ6QE".Gfdm8jZ+aZzY0^ힶ5O(H'Za]5_Ik{)^o`63NAw/C@Z.JΆCO[N$u^RV<,5u 2%[RJ(1کJ!V؃,7@/ ʱB[G*(VN^td,u X'[!1PB|`4AxHw+ݨ9v Y?K%d[[i@y`Yɥ c>+‚(Bֈd'}+VF~(Y-YbzE_ګރM|b^}ET:$5M<9}I%S?7^U)o!4* +kǞ#5/8WE_?!VCdyo=49m5N;] ZJ|,ɏ y .<(c"1D/Iѹ*pFX|~s]~d9d\tC6j!R-&*2 +vR۬n*X_!:2/Cy>~3B-=F6J 5]=sx +L*?GѢXlD `c[!X2\  ֝-xUCdHZXud ;"=eMI\EU {n'OCw"[Ӈ=LG*۸o4YL_\Z>JuL9H36+X-.{_ Dh(z qt۰=nT5m̑f*͓IDZvf]ywGRw^VMT0]nV`7vm׼!Yy;fi?0xɩʟҨk3=ݾlՁP1iFUJ@PT-$_umTfb|"D4cLƺoz[cdF}H!>ⳓeD@H@ +)p!S)+dU( ^̿%Upӳ=2ʵ^ U)PkKL:w-ˆ5c=fr*p+b(Ox2kܵLکimwƐo.TXLJвV6$+wPxʚ@/bO}_`O+$Xb0[)-IR?Ȫnw:lȽ9Naa[Е#k^j%"hVT]G|.4yլtkTJMRu;ˍYxŒ[L$!6RSsAC܄ZRGLBˀ\ [YcI})Ηt7ʅĸ|шŰ|B+1˂D6*uf(kr$cjZ);Afgc ۩}ܠ-kHVl^xNoetG"AOT q Xs^Oz^T}12 VD.&ISA3v5ndUH@>3 Xo>%GeFv ֱ+] QRKjCm铽~Xh:U Q5Ń>Fu~qsu׻>5uKO2"Ra7Bd鉚#HZYa[ABnjLn_;c]}QͲL@XrxX3z"+#d /q-Wvw@Xuclw42#ZUёKni{YP, ٮjM1ɺ@9\ۄCwAY%u}+FJ]@99.P0巿o9utַX eV9rFv$;RxB3\u–Ibi~(4}BYًSp~#O8*(0]vFG<1f-ZTս)P|o%!fR(FMeu^sbQ~VC8v +Y(Cʰu:J/N, ;2q*gT\;+a$>kgۘ`\"Q~jB:^q2NQۻg|z4md9U ZFq5bjh}&6ǚ(#3M` y\?jN Ya~)oTW?ʎi:K D{!팧jaiΟۑ]$s7tP`ydqJ{K!*"guBPؑ|P`2#QrLP@Odk({8\c'4

    oSQGf2%0dx3*kbt#Gԕ<}?|w||AC~7;?)7ܟ^ow?zw뫏?\)&0}i."!3+}Og_B;w>{'S莉 9y zxO*gp!>o3:|F<+-u(3{M,|>4ҜR;J#+QvfǕ&VPjg>4R?gM?WZ$CqZ+4 %yx\Y2?7B3Tz\[0ۦw_O'@qa$Q<8"ߟ/gz2˳y {, 0*@J*Q_Q3 +T΢MTk@z0o"$*+$O ~m;E(VvSk#);ьK]tgBg CE OLI<;ɝ>480J`Y,r 9l-rEtJ D‡bP9*W jPi)=PI5R%C*`ۀ'28ARbS\}T%<6rJ9U Ϡ2BX$7o  U3Gr +3T1Sm!9 is;4sVDn4z4:D2K?*Du #`V͉]ɍZ(1Ohd~ +G9eIz妎TVmU폹j"Ů/W;poL=u&T)$GiC᤮]N\^TKV-eB%<ع+_ 5/]wmBSiWzTD&IlM*a|j{; zR:(}P\xxnZRlFXzLȨvbdr ri}z *72>3Z-&o!zE˗G}q$j{7r߬svLESa(H5"8aU|B=[d]#- E))ޛ"H6O&"v~@`4,('`Eeȴ @ CYސJϳ : )`!T.!+ń4@ߝ , Wm%)j6 $&cYؼEAuĦ'd'db;m{W٤)UPOdG +)[E¢20ltL h;5or6Lbs*6rUkL^x8uBNOj.Cz^rt1wqgHPPԀ4wP#Y\wI +R, R1G +(J|qGhimzaK !+C1aǥ(qrj1tlf7d~`Eޙ/=P@W⮘§k-&"+Xt{0%uYW'(kxN9"ld|SiuxA%pP^ZNy71AnQjɣr֙L`p8wcl&`w,"r 4^6#gBό;?)S8/s_:ԓEt{0 " }fӴ/,N^6M?>qݛvq&: $f*9־$]Fgѥ!.mQP I5,s㛕=][WϡNoA=qKE]+hhe%RK0]VИK2<`T i!"nD}(ް6X_w<1>p(ovgzJ_DS{BU+`o/3?>#.6)+ZjTFEVB|QZwݜtifl+ca%+,8ܳv1e0Cച͙St  +>S,wZB{ic툉j&*KA9@cMJhr'5:mR3+'ǖRMޒ!vT an + dlz_@FaI`>lfeV]\;OJ܂ +pQ:[ +mP΍Ŏ"|Lv[1usbȨ>Uu)#\'ĤmL q2/Nu"SR϶n-!AnzNz= ukH#,(up)3'<߱ʷ݆^q_ܵqBݜ,.*AfDAIm5UNë +{kw9+Wէ:l9VpmlYV72 ' ܏UN_jŽUZ&~~2Yi]MuܦïkBB{)AY-e";mcVzq:CR~ k\kgȚJ.CzFXTȋqUP]e!XUVB/NlhYiXW^#Vo>,_ސWԞEdqkJ +Mm|@?[c+\F`=`LU_&j< Zh1]`8Tsh6FMw0B}ѩ'䣓]+ghKT1Ǹ +ݮUmtѕ2~o 1}:M m@kTzNVwyP'^q' W8`u OJ1T#aOnWSw 'ҎC$'Ze%Pl;LOjKSkB*h+z>?}'hOZ,ڽՉț s֫u2»V{7G'\9Ė͗ѽ9X[^r>c j|'CM[솧OvA.ˏ?_~?_ϻO?˯D/v[T?I[kFVFM^DP5.]f9NPDBQ&~͔Z&>iJ#:a)+F[)mk l)Խg7[":Ŏ0h|-mkee}j,U-]1}Bwǁ*vRϕZFT znr*':+Ѯk5'I-9 B,>G,'"~i!8xb;֪O!c8溲JrV1l?(1C '­¨WSnYN?'hPZ#ͬAycT; OpOFƠCGͰ,]"@y>] %*7eάo-cRq=Yv +z ~] ,j #,vYth + ׮3wB](Bf}ʦL4d⬷XBQʃݜ3Pz|.Aކ\If+Y- >qpTOOlx׏5 ]'.' +L{" +RZUKwFڕX;{+·ܸnN&!f5@칳8*:6rPAӼ C jLa7(5i5ږx$!Ţ  wY붎<1ع=V#ժX c[V0fhz7@fu21p[rK aSuGLWЭAJ~(*f vš"5ȹ)PdRhM C )yؖ1Ό kHFx9RMRnxӪ,Sr$b.؊@y#}k"MsXBS9L|uK%VX63#%Xg?3ݳZ֐` 0j) HFF5(Y]*m%an.IP̔wY#PTVݕu+ ݜ6üA|'Ȫӧġ#JĩTwNz޺BY3T.jG69b 7AoD`XkׁKh9?hLjб+3@[I!w )=R=Cw$5f,dv.OӹSgǕ؏XWz endstream endobj 22 0 obj <>stream +HWۊ}~RS0A32Jzo^%U9!)LJT! PnPC! + +A`-F6 4.ǩ,PR=/~'Ū`$\2ӂ J%/ӉVacDBDz8BjrH e UR OvRsQ{+ڛBMAEkɸ"s X^OL `Gpt$6?%Տ׷?Y߿'=;o/ڿGoa2V[@Kp6 I6 +R W~$` 9iŠ,.6$C׹AYj HPDZ9&D*/uKEɀڙQ` +žD E E-Id*1 $[SdQ%=`H!!u1n9gL`U%S Z;A{j͟[m+ťe2vڦ!kF\&Qh)hjUf=/hV8s%F ݵA> JԮyYL"6,;V'?!JЁTYc0C!Q rv(`hDhS.CqKΠ HY +)uZ +`\7EGJb>In6*1K8v4B/PNޜsǹ@"R&Pxj 7\C20P)gIzm*:Y-nkJ/]+OĜ|x`6}ess0K"eq蒺,C'm%ճhC0gYxH[DY;eMfݙNZ4YY̫ Bلj[zxfBRꑁB1Hq60MY¶]x0Q\3 HgHFr93gd8[CJ U{ k0lv@#lhtf#%SqhB6 V5 Ǚ6pI+.җm% YoD *[DYADk'%qv\5yexznr`~ȹ7vý,| H uMr_'u1C֨= #iBlYa5UΣs36L%l]RhzfiLn,rɂ6-B AZV˱QLw`݆ЫWBWZxPR~.61dS䐙 JI65v=Rwa`-!9+6|pXe /~#9<>9`bUĮ/U%>?˯oO_ Oz|nx%o i'Ϙ;꫎G}yVb. tdMci8[(u4 [5ٺ d: +h4vІu꒸w_ÄC1&ї>-j'q􃁛Lrkv1qjCݰǓ=c憹PռT]rq#ӈ[ˤֲR].*ʙ7Ź^쳻\tE}԰1XY̓ .jbqXZ) 2Z^Y +T_,U#vuCFK";j Jola|/,C6'/&7aޱһa;p_u#AWaZӿa'/ 0t`Uc;n3G{stm`SSq:7 c&m`0Hs5PlU Aր[VHbY;XOfwWN.݇ yw>={99z͇{pZF$SJ[cb =f}d};{|~lF=~{&5f=?UsRΰ]nަSE^mqGd.G`;Py[oZwgg=!xƟa" |?'uRtOCtąX^ +/z!D<4t2"t$z'z}rVerʺϝn f!"+PH ns +|]_lN׻Q3;& +9=^/BN^Б@ ] "|t/.jN'wAbrУ )@4sHOhIqGfm.EyGG_!Τpf{LɠaEQ;I?Vu!nu M.vǔ$2A1-T%276Lv +WV#{%k=9fLkjԽĈs0`#).# f4t[ʚZ,SM"3E3]+KhݣEyܐQX-dM DyZ-/?2$a,u+KVY|a:9]aGqt`ª6) ܙBtk>djԮ(?98jj/ϧt 6GJLbJ+ QŘRZvTWk]mNקV]o֚_mLl$o6lm=|\/ "CWγTA}~1E[ӢKڏ뵎K[.jtYCrW>@1kK5,dV +(=){a@s4qC#mɧTtә^;lFhQjH&z!5vKMc%^+ Mɴrp~Od)Kue_@,pƣN\tITivUjjߓ +d7S֡"*\?Wm^BjSWL:y>]Kx;|欻YcƊ.O횓W +ax)k modPzkݢjor:eR՛\4;Bo,g ox$BVەR2 3#%NzF6N6(0}@Pⱋw̏D!wFc]\S h bң}̾+'e뛿r"D ?M]KZ +.kz7V )CZ!~NȨ ) +-z:5I٪#`4&EsYބ' 7 e*yx.t +7}KlG^rt9Α!åJg96+h.EJĄ~,oC)mbN-eؕI֧enzJAR2$"6* nۆHrՕÆIO +k떠ףvt/MΗic^T,;6 ȼEHUߛ>d?=+U`ȯt1PP!Q}RP ke`єQa:C.s +#A4'mEZ cY>'>m3+\Ht%"6h Q1KH]GB]WQem>|QKJ3Fu +_!l~'eanfI^>=U!w._5'ݧ]ԝ +}FĤ]Sކ[ډ׼EabW8GՔS,v e)6}0)KܚhI*xX`9sy0dhU5G#z;\UFwq }n퍰 x,(^A7.d,v6b~7ZAР߰nͭ~Et[3?xv{"~ʖGΗHEߌ|5v`aS|ӶJ=5P?` HkEuek;>!<-mߚBA[,ML_GP.qg*Ic듹SZ˃2Tς3\i7fm@v9_\Sb1"Nv#1s}T(񞕔h]cPY6}۵zA.3eX xe' <`)¹Wbr*VD+iU}:}MWZ(\aHjDVJ'u-hsZW]}MwفU:)o,d RP-+@ +l{0Au!լxe6I-~; `zoҪKd]T?I J^M-VinIJU,V^=U%M9eħ +x&]N/G +g Bi KU>6+XJ2ه+Q}8%,?-nh鄐+BցΕwsl::'.A qh=J e X!Cy}1/N0J ,יlo2x.:eRkiׄ7)kIjUL]uX<.C_sSW2KǾjJə`LHĞ"K2h:nt2Z;؁2\ ,@gQ{K_yG.{vk\qpQE1 Jx7y5Ie+-mT2-An#QͪxJ͙sYeùQJ?\GxdjtE"ty,vj%YpgLϺ!OD6Si4Vи1_Kق t/cǜ,<~*5X42O>8M smj@e_٩W{T)MXiW㙪H>O;eV&HR@m Y ]z;G.MB)uTc<eL4`?qPLV)ene?i@zB%c<r)NDjWFc?)H82^+aUq XуkȰՕn٦rn'Pj'~W.vPjae{ǽD@l~e%GzN'h/$Yv5ŗXN@{x餴Y+a>auk(Pd#t2zlqU|IU< G:&Nř7Kɐu]ΡفѭB#̇*Kzx}Px6$Q" +q`x|5@)ʼ3vt{ɑnXxb~Br~iQ+5kyMŮ\mI^Kq#W VAj%ſ[cCqUČD`}:ҋ8 녥xrtWj? e=k>~oe>S<s8nYe.@d()3:Cv%rp)R ryv2t"fT?6合 mA^ÉB}ddHAyd_a2.ڋ y#[A]Ì`lQHdYbr1[ +Z*aL <ބwDƆr&(@hRPi)2 LWa4. +Ѡzt//+ߑ[a3laGυ!L8Rqb'r4/d\* _^TX +jc!M70NlH`H C(cW#4.w 5i$Y*4b^GQXmfye)ʐ򱄝9(pJ`ޟ/K +DLHy]s 0BH.б 42E(i +mf[ qq)+*[S(+(C)do +{Bye@X3'苼w =e&d(9|퐅%юb]3f"g>2u0 gm9m# J :Ԭ'$%",@:yA ɘl<?9ZM3+syQl9_o {r=Ɍ$ɀ%F!#.gLׂr(j1L U&6䆉 R#xiqq}4J@L1NScpVPRE,tp(x0GB or&gv V$v]D~r\fiӘUuPK/XG@$>K$w zhRCYC.FBnC) YBHXbԕQLS ZBe/AbL}N=*Ŧ :0g'J Cs'͇k V# `P3@!0Q};$Đ<(VI7%^fLGbG"QStԷz짊 q8v('$JQ)x4IvD%t7 Ɖ2LsL}(- V:UzS˫E1QL!],'Ɏ;ȍ8&^`JHZx0$ C䍘( &@00\ D@(A#y 2%`2Y#ID cDOL)4`!Ո +%2 O 0 $%zj.*e0 gR'_P0݃ՅrvH>~$P ɏ,N&RRnl3B@*&t,Y+D +s +|ҥEk“pׂd!πKE~rNYkg&򏌼_ȎEbȢ- #ɡȹ%o1I=6TD +a~je𰄂'T;c烐2R! rz0`Sd@mA>@4| +B d"i[ԃ'Oar{`pdfW4WXI\ۘH2 +L+Gib!4Rf;-QNN&<*ȩVv>ɩcIU>LBm&&0NF#}| +@y-%Y- |I4ɉ +"9pғ=ńtaFKT+xIi66M}#K)V0lKa(D1N0HcҔldapPys&%yOzj`iHYȻ2嬦ZQГ{?p4Ϛ٢j6Ɣ5ӗllt˳64?bS<|N߷rDo~=Գq>X_Ile '^Frk@b3=u/#Gj@.73]/꼩_{Y$RgXrd`=LbD ̎ r5G(#AH:KoJFh(s1{V%xOKfgΤm@F{#?&9 +4U20Kn|0D߾͙MW]IlIwwIo ><¡.M'$,^JCF6HP+  <VwdG+ٕJGX/f;h{J,IH;.> vm0e89Fc Oh Zup4K[zO'Iأ!rI,H;Q~%f7}ZS \UT]Xv OjƫjO舤I><jI!qܥ鄄ԥ kJR@Lsqf$%# GĬmWp9b.uT|nN{ISgř؞h'JB˺rX kV.yzՑE_< +骡oRQYDQi'_Y,ʐKBt2Ll+(^~a!Qky5f!^'r[][YPꘞVw\Es*fԍ;d~ğDcϭ~6@p'芢 (s朰WP CӢk`mG&+It]̎(q4^he$#$lڥ7 唰h(nv1c4KfYΜI3<3ԋpa0Pꔁ!M\*hSn|0D߾͙ͳHӧ*!(& D$ Ow< +yz7bt n.UވԜkЕ$Iz BAl(aB۠Ihs0Hʉ< UGdXJ5|-9bbCXQ.oAbb jÐ 7kpy@ ¬AE=.M%HaO2cƭ Q1eLyD"^UȌOӼ-fUŬpZZ7exj;c9G٪QZyyp%CXptq}\Mrf$ V[1(q0 ,Cx(fiꍫΪ75cu4eYK)ȱ&ĥm\)oIQT9Z f>Xn65 YA.rH+FDGר\pŽ`J2.Uafjw:bv-+5Tr6=: ֦. D +zpn;>KNQJ7l]TYaOl3( !4AdB41w!3ۏ|.v)? ?C@BKktoLUc+>SL?r0|[l 8parmB>autmmtAf +PU~5vX@ژmCX)_&~JS&7SRJ&Ӈ,߄ـrYӄYl7{f7aZ`Ds70}F^o9kS0(.6`7J%=: q |hͦ>ڵdOg\O?VA*3_c,*]ZoB|8ϔnbs]_r?$)J%|Q)09=':\(js.ߞK,¿Nܵ[#j:>?V4% ~+NsקhŽϜ,1I\82E\lMZ[o>&dp 3XE~v#7CK2rM&- m( PF%Ʀ1IoŐVqMHbmňiO+8vڧBZ=Q'3Ά=㏱!U}̝q<-|"SZhʾ&ۊ8"&2eagI/IK8Bs0kВlLs75*ExPr 8|O,*י:~-AuJi<^+3םH 8`& +2xK~VMԺ;e}"L=Ea O_1 EDW +].-5B+l*2K뀮|4|̉a]TRk{wI0[ȚZ7"Y^x05mK.GBgpC}pJH:-M=ldAnst($|@=<-4S}`E-al~vW6Qbť_X$,*?Lgs)%wЩ Q^LxrydR#*}X)ife]E=ɸWhȷ6sO@'R@ ߡ{_m4)bY;vlЙΏg +vXnr:f:(ڕ4vQ9coT~T] 8CJNq;5XfNGIGQc,߽/K B- endstream endobj 23 0 obj <>stream +HԗVJwH wZnxP[dhȤ3};;W$!guuu?ڥ7{}V|fH<ԜTQe5s^4xa!;TYTψ*h!m0KY.T_:!jgp٢MJ +hk!G- N5LU$rW +KpSXLyZYL%_[gE8V95jPhszc6GTrkmyV-P@-B"ɬ*Ec}6!1[)4UadѯzlD2fXը}^"U-a* +R`)1T3>ӳPιE $ډ(mC[a( 87$몄Ћa Ӫ9I +wd\.nXvD#b7-M+Z,1DE{%}eܲӕ/L.S5T\f\Ηqઢa]CH)yrfo_ڨ +}U].Oa sAyiìA#DB9='|s ˊ1.1#aw>ws +B P .{eX6n "Vmk.LW \=kYzdH.X,{AK+IBR&͟S<{)/ dkdK(]E,U6W%g4"hpP.9wqv>d( H,)"Uؓ'e2 hR"*d S>ie5ATG ,GQOaֶYc3w +aK[93j%S dݝ{9zW*QSؓ KF ɉ'$_GNJD!$ARLht,La'-9/.Bw–[ +gѽCLhȬ8})Jb#ϐw-cjf̲& Z9 $kHS9 >_cxft>^.\nd"ab̅R f?Z=G$]^ÛHJb`zK}'pSLsگI1{1,nˆsR++L!(tzsZEg #Q+"Tÿ0G~.KJQǹ}L LZJ(=C-Ԉ3lFcE;cȭǠw@g`|FeF9E"@6X>E sMP*glApH-W'5!<{P(kZ\Y &Oa`u%l}-͞pLlΩd p_ta>Zʡś`OŸM,gsCH0_w90ԐdJ~(R#AATunYBqm~IHf[K*TlslVb&U>ةnAgD{s}Na[O'GjY}s֠$v +g{|˱cgm5jwzZg w!ho CQ/a[98:d媾;DUz;wtsFi갲it;֣ss@a[Xps\_wSQeYNT{);X."o -Ul vy}/3K零y(}~%T ;K졖+6͐T+4O]'5~.yɢvM+5o-)ȍꕬSݺSoo +_ +=HϹQy?9p\kIOaw*;չNՄkGqԸ`G |]Ե=~wC5Ih?,:Ca"i}KeAG܈޲Ԏ[, h!G#f ,/C{@ֆ-'MSBMylɋɾa +dFYv~ su=D/~.%ŎS\(fL&pHd92|Ap23>@9,[LQѤ)b( EuCh>a~rt/yAi~)Hyf=S5+t#X&W:#cx7suWߤe1ыrQAXqAT]SZ7pbbdttov=\|@0!ϩ?rT0O=E +/.(?γq|Z^ͩ&ڄ2YXR^[oo;&0Kl:J/7{X=spozO:5G/>JFl(AdԆ.Pveifz-{FFV1Y2Z]/Vc,9DHﲔVձ0%l%KAЈ +AM9Qg)pHfYAذw8z#y#6"V6aߛ2vgzN#Ǐ4#FC$2eĢQy`?`e[,b"O°XZ /#Fy_D"cD~hޚ +XOo x ؞-R$0S("XؚY; +O`X¯W,:<#= +iY[5ϚXRLX&}cͧgXeZjo:`pM>k=%bVr6[Ճ,\+w,b @ًex"{UʪMõ*' -,ol"~} @@*zkzfMX}j0,*ݔ9 qv^[sa9d}t̶S$?4#Wҳ;*C}֠;W2DE9Swb hnmJ*fB#yymI`,d;x.R/XX cs]>5[MSt2yAG~G*'g0!XB+_'(_ +ml,.v5:SxAX_wY +d{^Ё>/5UOQ) wb'8La~nWۛr;T#, 7dY+Olۖaoiъ*<6&:Rgwځ/ OF@1i%d>?KAR*~_0GNp\Hxc;;hK~ +֝keBSJQEt3) ITQ3S6GP=ׁ˟%%꡾JYVh.CRG 'L[zlHEΪϜҍN4fTn|QIQ(ޙ v::Dj6rϮ8~VTۡXnGJ~INZK@yG3g.#;vo9Prg!Igޤ4Q}$@~rq/ӀI+ɷv0`EmQutz*@F~ُ @whϜO6.Mx+(>/L1snsb `^ҺK[<1!H?aض|6-!seYp$U9_˩JSKO+]n,4K!K_@tA$=|!R +{Q苉(% խb̒=GA +7*N>GRmU R$aO7儵_8xu6 WqA[F ZKך/iյwM"I"(- +!r9|x; %lu͚5fyakH83u@{Y1@ќes2AfF3->b|-sٵ>~jR8ICNE/_}VR|P+[dfXkd YZI庻?Z][%j|7n2D`V+(NGiձaБ)7]`Cxiyn`-Բϥn@q1ZtX0i1x5N辱IK~w9`V>`vzJ,u!crN?oHqqjb^.mxQql +VWۙ%C`6d3N%Iw$݋_2c,bFd)LG-(?{q9wv&y'*x$t,T`Bj82_~wE67IT19RA_z@V<^QqHW7uKfN9*%c{%MTכV}mB!UvpqJ dkgۀTxoY6QT4x]$ F)Qy5٧+޺. RٖPX)}֞L:܈_rji^G^|eTO^O~w2}(p6 GϝNЫk]' +tStcM}lgN <h}N~a'J ":caR4?x*(nݞ˛Nj P-2;]\Sa԰d!a]Wol 6&$,1w,N_F>; Z !.zNF2ښ?L,Q(W赧xb+9J 902ʹX"` 05V#_ # Xw!ee& +*%zƽň.ME)a^l-wm/pxi2d:V|X_5D.C/sWbR,<`cdXuR?3m5XHu:3溑'VΘGRnoa]; XumܒXݛ6YmCrL(FuFj~Dd%ى@%@*cr638 + +|_[1fq29MfƯ.Ntpm-v ľ;7n6h4Fi  +Sa-H{ p2AvFɨ82#9w`+Ə +D=YH*sB5?Xcu*K #+.w3lif1/B}muQ|6Rg9 +3$&_3"B?^؏(a;C\7; 3jjϿvt$@mVApuFx7"}.5 +$g21CJP=_ҹIiswtg0B +u\y:DVM ;&`1|u3)xd-9I^j͛TVds0:Nm~%v.~Mu +Gw )1 $fK!9MͭTeŸhV3e~)WXr;:2 0˪߱9 =``%җ>:AӴ̵eV4U(#|b`TvV}Z/&jtrRoεtD$< ܅q[ԅ64U` k.Żb-)ڔ7OﲔQ"_WlO:;/2S*Oly96ozN/}(V=$Qij?|B{k?{i…C~wq6q&I DfXwz] (tVι!몮wdX]oD b-y}$#8 +e{b!"$8/aaE}?/Aw~^W"|=tIf9k̄8/c()BmD-+,~ L(cpGBy` +[[^wXaJ?8-OwU=V3R%vw-]A 4` 5'_JQ Xi⿌? x'.;LŚ_sdx>@R.8SX'{#In{p%Ƈ ܂;`n+mK{ +.@[`-2ApxE-;^މ; _Vꕛ_?j +ϋube .#Ją<~ XxRK弒XDc`䗆T\sQ)p(xTDC`Wo"E-Di-nC`!}!H ф&= [AZ"xkY(8eaYJX2pe=,J/ b8ThVo6:{s/ FH + /p{ٺNg+tc+eHٵP7I0IVyqAoù:7vGMY>@|u:n+ 37z)G}ZiLi;qfCq\ٗ&Hn V0zPqk1Vh> B'vB:4?T)shtIr̡OQʤ<:BXk1:esh=sOIBٞۦtplvArg0{:|Vɴ#ԘMdžf3 +8/_+dm"vW]6hDI&]РON{gJ@XbB'YY({u725MeۊC;EwӾkAwTV¾\'74FۦPk#nG3+qkFmVeoby'2`428׎dGtqA=5NuY?ޘͷ!lͲ2AKt3N*Pc_럩B{w0´)OnƵ߆n))|`Ug6W׷*OCarΘC 4a_UG5P23BǏE˭AtY@G z,oz{L&(P@t5LJޏcM}8O5<6{d= +qf]kO̓#OaaI3*=OVA~->I~Β@lV~W7RXTh.7oi'M؞*>(PDѰvIb$9 vR!V-ZjώZg]ѵuԭ7[r`F8Ӻ\`%BӾf7 +/3*OkM0 o]9b<.֦W1xN"=Zft樥eL>{Ssn"\wߑsH֟U=y# H/oEMfYu2SJǘ0 sGzW!}n=^jcIVƙykz~,k ;a`c\TDpui:>lA>3w:Yq_ɭdP:V`1缙C#! +:d.}Un:X(:8-6..KæC ‹=Pnثg,T1PB?ѡ˕c,,GPc ++s_d;hӉ*=EE=EjW 6].w?nr 2f=J;M- +(M\;9A+GIGPAޖ޵ÿJ:TMBAPٽ;?R&klVbˈ֥Ig˔D 'si +,{+QGcy. +>.!JY#('x@ sڷkr|:@(dMnX咦G'n8sturPU˰ ø !^q"BU[UQY]MǣY=?N~ ԗiW!tw_̭oϞ1Qؼ$`oIӺ,+^Z`(Me,oE&} +wdnI|v]q`XImS}2H=6oO4n E=bdccW|c7F@چ<JGF)|<3pޗ@"4WbTUawF2PA"Aι? ܨ)^ew` +JϗCgrI~,`E`Pw2nR;!FG^ƊA1?7d@̘lDD PT +dT˂۳qvDEjٴMȓl3ox_?ݒ SSAaR#7seIӃ1wOj<-W j٥C)iu ?tMk/P$vJ`b~7X~)vu?1Eţousd莽\+( PKp|N7<b`Da,ȩvhzb;˖x6\U # zBrM t+ȧVCfƦؼ33PWp'Bʼ3e$R_q!W+3`+NZ/+(y΀豋$pUEuelϠ{"MOiՋ)Ȯ{%t?XYj 9XHA/nTW974*ѱ*0 ,ސ0x+ >`s(x+;ˏ|ty>r'Law<& as»K"%/{Ll{AaN:Vv!E0mâqRyY't~:D{YJ +$QxJԩT:j(Rd1 _w x,^BK~Y%]K=$eC҉v(5Eq89Hງv](6Q "d'^C9iĊA1?7C7 +rrj&0{)AIQ1f_\UXFx\A<̟4Ӥ6hVO`45}'8g4e4K+w2Z%95].ycy;?p&#(Kk+U7oӦ:oI@_+YF4 #HVAEѰ43>OR$o0qԬ=ׂW\EQVSM^#䮻ky-D`6SC:^/i@^e+U15WS1'Z8/^@U5k!aUh5dp洐~V ɂhmϗC>~^`ҪO2W?#6d,vSy v}_eSN'+EzSs 5!XʥNxa[TJa*FO{:)6|j|]EJjP*,ףI_>X VxÂ?v%S} f1M$'d>cr'BPJJq"Vdku==;^v~uɾ]L"}3Qdfl4d/!ۊdu+݆\Ouy6}xu6VX9̓~T;(oBp^{1 j +;!y4{p2yk,6xF|Ԍ^ࣅ+zj3ɿУOWqу_+'Èw5cgG­hj >=,1?KZ)_.J;QMg6Gۙ!hb6?=&8]h.vYId7"U~Z0c&;T ~{uF265T[\xӽ,Zk\51<>݅MI҉x~:ҶzH'Z"M^=o]/[I=; `=s2Rr_Aj1k{:9B@R/HS7 V탵κ=f\q9$]@a2qPY0O4W*ܵ>tz>xJVn'U5) +qdF`U_n{ioȔAClǙܒrԊ= CTL =*mcSTf6hi٘4 E(UVU9'z-Nzg%=[mjw`3Y+~gHl^({|({&jޑ@G/J},GU?6ל''O%gg*JJ+c鰟?6i19g;"3>@NAۅvv)5I9%Om_šuI2ʀEዡMS[iǠN)e{w+47u_x/+vpv0CyŽKr89L0WG8':˵m',9uTxtCdn~]KT8 .5* C龈?({s({PM%t2nwZl+\Ф/R}5]sA΅/H:$>j>8(@.qArb +RYaTj$Nӟ}DTOOX)a=O$4T!a9@7ItKŸ%1fHL85YlJDcJ=V";,& i۔}لIWʼnJepm0'ŃoT=bv(4FʧAk"m~T-??J'ĩaodn o{k':AO4pKƆ!7TWeS=!슭(rv~@;`gz/T⏜hnnA0䭒U/|4r*iCOaCX{rh-@Ch0P$' a1T_^ זhh,-5pGX{\CWZf]u%PEv@􁿘C 5t#lf6XD]xԐWھl~p/rx7XaAIFEmQv]ٿCm`jũ5ƙuy`87R:h~ g`X,7cmpf9|٩*6S?{l;geѨ0v?ۜj]~gsPw]ĠJ:S8vP\Gm`ISG\a;k`^HRwlr\f~K95b=Enz9}83e( !e%؍2IKqhT}9]_,Լ8NB:~eAoN;h}<9}ZfJ׷=SI) xNݪ*X;k_vW$;b}ܒXJ:`J6_AEO%OR 6crvt*VrLM?()|lfUߎ%BAC IBK&Y!^u + օSi)T:{YAwlW""z%!j 䐛;܀_G:9c V_Enm)\7` c1FP qhBLI=IN!bt2AvmWpa4ÂnFUe{_+b4Zg`^;M|GE*b;{8s;DNƲi>>O!Ƣ>g-f6GFK߳0Xzu5tŕLJgyH9EXUqLJ{---8p<&! A!ya9*wR%!E𲜻 ;~ia`C\v">&/d؅NTN%G%Y8\d SǤB]6<'""ՖHa8^uʄWTD5rI)b<#GWvҕl/T~L"Iɿ/IĊ[9Qj+.dr#ID!r&GnD {ޟrwE%L!gC,na :Poz!ݑr;@ +:nf˳Hx!ہ *.bHMw4|(m &gn*5D-tQj'  +ͼw\Pq5Ylbr"%Tģklwf/0 4D$N/cs(svjſ9+SgJosN\7*x+4ClMh,c{ ۷2/i?1L;'дBJXg[RvB-Ilec1jVsi-m=QT!0q82o Jf]p!) I|tt>ШQYdPL=ˉ& v+:)n >6ZpK@ E ; ب$ r[X}I;yS4PW4Y` endstream endobj 24 0 obj <>stream +HWZJ}<@H  i H,^ ?3L$⟑Oqk|SgU9쩭YRO*I-/D_95tJ9ZϺ|GYO\Pˠ'/UK5WQˮ`#ͮ .F~ZR]n︞.-nYm5] 8RWīke7D}Zr\)ONe;t{>[Vk>EY&uyV@\5xQo +n˲wx{́@]0}VlP +¨H.'amQhsuGBꏏƂp1 88`= %k>I5|r)r.eQsV<2o){^ +#c=?6q +<+`ė |Nd;g0X7CCqDyoZ>$*C!&*FxS_y(RrzSiE!E_-`@ջ6ƺX3U0n>9Df.gP +AC"ycoK%מ,!`RAA:Pn]'IX1LdžIk*u9TbVaoȀt۴фʇ7SDGY0 +A00e5fa[(̍0yBjwNX*z %7HPЊlt/|`)_sEaf2 ښ^%y@2:Xxj-0 F.;BCY B\}s_6gJ?+V͵oeFgi=Sf[n'S^*i)'5a~QFpw/hGr _VYOVu?\inqpftɄY ħAat4 +b56fj3~7d.?ѯ')(4FOp,}J&QSܺF ѳ\C3*0xXceU=XQ!#<m&Fͨ Vw'?:#Q6Qg# v.3Wwlޚ1O~|Pn '˳P,:D g)ț?0 SfUn7J7OUJXJxX5(^k^KNն>H^/i +"i].]. "5O 'fY:[N>$Oko;/u&&-мuʒ1Aw"ԌGI?GnʼN:. "ϩ1}q_Нl2iDW<m-D ;[3鉏a7+zzmc13PJIU#rj&Y"8^' 1J8J%ye +pNĸiQ}iifg# 2oOy8i(%ӽd_X\Ɍr~a>vvk-o9~y0==#뾖jw26.8owyy]4j$o4oIR&meR$!$̿Ԅ人8 J|.NwmR TKq%1)x!%*_ڨ~BTώ%K]ΧÏiu{(0su/xq{bس.}X|vdƮ 끏iiX:1,@~;2P Sw**iqǺ5lt8|-ŨBKƁWLB[r + &tY_N.T ZhflW6C|y~tLn?b CHJҥȮ69TOWOWMI0^.4}axb\BI +O\/haj X \F X}^"OKǂJ<- U-XNP]8"T9.|ޕS1K9$"\ZG +Ț}gmoΠ'JoScpE1mocM.01.6"wi(Bh vۦE!A<6)5%4=TQr''j; +SgC@."~xBNhMEXJ= D +f_:Wͬ*B:K" 9cbQpr+eI~Y!0>SZB(y ^i?Jc8لn X1 {9`Ǐ!ȶZ|qW O +P qT=S; #6x RE+jO%39}'ɩLo/-FM`T2c4|m9jcO[xCv<%3c1WG&@2&ѽ%;|g튃sw;vͅʎYɻ.w\w\τSB+coN~1OTNk TBu'rDɬlt>Y Xu 8cW{J>DB[ !.U[i]ZJf7C==nfgyvvKn$T}ݻ]sC;^50Ը# 4|?s|S\wN?AqOz_ƊD11ejX=p'Z3khNᐎĥ` ܨjT=m2JǕnߒ̫-ꅎ*Om0Χ7er ]! +Qt!w:U*&6EUe#:Ұ4a~aQnKO9JrY[$ ^'>ǜʚO)d*5҇~Yx35Y! Lхv-w:O„D8\WxU8S>*isM yOOt _vgi/1Yd݇XN,&DA0)$t0P+nytJ) = o[|s5u,o<$'[>䶩2H|IqOaʁ72a2tW&R}uW2K`r`f%X>G 'M4Fcy"NqGrP샠F 6ݞ 8.`%NalxB)QUR +[^^ʳ}5cGbc4r=Bbi[ ?ݎ*7}SwkIe,y2*`eΕ! +ZEwޙ,^!QQzqP|sbqh8R5x\KhZI]eYW×hSQ" ۟HbfmUP6)Zw^<ղ^ak@my+`vgFi͟)KIeכ :V ^]'ԫeۭg&ިRxbPxLr !!<9si;DtM FR~/!H'_6yvVZ.vc0hlCTFH=r^qhSŒAdۇ2 iV˛VCfe! a%'ZM17NP!-?{A@ tA] ن ! z xs]?@h 7LMM̐`@ on*_-,x!xw%|=g Bad"6;c>br18<^3^z lcNo`QNv`ΘJ;:6ʃc=EY&ƙC>2mBMD}N4bY;؊;+9YK089=2q€{~ϱߛ842;1+. z M0W1$ w(e֗[b1Ʃ!B%jiH+ T#/$g$E)Ȗ +FʖA@C?c$~VIZj&u[}mLW0\/[Jxv"H^+[J g!]Pfᴔ&>Ue |wJ҄Ӽz9pMf ͷI@>@'HVu 97(S> @ +ae.%ԄCzn%-'  $d"2<%( + L 2_o!v?TSj׮}y0āR&o nȤea[tS\ ;4!npf}܄MKmn EZ1|9N1Mރ]<$S3A#lC j\Cm]A2vG,>qq8ɋ7Agv)*tAKD +Hr1➊Jѝ@MEe]?0 mWvFd1_Nϱ6B]jacŪm$m 4 `cc + ][8z{(7!<+a]a1U+by>Aaײ蒪@l YM}4f5Uhf,VOiUj#g2^n]$MSrVReվ0{ezI?gY"k”PmqCdUwja?E{3`m.kZ_>.# Cث|(+SF#`Czpx <dclLQ7qc,DkѰo)QJڒ^3N~kwh']c)nrHaG]?Ƞg4jKv0BGc˴TJ˟ ZME 6'q$z+&d4Pc +F:9|1eloDoX2/2QL׋}k|ٜ K*Jw3fؘg3)SV|q&Nb6Ô (Dlõ†K`APzJ+㼓AE=N lowjxXYFχVnq@ pjľZH±7J*scYK+8[=a˿ +NN:,S*dƤ]),rW1r$+zaWM?å=sUJq\bko Y&7|f|1-'*w̐#cf%%J8HW 4Z F~ + >&9PueZX̻*\uLw\ĕ)…%\Jκ\-CK #Jzڑ%#z-KF*L5$pk"YWeeVr*tDFj&QUViZ빆]Ү:a"$p/9hUjq`3iXz[+1ýoK1Vaf_t#9]a5Uܑ2to\J\zao2iD(1J/VÑ +0Z;C@z2>576T4{p/ \#.Mq `:[<$ʤ +HDh(YAt8 !)["bHoV9eQD-`=*ML~EHf UT.YJW>񪷺Ŕ/r"bDE DDg'-$H8WHFԲo^DnK-H|9K-+ׄPʀi ڙMܷ31|х,ifP]#]Z.<.؅ہE͉ݔ;!>n`HbаIa 5AAr9P*}]VNPFztX e0έwn^Z>K&rN5م.:H0Gsb\w +C:N*VT(PWh +W8Ll\0;\;RHP6M[ Yj-(48'c}]*?oB2C'mpCh:ǭ(;N; NT$aZIE\I`SJ&9I@ѬRM oM6VB$$MQ>Aqhdmk@ cK ,&o$w<'7?5/]$ώQNK1Ij+ Ќ E*cj:"õBԸb[<ƉT¾QD=lh\_G*Η,M8?0VDQN)aLp`du^+@!>blR EXNu׽oׯ#u #T<)׎S MH9xFo[ ѺzvԿİHk")*jmqhd%%@uB!MS `$/QJ9=9Jzzگj;fy^ƇG6~!?{1?bĠf4?D QӇj9XY7fݩb8q%],ߖwk/f~PU|šbRRڽЁ?vw,*-)[ymպʇHiP2n- +R7m/»<ߛ--/Rw?,ʞvs-ɣp{)Gܸ~y{UTd_}ڨ%KW,׉q #YQ'U%Cgg`3q}FSbYˏ Wt/u@e)]}6zMƩ7ꃻ!.}i,B׍p.ILBƧ94{(ť#ڰf@% 3GsKt[95u7EIѨNeSÛeXnus?^f)y-D%."8jRdJkQ+t*E*2[JN݅"񮫜S\.T;y# qa+?:',Rߍ}V>Z?ߋu3{ +7n5b,W/vo6OZѬ|&\pPvr >n&ZvZ:p$:&JbP)h29bURDԶ?lX!d=M/IdG561|03mBM9WhrǾM\9R)x:?tjvvj`/aĵ 0 Yخ7Zzցƈ c\@>1.b~ ~RP`م-c۷j#KP0 QCi?XB~cjD"D|D| 0=VlI8 +Sۂ xh U i`8D JsD +cPe(L@-"B? 8Pp,)3@j`ٖB({ cH!ABK(62`yuUtb A˃eQR%408tƅ bAYXpcj`IQ, P)E"\0P, %0k suRPf M27g,שo¡RIaIȤ +W\1[ApT $vKu8dtcne{+gP9ұBq3K3"|S|B=z=4GGGOh4?O)Aֿ 3* endstream endobj 25 0 obj <>stream +HWn`BVܾ_@wTؒ y@273™r9Ҍl$,hHvWw.}N.|ًal0i4XlV1Mbez?l?Jv˧-m3,nv_:] mxE7cw&丵c3[w7;7 V6}u ĝ'aY竝#&(ůbsY}i. j .Oߡ?=jv9 þ=@e +0h]nY~bDfb7-uyaXte,*ýst٢Zgg?WQ_ӛ،]9sMN|6,7jweNwKp>{>B+ߛG4h< v6|Wp}dg?f꺮]mkSZղ5YMkRUUU|*[JWx*Z.,CKWd.U)KQ򒕴$U(C>` : <@|y^yyIjWsr s[ʖ6XoXmVXvZbjS34ef!֕.u^;mZ+-\3M7ԪR ++А+BGb*ZVAz餕F7R +%TQJ"/-B.W{&㚫=s8)`5X1 L18%Zӊ4PO -UTRA9exFH\O0"0 E#*#K?&v⑤9Ev ٍ }yWUp!EMhhOdwS$ԣ~jCn?<-4c|7[,9z ۳l 8e8GYHmC^%g Pdp@ʺ"@V 0"'2ih?_Ӓ=o⏈vɾFw1!0 +Ԗ K  #8<3@( 0r'IM4QPM|dʗ>G%  ok$9PY5P=PzH# ]$&``fP`p`UL(̢0L8tmDʑ#3Gn92t艥#OG\|;rڑY"Hߑ#G4>yryH#GZ_}dU-6|5LS񉄛\j8`72 .@lA$@1u5f@sT]5Xހ-߁=?(YJWiȭ=_uPd2Eo eXY&ՙKK/`\T5P4I"H"$z+&݊'!K$JyOkc@r / ߧ{j_ Ԡ!(4/Ǒ+~A6d> ?`V^t1L"UaK#QļquBzg7|tFNLL管kϜW4rNrjsˀxOL/7/J?뷯K X:y@-eı,Rq#7,xJ# " x$g2*O9lRKq{#EJ&\33TH:R4}m#1N3OrȂExݖ]|bce~3+c)e&Z_ ;P{D>~/SSJ3oTө3IȂcltS6'T $4w޲:7J\`ⰖZ; c +jOM+)&*/FzݧbovgV57gxu9*șb~,v1@0+ON1FDA͉a8qwf𸽆w;6sf3g98йYNQSc|_" ## &$d J%Ő`A%Qa%qpT*_`abc4U9HrLT\dcAN"NCn$gI'Yi'y'ciMSzBpl+ơD\H1gl' J))94),C[ye+T):4y4c4$ƤY%ǏkP8*mdtM7Pf41^4^,Y7Yܖ&3!H AvdFaŊt(T8# UdoI~JcA'}"AN'!z^ /)y|/%/uyh,HFԑs~kը䘓1Ig[|KTfa,;l-l{Ms2))5eRo|]C0~$=$HaV0h0Ʊqq VSmfjOaS? 8M<-0znvHg5^Ҹ[p 9}v ZY\q Gt@Ljt1=F:DSST:SF\h E^:Z(PnqD-t.tQKCKhKWZnйs)sCw6mGo;B.ن^7;Vd޵u\{gnԸ/>fNew5{{=IV(ضW| +e)w^f#gϖ +o&KM6tk}= ,Ol|6]W[TNd E`P)ɐ='= ? A CQU* qJDސ +Hޚ\EH`&U@KrE>)lU\գZ,YA&1ؖV09Vf-[mY +u# GwbUZvFUW|PPkʗ4G5ȡX2kk1*ZiQsP{NeSg2O^yϹ`|E.CB̋Z;[8s+H§ʢ{{d^ܥn/|{}k;oc8E_nб6ymFʌ3Fikɭ&lR1hg˭'9ªv4zґ[_ ]O !!)9!I!Y!i!XaG@z0? T#1b$%&1U<%0]"gʨf( Z +AW}uꦲ-WTQ򩱪"'i  CB}91i)u>6&uINet6<&ECXAbeG*7Nvn^px&SU@ICp_ ur/HgЛI6íSvsPx?x|7ccL 0AŸ g +O-)o~&פyK$>kb%{bwOr+7ߎ*L׃iia_lxPBzq85XΡ@Nqo˝q¿C' xzpBRp` >QŢD`ė9 c%P),!̚bMbS]y6{SyUPEUYU~{yd&9fUUylJoT|Jqsň/T5{jE=sȮਙ-cF`D475NxQb(9!1d pt}7nn.tDASܢ Fڳ7Sx XxfKx%̼βƽ ,;Q9ww5Gm2{1|9~}Ϲ m#{Y(9wROFB7>Y7C_LW_+L_|?}~fx ~l!|B׏dk}G rEf''#CLl>=z[M{{wB2"[vuڏMy\5ұ2*'rV +ŘLEUWR%,Nb{DVJ̅@BCE:.{c< 2f74Ac\-c!}b4D:"F>HJtq(A +Ј%6v[ +Ll<"X; Ɇί@A}F?Bx@Ǿt0 pGa@0PtX,K39b2`UO|~ S#)DG (fя^N[5}6Hyjw4K(:{`i6[PešL?qFyoF9>s\ +Y,f 6kfpӊ(9fL.mlTzTTs {HR6f$] ,ZDP̌ꚹ|f6ڢm'.tB*6F% H2(W,J(O0rH窤*ᦄ_UP Hf&ҒZ57jocS=z|sw8ay\}CLl)넃1l^GuQ/m7':~Z\ގ r\ksY*«Fy :D"&eőWYFh6;EeSES=pU"ML$aP)0Kl iĽ6p&MR{攐ʒHK#0k$n]E#9>0f Kh#e!.2gHg.["E &8 *Hm&C-Wa1f_] vڛJ?{[k5n#==n GVgBa~z5I ,Vq 9RfTz.5G7s-.TxBs\9qq\蓛 nSP:@MyScQlt_6xaЩ;,/@OM.UAK B/HO#"i !;ebf~[L#r?!#oҢjUKIK; Q[lB; +*a=N6'Ixj%F UWcsF3<9.ʣѢ?\2g#a>Pp*$耈jXle\1W{ǣ7"0cF}]ׂ+(įv& i3'sQY`d:|߄z<ӧ^^S?\8L7%2u45(E}Ȟ$!/">D<^M6~Mt)_⥃)ŊC{g|jʾ|6 +wJ;E̙JY|sʶ\iLPc& %J!EZM=C)02Shb,ˬLd+#(Bt9Ī8W' +E^%QV0𚍼nj:éW3xq +1:rg5XvR|欎@b_.K.S jHVRgUpZG#iׄ<}6gKduZNM(:`~+/EJ[}߶MCF}SӌmLN5e;k\fU6ZJ 5}uX=&E a D נ(3k^!{pGGt +ߟF?: VD+Є05 {%䳀Lk)pA8Gdh6=gwȨ VvPe]34xu4NuukXe B2r + #dd`i+阑{&l W`ۮ( dsvC5~"킐m$d.2`=E.)qwEJy SwZ8o <;wfab DT"Qa +Z-[[n|- D3HM!CL"FJ@WN$I$P.d"ل҉J((Fce8H\BB  +.]f0 MfD PLxGya>@9fUTugԸ +T`6iJj*$nS4RC RU.MmjKU5Y]BV]~XMNPÑLLg']w.>q|AJ͇tT g49{(?j-LD>b` ŀ1 YnHFQGfc#Ft}1zɢ2BE:"x=em>"Бn7vrHɧ$gMv<`NvL<5 +!zXXC$"2+^2n.Rn.悂x Ysv8tAPEZun*Te5d;%ʹ! +O(Do~_y`j |m=5-7ݡh 6mp\QݧuwlOz3X{پR<= fhoYUp.,}xgձO*J}O=?t +]Fz1|BmuROO%/.qb~c;4KSpV s-m>j>W7w޾;ϊz8\p{SMmGnpcD7{¸Z/0_2|4k" u48a]!åXF>פh1$vN95A NHɞq)?SdĘhqҟHq&_z [3q(Ia`nVh2 l16qeQ/)XAsg;bGρv"ߍ9ntR)p89"r\N'-MJڰu섣%`Fnc) ˢf+YL <0".XDrSQ<26 J,&39؊:5Ovl-I#Ќ vhVhXg,6h?ӌ2,[hr[%~E7Rq2VZΞja].Gc!FSĺ5ld&s y?RHGb'}e [iؓgQp{-TxZb5H,P^ +e)[ )i㈶vоZEܭ"==aX&y qK;f& l)zr\Ə*8E27C+"vF:X0a> c9(,'=j(vD) +Ƀer郶@ʞj(>r2D';yΰ9;fmmN/uXܭ:28bQߏ#ϦBȆKTcю{cR6X- + ǝ痪Ru_/=d[-=8~'|~&0 /0 +'MeIZ%B0X~$xu9Jr'|Il)HJ&xdAzQ~̈fuLdILgȐhJ+ 4xNBef5*d/ɢ{UTyMlh" ݄n +23. 6Yځ>z ǜ;pusv>'L/0|bاHIK9 ^sP`.#)mv9D) йƵ@z7эߜZjlflFL/jx^WGTErGhXEt4_0DS0U '(֫ :C`Wp9Xivў@iz7O;Є*jn|W!C}S(PF;%cP\ . +Ifyƃ㼐 +eVq= f+*DUJui1#堹eeܭ+lH#N$7p@w ;e@)AUv ' gM6H(qp=(r` S :g| O<ƒ>l7s(BcS<.7wuq~?wF}ɰU)?va±hb +mJ?鮴MnW.PK[W0ǏO||NN W_z;<|IvB O~|}8o' +ją7p v1vB[h⢡3~m4BnCŷ0k%inT|}O۸ߧcpKʧWU{{_^}}U -I9(J.CbrkJXQ b#CrjDD(Qx"82AB3azYXB+4<̤LJc +-Uq-TJB`*Y'KTk~ax),Oߕ@`nLƅg~VQ +ĔEoח 9vGJ?.Q𲮜H^bB]72 ayʥȯ.0QۤdW~r0Y¤wcY?(w0$KA`9|~(cuIWXL"epqVHHd QcER`mxg[ƝbNā+l8kmpҢ2a|4@ ҄W"*.6$48iv9 +TL"*4N K*Ǫ+ZBԈJ$֠}x"CI/^n#YAx,WmفH}j9g edcrfwuUuiT+̰BjDS'AŦQZ2)p½v[%6όuo9L;df&[Z;R:N6`): *TUB;uVK\@%L+H(jݍSKQҰEJ,b䳲TZeTs uٓj+֬N Q~tjAQ@_09b*9 ;Q{0 uGV˔s׿sKy |RU0 Uu[a%Q9D -؁cNEEzUXe~/gtsӅ'q` _9@0D36My}R}{Q/_?}틯=_~-q?W/>B)w`k@yh/?EKtIN2nȊ t\YLI, +oğt{d^ʭѳuм6Ғ-ڜl'BnכBslҶ9{H:5$Clh:D6w|zX8 #znbLJld4=71[$UpFciOy 03+e0h_ a%v(>46&PYo#6;|V #tFKY>ݥs]L8}6+YcHL a})&/!3L$t˦EeʡA 6l@ޱ[ n{kPlAET:v1ރ-rbcm`%gASƛSZ#Kҗ;`ݽ;΢GRe,CWs!=5,cɭZع!خzfeZVO` (r`C6*%i&OB'<e=q&Nwo*"faj|j) AûCTKwk :6pE^4Pycoijp s` B'8Ԟj{ +{.W[%?O$pəJXzSe6JU +ip⮭,#쾲ؗm 其Nfg5 ң +V[o=8@+W֩K QC+ LV YYtQH˶UBo|yFC?ұ"zg +1=]G|E1>Un[Pq|a{بJB^2My<q)a b )DhяW!mW+ӎ'S[p[lo\L^ th5T7C]/;$J]v:Ԩuq_>`,i =TU\ӵ,hmq><X+ <&2szHɇ>Tw̅zdn#Y ڊRj1ep~A!%L)=E !6Q^YIE~5"AɌ),O#Ȑ%ݚ0֡ѡ R4î^(F͎G)vW1kAVc +%Xi|"|~#rtLydT#60#oMv37r{*3kt')"vzcZ6vKe,Ay :D뎋鹽~# r`!.:XcmxHA(Q͞q "&6MѺu7lr(a(GЭcbC8?D9/4reչ&VCGQQ֊ΎVt_mA%#Jg]\uNs=NpЙ[0%8QdDD`{-XJa3ߎʂ +]4Ggud0.^}[ ek(ע$SeJs+̙<%?+?n]5|@H1_xdMvc`o}1#4xN+Y=숄 VQE3s&v zLWiZ8>ZӍabI{Gc12~d6îY^DwF|VFq.:"xail̸֨qdlB((D9c1·DS>IJ,D8~lmtgt 5f)qgR-(W +4Ld@#=F7p'<}:Շ/,QКLD4T݇Hf}45Yڕ>Ɔ:ԠCnKV"l cmZQ~VbVd*MQWTg"۩G8ȏmOa\``Lϊ hΪAt:c)' 细PY띏4~_!\80*),}`e9UPT `V.EVȢo38,ؐT}\~':AY󥣅&FϽ<:2ԱPnFx>["!S[SvX ڶބh®<4k/A>:ƣa<`cEH6m0CO#iq0stџUF'HyM"Qxr`D6 :%(j !uY]DĔN703TօGhծmDH@ZO4q$)*cԵM#. [aIt6A/X&ˎOJINj8D~-OLBDqGMNFVs20=W$?WH]yDّx+*C^96ţR?EQBW8Ġu}L bꪎ*_LQkݺKHؚ>hyEבJN©5#IVi&\[AB!5p"h ۵rREiu]%NCt}4a(x ģ x?X|N΂yFymhlwgh[=O(aEK9'װX)iL>mv-n}:ĹI^MaMqyӻ*! +tV5Foqk(MZ@LQ,6w5߶WIk1.6͂;FڕFj4CA;unHp949 AkjC颕N_Siw:ϫ /7[${3V .si Xr-%W@$JBqD>EE/DfK97U)Bbk]55 HPWֆFIJҡ/Z v+Znm170;!a{_zlG(P ~}Z9&ޟZ7bB˓'<|kj} ^G*w̟%l'@ vXi]wju1whx(rӒkX/m5}=y7^s@.=v%+x>^JKǟ{=qѰ^~yso?˳ׯ_=~<{wwn^vE-o22ռ^U\U0˪=1N਎INٝPHS$J9iy iy[mB$ʶlfH"ofgO>Z$ M#9K,գ0H8+]P.v]wȁU}Gi acd1\޾rFYh% {4TzRq k'ݸ8I[Gբw +JeQ$hF׻pOKͧf ݙ[6f^m޺>ǁ"C'϶pbE3L +H|\H.oo++G7 8SSqOO{ns@姒?Oȏ砊A7#K(\GQ(Ă{k6/\1E({Yp*TEԾh:xS^`f+XMљ\[IA.TJub]:& ͙FMFV®{Iwi8ڪX|tdn vӪ=t 9_1G4\,,x;&˙|дGػr6MP?. C³qh<} lk5T7"Vب~s!!.3[3֚YtӑU>RB4J˭e/כb՛|go[o;GW|9r휤^ì:= ~@m˻7zx?}y)V̠ٿ5_jԹE#8< Pb- SSZ-9"&du .%k%PL]UD?y$%ѡzVpZY/Bl+*D3,$QKh +S=h80jue ao׆aLUh+aDā$ `wkA .%]W zfW7KC-V +Wf7HS.yCQ',]B{ 4@;ƨ @2@^*I/A^Tiɀj^<=/22:&foh~/*R8Ϻ?8A-!M~=>K\X7]8(xy0j:V*?eJh:&M"Q]x:v +8>\e7 +G 5/}4'| +OKMS7 fF!N'\ш9P!"L2GV&E̓lNzF4D`I_ wʡۨu`8 +?m@*(yX`LEXL+q,P0>+@ m XƳ{4|ަ+d*}tډ=¿D[Y0)tA! Q\'=zsf2:vf+ad9TƎhTdM/4ŸΠ6imI?Z|:Jyi[En*rFBe͉`'<6%EG_:](ʭS,ZoJ/+k#H Lw 0Q C6i`~m /h\I|v Ts$ Pm9;SV$Z-Lv6Svvҏ!ET bvszɪr.2}ffaS>wtwGlS! s!*+Q}ľ?xnbZXfJ?99~Ԡ.`S E*V_U 5#~wJ,cd*W1g%",bB*$4_Dr) *Sy[O6(C? +:codpQ/{y[*рЭBzY(xzU변LlB눏 '_ r4Ĵ UڔzWwPz&&:)(ڳvv!$RBk폀i kZ;qt[UYgp2rwS >8T%C j7 Xee%i? < \Z4GЋsJqfGo%lpYCkAg +q*:zcpP,S{ς9GE-WV%X ݕμtGtYS _yyMgu+7_mTR`͉ D&Ӱ(ÄZصfד1|~u9S͈܉@J XCES2I| i\&ɔ˶Jyw-,c[ `>stream +HlW9$7aYş9^aW븎'Z˴kv5w|:vwm-ݪj\}̫'~- [[:|b"V=gD6.v7DFJE:oS/ތ+5l%}+^F +!T0_ Dj(~0{'L5f/v1Vdp,h4]n@ݑ=䪩5| 4Dd$zwlpbw584Α~? q hZE1m PɸI*M 뭎 L\qydg=GXe1Gm芇qMUZ=o!(u3~дtv<6a[FGW@GZhݳE|PZg1G܏r**%v{e%{KQB,f]`2B- 7* W8]e&ț㯷V = +P|9& I:2j]ұ*p]V3jg2 JxG +*b G4 ͜-v^ +H@D J_@nD4,RD'.TgvJB05TkZ2l`qy"N=&2ڑKU +o ، +ړV!s` +PO2= +j#^+}r7@ +|{:Vs^I:WSA m W^߹+}Z4O + 3Oݡ+$ ,ЍʫA{'ѐ'0Q\Ǝ~rGFbEw +Un +7|HȂQFm]0ӽJw ,R.LAJPŬUdv *e7G(Ih65Xl:bWB6 f=;=zqEH@]Թ98XFwdImsV7&G@8hA6D~JIOCCC}8#5u" +1bٳ:_t׾հ!F h+-4إ!TZ[ gZGP1^+HH7_BL(R !SIh]q]Z%R3Kmq .Iƪ +~@ i!3}g:&4LR${l[2ax6!S;mZA-hkzx1d}g3ߥwHEW)ӵ"nrFm枚2 ,O9Q+g@SbDQ'D6H$Zw'@|^`ojNߌM"tZ%f|MzХJc%J(e *vµ!{u:Hmͬe&Ud'O +;'Er*&! [e0譍iIĒћ- )fy $( س Å+hlsjpC;bZfQcϾ`_wϛgkѬO8+1(odQq'WNن>JUpQZBS@p!Pѹ 2fp}F?ǥOM⠨^ %ͫ;rE +y1bE }K\P.:Kp+a|XDt~j'o֥=jnZ֨}^Y- +S虻pq;uӟxm-,laN{{!%"L<0魸r{z0S}wi{|v6w.`Q&Q,˘%˳ ,ǎ@>2qa>pC7z{$rEifŒG 3ɣ+!=4[~vTl +;r nULmmv֣c ]DS6S +B>K+ZhN2^ǼZsj5`ܹ}+H;C I Ԟz G#Rd43>`avOXdԿsBvgƓ@GZWǾg5>L{ʤ(0=bϫDﱖ+Hc4"NDcmD)pJmaHiE2H3Ѝ @_mAX4Вr{ cy$K' Av~"\ HC9Cs­9hX =z)s"?o`HCQTn'>s0l_'ӓO~(i˫V'3-|JE-c9Tێ՟sYSN3Z~,'uF "МZ쫜XƜCozmhROUB+>$;X랳Y5WS$:Jh}ڷL?;#?˥_eR$@C@$$ɀW=?%%pv MmϡŴ9inh)X9è+oI)M#ym38}u9/; ¡H\kqR}W~LA1m9ܲ +>1vws=l[$PiY\Z:ƉzD!Xd~@)viNh{e| \j%B3Oƪ*/Xa, Kp9/dɹKRr$|@:N!ۇBJ/\Od8ݷ$}[*dӻZw6y<6n)C՘Z},>bxHr'\,Ō?@» +.8+Օ}] x|8Q B4|lGޓjtoTVq`ZZ]ZeW'r [" %fOw1t:ĘVBZߗwsKi~3D3g3э'M;0{&jIB'QO2sRIMғ&f't8 c>UGә:h9fyxui)E9Q/H_I VPR\P}4q$M *BK,wS./ǧo>\?}xzy^^ qbX/^}y9?}ǻvW7?޾{#o~xnz[|67erni9Hًځ*[iUfٟJ#I@%)})kYx`,Nh(hP}㻺M[rmT6[`H"1ȋej&z0窢&[\seД#<1'YL)QPҘe7v QqϗWG#0=o(/^xHgh;q cU`806b~D3eÅq 7moLIuqsMG#[.DA&`(UN7*Ym_mXZ5d宰;;fh3ՓgHlLό8YFpa#/WOO^ݛ^=ވkNNIbI055m&̌ V u$L<ЏH͎U"3ʕ$% H^u\%KzQ`_YQ~ $:<+үd_(:ܚP6G)FT_JHpJE66q !-/x|hCju'5+s#zmu\-AV +h_䪨Y^}Zͯ|N}|C4'*aH5Vjr>$$Kj~.-ю׸\wJ@!,o.[**%}ZC/x;mXܗ>n@~}_av}0ɳs/b~_,/ܿ_./_]_tJ{[W2LǗLft̆D /7amT + 4E.e%uuxQ%y7Z OTG|Gt2<ʔї: Q{j^R7.mm.H"P`m>4[" Vq[aU1a<t(QMe/W3z3s; ]O61&CԪPSFVvX0߄|4)D;jUDiKZ l]9(͘W# D˃-p$ާQtv,U_9CM4/8pWe]iIⲡzCJmmBYxx+hW1%*$@Nw\}z7W*ll,+&# U&f<2Sۦ4|S!sF3x by.dQ45YinU;Zn02tt2\t"cՅ0Zur 6a ً.~Ș'_B^}Ed^< j-ȣs®Lj% BJ#PfňTBB^Z=ƭzB;s_̿k6dS%t\Wԡ TOZAg @VC0i% nb.ܵE8Jnh6iBek\*0]vucFQo|fl<~XL]1M[IƓ/|L/ncnu9: >䴐ɣH*+ɗ;cBC@[N +xG0=7备MjOM+ Mn + Vʣ{iþ\*cNDv&ؽ7".x (MՌmlR9zr܉Hn<4S:տ{S,1L$g̴yzoV⊰޼XQV]u,dc݁h w"Yѐ9M +]3kۅE_`lL懪G ߠj P$ Q9'N|jR +DGWSo c~\9HU }Y В+>02F(9w UzWIQ)v#,ȅLb*jt Fa_2U:sӃ(&=Lz7(x? jmݾtrcA ję~й.BdAp{N'h{T6j_$. dW(}K70ո~/(r)z R_[Ċe}@F񚀖NJ!ZPl ȺǏ %{MQȺo 檇g#'m+ ~EAP%اgygpC0:g&|%jdya\+YV] (xz1ޅ1SW0dLi)eեx>x(RIxRĨVfN+ !m!ƙln>"X2\I2;7THdzKp],TSjDiVVu DwMͶ3rni]8OB+'4)99h &gN +& 'z_0u] +ET 9OKq@upq +yP{_>f}`2dMBei6b"+j[L7g~'uᛋX[E&L>b)yqGI4^ @Z#L.L5j͹5ƀU=ר/C6krGn|Wľz?hBʿ:2 hv rUض'ºx^kl@&9=kOӧFܫ&Zc i|:B"o"ү)pY1(F9Tf)a+tUFH@ת DQhDЦʫ~=>L;,@+sL+ VM@d Y҄@9}{N;߱9hQ^u: 7C8B֚DTώ_Q)?DX^Șiu2]W;q`0ޣje1v+ۍb}Uadz[+=2HHR8'gG.F+E;y*_8T +)/$$y=gź+NKw' t[w@fr0y, p*44Ѝ*ǾY>ו{V`1gĘZOEL+j g?+s N_;bow#O~˗/}ק?ǵ%ʚN*?}qTaU:W\y|BNse Y=L$|sljHuXA,/IiMD,êz)V;?_<{7.o]Wó_߼@iq6g.ӻoן>Q>H4{p15`}G]vL NZyA?~J}w``-ǟmtWɦ4_1S">C`F$B HzI׆c69/m(Q8/]L43 5Ηw^c'J]S۱,"TvJ[U4|< .)߾ ɴ~;h()&Yg.>E,wUN4.9ULwuͬYlXJ;KG zh'\|]a +{&2DgtH[ʀu[jdZWmk-Q=IyNoME6q~6+^mFvfiV`7oJwŀ$?<;~էo^ͫ\]\M[{YBuG_y(smz>}ފoƿ6B׹,IʧxQ;jXr\X"W"r|DM"4Lķe&:[8[pZ U9v:nh2T}q'x74& ւuNAcgJaP*>!TKRuxr)5;kRRpyQRH7іI /QJ8+|XF"?d^6~KE$ƷNLZhIHžh.[ħQz=iAF~vA>o(_J~xrdmóoP~xr~o.3P"uc4H +㜠N +@þC5.H u@T<#hc;ؑ ނ;c8uln"YafuaSs;Z` vr9ȑuPN[v/Nrn~N?VCĄ.uf`N֜6Թ[ =@ϽK&[c}r.]rMg"3hœDp 4Td*s?kҫt$g&RSTɡړomʉD0J "ͬt-RBۆ y;=EF:I2}OB`~M1j3 {4eZCn6R!-tQP'Ht^B烣"iE'L &9Fdcl-vp?ԐE&6ܝ`4r| n=N== A%6Egx^QGd0OHiLEiHA29?}6aNbTem' tpTYIIMk4ܙ;-4eCyu{2!okHfOA|.`u~FX *mtLivx8"7ި(Y,5E-b4)HMjvvlXXh#TZH.6_rz "TYUP)ŬY1_>jDk_R711R^Mj|9fp:^DtZ3Jh +dPO "#*NSFC=ɊJ6v$ Twؙ'$ bH.u@ Ja-g<6@p1DH;Tʰ,ycؐݸab=P6Պ=TDhR,J!4)6d&jg`Ԁ(9UQɤ@{{ #VcP[H+\j.Xwe2ʠhZި RUy/>!PLT~&i +bŬɆwY`XF"p~2Of/`gj`S '&J)BSMGlG'9h_6 2l'u`aTneO u"`\S,D$E4Y6)o$bIVazR,53ALb ȚqqX 'Ǫ ȠMN±c%)ɱbK 6EɆɱ&&Ǧsh2jD7[I^|0ٜJ1 E<#UV1ԽOQd@ Jz>w`JFT$` +gBX|ʣ˦$,(WPNOv%\UξsAE큃7edInѫZfjY^!hWRa*.$Yi*I ABFɮtB>P q4e$o+;!71LcQ:ͥf4YKS91,aqA)Ǧ().]EYD]l`{^@6d5Kt[k\uTAFvk ER2dB.J*6 *ȟzYCʴd6(H0boDMÔ#@򻌶l+50f;Fc 乢SfUuϩr|93 mSgT5ҨaǥZz h)\F"gzOskjJkJҟwr8{c +8JWl}*⧶?8Đ=[*Qmh&$*)lŬIƽNj2}_Gʊ=3f  -EP0Y&PQ\P'0X, _I{N?#f-7Zra:JI4}7t-6~ _k@ّoq@l MTM8+ͮgh*ۅd)z;7>*i(Ra_kDB\Y',é3~"3&`FɉQNF\܆mf;ω%OX\SeGcJѩFtڦNK}}|vضNQBUBA&g$;A،v3G4 :A.g-C!A::+˜׭wNiM[P֖.Aۦy +I'rѰAV0's¬ #$):].)u7h͖s +&dcaqR686(-N>ܿp8:\ <^-}%֫8揧AW#;84\hm2cgeq4C7fjsB.1Zp {8"$3 [fXs(Vm^^π)l 4/ʒsJ>qO3r*V`2xhwE"^TÝbNX_쇋 zg6c`*1_@`pSvy|詅.nhR.^usY"HXJ1CPA_[+L<^8YXu?Pxˠ:F3 ;a{*1S.F<^o%; 34z[&9 iH~ր=0"N6 oD :OH:LI Se_P_d22ZMG<^\9b`J.p'zB xETROLC2XѬ,#` j2 ֶӊ[{k^M+q͸sOTe{Og{n;6 \3j> +@4Ieu(ƳDnpg~6ikCh{:' ncY7n^IdJsAOGt\}VfGG>G֤L5&5҆yHPH[Lԏ9tq|VcT]M\`d/ڄrj1H&nfLTtkFPsz` 5b>]8ÜNhB(9OUʙa3tb93" P%zQp:됱6|<^W`ۅ\՘աxtB(h,qCBU)5Ρ^q}DCnFC/UY#{PM|Ph}*^qkGc +>s?Z-裥`q+ϊn$MEO2R O s= yX7QsN8l +[}~좡ogw +VV)0 S@d+d>K>.oD~s7ʹwf‚;luGqNUp w!eh稭=Cۤb[綟ߚDrbIl|7Q.;35MN{qx ۿ/2 sj+#,`$i;Jږ, ~5n[=խOhca$ћ &k:j~@Rfà#GLD8"0cy~$itZ +1Ekv$^S&#J!ȏ-*E7+#FP5G)AsDkt1p R|O҂+)A󹏌aq>Hĝ'XR+Jcf3V'%"R27_t$15Ń%ޙa늓j(Ll#ƥ8NB<]L⌜;U3y'|Igi؜,C (E¶e@ "iQ-#Λm7]{m~f + +GFybzGd +i]g)f?*m܍h'D +HM/vV4Xx}zgl}^<5/1l?Dl0aoO/0E0rNI0jC>FDg~vԾgSy7ў,uJ"d2FZ%ü,_%2`nh;D{ Mkބڋ$:piW+ߙL&5-S*}e&EF4aqEyTFkxl8l:8^#yR2ߙwZVxwp\ 4[Hm%GExNO+םrKf5jy,u9oݿWw~P # &OYBap97|fk0ϩV3NFF?7L5KfM[/[=x㨅((?XbqKE9DS&!8tJi4lxd-ܤ=X̅r82ҊNmvau]JLR$4/f/wȓVWWu{ *2o3U.7ɨ$xUVT26IYQ]ޟ}}Զɳoyë}_vkw壡c/O^nJjn{β~qeR}#sN/Bugy;t/DջLؼ)hj{U6Wo6|gR@_}0c D 3Bɟm~7汨r ૡ k6i;uDQ] %dF߶;XVV8i:7 ng S|+]ڇF8!Quw2SJ8 \UpJ>)ĝ%Wn2oe!eZ^{;a.̈lGE F%U+Fm(hXRP*E!~J$^Ve`2M2ۻs=>"JI<i{k]0Uaf5﷩jUݎWo[h#yw2'\d=뵄ƞ(uύSd%F&A2m{[Sκ-/v2m[AiqU.?!=\7LlH+țpm~F@͡wtB~N+ (-IECPP=EOa䗪vLJRGgSl8Ս޿U:BD7[[O߀ xXY~9LhK|Y| z1(e'DINDQu@$l%3"y ydr. .3y0i#= GϮ=‘G1`Sp$g%i#5Pv<ݫ;uȃ ټL[#JpxT?VRitsRxx'#)GrlG<‡DG%~7hA>Q68%й5ǁGUqy؄`jrXcnx9'į 4>+5C t4?F?{0 +qR_ȉ{(MRF[hr&68B¸ Xr^b]2gp^}[Zҫ !\510M m!PL'cI'kwq[Int,6:/);ӐDS1;"R䋣.+0G̿8[~H?iJXP6zNIK&>_uTy}b_$ d"ZL_E1M ;*FJ\R*!Ju e55EReq^5҇C',b'V'B-ˡ=Ecq?\ T_hǹ}ks9㿸|}>+oi7m_}_~O~./XG'wqHHMCWWS^Ϋ  aKaΤe$P! !]󂘒Ztn-<. >uBhW^b +M- w2f:VER(Rø 5.*N/,kMBOh%3Dx +KBI- \IfMP3w1Sy̝,zl'/ښ-'I!$IQŖ|&V rh\ݜ+;>eAGS,ɳ xbTg)֛xi$MJfgaJANS[#) +8XrbP٫ bMܳ8kVd(h\=yJhbHL^PG&[}w*-_Z/pxR[7lk/$(D@J'ag9=0A5->ZppUUDgde 2ܜ_I;ig1 $<(k!|be#]NiX)]ArQ94NnX_"T.+ .aj! uZBb\Y-'hCj Z^Puy6Vƒ*-5ie (bHNA\bt8YL.~ɥ[B,fߐ>twZ+*ݗ2ɫ6w^{~%|?dƣUo!0< 3s$˼;T^Nu@~<\.)&)b!)wrRfJЭ|EX<H@s~%H7L]@h^Uq=C8 +zjvat_wZ( 㬳󬞷 ]u=o\>zF4)44.Rļ=-zUSsnt`zgg2z(Wς &yZ:w=F3s*98n LT> ޠDم(7G +k}IG t'V%ud{f7`)ytS]KdF: Ás n<5a$D<,wRś-kW_p}b=b@?;Ҏ `P:J6Λ%e#t /-;VS +e ]ɪd*rXX͈:#;V$3Bs]b RGXIgu'v 0MI?HJ+f!jb{j| $ n4 +4 /CKlt;zAV<1,[ 4֢Oogk1$uuApkmX 559[fAVXQa:c]SB*G7[V2aq;X:JȣGmu2=J9ÂQ>M 0r~=?YuB!U+LSXGvp䂾01YxUȚoOk(JMShO\+ ɕI8df]MHg:l˥7 +[E2rҕE"mRge(m@y# M !d)&l)愞PiƓ_= `Y3WHnwZcWքRz&NP7IgYW㬱rsؘD_RZO_~uzRc䂾m.邜*JG2*Oԗd8Nǥ+ N͓dfdRto!9kRNeuLbAƿ HptYR902'I=47UYZ 5N7;H(!4<@vIX [:k͎4!0%i]Rڲ6MH#AۋO6Ww?$Lgr'י7R80?v*0ya(͙s0 ;3Kɇ j3t'npӶt_8y_/bzP?S A]9S+'2W*xv叓L+]@%/:I]vU57 G-kOj_T2tiQYFhs)T=|YA?Iڮ=L`ajgWY$P2],,MgM >PzCA(N,$"Bj4BUt'a 8t_# 0ԝOI8Yɬۨh zٍkM>L:}#BD <{Mqݒ*%7tתaG6xeU +&v2MTĻ'[^.bR +3P0+ZxUaׯ6k >Jf8<\,Gfk(]!\;H| z%5LTadaꡘr +h]vߘo;8i^ y޷ga-* ^QqG&H_ML7#ffח-1mG [eL@wfE?]߷)3cҞRVF$H` `qMjWЦrxPU'5˅}֨5؏oxoRhMȐ>o)̱.x1OVee-F0Olr[{ۄl]͒p4pFpV\އ< ߞc;"}L޴.$:x1K#\85ҸkP[}uo)+cTe[MM  +xX8Cv9go6҅&Nte_yovů0lu8zFMx3%{ ?fV$w= d.YI:+.˻.'9):H :bR #3eޮȇ/ MoWk빯j#>G=6P؁QF:*9| éw"{UzNsouyO7o]ݼpR󶅃+4J<,__o=[j91\w}^?rRKϗ|w77?|ym珟>_=ryn߼xC 7~d*oJer_=4ȶpɄ1`n cd)L'>ϼc4l6472SQmEm[U'!X<4!BOL]ޜe7\ZnpUE"̃)y1IR" pACUw B &E +a\) Atم /*hu|T)0^ԍVa:2g! 02a otd8W=h- LڦV\cɆ +J*i ՊBnOYĒqI@ݒ'͐t倪z2f4O_hHIi)%&;Z!ǭQz#qSLIg]=*Ԏm,JD1Ð\3RE80n5E"UҿrE1ɺ㔸s{jV^Hdӧ(;75٦LAArYtyt2Yjf_`Q@F'A4 SQJU !G KbĆWJ:ٲUX,2M::Y"9Kr]X +s[/af\Pd2ChOd_ [XROdi'Q{y4 endstream endobj 27 0 obj <>stream +HWn\}.kr!9/q뢆4bJg[+z3佻rF"khg֦Tm7\)8K:$Z]ßLQڜH(QjWdqV$M1˜Y斥u昳9`c9I *daU q.YǞkv!39=2g+ϩ:><ݝv˳[.:=|߿?zp^_nؼ^mۋ Lm`zWbw_o}V$Ow7OW_7g(OF(.S:7Ý3h,Îy}sb>ͣib8owvrbϓD;cC5HBVaz_cƿ  Ewy\vY֜ыZk//WowN:#: "DAGxE)t:w/:F)Gt"U|)@1ZjB%&cr$[GMΎ մc9SԺk_)眺3Bx?G%s3%wm9۹!Vm `3f]Lԅ(`UI:TZ+3M1I=R5Qz$Y J#ZKuPWO=a*(Ek[{~>. ⊤ӿ^ %%zoLEEj9UsL*N@w4qk)T:O 4u8ј1$M>x]!lJgl9u +:t\B.3>9~p]7XXM`:@8`TW-HF*81F([1 +@2 TPuȨeu;@;Nl00;wG+b0AQS 1(Tg;HRv+/@-:`,Ȫ[J^#(s ᦽRw-ρsH1Pr@0y͍QX( >& dibQzkG PEN5YR"=ZEz%x 笟|vbBOsdSB+'YsshpiI"q@,H\(\@=ʲ}olYRBs+SD(\ClueӤ }iB*)?rg[ThbV*䭄3`"!*GQ 胋B%5g(ܝ^ݨúlU!Lf>Oݭ資I\XsiH6ܘnX-21 T?9n8 +6;#ٛnJ0hC4CK2v_++e8 3H?a>:qとX0Q4+0dQB'\ARhd0$NB$`E7̂c3>PWsF +G60y4Oyh610!}P+&vwh'vȂ?0\U<ݎ0t'5JB70&)ȣh u2L"h')GFF-BI=ZAyqr{]8052g% .L3 ]--c½0 +Zr48/ +nUBF +-0v!ybH$oan=bLLŠʝJD3չa| <^zP[;;\o3NjYh#U21Ey4EPUMNpAjbY*i0#)NQp} +uTzH.Hs%z  >^㐴*b} 1޿dʃ1FyqdFxXyu7H:$EѬ^ཬw/5Z&:u D~jh#+7IC)_ʲp4Y0^*cS'L!2xC̫a7j19)}Յ[%$t{qjgҢC`Q}*\>'#Rڄ Oq'罹Y^R,)CԪGY0i6c`]0mMvMJ8`4FJZi +g_&=f{ 1ڽfeUXZ] |f^'&*7n1O㺣L3PcQ2٘g_jCج;Id3zäXG?.B $ir4NjLP~컅1N^kӑu0Qt#Uuk-n[)1HNY_) M6*&t[d]CdhD@t.~6,^Qqꝯz`-'pF5w9aH[ 1je"y<6[ȒxhVj22D}ˋ%;"̼(:μ z,Zo޲mgʒdddWE*['DnI|KnZ&(/߲yYѕ1#hq 1G&i/$v>il]E}%!HYGGAYxHr8k?4$&KC$sraA7k~v^7I O EJo'd_gyꃗ~m(ad<^%f2+| Ṙve>3T2QHSg0Г9[ញx+V͓d4l"lMdX}堙=8bNJ$7J B~[u$EEb& +P]Sbg]r]]F2ɸF՞xتRqt-Лn MdQ~=BRr.U7咫{S^@Z&P'DC꽋&*)|V-kG\(R aw&R*%K1Sŵ#Ua!Q~1D'RQeaSmLL8I{3"#9cfRԄq܇Ps2V\Ipt{I5ؒDS^Sa"-X +/3o(a*i#$|qD#AF`hTZ"3ycݔz89N XQW R"B[b]UNBl*|Zʧ矾?|~o4ӏ?2/7}HeR4>F&"Z̬zaP]Fg|SՕyZXt1u9aĦ[;uo*l*-$mLF,[f6^D}pidhyB4 HoZU)hWv^T>?^,G97=C5VHZ9XO:`9|r`;P9?mǙ[:?hR&\ ,x9>&7hAF9jRç(w#%!FEw$$аC.eOk쯕Lb%G<edx%*MtkȌV\n"Fl#?#x;w.w0ԾcgC#B>5gLChy  +(T](bJ3OkzJӼb+WpY(nC!ϕ(e V^zYmD#箄˩Nwd%oSw:5:AW󱔞8n$1Ϻ̢ +! AK=iEqA%zy@ +W%,3].$uiMN }=@W59VCj @6 #0zP[ûܧoj:l0˳Bd徰v8ʒt t^v5_)Lء;]ɠc`;e{84ebPб@)Z@1H׏1re+/+9Fyo/)YRHC\^xz$'bY[* .#:wPuUƔ;YZ`]j37葎%"ؠ}F03h5gsAr綌Hb֊S"Ѫ?U:HkbAƖ|_-rgH8]xٜ!:c:1% 3ˎ]Nf5|&neajҧQDJ$j:I$츕sForkEI9*/4Bm=l -Jb8zԚ:H/GE2 ~,V;Q +F xo6tF z> c#Cxgig)i3P"J;5(k:t [E{ Ec-\2j!]ѷODPvp<k}օ O9xg +ieS 6BրH.|LFswP#̕o31bV=}bZW +5e$Q_EKBfjf.[Ȑ:8%`7K-4rEs<+ip +b~]h,~AL[L?Y / +&vW%r;0rF}#! f2"#0߬sǯ4j7KwFK< a( yLҢWG꽑՛{ +7S |FP+׌:0~A[IfĞ[jSD)N'~S}d[ߖP"LP`cN/1EٛsikIGpmAtZ̜Yu#vػ2,FJ=yw)K)H un}\3bмIn4)JH3DE4וXC2C5s#)0JCZ qG +m @p' N;Qm'f( <cwy_6h;1j܈ԝ+wQ 7Q\P=W:y]) Ҳ\$Uz^s)P0XVWh+) Cj_cAXE=5z%g\nG,qVA+ sݕ&E6z^f!2^-YC`@^_8w`"»יs^U[ɺ qKO$>Οta_/jPv'~S2}"y֠xu2'[* ;+8 ]^9r"»bD(junϓA-LR9??_?~_z\TAU-y.@J D7X_AUԎw^֊ Iǯ?|O??}J#?F/W9bilᇃF<(k؏gK 9sr)U䛰Y85oߧE֥ +ԥ6U[2h1 @%.r")T"IDc$vce*^g̷^$ |sa'b!,D:~D0n@ Iys[E$$eX$BxfɴzV| G,Utta%[A'o,5^94zvv|(Ị/(,\HeKٓĒK&тjݡ\ZR7t{{$fߠ4m8]@dÁYRgȁI:p%A9M,&K'Q%J¦P ձfMh?8*ц_PbFF:/+@8%>7OK:qLNSdbf9$s $!S \`?LW즈"jqy"ɝ3b'"LVa_g;܍{;=Y=+ 4BO.*k8 UΌȇ巔| JS4.9Rŧ/{ UkeyJx]wnT!Ψ^ʝ2S1㔂|iS`kiw٫C xBC%d|%@9V^s8O⣑[ YAʑTM9bM}a}\.Oy4UB֤?gEW>o|qLOjN9fe4A{IYjݡPjq:FxJ5Jn3B`QLhY RgcvgVTA;y&{v?Q>Jŧ>NDHW)2y1 crm$LH_9ۮRYO2Ow +D!TeYd`sYu]%sgmrBBMPctf5웲١\DAw>~qnmjԚXvx74E#r3'd@z/ڹ%7@d|z=iuwey)+5(&qS֑MߧSs=FɆM2PQIޣ_490[ʪ +lT5_`\[/(poʲf% 3 +*.Dte2#ڐd׃"{gsPcI];1(n-,AFmL +V;m-j %⒀%;u<^C|`_=F\?"KN-'SahCwZ^n+zW~R +TCr%&a0҈(Ϸ'$w0{Dn^'Yn=]8N|P;@9Q!+2jsKxXՈc/)~~62 !PmK qFN#)gOiClPq3z֎YNF 7@ s>nZQ]ֳN)%N޶%u%[ a$unxg>kv(2D2wǔ\QV%sO(zyNzTSmu peZmҟ;~F?fYȔz* O( +GNmMrY 5YqV$֌.* ?"<*N qcpV_ ROiIh/s +#Q$93fH>8/J~РdD" нx+-f"|"A=)HY>35m4Fa*uE>5&qeXjG@ n +eztJn9=[Y,!t(kӮ 7tU dq6Z)Ӓ9 +qROm-a=y4 +*)*(9ћC(٦Pb^LUݮCTpMIOKe} +xPSZ̎r@3K+.pڭR :oН&k@㌍irx>EwfU ʈ5ش2[$"86X؀haYq%p!PWEN FȾz+Q3k34Q e-V !E2Sr{mb.}g|ݻǻO_/z{Xwyyw|Vc_a?F/ T쿷_}/Oc/g㇇O7zۻO7o?wz?goēc_/o_g÷/[> fD3aq#@Gui@~PFvI|1JAjrƏi5j"p3~QڡyP !Ȏ!^>xlMsmFg{!#!=vSA}& j-B+99V?Ǥ-ipjR.-"3Q +QGDqㄝ("/ ϋR"1dGڂِ+krNB8LHKΆp ݐB?fN.k\x$x vVz{?űٽLyg͊ܨ=fghau;+cCLW($ZOfB(uEj]7NyUȑQU#"Hd + 0aLg!htsdԾ&QfqzfZko`5oMDCkmHc eM4Z_ޒyr#JCksދ_tMCZ`INՍXvZcG(ۺqT(>; PՐtܷ>}F!IؐkɬgLYHyV$Sq}i⣌@Ʌpjͩ9#4FYe1pg}<+[YJ3٭uϴ12;q%$fGmnJ1,@k!XQr`kwٚWBIS]'|Ea +* Ugn+Y~Rop1HRM-rB%W'YVjD65-(%nE5s"d]qiIZꐼ'5Dmճ>ZlX~"Y]4Y  RzCK4ڢ{KL6_C(9=ƪ'K7FA +VuC.: עdt cY|@H_^hJ=+9[elJ~ZRi>T';[`Se_(Hy4@ecTÛ)8*] ȬŽHzT=,ܹcm5O)ᦫ#RfӺ8h*ʁ 6fq6m7Z2HZw>`IQi*TԏiCwɣVjЬh\MCȶ.%,*FOnk T^NnItΗoɨ7^-&%j]=U.X +djԦ \hæ%zqΥ!5af1(g;Y4V|+k>ԴEޚ`ro DN%Ug(9I6N~VJ14|cmd|TKk@8 2qM":0i嘍D|=H0f*Y +ՇԅݣF\5 >f+t@MG8N!w9OKz8N@fJ26W/4\(2LK+*?=maW)riG4G^@CK-Xsg)]샑#-0v!yM[}cvBjĘQ&5LdRYJ<`0tkY<@ʗNN@V`bf@S@OC!տlv,PI@=kBE%sITRc …$ڧٰY/@:T1^987r?slR%ZnbVlSL#Y`,5ڈ:R^yuݣH*I ziVB;od}t+Y>VSqP&&tjBTM]kr]Y&Dk̀ަvBe[yU?&Kt1& Z?M@;iua1yT:]q d3-k!4aioe +Շ&|7;Y5,8۠-?4"WQ~ǽtW1Mg `и#vBjZ7E)5lBblrGsCѩb/kK6f1sDtonm,~d.Ĕ UQ[6DsHRuvM3΁?dQh*:Y:ET=zäGጩ`lOK W4y=xT#/lveN|5w Yy ȯzO"Z0S+3SkqJA:~e}QO$AOUdn +(#G xxҟH *P tօnPig"__r"pVo<4P*XxҚLܤqgG\%u@[@zMeg8_94|rϴegAm^QG\xꙉթF0O)J_G;Zo8dn$rͽ#˲ăd.Rb26[S0n1WT2vY_q0[ _rdU<4^ɨ{n/s7Qٔ/gmcz'v,I86+@HfJ1-w4K- ZbSvu9"KtnD rS⛨>f(:Ei$uJ ;7Y͛0v +F}Ajۅ :unHb7nF.27@%hz#DP*fz仦q]Au!P!Lɭދba8*\$Np[ +m/HP'㥡Kэ ޔ4'!t^M9il'"#&ޠ(IykmD],P1 bXL&Wrd90OcŸx +D^uAz3L$4OxJ(zW">V!-\aLkC@sнóշGBe +_sFj2JiJv^k =ٛIKʈWb<9YIFq(1&z* hf`,M5=h8>"1թ)ύ.U.#!EN50xaVK0wov7e"F`!mфLJŔ#[O?8* ܮDu▖S68ߋVSMA yW(%ks|+e6Z6z'R"_UlC઼Dj<æbLL8I7gDFis̤[RqBEcɏ[r'З >*K_t P(N-Πa` )^𢨧𧙜ـ SW{l0C2 ?w$L|{szV#ܓéq$g@G_%O^e_-몋v[R0bSڄ6J]'f "H\㐇Q)xOmA:RPVy>ˍYNThX4%6y3lcu'eh_j* PΏI/zͻ~)ZO_~}|_}og#sCn{^؜4Lߓh!/W2Y_=0`;a60 $&ZЃŠx#8w Used)4N{? E>wӐ{<|PE!**fϊGxb8h$0) W{Vk +5t{4+`-G} +3cwFW 97bYȸbһ=F\BTE's&qҖTX֮15jW*I}/R7 6jFiVh%e. wޕJLY;+oL)',TLz Hbn@AҶnm$Klω~PpҊqHL3Rdף0uHR</'q}gutى0*Bn7:!BB: HGg*?l͞]껄=GW>7u#04kЉ&xn!>=7-HLXBIn}'&>- :n雯2ZOTQ!-q@.H ht]sݼړ&,AE%Ҭ +j7sD.Qe J١4QtC3[xjN~HqB^VUyhzz2t٬쪹n!. #`Co2HDȅ5>Oۆ"3t^v~`+ +k}")(t( 9C:B{ 3`6b(Na] SWg"4l>G:T5X.h)SK򈀍ך7c8u9*a?VGXɱH66u]53p#F󒏽6(GV퇩9`L/kĪ=Vc⢹ȡPgGMb;Cr#5l ?vQ 2%'ڎRaUWm,}ǘAK[DnyxumE.! +j-:gNLg,Cϥ&4粓AҸa,lsY‰W.\]B/'}@83M1G +o0ئ%Kq%An[ +wL%Tq4+rkB#O)L R7NP +lznƓQWE5.]uD=@{F?q*opDqi`(T2,+~ʠaBo' +zN+Y`e +7T>欤m gKd%aعE$"3( * e1K_Xbjߢo C5eZX<46B+%"%( FϚ9 "gߋCyP;P 6S9ܑ6=&ŘNs؏cd8µ@#sEÙTY}ʔCxL6As0Pl5] sV̀Z/ ?أݒ]CdZ^3^S-FQoLmX7W:8Jqe=*!u5I>|~#Xﴊ"lDZ2Zv2 UʺnHPzw +1:@r9$ sZ{wTFwQOW@@F/Jp,+wp +NJGOgg]0G} sJ_ixl"ZɳrgĢXߵ%v:ͽ&PӃP8ThC<'ö́bZ_qƊC`KK#V^:b}44pD W[h[>_jU>ywymuΉSlry7 x3)Nc$˺=QQM88aܕTV~++nZyw*˕CY# ƥ;F5.ѳk1XHIO`ej.+r +>ۛPsʺh$'IYiƳ<4zbNJpؠ^G5k3d?_?_{JM5 ~e岤¯UGvTj "Ղt7~kE>AvgU޹##7}ӗ?ǿh/?~/՟у~GןိI9C12F.2Kh0 %~K *%@># +XaWՖ d+W" K zrR+ eۆl}RvXSWuf %y|I^b۾"V%QoDۖ0gbQ-1ZzޭyUoa`)t݅i2:D*8XpmuY-яf$5-gh gUiş/e/0%5bR.E;qYÁpl +,(ɻ糉[œ H5fD?laE:̎&wNj{žŦ*9+cb SsAS*AzBWFs[8.59h?{dαJ.Lu/Ht +8@y'*Y0v̮aF.!.f] j ȼbYDwuٻB1cPʱ0-2?>JƳ[y5b0(wI`R鎜) Y%޴T`orH{Vi[$3gm [H( -9cYneJj4DSL`.-5@U[IPJa +`[|@@BnU"q8@UKg=1ڔ{yJVCXIo>܏~QQ>}æ7BX~s6fAj$;1 |Ѝp!x؏9Ra̸(bhNY$4l Mq䃷uE6)l1\|C %y^.bZ @~ tNgC+5'K7v%곌@YUWy" TLS>؃!98֛Y$AY""b4lG|Z`d&X9~X'",F]g*-P;C$9)ȧ:!r,oJ+ck*(xeWpƐfU8+A:>uiMf<(\kF1grc5nr r,95e7S1,ݭge{' +PfT#)Ԭˆc{C-VϽh襄esm`Afi hPIf k@4;iBި}yb!kR<1g'G;Ro5+<'YxZ01>.F`[81FLuš6b뤫 1 BB%T2wC\8ֶ"o^$ݖC5[U&[-0:?,t ͋C -&y`ӏ;ܟX,^9ɵU{yi 1b?|qCQX4xu=6fi_;BD(U (WR^B/*~P0E`=?6g.~zӹ +9l:&\D"ձA!e#W{`KOdE8</pi뵪H:1NodsUpX!špE6qʨ6&`d/ xyփʼEAl-:.5oY-\aܕ2Ǯt<(iB)neXiF֞;O׳x\"wdP<S4Y"$nmő2ӢԪt(ը~=ȼrvf Sr9f gg*q&{OQ +i*NDyWHxmk̋)9{ݘurvn2^crۮ+Jg etC/Ίkqv!ʉ=;IVXy 3&.IPcS,Ͼ%anxaҝ?[O1XۉyB#q3^ |^7ZˋaZC ҄;DwGs Ѓ82#;z2cUKt_TRomrn`sFޕ +zTEkcVAn_K/5:U~:Nl;r.4IDM +@[ 3svĹ"`wCqwix) `6V#j*hrȞ<ΧYkҳgL5l>-q5`A񢤸$uŕP}9OFFSϝP$y)|z_|UkU+ҞEcJ6zD-(aUL1v/ZeiAFWS!,*l#Ų5`ٸPl< }'cc$daU[d/A'WT?j> '`QNLI jC{S"Q @_K _'qp/e0S&F%`@xr +wQn +@؝v-kz%]9:O/8"[ o$rh::t8.jtAQ)jTTkkK Xv҈J;heTJ~)VՐުI녝ܕ)kLyʪ3bGC#3G=XTR85ldPG3.ti%PgKvCWtE-{"Q._}ΪjpS@Q]F>Z7_@XhO]IUr8/T\R cT&0qǃׯ:V] +!`}+ضɟyo_=}xϷ_=86y|u{Ǐog^}zKKfiDFs _K=_ܞt9A>,HJ8ܓ:'rPC\6 S$j߫,CM +3u!tˈw :3(RWH".]%РݞTp^^ T:#X:N${'v5z}I08!¾ ߚTu~X\_~;RI@zp?@;{O,Jk]~ $y兰 Yw3HC-e1fُI`ԥj*P_wj G6`eЗȇr4 i)g(5+k%MR n@J8ʪLæg푰tr&fWCV`R ǎ>, xNb,K9Eݕ:DlZFԑTDRFE[)t0iKQc+{Oz܍*gUөB+vs ?A}|y@imaeFTd1B{%H7T(3{.>!,Xxt%(}SrC?xDPdI,,⌖`?܅P s A[d[U[nsIU _pާp:9tQ#p_j SU(?;n%O*XiG1r,Ou$kNsH {չRFʇ咢1C7`knF# +v"4!et2֪(Hc3A!ԒZ^r%@lhsYڢ' +1H[‡x$ȍxn]=HTUSjyD7)K1(zƸڜ);V7cB˄sc {11TzCoHj{8L˅>5E:`i$FO.&ԢaYWGE䯱tS5XS]u-:B~9wљìS vHMvR{ yYGZ-WscFWٓDQ%t(Fh1O0Rk? ݥCd_48olIVJ5鑣GԗE/^h#VPͻϥ4VcJQgD%iŀ©B+.$ vż֚ "Ds9/}J̵ׁi!c3C%⁇*-}*9F J8CMXPPe&::KK@q]Ra3ˌe(]{w*">Mז=͋>H]r8wՇ1uoZ^TsI]#PEX&rHGtЁdoelPQG\V}Rb*Td;@by[s]&Y0 }34@Y[N_Z0X8!'IC$7]Ի$kUE*fq/Ie3ڍa?@[2pX@*4/zŪTQt<~f{Mob7"|%oQv97KZ!:J/(yR*o?&ӔXyyRQaԍ+CfgֲUTBk9"H*#;Rwu݈sԷ^(q +:ٲX?WCC\kZZVEc_1b%t9ÒY5< v/O"{#xSuT d-JP<FٯW;zFjkY<dgkD[0e +\3G +?ճ&Qzi mB7UHvN9 \o_Kx!Ct\bI醕 3R+K_Q(grO3 +OIϗ {rٟtS3N)Xc'!,A~EVm %<,b+dL}mlvQԆ;Jݱ7#~sRz䃻Tr(MWѶh+}V'C"Vk?Jfm!Hɏ/z*Sq@DqM`I'g t!Hﱲ%*4yq? r%[B f՘Cˌoե7+a(J#o{j{$# ƒ}ċ:UdKwٞ[.t1{qV)j+B]v<܇ւ(dں;"5J Xr֣ ds*xA(GsUڎuQ~l'[6*l^\]e5qyC%+xE"k%~!摎bNC^5SuEytWsv7_C&ZjmCレO!cdwM#Ae-sx󬼔]P{t\Ԓ(d8ZQdׄ$_M(╎[ +ՔXųܖ~Wydžj^,K)XXIR-ZKgآLg}*C_!JTp3>`쁪I[Vk۩ӘI: \A@%$$ TI`D)k&|:"y~0QD<+pVT)[NvNHw%;j5Em),RgSjG* +sIxWbr{pF}+9B4R1 iP4oSܖW'2Eރu3?$'7Kgw{B'( endstream endobj 28 0 obj <>stream +HWX ûHE)JjNI- + X N PoIaW(j8~g3/=e{]fqϜyO溽'ٽژyXc[c7 ;me>pRںfY붑1qX澲ߎ8bDm_괼W_h]\{~߿7ݯ? {Z{7ñڜSֹxQXeaYCZ:<Ǻl6S:NOf_8 +io{?Fex 9e o$Sк^2V8KtZfEko+dw}O ߶7/0-=펼:N{]'UUHuUV_2,2W`_felfǂ,VY@DvP.Ci6 \Oxlil3} X>-$2G~ XZ~E:pFqw"bvÐ3Kato:2JsTP@yB @&:m,Y +Z,. {l|SZ^Ĝْxne=9sZHq/Kw4ysB⸰8gzVuOwÙ[t$D/[|f**>zKq*do<8YEUg@^h]erAűgݥ P* #KKl@vD BŔyb ``N8`Θd4X*liֱ돟޽7>'J|\}//?OϯbW+w8R268d6+SR +J}DRϺmB/mKA5 e=hhW7bUC>eX ~I9ӊpp}u4R.Ttf=(Pg198dxs@JQӆT]-,$tuiBdGGRy&u^H,+d|~x(:&&Vd=~|e;1vD @TT>|6Z@uEr@$ǂpḇ죅q0jb҇'/n+.ACӊg cݤ>DE;BD8{QxFf{D7Y0Cicj +f[1V3^z 0]4I :LЮDP2YIƗSd3'lGY _Jo!7DkldGh&O u:}RK`#O'ESS bqNNgSY$Q6voGv `ɁM gڊ3RYY ,2;ڬ,ӄix[ P`MTm<>ma>S~= 8L1L)T88 |.9T4b&\jOH95"%iy\LCR3)#HÖ7C%\{1i2|K~|t|I=GG+T6s^}R+읃ܩۑf;P ު)9 5+>*K!c)%₧V*:'NӐE5YUEt U4[iṔM`u3ŨA&Дf*Omjr dzT-rT$GͪssAux]EI^.-Y*TYi"R +As~F +aphwWȌqy">VWe2:ǫI-ي=';{2s!|Wr "5bQ3ZiDRĵr0eÜkftqtڻwڨ'Ϩ,:yޛږA)=' #p\3Q +\֊9UOPv-[;d3}_&:@o7v.vͨaUBkt4\o4b1ŏf?1OȘ:Qh2k=C\LǙ}ܥ?#c>3&Utvx=df.>aYiWD+4S4[ ڟx] ;4̀"0 +\JHxQ*ڽ2F4񕮾lX<6 fd$iݠA蟟4AM6g-Pr=PšDΑW$Zō<« M kXYE] 7p^jGV(U,c& > +gj+hL(74sBϩrEK&(:p))׳ЀPkYgYȔA2m" &2RlN9uBVi4X*ZSot;ס&9<$bE߬qu="f*TAQ<r eCײ.GݰN~eDQ/o&tz:,q6K1ЂX\@ԧ-V 6YIMӥRC!F:dͤlP`z c_ O?iv5(G:Dֵ)>p5BV &Vmxq{3Lbl~S˄Σ̈́m{8HR*t\9j(D9lQE@ 'HUsc 07I 7ד:hK۞Dϗ世f\ҝ-*R)nizCbZE| UAFAмesLEGCSL[<(VDo:  ;_Ǝow<܂t.^OGl>D!LWEx&H})fhB>~x>믞>Ľ?CwK+=}|~L#++B_zGQH x#au. +;V:%b.kZ[`3& Pd!? &V9 Mc'`;$c|ia XaR<P7㚙 +V=eYz:fB.50]~5<@ɰ\k_@U2^PَKOmvsLESQdzͪ/k@d6hW/TTYe +6|:%5=tS4zԻHW |p|`{W \DH 48d e*y3Pt}*}L;[)h>쀵VF*@ >+Gt J`" G9j%rh +YXxߝ/7V ̿K\ck|]\#:T0mGcAqhlJ։9FΩ]T& 1Fo+n^?@̡SI%r6;LF0n帯aP,r*] +fn,#>cVx~$~ Rb!sB^J@GLL/~kܸQS{TUw Z: -̰*Y38Y6VPqLr%4•IZp-D76~ k - d`3jjgI3`"i͎F4@ + &etv9w-ڷsJ!it&2AsrWeȈc<3:91z4|M!F XB3*MlYGhI8r5Tǃ*BQViIRϳ =>Y 2_+Üc[hMׅ8d#d >%,V럊Ӝ*tq2EX׼mruY@%a@{p]X*ͼW}U|sPJ'e7Pm_+/TMF&ibTro:>hz bDoo"wKUZzK61&LR`kHjIRA}T*I7Z #^IMtŠ zuߦAb4gpڏsɓT=sgPcWZ~r~"X@B#ɓ2"=U7Ū)zwQM/"p{n6adX<t_ZmXOB'b\ 'Hu'JJԉJ/հpBOzn5Dmdfbo ™R|F/PR%(nGu;sh*F#X yJsW]J+iS7H`cao9"O=B v2U: JOCq<8=FL@/*-)G$AzlX]2nJ҃ HJ*k6%eZPpZhI[J,pin#1r%-V|ͅz y#Qթc54I 2)E?x7@RM k] h#EZIjh%%oPI2*{8/ǙGXS; c{j fuf%RKFFJuiDd%ԅem/JMBR 3Ge|lk+2 lm/ߞE7._J+bN>]:6HZsn9Xܛ5H!,rI;+#yNph)%wXuɧCe(4Pv[1@ jN.MխfTwǞ@\$kPd6N)48 RsfIo=ϴu7<,^n۴eU/ԛ2Fc/xx ˳\N E"YVtrMiku_]0|G,3AWvN.8inɴUb*"8~cdu}3V ތVhl}` "L樰fka(zWfz !Qy&1/*7m+0K + ЕXmN`c;I +)^Hy +OGX]@p_Q +>[:v+R0V> @k34DRzú]Izd E30pDjp9h"[{.7lM ۻ*hU\Unt.9ɤvnu4ȻIlXŴ괪M^z˜vQ`]Ro+) LA',ڃ."1ǷW;"%1RDzk>Y*xQP Or7O +LHW'⮆Eⴵm` NLtae*kIBK)dXa.s&[3Q6Φ&5T!"0RDGňkL!q);8MP׷mڲhcuo\Ϭq]A,@czGbVS.HFhVQ*YV6uK0_ӻo )>wϾÏ_?=Onfÿ?-ndyK ^|r{Y}ӿn/>꯯߼^}/~x>Ӈb>7?yWluK sˏi,Gη7@Pχ&)FHHxj@lrSabdf5s<iWbьdӡǐ/BXSp&:cHkMNndrpq~~.KWU#E{mᯠߢX?D|oؑ4q.pvU&vTgBLFs@І 3RĜIy a ΂@?Y 1}?G;& Z| XMn]i! F%+lYw$㥒Rr\!.P +ZWlExLUF0~isW#ŽCZ0e>`6)HEh4#zp\ŨMFsǞȔS.{J|ɽ[Q⤧=Om\vVQn΅)o2 3cTCy7 VE}H x,m̜3GC݃t٥BVG6pUud{k`;Hu|Ieη|TVck56x.Lhy0eq?+sIe}>4Q f}W]pR-#LX==..m{eJR<✞\{x'UYaJ4n D{M8K$LoMnވ]98e š=R3sYDQՃ('ara#f٥Dz-O1]CWT o#"z 1 \DP I$<1L)Av1sj3rW6)LelzmZU)x&ϛ98K 4l!zo+V&eeta +'Mr# +Bn~V)e#%!gis1i?s`@zvĈ'i錬luϴ$rT>m)TWa8ewgN"SPHs'n38.97 AԬbcr\9u /&{!ĩU1c}Z̋*b׵焒L1]^`A +\MÂ@/*<A3ƹ\@0~;<'!7껕u Z*{u*8Րt"1S*Yww&E3| +}-¬M֋x";N1WRhg{"1Y_[CEn!ت\Pɢ5*KO qAP}9\EZ2`P@rnE,`ˆk dȧ*ʄL;3j3fY7AvzpJ̎2\+.IΣj qïlRY l=~%n'^t#^)|Hl9geX*us83ΝAj4Wm6<Gq`="{f>Y/{)1]~D6 ETD͐eesb@6v?f:'hqBVd d! U+[ siqXd1sk :~Eͦ]ċvE|;-9O:ODP/ /V +"Z4̋San#h߄_$GB]5]⃠Mbbr\Gbcs|Lt?nKiԩUHMcf D: 7 WezM)"Qyq!2mS6\@aEBVwY2}.}%]0G]!iH&(?D2c>(,B#UsQ=‹ +Aǭ]z9B3o)$gB\w6 YK3Q3s}KVL-KW}Nl^<N\ebFST GMvNLy߇cDa({rgKxX֋))EnqVpB|g\Wȱ|6w*"4q+]M::=bJ! jTS۱Blz|sn[6a{f⋪VJ"W̼(/P(3,A8ٯmqdKZBHJm ';|rD2xTX~'XMNKsK^D{t؃VZT^,ѿs3ĽPT]ɶ])]q +0U/ĀBdt'Veq-)!D,:.:T/P bخ&3?~>[gVf4d?Ć| ~FPǤ,fF N ȳӨvxQZ9HE ؍{+Y'ޚ(u"AB .JŢ7|Lϔwz.vPb }:ױPbV9Hbؗݎ=n  +/DN{3,d E[X+811zQ X/]# +BTߒ'H)S YVm!u{j]T$>>!B1j82թJ>C1 +)I@ƌTFaZ{{W =18Z1._o?U&OV$[#)NjֵQ^62mb\%CZQL[qKT ˙F +Nd)T9t>-h5éF)Hpd9 bîOUDex<-Q#ݱ0}rE&&ۜ-=bXuNvB|%&9Sӳ=7OשWu$O5^&Q2 lzD:# hQuU{h""HcnuӫzFȝ~n#xGPܖz>GRT'Eդv +!2چhnANqBTk/!"s0$=JA!-b H]_OP8;QjH3 "lWSw?Ҋ[O) X'}R;Od QJIp:fˠ=-![ _ݽ }}wt]aV"~z;nKyNW'ozEEȖIoL6᭵sݖ׃@H# bFF9;VFgZ%ߓM:IQ創ЀT*~ۍ:%F(5.g-SbآO/DӞB +{~?||CSf[޾曯_5cwI2CHmMZꘆ[$$!:MGP{A,1)$RF䒌k&mQ$&Q':ܛn;tЎݮ` +i%OB@0 +T4_OMS@3P\$݌tVˆHV ~katToJW׍fPQpm2EM#oX/[at$sЉJ@k`q $8azI +Z99 zyg 2}y$vC@~R,s|Ж`ƾ2R-i +c)%j9şc\)c21hG T9Nbyv"^OB*ai;hɫr.7:DɎq.R\d[㉔7{ +Nwvv[,1_4AL| 0GK;6PW[& $oFZshquc=m-v?,%*i WP&Psms-?mE\Zr;pej2VBQŴqy<"=䖦vOeZIAJpQ8IiͼdA(34jւ)lD,j:e-75ѽQ~Qt`3x;SBjgo;խO KE +:A=L=Oɸ+[l 5kmSZEv&+o,gj6FzTM}`сHBSX=F*K^i8Y&ʩ6T v +Z]G +HV;XfǓw$ӱ)1b nNHN9쁖3'63~eĖNߠKΙ{m +2?ș#)9EՕAmXy~f&D'ՅIǼ{{U9S[4=$,H5on{*8Rvu ڗ؂N*0n4d~bN\ODQ-28YwьX)|"UOuHUbX#/<OU9ruPQ_]֪W2T>{aRrqMQg0ܖ0 Bݷ=x,Sl8tL=rH{T_>/J˒nԆ)"yI\s}ąr*BU)SN΄'I-bp֋Г}Ͷ*8eǰ~A hRR4I+&{DR'"ZI2p)l"Yr>*NcQe}fQXڗBT[{1uvR4LnM>$xvQ,&e^|Z6r'!B9@];x@$?岫GqEW9C@]Kf %$DHY޵1î}bjY*Ku:@;)IBg''- 延>.j,^ٌZI@s6&p]ĒΓFODIS +Y OFaY5K.O|PuhhUL7"ig(_Ռ5eUȀޢj*,4c).NN$Tu#Fg;$( {U*LAԥi@ݮ$hHQf;0 n}}vo 3J?r8D_Y9Rd@\H^Ev{Q;x]0He+j@p3SBC(,$Y{tc0ȃa&UGm&Wݴ!q*ۉCa[J;`Ɣ$Zњj-/gB({(RM72UI#<°];>;-Z C2\v j; +TIJi~e@./ۏN3PXLECP̎xHWV;Q Ph]?FNSCV;^&8Mu)ʂ7e1Uw8YՂ5Tv?"&)IO @gLa[X0m ع  $' w: +I*٩5&ҧ>E$rd ,b8 @#xT %z;|dDm:J*=Zr +1qW +bښ0 cꗊ 2A**҅J淊Stl( _pUݻҺnSqw|\ .{6[p7o9L +h +Q07e&4IYBFC76gG٠E?,F}tu8j9(!w+<E4KUz%R|n9D@nL3Nx#v"×=N$4E$A\HP;Y@3ʼnI}^nNc ٶdګ>mD&ŇC:~b(aHl p9Br4'-0O![Iw2p:ȿQ6ą4و0e:3)kb{L:Q.WyɈ5qh!#8} 5bgg ʅKel7U'^s=go.W0riJgI^w~|/?~o+ >K)_wŷ~o㏬/Z퟿{je7[ o?gF` ̳!)Arl]ʌ ^Nx2 ]Bg|օm-y^3/yDKz8FHw; >K Q V{2'g˼|^?t3T8Yb!6 wv4fK.Ǣ⊨@9[jO!Lq,G!6x%He ,$2XNKw>,HhnxQcx[OyB3~rúOH+o7hSUfHxzӘ D)4yӭ. A첄J[V{wuxY.A +"eWb"(}*V]@G] F/( %+R#qc̓c7@vb>E?4y*Umejqm~ޜ[--a;#&aH9ٌycsD<*o*U+4Xc+ڎ1 m]Z/$~G; 2 \9֕^2_PP>bgu %[4;5Jx"˒K.YusujB靉vTj {vFYn#*|llC~,O+qng tvpQY:g}ZLW'4>2\yWLV~Ywst̨F"6P*(ˆTǦC-".E q/3 R 4 ~$Vi(؈%|@r(yx_#k5)xEO;Qմx>ϩ"0S#A}oT`瓘p] ,!H+@1 /.y3tm#1u{HbiJv<#VQ.}UM~LF;z^a8kJRPÈIjzlh_9쎸KJsDx1P,/Х]֋V#Lͧc N憄*kV+"TPϟP24Eev:(*lH PpeY,2Hy{U7;cet>UzMĘI8^.poBq+?!W/LڐNxB6lABV|,9,Z0Nb,AL}*B^oSr+ਚȾnq]yt7R2PM(}IC'4@c"N*;"bb3U{l+&=d9.۲^$_6bT!ؖ4v- {{Eth\oV +P.'7nHRЩ)ld@Ҿqw8v!&q72L/ߖJ8H{ S+]Qe.n.?2'E/ X`@Z}\!R|kcL@Ud%˲c0Ԕ֣a:~҅1|UZ37Z +\tZuD^#=iТM s \ 83PKe4)Sڮ{=k])A[Bsxj/A*˅6^`biy9o,S@Vp#+h['MRTf@*OtORFlMfYbslT85.]H"%GZL(,ǁ)鄁r%XkJ]Q)RqU$cnM6ZCӢԠc)U!̑gӚ> ;?3T{7Vs"վv +F e<)%UZ+m.6ָ9 "R5:G`9ݾ@t&Ce%Mཡ"$4T9 b LE0KX, Rmv٥SM\P9z$BI*f+sx/SO9bS!C156.&!58rs29~!ȫ#~IlNPZ;<$xwd -A[ ʍDžV-TZ̐<|{!c`+]#HqHcddSU[-+ ޜږ=S?S8!U`vlՉ⅐ތ̝6Ul&Z vu3y*DiBsg.8pTtaS;d@:%ٰ`%$^q.*H)bGܟX%;/Gw1rKF-u(G E}gk:hbw]A1 QU _2 L+){nhʅ +HhRq9 +SdFUL]/ %X+/'s)w(݊bf/ڔE{ǎbhFm\{ՒJ] @ۙZnw2F`y\TRvQسo=˱yakJ3iH{ \A%i]`2A*/" ( ")8 Mr2q@u_PK*B:0B}LhzX7䨅injws=3=OЇt:{ I)gD^XN&Y <wLS"+)12kҭ 68U";>/ YF֤w4,P<1wT雁7[H4+'?CB¶ĺf&jrdEJ5*:i`Ce*@cv7?%RfWݬeU8܁يY.'J}=B\plO{ Zۛ=(+#*NYi51֌:f\}Uc +U42Tq{k30)-n Ҳº@y*'1%nrew%DBixhT VAؘ&ʿ@Kǵ R)dٽR4mGiGpKavEP, +Ne65/;7z?zW?/g|׏޾b/67>ܟmw_ۿֿ<=o ??o8 d&ɳQ*O 9ڬǛ(TS /8Up3NPվ@;?jx3*ːE6z**.}cPCL8wR]}&= lMethL%SqIU p]Qdh=# Ey4댦Ȑd/qӠ&*b3Oj$.\C7LFжBE4 $_s9Gh_St!9F(P4tjڿkVHI10r$ن *+/xԋr񅠒N1z!6S~7Wjk!*ŴgFU!hv"' + +a GfNAț#5qg3cX(Ui ;fF dn3ލ3 /J4swT#*8z/t~[7!/%2V7FAZxj~}Eㄦ}wޠ;?-OiTH6Bv!5SSb>R[Ru"e=\פ`VE!.. 2MvYrAԕWW̗t9GU9BteV'^)frbGiuȣT~ lHd|S=թQ," ;S1nQo s:i3WaQ!mIhhћkbU2)#TOb W^pz ,[O4u[2EqFs=i b+q0kcfSW&L=\_+f^o9hK)LۥqY-$$ٌP2q@:É{f= {{Xɭ^F&o0S7^vsܾUztow2RS󰈴m4⌔^ldD=s(ěqA" u3ةamjvbꐴ8ZQA<-~5tF#;TtvEI+.Db$m)(mtѴ;?90Fi}1QnV\<ǗlsO\_s\H  '!ND0"Z̋'F]f{,m# ]^@qc`$Tkɦ~4DD@q"-D;h3Y7U) +g-:f=:qjUCb[9է8w&U|8ݶKh:{,վv$H>"L1/%l!BUy8 ZR!.|A%xu|Y&ri=zة.}QvxwwXtY @@$,$ c0w;$KN !a3f 5rC0qHʝŵ<7AD'h2naf $DEUуG70!ا8V2j\$< +h6#$F nx)&uSz[3]l3~v4NkgmWsz.^W?hjNb -8YdmQA*SNН4Eӝe%c⪚ʑFih¬Xk5^EZ~$z^KwS6XhqE4r  ""Zά +*nw- !h2[՗E[LidV0R&Mf%aD̵2v< dpVBW1ӭg dTᖋj'vփW +2;pu雽;7>*ph4XID`q䣽jFDuTÖEaSlgZmcUaX*];vƾ"ߟ,?HN"&"z /1|dpyjPCq=xMuB4J [v?f +U21de wMfO^/F߷̙?(s%aJ[W}Nl*f,8f4EE\9[^ar0N x)ܥ#jFa-lSE?ofnugw4WdB=@Vρtd:9ߜ&cL|E.REY+d8^͸a֠kT FTS!DR-zJ,_x`S +wcؒUGp,Ul>! +M.⽪+Oq +lҢ Ƀ'Faw= gۮzSq+bL)&ÞFq'qt+ kY܅ؖLӘqihZ*Z"bg$&c ҳZ:1JI%:&=g91nnބ|]%"~S +lDD*?eG¯Kl lYh$,$;[iʌ8ʽG+_{Q< )Aձқ>JZH@b }+y$D:Fb"a HgTSmI. +gؔ(?~nUٞS`}^PHh|G"Ǩ%:TnűCT:W|G!%DJ°twJb.SpٰJ=R9xC|g(oߊyIE\n@'ZiF%{-BgAn-ypKm +[+"jr%] uBa8 THsZTnH!wA;fa'ϮPdh>.xM!'_l4xm5.mxsn/ X"c<|]Zvr‹<2; *Pg;8̈}g_v@9#h Pq7VoTyհwqJvmF/HnϾ`QC^otbɖljޠ'\ 2$EP\U[jbl1>Q 6,e/!"c]% PP6nѯ4E7:k2U"lץb%?\iE}ӄŔ⟟~}W_~7<۟Ϝ!I2BXc}M{kb?a *lR6k&%@*|o EZ ;z&xlplcD./NtJ7U-Fst2ݼ4] iR/B`]gРzk f&ݹHY# *D݂v2 7)=߱R_7Axds'~_LW2N]7F%5 sM 2|0nFqY^)M#wiuftPDb+"H.MSQ/=7KFӦR]i`F+3@m*趽NS#y ;&½kƐͥ2O"\ImF j!v f؜Sbܤ +oQ.pƅCƞBx"(yȃ\^MHa!'-͉litPo hivv%V)Z7]7 ^\-, O_*#4jD;);w)I>_7Ţ;8DrhԦYm'.ycPA"ֹfu xHƺn-ؘiL*ow,Gj3L}* +1 TKg!Tsj zgZ2]~^qh2%,1i,T1)h/M\1VcWuzLNCVs6We/H! ]K;4,= 'ؔ'G)sδq 8r#HlD g9P'_/lHI%ǓwY$ӱ)Ou + &H7hƃ2{O ȟkoPϥh`a71v4A<LA/9 Ө^%|"DttY+"S3И{ݘJOŨ 7v_2v904}tF0"'!P"is w ^{78wڴ#+ՍjSBX#`ִƘ0F#9GBΫ嘠 HPŌݛOgzL31!>/j-DW>_+1wlYm:9'La?a*sYdžU]1$PXd)jzDV(u™qY_3|X3XAv%!xNٴ6)>+GOxUy#@^kth8k2q uV8ŚQ9(7uWuɼEU}{s+{`tISoR؞MpeϬM\zדܣ׍IK1zm:1>(fD~ݎ햲_2@.( / Iep4&dieyJ\aȊGua:!/ܵP~XWxOÜvn~EWo_ 7 ;^ YcU:jAt5]. :62F%}v;9%,DD+ILɕ6 D3koOu u) +jXpβϹ85g#SgK}vp@YGbT\S,c 5ΔkeXL^Pyɍ9r@ȍD9@SKl6HB/f qw2}1Jj< s:@o̗[o +xĆ$qj=8 g!{yPaVdf!}qx!}e8o0$t.hvoihoΙ؏ [MrHӻ'buEafrY_{MɄTVx僆[ΖpnU2[<_pnE +Z73 #VZ-:M$qE "3kB)xqTِz҂8t`" EDa?092$8 ˧$su}\!*:D)N +S`zRϻmh"'P-g6M]hj4|M->zuv2]]N!dAl9=7L[ND1e2 Τ<keV׉zuȋ endstream endobj 29 0 obj <>stream +HWʜ||9%W#A6wU̷+ !BүЇWjeW/>ik9Zƣv v5ڼVk]FԬ^uW _vYNo߽矾[3??~xӏ/oy/_i_Ƿuoݯj\/wK# GrRÚ_#=0UAހ1%PͅBKB %!O< !9| o]w>D}bcGZZyT\ RD@;h0~N #tՍ#=Q8@k,#Z=鰗p5guy 2#ϖ;AUّJOCk x; +Mw`@ց ]HJZ9?H(@= [p p f5kHyyEDG~Kdl(9yG0ܢ )= +ѿ3BeDאD8Eu%$q:;cY(0aeJ!o>ct~ O('&YcJ)&dB;KHڷr* hl?^QKnXв-0nD t*Ĺds|GB$JqGشNIGDE&2ӲQ/I1 k@"m^t[LY; Tx[4!j~:4x- +6vIk !&9~ Z کBHIz7:|@s+~P8aeI lB@5P1먃 #MHJ rZ$ZtB(}ϫIrr2v)2lP}ɰ:O P']mC;p6ß{;xpai6g5Y 'ɛh0!ppXDx}8렜dA^yg6qmf8Py!6A*PUa x>-"&+ozN6:N4}+FzlJRS׭MeC!W0EMR P*Q! ,q:-I-+u(d#Rte[s;岣QEWu +FvP$((Œ,!#F۳뜿C %euu;K-9j+%i;*ړ!w9;{ܘarIxH?9m"%h{&?ˡȬ 'h>HDXغSE^!] \O-(ḂX_q4 &lZ1Y-=n:r.Z~L䨭s?EmV䈒p0DS%W^m5+s;įN{eZ[s&h?,t+ dskNdl!UQNFe#Ŏf/;2啙l͎ҽaolj&]e`<0'hI% 6 !' " "<uq3u2_P:v).(IHs8hyMt^-C5H_>fNgӝeE@,/CgO׸"U-e查ujnkHܪ8 >릠n+i#fMt#v/'2"!ok\} +JX !b3/TM4pd"0ZMo km9i`PLr{l5s8{fYUx+.+(1oY/?pX + C,/$67y͚uy,ٶoҾ|~LPQz"hi"P4VFQ@qÂڈWqpʠi%~RV6#զkzB! 'J>2lrI\޷&AzT܏.@P0ڽMNuLж:Na0q}j_0C% +6Z?'Isl;v#6Խ~ JbGݗqPz*ή`GJPM$<wo=|xׂ +}/n݇ߞ|O}x|/nwbF%s Wq{_ˇޞOooo}xÏ_?߿{LJO?Z~zRmk-?ݦpSO"|{`.,U70z<0E4_%g7THW#9sfSko69x#JXVVa+. IZւ!Ȅ mHю9EL]mTTr|[NE +-ږpj8-- +SjQ> 5LK`4p4.GH{()f +Х4^ض}%~-$ڲh Ky!'Kp]“` +}t)mu1uVfeǕv]` +3g w ҎkC,!ppF9֋Eu: L;Qs=أO#[jOR.q*DŽ@tv\҃o9eWON^:9.zI̩z> kWD_0dL>o Aۣͣ $)ŀr"\:#h;jBrx +ObNU+\:NiOP&IRn/Jam4a7E)D|ϰp߻& :s CE;qcٕƚbQ#`:`=Ι) +tb;jDHM%Va̜TTN+0% TM7x[VqDD,`~;Drw.ͼZwZ=װ{رľ+;G~0=E?WS]yxo%6g#x-Yb@toFbY52!Ɏ ĺSEV=_몾@#]th1=;(][=CǢp3ir̔jb{] +3MT0i`vrUslqDO[zia/Tɕl.?Bgh; sh͐N)ъ eJ3r*)2T&ӓLDJVՙ"&eMU@*ցi޲rF] 0POi={QBs@rqd=&Re.(*Ă5Hr>m.i5\lF#BȊSѿk0FP⻮H310$!5r3ˆgY?82n L!BgC_^ o &MD{xkPY'PAXfxXHYi_a5j|jhbp+/DZ-ZHpX r)"+h*Fr;"%s/.H: TQE LpfKO,cp)X֌ڑeFsu Ҍ'A\ng82QNfݹ)6zTvԲB,Aiɸ].W+g!Ѻ_aF d( TYUIh9guUu{]@0FL7i&}ۺm]RV#V%K<3|NKÂs-Z8>n"^5ȿ(hOѸF8%.2V-o{T_(ڗ%2BC*Z!lj̲oJqR%hcXμ &=6|P]4ӱh3m5 Ab+k/[{h-K 3Z5x/V k,~Eu>{Pii!_4ݸQب>G/S!#JbgMA%laa \}G@EՈMYKO*K<ϨΖ@ayjD@;$HyoƸ>S˃\JpPQU=1G|VA S4Q-92w5`A_dzc{87u fP0nǑFrojom.tPesQ&axC/ezXr'do:aU?kqư)qDɢkzqVrK W`8Ae{vR׭H1,2aeMXl 2'THwTM`V svF)I42P/9ZLSGV]dUv:U0ËJo} xkCbVƕR:-P-?:)cˊ%q[U\wVJܘzس7&e'9Zf[W Z:JvU$U=f!5Ҋ XM{ {VC'Wk qՂyh|>GIlܳdLT3_ +EٚFuz,tz\傌8]e限֝cz,{W A'/P4%۳/MݬS16deKn:"+}X % <׶GPxh.Bkx ~6v⤩Ӝ-Xx.r&#f^듼J%(*N3tp[?V41MKJ-A"Oq\MơbojO.uFa,.d@r+n爋LY%{@zͷB+ߙ{7| iXi-̴Q!i˜5x 9"q˿8fzR7srz8Jby0f7 >L"c&BbB􃪡O\8IAj">)D* CI5)BEL"<@f47فEULIL㤍C$maI.ѱұz7\JGUZl{u*]]I?ȧCr#۪kֿyLl XaZp|DJ^SnM56kK3ܨ7q 9m*UH @:\ tLmr cx虙eEynxGWE3d]vٸY_5{@5a]tc +%0ge)(wԎp{-hF@fAp*^5ƆuS(tY+^҆0⁘"Iolݫ +~^}T]Ꮝd4a`O%qZuf%&D, ʦ`Oq2WQQ]V +~~YY:T|̓؍7ˑhoVS6XR*j* +̥Db+Qu;yb1qla$1/2D.'<7h>ˋͨⷸ/!a.{2Lh |R{\Xf uÊv:S$o[_Tȵ,H hFyZ;ÓAS It>Ťf|~x]/n+jfV4Ƙ]ϋGOEo8#Ͽ~;d]vҁ?hxdٰjd5 Dt$;—cuEL2{8'ex2ΥF]Bھkag8R1笉ïNkAC=xT.mS!ͭd2FW"zNjIHq6?PJA+@8`q 3` [}B_&u|70l oʣli/)Yܱú#j|ukϮ6Tb3JiRd'qI#4DҢ*Jo8=kJ5 bJ{*<@F +r%&TiQ",Sa>_z)[}lA<;O7^]KjW2. 3Ućs6u+,Rݮ̣>ңӗLA]"yR>9O9$xW#a-]so;H{#&ܷ/2k b X~Q6GUE,j^(jkAЫ> +C+iÆZu /G+?_~O?ǟ}'_]m)|~|_}o5/kpdDK[{NR AՑ5U!W{`@ /N)TMYRw7bpgIĖ0 +N#M`cHG<6٣%!>WI'AOP{(RC0F X/w,;nneV'V 8~-otT0n.nȧ'(µ$*b qD5+ BaB?fUE^xFDܑ`GپM$Xw֋`uC)ĖKR%X9 e__HOejw}trKrf}li8*ysHBʳڝ οT\)K@=h2Sc %Vxxܗ5Q<%$_Z!.g!d0z`B;w9zV+ܣz{ į.?dt;JvV25*O#$X:|WP([[LDV'GPf~n0=|/,$pGnMH̕X Oݲ=VfY3(y +ZV Uf44-uxdsrjԣPFdx27PiOnZ&W}{ߍbߔn2{:n~\u,Fy}*s)#=kMN#Ap }bؾ.\s8vy]G_UTȟI74FC\a;uwؠ: zb` W, B6k +̉iIlvGwL` \>͎?bp&W' +G$.J↱UfbEHh p^c1ki>!ml:ZXǎt\e6=):hÐR%z:aAֈvc~9ZYD&OjeLk"9n܂72`U!%K6$mTw}/"&Ϳ-mӉ~KНz+134(>u6,A +E+(b\qT[&׊UmCrQC tE !_GQշQgK͊ Dk2oqau[?°b#SUT_usN$ƵduUf(ƢSU"@{8fnjW3=H|W\2߲r?zMUD3IF5>6DE> bcM~HW^*˲)~v#G˝4;2*a +ls裉̋ǟ/0*a$wg[YF.( ssN ^|їoZ$fO[Y(;ho5hxVRayHswnhc别&p/G6$/5EHQsRbDͮgHdHa#)N T;lTIjэ#~ӂ1JۘTwCژ yt}!V)TAb`L!XSDlbY4 ]h\x:/ +H?!YYGQu.WOX!l9-J3!8wMDT㟕XW9E#$CTZVYx$%A<'(M; йY.xZJ3AG/* 3ӓ6` * 7% ǽ)_ -eZzfφ@" ö(|ko=ezq}lRƸ&HwxdB6W# +Go~o|_?? }W>?{3o{޿)H +_ !Ӵ݃ [^mI#5\|PCQCܓZN12b93Ԯ} 2P@T +z6N!;bt\f]|bm@1I/%3\bP酨EDBeH;B}'dn\ B:q&X҇(ّoql .tqM=~>in+nz:-m3g;p9Gjy|"{מy W"FRAF{bE1O<ߣT&H.>@C]=OVƹшxQ!V{'[qI4e+;0B멃 VO^',<䍖io էQm RQD Ylw79nT>*ajĄZ@yla?Hvt`;#qB/69jmg,QR%ݜd["t8,{{ R~oU.qe#=`ZD=HxX_/LnAlմpnÙ2gq+kg)'ܭO'8!3|-pm1":h1,SL/ ?EWĊ5:dNI"@wK9m0(MH`M6(:9=bk ͊) +])A흄3-]L0Ȃ@-n2YP9qD w;ik/HثL(×5rz ]DWJQE@ U[wf!Ѽ%A/?zo#PZLԳ'-GRR]uٻz' +ga˭"A;pvq.;3H]ʋFgf$2p^< 9edeLd mqD7VғAJ֌n+ *AbT=sh%f ϓlqMbP>:acn4DF,ٝj%Q;=]=8Y% w {3} +mY%9p 9^8eȼsFj &KE]9َ,Zqp1i@4[K ]FƬ#fA}$@GK%IH?TvrkTaӚ@߭AXLC0]h5 v2O,J 5KRO΃ 9eEUYzC[ak $ _DבWKvˋɶH!PW0-wzK +aZgj;w= [nMu^hϠe(ƮQ hkT?1uGк0&{諥H%l Q{̵S@.`)/vVxm>|_iqD6h.k +`566bR]*n4Y3-R}S4JTKE\FW_TeV*v x\uY=Q{B %2՞@] <_ m[DMeFe=A_P3|M}ޣ'%/=-w +G}r Q))z"޼'PL9BD 7Ӣ^7H v ʳV5A  M˷ /S`IĢZC'aIAv9}Jjvb`C vNvpNEUd]d(RсlVQk!Ec%`MעӦVykʘgĿtv g3#myt-/(fr{9y`C=uTQs6#9#RJoۉ\X/kmTyM _}Qo')(.F^[F6SIWD%<rݙޢWqMpX:ܶ}l:B, 8o,Kl_E0)ܘrPTzgN{MLظlbc+vF$F)2jn''vqKkN\e'Z b6i+کzڋ_΀Aƅi8'd%afB@uJ ǸB܊ VKg;z 34`7B48E-O!.wLEtUd3N}*F,*AD۳|7NyOw;>P6lb +!c+.Uۦ) t=O" +zpc9mK4 s.H6D|M )Z07(bX"gh1GBe7 *]%+mDtPT]Q<<}˭Ǯ +<:nxH PPDx,A1R=_ϱ7d蜚^VR_ T#+-bRV +P ӉẃD]j_r^0њ ϭ^?gr P9<Ή$n@_M\/8b^V+.F8s^[~ObtR20gil0 BAiI?xH qxȇsOu Fo49| ΙƇ4AMjSȕuXqP3-b)4$&BZjzge_#9ͦЬNȰcҔvFΦQ'3ADU$]HwzE +T*ī% ]68hYjf!4[ߜ%)klERt,pG1B,r\"<̗23JqF4L%L"jx&YEB߯qxPW + q,G;Ju1҇|~mjz,c\17 +i!6 L'r$%f0)S/+f֐z8=#"xV_k]H3/Zbv]%K1#&Ui 3g Ĺx6*jQ ̈|Bl5 +?,CpͰ/i?; PQt%2>nd>0'](+٦;P URH̱zB B.eW_v8NDJ U` UR8d'։*'B_|N:E}бqw}4u.3JK#{4[LՊSkr5 Oi_}ݫ?~ Wx +COnw_7Oϯ4/~oi㦾vw?r{>ۋOnon}ۋϿӫ7߽/_>˧^Ͽ{Oo^=%[|tuʿ߼1̸x*j봵Un`tqxT>T5Bjĉ:$/pD5YȸD+APkxZ(7`NE#Ic!yy֨ atF2c}AHAZ8PW+ W{q#-5e=jՆ-vU-}@ZA{^6d*~6^2x fuY3~k&3mv0Fk"##B42 &9O^5jW:ݳhX"%jS]g3̉wtP٧Cp+da+zx##KA?SӽB8X3iQZ4)F Ly)NZR3c 1+IF2~ 6f:!-n8| ;lukߚ[Reݑ%qqWszG>z %uE%jd9LMR;3quj 2+cD]^rC`e6RG3=q0y +.*J=O%~SDTyŸ\'SʛJ8KÉUiq v<\xMCwsf1.k1ZL%o V~[zH.RXڲ Q8NOZ}jD xuQK-fά)/N#ӹRN(g8gEfФ&s0٥%U_-6"! OQ !j=H(o"wā6aTkLgx0ktW'TA+xz5Pn_wD1ր(B|A%2dάY_ifR%TY{,}Qa$y9mW7Iژ*7D,0QLm$FIܞPL0zgD #ĄQ0kH;6) .Fnb}5Xk\D@:J-n; +WzaKC*E]N.)h!?Hx l>QW`n4X% KE;H!GU0V9Db״DöQ,:3݂}7I(X*M)4DP 4bc9K;v='a؂&Q1{-u=qi4g ].M'K[w$fR3qbD)G3/T>om?tռ#M +5q *`Bq^DXR˞7m[hG9օ`}n1^ݿZBc4&r4wܾn$NJ#aͻ oe7r[qEW%iyiH"$PAoYtx8֮5縈1 `b2 qg!eX;W1$gJb5c2I˓Lm\Rrgqm5M(Pt\ zE}[b-BT=G7#,ا( fc-`?Bb-ܰ7N1cj삞qFŽI|ٮwD2ރV=@}󛣩9a!J,]Mƣ9' TmѸV"+t9E<(a*-tTߐwxPL^B8'jyu:,OhՄiFHI#;Fך`V~֚Une{|߰:Y:]r*l* ,gJcK},>Hpw@ة\ε0*dEvvè|6]rDqo(Dm_2خ}Tlog~ +02smO. +t;=J {@DxFMzpJCfG.fh䎋 _`Sj"φn)}C,ԋ6Lm +&hFVWCjæbƲASS3]q~3͕V"<G0{PT 1Z~D|QS2-ɪ!%-;*Xg&ݲo}"}W pk>n Ѽ._ ɝtW 77^qxQnMH A"IKC(zBN4yf&EU_c@m8+ސIUXjAk}Q"¹qkگ[ +ROHﱳb v(q~A:A4?;9Z*vAofH&uدu eT,yy/06C B\$DnE8}*LJ1PǖslXj=c2 :\A""BQd!,lǭ.(D}z-A2s6v2GduͺY,Lٗ[%خb8*fl,ʸuPbh3". ;[^o`tx)ܥU(dmpl(+xtug;dr+]Bu@gqA @:L ɠ1:99/M/=;E/@ E|yх/ԣzDa JzoE N [CHZJ>s^1$zrdXjtyM12'c^gƝ=hU`U>UBegjH uˈ6a8v]ˢ^ž%jEVeb[[v %ƌs +^<#YTagTѩD~s߯Uzv|>F +~FI9qa-:xγҩSj.%H@THe;/vS։gӔE :VzGB^iHb8N%f)Ӹ50z%HlpI\Sֽq*MQǿX'\ &]6^~!q_Hv]G9u*!*q|PHI}$ KT$‡ L@TE t1.7?>џC#vI']臃 ] Mt }8Gvǂ(趺iԮ`heܡ0/*9|vVs*( z'gw>y>팎!O6_hb\r:b*-M;]}ӏǟ}'=??}՗}ӷZkdPz951FLZ-R{eEqQE8@ ;Ȍd \$~vŲa@1 ,pS]!khvEti] }[:%$U]Omq@⁋eLv:(*&jwUQ!# H۳(un7[cUjUzC{(:SZUem- T:O)}>{]ݭ^5m:gX-lheG +;!-Mn9Br r{1skyQ#'³,owR@iL"zTMpu<<\Cj>l7'St N#"֒>_!Z- JG~y".a2ȕEHA;Ng"Vj+]~J2>"@"kT7|,p(Z0)g~7Mć+~V֝sIϋxVqaiܳp,܀U2Jy2x@9@gȕ(b}4m׆):]EN:bi/f'*Fl}Z +S;9is/cdXҗTfTK&Az&v]7:1$y6®>95s|)_8Wm@[%7A ^\t۲/O1rFG?c. $RE9=^QN emaVޠ/BJ]ń-f D' pUm)C%<1P┾5_B=_(@##YE1sԭmDՊ@,n%C{#L5*KȃΖȫvذqCQ +Z^ԋoDT%DBgXMDbܯɍ b$0 Ѫ6m{p6ໞG#ʫf/j_j8o6(5nwb[.!=}˅Y\Ɂh +*!#w"2|#eДbtKL# ۙj\1JroTYu8F?$^V0$Ȇz8gxB7-ŞG$DDԑ&ܟ$ i7)91@iˆD5qF7b&/MHKnOtP~uZbNU. <zG d'C.ĊHuL5&ɾnf[yJ70w3#ۂ)^ZP3uJU_A0tLAD`5D*hB0p o0%_yڍDҝ#eMEeB]!HnMH>-&H.-eUInM-"p3`šv4;48VB4w\)_*f05](Al+2}!N{ycJ$d[.NAc+iTVi JFj;yv7%`,ާVE4 ⶫ$R@bjV+ͳDUޓ)TJaKf +9rBr~J +H2.ð#Y7LԢMR[> +E~CZ Sm&;87Nϕ;U,Q1,'(h#WDt^A$RRs8VPv϶a +[yN|M (@@]0 pGBUr~h-{ZERW{(Q,] J< GTp"3e>Ja2m"rDM%4+.Te?+${u;Npu;j[=@pSR#Mrm݆W*|T%3bHS_~y \A\m"t`vOR=x!RdGklev1%)jEG + r &D8&mg1>;;=MQ'h8vq~,\U2( \r(xLrr%#AB:R8C\."lT :hUD & OǺ~IE3!,In {lNSݷoKNB <"JD;pB钳rsobzViUNثDiBUw"!LB*i1JYŹ$JH)Ց.-fҳc.8C@OSڣ'ۏ~Ӈ_~Y/hZ|w}/~/A_~?NfUz?W W#p_쾄|r'H ƐqH 4zhrBP"<_!/t /:/fRffr“_Ȧ}WJՆa&6PfÛ`(1F%$"Z.I©uNbq42IgT|-:C x5&V3qatb3~/Gqj+)r0$5 #LOfEw^6‘IҶ*1"!zAU"zmO,.yj#8 U#vsс@os k3 쉨]d7ŠOJrɒUZ:U>KC\4m<ώTQз 4X3 .34 PEE "#jg ˋDNSP[\` ^[$pj&ʢP=븲& gR?oKiph'qQ{c2¾KE6ܧNuLmlqqUt-bGΙ6*!Bs1a@C}A:T@Y7%ۉ-Z +78IyfsTJ! vwCϸ2OӕB~0RxJT9T#8)v/şe:1%[FJO + =}bW*`42yy!|ѝT=/f[77B"b_q :o(IU]ve1hJƂ$-qUN*.STe %=1WVɔPn/zQ9Hl\.pd|>Ť u'ԆPg '>6O7h5epXE|.󺮋c4Ş!mڷ{p{xeyJ"MIYrN_ı~k s21(1cE9SH<3);s!0pzE7/ԭ`ʻ2*6=AıeݢZ3/.C3=C.E"Y<]1Nx<>>/()>It"Sn "UqF!?ocE&yW˯}i"WD:6jw +z $(.!2%u*$UcBxw"H9VP۰8P+G (<ATK2tf>(cõe1+cNU6x$=mF AƄ=|I£@z'v-~ kPݪJ/扩HssyLE"MgϓEѕAƦ:CS@}Gx&ԑs+f&GmuæB4Ԡ}3_6v^pϭ 5 @VXzz'֒gN ?S !2hqA{-FzށT&=3 Ae11S(8ĄǑ^TQԺbL;[Tk*fDDFئVS̮dvQI(fdH4O3,zomds33T=e_-}Ԩv2#$UA٩pV٦!N)Xb<ż8h +J XN3iHNI` _݉/~mjD\"LR>{u{C.4^KC;e(0J+ *~҃hi?!~]PLߑ9庌,AV=37ڞ9AxZHмkI<d9%xݸ\AgF􅴦ݱ[ًiT1r[:bGnf{Pj v\ H+pb! Dilx'U~rL-c$/-xP,Aۨn@o@UMP8VŚλ?plKZt/2z>stream +HWݎ9}ޡoe*"բj%Y4da*ww(7s9u<箥i˘}SѭIGZ/~ydcok-{ `6`Xf{njOn7lRo;]@s/Xc'ߐf{Dmb}n:dEq(dnp\F\IGMn0xV^CV}K؇G/tF<^߶g^|rX;~¯O[o&y}{|{}X^zx?}z=|Ox|9?~Ӈw8 %.~z3:MQq:%\FhPɁ"P% &&{ 5h{gKGXz eHD같 .va 4:s~f ܩiihn}WukKJ \@w֨pQ{8ae7^TlQܥOî‹ l& >Z|![A\)ЁLT| ]@fD2hY@Lqx$l}ͽW6AW5cE&mA)TӪαJbC<@*2qAo;PkZG]aXUnHXh:?oD2;he5nD[%$&Z2j,kHih"2m,C qB gj%_5;@VV ͊RqQ-~Cp 2{[K^`rE8o79Qp58Ł̂7W8A #Xč0t$_JNں\f&:<-k@BLDQZ*iV$]0#9DC ;*\PQ */ܨnhѺ(zCvO[=Fa &4Ei C e6;[Tf;K&kU DY!;,}/t*nNDlJD²Bf``FNE5CX9eUzt2M±:%YVu)b|hݖ"DAz3aE9`$,$ YӲPTKAY38{Y;}?.ı"2LDZ P lbk" 9R[Ҍ҈U&4=z6LlAk n0"90ݨK95V#nDX0D0J r].k >F"*8@F'OYrżt#|HrAh{BQ(yAbԆ-!붛%"۶ 'wP4:T\ Rn7"o ΃%hN:u -:cP;Z8J;t a٨mq@;.f| +2Ȓ X@9؂1B-$Dv&QuF>³2 l08h19@ZtʮI 㜙~YA\"s+2X@.-]Y-ɤu Gh{ s@3Y'd(̎t!Q( L-PD;OKGB+x?bY%)sUZe h(xbudܑ3 ܯGuyC@cۢGW$8c$5)|AN!`z/5ª͌<4o=da#9 +!d wc+X|wT3}2hH^a;K@S]Ѡ" Rւtjs"yg2\C{XNll/ ^$՝8|xB^AZ깲Hު]MY4,Ty(Aݡ8rH@:SrV"cGK($㬥Qf !VKeζiK)% BcZ{rHƩU9)B~sY,?l9˫iiKh g#/ğT+~ka*I[TeS}A> m^Dn*z2,!fDҲĚY֚Oܰ$Q:vHxSM- +d@,i +LD3 ~ݢ<\v;3F +)֚-ze{Pخ +;n_i Q4lQO:\[ C>U9MU&dʷ]36c[IȞ%Qe0idSZn_)Qk7=ns nB=TV<4usO0/Ht.#G3AcM"o)q@^JHl9FPƪ61*E;8X;~4SBsf 3ˆ?b&Ev}^0)j#|^M0T2#NVLPQ?hqBVBt~'/ +^}ߢf\]2}F:ǩBdOlU$ -iD*oSY-DKAE+v4kNrP̎TGDTs?Bz8_j@K"qϋ5q|74|8>ֈp}UQV!Pj |cBry4Qzq#i5<8=Z[f^S&u!qqlx-/ v5Ʌ< jZ;uI:8v.G8}#59ƒ(%V5 iLd#(I@4(Er>YoCx94܊* :=BrF\̠m$D1S>ڧdڻ[`#ǩdƹ JыMQ%.(}9xoǖ <`{bO$ϼ("iG5y-Q%/.;62~5{l4tr@'qMC9.{Lw0캐!&$ߜۇMO=3'Z-\j/xi z+f^) 㨞P 9hٯ h3ZՂKJVRXOk9qDIWĢԇGLcK0b`rn5^S8ZT^,_sM(ݤPTEɶ]) + +W`N1lmኮF}i:Dk@l|ʮ"K3Yf̸hZ=<"ؼ>y\<خ&x4?G!?,F\ؐ/tߞ`ݼ zgo#CpSpC`aD:TSZ%YF?FrE $RЅRM6_73aK+6.vPb }:POBLpS{H1e R&n;C?y\hG%m $mO$뼌A2J5ۅ~DEJgK?n&<"U7y$&E??ǟH7ǿ#atDā~;h +^Y22dTѲ+!Tڄ~tx40l,ԧn/6:3,$0a ŴhQ=S A@O|>f>NU|z̪yDiz +Mf`=n^>E!~N_$fB5SϫR?7T/?ѳJ=t+V Uf񰅛#sf`Qy3(qv@"BH̤TļR=Q]OU<@:(dϩ^][^UCaR:1iIՋ%iE-3p SپDiV!2eI(ri -BL-&c(&~oψ挙I&cBn_5;ƒ-%]b=cE1!?Lup>C8}-!ޥ4Jy ) +tޜ_w*PQ|{sՙIB>='[n (X[諄y阑ʢ>޾~9!_zCdsZnIP 5+֕|i]8,,Or"𽑺I=S [rD1l@8c|w:UKlx hQ;V>W쪡Iȫ zՒԤDצ΁<;@;3jb!b)NoM} +g]}Ϙ׍ahl2D)<^V[~/֋-&3mdΕ"tLP4nwWO![ɸ5jڔ +Vq3eZCR16#9BR$[yutJ-]Jj++&1f92қKKGw6ǖQ֯/1F@Y>'"G| 4#5[%dfsJ%R<'FwsGv9Ƶ8)*چñU<8,mw'8d8r ↋$h'U+HP* UBZd>HвwXVW iBxCi=g&%;]bJ^JD[1oSi51:ҍ1@}4s%㙦2Pu'J?[QDr`T:1t1! ]U{ݻwuzG]0߇(o:n|gHUއXO#"JpStu 4T-4.$(gI t6O!,^$7z){i^ BS~<5ѡPxZ 'y> 6 t?벊8}";knsRSUVIG?-E[yig$J AɷzjJWxWcoCv9W}A4DG0]k]ET29;c_^c,yjIKuF<]P>H}LQ*$1'zeRi:cicE|_Xu; b|ʽgn+5Åi-{]@3C6CJ=GY42=/_vmtqȒJ:u2|\bf:$U*yzL}>uhܲHe#n+shX{@V +م'[YLL\iK}-߉E[*.rqtey^-F]X`4 ,4ȳ0-l=(":Qs-xPvPf\长oPϥh$a%~g6 WL+z`Ж gvKbǰ1fI +םo9!JmU?V TG. 2ͣs ;/";-Hb͂F5w0lq߉ +3cܼSTzc7Ut+ng|F.k gOfo>lկhŸm[i]x4Lgd€1Vkedna6O +|VvΥz^힎M!b S[>QVSVm2Yu#o`!5s HT ҄_|N6)>+{ @';"a@m1O:äR$)WT*+ީDaǪʾbNy6d]GF}<ɹ2}94&"SHցOG [ݗ{>TDe8UNWkLtc|PΈݎHZA3 PEuÅum.,.ƄTK=xM'3Ґ  9s} 9Uh2\[?ȼ@ AFsY^[Z9!ivI.#XW;(xsO xå"Ȃ\AJ/h2[⃅$Zg]> ȪmddܣRy7ɪ"PS꿃8ˬjS;+Hsx:s,W~GLfŒ +X:vQY*?ga?vrAsj=I2iT)\83a{^بF$ ff9|/#8:5R7Q OABJ;ef}J7ixu벵IU5Z@w}ݐcK+ fd/%IJ/3HS7 + z]6]l VI\P)T_+RQ':@4 &PE]D1w-LJ/d "nىkZbo.ʐ^Z=S|̒ʉ^o[$bӝӌ2:KU+eliWр2I DZDq9_uXn\b;g!FJ󯾫L_̳3^yޘRWԱqnM)qY褱fq:i #+hD!<°=+EҢ2p1JѿI/c:ͯϰi3u^e@ QQ8N*^b֢4+p]#> +(St{^;o6%Ѱ sp9 .s)iʕ/9~Mі;A 6Cg +uPV2;󞶟se6l=<=WAdieQFgu)JƸ=$qDeqh":), rLص;Ū?.끜Ff}] +aKM,B-ZW}RҠm +q6hv $Ma2E Z62 [޸.g>Z`>t ,6~^r7@ºۄ:]|TD *$TWl,dkXB^)6oG:k`Q,*6 rlzԤ2,#$0*ͯ/`_!rvvz +YN2ӗ<% ^$.ZtRal3IZMv +T1CQNZŻmDNHj72*Z ynG0۔PtUi5'kG)%ѴIu^'m-M7Τ<jeyV׉zr2jHٓ3vPΠB jRmp-#u+}ui=fBCAӌ)ִP˟>}ç?OIgpl߾ۧ>Ͼ~?~g?ӿol⩑7h҃{=B;. xr( Z0[G'PsWZՁ&Ry~f2`?%=T#dc@rbX'b:Bb9^X@ ++RIY?UKC@6M˖zT{FlyI!Pd|#%#pAJx/e.1<9(g J^#\ E]( +q $eYN8;~ST\7hnxԝm#|$s!}]W~,ֲȨbr&}x(sJAS@`r:2i+mFl@dT~C-yY)1^vA֝u؃ + 0z@S}Vrb<tK@'RN"|,%3ph"v"aџ:fqQ)dT]1uHs k+@]ػ }ų8Innsvv˨V2zFDKI 5$3/]pAܮ̇D(Q";:"H +ͳVsRv|3aC"2PQu ud1{_dR@s/D"HFl9'^-T]zQȈWvG5RXDl>ulORfyE;~$R:gxI᫆7])肕^WDP4{bJv4{ei$'y9mgf /j^%'904}N r@hnhv"Ӣ i2XOv kjOoy)rVA7wx'W>H?^3 fbh3 rYQCH-@uFW"`#lg\JH!AW<$.P 1UMI {)dD3٢"bPRʖ ? ̖sbX,^)!=L25Fl'7}킪{Xr; |I +WR @d"bClueFer מ?؄NmxU+zhq ˨A--JՋĒ-wu]ttCoa▃3"T'|xz T[m:ތ,,c'h=('UA1ABXI;ߕ{\(St/!&Eb +mTŇQ `{F_Dt]d-e֋xe{F<ĥ_I5t"=Aj%~ xe<&kc2.V..nbok+HE>j$wJGb&Ⱥ*uCx%HxtjBxw&-Lu@4@J{Ni(8 .aqqL|㑞dT]e,7kq!\{mNeFiwU+0UOKLX 撬 r ,_ Rk\T( ϝuW5 yJ许7'_gLJm.zp3$)_DoJVԱ2xPͦ<u]D iHpe6D][9'F܍:Q|gF \X<ю]MHE%J~xӘLs(&qKfJ N]CF1Fp X ":X 2Ef RcOғr@ӈϾr!C5 MJl1Uvry_Lqah7urH|aL 4Q[D{6dt_@ZI^g641^?Oڊ&%v> +#RI +f =,D[M#CxG=5uZΆо-C4꺙o{%֮jƳpfČ(#biD>W9 +,Sdb! L̝jUB`G[V>H̰n/+Owb5Ã^nvU+A)"@dY,OdVm9ӗwtA+aA*(vډ\%$n8xh3N| g}O FT8w[) BDUEPLƊ|:=NC Ig/׸"UZG20rXyݑU8u zĴ)X )knI[xAdMG2_J1sV:avgA&CwI52w>ڗB#_B{扒#^FRgR;RrE8

    cYıӻ_~;8 +b6)Abf=$7+ +оIU1*U^b8ޑ3%7,Q:Wru]2]JQ.y!4BNJ>ʏ{r8*}% +Y")r +ʄCPdٽMNuhA8X`J&apGp$)b/ֵ&m*Sw#4Ƕc0Ŧ!>u_ƅ:UgkS{W[#ző]٭ OC,.Ώb=}|Ň߾~~Շnz+t|v/޾ŗ_~w~z~~[XQ~ +0n/>}|˧^|͟^=?7zWo߿ǟ^>߿}݇?G?ͫ7߿ln];s<=9ЊE>ËXo i(#?R$|aƍV Fk$#ǻ(̛7͙511J2X M+.CKw ` +Q-l7QT: +E 9YR).iFlw} DGhS}J[jV#CI@PWM0%wxd|g?wb̑N-SŬF}Q($mŃ(ǃ'a3L5xa{@0z I(>U$#ƘwiИBXVAg@+R2H;֕-F!(0SU#ԃ/p䩞Ǯ<%u$Y+!Sz \L~|q~E8{i*̘{ysN-7RE%J۽s#AdQ<ЅڀR (+ ++@gId _Pɤ1-YTZM0z4umUP-^\ !5iq6ao?cS6˙Dhw.{$֗/9si"lXD "ٕ_q1(Z1F(s&iKj:bjDkOa̜_؊Ԅ("E똥da^t +3]|A!(B+̏uG>ZW`xߛyT#ԏ#!A8v,;jgXXݏN녨|jn-fm4N%dusu1@Vݛi%$ޏK 1ĺG3fͮDĐBh)l[BdŮvYƘۚ!W0SknO4F@zOQ& E uXn|!۩ҪON@cO[y +R3vj t.)ѩ4jV{u4o 0.śT€PX`bZw=Mu<l2}' IGDW#T96d)uEOV\O 뤆7F,%Sܑ:/477B%<g]L܍b\ƺDR2ez%w8$4[E!&kPH@TB9H^Nӈ;~0F2MuW^ijaZӧwJ` 2:CRΨҟ[k "ZuB`U<EC'3f.mH#@?B jðiQrMJ( ] ŰS[|)Z2@11F*j3$G]+TMluK@n7Ң) 73zS- fmGinx!>6plś/H?̟j$밁=x ̸:c*E'ɶtnw}XQ?cq*ɦDZR'eg¯C%2 + /% Y֮sSUu\hd],vmK̚nշnF"/Yb觓61.cpR7M8t@b;mDlaE`J, i%LCt9̈́/ȤubM@/*`ww+^cֆ7lwܸ̕ڠ@P }AWWRT25 pi=Au6]x"9r[f[W Z:JvU$UUd!lXEH+.pjb5q$JJ=s ӵ<2raW-|ظ&CjF> QsѳR8^UTe:=rAF LHcz,M_mlUq(;6u:N).(\%2"x+ֳ\"3 % <׶GPhn]Okx .hISmlKW ]Ҟܗt^_s/Bv3tp[;e\*Z1]7~ZjL)Dr+4oXF%r[q#Gu3o Vf8_c2231(,R>bI JZ7=<T-U/27hU?THI9nHQJRÅ釄[7qF|"N|" <( thZqJ| ϭ =T˹՘g1_%!p%FY]eA#DT7*52"٫SHF׍ʍn{αwBYS*IIM2Nmً֖gRqv5=PFzY=Bݯ Jt,7mXZ@|=f'3\Z.;/tao]# ᰉk +wg զK'ުXTXXųF+4tlE5h@qrT 4Ȝ'16[**UTZ)-6ԟbTPlR[F,km4%W0h$ÀvGM@_E.X<$upKiR 0 i؍e1ǯHDte\,d*3n|vYDsZ"hM⅊*g juUTWKb+$.8c3h17r3D է&<7\f>}nFU&~Y? suٛ1dBKgG3 + 3HRaEv3EB{zW!WU*p@C6Tt{ DTLպ}xR4h*5 e yzH̷թp nw<אjYo&ELcمx/?(y$FI:ǃG*A+ F] +~Vٗ=aI#|9jIh%ZL2{8'ex2ΥF]Bھ@?Τ(y;:ũV6Sk@Vy$H.e E +5L*|H+ RytlxNS|WO^:Sp뢏խvWSdQNճĐ5Cԋ2SZ[Em':q`Ua*<@F +r%&TiQR۷q驂7vu ҚSR*gxeY*Hu̜O;q;0_Y"*._G}4 Ⱥ[!nh#K*r?Ez # +IB'mr=|g vBq$R\LaEl$YԼ QRr&zG- +Vkhe4~H/4V#_7>?}W=xj/_Ӈoy{?~#c||3Ñ-enU?69q +n(I?e =c +6IlfD1bp4G z 9q=94j {ET|ՅyM%ZBs^$xd^"y(QB΁=4 nJ!17":BvYt';G.q|zQ]R:׉17|m8;F6G`Tf0x}dפcgr=^BCҥ!~_a [,@dRá,bmwu!l'Qˌ'ߏ5B 1H%A:9{BnHӯq)qxVRi׸MV7^bNˈk:gW9@T$S2]􋟐$ -oGA(ir?tT/۲.'M4zot jvZ_5KXqG!}S'j@ּگnr)xwS-L=Z>S}klˣHNw""d׺rˇX;׭ :1h0t@0DN{&گeڈh Kk.4'=۸ +[T#'Э੻:Ƌjޟ7`n\9hd9q1;Jetmkq!) +A(ȜA9iV.X7fDmU!<+3(1D3@&C6 +`U hRRTp'4`@Mn=WA@ޯU[؁,;7^d64?֢ G0U$2D'A>#l!bkR'$YZW^_ٚXq uܶwDKQjmp>ha;3%ӛLK ?ٟ:j'Q֑!enbȄ420ҙCȻ-۹)]lI\_k+v_#m+*[9nMv=?#S^MBaA#üz̥{Jm*[~ӥv΍FOTFA }j?ޔx.f +JDX \g`HƦ.&i.HGgT +'ګKfy/T̾CVTLe:䉎FّiPXȿ9]s =/P1 jnd(zr#AT}9:ZPOll d":J;Ȧ8u[ݤ"5nXrc&j/V2S}+( @$6v2'HBcb+YsN:h!İ&S}lvʎ126Gv tR?_ ʿA.ud 5sZ0R҇x8Rn}!}~j R$q޺.ebM32B<# :@˷(-6(,OZTGRR]=qu9 +\nUmy#O~'Tz8;PMb: D2?!ܝN6pȥ.^EܴDT$]=#B$JTi$&8 /й.a?@ֿ-Q ubPJ4eI0Py=_P5(dNv KHsàF%kFme> J8"0v*݇0QH^I P"G8A& A˵[3xewN +&K_@l\Y&dNnr3/@=o\s?Gv6M["m=`|ўA}VJF +&GMD?ao]tIUb,_{`ԑbj)~m?ڊ\,loz^5vX;ss3hDEy:-N*6S`dyKp%R}-RuSI?P3IrpŪa¹ά]TZA4oM 3*zvBE(~Ye 76ZlhTvf6qpR6H+6goˊz CkB9hXf=(iM5@u\_}/u@ Y>յ.>E1Q X Az@ss?( +er=Ig5) +v5j*+ $/1- +0)^Q~/N"df8癹xCK qP&%P%t%ke +϶6 3jw!Ea돫SbPzM6`,@ܶ.374aj81oayGK B[徿 N䉇 s-ZZR;1o<"CP*m'2g3e05%,~ /Z^ :X 8*G܇|Uh>3asktN +G$bTX'1y33Ric${x$.1Y%/arԎxE?XǙ@ET MllHQdXSjns,fm}hy!lZNMSkj;:'˟eᄚ>ۮ}=^Xn=di 6jq}4ޱ/w,?KSX}"|!lOZL}LϾi~H?ah34݆T'&J) ;5V$^D't%iaRubH+5x2UY>a8`f":hu-xA~v:y0X稐&Fl3}B;xdsȚwIg]F/]^XNԌ$? >'ּ"3]TeI(Ns&6288-D2J̇FS0[7nur;0@\!ǔqXR5Ì`CMo U~Rux$ =񁗡߲A4Ee +2/'iJ= +Co`ݹX()C1x 'm(+nKB:H%L IܔAtTp/\J[7~w +Ps'xIT +@2Ơ)|B#:s}79wULLyG゘1[j_YH\-uR- ?tT̰O~u|_)f=|eFܳz>Ąu7:lDA:mgFNvvJUUIE} kS"j:=Ÿ&=,vX_i$eϣEzBjW1_twjyJ1uN ഒȌ./g"'8oG·*kuBaF2~;~ZT΢y5ꝪڱFf_FlN7c,bwbAlb*o( <Á΋RY jzl_Hм=0_sq3 +mc4"~7i?~ԨaCpj0Xl_<·/𦇪[=YgWE:lT?f[et̜F&=O%Pݍb9Ow?*H~CKE+^ :ϩYr"XvWUWW>E$]Sm +g +zQw@5BY_ZJ>VYq9УpB<p +4""͡@.j1i" )goQFr 7 +pD M#v z,?mN$z#7yz~~s^~ hr~={v~u}_/7o13n`ڟw_]4| l)7?n(.v$pj)wp[s2pjsϮ/_kLG}jwźG>yWwMo?|v|(gf8ݗ;  ״~ekDނWC.!ulquveBUBy\GFx5#/ +rJ(O 9ŘH|9)%MչSژyc s +} +ύ/ãgoϴhXcR1L{dx7\jٶœ6wzZ٥oNmOOÙEQx(N>:<9#p$a*0}!eM:)nC#7XY t !6^~B1hEx #ʕ~4i6 Ϯ !:lF%VS@{0ٻ ͚P؉/=ڌB T@h0^a<p=lChK\<$.WR VH$z7[0AM|n݁Æ xevXH5đzsu9\5u]Jl‡x%M:TIt2Iy$0":4E1@Tt!@^䭮% = ViRq``L}vdS[zpN5E As=-FVdφsCDR%{u΢/W!+61 a1n4R7l&†Z4Z-X)FbMέ7Qfݵv&jٕ bUOG UqƩcӵc>cSE+Kz+kTu6RՕ.FpщaJɝxjL2 "a&Z-R@ VY*tL:1  +84 J]+ ,Yɤq]^ip I˘:UB);<,5e}5h]-P k LdXGxfC0h +}+0^Fm +X25P  JBg\|Եx%8[c~̤r8[B#az'V0[}P)W y=/Z-Ւ9!OZYuEPcKR&̾_(ئ8`'<'2LKh!G~X l +c pM7Cj`Vc7!LVMqu5R=EV]Z7HNmzk> +]dm+W44Iᶂn (,ݴ4F8>:XU_fʴVs䭚)+:u;e hRJ9Sh"QmWnAܭƫʼ%U8Z/CLUrrR*gt'mݯ:`DVActvE 0̱]JƩQy"xj{1APdc!ڎAݡ#`0NʼnERw%x0De\4؏451 ~K-9:B~ ÁǺAAzڿ05 +TTl=L:,!9gMStVĬJ[iA'PAXm{_jܴZPH (~ 0 M$t endstream endobj 31 0 obj <>stream +H;ne=Gsp5$1vY4p3=&EmWTw)JcqN}s-cπ6ǿw_f/*q|Bۻ +sܺ/6or8s3m`ι]ڴ XC]V}_xPMۀ*,k;@Ams +)3rx-X54WQ {&}[]gr>.7>Vn0.1Rl{e ͟DgM0&INZ?90WD֟nY;4]^<kC,yl#a%kk]vWzGDN3iY ,"ë%LJ4Rʠ9'J؊*iQ#a54]lB-b2m04Iy`B;$TZJmo8)^*(z/2CwE*ȶΡwB WnIVKzJYʺl-0R P!lǔա&r SO]&|3vi;PzOU7|9KƧo4(@y5^B"k%D€Qo Bhڮ_ +ՐpUʹ^:WY0Zd!K&W%;( GI}('!OZF6v4C^y(|rC,NP;cfTkD|j/mӁF*,0,'SYWGQbpEhىcUC/kWk:T[2dV7>Ag*h K# 5Vn0Le¥%v9{x.LY> V*N .pYa1k5RkO-ȣu+Fi*(g9'8o[Nw4A%H=AOhuvU7s2œo&A{'Jk!愬(W| Fߌ: `Kcm꼃J٬|zpo&؍;dZ UCsn'h ;AFRp@ os&%޻d.m3kukNZ ix}6u_VnX;BSLƝj DtB\BlAu$\q,KCS2Gslo9OyouѱR}po0KRNB&KAgH A|zD%7g1j+l,mtohHnd'Yк.!hm.ۄjr-uz+H}s,5ʊܤ-( ª+#}B xϧIWЂdpI2*-uKƒO`aH14C MIT(Vo%b`ۧQ?v]6b K8<_Y kutGwzVRAvq!Hޝdp0!lo~paqi{y+U{=5|r?5)091t'NAg0o? ai/p,;Iɑao^AmQ +4)&Ў`Ơ`@YJ߹*sV(3l폭/7k6+)!4ڏTD=T}4H[bdS70V-Is 6i#C&Qrim?;<~6*?k24lt-债ìJy8o]=j\қL}ߤi\9 ? +/wq]$neU\1s^+ Tq+1NB8t^}xMdN>ͨȻ/@9g^`vC`tLWy%8mB7ј*Ooh>t GU7˨i#m`=-^>r@טsHS2đ:μhx Nvjx"\rvjNFkuaky?K-RrP3XX sZY+(|*pkj!bc0ٞ!N9(7;`H_X҃n btȅp5 uA D^ĝB)u]{ }HA!w_ƨe^3zI<GGd;0?9?]iI˦ +72CwYSY}r?K Mzbi_C_i&d30 Iu +6j1-@4h/I)9,B}"ygrFgAYtT >.G[9V ~Too׶%- eeWCvw?lUHH$DԳvJ].*pfp#Pe P hkgKxB#%hUmv^.kdKKZ3z{>Z#?DVco^p,Fhr)ri -u>cmQ lIS7 q873Q\OV\}.S;k1M9oN=|G G9Y``N f:{]|T*jګ5y|]ڒE? kL'#p7T20eALҀQ%Gkytu͎a|gD,X7b巸V<5@+Z{6Eqۖbr +Xj W/_d}>S,]w/=mߩS1x#xB7p7zT瘝YZkqaIDÒ'rMPǩvDf;gރB[x (I0CH M{ +)%TtŽw@2|NtUiŵ&ً,< eRV x%iV圾[uj9=ǡfsV-9 L +~wғ_s^CRZ 8?]#|vw#}LTsh SuolTnez֯WZ9M,q#<3Mc9ҿuFSCÉ:锊Po-~8 AϮ1J=Ɂ ڂasG% z0.s&p/l ɵ!?QjTҬ!h,"a:ޯiɑ=ŇS1KF[ڌsg|"|҂G +Y~f53t.  =]mﷲGk%E>h`rWi"2@rIg\{0@>x?GJꖋu]j"k~c]]ӀzuO3^Ug9UXI+if/KW"۫/W&21$SA=Wut!&"z߯"!KOqNaN(@/ͪv(߭W +#il(8q &PL4Y{6vS JaB,Gq2n#blLlf3?3 j2K7O:ږyA3!] JJ$$in]K I3=rmx1fWhnsޗST#3}?{hҡ%UdR#46cS&ھ+X <|&YwVE!agɂFL Ͳ {Dqu:.,>G m];$M>Ⱑmvʦ!]ŮEؼ`#1)5>I?t b{[˜!R/;/S(&= Im[|62 ,*)4ٷ̷=l/eL}"*@X +&K}p ߋUIRf3%oüh(*CTn|06MVĿ 8bN,Ž9@e 7m?!Sj2qЬRך46XZUU,,uxuRl"zRm^ځCs#m}H7༻ v->0\8ZTn5" {3V:5bxNg?B$ 96%'TM24O 0[eJ&,; 7M ?%fzUQXE h'S?LV`*twKCcDxH+&b! V_d!YgZ0Zx7Z&a0өoj3ᵾ~`47mNjXSOiBjMj"`cO)NYJkˢتno^aנ`" UWpmP܁f09Bq9$R0kixj)eD"a HxҒNSal"RB2qЮԔI1l$N/  @RrC&$F2kE;dU +2`R^08쨭XfjNZJAuĝ!0&v9F˭,l[-+輊9|cC)l=}WApt#Mco($ Sr:A~"nl_-ڃ/Oe=|ZL"FG9 k߇/#p 3 ЗHqe3 "b0+\P>|4ܒ.&nj8N DY +䪒~1gp3~Ttp"0f ,2ՇF@.ZשAN |>$hz̬ azpћ[-vtt + 1}9TǪt \3㕧oUB$ õX]ۥ>YpW.=iѳ 6>t{= 1qV*#V.}tiuIhEedd[vΤx%0`ltN>,Q +~z9ǘ~?JP[h[DPs% %(34 z]qΊ8DuQ iîi-/߾F[MyhA++e5ih]~ÿ=qh}]>ҫZE颽}5J\ ﷙ӗr^Sg4;\ۗE=^ξ;wKy0S=Au 8 ~qGXx|oww[dhUQЫ[oþu(|^np Ẳk i[; +ܭ~WVEx8CJ^Lߌ[6N S.[SU0![\zr.,}]h\(;-qc_^pZ`odvY4y;k,70&(OgŬ} +.3jڮmSiv5m;5&{;<:'Kʿ9?7=~6Nf<́'momy +,EQËʮgmَ/BYweU3ԡ =l>cLKgzhvpޞׄq^$ZU߱tЕ/L`F.bfrJ":-bΚ`Z7Nm(ɯkGeiQIL}}JRh e~kX^ͅrۛzrM,cQ⇳jm,{roN^We+mmՁ`FBؖ;o?w^)**?kS8J)Lʶ +R ^{G!pƙVe]w!KLoaYb_%7 wIY,`e:jq8NΒe [ol0LzOZI;>aI2U=4q #_W{U?Q-(Ew,pN&\WP&%1ΐr1g Gx/MYuYpDGXB45 |8tO5%W% WͨO) -8? [Y +V6(MQ}#$c[wzg-s뜐w%mY FToqzdN8ӨIH⮴y=;t-)H'b0" +dq9,cgɉU;o(cA>l̎:$%vSPnbogb0$K%qQ-'򝦐g-tx8E#ܓ= )eiVSXyya|p[՞AH˰Οv8={U4$_6515(d̡ V%r<>>stream +HQr7O;ehI*Z>暥%¬kTࠇf1%N9E.!i8ph!Mv{M)ZP~~ֿT{z6Pp!)fKƩQ~_ CK)W$ӄHV/,?/ݔfI~,V '=77'{eIA'\K$^`Q椂 +g@dk4'Yi%jg~6p8 S~\yS·LAeFS&b/tq/~ + +Bσq~eeBh*%=1~gI#2\%nyL7 3qٵO0rf) '^m{v DyMM|HB #\C=Fz WO&cSp#=/X? 9np;g<gI2咠pݶcSv%Œ/CH͛+YrC70?7z֟nZ.eO8f\w eo9K#=X>aP zyuۿ|g׽-djt휝zsB(N!g)|m_g͉ \L3W{DŽhHl}ӜK +Y t3³k oLH<2SatR~O蛩DiEƇ]LsXxXmtp!zH>"pt6 /쟃od?=,f ov6"X! +$p^`Qi:#U&3iT\]E9wG R& G(eJb'GCf nXnVpLe3fgVLHYf + vRoZ7n(-dkfÀo @CioLl; h ov6&"X!!p}^`Qi:#U&|3iT\EE9w|G R&Km?$x#iZ,MToyiKb#k6uʴPPEs-r&ѷom DOln'0P4sŶO3Z4XnVVh=IvmA )3La8q5kplߓu15Q^pkfôl 4}E7hȺKrb)#XۮxC-]8|p` +x> |-p8蚴2wK4F/꾋trfq|S{;Q5_ /2*vf} +t"8q^q-Oӂ#i 'JȬoTgk#tm_¿Jk)SgwWR4bMO̡TVA!Wh3/fBsv˖@Է2" vS2\%n۩ |F^pw͊*]ɮ7h}Bp2a],3UOI F=YW^@e6h9,<\6:AQݧQN45p.Geh$=KH*"k>9P {16j`B>GO/q5ieﮗh0+^}|W_\iaš䍛?9l'ٚk4*K^. 3Ec_zkRQ|{Y"ڵjx P(' Mx4z%RVG=z ~]:4lG8" + /b(4r<7zIIvn Trɲez':)ʙ~KxPI|;Mv HjMaGnTwY0R9A-~rq'FwMbBUCj {i7 +}{;9n&"wΤ' +햤L4@wx&Kx979^0%c'##cكRJRbx5dx2+ug(^vl*pېP;;^R)DL),{7e=][,a| L%i~Cj7SEBCvr^^d1Wm2zm 'r:@_D=}Hnϱot+F_F7)x7~2)1Uň;S/ex14J}/]whǦ 7__\kz[*R.YT# {YnILHM^X.ۺB#Pw1̣ ?>)9ǾJ ~ݤ ڭ7c T#bdLE;ń>Dbx+~^!j}kon@.t|s4PfAW/wJ"9*Z'eT j + +/ۗ$j0%"HvճDV'99=ee O.?|ލ7 HӈЇ7LK9"X xm5TI0As[-fSto >{jb?kCw8VmX}cO~Rm=m<3$ɵ uz v}V0SE6|N)7_RFyP+-֋ VтX,F[q\ L,An# \U oue5#kCIT6}Dn%MT>Y8Z3..f x0UZ3b6_; k݆ +*3u5bFNvzgZr4 eQ|pIx#{=M"DL1q E[c7Cvl5іr> endobj xref 0 34 0000000000 65535 f +0000000016 00000 n +0000000144 00000 n +0000048136 00000 n +0000000000 00000 f +0000049786 00000 n +0000292033 00000 n +0000048187 00000 n +0000048567 00000 n +0000050380 00000 n +0000050084 00000 n +0000049971 00000 n +0000049035 00000 n +0000049225 00000 n +0000049273 00000 n +0000049855 00000 n +0000049886 00000 n +0000050262 00000 n +0000050453 00000 n +0000050891 00000 n +0000052099 00000 n +0000067147 00000 n +0000085380 00000 n +0000100415 00000 n +0000116094 00000 n +0000125865 00000 n +0000144696 00000 n +0000168641 00000 n +0000196137 00000 n +0000223401 00000 n +0000250144 00000 n +0000276343 00000 n +0000288050 00000 n +0000292056 00000 n +trailer <<8970128F95564BD1854CDF1C2B286A6D>]>> startxref 292246 %%EOF \ No newline at end of file diff --git a/información/LOGOS RR/RR LOGO 005.eps b/información/LOGOS RR/RR LOGO 005.eps new file mode 100644 index 0000000..0ecfc15 Binary files /dev/null and b/información/LOGOS RR/RR LOGO 005.eps differ diff --git a/información/LOGOS RR/RR LOGO 005.jpg b/información/LOGOS RR/RR LOGO 005.jpg new file mode 100644 index 0000000..a70e27c Binary files /dev/null and b/información/LOGOS RR/RR LOGO 005.jpg differ diff --git a/información/LOGOS RR/RR LOGO 005.pdf b/información/LOGOS RR/RR LOGO 005.pdf new file mode 100644 index 0000000..e4add71 --- /dev/null +++ b/información/LOGOS RR/RR LOGO 005.pdf @@ -0,0 +1,1552 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + RR LOGO 005 + + + + + 2013-11-03T14:19:08+04:00 + 2013-11-03T14:19:08+04:00 + 2013-11-03T14:19:08+04:00 + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 152 + JPEG + /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAmAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AB4VdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdiqb+UP8AlLNE/wCY+1/5PLir6ewK7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq+SsKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVN/KH/KWaJ/zH2v/ACeXFX09 gV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV8lYVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV diqb+UP+Us0T/mPtf+Ty4q+nsCuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvkrCrsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVTfyh/ylmif8x9r/yeXFX09gV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV8lYVdirsVdirsVdiqP0XQtV1q+Wy02Bp523IGyqvdmY7KPnir07SPyKj9NX1fUm9Q/ahtFA A/56SA1/4DAqcj8k/J4ABlvCR3Mqb/dHirv+VJ+T/wDfl5/yNT/mjFXf8qT8n/78vP8Akan/ADRi rv8AlSfk/wD35ef8jU/5oxV3/Kk/J/8Avy8/5Gp/zRirv+VJ+T/9+Xn/ACNT/mjFXf8AKk/J/wDv y8/5Gp/zRirv+VJ+T/8Afl5/yNT/AJoxV3/Kk/J/+/Lz/kan/NGKu/5Un5P/AN+Xn/I1P+aMVQGv flp5f8uaTPr2nSXP1/TOFzbeq6MnqRuGXkvAVFcVYh/yuTzt/v6D/kSuGld/yuTzt/v6D/kSuNK7 /lcnnb/f0H/IlcaV3/K5PO3+/oP+RK40rv8Alcnnb/f0H/IlcaV3/K5PO3+/oP8AkSuNK7/lcnnb /f0H/IlcaV3/ACuTzt/v6D/kSuNK7/lcnnb/AH9B/wAiVxpXf8rk87f7+g/5ErjSqkP5z+c435Mb aUfyPFQf8Kyn8caVlPl/877K4lWDW7T6pyNPrUBLxiv8yH4gPkTgV6Zb3EFxBHPBIssMqh45EIKs pFQQRir5Owq7FXYq7FXYq2qs7BVBZmNFA6knFX0l5F8p23lzQ4rYIPr0oEl9NtVpCK8a/wAqVoP7 cCsixV2KuxV2KuxV2KuxV2KuxV2KuxVjv5if8oTq/wDxgP8AxIYq+bMKuxV2KuxV2KuxV2KuxV2K uxV2KuxV6h+S/myaG/by9dSFre4DSWQbfhKo5Mg8Ay1PzHviry/FXYq7FXYq7FWRfl7YJfedNJt3 FVE/rEHofQUy0P8AwGKvpPArsVdiqW6r5m8v6SwTUdQgtpG3EbuOdPHiPip9GKpf/wArE8k/9XeD 72/pirv+VieSf+rvB97f0xV3/KxPJP8A1d4Pvb+mKu/5WJ5J/wCrvB97f0xV3/KxPJP/AFd4Pvb+ mKo3SfNfl3V7hrbTb+O6nRDI0aVqEBCk7jxYYqmuKuxVjv5if8oTq/8AxgP/ABIYq+bMKuxV2Kpz D5M82TRJNFpF28Uih43WJyGVhUEGncYqv/wP5w/6s15/yJf+mKu/wP5w/wCrNef8iX/pirv8D+cP +rNef8iX/pirv8D+cP8AqzXn/Il/6Yq7/A/nD/qzXn/Il/6YqlFza3NrM0FzE8E6bPFIpRx81ahG KqWKuxVMPL981hrun3qmn1e4ikPyVwSPpGKpfirsVdirsVdirNPygAPnm0JNCI5iB4n0yKYq+gcC uxVJ/OGuHQ/Ld9qaAGWBKQg7j1HYIlR3AZqnFXzPdXVzd3ElzcyNNcTMXllc1ZmPUknCqlirsVdi rsVdir0T8jf+Usu/+YCT/k9Dir3HArsVY7+Yn/KE6v8A8YD/AMSGKvmzCrsVdir6k8tf8o7pX/MH b/8AJpcCpjirsVdirsVdirEfzM8rWmteXLm49MDULCNp7aYD4qICzR17hhXbxxV88YVdirsVdirs VdirsVdirLfyquEg896aX2WT1Y6nxaFwv40xV9EYFdirF/zM02fUPJWpQwAtLGqzhR3ETh2/4UHF XzlhV2KuxV2KuxV2KvRPyN/5Sy7/AOYCT/k9Dir3HArsVY7+Yn/KE6v/AMYD/wASGKvmzCrsVdir 6k8tf8o7pX/MHb/8mlwKmOKuxV2KuxV2KpP5x1ODTPLGpXcxACwOiA/tSSDgi/SzDFXzFhV2Kqtr A1xdQ26btM6xqB1qxAH68VUsVdirsVdirsVROmX8+najbX8H99aypNHXpVGDUPsaYq+ntD1mx1nS 7fUbJ+cE6g07q37SN7qdjgVHYq7FXnWvfkrol/dvc6ddPppkPJoQgliBPXgvJCo9q4qlX/KhP+17 /wBOv/X7Dau/5UJ/2vf+nX/r9jau/wCVCf8Aa9/6df8Ar9jau/5UJ/2vf+nX/r9jau/5UJ/2vf8A p1/6/Y2rIvI35Zf4W1abUP0l9c9W3a39L0PSpydH5cvUf+TpTArOMVdirHfzE/5QnV/+MB/4kMVf NmFXYq7FXpmnfnbd2Wn2tmNJjcW0UcIczMK+moWtOHemNKif+V8Xn/Vnj/5Ht/zRgpXf8r4vP+rP H/yPb/mjGld/yvi8/wCrPH/yPb/mjGld/wAr4vP+rPH/AMj2/wCaMaVo/nxe0NNHjB7EzMf+NMaV h3m3z3rvmZkW9ZYrSI8orSEERhqU5GpJZqeJ+WFWOYq7FWa/lT5Zn1fzNDeMh+o6ayzzORsZF3iQ e/IV+QxVhWKuxV2KuxV2KuxVOPLfmfX9CuuekTsjSkB7enNJD2BQ1qfcb4q9r8s+Z/PV/FGdR8t+ ijU5XHrCD/kjLyf8cCsxQsUUsOLEAsta0PhXFW8VdirsVdirsVdirsVdirsVY7+Yn/KE6v8A8YD/ AMSGKvmzCrsVdirsVdirsVdirsVdirsVXRqjOoduCE7tStB8sVeg+TfJnkHU5kW718z3DUpYhDak t/Lykrz/ANhir2nTdM0/TLNLOwgS2to/sxoKCvcnuSe5OBXynhV2KuxV2KuxVfDDJNMkMSl5ZGCR oOpZjQD78VfRHkfyFpnluxjdo1m1Z1BuLthUgkbpHX7Kj2698CsqxV2KuxV2KuxV2KuxV2KuxV2K uxVjv5if8oTq/wDxgP8AxIYq+bMKuxV2KuxV2KuxV2KuxV2KuxV2KuxV6r+U3n69N9H5f1SYzQzA iwmkNWR1FfTLHqpA+HwO2BXlWFXYq7FXYq7FWR/l1BHP520hJBVRP6g/1o1Lr+K4q+ksCuxVpmVF LMaKoqT4AYq+ZvM/m3V/MGoTXF1cSfV2Y+ha8iI40r8ICjatOp74VSTFXYq7FXYq7FXon5G/8pZd /wDMBJ/yehxV7jgV2Ksd/MT/AJQnV/8AjAf+JDFXzZhV2KuxV9PeXLO0Pl7SyYIyTaQEkqv++l9s Cpj9Ss/98R/8Av8ATFXfUrP/AHxH/wAAv9MVd9Ss/wDfEf8AwC/0xV31Kz/3xH/wC/0xVprCxZSr W8RU7EFFIP4Yq8p/OHyZpNjYQa1ptulq/qiG6iiXjGwcEq/EbKQVpt1riryfCrsVR+gzvBrmnTxm jxXMLqfdZAcVQGKuxV2KuxV2Ksn/ACz/AOU60n/jI/8AyafFX0dgV2KqN7/vHP8A8Y3/AOInFXyh hV2KuxV2KuxV2KvRPyN/5Sy7/wCYCT/k9Dir3HArsVY7+Yn/AChOr/8AGA/8SGKvmzCrsVdir6k8 tf8AKO6V/wAwdv8A8mlwKmOKuxV2KuxV2KsG/OX/AJQqT/mIh/WcVeB4VdiqL0n/AI6tl/xni/4m MVQmKuxV2KuxV2Kpr5X1pdE16z1VojOtqxYxBuJaqletD44q9L/5Xza/9WZ/+R4/6p4Fd/yvm1/6 sz/8jx/1TxVZP+etrLDJH+h3HNStfXG1RT+TGleRYVdirsVdirsVdirJPIfm2Pyvq82oPbG6Etu1 v6auEpydH5VIb+TFWef8r5tf+rM//I8f9U8Cu/5Xza/9WZ/+R4/6p4qhtQ/NOLzTbHy5FprWsurP HaJcNMHVDLIqhioQEgYqh/8AlROr/wDVzt/+AfG1d/yonV/+rnb/APAPjau/5UTq/wD1c7f/AIB8 bV65pVo1lplnZswdraCOFmHQmNAtR92KorFXYq7FXYq7FWP+efLU/mPQW02CZIJGlST1HBIoldts Vec/8qJ1f/q52/8AwD42rv8AlROr/wDVzt/+AfG1VrL8kNWt7yCdtSgYRSI5AR6kKwOKvKsKuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVN/KH/AClmif8AMfa/8nlxV9PYFdirsVdirsVd irsVdirsVdirsVdirsVfJWFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqm/lD/lLNE/ 5j7X/k8uKvp7ArsVdirsVdirsVdirsVdirsVdirsVdir5Kwq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FU38of8pZon/Mfa/wDJ5cVfT2BXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXzD/hDz Z/1ZL/8A6RZv+acKu/wh5s/6sl//ANIs3/NOKu/wh5s/6sl//wBIs3/NOKu/wh5s/wCrJf8A/SLN /wA04q7/AAh5s/6sl/8A9Is3/NOKu/wh5s/6sl//ANIs3/NOKu/wh5s/6sl//wBIs3/NOKu/wh5s /wCrJf8A/SLN/wA04q7/AAh5s/6sl/8A9Is3/NOKu/wh5s/6sl//ANIs3/NOKu/wh5s/6sl//wBI s3/NOKu/wh5s/wCrJf8A/SLN/wA04q7/AAh5s/6sl/8A9Is3/NOKu/wh5s/6sl//ANIs3/NOKu/w h5s/6sl//wBIs3/NOKu/wh5s/wCrJf8A/SLN/wA04q7/AAh5s/6sl/8A9Is3/NOKu/wh5s/6sl// ANIs3/NOKpp5W8reZ4PM+kTTaRexQxXtu8kj28qqqrKpLMStAAMVfRWBXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FX/2Q== + + + + + + uuid:fcdbf762-8402-6d45-8bc9-0611b312db51 + xmp.did:EA8322F607206811822AB503FB0ACEDA + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + xmp.iid:E98322F607206811822AB503FB0ACEDA + xmp.did:E98322F607206811822AB503FB0ACEDA + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:0280117407206811822AB503FB0ACEDA + 2013-11-03T14:15:38+04:00 + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:EA8322F607206811822AB503FB0ACEDA + 2013-11-03T14:19:06+04:00 + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Print + + + False + False + 1 + + 25.647702 + 15.256089 + Millimeters + + + + PANTONE Cool Gray 9 C + + + + + + Grupo de muestras por defecto + 0 + + + + Blanco + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Negro + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Rojo CMYK + CMYK + PROCESS + 0.000000 + 100.000000 + 100.000000 + 0.000000 + + + Amarillo CMYK + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Verde CMYK + CMYK + PROCESS + 100.000000 + 0.000000 + 100.000000 + 0.000000 + + + Cian CMYK + CMYK + PROCESS + 100.000000 + 0.000000 + 0.000000 + 0.000000 + + + Azul CMYK + CMYK + PROCESS + 100.000000 + 100.000000 + 0.000000 + 0.000000 + + + Magenta CMYK + CMYK + PROCESS + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=15 M=100 Y=90 K=10 + CMYK + PROCESS + 14.999998 + 100.000000 + 90.000000 + 10.000002 + + + C=0 M=90 Y=85 K=0 + CMYK + PROCESS + 0.000000 + 90.000000 + 85.000000 + 0.000000 + + + C=0 M=80 Y=95 K=0 + CMYK + PROCESS + 0.000000 + 80.000000 + 95.000000 + 0.000000 + + + C=0 M=50 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 50.000000 + 100.000000 + 0.000000 + + + C=0 M=35 Y=85 K=0 + CMYK + PROCESS + 0.000000 + 35.000004 + 85.000000 + 0.000000 + + + C=5 M=0 Y=90 K=0 + CMYK + PROCESS + 5.000001 + 0.000000 + 90.000000 + 0.000000 + + + C=20 M=0 Y=100 K=0 + CMYK + PROCESS + 19.999998 + 0.000000 + 100.000000 + 0.000000 + + + C=50 M=0 Y=100 K=0 + CMYK + PROCESS + 50.000000 + 0.000000 + 100.000000 + 0.000000 + + + C=75 M=0 Y=100 K=0 + CMYK + PROCESS + 75.000000 + 0.000000 + 100.000000 + 0.000000 + + + C=85 M=10 Y=100 K=10 + CMYK + PROCESS + 85.000000 + 10.000002 + 100.000000 + 10.000002 + + + C=90 M=30 Y=95 K=30 + CMYK + PROCESS + 90.000000 + 30.000002 + 95.000000 + 30.000002 + + + C=75 M=0 Y=75 K=0 + CMYK + PROCESS + 75.000000 + 0.000000 + 75.000000 + 0.000000 + + + C=80 M=10 Y=45 K=0 + CMYK + PROCESS + 80.000000 + 10.000002 + 45.000000 + 0.000000 + + + C=70 M=15 Y=0 K=0 + CMYK + PROCESS + 70.000000 + 14.999998 + 0.000000 + 0.000000 + + + C=85 M=50 Y=0 K=0 + CMYK + PROCESS + 85.000000 + 50.000000 + 0.000000 + 0.000000 + + + C=100 M=95 Y=5 K=0 + CMYK + PROCESS + 100.000000 + 95.000000 + 5.000001 + 0.000000 + + + C=100 M=100 Y=25 K=25 + CMYK + PROCESS + 100.000000 + 100.000000 + 25.000000 + 25.000000 + + + C=75 M=100 Y=0 K=0 + CMYK + PROCESS + 75.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=50 M=100 Y=0 K=0 + CMYK + PROCESS + 50.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=35 M=100 Y=35 K=10 + CMYK + PROCESS + 35.000004 + 100.000000 + 35.000004 + 10.000002 + + + C=10 M=100 Y=50 K=0 + CMYK + PROCESS + 10.000002 + 100.000000 + 50.000000 + 0.000000 + + + C=0 M=95 Y=20 K=0 + CMYK + PROCESS + 0.000000 + 95.000000 + 19.999998 + 0.000000 + + + C=25 M=25 Y=40 K=0 + CMYK + PROCESS + 25.000000 + 25.000000 + 39.999996 + 0.000000 + + + C=40 M=45 Y=50 K=5 + CMYK + PROCESS + 39.999996 + 45.000000 + 50.000000 + 5.000001 + + + C=50 M=50 Y=60 K=25 + CMYK + PROCESS + 50.000000 + 50.000000 + 60.000004 + 25.000000 + + + C=55 M=60 Y=65 K=40 + CMYK + PROCESS + 55.000000 + 60.000004 + 65.000000 + 39.999996 + + + C=25 M=40 Y=65 K=0 + CMYK + PROCESS + 25.000000 + 39.999996 + 65.000000 + 0.000000 + + + C=30 M=50 Y=75 K=10 + CMYK + PROCESS + 30.000002 + 50.000000 + 75.000000 + 10.000002 + + + C=35 M=60 Y=80 K=25 + CMYK + PROCESS + 35.000004 + 60.000004 + 80.000000 + 25.000000 + + + C=40 M=65 Y=90 K=35 + CMYK + PROCESS + 39.999996 + 65.000000 + 90.000000 + 35.000004 + + + C=40 M=70 Y=100 K=50 + CMYK + PROCESS + 39.999996 + 70.000000 + 100.000000 + 50.000000 + + + C=50 M=70 Y=80 K=70 + CMYK + PROCESS + 50.000000 + 70.000000 + 80.000000 + 70.000000 + + + PANTONE Cool Gray 9 C + SPOT + 100.000000 + LAB + 50.196079 + 0 + -2 + + + PANTONE 7700 C + SPOT + 100.000000 + LAB + 35.686275 + -11 + -26 + + + + + + Grises + 1 + + + + C=0 M=0 Y=0 K=100 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + C=0 M=0 Y=0 K=90 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 89.999405 + + + C=0 M=0 Y=0 K=80 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 79.998795 + + + C=0 M=0 Y=0 K=70 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 69.999702 + + + C=0 M=0 Y=0 K=60 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 59.999104 + + + C=0 M=0 Y=0 K=50 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 50.000000 + + + C=0 M=0 Y=0 K=40 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 39.999401 + + + C=0 M=0 Y=0 K=30 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 29.998802 + + + C=0 M=0 Y=0 K=20 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 19.999701 + + + C=0 M=0 Y=0 K=10 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 9.999103 + + + C=0 M=0 Y=0 K=5 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 4.998803 + + + + + + Brillantes + 1 + + + + C=0 M=100 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 100.000000 + 100.000000 + 0.000000 + + + C=0 M=75 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 75.000000 + 100.000000 + 0.000000 + + + C=0 M=10 Y=95 K=0 + CMYK + PROCESS + 0.000000 + 10.000002 + 95.000000 + 0.000000 + + + C=85 M=10 Y=100 K=0 + CMYK + PROCESS + 85.000000 + 10.000002 + 100.000000 + 0.000000 + + + C=100 M=90 Y=0 K=0 + CMYK + PROCESS + 100.000000 + 90.000000 + 0.000000 + 0.000000 + + + C=60 M=90 Y=0 K=0 + CMYK + PROCESS + 60.000004 + 90.000000 + 0.003099 + 0.003099 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 12 0 R/TrimBox[28.3465 28.3465 101.049 71.5921]/Type/Page>> endobj 8 0 obj <>stream +HlKN1 9/0nI V!`c"A/$CKH|?v7{_!P2dS: spO˅A-K- r1LQ/c)UBSaJz4(JZgBLr"r.rChh%äX~1cau%1F9s+9&䑱4y&B1L^ + r0Ub0zϒJcG`eC\yD.F+(BF ^3]oL6A KJ^G>+Q/o0Zq-^ۿ4Z[/;t6*(lv=-\둘P47w>OGH endstream endobj 12 0 obj <>stream +8;Xp,ST<'o#)#PFYV;_8(d\KZ%tnotC7oD9oe9YI8HAel"oue5P3r~> endstream endobj 13 0 obj [/Indexed/DeviceRGB 255 14 0 R] endobj 14 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 11 0 obj <> endobj 10 0 obj [/Separation/PANTONE#20Cool#20Gray#209#20C 17 0 R<>] endobj 17 0 obj [/Lab<>] endobj 9 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (GAG) () %%Title: (RR LOGO 005.eps) %%CreationDate: 03/11/13 14:19 %%Canvassize: 16383 %%BoundingBox: 7 -246 68 -209 %%HiResBoundingBox: 7.60986 -245.1309 67.2227 -209.9688 %%DocumentProcessColors: %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%DocumentCustomColors: (PANTONE Cool Gray 9 C) %%RGBCustomColor: 0.11025 0.353432 0.48886 (PANTONE 7700 C) %%+ 0.468179 0.467416 0.47835 (PANTONE Cool Gray 9 C) %%CMYKProcessColor: 1 1 1 1 ([Registro]) %AI3_Cropmarks: 0 -249.0635 72.7021 -205.8179 %AI3_TemplateBox: 113.5 -227.5 113.5 -227.5 %AI3_TileBox: -366.6489 -506.9404 416.3516 52.0596 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -98.3042 -162.937 3.8712 1196 689 18 0 0 78 98 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 56.6929 8 56.6929 8 1 0 0.756863 0.145098 0.129412 0.878431 0.572549 0.564706 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 20 0 obj <>stream +%%BoundingBox: 7 -246 68 -209 %%HiResBoundingBox: 7.60986 -245.1309 67.2227 -209.9688 %AI7_Thumbnail: 128 76 8 %%BeginData: 14518 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C457D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D52537DFD34FF527D5252527D5252 %527D5252527D5252527D5252527D5252527D5252527D5252527D5252527D %5252527D5252527D5252527D5252527D5252527D5252527D5252527D5252 %527D5252527D52A8FD34FF7D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D5253A1FD34FF %525252535252525352525253525252535252525352525253525252535252 %525352525253525252535252525352525253525252535252525352525253 %525252535252525352525253525252A8FD34FF7D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527DA8FD34FF5252527D5252527D5252527D5252527D5252527D5252 %527D5252527D5252527D5252527D5252527D5252527D5252527D5252527D %5252527D5252527D5252527D5252527D5252527D525252A8FD34FF7D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D52527DFD34FF5253525252535252525352525253 %525252535252525352525253525252535252525352525253525252535252 %525352525253525252535252525352525253525252535252525352525253 %52A8FD34FF7D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D52537DFD34FF527D5252527D %5252527D5252527D5252527D5252527D5252527D5252527D5252527D5252 %527D5252527D5252527D5252527D5252527D5252527D5252527D5252527D %5252527D5252527D52A8FD34FF7D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D5253A1FD %34FF52525253525252535252525352525253525252535252525352525253 %525252535252525352525253525252535252525352525253525252535252 %5253525252535252525352525253525252A8FD34FF7D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527DA8FD34FF5252527D5252527D5252527D5252527D5252527D %5252527D5252527D5252527D5252527D5252527D5252527D5252527D5252 %527D5252527D5252527D5252527D5252527D5252527D525252A8FD34FF7D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D52527DFD34FF525352525253525252535252 %525352525253525252535252525352525253525252535252525352525253 %525252535252525352525253525252535252525352525253525252535252 %525352A8FD34FF7D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D52527DFD34FF527D5252 %527D5252527D5252527D5252527D5252527D5252527D5252527D7DA17DA8 %A8A8A1A8A8A8A1A8A8A8A1A8A8A8A1A8A8A8A1A8A8A8A1A8A8A8A1A8A8A8 %A1A8A8A8A1A8A8A8A1A8A8FD2C7DA8A8FD07FF7D527D527D527D527D527D %527D527D527D527D527D527D527D527D52A8FD2EFF7D52527D5253527D52 %53527D5253527D5253527D5253527D5253527D5253527D5253527D525352 %7D5253527D525352A8FD05FF525252535252525352525253525252535252 %52535252525352527DFD30FF7D5252525352525253525252535252525352 %525253525252535252525352525253525252535252525352525253525252 %7DA8FFFFFF7D527D527D527D527D527D527D527D527D527D527D527D5259 %7DFD31FF7D7D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527DA8FFFF525252 %7D5252527D5252527D5252527D5252527D5252525352FD32FF7D5252527D %5252527D5252527D5252527D5252527D5252527D5252527D5252527D5252 %527D5252527D5252527D5252527D527DA8FF7D527D527D527D527D527D52 %7D527D527D527D527D527D52A8FD32FF7D7D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D52A8FF525352525253525252535252525352525253525252 %53527DA8FD32FF7D52535252525352525253525252535252525352525253 %525252535252525352525253525252535252525352525253FD0552FF7D52 %7D527D527D527D527D527D527D527D527D527D52537DFD33FF7D7D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527DA8527D5252527D5252527D5252 %527D5252527D5252527D52A8FD33FF7D527D5252527D5252527D5252527D %5252527D5252527D5252527D5252527D5252527D5252527D5252527D5252 %527D5252527D527D7D527D527D527D527D527D527D527D527D527D527D52 %7DCAFD33FF7D53527D527D527D527D527D527D527D5253527D5253527D52 %53527D5253527D5253527D5252527D527D527D527D527D527D527D7D5252 %525352525253525252535252525352525253525252FD0EFFA8FD187DA1FD %0CFF7D5252525352525253FD04527DA87DA8A8A87DA8A8A87DA8A8A87DA8 %A8A87DA8A8A87DA87D52527D52525253525252535252527D7D527D527D52 %7D527D527D527D527D527D527D527D527DFD0DFFA8527D527D527D527D52 %7D527D527D527D527D527D527D527D52A8FD0CFF7D7D527D527D527D527D %527D52A8FD18FFA87D527D527D527D527D527D527DFD04527D5252527D52 %52527D5252527D5252527D525252FD0CFFA85252527D5252527D5252527D %5252527D5252527D5252527D52527DFD0CFF7D5252527D5252527DFD0452 %A8FD19FFA87D5252527D5252527D5252527D7D527D527D527D527D527D52 %7D527D527D527D527D527DFD0CFF7D7D527D527D527D527D527D527D527D %527D527D527D527D527D52A8FD0CFF7D7D527D527D527D527D527D52A8FD %1AFF7D59527D527D527D527D527D52525352525253525252535252525352 %525253FD0552FD0BFFA85252535252525352525253525252535252525352 %525253FD04527DFD0CFF7D5253525252535252525352527DFD1AFFA85253 %525252535252525352527D527D527D527D527D527D527D527D527D527D52 %7D527DFD0CFF527D527D527D527D527D527D527D527D527D527D527D527D %527D52A8FD0CFF7D7D527D527D527D527D527D52A8FD1AFFA87D527D527D %527D527D527D52527D5252527D5252527D5252527D5252527D5252525352 %FD0BFFA852527D5252527D5252527D5252527D5252527D5252527DFD0452 %7DFD0CFF7D527D5252527D5252527D5252A1FD1AFFA8527D5252527D5252 %527D52537D527D527D527D527D527D527D527D527D527D527D527DFD0CFF %7D53527D527D527D527D527D527D527D527D527D527D527D527D52A8FD0C %FF7D53527D527D527D527D527D52A8FD1AFF7D52527D527D527D527D527D %7D5252525352525253525252535252525352525253525252FD0CFFA85252 %5253525252535252525352525253525252535252525352527DFD0CFF7D52 %52525352525253FD0452A8FD19FFA87D52525253525252535252527D7D52 %7D527D527D527D527D527D527D527D527D527D527DA8FD0CFF7D527D527D %527D527D527D527D527D527D527D527D527D527D52A8FD0CFF7D7D527D52 %7D527D527D527D52A8FD19FFA8527D527D527D527D527D527DA85252527D %5252527D5252527D5252527D5252527D5252527DFD0DFFA8527D527D527D %527D527D527D527D527D527D527D527D52527DFD0CFF7D5252527D525252 %7DFD04527DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA87D %527D5252527D5252527D525252FF7D527D527D527D527D527D527D527D52 %7D527D527D527D52FD33FF7D7D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527DFF52535252525352525253525252535252525352525253525252FD %32FF7D52535252525352525253FD1B525352525253525252535252527DA8 %FF7D527D527D527D527D527D527D527D527D527D527D527D527D77CAFD30 %FF7D7D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D525352A1FFFFFF527D5252527D %5252527D5252527D5252527D5252527D52525253527D7DFD2EFF7D527D52 %52527D5252527D5252527D5252527D5252527D5252527D5252527D525252 %7D5252527D5252527D5252527D7DA8FD04FF7D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D5252527DA8FD2BFF7D53527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D7DA8FD07FF525252535252525352525253525252535252 %5253525252535252527D7DFFA8FD2CFF7D52525253525252535252525352 %525253525252535252525352525253525252535252525352525253525252 %7D527D7DFD05FF7D527D527D527D527D527D527D527D527D527D527D527D %527D52A8FD30FF7D7D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D52A8FFFFFF %5252527D5252527D5252527D5252527D5252527D5252525352FD32FF7D52 %52527D5252527D5252527D5252527D5252527D5252527D5252527D525252 %7D5252527D5252527D5252527D5252527D527DA8FF7D527D527D527D527D %527D527D527D527D527D527D527D52FD33FF7D7D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527DFF52535252525352525253525252535252525352 %525253527DFD10FFA8FFCAFFA8FFCAFFA8FFCAFFA8FFCAFFA8FFCAFFA8FD %0EFF7D525352525253525252535252527D5252527D5252527D5252527D52 %52527D5252527DFD07525352525253FD0552CA7D527D527D527D527D527D %527D527D527D527D527D5259A8FD0DFFA87D527D527D527D527D527D527D %527D527D527D527D527D52A8FD0CFF7D7D527D527D527D527D527D52A8FF %FFA8FFCAFFA8FFCAFFA8FFCAFFA8FFCAFFA8FFCAFFA8A87D7D527D527D52 %7D527D527D52537D527D5252527D5252527D5252527D5252527D5252527D %52A8FD0CFF7DFD04525952525259525252595252525952525259FD04527D %FD0CFF7D527D5252527D5252527D5252A8FD19FF5252527D5252527D5252 %527D527D7D527D527D527D527D527D527D527D527D527D527D527DA8FD0C %FF7D527D527D527D527D527D527D527D527D527D527D527D527D52A8FD0C %FF7D53527D527D527D527D527D52A8FD19FFA8527D527D527D527D527D52 %7D7D5252525352525253525252535252525352525253525252FD0DFF5252 %5253525252535252525352525253525252535252525352527DFD0CFF7D52 %52525352525253FD0452A8FD19FFA8FD045253525252535252527D7D527D %527D527D527D527D527D527D527D527D527D527DCAFD0BFFA87D527D527D %527D527D527D527D527D527D527D527D527D527D52A8FD0CFF7D7D527D52 %7D527D527D527D52A8FD1AFF527D527D527D527D527D527D7D5252527D52 %52527D5252527D5252527D5252527D525252FD0DFF5252527D5252527D52 %52527D5252527D5252527D5252527D52527DFD0CFF7D5252527D5252527D %FD0452A8FD19FFA8595252527D5252527D5252527D7D527D527D527D527D %527D527D527D527D527D527D527DA8FD0BFFA87D527D527D527D527D527D %527D527D527D527D527D527D527D52A8FD0CFF7D7D527D527D527D527D52 %7D52A8FD19FFCA527D527D527D527D527D52537D52535252525352525253 %5252525352525253FD0552FD0DFFFD055253525252535252525352525253 %52525253FD04527DFD0CFF7D5253525252535252525352527DFD19FFA852 %52535252525352525253527D7D527D527D527D527D527D527D527D527D52 %7D527D527DA8FD0BFFA87D527D527D527D527D527D527D527D527D527D52 %7D527D527D52A8FD0CFF7D7D527D527D527D527D527D52A8FD1AFF527D52 %7D527D527D527D527D7D527D5252527D5252527D5252527D5252527D5252 %527D52FD0DFF527D5252527D5252527D5252527D5252527D5252527DFD04 %527DFD0CFF7D5259525252595252525952527DFD19FFA852525952525259 %52525259527D7D527D527D527D527D527D527D527D527D527D527D527D7D %7D777D7D7D777D7D7D777D7D7D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D7D7D777D7D7D777D7D7D777D7DFFA8FFA8CAA8FFA8 %CAA8FFA8FD1BFFA8CAA8FFA8CAA8FFA8CAA8FFA852525253525252535252 %52535252525352525253FD13525352525253525252535252525352525253 %52525253FD0E522EA8FD34FF7D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527DA8FD34 %FF5252527D5252527D5252527D5252527D5252527D5252527D5252527D52 %52527D5252527D5252527D5252527D5252527D5252527D5252527D525252 %7D5252527D5252527D5252527D525252A8FD34FF7D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D52527DFD34FF525352525253525252535252525352525253525252 %535252525352525253525252535252525352525253525252535252525352 %525253525252535252525352525253525252535252525352A8FD34FF7D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D52537DFD34FF527D5252527D5252527D525252 %7D5252527D5252527D5252527D5252527D5252527D5252527D5252527D52 %52527D5252527D5252527D5252527D5252527D5252527D5252527D525252 %7D52A8FD34FF7D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D5253A1FD34FF5252525352 %525253525252535252525352525253525252535252525352525253525252 %535252525352525253525252535252525352525253525252535252525352 %52525352525253525252A8FD34FF7D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527DA8 %FD34FF5252527D5252527D5252527D5252527D5252527D5252527D525252 %7D5252527D5252527D5252527D5252527D5252527D5252527D5252527D52 %52527D5252527D5252527D5252527D525252A8FD34FF7D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D52527DFD34FF52535252525352525253525252535252525352 %525253525252535252525352525253525252535252525352525253525252 %5352525253525252535252525352525253525252535252525352A8FD34FF %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D52537DFD34FF527D5252527D5252527D52 %52527D5252527D5252527D5252527D5252527D5252527D5252527D525252 %7D5252527D5252527D5252527D5252527D5252527D5252527D5252527D52 %52527D52A8FD34FF52525352525253525252535252525352525253525252 %535252525352525253525252535252525352525253525252535252525352 %52525352525253525252535252525352525253FD04527DFD34FF7DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA8FD33FFFF %%EndData endstream endobj 21 0 obj <>stream +HWnI}CA w껪w~%0DCvZEv}}}=C3 +#DQn8u۔/fӦWòͲî+1qW5\e43W58ytw.h9-?ۦjo5 듧ϰ ^)qҨtލBa/R6i+K` +U4^lߚZ=jgvQiCrA[ww{f@IHDۆBb1[d\/kȽO3]9ԣ=ˮ'Oh_7лyv ܵН} 6z]Mwt?:v狪?.NظTۊ2э ?Xw/z`q"8.np\U7+B)657zUZVcrT_Xm<=~4Ir_S;1l62,gA#{,NL.QnL~ӧԐS:.vt1*V7Ӷ;I . +I$ь͈HGeUkŴo:.E]61jLq^֍cm:2No{XJ|Q?HO Bu>Sݮi+65]1xTٜHU(vQɯ2On8v]'ƴFR=ߺD{}^uO.9ܮԹ/ߤ8Z%f 2}]Gufkdٌ^:>ُ;mnGtPS5lUz>ŭ?Ԟq>2v^ue&V*A#3)Ţ(Iս(ͮ0{m}V-wWc>><γf|>,=k8)a\>gs>Ggoq9%~D#_7~{_Dl{f٘_"7Jk Cm6&#Bҩp^6y}bp &nApI֣h9{%m%aӧWNyu4Iُ&ڣޣ?'<^m[^~6.(`c9Ud.d./Vj^#U8ƷBF&!m*Qr~:0< QctS0A),U*\pH:!tWvp8V*PHMUΐ=ʥ )i5aS* 8S+PRH9$DHp6i e5` ?+gXPPL֞4\{-ԊHHIpD@Gb [=vΊXa/GY!UP `Z3tHHD<;YVS F,tœFX䭊:X@"/G$B9^Q1=:H!5/XB L̠0-f腑6jpcuΓ|3J`{X$=VEx dteQSWQhN2.a+THM.@+>B mV +|4*k=K +. DUA#n~ `&RF4hjj #ߴA{Đ<bHe| `!ɂ;:X aOK[>(.Xj%{I&BԂf Kͽ`YcxJ#&R%yk3Q(HH(3< + a[ +ґREP8I̡Nz4H +8Z +|g7*ݧaDkLι8& w!HQEк.I ( +\E K@ڟwFHxy&0"93{=T/`]M# nԄCB.iD3fE= 7T%F'9D0* 0<ޢ )d!eUuEO0}cbڨ!:`·} b8{9{V`&iM6#ig.\<*UNxlJ[V +ba[}`-Ib&L1*T")֏:,nj6Ƿd0@02ɼW#H ¬(a-x{LO-ȲD`m<}=po s)4E1$o=(T4:-@q)[i@~iAVQ\yI8t +r /,3=J/m VK0`;& +.F=Gm"#a`wq(j۷)@zX[-k9Tc,8%Y8QX.VʹQEiO0\&dm Iy^L`l098_Iꭅ4D{=""R;c^~܊DzfÓ |0ѓ5U Ubc(SJJR1W2# +Sj) 4[u`2l2Fu[E+3dxU{MȪ4m9!hVOeV|MO6d U1 R2 K efkIgf' +աQu(/9O'řt'6,*`FpvIIe'pqz{sf9ޫm7ێ{j"q%.}T ,s#w##R 08j`=t{RAR 4jNUm4 W~xet@ U$´pc n ^DEQQːaL 0ec!R!tb6:Jw/GKI #yFaS\R1JFl'l")R|aQÒY;1?sεy6`6 7Vuk1U#y tkOE&AI_ix|ɏWz'7Ow7WϏ~;wO_KO|f~{|Ӝ/^=~xʝ\|c[_jͩ>;?'?~Lȕjm+ʣWLQZ{wY8H]5?=bO(ȒCZЦ\K s~O NBFKejT_\`tӥ]G.a:BT S`G,𷞝q$ houhM./{W8]C6x[|P%9!ַ&\yWbECBi5SSb6 DZk%sxC"c6V)#ƭs'Z)S"LԖե\ g4X8u7{[B &k{wlBt{Ktp2!d~UwY]WS?&8xRxB]޾£.}Tɹ,\nZ[>T#H %:$T Alҋ|W4EkXcCzyhd.1o~؞ȴtnbR'SWP“oUM+&+ ʂGXyTSRHc N av ,\Ç33_9 ]K5o:-son_]BAITUN + i#mčr D͚?SUI<^ojUm# -E҉ >gcN5g^K}&os,dFdW!W6§EdZkctL0MS2&GZtW+b^ {v5۽w鸾)m!?KgR׎bMl#Vz|$<qd,V:%@WdUq1np`P/ZsUZ ؃+-GR;_Vx0vKJϥCCKFkj{I$/^xavT?"G').GDh>}\c$ +j35rk`ΖaH,9]|QqI>};9^ 't2/6]lHh,P0M 2H6nr'Hծ ]tt? Dx-Exƃe4>}HW[+v^6R 1P@.dVka҄"oB,b.vW&%kgJ:KaLĥ"Nyp'F/]euڮR aURznZ06oeB/^=+y!)KJr*aS1jO~nR~V ?5uP-"T uN9lgo-H#\qNtNMd$)DBPdL+ 2RucD(.x4|'< +87Z.7:HOǃpw»;̶\*- #:Nm A:mEV0dULw ֫:OL|ic_TabkHcͶz}7Îjf,5Xl) ճWgW3*Q>ikΥ(9֡]n"@97c˕b+:Q+?yЬsm9mr=ip:e@~i5t`'Y];e454zvv/8a׍J8Vp3[Cj ?.lTlW=å e0.k&ڀ9aywϐ4:@P7ۚ&,YНjdю}5}d+z[ܦ)eRRn2*eAVn/7Ň䈳"~-\l R 5 w*odkj+ 13gki&&e;3nZ2 >[he)a 6+$iՃz?N?;>E= u!ſ9.fbMmw8BN%jbOn"1ʫtMF*S3z9#bsB|Zh,R]mFT*_I)cb] E[ 3Ҽ)g)jx:UȽ5@ŗ@O8]"l̖8 7)SjtLGk||`9I`7bB>nX@oM J<-/}QVʤTrp{SzX>)jRsF>Q+vj+%4eFא}zLb2+2j +{kjY(wi7NaQUKPL4Ke/9B_B~3Dc߭*l᫐ÖQy"U[}L`)ce݅ ZDYHf"r /-,s^rǥb~>PeE,PUU(6Owg5'H'y %7дknB2vhؒXv0&w6-j'WyK{ j|!)Zjz5(KCZPb!I6ڊؔp!A-I@:? +傱8v_< +\KDZ)>YHЪpR1/Fz {'F,H2~ɧ(VE1 y4 S2`VpIY8H,ᚗ^=etud:#3o~h@RUK8YX܈lf wM@ҨBO\+Ũ0v()t.`53nYv0kL^4^R{U%*$G6}%&0w9vw̏s'*!^?S(fHwTP t ۉ)ZTSm~r4hw"D('3pwQRBXamplZHԔ1*(rƤNT3#ۧ~G `P&!ꖗsmIhtYP;Vw+]lOy#*v-x'xG&&\]+KFBC"1zRoR m%;Bv}` +0YB[jJPj>H[u &)1SYgaM"g87v +Jk +x$td"pRъyVp yX5Bh|NL^Ț=bIM}[a'BT#kQ>c]bmt˃\w' <36!g1,^ai-@iwc%z\CVbr96yM2 ++O8TMcȕxք?}bc\F-Rk}nlJjgZ~+\!c[\!AclL\o>Z[9}5~ [`.wiĴFieن;$eZIJovmP5a9(q.|jM V *{a)UD4iI2Jri?#` 5t?F\`{zvU안Fco!2'."$ 'k9a1T;uZP~y{]q$I=A-EF#lRb"EZ`#32|% +l^V;LağWai5@4Ip}آgWn}WRڞxʦد L:r.K"aS(!EWCKM2GbCL ֆT +`vRpbHC-/2 im˂r֑ +;K]>jIVH ߟ#:Mй<^+RǝF7jtqoOol$bjlZ%Pc^|Vr>Ș 5" dGንчj&JspFK~cFꥣ`S(X>z_I `e#CF_Rɨi- WU@B}Zg~ͫ } DOՐ*Y^Ezm&+OUjE5탖:/_d"KkWʄ(.?D룎e,}T`eNB)H +^+h:,%H!oPaS'U:$hG9Rϥiεx[Nk&{5.k)1KDBj@581ʘH 1u(pt +܅,V/$ߟCjYA$4.Ṕ@5T g 6 +q8P} %hK+Q ң>oMWxހӁOo`'A[hبj 14To\[n #;( a=nsBoRgOB- u'l ^(E#r4YCŎHOYk&WQU^Gk/[-/a<62 o?Wcr#kҦ +Vlޗ##:c1lhg6l`{qMsJgnR Q{ymYn^,4WU*8L$|c ][5oHfztNY j" ^)rrj>4LO@/[G{$vu `etuLF#eFR,4?$asGcգ-X8):=Gl8..hj3DfAy=9GFdC*)B +\{b1TJ +h +=oI /9\lrmWCe~ +%i)*$Ze73Ӽ]|G˲aXOy|5 +(>J$̀,w-ӟv*ħ;bZǝ1d %V@9+;0P틘i&S*{x8 +I{?7 VJgd+dN1"d+rojSXte$Z} *%U?UWQ8/M^q5h2D/ڶ4wTrw9n0c7ITkn,g72C:0–l0uVX|F_%+ra71.ol4gy1,J,Q7AͫJ]0Y ZD4IV +&mqYXDvj7hK&Oٴ4УP oK4!e5Yl-%Rl*SXx>i쯵 832*)R[*^|õSHcГ!U )e\lC(e!WdoU_ 5 bm9<QˣwҔqЌqYvU04PL)ik[OvI6‘#]u,}lWBRP2EDdoq#%ڣū΅CUCTM Og1ƸQ_";zyOdvM]ғLȭbP+"Y~zRVkeVP?g11XWu`/Ezs,֌GJbK\8Ay]Pq;$]?툹VmUt$!ҭ[^T)B끹ZzFS}Llt&f 64ƝEPmi`w +|eWa$Pd@ 2z{) o[z㿬rNm&VCUNi6Ɏc-`*(k]hv?Xa4:Jcy4136iІv7ԯa yhOH\6NBluՁ^\(W%yk߮B}7]=Bkv[2`yu/8p^ AI/ɓM@FX`!&A(h>*_Ktgp:.Xx +y@[Iʬ^35{PѣTJEg:!D2ez5A01be6*J@xn,=,"OipQ +M,i2 5PԚ2-0F#@V&x(:. =m Pd#8 m;"L&T-п=p'ʉ=kޞ@ԭж![10͛H 5Oi.8_Hq8=vzط,[MꞛoZmj˛p=v7\-rL1LRiΠ1)7n̨cӍ3c[䨾4eQ[nhv[-4\RFZh)Xr-x/MQg##kg^]ުOXtl?b?hRۈ +•s9hRazx>MSjÞf +@W())S]Ϡ$5kق$\js TC>92 +,>k!eF=++)F9sǻ;E|՛s'W|}>>E"^}w?[ȿ8yνSg֟s +1"?O{AOqYEc .~FOX>y?ϨgvfǕVPjgX`|\id:5JJ^SǕfVg ԢJD3Nz\c$+kPFh +_w_kxK1wb(8Dy7*|v?[ߜOӗ"=POyy2/|#3F\#Cw@%Q+=q`AY0j Hf\d]E| zwjmb$e=zg qN^CL"B(`,aļ 2g'UCc'frW Ժ >3 E EN\UУR *[%AM*4v4e1= ԲSJqڽrHźlP"cD`WG H^ly;j]GFA] jsVFCv;kĢA 20~(U|T\a& fV-$!m}GfJэF/FgHfGl݊9+Q % O(,I[Oq*1WMTpCzg͡۝I#*=`b6տˉˋjsj,\(d;4嫡xMȲs*rY#XOJ>h$iR% AboGDOJgU +cKoM]k\R-pKi5NL.A.-oSAF7guUմdm7DhrPz1DVmv/FztV vޮHr*F9 j/Pp kѐ@hc>%|<|{S^$Sbc?\Į̷_ Ha(R6yd]'8A{",8b%\<8wqPр"0`3[y!1%2RW-Vܦ8d! (.vؔ,,USl #zW94 +VP lZ=CA#pwȟ]XUܜ^Qz7XüMنIrqNFNajm NbVIeHA. &8 J5.jD0kY=k;.I^1]4QJ֘AJ2HEiV/.H-͕]rR9l{u2!}E2|(&T?ve2n[UM f,#;S'ʱwJђ]tpDd15c&ؼN4Tw):G-u qBc*/(ӱdv [)&&\؍U8J-3yT: gn죾E$YW"fL虑3r'eJ$?meW0d$ރ 'x43.anߤ40KMl~qє~'ξ{.DzLCE0"pڗh,4ޥ- +$eNv|=xr +u9z=<0Kx#X“GJW7ҽ+v_雹/bZi0֯ptPnw~Y:p(;j~o'Kn;xJ=B=KK +#΍R/:p6/P0\ At[Eh52z ~z\ݞV韐l^;RA%"ND3f̊-WヒS aq1OAz0ףV(靣0PqzHć>pq-"dZs ݿ +rIFYJ:v$ "6_7P>^ÍF뎧3?T0f]ǝN%͎a?W]OkֶhJwTjⅧ=6}6z4m濽msoҷ&3/E #F"U1WLh|[,28C@wmse]WcW)}k.eԖiku%}DاZ{槃qсۧz@tŃ&eEPʐ}רJ62wYsUn2͌-|B},dŞ{.f &`V[9~Un!4@g.װ[Kh/mlz#v1QQD|)?2h 2ZY MDR;|M~vR*[2Ďv/A2,M!!LM Ȉ"L"ǖ 7ݺLЪ+rI[VAnP;Jg\aۢMݹ>޲Q~w:n+nnԞY Շ! e℘ܻ i!T}W\En[d +Bͽ%$ ۭTO S/_!5n uphҌ7(5~ͺfI=txuXao.g +VT"g:\1jCP9?gMGzJiB-RWu6C+UUư8+ڽki`auMHh/Evݱ6?%LDvgb`8J:.Bg_^Od-b UpYԠ#[ӥCBwSh}@끊y1nv +3Q߶J% --+ {Mڇ+ڳ(,}-Qu#QIUi-vs,zL'D#uW Z Ǘ2A-5" GQjN͆RèvB4BtwYo#b2:|tb~kłm)Q"Z\⹪.SO2P O {m*V1JD+>!#; +ǑSXcwI)ה*v#ljJ=nArqs\qhUD˱Dp'Imx=>CB|q=}-C(]qp{CRd)CbE:ysbzNFxjtHܛk1ز17cKNppGt 1PS/oi ^.>H?٥|ˏ?y?}hso_U^nԓJsG#4K_tm>ʨɋJ%پ>= H^9DϡRg1M } ڦVm]~ۈR&CM O+MN>ZMCTNXt<5ڕ|dU:T3D'[Ź$8Cϔ#=ZBvB{PlZ)d \WVɽ|X*W9fHT?T\b-6Sd *Ckd5(ow*xɨq5YtȞܡ5<"KH5+AD#̙TeL:0/6nBX/k!>pX dâ4_n6+]]-^Ӣa\asWu.:_( E]Y<۬CٔLVK(@yL_yea5ea#g1>n`1C3˵>5`$C^0Dҁal,wd̝?~>k8׵!;yd-zYOezQ8%\My +6X+y2FaH"QѲxRqbG Y==>@a<>9(YMw#QqЊF2ۙ;l{ ķ>Q~OVyuy;tW8,i =H~R#l?O8Ōǟ߿>=՗o]?^C'3i!_^w#|x $[1뱆X+TGH-j=ViS/Rg%j7bP쭴:H߲sr;5udi2!akkH{G6H3@L{*doPjj0PIBЦG ̠f3Iz7@a8fBY)A)as]j15XFdFJ>[6HkkV i\-()PԷRjM +)C yؖ `hHfx;RM+)67Zith*SzȢ$يBy3}5Ȑ^9EP3[tQ+:vf}VS(ĝ@FLY`!h3s;t˹Sgǹ) -b?_ endstream endobj 22 0 obj <>stream +Hيa_Л"wxUxDF~"r(7sqC*ϐF~|zS~á"EQnBb RX w#T64-]ǹYء 0H826k%J^jqg!8V҂87dTFzݐNT6KjGN1f;7E_.%0 +7^4d0TiFڐ<2j5z+(*ٖ:>nF١u/2.cTrDvD~f@Q v `amKr)(]M5& m[o'nx)˳S~PxOb_ [c%+V{EKYiGnvk33vv7~ ~hދ=$rQK+nײho_^CoI|x|R'l}?W?~_=%&bbC2q}W lVAt[\+ elǾw&JCEIw2w&)Ծ0&pEQQkLl-%۬3mekj,jҾk+kHt}VKPkSҪ+S g&Cp{jͯ[Um)e2vFݦ L"h)hhUV=/4V8wyyܪDCG@An%R3L&7|ئؖ X6CKY6M1l )fݠ> i2p /}Ԩ,'kI[N#Zi@"w-hR"}W +Bs$eR |f'_!JІPCmjceKջ`7eD@\B?])UC&4}9Dzr7F|}IFeC=wz@)GE?k]%.)kuR5&\`4r +D/;Fk^{ւG} Q[.^QV*;Qy 8acU4>jFi(=$Q`ej5 5㠲!9Ђ6pLv,S#l"CgS8۸DٓG;tmͪ4W*} +[TYޏ Lޤ* ֪PJB +MW4o'-'Hg0 -Hsw}*VOpO[dFu1-f#ٔðwU[j-NɤCbB*Ɠn9hu DTMRE z O(ei)ٝs.v\_T ZcCX}k2P)g?E̺m{C jyv]Uz)2_y's:B5" LH-*1h )+l*ȕ(__==-Zq!t-ikiK@:VM޿ɇ~ ĝ˓ߋQ8RQgJhw5,PUi648+|n aWّ +g#UwgcDtf!uYF'm)ٳh!c1GYxH[D8U[|+ḍ "YEj[xxd@R"1ӝ6mm;4aKr!O@8[F4Y99sD0R`TQUNǕ +x؆v lhrf%Rqd"+EL#lzG(#B}A -YRKr, Qr $fEmIq19om]E|+7O-8ν8lg>2AP ܑ[e|ƌP+ p?!mElQa9Uʣ}6t `Ia-\ +_C8_A?eydt z=B!Dj1#vaPlTӵu4?4ā@eJBG Ev˭͖y %ܥ1~=\2VnWzaWwݚ?V%>W?~_%<:MZtx|_`f,wr?5SuD8UE t Z]@ +aI Svp(u_in'jݮ){6DL /40);hc&SbyǰPƢ=PgbRe;ZAN; f-)n6 ?r;33%B!O K'Y˔2R]&#?osȬ/"O> 6ʬh' Ag2 =ˠҌc1,GDM8 +V"K{Ȼ|a30Y[Z?B\|y&|Bu0Jug!#wp\1҄Zf'.TriB$ZmGQ=PvwI@4ݓ8#-.-RcWn~y(YmD()`c4'ϒwNuUWuf&. t:hĮyh-,F7 M% T)#mӘ Gk&ycU᳨@Ѭa PHF(J1z*?-GyCCA +.o^ ##h.Zd k`<zK&m{ZboAbA nVЪ1RK Sh1i%YvHh u[ͮm)3p= _ 95HFcOH@`hi͋خO]jϢu)-ʒEj&I.;.c'%hA(tsM֩]{SM#Z ,Wԝ@f[\!JlE:;u3\!0HJdE~F<LdRK|Q?z~sH%N6ml*tiAUHѯp"Sэq@ + *1k]AT:VG e6-6n%9 iZ\G):э4hP[r^H+8ޮ:3ZZ@~k{}Dw$^*WY%mN_Locw@9(w[1%ᾰF$%#ô9 N_`n3!M9X)vTTCg "9&munVo3M` Pk'59@&aǷ8|43vϱŝ\]n׻A݃}z~stqsrūϛᴌHl4{jwGFt}umͳw{9<8`MjÛ z~7Ha>;ݼMݽ׽\~7/vzί/ζ{C{nq?=|hE@/O tN V_ByBhdD_HN,ʔu9;@C$ǓEVf$qv؜vwӳ f=vL rz^ 2"#aDhe^\ԜNtI*M G!R+i,.&|r[ۼ] l򎎾BIEqAÊv3~|_Brv˛\4) .vIte'cZ)Jd-uold/)F)>&8lGpJēzRs̘X׋ʩ{=|G a>h)GR]GBAji-L5iXN?.˛D,g,gV)G*.l!Z4ɲAZ4i_dILYVj1RvuXsp8ox `)i+4ȢEɮ{%׻p^`nø}#uw^~໭w^~RܲYD_v˓acϿϧ뉸zTZCF*~DRHLh4L!QQPF6x7ۮτՂ(*B9fJ PZckk$Lהwf cS((cl賂oAS[G%hk({XU5q2>xmǃAXo5,.sq<~ W\1I `cIgb?px7xo8".'LJpod߇C|-NϹ6ߡb,o-l4JnM!-F +u~V +mHus-jme@/U`ס +:' aMfHiMƵ0& +ǐAj)BiU$|{Z]WUm,S3n}L]Qs0pIՊ?_0OGE:mhĔVZ1# 4W<>9ۜOM/6f߬5?ژHlz,%_RADabZ E=UpjLhZzl#KaъD OcY<2 += 7ڡѰ!$sCdMiu${Cp.<"b1 wtiyUt&)9m:)RJ +/r&WC%pI{=뻼~P]Wv^$f"_tS*vD7b6AV TБ#Z߼O?Ȭ1SȖUoSV bpym}7V yi95,9Rʃ4 PrM9́XG 囩^90ꑽZ9mJ'%Rc%էoC ET~!ڼ6V)dCL2u!|:v*eYw.-]5'Mb^>S ׀&d!졒 EI 3!u+,ʮ@;7Ohv)X@|I31sT+d, vd)Ag.GKLa&ՍlmR{EgQ,~ab)W .T7$OJE8mb"4M.6)&{v|^߿Z>f*J"SC-;F#2NT+ݨ޳k=͒:|x{(B\jCOO ;I?bI &߯y(jĮp)X*0JR6mJaS 5ђd#TH9g~ + .E-/=^gjf[mjSm{j2ϡR&@84%n H*w|ByZ~5!/X +]h TF's1ٷeg(nڀx漓6֭x!,Gf[=%m4Ua| X$h}KS-(:t8(Kױ=y!-Da[6:8j#BѰT_?MFFuYG}r1b5E*5͝GbVPQ=+)кƠZmkY\fʰB^OExRعs_Ű`OUjCVQ "ty M~1PV9Lg +FKN[B-JۯuS`[XR(ZV 24aBYmds;Z^LwSExߤUɺ<~WZ +Ҹݒ6- Y>zKr,OGLG_(Oؗl }lWfC#&dL%7ZWݣpJX~ZP !WD%+ cٶu\uDO\R+zz'PMC-&R% R/R1̯X|^S>q|)eWªN8זa˫+ӕ ݲM9BOڑXND] :2o՚,*Ï{>K̝Nm^H8k/ +J*Ii=V2$}.&|cQ,TqG@dTF +擶׫4xdtL.:d3o58̗!뺜C[FW9U0n7hr$BmH(;E +\-743jpRyg]#<6,N=F x3ҢVjĉ=]Z{ےjF;uKdž{8EZ 6Ny؞sf8NM]t?nߏsabD/E11IVjq| tq(  K~@z-|9}Ny"q\QRftu$>7t1JYS<e.D"ͨ +eNm`!AHpK)5%Ȑf ȾdT] *0ANkGG+2+WآɂPYb*T~\@x" 3z  9rMPЂSe +h]A, ^^XW GW+#+Gf*Î $Cp4KNLiY_ȸTJ B-085)J!ICHo`G9 ,G#tQޯ4F+Q=h ]t!jؕHTh"ļH"DR!c ;sE 3P$ ?_mB3p@08 `E\cAFi$e"Pdp)80%2RW4U慷QV:Q]3R"+".28dwfNy8zL Qs! K{I8fDL|dDa@rGZt~YOHJEYt&1$&y:~\s>gdW(Ћ4֣2s*(tz (IK2BF\ΘP%"yc"L3m(U +A.G@34[;<@! hdbE;BUXJPn`L@l8MXHxc̈1_ꠖ_>H<|I@"$h 'c(01\{!*݆R@]+ " f6(`V?>_>'{U3Mu"u`N!?N F@i8f<0 }2B` 1wHLG!y?(PƇ#O͓4nK$ 8zE;PoO:=qQNHS;R/iH"Y"!Lp"gT LY$;!Бn1VY(@*-= x$4Kք'ጯ-B$ 0䔝,Q27 @)Ly /: +E[GCsK$bX{lN2.a Ov_#(!eB559al`+|hșD:7ZO +D"2? 'hlb=!13eYVt2C[i*w8V7[BݝLyJUS@|SX=h}#L>_M`D( 0FdZJQ[ēh<09.Dr"1!|'{ !3 ’d;Wwll8FS`b<Pba)83 D%" M4 J*Y $2\3D!'ޑw#eяeYM- '.z7h=,5Ewpm)k/~鬙U77gEmyi~Ī7yo券|z8g}Um֓غ@NX'ZDgzPWj14_GbQ]y6pVMw_-7OY.>OP޷kϿ\fVk%?]5r-.Um={Va~[uw^,3,#nVVq͚͖yV_~zV_ۺ%GLͳSsٯVu)/Z-FSwZS#{ø'\8_ԳjΏl#='&O`, &_c3_Ú9fL'橙8ˬ?`FO읜\ /㆗m{%TTSnlxNYЛy}\:of&^կySw 18mx~-d_ReB0.rRT#5DA]y֥e`ˉBսw{EBSgw>되=.%TD\֞ϩl  +ɼ7.|:,bBmFAWZgJ&4<$\cә61Am +tV_;{9ɳL/YSguj+Hj^Y-_|U<Ckm+N䲳"[H&\L —"_<&ഢjjY&4K'OּOH^G)o}*If(g!zMňG0k&QF2z9uj$ yؿQz@v1c4Kf@ΜI3&މb}3y$ْ#_}y + C+$n]NHX ^%8O `mv}ӿ7Wرy2>^ɎW+|a(w/c_Hvε?X*Wwl]}x0cXjK1qG,O.5޶-qJQJG)RRR̆J1lb`s]~^B`=SVѦm}n||a} p(?Js26js<4#ϓiDt:NbCG'CzY$vKovn`W՞wwIo}y +ԒBvQK K֔Z2|')HOK G;2f Y) s]tQ/)\07~_/%bă:3em=N4IuFű4K׬$]k-v#^xUCRIKN/ N6ngYJ!c?b 4nɱdV QkB kB(O:{ t};-ʁU91=-ݭk+OۋTU,̨ws=?yޯ[_l~Nn{EQ2^>9a)ďԇA~E|gMV 麘QhBf$HF/GI:KoJ)a yؿQvbYiV+GS>q(9f yf0ìaOS)CTѦމb}3yg}gOUBPLH@:xn35 +\ uCyJAiWv]T%w uMӤbr(&nc M_Uɬ-_QGkb- (^$la%ȣ,8GkOqT\['G$*UJ+R5$l/Bo;ɸ`6ry~x!n.(~zF0}d9O䑵+"HB7FYAلQma.&A=A KZ= Laz$<wy & "ͱ>k[0r4V_E\X߂0 n(!(oDY11CM{\@1+K^tgKW HÞe n [Ac磌#bZ!˘E9 şy[ͪYn@v;s ŏ³Ujeb K8Ա%D \]͜Ib QaԻX·P:EWUo.OkV iHȗRcMK۸.Sߒ+dr q |8lk`]V-\V.؍ Q4-{!6d]-u[@W 8 +N G%kl{pu0M]AhN+v| +ė"s#nغس|gPxB8AiɄ>hbBf\R!~>H~Dq S͓"߶:fT5V|n:TcaԷp=ۄ|G},ڜ07L*k>2b964 lY1ۆ"mR MLod!8:8,LY\ 80 n,n08gMf0xo6a&Lބsצ`fQ\&ln. 3)iK{2u)AdPʛMI+I}kɮ⹞~:UghjY2TT׵ޖq,$;)E;lK~HRP/ +=J<8S`rD +R{O"tB*hP.]\=]X'k-GT1u}|l$riJ8Wx3O=ф9Y< 1c#pd?=3С2$ߐ}MzAvgFn>addf:MjQ[QcKwM{cފ!J(BO+<=/17?U6EV;qOJ%,ZiBc{Ni^qXkU3uN[hgcx$V g;qvÁAhÁAqMAVd<%ȕɓ~7 nuKw1Eƙz*,) +CX1ևbb]Z2_Q%9j iW(+T@e]Qh*.9ӻ>q?c`5nDR۫`OkcD ۖ\6%&t?Tu[&zȪ*x=!Bs.DzGb&Q_OĞ ZbGu)c'OO;&Y,(oHk5NRbӴ1`Cc-Ke)Bޭ(VV3,.S1טښ{G͸jm8zI|o.]VuBB3ԇ='!]kN:/~wAՃot4W0|PH-J{nyZ-؃IiBMZZ +:T+lHĊKpIƥYT4 SKSTR4"dGTHS.TʺR{qUtфo{mL瞀T 'O= ZC_+h SŲΑw֡3&n[,(h'$3t̺uݗQ+u]i2KyJ}u1&Gv!@ʂLQ_w6(b[~KR Ů܄nke.6(= XAeH}[4p7"f|zsV!ߨ?2p:vtk/f/$鯝dÏ3FX:{_ amAK endstream endobj 23 0 obj <>stream +HԗVJwH wZnxP[dhȤ3};;W$!guuu?ڥ7{}oSEɗih +C,MUX?lO㋇Tψ*h!,.gsP5(W{GM#cf6)E+ԢH[{`3Vc c+;X3U L-UgĠnCߧǟVa9G/)ɘa-V_rn7{0V!4HU[LPa*GOB92tBh'7 +n6ܐ`B/c2\Ot$)钕rb^b[^ +"cݴ6ɯh V麗)*^Z*rjNW˗2LΗzO^PՎgWp cq9__Rw !mS}k6 Hb*3Vv<-!VOA5Z Pd~|4WVxT"TBBɛ3,+LČI )͞k4g@1$pb4iV7Xu%*&3]/pe!? 0`F.g ' ZHE4jЋgLuw[良p4w -1lv`WL<_9Sl_Ј@ Bq@f\}$&"m +fދT5bO><bʜ2lGI nL)Cz޵UU12CkL'<גӯB M 0$|ᙝzruL>yv1J1+k-m#tUz oN6#i,* ,ATEOfO3a̍j&Űp] #Hyp2nAk+>2ן5DݮS ͚/%*#DYD@21`3i{j* 'F S#S#jt˳L#E)hx3@k FMi1ڀcS6 a>y[ݼJ[Ġ>gFuR-K!d W{{YP~9fy$ci1 A§6qڣf@y{ D"_ׄd sAHEjqe3<cV 4{1E9 +H3̦G|=ԇBhRGh+o G῾>.73C ]#mbd" n^lsށ*PCKW)qKGQY̻e M%!:@mY/Pa+wYyT`>O=MiM:VPmU>U6OLJgY=*%f.:I:ըg5i5߅FQ뿡.t[FmPd2;OtU1<޵J_wfoȧʦ픶[F3Νmcmc;s~5OݻFefN:atx#a9ŖP?Wǭ)oOůw|HFε-Tf=wzrMkwq9l>#H?&SґTlOKz3QNRΧnN75IBOOJhܟ7sY$Re[U?[j.MpFtZHTjWw&Rg8=PD1&zS5I: +&`񺘓J; nTq0-O4ڽQz .&|S-6,Z :4CrS|L?VvԼY'7Լb~XF"7W~NvO룿m>f +|) u?RGBs}PɏV$=AEPګs;y$>A`Q r4V@ovCnJ%Ӂ/ˁ7"YpC-~qG&\S\D=oƭS'>Z\M뢮-+5w|`iOFm>dq +I[b. ? +F4Nv*\Wd7U ln@܇F >7n_f|6n89o4pvRoJcL^$O S 3" {f{d퉽%`N~s(A,vJ7,E1c2Cz${u%̑f/s 2#pP^',(u-ab*@w:&MCY(B{ C'-{cMNKA +̳0"8Y/wϼŒ6B֡h++s˾&-^,+BŠ $&h +ڸᄣv#_[~k* ՘}Nٗ-})R~atAQp0|5dv@ ~$"&?rnNm7&`zߗ rz{O1YbkQr|cǚ4d{3{rHб' >z9mT 7b3E! "6t.CN4+>_l$6e 5:=B xzD3d͡XF'Bb}r)%gT.q\]j͏F,lX z4h +?K@5 +r?ƆCiߘ" N =3w8~q)5-( )#Ӎ++boyyA4zϣ&#C+4T}ƒ}o0[dl"/EFܹTxBC~"fY`XI"ݪ~ǒdR7m>=* RkչEc7oFY) ؊ d:Xck^,?|٫"VVm(Ui>iOo1&gycCQ[}S><Rѻ\d3kºSv00eyTȁm\kښ &ۘg"q]5QqEm'*ʑgk`EpmVHU0ȋh MOc!sq旊xrƊ,] *"op{ +>>RQ?9c ʞ/_'`_P>APphcc vьNO) ֙܄OkZ$}xb,U'ce8y N*~ +Oyo7ؾo_g@?~`(%,o fs"ޔ\ݡ:ea(Y~CaߎjbaM̠e </c {g +3l6l~=?F'jc[Nz63kG纊֯ә[+kI`cY`LMd;je3gB˃/?l㲴bM +"$=)F|mKp֖EY]1޻Iz}!)f'2Xyb߶ }̞NVEfƃiܩE@[cV\+bTj*B1N)gHUo`Ř~D,9L^,)QU$zB+tibbd8?wG~5't]E;9si-wܱTO ,ρRv? I:&ͤAm<$&{N^L߷>h>+j3 ͯӓ}U1J6"~lXsF{|viu$]Ayauk`]8 QG +)>PC~]i );u.*hCwO'/d*\NUVZzX邜,vgYr]"?("m?]k" 'URpߋB_LD9-!gɭn^`T> +BUhAV!wram>bhH/p琚'9C}*Ō)'%SԵ^X@x2bjm,]k¿U׊[5$좑"!}NχPVݬY3kgYR,N6L(PkEV z4gٜLLK3D$~.ڼ:^.9};!\()9$Ñ\ۑ`KeԷTc+hVYz]\lI?BDl6]DfDvO칟N`S+@w_yǷ0*'(lV`c'zg.}DytsýZ!:!L|prH8|t%҈R2ĵm@*[\ك7,PT]l Z*.je(lkO&inO9q/#g/>e2vTl'Xn 'tkC؂+ZgB^vLyA]v' 5f.zE eik1f޷3l suT +{yɾ|qy?% +y1d0hv ݛ6YmCrL(FuFj~Dd%ى@%@*cr638 +ceř_] w1lc٠YF0(gZ+LQls -zD'Ȍh#[Ҧߗh ?'T*L=>dz3gu"٪ 1JהJD`֛ ԩ,2h̺ )Ǥ=EUj[Kٟ~+~){a +o7 sg0d\5m<ڝ[ӑ_iI2B9YAo#^9)I2Y][/lnn i삧T_FXv[/,1'HEGLEVD.g.f2㐓Ōּ)OeE6?v.=cMh;wn8p:k^Gqyt@/@bvcDZMU^V6h5SVG/"֑aY]V_􀝃vH_B+˫/M2זYTQ>bS!!rkGjIɾ;~ILTs!?N[oRTM;Z"D Rе)o>He)a7S[3DNwlO:Wx)'m\(4X>!=ο߽4¡~L{q7.q_&.I #.`@;sYoE:'3_~] Yd(Vׇ:тJݝ-X\i=ϲB" ca?0ԭtm-$e3n<>%l~Ta,tiX+|fF ;ޢ^3sWu(n&$=}t0SW&'*7f"nRҘ0wVI⸲/m ('`t I֨c'T}0N2`uhR4%C_BIytұcѵuЈ{M3Z+vM3_J` ]Y{:|Vɴ#ԘMdžf3 +8/;dm"~W].hDK&]Р/NgJ@XbB'YY({025MeۚC;Ew˾oATV¾ܦ'7||6FۦPk3ng3+qkFmVeofy'2h428׎dG tqA=5NuY?͏!l2AKt3N*Pc__ǍB{0´)OnƵ?n))|bug6W׏*tHCaΘC 4aߦUg=T23BۺE˽AtY@G z,N&(P@t7LJ>cM}4O5<6{d= +qf][O̓#OaaY3*=OVA~+>I~͒@l^~WwRXTh.7i'M؞*>)PDѰvIb$9 vR!V-ZjZ g]ӵuҭw[r`F86\`%BӾf k/3*/kM0 o]%b<.֦W1xy[ ٞy 3:Qsүj]9^ܜB]^獞`fWUJX;5x먔ʜ#fbQk_5u:.bm%;%uXkd#F-y k-[skm09k<)5Z`;rNicU'#r׽ό!AVQUz +Vsf7an@*-ǻrTxlpV>83/~Msӏema' l@7N VV 3s7,fJV c{·942bplB~W妃#o.B]aB +t8l:T/а!xZ@z pB t +:B!rE?jP65M6XSPT7XSovK/m#r&p]/cIԢ>Zޕ̵G^$r4qq m)\K8C$T =Ӈˌ.elf(&%.a]4|Li_KJ |\zKX89`.Wuyt;fpTݝ5r+K~}О<}&W8nXQR(!ooIf&E]/izrB|3GQ<]Y:z(! +OeJYCt3#qva7+^Dh|z**ix4+323"t_%"`}UH>`]Es۳gLT!6 X[. E${JSw&˛+Fj߮#/k{C#_]Wr5,zRsd R75 2aQ&06@>f؍=`,3&=Q;btC5?6l])QyZ6mafGG*0 [.l%OoTtP.~zh.茣zK#ӕeّF<v8RL%bOv*>,-wgD0bWi@v +܍"9ҬA񰊡)ݙ9/7S</!'x!} r*$؎%^.eU8@aP\S +9y{P/3)6̶ ԕ>牄2yYu>I-rW<{ȕ + X(+yvvJwq7(xjaav3 zb|*8*\qe|Y<3hHvESqC ^I|*V=hV%Rꋠ[4hf ͦ=-bt + 7$GWIxsݴ=3XJ9؜`1=Jc$] S%n@BnRHK'~.{PAÀf]x|z +t۰hA^ ^֪l:I7u*;a:'T>DDj9%?!/C4v'hzxfVI䒧)a`ِt@+{MzQN'a]W;M$$YljPNbfP? P`(^f{JPRbTg45hk:8+W?d9kg44) 0 uMhw hv8 Gq]㰌VdjI{|yMFKXtN.\Ɉ=~J{UzĴΛlЗ +!EgVG{~-3B,0͢`H tfQq4, Ơ!(05kF8U=cQTH,.`{^ Q}i.X5D͆ԐNfoGEZj'iwY`JAU wMT (b$ߋ+GU ZHvZ -9-$߆UCj h[+eif%-ǓO/HuM8 T^vߗkYĔI +t^| sH-g&B|r)k_/^,syRAJN + _!zW빒 +hR*V|>j=/ްl +T#)b߂Yit:9I&,8t{&RZ]Oώ߄݃z]2FoHfxߌd#nA[?#oA߶"e?+qdE+|M^~͢U,VN.ry-U+[?}ߣz^ BNxeyaM/%L ??5"h늽^Zƌbw/UzWz0bxg|ل2*p+m<"xKҵV +G○={T}va>%ŏ~I~&G(>9zvVq ?ٍHկLXՂ^7Ggd |>$t/&)Wh lG mwaoS8t/i-e^7G牖mWnwdVRpXuOL9WZ1N8˧MU`.>'E3pgW}Nq>I=#P̆rMf +wݻc龨Is7;rMD8lB7Yfi^2eqf#bÐ+Ճ09SBJf ZZ6&/͹f9@UU`$s˷SYIvϠ,V}!"X(LJ$7@"{,wi+K:{QF5hvٙJRtXp:g GFzzHwc&$mv] +rMRNSvq(B}=@h̷2`=FD`4@b}DV1(uJs-MpW>\sa|Puq"N+Ng!rm"=F 1KNA+F,_w4?F>egW"1 x,P/σt; +Ǟ{{;@} /Da6 ۝J<,Wo!;4)cik92}wt8#nka0&kMWC\PAs Ҷ+)bUS.>YR͎8٬X9t/NEufkK0c],mfҙOdp\~s +gC9^N;l~.E8%RCFtxg8oZ *wS +[^[#a `lA Q +64ʠÈSBUBS~۽$t&xdfnD.KS`ےfp&lg6p;"dX$Y6Y1ځY.ֺD3(g)4 @JhTnc2x*qVjEfv:IwS'~_@(S2aJ%my:* n6@*Ui`HX,$ MRbz1nIo)}Y;&$ 5Y^+ٻ^& A-$i'8M:S@Yhkc!5NjGM?XR`rB6e_dD6obmqUq"|D1E+? 0UȚ 1Ņ=)ҩ |Idk $%>KK&k頥,n&azY wnXrGF/'E4:(Db'V}I;?X|̴KV9JʍMo40 §q\p$=o./>Mg+8#Pbqǰ?Cx{ӋFӞIx`0իig䮘D47lE%lHUOgr&I|e3qje&oEζAܒGtaȯt vTsH:b+䷟h`.X.=YKh1w;#'[}C0QAmyx[i5XfhgR'w?7WXN'#ǁ)ҭi٩RNͺnBxN_NLs:FCbYI-+vcLRo:8տp8tFNW5K95/;ӃPh~~f;-NBYN4zxN)ֆٴmT~ҹGS` +Xy,=,m;tDz}PGѓwI}ǓT$MX{ܽ~:S&. +l߯{շs༸Eqn@,$BRdp*˗{}%60TM̶GYI䅭(CQSɱWu>>p +sg{1SF˓\S˄$D" +Lϋ&IVVjNZRtFJ`5(Y;0۰3 w*5Fb%DHζH°0wst>M۟CӹbP𱇯1kR)Svd9X%L6STK;"]^IjH49E+&7Nジxrf{[. XÀX{T9e\(!>Sx}OS4=L]?g[\x/Ͱ/cb:x4[dzs,qbbb芘E6VغNQф ++XΞ~&Μzo<뽱`&AGϫpSf|YKن=Mђ 0^]M]q:ifYARcN{,Vե@l ` @K1 @"!e_fD}^@:FJ ĝTIy{,,.N_r]x#FB3T\M?-HI5[rG% 9b ! 49K\oonJDٵܹWrjʸm9 +M))17:||ﱆ|XmKv$ӎ 4ٖsKR"c$[edaU|ܮtZK[@eU8cyfxoF+ŅÂY\H +HD"i~R-?/]4*`cY&f?gOrⲉ(:Jlj$M2#àvwN6* !t²V_Gl ԕ,;_3{Y endstream endobj 24 0 obj <>stream +HWZJ}<@H  i H,^ ?3L$⟑OqkWge)yM)W氧fI<ښg'Th}2ZԜ+h>A,V Nk֮88}-32KRo+؈y|y< ~Vů}=T7u1;grK[dVvMq>9E+Z+'=}Zr\)ONe;t{>[Vk>EY&uyV@\5xQo +n˲wx{́@]0}VlP +¨H.'amQhsuGBꏏƂp1 88`= %k>I5|r)r.eQsV<2o){^ +#c=?6q +<+`ė |Nd;g0X7CCqDyoZ>$*C!&*FxS_y(RrzSiE!E_-`@ջ6ƺX3U0n>9Df.gP +AC"ycoK%מ,!`RAA:Pn]'IX1LdžIk*u9TbVaoȀt۴фʇ7SDGY0 +A00e5fa[(̍0yBjwNX*z %7HPЊlt/|`)_sEaf2 ښ^%y@2:Xxj-0 F.;BCY B\}s_6gJ?+V͵oeFgi=Sf[n'S^*i)'5a~QFpw/hGr _VYOVu?\inqpftɄY ħAat4 +b56fj3~7d.?ѯ')(4FOp,}J&QSܺF ѳ\C3*0xXceU=XQ!#<m&Fͨ Vw'?:#Q6Qg# v.3Wwlޚ1O~|Pn '˳P,:D g)ț?0 SfUn7J7OUJXJxX5(^k^KNն>H^/i +"i].]. "5O 'fY:[N>$Oko;/u&&-мuʒ1Aw"ԌGI?GnʼN:. "ϩ1}q_Нl2iDW<m-D ;[3鉏a7+zzmc13PJIU#rj&Y"8^' 1J8J%ye +pNĸiQ}iifg# 2oOy8i(%ӽd_X\Ɍr~a>vvk-o9~y0==#뾖jw26.8owyy]4j$o4oIR&meR$!$̿Ԅ人8 J|.NwmR TKq%1)x!%*_ڨ~BTώ%K]ΧÏiu{(0su/xq{bس.}X|vdƮ 끏iiX:1,@~;2P Sw**iqǺ5lt8|-ŨBKƁWLB[r + &tY_N.T ZhflW6C|y~tLn?b CHJҥȮ69TOWOWMI0^.4}axb\BI +O\/haj X \F X}^"OKǂJ<- U-XNP]8"T9.|ޕS1K9$"\ZG +Ț}gmoΠ'JoScpE1mocM.01.6"wi(Bh vۦE!A<6)5%4=TQr''j; +SgC@."~xBNhMEXJ= D +f_:Wͬ*B:K" 9cbQpr+eI~Y!0>SZB(y ^i?Jc8لn X1 {9`Ǐ!ȶZ|qW O +P qT=S; #6x RE+jO%39}'ɩLo/-FM`T2c4|m9jcO[xCv<%3c1WG&@2&ѽ%;|g튃sw;vͅʎYɻ.w\w\τSB+coN~1OTNk TBu'rDɬlt>Y Xu֫x%"!DԭZ׭.-UT?D¡Kv7<;ψəvKn$T}ݻ]sC;^50Ը# 4|?s|S\wN?AqOz_ƊD11ejX=p'Z3khNᐎĥ` ܨjT=m2JǕnߒ̫-ꅎ*Om0Χ7er ]! +Qt!w:U*&6EUe#:Ұ4a~aQnKO9JrY[$ ^'>ǜʚO)d*5҇~Yx35Y! Lхv-w:O„D8\WxU8S>*isM yOOt _vgi/1Yd݇XN,&DA0)$t0P+nytJ) = o[|s5u,o<$'[>䶩2H|IqOaʁ72a2tW&R}uW2K`r`f%X>G 'M4Fcy"NqGrP샠F 6ݞ 8.`%NalxB)QUR +[^^ʳ}5cGbc4r=Bbi[ ?ݎ*7}SwkIe,y2*`eΕ! +ZEwޙ,^!QQzqP|sbqh8R5x\KhZI]eYW×hSQ" ۟HbfmUP6)Zw^<ղ^ak@my+`vgFi͟)KIeכ :V ^]'ԫeۭg&ިRxbPxLr !!<9si;DtM FR~/!H'_6yvVZ.vc0hlCTFH=r^qhSŒAdۇ2 iV˛VCfe! a%'ZM17NP!-?{A@ tA] ن ! z xs]?@h 7LMM̐`@ on*_-,x!xw%|=g Bad"6;c>br18<^3^z lcNo`QNv`ΘJ;:6ʃc=EY&ƙC>2mBMD}N4bY;؊;+9YK089=2q€{~ϱߛ842;1+. z M0W1$ w(e֗[b1Ʃ!B%jiH+ T#/$g$E)Ȗ +FʖA@C?c$~VIZj&u[}mLW0\/[Jxv"H^+[J g!]Pfᴔ&>Ue |wJ҄Ӽz9pMf ͷI@>@'HVu 97(S> @ +ae.!J 2$ (42 ȸ>3dnzuԩڵkWDC2 QEN'Bt6ހmiL-mm%?ڐ y)8穮-jK]'8>n@^[ }foAǕj +jeT х ]kߔY`P Ʈ.Xޑo'f;c6I% +r\xV7W{/V^n6LwAȑE ^ ]D +^v ReGBC +j+7ˉf{3Ewjzcp .SŲ ư$O,ցN9Y_.+7zH?2i\&ݸ< d\w.DV+\~aN'o"wo&t&3==W)Tuc5a{y7{K_lȐ_R\?}4è"~G{x &~RxqM7:<%[J@[Kj)O5"twV4PAy$Ql mB*!~@M`ƣ6Z1"%'n-Ww]VE_$D֨y%(x`,OK%>J9(cs&+jQfȻ%M/)Y4q55w/ȹvֳn>w(?YL*Eq> 8 c吰qm%!_|K󼝚~E=v lnjzXXFoc_ + pCǾXHk +scXqǷFÖ~_$e3wW-ޕ7YhVY[F}MkN;.Qte+dFY᯽ t0b.(e}QS|'%=F[ŏ <C"mq?9D *9$քԶ2 (ҢZ\Y"mr ?Oc"=_C)ցOj3X?&ׅ?-$H{E*vl`~[R%"zDo5̯3ƭF^.xMDP6ӞNkVPK+j: {Xk=ӱ e[$2aO.{2rX[.gaRp{-K||%~bm) *Г\Hr*fjHGKo\vEo: +VN`Ho[-Xve]UyiGlY@m X/c"$xIm66:T.YJ+Zx[`JŃ&ND@DDfaBHp1&/ԢM`"3lWL<ݺ.jg^֊ *{@:|T_/N 4ƹwKs͇}CΉ;{X"P8[Im9ٸ\u +C:SVTPWhȗaCxr`$hs !Gꥇ>6ܜ{7ɩsNz̻\{ޒ`8N׾R [Q;Cwŵ;w> 2 &]vY:!  I,VB v(VJNA>Aqdv!0$k +$bK |(&o$a ˟˗&Ag(HSR8b|NB>!J!~ӪP`OhN*tToט$`5n/qb(UWQ0ȹ vK#WűQjc41*?X93)kl G O +ة&}d-cSA?Xn ANܺD_eV%"-$bm>|U#! YRA4_&'@bRuEme)ͨ46x$kUi? 6yɭH-Hfm{Mۂt6P3r^(fqwKe/'4ʔsPpTr>stream +HWN~cAYuhMFDn<ƛnL-b@ðDc}Dۮ:URwx}7> yUf=y.zCOr +%\l?4&;_[/ZsBd^nau٬A~OyNq鯛ժwc~~A}&T $swڮX,('6W`鴤+fqUø:਼E :,zRv7b~Y~l2,Us/NqX_]b]U+8c1 rk0}Ώ*,|mbN*((%L%AGoКi2TUA./@CY =WfGt.Das +ME?i˫RD)/$4me'}T$}x#iմ.ur };ҍ볩@t4sY} 4)y8zѤ&wy3^kجӹ07P,/xgχ)8,ߧFSX6&&<=742y;ˮ?~8]EJ2U2rDeVXoFUHͤ%DM!Nuoʼn wN)ޟ˪~eL*mTU[ sez@^OƮ{fGi\,6:ӐpC;X!x8f1ywx*j $Vכn5ҮkRB_͛~qhfk369nuk]w f_`v-nqkYj֟shΑzy~Ozoz69~ܬ>@{Ag~$wh$-)~O]HŰkP;iu{ Ztcs=ehDџٽM;|K~Y~j +epnhϾϫy0xRf=86c>y|cN>uGlӭ, ˫MZ7]YܲO +#w#;45 G8e,OY]U]֡mmj]Z֢5iM +\e+SJUXE+ReUe(}J[ԥ*e)J^$ԡ +el0Adh /};o+/3O=\*Ws:SN:c:bk[뭳 +.PKLm*S`qƢF{4p 5D׺ҥk6Zkk)ZUTAyrR(WLQE2YJ2H/H&RJ!dJ"jQRVRT^^ȡCws+ ڶA=?:|Wh'2O[)A\|Qcn?>-5c|7[,9z ʛl  8e8GYHmC^%g Pdp@ʺ"@V 0"'2ih\pSK-8Z"5] a؀-ك:ƻfЌ| ++p;%Kޖ3M6@a#_ E&.S]D&Z0\eR$b ƅJ5] UJ$/$2Jbح[tHzTv+< q *]:/<B Bs1))?eq +_F#0hbjaq3HcH%1oF؞;3g6rJW'gg:w ]~trԦ!spSK^ī|bz 7xxV_}|OO]jɓʹj,#Dea;T9N@o#0={LdQyQeZ1.T2|f HGBQjU(D(mi`uJG|3@t-su춌bce~3+cXL)c7J݁#0A{ *?Uy$N5IZ/Glufkk9 b@ 9u^{s<9oټ.UAth&7c!P@^ "w"6'jjNSlj 6Ŕ5co39׎wzrcJIIi 7 %% &Kn8U +((C0 ** ++ RhgFk ")Fd$ j4pqr#97H::M;;M<<sOo" $г8tr4c[15'@ˆ)=ˌde?i8UHIII$Ia[-[J9ͣˤ$4&͂.9~\Qh##h2 Q0錩bɺ4) 9G #3 ++VC~QO"M~'OS'p6?  pZ> 3̏^}O9S>xA,y]˿MEcPDB4[佭F%ǜ4%IZ?\R2 `iuO d/gndۏmHH)|brzI֔?8A^޵nMn򄛽 HX(3`&,ւx` VaEV +r-E(ECQ^)k;s]{s̭˃rQﴕ{\_h;΅x;ZVw\>a+;} jGwe>[m:lv耬8oB/"B6=_0r +05Q&t@ £ у$FUaj6b% +zboD2=Ze8Ur;'`6܁- d#OrP%w`;ȈzjHh19n;ҡk#T\ ;~SJ8;v/WBV8&=5sg7;W?:[586ŷGݩ[c?(*ɔ#k=ާ9MnDQ zu}1_u/OZߍTE6ǶP(K2[,=k|TP|K66^Jm[; g4`ybj⑽/G? NM?7om>7S[__K}-?z{o_/S}1G+c` F0x=FnƸ54)0a bd(̓LS'd70EX/ ˚ʒɚȚ9SA|ĢנYɤbMur$H](J L$Ԥ=IIJ +ERlSTP%X%tHXQ=5FDR-"WES5IT]+IaXo42亭imB&w<dU&?,5$l[bIY8$SpƖf^Kc; ;DAIiipkVⰫ 7jñ8al\$ e +5r׆2knRL>7$i8LJƧ֧ײ3ꅪXS=A&bY[YVDWRM덚ڃu*䞒?9zk+2wAzef^ty +ǁ[y@R>U#'j.u{|O泮[y ):/vܴe̴o3RfM6mM[;Mn5הf)F;[nm8h VնгBMz%HI I + +I ڞ;27&f҃$,4(,0=SF5Fa8в_T[崕US7lrOU>I`ˉIХO$I6Kr*S1/Ƣ5 ++;UQhw;utlS3u GjMO[es{A:One2ϞX5s.`^ lN?FPJoI |C3&[r| ^-A{д3X!vDUa?N4O jngsȔңIe4redrcqJS_<#W:Y,֓" dž#f*%EMkg$Tu*%YSsXIljKc>1sNn4♞=;,Nwjx=#Wۂ|p:#s%T`j'[QʪUSլ* l1UT,g5r* +bmOVW(ǤUWբZE:^Fgr* +*6>o/Ϟ$Ǭ:]␊O)|vq1vfOmg.U5eu&ƹ& /Jۂ0'!.Nu& 5%5ΙH7(rJ[<bh]{bjo¶ /y/Yָ7ueq;> y_f9/go97Ԛmto" 7.Tj?G_O1k1uuŸkJ:7{s2P%HB|^B}`o9\g؈Sf'?1"`}j~~Y޿߿~o_~ӏ9-uvO c>P@PlDpxt tGoi`zNQFdζy[ѴtsյR5}#rW:BFdQJعZVQuéX,rCb*^ё@t!ZŽpoa#Xƀ&Hzk¹|b#$bOHG1{^."%0`^! :Ǝp \ـgbBk$"W]ؗ&a4L&0e?@siirfMܞ-"+2`0'7Fla]ybXm̀#E\ jLcphy&63ge^y4Z4CKp3L3 +AeijQm63+jxFDfp˴bZpŁE΄$rd7C>P9j`8w Lg۞:@GcTP 47}~" G ƽDUs/ٓDu#Eć!ë "ѯ .eRtu>8_XqhoO-?Z=3їYٷoF=a^!Ni9S)7 oNٖk#mQ c,3_@arXQ52P+g(Qf +MLc5 sedEN=X^ȫ$^m#]Z{8u4rj&/WS!"R'^&n[Ϝq\yHKep*1A IJL +x[ȡ}d^Wݒ+ϺW@X̪-7"ꨟ4dDŽo*4ℍDKa@:7lg)xG{8 |rɖLΟT ui E̖RoeŶ[^i+۶i٨ojɩWlgz+LʆY TTrϝ'6](! XrRQ{ATvq}Ɲv-txw7w{pnn\|GvÊqEd|i!.3"l-#¦Gupc@u/&©n,\yAXFNAy}^` 2 5vwŝq63rτ3pMl%!a~annȰ~s/]]ė ݅_Lѣp))j8B xΥg>/H]0s2gOegn/_H# Ӷn3 &t`Jp+Ec;*#i>vkqUmE?@_">im"( c.lƁm3zxIJnjgEh){9DˡWCc,\pӶmo8#ؗw: 1\tmu}7t#x^Jp3G6pe`MLj *^d($QݤCP`FH|M CT[A:Ic-kK:z%$a";8B"œr徳3|ޯ#&q)H{^2瀝m1XM% 6bvBG 0$9 #2ь~lDZBڈ."ƀ6:^9Y4"BFQG$o#ҷw WG}:N)̻Ɏ'# xn]fY6DϜ<\pk6kۼ@Dd՛`Rf%\ЋTͅ\\P!z.ʲSME]lsQrR97D H oLC`Q冶;0sc 6.Iok/_U繡 ͔-ԅ5>:U%UɱO.vU(^O]2ށT衭Bi5%Q`L|VF~iJ +a_r Gj87wY_no7 b(| wfY`QKKfPzB&^"@|M$@}'" +dѧ-Ή1F5Q#ȑ!щ)91gjr-S)΄8`vKA]"`k& % z>, +M6C7b1&񴌣:%"hu,cGLb9pN3ǍNqC +4"2QG"YDΐ餥IIp/, :~,ŐaYlc%)@ [EhWnjX8*[F&apY؄Zyԑ3[Qǘ{ _.Ԃc< uAܢށn +C7~QrUs+My$֯F*NZ]S-˅#q,hXm0sd!/Gj"?5BZ\̾b+ {,b/W%OXcK!,v#к#mwB+Ud'=PR' $:;{6y)~Ǭ!|$-EO=P.qQZ&crqE[CpCYK&lsAY`a1e1zQ NTB=E!yBC@.}6HS GYa<6gجi321.˒]2UG,J~3]T\pj,qowSʆ˽E>tRU +.KӐ%gwK:ǯ/1v2Ä&0&ai^,IPKⵄXhKBߏ8][nP6#2CID/#-%#\/,H2#ʏѬI7"I Mir%oI(qGɧ FRE %YtJ8IpMD;3MCq@ea#V3+P;GQoqb.wy'XsD:FyV ZOAo(;Jxʧ9Ol>C)iS`)3! `. +et5 v#\6Ք(s4e:׸\73QW@ >_mMӴ@ЌHi.M$3s (u@ W/k:bH 밈1` +z5Ag3 +.7.6M/ ~_裏>v*.6R"qZ8W,\M U=ݕi ʅ*yiJ!񉏏؝靼>QWwǻÛO>N(?W׏xw]U0n.NYHcKW\4~; _whPUq|S:$Y͛/ִ/ vyx^?~)>#V[||j{j_=۫o_?*~c3)E_ХtHLnM >J8ApdHNCT7 +OT5TȢq&C/ kXhIiTa* QZIÃbYL%+S|Cdj/ /#r-ø/*JҠ-$H % +^֕SK B ?Xf:,^~8j|a s_&;RN 6&U~d)14ϏEx4J]K)X>Ί a;jH +,Ҡבּ~˸S^މ80~`g-NZT&lThZJdCp@ץfD&8Ǽ9.;gD1WXD)yIXvEQKP@i1OdPK\, wclHI+öb$>_5ٜ3u9d< `"VHԐh$5BkJ٢hcZ)EP [|V֕J jn8{YmŚމAB8 +ON-(6*}hF:\@L"'|!c}W߸?c%5|㿑OB({αl ;ŗ_=h.iRCZ\C-Y֡ )aŽBvC_nρC̶K5z#FZpe[my@zSCH`-Cږ3g|I#VDbhQ MQ GpS35tD@Z;|W @MLƼ&f?_T$Xa)˹Q ܕ.&#t} > Uj$cY [!RdG9n@4rI;yeYbӽ94)k]K܅w!Gx.T,=,USM'%O.vZ)| +o7HKXW$T BEqdGS$jNktu Oj_d@K\VڛE a),P˸!u?qHx&܁IIʍXc/&6Z-dƑ$ytvX92(-;v+bo CM;(5TQ.{ENSp l´,hѰc⺽xSwtjTk}I\r~G~zYHluwU=j`1GV4&%A[QJ- u/( d"Gp"Q!$f9+B< ػЯF1|1q6;i[:4:4A#{5 Ũ(.5*fM5ꖒ"v,A+@䠔ToS)jvf~&fYnOvvMZ;eZ$SN~,"_.VcIE76OA`\htq#=oT #$E^'kR` )h% +3#2?Qfc7Z7.^% 5:_l (F:DX +}(0jZqbZqr*WnM1dDl+KiNɸn:s #lрLy%K)c]YPh.9[ Ko4vkblRZ􂣖d +,QQiP]{9G~gǭ&r)~LCcގx?=;fcrӉrxEX=+ԣ\pa =*jrfD Xj[9X ǧ^Kw1R sQ[,f_O̦AU]9 kV}c7=(EG/,43N:̳qZcX4c5Fhj^['XGO\ı >"%n1LR +|JAcXɐ t観ZbP%7ೢ% +Z(f ̷"K'P{ȍx~JĐ#!x,M+Jvڊ~؝C%4b)J7,4TPd;(uGY~) l>,Y$Y@pb Nvy^y,e$S^|*q9rzb/ U~/0* ,m +3}XYNK"(!(|ی$ 6$;jt>BdPmFV|h)q~s/ u,}<ϖHԅT47a2+͚8KN@h|0$X#~ur5PeHZ]g@}uQ R^{7H*&\*a'MNI*J>tH]VW71e L&uZk$:'Qf60Mqj f$+P&ŽuܑpĜ$ ;yϕ#.Dbz!Qv$^9 +,Pzb eM(|OQP?)1iaS3=F`SZ&5ZrupjlaE`ڿ $-eoVrHg (Zvs:zZ]W騻6]'s +8j(53h^!1_"`!@pA&Ecz03Vϓgn_wy }}5؅P3ߚc_1=j]*g*az.PmkB3V}]ڪ|]$,gKsMs_},K:{S&8K4j%wJťQ\ö(Kcƾ~'T!|{\R)Tql, mǩsW<v}55=r(ik|V }W8z%TzvUMMe (~4 X: Wn)/jU}Ub*rfy?` u5+6cUJxHhߨt +cIfAG5ߥ򂤑IBU ,T41EiQE=<_͈L֨j!D]킖/pyՇ~_VӪF1)$R0rQ>ı}"ɂ6S)͑$u'A^тƸv_K8_f'n.xd +QtgZ|*"[@rȾ}-N-AX,ٳwvtf@:ˉɳQQ%(v:~tv̡i $2pNzkS 3cL0/k_a[}n>>,?o[8~-imAVvoI~xC+ Oϸwy_?^ÇW/O4_\}۫f7i7wW_/^ݫ7;ݼ׷]gQo̤L?-m-iy|yg5WWDL*aO̿8cSv'*8ɴsNf.q`gZtuVhj8 [țSOkoqH "K( 9/n0aW6GGr`U_2QrZdXoGtYo /!QZ^ a.Tu}㉤b7.ΣmV~{h]Bүmm ګn+Rm@weM0Wnq!k-/b is6REi09JM6?r 8TӞwo'~*|D$ S(c9b;5Q/"?^M WLyu +2Uk0ޔ +Vk4ttf0&V,P լD~,rWNIBsfC^/}]wڶ7*]6CݴjDCmzD-' g9[lp߻#GƄs;'0kN'uF;@n?{w_0 +` 3ho iunNe.O^5IIth.V֋@ +(,>)KoG1AR=Zp0Φ8̄Z"j]mB[fb浡}S/ZJq)rq ;2ICl1X(ǚ`PFlK yU!+F*RoiĮ|•kk 9 07DBI?KО 8@) t;μ1h!%׼J-`x'KU|2`}rOOL/-.ڄc~~/T~q7NP.Hn(9M$e+C>6ZAG-`Cly/Fb^gj)N4W Cх&i`˟la ߦz@g2YQG 3W4>yTHtcь/sʊ(nm"P<&1XdުnDCTp:0wU6 :ĞB_-QܨGw93]hNT ؕ0UJ*cG TH*N`dC pZQgPOɤ->wۢT7|9#!DZג"/.)[xxtյ툑A}GWsK!40bnz> IFWPJx Q&M^Zt;)U;;ǐ"*^]XNs1SJdj9RG@Jk{LR>H ?SI3);:R#ܩ_(>Dbߟ +<7RQ1D-,i|3jfb霜??AIjP \@ۂ~"TAqo*S~ϑ?~o}C H12ī N + [1!A~/MCA"L9ƔEPv-I'Yc2r(M\Hݽ^X˼-[txɁh@bV!,tRjyX:ԌfBSC P,MB$wTh4nl.de[ F-0Q sa,JFTW +%pТ^)'$(y3q"I*#Ŀc%x08P`)UGP|lX +=$г(s\)UjFr@NOe(sq$[Vc5i8`ڷRWZ|@>gߺ mYU@ހ$+7BaPY.-ΐ 2~WߌǤ㑧ќ~9R4tݺBܗo8 cbܯ0T|.*<&KZ0;Ywwy dS5<)o9 DvM%/U2_Ƌ. z1||~eb-֞a2"XP~vߖ iQc~ZX6,4};g`U endstream endobj 26 0 obj <>stream +HlW9$7YXgnUU5z>UE“^̆-~UZG-[ka>e3"rk"#"Woƕ +^wƾ/tJrg*@"LfK?pe BgY+2Z8~GA4.΁\ rT}X> t2E;ne~Vb:4Α~? q $>b~@ǡJq!Tg8 fc>TڪLz8#-ﭖ-]D P5PhlԂp⾎~{fYyPDz;跂*EJ$:2j]ұ*׻&*(z983(aq/(W@{f8z1z=t26pC@9P@ +@O2= +j#^+}r7@)"3dXy%|^N\fl[\oX] %s^cY;~;t¼v|>$pܟU$tj$pd4I8L,SF QaWbE7CE *F>]@>AS(#6on)6Zw ,RnLAJݥ+΋mdv :e7F Ahyih3Jq(iCYO^G/:nڸ((2:Puoey- iAFQ<yp*E yD /vMC4`+A'?8ɑ5u"?d=4{V~-†{@мKC©EPZABY-2m+KKEw-%Uaݯ!-=D_֔ȃx;+hCxS%tfl*4ڤx]u"E[pw^N`-R[6 g&ɓBf$j +|nAV3Zq.h{pRhmAx@%o?+ +B==\bSK"4/EK|<6`Mco~f}XiۢE_'\9YR& }ɓdUTN  N%Y yW,tOe35{-_-†u$D>F?ǥOO⠨^ %ͫ;b] * +b& + }Q \@.: p+a|X@t~j'oԥ=jnX֨}^Y@B"c + Ո Exm6ذ/^=|fH=2p+.po 2ߋl]M0,˘%˳ +XB@>2qa>`C7z{$rEifŒG 3ɣ+!=4[~vrgDR6GEo=d*6]fm[^1[R")ٛ)r^!%g,L1(CmC0vܾEt jO= Cߣ!2O*>cQ4=Ǿ5gUٶ'}02a3=0Gy`Lkɬ]Z:F#ш*Y *yVJ`u o*B7b0 } ;kBK1̛%_Z/m4JŚ3b1|"$mx +F͑a%$&jMxS梠dQ9c;PG4" GO [=Ae" JZ곕CL 1`_~Xm,Ô VQ?ֳ:tXJhNvUNNlcNL!@K7=6ԓyЊϓ{%M;Կ{Pڀ!YDJ;X /9+빟^sU0yL"@3X?l}ޭi C},/׾esx/>#=RFH{h N@"D$o_yVk8҄J]L{V QҌ(<b1206C3/{^q ꎔ{ͅ'uwQkޖC)-kcxq6IQ"4db2/6Ϣ@_@d>G# B̌$.,I7H8 a}! ܡL}N"~طb?K6~'jšGح3}l؞톑2dx[YP͜"9>)&$w2kERO\N$;ΐNR]k>5JG-1Ig&^8y=HKOKfI|o!եQvuRQ*0ꭱ5* RbtخACole(}y+>0j19NnM4}6xٴ3 g&$tL$Y9'4+=kaqI]03ZJ/4i.noW7n_-o#`5/HEGxO0ɹ"ry7?^z|Ӈǟk^?<,/?]==~_cwxk?zaGa9{uW;珷.g3~S&XxVe4^bҗҼ暅ƒk넆R7ڴ%Fui,Xָhs*:Jn57YM9ChEHd%YV~nm~p|y~z4/[kၲ.{5T1qcJKz/rtx߽퍸[꤁4~ , mQG` qY1k +NhP[WLmadXɊ$ZX.2L{{@\IB\р_!\QBIK^qx5)e5U@SR-JU"˭9 ez4nOUOx4' 8*\d#icBrҍLJ616YwR27׆QdEju-ݧz9D|1Tc&CBb̼|+7҂O?x[|_OXɡ t`-Rߧ]D-jϡMظ$ٖ( +$?UmPeȎUq|D\Q 3jI).ʖ1Å8dq4ȘүRX&;g}ܕ֕7FG >xLoJw +W4qQl[3-rW?~c`䓫 @^R6:QR\9UZ7pDU{$wD'?SiL}Xȼ%uӱڦy$U<~C!<_`YVxYVj#AǓ]^64!d>pN! 6+) + +jP#pX Hr-'Z"^dn&lW(B9HE[B&!=zN eiR3`m :S/)_{/lbt% +ADX!3ώٲeCB " KH$WV#h =qk<2R oow:2hX+Vw+1lk ˹*f}pGFz,m  +5Ln #C71( 8lGsKbԓCɥZ%0@fBGj%Ҁ`: ص!N;4u"` +g$͎ЗH?t*+(5)Y@_ @UWRQ{.'ujzlݶm"]˴bz-BBpX4QiF^gF bID9HyGLs(f[ߓ5%STĪT[{I5`K4 J lD*#YB𱟔Ga#~In ;=CGEbtAC( bQb5Ql/ 9-N_W֑ހ/do2C[8E)Vk4gU⑛ś/+~C[sutC0ON_MMFέ aL%qk:5Ww#ްǏC[y͙Y` pxW(8风^ DXFr5˭;3U:kYLH#kQE]|֕Ҍ:|5z:@$/N<wOٮeJ +gSiA2|k54 7T^\64X Dy*᷵2g  |]Ŕ"H'9:q,@\k>nPH6WW9 ("|Lm|M4⥯v` bLjFBָgSfEfVkҕpщi2B&z[ p$pBNoC(7"Fؤ v +CsvUڶՍGG۾UhYԊn+b1t7m%'?,O1rS0Sׯb $gPBj$"5$_"H n9*  :DSJh42*=7q(/ K6)kb3X)n r]9ge .bB4d,e_D6V3IQ8 q'" (ROO@WjOhH l3m1饮"Xi"W+>xbEZbw!qt-T +dǯFC7)t#ήmʺ}1%/~2X;C]$D8YKK)dK]L#.qP pV.waJd +@K:s@ލcVw\$YGD!~ @څ|#3`%&&/Hg_49}TMBz0YMD# $t IHN\ltɍ 2gEBf4Uq";Q٨}P4w^y[k -lTȥ.rPK}m+.g +0+J=l] kZ+6hKB5\ KjcFB65+@`$^E/(?\S h 8r"Vb".40XtQ,UsǕ-aܐ Y3B6[ iRzQ Q&= +D6+Okn ܒ5.hjіHs#L.HX0Y4$)՞nD7^47'dmKCȃS\,}OgKM 0'.J,nhn| s^ґ>$kL&y5#Ra-E6TD /mhwFHLwbHx~GU4/i#^?"04E!- $$ABRb&J~+睱c  qd`C3x+( O~о9J=vPʗ-x ~j/y}ނZPbw1̱DK+ RA%Fi9s /F # 45|.ktPHD(H jFpȤ`ΡF/UR7)&x a>29`e^M9J! @)Q.@::ોBuaWŨ9݂\.x,%PN-VI~,.kI*gۉM^NUJ<2Y) c$Xu19 x N]@1r+9VaH!'}I&Z:4grS>ϺSbfTbp%TjS!A/Qu1īRM٫]:X[z2 55޺ktE< <ӈ%A P5̯XIH6 +{0LqۣFF {-ArR[-8<`rc^M&㇏spb[~OuID@ۚ2[i\OBbui' XF=d&-vf",EEUz?`JNb:axkZ Q3Thdf3iÝU^(\%(U{[#*Z*/$Uo-݁`iWNNg[m9)$f{$ğp}#9vu+$9J`P%<.QlBmWm2+A}yOːn6 ih*]$ڊ|m1mi^kօo.bm;X$3p<[䋙Yv'x5j"0h0}"״5vפ&W^ ɱo6K)n_J3tٱ2lUcJ| 뾷4~yBMv طzD=7Oqk. +lhcs j義H&EfŠ|$STXSU!}T0^&@GC* 341V?"̩3mȮhR4X5if%fI=C90>栝GuJxywcp<.ߤsDfL Zk:QY>;~GAB;h侒bMz}j#cqױRʀv+&^)wGƁzVحl7MηYT=nu> #!e#xJ7P*mzԫ{~P>*Tܞ8--Хnݝa`7U![&4ݪC7XKVgx\W!ZŜy>cj=1ٞ@3@PΥ68~yODgz}3Vߍx每?/_?^߫ז_'*k:;ګ}qTaU:W\y|BNse Y=L$|sljHuXAÐ[|.ؗۦ?G|"aU=Ԕ+/=tw7?^|+}o^]]^zK?׳WWwqݿX|xߎ}OOO_<{׫7_7l׏UkQ2<*󿖷rx&&һ!|hk2KP $F&%Yeo$`2V|bZUr,ZF.=Rc}!Y"(s(UEwy^^oRc~z8`*V-f lݘ_e1` Q5- +P!jEZyҰڀSz;s0og}gόOtdS)!0#Wj$f聍kC1ٜ6\lFԙ[[tzPNtȊu%)XLq*;%-@*]enqodZbl}4@[o3Bb"o;*D}}S*D &ٻ:f ,6,%=4.>lხ0=C3g:ab-e@׺-DaMU@6؊TGPYul<7&"E?kcX{6#n4+Q;cb__p^7/?.n +|Np=,m<9񉶌Jcr=>Ao7_{`zR!\$SZG5 `W.}m,+9>&&۲D-N-Ynwef8-|;s7P4*Ⱦda渓uBxxk:yK ptzMɏg3 +|y(ʐd*A֥ |z]aյ@|htB +˼(e jwRG@f$hYh$Z(E%YI,X#UGi/"Vy[A'&-$$aONڏY~ 4ϭ (~ô #t; v~T/%?F^<96y7?<9?~yW7Zۇ B u(1$qNP' aߡ$߆:x*hSԑ]QPHVo^ | `P:n߹s0;bv:(a-c +;|aF ^qa'97_?`'ۡNbBE}:I3`T0P'i kNܭ揆M{M} yw%-;Z`.#=§ۚU |j$ +ҁ'-׃lvT- Kј0D(!*xi;5tIdLTR6q1HsYf6W.(G$T$1tZr;}^ UF& ҳ +B4aNwXG bY*2џ5U:3r)ЩAַT6DxTH%rfVe)!mCxz"hg#bH 懾d'T!05D=T2A +AA~Zw(Bqg:/oG4tTg#2ıO6Z[;f$`L4 +Jc Ck }PfgId% 7|h#y\_jHˢHyuTYNC09>nǠcpNJE0s?#lDXh:4;] M\cofn,1RN۔Msc5;[6,c,`YAj$}cFfx׬*AbWCd/HYx55/)&5 >[KQ38k/\:%4pLv2tD'ݩ]}ОdE % \IV_x1o$kql %rϰՖB  8Rj"Êd*veRԼ1ln\|°bNYZ(jEO͞b*"G]4)ndؐxS2@Žbg0j@D *~U(VdRl==ņL ߌPޭO~t5zaP,];2NOeS4Y-oTW̓a[VEn(&IQ4UwFbdC߬n0,{UpS8?V'3RG 35B)`f%h!)&#~6MoڜN V +/BN 6ٺAw0 V*'V:vKqrI F{M""Z,7M$ư`=)ܙ Ň|JVd~]踸rQUycU\d&gp?ʱ@ŒX%cdDT@cSCY9VG4Ǎc5"ޭXuM|UhlNA uۢHJ*kn^'uUy(2_ p%=Bl;0Hj^#z*03I +!,>eSBu^rɫ\t('*g9̠"ZM~$Y@*8kN>GVJ:XwC ͩL"FΛdn־n[C"fy8J^^{jؗڬ{{Ȕ/>Pt4ن笩"u5Ѭu6O)&,Tj[̧J͟IJP.O?ZJ`$Kk"Hzg~pө}ZOży +4_p\X12mc^94k;5CC]˓C[ e-C"мbK a|z_RhB2O +&>,V/P^2.jǠG f ʷ%14KQK剡Ѓ؍@|\1EJPXQ?rhoŕE "J4s=94w<͡rhƻQ,K]#Oֿa\hRG铥:IPv%6A՝vьRT-`:yA>)h yNgM3^f@Vz|}Ci88;vc \lfM㞵]T9c.":ԘrlUQEddCnAV_HUGGaav^t-e+C&Њ.lQbW5LK&lno.0Aj[>LY9$h۞~-!ɶRy +oc@=O+:^nVU:/Wǘ*:06uFQS=/ +&y\e^6e$i˭T?+y'ިsJ:6[ꈣt%јmѧ"~jcC ׳ebՆfBRRVdkԬ(@!eqX0mȠ| ~/iL]h] a^U~Rd3b&r%sڮaMJwL۲(q`Ljgܰx]/; $ TAIUt2yP]H&"sMS"fH!̕e}A2;/23jpfkt˅mؖnƸX55Yvz4OdiHm +D'gm{%[k\%$oq6aA¿d:ͨj=}DS2S Qb~2y +1p޴em?mٮ@x* aE s?gK+ڐ9BbӅHa 8@,yЎ8 @{8#b!NJH]|W4 ELl-?)dO9~wfÝ1iVbsA-N9 w!9mכwZﶁF.UQzQg?G-tm<bT3]OUU7 qokcl4 ߿[3:rkTvPi 0^LC9ekbceJl"6+p$镐r6j\)c|XvjɅm@6L3ll:ԙJ xuFR1$ܕKy~6h :POg̐EWFg  +rdΝ<AÔ0[U=qIJE&y*ݔh{#VA|+.>yx'WD +DYo4$)Ӫ%p512k8VRk͊ʢ1& bm;u '̏%눯R/wڌ=DU7<`۪q{fﶃl@<<$NÚ_X'o,`<{J +wqga;tfxF=YucOq {0IO4'$tdYO';wmo|~TqN}`MdZ`R!m!$U4KMw9m5KLUإѫFM(ԯaRkƤKEG6a5~P+#؅3,Tլv:Jw:!-3#Bi Z,бy>[kkCu&]XUy_)G'BvB !9t TIXB^7]L8tPf4R%M<*{ w znW~>VO9>Z~; <򬸫!*FM;TZNJNQ/#0דʘu5NdN.vvpme ?DBcdA=w}y{g6/,fQQwDZpWO`2APsU4Wџ$3P4@"THu-T DsVXɁ湊^vE7.2g[FlxaPJ~+# KӾ1j_{*0݅|y=Bre7Qvy1TNʜ ϛ[MyJZћpY۫7DKo+3 je% qTmX$vU?H<ֱܜA*.p*62DR/v8BgOlri7A%u)m.(w%ڣO17qaOuno::;BjHp1̷BR Z_=v3Ml(zn990/M4!'fЙɶ'cu3St ׿/2 sj+#,`$i;Jږ, ~5n[=խA r6<9DoN62X錫ptIJe@ P2yKP6`Œm[JEd"LEFPiQ*TgSzMO( ?ݬ莔Ac^%}ϑͯ)tA2H՚=I :+Q|>2r3.{TI`(#=wPhc J(aKAXD^H}ѹLrxg+N0+Jkۃb8 H;z +eBFLw13r:j8T͔QX= + +'`s^ ,^|p +bޗ.@\Ev;oJ0)MQǚw5&+b 6WaP}=5B,&p緳E\Ng6vz瞜_5.|JM"c٘\v["Ztf`dԔZXĢ pә[+VOۑyۥL 7shWtO}20[XD뢽"v=b +<( +ڳ>U+uq71) qW6mY`a4N,nUyԌİ!]F>9%x -_SNYF{O˳)@6RiT|Ȁ94y{k/zÙc_mN[OWX|g2g״Ly Pb Hi]YtS5~]WmZ$;Qd3lF/5mhl`i9j.Mr\CBΦBk*aȲQpn `1UH+r8i}u(N2I@м,ɾXV"OZ]^^!5ȼvT$VU{ZRl$Ϳff@FY>v֦ f |ݖ0-ahAѧATZp t̐ēLE2_?<(hS.3'q.hR6;w)P oo/ɳw?}}7/x_>{%'^߽;/O?wyS귗'^>ۿ"|^Y|٭˗T(w[AիU\uI}%<U'd]'iMlǢ5|'٤#BEv:x^B\'KۚcAW[Y$V,LzރNAJ,wkBGձީ8OY(47pW)@N.w\_˼ > jyE[[0#.u :WTRATaEsK zcRBqKFvhއ<]*hzYΖu\A"R7ln>S;l$*&lewIT#ռߦUYv;^mlj5rʜprV{2=7N4@4M;w[ʔmM: +fDmU-:[y[WDg=IqΉީ Fs3ʽJGJstqD]QoFrmBf1wk6D'Ta<r0Y!"oµ A5j(_ѕ C8BR''$ AA=_>N0Y*JYUfLMT7zV +ADooG? 0~6Էcuf3/c\e1 Ơ'Y:G4ψ%7MDʹ,@2p!ä<`&>zGŌYpdKNa‘іp[`@HvԁGbs#&d#3mq O+9ORGZI>I=⑞&2ɱr2&y`GkģQr1G(KXCЂRrGWmabVb Voc] GQ|lf7(w4ȳ %(t`(P!K}!'m4IbmwT ncɭzCDzurXh I@%z޻].d=*NGYHݖK&V]#H2JJ21HRgp^}[Zҫ !\510M m!PL'cI'kwq[Int,6:/);ӐDS1;"R䋣.+0G̿8[~H?iJXP6zNIK&>_uTy}b_$ d"ZL_E1M ;*FJ\R*!Ju e55EReq^5҇C',b'V'B-ˡ=Ecq?\ T_hǹ}ks9㿸|}>+oi7m_}_~O~./XG'wqHHMCWWS^Ϋ  aKaΤe$P! !]󂘒Ztn-<. >uBhW^b +M- w2f:VER(Rø 5.*N/,kMBOh%3Dx +KBI- \IfMP3w1Sy̝,zl'/ښ-'I!$IQŖ|&V rh\ݜ+;>eAGS,ɳ xbTg)֛xi$MJfgaJANS[#) +8XrbP٫ bMܳ8kVd(h\=yJhbHL^PG&[}w*-_Z/pxR[7lk/$(D@J'ag9=0A5->ZppUUDgde 2ܜ_I;ig1 $<(k!|be#]NiX)]ArQ94NnX_"T.+ .aj! uZBb\Y-'hCj Z^Puy6Vƒ*-5ie (bHNA\bt8YL.~ɥ[B,fߐ>twZ+*ݗ2ɫ6w^{~%|?dƣUo!0< 3s$˼;T^Nu@~<\.)&)b!)wrRfJЭ|EX<H@s~%H7L]@h^Uq=C8 +zjvat_wZ( 㬳󬞷 ]u=o\>zF4)44.Rļ=-zUSsnt`zgg2z(Wς &yZ:w=F3s*98n LT> ޠDم(7G +k}IG t'V%ud{f7`)ytS]KdF: Ás n<5a$D<,wRś-kW_p}b=b@?;Ҏ `P:J6Λ%e#t /-;VS +e ]ɪd*rXX͈:#;V$3Bs]b RGXIgu'v 0MI?HJ+f!jb{j| $ n4 +4 /CKlt;zAV<1,[ 4֢Oogk1$uuApkmX 559[fAVXQa:c]SB*G7[V2aq;X:JȣGmu2=J9ÂQ>M 0r~=?YuB!U+LSXGvp䂾01YxUȚoOk(JMShO\+ ɕI8df]MH^.yV+.ᐓ,(hi:+CHlP4{xIhM`؆(yx.g@yR|sBOt}bj/Þt,+$7;-ԱЫKRkBQ=H@VZZg+qX99VGlL/)-'/:RM)1rA6tANNY#LN]ҧJM`TgRNI23nm2):7PÜ_`)2:[&Xo Z_$8,{yƤyi_fتcsY?ޛ$B _ JwǤ|`,-5gp fGe vBvmYxhq&$qN'3PLQ +gF)QR0̹mpNť{C™jtkR I\8Xi[Y/ȼ/}[t= xdq) 婕d]v?,ڟ$otumWV&03,ua(.usցWQ(Yk vwV he!K5!Jߪ} xVŰ^ W~Χbd g$dmTwyn=nƂ5bM&}btj b"f޸GnIk0ģlgs*; ȇ&*]C\KM-R1V)(U㪰Wtڵ[%iL3FRn#F b5$h&*vi0BPLXm9.toҷp~K<ճ[HZd/(#Xc$/m&Vޑ]3˖HZކ2&]`r;\_"K._ٿ[OrWiO)+^#$L`G{_@BJs&+Xh9B}<ɪ̓¾RkfGM7L7 )&dHEDw'#'eɭzXhmBfI ^8NCJ8q8O+.CgsNs_}oO {o~qoZjdzSAr\LR<rUdiܵt͈[>zúEBiЕKñW [Vr*&}~n],vXuK+&V }̳"ߊޚc7^3z^uDѩޒ +Ǫd[Y6ww%T]C* }UwUB>T>3_xF$l5JKVj+z&? +l_8xI2љ$QL ;y'Rq} b *o;x$9O'㢁Z-ŤiB03 Lgy~+|X2Y8睛GG^'J{TĶz~O;5QS$SGx҅D`Yn!?;bpr7nB'<7BKg uz f:c=&ure t|=3rXJC`2~VhǬ{C]̜l^mb1)Yֆ㙲\`oWN[5FtZ|#d (pJ@Q(DxN >lĈ;G=F͇vX<ӧ.n}t)ySxP +ů߷-Q +5JKoϜG\??}?/^ϟn~|ˋwgۛvsl<{뿶w믞Q<{o^~}!y}__^{27kyk9/Ϟ_^K dEda {^_x7ZɄ1FDYMg1 +6f ֶ6魪s\BF|!0^7 Lw//`,A6\9PiU.""/Ֆbm\@Yx+_yRp\odQsydqJ\ =b +s@5 +hw/WSUlO ,>stream +HWn\}.kr!9/q뢆4bJg[+z3佻rF"khg̹6j'T*LY)&e/GB::LjߵݻZgc症/ؾ~ڼ0QCn{"y{ym?l?Cy7Bwٿټ؟, Ѽ^o/G;` v,뛫ٽo=Ogù}ȷWg|$ ڴiG +#'77oNg.+^˲48E׈^e +_۔axQڞvws ̄`T $<@.bhLЦӹ{ 1R|L9@)CNqJ)bP +(1'#:,mrvt?UJ֭\܈XJ9=t!ʔ9b-H~h) ms.΁ jX'A7sbjĥ.G7MZqi( IX#qjPZ#zY ;UqD)r]Rtp5Ttq E-mW$-pݽ4Xlp((q{;E`*:h-Rˡ+dZUqbO<.+_K|Z˴Q7O$i9 ̰dSZ=S`ɬ#~GUБ2Zmt 5x 몸7jB)"hZhA+Yu#+%xDrEܬa^<tkF\,L&Z +7UJ~F'|zlD Y/h jn'ADR(T@Mvg͘ND5}dۯ;6^4 ~y;s* +};ajV)Xn @. +τN }W\W 'Z.,歶4CL+Bu@~k"(ųm|eݳ %8۹g.#Q~RP@R҈`-luP,e$haFc%sHؔ#DnĻV:7gVO\I犹j=J5cյ /62pV1@݊7%?TJhz[EF( g,`z#\1>̚+@;1TTվxfS +[5C]!J9XG1lЧR,SA^|H->ˁ%Z xbpО+_@1OaPY>`QsdB[SAN~6wˈ<"y2#9r{*I VNbABH1V{c#ZĔҭ0^: RWFZR`+& MhM>76/JDPIy;ݢER!o% 9P9NG\-9E}֮Fd`6qD\}"ne%F=M:JKCt>hYDY\wQдtq,r B#!>&q"+?d#.P0񩅺V-+0R=1hɣq|XCɏ *^0C;C vpgͦ8Q0Q=OAE@@+nPp1dA;HYP?*˄4r7-xhlJ +І@7CK#ri@ EϮ9+pٔffm9|udhS1VВyyQ@w5ъY]CОeJfEOR1p^&;G~^eC̓bXze˒DHX$_DVGZW'Ƭ̈" QeDMPNjj0)P-81fD8-p1 /ier\Pub G<[ydZj+?2 +Pl!7 ;m?C& scnd4f2.U U*%'> kЎҳ?ZPz|tRBi-C) +Jnr| RC;PϚP L38y O! tSR; F|uAb@+QgwÜ`y`UMЌo$S1ʋ&Kş6/ͨA*թ$)fe{ѢϬ7Y5` mO SE?]qCJ41X>c(0k,C%G2g仝P6:1QIqYre??Rof]IJ$|&˜=(8yXwjP7$9O;x}p@6V;f҇g-de8q_Z{ш[kqJAE&PwN ^nT12$"C#=たK"|*MlIǼnPӤtD;~jޑ ~!.wBD8WL%<5kҩH7)2犫dny@zM2BN?3̓^oxa$ ^\quL޽K$yEkA@$!gJ)Kzx/T꿟U+hYp]- ZUͅRF'n5ˣ#W6ɽ):w1Q nEh2(z  c8.P  +TyHx!ki&L{'!kL7;n2mQސyqhh3jJB<‚ݛܘV- YLvS/D9l7+bP4u9D$»ȓqm7UfK|nseI2{F Y=͍SjqBy,a5%=ۗ /V=3F ࣔ犙mjC=:cXt= 6qUtYxdRS|Mk9ր 6ȑTcGںmP+av'GCRT'S]^,ilgE Ԕqmczm;S$㘕$#=,U٢>!rK_utu 2A|]U/D+ΊAKg8Zo1L|@9e#LőL;قF:*eN#4JA3yпzhMI-"}7c=ʁWލ=,KL>~ pQ2fz8[Pr%B5{Q,~4džS{D :$'n{A/t=eh =:з5IS!Mk8I;g+j."uL( D:28KGù,ЇXC !1e5Y"</H_S--: L&4OxJ(zW}x;!Z= PLkC@;&)luJ-1Ө̀PY+|Ob>(YMBB:;5ْL%eī^j$`.fl'ò+;V$Qz^۪#.*3Q +G8R2 Oe%0Vk tNh"!-øv)\݃'Վ֢4w=yE R]7VI% L +lY=$@J } և3YR1,Yr8W"h(=H)$ + Wq%z08* jS`bZLI +Mh+ 3&>ngOKY԰&Ė$ژ {mϖx0Wxl}G SWyH%)M}# 2D" ̓Lq]H|5Jͯ몊vTbS:Vv]'fD/#ct#i*T:4EHmzbN*Erjj8{79MM ۘv]I/U0ߓϿ篿~ᛟ~3'R>?/_ۏ?~9C.{^y؜Lߓl䪺qڏc  `$&Z@,P F/s Q%9!.#q*t V[>OӐj(b^{PNMI1P^/WGxb8($0I ]Y)`ni+`-g7sP3x1ϛ}L WLz'ڨ3B~9 qҖ-˘kqY120gf3 \0r(%e.0|=⮮Ĕ}JŢ눩 K'6ڑ{ HW1fPo!i7e6b2&%'ܐK&CC "$I@x{֪rH Fs:m\0񂘴`1="hȹxBG:ϱk ʹGi>D҉GXG>7il'DJg d(EEs,4/"'} h='Z19c%GK8P@9v&(ESژZӫU^9 HDžJ|@v +9D~D)PjX·m#U>w%T]NvvZS -yȟ`ө нq#9}e,HW r]rݸPI,*˓RpF*fBNv!֨cOEmtJDPYlյRk2PD2n>]߷}~T;&9g9|_]R8t'(3 PDm󲫹\EUMa蝹N-yǴ/{)hNbFZ~d鐋td!j2R@^"RUEhNf/J' (C kB{FaCުkGީF%M8bzjhiUqzhD/[y\a̡0xMa:d5rGvBc#9ARq^piA|B6GO8LMR0At,Y-l(3ѝ ?@I/=+ƀFF=eDVV*A _2rY]x = y,AT>Es +$ (v8q<-)?`mFփ3 ΂eI՚wj!0% J9 UEY)x*,r.QN!ȞC\ %O#pD>֝FEX&P3>˞E,GxF 4@}& f[z!>"٢`_>sNK*E°5BIh˦zS._ @lV7ꩅt$Xs<"8"x)D ׀.-c҅G'DnX?,zlBHxe(ES(cVU +Kzۭ|TUb%#u1m6h_&bW%Q(xtI'aǭ0~{F^-JQyxjy_fKh9WUxEѣ1@Z}9.YhcމVXwe6Z(eg~32opY2l;H>sM}VN{VکwE$GYKIkB.b|(%c(x%H&hyʖQ -~"*X.~'7 +Es Nx X+<dK(ٛώT/:„5HA[{|jkDQ"nN+G4HHʬGxDwc N0Xg|㭜Aq*R` n/$y*r/ZJlLt<0S6t:F,,q$G.V?a]j1;/YIKDW@Gd bjfɢpexfP8?4^({^'ށ0BL a0fݘf>~_V{_3_!g w +@lȋ%f:ͽzWn[@Px.8a_uډ*h;6Ci@C+J`otEgUk\>F\Obb:yCJI:%yM"9IJjF[y f>O\ 4WP ҿ~u(u댭^.=Bv="d +ZQ] 4)JQ̄7k3C Zn- +2'$A/%Bry~{ː䦟z<ϫm +bG"|'xݨh㳰lhs'LngHEH?e~D:)hMʣKaz:oC-s4άFqan务[Dcr)΍ϜX8qtTJk̂Kĸ>;<s=K p +WՇT#d^! i*\Hu.*y0O +xa jv:vۇ4޽ΜMmx[z"%qKE -zQz8hQTek|%gؾǫ f9T!\i5]1főOʑs8$3%"@IwVw[ n9d /_폄~_e岤 +¯mGvTj " ʝ +订v̽V\HB>~׿ۯ_όW7zOw7;?!/NcC?4ZA^K~<_2]hɹT~K ߄9y>-*.U .ڒlEYR(wIYH2 6`$,,SW:e"͇GXp|me ;I a!' +pvtbHK,"!g-"3KճcU݆xg1X:D/IW6ՆZ5@oDyaP6,Qu}/!->x<_m։ԣ*K9g/t6XCyqM?n-QXyqfd@]G*- %57q0Fw5s{~\y`]cI]]v:X1pzqC̏&RI W>hT5ifMd4C*'' sPVfNb FI"@q_q2H5kftwD=Q }ŻFO*Qymxǐ7ܧ"K믏V'w n$ iDL>ab7EQ  _Oc8YI\1HŶƘoW{Ba}62oC ?`[[ʳL-|E+\6JRQ7z"1zuAȥXNodxc(TdIO, 8WQ` '5_6h[˦JJq2u9[CDžZko,|!Iɡ6L9zr=vQYarfE><(^H,Vœq9Ht.>}9uSZ+5=Sv +qFEBPQ\LGLsM{XN^mRm`3@v\zNy;)ڕ$M Oq avwŽ9Z|9mRy7AȻR =68mETl5|"2Nk\hicD,QWV/5I;-/JmHhF#"RE>1MLRmR+S1PQrz d>:fB2F8O83; +)54 \)yV*>MHmvhG$ʍGNa/xm ݨs3no#QdBzMv-zbyS **Z%@kϪ*.p;ӏmD,$o[#5 gߔuԇ" +}Սsk P+d|Ʋeã)4|*PG1J6ltuJr܄́bVVU`t ؠBڢ|u~xE;϶-~HgT=lM6+QPq!kY ]C!?Zm*9|BIs2֣2hkgS-+l[~x',n+}}k?\3ĴfB̳"S硢WnZ!FI&v+.3& 0_ʨQt n 9"VVE/U-7*VcgʈU,Z2dWFDZDʋ + 44I?2Y)lZħT2BFT1',TN65v!4~r+&HebM.SkNyY7*K܄7Ď>3I] wTn?߬{9١ ,%1;ltSr&`A^ (Z +5[ִJ/ibD\RtXTeM@LNTx_5 ~LOKzUЄfEjDu(/%gqVq6zBu[X8^8prKu|KFn1,ٗ%VHuPDp&U͍$#W36M"F6-9&N׋Kv. y!6A0?#ɢ+\YS(>-(4{[mؠ$ +v*pz H8[GyvXIq㦷Uɖp8n%㣒X*5]z0DZeؐul!1M+l&PqE1SRWh>.%0 F?=f4[Sbl:0q +y]ғq6SҐ1|1>i¬Qا$(覵am> r9!jhrȐ* L1qL"O*9{T0VPxF#N8+:&9CQ"nB{+Vq}*ORTM5s/ͼ5=)=Hd Nۘ"bpaLZ*(WP67 )%dB}k:T$RUWs=("B*,ӟe/]`!X÷?l/L Zj[=FNbt٘l!7 kۥV#40/77 f26%+P喂5͒\Us7[ˆpTtrCV&N6=z +LdngJ +Y**)[L][.$(x>Ȇ}`zrב̍?yj= ƹ?`*bp"f`d!/dFZŨ; ^ERIRYO /pHy%[<%__41S "n(W^ʲp4Ȁ$F\c6(ت̫a7Yk19i}M Cʕ d;!iY G0 -~WO|K-S>6#H}igjfmfY ⏪`;ڌin=K}@iPԺi.H a2g;Z +N5{Y[5X4t8'¥{skc#s'\|}rx&REcmqؠ%SBsVA̺)JϤ|&8 +gL  `}Z!sebtG~ dcc.s1ξ[[D~k}ڇѸE͜b_qZV +g .,1+:7x" zҮ"tV@D- 9Zd ă^ET]@.4pN>q@e׷27燔zyR +O|7ċ`j&݌;>*٨ز{l,#=<9Spt{M/;VHlp@8!{iPT[".RvuƅJz=-n0_9s!Wu6D^DcMeHe|W5mD4#PP7 jQxC7wʘۢ2Z=DjȏbB%B(3o($YB\C,lf>f; YT7 +2ХDI<9q 3zJB2Ečjpsp2erXM |waC٬Hш&6r{Cj +[9fKyi.s=Љy\S@zAv/32췦$7!ƓULN6xXyJi|W̼PD^8:12x!Cu#Snu]@$$+hEv˗QޚZvՌJ&CLNJ#ўJOFGOu{DEɍ̦|?3o֛?ٶ+eI2DZ]B6SDnIQ_nZ&(/yLte̸Y*埥u#2'oDd4_F)jeN#4SJlȗguعormn S5" ?T;.(]PEo(ױCu;@qs7riuQ-9OE$ͅRM6_73%50B喀 +aJnM^oD( nV qcR&n{A؄?y/ ]2nLL`%з?fmI;g+$`=F1EI[{(h,%fXxb>6#ii}'V%> қg'ySBѻ k!U|l +e_;,x=*3 5,eV +4ʼgVPW"HSZcޜOpDXRFJ2tFQ6QSa7E4[<`i!A!(TNuN=Υ{ntuu )Uv* Q[Xj{3Ө,Dž4{iK&}fR*\'z@),@gU`v=uWE ;T/^䷒<͵Uܜ`}0mo;oB1,YC\)KѪQ{>)$fWŘE'RQD6S`bZLI +MѾW<#2H3f&ݚ:},K~ޒ;9dXqUYJMGtjq ]HHr(FE=?lci AE`ޛۨD֋wN#9'>8*x*>8\lЖXW]܊Z +&Qb=1e!_FFVCb PݯC*qxq>?宣NWw!I@:BH=kUو`kԴW%09|`=ɤ\>N,6qX{vy1GmGbr%JwRɍ9̖a%~˥zLVz*+pVa.< +EOE$Giy +u-v(Auv+Ȏw\n#fl#gG{)  P:CsOVɩl^U8P~'`vp.̍{ye]`\1(Wp$&(>^ }yYc<=^0+ _y;1i1Θ^ypK|,GDMVzjĈ i!츕cuEMF^Nϝ5՞4aQ "0.2 H'?,fVP.(#r9-*i`TEh`8/ SsrC2z,|(ZCgӓTfeWts67pa~Frl$B.4~j?6˜'=/ͤM\QX{ID1CL ɗAK+@q +J:as=ҡr!w@HZGlּkũЕ>Q S:šHF!滋hQ6Pͽ|A8gնl?La=`zX#V5#F:W?ڵmk$iaL@*Nи-9v|ז7 <s7*hc; Zl'rcxkX-zGuQP֏Tl9tb:cz.5!@> ca˦uN|~P%5vb=}9yJ/5ќi9Px]65@-_"[/ rKܺEUv8Ը#(`*.$ +k,DYXe}Mq5ebw:LT`s3*qy*;h%3Uy#c֖O-3LkDj)^gY9pT #z;Q8wtZ-U"1g%mc8["/3m-"!IA^PfX(/+~썉]V} I.䡩Z))F! ]6ztΉ=^;}8 %ځb跙ʹ |1)@wϟ~#rG?.ZΤWPt$ cb Ү4L<=\`1PbgJ}I`4_|&3Тj1jt~cj*=} A~?P+3Q `gANjC,xUa#• +Toj tT-v @Zҥ4ChwVިz';% +߻2zT~:24xWc,^AcU XݭwhT >z:c?q->ꝕ5Sɍb.{E8*\2 +vHU(Br8S{a`uScЎȍpT=4?if[9}]r|n\DIW΄v/PCc8_QDʹ+2D%~]ɭ ezZfvçĄ<=;{D5JP`6RZ ZwJŅE[;iPR7^pZYMڴ{wE gYK˂ݫJcfZ̈́.[GdHw4!N9WE&*|en 3}pK0z_c-2rj%AJXpΉ0- +I+?WeXa3iAb4#+# ++usYSZJ_c8Ns=G$r-hU5펇=)B91@|㝍Wo&+ +,wC0V_^bձCX/-)#bڒCBpW;65=zɻkpND2gS˻!gh#Oiw#\pʌnO` {W [Yvʻ{PY:)l.0.7zqet18-]#ֈGJ} .QkXB`pX,8Bu-9ܮA}c; sIdNRmXE$l(|e?89l>٧cFrB|Y]wsVT p:ry +.Ȇϫ?kP<;!'*F/ dc{/Am3ZX)ibЮ2y}r +] ֡!X*]Z%9ثmylyHCx -8u=L6=`zOcaojybj5,eUX'~`r7,G. ;Y1cZic-. C O]'օy c1YŅ,STK{sc%D;8-"8Br:R&5|yN<8gKvY}hIp-U|.:<4PM2 +LQ͛C|̜~왶r8%ɥ Oy9;t9CV +J627 HDL)Eɐqh?_^h&nDUsYySDS֍E#@5=)5M2J5mtd)|ԻvPb:ͬT4]!?'~_ǟϟSoI^.+%E~"m/8'PR[+29 >2.矾?EkkV߯?gww>/l]DL/4ry@YFKM9G,Ŝ\tV,9Q@@d [Ѽb_JгL%]d([6dCڶӧ-˜*3^(F;,Lr|*~$޶Oއ8+l!n]̫2~s K .Lw!Ra&yxRukk;j~7#Ini=Ck\=(J+|Mg/{9(ۖv.Je._Cft]U`A)wN=Mg@ 5&fd=7 ý_v.av|6QOǿsU,6PAȁ^3g + :}(U/?аj5 +?U/_?ItY@&٫'.o4vUrar{E{T<9VJ ?ev 3vyqɖ4U+wp]І@$UއVu>iq?Tz4 +hc>9&GK[JwLi*{Cbݫ`* N'>hl{H_>],)WeR"/_B ate8bB(N._L1(Ùz'y2:9Eomaۀ;Wiimdt"HF> c&S*_!\UAa+74ۯY b|֙wᕯK h4A +\6*=kwq+]h3eɩ)9ana$"ӂq0raDIF7gd+ 7[']eI,Ѿ;zq8#j&鶤2jqf10ah^G4n1ɋ%~ܹbʁHHkp1 +{1K ʭBߟ%B:e@ ʔ%ERx1PA-9/Uv{%~Va(5" MBY.IEܣ[z"+~LK[UeF2Չqz ֞{?ǯ%, )+Q%WF=-5Ym{%{ĻkT捦.r bkqq|EnAė9v+4v@ OJqk,sˆH3 `yV4oB@$B|ީ>;XhY 3Բ}؈ja ŴU_/_)ۃ"mâ<8| &x8fPizxA M Y=\I73]@u$S4d3eT&9ҥs(뚶"qVQ^mR5 颩wLe_#Ⱥe5Ǻ*' aε&irj_gV*++i)K3RCqu$OSҬP|PJ][)8!0ƣ96-d,: 6 \{mbF y&/x7E}Z"P_ިB774P;-#dǥs\"A;)BUr4>`SC\gDOgLJm.0gzVx!u8OO8t:JTl5&e!_2QT-iND,+NKu|pF{+v!Ԥ(j:ZJ2/11M2&qk+V N]CF$h@E(u3cB1!=;T/U4'~R@MTImvG$ڮF{l]c^L\嬓Usv-_!U:]e)}Hz4uVd8\+ QNMҶH^1qOB'`|~(t k|<|UO1N4X>n\-hDxZ^ J b&t'ʜ;(\< )`ГZbPzls6LW֓t ؠ* +\U[ +2pXU^zթ$ qbYvqYO'ooU5ڒ!#TKëH 7|g㴱QU{V@FL@w>e4*(|] ?ca;=ic %%S/)}:'l52z&ϛ<NI)B2V4_H|!gݸ?p[-4LƒVܔprfH/V'$ݛbJ^JM%M>w xq- $7A`5*9r#S`S@uS 7߬pkY+U}1VFI}J}Ii}#CA>PdיqP[OQUZ[_q{EFVBp_A("Pk/HLV}MZ/5| LY+fB܆(SVP>zI8Y0:ũg :߀.G]vO+ j<\"WFַr(懴/g-o9a|r*vVUD -TR0кPF{J" x:Ԍ6ƹJf2;~Ձ +'P([a4M̥Og}ɯı??~|o'ϟ?{ӻ_jW_27/~O%2 +Nǟ_W?oO?y >uO'[GI9~g5˟_ӵf8$v6Ƙ"?4F|MkT#LeѤQ:6늬*Q$% 8r|҉LH)SUqƌ#vaMvR$=u R2 G_Ce4e_kdAw% g(@RY9ⲩf"Q^UhflrTY5 S]FKqPAѕDj w- ,UmZni q&;IqL gObEL67 Q֤`-JZՃڑ^c +fQ\sL}է򳇤nH'+/ee`κ Gj)G -)p5~4_TO6.M\&PVUI}Tch(W> -D>;Y eLK'M_8CY]K=-l2bpJUQVd6-Αk2PKBw ,)xV)U,JpO;1 `y7`#&YsݞCjثe$TGV2:T>d-ո3O^s0٬Tc݈a yt.I/VEAޘ 6Ԫ3("EgG\ +=QF>+&An Έv2%A*x2U#IYRdEIk6ML90նhZ&(ǠXÌy#zCR+ydZ.8ɏ .M#7b|r9Ƨ4 ˺Uu@<-"|AŚ荒tMmkٮ,̀쟜4Hfj[EBll*(܏8c:"naD7¼ +(vȞ$*F1F)~UZI.B%:ydGKζRʬI=ڤ,z2@j}.JmU_J=#(L+NBXW uAm%h@+g]wwM0!"3~9ST]`ݽMHA}-1L厁{zZKr)*º7C8 m?.' }+cc:!듘5SF(6k}^ӡsbCGSa戢˂ie4˥!)/i7Fͅ ٨P\oi;x,N]Lh֮,_ kH@,?M2V}l,oknjȕ j,qu@"y agE K^ёkԁ3>gs,[#G6!ęE!+eTl\@"7>Ŕ"rXA.īHZrL 3),: %Ps3mcI%-Ͼ;$Abz1s}i_56՗@3{|@z-9ńPwii#-%JtF']0$b]f|.Y xoEy\P~SES$y|HȨ'^1"[X ݊Pt;,CL)V[J>T@G!ɯَx]~/Tbޘw_ĒUuWnh knw[VA | B=Zv~讫 d81}zPaS*sȳ *YDo,5X+ Y5ttgT'n2Po-ͳc{[2Rld| +9#ut.o*e 2,pfl!3Ǜgk8??WDO'9 ՊRv &$,%hjEtRHG,䶤;};6TfYJ*M2jZ:+eJ?S4 rVY;eTUOmJ[N}L5ab:Hܖ.>&!tN +LYC5&<@C>I) 2籮_cJAru@E4,/y߱W)ocNQe):(W;TWK=ăh:[ۃ3Xɱye0U^N󀒦x䶬:)W!9\=Db?9 endstream endobj 28 0 obj <>stream +HWX ûHE)JJOI- + X N)PoIaW(j8?;q~Yo9.2{Znuv6ek'y~ǎ}g9|Yֺmq|sm{#Nn{[Nytbk5l+ n" gCg'o|_M+ سlnɇc9s\eɱò,mtxuوmt;pi~Dtn ‰m:Fnh|<:6ӗbJ"{tiov?qR /H=NC[D̎{W~0|)XG[]i + +1OdYu QAaoJث]<[xϭl#6T`^W>gC\ )3ey鎐&oZX6WLϪV y8s+1dhݛBeK[/LESo)nPG5k36c?Z(jsY\nq,Ywi| Tj?-H`)Ғeh{qC(Gj1g2ByX!ء63&$ ?$:[DZ|u,w_>?z}g_SD|~}O7|ˇ{+V GAxqe*Y@#2@oVHY7Mm) "}  &r@[lj0ӧ /8G{ZN\ +1ЅNo%g +T$YAL6^1Occh$ŀ0Q AS؆dk QFƠD"o?hVERBC`ɖ"mÀkkU8Gitv7!(`dհr yT8lګӀz@U/)sm̹[ +SS&3= @.Đnj;y+X@D0'f^*]~]+č{ D[Ypr U`8ZQCwú=5/2G&})y;8`[i.hr/,AYŧdl&:%Hu:}.9ܵΖ7M[om#UtZUQt2y4L3JAvƒ\Ѩ  R2eKg4xBW3| &='_{@SGAih|c0eq2 ]q-h*'H08-ۋ7yRt:#VR0hX#9AN筗UЍVJf`Ԛo6/ Bao;k².Jep7"8niqᢖ(,s@JQӆT]-,$tuiBdGGRy&u^H,+d|~x(:&&Vd=~|e;1vD @TT>|6Z@uEr@$ǂpḇ죅q0jb҇'/n+.ACӊg cݤ>DE;BD8{QxFf{D7Y0Cicj +f[1V3^z 0]4I :LЮDP2YIƗSd3'lGY _Jo!7DkldGh&O u:}RK`#O'ESS bqNNgSY$Q6voGv `ɁM gڊ3RYY ,2;ڬ,ӄix[ P`MTm<>ma>S~= 8L1L)T88 |.9T4b&\jOH95"%iy\LCR3)#HÖ7C%\{1i2|K~|t|I=GG+T6s^}R+읃ܩۑf;P ު)9 5+>*K!c)%₧V*:'NӐE5YUEt U4[iṔM`u3ŨA&Дf*Omjr dzT-rT$GͪssAux]翬K'EſJ-UfpV.gfPi߹B\4ݕ22#o{U D|Lh_d*uF;7WZ{P;N-veFBB16"w@DjĢRgx҈ + k`D 19?4&wGQaOQYtP7'"- +SzN(G,5Df/sޫLZv<$gL@uPnHA3\QêahTib~^5Nc1udz4{$="3*K,Gxq_1^)\&yCoD] Ҝba;M +^`7QY5yE%1`'Γ4bW +|@+YDG׌Xs 4TAAʫopIIUH)kS͵Q3D$chrˍ[ #.>55+}pC}fL":#3R{ݡ4>]|‚~WhJ$ZiY3blA? ZF;AZwli@)Ea:橅:;T^/c{eh+]}ٰy;ldC*H dAX??Ki:'rmn[>zCՉ#QH=&yWg*("JWn +q $sGwQNYL@ڋ}RWиPn1hS&LPt:SeRgume\ײϲ)!#d r=D+ 6MRe@/}r븅-3opiT"(0v8a;C,L9sxH*MŊ'FY"ٷ{DT"p-R=(x(fe%\6oaTʈ +_L u"YV-l,b;+9d2O[tmRG3 K>BduI;RcE@ Q%Jw4 +fH'jP,u,kS|jL&g* G 0kqT7(r6"Q :sآpqOP8Ya>o2jUunM' Q+u#X=/q-|w;[T6RLݬ4Ĵl['y]<瘊ӧ5myP"tB}w濌 ^y].}8Bƙ01R/%>M`+x +)M-8ݜcM2k0Kc&z Mul? \D>wbt"J$ ] ,g4M@8ߡ!C~Mr`* Nw+I46PS$ayo53+v!zC?'tp;\ja>Oj̭y,"a. ,\\dT* +,їZNn瘊!ZmU^1}lPb^v9('dmuK6kT{ pk97h.ԩw{9@*~2+6ip`Tg>Uv뻯S|k*I2T 8 |&W.TqE xU /×sJ*/\;%=^nr?|)q {.Fu`ڎ ǂؔs$uSU*1L@c4 V~C87J#mvہ`(q_àY_jTXG0}|ǬH-@B8:$P^ ׸q Xeޫ*N׵e[To84B# +Ld>ː$ygtrb hBh@RPG*fT؆ﵳВpj U煢Ғrmg z/P \}3HeCV9ǶN qF_?9}JX?9U*dy +s0"-(K.~ຼ˱Ty=8$ 栔6#O<\ovW^MĨ`DtU} + ĈD:珞R@XimcM |I;֐ԒlуT^!pnFu@l=)M)W0h\R/'0zXƮJD.QPG'eZ/EL{VX3nU1R+LaE(%60_D~+܌\Qm":ɰl ys;2|42V2Oĸ8O +2)!<O>v9PyF>)?9Wճޖ %vjϵڝ*e.<ОZ$UZ׳>gX|iqzLlX?RǪA5Hdq;7fSAom3:1RڶE@+ e/ Cj"Dinsvs aMzTE_dw!Md;vTfpj(&1Sw*Ss7 H&񱭭&˘3ud|{ݸ~a*9v! ]jQ2b(ŚNh`Qso"h Ň4&, +c\Rnw9U:V¡dzs` $h@aoAzv3oY$-;4U>Rݓg{qxaC98x37H%>B<ӞE TjjxmӖUgHRoX%(/r!:-ad[CI7iOa ~ur-VTjm\u{\}sU8z.*'rVuѣpRZ3x3gZ>>s͢7X{82šU"Yx\Z%tF硚ĔD7[ԫ0kܴSsβC,-쮀C.@"W@Wbvy:QLK' + x}wG ɺr+<":cv~>D)dn*j.حSH5XQH$ #LI)ikw,v&9!-L[-?5좡VlpkhO@JG8DPy72G,oVU VO#lsyT8й4'۹| #& `MZ4cӪ4){x +c GEt*K12i`^^툰 +^KHfѫP F+C?X>)2Q"]ԛ&ֶy'O8A2х%& +-" xa * ̙lp;G8tXR4 lK!i#2s19l..ƅ(J>4B\߶ukˢq%Wekp=uF S]{[MQ" m ZEdZ-(6??O^;c4|ro??~Zc?[X/^~/{{fOO쫿~~~ݫϯ߾{OzO~M_G[ >|/_7/f\-?^nw9~(B=FN!q"ZujҲN]f!һ"NR^q5G3MC)kcNEÙT?Q8BM S499IU,]זH% ~ LR +]UWJռJ]bP3hWGkLáMI_^i % qH@9cI))BFzZقQj4ѓCF:Zw9= fsJc6ԒTyw~cB FbGҌ~ǹ`VAVRg +37AK!s$m%58 Kd"6d $`:hnO_`U6QԺu teݑ+J~GK-s|@_B)h]R]2UCq];fj_n?`٤@?H>#Qz{Q=Ҍr6BP+ib{"SNJPe*%VoADM/?߳fSyȭ.ψ(ZK+G (G# ub 3!kx79"BCbc,,*\(1S/tFzEDwuycqAt+\j+u*>.C.g<*( csꓰxߦ^qzB4[56,{^Q Fs=F(o"wĩRZ;H\3dTuHI;dO]^;Y$AmGhJ,4M727eRW44(̬'CٌPܦDX[̟qjb\K^HL։BqF' 鐢#b@Ft͇8-KmOՌ +*sCp抏:Dse#\IHbxN8碲K:. d.D yfe9gyE&L|@gƼb!Co$"XBT9gT)3Ky5 l'<Ȏ֦ +vđ"ʜoԉLZEb4yK;BUEkU꟟ⲏy$^ñ/:Ӱ("SӾvxwC{:A+僄 ys!qf2#{gIN{mnL#63f O'8dNH(Px@4(e U% +ڣQ 8U>91FSlJFMp D52w5l#$F 7&bf8HCaTjg/s<@~sijNgTZަHUx4:•f߶"T#+tJ9+]A-0-2%^K/Ze +Yv]zhih]JDP!Ztr ` 4kfiQ@Z>LliINR/_tz鎪f*TzYCY K@EXάK6I2['@\ZxmBF|J re{eJճh>iYVm=P!3ȐOUNS mwf8+ft+ ٳ2o7f&eVp]|XG_')#٤{* KNH Fub+aS~bri˾U Jpng;kh,Hmx#Nz&E}^0)*Sbhl#;3RuICbGob6xMӛ,SE.c?WC1dD :EeڦllnB[ыȭ8&)dT]"UKŻaBBtLQ Pe8|PX(!G֫z%[rFPgRHτC!,lf ?fY[`*,x"% *hŌ>윘ǖ P!^Ζ6 ܥS ,ST(+ OٱϸȑclTDi4Wdtu<)zY=ŔBv?Ԩ:cׅ 4!9>lx9U% E EyQ .U_zUQfXpq_WȖH۠Ovzdn'RI#i>+NH.) )GZS-XgE{SҟmR;`N1,_FOt5Kѭ$Zb[SvC,Y3.-u]uT_DIj]MTg}(:Ei$~J IY..Ng?QStADsZ@T$7 W<;N"5QE.@\Eo)n\uc%B,5sİ/S{"$^>!B1j82թJ>C1 +)I@ƌTFaZ{{W =18Z1._o?U&OV$[#)NjֵQ^62mb\%CZQL[qKT ˙F +Nd)T9t>-h5éF)Hpd9 bîOUDex<-Q#ݱ0}rE&&ۜ-=bXuNvB|%&9Sӳ=7OשWu$O5^&Q2 lzD:# hQuU{h""HcnuӫzFȝ~n#xGPܖz>GRT'Eդv +!2چhnANqBTk/!"s0$=JA!-b H]_OP8;QjH3 "lWSw?Ҋ[O) X'}R;Od QJIp:fˠ=-![ _ݽ }}wt]aV"~z;nKyNW'ozEEȖIoL6᭵sݖ׃@H# bFF9;VFgZ%ߓM:IQ創ЀT*~ۍ:%F(5.g-SbآO/DӞB +{~?||CSf[޾曯_5cwI2CHmMZꘆ[$$!:MGP{A,1)$RF䒌k&mQ$&Q':ܛn;tЎݮ` +i%OB@0 +T4_OMS@3P\$݌tVˆHV ~katToJW׍fPQpm2EM#oX/[at$sЉJ@k`q $8azI +Z99 zyg 2}y$vC@~R,s|Ж`ƾ2R-i +c)%j9şc\)c21hG T9Nbyv"^OB*ai;hɫr.7:DɎq.R\d[㉔7{ +Nwvv[,1_4AL| 0GK;6PW[& $oFZshquc=m-v?,%*i WP&Psms-?mE\Zr;pej2VBQŴqy<"=䖦vOeZIAJpQ8IiͼdA(34jւ)lD,j:e-75ѽQ~Qt`3x;SBjgo;խO KE +:A=L=Oɸ+[l 5kmSZEv&+o,gj6FzTM}`сHBSX=F*K^i8Y&ʩ6T v +Z]G +HV;XfǓw$ӱ)1b nNHN9쁖3'63~eĖNߠKΙ{m +2?ș#)9EՕAmXy~f&D'ՅIǼ{{U9S[4=$,H5on{*8Rvu ڗ؂N*0n4d~bN\ODQ-28YwьX)|"UOuHUbX#/<OU9ruPQ_]֪W2T>{aRrqMQg0ܖ0 Bݷ=x,Sl8tL=rH{T_>/J˒nԆ)"yI\s}ąr*BU)SN΄'I-bp֋Г}Ͷ*8eǰ~A hRR4I+&{DR'"ZI2p)l"Yr>*NcQe}fQXڗBT[{1uvR4LnM>$xvQ,&e^|Z6r'!B9@];x@^.zW~3uaFHYYAL$>[߉X`]{ń1î}bjY*Ku:@;)IBg''- 延>.j,^ٌZI@s6&p]ĒΓFODIS +Y OFaY5K.O|PuhhUL7"ig(_Ռ5eUȀޢj*,4c).NN$Tu#Fg;$( {U*LAԥi@ݮ$hHQf;0 n}}vo 3J?r8D_Y9Rd@\H^Ev{Q;x]0He+j@p3SBC(,$Y{tc0ȃa&UGm&Wݴ!q*ۉCa[J;`Ɣ$Zњj-/gB({(RM72UI#<°];>;-Z C2\v j; +TIJi~e@./ۏN3PXLECP̎xHWV;Q Ph]?FNSCV;^&8Mu)ʂ7e1Uw8YՂ5Tv?"&)IO @gLa[X0m ع  $' w: +I*٩5&ҧ>E$rd ,b8 @#xT %z;|dDm:J*=Zr +1qW +bښ0 cꗊ 2A**҅J淊Stl( _pUݻҺnSqw|\ .{6[p7o9L +h +Q07e&4IYBFC76gG٠E?,F}tu8j9(!w+<E4KUz%R|n9D@nL3Nx#v"×=N$4E$A\HP;Y@3ʼnI}^nNc ٶdګ>mD&ŇC:~b(aHl p9Br4'-0O![Iw2p:ȿQ6ą4و0e:3)kb{L:Q.WyɈ5qh!#8} 5bgg ʅKel7U'^s=go.W0riJgI^w~|/?~o+ >K)_wŷ~o㏬/Z퟿{je7[ o?gF` ̳!)Arl]ʌ ^Nx2 ]Bg|օm-y^3/yDKz8FHw; >K Q V{2'g˼|^?t3T8Yb!6 wv4fK.Ǣ⊨@9[jO!Lq,G!6x%He ,$2XNKw>,HhnxQcx[OyB3~rúOH+o7hSUfHxzӘ D)4yӭ. A첄J[V{wuxY.A +"eWb"(}*V]@G] F/( %+R#qc̓c7@vb>E?4y*Umejqm~ޜ[--a;#&aH9ٌycsD<*o*U+4Xc+ڎ1 m]Z/$~G; 2 \9֕^2_PP>bgu %[4;5Jx"˒K.YusujB靉vTj {vFYn#*|llC~,O+qng tvpQY:g}ZLW'4>2\yWLV~Ywst̨F"6P*(ˆTǦC-".E q/3 R 4 ~$Vi(؈%|@r(yx_#k5)xEO;Qմx>ϩ"0S#A}oT`瓘p] ,!H+@1 /.y3tm#1u{HbiJv<#VQ.}UM~LF;z^a8kJRPÈIjzlh_9쎸KJsDx1P,/Х]֋V#Lͧc N憄*kV+"TPϟPzuQUK\B@DʲlYeƑ|owʬ}Zs'H&hb$W/b gq8v埋zf+&mR'y -cba'` y]Fc!/ɷx9ERqpTMmdj8ԮKHa +x)}V_(&>$HK!cvFQs 1W_'b +*=s2ȜJmYt//xzw +Z`GlK]ӽ=ƢCh4.7+_C(gœ LқdOfm$)^6K i_8rV~P? oK%h$ڽۈ.zf2Jv碀ٗ^hJ@W,0 Id +LuBk>.)dtյ1X H*eYӏ1fHjJr I0?BE׉ww -p.X[PغL"ڑZIhѦAej.Vqtci2CL@O)mWͽ.S-C< ЗZ ܉B/0j1އ4Lw KՐ1q ǑY81xQS22ک-וoNm)Ÿ)*`d~evNDBHoFNiË*6DD}-K_;ʺn]u4z!mSCI3 J8r*:OWEð)2j lXPl8]F}MOHQHɗ|YϻmbU:qp^5JI4ٮ*/ +ߔ= 4BGtI4)EIڜMm)2*.{,R9;nE13O{i|imʢ=scG1A6=jI%ĮLtb|Cu-;wCP!.8=҅`ZtMd̴֬kN3.ľ*1*8=ZǙhӔa7ia]~T Y|^&ŲSGM:4ܩ8դ.(2J4ŽўGJ;oPڧϴl*$BRxf!l;Ӛ))1J|)-YPl +GT.WkR0+N27+k!J/(J/ js4<ұP}]١ձIW +QZg?_{K1 O[۸=mlTOuA)}T[[Ü}ZUXTH?`fqb{کCUExJƢ"hXv• '֓$jLB \OZF@(옙╩I6Spǫya=R +:S`vioe)pK: D~6#Tb\)NpYO1rÞVrF mzRg3NFړ|S<͵yitt1a(U(HOgBJsRK5/(&;܂c͎(R[d&M rFkmQ2@5 5T_fiEQΓgƼIBD~B^:;S?Yq@b/s<3@VGo-eM-TA)s>[Wck{\+x:)_:=oUC,ADRO|Se +tԒ˖iR.4t {e k8gN!sI%NbHxB{hg +Kc%n2 KrF"xD3P'_ 2њ=R3sYYkz m>&+gmkri$H+:yEIDDZe sAk{[\9ՖM0L)A6 zf3!6PVor|:lz2Td}?z6VJbϛ98#ԍoUeݛ]袸m{#Dm<,"m, 7r?+ 8#%QJf\h>H3vjiڢ:$-ΨsTzlK'q ]e`ǵ ѰXn%Ia +@0]u4OQZqsDLA%\lW\k4"'El4sIS0̱H&;dI|m=_W;w+Xa74U2Z $?@\.m N#"̬k@ Ĥ}@jYzϲN)@hՐt"qN*;ƝIjED9o>h'caN $66q 4:3s̋r-E [#/l"lUa{P i_tz}O~;$vn_i-#D)]Ю 73 /&.CHmƌȼAܐ'LmRrgqm6M r̾g*C(`QU{0 8jEenA)N92 т=q@l gmጸeەEt\/㽨KWϼ9ϋ gX,ej}MQcfyǖg.<D +wij4vXp$[98[]F9͕.:YP Ds ٽg;db2i*7 3S_˅TQ +/bE3n_z5U~=H}ǩ$Քx)T^4ǻ$-|`##D0bdOGDxSwD":ojIj(EFQ~ٶ+T +06SgQF}iJZw!e>eAd1S4f\Z":փY$ >j4?촲N#aR҆| ~FIYN}7!)zW ȳD7B;<ԨBo*^.;G~^eW lYh$,$Eۈ-BӴOSH%*BѮx +mF0HUJoh+RkY 5A꼪%0z>jjH(ΰ)mQ>= +~)qPHh|G2Ǩ]tnűCT:W|G!%DJ°twJb.SpٰJ=R9xC|g(oߊd$~сhݧ M`A:lIý/]Am/~g_}Ǐ??}óYO].IfkOioML6l^~Q\TmQ}Bw bAH =)J;e@± {qSڽm5-q楹OjH+p*jIu *Qy55EHixW!"-m:+ ++u#[Yy9oݛLQwa.?_02Ӟ)$s%cTZ;?ğ vU(r"#+ǮUZTb^3aMքkdC|Kq]΃`kJF +3WRR)q fܳl\im4 SB;69|N3Hī_'7Ţ;8DrhԦYm'.ycP vu"`Y]s8=$Үn^NlLׇ4bv&\;#5[ÙzT>spNrv%ų :7?WȜ|0ȋI+]B +\gŵM㮔ғ&-$5Wv'?E4tҬ7b c T|◢B蓗I%lx[N##.BʓIșTsj zgZ2]}0\u0%-1i,TbRl_b4 Ʈ+zLNCVs6We/H! ]K;4,= 'ؔ'G)s\iۃ.Ap>Sklš3l$HyUwaW2>g1#pxfle &tLdK%ea} ѕr붬6:x;Fγ Sp|Oت@\manU" +,ㆬɪ*i@(AdR^, 95/+WCQPޒ}2+1Ȯ )V#F gĿhg*טlD! SLCV,8zŬ 9] u}w.zx3oPu:Èx=pH[ŪV|\DWX + #l#jTW̫vaM.E@A +&PztA +#ā$Zg 4dԉ|I+I},d.+mf$:矈'RԀv̂s}9> ̸F:[M@d·J=Jbd1hw\+AHy.PNV]I݉E"IBC l {h@|9ʤQGh%$sWz;7䪛Q3Țobt5yn+Sj%! `h]Q,4hlY!r4iaؾJHWH f\I@X;V}r^H$``14g'Y[8n[D1Lpm;_aH(eXcGNqƫ$fΗU.a3B4S0H}\  J %s/OϕNT mб`NVui Uqll|rJQ c8 'AxrщNA?+N}$襨 ˫~×r'!Da1_t-J}׹ P &F**ҥTSpNmp*oVV}'Pk1]=e8ЁV¯F +ڷa.>w!!6y69fsG#>zzG-8n?)!1,ZQ^JEŋ2͆Г,ơ#tH`7." +1&of^ϑQ'/$Q%CT".9TE LqV +kzmC39jp=϶i"B{W#Ko?l{=ϟUL%햱' zu +!'b9aRGr"x%)ap&^+ۧN? endstream endobj 29 0 obj <>stream +HWʜ||9%W'H.AA}g]a9qf\1=jyz\ïަ=V5:ӇE6uLկa?hhZuvQzI^= +/|Y@5gY:_ͷ?}ݧ?_՟5}׏o}\Xgnƿ{G_ջ_}-%^Pv59Fc j5F{8a6ycn7l!K> ŅyDj&2opcPxMZs2GM>,Ye.{b'72}798wX:$/x-rէOlHt~[ 7+G}OLTXYp!kDژ6p {bwJk lZpuy.[΋{JY<ub0TgT(q,j3ErƢ>`푍p!@W:#iBiB[-A#]hI#CiZ#ٱro]W/2FPqz$ 9*>FܶOA'|Bhܨ[i$ ޱuro;5|W#&HZ[V/ZtξjÅ5\,c6A^ X{:c#>RD@;h0~N #tՍ#=Q8@k,#Z=鰗p5guy 2-ϖ;AUّJOCk>x; +Mw`@ց ]HJZ9?H(@= [p p f5"i#XYY2 ټ#`qtnQƔI_D +2"׉k "Kˢ:DM{o>I,l#v3@XD1LXҿ./IdD9u64R)ńTSPyqg qQBNSmR+j0 ZEƍȲ!p?סQ8lbYHD))鈈DzZ6%"f5{Hܫn˖) v'o WF`*Įw#y{:"wxs +Zt +h/ ^ +㹎:2҄ݡ0-EYZJ M(J=Ѩ$''ɓb!dnpyd rb'A2h˺@(sY65zQ:D +3U>7ySΒtAEOQcRLI/K(xvt(E!K-dTbQ(I^8qXqSZLRҠ C4ƹ`#7uDuP_"D\WkJu* ,IZ ++ܲTmn+dfKɜ( b gp]cJU%F>ިoYYJa t陪L}s:&%8A1Fih>ID) Ċ$Q]$ ;Q֏k+5AW#X O2x=%I?$eTNkYL]ٔ_Q 3V!euj~UX WĢ%2[6)DYFu, h; RHϠ#"11IF|UYp8A82]&VM; ҥ5eCљ#y-;Ǩ ڄiBU%lNHW9 D[xR8јI*WCKM:__6j.H\-5MJ-,[CD{.DA$۶DO"CK%oUCdrNzuTQU {   +0#rȴo:1C:u{]R\)^*m)/T{])IOQ՞ AƄ=K£@ql'v(A|G3Q\WEf)>@A"e'(BJzhA ƚ+1g[>xԊjqԑs+f&Gmui2*Sq +װM}0m}/wlOie;f! ztb6([4@dyҘFz^T&k߮wЀ2)A`q{Wb8]\1FW\ -*ۊ縩2h@N!2Z۾wOǨĢxGF 2w6QȐhfBeK\(n]M +2SɌRUfNT4.?=9dZa)eKt3ĦxDO6;h#HQJ g\ߋ.#9UE6`N|H1X>PĘ烈ws"9~?vojqG.j +v'Gcm!*.&~*-҅hi]!~=Uv+;Ȩڒ3Aai[!3\s&gՌՈr0"F(]E(v 76{uށ$1,f;`VlvĿeDK~.>N401*  ч=DK*a啴a9aQ\%רk\&ٴ}O)tFI*FjA(k*h!̴oA1=u=S,+byq:{ma/3,sUt[cuGVHdXX7u[a#ʚ[y]ukSt$wXaH1snbզ}= y]PkĿTVѶyj#+Qj +5|^KnIb*@Dˈc d8e&÷;7Z#Xiv!v_W=@>y=N~lłVne!پ>Nocq̶}c~vwENɰ'2ݏFȈ W}O.;i6]FI8QUj7٘dKJM5A %H~ttRor[Mddqr] S0td4*9HWXe9Hc۱s)/_T;꾌 {t$UAuv7E8R"ͭeh#1b' _{ÛoWt|q{Ǐ>o~z~qFF/_K7"-W^?۳/n?o_><7z^x~׿>>|']ʟ8'kG֓j[C?o6 zy+w8f٧&@,R,qt?ۿ!BR K5zX$_~COGQ²RXqa`?oHX A&lhCv&18(b +hjڦNr*Wh5xԶLGP{VilWR떈:HɔaZMw9rDJ ߃HFL1kXt엀.2-Ƕk-k&g'Y֖EKXx !8Yz  t[47-PPKOi㸭k{2/=#T9KN~v\b ˀ3)^.B#pmթ_`ډE}R{rqS9&lT=;d| &-"টxr9qKzeN՛(ULX۽%I c!3H`v7hm O) +G@PȴS|cw2X覎֩t= OvL E~2Irrs5MxV +h (l%O!xMe7|L@י3fX'*܉3ή4u.grQ+F+4qΔMPCQ# +Fj* c$W5'P<7Tuz])YW(l +Ōevز#z jecQp$%w|oպ +칆[ǎo-Dǎe%\Y=Cp():ҼS~-?ckB7WGʠ{3˪ޏf)NvLN8&֝**?tZWB-SGkCyA:L;I;gUk@kŬSRiҠZANK E}?OS`#*@N~KLg[t:FuY\@ht*O1mV\(S,'-WuL;2dZT%&Pd1 .m2*'PL3 +(%`>o +?x TLqdZt' $Vp44 +N.uFQa'  .@kiwKb+5GV:N];17*uE! h&7IF< qce %j8tH_x[0)l"ڻ[ʊ8 +š43BrN# T]SE^y!j)BZO@YIET7ݐ Y٨G^.[UuAYO"Zm,j`;x6g,]ڐxbۆK`W6DzfLԎL.3~#cft? br;é^r2=NѣzmfFJHҪiqEr%ifHҐ@Q]~sVW[)0r/}fI0WmB/^L*u_:OA9se^¨%ݍM̯shy‘qƮAEExZwƵ5‘-q?ė?h٤$|ޣB ׾,(yJ}5PY~->Nd}Sc|&-A r]D6y5:!܋(k}FߍW~f.y/E‰d*[HԊYfl Rj)ٛ@iby*'ϲV)/MX5tӕQ)Wz6ck꺥DKiYp]a^/x|<2c>hE3lYjҮ| +l_hGd+[ރJN ƍ%uFu 4vv>~A%,m5Q;k +*qd cpw;Ý".Fl=&~Z~Ry]Y|Fu +ˋW&f AZ֏5ZUQ?' +2`Bm!ȑ &C1sq;,4{S}Ctls٧w/2;zD.êȕ;'~ӹW^~|ۯ"0Y^;־4MyS$JX\Ӄ궗]\HX*d! *۳ۖ"}nշnF"ai%i -CUnJex]018զrFm3Rl-l?4jLI€tz=ϙVb:r썸 ȕө^<{Tg|kc[z 7ojI[V(ު溳?U41);yȡO6ۺQ"Ѯ1 ?௑V\jH][أBr.818][tGӿ9Jbe%cQWH,t4LCeAU*dĹ~*Kτ.sfѬе#bm8yO)ٞ=xplfuR\ `Q +\rXi +,O(y=*sDSwX{\K'Mwl‹t3iOO1^U(DADTPq(⧉i\?TzlQ~Zj2D>xCT{r+4*<cwa' r[q#ڌ֪f۫SHA>*-د!V]|ttEcbk +Ԃ#PRBrk8Y[jd/Fk8n#=PFzY=Bocj;d@,- N3NjE.cF-sv;/!vZ% |)LKKoU(,ϝY<+KAvlEkA5 +U2, S16[*$DU[TZ)-6߀Ĵ1MM|c^USäl_5&#'{&/"3<4$ E4-A7&bXeU6]()(&U|6qL|u]>fPve]Qd2w@̻T "!z mI풝{A*kL6x)/1@\FFg* 8(fQ2\FI%U[L\;^QTZM[6?t5PhO|8Z)_7}>,?jKw?㳯ӧ_??_37##Zګ~Lt\=\7-_: +FbxAvJjZ%ۀ;3H",PuYl +{ET=@8iD=$Q#yG]Y0 +1.3"3Ǹ> n _˟^;ttw-O(| 4X*Y,/P?GovDrB2wn~.U룃3XX%3cNaWɋCRup=J_"@;K ,j+@|h8؎R)!at9s -'cSbޑ3tѳB\Iede(&~=w %kމWj붒!/=hTy!-zE"@bz 2t>1圴8힀5{svK){a%8rklBe 4źfxݜ|w0͚F#V8b75 񴤦0]nc&0ӐP 2"ӕz&FM{rJ5P4 6Cnu+AحIuc1°볧XUT@H09_Enu (m7u'= 6DZ+6`?5BUO:-8$u0R۩Yeh]bYY[V`NL`Ng8cjaGjpkԅ%IM͂!<ʗ7=0Qsw0us6vAXRF0Xe| Uܖ>K֌g+nL~>L=ɣ. s$ϕy~1a5X2ivC3?T8v&qQ7z4-j]F*Fc+YKs^) ngѪ:v|*aNёVOր@#pf W.S'QX(. Fʺ$7yZWl/cZɹw\f=S +,YZ!i=x7Y` nml N]4ݠ^{]1XAq;f ➯U(E~XA˗犏yCr]:zԅkM̌UKB) T3OCk9M3\:N -OZ#pD оԣ Pt)A }ȼr@"}p-,ȆB w`䫛11~iDv0]Bɢ9A= JD2]ftj Q5곝5VBdEUjjJ;2J Qq=IaeQ +/62'%y~-[3*>̝{|gb,{d6[Yuge ο\EuM!2orNbܠĢgKR?!މCE#OoM +;zv/ 6þz +ypZ +h δ"] nZ':3pkmY}&D`VEh9T``ѨNϸ%/ fݨDf ooٸ,7#kZFRYM9j^L|٩ܗU kXa3GM|g^<x%~Q!{'8:(J67rGY+ƞs勾~z$1{"RB9FKpDJ ˛(Dؘ+w@+G\5ц{9b y)jDҞ+Շ&&jv=C'DeYOtOBXdȔXTn),5C0{6,iE[{c/5Ջ-| 7`25h7P/DoG'H ԷP=riojR[[kN)؈Z fsR/+Q_dnu%-ږĊy.ĠW̓㡷:QEΞ qyĴϤ$ v_$–׷ͣ>C~`(y^sbmXϏƁFϙ beuR1v{?}?|A_ ⾤_?Ow}OG_C1MAR᷇种u ojOM  +UTвp2 Dϙimv/ 6 KaNT= p !7K2o*LNj)A4 ZMJ/DE_("RE.CB#>%vrl!3QF7&Ɗ >D̎|c[v9 nI{v_itii#>ہ39WcٻeJ 5 +zL5 +y:2ArZyz԰2΍F쬄ċ +&=1znǏKmA([J̔]OT^z:7`l!oMxl>B\nK,(z'꼸xbswqbQ!S#&Ԃ +{MgeGr}7zQcm>8eO(<7  md\:{tI͍l,"t?Aj?zerbͅvw#Δ9s+=^a]%^=O9n_&_d=Ig 3nkP]%A %agZ5xa A,R'V Q!=&v2'H­DXZAtmnAlBhRA9[HlV<=FH9pW:O j$Ti1bZ1@lw7ʁ#J M[[}E^eEdS&W}-BEnں#56m- z|b ?iQv>GM䈍+?Q8U|=sXn/ɅzAU'vsف@R^4B,83#C.q~h̩.y#m5ב2W+SC;pǑZzBחuNFPnRw |"d/h "~T"H [Q6#h|ʒ`(pA)o'+gg'iS% jTft[fU /R@s/1ݨM( |`kk2ٯu 2bPs_, ݹ9"-^C^xyEPmnw:S߁O?pUɗ8yPhL̢.́)C6UK8w6aX/vdъtTUeW6MZ22f13 #:Z/LbD +{ʁx寧05)fy{A*m".4,x +Ř[R n +fjiMBlyfV[t׭]r_'~rl)T.D҃ +] \ 鐅L 2gtZX^LE/@ +hMi& \Pn>LVc,ݹarUo"LB{ߗ.CGy 6vZ@^sɌ=b]?1Ek@_-E*aecjrLuW7Ki} 3ewhm?J#J@KtYsP;ŐߍW9wi_͚Apl Ԑ 싼\Q^.6ܽ(T`Vѷ_ŋ动S۪q1x^ڞCd`c!Z +LJ\Rhb%\WyѨ&}8Q$w8:'-^,-Joo*R5݂ +k5]*U.k +Ui@I<.aʉp?ΐv^R5L +Ni,9AڄI 4"wGSZ=ƵDV[=3ܙk`?nҤ)ı(jy: qԽg +(Ů"kqVm4eQш"jߞ0`ub{"<\CAE,ANgQ%\q056 Oy_(y} +IP^փ\#ϙ^hs]IsA)'kbHЂ Gy#rސ=sjzZg]$)(M5b"F)hpu r1H;8L4I]u wa:9CY>{Jˉs&-z3HV Q5ѴX#euBl3%W=(FM'~!sJ@-DZ(G|8\Yw`FYl|JԤ6މ\Y{KO%-q<"BCb"%w6P:1al + 9f!Miglu=DTJ҅|'׸Z@BZRR[%aV_ޑ q5FoOYVd=/Oq#"%|)=qhDT$*O,aZ$up*{tϼQI#Z+}G6=J2sbpt-GXb2Blbf ?b!gu5օp1B%Vl[Ɽ1ln?Q0s&I*M˱hqiݰόȗO/6ںQ*a> JEQ"Fsx҅QJm] +P/4`KG,+R{eDdMP%ވpKI`_5*ECvb(px []ӋmP. g ++wwNS2ʱjj9ڹ)LT>q+F/WsȀDћ>o޽z@/~0Tٟ߿}ۋ/?~Jc?_;nn}s C_fOO?z~~˯޾{O?|oO~Mo_G[ >|sόkKשN[[FJ7@PHU+FHHCJx GTK!%f篅r PY4D1|מjFgT,3F7 XQ)Hu~W+8B.R]փVmoK\"(ءJTjs)@;K2;`%ӱP8o +ox\GڍΑ>ǸfR1f +c!I!2="D#j1n\v=%RbTVf#u4#w碢T7eHAD/e84X`΅Gd8dq7g V 海T.X[pYoXZ%7,e-;i$ܧFQjbz`lA4:8k逪h(r}F~XT i Mzh"0Wc]ZRuRNk#K(Uփ&BygKj#fnAtFw5}2OW~:Ja Ǎ"4gT]qz+Hn̚͞F[1h&*!UBe̲Fv%|S DryˍO0\QHjd + +wF0BLülc; bv W#k@JE$ӭⶣ7D:T,:OY%R٫RwG|. Lm@k֛W1@Zs!'u|k\RZH7,(ԫ7 o6䁴Ȯ +wT٤BC-=8"k|vuJuR!63}N] v8#eShZH?0. uqU@(;HbM5; fYr` +2"d?ۃ ZB(@gVVIzF9L+qz=D)lƙ],GR$.GרB) 8bsb2 +&Ҹ$Bry$riWF0eN!ҫAf) Ճ o#"zr Ԩr Ȕ9Dp<%4QUw%a~1LAv1f3&ee$uLϦ n1+[qW܊:$1̼lvj캝d,y)7@ J.#9/eopz'=$F^G2{`$ꙭd:*ڼ VֿY/ۊ+ +Ԑ`/IK3@! +r|o̪qXvլ9%|=/A ow^5߻sCrkt !6^3f ߟ <%+wV܄E'hbWDٷe,z/dAUу@; pt#|\?"OΒ} Nh6#$F {:-}.9g(h7zGt\/=h79ϋ^_*۴(0+j8cEW>3\9l%bCqt{ /1| Ee/pA׫[e< ӒQٲSQ?hu +o2-އ0@+‹w9avrIwp~a XXO(ФODP$Ŀ7Z)BW,/yQI'anָmRT5(d:H; ɚ:^5vGhh)"*N 5;+kHNmafdoLQ;ZȐPFpq}|c3 dEBV:qRul?ˆ3H0J9QHm,8@[I5T,( B>YO)EKv +ˁ@ԧg$3gcGߝA!qAQ׬N|o”}YU*F~bƢ;_%V6c(*b`|,/ñeLfI}q]ں|Zr*J 7nV҈yN[yk|k>C&%T7 tzÔ !خ lJs؄سS_ˎd8^犝]B=G~]$J4jE8(?-KG (GFp6O#}2 >pVl؃V6iQx Q%T|v>P8o mwJA=I8`N,+Y(]F]4n%[(!ee X8i(Z*>$ ]J°TΪo/NE"|!] DU_Ogy??~??odx:~҅~8hЕP^Y1{ЄM݌-!ЇsT?xhnGz,nXjF +FV +aBiўgg5Ґ oa' ~r|6,qǬh2dE=&%#vҴsS$&z*'J((轟D܄eKn`1#qnہ& TuvD@)vEEӫR iu{5O=}<@.^g.}N',ٮ.[^==)u CR1P2:(AnTy%YBdtWqMb Hq %h7g挝UR1!ۥ}?ѿoIFknSiĤ5"W_Ua[TK H&%Ig'-Q,$"Q;':oRFϳ0ռS5i!_)C$=k5T4w5?53jbћ5RR3":݂ߚٹة_72s;xpm(Ǔ}˯L[2Nv9j]Hy>Uhn~0!@%8;kfdIAd ?o)?N\KҹHlL9w/$]-qXA1ÌQߧR}m#@$>͈oO}Z}[J:u]קsفhO8\DЧysXBR5[j&Tp*^&;wW~%]UaD3(Q"KDV,)o]F"2v\ SG=ժV'-īPt.HZtRXK}D9ڡ[ji3u.meZBʎwBZp`+ݠs@0$bGNgY ҘbE&#" pyx5|nNtPCo~GD% }+M=C̵$$S#.Z K.x[ >LgD]d+Eɝx^0\6sW +Fi΁dPLmpTkV~+ѐ8&jA 'RI6,exeQLD]sݼr-4b&+?L--u )3HR:pO Љ_ԱЎ{'w, H`y0Fk@יm_ߒwz߄9Xc VMx;님E]bV@NDȋtdwR#o :7J;ٸ[pvݭa':]JHZW# !;tCJ}(pRGgN@e: +zh LdI %zy[ +rY*!.qNw؅pUsfy og;(>2Dž9];4,= )|pyd@ad3EV=<cN a6v2ڜ+ԹHk= ^+GA ɭ%g(6[>ÎaN˘8m>V%%Ւ wn.sʹN ᗟwV?6־|>}?}w߾˧wЗ?~e3(~Ͽ?W W#p_쾄|r'H Ɛ5cD_^(܄#0W ]ٺd}Fqz@5cf1e Gjtb ?f }"42*FeNΖyO1 띖J7);!^GD\H$RY+&ҷ5PLw`4D"POv,"Hj 3!"\3O FAsA͈-L`fںi"6R9bzbi[1I U9\X X;TRG(4ƋGUYt{2*/EE3h\pư[K$Skd lOs[>yg~ *DtqKIj[ vih#?\$~Ӫqc,oH_V'$a\Ar+^e'OA!fSѢ8 CwhJE[Ö^U$sYreY\_7:'*F,(GLLRʁ9bbNPz6M%82JQpI+KRp*;BF{LR0_K1AP9a@:~^1@vUL\ˑGAʽ 8I}mmb%jiCuEuN)]'~TI6jxm)Z51bF<net=J mXӣYdÝׄpd +s HH^P|˷sGÈǂb@Ո\t f.LG{"q8Y@ču1蓒\djnuUO_>W2 r[#0ϳ#7UTGd/17 L† <v?O؝N8#Ewßj3Zw}K+5IKBy QE#Eb*J 4f=D Hck6OqT]zQȈ%@٬.$"Qd>&&)\ɣ(T@:ƙOR.I\ޘL2ųRm$rk1 S1S0[D\a]r;QstpFLP_;Gs1P}cL+7YIJ-#8BoO7uI0gDݿofMvb(W܂*! +}Rrt]E 0;07z#. IKAyEʲkBIvO̕U2%ۋxd^T8. >_1iCE aFx2*8ȉM xMY,-$lD˼MgH-^m3\=qY(kiR\Wql\&DĢLd|'Jip XQNbLܣF}e$)ƢG͋!u+Xo.J`M~qlY.̋Ph~PKhHlOW>Ϡw zʟwFR]{-}=vHUQXFvodk+HQí %݇^e0 +Kb dk5Ǹ!i, bP%ޝR,$6,0J)a:)/ +-O3Ea J9pmAYqLh%Z[vBz:]̵1$oxڧjxkS4u/4w2TK僈M,T/z35n@Q+buܴ0 +~Q[ z$?yrEC i\|d˦w ղɷL{9HhPYL +a++1qd8rF;SN-tmEʠYQ8>==#UxǨĢ"5]Tf# [_L=7&cOaK;5-Is_v*gUsȴS1X)!i3ĦxD9O1/;$(R(%Sgb"SiǞ{г4}PNfY'J6*Ҋb``J"c jO5w_wr]n0lF<{Hdg@8Hv"9F<)e:% 򭤻Q ޡQJ!RI8WӋ9Qؐ؛vTQuL/D_lǚjRmՓ +J&o@ϫe\;cFi瞟s'RY4Zty_xG*5j0U^Q4gxnW$ebrE@v\ӈh i##kkh/+NhC'tPf[ƛ]ߖR{Xw걷5U*M9({-wݏN@:*P"\VDyJyK;Y-–_ ]+u|&=cw|I"죒XԆuJPX4L܏%Nk|1&T2Q2X+Mä93:Y(aamWF9ܠ2Ro2qe}L#GKm9|3ƌznrL@ ?. endstream endobj 30 0 obj <>stream +HWݎ9}ޡoe*"բj%Y4da*ww(7s9uwks9w-oM^zߧnM.>֊ﵨm˻&s|kUvo_kٛNsÿ2Ko\VwS|}w]>`zCPjj{)84Ԟ'jsې}ѣ㶲[x5>Ww̶70t:WPU߻>ő?ǧ=?|zu-gѽ.Ϸ~z٫W/߽LJ\|5V?fe+VߛloCߞ=V={o><~w|{w?|Cŏ>x9?={ ヒow̼z4|EtԺ}\qA41Tr (H4Tc}k(^{C h ^cY3Qc;^CY<:l& ilX`\Ȩ#wjiZZ[{Uu8%Н5*\TN>p U,(yǽ;{w5]#:ؔM|9B +|0HS-0@ #эev#n}&ثI{mj?NJhMp[۪R +(UcZ xpTd₀ߐew"Xg @#ޫݐ%Зu~p%<ވ;+dvx!%*ZkK"HnM)>-&8eX=:ДEdX,1 +5AJxk iw&45o4Zd-pސo2rj^qՋou$q̃@^G&6W7։a88{H/`u*;m?-,9MtxZH4£,U%ҬIt`&Gs_wv D+TN7 ȷUV_PaQ!"ѢuQ\-Zȷ{Li=l8w)(zw0B?L֪=:30p7&!-BwX^& TܜTK)ؔRey̨Oj ґٟs$˪P' %JMecuAKR<Ѻ-WEF'gʩ9!G8`a:,9$c]@|DTrq-2N5ԟv y;>F<:i>P 759y@`z1}#DL(epe\s BMRrQ?#F jz(BZ@AX7t扤@c괌QLԆ-!붛%"۶ 'wP4:T\ Rn7"o ΃%hN:u -:cP;Z8J;t a٨mq@;.f| +2Ȓ X@9؂1B-$Dv&QuF>³2 l08h19@ZtʮI 㜙~YA\"s+2X@.-]Y-ɤu Gh{ s@3Y'd(̎t!Q( L-PD;OKGB+x?bY%)sUZe h(xbudܑ3 ܯGuyC@cۢGW$8c$5)|AN!`z/5ª͌<4o=da#9 +!d wc+X|wT3}2hH^a;K@S]Ѡ" Rւtjs"yg2\C{XNll/ ^$՝8|xB^AZ깲Hު]MY4,Ty(Aݡ8rH@:SrV"cGK($㬥Qf !VKeζL ~Xgٔsi+W Ӗ +G_? W8Tʸ|D׽Uy#Td=XB1q5͈t-e5{+ h%5)a ~Ie{YO/]7u5T@fC[.2X"No.fҙ2M E#YyB4vff-<d:S5[5.G|r]  vܾuh^3آu@|rLȔofY ]mL=K <`lh'ɦlR$ +o{ 6zPyiZan_.n']h FufƚER‼|}br؍;UmbXU:;v pviTNf<E!|LgaR&*G <-&O<|K>`-CO9dF$%ݏ$~l^]WO^Z%2E͜iqXdu|SuMps7ٴHZͷ2TЧZ$ƭV +"Z i*לv;O` +@~sqFՀr BEk=nh^p|t?ndNBH1Ƅiz|GF1kxp-w{f_.[+M)B☇6vZ_~A|Aj y6vt(2q.$\pWGjrNQ(KkN-*UA䡙F PhP7 +( +|TOr$h/'T@uz->A!/dIBc|Onwt]-FS'#\/#sʕ3J\ P/s-x E&HRoyQ*EҎj4q[JeU!^]vle&j i.dN㚢s ]L)d2au!C6MHN=9)0{fNZr]_xA"W̼%RQ=Erв_z9^fHM4^X(|yr'ȉT3E变8Ǫa6Œ>D/k'ҕbq6X zϛVTz ?qv!=ɫjo-4:t)}֑>e:P=.nazLrKv6*e#.8=bޖjbt6N?^ci2DKK3M/e 1L;QO "?[QDr`T:1t1! ]U{ݻwuz\a) DaQtΐѱvGD9ە\ ki֩>/[h^e]HPzeϒḷCX IndSjEؽ@25}v=y j~'ƣCJ4#uO|%|%lA2eq4E-wk\7n ꫬba[>"4[ +Ҽ$\IA5CBo̕ +HEކlgsёiaֺȋJ=Oq d%1r +wƾƄY ~Nհ4MK xnƒ5|] T|IbcNˤNu2&ȉPr'vh{6Wj [" ZXzɉglŇ +z^Fi`e{_-!0%=Qud(:!)-xctHYUh[g|fco}?is=UT;2ȜJٝ-G n"WU1DeѯqYզwV!T\/#b tMŸ́aA<9^9V"\)u\T~ήÈփ2ze$6zaӨS{% -JHĦ;=eeJu !VӮe\A>$"ѵ\r.!W4vϺ Cn_}Wgg1(I(,cܚSIc tdFVЈBya{VsE dʓ%R)>cV˕+ȱ3^rju_aCfˍ$rˀ'#g%5^qviUŐ+6=EiTWF|P.v6l2Kacs  +]RS Ӕ+E1_)r̛-w7vldYT:"&l@[IeXGH"`T__"Cr >De/{yK&! +(I\8g 7b*M@pwwۦ؝NԄKo"ŇS+QeUrݎ4ha)͡W`jN֎S +Ji <"NDͭZRoIy-(2 d^F'74g씡A 藥8ZGW,z*꓅Si My;ŗ?}O۟~y}O?}_o}՗>_-~{=ghٌ?73^OS# o|ќzlw\.PrA%raXٛ Of环PX3?MZ +#e<~DKz8F ƀsİ9OĒu>teܱt Vߥ~꫖ll-KF2 >CGJF^!]bxr>lQlFP9FA !P7W*H4,ɳpw5!8n2;FH[L!B3"ӻ=XeQkLFQP +o6&̓NVI)52ue H?FGWڌ2g;Z6RbP툃;M'UhabE +Dy9R9::6ƃҝn .5:疱3s2&gp[ \'tc稳1d"tmC<ϫdsG"8Mv2K2 тNo؋~:rQ{ [c`kӜ1z;r.`Y~2J +5*G%`; ͟F]"ˢK2_?5Fu"j$iM#}T3@xyX؉ ia@tP# Ounw_Iڄ"`삿#qM^uEӦ6 LĜ_3A"u5VY0cL; VR`jkHsMEsMDZѳAiHƊ|NʝDb6ӥYfIKfl=D)E 㩣?u"ͦ4S׉,%Mb@~W:.w]@g q蓓ܲdjj&C'I6$9/g^6A]=7p!PE8qw:=uE ?~:4gf†NE"d%O:5r15A b$L>+Wi^bѽE4grNZ*M|$\Dj",$n}قϋv I2)t@FfW oR+=ΧhĔ iʂHNFes*c&^(fѽhKNs a:i4An0܆4`DE}A:&d2 @~A 5)S;t8BoO?u[}4fvr}A%\_f@䌳`Z +7+EF, wCϸ2/ӕB0RxI\ʡcګ`R|ɈgEEFyȥ-i~@)F--q^ŰXR>C0J{d8tkبOn4U0~w@ga9wAD{@ᇦ xiZ?t눱f07#H@S^PIj\XU筈 +isn/^m}ʌA= H4 v)&J['3y}K/5j2En {vH՜KA|(yRM&d\]\>״W~+23{}H:c/ᄈ^ @Lb_#2%uUh9*JԄb-a j{]7Skd͝FY&"o/ʸֈNĢ"\~"E+6!6kB'z Fiq)ZSYM5@(F?H[s4)$v*鎖kMLԤ%Hb:ml+ʹtp*>lJש}ZRnB%-EO:uh/l.(龀d!4 +5mlh4bc(~puQM4'J*}F27zX'/=9GpeN{j/2j{Q }q[Bhu3:J](Ԍg͈QNFӈlw}rXʧ`C>;lJ}a^BW:Ĵkr㨂_ُ= O  J,q1R=_꙽;画{V]ăxGWD!ODn׭UrMv'6_ėp;KmTIHs8 yMt^Z ̴oQ >S[3AT*9$Ȑtx+REy.S,m[呎aX'MLuP +BdLHH֔q;*3gk31(Vlwd2tG"%ĺg(9)աa$u)+%]ts#Q.#qJh_3oMgY*Ū=W(9{E;G#;Q]*jAncY0?Gb=aW,֬fE7i_ +?PE#AgѰ;rDv%jSJn7ݱKKߕ078/d=FH‰R]GqBGB>wZᔣ7U=K$T.XVp7ɩn5m7bLd4 . hn$EźVޤMcw$vؔ9$sB˸PPj}m*ptzkD8RRPt?0K9#iQOO?o޿@/~#}On~^|g_|+kF?W׷ҍ}S q{ۧ?=͇⳯/?zO?釗><}1>g|7|OlsGw-?V,^.z/0xK@O0@化' #5ntMRѸ<7X#9ޝD-gބ hΌIyD%ViZq$],k U-mA`:1tP(b1wȒJqI3z`e Kխnh&:B;SR +`Oj)#`>0 .ܥ `tj.f0B@G &m{v(4E9L>_W< a: xE@_xO@񩂜M$]5V&8`5ؽ[L3v]²*:E/z\"@ڱlQx`5 +Aـ*Gߖ|s'O\=v])#ѤJ]zhwՋn`b+9KSa˛sj**QKN!o TG$L.b@9_Q\:K %h"J&i)tՊȏnh]VѓkTW5MmJ MN{|KͷY$ʥDӿs#|ΙL3'af["Jή4QG9ՊE 0BY3I[:PӡV#$Z#5X} cTV&D)^,% S +AYާZ`~;ԺK'ww̫u~& o ±cq,ǾX W;~tz<\/D_>Sܥu= wm)5h&oqz-!LM+!~İF ^Z@9&֝>21kv\?%&'BKaݚb +vV2$D̞Z38t{1bw{]4i/jvcgNeV}rjؠ-֨{SpԖqS_wvh6^ON é-b^ r()"K\cӓD-;8{]!Q܋y9u)|L/ޤ䨆pkij//`98Ah(?(L:$x_nϱ%K.z?}] \'50b-I2%Թ崦AQ\|-q8h&gn2%\ݐ)3$/y&ƙ,p( 契$|(* +56]㭅bEb>B5 @ωG:r2Fa5"լvh]HT Sւ~~"3$*\ ƝAx E^@^WH:I(QuoIQ=BlIj8˞wJdS=/㴘gqy +|CK6i( a 3OIBCpU$j܌m~%'ߣUkVyV[ke2#0N4VCA2*;æv? tH#&^(֩#Ԥ>c9DbGX8O_h;`tDUT9v4xC1> +@_H MWnY{J~8/3v * =j:4x,IXT`DII&[,$ 3?YBjĦcC9?هt 3#hM,$! ? a< GԩP ;W_U!C n$6#IrԵB5]$v#-zb{87ՂbVqdRc6(Yָ8IiNރk3VBXtўlM7zGڇUXj+a3^;>Ҙl}[Nz-rٙPb~ #ÌEJ藈<0HAn!#rU. mr%[ݎb0Ҡ=m)Y׭HeXZ:?K]ltx&^=e N~Q^PrH-lhLI€tzz3Miț.p Z En6q%+vlгㆍכR/*rJ^f?6=g10Φ O!>Unkl +DKGɮD, |iNM&DIVrأ'Cr.apq67'b^F.L%QdH=Q(~ч$zN=zV*gr ʂLU.ȈsU i]3|Y/{E@+AQJqb5N[etǦnV)e BFDaz[d&Mݭb/E8i귢Ms`Kӓnk|.e]vQXn@b:`k?V,KE+fQF"Oq\MC)[.yFAp d@r+nbΞ 55cfmL ~>4|VZTFv{&C*ԇ:Z,)DIƗB┇T\FF1=꧑ c" > )jYYCBjP7SRz5TԈOD|RډOTdWEb.bmPk;t@Sqc^ ٝds93,FK$an@c2 h葃F3ZBF0{u*]]Iۡ҂Qm9|NHC~ 2kbVU00<)v{"w_ƩR#{ 7Uj8ѮF>*UH @:\"A阞-K d3sX_eW._@kv36Q{ManPlp[K ++ xVhv >N +aS^5ƆuS4 ]EY+^҆ @@L{jMcވW|mFDc#1M|5u K똇Uqa`A@- Ѥi1QEK!Fy$#f7"Nҁ>4O

    JhQET8mtXC+ӥUc4'D|q)bﯿ~O=&苿T|?}鿏/۷_>?0_41?R^a3ѩOꆒ[S#\1`^fF$h#LsN#1QJW]xJY%!>WI'AOP{( Z%K3 +D#y#S0-X`0;{Ayj#ߎQn{daz7ǷOUۥ-s|#pކc.q`m]msNU`,Ӥ K# 7<; +5_}'eWN(11G}M +8x&W%4$]AhFT@ֻ(+{6)f6~lQ\oVq(yX#.iX"t3'XJ.;Ё9*Rgjg%v[~d5,!63[D:?Uw&aiTz=0z ,_Ȯveo@Qls8вWqyq!rb|zNL3Y%y-M1/ܓSoF{_[+KZ:GDXdΛ=4jmU\hhهx9ES~Ldat;.Ti?ꁘ]^6Ȟv#k)kCՂ=M'@Gl^ȓ4g{qM* <>dU~CE=h7AԖ.e[`y; zY<4B@NQ7S]wf =ނTQ>.t(8oJ#ud44S !TӚYmC.\nѵ)_GQ5gouyɜB|PDZW|K\yu!X2 h_1f7q=#huaۄicPt=آ$CC}^_>|Et{,+rzLG` +͝2Cu*Y>Quto,%Ƶ3Ĩ3*%ho~/:|_%cƪՠ.Ao =2|'J" \6f8 +qx@'G>PmAs| …QgTa*~ddZg-d[^5t3[$CJ +[CѐG)`,APg1ʚ1/U(s+^%iiIrI|3hՀ gMWLtjh9$-9xtHV +Y\]ٶæ^δ֐ju#ǎ4Vq=HEae>>\Ylb wI}3iCȀj5JMϰ'^^ TMj9*\JoJBHQls#Ǽ$\[U`5o{>M +u91+wK1yՠ 2lQ]=WjiL.dE϶Gtq#dd= 'e'ȏUzO$J"WdQ7OW+m+|,ưޑrB{ҦNwb0^te095B N뉇`kƥD~h ]h^qcb2$+TR xіQТpxyk`ʵOI'TWKΫM݅`W_!(s|egnCT QyOlU> A\B2"dnhe1Fn( HH}.wп^(oZZP +2q )p:T5^=yja3 q!$–hS'e2-tfy_wғ7=_Z5-HOo7#(jAɀ z 6F,>Jk;k~\,d*eHgX;N!ҳNh2J t.ZgW6sgtz s;r1SG`}4:2 xڍClƳPF7A:sRyue;7s3k>yeЛkx%VeR??خgzߡ3ث)U(,hdc_"wOM\ŵ4A-s݀cLd JK@þy-?Uh662_tBGqBi԰|}TMK.c`D!u_EÊZǰ7Qڊ 9j:\8p̕c]ê̟j@6Z'dϸ~1":hڿ593W0X$+gocEȑNI"@zlTl% r2QM9D۠`0>ON1<=F(S+A7bŴclxvNKFQJoG@ʭ\v߾WX;cӹqD#:C(DJ6sܡUR5G~!ze:wa%G%J{NuJi3ƣ, *o#5+enATq in~Ԩdͨ] _RUZY:{{#& +)+iq> +\=d!vvri5wad >Mu>ɐYQ#զҸӕ |"]572E(i{VєxbOo)FeLlmj !KE7]9Y鐩H pzID`F'2 42V3 O8O2ĊHV]0Q|bSk;+SNV4 D\hX:4epB@-a*5U߅Vؠmv1VLף]rry9e$NtfF7H'|Yn;/?94"}"ôُ,S +0m;k3G.:ӦiK/3ªWI(a[';Lr=.IJkv̕:R,Xm ůT[ |M_"p\k@]tv.af8(oZeT=Ib_ql"r SJUñPCp +9iJx& PP.X5l#W8י@ +@+ 0=uFEN?/˵dFm-*n&nvp7.RJְi9}}qYYdr_( ٬%+ ! =xx'~|{Ň(34K}!Ho>hn'3uXLuC>Tδ> 5}b3EuUsPCeA%ѿ[:ث>O<IV,<37>Cph!DJUN@šdͰR!@1æaFm1"lqbyJ5J u%of=L 'm9,h)AX~Kwi<0zaE ^k\j'& Gw<JųD&s,F4oaE DB=\jg&lw rYȔD콛ʱ$=ot_Ja5#vc#A#xE>f0kw?D 15_~P +T býۀ5 4L +Ni2z\?_б:#O*'5< LQ!rW>B%"pbB@3/f_?~ HR4< q>ShGlNY7鬫H ˉۻ$}'ĚAc& J# ei.3Ff([F܃zxWP@brb|ƭ@nf+$r".Kʹvl o1RJ"}1µvY!W< >2[6a`¼LA$SGa ; %~(oe|^ \yIHDVu!r>j_7CiN\Cus# JH1żp=RH bDg&b~麘:)1h\3r!ҚC+T%N6z`at6 ԠNkX97[Ь{6PgqwFMB3HN鲪u5i~@"RdmwJbTs QYGD+퐤yhVYhC"\T?C*N3V =42Fn D]Va%S1XPeX7̈VUf`Џ~'Y*zY4oZSu\;Uˈ fw}#@lNL=WsS2&MǏ?lNְ틀'~39<Pu1+laH'Ql˶Ԥ^Q,G '\/cHB th 8aY9Uճ3;K.Q ӧ0YP'~.I|TÙ^kPPaj֗mUgyO\MHs(Ц˪ZL@pH2~?C +ۼEj i7xQxӈ".^<@{|\ov__zZ>7GϞ_]=lK >[d 8WFw! ~:OvG/__/onwwtyǛr^$?D@wֈ[Iӊ1ho6[n>m?\? VV630v7/7/{ ߎ-7[J?3'"ZJ]a;\F֜ yk|q~Z6~_ݾFQO0l)>}Sg?G6_ +y=ǎ%n?2o75~s_Y>n0$Kn]-[\ݶtA_b|U(=B5Q^M$ȸ x*S7~FfN1&_| +:sIcrun6fCܥssh3Zg=X'Tv$7ލ&`1Z-x0͝iv)[cSpfp4Buv9xOΈ,.}'r +L:=jz0iY#ENoFpЈac,V:`H|W(P Z)+4gjreaMciZM!1!ij+%+`|.ϚT `k0 #GS y40y&o&CU+*65,8[NI9#Q hSv%ԫ)Ge}NNI +ζM UVל&Z#ԞVR -iK3z_14SP ]۷Il[ +=M7$Byx e0dOu}?̧%񅛳 ׬ޘ`t1*hkpYћK*^Gn{1&?qQF6e +h;n%܌KNRx{{{\iBԇC !qI+yŻ%L.0C*v=1yK6t,%5< {!W*ϫ\[Rt!*b('%C$I##+^͖/Lxudwడ.^Bٸf t{!qd-^Ŝ-G]rDpMEea1^I6ULvN/%fsQ ]Є8ykI2H9UTtuAAX0(n`H"R⦮,hT蕣GG#w2oI8PSU}ld\\ ƽIkqN3jmx?`]jQLFsdqjTޟH$^~l>٘Cx%1 9 |w*F$3Ity.QQ֣((U8 $FnVe1:B6uvpX(p ~&øz}u +YUB"E3d]!,0#z VKZI +V6$.7BN#52$r endstream endobj 31 0 obj <>stream +HWMre=\Ax #ƞzfD*ߪov# IxN}s-cIh} ݗ+3٠/*p/0wV X,2ؼA# lsU^FM'#lFpwQhFF{00k``|ss_m\'o W{5) # l8FEf&b(JVSk}!^xUqxFV *EDp}f oyq~>GtF\;Oe)Рit/9xƥWYtZh<\F7;$HL#`gyq{l]tĵ|iLtq[& {TT#A oRPjx.AKbc +.qˎMAE͠4ʷ̬SkOL=̬if;&'17@h;fUQ9Lw ygZuFa8DYY9/1hC!,9MD*1<jVl1P-8XV(.{ߌ@lnCm2`mNlkXx3iY XDitOȔR9afxGW9xH pL)^څ/@lIϓ,&TX$0QRʟ읆) +KTǗq!`; d"*[d^ҁ7 j'!DVGzJY=̺l-0Q P!\lǔե&r O$*&|36o 6".vn|t'U>K`R|i(j|_@y5N7 n"ql$47Yy5 D;!1$Fw695bg-?5A{8{ngH?G96E(ij,A kMP ,;g;2]0EdJخ$6q8Qls\ :󥷌=#%`%R`fX k`΢OW论cYoJ*؀z.n=DɻL!jLW2#"Y<,ƥцT0[#tXoԤLӝ;05<Χj$+'G-y5GW&*tРR<˛@;I9k@g[+s9[b ?t,h?RP? mOެܚ[Yܶ$&-NÏ Dɥͷ &FxNڨFHѵc*-kpu|«q5JoF0 +~jڋkGqX3;+ +J2~.ŵvA +:֖VYXC{WqozpSŭ; +lOGWzf 9p6B:4 zF{b#3f 1]Sζ iDc*#Ր32yw~yu5B(J"7 }W~yM@%P+>RtGŷ&,*D ݹfOVg5:],-6] +t~ aۏ-Zݔ.iP#trbЂ$]*`?DŴc[pwh$&QD4˥c͓eQ.Zom+X-Rmr]J(7l9]UZsݵ4U"o"XrQR)v ɺ@1@Y'-Vr VWy&U¾5/5/;x.jn:jTaZXzɳ}p@;/Olqu0c pȡ,PƸgzkՆMmz3C *].kgӜx˩{7PpNAVђ3]dH軺a !6kexEeU[+4@b*þ$wJ_y~9C?spv;dPCKyY<=4sY#G@ +˪^QE%3~%rf0ʥHCV0ԑYF #_V'uLa,̠Gqq??OS Xs% 0˻L448|]78o$kdz\_f9vz.țw%^;zSѪ 9R&ߚC[:Gkw~kK2@1 mR {L_0uTHf +F85;o ZN l l`ԋ->VcsXX@k5m[*Fm*bk6^8 +|Ec+,N nLv R߽hV}jN +!!>ߴScvfiMIJYQ&K r5AB5KYGx +9oUQ@x$ä!/71(/|z:RRv9_W ךd/DT0/=xJY5dF>z *V㕘j2yZsn]֩YPnUYKl3uN+ޱKO~y@O ˫Jehm>spL`3w=kK{܅oT!V43P͡F;/OսR廕; Z^hkEt9!`os&|&dCo)ҚRUVo y4q eW/_jrm4MGCs(c +E=E!OKOvl'ةZff՝pscsŦ}.Bea u-8rd!r$%-E֏!. x>Ꭾ7 y(4=A4nۋPൎ|xXxcK>O[^32~p )vcouEvig$Vni5㷏Pc^lIhH'3$~=+Bb%HhUկT,>l8$@lM,q#<3Mc9ҿuFSCÉ:锊Po-~8 AϮ1J=Ɂ ڂasG% z0.s&p/l ɵ!?QjTҬ!h,"a:ޯiɑ=ŇS1KF[ڌsg|"|҂G +Y~f53t.  =]mﷲGk%E>h`rWi"2@rIg\{0@>x?GJꖋu]j"k~c]]ӀzuO3^Ug9UXI+if/KW"۫/W&21$SA=Wut!&"z߯"!KOqNaN(@/ͪv(߭W +#il(8q &PL4Y{6vS JaB,Gq2n#blLlf3?3 j2K7O:ږyA3!] JJ$$in]K I3=rmx1fWhnsޗST#3}?{hҡ%UdR#46cS&ھ+X <|&YwVE!agɂFL Ͳ {Dqu:.,>G m];$M>Ⱑmvʦ!]ŮEؼ`#1)5>I?t b{[˜!R/;/S(&= Im[|62 :& }av7 N}Su-TVSD8!l eisUJxzLЌ8V+hJ /P#{J-pr +TuWZ] Vp}hSahD6I!֏.ЕR\KKSKV/ &O FE“tSfGvL"a#iu"iH؄j21 +NJFe&~Zoc0;슮3.eB`d*"p +Cij?SMMRLub B5-cJ0M 3pf3l E "?;l*zU?KQYCw\+`CL8VLz^6(K"5K:N[ (|oe72b)2`|A t/U$a+vGrݏ{fa7ilˆ GQA*u`x|JɃS!R<> + @m&1X-H$ |-χkgD";&h/Q,\DŽ2!t4q#4PÙoG ublЀ R'WL ?Kc%鎀5K\?a>|4:pкN Zt&H_+&>!A;ef]pӃ+g7jCSX3͡:V=tx{ +<xl9 0%aŒ-%8w.i /`<ȂrמNwI!H^Ld`)N^^u赵Rbu ÝKKB,.'#" \s&k8,A7;e`cTw fqVsA+?,`dĈpWB(p$ + +L/!HELT;sVILd&Z0N{4GvMky)|6Z#l4AzLp?TxwczbsSJEvZp~mFQ <ּ)+F)qլP2 UCJ*QP  V)@RNcRIK'צ۲aטF'E|]V`f:p|t2U9nY7׷}!zuZijʳE[̟Gߏ&_Y1(IS]F?^_홈Gr )ح? ^¯(OQb͜"8bܾ- r5޹7X΃IlOXN`pƙu\o5;²+{R%Esz\^x|ΦECuSKו]gXN۲Q,n*`PjbfW`߲qbrܚb… /@p]ݨדwd-׿RwgEڍGlьӺ uK&ˢYgp6gDr vNj7@d7>Hi{#l˳?W0gx/z^Wvm`=;mv|rV+"\ lV/o eY.Kg +fX:ӻEs kt$&*'m$w ae3w0P"ׇy]iQvZ߸qoCI~$7>X;zU/|\L=/_O`SDk?g(k+\m.ԓkb?U8|lc {v*st(\6msm{O3dySCHJMYUWoYPJdRUZn8 +ǟ8 +$6δ*"c Yr`z gVEjM#'|$&v^RQ>`5K/L4y8p%˲@"jl؝]`٩jQұI=|G',i/Xŗ<utx` +_1U@Œ6قRĖVS\6ԃ^ )w#(kKY^}[|w +ݔU(G.Q:M 7θKdTo +쟆dJ,^V+J +LPر-;9{-s| 7{DQO݄LƉ.NRI{}H{3v;A|')^ 5`Du.9cem` kC>stream +HQr7O;exI*Z>暥%¬kTࠇf1%N9E.!i8ph!Mv{MChhN{?/"޿NFْq@ԿWB~47U3E7eElhBvO͍ɞ?afRɩ!W60fa"X9ൂMIVp@!gld'lWhmv%SPT ~p_B g_&8xY34JA DO3gsL3W[lhS{MÀfGLq\=cFxvmA" yYf +ÉWۅkg#35Q^py@(PQc!ȕ, ؔ/zȩ{}G Vx4χ8C57fҨ .y$h+fmaؔݸ@b@$E>!RJ ̸{O NwMbB Šw1ؿnj.a !ciG?L}A9Q/~5xן~Z>[SoShE)L8mK z2[9qi*q{o -ݳoc Y13.`FxvmA "Yf +=6NJp6}3T((+i K3QɧQ~sгgl> .*ݤq&Kx(B1ȹ^jބ'Ԭ3 ASb1v +ƙ*R.Yo39K%.Id hw T,JY1 !\@"Ië[Q 60FC mWr~,35%epuEGnTWֻ#ꗉ/ k@kMyotҟnzo2+!ciG?L}A9Q/~5xןsؖ_Prr合NOy +3A!g9Oۆ'oZ9pR-}Bp4jvϾiΏ%fLq\=cFxva%Z Ʉe0}o'%}3VB6h9,< 6:8D=$Ftˀ6lic"BHX1R]nR7Fep%A[d<\qsWw$p/o“fjVd} )1Uň;RT *[/? I_ursylgo$>MK幩֛ +-/mIL|dm6<0R + +Bq~eBs9->gJf |Zpw͊*'ɮ7h}Bp2!vf) 'fm{<ơ&kns LsXxmtxyO(f3-Yw #;BVLr#t$ t5o /"!X'pnR]VFz#%^wZ,oj/r:JڢkTFάo[nR' x>ζiZpD;mDU 8c oMxKCim=1<%zJF̽)9*( +ms9l]ș`.nxVFRr;nRm;1!8kp@`1YX4+ٵON&أke_:)' h&>84kFGp7h 4ۉrPbȺlGvIEv'ja1[-Ptvh >& F`KJ+89LXq Gm7[w| +e^ VdQʊGQhGddcA%C ƃA#PB/)΍!*R.YLO^D4E9o O#4By.Q_M~)LP8#ԍ.wF*5/_Ý#׀֘?{7}$&tY=dz,`,v +lз\n/f+rLznIkT*0{J .q7)xgҨ .y$ߋsP5Sb1v2@5K`%~8ƒ?{FNtyu7\jWbA-/+4ճ3|1y!֧"%7Pi:#/›~Xsl{bD)Ht'QЇW wC}z%/k662ɥ?e6 E';颋$NVI(Τ 3a2,c5$<}tFW@duwAt\,# 9T _;Ga2Ȇ꠨7Ȅ6;(h7`z!mp)m!< +2/RRIZzIO[y*#zvlX6 YD+ri^ۑdcTMY!Zٮ{w`:_N"T |ť!_$\v:3{d:o1ڛ .2"ps5#lN$DAU7fBa/a(0m7LaId,Iwr@"`|E“wMGi?B4"! Ӓ*#vNgV =ހxFM?U yPVf$BcADOڢzep/OНl"jߘ_ŶxaO=( Ir-o^]U9'TQ :S׷j8' +Ebz +8F('>f)>K"9]٬CcrǙBAi3䋄K&*p6~T,799Mlr`&3S9ЂɁ;*BW :uɀ6$M`-UpE)d#E_xkF%uB3 K2LeOP!-%Ec"B`UBkA*(c]Y͈PM A%m ij2΃挋Cx~y/ L}ja֌X8oZL]gXzӸkt'D e"/xwB/u!_$\R^^l&SlA͐AsedlчHoAy02X*EsYu̻۬:eY|iC/8(Tי3DOtUszI(8#e ݖlNA&kD ޽ endstream endobj 6 0 obj [5 0 R] endobj 33 0 obj <> endobj xref 0 34 0000000000 65535 f +0000000016 00000 n +0000000144 00000 n +0000045762 00000 n +0000000000 00000 f +0000047417 00000 n +0000289336 00000 n +0000045813 00000 n +0000046193 00000 n +0000048019 00000 n +0000047715 00000 n +0000047602 00000 n +0000046661 00000 n +0000046856 00000 n +0000046904 00000 n +0000047486 00000 n +0000047517 00000 n +0000047901 00000 n +0000048092 00000 n +0000048530 00000 n +0000049745 00000 n +0000064465 00000 n +0000082694 00000 n +0000097727 00000 n +0000113404 00000 n +0000123179 00000 n +0000142006 00000 n +0000165949 00000 n +0000193443 00000 n +0000220704 00000 n +0000247446 00000 n +0000273645 00000 n +0000285352 00000 n +0000289359 00000 n +trailer <<9170118CFE254860A6EEBF19A7194F7E>]>> startxref 289549 %%EOF \ No newline at end of file diff --git a/información/Maqueta/ficha_caballo.jpg b/información/Maqueta/ficha_caballo.jpg new file mode 100644 index 0000000..2bc9171 Binary files /dev/null and b/información/Maqueta/ficha_caballo.jpg differ diff --git a/información/Maqueta/ficha_caballo.psd b/información/Maqueta/ficha_caballo.psd new file mode 100644 index 0000000..add3f96 Binary files /dev/null and b/información/Maqueta/ficha_caballo.psd differ diff --git a/información/Maqueta/portada.jpg b/información/Maqueta/portada.jpg new file mode 100644 index 0000000..f609128 Binary files /dev/null and b/información/Maqueta/portada.jpg differ diff --git a/información/Maqueta/portada.psd b/información/Maqueta/portada.psd new file mode 100644 index 0000000..7fbe728 Binary files /dev/null and b/información/Maqueta/portada.psd differ diff --git a/información/Maqueta/recursos/18-Ribbon-Social-Media-Icons.zip b/información/Maqueta/recursos/18-Ribbon-Social-Media-Icons.zip new file mode 100644 index 0000000..1c783ca Binary files /dev/null and b/información/Maqueta/recursos/18-Ribbon-Social-Media-Icons.zip differ diff --git a/información/Maqueta/recursos/free_ribbon_navigation__psd_by_willyepp-d3e1wyw.psd b/información/Maqueta/recursos/free_ribbon_navigation__psd_by_willyepp-d3e1wyw.psd new file mode 100644 index 0000000..bd1db40 Binary files /dev/null and b/información/Maqueta/recursos/free_ribbon_navigation__psd_by_willyepp-d3e1wyw.psd differ diff --git a/información/Maqueta/recursos/ribbon.psd b/información/Maqueta/recursos/ribbon.psd new file mode 100644 index 0000000..2ecf946 Binary files /dev/null and b/información/Maqueta/recursos/ribbon.psd differ diff --git a/información/Maqueta/recursos/socialribbons.psd b/información/Maqueta/recursos/socialribbons.psd new file mode 100644 index 0000000..944e9e3 Binary files /dev/null and b/información/Maqueta/recursos/socialribbons.psd differ diff --git a/información/Maqueta/socialribbons.psd b/información/Maqueta/socialribbons.psd new file mode 100644 index 0000000..76ae395 Binary files /dev/null and b/información/Maqueta/socialribbons.psd differ diff --git a/referencia/themeforest-2833226-avada-responsive-multipurpose-theme.zip b/referencia/themeforest-2833226-avada-responsive-multipurpose-theme.zip new file mode 100644 index 0000000..84f2776 Binary files /dev/null and b/referencia/themeforest-2833226-avada-responsive-multipurpose-theme.zip differ diff --git a/src/.htaccess b/src/.htaccess new file mode 100644 index 0000000..1b987b8 --- /dev/null +++ b/src/.htaccess @@ -0,0 +1,12 @@ + +# BEGIN WordPress + +RewriteEngine On +RewriteBase /wordpress/ +RewriteRule ^index\.php$ - [L] +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule . /wordpress/index.php [L] + + +# END WordPress diff --git a/src/index.php b/src/index.php new file mode 100644 index 0000000..dd3d554 --- /dev/null +++ b/src/index.php @@ -0,0 +1,17 @@ + + + + + + WordPress › Léeme + + + +

    + WordPress +
    Version 3.8 +

    +

    Plataforma Semántica de Publicación Personal

    + +

    Para empezar

    +

    Te damos la bienvenida. WordPress es un proyecto muy especial para mí. Cada desarrollador o colaborador añade algo único a la mezcla, y juntos vamos creando algo hermoso de lo que me enorgullece formar parte. Se han dedicado miles de horas a WordPress y nos seguimos empleando en mejorarlo cada día. Gracias por hacerlo parte de tu mundo.

    +

    — Matt Mullenweg

    + +

    Instalación: la famosa Instalación en 5 minutos

    +
      +
    1. Unzip the package in an empty directory and upload everything.
    2. +
    3. Abre wp-admin/install.php desde tu navegador. Se abrirá un proceso que te guiará para crear el archivo wp-config.php con los detalles de conexión a tu base de datos. +
        +
      1. Si esto no funciona, no te preocupes. No funciona en todos los alojamientos. Abre wp-config-sample.php con un editor de texto como WordPad o similar y añade los detalles de tu base de datos.
      2. +
      3. Guarda el archivo como wp-config.php y súbelo.
      4. +
      5. Abre wp-admin/install.php en tu navegador.
      6. +
      +
    4. +
    5. Una vez completado el archivo de configuración, el instalador creará las tablas necesarias para tu blog en la base de datos. Si apareciera algún error, chequea de nuevo tu archivo wp-config.php y vuelve a intentarlo. Si falla de nuevo, por favor visita los foros de soporte con toda la información que puedas conseguir.
    6. +
    7. Si no incluiste una contraseña, utiliza la que se te habrá enviado por correo electrónico. Si no proporcionaste un nombre de usuario, éste será admin.
    8. +
    9. El instalador debería enviarte a la página de login. Accede con el nombre de usuario y contraseña que seleccionaste durante la instalación. Si la contraseña fue generada por el sistema, puedes hacer clic en 'Perfil' para modificarla.
    10. +
    + +

    Actualizar

    +

    Usar el Actualizador automático

    +

    Si estás actualizando desde la versión 2.7 o superior puedes usar el actualizador automático:

    +
      +
    1. Abre wp-admin/update-core.php en tu navegador y sigue las instrucciones.
    2. +
    3. ¿Querías más? ¡Eso es todo!
    4. +
    + +

    Actualizar manualmente:

    +
      +
    1. Antes de actualizar nada, asegúrate de tener copias de seguridad de cualquier archivo que hayas modificado, como index.php.
    2. +
    3. Elimina tus archivos de WP anteriores, guardando aquellos que hayas modificado.
    4. +
    5. Sube los nuevos archivos a tu servidor.
    6. +
    7. Dirige tu navegador a /wp-admin/upgrade.php.
    8. +
    + +

    Migrar desde otros sistemas

    +

    WordPress puede importar contenido de otros sistemas. Lo primero que tienes que hacer es instalar WordPress y ponerlo en marcha como se ha descrito arriba, y luego usar nuestras herramientas de importación.

    + +

    Requisitos del sistema

    +
      +
    • PHP versión 5.2.4 o superior.
    • +
    • MySQL versión 5.0 o superior.
    • +
    + +

    Recomendaciones del sistema

    + + +

    Recursos en la red

    +

    Si alguna de tus preguntas no encuentra respuesta en este documento, te sugerimos que aproveches los numerosos recursos de WordPress en la red:

    +
    +
    El Codex de WordPress
    +
    El Codex es la enciclopedia de todo lo relacionado con WordPress. Es la fuente de información más detallada disponible sobre WordPress.
    +
    El blog de WordPress
    +
    Aquí encontrarás las últimas actualizaciones y noticias acerca de WordPress. Las noticias recientes sobre WordPress aparecerán en tu escritorio por defecto.
    +
    WordPress Planet
    +
    El WordPress Planet (Planeta WordPress) es un agregador de noticias que recopila entradas de blogs de WordPress por toda la web.
    +
    Foros de ayuda de WordPress
    +
    Si has buscado por todas partes pero sigues sin encontrar la respuesta, en los foros de ayuda, muy activos, cuentas con una amplia comunidad deseosa de ayudar. Para ayudarles a ayudarte, asegúrate de usar un título descriptivo e incluir en tu pregunta tantos detalles como te sea posible.
    +
    Foros de ayuda de WordPress en español
    +
    También puedes acceder a los foros específicos para español.
    +
    Canal IRC de WordPress
    +
    Por último, existe un canal de chat utilizado por la gente que usa Wordpress para intercambiar opiniones y eventualmente solicitar ayuda. La página del wiki que ves arriba podrá orientarte. (irc.freenode.net #wordpress)
    +
    + +

    Final Notes

    +
      +
    • Si tienes alguna sugerencia, idea, comentario, o si encuentras (ejem) un fallo, únete a nosotros en los Foros de soporte.
    • +
    • WordPress tiene ahora una robusta API de plugins que facilita la ampliación del código. Si eres un desarrollador interesado en utilizarla, mira la documentación para plugins en el Codex. En la mayoría de los casos, no tendrás que modificar nada del código central.
    • +
    + +

    Comparte tu afición

    +

    WordPress no cuenta con campañas de publicidad multimillonarias ni promotores famosos, pero tiene algo aún mejor: tú. Si disfrutas con WordPress, por favor, piensa en decírselo a un amigo, instalárselo a alguien menos entendido que tú o escribir al autor de un artículo que pase de nosotros.

    + +

    WordPress es la continuación oficial de b2/cafélog, de Michel V. El trabajo se ha continuado gracias a los desarrolladores de WordPress. Si quieres apoyar a WordPress puedes dar un donativo.

    + +

    Licencia

    +

    WordPress se distribuye bajo la GPLv2 (ver la licencia).

    + + + + \ No newline at end of file diff --git a/src/wp-activate.php b/src/wp-activate.php new file mode 100644 index 0000000..226780c --- /dev/null +++ b/src/wp-activate.php @@ -0,0 +1,132 @@ +cache_enabled = false; + +// Fix for page title +$wp_query->is_404 = false; + +/** + * Fires before the Site Activation page is loaded. + * + * @since 3.0 + */ +do_action( 'activate_header' ); + +/** + * Adds an action hook specific to this page that fires on wp_head + * + * @since MU + */ +function do_activate_header() { + /** + * Fires before the Site Activation page is loaded, but on the wp_head action. + * + * @since 3.0 + */ + do_action( 'activate_wp_head' ); +} +add_action( 'wp_head', 'do_activate_header' ); + +/** + * Loads styles specific to this page. + * + * @since MU + */ +function wpmu_activate_stylesheet() { + ?> + + + +
    + + +

    +
    +

    + +
    +

    +

    + +

    +
    + + get_error_code() || 'blog_taken' == $result->get_error_code() ) { + $signup = $result->get_error_data(); + ?> +

    + '; + if ( $signup->domain . $signup->path == '' ) { + printf( __('Your account has been activated. You may now log in to the site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can reset your password.'), network_site_url( 'wp-login.php', 'login' ), $signup->user_login, $signup->user_email, wp_lostpassword_url() ); + } else { + printf( __('Your site at %2$s is active. You may now log in to your site using your chosen username of “%3$s”. Please check your email inbox at %4$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can reset your password.'), 'http://' . $signup->domain, $signup->domain, $signup->user_login, $signup->user_email, wp_lostpassword_url() ); + } + echo '

    '; + } else { + ?> +

    + '.$result->get_error_message().'

    '; + } + } else { + extract($result); + $url = get_blogaddress_by_id( (int) $blog_id); + $user = get_userdata( (int) $user_id); + ?> +

    + +
    +

    user_login ?>

    +

    +
    + + +

    View your site or Log in'), $url, $url . 'wp-login.php' ); ?>

    + +

    Log in or go back to the homepage.' ), network_site_url('wp-login.php', 'login'), network_home_url() ); ?>

    + +
    + + diff --git a/src/wp-admin/about.php b/src/wp-admin/about.php new file mode 100644 index 0000000..8601850 --- /dev/null +++ b/src/wp-admin/about.php @@ -0,0 +1,182 @@ + +
    + +

    + +
    + +
    + + + +
    +

    +

    Version %1$s addressed %2$s bug.', + 'Version %1$s addressed %2$s bugs.', 31 ), '3.8.1', number_format_i18n( 31 ) ); ?> + the release notes.' ), 'http://codex.wordpress.org/Version_3.8.1' ); ?> +

    +
    + +
    +

    + +
    +
    + +

    +

    +
    +
    + +

    +

    +
    +
    + +

    +

    +
    +
    +
    + +
    + +
    +
    +
    +

    +

    +

    +

    +
    +
    + +
    +
    +
    + +
    + + 1 && has_action( 'admin_color_scheme_picker' ) ) : ?> +
    +
    +
    +

    +

    + +

    visit your profile.' ), get_edit_profile_url( get_current_user_id() ) ); ?>

    +
    +
    +
    + +
    + + +
    +
    +
    +

    +

    +

    +

    +

    +
    +
    + +
    +
    +
    + +
    + +
    +

    + + +
    +
    +

    +

    +

    +
    +
    +
    + +
    + +
    + + | + + +
    + +
    +Version %1$s addressed a security issue.', + 'Version %1$s addressed some security issues.' ); + +/* translators: 1: WordPress version number, 2: plural number of bugs. */ +_n_noop( 'Version %1$s addressed %2$s bug.', + 'Version %1$s addressed %2$s bugs.' ); + +/* translators: 1: WordPress version number, 2: plural number of bugs. Singular security issue. */ +_n_noop( 'Version %1$s addressed a security issue and fixed %2$s bug.', + 'Version %1$s addressed a security issue and fixed %2$s bugs.' ); + +/* translators: 1: WordPress version number, 2: plural number of bugs. More than one security issue. */ +_n_noop( 'Version %1$s addressed some security issues and fixed %2$s bug.', + 'Version %1$s addressed some security issues and fixed %2$s bugs.' ); + +__( 'For more information, see the release notes.' ); diff --git a/src/wp-admin/admin-ajax.php b/src/wp-admin/admin-ajax.php new file mode 100644 index 0000000..8847cda --- /dev/null +++ b/src/wp-admin/admin-ajax.php @@ -0,0 +1,95 @@ + + +
    +
    +
    + + + + +
    + + + diff --git a/src/wp-admin/admin-functions.php b/src/wp-admin/admin-functions.php new file mode 100644 index 0000000..f596749 --- /dev/null +++ b/src/wp-admin/admin-functions.php @@ -0,0 +1,15 @@ +site_name ) ); +elseif ( is_user_admin() ) + $admin_title = sprintf( __( 'Global Dashboard: %s' ), esc_html( get_current_site()->site_name ) ); +else + $admin_title = get_bloginfo( 'name' ); + +if ( $admin_title == $title ) + $admin_title = sprintf( __( '%1$s — WordPress' ), $title ); +else + $admin_title = sprintf( __( '%1$s ‹ %2$s — WordPress' ), $title, $admin_title ); + +/** + * Filter the content for an admin page. + * + * @since 3.1.0 + * + * @param string $admin_title The page title, with extra context added. + * @param string $title The original page title. + */ +$admin_title = apply_filters( 'admin_title', $admin_title, $title ); + +wp_user_settings(); + +_wp_admin_html_begin(); +?> +<title><?php echo $admin_title; ?> + + + + for a specific admin page based on $hook_suffix. + * + * @since 2.1.0 + */ +do_action( "admin_head-$hook_suffix" ); + +/** + * Fires in for all admin pages. + * + * @since 2.1.0 + */ +do_action( 'admin_head' ); + +if ( get_user_setting('mfold') == 'f' ) + $admin_body_class .= ' folded'; + +if ( !get_user_setting('unfold') ) + $admin_body_class .= ' auto-fold'; + +if ( is_admin_bar_showing() ) + $admin_body_class .= ' admin-bar'; + +if ( is_rtl() ) + $admin_body_class .= ' rtl'; + +if ( $current_screen->post_type ) + $admin_body_class .= ' post-type-' . $current_screen->post_type; + +if ( $current_screen->taxonomy ) + $admin_body_class .= ' taxonomy-' . $current_screen->taxonomy; + +$admin_body_class .= ' branch-' . str_replace( array( '.', ',' ), '-', floatval( $wp_version ) ); +$admin_body_class .= ' version-' . str_replace( '.', '-', preg_replace( '/^([.0-9]+).*/', '$1', $wp_version ) ); +$admin_body_class .= ' admin-color-' . sanitize_html_class( get_user_option( 'admin_color' ), 'fresh' ); +$admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) ); + +if ( wp_is_mobile() ) + $admin_body_class .= ' mobile'; + +if ( is_multisite() ) + $admin_body_class .= ' multisite'; + +if ( is_network_admin() ) + $admin_body_class .= ' network-admin'; + +$admin_body_class .= ' no-customize-support no-svg'; + +?> + + CSS classes. + * + * This filter differs from the post_class or body_class filters in two important ways: + * 1. $classes is a space-separated string of class names instead of an array. + * 2. Not all core admin classes are filterable, notably: wp-admin, wp-core-ui, and no-js cannot be removed. + * + * @since 2.3.0 + * + * @param string $classes Space-separated string of CSS classes. + */ +?> +"> + + + + +
    + + +
    + + + +
    +set_parentage( $parent_file ); + +?> + +
    +render_screen_meta(); + +if ( is_network_admin() ) { + /** + * Print network admin screen notices. + * + * @since 3.1.0 + */ + do_action( 'network_admin_notices' ); +} elseif ( is_user_admin() ) { + /** + * Print user admin screen notices. + * + * @since 3.1.0 + */ + do_action( 'user_admin_notices' ); +} else { + /** + * Print admin screen notices. + * + * @since 3.1.0 + */ + do_action( 'admin_notices' ); +} + +/** + * Print generic admin screen notices. + * + * @since 3.1.0 + */ +do_action( 'all_admin_notices' ); + +if ( $parent_file == 'options-general.php' ) + require(ABSPATH . 'wp-admin/options-head.php'); diff --git a/src/wp-admin/admin-post.php b/src/wp-admin/admin-post.php new file mode 100644 index 0000000..7103994 --- /dev/null +++ b/src/wp-admin/admin-post.php @@ -0,0 +1,45 @@ + 50 && mt_rand( 0, (int)( $c / 50 ) ) == 1 ) ) { + require_once( ABSPATH . WPINC . '/http.php' ); + $response = wp_remote_get( admin_url( 'upgrade.php?step=1' ), array( 'timeout' => 120, 'httpversion' => '1.1' ) ); + /** + * Fires after the multisite DB upgrade is complete. + * + * @since 3.0.0 + * + * @param array|WP_Error $response The upgrade response array or WP_Error on failure. + */ + do_action( 'after_mu_upgrade', $response ); + unset($response); + } + unset($c); + } +} + +require_once(ABSPATH . 'wp-admin/includes/admin.php'); + +auth_redirect(); + +// Schedule trash collection +if ( !wp_next_scheduled('wp_scheduled_delete') && !defined('WP_INSTALLING') ) + wp_schedule_event(time(), 'daily', 'wp_scheduled_delete'); + +set_screen_options(); + +$date_format = get_option('date_format'); +$time_format = get_option('time_format'); + +wp_enqueue_script( 'common' ); + +$editing = false; + +if ( isset($_GET['page']) ) { + $plugin_page = wp_unslash( $_GET['page'] ); + $plugin_page = plugin_basename($plugin_page); +} + +if ( isset( $_REQUEST['post_type'] ) && post_type_exists( $_REQUEST['post_type'] ) ) + $typenow = $_REQUEST['post_type']; +else + $typenow = ''; + +if ( isset( $_REQUEST['taxonomy'] ) && taxonomy_exists( $_REQUEST['taxonomy'] ) ) + $taxnow = $_REQUEST['taxonomy']; +else + $taxnow = ''; + +if ( WP_NETWORK_ADMIN ) + require(ABSPATH . 'wp-admin/network/menu.php'); +elseif ( WP_USER_ADMIN ) + require(ABSPATH . 'wp-admin/user/menu.php'); +else + require(ABSPATH . 'wp-admin/menu.php'); + +if ( current_user_can( 'manage_options' ) ) { + /** + * Filter the maximum memory limit available for administration screens. + * + * This only applies to administrators, who may require more memory for tasks like updates. + * Memory limits when processing images (uploaded or edited by users of any role) are + * handled separately. + * + * The WP_MAX_MEMORY_LIMIT constant specifically defines the maximum memory limit available + * when in the administration back-end. The default is 256M, or 256 megabytes of memory. + * + * @since 3.0.0 + * + * @param string 'WP_MAX_MEMORY_LIMIT' The maximum WordPress memory limit. Default 256M. + */ + @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) ); +} + +/** + * Fires as an admin screen or script is being initialized. + * + * Note, this does not just run on user-facing admin screens. + * It runs on admin-ajax.php and admin-post.php as well. + * + * This is roughly analgous to the more general 'init' hook, which fires earlier. + * + * @since 2.5.0 + */ +do_action( 'admin_init' ); + +if ( isset($plugin_page) ) { + if ( !empty($typenow) ) + $the_parent = $pagenow . '?post_type=' . $typenow; + else + $the_parent = $pagenow; + if ( ! $page_hook = get_plugin_page_hook($plugin_page, $the_parent) ) { + $page_hook = get_plugin_page_hook($plugin_page, $plugin_page); + // backwards compatibility for plugins using add_management_page + if ( empty( $page_hook ) && 'edit.php' == $pagenow && '' != get_plugin_page_hook($plugin_page, 'tools.php') ) { + // There could be plugin specific params on the URL, so we need the whole query string + if ( !empty($_SERVER[ 'QUERY_STRING' ]) ) + $query_string = $_SERVER[ 'QUERY_STRING' ]; + else + $query_string = 'page=' . $plugin_page; + wp_redirect( admin_url('tools.php?' . $query_string) ); + exit; + } + } + unset($the_parent); +} + +$hook_suffix = ''; +if ( isset($page_hook) ) + $hook_suffix = $page_hook; +else if ( isset($plugin_page) ) + $hook_suffix = $plugin_page; +else if ( isset($pagenow) ) + $hook_suffix = $pagenow; + +set_current_screen(); + +// Handle plugin admin pages. +if ( isset($plugin_page) ) { + if ( $page_hook ) { + /** + * Fires before a particular screen is loaded. + * + * The load-* hook fires in a number of contexts. This hook is for plugin screens + * where a callback is provided when the screen is registered. + * + * The dynamic portion of the hook name, $page_hook, refers to a mixture of plugin + * page information including: + * 1. The page type. If the plugin page is registered as a submenu page, such as for + * Settings, the page type would be 'settings'. Otherwise the type is 'toplevel'. + * 2. A separator of '_page_'. + * 3. The plugin basename minus the file extension. + * + * Together, the three parts form the $page_hook. Citing the example above, + * the hook name used would be 'load-settings_page_pluginbasename'. + * + * @see get_plugin_page_hook() + * + * @since 2.1.0 + */ + do_action( 'load-' . $page_hook ); + if (! isset($_GET['noheader'])) + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + /** + * Used to call the registered callback for a plugin screen. + * + * @access private + * + * @since 1.5.0 + */ + do_action( $page_hook ); + } else { + if ( validate_file($plugin_page) ) + wp_die(__('Invalid plugin page')); + + if ( !( file_exists(WP_PLUGIN_DIR . "/$plugin_page") && is_file(WP_PLUGIN_DIR . "/$plugin_page") ) && !( file_exists(WPMU_PLUGIN_DIR . "/$plugin_page") && is_file(WPMU_PLUGIN_DIR . "/$plugin_page") ) ) + wp_die(sprintf(__('Cannot load %s.'), htmlentities($plugin_page))); + + /** + * Fires before a particular screen is loaded. + * + * The load-* hook fires in a number of contexts. This hook is for plugin screens + * where the file to load is directly included, rather than the use of a function. + * + * The dynamic portion of the hook name, $plugin_page, refers to the plugin basename. + * + * @see plugin_basename() + * + * @since 1.5.0 + */ + do_action( 'load-' . $plugin_page ); + + if ( !isset($_GET['noheader'])) + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + if ( file_exists(WPMU_PLUGIN_DIR . "/$plugin_page") ) + include(WPMU_PLUGIN_DIR . "/$plugin_page"); + else + include(WP_PLUGIN_DIR . "/$plugin_page"); + } + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + exit(); +} else if (isset($_GET['import'])) { + + $importer = $_GET['import']; + + if ( ! current_user_can('import') ) + wp_die(__('You are not allowed to import.')); + + if ( validate_file($importer) ) { + wp_redirect( admin_url( 'import.php?invalid=' . $importer ) ); + exit; + } + + if ( ! isset($wp_importers[$importer]) || ! is_callable($wp_importers[$importer][2]) ) { + wp_redirect( admin_url( 'import.php?invalid=' . $importer ) ); + exit; + } + + /** + * Fires before an importer screen is loaded. + * + * The dynamic portion of the hook name, $importer, refers to the importer slug. + * + * @since 3.5.0 + */ + do_action( 'load-importer-' . $importer ); + + $parent_file = 'tools.php'; + $submenu_file = 'import.php'; + $title = __('Import'); + + if (! isset($_GET['noheader'])) + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); + + define('WP_IMPORTING', true); + + /** + * Whether to filter imported data through kses on import. + * + * Multisite uses this hook to filter all data through kses by default, + * as a super administrator may be assisting an untrusted user. + * + * @since 3.1.0 + * + * @param bool false Whether to force data to be filtered through kses. Default false. + */ + if ( apply_filters( 'force_filtered_html_on_import', false ) ) + kses_init_filters(); // Always filter imported data with kses on multisite. + + call_user_func($wp_importers[$importer][2]); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + // Make sure rules are flushed + flush_rewrite_rules(false); + + exit(); +} else { + /** + * Fires before a particular screen is loaded. + * + * The load-* hook fires in a number of contexts. This hook is for core screens. + * + * The dynamic portion of the hook name, $pagenow, is a global variable + * referring to the filename of the current page, such as 'admin.php', + * 'post-new.php' etc. A complete hook for the latter would be 'load-post-new.php'. + * + * @since 2.1.0 + */ + do_action( 'load-' . $pagenow ); + // Backwards compatibility with old load-page-new.php, load-page.php, + // and load-categories.php actions. + if ( $typenow == 'page' ) { + if ( $pagenow == 'post-new.php' ) + do_action( 'load-page-new.php' ); + elseif ( $pagenow == 'post.php' ) + do_action( 'load-page.php' ); + } elseif ( $pagenow == 'edit-tags.php' ) { + if ( $taxnow == 'category' ) + do_action( 'load-categories.php' ); + elseif ( $taxnow == 'link_category' ) + do_action( 'load-edit-link-categories.php' ); + } +} + +if ( ! empty( $_REQUEST['action'] ) ) { + /** + * Fires when an 'action' request variable is sent. + * + * The dynamic portion of the hook name, $_REQUEST['action'], + * refers to the action derived from the GET or POST request. + * + * @since 2.6.0 + */ + do_action( 'admin_action_' . $_REQUEST['action'] ); +} diff --git a/src/wp-admin/async-upload.php b/src/wp-admin/async-upload.php new file mode 100644 index 0000000..a16c8d3 --- /dev/null +++ b/src/wp-admin/async-upload.php @@ -0,0 +1,109 @@ +post_type ) + wp_die( __( 'Unknown post type.' ) ); + if ( ! current_user_can( 'edit_post', $id ) ) + wp_die( __( 'You are not allowed to edit this item.' ) ); + + switch ( $_REQUEST['fetch'] ) { + case 3 : + if ( $thumb_url = wp_get_attachment_image_src( $id, 'thumbnail', true ) ) + echo ''; + echo '' . _x( 'Edit', 'media item' ) . ''; + $title = $post->post_title ? $post->post_title : wp_basename( $post->guid ); // title shouldn't ever be empty, but use filename just in cas.e + echo '
    ' . esc_html( wp_html_excerpt( $title, 60, '…' ) ) . '
    '; + break; + case 2 : + add_filter('attachment_fields_to_edit', 'media_single_attachment_fields_to_edit', 10, 2); + echo get_media_item($id, array( 'send' => false, 'delete' => true )); + break; + default: + add_filter('attachment_fields_to_edit', 'media_post_single_attachment_fields_to_edit', 10, 2); + echo get_media_item($id); + break; + } + exit; +} + +check_admin_referer('media-form'); + +$post_id = 0; +if ( isset( $_REQUEST['post_id'] ) ) { + $post_id = absint( $_REQUEST['post_id'] ); + if ( ! get_post( $post_id ) || ! current_user_can( 'edit_post', $post_id ) ) + $post_id = 0; +} + +$id = media_handle_upload( 'async-upload', $post_id ); +if ( is_wp_error($id) ) { + echo '
    + ' . __('Dismiss') . ' + ' . sprintf(__('“%s” has failed to upload due to an error'), esc_html($_FILES['async-upload']['name']) ) . '
    ' . + esc_html($id->get_error_message()) . '
    '; + exit; +} + +if ( $_REQUEST['short'] ) { + // short form response - attachment ID only + echo $id; +} else { + // long form response - big chunk o html + $type = $_REQUEST['type']; + + /** + * Filter the returned ID of an uploaded attachment. + * + * The dynamic portion of the hook name, $type, refers to the attachment type, + * such as 'iamge', 'audio', 'video', 'file', etc. + * + * @since 2.5.0 + * + * @param int $id Uploaded attachment ID. + */ + echo apply_filters( "async_upload_{$type}", $id ); +} diff --git a/src/wp-admin/comment.php b/src/wp-admin/comment.php new file mode 100644 index 0000000..d4d37ee --- /dev/null +++ b/src/wp-admin/comment.php @@ -0,0 +1,302 @@ +

    $msg

    "; + include( ABSPATH . 'wp-admin/admin-footer.php' ); + die; +} + +switch( $action ) { + +case 'editcomment' : + $title = __('Edit Comment'); + + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __( 'You can edit the information left in a comment if needed. This is often useful when you notice that a commenter has made a typographical error.' ) . '

    ' . + '

    ' . __( 'You can also moderate the comment from this screen using the Status box, where you can also change the timestamp of the comment.' ) . '

    ' + ) ); + + get_current_screen()->set_help_sidebar( + '

    ' . __( 'For more information:' ) . '

    ' . + '

    ' . __( 'Documentation on Comments' ) . '

    ' . + '

    ' . __( 'Support Forums' ) . '

    ' + ); + + wp_enqueue_script('comment'); + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + + $comment_id = absint( $_GET['c'] ); + + if ( !$comment = get_comment( $comment_id ) ) + comment_footer_die( __('Oops, no comment with this ID.') . sprintf(' ' . __('Go back') . '.', 'javascript:history.go(-1)') ); + + if ( !current_user_can( 'edit_comment', $comment_id ) ) + comment_footer_die( __('You are not allowed to edit this comment.') ); + + if ( 'trash' == $comment->comment_approved ) + comment_footer_die( __('This comment is in the Trash. Please move it out of the Trash if you want to edit it.') ); + + $comment = get_comment_to_edit( $comment_id ); + + include( ABSPATH . 'wp-admin/edit-form-comment.php' ); + + break; + +case 'delete' : +case 'approve' : +case 'trash' : +case 'spam' : + + $title = __('Moderate Comment'); + + $comment_id = absint( $_GET['c'] ); + + if ( !$comment = get_comment_to_edit( $comment_id ) ) { + wp_redirect( admin_url('edit-comments.php?error=1') ); + die(); + } + + if ( !current_user_can( 'edit_comment', $comment->comment_ID ) ) { + wp_redirect( admin_url('edit-comments.php?error=2') ); + die(); + } + + // No need to re-approve/re-trash/re-spam a comment. + if ( $action == str_replace( '1', 'approve', $comment->comment_approved ) ) { + wp_redirect( admin_url( 'edit-comments.php?same=' . $comment_id ) ); + die(); + } + + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + + $formaction = $action . 'comment'; + $nonce_action = 'approve' == $action ? 'approve-comment_' : 'delete-comment_'; + $nonce_action .= $comment_id; + +?> +
    + +
    + +

    + +comment_approved != '0' ) { // if not unapproved + $message = ''; + switch ( $comment->comment_approved ) { + case '1' : + $message = __('This comment is currently approved.'); + break; + case 'spam' : + $message = __('This comment is currently marked as spam.'); + break; + case 'trash' : + $message = __('This comment is currently in the Trash.'); + break; + } + if ( $message ) + echo '

    ' . $message . '

    '; +} +?> +

    + + + + + + +comment_author_email ) { ?> + + + + + +comment_author_url ) { ?> + + + + + + + + + +
    comment_author; ?>
    comment_author_email; ?>
    comment_author_url; ?>
    comment_content; ?>
    + +

    + +
    + + + + + + +
    + + + + + +
    + +
    +
    +' . __('Go back') . '.', 'edit-comments.php') ); + if ( !current_user_can( 'edit_comment', $comment->comment_ID ) ) + comment_footer_die( __('You are not allowed to edit comments on this post.') ); + + if ( '' != wp_get_referer() && ! $noredir && false === strpos(wp_get_referer(), 'comment.php') ) + $redir = wp_get_referer(); + elseif ( '' != wp_get_original_referer() && ! $noredir ) + $redir = wp_get_original_referer(); + elseif ( in_array( $action, array( 'approvecomment', 'unapprovecomment' ) ) ) + $redir = admin_url('edit-comments.php?p=' . absint( $comment->comment_post_ID ) ); + else + $redir = admin_url('edit-comments.php'); + + $redir = remove_query_arg( array('spammed', 'unspammed', 'trashed', 'untrashed', 'deleted', 'ids', 'approved', 'unapproved'), $redir ); + + switch ( $action ) { + case 'deletecomment' : + wp_delete_comment( $comment_id ); + $redir = add_query_arg( array('deleted' => '1'), $redir ); + break; + case 'trashcomment' : + wp_trash_comment($comment_id); + $redir = add_query_arg( array('trashed' => '1', 'ids' => $comment_id), $redir ); + break; + case 'untrashcomment' : + wp_untrash_comment($comment_id); + $redir = add_query_arg( array('untrashed' => '1'), $redir ); + break; + case 'spamcomment' : + wp_spam_comment($comment_id); + $redir = add_query_arg( array('spammed' => '1', 'ids' => $comment_id), $redir ); + break; + case 'unspamcomment' : + wp_unspam_comment($comment_id); + $redir = add_query_arg( array('unspammed' => '1'), $redir ); + break; + case 'approvecomment' : + wp_set_comment_status( $comment_id, 'approve' ); + $redir = add_query_arg( array( 'approved' => 1 ), $redir ); + break; + case 'unapprovecomment' : + wp_set_comment_status( $comment_id, 'hold' ); + $redir = add_query_arg( array( 'unapproved' => 1 ), $redir ); + break; + } + + wp_redirect( $redir ); + die; + break; + +case 'editedcomment' : + + $comment_id = absint( $_POST['comment_ID'] ); + $comment_post_id = absint( $_POST['comment_post_ID'] ); + + check_admin_referer( 'update-comment_' . $comment_id ); + + edit_comment(); + + $location = ( empty( $_POST['referredby'] ) ? "edit-comments.php?p=$comment_post_id" : $_POST['referredby'] ) . '#comment-' . $comment_id; + + /** + * Filter the URI the user is redirected to after editing a comment in the admin. + * + * @since 2.1.0 + * + * @param string $location The URI the user will be redirected to. + * @param int $comment_id The ID of the comment being edited. + */ + $location = apply_filters( 'comment_edit_redirect', $location, $comment_id ); + wp_redirect( $location ); + + exit(); + break; + +default: + wp_die( __('Unknown action.') ); + break; + +} // end switch + +include( ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/src/wp-admin/credits.php b/src/wp-admin/credits.php new file mode 100644 index 0000000..8624af0 --- /dev/null +++ b/src/wp-admin/credits.php @@ -0,0 +1,190 @@ +' . esc_html( $display_name ) . ''; +} + +/** + * Retrieve the link to an external library used in WordPress. + * + * @access private + * @since 3.2.0 + * + * @param string &$data External library data, passed by reference. + * @return string Link to the external library. + */ +function _wp_credits_build_object_link( &$data ) { + $data = '' . $data[0] . ''; +} + +list( $display_version ) = explode( '-', $wp_version ); + +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> +
    + +

    + +
    + +
    + + + +' . sprintf( __( 'WordPress is created by a worldwide team of passionate individuals. Get involved in WordPress.' ), + 'http://wordpress.org/about/', + /* translators: Url to the codex documentation on contributing to WordPress used on the credits page */ + __( 'http://codex.wordpress.org/Contributing_to_WordPress' ) ) . '

    '; + include( ABSPATH . 'wp-admin/admin-footer.php' ); + exit; +} + +echo '

    ' . __( 'WordPress is created by a worldwide team of passionate individuals.' ) . "

    \n"; + +$gravatar = is_ssl() ? 'https://secure.gravatar.com/avatar/' : 'http://0.gravatar.com/avatar/'; + +foreach ( $credits['groups'] as $group_slug => $group_data ) { + if ( $group_data['name'] ) { + if ( 'Translators' == $group_data['name'] ) { + // Considered a special slug in the API response. (Also, will never be returned for en_US.) + $title = _x( 'Translators', 'Translate this to be the equivalent of English Translators in your language for the credits page Translators section' ); + } elseif ( isset( $group_data['placeholders'] ) ) { + $title = vsprintf( translate( $group_data['name'] ), $group_data['placeholders'] ); + } else { + $title = translate( $group_data['name'] ); + } + + echo '

    ' . $title . "

    \n"; + } + + if ( ! empty( $group_data['shuffle'] ) ) + shuffle( $group_data['data'] ); // We were going to sort by ability to pronounce "hierarchical," but that wouldn't be fair to Matt. + + switch ( $group_data['type'] ) { + case 'list' : + array_walk( $group_data['data'], '_wp_credits_add_profile_link', $credits['data']['profiles'] ); + echo '

    ' . wp_sprintf( '%l.', $group_data['data'] ) . "

    \n\n"; + break; + case 'libraries' : + array_walk( $group_data['data'], '_wp_credits_build_object_link' ); + echo '

    ' . wp_sprintf( '%l.', $group_data['data'] ) . "

    \n\n"; + break; + default: + $compact = 'compact' == $group_data['type']; + $classes = 'wp-people-group ' . ( $compact ? 'compact' : '' ); + echo '\n"; + break; + } +} + +?> +

    Get involved in WordPress.' ), + /* translators: URL to the Make WordPress 'Get Involved' landing page used on the credits page */ + __( 'http://make.wordpress.org/' ) ); ?>

    + +
    + li.current > a.current:after { + border-left-color: #f1f1f1; +} + +.row-actions { + color: #ddd; +} + +.find-box-search, +.find-box-buttons { + background-color: #f7f7f7; + border-top: 1px solid #dfdfdf; +} + +.find-box { + background-color: #444; +} + +.find-box-head { + color: #eee; +} + +.find-box-inside { + background-color: #fff; +} + +a.page-numbers:hover { + border-color: #999; +} + +body, +#wpbody, +.form-table .pre, +.ui-autocomplete li a { + color: #444; +} + +body > #upload-menu { + border-bottom-color: #fff; +} + +#postcustomstuff table, +#your-profile fieldset, +#rightnow, +div.dashboard-widget, +#dashboard-widgets p.dashboard-widget-links { + border-color: #ccc; +} + +#dashboard-widgets h4 { + color: #222; +} + +#poststuff .inside label.spam, +#poststuff .inside label.deleted { + color: red; +} + +#poststuff .inside label.waiting { + color: orange; +} + +#poststuff .inside label.approved { + color: green; +} + +#postcustomstuff table { + border-color: #dfdfdf; + background-color: #f9f9f9; +} + +#postcustomstuff thead th { + background-color: #f1f1f1; +} + +table.widefat { + border-color: #fff; + background-color: #fff; +} + +th .comment-grey-bubble:before { + color: #444; +} + +.sorting-indicator:before { + color: #444; +} + +div.dashboard-widget-error { + background-color: #c43; +} + +div.dashboard-widget-notice { + background-color: #cfe1ef; +} + +div.dashboard-widget-submit { + border-top-color: #ccc; +} + +ul.category-tabs li { + border-color: transparent; +} + +div.tabs-panel, +.wp-tab-panel, +ul.add-menu-item-tabs li.tabs, +.wp-tab-active { + border-color: #dfdfdf; + background-color: #fdfdfd; +} + +ul.category-tabs li.tabs { + border-color: #dfdfdf #dfdfdf #fdfdfd; +} + +ul.category-tabs li.tabs, +ul.add-menu-item-tabs li.tabs, +.wp-tab-active { + background-color: #fdfdfd; +} + +kbd, +code { + background: #eaeaea; + background: rgba(0,0,0,0.07); +} + +textarea, +input[type="text"], +input[type="password"], +input[type="email"], +input[type="number"], +input[type="search"], +input[type="tel"], +input[type="url"], +.titlewrap input, +select { + border-color: #ddd; + box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +input[type="checkbox"]:focus, +input[type="radio"]:focus, +select:focus, +#widgets-left .widget-in-question .widget-top, +#available-widgets .widget-top:hover, +#widgets-right .widget-top:hover, +#widgets-left .widget-top:hover, +.menu-item-bar .menu-item-handle:hover { + border-color: #999; +} + +input:disabled, +input.disabled, +textarea:disabled, +textarea.disabled { + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.04); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.04); + border-color: rgba(222, 222, 222, .75); + background: rgba(255, 255, 255, .5); + color: rgba(51, 51, 51, .5); +} + +#plugin-information .action-button a, +#plugin-information .action-button a:hover, +#plugin-information .action-button a:visited { + color: #fff; +} + +/* +.widget .widget-top, +.postbox h3, +.stuffbox h3, +.control-section .accordion-section-title, +h3.dashboard-widget-title, +h3.dashboard-widget-title span, +h3.dashboard-widget-title small, +.sidebar-name, +#nav-menu-header, +#nav-menu-footer, +.menu-item-handle, +.checkbox, +.side-info, +.widefat thead th, +.widefat tfoot th { + background: #fcfcfc; + border-top: none; + border-bottom: 1px solid #e1e1e1; +} +*/ + +.accordion-section-content { + border-right: none; + border-left: none; +} + +/* +.js .control-section:hover .accordion-section-title, +.js .control-section .accordion-section-title:hover, +.js .control-section.open .accordion-section-title, +.js .control-section .accordion-section-title:focus { + background: #0074a2; + border-color: #0074a2 !important; +} +*/ + +.widefat tfoot th { + border-bottom: none; + border-top: 1px solid #e1e1e1; +} + +.widefat thead th { + border-bottom: 1px solid #e1e1e1; +} + +.form-table th, +.form-wrap label { + color: #222; +} + +.form-table.editcomment td { + border-bottom: none; +} + +.description, +.form-wrap p { + color: #666; +} + +strong .post-com-count span { + background-color: #0074a2; +} + +.post-com-count:after { /* draw bubble connector using CSS! */ + border-top: 5px solid #bbbbbb; + border-left: 5px solid transparent; +} + +strong .post-com-count:after { + border-top: 5px solid #0076a0; +} + +.post-com-count:hover:after { + border-top: 5px solid #2ea2cc; +} + +.sorthelper { + background-color: #ccf3fa; +} + +.ac_match, +.subsubsub a.current { + color: #000; +} + +h2, +h3 { + color: #222; +} + +.wrap .add-new-h2, +.wrap .add-new-h2:active { + background: #e0e0e0; +} + +.wrap .add-new-h2:hover { + background: #2ea2cc; + color: #fff; +} + +.subtitle { + color: #777; +} + +.ac_over { + background-color: #f0f0b8; +} + +.ac_results { + background-color: #fff; + border-color: #808080; +} + +.ac_results li { + color: #101010; +} + +.alternate, +.alt { + background-color: #f9f9f9; +} + +.available-theme a.screenshot { + background-color: #fff; + border-color: #ccc; +} + +#current-theme { + border-bottom-color: #dfdfdf; +} + +.bar { + background-color: #e8e8e8; + border-left-color: #99d; +} + +.form-invalid { + background-color: #ffebe8 !important; +} + +.form-invalid input, +.form-invalid select { + border-color: #c00 !important; +} + +.submit { + border: none; +} + +.highlight { + background-color: #e4f2fd; + color: #000; +} + +.howto, +.nonessential, +#edit-slug-box, +.form-input-tip, +.subsubsub { + color: #666; +} + +.media-upload-form label.form-help, +td.help { + color: #9a9a9a; +} + +.ui-autocomplete { + border-color: #aaa; + background-color: #efefef; +} + +.ui-autocomplete li a.ui-state-focus { + background-color: #ddd; +} + +.post-com-count { + color: #fff; +} + +.post-com-count span { + background-color: #bbb; + color: #fff; +} + +.post-com-count:hover span { + background-color: #2ea2cc; +} + +.quicktags, .search { + background-color: #ccc; + color: #000; +} + +.side-info h5 { + border-bottom-color: #dadada; +} + +.side-info ul { + color: #666; +} + +a:hover, +a:active { + color: #2ea2cc; +} + +a:focus { + color: #124964; +} + +#adminmenu a:hover, +#adminmenu li.menu-top > a:focus, +#adminmenu .wp-submenu a:hover, +#rightnow a:hover, +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover, +.ui-tabs-nav a:hover { + color: #2ea2cc; +} + +#the-comment-list .comment-item { + border: none; +} + +#side-sortables .category-tabs .tabs a, +#side-sortables .add-menu-item-tabs .tabs a, +.wp-tab-bar .wp-tab-active a { + color: #333; +} + +#rightnow .rbutton { + background-color: #ebebeb; + color: #264761; +} + +p.submit { + border-top-color: #dfdfdf; +} + +.submitbox .submit { + background-color: #464646; + color: #ccc; +} + +table.widefat span.delete a, +table.widefat span.trash a, +table.widefat span.spam a, +.plugins a.delete, +#all-plugins-table .plugins a.delete, +#search-plugins-table .plugins a.delete, +.submitbox .submitdelete, +#media-items a.delete, +#media-items a.delete-permanently, +#nav-menu-footer .menu-delete { + color: #a00; +} + +table.widefat span.delete a:hover, +table.widefat span.trash a:hover, +table.widefat span.spam a:hover, +.plugins a.delete:hover, +#all-plugins-table .plugins a.delete:hover, +#search-plugins-table .plugins a.delete:hover, +.submitbox .submitdelete:hover, +#media-items a.delete:hover, +#media-items a.delete-permanently:hover, +#nav-menu-footer .menu-delete:hover { + color: #f00; +} + +#normal-sortables .submitbox .submitdelete:hover { + color: #000; + background-color: #f00; + border-bottom-color: #f00; +} + +.tablenav .dots { + border-color: transparent; +} + +.tablenav .next, +.tablenav .prev { + border-color: transparent; + color: #0074a2; +} + +.tablenav .next:hover, +.tablenav .prev:hover { + border-color: transparent; + color: #2ea2cc; +} + +div.updated, +.login .message, +.press-this #message { + background-color: #fff; + border-right: 4px solid #7ad03a; + + -webkit-box-shadow: 0px 1px 1px 0px rgba(0,0,0,0.1); + box-shadow: 0px 1px 1px 0px rgba(0,0,0,0.1); +} + +#update-nag, +.update-nag { + background-color: #fff; + border-right: 4px solid #ffba00; + + -webkit-box-shadow: 0px 1px 1px 0px rgba(0,0,0,0.1); + box-shadow: 0px 1px 1px 0px rgba(0,0,0,0.1); +} + +div.error, +.login #login_error { + background: #fff; + border-right: 4px solid #dd3d36; + + -webkit-box-shadow: 0px 1px 1px 0px rgba(0,0,0,0.1); + box-shadow: 0px 1px 1px 0px rgba(0,0,0,0.1); +} + +.update-message { + color: #000; +} + +a.page-numbers { + border-bottom-color: #b8d3e2; +} + +.commentlist li { + border-bottom-color: #ccc; +} + +.widefat td, +.widefat th { + color: #555; +} + +.widefat p, +.widefat ol, +.widefat ul { + color: #333; +} + +.widefat thead tr th, +.widefat tfoot tr th, +h3.dashboard-widget-title, +h3.dashboard-widget-title span, +h3.dashboard-widget-title small { + color: #333; +} + +th.manage-column a, +th.sortable a:hover, +th.sortable a:active, +th.sortable a:focus { + color: #333; +} + +th.sortable a:focus { + background: #e1e1e1; +} + +h3.dashboard-widget-title small a { + color: #d7d7d7; +} + +h3.dashboard-widget-title small a:hover { + color: #fff; +} + +a, +#the-comment-list p.comment-author strong a, +#media-upload a.del-link, +#media-items a.delete, +#media-items a.delete-permanently, +.plugins a.delete, +.ui-tabs-nav a, +.plugins .inactive a { + color: #0074a2; + -webkit-transition-property: border, background, color; + -moz-transition-property: border, background, color; + transition-property: border, background, color; + -webkit-transition-duration: .05s; + -moz-transition-duration: .05s; + transition-duration: .05s; + -webkit-transition-timing-function: ease-in-out; + -moz-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; +} + +.wp-list-table a, +.media-router a { + -moz-transition: none; + -webkit-transition: none; + transition: none; +} + +#adminmenu a { + color: #eee; +} + +#adminmenu .awaiting-mod, +#adminmenu .update-plugins, +#sidemenu a .update-plugins, +#rightnow .reallynow { + background-color: #d54e21; + color: #fff; +} +#plugin-information .action-button { + background-color: #2ea2cc; + color: #fff; +} + +#adminmenu li.current a .awaiting-mod, +#adminmenu li a.wp-has-current-submenu .update-plugins { + background-color: #2ea2cc; + color: #fff; +} + +div#media-upload-header, +div#plugin-information-header { + background-color: #f9f9f9; + border-bottom-color: #dfdfdf; +} + +#currenttheme img { + border-color: #666; +} + +input.readonly, textarea.readonly { + background-color: #ddd; +} + +#editable-post-name { + background-color: #fffbcc; +} + +#edit-slug-box strong, +.tablenav .displaying-num, +#submitted-on, +.submitted-on { + color: #777; +} + +.plugins .inactive a:hover { + color: #2ea2cc; +} + +#wpfooter { + color: #777; + border-color: transparent; +} + +.imgedit-group, +#media-items .media-item, +.media-item .describe { + border-color: #dfdfdf; +} + +.plugins .plugin-description p, +.plugins .plugin-version-author-uri { + color: #333; +} + +.plugins .inactive .plugin-title strong { + color: #333; +} + +.plugin-update-tr .plugin-update { + border: none; + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +.plugin-update-tr .update-message { + background-color: #f7f7f7; + background-color: rgba(0,0,0,0.03); +} + +tr.active.update + tr.plugin-update-tr .plugin-update .update-message { + background-color: #fcf3ef; +} + +.plugin-update-tr .update-message:before { + color: #d54e21; +} + +.plugins, +.plugins th, +.plugins td { + color: #000; +} + +.plugins .inactive a { + color: #579; +} + +.plugins tr { + background: #fff; +} + +.plugins .inactive td, +.plugins .inactive th, +.plugins .active td, +.plugins .active th, +.plugin-install #the-list td { + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +.plugins .update td, +.plugins .update th { + -webkit-box-shadow: none; + box-shadow: none; +} + +.plugins .active td, +.plugins .active th, +tr.active + tr.plugin-update-tr .plugin-update { + background-color: #f7fcfe; +} + +.plugins .active.update td, +.plugins .active.update th, +tr.active.update + tr.plugin-update-tr .plugin-update, +#activity-widget #the-comment-list .unapproved { + background-color: #fefaf7; +} + +.plugins tr.active.plugin-update-tr + tr.inactive th, +.plugins tr.active.plugin-update-tr + tr.inactive td, +.plugins tr.active + tr.inactive th, +.plugins tr.active + tr.inactive td { + border-top: 1px solid rgba(0,0,0,0.03); + + -webkit-box-shadow: inset 0px 1px 0 rgba(0,0,0,0.02), inset 0 -1px 0 #e1e1e1; + box-shadow: inset 0px 1px 0 rgba(0,0,0,0.02), inset 0 -1px 0 #e1e1e1; +} + +.plugins tr.active + tr.inactive.update th, +.plugins tr.active + tr.inactive.update td { + -webkit-box-shadow: none; + box-shadow: none; +} + +.plugins .active th.check-column { + border-right: 4px solid #2ea2cc; +} + +.plugins .active.update th.check-column, +.plugins .active.update + .plugin-update-tr .plugin-update { + border-right: 4px solid #d54e21; +} + +.post-state-format:before, +.post-format-icon:before { + color: #ddd; + -webkit-transition: all .1s ease-in-out; + -moz-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +input[type="radio"]:checked+label:before { + color: #888888; +} + +a.post-state-format:hover:before, +a.post-format-icon:hover:before { + color: #2ea2cc; +} + +#the-list tr:last-child td, +#the-list tr:last-child th { + border-bottom: none !important; + -webkit-box-shadow: none; + box-shadow: none; +} + +#the-comment-list tr.undo, +#the-comment-list div.undo { + background-color: #f4f4f4; +} + +#the-comment-list .unapproved th, +#the-comment-list .unapproved td { + background-color: #fefaf7; +} + +#the-comment-list .unapproved th.check-column { + border-right: 4px solid #d54e21; +} + +#the-comment-list .approve a { + color: #006505; +} + +#the-comment-list .unapprove a { + color: #d98500; +} + +#the-comment-list th, +#the-comment-list td { + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); +} + +#activity-widget #the-comment-list .comment { + -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.06); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.06); +} + +#the-comment-list tr:last-child th, +#the-comment-list tr:last-child td { + -webkit-box-shadow: none; + box-shadow: none; +} + +#the-comment-list tr.unapproved + tr.approved th, +#the-comment-list tr.unapproved + tr.approved td { + border-top: 1px solid rgba(0, 0, 0, 0.03); +} + +#activity-widget .comments #the-comment-list .alt { + background-color: transparent; +} + +.welcome-panel p { + color: #777; +} + +.welcome-panel a { + text-decoration: none; +} + +.welcome-panel-column p { + color: #464646; +} + +.welcome-panel .welcome-icon:before { + color: #888; +} + +.widget-top, +.menu-item-handle, +.menu-item-settings, +.widget-inside, +.postbox, +#menu-settings-column .accordion-container, +#menu-management .menu-edit, +.manage-menus, +table.widefat, +.stuffbox, +p.popular-tags, +.widgets-holder-wrap, +.welcome-panel, +.wp-editor-container, +#post-status-info, +.popular-tags, +.feature-filter, +.imgedit-group { + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); +} + +#post-status-info { + border-top: none; +} + +.postbox table.widefat { + -webkit-box-shadow: none; + box-shadow: none; +} + +.welcome-panel, +.postbox, +table.widefat, +.wp-editor-container, +.stuffbox, +p.popular-tags, +.widgets-holder-wrap, +.popular-tags, +.feature-filter, +.imgedit-group { + background: #fff; +} + +.postbox h3, +#namediv h3, +#submitdiv h3 { + border-bottom: 1px solid #eeeeee; +} + +.widget .widget-top, +.menu-item-handle { + background: #fafafa; + color: #222; +} + +#misc-publishing-actions label[for="post_status"]:before, +#post-body #visibility:before, +.curtime #timestamp:before, +#post-body .misc-pub-revisions:before, +span.wp-media-buttons-icon:before { + color: #888; +} + +#rightnow .youhave { + background-color: #f0f6fb; +} + +#rightnow a { + color: #448abd; +} + +#welcome-panel.welcome-panel .welcome-panel-close::before, +.tagchecklist span a:before, +#bulk-titles div a:before, +.wp-pointer-buttons a.close:before { + background: none; + color: #bbb; +} + +#welcome-panel.welcome-panel .welcome-panel-close:hover:before, +.tagchecklist span a:hover:before, +#bulk-titles div a:hover:before, +.wp-pointer-buttons a.close:hover:before { + color: #c00; +} + +#screen-meta { + background-color: #fff; + border: 1px solid #ddd; + border-top: none; + -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.025); + box-shadow: 0 1px 0 rgba(0,0,0,.025); +} + +#contextual-help-back { + background: #f6fbfd; +} + +.contextual-help-tabs a:hover { + color: #333; +} + +#contextual-help-back, +.contextual-help-tabs .active a { + border-color: #e1e1e1; +} + +.contextual-help-tabs .active { + border-color: #2ea2cc; + + -webkit-box-shadow: 0px 2px 0 rgba(0,0,0,0.02), 0 1px 0 rgba(0,0,0,0.02); + box-shadow: 0px 2px 0 rgba(0,0,0,0.02), 0 1px 0 rgba(0,0,0,0.02); +} + +.contextual-help-tabs .active, +.contextual-help-tabs .active a, +.contextual-help-tabs .active a:hover { + background: #f6fbfd; + color: #333; +} + +/* screen options and help tabs */ +#screen-options-link-wrap, +#contextual-help-link-wrap { + border: 1px solid #ddd; + border-top: none; + background: #fff; + -webkit-box-shadow: 0px 1px 1px -1px rgba(0,0,0,0.1); + box-shadow: 0px 1px 1px -1px rgba(0,0,0,0.1); +} + +#screen-meta-links a { + color: #777; +} + +#screen-meta-links a:after { + color: #bbb; +} + +#screen-meta-links a:hover, +#screen-meta-links a:active { + color: #333; +} + +#screen-meta-links a:focus { + border-color: #aaa; + color: #333; + -webkit-box-shadow: 0 2px 3px rgba(0,0,0,0.15); + box-shadow: 0 2px 3px rgba(0,0,0,0.15); +} +/* end screen options and help tabs */ + +#wphead { + border-bottom-color: #dfdfdf; +} + +#wphead h1 a { + color: #464646; +} + +.file-error, +abbr.required, +.widget-control-remove:hover, +table.widefat .delete a:hover, +table.widefat .trash a:hover, +table.widefat .spam a:hover { + color: #f00; +} + +#pass-strength-result { + background-color: #eee; + border-color: #ddd !important; +} + +#pass-strength-result.bad { + background-color: #ffb78c; + border-color: #ff853c !important; +} + +#pass-strength-result.good { + background-color: #ffec8b; + border-color: #fc0 !important; +} + +#pass-strength-result.short { + background-color: #ffa0a0; + border-color: #f04040 !important; +} + +#pass-strength-result.strong { + background-color: #c3ff88; + border-color: #8dff1c !important; +} + +#post-status-info { + background-color: #f7f7f7; +} + +.widget-inside, +.menu-item-settings { + background: #fff; +} + +.menu-item-settings { + border-top: none; +} + +#titlediv #title { + background-color: #fff; +} + +#tTips p#tTips_inside { + background-color: #ddd; + color: #333; +} + +#poststuff .inside .the-tagcloud { + border-color: #ddd; +} + +/* menu */ +#adminmenuback, +#adminmenuwrap, +#adminmenu { + background-color: #222; +} + +#adminmenu li.wp-menu-separator { + background: transparent; + border-color: transparent; +} + +#adminmenu div.separator { + border-color: transparent; +} + +#adminmenu li.wp-menu-open { + border-color: #dfdfdf; +} + +#adminmenu li.menu-top:hover, +#adminmenu li.opensub > a.menu-top, +#adminmenu li > a.menu-top:focus { + background-color: #111; + color: #2ea2cc; +} + +/* flyout menu arrow */ +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #333; +} + +#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, +#adminmenu li.current a.menu-top, +.folded #adminmenu li.wp-has-current-submenu, +.folded #adminmenu li.current.menu-top, +#adminmenu .wp-menu-arrow, +#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head, +#adminmenu .wp-menu-arrow div { + background: #0074a2; +} + +#adminmenu li.wp-not-current-submenu .wp-menu-arrow { + border-top-color: #f9f9f9; + border-bottom-color: #dfdfdf; + background: transparent; +} + +#adminmenu li.wp-not-current-submenu .wp-menu-arrow div { + background: #111; + border-color: #111; +} + +#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, +#adminmenu li.current a.menu-top, +#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head { + color: #fff; +} + +.folded #adminmenu li.wp-has-current-submenu, +.folded #adminmenu li.current.menu-top { + border-color: #666; /* Match the background color of the current menu item for a flat appearance */ +} + +#adminmenu .wp-submenu li.current, +#adminmenu .wp-submenu li.current a, +#adminmenu .opensub .wp-submenu li.current a, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, +#adminmenu .wp-submenu li.current a:hover, +#adminmenu .wp-submenu li.current a:focus { + color: #fff; + background: transparent; +} + +#adminmenu .wp-submenu, +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + background-color: #333; + + -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.2); + box-shadow: 0 3px 5px rgba(0,0,0,0.2); +} + +#adminmenu .wp-submenu a, +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, +.folded #adminmenu .wp-has-current-submenu .wp-submenu a { + color: #bbb; +} + +#adminmenu .wp-submenu .wp-submenu-head { + color: #fff; +} + +/* collapse menu button */ +#collapse-menu { + color: #aaa; + -webkit-transition: all .1s ease-in-out; + -moz-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#collapse-menu:hover { + color: #2ea2cc; +} + +#collapse-button div:after { + color: #aaa; +} + +#collapse-menu:hover #collapse-button div:after { + color: #2ea2cc; +} + +#adminmenu div.wp-menu-image:before { + color: #999; +} + +.icon16:before { + color: #999; +} + +#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before { + color: #fff; +} + +#adminmenu li:hover div.wp-menu-image:before { + color: #2ea2cc; +} + +#adminmenu .wp-has-current-submenu div.wp-menu-image:before, +#adminmenu .current div.wp-menu-image:before, +#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before, +#adminmenu a.current:hover div.wp-menu-image:before { + color: #fff; +} + +/* Collapse button in theme preview */ + +.wp-full-overlay a.collapse-sidebar { + color: #777; +} + +.wp-full-overlay a.collapse-sidebar:hover { + color: #0074a2; +} + +.wp-full-overlay .collapse-sidebar-arrow:before { + background: #eee; +} + +/* Diff */ + +table.diff .diff-deletedline del { + background-color: #f99; +} + +.ui-tooltip, .arrow::after { + background-color: #fff; + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +.revisions-meta, +.revisions-diff, +.revisions.pinned .revisions-controls { + background-color: #fff; + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +table.diff .diff-deletedline { + background-color: #ffe9e9; +} + +table.diff .diff-deletedline del { + background-color: #faa; +} + +table.diff .diff-addedline { + background-color: #e9ffe9; +} + +table.diff .diff-addedline ins { + background-color: #afa; +} + +.revisions-tooltip, +.revisions-tooltip-arrow span { + border-color: #d7d7d7; + background-color: #fff; +} + +.revisions-tickmarks { + background-color: #fff; +} + +.revisions-tickmarks > div { + border-color: #aaa; +} + +.revisions.pinned .revisions-controls { + background: #fff; +} + +.revisions.pinned .revisions-meta { + box-shadow: none; +} + +/* jQuery UI Slider */ + +.wp-slider.ui-slider { + border-color: #d7d7d7; +} + +.wp-slider .ui-slider-handle, +.wp-slider .ui-slider-handle.ui-state-hover, +.wp-slider .ui-slider-handle.focus { + background: #2ea2cc; + border: 1px solid #0074a2; + -webkit-box-shadow: inset 0 1px 0 #78c8e6, 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 #78c8e6, 0 1px 0 rgba(0,0,0,.15); +} + +.wp-slider .ui-slider-handle:before { + color: #fff; +} + +/* edit image */ +#sidemenu a { + background-color: #f9f9f9; + border-color: #f9f9f9; + border-bottom-color: #dfdfdf; +} + +#sidemenu a.current { + background-color: #f1f1f1; + border-color: #dfdfdf #dfdfdf #f1f1f1; + color: #000; +} + +#replyerror { + border-color: #ddd; + background-color: #f9f9f9; +} + +/* table vim shortcuts */ +.vim-current, +.vim-current th, +.vim-current td { + background-color: #E4F2FD !important; +} + +/* Install Plugins */ + +#plugin-information { + height: auto; +} + +#plugin-information .fyi ul { + background-color: #eaf3fa; +} + +#plugin-information .fyi h2.mainheader { + background-color: #cee1ef; +} + +#plugin-information pre, +#plugin-information code { + background-color: #ededff; +} + +#plugin-information pre { + border-color: #ccc; +} + +/* inline editor */ +#bulk-titles { + border-color: #ddd; +} + +.inline-editor div.title { + background-color: #eaf3fa; +} + +.inline-editor ul.cat-checklist { + background-color: #fff; + border-color: #ddd; +} + +.inline-editor .quick-edit-save { + background-color: #f1f1f1; +} + +fieldset.inline-edit-col-right .inline-edit-col { + border-color: #dfdfdf; +} + +.attention { + color: #2ea2cc; +} + +.tablenav .tablenav-pages { + color: #555; +} + +.tablenav .tablenav-pages a { + background: #eee; + background: rgba( 0, 0, 0, 0.05 ); +} + +.tablenav .tablenav-pages a:hover, +.tablenav .tablenav-pages a:focus { + color: #fff; + background: #2ea2cc; +} + +.tablenav .tablenav-pages a.disabled, +.tablenav .tablenav-pages a.disabled:hover, +.tablenav .tablenav-pages a.disabled:focus { + color: #aaa; + background: #eee; + background: rgba( 0, 0, 0, 0.05 ); +} + +.tablenav .tablenav-pages .current { + background: #dfdfdf; + border-color: #d3d3d3; +} + +#availablethemes, +#availablethemes td { + border-color: #ddd; +} + +#current-theme img { + border-color: #999; +} + +#TB_window #TB_title a.tb-theme-preview-link, +#TB_window #TB_title a.tb-theme-preview-link:visited { + color: #999; +} + +#TB_window #TB_title a.tb-theme-preview-link:hover, +#TB_window #TB_title a.tb-theme-preview-link:focus { + color: #ccc; +} + +.misc-pub-section { +} + +#minor-publishing { + border-bottom-color: #dfdfdf; +} + +#post-body .misc-pub-section { +} + +.post-com-count span { + background-color: #bbb; +} + +.sortable-placeholder { + border-color: #bbb; +} + +#post-body ul.category-tabs li.tabs a, +#post-body ul.add-menu-item-tabs li.tabs a, +body.press-this ul.category-tabs li.tabs a { + color: #333; +} + +.view-switch>a:before { + color: #bbb; +} + +.view-switch a:hover:before { + color: #727272; +} + +.view-switch a.current:before { + color: #0074a2; +} + +div.widgets-sortables, +#widgets-left .inactive, +#available-widgets .widget-holder { + background-color: #fff; + border-color: #fff; +} + +#widgets-left #available-widgets { + background: transparent; +} + +#widgets-left .widgets-holder-wrap { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.sidebar-name { + border-bottom-color: #e1e1e1; +} + +.js #removing-widget { + color: #2ea2cc; +} + +#removing-widget span { + color: black; +} + +.in-widget-title, +#widgets-right .widget-top a.widget-control-edit, +#wp_inactive_widgets .in-widget-title, +#available-widgets .widget-description { + color: #666; +} + +#widgets-right .widget-top a.widget-control-edit:hover { + color: #fff; +} + +.deleting .widget-title, +.deleting .widget-top a.widget-action:after { + color: #aaa; +} + +.imgedit-menu div { + border-color: #d5d5d5; + background-color: #f1f1f1; +} + +.imgedit-menu div:hover { + border-color: #c1c1c1; + background-color: #eaeaea; +} + +.imgedit-menu div.disabled { + border-color: #ccc; + background-color: #ddd; + filter: alpha(opacity=50); + opacity: 0.5; +} + +/* added from nav-menu.css */ +#menu-management { + background: #f5f5f5 +} + +#menu-management #post-body { + background: #fff; + border-top-color: #fff; + border-bottom-color: #dfdfdf; +} + +#nav-menu-header { + border-bottom-color: #dfdfdf; +} + +#menu-management .nav-tabs-arrow a { + color: #c1c1c1; +} + +#menu-management .nav-tabs-arrow a:hover { + color: #2ea2cc; +} + +#menu-management .nav-tabs-arrow a:active { + color: #464646; +} + +#menu-management .nav-tab-active { + border-color: #dfdfdf; +} + +#menu-management .nav-tab { + background: #fbfbfb; + border-color: #dfdfdf; +} + +.js .input-with-default-title { + color: #aaa; +} + +#cancel-save { + color: #f00; +} + +#cancel-save:hover { + background-color: #f00; + color: #fff; +} + +.list-container, +.menu-item-handle { + border-color: #dfdfdf; +} + +.menu li.deleting .menu-item-handle { + background-color: #f66; +} + +.item-type { /* Menu item controls */ + color: #777; +} + +.item-controls .menu-item-delete:hover { + color: #f00; +} + +.widget-action, +.handlediv, +.item-edit, +.sidebar-name-arrow, +.accordion-section-title:after { + color: #aaa; +} + +.widget-action:hover, +.handlediv:hover, +.item-edit:hover, +.sidebar-name:hover .sidebar-name-arrow, +.accordion-section-title:hover:after { + color: #777; +} + +/* Menu editing */ + +.link-to-original { + color: #777; + border-color: #dfdfdf; +} + +#cancel-save:hover { + color: #fff !important; +} + +#update-menu-item { + color: #fff !important; +} + +#update-menu-item:hover, +#update-menu-item:active, +#update-menu-item:focus { + color: #eaf2fa !important; + border-color: #13455b !important; +} + +.submitbox .submitcancel { + color: #0074a2; + border-bottom-color: #0074a2; +} + +.submitbox .submitcancel:hover { + background: #0074a2; + color: #fff; +} + +.manage-menus { + background: #fbfbfb; +} + +.menu-settings { + border-top-color: #eeeeee; +} + +.theme-location-set { + color: #999999; +} + +.nav-menus-php .delete-action a { + color: #bc0b0b; +} + +.is-submenu { + color: #999999; +} + +.nav-tab { + color: #555; + border-color: #ccc; + background: #e4e4e4; +} + +.nav-tab:hover { + background-color: #fff; + color: #464646; +} + +.nav-tab-active { + color: #464646; +} + +.nav-tab-active, +.nav-tab-active:hover { + color: #000; + background: none; + border-color: #ccc; + border-bottom-color: #f1f1f1; +} + +h2.nav-tab-wrapper, h3.nav-tab-wrapper { + border-bottom-color: #ccc; +} + +#upload-form label { + color: #777; +} + +/* Begin About Pages */ +.about-wrap h1 { + color: #333; +} + +.about-text { + color: #777; +} + +.wp-badge { + background-color: #0074a2; + color: #78c8e6; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.2); + box-shadow: 0 1px 3px rgba(0,0,0,0.2); +} + +.about-wrap h2 .nav-tab-active { + border-color: #ccc; + border-bottom-color: #f1f1f1; +} + +.about-wrap h2, +.about-wrap h3, +.about-wrap h4 { + color: #222; +} + +.about-wrap .feature-section .col-2:before, +.about-wrap .feature-section .col-2:after, +.about-wrap .feature-section.two-col p:before { + color: #1e8cbe; +} + +.about-wrap .point-releases { + border-bottom: 1px solid #dfdfdf; +} + +.about-wrap .point-releases h3 { + border-top-color: #dfdfdf; +} + +.about-wrap li.wp-person img.gravatar { + border-color: #ccc; +} + +.about-wrap li.wp-person .title { + color: #464646; +} + +.freedoms-php .about-wrap ol li { + color: #999; +} + +.freedoms-php .about-wrap ol p { + color: #464646; +} + +/* End About Pages */ + +/* Press This and Image editing icons */ + +.pressthis a span:before { + color:#777; +} + +.imgedit-menu div { + color:#777; +} + +.imgedit-menu div:hover { + color:#333; +} + +/* End Press This and Image editing icons */ + +/* Media Manager */ + +.media-modal-content { + background: #fcfcfc; + box-shadow: 0 5px 15px rgba(0,0,0,0.7); +} + +.media-menu { + background: #f3f3f3; + border-left-color: #ccc; +} + +.media-menu > a { + color: #0074a2; +} + +.media-menu .active, +.media-menu .active:hover { + color: #222; +} + +.media-frame-content { + background: #fff; + border-top-color: #ddd; + border-bottom-color: #ddd; +} + +.media-menu .separator { + border-top-color: #ddd; + border-bottom: none; +} + +.media-sidebar { + background: #f3f3f3; + border-color: #ddd; +} + +.media-router .active, +.media-router > a.active:last-child { + background: #fff; + border: 1px solid #ddd; + border-bottom: none; +} + +.details.attachment { + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #1e8cbe; +} + +.attachment .check { + background: #eee; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px rgba( 0, 0, 0, 0.4 ); +} + +.attachment.details .check { + background-color: #1e8cbe; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #1e8cbe; +} + +/* TinyMCE modal */ + +.clearlooks2 { + box-shadow: 0 5px 15px rgba(0,0,0,0.7); +} + +.clearlooks2 .mceMiddle span, +.clearlooks2 .mceMiddle .mceLeft, +.clearlooks2 .mceMiddle .mceRight, +.clearlooks2 .mceBottom, +.clearlooks2 .mceBottom .mceLeft, +.clearlooks2 .mceBottom .mceCenter, +.clearlooks2 .mceBottom .mceRight { + background-color: #fcfcfc; +} + +.clearlooks2 .mceTop span, +.clearlooks2 .mceFocus .mceTop span { + color: #222; +} + +.clearlooks2 .mceClose:before { + color: #999; +} + +.clearlooks2 .mceClose:hover:before { + color: #2ea2cc; +} + + +/* Lightbox */ + +.sticky-menu #TB_window { + background: #f1f1f1; +} + +/* tinymce */ +a .mceIcon, .mceAction { + color:#777; +} + +a .mceIcon:hover { + color:#333; +} + +/* Log in page */ + +.login form .input, +.login input[type="text"], +.login form input[type="checkbox"] { + background: #fbfbfb; +} + +.login form { + background: #fff; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13); + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +body.login { + background: #f1f1f1; +} + +.login #nav a, +.login #backtoblog a { + text-decoration: none; + color: #999; +} + +.login #nav a:hover, +.login #backtoblog a:hover { + color: #2ea2cc; +} + +.login h1 a:hover { + color: #2ea2cc; +} + +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .curtime #timestamp, + #screen-meta-links a.show-settings, + .widget-top a.widget-action, + .widget-top a.widget-action:hover, + .sidebar-name-arrow, + .sidebar-name:hover .sidebar-name-arrow, + .meta-box-sortables .postbox:hover .handlediv, + .tagchecklist span a, + #bulk-titles div a, + .tagchecklist span a:hover, + #bulk-titles div a:hover, + .wp_themeSkin .mceToolbar span.mce_undo, + .wp_themeSkin .mceToolbar span.mce_redo, + .wp_themeSkin .mceToolbar span.mce_bullist, + .wp_themeSkin .mceToolbar span.mce_numlist, + .wp_themeSkin .mceToolbar span.mce_blockquote, + .wp_themeSkin .mceToolbar span.mce_charmap, + .wp_themeSkin .mceToolbar span.mce_bold, + .wp_themeSkin .mceToolbar span.mce_italic, + .wp_themeSkin .mceToolbar span.mce_underline, + .wp_themeSkin .mceToolbar span.mce_justifyleft, + .wp_themeSkin .mceToolbar span.mce_justifyright, + .wp_themeSkin .mceToolbar span.mce_justifycenter, + .wp_themeSkin .mceToolbar span.mce_justifyfull, + .wp_themeSkin .mceToolbar span.mce_indent, + .wp_themeSkin .mceToolbar span.mce_outdent, + .wp_themeSkin .mceToolbar span.mce_link, + .wp_themeSkin .mceToolbar span.mce_unlink, + .wp_themeSkin .mceToolbar span.mce_help, + .wp_themeSkin .mceToolbar span.mce_removeformat, + .wp_themeSkin .mceToolbar span.mce_fullscreen, + .wp_themeSkin .mceToolbar span.mce_wp_fullscreen, + .wp_themeSkin .mceToolbar span.mce_media, + .wp_themeSkin .mceToolbar span.mce_pastetext, + .wp_themeSkin .mceToolbar span.mce_pasteword, + .wp_themeSkin .mceToolbar span.mce_wp_help, + .wp_themeSkin .mceToolbar span.mce_wp_adv, + .wp_themeSkin .mceToolbar span.mce_wp_more, + .wp_themeSkin .mceToolbar span.mce_strikethrough, + .wp_themeSkin .mceToolbar span.mce_spellchecker, + .wp_themeSkin .mceToolbar span.mce_forecolor, + .wp_themeSkin .mceToolbar .mce_forecolorpicker, + .wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker, + .wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor, + .wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist, + .wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist { + background: none !important; + } +} diff --git a/src/wp-admin/css/colors-rtl.min.css b/src/wp-admin/css/colors-rtl.min.css new file mode 100644 index 0000000..b861cc8 --- /dev/null +++ b/src/wp-admin/css/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-right:0;border-left:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-left:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-left-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-right:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-right:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-right:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-right:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-right:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-right:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-left-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}} \ No newline at end of file diff --git a/src/wp-admin/css/colors.css b/src/wp-admin/css/colors.css new file mode 100644 index 0000000..6eafbf2 --- /dev/null +++ b/src/wp-admin/css/colors.css @@ -0,0 +1,2034 @@ +/*------------------------------------------------------------------------------ + +Howdy! This is the CSS file that controls the +fresh color style on the WordPress Dashboard. + + +TABLE OF CONTENTS: +------------------ + 1.0 - General + + +------------------------------------------------------------------------------*/ + + +/*------------------------------------------------------------------------------ + 1.0 - General +------------------------------------------------------------------------------*/ + +html { + background: #f1f1f1; +} + +/* Checkbooms */ + +input[type=checkbox], +input[type=radio] { + background: #fff; + border-color: #bbb; + color: #555; + + -webkit-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); +} + +input[type=checkbox]:checked:before { + color: #1e8cbe; +} + +input[type=radio]:checked:before { + background-color: #1e8cbe; +} + +.wp-core-ui input[type="reset"]:hover, +.wp-core-ui input[type="reset"]:active { + color: #2ea2cc; +} + + +/* Helper classes for plugins to leverage the active WordPress color scheme */ + +.wp-ui-primary { + color: #fff; + background-color: #333; +} +.wp-ui-text-primary { + color: #333; +} + +.wp-ui-highlight { + color: white; + background-color: #1e8cbe; +} +.wp-ui-text-highlight { + color: #1e8cbe; +} + +.wp-ui-notification { + color: #fff; + background-color: #D54E21; +} +.wp-ui-text-notification { + color: #D54E21; +} + +.wp-ui-text-icon { + color: #999; +} + + +#adminmenu .wp-has-current-submenu .wp-submenu, +.no-js li.wp-has-current-submenu:hover .wp-submenu, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +#adminmenu .wp-has-current-submenu .wp-submenu.sub-open, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu { + background-color: #333; +} + +#adminmenu .wp-has-current-submenu .wp-submenu a, +.no-js li.wp-has-current-submenu:hover .wp-submenu a, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, +#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #bbb; +} + +#adminmenu .wp-submenu a:hover, +#adminmenu .wp-submenu a:focus, +#adminmenu .wp-has-current-submenu .wp-submenu a:hover, +#adminmenu .wp-has-current-submenu .wp-submenu a:focus, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, +#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover, +#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, +.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover, +.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus, +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, +.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, +.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus { + background: none; + color: #2ea2cc; +} + +ul#adminmenu a.wp-has-current-submenu:after, +ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; +} + +.row-actions { + color: #ddd; +} + +.find-box-search, +.find-box-buttons { + background-color: #f7f7f7; + border-top: 1px solid #dfdfdf; +} + +.find-box { + background-color: #444; +} + +.find-box-head { + color: #eee; +} + +.find-box-inside { + background-color: #fff; +} + +a.page-numbers:hover { + border-color: #999; +} + +body, +#wpbody, +.form-table .pre, +.ui-autocomplete li a { + color: #444; +} + +body > #upload-menu { + border-bottom-color: #fff; +} + +#postcustomstuff table, +#your-profile fieldset, +#rightnow, +div.dashboard-widget, +#dashboard-widgets p.dashboard-widget-links { + border-color: #ccc; +} + +#dashboard-widgets h4 { + color: #222; +} + +#poststuff .inside label.spam, +#poststuff .inside label.deleted { + color: red; +} + +#poststuff .inside label.waiting { + color: orange; +} + +#poststuff .inside label.approved { + color: green; +} + +#postcustomstuff table { + border-color: #dfdfdf; + background-color: #f9f9f9; +} + +#postcustomstuff thead th { + background-color: #f1f1f1; +} + +table.widefat { + border-color: #fff; + background-color: #fff; +} + +th .comment-grey-bubble:before { + color: #444; +} + +.sorting-indicator:before { + color: #444; +} + +div.dashboard-widget-error { + background-color: #c43; +} + +div.dashboard-widget-notice { + background-color: #cfe1ef; +} + +div.dashboard-widget-submit { + border-top-color: #ccc; +} + +ul.category-tabs li { + border-color: transparent; +} + +div.tabs-panel, +.wp-tab-panel, +ul.add-menu-item-tabs li.tabs, +.wp-tab-active { + border-color: #dfdfdf; + background-color: #fdfdfd; +} + +ul.category-tabs li.tabs { + border-color: #dfdfdf #dfdfdf #fdfdfd; +} + +ul.category-tabs li.tabs, +ul.add-menu-item-tabs li.tabs, +.wp-tab-active { + background-color: #fdfdfd; +} + +kbd, +code { + background: #eaeaea; + background: rgba(0,0,0,0.07); +} + +textarea, +input[type="text"], +input[type="password"], +input[type="email"], +input[type="number"], +input[type="search"], +input[type="tel"], +input[type="url"], +.titlewrap input, +select { + border-color: #ddd; + box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +input[type="checkbox"]:focus, +input[type="radio"]:focus, +select:focus, +#widgets-left .widget-in-question .widget-top, +#available-widgets .widget-top:hover, +#widgets-right .widget-top:hover, +#widgets-left .widget-top:hover, +.menu-item-bar .menu-item-handle:hover { + border-color: #999; +} + +input:disabled, +input.disabled, +textarea:disabled, +textarea.disabled { + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.04); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.04); + border-color: rgba(222, 222, 222, .75); + background: rgba(255, 255, 255, .5); + color: rgba(51, 51, 51, .5); +} + +#plugin-information .action-button a, +#plugin-information .action-button a:hover, +#plugin-information .action-button a:visited { + color: #fff; +} + +/* +.widget .widget-top, +.postbox h3, +.stuffbox h3, +.control-section .accordion-section-title, +h3.dashboard-widget-title, +h3.dashboard-widget-title span, +h3.dashboard-widget-title small, +.sidebar-name, +#nav-menu-header, +#nav-menu-footer, +.menu-item-handle, +.checkbox, +.side-info, +.widefat thead th, +.widefat tfoot th { + background: #fcfcfc; + border-top: none; + border-bottom: 1px solid #e1e1e1; +} +*/ + +.accordion-section-content { + border-left: none; + border-right: none; +} + +/* +.js .control-section:hover .accordion-section-title, +.js .control-section .accordion-section-title:hover, +.js .control-section.open .accordion-section-title, +.js .control-section .accordion-section-title:focus { + background: #0074a2; + border-color: #0074a2 !important; +} +*/ + +.widefat tfoot th { + border-bottom: none; + border-top: 1px solid #e1e1e1; +} + +.widefat thead th { + border-bottom: 1px solid #e1e1e1; +} + +.form-table th, +.form-wrap label { + color: #222; +} + +.form-table.editcomment td { + border-bottom: none; +} + +.description, +.form-wrap p { + color: #666; +} + +strong .post-com-count span { + background-color: #0074a2; +} + +.post-com-count:after { /* draw bubble connector using CSS! */ + border-top: 5px solid #bbbbbb; + border-right: 5px solid transparent; +} + +strong .post-com-count:after { + border-top: 5px solid #0076a0; +} + +.post-com-count:hover:after { + border-top: 5px solid #2ea2cc; +} + +.sorthelper { + background-color: #ccf3fa; +} + +.ac_match, +.subsubsub a.current { + color: #000; +} + +h2, +h3 { + color: #222; +} + +.wrap .add-new-h2, +.wrap .add-new-h2:active { + background: #e0e0e0; +} + +.wrap .add-new-h2:hover { + background: #2ea2cc; + color: #fff; +} + +.subtitle { + color: #777; +} + +.ac_over { + background-color: #f0f0b8; +} + +.ac_results { + background-color: #fff; + border-color: #808080; +} + +.ac_results li { + color: #101010; +} + +.alternate, +.alt { + background-color: #f9f9f9; +} + +.available-theme a.screenshot { + background-color: #fff; + border-color: #ccc; +} + +#current-theme { + border-bottom-color: #dfdfdf; +} + +.bar { + background-color: #e8e8e8; + border-right-color: #99d; +} + +.form-invalid { + background-color: #ffebe8 !important; +} + +.form-invalid input, +.form-invalid select { + border-color: #c00 !important; +} + +.submit { + border: none; +} + +.highlight { + background-color: #e4f2fd; + color: #000; +} + +.howto, +.nonessential, +#edit-slug-box, +.form-input-tip, +.subsubsub { + color: #666; +} + +.media-upload-form label.form-help, +td.help { + color: #9a9a9a; +} + +.ui-autocomplete { + border-color: #aaa; + background-color: #efefef; +} + +.ui-autocomplete li a.ui-state-focus { + background-color: #ddd; +} + +.post-com-count { + color: #fff; +} + +.post-com-count span { + background-color: #bbb; + color: #fff; +} + +.post-com-count:hover span { + background-color: #2ea2cc; +} + +.quicktags, .search { + background-color: #ccc; + color: #000; +} + +.side-info h5 { + border-bottom-color: #dadada; +} + +.side-info ul { + color: #666; +} + +a:hover, +a:active { + color: #2ea2cc; +} + +a:focus { + color: #124964; +} + +#adminmenu a:hover, +#adminmenu li.menu-top > a:focus, +#adminmenu .wp-submenu a:hover, +#rightnow a:hover, +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover, +.ui-tabs-nav a:hover { + color: #2ea2cc; +} + +#the-comment-list .comment-item { + border: none; +} + +#side-sortables .category-tabs .tabs a, +#side-sortables .add-menu-item-tabs .tabs a, +.wp-tab-bar .wp-tab-active a { + color: #333; +} + +#rightnow .rbutton { + background-color: #ebebeb; + color: #264761; +} + +p.submit { + border-top-color: #dfdfdf; +} + +.submitbox .submit { + background-color: #464646; + color: #ccc; +} + +table.widefat span.delete a, +table.widefat span.trash a, +table.widefat span.spam a, +.plugins a.delete, +#all-plugins-table .plugins a.delete, +#search-plugins-table .plugins a.delete, +.submitbox .submitdelete, +#media-items a.delete, +#media-items a.delete-permanently, +#nav-menu-footer .menu-delete { + color: #a00; +} + +table.widefat span.delete a:hover, +table.widefat span.trash a:hover, +table.widefat span.spam a:hover, +.plugins a.delete:hover, +#all-plugins-table .plugins a.delete:hover, +#search-plugins-table .plugins a.delete:hover, +.submitbox .submitdelete:hover, +#media-items a.delete:hover, +#media-items a.delete-permanently:hover, +#nav-menu-footer .menu-delete:hover { + color: #f00; +} + +#normal-sortables .submitbox .submitdelete:hover { + color: #000; + background-color: #f00; + border-bottom-color: #f00; +} + +.tablenav .dots { + border-color: transparent; +} + +.tablenav .next, +.tablenav .prev { + border-color: transparent; + color: #0074a2; +} + +.tablenav .next:hover, +.tablenav .prev:hover { + border-color: transparent; + color: #2ea2cc; +} + +div.updated, +.login .message, +.press-this #message { + background-color: #fff; + border-left: 4px solid #7ad03a; + + -webkit-box-shadow: 0px 1px 1px 0px rgba(0,0,0,0.1); + box-shadow: 0px 1px 1px 0px rgba(0,0,0,0.1); +} + +#update-nag, +.update-nag { + background-color: #fff; + border-left: 4px solid #ffba00; + + -webkit-box-shadow: 0px 1px 1px 0px rgba(0,0,0,0.1); + box-shadow: 0px 1px 1px 0px rgba(0,0,0,0.1); +} + +div.error, +.login #login_error { + background: #fff; + border-left: 4px solid #dd3d36; + + -webkit-box-shadow: 0px 1px 1px 0px rgba(0,0,0,0.1); + box-shadow: 0px 1px 1px 0px rgba(0,0,0,0.1); +} + +.update-message { + color: #000; +} + +a.page-numbers { + border-bottom-color: #b8d3e2; +} + +.commentlist li { + border-bottom-color: #ccc; +} + +.widefat td, +.widefat th { + color: #555; +} + +.widefat p, +.widefat ol, +.widefat ul { + color: #333; +} + +.widefat thead tr th, +.widefat tfoot tr th, +h3.dashboard-widget-title, +h3.dashboard-widget-title span, +h3.dashboard-widget-title small { + color: #333; +} + +th.manage-column a, +th.sortable a:hover, +th.sortable a:active, +th.sortable a:focus { + color: #333; +} + +th.sortable a:focus { + background: #e1e1e1; +} + +h3.dashboard-widget-title small a { + color: #d7d7d7; +} + +h3.dashboard-widget-title small a:hover { + color: #fff; +} + +a, +#the-comment-list p.comment-author strong a, +#media-upload a.del-link, +#media-items a.delete, +#media-items a.delete-permanently, +.plugins a.delete, +.ui-tabs-nav a, +.plugins .inactive a { + color: #0074a2; + -webkit-transition-property: border, background, color; + -moz-transition-property: border, background, color; + transition-property: border, background, color; + -webkit-transition-duration: .05s; + -moz-transition-duration: .05s; + transition-duration: .05s; + -webkit-transition-timing-function: ease-in-out; + -moz-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; +} + +.wp-list-table a, +.media-router a { + -moz-transition: none; + -webkit-transition: none; + transition: none; +} + +#adminmenu a { + color: #eee; +} + +#adminmenu .awaiting-mod, +#adminmenu .update-plugins, +#sidemenu a .update-plugins, +#rightnow .reallynow { + background-color: #d54e21; + color: #fff; +} +#plugin-information .action-button { + background-color: #2ea2cc; + color: #fff; +} + +#adminmenu li.current a .awaiting-mod, +#adminmenu li a.wp-has-current-submenu .update-plugins { + background-color: #2ea2cc; + color: #fff; +} + +div#media-upload-header, +div#plugin-information-header { + background-color: #f9f9f9; + border-bottom-color: #dfdfdf; +} + +#currenttheme img { + border-color: #666; +} + +input.readonly, textarea.readonly { + background-color: #ddd; +} + +#editable-post-name { + background-color: #fffbcc; +} + +#edit-slug-box strong, +.tablenav .displaying-num, +#submitted-on, +.submitted-on { + color: #777; +} + +.plugins .inactive a:hover { + color: #2ea2cc; +} + +#wpfooter { + color: #777; + border-color: transparent; +} + +.imgedit-group, +#media-items .media-item, +.media-item .describe { + border-color: #dfdfdf; +} + +.plugins .plugin-description p, +.plugins .plugin-version-author-uri { + color: #333; +} + +.plugins .inactive .plugin-title strong { + color: #333; +} + +.plugin-update-tr .plugin-update { + border: none; + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +.plugin-update-tr .update-message { + background-color: #f7f7f7; + background-color: rgba(0,0,0,0.03); +} + +tr.active.update + tr.plugin-update-tr .plugin-update .update-message { + background-color: #fcf3ef; +} + +.plugin-update-tr .update-message:before { + color: #d54e21; +} + +.plugins, +.plugins th, +.plugins td { + color: #000; +} + +.plugins .inactive a { + color: #579; +} + +.plugins tr { + background: #fff; +} + +.plugins .inactive td, +.plugins .inactive th, +.plugins .active td, +.plugins .active th, +.plugin-install #the-list td { + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +.plugins .update td, +.plugins .update th { + -webkit-box-shadow: none; + box-shadow: none; +} + +.plugins .active td, +.plugins .active th, +tr.active + tr.plugin-update-tr .plugin-update { + background-color: #f7fcfe; +} + +.plugins .active.update td, +.plugins .active.update th, +tr.active.update + tr.plugin-update-tr .plugin-update, +#activity-widget #the-comment-list .unapproved { + background-color: #fefaf7; +} + +.plugins tr.active.plugin-update-tr + tr.inactive th, +.plugins tr.active.plugin-update-tr + tr.inactive td, +.plugins tr.active + tr.inactive th, +.plugins tr.active + tr.inactive td { + border-top: 1px solid rgba(0,0,0,0.03); + + -webkit-box-shadow: inset 0px 1px 0 rgba(0,0,0,0.02), inset 0 -1px 0 #e1e1e1; + box-shadow: inset 0px 1px 0 rgba(0,0,0,0.02), inset 0 -1px 0 #e1e1e1; +} + +.plugins tr.active + tr.inactive.update th, +.plugins tr.active + tr.inactive.update td { + -webkit-box-shadow: none; + box-shadow: none; +} + +.plugins .active th.check-column { + border-left: 4px solid #2ea2cc; +} + +.plugins .active.update th.check-column, +.plugins .active.update + .plugin-update-tr .plugin-update { + border-left: 4px solid #d54e21; +} + +.post-state-format:before, +.post-format-icon:before { + color: #ddd; + -webkit-transition: all .1s ease-in-out; + -moz-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +input[type="radio"]:checked+label:before { + color: #888888; +} + +a.post-state-format:hover:before, +a.post-format-icon:hover:before { + color: #2ea2cc; +} + +#the-list tr:last-child td, +#the-list tr:last-child th { + border-bottom: none !important; + -webkit-box-shadow: none; + box-shadow: none; +} + +#the-comment-list tr.undo, +#the-comment-list div.undo { + background-color: #f4f4f4; +} + +#the-comment-list .unapproved th, +#the-comment-list .unapproved td { + background-color: #fefaf7; +} + +#the-comment-list .unapproved th.check-column { + border-left: 4px solid #d54e21; +} + +#the-comment-list .approve a { + color: #006505; +} + +#the-comment-list .unapprove a { + color: #d98500; +} + +#the-comment-list th, +#the-comment-list td { + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); +} + +#activity-widget #the-comment-list .comment { + -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.06); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.06); +} + +#the-comment-list tr:last-child th, +#the-comment-list tr:last-child td { + -webkit-box-shadow: none; + box-shadow: none; +} + +#the-comment-list tr.unapproved + tr.approved th, +#the-comment-list tr.unapproved + tr.approved td { + border-top: 1px solid rgba(0, 0, 0, 0.03); +} + +#activity-widget .comments #the-comment-list .alt { + background-color: transparent; +} + +.welcome-panel p { + color: #777; +} + +.welcome-panel a { + text-decoration: none; +} + +.welcome-panel-column p { + color: #464646; +} + +.welcome-panel .welcome-icon:before { + color: #888; +} + +.widget-top, +.menu-item-handle, +.menu-item-settings, +.widget-inside, +.postbox, +#menu-settings-column .accordion-container, +#menu-management .menu-edit, +.manage-menus, +table.widefat, +.stuffbox, +p.popular-tags, +.widgets-holder-wrap, +.welcome-panel, +.wp-editor-container, +#post-status-info, +.popular-tags, +.feature-filter, +.imgedit-group { + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); +} + +#post-status-info { + border-top: none; +} + +.postbox table.widefat { + -webkit-box-shadow: none; + box-shadow: none; +} + +.welcome-panel, +.postbox, +table.widefat, +.wp-editor-container, +.stuffbox, +p.popular-tags, +.widgets-holder-wrap, +.popular-tags, +.feature-filter, +.imgedit-group { + background: #fff; +} + +.postbox h3, +#namediv h3, +#submitdiv h3 { + border-bottom: 1px solid #eeeeee; +} + +.widget .widget-top, +.menu-item-handle { + background: #fafafa; + color: #222; +} + +#misc-publishing-actions label[for="post_status"]:before, +#post-body #visibility:before, +.curtime #timestamp:before, +#post-body .misc-pub-revisions:before, +span.wp-media-buttons-icon:before { + color: #888; +} + +#rightnow .youhave { + background-color: #f0f6fb; +} + +#rightnow a { + color: #448abd; +} + +#welcome-panel.welcome-panel .welcome-panel-close::before, +.tagchecklist span a:before, +#bulk-titles div a:before, +.wp-pointer-buttons a.close:before { + background: none; + color: #bbb; +} + +#welcome-panel.welcome-panel .welcome-panel-close:hover:before, +.tagchecklist span a:hover:before, +#bulk-titles div a:hover:before, +.wp-pointer-buttons a.close:hover:before { + color: #c00; +} + +#screen-meta { + background-color: #fff; + border: 1px solid #ddd; + border-top: none; + -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.025); + box-shadow: 0 1px 0 rgba(0,0,0,.025); +} + +#contextual-help-back { + background: #f6fbfd; +} + +.contextual-help-tabs a:hover { + color: #333; +} + +#contextual-help-back, +.contextual-help-tabs .active a { + border-color: #e1e1e1; +} + +.contextual-help-tabs .active { + border-color: #2ea2cc; + + -webkit-box-shadow: 0px 2px 0 rgba(0,0,0,0.02), 0 1px 0 rgba(0,0,0,0.02); + box-shadow: 0px 2px 0 rgba(0,0,0,0.02), 0 1px 0 rgba(0,0,0,0.02); +} + +.contextual-help-tabs .active, +.contextual-help-tabs .active a, +.contextual-help-tabs .active a:hover { + background: #f6fbfd; + color: #333; +} + +/* screen options and help tabs */ +#screen-options-link-wrap, +#contextual-help-link-wrap { + border: 1px solid #ddd; + border-top: none; + background: #fff; + -webkit-box-shadow: 0px 1px 1px -1px rgba(0,0,0,0.1); + box-shadow: 0px 1px 1px -1px rgba(0,0,0,0.1); +} + +#screen-meta-links a { + color: #777; +} + +#screen-meta-links a:after { + color: #bbb; +} + +#screen-meta-links a:hover, +#screen-meta-links a:active { + color: #333; +} + +#screen-meta-links a:focus { + border-color: #aaa; + color: #333; + -webkit-box-shadow: 0 2px 3px rgba(0,0,0,0.15); + box-shadow: 0 2px 3px rgba(0,0,0,0.15); +} +/* end screen options and help tabs */ + +#wphead { + border-bottom-color: #dfdfdf; +} + +#wphead h1 a { + color: #464646; +} + +.file-error, +abbr.required, +.widget-control-remove:hover, +table.widefat .delete a:hover, +table.widefat .trash a:hover, +table.widefat .spam a:hover { + color: #f00; +} + +#pass-strength-result { + background-color: #eee; + border-color: #ddd !important; +} + +#pass-strength-result.bad { + background-color: #ffb78c; + border-color: #ff853c !important; +} + +#pass-strength-result.good { + background-color: #ffec8b; + border-color: #fc0 !important; +} + +#pass-strength-result.short { + background-color: #ffa0a0; + border-color: #f04040 !important; +} + +#pass-strength-result.strong { + background-color: #c3ff88; + border-color: #8dff1c !important; +} + +#post-status-info { + background-color: #f7f7f7; +} + +.widget-inside, +.menu-item-settings { + background: #fff; +} + +.menu-item-settings { + border-top: none; +} + +#titlediv #title { + background-color: #fff; +} + +#tTips p#tTips_inside { + background-color: #ddd; + color: #333; +} + +#poststuff .inside .the-tagcloud { + border-color: #ddd; +} + +/* menu */ +#adminmenuback, +#adminmenuwrap, +#adminmenu { + background-color: #222; +} + +#adminmenu li.wp-menu-separator { + background: transparent; + border-color: transparent; +} + +#adminmenu div.separator { + border-color: transparent; +} + +#adminmenu li.wp-menu-open { + border-color: #dfdfdf; +} + +#adminmenu li.menu-top:hover, +#adminmenu li.opensub > a.menu-top, +#adminmenu li > a.menu-top:focus { + background-color: #111; + color: #2ea2cc; +} + +/* flyout menu arrow */ +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #333; +} + +#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, +#adminmenu li.current a.menu-top, +.folded #adminmenu li.wp-has-current-submenu, +.folded #adminmenu li.current.menu-top, +#adminmenu .wp-menu-arrow, +#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head, +#adminmenu .wp-menu-arrow div { + background: #0074a2; +} + +#adminmenu li.wp-not-current-submenu .wp-menu-arrow { + border-top-color: #f9f9f9; + border-bottom-color: #dfdfdf; + background: transparent; +} + +#adminmenu li.wp-not-current-submenu .wp-menu-arrow div { + background: #111; + border-color: #111; +} + +#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, +#adminmenu li.current a.menu-top, +#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head { + color: #fff; +} + +.folded #adminmenu li.wp-has-current-submenu, +.folded #adminmenu li.current.menu-top { + border-color: #666; /* Match the background color of the current menu item for a flat appearance */ +} + +#adminmenu .wp-submenu li.current, +#adminmenu .wp-submenu li.current a, +#adminmenu .opensub .wp-submenu li.current a, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, +#adminmenu .wp-submenu li.current a:hover, +#adminmenu .wp-submenu li.current a:focus { + color: #fff; + background: transparent; +} + +#adminmenu .wp-submenu, +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + background-color: #333; + + -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.2); + box-shadow: 0 3px 5px rgba(0,0,0,0.2); +} + +#adminmenu .wp-submenu a, +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, +.folded #adminmenu .wp-has-current-submenu .wp-submenu a { + color: #bbb; +} + +#adminmenu .wp-submenu .wp-submenu-head { + color: #fff; +} + +/* collapse menu button */ +#collapse-menu { + color: #aaa; + -webkit-transition: all .1s ease-in-out; + -moz-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#collapse-menu:hover { + color: #2ea2cc; +} + +#collapse-button div:after { + color: #aaa; +} + +#collapse-menu:hover #collapse-button div:after { + color: #2ea2cc; +} + +#adminmenu div.wp-menu-image:before { + color: #999; +} + +.icon16:before { + color: #999; +} + +#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before { + color: #fff; +} + +#adminmenu li:hover div.wp-menu-image:before { + color: #2ea2cc; +} + +#adminmenu .wp-has-current-submenu div.wp-menu-image:before, +#adminmenu .current div.wp-menu-image:before, +#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before, +#adminmenu a.current:hover div.wp-menu-image:before { + color: #fff; +} + +/* Collapse button in theme preview */ + +.wp-full-overlay a.collapse-sidebar { + color: #777; +} + +.wp-full-overlay a.collapse-sidebar:hover { + color: #0074a2; +} + +.wp-full-overlay .collapse-sidebar-arrow:before { + background: #eee; +} + +/* Diff */ + +table.diff .diff-deletedline del { + background-color: #f99; +} + +.ui-tooltip, .arrow::after { + background-color: #fff; + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +.revisions-meta, +.revisions-diff, +.revisions.pinned .revisions-controls { + background-color: #fff; + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +table.diff .diff-deletedline { + background-color: #ffe9e9; +} + +table.diff .diff-deletedline del { + background-color: #faa; +} + +table.diff .diff-addedline { + background-color: #e9ffe9; +} + +table.diff .diff-addedline ins { + background-color: #afa; +} + +.revisions-tooltip, +.revisions-tooltip-arrow span { + border-color: #d7d7d7; + background-color: #fff; +} + +.revisions-tickmarks { + background-color: #fff; +} + +.revisions-tickmarks > div { + border-color: #aaa; +} + +.revisions.pinned .revisions-controls { + background: #fff; +} + +.revisions.pinned .revisions-meta { + box-shadow: none; +} + +/* jQuery UI Slider */ + +.wp-slider.ui-slider { + border-color: #d7d7d7; +} + +.wp-slider .ui-slider-handle, +.wp-slider .ui-slider-handle.ui-state-hover, +.wp-slider .ui-slider-handle.focus { + background: #2ea2cc; + border: 1px solid #0074a2; + -webkit-box-shadow: inset 0 1px 0 #78c8e6, 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 #78c8e6, 0 1px 0 rgba(0,0,0,.15); +} + +.wp-slider .ui-slider-handle:before { + color: #fff; +} + +/* edit image */ +#sidemenu a { + background-color: #f9f9f9; + border-color: #f9f9f9; + border-bottom-color: #dfdfdf; +} + +#sidemenu a.current { + background-color: #f1f1f1; + border-color: #dfdfdf #dfdfdf #f1f1f1; + color: #000; +} + +#replyerror { + border-color: #ddd; + background-color: #f9f9f9; +} + +/* table vim shortcuts */ +.vim-current, +.vim-current th, +.vim-current td { + background-color: #E4F2FD !important; +} + +/* Install Plugins */ + +#plugin-information { + height: auto; +} + +#plugin-information .fyi ul { + background-color: #eaf3fa; +} + +#plugin-information .fyi h2.mainheader { + background-color: #cee1ef; +} + +#plugin-information pre, +#plugin-information code { + background-color: #ededff; +} + +#plugin-information pre { + border-color: #ccc; +} + +/* inline editor */ +#bulk-titles { + border-color: #ddd; +} + +.inline-editor div.title { + background-color: #eaf3fa; +} + +.inline-editor ul.cat-checklist { + background-color: #fff; + border-color: #ddd; +} + +.inline-editor .quick-edit-save { + background-color: #f1f1f1; +} + +fieldset.inline-edit-col-right .inline-edit-col { + border-color: #dfdfdf; +} + +.attention { + color: #2ea2cc; +} + +.tablenav .tablenav-pages { + color: #555; +} + +.tablenav .tablenav-pages a { + background: #eee; + background: rgba( 0, 0, 0, 0.05 ); +} + +.tablenav .tablenav-pages a:hover, +.tablenav .tablenav-pages a:focus { + color: #fff; + background: #2ea2cc; +} + +.tablenav .tablenav-pages a.disabled, +.tablenav .tablenav-pages a.disabled:hover, +.tablenav .tablenav-pages a.disabled:focus { + color: #aaa; + background: #eee; + background: rgba( 0, 0, 0, 0.05 ); +} + +.tablenav .tablenav-pages .current { + background: #dfdfdf; + border-color: #d3d3d3; +} + +#availablethemes, +#availablethemes td { + border-color: #ddd; +} + +#current-theme img { + border-color: #999; +} + +#TB_window #TB_title a.tb-theme-preview-link, +#TB_window #TB_title a.tb-theme-preview-link:visited { + color: #999; +} + +#TB_window #TB_title a.tb-theme-preview-link:hover, +#TB_window #TB_title a.tb-theme-preview-link:focus { + color: #ccc; +} + +.misc-pub-section { +} + +#minor-publishing { + border-bottom-color: #dfdfdf; +} + +#post-body .misc-pub-section { +} + +.post-com-count span { + background-color: #bbb; +} + +.sortable-placeholder { + border-color: #bbb; +} + +#post-body ul.category-tabs li.tabs a, +#post-body ul.add-menu-item-tabs li.tabs a, +body.press-this ul.category-tabs li.tabs a { + color: #333; +} + +.view-switch>a:before { + color: #bbb; +} + +.view-switch a:hover:before { + color: #727272; +} + +.view-switch a.current:before { + color: #0074a2; +} + +div.widgets-sortables, +#widgets-left .inactive, +#available-widgets .widget-holder { + background-color: #fff; + border-color: #fff; +} + +#widgets-left #available-widgets { + background: transparent; +} + +#widgets-left .widgets-holder-wrap { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.sidebar-name { + border-bottom-color: #e1e1e1; +} + +.js #removing-widget { + color: #2ea2cc; +} + +#removing-widget span { + color: black; +} + +.in-widget-title, +#widgets-right .widget-top a.widget-control-edit, +#wp_inactive_widgets .in-widget-title, +#available-widgets .widget-description { + color: #666; +} + +#widgets-right .widget-top a.widget-control-edit:hover { + color: #fff; +} + +.deleting .widget-title, +.deleting .widget-top a.widget-action:after { + color: #aaa; +} + +.imgedit-menu div { + border-color: #d5d5d5; + background-color: #f1f1f1; +} + +.imgedit-menu div:hover { + border-color: #c1c1c1; + background-color: #eaeaea; +} + +.imgedit-menu div.disabled { + border-color: #ccc; + background-color: #ddd; + filter: alpha(opacity=50); + opacity: 0.5; +} + +/* added from nav-menu.css */ +#menu-management { + background: #f5f5f5 +} + +#menu-management #post-body { + background: #fff; + border-top-color: #fff; + border-bottom-color: #dfdfdf; +} + +#nav-menu-header { + border-bottom-color: #dfdfdf; +} + +#menu-management .nav-tabs-arrow a { + color: #c1c1c1; +} + +#menu-management .nav-tabs-arrow a:hover { + color: #2ea2cc; +} + +#menu-management .nav-tabs-arrow a:active { + color: #464646; +} + +#menu-management .nav-tab-active { + border-color: #dfdfdf; +} + +#menu-management .nav-tab { + background: #fbfbfb; + border-color: #dfdfdf; +} + +.js .input-with-default-title { + color: #aaa; +} + +#cancel-save { + color: #f00; +} + +#cancel-save:hover { + background-color: #f00; + color: #fff; +} + +.list-container, +.menu-item-handle { + border-color: #dfdfdf; +} + +.menu li.deleting .menu-item-handle { + background-color: #f66; +} + +.item-type { /* Menu item controls */ + color: #777; +} + +.item-controls .menu-item-delete:hover { + color: #f00; +} + +.widget-action, +.handlediv, +.item-edit, +.sidebar-name-arrow, +.accordion-section-title:after { + color: #aaa; +} + +.widget-action:hover, +.handlediv:hover, +.item-edit:hover, +.sidebar-name:hover .sidebar-name-arrow, +.accordion-section-title:hover:after { + color: #777; +} + +/* Menu editing */ + +.link-to-original { + color: #777; + border-color: #dfdfdf; +} + +#cancel-save:hover { + color: #fff !important; +} + +#update-menu-item { + color: #fff !important; +} + +#update-menu-item:hover, +#update-menu-item:active, +#update-menu-item:focus { + color: #eaf2fa !important; + border-color: #13455b !important; +} + +.submitbox .submitcancel { + color: #0074a2; + border-bottom-color: #0074a2; +} + +.submitbox .submitcancel:hover { + background: #0074a2; + color: #fff; +} + +.manage-menus { + background: #fbfbfb; +} + +.menu-settings { + border-top-color: #eeeeee; +} + +.theme-location-set { + color: #999999; +} + +.nav-menus-php .delete-action a { + color: #bc0b0b; +} + +.is-submenu { + color: #999999; +} + +.nav-tab { + color: #555; + border-color: #ccc; + background: #e4e4e4; +} + +.nav-tab:hover { + background-color: #fff; + color: #464646; +} + +.nav-tab-active { + color: #464646; +} + +.nav-tab-active, +.nav-tab-active:hover { + color: #000; + background: none; + border-color: #ccc; + border-bottom-color: #f1f1f1; +} + +h2.nav-tab-wrapper, h3.nav-tab-wrapper { + border-bottom-color: #ccc; +} + +#upload-form label { + color: #777; +} + +/* Begin About Pages */ +.about-wrap h1 { + color: #333; +} + +.about-text { + color: #777; +} + +.wp-badge { + background-color: #0074a2; + color: #78c8e6; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.2); + box-shadow: 0 1px 3px rgba(0,0,0,0.2); +} + +.about-wrap h2 .nav-tab-active { + border-color: #ccc; + border-bottom-color: #f1f1f1; +} + +.about-wrap h2, +.about-wrap h3, +.about-wrap h4 { + color: #222; +} + +.about-wrap .feature-section .col-2:before, +.about-wrap .feature-section .col-2:after, +.about-wrap .feature-section.two-col p:before { + color: #1e8cbe; +} + +.about-wrap .point-releases { + border-bottom: 1px solid #dfdfdf; +} + +.about-wrap .point-releases h3 { + border-top-color: #dfdfdf; +} + +.about-wrap li.wp-person img.gravatar { + border-color: #ccc; +} + +.about-wrap li.wp-person .title { + color: #464646; +} + +.freedoms-php .about-wrap ol li { + color: #999; +} + +.freedoms-php .about-wrap ol p { + color: #464646; +} + +/* End About Pages */ + +/* Press This and Image editing icons */ + +.pressthis a span:before { + color:#777; +} + +.imgedit-menu div { + color:#777; +} + +.imgedit-menu div:hover { + color:#333; +} + +/* End Press This and Image editing icons */ + +/* Media Manager */ + +.media-modal-content { + background: #fcfcfc; + box-shadow: 0 5px 15px rgba(0,0,0,0.7); +} + +.media-menu { + background: #f3f3f3; + border-right-color: #ccc; +} + +.media-menu > a { + color: #0074a2; +} + +.media-menu .active, +.media-menu .active:hover { + color: #222; +} + +.media-frame-content { + background: #fff; + border-top-color: #ddd; + border-bottom-color: #ddd; +} + +.media-menu .separator { + border-top-color: #ddd; + border-bottom: none; +} + +.media-sidebar { + background: #f3f3f3; + border-color: #ddd; +} + +.media-router .active, +.media-router > a.active:last-child { + background: #fff; + border: 1px solid #ddd; + border-bottom: none; +} + +.details.attachment { + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #1e8cbe; +} + +.attachment .check { + background: #eee; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px rgba( 0, 0, 0, 0.4 ); +} + +.attachment.details .check { + background-color: #1e8cbe; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #1e8cbe; +} + +/* TinyMCE modal */ + +.clearlooks2 { + box-shadow: 0 5px 15px rgba(0,0,0,0.7); +} + +.clearlooks2 .mceMiddle span, +.clearlooks2 .mceMiddle .mceLeft, +.clearlooks2 .mceMiddle .mceRight, +.clearlooks2 .mceBottom, +.clearlooks2 .mceBottom .mceLeft, +.clearlooks2 .mceBottom .mceCenter, +.clearlooks2 .mceBottom .mceRight { + background-color: #fcfcfc; +} + +.clearlooks2 .mceTop span, +.clearlooks2 .mceFocus .mceTop span { + color: #222; +} + +.clearlooks2 .mceClose:before { + color: #999; +} + +.clearlooks2 .mceClose:hover:before { + color: #2ea2cc; +} + + +/* Lightbox */ + +.sticky-menu #TB_window { + background: #f1f1f1; +} + +/* tinymce */ +a .mceIcon, .mceAction { + color:#777; +} + +a .mceIcon:hover { + color:#333; +} + +/* Log in page */ + +.login form .input, +.login input[type="text"], +.login form input[type="checkbox"] { + background: #fbfbfb; +} + +.login form { + background: #fff; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13); + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +body.login { + background: #f1f1f1; +} + +.login #nav a, +.login #backtoblog a { + text-decoration: none; + color: #999; +} + +.login #nav a:hover, +.login #backtoblog a:hover { + color: #2ea2cc; +} + +.login h1 a:hover { + color: #2ea2cc; +} + +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .curtime #timestamp, + #screen-meta-links a.show-settings, + .widget-top a.widget-action, + .widget-top a.widget-action:hover, + .sidebar-name-arrow, + .sidebar-name:hover .sidebar-name-arrow, + .meta-box-sortables .postbox:hover .handlediv, + .tagchecklist span a, + #bulk-titles div a, + .tagchecklist span a:hover, + #bulk-titles div a:hover, + .wp_themeSkin .mceToolbar span.mce_undo, + .wp_themeSkin .mceToolbar span.mce_redo, + .wp_themeSkin .mceToolbar span.mce_bullist, + .wp_themeSkin .mceToolbar span.mce_numlist, + .wp_themeSkin .mceToolbar span.mce_blockquote, + .wp_themeSkin .mceToolbar span.mce_charmap, + .wp_themeSkin .mceToolbar span.mce_bold, + .wp_themeSkin .mceToolbar span.mce_italic, + .wp_themeSkin .mceToolbar span.mce_underline, + .wp_themeSkin .mceToolbar span.mce_justifyleft, + .wp_themeSkin .mceToolbar span.mce_justifyright, + .wp_themeSkin .mceToolbar span.mce_justifycenter, + .wp_themeSkin .mceToolbar span.mce_justifyfull, + .wp_themeSkin .mceToolbar span.mce_indent, + .wp_themeSkin .mceToolbar span.mce_outdent, + .wp_themeSkin .mceToolbar span.mce_link, + .wp_themeSkin .mceToolbar span.mce_unlink, + .wp_themeSkin .mceToolbar span.mce_help, + .wp_themeSkin .mceToolbar span.mce_removeformat, + .wp_themeSkin .mceToolbar span.mce_fullscreen, + .wp_themeSkin .mceToolbar span.mce_wp_fullscreen, + .wp_themeSkin .mceToolbar span.mce_media, + .wp_themeSkin .mceToolbar span.mce_pastetext, + .wp_themeSkin .mceToolbar span.mce_pasteword, + .wp_themeSkin .mceToolbar span.mce_wp_help, + .wp_themeSkin .mceToolbar span.mce_wp_adv, + .wp_themeSkin .mceToolbar span.mce_wp_more, + .wp_themeSkin .mceToolbar span.mce_strikethrough, + .wp_themeSkin .mceToolbar span.mce_spellchecker, + .wp_themeSkin .mceToolbar span.mce_forecolor, + .wp_themeSkin .mceToolbar .mce_forecolorpicker, + .wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker, + .wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor, + .wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist, + .wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist { + background: none !important; + } +} diff --git a/src/wp-admin/css/colors.min.css b/src/wp-admin/css/colors.min.css new file mode 100644 index 0000000..42dd88b --- /dev/null +++ b/src/wp-admin/css/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-left:0;border-right:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-right:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-right-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-left:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-left:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-left:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-left:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-left:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-left:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-right-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}} \ No newline at end of file diff --git a/src/wp-admin/css/colors/_admin.scss b/src/wp-admin/css/colors/_admin.scss new file mode 100644 index 0000000..88c443f --- /dev/null +++ b/src/wp-admin/css/colors/_admin.scss @@ -0,0 +1,477 @@ + +@import 'variables'; +@import 'mixins'; + + +html { + background: $body-background; +} + + +/* Links */ + +a { + color: $link; + + &:hover, + &:active, + &:focus { + color: $link-focus; + } +} + +#rightnow a:hover, +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover, +.ui-tabs-nav a:hover { + color: $link-focus; +} + + +/* Forms */ + +input[type=checkbox]:checked:before { + color: $form-checked; +} + +input[type=radio]:checked:before { + background: $form-checked; +} + +.wp-core-ui input[type="reset"]:hover, +.wp-core-ui input[type="reset"]:active { + color: $link-focus; +} + + +/* Core UI */ + +.wp-core-ui { + .button-primary { + @include button( $button-color ); + } + + .wp-ui-primary { + color: $text-color; + background-color: $base-color; + } + .wp-ui-text-primary { + color: $base-color; + } + + .wp-ui-highlight { + color: $menu-highlight-text; + background-color: $menu-highlight-background; + } + .wp-ui-text-highlight { + color: $menu-highlight-background; + } + + .wp-ui-notification { + color: $menu-bubble-text; + background-color: $menu-bubble-background; + } + .wp-ui-text-notification { + color: $menu-bubble-background; + } + + .wp-ui-text-icon { + color: $menu-icon; + } +} + + +/* List tables */ + +.wrap .add-new-h2:hover, +#add-new-comment a:hover, +.tablenav .tablenav-pages a:hover, +.tablenav .tablenav-pages a:focus { + color: $menu-text; + background-color: $menu-background; +} + +.view-switch a.current:before { + color: $menu-background; +} + +.view-switch a:hover:before { + color: $menu-bubble-background; +} + +.post-com-count:hover:after { + border-top-color: $menu-background; +} +.post-com-count:hover span { + color: $menu-text; + background-color: $menu-background; +} + +strong .post-com-count:after { + border-top-color: $menu-bubble-background; +} +strong .post-com-count span { + background-color: $menu-bubble-background; +} + + +/* Admin Menu */ + +#adminmenuback, +#adminmenuwrap, +#adminmenu { + background: $menu-background; +} + +#adminmenu a { + color: $menu-text; +} + +#adminmenu div.wp-menu-image:before { + color: $menu-icon; +} + +#adminmenu a:hover, +#adminmenu li.menu-top:hover, +#adminmenu li.opensub > a.menu-top, +#adminmenu li > a.menu-top:focus { + color: $menu-highlight-text; + background-color: $menu-highlight-background; +} + +#adminmenu li.menu-top:hover div.wp-menu-image:before, +#adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: $menu-highlight-icon; +} + + +/* Active tabs use a bottom border color that matches the page background color. */ + +.about-wrap h2 .nav-tab-active, +.nav-tab-active, +.nav-tab-active:hover { + border-bottom-color: $body-background; +} + + +/* Admin Menu: submenu */ + +#adminmenu .wp-submenu, +#adminmenu .wp-has-current-submenu .wp-submenu, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: $menu-submenu-background; +} + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: $menu-submenu-background; +} + +#adminmenu .wp-submenu .wp-submenu-head { + color: $menu-submenu-text; +} + +#adminmenu .wp-submenu a, +#adminmenu .wp-has-current-submenu .wp-submenu a, +.folded #adminmenu .wp-has-current-submenu .wp-submenu a, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: $menu-submenu-text; + + &:focus, &:hover { + color: $menu-submenu-focus-text; + } +} + + +/* Admin Menu: current */ + +#adminmenu .wp-submenu li.current a, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: $menu-submenu-current-text; + + &:hover, &:focus { + color: $menu-submenu-focus-text; + } +} + +ul#adminmenu a.wp-has-current-submenu:after, +ul#adminmenu > li.current > a.current:after { + border-right-color: $body-background; +} + +#adminmenu li.current a.menu-top, +#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, +#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, +.folded #adminmenu li.current.menu-top { + color: $menu-current-text; + background: $menu-current-background; +} + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: $menu-current-icon; +} + + +/* Admin Menu: bubble */ + +#adminmenu .awaiting-mod, +#adminmenu .update-plugins { + color: $menu-bubble-text; + background: $menu-bubble-background; +} + +#adminmenu li.current a .awaiting-mod, +#adminmenu li a.wp-has-current-submenu .update-plugins, +#adminmenu li:hover a .awaiting-mod, +#adminmenu li.menu-top:hover > a .update-plugins { + color: $menu-bubble-current-text; + background: $menu-bubble-current-background; +} + + +/* Admin Menu: collapse button */ + +#collapse-menu { + color: $menu-collapse-text; +} + +#collapse-menu:hover { + color: $menu-collapse-focus-text; +} + +#collapse-button div:after { + color: $menu-collapse-icon; +} + +#collapse-menu:hover #collapse-button div:after { + color: $menu-collapse-focus-icon; +} + + +/* Admin Bar */ + +#wpadminbar { + color: $menu-text; + background: $menu-background; +} + +#wpadminbar .ab-item, +#wpadminbar a.ab-item, +#wpadminbar > #wp-toolbar span.ab-label, +#wpadminbar > #wp-toolbar span.noticon { + color: $menu-text; +} + +#wpadminbar .ab-icon, +#wpadminbar .ab-icon:before, +#wpadminbar .ab-item:before, +#wpadminbar .ab-item:after { + color: $menu-icon; +} + +#wpadminbar .ab-top-menu > li:hover > .ab-item, +#wpadminbar .ab-top-menu > li.hover > .ab-item, +#wpadminbar .ab-top-menu > li > .ab-item:focus, +#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, +#wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, +#wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: $menu-submenu-focus-text; + background: $menu-submenu-background; +} + +#wpadminbar > #wp-toolbar li:hover span.ab-label, +#wpadminbar > #wp-toolbar li.hover span.ab-label, +#wpadminbar > #wp-toolbar a:focus span.ab-label { + color: $menu-submenu-focus-text; +} + +#wpadminbar li:hover .ab-icon:before, +#wpadminbar li:hover .ab-item:before, +#wpadminbar li:hover .ab-item:after, +#wpadminbar li:hover #adminbarsearch:before { + color: $menu-highlight-icon; +} + + +/* Admin Bar: submenu */ + +#wpadminbar .menupop .ab-sub-wrapper { + background: $menu-submenu-background; +} + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: $menu-submenu-background-alt; +} + +#wpadminbar .ab-submenu .ab-item, +#wpadminbar .quicklinks .menupop ul li a, +#wpadminbar .quicklinks .menupop.hover ul li a, +#wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: $menu-submenu-text; +} + +#wpadminbar .quicklinks li .blavatar, +#wpadminbar .menupop .menupop > .ab-item:before { + color: $menu-icon; +} + +#wpadminbar .quicklinks .menupop ul li a:hover, +#wpadminbar .quicklinks .menupop ul li a:focus, +#wpadminbar .quicklinks .menupop ul li a:hover strong, +#wpadminbar .quicklinks .menupop ul li a:focus strong, +#wpadminbar .quicklinks .menupop.hover ul li a:hover, +#wpadminbar .quicklinks .menupop.hover ul li a:focus, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, +#wpadminbar li:hover .ab-icon:before, +#wpadminbar li:hover .ab-item:before, +#wpadminbar li a:focus .ab-icon:before, +#wpadminbar li .ab-item:focus:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover .ab-item:after, +#wpadminbar li.hover .ab-item:after, +#wpadminbar li:hover #adminbarsearch:before { + color: $menu-submenu-focus-text; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before { + color: $menu-submenu-focus-text; +} + + +/* Admin Bar: search */ + +#wpadminbar #adminbarsearch:before { + color: $menu-icon; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: $menu-text; + background: $adminbar-input-background; +} + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { color: $menu-text; opacity: .7; } +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { color: $menu-text; opacity: .7; } +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { color: $menu-text; opacity: .7; } +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { color: $menu-text; opacity: .7; } + + +/* Admin Bar: my account */ + +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: $adminbar-avatar-frame; + background-color: $adminbar-avatar-frame; +} + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: $menu-text; +} + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: $menu-submenu-focus-text; +} + +#wpadminbar #wp-admin-bar-user-info .username { + color: $menu-submenu-text; +} + + +/* Pointers */ + +.wp-pointer .wp-pointer-content h3 { + background-color: $highlight-color; +} + +.wp-pointer .wp-pointer-content h3:before { + color: $highlight-color; +} + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: $highlight-color; +} + + +/* Media Uploader */ + +.media-item .bar, +.media-progress-bar div { + background-color: $highlight-color; +} + +.details.attachment { + box-shadow: 0 0 0 1px #fff, 0 0 0 5px $highlight-color; +} + +.attachment.details .check { + background-color: $highlight-color; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px $highlight-color; +} + + +/* Themes */ + +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme:hover:after { + background: $highlight-color; +} + +.theme-browser .theme.add-new-theme:hover span:after { + color: $highlight-color; +} + +.theme-overlay .theme-header .close:hover, +.theme-overlay .theme-header .right:hover, +.theme-overlay .theme-header .left:hover { + background: $highlight-color; +} + +/* jQuery UI Slider */ + +.wp-slider .ui-slider-handle, +.wp-slider .ui-slider-handle.ui-state-hover, +.wp-slider .ui-slider-handle.focus { + background: $button-color; + border-color: darken( $button-color, 10% ); + -webkit-box-shadow: inset 0 1px 0 lighten( $button-color, 15% ), 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 lighten( $button-color, 15% ), 0 1px 0 rgba(0,0,0,.15); +} + +/* Thickbox: Plugin information */ + +#sidemenu a.current { + background: $body-background; + border-bottom-color: $body-background; +} + +#plugin-information .action-button { + background: $button-color; +} + +/* Responsive Component */ + +div#wp-responsive-toggle a:before { + color: $menu-icon; +} + +.wp-responsive-open div#wp-responsive-toggle a { + // ToDo: make inset border + border-color: transparent; + background: $menu-highlight-background; +} + +.star-rating .star { + color: $highlight-color; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: $menu-submenu-background; +} diff --git a/src/wp-admin/css/colors/_mixins.scss b/src/wp-admin/css/colors/_mixins.scss new file mode 100644 index 0000000..2792fa1 --- /dev/null +++ b/src/wp-admin/css/colors/_mixins.scss @@ -0,0 +1,37 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +@mixin button( $button-color, $text-color: white ) { + background: $button-color; + border-color: darken( $button-color, 10% ); + color: $text-color; + -webkit-box-shadow: inset 0 1px 0 lighten( $button-color, 15% ), 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 lighten( $button-color, 15% ), 0 1px 0 rgba(0,0,0,.15); + + &:hover, + &:focus { + background: darken( $button-color, 8% ); + border-color: darken( $button-color, 15% ); + color: $text-color; + -webkit-box-shadow: inset 0 1px 0 lighten( $button-color, 10% ), 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 lighten( $button-color, 10% ), 0 1px 0 rgba(0,0,0,.15); + } + + &:active { + background: darken( $button-color, 8% ); + border-color: darken( $button-color, 15% ); + color: $text-color; + -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + } + + &[disabled], + &:disabled, + &.button-primary-disabled { + color: hsl( hue( $button-color ), 10%, 80% ) !important; + background: darken( $button-color, 8% ) !important; + border-color: darken( $button-color, 15% ) !important; + text-shadow: none !important; + } +} diff --git a/src/wp-admin/css/colors/_variables.scss b/src/wp-admin/css/colors/_variables.scss new file mode 100644 index 0000000..05e46ba --- /dev/null +++ b/src/wp-admin/css/colors/_variables.scss @@ -0,0 +1,58 @@ +// assign default value to all undefined variables + + +// core variables + +$text-color: #fff !default; +$base-color: #222 !default; +$icon-color: hsl( hue( $base-color ), 7%, 95% ) !default; +$highlight-color: #0074a2 !default; +$notification-color: #d54e21 !default; + + +// global + +$body-background: #f1f1f1 !default; + +$link: #0074a2 !default; +$link-focus: lighten( $link, 10% ) !default; + +$button-color: $highlight-color !default; +$form-checked: $highlight-color !default; + + +// admin menu & admin-bar + +$menu-text: $text-color !default; +$menu-icon: $icon-color !default; +$menu-background: $base-color !default; + +$menu-highlight-text: $text-color !default; +$menu-highlight-icon: $text-color !default; +$menu-highlight-background: $highlight-color !default; + +$menu-current-text: $menu-highlight-text !default; +$menu-current-icon: $menu-highlight-icon !default; +$menu-current-background: $menu-highlight-background !default; + +$menu-submenu-text: mix( $base-color, $text-color, 30% ) !default; +$menu-submenu-background: darken( $base-color, 7% ) !default; +$menu-submenu-background-alt: desaturate( lighten( $menu-background, 7% ), 7% ) !default; + +$menu-submenu-focus-text: $highlight-color !default; +$menu-submenu-current-text: $text-color !default; + +$menu-bubble-text: $text-color !default; +$menu-bubble-background: $notification-color !default; +$menu-bubble-current-text: $text-color !default; +$menu-bubble-current-background: $menu-submenu-background !default; + +$menu-collapse-text: $menu-icon !default; +$menu-collapse-icon: $menu-icon !default; +$menu-collapse-focus-text: $text-color !default; +$menu-collapse-focus-icon: $menu-highlight-icon !default; + +$adminbar-avatar-frame: lighten( $menu-background, 7% ) !default; +$adminbar-input-background: lighten( $menu-background, 7% ) !default; + +$menu-customizer-text: mix( $base-color, $text-color, 40% ) !default; diff --git a/src/wp-admin/css/colors/blue/colors-rtl.css b/src/wp-admin/css/colors/blue/colors-rtl.css new file mode 100644 index 0000000..81248a3 --- /dev/null +++ b/src/wp-admin/css/colors/blue/colors-rtl.css @@ -0,0 +1,304 @@ +@import url("../../colors-rtl.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #096484; } + +input[type=radio]:checked:before { + background: #096484; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #e1a948; + border-color: #d39323; + color: white; + -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #db9825; + border-color: #bd831f; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e8be74, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8be74, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #db9825; + border-color: #bd831f; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #d1cdc7 !important; + background: #db9825 !important; + border-color: #bd831f !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: white; + background-color: #52accc; } +.wp-core-ui .wp-ui-text-primary { + color: #52accc; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #096484; } +.wp-core-ui .wp-ui-text-highlight { + color: #096484; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #e1a948; } +.wp-core-ui .wp-ui-text-notification { + color: #e1a948; } +.wp-core-ui .wp-ui-text-icon { + color: #e5f8ff; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: white; + background-color: #52accc; } + +.view-switch a.current:before { + color: #52accc; } + +.view-switch a:hover:before { + color: #e1a948; } + +.post-com-count:hover:after { + border-top-color: #52accc; } + +.post-com-count:hover span { + color: white; + background-color: #52accc; } + +strong .post-com-count:after { + border-top-color: #e1a948; } + +strong .post-com-count span { + background-color: #e1a948; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #52accc; } + +#adminmenu a { + color: white; } + +#adminmenu div.wp-menu-image:before { + color: #e5f8ff; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #096484; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: white; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #4796b3; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #4796b3; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #e2ecf1; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #e2ecf1; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: white; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: white; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: white; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #096484; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: white; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #e1a948; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: white; + background: #4796b3; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #e5f8ff; } + +#collapse-menu:hover { + color: white; } + +#collapse-button div:after { + color: #e5f8ff; } + +#collapse-menu:hover #collapse-button div:after { + color: white; } + +/* Admin Bar */ +#wpadminbar { + color: white; + background: #52accc; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: white; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #e5f8ff; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: white; + background: #4796b3; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: white; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #4796b3; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #75b7cd; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #e2ecf1; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #e5f8ff; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: white; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #e5f8ff; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: white; + background: #6ebad4; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: white; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #6ebad4; + background-color: #6ebad4; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #e2ecf1; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #096484; } + +.wp-pointer .wp-pointer-content h3:before { + color: #096484; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #096484; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #096484; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #096484; } + +.attachment.details .check { + background-color: #096484; + box-shadow: 0 0 0 1px white, 0 0 0 2px #096484; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #096484; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #096484; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #096484; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #e1a948; + border-color: #d39323; + -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #e1a948; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #e5f8ff; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #096484; } + +.star-rating .star { + color: #096484; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #4796b3; } diff --git a/src/wp-admin/css/colors/blue/colors-rtl.min.css b/src/wp-admin/css/colors/blue/colors-rtl.min.css new file mode 100644 index 0000000..720ee6b --- /dev/null +++ b/src/wp-admin/css/colors/blue/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-right:0;border-left:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-left:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-left-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-right:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-right:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-right:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-right:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-right:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-right:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-left-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f1f1f1}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#096484}input[type=radio]:checked:before{background:#096484}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#e1a948;border-color:#d39323;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#db9825;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#db9825;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#d1cdc7!important;background:#db9825!important;border-color:#bd831f!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#52accc}.wp-core-ui .wp-ui-text-primary{color:#52accc}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#096484}.wp-core-ui .wp-ui-text-highlight{color:#096484}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#e1a948}.wp-core-ui .wp-ui-text-notification{color:#e1a948}.wp-core-ui .wp-ui-text-icon{color:#e5f8ff}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background-color:#52accc}.view-switch a.current:before{color:#52accc}.view-switch a:hover:before{color:#e1a948}.post-com-count:hover:after{border-top-color:#52accc}.post-com-count:hover span{color:#fff;background-color:#52accc}strong .post-com-count:after{border-top-color:#e1a948}strong .post-com-count span{background-color:#e1a948}#adminmenuback,#adminmenuwrap,#adminmenu{background:#52accc}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#e5f8ff}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#096484}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f1f1f1}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#4796b3}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#4796b3}#adminmenu .wp-submenu .wp-submenu-head{color:#e2ecf1}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#e2ecf1}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#fff}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#fff}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#fff}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#096484}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#e1a948}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#fff;background:#4796b3}#collapse-menu{color:#e5f8ff}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#e5f8ff}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#52accc}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#e5f8ff}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#fff;background:#4796b3}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#fff}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#4796b3}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#75b7cd}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#e2ecf1}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#e5f8ff}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#fff}#wpadminbar #adminbarsearch:before{color:#e5f8ff}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#6ebad4}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6ebad4;background-color:#6ebad4}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info .username{color:#e2ecf1}.wp-pointer .wp-pointer-content h3{background-color:#096484}.wp-pointer .wp-pointer-content h3:before{color:#096484}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#096484}.media-item .bar,.media-progress-bar div{background-color:#096484}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #096484}.attachment.details .check{background-color:#096484;box-shadow:0 0 0 1px white,0 0 0 2px #096484}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#096484}.theme-browser .theme.add-new-theme:hover span:after{color:#096484}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#096484}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#e1a948;border-color:#d39323;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#e1a948}div#wp-responsive-toggle a:before{color:#e5f8ff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#096484}.star-rating .star{color:#096484}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#4796b3} \ No newline at end of file diff --git a/src/wp-admin/css/colors/blue/colors.css b/src/wp-admin/css/colors/blue/colors.css new file mode 100644 index 0000000..3c8ded9 --- /dev/null +++ b/src/wp-admin/css/colors/blue/colors.css @@ -0,0 +1,304 @@ +@import url("../../colors.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #096484; } + +input[type=radio]:checked:before { + background: #096484; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #e1a948; + border-color: #d39323; + color: white; + -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #db9825; + border-color: #bd831f; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e8be74, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8be74, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #db9825; + border-color: #bd831f; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #d1cdc7 !important; + background: #db9825 !important; + border-color: #bd831f !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: white; + background-color: #52accc; } +.wp-core-ui .wp-ui-text-primary { + color: #52accc; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #096484; } +.wp-core-ui .wp-ui-text-highlight { + color: #096484; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #e1a948; } +.wp-core-ui .wp-ui-text-notification { + color: #e1a948; } +.wp-core-ui .wp-ui-text-icon { + color: #e5f8ff; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: white; + background-color: #52accc; } + +.view-switch a.current:before { + color: #52accc; } + +.view-switch a:hover:before { + color: #e1a948; } + +.post-com-count:hover:after { + border-top-color: #52accc; } + +.post-com-count:hover span { + color: white; + background-color: #52accc; } + +strong .post-com-count:after { + border-top-color: #e1a948; } + +strong .post-com-count span { + background-color: #e1a948; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #52accc; } + +#adminmenu a { + color: white; } + +#adminmenu div.wp-menu-image:before { + color: #e5f8ff; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #096484; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: white; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #4796b3; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #4796b3; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #e2ecf1; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #e2ecf1; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: white; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: white; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: white; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #096484; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: white; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #e1a948; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: white; + background: #4796b3; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #e5f8ff; } + +#collapse-menu:hover { + color: white; } + +#collapse-button div:after { + color: #e5f8ff; } + +#collapse-menu:hover #collapse-button div:after { + color: white; } + +/* Admin Bar */ +#wpadminbar { + color: white; + background: #52accc; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: white; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #e5f8ff; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: white; + background: #4796b3; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: white; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #4796b3; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #75b7cd; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #e2ecf1; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #e5f8ff; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: white; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #e5f8ff; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: white; + background: #6ebad4; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: white; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #6ebad4; + background-color: #6ebad4; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #e2ecf1; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #096484; } + +.wp-pointer .wp-pointer-content h3:before { + color: #096484; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #096484; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #096484; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #096484; } + +.attachment.details .check { + background-color: #096484; + box-shadow: 0 0 0 1px white, 0 0 0 2px #096484; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #096484; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #096484; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #096484; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #e1a948; + border-color: #d39323; + -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #e1a948; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #e5f8ff; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #096484; } + +.star-rating .star { + color: #096484; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #4796b3; } diff --git a/src/wp-admin/css/colors/blue/colors.min.css b/src/wp-admin/css/colors/blue/colors.min.css new file mode 100644 index 0000000..4f2bffe --- /dev/null +++ b/src/wp-admin/css/colors/blue/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-left:0;border-right:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-right:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-right-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-left:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-left:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-left:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-left:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-left:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-left:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-right-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f1f1f1}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#096484}input[type=radio]:checked:before{background:#096484}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#e1a948;border-color:#d39323;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#db9825;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#db9825;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#d1cdc7!important;background:#db9825!important;border-color:#bd831f!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#52accc}.wp-core-ui .wp-ui-text-primary{color:#52accc}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#096484}.wp-core-ui .wp-ui-text-highlight{color:#096484}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#e1a948}.wp-core-ui .wp-ui-text-notification{color:#e1a948}.wp-core-ui .wp-ui-text-icon{color:#e5f8ff}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background-color:#52accc}.view-switch a.current:before{color:#52accc}.view-switch a:hover:before{color:#e1a948}.post-com-count:hover:after{border-top-color:#52accc}.post-com-count:hover span{color:#fff;background-color:#52accc}strong .post-com-count:after{border-top-color:#e1a948}strong .post-com-count span{background-color:#e1a948}#adminmenuback,#adminmenuwrap,#adminmenu{background:#52accc}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#e5f8ff}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#096484}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f1f1f1}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#4796b3}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#4796b3}#adminmenu .wp-submenu .wp-submenu-head{color:#e2ecf1}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#e2ecf1}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#fff}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#fff}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#fff}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#096484}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#e1a948}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#fff;background:#4796b3}#collapse-menu{color:#e5f8ff}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#e5f8ff}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#52accc}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#e5f8ff}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#fff;background:#4796b3}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#fff}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#4796b3}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#75b7cd}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#e2ecf1}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#e5f8ff}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#fff}#wpadminbar #adminbarsearch:before{color:#e5f8ff}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#6ebad4}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6ebad4;background-color:#6ebad4}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info .username{color:#e2ecf1}.wp-pointer .wp-pointer-content h3{background-color:#096484}.wp-pointer .wp-pointer-content h3:before{color:#096484}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#096484}.media-item .bar,.media-progress-bar div{background-color:#096484}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #096484}.attachment.details .check{background-color:#096484;box-shadow:0 0 0 1px white,0 0 0 2px #096484}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#096484}.theme-browser .theme.add-new-theme:hover span:after{color:#096484}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#096484}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#e1a948;border-color:#d39323;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#e1a948}div#wp-responsive-toggle a:before{color:#e5f8ff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#096484}.star-rating .star{color:#096484}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#4796b3} \ No newline at end of file diff --git a/src/wp-admin/css/colors/blue/colors.scss b/src/wp-admin/css/colors/blue/colors.scss new file mode 100644 index 0000000..aefb7b9 --- /dev/null +++ b/src/wp-admin/css/colors/blue/colors.scss @@ -0,0 +1,12 @@ +$base-color: #52accc; +$icon-color: #e5f8ff; +$highlight-color: #096484; +$notification-color: #e1a948; +$button-color: #e1a948; + +$menu-submenu-text: #e2ecf1; +$menu-submenu-focus-text: #fff; +$menu-submenu-background: #4796b3; + +@import "../../colors.css"; +@import "../_admin.scss"; diff --git a/src/wp-admin/css/colors/coffee/colors-rtl.css b/src/wp-admin/css/colors/coffee/colors-rtl.css new file mode 100644 index 0000000..7b9d1e0 --- /dev/null +++ b/src/wp-admin/css/colors/coffee/colors-rtl.css @@ -0,0 +1,304 @@ +@import url("../../colors-rtl.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #59524c; } + +input[type=radio]:checked:before { + background: #59524c; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #c7a589; + border-color: #b78a66; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #ba906d; + border-color: #ae7d55; + color: white; + -webkit-box-shadow: inset 0 1px 0 #d7bfac, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #d7bfac, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #ba906d; + border-color: #ae7d55; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #d1cbc7 !important; + background: #ba906d !important; + border-color: #ae7d55 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: white; + background-color: #59524c; } +.wp-core-ui .wp-ui-text-primary { + color: #59524c; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #c7a589; } +.wp-core-ui .wp-ui-text-highlight { + color: #c7a589; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #9ea476; } +.wp-core-ui .wp-ui-text-notification { + color: #9ea476; } +.wp-core-ui .wp-ui-text-icon { + color: #f3f2f1; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: white; + background-color: #59524c; } + +.view-switch a.current:before { + color: #59524c; } + +.view-switch a:hover:before { + color: #9ea476; } + +.post-com-count:hover:after { + border-top-color: #59524c; } + +.post-com-count:hover span { + color: white; + background-color: #59524c; } + +strong .post-com-count:after { + border-top-color: #9ea476; } + +strong .post-com-count span { + background-color: #9ea476; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #59524c; } + +#adminmenu a { + color: white; } + +#adminmenu div.wp-menu-image:before { + color: #f3f2f1; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #c7a589; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: white; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #46403c; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #46403c; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #cdcbc9; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #cdcbc9; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #c7a589; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: white; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #c7a589; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #c7a589; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: white; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #9ea476; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: white; + background: #46403c; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f3f2f1; } + +#collapse-menu:hover { + color: white; } + +#collapse-button div:after { + color: #f3f2f1; } + +#collapse-menu:hover #collapse-button div:after { + color: white; } + +/* Admin Bar */ +#wpadminbar { + color: white; + background: #59524c; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: white; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f3f2f1; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #c7a589; + background: #46403c; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #c7a589; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #46403c; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #656463; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #cdcbc9; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f3f2f1; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #c7a589; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #c7a589; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f3f2f1; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: white; + background: #6c645c; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: white; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #6c645c; + background-color: #6c645c; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #c7a589; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #cdcbc9; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #c7a589; } + +.wp-pointer .wp-pointer-content h3:before { + color: #c7a589; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #c7a589; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #c7a589; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #c7a589; } + +.attachment.details .check { + background-color: #c7a589; + box-shadow: 0 0 0 1px white, 0 0 0 2px #c7a589; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #c7a589; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #c7a589; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #c7a589; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #c7a589; + border-color: #b78a66; + -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #c7a589; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f3f2f1; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #c7a589; } + +.star-rating .star { + color: #c7a589; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #46403c; } diff --git a/src/wp-admin/css/colors/coffee/colors-rtl.min.css b/src/wp-admin/css/colors/coffee/colors-rtl.min.css new file mode 100644 index 0000000..6ff6e78 --- /dev/null +++ b/src/wp-admin/css/colors/coffee/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-right:0;border-left:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-left:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-left-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-right:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-right:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-right:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-right:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-right:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-right:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-left-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f1f1f1}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#59524c}input[type=radio]:checked:before{background:#59524c}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#c7a589;border-color:#b78a66;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#ba906d;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#ba906d;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#d1cbc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#59524c}.wp-core-ui .wp-ui-text-primary{color:#59524c}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#c7a589}.wp-core-ui .wp-ui-text-highlight{color:#c7a589}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#9ea476}.wp-core-ui .wp-ui-text-notification{color:#9ea476}.wp-core-ui .wp-ui-text-icon{color:#f3f2f1}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background-color:#59524c}.view-switch a.current:before{color:#59524c}.view-switch a:hover:before{color:#9ea476}.post-com-count:hover:after{border-top-color:#59524c}.post-com-count:hover span{color:#fff;background-color:#59524c}strong .post-com-count:after{border-top-color:#9ea476}strong .post-com-count span{background-color:#9ea476}#adminmenuback,#adminmenuwrap,#adminmenu{background:#59524c}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f3f2f1}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#c7a589}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f1f1f1}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#46403c}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#46403c}#adminmenu .wp-submenu .wp-submenu-head{color:#cdcbc9}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#cdcbc9}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#c7a589}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#fff}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#c7a589}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#c7a589}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#9ea476}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#fff;background:#46403c}#collapse-menu{color:#f3f2f1}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f3f2f1}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#59524c}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#f3f2f1}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#c7a589;background:#46403c}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#c7a589}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#46403c}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#656463}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#cdcbc9}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#f3f2f1}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#c7a589}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#c7a589}#wpadminbar #adminbarsearch:before{color:#f3f2f1}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#6c645c}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6c645c;background-color:#6c645c}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#c7a589}#wpadminbar #wp-admin-bar-user-info .username{color:#cdcbc9}.wp-pointer .wp-pointer-content h3{background-color:#c7a589}.wp-pointer .wp-pointer-content h3:before{color:#c7a589}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#c7a589}.media-item .bar,.media-progress-bar div{background-color:#c7a589}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #c7a589}.attachment.details .check{background-color:#c7a589;box-shadow:0 0 0 1px white,0 0 0 2px #c7a589}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#c7a589}.theme-browser .theme.add-new-theme:hover span:after{color:#c7a589}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#c7a589}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#c7a589;border-color:#b78a66;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#c7a589}div#wp-responsive-toggle a:before{color:#f3f2f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#c7a589}.star-rating .star{color:#c7a589}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#46403c} \ No newline at end of file diff --git a/src/wp-admin/css/colors/coffee/colors.css b/src/wp-admin/css/colors/coffee/colors.css new file mode 100644 index 0000000..0fe3491 --- /dev/null +++ b/src/wp-admin/css/colors/coffee/colors.css @@ -0,0 +1,304 @@ +@import url("../../colors.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #59524c; } + +input[type=radio]:checked:before { + background: #59524c; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #c7a589; + border-color: #b78a66; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #ba906d; + border-color: #ae7d55; + color: white; + -webkit-box-shadow: inset 0 1px 0 #d7bfac, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #d7bfac, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #ba906d; + border-color: #ae7d55; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #d1cbc7 !important; + background: #ba906d !important; + border-color: #ae7d55 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: white; + background-color: #59524c; } +.wp-core-ui .wp-ui-text-primary { + color: #59524c; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #c7a589; } +.wp-core-ui .wp-ui-text-highlight { + color: #c7a589; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #9ea476; } +.wp-core-ui .wp-ui-text-notification { + color: #9ea476; } +.wp-core-ui .wp-ui-text-icon { + color: #f3f2f1; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: white; + background-color: #59524c; } + +.view-switch a.current:before { + color: #59524c; } + +.view-switch a:hover:before { + color: #9ea476; } + +.post-com-count:hover:after { + border-top-color: #59524c; } + +.post-com-count:hover span { + color: white; + background-color: #59524c; } + +strong .post-com-count:after { + border-top-color: #9ea476; } + +strong .post-com-count span { + background-color: #9ea476; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #59524c; } + +#adminmenu a { + color: white; } + +#adminmenu div.wp-menu-image:before { + color: #f3f2f1; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #c7a589; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: white; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #46403c; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #46403c; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #cdcbc9; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #cdcbc9; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #c7a589; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: white; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #c7a589; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #c7a589; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: white; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #9ea476; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: white; + background: #46403c; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f3f2f1; } + +#collapse-menu:hover { + color: white; } + +#collapse-button div:after { + color: #f3f2f1; } + +#collapse-menu:hover #collapse-button div:after { + color: white; } + +/* Admin Bar */ +#wpadminbar { + color: white; + background: #59524c; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: white; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f3f2f1; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #c7a589; + background: #46403c; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #c7a589; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #46403c; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #656463; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #cdcbc9; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f3f2f1; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #c7a589; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #c7a589; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f3f2f1; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: white; + background: #6c645c; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: white; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #6c645c; + background-color: #6c645c; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #c7a589; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #cdcbc9; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #c7a589; } + +.wp-pointer .wp-pointer-content h3:before { + color: #c7a589; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #c7a589; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #c7a589; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #c7a589; } + +.attachment.details .check { + background-color: #c7a589; + box-shadow: 0 0 0 1px white, 0 0 0 2px #c7a589; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #c7a589; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #c7a589; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #c7a589; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #c7a589; + border-color: #b78a66; + -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #c7a589; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f3f2f1; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #c7a589; } + +.star-rating .star { + color: #c7a589; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #46403c; } diff --git a/src/wp-admin/css/colors/coffee/colors.min.css b/src/wp-admin/css/colors/coffee/colors.min.css new file mode 100644 index 0000000..0a60ed6 --- /dev/null +++ b/src/wp-admin/css/colors/coffee/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-left:0;border-right:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-right:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-right-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-left:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-left:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-left:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-left:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-left:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-left:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-right-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f1f1f1}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#59524c}input[type=radio]:checked:before{background:#59524c}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#c7a589;border-color:#b78a66;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#ba906d;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#ba906d;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#d1cbc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#59524c}.wp-core-ui .wp-ui-text-primary{color:#59524c}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#c7a589}.wp-core-ui .wp-ui-text-highlight{color:#c7a589}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#9ea476}.wp-core-ui .wp-ui-text-notification{color:#9ea476}.wp-core-ui .wp-ui-text-icon{color:#f3f2f1}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background-color:#59524c}.view-switch a.current:before{color:#59524c}.view-switch a:hover:before{color:#9ea476}.post-com-count:hover:after{border-top-color:#59524c}.post-com-count:hover span{color:#fff;background-color:#59524c}strong .post-com-count:after{border-top-color:#9ea476}strong .post-com-count span{background-color:#9ea476}#adminmenuback,#adminmenuwrap,#adminmenu{background:#59524c}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f3f2f1}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#c7a589}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f1f1f1}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#46403c}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#46403c}#adminmenu .wp-submenu .wp-submenu-head{color:#cdcbc9}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#cdcbc9}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#c7a589}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#fff}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#c7a589}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#c7a589}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#9ea476}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#fff;background:#46403c}#collapse-menu{color:#f3f2f1}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f3f2f1}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#59524c}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#f3f2f1}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#c7a589;background:#46403c}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#c7a589}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#46403c}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#656463}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#cdcbc9}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#f3f2f1}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#c7a589}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#c7a589}#wpadminbar #adminbarsearch:before{color:#f3f2f1}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#6c645c}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6c645c;background-color:#6c645c}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#c7a589}#wpadminbar #wp-admin-bar-user-info .username{color:#cdcbc9}.wp-pointer .wp-pointer-content h3{background-color:#c7a589}.wp-pointer .wp-pointer-content h3:before{color:#c7a589}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#c7a589}.media-item .bar,.media-progress-bar div{background-color:#c7a589}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #c7a589}.attachment.details .check{background-color:#c7a589;box-shadow:0 0 0 1px white,0 0 0 2px #c7a589}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#c7a589}.theme-browser .theme.add-new-theme:hover span:after{color:#c7a589}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#c7a589}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#c7a589;border-color:#b78a66;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#c7a589}div#wp-responsive-toggle a:before{color:#f3f2f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#c7a589}.star-rating .star{color:#c7a589}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#46403c} \ No newline at end of file diff --git a/src/wp-admin/css/colors/coffee/colors.scss b/src/wp-admin/css/colors/coffee/colors.scss new file mode 100644 index 0000000..3cd5013 --- /dev/null +++ b/src/wp-admin/css/colors/coffee/colors.scss @@ -0,0 +1,8 @@ +$base-color: #59524c; +$highlight-color: #c7a589; +$notification-color: #9ea476; + +$form-checked: $base-color; + +@import "../../colors.css"; +@import "../_admin.scss"; diff --git a/src/wp-admin/css/colors/ectoplasm/colors-rtl.css b/src/wp-admin/css/colors/ectoplasm/colors-rtl.css new file mode 100644 index 0000000..99d5579 --- /dev/null +++ b/src/wp-admin/css/colors/ectoplasm/colors-rtl.css @@ -0,0 +1,304 @@ +@import url("../../colors-rtl.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #523f6d; } + +input[type=radio]:checked:before { + background: #523f6d; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #a3b745; + border-color: #839237; + color: white; + -webkit-box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #89993a; + border-color: #727f30; + color: white; + -webkit-box-shadow: inset 0 1px 0 #b7c669, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #b7c669, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #89993a; + border-color: #727f30; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #cfd1c7 !important; + background: #89993a !important; + border-color: #727f30 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: white; + background-color: #523f6d; } +.wp-core-ui .wp-ui-text-primary { + color: #523f6d; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #a3b745; } +.wp-core-ui .wp-ui-text-highlight { + color: #a3b745; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #d46f15; } +.wp-core-ui .wp-ui-text-notification { + color: #d46f15; } +.wp-core-ui .wp-ui-text-icon { + color: #ece6f6; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: white; + background-color: #523f6d; } + +.view-switch a.current:before { + color: #523f6d; } + +.view-switch a:hover:before { + color: #d46f15; } + +.post-com-count:hover:after { + border-top-color: #523f6d; } + +.post-com-count:hover span { + color: white; + background-color: #523f6d; } + +strong .post-com-count:after { + border-top-color: #d46f15; } + +strong .post-com-count span { + background-color: #d46f15; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #523f6d; } + +#adminmenu a { + color: white; } + +#adminmenu div.wp-menu-image:before { + color: #ece6f6; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #a3b745; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: white; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #413256; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #413256; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #cbc5d3; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #cbc5d3; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #a3b745; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: white; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #a3b745; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #a3b745; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: white; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #d46f15; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: white; + background: #413256; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #ece6f6; } + +#collapse-menu:hover { + color: white; } + +#collapse-button div:after { + color: #ece6f6; } + +#collapse-menu:hover #collapse-button div:after { + color: white; } + +/* Admin Bar */ +#wpadminbar { + color: white; + background: #523f6d; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: white; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #ece6f6; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #a3b745; + background: #413256; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #a3b745; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #413256; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #63537d; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #cbc5d3; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #ece6f6; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #a3b745; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #a3b745; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #ece6f6; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: white; + background: #624c84; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: white; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #624c84; + background-color: #624c84; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #a3b745; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #cbc5d3; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #a3b745; } + +.wp-pointer .wp-pointer-content h3:before { + color: #a3b745; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #a3b745; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #a3b745; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #a3b745; } + +.attachment.details .check { + background-color: #a3b745; + box-shadow: 0 0 0 1px white, 0 0 0 2px #a3b745; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #a3b745; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #a3b745; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #a3b745; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #a3b745; + border-color: #839237; + -webkit-box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #a3b745; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #ece6f6; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #a3b745; } + +.star-rating .star { + color: #a3b745; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #413256; } diff --git a/src/wp-admin/css/colors/ectoplasm/colors-rtl.min.css b/src/wp-admin/css/colors/ectoplasm/colors-rtl.min.css new file mode 100644 index 0000000..55a47f3 --- /dev/null +++ b/src/wp-admin/css/colors/ectoplasm/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-right:0;border-left:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-left:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-left-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-right:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-right:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-right:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-right:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-right:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-right:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-left-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f1f1f1}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#523f6d}input[type=radio]:checked:before{background:#523f6d}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#a3b745;border-color:#839237;color:#fff;-webkit-box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#89993a;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#89993a;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#523f6d}.wp-core-ui .wp-ui-text-primary{color:#523f6d}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#a3b745}.wp-core-ui .wp-ui-text-highlight{color:#a3b745}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#d46f15}.wp-core-ui .wp-ui-text-notification{color:#d46f15}.wp-core-ui .wp-ui-text-icon{color:#ece6f6}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background-color:#523f6d}.view-switch a.current:before{color:#523f6d}.view-switch a:hover:before{color:#d46f15}.post-com-count:hover:after{border-top-color:#523f6d}.post-com-count:hover span{color:#fff;background-color:#523f6d}strong .post-com-count:after{border-top-color:#d46f15}strong .post-com-count span{background-color:#d46f15}#adminmenuback,#adminmenuwrap,#adminmenu{background:#523f6d}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#ece6f6}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#a3b745}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f1f1f1}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#413256}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#413256}#adminmenu .wp-submenu .wp-submenu-head{color:#cbc5d3}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#cbc5d3}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#a3b745}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#fff}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#a3b745}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#a3b745}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#d46f15}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#fff;background:#413256}#collapse-menu{color:#ece6f6}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#ece6f6}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#523f6d}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#ece6f6}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#a3b745;background:#413256}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#a3b745}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#413256}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#63537d}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#cbc5d3}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#ece6f6}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#a3b745}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#a3b745}#wpadminbar #adminbarsearch:before{color:#ece6f6}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#624c84}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#624c84;background-color:#624c84}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#a3b745}#wpadminbar #wp-admin-bar-user-info .username{color:#cbc5d3}.wp-pointer .wp-pointer-content h3{background-color:#a3b745}.wp-pointer .wp-pointer-content h3:before{color:#a3b745}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#a3b745}.media-item .bar,.media-progress-bar div{background-color:#a3b745}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #a3b745}.attachment.details .check{background-color:#a3b745;box-shadow:0 0 0 1px white,0 0 0 2px #a3b745}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#a3b745}.theme-browser .theme.add-new-theme:hover span:after{color:#a3b745}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#a3b745}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#a3b745;border-color:#839237;-webkit-box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#a3b745}div#wp-responsive-toggle a:before{color:#ece6f6}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#a3b745}.star-rating .star{color:#a3b745}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#413256} \ No newline at end of file diff --git a/src/wp-admin/css/colors/ectoplasm/colors.css b/src/wp-admin/css/colors/ectoplasm/colors.css new file mode 100644 index 0000000..6081faa --- /dev/null +++ b/src/wp-admin/css/colors/ectoplasm/colors.css @@ -0,0 +1,304 @@ +@import url("../../colors.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #523f6d; } + +input[type=radio]:checked:before { + background: #523f6d; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #a3b745; + border-color: #839237; + color: white; + -webkit-box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #89993a; + border-color: #727f30; + color: white; + -webkit-box-shadow: inset 0 1px 0 #b7c669, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #b7c669, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #89993a; + border-color: #727f30; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #cfd1c7 !important; + background: #89993a !important; + border-color: #727f30 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: white; + background-color: #523f6d; } +.wp-core-ui .wp-ui-text-primary { + color: #523f6d; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #a3b745; } +.wp-core-ui .wp-ui-text-highlight { + color: #a3b745; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #d46f15; } +.wp-core-ui .wp-ui-text-notification { + color: #d46f15; } +.wp-core-ui .wp-ui-text-icon { + color: #ece6f6; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: white; + background-color: #523f6d; } + +.view-switch a.current:before { + color: #523f6d; } + +.view-switch a:hover:before { + color: #d46f15; } + +.post-com-count:hover:after { + border-top-color: #523f6d; } + +.post-com-count:hover span { + color: white; + background-color: #523f6d; } + +strong .post-com-count:after { + border-top-color: #d46f15; } + +strong .post-com-count span { + background-color: #d46f15; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #523f6d; } + +#adminmenu a { + color: white; } + +#adminmenu div.wp-menu-image:before { + color: #ece6f6; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #a3b745; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: white; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #413256; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #413256; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #cbc5d3; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #cbc5d3; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #a3b745; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: white; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #a3b745; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #a3b745; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: white; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #d46f15; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: white; + background: #413256; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #ece6f6; } + +#collapse-menu:hover { + color: white; } + +#collapse-button div:after { + color: #ece6f6; } + +#collapse-menu:hover #collapse-button div:after { + color: white; } + +/* Admin Bar */ +#wpadminbar { + color: white; + background: #523f6d; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: white; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #ece6f6; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #a3b745; + background: #413256; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #a3b745; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #413256; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #63537d; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #cbc5d3; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #ece6f6; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #a3b745; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #a3b745; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #ece6f6; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: white; + background: #624c84; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: white; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #624c84; + background-color: #624c84; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #a3b745; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #cbc5d3; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #a3b745; } + +.wp-pointer .wp-pointer-content h3:before { + color: #a3b745; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #a3b745; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #a3b745; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #a3b745; } + +.attachment.details .check { + background-color: #a3b745; + box-shadow: 0 0 0 1px white, 0 0 0 2px #a3b745; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #a3b745; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #a3b745; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #a3b745; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #a3b745; + border-color: #839237; + -webkit-box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #a3b745; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #ece6f6; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #a3b745; } + +.star-rating .star { + color: #a3b745; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #413256; } diff --git a/src/wp-admin/css/colors/ectoplasm/colors.min.css b/src/wp-admin/css/colors/ectoplasm/colors.min.css new file mode 100644 index 0000000..09a1da0 --- /dev/null +++ b/src/wp-admin/css/colors/ectoplasm/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-left:0;border-right:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-right:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-right-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-left:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-left:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-left:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-left:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-left:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-left:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-right-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f1f1f1}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#523f6d}input[type=radio]:checked:before{background:#523f6d}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#a3b745;border-color:#839237;color:#fff;-webkit-box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#89993a;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#89993a;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#523f6d}.wp-core-ui .wp-ui-text-primary{color:#523f6d}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#a3b745}.wp-core-ui .wp-ui-text-highlight{color:#a3b745}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#d46f15}.wp-core-ui .wp-ui-text-notification{color:#d46f15}.wp-core-ui .wp-ui-text-icon{color:#ece6f6}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background-color:#523f6d}.view-switch a.current:before{color:#523f6d}.view-switch a:hover:before{color:#d46f15}.post-com-count:hover:after{border-top-color:#523f6d}.post-com-count:hover span{color:#fff;background-color:#523f6d}strong .post-com-count:after{border-top-color:#d46f15}strong .post-com-count span{background-color:#d46f15}#adminmenuback,#adminmenuwrap,#adminmenu{background:#523f6d}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#ece6f6}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#a3b745}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f1f1f1}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#413256}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#413256}#adminmenu .wp-submenu .wp-submenu-head{color:#cbc5d3}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#cbc5d3}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#a3b745}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#fff}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#a3b745}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#a3b745}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#d46f15}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#fff;background:#413256}#collapse-menu{color:#ece6f6}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#ece6f6}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#523f6d}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#ece6f6}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#a3b745;background:#413256}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#a3b745}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#413256}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#63537d}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#cbc5d3}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#ece6f6}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#a3b745}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#a3b745}#wpadminbar #adminbarsearch:before{color:#ece6f6}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#624c84}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#624c84;background-color:#624c84}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#a3b745}#wpadminbar #wp-admin-bar-user-info .username{color:#cbc5d3}.wp-pointer .wp-pointer-content h3{background-color:#a3b745}.wp-pointer .wp-pointer-content h3:before{color:#a3b745}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#a3b745}.media-item .bar,.media-progress-bar div{background-color:#a3b745}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #a3b745}.attachment.details .check{background-color:#a3b745;box-shadow:0 0 0 1px white,0 0 0 2px #a3b745}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#a3b745}.theme-browser .theme.add-new-theme:hover span:after{color:#a3b745}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#a3b745}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#a3b745;border-color:#839237;-webkit-box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#a3b745}div#wp-responsive-toggle a:before{color:#ece6f6}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#a3b745}.star-rating .star{color:#a3b745}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#413256} \ No newline at end of file diff --git a/src/wp-admin/css/colors/ectoplasm/colors.scss b/src/wp-admin/css/colors/ectoplasm/colors.scss new file mode 100644 index 0000000..b706d7e --- /dev/null +++ b/src/wp-admin/css/colors/ectoplasm/colors.scss @@ -0,0 +1,9 @@ +$base-color: #523f6d; +$icon-color: #ece6f6; +$highlight-color: #a3b745; +$notification-color: #d46f15; + +$form-checked: $base-color; + +@import "../../colors.css"; +@import "../_admin.scss"; diff --git a/src/wp-admin/css/colors/light/colors-rtl.css b/src/wp-admin/css/colors/light/colors-rtl.css new file mode 100644 index 0000000..9109eb0 --- /dev/null +++ b/src/wp-admin/css/colors/light/colors-rtl.css @@ -0,0 +1,308 @@ +@import url("../../colors-rtl.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: whitesmoke; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #04a4cc; } + +input[type=radio]:checked:before { + background: #04a4cc; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #04a4cc; + border-color: #037c9a; + color: white; + -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #0384a4; + border-color: #036881; + color: white; + -webkit-box-shadow: inset 0 1px 0 #09cafa, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #09cafa, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #0384a4; + border-color: #036881; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #c7cfd1 !important; + background: #0384a4 !important; + border-color: #036881 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #333333; + background-color: #e5e5e5; } +.wp-core-ui .wp-ui-text-primary { + color: #e5e5e5; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #888888; } +.wp-core-ui .wp-ui-text-highlight { + color: #888888; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #d64e07; } +.wp-core-ui .wp-ui-text-notification { + color: #d64e07; } +.wp-core-ui .wp-ui-text-icon { + color: #999999; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #333333; + background-color: #e5e5e5; } + +.view-switch a.current:before { + color: #e5e5e5; } + +.view-switch a:hover:before { + color: #d64e07; } + +.post-com-count:hover:after { + border-top-color: #e5e5e5; } + +.post-com-count:hover span { + color: #333333; + background-color: #e5e5e5; } + +strong .post-com-count:after { + border-top-color: #d64e07; } + +strong .post-com-count span { + background-color: #d64e07; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #e5e5e5; } + +#adminmenu a { + color: #333333; } + +#adminmenu div.wp-menu-image:before { + color: #999999; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #888888; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #cccccc; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: whitesmoke; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: white; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: white; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #686868; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #686868; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #04a4cc; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #333333; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #04a4cc; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: whitesmoke; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #888888; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #cccccc; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #d64e07; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #333333; + background: white; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #777777; } + +#collapse-menu:hover { + color: #333333; } + +#collapse-button div:after { + color: #999999; } + +#collapse-menu:hover #collapse-button div:after { + color: #555555; } + +/* Admin Bar */ +#wpadminbar { + color: #333333; + background: #e5e5e5; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #333333; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #999999; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #04a4cc; + background: white; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #04a4cc; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #cccccc; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: white; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #f7f7f7; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #686868; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #999999; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #04a4cc; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #04a4cc; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #999999; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #333333; + background: #f7f7f7; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #333333; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #333333; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #333333; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #333333; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #f7f7f7; + background-color: #f7f7f7; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #333333; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #04a4cc; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #686868; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #04a4cc; } + +.wp-pointer .wp-pointer-content h3:before { + color: #04a4cc; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #04a4cc; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #04a4cc; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #04a4cc; } + +.attachment.details .check { + background-color: #04a4cc; + box-shadow: 0 0 0 1px white, 0 0 0 2px #04a4cc; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #04a4cc; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #04a4cc; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #04a4cc; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #04a4cc; + border-color: #037c9a; + -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: whitesmoke; + border-bottom-color: whitesmoke; } + +#plugin-information .action-button { + background: #04a4cc; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #999999; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #888888; } + +.star-rating .star { + color: #04a4cc; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: white; } + +/* temporary fix for admin-bar hover color */ +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar > #wp-toolbar > #wp-admin-bar-root-default li:hover span.ab-label, #wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary li.hover span.ab-label, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #333333; } diff --git a/src/wp-admin/css/colors/light/colors-rtl.min.css b/src/wp-admin/css/colors/light/colors-rtl.min.css new file mode 100644 index 0000000..f86731c --- /dev/null +++ b/src/wp-admin/css/colors/light/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-right:0;border-left:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-left:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-left-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-right:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-right:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-right:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-right:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-right:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-right:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-left-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f5f5f5}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#04a4cc}input[type=radio]:checked:before{background:#04a4cc}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#04a4cc;border-color:#037c9a;color:#fff;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#0384a4;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#0384a4;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#333;background-color:#e5e5e5}.wp-core-ui .wp-ui-text-primary{color:#e5e5e5}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#888}.wp-core-ui .wp-ui-text-highlight{color:#888}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#d64e07}.wp-core-ui .wp-ui-text-notification{color:#d64e07}.wp-core-ui .wp-ui-text-icon{color:#999}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#333;background-color:#e5e5e5}.view-switch a.current:before{color:#e5e5e5}.view-switch a:hover:before{color:#d64e07}.post-com-count:hover:after{border-top-color:#e5e5e5}.post-com-count:hover span{color:#333;background-color:#e5e5e5}strong .post-com-count:after{border-top-color:#d64e07}strong .post-com-count span{background-color:#d64e07}#adminmenuback,#adminmenuwrap,#adminmenu{background:#e5e5e5}#adminmenu a{color:#333}#adminmenu div.wp-menu-image:before{color:#999}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#888}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#ccc}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f5f5f5}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#fff}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#fff}#adminmenu .wp-submenu .wp-submenu-head{color:#686868}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#686868}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#04a4cc}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#333}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#04a4cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f5f5f5}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#888}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#ccc}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#d64e07}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#333;background:#fff}#collapse-menu{color:#777}#collapse-menu:hover{color:#333}#collapse-button div:after{color:#999}#collapse-menu:hover #collapse-button div:after{color:#555}#wpadminbar{color:#333;background:#e5e5e5}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#333}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#999}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#04a4cc;background:#fff}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#04a4cc}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#ccc}#wpadminbar .menupop .ab-sub-wrapper{background:#fff}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#f7f7f7}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#686868}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#999}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#04a4cc}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#04a4cc}#wpadminbar #adminbarsearch:before{color:#999}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#333;background:#f7f7f7}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#333;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#f7f7f7;background-color:#f7f7f7}#wpadminbar #wp-admin-bar-user-info .display-name{color:#333}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#04a4cc}#wpadminbar #wp-admin-bar-user-info .username{color:#686868}.wp-pointer .wp-pointer-content h3{background-color:#04a4cc}.wp-pointer .wp-pointer-content h3:before{color:#04a4cc}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#04a4cc}.media-item .bar,.media-progress-bar div{background-color:#04a4cc}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #04a4cc}.attachment.details .check{background-color:#04a4cc;box-shadow:0 0 0 1px white,0 0 0 2px #04a4cc}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#04a4cc}.theme-browser .theme.add-new-theme:hover span:after{color:#04a4cc}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#04a4cc}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#04a4cc;border-color:#037c9a;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f5f5f5;border-bottom-color:#f5f5f5}#plugin-information .action-button{background:#04a4cc}div#wp-responsive-toggle a:before{color:#999}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#888}.star-rating .star{color:#04a4cc}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#fff}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default li:hover span.ab-label,#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary li.hover span.ab-label,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#333} \ No newline at end of file diff --git a/src/wp-admin/css/colors/light/colors.css b/src/wp-admin/css/colors/light/colors.css new file mode 100644 index 0000000..3eea842 --- /dev/null +++ b/src/wp-admin/css/colors/light/colors.css @@ -0,0 +1,308 @@ +@import url("../../colors.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: whitesmoke; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #04a4cc; } + +input[type=radio]:checked:before { + background: #04a4cc; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #04a4cc; + border-color: #037c9a; + color: white; + -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #0384a4; + border-color: #036881; + color: white; + -webkit-box-shadow: inset 0 1px 0 #09cafa, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #09cafa, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #0384a4; + border-color: #036881; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #c7cfd1 !important; + background: #0384a4 !important; + border-color: #036881 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #333333; + background-color: #e5e5e5; } +.wp-core-ui .wp-ui-text-primary { + color: #e5e5e5; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #888888; } +.wp-core-ui .wp-ui-text-highlight { + color: #888888; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #d64e07; } +.wp-core-ui .wp-ui-text-notification { + color: #d64e07; } +.wp-core-ui .wp-ui-text-icon { + color: #999999; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #333333; + background-color: #e5e5e5; } + +.view-switch a.current:before { + color: #e5e5e5; } + +.view-switch a:hover:before { + color: #d64e07; } + +.post-com-count:hover:after { + border-top-color: #e5e5e5; } + +.post-com-count:hover span { + color: #333333; + background-color: #e5e5e5; } + +strong .post-com-count:after { + border-top-color: #d64e07; } + +strong .post-com-count span { + background-color: #d64e07; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #e5e5e5; } + +#adminmenu a { + color: #333333; } + +#adminmenu div.wp-menu-image:before { + color: #999999; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #888888; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #cccccc; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: whitesmoke; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: white; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: white; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #686868; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #686868; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #04a4cc; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #333333; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #04a4cc; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: whitesmoke; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #888888; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #cccccc; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #d64e07; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #333333; + background: white; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #777777; } + +#collapse-menu:hover { + color: #333333; } + +#collapse-button div:after { + color: #999999; } + +#collapse-menu:hover #collapse-button div:after { + color: #555555; } + +/* Admin Bar */ +#wpadminbar { + color: #333333; + background: #e5e5e5; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #333333; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #999999; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #04a4cc; + background: white; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #04a4cc; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #cccccc; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: white; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #f7f7f7; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #686868; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #999999; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #04a4cc; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #04a4cc; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #999999; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #333333; + background: #f7f7f7; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #333333; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #333333; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #333333; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #333333; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #f7f7f7; + background-color: #f7f7f7; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #333333; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #04a4cc; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #686868; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #04a4cc; } + +.wp-pointer .wp-pointer-content h3:before { + color: #04a4cc; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #04a4cc; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #04a4cc; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #04a4cc; } + +.attachment.details .check { + background-color: #04a4cc; + box-shadow: 0 0 0 1px white, 0 0 0 2px #04a4cc; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #04a4cc; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #04a4cc; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #04a4cc; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #04a4cc; + border-color: #037c9a; + -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: whitesmoke; + border-bottom-color: whitesmoke; } + +#plugin-information .action-button { + background: #04a4cc; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #999999; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #888888; } + +.star-rating .star { + color: #04a4cc; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: white; } + +/* temporary fix for admin-bar hover color */ +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar > #wp-toolbar > #wp-admin-bar-root-default li:hover span.ab-label, #wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary li.hover span.ab-label, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #333333; } diff --git a/src/wp-admin/css/colors/light/colors.min.css b/src/wp-admin/css/colors/light/colors.min.css new file mode 100644 index 0000000..611d271 --- /dev/null +++ b/src/wp-admin/css/colors/light/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-left:0;border-right:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-right:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-right-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-left:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-left:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-left:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-left:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-left:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-left:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-right-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f5f5f5}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#04a4cc}input[type=radio]:checked:before{background:#04a4cc}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#04a4cc;border-color:#037c9a;color:#fff;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#0384a4;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#0384a4;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#333;background-color:#e5e5e5}.wp-core-ui .wp-ui-text-primary{color:#e5e5e5}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#888}.wp-core-ui .wp-ui-text-highlight{color:#888}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#d64e07}.wp-core-ui .wp-ui-text-notification{color:#d64e07}.wp-core-ui .wp-ui-text-icon{color:#999}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#333;background-color:#e5e5e5}.view-switch a.current:before{color:#e5e5e5}.view-switch a:hover:before{color:#d64e07}.post-com-count:hover:after{border-top-color:#e5e5e5}.post-com-count:hover span{color:#333;background-color:#e5e5e5}strong .post-com-count:after{border-top-color:#d64e07}strong .post-com-count span{background-color:#d64e07}#adminmenuback,#adminmenuwrap,#adminmenu{background:#e5e5e5}#adminmenu a{color:#333}#adminmenu div.wp-menu-image:before{color:#999}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#888}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#ccc}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f5f5f5}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#fff}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#fff}#adminmenu .wp-submenu .wp-submenu-head{color:#686868}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#686868}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#04a4cc}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#333}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#04a4cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f5f5f5}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#888}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#ccc}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#d64e07}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#333;background:#fff}#collapse-menu{color:#777}#collapse-menu:hover{color:#333}#collapse-button div:after{color:#999}#collapse-menu:hover #collapse-button div:after{color:#555}#wpadminbar{color:#333;background:#e5e5e5}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#333}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#999}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#04a4cc;background:#fff}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#04a4cc}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#ccc}#wpadminbar .menupop .ab-sub-wrapper{background:#fff}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#f7f7f7}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#686868}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#999}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#04a4cc}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#04a4cc}#wpadminbar #adminbarsearch:before{color:#999}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#333;background:#f7f7f7}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#333;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#f7f7f7;background-color:#f7f7f7}#wpadminbar #wp-admin-bar-user-info .display-name{color:#333}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#04a4cc}#wpadminbar #wp-admin-bar-user-info .username{color:#686868}.wp-pointer .wp-pointer-content h3{background-color:#04a4cc}.wp-pointer .wp-pointer-content h3:before{color:#04a4cc}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#04a4cc}.media-item .bar,.media-progress-bar div{background-color:#04a4cc}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #04a4cc}.attachment.details .check{background-color:#04a4cc;box-shadow:0 0 0 1px white,0 0 0 2px #04a4cc}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#04a4cc}.theme-browser .theme.add-new-theme:hover span:after{color:#04a4cc}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#04a4cc}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#04a4cc;border-color:#037c9a;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f5f5f5;border-bottom-color:#f5f5f5}#plugin-information .action-button{background:#04a4cc}div#wp-responsive-toggle a:before{color:#999}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#888}.star-rating .star{color:#04a4cc}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#fff}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default li:hover span.ab-label,#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary li.hover span.ab-label,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#333} \ No newline at end of file diff --git a/src/wp-admin/css/colors/light/colors.scss b/src/wp-admin/css/colors/light/colors.scss new file mode 100644 index 0000000..fa653f2 --- /dev/null +++ b/src/wp-admin/css/colors/light/colors.scss @@ -0,0 +1,33 @@ +$base-color: #e5e5e5; +$icon-color: #999; +$text-color: #333; +$highlight-color: #04a4cc; +$notification-color: #d64e07; + +$body-background: #f5f5f5; + +$menu-highlight-text: #fff; +$menu-highlight-icon: #ccc; +$menu-highlight-background: #888; + +$menu-bubble-text: #fff; +$menu-avatar-frame: #aaa; +$menu-submenu-background: #fff; + +$menu-collapse-text: #777; +$menu-collapse-focus-icon: #555; + +@import "../../colors.css"; +@import "../_admin.scss"; + +/* temporary fix for admin-bar hover color */ +#wpadminbar .ab-top-menu > li:hover > .ab-item, +#wpadminbar .ab-top-menu > li.hover > .ab-item, +#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default li:hover span.ab-label, +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary li.hover span.ab-label, +#wpadminbar .ab-top-menu > li > .ab-item:focus, +#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, +#wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, +#wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: $text-color; +} diff --git a/src/wp-admin/css/colors/midnight/colors-rtl.css b/src/wp-admin/css/colors/midnight/colors-rtl.css new file mode 100644 index 0000000..6f53959 --- /dev/null +++ b/src/wp-admin/css/colors/midnight/colors-rtl.css @@ -0,0 +1,304 @@ +@import url("../../colors-rtl.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #e14d43; } + +input[type=radio]:checked:before { + background: #e14d43; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #e14d43; + border-color: #d02a21; + color: white; + -webkit-box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #d92c23; + border-color: #ba251e; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e8756f, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8756f, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #d92c23; + border-color: #ba251e; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #d1c7c7 !important; + background: #d92c23 !important; + border-color: #ba251e !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: white; + background-color: #363b3f; } +.wp-core-ui .wp-ui-text-primary { + color: #363b3f; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #e14d43; } +.wp-core-ui .wp-ui-text-highlight { + color: #e14d43; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #69a8bb; } +.wp-core-ui .wp-ui-text-notification { + color: #69a8bb; } +.wp-core-ui .wp-ui-text-icon { + color: #f1f2f3; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: white; + background-color: #363b3f; } + +.view-switch a.current:before { + color: #363b3f; } + +.view-switch a:hover:before { + color: #69a8bb; } + +.post-com-count:hover:after { + border-top-color: #363b3f; } + +.post-com-count:hover span { + color: white; + background-color: #363b3f; } + +strong .post-com-count:after { + border-top-color: #69a8bb; } + +strong .post-com-count span { + background-color: #69a8bb; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #363b3f; } + +#adminmenu a { + color: white; } + +#adminmenu div.wp-menu-image:before { + color: #f1f2f3; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #e14d43; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: white; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #26292c; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #26292c; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #c2c4c5; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #c2c4c5; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #e14d43; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: white; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #e14d43; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #e14d43; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: white; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #69a8bb; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: white; + background: #26292c; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f1f2f3; } + +#collapse-menu:hover { + color: white; } + +#collapse-button div:after { + color: #f1f2f3; } + +#collapse-menu:hover #collapse-button div:after { + color: white; } + +/* Admin Bar */ +#wpadminbar { + color: white; + background: #363b3f; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: white; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f1f2f3; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #e14d43; + background: #26292c; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #e14d43; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #26292c; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #4b4c4d; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #c2c4c5; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f1f2f3; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #e14d43; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #e14d43; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f1f2f3; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: white; + background: #464d52; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: white; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #464d52; + background-color: #464d52; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #e14d43; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #c2c4c5; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #e14d43; } + +.wp-pointer .wp-pointer-content h3:before { + color: #e14d43; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #e14d43; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #e14d43; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #e14d43; } + +.attachment.details .check { + background-color: #e14d43; + box-shadow: 0 0 0 1px white, 0 0 0 2px #e14d43; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #e14d43; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #e14d43; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #e14d43; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #e14d43; + border-color: #d02a21; + -webkit-box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #e14d43; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f1f2f3; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #e14d43; } + +.star-rating .star { + color: #e14d43; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #26292c; } diff --git a/src/wp-admin/css/colors/midnight/colors-rtl.min.css b/src/wp-admin/css/colors/midnight/colors-rtl.min.css new file mode 100644 index 0000000..adae710 --- /dev/null +++ b/src/wp-admin/css/colors/midnight/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-right:0;border-left:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-left:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-left-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-right:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-right:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-right:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-right:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-right:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-right:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-left-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f1f1f1}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#e14d43}input[type=radio]:checked:before{background:#e14d43}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#e14d43;border-color:#d02a21;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#d92c23;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#d92c23;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#d1c7c7!important;background:#d92c23!important;border-color:#ba251e!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#363b3f}.wp-core-ui .wp-ui-text-primary{color:#363b3f}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#e14d43}.wp-core-ui .wp-ui-text-highlight{color:#e14d43}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#69a8bb}.wp-core-ui .wp-ui-text-notification{color:#69a8bb}.wp-core-ui .wp-ui-text-icon{color:#f1f2f3}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background-color:#363b3f}.view-switch a.current:before{color:#363b3f}.view-switch a:hover:before{color:#69a8bb}.post-com-count:hover:after{border-top-color:#363b3f}.post-com-count:hover span{color:#fff;background-color:#363b3f}strong .post-com-count:after{border-top-color:#69a8bb}strong .post-com-count span{background-color:#69a8bb}#adminmenuback,#adminmenuwrap,#adminmenu{background:#363b3f}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f2f3}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#e14d43}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f1f1f1}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#26292c}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#26292c}#adminmenu .wp-submenu .wp-submenu-head{color:#c2c4c5}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#c2c4c5}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#e14d43}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#fff}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#e14d43}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#e14d43}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#69a8bb}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#fff;background:#26292c}#collapse-menu{color:#f1f2f3}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f1f2f3}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#363b3f}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#f1f2f3}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#e14d43;background:#26292c}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#e14d43}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#26292c}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#4b4c4d}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#c2c4c5}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#f1f2f3}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#e14d43}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#e14d43}#wpadminbar #adminbarsearch:before{color:#f1f2f3}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#464d52}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#464d52;background-color:#464d52}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#e14d43}#wpadminbar #wp-admin-bar-user-info .username{color:#c2c4c5}.wp-pointer .wp-pointer-content h3{background-color:#e14d43}.wp-pointer .wp-pointer-content h3:before{color:#e14d43}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#e14d43}.media-item .bar,.media-progress-bar div{background-color:#e14d43}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #e14d43}.attachment.details .check{background-color:#e14d43;box-shadow:0 0 0 1px white,0 0 0 2px #e14d43}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#e14d43}.theme-browser .theme.add-new-theme:hover span:after{color:#e14d43}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#e14d43}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#e14d43;border-color:#d02a21;-webkit-box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#e14d43}div#wp-responsive-toggle a:before{color:#f1f2f3}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#e14d43}.star-rating .star{color:#e14d43}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#26292c} \ No newline at end of file diff --git a/src/wp-admin/css/colors/midnight/colors.css b/src/wp-admin/css/colors/midnight/colors.css new file mode 100644 index 0000000..cd7b4c3 --- /dev/null +++ b/src/wp-admin/css/colors/midnight/colors.css @@ -0,0 +1,304 @@ +@import url("../../colors.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #e14d43; } + +input[type=radio]:checked:before { + background: #e14d43; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #e14d43; + border-color: #d02a21; + color: white; + -webkit-box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #d92c23; + border-color: #ba251e; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e8756f, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8756f, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #d92c23; + border-color: #ba251e; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #d1c7c7 !important; + background: #d92c23 !important; + border-color: #ba251e !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: white; + background-color: #363b3f; } +.wp-core-ui .wp-ui-text-primary { + color: #363b3f; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #e14d43; } +.wp-core-ui .wp-ui-text-highlight { + color: #e14d43; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #69a8bb; } +.wp-core-ui .wp-ui-text-notification { + color: #69a8bb; } +.wp-core-ui .wp-ui-text-icon { + color: #f1f2f3; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: white; + background-color: #363b3f; } + +.view-switch a.current:before { + color: #363b3f; } + +.view-switch a:hover:before { + color: #69a8bb; } + +.post-com-count:hover:after { + border-top-color: #363b3f; } + +.post-com-count:hover span { + color: white; + background-color: #363b3f; } + +strong .post-com-count:after { + border-top-color: #69a8bb; } + +strong .post-com-count span { + background-color: #69a8bb; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #363b3f; } + +#adminmenu a { + color: white; } + +#adminmenu div.wp-menu-image:before { + color: #f1f2f3; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #e14d43; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: white; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #26292c; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #26292c; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #c2c4c5; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #c2c4c5; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #e14d43; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: white; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #e14d43; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #e14d43; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: white; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #69a8bb; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: white; + background: #26292c; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f1f2f3; } + +#collapse-menu:hover { + color: white; } + +#collapse-button div:after { + color: #f1f2f3; } + +#collapse-menu:hover #collapse-button div:after { + color: white; } + +/* Admin Bar */ +#wpadminbar { + color: white; + background: #363b3f; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: white; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f1f2f3; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #e14d43; + background: #26292c; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #e14d43; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #26292c; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #4b4c4d; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #c2c4c5; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f1f2f3; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #e14d43; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #e14d43; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f1f2f3; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: white; + background: #464d52; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: white; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #464d52; + background-color: #464d52; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #e14d43; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #c2c4c5; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #e14d43; } + +.wp-pointer .wp-pointer-content h3:before { + color: #e14d43; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #e14d43; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #e14d43; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #e14d43; } + +.attachment.details .check { + background-color: #e14d43; + box-shadow: 0 0 0 1px white, 0 0 0 2px #e14d43; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #e14d43; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #e14d43; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #e14d43; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #e14d43; + border-color: #d02a21; + -webkit-box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #e14d43; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f1f2f3; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #e14d43; } + +.star-rating .star { + color: #e14d43; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #26292c; } diff --git a/src/wp-admin/css/colors/midnight/colors.min.css b/src/wp-admin/css/colors/midnight/colors.min.css new file mode 100644 index 0000000..3b84ac1 --- /dev/null +++ b/src/wp-admin/css/colors/midnight/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-left:0;border-right:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-right:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-right-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-left:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-left:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-left:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-left:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-left:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-left:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-right-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f1f1f1}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#e14d43}input[type=radio]:checked:before{background:#e14d43}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#e14d43;border-color:#d02a21;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#d92c23;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#d92c23;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#d1c7c7!important;background:#d92c23!important;border-color:#ba251e!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#363b3f}.wp-core-ui .wp-ui-text-primary{color:#363b3f}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#e14d43}.wp-core-ui .wp-ui-text-highlight{color:#e14d43}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#69a8bb}.wp-core-ui .wp-ui-text-notification{color:#69a8bb}.wp-core-ui .wp-ui-text-icon{color:#f1f2f3}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background-color:#363b3f}.view-switch a.current:before{color:#363b3f}.view-switch a:hover:before{color:#69a8bb}.post-com-count:hover:after{border-top-color:#363b3f}.post-com-count:hover span{color:#fff;background-color:#363b3f}strong .post-com-count:after{border-top-color:#69a8bb}strong .post-com-count span{background-color:#69a8bb}#adminmenuback,#adminmenuwrap,#adminmenu{background:#363b3f}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f2f3}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#e14d43}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f1f1f1}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#26292c}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#26292c}#adminmenu .wp-submenu .wp-submenu-head{color:#c2c4c5}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#c2c4c5}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#e14d43}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#fff}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#e14d43}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#e14d43}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#69a8bb}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#fff;background:#26292c}#collapse-menu{color:#f1f2f3}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f1f2f3}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#363b3f}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#f1f2f3}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#e14d43;background:#26292c}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#e14d43}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#26292c}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#4b4c4d}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#c2c4c5}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#f1f2f3}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#e14d43}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#e14d43}#wpadminbar #adminbarsearch:before{color:#f1f2f3}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#464d52}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#464d52;background-color:#464d52}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#e14d43}#wpadminbar #wp-admin-bar-user-info .username{color:#c2c4c5}.wp-pointer .wp-pointer-content h3{background-color:#e14d43}.wp-pointer .wp-pointer-content h3:before{color:#e14d43}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#e14d43}.media-item .bar,.media-progress-bar div{background-color:#e14d43}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #e14d43}.attachment.details .check{background-color:#e14d43;box-shadow:0 0 0 1px white,0 0 0 2px #e14d43}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#e14d43}.theme-browser .theme.add-new-theme:hover span:after{color:#e14d43}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#e14d43}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#e14d43;border-color:#d02a21;-webkit-box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#e14d43}div#wp-responsive-toggle a:before{color:#f1f2f3}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#e14d43}.star-rating .star{color:#e14d43}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#26292c} \ No newline at end of file diff --git a/src/wp-admin/css/colors/midnight/colors.scss b/src/wp-admin/css/colors/midnight/colors.scss new file mode 100644 index 0000000..49952fc --- /dev/null +++ b/src/wp-admin/css/colors/midnight/colors.scss @@ -0,0 +1,6 @@ +$base-color: #363b3f; +$highlight-color: #e14d43; +$notification-color: #69a8bb; + +@import "../../colors.css"; +@import "../_admin.scss"; diff --git a/src/wp-admin/css/colors/ocean/colors-rtl.css b/src/wp-admin/css/colors/ocean/colors-rtl.css new file mode 100644 index 0000000..27bf3bb --- /dev/null +++ b/src/wp-admin/css/colors/ocean/colors-rtl.css @@ -0,0 +1,304 @@ +@import url("../../colors-rtl.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #738e96; } + +input[type=radio]:checked:before { + background: #738e96; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #9ebaa0; + border-color: #80a583; + color: white; + -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #86a988; + border-color: #719a74; + color: white; + -webkit-box-shadow: inset 0 1px 0 #bccfbd, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #bccfbd, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #86a988; + border-color: #719a74; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #c7d1c8 !important; + background: #86a988 !important; + border-color: #719a74 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: white; + background-color: #738e96; } +.wp-core-ui .wp-ui-text-primary { + color: #738e96; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #9ebaa0; } +.wp-core-ui .wp-ui-text-highlight { + color: #9ebaa0; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #aa9d88; } +.wp-core-ui .wp-ui-text-notification { + color: #aa9d88; } +.wp-core-ui .wp-ui-text-icon { + color: #f2fcff; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: white; + background-color: #738e96; } + +.view-switch a.current:before { + color: #738e96; } + +.view-switch a:hover:before { + color: #aa9d88; } + +.post-com-count:hover:after { + border-top-color: #738e96; } + +.post-com-count:hover span { + color: white; + background-color: #738e96; } + +strong .post-com-count:after { + border-top-color: #aa9d88; } + +strong .post-com-count span { + background-color: #aa9d88; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #738e96; } + +#adminmenu a { + color: white; } + +#adminmenu div.wp-menu-image:before { + color: #f2fcff; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #9ebaa0; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: white; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #627c83; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #627c83; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #d5dddf; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #d5dddf; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #9ebaa0; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: white; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #9ebaa0; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #9ebaa0; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: white; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #aa9d88; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: white; + background: #627c83; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f2fcff; } + +#collapse-menu:hover { + color: white; } + +#collapse-button div:after { + color: #f2fcff; } + +#collapse-menu:hover #collapse-button div:after { + color: white; } + +/* Admin Bar */ +#wpadminbar { + color: white; + background: #738e96; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: white; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f2fcff; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #9ebaa0; + background: #627c83; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #9ebaa0; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #627c83; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #8e9b9e; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #d5dddf; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f2fcff; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #9ebaa0; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #9ebaa0; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f2fcff; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: white; + background: #879fa5; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: white; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #879fa5; + background-color: #879fa5; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #9ebaa0; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #d5dddf; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #9ebaa0; } + +.wp-pointer .wp-pointer-content h3:before { + color: #9ebaa0; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #9ebaa0; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #9ebaa0; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #9ebaa0; } + +.attachment.details .check { + background-color: #9ebaa0; + box-shadow: 0 0 0 1px white, 0 0 0 2px #9ebaa0; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #9ebaa0; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #9ebaa0; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #9ebaa0; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #9ebaa0; + border-color: #80a583; + -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #9ebaa0; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f2fcff; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #9ebaa0; } + +.star-rating .star { + color: #9ebaa0; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #627c83; } diff --git a/src/wp-admin/css/colors/ocean/colors-rtl.min.css b/src/wp-admin/css/colors/ocean/colors-rtl.min.css new file mode 100644 index 0000000..46ccbaf --- /dev/null +++ b/src/wp-admin/css/colors/ocean/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-right:0;border-left:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-left:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-left-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-right:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-right:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-right:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-right:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-right:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-right:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-left-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f1f1f1}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#738e96}input[type=radio]:checked:before{background:#738e96}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#9ebaa0;border-color:#80a583;color:#fff;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#86a988;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#86a988;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#c7d1c8!important;background:#86a988!important;border-color:#719a74!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#738e96}.wp-core-ui .wp-ui-text-primary{color:#738e96}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#9ebaa0}.wp-core-ui .wp-ui-text-highlight{color:#9ebaa0}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#aa9d88}.wp-core-ui .wp-ui-text-notification{color:#aa9d88}.wp-core-ui .wp-ui-text-icon{color:#f2fcff}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background-color:#738e96}.view-switch a.current:before{color:#738e96}.view-switch a:hover:before{color:#aa9d88}.post-com-count:hover:after{border-top-color:#738e96}.post-com-count:hover span{color:#fff;background-color:#738e96}strong .post-com-count:after{border-top-color:#aa9d88}strong .post-com-count span{background-color:#aa9d88}#adminmenuback,#adminmenuwrap,#adminmenu{background:#738e96}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f2fcff}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#9ebaa0}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f1f1f1}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#627c83}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#627c83}#adminmenu .wp-submenu .wp-submenu-head{color:#d5dddf}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#d5dddf}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#9ebaa0}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#fff}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#9ebaa0}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#9ebaa0}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#aa9d88}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#fff;background:#627c83}#collapse-menu{color:#f2fcff}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f2fcff}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#738e96}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#f2fcff}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#9ebaa0;background:#627c83}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#9ebaa0}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#627c83}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#8e9b9e}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#d5dddf}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#f2fcff}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#9ebaa0}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#9ebaa0}#wpadminbar #adminbarsearch:before{color:#f2fcff}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#879fa5}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#879fa5;background-color:#879fa5}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#9ebaa0}#wpadminbar #wp-admin-bar-user-info .username{color:#d5dddf}.wp-pointer .wp-pointer-content h3{background-color:#9ebaa0}.wp-pointer .wp-pointer-content h3:before{color:#9ebaa0}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#9ebaa0}.media-item .bar,.media-progress-bar div{background-color:#9ebaa0}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #9ebaa0}.attachment.details .check{background-color:#9ebaa0;box-shadow:0 0 0 1px white,0 0 0 2px #9ebaa0}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#9ebaa0}.theme-browser .theme.add-new-theme:hover span:after{color:#9ebaa0}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#9ebaa0}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#9ebaa0;border-color:#80a583;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#9ebaa0}div#wp-responsive-toggle a:before{color:#f2fcff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#9ebaa0}.star-rating .star{color:#9ebaa0}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#627c83} \ No newline at end of file diff --git a/src/wp-admin/css/colors/ocean/colors.css b/src/wp-admin/css/colors/ocean/colors.css new file mode 100644 index 0000000..37427d2 --- /dev/null +++ b/src/wp-admin/css/colors/ocean/colors.css @@ -0,0 +1,304 @@ +@import url("../../colors.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #738e96; } + +input[type=radio]:checked:before { + background: #738e96; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #9ebaa0; + border-color: #80a583; + color: white; + -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #86a988; + border-color: #719a74; + color: white; + -webkit-box-shadow: inset 0 1px 0 #bccfbd, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #bccfbd, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #86a988; + border-color: #719a74; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #c7d1c8 !important; + background: #86a988 !important; + border-color: #719a74 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: white; + background-color: #738e96; } +.wp-core-ui .wp-ui-text-primary { + color: #738e96; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #9ebaa0; } +.wp-core-ui .wp-ui-text-highlight { + color: #9ebaa0; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #aa9d88; } +.wp-core-ui .wp-ui-text-notification { + color: #aa9d88; } +.wp-core-ui .wp-ui-text-icon { + color: #f2fcff; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: white; + background-color: #738e96; } + +.view-switch a.current:before { + color: #738e96; } + +.view-switch a:hover:before { + color: #aa9d88; } + +.post-com-count:hover:after { + border-top-color: #738e96; } + +.post-com-count:hover span { + color: white; + background-color: #738e96; } + +strong .post-com-count:after { + border-top-color: #aa9d88; } + +strong .post-com-count span { + background-color: #aa9d88; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #738e96; } + +#adminmenu a { + color: white; } + +#adminmenu div.wp-menu-image:before { + color: #f2fcff; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #9ebaa0; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: white; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #627c83; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #627c83; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #d5dddf; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #d5dddf; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #9ebaa0; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: white; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #9ebaa0; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #9ebaa0; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: white; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #aa9d88; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: white; + background: #627c83; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f2fcff; } + +#collapse-menu:hover { + color: white; } + +#collapse-button div:after { + color: #f2fcff; } + +#collapse-menu:hover #collapse-button div:after { + color: white; } + +/* Admin Bar */ +#wpadminbar { + color: white; + background: #738e96; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: white; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f2fcff; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #9ebaa0; + background: #627c83; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #9ebaa0; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #627c83; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #8e9b9e; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #d5dddf; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f2fcff; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #9ebaa0; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #9ebaa0; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f2fcff; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: white; + background: #879fa5; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: white; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #879fa5; + background-color: #879fa5; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #9ebaa0; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #d5dddf; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #9ebaa0; } + +.wp-pointer .wp-pointer-content h3:before { + color: #9ebaa0; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #9ebaa0; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #9ebaa0; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #9ebaa0; } + +.attachment.details .check { + background-color: #9ebaa0; + box-shadow: 0 0 0 1px white, 0 0 0 2px #9ebaa0; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #9ebaa0; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #9ebaa0; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #9ebaa0; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #9ebaa0; + border-color: #80a583; + -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #9ebaa0; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f2fcff; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #9ebaa0; } + +.star-rating .star { + color: #9ebaa0; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #627c83; } diff --git a/src/wp-admin/css/colors/ocean/colors.min.css b/src/wp-admin/css/colors/ocean/colors.min.css new file mode 100644 index 0000000..b29fa84 --- /dev/null +++ b/src/wp-admin/css/colors/ocean/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-left:0;border-right:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-right:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-right-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-left:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-left:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-left:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-left:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-left:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-left:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-right-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f1f1f1}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#738e96}input[type=radio]:checked:before{background:#738e96}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#9ebaa0;border-color:#80a583;color:#fff;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#86a988;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#86a988;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#c7d1c8!important;background:#86a988!important;border-color:#719a74!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#738e96}.wp-core-ui .wp-ui-text-primary{color:#738e96}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#9ebaa0}.wp-core-ui .wp-ui-text-highlight{color:#9ebaa0}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#aa9d88}.wp-core-ui .wp-ui-text-notification{color:#aa9d88}.wp-core-ui .wp-ui-text-icon{color:#f2fcff}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background-color:#738e96}.view-switch a.current:before{color:#738e96}.view-switch a:hover:before{color:#aa9d88}.post-com-count:hover:after{border-top-color:#738e96}.post-com-count:hover span{color:#fff;background-color:#738e96}strong .post-com-count:after{border-top-color:#aa9d88}strong .post-com-count span{background-color:#aa9d88}#adminmenuback,#adminmenuwrap,#adminmenu{background:#738e96}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f2fcff}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#9ebaa0}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f1f1f1}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#627c83}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#627c83}#adminmenu .wp-submenu .wp-submenu-head{color:#d5dddf}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#d5dddf}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#9ebaa0}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#fff}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#9ebaa0}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#9ebaa0}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#aa9d88}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#fff;background:#627c83}#collapse-menu{color:#f2fcff}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f2fcff}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#738e96}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#f2fcff}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#9ebaa0;background:#627c83}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#9ebaa0}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#627c83}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#8e9b9e}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#d5dddf}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#f2fcff}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#9ebaa0}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#9ebaa0}#wpadminbar #adminbarsearch:before{color:#f2fcff}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#879fa5}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#879fa5;background-color:#879fa5}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#9ebaa0}#wpadminbar #wp-admin-bar-user-info .username{color:#d5dddf}.wp-pointer .wp-pointer-content h3{background-color:#9ebaa0}.wp-pointer .wp-pointer-content h3:before{color:#9ebaa0}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#9ebaa0}.media-item .bar,.media-progress-bar div{background-color:#9ebaa0}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #9ebaa0}.attachment.details .check{background-color:#9ebaa0;box-shadow:0 0 0 1px white,0 0 0 2px #9ebaa0}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#9ebaa0}.theme-browser .theme.add-new-theme:hover span:after{color:#9ebaa0}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#9ebaa0}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#9ebaa0;border-color:#80a583;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#9ebaa0}div#wp-responsive-toggle a:before{color:#f2fcff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#9ebaa0}.star-rating .star{color:#9ebaa0}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#627c83} \ No newline at end of file diff --git a/src/wp-admin/css/colors/ocean/colors.scss b/src/wp-admin/css/colors/ocean/colors.scss new file mode 100644 index 0000000..fec5547 --- /dev/null +++ b/src/wp-admin/css/colors/ocean/colors.scss @@ -0,0 +1,9 @@ +$base-color: #738e96; +$icon-color: #f2fcff; +$highlight-color: #9ebaa0; +$notification-color: #aa9d88; + +$form-checked: $base-color; + +@import "../../colors.css"; +@import "../_admin.scss"; diff --git a/src/wp-admin/css/colors/sunrise/colors-rtl.css b/src/wp-admin/css/colors/sunrise/colors-rtl.css new file mode 100644 index 0000000..33b4867 --- /dev/null +++ b/src/wp-admin/css/colors/sunrise/colors-rtl.css @@ -0,0 +1,304 @@ +@import url("../../colors-rtl.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #dd823b; } + +input[type=radio]:checked:before { + background: #dd823b; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #dd823b; + border-color: #c36822; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #cc6c23; + border-color: #ad5c1e; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e59d66, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e59d66, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #cc6c23; + border-color: #ad5c1e; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #d1cbc7 !important; + background: #cc6c23 !important; + border-color: #ad5c1e !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: white; + background-color: #cf4944; } +.wp-core-ui .wp-ui-text-primary { + color: #cf4944; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #dd823b; } +.wp-core-ui .wp-ui-text-highlight { + color: #dd823b; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #ccaf0b; } +.wp-core-ui .wp-ui-text-notification { + color: #ccaf0b; } +.wp-core-ui .wp-ui-text-icon { + color: #f3f1f1; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: white; + background-color: #cf4944; } + +.view-switch a.current:before { + color: #cf4944; } + +.view-switch a:hover:before { + color: #ccaf0b; } + +.post-com-count:hover:after { + border-top-color: #cf4944; } + +.post-com-count:hover span { + color: white; + background-color: #cf4944; } + +strong .post-com-count:after { + border-top-color: #ccaf0b; } + +strong .post-com-count span { + background-color: #ccaf0b; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #cf4944; } + +#adminmenu a { + color: white; } + +#adminmenu div.wp-menu-image:before { + color: #f3f1f1; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #dd823b; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: white; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #be3631; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #be3631; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #f0c8c6; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #f0c8c6; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #f7e3d3; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: white; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #f7e3d3; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #dd823b; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: white; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #ccaf0b; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: white; + background: #be3631; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f3f1f1; } + +#collapse-menu:hover { + color: white; } + +#collapse-button div:after { + color: #f3f1f1; } + +#collapse-menu:hover #collapse-button div:after { + color: white; } + +/* Admin Bar */ +#wpadminbar { + color: white; + background: #cf4944; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: white; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f3f1f1; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #f7e3d3; + background: #be3631; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #f7e3d3; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #be3631; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #cf6a67; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #f0c8c6; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f3f1f1; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #f7e3d3; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #f7e3d3; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f3f1f1; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: white; + background: #d66460; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: white; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #d66460; + background-color: #d66460; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #f7e3d3; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #f0c8c6; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #dd823b; } + +.wp-pointer .wp-pointer-content h3:before { + color: #dd823b; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #dd823b; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #dd823b; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #dd823b; } + +.attachment.details .check { + background-color: #dd823b; + box-shadow: 0 0 0 1px white, 0 0 0 2px #dd823b; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #dd823b; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #dd823b; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #dd823b; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #dd823b; + border-color: #c36822; + -webkit-box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #dd823b; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f3f1f1; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #dd823b; } + +.star-rating .star { + color: #dd823b; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #be3631; } diff --git a/src/wp-admin/css/colors/sunrise/colors-rtl.min.css b/src/wp-admin/css/colors/sunrise/colors-rtl.min.css new file mode 100644 index 0000000..a2a40c3 --- /dev/null +++ b/src/wp-admin/css/colors/sunrise/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-right:0;border-left:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-left:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-left-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-right:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-right:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-right:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-right:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-right:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-right:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-left-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f1f1f1}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#dd823b}input[type=radio]:checked:before{background:#dd823b}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#dd823b;border-color:#c36822;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#cc6c23;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#cc6c23;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#d1cbc7!important;background:#cc6c23!important;border-color:#ad5c1e!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#cf4944}.wp-core-ui .wp-ui-text-primary{color:#cf4944}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#dd823b}.wp-core-ui .wp-ui-text-highlight{color:#dd823b}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#ccaf0b}.wp-core-ui .wp-ui-text-notification{color:#ccaf0b}.wp-core-ui .wp-ui-text-icon{color:#f3f1f1}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background-color:#cf4944}.view-switch a.current:before{color:#cf4944}.view-switch a:hover:before{color:#ccaf0b}.post-com-count:hover:after{border-top-color:#cf4944}.post-com-count:hover span{color:#fff;background-color:#cf4944}strong .post-com-count:after{border-top-color:#ccaf0b}strong .post-com-count span{background-color:#ccaf0b}#adminmenuback,#adminmenuwrap,#adminmenu{background:#cf4944}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f3f1f1}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#dd823b}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f1f1f1}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#be3631}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#be3631}#adminmenu .wp-submenu .wp-submenu-head{color:#f0c8c6}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#f0c8c6}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#f7e3d3}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#fff}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#f7e3d3}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#dd823b}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#ccaf0b}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#fff;background:#be3631}#collapse-menu{color:#f3f1f1}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f3f1f1}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#cf4944}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#f3f1f1}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#f7e3d3;background:#be3631}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#f7e3d3}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#be3631}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#cf6a67}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#f0c8c6}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#f3f1f1}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#f7e3d3}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#f7e3d3}#wpadminbar #adminbarsearch:before{color:#f3f1f1}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#d66460}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#d66460;background-color:#d66460}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#f7e3d3}#wpadminbar #wp-admin-bar-user-info .username{color:#f0c8c6}.wp-pointer .wp-pointer-content h3{background-color:#dd823b}.wp-pointer .wp-pointer-content h3:before{color:#dd823b}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#dd823b}.media-item .bar,.media-progress-bar div{background-color:#dd823b}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #dd823b}.attachment.details .check{background-color:#dd823b;box-shadow:0 0 0 1px white,0 0 0 2px #dd823b}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#dd823b}.theme-browser .theme.add-new-theme:hover span:after{color:#dd823b}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#dd823b}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#dd823b;border-color:#c36822;-webkit-box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#dd823b}div#wp-responsive-toggle a:before{color:#f3f1f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#dd823b}.star-rating .star{color:#dd823b}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#be3631} \ No newline at end of file diff --git a/src/wp-admin/css/colors/sunrise/colors.css b/src/wp-admin/css/colors/sunrise/colors.css new file mode 100644 index 0000000..495856b --- /dev/null +++ b/src/wp-admin/css/colors/sunrise/colors.css @@ -0,0 +1,304 @@ +@import url("../../colors.css"); +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#rightnow a:hover, #media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover, .ui-tabs-nav a:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #dd823b; } + +input[type=radio]:checked:before { + background: #dd823b; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #dd823b; + border-color: #c36822; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #cc6c23; + border-color: #ad5c1e; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e59d66, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e59d66, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #cc6c23; + border-color: #ad5c1e; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled { + color: #d1cbc7 !important; + background: #cc6c23 !important; + border-color: #ad5c1e !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: white; + background-color: #cf4944; } +.wp-core-ui .wp-ui-text-primary { + color: #cf4944; } +.wp-core-ui .wp-ui-highlight { + color: white; + background-color: #dd823b; } +.wp-core-ui .wp-ui-text-highlight { + color: #dd823b; } +.wp-core-ui .wp-ui-notification { + color: white; + background-color: #ccaf0b; } +.wp-core-ui .wp-ui-text-notification { + color: #ccaf0b; } +.wp-core-ui .wp-ui-text-icon { + color: #f3f1f1; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: white; + background-color: #cf4944; } + +.view-switch a.current:before { + color: #cf4944; } + +.view-switch a:hover:before { + color: #ccaf0b; } + +.post-com-count:hover:after { + border-top-color: #cf4944; } + +.post-com-count:hover span { + color: white; + background-color: #cf4944; } + +strong .post-com-count:after { + border-top-color: #ccaf0b; } + +strong .post-com-count span { + background-color: #ccaf0b; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #cf4944; } + +#adminmenu a { + color: white; } + +#adminmenu div.wp-menu-image:before { + color: #f3f1f1; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: white; + background-color: #dd823b; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: white; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #be3631; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #be3631; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #f0c8c6; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #f0c8c6; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #f7e3d3; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: white; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #f7e3d3; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: white; + background: #dd823b; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: white; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: white; + background: #ccaf0b; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: white; + background: #be3631; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f3f1f1; } + +#collapse-menu:hover { + color: white; } + +#collapse-button div:after { + color: #f3f1f1; } + +#collapse-menu:hover #collapse-button div:after { + color: white; } + +/* Admin Bar */ +#wpadminbar { + color: white; + background: #cf4944; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: white; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f3f1f1; } + +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #f7e3d3; + background: #be3631; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #f7e3d3; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: white; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #be3631; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #cf6a67; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #f0c8c6; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f3f1f1; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #f7e3d3; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #f7e3d3; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f3f1f1; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: white; + background: #d66460; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: white; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: white; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #d66460; + background-color: #d66460; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: white; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #f7e3d3; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #f0c8c6; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #dd823b; } + +.wp-pointer .wp-pointer-content h3:before { + color: #dd823b; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #dd823b; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #dd823b; } + +.details.attachment { + box-shadow: 0 0 0 1px white, 0 0 0 5px #dd823b; } + +.attachment.details .check { + background-color: #dd823b; + box-shadow: 0 0 0 1px white, 0 0 0 2px #dd823b; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #dd823b; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #dd823b; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #dd823b; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #dd823b; + border-color: #c36822; + -webkit-box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #dd823b; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f3f1f1; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #dd823b; } + +.star-rating .star { + color: #dd823b; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #be3631; } diff --git a/src/wp-admin/css/colors/sunrise/colors.min.css b/src/wp-admin/css/colors/sunrise/colors.min.css new file mode 100644 index 0000000..801882e --- /dev/null +++ b/src/wp-admin/css/colors/sunrise/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}input[type=checkbox],input[type=radio]{background:#fff;border-color:#bbb;color:#555;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}input[type=checkbox]:checked:before{color:#1e8cbe}input[type=radio]:checked:before{background-color:#1e8cbe}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#2ea2cc}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#D54E21}.wp-ui-text-notification{color:#D54E21}.wp-ui-text-icon{color:#999}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{background-color:#333}#adminmenu .wp-has-current-submenu .wp-submenu a,.no-js li.wp-has-current-submenu:hover .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:hover,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,.no-js li.wp-has-current-submenu:hover .wp-submenu a:hover,.no-js li.wp-has-current-submenu:hover .wp-submenu a:focus,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus{background:0 0;color:#2ea2cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}.row-actions{color:#ddd}.find-box-search,.find-box-buttons{background-color:#f7f7f7;border-top:1px solid #dfdfdf}.find-box{background-color:#444}.find-box-head{color:#eee}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#444}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#dashboard-widgets h4{color:#222}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}table.widefat{border-color:#fff;background-color:#fff}th .comment-grey-bubble:before{color:#444}.sorting-indicator:before{color:#444}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fdfdfd}ul.category-tabs li.tabs{border-color:#dfdfdf #dfdfdf #fdfdfd}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fdfdfd}kbd,code{background:#eaeaea;background:rgba(0,0,0,.07)}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],.titlewrap input,select{border-color:#ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,#widgets-right .widget-top:hover,#widgets-left .widget-top:hover,.menu-item-bar .menu-item-handle:hover{border-color:#999}input:disabled,input.disabled,textarea:disabled,textarea.disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.accordion-section-content{border-left:0;border-right:0}.widefat tfoot th{border-bottom:0;border-top:1px solid #e1e1e1}.widefat thead th{border-bottom:1px solid #e1e1e1}.form-table th,.form-wrap label{color:#222}.form-table.editcomment td{border-bottom:0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#0074a2}.post-com-count:after{border-top:5px solid #bbb;border-right:5px solid transparent}strong .post-com-count:after{border-top:5px solid #0076a0}.post-com-count:hover:after{border-top:5px solid #2ea2cc}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}h2,h3{color:#222}.wrap .add-new-h2,.wrap .add-new-h2:active{background:#e0e0e0}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:gray}.ac_results li{color:#101010}.alternate,.alt{background-color:#f9f9f9}.available-theme a.screenshot{background-color:#fff;border-color:#ccc}#current-theme{border-bottom-color:#dfdfdf}.bar{background-color:#e8e8e8;border-right-color:#99d}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit{border:0}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{border-color:#aaa;background-color:#efefef}.ui-autocomplete li a.ui-state-focus{background-color:#ddd}.post-com-count{color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#2ea2cc}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}a:hover,a:active{color:#2ea2cc}a:focus{color:#124964}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu .wp-submenu a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#2ea2cc}#the-comment-list .comment-item{border:0}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}p.submit{border-top-color:#dfdfdf}.submitbox .submit{background-color:#464646;color:#ccc}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,.plugins a.delete,#all-plugins-table .plugins a.delete,#search-plugins-table .plugins a.delete,.submitbox .submitdelete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete{color:#a00}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{color:red}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}div.updated,.login .message,.press-this #message{background-color:#fff;border-left:4px solid #7ad03a;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#update-nag,.update-nag{background-color:#fff;border-left:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error,.login #login_error{background:#fff;border-left:4px solid #dd3d36;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small{color:#333}th.manage-column a,th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}th.sortable a:focus{background:#e1e1e1}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,#media-items a.delete-permanently,.plugins a.delete,.ui-tabs-nav a,.plugins .inactive a{color:#0074a2;-webkit-transition-property:border,background,color;-moz-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-moz-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.wp-list-table a,.media-router a{-moz-transition:none;-webkit-transition:none;transition:none}#adminmenu a{color:#eee}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#d54e21;color:#fff}#plugin-information .action-button{background-color:#2ea2cc;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#2ea2cc;color:#fff}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.plugins .inactive a:hover{color:#2ea2cc}#wpfooter{color:#777;border-color:transparent}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.plugins .plugin-description p,.plugins .plugin-version-author-uri{color:#333}.plugins .inactive .plugin-title strong{color:#333}.plugin-update-tr .plugin-update{border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugin-update-tr .update-message{background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}tr.active.update+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-update-tr .update-message:before{color:#d54e21}.plugins,.plugins th,.plugins td{color:#000}.plugins .inactive a{color:#579}.plugins tr{background:#fff}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th,.plugin-install #the-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins .update td,.plugins .update th{-webkit-box-shadow:none;box-shadow:none}.plugins .active td,.plugins .active th,tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update,#activity-widget #the-comment-list .unapproved{background-color:#fefaf7}.plugins tr.active.plugin-update-tr+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active+tr.inactive td{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins tr.active+tr.inactive.update th,.plugins tr.active+tr.inactive.update td{-webkit-box-shadow:none;box-shadow:none}.plugins .active th.check-column{border-left:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-left:4px solid #d54e21}.post-state-format:before,.post-format-icon:before{color:#ddd;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}input[type=radio]:checked+label:before{color:#888}a.post-state-format:hover:before,a.post-format-icon:hover:before{color:#2ea2cc}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved th,#the-comment-list .unapproved td{background-color:#fefaf7}#the-comment-list .unapproved th.check-column{border-left:4px solid #d54e21}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list th,#the-comment-list td{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#the-comment-list tr:last-child th,#the-comment-list tr:last-child td{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved th,#the-comment-list tr.unapproved+tr.approved td{border-top:1px solid rgba(0,0,0,.03)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel-column p{color:#464646}.welcome-panel .welcome-icon:before{color:#888}.widget-top,.menu-item-handle,.menu-item-settings,.widget-inside,.postbox,#menu-settings-column .accordion-container,#menu-management .menu-edit,.manage-menus,table.widefat,.stuffbox,p.popular-tags,.widgets-holder-wrap,.welcome-panel,.wp-editor-container,#post-status-info,.popular-tags,.feature-filter,.imgedit-group{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info{border-top:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.welcome-panel,.postbox,table.widefat,.wp-editor-container,.stuffbox,p.popular-tags,.widgets-holder-wrap,.popular-tags,.feature-filter,.imgedit-group{background:#fff}.postbox h3,#namediv h3,#submitdiv h3{border-bottom:1px solid #eee}.widget .widget-top,.menu-item-handle{background:#fafafa;color:#222}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before,span.wp-media-buttons-icon:before{color:#888}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before,.wp-pointer-buttons a.close:before{background:0 0;color:#bbb}#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before,#bulk-titles div a:hover:before,.wp-pointer-buttons a.close:hover:before{color:#c00}#screen-meta{background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-back{background:#f6fbfd}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active a{border-color:#e1e1e1}.contextual-help-tabs .active{border-color:#2ea2cc;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#f6fbfd;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links a{color:#777}#screen-meta-links a:after{color:#bbb}#screen-meta-links a:hover,#screen-meta-links a:active{color:#333}#screen-meta-links a:focus{border-color:#aaa;color:#333;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#wphead{border-bottom-color:#dfdfdf}#wphead h1 a{color:#464646}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover{color:red}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#post-status-info{background-color:#f7f7f7}.widget-inside,.menu-item-settings{background:#fff}.menu-item-settings{border-top:0}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap,#adminmenu{background-color:#222}#adminmenu li.wp-menu-separator{background:transparent;border-color:transparent}#adminmenu div.separator{border-color:transparent}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{background-color:#111;color:#2ea2cc}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#333}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow div{background:#0074a2}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:transparent}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#111;border-color:#111}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{color:#fff}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-color:#666}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .opensub .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus{color:#fff;background:transparent}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu .wp-submenu a,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu .wp-submenu-head{color:#fff}#collapse-menu{color:#aaa;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover{color:#2ea2cc}#collapse-button div:after{color:#aaa}#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}#adminmenu div.wp-menu-image:before{color:#999}.icon16:before{color:#999}#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu .current div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before{color:#fff}.wp-full-overlay a.collapse-sidebar{color:#777}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay .collapse-sidebar-arrow:before{background:#eee}table.diff .diff-deletedline del{background-color:#f99}.ui-tooltip,.arrow::after{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-meta,.revisions-diff,.revisions.pinned .revisions-controls{background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.revisions-tooltip,.revisions-tooltip-arrow span{border-color:#d7d7d7;background-color:#fff}.revisions-tickmarks{background-color:#fff}.revisions-tickmarks>div{border-color:#aaa}.revisions.pinned .revisions-controls{background:#fff}.revisions.pinned .revisions-meta{box-shadow:none}.wp-slider.ui-slider{border-color:#d7d7d7}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{color:#fff}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #f1f1f1;color:#000}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important}#plugin-information{height:auto}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border-color:#ccc}#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#2ea2cc}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{}.post-com-count span{background-color:#bbb}.sortable-placeholder{border-color:#bbb}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch>a:before{color:#bbb}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fff;border-color:#fff}#widgets-left #available-widgets{background:transparent}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}.sidebar-name{border-bottom-color:#e1e1e1}.js #removing-widget{color:#2ea2cc}#removing-widget span{color:#000}.in-widget-title,#widgets-right .widget-top a.widget-control-edit,#wp_inactive_widgets .in-widget-title,#available-widgets .widget-description{color:#666}#widgets-right .widget-top a.widget-control-edit:hover{color:#fff}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#menu-management{background:#f5f5f5}#menu-management #post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#2ea2cc}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:red}#cancel-save:hover{background-color:red;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66}.item-type{color:#777}.item-controls .menu-item-delete:hover{color:red}.widget-action,.handlediv,.item-edit,.sidebar-name-arrow,.accordion-section-title:after{color:#aaa}.widget-action:hover,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.accordion-section-title:hover:after{color:#777}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#0074a2;border-bottom-color:#0074a2}.submitbox .submitcancel:hover{background:#0074a2;color:#fff}.manage-menus{background:#fbfbfb}.menu-settings{border-top-color:#eee}.theme-location-set{color:#999}.nav-menus-php .delete-action a{color:#bc0b0b}.is-submenu{color:#999}.nav-tab{color:#555;border-color:#ccc;background:#e4e4e4}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active{color:#464646}.nav-tab-active,.nav-tab-active:hover{color:#000;background:0 0;border-color:#ccc;border-bottom-color:#f1f1f1}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-color:#ccc}#upload-form label{color:#777}.about-wrap h1{color:#333}.about-text{color:#777}.wp-badge{background-color:#0074a2;color:#78c8e6;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap h2 .nav-tab-active{border-color:#ccc;border-bottom-color:#f1f1f1}.about-wrap h2,.about-wrap h3,.about-wrap h4{color:#222}.about-wrap .feature-section .col-2:before,.about-wrap .feature-section .col-2:after,.about-wrap .feature-section.two-col p:before{color:#1e8cbe}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top-color:#dfdfdf}.about-wrap li.wp-person img.gravatar{border-color:#ccc}.about-wrap li.wp-person .title{color:#464646}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.pressthis a span:before{color:#777}.imgedit-menu div{color:#777}.imgedit-menu div:hover{color:#333}.media-modal-content{background:#fcfcfc;box-shadow:0 5px 15px rgba(0,0,0,.7)}.media-menu{background:#f3f3f3;border-right-color:#ccc}.media-menu>a{color:#0074a2}.media-menu .active,.media-menu .active:hover{color:#222}.media-frame-content{background:#fff;border-top-color:#ddd;border-bottom-color:#ddd}.media-menu .separator{border-top-color:#ddd;border-bottom:0}.media-sidebar{background:#f3f3f3;border-color:#ddd}.media-router .active,.media-router>a.active:last-child{background:#fff;border:1px solid #ddd;border-bottom:0}.details.attachment{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment .check{background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.clearlooks2{box-shadow:0 5px 15px rgba(0,0,0,.7)}.clearlooks2 .mceMiddle span,.clearlooks2 .mceMiddle .mceLeft,.clearlooks2 .mceMiddle .mceRight,.clearlooks2 .mceBottom,.clearlooks2 .mceBottom .mceLeft,.clearlooks2 .mceBottom .mceCenter,.clearlooks2 .mceBottom .mceRight{background-color:#fcfcfc}.clearlooks2 .mceTop span,.clearlooks2 .mceFocus .mceTop span{color:#222}.clearlooks2 .mceClose:before{color:#999}.clearlooks2 .mceClose:hover:before{color:#2ea2cc}.sticky-menu #TB_window{background:#f1f1f1}a .mceIcon,.mceAction{color:#777}a .mceIcon:hover{color:#333}.login form .input,.login input[type=text],.login form input[type=checkbox]{background:#fbfbfb}.login form{background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.login{background:#f1f1f1}.login #nav a,.login #backtoblog a{text-decoration:none;color:#999}.login #nav a:hover,.login #backtoblog a:hover{color:#2ea2cc}.login h1 a:hover{color:#2ea2cc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.curtime #timestamp,#screen-meta-links a.show-settings,.widget-top a.widget-action,.widget-top a.widget-action:hover,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.meta-box-sortables .postbox:hover .handlediv,.tagchecklist span a,#bulk-titles div a,.tagchecklist span a:hover,#bulk-titles div a:hover,.wp_themeSkin .mceToolbar span.mce_undo,.wp_themeSkin .mceToolbar span.mce_redo,.wp_themeSkin .mceToolbar span.mce_bullist,.wp_themeSkin .mceToolbar span.mce_numlist,.wp_themeSkin .mceToolbar span.mce_blockquote,.wp_themeSkin .mceToolbar span.mce_charmap,.wp_themeSkin .mceToolbar span.mce_bold,.wp_themeSkin .mceToolbar span.mce_italic,.wp_themeSkin .mceToolbar span.mce_underline,.wp_themeSkin .mceToolbar span.mce_justifyleft,.wp_themeSkin .mceToolbar span.mce_justifyright,.wp_themeSkin .mceToolbar span.mce_justifycenter,.wp_themeSkin .mceToolbar span.mce_justifyfull,.wp_themeSkin .mceToolbar span.mce_indent,.wp_themeSkin .mceToolbar span.mce_outdent,.wp_themeSkin .mceToolbar span.mce_link,.wp_themeSkin .mceToolbar span.mce_unlink,.wp_themeSkin .mceToolbar span.mce_help,.wp_themeSkin .mceToolbar span.mce_removeformat,.wp_themeSkin .mceToolbar span.mce_fullscreen,.wp_themeSkin .mceToolbar span.mce_wp_fullscreen,.wp_themeSkin .mceToolbar span.mce_media,.wp_themeSkin .mceToolbar span.mce_pastetext,.wp_themeSkin .mceToolbar span.mce_pasteword,.wp_themeSkin .mceToolbar span.mce_wp_help,.wp_themeSkin .mceToolbar span.mce_wp_adv,.wp_themeSkin .mceToolbar span.mce_wp_more,.wp_themeSkin .mceToolbar span.mce_strikethrough,.wp_themeSkin .mceToolbar span.mce_spellchecker,.wp_themeSkin .mceToolbar span.mce_forecolor,.wp_themeSkin .mceToolbar .mce_forecolorpicker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceToolbar .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_numlist,.wp_themeSkin .mceToolbar .mceSplitButton span.mce_bullist{background:none!important}}html{background:#f1f1f1}a{color:#0074a2}a:hover,a:active,a:focus{color:#0099d5}#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#dd823b}input[type=radio]:checked:before{background:#dd823b}.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active{color:#0099d5}.wp-core-ui .button-primary{background:#dd823b;border-color:#c36822;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background:#cc6c23;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#cc6c23;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled{color:#d1cbc7!important;background:#cc6c23!important;border-color:#ad5c1e!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#cf4944}.wp-core-ui .wp-ui-text-primary{color:#cf4944}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#dd823b}.wp-core-ui .wp-ui-text-highlight{color:#dd823b}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#ccaf0b}.wp-core-ui .wp-ui-text-notification{color:#ccaf0b}.wp-core-ui .wp-ui-text-icon{color:#f3f1f1}.wrap .add-new-h2:hover,#add-new-comment a:hover,.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#fff;background-color:#cf4944}.view-switch a.current:before{color:#cf4944}.view-switch a:hover:before{color:#ccaf0b}.post-com-count:hover:after{border-top-color:#cf4944}.post-com-count:hover span{color:#fff;background-color:#cf4944}strong .post-com-count:after{border-top-color:#ccaf0b}strong .post-com-count span{background-color:#ccaf0b}#adminmenuback,#adminmenuwrap,#adminmenu{background:#cf4944}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f3f1f1}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#dd823b}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{border-bottom-color:#f1f1f1}#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#be3631}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#be3631}#adminmenu .wp-submenu .wp-submenu-head{color:#f0c8c6}#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a{color:#f0c8c6}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover{color:#f7e3d3}#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a{color:#fff}#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus{color:#f7e3d3}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top{color:#fff;background:#dd823b}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#ccaf0b}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins{color:#fff;background:#be3631}#collapse-menu{color:#f3f1f1}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f3f1f1}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#cf4944}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after{color:#f3f1f1}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{color:#f7e3d3;background:#be3631}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#f7e3d3}#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#be3631}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#cf6a67}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#f0c8c6}#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop>.ab-item:before{color:#f3f1f1}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li.hover .ab-item:after,#wpadminbar li:hover #adminbarsearch:before{color:#f7e3d3}#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .menupop .menupop>.ab-item:hover:before{color:#f7e3d3}#wpadminbar #adminbarsearch:before{color:#f3f1f1}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#d66460}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#d66460;background-color:#d66460}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#f7e3d3}#wpadminbar #wp-admin-bar-user-info .username{color:#f0c8c6}.wp-pointer .wp-pointer-content h3{background-color:#dd823b}.wp-pointer .wp-pointer-content h3:before{color:#dd823b}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#dd823b}.media-item .bar,.media-progress-bar div{background-color:#dd823b}.details.attachment{box-shadow:0 0 0 1px white,0 0 0 5px #dd823b}.attachment.details .check{background-color:#dd823b;box-shadow:0 0 0 1px white,0 0 0 2px #dd823b}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#dd823b}.theme-browser .theme.add-new-theme:hover span:after{color:#dd823b}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover{background:#dd823b}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.ui-state-hover,.wp-slider .ui-slider-handle.focus{background:#dd823b;border-color:#c36822;-webkit-box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#dd823b}div#wp-responsive-toggle a:before{color:#f3f1f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#dd823b}.star-rating .star{color:#dd823b}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#be3631} \ No newline at end of file diff --git a/src/wp-admin/css/colors/sunrise/colors.scss b/src/wp-admin/css/colors/sunrise/colors.scss new file mode 100644 index 0000000..ecd031c --- /dev/null +++ b/src/wp-admin/css/colors/sunrise/colors.scss @@ -0,0 +1,7 @@ +$base-color: #cf4944; +$highlight-color: #dd823b; +$notification-color: #ccaf0b; +$menu-submenu-focus-text: lighten( $highlight-color, 35% ); + +@import "../../colors.css"; +@import "../_admin.scss"; diff --git a/src/wp-admin/css/customize-controls-rtl.css b/src/wp-admin/css/customize-controls-rtl.css new file mode 100644 index 0000000..2518214 --- /dev/null +++ b/src/wp-admin/css/customize-controls-rtl.css @@ -0,0 +1,474 @@ +body { + overflow: hidden; +} + +#customize-controls a { + text-decoration: none; +} + +#customize-controls h3 { + font-size: 14px; +} + +#customize-controls .submit { + text-align: center; +} + +#customize-controls .description { + color: #666666; +} + +#customize-header-actions .button-primary { + float: left; + margin-top: 9px; +} + +#customize-header-actions .spinner { + margin-top: 16px; + margin-left: 4px; +} + +.saving #customize-header-actions .spinner { + display: block; +} + +#customize-info { + border: none; + border-top: 1px solid #ddd; +} + +#customize-info .accordion-section-title { + background-color: #fff; + color: #666666; + border-right: none; + border-left: none; + border-bottom: 1px solid #eeeeee; +} + +#customize-info.open .accordion-section-title, +#customize-info .accordion-section-title:hover, +#customize-info .accordion-section-title:focus { + color: #555555; +} + +#customize-info.open .accordion-section-title:after, +#customize-info .accordion-section-title:hover:after, +#customize-info .accordion-section-title:focus:after { + color: #555555; +} + +#customize-info.open .accordion-section-title { + border-color: transparent; +} + +#customize-info .preview-notice { + font-size: 13px; + line-height: 24px; +} + +#customize-info .theme-name { + font-size: 20px; + font-weight: 200; + line-height: 24px; + display: block; +} + +#customize-info .theme-screenshot { + width: 258px; +} + +#customize-info .theme-description { + margin-top: 1em; + color: #666666; + line-height: 20px; +} + +#customize-theme-controls { + -webkit-box-shadow: 0px 1px 1px -1px rgba(0, 0, 0, 0.1); + box-shadow: 0px 1px 1px -1px rgba(0, 0, 0, 0.1); +} + +#customize-theme-controls .control-section { + border: none; +} + +#customize-theme-controls .accordion-section-title { + color: #555555; + background-color: #fff; + border-bottom: 1px solid #eeeeee; +} + +#customize-theme-controls .accordion-section-content { + color: #555555; + background: white; +} + +#customize-theme-controls .control-section:hover .accordion-section-title, +#customize-theme-controls .control-section .accordion-section-title:hover, +#customize-theme-controls .control-section.open .accordion-section-title, +#customize-theme-controls .control-section .accordion-section-title:focus { + color: #555555; + background: #f5f5f5; +} + +.js .control-section:hover .accordion-section-title, +.js .control-section .accordion-section-title:hover, +.js .control-section.open .accordion-section-title, +.js .control-section .accordion-section-title:focus { + background: #f5f5f5; +} + +#customize-theme-controls .control-section:hover .accordion-section-title::after, +#customize-theme-controls .control-section .accordion-section-title:hover::after, +#customize-theme-controls .control-section.open .accordion-section-title::after, +#customize-theme-controls .control-section .accordion-section-title:focus::after { + color: #555555; +} + +#customize-theme-controls .control-section.open { + border-bottom: 1px solid #eeeeee; +} + +#customize-theme-controls .control-section.open .accordion-section-title { + border-bottom-color: #eeeeee !important; +} + +#customize-theme-controls .control-section:last-of-type.open, +#customize-theme-controls .control-section:last-of-type .accordion-section-title { + border-bottom-color: #ddd; +} + +#customize-theme-controls > ul, +#customize-theme-controls .accordion-section-content { + margin: 0; +} + +.customize-control { + width: 100%; + float: right; + clear: both; + margin-bottom: 8px; +} + +.customize-control select, +.customize-control input[type="text"], +.customize-control input[type="radio"], +.customize-control input[type="checkbox"] { + line-height: 28px; +} + +.customize-control input[type="text"] { + width: 98%; + line-height: 18px; + margin: 0; +} + +.customize-control select { + min-width: 50%; + max-width: 100%; + height: 28px; + line-height: 28px; +} + +.customize-control-title { + display: block; + font-size: 14px; + line-height: 24px; + font-weight: 600; + margin-bottom: 5px; +} + +.customize-control-color .color-picker, +.customize-control-checkbox label, +.customize-control-upload div { + line-height: 28px; +} + +.customize-control-checkbox input { + margin-left: 5px; +} + +.customize-control-radio { + padding: 5px 0 10px; +} + +.customize-control-radio .customize-control-title { + margin-bottom: 0; + line-height: 22px; +} + +.customize-control-radio label { + line-height: 32px; +} + +.customize-control-radio input { + margin-left: 5px; +} + +#customize-preview iframe { + width: 100%; + height: 100%; +} + +.wp-full-overlay-sidebar { + background: #eeeeee; + border-left: 1px solid #ddd; +} + +.collapse-sidebar { + background-color: transparent !important; + border: none !important; + box-shadow: none !important; + border-radius: !important 0; +} + + +.collapse-sidebar:active, +.collapse-sidebar:active .collapse-sidebar-label, +.collapse-sidebar:active .collapse-sidebar-arrow:before { + text-shadow: none; +} + +.collapsed .collapse-sidebar-arrow:before { + color: #888; +} + +/* Style for custom settings */ + +/* + * Dropdowns + */ +.accordion-section .dropdown { + float: right; + display: block; + position: relative; + cursor: pointer; +} + +.accordion-section .dropdown-content { + overflow: hidden; + float: right; + min-width: 30px; + height: 16px; + line-height: 16px; + margin-left: 16px; + padding: 4px 5px; + border: 2px solid #eeeeee; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.customize-control .dropdown-arrow { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 20px; + background: #eeeeee; +} + +.customize-control .dropdown-arrow:after { + content: "\f140"; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + color: #333; +} + +.customize-control .dropdown-status { + color: #333; + background: #eeeeee; + display: none; + max-width: 112px; +} + +/* Color Picker */ +.customize-control-color .color-picker-hex { + display: none; +} + +.customize-control-color.open .color-picker-hex { + display: block; +} + +.customize-control-color .dropdown { + margin-left: 5px; + margin-bottom: 5px; +} + +.customize-control-color .dropdown .dropdown-content { + background-color: #555555; + border: 1px solid rgba(0, 0, 0, 0.15); +} + +.customize-control-color .dropdown:hover .dropdown-content { + border-color: rgba(0, 0, 0, 0.25); +} + +/* + * Image Picker + */ +.customize-control-image .library, +.customize-control-image .actions { + display: none; + float: right; + width: 100%; +} + +.customize-control-image.open .library, +.customize-control-image.open .actions { + display: block; +} + +.accordion-section .customize-control-image .dropdown-content { + height: auto; + min-height: 24px; + min-width: 40px; + padding: 0; +} + +.accordion-section .customize-control-image .dropdown-status { + padding: 4px 5px; +} + +.accordion-section .customize-control-image .preview-thumbnail img { + display: block; + width: 100%; + max-width: 122px; + max-height: 98px; + margin: 0 auto; +} + +.accordion-section .customize-control-image .actions { + text-align: left; +} + +.accordion-section .customize-control-image .library ul { + border-bottom: 1px solid #ddd; + float: right; + width: 100%; + margin: 10px 0 0; +} + +.accordion-section .customize-control-image .library li { + color: #ccc; + float: right; + padding: 3px 15px; + margin: 0; + border: 1px solid transparent; +} + +.accordion-section .customize-control-image .library li.library-selected { + margin-bottom: -1px; + padding-bottom: 4px; + color: #666666; + border-color: #ddd; + border-bottom-color: #fff; +} + +.accordion-section .customize-control-image .library .thumbnail { + display: block; + width: 100%; +} + +.accordion-section .customize-control-image .library .thumbnail img { + display: block; + max-width: 90%; + max-height: 80px; + margin: 5px auto; + padding: 2px; + background: #666666; +} + +.accordion-section .customize-control-image .library .thumbnail:hover img { + background-color: #2ea2cc; +} + +.accordion-section .customize-control-image .library-content { + display: none; + width: 100%; + float: right; + padding: 10px 0; +} + +.accordion-section .customize-control-image .library-content.library-selected { + display: block; +} + +.accordion-section .customize-control-upload .upload-fallback, +.accordion-section .customize-control-image .upload-fallback { + display: none; +} + +.accordion-section .customize-control-upload .upload-dropzone, +.accordion-section .customize-control-image .upload-dropzone { + display: none; + padding: 15px 10px; + border: 3px dashed #dfdfdf; + margin: 5px auto; + text-align: center; + position: relative; + cursor: default; +} + +.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop, +.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop { + display: block; + -webkit-transition: border-color 0.1s; + -moz-transition: border-color 0.1s; + -ms-transition: border-color 0.1s; + -o-transition: border-color 0.1s; + transition: border-color 0.1s; +} + +.accordion-section .customize-control-upload .library ul li, +.accordion-section .customize-control-image .library ul li { + cursor: pointer; +} + +.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop.drag-over, +.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop.drag-over { + border-color: #83b4d8; +} + +/** + * iOS can't scroll iframes, + * instead it expands the iframe size to match the size of the content + */ +.ios .wp-full-overlay { + position: relative; +} + +.ios #customize-preview { + position: relative; +} + +.ios #customize-controls .wp-full-overlay-sidebar-content { + -webkit-overflow-scrolling: touch; +} + +/** Handle cheaters. */ +body.cheatin { + min-width: 0; + background: #f9f9f9; + padding: 50px; +} + +body.cheatin p { + max-width: 700px; + margin: 0 auto; + padding: 2em; + font-size: 14px; + background: #555555; + border: 1px solid #dfdfdf; + -webkit-border-radius: 3px; + border-radius: 3px; +} diff --git a/src/wp-admin/css/customize-controls-rtl.min.css b/src/wp-admin/css/customize-controls-rtl.min.css new file mode 100644 index 0000000..f43469c --- /dev/null +++ b/src/wp-admin/css/customize-controls-rtl.min.css @@ -0,0 +1 @@ +body{overflow:hidden}#customize-controls a{text-decoration:none}#customize-controls h3{font-size:14px}#customize-controls .submit{text-align:center}#customize-controls .description{color:#666}#customize-header-actions .button-primary{float:left;margin-top:9px}#customize-header-actions .spinner{margin-top:16px;margin-left:4px}.saving #customize-header-actions .spinner{display:block}#customize-info{border:0;border-top:1px solid #ddd}#customize-info .accordion-section-title{background-color:#fff;color:#666;border-right:0;border-left:0;border-bottom:1px solid #eee}#customize-info.open .accordion-section-title,#customize-info .accordion-section-title:hover,#customize-info .accordion-section-title:focus{color:#555}#customize-info.open .accordion-section-title:after,#customize-info .accordion-section-title:hover:after,#customize-info .accordion-section-title:focus:after{color:#555}#customize-info.open .accordion-section-title{border-color:transparent}#customize-info .preview-notice{font-size:13px;line-height:24px}#customize-info .theme-name{font-size:20px;font-weight:200;line-height:24px;display:block}#customize-info .theme-screenshot{width:258px}#customize-info .theme-description{margin-top:1em;color:#666;line-height:20px}#customize-theme-controls{-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#customize-theme-controls .control-section{border:0}#customize-theme-controls .accordion-section-title{color:#555;background-color:#fff;border-bottom:1px solid #eee}#customize-theme-controls .accordion-section-content{color:#555;background:#fff}#customize-theme-controls .control-section:hover .accordion-section-title,#customize-theme-controls .control-section .accordion-section-title:hover,#customize-theme-controls .control-section.open .accordion-section-title,#customize-theme-controls .control-section .accordion-section-title:focus{color:#555;background:#f5f5f5}.js .control-section:hover .accordion-section-title,.js .control-section .accordion-section-title:hover,.js .control-section.open .accordion-section-title,.js .control-section .accordion-section-title:focus{background:#f5f5f5}#customize-theme-controls .control-section:hover .accordion-section-title::after,#customize-theme-controls .control-section .accordion-section-title:hover::after,#customize-theme-controls .control-section.open .accordion-section-title::after,#customize-theme-controls .control-section .accordion-section-title:focus::after{color:#555}#customize-theme-controls .control-section.open{border-bottom:1px solid #eee}#customize-theme-controls .control-section.open .accordion-section-title{border-bottom-color:#eee!important}#customize-theme-controls .control-section:last-of-type.open,#customize-theme-controls .control-section:last-of-type .accordion-section-title{border-bottom-color:#ddd}#customize-theme-controls>ul,#customize-theme-controls .accordion-section-content{margin:0}.customize-control{width:100%;float:right;clear:both;margin-bottom:8px}.customize-control select,.customize-control input[type=text],.customize-control input[type=radio],.customize-control input[type=checkbox]{line-height:28px}.customize-control input[type=text]{width:98%;line-height:18px;margin:0}.customize-control select{min-width:50%;max-width:100%;height:28px;line-height:28px}.customize-control-title{display:block;font-size:14px;line-height:24px;font-weight:600;margin-bottom:5px}.customize-control-color .color-picker,.customize-control-checkbox label,.customize-control-upload div{line-height:28px}.customize-control-checkbox input{margin-left:5px}.customize-control-radio{padding:5px 0 10px}.customize-control-radio .customize-control-title{margin-bottom:0;line-height:22px}.customize-control-radio label{line-height:32px}.customize-control-radio input{margin-left:5px}#customize-preview iframe{width:100%;height:100%}.wp-full-overlay-sidebar{background:#eee;border-left:1px solid #ddd}.collapse-sidebar{background-color:transparent!important;border:0!important;box-shadow:none!important;border-radius:!important 0}.collapse-sidebar:active,.collapse-sidebar:active .collapse-sidebar-label,.collapse-sidebar:active .collapse-sidebar-arrow:before{text-shadow:none}.collapsed .collapse-sidebar-arrow:before{color:#888}.accordion-section .dropdown{float:right;display:block;position:relative;cursor:pointer}.accordion-section .dropdown-content{overflow:hidden;float:right;min-width:30px;height:16px;line-height:16px;margin-left:16px;padding:4px 5px;border:2px solid #eee;-webkit-user-select:none;-moz-user-select:none;user-select:none}.customize-control .dropdown-arrow{position:absolute;top:0;bottom:0;left:0;width:20px;background:#eee}.customize-control .dropdown-arrow:after{content:"\f140";font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#333}.customize-control .dropdown-status{color:#333;background:#eee;display:none;max-width:112px}.customize-control-color .color-picker-hex{display:none}.customize-control-color.open .color-picker-hex{display:block}.customize-control-color .dropdown{margin-left:5px;margin-bottom:5px}.customize-control-color .dropdown .dropdown-content{background-color:#555;border:1px solid rgba(0,0,0,.15)}.customize-control-color .dropdown:hover .dropdown-content{border-color:rgba(0,0,0,.25)}.customize-control-image .library,.customize-control-image .actions{display:none;float:right;width:100%}.customize-control-image.open .library,.customize-control-image.open .actions{display:block}.accordion-section .customize-control-image .dropdown-content{height:auto;min-height:24px;min-width:40px;padding:0}.accordion-section .customize-control-image .dropdown-status{padding:4px 5px}.accordion-section .customize-control-image .preview-thumbnail img{display:block;width:100%;max-width:122px;max-height:98px;margin:0 auto}.accordion-section .customize-control-image .actions{text-align:left}.accordion-section .customize-control-image .library ul{border-bottom:1px solid #ddd;float:right;width:100%;margin:10px 0 0}.accordion-section .customize-control-image .library li{color:#ccc;float:right;padding:3px 15px;margin:0;border:1px solid transparent}.accordion-section .customize-control-image .library li.library-selected{margin-bottom:-1px;padding-bottom:4px;color:#666;border-color:#ddd;border-bottom-color:#fff}.accordion-section .customize-control-image .library .thumbnail{display:block;width:100%}.accordion-section .customize-control-image .library .thumbnail img{display:block;max-width:90%;max-height:80px;margin:5px auto;padding:2px;background:#666}.accordion-section .customize-control-image .library .thumbnail:hover img{background-color:#2ea2cc}.accordion-section .customize-control-image .library-content{display:none;width:100%;float:right;padding:10px 0}.accordion-section .customize-control-image .library-content.library-selected{display:block}.accordion-section .customize-control-upload .upload-fallback,.accordion-section .customize-control-image .upload-fallback{display:none}.accordion-section .customize-control-upload .upload-dropzone,.accordion-section .customize-control-image .upload-dropzone{display:none;padding:15px 10px;border:3px dashed #dfdfdf;margin:5px auto;text-align:center;position:relative;cursor:default}.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop,.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop{display:block;-webkit-transition:border-color .1s;-moz-transition:border-color .1s;-ms-transition:border-color .1s;-o-transition:border-color .1s;transition:border-color .1s}.accordion-section .customize-control-upload .library ul li,.accordion-section .customize-control-image .library ul li{cursor:pointer}.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop.drag-over,.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop.drag-over{border-color:#83b4d8}.ios .wp-full-overlay{position:relative}.ios #customize-preview{position:relative}.ios #customize-controls .wp-full-overlay-sidebar-content{-webkit-overflow-scrolling:touch}body.cheatin{min-width:0;background:#f9f9f9;padding:50px}body.cheatin p{max-width:700px;margin:0 auto;padding:2em;font-size:14px;background:#555;border:1px solid #dfdfdf;-webkit-border-radius:3px;border-radius:3px} \ No newline at end of file diff --git a/src/wp-admin/css/customize-controls.css b/src/wp-admin/css/customize-controls.css new file mode 100644 index 0000000..63a3a3a --- /dev/null +++ b/src/wp-admin/css/customize-controls.css @@ -0,0 +1,474 @@ +body { + overflow: hidden; +} + +#customize-controls a { + text-decoration: none; +} + +#customize-controls h3 { + font-size: 14px; +} + +#customize-controls .submit { + text-align: center; +} + +#customize-controls .description { + color: #666666; +} + +#customize-header-actions .button-primary { + float: right; + margin-top: 9px; +} + +#customize-header-actions .spinner { + margin-top: 16px; + margin-right: 4px; +} + +.saving #customize-header-actions .spinner { + display: block; +} + +#customize-info { + border: none; + border-top: 1px solid #ddd; +} + +#customize-info .accordion-section-title { + background-color: #fff; + color: #666666; + border-left: none; + border-right: none; + border-bottom: 1px solid #eeeeee; +} + +#customize-info.open .accordion-section-title, +#customize-info .accordion-section-title:hover, +#customize-info .accordion-section-title:focus { + color: #555555; +} + +#customize-info.open .accordion-section-title:after, +#customize-info .accordion-section-title:hover:after, +#customize-info .accordion-section-title:focus:after { + color: #555555; +} + +#customize-info.open .accordion-section-title { + border-color: transparent; +} + +#customize-info .preview-notice { + font-size: 13px; + line-height: 24px; +} + +#customize-info .theme-name { + font-size: 20px; + font-weight: 200; + line-height: 24px; + display: block; +} + +#customize-info .theme-screenshot { + width: 258px; +} + +#customize-info .theme-description { + margin-top: 1em; + color: #666666; + line-height: 20px; +} + +#customize-theme-controls { + -webkit-box-shadow: 0px 1px 1px -1px rgba(0, 0, 0, 0.1); + box-shadow: 0px 1px 1px -1px rgba(0, 0, 0, 0.1); +} + +#customize-theme-controls .control-section { + border: none; +} + +#customize-theme-controls .accordion-section-title { + color: #555555; + background-color: #fff; + border-bottom: 1px solid #eeeeee; +} + +#customize-theme-controls .accordion-section-content { + color: #555555; + background: white; +} + +#customize-theme-controls .control-section:hover .accordion-section-title, +#customize-theme-controls .control-section .accordion-section-title:hover, +#customize-theme-controls .control-section.open .accordion-section-title, +#customize-theme-controls .control-section .accordion-section-title:focus { + color: #555555; + background: #f5f5f5; +} + +.js .control-section:hover .accordion-section-title, +.js .control-section .accordion-section-title:hover, +.js .control-section.open .accordion-section-title, +.js .control-section .accordion-section-title:focus { + background: #f5f5f5; +} + +#customize-theme-controls .control-section:hover .accordion-section-title::after, +#customize-theme-controls .control-section .accordion-section-title:hover::after, +#customize-theme-controls .control-section.open .accordion-section-title::after, +#customize-theme-controls .control-section .accordion-section-title:focus::after { + color: #555555; +} + +#customize-theme-controls .control-section.open { + border-bottom: 1px solid #eeeeee; +} + +#customize-theme-controls .control-section.open .accordion-section-title { + border-bottom-color: #eeeeee !important; +} + +#customize-theme-controls .control-section:last-of-type.open, +#customize-theme-controls .control-section:last-of-type .accordion-section-title { + border-bottom-color: #ddd; +} + +#customize-theme-controls > ul, +#customize-theme-controls .accordion-section-content { + margin: 0; +} + +.customize-control { + width: 100%; + float: left; + clear: both; + margin-bottom: 8px; +} + +.customize-control select, +.customize-control input[type="text"], +.customize-control input[type="radio"], +.customize-control input[type="checkbox"] { + line-height: 28px; +} + +.customize-control input[type="text"] { + width: 98%; + line-height: 18px; + margin: 0; +} + +.customize-control select { + min-width: 50%; + max-width: 100%; + height: 28px; + line-height: 28px; +} + +.customize-control-title { + display: block; + font-size: 14px; + line-height: 24px; + font-weight: 600; + margin-bottom: 5px; +} + +.customize-control-color .color-picker, +.customize-control-checkbox label, +.customize-control-upload div { + line-height: 28px; +} + +.customize-control-checkbox input { + margin-right: 5px; +} + +.customize-control-radio { + padding: 5px 0 10px; +} + +.customize-control-radio .customize-control-title { + margin-bottom: 0; + line-height: 22px; +} + +.customize-control-radio label { + line-height: 32px; +} + +.customize-control-radio input { + margin-right: 5px; +} + +#customize-preview iframe { + width: 100%; + height: 100%; +} + +.wp-full-overlay-sidebar { + background: #eeeeee; + border-right: 1px solid #ddd; +} + +.collapse-sidebar { + background-color: transparent !important; + border: none !important; + box-shadow: none !important; + border-radius: 0 !important; +} + + +.collapse-sidebar:active, +.collapse-sidebar:active .collapse-sidebar-label, +.collapse-sidebar:active .collapse-sidebar-arrow:before { + text-shadow: none; +} + +.collapsed .collapse-sidebar-arrow:before { + color: #888; +} + +/* Style for custom settings */ + +/* + * Dropdowns + */ +.accordion-section .dropdown { + float: left; + display: block; + position: relative; + cursor: pointer; +} + +.accordion-section .dropdown-content { + overflow: hidden; + float: left; + min-width: 30px; + height: 16px; + line-height: 16px; + margin-right: 16px; + padding: 4px 5px; + border: 2px solid #eeeeee; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.customize-control .dropdown-arrow { + position: absolute; + top: 0; + bottom: 0; + right: 0; + width: 20px; + background: #eeeeee; +} + +.customize-control .dropdown-arrow:after { + content: "\f140"; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + color: #333; +} + +.customize-control .dropdown-status { + color: #333; + background: #eeeeee; + display: none; + max-width: 112px; +} + +/* Color Picker */ +.customize-control-color .color-picker-hex { + display: none; +} + +.customize-control-color.open .color-picker-hex { + display: block; +} + +.customize-control-color .dropdown { + margin-right: 5px; + margin-bottom: 5px; +} + +.customize-control-color .dropdown .dropdown-content { + background-color: #555555; + border: 1px solid rgba(0, 0, 0, 0.15); +} + +.customize-control-color .dropdown:hover .dropdown-content { + border-color: rgba(0, 0, 0, 0.25); +} + +/* + * Image Picker + */ +.customize-control-image .library, +.customize-control-image .actions { + display: none; + float: left; + width: 100%; +} + +.customize-control-image.open .library, +.customize-control-image.open .actions { + display: block; +} + +.accordion-section .customize-control-image .dropdown-content { + height: auto; + min-height: 24px; + min-width: 40px; + padding: 0; +} + +.accordion-section .customize-control-image .dropdown-status { + padding: 4px 5px; +} + +.accordion-section .customize-control-image .preview-thumbnail img { + display: block; + width: 100%; + max-width: 122px; + max-height: 98px; + margin: 0 auto; +} + +.accordion-section .customize-control-image .actions { + text-align: right; +} + +.accordion-section .customize-control-image .library ul { + border-bottom: 1px solid #ddd; + float: left; + width: 100%; + margin: 10px 0 0; +} + +.accordion-section .customize-control-image .library li { + color: #ccc; + float: left; + padding: 3px 15px; + margin: 0; + border: 1px solid transparent; +} + +.accordion-section .customize-control-image .library li.library-selected { + margin-bottom: -1px; + padding-bottom: 4px; + color: #666666; + border-color: #ddd; + border-bottom-color: #fff; +} + +.accordion-section .customize-control-image .library .thumbnail { + display: block; + width: 100%; +} + +.accordion-section .customize-control-image .library .thumbnail img { + display: block; + max-width: 90%; + max-height: 80px; + margin: 5px auto; + padding: 2px; + background: #666666; +} + +.accordion-section .customize-control-image .library .thumbnail:hover img { + background-color: #2ea2cc; +} + +.accordion-section .customize-control-image .library-content { + display: none; + width: 100%; + float: left; + padding: 10px 0; +} + +.accordion-section .customize-control-image .library-content.library-selected { + display: block; +} + +.accordion-section .customize-control-upload .upload-fallback, +.accordion-section .customize-control-image .upload-fallback { + display: none; +} + +.accordion-section .customize-control-upload .upload-dropzone, +.accordion-section .customize-control-image .upload-dropzone { + display: none; + padding: 15px 10px; + border: 3px dashed #dfdfdf; + margin: 5px auto; + text-align: center; + position: relative; + cursor: default; +} + +.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop, +.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop { + display: block; + -webkit-transition: border-color 0.1s; + -moz-transition: border-color 0.1s; + -ms-transition: border-color 0.1s; + -o-transition: border-color 0.1s; + transition: border-color 0.1s; +} + +.accordion-section .customize-control-upload .library ul li, +.accordion-section .customize-control-image .library ul li { + cursor: pointer; +} + +.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop.drag-over, +.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop.drag-over { + border-color: #83b4d8; +} + +/** + * iOS can't scroll iframes, + * instead it expands the iframe size to match the size of the content + */ +.ios .wp-full-overlay { + position: relative; +} + +.ios #customize-preview { + position: relative; +} + +.ios #customize-controls .wp-full-overlay-sidebar-content { + -webkit-overflow-scrolling: touch; +} + +/** Handle cheaters. */ +body.cheatin { + min-width: 0; + background: #f9f9f9; + padding: 50px; +} + +body.cheatin p { + max-width: 700px; + margin: 0 auto; + padding: 2em; + font-size: 14px; + background: #555555; + border: 1px solid #dfdfdf; + -webkit-border-radius: 3px; + border-radius: 3px; +} diff --git a/src/wp-admin/css/customize-controls.min.css b/src/wp-admin/css/customize-controls.min.css new file mode 100644 index 0000000..b706a2b --- /dev/null +++ b/src/wp-admin/css/customize-controls.min.css @@ -0,0 +1 @@ +body{overflow:hidden}#customize-controls a{text-decoration:none}#customize-controls h3{font-size:14px}#customize-controls .submit{text-align:center}#customize-controls .description{color:#666}#customize-header-actions .button-primary{float:right;margin-top:9px}#customize-header-actions .spinner{margin-top:16px;margin-right:4px}.saving #customize-header-actions .spinner{display:block}#customize-info{border:0;border-top:1px solid #ddd}#customize-info .accordion-section-title{background-color:#fff;color:#666;border-left:0;border-right:0;border-bottom:1px solid #eee}#customize-info.open .accordion-section-title,#customize-info .accordion-section-title:hover,#customize-info .accordion-section-title:focus{color:#555}#customize-info.open .accordion-section-title:after,#customize-info .accordion-section-title:hover:after,#customize-info .accordion-section-title:focus:after{color:#555}#customize-info.open .accordion-section-title{border-color:transparent}#customize-info .preview-notice{font-size:13px;line-height:24px}#customize-info .theme-name{font-size:20px;font-weight:200;line-height:24px;display:block}#customize-info .theme-screenshot{width:258px}#customize-info .theme-description{margin-top:1em;color:#666;line-height:20px}#customize-theme-controls{-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#customize-theme-controls .control-section{border:0}#customize-theme-controls .accordion-section-title{color:#555;background-color:#fff;border-bottom:1px solid #eee}#customize-theme-controls .accordion-section-content{color:#555;background:#fff}#customize-theme-controls .control-section:hover .accordion-section-title,#customize-theme-controls .control-section .accordion-section-title:hover,#customize-theme-controls .control-section.open .accordion-section-title,#customize-theme-controls .control-section .accordion-section-title:focus{color:#555;background:#f5f5f5}.js .control-section:hover .accordion-section-title,.js .control-section .accordion-section-title:hover,.js .control-section.open .accordion-section-title,.js .control-section .accordion-section-title:focus{background:#f5f5f5}#customize-theme-controls .control-section:hover .accordion-section-title::after,#customize-theme-controls .control-section .accordion-section-title:hover::after,#customize-theme-controls .control-section.open .accordion-section-title::after,#customize-theme-controls .control-section .accordion-section-title:focus::after{color:#555}#customize-theme-controls .control-section.open{border-bottom:1px solid #eee}#customize-theme-controls .control-section.open .accordion-section-title{border-bottom-color:#eee!important}#customize-theme-controls .control-section:last-of-type.open,#customize-theme-controls .control-section:last-of-type .accordion-section-title{border-bottom-color:#ddd}#customize-theme-controls>ul,#customize-theme-controls .accordion-section-content{margin:0}.customize-control{width:100%;float:left;clear:both;margin-bottom:8px}.customize-control select,.customize-control input[type=text],.customize-control input[type=radio],.customize-control input[type=checkbox]{line-height:28px}.customize-control input[type=text]{width:98%;line-height:18px;margin:0}.customize-control select{min-width:50%;max-width:100%;height:28px;line-height:28px}.customize-control-title{display:block;font-size:14px;line-height:24px;font-weight:600;margin-bottom:5px}.customize-control-color .color-picker,.customize-control-checkbox label,.customize-control-upload div{line-height:28px}.customize-control-checkbox input{margin-right:5px}.customize-control-radio{padding:5px 0 10px}.customize-control-radio .customize-control-title{margin-bottom:0;line-height:22px}.customize-control-radio label{line-height:32px}.customize-control-radio input{margin-right:5px}#customize-preview iframe{width:100%;height:100%}.wp-full-overlay-sidebar{background:#eee;border-right:1px solid #ddd}.collapse-sidebar{background-color:transparent!important;border:0!important;box-shadow:none!important;border-radius:0!important}.collapse-sidebar:active,.collapse-sidebar:active .collapse-sidebar-label,.collapse-sidebar:active .collapse-sidebar-arrow:before{text-shadow:none}.collapsed .collapse-sidebar-arrow:before{color:#888}.accordion-section .dropdown{float:left;display:block;position:relative;cursor:pointer}.accordion-section .dropdown-content{overflow:hidden;float:left;min-width:30px;height:16px;line-height:16px;margin-right:16px;padding:4px 5px;border:2px solid #eee;-webkit-user-select:none;-moz-user-select:none;user-select:none}.customize-control .dropdown-arrow{position:absolute;top:0;bottom:0;right:0;width:20px;background:#eee}.customize-control .dropdown-arrow:after{content:"\f140";font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#333}.customize-control .dropdown-status{color:#333;background:#eee;display:none;max-width:112px}.customize-control-color .color-picker-hex{display:none}.customize-control-color.open .color-picker-hex{display:block}.customize-control-color .dropdown{margin-right:5px;margin-bottom:5px}.customize-control-color .dropdown .dropdown-content{background-color:#555;border:1px solid rgba(0,0,0,.15)}.customize-control-color .dropdown:hover .dropdown-content{border-color:rgba(0,0,0,.25)}.customize-control-image .library,.customize-control-image .actions{display:none;float:left;width:100%}.customize-control-image.open .library,.customize-control-image.open .actions{display:block}.accordion-section .customize-control-image .dropdown-content{height:auto;min-height:24px;min-width:40px;padding:0}.accordion-section .customize-control-image .dropdown-status{padding:4px 5px}.accordion-section .customize-control-image .preview-thumbnail img{display:block;width:100%;max-width:122px;max-height:98px;margin:0 auto}.accordion-section .customize-control-image .actions{text-align:right}.accordion-section .customize-control-image .library ul{border-bottom:1px solid #ddd;float:left;width:100%;margin:10px 0 0}.accordion-section .customize-control-image .library li{color:#ccc;float:left;padding:3px 15px;margin:0;border:1px solid transparent}.accordion-section .customize-control-image .library li.library-selected{margin-bottom:-1px;padding-bottom:4px;color:#666;border-color:#ddd;border-bottom-color:#fff}.accordion-section .customize-control-image .library .thumbnail{display:block;width:100%}.accordion-section .customize-control-image .library .thumbnail img{display:block;max-width:90%;max-height:80px;margin:5px auto;padding:2px;background:#666}.accordion-section .customize-control-image .library .thumbnail:hover img{background-color:#2ea2cc}.accordion-section .customize-control-image .library-content{display:none;width:100%;float:left;padding:10px 0}.accordion-section .customize-control-image .library-content.library-selected{display:block}.accordion-section .customize-control-upload .upload-fallback,.accordion-section .customize-control-image .upload-fallback{display:none}.accordion-section .customize-control-upload .upload-dropzone,.accordion-section .customize-control-image .upload-dropzone{display:none;padding:15px 10px;border:3px dashed #dfdfdf;margin:5px auto;text-align:center;position:relative;cursor:default}.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop,.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop{display:block;-webkit-transition:border-color .1s;-moz-transition:border-color .1s;-ms-transition:border-color .1s;-o-transition:border-color .1s;transition:border-color .1s}.accordion-section .customize-control-upload .library ul li,.accordion-section .customize-control-image .library ul li{cursor:pointer}.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop.drag-over,.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop.drag-over{border-color:#83b4d8}.ios .wp-full-overlay{position:relative}.ios #customize-preview{position:relative}.ios #customize-controls .wp-full-overlay-sidebar-content{-webkit-overflow-scrolling:touch}body.cheatin{min-width:0;background:#f9f9f9;padding:50px}body.cheatin p{max-width:700px;margin:0 auto;padding:2em;font-size:14px;background:#555;border:1px solid #dfdfdf;-webkit-border-radius:3px;border-radius:3px} \ No newline at end of file diff --git a/src/wp-admin/css/farbtastic-rtl.min.css b/src/wp-admin/css/farbtastic-rtl.min.css new file mode 100644 index 0000000..3a942b2 --- /dev/null +++ b/src/wp-admin/css/farbtastic-rtl.min.css @@ -0,0 +1 @@ +.farbtastic{position:relative}.farbtastic *{position:absolute;cursor:crosshair}.farbtastic,.farbtastic .wheel{width:195px;height:195px}.farbtastic .color,.farbtastic .overlay{top:47px;right:47px;width:101px;height:101px}.farbtastic .wheel{background:url(../images/wheel.png) no-repeat;width:195px;height:195px}.farbtastic .overlay{background:url(../images/mask.png) no-repeat}.farbtastic .marker{width:17px;height:17px;margin:-8px -8px 0 0;overflow:hidden;background:url(../images/marker.png) no-repeat} \ No newline at end of file diff --git a/src/wp-admin/css/farbtastic.css b/src/wp-admin/css/farbtastic.css new file mode 100644 index 0000000..2bb73bf --- /dev/null +++ b/src/wp-admin/css/farbtastic.css @@ -0,0 +1,41 @@ + +.farbtastic { + position: relative; +} + +.farbtastic * { + position: absolute; + cursor: crosshair; +} + +.farbtastic, +.farbtastic .wheel { + width: 195px; + height: 195px; +} + +.farbtastic .color, +.farbtastic .overlay { + top: 47px; + left: 47px; + width: 101px; + height: 101px; +} + +.farbtastic .wheel { + background: url(../images/wheel.png) no-repeat; + width: 195px; + height: 195px; +} + +.farbtastic .overlay { + background: url(../images/mask.png) no-repeat; +} + +.farbtastic .marker { + width: 17px; + height: 17px; + margin: -8px 0 0 -8px; + overflow: hidden; + background: url(../images/marker.png) no-repeat; +} diff --git a/src/wp-admin/css/ie-rtl.css b/src/wp-admin/css/ie-rtl.css new file mode 100644 index 0000000..244e97d --- /dev/null +++ b/src/wp-admin/css/ie-rtl.css @@ -0,0 +1,722 @@ +/* Fixes for IE 7 bugs */ + +#dashboard-widgets form .input-text-wrap input, +#dashboard-widgets form .textarea-wrap textarea { + width: 99%; +} + +#dashboard-widgets form #title { + width: 98%; +} + +#wpbody-content #dashboard-widgets .postbox-container { + width: 49.5%; +} + +#wpbody-content #dashboard-widgets #postbox-container-2, +#wpbody-content #dashboard-widgets #postbox-container-3, +#wpbody-content #dashboard-widgets #postbox-container-4 { + float: left; + width: 50.5%; +} + +#dashboard-widgets #postbox-container-3 .empty-container, +#dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; +} + +.wp-editor-wrap .wp-editor-tools, +.wp-editor-wrap .wp-switch-editor, +.wp-editor-wrap .wp-editor-tabs, +.wp-editor-wrap .wp-editor-container { + zoom: 100%; +} + +.wp-editor-wrap .wp-editor-container textarea.wp-editor-area { + width: 97%; +} + +#post-body.columns-2 #postbox-container-1 { + padding-right: 19px; +} + +.welcome-panel .wp-badge { + position: absolute; +} + +.welcome-panel .welcome-panel-column:first-child { + width: 35%; +} + +#wp-fullscreen-title { + width: 97%; +} + +#wp_mce_fullscreen_ifr { + background-color: #f9f9f9; +} + +#wp-fullscreen-tagline { + color: #888; + font-size: 14px; +} + +#adminmenuback { + right: 0; + background-image: none; +} + +#adminmenuwrap { + position: static; +} + +#adminmenu { + position: relative; +} + +#adminmenu, +#adminmenu a { + cursor: pointer; +} + +#adminmenu li.wp-menu-separator, +#adminmenu li.wp-menu-separator-last { + font-size: 1px; + line-height: 1; +} + +#adminmenu a.menu-top { + border-bottom: 0 none; + border-top: 1px solid #ddd; +} + +#adminmenu .separator { + font-size: 1px; + line-height: 1px; +} + +#adminmenu .wp-submenu { + right: 110px; +} + +#adminmenu .wp-submenu ul { + margin: 0; +} + +.folded #wpcontent, +.folded #wpfooter { + margin-right: 170px; +} + +.folded #adminmenuback, +.folded #adminmenuwrap, +.folded #adminmenu, +.folded #adminmenu li.menu-top { + width: 150px; +} + +.folded #adminmenu .wp-submenu { + border-top-color: transparent; +} + +.folded #adminmenu .wp-menu-name { + display: block; +} + +.folded #adminmenu .wp-submenu.sub-open, +.folded #adminmenu .opensub .wp-submenu { + right: 110px; +} + +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + top: -1px; + position: relative; +} + +.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head { + background-color: transparent; +} + +#adminmenu .wp-submenu .wp-submenu-head { + border-top-color: #ddd; +} + +.folded #adminmenu .wp-submenu ul { + margin-right: 5px; +} + +#adminmenu li.menu-top { + margin-bottom: -2px; +} + +#adminmenu .wp-menu-arrow { + display: none !important; +} + +.js.folded #adminmenu li.menu-top { + display: block; + zoom: 100%; +} + +ul#adminmenu { + z-index: 99; +} + +#adminmenu li.menu-top a.menu-top { + min-width: auto; + width: auto; +} + +#wpcontent #adminmenu li.wp-has-current-submenu a.wp-has-submenu { + font-style: normal; +} + +#wpcontent #adminmenu .wp-submenu li { + padding: 0; +} + +#adminmenu li.wp-has-current-submenu .wp-submenu { + right: -40px; +} + +#adminmenu .wp-menu-image { + display: none !important; +} + +#adminmenu a.menu-top .wp-menu-name { + padding-right: 8px; +} + +#collapse-menu { + line-height: 23px; +} + +#wpadminbar .ab-comments-icon { + padding-top: 7px; +} + + +.theme-browser .theme { + width: 30%; + margin: 0 0 4% 3%; + cursor: auto; +} + +.theme-browser .theme:hover, +.theme-browser .theme:focus { + cursor: auto; +} + +.theme-browser .theme .theme-screenshot { + height: 180px; + min-width: +} + +.theme-browser .theme .theme-actions { + position: static; + background-color: #e8e8e8; +} + +.theme-browser .theme .more-details { + display: none; +} + +.plugins td, +.plugins th { + border-top: 1px solid #ddd; +} + +table.fixed th, +table.fixed td { + border-top: 1px solid #ddd; +} + +#wpbody-content input.button, +#wpbody-content input.button-primary, +#wpbody-content input.button-secondary { + overflow: visible; +} + +#dashboard-widgets h3 a { + height: 14px; + line-height: 14px; +} + +#dashboard_browser_nag { + color: #fff; +} + +#dashboard_browser_nag .browser-icon { + position: relative; +} + +.tablenav-pages .current-page { + vertical-align: middle; +} + +#wpbody-content .postbox { + border: 1px solid #dfdfdf; +} + +#wpbody-content .postbox h3 { + margin-bottom: -1px; +} + +.major-publishing-actions, +.wp-submenu, +.wp-submenu li, +#template, +#template div, +#editcat, +#addcat { + zoom: 100%; +} + +.wp-menu-arrow { + height: 28px; +} + +.submitbox { + margin-top: 10px; +} + +/* Inline Editor */ +#wpbody-content .quick-edit-row-post .inline-edit-col-left { + width: 39%; +} + +#wpbody-content .inline-edit-row-post .inline-edit-col-center { + width: 19%; +} + +#wpbody-content .quick-edit-row-page .inline-edit-col-left { + width: 49%; +} + +#wpbody-content .bulk-edit-row .inline-edit-col-left { + width: 29%; +} + +.inline-edit-row p.submit { + zoom: 100%; +} + +.inline-edit-row fieldset label span.title { + display: block; + float: right; + width: 5em; +} + +.inline-edit-row fieldset label span.input-text-wrap { + margin-right: 0; + zoom: 100%; +} + +#wpbody-content .inline-edit-row fieldset label span.input-text-wrap input { + line-height: 130%; +} + +#wpbody-content .inline-edit-row .input-text-wrap input { + width: 95%; +} + +#wpbody-content .inline-edit-row .input-text-wrap input.inline-edit-password-input { + width: 8em; +} +/* end Inline Editor */ + +#titlediv #title { + width: 98%; +} + +.button, +input[type="reset"], +input[type="button"], +input[type="submit"] { + padding: 0 8px; + line-height: 20px; + height: auto; +} + +.button.button-large, +input[type="reset"].button-large, +input[type="button"].button-large, +input[type="submit"].button-large { + padding: 0 10px; + line-height: 24px; + height: auto; +} + +.button.button-small, +input[type="reset"].button-small, +input[type="button"].button-small, +input[type="submit"].button-small { + padding: 0 6px; + line-height: 16px; + height: auto; +} + +a.button { + margin: 1px; + padding: 1px 9px 2px; +} + +a.button.button-large { + padding: 1px 11px 2px; +} + +a.button.button-small { + padding: 1px 7px 2px; +} + +#screen-options-wrap { + overflow: hidden; +} + +#the-comment-list .comment-item, +#post-status-info, +#wpwrap, +#wrap, +#postdivrich, +#postdiv, +#poststuff, +.metabox-holder, +#titlediv, +#post-body, +#editorcontainer, +.tablenav, +.widget-liquid-left, +.widget-liquid-right, +#widgets-left, +.widgets-sortables, +#dragHelper, +.widget .widget-top, +.widget-control-actions, +.tagchecklist, +#col-container, +#col-left, +#col-right, +.fileedit-sub { + display: block; + zoom: 100%; +} + +p.search-box { + position: static; + float: left; + margin: -3px 0 4px; +} + +#widget-list .widget, +.feature-filter .feature-group li { + display: inline; +} + +.feature-filter .feature-group li input { + vertical-align: middle; +} + +#editorcontainer #content { + overflow: auto; + margin: auto; + width: 98%; +} + +form#template div { + width: 100%; +} + +.wp-editor-container .quicktags-toolbar input { + overflow: visible; + padding: 0 4px; +} + +#poststuff h2 { + font-size: 1.6em; +} + +#poststuff .inside #parent_id, +#poststuff .inside #page_template, +.inline-edit-row #post_parent, +.inline-edit-row select[name="page_template"] { + width: 250px; +} + +#submitdiv input, +#submitdiv select, +#submitdiv a.button { + position: relative; +} + +#bh { + margin: 7px 0 0 10px; + float: left; +} + +/* without this dashboard widgets appear in one column for some screen widths */ +div#dashboard-widgets { + padding-left: 1px; +} + +.tagchecklist span, .tagchecklist span a { + display: inline-block; + display: block; +} + +.tablenav .button-secondary, +.nav .button-secondary { + padding-top: 2px; + padding-bottom: 2px; +} + +.tablenav select { + font-size: 13px; + display: inline-block; + vertical-align: top; + margin-top: 2px; +} + +.tablenav .actions select { + width: 155px; +} + +.subsubsub li { + display: inline; +} + +a.post-state-format { + text-indent: 0; + line-height: 0; + font-size: 0; +} + +table.ie-fixed { + table-layout: fixed; +} + +.widefat tr, +.widefat th { + margin-bottom: 0; + border-spacing: 0; +} + +.widefat th input { + margin: 0 5px 0 0; +} + +.widefat thead .check-column, +.widefat tfoot .check-column { + padding-top: 6px; +} + +.widefat tbody th.check-column, +.media.widefat tbody th.check-column { + padding: 4px 0 0; +} + +.widefat { + empty-cells: show; + border-collapse: collapse; +} + +.tablenav a.button-secondary { + display: inline-block; + padding: 2px 5px; +} + +.inactive-sidebar .widgets-sortables { + padding-bottom: 8px; +} + +#available-widgets .widget-holder { + padding-bottom: 65px; +} + +#widgets-left .inactive { + padding-bottom: 10px; +} + +.widget-liquid-right .widget, +.inactive-sidebar .widget { + position: relative; +} + +.inactive-sidebar .widget { + display: block; + float: right; +} + +#wpcontent .button-primary-disabled { + color: #9FD0D5; + background: #298CBA; +} + +#the-comment-list .unapproved tr, +#the-comment-list .unapproved td { + background-color: #ffffe0; +} + +.imgedit-submit { + width: 300px; +} + +#nav-menus-frame, +#wpbody, +.menu li { + zoom: 100%; +} + +#update-nav-menu #post-body { + overflow:hidden; +} + +.menu li { + min-width: 100%; +} + +.menu li.sortable-placeholder { + min-width: 400px; +} + +.available-theme { + display: inline; +} + +.available-theme ul { + margin: 0; +} + +.available-theme .action-links li { + padding-left: 7px; + margin-left: 7px; +} + +.about-wrap .three-col.about-updates .col-2 { + width: 15%; +} + +.about-wrap .about-password-meter input { + width: 98%; +} + +.revisions-tickmarks, +.revisions-tooltip { + display: none !important; +} + +.revisions.pinned .revisions-controls { + position: relative; +} + +input[type="password"], +.login form .input { + font-family: sans-serif; +} + +/* IE6 leftovers */ +* html .row-actions { + visibility: visible; +} + +* html div.widget-liquid-right, +* html div.widget-liquid-right { + display: block; + position: relative; +} + +* html #editorcontainer { + padding: 0; +} + +* html #poststuff h2 { + margin-right: 0; +} + +* html .stuffbox, +* html .stuffbox input, +* html .stuffbox textarea { + border: 1px solid #DFDFDF; +} + +* html .feature-filter .feature-group li { + width: 145px; +} + +* html div.widget-liquid-left { + width: 99%; +} + +* html .widgets-sortables { + height: 50px; +} + +* html a#content_resize { + left: -2px; +} + +* html .widget-title h4 { + width: 205px; +} + +* html #removing-widget .in-widget-title { + display: none; +} + +* html .media-item .pinkynail { + height: 32px; + width: 40px; +} + +* html .describe .field input.text, +* html .describe .field textarea { + width: 440px; +} + +* html input { + border: 1px solid #dfdfdf; +} + +* html .edit-box { + display: inline; +} + +* html .postbox-container .meta-box-sortables { + height: 300px; +} + +* html #wpbody-content #screen-options-link-wrap { + display: inline-block; + width: 150px; + text-align: center; +} + +* html #wpbody-content #contextual-help-link-wrap { + display: inline-block; + width: 100px; + text-align: center; +} + +* html #adminmenu { + margin-right: -80px; +} + +* html .folded #adminmenu { + margin-right: -22px; +} + +* html #wpcontent #adminmenu li.menu-top { + display: inline; + padding: 0; + margin: 0; +} + +* html #wpfooter { + margin: 0; +} + +* html #adminmenu div.wp-menu-image { + height: 29px; +} diff --git a/src/wp-admin/css/ie-rtl.min.css b/src/wp-admin/css/ie-rtl.min.css new file mode 100644 index 0000000..0ae2d0f --- /dev/null +++ b/src/wp-admin/css/ie-rtl.min.css @@ -0,0 +1 @@ +#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:99%}#dashboard-widgets form #title{width:98%}#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:left;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}.wp-editor-wrap .wp-editor-tools,.wp-editor-wrap .wp-switch-editor,.wp-editor-wrap .wp-editor-tabs,.wp-editor-wrap .wp-editor-container{zoom:100%}.wp-editor-wrap .wp-editor-container textarea.wp-editor-area{width:97%}#post-body.columns-2 #postbox-container-1{padding-right:19px}.welcome-panel .wp-badge{position:absolute}.welcome-panel .welcome-panel-column:first-child{width:35%}#wp-fullscreen-title{width:97%}#wp_mce_fullscreen_ifr{background-color:#f9f9f9}#wp-fullscreen-tagline{color:#888;font-size:14px}#adminmenuback{right:0;background-image:none}#adminmenuwrap{position:static}#adminmenu{position:relative}#adminmenu,#adminmenu a{cursor:pointer}#adminmenu li.wp-menu-separator,#adminmenu li.wp-menu-separator-last{font-size:1px;line-height:1}#adminmenu a.menu-top{border-bottom:0 none;border-top:1px solid #ddd}#adminmenu .separator{font-size:1px;line-height:1px}#adminmenu .wp-submenu{right:110px}#adminmenu .wp-submenu ul{margin:0}.folded #wpcontent,.folded #wpfooter{margin-right:170px}.folded #adminmenuback,.folded #adminmenuwrap,.folded #adminmenu,.folded #adminmenu li.menu-top{width:150px}.folded #adminmenu .wp-submenu{border-top-color:transparent}.folded #adminmenu .wp-menu-name{display:block}.folded #adminmenu .wp-submenu.sub-open,.folded #adminmenu .opensub .wp-submenu{right:110px}.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{top:-1px;position:relative}.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{background-color:transparent}#adminmenu .wp-submenu .wp-submenu-head{border-top-color:#ddd}.folded #adminmenu .wp-submenu ul{margin-right:5px}#adminmenu li.menu-top{margin-bottom:-2px}#adminmenu .wp-menu-arrow{display:none!important}.js.folded #adminmenu li.menu-top{display:block;zoom:100%}ul#adminmenu{z-index:99}#adminmenu li.menu-top a.menu-top{min-width:auto;width:auto}#wpcontent #adminmenu li.wp-has-current-submenu a.wp-has-submenu{font-style:normal}#wpcontent #adminmenu .wp-submenu li{padding:0}#adminmenu li.wp-has-current-submenu .wp-submenu{right:-40px}#adminmenu .wp-menu-image{display:none!important}#adminmenu a.menu-top .wp-menu-name{padding-right:8px}#collapse-menu{line-height:23px}#wpadminbar .ab-comments-icon{padding-top:7px}.theme-browser .theme{width:30%;margin:0 0 4% 3%;cursor:auto}.theme-browser .theme:hover,.theme-browser .theme:focus{cursor:auto}.theme-browser .theme .theme-screenshot{height:180px;min-width:}.theme-browser .theme .theme-actions{position:static;background-color:#e8e8e8}.theme-browser .theme .more-details{display:none}.plugins td,.plugins th{border-top:1px solid #ddd}table.fixed th,table.fixed td{border-top:1px solid #ddd}#wpbody-content input.button,#wpbody-content input.button-primary,#wpbody-content input.button-secondary{overflow:visible}#dashboard-widgets h3 a{height:14px;line-height:14px}#dashboard_browser_nag{color:#fff}#dashboard_browser_nag .browser-icon{position:relative}.tablenav-pages .current-page{vertical-align:middle}#wpbody-content .postbox{border:1px solid #dfdfdf}#wpbody-content .postbox h3{margin-bottom:-1px}.major-publishing-actions,.wp-submenu,.wp-submenu li,#template,#template div,#editcat,#addcat{zoom:100%}.wp-menu-arrow{height:28px}.submitbox{margin-top:10px}#wpbody-content .quick-edit-row-post .inline-edit-col-left{width:39%}#wpbody-content .inline-edit-row-post .inline-edit-col-center{width:19%}#wpbody-content .quick-edit-row-page .inline-edit-col-left{width:49%}#wpbody-content .bulk-edit-row .inline-edit-col-left{width:29%}.inline-edit-row p.submit{zoom:100%}.inline-edit-row fieldset label span.title{display:block;float:right;width:5em}.inline-edit-row fieldset label span.input-text-wrap{margin-right:0;zoom:100%}#wpbody-content .inline-edit-row fieldset label span.input-text-wrap input{line-height:130%}#wpbody-content .inline-edit-row .input-text-wrap input{width:95%}#wpbody-content .inline-edit-row .input-text-wrap input.inline-edit-password-input{width:8em}#titlediv #title{width:98%}.button,input[type=reset],input[type=button],input[type=submit]{padding:0 8px;line-height:20px;height:auto}.button.button-large,input[type=reset].button-large,input[type=button].button-large,input[type=submit].button-large{padding:0 10px;line-height:24px;height:auto}.button.button-small,input[type=reset].button-small,input[type=button].button-small,input[type=submit].button-small{padding:0 6px;line-height:16px;height:auto}a.button{margin:1px;padding:1px 9px 2px}a.button.button-large{padding:1px 11px 2px}a.button.button-small{padding:1px 7px 2px}#screen-options-wrap{overflow:hidden}#the-comment-list .comment-item,#post-status-info,#wpwrap,#wrap,#postdivrich,#postdiv,#poststuff,.metabox-holder,#titlediv,#post-body,#editorcontainer,.tablenav,.widget-liquid-left,.widget-liquid-right,#widgets-left,.widgets-sortables,#dragHelper,.widget .widget-top,.widget-control-actions,.tagchecklist,#col-container,#col-left,#col-right,.fileedit-sub{display:block;zoom:100%}p.search-box{position:static;float:left;margin:-3px 0 4px}#widget-list .widget,.feature-filter .feature-group li{display:inline}.feature-filter .feature-group li input{vertical-align:middle}#editorcontainer #content{overflow:auto;margin:auto;width:98%}form#template div{width:100%}.wp-editor-container .quicktags-toolbar input{overflow:visible;padding:0 4px}#poststuff h2{font-size:1.6em}#poststuff .inside #parent_id,#poststuff .inside #page_template,.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{width:250px}#submitdiv input,#submitdiv select,#submitdiv a.button{position:relative}#bh{margin:7px 0 0 10px;float:left}div#dashboard-widgets{padding-left:1px}.tagchecklist span,.tagchecklist span a{display:inline-block;display:block}.tablenav .button-secondary,.nav .button-secondary{padding-top:2px;padding-bottom:2px}.tablenav select{font-size:13px;display:inline-block;vertical-align:top;margin-top:2px}.tablenav .actions select{width:155px}.subsubsub li{display:inline}a.post-state-format{text-indent:0;line-height:0;font-size:0}table.ie-fixed{table-layout:fixed}.widefat tr,.widefat th{margin-bottom:0;border-spacing:0}.widefat th input{margin:0 5px 0 0}.widefat thead .check-column,.widefat tfoot .check-column{padding-top:6px}.widefat tbody th.check-column,.media.widefat tbody th.check-column{padding:4px 0 0}.widefat{empty-cells:show;border-collapse:collapse}.tablenav a.button-secondary{display:inline-block;padding:2px 5px}.inactive-sidebar .widgets-sortables{padding-bottom:8px}#available-widgets .widget-holder{padding-bottom:65px}#widgets-left .inactive{padding-bottom:10px}.widget-liquid-right .widget,.inactive-sidebar .widget{position:relative}.inactive-sidebar .widget{display:block;float:right}#wpcontent .button-primary-disabled{color:#9FD0D5;background:#298CBA}#the-comment-list .unapproved tr,#the-comment-list .unapproved td{background-color:#ffffe0}.imgedit-submit{width:300px}#nav-menus-frame,#wpbody,.menu li{zoom:100%}#update-nav-menu #post-body{overflow:hidden}.menu li{min-width:100%}.menu li.sortable-placeholder{min-width:400px}.available-theme{display:inline}.available-theme ul{margin:0}.available-theme .action-links li{padding-left:7px;margin-left:7px}.about-wrap .three-col.about-updates .col-2{width:15%}.about-wrap .about-password-meter input{width:98%}.revisions-tickmarks,.revisions-tooltip{display:none!important}.revisions.pinned .revisions-controls{position:relative}input[type=password],.login form .input{font-family:sans-serif}* html .row-actions{visibility:visible}* html div.widget-liquid-right,* html div.widget-liquid-right{display:block;position:relative}* html #editorcontainer{padding:0}* html #poststuff h2{margin-right:0}* html .stuffbox,* html .stuffbox input,* html .stuffbox textarea{border:1px solid #DFDFDF}* html .feature-filter .feature-group li{width:145px}* html div.widget-liquid-left{width:99%}* html .widgets-sortables{height:50px}* html a#content_resize{left:-2px}* html .widget-title h4{width:205px}* html #removing-widget .in-widget-title{display:none}* html .media-item .pinkynail{height:32px;width:40px}* html .describe .field input.text,* html .describe .field textarea{width:440px}* html input{border:1px solid #dfdfdf}* html .edit-box{display:inline}* html .postbox-container .meta-box-sortables{height:300px}* html #wpbody-content #screen-options-link-wrap{display:inline-block;width:150px;text-align:center}* html #wpbody-content #contextual-help-link-wrap{display:inline-block;width:100px;text-align:center}* html #adminmenu{margin-right:-80px}* html .folded #adminmenu{margin-right:-22px}* html #wpcontent #adminmenu li.menu-top{display:inline;padding:0;margin:0}* html #wpfooter{margin:0}* html #adminmenu div.wp-menu-image{height:29px} \ No newline at end of file diff --git a/src/wp-admin/css/ie.css b/src/wp-admin/css/ie.css new file mode 100644 index 0000000..df3d754 --- /dev/null +++ b/src/wp-admin/css/ie.css @@ -0,0 +1,722 @@ +/* Fixes for IE 7 bugs */ + +#dashboard-widgets form .input-text-wrap input, +#dashboard-widgets form .textarea-wrap textarea { + width: 99%; +} + +#dashboard-widgets form #title { + width: 98%; +} + +#wpbody-content #dashboard-widgets .postbox-container { + width: 49.5%; +} + +#wpbody-content #dashboard-widgets #postbox-container-2, +#wpbody-content #dashboard-widgets #postbox-container-3, +#wpbody-content #dashboard-widgets #postbox-container-4 { + float: right; + width: 50.5%; +} + +#dashboard-widgets #postbox-container-3 .empty-container, +#dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; +} + +.wp-editor-wrap .wp-editor-tools, +.wp-editor-wrap .wp-switch-editor, +.wp-editor-wrap .wp-editor-tabs, +.wp-editor-wrap .wp-editor-container { + zoom: 100%; +} + +.wp-editor-wrap .wp-editor-container textarea.wp-editor-area { + width: 97%; +} + +#post-body.columns-2 #postbox-container-1 { + padding-left: 19px; +} + +.welcome-panel .wp-badge { + position: absolute; +} + +.welcome-panel .welcome-panel-column:first-child { + width: 35%; +} + +#wp-fullscreen-title { + width: 97%; +} + +#wp_mce_fullscreen_ifr { + background-color: #f9f9f9; +} + +#wp-fullscreen-tagline { + color: #888; + font-size: 14px; +} + +#adminmenuback { + left: 0; + background-image: none; +} + +#adminmenuwrap { + position: static; +} + +#adminmenu { + position: relative; +} + +#adminmenu, +#adminmenu a { + cursor: pointer; +} + +#adminmenu li.wp-menu-separator, +#adminmenu li.wp-menu-separator-last { + font-size: 1px; + line-height: 1; +} + +#adminmenu a.menu-top { + border-bottom: 0 none; + border-top: 1px solid #ddd; +} + +#adminmenu .separator { + font-size: 1px; + line-height: 1px; +} + +#adminmenu .wp-submenu { + left: 110px; +} + +#adminmenu .wp-submenu ul { + margin: 0; +} + +.folded #wpcontent, +.folded #wpfooter { + margin-left: 170px; +} + +.folded #adminmenuback, +.folded #adminmenuwrap, +.folded #adminmenu, +.folded #adminmenu li.menu-top { + width: 150px; +} + +.folded #adminmenu .wp-submenu { + border-top-color: transparent; +} + +.folded #adminmenu .wp-menu-name { + display: block; +} + +.folded #adminmenu .wp-submenu.sub-open, +.folded #adminmenu .opensub .wp-submenu { + left: 110px; +} + +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + top: -1px; + position: relative; +} + +.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head { + background-color: transparent; +} + +#adminmenu .wp-submenu .wp-submenu-head { + border-top-color: #ddd; +} + +.folded #adminmenu .wp-submenu ul { + margin-left: 5px; +} + +#adminmenu li.menu-top { + margin-bottom: -2px; +} + +#adminmenu .wp-menu-arrow { + display: none !important; +} + +.js.folded #adminmenu li.menu-top { + display: block; + zoom: 100%; +} + +ul#adminmenu { + z-index: 99; +} + +#adminmenu li.menu-top a.menu-top { + min-width: auto; + width: auto; +} + +#wpcontent #adminmenu li.wp-has-current-submenu a.wp-has-submenu { + font-style: normal; +} + +#wpcontent #adminmenu .wp-submenu li { + padding: 0; +} + +#adminmenu li.wp-has-current-submenu .wp-submenu { + left: -40px; +} + +#adminmenu .wp-menu-image { + display: none !important; +} + +#adminmenu a.menu-top .wp-menu-name { + padding-left: 8px; +} + +#collapse-menu { + line-height: 23px; +} + +#wpadminbar .ab-comments-icon { + padding-top: 7px; +} + + +.theme-browser .theme { + width: 30%; + margin: 0 3% 4% 0; + cursor: auto; +} + +.theme-browser .theme:hover, +.theme-browser .theme:focus { + cursor: auto; +} + +.theme-browser .theme .theme-screenshot { + height: 180px; + min-width: +} + +.theme-browser .theme .theme-actions { + position: static; + background-color: #e8e8e8; +} + +.theme-browser .theme .more-details { + display: none; +} + +.plugins td, +.plugins th { + border-top: 1px solid #ddd; +} + +table.fixed th, +table.fixed td { + border-top: 1px solid #ddd; +} + +#wpbody-content input.button, +#wpbody-content input.button-primary, +#wpbody-content input.button-secondary { + overflow: visible; +} + +#dashboard-widgets h3 a { + height: 14px; + line-height: 14px; +} + +#dashboard_browser_nag { + color: #fff; +} + +#dashboard_browser_nag .browser-icon { + position: relative; +} + +.tablenav-pages .current-page { + vertical-align: middle; +} + +#wpbody-content .postbox { + border: 1px solid #dfdfdf; +} + +#wpbody-content .postbox h3 { + margin-bottom: -1px; +} + +.major-publishing-actions, +.wp-submenu, +.wp-submenu li, +#template, +#template div, +#editcat, +#addcat { + zoom: 100%; +} + +.wp-menu-arrow { + height: 28px; +} + +.submitbox { + margin-top: 10px; +} + +/* Inline Editor */ +#wpbody-content .quick-edit-row-post .inline-edit-col-left { + width: 39%; +} + +#wpbody-content .inline-edit-row-post .inline-edit-col-center { + width: 19%; +} + +#wpbody-content .quick-edit-row-page .inline-edit-col-left { + width: 49%; +} + +#wpbody-content .bulk-edit-row .inline-edit-col-left { + width: 29%; +} + +.inline-edit-row p.submit { + zoom: 100%; +} + +.inline-edit-row fieldset label span.title { + display: block; + float: left; + width: 5em; +} + +.inline-edit-row fieldset label span.input-text-wrap { + margin-left: 0; + zoom: 100%; +} + +#wpbody-content .inline-edit-row fieldset label span.input-text-wrap input { + line-height: 130%; +} + +#wpbody-content .inline-edit-row .input-text-wrap input { + width: 95%; +} + +#wpbody-content .inline-edit-row .input-text-wrap input.inline-edit-password-input { + width: 8em; +} +/* end Inline Editor */ + +#titlediv #title { + width: 98%; +} + +.button, +input[type="reset"], +input[type="button"], +input[type="submit"] { + padding: 0 8px; + line-height: 20px; + height: auto; +} + +.button.button-large, +input[type="reset"].button-large, +input[type="button"].button-large, +input[type="submit"].button-large { + padding: 0 10px; + line-height: 24px; + height: auto; +} + +.button.button-small, +input[type="reset"].button-small, +input[type="button"].button-small, +input[type="submit"].button-small { + padding: 0 6px; + line-height: 16px; + height: auto; +} + +a.button { + margin: 1px; + padding: 1px 9px 2px; +} + +a.button.button-large { + padding: 1px 11px 2px; +} + +a.button.button-small { + padding: 1px 7px 2px; +} + +#screen-options-wrap { + overflow: hidden; +} + +#the-comment-list .comment-item, +#post-status-info, +#wpwrap, +#wrap, +#postdivrich, +#postdiv, +#poststuff, +.metabox-holder, +#titlediv, +#post-body, +#editorcontainer, +.tablenav, +.widget-liquid-left, +.widget-liquid-right, +#widgets-left, +.widgets-sortables, +#dragHelper, +.widget .widget-top, +.widget-control-actions, +.tagchecklist, +#col-container, +#col-left, +#col-right, +.fileedit-sub { + display: block; + zoom: 100%; +} + +p.search-box { + position: static; + float: right; + margin: -3px 0 4px; +} + +#widget-list .widget, +.feature-filter .feature-group li { + display: inline; +} + +.feature-filter .feature-group li input { + vertical-align: middle; +} + +#editorcontainer #content { + overflow: auto; + margin: auto; + width: 98%; +} + +form#template div { + width: 100%; +} + +.wp-editor-container .quicktags-toolbar input { + overflow: visible; + padding: 0 4px; +} + +#poststuff h2 { + font-size: 1.6em; +} + +#poststuff .inside #parent_id, +#poststuff .inside #page_template, +.inline-edit-row #post_parent, +.inline-edit-row select[name="page_template"] { + width: 250px; +} + +#submitdiv input, +#submitdiv select, +#submitdiv a.button { + position: relative; +} + +#bh { + margin: 7px 10px 0 0; + float: right; +} + +/* without this dashboard widgets appear in one column for some screen widths */ +div#dashboard-widgets { + padding-right: 1px; +} + +.tagchecklist span, .tagchecklist span a { + display: inline-block; + display: block; +} + +.tablenav .button-secondary, +.nav .button-secondary { + padding-top: 2px; + padding-bottom: 2px; +} + +.tablenav select { + font-size: 13px; + display: inline-block; + vertical-align: top; + margin-top: 2px; +} + +.tablenav .actions select { + width: 155px; +} + +.subsubsub li { + display: inline; +} + +a.post-state-format { + text-indent: 0; + line-height: 0; + font-size: 0; +} + +table.ie-fixed { + table-layout: fixed; +} + +.widefat tr, +.widefat th { + margin-bottom: 0; + border-spacing: 0; +} + +.widefat th input { + margin: 0 0 0 5px; +} + +.widefat thead .check-column, +.widefat tfoot .check-column { + padding-top: 6px; +} + +.widefat tbody th.check-column, +.media.widefat tbody th.check-column { + padding: 4px 0 0; +} + +.widefat { + empty-cells: show; + border-collapse: collapse; +} + +.tablenav a.button-secondary { + display: inline-block; + padding: 2px 5px; +} + +.inactive-sidebar .widgets-sortables { + padding-bottom: 8px; +} + +#available-widgets .widget-holder { + padding-bottom: 65px; +} + +#widgets-left .inactive { + padding-bottom: 10px; +} + +.widget-liquid-right .widget, +.inactive-sidebar .widget { + position: relative; +} + +.inactive-sidebar .widget { + display: block; + float: left; +} + +#wpcontent .button-primary-disabled { + color: #9FD0D5; + background: #298CBA; +} + +#the-comment-list .unapproved tr, +#the-comment-list .unapproved td { + background-color: #ffffe0; +} + +.imgedit-submit { + width: 300px; +} + +#nav-menus-frame, +#wpbody, +.menu li { + zoom: 100%; +} + +#update-nav-menu #post-body { + overflow:hidden; +} + +.menu li { + min-width: 100%; +} + +.menu li.sortable-placeholder { + min-width: 400px; +} + +.available-theme { + display: inline; +} + +.available-theme ul { + margin: 0; +} + +.available-theme .action-links li { + padding-right: 7px; + margin-right: 7px; +} + +.about-wrap .three-col.about-updates .col-2 { + width: 15%; +} + +.about-wrap .about-password-meter input { + width: 98%; +} + +.revisions-tickmarks, +.revisions-tooltip { + display: none !important; +} + +.revisions.pinned .revisions-controls { + position: relative; +} + +input[type="password"], +.login form .input { + font-family: sans-serif; +} + +/* IE6 leftovers */ +* html .row-actions { + visibility: visible; +} + +* html div.widget-liquid-left, +* html div.widget-liquid-right { + display: block; + position: relative; +} + +* html #editorcontainer { + padding: 0; +} + +* html #poststuff h2 { + margin-left: 0; +} + +* html .stuffbox, +* html .stuffbox input, +* html .stuffbox textarea { + border: 1px solid #DFDFDF; +} + +* html .feature-filter .feature-group li { + width: 145px; +} + +* html div.widget-liquid-left { + width: 99%; +} + +* html .widgets-sortables { + height: 50px; +} + +* html a#content_resize { + right: -2px; +} + +* html .widget-title h4 { + width: 205px; +} + +* html #removing-widget .in-widget-title { + display: none; +} + +* html .media-item .pinkynail { + height: 32px; + width: 40px; +} + +* html .describe .field input.text, +* html .describe .field textarea { + width: 440px; +} + +* html input { + border: 1px solid #dfdfdf; +} + +* html .edit-box { + display: inline; +} + +* html .postbox-container .meta-box-sortables { + height: 300px; +} + +* html #wpbody-content #screen-options-link-wrap { + display: inline-block; + width: 150px; + text-align: center; +} + +* html #wpbody-content #contextual-help-link-wrap { + display: inline-block; + width: 100px; + text-align: center; +} + +* html #adminmenu { + margin-left: -80px; +} + +* html .folded #adminmenu { + margin-left: -22px; +} + +* html #wpcontent #adminmenu li.menu-top { + display: inline; + padding: 0; + margin: 0; +} + +* html #wpfooter { + margin: 0; +} + +* html #adminmenu div.wp-menu-image { + height: 29px; +} diff --git a/src/wp-admin/css/ie.min.css b/src/wp-admin/css/ie.min.css new file mode 100644 index 0000000..3c37396 --- /dev/null +++ b/src/wp-admin/css/ie.min.css @@ -0,0 +1 @@ +#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:99%}#dashboard-widgets form #title{width:98%}#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}.wp-editor-wrap .wp-editor-tools,.wp-editor-wrap .wp-switch-editor,.wp-editor-wrap .wp-editor-tabs,.wp-editor-wrap .wp-editor-container{zoom:100%}.wp-editor-wrap .wp-editor-container textarea.wp-editor-area{width:97%}#post-body.columns-2 #postbox-container-1{padding-left:19px}.welcome-panel .wp-badge{position:absolute}.welcome-panel .welcome-panel-column:first-child{width:35%}#wp-fullscreen-title{width:97%}#wp_mce_fullscreen_ifr{background-color:#f9f9f9}#wp-fullscreen-tagline{color:#888;font-size:14px}#adminmenuback{left:0;background-image:none}#adminmenuwrap{position:static}#adminmenu{position:relative}#adminmenu,#adminmenu a{cursor:pointer}#adminmenu li.wp-menu-separator,#adminmenu li.wp-menu-separator-last{font-size:1px;line-height:1}#adminmenu a.menu-top{border-bottom:0 none;border-top:1px solid #ddd}#adminmenu .separator{font-size:1px;line-height:1px}#adminmenu .wp-submenu{left:110px}#adminmenu .wp-submenu ul{margin:0}.folded #wpcontent,.folded #wpfooter{margin-left:170px}.folded #adminmenuback,.folded #adminmenuwrap,.folded #adminmenu,.folded #adminmenu li.menu-top{width:150px}.folded #adminmenu .wp-submenu{border-top-color:transparent}.folded #adminmenu .wp-menu-name{display:block}.folded #adminmenu .wp-submenu.sub-open,.folded #adminmenu .opensub .wp-submenu{left:110px}.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{top:-1px;position:relative}.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{background-color:transparent}#adminmenu .wp-submenu .wp-submenu-head{border-top-color:#ddd}.folded #adminmenu .wp-submenu ul{margin-left:5px}#adminmenu li.menu-top{margin-bottom:-2px}#adminmenu .wp-menu-arrow{display:none!important}.js.folded #adminmenu li.menu-top{display:block;zoom:100%}ul#adminmenu{z-index:99}#adminmenu li.menu-top a.menu-top{min-width:auto;width:auto}#wpcontent #adminmenu li.wp-has-current-submenu a.wp-has-submenu{font-style:normal}#wpcontent #adminmenu .wp-submenu li{padding:0}#adminmenu li.wp-has-current-submenu .wp-submenu{left:-40px}#adminmenu .wp-menu-image{display:none!important}#adminmenu a.menu-top .wp-menu-name{padding-left:8px}#collapse-menu{line-height:23px}#wpadminbar .ab-comments-icon{padding-top:7px}.theme-browser .theme{width:30%;margin:0 3% 4% 0;cursor:auto}.theme-browser .theme:hover,.theme-browser .theme:focus{cursor:auto}.theme-browser .theme .theme-screenshot{height:180px;min-width:}.theme-browser .theme .theme-actions{position:static;background-color:#e8e8e8}.theme-browser .theme .more-details{display:none}.plugins td,.plugins th{border-top:1px solid #ddd}table.fixed th,table.fixed td{border-top:1px solid #ddd}#wpbody-content input.button,#wpbody-content input.button-primary,#wpbody-content input.button-secondary{overflow:visible}#dashboard-widgets h3 a{height:14px;line-height:14px}#dashboard_browser_nag{color:#fff}#dashboard_browser_nag .browser-icon{position:relative}.tablenav-pages .current-page{vertical-align:middle}#wpbody-content .postbox{border:1px solid #dfdfdf}#wpbody-content .postbox h3{margin-bottom:-1px}.major-publishing-actions,.wp-submenu,.wp-submenu li,#template,#template div,#editcat,#addcat{zoom:100%}.wp-menu-arrow{height:28px}.submitbox{margin-top:10px}#wpbody-content .quick-edit-row-post .inline-edit-col-left{width:39%}#wpbody-content .inline-edit-row-post .inline-edit-col-center{width:19%}#wpbody-content .quick-edit-row-page .inline-edit-col-left{width:49%}#wpbody-content .bulk-edit-row .inline-edit-col-left{width:29%}.inline-edit-row p.submit{zoom:100%}.inline-edit-row fieldset label span.title{display:block;float:left;width:5em}.inline-edit-row fieldset label span.input-text-wrap{margin-left:0;zoom:100%}#wpbody-content .inline-edit-row fieldset label span.input-text-wrap input{line-height:130%}#wpbody-content .inline-edit-row .input-text-wrap input{width:95%}#wpbody-content .inline-edit-row .input-text-wrap input.inline-edit-password-input{width:8em}#titlediv #title{width:98%}.button,input[type=reset],input[type=button],input[type=submit]{padding:0 8px;line-height:20px;height:auto}.button.button-large,input[type=reset].button-large,input[type=button].button-large,input[type=submit].button-large{padding:0 10px;line-height:24px;height:auto}.button.button-small,input[type=reset].button-small,input[type=button].button-small,input[type=submit].button-small{padding:0 6px;line-height:16px;height:auto}a.button{margin:1px;padding:1px 9px 2px}a.button.button-large{padding:1px 11px 2px}a.button.button-small{padding:1px 7px 2px}#screen-options-wrap{overflow:hidden}#the-comment-list .comment-item,#post-status-info,#wpwrap,#wrap,#postdivrich,#postdiv,#poststuff,.metabox-holder,#titlediv,#post-body,#editorcontainer,.tablenav,.widget-liquid-left,.widget-liquid-right,#widgets-left,.widgets-sortables,#dragHelper,.widget .widget-top,.widget-control-actions,.tagchecklist,#col-container,#col-left,#col-right,.fileedit-sub{display:block;zoom:100%}p.search-box{position:static;float:right;margin:-3px 0 4px}#widget-list .widget,.feature-filter .feature-group li{display:inline}.feature-filter .feature-group li input{vertical-align:middle}#editorcontainer #content{overflow:auto;margin:auto;width:98%}form#template div{width:100%}.wp-editor-container .quicktags-toolbar input{overflow:visible;padding:0 4px}#poststuff h2{font-size:1.6em}#poststuff .inside #parent_id,#poststuff .inside #page_template,.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{width:250px}#submitdiv input,#submitdiv select,#submitdiv a.button{position:relative}#bh{margin:7px 10px 0 0;float:right}div#dashboard-widgets{padding-right:1px}.tagchecklist span,.tagchecklist span a{display:inline-block;display:block}.tablenav .button-secondary,.nav .button-secondary{padding-top:2px;padding-bottom:2px}.tablenav select{font-size:13px;display:inline-block;vertical-align:top;margin-top:2px}.tablenav .actions select{width:155px}.subsubsub li{display:inline}a.post-state-format{text-indent:0;line-height:0;font-size:0}table.ie-fixed{table-layout:fixed}.widefat tr,.widefat th{margin-bottom:0;border-spacing:0}.widefat th input{margin:0 0 0 5px}.widefat thead .check-column,.widefat tfoot .check-column{padding-top:6px}.widefat tbody th.check-column,.media.widefat tbody th.check-column{padding:4px 0 0}.widefat{empty-cells:show;border-collapse:collapse}.tablenav a.button-secondary{display:inline-block;padding:2px 5px}.inactive-sidebar .widgets-sortables{padding-bottom:8px}#available-widgets .widget-holder{padding-bottom:65px}#widgets-left .inactive{padding-bottom:10px}.widget-liquid-right .widget,.inactive-sidebar .widget{position:relative}.inactive-sidebar .widget{display:block;float:left}#wpcontent .button-primary-disabled{color:#9FD0D5;background:#298CBA}#the-comment-list .unapproved tr,#the-comment-list .unapproved td{background-color:#ffffe0}.imgedit-submit{width:300px}#nav-menus-frame,#wpbody,.menu li{zoom:100%}#update-nav-menu #post-body{overflow:hidden}.menu li{min-width:100%}.menu li.sortable-placeholder{min-width:400px}.available-theme{display:inline}.available-theme ul{margin:0}.available-theme .action-links li{padding-right:7px;margin-right:7px}.about-wrap .three-col.about-updates .col-2{width:15%}.about-wrap .about-password-meter input{width:98%}.revisions-tickmarks,.revisions-tooltip{display:none!important}.revisions.pinned .revisions-controls{position:relative}input[type=password],.login form .input{font-family:sans-serif}* html .row-actions{visibility:visible}* html div.widget-liquid-left,* html div.widget-liquid-right{display:block;position:relative}* html #editorcontainer{padding:0}* html #poststuff h2{margin-left:0}* html .stuffbox,* html .stuffbox input,* html .stuffbox textarea{border:1px solid #DFDFDF}* html .feature-filter .feature-group li{width:145px}* html div.widget-liquid-left{width:99%}* html .widgets-sortables{height:50px}* html a#content_resize{right:-2px}* html .widget-title h4{width:205px}* html #removing-widget .in-widget-title{display:none}* html .media-item .pinkynail{height:32px;width:40px}* html .describe .field input.text,* html .describe .field textarea{width:440px}* html input{border:1px solid #dfdfdf}* html .edit-box{display:inline}* html .postbox-container .meta-box-sortables{height:300px}* html #wpbody-content #screen-options-link-wrap{display:inline-block;width:150px;text-align:center}* html #wpbody-content #contextual-help-link-wrap{display:inline-block;width:100px;text-align:center}* html #adminmenu{margin-left:-80px}* html .folded #adminmenu{margin-left:-22px}* html #wpcontent #adminmenu li.menu-top{display:inline;padding:0;margin:0}* html #wpfooter{margin:0}* html #adminmenu div.wp-menu-image{height:29px} \ No newline at end of file diff --git a/src/wp-admin/css/install-rtl.min.css b/src/wp-admin/css/install-rtl.min.css new file mode 100644 index 0000000..c2d400a --- /dev/null +++ b/src/wp-admin/css/install-rtl.min.css @@ -0,0 +1 @@ +html{background:#eee;margin:0 20px}body{background:#fff;color:#555;font-family:"Open Sans",sans-serif;margin:140px auto 25px;padding:20px 20px 10px;max-width:700px;-webkit-font-smoothing:subpixel-antialiased;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}a{color:#0074a2;text-decoration:none}a:hover{color:#2ea2cc}h1{border-bottom:1px solid #dedede;clear:both;color:#666;font-size:24px;margin:30px 0;padding:0;padding-bottom:7px;font-weight:400}h2{font-size:16px}p,li,dd,dt{padding-bottom:2px;font-size:14px;line-height:1.5}code,.code{font-family:Consolas,Monaco,monospace}ul,ol,dl{padding:5px 22px 5px 5px}a img{border:0}abbr{border:0;font-variant:normal}#logo{margin:6px 0 14px;border-bottom:0;text-align:center}#logo a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);background-size:80px 80px;background-position:center top;background-repeat:no-repeat;color:#999;height:80px;font-size:20px;font-weight:400;line-height:1.3em;margin:-130px auto 25px;padding:0;text-decoration:none;width:80px;text-indent:-9999px;outline:0;overflow:hidden;display:block}.step{margin:20px 0 15px}.step,th{text-align:right;padding:0}.step .button-large{font-size:14px}textarea{border:1px solid #dfdfdf;font-family:"Open Sans",sans-serif;width:100%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.form-table{border-collapse:collapse;margin-top:1em;width:100%}.form-table td{margin-bottom:9px;padding:10px 0 10px 20px;border-bottom:8px solid #fff;font-size:14px;vertical-align:top}.form-table th{font-size:14px;text-align:right;padding:16px 0 10px 20px;width:140px;vertical-align:top}.form-table code{line-height:18px;font-size:14px}.form-table p{margin:4px 0 0;font-size:11px}.form-table input{line-height:20px;font-size:15px;padding:3px 5px;border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}input,submit{font-family:"Open Sans",sans-serif}.form-table input[type=text],.form-table input[type=password]{width:206px}.form-table th p{font-weight:400}.form-table.install-success td{vertical-align:middle;padding:16px 0 10px 20px}.form-table.install-success td p{margin:0;font-size:14px}.form-table.install-success td code{margin:0;font-size:18px}#error-page{margin-top:50px}#error-page p{font-size:14px;line-height:18px;margin:25px 0 20px}#error-page code,.code{font-family:Consolas,Monaco,monospace}#pass-strength-result{background-color:#eee;border-color:#ddd!important;border-style:solid;border-width:1px;margin:5px 0 5px 5px;padding:5px;text-align:center;width:200px;display:none}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}.message{border:1px solid #c00;padding:.5em .7em;margin:5px 0 15px;background-color:#ffebe8}#dbname,#uname,#pwd,#dbhost,#prefix,#user_login,#admin_email,#pass1,#pass2{direction:ltr}body.rtl,.rtl textarea,.rtl input,.rtl submit{font-family:Tahoma,sans-serif}:lang(he-il) body.rtl,:lang(he-il) .rtl textarea,:lang(he-il) .rtl input,:lang(he-il) .rtl submit{font-family:Arial,sans-serif}@media only screen and (max-width:799px){body{margin-top:115px}#logo a{margin:-125px auto 30px}}@media screen and (max-width:782px){.form-table{margin-top:0}.form-table th,.form-table td{display:block;width:auto;vertical-align:middle}.form-table th{padding:20px 0 0}.form-table td{padding:5px 0;border:0;margin:0}textarea,input{font-size:16px}.form-table td input[type=text],.form-table td input[type=password],.form-table td select,.form-table td textarea,.form-table span.description{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;box-sizing:border-box;-moz-box-sizing:border-box}} \ No newline at end of file diff --git a/src/wp-admin/css/install.css b/src/wp-admin/css/install.css new file mode 100644 index 0000000..336538e --- /dev/null +++ b/src/wp-admin/css/install.css @@ -0,0 +1,311 @@ +html { + background: #eee; + margin: 0 20px; +} + +body { + background: #fff; + color: #555; + font-family: "Open Sans", sans-serif; + margin: 140px auto 25px; + padding: 20px 20px 10px 20px; + max-width: 700px; + -webkit-font-smoothing: subpixel-antialiased; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13); + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +a { + color: #0074a2; + text-decoration: none; +} + +a:hover { + color: #2ea2cc; +} + +h1 { + border-bottom: 1px solid #dedede; + clear: both; + color: #666; + font-size: 24px; + margin: 30px 0; + padding: 0; + padding-bottom: 7px; + font-weight: normal; +} + +h2 { + font-size: 16px; +} + +p, li, dd, dt { + padding-bottom: 2px; + font-size: 14px; + line-height: 1.5; +} + +code, .code { + font-family: Consolas, Monaco, monospace; +} + +ul, ol, dl { + padding: 5px 5px 5px 22px; +} + +a img { + border:0 +} +abbr { + border: 0; + font-variant: normal; +} +#logo { + margin: 6px 0 14px 0; + border-bottom: none; + text-align:center +} +#logo a { + background-image: url('../images/w-logo-blue.png?ver=20131202'); + background-image: none, url('../images/wordpress-logo.svg?ver=20131107'); + background-size: 80px 80px; + background-position: center top; + background-repeat: no-repeat; + color: #999; + height: 80px; + font-size: 20px; + font-weight: normal; + line-height: 1.3em; + margin: -130px auto 25px; + padding: 0; + text-decoration: none; + width: 80px; + text-indent: -9999px; + outline: none; + overflow: hidden; + display: block; +} +.step { + margin: 20px 0 15px; +} +.step, th { + text-align: left; + padding: 0; +} +.step .button-large { + font-size: 14px; +} +textarea { + border: 1px solid #dfdfdf; + font-family: "Open Sans", sans-serif; + width: 100%; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; /* ie8 only */ + box-sizing: border-box; +} + +.form-table { + border-collapse: collapse; + margin-top: 1em; + width: 100%; +} + +.form-table td { + margin-bottom: 9px; + padding: 10px 20px 10px 0; + border-bottom: 8px solid #fff; + font-size: 14px; + vertical-align: top +} + +.form-table th { + font-size: 14px; + text-align: left; + padding: 16px 20px 10px 0; + width: 140px; + vertical-align: top; +} + +.form-table code { + line-height: 18px; + font-size: 14px; +} + +.form-table p { + margin: 4px 0 0 0; + font-size: 11px; +} + +.form-table input { + line-height: 20px; + font-size: 15px; + padding: 3px 5px; + border: 1px solid #ddd; + box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); +} + +input, +submit { + font-family: "Open Sans", sans-serif; +} + +.form-table input[type=text], +.form-table input[type=password] { + width: 206px; +} + +.form-table th p { + font-weight: normal; +} + +.form-table.install-success td { + vertical-align: middle; + padding: 16px 20px 10px 0; +} + +.form-table.install-success td p { + margin: 0; + font-size: 14px; +} + +.form-table.install-success td code { + margin: 0; + font-size: 18px; +} + +#error-page { + margin-top: 50px; +} + +#error-page p { + font-size: 14px; + line-height: 18px; + margin: 25px 0 20px; +} + +#error-page code, .code { + font-family: Consolas, Monaco, monospace; +} + +#pass-strength-result { + background-color: #eee; + border-color: #ddd !important; + border-style: solid; + border-width: 1px; + margin: 5px 5px 5px 0; + padding: 5px; + text-align: center; + width: 200px; + display: none; +} + +#pass-strength-result.bad { + background-color: #ffb78c; + border-color: #ff853c !important; +} + +#pass-strength-result.good { + background-color: #ffec8b; + border-color: #ffcc00 !important; +} + +#pass-strength-result.short { + background-color: #ffa0a0; + border-color: #f04040 !important; +} + +#pass-strength-result.strong { + background-color: #c3ff88; + border-color: #8dff1c !important; +} + +.message { + border: 1px solid #c00; + padding: 0.5em 0.7em; + margin: 5px 0 15px; + background-color: #ffebe8; +} + +/* @noflip */ +#dbname, +#uname, +#pwd, +#dbhost, +#prefix, +#user_login, +#admin_email, +#pass1, +#pass2 { + direction: ltr; +} + + +/* localization */ +body.rtl, +.rtl textarea, +.rtl input, +.rtl submit { + font-family: Tahoma, sans-serif; +} + +:lang(he-il) body.rtl, +:lang(he-il) .rtl textarea, +:lang(he-il) .rtl input, +:lang(he-il) .rtl submit { + font-family: Arial, sans-serif; +} + +@media only screen and (max-width: 799px) { + body { + margin-top: 115px; + } + #logo a { + margin: -125px auto 30px; + } +} + +@media screen and ( max-width: 782px ) { + + .form-table { + margin-top: 0; + } + + .form-table th, + .form-table td { + display: block; + width: auto; + vertical-align: middle; + } + + .form-table th { + padding: 20px 0 0; + } + + .form-table td { + padding: 5px 0; + border: 0; + margin: 0; + } + + textarea, + input { + font-size: 16px; + } + + .form-table td input[type="text"], + .form-table td input[type="password"], + .form-table td select, + .form-table td textarea, + .form-table span.description { + width: 100%; + font-size: 16px; + line-height: 1.5; + padding: 7px 10px; + display: block; + max-width: none; + box-sizing: border-box; + -moz-box-sizing: border-box; + } + +} diff --git a/src/wp-admin/css/install.min.css b/src/wp-admin/css/install.min.css new file mode 100644 index 0000000..9ca4638 --- /dev/null +++ b/src/wp-admin/css/install.min.css @@ -0,0 +1 @@ +html{background:#eee;margin:0 20px}body{background:#fff;color:#555;font-family:"Open Sans",sans-serif;margin:140px auto 25px;padding:20px 20px 10px;max-width:700px;-webkit-font-smoothing:subpixel-antialiased;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}a{color:#0074a2;text-decoration:none}a:hover{color:#2ea2cc}h1{border-bottom:1px solid #dedede;clear:both;color:#666;font-size:24px;margin:30px 0;padding:0;padding-bottom:7px;font-weight:400}h2{font-size:16px}p,li,dd,dt{padding-bottom:2px;font-size:14px;line-height:1.5}code,.code{font-family:Consolas,Monaco,monospace}ul,ol,dl{padding:5px 5px 5px 22px}a img{border:0}abbr{border:0;font-variant:normal}#logo{margin:6px 0 14px;border-bottom:0;text-align:center}#logo a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);background-size:80px 80px;background-position:center top;background-repeat:no-repeat;color:#999;height:80px;font-size:20px;font-weight:400;line-height:1.3em;margin:-130px auto 25px;padding:0;text-decoration:none;width:80px;text-indent:-9999px;outline:0;overflow:hidden;display:block}.step{margin:20px 0 15px}.step,th{text-align:left;padding:0}.step .button-large{font-size:14px}textarea{border:1px solid #dfdfdf;font-family:"Open Sans",sans-serif;width:100%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.form-table{border-collapse:collapse;margin-top:1em;width:100%}.form-table td{margin-bottom:9px;padding:10px 20px 10px 0;border-bottom:8px solid #fff;font-size:14px;vertical-align:top}.form-table th{font-size:14px;text-align:left;padding:16px 20px 10px 0;width:140px;vertical-align:top}.form-table code{line-height:18px;font-size:14px}.form-table p{margin:4px 0 0;font-size:11px}.form-table input{line-height:20px;font-size:15px;padding:3px 5px;border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}input,submit{font-family:"Open Sans",sans-serif}.form-table input[type=text],.form-table input[type=password]{width:206px}.form-table th p{font-weight:400}.form-table.install-success td{vertical-align:middle;padding:16px 20px 10px 0}.form-table.install-success td p{margin:0;font-size:14px}.form-table.install-success td code{margin:0;font-size:18px}#error-page{margin-top:50px}#error-page p{font-size:14px;line-height:18px;margin:25px 0 20px}#error-page code,.code{font-family:Consolas,Monaco,monospace}#pass-strength-result{background-color:#eee;border-color:#ddd!important;border-style:solid;border-width:1px;margin:5px 5px 5px 0;padding:5px;text-align:center;width:200px;display:none}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}.message{border:1px solid #c00;padding:.5em .7em;margin:5px 0 15px;background-color:#ffebe8}#dbname,#uname,#pwd,#dbhost,#prefix,#user_login,#admin_email,#pass1,#pass2{direction:ltr}body.rtl,.rtl textarea,.rtl input,.rtl submit{font-family:Tahoma,sans-serif}:lang(he-il) body.rtl,:lang(he-il) .rtl textarea,:lang(he-il) .rtl input,:lang(he-il) .rtl submit{font-family:Arial,sans-serif}@media only screen and (max-width:799px){body{margin-top:115px}#logo a{margin:-125px auto 30px}}@media screen and (max-width:782px){.form-table{margin-top:0}.form-table th,.form-table td{display:block;width:auto;vertical-align:middle}.form-table th{padding:20px 0 0}.form-table td{padding:5px 0;border:0;margin:0}textarea,input{font-size:16px}.form-table td input[type=text],.form-table td input[type=password],.form-table td select,.form-table td textarea,.form-table span.description{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;box-sizing:border-box;-moz-box-sizing:border-box}} \ No newline at end of file diff --git a/src/wp-admin/css/media-rtl.css b/src/wp-admin/css/media-rtl.css new file mode 100644 index 0000000..e56850c --- /dev/null +++ b/src/wp-admin/css/media-rtl.css @@ -0,0 +1,372 @@ +/* Styles for the media library iframe (not used on the Library screen) */ + +div#media-upload-header { + margin: 0; + padding: 5px 5px 0; + font-weight: bold; + position: relative; + border-bottom-width: 1px; + border-bottom-style: solid; +} + +body#media-upload ul#sidemenu { + font-weight: normal; + margin: 0 5px; + right: 0; + bottom: -1px; + float: none; + overflow: hidden; +} + +#media-upload:after { /* clearfix */ + content: ""; + display: table; + clear: both; +} + +#media-upload, +#media-upload .media-item .slidetoggle { + background: #fff; +} + +#media-upload .slidetoggle { + border-top-color: #dfdfdf; +} + +#media-upload input[type="radio"] { + padding: 0; +} + +form { + margin: 1em; +} + +#search-filter { + text-align: left; +} + +th { + position: relative; +} + +.media-upload-form label.form-help, td.help { + font-family: sans-serif; + font-style: italic; + font-weight: normal; +} + +.media-upload-form p.help { + margin: 0; + padding: 0; +} + +.media-upload-form fieldset { + width: 100%; + border: none; + text-align: justify; + margin: 0 0 1em 0; + padding: 0; +} + +/* specific to the image upload form */ + +.image-align-none-label { + background: url(../images/align-none.png) no-repeat center right; +} + +.image-align-left-label { + background: url(../images/align-left.png) no-repeat center right; +} + +.image-align-center-label { + background: url(../images/align-center.png) no-repeat center right; +} + +.image-align-right-label { + background: url(../images/align-right.png) no-repeat center right; +} + +tr.image-size td { + width: 460px; +} + +tr.image-size div.image-size-item { + margin: 0 0 5px; +} + +#library-form .progress, +#gallery-form .progress, +.insert-gallery, +.describe.startopen, +.describe.startclosed { + display: none; +} + +.media-item .thumbnail { + max-width: 128px; + max-height: 128px; +} + +thead.media-item-info tr { + background-color: transparent; +} + +.form-table thead.media-item-info { + border: 8px solid #fff; +} + +abbr.required { + text-decoration: none; + border: none; +} + +.describe label { + display: inline; +} + +.describe td.error { + padding: 2px 8px; +} + +.describe td.A1 { + width: 132px; +} + +.describe input[type="text"], +.describe textarea { + width: 460px; + border-width: 1px; + border-style: solid; +} + +/* Specific to Uploader */ + +#media-upload p.ml-submit { + padding: 1em 0; +} + +#media-upload p.help, +#media-upload label.help { + font-family: sans-serif; + font-style: italic; + font-weight: normal; +} + +#media-upload .ui-sortable .media-item { + cursor: move; +} + +#media-upload tr.image-size { + margin-bottom: 1em; + height: 3em; +} + +#media-upload #filter { + width: 623px; +} + +#media-upload #filter .subsubsub { + margin: 8px 0; +} + +#filter .tablenav select { + border-style: solid; + border-width: 1px; + padding: 2px; + vertical-align: top; + width: auto; +} + +#media-upload .del-attachment { + display: none; + margin: 5px 0; +} + +.menu_order { + float: left; + font-size: 11px; + margin: 10px 10px 0; +} + +.menu_order_input { + border: 1px solid #ddd; + font-size: 10px; + padding: 1px; + width: 23px; +} + +.ui-sortable-helper { + background-color: #fff; + border: 1px solid #aaa; + opacity: 0.6; + filter: alpha(opacity=60); +} + +#media-upload th.order-head { + width: 20%; + text-align: center; +} + +#media-upload th.actions-head { + width: 25%; + text-align: center; +} + +#media-upload a.wp-post-thumbnail { + margin: 0 20px; +} + +#media-upload .widefat { + width: 626px; + border-style: solid solid none; +} + +.sorthelper { + height: 37px; + width: 623px; + display: block; +} + +#gallery-settings th.label { + width: 160px; +} + +#gallery-settings #basic th.label { + padding: 5px 0 5px 5px; +} + +#gallery-settings .title { + clear: both; + padding: 0 0 3px; + font-size: 1.6em; + border-bottom: 1px solid #DADADA; +} + +h3.media-title { + font-size: 1.6em; +} + +h4.media-sub-title { + border-bottom: 1px solid #DADADA; + font-size: 1.3em; + margin: 12px; + padding: 0 0 3px; +} + +#gallery-settings .title, +h3.media-title, +h4.media-sub-title { + font-family: Georgia,"Times New Roman",Times,serif; + font-weight: normal; + color: #5A5A5A; +} + +#gallery-settings .describe td { + vertical-align: middle; + height: 3em; +} + +#gallery-settings .describe th.label { + padding-top: .5em; + text-align: right; +} + +#gallery-settings .describe { + padding: 5px; + width: 615px; + clear: both; + cursor: default; +} + +#gallery-settings .describe select { + width: 15em; +} + +#gallery-settings .describe select option, +#gallery-settings .describe td { + padding: 0; +} + +#gallery-settings label, +#gallery-settings legend { + font-size: 13px; + color: #464646; + margin-left: 15px; +} + +#gallery-settings .align .field label { + margin: 0 3px 0 1em; +} + +#gallery-settings p.ml-submit { + border-top: 1px solid #dfdfdf; +} + +#gallery-settings select#columns { + width: 6em; +} + +#sort-buttons { + font-size: 0.8em; + margin: 3px 0 -8px 25px; + text-align: left; + max-width: 625px; +} + +#sort-buttons a { + text-decoration: none; +} + +#sort-buttons #asc, +#sort-buttons #showall { + padding-right: 5px; +} + +#sort-buttons span { + margin-left: 25px; +} + +p.media-types { + margin: 1em; +} + +tr.not-image { + display: none; +} + +table.not-image tr.not-image { + display: table-row; +} + +table.not-image tr.image-only { + display: none; +} + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .image-align-none-label { + background-image: url("../images/align-none-2x.png?ver=20120916"); + background-size: 21px 15px; + } + + .image-align-left-label { + background-image: url("../images/align-left-2x.png?ver=20120916"); + background-size: 22px 15px; + } + + .image-align-center-label { + background-image: url("../images/align-center-2x.png?ver=20120916"); + background-size: 21px 15px; + } + + .image-align-right-label { + background-image: url("../images/align-right-2x.png?ver=20120916"); + background-size: 22px 15px; + } +} diff --git a/src/wp-admin/css/media-rtl.min.css b/src/wp-admin/css/media-rtl.min.css new file mode 100644 index 0000000..8e9c8cc --- /dev/null +++ b/src/wp-admin/css/media-rtl.min.css @@ -0,0 +1 @@ +div#media-upload-header{margin:0;padding:5px 5px 0;font-weight:700;position:relative;border-bottom-width:1px;border-bottom-style:solid}body#media-upload ul#sidemenu{font-weight:400;margin:0 5px;right:0;bottom:-1px;float:none;overflow:hidden}#media-upload:after{content:"";display:table;clear:both}#media-upload,#media-upload .media-item .slidetoggle{background:#fff}#media-upload .slidetoggle{border-top-color:#dfdfdf}#media-upload input[type=radio]{padding:0}form{margin:1em}#search-filter{text-align:left}th{position:relative}.media-upload-form label.form-help,td.help{font-family:sans-serif;font-style:italic;font-weight:400}.media-upload-form p.help{margin:0;padding:0}.media-upload-form fieldset{width:100%;border:0;text-align:justify;margin:0 0 1em;padding:0}.image-align-none-label{background:url(../images/align-none.png) no-repeat center right}.image-align-left-label{background:url(../images/align-left.png) no-repeat center right}.image-align-center-label{background:url(../images/align-center.png) no-repeat center right}.image-align-right-label{background:url(../images/align-right.png) no-repeat center right}tr.image-size td{width:460px}tr.image-size div.image-size-item{margin:0 0 5px}#library-form .progress,#gallery-form .progress,.insert-gallery,.describe.startopen,.describe.startclosed{display:none}.media-item .thumbnail{max-width:128px;max-height:128px}thead.media-item-info tr{background-color:transparent}.form-table thead.media-item-info{border:8px solid #fff}abbr.required{text-decoration:none;border:0}.describe label{display:inline}.describe td.error{padding:2px 8px}.describe td.A1{width:132px}.describe input[type=text],.describe textarea{width:460px;border-width:1px;border-style:solid}#media-upload p.ml-submit{padding:1em 0}#media-upload p.help,#media-upload label.help{font-family:sans-serif;font-style:italic;font-weight:400}#media-upload .ui-sortable .media-item{cursor:move}#media-upload tr.image-size{margin-bottom:1em;height:3em}#media-upload #filter{width:623px}#media-upload #filter .subsubsub{margin:8px 0}#filter .tablenav select{border-style:solid;border-width:1px;padding:2px;vertical-align:top;width:auto}#media-upload .del-attachment{display:none;margin:5px 0}.menu_order{float:left;font-size:11px;margin:10px 10px 0}.menu_order_input{border:1px solid #ddd;font-size:10px;padding:1px;width:23px}.ui-sortable-helper{background-color:#fff;border:1px solid #aaa;opacity:.6;filter:alpha(opacity=60)}#media-upload th.order-head{width:20%;text-align:center}#media-upload th.actions-head{width:25%;text-align:center}#media-upload a.wp-post-thumbnail{margin:0 20px}#media-upload .widefat{width:626px;border-style:solid solid none}.sorthelper{height:37px;width:623px;display:block}#gallery-settings th.label{width:160px}#gallery-settings #basic th.label{padding:5px 0 5px 5px}#gallery-settings .title{clear:both;padding:0 0 3px;font-size:1.6em;border-bottom:1px solid #DADADA}h3.media-title{font-size:1.6em}h4.media-sub-title{border-bottom:1px solid #DADADA;font-size:1.3em;margin:12px;padding:0 0 3px}#gallery-settings .title,h3.media-title,h4.media-sub-title{font-family:Georgia,"Times New Roman",Times,serif;font-weight:400;color:#5A5A5A}#gallery-settings .describe td{vertical-align:middle;height:3em}#gallery-settings .describe th.label{padding-top:.5em;text-align:right}#gallery-settings .describe{padding:5px;width:615px;clear:both;cursor:default}#gallery-settings .describe select{width:15em}#gallery-settings .describe select option,#gallery-settings .describe td{padding:0}#gallery-settings label,#gallery-settings legend{font-size:13px;color:#464646;margin-left:15px}#gallery-settings .align .field label{margin:0 3px 0 1em}#gallery-settings p.ml-submit{border-top:1px solid #dfdfdf}#gallery-settings select#columns{width:6em}#sort-buttons{font-size:.8em;margin:3px 0 -8px 25px;text-align:left;max-width:625px}#sort-buttons a{text-decoration:none}#sort-buttons #asc,#sort-buttons #showall{padding-right:5px}#sort-buttons span{margin-left:25px}p.media-types{margin:1em}tr.not-image{display:none}table.not-image tr.not-image{display:table-row}table.not-image tr.image-only{display:none}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.image-align-none-label{background-image:url(../images/align-none-2x.png?ver=20120916);background-size:21px 15px}.image-align-left-label{background-image:url(../images/align-left-2x.png?ver=20120916);background-size:22px 15px}.image-align-center-label{background-image:url(../images/align-center-2x.png?ver=20120916);background-size:21px 15px}.image-align-right-label{background-image:url(../images/align-right-2x.png?ver=20120916);background-size:22px 15px}} \ No newline at end of file diff --git a/src/wp-admin/css/media.css b/src/wp-admin/css/media.css new file mode 100644 index 0000000..2bc118c --- /dev/null +++ b/src/wp-admin/css/media.css @@ -0,0 +1,372 @@ +/* Styles for the media library iframe (not used on the Library screen) */ + +div#media-upload-header { + margin: 0; + padding: 5px 5px 0; + font-weight: bold; + position: relative; + border-bottom-width: 1px; + border-bottom-style: solid; +} + +body#media-upload ul#sidemenu { + font-weight: normal; + margin: 0 5px; + left: 0; + bottom: -1px; + float: none; + overflow: hidden; +} + +#media-upload:after { /* clearfix */ + content: ""; + display: table; + clear: both; +} + +#media-upload, +#media-upload .media-item .slidetoggle { + background: #fff; +} + +#media-upload .slidetoggle { + border-top-color: #dfdfdf; +} + +#media-upload input[type="radio"] { + padding: 0; +} + +form { + margin: 1em; +} + +#search-filter { + text-align: right; +} + +th { + position: relative; +} + +.media-upload-form label.form-help, td.help { + font-family: sans-serif; + font-style: italic; + font-weight: normal; +} + +.media-upload-form p.help { + margin: 0; + padding: 0; +} + +.media-upload-form fieldset { + width: 100%; + border: none; + text-align: justify; + margin: 0 0 1em 0; + padding: 0; +} + +/* specific to the image upload form */ + +.image-align-none-label { + background: url(../images/align-none.png) no-repeat center left; +} + +.image-align-left-label { + background: url(../images/align-left.png) no-repeat center left; +} + +.image-align-center-label { + background: url(../images/align-center.png) no-repeat center left; +} + +.image-align-right-label { + background: url(../images/align-right.png) no-repeat center left; +} + +tr.image-size td { + width: 460px; +} + +tr.image-size div.image-size-item { + margin: 0 0 5px; +} + +#library-form .progress, +#gallery-form .progress, +.insert-gallery, +.describe.startopen, +.describe.startclosed { + display: none; +} + +.media-item .thumbnail { + max-width: 128px; + max-height: 128px; +} + +thead.media-item-info tr { + background-color: transparent; +} + +.form-table thead.media-item-info { + border: 8px solid #fff; +} + +abbr.required { + text-decoration: none; + border: none; +} + +.describe label { + display: inline; +} + +.describe td.error { + padding: 2px 8px; +} + +.describe td.A1 { + width: 132px; +} + +.describe input[type="text"], +.describe textarea { + width: 460px; + border-width: 1px; + border-style: solid; +} + +/* Specific to Uploader */ + +#media-upload p.ml-submit { + padding: 1em 0; +} + +#media-upload p.help, +#media-upload label.help { + font-family: sans-serif; + font-style: italic; + font-weight: normal; +} + +#media-upload .ui-sortable .media-item { + cursor: move; +} + +#media-upload tr.image-size { + margin-bottom: 1em; + height: 3em; +} + +#media-upload #filter { + width: 623px; +} + +#media-upload #filter .subsubsub { + margin: 8px 0; +} + +#filter .tablenav select { + border-style: solid; + border-width: 1px; + padding: 2px; + vertical-align: top; + width: auto; +} + +#media-upload .del-attachment { + display: none; + margin: 5px 0; +} + +.menu_order { + float: right; + font-size: 11px; + margin: 10px 10px 0; +} + +.menu_order_input { + border: 1px solid #ddd; + font-size: 10px; + padding: 1px; + width: 23px; +} + +.ui-sortable-helper { + background-color: #fff; + border: 1px solid #aaa; + opacity: 0.6; + filter: alpha(opacity=60); +} + +#media-upload th.order-head { + width: 20%; + text-align: center; +} + +#media-upload th.actions-head { + width: 25%; + text-align: center; +} + +#media-upload a.wp-post-thumbnail { + margin: 0 20px; +} + +#media-upload .widefat { + width: 626px; + border-style: solid solid none; +} + +.sorthelper { + height: 37px; + width: 623px; + display: block; +} + +#gallery-settings th.label { + width: 160px; +} + +#gallery-settings #basic th.label { + padding: 5px 5px 5px 0; +} + +#gallery-settings .title { + clear: both; + padding: 0 0 3px; + font-size: 1.6em; + border-bottom: 1px solid #DADADA; +} + +h3.media-title { + font-size: 1.6em; +} + +h4.media-sub-title { + border-bottom: 1px solid #DADADA; + font-size: 1.3em; + margin: 12px; + padding: 0 0 3px; +} + +#gallery-settings .title, +h3.media-title, +h4.media-sub-title { + font-family: Georgia,"Times New Roman",Times,serif; + font-weight: normal; + color: #5A5A5A; +} + +#gallery-settings .describe td { + vertical-align: middle; + height: 3em; +} + +#gallery-settings .describe th.label { + padding-top: .5em; + text-align: left; +} + +#gallery-settings .describe { + padding: 5px; + width: 615px; + clear: both; + cursor: default; +} + +#gallery-settings .describe select { + width: 15em; +} + +#gallery-settings .describe select option, +#gallery-settings .describe td { + padding: 0; +} + +#gallery-settings label, +#gallery-settings legend { + font-size: 13px; + color: #464646; + margin-right: 15px; +} + +#gallery-settings .align .field label { + margin: 0 1em 0 3px; +} + +#gallery-settings p.ml-submit { + border-top: 1px solid #dfdfdf; +} + +#gallery-settings select#columns { + width: 6em; +} + +#sort-buttons { + font-size: 0.8em; + margin: 3px 25px -8px 0; + text-align: right; + max-width: 625px; +} + +#sort-buttons a { + text-decoration: none; +} + +#sort-buttons #asc, +#sort-buttons #showall { + padding-left: 5px; +} + +#sort-buttons span { + margin-right: 25px; +} + +p.media-types { + margin: 1em; +} + +tr.not-image { + display: none; +} + +table.not-image tr.not-image { + display: table-row; +} + +table.not-image tr.image-only { + display: none; +} + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .image-align-none-label { + background-image: url("../images/align-none-2x.png?ver=20120916"); + background-size: 21px 15px; + } + + .image-align-left-label { + background-image: url("../images/align-left-2x.png?ver=20120916"); + background-size: 22px 15px; + } + + .image-align-center-label { + background-image: url("../images/align-center-2x.png?ver=20120916"); + background-size: 21px 15px; + } + + .image-align-right-label { + background-image: url("../images/align-right-2x.png?ver=20120916"); + background-size: 22px 15px; + } +} diff --git a/src/wp-admin/css/media.min.css b/src/wp-admin/css/media.min.css new file mode 100644 index 0000000..83b3219 --- /dev/null +++ b/src/wp-admin/css/media.min.css @@ -0,0 +1 @@ +div#media-upload-header{margin:0;padding:5px 5px 0;font-weight:700;position:relative;border-bottom-width:1px;border-bottom-style:solid}body#media-upload ul#sidemenu{font-weight:400;margin:0 5px;left:0;bottom:-1px;float:none;overflow:hidden}#media-upload:after{content:"";display:table;clear:both}#media-upload,#media-upload .media-item .slidetoggle{background:#fff}#media-upload .slidetoggle{border-top-color:#dfdfdf}#media-upload input[type=radio]{padding:0}form{margin:1em}#search-filter{text-align:right}th{position:relative}.media-upload-form label.form-help,td.help{font-family:sans-serif;font-style:italic;font-weight:400}.media-upload-form p.help{margin:0;padding:0}.media-upload-form fieldset{width:100%;border:0;text-align:justify;margin:0 0 1em;padding:0}.image-align-none-label{background:url(../images/align-none.png) no-repeat center left}.image-align-left-label{background:url(../images/align-left.png) no-repeat center left}.image-align-center-label{background:url(../images/align-center.png) no-repeat center left}.image-align-right-label{background:url(../images/align-right.png) no-repeat center left}tr.image-size td{width:460px}tr.image-size div.image-size-item{margin:0 0 5px}#library-form .progress,#gallery-form .progress,.insert-gallery,.describe.startopen,.describe.startclosed{display:none}.media-item .thumbnail{max-width:128px;max-height:128px}thead.media-item-info tr{background-color:transparent}.form-table thead.media-item-info{border:8px solid #fff}abbr.required{text-decoration:none;border:0}.describe label{display:inline}.describe td.error{padding:2px 8px}.describe td.A1{width:132px}.describe input[type=text],.describe textarea{width:460px;border-width:1px;border-style:solid}#media-upload p.ml-submit{padding:1em 0}#media-upload p.help,#media-upload label.help{font-family:sans-serif;font-style:italic;font-weight:400}#media-upload .ui-sortable .media-item{cursor:move}#media-upload tr.image-size{margin-bottom:1em;height:3em}#media-upload #filter{width:623px}#media-upload #filter .subsubsub{margin:8px 0}#filter .tablenav select{border-style:solid;border-width:1px;padding:2px;vertical-align:top;width:auto}#media-upload .del-attachment{display:none;margin:5px 0}.menu_order{float:right;font-size:11px;margin:10px 10px 0}.menu_order_input{border:1px solid #ddd;font-size:10px;padding:1px;width:23px}.ui-sortable-helper{background-color:#fff;border:1px solid #aaa;opacity:.6;filter:alpha(opacity=60)}#media-upload th.order-head{width:20%;text-align:center}#media-upload th.actions-head{width:25%;text-align:center}#media-upload a.wp-post-thumbnail{margin:0 20px}#media-upload .widefat{width:626px;border-style:solid solid none}.sorthelper{height:37px;width:623px;display:block}#gallery-settings th.label{width:160px}#gallery-settings #basic th.label{padding:5px 5px 5px 0}#gallery-settings .title{clear:both;padding:0 0 3px;font-size:1.6em;border-bottom:1px solid #DADADA}h3.media-title{font-size:1.6em}h4.media-sub-title{border-bottom:1px solid #DADADA;font-size:1.3em;margin:12px;padding:0 0 3px}#gallery-settings .title,h3.media-title,h4.media-sub-title{font-family:Georgia,"Times New Roman",Times,serif;font-weight:400;color:#5A5A5A}#gallery-settings .describe td{vertical-align:middle;height:3em}#gallery-settings .describe th.label{padding-top:.5em;text-align:left}#gallery-settings .describe{padding:5px;width:615px;clear:both;cursor:default}#gallery-settings .describe select{width:15em}#gallery-settings .describe select option,#gallery-settings .describe td{padding:0}#gallery-settings label,#gallery-settings legend{font-size:13px;color:#464646;margin-right:15px}#gallery-settings .align .field label{margin:0 1em 0 3px}#gallery-settings p.ml-submit{border-top:1px solid #dfdfdf}#gallery-settings select#columns{width:6em}#sort-buttons{font-size:.8em;margin:3px 25px -8px 0;text-align:right;max-width:625px}#sort-buttons a{text-decoration:none}#sort-buttons #asc,#sort-buttons #showall{padding-left:5px}#sort-buttons span{margin-right:25px}p.media-types{margin:1em}tr.not-image{display:none}table.not-image tr.not-image{display:table-row}table.not-image tr.image-only{display:none}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.image-align-none-label{background-image:url(../images/align-none-2x.png?ver=20120916);background-size:21px 15px}.image-align-left-label{background-image:url(../images/align-left-2x.png?ver=20120916);background-size:22px 15px}.image-align-center-label{background-image:url(../images/align-center-2x.png?ver=20120916);background-size:21px 15px}.image-align-right-label{background-image:url(../images/align-right-2x.png?ver=20120916);background-size:22px 15px}} \ No newline at end of file diff --git a/src/wp-admin/css/wp-admin-rtl.css b/src/wp-admin/css/wp-admin-rtl.css new file mode 100644 index 0000000..5bd9f15 --- /dev/null +++ b/src/wp-admin/css/wp-admin-rtl.css @@ -0,0 +1,13175 @@ +/*------------------------------------------------------------------------------ + + +Hello, this is the main WordPress admin CSS file. +All the important stuff is in here. + + +TABLE OF CONTENTS: +------------------ + 1.0 - Text Elements + 2.0 - Forms + 3.0 - Actions + 4.0 - Notifications + 5.0 - TinyMCE + 6.0 - Admin Header + 6.1 - Screen Options Tabs + 6.2 - Help Menu + 7.0 - Main Navigation + 8.0 - Layout Blocks + 9.0 - Dashboard +10.0 - List Posts + 10.1 - Inline Editing +11.0 - Write/Edit Post Screen + 11.1 - Custom Fields + 11.2 - Post Revisions + 11.3 - Featured Images + 11.4 - Post Format Selection +12.0 - Categories +13.0 - Tags +14.0 - Media Screen + 14.1 - Media Library + 14.2 - Image Editor +15.0 - Comments Screen +16.0 - Themes + 16.1 - Manage Themes + 16.2 - Install Themes + 16.3 - Custom Header + 16.4 - Custom Background +17.0 - Plugins +18.0 - Users +19.0 - Tools +20.0 - Settings +21.0 - Admin Footer +22.0 - About Pages +23.0 - Full Overlay w/ Sidebar +24.0 - Customize Loader +25.0 - Tabbed Admin Screen Interface +26.0 - Misc +27.0 - Localization + +------------------------------------------------------------------------*/ + +/* 2 column liquid layout */ +#wpwrap { + height: auto; + min-height: 100%; + width: 100%; + position: relative; + -webkit-font-smoothing: subpixel-antialiased; +} + +#wpcontent { + height: 100%; +} + +#wpcontent, +#wpfooter { + margin-right: 180px; +} + +.folded #wpcontent, +.folded #wpfooter { + margin-right: 56px; +} + +#wpbody-content { + padding-bottom: 65px; + float: right; + width: 100%; + overflow: visible !important; +} + +#adminmenuback, +#adminmenuwrap, +#adminmenu, +#adminmenu .wp-submenu { + width: 160px; +} + +#adminmenuback { + position: absolute; + top: 0; + bottom: 0; + z-index: -1; +} + +#adminmenu { + clear: right; + margin: 12px 0 0; + padding: 0; + list-style: none; +} + +.folded #adminmenuback, +.folded #adminmenuwrap, +.folded #adminmenu, +.folded #adminmenu li.menu-top { + width: 36px; +} + +/* inner 2 column liquid layout */ + +.inner-sidebar { + float: left; + clear: left; + display: none; + width: 281px; + position: relative; +} + +.columns-2 .inner-sidebar { + margin-left: auto; + width: 286px; + display: block; +} + +.inner-sidebar #side-sortables, +.columns-2 .inner-sidebar #side-sortables { + min-height: 300px; + width: 280px; + padding: 0; +} + +.has-right-sidebar .inner-sidebar { + display: block; +} + +.has-right-sidebar #post-body { + float: right; + clear: right; + width: 100%; + margin-left: -2000px; +} + +.has-right-sidebar #post-body-content { + margin-left: 300px; + float: none; + width: auto; +} + +/* 2 columns main area */ + +#col-container, +#col-left, +#col-right { + overflow: hidden; + padding: 0; + margin: 0; +} + +#col-left { + width: 35%; +} + +#col-right { + float: left; + clear: left; + width: 65%; +} + +.col-wrap { + padding: 0 7px; +} + +/* utility classes */ +.alignleft { + float: right; +} + +.alignright { + float: left; +} + +.textleft { + text-align: right; +} + +.textright { + text-align: left; +} + +.clear { + clear: both; +} + +/* Hide visually but not from screen readers */ +.screen-reader-text, +.screen-reader-text span, +.ui-helper-hidden-accessible { + position: absolute; + margin: -1px; + padding: 0; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(0 0 0 0); + border: 0; +} + +.screen-reader-shortcut { + position: absolute; + top: -1000em; +} + +.screen-reader-shortcut:focus { + right: 6px; + top: -25px; + height: auto; + width: auto; + display: block; + font-size: 14px; + font-weight: 600; + padding: 15px 23px 14px; + background: #f1f1f1; + color: #21759b; + z-index: 100000; + line-height: normal; + -webkit-box-shadow: 0 0 2px 2px rgba(0,0,0,.6); + box-shadow: 0 0 2px 2px rgba(0,0,0,.6); + text-decoration: none; + outline: none; +} + +.hidden, +.js .closed .inside, +.js .hide-if-js, +.no-js .hide-if-no-js, +.js.wp-core-ui .hide-if-js, +.js .wp-core-ui .hide-if-js, +.no-js.wp-core-ui .hide-if-no-js, +.no-js .wp-core-ui .hide-if-no-js { + display: none; +} + +/* include margin and padding in the width calculation of input and textarea */ +input, +input[type="text"], +input[type="password"], +input[type="number"], +input[type="search"], +input[type="email"], +input[type="url"], +textarea { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; /* ie8 only */ + box-sizing: border-box; +} + +input[type="checkbox"], +input[type="radio"] { + border-width: 1px; + border-style: solid; + clear: none; + cursor: pointer; + display: inline-block; + line-height: 0; + height: 16px; + margin: -4px 0 0 4px; + outline: 0; + padding: 0 !important; + text-align: center; + vertical-align: middle; + width: 16px; + min-width: 16px; + -webkit-appearance: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +td > input[type="checkbox"], +.wp-admin p input[type=checkbox], +.wp-admin p input[type=radio] { + margin-top: 0; +} + +.wp-admin p label input[type=checkbox] { + margin-top: -4px; +} + +.wp-admin p label input[type=radio] { + margin-top: -2px; +} + +input[type=radio] { + border-radius: 50%; + margin-left: 4px; + line-height: 10px; +} + +input[type=checkbox]:disabled, +input[type=radio]:disabled, +input[type=checkbox]:disabled:checked:before, +input[type=radio]:disabled:checked:before { + opacity: 0.7; +} + +input[type=checkbox]:checked:before, +input[type=radio]:checked:before { + float: right; + display: inline-block; + vertical-align: middle; + width: 16px; + font: normal 21px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +input[type=checkbox]:checked:before { + content: '\f147'; + margin: -3px -4px 0 0; +} + +input[type=radio]:checked:before { + content: '\2022'; + text-indent: -9999px; + border-radius: 50px; + font-size: 24px; + width: 6px; + height: 6px; + margin: 4px; + line-height: 16px; +} + +@-moz-document url-prefix() { + input[type=checkbox], + input[type=radio], + .form-table input.tog { + margin-bottom: -1px; + } +} + +/* Search */ +input[type="search"] { + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration { + display: none; +} + +.ie8 input[type="password"], +.ie8 .login form .input { + font-family: sans-serif; +} + +/* general */ +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + +body { + font-family: "Open Sans", sans-serif; + font-size: 13px; + line-height: 1.4em; + min-width: 600px; +} + +body.iframe { + min-width: 0; + padding-top: 1px; +} + +body.login { + background: #fbfbfb; + min-width: 0; +} + +iframe, +img { + border: 0; +} + +td, +textarea, +input, +select, +button { + font-family: inherit; + font-size: inherit; + font-weight: inherit; +} + +td, +textarea { + line-height: inherit; +} + +textarea { + overflow: auto; +} + +textarea, +input, +select { + font-size: 14px; + padding: 3px 5px; + line-height: 15px; + border-radius: 0; /* Reset mobile webkit's default element styling */ +} + +textarea { + padding: 2px 6px; + line-height: 1.4; +} + +a, +input[type="text"], +input[type="password"], +input[type="number"], +input[type="search"], +input[type="email"], +input[type="url"], +textarea, +div, +select { + outline: 0; +} + +.wp-admin input[type="file"] { + padding: 3px 0; +} + +a:focus, +a:active { + outline: thin dotted; +} + +#adminmenu a:focus, +#adminmenu a:active, +.screen-reader-text:focus { + outline: none; +} + +blockquote, +q { + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; +} + +p, +.wp_attachment_details label[for="content"] { + font-size: 13px; + line-height: 1.5; + margin: 1em 0; +} + +blockquote { + margin: 1em; +} + +label { + cursor: pointer; +} + +li, +dd { + margin-bottom: 6px; +} + +input, +select { + margin: 1px; + padding: 3px 5px; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + display: block; + font-weight: 600; +} + +h1 { + font-size: 2em; + margin: .67em 0; +} + +h2 { + font-size: 1.5em; + margin: .83em 0; + font-weight: 400; +} + +h3 { + font-size: 1.3em; + margin: 1em 0; +} + +h4 { + font-size: 1em; + margin: 1.33em 0; +} + +h5 { + font-size: 0.83em; + margin: 1.67em 0; +} + +h6 { + font-size: 0.67em; + margin: 2.33em 0; +} + +ul, +ol { + padding: 0; +} + +ul { + list-style: none; +} + +ol { + list-style-type: decimal; + margin-right: 2em; +} + +ul.ul-disc { + list-style: disc outside; +} + +ul.ul-square { + list-style: square outside; +} + +ol.ol-decimal { + list-style: decimal outside; +} + +ul.ul-disc, +ul.ul-square, +ol.ol-decimal { + margin-right: 1.8em; +} + +ul.ul-disc > li, +ul.ul-square > li, +ol.ol-decimal > li { + margin: 0 0 0.5em; +} + +/* @noflip */ +.code, +code { + font-family: Consolas, Monaco, monospace; + direction: ltr; +} + +input.code { + padding-top: 6px; +} + +textarea.code { + line-height: 1.4; + padding: 4px 6px 1px 6px; +} + +kbd, +code { + padding: 3px 5px 2px 5px; + margin: 0 1px; + font-size: 13px; +} + +.subsubsub { + list-style: none; + margin: 8px 0 0; + padding: 0; + font-size: 13px; + float: right; +} + +.subsubsub a { + line-height: 2; + padding: .2em; + text-decoration: none; +} + +.subsubsub a .count, +.subsubsub a.current .count { + color: #999; + font-weight: normal; +} + +.subsubsub a.current { + font-weight: 600; + border: none; +} + +.subsubsub li { + display: inline-block; + margin: 0; + padding: 0; + white-space: nowrap; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="email"], +input[type="number"], +input[type="search"], +input[type="tel"], +input[type="url"], +select, +.tablenav-pages span.current, +#titlediv #title, +#postcustomstuff table, +#postcustomstuff input, +#postcustomstuff textarea, +.imgedit-menu div, +.plugin-update-tr .update-message, +#poststuff .inside .the-tagcloud, +.nav-menus-php .list-container, +.menu-item-handle, +.link-to-original, +.nav-menus-php .major-publishing-actions .form-invalid, +#TB_window, +.tbtitle, +.highlight { + border-width: 1px; + border-style: solid; +} + +/* .widefat - main style for tables */ +.widefat { + border-spacing: 0; + width: 100%; + clear: both; + margin: 0; +} + +.widefat * { + word-wrap: break-word; +} + +.widefat a { + text-decoration: none; +} + +.widefat td, +.widefat th { + padding: 8px 10px; +} +.widefat tfoot th { + border-bottom: none; +} + +.widefat .no-items td { + border-bottom-width: 0; +} + +.widefat td { + vertical-align: top; +} + +.widefat td, +.widefat td p, +.widefat td ol, +.widefat td ul { + font-size: 13px; + line-height: 1.5em; +} + +.widefat th { + text-align: right; + line-height: 1.3em; + font-size: 14px; +} + +.widefat th input { + margin: 0 8px 0 0; + padding: 0; + vertical-align: text-top; +} + +.widefat .check-column { + width: 2.2em; + padding: 6px 0 25px; + vertical-align: top; +} + +.widefat th input[type=checkbox] { + margin-top: -1px; +} + +.widefat tbody th.check-column { + padding: 9px 0 22px; +} + +.widefat.media .check-column { + padding-top: 8px; +} + +.widefat thead th.check-column, +.widefat tbody th.check-column, +.widefat tfoot th.check-column { + padding: 11px 3px 0 0; +} + +.widefat thead th.check-column { + padding-top: 10px; +} + +.plugins tbody th.check-column, +.plugins tbody { + padding: 8px 2px 0 0; +} + +.plugins tbody th.check-column input[type=checkbox] { + margin-top: 4px; +} + +#update-plugins-table tbody td p { + margin-top: 0; +} + +#update-plugins-table tbody td p strong { + font-size: 14px; +} + +.plugins thead th.check-column, +.plugins tfoot th.check-column, +.plugins .inactive th.check-column { + padding-right: 6px; +} + +.upgrade .plugins td, +.upgrade .plugins th { + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +.upgrade .plugins tr:last-of-type td, +.upgrade .plugins tr:last-of-type th { + -webkit-box-shadow: none; + box-shadow: none; +} + +#update-plugins-table thead th.check-column, +#update-plugins-table tfoot th.check-column { + padding-top: 11px; +} + +.update-php div.updated, +.update-php div.error { + margin-right: 0; +} + +.no-js .widefat thead .check-column input, +.no-js .widefat tfoot .check-column input { + display: none; +} + +.widefat .num, +.column-comments, +.column-links, +.column-posts { + text-align: center; +} + +.widefat th#comments { + vertical-align: middle; +} + +.wrap { + margin: 10px 2px 0 20px; +} + +div.updated, +div.error { + padding: 0 0.6em; + margin: 5px 15px 2px; +} + +div.updated p, +div.error p { + margin: 0.5em 0; + padding: 2px; +} + +.wrap div.updated, +.wrap div.error, +.media-upload-form div.error { + margin: 5px 0 15px; +} + +div.updated, +.login .message, +.press-this #message { + border: none; + padding: 1px 12px; +} + +div.error, +.login #login_error { + border: none; +} + +div.error { + padding: 1px 12px; +} + +.wrap h2, +.subtitle { + font-weight: normal; + margin: 0; +} + +.wrap h2 { + font-size: 23px; + font-weight: 400; + padding: 9px 0 4px 15px; + line-height: 29px; +} + +.subtitle { + font-size: 14px; + padding-right: 25px; +} + +.wrap .add-new-h2, +.wrap .add-new-h2:active { + margin-right: 4px; + padding: 4px 8px; + position: relative; + top: -3px; + text-decoration: none; + border: none; + border-radius: 2px; + text-shadow: none; + font-weight: 600; + font-size: 13px; +} + +.wrap h2.long-header { + padding-left: 0; +} + +html, +.wp-dialog { + background-color: #fff; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="email"], +input[type="number"], +input[type="search"], +input[type="tel"], +input[type="url"], +select { + background-color: #fff; + color: #333; +} + +select[disabled] { + color: #7f7f7f; +} + +select:focus { + border-color: #aaa; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +input[type="checkbox"]:focus, +input[type="radio"]:focus, +select:focus, +.widgets-chooser ul, +#widgets-left .widget-in-question .widget-top, +#available-widgets .widget-top:hover, +div#widgets-right .widget-top:hover { + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1); + box-shadow: 0 1px 2px rgba(0,0,0,0.1); +} + +input[readonly] { + background-color: #eee; +} + +:-moz-placeholder, +.wp-core-ui :-moz-placeholder { + color: #a9a9a9; +} + +/*------------------------------------------------------------------------------ + 1.0 - Text Styles +------------------------------------------------------------------------------*/ + +.widget .widget-top, +.postbox h3, +.stuffbox h3, +.control-section .accordion-section-title, +h3.dashboard-widget-title, +h3.dashboard-widget-title span, +h3.dashboard-widget-title small, +.sidebar-name, +#nav-menu-header, +#nav-menu-footer, +.menu-item-handle, +.checkbox, +.side-info, +#your-profile #rich_editing, +.widefat thead th, +.widefat tfoot th { + line-height: 1.4em; +} + +.quicktags, +.search { + font-size: 12px; +} + +.icon32 { + display: none; +} + +.icon16 { + height: 18px; + width: 18px; + padding: 6px 6px; + margin: -6px -8px 0 0; + float: right; +} + +/* New Menu icons */ + +.icon16:before { + font: normal 20px/1 'dashicons'; + speak: none; + padding: 6px 0; + height: 34px; + width: 20px; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-transition: all .1s ease-in-out; + -moz-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +.icon16.icon-dashboard:before, +#adminmenu .menu-icon-dashboard div.wp-menu-image:before { + content: '\f226'; +} + +.icon16.icon-post:before, +#adminmenu .menu-icon-post div.wp-menu-image:before { + content: '\f109'; +} + +.icon16.icon-media:before, +#adminmenu .menu-icon-media div.wp-menu-image:before { + content: '\f104'; +} + +.icon16.icon-links:before, +#adminmenu .menu-icon-links div.wp-menu-image:before { + content: '\f103'; +} + +.icon16.icon-page:before, +#adminmenu .menu-icon-page div.wp-menu-image:before { + content: '\f105'; +} + +.icon16.icon-comments:before, +#adminmenu .menu-icon-comments div.wp-menu-image:before { + content: '\f101'; + margin-top: 1px; +} + +.icon16.icon-appearance:before, +#adminmenu .menu-icon-appearance div.wp-menu-image:before { + content: '\f100'; +} + +.icon16.icon-plugins:before, +#adminmenu .menu-icon-plugins div.wp-menu-image:before { + content: '\f106'; +} + +.icon16.icon-users:before, +#adminmenu .menu-icon-users div.wp-menu-image:before { + content: '\f110'; +} + +.icon16.icon-tools:before, +#adminmenu .menu-icon-tools div.wp-menu-image:before { + content: '\f107'; +} + +.icon16.icon-settings:before, +#adminmenu .menu-icon-settings div.wp-menu-image:before { + content: '\f108'; +} + +.icon16.icon-site:before, +#adminmenu .menu-icon-site div.wp-menu-image:before { + content: '\f112' +} + +.icon16.icon-generic:before, +#adminmenu .menu-icon-generic div.wp-menu-image:before { + content: '\f111'; +} + +/* hide background-image for icons above */ +.icon16.icon-dashboard, +.menu-icon-dashboard div.wp-menu-image, +.icon16.icon-post, +.menu-icon-post div.wp-menu-image, +.icon16.icon-media, +.menu-icon-media div.wp-menu-image, +.icon16.icon-links, +.menu-icon-links div.wp-menu-image, +.icon16.icon-page, +.menu-icon-page div.wp-menu-image, +.icon16.icon-comments, +.menu-icon-comments div.wp-menu-image, +.icon16.icon-appearance, +.menu-icon-appearance div.wp-menu-image, +.icon16.icon-plugins, +.menu-icon-plugins div.wp-menu-image, +.icon16.icon-users, +.menu-icon-users div.wp-menu-image, +.icon16.icon-tools, +.menu-icon-tools div.wp-menu-image, +.icon16.icon-settings, +.menu-icon-settings div.wp-menu-image, +.icon16.icon-site, +.menu-icon-site div.wp-menu-image, +.icon16.icon-generic, +.menu-icon-generic div.wp-menu-image { + background-image: none !important; +} + +.key-labels label { + line-height: 24px; +} + +strong, b { + font-weight: 600; +} + +.pre { + /* https://developer.mozilla.org/en-US/docs/CSS/white-space */ + white-space: pre-wrap; /* css-3 */ + word-wrap: break-word; /* IE 5.5 - 7 */ +} + +.howto { + font-style: italic; + display: block; +} + +p.install-help { + margin: 8px 0; + font-style: italic; +} + +.no-break { + white-space: nowrap; +} + +hr { + border: 0; + border-top: 1px solid #ddd; + border-bottom: 1px solid #fafafa; +} + +/*------------------------------------------------------------------------------ + 2.0 - Forms +------------------------------------------------------------------------------*/ + + +.wp-admin select { + padding: 2px; + line-height: 28px; + height: 28px; + vertical-align: middle; +} + +.wp-admin .button-cancel { + padding: 0 5px; + line-height: 2; +} + +.meta-box-sortables select { + max-width: 100%; +} + +.wp-admin select[multiple] { + height: auto; +} + +.submit { + padding: 1.5em 0; + margin: 5px 0; + -webkit-border-bottom-right-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +form p.submit a.cancel:hover { + text-decoration: none; +} + +p.submit { + text-align: right; + max-width: 100%; + margin-top: 20px; + padding-top: 10px; +} + +.textright p.submit { + border: none; + text-align: left; +} + +table.form-table + p.submit, +table.form-table + input + p.submit, +table.form-table + input + input + p.submit { + border-top: none; + padding-top: 0; +} + +table.widefat span.delete a:hover, +table.widefat span.trash a:hover, +table.widefat span.spam a:hover, +#dashboard_recent_comments .delete a:hover, +#dashboard_recent_comments .trash a:hover, +#dashboard_recent_comments .spam a:hover, +.plugins a.delete:hover, +#all-plugins-table .plugins a.delete:hover, +#search-plugins-table .plugins a.delete:hover, +.submitbox .submitdelete:hover, +#media-items a.delete:hover, +#media-items a.delete-permanently:hover, +#nav-menu-footer .menu-delete:hover { + text-decoration: none; + border: none; +} + +#minor-publishing-actions input, +#major-publishing-actions input, +#minor-publishing-actions .preview { + text-align: center; +} + +textarea.all-options, +input.all-options { + width: 250px; +} + +input.large-text, +textarea.large-text { + width: 99%; +} + +input.regular-text, +#adduser .form-field input { + width: 25em; +} + +input.small-text { + width: 50px; + padding: 1px 6px; +} + +input[type="number"].small-text { + width: 65px; +} + +#doaction, +#doaction2, +#post-query-submit { + margin: 1px 0 0 8px; +} + +.tablenav #changeit, +.tablenav #delete_all, +.tablenav #clear-recent-list { + margin-top: 1px; +} + +.tablenav .actions select { + float: right; + margin-left: 6px; + max-width: 200px; +} + +.ie8 .tablenav .actions select { + width: 155px; +} + +.ie8 .tablenav .actions select#cat { + width: 200px; +} + +#timezone_string option { + margin-right: 1em; +} + +label, +#your-profile label + a { + vertical-align: middle; +} + +fieldset label, +#your-profile label + a { + vertical-align: middle; +} + +.options-media-php label[for*="_size_"], +#misc-publishing-actions label { + vertical-align: baseline; +} + +#misc-publishing-actions label[for="post_status"]:before { + content: '\f173'; + display: inline-block; + font: normal 20px/1 'dashicons'; + speak: none; + right: -1px; + padding: 0 0 0 5px; + position: relative; + top: 0; + text-decoration: none !important; + vertical-align: top; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#pass-strength-result { + border-style: solid; + border-width: 1px; + float: right; + margin: 13px 1px 5px 5px; + padding: 3px 5px; + text-align: center; + width: 200px; + display: none; +} +.indicator-hint { + padding-top: 8px; +} + +p.search-box { + float: left; + margin: 0; +} + +.network-admin.themes-php p.search-box { + clear: right; +} + +.search-box input[name="s"], +#search-plugins input[name="s"], +.tagsdiv .newtag { + float: right; + height: 28px; + margin: 0 0 0 4px; +} + +input[type="text"].ui-autocomplete-loading { + background: transparent url('../images/loading.gif') no-repeat left center; + visibility: visible; +} + +ul#add-to-blog-users { + margin: 0 14px 0 0; +} + +.ui-autocomplete-input.open { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.ui-autocomplete { + padding: 0; + margin: 0; + list-style: none; + position: absolute; + z-index: 10000; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + border-width: 1px; + border-style: solid; +} + +.ui-autocomplete li { + margin-bottom: 0; + white-space: nowrap; + text-align: right; +} + +.ui-autocomplete li a { + display: block; + height: 100%; + padding: 4px 10px; +} + +.ui-autocomplete li a.ui-state-focus { + cursor: pointer; +} + +/*------------------------------------------------------------------------------ + 3.0 - Actions +------------------------------------------------------------------------------*/ + +#major-publishing-actions { + padding: 10px; + clear: both; + border-top: 1px solid #ddd; + background: #f5f5f5; +} + +#delete-action { + line-height: 28px; + vertical-align: middle; + text-align: right; + float: right; +} + +#publishing-action { + text-align: left; + float: left; + line-height: 23px; +} + +#publishing-action .spinner { + float: right; +} + +#misc-publishing-actions { + padding: 6px 0 0; +} + +.misc-pub-section { + padding: 6px 10px 8px; +} + +.misc-pub-section:first-child { + border-top-width: 0; +} + +.misc-pub-section-last { + border-bottom-width: 0; +} + +#minor-publishing-actions { + padding: 10px 10px 0 10px; + text-align: left; +} + +#save-post { + float: right; +} + +.preview { + float: left; +} + +#sticky-span { + margin-right: 18px; +} + +.side-info { + margin: 0; + padding: 4px; + font-size: 11px; +} + +.side-info h5 { + padding-bottom: 7px; + font-size: 14px; + margin: 12px 2px 5px; + border-bottom-width: 1px; + border-bottom-style: solid; +} + +.side-info ul { + margin: 0; + padding-right: 18px; + list-style: square; +} + +.approve, +.unapproved .unapprove { + display: none; +} + +.unapproved .approve, +.spam .approve, +.trash .approve { + display: inline; +} + +td.action-links, +th.action-links { + text-align: left; +} + + +/*------------------------------------------------------------------------------ + 4.0 - Notifications +------------------------------------------------------------------------------*/ + +#update-nag, +.update-nag { + display: inline-block; + line-height: 19px; + padding: 11px 15px; + font-size: 14px; + text-align: right; + margin: 25px 2px 0 20px; +} + +.plugins .plugin-update { + padding: 0; +} + +.plugin-update .update-message { + margin: 0 31px 8px 10px; + font-weight: 600; +} + +ul#dismissed-updates { + display: none; +} + +form.upgrade { + margin-top: 8px; +} + +form.upgrade .hint { + font-style: italic; + font-size: 85%; + margin: -0.5em 0 2em 0; +} + +.update-php .spinner { + float: none; + margin: -4px 0; +} + +#ajax-loading, +.ajax-loading, +.ajax-feedback, +.imgedit-wait-spin, +.list-ajax-loading { /* deprecated */ + visibility: hidden; +} + +#ajax-response.alignleft { + margin-right: 2em; +} + +/*------------------------------------------------------------------------------ + 5.0 - TinyMCE +------------------------------------------------------------------------------*/ + +/* nothing? */ + +/*------------------------------------------------------------------------------ + 6.0 - Admin Header +------------------------------------------------------------------------------*/ +#adminmenu a, +#sidemenu a, +#taglist a, +#catlist a { + text-decoration: none; +} + +/*------------------------------------------------------------------------------ + 6.1 - Screen Options Tabs +------------------------------------------------------------------------------*/ + +#screen-options-wrap, +#contextual-help-wrap { + margin: 0; + padding: 8px 20px 12px; + position: relative; +} + +#contextual-help-wrap { + overflow: auto; + margin-right: 0 !important; +} + +#screen-meta .screen-reader-text { + visibility: hidden; +} + +#screen-meta-links { + margin: 0 0 0 20px; +} + +#screen-meta-links a { + padding: 3px 16px 3px 6px; +} + +#screen-meta-links a:focus { + outline: none; +} + +/* screen options and help tabs revert */ +#screen-meta { + display: none; + margin: 0 0px -1px 20px; + position: relative; +} + +#screen-options-link-wrap, +#contextual-help-link-wrap { + float: left; + height: 28px; + margin: 0 6px 0 0; +} + +#screen-meta-links .screen-meta-toggle { + position: relative; + top: 0; +} + +#screen-meta-links a.show-settings { + display: block; + font-size: 13px; + height: 22px; + line-height: 22px; + text-decoration: none; + z-index: 1; +} + +#screen-meta-links a:after { + left: 0; + content: '\f140'; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0 0 0 5px; + bottom: 2px; + position: relative; + vertical-align: bottom; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +#screen-meta-links a.screen-meta-active:after { + content: '\f142'; +} + +#screen-meta-links a.show-settings:hover { + text-decoration: none; +} +/* end screen options and help tabs */ + +.toggle-arrow { + background-repeat: no-repeat; + background-position: top right; + background-color: transparent; + height: 22px; + line-height: 22px; + display: block; +} + +.toggle-arrow-active { + background-position: bottom right; +} + +#screen-options-wrap h5, +#contextual-help-wrap h5 { + margin: 8px 0; + font-size: 13px; +} + +.metabox-prefs label { + display: inline-block; + padding-left: 15px; + line-height: 30px; +} + +.metabox-prefs label input[type=checkbox] { + margin-top: -4px; + margin-left: 6px; +} + +.metabox-prefs label input { + margin: 0 2px 0 5px; +} + +.metabox-prefs .columns-prefs label input { + margin: 0 2px; +} + +.metabox-prefs label a { + display: none; +} + +/*------------------------------------------------------------------------------ + 6.2 - Help Menu +------------------------------------------------------------------------------*/ + +#contextual-help-wrap { + padding: 0; +} + +#contextual-help-columns { + position: relative; +} + +#contextual-help-back { + position: absolute; + top: 0; + bottom: 0; + right: 150px; + left: 170px; + border-width: 0 1px; + border-style: solid; +} + +#contextual-help-wrap.no-sidebar #contextual-help-back { + left: 0; + + border-left-width: 0; + -webkit-border-bottom-left-radius: 2px; + border-bottom-left-radius: 2px; +} + +.contextual-help-tabs { + float: right; + width: 150px; + margin: 0; +} + +.contextual-help-tabs ul { + margin: 1em 0; +} + +.contextual-help-tabs li { + margin-bottom: 0; + list-style-type: none; + border-style: solid; + border-width: 0 2px 0 0; + border-color: transparent; +} + +.contextual-help-tabs a { + display: block; + padding: 5px 12px 5px 5px; + line-height: 18px; + text-decoration: none; + border-style: solid; + border-width: 1px 0 1px 0; + border-color: transparent; +} + +.contextual-help-tabs .active { + padding: 0; + margin: 0 0 0 -1px; + border-width: 0 2px 0 0; + border-style: solid; +} + +.contextual-help-tabs-wrap { + padding: 0 20px; + overflow: auto; +} + +.help-tab-content { + display: none; + margin: 0 0 12px 22px; + line-height: 1.6em; +} + +.help-tab-content.active { + display: block; +} + +.help-tab-content ul li { + list-style-type: disc; + margin-right: 18px; +} + +.contextual-help-sidebar { + width: 150px; + float: left; + padding: 0 12px 0 8px; + overflow: auto; +} + + +/*------------------------------------------------------------------------------ + 7.0 - Main Navigation (Left Menu) +------------------------------------------------------------------------------*/ + +#adminmenuwrap { + position: relative; + float: right; +} + +/* side admin menu */ +#adminmenu * { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +#adminmenu li { + margin: 0; + padding: 0; + cursor: pointer; +} + +#adminmenu a { + display: block; + line-height: 18px; + padding: 2px 5px; +} + +#adminmenu li.menu-top { + border: none; + min-height: 34px; + position: relative; +} + +#adminmenu .wp-submenu { + list-style: none; + position: absolute; + top: -1000em; + right: 160px; + overflow: visible; + word-wrap: break-word; +} + +#adminmenu .wp-submenu, +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + padding: 7px 0 8px; + z-index: 9999; +} + +.js #adminmenu .sub-open, +.js #adminmenu .opensub .wp-submenu, +#adminmenu a.menu-top:focus + .wp-submenu, +.no-js li.wp-has-submenu:hover .wp-submenu { + top: -1px; +} + +#adminmenu .wp-has-current-submenu .wp-submenu, +.no-js li.wp-has-current-submenu:hover .wp-submenu, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +#adminmenu .wp-has-current-submenu .wp-submenu.sub-open, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu { + position: relative; + z-index: 3; + top: auto; + right: auto; + left: auto; + bottom: auto; + border: 0 none; + margin-top: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +.folded #adminmenu .wp-submenu.sub-open, +.folded #adminmenu .opensub .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open, +.folded #adminmenu .wp-has-current-submenu.opensub .wp-submenu, +.folded #adminmenu a.menu-top:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu, +.no-js.folded #adminmenu .wp-has-submenu:hover .wp-submenu { + top: 0; + right: 36px; +} + +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + position: absolute; + top: -1000em; +} + +#adminmenu .wp-not-current-submenu .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + min-width: 160px; + width: auto; +} + +#adminmenu .wp-submenu a { + font-size: 13px; + line-height: 1.2; + margin: 0; + padding: 6px 0; +} + +#adminmenu .wp-not-current-submenu li > a, +.folded #adminmenu .wp-has-current-submenu li > a { + padding-left: 16px; + padding-right: 14px; + -moz-transition: all .1s ease-in-out; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#adminmenu .wp-has-current-submenu ul > li > a, +.folded #adminmenu li.menu-top .wp-submenu > li > a { + padding: 6px 12px; +} + +#adminmenu a.menu-top, +#adminmenu .wp-submenu-head { + font-size: 14px; + font-weight: 400; + line-height: 18px; + padding: 0; +} + +#adminmenu .wp-submenu-head, +.folded #adminmenu .wp-menu-name { + display: none; +} + +.folded #adminmenu .wp-submenu-head { + display: block; +} + +#adminmenu .wp-submenu li { + padding: 0; + margin: 0; + overflow: hidden; +} + +#adminmenu .wp-menu-image img { + padding: 9px 0px 0 0; + opacity: 0.6; + filter: alpha(opacity=60); +} + +#adminmenu div.wp-menu-name { + padding: 8px 0; +} + +#adminmenu div.wp-menu-image { + float: right; + width: 36px; + height: 30px; + margin: 0; + text-align: center; +} + +#adminmenu div.wp-menu-image.svg { + background-repeat: no-repeat; + background-position: center; + background-size: 20px auto; +} + +div.wp-menu-image:before { + font: normal 20px/1 'dashicons' !important; + speak: none; + color: #999; + padding: 8px 0; + height: 36px; + width: 20px; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -moz-transition: all .1s ease-in-out; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +.folded #adminmenu div.wp-menu-image { + width: 35px; + height: 30px; + position: absolute; + z-index: 25; +} + +.folded #adminmenu a.menu-top { + height: 34px; +} + +/* No @font-face support */ +.no-font-face #adminmenu .wp-menu-image { + display: none; +} + +.no-font-face #adminmenu div.wp-menu-name { + padding: 8px 12px; +} + +.no-font-face.auto-fold #adminmenu .wp-menu-name { + margin-right: 0; +} +/* End no @font-face support */ + +/* Sticky admin menu */ +.sticky-menu #adminmenuwrap { + position: fixed; + z-index: 99; /* Match the z-index of .wp-submenu to ensure flyout menus don't appear underneath main column elements */ +} + +/* A new arrow */ + +.wp-menu-arrow { + display: none !important; +} + +ul#adminmenu a.wp-has-current-submenu { + position: relative; +} + +ul#adminmenu a.wp-has-current-submenu:after, +ul#adminmenu > li.current > a.current:after { + left: 0; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-width: 8px; + top: 50%; + margin-top: -8px; +} + +.folded ul#adminmenu li:hover a.wp-has-current-submenu:after { + display: none; +} + +.folded ul#adminmenu a.wp-has-current-submenu:after, +.folded ul#adminmenu > li a.current:after { + border-width: 4px; + margin-top: -4px; +} + +/* flyout menu arrow */ +#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + left: 0; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-width: 8px; + top: 10px; + z-index: 10000; +} + +.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + border-width: 4px; + margin-top: -4px; + top: 18px; +} + +/* ensure that wp-submenu's box shadow doesn't appear on top of the focused menu item's background. */ +#adminmenu li.menu-top:hover, +#adminmenu li.opensub > a.menu-top, +#adminmenu li > a.menu-top:focus { + position: relative; +} + +.folded #adminmenu li.menu-top:hover, +.folded #adminmenu li.opensub > a.menu-top, +.folded #adminmenu li > a.menu-top:focus { + z-index: 10000; +} + +#adminmenu li.menu-top:hover .wp-menu-image img, +#adminmenu li.wp-has-current-submenu .wp-menu-image img { + opacity: 1; + filter: alpha(opacity=100); +} + +#adminmenu li.wp-menu-separator { + height: 3px; + padding: 0; + margin: 0 0 6px 0; + border-width: 1px 0; + border-style: solid; + cursor: inherit; +} + +#adminmenu div.separator { + height: 1px; + padding: 0; + border-width: 1px 0 0 0; + border-style: solid; +} + +#adminmenu .wp-submenu .wp-submenu-head { + font-weight: 400; + font-size: 14px; + padding: 8px 11px 8px 4px; + margin: -7px 0px 4px; +} + +#adminmenu li.current, +.folded #adminmenu li.wp-menu-open { + border: 0 none; +} + +#adminmenu .awaiting-mod, +#adminmenu span.update-plugins, +#sidemenu li a span.update-plugins { + display: inline-block; + font-size: 9px; + line-height: 17px; + font-weight: 600; + margin: 1px 2px 0 0; + vertical-align: top; + -webkit-border-radius: 10px; + border-radius: 10px; + z-index: 26; +} + +#adminmenu li .awaiting-mod span, +#adminmenu li span.update-plugins span, +#sidemenu li a span.update-plugins span { + display: block; + padding: 0 6px; +} + +#adminmenu li span.count-0, +#sidemenu li a .count-0 { + display: none; +} + +#adminmenu #collapse-menu { + font-size: 13px; + line-height: 34px; + margin-top: 10px; +} + +.folded #collapse-menu span { + display: none; +} + +#collapse-button, +#collapse-button div { + width: 15px; + height: 15px; +} + +#collapse-button { + float: right; + height: 15px; + margin: 10px 11px 10px 8px; + width: 15px; + + -webkit-border-radius: 10px; + border-radius: 10px; +} + +#wpwrap #collapse-button div { + padding: 0; +} + +#collapse-button div:after { + content: '\f148'; + display: block; + line-height: 15px; + right: -3px; + top: -3px; + font: normal 20px/1 'dashicons' !important; + speak: none; + margin: 0 auto; + padding: 0 !important; + position: relative; + text-align: center; + width: 20px; + -moz-transition: all .1s ease-in-out; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.folded #collapse-button div:after, +.rtl #collapse-button div:after { + -ms-transform: rotate(180deg); + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +.rtl.folded #collapse-button div:after { + -ms-transform: none; + -webkit-transform: none; + transform: none; +} + +/* Auto-folding of the admin menu */ +@media only screen and (max-width: 900px) { + .auto-fold #wpcontent, + .auto-fold #wpfooter { + margin-right: 56px; + } + + .auto-fold #adminmenuback, + .auto-fold #adminmenuwrap, + .auto-fold #adminmenu, + .auto-fold #adminmenu li.menu-top { + width: 36px; + } + + .auto-fold #adminmenu .wp-submenu.sub-open, + .auto-fold #adminmenu .opensub .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu.sub-open, + .auto-fold #adminmenu .wp-has-current-submenu.opensub .wp-submenu, + .auto-fold #adminmenu a.menu-top:focus + .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu { + top: 0px; + right: 36px; + } + + .auto-fold #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu { + position: absolute; + top: -1000em; + margin-left: -1px; + padding: 7px 0 8px; + z-index: 9999; + } + + .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu { + min-width: 150px; + width: auto; + } + + .auto-fold #adminmenu .wp-has-current-submenu li > a { + padding-left: 16px; + padding-right: 14px; + } + + + .auto-fold #adminmenu li.menu-top .wp-submenu > li > a { + padding-right: 12px; + } + + .auto-fold #adminmenu .wp-menu-name { + display: none; + } + + .auto-fold #adminmenu .wp-submenu-head { + display: block; + } + + .auto-fold #adminmenu div.wp-menu-image { + height: 30px; + width: 34px; + position: absolute; + z-index: 25; + } + + .auto-fold #adminmenu a.menu-top { + height: 34px; + } + + .auto-fold #adminmenu li.wp-menu-open { + border: 0 none; + } + + .auto-fold #adminmenu .wp-has-current-submenu.menu-top-last { + margin-bottom: 0; + } + + .auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after { + display: none; + } + + .auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + border-width: 4px; + margin-top: -4px; + top: 16px; + } + + .auto-fold ul#adminmenu a.wp-has-current-submenu:after, + .auto-fold ul#adminmenu > li a.current:after { + border-width: 4px; + margin-top: -4px; + } + + .auto-fold #adminmenu li.menu-top:hover, + .auto-fold #adminmenu li.opensub > a.menu-top, + .auto-fold #adminmenu li > a.menu-top:focus { + z-index: 10000; + } + + .auto-fold #collapse-menu span { + display: none; + } + + .auto-fold #collapse-button div { + background: none; + } + + .auto-fold #collapse-button div:after { + -ms-transform: rotate(180deg); + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } + + .rtl.auto-fold #collapse-button div:after { + -ms-transform: none; + -webkit-transform: none; + transform: none; + } + +} + +/* List table styles */ +.post-com-count-wrapper { + min-width: 22px; +} + +.post-com-count { + background: none; + height: 1.3em; + line-height: 1.1em; + display: block; + text-decoration: none; + padding: 0 0 6px; + cursor: pointer; + background-position: center -80px; + background-repeat: no-repeat; +} + +.post-com-count:after { /* draw bubble connector using CSS! */ + content: ""; + display: block; + width: 0; + height: 0; + margin-right: 8px; + border-top: 5px solid #bbbbbb; + border-left: 5px solid transparent; +} + +.post-com-count span { + font-size: 11px; + font-weight: 600; + height: 1.4em; + line-height: 1.4em; + min-width: 0.7em; + padding: 0 6px; + display: inline-block; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +strong .post-com-count { + background-position: center -55px; +} + +.post-com-count:hover { + background-position: center -3px; +} + +.column-response .post-com-count { + float: right; + margin-left: 5px; + text-align: center; +} + +.response-links { + float: right; +} + +#the-comment-list .attachment-80x60 { + padding: 4px 8px; +} + +th .comment-grey-bubble { + height: 16px; + width: 16px; +} + +th .comment-grey-bubble:before { + content: '\f101'; + font: normal 20px/.5 'dashicons'; + speak: none; + display: inline-block; + padding: 0; + top: 4px; + right: -4px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +/*------------------------------------------------------------------------------ + 8.0 - Layout Blocks +------------------------------------------------------------------------------*/ + +html.wp-toolbar { + padding-top: 32px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.narrow { + width: 70%; + margin-bottom: 40px; +} + +.narrow p { + line-height: 150%; +} + +.widefat th, +.widefat td { + overflow: hidden; +} + +.widefat th { + font-weight: normal; +} + +.widefat td p { + margin: 2px 0 0.8em; +} + +.widefat .column-comment p { + margin: 0.6em 0; +} + +/* Screens with postboxes */ +.postbox-container { + float: right; +} + +#wpbody-content #dashboard-widgets.columns-1 .postbox-container { + width: 100%; +} + +#wpbody-content #dashboard-widgets.columns-2 .postbox-container { + width: 49.5%; +} + +#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2, +#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3, +#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4 { + float: left; + width: 50.5%; +} + +#wpbody-content #dashboard-widgets.columns-3 .postbox-container { + width: 33.5%; +} + +#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1 { + width: 33%; +} + +#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3, +#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4 { + float: left; +} + +#wpbody-content #dashboard-widgets.columns-4 .postbox-container { + width: 25%; +} + +.postbox-container .meta-box-sortables { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.metabox-holder .postbox-container .empty-container { + border: 3px dashed #bbb; + height: 250px; +} + +.metabox-holder.columns-1 .postbox-container .empty-container, +.columns-2 #postbox-container-3 .empty-container, +.columns-2 #postbox-container-4 .empty-container, +.columns-3 #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; +} + +.ie8 #wpbody-content #dashboard-widgets .postbox-container { + width: 49.5%; +} + +.ie8 #wpbody-content #dashboard-widgets #postbox-container-2, +.ie8 #wpbody-content #dashboard-widgets #postbox-container-3, +.ie8 #wpbody-content #dashboard-widgets #postbox-container-4 { + float: left; + width: 50.5%; +} + +.ie8 #dashboard-widgets #postbox-container-3 .empty-container, +.ie8 #dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; +} + +#poststuff { + padding-top: 10px; + min-width: 763px; +} + +#poststuff #post-body { + padding: 0; +} + +#post-body-content { + width: 100%; + min-width: 463px; + float: right; +} + +#poststuff .postbox-container { + width: 100%; +} + +#poststuff #post-body.columns-2 { + margin-left: 300px; +} + +#post-body.columns-2 #postbox-container-1 { + float: left; + margin-left: -300px; + width: 280px; +} + +#post-body.columns-2 #side-sortables { + min-height: 250px; +} + +#dashboard-widgets .postbox-container { + width: 25%; +} + +#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container { + border: none !important; +} + +#dashboard-widgets-wrap { + overflow: hidden; +} + +/* one column on the dash */ +@media only screen and (max-width: 799px) { + #wpbody-content #dashboard-widgets .postbox-container { + width: 100%; + } + + #wpbody-content .metabox-holder .postbox-container .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } +} + +/* two columns on the dash, but keep the setting if one is selected */ +@media only screen and (min-width: 800px) and (max-width: 1499px) { + #wpbody-content #dashboard-widgets .postbox-container { + width: 49.5%; + } + + #wpbody-content #dashboard-widgets #postbox-container-2, + #wpbody-content #dashboard-widgets #postbox-container-3, + #wpbody-content #dashboard-widgets #postbox-container-4 { + float: left; + width: 50.5%; + } + + #dashboard-widgets #postbox-container-3 .empty-container, + #dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } + + #wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container { + width: 100%; + } + + #wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } + + /* show the radio buttons for column prefs only for one or two columns */ + .index-php .screen-layout, + .index-php .columns-prefs { + display: block; + } + + .columns-prefs .columns-prefs-3, + .columns-prefs .columns-prefs-4 { + display: none; + } +} + +/* three columns on the dash */ +@media only screen and (min-width: 1500px) and (max-width: 1800px) { + #wpbody-content #dashboard-widgets .postbox-container { + width: 33.5%; + } + + #wpbody-content #dashboard-widgets #postbox-container-1 { + width: 33%; + } + + #wpbody-content #dashboard-widgets #postbox-container-3, + #wpbody-content #dashboard-widgets #postbox-container-4 { + float: left; + } + + #dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } +} + +/* one column on the post write/edit screen */ +@media only screen and (max-width: 850px) { + #poststuff { + min-width: 0; + } + + #wpbody-content #poststuff #post-body { + margin: 0; + } + + #wpbody-content #post-body.columns-2 #postbox-container-1 { + margin-left: 0; + width: 100%; + } + + #poststuff #postbox-container-1 .empty-container, + #poststuff #postbox-container-1 #side-sortables:empty { + border: 0 none; + height: 0; + min-height: 0; + } + + #poststuff #post-body.columns-2 #side-sortables { + min-height: 0; + } + + /* hide the radio buttons for column prefs */ + .screen-layout, + .columns-prefs { + display: none; + } +} + +.js .postbox .hndle { + cursor: move; +} + +.hndle a { + font-size: 11px; + font-weight: normal; +} + +.postbox .handlediv { + float: left; + width: 27px; + height: 30px; +} + +.js .postbox .handlediv { + cursor: pointer; +} + +.sortable-placeholder { + border-width: 1px; + border-style: dashed; + margin-bottom: 20px; +} + +.postbox, +.stuffbox { + margin-bottom: 20px; + padding: 0; + line-height: 1; +} + +.postbox h3, +.stuffbox h3 { + margin-top: 1px; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.js .widget .widget-top, +.js .postbox h3 { + cursor: move; +} + +.postbox .inside, +.stuffbox .inside { + padding: 0 12px 12px; + line-height: 1.4em; + font-size: 13px; +} + +.postbox .inside { + margin: 11px 0; + position: relative; +} + +#dashboard-widgets .postbox .inside { + margin-bottom: 0; +} + +.postbox .inside > p:last-child, +.rss-widget ul li:last-child { + margin-bottom: 1px !important; +} + +.postbox.closed h3 { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.postbox table.form-table { + margin-bottom: 0; +} + +.temp-border { + border: 1px dotted #ccc; +} + +.columns-prefs label { + padding: 0 5px; +} + + +/*------------------------------------------------------------------------------ + 9.0 - Dashboard +------------------------------------------------------------------------------*/ + +#dashboard-widgets-wrap { + margin: 0 -8px; +} + +#wpbody-content .metabox-holder { + padding-top: 10px; +} + +#dashboard-widgets .meta-box-sortables { + margin: 0 8px; + min-height: 100px; +} + +#the-comment-list td.comment p.comment-author { + margin-top: 0; + margin-right: 0; +} + +#the-comment-list p.comment-author img { + float: right; + margin-left: 8px; +} + +#the-comment-list p.comment-author strong a { + border: none; +} + +#the-comment-list td { + vertical-align: top; +} + +#the-comment-list td.comment { + word-wrap: break-word; +} + +/* Welcome Panel */ +.welcome-panel { + position: relative; + overflow: auto; + margin: 16px 0; + padding: 23px 10px 0; + font-size: 13px; + line-height: 2.1em; +} + +.welcome-panel h3 { + margin: 0; + font-size: 21px; + font-weight: normal; + line-height: 1.2; +} + +.welcome-panel h4 { + margin: 1.33em 0 0; + font-size: 16px; +} + +.welcome-panel li { + font-size: 14px; +} + +.welcome-panel .about-description { + font-size: 16px; + margin: 0; +} + +.welcome-panel .welcome-panel-close { + position: absolute; + top: 5px; + left: 10px; + padding: 20px 3px 0 15px; + font-size: 13px; + text-decoration: none; + line-height: 1; +} + +#welcome-panel.welcome-panel .welcome-panel-close::before, +.tagchecklist span a:before, +#bulk-titles div a:before { + content: '\f153'; + display: block !important; + font: normal 16px/1 'dashicons'; + speak: none; + height: 20px; + margin: 2px 0; + text-align: center; + width: 20px; + -webkit-font-smoothing: antialiased !important; +} + +#welcome-panel.welcome-panel .welcome-panel-close::before { + position: absolute; + right: -18px; + margin-top: -2px; + -webkit-transition: all .1s ease-in-out; + -moz-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +.wp-core-ui .welcome-panel .button.button-hero { + margin: 15px 0 3px; +} + +.welcome-panel-content { + margin-right: 13px; + max-width: 1500px; +} + +.welcome-panel .welcome-panel-column-container { + clear: both; + overflow: hidden; + position: relative; +} + +.welcome-panel .welcome-panel-column { + width: 32%; + min-width: 200px; + float: right; +} + +.ie8 .welcome-panel .welcome-panel-column { + min-width: 230px; +} + +.welcome-panel .welcome-panel-column:first-child { + width: 36%; +} + +.welcome-panel-column p.hide-if-no-customize { + margin-top: 10px; +} + +.welcome-panel-column p { + margin-top: 7px; +} + +.welcome-panel .welcome-icon { + display: block; + padding: 0 0 8px; + background: transparent !important; +} + +.welcome-panel .welcome-icon:before { + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0 0 0 10px; + top: -1px; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + vertical-align: top; +} + +.welcome-panel .welcome-write-blog:before, +.welcome-panel .welcome-edit-page:before { + content:'\f119'; + top: -3px; +} + +.welcome-panel .welcome-add-page:before { + content:'\f132'; +} + +.welcome-panel .welcome-view-site:before { + content:'\f115'; + top: -2px; +} + +.welcome-panel .welcome-widgets-menus:before { + content:'\f116'; + top: -2px; +} + +.welcome-panel .welcome-comments:before { + content:'\f117'; + top: -1px; +} + +.welcome-panel .welcome-learn-more:before { + content:'\f118'; + top: -1px; +} + +.welcome-panel .welcome-widgets-menus { + line-height: 16px; +} + +.welcome-panel .welcome-panel-column ul { + margin: 0.8em 0 1em 1em; +} + +.welcome-panel .welcome-panel-column li { + line-height: 16px; + list-style-type: none; +} + +/* Dashboard WordPress news */ + +#dashboard_primary .inside { + margin: 0; + padding: 0; +} + +#dashboard_primary .widget-loading, +#dashboard_primary .dashboard-widget-control-form { + padding: 12px 12px 0; +} + +body #dashboard-widgets .postbox form .submit { + margin: 0; +} + +.dashboard-widget-control-form { + overflow: hidden; +} + +.dashboard-widget-control-form p { + margin-top: 0; +} + +.rssSummary { + color: #777; + margin-top: 4px; +} + +#dashboard_primary .rss-widget { + border-bottom: 1px solid #eee; + font-size: 13px; + padding: 8px 12px 10px; +} + +#dashboard_primary .rss-widget:last-child { + border-bottom: none; + padding-bottom: 8px; +} + +#dashboard_primary .rss-widget a { + font-weight: normal; +} + +#dashboard_primary .rss-widget span, +#dashboard_primary .rss-widget span.rss-date { + color: #777; +} + +#dashboard_primary .rss-widget span.rss-date { + margin-right: 12px; +} + +#dashboard_primary .rss-widget ul li { + margin-bottom: 8px; +} + +/* Dashboard right now */ + +#dashboard_right_now ul { + margin: 0; + overflow: hidden; +} + +#dashboard_right_now li { + width: 50%; + float: right; + margin-bottom: 10px; +} + +#dashboard_right_now .inside { + overflow: hidden; + padding: 0; +} + +#dashboard_right_now .main { + padding: 0 12px 11px; +} + +#dashboard_right_now .main p { + margin: 0; +} + +.mu-storage { + overflow: hidden; +} + +#dashboard-widgets h4.mu-storage { + margin-bottom: 10px; +} + +/* Dashboard right now - Colors */ + +#dashboard_right_now li a:before, +#dashboard_right_now li span:before { + color: #888; +} + +#dashboard_right_now .sub { + color: #777; + background: #f5f5f5; + border-top: 1px solid #eee; + padding: 10px 12px 6px 12px; +} + +#dashboard_right_now .sub h4 { + color: #555; +} + +#dashboard_right_now .sub p { + margin: 0 0 1em; +} + +#dashboard_right_now .warning a:before, +#dashboard_right_now .warning span:before { + color: #d54e21; +} + +/* Dashboard right now - Icons */ +#dashboard_right_now li a:before, +#dashboard_right_now li span:before { + content: '\f159'; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + float: right; + margin: 0 0 0 5px; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + text-decoration: none !important; +} + +#dashboard_right_now .page-count a:before, +#dashboard_right_now .page-count span:before { + content: '\f105'; +} + +#dashboard_right_now .post-count a:before, +#dashboard_right_now .post-count span:before { + content: '\f109'; +} + +#dashboard_right_now .comment-count a:before { + content: '\f101'; +} + +#dashboard_right_now .comment-mod-count a:before { + content: '\f125'; +} + +#dashboard_right_now .storage-count a:before { + content: '\f104'; +} + +#dashboard_right_now .storage-count.warning a:before { + content: '\f153'; +} + +/* Dashboard Quick Draft */ + +#dashboard_quick_press .inside { + margin: 0; + padding: 0; +} + +#dashboard_quick_press div.updated { + margin-bottom: 10px; + border: 1px solid #eee; + border-width: 1px 0 1px 1px; +} + +#dashboard_quick_press form { + overflow: hidden; + margin: 12px; +} + +#dashboard_quick_press .drafts, +#dashboard_quick_press .easy-blogging { + padding: 10px 0 0; +} + +/* Dashboard Quick Draft - Form styling */ + +input#save-post { + float: right; +} + +form.initial-form.quickpress-open label.prompt { + font-style: normal; +} + +form.initial-form.quickpress-open input#title { + height: auto; +} + +#dashboard_quick_press input, +#dashboard_quick_press textarea { + box-sizing: border-box; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + margin: 0; +} + +#dashboard_quick_press textarea { + resize: vertical; +} + +#dashboard-widgets .postbox form .submit { + margin: -39px 0; + float: left; +} + +#description-wrap { + margin-top: 12px; +} + +#title-wrap #title-prompt-text, +.textarea-wrap #content-prompt-text { + color: #777; +} + +#title-wrap #title-prompt-text { + font-size: 1.1em; + padding: 7px 8px; +} + +.input-text-wrap, +.textarea-wrap { + position: relative; +} + +.input-text-wrap .prompt, +.textarea-wrap .prompt { + position: absolute; +} + +.textarea-wrap #content-prompt-text { + font-size: 1.1em; + padding: 7px 8px; +} + +.textarea-wrap textarea#content { + margin: 0 0 8px; + padding: 6px 7px; +} + +#quick-press textarea#content { + min-height: 90px; + max-height: 1300px; + resize: none; +} + +/* Dashboard Quick Draft - Drafts list */ + +.js #dashboard_quick_press .drafts { + border-top: 1px solid #eee; +} + +#dashboard_quick_press .drafts abbr { + border: none; +} + +#dashboard_quick_press .drafts h4 { + margin: 0 12px 8px; + font-weight: normal; +} + +#dashboard_quick_press .drafts .view-all { + float: left; + margin: 0 0 0 12px; +} + +#dashboard_primary a.rsswidget { + font-weight: normal; +} + +#dashboard_quick_press .drafts ul { + margin: 0 12px; +} + +#dashboard_quick_press .drafts li { + margin-bottom: 1em; +} +#dashboard_quick_press .drafts li time { + color: #777; +} + +#dashboard_quick_press .drafts p { + margin: 0; + word-wrap: break-word; +} + +#dashboard_quick_press .draft-title { + overflow: hidden; +} + +#dashboard_quick_press .draft-title a, +#dashboard_quick_press .draft-title time { + float: right; + margin: 0 0 0 5px; +} + +/* Dashboard activity widget */ + +#dashboard-widgets #dashboard_activity h4 { + margin: 0 12px 8px 0; + font-weight: normal; +} + +#dashboard-widgets #dashboard_activity h4.comment-meta { + margin: 0; +} + +#dashboard_activity h4.comment-meta { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-bottom: 4px; +} + +#dashboard_activity ul { + padding: 0 12px; +} + +#dashboard_activity .comment-meta span.approve:before { + content: '\f227'; + font: 20px/.5 "dashicons"; + margin-right: 12px; + vertical-align: middle; + position: relative; + top: -1px; + margin-left: 2px; +} + +#dashboard_activity .inside { + padding: 0; + margin: 0; +} + +#dashboard_activity .no-activity { + overflow: hidden; + padding: 0 12px 12px; + text-align: center; +} + +#dashboard_activity .no-activity p { + color: #999; + font-size: 16px; +} + +#dashboard_activity .no-activity .smiley { + margin-top: 0; +} + +#dashboard_activity .no-activity .smiley:before { + content: '\f328'; + font: normal 120px/1 'dashicons'; + speak: none; + display: block; + margin: 0 0 0 5px; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + text-decoration: none !important; +} + +#dashboard_activity .subsubsub { + float: none; + border-top: 1px solid #eeeeee; + margin-top: 0; + padding: 8px 12px 4px; +} + +#future-posts .show-more, +#published-posts .show-more { + float: left; + margin-left: 12px; +} + +#future-posts ul, +#published-posts ul { + clear: both; + margin-bottom: 0; +} + +#future-posts li, +#published-posts li { + overflow: hidden; + margin-bottom: 8px; +} + +#future-posts ul span, +#published-posts ul span { + color: #777; + float: right; + margin-left: 8px; + min-width: 150px; +} + +.activity-block { + border-bottom: 1px solid #eee; + overflow: hidden; + padding: 8px 0 4px; +} + +.activity-block:last-child { + border-bottom: none; +} + +.activity-block .subsubsub li { + color: #ddd; +} + +/* Dashboard activity widget - Comments */ + +#activity-widget #the-comment-list tr.undo, +#activity-widget #the-comment-list div.undo { + background: none; + padding: 6px 0; +} + +#activity-widget #the-comment-list .alternate, +#activity-widget #the-comment-list .alt { + background: none; +} + +#activity-widget #the-comment-list .comment { + background: #fafafa; + padding: 12px; + position: relative; +} + +#activity-widget #the-comment-list img { + position: absolute; + right: 13px; + top: 13px; +} + +#activity-widget #the-comment-list .dashboard-comment-wrap { + padding-right: 63px; +} + +#activity-widget #the-comment-list .dashboard-comment-wrap blockquote { + margin: 1em 0; +} + +#activity-widget #the-comment-list .comment-item h4 { + font-size: 13px; + color: #999; +} + +#activity-widget #the-comment-list .comment-item p.row-actions { + margin: 4px 0 0 0; +} + +#activity-widget #the-comment-list .comment-item:first-child { + border-top: 1px solid #eeeeee; +} + +#activity-widget #the-comment-list .unapproved:before { + content: ""; + display: block; + position: absolute; + right: 0; + top: 0; + bottom: 0; + background: #d54e21; + width: 4px; +} + +#activity-widget #the-comment-list .spam-undo-inside .avatar, +#activity-widget #the-comment-list .trash-undo-inside .avatar { + margin-left: 20px; + position: relative; + top: 0; +} + +/* Browse happy box */ + +#dashboard-widgets #dashboard_browser_nag.postbox .inside { + margin: 10px; +} + +@media screen and (max-width: 870px) { + .welcome-panel .welcome-panel-column, + .welcome-panel .welcome-panel-column:first-child { + display: block; + float: none; + width: 100%; + } + + .welcome-panel .welcome-panel-column li { + display: inline-block; + margin-left: 13px; + } + + .welcome-panel .welcome-panel-column ul { + margin: 0.4em 0 0; + } + +} + +/*------------------------------------------------------------------------------ + 10.0 - List Posts (/Pages/etc) +------------------------------------------------------------------------------*/ + +table.fixed { + table-layout: fixed; +} + +.fixed .column-rating, +.fixed .column-visible { + width: 8%; +} + +.fixed .column-posts, +.fixed .column-date, +.fixed .column-parent, +.fixed .column-links, +.fixed .column-author, +.fixed .column-format { + width: 10%; +} + +.fixed .column-comment .comment-author { + display: none; +} + +.fixed .column-response, +.fixed .column-categories, +.fixed .column-tags, +.fixed .column-rel, +.fixed .column-role { + width: 15%; +} + +.fixed .column-slug { + width: 25%; +} + +.fixed .column-locations { + width: 35%; +} + +.fixed .column-comments { + width: 4em; + padding: 8px 0; + text-align: right; +} + +.fixed .column-comments .vers { + padding-right: 3px; +} + +.fixed .column-comments a { + float: right; +} + +.fixed .column-icon { + width: 80px; +} + +#comments-form .fixed .column-author { + width: 20%; +} + +#commentsdiv.postbox .inside { + margin: 0; + padding: 0; +} + +#commentsdiv .inside .row-actions { + line-height:18px; +} + +#commentsdiv .inside .column-author { + width: 25%; +} + +#commentsdiv .column-comment p { + margin: 0.6em 0; + padding: 0; +} + +#commentsdiv #replyrow td { + padding: 0; +} + +#commentsdiv p { + padding: 8px 10px; + margin: 0; +} + +#commentsdiv .comments-box { + border: 0 none; +} + +#commentsdiv .comments-box thead th { + background: transparent; + padding: 0 7px 4px; + font-style: italic; +} + +#commentsdiv .comments-box tr:last-child td { + border-bottom: 0 none; +} + +#commentsdiv .spinner { + padding-right: 5px; +} + +.sorting-indicator { + display: none; + width: 10px; + height: 4px; + margin-top: 8px; + margin-right: 7px; +} + +.sorting-indicator:before { + background: none; + content: '\f142'; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0; + top: -4px; + right: -8px; + color: #444; + line-height: 10px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.column-comments .sorting-indicator:before { + top: 0; + right: -10px; +} + +th.sorted.asc .sorting-indicator:before, +th.desc:hover span.sorting-indicator:before { + content: '\f142'; +} + +th.sorted.desc .sorting-indicator:before, +th.asc:hover span.sorting-indicator:before { + content: '\f140'; +} + +tr.wp-locked .locked-indicator { + background: url('../images/lock.png') no-repeat; + margin: -2px 6px 0 0; + height: 20px; + width: 16px; +} + +tr.wp-locked .check-column label, +tr.wp-locked .check-column input[type="checkbox"], +tr.wp-locked .row-actions .inline, +tr.wp-locked .row-actions .trash { + display: none; +} + +tr .locked-info { + height: 0; + opacity: 0; +} + +tr.wp-locked .locked-info { + margin-top: 8px; + height: auto; + opacity: 1; +} + +.locked-text { + vertical-align: top; +} + +tr.locked-info, tr.wp-locked .locked-info { + -webkit-transition: height 1s, opacity 500ms; + -moz-transition: height 1s, opacity 500ms; + -ms-transition: height 1s, opacity 500ms; + -o-transition: height 1s, opacity 500ms; + transition: height 1s, opacity 500ms; +} + +.fixed .column-comments .sorting-indicator { + margin-top: 3px; +} + +#menu-locations-wrap .widefat { + width: 60%; +} + +.widefat th.sortable, +.widefat th.sorted { + padding: 0; +} + +th.sortable a, +th.sorted a { + display: block; + overflow: hidden; + padding: 7px 10px 8px 7px; +} + +.fixed .column-comments.sortable a, +.fixed .column-comments.sorted a { + padding: 8px 0; +} + +th.sortable a span, +th.sorted a span { + float: right; + cursor: pointer; +} + +th.sorted.asc .sorting-indicator, +th.desc:hover span.sorting-indicator { + display: block; + background-position: 0 0; +} + +th.sorted.desc .sorting-indicator, +th.asc:hover span.sorting-indicator { + display: block; + background-position: -7px 0; +} + +/* Bulk Actions */ +.tablenav-pages a { + font-weight: 600; + margin-left: 1px; + padding: 0 2px; +} +.tablenav-pages .current-page { + padding-top: 0; + text-align: center; +} +.tablenav-pages .next-page { + margin-right: 2px; +} + +.tablenav a.button-secondary { + display: block; + margin: 3px 0 0 8px; +} + +.tablenav { + clear: both; + height: 30px; + margin: 6px 0 4px; + vertical-align: middle; +} + +.tablenav.themes { + max-width: 98%; +} + +.tablenav .tablenav-pages { + float: left; + display: block; + cursor: default; + height: 30px; + line-height: 30px; + font-size: 12px; +} + +.tablenav .no-pages, +.tablenav .one-page .pagination-links { + display: none; +} + +.tablenav .tablenav-pages a, +.tablenav-pages span.current { + text-decoration: none; + padding: 3px 6px; +} + +.tablenav .tablenav-pages a { + padding: 0 10px 3px; + font-size: 16px; + font-weight: normal; +} + +.tablenav .tablenav-pages a.disabled:hover , +.tablenav .tablenav-pages a.disabled:active { + cursor: default; +} + +.tablenav .displaying-num { + margin-left: 2px; + font-size: 12px; + font-style: italic; +} + +.tablenav .actions { + overflow: hidden; + padding: 2px 0 0 8px; +} + +.tablenav .delete { + margin-left: 20px; +} + +.view-switch { + float: left; + margin: 5px 8px 0 16px; +} + +.view-switch img { + display: none; +} + +.view-switch a { + text-decoration: none; +} + +.view-switch > a { + display: inline-block; + width: 18px; + height: 18px; +} + +.view-switch > a:before { + content: '\f163'; + display: inline-block; + float: right; + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; + margin-right: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.view-switch > a + a:before { + margin-right: 5px; + content: '\f164'; +} + +.filter { + float: right; + margin: -5px 10px 0 0; +} + +.filter .subsubsub { + margin-right: -10px; + margin-top: 13px; +} +.screen-per-page { + width: 4em; +} + +#posts-filter fieldset { + float: right; + margin: 0 0 1em 1.5ex; + padding: 0; +} + +#posts-filter fieldset legend { + padding: 0 1px .2em 0; +} + + +/*------------------------------------------------------------------------------ + 10.1 - Inline Editing +------------------------------------------------------------------------------*/ + +/* +.quick-edit* is for Quick Edit +.bulk-edit* is for Bulk Edit +.inline-edit* is for everything +*/ + +/* Layout */ + +#wpbody-content .inline-edit-row fieldset { + font-size: 12px; + float: right; + margin: 0; + padding: 0; + width: 100%; +} + +tr.inline-edit-row td, +#wpbody-content .inline-edit-row fieldset .inline-edit-col { + padding: 0 0.5em; +} + +#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col { + border-width: 0 1px 0 0; + border-style: none none none solid; +} + +#wpbody-content .quick-edit-row-post .inline-edit-col-left { + width: 40%; +} + +#wpbody-content .quick-edit-row-post .inline-edit-col-right { + width: 39%; +} + +#wpbody-content .inline-edit-row-post .inline-edit-col-center { + width: 20%; +} + +#wpbody-content .quick-edit-row-page .inline-edit-col-left { + width: 50%; +} + +#wpbody-content .quick-edit-row-page .inline-edit-col-right, +#wpbody-content .bulk-edit-row-post .inline-edit-col-right { + width: 49%; +} + +#wpbody-content .bulk-edit-row .inline-edit-col-left { + width: 30%; +} + +#wpbody-content .bulk-edit-row-page .inline-edit-col-right { + width: 69%; +} + +#wpbody-content .bulk-edit-row .inline-edit-col-bottom { + float: left; + width: 69%; +} + +#wpbody-content .inline-edit-row-page .inline-edit-col-right { + margin-top: 27px; +} + +.inline-edit-row fieldset .inline-edit-group { + clear: both; +} + +.inline-edit-row fieldset .inline-edit-group:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.inline-edit-row p.submit { + clear: both; + padding: 0.5em; + margin: 0.5em 0 0; +} + +.inline-edit-row span.error { + line-height: 22px; + margin: 0 15px; + padding: 3px 5px; +} + +/* Positioning */ +.inline-edit-row h4 { + margin: .2em 0; + padding: 0; + line-height: 23px; +} +.inline-edit-row fieldset span.title, +.inline-edit-row fieldset span.checkbox-title { + margin: 0; + padding: 0; + line-height: 27px; +} + +.inline-edit-row fieldset label, +.inline-edit-row fieldset span.inline-edit-categories-label { + display: block; + margin: .2em 0; +} + +.inline-edit-row fieldset label.inline-edit-tags { + margin-top: 0; +} + +.inline-edit-row fieldset label.inline-edit-tags span.title { + margin: .2em 0; + width: auto; +} + +.inline-edit-row fieldset label span.title { + display: block; + float: right; + width: 5em; +} + +.inline-edit-row fieldset label span.input-text-wrap { + display: block; + margin-right: 5em; +} + +.quick-edit-row-post fieldset.inline-edit-col-right label span.title { + width: auto; + padding-left: 0.5em; +} + +.inline-edit-row .input-text-wrap input[type=text] { + width: 100%; +} + +.inline-edit-row fieldset label input[type=checkbox] { + vertical-align: text-bottom; +} + +.inline-edit-row fieldset label textarea { + width: 100%; + height: 4em; +} + +#wpbody-content .bulk-edit-row fieldset .inline-edit-group label { + max-width: 50%; +} + +#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child { + margin-left: 0.5em +} + +.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input { + width: 6em; +} + +.inline-edit-save .spinner { + padding: 4px 10px 0; + vertical-align: top; + float: left; +} + +/* Styling */ +.inline-edit-row h4 { + text-transform: uppercase; +} + +.inline-edit-row fieldset span.title, +.inline-edit-row fieldset span.checkbox-title { + font-style: italic; + line-height: 1.8em; +} + +/* Specific Elements */ +.inline-edit-row fieldset input[type="text"], +.inline-edit-row fieldset textarea { + border-style: solid; + border-width: 1px; +} + +.inline-edit-row fieldset .inline-edit-date { + float: right; +} + +.inline-edit-row fieldset input[name=jj], +.inline-edit-row fieldset input[name=hh], +.inline-edit-row fieldset input[name=mn] { + font-size: 12px; + width: 2.1em; +} + +.inline-edit-row fieldset input[name=aa] { + font-size: 12px; + width: 3.5em; +} + +.inline-edit-row fieldset label input.inline-edit-password-input { + width: 8em; +} + +ul.cat-checklist { + height: 12em; + border-style: solid; + border-width: 1px; + overflow-y: scroll; + padding: 0 5px; + margin: 0; +} + +#bulk-titles { + display: block; + height: 12em; + border-style: solid; + border-width: 1px; + overflow-y: scroll; + padding: 0 5px; + margin: 0 0 5px; +} + +.inline-edit-row fieldset ul.cat-checklist li, +.inline-edit-row fieldset ul.cat-checklist input { + margin: 0; +} + +.inline-edit-row fieldset ul.cat-checklist label, +.inline-edit-row #bulk-titles div { + font-style: normal; + font-size: 11px; +} + +.inline-edit-row fieldset label input.inline-edit-menu-order-input { + width: 3em; +} + +.inline-edit-row fieldset label input.inline-edit-slug-input { + width: 75%; +} + +.quick-edit-row-post fieldset label.inline-edit-status { + float: right; +} + +#bulk-titles { + line-height: 140%; +} +#bulk-titles div { + margin: 0.2em 0.3em; +} + +#bulk-titles div a { + cursor: pointer; + display: block; + float: right; + height: 18px; + margin: 0 -2px 0 3px; + overflow: hidden; + position: relative; + width: 20px; +} + +#bulk-titles div a:before { + position: relative; + top: -3px; +} + + +/*------------------------------------------------------------------------------ + 11.0 - Write/Edit Post Screen +------------------------------------------------------------------------------*/ + +#show-comments { + overflow: hidden; +} + +#save-action .spinner, +#show-comments a, +#show-comments .spinner { + float: right; +} + +#lost-connection-notice .spinner { + display: block; + float: right; + margin: 0 0 0 5px; +} + +#titlediv { + position: relative; + margin-bottom: 10px; +} + +#titlediv label { + cursor: text; +} + +#titlediv div.inside { + margin: 0; +} + +#poststuff #titlewrap { + border: 0; + padding: 0; +} + +#titlediv #title { + padding: 3px 8px; + font-size: 1.7em; + line-height: 100%; + height: 1.7em; + width: 100%; + outline: none; + margin: 0; +} + +#titlediv #title-prompt-text, +#wp-fullscreen-title-prompt-text { + color: #777; + position: absolute; + font-size: 1.7em; + padding: 11px 10px; +} + +#wp-fullscreen-save .fs-saved { + color: #999; + float: left; + margin-top: 4px; +} + +#wp-fullscreen-title-prompt-text { + padding: 11px; +} + +#poststuff .inside-submitbox, +#side-sortables .inside-submitbox { + margin: 0 3px; + font-size: 11px; +} + +input#link_description, +input#link_url { + width: 98%; +} + +#pending { + background: 0 none; + border: 0 none; + padding: 0; + font-size: 11px; + margin-top: -1px; +} + +#edit-slug-box { + line-height: 24px; + min-height: 25px; /* Yes, line-height + 1 */ + margin-top: 5px; + padding: 0 10px; +} + +#edit-slug-box .cancel { + margin-left: 10px; + font-size: 11px; +} + +#editable-post-name-full { + display: none; +} + +#editable-post-name input { + font-size: 13px; + height: 22px; + margin: 0; + width: 16em; +} + +.postarea h3 label { + float: right; +} + +.submitbox .submit { + text-align: right; + padding: 12px 10px 10px; + font-size: 11px; +} + +.submitbox .submitdelete { + text-decoration: none; + padding: 1px 2px; +} + +.submitbox .submit a:hover { + text-decoration: underline; +} + +.submitbox .submit input { + margin-bottom: 8px; + margin-left: 4px; + padding: 6px; +} + +.inside-submitbox #post_status { + margin: 2px -2px 2px 0; +} + +#post-status-select { + margin-top: 3px; +} + +/* Post Screen */ +#post-body #normal-sortables { + min-height: 50px; +} + +.postbox { + position: relative; + min-width: 255px; +} + +#trackback_url { + width: 99%; +} + +#normal-sortables .postbox .submit { + background: transparent none; + border: 0 none; + float: left; + padding: 0 12px; + margin:0; +} + +.category-add input[type="text"], +.category-add select { + width: 100%; + max-width: 260px; + vertical-align: baseline; +} + +#side-sortables .category-add input[type="text"], +#side-sortables .category-add select { + margin: 0 0 1em; +} + +.press-this #side-sortables .category-tabs li, +ul.category-tabs li, +#side-sortables .add-menu-item-tabs li, +.wp-tab-bar li { + display: inline; + line-height: 1.35em; +} + +.no-js .category-tabs li.hide-if-no-js { + display: none; +} + +.category-tabs a, +#side-sortables .add-menu-item-tabs a, +.wp-tab-bar a { + text-decoration: none; +} + +.category-tabs { + margin: 8px 0 5px; +} + +#category-adder h4 { + margin: 10px 0; +} + +#side-sortables .add-menu-item-tabs, +.wp-tab-bar { + margin-bottom: 3px; +} + +#normal-sortables .postbox #replyrow .submit { + float: none; + margin: 0; + padding: 0 7px 5px; +} + +#side-sortables .submitbox .submit input, +#side-sortables .submitbox .submit .preview, +#side-sortables .submitbox .submit a.preview:hover { + border: 0 none; +} + +#side-sortables .inside-submitbox .insidebox, +.stuffbox .insidebox { + margin: 11px 0; +} + +ul.category-tabs, +ul.add-menu-item-tabs, +ul.wp-tab-bar { + margin-top: 12px; +} + +ul.category-tabs li { + border-style: solid; + border-width: 1px; + position: relative; +} + +ul.add-menu-item-tabs li.tabs, +.wp-tab-active { + border-style: solid solid none; + border-width: 1px 1px 0; +} + +ul.add-menu-item-tabs li.tabs { + padding-bottom: 3px; + position: relative; +} + +#post-body .add-menu-item-tabs li.tabs { + border-style: solid none solid solid; + border-width: 1px 1px 1px 0; + margin-left: -1px; +} + +ul.category-tabs li, +ul.add-menu-item-tabs li, +ul.wp-tab-bar li { + padding: 3px 5px 5px; +} + +#postimagediv .inside img { + max-width: 100%; + height: auto; +} + +form#tags-filter { + position: relative; +} + +/* Edit posts */ +td.post-title strong, +td.plugin-title strong { + display: block; + margin-bottom: .2em; + font-size: 14px; +} + +td.post-title p, +td.plugin-title p { + margin: 6px 0; +} + +/* Global classes */ +.wp-hidden-children .wp-hidden-child, +.ui-tabs-hide { + display: none; +} + +.commentlist .avatar { + vertical-align: text-top; +} + +#post-body .tagsdiv #newtag { + margin-left: 5px; + width: 16em; +} + +#side-sortables input#post_password { + width: 94% +} + +#side-sortables .tagsdiv #newtag { + width: 68%; +} + +#post-status-info { + width: 100%; +} + +#post-status-info td { + font-size: 12px; +} + +.autosave-info { + padding: 2px 15px; + text-align: left; +} + +#editorcontent #post-status-info { + border: none; +} + +#content-resize-handle, +#post-body .wp_themeSkin .mceStatusbar a.mceResize { + background: transparent url('../images/resize.gif') no-repeat scroll left bottom; + width: 12px; + height: 12px; + cursor: sw-resize; +} + +.rtl #content-resize-handle, +.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize { + background: transparent url('../images/resize-rtl.gif') no-repeat scroll left bottom; +} + +#post-body .wp_themeSkin .mceStatusbar a.mceResize { + bottom: 3px; + position: absolute; + left: 3px; +} + +#post-body .postarea .wp_themeSkin .mceStatusbar a.mceResize { + bottom: -20px; +} + +#content-resize-handle { + position: absolute; + left: 3px; + bottom: -20px; +} + +.press-this #content-resize-handle { + bottom: 2px; +} + +.tmce-active #content-resize-handle { + display: none; +} + +#wp-word-count { + display: block; + padding: 2px 10px; +} + +#timestampdiv select { + height: 21px; + line-height: 14px; + padding: 0; + vertical-align: top; + font-size: 12px; +} + +#aa, #jj, #hh, #mn { + padding: 1px; + font-size: 12px; +} + +#jj, #hh, #mn { + width: 2em; +} + +#aa { + width: 3.4em; +} + +.curtime #timestamp { + padding: 2px 0 1px 0; + display: inline !important; + height: auto !important; +} + +#post-body #visibility:before, +.curtime #timestamp:before, +#post-body .misc-pub-revisions:before { + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0 0 0 2px; + top: 0; + right: -1px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +#post-body #visibility:before { + content: '\f177'; +} + +.curtime #timestamp:before { + content: '\f145'; + top: -1px; +} + +#post-body .misc-pub-revisions:before { + content: '\f321'; +} + +#timestampdiv { + padding-top: 5px; + line-height: 23px; +} + +#timestampdiv p { + margin: 8px 0 6px; +} + +#timestampdiv input { + border-width: 1px; + border-style: solid; +} + +.notification-dialog { + position: fixed; + top: 30%; + right: 50%; + width: 450px; + margin-right: -225px; + background: #fff; + line-height: 1.5; + z-index: 1000005; +} + +.notification-dialog-background { + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + background: #000; + opacity: 0.5; + filter: alpha(opacity=50); + z-index: 1000000; +} + +#post-lock-dialog .post-locked-message, +#post-lock-dialog .post-taken-over { + margin: 25px; +} + +#post-lock-dialog .post-locked-message a.button { + margin-left: 10px; +} + +#post-lock-dialog .post-locked-avatar { + float: right; + margin: 0 0 20px 20px; +} + +#post-lock-dialog .wp-tab-first { + outline: 0; +} + +#post-lock-dialog .locked-saving img { + float: right; + margin-left: 3px; +} + +#post-lock-dialog.saving .locked-saving, +#post-lock-dialog.saved .locked-saved { + display: inline; +} + +/*------------------------------------------------------------------------------ + 11.1 - Custom Fields +------------------------------------------------------------------------------*/ + +#postcustomstuff thead th { + padding: 5px 8px 8px; +} + +#postcustom #postcustomstuff .submit { + border: 0 none; + float: none; + padding: 0 8px 8px; +} + +#side-sortables #postcustom #postcustomstuff .submit { + margin: 0; + padding: 0; +} + +#side-sortables #postcustom #postcustomstuff #the-list textarea { + height: 85px; +} + +#side-sortables #postcustom #postcustomstuff td.left input, +#side-sortables #postcustom #postcustomstuff td.left select, +#side-sortables #postcustomstuff #newmetaleft a { + margin: 3px 3px 0; +} + +#postcustomstuff table { + margin: 0; + width: 100%; + border-width: 1px; + border-style: solid; + border-spacing: 0; +} + +#postcustomstuff tr { + vertical-align: top; +} + +#postcustomstuff table input, +#postcustomstuff table select, +#postcustomstuff table textarea { + width: 96%; + margin: 8px; +} + +#side-sortables #postcustomstuff table input, +#side-sortables #postcustomstuff table select, +#side-sortables #postcustomstuff table textarea { + margin: 3px; +} + +#postcustomstuff th.left, +#postcustomstuff td.left { + width: 38%; +} + +#postcustomstuff .submit input { + margin: 0; + width: auto; +} + +#postcustomstuff #newmetaleft a { + display: inline-block; + margin: 0 8px 8px; + text-decoration: none; +} + +.no-js #postcustomstuff #enternew { + display: none; +} + +#post-body-content .compat-attachment-fields { + margin-bottom: 20px; +} + +.compat-attachment-fields th { + padding-top: 5px; + padding-left: 10px; +} + +/*------------------------------------------------------------------------------ + 11.2 - Post Revisions +------------------------------------------------------------------------------*/ +.revisions-control-frame, +.revisions-diff-frame { + position: relative; +} + +.revisions-controls { + padding-top: 40px; + height: 100px; + z-index: 1; +} + +.revisions-controls input[type="checkbox"] { + position: relative; + top: -1px; + vertical-align: text-bottom; +} + +.revisions.pinned .revisions-controls { + position: fixed; + top: 0; + height: 82px; +} + +.revisions-tickmarks { + position: relative; + margin: 0 auto; + height: 0.7em; + top: 7px; + max-width: 70%; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.revisions-tickmarks > div { + position: absolute; + height: 100%; + border-style: solid; + border-width: 0 0 0 1px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.revisions-tickmarks > div:first-child { + border-width: 0; +} + +.comparing-two-revisions .revisions-controls { + height: 140px; +} + +.comparing-two-revisions.pinned .revisions-controls { + height: 124px; +} + +.revisions .diff-error { + position: absolute; + text-align: center; + margin: 0 auto; + width: 100%; + display: none; +} + +.revisions.diff-error .diff-error { + display: block; +} + +.revisions .loading-indicator { + position: fixed; + vertical-align: middle; + opacity: 0; + width: 100%; + top: 50%; + margin-right: -90px; + -webkit-transition: opacity 0.5s; + -moz-transition: opacity 0.5s; + -ms-transition: opacity 0.5s; + -o-transition: opacity 0.5s; + transition: opacity 0.5s; + filter: alpha(opacity=0); /* ie8 and earlier */ +} + +body.folded .revisions .loading-indicator { + margin-right: -32px; +} + +.revisions .loading-indicator span.spinner { + display: block; + margin: 0 auto; + float: none; +} + +.revisions.loading .loading-indicator { + opacity: 1; + filter: alpha(opacity=100); /* ie8 and earlier */ +} + +.revisions .diff { + -webkit-transition: opacity 0.5s; + -moz-transition: opacity 0.5s; + -ms-transition: opacity 0.5s; + -o-transition: opacity 0.5s; + transition: opacity 0.5s; +} + +.revisions.loading .diff { + opacity: 0.5; + filter: alpha(opacity=50); /* ie8 and earlier */ +} + +.revisions.diff-error .diff { + visibility: hidden; +} + +.revisions-meta { + margin-top: 20px; +} + +.revision-toggle-compare-mode { + position: absolute; + top: 0; + left: 0; +} + +.comparing-two-revisions .revisions-previous, +.comparing-two-revisions .revisions-next, +.revisions-meta .diff-meta-to strong { + display: none; +} + +.revisions-controls .author-card .date { + color: #777; +} + +.revisions-controls .author-card.autosave { + color: #d54e21; +} + +.revisions-controls .author-card .author-name { + font-weight: bold; +} + +.comparing-two-revisions .diff-meta-to strong { + display: block; +} + +.revisions.pinned .revisions-buttons { + padding: 0 11px; +} + +.revisions-previous, +.revisions-next { + position: relative; + z-index: 1; +} + +.revisions-previous { + float: right; +} + +.revisions-next { + float: left; +} + +.revisions-controls .wp-slider { + max-width: 70%; + margin: 0 auto; + top: -3px; +} + +.revisions-diff { + padding: 15px; +} + +.revisions-diff h3:first-child { + margin-top: 0; +} + +/* Revision meta box */ +.post-revisions li img, +#revisions-meta-restored img { + vertical-align: middle; +} + +table.diff tbody tr td:nth-child(2) { + width: 4%; +} + +table.diff { + width: 100%; + white-space: pre-wrap; +} + +table.diff col.content { + width: auto; +} + +table.diff col.content.diffsplit { + width: 48%; +} + +table.diff col.diffsplit.middle { + width: auto; +} + +table.diff col.ltype { + width: 30px; +} + +table.diff tr { + background-color: transparent; +} + +table.diff td, +table.diff th { + font-family: Consolas, Monaco, monospace; + font-size: 14px; + line-height: 1.618; + padding: .5em; +} + +table.diff td h1, +table.diff td h2, +table.diff td h3, +table.diff td h4, +table.diff td h5, +table.diff td h6 { + margin: 0; +} + +table.diff .diff-deletedline del, +table.diff .diff-addedline ins { + text-decoration: none; +} + +.diff-meta { + padding: 5px; + clear: both; + min-height: 32px; +} + +.diff-title strong { + line-height: 32px; + min-width: 60px; + text-align: left; + float: right; + margin-left: 5px; +} + +.revisions-controls .author-card .author-info { + font-size: 12px; + line-height: 16px; +} + +.revisions-controls .author-card .avatar, +.revisions-controls .author-card .author-info { + float: right; + margin-right: 6px; + margin-left: 6px; +} + +.revisions-controls .author-card .byline { + display: block; + font-size: 12px; +} + +.revisions-controls .author-card .avatar { + vertical-align: middle; +} + +.diff-meta input.restore-revision { + float: left; + margin-right: 6px; + margin-left: 6px; + margin-top: 4px; +} + +.diff-meta-from { + display: none; +} + +.comparing-two-revisions .diff-meta-from { + display: block; +} + +.revisions-tooltip { + position: absolute; + bottom: 105px; + margin-left: 0; + margin-right: -69px; + z-index: 0; + max-width: 350px; + min-width: 130px; + padding: 8px 4px; + display: none; + opacity: 0; +} + +.revisions-tooltip.flipped { + margin-right: 0; + margin-left: -70px; +} + +.revisions.pinned .revisions-tooltip { + display: none !important; +} + +.comparing-two-revisions .revisions-tooltip { + bottom: 145px; +} + +.revisions-tooltip-arrow { + width: 70px; + height: 15px; + overflow: hidden; + position: absolute; + right: 0; + margin-right: 35px; + bottom: -15px; +} + +.revisions-tooltip.flipped .revisions-tooltip-arrow { + margin-right: 0; + margin-left: 35px; + right: auto; + left: 0; +} + +.revisions-tooltip-arrow > span { + content: ""; + position: absolute; + right: 20px; + top: -20px; + width: 25px; + height: 25px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} + +.revisions-tooltip.flipped .revisions-tooltip-arrow > span { + right: auto; + left: 20px; +} + +.ie8 .revisions-tooltip-arrow > span { + right: 15px; + top: -25px; + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"; +} + +.ie8 .revisions-tooltip.flipped .revisions-tooltip-arrow > span { + left: 25px; +} + +.revisions-tooltip, +.revisions-tooltip-arrow > span { + border-width: 1px; + border-style: solid; +} + + + + +.revisions-tooltip { + display: none; +} + +.arrow { + width: 70px; + height: 16px; + overflow: hidden; + position: absolute; + right: 0; + margin-right: -35px; + bottom: 90px; + z-index: 10000; +} + +.arrow::after { + z-index: 9999; +} + +.arrow.top { + top: -16px; + bottom: auto; +} + +.arrow.left { + right: 20%; +} + +.arrow:after { + content: ""; + position: absolute; + right: 20px; + top: -20px; + width: 25px; + height: 25px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} + +.revisions-tooltip, +.revisions-tooltip-arrow:after { + border-width: 1px; + border-style: solid; +} + +div.revisions-controls > .wp-slider > .ui-slider-handle { + margin-right: -10px; +} + +.rtl div.revisions-controls > .wp-slider > .ui-slider-handle { + margin-left: -10px; +} + + /* jQuery UI Slider */ +.wp-slider.ui-slider { + position: relative; + border-width: 1px; + border-style: solid; + text-align: right; + cursor: pointer; +} + +.wp-slider .ui-slider-handle { + border-radius: 50%; + height: 18px; + margin-top: -3px; + outline: none; + position: absolute; + width: 18px; + z-index: 2; +} + +.wp-slider .ui-slider-handle:before { + background: none; + position: absolute; + top: 0; + right: 0; + content: "\f229"; + font: normal 18px/1 'dashicons'; + speak: none; + -webkit-font-smoothing:antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-slider .ui-slider-handle.from-handle:before, +.wp-slider .ui-slider-handle.to-handle:before { + font-size: 20px !important; + margin: -1px -1px 0 0; +} + +.wp-slider .ui-slider-handle.from-handle:before { + content: '\f139'; +} + +.wp-slider .ui-slider-handle.to-handle:before { + content: '\f141'; +} + +.rtl .wp-slider .ui-slider-handle.from-handle:before { + content: '\f141'; +} + +.rtl .wp-slider .ui-slider-handle.to-handle:before { + content: '\f139'; + left: -1px; +} + +.wp-slider .ui-slider-range { + position: absolute; + font-size: .7em; + display: block; + border: 0; + background-color: transparent; + background-image: none; +} + +.wp-slider.ui-slider-horizontal { + height: .7em; +} + +.wp-slider.ui-slider-horizontal .ui-slider-handle { + top: -.25em; + margin-right: -.6em; +} + +.wp-slider.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} + +.wp-slider.ui-slider-horizontal .ui-slider-range-min { + right: 0; +} + +.wp-slider.ui-slider-horizontal .ui-slider-range-max { + left: 0; +} + + +/*------------------------------------------------------------------------------ + 11.3 - Featured Images +------------------------------------------------------------------------------*/ + +#select-featured-image { + padding: 4px 0; + overflow: hidden; +} + +#select-featured-image img { + max-width: 100%; + height: auto; + margin-bottom: 10px; +} + +#select-featured-image a { + float: right; + clear: both; +} + +#select-featured-image .remove { + display: none; + margin-top: 10px; +} + +.js #select-featured-image.has-featured-image .remove { + display: inline-block; +} + +.no-js #select-featured-image .choose { + display: none; +} + +/*------------------------------------------------------------------------------ + 11.4 - Post formats +------------------------------------------------------------------------------*/ + +.post-state-format { + overflow: hidden; + display: inline-block; + vertical-align: middle; + height: 20px; + width: 20px; + margin-left: 5px; + margin-top: -4px; +} + +.post-state-format:before { + display: block; + height: 20px; + width: 20px; + font: normal 20px/1 'dashicons' !important; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#post-formats-select { + line-height: 2em; +} + +#post-formats-select .post-format-icon:before { + top: 5px; +} + +input.post-format { + margin-top: 1px; +} + +label.post-format-icon { + margin-right: 0px; + padding: 2px 0px 2px 0; +} + +.post-format-icon:before { + position: relative; + display: inline-block; + margin-left: 7px; + font: normal 20px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.post-state-format.post-format-standard:before, +.post-format-icon.post-format-standard:before, +a.post-state-format.format-standard:before { + content: '\f109'; +} + +.post-state-format.post-format-image:before, +.post-format-icon.post-format-image:before, +a.post-state-format.format-image:before { + content: '\f128'; +} + +.post-state-format.post-format-gallery:before, +.post-format-icon.post-format-gallery:before, +a.post-state-format.format-gallery:before { + content: '\f161'; +} + +.post-state-format.post-format-audio:before, +.post-format-icon.post-format-audio:before, +a.post-state-format.format-audio:before { + content: '\f127'; +} + +.post-state-format.post-format-video:before, +.post-format-icon.post-format-video:before, +a.post-state-format.format-video:before { + content: '\f126'; +} + +.post-state-format.post-format-chat:before, +.post-format-icon.post-format-chat:before, +a.post-state-format.format-chat:before { + content: '\f125'; +} + +.post-state-format.post-format-status:before, +.post-format-icon.post-format-status:before, +a.post-state-format.format-status:before { + content: '\f130'; +} + +.post-state-format.post-format-aside:before, +.post-format-icon.post-format-aside:before, +a.post-state-format.format-aside:before { + content: '\f123'; +} + +.post-state-format.post-format-quote:before, +.post-format-icon.post-format-quote:before, +a.post-state-format.format-quote:before { + content: '\f122'; +} + +.post-state-format.post-format-link:before, +.post-format-icon.post-format-link:before, +a.post-state-format.format-link:before { + content: '\f103'; +} + +/*------------------------------------------------------------------------------ + 12.0 - Categories +------------------------------------------------------------------------------*/ + +.category-adder { + margin-right: 120px; + padding: 4px 0; +} + +.category-adder h4 { + margin: 0 0 8px; +} + +#side-sortables .category-adder { + margin: 0; +} + +#post-body ul.add-menu-item-tabs { + float: right; + width: 120px; + text-align: left; + /* Negative margin for the sake of those without JS: all tabs display */ + margin: 0 5px 0 -120px; + padding: 0; +} + +ul.add-menu-item-tabs li { + padding: 3px 8px 3px 5px; +} + +#post-body ul.add-menu-item-tabs li.tabs { + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.wp-tab-panel, +.categorydiv div.tabs-panel, +.customlinkdiv div.tabs-panel, +.posttypediv div.tabs-panel, +.taxonomydiv div.tabs-panel { + min-height: 42px; + max-height: 200px; + overflow: auto; + padding: 0 0.9em; + border-style: solid; + border-width: 1px; +} + +div.tabs-panel-active { + display:block; +} + +div.tabs-panel-inactive { + display:none; +} + +#front-page-warning, +#front-static-pages ul, +ul.export-filters, +.inline-editor ul.cat-checklist ul, +.categorydiv ul.categorychecklist ul, +.customlinkdiv ul.categorychecklist ul, +.posttypediv ul.categorychecklist ul, +.taxonomydiv ul.categorychecklist ul { + margin-right: 18px; +} + +ul.categorychecklist li { + margin: 0; + padding: 0; + line-height: 22px; + word-wrap: break-word; +} + +.categorydiv .tabs-panel, +.customlinkdiv .tabs-panel, +.posttypediv .tabs-panel, +.taxonomydiv .tabs-panel { + border-width: 3px; + border-style: solid; +} + +.form-wrap p, +.form-wrap label { + font-size: 11px; +} + +.form-wrap label { + display: block; + padding: 2px; + font-size: 12px; +} + +.form-field input, +.form-field textarea { + border-style: solid; + border-width: 1px; + width: 95%; +} + +p.description, +.form-wrap p { + margin: 2px 0 5px; +} + +p.help, +p.description, +span.description, +.form-wrap p { + font-size: 13px; + font-style: italic; +} + +.form-wrap .form-field { + margin: 0 0 10px; + padding: 8px 0; +} + +.form-wrap .form-field #parent { + max-width: 100%; +} + +.col-wrap h3 { + margin: 12px 0; + font-size: 1.1em; +} + +.col-wrap p.submit { + margin-top: -10px; +} + + +/*------------------------------------------------------------------------------ + 13.0 - Tags +------------------------------------------------------------------------------*/ + +.tagsdiv { + margin-top: -8px; +} + +#poststuff .taghint { + color: #aaa; + margin: 15px 12px -24px 0; +} + +#poststuff .tagsdiv .howto { + margin: 0 0 6px 0; +} + +.ajaxtag .newtag { + position: relative; +} + +.tagsdiv .newtag { + width: 180px; +} + +.tagsdiv .the-tags { + display: block; + height: 60px; + margin: 0 auto; + overflow: auto; + width: 260px; +} + +#post-body-content .tagsdiv .the-tags { + margin: 0 5px; +} + +p.popular-tags { + border: none; + line-height: 2em; + max-width: 1000px; + padding: 8px 12px 12px; + text-align: justify; +} + +p.popular-tags a { + padding: 0 3px; +} + +.tagcloud { + width: 97%; + margin: 0 0 40px; + text-align: justify; +} + +.tagcloud h3 { + margin: 2px 0 12px; +} + +.ac_results { + padding: 0; + margin: 0; + list-style: none; + position: absolute; + z-index: 10000; + display: none; + border-width: 1px; + border-style: solid; +} + +.wp-customizer .ac_results { + z-index: 500000; +} + +.ac_results li { + padding: 2px 5px; + white-space: nowrap; + text-align: right; +} + +.ac_over { + cursor: pointer; +} + +.ac_match { + text-decoration: underline; +} + +/* links tables */ +table.links-table { + width: 100%; +} + +.links-table th { + font-weight: normal; + text-align: right; + vertical-align: top; + min-width: 80px; + width: 20%; + word-wrap: break-word; +} + +.links-table th, +.links-table td { + padding: 5px 0; +} + +.links-table td label { + margin-left: 8px; +} + +.links-table td input[type="text"], +.links-table td textarea { + width: 100%; +} + +.links-table #link_rel { + max-width: 280px; +} + +/*------------------------------------------------------------------------------ + 14.0 - Media Screen +------------------------------------------------------------------------------*/ + +.media-item .describe { + border-collapse: collapse; + width: 100%; + border-top-style: solid; + border-top-width: 1px; + clear: both; + cursor: default; +} + +.media-item.media-blank .describe { + border: 0; +} + +.media-item .describe th { + vertical-align: top; + text-align: right; + padding: 5px 10px 10px; + width: 140px; +} + +.media-item .describe .align th { + padding-top: 0; +} + +.media-item .media-item-info tr { + background-color: transparent; +} + +.media-item .describe td { + padding: 0 0 8px 8px; + vertical-align: top; +} + +.media-item thead.media-item-info td { + padding: 4px 10px 0; +} + +.media-item .media-item-info .A1B1 { + padding: 0 10px 0 0; +} + +.media-item td.savesend { + padding-bottom: 15px; +} + +.media-item .thumbnail { + max-height: 128px; + max-width: 128px; +} + +#wpbody-content #async-upload-wrap a { + display: none; +} + +.media-upload-form { + margin-top: 20px; +} + +.media-upload-form td label { + margin-left: 6px; + margin-right: 2px; +} + +.media-upload-form .align .field label { + display: inline; + padding: 0 23px 0 0; + margin: 0 3px 0 1em; + font-weight: 600; +} + +.media-upload-form tr.image-size label { + margin: 0 5px 0 0; + font-weight: 600; +} + +.media-upload-form th.label label { + font-weight: 600; + margin: 0.5em; + font-size: 13px; +} + +.media-upload-form th.label label span { + padding: 0 5px; +} + +abbr.required { + border: medium none; + text-decoration: none; +} + +.media-item .describe input[type="text"], +.media-item .describe textarea { + width: 460px; +} + +.media-item .describe p.help { + margin: 0; + padding: 0 5px 0 0; +} + +.media-item .edit-attachment, +.describe-toggle-on, +.describe-toggle-off { + display: block; + line-height: 36px; + float: left; +} + +.media-item .describe-toggle-off, +.media-item.open .describe-toggle-on { + display: none; +} + +.media-item.open .describe-toggle-off { + display: block; +} + +#media-items .media-item { + border-bottom-style: solid; + border-bottom-width: 1px; + min-height: 36px; + position: relative; + width: 100%; +} + +#media-items { + width: 623px; +} + +.media-new-php #media-items { + margin: 1em 0; +} + +#media-items:empty { + border: 0 none; +} + +.media-item .filename { + line-height: 36px; + overflow: hidden; +} + +.media-item .error-div { + padding-right: 10px; +} + +.media-item .pinkynail { + float: right; + margin: 2px 0 0 10px; + max-width: 40px; + max-height: 32px; +} + +.media-item .startopen, +.media-item .startclosed { + display: none; +} + +.media-item .original { + position: relative; + height: 34px; +} + +.media-item .progress { + float: left; + height: 22px; + margin: 7px 0 0; + width: 200px; + line-height: 2em; + padding: 0; + overflow: hidden; + margin-bottom: 2px; + border-radius: 22px; + background: #ddd; + -webkit-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); +} + +.media-item .bar { + z-index: 9; + width: 0; + height: 100%; + margin-top: -22px; + border-radius: 22px; + background-color: #0074a2; + -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,0.3); + box-shadow: inset 0 0 2px rgba(0,0,0,0.3); +} + +.media-item .progress .percent { + z-index: 10; + position: relative; + width: 200px; + padding: 0; + color: #fff; + text-align: center; + line-height: 22px; + font-weight: 400; + text-shadow: 0px 1px 2px rgba(0,0,0,0.2); +} + +.upload-php .fixed .column-parent { + width: 15%; +} + +.js .html-uploader #plupload-upload-ui { + display: none; +} + +.js .html-uploader #html-upload-ui { + display: block; +} + +.media-upload-form .media-item.error { + margin: 0; + padding: 0; +} + +.media-upload-form .media-item.error p, +.media-item .error-div { + line-height: 16px; + margin: 5px 10px; + padding: 0; +} + +.media-item .error-div a.dismiss { + display: block; + float: left; + margin: 5px 15px 0 4px; +} + +/*------------------------------------------------------------------------------ + 14.1 - Media Library +------------------------------------------------------------------------------*/ + +.find-box { + width: 600px; + height: 300px; + overflow: hidden; + padding: 33px 0 51px; + position: absolute; + z-index: 1000; +} + +.find-box-head { + cursor: move; + font-weight: 600; + height: 2em; + line-height: 2em; + padding: 1px 12px; + position: absolute; + top: 5px; + width: 100%; +} + +.find-box-inside { + overflow: auto; + padding: 6px; + height: 100%; +} + +.find-box-search { + overflow: hidden; + padding: 9px; + position: relative; +} + +.find-box-search .spinner { + float: none; + right: 125px; + position: absolute; + top: 9px; +} + +#find-posts-input { + float: right; + width: 140px; + height: 24px; +} + +#find-posts-search { + float: right; + margin: 1px 3px 0 4px; +} + +#find-posts-response { + margin: 8px 0; + padding: 0 1px 6px; +} + +#find-posts-response table { + width: 100%; +} + +#find-posts-response .found-radio { + padding: 3px 8px 0 0; + width: 15px; +} + +.find-box-buttons { + padding: 8px; + overflow: hidden; +} + +.find-box #resize-se { + position: absolute; + left: 1px; + bottom: 1px; +} + +.ui-find-overlay { + position: absolute; + top: 0; + right: 0; + background-color: #000; + opacity: 0.6; + filter: alpha(opacity=60); +} + +ul#dismissed-updates { + display: none; +} + +form.upgrade { + margin-top: 8px; +} + +form.upgrade .hint { + font-style: italic; + font-size: 85%; + margin: -0.5em 0 2em 0; +} + +#poststuff .inside .the-tagcloud { + margin: 5px 0 10px; + padding: 8px; + border-width: 1px; + border-style: solid; + line-height: 1.8em; + word-spacing: 3px; + -webkit-border-radius: 6px; + border-radius: 6px; +} + +.drag-drop #drag-drop-area { + border: 4px dashed #bbb; + height: 200px; +} + +.drag-drop .drag-drop-inside { + margin: 70px auto 0; + width: 250px; +} + +.drag-drop-inside p { + color: #aaa; + font-size: 14px; + margin: 5px 0; + display: none; +} + +.drag-drop .drag-drop-inside p { + text-align: center; +} + +.drag-drop-inside p.drag-drop-info { + font-size: 20px; +} + +.drag-drop .drag-drop-inside p, +.drag-drop-inside p.drag-drop-buttons { + display: block; +} + +/* +#drag-drop-area:-moz-drag-over { + border-color: #83b4d8; +} +borger color while dragging a file over the uploader drop area */ +.drag-drop.drag-over #drag-drop-area { + border-color: #83b4d8; +} + +#plupload-upload-ui { + position: relative; +} + + +/*------------------------------------------------------------------------------ + 14.2 - Image Editor +------------------------------------------------------------------------------*/ + +.wp_attachment_details #attachment_caption { + height: 4em; +} + +.describe .image-editor { + vertical-align: top; +} + +.imgedit-wrap { + position: relative; +} + +.imgedit-settings p { + margin: 8px 0; +} + +.post-php .imgedit-wrap table { + width: 100%; +} + +.describe .imgedit-wrap table td, +.wp_attachment_holder .imgedit-wrap table td { + vertical-align: top; + padding-top: 0; +} + +.describe .imgedit-wrap table td.imgedit-settings { + padding: 0 5px; +} + +.wp_attachment_holder .imgedit-wrap table td.imgedit-settings { + width: 250px; +} + +td.imgedit-settings input { + margin-top: 0; + vertical-align: middle; +} + +.imgedit-wait { + position: absolute; + top: 0; + background: #fff url('../images/spinner.gif') no-repeat scroll 22px 10px; + background-size: 20px 20px; + opacity: 0.7; + filter: alpha(opacity=70); + width: 100%; + height: 500px; + display: none; +} + +.spinner { + background: url('../images/spinner.gif') no-repeat; + background-size: 20px 20px; + display: none; + float: left; + opacity: 0.7; + filter: alpha(opacity=70); + width: 20px; + height: 20px; + margin: 2px 5px 0; +} + +.no-float { + float: none; +} + +.media-disabled, +.imgedit-settings .disabled { + color: grey; +} + +.wp_attachment_image, +.A1B1 { + overflow: hidden; +} + +.wp_attachment_image .button, +.A1B1 .button { + float: right; +} + +.no-js .wp_attachment_image .button { + display: none; +} + +.wp_attachment_image .spinner, +.A1B1 .spinner { + float: right; + padding: 0 0 4px 0; + vertical-align: bottom; +} + +.imgedit-menu { + margin: 0 0 12px; + min-width: 300px; +} + +.imgedit-menu div { + float: right; + width: 32px; + background: none; + margin: 0 0 0 8px; + height: 32px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-align: center; + line-height: 28px; +} + +.imgedit-menu div:before { + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; +} + +.imgedit-crop:before { + content:'\f165'; +} + +.imgedit-rleft:before { + content:'\f166'; +} + +.imgedit-rright:before { + content:'\f167'; +} + +.imgedit-flipv:before { + content:'\f168'; +} + +.imgedit-fliph:before { + content:'\f169'; +} + +.imgedit-undo:before { + content:'\f171'; +} + +.imgedit-redo:before { + content:'\f172'; +} + +.imgedit-crop-wrap { + position: relative; +} + +.imgedit-crop { + margin: 0 0 0 8px; +} + +.imgedit-rleft { + margin: 0 3px; +} + +.imgedit-rright { + margin: 0 3px 0 8px; +} + +.imgedit-flipv { + margin: 0 3px; +} + +.imgedit-fliph { + margin: 0 3px 0 8px; +} + +.imgedit-undo { + margin: 0 3px; +} + +.imgedit-redo { + margin: 0 3px 0 8px; +} + +.imgedit-applyto img { + margin: 0 0 0 8px; +} + +.imgedit-group-top { + margin: 5px 0; +} + +.imgedit-applyto .imgedit-label { + padding: 2px 0 0; + display: block; +} + +.imgedit-help { + display: none; + font-style: italic; + margin-bottom: 8px; +} + +a.imgedit-help-toggle { + text-decoration: none; +} + +.form-table td.imgedit-response { + padding: 0; +} + +.imgedit-submit { + margin: 8px 0; +} + +.imgedit-submit-btn { + margin-right: 20px; +} + +.imgedit-wrap .nowrap { + white-space: nowrap; +} + +span.imgedit-scale-warn { + color: red; + font-size: 20px; + font-style: normal; + visibility: hidden; + vertical-align: middle; +} + +.imgedit-group { + margin-bottom: 8px; + padding: 2px 10px; +} + +/*------------------------------------------------------------------------------ + 15.0 - Comments Screen +------------------------------------------------------------------------------*/ + +.form-table { + border-collapse: collapse; + margin-top: 0.5em; + width: 100%; + clear: both; +} + +.form-table, +.form-table td, +.form-table th, +.form-table td p, +.form-wrap label { + font-size: 14px; +} + +.form-table td { + margin-bottom: 9px; + padding: 15px 10px; + line-height: 1.3; + vertical-align: middle; +} + +.form-table th, +.form-wrap label { + font-weight: normal; + text-shadow: none; + vertical-align: baseline; +} + +.form-table th { + vertical-align: top; + text-align: right; + padding: 20px 0 20px 10px; + width: 200px; + line-height: 1.3; + font-weight: 600; +} + +.form-table th.th-full { + width: auto; + font-weight: 400; +} + +.form-table input.tog { + margin-top: 2px; + margin-left: 2px; + float: right; +} + +.form-table td p { + margin-top: 4px; + margin-bottom: 0; +} + +.form-table td fieldset label { + margin: 0.25em 0 0.5em !important; + display: inline-block; +} + +.form-table td fieldset label, +.form-table td fieldset p, +.form-table td fieldset li { + line-height: 1.4em; +} + +.form-table input.tog, +.form-table input[type=radio] { + margin-top: -4px; + margin-left: 4px; + float: none; +} + +.commentlist li { + padding: 1em 1em .2em; + margin: 0; + border-bottom-width: 1px; + border-bottom-style: solid; +} + +.commentlist li li { + border-bottom: 0; + padding: 0; +} + +.commentlist p { + padding: 0; + margin: 0 0 .8em; +} + +/* reply to comments */ +#replyrow input { + border-width: 1px; + border-style: solid; +} + +#replyrow td { + padding: 2px; +} + +#replysubmit { + margin: 0; + padding: 0 5px 3px; + text-align: center; +} + +#replysubmit .spinner { + padding: 2px 0 0; + vertical-align: top; + float: left; +} + +#replysubmit .button { + margin-left: 5px; +} + +#replysubmit .error { + color: red; + line-height: 21px; + text-align: center; +} + +#replyrow h5 { + margin: .2em 0 0; + padding: 0 5px; + line-height: 1.4em; + font-size: 1em; +} + +#edithead .inside { + float: right; + padding: 3px 5px 2px 0; + margin: 0; + text-align: center; +} + +#edithead .inside input { + width: 180px; +} + +#edithead label { + padding: 2px 0; +} + +#replycontainer { + padding: 5px; +} + +#replycontent { + height: 120px; + -webkit-box-shadow: none; + box-shadow: none; +} + +.comment-php .wp-editor-area { + height: 200px; +} + +.comment-ays { + margin-bottom: 0; + border-bottom-style: solid; + border-bottom-width: 1px; +} + +.comment-ays .alt { + background-color: transparent; +} + +.trash-undo-inside, +.spam-undo-inside { + margin: 1px 0 1px 8px; + line-height: 16px; +} + +.spam-undo-inside .avatar, +.trash-undo-inside .avatar { + height: 20px; + width: 20px; + margin-left: 8px; + vertical-align: middle; +} + +.stuffbox .editcomment { + clear: none; +} + +#comment-status-radio p { + margin: 3px 0 5px; +} + +#comment-status-radio input { + margin: 2px 0 5px 3px; + vertical-align: middle; +} + +#comment-status-radio label { + padding: 5px 0; +} + +.commentlist .avatar { + vertical-align: text-top; +} + +#the-comment-list .unapproved th.check-column input { + margin-right: 4px; +} + + +/*------------------------------------------------------------------------------ + 16.0 - Themes +------------------------------------------------------------------------------*/ + + +/*------------------------------------------------------------------------------ + 16.1 - Manage Themes +------------------------------------------------------------------------------*/ + +.theme-browser .themes { + clear: both; + padding: 0 0 100px; +} + +.themes-php .wrap h2 { + float: right; + margin-bottom: 15px; +} + +.network-admin.themes-php .wrap h2 { + margin-bottom: 0; +} + +.themes-php .wrap h2 .button { + margin-right: 20px; +} + +.themes-php .wrap .theme-count { + color: #fff; + border-radius: 30px; + background: #777; + font-size: 14px; + padding: 4px 10px; + font-weight: 600; + margin-right: 5px; + margin-left: 20px; + position: relative; + top: -3px; +} + +/* Position admin messages */ +.themes-php div.updated, +.themes-php div.error { + margin: 0 0 20px 0; + clear: both; +} + +.themes-php div.updated a { + text-decoration: underline; +} + +/** + * Main theme element + * (has flexible margins) + */ +.theme-browser .theme { + cursor: pointer; + float: right; + margin: 0 0 4% 4%; + position: relative; + width: 30.6%; + border: 1px solid #dedede; + -webkit-box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); + box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.ie8 .theme-browser .theme { + width: 30%; + margin: 0 0 4% 3%; +} + +.theme-browser .theme:nth-child(3n) { + margin-left: 0; +} + +.theme-browser .theme:hover, +.theme-browser .theme:focus { + cursor: pointer; +} + +.theme-browser .theme .theme-name { + font-size: 15px; + font-weight: 600; + margin: 0; + padding: 15px; + -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + background: #fff; + background: rgba(255,255,255,0.65); +} + +/* Activate and Customize buttons, shown on hover */ +.theme-browser .theme .theme-actions { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + opacity: 0; + -webkit-transition: opacity 0.1s ease-in-out; + transition: opacity 0.1s ease-in-out; + position: absolute; + bottom: 0; + left: 0; + height: 38px; + padding: 9px 10px 0 10px; + background: rgba(244, 244, 244, 0.7); + border-right: 1px solid rgba(0,0,0,0.05); +} + +.theme-browser .theme:hover .theme-actions { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; +} + +.theme-browser .theme .theme-actions .button-primary { + margin-left: 3px; +} + +.theme-browser .theme .theme-actions .button-secondary { + float: none; + margin-right: 3px; +} + +/** + * Theme Screenshot + * + * Has a fixed aspect ratio of 1.5 to 1 regardless of screenshot size + * It is also responsive. + */ +.theme-browser .theme .theme-screenshot { + display: block; + overflow: hidden; + position: relative; + -webkit-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; +} + +.theme-browser .theme .theme-screenshot:after { + content: ''; + display: block; + padding-top: 66.66666%; /* using a 3/2 aspect ratio */ +} + +.theme-browser .theme .theme-screenshot img { + height: auto; + position: absolute; + right: 0; + top: 0; + width: 100%; + -webkit-transform: translateZ( 0 ); /* Prevents rendering bugs in Chrome */ + -webkit-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; +} + +.theme-browser .theme:hover .theme-screenshot { + background: #fff; +} + +.theme-browser.rendered .theme:hover .theme-screenshot img { + opacity: 0.4; +} + +.theme-browser .theme .more-details { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + opacity: 0; + position: absolute; + top: 35%; + left: 25%; + right: 25%; + background: #222; + background: rgba(0,0,0,0.7); + color: #fff; + font-size: 15px; + text-shadow: 0 1px 0 rgba(0,0,0,0.6); + -webkit-font-smoothing: antialiased; + font-weight: 600; + padding: 15px 12px; + text-align: center; + border-radius: 3px; + -webkit-transition: opacity 0.1s ease-in-out; + transition: opacity 0.1s ease-in-out; +} +.theme-browser .theme:focus { + outline: 1px dotted #222; +} +/* Hide shortcut actions and hover feedback when using tab navigation */ +.theme-browser .theme:focus .theme-actions { + display: none; +} +/* Restore display of theme controls if you hover a focused theme */ +.theme-browser .theme:focus:hover .theme-actions { + display: block; +} +.theme-browser .theme:focus .more-details { + opacity: 1; +} +/* Current theme needs to have its action always on view */ +.theme-browser .theme.active:focus .theme-actions { + display: block; +} + +.theme-browser.rendered .theme:hover .more-details { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; +} + +/** + * Displays a theme update notice + * when an update is available. + */ +.theme-browser .theme .theme-update { + background: #d54e21; + background: rgba(213, 78, 33, 0.95); + color: #fff; + display: block; + font-size: 13px; + font-weight: 400; + height: 48px; + line-height: 48px; + padding: 0 10px; + position: absolute; + top: 0; + left: 0; + right: 0; + border-bottom: 1px solid rgba(0,0,0,0.25); + overflow: hidden; +} + +.theme-browser .theme .theme-update:before { + content: '\f463'; + display: inline-block; + font: normal 20px/1 'dashicons'; + margin: 0 0 0 6px; + opacity: 0.8; + position: relative; + top: 5px; + speak: none; + -webkit-font-smoothing: antialiased; +} + + +/** + * The currently active theme + */ +.theme-browser .theme.active .theme-name { + background: #2f2f2f; + color: #fff; + padding-left: 110px; + font-weight: 300; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.5); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.5); +} + +.theme-browser .theme.active .theme-name span { + font-weight: 600; +} + +.theme-browser .theme.active .theme-actions { + background: rgba(49,49,49,0.7); + border-right: none; + opacity: 1; +} + +.theme-browser .theme.active .theme-actions .button-primary { + margin-left: 0; +} + +.theme-browser .theme .theme-author { + background: #222; + color: #eee; + display: none; + font-size: 14px; + margin: 0 10px; + padding: 5px 10px; + position: absolute; + bottom: 56px; +} + +.theme-browser .theme.display-author .theme-author { + display: block; +} + +.theme-browser .theme.display-author .theme-author a { + color: inherit; + text-decoration: none; +} + +/** + * Add new theme + */ +.theme-browser .theme.add-new-theme { + border: none; + box-shadow: none; +} + +.theme-browser .theme.add-new-theme a { + color: #999; + text-decoration: none; + display: block; + position: relative; + z-index: 1; +} + +.theme-browser .theme.add-new-theme:after { + display: block; + content: ''; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; + background: transparent; + background: rgba(0, 0, 0, 0); + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + padding: 10% 0 0 0; + text-shadow: none; + border: 5px dashed #d5d2ca; + border: 5px dashed rgba(0, 0, 0, 0.1); + -webkit-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.theme-browser .theme.add-new-theme span:after { + background: #e5e5e5; + background: rgba(153, 153, 153, 0.1); + border-radius: 50%; + display: inline-block; + content: '\f132'; + -webkit-font-smoothing: antialiased; + font: normal 74px/115px 'dashicons'; + width: 100px; + height: 100px; + vertical-align: middle; + text-align: center; + color: rgb(153, 153, 153); + position: absolute; + top: 30%; + right: 50%; + margin-right: -50px; + text-indent: -4px; + padding: 0; + text-shadow: none; + z-index:4; +} + +.rtl .theme-browser .theme.add-new-theme span:after { + text-indent: 4px; +} + +.theme-browser .theme.add-new-theme:hover .theme-screenshot { + background: none; +} + +.theme-browser .theme.add-new-theme:hover span:after { + background: #fff; + color: #0074a2; +} + +.theme-browser .theme.add-new-theme:hover:after { + border-color: transparent; + color: #fff; + background: #0074a2; + content: ''; +} + +.theme-browser .theme.add-new-theme .theme-name { + background: none; + text-align: center; + box-shadow: none; + font-weight: 400; + position: relative; + top: 0; + margin-top: -10%; + margin-bottom: 10%; +} + +.theme-browser .theme.add-new-theme:hover .theme-name { + color: #fff; + z-index: 2; +} + +/* + * The search form + */ +.themes-php .theme-search { + position: relative; + top: -2px; + right: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.5; + width: 280px; +} + +/** + * Theme Overlay + * Shown when clicking a theme + */ +.theme-overlay .theme-backdrop { + position: absolute; + right: -20px; + left: 0; + top: 0; + bottom: 0; + background: #f1f1f1; + background: rgba( 238, 238, 238, 0.9 ); + z-index: 10; +} + +body.theme-overlay-open { + overflow: hidden; +} + +.theme-overlay .theme-header { + position: absolute; + top: 0; + right: 0; + left: 0; + height: 48px; + border-bottom: 1px solid #ddd; +} + +.theme-overlay .theme-header .close { + cursor: pointer; + height: 48px; + width: 50px; + text-align: center; + float: left; + border: 0; + border-right: 1px solid #ddd; + background-color: transparent; +} + +.theme-overlay .theme-header .close:hover:before, +.theme-overlay .theme-header .close:focus:before { + color: #fff; +} + +.theme-overlay .theme-header .close:before { + font: normal 30px/50px 'dashicons' !important; + color: #777; + display: inline-block; + content: '\f335'; + font-weight: 300; +} + +/* Left and right navigation */ +.theme-overlay .theme-header .right, +.theme-overlay .theme-header .left { + cursor: pointer; + color: #777; + background-color: transparent; + height: 48px; + width: 54px; + float: right; + text-align: center; + border: 0; + border-left: 1px solid #ddd; +} + +.theme-overlay .theme-header .close:hover, +.theme-overlay .theme-header .right:hover, +.theme-overlay .theme-header .left:hover, +.theme-overlay .theme-header .close:focus, +.theme-overlay .theme-header .right:focus, +.theme-overlay .theme-header .left:focus { + background: #0074a2; + color: #fff; +} + +.theme-overlay .theme-header .left.disabled, +.theme-overlay .theme-header .right.disabled, +.theme-overlay .theme-header .left.disabled:hover, +.theme-overlay .theme-header .right.disabled:hover { + color: #ccc; + background: inherit; + cursor: inherit; +} + +.theme-overlay .theme-header .right:before, +.theme-overlay .theme-header .left:before { + font: normal 20px/50px 'dashicons' !important; + display: inline; + font-weight: 300; +} + +.theme-overlay .theme-header .left:before { + content: '\f340'; +} + +.theme-overlay .theme-header .right:before { + content: '\f344'; +} + +.rtl .theme-overlay .theme-header .left:before { + content: '\f345'; +} + +.rtl .theme-overlay .theme-header .right:before { + content: '\f341'; +} + +.theme-overlay .theme-wrap { + clear: both; + position: fixed; + top: 9%; + right: 190px; + left: 30px; + bottom: 3%; + background: #fff; + -webkit-box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1); + z-index: 20; + box-sizing: border-box; +} + +.theme-overlay .theme-wrap:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +body.folded .theme-overlay .theme-wrap { + right: 70px; +} + +.theme-overlay .theme-about { + position: absolute; + top: 49px; + bottom: 57px; + right: 0; + left: 0; + overflow: auto; + padding: 2% 4%; +} +.theme-overlay .theme-about:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.theme-overlay .theme-actions { + position: absolute; + text-align: center; + bottom: 0; + right: 0; + left: 0; + padding: 10px 25px 5px; + background: #f3f3f3; + z-index: 30; + box-sizing: border-box; + border-top: 1px solid #eee; +} + +.ie8 .theme-overlay .theme-actions { + border: 1px solid #eee; +} + +.theme-overlay .theme-actions a { + margin-left: 5px; + margin-bottom: 5px; +} + +.theme-overlay .theme-actions .delete-theme { + color: #a00; + position: absolute; + left: 10px; + bottom: 5px; + text-decoration: none; + border-color: transparent; + box-shadow: none; + background: transparent; +} + +.theme-overlay .theme-actions .delete-theme:hover, +.theme-overlay .theme-actions .delete-theme:focus { + background: #d54e21; + color: #fff; + border-color: #d54e21; +} + +.theme-overlay .theme-actions .active-theme, +.theme-overlay.active .theme-actions .inactive-theme { + display: none; +} + +.theme-overlay .theme-actions .inactive-theme, +.theme-overlay.active .theme-actions .active-theme { + display: block; +} + +/** + * Theme Screenshots gallery + */ +.theme-overlay .theme-screenshots { + float: right; + margin: 0 0 0 30px; + width: 55%; + max-width: 880px; + text-align: center; +} + +/* First screenshot, shown big */ +.theme-overlay .screenshot { + border: 1px solid #fff; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + position: relative; + -webkit-box-shadow: 0 0 0 1px rgba(0,0,0,0.2); + box-shadow: 0 0 0 1px rgba(0,0,0,0.2); +} + +.theme-overlay .screenshot:after { + content: ''; + display: block; + padding-top: 75%; /* using a 4/3 aspect ratio */ +} + +.theme-overlay .screenshot img { + height: auto; + position: absolute; + right: 0; + top: 0; + width: 100%; +} +/* Handles old 300px screenshots */ +.theme-overlay.small-screenshot .theme-screenshots { + position: absolute; + width: 302px; +} +.theme-overlay.small-screenshot .theme-info { + margin-right: 350px; + width: auto; +} + +/* Other screenshots, shown small and square */ +.theme-overlay .screenshot.thumb { + background: #ccc; + border: 1px solid #eee; + float: none; + display: inline-block; + margin: 10px 5px 0; + width: 140px; + height: 80px; + cursor: pointer; +} + +.theme-overlay .screenshot.thumb:after { + content: ''; + display: block; + padding-top: 100%; /* using a 1/1 aspect ratio */ +} + +.theme-overlay .screenshot.thumb img { + cursor: pointer; + height: auto; + position: absolute; + right: 0; + top: 0; + width: 100%; + height: auto; +} + +.theme-overlay .screenshot.selected { + background: transparent; + border: 2px solid #2ea2cc; +} + +.theme-overlay .screenshot.selected img { + opacity: 0.8; +} + +/* No screenshot placeholder */ +.theme-browser .theme .theme-screenshot.blank, +.theme-overlay .screenshot.blank { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYGWO8d+/efwYkoKioiMRjYGBC4WHhUK6A8T8QIJt8//59ZC493AAAQssKpBK4F5AAAAAASUVORK5CYII=); +} + +/** + * Theme heading information + */ +.theme-overlay .theme-info { + width: 40%; + float: right; +} + +.theme-overlay .current-label { + background: #333; + color: #fff; + font-size: 11px; + display: inline-block; + padding: 2px 8px; + border-radius: 2px; + margin: 0 0 -10px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.theme-overlay .theme-name { + color: #222; + font-size: 32px; + font-weight: 100; + margin: 10px 0 0; + line-height: 1.3; +} + +.theme-overlay .theme-version { + color: #999; + font-size: 13px; + font-weight: 400; + float: none; + display: inline-block; + margin-right: 10px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.theme-overlay .theme-author { + color: #686868; + font-size: 16px; + font-weight: 400; + margin: 15px 0 25px; +} + +.theme-overlay .theme-author a { + text-decoration: none; +} + +.theme-overlay .theme-description { + color: #555; + font-size: 15px; + font-weight: 400; + line-height: 1.5; + margin: 30px 0 0 0; +} + +.theme-overlay .theme-tags { + border-top: 3px solid #eee; + color: #888; + font-size: 13px; + font-weight: 400; + margin: 30px 0 0 0; + padding-top: 20px; +} + +.theme-overlay .theme-tags span { + color: #444; + font-weight: bold; + margin-left: 5px; +} + +/* Theme Updates info */ +.theme-overlay .theme-update-message { + background: #fefaf7; + border: 1px solid #eee; + border-right: 4px solid #d54e21; + border-radius: 3px; + padding: 5px 20px 10px; +} + +.theme-overlay .theme-update { + color: #222; + font-size: 18px; + display: inline-block; + line-height: 40px; + margin: 0; +} + +.theme-overlay .parent-theme { + background: #f7fcfe; + border: 1px solid #eee; + border-right: 4px solid #2ea2cc; + font-size: 14px; + font-weight: normal; + margin-top: 30px; + padding: 10px 20px 10px 10px; +} + +.theme-overlay .parent-theme strong { + font-weight: 700; +} + +/** + * Single Theme Mode + * Displays detailed view inline when a user has no switch capabilities + */ +.single-theme .theme-overlay .theme-backdrop, +.single-theme .theme-overlay .theme-header, +.single-theme .theme { + display: none; +} + +.single-theme .theme-overlay .theme-wrap { + clear: both; + min-height: 330px; + position: relative; + right: auto; + left: auto; + top: auto; + bottom: auto; +} + +.single-theme .theme-overlay .theme-about { + padding: 30px 30px 70px; + position: static; +} + +.single-theme .theme-overlay .theme-actions { + position: absolute; +} + +/** + * Basic Responsive structure... + * + * Shuffles theme columns around based on screen width + */ + +@media only screen and (min-width: 2000px) { + #wpwrap .theme-browser .theme { + width: 17.6%; + margin: 0 0 3% 3%; + } + + #wpwrap .theme-browser .theme:nth-child(3n), + #wpwrap .theme-browser .theme:nth-child(4n) { + margin-left: 3%; + } + + #wpwrap .theme-browser .theme:nth-child(5n) { + margin-left: 0; + } +} + +@media only screen and (min-width: 1680px) { + .theme-overlay .theme-wrap { + width: 1450px; + margin: 0 auto; + } +} + +/* Maximum screenshot width reaches 440px */ +@media only screen and (min-width: 1640px) { + .theme-browser .theme { + width: 22.7%; + margin: 0 0 3% 3%; + } + .theme-browser .theme .theme-screenshot:after { + padding-top: 75%; /* using a 4/3 aspect ratio */ + } + + .theme-browser .theme:nth-child(3n) { + margin-left: 3%; + } + + .theme-browser .theme:nth-child(4n) { + margin-left: 0; + } +} +/* Maximum screenshot width reaches 440px */ +@media only screen and (max-width: 1120px) { + .theme-browser .theme { + width: 47.5%; + margin-left: 0; + } + + .theme-browser .theme:nth-child(even) { + margin-left: 0; + } + + .theme-browser .theme:nth-child(odd) { + margin-left: 5%; + } +} + +/* Admin menu is folded */ +@media only screen and (max-width: 900px) { + .theme-overlay .theme-wrap { + right: 65px; + } +} + +@media only screen and (max-width: 780px) { + body.folded .theme-overlay .theme-wrap, + .theme-overlay .theme-wrap { + top: 0; /* The adminmenu isn't fixed on mobile, so this can use the full viewport height */ + left: 0; + bottom: 0; + right: 0; + padding: 70px 20px 20px; + border: none; + z-index: 500; /* should overlap #wpadminbar, which is 500 on mobile. */ + position: fixed; + } + + .theme-browser .theme.active .theme-name span { + /* Hide the "Active: " label on smaller screens. */ + display: none; + } + + .theme-overlay .theme-screenshots { + width: 40%; + } + + .theme-overlay .theme-info { + width: 50%; + } + .single-theme .theme-wrap { + padding: 10px; + } + + .theme-browser .theme .theme-actions { + padding: 5px 10px 4px 10px; + } + + .theme-overlay.small-screenshot .theme-screenshots { + position: static; + float: none; + max-width: 302px; + } + + .theme-overlay.small-screenshot .theme-info { + margin-right: 0; + width: auto; + } + + .theme:not(.active):hover .theme-actions, + .theme:hover .more-details { + display: none; + } + + .theme-browser.rendered .theme:hover .theme-screenshot img { + opacity: 1.0; + } +} + +@media only screen and (max-width: 480px) { + .theme-browser .theme { + width: 100%; + margin-left: 0; + } + + .theme-browser .theme:nth-child(2n), + .theme-browser .theme:nth-child(3n) { + margin-left: 0; + } +} + +@media only screen and (max-width: 650px) { + .theme-overlay .theme-update, + .theme-overlay .theme-description { + margin-right: 0; + } + + .theme-overlay .theme-actions .delete-theme { + position: relative; + left: auto; + bottom: auto; + } + + .theme-overlay .theme-actions .inactive-theme { + display: inline; + } + + .theme-overlay .theme-screenshots { + width: 100%; + float: none; + } + + .theme-overlay .theme-info { + width: 100%; + } + + .theme-overlay .theme-author { + margin: 5px 0 15px 0; + } + + .theme-overlay .current-label { + margin-top: 10px; + font-size: 13px; + } + + .themes-php .wrap h2 { + width: 100%; + } + + .themes-php .theme-search { + float: none; + clear: both; + right: 0; + top: 0; + left: 0; + margin: 10px 0; + width: 100%; + } + + .theme-browser .theme.add-new-theme span:after { + font: normal 60px/90px 'dashicons'; + width: 80px; + height: 80px; + top: 30%; + right: 50%; + text-indent: 0; + margin-right: -40px; + } + + .single-theme .theme-wrap { + margin: 0 -10px 0 -12px; + padding: 10px; + } + .single-theme .theme-overlay .theme-about { + padding: 10px; + overflow: visible; + } + .single-theme .current-label { + display: none; + } + .single-theme .theme-overlay .theme-actions { + position: static; + } +} + +.broken-themes { + clear: both; +} + +.broken-themes table { + text-align: right; + width: 50%; + border-spacing: 3px; + padding: 3px; +} + + +/*------------------------------------------------------------------------------ + 16.2 - Install Themes +------------------------------------------------------------------------------*/ + +.theme-install-php h4 { + margin: 2.5em 0 8px; +} + +.theme-install-php .tablenav { + height: auto; +} + +.theme-install-php .spinner { + margin-top: 9px; +} + +.available-theme { + display: inline-block; + margin-left: 10px; + overflow: hidden; + padding: 20px 0 20px 20px; + vertical-align: top; + width: 300px; +} + +.available-theme .screenshot { + width: 300px; + height: 225px; + display: block; + border-width: 1px; + border-style: solid; + margin-bottom: 10px; + overflow: hidden; +} + +.available-theme img { + width: 300px; +} + +.available-theme h3 { + margin: 15px 0 0; +} + +.available-theme .theme-author { + line-height: 18px; +} + +.available-theme .action-links { + margin-top: 10px; + overflow: hidden; +} + +.available-theme a.screenshot:focus { + border-color: #777; +} + +.available-theme .action-links li { + float: right; + padding-left: 10px; + margin-left: 10px; + border-left: 1px solid #dfdfdf; +} + +.available-theme .action-links li { + padding-left: 8px; + margin-left: 8px; +} + +.ie8 .available-theme .action-links li { + padding-left: 7px; + margin-left: 7px; +} + +.available-theme .action-links li:last-child { + padding-left: 0; + margin-left: 0; + border-left: 0; +} + +.available-theme .action-links .delete-theme { + float: left; + margin-right: 8px; + margin-left: 0; +} + +.available-theme .action-links .delete-theme a { + color: red; + padding: 2px; +} + +.available-theme .action-links .delete-theme a:hover { + background: red; + color: #fff; + text-decoration: none; +} + +.available-theme .action-links p { + float: right; +} + +/* Allow for three-up in small windows when sidebar is collapsed */ +@media only screen and (max-width: 1200px) { + .folded .available-theme, + .folded .available-theme .screenshot { + width: 300px; + } + + .folded .available-theme .screenshot { + height: 225px; + } +} + +/* Adjust three-up display in smaller windows when sidebar is collapsed */ +@media only screen and (max-width: 1079px) { + .folded .available-theme, + .folded .available-theme .screenshot { + width: 270px; + } + + .folded .available-theme .screenshot { + height: 203px; + } +} + +/* Allow for three-up on 1024px wide screens, e.g. tablets */ +@media only screen and (max-width: 1200px) { + .available-theme, + .available-theme .screenshot { + width: 240px; + } + + .available-theme .screenshot { + height: 180px; + } + + .available-theme img { + width: 100%; + } +} + +#post-body ul.add-menu-item-tabs li.tabs a, +#TB_window #TB_title a.tb-theme-preview-link, +#TB_window #TB_title a.tb-theme-preview-link:visited { + font-weight: 600; + text-decoration: none; +} + +#TB_window #TB_title { + background-color: #222; + color: #cfcfcf; +} + + +/*------------------------------------------------------------------------------ + 16.3 - Custom Header Screen +------------------------------------------------------------------------------*/ + +.appearance_page_custom-header #headimg { + border: 1px solid #DFDFDF; + overflow: hidden; + width: 100%; +} + +.appearance_page_custom-header #upload-form p label { + font-size: 12px; +} + +.appearance_page_custom-header .available-headers .default-header { + float: right; + margin: 0 0 20px 20px; +} + +.appearance_page_custom-header .random-header { + clear: both; + margin: 0 0 20px 20px; + vertical-align: middle; +} + +.appearance_page_custom-header .available-headers label input, +.appearance_page_custom-header .random-header label input { + margin-left: 10px; +} + +.appearance_page_custom-header .available-headers label img { + vertical-align: middle; +} + + +/*------------------------------------------------------------------------------ + 16.4 - Custom Background Screen +------------------------------------------------------------------------------*/ + +div#custom-background-image { + min-height: 100px; + border: 1px solid #dfdfdf; +} + +div#custom-background-image img { + max-width: 400px; + max-height: 300px; +} + + +/*------------------------------------------------------------------------------ + 17.0 - Plugins +------------------------------------------------------------------------------*/ + +#dashboard_right_now .versions .b, +#post-status-display, +#post-visibility-display, +#adminmenu .wp-submenu li.current, +#adminmenu .wp-submenu li.current a, +#adminmenu .wp-submenu li.current a:hover, +.media-item .percent, +.plugins .name, +#pass-strength-result.strong, +#pass-strength-result.short, +#ed_reply_toolbar #ed_reply_strong, +.item-controls .item-order a, +.feature-filter .feature-name { + font-weight: 600; +} + +.plugins p { + margin: 0 4px; + padding: 0; +} + +.plugins .desc p { + margin: 0 0 8px; +} + +.plugins td.desc { + line-height: 1.5em; +} + +.plugins .desc ul, +.plugins .desc ol { + margin: 0 2em 0 0; +} + +.plugins .desc ul { + list-style-type: disc; +} + +.plugins .row-actions { + font-size: 13px; + padding: 0; +} + +.plugins .inactive td, +.plugins .inactive th, +.plugins .active td, +.plugins .active th { + padding: 10px 9px; +} + +.plugins .update th, +.plugins .update td { + border-bottom: 0; +} +.plugin-update-tr td { + border-top: 0; +} + +#wpbody-content .plugins .plugin-title, +#wpbody-content .plugins .theme-title { + padding-left: 12px; + white-space:nowrap; +} + +.plugins .inactive .plugin-title strong { + font-weight: 400; +} + +.plugins .second, +.plugins .row-actions { + padding: 0 0 5px; +} + +.plugins .update .second, +.plugins .update .row-actions { + padding-bottom: 0; +} + +.plugins-php .widefat tfoot th, +.plugins-php .widefat tfoot td { + border-top-style: solid; + border-top-width: 1px; +} + +.plugin-update-tr .update-message { + border: none; + font-size: 13px; + font-weight: normal; + margin: 6px 12px 12px; + padding: 6px 12px; +} + +.plugin-update-tr .update-message:before { + content: '\f463'; + display: inline-block; + font: normal 20px/1 'dashicons'; + speak: none; + margin: 0 -2px 0 8px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; +} + +.plugin-install-php h4 { + margin: 2.5em 0 8px; +} + + +/*------------------------------------------------------------------------------ + 18.0 - Users +------------------------------------------------------------------------------*/ + +#profile-page .form-table textarea { + width: 500px; + margin-bottom: 6px; +} + +#profile-page .form-table #rich_editing { + margin-left: 5px +} + +#your-profile legend { + font-size: 22px; +} + +#display_name { + width: 15em; +} + +#createuser .form-field input { + width: 25em; +} + +.scheme-list { + +} + +.color-option { + display: inline-block; + width: 24%; + padding: 5px 15px 15px; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin-bottom: 3px; +} + +.color-option:hover, +.color-option.selected { + background: #ddd; +} + +.color-palette { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} +.color-palette td { + height: 20px; + padding: 0; + border: none; +} + +.color-option { + cursor: pointer; +} + +/*------------------------------------------------------------------------------ + 19.0 - Tools +------------------------------------------------------------------------------*/ + +body.press-this { + color: #333; + margin: 0; + padding: 0; + min-width: 708px; + min-height: 400px; +} + +.press-this #titlediv #title { + font-size: 1.4em; +} + +.press-this #site-heading:before { + top: 3px; + position: relative; + display: inline-block; + font: normal 18px/1 'dashicons'; + speak: none; + color: #727272; + content: '\f120'; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.pressthis { + margin: 20px 0; +} + +.pressthis a, +.pressthis a:hover, +.pressthis a:focus, +.pressthis a:active { + display: inline-block; + position: relative; + cursor: move; + color: #333; + background: #e6e6e6; + -webkit-border-radius: 5px; + border-radius: 5px; + border: 1px solid #b4b4b4; + font-style: normal; + line-height: 16px; + font-size: 14px; + text-decoration: none; +} + +.pressthis a:active { + outline: none; +} + +.pressthis a:hover:after { + -webkit-transform: skew(20deg) rotate(9deg); + -moz-transform: skew(20deg) rotate(9deg); + transform: skew(20deg) rotate(9deg); + -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); +} + +.pressthis a span { + display: inline-block; + margin: 0px 0 0; + padding: 0px 9px 8px 12px; +} + +.pressthis a span:before { + font: normal 20px/1 'dashicons'; + content:'\f157'; + position: relative; + display: inline-block; + top: 4px; + margin-left: 4px; +} + +.pressthis a:after { + content: ''; + width: 70%; + height: 55%; + z-index: -1; + position: absolute; + left: 10px; + bottom: 9px; + background: transparent; + + -webkit-transform: skew(20deg) rotate(6deg); + -moz-transform: skew(20deg) rotate(6deg); + transform: skew(20deg) rotate(6deg); + -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); +} + +/*------------------------------------------------------------------------------ + 20.0 - Settings +------------------------------------------------------------------------------*/ + +#utc-time, #local-time { + padding-right: 25px; + font-style: italic; +} + +.defaultavatarpicker .avatar { + margin: 2px 0; + vertical-align: middle; +} + +.options-general-php .spinner { + float: none; + margin: -3px 3px; +} + +/*------------------------------------------------------------------------------ + 21.0 - Admin Footer +------------------------------------------------------------------------------*/ + +#wpfooter { + position: absolute; + bottom: 0; + right: 0; + left: 0; + padding: 10px 0; + margin-left: 20px; + border-top-width: 1px; + border-top-style: solid; +} + +#wpfooter p { + font-size: 13px; + margin: 0; + line-height: 20px; +} + +#footer-thankyou { + font-style: italic; +} + +#wpfooter a { + text-decoration: none; +} + +#wpfooter a:hover { + text-decoration: underline; +} + +/*------------------------------------------------------------------------------ + 22.0 - About Pages +------------------------------------------------------------------------------*/ + +.about-wrap { + position: relative; + margin: 25px 20px 0 40px; + max-width: 1050px; /* readability */ + + font-size: 15px; +} + +.about-wrap div.updated, +.about-wrap div.error { + display: none !important; +} + +.about-wrap hr { + border: 0; + height: 0; + margin: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +.about-wrap img { + margin: 0.5em 5px 0.5em 0; + max-width: 100%; +} + +/* Typography */ + +.about-wrap p { + line-height: 1.6em; + font-size: 14px; +} + +.about-wrap h1 { + margin: 0.2em 0 0 200px; + line-height: 1.2em; + font-size: 2.8em; + font-weight: 400; +} + +.about-wrap .about-text, +.about-wrap p.about-description, +.about-wrap li.wp-person a.web { + font-weight: normal; + line-height: 1.6em; + font-size: 19px; +} + +.about-description { + margin-top: 1.4em; +} + +.about-text { + margin: 1em 0 1em 200px; + min-height: 60px; + font-size: 24px; +} + +.about-wrap .changelog h2.about-headline-callout { + margin: 1.1em 0 0.2em; + font-size: 2.4em; + font-weight: 300; + line-height: 1.3; + text-align: center; +} + +.about-wrap h3 { + margin: 1em 0 .6em; + font-size: 1.5em; + line-height: 1.5em; +} + +.about-wrap .feature-section h4 { + margin: 1.4em 0 0.6em 0; + font-size: 1.2em; +} + +.about-wrap .feature-section p { + margin-top: 0.6em; +} + +.about-wrap code, +.about-wrap ol li p { + font-size: 14px; +} + +/* 3.8 Images */ + +.about-wrap .about-colors-img { + bottom: -25px; +} + +.about-wrap .about-themes-img { + bottom: -38px; +} + +.about-wrap .about-overview-img { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + margin: 0; +} + +.about-colors-img img, +.about-themes-img img { + margin: 0 0; + padding: 0; + line-height: 1; +} + +/* Point Releases */ + +.about-wrap .point-releases { + margin-top: 5px; +} + +.about-wrap .changelog.point-releases h3 { + padding-top: 35px; +} + +.about-wrap .changelog.point-releases h3:first-child { + padding-top: 7px; +} + +/* WordPress Version Badge */ + +.wp-badge { + background: url('../images/w-logo-white.png?ver=20131202') no-repeat; + background: none, url('../images/wordpress-logo-white.svg?ver=20131110') no-repeat; + background-position: center 24px; + background-size: 85px 85px; + font-size: 14px; + text-align: center; + font-weight: 600; + margin: 5px 0 0; + padding-top: 120px; + height: 40px; + display: inline-block; + width: 150px; + text-rendering: optimizeLegibility; +} + + +.about-wrap .wp-badge { + position: absolute; + top: 0; + left: 0; +} + +/* Tabs */ + +.about-wrap h2.nav-tab-wrapper { + padding-right: 6px; +} + +.about-wrap h2 .nav-tab { + padding: 4px 15px 6px; + margin: 0 0 -1px 3px; + font-size: 18px; + vertical-align: top; + border-width: 1px; +} + +.about-wrap h2 .nav-tab-active { + font-weight: bold; +} + +/* Changelog / Update screen */ + +.about-wrap .feature-section { + padding-bottom: 20px; +} + +.about-wrap .feature-section.col { + margin-bottom: 0; +} + +.about-wrap .feature-section.center-col > div { + margin: auto; + width: 60%; +} + +.about-wrap .about-colors .one-col > div { + width: 100%; +} + +.about-wrap .feature-section.two-col > div { + position: relative; + width: 50%; + float: right; +} + +.about-wrap .feature-section.three-col > div { + position: relative; + width: 29.95%; + margin-left: 4.999999999%; + float: right; +} + +.about-wrap .feature-section.col .last-feature { + margin-left: 0; +} + +.about-wrap .about-updates img, +.about-wrap .about-twentyfourteen img { + margin: 2em 0 0 0; + border: 1px solid #ddd; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.about-wrap .about-twentyfourteen img { + margin-top: 1em; +} + +.about-wrap .changelog .feature-section { + overflow: hidden; +} + +.about-wrap .about-colors .scheme-list { + margin-bottom: 1em; +} + +.about-wrap .about-colors .color-option { + padding-top: 10px; +} +.about-wrap .about-colors .color-option label { + display: inline-block; + margin: 0.25em 0 0.5em; +} + +.about-wrap .feature-section.two-col div p { + margin-left: 3%; +} + +.about-wrap .feature-section div p img { + float: left; + margin-right: 10px; + max-width: 20%; +} + +.about-wrap .changelog li { + list-style-type: disc; + margin-right: 3em; +} + +/* Return to Dashboard Home link */ + +.about-wrap .return-to-dashboard { + margin: 30px -5px 0 0; + font-size: 14px; + font-weight: bold; +} + +.about-wrap .return-to-dashboard a { + text-decoration: none; + padding: 0 5px; +} + +/* Credits */ + +.about-wrap h4.wp-people-group { + margin-top: 2.6em; + font-size: 16px; +} + +.about-wrap ul.wp-people-group { + overflow: hidden; + padding: 0 5px; + margin: 0 -5px 0 -15px; +} + +.about-wrap ul.compact { + margin-bottom: 0 +} + +.about-wrap li.wp-person { + float: right; + margin-left: 10px; +} + +.about-wrap li.wp-person img.gravatar { + float: right; + margin: 0 0 10px 10px; + padding: 2px; + width: 60px; + height: 60px; +} + +.about-wrap ul.compact li.wp-person img.gravatar { + width: 30px; + height: 30px; +} + +.about-wrap li.wp-person { + height: 70px; + width: 280px; + padding-bottom: 15px; +} + +.about-wrap ul.compact li.wp-person { + height: auto; + width: 180px; + padding-bottom: 0; + margin-bottom: 0; +} + +.about-wrap #wp-people-group-validators + p.wp-credits-list { + margin-top: 0; +} + +.about-wrap li.wp-person a.web { + display: block; + margin: 6px 0 2px; + font-size: 16px; + text-decoration: none; +} + +.about-wrap p.wp-credits-list a { + white-space: nowrap; +} + +/* Freedoms */ + +.freedoms-php .about-wrap ol { + margin: 40px 60px; +} + +.freedoms-php .about-wrap ol li { + list-style-type: decimal; + font-weight: bold; +} + +.freedoms-php .about-wrap ol p { + font-weight: normal; + margin: 0.6em 0; +} + +/*------------------------------------------------------------------------------ + 23.0 - Full Overlay w/ Sidebar +------------------------------------------------------------------------------*/ + +body.full-overlay-active { + overflow: hidden; +} + +.wp-full-overlay { + background: transparent; + z-index: 500000; + position: fixed; + overflow: visible; + top: 0; + bottom: 0; + right: 0; + left: 0; + height: 100%; + min-width: 0; +} + +.wp-full-overlay-sidebar { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + position: fixed; + width: 300px; + height: 100%; + top: 0; + bottom: 0; + right: 0; + padding: 0; + margin: 0; + z-index: 10; + overflow: auto; + background: transparent; + border-left: none; +} + +.wp-full-overlay.collapsed .wp-full-overlay-sidebar { + overflow: visible; +} + +.wp-full-overlay.collapsed, +.wp-full-overlay.expanded .wp-full-overlay-sidebar { + margin-right: 0 !important; +} + +.wp-full-overlay.expanded { + margin-right: 300px; +} + +.wp-full-overlay.collapsed .wp-full-overlay-sidebar { + margin-right: -300px; +} + +.wp-full-overlay-sidebar:after { + content: ''; + display: block; + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 3px; + z-index: 1000; +} + +.wp-full-overlay-main { + position: absolute; + right: 0; + left: 0; + top: 0; + bottom: 0; + height: 100%; +} + +.wp-full-overlay-sidebar .wp-full-overlay-header { + position: absolute; + right: 0; + left: 0; + height: 45px; + padding: 0 15px; + line-height: 45px; + z-index: 10; + margin: 0; + border-top: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.wp-full-overlay-sidebar .wp-full-overlay-header a.back { + margin-top: 9px; +} + +.wp-full-overlay-sidebar .wp-full-overlay-footer { + bottom: 0; + border-bottom: none; + border-top: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content { + position: absolute; + top: 45px; + bottom: 45px; + right: 0; + left: 0; + overflow: auto; +} + +/* Close Link */ +.wp-full-overlay .close-full-overlay { + text-decoration: none; +} + +/* Collapse Button */ +.wp-full-overlay a.collapse-sidebar { + position: absolute; + bottom: 12px; + right: 0; + z-index: 50; + display: block; + width: 19px; + height: 19px; + margin-right: 15px; + padding: 0; + border-radius: 50%; + text-decoration: none; +} + +.wp-full-overlay.collapsed .collapse-sidebar { + position: absolute; + right: 100%; +} + +.wp-full-overlay .collapse-sidebar-arrow { + position: static; + margin-top: 0; + margin-right: 0; + display: block; + width: auto; + height: auto; + background: none; +} + +.wp-full-overlay .collapse-sidebar-arrow:before { + border-radius: 50%; + float: right; + content: "\f148"; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.wp-full-overlay.collapsed .collapse-sidebar-arrow:before, +.rtl .wp-full-overlay .collapse-sidebar-arrow:before { + -ms-transform: rotate(180deg); + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before { + -ms-transform: none; + -webkit-transform: none; + transform: none; +} + +.wp-full-overlay.collapsed .collapse-sidebar-arrow { + background-position: -1px -109px; +} + +.wp-full-overlay .collapse-sidebar-label { + position: absolute; + right: 100%; + line-height: 20px; + margin-right: 10px; +} + +.wp-full-overlay.collapsed .collapse-sidebar-label { + display: none; +} + +/* Animations */ +.wp-full-overlay, +.wp-full-overlay-sidebar, +.wp-full-overlay .collapse-sidebar, +.wp-full-overlay-main { + -webkit-transition-property: right, left, top, bottom, width, margin; + -moz-transition-property: right, left, top, bottom, width, margin; + -ms-transition-property: right, left, top, bottom, width, margin; + -o-transition-property: right, left, top, bottom, width, margin; + transition-property: right, left, top, bottom, width, margin; + -webkit-transition-duration: 0.2s; + -moz-transition-duration: 0.2s; + -ms-transition-duration: 0.2s; + -o-transition-duration: 0.2s; + transition-duration: 0.2s; +} + +/*------------------------------------------------------------------------------ + 24.0 - Customize Loader +------------------------------------------------------------------------------*/ + +.no-customize-support .hide-if-no-customize, +.customize-support .hide-if-customize, +.no-customize-support.wp-core-ui .hide-if-no-customize, +.no-customize-support .wp-core-ui .hide-if-no-customize, +.customize-support.wp-core-ui .hide-if-customize, +.customize-support .wp-core-ui .hide-if-customize { + display: none; +} + +#customize-container { + display: none; + background: #fff; + z-index: 500000; + position: fixed; + overflow: visible; + top: 0; + bottom: 0; + right: 0; + left: 0; + height: 100%; +} + +.customize-active #customize-container { + display: block; +} + +.customize-loading #customize-container iframe { + opacity: 0; +} + +.customize-loading #customize-container { + background: #fff url('../images/spinner.gif') no-repeat fixed center center; + background-size: 20px 20px; +} + +#customize-container iframe, +#theme-installer iframe { + height: 100%; + width: 100%; + z-index: 20; + + -webkit-transition: opacity 0.3s; + -moz-transition: opacity 0.3s; + -ms-transition: opacity 0.3s; + -o-transition: opacity 0.3s; + transition: opacity 0.3s; +} + +#customize-container .collapse-sidebar { + bottom: 16px; +} + +#customize-controls { + margin-top: 0; +} + +#theme-installer { + display: none; +} + +#theme-installer.single-theme { + display: block; +} + +.install-theme-info { + display: none; + padding: 10px 20px 20px; +} + +.single-theme .install-theme-info { + padding-top: 15px; +} + +#theme-installer .install-theme-info { + display: block; +} + +.install-theme-info .theme-install { + float: left; + margin-top: 18px; +} + +.install-theme-info .theme-name { + font-size: 16px; + line-height: 24px; + margin-bottom: 0; + margin-top: 0; +} + +.install-theme-info .theme-screenshot { + margin-top: 15px; + width: 258px; + border: 1px solid #ccc; +} + +.install-theme-info .theme-details { + overflow: hidden; +} + +.theme-details .theme-version { + margin: 15px 0; + float: right; +} + +.theme-details .star-rating { + margin: 7px 0; + float: left; +} + +.theme-details .theme-description { + float: right; + color: #777; + line-height: 20px; +} + +#theme-installer .wp-full-overlay-header { + margin-top: 9px; +} + +#theme-installer .wp-full-overlay-header .theme-install { + float: left; + /* For when .theme-install is a span rather than a.button-primary (already installed theme) */ + line-height: 26px; +} + +#theme-installer .wp-full-overlay-sidebar { + background: #EEE; + border-left: 1px solid #DDD; +} + +#theme-installer .wp-full-overlay-main { + background: #fff url('../images/spinner.gif') no-repeat fixed center center; + background-size: 20px 20px; +} + + +/*------------------------------------------------------------------------------ + 25.0 - Tabbed Admin Screen Interface (Experimental) +------------------------------------------------------------------------------*/ + +.nav-tab { + border-style: solid; + border-width: 1px 1px 0; + font-size: 12px; + line-height: 16px; + display: inline-block; + padding: 4px 14px 6px; + text-decoration: none; + margin: -4px 0 -1px 4px; +} + +.nav-tab-active { + border-width: 1px; +} + +.nav-tab-active, +.nav-tab-active:hover { + border-bottom-width: 1px; + border-bottom-style: solid; +} + +h2.nav-tab-wrapper, +h3.nav-tab-wrapper { + border-bottom-width: 1px; + border-bottom-style: solid; + padding-bottom: 0; + padding-right: 10px; +} + +h2 .nav-tab { + padding: 6px 10px; + font-weight: bold; + font-size: 15px; + line-height: 24px; +} + + +/*------------------------------------------------------------------------------ + 26.0 - Misc +------------------------------------------------------------------------------*/ + +#excerpt, +.attachmentlinks { + margin: 0; + height: 4em; + width: 98%; +} + +#template div { + margin-left: 190px; +} + +p.pagenav { + margin: 0; + display: inline; +} + +.pagenav span { + font-weight: 600; + margin: 0 6px; +} + +.row-title { + font-size: 14px !important; + font-weight: 600; +} + +.column-comment .comment-author { + margin-bottom: 0.6em; +} + +.column-author img, +.column-username img, +.column-comment .comment-author img { + float: right; + margin-left: 10px; + margin-top: 1px; +} + +.row-actions { + font-size: 13px; + visibility: hidden; + padding: 2px 0 0; +} + +tr:hover .row-actions, +.mobile .row-actions, +.row-actions.visible, +div.comment-item:hover .row-actions { + visibility: visible; +} + +/* deprecated */ +.row-actions-visible { + padding: 2px 0 0; +} + +.form-table .pre { + padding: 8px; + margin: 0; +} + +table.form-table td .updated { + font-size: 13px; +} + +.tagchecklist { + margin-right: 14px; + font-size: 12px; + overflow: auto; +} +.tagchecklist br { + display: none; +} +.tagchecklist strong { + margin-right: -8px; + position: absolute; +} +.tagchecklist span { + margin-left: 25px; + display: block; + float: right; + font-size: 13px; + line-height: 1.8em; + white-space: nowrap; + cursor: default; +} + +.tagchecklist span a { + margin: 1px -17px 0 0; + cursor: pointer; + width: 20px; + height: 20px; + display: block; + float: right; + text-indent: 0; + overflow: hidden; + position: absolute; +} + +#poststuff h2 { + margin-top: 20px; + font-size: 1.5em; + margin-bottom: 15px; + padding: 0 0 3px; + clear: right; +} + +#poststuff h3, +.metabox-holder h3 { + font-size: 14px; + padding: 8px 12px; + margin: 0; + line-height: 1.4; +} + +#poststuff .inside { + margin: 6px 0 0 0; +} + +#poststuff .inside #parent_id, +#poststuff .inside #page_template { + max-width: 100%; +} + +.inline-edit-row #post_parent, +.inline-edit-row select[name="page_template"] { + max-width: 80%; +} + +.ie8 #poststuff .inside #parent_id, +.ie8 #poststuff .inside #page_template, +.ie8 .inline-edit-row #post_parent, +.ie8 .inline-edit-row select[name="page_template"] { + width: 250px; +} + +#post-visibility-select { + line-height: 1.5em; + margin-top: 3px; +} + +#poststuff #submitdiv .inside { + margin: 0; + padding: 0; +} + +.edit-form-section { + margin-bottom: 20px; +} + +#templateside ul li a { + text-decoration: none; +} + +.tool-box .title { + margin: 8px 0; + font-size: 18px; + font-weight: normal; + line-height: 24px; +} + +#sidemenu { + margin: -30px 315px 0 15px; + list-style: none; + position: relative; + float: left; + padding-right: 10px; + font-size: 12px; +} + +#sidemenu a { + padding: 0 7px; + display: block; + float: right; + line-height: 28px; + border-top-width: 1px; + border-top-style: solid; + border-bottom-width: 1px; + border-bottom-style: solid; + -webkit-transition: none; + -moz-transition: none; + transition: none; +} + +#sidemenu li { + display: inline; + line-height: 200%; + list-style: none; + text-align: center; + white-space: nowrap; + margin: 0; + padding: 0; +} + +#sidemenu a.current { + font-weight: normal; + padding-right: 6px; + padding-left: 6px; + -webkit-border-top-right-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + border-width: 1px; + border-style: solid; +} + +#sidemenu li a .count-0 { + display: none; +} + +.plugin-install #description, +.plugin-install-network #description { + width: 60%; +} + +table .vers, +table .column-visible, +table .column-rating { + text-align: right; +} + +.error-message { + color: red; + font-weight: 600; +} + +/* Scrollbar fix for bulk upgrade iframe */ +body.iframe { + height: 98%; +} + +/* Upgrader styles, Specific to Language Packs */ +.lp-show-latest p { + display: none; +} +.lp-show-latest p:last-child, +.lp-show-latest .lp-error p { + display: block; +} + +/* - Only used once or twice in all of WP - deprecate for global style +------------------------------------------------------------------------------*/ +td.media-icon { + text-align: center; + width: 80px; + padding-top: 8px; + padding-bottom: 8px; +} + +td.media-icon img { + max-width: 80px; + max-height: 60px; +} + +#howto { + font-size: 11px; + margin: 0 5px; + display: block; +} + +.importers td { + padding-left: 14px; +} + +.importers { + font-size: 16px; + width: auto; +} + +#post-body #post-body-content #namediv h3 { + margin-top: 0; +} + +#namediv h3 label { + vertical-align: baseline; +} + +#namediv table { + width: 100%; +} + +#namediv td.first { + width: 10px; + white-space: nowrap; +} + +#namediv input { + width: 98%; +} + +#namediv p { + margin: 10px 0; +} + +#submitdiv h3 { + margin-bottom: 0 !important; +} + +/* - Used - but could/should be deprecated with a CSS reset +------------------------------------------------------------------------------*/ +.zerosize { + height: 0; + width: 0; + margin: 0; + border: 0; + padding: 0; + overflow: hidden; + position: absolute; +} + +br.clear { + height: 2px; + line-height: 2px; +} + +.checkbox { + border: none; + margin: 0; + padding: 0; +} + +fieldset { + border: 0; + padding: 0; + margin: 0; +} + +.post-categories { + display: inline; + margin: 0; + padding: 0; +} + +.post-categories li { + display: inline; +} + +/*------------------------------------------------------------------------------ + 27.0 - Localization +------------------------------------------------------------------------------*/ + +/* RTL except Hebrew (see below): Tahoma as the first font; */ +body.rtl, +body.rtl .press-this a.wp-switch-editor { + font-family: Tahoma, Arial, sans-serif; +} + + +/* he_IL: Remove Tahoma from the font stack. Arial is best for Hebrew. */ +body.locale-he-il, +body.locale-he-il .press-this a.wp-switch-editor { + font-family: Arial, sans-serif; +} + +/* he_IL: Have be bold rather than italic. */ +.locale-he-il em { + font-style: normal; + font-weight: bold; +} + + +/*----------------------------------------------------------------------------- + MERGED +-------------------------------------------------------------------------------*/ + +/* dashboard */ +.edit-box { + display: none; +} + +h3:hover .edit-box { + display: inline; +} + +#dashboard-widgets form .input-text-wrap input { + width: 100%; +} + +#dashboard-widgets form .textarea-wrap textarea { + width: 100%; +} + +#dashboard-widgets .postbox form .submit { + float: none; + margin: .5em 0 0; + padding: 0; + border: none; +} + +#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish { + min-width: 0; +} + +#dashboard-widgets a { + text-decoration: none; +} + +#dashboard-widgets h3 a { + text-decoration: underline; +} + +#dashboard-widgets h3 .postbox-title-action { + position: absolute; + left: 10px; + padding: 0; + top: 5px; +} + +.js #dashboard-widgets h3 .postbox-title-action { + left: 33px; +} + +#dashboard-widgets h4 { + font-weight: normal; + font-size: 14px; + margin: 0 0 .2em; + padding: 0; +} + +#dashboard_plugins h5 { + font-size: 14px; +} + +/* Recent Comments */ + +#latest-comments #the-comment-list { + position: relative; +} + +#activity-widget #latest-comments #the-comment-list .comment-item { + padding: 1em 12px; +} + +#latest-comments #the-comment-list .pingback { + padding-right: 12px !important; +} + +#latest-comments #the-comment-list .comment-item:first-child { + border-top: none; +} + +#latest-comments #the-comment-list .comment-item h4 { + line-height: 1.5em; + margin-top: 0; + color: #666; +} + +#latest-comments #the-comment-list .comment-item h4 cite { + font-style: normal; + font-weight: normal; +} + +#latest-comments #the-comment-list .comment-item blockquote, +#latest-comments #the-comment-list .comment-item blockquote p { + margin: 0; + padding: 0; + display: inline; +} + +#latest-comments #the-comment-list .comment-item p.row-actions { + margin: 3px 0 0; + padding: 0; + font-size: 13px; +} + +/* QuickDraft */ + +#title-wrap label { + cursor: text; +} + +#title-wrap #title { + padding: 2px 6px; + font-size: 1.3em; + line-height: 100%; + outline: none; +} + +#title-wrap #title-prompt-text { + font-size: 1.1em; + padding: 5px 8px; +} + +/* Feeds */ +.rss-widget ul { + margin: 0; + padding: 0; + list-style: none; +} + +a.rsswidget { + font-size: 14px; + font-weight: 600; + line-height: 1.7em; +} + +.rss-widget ul li { + line-height: 1.5em; + margin-bottom: 12px; +} + +.rss-widget span.rss-date { + color: #999; + font-size: 13px; + margin-right: 3px; +} + +.rss-widget cite { + display: block; + text-align: left; + margin: 0 0 1em; + padding: 0; +} + +.rss-widget cite:before { + content: '\2014'; +} + +.dashboard-comment-wrap { + overflow: hidden; + word-wrap: break-word; +} + +/* Browser Nag */ +#dashboard_browser_nag a.update-browser-link { + font-size: 1.2em; + font-weight: 600; +} + +#dashboard_browser_nag a { + text-decoration: underline; +} + +#dashboard_browser_nag p.browser-update-nag.has-browser-icon { + padding-left: 125px; +} + +#dashboard_browser_nag .browser-icon { + margin-top: -35px; +} + +#dashboard_browser_nag.postbox.browser-insecure { + background-color: #ac1b1b; + border-color: #ac1b1b; +} + +#dashboard_browser_nag.postbox { + background-color: #e29808; + background-image: none; + border-color: #edc048; + color: #fff; + -webkit-box-shadow: none; + box-shadow: none; +} + +#dashboard_browser_nag.postbox.browser-insecure h3 { + border-bottom-color: #cd5a5a; + color: #fff; +} + +#dashboard_browser_nag.postbox h3 { + border-bottom-color: #f6e2ac; + background: transparent none; + color: #fff; + -webkit-box-shadow: none; + box-shadow: none; +} + +#dashboard_browser_nag a { + color: #fff; +} + +/* Make the browser nags easier to read with Open Sans */ + +#dashboard_browser_nag h3.hndle { + border: none; + font-weight: 600; + font-size: 20px; + padding-top: 10px; +} + +.postbox#dashboard_browser_nag p a.dismiss { + font-size: 14px; +} + +.postbox#dashboard_browser_nag p, +.postbox#dashboard_browser_nag a, +.postbox#dashboard_browser_nag p.browser-update-nag { + font-size: 16px; +} + + +/* login */ + +#loginform p.submit, +.login-action-lostpassword p.submit { + border: none; + margin: -10px 0 20px; /* May want to revisit this */ +} + +.login * { + margin: 0; + padding: 0; +} + +.login form { + margin-top: 20px; + margin-right: 0; + padding: 26px 24px 46px; + font-weight: normal; + overflow: hidden; +} + +.login form .forgetmenot { + font-weight: normal; + float: right; + margin-bottom: 0; +} + +.login .button-primary { + float: left; +} + +#login form p { + margin-bottom: 0; +} + +#login form p.submit { + margin: 0; + padding: 0; +} + +.login label { + color: #777; + font-size: 14px; +} + +.login form .forgetmenot label { + font-size: 12px; + line-height: 19px; +} + +.login h1 { + text-align: center; +} + +.login h1 a { + background-image: url('../images/w-logo-blue.png?ver=20131202'); + background-image: none, url('../images/wordpress-logo.svg?ver=20131107'); + background-size: 80px 80px; + background-position: center top; + background-repeat: no-repeat; + color: #999; + height: 80px; + font-size: 20px; + font-weight: normal; + line-height: 1.3em; + margin: 0 auto 25px; + padding: 0; + text-decoration: none; + width: 80px; + text-indent: -9999px; + outline: none; + overflow: hidden; + display: block; +} + +#login { + width: 320px; + padding: 8% 0 0; + margin: auto; +} + +#login_error, +.login .message { + margin-right: 0; + padding: 12px; +} + +.login #nav, +.login #backtoblog { + font-size: 13px; + padding: 0 24px 0; +} + +.login #nav { + margin: 24px 0 0 0; +} + +#backtoblog { + margin: 16px 0 0 0; +} + +.login form .input, +.login input[type="text"] { + font-size: 24px; + line-height: 1; + width: 100%; + padding: 3px; + margin: 2px 0 16px 6px; +} + +.login #pass-strength-result { + width: 250px; + font-weight: 600; + border-style: solid; + border-width: 1px; + margin: 12px 0 6px; + padding: 6px 5px; + text-align: center; +} + +.mobile #login { + padding: 20px 0; +} + +.mobile #login form, +.mobile #login .message, +.mobile #login_error { + margin-right: 0; +} + +.mobile #login #nav, +.mobile #login #backtoblog { + margin-right: 8px; +} + +.mobile #login h1 a { + width: auto; +} + +body.interim-login { + height: auto; +} + +.interim-login #login { + padding: 0; + margin: 5px auto 20px; +} + +.interim-login.login h1 a { + width: auto; +} + +.interim-login #login_error, +.interim-login.login .message { + margin: 0 0 16px; +} + +.interim-login.login form { + margin: 0; +} + +/* ms */ +/* Background Color for Site Status */ +.wp-list-table .site-deleted { + background: #ff8573; +} +.wp-list-table .site-spammed { + background: #faafaa; +} +.wp-list-table .site-archived { + background: #ffebe8; +} +.wp-list-table .site-mature { + background: #fecac2; +} + +/* nav-menu */ + +.no-js #message { + display: block; +} + +.accordion-section ul.category-tabs, +.accordion-section ul.add-menu-item-tabs, +.accordion-section ul.wp-tab-bar { + margin: 0; +} + +.accordion-section .categorychecklist { + margin: 13px 0; +} + +#nav-menu-meta .accordion-section-content { + padding: 18px 13px; +} + +#nav-menu-meta .button-controls { + margin-bottom: 0; +} + +#nav-menus-frame { + margin-right: 300px; + margin-top: 23px; +} + +#nav-menus-frame .accordion-section-content .inside { + font-size: 14px; +} + +#wpbody-content #menu-settings-column { + display:inline; + width:281px; + margin-right: -300px; + clear: both; + float: right; + padding-top: 0; +} + +#menu-settings-column .inside { + clear: both; + margin: 10px 0 0; +} + +.metabox-holder-disabled .postbox, +.metabox-holder-disabled .accordion-section-content, +.metabox-holder-disabled .accordion-section-title { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.metabox-holder-disabled .button-controls .select-all { + display: none; +} + +#wpbody { + position: relative; +} + +.blank-slate .menu-name { + height: 2em; +} + +.blank-slate .menu-settings { + border: none; + margin-top: 0; + padding-top: 0; + overflow: hidden; +} + +.is-submenu { + font-style: italic; + font-weight: normal; + margin-right: 4px; +} + +.manage-menus { + margin-top: 23px; + padding: 10px; + overflow: hidden; +} + +.manage-menus select { + float: right; + margin-left: 6px; +} + +.manage-menus .selected-menu { + float: right; + margin: 5px 0 0 6px; +} + +.manage-menus .submit-btn { + float: right; + margin-top: 1px; +} + +.menu-edit p { + margin: .3em 0 .6em; +} + +.menu-edit #post-body-content h3 { + margin: 1em 0 10px; +} + +.menu-settings { + border-top-width: 1px; + border-top-style: solid; + margin-top: 2em; +} + +.menu-settings dl { + margin: 0 0 10px; + overflow: hidden; + padding-right: 18%; +} + +.menu-settings dd { + float: right; + margin: 0; + width: 100%; +} + +.menu-settings dt { + float: right; + clear: both; + width: 21.951%; + padding: 3px 0 0; + margin-right: -21.951%; +} + +.menu-settings label { + vertical-align: baseline; +} + +.menu-edit .checkbox-input { + margin-top: 4px; +} + +.theme-location-set { + font-size: 11px; +} + +/* Menu Container */ +#menu-management-liquid { + float: right; + min-width: 100%; + margin-top: 3px; +} + +#menu-management { + position: relative; + margin-left: 20px; + margin-top: -3px; + width: 100%; +} + +#menu-management .menu-edit { + margin-bottom: 20px; +} + +.nav-menus-php #post-body { + padding: 0 10px 10px; + border-width: 1px 0; + border-style: solid; +} + +#nav-menu-header, +#nav-menu-footer { + padding: 0 10px; +} + +#nav-menu-header { + border-bottom: 1px solid; + margin-bottom: 0; +} + +#nav-menu-header .menu-name-label { + margin-top: 4px; +} + +.nav-menus-php #post-body div.updated, +.nav-menus-php #post-body div.error { + margin: 0; +} + +.nav-menus-php #post-body-content { + position: relative; + float: none; +} + +#menu-management .menu-add-new abbr { + font-weight:600; +} + +#select-nav-menu-container { + text-align: left; + padding: 0 10px 3px 10px; + margin-bottom: 5px; +} + +#select-nav-menu { + width: 100px; + display: inline; +} + +#menu-name-label { + margin-top: -2px; +} + +.widefat td.menu-location-menus { + padding-bottom: 5px; +} + +.menu-location-menus select { + float: right; +} + +#locations-nav-menu-wrapper { + padding: 5px 0; +} + +.locations-nav-menu-select select { + float: right; + width: 160px; + margin-left: 5px; +} + +.locations-row-links { + float: right; + margin: 6px 6px 0 0; +} + +.locations-edit-menu-link, +.locations-add-menu-link { + margin: 0 3px; +} + +.locations-edit-menu-link { + padding-left: 3px; + border-left: 1px solid #ccc; +} + +#wpbody .open-label { + display: block; + float:right; +} + +#wpbody .open-label span { + padding-left: 10px; +} + +.js .input-with-default-title { + font-style: italic; +} + +#menu-management .inside { + padding: 0 10px; +} + +/* Add Menu Item Boxes */ +.postbox .howto input, +.accordion-container .howto input { + width: 180px; + float: left; +} + +.accordion-container .outer-border { + margin: 0; +} + +.customlinkdiv .howto input { + width: 180px; +} + +.customlinkdiv p { + margin-top: 0 +} + +#nav-menu-theme-locations .howto select { + width: 100%; +} + +#nav-menu-theme-locations .button-controls { + text-align: left; +} + +.add-menu-item-view-all { + height: 400px; +} + +/* Button Primary Actions */ +#menu-container .submit { + margin: 0 0 10px; + padding: 0; +} + +.nav-menus-php .add-new-menu-action { + float: right; + margin: 6px 6px 0 0; + line-height: 15px; +} + +.nav-menus-php .meta-sep, +.nav-menus-php .submitdelete, +.nav-menus-php .submitcancel { + display: block; + float: right; + margin: 6px 0; + line-height: 15px; +} + +.meta-sep { + padding: 0 2px; +} + +#cancel-save { + text-decoration: underline; + font-size: 12px; + margin-right: 20px; + margin-top: 5px; +} + +.button.right, .button-secondary.right, .button-primary.right { + float: left; +} + +/* Button Secondary Actions */ +.list-controls { + float: right; + margin-top: 5px; +} + +.add-to-menu { + float: left; +} + +.postbox .spinner { + display: none; + vertical-align: middle; +} + +.button-controls { + clear:both; + margin: 10px 0; +} + +.show-all, +.hide-all { + cursor: pointer; +} + +.hide-all { + display: none; +} + +/* Create Menu */ +#menu-name { + width: 270px; +} + +#manage-menu .inside { + padding: 0px 0px; +} + +/* Custom Links */ +#available-links dt { + display: block; +} + +#add-custom-link .howto { + font-size: 12px; +} + +#add-custom-link label span { + display: block; + float: right; + margin-top: 5px; + padding-left: 5px; +} + +.menu-item-textbox { + width: 180px; +} + +.nav-menus-php .howto span { + margin-top: 6px; + display: block; + float: right; +} + +/* Menu item types */ +.quick-search { + width: 190px; +} + +.nav-menus-php .list-wrap { + display: none; + clear: both; + margin-bottom: 10px; +} + +.nav-menus-php .list-container { + max-height: 200px; + overflow-y: auto; + padding: 10px 10px 5px; +} + +.nav-menus-php .postbox p.submit { + margin-bottom: 0; +} + +/* Listings */ +.nav-menus-php .list li { + display: none; + margin: 0; + margin-bottom: 5px; +} + +.nav-menus-php .list li .menu-item-title { + cursor: pointer; + display: block; +} + +.nav-menus-php .list li .menu-item-title input { + margin-left: 3px; + margin-top: -3px; +} + +.menu-item-title input[type=checkbox] { + display: inline-block; + margin-top: -4px; +} + +/* Nav Menu */ +#menu-container .inside { + padding-bottom: 10px; +} + +.menu { + padding-top:1em; +} + +#menu-to-edit { + margin: 0; + padding: 0.1em 0; +} + +.menu ul { + width: 100%; +} + +.menu li { + margin-bottom: 0; + position:relative; +} + +.menu-item-bar { + clear:both; + line-height:1.5em; + position:relative; + margin: 9px 0 0; +} + +.menu-item-bar .menu-item-handle { + border: 1px solid #dfdfdf; + position: relative; + padding: 10px 15px; + height: auto; + width: 382px; + line-height: 30px; + overflow: hidden; + word-wrap: break-word; +} + +#menu-to-edit .menu-item-invalid .menu-item-handle { + background: #f6c9cc; + border-color: #f1acb1; +} + +.no-js .menu-item-edit-active .item-edit { + display: none; +} + +.js .menu-item-handle { + cursor: move; +} + +.menu li.deleting .menu-item-handle { + background-image: none; +} + +.menu-item-handle .item-title { + font-size: 13px; + font-weight: 600; + line-height: 20px; + display: block; + margin-left: 13em; +} + +/* Sortables */ +li.menu-item.ui-sortable-helper dl { + margin-top: 0; +} + +li.menu-item.ui-sortable-helper .menu-item-transport dl { + margin-top: 13px; +} + +.menu .sortable-placeholder { + height: 35px; + width: 410px; + margin-top: 13px; +} + +/* WARNING: The factor of 30px is hardcoded into the nav-menus javascript. */ +.menu-item-depth-0 { margin-right: 0px; } +.menu-item-depth-1 { margin-right: 30px; } +.menu-item-depth-2 { margin-right: 60px; } +.menu-item-depth-3 { margin-right: 90px; } +.menu-item-depth-4 { margin-right: 120px; } +.menu-item-depth-5 { margin-right: 150px; } +.menu-item-depth-6 { margin-right: 180px; } +.menu-item-depth-7 { margin-right: 210px; } +.menu-item-depth-8 { margin-right: 240px; } +.menu-item-depth-9 { margin-right: 270px; } +.menu-item-depth-10 { margin-right: 300px; } +.menu-item-depth-11 { margin-right: 330px; } + +.menu-item-depth-0 .menu-item-transport { margin-right: 0px; } +.menu-item-depth-1 .menu-item-transport { margin-right: -30px; } +.menu-item-depth-2 .menu-item-transport { margin-right: -60px; } +.menu-item-depth-3 .menu-item-transport { margin-right: -90px; } +.menu-item-depth-4 .menu-item-transport { margin-right: -120px; } +.menu-item-depth-5 .menu-item-transport { margin-right: -150px; } +.menu-item-depth-6 .menu-item-transport { margin-right: -180px; } +.menu-item-depth-7 .menu-item-transport { margin-right: -210px; } +.menu-item-depth-8 .menu-item-transport { margin-right: -240px; } +.menu-item-depth-9 .menu-item-transport { margin-right: -270px; } +.menu-item-depth-10 .menu-item-transport { margin-right: -300px; } +.menu-item-depth-11 .menu-item-transport { margin-right: -330px; } + +body.menu-max-depth-0 { min-width: 950px !important; } +body.menu-max-depth-1 { min-width: 980px !important; } +body.menu-max-depth-2 { min-width: 1010px !important; } +body.menu-max-depth-3 { min-width: 1040px !important; } +body.menu-max-depth-4 { min-width: 1070px !important; } +body.menu-max-depth-5 { min-width: 1100px !important; } +body.menu-max-depth-6 { min-width: 1130px !important; } +body.menu-max-depth-7 { min-width: 1160px !important; } +body.menu-max-depth-8 { min-width: 1190px !important; } +body.menu-max-depth-9 { min-width: 1220px !important; } +body.menu-max-depth-10 { min-width: 1250px !important; } +body.menu-max-depth-11 { min-width: 1280px !important; } + +/* Menu item controls */ +.item-type { + font-size: 12px; + padding: 12px 10px; + line-height: 18px; + display: block; +} + +.item-controls { + font-size: 12px; + position: absolute; + left: 20px; + top: -1px; +} + +.item-controls a { + text-decoration: none; +} + +.item-controls a:hover { + cursor: pointer; +} + +.item-controls .item-order { + padding-left: 10px; +} + +.nav-menus-php .item-edit { + position: absolute; + left: -20px; + top: 0; + display: block; + width: 30px; + height: 40px; + margin-left: 0 !important; + text-indent: 100%; + outline: none; + overflow: hidden; + white-space: nowrap; +} + +/* Menu editing */ +.menu-instructions-inactive { + display: none; +} + +.menu-item-settings { + display: block; + width: 402px; + padding: 10px 10px 10px 0; + position: relative; + z-index: 10; /* Keep .item-title's shadow from appearing on top of .menu-item-settings */ +} + +.menu-item-settings .field-move a { + display: none; + margin: 0 2px; +} + +.menu-item-edit-active .menu-item-settings { + display: block; +} + +.menu-item-edit-inactive .menu-item-settings { + display: none; +} + +.add-menu-item-pagelinks { + margin: .5em auto; + text-align: center; +} + +.link-to-original { + display: block; + margin: 0 0 10px; + padding: 3px 5px 5px; + font-size: 12px; + font-style: italic; +} + +.link-to-original a { + padding-right: 4px; + font-style: normal; +} + +.hidden-field { + display: none; +} + +.menu-item-settings .description-thin, +.menu-item-settings .description-wide { + margin-left: 10px; + float: right; +} + +.description-thin { + width: 190px; + height: 40px; +} + +.description-wide { + width: 390px; +} + +.menu-item-actions { + padding-top: 15px; +} + +#cancel-save { + cursor: pointer; +} + +/* Major/minor publishing actions (classes) */ +.nav-menus-php .major-publishing-actions { + clear: both; + padding: 3px 0 6px; +} + +.nav-menus-php .major-publishing-actions .publishing-action { + text-align: left; + float: left; + line-height: 23px; + margin: 4px 0 1px; +} + +.nav-menus-php .blank-slate .menu-settings { + display: none; +} + +.nav-menus-php .delete-action { + float: right; + margin-top: 2px; +} + +.nav-menus-php .submitbox .submitcancel { + border-bottom: 1px solid; + padding: 1px 2px; + text-decoration: none; +} + +.nav-menus-php .major-publishing-actions .form-invalid { + padding-right: 4px; + margin-right: -4px; + border: 0 none; +} + +/* Clearfix */ +#menu-item-name-wrap:after, +#menu-item-url-wrap:after, +#menu-name-label:after, +#menu-settings-column .inside:after, +#nav-menus-frame:after, +.nav-menus-php #post-body-content:after, +.nav-menus-php .button-controls:after, +.nav-menus-php .major-publishing-actions:after, +.nav-menus-php .menu-item-settings:after { + clear: both; + content: "."; + display: block; + height: 0; + visibility: hidden; +} + +#nav-menus-frame, +.button-controls, +#menu-item-url-wrap, +#menu-item-name-wrap { + display: block; +} + +/* Star Ratings - Back-compat for pre-3.8 */ +div.star-holder { + position: relative; + height: 17px; + width: 100px; + background: url('../images/stars.png?ver=20121108') repeat-x bottom right; +} + +div.star-holder .star-rating { + background: url('../images/stars.png?ver=20121108') repeat-x top right; + height: 17px; + float: right; +} + +/* Star Ratings */ +.star-rating { + white-space: nowrap; +} +.star-rating .star { + display: inline-block; + width: 20px; + height: 20px; + -webkit-font-smoothing: antialiased; + font-size: 20px; + line-height: 1; + font-family: 'dashicons'; + text-decoration: inherit; + font-weight: normal; + font-style: normal; + vertical-align: top; + -moz-transition: color .1s ease-in 0; + -webkit-transition: color .1s ease-in 0; + text-align: center; + color: #0074a2; +} + +.star-rating .star-full:before { + content:'\f155'; +} + +.star-rating .star-half:before { + content:'\f459'; +} + +.rtl .star-rating .star-half { + -webkit-transform: rotateY(180deg); + -ms-transform: rotateY(180deg); + transform: rotateY(180deg); +} + +.star-rating .star-empty:before { + content:'\f154'; +} + +div.action-links { + font-weight: normal; + margin: 6px 0 0; +} + +/* Header on thickbox */ +#plugin-information-header { + margin: 0; + padding: 0 5px; + font-weight: 600; + position: relative; + border-bottom-width: 1px; + border-bottom-style: solid; + height: 2.5em; +} +#plugin-information ul#sidemenu { + font-weight: normal; + margin: 0 5px; + position: absolute; + right: 0; + bottom: -1px; +} + +/* Install sidemenu */ +#plugin-information { + height: auto; +} + +#plugin-information p.action-button { + width: 100%; + padding-bottom: 0; + margin-bottom: 0; + margin-top: 10px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +#plugin-information .action-button a { + text-align: center; + font-weight: 600; + text-decoration: none; + display: block; + line-height: 2em; +} + +#plugin-information h2 { + clear: none !important; + margin-left: 200px; +} + +#plugin-information .fyi { + margin: 0 10px 50px; + width: 210px; +} + +#plugin-information .fyi h2 { + font-size: 0.9em; + margin-bottom: 0; + margin-left: 0; +} + +#plugin-information .fyi h2.mainheader { + padding: 5px; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; +} + +#plugin-information .fyi ul { + padding: 10px 7px 10px 5px; + margin: 0; + list-style: none; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +#plugin-information .fyi li { + margin-left: 0; +} + +#plugin-information #section-holder { + padding: 10px; +} + +#plugin-information .section ul, +#plugin-information .section ol { + margin-right: 16px; + list-style-type: square; + list-style-image: none; +} + +#plugin-information #section-screenshots ol { + list-style: none; + margin: 0; +} + +#plugin-information #section-screenshots li img { + vertical-align: text-top; + max-width: 100%; + width: auto; + height: auto; +} + +#plugin-information #section-screenshots li p { + font-style: italic; + padding-right: 20px; + padding-bottom: 2em; +} + +#plugin-information #section-screenshots ol, +#plugin-information .updated, +#plugin-information pre { + margin-left: 215px; +} + +#plugin-information pre { + padding: 7px; + overflow: auto; + border-width: 1px; + border-style: solid; +} + +.plugin-version-author-uri { + font-size: 13px; +} + +img { + border: none; +} + +/* Header */ +#wphead { + border-bottom-width: 1px; + border-bottom-style: solid; +} + +.press-this #wphead { + height: 32px; + margin-right: 0; + margin-left: 0; + margin-bottom: 5px; +} + +.press-this #header-logo { + float: right; + margin: 7px 7px 0; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.press-this #wphead h1 { + font-weight: normal; + font-size: 16px; + line-height: 32px; + margin: 0; + float: right; +} + +.press-this #wphead h1 a { + text-decoration: none; +} + +.press-this #wphead h1 a:hover { + text-decoration: underline; +} + +.press-this #message { + margin: 10px 0; +} + +.press-this .posting { + margin-left: 252px; +} + +.press-this-sidebar { + float: left; + width: 240px; + padding-top: 10px; +} + +.press-this #title { + margin-right: 0; + margin-left: 0; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.press-this .tagchecklist { + margin-top: 8px; +} + +.press-this #titlediv { + margin: 0; +} + +.press-this .wp-media-buttons { + cursor: default; + padding: 8px 8px 6px; +} + +.press-this .howto { + margin-top: 2px; + margin-bottom: 3px; + font-size: 12px; + font-style: italic; + display: block; +} + +.press-this #wp-content-editor-container { + clear: none; +} + +.press-this #poststuff .inside { + margin-top: 18px; +} + +.press-this .category-tabs { + margin-bottom: 3px; +} + +/* Editor/Main Column */ +.press-this #poststuff { + margin: 0 10px 10px; + padding: 0; +} + +.press-this #photo-add-url-div input[type="text"] { + width: 220px; +} + +#poststuff #editor-toolbar { + height: 30px; +} + +div.zerosize { + border: 0 none; + height: 0; + margin: 0; + overflow: hidden; + padding: 0; + width: 0; +} + +.posting { + margin-left: 212px; + position: relative; +} + +.press-this .inner-sidebar { + width: 200px; +} + +.press-this .inner-sidebar .sleeve { + padding-top: 5px; +} + +.press-this #submitdiv p { + margin: 0; + padding: 6px; +} + +.press-this #submitdiv #publishing-actions { + border-bottom: 1px solid #dfdfdf; +} + +.press-this #publish { + float: left; +} + +.press-this #poststuff h2, +.press-this #poststuff h3 { + font-size: 14px; + line-height: 1; +} + +.press-this #tagsdiv-post_tag h3, +.press-this #categorydiv h3 { + cursor: pointer; +} + +.press-this #submitdiv h3 { + cursor: default; +} + +h3.tb { + font-weight: 600; + font-size: 12px; + margin-right: 5px; +} + +#TB_window { + border: 1px solid #333; +} + +.press-this .postbox, +.press-this .stuffbox { + margin-bottom: 10px; + min-width: 0; +} + +.js .meta-box-sortables .postbox:hover .handlediv { + margin-left: 0 !important; +} + +/* Metabox collapse arrow indicators */ +.js .sidebar-name .sidebar-name-arrow:before, +.js .meta-box-sortables .postbox .handlediv:before { + left: 12px; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 8px 10px; + top: 0; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.js #widgets-left .sidebar-name .sidebar-name-arrow { + display: none; +} + +.js #widgets-left .widgets-holder-wrap.closed .sidebar-name .sidebar-name-arrow, +.js #widgets-left .sidebar-name:hover .sidebar-name-arrow { + display: block; +} + +/* Show the arrow only on hover */ +.js .sidebar-name .sidebar-name-arrow:before, +.js .meta-box-sortables .postbox .handlediv:before { + content: '\f142'; +} + +.js .widgets-holder-wrap.closed .sidebar-name-arrow:before, +.js .meta-box-sortables .postbox.closed .handlediv:before { + content: '\f140'; +} + +.press-this #submitdiv:hover .handlediv { + background: none; +} + +.tbtitle { + font-size: 1.7em; + outline: none; + padding: 3px 4px; + border-color: #dfdfdf; +} + +.press-this .actions { + float: left; + margin: -19px 0 0; +} + +.press-this #extra-fields .actions { + margin: -32px 0 0 -7px; +} + +.press-this .actions li { + float: right; + list-style: none; + margin-left: 10px; +} + +#extra-fields .button { + margin-left: 5px; +} + +/* Photo Styles */ +#photo_saving { + margin: 0 8px 8px; + vertical-align: middle; +} + +#img_container_container { + overflow: auto; +} + +#extra-fields { + margin-top: 10px; + position: relative; +} + +#extra-fields h2 { + margin: 12px; +} + +#waiting { + margin-top: 10px; + overflow: hidden; +} + +#waiting span { + float: left; + margin: 0 5px 0 0; +} + +#waiting .spinner { + display: block; +} + +#extra-fields .postbox { + margin-bottom: 5px; +} + +#extra-fields .titlewrap { + padding: 0; + overflow: auto; + height: 120px; +} + +#img_container a { + display: block; + float: right; + overflow: hidden; +} + +#img_container img, +#img_container a { + width: 68px; + height: 68px; +} + +#img_container img { + border: none; + background-color: #f4f4f4; + cursor: pointer; +} + +#img_container a, +#img_container a:link, +#img_container a:visited { + border: 1px solid #ccc; + display: block; + position: relative; +} + +#img_container a:hover, +#img_container a:active { + border-color: #000; + z-index: 1000; + border-width: 1px; +} + +/* Video */ +#embed-code { + width: 100%; + height: 98px; +} + +/* Categories */ +.press-this .categorydiv div.tabs-panel { + height: 100px; +} + +/* Tags */ +.press-this .tagsdiv .newtag { + width: 120px; +} + +.press-this #content { + margin: 5px 0; + padding: 0 5px; + border: 0 none; + height: 345px; + font-family: Consolas, Monaco, monospace; + font-size: 13px; + line-height: 19px; + background: transparent; +} + +/* Submit */ +.press-this #publishing-actions .spinner { + display: inline; + vertical-align: middle; +} + +#TB_ajaxContent #options { + position: absolute; + top: 20px; + left: 25px; + padding: 5px; +} + +#TB_ajaxContent h3 { + margin-bottom: .25em; +} + +.error a { + text-decoration: underline; +} + +.updated a { + text-decoration: none; + padding-bottom: 2px; +} + +/* tag hints */ +.taghint { + color: #aaa; + margin: -17px 7px 0 0; + visibility: hidden; +} + +input.newtag ~ div.taghint { + visibility: visible; +} + +input.newtag:focus ~ div.taghint { + visibility: hidden; +} + +/* TinyMCE */ +#mce_fullscreen_container { + background: #fff; +} + +#photo-add-url-div input[type="text"] { + width: 300px; +} + +/* Theme/Plugin Editor */ +.alignleft h3 { + margin: 0; +} + +#template textarea { + font-family: Consolas, Monaco, monospace; + font-size: 13px; + width: 97%; + background: #f9f9f9; + outline: none; +} + +/* @noflip */ +#template textarea, +#docs-list { + direction: ltr; +} + +#template p { + width: 97%; +} + +#templateside { + float: left; + width: 190px; + word-wrap: break-word; +} + +#templateside h3, +#postcustomstuff p.submit { + margin: 0; +} + +#templateside h4 { + margin: 1em 0 0; +} + +#templateside ol, +#templateside ul { + margin: .5em 0; + padding: 0; +} + +#templateside li { + margin: 4px 0; +} + +#templateside a, +.theme-editor-php .highlight { + display: block; + padding: 3px 12px 3px 3px; + text-decoration: none; +} + +.theme-editor-php .highlight { + margin: -3px -12px -3px 3px; +} + +#templateside .highlight { + border: none; + font-weight: bold; +} + +.nonessential { + font-size: 11px; + font-style: italic; + padding-right: 12px; +} + +#documentation { + margin-top: 10px; +} + +#documentation label { + line-height: 22px; + vertical-align: baseline; + font-weight: 600; +} + +.fileedit-sub { + padding: 10px 0 8px; + line-height: 180%; +} + +.feature-filter { + padding: 8px 12px 0; +} + +.feature-filter .feature-group { + float: right; + margin: 5px 10px 10px; +} + +.feature-filter .feature-group li { + display: inline-block; + vertical-align: top; + list-style-type: none; + padding-left: 25px; + width: 150px; +} + +/* General Widgets Styles */ + +.widget { + margin: 0 auto 10px; + position: relative; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.widget-top { + font-size: 13px; + font-weight: 600; + background: #f7f7f7; +} + +.widget-top a.widget-action, +.widget-top a.widget-action:hover { + text-decoration: none; +} + +.widget-title h4 { + margin: 0; + padding: 15px; + line-height: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.widgets-holder-wrap .widget-inside { + border-top: none; + padding: 1px 15px 15px 15px; + line-height: 16px; +} + +/* Widget Dragging Helpers */ +.widget.ui-draggable-dragging { + min-width: 100%; +} + +.widget.ui-sortable-helper { + opacity: 0.8; +} + +.widget-placeholder { + border: 1px dashed #bbb; + margin: 0 auto 10px; + height: 45px; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#widgets-right .widget-placeholder { + margin-top: 0; +} + +#widgets-right .closed .widget-placeholder { + height: 0; + border: 0; + margin-top: -10px; +} + +/* Widget Sidebars */ +.sidebar-name { + border: none; + position: relative; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.sidebar-name-arrow { + position: absolute; + top: 0; + left: 0; + bottom: 0; +} + +.js .sidebar-name { + cursor: pointer; +} + +.sidebar-name h3 { + margin: 0; + padding: 8px 10px; + overflow: hidden; + white-space: nowrap; +} + +.widgets-holder-wrap .description { + padding: 0 0 15px; + margin: 0; + font-style: normal; + color: #777; +} + +#widgets-right .widgets-holder-wrap .description { + padding-right: 7px; + padding-left: 7px; +} + +/* Widgets 2-col Layout */ +div.widget-liquid-left { + margin: 0; + width: 38%; + float: right; +} + +div.widget-liquid-right { + float: left; + width: 58%; +} + +/* Widgets Left - Available Widgets */ + +div#widgets-left { + padding-top: 12px; +} + +div#widgets-left .closed .sidebar-name, +div#widgets-left .inactive-sidebar.closed .sidebar-name { + margin-bottom: 10px; +} + +div#widgets-left .sidebar-name h3 { + padding: 10px 0; + margin: 0 0 0 10px; +} + +div#widgets-left .sidebar-name .sidebar-name-arrow:before { + left: 0; + top: 4px; + padding: 4px 4px 4px 6px; +} + +div#widgets-left .widget-holder { + background: transparent; + border: none; +} + +#available-widgets .widget-action { + display: none; +} + +#available-widgets .widget { + margin: 0; +} + +#available-widgets .widget:nth-child(odd) { + clear: both; +} + +#available-widgets .widget .widget-description { + display: block; + padding: 10px 15px; + font-size: 12px; +} + +#available-widgets #widget-list { + position: relative; +} + +/* Inactive Sidebars */ +#widgets-left .inactive-sidebar { + clear: both; + width: 100%; + background: transparent; + padding: 0; + margin: 0 0 20px 0; + border: none; + box-shadow: none; +} + +#widgets-left .inactive-sidebar.first { + margin-top: 40px; +} + +/* Not sure what this is for... */ +div#widgets-left .inactive-sidebar .widget.expanded { + right: auto; +} + +.widget-title-action { + float: left; + position: relative; +} + +div#widgets-left .inactive-sidebar .widgets-sortables { + min-height: 42px; + padding: 0; + background: transparent; + margin: 0; + position: relative; +} + +/* Widgets Right */ + +div#widgets-right:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +div#widgets-right .sidebars-column-1, +div#widgets-right .sidebars-column-2 { + max-width: 450px; +} + +div#widgets-right .widgets-holder-wrap { + margin: 10px 0 0 0; +} + +div#widgets-right .sidebar-description { + min-height: 20px; + margin-top: -5px; +} + +div#widgets-right .sidebar-name h3 { + padding: 15px 7px; +} + +div#widgets-right .sidebar-name .sidebar-name-arrow:before { + left: 0; + top: 4px; +} + +div#widgets-right .widget-top { + padding: 0; +} + +div#widgets-right .widgets-sortables { + padding: 0 8px; + margin-bottom: 9px; + position: relative; + min-height: 123px; +} + +div#widgets-right .closed .widgets-sortables { + min-height: 0; + margin-bottom: 0; +} + +.sidebar-name .spinner { + margin: -5px 5px; + float: none; +} + +/* Dragging a widget over a closed sidebar */ +#widgets-right .widgets-holder-wrap.widget-hover { + border-color: #777; + box-shadow: 0 1px 2px rgba(0,0,0,0.3); +} + +/* Accessibility Mode */ +.widgets_access #widgets-left .widget .widget-top { + cursor: auto; +} + +.widgets_access #wpwrap .widgets-holder-wrap.closed .sidebar-description, +.widgets_access #wpwrap .widgets-holder-wrap.closed .widget, +.widgets_access #wpwrap .widget-control-edit { + display: block; +} + +.widgets_access #widgets-left .widget .widget-top:hover, +.widgets_access #widgets-right .widget .widget-top:hover { + border-color: #ddd; +} + +#available-widgets .widget-control-edit .edit, +#widgets-left .inactive-sidebar .widget-control-edit .add, +#widgets-right .widget-control-edit .add { + display: none; +} + +.widget-control-edit { + display: block; + color: #666; + background: #EEE; + padding: 0 15px; + line-height: 43px; + border-right: 1px solid #DDD; +} + +#widgets-left .widget-control-edit:hover, +#widgets-right .widget-control-edit:hover { + color: #fff; + background: #444; + border-right: 0; + outline: 1px solid #444; +} + +.widgets-holder-wrap .sidebar-name, +.widgets-holder-wrap .sidebar-description { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.editwidget { + margin: 0 auto; +} + +.editwidget .widget-inside { + display: block; + padding: 0 15px; +} + +.editwidget .widget-control-actions { + margin-top: 20px; +} + +.js .widgets-holder-wrap.closed .widget, +.js .widgets-holder-wrap.closed .sidebar-description, +.js .closed br.clear { + display: none; +} + +.nav-menus-php .item-edit:before, +.widget-top a.widget-action:after, +.control-section .accordion-section-title:after, +.accordion-section-title:after { + left: 0; + content: '\f140'; + border: none; + background: none; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.widget-top a.widget-action:after { + padding: 12px 12px 0; +} + +.nav-menus-php .item-edit:before { + line-height: 2.1; +} + +.control-section .accordion-section-title:after, +.accordion-section-title:after { + float: left; + left: 20px; + top: -2px; +} + +.control-section.open .accordion-section-title:after, +#customize-info.open .accordion-section-title:after, +.nav-menus-php .menu-item-edit-active .item-edit:before { + content: '\f142'; +} + +/* Hide Widget Settings by Default */ +.widget-inside, +.widget-description { + display: none; +} + +/* Dragging widgets over the available widget area show's a "Deactivate" message */ +#removing-widget { + display: none; + font-weight: normal; + padding-right: 15px; + font-size: 12px; + line-height: 1; +} + +.widget-control-noform, +#access-off, +.widgets_access .widget-action, +.widgets_access .sidebar-name-arrow, +.widgets_access #access-on, +.widgets_access .widget-holder .description, +.no-js .widget-holder .description { + display: none; +} + +.widgets_access .widget-holder, +.widgets_access #widget-list { + padding-top: 10px; +} + +.widgets_access #access-off { + display: inline; +} + +.widgets_access .sidebar-name, +.widgets_access .widget .widget-top { + cursor: default; +} + + +/* Widgets Area Chooser */ +.widget-liquid-left #widgets-left.chooser #available-widgets .widget, +.widget-liquid-left #widgets-left.chooser .inactive-sidebar { + transition: opacity 0.1s linear; +} + +.widget-liquid-left #widgets-left.chooser #available-widgets .widget, +.widget-liquid-left #widgets-left.chooser .inactive-sidebar { + /* -webkit-filter: blur(1px); */ + opacity: 0.2; + pointer-events: none; +} + +.widget-liquid-left #widgets-left.chooser #available-widgets .widget-in-question { + /* -webkit-filter: none; */ + opacity: 1; + pointer-events: auto; +} + +.widgets-chooser ul.widgets-chooser-sidebars { + margin: 0; + list-style-type: none; + max-height: 300px; + overflow: auto; +} + +.widgets-chooser { + display: none; +} + +.widgets-chooser ul { + border: 1px solid #ccc; +} + +.widgets-chooser li { + padding: 10px 35px 10px 15px; + border-bottom: 1px solid #ccc; + background: #fff; + margin: 0; + cursor: pointer; + outline: none; + position: relative; + transition: background: 0.2s ease-in-out; +} + +.widgets-chooser li:hover, +.widgets-chooser li:focus { + background: rgba(255,255,255,0.7); +} + +.widgets-chooser li:focus:before { + content: '\f147'; + display: block; + -webkit-font-smoothing: antialiased; + font: normal 26px/1 'dashicons'; + color: #999; + position: absolute; + top: 7px; + right: 5px; +} + +.widgets-chooser li:last-child { + border: none; +} + +.widgets-chooser li.widgets-chooser-selected { + background: #2ea2cc; + color: #fff; +} + +.widgets-chooser li.widgets-chooser-selected:before, +.widgets-chooser li.widgets-chooser-selected:focus:before { + content: '\f147'; + display: block; + -webkit-font-smoothing: antialiased; + font: normal 26px/1 'dashicons'; + color: #fff; + position: absolute; + top: 7px; + right: 5px; +} + +.widgets-chooser .widgets-chooser-actions { + padding: 10px 0 12px 0; + text-align: center; +} + +.widgets-chooser button { + margin-left: 5px; +} + +#available-widgets .widget .widget-top { + cursor: pointer; +} + +/* Enable draggable on IE10 touch events until it's rolled into jQuery UI core */ +.ui-sortable, +.ui-draggable { + -ms-touch-action: none; + touch-action: none; +} + +.meta-box-sortables.ui-sortable, +.widgets-holder-wrap .ui-draggable, +.widgets-holder-wrap .ui-sortable, +.menu.ui-sortable { + -ms-touch-action: auto; + touch-action: auto; +} + +.meta-box-sortables.ui-sortable .hndle, +.menu.ui-sortable .menu-item-handle { + -ms-touch-action: none; + touch-action: none; +} + +/* Accordion */ + +.accordion-section { + border-bottom: 1px solid #dfdfdf; + margin: 0; +} + +.accordion-section.open .accordion-section-content, +.no-js .accordion-section .accordion-section-content { + display: block; +} + +.accordion-section.open:hover { + border-bottom-color: #dfdfdf; +} + +.accordion-section-content { + display: none; + padding: 10px 20px 15px; + overflow: hidden; + background: #fff; + border-right: 1px solid #dfdfdf; + border-left: 1px solid #dfdfdf; +} + +.accordion-section-title { + margin: 0; + padding: 12px 15px 15px; + position: relative; + border-right: 1px solid #dfdfdf; + border-left: 1px solid #dfdfdf; + + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.js .accordion-section-title { + cursor: pointer; +} + +.js .accordion-section-title:after { + position: absolute; + top: 12px; + left: 10px; + z-index: 1; +} + +.accordion-section-title:focus { + outline: none; +} + +.accordion-section-title:hover:after, +.accordion-section-title:focus:after { + border-color: #aaa transparent; +} + +.cannot-expand .accordion-section-title { + cursor: auto; +} + +.cannot-expand .accordion-section-title:after { + display: none; +} + +.control-section .accordion-section-title { + border-right: none; + border-left: none; + padding: 10px 14px 11px 10px; + line-height: 21px; + background: #fff; +} + +.control-section .accordion-section-title:after { + top: 11px; +} + +.js .control-section:hover .accordion-section-title, +.js .control-section .accordion-section-title:hover, +.js .control-section.open .accordion-section-title, +.js .control-section .accordion-section-title:focus { + color: #222; + background: #f5f5f5; +} + +.control-section.open .accordion-section-title { + /* When expanded */ + border-bottom: 1px solid #dfdfdf; +} + +.sticky-menu #TB_window .updated { + margin: 16px 0 0; +} + +li#wp-admin-bar-menu-toggle { + display: none; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and (max-width: 480px) { + div.widget-liquid-left { + width: 100%; + float: none; + border-left: none; + padding-left: 0; + } + + #widgets-left .sidebar-name { + margin-left: 0; + } + + #widgets-left #available-widgets .widget-top { + margin-left: 0; + } + + #widgets-left .inactive-sidebar .widgets-sortables { + margin-left: 0; + } + + div.widget-liquid-right { + width: 100%; + float: none; + } + + div.widget { + margin: 0 auto 10px !important; + max-width: 480px; + } +} + +@media screen and (max-width: 320px) { + div.widget { + max-width: 320px; + } +} + +@media only screen and (max-width: 768px) { + /* categories */ + #col-left { + width: 100%; + } + + #col-right { + width: 100%; + } +} + +@media only screen and (min-width: 769px) { + /* categories */ + #col-left { + width: 35%; + } + + #col-right { + width: 65%; + } +} + +@media only screen and (max-width: 860px) { + + /* categories */ + #col-left { + width: 35%; + } + + #col-right { + width: 65%; + } +} + +@media only screen and (min-width: 980px) { + + /* categories */ + #col-left { + width: 35%; + } + + #col-right { + width: 65%; + } +} + +@media only screen and (max-width: 768px) { + /* categories */ + #col-left { + width: 100%; + } + + #col-right { + width: 100%; + } + + .form-field input, + .form-field textarea { + width: 99%; + } + + .form-wrap .form-field { + padding:0; + } + + /* users */ + #profile-page .form-table textarea { + max-width: 400px; + width: auto; + } + + /* menu locations */ + #menu-locations-wrap .widefat { + width: 100%; + } +} + +@media only screen and (min-width: 1250px) { + #widgets-left #available-widgets .widget { + width: 49%; + float: right; + } + + .widget.ui-draggable-dragging { + min-width: 49%; + } + + #widgets-left #available-widgets .widget:nth-child(even) { + float: left; + } + + #widgets-right .sidebars-column-1, + #widgets-right .sidebars-column-2 { + float: right; + width: 49%; + } + + #widgets-right .sidebars-column-1 { + margin-left: 2%; + } + + #widgets-right.single-sidebar .sidebars-column-1, + #widgets-right.single-sidebar .sidebars-column-2 { + float: none; + width: 100%; + margin: 0; + } +} + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + tr.wp-locked .locked-indicator { + background-image: url('../images/lock-2x.png'); + background-size: 16px 16px; + } + + #content-resize-handle, + #post-body .wp_themeSkin .mceStatusbar a.mceResize { + background: transparent url('../images/resize-2x.gif') no-repeat scroll left bottom; + background-size: 11px 11px; + } + + .rtl #content-resize-handle, + .rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize { + background: transparent url('../images/resize-rtl-2x.gif') no-repeat scroll left bottom; + } + + /* Back-compat for pre-3.8 */ + div.star-holder { + background: url('../images/stars-2x.png?ver=20121108') repeat-x bottom right; + background-size: 21px 37px; + } + + /* Back-compat for pre-3.8 */ + div.star-holder .star-rating { + background: url('../images/stars-2x.png?ver=20121108') repeat-x top right; + background-size: 21px 37px; + } + + .wp-full-overlay .collapse-sidebar-arrow { + background-image: url('../images/arrows-2x.png'); + background-size: 15px 123px; + } + + .spinner, + .imgedit-wait, + .customize-loading #customize-container, + .revision-tick.completed-false, + #theme-installer .wp-full-overlay-main { + background-image: url('../images/spinner-2x.gif'); + } + +} + +/* =Localized CSS +-------------------------------------------------------------- */ + +/* zh_CN: Remove italic properties. */ +.locale-zh-cn .howto, +.locale-zh-cn .tablenav .displaying-num, +.locale-zh-cn .js .input-with-default-title, +.locale-zh-cn .link-to-original, +.locale-zh-cn .inline-edit-row fieldset span.title, +.locale-zh-cn .inline-edit-row fieldset span.checkbox-title, +.locale-zh-cn #utc-time, +.locale-zh-cn #local-time, +.locale-zh-cn p.install-help, +.locale-zh-cn p.help, +.locale-zh-cn p.description, +.locale-zh-cn span.description, +.locale-zh-cn .form-wrap p { + font-style: normal; +} + +/* zh_CN: Enlarge dashboard widget 'Configure' link */ +.locale-zh-cn .hdnle a { font-size: 12px; } + +/* zn_CH: Enlarge font size, set font-size: normal */ +.locale-zh-cn form.upgrade .hint { font-style: normal; font-size: 100%; } + +/* Zn_CH: Distraction free writing. + * More beautiful font for "Just write." + * Larger text for HTML/Visual mode. + */ +.locale-zh-cn #wp-fullscreen-tagline { font-family: KaiTi, "楷体", sans-serif; } +.locale-zh-cn #wp-fullscreen-modes a { font-size: 12px; } + +/* zh_CN: Enlarge font-size. */ +.locale-zh-cn #sort-buttons { font-size: 1em !important; } + +/* de_DE: Text needs more space for translation */ +.locale-de-de .inline-edit-row fieldset label span.title { + width: 7em; /* default 5em */ +} +.locale-de-de .inline-edit-row fieldset label span.input-text-wrap { + margin-right: 7em; /* default 5em */ +} +.locale-de-de #customize-header-actions .button { + padding: 0 5px 1px; /* default 0 10px 1px */ +} +.locale-de-de #customize-header-actions .spinner { + margin: 16px 3px 0; /* default 16px 4px 0 5px */ +} + +/* ru_RU: Text needs more room to breathe. */ +.locale-ru-ru .inline-edit-row fieldset label span.title { + width: 8em; /* default 5em */ +} +.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap { + margin-right: 8em; /* default 5em */ +} +.locale-ru-ru.press-this .posting { + margin-left: 277px; /* default 252px + 25px */ +} +.locale-ru-ru .press-this-sidebar { + width: 265px; /* default 240px + 25px */ +} +.locale-ru-ru #customize-header-actions .button { + padding: 0 5px 1px; /* default 0 10px 1px */ +} +.locale-ru-ru #customize-header-actions .spinner { + margin: 16px 3px 0; /* default 16px 4px 0 5px */ +} + +/* lt_LT: QuickEdit */ +.locale-lt-lt .inline-edit-row fieldset label span.title { + width: 8em; +} +.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap { + margin-right: 8em; +} + + +@-ms-viewport { + width: device-width; +} + +@media screen and ( max-width: 782px ) { + html.wp-toolbar { + padding-top: 46px; + } + + body { + min-width: 240px; + overflow-x: hidden; + } + + body * { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important; + } + + #wpwrap { + background: #f0f0f0; + } + + #wpcontent, .auto-fold #wpcontent { + position: relative; + margin-right: 0; + padding-right: 10px; + } + + .wrap { + margin-left: 12px; + margin-right: 0; + } + + .col-wrap { + padding: 0; + } + + .sticky-menu #adminmenuwrap { + position: relative; + z-index: auto; + top: 0; + } + + /* Hidden Elements */ + #screen-meta, + #screen-meta-links, + #collapse-menu, + .post-format-select { + display: none !important; + } + + /* Input Elements */ + textarea { + -webkit-appearance: none; + } + + input[type=text], input[type=search], + input[type=password], input[type=number] { + -webkit-appearance: none; + padding: 6px 10px; + } + + input.code { + padding-bottom: 5px; + padding-top: 10px; + } + + input[type=checkbox], .widefat th input[type=checkbox] { + -webkit-appearance: none; + padding: 10px; + } + + .widefat th input[type=checkbox] { + margin-bottom: 8px; + } + + input[type=checkbox]:checked:before, .widefat th input[type=checkbox]:before { + font: normal 30px/1 'Dashicons'; + margin: -3px -5px; + } + + input[type=radio], + input[type=checkbox] { + height: 25px; + width: 25px; + } + + .wp-admin p input[type=checkbox], + .wp-admin p input[type=radio] { + margin-top: -3px; + } + + input[type=radio]:checked:before { + vertical-align: middle; + width: 9px; + height: 9px; + margin: 7px; + line-height: 16px; + } + + .wp-upload-form input[type=submit] { + margin-top: 10px; + } + + #wpbody select { + height: 36px; + font-size: 16px; + } + + .wp-admin .button-cancel { + padding: 0; + font-size: 14px; + } + + .wrap .add-new-h2, .wrap .add-new-h2:active { + padding: 10px 15px; + font-size: 14px; + } + + .wp-color-result { + height: auto; + padding-right: 45px; + } + + .wp-color-result:after { + font-size: 14px; + height: auto; + padding: 6px 14px; + } + + #createuser .form-field input { + width: 100%; + } + + /* Feedback Messages */ + .wrap div.updated, .wrap div.error, .media-upload-form div.error { + margin: 20px 0 10px 0; + padding: 5px 10px; + font-size: 14px; + line-height: 175%; + } + + /* Sidebar Adjustments */ + .auto-fold #adminmenu, + .auto-fold #adminmenuback, + .auto-fold #adminmenuwrap { + position: absolute; + width: 190px; + z-index: 100; + } + + .auto-fold #adminmenuback, + .auto-fold #adminmenuwrap { + display: none; + } + + .auto-fold #adminmenu li.menu-top { + width: 100%; + } + + /* Resize the admin menu items to a comfortable touch size */ + .auto-fold #adminmenu li a { + font-size: 16px; + padding: 5px; + } + + .auto-fold #adminmenu li.menu-top .wp-submenu > li > a { + padding: 10px 20px 10px 10px; + } + + /* Restore the menu names */ + .auto-fold #adminmenu .wp-menu-name { + display: block; + margin-right: 35px; + } + + /* Switch the arrow side */ + .auto-fold ul#adminmenu a.wp-has-current-submenu:after, + .auto-fold ul#adminmenu > li.current > a.current:after { + border-width: 8px; + margin-top: -8px; + } + + .auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + display: none; + } + + /* Make the submenus appear correctly when tapped. */ + #adminmenu .wp-submenu { + position: relative; + display: none; + } + + .auto-fold #adminmenu .selected .wp-submenu, + .auto-fold #adminmenu .wp-menu-open .wp-submenu { + position: relative; + display: block; + top: 0; + right: -1px; + -webkit-box-shadow: none; + box-shadow: none; + } + + .auto-fold #adminmenu .selected .wp-submenu:after, + .auto-fold #adminmenu .wp-menu-open .wp-submenu:after { + display: none; + } + + .auto-fold #adminmenu .opensub .wp-submenu { + display: none; + } + + .auto-fold #adminmenu .selected .wp-submenu { + display: block; + } + + .auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after { + display: block; + } + + .auto-fold #adminmenu a.menu-top:focus + .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu { + position: relative; + right: -1px; + left: 0; + top: 0; + } + + /* Remove submenu headers and adjust sub meu*/ + #adminmenu .wp-submenu .wp-submenu-head { + display: none; + } + + /* Sidebar Toggle */ + #wp-responsive-toggle { + position: fixed; + top: 5px; + right: 4px; + padding-left: 10px; + z-index: 99999; + border: none; + box-sizing: border-box; + -moz-box-sizing: border-box; + } + + .wrap .icon32 + h2 { + margin-top: -2px; + } + + .wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #333; + } + + .wp-responsive-open #wpbody { + left: -190px; + } + + .auto-fold .wp-responsive-open #adminmenuback, + .auto-fold .wp-responsive-open #adminmenuwrap { + display: block; + } + + /* General New Post Form */ + #post-body-content { + min-width: 0; + } + + #titlediv #title-prompt-text, + #wp-fullscreen-title-prompt-text { + padding: 10px 10px; + } + + .post-format-options { + padding-left: 0; + } + + .post-format-options a { + margin-left: 5px; + margin-bottom: 5px; + min-width: 52px; + } + + .post-format-options .post-format-title { + font-size: 11px; + } + + .post-format-options a div { + height: 28px; + width: 28px; + } + + .post-format-options a div:before { + font-size: 26px !important; + } + + /* General Metabox */ + .postbox { + font-size: 14px; + } + + #poststuff h3, + .metabox-holder h3 { + padding: 12px; + } + + .postbox .handlediv { + margin-top: 3px; + } + + /* Publish Metabox Options */ + #post-visibility-select { + line-height: 280%; + } + + .wp-core-ui .save-post-visibility, + .wp-core-ui .save-timestamp { + vertical-align: middle; + margin-left: 15px; + } + + .timestamp-wrap select#mm { + display: block; + width: 100%; + margin-bottom: 10px; + } + + .timestamp-wrap #jj, + .timestamp-wrap #aa, + .timestamp-wrap #hh, + .timestamp-wrap #mn { + padding: 12px 3px; + font-size: 14px; + margin-bottom: 5px; + width: auto; + text-align: center; + } + + /* Categories Metabox */ + ul.category-tabs { + margin: 30px 0 15px; + } + + ul.category-tabs li.tabs { + padding: 15px; + } + + .press-this ul.category-tabs li.tabs { + padding: 3px 5px 5px; /* Reset tabs in Press This to standard size */ + } + + ul.categorychecklist li { + margin-bottom: 15px; + } + + ul.categorychecklist ul { + margin-top: 15px; + } + + .category-add input[type=text], + .category-add select { + max-width: none; + margin-bottom: 15px; + } + + /* Tags Metabox */ + .tagsdiv .newtag { + width: 100%; + padding: 25px 10px; + margin-bottom: 15px; + } + + .tagchecklist { + margin: 25px 10px; + } + + .tagchecklist span { + font-size: 16px; + line-height: 120%; + } + + /* Revisions */ + #diff-next-revision, + #diff-previous-revision { + margin-top: -1em; + } + + table.diff { + -ms-word-break: break-all; + word-break: break-all; + word-wrap: break-word; + } + + /* Discussion */ + #commentstatusdiv p { + line-height: 2.8; + } + + /* TinyMCE Adjustments */ + .mceToolbar * { + white-space: normal !important; + } + + .mceToolbar tr, + .mceToolbar td { + float: right !important; + } + + .wp_themeSkin a.mceButton { + width: 30px; + height: 30px; + } + + .wp_themeSkin .mceButton .mceIcon { + margin-top: 5px; + margin-right: 5px; + } + + .wp_themeSkin .mceSplitButton { + margin-top: 1px; + } + + .wp_themeSkin .mceSplitButton td a.mceAction { + padding-top: 6px; + padding-bottom: 6px; + padding-right: 6px; + padding-left: 3px; + } + + .wp_themeSkin .mceSplitButton td a.mceOpen, + .wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen { + padding-top: 6px; + padding-bottom: 6px; + background-position: 1px 6px; + } + + .wp_themeSkin table.mceListBox { + margin: 5px; + } + + div.quicktags-toolbar input { + padding: 10px 20px; + } + + #wp-content-editor-tools { + overflow: hidden; + padding: 20px 0 1px 15px; + top: 1px; + } + + a.wp-switch-editor { + font-size: 16px; + line-height: 1em; + margin: 3px 7px 0 0; + padding: 12px 15px; + } + + #wp-content-media-buttons a { + font-size: 16px; + line-height: 37px; + height: 39px; + padding: 0 15px 0 20px; + } + + .wp-media-buttons span.wp-media-buttons-icon, + .wp-media-buttons span.jetpack-contact-form-icon { + width: 22px !important; + margin-top: -3px !important; + margin-right: -5px !important; + } + + .wp-media-buttons .add_media span.wp-media-buttons-icon:before, + .wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before { + font-size: 20px !important; + } + + #content_wp_fullscreen { + display: none; + } + + .misc-pub-section { + padding: 20px 10px 20px; + } + + .misc-pub-section > a { + float: left; + font-size: 16px; + } + + #delete-action, + #publishing-action { + line-height: 47px; + } + + /* Subsubsub Nav */ + .subsubsub { + font-size: 16px; + text-align: center; + margin-bottom: 15px; + } + + /* WP List Table Options & Filters */ + .tablenav { + height: auto; + } + + .tablenav.top { + margin: 0; + } + + .tablenav.bottom { + position: relative; + margin-top: 15px; + } + + .tablenav br { + display: none; + } + + .tablenav br.clear { + display: block; + } + + #wpbody-content { + padding-bottom: 100px; + } + + p.search-box { + float: none; + position: absolute; + bottom: 0; + width: 98%; + height: 90px; + margin-bottom: 20px; + } + + p.search-box input[name="s"] { + height: auto; + float: none; + width: 100%; + margin-bottom: 10px; + vertical-align: middle; + -webkit-appearance: none; + } + + p.search-box input[type="submit"] { + margin-bottom: 10px; + } + + .tablenav.top .actions, .view-switch { + display: none; + } + + /* Pagination */ + .tablenav.top .displaying-num { + display: none; + } + + .tablenav.bottom .displaying-num { + position: absolute; + left: 0; + top: 10px; + font-size: 14px; + } + + .tablenav-pages { + width: 100%; + text-align: center; + margin: 0 0 25px; + } + + .tablenav.bottom .tablenav-pages { + margin-top: 25px; + } + + .tablenav.top .tablenav-pages.one-page { + display: none; + } + + .tablenav.bottom .tablenav-pages.one-page { + margin: 15px 0 0 0; + height: 0; + } + + .tablenav-pages .pagination-links .paging-input { + font-size: 18px; + } + + .tablenav-pages .pagination-links a { + padding: 8px 20px 11px; + font-size: 18px; + background: rgba(0, 0, 0, 0.05); + } + + .tablenav-pages .pagination-links .current-page { + padding: 10px; + font-size: 14px; + } + + /* WP List Table Adjustments: General */ + .form-wrap > p { + display: none; + } + + .comment-count { + font-size: 14px; + } + + /* Columns to hide */ + .fixed .column-date, + .fixed .column-author, + .column-categories, + .column-tags, + .tags .column-description, + .media .column-parent, + .users .column-email, + .users .column-name, + .sites .column-registered, + .sites .column-users { + display: none; + } + + .fixed .column-comment .comment-author { + display: block; + } + + /* Posts */ + .column-title { + width: 85%; + } + + .fixed .column-comments, .widefat .check-column { + width: 35px + } + + .widefat thead .check-column, .widefat tfoot .check-column { + padding: 10px 0 10px; + } + + .widefat * { + word-wrap: normal; + } + + /* Quick Edit and Bulk Edit */ + #wpbody-content .quick-edit-row-post .inline-edit-col-left, + #wpbody-content .quick-edit-row-post .inline-edit-col-right, + #wpbody-content .inline-edit-row-post .inline-edit-col-center, + #wpbody-content .quick-edit-row-page .inline-edit-col-left, + #wpbody-content .quick-edit-row-page .inline-edit-col-right, + #wpbody-content .bulk-edit-row-post .inline-edit-col-right, + #wpbody-content .bulk-edit-row .inline-edit-col-left, + #wpbody-content .bulk-edit-row-page .inline-edit-col-right, + #wpbody-content .bulk-edit-row .inline-edit-col-bottom { + float: none; + width: 100%; + } + + #wpbody-content .quick-edit-row fieldset .inline-edit-col label, + #wpbody-content .quick-edit-row fieldset .inline-edit-group label, + #wpbody-content .bulk-edit-row fieldset .inline-edit-col label, + #wpbody-content .bulk-edit-row fieldset .inline-edit-group label { + max-width: none; + float: none; + margin-bottom: 5px; + } + + #wpbody .bulk-edit-row fieldset select { + display: block; + width: 100%; + max-width: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + .inline-edit-row fieldset ul.cat-checklist label, + .inline-edit-row #bulk-titles div { + font-size: 16px; + } + + .inline-edit-row fieldset label span.title { + float: none; + } + + .inline-edit-row fieldset label.inline-edit-tags { + padding: 0 0.5em; + } + + .inline-edit-row fieldset .inline-edit-col label.inline-edit-tags { + padding: 0; + } + + .inline-edit-row fieldset label span.input-text-wrap { + margin-right: 0; + } + + .inline-edit-row fieldset input[name=jj], + .inline-edit-row fieldset input[name=hh], + .inline-edit-row fieldset input[name=mn] { + width: 3em; + } + + .inline-edit-row fieldset input[name=aa] { + width: 4.5em; + } + + #bulk-titles div { + margin: 0.8em 0.3em; + } + + #bulk-titles div a { + height: 22px; + } + + /* Taxonomies */ + .tags .column-posts { + width: 50px; + } + + .tags .column-slug { + width: 30%; + } + + /* Comments */ + .comments .column-response { + width: 35%; + } + + /* Users */ + .users .column-role { + width: 35%; + } + + /* Network admin sites */ + .sites .column-blogname { + width: 55%; + } + + /* Updates */ + #wpbody-content #update-themes-table .plugin-title { + width: auto; + } + + /* Form Tables */ + .form-table { + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + .form-table th, + .form-table td { + display: block; + width: auto; + vertical-align: middle; + } + + .form-table .color-palette td { + display: table-cell; + width: 15px; + } + + .form-table table.color-palette { + margin-left: 10px; + } + + textarea, + input { + font-size: 16px; + } + + .form-table td input[type="text"], + .form-table td input[type="password"], + .form-table td select, + .form-table td textarea, + .form-table span.description, + #profile-page .form-table textarea { + width: 100%; + font-size: 16px; + line-height: 1.5; + padding: 7px 10px; + display: block; + max-width: none; + box-sizing: border-box; + -moz-box-sizing: border-box; + } + + input[type=text].small-text, + input[type=search].small-text, + input[type=password].small-text, + input[type=number].small-text, + input[type="number"].small-text, + .form-table input[type=text].small-text { + width: auto; + max-width: 55px; + display: inline; + padding: 3px 6px; + margin: 0 3px; + } + + #pass-strength-result { + width: 100%; + box-sizing: border-box; + -moz-box-sizing: border-box; + padding: 8px; + } + + .form-table span.description { + padding: 4px 0 0; + line-height: 1.4em; + } + + .form-table th { + padding-top: 10px; + padding-bottom: 0; + border-bottom: 0; + } + + .form-table td { + padding-top: 8px; + padding-right: 0; + } + + .form-table input.regular-text { + width: 100%; + } + + .form-table label { + font-size: 14px; + } + + .form-table fieldset label { + display: block; + } + + #utc-time { + margin-top: 10px; + } + + #utc-time, + #local-time { + display: block; + float: none; + padding: 0; + line-height: 2; + } + + /* Add/Edit Media */ + .wp_attachment_details label[for="content"] { + font-size: 14px; + line-height: 1.5em; + } + + /* Links */ + .link-manager-php #posts-filter { + margin-top: 25px; + } + + .link-manager-php .tablenav.bottom { + overflow: hidden; + } + + .links-table #link_rel { + max-width: none; + } + + .links-table th, + .links-table td { + padding: 10px 0; + } + + /** + * Nav Menus + * ---------------------------------------------------------------------------- + */ + body.nav-menus-php { + min-width: 0 !important; + } + + #nav-menus-frame { + margin-right: 0; + float: none; + width: 100%; + } + + #wpbody-content #menu-settings-column { + display: block; + width: 100%; + float: none; + margin-right: 0; + } + + #side-sortables .add-menu-item-tabs { + margin: 15px 0 14px; + } + + ul.add-menu-item-tabs li.tabs { + padding: 13px 15px 14px; + } + + .nav-menus-php .item-controls .item-type { + margin-top: 2px; + } + + .nav-menus-php .customlinkdiv .howto input { + width: 65%; + } + + .nav-menus-php .quick-search { + width: 85%; + } + + #menu-management-liquid { + margin-top: 25px; + } + + .nav-menus-php .menu-name-label.howto span { + margin-top: 13px + } + + .menu-name-label #menu-name { + margin-top: 4px; + } + + .nav-menus-php .major-publishing-actions .publishing-action { + margin-top: 6px; + } + + .nav-menus-php .delete-action { + font-size: 14px; + line-height: 50px; + margin-top: 12px; + } + + .menu-item-bar .menu-item-handle, + .menu-item-settings, + .description-wide { + width: auto; + } + + .menu-item-settings { + padding: 10px; + } + + .menu-item-settings .description-thin, + .menu-item-settings .description-wide { + width: 100%; + height: auto; + } + + .menu-item-settings input { + width: 100%; + } + + .menu-settings dl { + padding-right: 0; + } + + .menu-settings dd { + float: none; + width: 100%; + margin-bottom: 15px; + } + + .menu-settings dt { + float: none; + width: auto; + margin-right: 0; + margin-bottom: 15px; + } + + .available-theme .action-links .delete-theme { + float: none; + margin: 0; + padding: 0; + clear: both; + } + + .available-theme .action-links .delete-theme a { + padding: 0; + } + + /* Widget Management Page (Needs UX work on mobile) */ + #templateside { + float: none; + width: auto; + } + + #templateside li { + margin: 0; + } + + #templateside li a { + display: block; + padding: 5px; + } + + #templateside .highlight { + padding: 5px; + margin-right: -5px; + margin-top: -5px; + } + + #template div { + float: none; + margin: 0; + width: auto; + } + + #template textarea { + width: 100%; + } + + .fileedit-sub .alignright { + margin-top: 15px; + } + + /* Plugin/Theme Management Page */ + .wp-list-table.plugins { + position: relative; + margin-top: 35px; + margin-bottom: 50px; + } + + .wp-list-table.plugins thead .column-description, + #wpbody-content .wp-list-table.plugins tfoot .column-description, + .wp-list-table.plugins th#description { + display: none; + } + + #wpbody-content .wp-list-table.plugins, + #wpbody-content .wp-list-table.plugins thead, + #wpbody-content .wp-list-table.plugins tbody, + #wpbody-content .wp-list-table.plugins tr, + #wpbody-content .wp-list-table.plugins .column-description, + #wpbody-content .wp-list-table.plugins .plugin-title, + #wpbody-content .wp-list-table.plugins .theme-title, + #wpbody-content .wp-list-table.plugins .plugin-update, + #wpbody-content .wp-list-table.plugins .manage-column.column-name { + display: block; + width: auto; + } + + .wp-list-table.plugins thead, + .wp-list-table.plugins tfoot { + position: absolute; + top: -35px; + right: 0; + left: 0; + width: auto; + height: 35px; + } + + .wp-list-table.plugins tfoot { + bottom: -35px; + top: auto; + } + + .active, .inactive { + padding-top: 0; + } + + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title { + padding-top: 13px; + padding-bottom: 4px; + } + + .plugins tr.active + tr.inactive th.check-column, + .plugins tr.active + tr.inactive td, + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title, + .wp-list-table.plugins tbody th { + box-shadow: none; + -webkit-box-shadow: none; + } + + .plugins tbody { + padding: 1px 0 0; + } + + .plugins tr.active + tr.inactive td.column-description { + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -ms-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -o-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + } + + .plugins tr.active + tr.inactive th.check-column, + .plugins tr.active + tr.inactive td { + border-top: none; + } + + .wp-list-table.plugins .column-description { + padding-top: 0; + } + + .wp-list-table.plugins .manage-column.column-name, + .wp-list-table.plugins .column-description, + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title { + padding-left: 12px; + padding-right: 46px; + } + + .wp-list-table.plugins tr { + position: relative; + } + + .wp-list-table.plugins th.check-column, + .wp-list-table.plugins tr.update th.check-column { + position: absolute; + height: auto; + top: 0; + bottom: 0; + right: 0; + padding-right: 2px; + padding-top: 18px; + } + + .wp-list-table.plugins thead th.check-column, + .wp-list-table.plugins tfoot th.check-column { + padding-right: 3px; + padding-top: 11px; + background: none; + } + + .widefat tbody th.check-column input[type="checkbox"] { + margin-top: -3px; + margin-right: 8px; + } + + .wp-list-table.plugins .active .check-column input, + .wp-list-table.plugins .update .check-column input { + margin-right: 5px; + } + + .wp-list-table.plugins thead .check-column input, + .wp-list-table.plugins tfoot .check-column input { + margin-top: -6px; + } + + .wp-list-table.plugins .active th.check-column { + background: none; + } + + .wp-list-table.plugins .plugin-title strong, + .wp-list-table.plugins .theme-title strong { + font-size: 1.4em; + line-height: 1.6em; + } + + /* Add New plugins page */ + table.plugin-install .column-name, + table.plugin-install .column-version, + table.plugin-install .column-rating, + table.plugin-install .column-description { + display: block; + width: auto; + } + + table.plugin-install th.column-name, + table.plugin-install th.column-version, + table.plugin-install th.column-rating, + table.plugin-install th.column-description { + display: none; + } + + table.plugin-install td.column-name strong { + font-size: 1.4em; + line-height: 1.6em; + } + + table.plugin-install #the-list td { + -webkit-box-shadow: none; + box-shadow: none; + } + + table.plugin-install #the-list tr { + display: block; + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + } + + /* Dashboard */ + #dashboard_recent_comments #the-comment-list .comment-item .avatar { + height: 30px; + width: 30px; + margin: 4px 0 5px 10px; + } + + /* About Page */ + .about-wrap .feature-section.one-col > div, + .about-wrap .feature-section.two-col > div, + .about-wrap .three-col.about-updates > div { + width: 100%; + margin: 0; + float: none; + } + + .about-wrap .about-colors .color-option { + width: 49%; + } + + /* Moderate Comment */ + .comment-ays { + border-bottom: none; + } + + #wpfooter { + display: none; + } + + #comments-form .checkforspam { + display: none; + } + + /* Reset responsive styles in Press This */ + + .press-this a.wp-switch-editor { + font: 13px/19px "Open Sans", sans-serif; + margin: 5px 5px 0 0; + padding: 3px 8px 4px; + } + + .press-this #wp-content-media-buttons a { + padding: 0; + line-height: normal; + height: auto; + } + + .press-this #wp-content-editor-tools { + padding: 0; + top: 3px; + } + + .press-this .category-tabs { + margin-top: 0; + } + + .press-this .tagsdiv .newtag { + width: 120px; + padding: 3px 5px; + margin-bottom: 0; + } + + .press-this .tagchecklist { + padding: 0; + margin-bottom: 0; + } + + .press-this .wp_themeSkin a.mceButton { + width: 20px; + height: 20px; + } + + .press-this .wp_themeSkin .mceButton .mceIcon { + margin: 0; + } + + .press-this #poststuff h3, + .press-this .metabox-holder h3 { + padding: 7px 12px; + } + + .interim-login input[type=checkbox], + .press-this input[type=checkbox], + .press-this input[type=radio] { + height: 16px; + width: 16px; + } + + .interim-login input[type=checkbox]:checked:before, + .press-this input[type=checkbox]:checked:before { + width: 16px; + font: normal 21px/1 'dashicons'; + margin: -3px -4px 0 0; + } + + .press-this input[type=radio]:checked:before { + font: normal 21px/1 'dashicons'; + width: 6px; + height: 6px; + margin: 4px; + } + + .press-this ul.categorychecklist ul, + .press-this ul.categorychecklist li { + margin-top: 0; + margin-bottom: 0; + } + + .press-this div.quicktags-toolbar input { + padding: 2px 4px; + } + + .press-this textarea, + .press-this input { + font-size: 14px; + } + + .press-this .tagchecklist span { + font-size: 13px; + line-height: 1.8em; + } +} + +@media only screen and (max-width: 500px) { + .about-wrap { + margin-left: 20px; + margin-right: 10px; + } + + .about-wrap h1, + .about-text { + margin-left: 0; + } + + .about-text { + margin-bottom: 0.25em; + } + + .about-wrap .wp-badge { + position: relative; + margin-bottom: 1.5em; + width: 100%; + } + + .about-wrap .feature-section.three-col div { + width: 100%; + float: none; + } + + .about-wrap .three-col.about-updates .col-1 { + padding: 0; + float: none; + } + + .about-wrap .three-col.about-updates .col-2 { + margin: 0 0 20px; + width: 100%; + float: none; + } + + /* Align Add Media + Visual + Text tabs */ + #wp-content-media-buttons a { + font-size: 14px; + padding: 0 10px 0 10px; + } +} + +@media screen and ( max-width: 782px ) { + #wpadminbar #wp-admin-bar-menu-toggle a { + display: block; + padding: 0; + overflow: hidden; + outline: none; + text-decoration: none; + border: 1px solid transparent; + background: none; + height: 44px; + margin-right: -1px; + } + + li#wp-admin-bar-menu-toggle { + display: block; + } + + #wpadminbar #wp-admin-bar-menu-toggle a:hover { + border: 1px solid transparent; + } + + #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + content: '\f228'; + display: inline-block; + float: right; + font: normal 40px/45px 'Dashicons'; + vertical-align: middle; + outline: none; + margin: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + height: 44px; + width: 50px; + padding: 0; + border: none; + text-align: center; + text-decoration: none; + box-sizing: border-box; + -moz-box-sizing: border-box; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + #adminmenuwrap, + #adminmenuback { + display: none; + } + + .wp-responsive-open #adminmenuwrap, + .wp-responsive-open #adminmenuback { + display: block; + } + + /* Disable horizontal scroll when responsive menu is open + since we push the main content off to the right. */ + #wpwrap.wp-responsive-open { + overflow-x: hidden; + } + + html.wp-toolbar { + padding-top: 0; + } + + #wpbody { + padding-top: 46px; + } + + .auto-fold #adminmenu { + top: 46px; + } + + #wp-responsive-overlay { + position: fixed; + top: 0; + right: 0; + width: 100%; + height: 100%; + z-index: 400; + } + + /* Keep the close icon from overlapping the Welcome text. */ + .welcome-panel .welcome-panel-close { + overflow: hidden; + text-indent: 100%; + white-space: nowrap; + width: 20px; + height: 20px; + left: 0; + padding: 5px; + } + + /* Make the close icon larger for tappability. */ + #welcome-panel.welcome-panel .welcome-panel-close::before { + font-size: 20px; + margin: 0; + } + + /* Keep full-width boxes on Edit Post page from causing horizontal scroll */ + div#post-body.metabox-holder.columns-1 { + overflow-x: hidden; + } + + /* Color Picker Options */ + .color-option { + width: 49%; + } +} diff --git a/src/wp-admin/css/wp-admin-rtl.min.css b/src/wp-admin/css/wp-admin-rtl.min.css new file mode 100644 index 0000000..ef593d5 --- /dev/null +++ b/src/wp-admin/css/wp-admin-rtl.min.css @@ -0,0 +1 @@ +#wpwrap{height:auto;min-height:100%;width:100%;position:relative;-webkit-font-smoothing:subpixel-antialiased}#wpcontent{height:100%}#wpcontent,#wpfooter{margin-right:180px}.folded #wpcontent,.folded #wpfooter{margin-right:56px}#wpbody-content{padding-bottom:65px;float:right;width:100%;overflow:visible!important}#adminmenuback,#adminmenuwrap,#adminmenu,#adminmenu .wp-submenu{width:160px}#adminmenuback{position:absolute;top:0;bottom:0;z-index:-1}#adminmenu{clear:right;margin:12px 0 0;padding:0;list-style:none}.folded #adminmenuback,.folded #adminmenuwrap,.folded #adminmenu,.folded #adminmenu li.menu-top{width:36px}.inner-sidebar{float:left;clear:left;display:none;width:281px;position:relative}.columns-2 .inner-sidebar{margin-left:auto;width:286px;display:block}.inner-sidebar #side-sortables,.columns-2 .inner-sidebar #side-sortables{min-height:300px;width:280px;padding:0}.has-right-sidebar .inner-sidebar{display:block}.has-right-sidebar #post-body{float:right;clear:right;width:100%;margin-left:-2000px}.has-right-sidebar #post-body-content{margin-left:300px;float:none;width:auto}#col-container,#col-left,#col-right{overflow:hidden;padding:0;margin:0}#col-left{width:35%}#col-right{float:left;clear:left;width:65%}.col-wrap{padding:0 7px}.alignleft{float:right}.alignright{float:left}.textleft{text-align:right}.textright{text-align:left}.clear{clear:both}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.screen-reader-shortcut{position:absolute;top:-1000em}.screen-reader-shortcut:focus{right:6px;top:-25px;height:auto;width:auto;display:block;font-size:14px;font-weight:600;padding:15px 23px 14px;background:#f1f1f1;color:#21759b;z-index:100000;line-height:normal;-webkit-box-shadow:0 0 2px 2px rgba(0,0,0,.6);box-shadow:0 0 2px 2px rgba(0,0,0,.6);text-decoration:none;outline:0}.hidden,.js .closed .inside,.js .hide-if-js,.no-js .hide-if-no-js,.js.wp-core-ui .hide-if-js,.js .wp-core-ui .hide-if-js,.no-js.wp-core-ui .hide-if-no-js,.no-js .wp-core-ui .hide-if-no-js{display:none}input,input[type=text],input[type=password],input[type=number],input[type=search],input[type=email],input[type=url],textarea{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{border-width:1px;border-style:solid;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 0 0 4px;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;-webkit-box-sizing:border-box;box-sizing:border-box}td>input[type=checkbox],.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{border-radius:50%;margin-left:4px;line-height:10px}input[type=checkbox]:disabled,input[type=radio]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio]:disabled:checked:before{opacity:.7}input[type=checkbox]:checked:before,input[type=radio]:checked:before{float:right;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox]:checked:before{content:'\f147';margin:-3px -4px 0 0}input[type=radio]:checked:before{content:'\2022';text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px}@-moz-document url-prefix(){input[type=checkbox],input[type=radio],.form-table input.tog{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password],.ie8 .login form .input{font-family:sans-serif}html,body{height:100%;margin:0;padding:0}body{font-family:"Open Sans",sans-serif;font-size:13px;line-height:1.4em;min-width:600px}body.iframe{min-width:0;padding-top:1px}body.login{background:#fbfbfb;min-width:0}iframe,img{border:0}td,textarea,input,select,button{font-family:inherit;font-size:inherit;font-weight:inherit}td,textarea{line-height:inherit}textarea{overflow:auto}textarea,input,select{font-size:14px;padding:3px 5px;line-height:15px;border-radius:0}textarea{padding:2px 6px;line-height:1.4}a,input[type=text],input[type=password],input[type=number],input[type=search],input[type=email],input[type=url],textarea,div,select{outline:0}.wp-admin input[type=file]{padding:3px 0}a:focus,a:active{outline:thin dotted}#adminmenu a:focus,#adminmenu a:active,.screen-reader-text:focus{outline:0}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}p,.wp_attachment_details label[for=content]{font-size:13px;line-height:1.5;margin:1em 0}blockquote{margin:1em}label{cursor:pointer}li,dd{margin-bottom:6px}input,select{margin:1px;padding:3px 5px}h1,h2,h3,h4,h5,h6{display:block;font-weight:600}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0;font-weight:400}h3{font-size:1.3em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}ul,ol{padding:0}ul{list-style:none}ol{list-style-type:decimal;margin-right:2em}ul.ul-disc{list-style:disc outside}ul.ul-square{list-style:square outside}ol.ol-decimal{list-style:decimal outside}ul.ul-disc,ul.ul-square,ol.ol-decimal{margin-right:1.8em}ul.ul-disc>li,ul.ul-square>li,ol.ol-decimal>li{margin:0 0 .5em}.code,code{font-family:Consolas,Monaco,monospace;direction:ltr}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}kbd,code{padding:3px 5px 2px;margin:0 1px;font-size:13px}.subsubsub{list-style:none;margin:8px 0 0;padding:0;font-size:13px;float:right}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#999;font-weight:400}.subsubsub a.current{font-weight:600;border:0}.subsubsub li{display:inline-block;margin:0;padding:0;white-space:nowrap}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],select,.tablenav-pages span.current,#titlediv #title,#postcustomstuff table,#postcustomstuff input,#postcustomstuff textarea,.imgedit-menu div,.plugin-update-tr .update-message,#poststuff .inside .the-tagcloud,.nav-menus-php .list-container,.menu-item-handle,.link-to-original,.nav-menus-php .major-publishing-actions .form-invalid,#TB_window,.tbtitle,.highlight{border-width:1px;border-style:solid}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat *{word-wrap:break-word}.widefat a{text-decoration:none}.widefat td,.widefat th{padding:8px 10px}.widefat tfoot th{border-bottom:0}.widefat .no-items td{border-bottom-width:0}.widefat td{vertical-align:top}.widefat td,.widefat td p,.widefat td ol,.widefat td ul{font-size:13px;line-height:1.5em}.widefat th{text-align:right;line-height:1.3em;font-size:14px}.widefat th input{margin:0 8px 0 0;padding:0;vertical-align:text-top}.widefat .check-column{width:2.2em;padding:6px 0 25px;vertical-align:top}.widefat th input[type=checkbox]{margin-top:-1px}.widefat tbody th.check-column{padding:9px 0 22px}.widefat.media .check-column{padding-top:8px}.widefat thead th.check-column,.widefat tbody th.check-column,.widefat tfoot th.check-column{padding:11px 3px 0 0}.widefat thead th.check-column{padding-top:10px}.plugins tbody th.check-column,.plugins tbody{padding:8px 2px 0 0}.plugins tbody th.check-column input[type=checkbox]{margin-top:4px}#update-plugins-table tbody td p{margin-top:0}#update-plugins-table tbody td p strong{font-size:14px}.plugins thead th.check-column,.plugins tfoot th.check-column,.plugins .inactive th.check-column{padding-right:6px}.upgrade .plugins td,.upgrade .plugins th{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.upgrade .plugins tr:last-of-type td,.upgrade .plugins tr:last-of-type th{-webkit-box-shadow:none;box-shadow:none}#update-plugins-table thead th.check-column,#update-plugins-table tfoot th.check-column{padding-top:11px}.update-php div.updated,.update-php div.error{margin-right:0}.no-js .widefat thead .check-column input,.no-js .widefat tfoot .check-column input{display:none}.widefat .num,.column-comments,.column-links,.column-posts{text-align:center}.widefat th#comments{vertical-align:middle}.wrap{margin:10px 2px 0 20px}div.updated,div.error{padding:0 .6em;margin:5px 15px 2px}div.updated p,div.error p{margin:.5em 0;padding:2px}.wrap div.updated,.wrap div.error,.media-upload-form div.error{margin:5px 0 15px}div.updated,.login .message,.press-this #message{border:0;padding:1px 12px}div.error,.login #login_error{border:0}div.error{padding:1px 12px}.wrap h2,.subtitle{font-weight:400;margin:0}.wrap h2{font-size:23px;font-weight:400;padding:9px 0 4px 15px;line-height:29px}.subtitle{font-size:14px;padding-right:25px}.wrap .add-new-h2,.wrap .add-new-h2:active{margin-right:4px;padding:4px 8px;position:relative;top:-3px;text-decoration:none;border:0;border-radius:2px;text-shadow:none;font-weight:600;font-size:13px}.wrap h2.long-header{padding-left:0}html,.wp-dialog{background-color:#fff}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],select{background-color:#fff;color:#333}select[disabled]{color:#7f7f7f}select:focus{border-color:#aaa}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,.widgets-chooser ul,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,div#widgets-right .widget-top:hover{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1)}input[readonly]{background-color:#eee}:-moz-placeholder,.wp-core-ui :-moz-placeholder{color:#a9a9a9}.widget .widget-top,.postbox h3,.stuffbox h3,.control-section .accordion-section-title,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small,.sidebar-name,#nav-menu-header,#nav-menu-footer,.menu-item-handle,.checkbox,.side-info,#your-profile #rich_editing,.widefat thead th,.widefat tfoot th{line-height:1.4em}.quicktags,.search{font-size:12px}.icon32{display:none}.icon16{height:18px;width:18px;padding:6px;margin:-6px -8px 0 0;float:right}.icon16:before{font:400 20px/1 dashicons;speak:none;padding:6px 0;height:34px;width:20px;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.icon16.icon-dashboard:before,#adminmenu .menu-icon-dashboard div.wp-menu-image:before{content:'\f226'}.icon16.icon-post:before,#adminmenu .menu-icon-post div.wp-menu-image:before{content:'\f109'}.icon16.icon-media:before,#adminmenu .menu-icon-media div.wp-menu-image:before{content:'\f104'}.icon16.icon-links:before,#adminmenu .menu-icon-links div.wp-menu-image:before{content:'\f103'}.icon16.icon-page:before,#adminmenu .menu-icon-page div.wp-menu-image:before{content:'\f105'}.icon16.icon-comments:before,#adminmenu .menu-icon-comments div.wp-menu-image:before{content:'\f101';margin-top:1px}.icon16.icon-appearance:before,#adminmenu .menu-icon-appearance div.wp-menu-image:before{content:'\f100'}.icon16.icon-plugins:before,#adminmenu .menu-icon-plugins div.wp-menu-image:before{content:'\f106'}.icon16.icon-users:before,#adminmenu .menu-icon-users div.wp-menu-image:before{content:'\f110'}.icon16.icon-tools:before,#adminmenu .menu-icon-tools div.wp-menu-image:before{content:'\f107'}.icon16.icon-settings:before,#adminmenu .menu-icon-settings div.wp-menu-image:before{content:'\f108'}.icon16.icon-site:before,#adminmenu .menu-icon-site div.wp-menu-image:before{content:'\f112'}.icon16.icon-generic:before,#adminmenu .menu-icon-generic div.wp-menu-image:before{content:'\f111'}.icon16.icon-dashboard,.menu-icon-dashboard div.wp-menu-image,.icon16.icon-post,.menu-icon-post div.wp-menu-image,.icon16.icon-media,.menu-icon-media div.wp-menu-image,.icon16.icon-links,.menu-icon-links div.wp-menu-image,.icon16.icon-page,.menu-icon-page div.wp-menu-image,.icon16.icon-comments,.menu-icon-comments div.wp-menu-image,.icon16.icon-appearance,.menu-icon-appearance div.wp-menu-image,.icon16.icon-plugins,.menu-icon-plugins div.wp-menu-image,.icon16.icon-users,.menu-icon-users div.wp-menu-image,.icon16.icon-tools,.menu-icon-tools div.wp-menu-image,.icon16.icon-settings,.menu-icon-settings div.wp-menu-image,.icon16.icon-site,.menu-icon-site div.wp-menu-image,.icon16.icon-generic,.menu-icon-generic div.wp-menu-image{background-image:none!important}.key-labels label{line-height:24px}strong,b{font-weight:600}.pre{white-space:pre-wrap;word-wrap:break-word}.howto{font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}.no-break{white-space:nowrap}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}.wp-admin select{padding:2px;line-height:28px;height:28px;vertical-align:middle}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:right;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:0;text-align:left}table.form-table+p.submit,table.form-table+input+p.submit,table.form-table+input+input+p.submit{border-top:0;padding-top:0}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,#dashboard_recent_comments .delete a:hover,#dashboard_recent_comments .trash a:hover,#dashboard_recent_comments .spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{text-decoration:none;border:0}#minor-publishing-actions input,#major-publishing-actions input,#minor-publishing-actions .preview{text-align:center}textarea.all-options,input.all-options{width:250px}input.large-text,textarea.large-text{width:99%}input.regular-text,#adduser .form-field input{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}#doaction,#doaction2,#post-query-submit{margin:1px 0 0 8px}.tablenav #changeit,.tablenav #delete_all,.tablenav #clear-recent-list{margin-top:1px}.tablenav .actions select{float:right;margin-left:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-right:1em}label,#your-profile label+a{vertical-align:middle}fieldset label,#your-profile label+a{vertical-align:middle}.options-media-php label[for*="_size_"],#misc-publishing-actions label{vertical-align:baseline}#misc-publishing-actions label[for=post_status]:before{content:'\f173';display:inline-block;font:400 20px/1 dashicons;speak:none;right:-1px;padding:0 0 0 5px;position:relative;top:0;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass-strength-result{border-style:solid;border-width:1px;float:right;margin:13px 1px 5px 5px;padding:3px 5px;text-align:center;width:200px;display:none}.indicator-hint{padding-top:8px}p.search-box{float:left;margin:0}.network-admin.themes-php p.search-box{clear:right}.search-box input[name="s"],#search-plugins input[name="s"],.tagsdiv .newtag{float:right;height:28px;margin:0 0 0 4px}input[type=text].ui-autocomplete-loading{background:transparent url(../images/loading.gif) no-repeat left center;visibility:visible}ul#add-to-blog-users{margin:0 14px 0 0}.ui-autocomplete-input.open{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-width:1px;border-style:solid}.ui-autocomplete li{margin-bottom:0;white-space:nowrap;text-align:right}.ui-autocomplete li a{display:block;height:100%;padding:4px 10px}.ui-autocomplete li a.ui-state-focus{cursor:pointer}#major-publishing-actions{padding:10px;clear:both;border-top:1px solid #ddd;background:#f5f5f5}#delete-action{line-height:28px;vertical-align:middle;text-align:right;float:right}#publishing-action{text-align:left;float:left;line-height:23px}#publishing-action .spinner{float:right}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px}.misc-pub-section:first-child{border-top-width:0}.misc-pub-section-last{border-bottom-width:0}#minor-publishing-actions{padding:10px 10px 0;text-align:left}#save-post{float:right}.preview{float:left}#sticky-span{margin-right:18px}.side-info{margin:0;padding:4px;font-size:11px}.side-info h5{padding-bottom:7px;font-size:14px;margin:12px 2px 5px;border-bottom-width:1px;border-bottom-style:solid}.side-info ul{margin:0;padding-right:18px;list-style:square}.approve,.unapproved .unapprove{display:none}.unapproved .approve,.spam .approve,.trash .approve{display:inline}td.action-links,th.action-links{text-align:left}#update-nag,.update-nag{display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:right;margin:25px 2px 0 20px}.plugins .plugin-update{padding:0}.plugin-update .update-message{margin:0 31px 8px 10px;font-weight:600}ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em 0}.update-php .spinner{float:none;margin:-4px 0}#ajax-loading,.ajax-loading,.ajax-feedback,.imgedit-wait-spin,.list-ajax-loading{visibility:hidden}#ajax-response.alignleft{margin-right:2em}#adminmenu a,#sidemenu a,#taglist a,#catlist a{text-decoration:none}#screen-options-wrap,#contextual-help-wrap{margin:0;padding:8px 20px 12px;position:relative}#contextual-help-wrap{overflow:auto;margin-right:0!important}#screen-meta .screen-reader-text{visibility:hidden}#screen-meta-links{margin:0 0 0 20px}#screen-meta-links a{padding:3px 16px 3px 6px}#screen-meta-links a:focus{outline:0}#screen-meta{display:none;margin:0 0 -1px 20px;position:relative}#screen-options-link-wrap,#contextual-help-link-wrap{float:left;height:28px;margin:0 6px 0 0}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links a.show-settings{display:block;font-size:13px;height:22px;line-height:22px;text-decoration:none;z-index:1}#screen-meta-links a:after{left:0;content:'\f140';font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 5px;bottom:2px;position:relative;vertical-align:bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}#screen-meta-links a.screen-meta-active:after{content:'\f142'}#screen-meta-links a.show-settings:hover{text-decoration:none}.toggle-arrow{background-repeat:no-repeat;background-position:top right;background-color:transparent;height:22px;line-height:22px;display:block}.toggle-arrow-active{background-position:bottom right}#screen-options-wrap h5,#contextual-help-wrap h5{margin:8px 0;font-size:13px}.metabox-prefs label{display:inline-block;padding-left:15px;line-height:30px}.metabox-prefs label input[type=checkbox]{margin-top:-4px;margin-left:6px}.metabox-prefs label input{margin:0 2px 0 5px}.metabox-prefs .columns-prefs label input{margin:0 2px}.metabox-prefs label a{display:none}#contextual-help-wrap{padding:0}#contextual-help-columns{position:relative}#contextual-help-back{position:absolute;top:0;bottom:0;right:150px;left:170px;border-width:0 1px;border-style:solid}#contextual-help-wrap.no-sidebar #contextual-help-back{left:0;border-left-width:0;-webkit-border-bottom-left-radius:2px;border-bottom-left-radius:2px}.contextual-help-tabs{float:right;width:150px;margin:0}.contextual-help-tabs ul{margin:1em 0}.contextual-help-tabs li{margin-bottom:0;list-style-type:none;border-style:solid;border-width:0 2px 0 0;border-color:transparent}.contextual-help-tabs a{display:block;padding:5px 12px 5px 5px;line-height:18px;text-decoration:none;border-style:solid;border-width:1px 0;border-color:transparent}.contextual-help-tabs .active{padding:0;margin:0 0 0 -1px;border-width:0 2px 0 0;border-style:solid}.contextual-help-tabs-wrap{padding:0 20px;overflow:auto}.help-tab-content{display:none;margin:0 0 12px 22px;line-height:1.6em}.help-tab-content.active{display:block}.help-tab-content ul li{list-style-type:disc;margin-right:18px}.contextual-help-sidebar{width:150px;float:left;padding:0 12px 0 8px;overflow:auto}#adminmenuwrap{position:relative;float:right}#adminmenu *{-webkit-user-select:none;-moz-user-select:none;user-select:none}#adminmenu li{margin:0;padding:0;cursor:pointer}#adminmenu a{display:block;line-height:18px;padding:2px 5px}#adminmenu li.menu-top{border:0;min-height:34px;position:relative}#adminmenu .wp-submenu{list-style:none;position:absolute;top:-1000em;right:160px;overflow:visible;word-wrap:break-word}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{padding:7px 0 8px;z-index:9999}.js #adminmenu .sub-open,.js #adminmenu .opensub .wp-submenu,#adminmenu a.menu-top:focus+.wp-submenu,.no-js li.wp-has-submenu:hover .wp-submenu{top:-1px}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{position:relative;z-index:3;top:auto;right:auto;left:auto;bottom:auto;border:0 none;margin-top:0;-webkit-box-shadow:none;box-shadow:none}.folded #adminmenu .wp-submenu.sub-open,.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.folded #adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu a.menu-top:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.no-js.folded #adminmenu .wp-has-submenu:hover .wp-submenu{top:0;right:36px}.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{position:absolute;top:-1000em}#adminmenu .wp-not-current-submenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{min-width:160px;width:auto}#adminmenu .wp-submenu a{font-size:13px;line-height:1.2;margin:0;padding:6px 0}#adminmenu .wp-not-current-submenu li>a,.folded #adminmenu .wp-has-current-submenu li>a{padding-left:16px;padding-right:14px;-moz-transition:all .1s ease-in-out;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#adminmenu .wp-has-current-submenu ul>li>a,.folded #adminmenu li.menu-top .wp-submenu>li>a{padding:6px 12px}#adminmenu a.menu-top,#adminmenu .wp-submenu-head{font-size:14px;font-weight:400;line-height:18px;padding:0}#adminmenu .wp-submenu-head,.folded #adminmenu .wp-menu-name{display:none}.folded #adminmenu .wp-submenu-head{display:block}#adminmenu .wp-submenu li{padding:0;margin:0;overflow:hidden}#adminmenu .wp-menu-image img{padding:9px 0 0;opacity:.6;filter:alpha(opacity=60)}#adminmenu div.wp-menu-name{padding:8px 0}#adminmenu div.wp-menu-image{float:right;width:36px;height:30px;margin:0;text-align:center}#adminmenu div.wp-menu-image.svg{background-repeat:no-repeat;background-position:center;background-size:20px auto}div.wp-menu-image:before{font:400 20px/1 dashicons!important;speak:none;color:#999;padding:8px 0;height:36px;width:20px;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-moz-transition:all .1s ease-in-out;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.folded #adminmenu div.wp-menu-image{width:35px;height:30px;position:absolute;z-index:25}.folded #adminmenu a.menu-top{height:34px}.no-font-face #adminmenu .wp-menu-image{display:none}.no-font-face #adminmenu div.wp-menu-name{padding:8px 12px}.no-font-face.auto-fold #adminmenu .wp-menu-name{margin-right:0}.sticky-menu #adminmenuwrap{position:fixed;z-index:99}.wp-menu-arrow{display:none!important}ul#adminmenu a.wp-has-current-submenu{position:relative}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{left:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-width:8px;top:50%;margin-top:-8px}.folded ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.folded ul#adminmenu a.wp-has-current-submenu:after,.folded ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{left:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-width:8px;top:10px;z-index:10000}.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:18px}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{position:relative}.folded #adminmenu li.menu-top:hover,.folded #adminmenu li.opensub>a.menu-top,.folded #adminmenu li>a.menu-top:focus{z-index:10000}#adminmenu li.menu-top:hover .wp-menu-image img,#adminmenu li.wp-has-current-submenu .wp-menu-image img{opacity:1;filter:alpha(opacity=100)}#adminmenu li.wp-menu-separator{height:3px;padding:0;margin:0 0 6px;border-width:1px 0;border-style:solid;cursor:inherit}#adminmenu div.separator{height:1px;padding:0;border-width:1px 0 0;border-style:solid}#adminmenu .wp-submenu .wp-submenu-head{font-weight:400;font-size:14px;padding:8px 11px 8px 4px;margin:-7px 0 4px}#adminmenu li.current,.folded #adminmenu li.wp-menu-open{border:0 none}#adminmenu .awaiting-mod,#adminmenu span.update-plugins,#sidemenu li a span.update-plugins{display:inline-block;font-size:9px;line-height:17px;font-weight:600;margin:1px 2px 0 0;vertical-align:top;-webkit-border-radius:10px;border-radius:10px;z-index:26}#adminmenu li .awaiting-mod span,#adminmenu li span.update-plugins span,#sidemenu li a span.update-plugins span{display:block;padding:0 6px}#adminmenu li span.count-0,#sidemenu li a .count-0{display:none}#adminmenu #collapse-menu{font-size:13px;line-height:34px;margin-top:10px}.folded #collapse-menu span{display:none}#collapse-button,#collapse-button div{width:15px;height:15px}#collapse-button{float:right;height:15px;margin:10px 11px 10px 8px;width:15px;-webkit-border-radius:10px;border-radius:10px}#wpwrap #collapse-button div{padding:0}#collapse-button div:after{content:'\f148';display:block;line-height:15px;right:-3px;top:-3px;font:400 20px/1 dashicons!important;speak:none;margin:0 auto;padding:0!important;position:relative;text-align:center;width:20px;-moz-transition:all .1s ease-in-out;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.folded #collapse-button div:after,.rtl #collapse-button div:after{-ms-transform:rotate(180deg);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rtl.folded #collapse-button div:after{-ms-transform:none;-webkit-transform:none;transform:none}@media only screen and (max-width:900px){.auto-fold #wpcontent,.auto-fold #wpfooter{margin-right:56px}.auto-fold #adminmenuback,.auto-fold #adminmenuwrap,.auto-fold #adminmenu,.auto-fold #adminmenu li.menu-top{width:36px}.auto-fold #adminmenu .wp-submenu.sub-open,.auto-fold #adminmenu .opensub .wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.auto-fold #adminmenu .wp-has-current-submenu.opensub .wp-submenu,.auto-fold #adminmenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu{top:0;right:36px}.auto-fold #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu{position:absolute;top:-1000em;margin-left:-1px;padding:7px 0 8px;z-index:9999}.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu{min-width:150px;width:auto}.auto-fold #adminmenu .wp-has-current-submenu li>a{padding-left:16px;padding-right:14px}.auto-fold #adminmenu li.menu-top .wp-submenu>li>a{padding-right:12px}.auto-fold #adminmenu .wp-menu-name{display:none}.auto-fold #adminmenu .wp-submenu-head{display:block}.auto-fold #adminmenu div.wp-menu-image{height:30px;width:34px;position:absolute;z-index:25}.auto-fold #adminmenu a.menu-top{height:34px}.auto-fold #adminmenu li.wp-menu-open{border:0 none}.auto-fold #adminmenu .wp-has-current-submenu.menu-top-last{margin-bottom:0}.auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:16px}.auto-fold ul#adminmenu a.wp-has-current-submenu:after,.auto-fold ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}.auto-fold #adminmenu li.menu-top:hover,.auto-fold #adminmenu li.opensub>a.menu-top,.auto-fold #adminmenu li>a.menu-top:focus{z-index:10000}.auto-fold #collapse-menu span{display:none}.auto-fold #collapse-button div{background:0 0}.auto-fold #collapse-button div:after{-ms-transform:rotate(180deg);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rtl.auto-fold #collapse-button div:after{-ms-transform:none;-webkit-transform:none;transform:none}}.post-com-count-wrapper{min-width:22px}.post-com-count{background:0 0;height:1.3em;line-height:1.1em;display:block;text-decoration:none;padding:0 0 6px;cursor:pointer;background-position:center -80px;background-repeat:no-repeat}.post-com-count:after{content:"";display:block;width:0;height:0;margin-right:8px;border-top:5px solid #bbb;border-left:5px solid transparent}.post-com-count span{font-size:11px;font-weight:600;height:1.4em;line-height:1.4em;min-width:.7em;padding:0 6px;display:inline-block;-webkit-border-radius:5px;border-radius:5px}strong .post-com-count{background-position:center -55px}.post-com-count:hover{background-position:center -3px}.column-response .post-com-count{float:right;margin-left:5px;text-align:center}.response-links{float:right}#the-comment-list .attachment-80x60{padding:4px 8px}th .comment-grey-bubble{height:16px;width:16px}th .comment-grey-bubble:before{content:'\f101';font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;right:-4px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}html.wp-toolbar{padding-top:32px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.narrow{width:70%;margin-bottom:40px}.narrow p{line-height:150%}.widefat th,.widefat td{overflow:hidden}.widefat th{font-weight:400}.widefat td p{margin:2px 0 .8em}.widefat .column-comment p{margin:.6em 0}.postbox-container{float:right}#wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody-content #dashboard-widgets.columns-2 .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4{float:left;width:50.5%}#wpbody-content #dashboard-widgets.columns-3 .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4{float:left}#wpbody-content #dashboard-widgets.columns-4 .postbox-container{width:25%}.postbox-container .meta-box-sortables{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.metabox-holder .postbox-container .empty-container{border:3px dashed #bbb;height:250px}.metabox-holder.columns-1 .postbox-container .empty-container,.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}.ie8 #wpbody-content #dashboard-widgets .postbox-container{width:49.5%}.ie8 #wpbody-content #dashboard-widgets #postbox-container-2,.ie8 #wpbody-content #dashboard-widgets #postbox-container-3,.ie8 #wpbody-content #dashboard-widgets #postbox-container-4{float:left;width:50.5%}.ie8 #dashboard-widgets #postbox-container-3 .empty-container,.ie8 #dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}#poststuff{padding-top:10px;min-width:763px}#poststuff #post-body{padding:0}#post-body-content{width:100%;min-width:463px;float:right}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-left:300px}#post-body.columns-2 #postbox-container-1{float:left;margin-left:-300px;width:280px}#post-body.columns-2 #side-sortables{min-height:250px}#dashboard-widgets .postbox-container{width:25%}#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container{border:0!important}#dashboard-widgets-wrap{overflow:hidden}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}#wpbody-content .metabox-holder .postbox-container .empty-container{border:0 none;height:0;min-height:0}}@media only screen and (min-width:800px) and (max-width:1499px){#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:left;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}#wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container{border:0 none;height:0;min-height:0}.index-php .screen-layout,.index-php .columns-prefs{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}}@media only screen and (min-width:1500px) and (max-width:1800px){#wpbody-content #dashboard-widgets .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:left}#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}}@media only screen and (max-width:850px){#poststuff{min-width:0}#wpbody-content #poststuff #post-body{margin:0}#wpbody-content #post-body.columns-2 #postbox-container-1{margin-left:0;width:100%}#poststuff #postbox-container-1 .empty-container,#poststuff #postbox-container-1 #side-sortables:empty{border:0 none;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0}.screen-layout,.columns-prefs{display:none}}.js .postbox .hndle{cursor:move}.hndle a{font-size:11px;font-weight:400}.postbox .handlediv{float:left;width:27px;height:30px}.js .postbox .handlediv{cursor:pointer}.sortable-placeholder{border-width:1px;border-style:dashed;margin-bottom:20px}.postbox,.stuffbox{margin-bottom:20px;padding:0;line-height:1}.postbox h3,.stuffbox h3{margin-top:1px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.js .widget .widget-top,.js .postbox h3{cursor:move}.postbox .inside,.stuffbox .inside{padding:0 12px 12px;line-height:1.4em;font-size:13px}.postbox .inside{margin:11px 0;position:relative}#dashboard-widgets .postbox .inside{margin-bottom:0}.postbox .inside>p:last-child,.rss-widget ul li:last-child{margin-bottom:1px!important}.postbox.closed h3{border:0;-webkit-box-shadow:none;box-shadow:none}.postbox table.form-table{margin-bottom:0}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 5px}#dashboard-widgets-wrap{margin:0 -8px}#wpbody-content .metabox-holder{padding-top:10px}#dashboard-widgets .meta-box-sortables{margin:0 8px;min-height:100px}#the-comment-list td.comment p.comment-author{margin-top:0;margin-right:0}#the-comment-list p.comment-author img{float:right;margin-left:8px}#the-comment-list p.comment-author strong a{border:0}#the-comment-list td{vertical-align:top}#the-comment-list td.comment{word-wrap:break-word}.welcome-panel{position:relative;overflow:auto;margin:16px 0;padding:23px 10px 0;font-size:13px;line-height:2.1em}.welcome-panel h3{margin:0;font-size:21px;font-weight:400;line-height:1.2}.welcome-panel h4{margin:1.33em 0 0;font-size:16px}.welcome-panel li{font-size:14px}.welcome-panel .about-description{font-size:16px;margin:0}.welcome-panel .welcome-panel-close{position:absolute;top:5px;left:10px;padding:20px 3px 0 15px;font-size:13px;text-decoration:none;line-height:1}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before{content:'\f153';display:block!important;font:400 16px/1 dashicons;speak:none;height:20px;margin:2px 0;text-align:center;width:20px;-webkit-font-smoothing:antialiased!important}#welcome-panel.welcome-panel .welcome-panel-close::before{position:absolute;right:-18px;margin-top:-2px;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.wp-core-ui .welcome-panel .button.button-hero{margin:15px 0 3px}.welcome-panel-content{margin-right:13px;max-width:1500px}.welcome-panel .welcome-panel-column-container{clear:both;overflow:hidden;position:relative}.welcome-panel .welcome-panel-column{width:32%;min-width:200px;float:right}.ie8 .welcome-panel .welcome-panel-column{min-width:230px}.welcome-panel .welcome-panel-column:first-child{width:36%}.welcome-panel-column p.hide-if-no-customize{margin-top:10px}.welcome-panel-column p{margin-top:7px}.welcome-panel .welcome-icon{display:block;padding:0 0 8px;background:transparent!important}.welcome-panel .welcome-icon:before{font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 10px;top:-1px;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;vertical-align:top}.welcome-panel .welcome-write-blog:before,.welcome-panel .welcome-edit-page:before{content:'\f119';top:-3px}.welcome-panel .welcome-add-page:before{content:'\f132'}.welcome-panel .welcome-view-site:before{content:'\f115';top:-2px}.welcome-panel .welcome-widgets-menus:before{content:'\f116';top:-2px}.welcome-panel .welcome-comments:before{content:'\f117';top:-1px}.welcome-panel .welcome-learn-more:before{content:'\f118';top:-1px}.welcome-panel .welcome-widgets-menus{line-height:16px}.welcome-panel .welcome-panel-column ul{margin:.8em 0 1em 1em}.welcome-panel .welcome-panel-column li{line-height:16px;list-style-type:none}#dashboard_primary .inside{margin:0;padding:0}#dashboard_primary .widget-loading,#dashboard_primary .dashboard-widget-control-form{padding:12px 12px 0}body #dashboard-widgets .postbox form .submit{margin:0}.dashboard-widget-control-form{overflow:hidden}.dashboard-widget-control-form p{margin-top:0}.rssSummary{color:#777;margin-top:4px}#dashboard_primary .rss-widget{border-bottom:1px solid #eee;font-size:13px;padding:8px 12px 10px}#dashboard_primary .rss-widget:last-child{border-bottom:0;padding-bottom:8px}#dashboard_primary .rss-widget a{font-weight:400}#dashboard_primary .rss-widget span,#dashboard_primary .rss-widget span.rss-date{color:#777}#dashboard_primary .rss-widget span.rss-date{margin-right:12px}#dashboard_primary .rss-widget ul li{margin-bottom:8px}#dashboard_right_now ul{margin:0;overflow:hidden}#dashboard_right_now li{width:50%;float:right;margin-bottom:10px}#dashboard_right_now .inside{overflow:hidden;padding:0}#dashboard_right_now .main{padding:0 12px 11px}#dashboard_right_now .main p{margin:0}.mu-storage{overflow:hidden}#dashboard-widgets h4.mu-storage{margin-bottom:10px}#dashboard_right_now li a:before,#dashboard_right_now li span:before{color:#888}#dashboard_right_now .sub{color:#777;background:#f5f5f5;border-top:1px solid #eee;padding:10px 12px 6px}#dashboard_right_now .sub h4{color:#555}#dashboard_right_now .sub p{margin:0 0 1em}#dashboard_right_now .warning a:before,#dashboard_right_now .warning span:before{color:#d54e21}#dashboard_right_now li a:before,#dashboard_right_now li span:before{content:'\f159';font:400 20px/1 dashicons;speak:none;display:block;float:right;margin:0 0 0 5px;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_right_now .page-count a:before,#dashboard_right_now .page-count span:before{content:'\f105'}#dashboard_right_now .post-count a:before,#dashboard_right_now .post-count span:before{content:'\f109'}#dashboard_right_now .comment-count a:before{content:'\f101'}#dashboard_right_now .comment-mod-count a:before{content:'\f125'}#dashboard_right_now .storage-count a:before{content:'\f104'}#dashboard_right_now .storage-count.warning a:before{content:'\f153'}#dashboard_quick_press .inside{margin:0;padding:0}#dashboard_quick_press div.updated{margin-bottom:10px;border:1px solid #eee;border-width:1px 0 1px 1px}#dashboard_quick_press form{overflow:hidden;margin:12px}#dashboard_quick_press .drafts,#dashboard_quick_press .easy-blogging{padding:10px 0 0}input#save-post{float:right}form.initial-form.quickpress-open label.prompt{font-style:normal}form.initial-form.quickpress-open input#title{height:auto}#dashboard_quick_press input,#dashboard_quick_press textarea{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;margin:0}#dashboard_quick_press textarea{resize:vertical}#dashboard-widgets .postbox form .submit{margin:-39px 0;float:left}#description-wrap{margin-top:12px}#title-wrap #title-prompt-text,.textarea-wrap #content-prompt-text{color:#777}#title-wrap #title-prompt-text{font-size:1.1em;padding:7px 8px}.input-text-wrap,.textarea-wrap{position:relative}.input-text-wrap .prompt,.textarea-wrap .prompt{position:absolute}.textarea-wrap #content-prompt-text{font-size:1.1em;padding:7px 8px}.textarea-wrap textarea#content{margin:0 0 8px;padding:6px 7px}#quick-press textarea#content{min-height:90px;max-height:1300px;resize:none}.js #dashboard_quick_press .drafts{border-top:1px solid #eee}#dashboard_quick_press .drafts abbr{border:0}#dashboard_quick_press .drafts h4{margin:0 12px 8px;font-weight:400}#dashboard_quick_press .drafts .view-all{float:left;margin:0 0 0 12px}#dashboard_primary a.rsswidget{font-weight:400}#dashboard_quick_press .drafts ul{margin:0 12px}#dashboard_quick_press .drafts li{margin-bottom:1em}#dashboard_quick_press .drafts li time{color:#777}#dashboard_quick_press .drafts p{margin:0;word-wrap:break-word}#dashboard_quick_press .draft-title{overflow:hidden}#dashboard_quick_press .draft-title a,#dashboard_quick_press .draft-title time{float:right;margin:0 0 0 5px}#dashboard-widgets #dashboard_activity h4{margin:0 12px 8px 0;font-weight:400}#dashboard-widgets #dashboard_activity h4.comment-meta{margin:0}#dashboard_activity h4.comment-meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-bottom:4px}#dashboard_activity ul{padding:0 12px}#dashboard_activity .comment-meta span.approve:before{content:'\f227';font:20px/.5 dashicons;margin-right:12px;vertical-align:middle;position:relative;top:-1px;margin-left:2px}#dashboard_activity .inside{padding:0;margin:0}#dashboard_activity .no-activity{overflow:hidden;padding:0 12px 12px;text-align:center}#dashboard_activity .no-activity p{color:#999;font-size:16px}#dashboard_activity .no-activity .smiley{margin-top:0}#dashboard_activity .no-activity .smiley:before{content:'\f328';font:400 120px/1 dashicons;speak:none;display:block;margin:0 0 0 5px;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_activity .subsubsub{float:none;border-top:1px solid #eee;margin-top:0;padding:8px 12px 4px}#future-posts .show-more,#published-posts .show-more{float:left;margin-left:12px}#future-posts ul,#published-posts ul{clear:both;margin-bottom:0}#future-posts li,#published-posts li{overflow:hidden;margin-bottom:8px}#future-posts ul span,#published-posts ul span{color:#777;float:right;margin-left:8px;min-width:150px}.activity-block{border-bottom:1px solid #eee;overflow:hidden;padding:8px 0 4px}.activity-block:last-child{border-bottom:0}.activity-block .subsubsub li{color:#ddd}#activity-widget #the-comment-list tr.undo,#activity-widget #the-comment-list div.undo{background:0 0;padding:6px 0}#activity-widget #the-comment-list .alternate,#activity-widget #the-comment-list .alt{background:0 0}#activity-widget #the-comment-list .comment{background:#fafafa;padding:12px;position:relative}#activity-widget #the-comment-list img{position:absolute;right:13px;top:13px}#activity-widget #the-comment-list .dashboard-comment-wrap{padding-right:63px}#activity-widget #the-comment-list .dashboard-comment-wrap blockquote{margin:1em 0}#activity-widget #the-comment-list .comment-item h4{font-size:13px;color:#999}#activity-widget #the-comment-list .comment-item p.row-actions{margin:4px 0 0}#activity-widget #the-comment-list .comment-item:first-child{border-top:1px solid #eee}#activity-widget #the-comment-list .unapproved:before{content:"";display:block;position:absolute;right:0;top:0;bottom:0;background:#d54e21;width:4px}#activity-widget #the-comment-list .spam-undo-inside .avatar,#activity-widget #the-comment-list .trash-undo-inside .avatar{margin-left:20px;position:relative;top:0}#dashboard-widgets #dashboard_browser_nag.postbox .inside{margin:10px}@media screen and (max-width:870px){.welcome-panel .welcome-panel-column,.welcome-panel .welcome-panel-column:first-child{display:block;float:none;width:100%}.welcome-panel .welcome-panel-column li{display:inline-block;margin-left:13px}.welcome-panel .welcome-panel-column ul{margin:.4em 0 0}}table.fixed{table-layout:fixed}.fixed .column-rating,.fixed .column-visible{width:8%}.fixed .column-posts,.fixed .column-date,.fixed .column-parent,.fixed .column-links,.fixed .column-author,.fixed .column-format{width:10%}.fixed .column-comment .comment-author{display:none}.fixed .column-response,.fixed .column-categories,.fixed .column-tags,.fixed .column-rel,.fixed .column-role{width:15%}.fixed .column-slug{width:25%}.fixed .column-locations{width:35%}.fixed .column-comments{width:4em;padding:8px 0;text-align:right}.fixed .column-comments .vers{padding-right:3px}.fixed .column-comments a{float:right}.fixed .column-icon{width:80px}#comments-form .fixed .column-author{width:20%}#commentsdiv.postbox .inside{margin:0;padding:0}#commentsdiv .inside .row-actions{line-height:18px}#commentsdiv .inside .column-author{width:25%}#commentsdiv .column-comment p{margin:.6em 0;padding:0}#commentsdiv #replyrow td{padding:0}#commentsdiv p{padding:8px 10px;margin:0}#commentsdiv .comments-box{border:0 none}#commentsdiv .comments-box thead th{background:transparent;padding:0 7px 4px;font-style:italic}#commentsdiv .comments-box tr:last-child td{border-bottom:0 none}#commentsdiv .spinner{padding-right:5px}.sorting-indicator{display:none;width:10px;height:4px;margin-top:8px;margin-right:7px}.sorting-indicator:before{background:0 0;content:'\f142';font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0;top:-4px;right:-8px;color:#444;line-height:10px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.column-comments .sorting-indicator:before{top:0;right:-10px}th.sorted.asc .sorting-indicator:before,th.desc:hover span.sorting-indicator:before{content:'\f142'}th.sorted.desc .sorting-indicator:before,th.asc:hover span.sorting-indicator:before{content:'\f140'}tr.wp-locked .locked-indicator{background:url(../images/lock.png) no-repeat;margin:-2px 6px 0 0;height:20px;width:16px}tr.wp-locked .check-column label,tr.wp-locked .check-column input[type=checkbox],tr.wp-locked .row-actions .inline,tr.wp-locked .row-actions .trash{display:none}tr .locked-info{height:0;opacity:0}tr.wp-locked .locked-info{margin-top:8px;height:auto;opacity:1}.locked-text{vertical-align:top}tr.locked-info,tr.wp-locked .locked-info{-webkit-transition:height 1s,opacity 500ms;-moz-transition:height 1s,opacity 500ms;-ms-transition:height 1s,opacity 500ms;-o-transition:height 1s,opacity 500ms;transition:height 1s,opacity 500ms}.fixed .column-comments .sorting-indicator{margin-top:3px}#menu-locations-wrap .widefat{width:60%}.widefat th.sortable,.widefat th.sorted{padding:0}th.sortable a,th.sorted a{display:block;overflow:hidden;padding:7px 10px 8px 7px}.fixed .column-comments.sortable a,.fixed .column-comments.sorted a{padding:8px 0}th.sortable a span,th.sorted a span{float:right;cursor:pointer}th.sorted.asc .sorting-indicator,th.desc:hover span.sorting-indicator{display:block;background-position:0 0}th.sorted.desc .sorting-indicator,th.asc:hover span.sorting-indicator{display:block;background-position:-7px 0}.tablenav-pages a{font-weight:600;margin-left:1px;padding:0 2px}.tablenav-pages .current-page{padding-top:0;text-align:center}.tablenav-pages .next-page{margin-right:2px}.tablenav a.button-secondary{display:block;margin:3px 0 0 8px}.tablenav{clear:both;height:30px;margin:6px 0 4px;vertical-align:middle}.tablenav.themes{max-width:98%}.tablenav .tablenav-pages{float:left;display:block;cursor:default;height:30px;line-height:30px;font-size:12px}.tablenav .no-pages,.tablenav .one-page .pagination-links{display:none}.tablenav .tablenav-pages a,.tablenav-pages span.current{text-decoration:none;padding:3px 6px}.tablenav .tablenav-pages a{padding:0 10px 3px;font-size:16px;font-weight:400}.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:active{cursor:default}.tablenav .displaying-num{margin-left:2px;font-size:12px;font-style:italic}.tablenav .actions{overflow:hidden;padding:2px 0 0 8px}.tablenav .delete{margin-left:20px}.view-switch{float:left;margin:5px 8px 0 16px}.view-switch img{display:none}.view-switch a{text-decoration:none}.view-switch>a{display:inline-block;width:18px;height:18px}.view-switch>a:before{content:'\f163';display:inline-block;float:right;font:400 20px/1 dashicons;speak:none;vertical-align:middle;margin-right:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.view-switch>a+a:before{margin-right:5px;content:'\f164'}.filter{float:right;margin:-5px 10px 0 0}.filter .subsubsub{margin-right:-10px;margin-top:13px}.screen-per-page{width:4em}#posts-filter fieldset{float:right;margin:0 0 1em 1.5ex;padding:0}#posts-filter fieldset legend{padding:0 1px .2em 0}#wpbody-content .inline-edit-row fieldset{font-size:12px;float:right;margin:0;padding:0;width:100%}tr.inline-edit-row td,#wpbody-content .inline-edit-row fieldset .inline-edit-col{padding:0 .5em}#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col{border-width:0 1px 0 0;border-style:none none none solid}#wpbody-content .quick-edit-row-post .inline-edit-col-left{width:40%}#wpbody-content .quick-edit-row-post .inline-edit-col-right{width:39%}#wpbody-content .inline-edit-row-post .inline-edit-col-center{width:20%}#wpbody-content .quick-edit-row-page .inline-edit-col-left{width:50%}#wpbody-content .quick-edit-row-page .inline-edit-col-right,#wpbody-content .bulk-edit-row-post .inline-edit-col-right{width:49%}#wpbody-content .bulk-edit-row .inline-edit-col-left{width:30%}#wpbody-content .bulk-edit-row-page .inline-edit-col-right{width:69%}#wpbody-content .bulk-edit-row .inline-edit-col-bottom{float:left;width:69%}#wpbody-content .inline-edit-row-page .inline-edit-col-right{margin-top:27px}.inline-edit-row fieldset .inline-edit-group{clear:both}.inline-edit-row fieldset .inline-edit-group:after{content:".";display:block;height:0;clear:both;visibility:hidden}.inline-edit-row p.submit{clear:both;padding:.5em;margin:.5em 0 0}.inline-edit-row span.error{line-height:22px;margin:0 15px;padding:3px 5px}.inline-edit-row h4{margin:.2em 0;padding:0;line-height:23px}.inline-edit-row fieldset span.title,.inline-edit-row fieldset span.checkbox-title{margin:0;padding:0;line-height:27px}.inline-edit-row fieldset label,.inline-edit-row fieldset span.inline-edit-categories-label{display:block;margin:.2em 0}.inline-edit-row fieldset label.inline-edit-tags{margin-top:0}.inline-edit-row fieldset label.inline-edit-tags span.title{margin:.2em 0;width:auto}.inline-edit-row fieldset label span.title{display:block;float:right;width:5em}.inline-edit-row fieldset label span.input-text-wrap{display:block;margin-right:5em}.quick-edit-row-post fieldset.inline-edit-col-right label span.title{width:auto;padding-left:.5em}.inline-edit-row .input-text-wrap input[type=text]{width:100%}.inline-edit-row fieldset label input[type=checkbox]{vertical-align:text-bottom}.inline-edit-row fieldset label textarea{width:100%;height:4em}#wpbody-content .bulk-edit-row fieldset .inline-edit-group label{max-width:50%}#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child{margin-left:.5em}.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input{width:6em}.inline-edit-save .spinner{padding:4px 10px 0;vertical-align:top;float:left}.inline-edit-row h4{text-transform:uppercase}.inline-edit-row fieldset span.title,.inline-edit-row fieldset span.checkbox-title{font-style:italic;line-height:1.8em}.inline-edit-row fieldset input[type=text],.inline-edit-row fieldset textarea{border-style:solid;border-width:1px}.inline-edit-row fieldset .inline-edit-date{float:right}.inline-edit-row fieldset input[name=jj],.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=mn]{font-size:12px;width:2.1em}.inline-edit-row fieldset input[name=aa]{font-size:12px;width:3.5em}.inline-edit-row fieldset label input.inline-edit-password-input{width:8em}ul.cat-checklist{height:12em;border-style:solid;border-width:1px;overflow-y:scroll;padding:0 5px;margin:0}#bulk-titles{display:block;height:12em;border-style:solid;border-width:1px;overflow-y:scroll;padding:0 5px;margin:0 0 5px}.inline-edit-row fieldset ul.cat-checklist li,.inline-edit-row fieldset ul.cat-checklist input{margin:0}.inline-edit-row fieldset ul.cat-checklist label,.inline-edit-row #bulk-titles div{font-style:normal;font-size:11px}.inline-edit-row fieldset label input.inline-edit-menu-order-input{width:3em}.inline-edit-row fieldset label input.inline-edit-slug-input{width:75%}.quick-edit-row-post fieldset label.inline-edit-status{float:right}#bulk-titles{line-height:140%}#bulk-titles div{margin:.2em .3em}#bulk-titles div a{cursor:pointer;display:block;float:right;height:18px;margin:0 -2px 0 3px;overflow:hidden;position:relative;width:20px}#bulk-titles div a:before{position:relative;top:-3px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments a,#show-comments .spinner{float:right}#lost-connection-notice .spinner{display:block;float:right;margin:0 0 0 5px}#titlediv{position:relative;margin-bottom:10px}#titlediv label{cursor:text}#titlediv div.inside{margin:0}#poststuff #titlewrap{border:0;padding:0}#titlediv #title{padding:3px 8px;font-size:1.7em;line-height:100%;height:1.7em;width:100%;outline:0;margin:0}#titlediv #title-prompt-text,#wp-fullscreen-title-prompt-text{color:#777;position:absolute;font-size:1.7em;padding:11px 10px}#wp-fullscreen-save .fs-saved{color:#999;float:left;margin-top:4px}#wp-fullscreen-title-prompt-text{padding:11px}#poststuff .inside-submitbox,#side-sortables .inside-submitbox{margin:0 3px;font-size:11px}input#link_description,input#link_url{width:98%}#pending{background:0 none;border:0 none;padding:0;font-size:11px;margin-top:-1px}#edit-slug-box{line-height:24px;min-height:25px;margin-top:5px;padding:0 10px}#edit-slug-box .cancel{margin-left:10px;font-size:11px}#editable-post-name-full{display:none}#editable-post-name input{font-size:13px;height:22px;margin:0;width:16em}.postarea h3 label{float:right}.submitbox .submit{text-align:right;padding:12px 10px 10px;font-size:11px}.submitbox .submitdelete{text-decoration:none;padding:1px 2px}.submitbox .submit a:hover{text-decoration:underline}.submitbox .submit input{margin-bottom:8px;margin-left:4px;padding:6px}.inside-submitbox #post_status{margin:2px -2px 2px 0}#post-status-select{margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{position:relative;min-width:255px}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:transparent none;border:0 none;float:left;padding:0 12px;margin:0}.category-add input[type=text],.category-add select{width:100%;max-width:260px;vertical-align:baseline}#side-sortables .category-add input[type=text],#side-sortables .category-add select{margin:0 0 1em}.press-this #side-sortables .category-tabs li,ul.category-tabs li,#side-sortables .add-menu-item-tabs li,.wp-tab-bar li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}.category-tabs a,#side-sortables .add-menu-item-tabs a,.wp-tab-bar a{text-decoration:none}.category-tabs{margin:8px 0 5px}#category-adder h4{margin:10px 0}#side-sortables .add-menu-item-tabs,.wp-tab-bar{margin-bottom:3px}#normal-sortables .postbox #replyrow .submit{float:none;margin:0;padding:0 7px 5px}#side-sortables .submitbox .submit input,#side-sortables .submitbox .submit .preview,#side-sortables .submitbox .submit a.preview:hover{border:0 none}#side-sortables .inside-submitbox .insidebox,.stuffbox .insidebox{margin:11px 0}ul.category-tabs,ul.add-menu-item-tabs,ul.wp-tab-bar{margin-top:12px}ul.category-tabs li{border-style:solid;border-width:1px;position:relative}ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-style:solid solid none;border-width:1px 1px 0}ul.add-menu-item-tabs li.tabs{padding-bottom:3px;position:relative}#post-body .add-menu-item-tabs li.tabs{border-style:solid none solid solid;border-width:1px 1px 1px 0;margin-left:-1px}ul.category-tabs li,ul.add-menu-item-tabs li,ul.wp-tab-bar li{padding:3px 5px 5px}#postimagediv .inside img{max-width:100%;height:auto}form#tags-filter{position:relative}td.post-title strong,td.plugin-title strong{display:block;margin-bottom:.2em;font-size:14px}td.post-title p,td.plugin-title p{margin:6px 0}.wp-hidden-children .wp-hidden-child,.ui-tabs-hide{display:none}.commentlist .avatar{vertical-align:text-top}#post-body .tagsdiv #newtag{margin-left:5px;width:16em}#side-sortables input#post_password{width:94%}#side-sortables .tagsdiv #newtag{width:68%}#post-status-info{width:100%}#post-status-info td{font-size:12px}.autosave-info{padding:2px 15px;text-align:left}#editorcontent #post-status-info{border:0}#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize.gif) no-repeat scroll left bottom;width:12px;height:12px;cursor:sw-resize}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize-rtl.gif) no-repeat scroll left bottom}#post-body .wp_themeSkin .mceStatusbar a.mceResize{bottom:3px;position:absolute;left:3px}#post-body .postarea .wp_themeSkin .mceStatusbar a.mceResize{bottom:-20px}#content-resize-handle{position:absolute;left:3px;bottom:-20px}.press-this #content-resize-handle{bottom:2px}.tmce-active #content-resize-handle{display:none}#wp-word-count{display:block;padding:2px 10px}#timestampdiv select{height:21px;line-height:14px;padding:0;vertical-align:top;font-size:12px}#aa,#jj,#hh,#mn{padding:1px;font-size:12px}#jj,#hh,#mn{width:2em}#aa{width:3.4em}.curtime #timestamp{padding:2px 0 1px;display:inline!important;height:auto!important}#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before{font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 2px;top:0;right:-1px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}#post-body #visibility:before{content:'\f177'}.curtime #timestamp:before{content:'\f145';top:-1px}#post-body .misc-pub-revisions:before{content:'\f321'}#timestampdiv{padding-top:5px;line-height:23px}#timestampdiv p{margin:8px 0 6px}#timestampdiv input{border-width:1px;border-style:solid}.notification-dialog{position:fixed;top:30%;right:50%;width:450px;margin-right:-225px;background:#fff;line-height:1.5;z-index:1000005}.notification-dialog-background{position:fixed;top:0;right:0;left:0;bottom:0;background:#000;opacity:.5;filter:alpha(opacity=50);z-index:1000000}#post-lock-dialog .post-locked-message,#post-lock-dialog .post-taken-over{margin:25px}#post-lock-dialog .post-locked-message a.button{margin-left:10px}#post-lock-dialog .post-locked-avatar{float:right;margin:0 0 20px 20px}#post-lock-dialog .wp-tab-first{outline:0}#post-lock-dialog .locked-saving img{float:right;margin-left:3px}#post-lock-dialog.saving .locked-saving,#post-lock-dialog.saved .locked-saved{display:inline}#postcustomstuff thead th{padding:5px 8px 8px}#postcustom #postcustomstuff .submit{border:0 none;float:none;padding:0 8px 8px}#side-sortables #postcustom #postcustomstuff .submit{margin:0;padding:0}#side-sortables #postcustom #postcustomstuff #the-list textarea{height:85px}#side-sortables #postcustom #postcustomstuff td.left input,#side-sortables #postcustom #postcustomstuff td.left select,#side-sortables #postcustomstuff #newmetaleft a{margin:3px 3px 0}#postcustomstuff table{margin:0;width:100%;border-width:1px;border-style:solid;border-spacing:0}#postcustomstuff tr{vertical-align:top}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{width:96%;margin:8px}#side-sortables #postcustomstuff table input,#side-sortables #postcustomstuff table select,#side-sortables #postcustomstuff table textarea{margin:3px}#postcustomstuff th.left,#postcustomstuff td.left{width:38%}#postcustomstuff .submit input{margin:0;width:auto}#postcustomstuff #newmetaleft a{display:inline-block;margin:0 8px 8px;text-decoration:none}.no-js #postcustomstuff #enternew{display:none}#post-body-content .compat-attachment-fields{margin-bottom:20px}.compat-attachment-fields th{padding-top:5px;padding-left:10px}.revisions-control-frame,.revisions-diff-frame{position:relative}.revisions-controls{padding-top:40px;height:100px;z-index:1}.revisions-controls input[type=checkbox]{position:relative;top:-1px;vertical-align:text-bottom}.revisions.pinned .revisions-controls{position:fixed;top:0;height:82px}.revisions-tickmarks{position:relative;margin:0 auto;height:.7em;top:7px;max-width:70%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.revisions-tickmarks>div{position:absolute;height:100%;border-style:solid;border-width:0 0 0 1px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.revisions-tickmarks>div:first-child{border-width:0}.comparing-two-revisions .revisions-controls{height:140px}.comparing-two-revisions.pinned .revisions-controls{height:124px}.revisions .diff-error{position:absolute;text-align:center;margin:0 auto;width:100%;display:none}.revisions.diff-error .diff-error{display:block}.revisions .loading-indicator{position:fixed;vertical-align:middle;opacity:0;width:100%;top:50%;margin-right:-90px;-webkit-transition:opacity .5s;-moz-transition:opacity .5s;-ms-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s;filter:alpha(opacity=0)}body.folded .revisions .loading-indicator{margin-right:-32px}.revisions .loading-indicator span.spinner{display:block;margin:0 auto;float:none}.revisions.loading .loading-indicator{opacity:1;filter:alpha(opacity=100)}.revisions .diff{-webkit-transition:opacity .5s;-moz-transition:opacity .5s;-ms-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s}.revisions.loading .diff{opacity:.5;filter:alpha(opacity=50)}.revisions.diff-error .diff{visibility:hidden}.revisions-meta{margin-top:20px}.revision-toggle-compare-mode{position:absolute;top:0;left:0}.comparing-two-revisions .revisions-previous,.comparing-two-revisions .revisions-next,.revisions-meta .diff-meta-to strong{display:none}.revisions-controls .author-card .date{color:#777}.revisions-controls .author-card.autosave{color:#d54e21}.revisions-controls .author-card .author-name{font-weight:700}.comparing-two-revisions .diff-meta-to strong{display:block}.revisions.pinned .revisions-buttons{padding:0 11px}.revisions-previous,.revisions-next{position:relative;z-index:1}.revisions-previous{float:right}.revisions-next{float:left}.revisions-controls .wp-slider{max-width:70%;margin:0 auto;top:-3px}.revisions-diff{padding:15px}.revisions-diff h3:first-child{margin-top:0}.post-revisions li img,#revisions-meta-restored img{vertical-align:middle}table.diff tbody tr td:nth-child(2){width:4%}table.diff{width:100%;white-space:pre-wrap}table.diff col.content{width:auto}table.diff col.content.diffsplit{width:48%}table.diff col.diffsplit.middle{width:auto}table.diff col.ltype{width:30px}table.diff tr{background-color:transparent}table.diff td,table.diff th{font-family:Consolas,Monaco,monospace;font-size:14px;line-height:1.618;padding:.5em}table.diff td h1,table.diff td h2,table.diff td h3,table.diff td h4,table.diff td h5,table.diff td h6{margin:0}table.diff .diff-deletedline del,table.diff .diff-addedline ins{text-decoration:none}.diff-meta{padding:5px;clear:both;min-height:32px}.diff-title strong{line-height:32px;min-width:60px;text-align:left;float:right;margin-left:5px}.revisions-controls .author-card .author-info{font-size:12px;line-height:16px}.revisions-controls .author-card .avatar,.revisions-controls .author-card .author-info{float:right;margin-right:6px;margin-left:6px}.revisions-controls .author-card .byline{display:block;font-size:12px}.revisions-controls .author-card .avatar{vertical-align:middle}.diff-meta input.restore-revision{float:left;margin-right:6px;margin-left:6px;margin-top:4px}.diff-meta-from{display:none}.comparing-two-revisions .diff-meta-from{display:block}.revisions-tooltip{position:absolute;bottom:105px;margin-left:0;margin-right:-69px;z-index:0;max-width:350px;min-width:130px;padding:8px 4px;display:none;opacity:0}.revisions-tooltip.flipped{margin-right:0;margin-left:-70px}.revisions.pinned .revisions-tooltip{display:none!important}.comparing-two-revisions .revisions-tooltip{bottom:145px}.revisions-tooltip-arrow{width:70px;height:15px;overflow:hidden;position:absolute;right:0;margin-right:35px;bottom:-15px}.revisions-tooltip.flipped .revisions-tooltip-arrow{margin-right:0;margin-left:35px;right:auto;left:0}.revisions-tooltip-arrow>span{content:"";position:absolute;right:20px;top:-20px;width:25px;height:25px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.revisions-tooltip.flipped .revisions-tooltip-arrow>span{right:auto;left:20px}.ie8 .revisions-tooltip-arrow>span{right:15px;top:-25px;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"}.ie8 .revisions-tooltip.flipped .revisions-tooltip-arrow>span{left:25px}.revisions-tooltip,.revisions-tooltip-arrow>span{border-width:1px;border-style:solid}.revisions-tooltip{display:none}.arrow{width:70px;height:16px;overflow:hidden;position:absolute;right:0;margin-right:-35px;bottom:90px;z-index:10000}.arrow::after{z-index:9999}.arrow.top{top:-16px;bottom:auto}.arrow.left{right:20%}.arrow:after{content:"";position:absolute;right:20px;top:-20px;width:25px;height:25px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.revisions-tooltip,.revisions-tooltip-arrow:after{border-width:1px;border-style:solid}div.revisions-controls>.wp-slider>.ui-slider-handle{margin-right:-10px}.rtl div.revisions-controls>.wp-slider>.ui-slider-handle{margin-left:-10px}.wp-slider.ui-slider{position:relative;border-width:1px;border-style:solid;text-align:right;cursor:pointer}.wp-slider .ui-slider-handle{border-radius:50%;height:18px;margin-top:-3px;outline:0;position:absolute;width:18px;z-index:2}.wp-slider .ui-slider-handle:before{background:0 0;position:absolute;top:0;right:0;content:"\f229";font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-slider .ui-slider-handle.from-handle:before,.wp-slider .ui-slider-handle.to-handle:before{font-size:20px!important;margin:-1px -1px 0 0}.wp-slider .ui-slider-handle.from-handle:before{content:'\f139'}.wp-slider .ui-slider-handle.to-handle:before{content:'\f141'}.rtl .wp-slider .ui-slider-handle.from-handle:before{content:'\f141'}.rtl .wp-slider .ui-slider-handle.to-handle:before{content:'\f139';left:-1px}.wp-slider .ui-slider-range{position:absolute;font-size:.7em;display:block;border:0;background-color:transparent;background-image:none}.wp-slider.ui-slider-horizontal{height:.7em}.wp-slider.ui-slider-horizontal .ui-slider-handle{top:-.25em;margin-right:-.6em}.wp-slider.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.wp-slider.ui-slider-horizontal .ui-slider-range-min{right:0}.wp-slider.ui-slider-horizontal .ui-slider-range-max{left:0}#select-featured-image{padding:4px 0;overflow:hidden}#select-featured-image img{max-width:100%;height:auto;margin-bottom:10px}#select-featured-image a{float:right;clear:both}#select-featured-image .remove{display:none;margin-top:10px}.js #select-featured-image.has-featured-image .remove{display:inline-block}.no-js #select-featured-image .choose{display:none}.post-state-format{overflow:hidden;display:inline-block;vertical-align:middle;height:20px;width:20px;margin-left:5px;margin-top:-4px}.post-state-format:before{display:block;height:20px;width:20px;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#post-formats-select{line-height:2em}#post-formats-select .post-format-icon:before{top:5px}input.post-format{margin-top:1px}label.post-format-icon{margin-right:0;padding:2px 0}.post-format-icon:before{position:relative;display:inline-block;margin-left:7px;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-state-format.post-format-standard:before,.post-format-icon.post-format-standard:before,a.post-state-format.format-standard:before{content:'\f109'}.post-state-format.post-format-image:before,.post-format-icon.post-format-image:before,a.post-state-format.format-image:before{content:'\f128'}.post-state-format.post-format-gallery:before,.post-format-icon.post-format-gallery:before,a.post-state-format.format-gallery:before{content:'\f161'}.post-state-format.post-format-audio:before,.post-format-icon.post-format-audio:before,a.post-state-format.format-audio:before{content:'\f127'}.post-state-format.post-format-video:before,.post-format-icon.post-format-video:before,a.post-state-format.format-video:before{content:'\f126'}.post-state-format.post-format-chat:before,.post-format-icon.post-format-chat:before,a.post-state-format.format-chat:before{content:'\f125'}.post-state-format.post-format-status:before,.post-format-icon.post-format-status:before,a.post-state-format.format-status:before{content:'\f130'}.post-state-format.post-format-aside:before,.post-format-icon.post-format-aside:before,a.post-state-format.format-aside:before{content:'\f123'}.post-state-format.post-format-quote:before,.post-format-icon.post-format-quote:before,a.post-state-format.format-quote:before{content:'\f122'}.post-state-format.post-format-link:before,.post-format-icon.post-format-link:before,a.post-state-format.format-link:before{content:'\f103'}.category-adder{margin-right:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}#post-body ul.add-menu-item-tabs{float:right;width:120px;text-align:left;margin:0 5px 0 -120px;padding:0}ul.add-menu-item-tabs li{padding:3px 8px 3px 5px}#post-body ul.add-menu-item-tabs li.tabs{-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px}.wp-tab-panel,.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel{min-height:42px;max-height:200px;overflow:auto;padding:0 .9em;border-style:solid;border-width:1px}div.tabs-panel-active{display:block}div.tabs-panel-inactive{display:none}#front-page-warning,#front-static-pages ul,ul.export-filters,.inline-editor ul.cat-checklist ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul{margin-right:18px}ul.categorychecklist li{margin:0;padding:0;line-height:22px;word-wrap:break-word}.categorydiv .tabs-panel,.customlinkdiv .tabs-panel,.posttypediv .tabs-panel,.taxonomydiv .tabs-panel{border-width:3px;border-style:solid}.form-wrap p,.form-wrap label{font-size:11px}.form-wrap label{display:block;padding:2px;font-size:12px}.form-field input,.form-field textarea{border-style:solid;border-width:1px;width:95%}p.description,.form-wrap p{margin:2px 0 5px}p.help,p.description,span.description,.form-wrap p{font-size:13px;font-style:italic}.form-wrap .form-field{margin:0 0 10px;padding:8px 0}.form-wrap .form-field #parent{max-width:100%}.col-wrap h3{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}.tagsdiv{margin-top:-8px}#poststuff .taghint{color:#aaa;margin:15px 12px -24px 0}#poststuff .tagsdiv .howto{margin:0 0 6px}.ajaxtag .newtag{position:relative}.tagsdiv .newtag{width:180px}.tagsdiv .the-tags{display:block;height:60px;margin:0 auto;overflow:auto;width:260px}#post-body-content .tagsdiv .the-tags{margin:0 5px}p.popular-tags{border:0;line-height:2em;max-width:1000px;padding:8px 12px 12px;text-align:justify}p.popular-tags a{padding:0 3px}.tagcloud{width:97%;margin:0 0 40px;text-align:justify}.tagcloud h3{margin:2px 0 12px}.ac_results{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;display:none;border-width:1px;border-style:solid}.wp-customizer .ac_results{z-index:500000}.ac_results li{padding:2px 5px;white-space:nowrap;text-align:right}.ac_over{cursor:pointer}.ac_match{text-decoration:underline}table.links-table{width:100%}.links-table th{font-weight:400;text-align:right;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table th,.links-table td{padding:5px 0}.links-table td label{margin-left:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}.media-item .describe{border-collapse:collapse;width:100%;border-top-style:solid;border-top-width:1px;clear:both;cursor:default}.media-item.media-blank .describe{border:0}.media-item .describe th{vertical-align:top;text-align:right;padding:5px 10px 10px;width:140px}.media-item .describe .align th{padding-top:0}.media-item .media-item-info tr{background-color:transparent}.media-item .describe td{padding:0 0 8px 8px;vertical-align:top}.media-item thead.media-item-info td{padding:4px 10px 0}.media-item .media-item-info .A1B1{padding:0 10px 0 0}.media-item td.savesend{padding-bottom:15px}.media-item .thumbnail{max-height:128px;max-width:128px}#wpbody-content #async-upload-wrap a{display:none}.media-upload-form{margin-top:20px}.media-upload-form td label{margin-left:6px;margin-right:2px}.media-upload-form .align .field label{display:inline;padding:0 23px 0 0;margin:0 3px 0 1em;font-weight:600}.media-upload-form tr.image-size label{margin:0 5px 0 0;font-weight:600}.media-upload-form th.label label{font-weight:600;margin:.5em;font-size:13px}.media-upload-form th.label label span{padding:0 5px}abbr.required{border:medium none;text-decoration:none}.media-item .describe input[type=text],.media-item .describe textarea{width:460px}.media-item .describe p.help{margin:0;padding:0 5px 0 0}.media-item .edit-attachment,.describe-toggle-on,.describe-toggle-off{display:block;line-height:36px;float:left}.media-item .describe-toggle-off,.media-item.open .describe-toggle-on{display:none}.media-item.open .describe-toggle-off{display:block}#media-items .media-item{border-bottom-style:solid;border-bottom-width:1px;min-height:36px;position:relative;width:100%}#media-items{width:623px}.media-new-php #media-items{margin:1em 0}#media-items:empty{border:0 none}.media-item .filename{line-height:36px;overflow:hidden}.media-item .error-div{padding-right:10px}.media-item .pinkynail{float:right;margin:2px 0 0 10px;max-width:40px;max-height:32px}.media-item .startopen,.media-item .startclosed{display:none}.media-item .original{position:relative;height:34px}.media-item .progress{float:left;height:22px;margin:7px 0 0;width:200px;line-height:2em;padding:0;overflow:hidden;margin-bottom:2px;border-radius:22px;background:#ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.media-item .bar{z-index:9;width:0;height:100%;margin-top:-22px;border-radius:22px;background-color:#0074a2;-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.3);box-shadow:inset 0 0 2px rgba(0,0,0,.3)}.media-item .progress .percent{z-index:10;position:relative;width:200px;padding:0;color:#fff;text-align:center;line-height:22px;font-weight:400;text-shadow:0 1px 2px rgba(0,0,0,.2)}.upload-php .fixed .column-parent{width:15%}.js .html-uploader #plupload-upload-ui{display:none}.js .html-uploader #html-upload-ui{display:block}.media-upload-form .media-item.error{margin:0;padding:0}.media-upload-form .media-item.error p,.media-item .error-div{line-height:16px;margin:5px 10px;padding:0}.media-item .error-div a.dismiss{display:block;float:left;margin:5px 15px 0 4px}.find-box{width:600px;height:300px;overflow:hidden;padding:33px 0 51px;position:absolute;z-index:1000}.find-box-head{cursor:move;font-weight:600;height:2em;line-height:2em;padding:1px 12px;position:absolute;top:5px;width:100%}.find-box-inside{overflow:auto;padding:6px;height:100%}.find-box-search{overflow:hidden;padding:9px;position:relative}.find-box-search .spinner{float:none;right:125px;position:absolute;top:9px}#find-posts-input{float:right;width:140px;height:24px}#find-posts-search{float:right;margin:1px 3px 0 4px}#find-posts-response{margin:8px 0;padding:0 1px 6px}#find-posts-response table{width:100%}#find-posts-response .found-radio{padding:3px 8px 0 0;width:15px}.find-box-buttons{padding:8px;overflow:hidden}.find-box #resize-se{position:absolute;left:1px;bottom:1px}.ui-find-overlay{position:absolute;top:0;right:0;background-color:#000;opacity:.6;filter:alpha(opacity=60)}ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em 0}#poststuff .inside .the-tagcloud{margin:5px 0 10px;padding:8px;border-width:1px;border-style:solid;line-height:1.8em;word-spacing:3px;-webkit-border-radius:6px;border-radius:6px}.drag-drop #drag-drop-area{border:4px dashed #bbb;height:200px}.drag-drop .drag-drop-inside{margin:70px auto 0;width:250px}.drag-drop-inside p{color:#aaa;font-size:14px;margin:5px 0;display:none}.drag-drop .drag-drop-inside p{text-align:center}.drag-drop-inside p.drag-drop-info{font-size:20px}.drag-drop .drag-drop-inside p,.drag-drop-inside p.drag-drop-buttons{display:block}.drag-drop.drag-over #drag-drop-area{border-color:#83b4d8}#plupload-upload-ui{position:relative}.wp_attachment_details #attachment_caption{height:4em}.describe .image-editor{vertical-align:top}.imgedit-wrap{position:relative}.imgedit-settings p{margin:8px 0}.post-php .imgedit-wrap table{width:100%}.describe .imgedit-wrap table td,.wp_attachment_holder .imgedit-wrap table td{vertical-align:top;padding-top:0}.describe .imgedit-wrap table td.imgedit-settings{padding:0 5px}.wp_attachment_holder .imgedit-wrap table td.imgedit-settings{width:250px}td.imgedit-settings input{margin-top:0;vertical-align:middle}.imgedit-wait{position:absolute;top:0;background:#fff url(../images/spinner.gif) no-repeat scroll 22px 10px;background-size:20px 20px;opacity:.7;filter:alpha(opacity=70);width:100%;height:500px;display:none}.spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;display:none;float:left;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:2px 5px 0}.no-float{float:none}.media-disabled,.imgedit-settings .disabled{color:grey}.wp_attachment_image,.A1B1{overflow:hidden}.wp_attachment_image .button,.A1B1 .button{float:right}.no-js .wp_attachment_image .button{display:none}.wp_attachment_image .spinner,.A1B1 .spinner{float:right;padding:0 0 4px;vertical-align:bottom}.imgedit-menu{margin:0 0 12px;min-width:300px}.imgedit-menu div{float:right;width:32px;background:0 0;margin:0 0 0 8px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;line-height:28px}.imgedit-menu div:before{font:400 20px/1 dashicons;speak:none;vertical-align:middle}.imgedit-crop:before{content:'\f165'}.imgedit-rleft:before{content:'\f166'}.imgedit-rright:before{content:'\f167'}.imgedit-flipv:before{content:'\f168'}.imgedit-fliph:before{content:'\f169'}.imgedit-undo:before{content:'\f171'}.imgedit-redo:before{content:'\f172'}.imgedit-crop-wrap{position:relative}.imgedit-crop{margin:0 0 0 8px}.imgedit-rleft{margin:0 3px}.imgedit-rright{margin:0 3px 0 8px}.imgedit-flipv{margin:0 3px}.imgedit-fliph{margin:0 3px 0 8px}.imgedit-undo{margin:0 3px}.imgedit-redo{margin:0 3px 0 8px}.imgedit-applyto img{margin:0 0 0 8px}.imgedit-group-top{margin:5px 0}.imgedit-applyto .imgedit-label{padding:2px 0 0;display:block}.imgedit-help{display:none;font-style:italic;margin-bottom:8px}a.imgedit-help-toggle{text-decoration:none}.form-table td.imgedit-response{padding:0}.imgedit-submit{margin:8px 0}.imgedit-submit-btn{margin-right:20px}.imgedit-wrap .nowrap{white-space:nowrap}span.imgedit-scale-warn{color:red;font-size:20px;font-style:normal;visibility:hidden;vertical-align:middle}.imgedit-group{margin-bottom:8px;padding:2px 10px}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table th,.form-table td p,.form-wrap label{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:right;padding:20px 0 20px 10px;width:200px;line-height:1.3;font-weight:600}.form-table th.th-full{width:auto;font-weight:400}.form-table input.tog{margin-top:2px;margin-left:2px;float:right}.form-table td p{margin-top:4px;margin-bottom:0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset p,.form-table td fieldset li{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-left:4px;float:none}.commentlist li{padding:1em 1em .2em;margin:0;border-bottom-width:1px;border-bottom-style:solid}.commentlist li li{border-bottom:0;padding:0}.commentlist p{padding:0;margin:0 0 .8em}#replyrow input{border-width:1px;border-style:solid}#replyrow td{padding:2px}#replysubmit{margin:0;padding:0 5px 3px;text-align:center}#replysubmit .spinner{padding:2px 0 0;vertical-align:top;float:left}#replysubmit .button{margin-left:5px}#replysubmit .error{color:red;line-height:21px;text-align:center}#replyrow h5{margin:.2em 0 0;padding:0 5px;line-height:1.4em;font-size:1em}#edithead .inside{float:right;padding:3px 5px 2px 0;margin:0;text-align:center}#edithead .inside input{width:180px}#edithead label{padding:2px 0}#replycontainer{padding:5px}#replycontent{height:120px;-webkit-box-shadow:none;box-shadow:none}.comment-php .wp-editor-area{height:200px}.comment-ays{margin-bottom:0;border-bottom-style:solid;border-bottom-width:1px}.comment-ays .alt{background-color:transparent}.trash-undo-inside,.spam-undo-inside{margin:1px 0 1px 8px;line-height:16px}.spam-undo-inside .avatar,.trash-undo-inside .avatar{height:20px;width:20px;margin-left:8px;vertical-align:middle}.stuffbox .editcomment{clear:none}#comment-status-radio p{margin:3px 0 5px}#comment-status-radio input{margin:2px 0 5px 3px;vertical-align:middle}#comment-status-radio label{padding:5px 0}.commentlist .avatar{vertical-align:text-top}#the-comment-list .unapproved th.check-column input{margin-right:4px}.theme-browser .themes{clear:both;padding:0 0 100px}.themes-php .wrap h2{float:right;margin-bottom:15px}.network-admin.themes-php .wrap h2{margin-bottom:0}.themes-php .wrap h2 .button{margin-right:20px}.themes-php .wrap .theme-count{color:#fff;border-radius:30px;background:#777;font-size:14px;padding:4px 10px;font-weight:600;margin-right:5px;margin-left:20px;position:relative;top:-3px}.themes-php div.updated,.themes-php div.error{margin:0 0 20px;clear:both}.themes-php div.updated a{text-decoration:underline}.theme-browser .theme{cursor:pointer;float:right;margin:0 0 4% 4%;position:relative;width:30.6%;border:1px solid #dedede;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ie8 .theme-browser .theme{width:30%;margin:0 0 4% 3%}.theme-browser .theme:nth-child(3n){margin-left:0}.theme-browser .theme:hover,.theme-browser .theme:focus{cursor:pointer}.theme-browser .theme .theme-name{font-size:15px;font-weight:600;margin:0;padding:15px;-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;background:#fff;background:rgba(255,255,255,.65)}.theme-browser .theme .theme-actions{-ms-filter:"alpha(Opacity=0)";opacity:0;-webkit-transition:opacity .1s ease-in-out;transition:opacity .1s ease-in-out;position:absolute;bottom:0;left:0;height:38px;padding:9px 10px 0;background:rgba(244,244,244,.7);border-right:1px solid rgba(0,0,0,.05)}.theme-browser .theme:hover .theme-actions{-ms-filter:"alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-actions .button-primary{margin-left:3px}.theme-browser .theme .theme-actions .button-secondary{float:none;margin-right:3px}.theme-browser .theme .theme-screenshot{display:block;overflow:hidden;position:relative;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.theme-browser .theme .theme-screenshot:after{content:'';display:block;padding-top:66.66666%}.theme-browser .theme .theme-screenshot img{height:auto;position:absolute;right:0;top:0;width:100%;-webkit-transform:translateZ(0);-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.theme-browser .theme:hover .theme-screenshot{background:#fff}.theme-browser.rendered .theme:hover .theme-screenshot img{opacity:.4}.theme-browser .theme .more-details{-ms-filter:"alpha(Opacity=0)";opacity:0;position:absolute;top:35%;left:25%;right:25%;background:#222;background:rgba(0,0,0,.7);color:#fff;font-size:15px;text-shadow:0 1px 0 rgba(0,0,0,.6);-webkit-font-smoothing:antialiased;font-weight:600;padding:15px 12px;text-align:center;border-radius:3px;-webkit-transition:opacity .1s ease-in-out;transition:opacity .1s ease-in-out}.theme-browser .theme:focus{outline:1px dotted #222}.theme-browser .theme:focus .theme-actions{display:none}.theme-browser .theme:focus:hover .theme-actions{display:block}.theme-browser .theme:focus .more-details{opacity:1}.theme-browser .theme.active:focus .theme-actions{display:block}.theme-browser.rendered .theme:hover .more-details{-ms-filter:"alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-update{background:#d54e21;background:rgba(213,78,33,.95);color:#fff;display:block;font-size:13px;font-weight:400;height:48px;line-height:48px;padding:0 10px;position:absolute;top:0;left:0;right:0;border-bottom:1px solid rgba(0,0,0,.25);overflow:hidden}.theme-browser .theme .theme-update:before{content:'\f463';display:inline-block;font:400 20px/1 dashicons;margin:0 0 0 6px;opacity:.8;position:relative;top:5px;speak:none;-webkit-font-smoothing:antialiased}.theme-browser .theme.active .theme-name{background:#2f2f2f;color:#fff;padding-left:110px;font-weight:300;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.5);box-shadow:inset 0 1px 1px rgba(0,0,0,.5)}.theme-browser .theme.active .theme-name span{font-weight:600}.theme-browser .theme.active .theme-actions{background:rgba(49,49,49,.7);border-right:0;opacity:1}.theme-browser .theme.active .theme-actions .button-primary{margin-left:0}.theme-browser .theme .theme-author{background:#222;color:#eee;display:none;font-size:14px;margin:0 10px;padding:5px 10px;position:absolute;bottom:56px}.theme-browser .theme.display-author .theme-author{display:block}.theme-browser .theme.display-author .theme-author a{color:inherit;text-decoration:none}.theme-browser .theme.add-new-theme{border:0;box-shadow:none}.theme-browser .theme.add-new-theme a{color:#999;text-decoration:none;display:block;position:relative;z-index:1}.theme-browser .theme.add-new-theme:after{display:block;content:'';-ms-filter:"alpha(Opacity=100)";opacity:1;background:transparent;background:rgba(0,0,0,0);position:absolute;top:0;right:0;left:0;bottom:0;padding:10% 0 0;text-shadow:none;border:5px dashed #d5d2ca;border:5px dashed rgba(0,0,0,.1);-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.theme-browser .theme.add-new-theme span:after{background:#e5e5e5;background:rgba(153,153,153,.1);border-radius:50%;display:inline-block;content:'\f132';-webkit-font-smoothing:antialiased;font:400 74px/115px dashicons;width:100px;height:100px;vertical-align:middle;text-align:center;color:#999;position:absolute;top:30%;right:50%;margin-right:-50px;text-indent:-4px;padding:0;text-shadow:none;z-index:4}.rtl .theme-browser .theme.add-new-theme span:after{text-indent:4px}.theme-browser .theme.add-new-theme:hover .theme-screenshot{background:0 0}.theme-browser .theme.add-new-theme:hover span:after{background:#fff;color:#0074a2}.theme-browser .theme.add-new-theme:hover:after{border-color:transparent;color:#fff;background:#0074a2;content:''}.theme-browser .theme.add-new-theme .theme-name{background:0 0;text-align:center;box-shadow:none;font-weight:400;position:relative;top:0;margin-top:-10%;margin-bottom:10%}.theme-browser .theme.add-new-theme:hover .theme-name{color:#fff;z-index:2}.themes-php .theme-search{position:relative;top:-2px;right:20px;font-size:16px;font-weight:300;line-height:1.5;width:280px}.theme-overlay .theme-backdrop{position:absolute;right:-20px;left:0;top:0;bottom:0;background:#f1f1f1;background:rgba(238,238,238,.9);z-index:10}body.theme-overlay-open{overflow:hidden}.theme-overlay .theme-header{position:absolute;top:0;right:0;left:0;height:48px;border-bottom:1px solid #ddd}.theme-overlay .theme-header .close{cursor:pointer;height:48px;width:50px;text-align:center;float:left;border:0;border-right:1px solid #ddd;background-color:transparent}.theme-overlay .theme-header .close:hover:before,.theme-overlay .theme-header .close:focus:before{color:#fff}.theme-overlay .theme-header .close:before{font:400 30px/50px dashicons!important;color:#777;display:inline-block;content:'\f335';font-weight:300}.theme-overlay .theme-header .right,.theme-overlay .theme-header .left{cursor:pointer;color:#777;background-color:transparent;height:48px;width:54px;float:right;text-align:center;border:0;border-left:1px solid #ddd}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .close:focus,.theme-overlay .theme-header .right:focus,.theme-overlay .theme-header .left:focus{background:#0074a2;color:#fff}.theme-overlay .theme-header .left.disabled,.theme-overlay .theme-header .right.disabled,.theme-overlay .theme-header .left.disabled:hover,.theme-overlay .theme-header .right.disabled:hover{color:#ccc;background:inherit;cursor:inherit}.theme-overlay .theme-header .right:before,.theme-overlay .theme-header .left:before{font:400 20px/50px dashicons!important;display:inline;font-weight:300}.theme-overlay .theme-header .left:before{content:'\f340'}.theme-overlay .theme-header .right:before{content:'\f344'}.rtl .theme-overlay .theme-header .left:before{content:'\f345'}.rtl .theme-overlay .theme-header .right:before{content:'\f341'}.theme-overlay .theme-wrap{clear:both;position:fixed;top:9%;right:190px;left:30px;bottom:3%;background:#fff;-webkit-box-shadow:0 1px 20px 5px rgba(0,0,0,.1);box-shadow:0 1px 20px 5px rgba(0,0,0,.1);z-index:20;box-sizing:border-box}.theme-overlay .theme-wrap:after{content:".";display:block;height:0;clear:both;visibility:hidden}body.folded .theme-overlay .theme-wrap{right:70px}.theme-overlay .theme-about{position:absolute;top:49px;bottom:57px;right:0;left:0;overflow:auto;padding:2% 4%}.theme-overlay .theme-about:after{content:".";display:block;height:0;clear:both;visibility:hidden}.theme-overlay .theme-actions{position:absolute;text-align:center;bottom:0;right:0;left:0;padding:10px 25px 5px;background:#f3f3f3;z-index:30;box-sizing:border-box;border-top:1px solid #eee}.ie8 .theme-overlay .theme-actions{border:1px solid #eee}.theme-overlay .theme-actions a{margin-left:5px;margin-bottom:5px}.theme-overlay .theme-actions .delete-theme{color:#a00;position:absolute;left:10px;bottom:5px;text-decoration:none;border-color:transparent;box-shadow:none;background:transparent}.theme-overlay .theme-actions .delete-theme:hover,.theme-overlay .theme-actions .delete-theme:focus{background:#d54e21;color:#fff;border-color:#d54e21}.theme-overlay .theme-actions .active-theme,.theme-overlay.active .theme-actions .inactive-theme{display:none}.theme-overlay .theme-actions .inactive-theme,.theme-overlay.active .theme-actions .active-theme{display:block}.theme-overlay .theme-screenshots{float:right;margin:0 0 0 30px;width:55%;max-width:880px;text-align:center}.theme-overlay .screenshot{border:1px solid #fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden;position:relative;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2);box-shadow:0 0 0 1px rgba(0,0,0,.2)}.theme-overlay .screenshot:after{content:'';display:block;padding-top:75%}.theme-overlay .screenshot img{height:auto;position:absolute;right:0;top:0;width:100%}.theme-overlay.small-screenshot .theme-screenshots{position:absolute;width:302px}.theme-overlay.small-screenshot .theme-info{margin-right:350px;width:auto}.theme-overlay .screenshot.thumb{background:#ccc;border:1px solid #eee;float:none;display:inline-block;margin:10px 5px 0;width:140px;height:80px;cursor:pointer}.theme-overlay .screenshot.thumb:after{content:'';display:block;padding-top:100%}.theme-overlay .screenshot.thumb img{cursor:pointer;height:auto;position:absolute;right:0;top:0;width:100%;height:auto}.theme-overlay .screenshot.selected{background:transparent;border:2px solid #2ea2cc}.theme-overlay .screenshot.selected img{opacity:.8}.theme-browser .theme .theme-screenshot.blank,.theme-overlay .screenshot.blank{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYGWO8d+/efwYkoKioiMRjYGBC4WHhUK6A8T8QIJt8//59ZC493AAAQssKpBK4F5AAAAAASUVORK5CYII=)}.theme-overlay .theme-info{width:40%;float:right}.theme-overlay .current-label{background:#333;color:#fff;font-size:11px;display:inline-block;padding:2px 8px;border-radius:2px;margin:0 0 -10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme-overlay .theme-name{color:#222;font-size:32px;font-weight:100;margin:10px 0 0;line-height:1.3}.theme-overlay .theme-version{color:#999;font-size:13px;font-weight:400;float:none;display:inline-block;margin-right:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme-overlay .theme-author{color:#686868;font-size:16px;font-weight:400;margin:15px 0 25px}.theme-overlay .theme-author a{text-decoration:none}.theme-overlay .theme-description{color:#555;font-size:15px;font-weight:400;line-height:1.5;margin:30px 0 0}.theme-overlay .theme-tags{border-top:3px solid #eee;color:#888;font-size:13px;font-weight:400;margin:30px 0 0;padding-top:20px}.theme-overlay .theme-tags span{color:#444;font-weight:700;margin-left:5px}.theme-overlay .theme-update-message{background:#fefaf7;border:1px solid #eee;border-right:4px solid #d54e21;border-radius:3px;padding:5px 20px 10px}.theme-overlay .theme-update{color:#222;font-size:18px;display:inline-block;line-height:40px;margin:0}.theme-overlay .parent-theme{background:#f7fcfe;border:1px solid #eee;border-right:4px solid #2ea2cc;font-size:14px;font-weight:400;margin-top:30px;padding:10px 20px 10px 10px}.theme-overlay .parent-theme strong{font-weight:700}.single-theme .theme-overlay .theme-backdrop,.single-theme .theme-overlay .theme-header,.single-theme .theme{display:none}.single-theme .theme-overlay .theme-wrap{clear:both;min-height:330px;position:relative;right:auto;left:auto;top:auto;bottom:auto}.single-theme .theme-overlay .theme-about{padding:30px 30px 70px;position:static}.single-theme .theme-overlay .theme-actions{position:absolute}@media only screen and (min-width:2000px){#wpwrap .theme-browser .theme{width:17.6%;margin:0 0 3% 3%}#wpwrap .theme-browser .theme:nth-child(3n),#wpwrap .theme-browser .theme:nth-child(4n){margin-left:3%}#wpwrap .theme-browser .theme:nth-child(5n){margin-left:0}}@media only screen and (min-width:1680px){.theme-overlay .theme-wrap{width:1450px;margin:0 auto}}@media only screen and (min-width:1640px){.theme-browser .theme{width:22.7%;margin:0 0 3% 3%}.theme-browser .theme .theme-screenshot:after{padding-top:75%}.theme-browser .theme:nth-child(3n){margin-left:3%}.theme-browser .theme:nth-child(4n){margin-left:0}}@media only screen and (max-width:1120px){.theme-browser .theme{width:47.5%;margin-left:0}.theme-browser .theme:nth-child(even){margin-left:0}.theme-browser .theme:nth-child(odd){margin-left:5%}}@media only screen and (max-width:900px){.theme-overlay .theme-wrap{right:65px}}@media only screen and (max-width:780px){body.folded .theme-overlay .theme-wrap,.theme-overlay .theme-wrap{top:0;left:0;bottom:0;right:0;padding:70px 20px 20px;border:0;z-index:500;position:fixed}.theme-browser .theme.active .theme-name span{display:none}.theme-overlay .theme-screenshots{width:40%}.theme-overlay .theme-info{width:50%}.single-theme .theme-wrap{padding:10px}.theme-browser .theme .theme-actions{padding:5px 10px 4px}.theme-overlay.small-screenshot .theme-screenshots{position:static;float:none;max-width:302px}.theme-overlay.small-screenshot .theme-info{margin-right:0;width:auto}.theme:not(.active):hover .theme-actions,.theme:hover .more-details{display:none}.theme-browser.rendered .theme:hover .theme-screenshot img{opacity:1}}@media only screen and (max-width:480px){.theme-browser .theme{width:100%;margin-left:0}.theme-browser .theme:nth-child(2n),.theme-browser .theme:nth-child(3n){margin-left:0}}@media only screen and (max-width:650px){.theme-overlay .theme-update,.theme-overlay .theme-description{margin-right:0}.theme-overlay .theme-actions .delete-theme{position:relative;left:auto;bottom:auto}.theme-overlay .theme-actions .inactive-theme{display:inline}.theme-overlay .theme-screenshots{width:100%;float:none}.theme-overlay .theme-info{width:100%}.theme-overlay .theme-author{margin:5px 0 15px}.theme-overlay .current-label{margin-top:10px;font-size:13px}.themes-php .wrap h2{width:100%}.themes-php .theme-search{float:none;clear:both;right:0;top:0;left:0;margin:10px 0;width:100%}.theme-browser .theme.add-new-theme span:after{font:400 60px/90px dashicons;width:80px;height:80px;top:30%;right:50%;text-indent:0;margin-right:-40px}.single-theme .theme-wrap{margin:0 -10px 0 -12px;padding:10px}.single-theme .theme-overlay .theme-about{padding:10px;overflow:visible}.single-theme .current-label{display:none}.single-theme .theme-overlay .theme-actions{position:static}}.broken-themes{clear:both}.broken-themes table{text-align:right;width:50%;border-spacing:3px;padding:3px}.theme-install-php h4{margin:2.5em 0 8px}.theme-install-php .tablenav{height:auto}.theme-install-php .spinner{margin-top:9px}.available-theme{display:inline-block;margin-left:10px;overflow:hidden;padding:20px 0 20px 20px;vertical-align:top;width:300px}.available-theme .screenshot{width:300px;height:225px;display:block;border-width:1px;border-style:solid;margin-bottom:10px;overflow:hidden}.available-theme img{width:300px}.available-theme h3{margin:15px 0 0}.available-theme .theme-author{line-height:18px}.available-theme .action-links{margin-top:10px;overflow:hidden}.available-theme a.screenshot:focus{border-color:#777}.available-theme .action-links li{float:right;padding-left:10px;margin-left:10px;border-left:1px solid #dfdfdf}.available-theme .action-links li{padding-left:8px;margin-left:8px}.ie8 .available-theme .action-links li{padding-left:7px;margin-left:7px}.available-theme .action-links li:last-child{padding-left:0;margin-left:0;border-left:0}.available-theme .action-links .delete-theme{float:left;margin-right:8px;margin-left:0}.available-theme .action-links .delete-theme a{color:red;padding:2px}.available-theme .action-links .delete-theme a:hover{background:red;color:#fff;text-decoration:none}.available-theme .action-links p{float:right}@media only screen and (max-width:1200px){.folded .available-theme,.folded .available-theme .screenshot{width:300px}.folded .available-theme .screenshot{height:225px}}@media only screen and (max-width:1079px){.folded .available-theme,.folded .available-theme .screenshot{width:270px}.folded .available-theme .screenshot{height:203px}}@media only screen and (max-width:1200px){.available-theme,.available-theme .screenshot{width:240px}.available-theme .screenshot{height:180px}.available-theme img{width:100%}}#post-body ul.add-menu-item-tabs li.tabs a,#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{font-weight:600;text-decoration:none}#TB_window #TB_title{background-color:#222;color:#cfcfcf}.appearance_page_custom-header #headimg{border:1px solid #DFDFDF;overflow:hidden;width:100%}.appearance_page_custom-header #upload-form p label{font-size:12px}.appearance_page_custom-header .available-headers .default-header{float:right;margin:0 0 20px 20px}.appearance_page_custom-header .random-header{clear:both;margin:0 0 20px 20px;vertical-align:middle}.appearance_page_custom-header .available-headers label input,.appearance_page_custom-header .random-header label input{margin-left:10px}.appearance_page_custom-header .available-headers label img{vertical-align:middle}div#custom-background-image{min-height:100px;border:1px solid #dfdfdf}div#custom-background-image img{max-width:400px;max-height:300px}#dashboard_right_now .versions .b,#post-status-display,#post-visibility-display,#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,.media-item .percent,.plugins .name,#pass-strength-result.strong,#pass-strength-result.short,#ed_reply_toolbar #ed_reply_strong,.item-controls .item-order a,.feature-filter .feature-name{font-weight:600}.plugins p{margin:0 4px;padding:0}.plugins .desc p{margin:0 0 8px}.plugins td.desc{line-height:1.5em}.plugins .desc ul,.plugins .desc ol{margin:0 2em 0 0}.plugins .desc ul{list-style-type:disc}.plugins .row-actions{font-size:13px;padding:0}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th{padding:10px 9px}.plugins .update th,.plugins .update td{border-bottom:0}.plugin-update-tr td{border-top:0}#wpbody-content .plugins .plugin-title,#wpbody-content .plugins .theme-title{padding-left:12px;white-space:nowrap}.plugins .inactive .plugin-title strong{font-weight:400}.plugins .second,.plugins .row-actions{padding:0 0 5px}.plugins .update .second,.plugins .update .row-actions{padding-bottom:0}.plugins-php .widefat tfoot th,.plugins-php .widefat tfoot td{border-top-style:solid;border-top-width:1px}.plugin-update-tr .update-message{border:0;font-size:13px;font-weight:400;margin:6px 12px 12px;padding:6px 12px}.plugin-update-tr .update-message:before{content:'\f463';display:inline-block;font:400 20px/1 dashicons;speak:none;margin:0 -2px 0 8px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.plugin-install-php h4{margin:2.5em 0 8px}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-left:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#createuser .form-field input{width:25em}.scheme-list{}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:3px}.color-option:hover,.color-option.selected{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:0}.color-option{cursor:pointer}body.press-this{color:#333;margin:0;padding:0;min-width:708px;min-height:400px}.press-this #titlediv #title{font-size:1.4em}.press-this #site-heading:before{top:3px;position:relative;display:inline-block;font:400 18px/1 dashicons;speak:none;color:#727272;content:'\f120';-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.pressthis{margin:20px 0}.pressthis a,.pressthis a:hover,.pressthis a:focus,.pressthis a:active{display:inline-block;position:relative;cursor:move;color:#333;background:#e6e6e6;-webkit-border-radius:5px;border-radius:5px;border:1px solid #b4b4b4;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis a:active{outline:0}.pressthis a:hover:after{-webkit-transform:skew(20deg) rotate(9deg);-moz-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.7);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis a span{display:inline-block;margin:0;padding:0 9px 8px 12px}.pressthis a span:before{font:400 20px/1 dashicons;content:'\f157';position:relative;display:inline-block;top:4px;margin-left:4px}.pressthis a:after{content:'';width:70%;height:55%;z-index:-1;position:absolute;left:10px;bottom:9px;background:transparent;-webkit-transform:skew(20deg) rotate(6deg);-moz-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.6);box-shadow:0 10px 8px rgba(0,0,0,.6)}#utc-time,#local-time{padding-right:25px;font-style:italic}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .spinner{float:none;margin:-3px 3px}#wpfooter{position:absolute;bottom:0;right:0;left:0;padding:10px 0;margin-left:20px;border-top-width:1px;border-top-style:solid}#wpfooter p{font-size:13px;margin:0;line-height:20px}#footer-thankyou{font-style:italic}#wpfooter a{text-decoration:none}#wpfooter a:hover{text-decoration:underline}.about-wrap{position:relative;margin:25px 20px 0 40px;max-width:1050px;font-size:15px}.about-wrap div.updated,.about-wrap div.error{display:none!important}.about-wrap hr{border:0;height:0;margin:0;border-top:1px solid rgba(0,0,0,.1)}.about-wrap img{margin:.5em 5px .5em 0;max-width:100%}.about-wrap p{line-height:1.6em;font-size:14px}.about-wrap h1{margin:.2em 0 0 200px;line-height:1.2em;font-size:2.8em;font-weight:400}.about-wrap .about-text,.about-wrap p.about-description,.about-wrap li.wp-person a.web{font-weight:400;line-height:1.6em;font-size:19px}.about-description{margin-top:1.4em}.about-text{margin:1em 0 1em 200px;min-height:60px;font-size:24px}.about-wrap .changelog h2.about-headline-callout{margin:1.1em 0 .2em;font-size:2.4em;font-weight:300;line-height:1.3;text-align:center}.about-wrap h3{margin:1em 0 .6em;font-size:1.5em;line-height:1.5em}.about-wrap .feature-section h4{margin:1.4em 0 .6em;font-size:1.2em}.about-wrap .feature-section p{margin-top:.6em}.about-wrap code,.about-wrap ol li p{font-size:14px}.about-wrap .about-colors-img{bottom:-25px}.about-wrap .about-themes-img{bottom:-38px}.about-wrap .about-overview-img{border-bottom:1px solid rgba(0,0,0,.1);margin:0}.about-colors-img img,.about-themes-img img{margin:0;padding:0;line-height:1}.about-wrap .point-releases{margin-top:5px}.about-wrap .changelog.point-releases h3{padding-top:35px}.about-wrap .changelog.point-releases h3:first-child{padding-top:7px}.wp-badge{background:url(../images/w-logo-white.png?ver=20131202) no-repeat;background:none,url(../images/wordpress-logo-white.svg?ver=20131110) no-repeat;background-position:center 24px;background-size:85px 85px;font-size:14px;text-align:center;font-weight:600;margin:5px 0 0;padding-top:120px;height:40px;display:inline-block;width:150px;text-rendering:optimizeLegibility}.about-wrap .wp-badge{position:absolute;top:0;left:0}.about-wrap h2.nav-tab-wrapper{padding-right:6px}.about-wrap h2 .nav-tab{padding:4px 15px 6px;margin:0 0 -1px 3px;font-size:18px;vertical-align:top;border-width:1px}.about-wrap h2 .nav-tab-active{font-weight:700}.about-wrap .feature-section{padding-bottom:20px}.about-wrap .feature-section.col{margin-bottom:0}.about-wrap .feature-section.center-col>div{margin:auto;width:60%}.about-wrap .about-colors .one-col>div{width:100%}.about-wrap .feature-section.two-col>div{position:relative;width:50%;float:right}.about-wrap .feature-section.three-col>div{position:relative;width:29.95%;margin-left:4.999999999%;float:right}.about-wrap .feature-section.col .last-feature{margin-left:0}.about-wrap .about-updates img,.about-wrap .about-twentyfourteen img{margin:2em 0 0;border:1px solid #ddd;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.about-wrap .about-twentyfourteen img{margin-top:1em}.about-wrap .changelog .feature-section{overflow:hidden}.about-wrap .about-colors .scheme-list{margin-bottom:1em}.about-wrap .about-colors .color-option{padding-top:10px}.about-wrap .about-colors .color-option label{display:inline-block;margin:.25em 0 .5em}.about-wrap .feature-section.two-col div p{margin-left:3%}.about-wrap .feature-section div p img{float:left;margin-right:10px;max-width:20%}.about-wrap .changelog li{list-style-type:disc;margin-right:3em}.about-wrap .return-to-dashboard{margin:30px -5px 0 0;font-size:14px;font-weight:700}.about-wrap .return-to-dashboard a{text-decoration:none;padding:0 5px}.about-wrap h4.wp-people-group{margin-top:2.6em;font-size:16px}.about-wrap ul.wp-people-group{overflow:hidden;padding:0 5px;margin:0 -5px 0 -15px}.about-wrap ul.compact{margin-bottom:0}.about-wrap li.wp-person{float:right;margin-left:10px}.about-wrap li.wp-person img.gravatar{float:right;margin:0 0 10px 10px;padding:2px;width:60px;height:60px}.about-wrap ul.compact li.wp-person img.gravatar{width:30px;height:30px}.about-wrap li.wp-person{height:70px;width:280px;padding-bottom:15px}.about-wrap ul.compact li.wp-person{height:auto;width:180px;padding-bottom:0;margin-bottom:0}.about-wrap #wp-people-group-validators+p.wp-credits-list{margin-top:0}.about-wrap li.wp-person a.web{display:block;margin:6px 0 2px;font-size:16px;text-decoration:none}.about-wrap p.wp-credits-list a{white-space:nowrap}.freedoms-php .about-wrap ol{margin:40px 60px}.freedoms-php .about-wrap ol li{list-style-type:decimal;font-weight:700}.freedoms-php .about-wrap ol p{font-weight:400;margin:.6em 0}body.full-overlay-active{overflow:hidden}.wp-full-overlay{background:transparent;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;right:0;left:0;height:100%;min-width:0}.wp-full-overlay-sidebar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:fixed;width:300px;height:100%;top:0;bottom:0;right:0;padding:0;margin:0;z-index:10;overflow:auto;background:transparent;border-left:0}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{overflow:visible}.wp-full-overlay.collapsed,.wp-full-overlay.expanded .wp-full-overlay-sidebar{margin-right:0!important}.wp-full-overlay.expanded{margin-right:300px}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{margin-right:-300px}.wp-full-overlay-sidebar:after{content:'';display:block;position:absolute;top:0;bottom:0;left:0;width:3px;z-index:1000}.wp-full-overlay-main{position:absolute;right:0;left:0;top:0;bottom:0;height:100%}.wp-full-overlay-sidebar .wp-full-overlay-header{position:absolute;right:0;left:0;height:45px;padding:0 15px;line-height:45px;z-index:10;margin:0;border-top:0;-webkit-box-shadow:none;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-header a.back{margin-top:9px}.wp-full-overlay-sidebar .wp-full-overlay-footer{bottom:0;border-bottom:0;border-top:0;-webkit-box-shadow:none;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content{position:absolute;top:45px;bottom:45px;right:0;left:0;overflow:auto}.wp-full-overlay .close-full-overlay{text-decoration:none}.wp-full-overlay a.collapse-sidebar{position:absolute;bottom:12px;right:0;z-index:50;display:block;width:19px;height:19px;margin-right:15px;padding:0;border-radius:50%;text-decoration:none}.wp-full-overlay.collapsed .collapse-sidebar{position:absolute;right:100%}.wp-full-overlay .collapse-sidebar-arrow{position:static;margin-top:0;margin-right:0;display:block;width:auto;height:auto;background:0 0}.wp-full-overlay .collapse-sidebar-arrow:before{border-radius:50%;float:right;content:"\f148";font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.wp-full-overlay.collapsed .collapse-sidebar-arrow:before,.rtl .wp-full-overlay .collapse-sidebar-arrow:before{-ms-transform:rotate(180deg);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-ms-transform:none;-webkit-transform:none;transform:none}.wp-full-overlay.collapsed .collapse-sidebar-arrow{background-position:-1px -109px}.wp-full-overlay .collapse-sidebar-label{position:absolute;right:100%;line-height:20px;margin-right:10px}.wp-full-overlay.collapsed .collapse-sidebar-label{display:none}.wp-full-overlay,.wp-full-overlay-sidebar,.wp-full-overlay .collapse-sidebar,.wp-full-overlay-main{-webkit-transition-property:right,left,top,bottom,width,margin;-moz-transition-property:right,left,top,bottom,width,margin;-ms-transition-property:right,left,top,bottom,width,margin;-o-transition-property:right,left,top,bottom,width,margin;transition-property:right,left,top,bottom,width,margin;-webkit-transition-duration:.2s;-moz-transition-duration:.2s;-ms-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s}.no-customize-support .hide-if-no-customize,.customize-support .hide-if-customize,.no-customize-support.wp-core-ui .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.customize-support.wp-core-ui .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize{display:none}#customize-container{display:none;background:#fff;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;right:0;left:0;height:100%}.customize-active #customize-container{display:block}.customize-loading #customize-container iframe{opacity:0}.customize-loading #customize-container{background:#fff url(../images/spinner.gif) no-repeat fixed center center;background-size:20px 20px}#customize-container iframe,#theme-installer iframe{height:100%;width:100%;z-index:20;-webkit-transition:opacity .3s;-moz-transition:opacity .3s;-ms-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}#customize-container .collapse-sidebar{bottom:16px}#customize-controls{margin-top:0}#theme-installer{display:none}#theme-installer.single-theme{display:block}.install-theme-info{display:none;padding:10px 20px 20px}.single-theme .install-theme-info{padding-top:15px}#theme-installer .install-theme-info{display:block}.install-theme-info .theme-install{float:left;margin-top:18px}.install-theme-info .theme-name{font-size:16px;line-height:24px;margin-bottom:0;margin-top:0}.install-theme-info .theme-screenshot{margin-top:15px;width:258px;border:1px solid #ccc}.install-theme-info .theme-details{overflow:hidden}.theme-details .theme-version{margin:15px 0;float:right}.theme-details .star-rating{margin:7px 0;float:left}.theme-details .theme-description{float:right;color:#777;line-height:20px}#theme-installer .wp-full-overlay-header{margin-top:9px}#theme-installer .wp-full-overlay-header .theme-install{float:left;line-height:26px}#theme-installer .wp-full-overlay-sidebar{background:#EEE;border-left:1px solid #DDD}#theme-installer .wp-full-overlay-main{background:#fff url(../images/spinner.gif) no-repeat fixed center center;background-size:20px 20px}.nav-tab{border-style:solid;border-width:1px 1px 0;font-size:12px;line-height:16px;display:inline-block;padding:4px 14px 6px;text-decoration:none;margin:-4px 0 -1px 4px}.nav-tab-active{border-width:1px}.nav-tab-active,.nav-tab-active:hover{border-bottom-width:1px;border-bottom-style:solid}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-width:1px;border-bottom-style:solid;padding-bottom:0;padding-right:10px}h2 .nav-tab{padding:6px 10px;font-weight:700;font-size:15px;line-height:24px}#excerpt,.attachmentlinks{margin:0;height:4em;width:98%}#template div{margin-left:190px}p.pagenav{margin:0;display:inline}.pagenav span{font-weight:600;margin:0 6px}.row-title{font-size:14px!important;font-weight:600}.column-comment .comment-author{margin-bottom:.6em}.column-author img,.column-username img,.column-comment .comment-author img{float:right;margin-left:10px;margin-top:1px}.row-actions{font-size:13px;visibility:hidden;padding:2px 0 0}tr:hover .row-actions,.mobile .row-actions,.row-actions.visible,div.comment-item:hover .row-actions{visibility:visible}.row-actions-visible{padding:2px 0 0}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}.tagchecklist{margin-right:14px;font-size:12px;overflow:auto}.tagchecklist br{display:none}.tagchecklist strong{margin-right:-8px;position:absolute}.tagchecklist span{margin-left:25px;display:block;float:right;font-size:13px;line-height:1.8em;white-space:nowrap;cursor:default}.tagchecklist span a{margin:1px -17px 0 0;cursor:pointer;width:20px;height:20px;display:block;float:right;text-indent:0;overflow:hidden;position:absolute}#poststuff h2{margin-top:20px;font-size:1.5em;margin-bottom:15px;padding:0 0 3px;clear:right}#poststuff h3,.metabox-holder h3{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#poststuff .inside{margin:6px 0 0}#poststuff .inside #parent_id,#poststuff .inside #page_template{max-width:100%}.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{max-width:80%}.ie8 #poststuff .inside #parent_id,.ie8 #poststuff .inside #page_template,.ie8 .inline-edit-row #post_parent,.ie8 .inline-edit-row select[name=page_template]{width:250px}#post-visibility-select{line-height:1.5em;margin-top:3px}#poststuff #submitdiv .inside{margin:0;padding:0}.edit-form-section{margin-bottom:20px}#templateside ul li a{text-decoration:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}#sidemenu{margin:-30px 315px 0 15px;list-style:none;position:relative;float:left;padding-right:10px;font-size:12px}#sidemenu a{padding:0 7px;display:block;float:right;line-height:28px;border-top-width:1px;border-top-style:solid;border-bottom-width:1px;border-bottom-style:solid;-webkit-transition:none;-moz-transition:none;transition:none}#sidemenu li{display:inline;line-height:200%;list-style:none;text-align:center;white-space:nowrap;margin:0;padding:0}#sidemenu a.current{font-weight:400;padding-right:6px;padding-left:6px;-webkit-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;border-top-right-radius:3px;border-top-left-radius:3px;border-width:1px;border-style:solid}#sidemenu li a .count-0{display:none}.plugin-install #description,.plugin-install-network #description{width:60%}table .vers,table .column-visible,table .column-rating{text-align:right}.error-message{color:red;font-weight:600}body.iframe{height:98%}.lp-show-latest p{display:none}.lp-show-latest p:last-child,.lp-show-latest .lp-error p{display:block}td.media-icon{text-align:center;width:80px;padding-top:8px;padding-bottom:8px}td.media-icon img{max-width:80px;max-height:60px}#howto{font-size:11px;margin:0 5px;display:block}.importers td{padding-left:14px}.importers{font-size:16px;width:auto}#post-body #post-body-content #namediv h3{margin-top:0}#namediv h3 label{vertical-align:baseline}#namediv table{width:100%}#namediv td.first{width:10px;white-space:nowrap}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.zerosize{height:0;width:0;margin:0;border:0;padding:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:2px}.checkbox{border:0;margin:0;padding:0}fieldset{border:0;padding:0;margin:0}.post-categories{display:inline;margin:0;padding:0}.post-categories li{display:inline}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-style:normal;font-weight:700}.edit-box{display:none}h3:hover .edit-box{display:inline}#dashboard-widgets form .input-text-wrap input{width:100%}#dashboard-widgets form .textarea-wrap textarea{width:100%}#dashboard-widgets .postbox form .submit{float:none;margin:.5em 0 0;padding:0;border:0}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish{min-width:0}#dashboard-widgets a{text-decoration:none}#dashboard-widgets h3 a{text-decoration:underline}#dashboard-widgets h3 .postbox-title-action{position:absolute;left:10px;padding:0;top:5px}.js #dashboard-widgets h3 .postbox-title-action{left:33px}#dashboard-widgets h4{font-weight:400;font-size:14px;margin:0 0 .2em;padding:0}#dashboard_plugins h5{font-size:14px}#latest-comments #the-comment-list{position:relative}#activity-widget #latest-comments #the-comment-list .comment-item{padding:1em 12px}#latest-comments #the-comment-list .pingback{padding-right:12px!important}#latest-comments #the-comment-list .comment-item:first-child{border-top:0}#latest-comments #the-comment-list .comment-item h4{line-height:1.5em;margin-top:0;color:#666}#latest-comments #the-comment-list .comment-item h4 cite{font-style:normal;font-weight:400}#latest-comments #the-comment-list .comment-item blockquote,#latest-comments #the-comment-list .comment-item blockquote p{margin:0;padding:0;display:inline}#latest-comments #the-comment-list .comment-item p.row-actions{margin:3px 0 0;padding:0;font-size:13px}#title-wrap label{cursor:text}#title-wrap #title{padding:2px 6px;font-size:1.3em;line-height:100%;outline:0}#title-wrap #title-prompt-text{font-size:1.1em;padding:5px 8px}.rss-widget ul{margin:0;padding:0;list-style:none}a.rsswidget{font-size:14px;font-weight:600;line-height:1.7em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#999;font-size:13px;margin-right:3px}.rss-widget cite{display:block;text-align:left;margin:0 0 1em;padding:0}.rss-widget cite:before{content:'\2014'}.dashboard-comment-wrap{overflow:hidden;word-wrap:break-word}#dashboard_browser_nag a.update-browser-link{font-size:1.2em;font-weight:600}#dashboard_browser_nag a{text-decoration:underline}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-left:125px}#dashboard_browser_nag .browser-icon{margin-top:-35px}#dashboard_browser_nag.postbox.browser-insecure{background-color:#ac1b1b;border-color:#ac1b1b}#dashboard_browser_nag.postbox{background-color:#e29808;background-image:none;border-color:#edc048;color:#fff;-webkit-box-shadow:none;box-shadow:none}#dashboard_browser_nag.postbox.browser-insecure h3{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h3{border-bottom-color:#f6e2ac;background:transparent none;color:#fff;-webkit-box-shadow:none;box-shadow:none}#dashboard_browser_nag a{color:#fff}#dashboard_browser_nag h3.hndle{border:0;font-weight:600;font-size:20px;padding-top:10px}.postbox#dashboard_browser_nag p a.dismiss{font-size:14px}.postbox#dashboard_browser_nag p,.postbox#dashboard_browser_nag a,.postbox#dashboard_browser_nag p.browser-update-nag{font-size:16px}#loginform p.submit,.login-action-lostpassword p.submit{border:0;margin:-10px 0 20px}.login *{margin:0;padding:0}.login form{margin-top:20px;margin-right:0;padding:26px 24px 46px;font-weight:400;overflow:hidden}.login form .forgetmenot{font-weight:400;float:right;margin-bottom:0}.login .button-primary{float:left}#login form p{margin-bottom:0}#login form p.submit{margin:0;padding:0}.login label{color:#777;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login h1{text-align:center}.login h1 a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);background-size:80px 80px;background-position:center top;background-repeat:no-repeat;color:#999;height:80px;font-size:20px;font-weight:400;line-height:1.3em;margin:0 auto 25px;padding:0;text-decoration:none;width:80px;text-indent:-9999px;outline:0;overflow:hidden;display:block}#login{width:320px;padding:8% 0 0;margin:auto}#login_error,.login .message{margin-right:0;padding:12px}.login #nav,.login #backtoblog{font-size:13px;padding:0 24px}.login #nav{margin:24px 0 0}#backtoblog{margin:16px 0 0}.login form .input,.login input[type=text]{font-size:24px;line-height:1;width:100%;padding:3px;margin:2px 0 16px 6px}.login #pass-strength-result{width:250px;font-weight:600;border-style:solid;border-width:1px;margin:12px 0 6px;padding:6px 5px;text-align:center}.mobile #login{padding:20px 0}.mobile #login form,.mobile #login .message,.mobile #login_error{margin-right:0}.mobile #login #nav,.mobile #login #backtoblog{margin-right:8px}.mobile #login h1 a{width:auto}body.interim-login{height:auto}.interim-login #login{padding:0;margin:5px auto 20px}.interim-login.login h1 a{width:auto}.interim-login #login_error,.interim-login.login .message{margin:0 0 16px}.interim-login.login form{margin:0}.wp-list-table .site-deleted{background:#ff8573}.wp-list-table .site-spammed{background:#faafaa}.wp-list-table .site-archived{background:#ffebe8}.wp-list-table .site-mature{background:#fecac2}.no-js #message{display:block}.accordion-section ul.category-tabs,.accordion-section ul.add-menu-item-tabs,.accordion-section ul.wp-tab-bar{margin:0}.accordion-section .categorychecklist{margin:13px 0}#nav-menu-meta .accordion-section-content{padding:18px 13px}#nav-menu-meta .button-controls{margin-bottom:0}#nav-menus-frame{margin-right:300px;margin-top:23px}#nav-menus-frame .accordion-section-content .inside{font-size:14px}#wpbody-content #menu-settings-column{display:inline;width:281px;margin-right:-300px;clear:both;float:right;padding-top:0}#menu-settings-column .inside{clear:both;margin:10px 0 0}.metabox-holder-disabled .postbox,.metabox-holder-disabled .accordion-section-content,.metabox-holder-disabled .accordion-section-title{opacity:.5;filter:alpha(opacity=50)}.metabox-holder-disabled .button-controls .select-all{display:none}#wpbody{position:relative}.blank-slate .menu-name{height:2em}.blank-slate .menu-settings{border:0;margin-top:0;padding-top:0;overflow:hidden}.is-submenu{font-style:italic;font-weight:400;margin-right:4px}.manage-menus{margin-top:23px;padding:10px;overflow:hidden}.manage-menus select{float:right;margin-left:6px}.manage-menus .selected-menu{float:right;margin:5px 0 0 6px}.manage-menus .submit-btn{float:right;margin-top:1px}.menu-edit p{margin:.3em 0 .6em}.menu-edit #post-body-content h3{margin:1em 0 10px}.menu-settings{border-top-width:1px;border-top-style:solid;margin-top:2em}.menu-settings dl{margin:0 0 10px;overflow:hidden;padding-right:18%}.menu-settings dd{float:right;margin:0;width:100%}.menu-settings dt{float:right;clear:both;width:21.951%;padding:3px 0 0;margin-right:-21.951%}.menu-settings label{vertical-align:baseline}.menu-edit .checkbox-input{margin-top:4px}.theme-location-set{font-size:11px}#menu-management-liquid{float:right;min-width:100%;margin-top:3px}#menu-management{position:relative;margin-left:20px;margin-top:-3px;width:100%}#menu-management .menu-edit{margin-bottom:20px}.nav-menus-php #post-body{padding:0 10px 10px;border-width:1px 0;border-style:solid}#nav-menu-header,#nav-menu-footer{padding:0 10px}#nav-menu-header{border-bottom:1px solid;margin-bottom:0}#nav-menu-header .menu-name-label{margin-top:4px}.nav-menus-php #post-body div.updated,.nav-menus-php #post-body div.error{margin:0}.nav-menus-php #post-body-content{position:relative;float:none}#menu-management .menu-add-new abbr{font-weight:600}#select-nav-menu-container{text-align:left;padding:0 10px 3px;margin-bottom:5px}#select-nav-menu{width:100px;display:inline}#menu-name-label{margin-top:-2px}.widefat td.menu-location-menus{padding-bottom:5px}.menu-location-menus select{float:right}#locations-nav-menu-wrapper{padding:5px 0}.locations-nav-menu-select select{float:right;width:160px;margin-left:5px}.locations-row-links{float:right;margin:6px 6px 0 0}.locations-edit-menu-link,.locations-add-menu-link{margin:0 3px}.locations-edit-menu-link{padding-left:3px;border-left:1px solid #ccc}#wpbody .open-label{display:block;float:right}#wpbody .open-label span{padding-left:10px}.js .input-with-default-title{font-style:italic}#menu-management .inside{padding:0 10px}.postbox .howto input,.accordion-container .howto input{width:180px;float:left}.accordion-container .outer-border{margin:0}.customlinkdiv .howto input{width:180px}.customlinkdiv p{margin-top:0}#nav-menu-theme-locations .howto select{width:100%}#nav-menu-theme-locations .button-controls{text-align:left}.add-menu-item-view-all{height:400px}#menu-container .submit{margin:0 0 10px;padding:0}.nav-menus-php .add-new-menu-action{float:right;margin:6px 6px 0 0;line-height:15px}.nav-menus-php .meta-sep,.nav-menus-php .submitdelete,.nav-menus-php .submitcancel{display:block;float:right;margin:6px 0;line-height:15px}.meta-sep{padding:0 2px}#cancel-save{text-decoration:underline;font-size:12px;margin-right:20px;margin-top:5px}.button.right,.button-secondary.right,.button-primary.right{float:left}.list-controls{float:right;margin-top:5px}.add-to-menu{float:left}.postbox .spinner{display:none;vertical-align:middle}.button-controls{clear:both;margin:10px 0}.show-all,.hide-all{cursor:pointer}.hide-all{display:none}#menu-name{width:270px}#manage-menu .inside{padding:0}#available-links dt{display:block}#add-custom-link .howto{font-size:12px}#add-custom-link label span{display:block;float:right;margin-top:5px;padding-left:5px}.menu-item-textbox{width:180px}.nav-menus-php .howto span{margin-top:6px;display:block;float:right}.quick-search{width:190px}.nav-menus-php .list-wrap{display:none;clear:both;margin-bottom:10px}.nav-menus-php .list-container{max-height:200px;overflow-y:auto;padding:10px 10px 5px}.nav-menus-php .postbox p.submit{margin-bottom:0}.nav-menus-php .list li{display:none;margin:0;margin-bottom:5px}.nav-menus-php .list li .menu-item-title{cursor:pointer;display:block}.nav-menus-php .list li .menu-item-title input{margin-left:3px;margin-top:-3px}.menu-item-title input[type=checkbox]{display:inline-block;margin-top:-4px}#menu-container .inside{padding-bottom:10px}.menu{padding-top:1em}#menu-to-edit{margin:0;padding:.1em 0}.menu ul{width:100%}.menu li{margin-bottom:0;position:relative}.menu-item-bar{clear:both;line-height:1.5em;position:relative;margin:9px 0 0}.menu-item-bar .menu-item-handle{border:1px solid #dfdfdf;position:relative;padding:10px 15px;height:auto;width:382px;line-height:30px;overflow:hidden;word-wrap:break-word}#menu-to-edit .menu-item-invalid .menu-item-handle{background:#f6c9cc;border-color:#f1acb1}.no-js .menu-item-edit-active .item-edit{display:none}.js .menu-item-handle{cursor:move}.menu li.deleting .menu-item-handle{background-image:none}.menu-item-handle .item-title{font-size:13px;font-weight:600;line-height:20px;display:block;margin-left:13em}li.menu-item.ui-sortable-helper dl{margin-top:0}li.menu-item.ui-sortable-helper .menu-item-transport dl{margin-top:13px}.menu .sortable-placeholder{height:35px;width:410px;margin-top:13px}.menu-item-depth-0{margin-right:0}.menu-item-depth-1{margin-right:30px}.menu-item-depth-2{margin-right:60px}.menu-item-depth-3{margin-right:90px}.menu-item-depth-4{margin-right:120px}.menu-item-depth-5{margin-right:150px}.menu-item-depth-6{margin-right:180px}.menu-item-depth-7{margin-right:210px}.menu-item-depth-8{margin-right:240px}.menu-item-depth-9{margin-right:270px}.menu-item-depth-10{margin-right:300px}.menu-item-depth-11{margin-right:330px}.menu-item-depth-0 .menu-item-transport{margin-right:0}.menu-item-depth-1 .menu-item-transport{margin-right:-30px}.menu-item-depth-2 .menu-item-transport{margin-right:-60px}.menu-item-depth-3 .menu-item-transport{margin-right:-90px}.menu-item-depth-4 .menu-item-transport{margin-right:-120px}.menu-item-depth-5 .menu-item-transport{margin-right:-150px}.menu-item-depth-6 .menu-item-transport{margin-right:-180px}.menu-item-depth-7 .menu-item-transport{margin-right:-210px}.menu-item-depth-8 .menu-item-transport{margin-right:-240px}.menu-item-depth-9 .menu-item-transport{margin-right:-270px}.menu-item-depth-10 .menu-item-transport{margin-right:-300px}.menu-item-depth-11 .menu-item-transport{margin-right:-330px}body.menu-max-depth-0{min-width:950px!important}body.menu-max-depth-1{min-width:980px!important}body.menu-max-depth-2{min-width:1010px!important}body.menu-max-depth-3{min-width:1040px!important}body.menu-max-depth-4{min-width:1070px!important}body.menu-max-depth-5{min-width:1100px!important}body.menu-max-depth-6{min-width:1130px!important}body.menu-max-depth-7{min-width:1160px!important}body.menu-max-depth-8{min-width:1190px!important}body.menu-max-depth-9{min-width:1220px!important}body.menu-max-depth-10{min-width:1250px!important}body.menu-max-depth-11{min-width:1280px!important}.item-type{font-size:12px;padding:12px 10px;line-height:18px;display:block}.item-controls{font-size:12px;position:absolute;left:20px;top:-1px}.item-controls a{text-decoration:none}.item-controls a:hover{cursor:pointer}.item-controls .item-order{padding-left:10px}.nav-menus-php .item-edit{position:absolute;left:-20px;top:0;display:block;width:30px;height:40px;margin-left:0!important;text-indent:100%;outline:0;overflow:hidden;white-space:nowrap}.menu-instructions-inactive{display:none}.menu-item-settings{display:block;width:402px;padding:10px 10px 10px 0;position:relative;z-index:10}.menu-item-settings .field-move a{display:none;margin:0 2px}.menu-item-edit-active .menu-item-settings{display:block}.menu-item-edit-inactive .menu-item-settings{display:none}.add-menu-item-pagelinks{margin:.5em auto;text-align:center}.link-to-original{display:block;margin:0 0 10px;padding:3px 5px 5px;font-size:12px;font-style:italic}.link-to-original a{padding-right:4px;font-style:normal}.hidden-field{display:none}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-left:10px;float:right}.description-thin{width:190px;height:40px}.description-wide{width:390px}.menu-item-actions{padding-top:15px}#cancel-save{cursor:pointer}.nav-menus-php .major-publishing-actions{clear:both;padding:3px 0 6px}.nav-menus-php .major-publishing-actions .publishing-action{text-align:left;float:left;line-height:23px;margin:4px 0 1px}.nav-menus-php .blank-slate .menu-settings{display:none}.nav-menus-php .delete-action{float:right;margin-top:2px}.nav-menus-php .submitbox .submitcancel{border-bottom:1px solid;padding:1px 2px;text-decoration:none}.nav-menus-php .major-publishing-actions .form-invalid{padding-right:4px;margin-right:-4px;border:0 none}#menu-item-name-wrap:after,#menu-item-url-wrap:after,#menu-name-label:after,#menu-settings-column .inside:after,#nav-menus-frame:after,.nav-menus-php #post-body-content:after,.nav-menus-php .button-controls:after,.nav-menus-php .major-publishing-actions:after,.nav-menus-php .menu-item-settings:after{clear:both;content:".";display:block;height:0;visibility:hidden}#nav-menus-frame,.button-controls,#menu-item-url-wrap,#menu-item-name-wrap{display:block}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) repeat-x bottom right}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) repeat-x top right;height:17px;float:right}.star-rating{white-space:nowrap}.star-rating .star{display:inline-block;width:20px;height:20px;-webkit-font-smoothing:antialiased;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;-moz-transition:color .1s ease-in 0;-webkit-transition:color .1s ease-in 0;text-align:center;color:#0074a2}.star-rating .star-full:before{content:'\f155'}.star-rating .star-half:before{content:'\f459'}.rtl .star-rating .star-half{-webkit-transform:rotateY(180deg);-ms-transform:rotateY(180deg);transform:rotateY(180deg)}.star-rating .star-empty:before{content:'\f154'}div.action-links{font-weight:400;margin:6px 0 0}#plugin-information-header{margin:0;padding:0 5px;font-weight:600;position:relative;border-bottom-width:1px;border-bottom-style:solid;height:2.5em}#plugin-information ul#sidemenu{font-weight:400;margin:0 5px;position:absolute;right:0;bottom:-1px}#plugin-information{height:auto}#plugin-information p.action-button{width:100%;padding-bottom:0;margin-bottom:0;margin-top:10px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px}#plugin-information .action-button a{text-align:center;font-weight:600;text-decoration:none;display:block;line-height:2em}#plugin-information h2{clear:none!important;margin-left:200px}#plugin-information .fyi{margin:0 10px 50px;width:210px}#plugin-information .fyi h2{font-size:.9em;margin-bottom:0;margin-left:0}#plugin-information .fyi h2.mainheader{padding:5px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px}#plugin-information .fyi ul{padding:10px 7px 10px 5px;margin:0;list-style:none;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}#plugin-information .fyi li{margin-left:0}#plugin-information #section-holder{padding:10px}#plugin-information .section ul,#plugin-information .section ol{margin-right:16px;list-style-type:square;list-style-image:none}#plugin-information #section-screenshots ol{list-style:none;margin:0}#plugin-information #section-screenshots li img{vertical-align:text-top;max-width:100%;width:auto;height:auto}#plugin-information #section-screenshots li p{font-style:italic;padding-right:20px;padding-bottom:2em}#plugin-information #section-screenshots ol,#plugin-information .updated,#plugin-information pre{margin-left:215px}#plugin-information pre{padding:7px;overflow:auto;border-width:1px;border-style:solid}.plugin-version-author-uri{font-size:13px}img{border:0}#wphead{border-bottom-width:1px;border-bottom-style:solid}.press-this #wphead{height:32px;margin-right:0;margin-left:0;margin-bottom:5px}.press-this #header-logo{float:right;margin:7px 7px 0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.press-this #wphead h1{font-weight:400;font-size:16px;line-height:32px;margin:0;float:right}.press-this #wphead h1 a{text-decoration:none}.press-this #wphead h1 a:hover{text-decoration:underline}.press-this #message{margin:10px 0}.press-this .posting{margin-left:252px}.press-this-sidebar{float:left;width:240px;padding-top:10px}.press-this #title{margin-right:0;margin-left:0;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.press-this .tagchecklist{margin-top:8px}.press-this #titlediv{margin:0}.press-this .wp-media-buttons{cursor:default;padding:8px 8px 6px}.press-this .howto{margin-top:2px;margin-bottom:3px;font-size:12px;font-style:italic;display:block}.press-this #wp-content-editor-container{clear:none}.press-this #poststuff .inside{margin-top:18px}.press-this .category-tabs{margin-bottom:3px}.press-this #poststuff{margin:0 10px 10px;padding:0}.press-this #photo-add-url-div input[type=text]{width:220px}#poststuff #editor-toolbar{height:30px}div.zerosize{border:0 none;height:0;margin:0;overflow:hidden;padding:0;width:0}.posting{margin-left:212px;position:relative}.press-this .inner-sidebar{width:200px}.press-this .inner-sidebar .sleeve{padding-top:5px}.press-this #submitdiv p{margin:0;padding:6px}.press-this #submitdiv #publishing-actions{border-bottom:1px solid #dfdfdf}.press-this #publish{float:left}.press-this #poststuff h2,.press-this #poststuff h3{font-size:14px;line-height:1}.press-this #tagsdiv-post_tag h3,.press-this #categorydiv h3{cursor:pointer}.press-this #submitdiv h3{cursor:default}h3.tb{font-weight:600;font-size:12px;margin-right:5px}#TB_window{border:1px solid #333}.press-this .postbox,.press-this .stuffbox{margin-bottom:10px;min-width:0}.js .meta-box-sortables .postbox:hover .handlediv{margin-left:0!important}.js .sidebar-name .sidebar-name-arrow:before,.js .meta-box-sortables .postbox .handlediv:before{left:12px;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:8px 10px;top:0;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.js #widgets-left .sidebar-name .sidebar-name-arrow{display:none}.js #widgets-left .widgets-holder-wrap.closed .sidebar-name .sidebar-name-arrow,.js #widgets-left .sidebar-name:hover .sidebar-name-arrow{display:block}.js .sidebar-name .sidebar-name-arrow:before,.js .meta-box-sortables .postbox .handlediv:before{content:'\f142'}.js .widgets-holder-wrap.closed .sidebar-name-arrow:before,.js .meta-box-sortables .postbox.closed .handlediv:before{content:'\f140'}.press-this #submitdiv:hover .handlediv{background:0 0}.tbtitle{font-size:1.7em;outline:0;padding:3px 4px;border-color:#dfdfdf}.press-this .actions{float:left;margin:-19px 0 0}.press-this #extra-fields .actions{margin:-32px 0 0 -7px}.press-this .actions li{float:right;list-style:none;margin-left:10px}#extra-fields .button{margin-left:5px}#photo_saving{margin:0 8px 8px;vertical-align:middle}#img_container_container{overflow:auto}#extra-fields{margin-top:10px;position:relative}#extra-fields h2{margin:12px}#waiting{margin-top:10px;overflow:hidden}#waiting span{float:left;margin:0 5px 0 0}#waiting .spinner{display:block}#extra-fields .postbox{margin-bottom:5px}#extra-fields .titlewrap{padding:0;overflow:auto;height:120px}#img_container a{display:block;float:right;overflow:hidden}#img_container img,#img_container a{width:68px;height:68px}#img_container img{border:0;background-color:#f4f4f4;cursor:pointer}#img_container a,#img_container a:link,#img_container a:visited{border:1px solid #ccc;display:block;position:relative}#img_container a:hover,#img_container a:active{border-color:#000;z-index:1000;border-width:1px}#embed-code{width:100%;height:98px}.press-this .categorydiv div.tabs-panel{height:100px}.press-this .tagsdiv .newtag{width:120px}.press-this #content{margin:5px 0;padding:0 5px;border:0 none;height:345px;font-family:Consolas,Monaco,monospace;font-size:13px;line-height:19px;background:transparent}.press-this #publishing-actions .spinner{display:inline;vertical-align:middle}#TB_ajaxContent #options{position:absolute;top:20px;left:25px;padding:5px}#TB_ajaxContent h3{margin-bottom:.25em}.error a{text-decoration:underline}.updated a{text-decoration:none;padding-bottom:2px}.taghint{color:#aaa;margin:-17px 7px 0 0;visibility:hidden}input.newtag~div.taghint{visibility:visible}input.newtag:focus~div.taghint{visibility:hidden}#mce_fullscreen_container{background:#fff}#photo-add-url-div input[type=text]{width:300px}.alignleft h3{margin:0}#template textarea{font-family:Consolas,Monaco,monospace;font-size:13px;width:97%;background:#f9f9f9;outline:0}#template textarea,#docs-list{direction:ltr}#template p{width:97%}#templateside{float:left;width:190px;word-wrap:break-word}#templateside h3,#postcustomstuff p.submit{margin:0}#templateside h4{margin:1em 0 0}#templateside ol,#templateside ul{margin:.5em 0;padding:0}#templateside li{margin:4px 0}#templateside a,.theme-editor-php .highlight{display:block;padding:3px 12px 3px 3px;text-decoration:none}.theme-editor-php .highlight{margin:-3px -12px -3px 3px}#templateside .highlight{border:0;font-weight:700}.nonessential{font-size:11px;font-style:italic;padding-right:12px}#documentation{margin-top:10px}#documentation label{line-height:22px;vertical-align:baseline;font-weight:600}.fileedit-sub{padding:10px 0 8px;line-height:180%}.feature-filter{padding:8px 12px 0}.feature-filter .feature-group{float:right;margin:5px 10px 10px}.feature-filter .feature-group li{display:inline-block;vertical-align:top;list-style-type:none;padding-left:25px;width:150px}.widget{margin:0 auto 10px;position:relative;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.widget-top{font-size:13px;font-weight:600;background:#f7f7f7}.widget-top a.widget-action,.widget-top a.widget-action:hover{text-decoration:none}.widget-title h4{margin:0;padding:15px;line-height:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;user-select:none}.widgets-holder-wrap .widget-inside{border-top:0;padding:1px 15px 15px;line-height:16px}.widget.ui-draggable-dragging{min-width:100%}.widget.ui-sortable-helper{opacity:.8}.widget-placeholder{border:1px dashed #bbb;margin:0 auto 10px;height:45px;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#widgets-right .widget-placeholder{margin-top:0}#widgets-right .closed .widget-placeholder{height:0;border:0;margin-top:-10px}.sidebar-name{border:0;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.sidebar-name-arrow{position:absolute;top:0;left:0;bottom:0}.js .sidebar-name{cursor:pointer}.sidebar-name h3{margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap}.widgets-holder-wrap .description{padding:0 0 15px;margin:0;font-style:normal;color:#777}#widgets-right .widgets-holder-wrap .description{padding-right:7px;padding-left:7px}div.widget-liquid-left{margin:0;width:38%;float:right}div.widget-liquid-right{float:left;width:58%}div#widgets-left{padding-top:12px}div#widgets-left .closed .sidebar-name,div#widgets-left .inactive-sidebar.closed .sidebar-name{margin-bottom:10px}div#widgets-left .sidebar-name h3{padding:10px 0;margin:0 0 0 10px}div#widgets-left .sidebar-name .sidebar-name-arrow:before{left:0;top:4px;padding:4px 4px 4px 6px}div#widgets-left .widget-holder{background:transparent;border:0}#available-widgets .widget-action{display:none}#available-widgets .widget{margin:0}#available-widgets .widget:nth-child(odd){clear:both}#available-widgets .widget .widget-description{display:block;padding:10px 15px;font-size:12px}#available-widgets #widget-list{position:relative}#widgets-left .inactive-sidebar{clear:both;width:100%;background:transparent;padding:0;margin:0 0 20px;border:0;box-shadow:none}#widgets-left .inactive-sidebar.first{margin-top:40px}div#widgets-left .inactive-sidebar .widget.expanded{right:auto}.widget-title-action{float:left;position:relative}div#widgets-left .inactive-sidebar .widgets-sortables{min-height:42px;padding:0;background:transparent;margin:0;position:relative}div#widgets-right:after{content:".";display:block;height:0;clear:both;visibility:hidden}div#widgets-right .sidebars-column-1,div#widgets-right .sidebars-column-2{max-width:450px}div#widgets-right .widgets-holder-wrap{margin:10px 0 0}div#widgets-right .sidebar-description{min-height:20px;margin-top:-5px}div#widgets-right .sidebar-name h3{padding:15px 7px}div#widgets-right .sidebar-name .sidebar-name-arrow:before{left:0;top:4px}div#widgets-right .widget-top{padding:0}div#widgets-right .widgets-sortables{padding:0 8px;margin-bottom:9px;position:relative;min-height:123px}div#widgets-right .closed .widgets-sortables{min-height:0;margin-bottom:0}.sidebar-name .spinner{margin:-5px 5px;float:none}#widgets-right .widgets-holder-wrap.widget-hover{border-color:#777;box-shadow:0 1px 2px rgba(0,0,0,.3)}.widgets_access #widgets-left .widget .widget-top{cursor:auto}.widgets_access #wpwrap .widgets-holder-wrap.closed .sidebar-description,.widgets_access #wpwrap .widgets-holder-wrap.closed .widget,.widgets_access #wpwrap .widget-control-edit{display:block}.widgets_access #widgets-left .widget .widget-top:hover,.widgets_access #widgets-right .widget .widget-top:hover{border-color:#ddd}#available-widgets .widget-control-edit .edit,#widgets-left .inactive-sidebar .widget-control-edit .add,#widgets-right .widget-control-edit .add{display:none}.widget-control-edit{display:block;color:#666;background:#EEE;padding:0 15px;line-height:43px;border-right:1px solid #DDD}#widgets-left .widget-control-edit:hover,#widgets-right .widget-control-edit:hover{color:#fff;background:#444;border-right:0;outline:1px solid #444}.widgets-holder-wrap .sidebar-name,.widgets-holder-wrap .sidebar-description{-webkit-user-select:none;-moz-user-select:none;user-select:none}.editwidget{margin:0 auto}.editwidget .widget-inside{display:block;padding:0 15px}.editwidget .widget-control-actions{margin-top:20px}.js .widgets-holder-wrap.closed .widget,.js .widgets-holder-wrap.closed .sidebar-description,.js .closed br.clear{display:none}.nav-menus-php .item-edit:before,.widget-top a.widget-action:after,.control-section .accordion-section-title:after,.accordion-section-title:after{left:0;content:'\f140';border:0;background:0 0;font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.widget-top a.widget-action:after{padding:12px 12px 0}.nav-menus-php .item-edit:before{line-height:2.1}.control-section .accordion-section-title:after,.accordion-section-title:after{float:left;left:20px;top:-2px}.control-section.open .accordion-section-title:after,#customize-info.open .accordion-section-title:after,.nav-menus-php .menu-item-edit-active .item-edit:before{content:'\f142'}.widget-inside,.widget-description{display:none}#removing-widget{display:none;font-weight:400;padding-right:15px;font-size:12px;line-height:1}.widget-control-noform,#access-off,.widgets_access .widget-action,.widgets_access .sidebar-name-arrow,.widgets_access #access-on,.widgets_access .widget-holder .description,.no-js .widget-holder .description{display:none}.widgets_access .widget-holder,.widgets_access #widget-list{padding-top:10px}.widgets_access #access-off{display:inline}.widgets_access .sidebar-name,.widgets_access .widget .widget-top{cursor:default}.widget-liquid-left #widgets-left.chooser #available-widgets .widget,.widget-liquid-left #widgets-left.chooser .inactive-sidebar{transition:opacity .1s linear}.widget-liquid-left #widgets-left.chooser #available-widgets .widget,.widget-liquid-left #widgets-left.chooser .inactive-sidebar{opacity:.2;pointer-events:none}.widget-liquid-left #widgets-left.chooser #available-widgets .widget-in-question{opacity:1;pointer-events:auto}.widgets-chooser ul.widgets-chooser-sidebars{margin:0;list-style-type:none;max-height:300px;overflow:auto}.widgets-chooser{display:none}.widgets-chooser ul{border:1px solid #ccc}.widgets-chooser li{padding:10px 35px 10px 15px;border-bottom:1px solid #ccc;background:#fff;margin:0;cursor:pointer;outline:0;position:relative;transition:background:.2s ease-in-out}.widgets-chooser li:hover,.widgets-chooser li:focus{background:rgba(255,255,255,.7)}.widgets-chooser li:focus:before{content:'\f147';display:block;-webkit-font-smoothing:antialiased;font:400 26px/1 dashicons;color:#999;position:absolute;top:7px;right:5px}.widgets-chooser li:last-child{border:0}.widgets-chooser li.widgets-chooser-selected{background:#2ea2cc;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{content:'\f147';display:block;-webkit-font-smoothing:antialiased;font:400 26px/1 dashicons;color:#fff;position:absolute;top:7px;right:5px}.widgets-chooser .widgets-chooser-actions{padding:10px 0 12px;text-align:center}.widgets-chooser button{margin-left:5px}#available-widgets .widget .widget-top{cursor:pointer}.ui-sortable,.ui-draggable{-ms-touch-action:none;touch-action:none}.meta-box-sortables.ui-sortable,.widgets-holder-wrap .ui-draggable,.widgets-holder-wrap .ui-sortable,.menu.ui-sortable{-ms-touch-action:auto;touch-action:auto}.meta-box-sortables.ui-sortable .hndle,.menu.ui-sortable .menu-item-handle{-ms-touch-action:none;touch-action:none}.accordion-section{border-bottom:1px solid #dfdfdf;margin:0}.accordion-section.open .accordion-section-content,.no-js .accordion-section .accordion-section-content{display:block}.accordion-section.open:hover{border-bottom-color:#dfdfdf}.accordion-section-content{display:none;padding:10px 20px 15px;overflow:hidden;background:#fff;border-right:1px solid #dfdfdf;border-left:1px solid #dfdfdf}.accordion-section-title{margin:0;padding:12px 15px 15px;position:relative;border-right:1px solid #dfdfdf;border-left:1px solid #dfdfdf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.js .accordion-section-title{cursor:pointer}.js .accordion-section-title:after{position:absolute;top:12px;left:10px;z-index:1}.accordion-section-title:focus{outline:0}.accordion-section-title:hover:after,.accordion-section-title:focus:after{border-color:#aaa transparent}.cannot-expand .accordion-section-title{cursor:auto}.cannot-expand .accordion-section-title:after{display:none}.control-section .accordion-section-title{border-right:0;border-left:0;padding:10px 14px 11px 10px;line-height:21px;background:#fff}.control-section .accordion-section-title:after{top:11px}.js .control-section:hover .accordion-section-title,.js .control-section .accordion-section-title:hover,.js .control-section.open .accordion-section-title,.js .control-section .accordion-section-title:focus{color:#222;background:#f5f5f5}.control-section.open .accordion-section-title{border-bottom:1px solid #dfdfdf}.sticky-menu #TB_window .updated{margin:16px 0 0}li#wp-admin-bar-menu-toggle{display:none}@media screen and (max-width:480px){div.widget-liquid-left{width:100%;float:none;border-left:0;padding-left:0}#widgets-left .sidebar-name{margin-left:0}#widgets-left #available-widgets .widget-top{margin-left:0}#widgets-left .inactive-sidebar .widgets-sortables{margin-left:0}div.widget-liquid-right{width:100%;float:none}div.widget{margin:0 auto 10px!important;max-width:480px}}@media screen and (max-width:320px){div.widget{max-width:320px}}@media only screen and (max-width:768px){#col-left{width:100%}#col-right{width:100%}}@media only screen and (min-width:769px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (max-width:860px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (min-width:980px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (max-width:768px){#col-left{width:100%}#col-right{width:100%}.form-field input,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}#menu-locations-wrap .widefat{width:100%}}@media only screen and (min-width:1250px){#widgets-left #available-widgets .widget{width:49%;float:right}.widget.ui-draggable-dragging{min-width:49%}#widgets-left #available-widgets .widget:nth-child(even){float:left}#widgets-right .sidebars-column-1,#widgets-right .sidebars-column-2{float:right;width:49%}#widgets-right .sidebars-column-1{margin-left:2%}#widgets-right.single-sidebar .sidebars-column-1,#widgets-right.single-sidebar .sidebars-column-2{float:none;width:100%;margin:0}}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){tr.wp-locked .locked-indicator{background-image:url(../images/lock-2x.png);background-size:16px 16px}#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize-2x.gif) no-repeat scroll left bottom;background-size:11px 11px}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize-rtl-2x.gif) no-repeat scroll left bottom}div.star-holder{background:url(../images/stars-2x.png?ver=20121108) repeat-x bottom right;background-size:21px 37px}div.star-holder .star-rating{background:url(../images/stars-2x.png?ver=20121108) repeat-x top right;background-size:21px 37px}.wp-full-overlay .collapse-sidebar-arrow{background-image:url(../images/arrows-2x.png);background-size:15px 123px}.spinner,.imgedit-wait,.customize-loading #customize-container,.revision-tick.completed-false,#theme-installer .wp-full-overlay-main{background-image:url(../images/spinner-2x.gif)}}.locale-zh-cn .howto,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn #utc-time,.locale-zh-cn #local-time,.locale-zh-cn p.install-help,.locale-zh-cn p.help,.locale-zh-cn p.description,.locale-zh-cn span.description,.locale-zh-cn .form-wrap p{font-style:normal}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #wp-fullscreen-tagline{font-family:KaiTi,"楷体",sans-serif}.locale-zh-cn #wp-fullscreen-modes a{font-size:12px}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de .inline-edit-row fieldset label span.title{width:7em}.locale-de-de .inline-edit-row fieldset label span.input-text-wrap{margin-right:7em}.locale-de-de #customize-header-actions .button{padding:0 5px 1px}.locale-de-de #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru .inline-edit-row fieldset label span.title{width:8em}.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}.locale-ru-ru.press-this .posting{margin-left:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title{width:8em}.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}@-ms-viewport{width:device-width}@media screen and (max-width:782px){html.wp-toolbar{padding-top:46px}body{min-width:240px;overflow-x:hidden}body *{-webkit-tap-highlight-color:rgba(0,0,0,0)!important}#wpwrap{background:#f0f0f0}#wpcontent,.auto-fold #wpcontent{position:relative;margin-right:0;padding-right:10px}.wrap{margin-left:12px;margin-right:0}.col-wrap{padding:0}.sticky-menu #adminmenuwrap{position:relative;z-index:auto;top:0}#screen-meta,#screen-meta-links,#collapse-menu,.post-format-select{display:none!important}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=number]{-webkit-appearance:none;padding:6px 10px}input.code{padding-bottom:5px;padding-top:10px}input[type=checkbox],.widefat th input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat th input[type=checkbox]{margin-bottom:8px}input[type=checkbox]:checked:before,.widefat th input[type=checkbox]:before{font:400 30px/1 Dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}.wrap .add-new-h2,.wrap .add-new-h2:active{padding:10px 15px;font-size:14px}.wp-color-result{height:auto;padding-right:45px}.wp-color-result:after{font-size:14px;height:auto;padding:6px 14px}#createuser .form-field input{width:100%}.wrap div.updated,.wrap div.error,.media-upload-form div.error{margin:20px 0 10px;padding:5px 10px;font-size:14px;line-height:175%}.auto-fold #adminmenu,.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{position:absolute;width:190px;z-index:100}.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{display:none}.auto-fold #adminmenu li.menu-top{width:100%}.auto-fold #adminmenu li a{font-size:16px;padding:5px}.auto-fold #adminmenu li.menu-top .wp-submenu>li>a{padding:10px 20px 10px 10px}.auto-fold #adminmenu .wp-menu-name{display:block;margin-right:35px}.auto-fold ul#adminmenu a.wp-has-current-submenu:after,.auto-fold ul#adminmenu>li.current>a.current:after{border-width:8px;margin-top:-8px}.auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{display:none}#adminmenu .wp-submenu{position:relative;display:none}.auto-fold #adminmenu .selected .wp-submenu,.auto-fold #adminmenu .wp-menu-open .wp-submenu{position:relative;display:block;top:0;right:-1px;-webkit-box-shadow:none;box-shadow:none}.auto-fold #adminmenu .selected .wp-submenu:after,.auto-fold #adminmenu .wp-menu-open .wp-submenu:after{display:none}.auto-fold #adminmenu .opensub .wp-submenu{display:none}.auto-fold #adminmenu .selected .wp-submenu{display:block}.auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after{display:block}.auto-fold #adminmenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu{position:relative;right:-1px;left:0;top:0}#adminmenu .wp-submenu .wp-submenu-head{display:none}#wp-responsive-toggle{position:fixed;top:5px;right:4px;padding-left:10px;z-index:99999;border:0;box-sizing:border-box;-moz-box-sizing:border-box}.wrap .icon32+h2{margin-top:-2px}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#333}.wp-responsive-open #wpbody{left:-190px}.auto-fold .wp-responsive-open #adminmenuback,.auto-fold .wp-responsive-open #adminmenuwrap{display:block}#post-body-content{min-width:0}#titlediv #title-prompt-text,#wp-fullscreen-title-prompt-text{padding:10px}.post-format-options{padding-left:0}.post-format-options a{margin-left:5px;margin-bottom:5px;min-width:52px}.post-format-options .post-format-title{font-size:11px}.post-format-options a div{height:28px;width:28px}.post-format-options a div:before{font-size:26px!important}.postbox{font-size:14px}#poststuff h3,.metabox-holder h3{padding:12px}.postbox .handlediv{margin-top:3px}#post-visibility-select{line-height:280%}.wp-core-ui .save-post-visibility,.wp-core-ui .save-timestamp{vertical-align:middle;margin-left:15px}.timestamp-wrap select#mm{display:block;width:100%;margin-bottom:10px}.timestamp-wrap #jj,.timestamp-wrap #aa,.timestamp-wrap #hh,.timestamp-wrap #mn{padding:12px 3px;font-size:14px;margin-bottom:5px;width:auto;text-align:center}ul.category-tabs{margin:30px 0 15px}ul.category-tabs li.tabs{padding:15px}.press-this ul.category-tabs li.tabs{padding:3px 5px 5px}ul.categorychecklist li{margin-bottom:15px}ul.categorychecklist ul{margin-top:15px}.category-add input[type=text],.category-add select{max-width:none;margin-bottom:15px}.tagsdiv .newtag{width:100%;padding:25px 10px;margin-bottom:15px}.tagchecklist{margin:25px 10px}.tagchecklist span{font-size:16px;line-height:120%}#diff-next-revision,#diff-previous-revision{margin-top:-1em}table.diff{-ms-word-break:break-all;word-break:break-all;word-wrap:break-word}#commentstatusdiv p{line-height:2.8}.mceToolbar *{white-space:normal!important}.mceToolbar tr,.mceToolbar td{float:right!important}.wp_themeSkin a.mceButton{width:30px;height:30px}.wp_themeSkin .mceButton .mceIcon{margin-top:5px;margin-right:5px}.wp_themeSkin .mceSplitButton{margin-top:1px}.wp_themeSkin .mceSplitButton td a.mceAction{padding-top:6px;padding-bottom:6px;padding-right:6px;padding-left:3px}.wp_themeSkin .mceSplitButton td a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen{padding-top:6px;padding-bottom:6px;background-position:1px 6px}.wp_themeSkin table.mceListBox{margin:5px}div.quicktags-toolbar input{padding:10px 20px}#wp-content-editor-tools{overflow:hidden;padding:20px 0 1px 15px;top:1px}a.wp-switch-editor{font-size:16px;line-height:1em;margin:3px 7px 0 0;padding:12px 15px}#wp-content-media-buttons a{font-size:16px;line-height:37px;height:39px;padding:0 15px 0 20px}.wp-media-buttons span.wp-media-buttons-icon,.wp-media-buttons span.jetpack-contact-form-icon{width:22px!important;margin-top:-3px!important;margin-right:-5px!important}.wp-media-buttons .add_media span.wp-media-buttons-icon:before,.wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before{font-size:20px!important}#content_wp_fullscreen{display:none}.misc-pub-section{padding:20px 10px}.misc-pub-section>a{float:left;font-size:16px}#delete-action,#publishing-action{line-height:47px}.subsubsub{font-size:16px;text-align:center;margin-bottom:15px}.tablenav{height:auto}.tablenav.top{margin:0}.tablenav.bottom{position:relative;margin-top:15px}.tablenav br{display:none}.tablenav br.clear{display:block}#wpbody-content{padding-bottom:100px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.tablenav.top .actions,.view-switch{display:none}.tablenav.top .displaying-num{display:none}.tablenav.bottom .displaying-num{position:absolute;left:0;top:10px;font-size:14px}.tablenav-pages{width:100%;text-align:center;margin:0 0 25px}.tablenav.bottom .tablenav-pages{margin-top:25px}.tablenav.top .tablenav-pages.one-page{display:none}.tablenav.bottom .tablenav-pages.one-page{margin:15px 0 0;height:0}.tablenav-pages .pagination-links .paging-input{font-size:18px}.tablenav-pages .pagination-links a{padding:8px 20px 11px;font-size:18px;background:rgba(0,0,0,.05)}.tablenav-pages .pagination-links .current-page{padding:10px;font-size:14px}.form-wrap>p{display:none}.comment-count{font-size:14px}.fixed .column-date,.fixed .column-author,.column-categories,.column-tags,.tags .column-description,.media .column-parent,.users .column-email,.users .column-name,.sites .column-registered,.sites .column-users{display:none}.fixed .column-comment .comment-author{display:block}.column-title{width:85%}.fixed .column-comments,.widefat .check-column{width:35px}.widefat thead .check-column,.widefat tfoot .check-column{padding:10px 0}.widefat *{word-wrap:normal}#wpbody-content .quick-edit-row-post .inline-edit-col-left,#wpbody-content .quick-edit-row-post .inline-edit-col-right,#wpbody-content .inline-edit-row-post .inline-edit-col-center,#wpbody-content .quick-edit-row-page .inline-edit-col-left,#wpbody-content .quick-edit-row-page .inline-edit-col-right,#wpbody-content .bulk-edit-row-post .inline-edit-col-right,#wpbody-content .bulk-edit-row .inline-edit-col-left,#wpbody-content .bulk-edit-row-page .inline-edit-col-right,#wpbody-content .bulk-edit-row .inline-edit-col-bottom{float:none;width:100%}#wpbody-content .quick-edit-row fieldset .inline-edit-col label,#wpbody-content .quick-edit-row fieldset .inline-edit-group label,#wpbody-content .bulk-edit-row fieldset .inline-edit-col label,#wpbody-content .bulk-edit-row fieldset .inline-edit-group label{max-width:none;float:none;margin-bottom:5px}#wpbody .bulk-edit-row fieldset select{display:block;width:100%;max-width:none;-moz-box-sizing:border-box;box-sizing:border-box}.inline-edit-row fieldset ul.cat-checklist label,.inline-edit-row #bulk-titles div{font-size:16px}.inline-edit-row fieldset label span.title{float:none}.inline-edit-row fieldset label.inline-edit-tags{padding:0 .5em}.inline-edit-row fieldset .inline-edit-col label.inline-edit-tags{padding:0}.inline-edit-row fieldset label span.input-text-wrap{margin-right:0}.inline-edit-row fieldset input[name=jj],.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=mn]{width:3em}.inline-edit-row fieldset input[name=aa]{width:4.5em}#bulk-titles div{margin:.8em .3em}#bulk-titles div a{height:22px}.tags .column-posts{width:50px}.tags .column-slug{width:30%}.comments .column-response{width:35%}.users .column-role{width:35%}.sites .column-blogname{width:55%}#wpbody-content #update-themes-table .plugin-title{width:auto}.form-table{-moz-box-sizing:border-box;box-sizing:border-box}.form-table th,.form-table td{display:block;width:auto;vertical-align:middle}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-left:10px}textarea,input{font-size:16px}.form-table td input[type=text],.form-table td input[type=password],.form-table td select,.form-table td textarea,.form-table span.description,#profile-page .form-table textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;box-sizing:border-box;-moz-box-sizing:border-box}input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text,input[type=number].small-text,.form-table input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;padding:8px}.form-table span.description{padding:4px 0 0;line-height:1.4em}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{padding-top:8px;padding-right:0}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#utc-time{margin-top:10px}#utc-time,#local-time{display:block;float:none;padding:0;line-height:2}.wp_attachment_details label[for=content]{font-size:14px;line-height:1.5em}.link-manager-php #posts-filter{margin-top:25px}.link-manager-php .tablenav.bottom{overflow:hidden}.links-table #link_rel{max-width:none}.links-table th,.links-table td{padding:10px 0}body.nav-menus-php{min-width:0!important}#nav-menus-frame{margin-right:0;float:none;width:100%}#wpbody-content #menu-settings-column{display:block;width:100%;float:none;margin-right:0}#side-sortables .add-menu-item-tabs{margin:15px 0 14px}ul.add-menu-item-tabs li.tabs{padding:13px 15px 14px}.nav-menus-php .item-controls .item-type{margin-top:2px}.nav-menus-php .customlinkdiv .howto input{width:65%}.nav-menus-php .quick-search{width:85%}#menu-management-liquid{margin-top:25px}.nav-menus-php .menu-name-label.howto span{margin-top:13px}.menu-name-label #menu-name{margin-top:4px}.nav-menus-php .major-publishing-actions .publishing-action{margin-top:6px}.nav-menus-php .delete-action{font-size:14px;line-height:50px;margin-top:12px}.menu-item-bar .menu-item-handle,.menu-item-settings,.description-wide{width:auto}.menu-item-settings{padding:10px}.menu-item-settings .description-thin,.menu-item-settings .description-wide{width:100%;height:auto}.menu-item-settings input{width:100%}.menu-settings dl{padding-right:0}.menu-settings dd{float:none;width:100%;margin-bottom:15px}.menu-settings dt{float:none;width:auto;margin-right:0;margin-bottom:15px}.available-theme .action-links .delete-theme{float:none;margin:0;padding:0;clear:both}.available-theme .action-links .delete-theme a{padding:0}#templateside{float:none;width:auto}#templateside li{margin:0}#templateside li a{display:block;padding:5px}#templateside .highlight{padding:5px;margin-right:-5px;margin-top:-5px}#template div{float:none;margin:0;width:auto}#template textarea{width:100%}.fileedit-sub .alignright{margin-top:15px}.wp-list-table.plugins{position:relative;margin-top:35px;margin-bottom:50px}.wp-list-table.plugins thead .column-description,#wpbody-content .wp-list-table.plugins tfoot .column-description,.wp-list-table.plugins th#description{display:none}#wpbody-content .wp-list-table.plugins,#wpbody-content .wp-list-table.plugins thead,#wpbody-content .wp-list-table.plugins tbody,#wpbody-content .wp-list-table.plugins tr,#wpbody-content .wp-list-table.plugins .column-description,#wpbody-content .wp-list-table.plugins .plugin-title,#wpbody-content .wp-list-table.plugins .theme-title,#wpbody-content .wp-list-table.plugins .plugin-update,#wpbody-content .wp-list-table.plugins .manage-column.column-name{display:block;width:auto}.wp-list-table.plugins thead,.wp-list-table.plugins tfoot{position:absolute;top:-35px;right:0;left:0;width:auto;height:35px}.wp-list-table.plugins tfoot{bottom:-35px;top:auto}.active,.inactive{padding-top:0}.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-top:13px;padding-bottom:4px}.plugins tr.active+tr.inactive th.check-column,.plugins tr.active+tr.inactive td,.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title,.wp-list-table.plugins tbody th{box-shadow:none;-webkit-box-shadow:none}.plugins tbody{padding:1px 0 0}.plugins tr.active+tr.inactive td.column-description{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);-ms-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);-o-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins tr.active+tr.inactive th.check-column,.plugins tr.active+tr.inactive td{border-top:0}.wp-list-table.plugins .column-description{padding-top:0}.wp-list-table.plugins .manage-column.column-name,.wp-list-table.plugins .column-description,.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-left:12px;padding-right:46px}.wp-list-table.plugins tr{position:relative}.wp-list-table.plugins th.check-column,.wp-list-table.plugins tr.update th.check-column{position:absolute;height:auto;top:0;bottom:0;right:0;padding-right:2px;padding-top:18px}.wp-list-table.plugins thead th.check-column,.wp-list-table.plugins tfoot th.check-column{padding-right:3px;padding-top:11px;background:0 0}.widefat tbody th.check-column input[type=checkbox]{margin-top:-3px;margin-right:8px}.wp-list-table.plugins .active .check-column input,.wp-list-table.plugins .update .check-column input{margin-right:5px}.wp-list-table.plugins thead .check-column input,.wp-list-table.plugins tfoot .check-column input{margin-top:-6px}.wp-list-table.plugins .active th.check-column{background:0 0}.wp-list-table.plugins .plugin-title strong,.wp-list-table.plugins .theme-title strong{font-size:1.4em;line-height:1.6em}table.plugin-install .column-name,table.plugin-install .column-version,table.plugin-install .column-rating,table.plugin-install .column-description{display:block;width:auto}table.plugin-install th.column-name,table.plugin-install th.column-version,table.plugin-install th.column-rating,table.plugin-install th.column-description{display:none}table.plugin-install td.column-name strong{font-size:1.4em;line-height:1.6em}table.plugin-install #the-list td{-webkit-box-shadow:none;box-shadow:none}table.plugin-install #the-list tr{display:block;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#dashboard_recent_comments #the-comment-list .comment-item .avatar{height:30px;width:30px;margin:4px 0 5px 10px}.about-wrap .feature-section.one-col>div,.about-wrap .feature-section.two-col>div,.about-wrap .three-col.about-updates>div{width:100%;margin:0;float:none}.about-wrap .about-colors .color-option{width:49%}.comment-ays{border-bottom:0}#wpfooter{display:none}#comments-form .checkforspam{display:none}.press-this a.wp-switch-editor{font:13px/19px "Open Sans",sans-serif;margin:5px 5px 0 0;padding:3px 8px 4px}.press-this #wp-content-media-buttons a{padding:0;line-height:normal;height:auto}.press-this #wp-content-editor-tools{padding:0;top:3px}.press-this .category-tabs{margin-top:0}.press-this .tagsdiv .newtag{width:120px;padding:3px 5px;margin-bottom:0}.press-this .tagchecklist{padding:0;margin-bottom:0}.press-this .wp_themeSkin a.mceButton{width:20px;height:20px}.press-this .wp_themeSkin .mceButton .mceIcon{margin:0}.press-this #poststuff h3,.press-this .metabox-holder h3{padding:7px 12px}.interim-login input[type=checkbox],.press-this input[type=checkbox],.press-this input[type=radio]{height:16px;width:16px}.interim-login input[type=checkbox]:checked:before,.press-this input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px -4px 0 0}.press-this input[type=radio]:checked:before{font:400 21px/1 dashicons;width:6px;height:6px;margin:4px}.press-this ul.categorychecklist ul,.press-this ul.categorychecklist li{margin-top:0;margin-bottom:0}.press-this div.quicktags-toolbar input{padding:2px 4px}.press-this textarea,.press-this input{font-size:14px}.press-this .tagchecklist span{font-size:13px;line-height:1.8em}}@media only screen and (max-width:500px){.about-wrap{margin-left:20px;margin-right:10px}.about-wrap h1,.about-text{margin-left:0}.about-text{margin-bottom:.25em}.about-wrap .wp-badge{position:relative;margin-bottom:1.5em;width:100%}.about-wrap .feature-section.three-col div{width:100%;float:none}.about-wrap .three-col.about-updates .col-1{padding:0;float:none}.about-wrap .three-col.about-updates .col-2{margin:0 0 20px;width:100%;float:none}#wp-content-media-buttons a{font-size:14px;padding:0 10px}}@media screen and (max-width:782px){#wpadminbar #wp-admin-bar-menu-toggle a{display:block;padding:0;overflow:hidden;outline:0;text-decoration:none;border:1px solid transparent;background:0 0;height:44px;margin-right:-1px}li#wp-admin-bar-menu-toggle{display:block}#wpadminbar #wp-admin-bar-menu-toggle a:hover{border:1px solid transparent}#wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{content:'\f228';display:inline-block;float:right;font:400 40px/45px Dashicons;vertical-align:middle;outline:0;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:44px;width:50px;padding:0;border:0;text-align:center;text-decoration:none;box-sizing:border-box;-moz-box-sizing:border-box}}@media screen and (max-width:600px){#adminmenuwrap,#adminmenuback{display:none}.wp-responsive-open #adminmenuwrap,.wp-responsive-open #adminmenuback{display:block}#wpwrap.wp-responsive-open{overflow-x:hidden}html.wp-toolbar{padding-top:0}#wpbody{padding-top:46px}.auto-fold #adminmenu{top:46px}#wp-responsive-overlay{position:fixed;top:0;right:0;width:100%;height:100%;z-index:400}.welcome-panel .welcome-panel-close{overflow:hidden;text-indent:100%;white-space:nowrap;width:20px;height:20px;left:0;padding:5px}#welcome-panel.welcome-panel .welcome-panel-close::before{font-size:20px;margin:0}div#post-body.metabox-holder.columns-1{overflow-x:hidden}.color-option{width:49%}} \ No newline at end of file diff --git a/src/wp-admin/css/wp-admin.css b/src/wp-admin/css/wp-admin.css new file mode 100644 index 0000000..7ae4d6c --- /dev/null +++ b/src/wp-admin/css/wp-admin.css @@ -0,0 +1,13175 @@ +/*------------------------------------------------------------------------------ + + +Hello, this is the main WordPress admin CSS file. +All the important stuff is in here. + + +TABLE OF CONTENTS: +------------------ + 1.0 - Text Elements + 2.0 - Forms + 3.0 - Actions + 4.0 - Notifications + 5.0 - TinyMCE + 6.0 - Admin Header + 6.1 - Screen Options Tabs + 6.2 - Help Menu + 7.0 - Main Navigation + 8.0 - Layout Blocks + 9.0 - Dashboard +10.0 - List Posts + 10.1 - Inline Editing +11.0 - Write/Edit Post Screen + 11.1 - Custom Fields + 11.2 - Post Revisions + 11.3 - Featured Images + 11.4 - Post Format Selection +12.0 - Categories +13.0 - Tags +14.0 - Media Screen + 14.1 - Media Library + 14.2 - Image Editor +15.0 - Comments Screen +16.0 - Themes + 16.1 - Manage Themes + 16.2 - Install Themes + 16.3 - Custom Header + 16.4 - Custom Background +17.0 - Plugins +18.0 - Users +19.0 - Tools +20.0 - Settings +21.0 - Admin Footer +22.0 - About Pages +23.0 - Full Overlay w/ Sidebar +24.0 - Customize Loader +25.0 - Tabbed Admin Screen Interface +26.0 - Misc +27.0 - Localization + +------------------------------------------------------------------------*/ + +/* 2 column liquid layout */ +#wpwrap { + height: auto; + min-height: 100%; + width: 100%; + position: relative; + -webkit-font-smoothing: subpixel-antialiased; +} + +#wpcontent { + height: 100%; +} + +#wpcontent, +#wpfooter { + margin-left: 180px; +} + +.folded #wpcontent, +.folded #wpfooter { + margin-left: 56px; +} + +#wpbody-content { + padding-bottom: 65px; + float: left; + width: 100%; + overflow: visible !important; +} + +#adminmenuback, +#adminmenuwrap, +#adminmenu, +#adminmenu .wp-submenu { + width: 160px; +} + +#adminmenuback { + position: absolute; + top: 0; + bottom: 0; + z-index: -1; +} + +#adminmenu { + clear: left; + margin: 12px 0 0; + padding: 0; + list-style: none; +} + +.folded #adminmenuback, +.folded #adminmenuwrap, +.folded #adminmenu, +.folded #adminmenu li.menu-top { + width: 36px; +} + +/* inner 2 column liquid layout */ + +.inner-sidebar { + float: right; + clear: right; + display: none; + width: 281px; + position: relative; +} + +.columns-2 .inner-sidebar { + margin-right: auto; + width: 286px; + display: block; +} + +.inner-sidebar #side-sortables, +.columns-2 .inner-sidebar #side-sortables { + min-height: 300px; + width: 280px; + padding: 0; +} + +.has-right-sidebar .inner-sidebar { + display: block; +} + +.has-right-sidebar #post-body { + float: left; + clear: left; + width: 100%; + margin-right: -2000px; +} + +.has-right-sidebar #post-body-content { + margin-right: 300px; + float: none; + width: auto; +} + +/* 2 columns main area */ + +#col-container, +#col-left, +#col-right { + overflow: hidden; + padding: 0; + margin: 0; +} + +#col-left { + width: 35%; +} + +#col-right { + float: right; + clear: right; + width: 65%; +} + +.col-wrap { + padding: 0 7px; +} + +/* utility classes */ +.alignleft { + float: left; +} + +.alignright { + float: right; +} + +.textleft { + text-align: left; +} + +.textright { + text-align: right; +} + +.clear { + clear: both; +} + +/* Hide visually but not from screen readers */ +.screen-reader-text, +.screen-reader-text span, +.ui-helper-hidden-accessible { + position: absolute; + margin: -1px; + padding: 0; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(0 0 0 0); + border: 0; +} + +.screen-reader-shortcut { + position: absolute; + top: -1000em; +} + +.screen-reader-shortcut:focus { + left: 6px; + top: -25px; + height: auto; + width: auto; + display: block; + font-size: 14px; + font-weight: 600; + padding: 15px 23px 14px; + background: #f1f1f1; + color: #21759b; + z-index: 100000; + line-height: normal; + -webkit-box-shadow: 0 0 2px 2px rgba(0,0,0,.6); + box-shadow: 0 0 2px 2px rgba(0,0,0,.6); + text-decoration: none; + outline: none; +} + +.hidden, +.js .closed .inside, +.js .hide-if-js, +.no-js .hide-if-no-js, +.js.wp-core-ui .hide-if-js, +.js .wp-core-ui .hide-if-js, +.no-js.wp-core-ui .hide-if-no-js, +.no-js .wp-core-ui .hide-if-no-js { + display: none; +} + +/* include margin and padding in the width calculation of input and textarea */ +input, +input[type="text"], +input[type="password"], +input[type="number"], +input[type="search"], +input[type="email"], +input[type="url"], +textarea { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; /* ie8 only */ + box-sizing: border-box; +} + +input[type="checkbox"], +input[type="radio"] { + border-width: 1px; + border-style: solid; + clear: none; + cursor: pointer; + display: inline-block; + line-height: 0; + height: 16px; + margin: -4px 4px 0 0; + outline: 0; + padding: 0 !important; + text-align: center; + vertical-align: middle; + width: 16px; + min-width: 16px; + -webkit-appearance: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +td > input[type="checkbox"], +.wp-admin p input[type=checkbox], +.wp-admin p input[type=radio] { + margin-top: 0; +} + +.wp-admin p label input[type=checkbox] { + margin-top: -4px; +} + +.wp-admin p label input[type=radio] { + margin-top: -2px; +} + +input[type=radio] { + border-radius: 50%; + margin-right: 4px; + line-height: 10px; +} + +input[type=checkbox]:disabled, +input[type=radio]:disabled, +input[type=checkbox]:disabled:checked:before, +input[type=radio]:disabled:checked:before { + opacity: 0.7; +} + +input[type=checkbox]:checked:before, +input[type=radio]:checked:before { + float: left; + display: inline-block; + vertical-align: middle; + width: 16px; + font: normal 21px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +input[type=checkbox]:checked:before { + content: '\f147'; + margin: -3px 0 0 -4px; +} + +input[type=radio]:checked:before { + content: '\2022'; + text-indent: -9999px; + border-radius: 50px; + font-size: 24px; + width: 6px; + height: 6px; + margin: 4px; + line-height: 16px; +} + +@-moz-document url-prefix() { + input[type=checkbox], + input[type=radio], + .form-table input.tog { + margin-bottom: -1px; + } +} + +/* Search */ +input[type="search"] { + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration { + display: none; +} + +.ie8 input[type="password"], +.ie8 .login form .input { + font-family: sans-serif; +} + +/* general */ +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + +body { + font-family: "Open Sans", sans-serif; + font-size: 13px; + line-height: 1.4em; + min-width: 600px; +} + +body.iframe { + min-width: 0; + padding-top: 1px; +} + +body.login { + background: #fbfbfb; + min-width: 0; +} + +iframe, +img { + border: 0; +} + +td, +textarea, +input, +select, +button { + font-family: inherit; + font-size: inherit; + font-weight: inherit; +} + +td, +textarea { + line-height: inherit; +} + +textarea { + overflow: auto; +} + +textarea, +input, +select { + font-size: 14px; + padding: 3px 5px; + line-height: 15px; + border-radius: 0; /* Reset mobile webkit's default element styling */ +} + +textarea { + padding: 2px 6px; + line-height: 1.4; +} + +a, +input[type="text"], +input[type="password"], +input[type="number"], +input[type="search"], +input[type="email"], +input[type="url"], +textarea, +div, +select { + outline: 0; +} + +.wp-admin input[type="file"] { + padding: 3px 0; +} + +a:focus, +a:active { + outline: thin dotted; +} + +#adminmenu a:focus, +#adminmenu a:active, +.screen-reader-text:focus { + outline: none; +} + +blockquote, +q { + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; +} + +p, +.wp_attachment_details label[for="content"] { + font-size: 13px; + line-height: 1.5; + margin: 1em 0; +} + +blockquote { + margin: 1em; +} + +label { + cursor: pointer; +} + +li, +dd { + margin-bottom: 6px; +} + +input, +select { + margin: 1px; + padding: 3px 5px; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + display: block; + font-weight: 600; +} + +h1 { + font-size: 2em; + margin: .67em 0; +} + +h2 { + font-size: 1.5em; + margin: .83em 0; + font-weight: 400; +} + +h3 { + font-size: 1.3em; + margin: 1em 0; +} + +h4 { + font-size: 1em; + margin: 1.33em 0; +} + +h5 { + font-size: 0.83em; + margin: 1.67em 0; +} + +h6 { + font-size: 0.67em; + margin: 2.33em 0; +} + +ul, +ol { + padding: 0; +} + +ul { + list-style: none; +} + +ol { + list-style-type: decimal; + margin-left: 2em; +} + +ul.ul-disc { + list-style: disc outside; +} + +ul.ul-square { + list-style: square outside; +} + +ol.ol-decimal { + list-style: decimal outside; +} + +ul.ul-disc, +ul.ul-square, +ol.ol-decimal { + margin-left: 1.8em; +} + +ul.ul-disc > li, +ul.ul-square > li, +ol.ol-decimal > li { + margin: 0 0 0.5em; +} + +/* @noflip */ +.code, +code { + font-family: Consolas, Monaco, monospace; + direction: ltr; +} + +input.code { + padding-top: 6px; +} + +textarea.code { + line-height: 1.4; + padding: 4px 6px 1px 6px; +} + +kbd, +code { + padding: 3px 5px 2px 5px; + margin: 0 1px; + font-size: 13px; +} + +.subsubsub { + list-style: none; + margin: 8px 0 0; + padding: 0; + font-size: 13px; + float: left; +} + +.subsubsub a { + line-height: 2; + padding: .2em; + text-decoration: none; +} + +.subsubsub a .count, +.subsubsub a.current .count { + color: #999; + font-weight: normal; +} + +.subsubsub a.current { + font-weight: 600; + border: none; +} + +.subsubsub li { + display: inline-block; + margin: 0; + padding: 0; + white-space: nowrap; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="email"], +input[type="number"], +input[type="search"], +input[type="tel"], +input[type="url"], +select, +.tablenav-pages span.current, +#titlediv #title, +#postcustomstuff table, +#postcustomstuff input, +#postcustomstuff textarea, +.imgedit-menu div, +.plugin-update-tr .update-message, +#poststuff .inside .the-tagcloud, +.nav-menus-php .list-container, +.menu-item-handle, +.link-to-original, +.nav-menus-php .major-publishing-actions .form-invalid, +#TB_window, +.tbtitle, +.highlight { + border-width: 1px; + border-style: solid; +} + +/* .widefat - main style for tables */ +.widefat { + border-spacing: 0; + width: 100%; + clear: both; + margin: 0; +} + +.widefat * { + word-wrap: break-word; +} + +.widefat a { + text-decoration: none; +} + +.widefat td, +.widefat th { + padding: 8px 10px; +} +.widefat tfoot th { + border-bottom: none; +} + +.widefat .no-items td { + border-bottom-width: 0; +} + +.widefat td { + vertical-align: top; +} + +.widefat td, +.widefat td p, +.widefat td ol, +.widefat td ul { + font-size: 13px; + line-height: 1.5em; +} + +.widefat th { + text-align: left; + line-height: 1.3em; + font-size: 14px; +} + +.widefat th input { + margin: 0 0 0 8px; + padding: 0; + vertical-align: text-top; +} + +.widefat .check-column { + width: 2.2em; + padding: 6px 0 25px; + vertical-align: top; +} + +.widefat th input[type=checkbox] { + margin-top: -1px; +} + +.widefat tbody th.check-column { + padding: 9px 0 22px; +} + +.widefat.media .check-column { + padding-top: 8px; +} + +.widefat thead th.check-column, +.widefat tbody th.check-column, +.widefat tfoot th.check-column { + padding: 11px 0 0 3px; +} + +.widefat thead th.check-column { + padding-top: 10px; +} + +.plugins tbody th.check-column, +.plugins tbody { + padding: 8px 0 0 2px; +} + +.plugins tbody th.check-column input[type=checkbox] { + margin-top: 4px; +} + +#update-plugins-table tbody td p { + margin-top: 0; +} + +#update-plugins-table tbody td p strong { + font-size: 14px; +} + +.plugins thead th.check-column, +.plugins tfoot th.check-column, +.plugins .inactive th.check-column { + padding-left: 6px; +} + +.upgrade .plugins td, +.upgrade .plugins th { + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +.upgrade .plugins tr:last-of-type td, +.upgrade .plugins tr:last-of-type th { + -webkit-box-shadow: none; + box-shadow: none; +} + +#update-plugins-table thead th.check-column, +#update-plugins-table tfoot th.check-column { + padding-top: 11px; +} + +.update-php div.updated, +.update-php div.error { + margin-left: 0; +} + +.no-js .widefat thead .check-column input, +.no-js .widefat tfoot .check-column input { + display: none; +} + +.widefat .num, +.column-comments, +.column-links, +.column-posts { + text-align: center; +} + +.widefat th#comments { + vertical-align: middle; +} + +.wrap { + margin: 10px 20px 0 2px; +} + +div.updated, +div.error { + padding: 0 0.6em; + margin: 5px 15px 2px; +} + +div.updated p, +div.error p { + margin: 0.5em 0; + padding: 2px; +} + +.wrap div.updated, +.wrap div.error, +.media-upload-form div.error { + margin: 5px 0 15px; +} + +div.updated, +.login .message, +.press-this #message { + border: none; + padding: 1px 12px; +} + +div.error, +.login #login_error { + border: none; +} + +div.error { + padding: 1px 12px; +} + +.wrap h2, +.subtitle { + font-weight: normal; + margin: 0; +} + +.wrap h2 { + font-size: 23px; + font-weight: 400; + padding: 9px 15px 4px 0; + line-height: 29px; +} + +.subtitle { + font-size: 14px; + padding-left: 25px; +} + +.wrap .add-new-h2, +.wrap .add-new-h2:active { + margin-left: 4px; + padding: 4px 8px; + position: relative; + top: -3px; + text-decoration: none; + border: none; + border-radius: 2px; + text-shadow: none; + font-weight: 600; + font-size: 13px; +} + +.wrap h2.long-header { + padding-right: 0; +} + +html, +.wp-dialog { + background-color: #fff; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="email"], +input[type="number"], +input[type="search"], +input[type="tel"], +input[type="url"], +select { + background-color: #fff; + color: #333; +} + +select[disabled] { + color: #7f7f7f; +} + +select:focus { + border-color: #aaa; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +input[type="checkbox"]:focus, +input[type="radio"]:focus, +select:focus, +.widgets-chooser ul, +#widgets-left .widget-in-question .widget-top, +#available-widgets .widget-top:hover, +div#widgets-right .widget-top:hover { + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1); + box-shadow: 0 1px 2px rgba(0,0,0,0.1); +} + +input[readonly] { + background-color: #eee; +} + +:-moz-placeholder, +.wp-core-ui :-moz-placeholder { + color: #a9a9a9; +} + +/*------------------------------------------------------------------------------ + 1.0 - Text Styles +------------------------------------------------------------------------------*/ + +.widget .widget-top, +.postbox h3, +.stuffbox h3, +.control-section .accordion-section-title, +h3.dashboard-widget-title, +h3.dashboard-widget-title span, +h3.dashboard-widget-title small, +.sidebar-name, +#nav-menu-header, +#nav-menu-footer, +.menu-item-handle, +.checkbox, +.side-info, +#your-profile #rich_editing, +.widefat thead th, +.widefat tfoot th { + line-height: 1.4em; +} + +.quicktags, +.search { + font-size: 12px; +} + +.icon32 { + display: none; +} + +.icon16 { + height: 18px; + width: 18px; + padding: 6px 6px; + margin: -6px 0 0 -8px; + float: left; +} + +/* New Menu icons */ + +.icon16:before { + font: normal 20px/1 'dashicons'; + speak: none; + padding: 6px 0; + height: 34px; + width: 20px; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-transition: all .1s ease-in-out; + -moz-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +.icon16.icon-dashboard:before, +#adminmenu .menu-icon-dashboard div.wp-menu-image:before { + content: '\f226'; +} + +.icon16.icon-post:before, +#adminmenu .menu-icon-post div.wp-menu-image:before { + content: '\f109'; +} + +.icon16.icon-media:before, +#adminmenu .menu-icon-media div.wp-menu-image:before { + content: '\f104'; +} + +.icon16.icon-links:before, +#adminmenu .menu-icon-links div.wp-menu-image:before { + content: '\f103'; +} + +.icon16.icon-page:before, +#adminmenu .menu-icon-page div.wp-menu-image:before { + content: '\f105'; +} + +.icon16.icon-comments:before, +#adminmenu .menu-icon-comments div.wp-menu-image:before { + content: '\f101'; + margin-top: 1px; +} + +.icon16.icon-appearance:before, +#adminmenu .menu-icon-appearance div.wp-menu-image:before { + content: '\f100'; +} + +.icon16.icon-plugins:before, +#adminmenu .menu-icon-plugins div.wp-menu-image:before { + content: '\f106'; +} + +.icon16.icon-users:before, +#adminmenu .menu-icon-users div.wp-menu-image:before { + content: '\f110'; +} + +.icon16.icon-tools:before, +#adminmenu .menu-icon-tools div.wp-menu-image:before { + content: '\f107'; +} + +.icon16.icon-settings:before, +#adminmenu .menu-icon-settings div.wp-menu-image:before { + content: '\f108'; +} + +.icon16.icon-site:before, +#adminmenu .menu-icon-site div.wp-menu-image:before { + content: '\f112' +} + +.icon16.icon-generic:before, +#adminmenu .menu-icon-generic div.wp-menu-image:before { + content: '\f111'; +} + +/* hide background-image for icons above */ +.icon16.icon-dashboard, +.menu-icon-dashboard div.wp-menu-image, +.icon16.icon-post, +.menu-icon-post div.wp-menu-image, +.icon16.icon-media, +.menu-icon-media div.wp-menu-image, +.icon16.icon-links, +.menu-icon-links div.wp-menu-image, +.icon16.icon-page, +.menu-icon-page div.wp-menu-image, +.icon16.icon-comments, +.menu-icon-comments div.wp-menu-image, +.icon16.icon-appearance, +.menu-icon-appearance div.wp-menu-image, +.icon16.icon-plugins, +.menu-icon-plugins div.wp-menu-image, +.icon16.icon-users, +.menu-icon-users div.wp-menu-image, +.icon16.icon-tools, +.menu-icon-tools div.wp-menu-image, +.icon16.icon-settings, +.menu-icon-settings div.wp-menu-image, +.icon16.icon-site, +.menu-icon-site div.wp-menu-image, +.icon16.icon-generic, +.menu-icon-generic div.wp-menu-image { + background-image: none !important; +} + +.key-labels label { + line-height: 24px; +} + +strong, b { + font-weight: 600; +} + +.pre { + /* https://developer.mozilla.org/en-US/docs/CSS/white-space */ + white-space: pre-wrap; /* css-3 */ + word-wrap: break-word; /* IE 5.5 - 7 */ +} + +.howto { + font-style: italic; + display: block; +} + +p.install-help { + margin: 8px 0; + font-style: italic; +} + +.no-break { + white-space: nowrap; +} + +hr { + border: 0; + border-top: 1px solid #ddd; + border-bottom: 1px solid #fafafa; +} + +/*------------------------------------------------------------------------------ + 2.0 - Forms +------------------------------------------------------------------------------*/ + + +.wp-admin select { + padding: 2px; + line-height: 28px; + height: 28px; + vertical-align: middle; +} + +.wp-admin .button-cancel { + padding: 0 5px; + line-height: 2; +} + +.meta-box-sortables select { + max-width: 100%; +} + +.wp-admin select[multiple] { + height: auto; +} + +.submit { + padding: 1.5em 0; + margin: 5px 0; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; +} + +form p.submit a.cancel:hover { + text-decoration: none; +} + +p.submit { + text-align: left; + max-width: 100%; + margin-top: 20px; + padding-top: 10px; +} + +.textright p.submit { + border: none; + text-align: right; +} + +table.form-table + p.submit, +table.form-table + input + p.submit, +table.form-table + input + input + p.submit { + border-top: none; + padding-top: 0; +} + +table.widefat span.delete a:hover, +table.widefat span.trash a:hover, +table.widefat span.spam a:hover, +#dashboard_recent_comments .delete a:hover, +#dashboard_recent_comments .trash a:hover, +#dashboard_recent_comments .spam a:hover, +.plugins a.delete:hover, +#all-plugins-table .plugins a.delete:hover, +#search-plugins-table .plugins a.delete:hover, +.submitbox .submitdelete:hover, +#media-items a.delete:hover, +#media-items a.delete-permanently:hover, +#nav-menu-footer .menu-delete:hover { + text-decoration: none; + border: none; +} + +#minor-publishing-actions input, +#major-publishing-actions input, +#minor-publishing-actions .preview { + text-align: center; +} + +textarea.all-options, +input.all-options { + width: 250px; +} + +input.large-text, +textarea.large-text { + width: 99%; +} + +input.regular-text, +#adduser .form-field input { + width: 25em; +} + +input.small-text { + width: 50px; + padding: 1px 6px; +} + +input[type="number"].small-text { + width: 65px; +} + +#doaction, +#doaction2, +#post-query-submit { + margin: 1px 8px 0 0; +} + +.tablenav #changeit, +.tablenav #delete_all, +.tablenav #clear-recent-list { + margin-top: 1px; +} + +.tablenav .actions select { + float: left; + margin-right: 6px; + max-width: 200px; +} + +.ie8 .tablenav .actions select { + width: 155px; +} + +.ie8 .tablenav .actions select#cat { + width: 200px; +} + +#timezone_string option { + margin-left: 1em; +} + +label, +#your-profile label + a { + vertical-align: middle; +} + +fieldset label, +#your-profile label + a { + vertical-align: middle; +} + +.options-media-php label[for*="_size_"], +#misc-publishing-actions label { + vertical-align: baseline; +} + +#misc-publishing-actions label[for="post_status"]:before { + content: '\f173'; + display: inline-block; + font: normal 20px/1 'dashicons'; + speak: none; + left: -1px; + padding: 0 5px 0 0; + position: relative; + top: 0; + text-decoration: none !important; + vertical-align: top; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#pass-strength-result { + border-style: solid; + border-width: 1px; + float: left; + margin: 13px 5px 5px 1px; + padding: 3px 5px; + text-align: center; + width: 200px; + display: none; +} +.indicator-hint { + padding-top: 8px; +} + +p.search-box { + float: right; + margin: 0; +} + +.network-admin.themes-php p.search-box { + clear: left; +} + +.search-box input[name="s"], +#search-plugins input[name="s"], +.tagsdiv .newtag { + float: left; + height: 28px; + margin: 0 4px 0 0; +} + +input[type="text"].ui-autocomplete-loading { + background: transparent url('../images/loading.gif') no-repeat right center; + visibility: visible; +} + +ul#add-to-blog-users { + margin: 0 0 0 14px; +} + +.ui-autocomplete-input.open { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.ui-autocomplete { + padding: 0; + margin: 0; + list-style: none; + position: absolute; + z-index: 10000; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-width: 1px; + border-style: solid; +} + +.ui-autocomplete li { + margin-bottom: 0; + white-space: nowrap; + text-align: left; +} + +.ui-autocomplete li a { + display: block; + height: 100%; + padding: 4px 10px; +} + +.ui-autocomplete li a.ui-state-focus { + cursor: pointer; +} + +/*------------------------------------------------------------------------------ + 3.0 - Actions +------------------------------------------------------------------------------*/ + +#major-publishing-actions { + padding: 10px; + clear: both; + border-top: 1px solid #ddd; + background: #f5f5f5; +} + +#delete-action { + line-height: 28px; + vertical-align: middle; + text-align: left; + float: left; +} + +#publishing-action { + text-align: right; + float: right; + line-height: 23px; +} + +#publishing-action .spinner { + float: left; +} + +#misc-publishing-actions { + padding: 6px 0 0; +} + +.misc-pub-section { + padding: 6px 10px 8px; +} + +.misc-pub-section:first-child { + border-top-width: 0; +} + +.misc-pub-section-last { + border-bottom-width: 0; +} + +#minor-publishing-actions { + padding: 10px 10px 0 10px; + text-align: right; +} + +#save-post { + float: left; +} + +.preview { + float: right; +} + +#sticky-span { + margin-left: 18px; +} + +.side-info { + margin: 0; + padding: 4px; + font-size: 11px; +} + +.side-info h5 { + padding-bottom: 7px; + font-size: 14px; + margin: 12px 2px 5px; + border-bottom-width: 1px; + border-bottom-style: solid; +} + +.side-info ul { + margin: 0; + padding-left: 18px; + list-style: square; +} + +.approve, +.unapproved .unapprove { + display: none; +} + +.unapproved .approve, +.spam .approve, +.trash .approve { + display: inline; +} + +td.action-links, +th.action-links { + text-align: right; +} + + +/*------------------------------------------------------------------------------ + 4.0 - Notifications +------------------------------------------------------------------------------*/ + +#update-nag, +.update-nag { + display: inline-block; + line-height: 19px; + padding: 11px 15px; + font-size: 14px; + text-align: left; + margin: 25px 20px 0 2px; +} + +.plugins .plugin-update { + padding: 0; +} + +.plugin-update .update-message { + margin: 0 10px 8px 31px; + font-weight: 600; +} + +ul#dismissed-updates { + display: none; +} + +form.upgrade { + margin-top: 8px; +} + +form.upgrade .hint { + font-style: italic; + font-size: 85%; + margin: -0.5em 0 2em 0; +} + +.update-php .spinner { + float: none; + margin: -4px 0; +} + +#ajax-loading, +.ajax-loading, +.ajax-feedback, +.imgedit-wait-spin, +.list-ajax-loading { /* deprecated */ + visibility: hidden; +} + +#ajax-response.alignleft { + margin-left: 2em; +} + +/*------------------------------------------------------------------------------ + 5.0 - TinyMCE +------------------------------------------------------------------------------*/ + +/* nothing? */ + +/*------------------------------------------------------------------------------ + 6.0 - Admin Header +------------------------------------------------------------------------------*/ +#adminmenu a, +#sidemenu a, +#taglist a, +#catlist a { + text-decoration: none; +} + +/*------------------------------------------------------------------------------ + 6.1 - Screen Options Tabs +------------------------------------------------------------------------------*/ + +#screen-options-wrap, +#contextual-help-wrap { + margin: 0; + padding: 8px 20px 12px; + position: relative; +} + +#contextual-help-wrap { + overflow: auto; + margin-left: 0 !important; +} + +#screen-meta .screen-reader-text { + visibility: hidden; +} + +#screen-meta-links { + margin: 0 20px 0 0; +} + +#screen-meta-links a { + padding: 3px 6px 3px 16px; +} + +#screen-meta-links a:focus { + outline: none; +} + +/* screen options and help tabs revert */ +#screen-meta { + display: none; + margin: 0 20px -1px 0px; + position: relative; +} + +#screen-options-link-wrap, +#contextual-help-link-wrap { + float: right; + height: 28px; + margin: 0 0 0 6px; +} + +#screen-meta-links .screen-meta-toggle { + position: relative; + top: 0; +} + +#screen-meta-links a.show-settings { + display: block; + font-size: 13px; + height: 22px; + line-height: 22px; + text-decoration: none; + z-index: 1; +} + +#screen-meta-links a:after { + right: 0; + content: '\f140'; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0 5px 0 0; + bottom: 2px; + position: relative; + vertical-align: bottom; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +#screen-meta-links a.screen-meta-active:after { + content: '\f142'; +} + +#screen-meta-links a.show-settings:hover { + text-decoration: none; +} +/* end screen options and help tabs */ + +.toggle-arrow { + background-repeat: no-repeat; + background-position: top left; + background-color: transparent; + height: 22px; + line-height: 22px; + display: block; +} + +.toggle-arrow-active { + background-position: bottom left; +} + +#screen-options-wrap h5, +#contextual-help-wrap h5 { + margin: 8px 0; + font-size: 13px; +} + +.metabox-prefs label { + display: inline-block; + padding-right: 15px; + line-height: 30px; +} + +.metabox-prefs label input[type=checkbox] { + margin-top: -4px; + margin-right: 6px; +} + +.metabox-prefs label input { + margin: 0 5px 0 2px; +} + +.metabox-prefs .columns-prefs label input { + margin: 0 2px; +} + +.metabox-prefs label a { + display: none; +} + +/*------------------------------------------------------------------------------ + 6.2 - Help Menu +------------------------------------------------------------------------------*/ + +#contextual-help-wrap { + padding: 0; +} + +#contextual-help-columns { + position: relative; +} + +#contextual-help-back { + position: absolute; + top: 0; + bottom: 0; + left: 150px; + right: 170px; + border-width: 0 1px; + border-style: solid; +} + +#contextual-help-wrap.no-sidebar #contextual-help-back { + right: 0; + + border-right-width: 0; + -webkit-border-bottom-right-radius: 2px; + border-bottom-right-radius: 2px; +} + +.contextual-help-tabs { + float: left; + width: 150px; + margin: 0; +} + +.contextual-help-tabs ul { + margin: 1em 0; +} + +.contextual-help-tabs li { + margin-bottom: 0; + list-style-type: none; + border-style: solid; + border-width: 0 0 0 2px; + border-color: transparent; +} + +.contextual-help-tabs a { + display: block; + padding: 5px 5px 5px 12px; + line-height: 18px; + text-decoration: none; + border-style: solid; + border-width: 1px 0 1px 0; + border-color: transparent; +} + +.contextual-help-tabs .active { + padding: 0; + margin: 0 -1px 0 0; + border-width: 0 0 0 2px; + border-style: solid; +} + +.contextual-help-tabs-wrap { + padding: 0 20px; + overflow: auto; +} + +.help-tab-content { + display: none; + margin: 0 22px 12px 0; + line-height: 1.6em; +} + +.help-tab-content.active { + display: block; +} + +.help-tab-content ul li { + list-style-type: disc; + margin-left: 18px; +} + +.contextual-help-sidebar { + width: 150px; + float: right; + padding: 0 8px 0 12px; + overflow: auto; +} + + +/*------------------------------------------------------------------------------ + 7.0 - Main Navigation (Left Menu) +------------------------------------------------------------------------------*/ + +#adminmenuwrap { + position: relative; + float: left; +} + +/* side admin menu */ +#adminmenu * { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +#adminmenu li { + margin: 0; + padding: 0; + cursor: pointer; +} + +#adminmenu a { + display: block; + line-height: 18px; + padding: 2px 5px; +} + +#adminmenu li.menu-top { + border: none; + min-height: 34px; + position: relative; +} + +#adminmenu .wp-submenu { + list-style: none; + position: absolute; + top: -1000em; + left: 160px; + overflow: visible; + word-wrap: break-word; +} + +#adminmenu .wp-submenu, +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + padding: 7px 0 8px; + z-index: 9999; +} + +.js #adminmenu .sub-open, +.js #adminmenu .opensub .wp-submenu, +#adminmenu a.menu-top:focus + .wp-submenu, +.no-js li.wp-has-submenu:hover .wp-submenu { + top: -1px; +} + +#adminmenu .wp-has-current-submenu .wp-submenu, +.no-js li.wp-has-current-submenu:hover .wp-submenu, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +#adminmenu .wp-has-current-submenu .wp-submenu.sub-open, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu { + position: relative; + z-index: 3; + top: auto; + left: auto; + right: auto; + bottom: auto; + border: 0 none; + margin-top: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +.folded #adminmenu .wp-submenu.sub-open, +.folded #adminmenu .opensub .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open, +.folded #adminmenu .wp-has-current-submenu.opensub .wp-submenu, +.folded #adminmenu a.menu-top:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu, +.no-js.folded #adminmenu .wp-has-submenu:hover .wp-submenu { + top: 0; + left: 36px; +} + +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + position: absolute; + top: -1000em; +} + +#adminmenu .wp-not-current-submenu .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + min-width: 160px; + width: auto; +} + +#adminmenu .wp-submenu a { + font-size: 13px; + line-height: 1.2; + margin: 0; + padding: 6px 0; +} + +#adminmenu .wp-not-current-submenu li > a, +.folded #adminmenu .wp-has-current-submenu li > a { + padding-right: 16px; + padding-left: 14px; + -moz-transition: all .1s ease-in-out; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#adminmenu .wp-has-current-submenu ul > li > a, +.folded #adminmenu li.menu-top .wp-submenu > li > a { + padding: 6px 12px; +} + +#adminmenu a.menu-top, +#adminmenu .wp-submenu-head { + font-size: 14px; + font-weight: 400; + line-height: 18px; + padding: 0; +} + +#adminmenu .wp-submenu-head, +.folded #adminmenu .wp-menu-name { + display: none; +} + +.folded #adminmenu .wp-submenu-head { + display: block; +} + +#adminmenu .wp-submenu li { + padding: 0; + margin: 0; + overflow: hidden; +} + +#adminmenu .wp-menu-image img { + padding: 9px 0 0 0px; + opacity: 0.6; + filter: alpha(opacity=60); +} + +#adminmenu div.wp-menu-name { + padding: 8px 0; +} + +#adminmenu div.wp-menu-image { + float: left; + width: 36px; + height: 30px; + margin: 0; + text-align: center; +} + +#adminmenu div.wp-menu-image.svg { + background-repeat: no-repeat; + background-position: center; + background-size: 20px auto; +} + +div.wp-menu-image:before { + font: normal 20px/1 'dashicons' !important; + speak: none; + color: #999; + padding: 8px 0; + height: 36px; + width: 20px; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -moz-transition: all .1s ease-in-out; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +.folded #adminmenu div.wp-menu-image { + width: 35px; + height: 30px; + position: absolute; + z-index: 25; +} + +.folded #adminmenu a.menu-top { + height: 34px; +} + +/* No @font-face support */ +.no-font-face #adminmenu .wp-menu-image { + display: none; +} + +.no-font-face #adminmenu div.wp-menu-name { + padding: 8px 12px; +} + +.no-font-face.auto-fold #adminmenu .wp-menu-name { + margin-left: 0; +} +/* End no @font-face support */ + +/* Sticky admin menu */ +.sticky-menu #adminmenuwrap { + position: fixed; + z-index: 99; /* Match the z-index of .wp-submenu to ensure flyout menus don't appear underneath main column elements */ +} + +/* A new arrow */ + +.wp-menu-arrow { + display: none !important; +} + +ul#adminmenu a.wp-has-current-submenu { + position: relative; +} + +ul#adminmenu a.wp-has-current-submenu:after, +ul#adminmenu > li.current > a.current:after { + right: 0; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-width: 8px; + top: 50%; + margin-top: -8px; +} + +.folded ul#adminmenu li:hover a.wp-has-current-submenu:after { + display: none; +} + +.folded ul#adminmenu a.wp-has-current-submenu:after, +.folded ul#adminmenu > li a.current:after { + border-width: 4px; + margin-top: -4px; +} + +/* flyout menu arrow */ +#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + right: 0; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-width: 8px; + top: 10px; + z-index: 10000; +} + +.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + border-width: 4px; + margin-top: -4px; + top: 18px; +} + +/* ensure that wp-submenu's box shadow doesn't appear on top of the focused menu item's background. */ +#adminmenu li.menu-top:hover, +#adminmenu li.opensub > a.menu-top, +#adminmenu li > a.menu-top:focus { + position: relative; +} + +.folded #adminmenu li.menu-top:hover, +.folded #adminmenu li.opensub > a.menu-top, +.folded #adminmenu li > a.menu-top:focus { + z-index: 10000; +} + +#adminmenu li.menu-top:hover .wp-menu-image img, +#adminmenu li.wp-has-current-submenu .wp-menu-image img { + opacity: 1; + filter: alpha(opacity=100); +} + +#adminmenu li.wp-menu-separator { + height: 3px; + padding: 0; + margin: 0 0 6px 0; + border-width: 1px 0; + border-style: solid; + cursor: inherit; +} + +#adminmenu div.separator { + height: 1px; + padding: 0; + border-width: 1px 0 0 0; + border-style: solid; +} + +#adminmenu .wp-submenu .wp-submenu-head { + font-weight: 400; + font-size: 14px; + padding: 8px 4px 8px 11px; + margin: -7px 0px 4px; +} + +#adminmenu li.current, +.folded #adminmenu li.wp-menu-open { + border: 0 none; +} + +#adminmenu .awaiting-mod, +#adminmenu span.update-plugins, +#sidemenu li a span.update-plugins { + display: inline-block; + font-size: 9px; + line-height: 17px; + font-weight: 600; + margin: 1px 0 0 2px; + vertical-align: top; + -webkit-border-radius: 10px; + border-radius: 10px; + z-index: 26; +} + +#adminmenu li .awaiting-mod span, +#adminmenu li span.update-plugins span, +#sidemenu li a span.update-plugins span { + display: block; + padding: 0 6px; +} + +#adminmenu li span.count-0, +#sidemenu li a .count-0 { + display: none; +} + +#adminmenu #collapse-menu { + font-size: 13px; + line-height: 34px; + margin-top: 10px; +} + +.folded #collapse-menu span { + display: none; +} + +#collapse-button, +#collapse-button div { + width: 15px; + height: 15px; +} + +#collapse-button { + float: left; + height: 15px; + margin: 10px 8px 10px 11px; + width: 15px; + + -webkit-border-radius: 10px; + border-radius: 10px; +} + +#wpwrap #collapse-button div { + padding: 0; +} + +#collapse-button div:after { + content: '\f148'; + display: block; + line-height: 15px; + left: -3px; + top: -3px; + font: normal 20px/1 'dashicons' !important; + speak: none; + margin: 0 auto; + padding: 0 !important; + position: relative; + text-align: center; + width: 20px; + -moz-transition: all .1s ease-in-out; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.folded #collapse-button div:after, +.rtl #collapse-button div:after { + -ms-transform: rotate(180deg); + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +.rtl.folded #collapse-button div:after { + -ms-transform: none; + -webkit-transform: none; + transform: none; +} + +/* Auto-folding of the admin menu */ +@media only screen and (max-width: 900px) { + .auto-fold #wpcontent, + .auto-fold #wpfooter { + margin-left: 56px; + } + + .auto-fold #adminmenuback, + .auto-fold #adminmenuwrap, + .auto-fold #adminmenu, + .auto-fold #adminmenu li.menu-top { + width: 36px; + } + + .auto-fold #adminmenu .wp-submenu.sub-open, + .auto-fold #adminmenu .opensub .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu.sub-open, + .auto-fold #adminmenu .wp-has-current-submenu.opensub .wp-submenu, + .auto-fold #adminmenu a.menu-top:focus + .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu { + top: 0px; + left: 36px; + } + + .auto-fold #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu { + position: absolute; + top: -1000em; + margin-right: -1px; + padding: 7px 0 8px; + z-index: 9999; + } + + .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu { + min-width: 150px; + width: auto; + } + + .auto-fold #adminmenu .wp-has-current-submenu li > a { + padding-right: 16px; + padding-left: 14px; + } + + + .auto-fold #adminmenu li.menu-top .wp-submenu > li > a { + padding-left: 12px; + } + + .auto-fold #adminmenu .wp-menu-name { + display: none; + } + + .auto-fold #adminmenu .wp-submenu-head { + display: block; + } + + .auto-fold #adminmenu div.wp-menu-image { + height: 30px; + width: 34px; + position: absolute; + z-index: 25; + } + + .auto-fold #adminmenu a.menu-top { + height: 34px; + } + + .auto-fold #adminmenu li.wp-menu-open { + border: 0 none; + } + + .auto-fold #adminmenu .wp-has-current-submenu.menu-top-last { + margin-bottom: 0; + } + + .auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after { + display: none; + } + + .auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + border-width: 4px; + margin-top: -4px; + top: 16px; + } + + .auto-fold ul#adminmenu a.wp-has-current-submenu:after, + .auto-fold ul#adminmenu > li a.current:after { + border-width: 4px; + margin-top: -4px; + } + + .auto-fold #adminmenu li.menu-top:hover, + .auto-fold #adminmenu li.opensub > a.menu-top, + .auto-fold #adminmenu li > a.menu-top:focus { + z-index: 10000; + } + + .auto-fold #collapse-menu span { + display: none; + } + + .auto-fold #collapse-button div { + background: none; + } + + .auto-fold #collapse-button div:after { + -ms-transform: rotate(180deg); + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } + + .rtl.auto-fold #collapse-button div:after { + -ms-transform: none; + -webkit-transform: none; + transform: none; + } + +} + +/* List table styles */ +.post-com-count-wrapper { + min-width: 22px; +} + +.post-com-count { + background: none; + height: 1.3em; + line-height: 1.1em; + display: block; + text-decoration: none; + padding: 0 0 6px; + cursor: pointer; + background-position: center -80px; + background-repeat: no-repeat; +} + +.post-com-count:after { /* draw bubble connector using CSS! */ + content: ""; + display: block; + width: 0; + height: 0; + margin-left: 8px; + border-top: 5px solid #bbbbbb; + border-right: 5px solid transparent; +} + +.post-com-count span { + font-size: 11px; + font-weight: 600; + height: 1.4em; + line-height: 1.4em; + min-width: 0.7em; + padding: 0 6px; + display: inline-block; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +strong .post-com-count { + background-position: center -55px; +} + +.post-com-count:hover { + background-position: center -3px; +} + +.column-response .post-com-count { + float: left; + margin-right: 5px; + text-align: center; +} + +.response-links { + float: left; +} + +#the-comment-list .attachment-80x60 { + padding: 4px 8px; +} + +th .comment-grey-bubble { + height: 16px; + width: 16px; +} + +th .comment-grey-bubble:before { + content: '\f101'; + font: normal 20px/.5 'dashicons'; + speak: none; + display: inline-block; + padding: 0; + top: 4px; + left: -4px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +/*------------------------------------------------------------------------------ + 8.0 - Layout Blocks +------------------------------------------------------------------------------*/ + +html.wp-toolbar { + padding-top: 32px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.narrow { + width: 70%; + margin-bottom: 40px; +} + +.narrow p { + line-height: 150%; +} + +.widefat th, +.widefat td { + overflow: hidden; +} + +.widefat th { + font-weight: normal; +} + +.widefat td p { + margin: 2px 0 0.8em; +} + +.widefat .column-comment p { + margin: 0.6em 0; +} + +/* Screens with postboxes */ +.postbox-container { + float: left; +} + +#wpbody-content #dashboard-widgets.columns-1 .postbox-container { + width: 100%; +} + +#wpbody-content #dashboard-widgets.columns-2 .postbox-container { + width: 49.5%; +} + +#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2, +#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3, +#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4 { + float: right; + width: 50.5%; +} + +#wpbody-content #dashboard-widgets.columns-3 .postbox-container { + width: 33.5%; +} + +#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1 { + width: 33%; +} + +#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3, +#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4 { + float: right; +} + +#wpbody-content #dashboard-widgets.columns-4 .postbox-container { + width: 25%; +} + +.postbox-container .meta-box-sortables { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.metabox-holder .postbox-container .empty-container { + border: 3px dashed #bbb; + height: 250px; +} + +.metabox-holder.columns-1 .postbox-container .empty-container, +.columns-2 #postbox-container-3 .empty-container, +.columns-2 #postbox-container-4 .empty-container, +.columns-3 #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; +} + +.ie8 #wpbody-content #dashboard-widgets .postbox-container { + width: 49.5%; +} + +.ie8 #wpbody-content #dashboard-widgets #postbox-container-2, +.ie8 #wpbody-content #dashboard-widgets #postbox-container-3, +.ie8 #wpbody-content #dashboard-widgets #postbox-container-4 { + float: right; + width: 50.5%; +} + +.ie8 #dashboard-widgets #postbox-container-3 .empty-container, +.ie8 #dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; +} + +#poststuff { + padding-top: 10px; + min-width: 763px; +} + +#poststuff #post-body { + padding: 0; +} + +#post-body-content { + width: 100%; + min-width: 463px; + float: left; +} + +#poststuff .postbox-container { + width: 100%; +} + +#poststuff #post-body.columns-2 { + margin-right: 300px; +} + +#post-body.columns-2 #postbox-container-1 { + float: right; + margin-right: -300px; + width: 280px; +} + +#post-body.columns-2 #side-sortables { + min-height: 250px; +} + +#dashboard-widgets .postbox-container { + width: 25%; +} + +#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container { + border: none !important; +} + +#dashboard-widgets-wrap { + overflow: hidden; +} + +/* one column on the dash */ +@media only screen and (max-width: 799px) { + #wpbody-content #dashboard-widgets .postbox-container { + width: 100%; + } + + #wpbody-content .metabox-holder .postbox-container .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } +} + +/* two columns on the dash, but keep the setting if one is selected */ +@media only screen and (min-width: 800px) and (max-width: 1499px) { + #wpbody-content #dashboard-widgets .postbox-container { + width: 49.5%; + } + + #wpbody-content #dashboard-widgets #postbox-container-2, + #wpbody-content #dashboard-widgets #postbox-container-3, + #wpbody-content #dashboard-widgets #postbox-container-4 { + float: right; + width: 50.5%; + } + + #dashboard-widgets #postbox-container-3 .empty-container, + #dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } + + #wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container { + width: 100%; + } + + #wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } + + /* show the radio buttons for column prefs only for one or two columns */ + .index-php .screen-layout, + .index-php .columns-prefs { + display: block; + } + + .columns-prefs .columns-prefs-3, + .columns-prefs .columns-prefs-4 { + display: none; + } +} + +/* three columns on the dash */ +@media only screen and (min-width: 1500px) and (max-width: 1800px) { + #wpbody-content #dashboard-widgets .postbox-container { + width: 33.5%; + } + + #wpbody-content #dashboard-widgets #postbox-container-1 { + width: 33%; + } + + #wpbody-content #dashboard-widgets #postbox-container-3, + #wpbody-content #dashboard-widgets #postbox-container-4 { + float: right; + } + + #dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } +} + +/* one column on the post write/edit screen */ +@media only screen and (max-width: 850px) { + #poststuff { + min-width: 0; + } + + #wpbody-content #poststuff #post-body { + margin: 0; + } + + #wpbody-content #post-body.columns-2 #postbox-container-1 { + margin-right: 0; + width: 100%; + } + + #poststuff #postbox-container-1 .empty-container, + #poststuff #postbox-container-1 #side-sortables:empty { + border: 0 none; + height: 0; + min-height: 0; + } + + #poststuff #post-body.columns-2 #side-sortables { + min-height: 0; + } + + /* hide the radio buttons for column prefs */ + .screen-layout, + .columns-prefs { + display: none; + } +} + +.js .postbox .hndle { + cursor: move; +} + +.hndle a { + font-size: 11px; + font-weight: normal; +} + +.postbox .handlediv { + float: right; + width: 27px; + height: 30px; +} + +.js .postbox .handlediv { + cursor: pointer; +} + +.sortable-placeholder { + border-width: 1px; + border-style: dashed; + margin-bottom: 20px; +} + +.postbox, +.stuffbox { + margin-bottom: 20px; + padding: 0; + line-height: 1; +} + +.postbox h3, +.stuffbox h3 { + margin-top: 1px; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.js .widget .widget-top, +.js .postbox h3 { + cursor: move; +} + +.postbox .inside, +.stuffbox .inside { + padding: 0 12px 12px; + line-height: 1.4em; + font-size: 13px; +} + +.postbox .inside { + margin: 11px 0; + position: relative; +} + +#dashboard-widgets .postbox .inside { + margin-bottom: 0; +} + +.postbox .inside > p:last-child, +.rss-widget ul li:last-child { + margin-bottom: 1px !important; +} + +.postbox.closed h3 { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.postbox table.form-table { + margin-bottom: 0; +} + +.temp-border { + border: 1px dotted #ccc; +} + +.columns-prefs label { + padding: 0 5px; +} + + +/*------------------------------------------------------------------------------ + 9.0 - Dashboard +------------------------------------------------------------------------------*/ + +#dashboard-widgets-wrap { + margin: 0 -8px; +} + +#wpbody-content .metabox-holder { + padding-top: 10px; +} + +#dashboard-widgets .meta-box-sortables { + margin: 0 8px; + min-height: 100px; +} + +#the-comment-list td.comment p.comment-author { + margin-top: 0; + margin-left: 0; +} + +#the-comment-list p.comment-author img { + float: left; + margin-right: 8px; +} + +#the-comment-list p.comment-author strong a { + border: none; +} + +#the-comment-list td { + vertical-align: top; +} + +#the-comment-list td.comment { + word-wrap: break-word; +} + +/* Welcome Panel */ +.welcome-panel { + position: relative; + overflow: auto; + margin: 16px 0; + padding: 23px 10px 0; + font-size: 13px; + line-height: 2.1em; +} + +.welcome-panel h3 { + margin: 0; + font-size: 21px; + font-weight: normal; + line-height: 1.2; +} + +.welcome-panel h4 { + margin: 1.33em 0 0; + font-size: 16px; +} + +.welcome-panel li { + font-size: 14px; +} + +.welcome-panel .about-description { + font-size: 16px; + margin: 0; +} + +.welcome-panel .welcome-panel-close { + position: absolute; + top: 5px; + right: 10px; + padding: 20px 15px 0 3px; + font-size: 13px; + text-decoration: none; + line-height: 1; +} + +#welcome-panel.welcome-panel .welcome-panel-close::before, +.tagchecklist span a:before, +#bulk-titles div a:before { + content: '\f153'; + display: block !important; + font: normal 16px/1 'dashicons'; + speak: none; + height: 20px; + margin: 2px 0; + text-align: center; + width: 20px; + -webkit-font-smoothing: antialiased !important; +} + +#welcome-panel.welcome-panel .welcome-panel-close::before { + position: absolute; + left: -18px; + margin-top: -2px; + -webkit-transition: all .1s ease-in-out; + -moz-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +.wp-core-ui .welcome-panel .button.button-hero { + margin: 15px 0 3px; +} + +.welcome-panel-content { + margin-left: 13px; + max-width: 1500px; +} + +.welcome-panel .welcome-panel-column-container { + clear: both; + overflow: hidden; + position: relative; +} + +.welcome-panel .welcome-panel-column { + width: 32%; + min-width: 200px; + float: left; +} + +.ie8 .welcome-panel .welcome-panel-column { + min-width: 230px; +} + +.welcome-panel .welcome-panel-column:first-child { + width: 36%; +} + +.welcome-panel-column p.hide-if-no-customize { + margin-top: 10px; +} + +.welcome-panel-column p { + margin-top: 7px; +} + +.welcome-panel .welcome-icon { + display: block; + padding: 0 0 8px; + background: transparent !important; +} + +.welcome-panel .welcome-icon:before { + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0 10px 0 0; + top: -1px; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + vertical-align: top; +} + +.welcome-panel .welcome-write-blog:before, +.welcome-panel .welcome-edit-page:before { + content:'\f119'; + top: -3px; +} + +.welcome-panel .welcome-add-page:before { + content:'\f132'; +} + +.welcome-panel .welcome-view-site:before { + content:'\f115'; + top: -2px; +} + +.welcome-panel .welcome-widgets-menus:before { + content:'\f116'; + top: -2px; +} + +.welcome-panel .welcome-comments:before { + content:'\f117'; + top: -1px; +} + +.welcome-panel .welcome-learn-more:before { + content:'\f118'; + top: -1px; +} + +.welcome-panel .welcome-widgets-menus { + line-height: 16px; +} + +.welcome-panel .welcome-panel-column ul { + margin: 0.8em 1em 1em 0; +} + +.welcome-panel .welcome-panel-column li { + line-height: 16px; + list-style-type: none; +} + +/* Dashboard WordPress news */ + +#dashboard_primary .inside { + margin: 0; + padding: 0; +} + +#dashboard_primary .widget-loading, +#dashboard_primary .dashboard-widget-control-form { + padding: 12px 12px 0; +} + +body #dashboard-widgets .postbox form .submit { + margin: 0; +} + +.dashboard-widget-control-form { + overflow: hidden; +} + +.dashboard-widget-control-form p { + margin-top: 0; +} + +.rssSummary { + color: #777; + margin-top: 4px; +} + +#dashboard_primary .rss-widget { + border-bottom: 1px solid #eee; + font-size: 13px; + padding: 8px 12px 10px; +} + +#dashboard_primary .rss-widget:last-child { + border-bottom: none; + padding-bottom: 8px; +} + +#dashboard_primary .rss-widget a { + font-weight: normal; +} + +#dashboard_primary .rss-widget span, +#dashboard_primary .rss-widget span.rss-date { + color: #777; +} + +#dashboard_primary .rss-widget span.rss-date { + margin-left: 12px; +} + +#dashboard_primary .rss-widget ul li { + margin-bottom: 8px; +} + +/* Dashboard right now */ + +#dashboard_right_now ul { + margin: 0; + overflow: hidden; +} + +#dashboard_right_now li { + width: 50%; + float: left; + margin-bottom: 10px; +} + +#dashboard_right_now .inside { + overflow: hidden; + padding: 0; +} + +#dashboard_right_now .main { + padding: 0 12px 11px; +} + +#dashboard_right_now .main p { + margin: 0; +} + +.mu-storage { + overflow: hidden; +} + +#dashboard-widgets h4.mu-storage { + margin-bottom: 10px; +} + +/* Dashboard right now - Colors */ + +#dashboard_right_now li a:before, +#dashboard_right_now li span:before { + color: #888; +} + +#dashboard_right_now .sub { + color: #777; + background: #f5f5f5; + border-top: 1px solid #eee; + padding: 10px 12px 6px 12px; +} + +#dashboard_right_now .sub h4 { + color: #555; +} + +#dashboard_right_now .sub p { + margin: 0 0 1em; +} + +#dashboard_right_now .warning a:before, +#dashboard_right_now .warning span:before { + color: #d54e21; +} + +/* Dashboard right now - Icons */ +#dashboard_right_now li a:before, +#dashboard_right_now li span:before { + content: '\f159'; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + float: left; + margin: 0 5px 0 0; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + text-decoration: none !important; +} + +#dashboard_right_now .page-count a:before, +#dashboard_right_now .page-count span:before { + content: '\f105'; +} + +#dashboard_right_now .post-count a:before, +#dashboard_right_now .post-count span:before { + content: '\f109'; +} + +#dashboard_right_now .comment-count a:before { + content: '\f101'; +} + +#dashboard_right_now .comment-mod-count a:before { + content: '\f125'; +} + +#dashboard_right_now .storage-count a:before { + content: '\f104'; +} + +#dashboard_right_now .storage-count.warning a:before { + content: '\f153'; +} + +/* Dashboard Quick Draft */ + +#dashboard_quick_press .inside { + margin: 0; + padding: 0; +} + +#dashboard_quick_press div.updated { + margin-bottom: 10px; + border: 1px solid #eee; + border-width: 1px 1px 1px 0; +} + +#dashboard_quick_press form { + overflow: hidden; + margin: 12px; +} + +#dashboard_quick_press .drafts, +#dashboard_quick_press .easy-blogging { + padding: 10px 0 0; +} + +/* Dashboard Quick Draft - Form styling */ + +input#save-post { + float: left; +} + +form.initial-form.quickpress-open label.prompt { + font-style: normal; +} + +form.initial-form.quickpress-open input#title { + height: auto; +} + +#dashboard_quick_press input, +#dashboard_quick_press textarea { + box-sizing: border-box; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + margin: 0; +} + +#dashboard_quick_press textarea { + resize: vertical; +} + +#dashboard-widgets .postbox form .submit { + margin: -39px 0; + float: right; +} + +#description-wrap { + margin-top: 12px; +} + +#title-wrap #title-prompt-text, +.textarea-wrap #content-prompt-text { + color: #777; +} + +#title-wrap #title-prompt-text { + font-size: 1.1em; + padding: 7px 8px; +} + +.input-text-wrap, +.textarea-wrap { + position: relative; +} + +.input-text-wrap .prompt, +.textarea-wrap .prompt { + position: absolute; +} + +.textarea-wrap #content-prompt-text { + font-size: 1.1em; + padding: 7px 8px; +} + +.textarea-wrap textarea#content { + margin: 0 0 8px; + padding: 6px 7px; +} + +#quick-press textarea#content { + min-height: 90px; + max-height: 1300px; + resize: none; +} + +/* Dashboard Quick Draft - Drafts list */ + +.js #dashboard_quick_press .drafts { + border-top: 1px solid #eee; +} + +#dashboard_quick_press .drafts abbr { + border: none; +} + +#dashboard_quick_press .drafts h4 { + margin: 0 12px 8px; + font-weight: normal; +} + +#dashboard_quick_press .drafts .view-all { + float: right; + margin: 0 12px 0 0; +} + +#dashboard_primary a.rsswidget { + font-weight: normal; +} + +#dashboard_quick_press .drafts ul { + margin: 0 12px; +} + +#dashboard_quick_press .drafts li { + margin-bottom: 1em; +} +#dashboard_quick_press .drafts li time { + color: #777; +} + +#dashboard_quick_press .drafts p { + margin: 0; + word-wrap: break-word; +} + +#dashboard_quick_press .draft-title { + overflow: hidden; +} + +#dashboard_quick_press .draft-title a, +#dashboard_quick_press .draft-title time { + float: left; + margin: 0 5px 0 0; +} + +/* Dashboard activity widget */ + +#dashboard-widgets #dashboard_activity h4 { + margin: 0 0 8px 12px; + font-weight: normal; +} + +#dashboard-widgets #dashboard_activity h4.comment-meta { + margin: 0; +} + +#dashboard_activity h4.comment-meta { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-bottom: 4px; +} + +#dashboard_activity ul { + padding: 0 12px; +} + +#dashboard_activity .comment-meta span.approve:before { + content: '\f227'; + font: 20px/.5 "dashicons"; + margin-left: 12px; + vertical-align: middle; + position: relative; + top: -1px; + margin-right: 2px; +} + +#dashboard_activity .inside { + padding: 0; + margin: 0; +} + +#dashboard_activity .no-activity { + overflow: hidden; + padding: 0 12px 12px; + text-align: center; +} + +#dashboard_activity .no-activity p { + color: #999; + font-size: 16px; +} + +#dashboard_activity .no-activity .smiley { + margin-top: 0; +} + +#dashboard_activity .no-activity .smiley:before { + content: '\f328'; + font: normal 120px/1 'dashicons'; + speak: none; + display: block; + margin: 0 5px 0 0; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + text-decoration: none !important; +} + +#dashboard_activity .subsubsub { + float: none; + border-top: 1px solid #eeeeee; + margin-top: 0; + padding: 8px 12px 4px; +} + +#future-posts .show-more, +#published-posts .show-more { + float: right; + margin-right: 12px; +} + +#future-posts ul, +#published-posts ul { + clear: both; + margin-bottom: 0; +} + +#future-posts li, +#published-posts li { + overflow: hidden; + margin-bottom: 8px; +} + +#future-posts ul span, +#published-posts ul span { + color: #777; + float: left; + margin-right: 8px; + min-width: 150px; +} + +.activity-block { + border-bottom: 1px solid #eee; + overflow: hidden; + padding: 8px 0 4px; +} + +.activity-block:last-child { + border-bottom: none; +} + +.activity-block .subsubsub li { + color: #ddd; +} + +/* Dashboard activity widget - Comments */ + +#activity-widget #the-comment-list tr.undo, +#activity-widget #the-comment-list div.undo { + background: none; + padding: 6px 0; +} + +#activity-widget #the-comment-list .alternate, +#activity-widget #the-comment-list .alt { + background: none; +} + +#activity-widget #the-comment-list .comment { + background: #fafafa; + padding: 12px; + position: relative; +} + +#activity-widget #the-comment-list img { + position: absolute; + left: 13px; + top: 13px; +} + +#activity-widget #the-comment-list .dashboard-comment-wrap { + padding-left: 63px; +} + +#activity-widget #the-comment-list .dashboard-comment-wrap blockquote { + margin: 1em 0; +} + +#activity-widget #the-comment-list .comment-item h4 { + font-size: 13px; + color: #999; +} + +#activity-widget #the-comment-list .comment-item p.row-actions { + margin: 4px 0 0 0; +} + +#activity-widget #the-comment-list .comment-item:first-child { + border-top: 1px solid #eeeeee; +} + +#activity-widget #the-comment-list .unapproved:before { + content: ""; + display: block; + position: absolute; + left: 0; + top: 0; + bottom: 0; + background: #d54e21; + width: 4px; +} + +#activity-widget #the-comment-list .spam-undo-inside .avatar, +#activity-widget #the-comment-list .trash-undo-inside .avatar { + margin-right: 20px; + position: relative; + top: 0; +} + +/* Browse happy box */ + +#dashboard-widgets #dashboard_browser_nag.postbox .inside { + margin: 10px; +} + +@media screen and (max-width: 870px) { + .welcome-panel .welcome-panel-column, + .welcome-panel .welcome-panel-column:first-child { + display: block; + float: none; + width: 100%; + } + + .welcome-panel .welcome-panel-column li { + display: inline-block; + margin-right: 13px; + } + + .welcome-panel .welcome-panel-column ul { + margin: 0.4em 0 0; + } + +} + +/*------------------------------------------------------------------------------ + 10.0 - List Posts (/Pages/etc) +------------------------------------------------------------------------------*/ + +table.fixed { + table-layout: fixed; +} + +.fixed .column-rating, +.fixed .column-visible { + width: 8%; +} + +.fixed .column-posts, +.fixed .column-date, +.fixed .column-parent, +.fixed .column-links, +.fixed .column-author, +.fixed .column-format { + width: 10%; +} + +.fixed .column-comment .comment-author { + display: none; +} + +.fixed .column-response, +.fixed .column-categories, +.fixed .column-tags, +.fixed .column-rel, +.fixed .column-role { + width: 15%; +} + +.fixed .column-slug { + width: 25%; +} + +.fixed .column-locations { + width: 35%; +} + +.fixed .column-comments { + width: 4em; + padding: 8px 0; + text-align: left; +} + +.fixed .column-comments .vers { + padding-left: 3px; +} + +.fixed .column-comments a { + float: left; +} + +.fixed .column-icon { + width: 80px; +} + +#comments-form .fixed .column-author { + width: 20%; +} + +#commentsdiv.postbox .inside { + margin: 0; + padding: 0; +} + +#commentsdiv .inside .row-actions { + line-height:18px; +} + +#commentsdiv .inside .column-author { + width: 25%; +} + +#commentsdiv .column-comment p { + margin: 0.6em 0; + padding: 0; +} + +#commentsdiv #replyrow td { + padding: 0; +} + +#commentsdiv p { + padding: 8px 10px; + margin: 0; +} + +#commentsdiv .comments-box { + border: 0 none; +} + +#commentsdiv .comments-box thead th { + background: transparent; + padding: 0 7px 4px; + font-style: italic; +} + +#commentsdiv .comments-box tr:last-child td { + border-bottom: 0 none; +} + +#commentsdiv .spinner { + padding-left: 5px; +} + +.sorting-indicator { + display: none; + width: 10px; + height: 4px; + margin-top: 8px; + margin-left: 7px; +} + +.sorting-indicator:before { + background: none; + content: '\f142'; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0; + top: -4px; + left: -8px; + color: #444; + line-height: 10px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.column-comments .sorting-indicator:before { + top: 0; + left: -10px; +} + +th.sorted.asc .sorting-indicator:before, +th.desc:hover span.sorting-indicator:before { + content: '\f142'; +} + +th.sorted.desc .sorting-indicator:before, +th.asc:hover span.sorting-indicator:before { + content: '\f140'; +} + +tr.wp-locked .locked-indicator { + background: url('../images/lock.png') no-repeat; + margin: -2px 0 0 6px; + height: 20px; + width: 16px; +} + +tr.wp-locked .check-column label, +tr.wp-locked .check-column input[type="checkbox"], +tr.wp-locked .row-actions .inline, +tr.wp-locked .row-actions .trash { + display: none; +} + +tr .locked-info { + height: 0; + opacity: 0; +} + +tr.wp-locked .locked-info { + margin-top: 8px; + height: auto; + opacity: 1; +} + +.locked-text { + vertical-align: top; +} + +tr.locked-info, tr.wp-locked .locked-info { + -webkit-transition: height 1s, opacity 500ms; + -moz-transition: height 1s, opacity 500ms; + -ms-transition: height 1s, opacity 500ms; + -o-transition: height 1s, opacity 500ms; + transition: height 1s, opacity 500ms; +} + +.fixed .column-comments .sorting-indicator { + margin-top: 3px; +} + +#menu-locations-wrap .widefat { + width: 60%; +} + +.widefat th.sortable, +.widefat th.sorted { + padding: 0; +} + +th.sortable a, +th.sorted a { + display: block; + overflow: hidden; + padding: 7px 7px 8px 10px; +} + +.fixed .column-comments.sortable a, +.fixed .column-comments.sorted a { + padding: 8px 0; +} + +th.sortable a span, +th.sorted a span { + float: left; + cursor: pointer; +} + +th.sorted.asc .sorting-indicator, +th.desc:hover span.sorting-indicator { + display: block; + background-position: 0 0; +} + +th.sorted.desc .sorting-indicator, +th.asc:hover span.sorting-indicator { + display: block; + background-position: -7px 0; +} + +/* Bulk Actions */ +.tablenav-pages a { + font-weight: 600; + margin-right: 1px; + padding: 0 2px; +} +.tablenav-pages .current-page { + padding-top: 0; + text-align: center; +} +.tablenav-pages .next-page { + margin-left: 2px; +} + +.tablenav a.button-secondary { + display: block; + margin: 3px 8px 0 0; +} + +.tablenav { + clear: both; + height: 30px; + margin: 6px 0 4px; + vertical-align: middle; +} + +.tablenav.themes { + max-width: 98%; +} + +.tablenav .tablenav-pages { + float: right; + display: block; + cursor: default; + height: 30px; + line-height: 30px; + font-size: 12px; +} + +.tablenav .no-pages, +.tablenav .one-page .pagination-links { + display: none; +} + +.tablenav .tablenav-pages a, +.tablenav-pages span.current { + text-decoration: none; + padding: 3px 6px; +} + +.tablenav .tablenav-pages a { + padding: 0 10px 3px; + font-size: 16px; + font-weight: normal; +} + +.tablenav .tablenav-pages a.disabled:hover , +.tablenav .tablenav-pages a.disabled:active { + cursor: default; +} + +.tablenav .displaying-num { + margin-right: 2px; + font-size: 12px; + font-style: italic; +} + +.tablenav .actions { + overflow: hidden; + padding: 2px 8px 0 0; +} + +.tablenav .delete { + margin-right: 20px; +} + +.view-switch { + float: right; + margin: 5px 16px 0 8px; +} + +.view-switch img { + display: none; +} + +.view-switch a { + text-decoration: none; +} + +.view-switch > a { + display: inline-block; + width: 18px; + height: 18px; +} + +.view-switch > a:before { + content: '\f163'; + display: inline-block; + float: left; + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; + margin-left: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.view-switch > a + a:before { + margin-left: 5px; + content: '\f164'; +} + +.filter { + float: left; + margin: -5px 0 0 10px; +} + +.filter .subsubsub { + margin-left: -10px; + margin-top: 13px; +} +.screen-per-page { + width: 4em; +} + +#posts-filter fieldset { + float: left; + margin: 0 1.5ex 1em 0; + padding: 0; +} + +#posts-filter fieldset legend { + padding: 0 0 .2em 1px; +} + + +/*------------------------------------------------------------------------------ + 10.1 - Inline Editing +------------------------------------------------------------------------------*/ + +/* +.quick-edit* is for Quick Edit +.bulk-edit* is for Bulk Edit +.inline-edit* is for everything +*/ + +/* Layout */ + +#wpbody-content .inline-edit-row fieldset { + font-size: 12px; + float: left; + margin: 0; + padding: 0; + width: 100%; +} + +tr.inline-edit-row td, +#wpbody-content .inline-edit-row fieldset .inline-edit-col { + padding: 0 0.5em; +} + +#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col { + border-width: 0 0 0 1px; + border-style: none none none solid; +} + +#wpbody-content .quick-edit-row-post .inline-edit-col-left { + width: 40%; +} + +#wpbody-content .quick-edit-row-post .inline-edit-col-right { + width: 39%; +} + +#wpbody-content .inline-edit-row-post .inline-edit-col-center { + width: 20%; +} + +#wpbody-content .quick-edit-row-page .inline-edit-col-left { + width: 50%; +} + +#wpbody-content .quick-edit-row-page .inline-edit-col-right, +#wpbody-content .bulk-edit-row-post .inline-edit-col-right { + width: 49%; +} + +#wpbody-content .bulk-edit-row .inline-edit-col-left { + width: 30%; +} + +#wpbody-content .bulk-edit-row-page .inline-edit-col-right { + width: 69%; +} + +#wpbody-content .bulk-edit-row .inline-edit-col-bottom { + float: right; + width: 69%; +} + +#wpbody-content .inline-edit-row-page .inline-edit-col-right { + margin-top: 27px; +} + +.inline-edit-row fieldset .inline-edit-group { + clear: both; +} + +.inline-edit-row fieldset .inline-edit-group:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.inline-edit-row p.submit { + clear: both; + padding: 0.5em; + margin: 0.5em 0 0; +} + +.inline-edit-row span.error { + line-height: 22px; + margin: 0 15px; + padding: 3px 5px; +} + +/* Positioning */ +.inline-edit-row h4 { + margin: .2em 0; + padding: 0; + line-height: 23px; +} +.inline-edit-row fieldset span.title, +.inline-edit-row fieldset span.checkbox-title { + margin: 0; + padding: 0; + line-height: 27px; +} + +.inline-edit-row fieldset label, +.inline-edit-row fieldset span.inline-edit-categories-label { + display: block; + margin: .2em 0; +} + +.inline-edit-row fieldset label.inline-edit-tags { + margin-top: 0; +} + +.inline-edit-row fieldset label.inline-edit-tags span.title { + margin: .2em 0; + width: auto; +} + +.inline-edit-row fieldset label span.title { + display: block; + float: left; + width: 5em; +} + +.inline-edit-row fieldset label span.input-text-wrap { + display: block; + margin-left: 5em; +} + +.quick-edit-row-post fieldset.inline-edit-col-right label span.title { + width: auto; + padding-right: 0.5em; +} + +.inline-edit-row .input-text-wrap input[type=text] { + width: 100%; +} + +.inline-edit-row fieldset label input[type=checkbox] { + vertical-align: text-bottom; +} + +.inline-edit-row fieldset label textarea { + width: 100%; + height: 4em; +} + +#wpbody-content .bulk-edit-row fieldset .inline-edit-group label { + max-width: 50%; +} + +#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child { + margin-right: 0.5em +} + +.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input { + width: 6em; +} + +.inline-edit-save .spinner { + padding: 4px 10px 0; + vertical-align: top; + float: right; +} + +/* Styling */ +.inline-edit-row h4 { + text-transform: uppercase; +} + +.inline-edit-row fieldset span.title, +.inline-edit-row fieldset span.checkbox-title { + font-style: italic; + line-height: 1.8em; +} + +/* Specific Elements */ +.inline-edit-row fieldset input[type="text"], +.inline-edit-row fieldset textarea { + border-style: solid; + border-width: 1px; +} + +.inline-edit-row fieldset .inline-edit-date { + float: left; +} + +.inline-edit-row fieldset input[name=jj], +.inline-edit-row fieldset input[name=hh], +.inline-edit-row fieldset input[name=mn] { + font-size: 12px; + width: 2.1em; +} + +.inline-edit-row fieldset input[name=aa] { + font-size: 12px; + width: 3.5em; +} + +.inline-edit-row fieldset label input.inline-edit-password-input { + width: 8em; +} + +ul.cat-checklist { + height: 12em; + border-style: solid; + border-width: 1px; + overflow-y: scroll; + padding: 0 5px; + margin: 0; +} + +#bulk-titles { + display: block; + height: 12em; + border-style: solid; + border-width: 1px; + overflow-y: scroll; + padding: 0 5px; + margin: 0 0 5px; +} + +.inline-edit-row fieldset ul.cat-checklist li, +.inline-edit-row fieldset ul.cat-checklist input { + margin: 0; +} + +.inline-edit-row fieldset ul.cat-checklist label, +.inline-edit-row #bulk-titles div { + font-style: normal; + font-size: 11px; +} + +.inline-edit-row fieldset label input.inline-edit-menu-order-input { + width: 3em; +} + +.inline-edit-row fieldset label input.inline-edit-slug-input { + width: 75%; +} + +.quick-edit-row-post fieldset label.inline-edit-status { + float: left; +} + +#bulk-titles { + line-height: 140%; +} +#bulk-titles div { + margin: 0.2em 0.3em; +} + +#bulk-titles div a { + cursor: pointer; + display: block; + float: left; + height: 18px; + margin: 0 3px 0 -2px; + overflow: hidden; + position: relative; + width: 20px; +} + +#bulk-titles div a:before { + position: relative; + top: -3px; +} + + +/*------------------------------------------------------------------------------ + 11.0 - Write/Edit Post Screen +------------------------------------------------------------------------------*/ + +#show-comments { + overflow: hidden; +} + +#save-action .spinner, +#show-comments a, +#show-comments .spinner { + float: left; +} + +#lost-connection-notice .spinner { + display: block; + float: left; + margin: 0 5px 0 0; +} + +#titlediv { + position: relative; + margin-bottom: 10px; +} + +#titlediv label { + cursor: text; +} + +#titlediv div.inside { + margin: 0; +} + +#poststuff #titlewrap { + border: 0; + padding: 0; +} + +#titlediv #title { + padding: 3px 8px; + font-size: 1.7em; + line-height: 100%; + height: 1.7em; + width: 100%; + outline: none; + margin: 0; +} + +#titlediv #title-prompt-text, +#wp-fullscreen-title-prompt-text { + color: #777; + position: absolute; + font-size: 1.7em; + padding: 11px 10px; +} + +#wp-fullscreen-save .fs-saved { + color: #999; + float: right; + margin-top: 4px; +} + +#wp-fullscreen-title-prompt-text { + padding: 11px; +} + +#poststuff .inside-submitbox, +#side-sortables .inside-submitbox { + margin: 0 3px; + font-size: 11px; +} + +input#link_description, +input#link_url { + width: 98%; +} + +#pending { + background: 0 none; + border: 0 none; + padding: 0; + font-size: 11px; + margin-top: -1px; +} + +#edit-slug-box { + line-height: 24px; + min-height: 25px; /* Yes, line-height + 1 */ + margin-top: 5px; + padding: 0 10px; +} + +#edit-slug-box .cancel { + margin-right: 10px; + font-size: 11px; +} + +#editable-post-name-full { + display: none; +} + +#editable-post-name input { + font-size: 13px; + height: 22px; + margin: 0; + width: 16em; +} + +.postarea h3 label { + float: left; +} + +.submitbox .submit { + text-align: left; + padding: 12px 10px 10px; + font-size: 11px; +} + +.submitbox .submitdelete { + text-decoration: none; + padding: 1px 2px; +} + +.submitbox .submit a:hover { + text-decoration: underline; +} + +.submitbox .submit input { + margin-bottom: 8px; + margin-right: 4px; + padding: 6px; +} + +.inside-submitbox #post_status { + margin: 2px 0 2px -2px; +} + +#post-status-select { + margin-top: 3px; +} + +/* Post Screen */ +#post-body #normal-sortables { + min-height: 50px; +} + +.postbox { + position: relative; + min-width: 255px; +} + +#trackback_url { + width: 99%; +} + +#normal-sortables .postbox .submit { + background: transparent none; + border: 0 none; + float: right; + padding: 0 12px; + margin:0; +} + +.category-add input[type="text"], +.category-add select { + width: 100%; + max-width: 260px; + vertical-align: baseline; +} + +#side-sortables .category-add input[type="text"], +#side-sortables .category-add select { + margin: 0 0 1em; +} + +.press-this #side-sortables .category-tabs li, +ul.category-tabs li, +#side-sortables .add-menu-item-tabs li, +.wp-tab-bar li { + display: inline; + line-height: 1.35em; +} + +.no-js .category-tabs li.hide-if-no-js { + display: none; +} + +.category-tabs a, +#side-sortables .add-menu-item-tabs a, +.wp-tab-bar a { + text-decoration: none; +} + +.category-tabs { + margin: 8px 0 5px; +} + +#category-adder h4 { + margin: 10px 0; +} + +#side-sortables .add-menu-item-tabs, +.wp-tab-bar { + margin-bottom: 3px; +} + +#normal-sortables .postbox #replyrow .submit { + float: none; + margin: 0; + padding: 0 7px 5px; +} + +#side-sortables .submitbox .submit input, +#side-sortables .submitbox .submit .preview, +#side-sortables .submitbox .submit a.preview:hover { + border: 0 none; +} + +#side-sortables .inside-submitbox .insidebox, +.stuffbox .insidebox { + margin: 11px 0; +} + +ul.category-tabs, +ul.add-menu-item-tabs, +ul.wp-tab-bar { + margin-top: 12px; +} + +ul.category-tabs li { + border-style: solid; + border-width: 1px; + position: relative; +} + +ul.add-menu-item-tabs li.tabs, +.wp-tab-active { + border-style: solid solid none; + border-width: 1px 1px 0; +} + +ul.add-menu-item-tabs li.tabs { + padding-bottom: 3px; + position: relative; +} + +#post-body .add-menu-item-tabs li.tabs { + border-style: solid none solid solid; + border-width: 1px 0 1px 1px; + margin-right: -1px; +} + +ul.category-tabs li, +ul.add-menu-item-tabs li, +ul.wp-tab-bar li { + padding: 3px 5px 5px; +} + +#postimagediv .inside img { + max-width: 100%; + height: auto; +} + +form#tags-filter { + position: relative; +} + +/* Edit posts */ +td.post-title strong, +td.plugin-title strong { + display: block; + margin-bottom: .2em; + font-size: 14px; +} + +td.post-title p, +td.plugin-title p { + margin: 6px 0; +} + +/* Global classes */ +.wp-hidden-children .wp-hidden-child, +.ui-tabs-hide { + display: none; +} + +.commentlist .avatar { + vertical-align: text-top; +} + +#post-body .tagsdiv #newtag { + margin-right: 5px; + width: 16em; +} + +#side-sortables input#post_password { + width: 94% +} + +#side-sortables .tagsdiv #newtag { + width: 68%; +} + +#post-status-info { + width: 100%; +} + +#post-status-info td { + font-size: 12px; +} + +.autosave-info { + padding: 2px 15px; + text-align: right; +} + +#editorcontent #post-status-info { + border: none; +} + +#content-resize-handle, +#post-body .wp_themeSkin .mceStatusbar a.mceResize { + background: transparent url('../images/resize.gif') no-repeat scroll right bottom; + width: 12px; + height: 12px; + cursor: se-resize; +} + +.rtl #content-resize-handle, +.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize { + background: transparent url('../images/resize-rtl.gif') no-repeat scroll right bottom; +} + +#post-body .wp_themeSkin .mceStatusbar a.mceResize { + bottom: 3px; + position: absolute; + right: 3px; +} + +#post-body .postarea .wp_themeSkin .mceStatusbar a.mceResize { + bottom: -20px; +} + +#content-resize-handle { + position: absolute; + right: 3px; + bottom: -20px; +} + +.press-this #content-resize-handle { + bottom: 2px; +} + +.tmce-active #content-resize-handle { + display: none; +} + +#wp-word-count { + display: block; + padding: 2px 10px; +} + +#timestampdiv select { + height: 21px; + line-height: 14px; + padding: 0; + vertical-align: top; + font-size: 12px; +} + +#aa, #jj, #hh, #mn { + padding: 1px; + font-size: 12px; +} + +#jj, #hh, #mn { + width: 2em; +} + +#aa { + width: 3.4em; +} + +.curtime #timestamp { + padding: 2px 0 1px 0; + display: inline !important; + height: auto !important; +} + +#post-body #visibility:before, +.curtime #timestamp:before, +#post-body .misc-pub-revisions:before { + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0 2px 0 0; + top: 0; + left: -1px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +#post-body #visibility:before { + content: '\f177'; +} + +.curtime #timestamp:before { + content: '\f145'; + top: -1px; +} + +#post-body .misc-pub-revisions:before { + content: '\f321'; +} + +#timestampdiv { + padding-top: 5px; + line-height: 23px; +} + +#timestampdiv p { + margin: 8px 0 6px; +} + +#timestampdiv input { + border-width: 1px; + border-style: solid; +} + +.notification-dialog { + position: fixed; + top: 30%; + left: 50%; + width: 450px; + margin-left: -225px; + background: #fff; + line-height: 1.5; + z-index: 1000005; +} + +.notification-dialog-background { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: #000; + opacity: 0.5; + filter: alpha(opacity=50); + z-index: 1000000; +} + +#post-lock-dialog .post-locked-message, +#post-lock-dialog .post-taken-over { + margin: 25px; +} + +#post-lock-dialog .post-locked-message a.button { + margin-right: 10px; +} + +#post-lock-dialog .post-locked-avatar { + float: left; + margin: 0 20px 20px 0; +} + +#post-lock-dialog .wp-tab-first { + outline: 0; +} + +#post-lock-dialog .locked-saving img { + float: left; + margin-right: 3px; +} + +#post-lock-dialog.saving .locked-saving, +#post-lock-dialog.saved .locked-saved { + display: inline; +} + +/*------------------------------------------------------------------------------ + 11.1 - Custom Fields +------------------------------------------------------------------------------*/ + +#postcustomstuff thead th { + padding: 5px 8px 8px; +} + +#postcustom #postcustomstuff .submit { + border: 0 none; + float: none; + padding: 0 8px 8px; +} + +#side-sortables #postcustom #postcustomstuff .submit { + margin: 0; + padding: 0; +} + +#side-sortables #postcustom #postcustomstuff #the-list textarea { + height: 85px; +} + +#side-sortables #postcustom #postcustomstuff td.left input, +#side-sortables #postcustom #postcustomstuff td.left select, +#side-sortables #postcustomstuff #newmetaleft a { + margin: 3px 3px 0; +} + +#postcustomstuff table { + margin: 0; + width: 100%; + border-width: 1px; + border-style: solid; + border-spacing: 0; +} + +#postcustomstuff tr { + vertical-align: top; +} + +#postcustomstuff table input, +#postcustomstuff table select, +#postcustomstuff table textarea { + width: 96%; + margin: 8px; +} + +#side-sortables #postcustomstuff table input, +#side-sortables #postcustomstuff table select, +#side-sortables #postcustomstuff table textarea { + margin: 3px; +} + +#postcustomstuff th.left, +#postcustomstuff td.left { + width: 38%; +} + +#postcustomstuff .submit input { + margin: 0; + width: auto; +} + +#postcustomstuff #newmetaleft a { + display: inline-block; + margin: 0 8px 8px; + text-decoration: none; +} + +.no-js #postcustomstuff #enternew { + display: none; +} + +#post-body-content .compat-attachment-fields { + margin-bottom: 20px; +} + +.compat-attachment-fields th { + padding-top: 5px; + padding-right: 10px; +} + +/*------------------------------------------------------------------------------ + 11.2 - Post Revisions +------------------------------------------------------------------------------*/ +.revisions-control-frame, +.revisions-diff-frame { + position: relative; +} + +.revisions-controls { + padding-top: 40px; + height: 100px; + z-index: 1; +} + +.revisions-controls input[type="checkbox"] { + position: relative; + top: -1px; + vertical-align: text-bottom; +} + +.revisions.pinned .revisions-controls { + position: fixed; + top: 0; + height: 82px; +} + +.revisions-tickmarks { + position: relative; + margin: 0 auto; + height: 0.7em; + top: 7px; + max-width: 70%; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.revisions-tickmarks > div { + position: absolute; + height: 100%; + border-style: solid; + border-width: 0 1px 0 0; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.revisions-tickmarks > div:first-child { + border-width: 0; +} + +.comparing-two-revisions .revisions-controls { + height: 140px; +} + +.comparing-two-revisions.pinned .revisions-controls { + height: 124px; +} + +.revisions .diff-error { + position: absolute; + text-align: center; + margin: 0 auto; + width: 100%; + display: none; +} + +.revisions.diff-error .diff-error { + display: block; +} + +.revisions .loading-indicator { + position: fixed; + vertical-align: middle; + opacity: 0; + width: 100%; + top: 50%; + margin-left: -90px; + -webkit-transition: opacity 0.5s; + -moz-transition: opacity 0.5s; + -ms-transition: opacity 0.5s; + -o-transition: opacity 0.5s; + transition: opacity 0.5s; + filter: alpha(opacity=0); /* ie8 and earlier */ +} + +body.folded .revisions .loading-indicator { + margin-left: -32px; +} + +.revisions .loading-indicator span.spinner { + display: block; + margin: 0 auto; + float: none; +} + +.revisions.loading .loading-indicator { + opacity: 1; + filter: alpha(opacity=100); /* ie8 and earlier */ +} + +.revisions .diff { + -webkit-transition: opacity 0.5s; + -moz-transition: opacity 0.5s; + -ms-transition: opacity 0.5s; + -o-transition: opacity 0.5s; + transition: opacity 0.5s; +} + +.revisions.loading .diff { + opacity: 0.5; + filter: alpha(opacity=50); /* ie8 and earlier */ +} + +.revisions.diff-error .diff { + visibility: hidden; +} + +.revisions-meta { + margin-top: 20px; +} + +.revision-toggle-compare-mode { + position: absolute; + top: 0; + right: 0; +} + +.comparing-two-revisions .revisions-previous, +.comparing-two-revisions .revisions-next, +.revisions-meta .diff-meta-to strong { + display: none; +} + +.revisions-controls .author-card .date { + color: #777; +} + +.revisions-controls .author-card.autosave { + color: #d54e21; +} + +.revisions-controls .author-card .author-name { + font-weight: bold; +} + +.comparing-two-revisions .diff-meta-to strong { + display: block; +} + +.revisions.pinned .revisions-buttons { + padding: 0 11px; +} + +.revisions-previous, +.revisions-next { + position: relative; + z-index: 1; +} + +.revisions-previous { + float: left; +} + +.revisions-next { + float: right; +} + +.revisions-controls .wp-slider { + max-width: 70%; + margin: 0 auto; + top: -3px; +} + +.revisions-diff { + padding: 15px; +} + +.revisions-diff h3:first-child { + margin-top: 0; +} + +/* Revision meta box */ +.post-revisions li img, +#revisions-meta-restored img { + vertical-align: middle; +} + +table.diff tbody tr td:nth-child(2) { + width: 4%; +} + +table.diff { + width: 100%; + white-space: pre-wrap; +} + +table.diff col.content { + width: auto; +} + +table.diff col.content.diffsplit { + width: 48%; +} + +table.diff col.diffsplit.middle { + width: auto; +} + +table.diff col.ltype { + width: 30px; +} + +table.diff tr { + background-color: transparent; +} + +table.diff td, +table.diff th { + font-family: Consolas, Monaco, monospace; + font-size: 14px; + line-height: 1.618; + padding: .5em; +} + +table.diff td h1, +table.diff td h2, +table.diff td h3, +table.diff td h4, +table.diff td h5, +table.diff td h6 { + margin: 0; +} + +table.diff .diff-deletedline del, +table.diff .diff-addedline ins { + text-decoration: none; +} + +.diff-meta { + padding: 5px; + clear: both; + min-height: 32px; +} + +.diff-title strong { + line-height: 32px; + min-width: 60px; + text-align: right; + float: left; + margin-right: 5px; +} + +.revisions-controls .author-card .author-info { + font-size: 12px; + line-height: 16px; +} + +.revisions-controls .author-card .avatar, +.revisions-controls .author-card .author-info { + float: left; + margin-left: 6px; + margin-right: 6px; +} + +.revisions-controls .author-card .byline { + display: block; + font-size: 12px; +} + +.revisions-controls .author-card .avatar { + vertical-align: middle; +} + +.diff-meta input.restore-revision { + float: right; + margin-left: 6px; + margin-right: 6px; + margin-top: 4px; +} + +.diff-meta-from { + display: none; +} + +.comparing-two-revisions .diff-meta-from { + display: block; +} + +.revisions-tooltip { + position: absolute; + bottom: 105px; + margin-right: 0; + margin-left: -69px; + z-index: 0; + max-width: 350px; + min-width: 130px; + padding: 8px 4px; + display: none; + opacity: 0; +} + +.revisions-tooltip.flipped { + margin-left: 0; + margin-right: -70px; +} + +.revisions.pinned .revisions-tooltip { + display: none !important; +} + +.comparing-two-revisions .revisions-tooltip { + bottom: 145px; +} + +.revisions-tooltip-arrow { + width: 70px; + height: 15px; + overflow: hidden; + position: absolute; + left: 0; + margin-left: 35px; + bottom: -15px; +} + +.revisions-tooltip.flipped .revisions-tooltip-arrow { + margin-left: 0; + margin-right: 35px; + left: auto; + right: 0; +} + +.revisions-tooltip-arrow > span { + content: ""; + position: absolute; + left: 20px; + top: -20px; + width: 25px; + height: 25px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} + +.revisions-tooltip.flipped .revisions-tooltip-arrow > span { + left: auto; + right: 20px; +} + +.ie8 .revisions-tooltip-arrow > span { + left: 15px; + top: -25px; + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"; +} + +.ie8 .revisions-tooltip.flipped .revisions-tooltip-arrow > span { + right: 25px; +} + +.revisions-tooltip, +.revisions-tooltip-arrow > span { + border-width: 1px; + border-style: solid; +} + + + + +.revisions-tooltip { + display: none; +} + +.arrow { + width: 70px; + height: 16px; + overflow: hidden; + position: absolute; + left: 0; + margin-left: -35px; + bottom: 90px; + z-index: 10000; +} + +.arrow::after { + z-index: 9999; +} + +.arrow.top { + top: -16px; + bottom: auto; +} + +.arrow.left { + left: 20%; +} + +.arrow:after { + content: ""; + position: absolute; + left: 20px; + top: -20px; + width: 25px; + height: 25px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} + +.revisions-tooltip, +.revisions-tooltip-arrow:after { + border-width: 1px; + border-style: solid; +} + +div.revisions-controls > .wp-slider > .ui-slider-handle { + margin-left: -10px; +} + +.rtl div.revisions-controls > .wp-slider > .ui-slider-handle { + margin-right: -10px; +} + + /* jQuery UI Slider */ +.wp-slider.ui-slider { + position: relative; + border-width: 1px; + border-style: solid; + text-align: left; + cursor: pointer; +} + +.wp-slider .ui-slider-handle { + border-radius: 50%; + height: 18px; + margin-top: -3px; + outline: none; + position: absolute; + width: 18px; + z-index: 2; +} + +.wp-slider .ui-slider-handle:before { + background: none; + position: absolute; + top: 0; + left: 0; + content: "\f229"; + font: normal 18px/1 'dashicons'; + speak: none; + -webkit-font-smoothing:antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-slider .ui-slider-handle.from-handle:before, +.wp-slider .ui-slider-handle.to-handle:before { + font-size: 20px !important; + margin: -1px 0 0 -1px; +} + +.wp-slider .ui-slider-handle.from-handle:before { + content: '\f139'; +} + +.wp-slider .ui-slider-handle.to-handle:before { + content: '\f141'; +} + +.rtl .wp-slider .ui-slider-handle.from-handle:before { + content: '\f141'; +} + +.rtl .wp-slider .ui-slider-handle.to-handle:before { + content: '\f139'; + right: -1px; +} + +.wp-slider .ui-slider-range { + position: absolute; + font-size: .7em; + display: block; + border: 0; + background-color: transparent; + background-image: none; +} + +.wp-slider.ui-slider-horizontal { + height: .7em; +} + +.wp-slider.ui-slider-horizontal .ui-slider-handle { + top: -.25em; + margin-left: -.6em; +} + +.wp-slider.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} + +.wp-slider.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} + +.wp-slider.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + + +/*------------------------------------------------------------------------------ + 11.3 - Featured Images +------------------------------------------------------------------------------*/ + +#select-featured-image { + padding: 4px 0; + overflow: hidden; +} + +#select-featured-image img { + max-width: 100%; + height: auto; + margin-bottom: 10px; +} + +#select-featured-image a { + float: left; + clear: both; +} + +#select-featured-image .remove { + display: none; + margin-top: 10px; +} + +.js #select-featured-image.has-featured-image .remove { + display: inline-block; +} + +.no-js #select-featured-image .choose { + display: none; +} + +/*------------------------------------------------------------------------------ + 11.4 - Post formats +------------------------------------------------------------------------------*/ + +.post-state-format { + overflow: hidden; + display: inline-block; + vertical-align: middle; + height: 20px; + width: 20px; + margin-right: 5px; + margin-top: -4px; +} + +.post-state-format:before { + display: block; + height: 20px; + width: 20px; + font: normal 20px/1 'dashicons' !important; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#post-formats-select { + line-height: 2em; +} + +#post-formats-select .post-format-icon:before { + top: 5px; +} + +input.post-format { + margin-top: 1px; +} + +label.post-format-icon { + margin-left: 0px; + padding: 2px 0 2px 0px; +} + +.post-format-icon:before { + position: relative; + display: inline-block; + margin-right: 7px; + font: normal 20px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.post-state-format.post-format-standard:before, +.post-format-icon.post-format-standard:before, +a.post-state-format.format-standard:before { + content: '\f109'; +} + +.post-state-format.post-format-image:before, +.post-format-icon.post-format-image:before, +a.post-state-format.format-image:before { + content: '\f128'; +} + +.post-state-format.post-format-gallery:before, +.post-format-icon.post-format-gallery:before, +a.post-state-format.format-gallery:before { + content: '\f161'; +} + +.post-state-format.post-format-audio:before, +.post-format-icon.post-format-audio:before, +a.post-state-format.format-audio:before { + content: '\f127'; +} + +.post-state-format.post-format-video:before, +.post-format-icon.post-format-video:before, +a.post-state-format.format-video:before { + content: '\f126'; +} + +.post-state-format.post-format-chat:before, +.post-format-icon.post-format-chat:before, +a.post-state-format.format-chat:before { + content: '\f125'; +} + +.post-state-format.post-format-status:before, +.post-format-icon.post-format-status:before, +a.post-state-format.format-status:before { + content: '\f130'; +} + +.post-state-format.post-format-aside:before, +.post-format-icon.post-format-aside:before, +a.post-state-format.format-aside:before { + content: '\f123'; +} + +.post-state-format.post-format-quote:before, +.post-format-icon.post-format-quote:before, +a.post-state-format.format-quote:before { + content: '\f122'; +} + +.post-state-format.post-format-link:before, +.post-format-icon.post-format-link:before, +a.post-state-format.format-link:before { + content: '\f103'; +} + +/*------------------------------------------------------------------------------ + 12.0 - Categories +------------------------------------------------------------------------------*/ + +.category-adder { + margin-left: 120px; + padding: 4px 0; +} + +.category-adder h4 { + margin: 0 0 8px; +} + +#side-sortables .category-adder { + margin: 0; +} + +#post-body ul.add-menu-item-tabs { + float: left; + width: 120px; + text-align: right; + /* Negative margin for the sake of those without JS: all tabs display */ + margin: 0 -120px 0 5px; + padding: 0; +} + +ul.add-menu-item-tabs li { + padding: 3px 5px 3px 8px; +} + +#post-body ul.add-menu-item-tabs li.tabs { + -webkit-border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +.wp-tab-panel, +.categorydiv div.tabs-panel, +.customlinkdiv div.tabs-panel, +.posttypediv div.tabs-panel, +.taxonomydiv div.tabs-panel { + min-height: 42px; + max-height: 200px; + overflow: auto; + padding: 0 0.9em; + border-style: solid; + border-width: 1px; +} + +div.tabs-panel-active { + display:block; +} + +div.tabs-panel-inactive { + display:none; +} + +#front-page-warning, +#front-static-pages ul, +ul.export-filters, +.inline-editor ul.cat-checklist ul, +.categorydiv ul.categorychecklist ul, +.customlinkdiv ul.categorychecklist ul, +.posttypediv ul.categorychecklist ul, +.taxonomydiv ul.categorychecklist ul { + margin-left: 18px; +} + +ul.categorychecklist li { + margin: 0; + padding: 0; + line-height: 22px; + word-wrap: break-word; +} + +.categorydiv .tabs-panel, +.customlinkdiv .tabs-panel, +.posttypediv .tabs-panel, +.taxonomydiv .tabs-panel { + border-width: 3px; + border-style: solid; +} + +.form-wrap p, +.form-wrap label { + font-size: 11px; +} + +.form-wrap label { + display: block; + padding: 2px; + font-size: 12px; +} + +.form-field input, +.form-field textarea { + border-style: solid; + border-width: 1px; + width: 95%; +} + +p.description, +.form-wrap p { + margin: 2px 0 5px; +} + +p.help, +p.description, +span.description, +.form-wrap p { + font-size: 13px; + font-style: italic; +} + +.form-wrap .form-field { + margin: 0 0 10px; + padding: 8px 0; +} + +.form-wrap .form-field #parent { + max-width: 100%; +} + +.col-wrap h3 { + margin: 12px 0; + font-size: 1.1em; +} + +.col-wrap p.submit { + margin-top: -10px; +} + + +/*------------------------------------------------------------------------------ + 13.0 - Tags +------------------------------------------------------------------------------*/ + +.tagsdiv { + margin-top: -8px; +} + +#poststuff .taghint { + color: #aaa; + margin: 15px 0 -24px 12px; +} + +#poststuff .tagsdiv .howto { + margin: 0 0 6px 0; +} + +.ajaxtag .newtag { + position: relative; +} + +.tagsdiv .newtag { + width: 180px; +} + +.tagsdiv .the-tags { + display: block; + height: 60px; + margin: 0 auto; + overflow: auto; + width: 260px; +} + +#post-body-content .tagsdiv .the-tags { + margin: 0 5px; +} + +p.popular-tags { + border: none; + line-height: 2em; + max-width: 1000px; + padding: 8px 12px 12px; + text-align: justify; +} + +p.popular-tags a { + padding: 0 3px; +} + +.tagcloud { + width: 97%; + margin: 0 0 40px; + text-align: justify; +} + +.tagcloud h3 { + margin: 2px 0 12px; +} + +.ac_results { + padding: 0; + margin: 0; + list-style: none; + position: absolute; + z-index: 10000; + display: none; + border-width: 1px; + border-style: solid; +} + +.wp-customizer .ac_results { + z-index: 500000; +} + +.ac_results li { + padding: 2px 5px; + white-space: nowrap; + text-align: left; +} + +.ac_over { + cursor: pointer; +} + +.ac_match { + text-decoration: underline; +} + +/* links tables */ +table.links-table { + width: 100%; +} + +.links-table th { + font-weight: normal; + text-align: left; + vertical-align: top; + min-width: 80px; + width: 20%; + word-wrap: break-word; +} + +.links-table th, +.links-table td { + padding: 5px 0; +} + +.links-table td label { + margin-right: 8px; +} + +.links-table td input[type="text"], +.links-table td textarea { + width: 100%; +} + +.links-table #link_rel { + max-width: 280px; +} + +/*------------------------------------------------------------------------------ + 14.0 - Media Screen +------------------------------------------------------------------------------*/ + +.media-item .describe { + border-collapse: collapse; + width: 100%; + border-top-style: solid; + border-top-width: 1px; + clear: both; + cursor: default; +} + +.media-item.media-blank .describe { + border: 0; +} + +.media-item .describe th { + vertical-align: top; + text-align: left; + padding: 5px 10px 10px; + width: 140px; +} + +.media-item .describe .align th { + padding-top: 0; +} + +.media-item .media-item-info tr { + background-color: transparent; +} + +.media-item .describe td { + padding: 0 8px 8px 0; + vertical-align: top; +} + +.media-item thead.media-item-info td { + padding: 4px 10px 0; +} + +.media-item .media-item-info .A1B1 { + padding: 0 0 0 10px; +} + +.media-item td.savesend { + padding-bottom: 15px; +} + +.media-item .thumbnail { + max-height: 128px; + max-width: 128px; +} + +#wpbody-content #async-upload-wrap a { + display: none; +} + +.media-upload-form { + margin-top: 20px; +} + +.media-upload-form td label { + margin-right: 6px; + margin-left: 2px; +} + +.media-upload-form .align .field label { + display: inline; + padding: 0 0 0 23px; + margin: 0 1em 0 3px; + font-weight: 600; +} + +.media-upload-form tr.image-size label { + margin: 0 0 0 5px; + font-weight: 600; +} + +.media-upload-form th.label label { + font-weight: 600; + margin: 0.5em; + font-size: 13px; +} + +.media-upload-form th.label label span { + padding: 0 5px; +} + +abbr.required { + border: medium none; + text-decoration: none; +} + +.media-item .describe input[type="text"], +.media-item .describe textarea { + width: 460px; +} + +.media-item .describe p.help { + margin: 0; + padding: 0 0 0 5px; +} + +.media-item .edit-attachment, +.describe-toggle-on, +.describe-toggle-off { + display: block; + line-height: 36px; + float: right; +} + +.media-item .describe-toggle-off, +.media-item.open .describe-toggle-on { + display: none; +} + +.media-item.open .describe-toggle-off { + display: block; +} + +#media-items .media-item { + border-bottom-style: solid; + border-bottom-width: 1px; + min-height: 36px; + position: relative; + width: 100%; +} + +#media-items { + width: 623px; +} + +.media-new-php #media-items { + margin: 1em 0; +} + +#media-items:empty { + border: 0 none; +} + +.media-item .filename { + line-height: 36px; + overflow: hidden; +} + +.media-item .error-div { + padding-left: 10px; +} + +.media-item .pinkynail { + float: left; + margin: 2px 10px 0 0; + max-width: 40px; + max-height: 32px; +} + +.media-item .startopen, +.media-item .startclosed { + display: none; +} + +.media-item .original { + position: relative; + height: 34px; +} + +.media-item .progress { + float: right; + height: 22px; + margin: 7px 0 0; + width: 200px; + line-height: 2em; + padding: 0; + overflow: hidden; + margin-bottom: 2px; + border-radius: 22px; + background: #ddd; + -webkit-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); +} + +.media-item .bar { + z-index: 9; + width: 0; + height: 100%; + margin-top: -22px; + border-radius: 22px; + background-color: #0074a2; + -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,0.3); + box-shadow: inset 0 0 2px rgba(0,0,0,0.3); +} + +.media-item .progress .percent { + z-index: 10; + position: relative; + width: 200px; + padding: 0; + color: #fff; + text-align: center; + line-height: 22px; + font-weight: 400; + text-shadow: 0px 1px 2px rgba(0,0,0,0.2); +} + +.upload-php .fixed .column-parent { + width: 15%; +} + +.js .html-uploader #plupload-upload-ui { + display: none; +} + +.js .html-uploader #html-upload-ui { + display: block; +} + +.media-upload-form .media-item.error { + margin: 0; + padding: 0; +} + +.media-upload-form .media-item.error p, +.media-item .error-div { + line-height: 16px; + margin: 5px 10px; + padding: 0; +} + +.media-item .error-div a.dismiss { + display: block; + float: right; + margin: 5px 4px 0 15px; +} + +/*------------------------------------------------------------------------------ + 14.1 - Media Library +------------------------------------------------------------------------------*/ + +.find-box { + width: 600px; + height: 300px; + overflow: hidden; + padding: 33px 0 51px; + position: absolute; + z-index: 1000; +} + +.find-box-head { + cursor: move; + font-weight: 600; + height: 2em; + line-height: 2em; + padding: 1px 12px; + position: absolute; + top: 5px; + width: 100%; +} + +.find-box-inside { + overflow: auto; + padding: 6px; + height: 100%; +} + +.find-box-search { + overflow: hidden; + padding: 9px; + position: relative; +} + +.find-box-search .spinner { + float: none; + left: 125px; + position: absolute; + top: 9px; +} + +#find-posts-input { + float: left; + width: 140px; + height: 24px; +} + +#find-posts-search { + float: left; + margin: 1px 4px 0 3px; +} + +#find-posts-response { + margin: 8px 0; + padding: 0 1px 6px; +} + +#find-posts-response table { + width: 100%; +} + +#find-posts-response .found-radio { + padding: 3px 0 0 8px; + width: 15px; +} + +.find-box-buttons { + padding: 8px; + overflow: hidden; +} + +.find-box #resize-se { + position: absolute; + right: 1px; + bottom: 1px; +} + +.ui-find-overlay { + position: absolute; + top: 0; + left: 0; + background-color: #000; + opacity: 0.6; + filter: alpha(opacity=60); +} + +ul#dismissed-updates { + display: none; +} + +form.upgrade { + margin-top: 8px; +} + +form.upgrade .hint { + font-style: italic; + font-size: 85%; + margin: -0.5em 0 2em 0; +} + +#poststuff .inside .the-tagcloud { + margin: 5px 0 10px; + padding: 8px; + border-width: 1px; + border-style: solid; + line-height: 1.8em; + word-spacing: 3px; + -webkit-border-radius: 6px; + border-radius: 6px; +} + +.drag-drop #drag-drop-area { + border: 4px dashed #bbb; + height: 200px; +} + +.drag-drop .drag-drop-inside { + margin: 70px auto 0; + width: 250px; +} + +.drag-drop-inside p { + color: #aaa; + font-size: 14px; + margin: 5px 0; + display: none; +} + +.drag-drop .drag-drop-inside p { + text-align: center; +} + +.drag-drop-inside p.drag-drop-info { + font-size: 20px; +} + +.drag-drop .drag-drop-inside p, +.drag-drop-inside p.drag-drop-buttons { + display: block; +} + +/* +#drag-drop-area:-moz-drag-over { + border-color: #83b4d8; +} +borger color while dragging a file over the uploader drop area */ +.drag-drop.drag-over #drag-drop-area { + border-color: #83b4d8; +} + +#plupload-upload-ui { + position: relative; +} + + +/*------------------------------------------------------------------------------ + 14.2 - Image Editor +------------------------------------------------------------------------------*/ + +.wp_attachment_details #attachment_caption { + height: 4em; +} + +.describe .image-editor { + vertical-align: top; +} + +.imgedit-wrap { + position: relative; +} + +.imgedit-settings p { + margin: 8px 0; +} + +.post-php .imgedit-wrap table { + width: 100%; +} + +.describe .imgedit-wrap table td, +.wp_attachment_holder .imgedit-wrap table td { + vertical-align: top; + padding-top: 0; +} + +.describe .imgedit-wrap table td.imgedit-settings { + padding: 0 5px; +} + +.wp_attachment_holder .imgedit-wrap table td.imgedit-settings { + width: 250px; +} + +td.imgedit-settings input { + margin-top: 0; + vertical-align: middle; +} + +.imgedit-wait { + position: absolute; + top: 0; + background: #fff url('../images/spinner.gif') no-repeat scroll 22px 10px; + background-size: 20px 20px; + opacity: 0.7; + filter: alpha(opacity=70); + width: 100%; + height: 500px; + display: none; +} + +.spinner { + background: url('../images/spinner.gif') no-repeat; + background-size: 20px 20px; + display: none; + float: right; + opacity: 0.7; + filter: alpha(opacity=70); + width: 20px; + height: 20px; + margin: 2px 5px 0; +} + +.no-float { + float: none; +} + +.media-disabled, +.imgedit-settings .disabled { + color: grey; +} + +.wp_attachment_image, +.A1B1 { + overflow: hidden; +} + +.wp_attachment_image .button, +.A1B1 .button { + float: left; +} + +.no-js .wp_attachment_image .button { + display: none; +} + +.wp_attachment_image .spinner, +.A1B1 .spinner { + float: left; + padding: 0 0 4px 0; + vertical-align: bottom; +} + +.imgedit-menu { + margin: 0 0 12px; + min-width: 300px; +} + +.imgedit-menu div { + float: left; + width: 32px; + background: none; + margin: 0 8px 0 0; + height: 32px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-align: center; + line-height: 28px; +} + +.imgedit-menu div:before { + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; +} + +.imgedit-crop:before { + content:'\f165'; +} + +.imgedit-rleft:before { + content:'\f166'; +} + +.imgedit-rright:before { + content:'\f167'; +} + +.imgedit-flipv:before { + content:'\f168'; +} + +.imgedit-fliph:before { + content:'\f169'; +} + +.imgedit-undo:before { + content:'\f171'; +} + +.imgedit-redo:before { + content:'\f172'; +} + +.imgedit-crop-wrap { + position: relative; +} + +.imgedit-crop { + margin: 0 8px 0 0; +} + +.imgedit-rleft { + margin: 0 3px; +} + +.imgedit-rright { + margin: 0 8px 0 3px; +} + +.imgedit-flipv { + margin: 0 3px; +} + +.imgedit-fliph { + margin: 0 8px 0 3px; +} + +.imgedit-undo { + margin: 0 3px; +} + +.imgedit-redo { + margin: 0 8px 0 3px; +} + +.imgedit-applyto img { + margin: 0 8px 0 0; +} + +.imgedit-group-top { + margin: 5px 0; +} + +.imgedit-applyto .imgedit-label { + padding: 2px 0 0; + display: block; +} + +.imgedit-help { + display: none; + font-style: italic; + margin-bottom: 8px; +} + +a.imgedit-help-toggle { + text-decoration: none; +} + +.form-table td.imgedit-response { + padding: 0; +} + +.imgedit-submit { + margin: 8px 0; +} + +.imgedit-submit-btn { + margin-left: 20px; +} + +.imgedit-wrap .nowrap { + white-space: nowrap; +} + +span.imgedit-scale-warn { + color: red; + font-size: 20px; + font-style: normal; + visibility: hidden; + vertical-align: middle; +} + +.imgedit-group { + margin-bottom: 8px; + padding: 2px 10px; +} + +/*------------------------------------------------------------------------------ + 15.0 - Comments Screen +------------------------------------------------------------------------------*/ + +.form-table { + border-collapse: collapse; + margin-top: 0.5em; + width: 100%; + clear: both; +} + +.form-table, +.form-table td, +.form-table th, +.form-table td p, +.form-wrap label { + font-size: 14px; +} + +.form-table td { + margin-bottom: 9px; + padding: 15px 10px; + line-height: 1.3; + vertical-align: middle; +} + +.form-table th, +.form-wrap label { + font-weight: normal; + text-shadow: none; + vertical-align: baseline; +} + +.form-table th { + vertical-align: top; + text-align: left; + padding: 20px 10px 20px 0; + width: 200px; + line-height: 1.3; + font-weight: 600; +} + +.form-table th.th-full { + width: auto; + font-weight: 400; +} + +.form-table input.tog { + margin-top: 2px; + margin-right: 2px; + float: left; +} + +.form-table td p { + margin-top: 4px; + margin-bottom: 0; +} + +.form-table td fieldset label { + margin: 0.25em 0 0.5em !important; + display: inline-block; +} + +.form-table td fieldset label, +.form-table td fieldset p, +.form-table td fieldset li { + line-height: 1.4em; +} + +.form-table input.tog, +.form-table input[type=radio] { + margin-top: -4px; + margin-right: 4px; + float: none; +} + +.commentlist li { + padding: 1em 1em .2em; + margin: 0; + border-bottom-width: 1px; + border-bottom-style: solid; +} + +.commentlist li li { + border-bottom: 0; + padding: 0; +} + +.commentlist p { + padding: 0; + margin: 0 0 .8em; +} + +/* reply to comments */ +#replyrow input { + border-width: 1px; + border-style: solid; +} + +#replyrow td { + padding: 2px; +} + +#replysubmit { + margin: 0; + padding: 0 5px 3px; + text-align: center; +} + +#replysubmit .spinner { + padding: 2px 0 0; + vertical-align: top; + float: right; +} + +#replysubmit .button { + margin-right: 5px; +} + +#replysubmit .error { + color: red; + line-height: 21px; + text-align: center; +} + +#replyrow h5 { + margin: .2em 0 0; + padding: 0 5px; + line-height: 1.4em; + font-size: 1em; +} + +#edithead .inside { + float: left; + padding: 3px 0 2px 5px; + margin: 0; + text-align: center; +} + +#edithead .inside input { + width: 180px; +} + +#edithead label { + padding: 2px 0; +} + +#replycontainer { + padding: 5px; +} + +#replycontent { + height: 120px; + -webkit-box-shadow: none; + box-shadow: none; +} + +.comment-php .wp-editor-area { + height: 200px; +} + +.comment-ays { + margin-bottom: 0; + border-bottom-style: solid; + border-bottom-width: 1px; +} + +.comment-ays .alt { + background-color: transparent; +} + +.trash-undo-inside, +.spam-undo-inside { + margin: 1px 8px 1px 0; + line-height: 16px; +} + +.spam-undo-inside .avatar, +.trash-undo-inside .avatar { + height: 20px; + width: 20px; + margin-right: 8px; + vertical-align: middle; +} + +.stuffbox .editcomment { + clear: none; +} + +#comment-status-radio p { + margin: 3px 0 5px; +} + +#comment-status-radio input { + margin: 2px 3px 5px 0; + vertical-align: middle; +} + +#comment-status-radio label { + padding: 5px 0; +} + +.commentlist .avatar { + vertical-align: text-top; +} + +#the-comment-list .unapproved th.check-column input { + margin-left: 4px; +} + + +/*------------------------------------------------------------------------------ + 16.0 - Themes +------------------------------------------------------------------------------*/ + + +/*------------------------------------------------------------------------------ + 16.1 - Manage Themes +------------------------------------------------------------------------------*/ + +.theme-browser .themes { + clear: both; + padding: 0 0 100px; +} + +.themes-php .wrap h2 { + float: left; + margin-bottom: 15px; +} + +.network-admin.themes-php .wrap h2 { + margin-bottom: 0; +} + +.themes-php .wrap h2 .button { + margin-left: 20px; +} + +.themes-php .wrap .theme-count { + color: #fff; + border-radius: 30px; + background: #777; + font-size: 14px; + padding: 4px 10px; + font-weight: 600; + margin-left: 5px; + margin-right: 20px; + position: relative; + top: -3px; +} + +/* Position admin messages */ +.themes-php div.updated, +.themes-php div.error { + margin: 0 0 20px 0; + clear: both; +} + +.themes-php div.updated a { + text-decoration: underline; +} + +/** + * Main theme element + * (has flexible margins) + */ +.theme-browser .theme { + cursor: pointer; + float: left; + margin: 0 4% 4% 0; + position: relative; + width: 30.6%; + border: 1px solid #dedede; + -webkit-box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); + box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.ie8 .theme-browser .theme { + width: 30%; + margin: 0 3% 4% 0; +} + +.theme-browser .theme:nth-child(3n) { + margin-right: 0; +} + +.theme-browser .theme:hover, +.theme-browser .theme:focus { + cursor: pointer; +} + +.theme-browser .theme .theme-name { + font-size: 15px; + font-weight: 600; + margin: 0; + padding: 15px; + -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + background: #fff; + background: rgba(255,255,255,0.65); +} + +/* Activate and Customize buttons, shown on hover */ +.theme-browser .theme .theme-actions { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + opacity: 0; + -webkit-transition: opacity 0.1s ease-in-out; + transition: opacity 0.1s ease-in-out; + position: absolute; + bottom: 0; + right: 0; + height: 38px; + padding: 9px 10px 0 10px; + background: rgba(244, 244, 244, 0.7); + border-left: 1px solid rgba(0,0,0,0.05); +} + +.theme-browser .theme:hover .theme-actions { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; +} + +.theme-browser .theme .theme-actions .button-primary { + margin-right: 3px; +} + +.theme-browser .theme .theme-actions .button-secondary { + float: none; + margin-left: 3px; +} + +/** + * Theme Screenshot + * + * Has a fixed aspect ratio of 1.5 to 1 regardless of screenshot size + * It is also responsive. + */ +.theme-browser .theme .theme-screenshot { + display: block; + overflow: hidden; + position: relative; + -webkit-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; +} + +.theme-browser .theme .theme-screenshot:after { + content: ''; + display: block; + padding-top: 66.66666%; /* using a 3/2 aspect ratio */ +} + +.theme-browser .theme .theme-screenshot img { + height: auto; + position: absolute; + left: 0; + top: 0; + width: 100%; + -webkit-transform: translateZ( 0 ); /* Prevents rendering bugs in Chrome */ + -webkit-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; +} + +.theme-browser .theme:hover .theme-screenshot { + background: #fff; +} + +.theme-browser.rendered .theme:hover .theme-screenshot img { + opacity: 0.4; +} + +.theme-browser .theme .more-details { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + opacity: 0; + position: absolute; + top: 35%; + right: 25%; + left: 25%; + background: #222; + background: rgba(0,0,0,0.7); + color: #fff; + font-size: 15px; + text-shadow: 0 1px 0 rgba(0,0,0,0.6); + -webkit-font-smoothing: antialiased; + font-weight: 600; + padding: 15px 12px; + text-align: center; + border-radius: 3px; + -webkit-transition: opacity 0.1s ease-in-out; + transition: opacity 0.1s ease-in-out; +} +.theme-browser .theme:focus { + outline: 1px dotted #222; +} +/* Hide shortcut actions and hover feedback when using tab navigation */ +.theme-browser .theme:focus .theme-actions { + display: none; +} +/* Restore display of theme controls if you hover a focused theme */ +.theme-browser .theme:focus:hover .theme-actions { + display: block; +} +.theme-browser .theme:focus .more-details { + opacity: 1; +} +/* Current theme needs to have its action always on view */ +.theme-browser .theme.active:focus .theme-actions { + display: block; +} + +.theme-browser.rendered .theme:hover .more-details { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; +} + +/** + * Displays a theme update notice + * when an update is available. + */ +.theme-browser .theme .theme-update { + background: #d54e21; + background: rgba(213, 78, 33, 0.95); + color: #fff; + display: block; + font-size: 13px; + font-weight: 400; + height: 48px; + line-height: 48px; + padding: 0 10px; + position: absolute; + top: 0; + right: 0; + left: 0; + border-bottom: 1px solid rgba(0,0,0,0.25); + overflow: hidden; +} + +.theme-browser .theme .theme-update:before { + content: '\f463'; + display: inline-block; + font: normal 20px/1 'dashicons'; + margin: 0 6px 0 0; + opacity: 0.8; + position: relative; + top: 5px; + speak: none; + -webkit-font-smoothing: antialiased; +} + + +/** + * The currently active theme + */ +.theme-browser .theme.active .theme-name { + background: #2f2f2f; + color: #fff; + padding-right: 110px; + font-weight: 300; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.5); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.5); +} + +.theme-browser .theme.active .theme-name span { + font-weight: 600; +} + +.theme-browser .theme.active .theme-actions { + background: rgba(49,49,49,0.7); + border-left: none; + opacity: 1; +} + +.theme-browser .theme.active .theme-actions .button-primary { + margin-right: 0; +} + +.theme-browser .theme .theme-author { + background: #222; + color: #eee; + display: none; + font-size: 14px; + margin: 0 10px; + padding: 5px 10px; + position: absolute; + bottom: 56px; +} + +.theme-browser .theme.display-author .theme-author { + display: block; +} + +.theme-browser .theme.display-author .theme-author a { + color: inherit; + text-decoration: none; +} + +/** + * Add new theme + */ +.theme-browser .theme.add-new-theme { + border: none; + box-shadow: none; +} + +.theme-browser .theme.add-new-theme a { + color: #999; + text-decoration: none; + display: block; + position: relative; + z-index: 1; +} + +.theme-browser .theme.add-new-theme:after { + display: block; + content: ''; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; + background: transparent; + background: rgba(0, 0, 0, 0); + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 10% 0 0 0; + text-shadow: none; + border: 5px dashed #d5d2ca; + border: 5px dashed rgba(0, 0, 0, 0.1); + -webkit-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.theme-browser .theme.add-new-theme span:after { + background: #e5e5e5; + background: rgba(153, 153, 153, 0.1); + border-radius: 50%; + display: inline-block; + content: '\f132'; + -webkit-font-smoothing: antialiased; + font: normal 74px/115px 'dashicons'; + width: 100px; + height: 100px; + vertical-align: middle; + text-align: center; + color: rgb(153, 153, 153); + position: absolute; + top: 30%; + left: 50%; + margin-left: -50px; + text-indent: -4px; + padding: 0; + text-shadow: none; + z-index:4; +} + +.rtl .theme-browser .theme.add-new-theme span:after { + text-indent: 4px; +} + +.theme-browser .theme.add-new-theme:hover .theme-screenshot { + background: none; +} + +.theme-browser .theme.add-new-theme:hover span:after { + background: #fff; + color: #0074a2; +} + +.theme-browser .theme.add-new-theme:hover:after { + border-color: transparent; + color: #fff; + background: #0074a2; + content: ''; +} + +.theme-browser .theme.add-new-theme .theme-name { + background: none; + text-align: center; + box-shadow: none; + font-weight: 400; + position: relative; + top: 0; + margin-top: -10%; + margin-bottom: 10%; +} + +.theme-browser .theme.add-new-theme:hover .theme-name { + color: #fff; + z-index: 2; +} + +/* + * The search form + */ +.themes-php .theme-search { + position: relative; + top: -2px; + left: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.5; + width: 280px; +} + +/** + * Theme Overlay + * Shown when clicking a theme + */ +.theme-overlay .theme-backdrop { + position: absolute; + left: -20px; + right: 0; + top: 0; + bottom: 0; + background: #f1f1f1; + background: rgba( 238, 238, 238, 0.9 ); + z-index: 10; +} + +body.theme-overlay-open { + overflow: hidden; +} + +.theme-overlay .theme-header { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 48px; + border-bottom: 1px solid #ddd; +} + +.theme-overlay .theme-header .close { + cursor: pointer; + height: 48px; + width: 50px; + text-align: center; + float: right; + border: 0; + border-left: 1px solid #ddd; + background-color: transparent; +} + +.theme-overlay .theme-header .close:hover:before, +.theme-overlay .theme-header .close:focus:before { + color: #fff; +} + +.theme-overlay .theme-header .close:before { + font: normal 30px/50px 'dashicons' !important; + color: #777; + display: inline-block; + content: '\f335'; + font-weight: 300; +} + +/* Left and right navigation */ +.theme-overlay .theme-header .right, +.theme-overlay .theme-header .left { + cursor: pointer; + color: #777; + background-color: transparent; + height: 48px; + width: 54px; + float: left; + text-align: center; + border: 0; + border-right: 1px solid #ddd; +} + +.theme-overlay .theme-header .close:hover, +.theme-overlay .theme-header .right:hover, +.theme-overlay .theme-header .left:hover, +.theme-overlay .theme-header .close:focus, +.theme-overlay .theme-header .right:focus, +.theme-overlay .theme-header .left:focus { + background: #0074a2; + color: #fff; +} + +.theme-overlay .theme-header .left.disabled, +.theme-overlay .theme-header .right.disabled, +.theme-overlay .theme-header .left.disabled:hover, +.theme-overlay .theme-header .right.disabled:hover { + color: #ccc; + background: inherit; + cursor: inherit; +} + +.theme-overlay .theme-header .right:before, +.theme-overlay .theme-header .left:before { + font: normal 20px/50px 'dashicons' !important; + display: inline; + font-weight: 300; +} + +.theme-overlay .theme-header .left:before { + content: '\f340'; +} + +.theme-overlay .theme-header .right:before { + content: '\f344'; +} + +.rtl .theme-overlay .theme-header .left:before { + content: '\f345'; +} + +.rtl .theme-overlay .theme-header .right:before { + content: '\f341'; +} + +.theme-overlay .theme-wrap { + clear: both; + position: fixed; + top: 9%; + left: 190px; + right: 30px; + bottom: 3%; + background: #fff; + -webkit-box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1); + z-index: 20; + box-sizing: border-box; +} + +.theme-overlay .theme-wrap:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +body.folded .theme-overlay .theme-wrap { + left: 70px; +} + +.theme-overlay .theme-about { + position: absolute; + top: 49px; + bottom: 57px; + left: 0; + right: 0; + overflow: auto; + padding: 2% 4%; +} +.theme-overlay .theme-about:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.theme-overlay .theme-actions { + position: absolute; + text-align: center; + bottom: 0; + left: 0; + right: 0; + padding: 10px 25px 5px; + background: #f3f3f3; + z-index: 30; + box-sizing: border-box; + border-top: 1px solid #eee; +} + +.ie8 .theme-overlay .theme-actions { + border: 1px solid #eee; +} + +.theme-overlay .theme-actions a { + margin-right: 5px; + margin-bottom: 5px; +} + +.theme-overlay .theme-actions .delete-theme { + color: #a00; + position: absolute; + right: 10px; + bottom: 5px; + text-decoration: none; + border-color: transparent; + box-shadow: none; + background: transparent; +} + +.theme-overlay .theme-actions .delete-theme:hover, +.theme-overlay .theme-actions .delete-theme:focus { + background: #d54e21; + color: #fff; + border-color: #d54e21; +} + +.theme-overlay .theme-actions .active-theme, +.theme-overlay.active .theme-actions .inactive-theme { + display: none; +} + +.theme-overlay .theme-actions .inactive-theme, +.theme-overlay.active .theme-actions .active-theme { + display: block; +} + +/** + * Theme Screenshots gallery + */ +.theme-overlay .theme-screenshots { + float: left; + margin: 0 30px 0 0; + width: 55%; + max-width: 880px; + text-align: center; +} + +/* First screenshot, shown big */ +.theme-overlay .screenshot { + border: 1px solid #fff; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + position: relative; + -webkit-box-shadow: 0 0 0 1px rgba(0,0,0,0.2); + box-shadow: 0 0 0 1px rgba(0,0,0,0.2); +} + +.theme-overlay .screenshot:after { + content: ''; + display: block; + padding-top: 75%; /* using a 4/3 aspect ratio */ +} + +.theme-overlay .screenshot img { + height: auto; + position: absolute; + left: 0; + top: 0; + width: 100%; +} +/* Handles old 300px screenshots */ +.theme-overlay.small-screenshot .theme-screenshots { + position: absolute; + width: 302px; +} +.theme-overlay.small-screenshot .theme-info { + margin-left: 350px; + width: auto; +} + +/* Other screenshots, shown small and square */ +.theme-overlay .screenshot.thumb { + background: #ccc; + border: 1px solid #eee; + float: none; + display: inline-block; + margin: 10px 5px 0; + width: 140px; + height: 80px; + cursor: pointer; +} + +.theme-overlay .screenshot.thumb:after { + content: ''; + display: block; + padding-top: 100%; /* using a 1/1 aspect ratio */ +} + +.theme-overlay .screenshot.thumb img { + cursor: pointer; + height: auto; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: auto; +} + +.theme-overlay .screenshot.selected { + background: transparent; + border: 2px solid #2ea2cc; +} + +.theme-overlay .screenshot.selected img { + opacity: 0.8; +} + +/* No screenshot placeholder */ +.theme-browser .theme .theme-screenshot.blank, +.theme-overlay .screenshot.blank { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYGWO8d+/efwYkoKioiMRjYGBC4WHhUK6A8T8QIJt8//59ZC493AAAQssKpBK4F5AAAAAASUVORK5CYII=); +} + +/** + * Theme heading information + */ +.theme-overlay .theme-info { + width: 40%; + float: left; +} + +.theme-overlay .current-label { + background: #333; + color: #fff; + font-size: 11px; + display: inline-block; + padding: 2px 8px; + border-radius: 2px; + margin: 0 0 -10px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.theme-overlay .theme-name { + color: #222; + font-size: 32px; + font-weight: 100; + margin: 10px 0 0; + line-height: 1.3; +} + +.theme-overlay .theme-version { + color: #999; + font-size: 13px; + font-weight: 400; + float: none; + display: inline-block; + margin-left: 10px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.theme-overlay .theme-author { + color: #686868; + font-size: 16px; + font-weight: 400; + margin: 15px 0 25px; +} + +.theme-overlay .theme-author a { + text-decoration: none; +} + +.theme-overlay .theme-description { + color: #555; + font-size: 15px; + font-weight: 400; + line-height: 1.5; + margin: 30px 0 0 0; +} + +.theme-overlay .theme-tags { + border-top: 3px solid #eee; + color: #888; + font-size: 13px; + font-weight: 400; + margin: 30px 0 0 0; + padding-top: 20px; +} + +.theme-overlay .theme-tags span { + color: #444; + font-weight: bold; + margin-right: 5px; +} + +/* Theme Updates info */ +.theme-overlay .theme-update-message { + background: #fefaf7; + border: 1px solid #eee; + border-left: 4px solid #d54e21; + border-radius: 3px; + padding: 5px 20px 10px; +} + +.theme-overlay .theme-update { + color: #222; + font-size: 18px; + display: inline-block; + line-height: 40px; + margin: 0; +} + +.theme-overlay .parent-theme { + background: #f7fcfe; + border: 1px solid #eee; + border-left: 4px solid #2ea2cc; + font-size: 14px; + font-weight: normal; + margin-top: 30px; + padding: 10px 10px 10px 20px; +} + +.theme-overlay .parent-theme strong { + font-weight: 700; +} + +/** + * Single Theme Mode + * Displays detailed view inline when a user has no switch capabilities + */ +.single-theme .theme-overlay .theme-backdrop, +.single-theme .theme-overlay .theme-header, +.single-theme .theme { + display: none; +} + +.single-theme .theme-overlay .theme-wrap { + clear: both; + min-height: 330px; + position: relative; + left: auto; + right: auto; + top: auto; + bottom: auto; +} + +.single-theme .theme-overlay .theme-about { + padding: 30px 30px 70px; + position: static; +} + +.single-theme .theme-overlay .theme-actions { + position: absolute; +} + +/** + * Basic Responsive structure... + * + * Shuffles theme columns around based on screen width + */ + +@media only screen and (min-width: 2000px) { + #wpwrap .theme-browser .theme { + width: 17.6%; + margin: 0 3% 3% 0; + } + + #wpwrap .theme-browser .theme:nth-child(3n), + #wpwrap .theme-browser .theme:nth-child(4n) { + margin-right: 3%; + } + + #wpwrap .theme-browser .theme:nth-child(5n) { + margin-right: 0; + } +} + +@media only screen and (min-width: 1680px) { + .theme-overlay .theme-wrap { + width: 1450px; + margin: 0 auto; + } +} + +/* Maximum screenshot width reaches 440px */ +@media only screen and (min-width: 1640px) { + .theme-browser .theme { + width: 22.7%; + margin: 0 3% 3% 0; + } + .theme-browser .theme .theme-screenshot:after { + padding-top: 75%; /* using a 4/3 aspect ratio */ + } + + .theme-browser .theme:nth-child(3n) { + margin-right: 3%; + } + + .theme-browser .theme:nth-child(4n) { + margin-right: 0; + } +} +/* Maximum screenshot width reaches 440px */ +@media only screen and (max-width: 1120px) { + .theme-browser .theme { + width: 47.5%; + margin-right: 0; + } + + .theme-browser .theme:nth-child(even) { + margin-right: 0; + } + + .theme-browser .theme:nth-child(odd) { + margin-right: 5%; + } +} + +/* Admin menu is folded */ +@media only screen and (max-width: 900px) { + .theme-overlay .theme-wrap { + left: 65px; + } +} + +@media only screen and (max-width: 780px) { + body.folded .theme-overlay .theme-wrap, + .theme-overlay .theme-wrap { + top: 0; /* The adminmenu isn't fixed on mobile, so this can use the full viewport height */ + right: 0; + bottom: 0; + left: 0; + padding: 70px 20px 20px; + border: none; + z-index: 500; /* should overlap #wpadminbar, which is 500 on mobile. */ + position: fixed; + } + + .theme-browser .theme.active .theme-name span { + /* Hide the "Active: " label on smaller screens. */ + display: none; + } + + .theme-overlay .theme-screenshots { + width: 40%; + } + + .theme-overlay .theme-info { + width: 50%; + } + .single-theme .theme-wrap { + padding: 10px; + } + + .theme-browser .theme .theme-actions { + padding: 5px 10px 4px 10px; + } + + .theme-overlay.small-screenshot .theme-screenshots { + position: static; + float: none; + max-width: 302px; + } + + .theme-overlay.small-screenshot .theme-info { + margin-left: 0; + width: auto; + } + + .theme:not(.active):hover .theme-actions, + .theme:hover .more-details { + display: none; + } + + .theme-browser.rendered .theme:hover .theme-screenshot img { + opacity: 1.0; + } +} + +@media only screen and (max-width: 480px) { + .theme-browser .theme { + width: 100%; + margin-right: 0; + } + + .theme-browser .theme:nth-child(2n), + .theme-browser .theme:nth-child(3n) { + margin-right: 0; + } +} + +@media only screen and (max-width: 650px) { + .theme-overlay .theme-update, + .theme-overlay .theme-description { + margin-left: 0; + } + + .theme-overlay .theme-actions .delete-theme { + position: relative; + right: auto; + bottom: auto; + } + + .theme-overlay .theme-actions .inactive-theme { + display: inline; + } + + .theme-overlay .theme-screenshots { + width: 100%; + float: none; + } + + .theme-overlay .theme-info { + width: 100%; + } + + .theme-overlay .theme-author { + margin: 5px 0 15px 0; + } + + .theme-overlay .current-label { + margin-top: 10px; + font-size: 13px; + } + + .themes-php .wrap h2 { + width: 100%; + } + + .themes-php .theme-search { + float: none; + clear: both; + left: 0; + top: 0; + right: 0; + margin: 10px 0; + width: 100%; + } + + .theme-browser .theme.add-new-theme span:after { + font: normal 60px/90px 'dashicons'; + width: 80px; + height: 80px; + top: 30%; + left: 50%; + text-indent: 0; + margin-left: -40px; + } + + .single-theme .theme-wrap { + margin: 0 -12px 0 -10px; + padding: 10px; + } + .single-theme .theme-overlay .theme-about { + padding: 10px; + overflow: visible; + } + .single-theme .current-label { + display: none; + } + .single-theme .theme-overlay .theme-actions { + position: static; + } +} + +.broken-themes { + clear: both; +} + +.broken-themes table { + text-align: left; + width: 50%; + border-spacing: 3px; + padding: 3px; +} + + +/*------------------------------------------------------------------------------ + 16.2 - Install Themes +------------------------------------------------------------------------------*/ + +.theme-install-php h4 { + margin: 2.5em 0 8px; +} + +.theme-install-php .tablenav { + height: auto; +} + +.theme-install-php .spinner { + margin-top: 9px; +} + +.available-theme { + display: inline-block; + margin-right: 10px; + overflow: hidden; + padding: 20px 20px 20px 0; + vertical-align: top; + width: 300px; +} + +.available-theme .screenshot { + width: 300px; + height: 225px; + display: block; + border-width: 1px; + border-style: solid; + margin-bottom: 10px; + overflow: hidden; +} + +.available-theme img { + width: 300px; +} + +.available-theme h3 { + margin: 15px 0 0; +} + +.available-theme .theme-author { + line-height: 18px; +} + +.available-theme .action-links { + margin-top: 10px; + overflow: hidden; +} + +.available-theme a.screenshot:focus { + border-color: #777; +} + +.available-theme .action-links li { + float: left; + padding-right: 10px; + margin-right: 10px; + border-right: 1px solid #dfdfdf; +} + +.available-theme .action-links li { + padding-right: 8px; + margin-right: 8px; +} + +.ie8 .available-theme .action-links li { + padding-right: 7px; + margin-right: 7px; +} + +.available-theme .action-links li:last-child { + padding-right: 0; + margin-right: 0; + border-right: 0; +} + +.available-theme .action-links .delete-theme { + float: right; + margin-left: 8px; + margin-right: 0; +} + +.available-theme .action-links .delete-theme a { + color: red; + padding: 2px; +} + +.available-theme .action-links .delete-theme a:hover { + background: red; + color: #fff; + text-decoration: none; +} + +.available-theme .action-links p { + float: left; +} + +/* Allow for three-up in small windows when sidebar is collapsed */ +@media only screen and (max-width: 1200px) { + .folded .available-theme, + .folded .available-theme .screenshot { + width: 300px; + } + + .folded .available-theme .screenshot { + height: 225px; + } +} + +/* Adjust three-up display in smaller windows when sidebar is collapsed */ +@media only screen and (max-width: 1079px) { + .folded .available-theme, + .folded .available-theme .screenshot { + width: 270px; + } + + .folded .available-theme .screenshot { + height: 203px; + } +} + +/* Allow for three-up on 1024px wide screens, e.g. tablets */ +@media only screen and (max-width: 1200px) { + .available-theme, + .available-theme .screenshot { + width: 240px; + } + + .available-theme .screenshot { + height: 180px; + } + + .available-theme img { + width: 100%; + } +} + +#post-body ul.add-menu-item-tabs li.tabs a, +#TB_window #TB_title a.tb-theme-preview-link, +#TB_window #TB_title a.tb-theme-preview-link:visited { + font-weight: 600; + text-decoration: none; +} + +#TB_window #TB_title { + background-color: #222; + color: #cfcfcf; +} + + +/*------------------------------------------------------------------------------ + 16.3 - Custom Header Screen +------------------------------------------------------------------------------*/ + +.appearance_page_custom-header #headimg { + border: 1px solid #DFDFDF; + overflow: hidden; + width: 100%; +} + +.appearance_page_custom-header #upload-form p label { + font-size: 12px; +} + +.appearance_page_custom-header .available-headers .default-header { + float: left; + margin: 0 20px 20px 0; +} + +.appearance_page_custom-header .random-header { + clear: both; + margin: 0 20px 20px 0; + vertical-align: middle; +} + +.appearance_page_custom-header .available-headers label input, +.appearance_page_custom-header .random-header label input { + margin-right: 10px; +} + +.appearance_page_custom-header .available-headers label img { + vertical-align: middle; +} + + +/*------------------------------------------------------------------------------ + 16.4 - Custom Background Screen +------------------------------------------------------------------------------*/ + +div#custom-background-image { + min-height: 100px; + border: 1px solid #dfdfdf; +} + +div#custom-background-image img { + max-width: 400px; + max-height: 300px; +} + + +/*------------------------------------------------------------------------------ + 17.0 - Plugins +------------------------------------------------------------------------------*/ + +#dashboard_right_now .versions .b, +#post-status-display, +#post-visibility-display, +#adminmenu .wp-submenu li.current, +#adminmenu .wp-submenu li.current a, +#adminmenu .wp-submenu li.current a:hover, +.media-item .percent, +.plugins .name, +#pass-strength-result.strong, +#pass-strength-result.short, +#ed_reply_toolbar #ed_reply_strong, +.item-controls .item-order a, +.feature-filter .feature-name { + font-weight: 600; +} + +.plugins p { + margin: 0 4px; + padding: 0; +} + +.plugins .desc p { + margin: 0 0 8px; +} + +.plugins td.desc { + line-height: 1.5em; +} + +.plugins .desc ul, +.plugins .desc ol { + margin: 0 0 0 2em; +} + +.plugins .desc ul { + list-style-type: disc; +} + +.plugins .row-actions { + font-size: 13px; + padding: 0; +} + +.plugins .inactive td, +.plugins .inactive th, +.plugins .active td, +.plugins .active th { + padding: 10px 9px; +} + +.plugins .update th, +.plugins .update td { + border-bottom: 0; +} +.plugin-update-tr td { + border-top: 0; +} + +#wpbody-content .plugins .plugin-title, +#wpbody-content .plugins .theme-title { + padding-right: 12px; + white-space:nowrap; +} + +.plugins .inactive .plugin-title strong { + font-weight: 400; +} + +.plugins .second, +.plugins .row-actions { + padding: 0 0 5px; +} + +.plugins .update .second, +.plugins .update .row-actions { + padding-bottom: 0; +} + +.plugins-php .widefat tfoot th, +.plugins-php .widefat tfoot td { + border-top-style: solid; + border-top-width: 1px; +} + +.plugin-update-tr .update-message { + border: none; + font-size: 13px; + font-weight: normal; + margin: 6px 12px 12px; + padding: 6px 12px; +} + +.plugin-update-tr .update-message:before { + content: '\f463'; + display: inline-block; + font: normal 20px/1 'dashicons'; + speak: none; + margin: 0 8px 0 -2px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; +} + +.plugin-install-php h4 { + margin: 2.5em 0 8px; +} + + +/*------------------------------------------------------------------------------ + 18.0 - Users +------------------------------------------------------------------------------*/ + +#profile-page .form-table textarea { + width: 500px; + margin-bottom: 6px; +} + +#profile-page .form-table #rich_editing { + margin-right: 5px +} + +#your-profile legend { + font-size: 22px; +} + +#display_name { + width: 15em; +} + +#createuser .form-field input { + width: 25em; +} + +.scheme-list { + +} + +.color-option { + display: inline-block; + width: 24%; + padding: 5px 15px 15px; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin-bottom: 3px; +} + +.color-option:hover, +.color-option.selected { + background: #ddd; +} + +.color-palette { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} +.color-palette td { + height: 20px; + padding: 0; + border: none; +} + +.color-option { + cursor: pointer; +} + +/*------------------------------------------------------------------------------ + 19.0 - Tools +------------------------------------------------------------------------------*/ + +body.press-this { + color: #333; + margin: 0; + padding: 0; + min-width: 708px; + min-height: 400px; +} + +.press-this #titlediv #title { + font-size: 1.4em; +} + +.press-this #site-heading:before { + top: 3px; + position: relative; + display: inline-block; + font: normal 18px/1 'dashicons'; + speak: none; + color: #727272; + content: '\f120'; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.pressthis { + margin: 20px 0; +} + +.pressthis a, +.pressthis a:hover, +.pressthis a:focus, +.pressthis a:active { + display: inline-block; + position: relative; + cursor: move; + color: #333; + background: #e6e6e6; + -webkit-border-radius: 5px; + border-radius: 5px; + border: 1px solid #b4b4b4; + font-style: normal; + line-height: 16px; + font-size: 14px; + text-decoration: none; +} + +.pressthis a:active { + outline: none; +} + +.pressthis a:hover:after { + -webkit-transform: skew(20deg) rotate(9deg); + -moz-transform: skew(20deg) rotate(9deg); + transform: skew(20deg) rotate(9deg); + -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); +} + +.pressthis a span { + display: inline-block; + margin: 0px 0 0; + padding: 0px 12px 8px 9px; +} + +.pressthis a span:before { + font: normal 20px/1 'dashicons'; + content:'\f157'; + position: relative; + display: inline-block; + top: 4px; + margin-right: 4px; +} + +.pressthis a:after { + content: ''; + width: 70%; + height: 55%; + z-index: -1; + position: absolute; + right: 10px; + bottom: 9px; + background: transparent; + + -webkit-transform: skew(20deg) rotate(6deg); + -moz-transform: skew(20deg) rotate(6deg); + transform: skew(20deg) rotate(6deg); + -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); +} + +/*------------------------------------------------------------------------------ + 20.0 - Settings +------------------------------------------------------------------------------*/ + +#utc-time, #local-time { + padding-left: 25px; + font-style: italic; +} + +.defaultavatarpicker .avatar { + margin: 2px 0; + vertical-align: middle; +} + +.options-general-php .spinner { + float: none; + margin: -3px 3px; +} + +/*------------------------------------------------------------------------------ + 21.0 - Admin Footer +------------------------------------------------------------------------------*/ + +#wpfooter { + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding: 10px 0; + margin-right: 20px; + border-top-width: 1px; + border-top-style: solid; +} + +#wpfooter p { + font-size: 13px; + margin: 0; + line-height: 20px; +} + +#footer-thankyou { + font-style: italic; +} + +#wpfooter a { + text-decoration: none; +} + +#wpfooter a:hover { + text-decoration: underline; +} + +/*------------------------------------------------------------------------------ + 22.0 - About Pages +------------------------------------------------------------------------------*/ + +.about-wrap { + position: relative; + margin: 25px 40px 0 20px; + max-width: 1050px; /* readability */ + + font-size: 15px; +} + +.about-wrap div.updated, +.about-wrap div.error { + display: none !important; +} + +.about-wrap hr { + border: 0; + height: 0; + margin: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +.about-wrap img { + margin: 0.5em 0 0.5em 5px; + max-width: 100%; +} + +/* Typography */ + +.about-wrap p { + line-height: 1.6em; + font-size: 14px; +} + +.about-wrap h1 { + margin: 0.2em 200px 0 0; + line-height: 1.2em; + font-size: 2.8em; + font-weight: 400; +} + +.about-wrap .about-text, +.about-wrap p.about-description, +.about-wrap li.wp-person a.web { + font-weight: normal; + line-height: 1.6em; + font-size: 19px; +} + +.about-description { + margin-top: 1.4em; +} + +.about-text { + margin: 1em 200px 1em 0; + min-height: 60px; + font-size: 24px; +} + +.about-wrap .changelog h2.about-headline-callout { + margin: 1.1em 0 0.2em; + font-size: 2.4em; + font-weight: 300; + line-height: 1.3; + text-align: center; +} + +.about-wrap h3 { + margin: 1em 0 .6em; + font-size: 1.5em; + line-height: 1.5em; +} + +.about-wrap .feature-section h4 { + margin: 1.4em 0 0.6em 0; + font-size: 1.2em; +} + +.about-wrap .feature-section p { + margin-top: 0.6em; +} + +.about-wrap code, +.about-wrap ol li p { + font-size: 14px; +} + +/* 3.8 Images */ + +.about-wrap .about-colors-img { + bottom: -25px; +} + +.about-wrap .about-themes-img { + bottom: -38px; +} + +.about-wrap .about-overview-img { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + margin: 0; +} + +.about-colors-img img, +.about-themes-img img { + margin: 0 0; + padding: 0; + line-height: 1; +} + +/* Point Releases */ + +.about-wrap .point-releases { + margin-top: 5px; +} + +.about-wrap .changelog.point-releases h3 { + padding-top: 35px; +} + +.about-wrap .changelog.point-releases h3:first-child { + padding-top: 7px; +} + +/* WordPress Version Badge */ + +.wp-badge { + background: url('../images/w-logo-white.png?ver=20131202') no-repeat; + background: none, url('../images/wordpress-logo-white.svg?ver=20131110') no-repeat; + background-position: center 24px; + background-size: 85px 85px; + font-size: 14px; + text-align: center; + font-weight: 600; + margin: 5px 0 0; + padding-top: 120px; + height: 40px; + display: inline-block; + width: 150px; + text-rendering: optimizeLegibility; +} + + +.about-wrap .wp-badge { + position: absolute; + top: 0; + right: 0; +} + +/* Tabs */ + +.about-wrap h2.nav-tab-wrapper { + padding-left: 6px; +} + +.about-wrap h2 .nav-tab { + padding: 4px 15px 6px; + margin: 0 3px -1px 0; + font-size: 18px; + vertical-align: top; + border-width: 1px; +} + +.about-wrap h2 .nav-tab-active { + font-weight: bold; +} + +/* Changelog / Update screen */ + +.about-wrap .feature-section { + padding-bottom: 20px; +} + +.about-wrap .feature-section.col { + margin-bottom: 0; +} + +.about-wrap .feature-section.center-col > div { + margin: auto; + width: 60%; +} + +.about-wrap .about-colors .one-col > div { + width: 100%; +} + +.about-wrap .feature-section.two-col > div { + position: relative; + width: 50%; + float: left; +} + +.about-wrap .feature-section.three-col > div { + position: relative; + width: 29.95%; + margin-right: 4.999999999%; + float: left; +} + +.about-wrap .feature-section.col .last-feature { + margin-right: 0; +} + +.about-wrap .about-updates img, +.about-wrap .about-twentyfourteen img { + margin: 2em 0 0 0; + border: 1px solid #ddd; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.about-wrap .about-twentyfourteen img { + margin-top: 1em; +} + +.about-wrap .changelog .feature-section { + overflow: hidden; +} + +.about-wrap .about-colors .scheme-list { + margin-bottom: 1em; +} + +.about-wrap .about-colors .color-option { + padding-top: 10px; +} +.about-wrap .about-colors .color-option label { + display: inline-block; + margin: 0.25em 0 0.5em; +} + +.about-wrap .feature-section.two-col div p { + margin-right: 3%; +} + +.about-wrap .feature-section div p img { + float: right; + margin-left: 10px; + max-width: 20%; +} + +.about-wrap .changelog li { + list-style-type: disc; + margin-left: 3em; +} + +/* Return to Dashboard Home link */ + +.about-wrap .return-to-dashboard { + margin: 30px 0 0 -5px; + font-size: 14px; + font-weight: bold; +} + +.about-wrap .return-to-dashboard a { + text-decoration: none; + padding: 0 5px; +} + +/* Credits */ + +.about-wrap h4.wp-people-group { + margin-top: 2.6em; + font-size: 16px; +} + +.about-wrap ul.wp-people-group { + overflow: hidden; + padding: 0 5px; + margin: 0 -15px 0 -5px; +} + +.about-wrap ul.compact { + margin-bottom: 0 +} + +.about-wrap li.wp-person { + float: left; + margin-right: 10px; +} + +.about-wrap li.wp-person img.gravatar { + float: left; + margin: 0 10px 10px 0; + padding: 2px; + width: 60px; + height: 60px; +} + +.about-wrap ul.compact li.wp-person img.gravatar { + width: 30px; + height: 30px; +} + +.about-wrap li.wp-person { + height: 70px; + width: 280px; + padding-bottom: 15px; +} + +.about-wrap ul.compact li.wp-person { + height: auto; + width: 180px; + padding-bottom: 0; + margin-bottom: 0; +} + +.about-wrap #wp-people-group-validators + p.wp-credits-list { + margin-top: 0; +} + +.about-wrap li.wp-person a.web { + display: block; + margin: 6px 0 2px; + font-size: 16px; + text-decoration: none; +} + +.about-wrap p.wp-credits-list a { + white-space: nowrap; +} + +/* Freedoms */ + +.freedoms-php .about-wrap ol { + margin: 40px 60px; +} + +.freedoms-php .about-wrap ol li { + list-style-type: decimal; + font-weight: bold; +} + +.freedoms-php .about-wrap ol p { + font-weight: normal; + margin: 0.6em 0; +} + +/*------------------------------------------------------------------------------ + 23.0 - Full Overlay w/ Sidebar +------------------------------------------------------------------------------*/ + +body.full-overlay-active { + overflow: hidden; +} + +.wp-full-overlay { + background: transparent; + z-index: 500000; + position: fixed; + overflow: visible; + top: 0; + bottom: 0; + left: 0; + right: 0; + height: 100%; + min-width: 0; +} + +.wp-full-overlay-sidebar { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + position: fixed; + width: 300px; + height: 100%; + top: 0; + bottom: 0; + left: 0; + padding: 0; + margin: 0; + z-index: 10; + overflow: auto; + background: transparent; + border-right: none; +} + +.wp-full-overlay.collapsed .wp-full-overlay-sidebar { + overflow: visible; +} + +.wp-full-overlay.collapsed, +.wp-full-overlay.expanded .wp-full-overlay-sidebar { + margin-left: 0 !important; +} + +.wp-full-overlay.expanded { + margin-left: 300px; +} + +.wp-full-overlay.collapsed .wp-full-overlay-sidebar { + margin-left: -300px; +} + +.wp-full-overlay-sidebar:after { + content: ''; + display: block; + position: absolute; + top: 0; + bottom: 0; + right: 0; + width: 3px; + z-index: 1000; +} + +.wp-full-overlay-main { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + height: 100%; +} + +.wp-full-overlay-sidebar .wp-full-overlay-header { + position: absolute; + left: 0; + right: 0; + height: 45px; + padding: 0 15px; + line-height: 45px; + z-index: 10; + margin: 0; + border-top: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.wp-full-overlay-sidebar .wp-full-overlay-header a.back { + margin-top: 9px; +} + +.wp-full-overlay-sidebar .wp-full-overlay-footer { + bottom: 0; + border-bottom: none; + border-top: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content { + position: absolute; + top: 45px; + bottom: 45px; + left: 0; + right: 0; + overflow: auto; +} + +/* Close Link */ +.wp-full-overlay .close-full-overlay { + text-decoration: none; +} + +/* Collapse Button */ +.wp-full-overlay a.collapse-sidebar { + position: absolute; + bottom: 12px; + left: 0; + z-index: 50; + display: block; + width: 19px; + height: 19px; + margin-left: 15px; + padding: 0; + border-radius: 50%; + text-decoration: none; +} + +.wp-full-overlay.collapsed .collapse-sidebar { + position: absolute; + left: 100%; +} + +.wp-full-overlay .collapse-sidebar-arrow { + position: static; + margin-top: 0; + margin-left: 0; + display: block; + width: auto; + height: auto; + background: none; +} + +.wp-full-overlay .collapse-sidebar-arrow:before { + border-radius: 50%; + float: left; + content: "\f148"; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.wp-full-overlay.collapsed .collapse-sidebar-arrow:before, +.rtl .wp-full-overlay .collapse-sidebar-arrow:before { + -ms-transform: rotate(180deg); + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before { + -ms-transform: none; + -webkit-transform: none; + transform: none; +} + +.wp-full-overlay.collapsed .collapse-sidebar-arrow { + background-position: -1px -109px; +} + +.wp-full-overlay .collapse-sidebar-label { + position: absolute; + left: 100%; + line-height: 20px; + margin-left: 10px; +} + +.wp-full-overlay.collapsed .collapse-sidebar-label { + display: none; +} + +/* Animations */ +.wp-full-overlay, +.wp-full-overlay-sidebar, +.wp-full-overlay .collapse-sidebar, +.wp-full-overlay-main { + -webkit-transition-property: left, right, top, bottom, width, margin; + -moz-transition-property: left, right, top, bottom, width, margin; + -ms-transition-property: left, right, top, bottom, width, margin; + -o-transition-property: left, right, top, bottom, width, margin; + transition-property: left, right, top, bottom, width, margin; + -webkit-transition-duration: 0.2s; + -moz-transition-duration: 0.2s; + -ms-transition-duration: 0.2s; + -o-transition-duration: 0.2s; + transition-duration: 0.2s; +} + +/*------------------------------------------------------------------------------ + 24.0 - Customize Loader +------------------------------------------------------------------------------*/ + +.no-customize-support .hide-if-no-customize, +.customize-support .hide-if-customize, +.no-customize-support.wp-core-ui .hide-if-no-customize, +.no-customize-support .wp-core-ui .hide-if-no-customize, +.customize-support.wp-core-ui .hide-if-customize, +.customize-support .wp-core-ui .hide-if-customize { + display: none; +} + +#customize-container { + display: none; + background: #fff; + z-index: 500000; + position: fixed; + overflow: visible; + top: 0; + bottom: 0; + left: 0; + right: 0; + height: 100%; +} + +.customize-active #customize-container { + display: block; +} + +.customize-loading #customize-container iframe { + opacity: 0; +} + +.customize-loading #customize-container { + background: #fff url('../images/spinner.gif') no-repeat fixed center center; + background-size: 20px 20px; +} + +#customize-container iframe, +#theme-installer iframe { + height: 100%; + width: 100%; + z-index: 20; + + -webkit-transition: opacity 0.3s; + -moz-transition: opacity 0.3s; + -ms-transition: opacity 0.3s; + -o-transition: opacity 0.3s; + transition: opacity 0.3s; +} + +#customize-container .collapse-sidebar { + bottom: 16px; +} + +#customize-controls { + margin-top: 0; +} + +#theme-installer { + display: none; +} + +#theme-installer.single-theme { + display: block; +} + +.install-theme-info { + display: none; + padding: 10px 20px 20px; +} + +.single-theme .install-theme-info { + padding-top: 15px; +} + +#theme-installer .install-theme-info { + display: block; +} + +.install-theme-info .theme-install { + float: right; + margin-top: 18px; +} + +.install-theme-info .theme-name { + font-size: 16px; + line-height: 24px; + margin-bottom: 0; + margin-top: 0; +} + +.install-theme-info .theme-screenshot { + margin-top: 15px; + width: 258px; + border: 1px solid #ccc; +} + +.install-theme-info .theme-details { + overflow: hidden; +} + +.theme-details .theme-version { + margin: 15px 0; + float: left; +} + +.theme-details .star-rating { + margin: 7px 0; + float: right; +} + +.theme-details .theme-description { + float: left; + color: #777; + line-height: 20px; +} + +#theme-installer .wp-full-overlay-header { + margin-top: 9px; +} + +#theme-installer .wp-full-overlay-header .theme-install { + float: right; + /* For when .theme-install is a span rather than a.button-primary (already installed theme) */ + line-height: 26px; +} + +#theme-installer .wp-full-overlay-sidebar { + background: #EEE; + border-right: 1px solid #DDD; +} + +#theme-installer .wp-full-overlay-main { + background: #fff url('../images/spinner.gif') no-repeat fixed center center; + background-size: 20px 20px; +} + + +/*------------------------------------------------------------------------------ + 25.0 - Tabbed Admin Screen Interface (Experimental) +------------------------------------------------------------------------------*/ + +.nav-tab { + border-style: solid; + border-width: 1px 1px 0; + font-size: 12px; + line-height: 16px; + display: inline-block; + padding: 4px 14px 6px; + text-decoration: none; + margin: -4px 4px -1px 0; +} + +.nav-tab-active { + border-width: 1px; +} + +.nav-tab-active, +.nav-tab-active:hover { + border-bottom-width: 1px; + border-bottom-style: solid; +} + +h2.nav-tab-wrapper, +h3.nav-tab-wrapper { + border-bottom-width: 1px; + border-bottom-style: solid; + padding-bottom: 0; + padding-left: 10px; +} + +h2 .nav-tab { + padding: 6px 10px; + font-weight: bold; + font-size: 15px; + line-height: 24px; +} + + +/*------------------------------------------------------------------------------ + 26.0 - Misc +------------------------------------------------------------------------------*/ + +#excerpt, +.attachmentlinks { + margin: 0; + height: 4em; + width: 98%; +} + +#template div { + margin-right: 190px; +} + +p.pagenav { + margin: 0; + display: inline; +} + +.pagenav span { + font-weight: 600; + margin: 0 6px; +} + +.row-title { + font-size: 14px !important; + font-weight: 600; +} + +.column-comment .comment-author { + margin-bottom: 0.6em; +} + +.column-author img, +.column-username img, +.column-comment .comment-author img { + float: left; + margin-right: 10px; + margin-top: 1px; +} + +.row-actions { + font-size: 13px; + visibility: hidden; + padding: 2px 0 0; +} + +tr:hover .row-actions, +.mobile .row-actions, +.row-actions.visible, +div.comment-item:hover .row-actions { + visibility: visible; +} + +/* deprecated */ +.row-actions-visible { + padding: 2px 0 0; +} + +.form-table .pre { + padding: 8px; + margin: 0; +} + +table.form-table td .updated { + font-size: 13px; +} + +.tagchecklist { + margin-left: 14px; + font-size: 12px; + overflow: auto; +} +.tagchecklist br { + display: none; +} +.tagchecklist strong { + margin-left: -8px; + position: absolute; +} +.tagchecklist span { + margin-right: 25px; + display: block; + float: left; + font-size: 13px; + line-height: 1.8em; + white-space: nowrap; + cursor: default; +} + +.tagchecklist span a { + margin: 1px 0 0 -17px; + cursor: pointer; + width: 20px; + height: 20px; + display: block; + float: left; + text-indent: 0; + overflow: hidden; + position: absolute; +} + +#poststuff h2 { + margin-top: 20px; + font-size: 1.5em; + margin-bottom: 15px; + padding: 0 0 3px; + clear: left; +} + +#poststuff h3, +.metabox-holder h3 { + font-size: 14px; + padding: 8px 12px; + margin: 0; + line-height: 1.4; +} + +#poststuff .inside { + margin: 6px 0 0 0; +} + +#poststuff .inside #parent_id, +#poststuff .inside #page_template { + max-width: 100%; +} + +.inline-edit-row #post_parent, +.inline-edit-row select[name="page_template"] { + max-width: 80%; +} + +.ie8 #poststuff .inside #parent_id, +.ie8 #poststuff .inside #page_template, +.ie8 .inline-edit-row #post_parent, +.ie8 .inline-edit-row select[name="page_template"] { + width: 250px; +} + +#post-visibility-select { + line-height: 1.5em; + margin-top: 3px; +} + +#poststuff #submitdiv .inside { + margin: 0; + padding: 0; +} + +.edit-form-section { + margin-bottom: 20px; +} + +#templateside ul li a { + text-decoration: none; +} + +.tool-box .title { + margin: 8px 0; + font-size: 18px; + font-weight: normal; + line-height: 24px; +} + +#sidemenu { + margin: -30px 15px 0 315px; + list-style: none; + position: relative; + float: right; + padding-left: 10px; + font-size: 12px; +} + +#sidemenu a { + padding: 0 7px; + display: block; + float: left; + line-height: 28px; + border-top-width: 1px; + border-top-style: solid; + border-bottom-width: 1px; + border-bottom-style: solid; + -webkit-transition: none; + -moz-transition: none; + transition: none; +} + +#sidemenu li { + display: inline; + line-height: 200%; + list-style: none; + text-align: center; + white-space: nowrap; + margin: 0; + padding: 0; +} + +#sidemenu a.current { + font-weight: normal; + padding-left: 6px; + padding-right: 6px; + -webkit-border-top-left-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-width: 1px; + border-style: solid; +} + +#sidemenu li a .count-0 { + display: none; +} + +.plugin-install #description, +.plugin-install-network #description { + width: 60%; +} + +table .vers, +table .column-visible, +table .column-rating { + text-align: left; +} + +.error-message { + color: red; + font-weight: 600; +} + +/* Scrollbar fix for bulk upgrade iframe */ +body.iframe { + height: 98%; +} + +/* Upgrader styles, Specific to Language Packs */ +.lp-show-latest p { + display: none; +} +.lp-show-latest p:last-child, +.lp-show-latest .lp-error p { + display: block; +} + +/* - Only used once or twice in all of WP - deprecate for global style +------------------------------------------------------------------------------*/ +td.media-icon { + text-align: center; + width: 80px; + padding-top: 8px; + padding-bottom: 8px; +} + +td.media-icon img { + max-width: 80px; + max-height: 60px; +} + +#howto { + font-size: 11px; + margin: 0 5px; + display: block; +} + +.importers td { + padding-right: 14px; +} + +.importers { + font-size: 16px; + width: auto; +} + +#post-body #post-body-content #namediv h3 { + margin-top: 0; +} + +#namediv h3 label { + vertical-align: baseline; +} + +#namediv table { + width: 100%; +} + +#namediv td.first { + width: 10px; + white-space: nowrap; +} + +#namediv input { + width: 98%; +} + +#namediv p { + margin: 10px 0; +} + +#submitdiv h3 { + margin-bottom: 0 !important; +} + +/* - Used - but could/should be deprecated with a CSS reset +------------------------------------------------------------------------------*/ +.zerosize { + height: 0; + width: 0; + margin: 0; + border: 0; + padding: 0; + overflow: hidden; + position: absolute; +} + +br.clear { + height: 2px; + line-height: 2px; +} + +.checkbox { + border: none; + margin: 0; + padding: 0; +} + +fieldset { + border: 0; + padding: 0; + margin: 0; +} + +.post-categories { + display: inline; + margin: 0; + padding: 0; +} + +.post-categories li { + display: inline; +} + +/*------------------------------------------------------------------------------ + 27.0 - Localization +------------------------------------------------------------------------------*/ + +/* RTL except Hebrew (see below): Tahoma as the first font; */ +body.rtl, +body.rtl .press-this a.wp-switch-editor { + font-family: Tahoma, Arial, sans-serif; +} + + +/* he_IL: Remove Tahoma from the font stack. Arial is best for Hebrew. */ +body.locale-he-il, +body.locale-he-il .press-this a.wp-switch-editor { + font-family: Arial, sans-serif; +} + +/* he_IL: Have be bold rather than italic. */ +.locale-he-il em { + font-style: normal; + font-weight: bold; +} + + +/*----------------------------------------------------------------------------- + MERGED +-------------------------------------------------------------------------------*/ + +/* dashboard */ +.edit-box { + display: none; +} + +h3:hover .edit-box { + display: inline; +} + +#dashboard-widgets form .input-text-wrap input { + width: 100%; +} + +#dashboard-widgets form .textarea-wrap textarea { + width: 100%; +} + +#dashboard-widgets .postbox form .submit { + float: none; + margin: .5em 0 0; + padding: 0; + border: none; +} + +#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish { + min-width: 0; +} + +#dashboard-widgets a { + text-decoration: none; +} + +#dashboard-widgets h3 a { + text-decoration: underline; +} + +#dashboard-widgets h3 .postbox-title-action { + position: absolute; + right: 10px; + padding: 0; + top: 5px; +} + +.js #dashboard-widgets h3 .postbox-title-action { + right: 33px; +} + +#dashboard-widgets h4 { + font-weight: normal; + font-size: 14px; + margin: 0 0 .2em; + padding: 0; +} + +#dashboard_plugins h5 { + font-size: 14px; +} + +/* Recent Comments */ + +#latest-comments #the-comment-list { + position: relative; +} + +#activity-widget #latest-comments #the-comment-list .comment-item { + padding: 1em 12px; +} + +#latest-comments #the-comment-list .pingback { + padding-left: 12px !important; +} + +#latest-comments #the-comment-list .comment-item:first-child { + border-top: none; +} + +#latest-comments #the-comment-list .comment-item h4 { + line-height: 1.5em; + margin-top: 0; + color: #666; +} + +#latest-comments #the-comment-list .comment-item h4 cite { + font-style: normal; + font-weight: normal; +} + +#latest-comments #the-comment-list .comment-item blockquote, +#latest-comments #the-comment-list .comment-item blockquote p { + margin: 0; + padding: 0; + display: inline; +} + +#latest-comments #the-comment-list .comment-item p.row-actions { + margin: 3px 0 0; + padding: 0; + font-size: 13px; +} + +/* QuickDraft */ + +#title-wrap label { + cursor: text; +} + +#title-wrap #title { + padding: 2px 6px; + font-size: 1.3em; + line-height: 100%; + outline: none; +} + +#title-wrap #title-prompt-text { + font-size: 1.1em; + padding: 5px 8px; +} + +/* Feeds */ +.rss-widget ul { + margin: 0; + padding: 0; + list-style: none; +} + +a.rsswidget { + font-size: 14px; + font-weight: 600; + line-height: 1.7em; +} + +.rss-widget ul li { + line-height: 1.5em; + margin-bottom: 12px; +} + +.rss-widget span.rss-date { + color: #999; + font-size: 13px; + margin-left: 3px; +} + +.rss-widget cite { + display: block; + text-align: right; + margin: 0 0 1em; + padding: 0; +} + +.rss-widget cite:before { + content: '\2014'; +} + +.dashboard-comment-wrap { + overflow: hidden; + word-wrap: break-word; +} + +/* Browser Nag */ +#dashboard_browser_nag a.update-browser-link { + font-size: 1.2em; + font-weight: 600; +} + +#dashboard_browser_nag a { + text-decoration: underline; +} + +#dashboard_browser_nag p.browser-update-nag.has-browser-icon { + padding-right: 125px; +} + +#dashboard_browser_nag .browser-icon { + margin-top: -35px; +} + +#dashboard_browser_nag.postbox.browser-insecure { + background-color: #ac1b1b; + border-color: #ac1b1b; +} + +#dashboard_browser_nag.postbox { + background-color: #e29808; + background-image: none; + border-color: #edc048; + color: #fff; + -webkit-box-shadow: none; + box-shadow: none; +} + +#dashboard_browser_nag.postbox.browser-insecure h3 { + border-bottom-color: #cd5a5a; + color: #fff; +} + +#dashboard_browser_nag.postbox h3 { + border-bottom-color: #f6e2ac; + background: transparent none; + color: #fff; + -webkit-box-shadow: none; + box-shadow: none; +} + +#dashboard_browser_nag a { + color: #fff; +} + +/* Make the browser nags easier to read with Open Sans */ + +#dashboard_browser_nag h3.hndle { + border: none; + font-weight: 600; + font-size: 20px; + padding-top: 10px; +} + +.postbox#dashboard_browser_nag p a.dismiss { + font-size: 14px; +} + +.postbox#dashboard_browser_nag p, +.postbox#dashboard_browser_nag a, +.postbox#dashboard_browser_nag p.browser-update-nag { + font-size: 16px; +} + + +/* login */ + +#loginform p.submit, +.login-action-lostpassword p.submit { + border: none; + margin: -10px 0 20px; /* May want to revisit this */ +} + +.login * { + margin: 0; + padding: 0; +} + +.login form { + margin-top: 20px; + margin-left: 0; + padding: 26px 24px 46px; + font-weight: normal; + overflow: hidden; +} + +.login form .forgetmenot { + font-weight: normal; + float: left; + margin-bottom: 0; +} + +.login .button-primary { + float: right; +} + +#login form p { + margin-bottom: 0; +} + +#login form p.submit { + margin: 0; + padding: 0; +} + +.login label { + color: #777; + font-size: 14px; +} + +.login form .forgetmenot label { + font-size: 12px; + line-height: 19px; +} + +.login h1 { + text-align: center; +} + +.login h1 a { + background-image: url('../images/w-logo-blue.png?ver=20131202'); + background-image: none, url('../images/wordpress-logo.svg?ver=20131107'); + background-size: 80px 80px; + background-position: center top; + background-repeat: no-repeat; + color: #999; + height: 80px; + font-size: 20px; + font-weight: normal; + line-height: 1.3em; + margin: 0 auto 25px; + padding: 0; + text-decoration: none; + width: 80px; + text-indent: -9999px; + outline: none; + overflow: hidden; + display: block; +} + +#login { + width: 320px; + padding: 8% 0 0; + margin: auto; +} + +#login_error, +.login .message { + margin-left: 0; + padding: 12px; +} + +.login #nav, +.login #backtoblog { + font-size: 13px; + padding: 0 24px 0; +} + +.login #nav { + margin: 24px 0 0 0; +} + +#backtoblog { + margin: 16px 0 0 0; +} + +.login form .input, +.login input[type="text"] { + font-size: 24px; + line-height: 1; + width: 100%; + padding: 3px; + margin: 2px 6px 16px 0; +} + +.login #pass-strength-result { + width: 250px; + font-weight: 600; + border-style: solid; + border-width: 1px; + margin: 12px 0 6px; + padding: 6px 5px; + text-align: center; +} + +.mobile #login { + padding: 20px 0; +} + +.mobile #login form, +.mobile #login .message, +.mobile #login_error { + margin-left: 0; +} + +.mobile #login #nav, +.mobile #login #backtoblog { + margin-left: 8px; +} + +.mobile #login h1 a { + width: auto; +} + +body.interim-login { + height: auto; +} + +.interim-login #login { + padding: 0; + margin: 5px auto 20px; +} + +.interim-login.login h1 a { + width: auto; +} + +.interim-login #login_error, +.interim-login.login .message { + margin: 0 0 16px; +} + +.interim-login.login form { + margin: 0; +} + +/* ms */ +/* Background Color for Site Status */ +.wp-list-table .site-deleted { + background: #ff8573; +} +.wp-list-table .site-spammed { + background: #faafaa; +} +.wp-list-table .site-archived { + background: #ffebe8; +} +.wp-list-table .site-mature { + background: #fecac2; +} + +/* nav-menu */ + +.no-js #message { + display: block; +} + +.accordion-section ul.category-tabs, +.accordion-section ul.add-menu-item-tabs, +.accordion-section ul.wp-tab-bar { + margin: 0; +} + +.accordion-section .categorychecklist { + margin: 13px 0; +} + +#nav-menu-meta .accordion-section-content { + padding: 18px 13px; +} + +#nav-menu-meta .button-controls { + margin-bottom: 0; +} + +#nav-menus-frame { + margin-left: 300px; + margin-top: 23px; +} + +#nav-menus-frame .accordion-section-content .inside { + font-size: 14px; +} + +#wpbody-content #menu-settings-column { + display:inline; + width:281px; + margin-left: -300px; + clear: both; + float: left; + padding-top: 0; +} + +#menu-settings-column .inside { + clear: both; + margin: 10px 0 0; +} + +.metabox-holder-disabled .postbox, +.metabox-holder-disabled .accordion-section-content, +.metabox-holder-disabled .accordion-section-title { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.metabox-holder-disabled .button-controls .select-all { + display: none; +} + +#wpbody { + position: relative; +} + +.blank-slate .menu-name { + height: 2em; +} + +.blank-slate .menu-settings { + border: none; + margin-top: 0; + padding-top: 0; + overflow: hidden; +} + +.is-submenu { + font-style: italic; + font-weight: normal; + margin-left: 4px; +} + +.manage-menus { + margin-top: 23px; + padding: 10px; + overflow: hidden; +} + +.manage-menus select { + float: left; + margin-right: 6px; +} + +.manage-menus .selected-menu { + float: left; + margin: 5px 6px 0 0; +} + +.manage-menus .submit-btn { + float: left; + margin-top: 1px; +} + +.menu-edit p { + margin: .3em 0 .6em; +} + +.menu-edit #post-body-content h3 { + margin: 1em 0 10px; +} + +.menu-settings { + border-top-width: 1px; + border-top-style: solid; + margin-top: 2em; +} + +.menu-settings dl { + margin: 0 0 10px; + overflow: hidden; + padding-left: 18%; +} + +.menu-settings dd { + float: left; + margin: 0; + width: 100%; +} + +.menu-settings dt { + float: left; + clear: both; + width: 21.951%; + padding: 3px 0 0; + margin-left: -21.951%; +} + +.menu-settings label { + vertical-align: baseline; +} + +.menu-edit .checkbox-input { + margin-top: 4px; +} + +.theme-location-set { + font-size: 11px; +} + +/* Menu Container */ +#menu-management-liquid { + float: left; + min-width: 100%; + margin-top: 3px; +} + +#menu-management { + position: relative; + margin-right: 20px; + margin-top: -3px; + width: 100%; +} + +#menu-management .menu-edit { + margin-bottom: 20px; +} + +.nav-menus-php #post-body { + padding: 0 10px 10px; + border-width: 1px 0; + border-style: solid; +} + +#nav-menu-header, +#nav-menu-footer { + padding: 0 10px; +} + +#nav-menu-header { + border-bottom: 1px solid; + margin-bottom: 0; +} + +#nav-menu-header .menu-name-label { + margin-top: 4px; +} + +.nav-menus-php #post-body div.updated, +.nav-menus-php #post-body div.error { + margin: 0; +} + +.nav-menus-php #post-body-content { + position: relative; + float: none; +} + +#menu-management .menu-add-new abbr { + font-weight:600; +} + +#select-nav-menu-container { + text-align: right; + padding: 0 10px 3px 10px; + margin-bottom: 5px; +} + +#select-nav-menu { + width: 100px; + display: inline; +} + +#menu-name-label { + margin-top: -2px; +} + +.widefat td.menu-location-menus { + padding-bottom: 5px; +} + +.menu-location-menus select { + float: left; +} + +#locations-nav-menu-wrapper { + padding: 5px 0; +} + +.locations-nav-menu-select select { + float: left; + width: 160px; + margin-right: 5px; +} + +.locations-row-links { + float: left; + margin: 6px 0 0 6px; +} + +.locations-edit-menu-link, +.locations-add-menu-link { + margin: 0 3px; +} + +.locations-edit-menu-link { + padding-right: 3px; + border-right: 1px solid #ccc; +} + +#wpbody .open-label { + display: block; + float:left; +} + +#wpbody .open-label span { + padding-right: 10px; +} + +.js .input-with-default-title { + font-style: italic; +} + +#menu-management .inside { + padding: 0 10px; +} + +/* Add Menu Item Boxes */ +.postbox .howto input, +.accordion-container .howto input { + width: 180px; + float: right; +} + +.accordion-container .outer-border { + margin: 0; +} + +.customlinkdiv .howto input { + width: 180px; +} + +.customlinkdiv p { + margin-top: 0 +} + +#nav-menu-theme-locations .howto select { + width: 100%; +} + +#nav-menu-theme-locations .button-controls { + text-align: right; +} + +.add-menu-item-view-all { + height: 400px; +} + +/* Button Primary Actions */ +#menu-container .submit { + margin: 0 0 10px; + padding: 0; +} + +.nav-menus-php .add-new-menu-action { + float: left; + margin: 6px 0 0 6px; + line-height: 15px; +} + +.nav-menus-php .meta-sep, +.nav-menus-php .submitdelete, +.nav-menus-php .submitcancel { + display: block; + float: left; + margin: 6px 0; + line-height: 15px; +} + +.meta-sep { + padding: 0 2px; +} + +#cancel-save { + text-decoration: underline; + font-size: 12px; + margin-left: 20px; + margin-top: 5px; +} + +.button.right, .button-secondary.right, .button-primary.right { + float: right; +} + +/* Button Secondary Actions */ +.list-controls { + float: left; + margin-top: 5px; +} + +.add-to-menu { + float: right; +} + +.postbox .spinner { + display: none; + vertical-align: middle; +} + +.button-controls { + clear:both; + margin: 10px 0; +} + +.show-all, +.hide-all { + cursor: pointer; +} + +.hide-all { + display: none; +} + +/* Create Menu */ +#menu-name { + width: 270px; +} + +#manage-menu .inside { + padding: 0px 0px; +} + +/* Custom Links */ +#available-links dt { + display: block; +} + +#add-custom-link .howto { + font-size: 12px; +} + +#add-custom-link label span { + display: block; + float: left; + margin-top: 5px; + padding-right: 5px; +} + +.menu-item-textbox { + width: 180px; +} + +.nav-menus-php .howto span { + margin-top: 6px; + display: block; + float: left; +} + +/* Menu item types */ +.quick-search { + width: 190px; +} + +.nav-menus-php .list-wrap { + display: none; + clear: both; + margin-bottom: 10px; +} + +.nav-menus-php .list-container { + max-height: 200px; + overflow-y: auto; + padding: 10px 10px 5px; +} + +.nav-menus-php .postbox p.submit { + margin-bottom: 0; +} + +/* Listings */ +.nav-menus-php .list li { + display: none; + margin: 0; + margin-bottom: 5px; +} + +.nav-menus-php .list li .menu-item-title { + cursor: pointer; + display: block; +} + +.nav-menus-php .list li .menu-item-title input { + margin-right: 3px; + margin-top: -3px; +} + +.menu-item-title input[type=checkbox] { + display: inline-block; + margin-top: -4px; +} + +/* Nav Menu */ +#menu-container .inside { + padding-bottom: 10px; +} + +.menu { + padding-top:1em; +} + +#menu-to-edit { + margin: 0; + padding: 0.1em 0; +} + +.menu ul { + width: 100%; +} + +.menu li { + margin-bottom: 0; + position:relative; +} + +.menu-item-bar { + clear:both; + line-height:1.5em; + position:relative; + margin: 9px 0 0; +} + +.menu-item-bar .menu-item-handle { + border: 1px solid #dfdfdf; + position: relative; + padding: 10px 15px; + height: auto; + width: 382px; + line-height: 30px; + overflow: hidden; + word-wrap: break-word; +} + +#menu-to-edit .menu-item-invalid .menu-item-handle { + background: #f6c9cc; + border-color: #f1acb1; +} + +.no-js .menu-item-edit-active .item-edit { + display: none; +} + +.js .menu-item-handle { + cursor: move; +} + +.menu li.deleting .menu-item-handle { + background-image: none; +} + +.menu-item-handle .item-title { + font-size: 13px; + font-weight: 600; + line-height: 20px; + display: block; + margin-right: 13em; +} + +/* Sortables */ +li.menu-item.ui-sortable-helper dl { + margin-top: 0; +} + +li.menu-item.ui-sortable-helper .menu-item-transport dl { + margin-top: 13px; +} + +.menu .sortable-placeholder { + height: 35px; + width: 410px; + margin-top: 13px; +} + +/* WARNING: The factor of 30px is hardcoded into the nav-menus javascript. */ +.menu-item-depth-0 { margin-left: 0px; } +.menu-item-depth-1 { margin-left: 30px; } +.menu-item-depth-2 { margin-left: 60px; } +.menu-item-depth-3 { margin-left: 90px; } +.menu-item-depth-4 { margin-left: 120px; } +.menu-item-depth-5 { margin-left: 150px; } +.menu-item-depth-6 { margin-left: 180px; } +.menu-item-depth-7 { margin-left: 210px; } +.menu-item-depth-8 { margin-left: 240px; } +.menu-item-depth-9 { margin-left: 270px; } +.menu-item-depth-10 { margin-left: 300px; } +.menu-item-depth-11 { margin-left: 330px; } + +.menu-item-depth-0 .menu-item-transport { margin-left: 0px; } +.menu-item-depth-1 .menu-item-transport { margin-left: -30px; } +.menu-item-depth-2 .menu-item-transport { margin-left: -60px; } +.menu-item-depth-3 .menu-item-transport { margin-left: -90px; } +.menu-item-depth-4 .menu-item-transport { margin-left: -120px; } +.menu-item-depth-5 .menu-item-transport { margin-left: -150px; } +.menu-item-depth-6 .menu-item-transport { margin-left: -180px; } +.menu-item-depth-7 .menu-item-transport { margin-left: -210px; } +.menu-item-depth-8 .menu-item-transport { margin-left: -240px; } +.menu-item-depth-9 .menu-item-transport { margin-left: -270px; } +.menu-item-depth-10 .menu-item-transport { margin-left: -300px; } +.menu-item-depth-11 .menu-item-transport { margin-left: -330px; } + +body.menu-max-depth-0 { min-width: 950px !important; } +body.menu-max-depth-1 { min-width: 980px !important; } +body.menu-max-depth-2 { min-width: 1010px !important; } +body.menu-max-depth-3 { min-width: 1040px !important; } +body.menu-max-depth-4 { min-width: 1070px !important; } +body.menu-max-depth-5 { min-width: 1100px !important; } +body.menu-max-depth-6 { min-width: 1130px !important; } +body.menu-max-depth-7 { min-width: 1160px !important; } +body.menu-max-depth-8 { min-width: 1190px !important; } +body.menu-max-depth-9 { min-width: 1220px !important; } +body.menu-max-depth-10 { min-width: 1250px !important; } +body.menu-max-depth-11 { min-width: 1280px !important; } + +/* Menu item controls */ +.item-type { + font-size: 12px; + padding: 12px 10px; + line-height: 18px; + display: block; +} + +.item-controls { + font-size: 12px; + position: absolute; + right: 20px; + top: -1px; +} + +.item-controls a { + text-decoration: none; +} + +.item-controls a:hover { + cursor: pointer; +} + +.item-controls .item-order { + padding-right: 10px; +} + +.nav-menus-php .item-edit { + position: absolute; + right: -20px; + top: 0; + display: block; + width: 30px; + height: 40px; + margin-right: 0 !important; + text-indent: 100%; + outline: none; + overflow: hidden; + white-space: nowrap; +} + +/* Menu editing */ +.menu-instructions-inactive { + display: none; +} + +.menu-item-settings { + display: block; + width: 402px; + padding: 10px 0 10px 10px; + position: relative; + z-index: 10; /* Keep .item-title's shadow from appearing on top of .menu-item-settings */ +} + +.menu-item-settings .field-move a { + display: none; + margin: 0 2px; +} + +.menu-item-edit-active .menu-item-settings { + display: block; +} + +.menu-item-edit-inactive .menu-item-settings { + display: none; +} + +.add-menu-item-pagelinks { + margin: .5em auto; + text-align: center; +} + +.link-to-original { + display: block; + margin: 0 0 10px; + padding: 3px 5px 5px; + font-size: 12px; + font-style: italic; +} + +.link-to-original a { + padding-left: 4px; + font-style: normal; +} + +.hidden-field { + display: none; +} + +.menu-item-settings .description-thin, +.menu-item-settings .description-wide { + margin-right: 10px; + float: left; +} + +.description-thin { + width: 190px; + height: 40px; +} + +.description-wide { + width: 390px; +} + +.menu-item-actions { + padding-top: 15px; +} + +#cancel-save { + cursor: pointer; +} + +/* Major/minor publishing actions (classes) */ +.nav-menus-php .major-publishing-actions { + clear: both; + padding: 3px 0 6px; +} + +.nav-menus-php .major-publishing-actions .publishing-action { + text-align: right; + float: right; + line-height: 23px; + margin: 4px 0 1px; +} + +.nav-menus-php .blank-slate .menu-settings { + display: none; +} + +.nav-menus-php .delete-action { + float: left; + margin-top: 2px; +} + +.nav-menus-php .submitbox .submitcancel { + border-bottom: 1px solid; + padding: 1px 2px; + text-decoration: none; +} + +.nav-menus-php .major-publishing-actions .form-invalid { + padding-left: 4px; + margin-left: -4px; + border: 0 none; +} + +/* Clearfix */ +#menu-item-name-wrap:after, +#menu-item-url-wrap:after, +#menu-name-label:after, +#menu-settings-column .inside:after, +#nav-menus-frame:after, +.nav-menus-php #post-body-content:after, +.nav-menus-php .button-controls:after, +.nav-menus-php .major-publishing-actions:after, +.nav-menus-php .menu-item-settings:after { + clear: both; + content: "."; + display: block; + height: 0; + visibility: hidden; +} + +#nav-menus-frame, +.button-controls, +#menu-item-url-wrap, +#menu-item-name-wrap { + display: block; +} + +/* Star Ratings - Back-compat for pre-3.8 */ +div.star-holder { + position: relative; + height: 17px; + width: 100px; + background: url('../images/stars.png?ver=20121108') repeat-x bottom left; +} + +div.star-holder .star-rating { + background: url('../images/stars.png?ver=20121108') repeat-x top left; + height: 17px; + float: left; +} + +/* Star Ratings */ +.star-rating { + white-space: nowrap; +} +.star-rating .star { + display: inline-block; + width: 20px; + height: 20px; + -webkit-font-smoothing: antialiased; + font-size: 20px; + line-height: 1; + font-family: 'dashicons'; + text-decoration: inherit; + font-weight: normal; + font-style: normal; + vertical-align: top; + -moz-transition: color .1s ease-in 0; + -webkit-transition: color .1s ease-in 0; + text-align: center; + color: #0074a2; +} + +.star-rating .star-full:before { + content:'\f155'; +} + +.star-rating .star-half:before { + content:'\f459'; +} + +.rtl .star-rating .star-half { + -webkit-transform: rotateY(180deg); + -ms-transform: rotateY(180deg); + transform: rotateY(180deg); +} + +.star-rating .star-empty:before { + content:'\f154'; +} + +div.action-links { + font-weight: normal; + margin: 6px 0 0; +} + +/* Header on thickbox */ +#plugin-information-header { + margin: 0; + padding: 0 5px; + font-weight: 600; + position: relative; + border-bottom-width: 1px; + border-bottom-style: solid; + height: 2.5em; +} +#plugin-information ul#sidemenu { + font-weight: normal; + margin: 0 5px; + position: absolute; + left: 0; + bottom: -1px; +} + +/* Install sidemenu */ +#plugin-information { + height: auto; +} + +#plugin-information p.action-button { + width: 100%; + padding-bottom: 0; + margin-bottom: 0; + margin-top: 10px; + -webkit-border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +#plugin-information .action-button a { + text-align: center; + font-weight: 600; + text-decoration: none; + display: block; + line-height: 2em; +} + +#plugin-information h2 { + clear: none !important; + margin-right: 200px; +} + +#plugin-information .fyi { + margin: 0 10px 50px; + width: 210px; +} + +#plugin-information .fyi h2 { + font-size: 0.9em; + margin-bottom: 0; + margin-right: 0; +} + +#plugin-information .fyi h2.mainheader { + padding: 5px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; +} + +#plugin-information .fyi ul { + padding: 10px 5px 10px 7px; + margin: 0; + list-style: none; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +#plugin-information .fyi li { + margin-right: 0; +} + +#plugin-information #section-holder { + padding: 10px; +} + +#plugin-information .section ul, +#plugin-information .section ol { + margin-left: 16px; + list-style-type: square; + list-style-image: none; +} + +#plugin-information #section-screenshots ol { + list-style: none; + margin: 0; +} + +#plugin-information #section-screenshots li img { + vertical-align: text-top; + max-width: 100%; + width: auto; + height: auto; +} + +#plugin-information #section-screenshots li p { + font-style: italic; + padding-left: 20px; + padding-bottom: 2em; +} + +#plugin-information #section-screenshots ol, +#plugin-information .updated, +#plugin-information pre { + margin-right: 215px; +} + +#plugin-information pre { + padding: 7px; + overflow: auto; + border-width: 1px; + border-style: solid; +} + +.plugin-version-author-uri { + font-size: 13px; +} + +img { + border: none; +} + +/* Header */ +#wphead { + border-bottom-width: 1px; + border-bottom-style: solid; +} + +.press-this #wphead { + height: 32px; + margin-left: 0; + margin-right: 0; + margin-bottom: 5px; +} + +.press-this #header-logo { + float: left; + margin: 7px 7px 0; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.press-this #wphead h1 { + font-weight: normal; + font-size: 16px; + line-height: 32px; + margin: 0; + float: left; +} + +.press-this #wphead h1 a { + text-decoration: none; +} + +.press-this #wphead h1 a:hover { + text-decoration: underline; +} + +.press-this #message { + margin: 10px 0; +} + +.press-this .posting { + margin-right: 252px; +} + +.press-this-sidebar { + float: right; + width: 240px; + padding-top: 10px; +} + +.press-this #title { + margin-left: 0; + margin-right: 0; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.press-this .tagchecklist { + margin-top: 8px; +} + +.press-this #titlediv { + margin: 0; +} + +.press-this .wp-media-buttons { + cursor: default; + padding: 8px 8px 6px; +} + +.press-this .howto { + margin-top: 2px; + margin-bottom: 3px; + font-size: 12px; + font-style: italic; + display: block; +} + +.press-this #wp-content-editor-container { + clear: none; +} + +.press-this #poststuff .inside { + margin-top: 18px; +} + +.press-this .category-tabs { + margin-bottom: 3px; +} + +/* Editor/Main Column */ +.press-this #poststuff { + margin: 0 10px 10px; + padding: 0; +} + +.press-this #photo-add-url-div input[type="text"] { + width: 220px; +} + +#poststuff #editor-toolbar { + height: 30px; +} + +div.zerosize { + border: 0 none; + height: 0; + margin: 0; + overflow: hidden; + padding: 0; + width: 0; +} + +.posting { + margin-right: 212px; + position: relative; +} + +.press-this .inner-sidebar { + width: 200px; +} + +.press-this .inner-sidebar .sleeve { + padding-top: 5px; +} + +.press-this #submitdiv p { + margin: 0; + padding: 6px; +} + +.press-this #submitdiv #publishing-actions { + border-bottom: 1px solid #dfdfdf; +} + +.press-this #publish { + float: right; +} + +.press-this #poststuff h2, +.press-this #poststuff h3 { + font-size: 14px; + line-height: 1; +} + +.press-this #tagsdiv-post_tag h3, +.press-this #categorydiv h3 { + cursor: pointer; +} + +.press-this #submitdiv h3 { + cursor: default; +} + +h3.tb { + font-weight: 600; + font-size: 12px; + margin-left: 5px; +} + +#TB_window { + border: 1px solid #333; +} + +.press-this .postbox, +.press-this .stuffbox { + margin-bottom: 10px; + min-width: 0; +} + +.js .meta-box-sortables .postbox:hover .handlediv { + margin-right: 0 !important; +} + +/* Metabox collapse arrow indicators */ +.js .sidebar-name .sidebar-name-arrow:before, +.js .meta-box-sortables .postbox .handlediv:before { + right: 12px; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 8px 10px; + top: 0; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.js #widgets-left .sidebar-name .sidebar-name-arrow { + display: none; +} + +.js #widgets-left .widgets-holder-wrap.closed .sidebar-name .sidebar-name-arrow, +.js #widgets-left .sidebar-name:hover .sidebar-name-arrow { + display: block; +} + +/* Show the arrow only on hover */ +.js .sidebar-name .sidebar-name-arrow:before, +.js .meta-box-sortables .postbox .handlediv:before { + content: '\f142'; +} + +.js .widgets-holder-wrap.closed .sidebar-name-arrow:before, +.js .meta-box-sortables .postbox.closed .handlediv:before { + content: '\f140'; +} + +.press-this #submitdiv:hover .handlediv { + background: none; +} + +.tbtitle { + font-size: 1.7em; + outline: none; + padding: 3px 4px; + border-color: #dfdfdf; +} + +.press-this .actions { + float: right; + margin: -19px 0 0; +} + +.press-this #extra-fields .actions { + margin: -32px -7px 0 0; +} + +.press-this .actions li { + float: left; + list-style: none; + margin-right: 10px; +} + +#extra-fields .button { + margin-right: 5px; +} + +/* Photo Styles */ +#photo_saving { + margin: 0 8px 8px; + vertical-align: middle; +} + +#img_container_container { + overflow: auto; +} + +#extra-fields { + margin-top: 10px; + position: relative; +} + +#extra-fields h2 { + margin: 12px; +} + +#waiting { + margin-top: 10px; + overflow: hidden; +} + +#waiting span { + float: right; + margin: 0 0 0 5px; +} + +#waiting .spinner { + display: block; +} + +#extra-fields .postbox { + margin-bottom: 5px; +} + +#extra-fields .titlewrap { + padding: 0; + overflow: auto; + height: 120px; +} + +#img_container a { + display: block; + float: left; + overflow: hidden; +} + +#img_container img, +#img_container a { + width: 68px; + height: 68px; +} + +#img_container img { + border: none; + background-color: #f4f4f4; + cursor: pointer; +} + +#img_container a, +#img_container a:link, +#img_container a:visited { + border: 1px solid #ccc; + display: block; + position: relative; +} + +#img_container a:hover, +#img_container a:active { + border-color: #000; + z-index: 1000; + border-width: 1px; +} + +/* Video */ +#embed-code { + width: 100%; + height: 98px; +} + +/* Categories */ +.press-this .categorydiv div.tabs-panel { + height: 100px; +} + +/* Tags */ +.press-this .tagsdiv .newtag { + width: 120px; +} + +.press-this #content { + margin: 5px 0; + padding: 0 5px; + border: 0 none; + height: 345px; + font-family: Consolas, Monaco, monospace; + font-size: 13px; + line-height: 19px; + background: transparent; +} + +/* Submit */ +.press-this #publishing-actions .spinner { + display: inline; + vertical-align: middle; +} + +#TB_ajaxContent #options { + position: absolute; + top: 20px; + right: 25px; + padding: 5px; +} + +#TB_ajaxContent h3 { + margin-bottom: .25em; +} + +.error a { + text-decoration: underline; +} + +.updated a { + text-decoration: none; + padding-bottom: 2px; +} + +/* tag hints */ +.taghint { + color: #aaa; + margin: -17px 0 0 7px; + visibility: hidden; +} + +input.newtag ~ div.taghint { + visibility: visible; +} + +input.newtag:focus ~ div.taghint { + visibility: hidden; +} + +/* TinyMCE */ +#mce_fullscreen_container { + background: #fff; +} + +#photo-add-url-div input[type="text"] { + width: 300px; +} + +/* Theme/Plugin Editor */ +.alignleft h3 { + margin: 0; +} + +#template textarea { + font-family: Consolas, Monaco, monospace; + font-size: 13px; + width: 97%; + background: #f9f9f9; + outline: none; +} + +/* @noflip */ +#template textarea, +#docs-list { + direction: ltr; +} + +#template p { + width: 97%; +} + +#templateside { + float: right; + width: 190px; + word-wrap: break-word; +} + +#templateside h3, +#postcustomstuff p.submit { + margin: 0; +} + +#templateside h4 { + margin: 1em 0 0; +} + +#templateside ol, +#templateside ul { + margin: .5em 0; + padding: 0; +} + +#templateside li { + margin: 4px 0; +} + +#templateside a, +.theme-editor-php .highlight { + display: block; + padding: 3px 3px 3px 12px; + text-decoration: none; +} + +.theme-editor-php .highlight { + margin: -3px 3px -3px -12px; +} + +#templateside .highlight { + border: none; + font-weight: bold; +} + +.nonessential { + font-size: 11px; + font-style: italic; + padding-left: 12px; +} + +#documentation { + margin-top: 10px; +} + +#documentation label { + line-height: 22px; + vertical-align: baseline; + font-weight: 600; +} + +.fileedit-sub { + padding: 10px 0 8px; + line-height: 180%; +} + +.feature-filter { + padding: 8px 12px 0; +} + +.feature-filter .feature-group { + float: left; + margin: 5px 10px 10px; +} + +.feature-filter .feature-group li { + display: inline-block; + vertical-align: top; + list-style-type: none; + padding-right: 25px; + width: 150px; +} + +/* General Widgets Styles */ + +.widget { + margin: 0 auto 10px; + position: relative; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.widget-top { + font-size: 13px; + font-weight: 600; + background: #f7f7f7; +} + +.widget-top a.widget-action, +.widget-top a.widget-action:hover { + text-decoration: none; +} + +.widget-title h4 { + margin: 0; + padding: 15px; + line-height: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.widgets-holder-wrap .widget-inside { + border-top: none; + padding: 1px 15px 15px 15px; + line-height: 16px; +} + +/* Widget Dragging Helpers */ +.widget.ui-draggable-dragging { + min-width: 100%; +} + +.widget.ui-sortable-helper { + opacity: 0.8; +} + +.widget-placeholder { + border: 1px dashed #bbb; + margin: 0 auto 10px; + height: 45px; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#widgets-right .widget-placeholder { + margin-top: 0; +} + +#widgets-right .closed .widget-placeholder { + height: 0; + border: 0; + margin-top: -10px; +} + +/* Widget Sidebars */ +.sidebar-name { + border: none; + position: relative; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.sidebar-name-arrow { + position: absolute; + top: 0; + right: 0; + bottom: 0; +} + +.js .sidebar-name { + cursor: pointer; +} + +.sidebar-name h3 { + margin: 0; + padding: 8px 10px; + overflow: hidden; + white-space: nowrap; +} + +.widgets-holder-wrap .description { + padding: 0 0 15px; + margin: 0; + font-style: normal; + color: #777; +} + +#widgets-right .widgets-holder-wrap .description { + padding-left: 7px; + padding-right: 7px; +} + +/* Widgets 2-col Layout */ +div.widget-liquid-left { + margin: 0; + width: 38%; + float: left; +} + +div.widget-liquid-right { + float: right; + width: 58%; +} + +/* Widgets Left - Available Widgets */ + +div#widgets-left { + padding-top: 12px; +} + +div#widgets-left .closed .sidebar-name, +div#widgets-left .inactive-sidebar.closed .sidebar-name { + margin-bottom: 10px; +} + +div#widgets-left .sidebar-name h3 { + padding: 10px 0; + margin: 0 10px 0 0; +} + +div#widgets-left .sidebar-name .sidebar-name-arrow:before { + right: 0; + top: 4px; + padding: 4px 6px 4px 4px; +} + +div#widgets-left .widget-holder { + background: transparent; + border: none; +} + +#available-widgets .widget-action { + display: none; +} + +#available-widgets .widget { + margin: 0; +} + +#available-widgets .widget:nth-child(odd) { + clear: both; +} + +#available-widgets .widget .widget-description { + display: block; + padding: 10px 15px; + font-size: 12px; +} + +#available-widgets #widget-list { + position: relative; +} + +/* Inactive Sidebars */ +#widgets-left .inactive-sidebar { + clear: both; + width: 100%; + background: transparent; + padding: 0; + margin: 0 0 20px 0; + border: none; + box-shadow: none; +} + +#widgets-left .inactive-sidebar.first { + margin-top: 40px; +} + +/* Not sure what this is for... */ +div#widgets-left .inactive-sidebar .widget.expanded { + left: auto; +} + +.widget-title-action { + float: right; + position: relative; +} + +div#widgets-left .inactive-sidebar .widgets-sortables { + min-height: 42px; + padding: 0; + background: transparent; + margin: 0; + position: relative; +} + +/* Widgets Right */ + +div#widgets-right:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +div#widgets-right .sidebars-column-1, +div#widgets-right .sidebars-column-2 { + max-width: 450px; +} + +div#widgets-right .widgets-holder-wrap { + margin: 10px 0 0 0; +} + +div#widgets-right .sidebar-description { + min-height: 20px; + margin-top: -5px; +} + +div#widgets-right .sidebar-name h3 { + padding: 15px 7px; +} + +div#widgets-right .sidebar-name .sidebar-name-arrow:before { + right: 0; + top: 4px; +} + +div#widgets-right .widget-top { + padding: 0; +} + +div#widgets-right .widgets-sortables { + padding: 0 8px; + margin-bottom: 9px; + position: relative; + min-height: 123px; +} + +div#widgets-right .closed .widgets-sortables { + min-height: 0; + margin-bottom: 0; +} + +.sidebar-name .spinner { + margin: -5px 5px; + float: none; +} + +/* Dragging a widget over a closed sidebar */ +#widgets-right .widgets-holder-wrap.widget-hover { + border-color: #777; + box-shadow: 0 1px 2px rgba(0,0,0,0.3); +} + +/* Accessibility Mode */ +.widgets_access #widgets-left .widget .widget-top { + cursor: auto; +} + +.widgets_access #wpwrap .widgets-holder-wrap.closed .sidebar-description, +.widgets_access #wpwrap .widgets-holder-wrap.closed .widget, +.widgets_access #wpwrap .widget-control-edit { + display: block; +} + +.widgets_access #widgets-left .widget .widget-top:hover, +.widgets_access #widgets-right .widget .widget-top:hover { + border-color: #ddd; +} + +#available-widgets .widget-control-edit .edit, +#widgets-left .inactive-sidebar .widget-control-edit .add, +#widgets-right .widget-control-edit .add { + display: none; +} + +.widget-control-edit { + display: block; + color: #666; + background: #EEE; + padding: 0 15px; + line-height: 43px; + border-left: 1px solid #DDD; +} + +#widgets-left .widget-control-edit:hover, +#widgets-right .widget-control-edit:hover { + color: #fff; + background: #444; + border-left: 0; + outline: 1px solid #444; +} + +.widgets-holder-wrap .sidebar-name, +.widgets-holder-wrap .sidebar-description { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.editwidget { + margin: 0 auto; +} + +.editwidget .widget-inside { + display: block; + padding: 0 15px; +} + +.editwidget .widget-control-actions { + margin-top: 20px; +} + +.js .widgets-holder-wrap.closed .widget, +.js .widgets-holder-wrap.closed .sidebar-description, +.js .closed br.clear { + display: none; +} + +.nav-menus-php .item-edit:before, +.widget-top a.widget-action:after, +.control-section .accordion-section-title:after, +.accordion-section-title:after { + right: 0; + content: '\f140'; + border: none; + background: none; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.widget-top a.widget-action:after { + padding: 12px 12px 0; +} + +.nav-menus-php .item-edit:before { + line-height: 2.1; +} + +.control-section .accordion-section-title:after, +.accordion-section-title:after { + float: right; + right: 20px; + top: -2px; +} + +.control-section.open .accordion-section-title:after, +#customize-info.open .accordion-section-title:after, +.nav-menus-php .menu-item-edit-active .item-edit:before { + content: '\f142'; +} + +/* Hide Widget Settings by Default */ +.widget-inside, +.widget-description { + display: none; +} + +/* Dragging widgets over the available widget area show's a "Deactivate" message */ +#removing-widget { + display: none; + font-weight: normal; + padding-left: 15px; + font-size: 12px; + line-height: 1; +} + +.widget-control-noform, +#access-off, +.widgets_access .widget-action, +.widgets_access .sidebar-name-arrow, +.widgets_access #access-on, +.widgets_access .widget-holder .description, +.no-js .widget-holder .description { + display: none; +} + +.widgets_access .widget-holder, +.widgets_access #widget-list { + padding-top: 10px; +} + +.widgets_access #access-off { + display: inline; +} + +.widgets_access .sidebar-name, +.widgets_access .widget .widget-top { + cursor: default; +} + + +/* Widgets Area Chooser */ +.widget-liquid-left #widgets-left.chooser #available-widgets .widget, +.widget-liquid-left #widgets-left.chooser .inactive-sidebar { + transition: opacity 0.1s linear; +} + +.widget-liquid-left #widgets-left.chooser #available-widgets .widget, +.widget-liquid-left #widgets-left.chooser .inactive-sidebar { + /* -webkit-filter: blur(1px); */ + opacity: 0.2; + pointer-events: none; +} + +.widget-liquid-left #widgets-left.chooser #available-widgets .widget-in-question { + /* -webkit-filter: none; */ + opacity: 1; + pointer-events: auto; +} + +.widgets-chooser ul.widgets-chooser-sidebars { + margin: 0; + list-style-type: none; + max-height: 300px; + overflow: auto; +} + +.widgets-chooser { + display: none; +} + +.widgets-chooser ul { + border: 1px solid #ccc; +} + +.widgets-chooser li { + padding: 10px 15px 10px 35px; + border-bottom: 1px solid #ccc; + background: #fff; + margin: 0; + cursor: pointer; + outline: none; + position: relative; + transition: background: 0.2s ease-in-out; +} + +.widgets-chooser li:hover, +.widgets-chooser li:focus { + background: rgba(255,255,255,0.7); +} + +.widgets-chooser li:focus:before { + content: '\f147'; + display: block; + -webkit-font-smoothing: antialiased; + font: normal 26px/1 'dashicons'; + color: #999; + position: absolute; + top: 7px; + left: 5px; +} + +.widgets-chooser li:last-child { + border: none; +} + +.widgets-chooser li.widgets-chooser-selected { + background: #2ea2cc; + color: #fff; +} + +.widgets-chooser li.widgets-chooser-selected:before, +.widgets-chooser li.widgets-chooser-selected:focus:before { + content: '\f147'; + display: block; + -webkit-font-smoothing: antialiased; + font: normal 26px/1 'dashicons'; + color: #fff; + position: absolute; + top: 7px; + left: 5px; +} + +.widgets-chooser .widgets-chooser-actions { + padding: 10px 0 12px 0; + text-align: center; +} + +.widgets-chooser button { + margin-right: 5px; +} + +#available-widgets .widget .widget-top { + cursor: pointer; +} + +/* Enable draggable on IE10 touch events until it's rolled into jQuery UI core */ +.ui-sortable, +.ui-draggable { + -ms-touch-action: none; + touch-action: none; +} + +.meta-box-sortables.ui-sortable, +.widgets-holder-wrap .ui-draggable, +.widgets-holder-wrap .ui-sortable, +.menu.ui-sortable { + -ms-touch-action: auto; + touch-action: auto; +} + +.meta-box-sortables.ui-sortable .hndle, +.menu.ui-sortable .menu-item-handle { + -ms-touch-action: none; + touch-action: none; +} + +/* Accordion */ + +.accordion-section { + border-bottom: 1px solid #dfdfdf; + margin: 0; +} + +.accordion-section.open .accordion-section-content, +.no-js .accordion-section .accordion-section-content { + display: block; +} + +.accordion-section.open:hover { + border-bottom-color: #dfdfdf; +} + +.accordion-section-content { + display: none; + padding: 10px 20px 15px; + overflow: hidden; + background: #fff; + border-left: 1px solid #dfdfdf; + border-right: 1px solid #dfdfdf; +} + +.accordion-section-title { + margin: 0; + padding: 12px 15px 15px; + position: relative; + border-left: 1px solid #dfdfdf; + border-right: 1px solid #dfdfdf; + + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.js .accordion-section-title { + cursor: pointer; +} + +.js .accordion-section-title:after { + position: absolute; + top: 12px; + right: 10px; + z-index: 1; +} + +.accordion-section-title:focus { + outline: none; +} + +.accordion-section-title:hover:after, +.accordion-section-title:focus:after { + border-color: #aaa transparent; +} + +.cannot-expand .accordion-section-title { + cursor: auto; +} + +.cannot-expand .accordion-section-title:after { + display: none; +} + +.control-section .accordion-section-title { + border-left: none; + border-right: none; + padding: 10px 10px 11px 14px; + line-height: 21px; + background: #fff; +} + +.control-section .accordion-section-title:after { + top: 11px; +} + +.js .control-section:hover .accordion-section-title, +.js .control-section .accordion-section-title:hover, +.js .control-section.open .accordion-section-title, +.js .control-section .accordion-section-title:focus { + color: #222; + background: #f5f5f5; +} + +.control-section.open .accordion-section-title { + /* When expanded */ + border-bottom: 1px solid #dfdfdf; +} + +.sticky-menu #TB_window .updated { + margin: 16px 0 0; +} + +li#wp-admin-bar-menu-toggle { + display: none; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and (max-width: 480px) { + div.widget-liquid-left { + width: 100%; + float: none; + border-right: none; + padding-right: 0; + } + + #widgets-left .sidebar-name { + margin-right: 0; + } + + #widgets-left #available-widgets .widget-top { + margin-right: 0; + } + + #widgets-left .inactive-sidebar .widgets-sortables { + margin-right: 0; + } + + div.widget-liquid-right { + width: 100%; + float: none; + } + + div.widget { + margin: 0 auto 10px !important; + max-width: 480px; + } +} + +@media screen and (max-width: 320px) { + div.widget { + max-width: 320px; + } +} + +@media only screen and (max-width: 768px) { + /* categories */ + #col-left { + width: 100%; + } + + #col-right { + width: 100%; + } +} + +@media only screen and (min-width: 769px) { + /* categories */ + #col-left { + width: 35%; + } + + #col-right { + width: 65%; + } +} + +@media only screen and (max-width: 860px) { + + /* categories */ + #col-left { + width: 35%; + } + + #col-right { + width: 65%; + } +} + +@media only screen and (min-width: 980px) { + + /* categories */ + #col-left { + width: 35%; + } + + #col-right { + width: 65%; + } +} + +@media only screen and (max-width: 768px) { + /* categories */ + #col-left { + width: 100%; + } + + #col-right { + width: 100%; + } + + .form-field input, + .form-field textarea { + width: 99%; + } + + .form-wrap .form-field { + padding:0; + } + + /* users */ + #profile-page .form-table textarea { + max-width: 400px; + width: auto; + } + + /* menu locations */ + #menu-locations-wrap .widefat { + width: 100%; + } +} + +@media only screen and (min-width: 1250px) { + #widgets-left #available-widgets .widget { + width: 49%; + float: left; + } + + .widget.ui-draggable-dragging { + min-width: 49%; + } + + #widgets-left #available-widgets .widget:nth-child(even) { + float: right; + } + + #widgets-right .sidebars-column-1, + #widgets-right .sidebars-column-2 { + float: left; + width: 49%; + } + + #widgets-right .sidebars-column-1 { + margin-right: 2%; + } + + #widgets-right.single-sidebar .sidebars-column-1, + #widgets-right.single-sidebar .sidebars-column-2 { + float: none; + width: 100%; + margin: 0; + } +} + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + tr.wp-locked .locked-indicator { + background-image: url('../images/lock-2x.png'); + background-size: 16px 16px; + } + + #content-resize-handle, + #post-body .wp_themeSkin .mceStatusbar a.mceResize { + background: transparent url('../images/resize-2x.gif') no-repeat scroll right bottom; + background-size: 11px 11px; + } + + .rtl #content-resize-handle, + .rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize { + background: transparent url('../images/resize-rtl-2x.gif') no-repeat scroll right bottom; + } + + /* Back-compat for pre-3.8 */ + div.star-holder { + background: url('../images/stars-2x.png?ver=20121108') repeat-x bottom left; + background-size: 21px 37px; + } + + /* Back-compat for pre-3.8 */ + div.star-holder .star-rating { + background: url('../images/stars-2x.png?ver=20121108') repeat-x top left; + background-size: 21px 37px; + } + + .wp-full-overlay .collapse-sidebar-arrow { + background-image: url('../images/arrows-2x.png'); + background-size: 15px 123px; + } + + .spinner, + .imgedit-wait, + .customize-loading #customize-container, + .revision-tick.completed-false, + #theme-installer .wp-full-overlay-main { + background-image: url('../images/spinner-2x.gif'); + } + +} + +/* =Localized CSS +-------------------------------------------------------------- */ + +/* zh_CN: Remove italic properties. */ +.locale-zh-cn .howto, +.locale-zh-cn .tablenav .displaying-num, +.locale-zh-cn .js .input-with-default-title, +.locale-zh-cn .link-to-original, +.locale-zh-cn .inline-edit-row fieldset span.title, +.locale-zh-cn .inline-edit-row fieldset span.checkbox-title, +.locale-zh-cn #utc-time, +.locale-zh-cn #local-time, +.locale-zh-cn p.install-help, +.locale-zh-cn p.help, +.locale-zh-cn p.description, +.locale-zh-cn span.description, +.locale-zh-cn .form-wrap p { + font-style: normal; +} + +/* zh_CN: Enlarge dashboard widget 'Configure' link */ +.locale-zh-cn .hdnle a { font-size: 12px; } + +/* zn_CH: Enlarge font size, set font-size: normal */ +.locale-zh-cn form.upgrade .hint { font-style: normal; font-size: 100%; } + +/* Zn_CH: Distraction free writing. + * More beautiful font for "Just write." + * Larger text for HTML/Visual mode. + */ +.locale-zh-cn #wp-fullscreen-tagline { font-family: KaiTi, "楷体", sans-serif; } +.locale-zh-cn #wp-fullscreen-modes a { font-size: 12px; } + +/* zh_CN: Enlarge font-size. */ +.locale-zh-cn #sort-buttons { font-size: 1em !important; } + +/* de_DE: Text needs more space for translation */ +.locale-de-de .inline-edit-row fieldset label span.title { + width: 7em; /* default 5em */ +} +.locale-de-de .inline-edit-row fieldset label span.input-text-wrap { + margin-left: 7em; /* default 5em */ +} +.locale-de-de #customize-header-actions .button { + padding: 0 5px 1px; /* default 0 10px 1px */ +} +.locale-de-de #customize-header-actions .spinner { + margin: 16px 3px 0; /* default 16px 4px 0 5px */ +} + +/* ru_RU: Text needs more room to breathe. */ +.locale-ru-ru .inline-edit-row fieldset label span.title { + width: 8em; /* default 5em */ +} +.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap { + margin-left: 8em; /* default 5em */ +} +.locale-ru-ru.press-this .posting { + margin-right: 277px; /* default 252px + 25px */ +} +.locale-ru-ru .press-this-sidebar { + width: 265px; /* default 240px + 25px */ +} +.locale-ru-ru #customize-header-actions .button { + padding: 0 5px 1px; /* default 0 10px 1px */ +} +.locale-ru-ru #customize-header-actions .spinner { + margin: 16px 3px 0; /* default 16px 4px 0 5px */ +} + +/* lt_LT: QuickEdit */ +.locale-lt-lt .inline-edit-row fieldset label span.title { + width: 8em; +} +.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap { + margin-left: 8em; +} + + +@-ms-viewport { + width: device-width; +} + +@media screen and ( max-width: 782px ) { + html.wp-toolbar { + padding-top: 46px; + } + + body { + min-width: 240px; + overflow-x: hidden; + } + + body * { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important; + } + + #wpwrap { + background: #f0f0f0; + } + + #wpcontent, .auto-fold #wpcontent { + position: relative; + margin-left: 0; + padding-left: 10px; + } + + .wrap { + margin-right: 12px; + margin-left: 0; + } + + .col-wrap { + padding: 0; + } + + .sticky-menu #adminmenuwrap { + position: relative; + z-index: auto; + top: 0; + } + + /* Hidden Elements */ + #screen-meta, + #screen-meta-links, + #collapse-menu, + .post-format-select { + display: none !important; + } + + /* Input Elements */ + textarea { + -webkit-appearance: none; + } + + input[type=text], input[type=search], + input[type=password], input[type=number] { + -webkit-appearance: none; + padding: 6px 10px; + } + + input.code { + padding-bottom: 5px; + padding-top: 10px; + } + + input[type=checkbox], .widefat th input[type=checkbox] { + -webkit-appearance: none; + padding: 10px; + } + + .widefat th input[type=checkbox] { + margin-bottom: 8px; + } + + input[type=checkbox]:checked:before, .widefat th input[type=checkbox]:before { + font: normal 30px/1 'Dashicons'; + margin: -3px -5px; + } + + input[type=radio], + input[type=checkbox] { + height: 25px; + width: 25px; + } + + .wp-admin p input[type=checkbox], + .wp-admin p input[type=radio] { + margin-top: -3px; + } + + input[type=radio]:checked:before { + vertical-align: middle; + width: 9px; + height: 9px; + margin: 7px; + line-height: 16px; + } + + .wp-upload-form input[type=submit] { + margin-top: 10px; + } + + #wpbody select { + height: 36px; + font-size: 16px; + } + + .wp-admin .button-cancel { + padding: 0; + font-size: 14px; + } + + .wrap .add-new-h2, .wrap .add-new-h2:active { + padding: 10px 15px; + font-size: 14px; + } + + .wp-color-result { + height: auto; + padding-left: 45px; + } + + .wp-color-result:after { + font-size: 14px; + height: auto; + padding: 6px 14px; + } + + #createuser .form-field input { + width: 100%; + } + + /* Feedback Messages */ + .wrap div.updated, .wrap div.error, .media-upload-form div.error { + margin: 20px 0 10px 0; + padding: 5px 10px; + font-size: 14px; + line-height: 175%; + } + + /* Sidebar Adjustments */ + .auto-fold #adminmenu, + .auto-fold #adminmenuback, + .auto-fold #adminmenuwrap { + position: absolute; + width: 190px; + z-index: 100; + } + + .auto-fold #adminmenuback, + .auto-fold #adminmenuwrap { + display: none; + } + + .auto-fold #adminmenu li.menu-top { + width: 100%; + } + + /* Resize the admin menu items to a comfortable touch size */ + .auto-fold #adminmenu li a { + font-size: 16px; + padding: 5px; + } + + .auto-fold #adminmenu li.menu-top .wp-submenu > li > a { + padding: 10px 10px 10px 20px; + } + + /* Restore the menu names */ + .auto-fold #adminmenu .wp-menu-name { + display: block; + margin-left: 35px; + } + + /* Switch the arrow side */ + .auto-fold ul#adminmenu a.wp-has-current-submenu:after, + .auto-fold ul#adminmenu > li.current > a.current:after { + border-width: 8px; + margin-top: -8px; + } + + .auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + display: none; + } + + /* Make the submenus appear correctly when tapped. */ + #adminmenu .wp-submenu { + position: relative; + display: none; + } + + .auto-fold #adminmenu .selected .wp-submenu, + .auto-fold #adminmenu .wp-menu-open .wp-submenu { + position: relative; + display: block; + top: 0; + left: -1px; + -webkit-box-shadow: none; + box-shadow: none; + } + + .auto-fold #adminmenu .selected .wp-submenu:after, + .auto-fold #adminmenu .wp-menu-open .wp-submenu:after { + display: none; + } + + .auto-fold #adminmenu .opensub .wp-submenu { + display: none; + } + + .auto-fold #adminmenu .selected .wp-submenu { + display: block; + } + + .auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after { + display: block; + } + + .auto-fold #adminmenu a.menu-top:focus + .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu { + position: relative; + left: -1px; + right: 0; + top: 0; + } + + /* Remove submenu headers and adjust sub meu*/ + #adminmenu .wp-submenu .wp-submenu-head { + display: none; + } + + /* Sidebar Toggle */ + #wp-responsive-toggle { + position: fixed; + top: 5px; + left: 4px; + padding-right: 10px; + z-index: 99999; + border: none; + box-sizing: border-box; + -moz-box-sizing: border-box; + } + + .wrap .icon32 + h2 { + margin-top: -2px; + } + + .wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #333; + } + + .wp-responsive-open #wpbody { + right: -190px; + } + + .auto-fold .wp-responsive-open #adminmenuback, + .auto-fold .wp-responsive-open #adminmenuwrap { + display: block; + } + + /* General New Post Form */ + #post-body-content { + min-width: 0; + } + + #titlediv #title-prompt-text, + #wp-fullscreen-title-prompt-text { + padding: 10px 10px; + } + + .post-format-options { + padding-right: 0; + } + + .post-format-options a { + margin-right: 5px; + margin-bottom: 5px; + min-width: 52px; + } + + .post-format-options .post-format-title { + font-size: 11px; + } + + .post-format-options a div { + height: 28px; + width: 28px; + } + + .post-format-options a div:before { + font-size: 26px !important; + } + + /* General Metabox */ + .postbox { + font-size: 14px; + } + + #poststuff h3, + .metabox-holder h3 { + padding: 12px; + } + + .postbox .handlediv { + margin-top: 3px; + } + + /* Publish Metabox Options */ + #post-visibility-select { + line-height: 280%; + } + + .wp-core-ui .save-post-visibility, + .wp-core-ui .save-timestamp { + vertical-align: middle; + margin-right: 15px; + } + + .timestamp-wrap select#mm { + display: block; + width: 100%; + margin-bottom: 10px; + } + + .timestamp-wrap #jj, + .timestamp-wrap #aa, + .timestamp-wrap #hh, + .timestamp-wrap #mn { + padding: 12px 3px; + font-size: 14px; + margin-bottom: 5px; + width: auto; + text-align: center; + } + + /* Categories Metabox */ + ul.category-tabs { + margin: 30px 0 15px; + } + + ul.category-tabs li.tabs { + padding: 15px; + } + + .press-this ul.category-tabs li.tabs { + padding: 3px 5px 5px; /* Reset tabs in Press This to standard size */ + } + + ul.categorychecklist li { + margin-bottom: 15px; + } + + ul.categorychecklist ul { + margin-top: 15px; + } + + .category-add input[type=text], + .category-add select { + max-width: none; + margin-bottom: 15px; + } + + /* Tags Metabox */ + .tagsdiv .newtag { + width: 100%; + padding: 25px 10px; + margin-bottom: 15px; + } + + .tagchecklist { + margin: 25px 10px; + } + + .tagchecklist span { + font-size: 16px; + line-height: 120%; + } + + /* Revisions */ + #diff-next-revision, + #diff-previous-revision { + margin-top: -1em; + } + + table.diff { + -ms-word-break: break-all; + word-break: break-all; + word-wrap: break-word; + } + + /* Discussion */ + #commentstatusdiv p { + line-height: 2.8; + } + + /* TinyMCE Adjustments */ + .mceToolbar * { + white-space: normal !important; + } + + .mceToolbar tr, + .mceToolbar td { + float: left !important; + } + + .wp_themeSkin a.mceButton { + width: 30px; + height: 30px; + } + + .wp_themeSkin .mceButton .mceIcon { + margin-top: 5px; + margin-left: 5px; + } + + .wp_themeSkin .mceSplitButton { + margin-top: 1px; + } + + .wp_themeSkin .mceSplitButton td a.mceAction { + padding-top: 6px; + padding-bottom: 6px; + padding-left: 6px; + padding-right: 3px; + } + + .wp_themeSkin .mceSplitButton td a.mceOpen, + .wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen { + padding-top: 6px; + padding-bottom: 6px; + background-position: 1px 6px; + } + + .wp_themeSkin table.mceListBox { + margin: 5px; + } + + div.quicktags-toolbar input { + padding: 10px 20px; + } + + #wp-content-editor-tools { + overflow: hidden; + padding: 20px 15px 1px 0; + top: 1px; + } + + a.wp-switch-editor { + font-size: 16px; + line-height: 1em; + margin: 3px 0 0 7px; + padding: 12px 15px; + } + + #wp-content-media-buttons a { + font-size: 16px; + line-height: 37px; + height: 39px; + padding: 0 20px 0 15px; + } + + .wp-media-buttons span.wp-media-buttons-icon, + .wp-media-buttons span.jetpack-contact-form-icon { + width: 22px !important; + margin-top: -3px !important; + margin-left: -5px !important; + } + + .wp-media-buttons .add_media span.wp-media-buttons-icon:before, + .wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before { + font-size: 20px !important; + } + + #content_wp_fullscreen { + display: none; + } + + .misc-pub-section { + padding: 20px 10px 20px; + } + + .misc-pub-section > a { + float: right; + font-size: 16px; + } + + #delete-action, + #publishing-action { + line-height: 47px; + } + + /* Subsubsub Nav */ + .subsubsub { + font-size: 16px; + text-align: center; + margin-bottom: 15px; + } + + /* WP List Table Options & Filters */ + .tablenav { + height: auto; + } + + .tablenav.top { + margin: 0; + } + + .tablenav.bottom { + position: relative; + margin-top: 15px; + } + + .tablenav br { + display: none; + } + + .tablenav br.clear { + display: block; + } + + #wpbody-content { + padding-bottom: 100px; + } + + p.search-box { + float: none; + position: absolute; + bottom: 0; + width: 98%; + height: 90px; + margin-bottom: 20px; + } + + p.search-box input[name="s"] { + height: auto; + float: none; + width: 100%; + margin-bottom: 10px; + vertical-align: middle; + -webkit-appearance: none; + } + + p.search-box input[type="submit"] { + margin-bottom: 10px; + } + + .tablenav.top .actions, .view-switch { + display: none; + } + + /* Pagination */ + .tablenav.top .displaying-num { + display: none; + } + + .tablenav.bottom .displaying-num { + position: absolute; + right: 0; + top: 10px; + font-size: 14px; + } + + .tablenav-pages { + width: 100%; + text-align: center; + margin: 0 0 25px; + } + + .tablenav.bottom .tablenav-pages { + margin-top: 25px; + } + + .tablenav.top .tablenav-pages.one-page { + display: none; + } + + .tablenav.bottom .tablenav-pages.one-page { + margin: 15px 0 0 0; + height: 0; + } + + .tablenav-pages .pagination-links .paging-input { + font-size: 18px; + } + + .tablenav-pages .pagination-links a { + padding: 8px 20px 11px; + font-size: 18px; + background: rgba(0, 0, 0, 0.05); + } + + .tablenav-pages .pagination-links .current-page { + padding: 10px; + font-size: 14px; + } + + /* WP List Table Adjustments: General */ + .form-wrap > p { + display: none; + } + + .comment-count { + font-size: 14px; + } + + /* Columns to hide */ + .fixed .column-date, + .fixed .column-author, + .column-categories, + .column-tags, + .tags .column-description, + .media .column-parent, + .users .column-email, + .users .column-name, + .sites .column-registered, + .sites .column-users { + display: none; + } + + .fixed .column-comment .comment-author { + display: block; + } + + /* Posts */ + .column-title { + width: 85%; + } + + .fixed .column-comments, .widefat .check-column { + width: 35px + } + + .widefat thead .check-column, .widefat tfoot .check-column { + padding: 10px 0 10px; + } + + .widefat * { + word-wrap: normal; + } + + /* Quick Edit and Bulk Edit */ + #wpbody-content .quick-edit-row-post .inline-edit-col-left, + #wpbody-content .quick-edit-row-post .inline-edit-col-right, + #wpbody-content .inline-edit-row-post .inline-edit-col-center, + #wpbody-content .quick-edit-row-page .inline-edit-col-left, + #wpbody-content .quick-edit-row-page .inline-edit-col-right, + #wpbody-content .bulk-edit-row-post .inline-edit-col-right, + #wpbody-content .bulk-edit-row .inline-edit-col-left, + #wpbody-content .bulk-edit-row-page .inline-edit-col-right, + #wpbody-content .bulk-edit-row .inline-edit-col-bottom { + float: none; + width: 100%; + } + + #wpbody-content .quick-edit-row fieldset .inline-edit-col label, + #wpbody-content .quick-edit-row fieldset .inline-edit-group label, + #wpbody-content .bulk-edit-row fieldset .inline-edit-col label, + #wpbody-content .bulk-edit-row fieldset .inline-edit-group label { + max-width: none; + float: none; + margin-bottom: 5px; + } + + #wpbody .bulk-edit-row fieldset select { + display: block; + width: 100%; + max-width: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + .inline-edit-row fieldset ul.cat-checklist label, + .inline-edit-row #bulk-titles div { + font-size: 16px; + } + + .inline-edit-row fieldset label span.title { + float: none; + } + + .inline-edit-row fieldset label.inline-edit-tags { + padding: 0 0.5em; + } + + .inline-edit-row fieldset .inline-edit-col label.inline-edit-tags { + padding: 0; + } + + .inline-edit-row fieldset label span.input-text-wrap { + margin-left: 0; + } + + .inline-edit-row fieldset input[name=jj], + .inline-edit-row fieldset input[name=hh], + .inline-edit-row fieldset input[name=mn] { + width: 3em; + } + + .inline-edit-row fieldset input[name=aa] { + width: 4.5em; + } + + #bulk-titles div { + margin: 0.8em 0.3em; + } + + #bulk-titles div a { + height: 22px; + } + + /* Taxonomies */ + .tags .column-posts { + width: 50px; + } + + .tags .column-slug { + width: 30%; + } + + /* Comments */ + .comments .column-response { + width: 35%; + } + + /* Users */ + .users .column-role { + width: 35%; + } + + /* Network admin sites */ + .sites .column-blogname { + width: 55%; + } + + /* Updates */ + #wpbody-content #update-themes-table .plugin-title { + width: auto; + } + + /* Form Tables */ + .form-table { + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + .form-table th, + .form-table td { + display: block; + width: auto; + vertical-align: middle; + } + + .form-table .color-palette td { + display: table-cell; + width: 15px; + } + + .form-table table.color-palette { + margin-right: 10px; + } + + textarea, + input { + font-size: 16px; + } + + .form-table td input[type="text"], + .form-table td input[type="password"], + .form-table td select, + .form-table td textarea, + .form-table span.description, + #profile-page .form-table textarea { + width: 100%; + font-size: 16px; + line-height: 1.5; + padding: 7px 10px; + display: block; + max-width: none; + box-sizing: border-box; + -moz-box-sizing: border-box; + } + + input[type=text].small-text, + input[type=search].small-text, + input[type=password].small-text, + input[type=number].small-text, + input[type="number"].small-text, + .form-table input[type=text].small-text { + width: auto; + max-width: 55px; + display: inline; + padding: 3px 6px; + margin: 0 3px; + } + + #pass-strength-result { + width: 100%; + box-sizing: border-box; + -moz-box-sizing: border-box; + padding: 8px; + } + + .form-table span.description { + padding: 4px 0 0; + line-height: 1.4em; + } + + .form-table th { + padding-top: 10px; + padding-bottom: 0; + border-bottom: 0; + } + + .form-table td { + padding-top: 8px; + padding-left: 0; + } + + .form-table input.regular-text { + width: 100%; + } + + .form-table label { + font-size: 14px; + } + + .form-table fieldset label { + display: block; + } + + #utc-time { + margin-top: 10px; + } + + #utc-time, + #local-time { + display: block; + float: none; + padding: 0; + line-height: 2; + } + + /* Add/Edit Media */ + .wp_attachment_details label[for="content"] { + font-size: 14px; + line-height: 1.5em; + } + + /* Links */ + .link-manager-php #posts-filter { + margin-top: 25px; + } + + .link-manager-php .tablenav.bottom { + overflow: hidden; + } + + .links-table #link_rel { + max-width: none; + } + + .links-table th, + .links-table td { + padding: 10px 0; + } + + /** + * Nav Menus + * ---------------------------------------------------------------------------- + */ + body.nav-menus-php { + min-width: 0 !important; + } + + #nav-menus-frame { + margin-left: 0; + float: none; + width: 100%; + } + + #wpbody-content #menu-settings-column { + display: block; + width: 100%; + float: none; + margin-left: 0; + } + + #side-sortables .add-menu-item-tabs { + margin: 15px 0 14px; + } + + ul.add-menu-item-tabs li.tabs { + padding: 13px 15px 14px; + } + + .nav-menus-php .item-controls .item-type { + margin-top: 2px; + } + + .nav-menus-php .customlinkdiv .howto input { + width: 65%; + } + + .nav-menus-php .quick-search { + width: 85%; + } + + #menu-management-liquid { + margin-top: 25px; + } + + .nav-menus-php .menu-name-label.howto span { + margin-top: 13px + } + + .menu-name-label #menu-name { + margin-top: 4px; + } + + .nav-menus-php .major-publishing-actions .publishing-action { + margin-top: 6px; + } + + .nav-menus-php .delete-action { + font-size: 14px; + line-height: 50px; + margin-top: 12px; + } + + .menu-item-bar .menu-item-handle, + .menu-item-settings, + .description-wide { + width: auto; + } + + .menu-item-settings { + padding: 10px; + } + + .menu-item-settings .description-thin, + .menu-item-settings .description-wide { + width: 100%; + height: auto; + } + + .menu-item-settings input { + width: 100%; + } + + .menu-settings dl { + padding-left: 0; + } + + .menu-settings dd { + float: none; + width: 100%; + margin-bottom: 15px; + } + + .menu-settings dt { + float: none; + width: auto; + margin-left: 0; + margin-bottom: 15px; + } + + .available-theme .action-links .delete-theme { + float: none; + margin: 0; + padding: 0; + clear: both; + } + + .available-theme .action-links .delete-theme a { + padding: 0; + } + + /* Widget Management Page (Needs UX work on mobile) */ + #templateside { + float: none; + width: auto; + } + + #templateside li { + margin: 0; + } + + #templateside li a { + display: block; + padding: 5px; + } + + #templateside .highlight { + padding: 5px; + margin-left: -5px; + margin-top: -5px; + } + + #template div { + float: none; + margin: 0; + width: auto; + } + + #template textarea { + width: 100%; + } + + .fileedit-sub .alignright { + margin-top: 15px; + } + + /* Plugin/Theme Management Page */ + .wp-list-table.plugins { + position: relative; + margin-top: 35px; + margin-bottom: 50px; + } + + .wp-list-table.plugins thead .column-description, + #wpbody-content .wp-list-table.plugins tfoot .column-description, + .wp-list-table.plugins th#description { + display: none; + } + + #wpbody-content .wp-list-table.plugins, + #wpbody-content .wp-list-table.plugins thead, + #wpbody-content .wp-list-table.plugins tbody, + #wpbody-content .wp-list-table.plugins tr, + #wpbody-content .wp-list-table.plugins .column-description, + #wpbody-content .wp-list-table.plugins .plugin-title, + #wpbody-content .wp-list-table.plugins .theme-title, + #wpbody-content .wp-list-table.plugins .plugin-update, + #wpbody-content .wp-list-table.plugins .manage-column.column-name { + display: block; + width: auto; + } + + .wp-list-table.plugins thead, + .wp-list-table.plugins tfoot { + position: absolute; + top: -35px; + left: 0; + right: 0; + width: auto; + height: 35px; + } + + .wp-list-table.plugins tfoot { + bottom: -35px; + top: auto; + } + + .active, .inactive { + padding-top: 0; + } + + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title { + padding-top: 13px; + padding-bottom: 4px; + } + + .plugins tr.active + tr.inactive th.check-column, + .plugins tr.active + tr.inactive td, + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title, + .wp-list-table.plugins tbody th { + box-shadow: none; + -webkit-box-shadow: none; + } + + .plugins tbody { + padding: 1px 0 0; + } + + .plugins tr.active + tr.inactive td.column-description { + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -ms-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -o-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + } + + .plugins tr.active + tr.inactive th.check-column, + .plugins tr.active + tr.inactive td { + border-top: none; + } + + .wp-list-table.plugins .column-description { + padding-top: 0; + } + + .wp-list-table.plugins .manage-column.column-name, + .wp-list-table.plugins .column-description, + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title { + padding-right: 12px; + padding-left: 46px; + } + + .wp-list-table.plugins tr { + position: relative; + } + + .wp-list-table.plugins th.check-column, + .wp-list-table.plugins tr.update th.check-column { + position: absolute; + height: auto; + top: 0; + bottom: 0; + left: 0; + padding-left: 2px; + padding-top: 18px; + } + + .wp-list-table.plugins thead th.check-column, + .wp-list-table.plugins tfoot th.check-column { + padding-left: 3px; + padding-top: 11px; + background: none; + } + + .widefat tbody th.check-column input[type="checkbox"] { + margin-top: -3px; + margin-left: 8px; + } + + .wp-list-table.plugins .active .check-column input, + .wp-list-table.plugins .update .check-column input { + margin-left: 5px; + } + + .wp-list-table.plugins thead .check-column input, + .wp-list-table.plugins tfoot .check-column input { + margin-top: -6px; + } + + .wp-list-table.plugins .active th.check-column { + background: none; + } + + .wp-list-table.plugins .plugin-title strong, + .wp-list-table.plugins .theme-title strong { + font-size: 1.4em; + line-height: 1.6em; + } + + /* Add New plugins page */ + table.plugin-install .column-name, + table.plugin-install .column-version, + table.plugin-install .column-rating, + table.plugin-install .column-description { + display: block; + width: auto; + } + + table.plugin-install th.column-name, + table.plugin-install th.column-version, + table.plugin-install th.column-rating, + table.plugin-install th.column-description { + display: none; + } + + table.plugin-install td.column-name strong { + font-size: 1.4em; + line-height: 1.6em; + } + + table.plugin-install #the-list td { + -webkit-box-shadow: none; + box-shadow: none; + } + + table.plugin-install #the-list tr { + display: block; + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + } + + /* Dashboard */ + #dashboard_recent_comments #the-comment-list .comment-item .avatar { + height: 30px; + width: 30px; + margin: 4px 10px 5px 0; + } + + /* About Page */ + .about-wrap .feature-section.one-col > div, + .about-wrap .feature-section.two-col > div, + .about-wrap .three-col.about-updates > div { + width: 100%; + margin: 0; + float: none; + } + + .about-wrap .about-colors .color-option { + width: 49%; + } + + /* Moderate Comment */ + .comment-ays { + border-bottom: none; + } + + #wpfooter { + display: none; + } + + #comments-form .checkforspam { + display: none; + } + + /* Reset responsive styles in Press This */ + + .press-this a.wp-switch-editor { + font: 13px/19px "Open Sans", sans-serif; + margin: 5px 0 0 5px; + padding: 3px 8px 4px; + } + + .press-this #wp-content-media-buttons a { + padding: 0; + line-height: normal; + height: auto; + } + + .press-this #wp-content-editor-tools { + padding: 0; + top: 3px; + } + + .press-this .category-tabs { + margin-top: 0; + } + + .press-this .tagsdiv .newtag { + width: 120px; + padding: 3px 5px; + margin-bottom: 0; + } + + .press-this .tagchecklist { + padding: 0; + margin-bottom: 0; + } + + .press-this .wp_themeSkin a.mceButton { + width: 20px; + height: 20px; + } + + .press-this .wp_themeSkin .mceButton .mceIcon { + margin: 0; + } + + .press-this #poststuff h3, + .press-this .metabox-holder h3 { + padding: 7px 12px; + } + + .interim-login input[type=checkbox], + .press-this input[type=checkbox], + .press-this input[type=radio] { + height: 16px; + width: 16px; + } + + .interim-login input[type=checkbox]:checked:before, + .press-this input[type=checkbox]:checked:before { + width: 16px; + font: normal 21px/1 'dashicons'; + margin: -3px 0 0 -4px; + } + + .press-this input[type=radio]:checked:before { + font: normal 21px/1 'dashicons'; + width: 6px; + height: 6px; + margin: 4px; + } + + .press-this ul.categorychecklist ul, + .press-this ul.categorychecklist li { + margin-top: 0; + margin-bottom: 0; + } + + .press-this div.quicktags-toolbar input { + padding: 2px 4px; + } + + .press-this textarea, + .press-this input { + font-size: 14px; + } + + .press-this .tagchecklist span { + font-size: 13px; + line-height: 1.8em; + } +} + +@media only screen and (max-width: 500px) { + .about-wrap { + margin-right: 20px; + margin-left: 10px; + } + + .about-wrap h1, + .about-text { + margin-right: 0; + } + + .about-text { + margin-bottom: 0.25em; + } + + .about-wrap .wp-badge { + position: relative; + margin-bottom: 1.5em; + width: 100%; + } + + .about-wrap .feature-section.three-col div { + width: 100%; + float: none; + } + + .about-wrap .three-col.about-updates .col-1 { + padding: 0; + float: none; + } + + .about-wrap .three-col.about-updates .col-2 { + margin: 0 0 20px; + width: 100%; + float: none; + } + + /* Align Add Media + Visual + Text tabs */ + #wp-content-media-buttons a { + font-size: 14px; + padding: 0 10px 0 10px; + } +} + +@media screen and ( max-width: 782px ) { + #wpadminbar #wp-admin-bar-menu-toggle a { + display: block; + padding: 0; + overflow: hidden; + outline: none; + text-decoration: none; + border: 1px solid transparent; + background: none; + height: 44px; + margin-left: -1px; + } + + li#wp-admin-bar-menu-toggle { + display: block; + } + + #wpadminbar #wp-admin-bar-menu-toggle a:hover { + border: 1px solid transparent; + } + + #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + content: '\f228'; + display: inline-block; + float: left; + font: normal 40px/45px 'Dashicons'; + vertical-align: middle; + outline: none; + margin: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + height: 44px; + width: 50px; + padding: 0; + border: none; + text-align: center; + text-decoration: none; + box-sizing: border-box; + -moz-box-sizing: border-box; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + #adminmenuwrap, + #adminmenuback { + display: none; + } + + .wp-responsive-open #adminmenuwrap, + .wp-responsive-open #adminmenuback { + display: block; + } + + /* Disable horizontal scroll when responsive menu is open + since we push the main content off to the right. */ + #wpwrap.wp-responsive-open { + overflow-x: hidden; + } + + html.wp-toolbar { + padding-top: 0; + } + + #wpbody { + padding-top: 46px; + } + + .auto-fold #adminmenu { + top: 46px; + } + + #wp-responsive-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 400; + } + + /* Keep the close icon from overlapping the Welcome text. */ + .welcome-panel .welcome-panel-close { + overflow: hidden; + text-indent: 100%; + white-space: nowrap; + width: 20px; + height: 20px; + right: 0; + padding: 5px; + } + + /* Make the close icon larger for tappability. */ + #welcome-panel.welcome-panel .welcome-panel-close::before { + font-size: 20px; + margin: 0; + } + + /* Keep full-width boxes on Edit Post page from causing horizontal scroll */ + div#post-body.metabox-holder.columns-1 { + overflow-x: hidden; + } + + /* Color Picker Options */ + .color-option { + width: 49%; + } +} diff --git a/src/wp-admin/css/wp-admin.min.css b/src/wp-admin/css/wp-admin.min.css new file mode 100644 index 0000000..565f280 --- /dev/null +++ b/src/wp-admin/css/wp-admin.min.css @@ -0,0 +1 @@ +#wpwrap{height:auto;min-height:100%;width:100%;position:relative;-webkit-font-smoothing:subpixel-antialiased}#wpcontent{height:100%}#wpcontent,#wpfooter{margin-left:180px}.folded #wpcontent,.folded #wpfooter{margin-left:56px}#wpbody-content{padding-bottom:65px;float:left;width:100%;overflow:visible!important}#adminmenuback,#adminmenuwrap,#adminmenu,#adminmenu .wp-submenu{width:160px}#adminmenuback{position:absolute;top:0;bottom:0;z-index:-1}#adminmenu{clear:left;margin:12px 0 0;padding:0;list-style:none}.folded #adminmenuback,.folded #adminmenuwrap,.folded #adminmenu,.folded #adminmenu li.menu-top{width:36px}.inner-sidebar{float:right;clear:right;display:none;width:281px;position:relative}.columns-2 .inner-sidebar{margin-right:auto;width:286px;display:block}.inner-sidebar #side-sortables,.columns-2 .inner-sidebar #side-sortables{min-height:300px;width:280px;padding:0}.has-right-sidebar .inner-sidebar{display:block}.has-right-sidebar #post-body{float:left;clear:left;width:100%;margin-right:-2000px}.has-right-sidebar #post-body-content{margin-right:300px;float:none;width:auto}#col-container,#col-left,#col-right{overflow:hidden;padding:0;margin:0}#col-left{width:35%}#col-right{float:right;clear:right;width:65%}.col-wrap{padding:0 7px}.alignleft{float:left}.alignright{float:right}.textleft{text-align:left}.textright{text-align:right}.clear{clear:both}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.screen-reader-shortcut{position:absolute;top:-1000em}.screen-reader-shortcut:focus{left:6px;top:-25px;height:auto;width:auto;display:block;font-size:14px;font-weight:600;padding:15px 23px 14px;background:#f1f1f1;color:#21759b;z-index:100000;line-height:normal;-webkit-box-shadow:0 0 2px 2px rgba(0,0,0,.6);box-shadow:0 0 2px 2px rgba(0,0,0,.6);text-decoration:none;outline:0}.hidden,.js .closed .inside,.js .hide-if-js,.no-js .hide-if-no-js,.js.wp-core-ui .hide-if-js,.js .wp-core-ui .hide-if-js,.no-js.wp-core-ui .hide-if-no-js,.no-js .wp-core-ui .hide-if-no-js{display:none}input,input[type=text],input[type=password],input[type=number],input[type=search],input[type=email],input[type=url],textarea{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{border-width:1px;border-style:solid;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;-webkit-box-sizing:border-box;box-sizing:border-box}td>input[type=checkbox],.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{border-radius:50%;margin-right:4px;line-height:10px}input[type=checkbox]:disabled,input[type=radio]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio]:disabled:checked:before{opacity:.7}input[type=checkbox]:checked:before,input[type=radio]:checked:before{float:left;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox]:checked:before{content:'\f147';margin:-3px 0 0 -4px}input[type=radio]:checked:before{content:'\2022';text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px}@-moz-document url-prefix(){input[type=checkbox],input[type=radio],.form-table input.tog{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password],.ie8 .login form .input{font-family:sans-serif}html,body{height:100%;margin:0;padding:0}body{font-family:"Open Sans",sans-serif;font-size:13px;line-height:1.4em;min-width:600px}body.iframe{min-width:0;padding-top:1px}body.login{background:#fbfbfb;min-width:0}iframe,img{border:0}td,textarea,input,select,button{font-family:inherit;font-size:inherit;font-weight:inherit}td,textarea{line-height:inherit}textarea{overflow:auto}textarea,input,select{font-size:14px;padding:3px 5px;line-height:15px;border-radius:0}textarea{padding:2px 6px;line-height:1.4}a,input[type=text],input[type=password],input[type=number],input[type=search],input[type=email],input[type=url],textarea,div,select{outline:0}.wp-admin input[type=file]{padding:3px 0}a:focus,a:active{outline:thin dotted}#adminmenu a:focus,#adminmenu a:active,.screen-reader-text:focus{outline:0}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}p,.wp_attachment_details label[for=content]{font-size:13px;line-height:1.5;margin:1em 0}blockquote{margin:1em}label{cursor:pointer}li,dd{margin-bottom:6px}input,select{margin:1px;padding:3px 5px}h1,h2,h3,h4,h5,h6{display:block;font-weight:600}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0;font-weight:400}h3{font-size:1.3em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}ul,ol{padding:0}ul{list-style:none}ol{list-style-type:decimal;margin-left:2em}ul.ul-disc{list-style:disc outside}ul.ul-square{list-style:square outside}ol.ol-decimal{list-style:decimal outside}ul.ul-disc,ul.ul-square,ol.ol-decimal{margin-left:1.8em}ul.ul-disc>li,ul.ul-square>li,ol.ol-decimal>li{margin:0 0 .5em}.code,code{font-family:Consolas,Monaco,monospace;direction:ltr}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}kbd,code{padding:3px 5px 2px;margin:0 1px;font-size:13px}.subsubsub{list-style:none;margin:8px 0 0;padding:0;font-size:13px;float:left}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#999;font-weight:400}.subsubsub a.current{font-weight:600;border:0}.subsubsub li{display:inline-block;margin:0;padding:0;white-space:nowrap}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],select,.tablenav-pages span.current,#titlediv #title,#postcustomstuff table,#postcustomstuff input,#postcustomstuff textarea,.imgedit-menu div,.plugin-update-tr .update-message,#poststuff .inside .the-tagcloud,.nav-menus-php .list-container,.menu-item-handle,.link-to-original,.nav-menus-php .major-publishing-actions .form-invalid,#TB_window,.tbtitle,.highlight{border-width:1px;border-style:solid}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat *{word-wrap:break-word}.widefat a{text-decoration:none}.widefat td,.widefat th{padding:8px 10px}.widefat tfoot th{border-bottom:0}.widefat .no-items td{border-bottom-width:0}.widefat td{vertical-align:top}.widefat td,.widefat td p,.widefat td ol,.widefat td ul{font-size:13px;line-height:1.5em}.widefat th{text-align:left;line-height:1.3em;font-size:14px}.widefat th input{margin:0 0 0 8px;padding:0;vertical-align:text-top}.widefat .check-column{width:2.2em;padding:6px 0 25px;vertical-align:top}.widefat th input[type=checkbox]{margin-top:-1px}.widefat tbody th.check-column{padding:9px 0 22px}.widefat.media .check-column{padding-top:8px}.widefat thead th.check-column,.widefat tbody th.check-column,.widefat tfoot th.check-column{padding:11px 0 0 3px}.widefat thead th.check-column{padding-top:10px}.plugins tbody th.check-column,.plugins tbody{padding:8px 0 0 2px}.plugins tbody th.check-column input[type=checkbox]{margin-top:4px}#update-plugins-table tbody td p{margin-top:0}#update-plugins-table tbody td p strong{font-size:14px}.plugins thead th.check-column,.plugins tfoot th.check-column,.plugins .inactive th.check-column{padding-left:6px}.upgrade .plugins td,.upgrade .plugins th{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.upgrade .plugins tr:last-of-type td,.upgrade .plugins tr:last-of-type th{-webkit-box-shadow:none;box-shadow:none}#update-plugins-table thead th.check-column,#update-plugins-table tfoot th.check-column{padding-top:11px}.update-php div.updated,.update-php div.error{margin-left:0}.no-js .widefat thead .check-column input,.no-js .widefat tfoot .check-column input{display:none}.widefat .num,.column-comments,.column-links,.column-posts{text-align:center}.widefat th#comments{vertical-align:middle}.wrap{margin:10px 20px 0 2px}div.updated,div.error{padding:0 .6em;margin:5px 15px 2px}div.updated p,div.error p{margin:.5em 0;padding:2px}.wrap div.updated,.wrap div.error,.media-upload-form div.error{margin:5px 0 15px}div.updated,.login .message,.press-this #message{border:0;padding:1px 12px}div.error,.login #login_error{border:0}div.error{padding:1px 12px}.wrap h2,.subtitle{font-weight:400;margin:0}.wrap h2{font-size:23px;font-weight:400;padding:9px 15px 4px 0;line-height:29px}.subtitle{font-size:14px;padding-left:25px}.wrap .add-new-h2,.wrap .add-new-h2:active{margin-left:4px;padding:4px 8px;position:relative;top:-3px;text-decoration:none;border:0;border-radius:2px;text-shadow:none;font-weight:600;font-size:13px}.wrap h2.long-header{padding-right:0}html,.wp-dialog{background-color:#fff}textarea,input[type=text],input[type=password],input[type=email],input[type=number],input[type=search],input[type=tel],input[type=url],select{background-color:#fff;color:#333}select[disabled]{color:#7f7f7f}select:focus{border-color:#aaa}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=url]:focus,input[type=checkbox]:focus,input[type=radio]:focus,select:focus,.widgets-chooser ul,#widgets-left .widget-in-question .widget-top,#available-widgets .widget-top:hover,div#widgets-right .widget-top:hover{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1)}input[readonly]{background-color:#eee}:-moz-placeholder,.wp-core-ui :-moz-placeholder{color:#a9a9a9}.widget .widget-top,.postbox h3,.stuffbox h3,.control-section .accordion-section-title,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small,.sidebar-name,#nav-menu-header,#nav-menu-footer,.menu-item-handle,.checkbox,.side-info,#your-profile #rich_editing,.widefat thead th,.widefat tfoot th{line-height:1.4em}.quicktags,.search{font-size:12px}.icon32{display:none}.icon16{height:18px;width:18px;padding:6px;margin:-6px 0 0 -8px;float:left}.icon16:before{font:400 20px/1 dashicons;speak:none;padding:6px 0;height:34px;width:20px;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.icon16.icon-dashboard:before,#adminmenu .menu-icon-dashboard div.wp-menu-image:before{content:'\f226'}.icon16.icon-post:before,#adminmenu .menu-icon-post div.wp-menu-image:before{content:'\f109'}.icon16.icon-media:before,#adminmenu .menu-icon-media div.wp-menu-image:before{content:'\f104'}.icon16.icon-links:before,#adminmenu .menu-icon-links div.wp-menu-image:before{content:'\f103'}.icon16.icon-page:before,#adminmenu .menu-icon-page div.wp-menu-image:before{content:'\f105'}.icon16.icon-comments:before,#adminmenu .menu-icon-comments div.wp-menu-image:before{content:'\f101';margin-top:1px}.icon16.icon-appearance:before,#adminmenu .menu-icon-appearance div.wp-menu-image:before{content:'\f100'}.icon16.icon-plugins:before,#adminmenu .menu-icon-plugins div.wp-menu-image:before{content:'\f106'}.icon16.icon-users:before,#adminmenu .menu-icon-users div.wp-menu-image:before{content:'\f110'}.icon16.icon-tools:before,#adminmenu .menu-icon-tools div.wp-menu-image:before{content:'\f107'}.icon16.icon-settings:before,#adminmenu .menu-icon-settings div.wp-menu-image:before{content:'\f108'}.icon16.icon-site:before,#adminmenu .menu-icon-site div.wp-menu-image:before{content:'\f112'}.icon16.icon-generic:before,#adminmenu .menu-icon-generic div.wp-menu-image:before{content:'\f111'}.icon16.icon-dashboard,.menu-icon-dashboard div.wp-menu-image,.icon16.icon-post,.menu-icon-post div.wp-menu-image,.icon16.icon-media,.menu-icon-media div.wp-menu-image,.icon16.icon-links,.menu-icon-links div.wp-menu-image,.icon16.icon-page,.menu-icon-page div.wp-menu-image,.icon16.icon-comments,.menu-icon-comments div.wp-menu-image,.icon16.icon-appearance,.menu-icon-appearance div.wp-menu-image,.icon16.icon-plugins,.menu-icon-plugins div.wp-menu-image,.icon16.icon-users,.menu-icon-users div.wp-menu-image,.icon16.icon-tools,.menu-icon-tools div.wp-menu-image,.icon16.icon-settings,.menu-icon-settings div.wp-menu-image,.icon16.icon-site,.menu-icon-site div.wp-menu-image,.icon16.icon-generic,.menu-icon-generic div.wp-menu-image{background-image:none!important}.key-labels label{line-height:24px}strong,b{font-weight:600}.pre{white-space:pre-wrap;word-wrap:break-word}.howto{font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}.no-break{white-space:nowrap}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}.wp-admin select{padding:2px;line-height:28px;height:28px;vertical-align:middle}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;-webkit-border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:left;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:0;text-align:right}table.form-table+p.submit,table.form-table+input+p.submit,table.form-table+input+input+p.submit{border-top:0;padding-top:0}table.widefat span.delete a:hover,table.widefat span.trash a:hover,table.widefat span.spam a:hover,#dashboard_recent_comments .delete a:hover,#dashboard_recent_comments .trash a:hover,#dashboard_recent_comments .spam a:hover,.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete:hover,#media-items a.delete:hover,#media-items a.delete-permanently:hover,#nav-menu-footer .menu-delete:hover{text-decoration:none;border:0}#minor-publishing-actions input,#major-publishing-actions input,#minor-publishing-actions .preview{text-align:center}textarea.all-options,input.all-options{width:250px}input.large-text,textarea.large-text{width:99%}input.regular-text,#adduser .form-field input{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}#doaction,#doaction2,#post-query-submit{margin:1px 8px 0 0}.tablenav #changeit,.tablenav #delete_all,.tablenav #clear-recent-list{margin-top:1px}.tablenav .actions select{float:left;margin-right:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-left:1em}label,#your-profile label+a{vertical-align:middle}fieldset label,#your-profile label+a{vertical-align:middle}.options-media-php label[for*="_size_"],#misc-publishing-actions label{vertical-align:baseline}#misc-publishing-actions label[for=post_status]:before{content:'\f173';display:inline-block;font:400 20px/1 dashicons;speak:none;left:-1px;padding:0 5px 0 0;position:relative;top:0;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass-strength-result{border-style:solid;border-width:1px;float:left;margin:13px 5px 5px 1px;padding:3px 5px;text-align:center;width:200px;display:none}.indicator-hint{padding-top:8px}p.search-box{float:right;margin:0}.network-admin.themes-php p.search-box{clear:left}.search-box input[name="s"],#search-plugins input[name="s"],.tagsdiv .newtag{float:left;height:28px;margin:0 4px 0 0}input[type=text].ui-autocomplete-loading{background:transparent url(../images/loading.gif) no-repeat right center;visibility:visible}ul#add-to-blog-users{margin:0 0 0 14px}.ui-autocomplete-input.open{border-bottom-right-radius:0;border-bottom-left-radius:0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-width:1px;border-style:solid}.ui-autocomplete li{margin-bottom:0;white-space:nowrap;text-align:left}.ui-autocomplete li a{display:block;height:100%;padding:4px 10px}.ui-autocomplete li a.ui-state-focus{cursor:pointer}#major-publishing-actions{padding:10px;clear:both;border-top:1px solid #ddd;background:#f5f5f5}#delete-action{line-height:28px;vertical-align:middle;text-align:left;float:left}#publishing-action{text-align:right;float:right;line-height:23px}#publishing-action .spinner{float:left}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px}.misc-pub-section:first-child{border-top-width:0}.misc-pub-section-last{border-bottom-width:0}#minor-publishing-actions{padding:10px 10px 0;text-align:right}#save-post{float:left}.preview{float:right}#sticky-span{margin-left:18px}.side-info{margin:0;padding:4px;font-size:11px}.side-info h5{padding-bottom:7px;font-size:14px;margin:12px 2px 5px;border-bottom-width:1px;border-bottom-style:solid}.side-info ul{margin:0;padding-left:18px;list-style:square}.approve,.unapproved .unapprove{display:none}.unapproved .approve,.spam .approve,.trash .approve{display:inline}td.action-links,th.action-links{text-align:right}#update-nag,.update-nag{display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:left;margin:25px 20px 0 2px}.plugins .plugin-update{padding:0}.plugin-update .update-message{margin:0 10px 8px 31px;font-weight:600}ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em 0}.update-php .spinner{float:none;margin:-4px 0}#ajax-loading,.ajax-loading,.ajax-feedback,.imgedit-wait-spin,.list-ajax-loading{visibility:hidden}#ajax-response.alignleft{margin-left:2em}#adminmenu a,#sidemenu a,#taglist a,#catlist a{text-decoration:none}#screen-options-wrap,#contextual-help-wrap{margin:0;padding:8px 20px 12px;position:relative}#contextual-help-wrap{overflow:auto;margin-left:0!important}#screen-meta .screen-reader-text{visibility:hidden}#screen-meta-links{margin:0 20px 0 0}#screen-meta-links a{padding:3px 6px 3px 16px}#screen-meta-links a:focus{outline:0}#screen-meta{display:none;margin:0 20px -1px 0;position:relative}#screen-options-link-wrap,#contextual-help-link-wrap{float:right;height:28px;margin:0 0 0 6px}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links a.show-settings{display:block;font-size:13px;height:22px;line-height:22px;text-decoration:none;z-index:1}#screen-meta-links a:after{right:0;content:'\f140';font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 5px 0 0;bottom:2px;position:relative;vertical-align:bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}#screen-meta-links a.screen-meta-active:after{content:'\f142'}#screen-meta-links a.show-settings:hover{text-decoration:none}.toggle-arrow{background-repeat:no-repeat;background-position:top left;background-color:transparent;height:22px;line-height:22px;display:block}.toggle-arrow-active{background-position:bottom left}#screen-options-wrap h5,#contextual-help-wrap h5{margin:8px 0;font-size:13px}.metabox-prefs label{display:inline-block;padding-right:15px;line-height:30px}.metabox-prefs label input[type=checkbox]{margin-top:-4px;margin-right:6px}.metabox-prefs label input{margin:0 5px 0 2px}.metabox-prefs .columns-prefs label input{margin:0 2px}.metabox-prefs label a{display:none}#contextual-help-wrap{padding:0}#contextual-help-columns{position:relative}#contextual-help-back{position:absolute;top:0;bottom:0;left:150px;right:170px;border-width:0 1px;border-style:solid}#contextual-help-wrap.no-sidebar #contextual-help-back{right:0;border-right-width:0;-webkit-border-bottom-right-radius:2px;border-bottom-right-radius:2px}.contextual-help-tabs{float:left;width:150px;margin:0}.contextual-help-tabs ul{margin:1em 0}.contextual-help-tabs li{margin-bottom:0;list-style-type:none;border-style:solid;border-width:0 0 0 2px;border-color:transparent}.contextual-help-tabs a{display:block;padding:5px 5px 5px 12px;line-height:18px;text-decoration:none;border-style:solid;border-width:1px 0;border-color:transparent}.contextual-help-tabs .active{padding:0;margin:0 -1px 0 0;border-width:0 0 0 2px;border-style:solid}.contextual-help-tabs-wrap{padding:0 20px;overflow:auto}.help-tab-content{display:none;margin:0 22px 12px 0;line-height:1.6em}.help-tab-content.active{display:block}.help-tab-content ul li{list-style-type:disc;margin-left:18px}.contextual-help-sidebar{width:150px;float:right;padding:0 8px 0 12px;overflow:auto}#adminmenuwrap{position:relative;float:left}#adminmenu *{-webkit-user-select:none;-moz-user-select:none;user-select:none}#adminmenu li{margin:0;padding:0;cursor:pointer}#adminmenu a{display:block;line-height:18px;padding:2px 5px}#adminmenu li.menu-top{border:0;min-height:34px;position:relative}#adminmenu .wp-submenu{list-style:none;position:absolute;top:-1000em;left:160px;overflow:visible;word-wrap:break-word}#adminmenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{padding:7px 0 8px;z-index:9999}.js #adminmenu .sub-open,.js #adminmenu .opensub .wp-submenu,#adminmenu a.menu-top:focus+.wp-submenu,.no-js li.wp-has-submenu:hover .wp-submenu{top:-1px}#adminmenu .wp-has-current-submenu .wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu{position:relative;z-index:3;top:auto;left:auto;right:auto;bottom:auto;border:0 none;margin-top:0;-webkit-box-shadow:none;box-shadow:none}.folded #adminmenu .wp-submenu.sub-open,.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.folded #adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu a.menu-top:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.no-js.folded #adminmenu .wp-has-submenu:hover .wp-submenu{top:0;left:36px}.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{position:absolute;top:-1000em}#adminmenu .wp-not-current-submenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{min-width:160px;width:auto}#adminmenu .wp-submenu a{font-size:13px;line-height:1.2;margin:0;padding:6px 0}#adminmenu .wp-not-current-submenu li>a,.folded #adminmenu .wp-has-current-submenu li>a{padding-right:16px;padding-left:14px;-moz-transition:all .1s ease-in-out;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#adminmenu .wp-has-current-submenu ul>li>a,.folded #adminmenu li.menu-top .wp-submenu>li>a{padding:6px 12px}#adminmenu a.menu-top,#adminmenu .wp-submenu-head{font-size:14px;font-weight:400;line-height:18px;padding:0}#adminmenu .wp-submenu-head,.folded #adminmenu .wp-menu-name{display:none}.folded #adminmenu .wp-submenu-head{display:block}#adminmenu .wp-submenu li{padding:0;margin:0;overflow:hidden}#adminmenu .wp-menu-image img{padding:9px 0 0;opacity:.6;filter:alpha(opacity=60)}#adminmenu div.wp-menu-name{padding:8px 0}#adminmenu div.wp-menu-image{float:left;width:36px;height:30px;margin:0;text-align:center}#adminmenu div.wp-menu-image.svg{background-repeat:no-repeat;background-position:center;background-size:20px auto}div.wp-menu-image:before{font:400 20px/1 dashicons!important;speak:none;color:#999;padding:8px 0;height:36px;width:20px;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-moz-transition:all .1s ease-in-out;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.folded #adminmenu div.wp-menu-image{width:35px;height:30px;position:absolute;z-index:25}.folded #adminmenu a.menu-top{height:34px}.no-font-face #adminmenu .wp-menu-image{display:none}.no-font-face #adminmenu div.wp-menu-name{padding:8px 12px}.no-font-face.auto-fold #adminmenu .wp-menu-name{margin-left:0}.sticky-menu #adminmenuwrap{position:fixed;z-index:99}.wp-menu-arrow{display:none!important}ul#adminmenu a.wp-has-current-submenu{position:relative}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{right:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-width:8px;top:50%;margin-top:-8px}.folded ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.folded ul#adminmenu a.wp-has-current-submenu:after,.folded ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{right:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-width:8px;top:10px;z-index:10000}.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:18px}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{position:relative}.folded #adminmenu li.menu-top:hover,.folded #adminmenu li.opensub>a.menu-top,.folded #adminmenu li>a.menu-top:focus{z-index:10000}#adminmenu li.menu-top:hover .wp-menu-image img,#adminmenu li.wp-has-current-submenu .wp-menu-image img{opacity:1;filter:alpha(opacity=100)}#adminmenu li.wp-menu-separator{height:3px;padding:0;margin:0 0 6px;border-width:1px 0;border-style:solid;cursor:inherit}#adminmenu div.separator{height:1px;padding:0;border-width:1px 0 0;border-style:solid}#adminmenu .wp-submenu .wp-submenu-head{font-weight:400;font-size:14px;padding:8px 4px 8px 11px;margin:-7px 0 4px}#adminmenu li.current,.folded #adminmenu li.wp-menu-open{border:0 none}#adminmenu .awaiting-mod,#adminmenu span.update-plugins,#sidemenu li a span.update-plugins{display:inline-block;font-size:9px;line-height:17px;font-weight:600;margin:1px 0 0 2px;vertical-align:top;-webkit-border-radius:10px;border-radius:10px;z-index:26}#adminmenu li .awaiting-mod span,#adminmenu li span.update-plugins span,#sidemenu li a span.update-plugins span{display:block;padding:0 6px}#adminmenu li span.count-0,#sidemenu li a .count-0{display:none}#adminmenu #collapse-menu{font-size:13px;line-height:34px;margin-top:10px}.folded #collapse-menu span{display:none}#collapse-button,#collapse-button div{width:15px;height:15px}#collapse-button{float:left;height:15px;margin:10px 8px 10px 11px;width:15px;-webkit-border-radius:10px;border-radius:10px}#wpwrap #collapse-button div{padding:0}#collapse-button div:after{content:'\f148';display:block;line-height:15px;left:-3px;top:-3px;font:400 20px/1 dashicons!important;speak:none;margin:0 auto;padding:0!important;position:relative;text-align:center;width:20px;-moz-transition:all .1s ease-in-out;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.folded #collapse-button div:after,.rtl #collapse-button div:after{-ms-transform:rotate(180deg);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rtl.folded #collapse-button div:after{-ms-transform:none;-webkit-transform:none;transform:none}@media only screen and (max-width:900px){.auto-fold #wpcontent,.auto-fold #wpfooter{margin-left:56px}.auto-fold #adminmenuback,.auto-fold #adminmenuwrap,.auto-fold #adminmenu,.auto-fold #adminmenu li.menu-top{width:36px}.auto-fold #adminmenu .wp-submenu.sub-open,.auto-fold #adminmenu .opensub .wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.auto-fold #adminmenu .wp-has-current-submenu.opensub .wp-submenu,.auto-fold #adminmenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu{top:0;left:36px}.auto-fold #adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu{position:absolute;top:-1000em;margin-right:-1px;padding:7px 0 8px;z-index:9999}.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu{min-width:150px;width:auto}.auto-fold #adminmenu .wp-has-current-submenu li>a{padding-right:16px;padding-left:14px}.auto-fold #adminmenu li.menu-top .wp-submenu>li>a{padding-left:12px}.auto-fold #adminmenu .wp-menu-name{display:none}.auto-fold #adminmenu .wp-submenu-head{display:block}.auto-fold #adminmenu div.wp-menu-image{height:30px;width:34px;position:absolute;z-index:25}.auto-fold #adminmenu a.menu-top{height:34px}.auto-fold #adminmenu li.wp-menu-open{border:0 none}.auto-fold #adminmenu .wp-has-current-submenu.menu-top-last{margin-bottom:0}.auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:16px}.auto-fold ul#adminmenu a.wp-has-current-submenu:after,.auto-fold ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}.auto-fold #adminmenu li.menu-top:hover,.auto-fold #adminmenu li.opensub>a.menu-top,.auto-fold #adminmenu li>a.menu-top:focus{z-index:10000}.auto-fold #collapse-menu span{display:none}.auto-fold #collapse-button div{background:0 0}.auto-fold #collapse-button div:after{-ms-transform:rotate(180deg);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rtl.auto-fold #collapse-button div:after{-ms-transform:none;-webkit-transform:none;transform:none}}.post-com-count-wrapper{min-width:22px}.post-com-count{background:0 0;height:1.3em;line-height:1.1em;display:block;text-decoration:none;padding:0 0 6px;cursor:pointer;background-position:center -80px;background-repeat:no-repeat}.post-com-count:after{content:"";display:block;width:0;height:0;margin-left:8px;border-top:5px solid #bbb;border-right:5px solid transparent}.post-com-count span{font-size:11px;font-weight:600;height:1.4em;line-height:1.4em;min-width:.7em;padding:0 6px;display:inline-block;-webkit-border-radius:5px;border-radius:5px}strong .post-com-count{background-position:center -55px}.post-com-count:hover{background-position:center -3px}.column-response .post-com-count{float:left;margin-right:5px;text-align:center}.response-links{float:left}#the-comment-list .attachment-80x60{padding:4px 8px}th .comment-grey-bubble{height:16px;width:16px}th .comment-grey-bubble:before{content:'\f101';font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;left:-4px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}html.wp-toolbar{padding-top:32px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.narrow{width:70%;margin-bottom:40px}.narrow p{line-height:150%}.widefat th,.widefat td{overflow:hidden}.widefat th{font-weight:400}.widefat td p{margin:2px 0 .8em}.widefat .column-comment p{margin:.6em 0}.postbox-container{float:left}#wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody-content #dashboard-widgets.columns-2 .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4{float:right;width:50.5%}#wpbody-content #dashboard-widgets.columns-3 .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4{float:right}#wpbody-content #dashboard-widgets.columns-4 .postbox-container{width:25%}.postbox-container .meta-box-sortables{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.metabox-holder .postbox-container .empty-container{border:3px dashed #bbb;height:250px}.metabox-holder.columns-1 .postbox-container .empty-container,.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}.ie8 #wpbody-content #dashboard-widgets .postbox-container{width:49.5%}.ie8 #wpbody-content #dashboard-widgets #postbox-container-2,.ie8 #wpbody-content #dashboard-widgets #postbox-container-3,.ie8 #wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}.ie8 #dashboard-widgets #postbox-container-3 .empty-container,.ie8 #dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}#poststuff{padding-top:10px;min-width:763px}#poststuff #post-body{padding:0}#post-body-content{width:100%;min-width:463px;float:left}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-right:300px}#post-body.columns-2 #postbox-container-1{float:right;margin-right:-300px;width:280px}#post-body.columns-2 #side-sortables{min-height:250px}#dashboard-widgets .postbox-container{width:25%}#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container{border:0!important}#dashboard-widgets-wrap{overflow:hidden}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}#wpbody-content .metabox-holder .postbox-container .empty-container{border:0 none;height:0;min-height:0}}@media only screen and (min-width:800px) and (max-width:1499px){#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}#wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container{border:0 none;height:0;min-height:0}.index-php .screen-layout,.index-php .columns-prefs{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}}@media only screen and (min-width:1500px) and (max-width:1800px){#wpbody-content #dashboard-widgets .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right}#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}}@media only screen and (max-width:850px){#poststuff{min-width:0}#wpbody-content #poststuff #post-body{margin:0}#wpbody-content #post-body.columns-2 #postbox-container-1{margin-right:0;width:100%}#poststuff #postbox-container-1 .empty-container,#poststuff #postbox-container-1 #side-sortables:empty{border:0 none;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0}.screen-layout,.columns-prefs{display:none}}.js .postbox .hndle{cursor:move}.hndle a{font-size:11px;font-weight:400}.postbox .handlediv{float:right;width:27px;height:30px}.js .postbox .handlediv{cursor:pointer}.sortable-placeholder{border-width:1px;border-style:dashed;margin-bottom:20px}.postbox,.stuffbox{margin-bottom:20px;padding:0;line-height:1}.postbox h3,.stuffbox h3{margin-top:1px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.js .widget .widget-top,.js .postbox h3{cursor:move}.postbox .inside,.stuffbox .inside{padding:0 12px 12px;line-height:1.4em;font-size:13px}.postbox .inside{margin:11px 0;position:relative}#dashboard-widgets .postbox .inside{margin-bottom:0}.postbox .inside>p:last-child,.rss-widget ul li:last-child{margin-bottom:1px!important}.postbox.closed h3{border:0;-webkit-box-shadow:none;box-shadow:none}.postbox table.form-table{margin-bottom:0}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 5px}#dashboard-widgets-wrap{margin:0 -8px}#wpbody-content .metabox-holder{padding-top:10px}#dashboard-widgets .meta-box-sortables{margin:0 8px;min-height:100px}#the-comment-list td.comment p.comment-author{margin-top:0;margin-left:0}#the-comment-list p.comment-author img{float:left;margin-right:8px}#the-comment-list p.comment-author strong a{border:0}#the-comment-list td{vertical-align:top}#the-comment-list td.comment{word-wrap:break-word}.welcome-panel{position:relative;overflow:auto;margin:16px 0;padding:23px 10px 0;font-size:13px;line-height:2.1em}.welcome-panel h3{margin:0;font-size:21px;font-weight:400;line-height:1.2}.welcome-panel h4{margin:1.33em 0 0;font-size:16px}.welcome-panel li{font-size:14px}.welcome-panel .about-description{font-size:16px;margin:0}.welcome-panel .welcome-panel-close{position:absolute;top:5px;right:10px;padding:20px 15px 0 3px;font-size:13px;text-decoration:none;line-height:1}#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before,#bulk-titles div a:before{content:'\f153';display:block!important;font:400 16px/1 dashicons;speak:none;height:20px;margin:2px 0;text-align:center;width:20px;-webkit-font-smoothing:antialiased!important}#welcome-panel.welcome-panel .welcome-panel-close::before{position:absolute;left:-18px;margin-top:-2px;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.wp-core-ui .welcome-panel .button.button-hero{margin:15px 0 3px}.welcome-panel-content{margin-left:13px;max-width:1500px}.welcome-panel .welcome-panel-column-container{clear:both;overflow:hidden;position:relative}.welcome-panel .welcome-panel-column{width:32%;min-width:200px;float:left}.ie8 .welcome-panel .welcome-panel-column{min-width:230px}.welcome-panel .welcome-panel-column:first-child{width:36%}.welcome-panel-column p.hide-if-no-customize{margin-top:10px}.welcome-panel-column p{margin-top:7px}.welcome-panel .welcome-icon{display:block;padding:0 0 8px;background:transparent!important}.welcome-panel .welcome-icon:before{font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 10px 0 0;top:-1px;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;vertical-align:top}.welcome-panel .welcome-write-blog:before,.welcome-panel .welcome-edit-page:before{content:'\f119';top:-3px}.welcome-panel .welcome-add-page:before{content:'\f132'}.welcome-panel .welcome-view-site:before{content:'\f115';top:-2px}.welcome-panel .welcome-widgets-menus:before{content:'\f116';top:-2px}.welcome-panel .welcome-comments:before{content:'\f117';top:-1px}.welcome-panel .welcome-learn-more:before{content:'\f118';top:-1px}.welcome-panel .welcome-widgets-menus{line-height:16px}.welcome-panel .welcome-panel-column ul{margin:.8em 1em 1em 0}.welcome-panel .welcome-panel-column li{line-height:16px;list-style-type:none}#dashboard_primary .inside{margin:0;padding:0}#dashboard_primary .widget-loading,#dashboard_primary .dashboard-widget-control-form{padding:12px 12px 0}body #dashboard-widgets .postbox form .submit{margin:0}.dashboard-widget-control-form{overflow:hidden}.dashboard-widget-control-form p{margin-top:0}.rssSummary{color:#777;margin-top:4px}#dashboard_primary .rss-widget{border-bottom:1px solid #eee;font-size:13px;padding:8px 12px 10px}#dashboard_primary .rss-widget:last-child{border-bottom:0;padding-bottom:8px}#dashboard_primary .rss-widget a{font-weight:400}#dashboard_primary .rss-widget span,#dashboard_primary .rss-widget span.rss-date{color:#777}#dashboard_primary .rss-widget span.rss-date{margin-left:12px}#dashboard_primary .rss-widget ul li{margin-bottom:8px}#dashboard_right_now ul{margin:0;overflow:hidden}#dashboard_right_now li{width:50%;float:left;margin-bottom:10px}#dashboard_right_now .inside{overflow:hidden;padding:0}#dashboard_right_now .main{padding:0 12px 11px}#dashboard_right_now .main p{margin:0}.mu-storage{overflow:hidden}#dashboard-widgets h4.mu-storage{margin-bottom:10px}#dashboard_right_now li a:before,#dashboard_right_now li span:before{color:#888}#dashboard_right_now .sub{color:#777;background:#f5f5f5;border-top:1px solid #eee;padding:10px 12px 6px}#dashboard_right_now .sub h4{color:#555}#dashboard_right_now .sub p{margin:0 0 1em}#dashboard_right_now .warning a:before,#dashboard_right_now .warning span:before{color:#d54e21}#dashboard_right_now li a:before,#dashboard_right_now li span:before{content:'\f159';font:400 20px/1 dashicons;speak:none;display:block;float:left;margin:0 5px 0 0;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_right_now .page-count a:before,#dashboard_right_now .page-count span:before{content:'\f105'}#dashboard_right_now .post-count a:before,#dashboard_right_now .post-count span:before{content:'\f109'}#dashboard_right_now .comment-count a:before{content:'\f101'}#dashboard_right_now .comment-mod-count a:before{content:'\f125'}#dashboard_right_now .storage-count a:before{content:'\f104'}#dashboard_right_now .storage-count.warning a:before{content:'\f153'}#dashboard_quick_press .inside{margin:0;padding:0}#dashboard_quick_press div.updated{margin-bottom:10px;border:1px solid #eee;border-width:1px 1px 1px 0}#dashboard_quick_press form{overflow:hidden;margin:12px}#dashboard_quick_press .drafts,#dashboard_quick_press .easy-blogging{padding:10px 0 0}input#save-post{float:left}form.initial-form.quickpress-open label.prompt{font-style:normal}form.initial-form.quickpress-open input#title{height:auto}#dashboard_quick_press input,#dashboard_quick_press textarea{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;margin:0}#dashboard_quick_press textarea{resize:vertical}#dashboard-widgets .postbox form .submit{margin:-39px 0;float:right}#description-wrap{margin-top:12px}#title-wrap #title-prompt-text,.textarea-wrap #content-prompt-text{color:#777}#title-wrap #title-prompt-text{font-size:1.1em;padding:7px 8px}.input-text-wrap,.textarea-wrap{position:relative}.input-text-wrap .prompt,.textarea-wrap .prompt{position:absolute}.textarea-wrap #content-prompt-text{font-size:1.1em;padding:7px 8px}.textarea-wrap textarea#content{margin:0 0 8px;padding:6px 7px}#quick-press textarea#content{min-height:90px;max-height:1300px;resize:none}.js #dashboard_quick_press .drafts{border-top:1px solid #eee}#dashboard_quick_press .drafts abbr{border:0}#dashboard_quick_press .drafts h4{margin:0 12px 8px;font-weight:400}#dashboard_quick_press .drafts .view-all{float:right;margin:0 12px 0 0}#dashboard_primary a.rsswidget{font-weight:400}#dashboard_quick_press .drafts ul{margin:0 12px}#dashboard_quick_press .drafts li{margin-bottom:1em}#dashboard_quick_press .drafts li time{color:#777}#dashboard_quick_press .drafts p{margin:0;word-wrap:break-word}#dashboard_quick_press .draft-title{overflow:hidden}#dashboard_quick_press .draft-title a,#dashboard_quick_press .draft-title time{float:left;margin:0 5px 0 0}#dashboard-widgets #dashboard_activity h4{margin:0 0 8px 12px;font-weight:400}#dashboard-widgets #dashboard_activity h4.comment-meta{margin:0}#dashboard_activity h4.comment-meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-bottom:4px}#dashboard_activity ul{padding:0 12px}#dashboard_activity .comment-meta span.approve:before{content:'\f227';font:20px/.5 dashicons;margin-left:12px;vertical-align:middle;position:relative;top:-1px;margin-right:2px}#dashboard_activity .inside{padding:0;margin:0}#dashboard_activity .no-activity{overflow:hidden;padding:0 12px 12px;text-align:center}#dashboard_activity .no-activity p{color:#999;font-size:16px}#dashboard_activity .no-activity .smiley{margin-top:0}#dashboard_activity .no-activity .smiley:before{content:'\f328';font:400 120px/1 dashicons;speak:none;display:block;margin:0 5px 0 0;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_activity .subsubsub{float:none;border-top:1px solid #eee;margin-top:0;padding:8px 12px 4px}#future-posts .show-more,#published-posts .show-more{float:right;margin-right:12px}#future-posts ul,#published-posts ul{clear:both;margin-bottom:0}#future-posts li,#published-posts li{overflow:hidden;margin-bottom:8px}#future-posts ul span,#published-posts ul span{color:#777;float:left;margin-right:8px;min-width:150px}.activity-block{border-bottom:1px solid #eee;overflow:hidden;padding:8px 0 4px}.activity-block:last-child{border-bottom:0}.activity-block .subsubsub li{color:#ddd}#activity-widget #the-comment-list tr.undo,#activity-widget #the-comment-list div.undo{background:0 0;padding:6px 0}#activity-widget #the-comment-list .alternate,#activity-widget #the-comment-list .alt{background:0 0}#activity-widget #the-comment-list .comment{background:#fafafa;padding:12px;position:relative}#activity-widget #the-comment-list img{position:absolute;left:13px;top:13px}#activity-widget #the-comment-list .dashboard-comment-wrap{padding-left:63px}#activity-widget #the-comment-list .dashboard-comment-wrap blockquote{margin:1em 0}#activity-widget #the-comment-list .comment-item h4{font-size:13px;color:#999}#activity-widget #the-comment-list .comment-item p.row-actions{margin:4px 0 0}#activity-widget #the-comment-list .comment-item:first-child{border-top:1px solid #eee}#activity-widget #the-comment-list .unapproved:before{content:"";display:block;position:absolute;left:0;top:0;bottom:0;background:#d54e21;width:4px}#activity-widget #the-comment-list .spam-undo-inside .avatar,#activity-widget #the-comment-list .trash-undo-inside .avatar{margin-right:20px;position:relative;top:0}#dashboard-widgets #dashboard_browser_nag.postbox .inside{margin:10px}@media screen and (max-width:870px){.welcome-panel .welcome-panel-column,.welcome-panel .welcome-panel-column:first-child{display:block;float:none;width:100%}.welcome-panel .welcome-panel-column li{display:inline-block;margin-right:13px}.welcome-panel .welcome-panel-column ul{margin:.4em 0 0}}table.fixed{table-layout:fixed}.fixed .column-rating,.fixed .column-visible{width:8%}.fixed .column-posts,.fixed .column-date,.fixed .column-parent,.fixed .column-links,.fixed .column-author,.fixed .column-format{width:10%}.fixed .column-comment .comment-author{display:none}.fixed .column-response,.fixed .column-categories,.fixed .column-tags,.fixed .column-rel,.fixed .column-role{width:15%}.fixed .column-slug{width:25%}.fixed .column-locations{width:35%}.fixed .column-comments{width:4em;padding:8px 0;text-align:left}.fixed .column-comments .vers{padding-left:3px}.fixed .column-comments a{float:left}.fixed .column-icon{width:80px}#comments-form .fixed .column-author{width:20%}#commentsdiv.postbox .inside{margin:0;padding:0}#commentsdiv .inside .row-actions{line-height:18px}#commentsdiv .inside .column-author{width:25%}#commentsdiv .column-comment p{margin:.6em 0;padding:0}#commentsdiv #replyrow td{padding:0}#commentsdiv p{padding:8px 10px;margin:0}#commentsdiv .comments-box{border:0 none}#commentsdiv .comments-box thead th{background:transparent;padding:0 7px 4px;font-style:italic}#commentsdiv .comments-box tr:last-child td{border-bottom:0 none}#commentsdiv .spinner{padding-left:5px}.sorting-indicator{display:none;width:10px;height:4px;margin-top:8px;margin-left:7px}.sorting-indicator:before{background:0 0;content:'\f142';font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0;top:-4px;left:-8px;color:#444;line-height:10px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.column-comments .sorting-indicator:before{top:0;left:-10px}th.sorted.asc .sorting-indicator:before,th.desc:hover span.sorting-indicator:before{content:'\f142'}th.sorted.desc .sorting-indicator:before,th.asc:hover span.sorting-indicator:before{content:'\f140'}tr.wp-locked .locked-indicator{background:url(../images/lock.png) no-repeat;margin:-2px 0 0 6px;height:20px;width:16px}tr.wp-locked .check-column label,tr.wp-locked .check-column input[type=checkbox],tr.wp-locked .row-actions .inline,tr.wp-locked .row-actions .trash{display:none}tr .locked-info{height:0;opacity:0}tr.wp-locked .locked-info{margin-top:8px;height:auto;opacity:1}.locked-text{vertical-align:top}tr.locked-info,tr.wp-locked .locked-info{-webkit-transition:height 1s,opacity 500ms;-moz-transition:height 1s,opacity 500ms;-ms-transition:height 1s,opacity 500ms;-o-transition:height 1s,opacity 500ms;transition:height 1s,opacity 500ms}.fixed .column-comments .sorting-indicator{margin-top:3px}#menu-locations-wrap .widefat{width:60%}.widefat th.sortable,.widefat th.sorted{padding:0}th.sortable a,th.sorted a{display:block;overflow:hidden;padding:7px 7px 8px 10px}.fixed .column-comments.sortable a,.fixed .column-comments.sorted a{padding:8px 0}th.sortable a span,th.sorted a span{float:left;cursor:pointer}th.sorted.asc .sorting-indicator,th.desc:hover span.sorting-indicator{display:block;background-position:0 0}th.sorted.desc .sorting-indicator,th.asc:hover span.sorting-indicator{display:block;background-position:-7px 0}.tablenav-pages a{font-weight:600;margin-right:1px;padding:0 2px}.tablenav-pages .current-page{padding-top:0;text-align:center}.tablenav-pages .next-page{margin-left:2px}.tablenav a.button-secondary{display:block;margin:3px 8px 0 0}.tablenav{clear:both;height:30px;margin:6px 0 4px;vertical-align:middle}.tablenav.themes{max-width:98%}.tablenav .tablenav-pages{float:right;display:block;cursor:default;height:30px;line-height:30px;font-size:12px}.tablenav .no-pages,.tablenav .one-page .pagination-links{display:none}.tablenav .tablenav-pages a,.tablenav-pages span.current{text-decoration:none;padding:3px 6px}.tablenav .tablenav-pages a{padding:0 10px 3px;font-size:16px;font-weight:400}.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:active{cursor:default}.tablenav .displaying-num{margin-right:2px;font-size:12px;font-style:italic}.tablenav .actions{overflow:hidden;padding:2px 8px 0 0}.tablenav .delete{margin-right:20px}.view-switch{float:right;margin:5px 16px 0 8px}.view-switch img{display:none}.view-switch a{text-decoration:none}.view-switch>a{display:inline-block;width:18px;height:18px}.view-switch>a:before{content:'\f163';display:inline-block;float:left;font:400 20px/1 dashicons;speak:none;vertical-align:middle;margin-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.view-switch>a+a:before{margin-left:5px;content:'\f164'}.filter{float:left;margin:-5px 0 0 10px}.filter .subsubsub{margin-left:-10px;margin-top:13px}.screen-per-page{width:4em}#posts-filter fieldset{float:left;margin:0 1.5ex 1em 0;padding:0}#posts-filter fieldset legend{padding:0 0 .2em 1px}#wpbody-content .inline-edit-row fieldset{font-size:12px;float:left;margin:0;padding:0;width:100%}tr.inline-edit-row td,#wpbody-content .inline-edit-row fieldset .inline-edit-col{padding:0 .5em}#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col{border-width:0 0 0 1px;border-style:none none none solid}#wpbody-content .quick-edit-row-post .inline-edit-col-left{width:40%}#wpbody-content .quick-edit-row-post .inline-edit-col-right{width:39%}#wpbody-content .inline-edit-row-post .inline-edit-col-center{width:20%}#wpbody-content .quick-edit-row-page .inline-edit-col-left{width:50%}#wpbody-content .quick-edit-row-page .inline-edit-col-right,#wpbody-content .bulk-edit-row-post .inline-edit-col-right{width:49%}#wpbody-content .bulk-edit-row .inline-edit-col-left{width:30%}#wpbody-content .bulk-edit-row-page .inline-edit-col-right{width:69%}#wpbody-content .bulk-edit-row .inline-edit-col-bottom{float:right;width:69%}#wpbody-content .inline-edit-row-page .inline-edit-col-right{margin-top:27px}.inline-edit-row fieldset .inline-edit-group{clear:both}.inline-edit-row fieldset .inline-edit-group:after{content:".";display:block;height:0;clear:both;visibility:hidden}.inline-edit-row p.submit{clear:both;padding:.5em;margin:.5em 0 0}.inline-edit-row span.error{line-height:22px;margin:0 15px;padding:3px 5px}.inline-edit-row h4{margin:.2em 0;padding:0;line-height:23px}.inline-edit-row fieldset span.title,.inline-edit-row fieldset span.checkbox-title{margin:0;padding:0;line-height:27px}.inline-edit-row fieldset label,.inline-edit-row fieldset span.inline-edit-categories-label{display:block;margin:.2em 0}.inline-edit-row fieldset label.inline-edit-tags{margin-top:0}.inline-edit-row fieldset label.inline-edit-tags span.title{margin:.2em 0;width:auto}.inline-edit-row fieldset label span.title{display:block;float:left;width:5em}.inline-edit-row fieldset label span.input-text-wrap{display:block;margin-left:5em}.quick-edit-row-post fieldset.inline-edit-col-right label span.title{width:auto;padding-right:.5em}.inline-edit-row .input-text-wrap input[type=text]{width:100%}.inline-edit-row fieldset label input[type=checkbox]{vertical-align:text-bottom}.inline-edit-row fieldset label textarea{width:100%;height:4em}#wpbody-content .bulk-edit-row fieldset .inline-edit-group label{max-width:50%}#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child{margin-right:.5em}.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input{width:6em}.inline-edit-save .spinner{padding:4px 10px 0;vertical-align:top;float:right}.inline-edit-row h4{text-transform:uppercase}.inline-edit-row fieldset span.title,.inline-edit-row fieldset span.checkbox-title{font-style:italic;line-height:1.8em}.inline-edit-row fieldset input[type=text],.inline-edit-row fieldset textarea{border-style:solid;border-width:1px}.inline-edit-row fieldset .inline-edit-date{float:left}.inline-edit-row fieldset input[name=jj],.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=mn]{font-size:12px;width:2.1em}.inline-edit-row fieldset input[name=aa]{font-size:12px;width:3.5em}.inline-edit-row fieldset label input.inline-edit-password-input{width:8em}ul.cat-checklist{height:12em;border-style:solid;border-width:1px;overflow-y:scroll;padding:0 5px;margin:0}#bulk-titles{display:block;height:12em;border-style:solid;border-width:1px;overflow-y:scroll;padding:0 5px;margin:0 0 5px}.inline-edit-row fieldset ul.cat-checklist li,.inline-edit-row fieldset ul.cat-checklist input{margin:0}.inline-edit-row fieldset ul.cat-checklist label,.inline-edit-row #bulk-titles div{font-style:normal;font-size:11px}.inline-edit-row fieldset label input.inline-edit-menu-order-input{width:3em}.inline-edit-row fieldset label input.inline-edit-slug-input{width:75%}.quick-edit-row-post fieldset label.inline-edit-status{float:left}#bulk-titles{line-height:140%}#bulk-titles div{margin:.2em .3em}#bulk-titles div a{cursor:pointer;display:block;float:left;height:18px;margin:0 3px 0 -2px;overflow:hidden;position:relative;width:20px}#bulk-titles div a:before{position:relative;top:-3px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments a,#show-comments .spinner{float:left}#lost-connection-notice .spinner{display:block;float:left;margin:0 5px 0 0}#titlediv{position:relative;margin-bottom:10px}#titlediv label{cursor:text}#titlediv div.inside{margin:0}#poststuff #titlewrap{border:0;padding:0}#titlediv #title{padding:3px 8px;font-size:1.7em;line-height:100%;height:1.7em;width:100%;outline:0;margin:0}#titlediv #title-prompt-text,#wp-fullscreen-title-prompt-text{color:#777;position:absolute;font-size:1.7em;padding:11px 10px}#wp-fullscreen-save .fs-saved{color:#999;float:right;margin-top:4px}#wp-fullscreen-title-prompt-text{padding:11px}#poststuff .inside-submitbox,#side-sortables .inside-submitbox{margin:0 3px;font-size:11px}input#link_description,input#link_url{width:98%}#pending{background:0 none;border:0 none;padding:0;font-size:11px;margin-top:-1px}#edit-slug-box{line-height:24px;min-height:25px;margin-top:5px;padding:0 10px}#edit-slug-box .cancel{margin-right:10px;font-size:11px}#editable-post-name-full{display:none}#editable-post-name input{font-size:13px;height:22px;margin:0;width:16em}.postarea h3 label{float:left}.submitbox .submit{text-align:left;padding:12px 10px 10px;font-size:11px}.submitbox .submitdelete{text-decoration:none;padding:1px 2px}.submitbox .submit a:hover{text-decoration:underline}.submitbox .submit input{margin-bottom:8px;margin-right:4px;padding:6px}.inside-submitbox #post_status{margin:2px 0 2px -2px}#post-status-select{margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{position:relative;min-width:255px}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:transparent none;border:0 none;float:right;padding:0 12px;margin:0}.category-add input[type=text],.category-add select{width:100%;max-width:260px;vertical-align:baseline}#side-sortables .category-add input[type=text],#side-sortables .category-add select{margin:0 0 1em}.press-this #side-sortables .category-tabs li,ul.category-tabs li,#side-sortables .add-menu-item-tabs li,.wp-tab-bar li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}.category-tabs a,#side-sortables .add-menu-item-tabs a,.wp-tab-bar a{text-decoration:none}.category-tabs{margin:8px 0 5px}#category-adder h4{margin:10px 0}#side-sortables .add-menu-item-tabs,.wp-tab-bar{margin-bottom:3px}#normal-sortables .postbox #replyrow .submit{float:none;margin:0;padding:0 7px 5px}#side-sortables .submitbox .submit input,#side-sortables .submitbox .submit .preview,#side-sortables .submitbox .submit a.preview:hover{border:0 none}#side-sortables .inside-submitbox .insidebox,.stuffbox .insidebox{margin:11px 0}ul.category-tabs,ul.add-menu-item-tabs,ul.wp-tab-bar{margin-top:12px}ul.category-tabs li{border-style:solid;border-width:1px;position:relative}ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-style:solid solid none;border-width:1px 1px 0}ul.add-menu-item-tabs li.tabs{padding-bottom:3px;position:relative}#post-body .add-menu-item-tabs li.tabs{border-style:solid none solid solid;border-width:1px 0 1px 1px;margin-right:-1px}ul.category-tabs li,ul.add-menu-item-tabs li,ul.wp-tab-bar li{padding:3px 5px 5px}#postimagediv .inside img{max-width:100%;height:auto}form#tags-filter{position:relative}td.post-title strong,td.plugin-title strong{display:block;margin-bottom:.2em;font-size:14px}td.post-title p,td.plugin-title p{margin:6px 0}.wp-hidden-children .wp-hidden-child,.ui-tabs-hide{display:none}.commentlist .avatar{vertical-align:text-top}#post-body .tagsdiv #newtag{margin-right:5px;width:16em}#side-sortables input#post_password{width:94%}#side-sortables .tagsdiv #newtag{width:68%}#post-status-info{width:100%}#post-status-info td{font-size:12px}.autosave-info{padding:2px 15px;text-align:right}#editorcontent #post-status-info{border:0}#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize.gif) no-repeat scroll right bottom;width:12px;height:12px;cursor:se-resize}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize-rtl.gif) no-repeat scroll right bottom}#post-body .wp_themeSkin .mceStatusbar a.mceResize{bottom:3px;position:absolute;right:3px}#post-body .postarea .wp_themeSkin .mceStatusbar a.mceResize{bottom:-20px}#content-resize-handle{position:absolute;right:3px;bottom:-20px}.press-this #content-resize-handle{bottom:2px}.tmce-active #content-resize-handle{display:none}#wp-word-count{display:block;padding:2px 10px}#timestampdiv select{height:21px;line-height:14px;padding:0;vertical-align:top;font-size:12px}#aa,#jj,#hh,#mn{padding:1px;font-size:12px}#jj,#hh,#mn{width:2em}#aa{width:3.4em}.curtime #timestamp{padding:2px 0 1px;display:inline!important;height:auto!important}#post-body #visibility:before,.curtime #timestamp:before,#post-body .misc-pub-revisions:before{font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 2px 0 0;top:0;left:-1px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}#post-body #visibility:before{content:'\f177'}.curtime #timestamp:before{content:'\f145';top:-1px}#post-body .misc-pub-revisions:before{content:'\f321'}#timestampdiv{padding-top:5px;line-height:23px}#timestampdiv p{margin:8px 0 6px}#timestampdiv input{border-width:1px;border-style:solid}.notification-dialog{position:fixed;top:30%;left:50%;width:450px;margin-left:-225px;background:#fff;line-height:1.5;z-index:1000005}.notification-dialog-background{position:fixed;top:0;left:0;right:0;bottom:0;background:#000;opacity:.5;filter:alpha(opacity=50);z-index:1000000}#post-lock-dialog .post-locked-message,#post-lock-dialog .post-taken-over{margin:25px}#post-lock-dialog .post-locked-message a.button{margin-right:10px}#post-lock-dialog .post-locked-avatar{float:left;margin:0 20px 20px 0}#post-lock-dialog .wp-tab-first{outline:0}#post-lock-dialog .locked-saving img{float:left;margin-right:3px}#post-lock-dialog.saving .locked-saving,#post-lock-dialog.saved .locked-saved{display:inline}#postcustomstuff thead th{padding:5px 8px 8px}#postcustom #postcustomstuff .submit{border:0 none;float:none;padding:0 8px 8px}#side-sortables #postcustom #postcustomstuff .submit{margin:0;padding:0}#side-sortables #postcustom #postcustomstuff #the-list textarea{height:85px}#side-sortables #postcustom #postcustomstuff td.left input,#side-sortables #postcustom #postcustomstuff td.left select,#side-sortables #postcustomstuff #newmetaleft a{margin:3px 3px 0}#postcustomstuff table{margin:0;width:100%;border-width:1px;border-style:solid;border-spacing:0}#postcustomstuff tr{vertical-align:top}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{width:96%;margin:8px}#side-sortables #postcustomstuff table input,#side-sortables #postcustomstuff table select,#side-sortables #postcustomstuff table textarea{margin:3px}#postcustomstuff th.left,#postcustomstuff td.left{width:38%}#postcustomstuff .submit input{margin:0;width:auto}#postcustomstuff #newmetaleft a{display:inline-block;margin:0 8px 8px;text-decoration:none}.no-js #postcustomstuff #enternew{display:none}#post-body-content .compat-attachment-fields{margin-bottom:20px}.compat-attachment-fields th{padding-top:5px;padding-right:10px}.revisions-control-frame,.revisions-diff-frame{position:relative}.revisions-controls{padding-top:40px;height:100px;z-index:1}.revisions-controls input[type=checkbox]{position:relative;top:-1px;vertical-align:text-bottom}.revisions.pinned .revisions-controls{position:fixed;top:0;height:82px}.revisions-tickmarks{position:relative;margin:0 auto;height:.7em;top:7px;max-width:70%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.revisions-tickmarks>div{position:absolute;height:100%;border-style:solid;border-width:0 1px 0 0;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.revisions-tickmarks>div:first-child{border-width:0}.comparing-two-revisions .revisions-controls{height:140px}.comparing-two-revisions.pinned .revisions-controls{height:124px}.revisions .diff-error{position:absolute;text-align:center;margin:0 auto;width:100%;display:none}.revisions.diff-error .diff-error{display:block}.revisions .loading-indicator{position:fixed;vertical-align:middle;opacity:0;width:100%;top:50%;margin-left:-90px;-webkit-transition:opacity .5s;-moz-transition:opacity .5s;-ms-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s;filter:alpha(opacity=0)}body.folded .revisions .loading-indicator{margin-left:-32px}.revisions .loading-indicator span.spinner{display:block;margin:0 auto;float:none}.revisions.loading .loading-indicator{opacity:1;filter:alpha(opacity=100)}.revisions .diff{-webkit-transition:opacity .5s;-moz-transition:opacity .5s;-ms-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s}.revisions.loading .diff{opacity:.5;filter:alpha(opacity=50)}.revisions.diff-error .diff{visibility:hidden}.revisions-meta{margin-top:20px}.revision-toggle-compare-mode{position:absolute;top:0;right:0}.comparing-two-revisions .revisions-previous,.comparing-two-revisions .revisions-next,.revisions-meta .diff-meta-to strong{display:none}.revisions-controls .author-card .date{color:#777}.revisions-controls .author-card.autosave{color:#d54e21}.revisions-controls .author-card .author-name{font-weight:700}.comparing-two-revisions .diff-meta-to strong{display:block}.revisions.pinned .revisions-buttons{padding:0 11px}.revisions-previous,.revisions-next{position:relative;z-index:1}.revisions-previous{float:left}.revisions-next{float:right}.revisions-controls .wp-slider{max-width:70%;margin:0 auto;top:-3px}.revisions-diff{padding:15px}.revisions-diff h3:first-child{margin-top:0}.post-revisions li img,#revisions-meta-restored img{vertical-align:middle}table.diff tbody tr td:nth-child(2){width:4%}table.diff{width:100%;white-space:pre-wrap}table.diff col.content{width:auto}table.diff col.content.diffsplit{width:48%}table.diff col.diffsplit.middle{width:auto}table.diff col.ltype{width:30px}table.diff tr{background-color:transparent}table.diff td,table.diff th{font-family:Consolas,Monaco,monospace;font-size:14px;line-height:1.618;padding:.5em}table.diff td h1,table.diff td h2,table.diff td h3,table.diff td h4,table.diff td h5,table.diff td h6{margin:0}table.diff .diff-deletedline del,table.diff .diff-addedline ins{text-decoration:none}.diff-meta{padding:5px;clear:both;min-height:32px}.diff-title strong{line-height:32px;min-width:60px;text-align:right;float:left;margin-right:5px}.revisions-controls .author-card .author-info{font-size:12px;line-height:16px}.revisions-controls .author-card .avatar,.revisions-controls .author-card .author-info{float:left;margin-left:6px;margin-right:6px}.revisions-controls .author-card .byline{display:block;font-size:12px}.revisions-controls .author-card .avatar{vertical-align:middle}.diff-meta input.restore-revision{float:right;margin-left:6px;margin-right:6px;margin-top:4px}.diff-meta-from{display:none}.comparing-two-revisions .diff-meta-from{display:block}.revisions-tooltip{position:absolute;bottom:105px;margin-right:0;margin-left:-69px;z-index:0;max-width:350px;min-width:130px;padding:8px 4px;display:none;opacity:0}.revisions-tooltip.flipped{margin-left:0;margin-right:-70px}.revisions.pinned .revisions-tooltip{display:none!important}.comparing-two-revisions .revisions-tooltip{bottom:145px}.revisions-tooltip-arrow{width:70px;height:15px;overflow:hidden;position:absolute;left:0;margin-left:35px;bottom:-15px}.revisions-tooltip.flipped .revisions-tooltip-arrow{margin-left:0;margin-right:35px;left:auto;right:0}.revisions-tooltip-arrow>span{content:"";position:absolute;left:20px;top:-20px;width:25px;height:25px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.revisions-tooltip.flipped .revisions-tooltip-arrow>span{left:auto;right:20px}.ie8 .revisions-tooltip-arrow>span{left:15px;top:-25px;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"}.ie8 .revisions-tooltip.flipped .revisions-tooltip-arrow>span{right:25px}.revisions-tooltip,.revisions-tooltip-arrow>span{border-width:1px;border-style:solid}.revisions-tooltip{display:none}.arrow{width:70px;height:16px;overflow:hidden;position:absolute;left:0;margin-left:-35px;bottom:90px;z-index:10000}.arrow::after{z-index:9999}.arrow.top{top:-16px;bottom:auto}.arrow.left{left:20%}.arrow:after{content:"";position:absolute;left:20px;top:-20px;width:25px;height:25px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.revisions-tooltip,.revisions-tooltip-arrow:after{border-width:1px;border-style:solid}div.revisions-controls>.wp-slider>.ui-slider-handle{margin-left:-10px}.rtl div.revisions-controls>.wp-slider>.ui-slider-handle{margin-right:-10px}.wp-slider.ui-slider{position:relative;border-width:1px;border-style:solid;text-align:left;cursor:pointer}.wp-slider .ui-slider-handle{border-radius:50%;height:18px;margin-top:-3px;outline:0;position:absolute;width:18px;z-index:2}.wp-slider .ui-slider-handle:before{background:0 0;position:absolute;top:0;left:0;content:"\f229";font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-slider .ui-slider-handle.from-handle:before,.wp-slider .ui-slider-handle.to-handle:before{font-size:20px!important;margin:-1px 0 0 -1px}.wp-slider .ui-slider-handle.from-handle:before{content:'\f139'}.wp-slider .ui-slider-handle.to-handle:before{content:'\f141'}.rtl .wp-slider .ui-slider-handle.from-handle:before{content:'\f141'}.rtl .wp-slider .ui-slider-handle.to-handle:before{content:'\f139';right:-1px}.wp-slider .ui-slider-range{position:absolute;font-size:.7em;display:block;border:0;background-color:transparent;background-image:none}.wp-slider.ui-slider-horizontal{height:.7em}.wp-slider.ui-slider-horizontal .ui-slider-handle{top:-.25em;margin-left:-.6em}.wp-slider.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.wp-slider.ui-slider-horizontal .ui-slider-range-min{left:0}.wp-slider.ui-slider-horizontal .ui-slider-range-max{right:0}#select-featured-image{padding:4px 0;overflow:hidden}#select-featured-image img{max-width:100%;height:auto;margin-bottom:10px}#select-featured-image a{float:left;clear:both}#select-featured-image .remove{display:none;margin-top:10px}.js #select-featured-image.has-featured-image .remove{display:inline-block}.no-js #select-featured-image .choose{display:none}.post-state-format{overflow:hidden;display:inline-block;vertical-align:middle;height:20px;width:20px;margin-right:5px;margin-top:-4px}.post-state-format:before{display:block;height:20px;width:20px;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#post-formats-select{line-height:2em}#post-formats-select .post-format-icon:before{top:5px}input.post-format{margin-top:1px}label.post-format-icon{margin-left:0;padding:2px 0}.post-format-icon:before{position:relative;display:inline-block;margin-right:7px;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-state-format.post-format-standard:before,.post-format-icon.post-format-standard:before,a.post-state-format.format-standard:before{content:'\f109'}.post-state-format.post-format-image:before,.post-format-icon.post-format-image:before,a.post-state-format.format-image:before{content:'\f128'}.post-state-format.post-format-gallery:before,.post-format-icon.post-format-gallery:before,a.post-state-format.format-gallery:before{content:'\f161'}.post-state-format.post-format-audio:before,.post-format-icon.post-format-audio:before,a.post-state-format.format-audio:before{content:'\f127'}.post-state-format.post-format-video:before,.post-format-icon.post-format-video:before,a.post-state-format.format-video:before{content:'\f126'}.post-state-format.post-format-chat:before,.post-format-icon.post-format-chat:before,a.post-state-format.format-chat:before{content:'\f125'}.post-state-format.post-format-status:before,.post-format-icon.post-format-status:before,a.post-state-format.format-status:before{content:'\f130'}.post-state-format.post-format-aside:before,.post-format-icon.post-format-aside:before,a.post-state-format.format-aside:before{content:'\f123'}.post-state-format.post-format-quote:before,.post-format-icon.post-format-quote:before,a.post-state-format.format-quote:before{content:'\f122'}.post-state-format.post-format-link:before,.post-format-icon.post-format-link:before,a.post-state-format.format-link:before{content:'\f103'}.category-adder{margin-left:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}#post-body ul.add-menu-item-tabs{float:left;width:120px;text-align:right;margin:0 -120px 0 5px;padding:0}ul.add-menu-item-tabs li{padding:3px 5px 3px 8px}#post-body ul.add-menu-item-tabs li.tabs{-webkit-border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-top-left-radius:3px;border-bottom-left-radius:3px}.wp-tab-panel,.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel{min-height:42px;max-height:200px;overflow:auto;padding:0 .9em;border-style:solid;border-width:1px}div.tabs-panel-active{display:block}div.tabs-panel-inactive{display:none}#front-page-warning,#front-static-pages ul,ul.export-filters,.inline-editor ul.cat-checklist ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul{margin-left:18px}ul.categorychecklist li{margin:0;padding:0;line-height:22px;word-wrap:break-word}.categorydiv .tabs-panel,.customlinkdiv .tabs-panel,.posttypediv .tabs-panel,.taxonomydiv .tabs-panel{border-width:3px;border-style:solid}.form-wrap p,.form-wrap label{font-size:11px}.form-wrap label{display:block;padding:2px;font-size:12px}.form-field input,.form-field textarea{border-style:solid;border-width:1px;width:95%}p.description,.form-wrap p{margin:2px 0 5px}p.help,p.description,span.description,.form-wrap p{font-size:13px;font-style:italic}.form-wrap .form-field{margin:0 0 10px;padding:8px 0}.form-wrap .form-field #parent{max-width:100%}.col-wrap h3{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}.tagsdiv{margin-top:-8px}#poststuff .taghint{color:#aaa;margin:15px 0 -24px 12px}#poststuff .tagsdiv .howto{margin:0 0 6px}.ajaxtag .newtag{position:relative}.tagsdiv .newtag{width:180px}.tagsdiv .the-tags{display:block;height:60px;margin:0 auto;overflow:auto;width:260px}#post-body-content .tagsdiv .the-tags{margin:0 5px}p.popular-tags{border:0;line-height:2em;max-width:1000px;padding:8px 12px 12px;text-align:justify}p.popular-tags a{padding:0 3px}.tagcloud{width:97%;margin:0 0 40px;text-align:justify}.tagcloud h3{margin:2px 0 12px}.ac_results{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;display:none;border-width:1px;border-style:solid}.wp-customizer .ac_results{z-index:500000}.ac_results li{padding:2px 5px;white-space:nowrap;text-align:left}.ac_over{cursor:pointer}.ac_match{text-decoration:underline}table.links-table{width:100%}.links-table th{font-weight:400;text-align:left;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table th,.links-table td{padding:5px 0}.links-table td label{margin-right:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}.media-item .describe{border-collapse:collapse;width:100%;border-top-style:solid;border-top-width:1px;clear:both;cursor:default}.media-item.media-blank .describe{border:0}.media-item .describe th{vertical-align:top;text-align:left;padding:5px 10px 10px;width:140px}.media-item .describe .align th{padding-top:0}.media-item .media-item-info tr{background-color:transparent}.media-item .describe td{padding:0 8px 8px 0;vertical-align:top}.media-item thead.media-item-info td{padding:4px 10px 0}.media-item .media-item-info .A1B1{padding:0 0 0 10px}.media-item td.savesend{padding-bottom:15px}.media-item .thumbnail{max-height:128px;max-width:128px}#wpbody-content #async-upload-wrap a{display:none}.media-upload-form{margin-top:20px}.media-upload-form td label{margin-right:6px;margin-left:2px}.media-upload-form .align .field label{display:inline;padding:0 0 0 23px;margin:0 1em 0 3px;font-weight:600}.media-upload-form tr.image-size label{margin:0 0 0 5px;font-weight:600}.media-upload-form th.label label{font-weight:600;margin:.5em;font-size:13px}.media-upload-form th.label label span{padding:0 5px}abbr.required{border:medium none;text-decoration:none}.media-item .describe input[type=text],.media-item .describe textarea{width:460px}.media-item .describe p.help{margin:0;padding:0 0 0 5px}.media-item .edit-attachment,.describe-toggle-on,.describe-toggle-off{display:block;line-height:36px;float:right}.media-item .describe-toggle-off,.media-item.open .describe-toggle-on{display:none}.media-item.open .describe-toggle-off{display:block}#media-items .media-item{border-bottom-style:solid;border-bottom-width:1px;min-height:36px;position:relative;width:100%}#media-items{width:623px}.media-new-php #media-items{margin:1em 0}#media-items:empty{border:0 none}.media-item .filename{line-height:36px;overflow:hidden}.media-item .error-div{padding-left:10px}.media-item .pinkynail{float:left;margin:2px 10px 0 0;max-width:40px;max-height:32px}.media-item .startopen,.media-item .startclosed{display:none}.media-item .original{position:relative;height:34px}.media-item .progress{float:right;height:22px;margin:7px 0 0;width:200px;line-height:2em;padding:0;overflow:hidden;margin-bottom:2px;border-radius:22px;background:#ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.media-item .bar{z-index:9;width:0;height:100%;margin-top:-22px;border-radius:22px;background-color:#0074a2;-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.3);box-shadow:inset 0 0 2px rgba(0,0,0,.3)}.media-item .progress .percent{z-index:10;position:relative;width:200px;padding:0;color:#fff;text-align:center;line-height:22px;font-weight:400;text-shadow:0 1px 2px rgba(0,0,0,.2)}.upload-php .fixed .column-parent{width:15%}.js .html-uploader #plupload-upload-ui{display:none}.js .html-uploader #html-upload-ui{display:block}.media-upload-form .media-item.error{margin:0;padding:0}.media-upload-form .media-item.error p,.media-item .error-div{line-height:16px;margin:5px 10px;padding:0}.media-item .error-div a.dismiss{display:block;float:right;margin:5px 4px 0 15px}.find-box{width:600px;height:300px;overflow:hidden;padding:33px 0 51px;position:absolute;z-index:1000}.find-box-head{cursor:move;font-weight:600;height:2em;line-height:2em;padding:1px 12px;position:absolute;top:5px;width:100%}.find-box-inside{overflow:auto;padding:6px;height:100%}.find-box-search{overflow:hidden;padding:9px;position:relative}.find-box-search .spinner{float:none;left:125px;position:absolute;top:9px}#find-posts-input{float:left;width:140px;height:24px}#find-posts-search{float:left;margin:1px 4px 0 3px}#find-posts-response{margin:8px 0;padding:0 1px 6px}#find-posts-response table{width:100%}#find-posts-response .found-radio{padding:3px 0 0 8px;width:15px}.find-box-buttons{padding:8px;overflow:hidden}.find-box #resize-se{position:absolute;right:1px;bottom:1px}.ui-find-overlay{position:absolute;top:0;left:0;background-color:#000;opacity:.6;filter:alpha(opacity=60)}ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em 0}#poststuff .inside .the-tagcloud{margin:5px 0 10px;padding:8px;border-width:1px;border-style:solid;line-height:1.8em;word-spacing:3px;-webkit-border-radius:6px;border-radius:6px}.drag-drop #drag-drop-area{border:4px dashed #bbb;height:200px}.drag-drop .drag-drop-inside{margin:70px auto 0;width:250px}.drag-drop-inside p{color:#aaa;font-size:14px;margin:5px 0;display:none}.drag-drop .drag-drop-inside p{text-align:center}.drag-drop-inside p.drag-drop-info{font-size:20px}.drag-drop .drag-drop-inside p,.drag-drop-inside p.drag-drop-buttons{display:block}.drag-drop.drag-over #drag-drop-area{border-color:#83b4d8}#plupload-upload-ui{position:relative}.wp_attachment_details #attachment_caption{height:4em}.describe .image-editor{vertical-align:top}.imgedit-wrap{position:relative}.imgedit-settings p{margin:8px 0}.post-php .imgedit-wrap table{width:100%}.describe .imgedit-wrap table td,.wp_attachment_holder .imgedit-wrap table td{vertical-align:top;padding-top:0}.describe .imgedit-wrap table td.imgedit-settings{padding:0 5px}.wp_attachment_holder .imgedit-wrap table td.imgedit-settings{width:250px}td.imgedit-settings input{margin-top:0;vertical-align:middle}.imgedit-wait{position:absolute;top:0;background:#fff url(../images/spinner.gif) no-repeat scroll 22px 10px;background-size:20px 20px;opacity:.7;filter:alpha(opacity=70);width:100%;height:500px;display:none}.spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;display:none;float:right;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:2px 5px 0}.no-float{float:none}.media-disabled,.imgedit-settings .disabled{color:grey}.wp_attachment_image,.A1B1{overflow:hidden}.wp_attachment_image .button,.A1B1 .button{float:left}.no-js .wp_attachment_image .button{display:none}.wp_attachment_image .spinner,.A1B1 .spinner{float:left;padding:0 0 4px;vertical-align:bottom}.imgedit-menu{margin:0 0 12px;min-width:300px}.imgedit-menu div{float:left;width:32px;background:0 0;margin:0 8px 0 0;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;line-height:28px}.imgedit-menu div:before{font:400 20px/1 dashicons;speak:none;vertical-align:middle}.imgedit-crop:before{content:'\f165'}.imgedit-rleft:before{content:'\f166'}.imgedit-rright:before{content:'\f167'}.imgedit-flipv:before{content:'\f168'}.imgedit-fliph:before{content:'\f169'}.imgedit-undo:before{content:'\f171'}.imgedit-redo:before{content:'\f172'}.imgedit-crop-wrap{position:relative}.imgedit-crop{margin:0 8px 0 0}.imgedit-rleft{margin:0 3px}.imgedit-rright{margin:0 8px 0 3px}.imgedit-flipv{margin:0 3px}.imgedit-fliph{margin:0 8px 0 3px}.imgedit-undo{margin:0 3px}.imgedit-redo{margin:0 8px 0 3px}.imgedit-applyto img{margin:0 8px 0 0}.imgedit-group-top{margin:5px 0}.imgedit-applyto .imgedit-label{padding:2px 0 0;display:block}.imgedit-help{display:none;font-style:italic;margin-bottom:8px}a.imgedit-help-toggle{text-decoration:none}.form-table td.imgedit-response{padding:0}.imgedit-submit{margin:8px 0}.imgedit-submit-btn{margin-left:20px}.imgedit-wrap .nowrap{white-space:nowrap}span.imgedit-scale-warn{color:red;font-size:20px;font-style:normal;visibility:hidden;vertical-align:middle}.imgedit-group{margin-bottom:8px;padding:2px 10px}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table th,.form-table td p,.form-wrap label{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:left;padding:20px 10px 20px 0;width:200px;line-height:1.3;font-weight:600}.form-table th.th-full{width:auto;font-weight:400}.form-table input.tog{margin-top:2px;margin-right:2px;float:left}.form-table td p{margin-top:4px;margin-bottom:0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset p,.form-table td fieldset li{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-right:4px;float:none}.commentlist li{padding:1em 1em .2em;margin:0;border-bottom-width:1px;border-bottom-style:solid}.commentlist li li{border-bottom:0;padding:0}.commentlist p{padding:0;margin:0 0 .8em}#replyrow input{border-width:1px;border-style:solid}#replyrow td{padding:2px}#replysubmit{margin:0;padding:0 5px 3px;text-align:center}#replysubmit .spinner{padding:2px 0 0;vertical-align:top;float:right}#replysubmit .button{margin-right:5px}#replysubmit .error{color:red;line-height:21px;text-align:center}#replyrow h5{margin:.2em 0 0;padding:0 5px;line-height:1.4em;font-size:1em}#edithead .inside{float:left;padding:3px 0 2px 5px;margin:0;text-align:center}#edithead .inside input{width:180px}#edithead label{padding:2px 0}#replycontainer{padding:5px}#replycontent{height:120px;-webkit-box-shadow:none;box-shadow:none}.comment-php .wp-editor-area{height:200px}.comment-ays{margin-bottom:0;border-bottom-style:solid;border-bottom-width:1px}.comment-ays .alt{background-color:transparent}.trash-undo-inside,.spam-undo-inside{margin:1px 8px 1px 0;line-height:16px}.spam-undo-inside .avatar,.trash-undo-inside .avatar{height:20px;width:20px;margin-right:8px;vertical-align:middle}.stuffbox .editcomment{clear:none}#comment-status-radio p{margin:3px 0 5px}#comment-status-radio input{margin:2px 3px 5px 0;vertical-align:middle}#comment-status-radio label{padding:5px 0}.commentlist .avatar{vertical-align:text-top}#the-comment-list .unapproved th.check-column input{margin-left:4px}.theme-browser .themes{clear:both;padding:0 0 100px}.themes-php .wrap h2{float:left;margin-bottom:15px}.network-admin.themes-php .wrap h2{margin-bottom:0}.themes-php .wrap h2 .button{margin-left:20px}.themes-php .wrap .theme-count{color:#fff;border-radius:30px;background:#777;font-size:14px;padding:4px 10px;font-weight:600;margin-left:5px;margin-right:20px;position:relative;top:-3px}.themes-php div.updated,.themes-php div.error{margin:0 0 20px;clear:both}.themes-php div.updated a{text-decoration:underline}.theme-browser .theme{cursor:pointer;float:left;margin:0 4% 4% 0;position:relative;width:30.6%;border:1px solid #dedede;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ie8 .theme-browser .theme{width:30%;margin:0 3% 4% 0}.theme-browser .theme:nth-child(3n){margin-right:0}.theme-browser .theme:hover,.theme-browser .theme:focus{cursor:pointer}.theme-browser .theme .theme-name{font-size:15px;font-weight:600;margin:0;padding:15px;-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;background:#fff;background:rgba(255,255,255,.65)}.theme-browser .theme .theme-actions{-ms-filter:"alpha(Opacity=0)";opacity:0;-webkit-transition:opacity .1s ease-in-out;transition:opacity .1s ease-in-out;position:absolute;bottom:0;right:0;height:38px;padding:9px 10px 0;background:rgba(244,244,244,.7);border-left:1px solid rgba(0,0,0,.05)}.theme-browser .theme:hover .theme-actions{-ms-filter:"alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-actions .button-primary{margin-right:3px}.theme-browser .theme .theme-actions .button-secondary{float:none;margin-left:3px}.theme-browser .theme .theme-screenshot{display:block;overflow:hidden;position:relative;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.theme-browser .theme .theme-screenshot:after{content:'';display:block;padding-top:66.66666%}.theme-browser .theme .theme-screenshot img{height:auto;position:absolute;left:0;top:0;width:100%;-webkit-transform:translateZ(0);-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.theme-browser .theme:hover .theme-screenshot{background:#fff}.theme-browser.rendered .theme:hover .theme-screenshot img{opacity:.4}.theme-browser .theme .more-details{-ms-filter:"alpha(Opacity=0)";opacity:0;position:absolute;top:35%;right:25%;left:25%;background:#222;background:rgba(0,0,0,.7);color:#fff;font-size:15px;text-shadow:0 1px 0 rgba(0,0,0,.6);-webkit-font-smoothing:antialiased;font-weight:600;padding:15px 12px;text-align:center;border-radius:3px;-webkit-transition:opacity .1s ease-in-out;transition:opacity .1s ease-in-out}.theme-browser .theme:focus{outline:1px dotted #222}.theme-browser .theme:focus .theme-actions{display:none}.theme-browser .theme:focus:hover .theme-actions{display:block}.theme-browser .theme:focus .more-details{opacity:1}.theme-browser .theme.active:focus .theme-actions{display:block}.theme-browser.rendered .theme:hover .more-details{-ms-filter:"alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-update{background:#d54e21;background:rgba(213,78,33,.95);color:#fff;display:block;font-size:13px;font-weight:400;height:48px;line-height:48px;padding:0 10px;position:absolute;top:0;right:0;left:0;border-bottom:1px solid rgba(0,0,0,.25);overflow:hidden}.theme-browser .theme .theme-update:before{content:'\f463';display:inline-block;font:400 20px/1 dashicons;margin:0 6px 0 0;opacity:.8;position:relative;top:5px;speak:none;-webkit-font-smoothing:antialiased}.theme-browser .theme.active .theme-name{background:#2f2f2f;color:#fff;padding-right:110px;font-weight:300;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.5);box-shadow:inset 0 1px 1px rgba(0,0,0,.5)}.theme-browser .theme.active .theme-name span{font-weight:600}.theme-browser .theme.active .theme-actions{background:rgba(49,49,49,.7);border-left:0;opacity:1}.theme-browser .theme.active .theme-actions .button-primary{margin-right:0}.theme-browser .theme .theme-author{background:#222;color:#eee;display:none;font-size:14px;margin:0 10px;padding:5px 10px;position:absolute;bottom:56px}.theme-browser .theme.display-author .theme-author{display:block}.theme-browser .theme.display-author .theme-author a{color:inherit;text-decoration:none}.theme-browser .theme.add-new-theme{border:0;box-shadow:none}.theme-browser .theme.add-new-theme a{color:#999;text-decoration:none;display:block;position:relative;z-index:1}.theme-browser .theme.add-new-theme:after{display:block;content:'';-ms-filter:"alpha(Opacity=100)";opacity:1;background:transparent;background:rgba(0,0,0,0);position:absolute;top:0;left:0;right:0;bottom:0;padding:10% 0 0;text-shadow:none;border:5px dashed #d5d2ca;border:5px dashed rgba(0,0,0,.1);-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.theme-browser .theme.add-new-theme span:after{background:#e5e5e5;background:rgba(153,153,153,.1);border-radius:50%;display:inline-block;content:'\f132';-webkit-font-smoothing:antialiased;font:400 74px/115px dashicons;width:100px;height:100px;vertical-align:middle;text-align:center;color:#999;position:absolute;top:30%;left:50%;margin-left:-50px;text-indent:-4px;padding:0;text-shadow:none;z-index:4}.rtl .theme-browser .theme.add-new-theme span:after{text-indent:4px}.theme-browser .theme.add-new-theme:hover .theme-screenshot{background:0 0}.theme-browser .theme.add-new-theme:hover span:after{background:#fff;color:#0074a2}.theme-browser .theme.add-new-theme:hover:after{border-color:transparent;color:#fff;background:#0074a2;content:''}.theme-browser .theme.add-new-theme .theme-name{background:0 0;text-align:center;box-shadow:none;font-weight:400;position:relative;top:0;margin-top:-10%;margin-bottom:10%}.theme-browser .theme.add-new-theme:hover .theme-name{color:#fff;z-index:2}.themes-php .theme-search{position:relative;top:-2px;left:20px;font-size:16px;font-weight:300;line-height:1.5;width:280px}.theme-overlay .theme-backdrop{position:absolute;left:-20px;right:0;top:0;bottom:0;background:#f1f1f1;background:rgba(238,238,238,.9);z-index:10}body.theme-overlay-open{overflow:hidden}.theme-overlay .theme-header{position:absolute;top:0;left:0;right:0;height:48px;border-bottom:1px solid #ddd}.theme-overlay .theme-header .close{cursor:pointer;height:48px;width:50px;text-align:center;float:right;border:0;border-left:1px solid #ddd;background-color:transparent}.theme-overlay .theme-header .close:hover:before,.theme-overlay .theme-header .close:focus:before{color:#fff}.theme-overlay .theme-header .close:before{font:400 30px/50px dashicons!important;color:#777;display:inline-block;content:'\f335';font-weight:300}.theme-overlay .theme-header .right,.theme-overlay .theme-header .left{cursor:pointer;color:#777;background-color:transparent;height:48px;width:54px;float:left;text-align:center;border:0;border-right:1px solid #ddd}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .right:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .close:focus,.theme-overlay .theme-header .right:focus,.theme-overlay .theme-header .left:focus{background:#0074a2;color:#fff}.theme-overlay .theme-header .left.disabled,.theme-overlay .theme-header .right.disabled,.theme-overlay .theme-header .left.disabled:hover,.theme-overlay .theme-header .right.disabled:hover{color:#ccc;background:inherit;cursor:inherit}.theme-overlay .theme-header .right:before,.theme-overlay .theme-header .left:before{font:400 20px/50px dashicons!important;display:inline;font-weight:300}.theme-overlay .theme-header .left:before{content:'\f340'}.theme-overlay .theme-header .right:before{content:'\f344'}.rtl .theme-overlay .theme-header .left:before{content:'\f345'}.rtl .theme-overlay .theme-header .right:before{content:'\f341'}.theme-overlay .theme-wrap{clear:both;position:fixed;top:9%;left:190px;right:30px;bottom:3%;background:#fff;-webkit-box-shadow:0 1px 20px 5px rgba(0,0,0,.1);box-shadow:0 1px 20px 5px rgba(0,0,0,.1);z-index:20;box-sizing:border-box}.theme-overlay .theme-wrap:after{content:".";display:block;height:0;clear:both;visibility:hidden}body.folded .theme-overlay .theme-wrap{left:70px}.theme-overlay .theme-about{position:absolute;top:49px;bottom:57px;left:0;right:0;overflow:auto;padding:2% 4%}.theme-overlay .theme-about:after{content:".";display:block;height:0;clear:both;visibility:hidden}.theme-overlay .theme-actions{position:absolute;text-align:center;bottom:0;left:0;right:0;padding:10px 25px 5px;background:#f3f3f3;z-index:30;box-sizing:border-box;border-top:1px solid #eee}.ie8 .theme-overlay .theme-actions{border:1px solid #eee}.theme-overlay .theme-actions a{margin-right:5px;margin-bottom:5px}.theme-overlay .theme-actions .delete-theme{color:#a00;position:absolute;right:10px;bottom:5px;text-decoration:none;border-color:transparent;box-shadow:none;background:transparent}.theme-overlay .theme-actions .delete-theme:hover,.theme-overlay .theme-actions .delete-theme:focus{background:#d54e21;color:#fff;border-color:#d54e21}.theme-overlay .theme-actions .active-theme,.theme-overlay.active .theme-actions .inactive-theme{display:none}.theme-overlay .theme-actions .inactive-theme,.theme-overlay.active .theme-actions .active-theme{display:block}.theme-overlay .theme-screenshots{float:left;margin:0 30px 0 0;width:55%;max-width:880px;text-align:center}.theme-overlay .screenshot{border:1px solid #fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden;position:relative;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2);box-shadow:0 0 0 1px rgba(0,0,0,.2)}.theme-overlay .screenshot:after{content:'';display:block;padding-top:75%}.theme-overlay .screenshot img{height:auto;position:absolute;left:0;top:0;width:100%}.theme-overlay.small-screenshot .theme-screenshots{position:absolute;width:302px}.theme-overlay.small-screenshot .theme-info{margin-left:350px;width:auto}.theme-overlay .screenshot.thumb{background:#ccc;border:1px solid #eee;float:none;display:inline-block;margin:10px 5px 0;width:140px;height:80px;cursor:pointer}.theme-overlay .screenshot.thumb:after{content:'';display:block;padding-top:100%}.theme-overlay .screenshot.thumb img{cursor:pointer;height:auto;position:absolute;left:0;top:0;width:100%;height:auto}.theme-overlay .screenshot.selected{background:transparent;border:2px solid #2ea2cc}.theme-overlay .screenshot.selected img{opacity:.8}.theme-browser .theme .theme-screenshot.blank,.theme-overlay .screenshot.blank{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYGWO8d+/efwYkoKioiMRjYGBC4WHhUK6A8T8QIJt8//59ZC493AAAQssKpBK4F5AAAAAASUVORK5CYII=)}.theme-overlay .theme-info{width:40%;float:left}.theme-overlay .current-label{background:#333;color:#fff;font-size:11px;display:inline-block;padding:2px 8px;border-radius:2px;margin:0 0 -10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme-overlay .theme-name{color:#222;font-size:32px;font-weight:100;margin:10px 0 0;line-height:1.3}.theme-overlay .theme-version{color:#999;font-size:13px;font-weight:400;float:none;display:inline-block;margin-left:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme-overlay .theme-author{color:#686868;font-size:16px;font-weight:400;margin:15px 0 25px}.theme-overlay .theme-author a{text-decoration:none}.theme-overlay .theme-description{color:#555;font-size:15px;font-weight:400;line-height:1.5;margin:30px 0 0}.theme-overlay .theme-tags{border-top:3px solid #eee;color:#888;font-size:13px;font-weight:400;margin:30px 0 0;padding-top:20px}.theme-overlay .theme-tags span{color:#444;font-weight:700;margin-right:5px}.theme-overlay .theme-update-message{background:#fefaf7;border:1px solid #eee;border-left:4px solid #d54e21;border-radius:3px;padding:5px 20px 10px}.theme-overlay .theme-update{color:#222;font-size:18px;display:inline-block;line-height:40px;margin:0}.theme-overlay .parent-theme{background:#f7fcfe;border:1px solid #eee;border-left:4px solid #2ea2cc;font-size:14px;font-weight:400;margin-top:30px;padding:10px 10px 10px 20px}.theme-overlay .parent-theme strong{font-weight:700}.single-theme .theme-overlay .theme-backdrop,.single-theme .theme-overlay .theme-header,.single-theme .theme{display:none}.single-theme .theme-overlay .theme-wrap{clear:both;min-height:330px;position:relative;left:auto;right:auto;top:auto;bottom:auto}.single-theme .theme-overlay .theme-about{padding:30px 30px 70px;position:static}.single-theme .theme-overlay .theme-actions{position:absolute}@media only screen and (min-width:2000px){#wpwrap .theme-browser .theme{width:17.6%;margin:0 3% 3% 0}#wpwrap .theme-browser .theme:nth-child(3n),#wpwrap .theme-browser .theme:nth-child(4n){margin-right:3%}#wpwrap .theme-browser .theme:nth-child(5n){margin-right:0}}@media only screen and (min-width:1680px){.theme-overlay .theme-wrap{width:1450px;margin:0 auto}}@media only screen and (min-width:1640px){.theme-browser .theme{width:22.7%;margin:0 3% 3% 0}.theme-browser .theme .theme-screenshot:after{padding-top:75%}.theme-browser .theme:nth-child(3n){margin-right:3%}.theme-browser .theme:nth-child(4n){margin-right:0}}@media only screen and (max-width:1120px){.theme-browser .theme{width:47.5%;margin-right:0}.theme-browser .theme:nth-child(even){margin-right:0}.theme-browser .theme:nth-child(odd){margin-right:5%}}@media only screen and (max-width:900px){.theme-overlay .theme-wrap{left:65px}}@media only screen and (max-width:780px){body.folded .theme-overlay .theme-wrap,.theme-overlay .theme-wrap{top:0;right:0;bottom:0;left:0;padding:70px 20px 20px;border:0;z-index:500;position:fixed}.theme-browser .theme.active .theme-name span{display:none}.theme-overlay .theme-screenshots{width:40%}.theme-overlay .theme-info{width:50%}.single-theme .theme-wrap{padding:10px}.theme-browser .theme .theme-actions{padding:5px 10px 4px}.theme-overlay.small-screenshot .theme-screenshots{position:static;float:none;max-width:302px}.theme-overlay.small-screenshot .theme-info{margin-left:0;width:auto}.theme:not(.active):hover .theme-actions,.theme:hover .more-details{display:none}.theme-browser.rendered .theme:hover .theme-screenshot img{opacity:1}}@media only screen and (max-width:480px){.theme-browser .theme{width:100%;margin-right:0}.theme-browser .theme:nth-child(2n),.theme-browser .theme:nth-child(3n){margin-right:0}}@media only screen and (max-width:650px){.theme-overlay .theme-update,.theme-overlay .theme-description{margin-left:0}.theme-overlay .theme-actions .delete-theme{position:relative;right:auto;bottom:auto}.theme-overlay .theme-actions .inactive-theme{display:inline}.theme-overlay .theme-screenshots{width:100%;float:none}.theme-overlay .theme-info{width:100%}.theme-overlay .theme-author{margin:5px 0 15px}.theme-overlay .current-label{margin-top:10px;font-size:13px}.themes-php .wrap h2{width:100%}.themes-php .theme-search{float:none;clear:both;left:0;top:0;right:0;margin:10px 0;width:100%}.theme-browser .theme.add-new-theme span:after{font:400 60px/90px dashicons;width:80px;height:80px;top:30%;left:50%;text-indent:0;margin-left:-40px}.single-theme .theme-wrap{margin:0 -12px 0 -10px;padding:10px}.single-theme .theme-overlay .theme-about{padding:10px;overflow:visible}.single-theme .current-label{display:none}.single-theme .theme-overlay .theme-actions{position:static}}.broken-themes{clear:both}.broken-themes table{text-align:left;width:50%;border-spacing:3px;padding:3px}.theme-install-php h4{margin:2.5em 0 8px}.theme-install-php .tablenav{height:auto}.theme-install-php .spinner{margin-top:9px}.available-theme{display:inline-block;margin-right:10px;overflow:hidden;padding:20px 20px 20px 0;vertical-align:top;width:300px}.available-theme .screenshot{width:300px;height:225px;display:block;border-width:1px;border-style:solid;margin-bottom:10px;overflow:hidden}.available-theme img{width:300px}.available-theme h3{margin:15px 0 0}.available-theme .theme-author{line-height:18px}.available-theme .action-links{margin-top:10px;overflow:hidden}.available-theme a.screenshot:focus{border-color:#777}.available-theme .action-links li{float:left;padding-right:10px;margin-right:10px;border-right:1px solid #dfdfdf}.available-theme .action-links li{padding-right:8px;margin-right:8px}.ie8 .available-theme .action-links li{padding-right:7px;margin-right:7px}.available-theme .action-links li:last-child{padding-right:0;margin-right:0;border-right:0}.available-theme .action-links .delete-theme{float:right;margin-left:8px;margin-right:0}.available-theme .action-links .delete-theme a{color:red;padding:2px}.available-theme .action-links .delete-theme a:hover{background:red;color:#fff;text-decoration:none}.available-theme .action-links p{float:left}@media only screen and (max-width:1200px){.folded .available-theme,.folded .available-theme .screenshot{width:300px}.folded .available-theme .screenshot{height:225px}}@media only screen and (max-width:1079px){.folded .available-theme,.folded .available-theme .screenshot{width:270px}.folded .available-theme .screenshot{height:203px}}@media only screen and (max-width:1200px){.available-theme,.available-theme .screenshot{width:240px}.available-theme .screenshot{height:180px}.available-theme img{width:100%}}#post-body ul.add-menu-item-tabs li.tabs a,#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{font-weight:600;text-decoration:none}#TB_window #TB_title{background-color:#222;color:#cfcfcf}.appearance_page_custom-header #headimg{border:1px solid #DFDFDF;overflow:hidden;width:100%}.appearance_page_custom-header #upload-form p label{font-size:12px}.appearance_page_custom-header .available-headers .default-header{float:left;margin:0 20px 20px 0}.appearance_page_custom-header .random-header{clear:both;margin:0 20px 20px 0;vertical-align:middle}.appearance_page_custom-header .available-headers label input,.appearance_page_custom-header .random-header label input{margin-right:10px}.appearance_page_custom-header .available-headers label img{vertical-align:middle}div#custom-background-image{min-height:100px;border:1px solid #dfdfdf}div#custom-background-image img{max-width:400px;max-height:300px}#dashboard_right_now .versions .b,#post-status-display,#post-visibility-display,#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,.media-item .percent,.plugins .name,#pass-strength-result.strong,#pass-strength-result.short,#ed_reply_toolbar #ed_reply_strong,.item-controls .item-order a,.feature-filter .feature-name{font-weight:600}.plugins p{margin:0 4px;padding:0}.plugins .desc p{margin:0 0 8px}.plugins td.desc{line-height:1.5em}.plugins .desc ul,.plugins .desc ol{margin:0 0 0 2em}.plugins .desc ul{list-style-type:disc}.plugins .row-actions{font-size:13px;padding:0}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th{padding:10px 9px}.plugins .update th,.plugins .update td{border-bottom:0}.plugin-update-tr td{border-top:0}#wpbody-content .plugins .plugin-title,#wpbody-content .plugins .theme-title{padding-right:12px;white-space:nowrap}.plugins .inactive .plugin-title strong{font-weight:400}.plugins .second,.plugins .row-actions{padding:0 0 5px}.plugins .update .second,.plugins .update .row-actions{padding-bottom:0}.plugins-php .widefat tfoot th,.plugins-php .widefat tfoot td{border-top-style:solid;border-top-width:1px}.plugin-update-tr .update-message{border:0;font-size:13px;font-weight:400;margin:6px 12px 12px;padding:6px 12px}.plugin-update-tr .update-message:before{content:'\f463';display:inline-block;font:400 20px/1 dashicons;speak:none;margin:0 8px 0 -2px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.plugin-install-php h4{margin:2.5em 0 8px}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-right:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#createuser .form-field input{width:25em}.scheme-list{}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:3px}.color-option:hover,.color-option.selected{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:0}.color-option{cursor:pointer}body.press-this{color:#333;margin:0;padding:0;min-width:708px;min-height:400px}.press-this #titlediv #title{font-size:1.4em}.press-this #site-heading:before{top:3px;position:relative;display:inline-block;font:400 18px/1 dashicons;speak:none;color:#727272;content:'\f120';-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.pressthis{margin:20px 0}.pressthis a,.pressthis a:hover,.pressthis a:focus,.pressthis a:active{display:inline-block;position:relative;cursor:move;color:#333;background:#e6e6e6;-webkit-border-radius:5px;border-radius:5px;border:1px solid #b4b4b4;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis a:active{outline:0}.pressthis a:hover:after{-webkit-transform:skew(20deg) rotate(9deg);-moz-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.7);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis a span{display:inline-block;margin:0;padding:0 12px 8px 9px}.pressthis a span:before{font:400 20px/1 dashicons;content:'\f157';position:relative;display:inline-block;top:4px;margin-right:4px}.pressthis a:after{content:'';width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:transparent;-webkit-transform:skew(20deg) rotate(6deg);-moz-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.6);box-shadow:0 10px 8px rgba(0,0,0,.6)}#utc-time,#local-time{padding-left:25px;font-style:italic}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .spinner{float:none;margin:-3px 3px}#wpfooter{position:absolute;bottom:0;left:0;right:0;padding:10px 0;margin-right:20px;border-top-width:1px;border-top-style:solid}#wpfooter p{font-size:13px;margin:0;line-height:20px}#footer-thankyou{font-style:italic}#wpfooter a{text-decoration:none}#wpfooter a:hover{text-decoration:underline}.about-wrap{position:relative;margin:25px 40px 0 20px;max-width:1050px;font-size:15px}.about-wrap div.updated,.about-wrap div.error{display:none!important}.about-wrap hr{border:0;height:0;margin:0;border-top:1px solid rgba(0,0,0,.1)}.about-wrap img{margin:.5em 0 .5em 5px;max-width:100%}.about-wrap p{line-height:1.6em;font-size:14px}.about-wrap h1{margin:.2em 200px 0 0;line-height:1.2em;font-size:2.8em;font-weight:400}.about-wrap .about-text,.about-wrap p.about-description,.about-wrap li.wp-person a.web{font-weight:400;line-height:1.6em;font-size:19px}.about-description{margin-top:1.4em}.about-text{margin:1em 200px 1em 0;min-height:60px;font-size:24px}.about-wrap .changelog h2.about-headline-callout{margin:1.1em 0 .2em;font-size:2.4em;font-weight:300;line-height:1.3;text-align:center}.about-wrap h3{margin:1em 0 .6em;font-size:1.5em;line-height:1.5em}.about-wrap .feature-section h4{margin:1.4em 0 .6em;font-size:1.2em}.about-wrap .feature-section p{margin-top:.6em}.about-wrap code,.about-wrap ol li p{font-size:14px}.about-wrap .about-colors-img{bottom:-25px}.about-wrap .about-themes-img{bottom:-38px}.about-wrap .about-overview-img{border-bottom:1px solid rgba(0,0,0,.1);margin:0}.about-colors-img img,.about-themes-img img{margin:0;padding:0;line-height:1}.about-wrap .point-releases{margin-top:5px}.about-wrap .changelog.point-releases h3{padding-top:35px}.about-wrap .changelog.point-releases h3:first-child{padding-top:7px}.wp-badge{background:url(../images/w-logo-white.png?ver=20131202) no-repeat;background:none,url(../images/wordpress-logo-white.svg?ver=20131110) no-repeat;background-position:center 24px;background-size:85px 85px;font-size:14px;text-align:center;font-weight:600;margin:5px 0 0;padding-top:120px;height:40px;display:inline-block;width:150px;text-rendering:optimizeLegibility}.about-wrap .wp-badge{position:absolute;top:0;right:0}.about-wrap h2.nav-tab-wrapper{padding-left:6px}.about-wrap h2 .nav-tab{padding:4px 15px 6px;margin:0 3px -1px 0;font-size:18px;vertical-align:top;border-width:1px}.about-wrap h2 .nav-tab-active{font-weight:700}.about-wrap .feature-section{padding-bottom:20px}.about-wrap .feature-section.col{margin-bottom:0}.about-wrap .feature-section.center-col>div{margin:auto;width:60%}.about-wrap .about-colors .one-col>div{width:100%}.about-wrap .feature-section.two-col>div{position:relative;width:50%;float:left}.about-wrap .feature-section.three-col>div{position:relative;width:29.95%;margin-right:4.999999999%;float:left}.about-wrap .feature-section.col .last-feature{margin-right:0}.about-wrap .about-updates img,.about-wrap .about-twentyfourteen img{margin:2em 0 0;border:1px solid #ddd;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.about-wrap .about-twentyfourteen img{margin-top:1em}.about-wrap .changelog .feature-section{overflow:hidden}.about-wrap .about-colors .scheme-list{margin-bottom:1em}.about-wrap .about-colors .color-option{padding-top:10px}.about-wrap .about-colors .color-option label{display:inline-block;margin:.25em 0 .5em}.about-wrap .feature-section.two-col div p{margin-right:3%}.about-wrap .feature-section div p img{float:right;margin-left:10px;max-width:20%}.about-wrap .changelog li{list-style-type:disc;margin-left:3em}.about-wrap .return-to-dashboard{margin:30px 0 0 -5px;font-size:14px;font-weight:700}.about-wrap .return-to-dashboard a{text-decoration:none;padding:0 5px}.about-wrap h4.wp-people-group{margin-top:2.6em;font-size:16px}.about-wrap ul.wp-people-group{overflow:hidden;padding:0 5px;margin:0 -15px 0 -5px}.about-wrap ul.compact{margin-bottom:0}.about-wrap li.wp-person{float:left;margin-right:10px}.about-wrap li.wp-person img.gravatar{float:left;margin:0 10px 10px 0;padding:2px;width:60px;height:60px}.about-wrap ul.compact li.wp-person img.gravatar{width:30px;height:30px}.about-wrap li.wp-person{height:70px;width:280px;padding-bottom:15px}.about-wrap ul.compact li.wp-person{height:auto;width:180px;padding-bottom:0;margin-bottom:0}.about-wrap #wp-people-group-validators+p.wp-credits-list{margin-top:0}.about-wrap li.wp-person a.web{display:block;margin:6px 0 2px;font-size:16px;text-decoration:none}.about-wrap p.wp-credits-list a{white-space:nowrap}.freedoms-php .about-wrap ol{margin:40px 60px}.freedoms-php .about-wrap ol li{list-style-type:decimal;font-weight:700}.freedoms-php .about-wrap ol p{font-weight:400;margin:.6em 0}body.full-overlay-active{overflow:hidden}.wp-full-overlay{background:transparent;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;left:0;right:0;height:100%;min-width:0}.wp-full-overlay-sidebar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:fixed;width:300px;height:100%;top:0;bottom:0;left:0;padding:0;margin:0;z-index:10;overflow:auto;background:transparent;border-right:0}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{overflow:visible}.wp-full-overlay.collapsed,.wp-full-overlay.expanded .wp-full-overlay-sidebar{margin-left:0!important}.wp-full-overlay.expanded{margin-left:300px}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{margin-left:-300px}.wp-full-overlay-sidebar:after{content:'';display:block;position:absolute;top:0;bottom:0;right:0;width:3px;z-index:1000}.wp-full-overlay-main{position:absolute;left:0;right:0;top:0;bottom:0;height:100%}.wp-full-overlay-sidebar .wp-full-overlay-header{position:absolute;left:0;right:0;height:45px;padding:0 15px;line-height:45px;z-index:10;margin:0;border-top:0;-webkit-box-shadow:none;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-header a.back{margin-top:9px}.wp-full-overlay-sidebar .wp-full-overlay-footer{bottom:0;border-bottom:0;border-top:0;-webkit-box-shadow:none;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content{position:absolute;top:45px;bottom:45px;left:0;right:0;overflow:auto}.wp-full-overlay .close-full-overlay{text-decoration:none}.wp-full-overlay a.collapse-sidebar{position:absolute;bottom:12px;left:0;z-index:50;display:block;width:19px;height:19px;margin-left:15px;padding:0;border-radius:50%;text-decoration:none}.wp-full-overlay.collapsed .collapse-sidebar{position:absolute;left:100%}.wp-full-overlay .collapse-sidebar-arrow{position:static;margin-top:0;margin-left:0;display:block;width:auto;height:auto;background:0 0}.wp-full-overlay .collapse-sidebar-arrow:before{border-radius:50%;float:left;content:"\f148";font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.wp-full-overlay.collapsed .collapse-sidebar-arrow:before,.rtl .wp-full-overlay .collapse-sidebar-arrow:before{-ms-transform:rotate(180deg);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-ms-transform:none;-webkit-transform:none;transform:none}.wp-full-overlay.collapsed .collapse-sidebar-arrow{background-position:-1px -109px}.wp-full-overlay .collapse-sidebar-label{position:absolute;left:100%;line-height:20px;margin-left:10px}.wp-full-overlay.collapsed .collapse-sidebar-label{display:none}.wp-full-overlay,.wp-full-overlay-sidebar,.wp-full-overlay .collapse-sidebar,.wp-full-overlay-main{-webkit-transition-property:left,right,top,bottom,width,margin;-moz-transition-property:left,right,top,bottom,width,margin;-ms-transition-property:left,right,top,bottom,width,margin;-o-transition-property:left,right,top,bottom,width,margin;transition-property:left,right,top,bottom,width,margin;-webkit-transition-duration:.2s;-moz-transition-duration:.2s;-ms-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s}.no-customize-support .hide-if-no-customize,.customize-support .hide-if-customize,.no-customize-support.wp-core-ui .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.customize-support.wp-core-ui .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize{display:none}#customize-container{display:none;background:#fff;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;left:0;right:0;height:100%}.customize-active #customize-container{display:block}.customize-loading #customize-container iframe{opacity:0}.customize-loading #customize-container{background:#fff url(../images/spinner.gif) no-repeat fixed center center;background-size:20px 20px}#customize-container iframe,#theme-installer iframe{height:100%;width:100%;z-index:20;-webkit-transition:opacity .3s;-moz-transition:opacity .3s;-ms-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}#customize-container .collapse-sidebar{bottom:16px}#customize-controls{margin-top:0}#theme-installer{display:none}#theme-installer.single-theme{display:block}.install-theme-info{display:none;padding:10px 20px 20px}.single-theme .install-theme-info{padding-top:15px}#theme-installer .install-theme-info{display:block}.install-theme-info .theme-install{float:right;margin-top:18px}.install-theme-info .theme-name{font-size:16px;line-height:24px;margin-bottom:0;margin-top:0}.install-theme-info .theme-screenshot{margin-top:15px;width:258px;border:1px solid #ccc}.install-theme-info .theme-details{overflow:hidden}.theme-details .theme-version{margin:15px 0;float:left}.theme-details .star-rating{margin:7px 0;float:right}.theme-details .theme-description{float:left;color:#777;line-height:20px}#theme-installer .wp-full-overlay-header{margin-top:9px}#theme-installer .wp-full-overlay-header .theme-install{float:right;line-height:26px}#theme-installer .wp-full-overlay-sidebar{background:#EEE;border-right:1px solid #DDD}#theme-installer .wp-full-overlay-main{background:#fff url(../images/spinner.gif) no-repeat fixed center center;background-size:20px 20px}.nav-tab{border-style:solid;border-width:1px 1px 0;font-size:12px;line-height:16px;display:inline-block;padding:4px 14px 6px;text-decoration:none;margin:-4px 4px -1px 0}.nav-tab-active{border-width:1px}.nav-tab-active,.nav-tab-active:hover{border-bottom-width:1px;border-bottom-style:solid}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom-width:1px;border-bottom-style:solid;padding-bottom:0;padding-left:10px}h2 .nav-tab{padding:6px 10px;font-weight:700;font-size:15px;line-height:24px}#excerpt,.attachmentlinks{margin:0;height:4em;width:98%}#template div{margin-right:190px}p.pagenav{margin:0;display:inline}.pagenav span{font-weight:600;margin:0 6px}.row-title{font-size:14px!important;font-weight:600}.column-comment .comment-author{margin-bottom:.6em}.column-author img,.column-username img,.column-comment .comment-author img{float:left;margin-right:10px;margin-top:1px}.row-actions{font-size:13px;visibility:hidden;padding:2px 0 0}tr:hover .row-actions,.mobile .row-actions,.row-actions.visible,div.comment-item:hover .row-actions{visibility:visible}.row-actions-visible{padding:2px 0 0}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}.tagchecklist{margin-left:14px;font-size:12px;overflow:auto}.tagchecklist br{display:none}.tagchecklist strong{margin-left:-8px;position:absolute}.tagchecklist span{margin-right:25px;display:block;float:left;font-size:13px;line-height:1.8em;white-space:nowrap;cursor:default}.tagchecklist span a{margin:1px 0 0 -17px;cursor:pointer;width:20px;height:20px;display:block;float:left;text-indent:0;overflow:hidden;position:absolute}#poststuff h2{margin-top:20px;font-size:1.5em;margin-bottom:15px;padding:0 0 3px;clear:left}#poststuff h3,.metabox-holder h3{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#poststuff .inside{margin:6px 0 0}#poststuff .inside #parent_id,#poststuff .inside #page_template{max-width:100%}.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{max-width:80%}.ie8 #poststuff .inside #parent_id,.ie8 #poststuff .inside #page_template,.ie8 .inline-edit-row #post_parent,.ie8 .inline-edit-row select[name=page_template]{width:250px}#post-visibility-select{line-height:1.5em;margin-top:3px}#poststuff #submitdiv .inside{margin:0;padding:0}.edit-form-section{margin-bottom:20px}#templateside ul li a{text-decoration:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}#sidemenu{margin:-30px 15px 0 315px;list-style:none;position:relative;float:right;padding-left:10px;font-size:12px}#sidemenu a{padding:0 7px;display:block;float:left;line-height:28px;border-top-width:1px;border-top-style:solid;border-bottom-width:1px;border-bottom-style:solid;-webkit-transition:none;-moz-transition:none;transition:none}#sidemenu li{display:inline;line-height:200%;list-style:none;text-align:center;white-space:nowrap;margin:0;padding:0}#sidemenu a.current{font-weight:400;padding-left:6px;padding-right:6px;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px;border-width:1px;border-style:solid}#sidemenu li a .count-0{display:none}.plugin-install #description,.plugin-install-network #description{width:60%}table .vers,table .column-visible,table .column-rating{text-align:left}.error-message{color:red;font-weight:600}body.iframe{height:98%}.lp-show-latest p{display:none}.lp-show-latest p:last-child,.lp-show-latest .lp-error p{display:block}td.media-icon{text-align:center;width:80px;padding-top:8px;padding-bottom:8px}td.media-icon img{max-width:80px;max-height:60px}#howto{font-size:11px;margin:0 5px;display:block}.importers td{padding-right:14px}.importers{font-size:16px;width:auto}#post-body #post-body-content #namediv h3{margin-top:0}#namediv h3 label{vertical-align:baseline}#namediv table{width:100%}#namediv td.first{width:10px;white-space:nowrap}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.zerosize{height:0;width:0;margin:0;border:0;padding:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:2px}.checkbox{border:0;margin:0;padding:0}fieldset{border:0;padding:0;margin:0}.post-categories{display:inline;margin:0;padding:0}.post-categories li{display:inline}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-style:normal;font-weight:700}.edit-box{display:none}h3:hover .edit-box{display:inline}#dashboard-widgets form .input-text-wrap input{width:100%}#dashboard-widgets form .textarea-wrap textarea{width:100%}#dashboard-widgets .postbox form .submit{float:none;margin:.5em 0 0;padding:0;border:0}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish{min-width:0}#dashboard-widgets a{text-decoration:none}#dashboard-widgets h3 a{text-decoration:underline}#dashboard-widgets h3 .postbox-title-action{position:absolute;right:10px;padding:0;top:5px}.js #dashboard-widgets h3 .postbox-title-action{right:33px}#dashboard-widgets h4{font-weight:400;font-size:14px;margin:0 0 .2em;padding:0}#dashboard_plugins h5{font-size:14px}#latest-comments #the-comment-list{position:relative}#activity-widget #latest-comments #the-comment-list .comment-item{padding:1em 12px}#latest-comments #the-comment-list .pingback{padding-left:12px!important}#latest-comments #the-comment-list .comment-item:first-child{border-top:0}#latest-comments #the-comment-list .comment-item h4{line-height:1.5em;margin-top:0;color:#666}#latest-comments #the-comment-list .comment-item h4 cite{font-style:normal;font-weight:400}#latest-comments #the-comment-list .comment-item blockquote,#latest-comments #the-comment-list .comment-item blockquote p{margin:0;padding:0;display:inline}#latest-comments #the-comment-list .comment-item p.row-actions{margin:3px 0 0;padding:0;font-size:13px}#title-wrap label{cursor:text}#title-wrap #title{padding:2px 6px;font-size:1.3em;line-height:100%;outline:0}#title-wrap #title-prompt-text{font-size:1.1em;padding:5px 8px}.rss-widget ul{margin:0;padding:0;list-style:none}a.rsswidget{font-size:14px;font-weight:600;line-height:1.7em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#999;font-size:13px;margin-left:3px}.rss-widget cite{display:block;text-align:right;margin:0 0 1em;padding:0}.rss-widget cite:before{content:'\2014'}.dashboard-comment-wrap{overflow:hidden;word-wrap:break-word}#dashboard_browser_nag a.update-browser-link{font-size:1.2em;font-weight:600}#dashboard_browser_nag a{text-decoration:underline}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-right:125px}#dashboard_browser_nag .browser-icon{margin-top:-35px}#dashboard_browser_nag.postbox.browser-insecure{background-color:#ac1b1b;border-color:#ac1b1b}#dashboard_browser_nag.postbox{background-color:#e29808;background-image:none;border-color:#edc048;color:#fff;-webkit-box-shadow:none;box-shadow:none}#dashboard_browser_nag.postbox.browser-insecure h3{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h3{border-bottom-color:#f6e2ac;background:transparent none;color:#fff;-webkit-box-shadow:none;box-shadow:none}#dashboard_browser_nag a{color:#fff}#dashboard_browser_nag h3.hndle{border:0;font-weight:600;font-size:20px;padding-top:10px}.postbox#dashboard_browser_nag p a.dismiss{font-size:14px}.postbox#dashboard_browser_nag p,.postbox#dashboard_browser_nag a,.postbox#dashboard_browser_nag p.browser-update-nag{font-size:16px}#loginform p.submit,.login-action-lostpassword p.submit{border:0;margin:-10px 0 20px}.login *{margin:0;padding:0}.login form{margin-top:20px;margin-left:0;padding:26px 24px 46px;font-weight:400;overflow:hidden}.login form .forgetmenot{font-weight:400;float:left;margin-bottom:0}.login .button-primary{float:right}#login form p{margin-bottom:0}#login form p.submit{margin:0;padding:0}.login label{color:#777;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login h1{text-align:center}.login h1 a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);background-size:80px 80px;background-position:center top;background-repeat:no-repeat;color:#999;height:80px;font-size:20px;font-weight:400;line-height:1.3em;margin:0 auto 25px;padding:0;text-decoration:none;width:80px;text-indent:-9999px;outline:0;overflow:hidden;display:block}#login{width:320px;padding:8% 0 0;margin:auto}#login_error,.login .message{margin-left:0;padding:12px}.login #nav,.login #backtoblog{font-size:13px;padding:0 24px}.login #nav{margin:24px 0 0}#backtoblog{margin:16px 0 0}.login form .input,.login input[type=text]{font-size:24px;line-height:1;width:100%;padding:3px;margin:2px 6px 16px 0}.login #pass-strength-result{width:250px;font-weight:600;border-style:solid;border-width:1px;margin:12px 0 6px;padding:6px 5px;text-align:center}.mobile #login{padding:20px 0}.mobile #login form,.mobile #login .message,.mobile #login_error{margin-left:0}.mobile #login #nav,.mobile #login #backtoblog{margin-left:8px}.mobile #login h1 a{width:auto}body.interim-login{height:auto}.interim-login #login{padding:0;margin:5px auto 20px}.interim-login.login h1 a{width:auto}.interim-login #login_error,.interim-login.login .message{margin:0 0 16px}.interim-login.login form{margin:0}.wp-list-table .site-deleted{background:#ff8573}.wp-list-table .site-spammed{background:#faafaa}.wp-list-table .site-archived{background:#ffebe8}.wp-list-table .site-mature{background:#fecac2}.no-js #message{display:block}.accordion-section ul.category-tabs,.accordion-section ul.add-menu-item-tabs,.accordion-section ul.wp-tab-bar{margin:0}.accordion-section .categorychecklist{margin:13px 0}#nav-menu-meta .accordion-section-content{padding:18px 13px}#nav-menu-meta .button-controls{margin-bottom:0}#nav-menus-frame{margin-left:300px;margin-top:23px}#nav-menus-frame .accordion-section-content .inside{font-size:14px}#wpbody-content #menu-settings-column{display:inline;width:281px;margin-left:-300px;clear:both;float:left;padding-top:0}#menu-settings-column .inside{clear:both;margin:10px 0 0}.metabox-holder-disabled .postbox,.metabox-holder-disabled .accordion-section-content,.metabox-holder-disabled .accordion-section-title{opacity:.5;filter:alpha(opacity=50)}.metabox-holder-disabled .button-controls .select-all{display:none}#wpbody{position:relative}.blank-slate .menu-name{height:2em}.blank-slate .menu-settings{border:0;margin-top:0;padding-top:0;overflow:hidden}.is-submenu{font-style:italic;font-weight:400;margin-left:4px}.manage-menus{margin-top:23px;padding:10px;overflow:hidden}.manage-menus select{float:left;margin-right:6px}.manage-menus .selected-menu{float:left;margin:5px 6px 0 0}.manage-menus .submit-btn{float:left;margin-top:1px}.menu-edit p{margin:.3em 0 .6em}.menu-edit #post-body-content h3{margin:1em 0 10px}.menu-settings{border-top-width:1px;border-top-style:solid;margin-top:2em}.menu-settings dl{margin:0 0 10px;overflow:hidden;padding-left:18%}.menu-settings dd{float:left;margin:0;width:100%}.menu-settings dt{float:left;clear:both;width:21.951%;padding:3px 0 0;margin-left:-21.951%}.menu-settings label{vertical-align:baseline}.menu-edit .checkbox-input{margin-top:4px}.theme-location-set{font-size:11px}#menu-management-liquid{float:left;min-width:100%;margin-top:3px}#menu-management{position:relative;margin-right:20px;margin-top:-3px;width:100%}#menu-management .menu-edit{margin-bottom:20px}.nav-menus-php #post-body{padding:0 10px 10px;border-width:1px 0;border-style:solid}#nav-menu-header,#nav-menu-footer{padding:0 10px}#nav-menu-header{border-bottom:1px solid;margin-bottom:0}#nav-menu-header .menu-name-label{margin-top:4px}.nav-menus-php #post-body div.updated,.nav-menus-php #post-body div.error{margin:0}.nav-menus-php #post-body-content{position:relative;float:none}#menu-management .menu-add-new abbr{font-weight:600}#select-nav-menu-container{text-align:right;padding:0 10px 3px;margin-bottom:5px}#select-nav-menu{width:100px;display:inline}#menu-name-label{margin-top:-2px}.widefat td.menu-location-menus{padding-bottom:5px}.menu-location-menus select{float:left}#locations-nav-menu-wrapper{padding:5px 0}.locations-nav-menu-select select{float:left;width:160px;margin-right:5px}.locations-row-links{float:left;margin:6px 0 0 6px}.locations-edit-menu-link,.locations-add-menu-link{margin:0 3px}.locations-edit-menu-link{padding-right:3px;border-right:1px solid #ccc}#wpbody .open-label{display:block;float:left}#wpbody .open-label span{padding-right:10px}.js .input-with-default-title{font-style:italic}#menu-management .inside{padding:0 10px}.postbox .howto input,.accordion-container .howto input{width:180px;float:right}.accordion-container .outer-border{margin:0}.customlinkdiv .howto input{width:180px}.customlinkdiv p{margin-top:0}#nav-menu-theme-locations .howto select{width:100%}#nav-menu-theme-locations .button-controls{text-align:right}.add-menu-item-view-all{height:400px}#menu-container .submit{margin:0 0 10px;padding:0}.nav-menus-php .add-new-menu-action{float:left;margin:6px 0 0 6px;line-height:15px}.nav-menus-php .meta-sep,.nav-menus-php .submitdelete,.nav-menus-php .submitcancel{display:block;float:left;margin:6px 0;line-height:15px}.meta-sep{padding:0 2px}#cancel-save{text-decoration:underline;font-size:12px;margin-left:20px;margin-top:5px}.button.right,.button-secondary.right,.button-primary.right{float:right}.list-controls{float:left;margin-top:5px}.add-to-menu{float:right}.postbox .spinner{display:none;vertical-align:middle}.button-controls{clear:both;margin:10px 0}.show-all,.hide-all{cursor:pointer}.hide-all{display:none}#menu-name{width:270px}#manage-menu .inside{padding:0}#available-links dt{display:block}#add-custom-link .howto{font-size:12px}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px}.menu-item-textbox{width:180px}.nav-menus-php .howto span{margin-top:6px;display:block;float:left}.quick-search{width:190px}.nav-menus-php .list-wrap{display:none;clear:both;margin-bottom:10px}.nav-menus-php .list-container{max-height:200px;overflow-y:auto;padding:10px 10px 5px}.nav-menus-php .postbox p.submit{margin-bottom:0}.nav-menus-php .list li{display:none;margin:0;margin-bottom:5px}.nav-menus-php .list li .menu-item-title{cursor:pointer;display:block}.nav-menus-php .list li .menu-item-title input{margin-right:3px;margin-top:-3px}.menu-item-title input[type=checkbox]{display:inline-block;margin-top:-4px}#menu-container .inside{padding-bottom:10px}.menu{padding-top:1em}#menu-to-edit{margin:0;padding:.1em 0}.menu ul{width:100%}.menu li{margin-bottom:0;position:relative}.menu-item-bar{clear:both;line-height:1.5em;position:relative;margin:9px 0 0}.menu-item-bar .menu-item-handle{border:1px solid #dfdfdf;position:relative;padding:10px 15px;height:auto;width:382px;line-height:30px;overflow:hidden;word-wrap:break-word}#menu-to-edit .menu-item-invalid .menu-item-handle{background:#f6c9cc;border-color:#f1acb1}.no-js .menu-item-edit-active .item-edit{display:none}.js .menu-item-handle{cursor:move}.menu li.deleting .menu-item-handle{background-image:none}.menu-item-handle .item-title{font-size:13px;font-weight:600;line-height:20px;display:block;margin-right:13em}li.menu-item.ui-sortable-helper dl{margin-top:0}li.menu-item.ui-sortable-helper .menu-item-transport dl{margin-top:13px}.menu .sortable-placeholder{height:35px;width:410px;margin-top:13px}.menu-item-depth-0{margin-left:0}.menu-item-depth-1{margin-left:30px}.menu-item-depth-2{margin-left:60px}.menu-item-depth-3{margin-left:90px}.menu-item-depth-4{margin-left:120px}.menu-item-depth-5{margin-left:150px}.menu-item-depth-6{margin-left:180px}.menu-item-depth-7{margin-left:210px}.menu-item-depth-8{margin-left:240px}.menu-item-depth-9{margin-left:270px}.menu-item-depth-10{margin-left:300px}.menu-item-depth-11{margin-left:330px}.menu-item-depth-0 .menu-item-transport{margin-left:0}.menu-item-depth-1 .menu-item-transport{margin-left:-30px}.menu-item-depth-2 .menu-item-transport{margin-left:-60px}.menu-item-depth-3 .menu-item-transport{margin-left:-90px}.menu-item-depth-4 .menu-item-transport{margin-left:-120px}.menu-item-depth-5 .menu-item-transport{margin-left:-150px}.menu-item-depth-6 .menu-item-transport{margin-left:-180px}.menu-item-depth-7 .menu-item-transport{margin-left:-210px}.menu-item-depth-8 .menu-item-transport{margin-left:-240px}.menu-item-depth-9 .menu-item-transport{margin-left:-270px}.menu-item-depth-10 .menu-item-transport{margin-left:-300px}.menu-item-depth-11 .menu-item-transport{margin-left:-330px}body.menu-max-depth-0{min-width:950px!important}body.menu-max-depth-1{min-width:980px!important}body.menu-max-depth-2{min-width:1010px!important}body.menu-max-depth-3{min-width:1040px!important}body.menu-max-depth-4{min-width:1070px!important}body.menu-max-depth-5{min-width:1100px!important}body.menu-max-depth-6{min-width:1130px!important}body.menu-max-depth-7{min-width:1160px!important}body.menu-max-depth-8{min-width:1190px!important}body.menu-max-depth-9{min-width:1220px!important}body.menu-max-depth-10{min-width:1250px!important}body.menu-max-depth-11{min-width:1280px!important}.item-type{font-size:12px;padding:12px 10px;line-height:18px;display:block}.item-controls{font-size:12px;position:absolute;right:20px;top:-1px}.item-controls a{text-decoration:none}.item-controls a:hover{cursor:pointer}.item-controls .item-order{padding-right:10px}.nav-menus-php .item-edit{position:absolute;right:-20px;top:0;display:block;width:30px;height:40px;margin-right:0!important;text-indent:100%;outline:0;overflow:hidden;white-space:nowrap}.menu-instructions-inactive{display:none}.menu-item-settings{display:block;width:402px;padding:10px 0 10px 10px;position:relative;z-index:10}.menu-item-settings .field-move a{display:none;margin:0 2px}.menu-item-edit-active .menu-item-settings{display:block}.menu-item-edit-inactive .menu-item-settings{display:none}.add-menu-item-pagelinks{margin:.5em auto;text-align:center}.link-to-original{display:block;margin:0 0 10px;padding:3px 5px 5px;font-size:12px;font-style:italic}.link-to-original a{padding-left:4px;font-style:normal}.hidden-field{display:none}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-right:10px;float:left}.description-thin{width:190px;height:40px}.description-wide{width:390px}.menu-item-actions{padding-top:15px}#cancel-save{cursor:pointer}.nav-menus-php .major-publishing-actions{clear:both;padding:3px 0 6px}.nav-menus-php .major-publishing-actions .publishing-action{text-align:right;float:right;line-height:23px;margin:4px 0 1px}.nav-menus-php .blank-slate .menu-settings{display:none}.nav-menus-php .delete-action{float:left;margin-top:2px}.nav-menus-php .submitbox .submitcancel{border-bottom:1px solid;padding:1px 2px;text-decoration:none}.nav-menus-php .major-publishing-actions .form-invalid{padding-left:4px;margin-left:-4px;border:0 none}#menu-item-name-wrap:after,#menu-item-url-wrap:after,#menu-name-label:after,#menu-settings-column .inside:after,#nav-menus-frame:after,.nav-menus-php #post-body-content:after,.nav-menus-php .button-controls:after,.nav-menus-php .major-publishing-actions:after,.nav-menus-php .menu-item-settings:after{clear:both;content:".";display:block;height:0;visibility:hidden}#nav-menus-frame,.button-controls,#menu-item-url-wrap,#menu-item-name-wrap{display:block}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) repeat-x bottom left}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) repeat-x top left;height:17px;float:left}.star-rating{white-space:nowrap}.star-rating .star{display:inline-block;width:20px;height:20px;-webkit-font-smoothing:antialiased;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;-moz-transition:color .1s ease-in 0;-webkit-transition:color .1s ease-in 0;text-align:center;color:#0074a2}.star-rating .star-full:before{content:'\f155'}.star-rating .star-half:before{content:'\f459'}.rtl .star-rating .star-half{-webkit-transform:rotateY(180deg);-ms-transform:rotateY(180deg);transform:rotateY(180deg)}.star-rating .star-empty:before{content:'\f154'}div.action-links{font-weight:400;margin:6px 0 0}#plugin-information-header{margin:0;padding:0 5px;font-weight:600;position:relative;border-bottom-width:1px;border-bottom-style:solid;height:2.5em}#plugin-information ul#sidemenu{font-weight:400;margin:0 5px;position:absolute;left:0;bottom:-1px}#plugin-information{height:auto}#plugin-information p.action-button{width:100%;padding-bottom:0;margin-bottom:0;margin-top:10px;-webkit-border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-top-left-radius:3px;border-bottom-left-radius:3px}#plugin-information .action-button a{text-align:center;font-weight:600;text-decoration:none;display:block;line-height:2em}#plugin-information h2{clear:none!important;margin-right:200px}#plugin-information .fyi{margin:0 10px 50px;width:210px}#plugin-information .fyi h2{font-size:.9em;margin-bottom:0;margin-right:0}#plugin-information .fyi h2.mainheader{padding:5px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}#plugin-information .fyi ul{padding:10px 5px 10px 7px;margin:0;list-style:none;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}#plugin-information .fyi li{margin-right:0}#plugin-information #section-holder{padding:10px}#plugin-information .section ul,#plugin-information .section ol{margin-left:16px;list-style-type:square;list-style-image:none}#plugin-information #section-screenshots ol{list-style:none;margin:0}#plugin-information #section-screenshots li img{vertical-align:text-top;max-width:100%;width:auto;height:auto}#plugin-information #section-screenshots li p{font-style:italic;padding-left:20px;padding-bottom:2em}#plugin-information #section-screenshots ol,#plugin-information .updated,#plugin-information pre{margin-right:215px}#plugin-information pre{padding:7px;overflow:auto;border-width:1px;border-style:solid}.plugin-version-author-uri{font-size:13px}img{border:0}#wphead{border-bottom-width:1px;border-bottom-style:solid}.press-this #wphead{height:32px;margin-left:0;margin-right:0;margin-bottom:5px}.press-this #header-logo{float:left;margin:7px 7px 0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.press-this #wphead h1{font-weight:400;font-size:16px;line-height:32px;margin:0;float:left}.press-this #wphead h1 a{text-decoration:none}.press-this #wphead h1 a:hover{text-decoration:underline}.press-this #message{margin:10px 0}.press-this .posting{margin-right:252px}.press-this-sidebar{float:right;width:240px;padding-top:10px}.press-this #title{margin-left:0;margin-right:0;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.press-this .tagchecklist{margin-top:8px}.press-this #titlediv{margin:0}.press-this .wp-media-buttons{cursor:default;padding:8px 8px 6px}.press-this .howto{margin-top:2px;margin-bottom:3px;font-size:12px;font-style:italic;display:block}.press-this #wp-content-editor-container{clear:none}.press-this #poststuff .inside{margin-top:18px}.press-this .category-tabs{margin-bottom:3px}.press-this #poststuff{margin:0 10px 10px;padding:0}.press-this #photo-add-url-div input[type=text]{width:220px}#poststuff #editor-toolbar{height:30px}div.zerosize{border:0 none;height:0;margin:0;overflow:hidden;padding:0;width:0}.posting{margin-right:212px;position:relative}.press-this .inner-sidebar{width:200px}.press-this .inner-sidebar .sleeve{padding-top:5px}.press-this #submitdiv p{margin:0;padding:6px}.press-this #submitdiv #publishing-actions{border-bottom:1px solid #dfdfdf}.press-this #publish{float:right}.press-this #poststuff h2,.press-this #poststuff h3{font-size:14px;line-height:1}.press-this #tagsdiv-post_tag h3,.press-this #categorydiv h3{cursor:pointer}.press-this #submitdiv h3{cursor:default}h3.tb{font-weight:600;font-size:12px;margin-left:5px}#TB_window{border:1px solid #333}.press-this .postbox,.press-this .stuffbox{margin-bottom:10px;min-width:0}.js .meta-box-sortables .postbox:hover .handlediv{margin-right:0!important}.js .sidebar-name .sidebar-name-arrow:before,.js .meta-box-sortables .postbox .handlediv:before{right:12px;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:8px 10px;top:0;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.js #widgets-left .sidebar-name .sidebar-name-arrow{display:none}.js #widgets-left .widgets-holder-wrap.closed .sidebar-name .sidebar-name-arrow,.js #widgets-left .sidebar-name:hover .sidebar-name-arrow{display:block}.js .sidebar-name .sidebar-name-arrow:before,.js .meta-box-sortables .postbox .handlediv:before{content:'\f142'}.js .widgets-holder-wrap.closed .sidebar-name-arrow:before,.js .meta-box-sortables .postbox.closed .handlediv:before{content:'\f140'}.press-this #submitdiv:hover .handlediv{background:0 0}.tbtitle{font-size:1.7em;outline:0;padding:3px 4px;border-color:#dfdfdf}.press-this .actions{float:right;margin:-19px 0 0}.press-this #extra-fields .actions{margin:-32px -7px 0 0}.press-this .actions li{float:left;list-style:none;margin-right:10px}#extra-fields .button{margin-right:5px}#photo_saving{margin:0 8px 8px;vertical-align:middle}#img_container_container{overflow:auto}#extra-fields{margin-top:10px;position:relative}#extra-fields h2{margin:12px}#waiting{margin-top:10px;overflow:hidden}#waiting span{float:right;margin:0 0 0 5px}#waiting .spinner{display:block}#extra-fields .postbox{margin-bottom:5px}#extra-fields .titlewrap{padding:0;overflow:auto;height:120px}#img_container a{display:block;float:left;overflow:hidden}#img_container img,#img_container a{width:68px;height:68px}#img_container img{border:0;background-color:#f4f4f4;cursor:pointer}#img_container a,#img_container a:link,#img_container a:visited{border:1px solid #ccc;display:block;position:relative}#img_container a:hover,#img_container a:active{border-color:#000;z-index:1000;border-width:1px}#embed-code{width:100%;height:98px}.press-this .categorydiv div.tabs-panel{height:100px}.press-this .tagsdiv .newtag{width:120px}.press-this #content{margin:5px 0;padding:0 5px;border:0 none;height:345px;font-family:Consolas,Monaco,monospace;font-size:13px;line-height:19px;background:transparent}.press-this #publishing-actions .spinner{display:inline;vertical-align:middle}#TB_ajaxContent #options{position:absolute;top:20px;right:25px;padding:5px}#TB_ajaxContent h3{margin-bottom:.25em}.error a{text-decoration:underline}.updated a{text-decoration:none;padding-bottom:2px}.taghint{color:#aaa;margin:-17px 0 0 7px;visibility:hidden}input.newtag~div.taghint{visibility:visible}input.newtag:focus~div.taghint{visibility:hidden}#mce_fullscreen_container{background:#fff}#photo-add-url-div input[type=text]{width:300px}.alignleft h3{margin:0}#template textarea{font-family:Consolas,Monaco,monospace;font-size:13px;width:97%;background:#f9f9f9;outline:0}#template textarea,#docs-list{direction:ltr}#template p{width:97%}#templateside{float:right;width:190px;word-wrap:break-word}#templateside h3,#postcustomstuff p.submit{margin:0}#templateside h4{margin:1em 0 0}#templateside ol,#templateside ul{margin:.5em 0;padding:0}#templateside li{margin:4px 0}#templateside a,.theme-editor-php .highlight{display:block;padding:3px 3px 3px 12px;text-decoration:none}.theme-editor-php .highlight{margin:-3px 3px -3px -12px}#templateside .highlight{border:0;font-weight:700}.nonessential{font-size:11px;font-style:italic;padding-left:12px}#documentation{margin-top:10px}#documentation label{line-height:22px;vertical-align:baseline;font-weight:600}.fileedit-sub{padding:10px 0 8px;line-height:180%}.feature-filter{padding:8px 12px 0}.feature-filter .feature-group{float:left;margin:5px 10px 10px}.feature-filter .feature-group li{display:inline-block;vertical-align:top;list-style-type:none;padding-right:25px;width:150px}.widget{margin:0 auto 10px;position:relative;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.widget-top{font-size:13px;font-weight:600;background:#f7f7f7}.widget-top a.widget-action,.widget-top a.widget-action:hover{text-decoration:none}.widget-title h4{margin:0;padding:15px;line-height:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;user-select:none}.widgets-holder-wrap .widget-inside{border-top:0;padding:1px 15px 15px;line-height:16px}.widget.ui-draggable-dragging{min-width:100%}.widget.ui-sortable-helper{opacity:.8}.widget-placeholder{border:1px dashed #bbb;margin:0 auto 10px;height:45px;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#widgets-right .widget-placeholder{margin-top:0}#widgets-right .closed .widget-placeholder{height:0;border:0;margin-top:-10px}.sidebar-name{border:0;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.sidebar-name-arrow{position:absolute;top:0;right:0;bottom:0}.js .sidebar-name{cursor:pointer}.sidebar-name h3{margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap}.widgets-holder-wrap .description{padding:0 0 15px;margin:0;font-style:normal;color:#777}#widgets-right .widgets-holder-wrap .description{padding-left:7px;padding-right:7px}div.widget-liquid-left{margin:0;width:38%;float:left}div.widget-liquid-right{float:right;width:58%}div#widgets-left{padding-top:12px}div#widgets-left .closed .sidebar-name,div#widgets-left .inactive-sidebar.closed .sidebar-name{margin-bottom:10px}div#widgets-left .sidebar-name h3{padding:10px 0;margin:0 10px 0 0}div#widgets-left .sidebar-name .sidebar-name-arrow:before{right:0;top:4px;padding:4px 6px 4px 4px}div#widgets-left .widget-holder{background:transparent;border:0}#available-widgets .widget-action{display:none}#available-widgets .widget{margin:0}#available-widgets .widget:nth-child(odd){clear:both}#available-widgets .widget .widget-description{display:block;padding:10px 15px;font-size:12px}#available-widgets #widget-list{position:relative}#widgets-left .inactive-sidebar{clear:both;width:100%;background:transparent;padding:0;margin:0 0 20px;border:0;box-shadow:none}#widgets-left .inactive-sidebar.first{margin-top:40px}div#widgets-left .inactive-sidebar .widget.expanded{left:auto}.widget-title-action{float:right;position:relative}div#widgets-left .inactive-sidebar .widgets-sortables{min-height:42px;padding:0;background:transparent;margin:0;position:relative}div#widgets-right:after{content:".";display:block;height:0;clear:both;visibility:hidden}div#widgets-right .sidebars-column-1,div#widgets-right .sidebars-column-2{max-width:450px}div#widgets-right .widgets-holder-wrap{margin:10px 0 0}div#widgets-right .sidebar-description{min-height:20px;margin-top:-5px}div#widgets-right .sidebar-name h3{padding:15px 7px}div#widgets-right .sidebar-name .sidebar-name-arrow:before{right:0;top:4px}div#widgets-right .widget-top{padding:0}div#widgets-right .widgets-sortables{padding:0 8px;margin-bottom:9px;position:relative;min-height:123px}div#widgets-right .closed .widgets-sortables{min-height:0;margin-bottom:0}.sidebar-name .spinner{margin:-5px 5px;float:none}#widgets-right .widgets-holder-wrap.widget-hover{border-color:#777;box-shadow:0 1px 2px rgba(0,0,0,.3)}.widgets_access #widgets-left .widget .widget-top{cursor:auto}.widgets_access #wpwrap .widgets-holder-wrap.closed .sidebar-description,.widgets_access #wpwrap .widgets-holder-wrap.closed .widget,.widgets_access #wpwrap .widget-control-edit{display:block}.widgets_access #widgets-left .widget .widget-top:hover,.widgets_access #widgets-right .widget .widget-top:hover{border-color:#ddd}#available-widgets .widget-control-edit .edit,#widgets-left .inactive-sidebar .widget-control-edit .add,#widgets-right .widget-control-edit .add{display:none}.widget-control-edit{display:block;color:#666;background:#EEE;padding:0 15px;line-height:43px;border-left:1px solid #DDD}#widgets-left .widget-control-edit:hover,#widgets-right .widget-control-edit:hover{color:#fff;background:#444;border-left:0;outline:1px solid #444}.widgets-holder-wrap .sidebar-name,.widgets-holder-wrap .sidebar-description{-webkit-user-select:none;-moz-user-select:none;user-select:none}.editwidget{margin:0 auto}.editwidget .widget-inside{display:block;padding:0 15px}.editwidget .widget-control-actions{margin-top:20px}.js .widgets-holder-wrap.closed .widget,.js .widgets-holder-wrap.closed .sidebar-description,.js .closed br.clear{display:none}.nav-menus-php .item-edit:before,.widget-top a.widget-action:after,.control-section .accordion-section-title:after,.accordion-section-title:after{right:0;content:'\f140';border:0;background:0 0;font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.widget-top a.widget-action:after{padding:12px 12px 0}.nav-menus-php .item-edit:before{line-height:2.1}.control-section .accordion-section-title:after,.accordion-section-title:after{float:right;right:20px;top:-2px}.control-section.open .accordion-section-title:after,#customize-info.open .accordion-section-title:after,.nav-menus-php .menu-item-edit-active .item-edit:before{content:'\f142'}.widget-inside,.widget-description{display:none}#removing-widget{display:none;font-weight:400;padding-left:15px;font-size:12px;line-height:1}.widget-control-noform,#access-off,.widgets_access .widget-action,.widgets_access .sidebar-name-arrow,.widgets_access #access-on,.widgets_access .widget-holder .description,.no-js .widget-holder .description{display:none}.widgets_access .widget-holder,.widgets_access #widget-list{padding-top:10px}.widgets_access #access-off{display:inline}.widgets_access .sidebar-name,.widgets_access .widget .widget-top{cursor:default}.widget-liquid-left #widgets-left.chooser #available-widgets .widget,.widget-liquid-left #widgets-left.chooser .inactive-sidebar{transition:opacity .1s linear}.widget-liquid-left #widgets-left.chooser #available-widgets .widget,.widget-liquid-left #widgets-left.chooser .inactive-sidebar{opacity:.2;pointer-events:none}.widget-liquid-left #widgets-left.chooser #available-widgets .widget-in-question{opacity:1;pointer-events:auto}.widgets-chooser ul.widgets-chooser-sidebars{margin:0;list-style-type:none;max-height:300px;overflow:auto}.widgets-chooser{display:none}.widgets-chooser ul{border:1px solid #ccc}.widgets-chooser li{padding:10px 15px 10px 35px;border-bottom:1px solid #ccc;background:#fff;margin:0;cursor:pointer;outline:0;position:relative;transition:background:.2s ease-in-out}.widgets-chooser li:hover,.widgets-chooser li:focus{background:rgba(255,255,255,.7)}.widgets-chooser li:focus:before{content:'\f147';display:block;-webkit-font-smoothing:antialiased;font:400 26px/1 dashicons;color:#999;position:absolute;top:7px;left:5px}.widgets-chooser li:last-child{border:0}.widgets-chooser li.widgets-chooser-selected{background:#2ea2cc;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{content:'\f147';display:block;-webkit-font-smoothing:antialiased;font:400 26px/1 dashicons;color:#fff;position:absolute;top:7px;left:5px}.widgets-chooser .widgets-chooser-actions{padding:10px 0 12px;text-align:center}.widgets-chooser button{margin-right:5px}#available-widgets .widget .widget-top{cursor:pointer}.ui-sortable,.ui-draggable{-ms-touch-action:none;touch-action:none}.meta-box-sortables.ui-sortable,.widgets-holder-wrap .ui-draggable,.widgets-holder-wrap .ui-sortable,.menu.ui-sortable{-ms-touch-action:auto;touch-action:auto}.meta-box-sortables.ui-sortable .hndle,.menu.ui-sortable .menu-item-handle{-ms-touch-action:none;touch-action:none}.accordion-section{border-bottom:1px solid #dfdfdf;margin:0}.accordion-section.open .accordion-section-content,.no-js .accordion-section .accordion-section-content{display:block}.accordion-section.open:hover{border-bottom-color:#dfdfdf}.accordion-section-content{display:none;padding:10px 20px 15px;overflow:hidden;background:#fff;border-left:1px solid #dfdfdf;border-right:1px solid #dfdfdf}.accordion-section-title{margin:0;padding:12px 15px 15px;position:relative;border-left:1px solid #dfdfdf;border-right:1px solid #dfdfdf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.js .accordion-section-title{cursor:pointer}.js .accordion-section-title:after{position:absolute;top:12px;right:10px;z-index:1}.accordion-section-title:focus{outline:0}.accordion-section-title:hover:after,.accordion-section-title:focus:after{border-color:#aaa transparent}.cannot-expand .accordion-section-title{cursor:auto}.cannot-expand .accordion-section-title:after{display:none}.control-section .accordion-section-title{border-left:0;border-right:0;padding:10px 10px 11px 14px;line-height:21px;background:#fff}.control-section .accordion-section-title:after{top:11px}.js .control-section:hover .accordion-section-title,.js .control-section .accordion-section-title:hover,.js .control-section.open .accordion-section-title,.js .control-section .accordion-section-title:focus{color:#222;background:#f5f5f5}.control-section.open .accordion-section-title{border-bottom:1px solid #dfdfdf}.sticky-menu #TB_window .updated{margin:16px 0 0}li#wp-admin-bar-menu-toggle{display:none}@media screen and (max-width:480px){div.widget-liquid-left{width:100%;float:none;border-right:0;padding-right:0}#widgets-left .sidebar-name{margin-right:0}#widgets-left #available-widgets .widget-top{margin-right:0}#widgets-left .inactive-sidebar .widgets-sortables{margin-right:0}div.widget-liquid-right{width:100%;float:none}div.widget{margin:0 auto 10px!important;max-width:480px}}@media screen and (max-width:320px){div.widget{max-width:320px}}@media only screen and (max-width:768px){#col-left{width:100%}#col-right{width:100%}}@media only screen and (min-width:769px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (max-width:860px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (min-width:980px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (max-width:768px){#col-left{width:100%}#col-right{width:100%}.form-field input,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}#menu-locations-wrap .widefat{width:100%}}@media only screen and (min-width:1250px){#widgets-left #available-widgets .widget{width:49%;float:left}.widget.ui-draggable-dragging{min-width:49%}#widgets-left #available-widgets .widget:nth-child(even){float:right}#widgets-right .sidebars-column-1,#widgets-right .sidebars-column-2{float:left;width:49%}#widgets-right .sidebars-column-1{margin-right:2%}#widgets-right.single-sidebar .sidebars-column-1,#widgets-right.single-sidebar .sidebars-column-2{float:none;width:100%;margin:0}}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){tr.wp-locked .locked-indicator{background-image:url(../images/lock-2x.png);background-size:16px 16px}#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize-2x.gif) no-repeat scroll right bottom;background-size:11px 11px}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize-rtl-2x.gif) no-repeat scroll right bottom}div.star-holder{background:url(../images/stars-2x.png?ver=20121108) repeat-x bottom left;background-size:21px 37px}div.star-holder .star-rating{background:url(../images/stars-2x.png?ver=20121108) repeat-x top left;background-size:21px 37px}.wp-full-overlay .collapse-sidebar-arrow{background-image:url(../images/arrows-2x.png);background-size:15px 123px}.spinner,.imgedit-wait,.customize-loading #customize-container,.revision-tick.completed-false,#theme-installer .wp-full-overlay-main{background-image:url(../images/spinner-2x.gif)}}.locale-zh-cn .howto,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn #utc-time,.locale-zh-cn #local-time,.locale-zh-cn p.install-help,.locale-zh-cn p.help,.locale-zh-cn p.description,.locale-zh-cn span.description,.locale-zh-cn .form-wrap p{font-style:normal}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #wp-fullscreen-tagline{font-family:KaiTi,"楷体",sans-serif}.locale-zh-cn #wp-fullscreen-modes a{font-size:12px}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de .inline-edit-row fieldset label span.title{width:7em}.locale-de-de .inline-edit-row fieldset label span.input-text-wrap{margin-left:7em}.locale-de-de #customize-header-actions .button{padding:0 5px 1px}.locale-de-de #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru .inline-edit-row fieldset label span.title{width:8em}.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}.locale-ru-ru.press-this .posting{margin-right:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title{width:8em}.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}@-ms-viewport{width:device-width}@media screen and (max-width:782px){html.wp-toolbar{padding-top:46px}body{min-width:240px;overflow-x:hidden}body *{-webkit-tap-highlight-color:rgba(0,0,0,0)!important}#wpwrap{background:#f0f0f0}#wpcontent,.auto-fold #wpcontent{position:relative;margin-left:0;padding-left:10px}.wrap{margin-right:12px;margin-left:0}.col-wrap{padding:0}.sticky-menu #adminmenuwrap{position:relative;z-index:auto;top:0}#screen-meta,#screen-meta-links,#collapse-menu,.post-format-select{display:none!important}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=number]{-webkit-appearance:none;padding:6px 10px}input.code{padding-bottom:5px;padding-top:10px}input[type=checkbox],.widefat th input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat th input[type=checkbox]{margin-bottom:8px}input[type=checkbox]:checked:before,.widefat th input[type=checkbox]:before{font:400 30px/1 Dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}.wrap .add-new-h2,.wrap .add-new-h2:active{padding:10px 15px;font-size:14px}.wp-color-result{height:auto;padding-left:45px}.wp-color-result:after{font-size:14px;height:auto;padding:6px 14px}#createuser .form-field input{width:100%}.wrap div.updated,.wrap div.error,.media-upload-form div.error{margin:20px 0 10px;padding:5px 10px;font-size:14px;line-height:175%}.auto-fold #adminmenu,.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{position:absolute;width:190px;z-index:100}.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{display:none}.auto-fold #adminmenu li.menu-top{width:100%}.auto-fold #adminmenu li a{font-size:16px;padding:5px}.auto-fold #adminmenu li.menu-top .wp-submenu>li>a{padding:10px 10px 10px 20px}.auto-fold #adminmenu .wp-menu-name{display:block;margin-left:35px}.auto-fold ul#adminmenu a.wp-has-current-submenu:after,.auto-fold ul#adminmenu>li.current>a.current:after{border-width:8px;margin-top:-8px}.auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{display:none}#adminmenu .wp-submenu{position:relative;display:none}.auto-fold #adminmenu .selected .wp-submenu,.auto-fold #adminmenu .wp-menu-open .wp-submenu{position:relative;display:block;top:0;left:-1px;-webkit-box-shadow:none;box-shadow:none}.auto-fold #adminmenu .selected .wp-submenu:after,.auto-fold #adminmenu .wp-menu-open .wp-submenu:after{display:none}.auto-fold #adminmenu .opensub .wp-submenu{display:none}.auto-fold #adminmenu .selected .wp-submenu{display:block}.auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after{display:block}.auto-fold #adminmenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu{position:relative;left:-1px;right:0;top:0}#adminmenu .wp-submenu .wp-submenu-head{display:none}#wp-responsive-toggle{position:fixed;top:5px;left:4px;padding-right:10px;z-index:99999;border:0;box-sizing:border-box;-moz-box-sizing:border-box}.wrap .icon32+h2{margin-top:-2px}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#333}.wp-responsive-open #wpbody{right:-190px}.auto-fold .wp-responsive-open #adminmenuback,.auto-fold .wp-responsive-open #adminmenuwrap{display:block}#post-body-content{min-width:0}#titlediv #title-prompt-text,#wp-fullscreen-title-prompt-text{padding:10px}.post-format-options{padding-right:0}.post-format-options a{margin-right:5px;margin-bottom:5px;min-width:52px}.post-format-options .post-format-title{font-size:11px}.post-format-options a div{height:28px;width:28px}.post-format-options a div:before{font-size:26px!important}.postbox{font-size:14px}#poststuff h3,.metabox-holder h3{padding:12px}.postbox .handlediv{margin-top:3px}#post-visibility-select{line-height:280%}.wp-core-ui .save-post-visibility,.wp-core-ui .save-timestamp{vertical-align:middle;margin-right:15px}.timestamp-wrap select#mm{display:block;width:100%;margin-bottom:10px}.timestamp-wrap #jj,.timestamp-wrap #aa,.timestamp-wrap #hh,.timestamp-wrap #mn{padding:12px 3px;font-size:14px;margin-bottom:5px;width:auto;text-align:center}ul.category-tabs{margin:30px 0 15px}ul.category-tabs li.tabs{padding:15px}.press-this ul.category-tabs li.tabs{padding:3px 5px 5px}ul.categorychecklist li{margin-bottom:15px}ul.categorychecklist ul{margin-top:15px}.category-add input[type=text],.category-add select{max-width:none;margin-bottom:15px}.tagsdiv .newtag{width:100%;padding:25px 10px;margin-bottom:15px}.tagchecklist{margin:25px 10px}.tagchecklist span{font-size:16px;line-height:120%}#diff-next-revision,#diff-previous-revision{margin-top:-1em}table.diff{-ms-word-break:break-all;word-break:break-all;word-wrap:break-word}#commentstatusdiv p{line-height:2.8}.mceToolbar *{white-space:normal!important}.mceToolbar tr,.mceToolbar td{float:left!important}.wp_themeSkin a.mceButton{width:30px;height:30px}.wp_themeSkin .mceButton .mceIcon{margin-top:5px;margin-left:5px}.wp_themeSkin .mceSplitButton{margin-top:1px}.wp_themeSkin .mceSplitButton td a.mceAction{padding-top:6px;padding-bottom:6px;padding-left:6px;padding-right:3px}.wp_themeSkin .mceSplitButton td a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen{padding-top:6px;padding-bottom:6px;background-position:1px 6px}.wp_themeSkin table.mceListBox{margin:5px}div.quicktags-toolbar input{padding:10px 20px}#wp-content-editor-tools{overflow:hidden;padding:20px 15px 1px 0;top:1px}a.wp-switch-editor{font-size:16px;line-height:1em;margin:3px 0 0 7px;padding:12px 15px}#wp-content-media-buttons a{font-size:16px;line-height:37px;height:39px;padding:0 20px 0 15px}.wp-media-buttons span.wp-media-buttons-icon,.wp-media-buttons span.jetpack-contact-form-icon{width:22px!important;margin-top:-3px!important;margin-left:-5px!important}.wp-media-buttons .add_media span.wp-media-buttons-icon:before,.wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before{font-size:20px!important}#content_wp_fullscreen{display:none}.misc-pub-section{padding:20px 10px}.misc-pub-section>a{float:right;font-size:16px}#delete-action,#publishing-action{line-height:47px}.subsubsub{font-size:16px;text-align:center;margin-bottom:15px}.tablenav{height:auto}.tablenav.top{margin:0}.tablenav.bottom{position:relative;margin-top:15px}.tablenav br{display:none}.tablenav br.clear{display:block}#wpbody-content{padding-bottom:100px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.tablenav.top .actions,.view-switch{display:none}.tablenav.top .displaying-num{display:none}.tablenav.bottom .displaying-num{position:absolute;right:0;top:10px;font-size:14px}.tablenav-pages{width:100%;text-align:center;margin:0 0 25px}.tablenav.bottom .tablenav-pages{margin-top:25px}.tablenav.top .tablenav-pages.one-page{display:none}.tablenav.bottom .tablenav-pages.one-page{margin:15px 0 0;height:0}.tablenav-pages .pagination-links .paging-input{font-size:18px}.tablenav-pages .pagination-links a{padding:8px 20px 11px;font-size:18px;background:rgba(0,0,0,.05)}.tablenav-pages .pagination-links .current-page{padding:10px;font-size:14px}.form-wrap>p{display:none}.comment-count{font-size:14px}.fixed .column-date,.fixed .column-author,.column-categories,.column-tags,.tags .column-description,.media .column-parent,.users .column-email,.users .column-name,.sites .column-registered,.sites .column-users{display:none}.fixed .column-comment .comment-author{display:block}.column-title{width:85%}.fixed .column-comments,.widefat .check-column{width:35px}.widefat thead .check-column,.widefat tfoot .check-column{padding:10px 0}.widefat *{word-wrap:normal}#wpbody-content .quick-edit-row-post .inline-edit-col-left,#wpbody-content .quick-edit-row-post .inline-edit-col-right,#wpbody-content .inline-edit-row-post .inline-edit-col-center,#wpbody-content .quick-edit-row-page .inline-edit-col-left,#wpbody-content .quick-edit-row-page .inline-edit-col-right,#wpbody-content .bulk-edit-row-post .inline-edit-col-right,#wpbody-content .bulk-edit-row .inline-edit-col-left,#wpbody-content .bulk-edit-row-page .inline-edit-col-right,#wpbody-content .bulk-edit-row .inline-edit-col-bottom{float:none;width:100%}#wpbody-content .quick-edit-row fieldset .inline-edit-col label,#wpbody-content .quick-edit-row fieldset .inline-edit-group label,#wpbody-content .bulk-edit-row fieldset .inline-edit-col label,#wpbody-content .bulk-edit-row fieldset .inline-edit-group label{max-width:none;float:none;margin-bottom:5px}#wpbody .bulk-edit-row fieldset select{display:block;width:100%;max-width:none;-moz-box-sizing:border-box;box-sizing:border-box}.inline-edit-row fieldset ul.cat-checklist label,.inline-edit-row #bulk-titles div{font-size:16px}.inline-edit-row fieldset label span.title{float:none}.inline-edit-row fieldset label.inline-edit-tags{padding:0 .5em}.inline-edit-row fieldset .inline-edit-col label.inline-edit-tags{padding:0}.inline-edit-row fieldset label span.input-text-wrap{margin-left:0}.inline-edit-row fieldset input[name=jj],.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=mn]{width:3em}.inline-edit-row fieldset input[name=aa]{width:4.5em}#bulk-titles div{margin:.8em .3em}#bulk-titles div a{height:22px}.tags .column-posts{width:50px}.tags .column-slug{width:30%}.comments .column-response{width:35%}.users .column-role{width:35%}.sites .column-blogname{width:55%}#wpbody-content #update-themes-table .plugin-title{width:auto}.form-table{-moz-box-sizing:border-box;box-sizing:border-box}.form-table th,.form-table td{display:block;width:auto;vertical-align:middle}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-right:10px}textarea,input{font-size:16px}.form-table td input[type=text],.form-table td input[type=password],.form-table td select,.form-table td textarea,.form-table span.description,#profile-page .form-table textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;box-sizing:border-box;-moz-box-sizing:border-box}input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text,input[type=number].small-text,.form-table input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;padding:8px}.form-table span.description{padding:4px 0 0;line-height:1.4em}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{padding-top:8px;padding-left:0}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#utc-time{margin-top:10px}#utc-time,#local-time{display:block;float:none;padding:0;line-height:2}.wp_attachment_details label[for=content]{font-size:14px;line-height:1.5em}.link-manager-php #posts-filter{margin-top:25px}.link-manager-php .tablenav.bottom{overflow:hidden}.links-table #link_rel{max-width:none}.links-table th,.links-table td{padding:10px 0}body.nav-menus-php{min-width:0!important}#nav-menus-frame{margin-left:0;float:none;width:100%}#wpbody-content #menu-settings-column{display:block;width:100%;float:none;margin-left:0}#side-sortables .add-menu-item-tabs{margin:15px 0 14px}ul.add-menu-item-tabs li.tabs{padding:13px 15px 14px}.nav-menus-php .item-controls .item-type{margin-top:2px}.nav-menus-php .customlinkdiv .howto input{width:65%}.nav-menus-php .quick-search{width:85%}#menu-management-liquid{margin-top:25px}.nav-menus-php .menu-name-label.howto span{margin-top:13px}.menu-name-label #menu-name{margin-top:4px}.nav-menus-php .major-publishing-actions .publishing-action{margin-top:6px}.nav-menus-php .delete-action{font-size:14px;line-height:50px;margin-top:12px}.menu-item-bar .menu-item-handle,.menu-item-settings,.description-wide{width:auto}.menu-item-settings{padding:10px}.menu-item-settings .description-thin,.menu-item-settings .description-wide{width:100%;height:auto}.menu-item-settings input{width:100%}.menu-settings dl{padding-left:0}.menu-settings dd{float:none;width:100%;margin-bottom:15px}.menu-settings dt{float:none;width:auto;margin-left:0;margin-bottom:15px}.available-theme .action-links .delete-theme{float:none;margin:0;padding:0;clear:both}.available-theme .action-links .delete-theme a{padding:0}#templateside{float:none;width:auto}#templateside li{margin:0}#templateside li a{display:block;padding:5px}#templateside .highlight{padding:5px;margin-left:-5px;margin-top:-5px}#template div{float:none;margin:0;width:auto}#template textarea{width:100%}.fileedit-sub .alignright{margin-top:15px}.wp-list-table.plugins{position:relative;margin-top:35px;margin-bottom:50px}.wp-list-table.plugins thead .column-description,#wpbody-content .wp-list-table.plugins tfoot .column-description,.wp-list-table.plugins th#description{display:none}#wpbody-content .wp-list-table.plugins,#wpbody-content .wp-list-table.plugins thead,#wpbody-content .wp-list-table.plugins tbody,#wpbody-content .wp-list-table.plugins tr,#wpbody-content .wp-list-table.plugins .column-description,#wpbody-content .wp-list-table.plugins .plugin-title,#wpbody-content .wp-list-table.plugins .theme-title,#wpbody-content .wp-list-table.plugins .plugin-update,#wpbody-content .wp-list-table.plugins .manage-column.column-name{display:block;width:auto}.wp-list-table.plugins thead,.wp-list-table.plugins tfoot{position:absolute;top:-35px;left:0;right:0;width:auto;height:35px}.wp-list-table.plugins tfoot{bottom:-35px;top:auto}.active,.inactive{padding-top:0}.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-top:13px;padding-bottom:4px}.plugins tr.active+tr.inactive th.check-column,.plugins tr.active+tr.inactive td,.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title,.wp-list-table.plugins tbody th{box-shadow:none;-webkit-box-shadow:none}.plugins tbody{padding:1px 0 0}.plugins tr.active+tr.inactive td.column-description{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);-ms-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);-o-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins tr.active+tr.inactive th.check-column,.plugins tr.active+tr.inactive td{border-top:0}.wp-list-table.plugins .column-description{padding-top:0}.wp-list-table.plugins .manage-column.column-name,.wp-list-table.plugins .column-description,.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-right:12px;padding-left:46px}.wp-list-table.plugins tr{position:relative}.wp-list-table.plugins th.check-column,.wp-list-table.plugins tr.update th.check-column{position:absolute;height:auto;top:0;bottom:0;left:0;padding-left:2px;padding-top:18px}.wp-list-table.plugins thead th.check-column,.wp-list-table.plugins tfoot th.check-column{padding-left:3px;padding-top:11px;background:0 0}.widefat tbody th.check-column input[type=checkbox]{margin-top:-3px;margin-left:8px}.wp-list-table.plugins .active .check-column input,.wp-list-table.plugins .update .check-column input{margin-left:5px}.wp-list-table.plugins thead .check-column input,.wp-list-table.plugins tfoot .check-column input{margin-top:-6px}.wp-list-table.plugins .active th.check-column{background:0 0}.wp-list-table.plugins .plugin-title strong,.wp-list-table.plugins .theme-title strong{font-size:1.4em;line-height:1.6em}table.plugin-install .column-name,table.plugin-install .column-version,table.plugin-install .column-rating,table.plugin-install .column-description{display:block;width:auto}table.plugin-install th.column-name,table.plugin-install th.column-version,table.plugin-install th.column-rating,table.plugin-install th.column-description{display:none}table.plugin-install td.column-name strong{font-size:1.4em;line-height:1.6em}table.plugin-install #the-list td{-webkit-box-shadow:none;box-shadow:none}table.plugin-install #the-list tr{display:block;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#dashboard_recent_comments #the-comment-list .comment-item .avatar{height:30px;width:30px;margin:4px 10px 5px 0}.about-wrap .feature-section.one-col>div,.about-wrap .feature-section.two-col>div,.about-wrap .three-col.about-updates>div{width:100%;margin:0;float:none}.about-wrap .about-colors .color-option{width:49%}.comment-ays{border-bottom:0}#wpfooter{display:none}#comments-form .checkforspam{display:none}.press-this a.wp-switch-editor{font:13px/19px "Open Sans",sans-serif;margin:5px 0 0 5px;padding:3px 8px 4px}.press-this #wp-content-media-buttons a{padding:0;line-height:normal;height:auto}.press-this #wp-content-editor-tools{padding:0;top:3px}.press-this .category-tabs{margin-top:0}.press-this .tagsdiv .newtag{width:120px;padding:3px 5px;margin-bottom:0}.press-this .tagchecklist{padding:0;margin-bottom:0}.press-this .wp_themeSkin a.mceButton{width:20px;height:20px}.press-this .wp_themeSkin .mceButton .mceIcon{margin:0}.press-this #poststuff h3,.press-this .metabox-holder h3{padding:7px 12px}.interim-login input[type=checkbox],.press-this input[type=checkbox],.press-this input[type=radio]{height:16px;width:16px}.interim-login input[type=checkbox]:checked:before,.press-this input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px 0 0 -4px}.press-this input[type=radio]:checked:before{font:400 21px/1 dashicons;width:6px;height:6px;margin:4px}.press-this ul.categorychecklist ul,.press-this ul.categorychecklist li{margin-top:0;margin-bottom:0}.press-this div.quicktags-toolbar input{padding:2px 4px}.press-this textarea,.press-this input{font-size:14px}.press-this .tagchecklist span{font-size:13px;line-height:1.8em}}@media only screen and (max-width:500px){.about-wrap{margin-right:20px;margin-left:10px}.about-wrap h1,.about-text{margin-right:0}.about-text{margin-bottom:.25em}.about-wrap .wp-badge{position:relative;margin-bottom:1.5em;width:100%}.about-wrap .feature-section.three-col div{width:100%;float:none}.about-wrap .three-col.about-updates .col-1{padding:0;float:none}.about-wrap .three-col.about-updates .col-2{margin:0 0 20px;width:100%;float:none}#wp-content-media-buttons a{font-size:14px;padding:0 10px}}@media screen and (max-width:782px){#wpadminbar #wp-admin-bar-menu-toggle a{display:block;padding:0;overflow:hidden;outline:0;text-decoration:none;border:1px solid transparent;background:0 0;height:44px;margin-left:-1px}li#wp-admin-bar-menu-toggle{display:block}#wpadminbar #wp-admin-bar-menu-toggle a:hover{border:1px solid transparent}#wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{content:'\f228';display:inline-block;float:left;font:400 40px/45px Dashicons;vertical-align:middle;outline:0;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:44px;width:50px;padding:0;border:0;text-align:center;text-decoration:none;box-sizing:border-box;-moz-box-sizing:border-box}}@media screen and (max-width:600px){#adminmenuwrap,#adminmenuback{display:none}.wp-responsive-open #adminmenuwrap,.wp-responsive-open #adminmenuback{display:block}#wpwrap.wp-responsive-open{overflow-x:hidden}html.wp-toolbar{padding-top:0}#wpbody{padding-top:46px}.auto-fold #adminmenu{top:46px}#wp-responsive-overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:400}.welcome-panel .welcome-panel-close{overflow:hidden;text-indent:100%;white-space:nowrap;width:20px;height:20px;right:0;padding:5px}#welcome-panel.welcome-panel .welcome-panel-close::before{font-size:20px;margin:0}div#post-body.metabox-holder.columns-1{overflow-x:hidden}.color-option{width:49%}} \ No newline at end of file diff --git a/src/wp-admin/custom-background.php b/src/wp-admin/custom-background.php new file mode 100644 index 0000000..e5666e7 --- /dev/null +++ b/src/wp-admin/custom-background.php @@ -0,0 +1,427 @@ +admin_header_callback = $admin_header_callback; + $this->admin_image_div_callback = $admin_image_div_callback; + + add_action( 'admin_menu', array( $this, 'init' ) ); + add_action( 'wp_ajax_set-background-image', array( $this, 'wp_set_background_image' ) ); + } + + /** + * Set up the hooks for the Custom Background admin page. + * + * @since 3.0.0 + */ + function init() { + if ( ! current_user_can('edit_theme_options') ) + return; + + $this->page = $page = add_theme_page(__('Background'), __('Background'), 'edit_theme_options', 'custom-background', array($this, 'admin_page')); + + add_action("load-$page", array($this, 'admin_load')); + add_action("load-$page", array($this, 'take_action'), 49); + add_action("load-$page", array($this, 'handle_upload'), 49); + + if ( $this->admin_header_callback ) + add_action("admin_head-$page", $this->admin_header_callback, 51); + } + + /** + * Set up the enqueue for the CSS & JavaScript files. + * + * @since 3.0.0 + */ + function admin_load() { + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __( 'You can customize the look of your site without touching any of your theme’s code by using a custom background. Your background can be an image or a color.' ) . '

    ' . + '

    ' . __( 'To use a background image, simply upload it or choose an image that has already been uploaded to your Media Library by clicking the “Choose Image” button. You can display a single instance of your image, or tile it to fill the screen. You can have your background fixed in place, so your site content moves on top of it, or you can have it scroll with your site.' ) . '

    ' . + '

    ' . __( 'You can also choose a background color by clicking the Select Color button and either typing in a legitimate HTML hex value, e.g. “#ff0000” for red, or by choosing a color using the color picker.' ) . '

    ' . + '

    ' . __( 'Don’t forget to click on the Save Changes button when you are finished.' ) . '

    ' + ) ); + + get_current_screen()->set_help_sidebar( + '

    ' . __( 'For more information:' ) . '

    ' . + '

    ' . __( 'Documentation on Custom Background' ) . '

    ' . + '

    ' . __( 'Support Forums' ) . '

    ' + ); + + wp_enqueue_media(); + wp_enqueue_script('custom-background'); + wp_enqueue_style('wp-color-picker'); + } + + /** + * Execute custom background modification. + * + * @since 3.0.0 + */ + function take_action() { + + if ( empty($_POST) ) + return; + + if ( isset($_POST['reset-background']) ) { + check_admin_referer('custom-background-reset', '_wpnonce-custom-background-reset'); + remove_theme_mod('background_image'); + remove_theme_mod('background_image_thumb'); + $this->updated = true; + return; + } + + if ( isset($_POST['remove-background']) ) { + // @TODO: Uploaded files are not removed here. + check_admin_referer('custom-background-remove', '_wpnonce-custom-background-remove'); + set_theme_mod('background_image', ''); + set_theme_mod('background_image_thumb', ''); + $this->updated = true; + wp_safe_redirect( $_POST['_wp_http_referer'] ); + return; + } + + if ( isset($_POST['background-repeat']) ) { + check_admin_referer('custom-background'); + if ( in_array($_POST['background-repeat'], array('repeat', 'no-repeat', 'repeat-x', 'repeat-y')) ) + $repeat = $_POST['background-repeat']; + else + $repeat = 'repeat'; + set_theme_mod('background_repeat', $repeat); + } + + if ( isset($_POST['background-position-x']) ) { + check_admin_referer('custom-background'); + if ( in_array($_POST['background-position-x'], array('center', 'right', 'left')) ) + $position = $_POST['background-position-x']; + else + $position = 'left'; + set_theme_mod('background_position_x', $position); + } + + if ( isset($_POST['background-attachment']) ) { + check_admin_referer('custom-background'); + if ( in_array($_POST['background-attachment'], array('fixed', 'scroll')) ) + $attachment = $_POST['background-attachment']; + else + $attachment = 'fixed'; + set_theme_mod('background_attachment', $attachment); + } + + if ( isset($_POST['background-color']) ) { + check_admin_referer('custom-background'); + $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['background-color']); + if ( strlen($color) == 6 || strlen($color) == 3 ) + set_theme_mod('background_color', $color); + else + set_theme_mod('background_color', ''); + } + + $this->updated = true; + } + + /** + * Display the custom background page. + * + * @since 3.0.0 + */ + function admin_page() { +?> +
    +

    +updated) ) { ?> +
    +

    Visit your site to see how it looks.' ), home_url( '/' ) ); ?>

    +
    +admin_image_div_callback ) { + call_user_func($this->admin_image_div_callback); + } else { +?> +

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + + +
    + +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +

    +
    + + + + +

    +

    +
    + +

    +
    +
    + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + +
    + + +
    + + /> +
    + + + +
    + +
    + false); + + $uploaded_file = $_FILES['import']; + $wp_filetype = wp_check_filetype_and_ext( $uploaded_file['tmp_name'], $uploaded_file['name'], false ); + if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) ) + wp_die( __( 'The uploaded file is not a valid image. Please try again.' ) ); + + $file = wp_handle_upload($uploaded_file, $overrides); + + if ( isset($file['error']) ) + wp_die( $file['error'] ); + + $url = $file['url']; + $type = $file['type']; + $file = $file['file']; + $filename = basename($file); + + // Construct the object array + $object = array( + 'post_title' => $filename, + 'post_content' => $url, + 'post_mime_type' => $type, + 'guid' => $url, + 'context' => 'custom-background' + ); + + // Save the data + $id = wp_insert_attachment($object, $file); + + // Add the meta-data + wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); + update_post_meta( $id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) ); + + set_theme_mod('background_image', esc_url_raw($url)); + + $thumbnail = wp_get_attachment_image_src( $id, 'thumbnail' ); + set_theme_mod('background_image_thumb', esc_url_raw( $thumbnail[0] ) ); + + /** This action is documented in wp-admin/custom-header.php */ + do_action( 'wp_create_file_in_uploads', $file, $id ); // For replication + $this->updated = true; + } + + /** + * Unused since 3.5.0. + * + * @since 3.4.0 + */ + function attachment_fields_to_edit( $form_fields ) { + return $form_fields; + } + + /** + * Unused since 3.5.0. + * + * @since 3.4.0 + */ + function filter_upload_tabs( $tabs ) { + return $tabs; + } + + public function wp_set_background_image() { + if ( ! current_user_can('edit_theme_options') || ! isset( $_POST['attachment_id'] ) ) exit; + $attachment_id = absint($_POST['attachment_id']); + /** This filter is documented in wp-admin/includes/media.php */ + $sizes = array_keys(apply_filters( 'image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size')) )); + $size = 'thumbnail'; + if ( in_array( $_POST['size'], $sizes ) ) + $size = esc_attr( $_POST['size'] ); + + update_post_meta( $attachment_id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) ); + $url = wp_get_attachment_image_src( $attachment_id, $size ); + $thumbnail = wp_get_attachment_image_src( $attachment_id, 'thumbnail' ); + set_theme_mod( 'background_image', esc_url_raw( $url[0] ) ); + set_theme_mod( 'background_image_thumb', esc_url_raw( $thumbnail[0] ) ); + exit; + } +} diff --git a/src/wp-admin/custom-header.php b/src/wp-admin/custom-header.php new file mode 100644 index 0000000..7f222f7 --- /dev/null +++ b/src/wp-admin/custom-header.php @@ -0,0 +1,1043 @@ +admin_header_callback = $admin_header_callback; + $this->admin_image_div_callback = $admin_image_div_callback; + + add_action( 'admin_menu', array( $this, 'init' ) ); + } + + /** + * Set up the hooks for the Custom Header admin page. + * + * @since 2.1.0 + */ + function init() { + if ( ! current_user_can('edit_theme_options') ) + return; + + $this->page = $page = add_theme_page(__('Header'), __('Header'), 'edit_theme_options', 'custom-header', array($this, 'admin_page')); + + add_action("admin_print_scripts-$page", array($this, 'js_includes')); + add_action("admin_print_styles-$page", array($this, 'css_includes')); + add_action("admin_head-$page", array($this, 'help') ); + add_action("admin_head-$page", array($this, 'take_action'), 50); + add_action("admin_head-$page", array($this, 'js'), 50); + if ( $this->admin_header_callback ) + add_action("admin_head-$page", $this->admin_header_callback, 51); + } + + /** + * Adds contextual help. + * + * @since 3.0.0 + */ + function help() { + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __( 'This screen is used to customize the header section of your theme.') . '

    ' . + '

    ' . __( 'You can choose from the theme’s default header images, or use one of your own. You can also customize how your Site Title and Tagline are displayed.') . '

    ' + ) ); + + get_current_screen()->add_help_tab( array( + 'id' => 'set-header-image', + 'title' => __('Header Image'), + 'content' => + '

    ' . __( 'You can set a custom image header for your site. Simply upload the image and crop it, and the new header will go live immediately. Alternatively, you can use an image that has already been uploaded to your Media Library by clicking the “Choose Image” button.' ) . '

    ' . + '

    ' . __( 'Some themes come with additional header images bundled. If you see multiple images displayed, select the one you’d like and click the “Save Changes” button.' ) . '

    ' . + '

    ' . __( 'If your theme has more than one default header image, or you have uploaded more than one custom header image, you have the option of having WordPress display a randomly different image on each page of your site. Click the “Random” radio button next to the Uploaded Images or Default Images section to enable this feature.') . '

    ' . + '

    ' . __( 'If you don’t want a header image to be displayed on your site at all, click the “Remove Header Image” button at the bottom of the Header Image section of this page. If you want to re-enable the header image later, you just have to select one of the other image options and click “Save Changes”.') . '

    ' + ) ); + + get_current_screen()->add_help_tab( array( + 'id' => 'set-header-text', + 'title' => __('Header Text'), + 'content' => + '

    ' . sprintf( __( 'For most themes, the header text is your Site Title and Tagline, as defined in the General Settings section.' ), admin_url( 'options-general.php' ) ) . '

    ' . + '

    ' . __( 'In the Header Text section of this page, you can choose whether to display this text or hide it. You can also choose a color for the text by clicking the Select Color button and either typing in a legitimate HTML hex value, e.g. “#ff0000” for red, or by choosing a color using the color picker.' ) . '

    ' . + '

    ' . __( 'Don’t forget to click “Save Changes” when you’re done!') . '

    ' + ) ); + + get_current_screen()->set_help_sidebar( + '

    ' . __( 'For more information:' ) . '

    ' . + '

    ' . __( 'Documentation on Custom Header' ) . '

    ' . + '

    ' . __( 'Support Forums' ) . '

    ' + ); + } + + /** + * Get the current step. + * + * @since 2.6.0 + * + * @return int Current step + */ + function step() { + if ( ! isset( $_GET['step'] ) ) + return 1; + + $step = (int) $_GET['step']; + if ( $step < 1 || 3 < $step || + ( 2 == $step && ! wp_verify_nonce( $_REQUEST['_wpnonce-custom-header-upload'], 'custom-header-upload' ) ) || + ( 3 == $step && ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'custom-header-crop-image' ) ) + ) + return 1; + + return $step; + } + + /** + * Set up the enqueue for the JavaScript files. + * + * @since 2.1.0 + */ + function js_includes() { + $step = $this->step(); + + if ( ( 1 == $step || 3 == $step ) ) { + wp_enqueue_media(); + wp_enqueue_script( 'custom-header' ); + if ( current_theme_supports( 'custom-header', 'header-text' ) ) + wp_enqueue_script( 'wp-color-picker' ); + } elseif ( 2 == $step ) { + wp_enqueue_script('imgareaselect'); + } + } + + /** + * Set up the enqueue for the CSS files + * + * @since 2.7 + */ + function css_includes() { + $step = $this->step(); + + if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) ) + wp_enqueue_style( 'wp-color-picker' ); + elseif ( 2 == $step ) + wp_enqueue_style('imgareaselect'); + } + + /** + * Execute custom header modification. + * + * @since 2.6.0 + */ + function take_action() { + if ( ! current_user_can('edit_theme_options') ) + return; + + if ( empty( $_POST ) ) + return; + + $this->updated = true; + + if ( isset( $_POST['resetheader'] ) ) { + check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); + $this->reset_header_image(); + return; + } + + if ( isset( $_POST['removeheader'] ) ) { + check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); + $this->remove_header_image(); + return; + } + + if ( isset( $_POST['text-color'] ) && ! isset( $_POST['display-header-text'] ) ) { + check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); + set_theme_mod( 'header_textcolor', 'blank' ); + } elseif ( isset( $_POST['text-color'] ) ) { + check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); + $_POST['text-color'] = str_replace( '#', '', $_POST['text-color'] ); + $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['text-color']); + if ( strlen($color) == 6 || strlen($color) == 3 ) + set_theme_mod('header_textcolor', $color); + elseif ( ! $color ) + set_theme_mod( 'header_textcolor', 'blank' ); + } + + if ( isset( $_POST['default-header'] ) ) { + check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); + $this->set_header_image( $_POST['default-header'] ); + return; + } + } + + /** + * Process the default headers + * + * @since 3.0.0 + */ + function process_default_headers() { + global $_wp_default_headers; + + if ( !empty($this->headers) ) + return; + + if ( !isset($_wp_default_headers) ) + return; + + $this->default_headers = $_wp_default_headers; + $template_directory_uri = get_template_directory_uri(); + $stylesheet_directory_uri = get_stylesheet_directory_uri(); + foreach ( array_keys($this->default_headers) as $header ) { + $this->default_headers[$header]['url'] = sprintf( $this->default_headers[$header]['url'], $template_directory_uri, $stylesheet_directory_uri ); + $this->default_headers[$header]['thumbnail_url'] = sprintf( $this->default_headers[$header]['thumbnail_url'], $template_directory_uri, $stylesheet_directory_uri ); + } + + } + + /** + * Display UI for selecting one of several default headers. + * + * Show the random image option if this theme has multiple header images. + * Random image option is on by default if no header has been set. + * + * @since 3.0.0 + */ + function show_header_selector( $type = 'default' ) { + if ( 'default' == $type ) { + $headers = $this->default_headers; + } else { + $headers = get_uploaded_header_images(); + $type = 'uploaded'; + } + + if ( 1 < count( $headers ) ) { + echo '
    '; + echo ''; + echo '
    '; + } + + echo '
    '; + foreach ( $headers as $header_key => $header ) { + $header_thumbnail = $header['thumbnail_url']; + $header_url = $header['url']; + $header_desc = empty( $header['description'] ) ? '' : $header['description']; + echo '
    '; + echo ''; + echo '
    '; + } + echo '
    '; + } + + /** + * Execute Javascript depending on step. + * + * @since 2.1.0 + */ + function js() { + $step = $this->step(); + if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) ) + $this->js_1(); + elseif ( 2 == $step ) + $this->js_2(); + } + + /** + * Display Javascript based on Step 1 and 3. + * + * @since 2.6.0 + */ + function js_1() { ?> + + + +process_default_headers(); +?> + +
    +

    + +updated ) ) { ?> +
    +

    Visit your site to see how it looks.' ), home_url( '/' ) ); ?>

    +
    + + +

    + + + + + + + + + + + + + + + + + + +
    + admin_image_div_callback ) { + call_user_func( $this->admin_image_div_callback ); + } else { + $custom_header = get_custom_header(); + $header_image_style = 'background-image:url(' . esc_url( get_header_image() ) . ');'; + if ( $custom_header->width ) + $header_image_style .= 'max-width:' . $custom_header->width . 'px;'; + if ( $custom_header->height ) + $header_image_style .= 'height:' . $custom_header->height . 'px;'; + ?> + + +
    +


    + %1$d × %2$d pixels will be used as-is.' ) . '
    ', get_theme_support( 'custom-header', 'width' ), get_theme_support( 'custom-header', 'height' ) ); + } elseif ( current_theme_supports( 'custom-header', 'flex-height' ) ) { + if ( ! current_theme_supports( 'custom-header', 'flex-width' ) ) + printf( __( 'Images should be at least %1$d pixels wide.' ) . ' ', get_theme_support( 'custom-header', 'width' ) ); + } elseif ( current_theme_supports( 'custom-header', 'flex-width' ) ) { + if ( ! current_theme_supports( 'custom-header', 'flex-height' ) ) + printf( __( 'Images should be at least %1$d pixels tall.' ) . ' ', get_theme_support( 'custom-header', 'height' ) ); + } + if ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) { + if ( current_theme_supports( 'custom-header', 'width' ) ) + printf( __( 'Suggested width is %1$d pixels.' ) . ' ', get_theme_support( 'custom-header', 'width' ) ); + if ( current_theme_supports( 'custom-header', 'height' ) ) + printf( __( 'Suggested height is %1$d pixels.' ) . ' ', get_theme_support( 'custom-header', 'height' ) ); + } + ?>

    +
    +

    +
    + + + + +

    + 'custom-header', + 'step' => 2, + '_wpnonce-custom-header-upload' => wp_create_nonce('custom-header-upload'), + ), admin_url('themes.php') ) ); + ?> +

    +
    + +

    +
    +
    + +
    + + + + + + + + default_headers ) ) : ?> + + + + + + + + + + + + + + + + +
    +

    + show_header_selector( 'uploaded' ); + ?> +
    + +

    + +

    + + show_header_selector( 'default' ); + ?> +
    +

    + +
    +

    + +
    + + + +

    + + + + + + + + + + + + + +
    +

    + +

    +
    +

    +'; + if ( $default_color ) + echo ' ' . sprintf( _x( 'Default: %s', 'color' ), $default_color ) . ''; +} +?> +

    +
    + + + +
    +
    + +step_2_manage_upload()); + } + + if ( file_exists( $file ) ) { + list( $width, $height, $type, $attr ) = getimagesize( $file ); + } else { + $data = wp_get_attachment_metadata( $attachment_id ); + $height = isset( $data[ 'height' ] ) ? $data[ 'height' ] : 0; + $width = isset( $data[ 'width' ] ) ? $data[ 'width' ] : 0; + unset( $data ); + } + + $max_width = 0; + // For flex, limit size of image displayed to 1500px unless theme says otherwise + if ( current_theme_supports( 'custom-header', 'flex-width' ) ) + $max_width = 1500; + + if ( current_theme_supports( 'custom-header', 'max-width' ) ) + $max_width = max( $max_width, get_theme_support( 'custom-header', 'max-width' ) ); + $max_width = max( $max_width, get_theme_support( 'custom-header', 'width' ) ); + + // If flexible height isn't supported and the image is the exact right size + if ( ! current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' ) + && $width == get_theme_support( 'custom-header', 'width' ) && $height == get_theme_support( 'custom-header', 'height' ) ) + { + // Add the meta-data + if ( file_exists( $file ) ) + wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) ); + + $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) ); + + /** + * Fires after the header image is set or an error is returned. + * + * @since 2.1.0 + * + * @param string $file Path to the file. + * @param int $attachment_id Attachment ID. + */ + do_action( 'wp_create_file_in_uploads', $file, $attachment_id ); // For replication + + return $this->finished(); + } elseif ( $width > $max_width ) { + $oitar = $width / $max_width; + $image = wp_crop_image($attachment_id, 0, 0, $width, $height, $max_width, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file)); + if ( ! $image || is_wp_error( $image ) ) + wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) ); + + /** This filter is documented in wp-admin/custom-header.php */ + $image = apply_filters( 'wp_create_file_in_uploads', $image, $attachment_id ); // For replication + + $url = str_replace(basename($url), basename($image), $url); + $width = $width / $oitar; + $height = $height / $oitar; + } else { + $oitar = 1; + } + ?> + +
    +

    + +
    +

    +

    + +
    + +
    + + + + + + + + + + + + +

    + + +

    +
    +
    + false); + + $uploaded_file = $_FILES['import']; + $wp_filetype = wp_check_filetype_and_ext( $uploaded_file['tmp_name'], $uploaded_file['name'], false ); + if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) ) + wp_die( __( 'The uploaded file is not a valid image. Please try again.' ) ); + + $file = wp_handle_upload($uploaded_file, $overrides); + + if ( isset($file['error']) ) + wp_die( $file['error'], __( 'Image Upload Error' ) ); + + $url = $file['url']; + $type = $file['type']; + $file = $file['file']; + $filename = basename($file); + + // Construct the object array + $object = array( + 'post_title' => $filename, + 'post_content' => $url, + 'post_mime_type' => $type, + 'guid' => $url, + 'context' => 'custom-header' + ); + + // Save the data + $attachment_id = wp_insert_attachment( $object, $file ); + return compact( 'attachment_id', 'file', 'filename', 'url', 'type' ); + } + + /** + * Display third step of custom header image page. + * + * @since 2.1.0 + */ + function step_3() { + check_admin_referer( 'custom-header-crop-image' ); + + if ( ! current_theme_supports( 'custom-header', 'uploads' ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + if ( ! empty( $_POST['skip-cropping'] ) && ! ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + if ( $_POST['oitar'] > 1 ) { + $_POST['x1'] = $_POST['x1'] * $_POST['oitar']; + $_POST['y1'] = $_POST['y1'] * $_POST['oitar']; + $_POST['width'] = $_POST['width'] * $_POST['oitar']; + $_POST['height'] = $_POST['height'] * $_POST['oitar']; + } + + $attachment_id = absint( $_POST['attachment_id'] ); + $original = get_attached_file($attachment_id); + + + $max_width = 0; + // For flex, limit size of image displayed to 1500px unless theme says otherwise + if ( current_theme_supports( 'custom-header', 'flex-width' ) ) + $max_width = 1500; + + if ( current_theme_supports( 'custom-header', 'max-width' ) ) + $max_width = max( $max_width, get_theme_support( 'custom-header', 'max-width' ) ); + $max_width = max( $max_width, get_theme_support( 'custom-header', 'width' ) ); + + if ( ( current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' ) ) || $_POST['width'] > $max_width ) + $dst_height = absint( $_POST['height'] * ( $max_width / $_POST['width'] ) ); + elseif ( current_theme_supports( 'custom-header', 'flex-height' ) && current_theme_supports( 'custom-header', 'flex-width' ) ) + $dst_height = absint( $_POST['height'] ); + else + $dst_height = get_theme_support( 'custom-header', 'height' ); + + if ( ( current_theme_supports( 'custom-header', 'flex-width' ) && ! current_theme_supports( 'custom-header', 'flex-height' ) ) || $_POST['width'] > $max_width ) + $dst_width = absint( $_POST['width'] * ( $max_width / $_POST['width'] ) ); + elseif ( current_theme_supports( 'custom-header', 'flex-width' ) && current_theme_supports( 'custom-header', 'flex-height' ) ) + $dst_width = absint( $_POST['width'] ); + else + $dst_width = get_theme_support( 'custom-header', 'width' ); + + if ( empty( $_POST['skip-cropping'] ) ) + $cropped = wp_crop_image( $attachment_id, (int) $_POST['x1'], (int) $_POST['y1'], (int) $_POST['width'], (int) $_POST['height'], $dst_width, $dst_height ); + elseif ( ! empty( $_POST['create-new-attachment'] ) ) + $cropped = _copy_image_file( $attachment_id ); + else + $cropped = get_attached_file( $attachment_id ); + + if ( ! $cropped || is_wp_error( $cropped ) ) + wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) ); + + /** This filter is documented in wp-admin/custom-header.php */ + $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication + + $parent = get_post($attachment_id); + $parent_url = $parent->guid; + $url = str_replace( basename( $parent_url ), basename( $cropped ), $parent_url ); + + $size = @getimagesize( $cropped ); + $image_type = ( $size ) ? $size['mime'] : 'image/jpeg'; + + // Construct the object array + $object = array( + 'ID' => $attachment_id, + 'post_title' => basename($cropped), + 'post_content' => $url, + 'post_mime_type' => $image_type, + 'guid' => $url, + 'context' => 'custom-header' + ); + if ( ! empty( $_POST['create-new-attachment'] ) ) + unset( $object['ID'] ); + + // Update the attachment + $attachment_id = wp_insert_attachment( $object, $cropped ); + wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $cropped ) ); + + $width = $dst_width; + $height = $dst_height; + $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) ); + + // cleanup + $medium = str_replace( basename( $original ), 'midsize-' . basename( $original ), $original ); + if ( file_exists( $medium ) ) { + /** + * Filter the path of the file to delete. + * + * @since 2.1.0 + * + * @param string $medium Path to the file to delete. + */ + @unlink( apply_filters( 'wp_delete_file', $medium ) ); + } + + if ( empty( $_POST['create-new-attachment'] ) && empty( $_POST['skip-cropping'] ) ) { + /** This filter is documented in wp-admin/custom-header.php */ + @unlink( apply_filters( 'wp_delete_file', $original ) ); + } + + return $this->finished(); + } + + /** + * Display last step of custom header image page. + * + * @since 2.1.0 + */ + function finished() { + $this->updated = true; + $this->step_1(); + } + + /** + * Display the page based on the current step. + * + * @since 2.1.0 + */ + function admin_page() { + if ( ! current_user_can('edit_theme_options') ) + wp_die(__('You do not have permission to customize headers.')); + $step = $this->step(); + if ( 2 == $step ) + $this->step_2(); + elseif ( 3 == $step ) + $this->step_3(); + else + $this->step_1(); + } + + /** + * Unused since 3.5.0. + * + * @since 3.4.0 + */ + function attachment_fields_to_edit( $form_fields ) { + return $form_fields; + } + + /** + * Unused since 3.5.0. + * + * @since 3.4.0 + */ + function filter_upload_tabs( $tabs ) { + return $tabs; + } + + /** + * Choose a header image, selected from existing uploaded and default headers, + * or provide an array of uploaded header data (either new, or from media library). + * + * @param mixed $choice Which header image to select. Allows for values of 'random-default-image', + * for randomly cycling among the default images; 'random-uploaded-image', for randomly cycling + * among the uploaded images; the key of a default image registered for that theme; and + * the key of an image uploaded for that theme (the basename of the URL). + * Or an array of arguments: attachment_id, url, width, height. All are required. + * + * @since 3.4.0 + */ + final public function set_header_image( $choice ) { + if ( is_array( $choice ) || is_object( $choice ) ) { + $choice = (array) $choice; + if ( ! isset( $choice['attachment_id'] ) || ! isset( $choice['url'] ) ) + return; + + $choice['url'] = esc_url_raw( $choice['url'] ); + + $header_image_data = (object) array( + 'attachment_id' => $choice['attachment_id'], + 'url' => $choice['url'], + 'thumbnail_url' => $choice['url'], + 'height' => $choice['height'], + 'width' => $choice['width'], + ); + + update_post_meta( $choice['attachment_id'], '_wp_attachment_is_custom_header', get_stylesheet() ); + set_theme_mod( 'header_image', $choice['url'] ); + set_theme_mod( 'header_image_data', $header_image_data ); + return; + } + + if ( in_array( $choice, array( 'remove-header', 'random-default-image', 'random-uploaded-image' ) ) ) { + set_theme_mod( 'header_image', $choice ); + remove_theme_mod( 'header_image_data' ); + return; + } + + $uploaded = get_uploaded_header_images(); + if ( $uploaded && isset( $uploaded[ $choice ] ) ) { + $header_image_data = $uploaded[ $choice ]; + + } else { + $this->process_default_headers(); + if ( isset( $this->default_headers[ $choice ] ) ) + $header_image_data = $this->default_headers[ $choice ]; + else + return; + } + + set_theme_mod( 'header_image', esc_url_raw( $header_image_data['url'] ) ); + set_theme_mod( 'header_image_data', $header_image_data ); + } + + /** + * Remove a header image. + * + * @since 3.4.0 + */ + final public function remove_header_image() { + return $this->set_header_image( 'remove-header' ); + } + + /** + * Reset a header image to the default image for the theme. + * + * This method does not do anything if the theme does not have a default header image. + * + * @since 3.4.0 + */ + final public function reset_header_image() { + $this->process_default_headers(); + $default = get_theme_support( 'custom-header', 'default-image' ); + + if ( ! $default ) + return $this->remove_header_image(); + + $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() ); + + $default_data = array(); + foreach ( $this->default_headers as $header => $details ) { + if ( $details['url'] == $default ) { + $default_data = $details; + break; + } + } + + set_theme_mod( 'header_image', $default ); + set_theme_mod( 'header_image_data', (object) $default_data ); + } +} diff --git a/src/wp-admin/customize.php b/src/wp-admin/customize.php new file mode 100644 index 0000000..b247b19 --- /dev/null +++ b/src/wp-admin/customize.php @@ -0,0 +1,248 @@ +registered; +$wp_scripts = new WP_Scripts; +$wp_scripts->registered = $registered; + +add_action( 'customize_controls_print_scripts', 'print_head_scripts', 20 ); +add_action( 'customize_controls_print_footer_scripts', '_wp_footer_scripts' ); +add_action( 'customize_controls_print_styles', 'print_admin_styles', 20 ); + +/** + * Fires when Customizer controls are initialized, before scripts are enqueued. + * + * @since 3.4.0 + */ +do_action( 'customize_controls_init' ); + +wp_enqueue_script( 'customize-controls' ); +wp_enqueue_style( 'customize-controls' ); + +wp_enqueue_script( 'accordion' ); + +/** + * Enqueue Customizer control scripts. + * + * @since 3.4.0 + */ +do_action( 'customize_controls_enqueue_scripts' ); + +// Let's roll. +@header('Content-Type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset')); + +wp_user_settings(); +_wp_admin_html_begin(); + +$body_class = 'wp-core-ui wp-customizer js'; + +if ( wp_is_mobile() ) : + $body_class .= ' mobile'; + + ?>theme()->display('Name') ) ) ); +?><?php echo $admin_title; ?> + + + + + + +
    +
    + +
    + is_theme_active() ? __( 'Save & Publish' ) : __( 'Save & Activate' ); + submit_button( $save_text, 'primary save', 'save', false ); + ?> + + + + +
    + + theme()->get_screenshot(); + $cannot_expand = ! ( $screenshot || $wp_customize->theme()->get('Description') ); + ?> + +
    +
    +
    + ' . $wp_customize->theme()->display('Name') . '' ); + ?> +
    + +
    + + + + + theme()->get('Description') ): ?> +
    theme()->display('Description'); ?>
    + +
    + +
    + +
      + sections() as $section ) + $section->maybe_render(); + ?> +
    +
    + + +
    +
    + 1, + 'template' => $wp_customize->get_template(), + 'stylesheet' => $wp_customize->get_stylesheet(), + 'preview_iframe' => true, + 'TB_iframe' => 'true' + ), home_url( '/' ) ); + + $login_url = add_query_arg( array( + 'interim-login' => 1, + 'customize-login' => 1 + ), wp_login_url() ); + + $settings = array( + 'theme' => array( + 'stylesheet' => $wp_customize->get_stylesheet(), + 'active' => $wp_customize->is_theme_active(), + ), + 'url' => array( + 'preview' => esc_url( $url ? $url : home_url( '/' ) ), + 'parent' => esc_url( admin_url() ), + 'activated' => admin_url( 'themes.php?activated=true&previewed' ), + 'ajax' => esc_url( admin_url( 'admin-ajax.php', 'relative' ) ), + 'allowed' => array_map( 'esc_url', $allowed_urls ), + 'isCrossDomain' => $cross_domain, + 'fallback' => $fallback_url, + 'home' => esc_url( home_url( '/' ) ), + 'login' => $login_url, + ), + 'browser' => array( + 'mobile' => wp_is_mobile(), + 'ios' => $is_ios, + ), + 'settings' => array(), + 'controls' => array(), + 'nonce' => array( + 'save' => wp_create_nonce( 'save-customize_' . $wp_customize->get_stylesheet() ), + 'preview' => wp_create_nonce( 'preview-customize_' . $wp_customize->get_stylesheet() ) + ), + ); + + foreach ( $wp_customize->settings() as $id => $setting ) { + $settings['settings'][ $id ] = array( + 'value' => $setting->js_value(), + 'transport' => $setting->transport, + ); + } + + foreach ( $wp_customize->controls() as $id => $control ) { + $control->to_json(); + $settings['controls'][ $id ] = $control->json; + } + + ?> + +
    + + diff --git a/src/wp-admin/edit-comments.php b/src/wp-admin/edit-comments.php new file mode 100644 index 0000000..b12264a --- /dev/null +++ b/src/wp-admin/edit-comments.php @@ -0,0 +1,254 @@ +get_pagenum(); + +$doaction = $wp_list_table->current_action(); + +if ( $doaction ) { + check_admin_referer( 'bulk-comments' ); + + if ( 'delete_all' == $doaction && !empty( $_REQUEST['pagegen_timestamp'] ) ) { + $comment_status = wp_unslash( $_REQUEST['comment_status'] ); + $delete_time = wp_unslash( $_REQUEST['pagegen_timestamp'] ); + $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = %s AND %s > comment_date_gmt", $comment_status, $delete_time ) ); + $doaction = 'delete'; + } elseif ( isset( $_REQUEST['delete_comments'] ) ) { + $comment_ids = $_REQUEST['delete_comments']; + $doaction = ( $_REQUEST['action'] != -1 ) ? $_REQUEST['action'] : $_REQUEST['action2']; + } elseif ( isset( $_REQUEST['ids'] ) ) { + $comment_ids = array_map( 'absint', explode( ',', $_REQUEST['ids'] ) ); + } elseif ( wp_get_referer() ) { + wp_safe_redirect( wp_get_referer() ); + exit; + } + + $approved = $unapproved = $spammed = $unspammed = $trashed = $untrashed = $deleted = 0; + + $redirect_to = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'spammed', 'unspammed', 'approved', 'unapproved', 'ids' ), wp_get_referer() ); + $redirect_to = add_query_arg( 'paged', $pagenum, $redirect_to ); + + foreach ( $comment_ids as $comment_id ) { // Check the permissions on each + if ( !current_user_can( 'edit_comment', $comment_id ) ) + continue; + + switch ( $doaction ) { + case 'approve' : + wp_set_comment_status( $comment_id, 'approve' ); + $approved++; + break; + case 'unapprove' : + wp_set_comment_status( $comment_id, 'hold' ); + $unapproved++; + break; + case 'spam' : + wp_spam_comment( $comment_id ); + $spammed++; + break; + case 'unspam' : + wp_unspam_comment( $comment_id ); + $unspammed++; + break; + case 'trash' : + wp_trash_comment( $comment_id ); + $trashed++; + break; + case 'untrash' : + wp_untrash_comment( $comment_id ); + $untrashed++; + break; + case 'delete' : + wp_delete_comment( $comment_id ); + $deleted++; + break; + } + } + + if ( $approved ) + $redirect_to = add_query_arg( 'approved', $approved, $redirect_to ); + if ( $unapproved ) + $redirect_to = add_query_arg( 'unapproved', $unapproved, $redirect_to ); + if ( $spammed ) + $redirect_to = add_query_arg( 'spammed', $spammed, $redirect_to ); + if ( $unspammed ) + $redirect_to = add_query_arg( 'unspammed', $unspammed, $redirect_to ); + if ( $trashed ) + $redirect_to = add_query_arg( 'trashed', $trashed, $redirect_to ); + if ( $untrashed ) + $redirect_to = add_query_arg( 'untrashed', $untrashed, $redirect_to ); + if ( $deleted ) + $redirect_to = add_query_arg( 'deleted', $deleted, $redirect_to ); + if ( $trashed || $spammed ) + $redirect_to = add_query_arg( 'ids', join( ',', $comment_ids ), $redirect_to ); + + wp_safe_redirect( $redirect_to ); + exit; +} elseif ( ! empty( $_GET['_wp_http_referer'] ) ) { + wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); + exit; +} + +$wp_list_table->prepare_items(); + +wp_enqueue_script('admin-comments'); +enqueue_comment_hotkeys_js(); + +if ( $post_id ) + $title = sprintf( __( 'Comments on “%s”' ), wp_html_excerpt( _draft_or_post_title( $post_id ), 50, '…' ) ); +else + $title = __('Comments'); + +add_screen_option( 'per_page', array('label' => _x( 'Comments', 'comments per page (screen options)' )) ); + +get_current_screen()->add_help_tab( array( +'id' => 'overview', +'title' => __('Overview'), +'content' => + '

    ' . __( 'You can manage comments made on your site similar to the way you manage posts and other content. This screen is customizable in the same ways as other management screens, and you can act on comments using the on-hover action links or the Bulk Actions.' ) . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'moderating-comments', +'title' => __('Moderating Comments'), +'content' => + '

    ' . __( 'A yellow row means the comment is waiting for you to moderate it.' ) . '

    ' . + '

    ' . __( 'In the Author column, in addition to the author’s name, email address, and blog URL, the commenter’s IP address is shown. Clicking on this link will show you all the comments made from this IP address.' ) . '

    ' . + '

    ' . __( 'In the Comment column, above each comment it says “Submitted on,” followed by the date and time the comment was left on your site. Clicking on the date/time link will take you to that comment on your live site. Hovering over any comment gives you options to approve, reply (and approve), quick edit, edit, spam mark, or trash that comment.' ) . '

    ' . + '

    ' . __( 'In the In Response To column, there are three elements. The text is the name of the post that inspired the comment, and links to the post editor for that entry. The View Post link leads to that post on your live site. The small bubble with the number in it shows the number of approved comments that post has received. If the bubble is gray, you have moderated all comments for that post. If it is blue, there are pending comments. Clicking the bubble will filter the comments screen to show only comments on that post.' ) . '

    ' . + '

    ' . __( 'Many people take advantage of keyboard shortcuts to moderate their comments more quickly. Use the link to the side to learn more.' ) . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __( 'For more information:' ) . '

    ' . + '

    ' . __( 'Documentation on Comments' ) . '

    ' . + '

    ' . __( 'Documentation on Comment Spam' ) . '

    ' . + '

    ' . __( 'Documentation on Keyboard Shortcuts' ) . '

    ' . + '

    ' . __( 'Support Forums' ) . '

    ' +); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    %s', + get_edit_post_link( $post_id ), + wp_html_excerpt( _draft_or_post_title( $post_id ), 50, '…' ) + ) + ); +else + echo __('Comments'); + +if ( isset($_REQUEST['s']) && $_REQUEST['s'] ) + echo '' . sprintf( __( 'Search results for “%s”' ), wp_html_excerpt( esc_html( wp_unslash( $_REQUEST['s'] ) ), 50, '…' ) ) . ''; ?> +

    + +

    ' . $error_msg . '

    '; +} + +if ( isset($_REQUEST['approved']) || isset($_REQUEST['deleted']) || isset($_REQUEST['trashed']) || isset($_REQUEST['untrashed']) || isset($_REQUEST['spammed']) || isset($_REQUEST['unspammed']) || isset($_REQUEST['same']) ) { + $approved = isset( $_REQUEST['approved'] ) ? (int) $_REQUEST['approved'] : 0; + $deleted = isset( $_REQUEST['deleted'] ) ? (int) $_REQUEST['deleted'] : 0; + $trashed = isset( $_REQUEST['trashed'] ) ? (int) $_REQUEST['trashed'] : 0; + $untrashed = isset( $_REQUEST['untrashed'] ) ? (int) $_REQUEST['untrashed'] : 0; + $spammed = isset( $_REQUEST['spammed'] ) ? (int) $_REQUEST['spammed'] : 0; + $unspammed = isset( $_REQUEST['unspammed'] ) ? (int) $_REQUEST['unspammed'] : 0; + $same = isset( $_REQUEST['same'] ) ? (int) $_REQUEST['same'] : 0; + + if ( $approved > 0 || $deleted > 0 || $trashed > 0 || $untrashed > 0 || $spammed > 0 || $unspammed > 0 || $same > 0 ) { + if ( $approved > 0 ) + $messages[] = sprintf( _n( '%s comment approved', '%s comments approved', $approved ), $approved ); + + if ( $spammed > 0 ) { + $ids = isset($_REQUEST['ids']) ? $_REQUEST['ids'] : 0; + $messages[] = sprintf( _n( '%s comment marked as spam.', '%s comments marked as spam.', $spammed ), $spammed ) . ' ' . __('Undo') . '
    '; + } + + if ( $unspammed > 0 ) + $messages[] = sprintf( _n( '%s comment restored from the spam', '%s comments restored from the spam', $unspammed ), $unspammed ); + + if ( $trashed > 0 ) { + $ids = isset($_REQUEST['ids']) ? $_REQUEST['ids'] : 0; + $messages[] = sprintf( _n( '%s comment moved to the Trash.', '%s comments moved to the Trash.', $trashed ), $trashed ) . ' ' . __('Undo') . '
    '; + } + + if ( $untrashed > 0 ) + $messages[] = sprintf( _n( '%s comment restored from the Trash', '%s comments restored from the Trash', $untrashed ), $untrashed ); + + if ( $deleted > 0 ) + $messages[] = sprintf( _n( '%s comment permanently deleted', '%s comments permanently deleted', $deleted ), $deleted ); + + if ( $same > 0 && $comment = get_comment( $same ) ) { + switch ( $comment->comment_approved ) { + case '1' : + $messages[] = __('This comment is already approved.') . ' ' . __( 'Edit comment' ) . ''; + break; + case 'trash' : + $messages[] = __( 'This comment is already in the Trash.' ) . ' ' . __( 'View Trash' ) . ''; + break; + case 'spam' : + $messages[] = __( 'This comment is already marked as spam.' ) . ' ' . __( 'Edit comment' ) . ''; + break; + } + } + + echo '

    ' . implode( "
    \n", $messages ) . '

    '; + } +} +?> + +views(); ?> + +
    + +search_box( __( 'Search Comments' ), 'comment' ); ?> + + + + + + + + + + + + + + + +display(); ?> +
    +
    + +
    + + diff --git a/src/wp-admin/edit-form-advanced.php b/src/wp-admin/edit-form-advanced.php new file mode 100644 index 0000000..7970b8c --- /dev/null +++ b/src/wp-admin/edit-form-advanced.php @@ -0,0 +1,607 @@ + $post_ID ) ); +} + +// Add the local autosave notice HTML +add_action( 'admin_footer', '_local_storage_notice' ); + +/* + * @todo Document the $messages array(s). + */ +$messages = array(); +$messages['post'] = array( + 0 => '', // Unused. Messages start at index 1. + 1 => sprintf( __('Post updated. View post'), esc_url( get_permalink($post_ID) ) ), + 2 => __('Custom field updated.'), + 3 => __('Custom field deleted.'), + 4 => __('Post updated.'), + /* translators: %s: date and time of the revision */ + 5 => isset($_GET['revision']) ? sprintf( __('Post restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, + 6 => sprintf( __('Post published. View post'), esc_url( get_permalink($post_ID) ) ), + 7 => __('Post saved.'), + 8 => sprintf( __('Post submitted. Preview post'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), + 9 => sprintf( __('Post scheduled for: %1$s. Preview post'), + // translators: Publish box date format, see http://php.net/date + date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ), + 10 => sprintf( __('Post draft updated. Preview post'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), +); +$messages['page'] = array( + 0 => '', // Unused. Messages start at index 1. + 1 => sprintf( __('Page updated. View page'), esc_url( get_permalink($post_ID) ) ), + 2 => __('Custom field updated.'), + 3 => __('Custom field deleted.'), + 4 => __('Page updated.'), + 5 => isset($_GET['revision']) ? sprintf( __('Page restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, + 6 => sprintf( __('Page published. View page'), esc_url( get_permalink($post_ID) ) ), + 7 => __('Page saved.'), + 8 => sprintf( __('Page submitted. Preview page'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), + 9 => sprintf( __('Page scheduled for: %1$s. Preview page'), date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ), + 10 => sprintf( __('Page draft updated. Preview page'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), +); +$messages['attachment'] = array_fill( 1, 10, __( 'Media attachment updated.' ) ); // Hack, for now. + +/** + * Filter the post updated messages. + * + * @since 3.0.0 + * + * @param array $messages Post updated messages. For defaults @see $messages declarations above. + */ +$messages = apply_filters( 'post_updated_messages', $messages ); + +$message = false; +if ( isset($_GET['message']) ) { + $_GET['message'] = absint( $_GET['message'] ); + if ( isset($messages[$post_type][$_GET['message']]) ) + $message = $messages[$post_type][$_GET['message']]; + elseif ( !isset($messages[$post_type]) && isset($messages['post'][$_GET['message']]) ) + $message = $messages['post'][$_GET['message']]; +} + +$notice = false; +$form_extra = ''; +if ( 'auto-draft' == $post->post_status ) { + if ( 'edit' == $action ) + $post->post_title = ''; + $autosave = false; + $form_extra .= ""; +} else { + $autosave = wp_get_post_autosave( $post_ID ); +} + +$form_action = 'editpost'; +$nonce_action = 'update-post_' . $post_ID; +$form_extra .= ""; + +// Detect if there exists an autosave newer than the post and if that autosave is different than the post +if ( $autosave && mysql2date( 'U', $autosave->post_modified_gmt, false ) > mysql2date( 'U', $post->post_modified_gmt, false ) ) { + foreach ( _wp_post_revision_fields() as $autosave_field => $_autosave_field ) { + if ( normalize_whitespace( $autosave->$autosave_field ) != normalize_whitespace( $post->$autosave_field ) ) { + $notice = sprintf( __( 'There is an autosave of this post that is more recent than the version below. View the autosave' ), get_edit_post_link( $autosave->ID ) ); + break; + } + } + // If this autosave isn't different from the current post, begone. + if ( ! $notice ) + wp_delete_post_revision( $autosave->ID ); + unset($autosave_field, $_autosave_field); +} + +$post_type_object = get_post_type_object($post_type); + +// All meta boxes should be defined and added before the first do_meta_boxes() call (or potentially during the do_meta_boxes action). +require_once( ABSPATH . 'wp-admin/includes/meta-boxes.php' ); + + +$publish_callback_args = null; +if ( post_type_supports($post_type, 'revisions') && 'auto-draft' != $post->post_status ) { + $revisions = wp_get_post_revisions( $post_ID ); + + // We should aim to show the revisions metabox only when there are revisions. + if ( count( $revisions ) > 1 ) { + reset( $revisions ); // Reset pointer for key() + $publish_callback_args = array( 'revisions_count' => count( $revisions ), 'revision_id' => key( $revisions ) ); + add_meta_box('revisionsdiv', __('Revisions'), 'post_revisions_meta_box', null, 'normal', 'core'); + } +} + +if ( 'attachment' == $post_type ) { + wp_enqueue_script( 'image-edit' ); + wp_enqueue_style( 'imgareaselect' ); + add_meta_box( 'submitdiv', __('Save'), 'attachment_submit_meta_box', null, 'side', 'core' ); + add_action( 'edit_form_after_title', 'edit_form_image_editor' ); +} else { + add_meta_box( 'submitdiv', __( 'Publish' ), 'post_submit_meta_box', null, 'side', 'core', $publish_callback_args ); +} + +if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post_type, 'post-formats' ) ) + add_meta_box( 'formatdiv', _x( 'Format', 'post format' ), 'post_format_meta_box', null, 'side', 'core' ); + +// all taxonomies +foreach ( get_object_taxonomies( $post ) as $tax_name ) { + $taxonomy = get_taxonomy( $tax_name ); + if ( ! $taxonomy->show_ui || false === $taxonomy->meta_box_cb ) + continue; + + $label = $taxonomy->labels->name; + + if ( ! is_taxonomy_hierarchical( $tax_name ) ) + $tax_meta_box_id = 'tagsdiv-' . $tax_name; + else + $tax_meta_box_id = $tax_name . 'div'; + + add_meta_box( $tax_meta_box_id, $label, $taxonomy->meta_box_cb, null, 'side', 'core', array( 'taxonomy' => $tax_name ) ); +} + +if ( post_type_supports($post_type, 'page-attributes') ) + add_meta_box('pageparentdiv', 'page' == $post_type ? __('Page Attributes') : __('Attributes'), 'page_attributes_meta_box', null, 'side', 'core'); + +$audio_post_support = $video_post_support = false; +$theme_support = current_theme_supports( 'post-thumbnails', $post_type ) && post_type_supports( $post_type, 'thumbnail' ); +if ( 'attachment' === $post_type && ! empty( $post->post_mime_type ) ) { + $audio_post_support = 0 === strpos( $post->post_mime_type, 'audio/' ) && current_theme_supports( 'post-thumbnails', 'attachment:audio' ) && post_type_supports( 'attachment:audio', 'thumbnail' ); + $video_post_support = 0 === strpos( $post->post_mime_type, 'video/' ) && current_theme_supports( 'post-thumbnails', 'attachment:video' ) && post_type_supports( 'attachment:video', 'thumbnail' ); +} + +if ( $theme_support || $audio_post_support || $video_post_support ) + add_meta_box('postimagediv', __('Featured Image'), 'post_thumbnail_meta_box', null, 'side', 'low'); + +if ( post_type_supports($post_type, 'excerpt') ) + add_meta_box('postexcerpt', __('Excerpt'), 'post_excerpt_meta_box', null, 'normal', 'core'); + +if ( post_type_supports($post_type, 'trackbacks') ) + add_meta_box('trackbacksdiv', __('Send Trackbacks'), 'post_trackback_meta_box', null, 'normal', 'core'); + +if ( post_type_supports($post_type, 'custom-fields') ) + add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', null, 'normal', 'core'); + +/** + * Fires in the middle of built-in meta box registration. + * + * @since 2.1.0 + * @deprecated 3.7.0 Use 'add_meta_boxes' instead. + * + * @param WP_Post $post Post object. + */ +do_action( 'dbx_post_advanced', $post ); + +if ( post_type_supports($post_type, 'comments') ) + add_meta_box('commentstatusdiv', __('Discussion'), 'post_comment_status_meta_box', null, 'normal', 'core'); + +if ( ( 'publish' == get_post_status( $post ) || 'private' == get_post_status( $post ) ) && post_type_supports($post_type, 'comments') ) + add_meta_box('commentsdiv', __('Comments'), 'post_comment_meta_box', null, 'normal', 'core'); + +if ( ! ( 'pending' == get_post_status( $post ) && ! current_user_can( $post_type_object->cap->publish_posts ) ) ) + add_meta_box('slugdiv', __('Slug'), 'post_slug_meta_box', null, 'normal', 'core'); + +if ( post_type_supports($post_type, 'author') ) { + if ( is_super_admin() || current_user_can( $post_type_object->cap->edit_others_posts ) ) + add_meta_box('authordiv', __('Author'), 'post_author_meta_box', null, 'normal', 'core'); +} + +/** + * Fires after all built-in meta boxes have been added. + * + * @since 3.0.0 + * + * @param string $post_type Post type. + * @param WP_Post $post Post object. + */ +do_action( 'add_meta_boxes', $post_type, $post ); + +/** + * Fires after all built-in meta boxes have been added, contextually for the given post type. + * + * The dynamic portion of the hook, $post_type, refers to the post type of the post. + * + * @since 3.0.0 + * + * @param WP_Post $post Post object. + */ +do_action( 'add_meta_boxes_' . $post_type, $post ); + +/** + * Fires after meta boxes have been added. + * + * Fires once for each of the default meta box contexts: normal, advanced, and side. + * + * @since 3.0.0 + * + * @param string $post_type Post type of the post. + * @param string $context string Meta box context. + * @param WP_Post $post Post object. + */ +do_action( 'do_meta_boxes', $post_type, 'normal', $post ); +/** This action is documented in wp-admin/edit-form-advanced.php */ +do_action( 'do_meta_boxes', $post_type, 'advanced', $post ); +/** This action is documented in wp-admin/edit-form-advanced.php */ +do_action( 'do_meta_boxes', $post_type, 'side', $post ); + +add_screen_option('layout_columns', array('max' => 2, 'default' => 2) ); + +if ( 'post' == $post_type ) { + $customize_display = '

    ' . __('The title field and the big Post Editing Area are fixed in place, but you can reposition all the other boxes using drag and drop. You can also minimize or expand them by clicking the title bar of each box. Use the Screen Options tab to unhide more boxes (Excerpt, Send Trackbacks, Custom Fields, Discussion, Slug, Author) or to choose a 1- or 2-column layout for this screen.') . '

    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'customize-display', + 'title' => __('Customizing This Display'), + 'content' => $customize_display, + ) ); + + $title_and_editor = '

    ' . __('Title - Enter a title for your post. After you enter a title, you’ll see the permalink below, which you can edit.') . '

    '; + $title_and_editor .= '

    ' . __('Post editor - Enter the text for your post. There are two modes of editing: Visual and Text. Choose the mode by clicking on the appropriate tab. Visual mode gives you a WYSIWYG editor. Click the last icon in the row to get a second row of controls. The Text mode allows you to enter HTML along with your post text. Line breaks will be converted to paragraphs automatically. You can insert media files by clicking the icons above the post editor and following the directions. You can go to the distraction-free writing screen via the Fullscreen icon in Visual mode (second to last in the top row) or the Fullscreen button in Text mode (last in the row). Once there, you can make buttons visible by hovering over the top area. Exit Fullscreen back to the regular post editor.') . '

    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'title-post-editor', + 'title' => __('Title and Post Editor'), + 'content' => $title_and_editor, + ) ); + + get_current_screen()->set_help_sidebar( + '

    ' . sprintf(__('You can also create posts with the Press This bookmarklet.'), 'options-writing.php') . '

    ' . + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Writing and Editing Posts') . '

    ' . + '

    ' . __('Support Forums') . '

    ' + ); +} elseif ( 'page' == $post_type ) { + $about_pages = '

    ' . __('Pages are similar to Posts in that they have a title, body text, and associated metadata, but they are different in that they are not part of the chronological blog stream, kind of like permanent posts. Pages are not categorized or tagged, but can have a hierarchy. You can nest Pages under other Pages by making one the “Parent” of the other, creating a group of Pages.') . '

    ' . + '

    ' . __('Creating a Page is very similar to creating a Post, and the screens can be customized in the same way using drag and drop, the Screen Options tab, and expanding/collapsing boxes as you choose. This screen also has the distraction-free writing space, available in both the Visual and Text modes via the Fullscreen buttons. The Page editor mostly works the same as the Post editor, but there are some Page-specific features in the Page Attributes box:') . '

    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'about-pages', + 'title' => __('About Pages'), + 'content' => $about_pages, + ) ); + + get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Adding New Pages') . '

    ' . + '

    ' . __('Documentation on Editing Pages') . '

    ' . + '

    ' . __('Support Forums') . '

    ' + ); +} elseif ( 'attachment' == $post_type ) { + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __('This screen allows you to edit four fields for metadata in a file within the media library.') . '

    ' . + '

    ' . __('For images only, you can click on Edit Image under the thumbnail to expand out an inline image editor with icons for cropping, rotating, or flipping the image as well as for undoing and redoing. The boxes on the right give you more options for scaling the image, for cropping it, and for cropping the thumbnail in a different way than you crop the original image. You can click on Help in those boxes to get more information.') . '

    ' . + '

    ' . __('Note that you crop the image by clicking on it (the Crop icon is already selected) and dragging the cropping frame to select the desired part. Then click Save to retain the cropping.') . '

    ' . + '

    ' . __('Remember to click Update Media to save metadata entered or changed.') . '

    ' + ) ); + + get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Edit Media') . '

    ' . + '

    ' . __('Support Forums') . '

    ' + ); +} + +if ( 'post' == $post_type || 'page' == $post_type ) { + $inserting_media = '

    ' . __( 'You can upload and insert media (images, audio, documents, etc.) by clicking the Add Media button. You can select from the images and files already uploaded to the Media Library, or upload new media to add to your page or post. To create an image gallery, select the images to add and click the “Create a new gallery” button.' ) . '

    '; + $inserting_media .= '

    ' . __( 'You can also embed media from many popular websites including Twitter, YouTube, Flickr and others by pasting the media URL on its own line into the content of your post/page. Please refer to the Codex to learn more about embeds.' ) . '

    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'inserting-media', + 'title' => __( 'Inserting Media' ), + 'content' => $inserting_media, + ) ); +} + +if ( 'post' == $post_type ) { + $publish_box = '

    ' . __('Several boxes on this screen contain settings for how your content will be published, including:') . '

    '; + $publish_box .= '
    • ' . __('Publish - You can set the terms of publishing your post in the Publish box. For Status, Visibility, and Publish (immediately), click on the Edit link to reveal more options. Visibility includes options for password-protecting a post or making it stay at the top of your blog indefinitely (sticky). Publish (immediately) allows you to set a future or past date and time, so you can schedule a post to be published in the future or backdate a post.') . '
    • '; + + if ( current_theme_supports( 'post-formats' ) && post_type_supports( 'post', 'post-formats' ) ) { + $publish_box .= '
    • ' . __( 'Format - Post Formats designate how your theme will display a specific post. For example, you could have a standard blog post with a title and paragraphs, or a short aside that omits the title and contains a short text blurb. Please refer to the Codex for descriptions of each post format. Your theme could enable all or some of 10 possible formats.' ) . '
    • '; + } + + if ( current_theme_supports( 'post-thumbnails' ) && post_type_supports( 'post', 'thumbnail' ) ) { + $publish_box .= '
    • ' . __('Featured Image - This allows you to associate an image with your post without inserting it. This is usually useful only if your theme makes use of the featured image as a post thumbnail on the home page, a custom header, etc.') . '
    • '; + } + + $publish_box .= '
    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'publish-box', + 'title' => __('Publish Settings'), + 'content' => $publish_box, + ) ); + + $discussion_settings = '

    ' . __('Send Trackbacks - Trackbacks are a way to notify legacy blog systems that you’ve linked to them. Enter the URL(s) you want to send trackbacks. If you link to other WordPress sites they’ll be notified automatically using pingbacks, and this field is unnecessary.') . '

    '; + $discussion_settings .= '

    ' . __('Discussion - You can turn comments and pings on or off, and if there are comments on the post, you can see them here and moderate them.') . '

    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'discussion-settings', + 'title' => __('Discussion Settings'), + 'content' => $discussion_settings, + ) ); +} elseif ( 'page' == $post_type ) { + $page_attributes = '

    ' . __('Parent - You can arrange your pages in hierarchies. For example, you could have an “About” page that has “Life Story” and “My Dog” pages under it. There are no limits to how many levels you can nest pages.') . '

    ' . + '

    ' . __('Template - Some themes have custom templates you can use for certain pages that might have additional features or custom layouts. If so, you’ll see them in this dropdown menu.') . '

    ' . + '

    ' . __('Order - Pages are usually ordered alphabetically, but you can choose your own order by entering a number (1 for first, etc.) in this field.') . '

    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'page-attributes', + 'title' => __('Page Attributes'), + 'content' => $page_attributes, + ) ); +} + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    cap->create_posts ) ) + echo ' ' . esc_html( $post_type_object->labels->add_new ) . ''; +?>

    + +

    + + +

    + + + tag. + * + * @since 3.0.0 + * + * @param WP_Post $post Post object. + */ +?> +
    > + + + + + + + + + + + + + + +
    +
    +
    + + +
    +
    + + + +
    +
    +public ? get_sample_permalink_html($post->ID) : ''; +$shortlink = wp_get_shortlink($post->ID, 'post'); +$permalink = get_permalink( $post->ID ); +if ( !empty( $shortlink ) && $shortlink !== $permalink && $permalink !== home_url('?page_id=' . $post->ID) ) + $sample_permalink_html .= '' . __('Get Shortlink') . ''; + +if ( $post_type_object->public && ! ( 'pending' == get_post_status( $post ) && !current_user_can( $post_type_object->cap->publish_posts ) ) ) { + $has_sample_permalink = $sample_permalink_html && 'auto-draft' != $post->post_status; +?> +
    + +
    + +
    + +
    + +
    + +post_content, 'content', array( + 'dfw' => true, + 'tabfocus_elements' => 'insert-media-button,save-post', + 'editor_height' => 360, +) ); ?> + + + +
    0' ); ?> +   +post_status ) { + echo ''; + if ( $last_user = get_userdata( get_post_meta( $post_ID, '_edit_last', true ) ) ) { + printf(__('Last edited by %1$s on %2$s at %3$s'), esc_html( $last_user->display_name ), mysql2date(get_option('date_format'), $post->post_modified), mysql2date(get_option('time_format'), $post->post_modified)); + } else { + printf(__('Last edited on %1$s at %2$s'), mysql2date(get_option('date_format'), $post->post_modified), mysql2date(get_option('time_format'), $post->post_modified)); + } + echo ''; + } ?> +
    + +
    + +
    + +
    + +
    +
    + +
    + +
    +
    +
    +
    +
    + + + +post_title ) : ?> + + diff --git a/src/wp-admin/edit-form-comment.php b/src/wp-admin/edit-form-comment.php new file mode 100644 index 0000000..55f8df6 --- /dev/null +++ b/src/wp-admin/edit-form-comment.php @@ -0,0 +1,160 @@ + +
    +comment_ID) ?> +
    +

    + +
    + + + + + +
    +
    +
    +

    +
    + + + + + + + + + + + + + + + +
    + comment_author_email ) { + printf( __( 'E-mail (%s):' ), get_comment_author_email_link( __( 'send e-mail' ), '', '' ) ); + } else { + _e( 'E-mail:' ); + } +?>
    + comment_author_url ) && 'http://' != $comment->comment_author_url ) { + $link = '' . __('visit site') . ''; + /** This filter is documented in wp-includes/comment-template.php */ + printf( __( 'URL (%s):' ), apply_filters( 'get_comment_author_link', $link ) ); + } else { + _e( 'URL:' ); + } ?>
    +
    +
    +
    + +
    + 'strong,em,link,block,del,ins,img,ul,ol,li,code,close' ); + wp_editor( $comment->comment_content, 'content', array( 'media_buttons' => false, 'tinymce' => false, 'quicktags' => $quicktags_settings ) ); + wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?> +
    +
    + +
    +
    +

    +
    +
    +
    + +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + + +
    + +
    + + +
    +%1$s'); +$date = date_i18n( $datef, strtotime( $comment->comment_date ) ); +?> +  +
    +
    +
    +
    +
    + +
    +
    +comment_ID&_wp_original_http_referer=" . urlencode(wp_get_referer()), 'delete-comment_' . $comment->comment_ID) . "'>" . ( !EMPTY_TRASH_DAYS ? __('Delete Permanently') : __('Move to Trash') ) . "\n"; ?> +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    + +
    + + + + + + + +
    +
    +
    + + + diff --git a/src/wp-admin/edit-link-form.php b/src/wp-admin/edit-link-form.php new file mode 100644 index 0000000..d4a38ca --- /dev/null +++ b/src/wp-admin/edit-link-form.php @@ -0,0 +1,154 @@ +Links / Edit Link' ), 'link-manager.php' ); + $submit_text = __('Update Link'); + $form = ' diff --git a/src/wp-admin/edit-tag-form.php b/src/wp-admin/edit-tag-form.php new file mode 100644 index 0000000..f021b2a --- /dev/null +++ b/src/wp-admin/edit-tag-form.php @@ -0,0 +1,95 @@ + +

    + + +
    +

    labels->edit_item; ?>

    +
    +
    > + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    +

    + 0, 'hide_if_empty' => false, 'name' => 'parent', 'orderby' => 'name', 'taxonomy' => $taxonomy, 'selected' => $tag->parent, 'exclude_tree' => $tag->term_id, 'hierarchical' => true, 'show_option_none' => __('None'))); ?> + +

    + +

    +
    + +
    +
    + diff --git a/src/wp-admin/edit-tags.php b/src/wp-admin/edit-tags.php new file mode 100644 index 0000000..56fa11a --- /dev/null +++ b/src/wp-admin/edit-tags.php @@ -0,0 +1,594 @@ +cap->manage_terms ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + +$wp_list_table = _get_list_table('WP_Terms_List_Table'); +$pagenum = $wp_list_table->get_pagenum(); + +$title = $tax->labels->name; + +if ( 'post' != $post_type ) { + $parent_file = ( 'attachment' == $post_type ) ? 'upload.php' : "edit.php?post_type=$post_type"; + $submenu_file = "edit-tags.php?taxonomy=$taxonomy&post_type=$post_type"; +} else if ( 'link_category' == $tax->name ) { + $parent_file = 'link-manager.php'; + $submenu_file = 'edit-tags.php?taxonomy=link_category'; +} else { + $parent_file = 'edit.php'; + $submenu_file = "edit-tags.php?taxonomy=$taxonomy"; +} + +add_screen_option( 'per_page', array( 'label' => $title, 'default' => 20, 'option' => 'edit_' . $tax->name . '_per_page' ) ); + +switch ( $wp_list_table->current_action() ) { + +case 'add-tag': + + check_admin_referer( 'add-tag', '_wpnonce_add-tag' ); + + if ( !current_user_can( $tax->cap->edit_terms ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + $ret = wp_insert_term( $_POST['tag-name'], $taxonomy, $_POST ); + $location = 'edit-tags.php?taxonomy=' . $taxonomy; + if ( 'post' != $post_type ) + $location .= '&post_type=' . $post_type; + + if ( $referer = wp_get_original_referer() ) { + if ( false !== strpos( $referer, 'edit-tags.php' ) ) + $location = $referer; + } + + if ( $ret && !is_wp_error( $ret ) ) + $location = add_query_arg( 'message', 1, $location ); + else + $location = add_query_arg( 'message', 4, $location ); + wp_redirect( $location ); + exit; +break; + +case 'delete': + $location = 'edit-tags.php?taxonomy=' . $taxonomy; + if ( 'post' != $post_type ) + $location .= '&post_type=' . $post_type; + if ( $referer = wp_get_referer() ) { + if ( false !== strpos( $referer, 'edit-tags.php' ) ) + $location = $referer; + } + + if ( !isset( $_REQUEST['tag_ID'] ) ) { + wp_redirect( $location ); + exit; + } + + $tag_ID = (int) $_REQUEST['tag_ID']; + check_admin_referer( 'delete-tag_' . $tag_ID ); + + if ( !current_user_can( $tax->cap->delete_terms ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + wp_delete_term( $tag_ID, $taxonomy ); + + $location = add_query_arg( 'message', 2, $location ); + wp_redirect( $location ); + exit; + +break; + +case 'bulk-delete': + check_admin_referer( 'bulk-tags' ); + + if ( !current_user_can( $tax->cap->delete_terms ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + $tags = (array) $_REQUEST['delete_tags']; + foreach ( $tags as $tag_ID ) { + wp_delete_term( $tag_ID, $taxonomy ); + } + + $location = 'edit-tags.php?taxonomy=' . $taxonomy; + if ( 'post' != $post_type ) + $location .= '&post_type=' . $post_type; + if ( $referer = wp_get_referer() ) { + if ( false !== strpos( $referer, 'edit-tags.php' ) ) + $location = $referer; + } + + $location = add_query_arg( 'message', 6, $location ); + wp_redirect( $location ); + exit; + +break; + +case 'edit': + $title = $tax->labels->edit_item; + + $tag_ID = (int) $_REQUEST['tag_ID']; + + $tag = get_term( $tag_ID, $taxonomy, OBJECT, 'edit' ); + if ( ! $tag ) + wp_die( __( 'You attempted to edit an item that doesn’t exist. Perhaps it was deleted?' ) ); + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + include( ABSPATH . 'wp-admin/edit-tag-form.php' ); + +break; + +case 'editedtag': + $tag_ID = (int) $_POST['tag_ID']; + check_admin_referer( 'update-tag_' . $tag_ID ); + + if ( !current_user_can( $tax->cap->edit_terms ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + $tag = get_term( $tag_ID, $taxonomy ); + if ( ! $tag ) + wp_die( __( 'You attempted to edit an item that doesn’t exist. Perhaps it was deleted?' ) ); + + $ret = wp_update_term( $tag_ID, $taxonomy, $_POST ); + + $location = 'edit-tags.php?taxonomy=' . $taxonomy; + if ( 'post' != $post_type ) + $location .= '&post_type=' . $post_type; + + if ( $referer = wp_get_original_referer() ) { + if ( false !== strpos( $referer, 'edit-tags.php' ) ) + $location = $referer; + } + + if ( $ret && !is_wp_error( $ret ) ) + $location = add_query_arg( 'message', 3, $location ); + else + $location = add_query_arg( 'message', 5, $location ); + + wp_redirect( $location ); + exit; +break; + +default: +if ( ! empty($_REQUEST['_wp_http_referer']) ) { + $location = remove_query_arg( array('_wp_http_referer', '_wpnonce'), wp_unslash($_SERVER['REQUEST_URI']) ); + + if ( ! empty( $_REQUEST['paged'] ) ) + $location = add_query_arg( 'paged', (int) $_REQUEST['paged'] ); + + wp_redirect( $location ); + exit; +} + +$wp_list_table->prepare_items(); +$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); + +if ( $pagenum > $total_pages && $total_pages > 0 ) { + wp_redirect( add_query_arg( 'paged', $total_pages ) ); + exit; +} + +wp_enqueue_script('admin-tags'); +if ( current_user_can($tax->cap->edit_terms) ) + wp_enqueue_script('inline-edit-tax'); + +if ( 'category' == $taxonomy || 'link_category' == $taxonomy || 'post_tag' == $taxonomy ) { + $help =''; + if ( 'category' == $taxonomy ) + $help = '

    ' . sprintf(__( 'You can use categories to define sections of your site and group related posts. The default category is “Uncategorized” until you change it in your writing settings.' ) , 'options-writing.php' ) . '

    '; + elseif ( 'link_category' == $taxonomy ) + $help = '

    ' . __( 'You can create groups of links by using Link Categories. Link Category names must be unique and Link Categories are separate from the categories you use for posts.' ) . '

    '; + else + $help = '

    ' . __( 'You can assign keywords to your posts using tags. Unlike categories, tags have no hierarchy, meaning there’s no relationship from one tag to another.' ) . '

    '; + + if ( 'link_category' == $taxonomy ) + $help .= '

    ' . __( 'You can delete Link Categories in the Bulk Action pull-down, but that action does not delete the links within the category. Instead, it moves them to the default Link Category.' ) . '

    '; + else + $help .='

    ' . __( 'What’s the difference between categories and tags? Normally, tags are ad-hoc keywords that identify important information in your post (names, subjects, etc) that may or may not recur in other posts, while categories are pre-determined sections. If you think of your site like a book, the categories are like the Table of Contents and the tags are like the terms in the index.' ) . '

    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => $help, + ) ); + + if ( 'category' == $taxonomy || 'post_tag' == $taxonomy ) { + if ( 'category' == $taxonomy ) + $help = '

    ' . __( 'When adding a new category on this screen, you’ll fill in the following fields:' ) . '

    '; + else + $help = '

    ' . __( 'When adding a new tag on this screen, you’ll fill in the following fields:' ) . '

    '; + + $help .= '
      ' . + '
    • ' . __( 'Name - The name is how it appears on your site.' ) . '
    • '; + + if ( ! global_terms_enabled() ) + $help .= '
    • ' . __( 'Slug - The “slug” is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens.' ) . '
    • '; + + if ( 'category' == $taxonomy ) + $help .= '
    • ' . __( 'Parent - Categories, unlike tags, can have a hierarchy. You might have a Jazz category, and under that have child categories for Bebop and Big Band. Totally optional. To create a subcategory, just choose another category from the Parent dropdown.' ) . '
    • '; + + $help .= '
    • ' . __( 'Description - The description is not prominent by default; however, some themes may display it.' ) . '
    • ' . + '
    ' . + '

    ' . __( 'You can change the display of this screen using the Screen Options tab to set how many items are displayed per screen and to display/hide columns in the table.' ) . '

    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'adding-terms', + 'title' => 'category' == $taxonomy ? __( 'Adding Categories' ) : __( 'Adding Tags' ), + 'content' => $help, + ) ); + } + + $help = '

    ' . __( 'For more information:' ) . '

    '; + + if ( 'category' == $taxonomy ) + $help .= '

    ' . __( 'Documentation on Categories' ) . '

    '; + elseif ( 'link_category' == $taxonomy ) + $help .= '

    ' . __( 'Documentation on Link Categories' ) . '

    '; + else + $help .= '

    ' . __( 'Documentation on Tags' ) . '

    '; + + $help .= '

    ' . __('Support Forums') . '

    '; + + get_current_screen()->set_help_sidebar( $help ); + + unset( $help ); +} + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +if ( !current_user_can($tax->cap->edit_terms) ) + wp_die( __('You are not allowed to edit this item.') ); + +$messages = array(); +$messages['_item'] = array( + 0 => '', // Unused. Messages start at index 1. + 1 => __( 'Item added.' ), + 2 => __( 'Item deleted.' ), + 3 => __( 'Item updated.' ), + 4 => __( 'Item not added.' ), + 5 => __( 'Item not updated.' ), + 6 => __( 'Items deleted.' ) +); +$messages['category'] = array( + 0 => '', // Unused. Messages start at index 1. + 1 => __( 'Category added.' ), + 2 => __( 'Category deleted.' ), + 3 => __( 'Category updated.' ), + 4 => __( 'Category not added.' ), + 5 => __( 'Category not updated.' ), + 6 => __( 'Categories deleted.' ) +); +$messages['post_tag'] = array( + 0 => '', // Unused. Messages start at index 1. + 1 => __( 'Tag added.' ), + 2 => __( 'Tag deleted.' ), + 3 => __( 'Tag updated.' ), + 4 => __( 'Tag not added.' ), + 5 => __( 'Tag not updated.' ), + 6 => __( 'Tags deleted.' ) +); + +/** + * Filter the messages displayed when a tag is updated. + * + * @since 3.7.0 + * + * @param array $messages The messages to be displayed. + */ +$messages = apply_filters( 'term_updated_messages', $messages ); + +$message = false; +if ( isset( $_REQUEST['message'] ) && ( $msg = (int) $_REQUEST['message'] ) ) { + if ( isset( $messages[ $taxonomy ][ $msg ] ) ) + $message = $messages[ $taxonomy ][ $msg ]; + elseif ( ! isset( $messages[ $taxonomy ] ) && isset( $messages['_item'][ $msg ] ) ) + $message = $messages['_item'][ $msg ]; +} + +?> + +
    +

    ' . __('Search results for “%s”') . '', esc_html( wp_unslash($_REQUEST['s']) ) ); ?> +

    + + +

    + +
    + +
    + + + +search_box( $tax->labels->search_items, 'tag' ); ?> + +
    +
    + +
    + +
    +
    +
    + + + +display(); ?> + +
    +
    + + +
    + +

    Note:
    Deleting a category does not delete the posts in that category. Instead, posts that were only assigned to the deleted category are set to the category %s.'), apply_filters('the_category', get_cat_name(get_option('default_category')))) ?>

    + +

    category to tag converter.'), 'import.php') ?>

    + +
    + +
    +

    tag to category converter.'), 'import.php') ;?>

    +
    + + +
    +
    + +
    +
    + +labels->popular_items ) ) { + if ( current_user_can( $tax->cap->edit_terms ) ) + $tag_cloud = wp_tag_cloud( array( 'taxonomy' => $taxonomy, 'echo' => false, 'link' => 'edit' ) ); + else + $tag_cloud = wp_tag_cloud( array( 'taxonomy' => $taxonomy, 'echo' => false ) ); + + if ( $tag_cloud ) : + ?> +
    +

    labels->popular_items; ?>

    + +
    +cap->edit_terms) ) { + if ( 'category' == $taxonomy ) { + /** + * Fires before the Add Category form. + * + * @since 2.1.0 + * @deprecated 3.0.0 Use {$taxonomy}_pre_add_form instead. + * + * @param object $arg Optional arguments cast to an object. + */ + do_action( 'add_category_form_pre', (object) array( 'parent' => 0 ) ); + } elseif ( 'link_category' == $taxonomy ) { + /** + * Fires before the link category form. + * + * @since 2.3.0 + * @deprecated 3.0.0 Use {$taxonomy}_pre_add_form instead. + * + * @param object $arg Optional arguments cast to an object. + */ + do_action( 'add_link_category_form_pre', (object) array( 'parent' => 0 ) ); + } else { + /** + * Fires before the Add Tag form. + * + * @since 2.5.0 + * @deprecated 3.0.0 Use {$taxonomy}_pre_add_form instead. + * + * @param string $taxonomy The taxonomy slug. + */ + do_action( 'add_tag_form_pre', $taxonomy ); + } + + /** + * Fires before the Add Term form for all taxonomies. + * + * The dynamic portion of the hook name, $taxonomy, refers to the taxonomy slug. + * + * @since 3.0.0 + * + * @param string $taxonomy The taxonomy slug. + */ + do_action( "{$taxonomy}_pre_add_form", $taxonomy ); +?> + +
    +

    labels->add_new_item; ?>

    + +
    > + + + + + + +
    + + +

    +
    + +
    + + +

    +
    + + +
    + + 0, + 'hide_if_empty' => false, + 'taxonomy' => $taxonomy, + 'name' => 'parent', + 'orderby' => 'name', + 'hierarchical' => true, + 'show_option_none' => __( 'None' ), + ); + + /** + * Filter the taxonomy parent drop-down on the Edit Term page. + * + * @since 3.7.0 + * + * @param array $dropdown_args { + * An array of taxonomy parent drop-down arguments. + * + * @type int|bool $hide_empty Whether to hide terms not attached to any posts. Default 0|false. + * @type bool $hide_if_empty Whether to hide the drop-down if no terms exist. Default false. + * @type string $taxonomy The taxonomy slug. + * @type string $name Value of the name attribute to use for the drop-down select element. + * Default 'parent'. + * @type string $orderby The field to order by. Default 'name'. + * @type bool $hierarchical Whether the taxonomy is hierarchical. Default true. + * @type string $show_option_none Label to display if there are no terms. Default 'None'. + * } + * @param string $taxonomy The taxonomy slug. + */ + $dropdown_args = apply_filters( 'taxonomy_parent_dropdown_args', $dropdown_args, $taxonomy ); + wp_dropdown_categories( $dropdown_args ); + ?> + +

    + +
    + +
    + + +

    +
    + +labels->add_new_item ); + +if ( 'category' == $taxonomy ) { + /** + * Fires at the end of the Edit Category form. + * + * @since 2.1.0 + * @deprecated 3.0.0 Use {$taxonomy}_add_form instead. + * + * @param object $arg Optional arguments cast to an object. + */ + do_action( 'edit_category_form', (object) array( 'parent' => 0 ) ); +} elseif ( 'link_category' == $taxonomy ) { + /** + * Fires at the end of the Edit Link form. + * + * @since 2.3.0 + * @deprecated 3.0.0 Use {$taxonomy}_add_form instead. + * + * @param object $arg Optional arguments cast to an object. + */ + do_action( 'edit_link_category_form', (object) array( 'parent' => 0 ) ); +} else { + /** + * Fires at the end of the Add Tag form. + * + * @since 2.7.0 + * @deprecated 3.0.0 Use {$taxonomy}_add_form instead. + * + * @param string $taxonomy The taxonomy slug. + */ + do_action( 'add_tag_form', $taxonomy ); +} + +/** + * Fires at the end of the Add Term form for all taxonomies. + * + * The dynamic portion of the hook name, $taxonomy, refers to the taxonomy slug. + * + * @since 3.0.0 + * + * @param string $taxonomy The taxonomy slug. + */ +do_action( "{$taxonomy}_add_form", $taxonomy ); +?> +
    + + +
    +
    + +
    +
    + +inline_edit(); ?> + +cap->edit_posts ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + +$wp_list_table = _get_list_table('WP_Posts_List_Table'); +$pagenum = $wp_list_table->get_pagenum(); + +// Back-compat for viewing comments of an entry +foreach ( array( 'p', 'attachment_id', 'page_id' ) as $_redirect ) { + if ( ! empty( $_REQUEST[ $_redirect ] ) ) { + wp_redirect( admin_url( 'edit-comments.php?p=' . absint( $_REQUEST[ $_redirect ] ) ) ); + exit; + } +} +unset( $_redirect ); + +if ( 'post' != $post_type ) { + $parent_file = "edit.php?post_type=$post_type"; + $submenu_file = "edit.php?post_type=$post_type"; + $post_new_file = "post-new.php?post_type=$post_type"; +} else { + $parent_file = 'edit.php'; + $submenu_file = 'edit.php'; + $post_new_file = 'post-new.php'; +} + +$doaction = $wp_list_table->current_action(); + +if ( $doaction ) { + check_admin_referer('bulk-posts'); + + $sendback = remove_query_arg( array('trashed', 'untrashed', 'deleted', 'locked', 'ids'), wp_get_referer() ); + if ( ! $sendback ) + $sendback = admin_url( $parent_file ); + $sendback = add_query_arg( 'paged', $pagenum, $sendback ); + if ( strpos($sendback, 'post.php') !== false ) + $sendback = admin_url($post_new_file); + + if ( 'delete_all' == $doaction ) { + $post_status = preg_replace('/[^a-z0-9_-]+/i', '', $_REQUEST['post_status']); + if ( get_post_status_object($post_status) ) // Check the post status exists first + $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type=%s AND post_status = %s", $post_type, $post_status ) ); + $doaction = 'delete'; + } elseif ( isset( $_REQUEST['media'] ) ) { + $post_ids = $_REQUEST['media']; + } elseif ( isset( $_REQUEST['ids'] ) ) { + $post_ids = explode( ',', $_REQUEST['ids'] ); + } elseif ( !empty( $_REQUEST['post'] ) ) { + $post_ids = array_map('intval', $_REQUEST['post']); + } + + if ( !isset( $post_ids ) ) { + wp_redirect( $sendback ); + exit; + } + + switch ( $doaction ) { + case 'trash': + $trashed = $locked = 0; + + foreach( (array) $post_ids as $post_id ) { + if ( !current_user_can( 'delete_post', $post_id) ) + wp_die( __('You are not allowed to move this item to the Trash.') ); + + if ( wp_check_post_lock( $post_id ) ) { + $locked++; + continue; + } + + if ( !wp_trash_post($post_id) ) + wp_die( __('Error in moving to Trash.') ); + + $trashed++; + } + + $sendback = add_query_arg( array('trashed' => $trashed, 'ids' => join(',', $post_ids), 'locked' => $locked ), $sendback ); + break; + case 'untrash': + $untrashed = 0; + foreach( (array) $post_ids as $post_id ) { + if ( !current_user_can( 'delete_post', $post_id) ) + wp_die( __('You are not allowed to restore this item from the Trash.') ); + + if ( !wp_untrash_post($post_id) ) + wp_die( __('Error in restoring from Trash.') ); + + $untrashed++; + } + $sendback = add_query_arg('untrashed', $untrashed, $sendback); + break; + case 'delete': + $deleted = 0; + foreach( (array) $post_ids as $post_id ) { + $post_del = get_post($post_id); + + if ( !current_user_can( 'delete_post', $post_id ) ) + wp_die( __('You are not allowed to delete this item.') ); + + if ( $post_del->post_type == 'attachment' ) { + if ( ! wp_delete_attachment($post_id) ) + wp_die( __('Error in deleting.') ); + } else { + if ( !wp_delete_post($post_id) ) + wp_die( __('Error in deleting.') ); + } + $deleted++; + } + $sendback = add_query_arg('deleted', $deleted, $sendback); + break; + case 'edit': + if ( isset($_REQUEST['bulk_edit']) ) { + $done = bulk_edit_posts($_REQUEST); + + if ( is_array($done) ) { + $done['updated'] = count( $done['updated'] ); + $done['skipped'] = count( $done['skipped'] ); + $done['locked'] = count( $done['locked'] ); + $sendback = add_query_arg( $done, $sendback ); + } + } + break; + } + + $sendback = remove_query_arg( array('action', 'action2', 'tags_input', 'post_author', 'comment_status', 'ping_status', '_status', 'post', 'bulk_edit', 'post_view'), $sendback ); + + wp_redirect($sendback); + exit(); +} elseif ( ! empty($_REQUEST['_wp_http_referer']) ) { + wp_redirect( remove_query_arg( array('_wp_http_referer', '_wpnonce'), wp_unslash($_SERVER['REQUEST_URI']) ) ); + exit; +} + +$wp_list_table->prepare_items(); + +wp_enqueue_script('inline-edit-post'); + +$title = $post_type_object->labels->name; + +if ( 'post' == $post_type ) { + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __('This screen provides access to all of your posts. You can customize the display of this screen to suit your workflow.') . '

    ' + ) ); + get_current_screen()->add_help_tab( array( + 'id' => 'screen-content', + 'title' => __('Screen Content'), + 'content' => + '

    ' . __('You can customize the display of this screen’s contents in a number of ways:') . '

    ' . + '
      ' . + '
    • ' . __('You can hide/display columns based on your needs and decide how many posts to list per screen using the Screen Options tab.') . '
    • ' . + '
    • ' . __('You can filter the list of posts by post status using the text links in the upper left to show All, Published, Draft, or Trashed posts. The default view is to show all posts.') . '
    • ' . + '
    • ' . __('You can view posts in a simple title list or with an excerpt. Choose the view you prefer by clicking on the icons at the top of the list on the right.') . '
    • ' . + '
    • ' . __('You can refine the list to show only posts in a specific category or from a specific month by using the dropdown menus above the posts list. Click the Filter button after making your selection. You also can refine the list by clicking on the post author, category or tag in the posts list.') . '
    • ' . + '
    ' + ) ); + get_current_screen()->add_help_tab( array( + 'id' => 'action-links', + 'title' => __('Available Actions'), + 'content' => + '

    ' . __('Hovering over a row in the posts list will display action links that allow you to manage your post. You can perform the following actions:') . '

    ' . + '
      ' . + '
    • ' . __('Edit takes you to the editing screen for that post. You can also reach that screen by clicking on the post title.') . '
    • ' . + '
    • ' . __('Quick Edit provides inline access to the metadata of your post, allowing you to update post details without leaving this screen.') . '
    • ' . + '
    • ' . __('Trash removes your post from this list and places it in the trash, from which you can permanently delete it.') . '
    • ' . + '
    • ' . __('Preview will show you what your draft post will look like if you publish it. View will take you to your live site to view the post. Which link is available depends on your post’s status.') . '
    • ' . + '
    ' + ) ); + get_current_screen()->add_help_tab( array( + 'id' => 'bulk-actions', + 'title' => __('Bulk Actions'), + 'content' => + '

    ' . __('You can also edit or move multiple posts to the trash at once. Select the posts you want to act on using the checkboxes, then select the action you want to take from the Bulk Actions menu and click Apply.') . '

    ' . + '

    ' . __('When using Bulk Edit, you can change the metadata (categories, author, etc.) for all selected posts at once. To remove a post from the grouping, just click the x next to its name in the Bulk Edit area that appears.') . '

    ' + ) ); + + get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Managing Posts') . '

    ' . + '

    ' . __('Support Forums') . '

    ' + ); + +} elseif ( 'page' == $post_type ) { + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __('Pages are similar to posts in that they have a title, body text, and associated metadata, but they are different in that they are not part of the chronological blog stream, kind of like permanent posts. Pages are not categorized or tagged, but can have a hierarchy. You can nest pages under other pages by making one the “Parent” of the other, creating a group of pages.') . '

    ' + ) ); + get_current_screen()->add_help_tab( array( + 'id' => 'managing-pages', + 'title' => __('Managing Pages'), + 'content' => + '

    ' . __('Managing pages is very similar to managing posts, and the screens can be customized in the same way.') . '

    ' . + '

    ' . __('You can also perform the same types of actions, including narrowing the list by using the filters, acting on a page using the action links that appear when you hover over a row, or using the Bulk Actions menu to edit the metadata for multiple pages at once.') . '

    ' + ) ); + + get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Managing Pages') . '

    ' . + '

    ' . __('Support Forums') . '

    ' + ); +} + +add_screen_option( 'per_page', array( 'label' => $title, 'default' => 20, 'option' => 'edit_' . $post_type . '_per_page' ) ); + +$bulk_counts = array( + 'updated' => isset( $_REQUEST['updated'] ) ? absint( $_REQUEST['updated'] ) : 0, + 'locked' => isset( $_REQUEST['locked'] ) ? absint( $_REQUEST['locked'] ) : 0, + 'deleted' => isset( $_REQUEST['deleted'] ) ? absint( $_REQUEST['deleted'] ) : 0, + 'trashed' => isset( $_REQUEST['trashed'] ) ? absint( $_REQUEST['trashed'] ) : 0, + 'untrashed' => isset( $_REQUEST['untrashed'] ) ? absint( $_REQUEST['untrashed'] ) : 0, +); + +$bulk_messages = array(); +$bulk_messages['post'] = array( + 'updated' => _n( '%s post updated.', '%s posts updated.', $bulk_counts['updated'] ), + 'locked' => _n( '%s post not updated, somebody is editing it.', '%s posts not updated, somebody is editing them.', $bulk_counts['locked'] ), + 'deleted' => _n( '%s post permanently deleted.', '%s posts permanently deleted.', $bulk_counts['deleted'] ), + 'trashed' => _n( '%s post moved to the Trash.', '%s posts moved to the Trash.', $bulk_counts['trashed'] ), + 'untrashed' => _n( '%s post restored from the Trash.', '%s posts restored from the Trash.', $bulk_counts['untrashed'] ), +); +$bulk_messages['page'] = array( + 'updated' => _n( '%s page updated.', '%s pages updated.', $bulk_counts['updated'] ), + 'locked' => _n( '%s page not updated, somebody is editing it.', '%s pages not updated, somebody is editing them.', $bulk_counts['locked'] ), + 'deleted' => _n( '%s page permanently deleted.', '%s pages permanently deleted.', $bulk_counts['deleted'] ), + 'trashed' => _n( '%s page moved to the Trash.', '%s pages moved to the Trash.', $bulk_counts['trashed'] ), + 'untrashed' => _n( '%s page restored from the Trash.', '%s pages restored from the Trash.', $bulk_counts['untrashed'] ), +); + +/** + * Filter the bulk action updated messages. + * + * By default, custom post types use the messages for the 'post' post type. + * + * @since 3.7.0 + * + * @param array $bulk_messages Arrays of messages, each keyed by the corresponding post type. Messages are + * keyed with 'updated', 'locked', 'deleted', 'trashed', and 'untrashed'. + * @param array $bulk_counts Array of item counts for each message, used to build internationalized strings. + */ +$bulk_messages = apply_filters( 'bulk_post_updated_messages', $bulk_messages, $bulk_counts ); +$bulk_counts = array_filter( $bulk_counts ); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> +
    +

    labels->name ); +if ( current_user_can( $post_type_object->cap->create_posts ) ) + echo ' ' . esc_html( $post_type_object->labels->add_new ) . ''; +if ( ! empty( $_REQUEST['s'] ) ) + printf( ' ' . __('Search results for “%s”') . '', get_search_query() ); +?>

    + + $count ) { + if ( isset( $bulk_messages[ $post_type ][ $message ] ) ) + $messages[] = sprintf( $bulk_messages[ $post_type ][ $message ], number_format_i18n( $count ) ); + elseif ( isset( $bulk_messages['post'][ $message ] ) ) + $messages[] = sprintf( $bulk_messages['post'][ $message ], number_format_i18n( $count ) ); + + if ( $message == 'trashed' && isset( $_REQUEST['ids'] ) ) { + $ids = preg_replace( '/[^0-9,]/', '', $_REQUEST['ids'] ); + $messages[] = '' . __('Undo') . ''; + } +} + +if ( $messages ) + echo '

    ' . join( ' ', $messages ) . '

    '; +unset( $messages ); + +$_SERVER['REQUEST_URI'] = remove_query_arg( array( 'locked', 'skipped', 'updated', 'deleted', 'trashed', 'untrashed' ), $_SERVER['REQUEST_URI'] ); +?> + +views(); ?> + +
    + +search_box( $post_type_object->labels->search_items, 'post' ); ?> + + + + + + + +display(); ?> + +
    + +has_items() ) + $wp_list_table->inline_edit(); +?> + +
    +
    +
    + + + +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

    ' . __('You can export a file of your site’s content in order to import it into another installation or platform. The export file will be an XML file format called WXR. Posts, pages, comments, custom fields, categories, and tags can be included. You can choose for the WXR file to include only certain posts or pages by setting the dropdown filters to limit the export by category, author, date range by month, or publishing status.') . '

    ' . + '

    ' . __('Once generated, your WXR file can be imported by another WordPress site or by another blogging platform able to access this format.') . '

    ', +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Export') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +if ( isset( $_GET['download'] ) ) { + $args = array(); + + if ( ! isset( $_GET['content'] ) || 'all' == $_GET['content'] ) { + $args['content'] = 'all'; + } else if ( 'posts' == $_GET['content'] ) { + $args['content'] = 'post'; + + if ( $_GET['cat'] ) + $args['category'] = (int) $_GET['cat']; + + if ( $_GET['post_author'] ) + $args['author'] = (int) $_GET['post_author']; + + if ( $_GET['post_start_date'] || $_GET['post_end_date'] ) { + $args['start_date'] = $_GET['post_start_date']; + $args['end_date'] = $_GET['post_end_date']; + } + + if ( $_GET['post_status'] ) + $args['status'] = $_GET['post_status']; + } else if ( 'pages' == $_GET['content'] ) { + $args['content'] = 'page'; + + if ( $_GET['page_author'] ) + $args['author'] = (int) $_GET['page_author']; + + if ( $_GET['page_start_date'] || $_GET['page_end_date'] ) { + $args['start_date'] = $_GET['page_start_date']; + $args['end_date'] = $_GET['page_end_date']; + } + + if ( $_GET['page_status'] ) + $args['status'] = $_GET['page_status']; + } else { + $args['content'] = $_GET['content']; + } + + /** + * Filter the export args. + * + * @since 3.5.0 + * + * @param array $args The arguments to send to the exporter. + */ + $args = apply_filters( 'export_args', $args ); + + export_wp( $args ); + die(); +} + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +/** + * Create the date options fields for exporting a given post type. + * + * @global wpdb $wpdb WordPress database object. + * @global WP_Locale $wp_locale Date and Time Locale object. + * + * @since 3.1.0 + * + * @param string $post_type The post type. Default 'post'. + */ +function export_date_options( $post_type = 'post' ) { + global $wpdb, $wp_locale; + + $months = $wpdb->get_results( $wpdb->prepare( " + SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month + FROM $wpdb->posts + WHERE post_type = %s AND post_status != 'auto-draft' + ORDER BY post_date DESC + ", $post_type ) ); + + $month_count = count( $months ); + if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) ) + return; + + foreach ( $months as $date ) { + if ( 0 == $date->year ) + continue; + + $month = zeroise( $date->month, 2 ); + echo ''; + } +} +?> + +
    +

    + +

    +

    +

    + +

    +
    + +

    +

    + +

    +
      +
    • + + __('All') ) ); ?> +
    • +
    • + +get_col( "SELECT DISTINCT post_author FROM {$wpdb->posts} WHERE post_type = 'post'" ); + wp_dropdown_users( array( 'include' => $authors, 'name' => 'post_author', 'multi' => true, 'show_option_all' => __('All') ) ); +?> +
    • +
    • + + + +
    • +
    • + + +
    • +
    + +

    +
      +
    • + +get_col( "SELECT DISTINCT post_author FROM {$wpdb->posts} WHERE post_type = 'page'" ); + wp_dropdown_users( array( 'include' => $authors, 'name' => 'page_author', 'multi' => true, 'show_option_all' => __('All') ) ); +?> +
    • +
    • + + + +
    • +
    • + + +
    • +
    + + false, 'can_export' => true ), 'objects' ) as $post_type ) : ?> +

    + + + + + +
    +
    + + diff --git a/src/wp-admin/freedoms.php b/src/wp-admin/freedoms.php new file mode 100644 index 0000000..a020a85 --- /dev/null +++ b/src/wp-admin/freedoms.php @@ -0,0 +1,57 @@ + +
    + +

    + +
    + +
    + + + +

    license, the GPL.' ), 'http://wordpress.org/about/license/' ); ?>

    + +
      +
    1. +
    2. +
    3. +
    4. +
    + +

    check out our trademark guidelines first.' ), 'http://wordpressfoundation.org/trademark-policy/' ); ?>

    + +

    plugins and themes there. If you get a plugin or theme from another source, make sure to ask them if it’s GPL first. If they don’t respect the WordPress license, we don’t recommend them.' ), $plugins_url, $themes_url, 'http://wordpress.org/about/license/' ); ?>

    + +

    Free Software Foundation.' ); ?>

    + +
    + diff --git a/src/wp-admin/images/align-center-2x.png b/src/wp-admin/images/align-center-2x.png new file mode 100644 index 0000000..0b62734 Binary files /dev/null and b/src/wp-admin/images/align-center-2x.png differ diff --git a/src/wp-admin/images/align-center.png b/src/wp-admin/images/align-center.png new file mode 100644 index 0000000..e7bc807 Binary files /dev/null and b/src/wp-admin/images/align-center.png differ diff --git a/src/wp-admin/images/align-left-2x.png b/src/wp-admin/images/align-left-2x.png new file mode 100644 index 0000000..1b2d428 Binary files /dev/null and b/src/wp-admin/images/align-left-2x.png differ diff --git a/src/wp-admin/images/align-left.png b/src/wp-admin/images/align-left.png new file mode 100644 index 0000000..b438f7e Binary files /dev/null and b/src/wp-admin/images/align-left.png differ diff --git a/src/wp-admin/images/align-none-2x.png b/src/wp-admin/images/align-none-2x.png new file mode 100644 index 0000000..a64a0be Binary files /dev/null and b/src/wp-admin/images/align-none-2x.png differ diff --git a/src/wp-admin/images/align-none.png b/src/wp-admin/images/align-none.png new file mode 100644 index 0000000..b72df64 Binary files /dev/null and b/src/wp-admin/images/align-none.png differ diff --git a/src/wp-admin/images/align-right-2x.png b/src/wp-admin/images/align-right-2x.png new file mode 100644 index 0000000..0131505 Binary files /dev/null and b/src/wp-admin/images/align-right-2x.png differ diff --git a/src/wp-admin/images/align-right.png b/src/wp-admin/images/align-right.png new file mode 100644 index 0000000..86a1b2e Binary files /dev/null and b/src/wp-admin/images/align-right.png differ diff --git a/src/wp-admin/images/arrows-2x.png b/src/wp-admin/images/arrows-2x.png new file mode 100644 index 0000000..0b0c53d Binary files /dev/null and b/src/wp-admin/images/arrows-2x.png differ diff --git a/src/wp-admin/images/arrows.png b/src/wp-admin/images/arrows.png new file mode 100644 index 0000000..9e4a96c Binary files /dev/null and b/src/wp-admin/images/arrows.png differ diff --git a/src/wp-admin/images/bubble_bg-2x.gif b/src/wp-admin/images/bubble_bg-2x.gif new file mode 100644 index 0000000..ae29abb Binary files /dev/null and b/src/wp-admin/images/bubble_bg-2x.gif differ diff --git a/src/wp-admin/images/bubble_bg.gif b/src/wp-admin/images/bubble_bg.gif new file mode 100644 index 0000000..315ab52 Binary files /dev/null and b/src/wp-admin/images/bubble_bg.gif differ diff --git a/src/wp-admin/images/comment-grey-bubble-2x.png b/src/wp-admin/images/comment-grey-bubble-2x.png new file mode 100644 index 0000000..fafc74d Binary files /dev/null and b/src/wp-admin/images/comment-grey-bubble-2x.png differ diff --git a/src/wp-admin/images/comment-grey-bubble.png b/src/wp-admin/images/comment-grey-bubble.png new file mode 100644 index 0000000..558ee8f Binary files /dev/null and b/src/wp-admin/images/comment-grey-bubble.png differ diff --git a/src/wp-admin/images/date-button-2x.gif b/src/wp-admin/images/date-button-2x.gif new file mode 100644 index 0000000..95839c9 Binary files /dev/null and b/src/wp-admin/images/date-button-2x.gif differ diff --git a/src/wp-admin/images/date-button.gif b/src/wp-admin/images/date-button.gif new file mode 100644 index 0000000..33ecd66 Binary files /dev/null and b/src/wp-admin/images/date-button.gif differ diff --git a/src/wp-admin/images/generic.png b/src/wp-admin/images/generic.png new file mode 100644 index 0000000..00575a0 Binary files /dev/null and b/src/wp-admin/images/generic.png differ diff --git a/src/wp-admin/images/icons32-2x.png b/src/wp-admin/images/icons32-2x.png new file mode 100644 index 0000000..67893fe Binary files /dev/null and b/src/wp-admin/images/icons32-2x.png differ diff --git a/src/wp-admin/images/icons32-vs-2x.png b/src/wp-admin/images/icons32-vs-2x.png new file mode 100644 index 0000000..512aea8 Binary files /dev/null and b/src/wp-admin/images/icons32-vs-2x.png differ diff --git a/src/wp-admin/images/icons32-vs.png b/src/wp-admin/images/icons32-vs.png new file mode 100644 index 0000000..c967844 Binary files /dev/null and b/src/wp-admin/images/icons32-vs.png differ diff --git a/src/wp-admin/images/icons32.png b/src/wp-admin/images/icons32.png new file mode 100644 index 0000000..af061c1 Binary files /dev/null and b/src/wp-admin/images/icons32.png differ diff --git a/src/wp-admin/images/imgedit-icons-2x.png b/src/wp-admin/images/imgedit-icons-2x.png new file mode 100644 index 0000000..814da5e Binary files /dev/null and b/src/wp-admin/images/imgedit-icons-2x.png differ diff --git a/src/wp-admin/images/imgedit-icons.png b/src/wp-admin/images/imgedit-icons.png new file mode 100644 index 0000000..ca0b88d Binary files /dev/null and b/src/wp-admin/images/imgedit-icons.png differ diff --git a/src/wp-admin/images/list-2x.png b/src/wp-admin/images/list-2x.png new file mode 100644 index 0000000..05c6eb3 Binary files /dev/null and b/src/wp-admin/images/list-2x.png differ diff --git a/src/wp-admin/images/list.png b/src/wp-admin/images/list.png new file mode 100644 index 0000000..85d1295 Binary files /dev/null and b/src/wp-admin/images/list.png differ diff --git a/src/wp-admin/images/loading.gif b/src/wp-admin/images/loading.gif new file mode 100644 index 0000000..85b99d4 Binary files /dev/null and b/src/wp-admin/images/loading.gif differ diff --git a/src/wp-admin/images/lock-2x.png b/src/wp-admin/images/lock-2x.png new file mode 100644 index 0000000..46c5a48 Binary files /dev/null and b/src/wp-admin/images/lock-2x.png differ diff --git a/src/wp-admin/images/lock.png b/src/wp-admin/images/lock.png new file mode 100644 index 0000000..e17cc7d Binary files /dev/null and b/src/wp-admin/images/lock.png differ diff --git a/src/wp-admin/images/marker.png b/src/wp-admin/images/marker.png new file mode 100644 index 0000000..fae4b6d Binary files /dev/null and b/src/wp-admin/images/marker.png differ diff --git a/src/wp-admin/images/mask.png b/src/wp-admin/images/mask.png new file mode 100644 index 0000000..0fc9cbe Binary files /dev/null and b/src/wp-admin/images/mask.png differ diff --git a/src/wp-admin/images/media-button-2x.png b/src/wp-admin/images/media-button-2x.png new file mode 100644 index 0000000..b8f8ed4 Binary files /dev/null and b/src/wp-admin/images/media-button-2x.png differ diff --git a/src/wp-admin/images/media-button-image.gif b/src/wp-admin/images/media-button-image.gif new file mode 100644 index 0000000..5e7e426 Binary files /dev/null and b/src/wp-admin/images/media-button-image.gif differ diff --git a/src/wp-admin/images/media-button-music.gif b/src/wp-admin/images/media-button-music.gif new file mode 100644 index 0000000..0254a08 Binary files /dev/null and b/src/wp-admin/images/media-button-music.gif differ diff --git a/src/wp-admin/images/media-button-other.gif b/src/wp-admin/images/media-button-other.gif new file mode 100644 index 0000000..414a957 Binary files /dev/null and b/src/wp-admin/images/media-button-other.gif differ diff --git a/src/wp-admin/images/media-button-video.gif b/src/wp-admin/images/media-button-video.gif new file mode 100644 index 0000000..50ac6e0 Binary files /dev/null and b/src/wp-admin/images/media-button-video.gif differ diff --git a/src/wp-admin/images/media-button.png b/src/wp-admin/images/media-button.png new file mode 100644 index 0000000..752ee45 Binary files /dev/null and b/src/wp-admin/images/media-button.png differ diff --git a/src/wp-admin/images/menu-2x.png b/src/wp-admin/images/menu-2x.png new file mode 100644 index 0000000..0038190 Binary files /dev/null and b/src/wp-admin/images/menu-2x.png differ diff --git a/src/wp-admin/images/menu-vs-2x.png b/src/wp-admin/images/menu-vs-2x.png new file mode 100644 index 0000000..17309fc Binary files /dev/null and b/src/wp-admin/images/menu-vs-2x.png differ diff --git a/src/wp-admin/images/menu-vs.png b/src/wp-admin/images/menu-vs.png new file mode 100644 index 0000000..afdb3d3 Binary files /dev/null and b/src/wp-admin/images/menu-vs.png differ diff --git a/src/wp-admin/images/menu.png b/src/wp-admin/images/menu.png new file mode 100644 index 0000000..52189c2 Binary files /dev/null and b/src/wp-admin/images/menu.png differ diff --git a/src/wp-admin/images/no.png b/src/wp-admin/images/no.png new file mode 100644 index 0000000..59c35bd Binary files /dev/null and b/src/wp-admin/images/no.png differ diff --git a/src/wp-admin/images/post-formats-vs.png b/src/wp-admin/images/post-formats-vs.png new file mode 100644 index 0000000..c8e7e8d Binary files /dev/null and b/src/wp-admin/images/post-formats-vs.png differ diff --git a/src/wp-admin/images/post-formats.png b/src/wp-admin/images/post-formats.png new file mode 100644 index 0000000..2d749be Binary files /dev/null and b/src/wp-admin/images/post-formats.png differ diff --git a/src/wp-admin/images/post-formats32-vs.png b/src/wp-admin/images/post-formats32-vs.png new file mode 100644 index 0000000..af2c59f Binary files /dev/null and b/src/wp-admin/images/post-formats32-vs.png differ diff --git a/src/wp-admin/images/post-formats32.png b/src/wp-admin/images/post-formats32.png new file mode 100644 index 0000000..ccafc80 Binary files /dev/null and b/src/wp-admin/images/post-formats32.png differ diff --git a/src/wp-admin/images/resize-2x.gif b/src/wp-admin/images/resize-2x.gif new file mode 100644 index 0000000..9682579 Binary files /dev/null and b/src/wp-admin/images/resize-2x.gif differ diff --git a/src/wp-admin/images/resize-rtl-2x.gif b/src/wp-admin/images/resize-rtl-2x.gif new file mode 100644 index 0000000..1ca2a63 Binary files /dev/null and b/src/wp-admin/images/resize-rtl-2x.gif differ diff --git a/src/wp-admin/images/resize-rtl.gif b/src/wp-admin/images/resize-rtl.gif new file mode 100644 index 0000000..95e7b32 Binary files /dev/null and b/src/wp-admin/images/resize-rtl.gif differ diff --git a/src/wp-admin/images/resize.gif b/src/wp-admin/images/resize.gif new file mode 100644 index 0000000..6a1b41c Binary files /dev/null and b/src/wp-admin/images/resize.gif differ diff --git a/src/wp-admin/images/se.png b/src/wp-admin/images/se.png new file mode 100644 index 0000000..eb487b4 Binary files /dev/null and b/src/wp-admin/images/se.png differ diff --git a/src/wp-admin/images/sort-2x.gif b/src/wp-admin/images/sort-2x.gif new file mode 100644 index 0000000..ed5cf4b Binary files /dev/null and b/src/wp-admin/images/sort-2x.gif differ diff --git a/src/wp-admin/images/sort.gif b/src/wp-admin/images/sort.gif new file mode 100644 index 0000000..2a5a6e8 Binary files /dev/null and b/src/wp-admin/images/sort.gif differ diff --git a/src/wp-admin/images/spinner-2x.gif b/src/wp-admin/images/spinner-2x.gif new file mode 100644 index 0000000..1f65928 Binary files /dev/null and b/src/wp-admin/images/spinner-2x.gif differ diff --git a/src/wp-admin/images/spinner.gif b/src/wp-admin/images/spinner.gif new file mode 100644 index 0000000..e319451 Binary files /dev/null and b/src/wp-admin/images/spinner.gif differ diff --git a/src/wp-admin/images/stars-2x.png b/src/wp-admin/images/stars-2x.png new file mode 100644 index 0000000..15aa9de Binary files /dev/null and b/src/wp-admin/images/stars-2x.png differ diff --git a/src/wp-admin/images/stars.png b/src/wp-admin/images/stars.png new file mode 100644 index 0000000..c01ada1 Binary files /dev/null and b/src/wp-admin/images/stars.png differ diff --git a/src/wp-admin/images/w-logo-blue.png b/src/wp-admin/images/w-logo-blue.png new file mode 100644 index 0000000..60c97f8 Binary files /dev/null and b/src/wp-admin/images/w-logo-blue.png differ diff --git a/src/wp-admin/images/w-logo-white.png b/src/wp-admin/images/w-logo-white.png new file mode 100644 index 0000000..e7c19d6 Binary files /dev/null and b/src/wp-admin/images/w-logo-white.png differ diff --git a/src/wp-admin/images/wheel.png b/src/wp-admin/images/wheel.png new file mode 100644 index 0000000..7e53103 Binary files /dev/null and b/src/wp-admin/images/wheel.png differ diff --git a/src/wp-admin/images/wordpress-logo-white.svg b/src/wp-admin/images/wordpress-logo-white.svg new file mode 100644 index 0000000..c0d0ba9 --- /dev/null +++ b/src/wp-admin/images/wordpress-logo-white.svg @@ -0,0 +1 @@ + diff --git a/src/wp-admin/images/wordpress-logo.png b/src/wp-admin/images/wordpress-logo.png new file mode 100644 index 0000000..63b0379 Binary files /dev/null and b/src/wp-admin/images/wordpress-logo.png differ diff --git a/src/wp-admin/images/wordpress-logo.svg b/src/wp-admin/images/wordpress-logo.svg new file mode 100644 index 0000000..da5e5df --- /dev/null +++ b/src/wp-admin/images/wordpress-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/wp-admin/images/wpspin_light-2x.gif b/src/wp-admin/images/wpspin_light-2x.gif new file mode 100644 index 0000000..fe2d5c0 Binary files /dev/null and b/src/wp-admin/images/wpspin_light-2x.gif differ diff --git a/src/wp-admin/images/wpspin_light.gif b/src/wp-admin/images/wpspin_light.gif new file mode 100644 index 0000000..e10b97f Binary files /dev/null and b/src/wp-admin/images/wpspin_light.gif differ diff --git a/src/wp-admin/images/xit-2x.gif b/src/wp-admin/images/xit-2x.gif new file mode 100644 index 0000000..64ab2ce Binary files /dev/null and b/src/wp-admin/images/xit-2x.gif differ diff --git a/src/wp-admin/images/xit.gif b/src/wp-admin/images/xit.gif new file mode 100644 index 0000000..80c251f Binary files /dev/null and b/src/wp-admin/images/xit.gif differ diff --git a/src/wp-admin/images/yes.png b/src/wp-admin/images/yes.png new file mode 100644 index 0000000..fbb3983 Binary files /dev/null and b/src/wp-admin/images/yes.png differ diff --git a/src/wp-admin/import.php b/src/wp-admin/import.php new file mode 100644 index 0000000..e85bf70 --- /dev/null +++ b/src/wp-admin/import.php @@ -0,0 +1,132 @@ +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

    ' . __('This screen lists links to plugins to import data from blogging/content management platforms. Choose the platform you want to import from, and click Install Now when you are prompted in the popup window. If your platform is not listed, click the link to search the plugin directory for other importer plugins to see if there is one for your platform.') . '

    ' . + '

    ' . __('In previous versions of WordPress, all importers were built-in. They have been turned into plugins since most people only use them once or infrequently.') . '

    ', +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Import') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +if ( current_user_can( 'install_plugins' ) ) + $popular_importers = wp_get_popular_importers(); +else + $popular_importers = array(); + +// Detect and redirect invalid importers like 'movabletype', which is registered as 'mt' +if ( ! empty( $_GET['invalid'] ) && isset( $popular_importers[ $_GET['invalid'] ] ) ) { + $importer_id = $popular_importers[ $_GET['invalid'] ]['importer-id']; + if ( $importer_id != $_GET['invalid'] ) { // Prevent redirect loops. + wp_redirect( admin_url( 'admin.php?import=' . $importer_id ) ); + exit; + } + unset( $importer_id ); +} + +add_thickbox(); +wp_enqueue_script( 'plugin-install' ); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +$parent_file = 'tools.php'; +?> + +
    +

    + +

    %s importer is invalid or is not installed.'), esc_html( $_GET['invalid'] ) ); ?>

    + +

    + + $pop_data ) { + if ( isset( $importers[ $pop_importer ] ) ) + continue; + if ( isset( $importers[ $pop_data['importer-id'] ] ) ) + continue; + $importers[ $pop_data['importer-id'] ] = array( $pop_data['name'], $pop_data['description'], 'install' => $pop_data['plugin-slug'] ); +} + +if ( empty( $importers ) ) { + echo '

    ' . __('No importers are available.') . '

    '; // TODO: make more helpful +} else { + uasort($importers, create_function('$a, $b', 'return strnatcasecmp($a[0], $b[0]);')); +?> + + + $data) { + $action = ''; + if ( isset( $data['install'] ) ) { + $plugin_slug = $data['install']; + if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_slug ) ) { + // Looks like Importer is installed, But not active + $plugins = get_plugins( '/' . $plugin_slug ); + if ( !empty($plugins) ) { + $keys = array_keys($plugins); + $plugin_file = $plugin_slug . '/' . $keys[0]; + $action = '' . $data[0] . ''; + } + } + if ( empty($action) ) { + if ( is_main_site() ) { + $action = '' . $data[0] . ''; + } else { + $action = $data[0]; + $data[1] = sprintf( __( 'This importer is not installed. Please install importers from the main site.' ), get_admin_url( $current_site->blog_id, 'import.php' ) ); + } + } + } else { + $action = "{$data[0]}"; + } + + $alt = $alt ? '' : ' class="alternate"'; + echo " + + + + "; + } +?> + +
    $action{$data[1]}
    +' . sprintf( __('If the importer you need is not listed, search the plugin directory to see if an importer is available.'), esc_url( network_admin_url( 'plugin-install.php?tab=search&type=tag&s=importer' ) ) ) . '

    '; +?> + +
    + +id and the JS global 'pagenow' + if ( ! empty($_POST['screen_id']) ) + $screen_id = sanitize_key($_POST['screen_id']); + else + $screen_id = 'front'; + + if ( ! empty($_POST['data']) ) { + $data = wp_unslash( (array) $_POST['data'] ); + + /** + * Filter Heartbeat AJAX response in no-privilege environments. + * + * @since 3.6.0 + * + * @param array|object $response The no-priv Heartbeat response object or array. + * @param array $data An array of data passed via $_POST. + * @param string $screen_id The screen id. + */ + $response = apply_filters( 'heartbeat_nopriv_received', $response, $data, $screen_id ); + } + + /** + * Filter Heartbeat AJAX response when no data is passed. + * + * @since 3.6.0 + * + * @param array|object $response The Heartbeat response object or array. + * @param string $screen_id The screen id. + */ + $response = apply_filters( 'heartbeat_nopriv_send', $response, $screen_id ); + + /** + * Fires when Heartbeat ticks in no-privilege environments. + * + * Allows the transport to be easily replaced with long-polling. + * + * @since 3.6.0 + * + * @param array|object $response The no-priv Heartbeat response. + * @param string $screen_id The screen id. + */ + do_action( 'heartbeat_nopriv_tick', $response, $screen_id ); + + // send the current time according to the server + $response['server_time'] = time(); + + wp_send_json($response); +} + +/* + * GET-based Ajax handlers. + */ +function wp_ajax_fetch_list() { + global $wp_list_table; + + $list_class = $_GET['list_args']['class']; + check_ajax_referer( "fetch-list-$list_class", '_ajax_fetch_list_nonce' ); + + $wp_list_table = _get_list_table( $list_class, array( 'screen' => $_GET['list_args']['screen']['id'] ) ); + if ( ! $wp_list_table ) + wp_die( 0 ); + + if ( ! $wp_list_table->ajax_user_can() ) + wp_die( -1 ); + + $wp_list_table->ajax_response(); + + wp_die( 0 ); +} +function wp_ajax_ajax_tag_search() { + global $wpdb; + + if ( isset( $_GET['tax'] ) ) { + $taxonomy = sanitize_key( $_GET['tax'] ); + $tax = get_taxonomy( $taxonomy ); + if ( ! $tax ) + wp_die( 0 ); + if ( ! current_user_can( $tax->cap->assign_terms ) ) + wp_die( -1 ); + } else { + wp_die( 0 ); + } + + $s = wp_unslash( $_GET['q'] ); + + $comma = _x( ',', 'tag delimiter' ); + if ( ',' !== $comma ) + $s = str_replace( $comma, ',', $s ); + if ( false !== strpos( $s, ',' ) ) { + $s = explode( ',', $s ); + $s = $s[count( $s ) - 1]; + } + $s = trim( $s ); + if ( strlen( $s ) < 2 ) + wp_die(); // require 2 chars for matching + + $results = get_terms( $taxonomy, array( 'name__like' => $s, 'fields' => 'names', 'hide_empty' => false ) ); + + echo join( $results, "\n" ); + wp_die(); +} + +function wp_ajax_wp_compression_test() { + if ( !current_user_can( 'manage_options' ) ) + wp_die( -1 ); + + if ( ini_get('zlib.output_compression') || 'ob_gzhandler' == ini_get('output_handler') ) { + update_site_option('can_compress_scripts', 0); + wp_die( 0 ); + } + + if ( isset($_GET['test']) ) { + header( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-cache, must-revalidate, max-age=0' ); + header( 'Pragma: no-cache' ); + header('Content-Type: application/x-javascript; charset=UTF-8'); + $force_gzip = ( defined('ENFORCE_GZIP') && ENFORCE_GZIP ); + $test_str = '"wpCompressionTest Lorem ipsum dolor sit amet consectetuer mollis sapien urna ut a. Eu nonummy condimentum fringilla tempor pretium platea vel nibh netus Maecenas. Hac molestie amet justo quis pellentesque est ultrices interdum nibh Morbi. Cras mattis pretium Phasellus ante ipsum ipsum ut sociis Suspendisse Lorem. Ante et non molestie. Porta urna Vestibulum egestas id congue nibh eu risus gravida sit. Ac augue auctor Ut et non a elit massa id sodales. Elit eu Nulla at nibh adipiscing mattis lacus mauris at tempus. Netus nibh quis suscipit nec feugiat eget sed lorem et urna. Pellentesque lacus at ut massa consectetuer ligula ut auctor semper Pellentesque. Ut metus massa nibh quam Curabitur molestie nec mauris congue. Volutpat molestie elit justo facilisis neque ac risus Ut nascetur tristique. Vitae sit lorem tellus et quis Phasellus lacus tincidunt nunc Fusce. Pharetra wisi Suspendisse mus sagittis libero lacinia Integer consequat ac Phasellus. Et urna ac cursus tortor aliquam Aliquam amet tellus volutpat Vestibulum. Justo interdum condimentum In augue congue tellus sollicitudin Quisque quis nibh."'; + + if ( 1 == $_GET['test'] ) { + echo $test_str; + wp_die(); + } elseif ( 2 == $_GET['test'] ) { + if ( !isset($_SERVER['HTTP_ACCEPT_ENCODING']) ) + wp_die( -1 ); + if ( false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate') && function_exists('gzdeflate') && ! $force_gzip ) { + header('Content-Encoding: deflate'); + $out = gzdeflate( $test_str, 1 ); + } elseif ( false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('gzencode') ) { + header('Content-Encoding: gzip'); + $out = gzencode( $test_str, 1 ); + } else { + wp_die( -1 ); + } + echo $out; + wp_die(); + } elseif ( 'no' == $_GET['test'] ) { + update_site_option('can_compress_scripts', 0); + } elseif ( 'yes' == $_GET['test'] ) { + update_site_option('can_compress_scripts', 1); + } + } + + wp_die( 0 ); +} + +function wp_ajax_imgedit_preview() { + $post_id = intval($_GET['postid']); + if ( empty($post_id) || !current_user_can('edit_post', $post_id) ) + wp_die( -1 ); + + check_ajax_referer( "image_editor-$post_id" ); + + include_once( ABSPATH . 'wp-admin/includes/image-edit.php' ); + if ( ! stream_preview_image($post_id) ) + wp_die( -1 ); + + wp_die(); +} + +function wp_ajax_oembed_cache() { + global $wp_embed; + + $return = ( $wp_embed->cache_oembed( $_GET['post'] ) ) ? '1' : '0'; + wp_die( $return ); +} + +function wp_ajax_autocomplete_user() { + if ( ! is_multisite() || ! current_user_can( 'promote_users' ) || wp_is_large_network( 'users' ) ) + wp_die( -1 ); + + /** This filter is documented in wp-admin/user-new.php */ + if ( ! is_super_admin() && ! apply_filters( 'autocomplete_users_for_site_admins', false ) ) + wp_die( -1 ); + + $return = array(); + + // Check the type of request + if ( isset( $_REQUEST['autocomplete_type'] ) ) + $type = $_REQUEST['autocomplete_type']; + else + $type = 'add'; + + // Exclude current users of this blog + if ( isset( $_REQUEST['site_id'] ) ) + $id = absint( $_REQUEST['site_id'] ); + else + $id = get_current_blog_id(); + + $include_blog_users = ( $type == 'search' ? get_users( array( 'blog_id' => $id, 'fields' => 'ID' ) ) : array() ); + $exclude_blog_users = ( $type == 'add' ? get_users( array( 'blog_id' => $id, 'fields' => 'ID' ) ) : array() ); + + $users = get_users( array( + 'blog_id' => false, + 'search' => '*' . $_REQUEST['term'] . '*', + 'include' => $include_blog_users, + 'exclude' => $exclude_blog_users, + 'search_columns' => array( 'user_login', 'user_nicename', 'user_email' ), + ) ); + + foreach ( $users as $user ) { + $return[] = array( + /* translators: 1: user_login, 2: user_email */ + 'label' => sprintf( __( '%1$s (%2$s)' ), $user->user_login, $user->user_email ), + 'value' => $user->user_login, + ); + } + + wp_die( json_encode( $return ) ); +} + +function wp_ajax_dashboard_widgets() { + require_once ABSPATH . 'wp-admin/includes/dashboard.php'; + + $pagenow = $_GET['pagenow']; + if ( $pagenow === 'dashboard-user' || $pagenow === 'dashboard-network' || $pagenow === 'dashboard' ) { + set_current_screen( $pagenow ); + } + + switch ( $_GET['widget'] ) { + case 'dashboard_primary' : + wp_dashboard_primary(); + break; + } + wp_die(); +} + +function wp_ajax_logged_in() { + wp_die( 1 ); +} + +/* + * Ajax helper. + */ + +/** + * Sends back current comment total and new page links if they need to be updated. + * + * Contrary to normal success AJAX response ("1"), die with time() on success. + * + * @since 2.7 + * + * @param int $comment_id + * @return die + */ +function _wp_ajax_delete_comment_response( $comment_id, $delta = -1 ) { + $total = isset( $_POST['_total'] ) ? (int) $_POST['_total'] : 0; + $per_page = isset( $_POST['_per_page'] ) ? (int) $_POST['_per_page'] : 0; + $page = isset( $_POST['_page'] ) ? (int) $_POST['_page'] : 0; + $url = isset( $_POST['_url'] ) ? esc_url_raw( $_POST['_url'] ) : ''; + + // JS didn't send us everything we need to know. Just die with success message + if ( !$total || !$per_page || !$page || !$url ) + wp_die( time() ); + + $total += $delta; + if ( $total < 0 ) + $total = 0; + + // Only do the expensive stuff on a page-break, and about 1 other time per page + if ( 0 == $total % $per_page || 1 == mt_rand( 1, $per_page ) ) { + $post_id = 0; + $status = 'total_comments'; // What type of comment count are we looking for? + $parsed = parse_url( $url ); + if ( isset( $parsed['query'] ) ) { + parse_str( $parsed['query'], $query_vars ); + if ( !empty( $query_vars['comment_status'] ) ) + $status = $query_vars['comment_status']; + if ( !empty( $query_vars['p'] ) ) + $post_id = (int) $query_vars['p']; + } + + $comment_count = wp_count_comments($post_id); + + if ( isset( $comment_count->$status ) ) // We're looking for a known type of comment count + $total = $comment_count->$status; + // else use the decremented value from above + } + + $time = time(); // The time since the last comment count + + $x = new WP_Ajax_Response( array( + 'what' => 'comment', + 'id' => $comment_id, // here for completeness - not used + 'supplemental' => array( + 'total_items_i18n' => sprintf( _n( '1 item', '%s items', $total ), number_format_i18n( $total ) ), + 'total_pages' => ceil( $total / $per_page ), + 'total_pages_i18n' => number_format_i18n( ceil( $total / $per_page ) ), + 'total' => $total, + 'time' => $time + ) + ) ); + $x->send(); +} + +/* + * POST-based Ajax handlers. + */ + +function _wp_ajax_add_hierarchical_term() { + $action = $_POST['action']; + $taxonomy = get_taxonomy(substr($action, 4)); + check_ajax_referer( $action, '_ajax_nonce-add-' . $taxonomy->name ); + if ( !current_user_can( $taxonomy->cap->edit_terms ) ) + wp_die( -1 ); + $names = explode(',', $_POST['new'.$taxonomy->name]); + $parent = isset($_POST['new'.$taxonomy->name.'_parent']) ? (int) $_POST['new'.$taxonomy->name.'_parent'] : 0; + if ( 0 > $parent ) + $parent = 0; + if ( $taxonomy->name == 'category' ) + $post_category = isset($_POST['post_category']) ? (array) $_POST['post_category'] : array(); + else + $post_category = ( isset($_POST['tax_input']) && isset($_POST['tax_input'][$taxonomy->name]) ) ? (array) $_POST['tax_input'][$taxonomy->name] : array(); + $checked_categories = array_map( 'absint', (array) $post_category ); + $popular_ids = wp_popular_terms_checklist($taxonomy->name, 0, 10, false); + + foreach ( $names as $cat_name ) { + $cat_name = trim($cat_name); + $category_nicename = sanitize_title($cat_name); + if ( '' === $category_nicename ) + continue; + if ( !$cat_id = term_exists( $cat_name, $taxonomy->name, $parent ) ) + $cat_id = wp_insert_term( $cat_name, $taxonomy->name, array( 'parent' => $parent ) ); + if ( is_wp_error( $cat_id ) ) + continue; + else if ( is_array( $cat_id ) ) + $cat_id = $cat_id['term_id']; + $checked_categories[] = $cat_id; + if ( $parent ) // Do these all at once in a second + continue; + ob_start(); + wp_terms_checklist( 0, array( 'taxonomy' => $taxonomy->name, 'descendants_and_self' => $cat_id, 'selected_cats' => $checked_categories, 'popular_cats' => $popular_ids )); + $data = ob_get_contents(); + ob_end_clean(); + $add = array( + 'what' => $taxonomy->name, + 'id' => $cat_id, + 'data' => str_replace( array("\n", "\t"), '', $data), + 'position' => -1 + ); + } + + if ( $parent ) { // Foncy - replace the parent and all its children + $parent = get_term( $parent, $taxonomy->name ); + $term_id = $parent->term_id; + + while ( $parent->parent ) { // get the top parent + $parent = get_term( $parent->parent, $taxonomy->name ); + if ( is_wp_error( $parent ) ) + break; + $term_id = $parent->term_id; + } + + ob_start(); + wp_terms_checklist( 0, array('taxonomy' => $taxonomy->name, 'descendants_and_self' => $term_id, 'selected_cats' => $checked_categories, 'popular_cats' => $popular_ids)); + $data = ob_get_contents(); + ob_end_clean(); + $add = array( + 'what' => $taxonomy->name, + 'id' => $term_id, + 'data' => str_replace( array("\n", "\t"), '', $data), + 'position' => -1 + ); + } + + ob_start(); + wp_dropdown_categories( array( + 'taxonomy' => $taxonomy->name, 'hide_empty' => 0, 'name' => 'new'.$taxonomy->name.'_parent', 'orderby' => 'name', + 'hierarchical' => 1, 'show_option_none' => '— '.$taxonomy->labels->parent_item.' —' + ) ); + $sup = ob_get_contents(); + ob_end_clean(); + $add['supplemental'] = array( 'newcat_parent' => $sup ); + + $x = new WP_Ajax_Response( $add ); + $x->send(); +} + +function wp_ajax_delete_comment() { + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + if ( !$comment = get_comment( $id ) ) + wp_die( time() ); + if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) ) + wp_die( -1 ); + + check_ajax_referer( "delete-comment_$id" ); + $status = wp_get_comment_status( $comment->comment_ID ); + + $delta = -1; + if ( isset($_POST['trash']) && 1 == $_POST['trash'] ) { + if ( 'trash' == $status ) + wp_die( time() ); + $r = wp_trash_comment( $comment->comment_ID ); + } elseif ( isset($_POST['untrash']) && 1 == $_POST['untrash'] ) { + if ( 'trash' != $status ) + wp_die( time() ); + $r = wp_untrash_comment( $comment->comment_ID ); + if ( ! isset( $_POST['comment_status'] ) || $_POST['comment_status'] != 'trash' ) // undo trash, not in trash + $delta = 1; + } elseif ( isset($_POST['spam']) && 1 == $_POST['spam'] ) { + if ( 'spam' == $status ) + wp_die( time() ); + $r = wp_spam_comment( $comment->comment_ID ); + } elseif ( isset($_POST['unspam']) && 1 == $_POST['unspam'] ) { + if ( 'spam' != $status ) + wp_die( time() ); + $r = wp_unspam_comment( $comment->comment_ID ); + if ( ! isset( $_POST['comment_status'] ) || $_POST['comment_status'] != 'spam' ) // undo spam, not in spam + $delta = 1; + } elseif ( isset($_POST['delete']) && 1 == $_POST['delete'] ) { + $r = wp_delete_comment( $comment->comment_ID ); + } else { + wp_die( -1 ); + } + + if ( $r ) // Decide if we need to send back '1' or a more complicated response including page links and comment counts + _wp_ajax_delete_comment_response( $comment->comment_ID, $delta ); + wp_die( 0 ); +} + +function wp_ajax_delete_tag() { + $tag_id = (int) $_POST['tag_ID']; + check_ajax_referer( "delete-tag_$tag_id" ); + + $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag'; + $tax = get_taxonomy($taxonomy); + + if ( !current_user_can( $tax->cap->delete_terms ) ) + wp_die( -1 ); + + $tag = get_term( $tag_id, $taxonomy ); + if ( !$tag || is_wp_error( $tag ) ) + wp_die( 1 ); + + if ( wp_delete_term($tag_id, $taxonomy)) + wp_die( 1 ); + else + wp_die( 0 ); +} + +function wp_ajax_delete_link() { + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + check_ajax_referer( "delete-bookmark_$id" ); + if ( !current_user_can( 'manage_links' ) ) + wp_die( -1 ); + + $link = get_bookmark( $id ); + if ( !$link || is_wp_error( $link ) ) + wp_die( 1 ); + + if ( wp_delete_link( $id ) ) + wp_die( 1 ); + else + wp_die( 0 ); +} + +function wp_ajax_delete_meta() { + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + check_ajax_referer( "delete-meta_$id" ); + if ( !$meta = get_metadata_by_mid( 'post', $id ) ) + wp_die( 1 ); + + if ( is_protected_meta( $meta->meta_key, 'post' ) || ! current_user_can( 'delete_post_meta', $meta->post_id, $meta->meta_key ) ) + wp_die( -1 ); + if ( delete_meta( $meta->meta_id ) ) + wp_die( 1 ); + wp_die( 0 ); +} + +function wp_ajax_delete_post( $action ) { + if ( empty( $action ) ) + $action = 'delete-post'; + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + check_ajax_referer( "{$action}_$id" ); + if ( !current_user_can( 'delete_post', $id ) ) + wp_die( -1 ); + + if ( !get_post( $id ) ) + wp_die( 1 ); + + if ( wp_delete_post( $id ) ) + wp_die( 1 ); + else + wp_die( 0 ); +} + +function wp_ajax_trash_post( $action ) { + if ( empty( $action ) ) + $action = 'trash-post'; + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + check_ajax_referer( "{$action}_$id" ); + if ( !current_user_can( 'delete_post', $id ) ) + wp_die( -1 ); + + if ( !get_post( $id ) ) + wp_die( 1 ); + + if ( 'trash-post' == $action ) + $done = wp_trash_post( $id ); + else + $done = wp_untrash_post( $id ); + + if ( $done ) + wp_die( 1 ); + + wp_die( 0 ); +} + +function wp_ajax_untrash_post( $action ) { + if ( empty( $action ) ) + $action = 'untrash-post'; + wp_ajax_trash_post( $action ); +} + +function wp_ajax_delete_page( $action ) { + if ( empty( $action ) ) + $action = 'delete-page'; + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + check_ajax_referer( "{$action}_$id" ); + if ( !current_user_can( 'delete_page', $id ) ) + wp_die( -1 ); + + if ( ! get_post( $id ) ) + wp_die( 1 ); + + if ( wp_delete_post( $id ) ) + wp_die( 1 ); + else + wp_die( 0 ); +} + +function wp_ajax_dim_comment() { + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + if ( !$comment = get_comment( $id ) ) { + $x = new WP_Ajax_Response( array( + 'what' => 'comment', + 'id' => new WP_Error('invalid_comment', sprintf(__('Comment %d does not exist'), $id)) + ) ); + $x->send(); + } + + if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) && ! current_user_can( 'moderate_comments' ) ) + wp_die( -1 ); + + $current = wp_get_comment_status( $comment->comment_ID ); + if ( isset( $_POST['new'] ) && $_POST['new'] == $current ) + wp_die( time() ); + + check_ajax_referer( "approve-comment_$id" ); + if ( in_array( $current, array( 'unapproved', 'spam' ) ) ) + $result = wp_set_comment_status( $comment->comment_ID, 'approve', true ); + else + $result = wp_set_comment_status( $comment->comment_ID, 'hold', true ); + + if ( is_wp_error($result) ) { + $x = new WP_Ajax_Response( array( + 'what' => 'comment', + 'id' => $result + ) ); + $x->send(); + } + + // Decide if we need to send back '1' or a more complicated response including page links and comment counts + _wp_ajax_delete_comment_response( $comment->comment_ID ); + wp_die( 0 ); +} + +function wp_ajax_add_link_category( $action ) { + if ( empty( $action ) ) + $action = 'add-link-category'; + check_ajax_referer( $action ); + if ( !current_user_can( 'manage_categories' ) ) + wp_die( -1 ); + $names = explode(',', wp_unslash( $_POST['newcat'] ) ); + $x = new WP_Ajax_Response(); + foreach ( $names as $cat_name ) { + $cat_name = trim($cat_name); + $slug = sanitize_title($cat_name); + if ( '' === $slug ) + continue; + if ( !$cat_id = term_exists( $cat_name, 'link_category' ) ) + $cat_id = wp_insert_term( $cat_name, 'link_category' ); + if ( is_wp_error( $cat_id ) ) + continue; + else if ( is_array( $cat_id ) ) + $cat_id = $cat_id['term_id']; + $cat_name = esc_html( $cat_name ); + $x->add( array( + 'what' => 'link-category', + 'id' => $cat_id, + 'data' => "", + 'position' => -1 + ) ); + } + $x->send(); +} + +function wp_ajax_add_tag() { + global $wp_list_table; + + check_ajax_referer( 'add-tag', '_wpnonce_add-tag' ); + $post_type = !empty($_POST['post_type']) ? $_POST['post_type'] : 'post'; + $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag'; + $tax = get_taxonomy($taxonomy); + + if ( !current_user_can( $tax->cap->edit_terms ) ) + wp_die( -1 ); + + $x = new WP_Ajax_Response(); + + $tag = wp_insert_term($_POST['tag-name'], $taxonomy, $_POST ); + + if ( !$tag || is_wp_error($tag) || (!$tag = get_term( $tag['term_id'], $taxonomy )) ) { + $message = __('An error has occurred. Please reload the page and try again.'); + if ( is_wp_error($tag) && $tag->get_error_message() ) + $message = $tag->get_error_message(); + + $x->add( array( + 'what' => 'taxonomy', + 'data' => new WP_Error('error', $message ) + ) ); + $x->send(); + } + + $wp_list_table = _get_list_table( 'WP_Terms_List_Table', array( 'screen' => $_POST['screen'] ) ); + + $level = 0; + if ( is_taxonomy_hierarchical($taxonomy) ) { + $level = count( get_ancestors( $tag->term_id, $taxonomy ) ); + ob_start(); + $wp_list_table->single_row( $tag, $level ); + $noparents = ob_get_clean(); + } + + ob_start(); + $wp_list_table->single_row( $tag ); + $parents = ob_get_clean(); + + $x->add( array( + 'what' => 'taxonomy', + 'supplemental' => compact('parents', 'noparents') + ) ); + $x->add( array( + 'what' => 'term', + 'position' => $level, + 'supplemental' => (array) $tag + ) ); + $x->send(); +} + +function wp_ajax_get_tagcloud() { + if ( isset( $_POST['tax'] ) ) { + $taxonomy = sanitize_key( $_POST['tax'] ); + $tax = get_taxonomy( $taxonomy ); + if ( ! $tax ) + wp_die( 0 ); + if ( ! current_user_can( $tax->cap->assign_terms ) ) + wp_die( -1 ); + } else { + wp_die( 0 ); + } + + $tags = get_terms( $taxonomy, array( 'number' => 45, 'orderby' => 'count', 'order' => 'DESC' ) ); + + if ( empty( $tags ) ) + wp_die( $tax->labels->not_found ); + + if ( is_wp_error( $tags ) ) + wp_die( $tags->get_error_message() ); + + foreach ( $tags as $key => $tag ) { + $tags[ $key ]->link = '#'; + $tags[ $key ]->id = $tag->term_id; + } + + // We need raw tag names here, so don't filter the output + $return = wp_generate_tag_cloud( $tags, array('filter' => 0) ); + + if ( empty($return) ) + wp_die( 0 ); + + echo $return; + + wp_die(); +} + +function wp_ajax_get_comments( $action ) { + global $wp_list_table, $post_id; + if ( empty( $action ) ) + $action = 'get-comments'; + + check_ajax_referer( $action ); + + if ( empty( $post_id ) && ! empty( $_REQUEST['p'] ) ) { + $id = absint( $_REQUEST['p'] ); + if ( ! empty( $id ) ) + $post_id = $id; + } + + if ( empty( $post_id ) ) + wp_die( -1 ); + + $wp_list_table = _get_list_table( 'WP_Post_Comments_List_Table', array( 'screen' => 'edit-comments' ) ); + + if ( ! current_user_can( 'edit_post', $post_id ) ) + wp_die( -1 ); + + $wp_list_table->prepare_items(); + + if ( !$wp_list_table->has_items() ) + wp_die( 1 ); + + $x = new WP_Ajax_Response(); + ob_start(); + foreach ( $wp_list_table->items as $comment ) { + if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) ) + continue; + get_comment( $comment ); + $wp_list_table->single_row( $comment ); + } + $comment_list_item = ob_get_contents(); + ob_end_clean(); + + $x->add( array( + 'what' => 'comments', + 'data' => $comment_list_item + ) ); + $x->send(); +} + +function wp_ajax_replyto_comment( $action ) { + global $wp_list_table, $wpdb; + if ( empty( $action ) ) + $action = 'replyto-comment'; + + check_ajax_referer( $action, '_ajax_nonce-replyto-comment' ); + + $comment_post_ID = (int) $_POST['comment_post_ID']; + $post = get_post( $comment_post_ID ); + if ( ! $post ) + wp_die( -1 ); + + if ( !current_user_can( 'edit_post', $comment_post_ID ) ) + wp_die( -1 ); + + if ( empty( $post->post_status ) ) + wp_die( 1 ); + elseif ( in_array($post->post_status, array('draft', 'pending', 'trash') ) ) + wp_die( __('ERROR: you are replying to a comment on a draft post.') ); + + $user = wp_get_current_user(); + if ( $user->exists() ) { + $user_ID = $user->ID; + $comment_author = wp_slash( $user->display_name ); + $comment_author_email = wp_slash( $user->user_email ); + $comment_author_url = wp_slash( $user->user_url ); + $comment_content = trim($_POST['content']); + if ( current_user_can( 'unfiltered_html' ) ) { + if ( ! isset( $_POST['_wp_unfiltered_html_comment'] ) ) + $_POST['_wp_unfiltered_html_comment'] = ''; + + if ( wp_create_nonce( 'unfiltered-html-comment' ) != $_POST['_wp_unfiltered_html_comment'] ) { + kses_remove_filters(); // start with a clean slate + kses_init_filters(); // set up the filters + } + } + } else { + wp_die( __( 'Sorry, you must be logged in to reply to a comment.' ) ); + } + + if ( '' == $comment_content ) + wp_die( __( 'ERROR: please type a comment.' ) ); + + $comment_parent = 0; + if ( isset( $_POST['comment_ID'] ) ) + $comment_parent = absint( $_POST['comment_ID'] ); + $comment_auto_approved = false; + $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID'); + + // automatically approve parent comment + if ( !empty($_POST['approve_parent']) ) { + $parent = get_comment( $comment_parent ); + + if ( $parent && $parent->comment_approved === '0' && $parent->comment_post_ID == $comment_post_ID ) { + if ( wp_set_comment_status( $parent->comment_ID, 'approve' ) ) + $comment_auto_approved = true; + } + } + + $comment_id = wp_new_comment( $commentdata ); + $comment = get_comment($comment_id); + if ( ! $comment ) wp_die( 1 ); + + $position = ( isset($_POST['position']) && (int) $_POST['position'] ) ? (int) $_POST['position'] : '-1'; + + ob_start(); + if ( isset( $_REQUEST['mode'] ) && 'dashboard' == $_REQUEST['mode'] ) { + require_once( ABSPATH . 'wp-admin/includes/dashboard.php' ); + _wp_dashboard_recent_comments_row( $comment ); + } else { + if ( isset( $_REQUEST['mode'] ) && 'single' == $_REQUEST['mode'] ) { + $wp_list_table = _get_list_table('WP_Post_Comments_List_Table', array( 'screen' => 'edit-comments' ) ); + } else { + $wp_list_table = _get_list_table('WP_Comments_List_Table', array( 'screen' => 'edit-comments' ) ); + } + $wp_list_table->single_row( $comment ); + } + $comment_list_item = ob_get_clean(); + + $response = array( + 'what' => 'comment', + 'id' => $comment->comment_ID, + 'data' => $comment_list_item, + 'position' => $position + ); + + if ( $comment_auto_approved ) + $response['supplemental'] = array( 'parent_approved' => $parent->comment_ID ); + + $x = new WP_Ajax_Response(); + $x->add( $response ); + $x->send(); +} + +function wp_ajax_edit_comment() { + global $wp_list_table; + + check_ajax_referer( 'replyto-comment', '_ajax_nonce-replyto-comment' ); + + $comment_id = (int) $_POST['comment_ID']; + if ( ! current_user_can( 'edit_comment', $comment_id ) ) + wp_die( -1 ); + + if ( '' == $_POST['content'] ) + wp_die( __( 'ERROR: please type a comment.' ) ); + + if ( isset( $_POST['status'] ) ) + $_POST['comment_status'] = $_POST['status']; + edit_comment(); + + $position = ( isset($_POST['position']) && (int) $_POST['position']) ? (int) $_POST['position'] : '-1'; + $comments_status = isset($_POST['comments_listing']) ? $_POST['comments_listing'] : ''; + + $checkbox = ( isset($_POST['checkbox']) && true == $_POST['checkbox'] ) ? 1 : 0; + $wp_list_table = _get_list_table( $checkbox ? 'WP_Comments_List_Table' : 'WP_Post_Comments_List_Table', array( 'screen' => 'edit-comments' ) ); + + $comment = get_comment( $comment_id ); + if ( empty( $comment->comment_ID ) ) + wp_die( -1 ); + + ob_start(); + $wp_list_table->single_row( $comment ); + $comment_list_item = ob_get_clean(); + + $x = new WP_Ajax_Response(); + + $x->add( array( + 'what' => 'edit_comment', + 'id' => $comment->comment_ID, + 'data' => $comment_list_item, + 'position' => $position + )); + + $x->send(); +} + +function wp_ajax_add_menu_item() { + check_ajax_referer( 'add-menu_item', 'menu-settings-column-nonce' ); + + if ( ! current_user_can( 'edit_theme_options' ) ) + wp_die( -1 ); + + require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; + + // For performance reasons, we omit some object properties from the checklist. + // The following is a hacky way to restore them when adding non-custom items. + + $menu_items_data = array(); + foreach ( (array) $_POST['menu-item'] as $menu_item_data ) { + if ( + ! empty( $menu_item_data['menu-item-type'] ) && + 'custom' != $menu_item_data['menu-item-type'] && + ! empty( $menu_item_data['menu-item-object-id'] ) + ) { + switch( $menu_item_data['menu-item-type'] ) { + case 'post_type' : + $_object = get_post( $menu_item_data['menu-item-object-id'] ); + break; + + case 'taxonomy' : + $_object = get_term( $menu_item_data['menu-item-object-id'], $menu_item_data['menu-item-object'] ); + break; + } + + $_menu_items = array_map( 'wp_setup_nav_menu_item', array( $_object ) ); + $_menu_item = array_shift( $_menu_items ); + + // Restore the missing menu item properties + $menu_item_data['menu-item-description'] = $_menu_item->description; + } + + $menu_items_data[] = $menu_item_data; + } + + $item_ids = wp_save_nav_menu_items( 0, $menu_items_data ); + if ( is_wp_error( $item_ids ) ) + wp_die( 0 ); + + $menu_items = array(); + + foreach ( (array) $item_ids as $menu_item_id ) { + $menu_obj = get_post( $menu_item_id ); + if ( ! empty( $menu_obj->ID ) ) { + $menu_obj = wp_setup_nav_menu_item( $menu_obj ); + $menu_obj->label = $menu_obj->title; // don't show "(pending)" in ajax-added items + $menu_items[] = $menu_obj; + } + } + + /** + * Filter the Walker class used when adding nav menu items. + * + * @since 3.4.0 + * + * @param string $class The walker class to use. Default 'Walker_Nav_Menu_Edit'. + * @param int $menu_id The menu id, derived from $_POST['menu']. + */ + $walker_class_name = apply_filters( 'wp_edit_nav_menu_walker', 'Walker_Nav_Menu_Edit', $_POST['menu'] ); + + if ( ! class_exists( $walker_class_name ) ) + wp_die( 0 ); + + if ( ! empty( $menu_items ) ) { + $args = array( + 'after' => '', + 'before' => '', + 'link_after' => '', + 'link_before' => '', + 'walker' => new $walker_class_name, + ); + echo walk_nav_menu_tree( $menu_items, 0, (object) $args ); + } + wp_die(); +} + +function wp_ajax_add_meta() { + check_ajax_referer( 'add-meta', '_ajax_nonce-add-meta' ); + $c = 0; + $pid = (int) $_POST['post_id']; + $post = get_post( $pid ); + + if ( isset($_POST['metakeyselect']) || isset($_POST['metakeyinput']) ) { + if ( !current_user_can( 'edit_post', $pid ) ) + wp_die( -1 ); + if ( isset($_POST['metakeyselect']) && '#NONE#' == $_POST['metakeyselect'] && empty($_POST['metakeyinput']) ) + wp_die( 1 ); + if ( $post->post_status == 'auto-draft' ) { + $save_POST = $_POST; // Backup $_POST + $_POST = array(); // Make it empty for edit_post() + $_POST['action'] = 'draft'; // Warning fix + $_POST['post_ID'] = $pid; + $_POST['post_type'] = $post->post_type; + $_POST['post_status'] = 'draft'; + $now = current_time('timestamp', 1); + $_POST['post_title'] = sprintf( __( 'Draft created on %1$s at %2$s' ), date( get_option( 'date_format' ), $now ), date( get_option( 'time_format' ), $now ) ); + + if ( $pid = edit_post() ) { + if ( is_wp_error( $pid ) ) { + $x = new WP_Ajax_Response( array( + 'what' => 'meta', + 'data' => $pid + ) ); + $x->send(); + } + $_POST = $save_POST; // Now we can restore original $_POST again + if ( !$mid = add_meta( $pid ) ) + wp_die( __( 'Please provide a custom field value.' ) ); + } else { + wp_die( 0 ); + } + } else if ( !$mid = add_meta( $pid ) ) { + wp_die( __( 'Please provide a custom field value.' ) ); + } + + $meta = get_metadata_by_mid( 'post', $mid ); + $pid = (int) $meta->post_id; + $meta = get_object_vars( $meta ); + $x = new WP_Ajax_Response( array( + 'what' => 'meta', + 'id' => $mid, + 'data' => _list_meta_row( $meta, $c ), + 'position' => 1, + 'supplemental' => array('postid' => $pid) + ) ); + } else { // Update? + $mid = (int) key( $_POST['meta'] ); + $key = wp_unslash( $_POST['meta'][$mid]['key'] ); + $value = wp_unslash( $_POST['meta'][$mid]['value'] ); + if ( '' == trim($key) ) + wp_die( __( 'Please provide a custom field name.' ) ); + if ( '' == trim($value) ) + wp_die( __( 'Please provide a custom field value.' ) ); + if ( ! $meta = get_metadata_by_mid( 'post', $mid ) ) + wp_die( 0 ); // if meta doesn't exist + if ( is_protected_meta( $meta->meta_key, 'post' ) || is_protected_meta( $key, 'post' ) || + ! current_user_can( 'edit_post_meta', $meta->post_id, $meta->meta_key ) || + ! current_user_can( 'edit_post_meta', $meta->post_id, $key ) ) + wp_die( -1 ); + if ( $meta->meta_value != $value || $meta->meta_key != $key ) { + if ( !$u = update_metadata_by_mid( 'post', $mid, $value, $key ) ) + wp_die( 0 ); // We know meta exists; we also know it's unchanged (or DB error, in which case there are bigger problems). + } + + $x = new WP_Ajax_Response( array( + 'what' => 'meta', + 'id' => $mid, 'old_id' => $mid, + 'data' => _list_meta_row( array( + 'meta_key' => $key, + 'meta_value' => $value, + 'meta_id' => $mid + ), $c ), + 'position' => 0, + 'supplemental' => array('postid' => $meta->post_id) + ) ); + } + $x->send(); +} + +function wp_ajax_add_user( $action ) { + global $wp_list_table; + if ( empty( $action ) ) + $action = 'add-user'; + + check_ajax_referer( $action ); + if ( ! current_user_can('create_users') ) + wp_die( -1 ); + if ( ! $user_id = edit_user() ) { + wp_die( 0 ); + } elseif ( is_wp_error( $user_id ) ) { + $x = new WP_Ajax_Response( array( + 'what' => 'user', + 'id' => $user_id + ) ); + $x->send(); + } + $user_object = get_userdata( $user_id ); + + $wp_list_table = _get_list_table('WP_Users_List_Table'); + + $role = current( $user_object->roles ); + + $x = new WP_Ajax_Response( array( + 'what' => 'user', + 'id' => $user_id, + 'data' => $wp_list_table->single_row( $user_object, '', $role ), + 'supplemental' => array( + 'show-link' => sprintf(__( 'User %s added' ), "user-$user_id", $user_object->user_login), + 'role' => $role, + ) + ) ); + $x->send(); +} + +function wp_ajax_autosave() { + define( 'DOING_AUTOSAVE', true ); + + check_ajax_referer( 'autosave', 'autosavenonce' ); + + if ( ! empty( $_POST['catslist'] ) ) + $_POST['post_category'] = explode( ',', $_POST['catslist'] ); + if ( $_POST['post_type'] == 'page' || empty( $_POST['post_category'] ) ) + unset( $_POST['post_category'] ); + + $data = ''; + $supplemental = array(); + $id = $revision_id = 0; + + $post_id = (int) $_POST['post_id']; + $_POST['ID'] = $_POST['post_ID'] = $post_id; + $post = get_post( $post_id ); + if ( empty( $post->ID ) || ! current_user_can( 'edit_post', $post->ID ) ) + wp_die( __( 'You are not allowed to edit this post.' ) ); + + if ( 'page' == $post->post_type && ! current_user_can( 'edit_page', $post->ID ) ) + wp_die( __( 'You are not allowed to edit this page.' ) ); + + if ( 'auto-draft' == $post->post_status ) + $_POST['post_status'] = 'draft'; + + if ( ! empty( $_POST['autosave'] ) ) { + if ( ! wp_check_post_lock( $post->ID ) && get_current_user_id() == $post->post_author && ( 'auto-draft' == $post->post_status || 'draft' == $post->post_status ) ) { + // Drafts and auto-drafts are just overwritten by autosave for the same user if the post is not locked + $id = edit_post(); + } else { + // Non drafts or other users drafts are not overwritten. The autosave is stored in a special post revision for each user. + $revision_id = wp_create_post_autosave( $post->ID ); + if ( is_wp_error($revision_id) ) + $id = $revision_id; + else + $id = $post->ID; + } + + if ( ! is_wp_error($id) ) { + /* translators: draft saved date format, see http://php.net/date */ + $draft_saved_date_format = __('g:i:s a'); + /* translators: %s: date and time */ + $data = sprintf( __('Draft saved at %s.'), date_i18n( $draft_saved_date_format ) ); + } + } else { + if ( ! empty( $_POST['auto_draft'] ) ) + $id = 0; // This tells us it didn't actually save + else + $id = $post->ID; + } + + // @todo Consider exposing any errors, rather than having 'Saving draft...' + $x = new WP_Ajax_Response( array( + 'what' => 'autosave', + 'id' => $id, + 'data' => $data, + 'supplemental' => $supplemental + ) ); + $x->send(); +} + +function wp_ajax_closed_postboxes() { + check_ajax_referer( 'closedpostboxes', 'closedpostboxesnonce' ); + $closed = isset( $_POST['closed'] ) ? explode( ',', $_POST['closed']) : array(); + $closed = array_filter($closed); + + $hidden = isset( $_POST['hidden'] ) ? explode( ',', $_POST['hidden']) : array(); + $hidden = array_filter($hidden); + + $page = isset( $_POST['page'] ) ? $_POST['page'] : ''; + + if ( $page != sanitize_key( $page ) ) + wp_die( 0 ); + + if ( ! $user = wp_get_current_user() ) + wp_die( -1 ); + + if ( is_array($closed) ) + update_user_option($user->ID, "closedpostboxes_$page", $closed, true); + + if ( is_array($hidden) ) { + $hidden = array_diff( $hidden, array('submitdiv', 'linksubmitdiv', 'manage-menu', 'create-menu') ); // postboxes that are always shown + update_user_option($user->ID, "metaboxhidden_$page", $hidden, true); + } + + wp_die( 1 ); +} + +function wp_ajax_hidden_columns() { + check_ajax_referer( 'screen-options-nonce', 'screenoptionnonce' ); + $hidden = isset( $_POST['hidden'] ) ? $_POST['hidden'] : ''; + $hidden = explode( ',', $_POST['hidden'] ); + $page = isset( $_POST['page'] ) ? $_POST['page'] : ''; + + if ( $page != sanitize_key( $page ) ) + wp_die( 0 ); + + if ( ! $user = wp_get_current_user() ) + wp_die( -1 ); + + if ( is_array($hidden) ) + update_user_option($user->ID, "manage{$page}columnshidden", $hidden, true); + + wp_die( 1 ); +} + +function wp_ajax_update_welcome_panel() { + check_ajax_referer( 'welcome-panel-nonce', 'welcomepanelnonce' ); + + if ( ! current_user_can( 'edit_theme_options' ) ) + wp_die( -1 ); + + update_user_meta( get_current_user_id(), 'show_welcome_panel', empty( $_POST['visible'] ) ? 0 : 1 ); + + wp_die( 1 ); +} + +function wp_ajax_menu_get_metabox() { + if ( ! current_user_can( 'edit_theme_options' ) ) + wp_die( -1 ); + + require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; + + if ( isset( $_POST['item-type'] ) && 'post_type' == $_POST['item-type'] ) { + $type = 'posttype'; + $callback = 'wp_nav_menu_item_post_type_meta_box'; + $items = (array) get_post_types( array( 'show_in_nav_menus' => true ), 'object' ); + } elseif ( isset( $_POST['item-type'] ) && 'taxonomy' == $_POST['item-type'] ) { + $type = 'taxonomy'; + $callback = 'wp_nav_menu_item_taxonomy_meta_box'; + $items = (array) get_taxonomies( array( 'show_ui' => true ), 'object' ); + } + + if ( ! empty( $_POST['item-object'] ) && isset( $items[$_POST['item-object']] ) ) { + $menus_meta_box_object = $items[ $_POST['item-object'] ]; + /** + * Filter a nav menu meta box object. + * + * @since 3.0.0 + * + * @param object $menus_meta_box_object A nav menu meta box object, such as Page, Post, Category, Tag, etc. + */ + $item = apply_filters( 'nav_menu_meta_box_object', $menus_meta_box_object ); + ob_start(); + call_user_func_array($callback, array( + null, + array( + 'id' => 'add-' . $item->name, + 'title' => $item->labels->name, + 'callback' => $callback, + 'args' => $item, + ) + )); + + $markup = ob_get_clean(); + + echo json_encode(array( + 'replace-id' => $type . '-' . $item->name, + 'markup' => $markup, + )); + } + + wp_die(); +} + +function wp_ajax_wp_link_ajax() { + check_ajax_referer( 'internal-linking', '_ajax_linking_nonce' ); + + $args = array(); + + if ( isset( $_POST['search'] ) ) + $args['s'] = wp_unslash( $_POST['search'] ); + $args['pagenum'] = ! empty( $_POST['page'] ) ? absint( $_POST['page'] ) : 1; + + require(ABSPATH . WPINC . '/class-wp-editor.php'); + $results = _WP_Editors::wp_link_query( $args ); + + if ( ! isset( $results ) ) + wp_die( 0 ); + + echo json_encode( $results ); + echo "\n"; + + wp_die(); +} + +function wp_ajax_menu_locations_save() { + if ( ! current_user_can( 'edit_theme_options' ) ) + wp_die( -1 ); + check_ajax_referer( 'add-menu_item', 'menu-settings-column-nonce' ); + if ( ! isset( $_POST['menu-locations'] ) ) + wp_die( 0 ); + set_theme_mod( 'nav_menu_locations', array_map( 'absint', $_POST['menu-locations'] ) ); + wp_die( 1 ); +} + +function wp_ajax_meta_box_order() { + check_ajax_referer( 'meta-box-order' ); + $order = isset( $_POST['order'] ) ? (array) $_POST['order'] : false; + $page_columns = isset( $_POST['page_columns'] ) ? $_POST['page_columns'] : 'auto'; + + if ( $page_columns != 'auto' ) + $page_columns = (int) $page_columns; + + $page = isset( $_POST['page'] ) ? $_POST['page'] : ''; + + if ( $page != sanitize_key( $page ) ) + wp_die( 0 ); + + if ( ! $user = wp_get_current_user() ) + wp_die( -1 ); + + if ( $order ) + update_user_option($user->ID, "meta-box-order_$page", $order, true); + + if ( $page_columns ) + update_user_option($user->ID, "screen_layout_$page", $page_columns, true); + + wp_die( 1 ); +} + +function wp_ajax_menu_quick_search() { + if ( ! current_user_can( 'edit_theme_options' ) ) + wp_die( -1 ); + + require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; + + _wp_ajax_menu_quick_search( $_POST ); + + wp_die(); +} + +function wp_ajax_get_permalink() { + check_ajax_referer( 'getpermalink', 'getpermalinknonce' ); + $post_id = isset($_POST['post_id'])? intval($_POST['post_id']) : 0; + wp_die( add_query_arg( array( 'preview' => 'true' ), get_permalink( $post_id ) ) ); +} + +function wp_ajax_sample_permalink() { + check_ajax_referer( 'samplepermalink', 'samplepermalinknonce' ); + $post_id = isset($_POST['post_id'])? intval($_POST['post_id']) : 0; + $title = isset($_POST['new_title'])? $_POST['new_title'] : ''; + $slug = isset($_POST['new_slug'])? $_POST['new_slug'] : null; + wp_die( get_sample_permalink_html( $post_id, $title, $slug ) ); +} + +function wp_ajax_inline_save() { + global $wp_list_table; + + check_ajax_referer( 'inlineeditnonce', '_inline_edit' ); + + if ( ! isset($_POST['post_ID']) || ! ( $post_ID = (int) $_POST['post_ID'] ) ) + wp_die(); + + if ( 'page' == $_POST['post_type'] ) { + if ( ! current_user_can( 'edit_page', $post_ID ) ) + wp_die( __( 'You are not allowed to edit this page.' ) ); + } else { + if ( ! current_user_can( 'edit_post', $post_ID ) ) + wp_die( __( 'You are not allowed to edit this post.' ) ); + } + + if ( $last = wp_check_post_lock( $post_ID ) ) { + $last_user = get_userdata( $last ); + $last_user_name = $last_user ? $last_user->display_name : __( 'Someone' ); + printf( $_POST['post_type'] == 'page' ? __( 'Saving is disabled: %s is currently editing this page.' ) : __( 'Saving is disabled: %s is currently editing this post.' ), esc_html( $last_user_name ) ); + wp_die(); + } + + $data = &$_POST; + + $post = get_post( $post_ID, ARRAY_A ); + $post = wp_slash($post); //since it is from db + + $data['content'] = $post['post_content']; + $data['excerpt'] = $post['post_excerpt']; + + // rename + $data['user_ID'] = get_current_user_id(); + + if ( isset($data['post_parent']) ) + $data['parent_id'] = $data['post_parent']; + + // status + if ( isset($data['keep_private']) && 'private' == $data['keep_private'] ) + $data['post_status'] = 'private'; + else + $data['post_status'] = $data['_status']; + + if ( empty($data['comment_status']) ) + $data['comment_status'] = 'closed'; + if ( empty($data['ping_status']) ) + $data['ping_status'] = 'closed'; + + // Hack: wp_unique_post_slug() doesn't work for drafts, so we will fake that our post is published. + if ( ! empty( $data['post_name'] ) && in_array( $post['post_status'], array( 'draft', 'pending' ) ) ) { + $post['post_status'] = 'publish'; + $data['post_name'] = wp_unique_post_slug( $data['post_name'], $post['ID'], $post['post_status'], $post['post_type'], $post['post_parent'] ); + } + + // update the post + edit_post(); + + $wp_list_table = _get_list_table( 'WP_Posts_List_Table', array( 'screen' => $_POST['screen'] ) ); + + $mode = $_POST['post_view']; + + $level = 0; + $request_post = array( get_post( $_POST['post_ID'] ) ); + $parent = $request_post[0]->post_parent; + + while ( $parent > 0 ) { + $parent_post = get_post( $parent ); + $parent = $parent_post->post_parent; + $level++; + } + + $wp_list_table->display_rows( array( get_post( $_POST['post_ID'] ) ), $level ); + + wp_die(); +} + +function wp_ajax_inline_save_tax() { + global $wp_list_table; + + check_ajax_referer( 'taxinlineeditnonce', '_inline_edit' ); + + $taxonomy = sanitize_key( $_POST['taxonomy'] ); + $tax = get_taxonomy( $taxonomy ); + if ( ! $tax ) + wp_die( 0 ); + + if ( ! current_user_can( $tax->cap->edit_terms ) ) + wp_die( -1 ); + + $wp_list_table = _get_list_table( 'WP_Terms_List_Table', array( 'screen' => 'edit-' . $taxonomy ) ); + + if ( ! isset($_POST['tax_ID']) || ! ( $id = (int) $_POST['tax_ID'] ) ) + wp_die( -1 ); + + $tag = get_term( $id, $taxonomy ); + $_POST['description'] = $tag->description; + + $updated = wp_update_term($id, $taxonomy, $_POST); + if ( $updated && !is_wp_error($updated) ) { + $tag = get_term( $updated['term_id'], $taxonomy ); + if ( !$tag || is_wp_error( $tag ) ) { + if ( is_wp_error($tag) && $tag->get_error_message() ) + wp_die( $tag->get_error_message() ); + wp_die( __( 'Item not updated.' ) ); + } + } else { + if ( is_wp_error($updated) && $updated->get_error_message() ) + wp_die( $updated->get_error_message() ); + wp_die( __( 'Item not updated.' ) ); + } + $level = 0; + $parent = $tag->parent; + while ( $parent > 0 ) { + $parent_tag = get_term( $parent, $taxonomy ); + $parent = $parent_tag->parent; + $level++; + } + $wp_list_table->single_row( $tag, $level ); + wp_die(); +} + +function wp_ajax_find_posts() { + global $wpdb; + + check_ajax_referer( 'find-posts' ); + + $post_types = get_post_types( array( 'public' => true ), 'objects' ); + unset( $post_types['attachment'] ); + + $s = wp_unslash( $_POST['ps'] ); + $searchand = $search = ''; + $args = array( + 'post_type' => array_keys( $post_types ), + 'post_status' => 'any', + 'posts_per_page' => 50, + ); + if ( '' !== $s ) + $args['s'] = $s; + + $posts = get_posts( $args ); + + if ( ! $posts ) + wp_die( __('No items found.') ); + + $html = ''; + foreach ( $posts as $post ) { + $title = trim( $post->post_title ) ? $post->post_title : __( '(no title)' ); + + switch ( $post->post_status ) { + case 'publish' : + case 'private' : + $stat = __('Published'); + break; + case 'future' : + $stat = __('Scheduled'); + break; + case 'pending' : + $stat = __('Pending Review'); + break; + case 'draft' : + $stat = __('Draft'); + break; + } + + if ( '0000-00-00 00:00:00' == $post->post_date ) { + $time = ''; + } else { + /* translators: date format in table columns, see http://php.net/date */ + $time = mysql2date(__('Y/m/d'), $post->post_date); + } + + $html .= ''; + $html .= '' . "\n\n"; + } + + $html .= '

    '.__('Title').''.__('Type').''.__('Date').''.__('Status').'
    ' . esc_html( $post_types[$post->post_type]->labels->singular_name ) . ''.esc_html( $time ) . '' . esc_html( $stat ). '
    '; + + $x = new WP_Ajax_Response(); + $x->add( array( + 'data' => $html + )); + $x->send(); +} + +function wp_ajax_widgets_order() { + check_ajax_referer( 'save-sidebar-widgets', 'savewidgets' ); + + if ( !current_user_can('edit_theme_options') ) + wp_die( -1 ); + + unset( $_POST['savewidgets'], $_POST['action'] ); + + // save widgets order for all sidebars + if ( is_array($_POST['sidebars']) ) { + $sidebars = array(); + foreach ( $_POST['sidebars'] as $key => $val ) { + $sb = array(); + if ( !empty($val) ) { + $val = explode(',', $val); + foreach ( $val as $k => $v ) { + if ( strpos($v, 'widget-') === false ) + continue; + + $sb[$k] = substr($v, strpos($v, '_') + 1); + } + } + $sidebars[$key] = $sb; + } + wp_set_sidebars_widgets($sidebars); + wp_die( 1 ); + } + + wp_die( -1 ); +} + +function wp_ajax_save_widget() { + global $wp_registered_widgets, $wp_registered_widget_controls, $wp_registered_widget_updates; + + check_ajax_referer( 'save-sidebar-widgets', 'savewidgets' ); + + if ( !current_user_can('edit_theme_options') || !isset($_POST['id_base']) ) + wp_die( -1 ); + + unset( $_POST['savewidgets'], $_POST['action'] ); + + /** + * Fires early when editing the widgets displayed in sidebars. + * + * @since 2.8.0 + */ + do_action( 'load-widgets.php' ); + + /** + * Fires early when editing the widgets displayed in sidebars. + * + * @since 2.8.0 + */ + do_action( 'widgets.php' ); + + /** + * Fires early when editing the widgets displayed in sidebars. + * + * @since 2.2.0 + */ + do_action( 'sidebar_admin_setup' ); + + $id_base = $_POST['id_base']; + $widget_id = $_POST['widget-id']; + $sidebar_id = $_POST['sidebar']; + $multi_number = !empty($_POST['multi_number']) ? (int) $_POST['multi_number'] : 0; + $settings = isset($_POST['widget-' . $id_base]) && is_array($_POST['widget-' . $id_base]) ? $_POST['widget-' . $id_base] : false; + $error = '

    ' . __('An error has occurred. Please reload the page and try again.') . '

    '; + + $sidebars = wp_get_sidebars_widgets(); + $sidebar = isset($sidebars[$sidebar_id]) ? $sidebars[$sidebar_id] : array(); + + // delete + if ( isset($_POST['delete_widget']) && $_POST['delete_widget'] ) { + + if ( !isset($wp_registered_widgets[$widget_id]) ) + wp_die( $error ); + + $sidebar = array_diff( $sidebar, array($widget_id) ); + $_POST = array('sidebar' => $sidebar_id, 'widget-' . $id_base => array(), 'the-widget-id' => $widget_id, 'delete_widget' => '1'); + } elseif ( $settings && preg_match( '/__i__|%i%/', key($settings) ) ) { + if ( !$multi_number ) + wp_die( $error ); + + $_POST['widget-' . $id_base] = array( $multi_number => array_shift($settings) ); + $widget_id = $id_base . '-' . $multi_number; + $sidebar[] = $widget_id; + } + $_POST['widget-id'] = $sidebar; + + foreach ( (array) $wp_registered_widget_updates as $name => $control ) { + + if ( $name == $id_base ) { + if ( !is_callable( $control['callback'] ) ) + continue; + + ob_start(); + call_user_func_array( $control['callback'], $control['params'] ); + ob_end_clean(); + break; + } + } + + if ( isset($_POST['delete_widget']) && $_POST['delete_widget'] ) { + $sidebars[$sidebar_id] = $sidebar; + wp_set_sidebars_widgets($sidebars); + echo "deleted:$widget_id"; + wp_die(); + } + + if ( !empty($_POST['add_new']) ) + wp_die(); + + if ( $form = $wp_registered_widget_controls[$widget_id] ) + call_user_func_array( $form['callback'], $form['params'] ); + + wp_die(); +} + +function wp_ajax_upload_attachment() { + check_ajax_referer( 'media-form' ); + + if ( ! current_user_can( 'upload_files' ) ) + wp_die(); + + if ( isset( $_REQUEST['post_id'] ) ) { + $post_id = $_REQUEST['post_id']; + if ( ! current_user_can( 'edit_post', $post_id ) ) + wp_die(); + } else { + $post_id = null; + } + + $post_data = isset( $_REQUEST['post_data'] ) ? $_REQUEST['post_data'] : array(); + + // If the context is custom header or background, make sure the uploaded file is an image. + if ( isset( $post_data['context'] ) && in_array( $post_data['context'], array( 'custom-header', 'custom-background' ) ) ) { + $wp_filetype = wp_check_filetype_and_ext( $_FILES['async-upload']['tmp_name'], $_FILES['async-upload']['name'], false ); + if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) ) { + echo json_encode( array( + 'success' => false, + 'data' => array( + 'message' => __( 'The uploaded file is not a valid image. Please try again.' ), + 'filename' => $_FILES['async-upload']['name'], + ) + ) ); + + wp_die(); + } + } + + $attachment_id = media_handle_upload( 'async-upload', $post_id, $post_data ); + + if ( is_wp_error( $attachment_id ) ) { + echo json_encode( array( + 'success' => false, + 'data' => array( + 'message' => $attachment_id->get_error_message(), + 'filename' => $_FILES['async-upload']['name'], + ) + ) ); + + wp_die(); + } + + if ( isset( $post_data['context'] ) && isset( $post_data['theme'] ) ) { + if ( 'custom-background' === $post_data['context'] ) + update_post_meta( $attachment_id, '_wp_attachment_is_custom_background', $post_data['theme'] ); + + if ( 'custom-header' === $post_data['context'] ) + update_post_meta( $attachment_id, '_wp_attachment_is_custom_header', $post_data['theme'] ); + } + + if ( ! $attachment = wp_prepare_attachment_for_js( $attachment_id ) ) + wp_die(); + + echo json_encode( array( + 'success' => true, + 'data' => $attachment, + ) ); + + wp_die(); +} + +function wp_ajax_image_editor() { + $attachment_id = intval($_POST['postid']); + if ( empty($attachment_id) || !current_user_can('edit_post', $attachment_id) ) + wp_die( -1 ); + + check_ajax_referer( "image_editor-$attachment_id" ); + include_once( ABSPATH . 'wp-admin/includes/image-edit.php' ); + + $msg = false; + switch ( $_POST['do'] ) { + case 'save' : + $msg = wp_save_image($attachment_id); + $msg = json_encode($msg); + wp_die( $msg ); + break; + case 'scale' : + $msg = wp_save_image($attachment_id); + break; + case 'restore' : + $msg = wp_restore_image($attachment_id); + break; + } + + wp_image_editor($attachment_id, $msg); + wp_die(); +} + +function wp_ajax_set_post_thumbnail() { + $json = ! empty( $_REQUEST['json'] ); // New-style request + + $post_ID = intval( $_POST['post_id'] ); + if ( ! current_user_can( 'edit_post', $post_ID ) ) + wp_die( -1 ); + + $thumbnail_id = intval( $_POST['thumbnail_id'] ); + + if ( $json ) + check_ajax_referer( "update-post_$post_ID" ); + else + check_ajax_referer( "set_post_thumbnail-$post_ID" ); + + if ( $thumbnail_id == '-1' ) { + if ( delete_post_thumbnail( $post_ID ) ) { + $return = _wp_post_thumbnail_html( null, $post_ID ); + $json ? wp_send_json_success( $return ) : wp_die( $return ); + } else { + wp_die( 0 ); + } + } + + if ( set_post_thumbnail( $post_ID, $thumbnail_id ) ) { + $return = _wp_post_thumbnail_html( $thumbnail_id, $post_ID ); + $json ? wp_send_json_success( $return ) : wp_die( $return ); + } + + wp_die( 0 ); +} + +function wp_ajax_date_format() { + wp_die( date_i18n( sanitize_option( 'date_format', $_POST['date'] ) ) ); +} + +function wp_ajax_time_format() { + wp_die( date_i18n( sanitize_option( 'time_format', $_POST['date'] ) ) ); +} + +function wp_ajax_wp_fullscreen_save_post() { + $post_id = isset( $_POST['post_ID'] ) ? (int) $_POST['post_ID'] : 0; + + $post = $post_type = null; + + if ( $post_id ) + $post = get_post( $post_id ); + + if ( $post ) + $post_type = $post->post_type; + elseif ( isset( $_POST['post_type'] ) && post_type_exists( $_POST['post_type'] ) ) + $post_type = $_POST['post_type']; + + check_ajax_referer('update-post_' . $post_id, '_wpnonce'); + + $post_id = edit_post(); + + if ( is_wp_error($post_id) ) { + if ( $post_id->get_error_message() ) + $message = $post_id->get_error_message(); + else + $message = __('Save failed'); + + echo json_encode( array( 'message' => $message, 'last_edited' => '' ) ); + wp_die(); + } else { + $message = __('Saved.'); + } + + if ( $post ) { + $last_date = mysql2date( get_option('date_format'), $post->post_modified ); + $last_time = mysql2date( get_option('time_format'), $post->post_modified ); + } else { + $last_date = date_i18n( get_option('date_format') ); + $last_time = date_i18n( get_option('time_format') ); + } + + if ( $last_id = get_post_meta($post_id, '_edit_last', true) ) { + $last_user = get_userdata($last_id); + $last_edited = sprintf( __('Last edited by %1$s on %2$s at %3$s'), esc_html( $last_user->display_name ), $last_date, $last_time ); + } else { + $last_edited = sprintf( __('Last edited on %1$s at %2$s'), $last_date, $last_time ); + } + + echo json_encode( array( 'message' => $message, 'last_edited' => $last_edited ) ); + wp_die(); +} + +function wp_ajax_wp_remove_post_lock() { + if ( empty( $_POST['post_ID'] ) || empty( $_POST['active_post_lock'] ) ) + wp_die( 0 ); + $post_id = (int) $_POST['post_ID']; + if ( ! $post = get_post( $post_id ) ) + wp_die( 0 ); + + check_ajax_referer( 'update-post_' . $post_id ); + + if ( ! current_user_can( 'edit_post', $post_id ) ) + wp_die( -1 ); + + $active_lock = array_map( 'absint', explode( ':', $_POST['active_post_lock'] ) ); + if ( $active_lock[1] != get_current_user_id() ) + wp_die( 0 ); + + /** + * Filter the post lock window duration. + * + * @since 3.3.0 + * + * @param int $interval The interval in seconds the post lock duration should last, plus 5 seconds. Default 120. + */ + $new_lock = ( time() - apply_filters( 'wp_check_post_lock_window', 120 ) + 5 ) . ':' . $active_lock[1]; + update_post_meta( $post_id, '_edit_lock', $new_lock, implode( ':', $active_lock ) ); + wp_die( 1 ); +} + +function wp_ajax_dismiss_wp_pointer() { + $pointer = $_POST['pointer']; + if ( $pointer != sanitize_key( $pointer ) ) + wp_die( 0 ); + +// check_ajax_referer( 'dismiss-pointer_' . $pointer ); + + $dismissed = array_filter( explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ) ); + + if ( in_array( $pointer, $dismissed ) ) + wp_die( 0 ); + + $dismissed[] = $pointer; + $dismissed = implode( ',', $dismissed ); + + update_user_meta( get_current_user_id(), 'dismissed_wp_pointers', $dismissed ); + wp_die( 1 ); +} + +/** + * Get an attachment. + * + * @since 3.5.0 + */ +function wp_ajax_get_attachment() { + if ( ! isset( $_REQUEST['id'] ) ) + wp_send_json_error(); + + if ( ! $id = absint( $_REQUEST['id'] ) ) + wp_send_json_error(); + + if ( ! $post = get_post( $id ) ) + wp_send_json_error(); + + if ( 'attachment' != $post->post_type ) + wp_send_json_error(); + + if ( ! current_user_can( 'upload_files' ) ) + wp_send_json_error(); + + if ( ! $attachment = wp_prepare_attachment_for_js( $id ) ) + wp_send_json_error(); + + wp_send_json_success( $attachment ); +} + +/** + * Query for attachments. + * + * @since 3.5.0 + */ +function wp_ajax_query_attachments() { + if ( ! current_user_can( 'upload_files' ) ) + wp_send_json_error(); + + $query = isset( $_REQUEST['query'] ) ? (array) $_REQUEST['query'] : array(); + $query = array_intersect_key( $query, array_flip( array( + 's', 'order', 'orderby', 'posts_per_page', 'paged', 'post_mime_type', + 'post_parent', 'post__in', 'post__not_in', + ) ) ); + + $query['post_type'] = 'attachment'; + $query['post_status'] = 'inherit'; + if ( current_user_can( get_post_type_object( 'attachment' )->cap->read_private_posts ) ) + $query['post_status'] .= ',private'; + + /** + * Filter the arguments passed to WP_Query during an AJAX call for querying attachments. + * + * @since 3.7.0 + * + * @param array $query An array of query variables. @see WP_Query::parse_query() + */ + $query = apply_filters( 'ajax_query_attachments_args', $query ); + $query = new WP_Query( $query ); + + $posts = array_map( 'wp_prepare_attachment_for_js', $query->posts ); + $posts = array_filter( $posts ); + + wp_send_json_success( $posts ); +} + +/** + * Save attachment attributes. + * + * @since 3.5.0 + */ +function wp_ajax_save_attachment() { + if ( ! isset( $_REQUEST['id'] ) || ! isset( $_REQUEST['changes'] ) ) + wp_send_json_error(); + + if ( ! $id = absint( $_REQUEST['id'] ) ) + wp_send_json_error(); + + check_ajax_referer( 'update-post_' . $id, 'nonce' ); + + if ( ! current_user_can( 'edit_post', $id ) ) + wp_send_json_error(); + + $changes = $_REQUEST['changes']; + $post = get_post( $id, ARRAY_A ); + + if ( 'attachment' != $post['post_type'] ) + wp_send_json_error(); + + if ( isset( $changes['title'] ) ) + $post['post_title'] = $changes['title']; + + if ( isset( $changes['caption'] ) ) + $post['post_excerpt'] = $changes['caption']; + + if ( isset( $changes['description'] ) ) + $post['post_content'] = $changes['description']; + + if ( isset( $changes['alt'] ) ) { + $alt = wp_unslash( $changes['alt'] ); + if ( $alt != get_post_meta( $id, '_wp_attachment_image_alt', true ) ) { + $alt = wp_strip_all_tags( $alt, true ); + update_post_meta( $id, '_wp_attachment_image_alt', wp_slash( $alt ) ); + } + } + + wp_update_post( $post ); + wp_send_json_success(); +} + +/** + * Save backwards compatible attachment attributes. + * + * @since 3.5.0 + */ +function wp_ajax_save_attachment_compat() { + if ( ! isset( $_REQUEST['id'] ) ) + wp_send_json_error(); + + if ( ! $id = absint( $_REQUEST['id'] ) ) + wp_send_json_error(); + + if ( empty( $_REQUEST['attachments'] ) || empty( $_REQUEST['attachments'][ $id ] ) ) + wp_send_json_error(); + $attachment_data = $_REQUEST['attachments'][ $id ]; + + check_ajax_referer( 'update-post_' . $id, 'nonce' ); + + if ( ! current_user_can( 'edit_post', $id ) ) + wp_send_json_error(); + + $post = get_post( $id, ARRAY_A ); + + if ( 'attachment' != $post['post_type'] ) + wp_send_json_error(); + + /** This filter is documented in wp-admin/includes/media.php */ + $post = apply_filters( 'attachment_fields_to_save', $post, $attachment_data ); + + if ( isset( $post['errors'] ) ) { + $errors = $post['errors']; // @todo return me and display me! + unset( $post['errors'] ); + } + + wp_update_post( $post ); + + foreach ( get_attachment_taxonomies( $post ) as $taxonomy ) { + if ( isset( $attachment_data[ $taxonomy ] ) ) + wp_set_object_terms( $id, array_map( 'trim', preg_split( '/,+/', $attachment_data[ $taxonomy ] ) ), $taxonomy, false ); + } + + if ( ! $attachment = wp_prepare_attachment_for_js( $id ) ) + wp_send_json_error(); + + wp_send_json_success( $attachment ); +} + +function wp_ajax_save_attachment_order() { + if ( ! isset( $_REQUEST['post_id'] ) ) + wp_send_json_error(); + + if ( ! $post_id = absint( $_REQUEST['post_id'] ) ) + wp_send_json_error(); + + if ( empty( $_REQUEST['attachments'] ) ) + wp_send_json_error(); + + check_ajax_referer( 'update-post_' . $post_id, 'nonce' ); + + $attachments = $_REQUEST['attachments']; + + if ( ! current_user_can( 'edit_post', $post_id ) ) + wp_send_json_error(); + + $post = get_post( $post_id, ARRAY_A ); + + foreach ( $attachments as $attachment_id => $menu_order ) { + if ( ! current_user_can( 'edit_post', $attachment_id ) ) + continue; + if ( ! $attachment = get_post( $attachment_id ) ) + continue; + if ( 'attachment' != $attachment->post_type ) + continue; + + wp_update_post( array( 'ID' => $attachment_id, 'menu_order' => $menu_order ) ); + } + + wp_send_json_success(); +} + +/** + * Generates the HTML to send an attachment to the editor. + * Backwards compatible with the media_send_to_editor filter and the chain + * of filters that follow. + * + * @since 3.5.0 + */ +function wp_ajax_send_attachment_to_editor() { + check_ajax_referer( 'media-send-to-editor', 'nonce' ); + + $attachment = wp_unslash( $_POST['attachment'] ); + + $id = intval( $attachment['id'] ); + + if ( ! $post = get_post( $id ) ) + wp_send_json_error(); + + if ( 'attachment' != $post->post_type ) + wp_send_json_error(); + + if ( current_user_can( 'edit_post', $id ) ) { + // If this attachment is unattached, attach it. Primarily a back compat thing. + if ( 0 == $post->post_parent && $insert_into_post_id = intval( $_POST['post_id'] ) ) { + wp_update_post( array( 'ID' => $id, 'post_parent' => $insert_into_post_id ) ); + } + } + + $rel = $url = ''; + $html = $title = isset( $attachment['post_title'] ) ? $attachment['post_title'] : ''; + if ( ! empty( $attachment['url'] ) ) { + $url = $attachment['url']; + if ( strpos( $url, 'attachment_id') || get_attachment_link( $id ) == $url ) + $rel = ' rel="attachment wp-att-' . $id . '"'; + $html = '' . $html . ''; + } + + remove_filter( 'media_send_to_editor', 'image_media_send_to_editor' ); + + if ( 'image' === substr( $post->post_mime_type, 0, 5 ) ) { + $align = isset( $attachment['align'] ) ? $attachment['align'] : 'none'; + $size = isset( $attachment['image-size'] ) ? $attachment['image-size'] : 'medium'; + $alt = isset( $attachment['image_alt'] ) ? $attachment['image_alt'] : ''; + $caption = isset( $attachment['post_excerpt'] ) ? $attachment['post_excerpt'] : ''; + $title = ''; // We no longer insert title tags into tags, as they are redundant. + $html = get_image_send_to_editor( $id, $caption, $title, $align, $url, (bool) $rel, $size, $alt ); + } elseif ( 'video' === substr( $post->post_mime_type, 0, 5 ) || 'audio' === substr( $post->post_mime_type, 0, 5 ) ) { + $html = stripslashes_deep( $_POST['html'] ); + } + + /** This filter is documented in wp-admin/includes/media.php */ + $html = apply_filters( 'media_send_to_editor', $html, $id, $attachment ); + + wp_send_json_success( $html ); +} + +/** + * Generates the HTML to send a non-image embed link to the editor. + * + * Backwards compatible with the following filters: + * - file_send_to_editor_url + * - audio_send_to_editor_url + * - video_send_to_editor_url + * + * @since 3.5.0 + */ +function wp_ajax_send_link_to_editor() { + check_ajax_referer( 'media-send-to-editor', 'nonce' ); + + if ( ! $src = wp_unslash( $_POST['src'] ) ) + wp_send_json_error(); + + if ( ! strpos( $src, '://' ) ) + $src = 'http://' . $src; + + if ( ! $src = esc_url_raw( $src ) ) + wp_send_json_error(); + + if ( ! $title = trim( wp_unslash( $_POST['title'] ) ) ) + $title = wp_basename( $src ); + + $html = ''; + if ( $title ) + $html = '' . $title . ''; + + // Figure out what filter to run: + $type = 'file'; + if ( ( $ext = preg_replace( '/^.+?\.([^.]+)$/', '$1', $src ) ) && ( $ext_type = wp_ext2type( $ext ) ) + && ( 'audio' == $ext_type || 'video' == $ext_type ) ) + $type = $ext_type; + + /** This filter is documented in wp-admin/includes/media.php */ + $html = apply_filters( $type . '_send_to_editor_url', $html, $src, $title ); + + wp_send_json_success( $html ); +} + +/** + * Heartbeat API (experimental) + * + * Runs when the user is logged in. + */ +function wp_ajax_heartbeat() { + if ( empty( $_POST['_nonce'] ) ) + wp_send_json_error(); + + $response = array(); + + if ( false === wp_verify_nonce( $_POST['_nonce'], 'heartbeat-nonce' ) ) { + // User is logged in but nonces have expired. + $response['nonces_expired'] = true; + wp_send_json($response); + } + + // screen_id is the same as $current_screen->id and the JS global 'pagenow' + if ( ! empty($_POST['screen_id']) ) + $screen_id = sanitize_key($_POST['screen_id']); + else + $screen_id = 'front'; + + if ( ! empty($_POST['data']) ) { + $data = (array) $_POST['data']; + + /** + * Filter the Heartbeat response received. + * + * @since 3.6.0 + * + * @param array|object $response The Heartbeat response object or array. + * @param array $data The $_POST data sent. + * @param string $screen_id The screen id. + */ + $response = apply_filters( 'heartbeat_received', $response, $data, $screen_id ); + } + + /** + * Filter the Heartbeat response sent. + * + * @since 3.6.0 + * + * @param array|object $response The Heartbeat response object or array. + * @param string $screen_id The screen id. + */ + $response = apply_filters( 'heartbeat_send', $response, $screen_id ); + + /** + * Fires when Heartbeat ticks in logged-in environments. + * + * Allows the transport to be easily replaced with long-polling. + * + * @since 3.6.0 + * + * @param array|object $response The Heartbeat response object or array. + * @param string $screen_id The screen id. + */ + do_action( 'heartbeat_tick', $response, $screen_id ); + + // Send the current time according to the server + $response['server_time'] = time(); + + wp_send_json($response); +} + +function wp_ajax_get_revision_diffs() { + require ABSPATH . 'wp-admin/includes/revision.php'; + + if ( ! $post = get_post( (int) $_REQUEST['post_id'] ) ) + wp_send_json_error(); + + if ( ! current_user_can( 'read_post', $post->ID ) ) + wp_send_json_error(); + + // Really just pre-loading the cache here. + if ( ! $revisions = wp_get_post_revisions( $post->ID, array( 'check_enabled' => false ) ) ) + wp_send_json_error(); + + $return = array(); + @set_time_limit( 0 ); + + foreach ( $_REQUEST['compare'] as $compare_key ) { + list( $compare_from, $compare_to ) = explode( ':', $compare_key ); // from:to + + $return[] = array( + 'id' => $compare_key, + 'fields' => wp_get_revision_ui_diff( $post, $compare_from, $compare_to ), + ); + } + wp_send_json_success( $return ); +} + +/** + * Auto-save the selected color scheme for a user's own profile. + * + * @since 3.8.0 + */ +function wp_ajax_save_user_color_scheme() { + global $_wp_admin_css_colors; + + check_ajax_referer( 'save-color-scheme', 'nonce' ); + + $color_scheme = sanitize_key( $_POST['color_scheme'] ); + + if ( ! isset( $_wp_admin_css_colors[ $color_scheme ] ) ) { + wp_send_json_error(); + } + + update_user_meta( get_current_user_id(), 'admin_color', $color_scheme ); + wp_send_json_success(); +} diff --git a/src/wp-admin/includes/bookmark.php b/src/wp-admin/includes/bookmark.php new file mode 100644 index 0000000..3378596 --- /dev/null +++ b/src/wp-admin/includes/bookmark.php @@ -0,0 +1,316 @@ +link_url = esc_url( wp_unslash( $_GET['linkurl'] ) ); + else + $link->link_url = ''; + + if ( isset( $_GET['name'] ) ) + $link->link_name = esc_attr( wp_unslash( $_GET['name'] ) ); + else + $link->link_name = ''; + + $link->link_visible = 'Y'; + + return $link; +} + +/** + * Delete link specified from database. + * + * @since 2.0.0 + * + * @param int $link_id ID of the link to delete + * @return bool True + */ +function wp_delete_link( $link_id ) { + global $wpdb; + /** + * Fires before a link is deleted. + * + * @since 2.0.0 + * + * @param int $link_id ID of the link to delete. + */ + do_action( 'delete_link', $link_id ); + + wp_delete_object_term_relationships( $link_id, 'link_category' ); + + $wpdb->delete( $wpdb->links, array( 'link_id' => $link_id ) ); + /** + * Fires after a link has been deleted. + * + * @since 2.2.0 + * + * @param int $link_id ID of the deleted link. + */ + do_action( 'deleted_link', $link_id ); + + clean_bookmark_cache( $link_id ); + + return true; +} + +/** + * Retrieves the link categories associated with the link specified. + * + * @since 2.1.0 + * + * @param int $link_id Link ID to look up + * @return array The requested link's categories + */ +function wp_get_link_cats( $link_id = 0 ) { + + $cats = wp_get_object_terms( $link_id, 'link_category', array('fields' => 'ids') ); + + return array_unique( $cats ); +} + +/** + * Retrieve link data based on ID. + * + * @since 2.0.0 + * + * @param int $link_id ID of link to retrieve + * @return object Link for editing + */ +function get_link_to_edit( $link_id ) { + return get_bookmark( $link_id, OBJECT, 'edit' ); +} + +/** + * This function inserts/updates links into/in the database. + * + * @since 2.0.0 + * + * @param array $linkdata Elements that make up the link to insert. + * @param bool $wp_error Optional. If true return WP_Error object on failure. + * @return int|WP_Error Value 0 or WP_Error on failure. The link ID on success. + */ +function wp_insert_link( $linkdata, $wp_error = false ) { + global $wpdb; + + $defaults = array( 'link_id' => 0, 'link_name' => '', 'link_url' => '', 'link_rating' => 0 ); + + $linkdata = wp_parse_args( $linkdata, $defaults ); + $linkdata = sanitize_bookmark( $linkdata, 'db' ); + + extract( wp_unslash( $linkdata ), EXTR_SKIP ); + + $update = false; + + if ( !empty( $link_id ) ) + $update = true; + + if ( trim( $link_name ) == '' ) { + if ( trim( $link_url ) != '' ) { + $link_name = $link_url; + } else { + return 0; + } + } + + if ( trim( $link_url ) == '' ) + return 0; + + if ( empty( $link_rating ) ) + $link_rating = 0; + + if ( empty( $link_image ) ) + $link_image = ''; + + if ( empty( $link_target ) ) + $link_target = ''; + + if ( empty( $link_visible ) ) + $link_visible = 'Y'; + + if ( empty( $link_owner ) ) + $link_owner = get_current_user_id(); + + if ( empty( $link_notes ) ) + $link_notes = ''; + + if ( empty( $link_description ) ) + $link_description = ''; + + if ( empty( $link_rss ) ) + $link_rss = ''; + + if ( empty( $link_rel ) ) + $link_rel = ''; + + // Make sure we set a valid category + if ( ! isset( $link_category ) || 0 == count( $link_category ) || !is_array( $link_category ) ) { + $link_category = array( get_option( 'default_link_category' ) ); + } + + if ( $update ) { + if ( false === $wpdb->update( $wpdb->links, compact('link_url', 'link_name', 'link_image', 'link_target', 'link_description', 'link_visible', 'link_rating', 'link_rel', 'link_notes', 'link_rss'), compact('link_id') ) ) { + if ( $wp_error ) + return new WP_Error( 'db_update_error', __( 'Could not update link in the database' ), $wpdb->last_error ); + else + return 0; + } + } else { + if ( false === $wpdb->insert( $wpdb->links, compact('link_url', 'link_name', 'link_image', 'link_target', 'link_description', 'link_visible', 'link_owner', 'link_rating', 'link_rel', 'link_notes', 'link_rss') ) ) { + if ( $wp_error ) + return new WP_Error( 'db_insert_error', __( 'Could not insert link into the database' ), $wpdb->last_error ); + else + return 0; + } + $link_id = (int) $wpdb->insert_id; + } + + wp_set_link_cats( $link_id, $link_category ); + + if ( $update ) { + /** + * Fires after a link was updated in the database. + * + * @since 2.0.0 + * + * @param int $link_id ID of the link that was updated. + */ + do_action( 'edit_link', $link_id ); + } else { + /** + * Fires after a link was added to the database. + * + * @since 2.0.0 + * + * @param int $link_id ID of the link that was added. + */ + do_action( 'add_link', $link_id ); + } + clean_bookmark_cache( $link_id ); + + return $link_id; +} + +/** + * Update link with the specified link categories. + * + * @since 2.1.0 + * + * @param int $link_id ID of link to update + * @param array $link_categories Array of categories to + */ +function wp_set_link_cats( $link_id = 0, $link_categories = array() ) { + // If $link_categories isn't already an array, make it one: + if ( !is_array( $link_categories ) || 0 == count( $link_categories ) ) + $link_categories = array( get_option( 'default_link_category' ) ); + + $link_categories = array_map( 'intval', $link_categories ); + $link_categories = array_unique( $link_categories ); + + wp_set_object_terms( $link_id, $link_categories, 'link_category' ); + + clean_bookmark_cache( $link_id ); +} + +/** + * Update a link in the database. + * + * @since 2.0.0 + * + * @param array $linkdata Link data to update. + * @return int|WP_Error Value 0 or WP_Error on failure. The updated link ID on success. + */ +function wp_update_link( $linkdata ) { + $link_id = (int) $linkdata['link_id']; + + $link = get_bookmark( $link_id, ARRAY_A ); + + // Escape data pulled from DB. + $link = wp_slash( $link ); + + // Passed link category list overwrites existing category list if not empty. + if ( isset( $linkdata['link_category'] ) && is_array( $linkdata['link_category'] ) + && 0 != count( $linkdata['link_category'] ) ) + $link_cats = $linkdata['link_category']; + else + $link_cats = $link['link_category']; + + // Merge old and new fields with new fields overwriting old ones. + $linkdata = array_merge( $link, $linkdata ); + $linkdata['link_category'] = $link_cats; + + return wp_insert_link( $linkdata ); +} + +/** + * @since 3.5.0 + * @access private + */ +function wp_link_manager_disabled_message() { + global $pagenow; + if ( 'link-manager.php' != $pagenow && 'link-add.php' != $pagenow && 'link.php' != $pagenow ) + return; + + add_filter( 'pre_option_link_manager_enabled', '__return_true', 100 ); + $really_can_manage_links = current_user_can( 'manage_links' ); + remove_filter( 'pre_option_link_manager_enabled', '__return_true', 100 ); + + if ( $really_can_manage_links && current_user_can( 'install_plugins' ) ) { + $link = network_admin_url( 'plugin-install.php?tab=search&s=Link+Manager' ); + wp_die( sprintf( __( 'If you are looking to use the link manager, please install the Link Manager plugin.' ), $link ) ); + } + + wp_die( __( 'You do not have sufficient permissions to edit the links for this site.' ) ); +} +add_action( 'admin_page_access_denied', 'wp_link_manager_disabled_message' ); diff --git a/src/wp-admin/includes/class-ftp-pure.php b/src/wp-admin/includes/class-ftp-pure.php new file mode 100644 index 0000000..c765d55 --- /dev/null +++ b/src/wp-admin/includes/class-ftp-pure.php @@ -0,0 +1,190 @@ +__construct($verb, $le); + } + + function __construct($verb=FALSE, $le=FALSE) { + parent::__construct(false, $verb, $le); + } + +// +// +// + + function _settimeout($sock) { + if(!@stream_set_timeout($sock, $this->_timeout)) { + $this->PushError('_settimeout','socket set send timeout'); + $this->_quit(); + return FALSE; + } + return TRUE; + } + + function _connect($host, $port) { + $this->SendMSG("Creating socket"); + $sock = @fsockopen($host, $port, $errno, $errstr, $this->_timeout); + if (!$sock) { + $this->PushError('_connect','socket connect failed', $errstr." (".$errno.")"); + return FALSE; + } + $this->_connected=true; + return $sock; + } + + function _readmsg($fnction="_readmsg"){ + if(!$this->_connected) { + $this->PushError($fnction, 'Connect first'); + return FALSE; + } + $result=true; + $this->_message=""; + $this->_code=0; + $go=true; + do { + $tmp=@fgets($this->_ftp_control_sock, 512); + if($tmp===false) { + $go=$result=false; + $this->PushError($fnction,'Read failed'); + } else { + $this->_message.=$tmp; + if(preg_match("/^([0-9]{3})(-(.*[".CRLF."]{1,2})+\\1)? [^".CRLF."]+[".CRLF."]{1,2}$/", $this->_message, $regs)) $go=false; + } + } while($go); + if($this->LocalEcho) echo "GET < ".rtrim($this->_message, CRLF).CRLF; + $this->_code=(int)$regs[1]; + return $result; + } + + function _exec($cmd, $fnction="_exec") { + if(!$this->_ready) { + $this->PushError($fnction,'Connect first'); + return FALSE; + } + if($this->LocalEcho) echo "PUT > ",$cmd,CRLF; + $status=@fputs($this->_ftp_control_sock, $cmd.CRLF); + if($status===false) { + $this->PushError($fnction,'socket write failed'); + return FALSE; + } + $this->_lastaction=time(); + if(!$this->_readmsg($fnction)) return FALSE; + return TRUE; + } + + function _data_prepare($mode=FTP_ASCII) { + if(!$this->_settype($mode)) return FALSE; + if($this->_passive) { + if(!$this->_exec("PASV", "pasv")) { + $this->_data_close(); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + return FALSE; + } + $ip_port = explode(",", ereg_replace("^.+ \\(?([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+)\\)?.*".CRLF."$", "\\1", $this->_message)); + $this->_datahost=$ip_port[0].".".$ip_port[1].".".$ip_port[2].".".$ip_port[3]; + $this->_dataport=(((int)$ip_port[4])<<8) + ((int)$ip_port[5]); + $this->SendMSG("Connecting to ".$this->_datahost.":".$this->_dataport); + $this->_ftp_data_sock=@fsockopen($this->_datahost, $this->_dataport, $errno, $errstr, $this->_timeout); + if(!$this->_ftp_data_sock) { + $this->PushError("_data_prepare","fsockopen fails", $errstr." (".$errno.")"); + $this->_data_close(); + return FALSE; + } + else $this->_ftp_data_sock; + } else { + $this->SendMSG("Only passive connections available!"); + return FALSE; + } + return TRUE; + } + + function _data_read($mode=FTP_ASCII, $fp=NULL) { + if(is_resource($fp)) $out=0; + else $out=""; + if(!$this->_passive) { + $this->SendMSG("Only passive connections available!"); + return FALSE; + } + while (!feof($this->_ftp_data_sock)) { + $block=fread($this->_ftp_data_sock, $this->_ftp_buff_size); + if($mode!=FTP_BINARY) $block=preg_replace("/\r\n|\r|\n/", $this->_eol_code[$this->OS_local], $block); + if(is_resource($fp)) $out+=fwrite($fp, $block, strlen($block)); + else $out.=$block; + } + return $out; + } + + function _data_write($mode=FTP_ASCII, $fp=NULL) { + if(is_resource($fp)) $out=0; + else $out=""; + if(!$this->_passive) { + $this->SendMSG("Only passive connections available!"); + return FALSE; + } + if(is_resource($fp)) { + while(!feof($fp)) { + $block=fread($fp, $this->_ftp_buff_size); + if(!$this->_data_write_block($mode, $block)) return false; + } + } elseif(!$this->_data_write_block($mode, $fp)) return false; + return TRUE; + } + + function _data_write_block($mode, $block) { + if($mode!=FTP_BINARY) $block=preg_replace("/\r\n|\r|\n/", $this->_eol_code[$this->OS_remote], $block); + do { + if(($t=@fwrite($this->_ftp_data_sock, $block))===FALSE) { + $this->PushError("_data_write","Can't write to socket"); + return FALSE; + } + $block=substr($block, $t); + } while(!empty($block)); + return true; + } + + function _data_close() { + @fclose($this->_ftp_data_sock); + $this->SendMSG("Disconnected data from remote host"); + return TRUE; + } + + function _quit($force=FALSE) { + if($this->_connected or $force) { + @fclose($this->_ftp_control_sock); + $this->_connected=false; + $this->SendMSG("Socket closed"); + } + } +} + +?> diff --git a/src/wp-admin/includes/class-ftp-sockets.php b/src/wp-admin/includes/class-ftp-sockets.php new file mode 100644 index 0000000..abdf0db --- /dev/null +++ b/src/wp-admin/includes/class-ftp-sockets.php @@ -0,0 +1,250 @@ +__construct($verb, $le); + } + + function __construct($verb=FALSE, $le=FALSE) { + parent::__construct(true, $verb, $le); + } + +// +// +// + + function _settimeout($sock) { + if(!@socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>$this->_timeout, "usec"=>0))) { + $this->PushError('_connect','socket set receive timeout',socket_strerror(socket_last_error($sock))); + @socket_close($sock); + return FALSE; + } + if(!@socket_set_option($sock, SOL_SOCKET , SO_SNDTIMEO, array("sec"=>$this->_timeout, "usec"=>0))) { + $this->PushError('_connect','socket set send timeout',socket_strerror(socket_last_error($sock))); + @socket_close($sock); + return FALSE; + } + return true; + } + + function _connect($host, $port) { + $this->SendMSG("Creating socket"); + if(!($sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP))) { + $this->PushError('_connect','socket create failed',socket_strerror(socket_last_error($sock))); + return FALSE; + } + if(!$this->_settimeout($sock)) return FALSE; + $this->SendMSG("Connecting to \"".$host.":".$port."\""); + if (!($res = @socket_connect($sock, $host, $port))) { + $this->PushError('_connect','socket connect failed',socket_strerror(socket_last_error($sock))); + @socket_close($sock); + return FALSE; + } + $this->_connected=true; + return $sock; + } + + function _readmsg($fnction="_readmsg"){ + if(!$this->_connected) { + $this->PushError($fnction,'Connect first'); + return FALSE; + } + $result=true; + $this->_message=""; + $this->_code=0; + $go=true; + do { + $tmp=@socket_read($this->_ftp_control_sock, 4096, PHP_BINARY_READ); + if($tmp===false) { + $go=$result=false; + $this->PushError($fnction,'Read failed', socket_strerror(socket_last_error($this->_ftp_control_sock))); + } else { + $this->_message.=$tmp; + $go = !preg_match("/^([0-9]{3})(-.+\\1)? [^".CRLF."]+".CRLF."$/Us", $this->_message, $regs); + } + } while($go); + if($this->LocalEcho) echo "GET < ".rtrim($this->_message, CRLF).CRLF; + $this->_code=(int)$regs[1]; + return $result; + } + + function _exec($cmd, $fnction="_exec") { + if(!$this->_ready) { + $this->PushError($fnction,'Connect first'); + return FALSE; + } + if($this->LocalEcho) echo "PUT > ",$cmd,CRLF; + $status=@socket_write($this->_ftp_control_sock, $cmd.CRLF); + if($status===false) { + $this->PushError($fnction,'socket write failed', socket_strerror(socket_last_error($this->stream))); + return FALSE; + } + $this->_lastaction=time(); + if(!$this->_readmsg($fnction)) return FALSE; + return TRUE; + } + + function _data_prepare($mode=FTP_ASCII) { + if(!$this->_settype($mode)) return FALSE; + $this->SendMSG("Creating data socket"); + $this->_ftp_data_sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP); + if ($this->_ftp_data_sock < 0) { + $this->PushError('_data_prepare','socket create failed',socket_strerror(socket_last_error($this->_ftp_data_sock))); + return FALSE; + } + if(!$this->_settimeout($this->_ftp_data_sock)) { + $this->_data_close(); + return FALSE; + } + if($this->_passive) { + if(!$this->_exec("PASV", "pasv")) { + $this->_data_close(); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + return FALSE; + } + $ip_port = explode(",", ereg_replace("^.+ \\(?([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+)\\)?.*".CRLF."$", "\\1", $this->_message)); + $this->_datahost=$ip_port[0].".".$ip_port[1].".".$ip_port[2].".".$ip_port[3]; + $this->_dataport=(((int)$ip_port[4])<<8) + ((int)$ip_port[5]); + $this->SendMSG("Connecting to ".$this->_datahost.":".$this->_dataport); + if(!@socket_connect($this->_ftp_data_sock, $this->_datahost, $this->_dataport)) { + $this->PushError("_data_prepare","socket_connect", socket_strerror(socket_last_error($this->_ftp_data_sock))); + $this->_data_close(); + return FALSE; + } + else $this->_ftp_temp_sock=$this->_ftp_data_sock; + } else { + if(!@socket_getsockname($this->_ftp_control_sock, $addr, $port)) { + $this->PushError("_data_prepare","can't get control socket information", socket_strerror(socket_last_error($this->_ftp_control_sock))); + $this->_data_close(); + return FALSE; + } + if(!@socket_bind($this->_ftp_data_sock,$addr)){ + $this->PushError("_data_prepare","can't bind data socket", socket_strerror(socket_last_error($this->_ftp_data_sock))); + $this->_data_close(); + return FALSE; + } + if(!@socket_listen($this->_ftp_data_sock)) { + $this->PushError("_data_prepare","can't listen data socket", socket_strerror(socket_last_error($this->_ftp_data_sock))); + $this->_data_close(); + return FALSE; + } + if(!@socket_getsockname($this->_ftp_data_sock, $this->_datahost, $this->_dataport)) { + $this->PushError("_data_prepare","can't get data socket information", socket_strerror(socket_last_error($this->_ftp_data_sock))); + $this->_data_close(); + return FALSE; + } + if(!$this->_exec('PORT '.str_replace('.',',',$this->_datahost.'.'.($this->_dataport>>8).'.'.($this->_dataport&0x00FF)), "_port")) { + $this->_data_close(); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + return FALSE; + } + } + return TRUE; + } + + function _data_read($mode=FTP_ASCII, $fp=NULL) { + $NewLine=$this->_eol_code[$this->OS_local]; + if(is_resource($fp)) $out=0; + else $out=""; + if(!$this->_passive) { + $this->SendMSG("Connecting to ".$this->_datahost.":".$this->_dataport); + $this->_ftp_temp_sock=socket_accept($this->_ftp_data_sock); + if($this->_ftp_temp_sock===FALSE) { + $this->PushError("_data_read","socket_accept", socket_strerror(socket_last_error($this->_ftp_temp_sock))); + $this->_data_close(); + return FALSE; + } + } + + while(($block=@socket_read($this->_ftp_temp_sock, $this->_ftp_buff_size, PHP_BINARY_READ))!==false) { + if($block==="") break; + if($mode!=FTP_BINARY) $block=preg_replace("/\r\n|\r|\n/", $this->_eol_code[$this->OS_local], $block); + if(is_resource($fp)) $out+=fwrite($fp, $block, strlen($block)); + else $out.=$block; + } + return $out; + } + + function _data_write($mode=FTP_ASCII, $fp=NULL) { + $NewLine=$this->_eol_code[$this->OS_local]; + if(is_resource($fp)) $out=0; + else $out=""; + if(!$this->_passive) { + $this->SendMSG("Connecting to ".$this->_datahost.":".$this->_dataport); + $this->_ftp_temp_sock=socket_accept($this->_ftp_data_sock); + if($this->_ftp_temp_sock===FALSE) { + $this->PushError("_data_write","socket_accept", socket_strerror(socket_last_error($this->_ftp_temp_sock))); + $this->_data_close(); + return false; + } + } + if(is_resource($fp)) { + while(!feof($fp)) { + $block=fread($fp, $this->_ftp_buff_size); + if(!$this->_data_write_block($mode, $block)) return false; + } + } elseif(!$this->_data_write_block($mode, $fp)) return false; + return true; + } + + function _data_write_block($mode, $block) { + if($mode!=FTP_BINARY) $block=preg_replace("/\r\n|\r|\n/", $this->_eol_code[$this->OS_remote], $block); + do { + if(($t=@socket_write($this->_ftp_temp_sock, $block))===FALSE) { + $this->PushError("_data_write","socket_write", socket_strerror(socket_last_error($this->_ftp_temp_sock))); + $this->_data_close(); + return FALSE; + } + $block=substr($block, $t); + } while(!empty($block)); + return true; + } + + function _data_close() { + @socket_close($this->_ftp_temp_sock); + @socket_close($this->_ftp_data_sock); + $this->SendMSG("Disconnected data from remote host"); + return TRUE; + } + + function _quit() { + if($this->_connected) { + @socket_close($this->_ftp_control_sock); + $this->_connected=false; + $this->SendMSG("Socket closed"); + } + } +} +?> diff --git a/src/wp-admin/includes/class-ftp.php b/src/wp-admin/includes/class-ftp.php new file mode 100644 index 0000000..f068f15 --- /dev/null +++ b/src/wp-admin/includes/class-ftp.php @@ -0,0 +1,907 @@ +__construct($port_mode); + } + + function __construct($port_mode=FALSE, $verb=FALSE, $le=FALSE) { + $this->LocalEcho=$le; + $this->Verbose=$verb; + $this->_lastaction=NULL; + $this->_error_array=array(); + $this->_eol_code=array(FTP_OS_Unix=>"\n", FTP_OS_Mac=>"\r", FTP_OS_Windows=>"\r\n"); + $this->AuthorizedTransferMode=array(FTP_AUTOASCII, FTP_ASCII, FTP_BINARY); + $this->OS_FullName=array(FTP_OS_Unix => 'UNIX', FTP_OS_Windows => 'WINDOWS', FTP_OS_Mac => 'MACOS'); + $this->AutoAsciiExt=array("ASP","BAT","C","CPP","CSS","CSV","JS","H","HTM","HTML","SHTML","INI","LOG","PHP3","PHTML","PL","PERL","SH","SQL","TXT"); + $this->_port_available=($port_mode==TRUE); + $this->SendMSG("Staring FTP client class".($this->_port_available?"":" without PORT mode support")); + $this->_connected=FALSE; + $this->_ready=FALSE; + $this->_can_restore=FALSE; + $this->_code=0; + $this->_message=""; + $this->_ftp_buff_size=4096; + $this->_curtype=NULL; + $this->SetUmask(0022); + $this->SetType(FTP_AUTOASCII); + $this->SetTimeout(30); + $this->Passive(!$this->_port_available); + $this->_login="anonymous"; + $this->_password="anon@ftp.com"; + $this->_features=array(); + $this->OS_local=FTP_OS_Unix; + $this->OS_remote=FTP_OS_Unix; + $this->features=array(); + if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') $this->OS_local=FTP_OS_Windows; + elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'MAC') $this->OS_local=FTP_OS_Mac; + } + +// +// +// + + function parselisting($line) { + $is_windows = ($this->OS_remote == FTP_OS_Windows); + if ($is_windows && preg_match("/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|) +(.+)/",$line,$lucifer)) { + $b = array(); + if ($lucifer[3]<70) { $lucifer[3]+=2000; } else { $lucifer[3]+=1900; } // 4digit year fix + $b['isdir'] = ($lucifer[7]==""); + if ( $b['isdir'] ) + $b['type'] = 'd'; + else + $b['type'] = 'f'; + $b['size'] = $lucifer[7]; + $b['month'] = $lucifer[1]; + $b['day'] = $lucifer[2]; + $b['year'] = $lucifer[3]; + $b['hour'] = $lucifer[4]; + $b['minute'] = $lucifer[5]; + $b['time'] = @mktime($lucifer[4]+(strcasecmp($lucifer[6],"PM")==0?12:0),$lucifer[5],0,$lucifer[1],$lucifer[2],$lucifer[3]); + $b['am/pm'] = $lucifer[6]; + $b['name'] = $lucifer[8]; + } else if (!$is_windows && $lucifer=preg_split("/[ ]/",$line,9,PREG_SPLIT_NO_EMPTY)) { + //echo $line."\n"; + $lcount=count($lucifer); + if ($lcount<8) return ''; + $b = array(); + $b['isdir'] = $lucifer[0]{0} === "d"; + $b['islink'] = $lucifer[0]{0} === "l"; + if ( $b['isdir'] ) + $b['type'] = 'd'; + elseif ( $b['islink'] ) + $b['type'] = 'l'; + else + $b['type'] = 'f'; + $b['perms'] = $lucifer[0]; + $b['number'] = $lucifer[1]; + $b['owner'] = $lucifer[2]; + $b['group'] = $lucifer[3]; + $b['size'] = $lucifer[4]; + if ($lcount==8) { + sscanf($lucifer[5],"%d-%d-%d",$b['year'],$b['month'],$b['day']); + sscanf($lucifer[6],"%d:%d",$b['hour'],$b['minute']); + $b['time'] = @mktime($b['hour'],$b['minute'],0,$b['month'],$b['day'],$b['year']); + $b['name'] = $lucifer[7]; + } else { + $b['month'] = $lucifer[5]; + $b['day'] = $lucifer[6]; + if (preg_match("/([0-9]{2}):([0-9]{2})/",$lucifer[7],$l2)) { + $b['year'] = date("Y"); + $b['hour'] = $l2[1]; + $b['minute'] = $l2[2]; + } else { + $b['year'] = $lucifer[7]; + $b['hour'] = 0; + $b['minute'] = 0; + } + $b['time'] = strtotime(sprintf("%d %s %d %02d:%02d",$b['day'],$b['month'],$b['year'],$b['hour'],$b['minute'])); + $b['name'] = $lucifer[8]; + } + } + + return $b; + } + + function SendMSG($message = "", $crlf=true) { + if ($this->Verbose) { + echo $message.($crlf?CRLF:""); + flush(); + } + return TRUE; + } + + function SetType($mode=FTP_AUTOASCII) { + if(!in_array($mode, $this->AuthorizedTransferMode)) { + $this->SendMSG("Wrong type"); + return FALSE; + } + $this->_type=$mode; + $this->SendMSG("Transfer type: ".($this->_type==FTP_BINARY?"binary":($this->_type==FTP_ASCII?"ASCII":"auto ASCII") ) ); + return TRUE; + } + + function _settype($mode=FTP_ASCII) { + if($this->_ready) { + if($mode==FTP_BINARY) { + if($this->_curtype!=FTP_BINARY) { + if(!$this->_exec("TYPE I", "SetType")) return FALSE; + $this->_curtype=FTP_BINARY; + } + } elseif($this->_curtype!=FTP_ASCII) { + if(!$this->_exec("TYPE A", "SetType")) return FALSE; + $this->_curtype=FTP_ASCII; + } + } else return FALSE; + return TRUE; + } + + function Passive($pasv=NULL) { + if(is_null($pasv)) $this->_passive=!$this->_passive; + else $this->_passive=$pasv; + if(!$this->_port_available and !$this->_passive) { + $this->SendMSG("Only passive connections available!"); + $this->_passive=TRUE; + return FALSE; + } + $this->SendMSG("Passive mode ".($this->_passive?"on":"off")); + return TRUE; + } + + function SetServer($host, $port=21, $reconnect=true) { + if(!is_long($port)) { + $this->verbose=true; + $this->SendMSG("Incorrect port syntax"); + return FALSE; + } else { + $ip=@gethostbyname($host); + $dns=@gethostbyaddr($host); + if(!$ip) $ip=$host; + if(!$dns) $dns=$host; + // Validate the IPAddress PHP4 returns -1 for invalid, PHP5 false + // -1 === "255.255.255.255" which is the broadcast address which is also going to be invalid + $ipaslong = ip2long($ip); + if ( ($ipaslong == false) || ($ipaslong === -1) ) { + $this->SendMSG("Wrong host name/address \"".$host."\""); + return FALSE; + } + $this->_host=$ip; + $this->_fullhost=$dns; + $this->_port=$port; + $this->_dataport=$port-1; + } + $this->SendMSG("Host \"".$this->_fullhost."(".$this->_host."):".$this->_port."\""); + if($reconnect){ + if($this->_connected) { + $this->SendMSG("Reconnecting"); + if(!$this->quit(FTP_FORCE)) return FALSE; + if(!$this->connect()) return FALSE; + } + } + return TRUE; + } + + function SetUmask($umask=0022) { + $this->_umask=$umask; + umask($this->_umask); + $this->SendMSG("UMASK 0".decoct($this->_umask)); + return TRUE; + } + + function SetTimeout($timeout=30) { + $this->_timeout=$timeout; + $this->SendMSG("Timeout ".$this->_timeout); + if($this->_connected) + if(!$this->_settimeout($this->_ftp_control_sock)) return FALSE; + return TRUE; + } + + function connect($server=NULL) { + if(!empty($server)) { + if(!$this->SetServer($server)) return false; + } + if($this->_ready) return true; + $this->SendMsg('Local OS : '.$this->OS_FullName[$this->OS_local]); + if(!($this->_ftp_control_sock = $this->_connect($this->_host, $this->_port))) { + $this->SendMSG("Error : Cannot connect to remote host \"".$this->_fullhost." :".$this->_port."\""); + return FALSE; + } + $this->SendMSG("Connected to remote host \"".$this->_fullhost.":".$this->_port."\". Waiting for greeting."); + do { + if(!$this->_readmsg()) return FALSE; + if(!$this->_checkCode()) return FALSE; + $this->_lastaction=time(); + } while($this->_code<200); + $this->_ready=true; + $syst=$this->systype(); + if(!$syst) $this->SendMSG("Can't detect remote OS"); + else { + if(preg_match("/win|dos|novell/i", $syst[0])) $this->OS_remote=FTP_OS_Windows; + elseif(preg_match("/os/i", $syst[0])) $this->OS_remote=FTP_OS_Mac; + elseif(preg_match("/(li|u)nix/i", $syst[0])) $this->OS_remote=FTP_OS_Unix; + else $this->OS_remote=FTP_OS_Mac; + $this->SendMSG("Remote OS: ".$this->OS_FullName[$this->OS_remote]); + } + if(!$this->features()) $this->SendMSG("Can't get features list. All supported - disabled"); + else $this->SendMSG("Supported features: ".implode(", ", array_keys($this->_features))); + return TRUE; + } + + function quit($force=false) { + if($this->_ready) { + if(!$this->_exec("QUIT") and !$force) return FALSE; + if(!$this->_checkCode() and !$force) return FALSE; + $this->_ready=false; + $this->SendMSG("Session finished"); + } + $this->_quit(); + return TRUE; + } + + function login($user=NULL, $pass=NULL) { + if(!is_null($user)) $this->_login=$user; + else $this->_login="anonymous"; + if(!is_null($pass)) $this->_password=$pass; + else $this->_password="anon@anon.com"; + if(!$this->_exec("USER ".$this->_login, "login")) return FALSE; + if(!$this->_checkCode()) return FALSE; + if($this->_code!=230) { + if(!$this->_exec((($this->_code==331)?"PASS ":"ACCT ").$this->_password, "login")) return FALSE; + if(!$this->_checkCode()) return FALSE; + } + $this->SendMSG("Authentication succeeded"); + if(empty($this->_features)) { + if(!$this->features()) $this->SendMSG("Can't get features list. All supported - disabled"); + else $this->SendMSG("Supported features: ".implode(", ", array_keys($this->_features))); + } + return TRUE; + } + + function pwd() { + if(!$this->_exec("PWD", "pwd")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return ereg_replace("^[0-9]{3} \"(.+)\".+", "\\1", $this->_message); + } + + function cdup() { + if(!$this->_exec("CDUP", "cdup")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return true; + } + + function chdir($pathname) { + if(!$this->_exec("CWD ".$pathname, "chdir")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return TRUE; + } + + function rmdir($pathname) { + if(!$this->_exec("RMD ".$pathname, "rmdir")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return TRUE; + } + + function mkdir($pathname) { + if(!$this->_exec("MKD ".$pathname, "mkdir")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return TRUE; + } + + function rename($from, $to) { + if(!$this->_exec("RNFR ".$from, "rename")) return FALSE; + if(!$this->_checkCode()) return FALSE; + if($this->_code==350) { + if(!$this->_exec("RNTO ".$to, "rename")) return FALSE; + if(!$this->_checkCode()) return FALSE; + } else return FALSE; + return TRUE; + } + + function filesize($pathname) { + if(!isset($this->_features["SIZE"])) { + $this->PushError("filesize", "not supported by server"); + return FALSE; + } + if(!$this->_exec("SIZE ".$pathname, "filesize")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return ereg_replace("^[0-9]{3} ([0-9]+)".CRLF, "\\1", $this->_message); + } + + function abort() { + if(!$this->_exec("ABOR", "abort")) return FALSE; + if(!$this->_checkCode()) { + if($this->_code!=426) return FALSE; + if(!$this->_readmsg("abort")) return FALSE; + if(!$this->_checkCode()) return FALSE; + } + return true; + } + + function mdtm($pathname) { + if(!isset($this->_features["MDTM"])) { + $this->PushError("mdtm", "not supported by server"); + return FALSE; + } + if(!$this->_exec("MDTM ".$pathname, "mdtm")) return FALSE; + if(!$this->_checkCode()) return FALSE; + $mdtm = ereg_replace("^[0-9]{3} ([0-9]+)".CRLF, "\\1", $this->_message); + $date = sscanf($mdtm, "%4d%2d%2d%2d%2d%2d"); + $timestamp = mktime($date[3], $date[4], $date[5], $date[1], $date[2], $date[0]); + return $timestamp; + } + + function systype() { + if(!$this->_exec("SYST", "systype")) return FALSE; + if(!$this->_checkCode()) return FALSE; + $DATA = explode(" ", $this->_message); + return array($DATA[1], $DATA[3]); + } + + function delete($pathname) { + if(!$this->_exec("DELE ".$pathname, "delete")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return TRUE; + } + + function site($command, $fnction="site") { + if(!$this->_exec("SITE ".$command, $fnction)) return FALSE; + if(!$this->_checkCode()) return FALSE; + return TRUE; + } + + function chmod($pathname, $mode) { + if(!$this->site( sprintf('CHMOD %o %s', $mode, $pathname), "chmod")) return FALSE; + return TRUE; + } + + function restore($from) { + if(!isset($this->_features["REST"])) { + $this->PushError("restore", "not supported by server"); + return FALSE; + } + if($this->_curtype!=FTP_BINARY) { + $this->PushError("restore", "can't restore in ASCII mode"); + return FALSE; + } + if(!$this->_exec("REST ".$from, "resore")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return TRUE; + } + + function features() { + if(!$this->_exec("FEAT", "features")) return FALSE; + if(!$this->_checkCode()) return FALSE; + $f=preg_split("/[".CRLF."]+/", preg_replace("/[0-9]{3}[ -].*[".CRLF."]+/", "", $this->_message), -1, PREG_SPLIT_NO_EMPTY); + $this->_features=array(); + foreach($f as $k=>$v) { + $v=explode(" ", trim($v)); + $this->_features[array_shift($v)]=$v; + } + return true; + } + + function rawlist($pathname="", $arg="") { + return $this->_list(($arg?" ".$arg:"").($pathname?" ".$pathname:""), "LIST", "rawlist"); + } + + function nlist($pathname="") { + return $this->_list(($arg?" ".$arg:"").($pathname?" ".$pathname:""), "NLST", "nlist"); + } + + function is_exists($pathname) { + return $this->file_exists($pathname); + } + + function file_exists($pathname) { + $exists=true; + if(!$this->_exec("RNFR ".$pathname, "rename")) $exists=FALSE; + else { + if(!$this->_checkCode()) $exists=FALSE; + $this->abort(); + } + if($exists) $this->SendMSG("Remote file ".$pathname." exists"); + else $this->SendMSG("Remote file ".$pathname." does not exist"); + return $exists; + } + + function fget($fp, $remotefile,$rest=0) { + if($this->_can_restore and $rest!=0) fseek($fp, $rest); + $pi=pathinfo($remotefile); + if($this->_type==FTP_ASCII or ($this->_type==FTP_AUTOASCII and in_array(strtoupper($pi["extension"]), $this->AutoAsciiExt))) $mode=FTP_ASCII; + else $mode=FTP_BINARY; + if(!$this->_data_prepare($mode)) { + return FALSE; + } + if($this->_can_restore and $rest!=0) $this->restore($rest); + if(!$this->_exec("RETR ".$remotefile, "get")) { + $this->_data_close(); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + return FALSE; + } + $out=$this->_data_read($mode, $fp); + $this->_data_close(); + if(!$this->_readmsg()) return FALSE; + if(!$this->_checkCode()) return FALSE; + return $out; + } + + function get($remotefile, $localfile=NULL, $rest=0) { + if(is_null($localfile)) $localfile=$remotefile; + if (@file_exists($localfile)) $this->SendMSG("Warning : local file will be overwritten"); + $fp = @fopen($localfile, "w"); + if (!$fp) { + $this->PushError("get","can't open local file", "Cannot create \"".$localfile."\""); + return FALSE; + } + if($this->_can_restore and $rest!=0) fseek($fp, $rest); + $pi=pathinfo($remotefile); + if($this->_type==FTP_ASCII or ($this->_type==FTP_AUTOASCII and in_array(strtoupper($pi["extension"]), $this->AutoAsciiExt))) $mode=FTP_ASCII; + else $mode=FTP_BINARY; + if(!$this->_data_prepare($mode)) { + fclose($fp); + return FALSE; + } + if($this->_can_restore and $rest!=0) $this->restore($rest); + if(!$this->_exec("RETR ".$remotefile, "get")) { + $this->_data_close(); + fclose($fp); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + fclose($fp); + return FALSE; + } + $out=$this->_data_read($mode, $fp); + fclose($fp); + $this->_data_close(); + if(!$this->_readmsg()) return FALSE; + if(!$this->_checkCode()) return FALSE; + return $out; + } + + function fput($remotefile, $fp) { + if($this->_can_restore and $rest!=0) fseek($fp, $rest); + $pi=pathinfo($remotefile); + if($this->_type==FTP_ASCII or ($this->_type==FTP_AUTOASCII and in_array(strtoupper($pi["extension"]), $this->AutoAsciiExt))) $mode=FTP_ASCII; + else $mode=FTP_BINARY; + if(!$this->_data_prepare($mode)) { + return FALSE; + } + if($this->_can_restore and $rest!=0) $this->restore($rest); + if(!$this->_exec("STOR ".$remotefile, "put")) { + $this->_data_close(); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + return FALSE; + } + $ret=$this->_data_write($mode, $fp); + $this->_data_close(); + if(!$this->_readmsg()) return FALSE; + if(!$this->_checkCode()) return FALSE; + return $ret; + } + + function put($localfile, $remotefile=NULL, $rest=0) { + if(is_null($remotefile)) $remotefile=$localfile; + if (!file_exists($localfile)) { + $this->PushError("put","can't open local file", "No such file or directory \"".$localfile."\""); + return FALSE; + } + $fp = @fopen($localfile, "r"); + + if (!$fp) { + $this->PushError("put","can't open local file", "Cannot read file \"".$localfile."\""); + return FALSE; + } + if($this->_can_restore and $rest!=0) fseek($fp, $rest); + $pi=pathinfo($localfile); + if($this->_type==FTP_ASCII or ($this->_type==FTP_AUTOASCII and in_array(strtoupper($pi["extension"]), $this->AutoAsciiExt))) $mode=FTP_ASCII; + else $mode=FTP_BINARY; + if(!$this->_data_prepare($mode)) { + fclose($fp); + return FALSE; + } + if($this->_can_restore and $rest!=0) $this->restore($rest); + if(!$this->_exec("STOR ".$remotefile, "put")) { + $this->_data_close(); + fclose($fp); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + fclose($fp); + return FALSE; + } + $ret=$this->_data_write($mode, $fp); + fclose($fp); + $this->_data_close(); + if(!$this->_readmsg()) return FALSE; + if(!$this->_checkCode()) return FALSE; + return $ret; + } + + function mput($local=".", $remote=NULL, $continious=false) { + $local=realpath($local); + if(!@file_exists($local)) { + $this->PushError("mput","can't open local folder", "Cannot stat folder \"".$local."\""); + return FALSE; + } + if(!is_dir($local)) return $this->put($local, $remote); + if(empty($remote)) $remote="."; + elseif(!$this->file_exists($remote) and !$this->mkdir($remote)) return FALSE; + if($handle = opendir($local)) { + $list=array(); + while (false !== ($file = readdir($handle))) { + if ($file != "." && $file != "..") $list[]=$file; + } + closedir($handle); + } else { + $this->PushError("mput","can't open local folder", "Cannot read folder \"".$local."\""); + return FALSE; + } + if(empty($list)) return TRUE; + $ret=true; + foreach($list as $el) { + if(is_dir($local."/".$el)) $t=$this->mput($local."/".$el, $remote."/".$el); + else $t=$this->put($local."/".$el, $remote."/".$el); + if(!$t) { + $ret=FALSE; + if(!$continious) break; + } + } + return $ret; + + } + + function mget($remote, $local=".", $continious=false) { + $list=$this->rawlist($remote, "-lA"); + if($list===false) { + $this->PushError("mget","can't read remote folder list", "Can't read remote folder \"".$remote."\" contents"); + return FALSE; + } + if(empty($list)) return true; + if(!@file_exists($local)) { + if(!@mkdir($local)) { + $this->PushError("mget","can't create local folder", "Cannot create folder \"".$local."\""); + return FALSE; + } + } + foreach($list as $k=>$v) { + $list[$k]=$this->parselisting($v); + if($list[$k]["name"]=="." or $list[$k]["name"]=="..") unset($list[$k]); + } + $ret=true; + foreach($list as $el) { + if($el["type"]=="d") { + if(!$this->mget($remote."/".$el["name"], $local."/".$el["name"], $continious)) { + $this->PushError("mget", "can't copy folder", "Can't copy remote folder \"".$remote."/".$el["name"]."\" to local \"".$local."/".$el["name"]."\""); + $ret=false; + if(!$continious) break; + } + } else { + if(!$this->get($remote."/".$el["name"], $local."/".$el["name"])) { + $this->PushError("mget", "can't copy file", "Can't copy remote file \"".$remote."/".$el["name"]."\" to local \"".$local."/".$el["name"]."\""); + $ret=false; + if(!$continious) break; + } + } + @chmod($local."/".$el["name"], $el["perms"]); + $t=strtotime($el["date"]); + if($t!==-1 and $t!==false) @touch($local."/".$el["name"], $t); + } + return $ret; + } + + function mdel($remote, $continious=false) { + $list=$this->rawlist($remote, "-la"); + if($list===false) { + $this->PushError("mdel","can't read remote folder list", "Can't read remote folder \"".$remote."\" contents"); + return false; + } + + foreach($list as $k=>$v) { + $list[$k]=$this->parselisting($v); + if($list[$k]["name"]=="." or $list[$k]["name"]=="..") unset($list[$k]); + } + $ret=true; + + foreach($list as $el) { + if ( empty($el) ) + continue; + + if($el["type"]=="d") { + if(!$this->mdel($remote."/".$el["name"], $continious)) { + $ret=false; + if(!$continious) break; + } + } else { + if (!$this->delete($remote."/".$el["name"])) { + $this->PushError("mdel", "can't delete file", "Can't delete remote file \"".$remote."/".$el["name"]."\""); + $ret=false; + if(!$continious) break; + } + } + } + + if(!$this->rmdir($remote)) { + $this->PushError("mdel", "can't delete folder", "Can't delete remote folder \"".$remote."/".$el["name"]."\""); + $ret=false; + } + return $ret; + } + + function mmkdir($dir, $mode = 0777) { + if(empty($dir)) return FALSE; + if($this->is_exists($dir) or $dir == "/" ) return TRUE; + if(!$this->mmkdir(dirname($dir), $mode)) return false; + $r=$this->mkdir($dir, $mode); + $this->chmod($dir,$mode); + return $r; + } + + function glob($pattern, $handle=NULL) { + $path=$output=null; + if(PHP_OS=='WIN32') $slash='\\'; + else $slash='/'; + $lastpos=strrpos($pattern,$slash); + if(!($lastpos===false)) { + $path=substr($pattern,0,-$lastpos-1); + $pattern=substr($pattern,$lastpos); + } else $path=getcwd(); + if(is_array($handle) and !empty($handle)) { + while($dir=each($handle)) { + if($this->glob_pattern_match($pattern,$dir)) + $output[]=$dir; + } + } else { + $handle=@opendir($path); + if($handle===false) return false; + while($dir=readdir($handle)) { + if($this->glob_pattern_match($pattern,$dir)) + $output[]=$dir; + } + closedir($handle); + } + if(is_array($output)) return $output; + return false; + } + + function glob_pattern_match($pattern,$string) { + $out=null; + $chunks=explode(';',$pattern); + foreach($chunks as $pattern) { + $escape=array('$','^','.','{','}','(',')','[',']','|'); + while(strpos($pattern,'**')!==false) + $pattern=str_replace('**','*',$pattern); + foreach($escape as $probe) + $pattern=str_replace($probe,"\\$probe",$pattern); + $pattern=str_replace('?*','*', + str_replace('*?','*', + str_replace('*',".*", + str_replace('?','.{1,1}',$pattern)))); + $out[]=$pattern; + } + if(count($out)==1) return($this->glob_regexp("^$out[0]$",$string)); + else { + foreach($out as $tester) + if($this->my_regexp("^$tester$",$string)) return true; + } + return false; + } + + function glob_regexp($pattern,$probe) { + $sensitive=(PHP_OS!='WIN32'); + return ($sensitive? + ereg($pattern,$probe): + eregi($pattern,$probe) + ); + } + + function dirlist($remote) { + $list=$this->rawlist($remote, "-la"); + if($list===false) { + $this->PushError("dirlist","can't read remote folder list", "Can't read remote folder \"".$remote."\" contents"); + return false; + } + + $dirlist = array(); + foreach($list as $k=>$v) { + $entry=$this->parselisting($v); + if ( empty($entry) ) + continue; + + if($entry["name"]=="." or $entry["name"]=="..") + continue; + + $dirlist[$entry['name']] = $entry; + } + + return $dirlist; + } +// +// +// + function _checkCode() { + return ($this->_code<400 and $this->_code>0); + } + + function _list($arg="", $cmd="LIST", $fnction="_list") { + if(!$this->_data_prepare()) return false; + if(!$this->_exec($cmd.$arg, $fnction)) { + $this->_data_close(); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + return FALSE; + } + $out=""; + if($this->_code<200) { + $out=$this->_data_read(); + $this->_data_close(); + if(!$this->_readmsg()) return FALSE; + if(!$this->_checkCode()) return FALSE; + if($out === FALSE ) return FALSE; + $out=preg_split("/[".CRLF."]+/", $out, -1, PREG_SPLIT_NO_EMPTY); +// $this->SendMSG(implode($this->_eol_code[$this->OS_local], $out)); + } + return $out; + } + +// +// +// +// Gnre une erreur pour traitement externe la classe + function PushError($fctname,$msg,$desc=false){ + $error=array(); + $error['time']=time(); + $error['fctname']=$fctname; + $error['msg']=$msg; + $error['desc']=$desc; + if($desc) $tmp=' ('.$desc.')'; else $tmp=''; + $this->SendMSG($fctname.': '.$msg.$tmp); + return(array_push($this->_error_array,$error)); + } + +// Rcupre une erreur externe + function PopError(){ + if(count($this->_error_array)) return(array_pop($this->_error_array)); + else return(false); + } +} + +$mod_sockets = extension_loaded( 'sockets' ); +if ( ! $mod_sockets && function_exists( 'dl' ) && is_callable( 'dl' ) ) { + $prefix = ( PHP_SHLIB_SUFFIX == 'dll' ) ? 'php_' : ''; + @dl( $prefix . 'sockets.' . PHP_SHLIB_SUFFIX ); + $mod_sockets = extension_loaded( 'sockets' ); +} + +require_once "class-ftp-" . ( $mod_sockets ? "sockets" : "pure" ) . ".php"; +?> diff --git a/src/wp-admin/includes/class-pclzip.php b/src/wp-admin/includes/class-pclzip.php new file mode 100644 index 0000000..5e6a619 --- /dev/null +++ b/src/wp-admin/includes/class-pclzip.php @@ -0,0 +1,5687 @@ +zipname = $p_zipname; + $this->zip_fd = 0; + $this->magic_quotes_status = -1; + + // ----- Return + return; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // create($p_filelist, $p_add_dir="", $p_remove_dir="") + // create($p_filelist, $p_option, $p_option_value, ...) + // Description : + // This method supports two different synopsis. The first one is historical. + // This method creates a Zip Archive. The Zip file is created in the + // filesystem. The files and directories indicated in $p_filelist + // are added in the archive. See the parameters description for the + // supported format of $p_filelist. + // When a directory is in the list, the directory and its content is added + // in the archive. + // In this synopsis, the function takes an optional variable list of + // options. See bellow the supported options. + // Parameters : + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or one directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_add_dir : A path to add before the real path of the archived file, + // in order to have it memorized in the archive. + // $p_remove_dir : A path to remove from the real path of the file to archive, + // in order to have a shorter path memorized in the archive. + // When $p_add_dir and $p_remove_dir are set, $p_remove_dir + // is removed first, before $p_add_dir is added. + // Options : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_COMMENT : + // PCLZIP_CB_PRE_ADD : + // PCLZIP_CB_POST_ADD : + // Return Values : + // 0 on failure, + // The list of the added files, with a status of the add action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function create($p_filelist) + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Set default values + $v_options = array(); + $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove from the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_ADD => 'optional', + PCLZIP_CB_POST_ADD => 'optional', + PCLZIP_OPT_NO_COMPRESSION => 'optional', + PCLZIP_OPT_COMMENT => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + //, PCLZIP_OPT_CRYPT => 'optional' + )); + if ($v_result != 1) { + return 0; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + } + else if ($v_size > 2) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Invalid number / type of arguments"); + return 0; + } + } + } + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Init + $v_string_list = array(); + $v_att_list = array(); + $v_filedescr_list = array(); + $p_result_list = array(); + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) { + + // ----- Look if the first element is also an array + // This will mean that this is a file description entry + if (isset($p_filelist[0]) && is_array($p_filelist[0])) { + $v_att_list = $p_filelist; + } + + // ----- The list is a list of string names + else { + $v_string_list = $p_filelist; + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_filelist)) { + // ----- Create a list from the string + $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); + } + + // ----- Invalid variable type for $p_filelist + else { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist"); + return 0; + } + + // ----- Reformat the string list + if (sizeof($v_string_list) != 0) { + foreach ($v_string_list as $v_string) { + if ($v_string != '') { + $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + } + else { + } + } + } + + // ----- For each file in the list check the attributes + $v_supported_attributes + = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' + ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' + ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' + ,PCLZIP_ATT_FILE_MTIME => 'optional' + ,PCLZIP_ATT_FILE_CONTENT => 'optional' + ,PCLZIP_ATT_FILE_COMMENT => 'optional' + ); + foreach ($v_att_list as $v_entry) { + $v_result = $this->privFileDescrParseAtt($v_entry, + $v_filedescr_list[], + $v_options, + $v_supported_attributes); + if ($v_result != 1) { + return 0; + } + } + + // ----- Expand the filelist (expand directories) + $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Call the create fct + $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Return + return $p_result_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // add($p_filelist, $p_add_dir="", $p_remove_dir="") + // add($p_filelist, $p_option, $p_option_value, ...) + // Description : + // This method supports two synopsis. The first one is historical. + // This methods add the list of files in an existing archive. + // If a file with the same name already exists, it is added at the end of the + // archive, the first one is still present. + // If the archive does not exist, it is created. + // Parameters : + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or one directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_add_dir : A path to add before the real path of the archived file, + // in order to have it memorized in the archive. + // $p_remove_dir : A path to remove from the real path of the file to archive, + // in order to have a shorter path memorized in the archive. + // When $p_add_dir and $p_remove_dir are set, $p_remove_dir + // is removed first, before $p_add_dir is added. + // Options : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_COMMENT : + // PCLZIP_OPT_ADD_COMMENT : + // PCLZIP_OPT_PREPEND_COMMENT : + // PCLZIP_CB_PRE_ADD : + // PCLZIP_CB_POST_ADD : + // Return Values : + // 0 on failure, + // The list of the added files, with a status of the add action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function add($p_filelist) + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Set default values + $v_options = array(); + $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove form the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_ADD => 'optional', + PCLZIP_CB_POST_ADD => 'optional', + PCLZIP_OPT_NO_COMPRESSION => 'optional', + PCLZIP_OPT_COMMENT => 'optional', + PCLZIP_OPT_ADD_COMMENT => 'optional', + PCLZIP_OPT_PREPEND_COMMENT => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + //, PCLZIP_OPT_CRYPT => 'optional' + )); + if ($v_result != 1) { + return 0; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } + } + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Init + $v_string_list = array(); + $v_att_list = array(); + $v_filedescr_list = array(); + $p_result_list = array(); + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) { + + // ----- Look if the first element is also an array + // This will mean that this is a file description entry + if (isset($p_filelist[0]) && is_array($p_filelist[0])) { + $v_att_list = $p_filelist; + } + + // ----- The list is a list of string names + else { + $v_string_list = $p_filelist; + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_filelist)) { + // ----- Create a list from the string + $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); + } + + // ----- Invalid variable type for $p_filelist + else { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist"); + return 0; + } + + // ----- Reformat the string list + if (sizeof($v_string_list) != 0) { + foreach ($v_string_list as $v_string) { + $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + } + } + + // ----- For each file in the list check the attributes + $v_supported_attributes + = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' + ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' + ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' + ,PCLZIP_ATT_FILE_MTIME => 'optional' + ,PCLZIP_ATT_FILE_CONTENT => 'optional' + ,PCLZIP_ATT_FILE_COMMENT => 'optional' + ); + foreach ($v_att_list as $v_entry) { + $v_result = $this->privFileDescrParseAtt($v_entry, + $v_filedescr_list[], + $v_options, + $v_supported_attributes); + if ($v_result != 1) { + return 0; + } + } + + // ----- Expand the filelist (expand directories) + $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Call the create fct + $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Return + return $p_result_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : listContent() + // Description : + // This public method, gives the list of the files and directories, with their + // properties. + // The properties of each entries in the list are (used also in other functions) : + // filename : Name of the file. For a create or add action it is the filename + // given by the user. For an extract function it is the filename + // of the extracted file. + // stored_filename : Name of the file / directory stored in the archive. + // size : Size of the stored file. + // compressed_size : Size of the file's data compressed in the archive + // (without the headers overhead) + // mtime : Last known modification date of the file (UNIX timestamp) + // comment : Comment associated with the file + // folder : true | false + // index : index of the file in the archive + // status : status of the action (depending of the action) : + // Values are : + // ok : OK ! + // filtered : the file / dir is not extracted (filtered by user) + // already_a_directory : the file can not be extracted because a + // directory with the same name already exists + // write_protected : the file can not be extracted because a file + // with the same name already exists and is + // write protected + // newer_exist : the file was not extracted because a newer file exists + // path_creation_fail : the file is not extracted because the folder + // does not exist and can not be created + // write_error : the file was not extracted because there was a + // error while writing the file + // read_error : the file was not extracted because there was a error + // while reading the file + // invalid_header : the file was not extracted because of an archive + // format error (bad file header) + // Note that each time a method can continue operating when there + // is an action error on a file, the error is only logged in the file status. + // Return Values : + // 0 on an unrecoverable failure, + // The list of the files in the archive. + // -------------------------------------------------------------------------------- + function listContent() + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Call the extracting fct + $p_list = array(); + if (($v_result = $this->privList($p_list)) != 1) + { + unset($p_list); + return(0); + } + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // extract($p_path="./", $p_remove_path="") + // extract([$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method extract all the files / directories from the archive to the + // folder indicated in $p_path. + // If you want to ignore the 'root' part of path of the memorized files + // you can indicate this in the optional $p_remove_path parameter. + // By default, if a newer file with the same name already exists, the + // file is not extracted. + // + // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions + // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append + // at the end of the path value of PCLZIP_OPT_PATH. + // Parameters : + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 or a negative value on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function extract() + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Set default values + $v_options = array(); +// $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_PATH => 'optional', + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_EXTRACT => 'optional', + PCLZIP_CB_POST_EXTRACT => 'optional', + PCLZIP_OPT_SET_CHMOD => 'optional', + PCLZIP_OPT_BY_NAME => 'optional', + PCLZIP_OPT_BY_EREG => 'optional', + PCLZIP_OPT_BY_PREG => 'optional', + PCLZIP_OPT_BY_INDEX => 'optional', + PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', + PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional', + PCLZIP_OPT_REPLACE_NEWER => 'optional' + ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' + ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + )); + if ($v_result != 1) { + return 0; + } + + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } + } + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Trace + + // ----- Call the extracting fct + $p_list = array(); + $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, + $v_remove_all_path, $v_options); + if ($v_result < 1) { + unset($p_list); + return(0); + } + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + + // -------------------------------------------------------------------------------- + // Function : + // extractByIndex($p_index, $p_path="./", $p_remove_path="") + // extractByIndex($p_index, [$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method is doing a partial extract of the archive. + // The extracted files or folders are identified by their index in the + // archive (from 0 to n). + // Note that if the index identify a folder, only the folder entry is + // extracted, not all the files included in the archive. + // Parameters : + // $p_index : A single index (integer) or a string of indexes of files to + // extract. The form of the string is "0,4-6,8-12" with only numbers + // and '-' for range or ',' to separate ranges. No spaces or ';' + // are allowed. + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and + // not as files. + // The resulting content is in a new field 'content' in the file + // structure. + // This option must be used alone (any other options are ignored). + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + //function extractByIndex($p_index, options...) + function extractByIndex($p_index) + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Set default values + $v_options = array(); +// $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove form the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_PATH => 'optional', + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_EXTRACT => 'optional', + PCLZIP_CB_POST_EXTRACT => 'optional', + PCLZIP_OPT_SET_CHMOD => 'optional', + PCLZIP_OPT_REPLACE_NEWER => 'optional' + ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' + ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + )); + if ($v_result != 1) { + return 0; + } + + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) { + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + } + else { + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } + } + + // ----- Trace + + // ----- Trick + // Here I want to reuse extractByRule(), so I need to parse the $p_index + // with privParseOptions() + $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index); + $v_options_trick = array(); + $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick, + array (PCLZIP_OPT_BY_INDEX => 'optional' )); + if ($v_result != 1) { + return 0; + } + $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX]; + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Call the extracting fct + if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) { + return(0); + } + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // delete([$p_option, $p_option_value, ...]) + // Description : + // This method removes files from the archive. + // If no parameters are given, then all the archive is emptied. + // Parameters : + // None or optional arguments. + // Options : + // PCLZIP_OPT_BY_INDEX : + // PCLZIP_OPT_BY_NAME : + // PCLZIP_OPT_BY_EREG : + // PCLZIP_OPT_BY_PREG : + // Return Values : + // 0 on failure, + // The list of the files which are still present in the archive. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function delete() + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Set default values + $v_options = array(); + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_BY_NAME => 'optional', + PCLZIP_OPT_BY_EREG => 'optional', + PCLZIP_OPT_BY_PREG => 'optional', + PCLZIP_OPT_BY_INDEX => 'optional' )); + if ($v_result != 1) { + return 0; + } + } + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Call the delete fct + $v_list = array(); + if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) { + $this->privSwapBackMagicQuotes(); + unset($v_list); + return(0); + } + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : deleteByIndex() + // Description : + // ***** Deprecated ***** + // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered. + // -------------------------------------------------------------------------------- + function deleteByIndex($p_index) + { + + $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index); + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : properties() + // Description : + // This method gives the properties of the archive. + // The properties are : + // nb : Number of files in the archive + // comment : Comment associated with the archive file + // status : not_exist, ok + // Parameters : + // None + // Return Values : + // 0 on failure, + // An array with the archive properties. + // -------------------------------------------------------------------------------- + function properties() + { + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + $this->privSwapBackMagicQuotes(); + return(0); + } + + // ----- Default properties + $v_prop = array(); + $v_prop['comment'] = ''; + $v_prop['nb'] = 0; + $v_prop['status'] = 'not_exist'; + + // ----- Look if file exists + if (@is_file($this->zipname)) + { + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) + { + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); + + // ----- Return + return 0; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privSwapBackMagicQuotes(); + return 0; + } + + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Set the user attributes + $v_prop['comment'] = $v_central_dir['comment']; + $v_prop['nb'] = $v_central_dir['entries']; + $v_prop['status'] = 'ok'; + } + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_prop; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : duplicate() + // Description : + // This method creates an archive by copying the content of an other one. If + // the archive already exist, it is replaced by the new one without any warning. + // Parameters : + // $p_archive : The filename of a valid archive, or + // a valid PclZip object. + // Return Values : + // 1 on success. + // 0 or a negative value on error (error code). + // -------------------------------------------------------------------------------- + function duplicate($p_archive) + { + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Look if the $p_archive is a PclZip object + if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip')) + { + + // ----- Duplicate the archive + $v_result = $this->privDuplicate($p_archive->zipname); + } + + // ----- Look if the $p_archive is a string (so a filename) + else if (is_string($p_archive)) + { + + // ----- Check that $p_archive is a valid zip file + // TBC : Should also check the archive format + if (!is_file($p_archive)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'"); + $v_result = PCLZIP_ERR_MISSING_FILE; + } + else { + // ----- Duplicate the archive + $v_result = $this->privDuplicate($p_archive); + } + } + + // ----- Invalid variable + else + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); + $v_result = PCLZIP_ERR_INVALID_PARAMETER; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : merge() + // Description : + // This method merge the $p_archive_to_add archive at the end of the current + // one ($this). + // If the archive ($this) does not exist, the merge becomes a duplicate. + // If the $p_archive_to_add archive does not exist, the merge is a success. + // Parameters : + // $p_archive_to_add : It can be directly the filename of a valid zip archive, + // or a PclZip object archive. + // Return Values : + // 1 on success, + // 0 or negative values on error (see below). + // -------------------------------------------------------------------------------- + function merge($p_archive_to_add) + { + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Look if the $p_archive_to_add is a PclZip object + if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip')) + { + + // ----- Merge the archive + $v_result = $this->privMerge($p_archive_to_add); + } + + // ----- Look if the $p_archive_to_add is a string (so a filename) + else if (is_string($p_archive_to_add)) + { + + // ----- Create a temporary archive + $v_object_archive = new PclZip($p_archive_to_add); + + // ----- Merge the archive + $v_result = $this->privMerge($v_object_archive); + } + + // ----- Invalid variable + else + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); + $v_result = PCLZIP_ERR_INVALID_PARAMETER; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + + + // -------------------------------------------------------------------------------- + // Function : errorCode() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function errorCode() + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + return(PclErrorCode()); + } + else { + return($this->error_code); + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : errorName() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function errorName($p_with_code=false) + { + $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR', + PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL', + PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL', + PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER', + PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE', + PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG', + PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP', + PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE', + PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL', + PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION', + PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT', + PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL', + PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL', + PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM', + PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', + PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE', + PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE', + PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', + PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION' + ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE' + ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION' + ); + + if (isset($v_name[$this->error_code])) { + $v_value = $v_name[$this->error_code]; + } + else { + $v_value = 'NoName'; + } + + if ($p_with_code) { + return($v_value.' ('.$this->error_code.')'); + } + else { + return($v_value); + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : errorInfo() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function errorInfo($p_full=false) + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + return(PclErrorString()); + } + else { + if ($p_full) { + return($this->errorName(true)." : ".$this->error_string); + } + else { + return($this->error_string." [code ".$this->error_code."]"); + } + } + } + // -------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------- +// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS ***** +// ***** ***** +// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY ***** +// -------------------------------------------------------------------------------- + + + + // -------------------------------------------------------------------------------- + // Function : privCheckFormat() + // Description : + // This method check that the archive exists and is a valid zip archive. + // Several level of check exists. (futur) + // Parameters : + // $p_level : Level of check. Default 0. + // 0 : Check the first bytes (magic codes) (default value)) + // 1 : 0 + Check the central directory (futur) + // 2 : 1 + Check each file header (futur) + // Return Values : + // true on success, + // false on error, the error code is set. + // -------------------------------------------------------------------------------- + function privCheckFormat($p_level=0) + { + $v_result = true; + + // ----- Reset the file system cache + clearstatcache(); + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Look if the file exits + if (!is_file($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'"); + return(false); + } + + // ----- Check that the file is readeable + if (!is_readable($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'"); + return(false); + } + + // ----- Check the magic code + // TBC + + // ----- Check the central header + // TBC + + // ----- Check each file header + // TBC + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privParseOptions() + // Description : + // This internal methods reads the variable list of arguments ($p_options_list, + // $p_size) and generate an array with the options and values ($v_result_list). + // $v_requested_options contains the options that can be present and those that + // must be present. + // $v_requested_options is an array, with the option value as key, and 'optional', + // or 'mandatory' as value. + // Parameters : + // See above. + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false) + { + $v_result=1; + + // ----- Read the options + $i=0; + while ($i<$p_size) { + + // ----- Check if the option is supported + if (!isset($v_requested_options[$p_options_list[$i]])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for next option + switch ($p_options_list[$i]) { + // ----- Look for options that request a path value + case PCLZIP_OPT_PATH : + case PCLZIP_OPT_REMOVE_PATH : + case PCLZIP_OPT_ADD_PATH : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); + $i++; + break; + + case PCLZIP_OPT_TEMP_FILE_THRESHOLD : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + return PclZip::errorCode(); + } + + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); + return PclZip::errorCode(); + } + + // ----- Check the value + $v_value = $p_options_list[$i+1]; + if ((!is_integer($v_value)) || ($v_value<0)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + return PclZip::errorCode(); + } + + // ----- Get the value (and convert it in bytes) + $v_result_list[$p_options_list[$i]] = $v_value*1048576; + $i++; + break; + + case PCLZIP_OPT_TEMP_FILE_ON : + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); + return PclZip::errorCode(); + } + + $v_result_list[$p_options_list[$i]] = true; + break; + + case PCLZIP_OPT_TEMP_FILE_OFF : + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'"); + return PclZip::errorCode(); + } + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'"); + return PclZip::errorCode(); + } + + $v_result_list[$p_options_list[$i]] = true; + break; + + case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if ( is_string($p_options_list[$i+1]) + && ($p_options_list[$i+1] != '')) { + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); + $i++; + } + else { + } + break; + + // ----- Look for options that request an array of string for value + case PCLZIP_OPT_BY_NAME : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1]; + } + else if (is_array($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that request an EREG or PREG expression + case PCLZIP_OPT_BY_EREG : + // ereg() is deprecated starting with PHP 5.3. Move PCLZIP_OPT_BY_EREG + // to PCLZIP_OPT_BY_PREG + $p_options_list[$i] = PCLZIP_OPT_BY_PREG; + case PCLZIP_OPT_BY_PREG : + //case PCLZIP_OPT_CRYPT : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that takes a string + case PCLZIP_OPT_COMMENT : + case PCLZIP_OPT_ADD_COMMENT : + case PCLZIP_OPT_PREPEND_COMMENT : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, + "Missing parameter value for option '" + .PclZipUtilOptionText($p_options_list[$i]) + ."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, + "Wrong parameter value for option '" + .PclZipUtilOptionText($p_options_list[$i]) + ."'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that request an array of index + case PCLZIP_OPT_BY_INDEX : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_work_list = array(); + if (is_string($p_options_list[$i+1])) { + + // ----- Remove spaces + $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', ''); + + // ----- Parse items + $v_work_list = explode(",", $p_options_list[$i+1]); + } + else if (is_integer($p_options_list[$i+1])) { + $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1]; + } + else if (is_array($p_options_list[$i+1])) { + $v_work_list = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Reduce the index list + // each index item in the list must be a couple with a start and + // an end value : [0,3], [5-5], [8-10], ... + // ----- Check the format of each item + $v_sort_flag=false; + $v_sort_value=0; + for ($j=0; $j= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + $i++; + break; + + // ----- Look for options that request a call-back + case PCLZIP_CB_PRE_EXTRACT : + case PCLZIP_CB_POST_EXTRACT : + case PCLZIP_CB_PRE_ADD : + case PCLZIP_CB_POST_ADD : + /* for futur use + case PCLZIP_CB_PRE_DELETE : + case PCLZIP_CB_POST_DELETE : + case PCLZIP_CB_PRE_LIST : + case PCLZIP_CB_POST_LIST : + */ + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_function_name = $p_options_list[$i+1]; + + // ----- Check that the value is a valid existing function + if (!function_exists($v_function_name)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Set the attribute + $v_result_list[$p_options_list[$i]] = $v_function_name; + $i++; + break; + + default : + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Unknown parameter '" + .$p_options_list[$i]."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Next options + $i++; + } + + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + // ----- Look if present + if (!isset($v_result_list[$key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); + + // ----- Return + return PclZip::errorCode(); + } + } + } + } + + // ----- Look for default values + if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { + + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privOptionDefaultThreshold() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privOptionDefaultThreshold(&$p_options) + { + $v_result=1; + + if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) + || isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) { + return $v_result; + } + + // ----- Get 'memory_limit' configuration value + $v_memory_limit = ini_get('memory_limit'); + $v_memory_limit = trim($v_memory_limit); + $last = strtolower(substr($v_memory_limit, -1)); + + if($last == 'g') + //$v_memory_limit = $v_memory_limit*1024*1024*1024; + $v_memory_limit = $v_memory_limit*1073741824; + if($last == 'm') + //$v_memory_limit = $v_memory_limit*1024*1024; + $v_memory_limit = $v_memory_limit*1048576; + if($last == 'k') + $v_memory_limit = $v_memory_limit*1024; + + $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit*PCLZIP_TEMPORARY_FILE_RATIO); + + + // ----- Sanity check : No threshold if value lower than 1M + if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) { + unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privFileDescrParseAtt() + // Description : + // Parameters : + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false) + { + $v_result=1; + + // ----- For each file in the list check the attributes + foreach ($p_file_list as $v_key => $v_value) { + + // ----- Check if the option is supported + if (!isset($v_requested_options[$v_key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for attribute + switch ($v_key) { + case PCLZIP_ATT_FILE_NAME : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['filename'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['filename'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + break; + + case PCLZIP_ATT_FILE_NEW_SHORT_NAME : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['new_short_name'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + break; + + case PCLZIP_ATT_FILE_NEW_FULL_NAME : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['new_full_name'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + break; + + // ----- Look for options that takes a string + case PCLZIP_ATT_FILE_COMMENT : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['comment'] = $v_value; + break; + + case PCLZIP_ATT_FILE_MTIME : + if (!is_integer($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". Integer expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['mtime'] = $v_value; + break; + + case PCLZIP_ATT_FILE_CONTENT : + $p_filedescr['content'] = $v_value; + break; + + default : + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Unknown parameter '".$v_key."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + // ----- Look if present + if (!isset($p_file_list[$key])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); + return PclZip::errorCode(); + } + } + } + } + + // end foreach + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privFileDescrExpand() + // Description : + // This method look for each item of the list to see if its a file, a folder + // or a string to be added as file. For any other type of files (link, other) + // just ignore the item. + // Then prepare the information that will be stored for that file. + // When its a folder, expand the folder with all the files that are in that + // folder (recursively). + // Parameters : + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privFileDescrExpand(&$p_filedescr_list, &$p_options) + { + $v_result=1; + + // ----- Create a result list + $v_result_list = array(); + + // ----- Look each entry + for ($i=0; $iprivCalculateStoredFilename($v_descr, $p_options); + + // ----- Add the descriptor in result list + $v_result_list[sizeof($v_result_list)] = $v_descr; + + // ----- Look for folder + if ($v_descr['type'] == 'folder') { + // ----- List of items in folder + $v_dirlist_descr = array(); + $v_dirlist_nb = 0; + if ($v_folder_handler = @opendir($v_descr['filename'])) { + while (($v_item_handler = @readdir($v_folder_handler)) !== false) { + + // ----- Skip '.' and '..' + if (($v_item_handler == '.') || ($v_item_handler == '..')) { + continue; + } + + // ----- Compose the full filename + $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler; + + // ----- Look for different stored filename + // Because the name of the folder was changed, the name of the + // files/sub-folders also change + if (($v_descr['stored_filename'] != $v_descr['filename']) + && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) { + if ($v_descr['stored_filename'] != '') { + $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler; + } + else { + $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler; + } + } + + $v_dirlist_nb++; + } + + @closedir($v_folder_handler); + } + else { + // TBC : unable to open folder in read mode + } + + // ----- Expand each element of the list + if ($v_dirlist_nb != 0) { + // ----- Expand + if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) { + return $v_result; + } + + // ----- Concat the resulting list + $v_result_list = array_merge($v_result_list, $v_dirlist_descr); + } + else { + } + + // ----- Free local array + unset($v_dirlist_descr); + } + } + + // ----- Get the result list + $p_filedescr_list = $v_result_list; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCreate() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privCreate($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + $v_list_detail = array(); + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the file in write mode + if (($v_result = $this->privOpenFd('wb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Add the list of files + $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options); + + // ----- Close + $this->privCloseFd(); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAdd() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privAdd($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + $v_list_detail = array(); + + // ----- Look if the archive exists or is empty + if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0)) + { + + // ----- Do a create + $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options); + + // ----- Return + return $v_result; + } + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('rb')) != 1) + { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) + { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = $v_central_dir['offset']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Swap the file descriptor + // Here is a trick : I swap the temporary fd with the zip fd, in order to use + // the following methods on the temporary fil and not the real archive + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Add the files + $v_header_list = array(); + if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) + { + fclose($v_zip_temp_fd); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($this->zip_fd); + + // ----- Copy the block of file headers from the old archive + $v_size = $v_central_dir['size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_zip_temp_fd, $v_read_size); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Create the Central Dir files header + for ($i=0, $v_count=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { + fclose($v_zip_temp_fd); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + $v_count++; + } + + // ----- Transform the header to a 'usable' info + $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + // ----- Zip file comment + $v_comment = $v_central_dir['comment']; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) { + $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT]; + } + if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($this->zip_fd)-$v_offset; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1) + { + // ----- Reset the file list + unset($v_header_list); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Swap back the file descriptor + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Close + $this->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privOpenFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privOpenFd($p_mode) + { + $v_result=1; + + // ----- Look if already open + if ($this->zip_fd != 0) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCloseFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privCloseFd() + { + $v_result=1; + + if ($this->zip_fd != 0) + @fclose($this->zip_fd); + $this->zip_fd = 0; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddList() + // Description : + // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is + // different from the real path of the file. This is usefull if you want to have PclTar + // running in any directory, and memorize relative path from an other directory. + // Parameters : + // $p_list : An array containing the file or directory names to add in the tar + // $p_result_list : list of added files with their properties (specially the status field) + // $p_add_dir : Path to add in the filename path archived + // $p_remove_dir : Path to remove in the filename path archived + // Return Values : + // -------------------------------------------------------------------------------- +// function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options) + function privAddList($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + + // ----- Add the files + $v_header_list = array(); + if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($this->zip_fd); + + // ----- Create the Central Dir files header + for ($i=0,$v_count=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { + // ----- Return + return $v_result; + } + $v_count++; + } + + // ----- Transform the header to a 'usable' info + $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + // ----- Zip file comment + $v_comment = ''; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($this->zip_fd)-$v_offset; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1) + { + // ----- Reset the file list + unset($v_header_list); + + // ----- Return + return $v_result; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFileList() + // Description : + // Parameters : + // $p_filedescr_list : An array containing the file description + // or directory names to add in the zip + // $p_result_list : list of added files with their properties (specially the status field) + // Return Values : + // -------------------------------------------------------------------------------- + function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + $v_header = array(); + + // ----- Recuperate the current number of elt in list + $v_nb = sizeof($p_result_list); + + // ----- Loop on the files + for ($j=0; ($jprivAddFile($p_filedescr_list[$j], $v_header, + $p_options); + if ($v_result != 1) { + return $v_result; + } + + // ----- Store the file infos + $p_result_list[$v_nb++] = $v_header; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privAddFile($p_filedescr, &$p_header, &$p_options) + { + $v_result=1; + + // ----- Working variable + $p_filename = $p_filedescr['filename']; + + // TBC : Already done in the fileAtt check ... ? + if ($p_filename == "") { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for a stored different filename + /* TBC : Removed + if (isset($p_filedescr['stored_filename'])) { + $v_stored_filename = $p_filedescr['stored_filename']; + } + else { + $v_stored_filename = $p_filedescr['stored_filename']; + } + */ + + // ----- Set the file properties + clearstatcache(); + $p_header['version'] = 20; + $p_header['version_extracted'] = 10; + $p_header['flag'] = 0; + $p_header['compression'] = 0; + $p_header['crc'] = 0; + $p_header['compressed_size'] = 0; + $p_header['filename_len'] = strlen($p_filename); + $p_header['extra_len'] = 0; + $p_header['disk'] = 0; + $p_header['internal'] = 0; + $p_header['offset'] = 0; + $p_header['filename'] = $p_filename; +// TBC : Removed $p_header['stored_filename'] = $v_stored_filename; + $p_header['stored_filename'] = $p_filedescr['stored_filename']; + $p_header['extra'] = ''; + $p_header['status'] = 'ok'; + $p_header['index'] = -1; + + // ----- Look for regular file + if ($p_filedescr['type']=='file') { + $p_header['external'] = 0x00000000; + $p_header['size'] = filesize($p_filename); + } + + // ----- Look for regular folder + else if ($p_filedescr['type']=='folder') { + $p_header['external'] = 0x00000010; + $p_header['mtime'] = filemtime($p_filename); + $p_header['size'] = filesize($p_filename); + } + + // ----- Look for virtual file + else if ($p_filedescr['type'] == 'virtual_file') { + $p_header['external'] = 0x00000000; + $p_header['size'] = strlen($p_filedescr['content']); + } + + + // ----- Look for filetime + if (isset($p_filedescr['mtime'])) { + $p_header['mtime'] = $p_filedescr['mtime']; + } + else if ($p_filedescr['type'] == 'virtual_file') { + $p_header['mtime'] = time(); + } + else { + $p_header['mtime'] = filemtime($p_filename); + } + + // ------ Look for file comment + if (isset($p_filedescr['comment'])) { + $p_header['comment_len'] = strlen($p_filedescr['comment']); + $p_header['comment'] = $p_filedescr['comment']; + } + else { + $p_header['comment_len'] = 0; + $p_header['comment'] = ''; + } + + // ----- Look for pre-add callback + if (isset($p_options[PCLZIP_CB_PRE_ADD])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_header, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_PRE_ADD](PCLZIP_CB_PRE_ADD, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_header['status'] = "skipped"; + $v_result = 1; + } + + // ----- Update the informations + // Only some fields can be modified + if ($p_header['stored_filename'] != $v_local_header['stored_filename']) { + $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']); + } + } + + // ----- Look for empty stored filename + if ($p_header['stored_filename'] == "") { + $p_header['status'] = "filtered"; + } + + // ----- Check the path length + if (strlen($p_header['stored_filename']) > 0xFF) { + $p_header['status'] = 'filename_too_long'; + } + + // ----- Look if no error, or file not skipped + if ($p_header['status'] == 'ok') { + + // ----- Look for a file + if ($p_filedescr['type'] == 'file') { + // ----- Look for using temporary file to zip + if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) + && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) + || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) + && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])) ) ) { + $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options); + if ($v_result < PCLZIP_ERR_NO_ERROR) { + return $v_result; + } + } + + // ----- Use "in memory" zip algo + else { + + // ----- Open the source file + if (($v_file = @fopen($p_filename, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); + return PclZip::errorCode(); + } + + // ----- Read the file content + $v_content = @fread($v_file, $p_header['size']); + + // ----- Close the file + @fclose($v_file); + + // ----- Calculate the CRC + $p_header['crc'] = @crc32($v_content); + + // ----- Look for no compression + if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { + // ----- Set header parameters + $p_header['compressed_size'] = $p_header['size']; + $p_header['compression'] = 0; + } + + // ----- Look for normal compression + else { + // ----- Compress the content + $v_content = @gzdeflate($v_content); + + // ----- Set header parameters + $p_header['compressed_size'] = strlen($v_content); + $p_header['compression'] = 8; + } + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + @fclose($v_file); + return $v_result; + } + + // ----- Write the compressed (or not) content + @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); + + } + + } + + // ----- Look for a virtual file (a file from string) + else if ($p_filedescr['type'] == 'virtual_file') { + + $v_content = $p_filedescr['content']; + + // ----- Calculate the CRC + $p_header['crc'] = @crc32($v_content); + + // ----- Look for no compression + if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { + // ----- Set header parameters + $p_header['compressed_size'] = $p_header['size']; + $p_header['compression'] = 0; + } + + // ----- Look for normal compression + else { + // ----- Compress the content + $v_content = @gzdeflate($v_content); + + // ----- Set header parameters + $p_header['compressed_size'] = strlen($v_content); + $p_header['compression'] = 8; + } + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + @fclose($v_file); + return $v_result; + } + + // ----- Write the compressed (or not) content + @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); + } + + // ----- Look for a directory + else if ($p_filedescr['type'] == 'folder') { + // ----- Look for directory last '/' + if (@substr($p_header['stored_filename'], -1) != '/') { + $p_header['stored_filename'] .= '/'; + } + + // ----- Set the file properties + $p_header['size'] = 0; + //$p_header['external'] = 0x41FF0010; // Value for a folder : to be checked + $p_header['external'] = 0x00000010; // Value for a folder : to be checked + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) + { + return $v_result; + } + } + } + + // ----- Look for post-add callback + if (isset($p_options[PCLZIP_CB_POST_ADD])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_header, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_POST_ADD](PCLZIP_CB_POST_ADD, $v_local_header); + if ($v_result == 0) { + // ----- Ignored + $v_result = 1; + } + + // ----- Update the informations + // Nothing can be modified + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFileUsingTempFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options) + { + $v_result=PCLZIP_ERR_NO_ERROR; + + // ----- Working variable + $p_filename = $p_filedescr['filename']; + + + // ----- Open the source file + if (($v_file = @fopen($p_filename, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); + return PclZip::errorCode(); + } + + // ----- Creates a compressed temporary file + $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; + if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) { + fclose($v_file); + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); + return PclZip::errorCode(); + } + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = filesize($p_filename); + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_file, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @gzputs($v_file_compressed, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close the file + @fclose($v_file); + @gzclose($v_file_compressed); + + // ----- Check the minimum file size + if (filesize($v_gzip_temp_name) < 18) { + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes'); + return PclZip::errorCode(); + } + + // ----- Extract the compressed attributes + if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); + return PclZip::errorCode(); + } + + // ----- Read the gzip file header + $v_binary_data = @fread($v_file_compressed, 10); + $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data); + + // ----- Check some parameters + $v_data_header['os'] = bin2hex($v_data_header['os']); + + // ----- Read the gzip file footer + @fseek($v_file_compressed, filesize($v_gzip_temp_name)-8); + $v_binary_data = @fread($v_file_compressed, 8); + $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data); + + // ----- Set the attributes + $p_header['compression'] = ord($v_data_header['cm']); + //$p_header['mtime'] = $v_data_header['mtime']; + $p_header['crc'] = $v_data_footer['crc']; + $p_header['compressed_size'] = filesize($v_gzip_temp_name)-18; + + // ----- Close the file + @fclose($v_file_compressed); + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + return $v_result; + } + + // ----- Add the compressed data + if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) + { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); + return PclZip::errorCode(); + } + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + fseek($v_file_compressed, 10); + $v_size = $p_header['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_file_compressed, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close the file + @fclose($v_file_compressed); + + // ----- Unlink the temporary file + @unlink($v_gzip_temp_name); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCalculateStoredFilename() + // Description : + // Based on file descriptor properties and global options, this method + // calculate the filename that will be stored in the archive. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privCalculateStoredFilename(&$p_filedescr, &$p_options) + { + $v_result=1; + + // ----- Working variables + $p_filename = $p_filedescr['filename']; + if (isset($p_options[PCLZIP_OPT_ADD_PATH])) { + $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH]; + } + else { + $p_add_dir = ''; + } + if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) { + $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH]; + } + else { + $p_remove_dir = ''; + } + if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + else { + $p_remove_all_dir = 0; + } + + + // ----- Look for full name change + if (isset($p_filedescr['new_full_name'])) { + // ----- Remove drive letter if any + $v_stored_filename = PclZipUtilTranslateWinPath($p_filedescr['new_full_name']); + } + + // ----- Look for path and/or short name change + else { + + // ----- Look for short name change + // Its when we cahnge just the filename but not the path + if (isset($p_filedescr['new_short_name'])) { + $v_path_info = pathinfo($p_filename); + $v_dir = ''; + if ($v_path_info['dirname'] != '') { + $v_dir = $v_path_info['dirname'].'/'; + } + $v_stored_filename = $v_dir.$p_filedescr['new_short_name']; + } + else { + // ----- Calculate the stored filename + $v_stored_filename = $p_filename; + } + + // ----- Look for all path to remove + if ($p_remove_all_dir) { + $v_stored_filename = basename($p_filename); + } + // ----- Look for partial path remove + else if ($p_remove_dir != "") { + if (substr($p_remove_dir, -1) != '/') + $p_remove_dir .= "/"; + + if ( (substr($p_filename, 0, 2) == "./") + || (substr($p_remove_dir, 0, 2) == "./")) { + + if ( (substr($p_filename, 0, 2) == "./") + && (substr($p_remove_dir, 0, 2) != "./")) { + $p_remove_dir = "./".$p_remove_dir; + } + if ( (substr($p_filename, 0, 2) != "./") + && (substr($p_remove_dir, 0, 2) == "./")) { + $p_remove_dir = substr($p_remove_dir, 2); + } + } + + $v_compare = PclZipUtilPathInclusion($p_remove_dir, + $v_stored_filename); + if ($v_compare > 0) { + if ($v_compare == 2) { + $v_stored_filename = ""; + } + else { + $v_stored_filename = substr($v_stored_filename, + strlen($p_remove_dir)); + } + } + } + + // ----- Remove drive letter if any + $v_stored_filename = PclZipUtilTranslateWinPath($v_stored_filename); + + // ----- Look for path to add + if ($p_add_dir != "") { + if (substr($p_add_dir, -1) == "/") + $v_stored_filename = $p_add_dir.$v_stored_filename; + else + $v_stored_filename = $p_add_dir."/".$v_stored_filename; + } + } + + // ----- Filename (reduce the path of stored name) + $v_stored_filename = PclZipUtilPathReduction($v_stored_filename); + $p_filedescr['stored_filename'] = $v_stored_filename; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privWriteFileHeader(&$p_header) + { + $v_result=1; + + // ----- Store the offset position of the file + $p_header['offset'] = ftell($this->zip_fd); + + // ----- Transform UNIX mtime to DOS format mdate/mtime + $v_date = getdate($p_header['mtime']); + $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; + $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; + + // ----- Packed data + $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50, + $p_header['version_extracted'], $p_header['flag'], + $p_header['compression'], $v_mtime, $v_mdate, + $p_header['crc'], $p_header['compressed_size'], + $p_header['size'], + strlen($p_header['stored_filename']), + $p_header['extra_len']); + + // ----- Write the first 148 bytes of the header in the archive + fputs($this->zip_fd, $v_binary_data, 30); + + // ----- Write the variable fields + if (strlen($p_header['stored_filename']) != 0) + { + fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); + } + if ($p_header['extra_len'] != 0) + { + fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privWriteCentralFileHeader(&$p_header) + { + $v_result=1; + + // TBC + //for(reset($p_header); $key = key($p_header); next($p_header)) { + //} + + // ----- Transform UNIX mtime to DOS format mdate/mtime + $v_date = getdate($p_header['mtime']); + $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; + $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; + + + // ----- Packed data + $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50, + $p_header['version'], $p_header['version_extracted'], + $p_header['flag'], $p_header['compression'], + $v_mtime, $v_mdate, $p_header['crc'], + $p_header['compressed_size'], $p_header['size'], + strlen($p_header['stored_filename']), + $p_header['extra_len'], $p_header['comment_len'], + $p_header['disk'], $p_header['internal'], + $p_header['external'], $p_header['offset']); + + // ----- Write the 42 bytes of the header in the zip file + fputs($this->zip_fd, $v_binary_data, 46); + + // ----- Write the variable fields + if (strlen($p_header['stored_filename']) != 0) + { + fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); + } + if ($p_header['extra_len'] != 0) + { + fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + } + if ($p_header['comment_len'] != 0) + { + fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteCentralHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment) + { + $v_result=1; + + // ----- Packed data + $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries, + $p_nb_entries, $p_size, + $p_offset, strlen($p_comment)); + + // ----- Write the 22 bytes of the header in the zip file + fputs($this->zip_fd, $v_binary_data, 22); + + // ----- Write the variable fields + if (strlen($p_comment) != 0) + { + fputs($this->zip_fd, $p_comment, strlen($p_comment)); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privList() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privList(&$p_list) + { + $v_result=1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) + { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Go to beginning of Central Dir + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_central_dir['offset'])) + { + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read each entry + for ($i=0; $i<$v_central_dir['entries']; $i++) + { + // ----- Read the file header + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) + { + $this->privSwapBackMagicQuotes(); + return $v_result; + } + $v_header['index'] = $i; + + // ----- Get the only interesting attributes + $this->privConvertHeader2FileInfo($v_header, $p_list[$i]); + unset($v_header); + } + + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privConvertHeader2FileInfo() + // Description : + // This function takes the file informations from the central directory + // entries and extract the interesting parameters that will be given back. + // The resulting file infos are set in the array $p_info + // $p_info['filename'] : Filename with full path. Given by user (add), + // extracted in the filesystem (extract). + // $p_info['stored_filename'] : Stored filename in the archive. + // $p_info['size'] = Size of the file. + // $p_info['compressed_size'] = Compressed size of the file. + // $p_info['mtime'] = Last modification date of the file. + // $p_info['comment'] = Comment associated with the file. + // $p_info['folder'] = true/false : indicates if the entry is a folder or not. + // $p_info['status'] = status of the action on the file. + // $p_info['crc'] = CRC of the file content. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privConvertHeader2FileInfo($p_header, &$p_info) + { + $v_result=1; + + // ----- Get the interesting attributes + $v_temp_path = PclZipUtilPathReduction($p_header['filename']); + $p_info['filename'] = $v_temp_path; + $v_temp_path = PclZipUtilPathReduction($p_header['stored_filename']); + $p_info['stored_filename'] = $v_temp_path; + $p_info['size'] = $p_header['size']; + $p_info['compressed_size'] = $p_header['compressed_size']; + $p_info['mtime'] = $p_header['mtime']; + $p_info['comment'] = $p_header['comment']; + $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010); + $p_info['index'] = $p_header['index']; + $p_info['status'] = $p_header['status']; + $p_info['crc'] = $p_header['crc']; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractByRule() + // Description : + // Extract a file or directory depending of rules (by index, by name, ...) + // Parameters : + // $p_file_list : An array where will be placed the properties of each + // extracted file + // $p_path : Path to add while writing the extracted files + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_remove_path does not apply to 'list' mode. + // $p_path and $p_remove_path are commulative. + // Return Values : + // 1 on success,0 or less on error (see error code list) + // -------------------------------------------------------------------------------- + function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + $v_result=1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Check the path + if ( ($p_path == "") + || ( (substr($p_path, 0, 1) != "/") + && (substr($p_path, 0, 3) != "../") + && (substr($p_path,1,2)!=":/"))) + $p_path = "./".$p_path; + + // ----- Reduce the path last (and duplicated) '/' + if (($p_path != "./") && ($p_path != "/")) + { + // ----- Look for the path end '/' + while (substr($p_path, -1) == "/") + { + $p_path = substr($p_path, 0, strlen($p_path)-1); + } + } + + // ----- Look for path to remove format (should end by /) + if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) + { + $p_remove_path .= '/'; + } + $p_remove_path_size = strlen($p_remove_path); + + // ----- Open the zip file + if (($v_result = $this->privOpenFd('rb')) != 1) + { + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; + + // ----- Read each entry + $j_start = 0; + for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) + { + + // ----- Read next Central dir entry + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_pos_entry)) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the file header + $v_header = array(); + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Store the index + $v_header['index'] = $i; + + // ----- Store the file position + $v_pos_entry = ftell($this->zip_fd); + + // ----- Look for the specific extract rules + $v_extract = false; + + // ----- Look for extract by name rule + if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) + && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { + + // ----- Look if the filename is in the list + for ($j=0; ($j strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) + && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_extract = true; + } + } + // ----- Look for a filename + elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + $v_extract = true; + } + } + } + + // ----- Look for extract by ereg rule + // ereg() is deprecated with PHP 5.3 + /* + else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { + + if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) { + $v_extract = true; + } + } + */ + + // ----- Look for extract by preg rule + else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) + && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { + + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) { + $v_extract = true; + } + } + + // ----- Look for extract by index rule + else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) + && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { + + // ----- Look if the index is in the list + for ($j=$j_start; ($j=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + $v_extract = true; + } + if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + $j_start = $j+1; + } + + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { + break; + } + } + } + + // ----- Look for no rule, which means extract all the archive + else { + $v_extract = true; + } + + // ----- Check compression method + if ( ($v_extract) + && ( ($v_header['compression'] != 8) + && ($v_header['compression'] != 0))) { + $v_header['status'] = 'unsupported_compression'; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION, + "Filename '".$v_header['stored_filename']."' is " + ."compressed by an unsupported compression " + ."method (".$v_header['compression'].") "); + + return PclZip::errorCode(); + } + } + + // ----- Check encrypted files + if (($v_extract) && (($v_header['flag'] & 1) == 1)) { + $v_header['status'] = 'unsupported_encryption'; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, + "Unsupported encryption for " + ." filename '".$v_header['stored_filename'] + ."'"); + + return PclZip::errorCode(); + } + } + + // ----- Look for real extraction + if (($v_extract) && ($v_header['status'] != 'ok')) { + $v_result = $this->privConvertHeader2FileInfo($v_header, + $p_file_list[$v_nb_extracted++]); + if ($v_result != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + $v_extract = false; + } + + // ----- Look for real extraction + if ($v_extract) + { + + // ----- Go to the file position + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_header['offset'])) + { + // ----- Close the zip file + $this->privCloseFd(); + + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for extraction as string + if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) { + + $v_string = ''; + + // ----- Extracting the file + $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Set the file content + $p_file_list[$v_nb_extracted]['content'] = $v_string; + + // ----- Next extracted file + $v_nb_extracted++; + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + // ----- Look for extraction in standard output + elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) + && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) { + // ----- Extracting the file in standard output + $v_result1 = $this->privExtractFileInOutput($v_header, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + // ----- Look for normal extraction + else { + // ----- Extracting the file + $v_result1 = $this->privExtractFile($v_header, + $p_path, $p_remove_path, + $p_remove_all_path, + $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + } + } + + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFile() + // Description : + // Parameters : + // Return Values : + // + // 1 : ... ? + // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback + // -------------------------------------------------------------------------------- + function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + $v_result=1; + + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) + { + // ----- Return + return $v_result; + } + + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for all path to remove + if ($p_remove_all_path == true) { + // ----- Look for folder entry that not need to be extracted + if (($p_entry['external']&0x00000010)==0x00000010) { + + $p_entry['status'] = "filtered"; + + return $v_result; + } + + // ----- Get the basename of the path + $p_entry['filename'] = basename($p_entry['filename']); + } + + // ----- Look for path to remove + else if ($p_remove_path != "") + { + if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2) + { + + // ----- Change the file status + $p_entry['status'] = "filtered"; + + // ----- Return + return $v_result; + } + + $p_remove_path_size = strlen($p_remove_path); + if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path) + { + + // ----- Remove the path + $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size); + + } + } + + // ----- Add the path + if ($p_path != '') { + $p_entry['filename'] = $p_path."/".$p_entry['filename']; + } + + // ----- Check a base_dir_restriction + if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) { + $v_inclusion + = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION], + $p_entry['filename']); + if ($v_inclusion == 0) { + + PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION, + "Filename '".$p_entry['filename']."' is " + ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION"); + + return PclZip::errorCode(); + } + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } + + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Look for specific actions while the file exist + if (file_exists($p_entry['filename'])) + { + + // ----- Look if file is a directory + if (is_dir($p_entry['filename'])) + { + + // ----- Change the file status + $p_entry['status'] = "already_a_directory"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY, + "Filename '".$p_entry['filename']."' is " + ."already used by an existing directory"); + + return PclZip::errorCode(); + } + } + // ----- Look if file is write protected + else if (!is_writeable($p_entry['filename'])) + { + + // ----- Change the file status + $p_entry['status'] = "write_protected"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, + "Filename '".$p_entry['filename']."' exists " + ."and is write protected"); + + return PclZip::errorCode(); + } + } + + // ----- Look if the extracted file is older + else if (filemtime($p_entry['filename']) > $p_entry['mtime']) + { + // ----- Change the file status + if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER])) + && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) { + } + else { + $p_entry['status'] = "newer_exist"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, + "Newer version of '".$p_entry['filename']."' exists " + ."and option PCLZIP_OPT_REPLACE_NEWER is not selected"); + + return PclZip::errorCode(); + } + } + } + else { + } + } + + // ----- Check the directory availability and create it if necessary + else { + if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/')) + $v_dir_to_check = $p_entry['filename']; + else if (!strstr($p_entry['filename'], "/")) + $v_dir_to_check = ""; + else + $v_dir_to_check = dirname($p_entry['filename']); + + if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) { + + // ----- Change the file status + $p_entry['status'] = "path_creation_fail"; + + // ----- Return + //return $v_result; + $v_result = 1; + } + } + } + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) + { + // ----- Look for not compressed file + if ($p_entry['compression'] == 0) { + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) + { + + // ----- Change the file status + $p_entry['status'] = "write_error"; + + // ----- Return + return $v_result; + } + + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + /* Try to speed up the code + $v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_binary_data, $v_read_size); + */ + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Closing the destination file + fclose($v_dest_file); + + // ----- Change the file mtime + touch($p_entry['filename'], $p_entry['mtime']); + + + } + else { + // ----- TBC + // Need to be finished + if (($p_entry['flag'] & 1) == 1) { + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, 'File \''.$p_entry['filename'].'\' is encrypted. Encrypted files are not supported.'); + return PclZip::errorCode(); + } + + + // ----- Look for using temporary file to unzip + if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) + && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) + || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) + && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])) ) ) { + $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options); + if ($v_result < PCLZIP_ERR_NO_ERROR) { + return $v_result; + } + } + + // ----- Look for extract in memory + else { + + + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + $v_file_content = @gzinflate($v_buffer); + unset($v_buffer); + if ($v_file_content === FALSE) { + + // ----- Change the file status + // TBC + $p_entry['status'] = "error"; + + return $v_result; + } + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { + + // ----- Change the file status + $p_entry['status'] = "write_error"; + + return $v_result; + } + + // ----- Write the uncompressed data + @fwrite($v_dest_file, $v_file_content, $p_entry['size']); + unset($v_file_content); + + // ----- Closing the destination file + @fclose($v_dest_file); + + } + + // ----- Change the file mtime + @touch($p_entry['filename'], $p_entry['mtime']); + } + + // ----- Look for chmod option + if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) { + + // ----- Change the mode of the file + @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]); + } + + } + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileUsingTempFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileUsingTempFile(&$p_entry, &$p_options) + { + $v_result=1; + + // ----- Creates a temporary file + $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; + if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) { + fclose($v_file); + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); + return PclZip::errorCode(); + } + + + // ----- Write gz file format header + $v_binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($p_entry['compression']), Chr(0x00), time(), Chr(0x00), Chr(3)); + @fwrite($v_dest_file, $v_binary_data, 10); + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Write gz file format footer + $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']); + @fwrite($v_dest_file, $v_binary_data, 8); + + // ----- Close the temporary file + @fclose($v_dest_file); + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { + $p_entry['status'] = "write_error"; + return $v_result; + } + + // ----- Open the temporary gz file + if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) { + @fclose($v_dest_file); + $p_entry['status'] = "read_error"; + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); + return PclZip::errorCode(); + } + + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($v_src_file, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + @fclose($v_dest_file); + @gzclose($v_src_file); + + // ----- Delete the temporary file + @unlink($v_gzip_temp_name); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileInOutput() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileInOutput(&$p_entry, &$p_options) + { + $v_result=1; + + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) { + return $v_result; + } + + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } + + // ----- Trace + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) { + // ----- Look for not compressed file + if ($p_entry['compressed_size'] == $p_entry['size']) { + + // ----- Read the file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Send the file to the output + echo $v_buffer; + unset($v_buffer); + } + else { + + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + $v_file_content = gzinflate($v_buffer); + unset($v_buffer); + + // ----- Send the file to the output + echo $v_file_content; + unset($v_file_content); + } + } + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileAsString() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileAsString(&$p_entry, &$p_string, &$p_options) + { + $v_result=1; + + // ----- Read the file header + $v_header = array(); + if (($v_result = $this->privReadFileHeader($v_header)) != 1) + { + // ----- Return + return $v_result; + } + + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } + + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) { + // ----- Look for not compressed file + // if ($p_entry['compressed_size'] == $p_entry['size']) + if ($p_entry['compression'] == 0) { + + // ----- Reading the file + $p_string = @fread($this->zip_fd, $p_entry['compressed_size']); + } + else { + + // ----- Reading the file + $v_data = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + if (($p_string = @gzinflate($v_data)) === FALSE) { + // TBC + } + } + + // ----- Trace + } + else { + // TBC : error : can not extract a folder in a string + } + + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Swap the content to header + $v_local_header['content'] = $p_string; + $p_string = ''; + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Swap back the content to header + $p_string = $v_local_header['content']; + unset($v_local_header['content']); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadFileHeader(&$p_header) + { + $v_result=1; + + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = unpack('Vid', $v_binary_data); + + // ----- Check signature + if ($v_data['id'] != 0x04034b50) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 26); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 26) + { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Extract the values + $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data); + + // ----- Get filename + $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']); + + // ----- Get extra_fields + if ($v_data['extra_len'] != 0) { + $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']); + } + else { + $p_header['extra'] = ''; + } + + // ----- Extract properties + $p_header['version_extracted'] = $v_data['version']; + $p_header['compression'] = $v_data['compression']; + $p_header['size'] = $v_data['size']; + $p_header['compressed_size'] = $v_data['compressed_size']; + $p_header['crc'] = $v_data['crc']; + $p_header['flag'] = $v_data['flag']; + $p_header['filename_len'] = $v_data['filename_len']; + + // ----- Recuperate date in UNIX format + $p_header['mdate'] = $v_data['mdate']; + $p_header['mtime'] = $v_data['mtime']; + if ($p_header['mdate'] && $p_header['mtime']) + { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F)*2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + } + else + { + $p_header['mtime'] = time(); + } + + // TBC + //for(reset($v_data); $key = key($v_data); next($v_data)) { + //} + + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + + // ----- Set the status field + $p_header['status'] = "ok"; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadCentralFileHeader(&$p_header) + { + $v_result=1; + + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = unpack('Vid', $v_binary_data); + + // ----- Check signature + if ($v_data['id'] != 0x02014b50) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 42); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 42) + { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Extract the values + $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data); + + // ----- Get filename + if ($p_header['filename_len'] != 0) + $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']); + else + $p_header['filename'] = ''; + + // ----- Get extra + if ($p_header['extra_len'] != 0) + $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']); + else + $p_header['extra'] = ''; + + // ----- Get comment + if ($p_header['comment_len'] != 0) + $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']); + else + $p_header['comment'] = ''; + + // ----- Extract properties + + // ----- Recuperate date in UNIX format + //if ($p_header['mdate'] && $p_header['mtime']) + // TBC : bug : this was ignoring time with 0/0/0 + if (1) + { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F)*2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + } + else + { + $p_header['mtime'] = time(); + } + + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + + // ----- Set default status to ok + $p_header['status'] = 'ok'; + + // ----- Look if it is a directory + if (substr($p_header['filename'], -1) == '/') { + //$p_header['external'] = 0x41FF0010; + $p_header['external'] = 0x00000010; + } + + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCheckFileHeaders() + // Description : + // Parameters : + // Return Values : + // 1 on success, + // 0 on error; + // -------------------------------------------------------------------------------- + function privCheckFileHeaders(&$p_local_header, &$p_central_header) + { + $v_result=1; + + // ----- Check the static values + // TBC + if ($p_local_header['filename'] != $p_central_header['filename']) { + } + if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) { + } + if ($p_local_header['flag'] != $p_central_header['flag']) { + } + if ($p_local_header['compression'] != $p_central_header['compression']) { + } + if ($p_local_header['mtime'] != $p_central_header['mtime']) { + } + if ($p_local_header['filename_len'] != $p_central_header['filename_len']) { + } + + // ----- Look for flag bit 3 + if (($p_local_header['flag'] & 8) == 8) { + $p_local_header['size'] = $p_central_header['size']; + $p_local_header['compressed_size'] = $p_central_header['compressed_size']; + $p_local_header['crc'] = $p_central_header['crc']; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadEndCentralDir() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadEndCentralDir(&$p_central_dir) + { + $v_result=1; + + // ----- Go to the end of the zip file + $v_size = filesize($this->zipname); + @fseek($this->zip_fd, $v_size); + if (@ftell($this->zip_fd) != $v_size) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\''); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- First try : look if this is an archive with no commentaries (most of the time) + // in this case the end of central dir is at 22 bytes of the file end + $v_found = 0; + if ($v_size > 26) { + @fseek($this->zip_fd, $v_size-22); + if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read for bytes + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = @unpack('Vid', $v_binary_data); + + // ----- Check signature + if ($v_data['id'] == 0x06054b50) { + $v_found = 1; + } + + $v_pos = ftell($this->zip_fd); + } + + // ----- Go back to the maximum possible size of the Central Dir End Record + if (!$v_found) { + $v_maximum_size = 65557; // 0xFFFF + 22; + if ($v_maximum_size > $v_size) + $v_maximum_size = $v_size; + @fseek($this->zip_fd, $v_size-$v_maximum_size); + if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read byte per byte in order to find the signature + $v_pos = ftell($this->zip_fd); + $v_bytes = 0x00000000; + while ($v_pos < $v_size) + { + // ----- Read a byte + $v_byte = @fread($this->zip_fd, 1); + + // ----- Add the byte + //$v_bytes = ($v_bytes << 8) | Ord($v_byte); + // Note we mask the old value down such that once shifted we can never end up with more than a 32bit number + // Otherwise on systems where we have 64bit integers the check below for the magic number will fail. + $v_bytes = ( ($v_bytes & 0xFFFFFF) << 8) | Ord($v_byte); + + // ----- Compare the bytes + if ($v_bytes == 0x504b0506) + { + $v_pos++; + break; + } + + $v_pos++; + } + + // ----- Look if not found end of central dir + if ($v_pos == $v_size) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature"); + + // ----- Return + return PclZip::errorCode(); + } + } + + // ----- Read the first 18 bytes of the header + $v_binary_data = fread($this->zip_fd, 18); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 18) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data)); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Extract the values + $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data); + + // ----- Check the global size + if (($v_pos + $v_data['comment_size'] + 18) != $v_size) { + + // ----- Removed in release 2.2 see readme file + // The check of the file size is a little too strict. + // Some bugs where found when a zip is encrypted/decrypted with 'crypt'. + // While decrypted, zip has training 0 bytes + if (0) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, + 'The central dir is not at the end of the archive.' + .' Some trailing bytes exists after the archive.'); + + // ----- Return + return PclZip::errorCode(); + } + } + + // ----- Get comment + if ($v_data['comment_size'] != 0) { + $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']); + } + else + $p_central_dir['comment'] = ''; + + $p_central_dir['entries'] = $v_data['entries']; + $p_central_dir['disk_entries'] = $v_data['disk_entries']; + $p_central_dir['offset'] = $v_data['offset']; + $p_central_dir['size'] = $v_data['size']; + $p_central_dir['disk'] = $v_data['disk']; + $p_central_dir['disk_start'] = $v_data['disk_start']; + + // TBC + //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) { + //} + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDeleteByRule() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDeleteByRule(&$p_result_list, &$p_options) + { + $v_result=1; + $v_list_detail = array(); + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('rb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privCloseFd(); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Scan all the files + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_pos_entry)) + { + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read each entry + $v_header_list = array(); + $j_start = 0; + for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) + { + + // ----- Read the file header + $v_header_list[$v_nb_extracted] = array(); + if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + + return $v_result; + } + + + // ----- Store the index + $v_header_list[$v_nb_extracted]['index'] = $i; + + // ----- Look for the specific extract rules + $v_found = false; + + // ----- Look for extract by name rule + if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) + && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { + + // ----- Look if the filename is in the list + for ($j=0; ($j strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) + && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_found = true; + } + elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */ + && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_found = true; + } + } + // ----- Look for a filename + elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + $v_found = true; + } + } + } + + // ----- Look for extract by ereg rule + // ereg() is deprecated with PHP 5.3 + /* + else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { + + if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + $v_found = true; + } + } + */ + + // ----- Look for extract by preg rule + else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) + && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { + + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + $v_found = true; + } + } + + // ----- Look for extract by index rule + else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) + && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { + + // ----- Look if the index is in the list + for ($j=$j_start; ($j=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + $v_found = true; + } + if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + $j_start = $j+1; + } + + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { + break; + } + } + } + else { + $v_found = true; + } + + // ----- Look for deletion + if ($v_found) + { + unset($v_header_list[$v_nb_extracted]); + } + else + { + $v_nb_extracted++; + } + } + + // ----- Look if something need to be deleted + if ($v_nb_extracted > 0) { + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + + // ----- Creates a temporary zip archive + $v_temp_zip = new PclZip($v_zip_temp_name); + + // ----- Open the temporary zip file in write mode + if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) { + $this->privCloseFd(); + + // ----- Return + return $v_result; + } + + // ----- Look which file need to be kept + for ($i=0; $izip_fd); + if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the file header + $v_local_header = array(); + if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Check that local file header is same as central file header + if ($this->privCheckFileHeaders($v_local_header, + $v_header_list[$i]) != 1) { + // TBC + } + unset($v_local_header); + + // ----- Write the file header + if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Read/write the data block + if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($v_temp_zip->zip_fd); + + // ----- Re-Create the Central Dir files header + for ($i=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Transform the header to a 'usable' info + $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + + // ----- Zip file comment + $v_comment = ''; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset; + + // ----- Create the central dir footer + if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) { + // ----- Reset the file list + unset($v_header_list); + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Close + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Destroy the temporary archive + unset($v_temp_zip); + } + + // ----- Remove every files : reset the file + else if ($v_central_dir['entries'] != 0) { + $this->privCloseFd(); + + if (($v_result = $this->privOpenFd('wb')) != 1) { + return $v_result; + } + + if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) { + return $v_result; + } + + $this->privCloseFd(); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDirCheck() + // Description : + // Check if a directory exists, if not it creates it and all the parents directory + // which may be useful. + // Parameters : + // $p_dir : Directory path to check. + // Return Values : + // 1 : OK + // -1 : Unable to create directory + // -------------------------------------------------------------------------------- + function privDirCheck($p_dir, $p_is_dir=false) + { + $v_result = 1; + + + // ----- Remove the final '/' + if (($p_is_dir) && (substr($p_dir, -1)=='/')) + { + $p_dir = substr($p_dir, 0, strlen($p_dir)-1); + } + + // ----- Check the directory availability + if ((is_dir($p_dir)) || ($p_dir == "")) + { + return 1; + } + + // ----- Extract parent directory + $p_parent_dir = dirname($p_dir); + + // ----- Just a check + if ($p_parent_dir != $p_dir) + { + // ----- Look for parent directory + if ($p_parent_dir != "") + { + if (($v_result = $this->privDirCheck($p_parent_dir)) != 1) + { + return $v_result; + } + } + } + + // ----- Create the directory + if (!@mkdir($p_dir, 0777)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privMerge() + // Description : + // If $p_archive_to_add does not exist, the function exit with a success result. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privMerge(&$p_archive_to_add) + { + $v_result=1; + + // ----- Look if the archive_to_add exists + if (!is_file($p_archive_to_add->zipname)) + { + + // ----- Nothing to merge, so merge is a success + $v_result = 1; + + // ----- Return + return $v_result; + } + + // ----- Look if the archive exists + if (!is_file($this->zipname)) + { + + // ----- Do a duplicate + $v_result = $this->privDuplicate($p_archive_to_add->zipname); + + // ----- Return + return $v_result; + } + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('rb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privCloseFd(); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Open the archive_to_add file + if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1) + { + $this->privCloseFd(); + + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir_to_add = array(); + if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1) + { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + return $v_result; + } + + // ----- Go to beginning of File + @rewind($p_archive_to_add->zip_fd); + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) + { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = $v_central_dir['offset']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Copy the files from the archive_to_add into the temporary file + $v_size = $v_central_dir_to_add['offset']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($v_zip_temp_fd); + + // ----- Copy the block of file headers from the old archive + $v_size = $v_central_dir['size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Copy the block of file headers from the archive_to_add + $v_size = $v_central_dir_to_add['size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Merge the file comments + $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment']; + + // ----- Calculate the size of the (new) central header + $v_size = @ftell($v_zip_temp_fd)-$v_offset; + + // ----- Swap the file descriptor + // Here is a trick : I swap the temporary fd with the zip fd, in order to use + // the following methods on the temporary fil and not the real archive fd + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1) + { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + @fclose($v_zip_temp_fd); + $this->zip_fd = null; + + // ----- Reset the file list + unset($v_header_list); + + // ----- Return + return $v_result; + } + + // ----- Swap back the file descriptor + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Close + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDuplicate() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDuplicate($p_archive_filename) + { + $v_result=1; + + // ----- Look if the $p_archive_filename exists + if (!is_file($p_archive_filename)) + { + + // ----- Nothing to duplicate, so duplicate is a success. + $v_result = 1; + + // ----- Return + return $v_result; + } + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('wb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0) + { + $this->privCloseFd(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = filesize($p_archive_filename); + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($v_zip_temp_fd, $v_read_size); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close + $this->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privErrorLog() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privErrorLog($p_error_code=0, $p_error_string='') + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclError($p_error_code, $p_error_string); + } + else { + $this->error_code = $p_error_code; + $this->error_string = $p_error_string; + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privErrorReset() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privErrorReset() + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclErrorReset(); + } + else { + $this->error_code = 0; + $this->error_string = ''; + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDisableMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDisableMagicQuotes() + { + $v_result=1; + + // ----- Look if function exists + if ( (!function_exists("get_magic_quotes_runtime")) + || (!function_exists("set_magic_quotes_runtime"))) { + return $v_result; + } + + // ----- Look if already done + if ($this->magic_quotes_status != -1) { + return $v_result; + } + + // ----- Get and memorize the magic_quote value + $this->magic_quotes_status = @get_magic_quotes_runtime(); + + // ----- Disable magic_quotes + if ($this->magic_quotes_status == 1) { + @set_magic_quotes_runtime(0); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privSwapBackMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privSwapBackMagicQuotes() + { + $v_result=1; + + // ----- Look if function exists + if ( (!function_exists("get_magic_quotes_runtime")) + || (!function_exists("set_magic_quotes_runtime"))) { + return $v_result; + } + + // ----- Look if something to do + if ($this->magic_quotes_status != -1) { + return $v_result; + } + + // ----- Swap back magic_quotes + if ($this->magic_quotes_status == 1) { + @set_magic_quotes_runtime($this->magic_quotes_status); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + } + // End of class + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilPathReduction() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function PclZipUtilPathReduction($p_dir) + { + $v_result = ""; + + // ----- Look for not empty path + if ($p_dir != "") { + // ----- Explode path by directory names + $v_list = explode("/", $p_dir); + + // ----- Study directories from last to first + $v_skip = 0; + for ($i=sizeof($v_list)-1; $i>=0; $i--) { + // ----- Look for current path + if ($v_list[$i] == ".") { + // ----- Ignore this directory + // Should be the first $i=0, but no check is done + } + else if ($v_list[$i] == "..") { + $v_skip++; + } + else if ($v_list[$i] == "") { + // ----- First '/' i.e. root slash + if ($i == 0) { + $v_result = "/".$v_result; + if ($v_skip > 0) { + // ----- It is an invalid path, so the path is not modified + // TBC + $v_result = $p_dir; + $v_skip = 0; + } + } + // ----- Last '/' i.e. indicates a directory + else if ($i == (sizeof($v_list)-1)) { + $v_result = $v_list[$i]; + } + // ----- Double '/' inside the path + else { + // ----- Ignore only the double '//' in path, + // but not the first and last '/' + } + } + else { + // ----- Look for item to skip + if ($v_skip > 0) { + $v_skip--; + } + else { + $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:""); + } + } + } + + // ----- Look for skip + if ($v_skip > 0) { + while ($v_skip > 0) { + $v_result = '../'.$v_result; + $v_skip--; + } + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilPathInclusion() + // Description : + // This function indicates if the path $p_path is under the $p_dir tree. Or, + // said in an other way, if the file or sub-dir $p_path is inside the dir + // $p_dir. + // The function indicates also if the path is exactly the same as the dir. + // This function supports path with duplicated '/' like '//', but does not + // support '.' or '..' statements. + // Parameters : + // Return Values : + // 0 if $p_path is not inside directory $p_dir + // 1 if $p_path is inside directory $p_dir + // 2 if $p_path is exactly the same as $p_dir + // -------------------------------------------------------------------------------- + function PclZipUtilPathInclusion($p_dir, $p_path) + { + $v_result = 1; + + // ----- Look for path beginning by ./ + if ( ($p_dir == '.') + || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) { + $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1); + } + if ( ($p_path == '.') + || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) { + $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1); + } + + // ----- Explode dir and path by directory separator + $v_list_dir = explode("/", $p_dir); + $v_list_dir_size = sizeof($v_list_dir); + $v_list_path = explode("/", $p_path); + $v_list_path_size = sizeof($v_list_path); + + // ----- Study directories paths + $i = 0; + $j = 0; + while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) { + + // ----- Look for empty dir (path reduction) + if ($v_list_dir[$i] == '') { + $i++; + continue; + } + if ($v_list_path[$j] == '') { + $j++; + continue; + } + + // ----- Compare the items + if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) { + $v_result = 0; + } + + // ----- Next items + $i++; + $j++; + } + + // ----- Look if everything seems to be the same + if ($v_result) { + // ----- Skip all the empty items + while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++; + while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++; + + if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) { + // ----- There are exactly the same + $v_result = 2; + } + else if ($i < $v_list_dir_size) { + // ----- The path is shorter than the dir + $v_result = 0; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilCopyBlock() + // Description : + // Parameters : + // $p_mode : read/write compression mode + // 0 : src & dest normal + // 1 : src gzip, dest normal + // 2 : src normal, dest gzip + // 3 : src & dest gzip + // Return Values : + // -------------------------------------------------------------------------------- + function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0) + { + $v_result = 1; + + if ($p_mode==0) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_src, $v_read_size); + @fwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + else if ($p_mode==1) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($p_src, $v_read_size); + @fwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + else if ($p_mode==2) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_src, $v_read_size); + @gzwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + else if ($p_mode==3) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($p_src, $v_read_size); + @gzwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilRename() + // Description : + // This function tries to do a simple rename() function. If it fails, it + // tries to copy the $p_src file in a new $p_dest file and then unlink the + // first one. + // Parameters : + // $p_src : Old filename + // $p_dest : New filename + // Return Values : + // 1 on success, 0 on failure. + // -------------------------------------------------------------------------------- + function PclZipUtilRename($p_src, $p_dest) + { + $v_result = 1; + + // ----- Try to rename the files + if (!@rename($p_src, $p_dest)) { + + // ----- Try to copy & unlink the src + if (!@copy($p_src, $p_dest)) { + $v_result = 0; + } + else if (!@unlink($p_src)) { + $v_result = 0; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilOptionText() + // Description : + // Translate option value in text. Mainly for debug purpose. + // Parameters : + // $p_option : the option value. + // Return Values : + // The option text value. + // -------------------------------------------------------------------------------- + function PclZipUtilOptionText($p_option) + { + + $v_list = get_defined_constants(); + for (reset($v_list); $v_key = key($v_list); next($v_list)) { + $v_prefix = substr($v_key, 0, 10); + if (( ($v_prefix == 'PCLZIP_OPT') + || ($v_prefix == 'PCLZIP_CB_') + || ($v_prefix == 'PCLZIP_ATT')) + && ($v_list[$v_key] == $p_option)) { + return $v_key; + } + } + + $v_result = 'Unknown'; + + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilTranslateWinPath() + // Description : + // Translate windows path by replacing '\' by '/' and optionally removing + // drive letter. + // Parameters : + // $p_path : path to translate. + // $p_remove_disk_letter : true | false + // Return Values : + // The path translated. + // -------------------------------------------------------------------------------- + function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true) + { + if (stristr(php_uname(), 'windows')) { + // ----- Look for potential disk letter + if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { + $p_path = substr($p_path, $v_position+1); + } + // ----- Change potential windows directory separator + if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) { + $p_path = strtr($p_path, '\\', '/'); + } + } + return $p_path; + } + // -------------------------------------------------------------------------------- + + +?> diff --git a/src/wp-admin/includes/class-wp-comments-list-table.php b/src/wp-admin/includes/class-wp-comments-list-table.php new file mode 100644 index 0000000..3fa1d7c --- /dev/null +++ b/src/wp-admin/includes/class-wp-comments-list-table.php @@ -0,0 +1,616 @@ + 'comments', + 'singular' => 'comment', + 'ajax' => true, + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + function ajax_user_can() { + return current_user_can('edit_posts'); + } + + function prepare_items() { + global $post_id, $comment_status, $search, $comment_type; + + $comment_status = isset( $_REQUEST['comment_status'] ) ? $_REQUEST['comment_status'] : 'all'; + if ( !in_array( $comment_status, array( 'all', 'moderated', 'approved', 'spam', 'trash' ) ) ) + $comment_status = 'all'; + + $comment_type = !empty( $_REQUEST['comment_type'] ) ? $_REQUEST['comment_type'] : ''; + + $search = ( isset( $_REQUEST['s'] ) ) ? $_REQUEST['s'] : ''; + + $post_type = ( isset( $_REQUEST['post_type'] ) ) ? sanitize_key( $_REQUEST['post_type'] ) : ''; + + $user_id = ( isset( $_REQUEST['user_id'] ) ) ? $_REQUEST['user_id'] : ''; + + $orderby = ( isset( $_REQUEST['orderby'] ) ) ? $_REQUEST['orderby'] : ''; + $order = ( isset( $_REQUEST['order'] ) ) ? $_REQUEST['order'] : ''; + + $comments_per_page = $this->get_per_page( $comment_status ); + + $doing_ajax = defined( 'DOING_AJAX' ) && DOING_AJAX; + + if ( isset( $_REQUEST['number'] ) ) { + $number = (int) $_REQUEST['number']; + } + else { + $number = $comments_per_page + min( 8, $comments_per_page ); // Grab a few extra + } + + $page = $this->get_pagenum(); + + if ( isset( $_REQUEST['start'] ) ) { + $start = $_REQUEST['start']; + } else { + $start = ( $page - 1 ) * $comments_per_page; + } + + if ( $doing_ajax && isset( $_REQUEST['offset'] ) ) { + $start += $_REQUEST['offset']; + } + + $status_map = array( + 'moderated' => 'hold', + 'approved' => 'approve', + 'all' => '', + ); + + $args = array( + 'status' => isset( $status_map[$comment_status] ) ? $status_map[$comment_status] : $comment_status, + 'search' => $search, + 'user_id' => $user_id, + 'offset' => $start, + 'number' => $number, + 'post_id' => $post_id, + 'type' => $comment_type, + 'orderby' => $orderby, + 'order' => $order, + 'post_type' => $post_type, + ); + + $_comments = get_comments( $args ); + + update_comment_cache( $_comments ); + + $this->items = array_slice( $_comments, 0, $comments_per_page ); + $this->extra_items = array_slice( $_comments, $comments_per_page ); + + $total_comments = get_comments( array_merge( $args, array('count' => true, 'offset' => 0, 'number' => 0) ) ); + + $_comment_post_ids = array(); + foreach ( $_comments as $_c ) { + $_comment_post_ids[] = $_c->comment_post_ID; + } + + $_comment_post_ids = array_unique( $_comment_post_ids ); + + $this->pending_count = get_pending_comments_num( $_comment_post_ids ); + + $this->set_pagination_args( array( + 'total_items' => $total_comments, + 'per_page' => $comments_per_page, + ) ); + } + + function get_per_page( $comment_status = 'all' ) { + $comments_per_page = $this->get_items_per_page( 'edit_comments_per_page' ); + /** + * Filter the number of comments listed per page in the comments list table. + * + * @since 2.6.0 + * + * @param int $comments_per_page The number of comments to list per page. + * @param string $comment_status The comment status name. Default 'All'. + */ + $comments_per_page = apply_filters( 'comments_per_page', $comments_per_page, $comment_status ); + return $comments_per_page; + } + + function no_items() { + global $comment_status; + + if ( 'moderated' == $comment_status ) + _e( 'No comments awaiting moderation.' ); + else + _e( 'No comments found.' ); + } + + function get_views() { + global $post_id, $comment_status, $comment_type; + + $status_links = array(); + $num_comments = ( $post_id ) ? wp_count_comments( $post_id ) : wp_count_comments(); + //, number_format_i18n($num_comments->moderated) ), "" . number_format_i18n($num_comments->moderated) . ""), + //, number_format_i18n($num_comments->spam) ), "" . number_format_i18n($num_comments->spam) . "") + $stati = array( + 'all' => _nx_noop('All', 'All', 'comments'), // singular not used + 'moderated' => _n_noop('Pending (%s)', 'Pending (%s)'), + 'approved' => _n_noop('Approved', 'Approved'), // singular not used + 'spam' => _n_noop('Spam (%s)', 'Spam (%s)'), + 'trash' => _n_noop('Trash (%s)', 'Trash (%s)') + ); + + if ( !EMPTY_TRASH_DAYS ) + unset($stati['trash']); + + $link = 'edit-comments.php'; + if ( !empty($comment_type) && 'all' != $comment_type ) + $link = add_query_arg( 'comment_type', $comment_type, $link ); + + foreach ( $stati as $status => $label ) { + $class = ( $status == $comment_status ) ? ' class="current"' : ''; + + if ( !isset( $num_comments->$status ) ) + $num_comments->$status = 10; + $link = add_query_arg( 'comment_status', $status, $link ); + if ( $post_id ) + $link = add_query_arg( 'p', absint( $post_id ), $link ); + /* + // I toyed with this, but decided against it. Leaving it in here in case anyone thinks it is a good idea. ~ Mark + if ( !empty( $_REQUEST['s'] ) ) + $link = add_query_arg( 's', esc_attr( wp_unslash( $_REQUEST['s'] ) ), $link ); + */ + $status_links[$status] = "" . sprintf( + translate_nooped_plural( $label, $num_comments->$status ), + number_format_i18n( $num_comments->$status ) + ) . ''; + } + + /** + * Filter the comment status links. + * + * @since 2.5.0 + * + * @param array $status_links An array of fully-formed status links. Default 'All'. + * Accepts 'All', 'Pending', 'Approved', 'Spam', and 'Trash'. + */ + $status_links = apply_filters( 'comment_status_links', $status_links ); + return $status_links; + } + + function get_bulk_actions() { + global $comment_status; + + $actions = array(); + if ( in_array( $comment_status, array( 'all', 'approved' ) ) ) + $actions['unapprove'] = __( 'Unapprove' ); + if ( in_array( $comment_status, array( 'all', 'moderated' ) ) ) + $actions['approve'] = __( 'Approve' ); + if ( in_array( $comment_status, array( 'all', 'moderated', 'approved' ) ) ) + $actions['spam'] = _x( 'Mark as Spam', 'comment' ); + + if ( 'trash' == $comment_status ) + $actions['untrash'] = __( 'Restore' ); + elseif ( 'spam' == $comment_status ) + $actions['unspam'] = _x( 'Not Spam', 'comment' ); + + if ( in_array( $comment_status, array( 'trash', 'spam' ) ) || !EMPTY_TRASH_DAYS ) + $actions['delete'] = __( 'Delete Permanently' ); + else + $actions['trash'] = __( 'Move to Trash' ); + + return $actions; + } + + function extra_tablenav( $which ) { + global $comment_status, $comment_type; +?> +
    + + + 'post-query-submit' ) ); + } + + if ( ( 'spam' == $comment_status || 'trash' == $comment_status ) && current_user_can( 'moderate_comments' ) ) { + wp_nonce_field( 'bulk-destroy', '_destroy_nonce' ); + $title = ( 'spam' == $comment_status ) ? esc_attr__( 'Empty Spam' ) : esc_attr__( 'Empty Trash' ); + submit_button( $title, 'apply', 'delete_all', false ); + } + /** + * Fires after the Filter submit button for comment types. + * + * @since 2.5.0 + * + * @param string $comment_status The comment status name. Default 'All'. + */ + do_action( 'manage_comments_nav', $comment_status ); + echo '
    '; + } + + function current_action() { + if ( isset( $_REQUEST['delete_all'] ) || isset( $_REQUEST['delete_all2'] ) ) + return 'delete_all'; + + return parent::current_action(); + } + + function get_columns() { + global $post_id; + + $columns = array(); + + if ( $this->checkbox ) + $columns['cb'] = ''; + + $columns['author'] = __( 'Author' ); + $columns['comment'] = _x( 'Comment', 'column name' ); + + if ( !$post_id ) + $columns['response'] = _x( 'In Response To', 'column name' ); + + return $columns; + } + + function get_sortable_columns() { + return array( + 'author' => 'comment_author', + 'response' => 'comment_post_ID' + ); + } + + function display() { + extract( $this->_args ); + + wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); + + $this->display_tablenav( 'top' ); + +?> + + + + print_column_headers(); ?> + + + + + + print_column_headers( false ); ?> + + + + + display_rows_or_placeholder(); ?> + + + + items = $this->extra_items; $this->display_rows(); ?> + +
    +display_tablenav( 'bottom' ); + } + + function single_row( $a_comment ) { + global $post, $comment; + + $comment = $a_comment; + $the_comment_class = wp_get_comment_status( $comment->comment_ID ); + $the_comment_class = join( ' ', get_comment_class( $the_comment_class, $comment->comment_ID, $comment->comment_post_ID ) ); + + $post = get_post( $comment->comment_post_ID ); + + $this->user_can = current_user_can( 'edit_comment', $comment->comment_ID ); + + echo ""; + $this->single_row_columns( $comment ); + echo "\n"; + } + + function column_cb( $comment ) { + if ( $this->user_can ) { ?> + + + user_can; + + $comment_url = esc_url( get_comment_link( $comment->comment_ID ) ); + $the_comment_status = wp_get_comment_status( $comment->comment_ID ); + + if ( $user_can ) { + $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) ); + $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "approve-comment_$comment->comment_ID" ) ); + + $url = "comment.php?c=$comment->comment_ID"; + + $approve_url = esc_url( $url . "&action=approvecomment&$approve_nonce" ); + $unapprove_url = esc_url( $url . "&action=unapprovecomment&$approve_nonce" ); + $spam_url = esc_url( $url . "&action=spamcomment&$del_nonce" ); + $unspam_url = esc_url( $url . "&action=unspamcomment&$del_nonce" ); + $trash_url = esc_url( $url . "&action=trashcomment&$del_nonce" ); + $untrash_url = esc_url( $url . "&action=untrashcomment&$del_nonce" ); + $delete_url = esc_url( $url . "&action=deletecomment&$del_nonce" ); + } + + echo '
    '; + $this->column_author( $comment ); + echo '
    '; + + echo ''; + comment_text(); + if ( $user_can ) { ?> + + '', 'unapprove' => '', + 'reply' => '', + 'quickedit' => '', + 'edit' => '', + 'spam' => '', 'unspam' => '', + 'trash' => '', 'untrash' => '', 'delete' => '' + ); + + if ( $comment_status && 'all' != $comment_status ) { // not looking at all comments + if ( 'approved' == $the_comment_status ) + $actions['unapprove'] = "" . __( 'Unapprove' ) . ''; + else if ( 'unapproved' == $the_comment_status ) + $actions['approve'] = "" . __( 'Approve' ) . ''; + } else { + $actions['approve'] = "" . __( 'Approve' ) . ''; + $actions['unapprove'] = "" . __( 'Unapprove' ) . ''; + } + + if ( 'spam' != $the_comment_status && 'trash' != $the_comment_status ) { + $actions['spam'] = "" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . ''; + } elseif ( 'spam' == $the_comment_status ) { + $actions['unspam'] = "" . _x( 'Not Spam', 'comment' ) . ''; + } elseif ( 'trash' == $the_comment_status ) { + $actions['untrash'] = "" . __( 'Restore' ) . ''; + } + + if ( 'spam' == $the_comment_status || 'trash' == $the_comment_status || !EMPTY_TRASH_DAYS ) { + $actions['delete'] = "" . __( 'Delete Permanently' ) . ''; + } else { + $actions['trash'] = "" . _x( 'Trash', 'verb' ) . ''; + } + + if ( 'spam' != $the_comment_status && 'trash' != $the_comment_status ) { + $actions['edit'] = "". __( 'Edit' ) . ''; + $actions['quickedit'] = '' . __( 'Quick Edit' ) . ''; + $actions['reply'] = '' . __( 'Reply' ) . ''; + } + + /** This filter is documented in wp-admin/includes/dashboard.php */ + $actions = apply_filters( 'comment_row_actions', array_filter( $actions ), $comment ); + + $i = 0; + echo '
    '; + foreach ( $actions as $action => $link ) { + ++$i; + ( ( ( 'approve' == $action || 'unapprove' == $action ) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | '; + + // Reply and quickedit need a hide-if-no-js span when not added with ajax + if ( ( 'reply' == $action || 'quickedit' == $action ) && ! defined('DOING_AJAX') ) + $action .= ' hide-if-no-js'; + elseif ( ( $action == 'untrash' && $the_comment_status == 'trash' ) || ( $action == 'unspam' && $the_comment_status == 'spam' ) ) { + if ( '1' == get_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', true ) ) + $action .= ' approve'; + else + $action .= ' unapprove'; + } + + echo "$sep$link"; + } + echo '
    '; + } + } + + function column_author( $comment ) { + global $comment_status; + + $author_url = get_comment_author_url(); + if ( 'http://' == $author_url ) + $author_url = ''; + $author_url_display = preg_replace( '|http://(www\.)?|i', '', $author_url ); + if ( strlen( $author_url_display ) > 50 ) + $author_url_display = substr( $author_url_display, 0, 49 ) . '…'; + + echo ""; comment_author(); echo '
    '; + if ( !empty( $author_url ) ) + echo "$author_url_display
    "; + + if ( $this->user_can ) { + if ( !empty( $comment->comment_author_email ) ) { + comment_author_email_link(); + echo '
    '; + } + echo ''; + comment_author_IP(); + echo ''; + } + } + + function column_date( $comment ) { + return get_comment_date( __( 'Y/m/d \a\t g:ia' ) ); + } + + function column_response( $comment ) { + $post = get_post(); + + if ( isset( $this->pending_count[$post->ID] ) ) { + $pending_comments = $this->pending_count[$post->ID]; + } else { + $_pending_count_temp = get_pending_comments_num( array( $post->ID ) ); + $pending_comments = $this->pending_count[$post->ID] = $_pending_count_temp[$post->ID]; + } + + if ( current_user_can( 'edit_post', $post->ID ) ) { + $post_link = ""; + $post_link .= get_the_title( $post->ID ) . ''; + } else { + $post_link = get_the_title( $post->ID ); + } + + echo ''; + if ( 'attachment' == $post->post_type && ( $thumb = wp_get_attachment_image( $post->ID, array( 80, 60 ), true ) ) ) + echo $thumb; + } + + function column_default( $comment, $column_name ) { + /** + * Fires when the default column output is displayed for a single row. + * + * @since 2.8.0 + * + * @param string $column_name The custom column's name. + * @param int $comment->comment_ID The custom column's unique ID number. + */ + do_action( 'manage_comments_custom_column', $column_name, $comment->comment_ID ); + } +} + +/** + * Post Comments List Table class. + * + * @package WordPress + * @subpackage List_Table + * @since 3.1.0 + * @access private + * + * @see WP_Comments_Table + */ +class WP_Post_Comments_List_Table extends WP_Comments_List_Table { + + function get_column_info() { + $this->_column_headers = array( + array( + 'author' => __( 'Author' ), + 'comment' => _x( 'Comment', 'column name' ), + ), + array(), + array(), + ); + + return $this->_column_headers; + } + + function get_table_classes() { + $classes = parent::get_table_classes(); + $classes[] = 'comments-box'; + return $classes; + } + + function display( $output_empty = false ) { + extract( $this->_args ); + + wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); +?> + + > + display_rows_or_placeholder(); ?> + + +find_folder(ABSPATH); + // Perhaps the FTP folder is rooted at the WordPress install, Check for wp-includes folder in root, Could have some false positives, but rare. + if ( ! $folder && $this->is_dir('/wp-includes') ) + $folder = '/'; + return $folder; + } + + /** + * Return the path on the remote filesystem of WP_CONTENT_DIR. + * + * @access public + * @since 2.7.0 + * + * @return string The location of the remote path. + */ + function wp_content_dir() { + return $this->find_folder(WP_CONTENT_DIR); + } + + /** + * Return the path on the remote filesystem of WP_PLUGIN_DIR. + * + * @access public + * @since 2.7.0 + * + * @return string The location of the remote path. + */ + function wp_plugins_dir() { + return $this->find_folder(WP_PLUGIN_DIR); + } + + /** + * Return the path on the remote filesystem of the Themes Directory. + * + * @access public + * @since 2.7.0 + * + * @param string $theme The Theme stylesheet or template for the directory. + * @return string The location of the remote path. + */ + function wp_themes_dir( $theme = false ) { + $theme_root = get_theme_root( $theme ); + + // Account for relative theme roots + if ( '/themes' == $theme_root || ! is_dir( $theme_root ) ) + $theme_root = WP_CONTENT_DIR . $theme_root; + + return $this->find_folder( $theme_root ); + } + + /** + * Return the path on the remote filesystem of WP_LANG_DIR. + * + * @access public + * @since 3.2.0 + * + * @return string The location of the remote path. + */ + function wp_lang_dir() { + return $this->find_folder(WP_LANG_DIR); + } + + /** + * Locate a folder on the remote filesystem. + * + * @access public + * @since 2.5.0 + * @deprecated 2.7.0 use WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir() instead. + * @see WP_Filesystem::abspath() + * @see WP_Filesystem::wp_content_dir() + * @see WP_Filesystem::wp_plugins_dir() + * @see WP_Filesystem::wp_themes_dir() + * @see WP_Filesystem::wp_lang_dir() + * + * @param string $base The folder to start searching from. + * @param bool $echo True to display debug information. + * Default false. + * @return string The location of the remote path. + */ + function find_base_dir( $base = '.', $echo = false ) { + _deprecated_function(__FUNCTION__, '2.7', 'WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir()' ); + $this->verbose = $echo; + return $this->abspath(); + } + + /** + * Locate a folder on the remote filesystem. + * + * @access public + * @since 2.5.0 + * @deprecated 2.7.0 use WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir() methods instead. + * @see WP_Filesystem::abspath() + * @see WP_Filesystem::wp_content_dir() + * @see WP_Filesystem::wp_plugins_dir() + * @see WP_Filesystem::wp_themes_dir() + * @see WP_Filesystem::wp_lang_dir() + * + * @param string $base The folder to start searching from. + * @param bool $echo True to display debug information. + * @return string The location of the remote path. + */ + function get_base_dir( $base = '.', $echo = false ) { + _deprecated_function(__FUNCTION__, '2.7', 'WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir()' ); + $this->verbose = $echo; + return $this->abspath(); + } + + /** + * Locate a folder on the remote filesystem. + * + * Assumes that on Windows systems, Stripping off the Drive + * letter is OK Sanitizes \\ to / in windows filepaths. + * + * @access public + * @since 2.7.0 + * + * @param string $folder the folder to locate. + * @return string The location of the remote path. + */ + function find_folder( $folder ) { + + if ( isset( $this->cache[ $folder ] ) ) + return $this->cache[ $folder ]; + + if ( stripos($this->method, 'ftp') !== false ) { + $constant_overrides = array( + 'FTP_BASE' => ABSPATH, + 'FTP_CONTENT_DIR' => WP_CONTENT_DIR, + 'FTP_PLUGIN_DIR' => WP_PLUGIN_DIR, + 'FTP_LANG_DIR' => WP_LANG_DIR + ); + + // Direct matches ( folder = CONSTANT/ ) + foreach ( $constant_overrides as $constant => $dir ) { + if ( ! defined( $constant ) ) + continue; + if ( $folder === $dir ) + return trailingslashit( constant( $constant ) ); + } + + // Prefix Matches ( folder = CONSTANT/subdir ) + foreach ( $constant_overrides as $constant => $dir ) { + if ( ! defined( $constant ) ) + continue; + if ( 0 === stripos( $folder, $dir ) ) { // $folder starts with $dir + $potential_folder = preg_replace( '#^' . preg_quote( $dir, '#' ) . '/#i', trailingslashit( constant( $constant ) ), $folder ); + $potential_folder = trailingslashit( $potential_folder ); + + if ( $this->is_dir( $potential_folder ) ) { + $this->cache[ $folder ] = $potential_folder; + return $potential_folder; + } + } + } + } elseif ( 'direct' == $this->method ) { + $folder = str_replace('\\', '/', $folder); // Windows path sanitisation + return trailingslashit($folder); + } + + $folder = preg_replace('|^([a-z]{1}):|i', '', $folder); // Strip out windows drive letter if it's there. + $folder = str_replace('\\', '/', $folder); // Windows path sanitisation + + if ( isset($this->cache[ $folder ] ) ) + return $this->cache[ $folder ]; + + if ( $this->exists($folder) ) { // Folder exists at that absolute path. + $folder = trailingslashit($folder); + $this->cache[ $folder ] = $folder; + return $folder; + } + if ( $return = $this->search_for_folder($folder) ) + $this->cache[ $folder ] = $return; + return $return; + } + + /** + * Locate a folder on the remote filesystem. + * + * Expects Windows sanitized path. + * + * @access private + * @since 2.7.0 + * + * @param string $folder The folder to locate. + * @param string $base The folder to start searching from. + * @param bool $loop If the function has recursed, Internal use only. + * @return string The location of the remote path. + */ + function search_for_folder( $folder, $base = '.', $loop = false ) { + if ( empty( $base ) || '.' == $base ) + $base = trailingslashit($this->cwd()); + + $folder = untrailingslashit($folder); + + if ( $this->verbose ) + printf( "\n" . __('Looking for %1$s in %2$s') . "
    \n", $folder, $base ); + + $folder_parts = explode('/', $folder); + $folder_part_keys = array_keys( $folder_parts ); + $last_index = array_pop( $folder_part_keys ); + $last_path = $folder_parts[ $last_index ]; + + $files = $this->dirlist( $base ); + + foreach ( $folder_parts as $index => $key ) { + if ( $index == $last_index ) + continue; // We want this to be caught by the next code block. + + // Working from /home/ to /user/ to /wordpress/ see if that file exists within the current folder, + // If it's found, change into it and follow through looking for it. + // If it cant find WordPress down that route, it'll continue onto the next folder level, and see if that matches, and so on. + // If it reaches the end, and still cant find it, it'll return false for the entire function. + if ( isset($files[ $key ]) ){ + // Lets try that folder: + $newdir = trailingslashit(path_join($base, $key)); + if ( $this->verbose ) + printf( "\n" . __('Changing to %s') . "
    \n", $newdir ); + // only search for the remaining path tokens in the directory, not the full path again + $newfolder = implode( '/', array_slice( $folder_parts, $index + 1 ) ); + if ( $ret = $this->search_for_folder( $newfolder, $newdir, $loop) ) + return $ret; + } + } + + // Only check this as a last resort, to prevent locating the incorrect install. All above procedures will fail quickly if this is the right branch to take. + if (isset( $files[ $last_path ] ) ) { + if ( $this->verbose ) + printf( "\n" . __('Found %s') . "
    \n", $base . $last_path ); + return trailingslashit($base . $last_path); + } + + // Prevent this function from looping again. + // No need to proceed if we've just searched in / + if ( $loop || '/' == $base ) + return false; + + // As an extra last resort, Change back to / if the folder wasn't found. + // This comes into effect when the CWD is /home/user/ but WP is at /var/www/.... + return $this->search_for_folder( $folder, '/', true ); + + } + + /** + * Return the *nix-style file permissions for a file. + * + * From the PHP documentation page for fileperms(). + * + * @link http://docs.php.net/fileperms + * + * @access public + * @since 2.5.0 + * + * @param string $file String filename. + * @return string The *nix-style representation of permissions. + */ + function gethchmod( $file ){ + $perms = $this->getchmod($file); + if (($perms & 0xC000) == 0xC000) // Socket + $info = 's'; + elseif (($perms & 0xA000) == 0xA000) // Symbolic Link + $info = 'l'; + elseif (($perms & 0x8000) == 0x8000) // Regular + $info = '-'; + elseif (($perms & 0x6000) == 0x6000) // Block special + $info = 'b'; + elseif (($perms & 0x4000) == 0x4000) // Directory + $info = 'd'; + elseif (($perms & 0x2000) == 0x2000) // Character special + $info = 'c'; + elseif (($perms & 0x1000) == 0x1000) // FIFO pipe + $info = 'p'; + else // Unknown + $info = 'u'; + + // Owner + $info .= (($perms & 0x0100) ? 'r' : '-'); + $info .= (($perms & 0x0080) ? 'w' : '-'); + $info .= (($perms & 0x0040) ? + (($perms & 0x0800) ? 's' : 'x' ) : + (($perms & 0x0800) ? 'S' : '-')); + + // Group + $info .= (($perms & 0x0020) ? 'r' : '-'); + $info .= (($perms & 0x0010) ? 'w' : '-'); + $info .= (($perms & 0x0008) ? + (($perms & 0x0400) ? 's' : 'x' ) : + (($perms & 0x0400) ? 'S' : '-')); + + // World + $info .= (($perms & 0x0004) ? 'r' : '-'); + $info .= (($perms & 0x0002) ? 'w' : '-'); + $info .= (($perms & 0x0001) ? + (($perms & 0x0200) ? 't' : 'x' ) : + (($perms & 0x0200) ? 'T' : '-')); + return $info; + } + + /** + * Convert *nix-style file permissions to a octal number. + * + * Converts '-rw-r--r--' to 0644 + * From "info at rvgate dot nl"'s comment on the PHP documentation for chmod() + * + * @link http://docs.php.net/manual/en/function.chmod.php#49614 + * + * @access public + * @since 2.5.0 + * + * @param string $mode string The *nix-style file permission. + * @return int octal representation + */ + function getnumchmodfromh( $mode ) { + $realmode = ''; + $legal = array('', 'w', 'r', 'x', '-'); + $attarray = preg_split('//', $mode); + + for ($i=0; $i < count($attarray); $i++) + if ($key = array_search($attarray[$i], $legal)) + $realmode .= $legal[$key]; + + $mode = str_pad($realmode, 10, '-', STR_PAD_LEFT); + $trans = array('-'=>'0', 'r'=>'4', 'w'=>'2', 'x'=>'1'); + $mode = strtr($mode,$trans); + + $newmode = $mode[0]; + $newmode .= $mode[1] + $mode[2] + $mode[3]; + $newmode .= $mode[4] + $mode[5] + $mode[6]; + $newmode .= $mode[7] + $mode[8] + $mode[9]; + return $newmode; + } + + /** + * Determine if the string provided contains binary characters. + * + * @access private + * @since 2.7.0 + * + * @param string $text String to test against. + * @return bool true if string is binary, false otherwise. + */ + function is_binary( $text ) { + return (bool) preg_match( '|[^\x20-\x7E]|', $text ); // chr(32)..chr(127) + } + + /** + * Change the ownership of a file / folder. + * + * Default behavior is to do nothing, override this in your subclass, if desired. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @param mixed $owner A user name or number. + * @param bool $recursive Optional. If set True changes file owner recursivly. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chown( $file, $owner, $recursive = false ) { + return false; + } + + /** + * Connect filesystem. + * + * @since 2.5.0 + * + * @return bool True on success or false on failure (always true for WP_Filesystem_Direct). + */ + function connect() { + return true; + } + + /** + * Read entire file into a string. + * + * @since 2.5.0 + * + * @param string $file Name of the file to read. + * @return string|bool Returns the read data or false on failure. + */ + function get_contents( $file ) { + return false; + } + + /** + * Read entire file into an array. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return array|bool the file contents in an array or false on failure. + */ + function get_contents_array( $file ) { + return false; + } + + /** + * Write a string to a file. + * + * @since 2.5.0 + * + * @param string $file Remote path to the file where to write the data. + * @param string $contents The data to write. + * @param int $mode Optional. The file permissions as octal number, usually 0644. + * @return bool False on failure. + */ + function put_contents( $file, $contents, $mode = false ) { + return false; + } + + /** + * Get the current working directory. + * + * @since 2.5.0 + * + * @return string|bool The current working directory on success, or false on failure. + */ + function cwd() { + return false; + } + + /** + * Change current directory. + * + * @since 2.5.0 + * + * @param string $dir The new current directory. + * @return bool Returns true on success or false on failure. + */ + function chdir( $dir ) { + return false; + } + + /** + * Change the file group. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @param mixed $group A group name or number. + * @param bool $recursive Optional. If set True changes file group recursively. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chgrp( $file, $group, $recursive = false ) { + return false; + } + + /** + * Change filesystem permissions. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @param int $mode Optional. The permissions as octal number, usually 0644 for files, 0755 for dirs. + * @param bool $recursive Optional. If set True changes file group recursively. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chmod( $file, $mode = false, $recursive = false ) { + return false; + } + + /** + * Get the file owner. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string|bool Username of the user or false on error. + */ + function owner( $file ) { + return false; + } + + /** + * Get the file's group. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string|bool The group or false on error. + */ + function group( $file ) { + return false; + } + + /** + * Copy a file. + * + * @since 2.5.0 + * + * @param string $source Path to the source file. + * @param string $destination Path to the destination file. + * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. + * Default false. + * @param int $mode Optional. The permissions as octal number, usually 0644 for files, 0755 for dirs. + * Default false. + * @return bool True if file copied successfully, False otherwise. + */ + function copy( $source, $destination, $overwrite = false, $mode = false ) { + return false; + } + + /** + * Move a file. + * + * @since 2.5.0 + * + * @param string $source Path to the source file. + * @param string $destination Path to the destination file. + * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. + * Default false. + * @return bool True if file copied successfully, False otherwise. + */ + function move( $source, $destination, $overwrite = false ) { + return false; + } + + /** + * Delete a file or directory. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @param bool $recursive Optional. If set True changes file group recursively. Defaults to False. + * Default false. + * @param bool $type Type of resource. 'f' for file, 'd' for directory. + * Default false. + * @return bool True if the file or directory was deleted, false on failure. + */ + function delete( $file, $recursive = false, $type = false ) { + return false; + } + + /** + * Check if a file or directory exists. + * + * @since 2.5.0 + * + * @param string $file Path to file/directory. + * @return bool Whether $file exists or not. + */ + function exists( $file ) { + return false; + } + + /** + * Check if resource is a file. + * + * @since 2.5.0 + * + * @param string $file File path. + * @return bool Whether $file is a file. + */ + function is_file( $file ) { + return false; + } + + /** + * Check if resource is a directory. + * + * @since 2.5.0 + * + * @param string $path Directory path. + * @return bool Whether $path is a directory. + */ + function is_dir( $path ) { + return false; + } + + /** + * Check if a file is readable. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return bool Whether $file is readable. + */ + function is_readable( $file ) { + return false; + } + + /** + * Check if a file or directory is writable. + * + * @since 2.5.0 + * + * @param string $path Path to file/directory. + * @return bool Whether $file is writable. + */ + function is_writable( $file ) { + return false; + } + + /** + * Gets the file's last access time. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int Unix timestamp representing last access time. + */ + function atime( $file ) { + return false; + } + + /** + * Gets the file modification time. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int Unix timestamp representing modification time. + */ + function mtime( $file ) { + return false; + } + + /** + * Gets the file size (in bytes). + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int Size of the file in bytes. + */ + function size( $file ) { + return false; + } + + /** + * Set the access and modification times of a file. + * + * Note: If $file doesn't exist, it will be created. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @param int $time Optional. Modified time to set for file. + * Default 0. + * @param int $atime Optional. Access time to set for file. + * Default 0. + * @return bool Whether operation was successful or not. + */ + function touch( $file, $time = 0, $atime = 0 ) { + return false; + } + + /** + * Create a directory. + * + * @since 2.5.0 + * + * @param string $path Path for new directory. + * @param mixed $chmod Optional. The permissions as octal number, (or False to skip chmod) + * Default false. + * @param mixed $chown Optional. A user name or number (or False to skip chown) + * Default false. + * @param mixed $chgrp Optional. A group name or number (or False to skip chgrp). + * Default false. + * @return bool False if directory cannot be created, true otherwise. + */ + function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) { + return false; + } + + /** + * Delete a directory. + * + * @since 2.5.0 + * + * @param string $path Path to directory. + * @param bool $recursive Optional. Whether to recursively remove files/directories. + * Default false. + * @return bool Whether directory is deleted successfully or not. + */ + function rmdir( $path, $recursive = false ) { + return false; + } + + /** + * Get details for files in a directory or a specific file. + * + * @since 2.5.0 + * + * @param string $path Path to directory or file. + * @param bool $include_hidden Optional. Whether to include details of hidden ("." prefixed) files. + * Default true. + * @param bool $recursive Optional. Whether to recursively include file details in nested directories. + * Default false. + * @return array|bool { + * Array of files. False if unable to list directory contents. + * + * @type string 'name' Name of the file/directory. + * @type string 'perms' *nix representation of permissions. + * @type int 'permsn' Octal representation of permissions. + * @type string 'owner' Owner name or ID. + * @type int 'size' Size of file in bytes. + * @type int 'lastmodunix' Last modified unix timestamp. + * @type mixed 'lastmod' Last modified month (3 letter) and day (without leading 0). + * @type int 'time' Last modified time. + * @type string 'type' Type of resource. 'f' for file, 'd' for directory. + * @type mixed 'files' If a directory and $recursive is true, contains another array of files. + * } + */ + function dirlist( $path, $include_hidden = true, $recursive = false ) { + return false; + } + +} // WP_Filesystem_Base diff --git a/src/wp-admin/includes/class-wp-filesystem-direct.php b/src/wp-admin/includes/class-wp-filesystem-direct.php new file mode 100644 index 0000000..d07305b --- /dev/null +++ b/src/wp-admin/includes/class-wp-filesystem-direct.php @@ -0,0 +1,384 @@ +method = 'direct'; + $this->errors = new WP_Error(); + } + + /** + * Reads entire file into a string + * + * @param string $file Name of the file to read. + * @return string|bool The function returns the read data or false on failure. + */ + function get_contents($file) { + return @file_get_contents($file); + } + + /** + * Reads entire file into an array + * + * @param string $file Path to the file. + * @return array|bool the file contents in an array or false on failure. + */ + function get_contents_array($file) { + return @file($file); + } + + /** + * Write a string to a file + * + * @param string $file Remote path to the file where to write the data. + * @param string $contents The data to write. + * @param int $mode (optional) The file permissions as octal number, usually 0644. + * @return bool False upon failure. + */ + function put_contents( $file, $contents, $mode = false ) { + $fp = @fopen( $file, 'wb' ); + if ( ! $fp ) + return false; + + mbstring_binary_safe_encoding(); + + $data_length = strlen( $contents ); + + $bytes_written = fwrite( $fp, $contents ); + + reset_mbstring_encoding(); + + fclose( $fp ); + + if ( $data_length !== $bytes_written ) + return false; + + $this->chmod( $file, $mode ); + + return true; + } + + /** + * Gets the current working directory + * + * @return string|bool the current working directory on success, or false on failure. + */ + function cwd() { + return @getcwd(); + } + + /** + * Change directory + * + * @param string $dir The new current directory. + * @return bool Returns true on success or false on failure. + */ + function chdir($dir) { + return @chdir($dir); + } + + /** + * Changes file group + * + * @param string $file Path to the file. + * @param mixed $group A group name or number. + * @param bool $recursive (optional) If set True changes file group recursively. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chgrp($file, $group, $recursive = false) { + if ( ! $this->exists($file) ) + return false; + if ( ! $recursive ) + return @chgrp($file, $group); + if ( ! $this->is_dir($file) ) + return @chgrp($file, $group); + // Is a directory, and we want recursive + $file = trailingslashit($file); + $filelist = $this->dirlist($file); + foreach ($filelist as $filename) + $this->chgrp($file . $filename, $group, $recursive); + + return true; + } + + /** + * Changes filesystem permissions + * + * @param string $file Path to the file. + * @param int $mode (optional) The permissions as octal number, usually 0644 for files, 0755 for dirs. + * @param bool $recursive (optional) If set True changes file group recursively. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chmod($file, $mode = false, $recursive = false) { + if ( ! $mode ) { + if ( $this->is_file($file) ) + $mode = FS_CHMOD_FILE; + elseif ( $this->is_dir($file) ) + $mode = FS_CHMOD_DIR; + else + return false; + } + + if ( ! $recursive || ! $this->is_dir($file) ) + return @chmod($file, $mode); + // Is a directory, and we want recursive + $file = trailingslashit($file); + $filelist = $this->dirlist($file); + foreach ( (array)$filelist as $filename => $filemeta) + $this->chmod($file . $filename, $mode, $recursive); + + return true; + } + + /** + * Changes file owner + * + * @param string $file Path to the file. + * @param mixed $owner A user name or number. + * @param bool $recursive (optional) If set True changes file owner recursively. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chown($file, $owner, $recursive = false) { + if ( ! $this->exists($file) ) + return false; + if ( ! $recursive ) + return @chown($file, $owner); + if ( ! $this->is_dir($file) ) + return @chown($file, $owner); + // Is a directory, and we want recursive + $filelist = $this->dirlist($file); + foreach ($filelist as $filename) { + $this->chown($file . '/' . $filename, $owner, $recursive); + } + return true; + } + + /** + * Gets file owner + * + * @param string $file Path to the file. + * @return string|bool Username of the user or false on error. + */ + function owner($file) { + $owneruid = @fileowner($file); + if ( ! $owneruid ) + return false; + if ( ! function_exists('posix_getpwuid') ) + return $owneruid; + $ownerarray = posix_getpwuid($owneruid); + return $ownerarray['name']; + } + + /** + * Gets file permissions + * + * FIXME does not handle errors in fileperms() + * + * @param string $file Path to the file. + * @return string Mode of the file (last 4 digits). + */ + function getchmod($file) { + return substr(decoct(@fileperms($file)),3); + } + + function group($file) { + $gid = @filegroup($file); + if ( ! $gid ) + return false; + if ( ! function_exists('posix_getgrgid') ) + return $gid; + $grouparray = posix_getgrgid($gid); + return $grouparray['name']; + } + + function copy($source, $destination, $overwrite = false, $mode = false) { + if ( ! $overwrite && $this->exists($destination) ) + return false; + + $rtval = copy($source, $destination); + if ( $mode ) + $this->chmod($destination, $mode); + return $rtval; + } + + function move($source, $destination, $overwrite = false) { + if ( ! $overwrite && $this->exists($destination) ) + return false; + + // try using rename first. if that fails (for example, source is read only) try copy + if ( @rename($source, $destination) ) + return true; + + if ( $this->copy($source, $destination, $overwrite) && $this->exists($destination) ) { + $this->delete($source); + return true; + } else { + return false; + } + } + + function delete($file, $recursive = false, $type = false) { + if ( empty( $file ) ) // Some filesystems report this as /, which can cause non-expected recursive deletion of all files in the filesystem. + return false; + $file = str_replace( '\\', '/', $file ); // for win32, occasional problems deleting files otherwise + + if ( 'f' == $type || $this->is_file($file) ) + return @unlink($file); + if ( ! $recursive && $this->is_dir($file) ) + return @rmdir($file); + + // At this point it's a folder, and we're in recursive mode + $file = trailingslashit($file); + $filelist = $this->dirlist($file, true); + + $retval = true; + if ( is_array( $filelist ) ) { + foreach ( $filelist as $filename => $fileinfo ) { + if ( ! $this->delete($file . $filename, $recursive, $fileinfo['type']) ) + $retval = false; + } + } + + if ( file_exists($file) && ! @rmdir($file) ) + $retval = false; + + return $retval; + } + + function exists($file) { + return @file_exists($file); + } + + function is_file($file) { + return @is_file($file); + } + + function is_dir($path) { + return @is_dir($path); + } + + function is_readable($file) { + return @is_readable($file); + } + + function is_writable($file) { + return @is_writable($file); + } + + function atime($file) { + return @fileatime($file); + } + + function mtime($file) { + return @filemtime($file); + } + + function size($file) { + return @filesize($file); + } + + function touch($file, $time = 0, $atime = 0) { + if ($time == 0) + $time = time(); + if ($atime == 0) + $atime = time(); + return @touch($file, $time, $atime); + } + + function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { + // safe mode fails with a trailing slash under certain PHP versions. + $path = untrailingslashit($path); + if ( empty($path) ) + return false; + + if ( ! $chmod ) + $chmod = FS_CHMOD_DIR; + + if ( ! @mkdir($path) ) + return false; + $this->chmod($path, $chmod); + if ( $chown ) + $this->chown($path, $chown); + if ( $chgrp ) + $this->chgrp($path, $chgrp); + return true; + } + + function rmdir($path, $recursive = false) { + return $this->delete($path, $recursive); + } + + function dirlist($path, $include_hidden = true, $recursive = false) { + if ( $this->is_file($path) ) { + $limit_file = basename($path); + $path = dirname($path); + } else { + $limit_file = false; + } + + if ( ! $this->is_dir($path) ) + return false; + + $dir = @dir($path); + if ( ! $dir ) + return false; + + $ret = array(); + + while (false !== ($entry = $dir->read()) ) { + $struc = array(); + $struc['name'] = $entry; + + if ( '.' == $struc['name'] || '..' == $struc['name'] ) + continue; + + if ( ! $include_hidden && '.' == $struc['name'][0] ) + continue; + + if ( $limit_file && $struc['name'] != $limit_file) + continue; + + $struc['perms'] = $this->gethchmod($path.'/'.$entry); + $struc['permsn'] = $this->getnumchmodfromh($struc['perms']); + $struc['number'] = false; + $struc['owner'] = $this->owner($path.'/'.$entry); + $struc['group'] = $this->group($path.'/'.$entry); + $struc['size'] = $this->size($path.'/'.$entry); + $struc['lastmodunix']= $this->mtime($path.'/'.$entry); + $struc['lastmod'] = date('M j',$struc['lastmodunix']); + $struc['time'] = date('h:i:s',$struc['lastmodunix']); + $struc['type'] = $this->is_dir($path.'/'.$entry) ? 'd' : 'f'; + + if ( 'd' == $struc['type'] ) { + if ( $recursive ) + $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $include_hidden, $recursive); + else + $struc['files'] = array(); + } + + $ret[ $struc['name'] ] = $struc; + } + $dir->close(); + unset($dir); + return $ret; + } +} diff --git a/src/wp-admin/includes/class-wp-filesystem-ftpext.php b/src/wp-admin/includes/class-wp-filesystem-ftpext.php new file mode 100644 index 0000000..b9e32cd --- /dev/null +++ b/src/wp-admin/includes/class-wp-filesystem-ftpext.php @@ -0,0 +1,415 @@ +method = 'ftpext'; + $this->errors = new WP_Error(); + + // Check if possible to use ftp functions. + if ( ! extension_loaded('ftp') ) { + $this->errors->add('no_ftp_ext', __('The ftp PHP extension is not available')); + return false; + } + + // This Class uses the timeout on a per-connection basis, Others use it on a per-action basis. + + if ( ! defined('FS_TIMEOUT') ) + define('FS_TIMEOUT', 240); + + if ( empty($opt['port']) ) + $this->options['port'] = 21; + else + $this->options['port'] = $opt['port']; + + if ( empty($opt['hostname']) ) + $this->errors->add('empty_hostname', __('FTP hostname is required')); + else + $this->options['hostname'] = $opt['hostname']; + + if ( ! empty($opt['base']) ) + $this->wp_base = $opt['base']; + + // Check if the options provided are OK. + if ( empty($opt['username']) ) + $this->errors->add('empty_username', __('FTP username is required')); + else + $this->options['username'] = $opt['username']; + + if ( empty($opt['password']) ) + $this->errors->add('empty_password', __('FTP password is required')); + else + $this->options['password'] = $opt['password']; + + $this->options['ssl'] = false; + if ( isset($opt['connection_type']) && 'ftps' == $opt['connection_type'] ) + $this->options['ssl'] = true; + } + + function connect() { + if ( isset($this->options['ssl']) && $this->options['ssl'] && function_exists('ftp_ssl_connect') ) + $this->link = @ftp_ssl_connect($this->options['hostname'], $this->options['port'], FS_CONNECT_TIMEOUT); + else + $this->link = @ftp_connect($this->options['hostname'], $this->options['port'], FS_CONNECT_TIMEOUT); + + if ( ! $this->link ) { + $this->errors->add('connect', sprintf(__('Failed to connect to FTP Server %1$s:%2$s'), $this->options['hostname'], $this->options['port'])); + return false; + } + + if ( ! @ftp_login($this->link,$this->options['username'], $this->options['password']) ) { + $this->errors->add('auth', sprintf(__('Username/Password incorrect for %s'), $this->options['username'])); + return false; + } + + // Set the Connection to use Passive FTP + @ftp_pasv( $this->link, true ); + if ( @ftp_get_option($this->link, FTP_TIMEOUT_SEC) < FS_TIMEOUT ) + @ftp_set_option($this->link, FTP_TIMEOUT_SEC, FS_TIMEOUT); + + return true; + } + + function get_contents( $file ) { + $tempfile = wp_tempnam($file); + $temp = fopen($tempfile, 'w+'); + + if ( ! $temp ) + return false; + + if ( ! @ftp_fget($this->link, $temp, $file, FTP_BINARY ) ) + return false; + + fseek( $temp, 0 ); // Skip back to the start of the file being written to + $contents = ''; + + while ( ! feof($temp) ) + $contents .= fread($temp, 8192); + + fclose($temp); + unlink($tempfile); + return $contents; + } + + function get_contents_array($file) { + return explode("\n", $this->get_contents($file)); + } + + function put_contents($file, $contents, $mode = false ) { + $tempfile = wp_tempnam($file); + $temp = fopen( $tempfile, 'wb+' ); + if ( ! $temp ) + return false; + + mbstring_binary_safe_encoding(); + + $data_length = strlen( $contents ); + $bytes_written = fwrite( $temp, $contents ); + + reset_mbstring_encoding(); + + if ( $data_length !== $bytes_written ) { + fclose( $temp ); + unlink( $tempfile ); + return false; + } + + fseek( $temp, 0 ); // Skip back to the start of the file being written to + + $ret = @ftp_fput( $this->link, $file, $temp, FTP_BINARY ); + + fclose($temp); + unlink($tempfile); + + $this->chmod($file, $mode); + + return $ret; + } + + function cwd() { + $cwd = @ftp_pwd($this->link); + if ( $cwd ) + $cwd = trailingslashit($cwd); + return $cwd; + } + + function chdir($dir) { + return @ftp_chdir($this->link, $dir); + } + + function chgrp($file, $group, $recursive = false ) { + return false; + } + + function chmod($file, $mode = false, $recursive = false) { + if ( ! $mode ) { + if ( $this->is_file($file) ) + $mode = FS_CHMOD_FILE; + elseif ( $this->is_dir($file) ) + $mode = FS_CHMOD_DIR; + else + return false; + } + + // chmod any sub-objects if recursive. + if ( $recursive && $this->is_dir($file) ) { + $filelist = $this->dirlist($file); + foreach ( (array)$filelist as $filename => $filemeta ) + $this->chmod($file . '/' . $filename, $mode, $recursive); + } + + // chmod the file or directory + if ( ! function_exists('ftp_chmod') ) + return (bool)@ftp_site($this->link, sprintf('CHMOD %o %s', $mode, $file)); + return (bool)@ftp_chmod($this->link, $mode, $file); + } + + function owner($file) { + $dir = $this->dirlist($file); + return $dir[$file]['owner']; + } + + function getchmod($file) { + $dir = $this->dirlist($file); + return $dir[$file]['permsn']; + } + + function group($file) { + $dir = $this->dirlist($file); + return $dir[$file]['group']; + } + + function copy($source, $destination, $overwrite = false, $mode = false) { + if ( ! $overwrite && $this->exists($destination) ) + return false; + $content = $this->get_contents($source); + if ( false === $content ) + return false; + return $this->put_contents($destination, $content, $mode); + } + + function move($source, $destination, $overwrite = false) { + return ftp_rename($this->link, $source, $destination); + } + + function delete($file, $recursive = false, $type = false) { + if ( empty($file) ) + return false; + if ( 'f' == $type || $this->is_file($file) ) + return @ftp_delete($this->link, $file); + if ( !$recursive ) + return @ftp_rmdir($this->link, $file); + + $filelist = $this->dirlist( trailingslashit($file) ); + if ( !empty($filelist) ) + foreach ( $filelist as $delete_file ) + $this->delete( trailingslashit($file) . $delete_file['name'], $recursive, $delete_file['type'] ); + return @ftp_rmdir($this->link, $file); + } + + function exists($file) { + $list = @ftp_nlist($this->link, $file); + return !empty($list); //empty list = no file, so invert. + } + + function is_file($file) { + return $this->exists($file) && !$this->is_dir($file); + } + + function is_dir($path) { + $cwd = $this->cwd(); + $result = @ftp_chdir($this->link, trailingslashit($path) ); + if ( $result && $path == $this->cwd() || $this->cwd() != $cwd ) { + @ftp_chdir($this->link, $cwd); + return true; + } + return false; + } + + function is_readable($file) { + return true; + } + + function is_writable($file) { + return true; + } + + function atime($file) { + return false; + } + + function mtime($file) { + return ftp_mdtm($this->link, $file); + } + + function size($file) { + return ftp_size($this->link, $file); + } + + function touch($file, $time = 0, $atime = 0) { + return false; + } + + function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { + $path = untrailingslashit($path); + if ( empty($path) ) + return false; + + if ( !@ftp_mkdir($this->link, $path) ) + return false; + $this->chmod($path, $chmod); + if ( $chown ) + $this->chown($path, $chown); + if ( $chgrp ) + $this->chgrp($path, $chgrp); + return true; + } + + function rmdir($path, $recursive = false) { + return $this->delete($path, $recursive); + } + + function parselisting($line) { + static $is_windows; + if ( is_null($is_windows) ) + $is_windows = stripos( ftp_systype($this->link), 'win') !== false; + + if ( $is_windows && preg_match('/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|) +(.+)/', $line, $lucifer) ) { + $b = array(); + if ( $lucifer[3] < 70 ) + $lucifer[3] +=2000; + else + $lucifer[3] += 1900; // 4digit year fix + $b['isdir'] = ( $lucifer[7] == ''); + if ( $b['isdir'] ) + $b['type'] = 'd'; + else + $b['type'] = 'f'; + $b['size'] = $lucifer[7]; + $b['month'] = $lucifer[1]; + $b['day'] = $lucifer[2]; + $b['year'] = $lucifer[3]; + $b['hour'] = $lucifer[4]; + $b['minute'] = $lucifer[5]; + $b['time'] = @mktime($lucifer[4] + (strcasecmp($lucifer[6], "PM") == 0 ? 12 : 0), $lucifer[5], 0, $lucifer[1], $lucifer[2], $lucifer[3]); + $b['am/pm'] = $lucifer[6]; + $b['name'] = $lucifer[8]; + } elseif ( !$is_windows && $lucifer = preg_split('/[ ]/', $line, 9, PREG_SPLIT_NO_EMPTY)) { + //echo $line."\n"; + $lcount = count($lucifer); + if ( $lcount < 8 ) + return ''; + $b = array(); + $b['isdir'] = $lucifer[0]{0} === 'd'; + $b['islink'] = $lucifer[0]{0} === 'l'; + if ( $b['isdir'] ) + $b['type'] = 'd'; + elseif ( $b['islink'] ) + $b['type'] = 'l'; + else + $b['type'] = 'f'; + $b['perms'] = $lucifer[0]; + $b['number'] = $lucifer[1]; + $b['owner'] = $lucifer[2]; + $b['group'] = $lucifer[3]; + $b['size'] = $lucifer[4]; + if ( $lcount == 8 ) { + sscanf($lucifer[5], '%d-%d-%d', $b['year'], $b['month'], $b['day']); + sscanf($lucifer[6], '%d:%d', $b['hour'], $b['minute']); + $b['time'] = @mktime($b['hour'], $b['minute'], 0, $b['month'], $b['day'], $b['year']); + $b['name'] = $lucifer[7]; + } else { + $b['month'] = $lucifer[5]; + $b['day'] = $lucifer[6]; + if ( preg_match('/([0-9]{2}):([0-9]{2})/', $lucifer[7], $l2) ) { + $b['year'] = date("Y"); + $b['hour'] = $l2[1]; + $b['minute'] = $l2[2]; + } else { + $b['year'] = $lucifer[7]; + $b['hour'] = 0; + $b['minute'] = 0; + } + $b['time'] = strtotime( sprintf('%d %s %d %02d:%02d', $b['day'], $b['month'], $b['year'], $b['hour'], $b['minute']) ); + $b['name'] = $lucifer[8]; + } + } + + // Replace symlinks formatted as "source -> target" with just the source name + if ( $b['islink'] ) + $b['name'] = preg_replace( '/(\s*->\s*.*)$/', '', $b['name'] ); + + return $b; + } + + function dirlist($path = '.', $include_hidden = true, $recursive = false) { + if ( $this->is_file($path) ) { + $limit_file = basename($path); + $path = dirname($path) . '/'; + } else { + $limit_file = false; + } + + $pwd = @ftp_pwd($this->link); + if ( ! @ftp_chdir($this->link, $path) ) // Cant change to folder = folder doesn't exist + return false; + $list = @ftp_rawlist($this->link, '-a', false); + @ftp_chdir($this->link, $pwd); + + if ( empty($list) ) // Empty array = non-existent folder (real folder will show . at least) + return false; + + $dirlist = array(); + foreach ( $list as $k => $v ) { + $entry = $this->parselisting($v); + if ( empty($entry) ) + continue; + + if ( '.' == $entry['name'] || '..' == $entry['name'] ) + continue; + + if ( ! $include_hidden && '.' == $entry['name'][0] ) + continue; + + if ( $limit_file && $entry['name'] != $limit_file) + continue; + + $dirlist[ $entry['name'] ] = $entry; + } + + $ret = array(); + foreach ( (array)$dirlist as $struc ) { + if ( 'd' == $struc['type'] ) { + if ( $recursive ) + $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $include_hidden, $recursive); + else + $struc['files'] = array(); + } + + $ret[ $struc['name'] ] = $struc; + } + return $ret; + } + + function __destruct() { + if ( $this->link ) + ftp_close($this->link); + } +} diff --git a/src/wp-admin/includes/class-wp-filesystem-ftpsockets.php b/src/wp-admin/includes/class-wp-filesystem-ftpsockets.php new file mode 100644 index 0000000..817dd08 --- /dev/null +++ b/src/wp-admin/includes/class-wp-filesystem-ftpsockets.php @@ -0,0 +1,351 @@ +method = 'ftpsockets'; + $this->errors = new WP_Error(); + + // Check if possible to use ftp functions. + if ( ! @include_once ABSPATH . 'wp-admin/includes/class-ftp.php' ) + return false; + $this->ftp = new ftp(); + + if ( empty($opt['port']) ) + $this->options['port'] = 21; + else + $this->options['port'] = $opt['port']; + + if ( empty($opt['hostname']) ) + $this->errors->add('empty_hostname', __('FTP hostname is required')); + else + $this->options['hostname'] = $opt['hostname']; + + if ( ! empty($opt['base']) ) + $this->wp_base = $opt['base']; + + // Check if the options provided are OK. + if ( empty ($opt['username']) ) + $this->errors->add('empty_username', __('FTP username is required')); + else + $this->options['username'] = $opt['username']; + + if ( empty ($opt['password']) ) + $this->errors->add('empty_password', __('FTP password is required')); + else + $this->options['password'] = $opt['password']; + } + + function connect() { + if ( ! $this->ftp ) + return false; + + $this->ftp->setTimeout(FS_CONNECT_TIMEOUT); + + if ( ! $this->ftp->SetServer($this->options['hostname'], $this->options['port']) ) { + $this->errors->add('connect', sprintf(__('Failed to connect to FTP Server %1$s:%2$s'), $this->options['hostname'], $this->options['port'])); + return false; + } + + if ( ! $this->ftp->connect() ) { + $this->errors->add('connect', sprintf(__('Failed to connect to FTP Server %1$s:%2$s'), $this->options['hostname'], $this->options['port'])); + return false; + } + + if ( ! $this->ftp->login($this->options['username'], $this->options['password']) ) { + $this->errors->add('auth', sprintf(__('Username/Password incorrect for %s'), $this->options['username'])); + return false; + } + + $this->ftp->SetType( FTP_BINARY ); + $this->ftp->Passive( true ); + $this->ftp->setTimeout( FS_TIMEOUT ); + return true; + } + + function get_contents( $file ) { + if ( ! $this->exists($file) ) + return false; + + $temp = wp_tempnam( $file ); + + if ( ! $temphandle = fopen($temp, 'w+') ) + return false; + + mbstring_binary_safe_encoding(); + + if ( ! $this->ftp->fget($temphandle, $file) ) { + fclose($temphandle); + unlink($temp); + + reset_mbstring_encoding(); + + return ''; // Blank document, File does exist, It's just blank. + } + + reset_mbstring_encoding(); + + fseek( $temphandle, 0 ); // Skip back to the start of the file being written to + $contents = ''; + + while ( ! feof($temphandle) ) + $contents .= fread($temphandle, 8192); + + fclose($temphandle); + unlink($temp); + return $contents; + } + + function get_contents_array($file) { + return explode("\n", $this->get_contents($file) ); + } + + function put_contents($file, $contents, $mode = false ) { + $temp = wp_tempnam( $file ); + if ( ! $temphandle = @fopen($temp, 'w+') ) { + unlink($temp); + return false; + } + + // The FTP class uses string functions internally during file download/upload + mbstring_binary_safe_encoding(); + + $bytes_written = fwrite( $temphandle, $contents ); + if ( false === $bytes_written || $bytes_written != strlen( $contents ) ) { + fclose( $temphandle ); + unlink( $temp ); + + reset_mbstring_encoding(); + + return false; + } + + fseek( $temphandle, 0 ); // Skip back to the start of the file being written to + + $ret = $this->ftp->fput($file, $temphandle); + + reset_mbstring_encoding(); + + fclose($temphandle); + unlink($temp); + + $this->chmod($file, $mode); + + return $ret; + } + + function cwd() { + $cwd = $this->ftp->pwd(); + if ( $cwd ) + $cwd = trailingslashit($cwd); + return $cwd; + } + + function chdir($file) { + return $this->ftp->chdir($file); + } + + function chgrp($file, $group, $recursive = false ) { + return false; + } + + function chmod($file, $mode = false, $recursive = false ) { + if ( ! $mode ) { + if ( $this->is_file($file) ) + $mode = FS_CHMOD_FILE; + elseif ( $this->is_dir($file) ) + $mode = FS_CHMOD_DIR; + else + return false; + } + + // chmod any sub-objects if recursive. + if ( $recursive && $this->is_dir($file) ) { + $filelist = $this->dirlist($file); + foreach ( (array)$filelist as $filename => $filemeta ) + $this->chmod($file . '/' . $filename, $mode, $recursive); + } + + // chmod the file or directory + return $this->ftp->chmod($file, $mode); + } + + function owner($file) { + $dir = $this->dirlist($file); + return $dir[$file]['owner']; + } + + function getchmod($file) { + $dir = $this->dirlist($file); + return $dir[$file]['permsn']; + } + + function group($file) { + $dir = $this->dirlist($file); + return $dir[$file]['group']; + } + + function copy($source, $destination, $overwrite = false, $mode = false) { + if ( ! $overwrite && $this->exists($destination) ) + return false; + + $content = $this->get_contents($source); + if ( false === $content ) + return false; + + return $this->put_contents($destination, $content, $mode); + } + + function move($source, $destination, $overwrite = false ) { + return $this->ftp->rename($source, $destination); + } + + function delete($file, $recursive = false, $type = false) { + if ( empty($file) ) + return false; + if ( 'f' == $type || $this->is_file($file) ) + return $this->ftp->delete($file); + if ( !$recursive ) + return $this->ftp->rmdir($file); + + return $this->ftp->mdel($file); + } + + function exists( $file ) { + $list = $this->ftp->nlist( $file ); + return !empty( $list ); //empty list = no file, so invert. + // return $this->ftp->is_exists($file); has issues with ABOR+426 responses on the ncFTPd server + } + + function is_file($file) { + if ( $this->is_dir($file) ) + return false; + if ( $this->exists($file) ) + return true; + return false; + } + + function is_dir($path) { + $cwd = $this->cwd(); + if ( $this->chdir($path) ) { + $this->chdir($cwd); + return true; + } + return false; + } + + function is_readable($file) { + return true; + } + + function is_writable($file) { + return true; + } + + function atime($file) { + return false; + } + + function mtime($file) { + return $this->ftp->mdtm($file); + } + + function size($file) { + return $this->ftp->filesize($file); + } + + function touch($file, $time = 0, $atime = 0 ) { + return false; + } + + function mkdir($path, $chmod = false, $chown = false, $chgrp = false ) { + $path = untrailingslashit($path); + if ( empty($path) ) + return false; + + if ( ! $this->ftp->mkdir($path) ) + return false; + if ( ! $chmod ) + $chmod = FS_CHMOD_DIR; + $this->chmod($path, $chmod); + if ( $chown ) + $this->chown($path, $chown); + if ( $chgrp ) + $this->chgrp($path, $chgrp); + return true; + } + + function rmdir($path, $recursive = false ) { + $this->delete($path, $recursive); + } + + function dirlist($path = '.', $include_hidden = true, $recursive = false ) { + if ( $this->is_file($path) ) { + $limit_file = basename($path); + $path = dirname($path) . '/'; + } else { + $limit_file = false; + } + + mbstring_binary_safe_encoding(); + + $list = $this->ftp->dirlist($path); + if ( empty( $list ) && ! $this->exists( $path ) ) { + + reset_mbstring_encoding(); + + return false; + } + + $ret = array(); + foreach ( $list as $struc ) { + + if ( '.' == $struc['name'] || '..' == $struc['name'] ) + continue; + + if ( ! $include_hidden && '.' == $struc['name'][0] ) + continue; + + if ( $limit_file && $struc['name'] != $limit_file ) + continue; + + if ( 'd' == $struc['type'] ) { + if ( $recursive ) + $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $include_hidden, $recursive); + else + $struc['files'] = array(); + } + + // Replace symlinks formatted as "source -> target" with just the source name + if ( $struc['islink'] ) + $struc['name'] = preg_replace( '/(\s*->\s*.*)$/', '', $struc['name'] ); + + $ret[ $struc['name'] ] = $struc; + } + + reset_mbstring_encoding(); + + return $ret; + } + + function __destruct() { + $this->ftp->quit(); + } +} diff --git a/src/wp-admin/includes/class-wp-filesystem-ssh2.php b/src/wp-admin/includes/class-wp-filesystem-ssh2.php new file mode 100644 index 0000000..f942989 --- /dev/null +++ b/src/wp-admin/includes/class-wp-filesystem-ssh2.php @@ -0,0 +1,391 @@ +method = 'ssh2'; + $this->errors = new WP_Error(); + + //Check if possible to use ssh2 functions. + if ( ! extension_loaded('ssh2') ) { + $this->errors->add('no_ssh2_ext', __('The ssh2 PHP extension is not available')); + return false; + } + if ( !function_exists('stream_get_contents') ) { + $this->errors->add('ssh2_php_requirement', __('The ssh2 PHP extension is available, however, we require the PHP5 function stream_get_contents()')); + return false; + } + + // Set defaults: + if ( empty($opt['port']) ) + $this->options['port'] = 22; + else + $this->options['port'] = $opt['port']; + + if ( empty($opt['hostname']) ) + $this->errors->add('empty_hostname', __('SSH2 hostname is required')); + else + $this->options['hostname'] = $opt['hostname']; + + if ( ! empty($opt['base']) ) + $this->wp_base = $opt['base']; + + // Check if the options provided are OK. + if ( !empty ($opt['public_key']) && !empty ($opt['private_key']) ) { + $this->options['public_key'] = $opt['public_key']; + $this->options['private_key'] = $opt['private_key']; + + $this->options['hostkey'] = array('hostkey' => 'ssh-rsa'); + + $this->keys = true; + } elseif ( empty ($opt['username']) ) { + $this->errors->add('empty_username', __('SSH2 username is required')); + } + + if ( !empty($opt['username']) ) + $this->options['username'] = $opt['username']; + + if ( empty ($opt['password']) ) { + if ( !$this->keys ) //password can be blank if we are using keys + $this->errors->add('empty_password', __('SSH2 password is required')); + } else { + $this->options['password'] = $opt['password']; + } + + } + + function connect() { + if ( ! $this->keys ) { + $this->link = @ssh2_connect($this->options['hostname'], $this->options['port']); + } else { + $this->link = @ssh2_connect($this->options['hostname'], $this->options['port'], $this->options['hostkey']); + } + + if ( ! $this->link ) { + $this->errors->add('connect', sprintf(__('Failed to connect to SSH2 Server %1$s:%2$s'), $this->options['hostname'], $this->options['port'])); + return false; + } + + if ( !$this->keys ) { + if ( ! @ssh2_auth_password($this->link, $this->options['username'], $this->options['password']) ) { + $this->errors->add('auth', sprintf(__('Username/Password incorrect for %s'), $this->options['username'])); + return false; + } + } else { + if ( ! @ssh2_auth_pubkey_file($this->link, $this->options['username'], $this->options['public_key'], $this->options['private_key'], $this->options['password'] ) ) { + $this->errors->add('auth', sprintf(__('Public and Private keys incorrect for %s'), $this->options['username'])); + return false; + } + } + + $this->sftp_link = ssh2_sftp($this->link); + + return true; + } + + function run_command( $command, $returnbool = false) { + + if ( ! $this->link ) + return false; + + if ( ! ($stream = ssh2_exec($this->link, $command)) ) { + $this->errors->add('command', sprintf(__('Unable to perform command: %s'), $command)); + } else { + stream_set_blocking( $stream, true ); + stream_set_timeout( $stream, FS_TIMEOUT ); + $data = stream_get_contents( $stream ); + fclose( $stream ); + + if ( $returnbool ) + return ( $data === false ) ? false : '' != trim($data); + else + return $data; + } + return false; + } + + function get_contents( $file ) { + $file = ltrim($file, '/'); + return file_get_contents('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function get_contents_array($file) { + $file = ltrim($file, '/'); + return file('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function put_contents($file, $contents, $mode = false ) { + $ret = file_put_contents( 'ssh2.sftp://' . $this->sftp_link . '/' . ltrim( $file, '/' ), $contents ); + + if ( $ret !== strlen( $contents ) ) + return false; + + $this->chmod($file, $mode); + + return true; + } + + function cwd() { + $cwd = $this->run_command('pwd'); + if ( $cwd ) + $cwd = trailingslashit($cwd); + return $cwd; + } + + function chdir($dir) { + return $this->run_command('cd ' . $dir, true); + } + + function chgrp($file, $group, $recursive = false ) { + if ( ! $this->exists($file) ) + return false; + if ( ! $recursive || ! $this->is_dir($file) ) + return $this->run_command(sprintf('chgrp %s %s', escapeshellarg($group), escapeshellarg($file)), true); + return $this->run_command(sprintf('chgrp -R %s %s', escapeshellarg($group), escapeshellarg($file)), true); + } + + function chmod($file, $mode = false, $recursive = false) { + if ( ! $this->exists($file) ) + return false; + + if ( ! $mode ) { + if ( $this->is_file($file) ) + $mode = FS_CHMOD_FILE; + elseif ( $this->is_dir($file) ) + $mode = FS_CHMOD_DIR; + else + return false; + } + + if ( ! $recursive || ! $this->is_dir($file) ) + return $this->run_command(sprintf('chmod %o %s', $mode, escapeshellarg($file)), true); + return $this->run_command(sprintf('chmod -R %o %s', $mode, escapeshellarg($file)), true); + } + + /** + * Change the ownership of a file / folder. + * + * @since Unknown + * + * @param string $file Path to the file. + * @param mixed $owner A user name or number. + * @param bool $recursive Optional. If set True changes file owner recursivly. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chown( $file, $owner, $recursive = false ) { + if ( ! $this->exists($file) ) + return false; + if ( ! $recursive || ! $this->is_dir($file) ) + return $this->run_command(sprintf('chown %s %s', escapeshellarg($owner), escapeshellarg($file)), true); + return $this->run_command(sprintf('chown -R %s %s', escapeshellarg($owner), escapeshellarg($file)), true); + } + + function owner($file) { + $owneruid = @fileowner('ssh2.sftp://' . $this->sftp_link . '/' . ltrim($file, '/')); + if ( ! $owneruid ) + return false; + if ( ! function_exists('posix_getpwuid') ) + return $owneruid; + $ownerarray = posix_getpwuid($owneruid); + return $ownerarray['name']; + } + + function getchmod($file) { + return substr(decoct(@fileperms( 'ssh2.sftp://' . $this->sftp_link . '/' . ltrim($file, '/') )),3); + } + + function group($file) { + $gid = @filegroup('ssh2.sftp://' . $this->sftp_link . '/' . ltrim($file, '/')); + if ( ! $gid ) + return false; + if ( ! function_exists('posix_getgrgid') ) + return $gid; + $grouparray = posix_getgrgid($gid); + return $grouparray['name']; + } + + function copy($source, $destination, $overwrite = false, $mode = false) { + if ( ! $overwrite && $this->exists($destination) ) + return false; + $content = $this->get_contents($source); + if ( false === $content) + return false; + return $this->put_contents($destination, $content, $mode); + } + + function move($source, $destination, $overwrite = false) { + return @ssh2_sftp_rename($this->link, $source, $destination); + } + + function delete($file, $recursive = false, $type = false) { + if ( 'f' == $type || $this->is_file($file) ) + return ssh2_sftp_unlink($this->sftp_link, $file); + if ( ! $recursive ) + return ssh2_sftp_rmdir($this->sftp_link, $file); + $filelist = $this->dirlist($file); + if ( is_array($filelist) ) { + foreach ( $filelist as $filename => $fileinfo) { + $this->delete($file . '/' . $filename, $recursive, $fileinfo['type']); + } + } + return ssh2_sftp_rmdir($this->sftp_link, $file); + } + + function exists($file) { + $file = ltrim($file, '/'); + return file_exists('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function is_file($file) { + $file = ltrim($file, '/'); + return is_file('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function is_dir($path) { + $path = ltrim($path, '/'); + return is_dir('ssh2.sftp://' . $this->sftp_link . '/' . $path); + } + + function is_readable($file) { + $file = ltrim($file, '/'); + return is_readable('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function is_writable($file) { + $file = ltrim($file, '/'); + return is_writable('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function atime($file) { + $file = ltrim($file, '/'); + return fileatime('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function mtime($file) { + $file = ltrim($file, '/'); + return filemtime('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function size($file) { + $file = ltrim($file, '/'); + return filesize('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function touch($file, $time = 0, $atime = 0) { + //Not implemented. + } + + function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { + $path = untrailingslashit($path); + if ( empty($path) ) + return false; + + if ( ! $chmod ) + $chmod = FS_CHMOD_DIR; + if ( ! ssh2_sftp_mkdir($this->sftp_link, $path, $chmod, true) ) + return false; + if ( $chown ) + $this->chown($path, $chown); + if ( $chgrp ) + $this->chgrp($path, $chgrp); + return true; + } + + function rmdir($path, $recursive = false) { + return $this->delete($path, $recursive); + } + + function dirlist($path, $include_hidden = true, $recursive = false) { + if ( $this->is_file($path) ) { + $limit_file = basename($path); + $path = dirname($path); + } else { + $limit_file = false; + } + + if ( ! $this->is_dir($path) ) + return false; + + $ret = array(); + $dir = @dir('ssh2.sftp://' . $this->sftp_link .'/' . ltrim($path, '/') ); + + if ( ! $dir ) + return false; + + while (false !== ($entry = $dir->read()) ) { + $struc = array(); + $struc['name'] = $entry; + + if ( '.' == $struc['name'] || '..' == $struc['name'] ) + continue; //Do not care about these folders. + + if ( ! $include_hidden && '.' == $struc['name'][0] ) + continue; + + if ( $limit_file && $struc['name'] != $limit_file ) + continue; + + $struc['perms'] = $this->gethchmod($path.'/'.$entry); + $struc['permsn'] = $this->getnumchmodfromh($struc['perms']); + $struc['number'] = false; + $struc['owner'] = $this->owner($path.'/'.$entry); + $struc['group'] = $this->group($path.'/'.$entry); + $struc['size'] = $this->size($path.'/'.$entry); + $struc['lastmodunix']= $this->mtime($path.'/'.$entry); + $struc['lastmod'] = date('M j',$struc['lastmodunix']); + $struc['time'] = date('h:i:s',$struc['lastmodunix']); + $struc['type'] = $this->is_dir($path.'/'.$entry) ? 'd' : 'f'; + + if ( 'd' == $struc['type'] ) { + if ( $recursive ) + $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $include_hidden, $recursive); + else + $struc['files'] = array(); + } + + $ret[ $struc['name'] ] = $struc; + } + $dir->close(); + unset($dir); + return $ret; + } +} diff --git a/src/wp-admin/includes/class-wp-importer.php b/src/wp-admin/includes/class-wp-importer.php new file mode 100644 index 0000000..57ff7f4 --- /dev/null +++ b/src/wp-admin/includes/class-wp-importer.php @@ -0,0 +1,302 @@ +prepare( "SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = '%s' LIMIT %d,%d", $meta_key, $offset, $limit ); + $results = $wpdb->get_results( $sql ); + + // Increment offset + $offset = ( $limit + $offset ); + + if ( !empty( $results ) ) { + foreach ( $results as $r ) { + // Set permalinks into array + $hashtable[$r->meta_value] = intval( $r->post_id ); + } + } + } while ( count( $results ) == $limit ); + + // unset to save memory + unset( $results, $r ); + + return $hashtable; + } + + /** + * Return count of imported permalinks from WordPress database + * + * @param string $bid + * @return int + */ + function count_imported_posts( $importer_name, $bid ) { + global $wpdb; + + $count = 0; + + // Get count of permalinks + $meta_key = $importer_name . '_' . $bid . '_permalink'; + $sql = $wpdb->prepare( "SELECT COUNT( post_id ) AS cnt FROM $wpdb->postmeta WHERE meta_key = '%s'", $meta_key ); + + $result = $wpdb->get_results( $sql ); + + if ( !empty( $result ) ) + $count = intval( $result[0]->cnt ); + + // unset to save memory + unset( $results ); + + return $count; + } + + /** + * Set array with imported comments from WordPress database + * + * @param string $bid + * @return array + */ + function get_imported_comments( $bid ) { + global $wpdb; + + $hashtable = array(); + + $limit = 100; + $offset = 0; + + // Grab all comments in chunks + do { + $sql = $wpdb->prepare( "SELECT comment_ID, comment_agent FROM $wpdb->comments LIMIT %d,%d", $offset, $limit ); + $results = $wpdb->get_results( $sql ); + + // Increment offset + $offset = ( $limit + $offset ); + + if ( !empty( $results ) ) { + foreach ( $results as $r ) { + // Explode comment_agent key + list ( $ca_bid, $source_comment_id ) = explode( '-', $r->comment_agent ); + $source_comment_id = intval( $source_comment_id ); + + // Check if this comment came from this blog + if ( $bid == $ca_bid ) { + $hashtable[$source_comment_id] = intval( $r->comment_ID ); + } + } + } + } while ( count( $results ) == $limit ); + + // unset to save memory + unset( $results, $r ); + + return $hashtable; + } + + function set_blog( $blog_id ) { + if ( is_numeric( $blog_id ) ) { + $blog_id = (int) $blog_id; + } else { + $blog = 'http://' . preg_replace( '#^https?://#', '', $blog_id ); + if ( ( !$parsed = parse_url( $blog ) ) || empty( $parsed['host'] ) ) { + fwrite( STDERR, "Error: can not determine blog_id from $blog_id\n" ); + exit(); + } + if ( empty( $parsed['path'] ) ) + $parsed['path'] = '/'; + $blog = get_blog_details( array( 'domain' => $parsed['host'], 'path' => $parsed['path'] ) ); + if ( !$blog ) { + fwrite( STDERR, "Error: Could not find blog\n" ); + exit(); + } + $blog_id = (int) $blog->blog_id; + } + + if ( function_exists( 'is_multisite' ) ) { + if ( is_multisite() ) + switch_to_blog( $blog_id ); + } + + return $blog_id; + } + + function set_user( $user_id ) { + if ( is_numeric( $user_id ) ) { + $user_id = (int) $user_id; + } else { + $user_id = (int) username_exists( $user_id ); + } + + if ( !$user_id || !wp_set_current_user( $user_id ) ) { + fwrite( STDERR, "Error: can not find user\n" ); + exit(); + } + + return $user_id; + } + + /** + * Sort by strlen, longest string first + * + * @param string $a + * @param string $b + * @return int + */ + function cmpr_strlen( $a, $b ) { + return strlen( $b ) - strlen( $a ); + } + + /** + * GET URL + * + * @param string $url + * @param string $username + * @param string $password + * @param bool $head + * @return array + */ + function get_page( $url, $username = '', $password = '', $head = false ) { + // Increase the timeout + add_filter( 'http_request_timeout', array( $this, 'bump_request_timeout' ) ); + + $headers = array(); + $args = array(); + if ( true === $head ) + $args['method'] = 'HEAD'; + if ( !empty( $username ) && !empty( $password ) ) + $headers['Authorization'] = 'Basic ' . base64_encode( "$username:$password" ); + + $args['headers'] = $headers; + + return wp_safe_remote_request( $url, $args ); + } + + /** + * Bump up the request timeout for http requests + * + * @param int $val + * @return int + */ + function bump_request_timeout( $val ) { + return 60; + } + + /** + * Check if user has exceeded disk quota + * + * @return bool + */ + function is_user_over_quota() { + if ( function_exists( 'upload_is_user_over_quota' ) ) { + if ( upload_is_user_over_quota( 1 ) ) { + echo "Sorry, you have used your upload quota.\n"; + return true; + } + } + + return false; + } + + /** + * Replace newlines, tabs, and multiple spaces with a single space + * + * @param string $string + * @return string + */ + function min_whitespace( $string ) { + return preg_replace( '|[\r\n\t ]+|', ' ', $string ); + } + + /** + * Reset global variables that grow out of control during imports + * + * @return void + */ + function stop_the_insanity() { + global $wpdb, $wp_actions; + // Or define( 'WP_IMPORTING', true ); + $wpdb->queries = array(); + // Reset $wp_actions to keep it from growing out of control + $wp_actions = array(); + } +} + +/** + * Returns value of command line params. + * Exits when a required param is not set. + * + * @param string $param + * @param bool $required + * @return mixed + */ +function get_cli_args( $param, $required = false ) { + $args = $_SERVER['argv']; + + $out = array(); + + $last_arg = null; + $return = null; + + $il = sizeof( $args ); + + for ( $i = 1, $il; $i < $il; $i++ ) { + if ( (bool) preg_match( "/^--(.+)/", $args[$i], $match ) ) { + $parts = explode( "=", $match[1] ); + $key = preg_replace( "/[^a-z0-9]+/", "", $parts[0] ); + + if ( isset( $parts[1] ) ) { + $out[$key] = $parts[1]; + } else { + $out[$key] = true; + } + + $last_arg = $key; + } else if ( (bool) preg_match( "/^-([a-zA-Z0-9]+)/", $args[$i], $match ) ) { + for ( $j = 0, $jl = strlen( $match[1] ); $j < $jl; $j++ ) { + $key = $match[1]{$j}; + $out[$key] = true; + } + + $last_arg = $key; + } else if ( $last_arg !== null ) { + $out[$last_arg] = $args[$i]; + } + } + + // Check array for specified param + if ( isset( $out[$param] ) ) { + // Set return value + $return = $out[$param]; + } + + // Check for missing required param + if ( !isset( $out[$param] ) && $required ) { + // Display message and exit + echo "\"$param\" parameter is required but was not specified\n"; + exit(); + } + + return $return; +} diff --git a/src/wp-admin/includes/class-wp-links-list-table.php b/src/wp-admin/includes/class-wp-links-list-table.php new file mode 100644 index 0000000..61d8c17 --- /dev/null +++ b/src/wp-admin/includes/class-wp-links-list-table.php @@ -0,0 +1,197 @@ + 'bookmarks', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + function ajax_user_can() { + return current_user_can( 'manage_links' ); + } + + function prepare_items() { + global $cat_id, $s, $orderby, $order; + + wp_reset_vars( array( 'action', 'cat_id', 'link_id', 'orderby', 'order', 's' ) ); + + $args = array( 'hide_invisible' => 0, 'hide_empty' => 0 ); + + if ( 'all' != $cat_id ) + $args['category'] = $cat_id; + if ( !empty( $s ) ) + $args['search'] = $s; + if ( !empty( $orderby ) ) + $args['orderby'] = $orderby; + if ( !empty( $order ) ) + $args['order'] = $order; + + $this->items = get_bookmarks( $args ); + } + + function no_items() { + _e( 'No links found.' ); + } + + function get_bulk_actions() { + $actions = array(); + $actions['delete'] = __( 'Delete' ); + + return $actions; + } + + function extra_tablenav( $which ) { + global $cat_id; + + if ( 'top' != $which ) + return; +?> +
    + $cat_id, + 'name' => 'cat_id', + 'taxonomy' => 'link_category', + 'show_option_all' => __( 'View all categories' ), + 'hide_empty' => true, + 'hierarchical' => 1, + 'show_count' => 0, + 'orderby' => 'name', + ); + wp_dropdown_categories( $dropdown_options ); + submit_button( __( 'Filter' ), 'button', false, false, array( 'id' => 'post-query-submit' ) ); +?> +
    + '', + 'name' => _x( 'Name', 'link name' ), + 'url' => __( 'URL' ), + 'categories' => __( 'Categories' ), + 'rel' => __( 'Relationship' ), + 'visible' => __( 'Visible' ), + 'rating' => __( 'Rating' ) + ); + } + + function get_sortable_columns() { + return array( + 'name' => 'name', + 'url' => 'url', + 'visible' => 'visible', + 'rating' => 'rating' + ); + } + + function display_rows() { + global $cat_id; + + $alt = 0; + + foreach ( $this->items as $link ) { + $link = sanitize_bookmark( $link ); + $link->link_name = esc_attr( $link->link_name ); + $link->link_category = wp_get_link_cats( $link->link_id ); + + $short_url = url_shorten( $link->link_url ); + + $visible = ( $link->link_visible == 'Y' ) ? __( 'Yes' ) : __( 'No' ); + $rating = $link->link_rating; + $style = ( $alt++ % 2 ) ? '' : ' class="alternate"'; + + $edit_link = get_edit_bookmark_link( $link ); +?> + > +get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $class = "class='column-$column_name'"; + + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + $attributes = $class . $style; + + switch ( $column_name ) { + case 'cb': ?> + + + + + link_name ) ) . "'>$link->link_name
    "; + + $actions = array(); + $actions['edit'] = '' . __( 'Edit' ) . ''; + $actions['delete'] = "link_id ) . "' onclick=\"if ( confirm( '" . esc_js( sprintf( __( "You are about to delete this link '%s'\n 'Cancel' to stop, 'OK' to delete." ), $link->link_name ) ) . "' ) ) { return true;}return false;\">" . __( 'Delete' ) . ""; + echo $this->row_actions( $actions ); + + echo ''; + break; + case 'url': + echo "link_name ) )."'>$short_url"; + break; + case 'categories': + ?>>link_category as $category ) { + $cat = get_term( $category, 'link_category', OBJECT, 'display' ); + if ( is_wp_error( $cat ) ) + echo $cat->get_error_message(); + $cat_name = $cat->name; + if ( $cat_id != $category ) + $cat_name = "$cat_name"; + $cat_names[] = $cat_name; + } + echo implode( ', ', $cat_names ); + ?>>link_rel ) ? '
    ' : $link->link_rel; ?>>> + >link_id ); ?> + + + '', + 'singular' => '', + 'ajax' => false, + 'screen' => null, + ) ); + + $this->screen = convert_to_screen( $args['screen'] ); + + add_filter( "manage_{$this->screen->id}_columns", array( $this, 'get_columns' ), 0 ); + + if ( !$args['plural'] ) + $args['plural'] = $this->screen->base; + + $args['plural'] = sanitize_key( $args['plural'] ); + $args['singular'] = sanitize_key( $args['singular'] ); + + $this->_args = $args; + + if ( $args['ajax'] ) { + // wp_enqueue_script( 'list-table' ); + add_action( 'admin_footer', array( $this, '_js_vars' ) ); + } + } + + /** + * Checks the current user's permissions + * @uses wp_die() + * + * @since 3.1.0 + * @access public + * @abstract + */ + function ajax_user_can() { + die( 'function WP_List_Table::ajax_user_can() must be over-ridden in a sub-class.' ); + } + + /** + * Prepares the list of items for displaying. + * @uses WP_List_Table::set_pagination_args() + * + * @since 3.1.0 + * @access public + * @abstract + */ + function prepare_items() { + die( 'function WP_List_Table::prepare_items() must be over-ridden in a sub-class.' ); + } + + /** + * An internal method that sets all the necessary pagination arguments + * + * @param array $args An associative array with information about the pagination + * @access protected + */ + function set_pagination_args( $args ) { + $args = wp_parse_args( $args, array( + 'total_items' => 0, + 'total_pages' => 0, + 'per_page' => 0, + ) ); + + if ( !$args['total_pages'] && $args['per_page'] > 0 ) + $args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] ); + + // redirect if page number is invalid and headers are not already sent + if ( ! headers_sent() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) && $args['total_pages'] > 0 && $this->get_pagenum() > $args['total_pages'] ) { + wp_redirect( add_query_arg( 'paged', $args['total_pages'] ) ); + exit; + } + + $this->_pagination_args = $args; + } + + /** + * Access the pagination args + * + * @since 3.1.0 + * @access public + * + * @param string $key + * @return array + */ + function get_pagination_arg( $key ) { + if ( 'page' == $key ) + return $this->get_pagenum(); + + if ( isset( $this->_pagination_args[$key] ) ) + return $this->_pagination_args[$key]; + } + + /** + * Whether the table has items to display or not + * + * @since 3.1.0 + * @access public + * + * @return bool + */ + function has_items() { + return !empty( $this->items ); + } + + /** + * Message to be displayed when there are no items + * + * @since 3.1.0 + * @access public + */ + function no_items() { + _e( 'No items found.' ); + } + + /** + * Display the search box. + * + * @since 3.1.0 + * @access public + * + * @param string $text The search button text + * @param string $input_id The search input id + */ + function search_box( $text, $input_id ) { + if ( empty( $_REQUEST['s'] ) && !$this->has_items() ) + return; + + $input_id = $input_id . '-search-input'; + + if ( ! empty( $_REQUEST['orderby'] ) ) + echo ''; + if ( ! empty( $_REQUEST['order'] ) ) + echo ''; + if ( ! empty( $_REQUEST['post_mime_type'] ) ) + echo ''; + if ( ! empty( $_REQUEST['detached'] ) ) + echo ''; +?> + + link ) with the list + * of views available on this table. + * + * @since 3.1.0 + * @access protected + * + * @return array + */ + function get_views() { + return array(); + } + + /** + * Display the list of views available on this table. + * + * @since 3.1.0 + * @access public + */ + function views() { + $views = $this->get_views(); + /** + * Filter the list of available list table views. + * + * The dynamic portion of the hook name, $this->screen->id, refers + * to the ID of the current screen, usually a string. + * + * @since 3.5.0 + * + * @param array $views An array of available list table views. + */ + $views = apply_filters( "views_{$this->screen->id}", $views ); + + if ( empty( $views ) ) + return; + + echo "
      \n"; + foreach ( $views as $class => $view ) { + $views[ $class ] = "\t
    • $view"; + } + echo implode( " |
    • \n", $views ) . "\n"; + echo "
    "; + } + + /** + * Get an associative array ( option_name => option_title ) with the list + * of bulk actions available on this table. + * + * @since 3.1.0 + * @access protected + * + * @return array + */ + function get_bulk_actions() { + return array(); + } + + /** + * Display the bulk actions dropdown. + * + * @since 3.1.0 + * @access public + */ + function bulk_actions() { + if ( is_null( $this->_actions ) ) { + $no_new_actions = $this->_actions = $this->get_bulk_actions(); + /** + * Filter the list table Bulk Actions drop-down. + * + * The dynamic portion of the hook name, $this->screen->id, refers + * to the ID of the current screen, usually a string. + * + * This filter can currently only be used to remove bulk actions. + * + * @since 3.5.0 + * + * @param array $actions An array of the available bulk actions. + */ + $this->_actions = apply_filters( "bulk_actions-{$this->screen->id}", $this->_actions ); + $this->_actions = array_intersect_assoc( $this->_actions, $no_new_actions ); + $two = ''; + } else { + $two = '2'; + } + + if ( empty( $this->_actions ) ) + return; + + echo "\n"; + + submit_button( __( 'Apply' ), 'action', false, false, array( 'id' => "doaction$two" ) ); + echo "\n"; + } + + /** + * Get the current action selected from the bulk actions dropdown. + * + * @since 3.1.0 + * @access public + * + * @return string|bool The action name or False if no action was selected + */ + function current_action() { + if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] ) + return $_REQUEST['action']; + + if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] ) + return $_REQUEST['action2']; + + return false; + } + + /** + * Generate row actions div + * + * @since 3.1.0 + * @access protected + * + * @param array $actions The list of actions + * @param bool $always_visible Whether the actions should be always visible + * @return string + */ + function row_actions( $actions, $always_visible = false ) { + $action_count = count( $actions ); + $i = 0; + + if ( !$action_count ) + return ''; + + $out = '
    '; + foreach ( $actions as $action => $link ) { + ++$i; + ( $i == $action_count ) ? $sep = '' : $sep = ' | '; + $out .= "$link$sep"; + } + $out .= '
    '; + + return $out; + } + + /** + * Display a monthly dropdown for filtering items + * + * @since 3.1.0 + * @access protected + */ + function months_dropdown( $post_type ) { + global $wpdb, $wp_locale; + + $months = $wpdb->get_results( $wpdb->prepare( " + SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month + FROM $wpdb->posts + WHERE post_type = %s + ORDER BY post_date DESC + ", $post_type ) ); + + /** + * Filter the 'Months' drop-down results. + * + * @since 3.7.0 + * + * @param object $months The months drop-down query results. + * @param string $post_type The post type. + */ + $months = apply_filters( 'months_dropdown_results', $months, $post_type ); + + $month_count = count( $months ); + + if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) ) + return; + + $m = isset( $_GET['m'] ) ? (int) $_GET['m'] : 0; +?> + + __( 'List View' ), + 'excerpt' => __( 'Excerpt View' ) + ); + +?> + +
    + $title ) { + $class = ( $current_mode == $mode ) ? 'class="current"' : ''; + echo "$title\n"; + } + ?> +
    +'; + + echo "" . number_format_i18n( get_comments_number() ) . ""; + + if ( $pending_comments ) + echo ''; + } + + /** + * Get the current page number + * + * @since 3.1.0 + * @access protected + * + * @return int + */ + function get_pagenum() { + $pagenum = isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 0; + + if( isset( $this->_pagination_args['total_pages'] ) && $pagenum > $this->_pagination_args['total_pages'] ) + $pagenum = $this->_pagination_args['total_pages']; + + return max( 1, $pagenum ); + } + + /** + * Get number of items to display on a single page + * + * @since 3.1.0 + * @access protected + * + * @return int + */ + function get_items_per_page( $option, $default = 20 ) { + $per_page = (int) get_user_option( $option ); + if ( empty( $per_page ) || $per_page < 1 ) + $per_page = $default; + + /** + * Filter the number of items to be displayed on each page of the list table. + * + * The dynamic hook name, $option, refers to the per page option depending + * on the type of list table in use. Possible values may include: + * 'edit_comments_per_page', 'sites_network_per_page', 'site_themes_network_per_page', + * 'themes_netework_per_page', 'users_network_per_page', 'edit_{$post_type}', etc. + * + * @since 2.9.0 + * + * @param int $per_page Number of items to be displayed. Default 20. + */ + return (int) apply_filters( $option, $per_page ); + } + + /** + * Display the pagination. + * + * @since 3.1.0 + * @access protected + */ + function pagination( $which ) { + if ( empty( $this->_pagination_args ) ) + return; + + extract( $this->_pagination_args, EXTR_SKIP ); + + $output = '' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . ''; + + $current = $this->get_pagenum(); + + $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); + + $current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url ); + + $page_links = array(); + + $disable_first = $disable_last = ''; + if ( $current == 1 ) + $disable_first = ' disabled'; + if ( $current == $total_pages ) + $disable_last = ' disabled'; + + $page_links[] = sprintf( "%s", + 'first-page' . $disable_first, + esc_attr__( 'Go to the first page' ), + esc_url( remove_query_arg( 'paged', $current_url ) ), + '«' + ); + + $page_links[] = sprintf( "%s", + 'prev-page' . $disable_first, + esc_attr__( 'Go to the previous page' ), + esc_url( add_query_arg( 'paged', max( 1, $current-1 ), $current_url ) ), + '‹' + ); + + if ( 'bottom' == $which ) + $html_current_page = $current; + else + $html_current_page = sprintf( "", + esc_attr__( 'Current page' ), + $current, + strlen( $total_pages ) + ); + + $html_total_pages = sprintf( "%s", number_format_i18n( $total_pages ) ); + $page_links[] = '' . sprintf( _x( '%1$s of %2$s', 'paging' ), $html_current_page, $html_total_pages ) . ''; + + $page_links[] = sprintf( "%s", + 'next-page' . $disable_last, + esc_attr__( 'Go to the next page' ), + esc_url( add_query_arg( 'paged', min( $total_pages, $current+1 ), $current_url ) ), + '›' + ); + + $page_links[] = sprintf( "%s", + 'last-page' . $disable_last, + esc_attr__( 'Go to the last page' ), + esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ), + '»' + ); + + $pagination_links_class = 'pagination-links'; + if ( ! empty( $infinite_scroll ) ) + $pagination_links_class = ' hide-if-js'; + $output .= "\n" . join( "\n", $page_links ) . ''; + + if ( $total_pages ) + $page_class = $total_pages < 2 ? ' one-page' : ''; + else + $page_class = ' no-pages'; + + $this->_pagination = "
    $output
    "; + + echo $this->_pagination; + } + + /** + * Get a list of columns. The format is: + * 'internal-name' => 'Title' + * + * @since 3.1.0 + * @access protected + * @abstract + * + * @return array + */ + function get_columns() { + die( 'function WP_List_Table::get_columns() must be over-ridden in a sub-class.' ); + } + + /** + * Get a list of sortable columns. The format is: + * 'internal-name' => 'orderby' + * or + * 'internal-name' => array( 'orderby', true ) + * + * The second format will make the initial sorting order be descending + * + * @since 3.1.0 + * @access protected + * + * @return array + */ + function get_sortable_columns() { + return array(); + } + + /** + * Get a list of all, hidden and sortable columns, with filter applied + * + * @since 3.1.0 + * @access protected + * + * @return array + */ + function get_column_info() { + if ( isset( $this->_column_headers ) ) + return $this->_column_headers; + + $columns = get_column_headers( $this->screen ); + $hidden = get_hidden_columns( $this->screen ); + + $sortable_columns = $this->get_sortable_columns(); + /** + * Filter the list table sortable columns for a specific screen. + * + * The dynamic portion of the hook name, $this->screen->id, refers + * to the ID of the current screen, usually a string. + * + * @since 3.5.0 + * + * @param array $sortable_columns An array of sortable columns. + */ + $_sortable = apply_filters( "manage_{$this->screen->id}_sortable_columns", $sortable_columns ); + + $sortable = array(); + foreach ( $_sortable as $id => $data ) { + if ( empty( $data ) ) + continue; + + $data = (array) $data; + if ( !isset( $data[1] ) ) + $data[1] = false; + + $sortable[$id] = $data; + } + + $this->_column_headers = array( $columns, $hidden, $sortable ); + + return $this->_column_headers; + } + + /** + * Return number of visible columns + * + * @since 3.1.0 + * @access public + * + * @return int + */ + function get_column_count() { + list ( $columns, $hidden ) = $this->get_column_info(); + $hidden = array_intersect( array_keys( $columns ), array_filter( $hidden ) ); + return count( $columns ) - count( $hidden ); + } + + /** + * Print column headers, accounting for hidden and sortable columns. + * + * @since 3.1.0 + * @access protected + * + * @param bool $with_id Whether to set the id attribute or not + */ + function print_column_headers( $with_id = true ) { + list( $columns, $hidden, $sortable ) = $this->get_column_info(); + + $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); + $current_url = remove_query_arg( 'paged', $current_url ); + + if ( isset( $_GET['orderby'] ) ) + $current_orderby = $_GET['orderby']; + else + $current_orderby = ''; + + if ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] ) + $current_order = 'desc'; + else + $current_order = 'asc'; + + if ( ! empty( $columns['cb'] ) ) { + static $cb_counter = 1; + $columns['cb'] = '' + . ''; + $cb_counter++; + } + + foreach ( $columns as $column_key => $column_display_name ) { + $class = array( 'manage-column', "column-$column_key" ); + + $style = ''; + if ( in_array( $column_key, $hidden ) ) + $style = 'display:none;'; + + $style = ' style="' . $style . '"'; + + if ( 'cb' == $column_key ) + $class[] = 'check-column'; + elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ) ) ) + $class[] = 'num'; + + if ( isset( $sortable[$column_key] ) ) { + list( $orderby, $desc_first ) = $sortable[$column_key]; + + if ( $current_orderby == $orderby ) { + $order = 'asc' == $current_order ? 'desc' : 'asc'; + $class[] = 'sorted'; + $class[] = $current_order; + } else { + $order = $desc_first ? 'desc' : 'asc'; + $class[] = 'sortable'; + $class[] = $desc_first ? 'asc' : 'desc'; + } + + $column_display_name = '' . $column_display_name . ''; + } + + $id = $with_id ? "id='$column_key'" : ''; + + if ( !empty( $class ) ) + $class = "class='" . join( ' ', $class ) . "'"; + + echo "$column_display_name"; + } + } + + /** + * Display the table + * + * @since 3.1.0 + * @access public + */ + function display() { + extract( $this->_args ); + + $this->display_tablenav( 'top' ); + +?> + + + + print_column_headers(); ?> + + + + + + print_column_headers( false ); ?> + + + + > + display_rows_or_placeholder(); ?> + +
    +display_tablenav( 'bottom' ); + } + + /** + * Get a list of CSS classes for the tag + * + * @since 3.1.0 + * @access protected + * + * @return array + */ + function get_table_classes() { + return array( 'widefat', 'fixed', $this->_args['plural'] ); + } + + /** + * Generate the table navigation above or below the table + * + * @since 3.1.0 + * @access protected + */ + function display_tablenav( $which ) { + if ( 'top' == $which ) + wp_nonce_field( 'bulk-' . $this->_args['plural'] ); +?> +
    + +
    + bulk_actions(); ?> +
    +extra_tablenav( $which ); + $this->pagination( $which ); +?> + +
    +
    + part of the table + * + * @since 3.1.0 + * @access protected + */ + function display_rows_or_placeholder() { + if ( $this->has_items() ) { + $this->display_rows(); + } else { + list( $columns, $hidden ) = $this->get_column_info(); + echo ''; + } + } + + /** + * Generate the table rows + * + * @since 3.1.0 + * @access protected + */ + function display_rows() { + foreach ( $this->items as $item ) + $this->single_row( $item ); + } + + /** + * Generates content for a single row of the table + * + * @since 3.1.0 + * @access protected + * + * @param object $item The current item + */ + function single_row( $item ) { + static $row_class = ''; + $row_class = ( $row_class == '' ? ' class="alternate"' : '' ); + + echo ''; + $this->single_row_columns( $item ); + echo ''; + } + + /** + * Generates the columns for a single row of the table + * + * @since 3.1.0 + * @access protected + * + * @param object $item The current item + */ + function single_row_columns( $item ) { + list( $columns, $hidden ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $class = "class='$column_name column-$column_name'"; + + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + $attributes = "$class$style"; + + if ( 'cb' == $column_name ) { + echo ''; + } + elseif ( method_exists( $this, 'column_' . $column_name ) ) { + echo ""; + } + else { + echo ""; + } + } + } + + /** + * Handle an incoming ajax request (called from admin-ajax.php) + * + * @since 3.1.0 + * @access public + */ + function ajax_response() { + $this->prepare_items(); + + extract( $this->_args ); + extract( $this->_pagination_args, EXTR_SKIP ); + + ob_start(); + if ( ! empty( $_REQUEST['no_placeholder'] ) ) + $this->display_rows(); + else + $this->display_rows_or_placeholder(); + + $rows = ob_get_clean(); + + $response = array( 'rows' => $rows ); + + if ( isset( $total_items ) ) + $response['total_items_i18n'] = sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ); + + if ( isset( $total_pages ) ) { + $response['total_pages'] = $total_pages; + $response['total_pages_i18n'] = number_format_i18n( $total_pages ); + } + + die( json_encode( $response ) ); + } + + /** + * Send required variables to JavaScript land + * + * @access private + */ + function _js_vars() { + $args = array( + 'class' => get_class( $this ), + 'screen' => array( + 'id' => $this->screen->id, + 'base' => $this->screen->base, + ) + ); + + printf( "\n", json_encode( $args ) ); + } +} diff --git a/src/wp-admin/includes/class-wp-media-list-table.php b/src/wp-admin/includes/class-wp-media-list-table.php new file mode 100644 index 0000000..1f0067d --- /dev/null +++ b/src/wp-admin/includes/class-wp-media-list-table.php @@ -0,0 +1,437 @@ +detached = isset( $_REQUEST['detached'] ) || isset( $_REQUEST['find_detached'] ); + + parent::__construct( array( + 'plural' => 'media', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + function ajax_user_can() { + return current_user_can('upload_files'); + } + + function prepare_items() { + global $lost, $wpdb, $wp_query, $post_mime_types, $avail_post_mime_types; + + $q = $_REQUEST; + + if ( !empty( $lost ) ) + $q['post__in'] = implode( ',', $lost ); + + list( $post_mime_types, $avail_post_mime_types ) = wp_edit_attachments_query( $q ); + + $this->is_trash = isset( $_REQUEST['status'] ) && 'trash' == $_REQUEST['status']; + + $this->set_pagination_args( array( + 'total_items' => $wp_query->found_posts, + 'total_pages' => $wp_query->max_num_pages, + 'per_page' => $wp_query->query_vars['posts_per_page'], + ) ); + } + + function get_views() { + global $wpdb, $post_mime_types, $avail_post_mime_types; + + $type_links = array(); + $_num_posts = (array) wp_count_attachments(); + $_total_posts = array_sum($_num_posts) - $_num_posts['trash']; + $total_orphans = $wpdb->get_var( "SELECT COUNT( * ) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent < 1" ); + $matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts)); + foreach ( $matches as $type => $reals ) + foreach ( $reals as $real ) + $num_posts[$type] = ( isset( $num_posts[$type] ) ) ? $num_posts[$type] + $_num_posts[$real] : $_num_posts[$real]; + + $class = ( empty($_GET['post_mime_type']) && !$this->detached && !isset($_GET['status']) ) ? ' class="current"' : ''; + $type_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $_total_posts, 'uploaded files' ), number_format_i18n( $_total_posts ) ) . ''; + foreach ( $post_mime_types as $mime_type => $label ) { + $class = ''; + + if ( !wp_match_mime_types($mime_type, $avail_post_mime_types) ) + continue; + + if ( !empty($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type']) ) + $class = ' class="current"'; + if ( !empty( $num_posts[$mime_type] ) ) + $type_links[$mime_type] = "" . sprintf( translate_nooped_plural( $label[2], $num_posts[$mime_type] ), number_format_i18n( $num_posts[$mime_type] )) . ''; + } + $type_links['detached'] = 'detached ? ' class="current"' : '' ) . '>' . sprintf( _nx( 'Unattached (%s)', 'Unattached (%s)', $total_orphans, 'detached files' ), number_format_i18n( $total_orphans ) ) . ''; + + if ( !empty($_num_posts['trash']) ) + $type_links['trash'] = '' . sprintf( _nx( 'Trash (%s)', 'Trash (%s)', $_num_posts['trash'], 'uploaded files' ), number_format_i18n( $_num_posts['trash'] ) ) . ''; + + return $type_links; + } + + function get_bulk_actions() { + $actions = array(); + $actions['delete'] = __( 'Delete Permanently' ); + if ( $this->detached ) + $actions['attach'] = __( 'Attach to a post' ); + + return $actions; + } + + function extra_tablenav( $which ) { +?> +
    +detached && !$this->is_trash ) { + $this->months_dropdown( 'attachment' ); + + do_action( 'restrict_manage_posts' ); + submit_button( __( 'Filter' ), 'button', false, false, array( 'id' => 'post-query-submit' ) ); + } + + if ( $this->detached ) { + submit_button( __( 'Scan for lost attachments' ), 'secondary', 'find_detached', false ); + } elseif ( $this->is_trash && current_user_can( 'edit_others_posts' ) ) { + submit_button( __( 'Empty Trash' ), 'apply', 'delete_all', false ); + } ?> +
    +'; + $posts_columns['icon'] = ''; + /* translators: column name */ + $posts_columns['title'] = _x( 'File', 'column name' ); + $posts_columns['author'] = __( 'Author' ); + + $taxonomies = array(); + + $taxonomies = get_taxonomies_for_attachments( 'objects' ); + $taxonomies = wp_filter_object_list( $taxonomies, array( 'show_admin_column' => true ), 'and', 'name' ); + + $taxonomies = apply_filters( 'manage_taxonomies_for_attachment_columns', $taxonomies, 'attachment' ); + $taxonomies = array_filter( $taxonomies, 'taxonomy_exists' ); + + foreach ( $taxonomies as $taxonomy ) { + if ( 'category' == $taxonomy ) + $column_key = 'categories'; + elseif ( 'post_tag' == $taxonomy ) + $column_key = 'tags'; + else + $column_key = 'taxonomy-' . $taxonomy; + + $posts_columns[ $column_key ] = get_taxonomy( $taxonomy )->labels->name; + } + + /* translators: column name */ + if ( !$this->detached ) { + $posts_columns['parent'] = _x( 'Uploaded to', 'column name' ); + if ( post_type_supports( 'attachment', 'comments' ) ) + $posts_columns['comments'] = '
    '; + } + /* translators: column name */ + $posts_columns['date'] = _x( 'Date', 'column name' ); + $posts_columns = apply_filters( 'manage_media_columns', $posts_columns, $this->detached ); + + return $posts_columns; + } + + function get_sortable_columns() { + return array( + 'title' => 'title', + 'author' => 'author', + 'parent' => 'parent', + 'comments' => 'comment_count', + 'date' => array( 'date', true ), + ); + } + + function display_rows() { + global $post; + + add_filter( 'the_title','esc_html' ); + $alt = ''; + + while ( have_posts() ) : the_post(); + $user_can_edit = current_user_can( 'edit_post', $post->ID ); + + if ( $this->is_trash && $post->post_status != 'trash' + || !$this->is_trash && $post->post_status == 'trash' ) + continue; + + $alt = ( 'alternate' == $alt ) ? '' : 'alternate'; + $post_owner = ( get_current_user_id() == $post->post_author ) ? 'self' : 'other'; + $att_title = _draft_or_post_title(); +?> + post_status ); ?>' valign="top"> +get_column_info(); +foreach ( $columns as $column_name => $column_display_name ) { + $class = "class='$column_name column-$column_name'"; + + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + $attributes = $class . $style; + + switch ( $column_name ) { + + case 'cb': +?> + + + + + + + + + +post_date ) { + $h_time = __( 'Unpublished' ); + } else { + $m_time = $post->post_date; + $time = get_post_time( 'G', true, $post, false ); + if ( ( abs( $t_diff = time() - $time ) ) < DAY_IN_SECONDS ) { + if ( $t_diff < 0 ) + $h_time = sprintf( __( '%s from now' ), human_time_diff( $time ) ); + else + $h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) ); + } else { + $h_time = mysql2date( __( 'Y/m/d' ), $m_time ); + } + } +?> + +post_parent > 0 ) + $parent = get_post( $post->post_parent ); + else + $parent = false; + + if ( $parent ) { + $title = _draft_or_post_title( $post->post_parent ); + $parent_type = get_post_type_object( $parent->post_type ); +?> + + + + + +'; + if ( $terms = get_the_terms( $post->ID, $taxonomy ) ) { + $out = array(); + foreach ( $terms as $t ) { + $posts_in_term_qv = array(); + $posts_in_term_qv['taxonomy'] = $taxonomy; + $posts_in_term_qv['term'] = $t->slug; + + $out[] = sprintf( '%s', + esc_url( add_query_arg( $posts_in_term_qv, 'upload.php' ) ), + esc_html( sanitize_term_field( 'name', $t->name, $t->term_id, $taxonomy, 'display' ) ) + ); + } + /* translators: used between list items, there is a space after the comma */ + echo join( __( ', ' ), $out ); + } else { + echo '—'; + } + echo ''; + break; + } +?> + + + +detached ) { + if ( current_user_can( 'edit_post', $post->ID ) ) + $actions['edit'] = '' . __( 'Edit' ) . ''; + if ( current_user_can( 'delete_post', $post->ID ) ) + if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) { + $actions['trash'] = "ID ) . "'>" . __( 'Trash' ) . ""; + } else { + $delete_ays = !MEDIA_TRASH ? " onclick='return showNotice.warn();'" : ''; + $actions['delete'] = "ID ) . "'>" . __( 'Delete Permanently' ) . ""; + } + $actions['view'] = '' . __( 'View' ) . ''; + if ( current_user_can( 'edit_post', $post->ID ) ) + $actions['attach'] = ''.__( 'Attach' ).''; + } + else { + if ( current_user_can( 'edit_post', $post->ID ) && !$this->is_trash ) + $actions['edit'] = '' . __( 'Edit' ) . ''; + if ( current_user_can( 'delete_post', $post->ID ) ) { + if ( $this->is_trash ) + $actions['untrash'] = "ID ) . "'>" . __( 'Restore' ) . ""; + elseif ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) + $actions['trash'] = "ID ) . "'>" . __( 'Trash' ) . ""; + if ( $this->is_trash || !EMPTY_TRASH_DAYS || !MEDIA_TRASH ) { + $delete_ays = ( !$this->is_trash && !MEDIA_TRASH ) ? " onclick='return showNotice.warn();'" : ''; + $actions['delete'] = "ID ) . "'>" . __( 'Delete Permanently' ) . ""; + } + } + if ( !$this->is_trash ) { + $title =_draft_or_post_title( $post->post_parent ); + $actions['view'] = '' . __( 'View' ) . ''; + } + } + + $actions = apply_filters( 'media_row_actions', $actions, $post, $this->detached ); + + return $actions; + } +} diff --git a/src/wp-admin/includes/class-wp-ms-sites-list-table.php b/src/wp-admin/includes/class-wp-ms-sites-list-table.php new file mode 100644 index 0000000..f9b33e4 --- /dev/null +++ b/src/wp-admin/includes/class-wp-ms-sites-list-table.php @@ -0,0 +1,388 @@ + 'sites', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + function ajax_user_can() { + return current_user_can( 'manage_sites' ); + } + + function prepare_items() { + global $s, $mode, $wpdb; + + $current_site = get_current_site(); + + $mode = ( empty( $_REQUEST['mode'] ) ) ? 'list' : $_REQUEST['mode']; + + $per_page = $this->get_items_per_page( 'sites_network_per_page' ); + + $pagenum = $this->get_pagenum(); + + $s = isset( $_REQUEST['s'] ) ? wp_unslash( trim( $_REQUEST[ 's' ] ) ) : ''; + $wild = ''; + if ( false !== strpos($s, '*') ) { + $wild = '%'; + $s = trim($s, '*'); + } + + $like_s = esc_sql( like_escape( $s ) ); + + // If the network is large and a search is not being performed, show only the latest blogs with no paging in order + // to avoid expensive count queries. + if ( !$s && wp_is_large_network() ) { + if ( !isset($_REQUEST['orderby']) ) + $_GET['orderby'] = $_REQUEST['orderby'] = ''; + if ( !isset($_REQUEST['order']) ) + $_GET['order'] = $_REQUEST['order'] = 'DESC'; + } + + $query = "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' "; + + if ( empty($s) ) { + // Nothing to do. + } elseif ( preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $s ) || + preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s ) || + preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s ) || + preg_match( '/^[0-9]{1,3}\.$/', $s ) ) { + // IPv4 address + $reg_blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->registration_log} WHERE {$wpdb->registration_log}.IP LIKE ( '{$like_s}$wild' )" ); + + if ( !$reg_blog_ids ) + $reg_blog_ids = array( 0 ); + + $query = "SELECT * + FROM {$wpdb->blogs} + WHERE site_id = '{$wpdb->siteid}' + AND {$wpdb->blogs}.blog_id IN (" . implode( ', ', $reg_blog_ids ) . ")"; + } else { + if ( is_numeric($s) && empty( $wild ) ) { + $query .= " AND ( {$wpdb->blogs}.blog_id = '{$like_s}' )"; + } elseif ( is_subdomain_install() ) { + $blog_s = str_replace( '.' . $current_site->domain, '', $like_s ); + $blog_s .= $wild . '.' . $current_site->domain; + $query .= " AND ( {$wpdb->blogs}.domain LIKE '$blog_s' ) "; + } else { + if ( $like_s != trim('/', $current_site->path) ) + $blog_s = $current_site->path . $like_s . $wild . '/'; + else + $blog_s = $like_s; + $query .= " AND ( {$wpdb->blogs}.path LIKE '$blog_s' )"; + } + } + + $order_by = isset( $_REQUEST['orderby'] ) ? $_REQUEST['orderby'] : ''; + if ( $order_by == 'registered' ) { + $query .= ' ORDER BY registered '; + } elseif ( $order_by == 'lastupdated' ) { + $query .= ' ORDER BY last_updated '; + } elseif ( $order_by == 'blogname' ) { + if ( is_subdomain_install() ) + $query .= ' ORDER BY domain '; + else + $query .= ' ORDER BY path '; + } elseif ( $order_by == 'blog_id' ) { + $query .= ' ORDER BY blog_id '; + } else { + $order_by = null; + } + + if ( isset( $order_by ) ) { + $order = ( isset( $_REQUEST['order'] ) && 'DESC' == strtoupper( $_REQUEST['order'] ) ) ? "DESC" : "ASC"; + $query .= $order; + } + + // Don't do an unbounded count on large networks + if ( ! wp_is_large_network() ) + $total = $wpdb->get_var( str_replace( 'SELECT *', 'SELECT COUNT( blog_id )', $query ) ); + + $query .= " LIMIT " . intval( ( $pagenum - 1 ) * $per_page ) . ", " . intval( $per_page ); + $this->items = $wpdb->get_results( $query, ARRAY_A ); + + if ( wp_is_large_network() ) + $total = count($this->items); + + $this->set_pagination_args( array( + 'total_items' => $total, + 'per_page' => $per_page, + ) ); + } + + function no_items() { + _e( 'No sites found.' ); + } + + function get_bulk_actions() { + $actions = array(); + if ( current_user_can( 'delete_sites' ) ) + $actions['delete'] = __( 'Delete' ); + $actions['spam'] = _x( 'Mark as Spam', 'site' ); + $actions['notspam'] = _x( 'Not Spam', 'site' ); + + return $actions; + } + + function pagination( $which ) { + global $mode; + + parent::pagination( $which ); + + if ( 'top' == $which ) + $this->view_switcher( $mode ); + } + + function get_columns() { + $blogname_columns = ( is_subdomain_install() ) ? __( 'Domain' ) : __( 'Path' ); + $sites_columns = array( + 'cb' => '', + 'blogname' => $blogname_columns, + 'lastupdated' => __( 'Last Updated' ), + 'registered' => _x( 'Registered', 'site' ), + 'users' => __( 'Users' ) + ); + + if ( has_filter( 'wpmublogsaction' ) ) + $sites_columns['plugins'] = __( 'Actions' ); + + /** + * Filter the displayed site columns in Sites list table. + * + * @since MU + * + * @param array $sites_columns An array of displayed site columns. Default 'cb', + * 'blogname', 'lastupdated', 'registered', 'users'. + */ + $sites_columns = apply_filters( 'wpmu_blogs_columns', $sites_columns ); + + return $sites_columns; + } + + function get_sortable_columns() { + return array( + 'blogname' => 'blogname', + 'lastupdated' => 'lastupdated', + 'registered' => 'blog_id', + ); + } + + function display_rows() { + global $mode; + + $status_list = array( + 'archived' => array( 'site-archived', __( 'Archived' ) ), + 'spam' => array( 'site-spammed', _x( 'Spam', 'site' ) ), + 'deleted' => array( 'site-deleted', __( 'Deleted' ) ), + 'mature' => array( 'site-mature', __( 'Mature' ) ) + ); + + $class = ''; + foreach ( $this->items as $blog ) { + $class = ( 'alternate' == $class ) ? '' : 'alternate'; + reset( $status_list ); + + $blog_states = array(); + foreach ( $status_list as $status => $col ) { + if ( get_blog_status( $blog['blog_id'], $status ) == 1 ) { + $class = $col[0]; + $blog_states[] = $col[1]; + } + } + $blog_state = ''; + if ( ! empty( $blog_states ) ) { + $state_count = count( $blog_states ); + $i = 0; + $blog_state .= ' - '; + foreach ( $blog_states as $state ) { + ++$i; + ( $i == $state_count ) ? $sep = '' : $sep = ', '; + $blog_state .= "$state$sep"; + } + } + echo ""; + + $blogname = ( is_subdomain_install() ) ? str_replace( '.' . get_current_site()->domain, '', $blog['domain'] ) : $blog['path']; + + list( $columns, $hidden ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + switch ( $column_name ) { + case 'cb': ?> + + + + "; ?> + + ' . sprintf( _x( '%1$s – %2$s', '%1$s: site name. %2$s: site tagline.' ), get_option( 'blogname' ), get_option( 'blogdescription ' ) ) . '

    '; + restore_current_blog(); + } + + // Preordered. + $actions = array( + 'edit' => '', 'backend' => '', + 'activate' => '', 'deactivate' => '', + 'archive' => '', 'unarchive' => '', + 'spam' => '', 'unspam' => '', + 'delete' => '', + 'visit' => '', + ); + + $actions['edit'] = '' . __( 'Edit' ) . ''; + $actions['backend'] = "" . __( 'Dashboard' ) . ''; + if ( get_current_site()->blog_id != $blog['blog_id'] ) { + if ( get_blog_status( $blog['blog_id'], 'deleted' ) == '1' ) + $actions['activate'] = '' . __( 'Activate' ) . ''; + else + $actions['deactivate'] = '' . __( 'Deactivate' ) . ''; + + if ( get_blog_status( $blog['blog_id'], 'archived' ) == '1' ) + $actions['unarchive'] = '' . __( 'Unarchive' ) . ''; + else + $actions['archive'] = '' . _x( 'Archive', 'verb; site' ) . ''; + + if ( get_blog_status( $blog['blog_id'], 'spam' ) == '1' ) + $actions['unspam'] = '' . _x( 'Not Spam', 'site' ) . ''; + else + $actions['spam'] = '' . _x( 'Spam', 'site' ) . ''; + + if ( current_user_can( 'delete_site', $blog['blog_id'] ) ) + $actions['delete'] = '' . __( 'Delete' ) . ''; + } + + $actions['visit'] = "" . __( 'Visit' ) . ''; + + /** + * Filter the action links displayed for each site in the Sites list table. + * + * The 'Edit', 'Dashboard', 'Delete', and 'Visit' links are displayed by + * default for each site. The site's status determines whether to show the + * 'Activate' or 'Deactivate' link, 'Unarchive' or 'Archive' links, and + * 'Not Spam' or 'Spam' link for each site. + * + * @since 3.1.0 + * + * @param array $actions An array of action links to be displayed. + * @param int $blog_id The site ID. + * @param string $blogname Site path, formatted depending on whether it is a sub-domain + * or subdirectory multisite install. + */ + $actions = apply_filters( 'manage_sites_action_links', array_filter( $actions ), $blog['blog_id'], $blogname ); + echo $this->row_actions( $actions ); + ?> + + "; + if ( 'list' == $mode ) + $date = 'Y/m/d'; + else + $date = 'Y/m/d \<\b\r \/\> g:i:s a'; + echo ( $blog['last_updated'] == '0000-00-00 00:00:00' ) ? __( 'Never' ) : mysql2date( $date, $blog['last_updated'] ); ?> + + "; + if ( $blog['registered'] == '0000-00-00 00:00:00' ) + echo '—'; + else + echo mysql2date( $date, $blog['registered'] ); + ?> + + "; + $blogusers = get_users( array( 'blog_id' => $blog['blog_id'], 'number' => 6) ); + if ( is_array( $blogusers ) ) { + $blogusers_warning = ''; + if ( count( $blogusers ) > 5 ) { + $blogusers = array_slice( $blogusers, 0, 5 ); + $blogusers_warning = __( 'Only showing first 5 users.' ) . ' ' . __( 'More' ) . ''; + } + foreach ( $blogusers as $user_object ) { + echo '' . esc_html( $user_object->user_login ) . ' '; + if ( 'list' != $mode ) + echo '( ' . $user_object->user_email . ' )'; + echo '
    '; + } + if ( $blogusers_warning != '' ) + echo '' . $blogusers_warning . '
    '; + } + ?> + + + "; + /** + * Fires inside the auxiliary 'Actions' column of the Sites list table. + * + * By default this column is hidden unless something is hooked to the action. + * + * @since MU + * + * @param int $blog_id The site ID. + */ + do_action( 'wpmublogsaction', $blog['blog_id'] ); ?> + + "; + /** + * Fires for each registered custom column in the Sites list table. + * + * @since 3.1.0 + * + * @param string $column_name The name of the column to display. + * @param int $blog_id The site ID. + */ + do_action( 'manage_sites_custom_column', $column_name, $blog['blog_id'] ); + echo ""; + break; + } + } + ?> + + 'themes', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + + $status = isset( $_REQUEST['theme_status'] ) ? $_REQUEST['theme_status'] : 'all'; + if ( !in_array( $status, array( 'all', 'enabled', 'disabled', 'upgrade', 'search', 'broken' ) ) ) + $status = 'all'; + + $page = $this->get_pagenum(); + + $this->is_site_themes = ( 'site-themes-network' == $this->screen->id ) ? true : false; + + if ( $this->is_site_themes ) + $this->site_id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0; + } + + function get_table_classes() { + return array( 'widefat', 'plugins' ); // todo: remove and add CSS for .themes + } + + function ajax_user_can() { + if ( $this->is_site_themes ) + return current_user_can( 'manage_sites' ); + else + return current_user_can( 'manage_network_themes' ); + } + + function prepare_items() { + global $status, $totals, $page, $orderby, $order, $s; + + wp_reset_vars( array( 'orderby', 'order', 's' ) ); + + $themes = array( + 'all' => apply_filters( 'all_themes', wp_get_themes() ), + 'search' => array(), + 'enabled' => array(), + 'disabled' => array(), + 'upgrade' => array(), + 'broken' => $this->is_site_themes ? array() : wp_get_themes( array( 'errors' => true ) ), + ); + + if ( $this->is_site_themes ) { + $themes_per_page = $this->get_items_per_page( 'site_themes_network_per_page' ); + $allowed_where = 'site'; + } else { + $themes_per_page = $this->get_items_per_page( 'themes_network_per_page' ); + $allowed_where = 'network'; + } + + $maybe_update = current_user_can( 'update_themes' ) && ! $this->is_site_themes && $current = get_site_transient( 'update_themes' ); + + foreach ( (array) $themes['all'] as $key => $theme ) { + if ( $this->is_site_themes && $theme->is_allowed( 'network' ) ) { + unset( $themes['all'][ $key ] ); + continue; + } + + if ( $maybe_update && isset( $current->response[ $key ] ) ) { + $themes['all'][ $key ]->update = true; + $themes['upgrade'][ $key ] = $themes['all'][ $key ]; + } + + $filter = $theme->is_allowed( $allowed_where, $this->site_id ) ? 'enabled' : 'disabled'; + $themes[ $filter ][ $key ] = $themes['all'][ $key ]; + } + + if ( $s ) { + $status = 'search'; + $themes['search'] = array_filter( array_merge( $themes['all'], $themes['broken'] ), array( $this, '_search_callback' ) ); + } + + $totals = array(); + foreach ( $themes as $type => $list ) + $totals[ $type ] = count( $list ); + + if ( empty( $themes[ $status ] ) && !in_array( $status, array( 'all', 'search' ) ) ) + $status = 'all'; + + $this->items = $themes[ $status ]; + WP_Theme::sort_by_name( $this->items ); + + $this->has_items = ! empty( $themes['all'] ); + $total_this_page = $totals[ $status ]; + + if ( $orderby ) { + $orderby = ucfirst( $orderby ); + $order = strtoupper( $order ); + + if ( $orderby == 'Name' ) { + if ( 'ASC' == $order ) + $this->items = array_reverse( $this->items ); + } else { + uasort( $this->items, array( $this, '_order_callback' ) ); + } + } + + $start = ( $page - 1 ) * $themes_per_page; + + if ( $total_this_page > $themes_per_page ) + $this->items = array_slice( $this->items, $start, $themes_per_page, true ); + + $this->set_pagination_args( array( + 'total_items' => $total_this_page, + 'per_page' => $themes_per_page, + ) ); + } + + function _search_callback( $theme ) { + static $term; + if ( is_null( $term ) ) + $term = wp_unslash( $_REQUEST['s'] ); + + foreach ( array( 'Name', 'Description', 'Author', 'Author', 'AuthorURI' ) as $field ) { + // Don't mark up; Do translate. + if ( false !== stripos( $theme->display( $field, false, true ), $term ) ) + return true; + } + + if ( false !== stripos( $theme->get_stylesheet(), $term ) ) + return true; + + if ( false !== stripos( $theme->get_template(), $term ) ) + return true; + + return false; + } + + // Not used by any core columns. + function _order_callback( $theme_a, $theme_b ) { + global $orderby, $order; + + $a = $theme_a[ $orderby ]; + $b = $theme_b[ $orderby ]; + + if ( $a == $b ) + return 0; + + if ( 'DESC' == $order ) + return ( $a < $b ) ? 1 : -1; + else + return ( $a < $b ) ? -1 : 1; + } + + function no_items() { + if ( ! $this->has_items ) + _e( 'No themes found.' ); + else + _e( 'You do not appear to have any themes available at this time.' ); + } + + function get_columns() { + global $status; + + return array( + 'cb' => '', + 'name' => __( 'Theme' ), + 'description' => __( 'Description' ), + ); + } + + function get_sortable_columns() { + return array( + 'name' => 'name', + ); + } + + function get_views() { + global $totals, $status; + + $status_links = array(); + foreach ( $totals as $type => $count ) { + if ( !$count ) + continue; + + switch ( $type ) { + case 'all': + $text = _nx( 'All (%s)', 'All (%s)', $count, 'themes' ); + break; + case 'enabled': + $text = _n( 'Enabled (%s)', 'Enabled (%s)', $count ); + break; + case 'disabled': + $text = _n( 'Disabled (%s)', 'Disabled (%s)', $count ); + break; + case 'upgrade': + $text = _n( 'Update Available (%s)', 'Update Available (%s)', $count ); + break; + case 'broken' : + $text = _n( 'Broken (%s)', 'Broken (%s)', $count ); + break; + } + + if ( $this->is_site_themes ) + $url = 'site-themes.php?id=' . $this->site_id; + else + $url = 'themes.php'; + + if ( 'search' != $type ) { + $status_links[$type] = sprintf( "%s", + esc_url( add_query_arg('theme_status', $type, $url) ), + ( $type == $status ) ? ' class="current"' : '', + sprintf( $text, number_format_i18n( $count ) ) + ); + } + } + + return $status_links; + } + + function get_bulk_actions() { + global $status; + + $actions = array(); + if ( 'enabled' != $status ) + $actions['enable-selected'] = $this->is_site_themes ? __( 'Enable' ) : __( 'Network Enable' ); + if ( 'disabled' != $status ) + $actions['disable-selected'] = $this->is_site_themes ? __( 'Disable' ) : __( 'Network Disable' ); + if ( ! $this->is_site_themes ) { + if ( current_user_can( 'update_themes' ) ) + $actions['update-selected'] = __( 'Update' ); + if ( current_user_can( 'delete_themes' ) ) + $actions['delete-selected'] = __( 'Delete' ); + } + return $actions; + } + + function display_rows() { + foreach ( $this->items as $theme ) + $this->single_row( $theme ); + } + + function single_row( $theme ) { + global $status, $page, $s, $totals; + + $context = $status; + + if ( $this->is_site_themes ) { + $url = "site-themes.php?id={$this->site_id}&"; + $allowed = $theme->is_allowed( 'site', $this->site_id ); + } else { + $url = 'themes.php?'; + $allowed = $theme->is_allowed( 'network' ); + } + + // preorder + $actions = array( + 'enable' => '', + 'disable' => '', + 'edit' => '', + 'delete' => '' + ); + + $stylesheet = $theme->get_stylesheet(); + $theme_key = urlencode( $stylesheet ); + + if ( ! $allowed ) { + if ( ! $theme->errors() ) + $actions['enable'] = '' . ( $this->is_site_themes ? __( 'Enable' ) : __( 'Network Enable' ) ) . ''; + } else { + $actions['disable'] = '' . ( $this->is_site_themes ? __( 'Disable' ) : __( 'Network Disable' ) ) . ''; + } + + if ( current_user_can('edit_themes') ) + $actions['edit'] = '' . __('Edit') . ''; + + if ( ! $allowed && current_user_can( 'delete_themes' ) && ! $this->is_site_themes && $stylesheet != get_option( 'stylesheet' ) && $stylesheet != get_option( 'template' ) ) + $actions['delete'] = '' . __( 'Delete' ) . ''; + + $actions = apply_filters( 'theme_action_links', array_filter( $actions ), $theme, $context ); + $actions = apply_filters( "theme_action_links_$stylesheet", $actions, $theme, $context ); + + $class = ! $allowed ? 'inactive' : 'active'; + $checkbox_id = "checkbox_" . md5( $theme->get('Name') ); + $checkbox = ""; + + $id = sanitize_html_class( $theme->get_stylesheet() ); + + if ( ! empty( $totals['upgrade'] ) && ! empty( $theme->update ) ) + $class .= ' update'; + + echo ""; + + list( $columns, $hidden ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + switch ( $column_name ) { + case 'cb': + echo ""; + break; + case 'name': + echo ""; + break; + case 'description': + echo ""; + break; + + default: + echo ""; + } + } + + echo ""; + + if ( $this->is_site_themes ) + remove_action( "after_theme_row_$stylesheet", 'wp_theme_update_row' ); + do_action( 'after_theme_row', $stylesheet, $theme, $status ); + do_action( "after_theme_row_$stylesheet", $stylesheet, $theme, $status ); + } +} diff --git a/src/wp-admin/includes/class-wp-ms-users-list-table.php b/src/wp-admin/includes/class-wp-ms-users-list-table.php new file mode 100644 index 0000000..271fe5a --- /dev/null +++ b/src/wp-admin/includes/class-wp-ms-users-list-table.php @@ -0,0 +1,301 @@ +get_items_per_page( 'users_network_per_page' ); + + $role = isset( $_REQUEST['role'] ) ? $_REQUEST['role'] : ''; + + $paged = $this->get_pagenum(); + + $args = array( + 'number' => $users_per_page, + 'offset' => ( $paged-1 ) * $users_per_page, + 'search' => $usersearch, + 'blog_id' => 0, + 'fields' => 'all_with_meta' + ); + + if ( wp_is_large_network( 'users' ) ) + $args['search'] = ltrim( $args['search'], '*' ); + + if ( $role == 'super' ) { + $logins = implode( "', '", get_super_admins() ); + $args['include'] = $wpdb->get_col( "SELECT ID FROM $wpdb->users WHERE user_login IN ('$logins')" ); + } + + // If the network is large and a search is not being performed, show only the latest users with no paging in order + // to avoid expensive count queries. + if ( !$usersearch && wp_is_large_network( 'users' ) ) { + if ( !isset($_REQUEST['orderby']) ) + $_GET['orderby'] = $_REQUEST['orderby'] = 'id'; + if ( !isset($_REQUEST['order']) ) + $_GET['order'] = $_REQUEST['order'] = 'DESC'; + $args['count_total'] = false; + } + + if ( isset( $_REQUEST['orderby'] ) ) + $args['orderby'] = $_REQUEST['orderby']; + + if ( isset( $_REQUEST['order'] ) ) + $args['order'] = $_REQUEST['order']; + + $mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode']; + + // Query the user IDs for this page + $wp_user_search = new WP_User_Query( $args ); + + $this->items = $wp_user_search->get_results(); + + $this->set_pagination_args( array( + 'total_items' => $wp_user_search->get_total(), + 'per_page' => $users_per_page, + ) ); + } + + function get_bulk_actions() { + $actions = array(); + if ( current_user_can( 'delete_users' ) ) + $actions['delete'] = __( 'Delete' ); + $actions['spam'] = _x( 'Mark as Spam', 'user' ); + $actions['notspam'] = _x( 'Not Spam', 'user' ); + + return $actions; + } + + function no_items() { + _e( 'No users found.' ); + } + + function get_views() { + global $wp_roles, $role; + + $total_users = get_user_count(); + $super_admins = get_super_admins(); + $total_admins = count( $super_admins ); + + $current_role = false; + $class = $role != 'super' ? ' class="current"' : ''; + $role_links = array(); + $role_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_users, 'users' ), number_format_i18n( $total_users ) ) . ''; + $class = $role == 'super' ? ' class="current"' : ''; + $role_links['super'] = "" . sprintf( _n( 'Super Admin (%s)', 'Super Admins (%s)', $total_admins ), number_format_i18n( $total_admins ) ) . ''; + + return $role_links; + } + + function pagination( $which ) { + global $mode; + + parent::pagination ( $which ); + + if ( 'top' == $which ) + $this->view_switcher( $mode ); + } + + function get_columns() { + $users_columns = array( + 'cb' => '', + 'username' => __( 'Username' ), + 'name' => __( 'Name' ), + 'email' => __( 'E-mail' ), + 'registered' => _x( 'Registered', 'user' ), + 'blogs' => __( 'Sites' ) + ); + /** + * Filter the columns displayed in the Network Admin Users list table. + * + * @since MU + * + * @param array $users_columns An array of user columns. Default 'cb', 'username', + * 'name', 'email', 'registered', 'blogs'. + */ + $users_columns = apply_filters( 'wpmu_users_columns', $users_columns ); + + return $users_columns; + } + + function get_sortable_columns() { + return array( + 'username' => 'login', + 'name' => 'name', + 'email' => 'email', + 'registered' => 'id', + ); + } + + function display_rows() { + global $mode; + + $alt = ''; + $super_admins = get_super_admins(); + foreach ( $this->items as $user ) { + $alt = ( 'alternate' == $alt ) ? '' : 'alternate'; + + $status_list = array( 'spam' => 'site-spammed', 'deleted' => 'site-deleted' ); + + foreach ( $status_list as $status => $col ) { + if ( $user->$status ) + $alt .= " $col"; + } + + ?> + + get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) : + $class = "class='$column_name column-$column_name'"; + + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + $attributes = "$class$style"; + + switch ( $column_name ) { + case 'cb': ?> + + user_email, 32 ); + $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user->ID ) ) ); + + echo " + $user->first_name $user->last_name"; + break; + + case 'email': + echo ""; + break; + + case 'registered': + if ( 'list' == $mode ) + $date = 'Y/m/d'; + else + $date = 'Y/m/d \<\b\r \/\> g:i:s a'; + + echo ""; + break; + + case 'blogs': + $blogs = get_blogs_of_user( $user->ID, true ); + echo " + "; + /** This filter is documented in wp-admin/includes/class-wp-users-list-table.php */ + echo apply_filters( 'manage_users_custom_column', '', $column_name, $user->ID ); + echo ""; + break; + } + endforeach + ?> + + get_pagenum(); + + $per_page = 30; + + // These are the tabs which are shown on the page + $tabs = array(); + $tabs['dashboard'] = __( 'Search' ); + if ( 'search' == $tab ) + $tabs['search'] = __( 'Search Results' ); + $tabs['upload'] = __( 'Upload' ); + $tabs['featured'] = _x( 'Featured', 'Plugin Installer' ); + $tabs['popular'] = _x( 'Popular', 'Plugin Installer' ); + $tabs['new'] = _x( 'Newest', 'Plugin Installer' ); + $tabs['favorites'] = _x( 'Favorites', 'Plugin Installer' ); + + $nonmenu_tabs = array( 'plugin-information' ); //Valid actions to perform which do not have a Menu item. + + /** + * Filter the tabs shown on the Plugin Install screen. + * + * @since 2.7.0 + * + * @param array $tabs The tabs shown on the Plugin Install screen. Defaults are 'dashboard', 'search', + * 'upload', 'featured', 'popular', 'new', and 'favorites'. + */ + $tabs = apply_filters( 'install_plugins_tabs', $tabs ); + + /** + * Filter tabs not associated with a menu item on the Plugin Install screen. + * + * @since 2.7.0 + * + * @param array $nonmenu_tabs The tabs that don't have a Menu item on the Plugin Install screen. + */ + $nonmenu_tabs = apply_filters( 'install_plugins_nonmenu_tabs', $nonmenu_tabs ); + + // If a non-valid menu tab has been selected, And it's not a non-menu action. + if ( empty( $tab ) || ( !isset( $tabs[ $tab ] ) && !in_array( $tab, (array) $nonmenu_tabs ) ) ) + $tab = key( $tabs ); + + $args = array( 'page' => $paged, 'per_page' => $per_page ); + + switch ( $tab ) { + case 'search': + $type = isset( $_REQUEST['type'] ) ? wp_unslash( $_REQUEST['type'] ) : 'term'; + $term = isset( $_REQUEST['s'] ) ? wp_unslash( $_REQUEST['s'] ) : ''; + + switch ( $type ) { + case 'tag': + $args['tag'] = sanitize_title_with_dashes( $term ); + break; + case 'term': + $args['search'] = $term; + break; + case 'author': + $args['author'] = $term; + break; + } + + add_action( 'install_plugins_table_header', 'install_search_form', 10, 0 ); + break; + + case 'featured': + case 'popular': + case 'new': + $args['browse'] = $tab; + break; + + case 'favorites': + $user = isset( $_GET['user'] ) ? wp_unslash( $_GET['user'] ) : get_user_option( 'wporg_favorites' ); + update_user_meta( get_current_user_id(), 'wporg_favorites', $user ); + if ( $user ) + $args['user'] = $user; + else + $args = false; + + add_action( 'install_plugins_favorites', 'install_plugins_favorites_form', 9, 0 ); + break; + + default: + $args = false; + break; + } + + /** + * Filter API request arguments for each Plugin Install screen tab. + * + * The dynamic portion of the hook name, $tab, refers to the plugin install tabs. + * Default tabs are 'dashboard', 'search', 'upload', 'featured', 'popular', 'new', + * and 'favorites'. + * + * @since 3.7.0 + * + * @param array|bool $args Plugin Install API arguments. + */ + $args = apply_filters( "install_plugins_table_api_args_$tab", $args ); + + if ( !$args ) + return; + + $api = plugins_api( 'query_plugins', $args ); + + if ( is_wp_error( $api ) ) + wp_die( $api->get_error_message() . '

    ' . __( 'Try again' ) . '' ); + + $this->items = $api->plugins; + + $this->set_pagination_args( array( + 'total_items' => $api->info['results'], + 'per_page' => $per_page, + ) ); + } + + function no_items() { + _e( 'No plugins match your request.' ); + } + + function get_views() { + global $tabs, $tab; + + $display_tabs = array(); + foreach ( (array) $tabs as $action => $text ) { + $class = ( $action == $tab ) ? ' class="current"' : ''; + $href = self_admin_url('plugin-install.php?tab=' . $action); + $display_tabs['plugin-install-'.$action] = "$text"; + } + + return $display_tabs; + } + + function display_tablenav( $which ) { + if ( 'top' == $which ) { ?> +

    +
    + +
    + pagination( $which ); ?> +
    +
    + +
    + pagination( $which ); ?> +
    +
    + _args ); + + return array( 'widefat', $plural ); + } + + function get_columns() { + return array( + 'name' => _x( 'Name', 'plugin name' ), + 'version' => __( 'Version' ), + 'rating' => __( 'Rating' ), + 'description' => __( 'Description' ), + ); + } + + function display_rows() { + $plugins_allowedtags = array( + 'a' => array( 'href' => array(),'title' => array(), 'target' => array() ), + 'abbr' => array( 'title' => array() ),'acronym' => array( 'title' => array() ), + 'code' => array(), 'pre' => array(), 'em' => array(),'strong' => array(), + 'ul' => array(), 'ol' => array(), 'li' => array(), 'p' => array(), 'br' => array() + ); + + list( $columns, $hidden ) = $this->get_column_info(); + + $style = array(); + foreach ( $columns as $column_name => $column_display_name ) { + $style[ $column_name ] = in_array( $column_name, $hidden ) ? 'style="display:none;"' : ''; + } + + foreach ( (array) $this->items as $plugin ) { + if ( is_object( $plugin ) ) + $plugin = (array) $plugin; + + $title = wp_kses( $plugin['name'], $plugins_allowedtags ); + //Limit description to 400char, and remove any HTML. + $description = strip_tags( $plugin['description'] ); + if ( strlen( $description ) > 400 ) + $description = mb_substr( $description, 0, 400 ) . '…'; + //remove any trailing entities + $description = preg_replace( '/&[^;\s]{0,6}$/', '', $description ); + //strip leading/trailing & multiple consecutive lines + $description = trim( $description ); + $description = preg_replace( "|(\r?\n)+|", "\n", $description ); + //\n =>
    + $description = nl2br( $description ); + $version = wp_kses( $plugin['version'], $plugins_allowedtags ); + + $name = strip_tags( $title . ' ' . $version ); + + $author = $plugin['author']; + if ( ! empty( $plugin['author'] ) ) + $author = ' ' . sprintf( __( 'By %s' ), $author ) . '.'; + + $author = wp_kses( $author, $plugins_allowedtags ); + + $action_links = array(); + $action_links[] = '' . __( 'Details' ) . ''; + + if ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) { + $status = install_plugin_install_status( $plugin ); + + switch ( $status['status'] ) { + case 'install': + if ( $status['url'] ) + $action_links[] = '' . __( 'Install Now' ) . ''; + break; + case 'update_available': + if ( $status['url'] ) + $action_links[] = '' . sprintf( __( 'Update Now' ), $status['version'] ) . ''; + break; + case 'latest_installed': + case 'newer_installed': + $action_links[] = '' . _x( 'Installed', 'plugin' ) . ''; + break; + } + } + + /** + * Filter the install action links for a plugin. + * + * @since 2.7.0 + * + * @param array $action_links An array of plugin action hyperlinks. Defaults are links to Details and Install Now. + * @param array $plugin The plugin currently being listed. + */ + $action_links = apply_filters( 'plugin_install_action_links', $action_links, $plugin ); + ?> + + + + + + + 'plugins', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + + $status = 'all'; + if ( isset( $_REQUEST['plugin_status'] ) && in_array( $_REQUEST['plugin_status'], array( 'active', 'inactive', 'recently_activated', 'upgrade', 'mustuse', 'dropins', 'search' ) ) ) + $status = $_REQUEST['plugin_status']; + + if ( isset($_REQUEST['s']) ) + $_SERVER['REQUEST_URI'] = add_query_arg('s', wp_unslash($_REQUEST['s']) ); + + $page = $this->get_pagenum(); + } + + function get_table_classes() { + return array( 'widefat', $this->_args['plural'] ); + } + + function ajax_user_can() { + return current_user_can('activate_plugins'); + } + + function prepare_items() { + global $status, $plugins, $totals, $page, $orderby, $order, $s; + + wp_reset_vars( array( 'orderby', 'order', 's' ) ); + + $plugins = array( + 'all' => apply_filters( 'all_plugins', get_plugins() ), + 'search' => array(), + 'active' => array(), + 'inactive' => array(), + 'recently_activated' => array(), + 'upgrade' => array(), + 'mustuse' => array(), + 'dropins' => array() + ); + + $screen = $this->screen; + + if ( ! is_multisite() || ( $screen->in_admin( 'network' ) && current_user_can( 'manage_network_plugins' ) ) ) { + if ( apply_filters( 'show_advanced_plugins', true, 'mustuse' ) ) + $plugins['mustuse'] = get_mu_plugins(); + if ( apply_filters( 'show_advanced_plugins', true, 'dropins' ) ) + $plugins['dropins'] = get_dropins(); + + if ( current_user_can( 'update_plugins' ) ) { + $current = get_site_transient( 'update_plugins' ); + foreach ( (array) $plugins['all'] as $plugin_file => $plugin_data ) { + if ( isset( $current->response[ $plugin_file ] ) ) { + $plugins['all'][ $plugin_file ]['update'] = true; + $plugins['upgrade'][ $plugin_file ] = $plugins['all'][ $plugin_file ]; + } + } + } + } + + set_transient( 'plugin_slugs', array_keys( $plugins['all'] ), DAY_IN_SECONDS ); + + if ( ! $screen->in_admin( 'network' ) ) { + $recently_activated = get_option( 'recently_activated', array() ); + + foreach ( $recently_activated as $key => $time ) + if ( $time + WEEK_IN_SECONDS < time() ) + unset( $recently_activated[$key] ); + update_option( 'recently_activated', $recently_activated ); + } + + foreach ( (array) $plugins['all'] as $plugin_file => $plugin_data ) { + // Filter into individual sections + if ( is_multisite() && ! $screen->in_admin( 'network' ) && is_network_only_plugin( $plugin_file ) ) { + unset( $plugins['all'][ $plugin_file ] ); + } elseif ( ! $screen->in_admin( 'network' ) && is_plugin_active_for_network( $plugin_file ) ) { + unset( $plugins['all'][ $plugin_file ] ); + } elseif ( ( ! $screen->in_admin( 'network' ) && is_plugin_active( $plugin_file ) ) + || ( $screen->in_admin( 'network' ) && is_plugin_active_for_network( $plugin_file ) ) ) { + $plugins['active'][ $plugin_file ] = $plugin_data; + } else { + if ( ! $screen->in_admin( 'network' ) && isset( $recently_activated[ $plugin_file ] ) ) // Was the plugin recently activated? + $plugins['recently_activated'][ $plugin_file ] = $plugin_data; + $plugins['inactive'][ $plugin_file ] = $plugin_data; + } + } + + if ( $s ) { + $status = 'search'; + $plugins['search'] = array_filter( $plugins['all'], array( $this, '_search_callback' ) ); + } + + $totals = array(); + foreach ( $plugins as $type => $list ) + $totals[ $type ] = count( $list ); + + if ( empty( $plugins[ $status ] ) && !in_array( $status, array( 'all', 'search' ) ) ) + $status = 'all'; + + $this->items = array(); + foreach ( $plugins[ $status ] as $plugin_file => $plugin_data ) { + // Translate, Don't Apply Markup, Sanitize HTML + $this->items[$plugin_file] = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, false, true ); + } + + $total_this_page = $totals[ $status ]; + + if ( $orderby ) { + $orderby = ucfirst( $orderby ); + $order = strtoupper( $order ); + + uasort( $this->items, array( $this, '_order_callback' ) ); + } + + $plugins_per_page = $this->get_items_per_page( str_replace( '-', '_', $screen->id . '_per_page' ), 999 ); + + $start = ( $page - 1 ) * $plugins_per_page; + + if ( $total_this_page > $plugins_per_page ) + $this->items = array_slice( $this->items, $start, $plugins_per_page ); + + $this->set_pagination_args( array( + 'total_items' => $total_this_page, + 'per_page' => $plugins_per_page, + ) ); + } + + function _search_callback( $plugin ) { + static $term; + if ( is_null( $term ) ) + $term = wp_unslash( $_REQUEST['s'] ); + + foreach ( $plugin as $value ) + if ( stripos( $value, $term ) !== false ) + return true; + + return false; + } + + function _order_callback( $plugin_a, $plugin_b ) { + global $orderby, $order; + + $a = $plugin_a[$orderby]; + $b = $plugin_b[$orderby]; + + if ( $a == $b ) + return 0; + + if ( 'DESC' == $order ) + return ( $a < $b ) ? 1 : -1; + else + return ( $a < $b ) ? -1 : 1; + } + + function no_items() { + global $plugins; + + if ( !empty( $plugins['all'] ) ) + _e( 'No plugins found.' ); + else + _e( 'You do not appear to have any plugins available at this time.' ); + } + + function get_columns() { + global $status; + + return array( + 'cb' => !in_array( $status, array( 'mustuse', 'dropins' ) ) ? '' : '', + 'name' => __( 'Plugin' ), + 'description' => __( 'Description' ), + ); + } + + function get_sortable_columns() { + return array(); + } + + function get_views() { + global $totals, $status; + + $status_links = array(); + foreach ( $totals as $type => $count ) { + if ( !$count ) + continue; + + switch ( $type ) { + case 'all': + $text = _nx( 'All (%s)', 'All (%s)', $count, 'plugins' ); + break; + case 'active': + $text = _n( 'Active (%s)', 'Active (%s)', $count ); + break; + case 'recently_activated': + $text = _n( 'Recently Active (%s)', 'Recently Active (%s)', $count ); + break; + case 'inactive': + $text = _n( 'Inactive (%s)', 'Inactive (%s)', $count ); + break; + case 'mustuse': + $text = _n( 'Must-Use (%s)', 'Must-Use (%s)', $count ); + break; + case 'dropins': + $text = _n( 'Drop-ins (%s)', 'Drop-ins (%s)', $count ); + break; + case 'upgrade': + $text = _n( 'Update Available (%s)', 'Update Available (%s)', $count ); + break; + } + + if ( 'search' != $type ) { + $status_links[$type] = sprintf( "%s", + add_query_arg('plugin_status', $type, 'plugins.php'), + ( $type == $status ) ? ' class="current"' : '', + sprintf( $text, number_format_i18n( $count ) ) + ); + } + } + + return $status_links; + } + + function get_bulk_actions() { + global $status; + + $actions = array(); + + if ( 'active' != $status ) + $actions['activate-selected'] = $this->screen->in_admin( 'network' ) ? __( 'Network Activate' ) : __( 'Activate' ); + + if ( 'inactive' != $status && 'recent' != $status ) + $actions['deactivate-selected'] = $this->screen->in_admin( 'network' ) ? __( 'Network Deactivate' ) : __( 'Deactivate' ); + + if ( !is_multisite() || $this->screen->in_admin( 'network' ) ) { + if ( current_user_can( 'update_plugins' ) ) + $actions['update-selected'] = __( 'Update' ); + if ( current_user_can( 'delete_plugins' ) && ( 'active' != $status ) ) + $actions['delete-selected'] = __( 'Delete' ); + } + + return $actions; + } + + function bulk_actions() { + global $status; + + if ( in_array( $status, array( 'mustuse', 'dropins' ) ) ) + return; + + parent::bulk_actions(); + } + + function extra_tablenav( $which ) { + global $status; + + if ( ! in_array($status, array('recently_activated', 'mustuse', 'dropins') ) ) + return; + + echo '
    '; + + if ( ! $this->screen->in_admin( 'network' ) && 'recently_activated' == $status ) + submit_button( __( 'Clear List' ), 'button', 'clear-recent-list', false ); + elseif ( 'top' == $which && 'mustuse' == $status ) + echo '

    ' . sprintf( __( 'Files in the %s directory are executed automatically.' ), str_replace( ABSPATH, '/', WPMU_PLUGIN_DIR ) ) . '

    '; + elseif ( 'top' == $which && 'dropins' == $status ) + echo '

    ' . sprintf( __( 'Drop-ins are advanced plugins in the %s directory that replace WordPress functionality when present.' ), str_replace( ABSPATH, '', WP_CONTENT_DIR ) ) . '

    '; + + echo '
    '; + } + + function current_action() { + if ( isset($_POST['clear-recent-list']) ) + return 'clear-recent-list'; + + return parent::current_action(); + } + + function display_rows() { + global $status; + + if ( is_multisite() && ! $this->screen->in_admin( 'network' ) && in_array( $status, array( 'mustuse', 'dropins' ) ) ) + return; + + foreach ( $this->items as $plugin_file => $plugin_data ) + $this->single_row( array( $plugin_file, $plugin_data ) ); + } + + function single_row( $item ) { + global $status, $page, $s, $totals; + + list( $plugin_file, $plugin_data ) = $item; + $context = $status; + $screen = $this->screen; + + // preorder + $actions = array( + 'deactivate' => '', + 'activate' => '', + 'edit' => '', + 'delete' => '', + ); + + if ( 'mustuse' == $context ) { + $is_active = true; + } elseif ( 'dropins' == $context ) { + $dropins = _get_dropins(); + $plugin_name = $plugin_file; + if ( $plugin_file != $plugin_data['Name'] ) + $plugin_name .= '
    ' . $plugin_data['Name']; + if ( true === ( $dropins[ $plugin_file ][1] ) ) { // Doesn't require a constant + $is_active = true; + $description = '

    ' . $dropins[ $plugin_file ][0] . '

    '; + } elseif ( defined( $dropins[ $plugin_file ][1] ) && constant( $dropins[ $plugin_file ][1] ) ) { // Constant is true + $is_active = true; + $description = '

    ' . $dropins[ $plugin_file ][0] . '

    '; + } else { + $is_active = false; + $description = '

    ' . $dropins[ $plugin_file ][0] . ' ' . __('Inactive:') . ' ' . sprintf( __( 'Requires %s in wp-config.php.' ), "define('" . $dropins[ $plugin_file ][1] . "', true);" ) . '

    '; + } + if ( $plugin_data['Description'] ) + $description .= '

    ' . $plugin_data['Description'] . '

    '; + } else { + if ( $screen->in_admin( 'network' ) ) + $is_active = is_plugin_active_for_network( $plugin_file ); + else + $is_active = is_plugin_active( $plugin_file ); + + if ( $screen->in_admin( 'network' ) ) { + if ( $is_active ) { + if ( current_user_can( 'manage_network_plugins' ) ) + $actions['deactivate'] = '' . __('Network Deactivate') . ''; + } else { + if ( current_user_can( 'manage_network_plugins' ) ) + $actions['activate'] = '' . __('Network Activate') . ''; + if ( current_user_can( 'delete_plugins' ) && ! is_plugin_active( $plugin_file ) ) + $actions['delete'] = '' . __('Delete') . ''; + } + } else { + if ( $is_active ) { + $actions['deactivate'] = '' . __('Deactivate') . ''; + } else { + $actions['activate'] = '' . __('Activate') . ''; + + if ( ! is_multisite() && current_user_can('delete_plugins') ) + $actions['delete'] = '' . __('Delete') . ''; + } // end if $is_active + } // end if $screen->in_admin( 'network' ) + + if ( ( ! is_multisite() || $screen->in_admin( 'network' ) ) && current_user_can('edit_plugins') && is_writable(WP_PLUGIN_DIR . '/' . $plugin_file) ) + $actions['edit'] = '' . __('Edit') . ''; + } // end if $context + + $prefix = $screen->in_admin( 'network' ) ? 'network_admin_' : ''; + $actions = apply_filters( $prefix . 'plugin_action_links', array_filter( $actions ), $plugin_file, $plugin_data, $context ); + $actions = apply_filters( $prefix . "plugin_action_links_$plugin_file", $actions, $plugin_file, $plugin_data, $context ); + + $class = $is_active ? 'active' : 'inactive'; + $checkbox_id = "checkbox_" . md5($plugin_data['Name']); + if ( in_array( $status, array( 'mustuse', 'dropins' ) ) ) { + $checkbox = ''; + } else { + $checkbox = "" + . ""; + } + if ( 'dropins' != $context ) { + $description = '

    ' . ( $plugin_data['Description'] ? $plugin_data['Description'] : ' ' ) . '

    '; + $plugin_name = $plugin_data['Name']; + } + + $id = sanitize_title( $plugin_name ); + if ( ! empty( $totals['upgrade'] ) && ! empty( $plugin_data['update'] ) ) + $class .= ' update'; + + echo ""; + + list( $columns, $hidden ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + switch ( $column_name ) { + case 'cb': + echo ""; + break; + case 'name': + echo ""; + break; + case 'description': + echo ""; + break; + default: + echo ""; + } + } + + echo ""; + + do_action( 'after_plugin_row', $plugin_file, $plugin_data, $status ); + do_action( "after_plugin_row_$plugin_file", $plugin_file, $plugin_data, $status ); + } +} diff --git a/src/wp-admin/includes/class-wp-posts-list-table.php b/src/wp-admin/includes/class-wp-posts-list-table.php new file mode 100644 index 0000000..2453618 --- /dev/null +++ b/src/wp-admin/includes/class-wp-posts-list-table.php @@ -0,0 +1,1111 @@ + 'posts', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + + $post_type = $this->screen->post_type; + $post_type_object = get_post_type_object( $post_type ); + + if ( !current_user_can( $post_type_object->cap->edit_others_posts ) ) { + $exclude_states = get_post_stati( array( 'show_in_admin_all_list' => false ) ); + $this->user_posts_count = $wpdb->get_var( $wpdb->prepare( " + SELECT COUNT( 1 ) FROM $wpdb->posts + WHERE post_type = %s AND post_status NOT IN ( '" . implode( "','", $exclude_states ) . "' ) + AND post_author = %d + ", $post_type, get_current_user_id() ) ); + + if ( $this->user_posts_count && empty( $_REQUEST['post_status'] ) && empty( $_REQUEST['all_posts'] ) && empty( $_REQUEST['author'] ) && empty( $_REQUEST['show_sticky'] ) ) + $_GET['author'] = get_current_user_id(); + } + + if ( 'post' == $post_type && $sticky_posts = get_option( 'sticky_posts' ) ) { + $sticky_posts = implode( ', ', array_map( 'absint', (array) $sticky_posts ) ); + $this->sticky_posts_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( 1 ) FROM $wpdb->posts WHERE post_type = %s AND post_status NOT IN ('trash', 'auto-draft') AND ID IN ($sticky_posts)", $post_type ) ); + } + } + + function ajax_user_can() { + return current_user_can( get_post_type_object( $this->screen->post_type )->cap->edit_posts ); + } + + function prepare_items() { + global $avail_post_stati, $wp_query, $per_page, $mode; + + $avail_post_stati = wp_edit_posts_query(); + + $this->hierarchical_display = ( is_post_type_hierarchical( $this->screen->post_type ) && 'menu_order title' == $wp_query->query['orderby'] ); + + $total_items = $this->hierarchical_display ? $wp_query->post_count : $wp_query->found_posts; + + $post_type = $this->screen->post_type; + $per_page = $this->get_items_per_page( 'edit_' . $post_type . '_per_page' ); + $per_page = apply_filters( 'edit_posts_per_page', $per_page, $post_type ); + + if ( $this->hierarchical_display ) + $total_pages = ceil( $total_items / $per_page ); + else + $total_pages = $wp_query->max_num_pages; + + $mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode']; + + $this->is_trash = isset( $_REQUEST['post_status'] ) && $_REQUEST['post_status'] == 'trash'; + + $this->set_pagination_args( array( + 'total_items' => $total_items, + 'total_pages' => $total_pages, + 'per_page' => $per_page + ) ); + } + + function has_items() { + return have_posts(); + } + + function no_items() { + if ( isset( $_REQUEST['post_status'] ) && 'trash' == $_REQUEST['post_status'] ) + echo get_post_type_object( $this->screen->post_type )->labels->not_found_in_trash; + else + echo get_post_type_object( $this->screen->post_type )->labels->not_found; + } + + function get_views() { + global $locked_post_status, $avail_post_stati; + + $post_type = $this->screen->post_type; + + if ( !empty($locked_post_status) ) + return array(); + + $status_links = array(); + $num_posts = wp_count_posts( $post_type, 'readable' ); + $class = ''; + $allposts = ''; + + $current_user_id = get_current_user_id(); + + if ( $this->user_posts_count ) { + if ( isset( $_GET['author'] ) && ( $_GET['author'] == $current_user_id ) ) + $class = ' class="current"'; + $status_links['mine'] = "" . sprintf( _nx( 'Mine (%s)', 'Mine (%s)', $this->user_posts_count, 'posts' ), number_format_i18n( $this->user_posts_count ) ) . ''; + $allposts = '&all_posts=1'; + } + + $total_posts = array_sum( (array) $num_posts ); + + // Subtract post types that are not included in the admin all list. + foreach ( get_post_stati( array('show_in_admin_all_list' => false) ) as $state ) + $total_posts -= $num_posts->$state; + + $class = empty( $class ) && empty( $_REQUEST['post_status'] ) && empty( $_REQUEST['show_sticky'] ) ? ' class="current"' : ''; + $status_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_posts, 'posts' ), number_format_i18n( $total_posts ) ) . ''; + + foreach ( get_post_stati(array('show_in_admin_status_list' => true), 'objects') as $status ) { + $class = ''; + + $status_name = $status->name; + + if ( !in_array( $status_name, $avail_post_stati ) ) + continue; + + if ( empty( $num_posts->$status_name ) ) + continue; + + if ( isset($_REQUEST['post_status']) && $status_name == $_REQUEST['post_status'] ) + $class = ' class="current"'; + + $status_links[$status_name] = "" . sprintf( translate_nooped_plural( $status->label_count, $num_posts->$status_name ), number_format_i18n( $num_posts->$status_name ) ) . ''; + } + + if ( ! empty( $this->sticky_posts_count ) ) { + $class = ! empty( $_REQUEST['show_sticky'] ) ? ' class="current"' : ''; + + $sticky_link = array( 'sticky' => "" . sprintf( _nx( 'Sticky (%s)', 'Sticky (%s)', $this->sticky_posts_count, 'posts' ), number_format_i18n( $this->sticky_posts_count ) ) . '' ); + + // Sticky comes after Publish, or if not listed, after All. + $split = 1 + array_search( ( isset( $status_links['publish'] ) ? 'publish' : 'all' ), array_keys( $status_links ) ); + $status_links = array_merge( array_slice( $status_links, 0, $split ), $sticky_link, array_slice( $status_links, $split ) ); + } + + return $status_links; + } + + function get_bulk_actions() { + $actions = array(); + + if ( $this->is_trash ) + $actions['untrash'] = __( 'Restore' ); + else + $actions['edit'] = __( 'Edit' ); + + if ( $this->is_trash || !EMPTY_TRASH_DAYS ) + $actions['delete'] = __( 'Delete Permanently' ); + else + $actions['trash'] = __( 'Move to Trash' ); + + return $actions; + } + + function extra_tablenav( $which ) { + global $cat; +?> +
    +months_dropdown( $this->screen->post_type ); + + if ( is_object_in_taxonomy( $this->screen->post_type, 'category' ) ) { + $dropdown_options = array( + 'show_option_all' => __( 'View all categories' ), + 'hide_empty' => 0, + 'hierarchical' => 1, + 'show_count' => 0, + 'orderby' => 'name', + 'selected' => $cat + ); + wp_dropdown_categories( $dropdown_options ); + } + do_action( 'restrict_manage_posts' ); + submit_button( __( 'Filter' ), 'button', false, false, array( 'id' => 'post-query-submit' ) ); + } + + if ( $this->is_trash && current_user_can( get_post_type_object( $this->screen->post_type )->cap->edit_others_posts ) ) { + submit_button( __( 'Empty Trash' ), 'apply', 'delete_all', false ); + } +?> +
    +screen->post_type ) ) + $this->view_switcher( $mode ); + } + + function get_table_classes() { + return array( 'widefat', 'fixed', is_post_type_hierarchical( $this->screen->post_type ) ? 'pages' : 'posts' ); + } + + function get_columns() { + $post_type = $this->screen->post_type; + + $posts_columns = array(); + + $posts_columns['cb'] = ''; + + /* translators: manage posts column name */ + $posts_columns['title'] = _x( 'Title', 'column name' ); + + if ( post_type_supports( $post_type, 'author' ) ) + $posts_columns['author'] = __( 'Author' ); + + $taxonomies = array(); + + $taxonomies = get_object_taxonomies( $post_type, 'objects' ); + $taxonomies = wp_filter_object_list( $taxonomies, array( 'show_admin_column' => true ), 'and', 'name' ); + + $taxonomies = apply_filters( "manage_taxonomies_for_{$post_type}_columns", $taxonomies, $post_type ); + $taxonomies = array_filter( $taxonomies, 'taxonomy_exists' ); + + foreach ( $taxonomies as $taxonomy ) { + if ( 'category' == $taxonomy ) + $column_key = 'categories'; + elseif ( 'post_tag' == $taxonomy ) + $column_key = 'tags'; + else + $column_key = 'taxonomy-' . $taxonomy; + + $posts_columns[ $column_key ] = get_taxonomy( $taxonomy )->labels->name; + } + + $post_status = !empty( $_REQUEST['post_status'] ) ? $_REQUEST['post_status'] : 'all'; + if ( post_type_supports( $post_type, 'comments' ) && !in_array( $post_status, array( 'pending', 'draft', 'future' ) ) ) + $posts_columns['comments'] = '
    '; + + $posts_columns['date'] = __( 'Date' ); + + if ( 'page' == $post_type ) + $posts_columns = apply_filters( 'manage_pages_columns', $posts_columns ); + else + $posts_columns = apply_filters( 'manage_posts_columns', $posts_columns, $post_type ); + $posts_columns = apply_filters( "manage_{$post_type}_posts_columns", $posts_columns ); + + return $posts_columns; + } + + function get_sortable_columns() { + return array( + 'title' => 'title', + 'parent' => 'parent', + 'comments' => 'comment_count', + 'date' => array( 'date', true ) + ); + } + + function display_rows( $posts = array(), $level = 0 ) { + global $wp_query, $per_page; + + if ( empty( $posts ) ) + $posts = $wp_query->posts; + + add_filter( 'the_title', 'esc_html' ); + + if ( $this->hierarchical_display ) { + $this->_display_rows_hierarchical( $posts, $this->get_pagenum(), $per_page ); + } else { + $this->_display_rows( $posts, $level ); + } + } + + function _display_rows( $posts, $level = 0 ) { + global $mode; + + // Create array of post IDs. + $post_ids = array(); + + foreach ( $posts as $a_post ) + $post_ids[] = $a_post->ID; + + $this->comment_pending_count = get_pending_comments_num( $post_ids ); + + foreach ( $posts as $post ) + $this->single_row( $post, $level ); + } + + function _display_rows_hierarchical( $pages, $pagenum = 1, $per_page = 20 ) { + global $wpdb; + + $level = 0; + + if ( ! $pages ) { + $pages = get_pages( array( 'sort_column' => 'menu_order' ) ); + + if ( ! $pages ) + return false; + } + + /* + * arrange pages into two parts: top level pages and children_pages + * children_pages is two dimensional array, eg. + * children_pages[10][] contains all sub-pages whose parent is 10. + * It only takes O( N ) to arrange this and it takes O( 1 ) for subsequent lookup operations + * If searching, ignore hierarchy and treat everything as top level + */ + if ( empty( $_REQUEST['s'] ) ) { + + $top_level_pages = array(); + $children_pages = array(); + + foreach ( $pages as $page ) { + + // catch and repair bad pages + if ( $page->post_parent == $page->ID ) { + $page->post_parent = 0; + $wpdb->update( $wpdb->posts, array( 'post_parent' => 0 ), array( 'ID' => $page->ID ) ); + clean_post_cache( $page ); + } + + if ( 0 == $page->post_parent ) + $top_level_pages[] = $page; + else + $children_pages[ $page->post_parent ][] = $page; + } + + $pages = &$top_level_pages; + } + + $count = 0; + $start = ( $pagenum - 1 ) * $per_page; + $end = $start + $per_page; + + foreach ( $pages as $page ) { + if ( $count >= $end ) + break; + + if ( $count >= $start ) { + echo "\t"; + $this->single_row( $page, $level ); + } + + $count++; + + if ( isset( $children_pages ) ) + $this->_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page ); + } + + // if it is the last pagenum and there are orphaned pages, display them with paging as well + if ( isset( $children_pages ) && $count < $end ){ + foreach ( $children_pages as $orphans ){ + foreach ( $orphans as $op ) { + if ( $count >= $end ) + break; + + if ( $count >= $start ) { + echo "\t"; + $this->single_row( $op, 0 ); + } + + $count++; + } + } + } + } + + /** + * Given a top level page ID, display the nested hierarchy of sub-pages + * together with paging support + * + * @since 3.1.0 (Standalone function exists since 2.6.0) + * + * @param array $children_pages + * @param int $count + * @param int $parent + * @param int $level + * @param int $pagenum + * @param int $per_page + */ + function _page_rows( &$children_pages, &$count, $parent, $level, $pagenum, $per_page ) { + + if ( ! isset( $children_pages[$parent] ) ) + return; + + $start = ( $pagenum - 1 ) * $per_page; + $end = $start + $per_page; + + foreach ( $children_pages[$parent] as $page ) { + + if ( $count >= $end ) + break; + + // If the page starts in a subtree, print the parents. + if ( $count == $start && $page->post_parent > 0 ) { + $my_parents = array(); + $my_parent = $page->post_parent; + while ( $my_parent ) { + $my_parent = get_post( $my_parent ); + $my_parents[] = $my_parent; + if ( !$my_parent->post_parent ) + break; + $my_parent = $my_parent->post_parent; + } + $num_parents = count( $my_parents ); + while ( $my_parent = array_pop( $my_parents ) ) { + echo "\t"; + $this->single_row( $my_parent, $level - $num_parents ); + $num_parents--; + } + } + + if ( $count >= $start ) { + echo "\t"; + $this->single_row( $page, $level ); + } + + $count++; + + $this->_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page ); + } + + unset( $children_pages[$parent] ); //required in order to keep track of orphans + } + + function single_row( $post, $level = 0 ) { + global $mode; + static $alternate; + + $global_post = get_post(); + $GLOBALS['post'] = $post; + setup_postdata( $post ); + + $edit_link = get_edit_post_link( $post->ID ); + $title = _draft_or_post_title(); + $post_type_object = get_post_type_object( $post->post_type ); + $can_edit_post = current_user_can( 'edit_post', $post->ID ); + + $alternate = 'alternate' == $alternate ? '' : 'alternate'; + $classes = $alternate . ' iedit author-' . ( get_current_user_id() == $post->post_author ? 'self' : 'other' ); + + $lock_holder = wp_check_post_lock( $post->ID ); + if ( $lock_holder ) { + $classes .= ' wp-locked'; + $lock_holder = get_userdata( $lock_holder ); + } + + if ( $post->post_parent ) { + $count = count( get_post_ancestors( $post->ID ) ); + $classes .= ' level-'. $count; + } else { + $classes .= ' level-0'; + } + ?> + + get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $class = "class=\"$column_name column-$column_name\""; + + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + $attributes = "$class$style"; + + switch ( $column_name ) { + + case 'cb': + ?> + + hierarchical_display ) { + if ( 0 == $level && (int) $post->post_parent > 0 ) { + //sent level 0 by accident, by default, or because we don't know the actual level + $find_main_page = (int) $post->post_parent; + while ( $find_main_page > 0 ) { + $parent = get_post( $find_main_page ); + + if ( is_null( $parent ) ) + break; + + $level++; + $find_main_page = (int) $parent->post_parent; + + if ( !isset( $parent_name ) ) { + /** This filter is documented in wp-includes/post-template.php */ + $parent_name = apply_filters( 'the_title', $parent->post_title, $parent->ID ); + } + } + } + } + + $pad = str_repeat( '— ', $level ); + echo "'; + break; + + case 'date': + if ( '0000-00-00 00:00:00' == $post->post_date ) { + $t_time = $h_time = __( 'Unpublished' ); + $time_diff = 0; + } else { + $t_time = get_the_time( __( 'Y/m/d g:i:s A' ) ); + $m_time = $post->post_date; + $time = get_post_time( 'G', true, $post ); + + $time_diff = time() - $time; + + if ( $time_diff > 0 && $time_diff < DAY_IN_SECONDS ) + $h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) ); + else + $h_time = mysql2date( __( 'Y/m/d' ), $m_time ); + } + + echo ''; + break; + + case 'comments': + ?> + + + + '; + if ( $terms = get_the_terms( $post->ID, $taxonomy ) ) { + $out = array(); + foreach ( $terms as $t ) { + $posts_in_term_qv = array(); + if ( 'post' != $post->post_type ) + $posts_in_term_qv['post_type'] = $post->post_type; + if ( $taxonomy_object->query_var ) { + $posts_in_term_qv[ $taxonomy_object->query_var ] = $t->slug; + } else { + $posts_in_term_qv['taxonomy'] = $taxonomy; + $posts_in_term_qv['term'] = $t->slug; + } + + $out[] = sprintf( '%s', + esc_url( add_query_arg( $posts_in_term_qv, 'edit.php' ) ), + esc_html( sanitize_term_field( 'name', $t->name, $t->term_id, $taxonomy, 'display' ) ) + ); + } + /* translators: used between list items, there is a space after the comma */ + echo join( __( ', ' ), $out ); + } else { + echo '—'; + } + echo ''; + break; + } + ?> + + + + screen; + + $post = get_default_post_to_edit( $screen->post_type ); + $post_type_object = get_post_type_object( $screen->post_type ); + + $taxonomy_names = get_object_taxonomies( $screen->post_type ); + $hierarchical_taxonomies = array(); + $flat_taxonomies = array(); + foreach ( $taxonomy_names as $taxonomy_name ) { + $taxonomy = get_taxonomy( $taxonomy_name ); + + if ( !$taxonomy->show_ui ) + continue; + + if ( $taxonomy->hierarchical ) + $hierarchical_taxonomies[] = $taxonomy; + else + $flat_taxonomies[] = $taxonomy; + } + + $m = ( isset( $mode ) && 'excerpt' == $mode ) ? 'excerpt' : 'list'; + $can_publish = current_user_can( $post_type_object->cap->publish_posts ); + $core_columns = array( 'cb' => true, 'date' => true, 'title' => true, 'categories' => true, 'tags' => true, 'comments' => true, 'author' => true ); + + ?> + +
    '; + $this->no_items(); + echo '
    '; + echo $this->column_cb( $item ); + echo '"; + echo call_user_func( array( $this, 'column_' . $column_name ), $item ); + echo ""; + echo $this->column_default( $item, $column_name ); + echo "
    + + + + + >ID, array( 80, 60 ), true ) ) { + if ( $this->is_trash || ! $user_can_edit ) { + echo $thumb; + } else { +?> + + + + + + > + is_trash || ! $user_can_edit ) { + echo $att_title; + } else { ?> + + + +

    +ID ), $matches ) ) + echo esc_html( strtoupper( $matches[1] ) ); + else + echo strtoupper( str_replace( 'image/', '', get_post_mime_type() ) ); +?> +

    +row_actions( $this->_get_row_actions( $post, $att_title ) ); +?> +
    >%s', + esc_url( add_query_arg( array( 'author' => get_the_author_meta('ID') ), 'upload.php' ) ), + get_the_author() + ); + ?>>post_excerpt : ''; ?>>> + post_parent ) && $parent_type->show_ui ) { ?> + + , + + >
    + + + +
    > +
    +ID ); + + $this->comments_bubble( $post->ID, $pending_comments ); +?> +
    +
    > + ID ); ?> +
    + + + + + + +
    $checkbox" . $theme->display('Name') . ""; + echo $this->row_actions( $actions, true ); + echo ""; + if ( $theme->errors() ) { + $pre = $status == 'broken' ? __( 'Broken Theme:' ) . ' ' : ''; + echo '

    ' . $pre . $theme->errors()->get_error_message() . '

    '; + } + echo "

    " . $theme->display( 'Description' ) . "

    +
    "; + + $theme_meta = array(); + + if ( $theme->get('Version') ) + $theme_meta[] = sprintf( __( 'Version %s' ), $theme->display('Version') ); + + $theme_meta[] = sprintf( __( 'By %s' ), $theme->display('Author') ); + + if ( $theme->get('ThemeURI') ) + $theme_meta[] = '' . __( 'Visit Theme Site' ) . ''; + + $theme_meta = apply_filters( 'theme_row_meta', $theme_meta, $stylesheet, $theme, $status ); + echo implode( ' | ', $theme_meta ); + + echo "
    "; + do_action( 'manage_themes_custom_column', $column_name, $stylesheet, $theme ); + echo "
    + + + "; ?> + user_login; ?>user_login, $super_admins ) ) + echo ' - ' . __( 'Super Admin' ); + ?> +
    + ' . __( 'Edit' ) . ''; + + if ( current_user_can( 'delete_user', $user->ID ) && ! in_array( $user->user_login, $super_admins ) ) { + $actions['delete'] = '' . __( 'Delete' ) . ''; + } + + /** + * Filter the action links displayed under each user + * in the Network Admin Users list table. + * + * @since 3.2.0 + * + * @param array $actions An array of action links to be displayed. + * Default 'Edit', 'Delete'. + * @param WP_User $user WP_User object. + */ + $actions = apply_filters( 'ms_user_row_actions', $actions, $user ); + echo $this->row_actions( $actions ); + ?> +
    $user->user_email" . mysql2date( $date, $user->user_registered ) . ""; + if ( is_array( $blogs ) ) { + foreach ( (array) $blogs as $key => $val ) { + if ( !can_edit_network( $val->site_id ) ) + continue; + + $path = ( $val->path == '/' ) ? '' : $val->path; + echo ''; + echo '' . str_replace( '.' . get_current_site()->domain, '', $val->domain . $path ) . ''; + echo ' '; + $actions = array(); + $actions['edit'] = '' . __( 'Edit' ) . ''; + + $class = ''; + if ( get_blog_status( $val->userblog_id, 'spam' ) == 1 ) + $class .= 'site-spammed '; + if ( get_blog_status( $val->userblog_id, 'mature' ) == 1 ) + $class .= 'site-mature '; + if ( get_blog_status( $val->userblog_id, 'deleted' ) == 1 ) + $class .= 'site-deleted '; + if ( get_blog_status( $val->userblog_id, 'archived' ) == 1 ) + $class .= 'site-archived '; + + $actions['view'] = '' . __( 'View' ) . ''; + + /** + * Filter the action links displayed next the sites a user belongs to + * in the Network Admin Users list table. + * + * @since 3.1.0 + * + * @param array $actions An array of action links to be displayed. + * Default 'Edit', 'View'. + * @param int $userblog_id The site ID. + */ + $actions = apply_filters( 'ms_user_list_site_actions', $actions, $val->userblog_id ); + + $i=0; + $action_count = count( $actions ); + foreach ( $actions as $action => $link ) { + ++$i; + ( $i == $action_count ) ? $sep = '' : $sep = ' | '; + echo "$link$sep"; + } + echo '
    '; + } + } + ?> +
    > + + >> + $plugin['rating'], 'type' => 'percent', 'number' => $plugin['num_ratings'] ) ); ?> + >
    $checkbox$plugin_name"; + echo $this->row_actions( $actions, true ); + echo " +
    $description
    +
    "; + + $plugin_meta = array(); + if ( !empty( $plugin_data['Version'] ) ) + $plugin_meta[] = sprintf( __( 'Version %s' ), $plugin_data['Version'] ); + if ( !empty( $plugin_data['Author'] ) ) { + $author = $plugin_data['Author']; + if ( !empty( $plugin_data['AuthorURI'] ) ) + $author = '' . $plugin_data['Author'] . ''; + $plugin_meta[] = sprintf( __( 'By %s' ), $author ); + } + if ( ! empty( $plugin_data['PluginURI'] ) ) + $plugin_meta[] = '' . __( 'Visit plugin site' ) . ''; + + $plugin_meta = apply_filters( 'plugin_row_meta', $plugin_meta, $plugin_file, $plugin_data, $status ); + echo implode( ' | ', $plugin_meta ); + + echo "
    "; + do_action( 'manage_plugins_custom_column', $column_name, $plugin_file, $plugin_data ); + echo "
    + + + +
    + +
    "; + + if ( $format = get_post_format( $post->ID ) ) { + $label = get_post_format_string( $format ); + + echo '' . $label . ": "; + } + + if ( $can_edit_post && $post->post_status != 'trash' ) { + echo '' . $pad . $title . ''; + } else { + echo $pad . $title; + } + _post_states( $post ); + + if ( isset( $parent_name ) ) + echo ' | ' . $post_type_object->labels->parent_item_colon . ' ' . esc_html( $parent_name ); + + echo "\n"; + + if ( $can_edit_post && $post->post_status != 'trash' ) { + if ( $lock_holder ) { + $locked_avatar = get_avatar( $lock_holder->ID, 18 ); + $locked_text = esc_html( sprintf( __( '%s is currently editing' ), $lock_holder->display_name ) ); + } else { + $locked_avatar = $locked_text = ''; + } + + echo '
    ' . $locked_avatar . ' ' . $locked_text . "
    \n"; + } + + if ( ! $this->hierarchical_display && 'excerpt' == $mode && current_user_can( 'read_post', $post->ID ) ) + the_excerpt(); + + $actions = array(); + if ( $can_edit_post && 'trash' != $post->post_status ) { + $actions['edit'] = '' . __( 'Edit' ) . ''; + $actions['inline hide-if-no-js'] = '' . __( 'Quick Edit' ) . ''; + } + if ( current_user_can( 'delete_post', $post->ID ) ) { + if ( 'trash' == $post->post_status ) + $actions['untrash'] = "ID ) ), 'untrash-post_' . $post->ID ) . "'>" . __( 'Restore' ) . ""; + elseif ( EMPTY_TRASH_DAYS ) + $actions['trash'] = "" . __( 'Trash' ) . ""; + if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS ) + $actions['delete'] = "" . __( 'Delete Permanently' ) . ""; + } + if ( $post_type_object->public ) { + if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) { + if ( $can_edit_post ) + $actions['view'] = '' . __( 'Preview' ) . ''; + } elseif ( 'trash' != $post->post_status ) { + $actions['view'] = '' . __( 'View' ) . ''; + } + } + + $actions = apply_filters( is_post_type_hierarchical( $post->post_type ) ? 'page_row_actions' : 'post_row_actions', $actions, $post ); + echo $this->row_actions( $actions ); + + get_inline_data( $post ); + echo '
    '; + if ( 'excerpt' == $mode ) + echo apply_filters( 'post_date_column_time', $t_time, $post, $column_name, $mode ); + else + echo '' . apply_filters( 'post_date_column_time', $h_time, $post, $column_name, $mode ) . ''; + echo '
    '; + if ( 'publish' == $post->post_status ) { + _e( 'Published' ); + } elseif ( 'future' == $post->post_status ) { + if ( $time_diff > 0 ) + echo '' . __( 'Missed schedule' ) . ''; + else + _e( 'Scheduled' ); + } else { + _e( 'Last Modified' ); + } + echo '
    >
    + comment_pending_count[$post->ID] ) ? $this->comment_pending_count[$post->ID] : 0; + + $this->comments_bubble( $post->ID, $pending_comments ); + ?> +
    >%s', + esc_url( add_query_arg( array( 'post_type' => $post->post_type, 'author' => get_the_author_meta( 'ID' ) ), 'edit.php' )), + get_the_author() + ); + ?>>post_type ) ) + do_action( 'manage_pages_custom_column', $column_name, $post->ID ); + else + do_action( 'manage_posts_custom_column', $column_name, $post->ID ); + do_action( "manage_{$post->post_type}_posts_custom_column", $column_name, $post->ID ); + ?>
    + + + post_type; + echo $bulk ? " bulk-edit-row bulk-edit-row-$hclass bulk-edit-{$screen->post_type}" : " quick-edit-row quick-edit-row-$hclass inline-edit-{$screen->post_type}"; + ?>" style="display: none"> + +
    + +
    +

    + post_type, 'title' ) ) : + if ( $bulk ) : ?> +
    +
    +
    + + + + + + + + + + + +
    + +
    +
    + post_type, 'author' ) ) : + $authors_dropdown = ''; + + if ( is_super_admin() || current_user_can( $post_type_object->cap->edit_others_posts ) ) : + $users_opt = array( + 'hide_if_only_one_author' => false, + 'who' => 'authors', + 'name' => 'post_author', + 'class'=> 'authors', + 'multi' => 1, + 'echo' => 0 + ); + if ( $bulk ) + $users_opt['show_option_none'] = __( '— No Change —' ); + + if ( $authors = wp_dropdown_users( $users_opt ) ) : + $authors_dropdown = ''; + endif; + endif; // authors + ?> + + + +
    + + + + + + +
    + + + +
    + + + +
    + + + + labels->name ) ?> + +
      + $taxonomy->name ) ) ?> +
    + + + +
    + + + +
    + + post_type, 'author' ) && $bulk ) + echo $authors_dropdown; + + if ( post_type_supports( $screen->post_type, 'page-attributes' ) ) : + + if ( $post_type_object->hierarchical ) : + ?> + + + + + + + post_type ) : + ?> + + + + + + + + + cap->assign_terms ) ) : ?> + + + + + + + + post_type, 'comments' ) || post_type_supports( $screen->post_type, 'trackbacks' ) ) : + if ( $bulk ) : ?> + +
    + post_type, 'comments' ) ) : ?> + + post_type, 'trackbacks' ) ) : ?> + + +
    + + + +
    + post_type, 'comments' ) ) : ?> + + post_type, 'trackbacks' ) ) : ?> + + +
    + + + +
    + + + post_type && $can_publish && current_user_can( $post_type_object->cap->edit_others_posts ) ) : ?> + + + + + + + + + + + + + +
    + + post_type, 'post-formats' ) ) { + $all_post_formats = get_post_format_strings(); + + ?> + + + +
    + + get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + if ( isset( $core_columns[$column_name] ) ) + continue; + do_action( $bulk ? 'bulk_edit_custom_box' : 'quick_edit_custom_box', $column_name, $screen->post_type ); + } + ?> +

    + + + + + 's' ) ); + } ?> + + + post_type, 'author' ) ) { ?> + + + +
    +

    +
    + 'tags', + 'singular' => 'tag', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + + $action = $this->screen->action; + $post_type = $this->screen->post_type; + $taxonomy = $this->screen->taxonomy; + + if ( empty( $taxonomy ) ) + $taxonomy = 'post_tag'; + + if ( ! taxonomy_exists( $taxonomy ) ) + wp_die( __( 'Invalid taxonomy' ) ); + + $tax = get_taxonomy( $taxonomy ); + + // @todo Still needed? Maybe just the show_ui part. + if ( empty( $post_type ) || !in_array( $post_type, get_post_types( array( 'show_ui' => true ) ) ) ) + $post_type = 'post'; + + } + + function ajax_user_can() { + return current_user_can( get_taxonomy( $this->screen->taxonomy )->cap->manage_terms ); + } + + function prepare_items() { + $tags_per_page = $this->get_items_per_page( 'edit_' . $this->screen->taxonomy . '_per_page' ); + + if ( 'post_tag' == $this->screen->taxonomy ) { + $tags_per_page = apply_filters( 'edit_tags_per_page', $tags_per_page ); + $tags_per_page = apply_filters( 'tagsperpage', $tags_per_page ); // Old filter + } elseif ( 'category' == $this->screen->taxonomy ) { + $tags_per_page = apply_filters( 'edit_categories_per_page', $tags_per_page ); // Old filter + } + + $search = !empty( $_REQUEST['s'] ) ? trim( wp_unslash( $_REQUEST['s'] ) ) : ''; + + $args = array( + 'search' => $search, + 'page' => $this->get_pagenum(), + 'number' => $tags_per_page, + ); + + if ( !empty( $_REQUEST['orderby'] ) ) + $args['orderby'] = trim( wp_unslash( $_REQUEST['orderby'] ) ); + + if ( !empty( $_REQUEST['order'] ) ) + $args['order'] = trim( wp_unslash( $_REQUEST['order'] ) ); + + $this->callback_args = $args; + + $this->set_pagination_args( array( + 'total_items' => wp_count_terms( $this->screen->taxonomy, compact( 'search' ) ), + 'per_page' => $tags_per_page, + ) ); + } + + function has_items() { + // todo: populate $this->items in prepare_items() + return true; + } + + function get_bulk_actions() { + $actions = array(); + $actions['delete'] = __( 'Delete' ); + + return $actions; + } + + function current_action() { + if ( isset( $_REQUEST['action'] ) && isset( $_REQUEST['delete_tags'] ) && ( 'delete' == $_REQUEST['action'] || 'delete' == $_REQUEST['action2'] ) ) + return 'bulk-delete'; + + return parent::current_action(); + } + + function get_columns() { + $columns = array( + 'cb' => '', + 'name' => _x( 'Name', 'term name' ), + 'description' => __( 'Description' ), + 'slug' => __( 'Slug' ), + ); + + if ( 'link_category' == $this->screen->taxonomy ) { + $columns['links'] = __( 'Links' ); + } else { + $post_type_object = get_post_type_object( $this->screen->post_type ); + $columns['posts'] = $post_type_object ? $post_type_object->labels->name : __( 'Posts' ); + } + + return $columns; + } + + function get_sortable_columns() { + return array( + 'name' => 'name', + 'description' => 'description', + 'slug' => 'slug', + 'posts' => 'count', + 'links' => 'count' + ); + } + + function display_rows_or_placeholder() { + $taxonomy = $this->screen->taxonomy; + + $args = wp_parse_args( $this->callback_args, array( + 'page' => 1, + 'number' => 20, + 'search' => '', + 'hide_empty' => 0 + ) ); + + extract( $args, EXTR_SKIP ); + + $args['offset'] = $offset = ( $page - 1 ) * $number; + + // convert it to table rows + $count = 0; + + $terms = array(); + + if ( is_taxonomy_hierarchical( $taxonomy ) && !isset( $orderby ) ) { + // We'll need the full set of terms then. + $args['number'] = $args['offset'] = 0; + } + $terms = get_terms( $taxonomy, $args ); + + if ( empty( $terms ) ) { + list( $columns, $hidden ) = $this->get_column_info(); + echo ''; + $this->no_items(); + echo ''; + return; + } + + if ( is_taxonomy_hierarchical( $taxonomy ) && !isset( $orderby ) ) { + if ( !empty( $search ) ) // Ignore children on searches. + $children = array(); + else + $children = _get_term_hierarchy( $taxonomy ); + + // Some funky recursion to get the job done( Paging & parents mainly ) is contained within, Skip it for non-hierarchical taxonomies for performance sake + $this->_rows( $taxonomy, $terms, $children, $offset, $number, $count ); + } else { + $terms = get_terms( $taxonomy, $args ); + foreach ( $terms as $term ) + $this->single_row( $term ); + $count = $number; // Only displaying a single page. + } + } + + function _rows( $taxonomy, $terms, &$children, $start, $per_page, &$count, $parent = 0, $level = 0 ) { + + $end = $start + $per_page; + + foreach ( $terms as $key => $term ) { + + if ( $count >= $end ) + break; + + if ( $term->parent != $parent && empty( $_REQUEST['s'] ) ) + continue; + + // If the page starts in a subtree, print the parents. + if ( $count == $start && $term->parent > 0 && empty( $_REQUEST['s'] ) ) { + $my_parents = $parent_ids = array(); + $p = $term->parent; + while ( $p ) { + $my_parent = get_term( $p, $taxonomy ); + $my_parents[] = $my_parent; + $p = $my_parent->parent; + if ( in_array( $p, $parent_ids ) ) // Prevent parent loops. + break; + $parent_ids[] = $p; + } + unset( $parent_ids ); + + $num_parents = count( $my_parents ); + while ( $my_parent = array_pop( $my_parents ) ) { + echo "\t"; + $this->single_row( $my_parent, $level - $num_parents ); + $num_parents--; + } + } + + if ( $count >= $start ) { + echo "\t"; + $this->single_row( $term, $level ); + } + + ++$count; + + unset( $terms[$key] ); + + if ( isset( $children[$term->term_id] ) && empty( $_REQUEST['s'] ) ) + $this->_rows( $taxonomy, $terms, $children, $start, $per_page, $count, $term->term_id, $level + 1 ); + } + } + + function single_row( $tag, $level = 0 ) { + static $row_class = ''; + $row_class = ( $row_class == '' ? ' class="alternate"' : '' ); + + $this->level = $level; + + echo ''; + $this->single_row_columns( $tag ); + echo ''; + } + + function column_cb( $tag ) { + $default_term = get_option( 'default_' . $this->screen->taxonomy ); + + if ( current_user_can( get_taxonomy( $this->screen->taxonomy )->cap->delete_terms ) && $tag->term_id != $default_term ) + return '' + . ''; + + return ' '; + } + + function column_name( $tag ) { + $taxonomy = $this->screen->taxonomy; + $tax = get_taxonomy( $taxonomy ); + + $default_term = get_option( 'default_' . $taxonomy ); + + $pad = str_repeat( '— ', max( 0, $this->level ) ); + $name = apply_filters( 'term_name', $pad . ' ' . $tag->name, $tag ); + $qe_data = get_term( $tag->term_id, $taxonomy, OBJECT, 'edit' ); + $edit_link = esc_url( get_edit_term_link( $tag->term_id, $taxonomy, $this->screen->post_type ) ); + + $out = '' . $name . '
    '; + + $actions = array(); + if ( current_user_can( $tax->cap->edit_terms ) ) { + $actions['edit'] = '' . __( 'Edit' ) . ''; + $actions['inline hide-if-no-js'] = '' . __( 'Quick Edit' ) . ''; + } + if ( current_user_can( $tax->cap->delete_terms ) && $tag->term_id != $default_term ) + $actions['delete'] = "term_id ) . "'>" . __( 'Delete' ) . ""; + if ( $tax->public ) + $actions['view'] = '' . __( 'View' ) . ''; + + $actions = apply_filters( 'tag_row_actions', $actions, $tag ); + $actions = apply_filters( "{$taxonomy}_row_actions", $actions, $tag ); + + $out .= $this->row_actions( $actions ); + $out .= ''; + + return $out; + } + + function column_description( $tag ) { + return $tag->description; + } + + function column_slug( $tag ) { + return apply_filters( 'editable_slug', $tag->slug ); + } + + function column_posts( $tag ) { + $count = number_format_i18n( $tag->count ); + + $tax = get_taxonomy( $this->screen->taxonomy ); + + $ptype_object = get_post_type_object( $this->screen->post_type ); + if ( ! $ptype_object->show_ui ) + return $count; + + if ( $tax->query_var ) { + $args = array( $tax->query_var => $tag->slug ); + } else { + $args = array( 'taxonomy' => $tax->name, 'term' => $tag->slug ); + } + + if ( 'post' != $this->screen->post_type ) + $args['post_type'] = $this->screen->post_type; + + if ( 'attachment' == $this->screen->post_type ) + return "$count"; + + return "$count"; + } + + function column_links( $tag ) { + $count = number_format_i18n( $tag->count ); + if ( $count ) + $count = "$count"; + return $count; + } + + function column_default( $tag, $column_name ) { + return apply_filters( "manage_{$this->screen->taxonomy}_custom_column", '', $column_name, $tag->term_id ); + } + + /** + * Outputs the hidden row displayed when inline editing + * + * @since 3.1.0 + */ + function inline_edit() { + $tax = get_taxonomy( $this->screen->taxonomy ); + + if ( ! current_user_can( $tax->cap->edit_terms ) ) + return; +?> + +
    + +
    + features = $_REQUEST['features']; + + $paged = $this->get_pagenum(); + + $per_page = 36; + + // These are the tabs which are shown on the page, + $tabs = array(); + $tabs['dashboard'] = __( 'Search' ); + if ( 'search' == $tab ) + $tabs['search'] = __( 'Search Results' ); + $tabs['upload'] = __( 'Upload' ); + $tabs['featured'] = _x( 'Featured','Theme Installer' ); + //$tabs['popular'] = _x( 'Popular','Theme Installer' ); + $tabs['new'] = _x( 'Newest','Theme Installer' ); + $tabs['updated'] = _x( 'Recently Updated','Theme Installer' ); + + $nonmenu_tabs = array( 'theme-information' ); // Valid actions to perform which do not have a Menu item. + + $tabs = apply_filters( 'install_themes_tabs', $tabs ); + $nonmenu_tabs = apply_filters( 'install_themes_nonmenu_tabs', $nonmenu_tabs ); + + // If a non-valid menu tab has been selected, And it's not a non-menu action. + if ( empty( $tab ) || ( ! isset( $tabs[ $tab ] ) && ! in_array( $tab, (array) $nonmenu_tabs ) ) ) + $tab = key( $tabs ); + + $args = array( 'page' => $paged, 'per_page' => $per_page, 'fields' => $theme_field_defaults ); + + switch ( $tab ) { + case 'search': + $type = isset( $_REQUEST['type'] ) ? wp_unslash( $_REQUEST['type'] ) : 'term'; + switch ( $type ) { + case 'tag': + $args['tag'] = array_map( 'sanitize_key', $search_terms ); + break; + case 'term': + $args['search'] = $search_string; + break; + case 'author': + $args['author'] = $search_string; + break; + } + + if ( ! empty( $this->features ) ) { + $args['tag'] = $this->features; + $_REQUEST['s'] = implode( ',', $this->features ); + $_REQUEST['type'] = 'tag'; + } + + add_action( 'install_themes_table_header', 'install_theme_search_form', 10, 0 ); + break; + + case 'featured': + //case 'popular': + case 'new': + case 'updated': + $args['browse'] = $tab; + break; + + default: + $args = false; + break; + } + + $args = apply_filters( 'install_themes_table_api_args_' . $tab, $args ); + + if ( ! $args ) + return; + + $api = themes_api( 'query_themes', $args ); + + if ( is_wp_error( $api ) ) + wp_die( $api->get_error_message() . '

    ' . __( 'Try again' ) . '' ); + + $this->items = $api->themes; + + $this->set_pagination_args( array( + 'total_items' => $api->info['results'], + 'per_page' => $per_page, + 'infinite_scroll' => true, + ) ); + } + + function no_items() { + _e( 'No themes match your request.' ); + } + + function get_views() { + global $tabs, $tab; + + $display_tabs = array(); + foreach ( (array) $tabs as $action => $text ) { + $class = ( $action == $tab ) ? ' class="current"' : ''; + $href = self_admin_url('theme-install.php?tab=' . $action); + $display_tabs['theme-install-'.$action] = "$text"; + } + + return $display_tabs; + } + + function display() { + wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); +?> +

    +
    + +
    + pagination( 'top' ); ?> +
    +
    + +
    + display_rows_or_placeholder(); ?> +
    + + items; + foreach ( $themes as $theme ) { + ?> +
    single_row( $theme ); + ?>
    + theme_installer(); + } + + /** + * Prints a theme from the WordPress.org API. + * + * @param object $theme An object that contains theme data returned by the WordPress.org API. + * + * Example theme data: + * object(stdClass)[59] + * public 'name' => string 'Magazine Basic' + * public 'slug' => string 'magazine-basic' + * public 'version' => string '1.1' + * public 'author' => string 'tinkerpriest' + * public 'preview_url' => string 'http://wp-themes.com/?magazine-basic' + * public 'screenshot_url' => string 'http://wp-themes.com/wp-content/themes/magazine-basic/screenshot.png' + * public 'rating' => float 80 + * public 'num_ratings' => int 1 + * public 'homepage' => string 'http://wordpress.org/themes/magazine-basic' + * public 'description' => string 'A basic magazine style layout with a fully customizable layout through a backend interface. Designed by c.bavota of Tinker Priest Media.' + * public 'download_link' => string 'http://wordpress.org/themes/download/magazine-basic.1.1.zip' + */ + function single_row( $theme ) { + global $themes_allowedtags; + + if ( empty( $theme ) ) + return; + + $name = wp_kses( $theme->name, $themes_allowedtags ); + $author = wp_kses( $theme->author, $themes_allowedtags ); + + $preview_title = sprintf( __('Preview “%s”'), $name ); + $preview_url = add_query_arg( array( + 'tab' => 'theme-information', + 'theme' => $theme->slug, + ) ); + + $actions = array(); + + $install_url = add_query_arg( array( + 'action' => 'install-theme', + 'theme' => $theme->slug, + ), self_admin_url( 'update.php' ) ); + + $update_url = add_query_arg( array( + 'action' => 'upgrade-theme', + 'theme' => $theme->slug, + ), self_admin_url( 'update.php' ) ); + + $status = $this->_get_theme_status( $theme ); + + switch ( $status ) { + default: + case 'install': + $actions[] = '' . __( 'Install Now' ) . ''; + break; + case 'update_available': + $actions[] = '' . __( 'Update' ) . ''; + break; + case 'newer_installed': + case 'latest_installed': + $actions[] = '' . _x( 'Installed', 'theme' ) . ''; + break; + } + + $actions[] = '' . __( 'Preview' ) . ''; + + $actions = apply_filters( 'theme_install_actions', $actions, $theme ); + + ?> + + + + +

    +
    + + + + install_theme_info( $theme ); + } + + /** + * Prints the wrapper for the theme installer. + */ + function theme_installer() { + ?> +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + install_theme_info( $theme ); ?> +
    +
    + +
    +
    + name, $themes_allowedtags ); + $author = wp_kses( $theme->author, $themes_allowedtags ); + + $num_ratings = sprintf( _n( '(based on %s rating)', '(based on %s ratings)', $theme->num_ratings ), number_format_i18n( $theme->num_ratings ) ); + + $install_url = add_query_arg( array( + 'action' => 'install-theme', + 'theme' => $theme->slug, + ), self_admin_url( 'update.php' ) ); + + $update_url = add_query_arg( array( + 'action' => 'upgrade-theme', + 'theme' => $theme->slug, + ), self_admin_url( 'update.php' ) ); + + $status = $this->_get_theme_status( $theme ); + + ?> +
    slug ) ) . '">' . __( 'Install' ) . ''; + break; + case 'update_available': + echo '' . __( 'Update' ) . ''; + break; + case 'newer_installed': + case 'latest_installed': + echo '' . _x( 'Installed', 'theme' ) . ''; + break; + } ?> +

    + + screenshot_url ) ): ?> + + +
    + $theme->rating, 'type' => 'percent', 'number' => $theme->num_ratings ) ); ?> +
    + + version, $themes_allowedtags ); ?> +
    +
    + description, $themes_allowedtags ); ?> +
    +
    + +
    + Install screen + * @uses $type Global; type of search. + */ + function _js_vars( $extra_args = array() ) { + global $tab, $type; + parent::_js_vars( compact( 'tab', 'type' ) ); + } + + /** + * Check to see if the theme is already installed. + * + * @since 3.4 + * @access private + * + * @param object $theme - A WordPress.org Theme API object. + * @return string Theme status. + */ + private function _get_theme_status( $theme ) { + $status = 'install'; + + $installed_theme = wp_get_theme( $theme->slug ); + if ( $installed_theme->exists() ) { + if ( version_compare( $installed_theme->get('Version'), $theme->version, '=' ) ) + $status = 'latest_installed'; + elseif ( version_compare( $installed_theme->get('Version'), $theme->version, '>' ) ) + $status = 'newer_installed'; + else + $status = 'update_available'; + } + + return $status; + } +} diff --git a/src/wp-admin/includes/class-wp-themes-list-table.php b/src/wp-admin/includes/class-wp-themes-list-table.php new file mode 100644 index 0000000..d49d993 --- /dev/null +++ b/src/wp-admin/includes/class-wp-themes-list-table.php @@ -0,0 +1,264 @@ + true, + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + function ajax_user_can() { + // Do not check edit_theme_options here. AJAX calls for available themes require switch_themes. + return current_user_can( 'switch_themes' ); + } + + function prepare_items() { + $themes = wp_get_themes( array( 'allowed' => true ) ); + + if ( ! empty( $_REQUEST['s'] ) ) + $this->search_terms = array_unique( array_filter( array_map( 'trim', explode( ',', strtolower( wp_unslash( $_REQUEST['s'] ) ) ) ) ) ); + + if ( ! empty( $_REQUEST['features'] ) ) + $this->features = $_REQUEST['features']; + + if ( $this->search_terms || $this->features ) { + foreach ( $themes as $key => $theme ) { + if ( ! $this->search_theme( $theme ) ) + unset( $themes[ $key ] ); + } + } + + unset( $themes[ get_option( 'stylesheet' ) ] ); + WP_Theme::sort_by_name( $themes ); + + $per_page = 36; + $page = $this->get_pagenum(); + + $start = ( $page - 1 ) * $per_page; + + $this->items = array_slice( $themes, $start, $per_page, true ); + + $this->set_pagination_args( array( + 'total_items' => count( $themes ), + 'per_page' => $per_page, + 'infinite_scroll' => true, + ) ); + } + + function no_items() { + if ( $this->search_terms || $this->features ) { + _e( 'No items found.' ); + return; + } + + if ( is_multisite() ) { + if ( current_user_can( 'install_themes' ) && current_user_can( 'manage_network_themes' ) ) { + printf( __( 'You only have one theme enabled for this site right now. Visit the Network Admin to enable or install more themes.' ), network_admin_url( 'site-themes.php?id=' . $GLOBALS['blog_id'] ), network_admin_url( 'theme-install.php' ) ); + + return; + } elseif ( current_user_can( 'manage_network_themes' ) ) { + printf( __( 'You only have one theme enabled for this site right now. Visit the Network Admin to enable more themes.' ), network_admin_url( 'site-themes.php?id=' . $GLOBALS['blog_id'] ) ); + + return; + } + // else, fallthrough. install_themes doesn't help if you can't enable it. + } else { + if ( current_user_can( 'install_themes' ) ) { + printf( __( 'You only have one theme installed right now. Live a little! You can choose from over 1,000 free themes in the WordPress.org Theme Directory at any time: just click on the Install Themes tab above.' ), admin_url( 'theme-install.php' ) ); + + return; + } + } + // Fallthrough. + printf( __( 'Only the current theme is available to you. Contact the %s administrator for information about accessing additional themes.' ), get_site_option( 'site_name' ) ); + } + + function tablenav( $which = 'top' ) { + if ( $this->get_pagination_arg( 'total_pages' ) <= 1 ) + return; + ?> +
    + pagination( $which ); ?> + +
    +
    + + tablenav( 'top' ); ?> + +
    + display_rows_or_placeholder(); ?> +
    + + tablenav( 'bottom' ); ?> +has_items() ) { + $this->display_rows(); + } else { + echo '
    '; + $this->no_items(); + echo '
    '; + } + } + + function display_rows() { + $themes = $this->items; + + foreach ( $themes as $theme ): + ?>
    get_template(); + $stylesheet = $theme->get_stylesheet(); + $title = $theme->display('Name'); + $version = $theme->display('Version'); + $author = $theme->display('Author'); + + $activate_link = wp_nonce_url( "themes.php?action=activate&template=" . urlencode( $template ) . "&stylesheet=" . urlencode( $stylesheet ), 'switch-theme_' . $stylesheet ); + + $preview_link = esc_url( add_query_arg( + array( 'preview' => 1, 'template' => urlencode( $template ), 'stylesheet' => urlencode( $stylesheet ), 'preview_iframe' => true, 'TB_iframe' => 'true' ), + home_url( '/' ) ) ); + + $actions = array(); + $actions['activate'] = '' . __( 'Activate' ) . ''; + + $actions['preview'] = '' . __( 'Preview' ) . ''; + + if ( current_user_can( 'edit_theme_options' ) ) + $actions['preview'] .= '' + . __( 'Live Preview' ) . ''; + + if ( ! is_multisite() && current_user_can( 'delete_themes' ) ) + $actions['delete'] = '' . __( 'Delete' ) . ''; + + $actions = apply_filters( 'theme_action_links', $actions, $theme ); + $actions = apply_filters( "theme_action_links_$stylesheet", $actions, $theme ); + $delete_action = isset( $actions['delete'] ) ? '
    ' . $actions['delete'] . '
    ' : ''; + unset( $actions['delete'] ); + + ?> + + + get_screenshot() ) : ?> + + + + + get_screenshot() ) : ?> + + + + +

    +
    + + +
    +

    +

    display('Description'); ?>

    + parent() ) { + printf( '

    ' . __( 'This child theme requires its parent theme, %2$s.' ) . '

    ', + __( 'http://codex.wordpress.org/Child_Themes' ), + $theme->parent()->display( 'Name' ) ); + } ?> +
    + +
    + features as $word ) { + if ( ! in_array( $word, $theme->get('Tags') ) ) + return false; + } + + // Match all phrases + foreach ( $this->search_terms as $word ) { + if ( in_array( $word, $theme->get('Tags') ) ) + continue; + + foreach ( array( 'Name', 'Description', 'Author', 'AuthorURI' ) as $header ) { + // Don't mark up; Do translate. + if ( false !== stripos( $theme->display( $header, false, true ), $word ) ) + continue 2; + } + + if ( false !== stripos( $theme->get_stylesheet(), $word ) ) + continue; + + if ( false !== stripos( $theme->get_template(), $word ) ) + continue; + + return false; + } + + return true; + } + + /** + * Send required variables to JavaScript land + * + * @since 3.4 + * @access private + * + * @uses $this->features Array of all feature search terms. + * @uses get_pagenum() + * @uses _pagination_args['total_pages'] + */ + function _js_vars( $extra_args = array() ) { + $search_string = isset( $_REQUEST['s'] ) ? esc_attr( wp_unslash( $_REQUEST['s'] ) ) : ''; + + $args = array( + 'search' => $search_string, + 'features' => $this->features, + 'paged' => $this->get_pagenum(), + 'total_pages' => ! empty( $this->_pagination_args['total_pages'] ) ? $this->_pagination_args['total_pages'] : 1, + ); + + if ( is_array( $extra_args ) ) + $args = array_merge( $args, $extra_args ); + + printf( "\n", json_encode( $args ) ); + parent::_js_vars(); + } +} diff --git a/src/wp-admin/includes/class-wp-upgrader-skins.php b/src/wp-admin/includes/class-wp-upgrader-skins.php new file mode 100644 index 0000000..71a1293 --- /dev/null +++ b/src/wp-admin/includes/class-wp-upgrader-skins.php @@ -0,0 +1,654 @@ + '', 'nonce' => '', 'title' => '', 'context' => false ); + $this->options = wp_parse_args($args, $defaults); + } + + function set_upgrader(&$upgrader) { + if ( is_object($upgrader) ) + $this->upgrader =& $upgrader; + $this->add_strings(); + } + + function add_strings() { + } + + function set_result($result) { + $this->result = $result; + } + + function request_filesystem_credentials($error = false) { + $url = $this->options['url']; + $context = $this->options['context']; + if ( !empty($this->options['nonce']) ) + $url = wp_nonce_url($url, $this->options['nonce']); + return request_filesystem_credentials($url, '', $error, $context); //Possible to bring inline, Leaving as is for now. + } + + function header() { + if ( $this->done_header ) + return; + $this->done_header = true; + echo '
    '; + echo '

    ' . $this->options['title'] . '

    '; + } + function footer() { + echo '
    '; + } + + function error($errors) { + if ( ! $this->done_header ) + $this->header(); + if ( is_string($errors) ) { + $this->feedback($errors); + } elseif ( is_wp_error($errors) && $errors->get_error_code() ) { + foreach ( $errors->get_error_messages() as $message ) { + if ( $errors->get_error_data() && is_string( $errors->get_error_data() ) ) + $this->feedback($message . ' ' . esc_html( $errors->get_error_data() ) ); + else + $this->feedback($message); + } + } + } + + function feedback($string) { + if ( isset( $this->upgrader->strings[$string] ) ) + $string = $this->upgrader->strings[$string]; + + if ( strpos($string, '%') !== false ) { + $args = func_get_args(); + $args = array_splice($args, 1); + if ( $args ) { + $args = array_map( 'strip_tags', $args ); + $args = array_map( 'esc_html', $args ); + $string = vsprintf($string, $args); + } + } + if ( empty($string) ) + return; + show_message($string); + } + function before() {} + function after() {} + +} + +/** + * Plugin Upgrader Skin for WordPress Plugin Upgrades. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Plugin_Upgrader_Skin extends WP_Upgrader_Skin { + var $plugin = ''; + var $plugin_active = false; + var $plugin_network_active = false; + + function __construct($args = array()) { + $defaults = array( 'url' => '', 'plugin' => '', 'nonce' => '', 'title' => __('Update Plugin') ); + $args = wp_parse_args($args, $defaults); + + $this->plugin = $args['plugin']; + + $this->plugin_active = is_plugin_active( $this->plugin ); + $this->plugin_network_active = is_plugin_active_for_network( $this->plugin ); + + parent::__construct($args); + } + + function after() { + $this->plugin = $this->upgrader->plugin_info(); + if ( !empty($this->plugin) && !is_wp_error($this->result) && $this->plugin_active ){ + echo ''; + } + + $update_actions = array( + 'activate_plugin' => '' . __('Activate Plugin') . '', + 'plugins_page' => '' . __('Return to Plugins page') . '' + ); + if ( $this->plugin_active || ! $this->result || is_wp_error( $this->result ) || ! current_user_can( 'activate_plugins' ) ) + unset( $update_actions['activate_plugin'] ); + + $update_actions = apply_filters('update_plugin_complete_actions', $update_actions, $this->plugin); + if ( ! empty($update_actions) ) + $this->feedback(implode(' | ', (array)$update_actions)); + } +} + +/** + * Plugin Upgrader Skin for WordPress Plugin Upgrades. + * + * @package WordPress + * @subpackage Upgrader + * @since 3.0.0 + */ +class Bulk_Upgrader_Skin extends WP_Upgrader_Skin { + var $in_loop = false; + var $error = false; + + function __construct($args = array()) { + $defaults = array( 'url' => '', 'nonce' => '' ); + $args = wp_parse_args($args, $defaults); + + parent::__construct($args); + } + + function add_strings() { + $this->upgrader->strings['skin_upgrade_start'] = __('The update process is starting. This process may take a while on some hosts, so please be patient.'); + $this->upgrader->strings['skin_update_failed_error'] = __('An error occurred while updating %1$s: %2$s'); + $this->upgrader->strings['skin_update_failed'] = __('The update of %1$s failed.'); + $this->upgrader->strings['skin_update_successful'] = __('%1$s updated successfully.').' '.__('Show Details').'.'; + $this->upgrader->strings['skin_upgrade_end'] = __('All updates have been completed.'); + } + + function feedback($string) { + if ( isset( $this->upgrader->strings[$string] ) ) + $string = $this->upgrader->strings[$string]; + + if ( strpos($string, '%') !== false ) { + $args = func_get_args(); + $args = array_splice($args, 1); + if ( $args ) { + $args = array_map( 'strip_tags', $args ); + $args = array_map( 'esc_html', $args ); + $string = vsprintf($string, $args); + } + } + if ( empty($string) ) + return; + if ( $this->in_loop ) + echo "$string
    \n"; + else + echo "

    $string

    \n"; + } + + function header() { + // Nothing, This will be displayed within a iframe. + } + + function footer() { + // Nothing, This will be displayed within a iframe. + } + function error($error) { + if ( is_string($error) && isset( $this->upgrader->strings[$error] ) ) + $this->error = $this->upgrader->strings[$error]; + + if ( is_wp_error($error) ) { + foreach ( $error->get_error_messages() as $emessage ) { + if ( $error->get_error_data() && is_string( $error->get_error_data() ) ) + $messages[] = $emessage . ' ' . esc_html( $error->get_error_data() ); + else + $messages[] = $emessage; + } + $this->error = implode(', ', $messages); + } + echo ''; + } + + function bulk_header() { + $this->feedback('skin_upgrade_start'); + } + + function bulk_footer() { + $this->feedback('skin_upgrade_end'); + } + + function before($title = '') { + $this->in_loop = true; + printf( '

    ' . $this->upgrader->strings['skin_before_update_header'] . '

    ', $title, $this->upgrader->update_current, $this->upgrader->update_count); + echo ''; + echo '

    '; + $this->flush_output(); + } + + function after($title = '') { + echo '

    '; + if ( $this->error || ! $this->result ) { + if ( $this->error ) + echo '

    ' . sprintf($this->upgrader->strings['skin_update_failed_error'], $title, $this->error) . '

    '; + else + echo '

    ' . sprintf($this->upgrader->strings['skin_update_failed'], $title) . '

    '; + + echo ''; + } + if ( $this->result && ! is_wp_error( $this->result ) ) { + if ( ! $this->error ) + echo '

    ' . sprintf($this->upgrader->strings['skin_update_successful'], $title, 'jQuery(\'#progress-' . esc_js($this->upgrader->update_current) . '\').toggle();jQuery(\'span\', this).toggle(); return false;') . '

    '; + echo ''; + } + + $this->reset(); + $this->flush_output(); + } + + function reset() { + $this->in_loop = false; + $this->error = false; + } + + function flush_output() { + wp_ob_end_flush_all(); + flush(); + } +} + +class Bulk_Plugin_Upgrader_Skin extends Bulk_Upgrader_Skin { + var $plugin_info = array(); // Plugin_Upgrader::bulk() will fill this in. + + function __construct($args = array()) { + parent::__construct($args); + } + + function add_strings() { + parent::add_strings(); + $this->upgrader->strings['skin_before_update_header'] = __('Updating Plugin %1$s (%2$d/%3$d)'); + } + + function before($title = '') { + parent::before($this->plugin_info['Title']); + } + + function after($title = '') { + parent::after($this->plugin_info['Title']); + } + function bulk_footer() { + parent::bulk_footer(); + $update_actions = array( + 'plugins_page' => '' . __('Return to Plugins page') . '', + 'updates_page' => '' . __('Return to WordPress Updates') . '' + ); + if ( ! current_user_can( 'activate_plugins' ) ) + unset( $update_actions['plugins_page'] ); + + $update_actions = apply_filters('update_bulk_plugins_complete_actions', $update_actions, $this->plugin_info); + if ( ! empty($update_actions) ) + $this->feedback(implode(' | ', (array)$update_actions)); + } +} + +class Bulk_Theme_Upgrader_Skin extends Bulk_Upgrader_Skin { + var $theme_info = array(); // Theme_Upgrader::bulk() will fill this in. + + function __construct($args = array()) { + parent::__construct($args); + } + + function add_strings() { + parent::add_strings(); + $this->upgrader->strings['skin_before_update_header'] = __('Updating Theme %1$s (%2$d/%3$d)'); + } + + function before($title = '') { + parent::before( $this->theme_info->display('Name') ); + } + + function after($title = '') { + parent::after( $this->theme_info->display('Name') ); + } + + function bulk_footer() { + parent::bulk_footer(); + $update_actions = array( + 'themes_page' => '' . __('Return to Themes page') . '', + 'updates_page' => '' . __('Return to WordPress Updates') . '' + ); + if ( ! current_user_can( 'switch_themes' ) && ! current_user_can( 'edit_theme_options' ) ) + unset( $update_actions['themes_page'] ); + + $update_actions = apply_filters('update_bulk_theme_complete_actions', $update_actions, $this->theme_info ); + if ( ! empty($update_actions) ) + $this->feedback(implode(' | ', (array)$update_actions)); + } +} + +/** + * Plugin Installer Skin for WordPress Plugin Installer. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Plugin_Installer_Skin extends WP_Upgrader_Skin { + var $api; + var $type; + + function __construct($args = array()) { + $defaults = array( 'type' => 'web', 'url' => '', 'plugin' => '', 'nonce' => '', 'title' => '' ); + $args = wp_parse_args($args, $defaults); + + $this->type = $args['type']; + $this->api = isset($args['api']) ? $args['api'] : array(); + + parent::__construct($args); + } + + function before() { + if ( !empty($this->api) ) + $this->upgrader->strings['process_success'] = sprintf( __('Successfully installed the plugin %s %s.'), $this->api->name, $this->api->version); + } + + function after() { + + $plugin_file = $this->upgrader->plugin_info(); + + $install_actions = array(); + + $from = isset($_GET['from']) ? wp_unslash( $_GET['from'] ) : 'plugins'; + + if ( 'import' == $from ) + $install_actions['activate_plugin'] = '' . __('Activate Plugin & Run Importer') . ''; + else + $install_actions['activate_plugin'] = '' . __('Activate Plugin') . ''; + + if ( is_multisite() && current_user_can( 'manage_network_plugins' ) ) { + $install_actions['network_activate'] = '' . __('Network Activate') . ''; + unset( $install_actions['activate_plugin'] ); + } + + if ( 'import' == $from ) + $install_actions['importers_page'] = '' . __('Return to Importers') . ''; + else if ( $this->type == 'web' ) + $install_actions['plugins_page'] = '' . __('Return to Plugin Installer') . ''; + else + $install_actions['plugins_page'] = '' . __('Return to Plugins page') . ''; + + if ( ! $this->result || is_wp_error($this->result) ) { + unset( $install_actions['activate_plugin'], $install_actions['network_activate'] ); + } elseif ( ! current_user_can( 'activate_plugins' ) ) { + unset( $install_actions['activate_plugin'] ); + } + + $install_actions = apply_filters('install_plugin_complete_actions', $install_actions, $this->api, $plugin_file); + if ( ! empty($install_actions) ) + $this->feedback(implode(' | ', (array)$install_actions)); + } +} + +/** + * Theme Installer Skin for the WordPress Theme Installer. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Theme_Installer_Skin extends WP_Upgrader_Skin { + var $api; + var $type; + + function __construct($args = array()) { + $defaults = array( 'type' => 'web', 'url' => '', 'theme' => '', 'nonce' => '', 'title' => '' ); + $args = wp_parse_args($args, $defaults); + + $this->type = $args['type']; + $this->api = isset($args['api']) ? $args['api'] : array(); + + parent::__construct($args); + } + + function before() { + if ( !empty($this->api) ) + $this->upgrader->strings['process_success'] = sprintf( $this->upgrader->strings['process_success_specific'], $this->api->name, $this->api->version); + } + + function after() { + if ( empty($this->upgrader->result['destination_name']) ) + return; + + $theme_info = $this->upgrader->theme_info(); + if ( empty( $theme_info ) ) + return; + + $name = $theme_info->display('Name'); + $stylesheet = $this->upgrader->result['destination_name']; + $template = $theme_info->get_template(); + + $preview_link = add_query_arg( array( + 'preview' => 1, + 'template' => urlencode( $template ), + 'stylesheet' => urlencode( $stylesheet ), + ), trailingslashit( home_url() ) ); + + $activate_link = add_query_arg( array( + 'action' => 'activate', + 'template' => urlencode( $template ), + 'stylesheet' => urlencode( $stylesheet ), + ), admin_url('themes.php') ); + $activate_link = wp_nonce_url( $activate_link, 'switch-theme_' . $stylesheet ); + + $install_actions = array(); + $install_actions['preview'] = '' . __('Preview') . ''; + $install_actions['preview'] .= '' . __('Live Preview') . ''; + $install_actions['activate'] = '' . __('Activate') . ''; + + if ( is_network_admin() && current_user_can( 'manage_network_themes' ) ) + $install_actions['network_enable'] = '' . __( 'Network Enable' ) . ''; + + if ( $this->type == 'web' ) + $install_actions['themes_page'] = '' . __('Return to Theme Installer') . ''; + elseif ( current_user_can( 'switch_themes' ) || current_user_can( 'edit_theme_options' ) ) + $install_actions['themes_page'] = '' . __('Return to Themes page') . ''; + + if ( ! $this->result || is_wp_error($this->result) || is_network_admin() || ! current_user_can( 'switch_themes' ) ) + unset( $install_actions['activate'], $install_actions['preview'] ); + + $install_actions = apply_filters('install_theme_complete_actions', $install_actions, $this->api, $stylesheet, $theme_info); + if ( ! empty($install_actions) ) + $this->feedback(implode(' | ', (array)$install_actions)); + } +} + +/** + * Theme Upgrader Skin for WordPress Theme Upgrades. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Theme_Upgrader_Skin extends WP_Upgrader_Skin { + var $theme = ''; + + function __construct($args = array()) { + $defaults = array( 'url' => '', 'theme' => '', 'nonce' => '', 'title' => __('Update Theme') ); + $args = wp_parse_args($args, $defaults); + + $this->theme = $args['theme']; + + parent::__construct($args); + } + + function after() { + + $update_actions = array(); + if ( ! empty( $this->upgrader->result['destination_name'] ) && $theme_info = $this->upgrader->theme_info() ) { + $name = $theme_info->display('Name'); + $stylesheet = $this->upgrader->result['destination_name']; + $template = $theme_info->get_template(); + + $preview_link = add_query_arg( array( + 'preview' => 1, + 'template' => urlencode( $template ), + 'stylesheet' => urlencode( $stylesheet ), + ), trailingslashit( home_url() ) ); + + $activate_link = add_query_arg( array( + 'action' => 'activate', + 'template' => urlencode( $template ), + 'stylesheet' => urlencode( $stylesheet ), + ), admin_url('themes.php') ); + $activate_link = wp_nonce_url( $activate_link, 'switch-theme_' . $stylesheet ); + + if ( get_stylesheet() == $stylesheet ) { + if ( current_user_can( 'edit_theme_options' ) ) + $update_actions['preview'] = '' . __('Customize') . ''; + } elseif ( current_user_can( 'switch_themes' ) ) { + $update_actions['preview'] = '' . __('Preview') . ''; + $update_actions['preview'] .= '' . __('Live Preview') . ''; + $update_actions['activate'] = '' . __('Activate') . ''; + } + + if ( ! $this->result || is_wp_error( $this->result ) || is_network_admin() ) + unset( $update_actions['preview'], $update_actions['activate'] ); + } + + $update_actions['themes_page'] = '' . __('Return to Themes page') . ''; + + $update_actions = apply_filters('update_theme_complete_actions', $update_actions, $this->theme); + if ( ! empty($update_actions) ) + $this->feedback(implode(' | ', (array)$update_actions)); + } +} + +/** + * Translation Upgrader Skin for WordPress Translation Upgrades. + * + * @package WordPress + * @subpackage Upgrader + * @since 3.7.0 + */ +class Language_Pack_Upgrader_Skin extends WP_Upgrader_Skin { + var $language_update = null; + var $done_header = false; + var $display_footer_actions = true; + + function __construct( $args = array() ) { + $defaults = array( 'url' => '', 'nonce' => '', 'title' => __( 'Update Translations' ), 'skip_header_footer' => false ); + $args = wp_parse_args( $args, $defaults ); + if ( $args['skip_header_footer'] ) { + $this->done_header = true; + $this->display_footer_actions = false; + } + parent::__construct( $args ); + } + + function before() { + $name = $this->upgrader->get_name_for_update( $this->language_update ); + + echo '
    '; + + printf( '

    ' . __( 'Updating translations for %1$s (%2$s)…' ) . '

    ', $name, $this->language_update->language ); + } + + function error( $error ) { + echo '
    '; + parent::error( $error ); + echo '
    '; + } + + function after() { + echo '
    '; + } + + function bulk_footer() { + $update_actions = array(); + $update_actions['updates_page'] = '' . __( 'Return to WordPress Updates' ) . ''; + $update_actions = apply_filters( 'update_translations_complete_actions', $update_actions ); + + if ( $update_actions && $this->display_footer_actions ) + $this->feedback( implode( ' | ', $update_actions ) ); + + parent::footer(); + } +} + +/** + * Upgrader Skin for Automatic WordPress Upgrades + * + * This skin is designed to be used when no output is intended, all output + * is captured and stored for the caller to process and log/email/discard. + * + * @package WordPress + * @subpackage Upgrader + * @since 3.7.0 + */ +class Automatic_Upgrader_Skin extends WP_Upgrader_Skin { + protected $messages = array(); + + function request_filesystem_credentials( $error = false, $context = '' ) { + if ( $context ) + $this->options['context'] = $context; + // TODO: fix up request_filesystem_credentials(), or split it, to allow us to request a no-output version + // This will output a credentials form in event of failure, We don't want that, so just hide with a buffer + ob_start(); + $result = parent::request_filesystem_credentials( $error ); + ob_end_clean(); + return $result; + } + + function get_upgrade_messages() { + return $this->messages; + } + + function feedback( $data ) { + if ( is_wp_error( $data ) ) + $string = $data->get_error_message(); + else if ( is_array( $data ) ) + return; + else + $string = $data; + + if ( ! empty( $this->upgrader->strings[ $string ] ) ) + $string = $this->upgrader->strings[ $string ]; + + if ( strpos( $string, '%' ) !== false ) { + $args = func_get_args(); + $args = array_splice( $args, 1 ); + if ( ! empty( $args ) ) + $string = vsprintf( $string, $args ); + } + + $string = trim( $string ); + + // Only allow basic HTML in the messages, as it'll be used in emails/logs rather than direct browser output. + $string = wp_kses( $string, array( + 'a' => array( + 'href' => true + ), + 'br' => true, + 'em' => true, + 'strong' => true, + ) ); + + if ( empty( $string ) ) + return; + + $this->messages[] = $string; + } + + function header() { + ob_start(); + } + + function footer() { + $output = ob_get_contents(); + if ( ! empty( $output ) ) + $this->feedback( $output ); + ob_end_clean(); + } + + function bulk_header() {} + function bulk_footer() {} + function before() {} + function after() {} +} diff --git a/src/wp-admin/includes/class-wp-upgrader.php b/src/wp-admin/includes/class-wp-upgrader.php new file mode 100644 index 0000000..1d35c24 --- /dev/null +++ b/src/wp-admin/includes/class-wp-upgrader.php @@ -0,0 +1,2463 @@ +skin = new WP_Upgrader_Skin(); + else + $this->skin = $skin; + } + + function init() { + $this->skin->set_upgrader($this); + $this->generic_strings(); + } + + function generic_strings() { + $this->strings['bad_request'] = __('Invalid Data provided.'); + $this->strings['fs_unavailable'] = __('Could not access filesystem.'); + $this->strings['fs_error'] = __('Filesystem error.'); + $this->strings['fs_no_root_dir'] = __('Unable to locate WordPress Root directory.'); + $this->strings['fs_no_content_dir'] = __('Unable to locate WordPress Content directory (wp-content).'); + $this->strings['fs_no_plugins_dir'] = __('Unable to locate WordPress Plugin directory.'); + $this->strings['fs_no_themes_dir'] = __('Unable to locate WordPress Theme directory.'); + /* translators: %s: directory name */ + $this->strings['fs_no_folder'] = __('Unable to locate needed folder (%s).'); + + $this->strings['download_failed'] = __('Download failed.'); + $this->strings['installing_package'] = __('Installing the latest version…'); + $this->strings['no_files'] = __('The package contains no files.'); + $this->strings['folder_exists'] = __('Destination folder already exists.'); + $this->strings['mkdir_failed'] = __('Could not create directory.'); + $this->strings['incompatible_archive'] = __('The package could not be installed.'); + + $this->strings['maintenance_start'] = __('Enabling Maintenance mode…'); + $this->strings['maintenance_end'] = __('Disabling Maintenance mode…'); + } + + function fs_connect( $directories = array() ) { + global $wp_filesystem; + + if ( false === ($credentials = $this->skin->request_filesystem_credentials()) ) + return false; + + if ( ! WP_Filesystem($credentials) ) { + $error = true; + if ( is_object($wp_filesystem) && $wp_filesystem->errors->get_error_code() ) + $error = $wp_filesystem->errors; + $this->skin->request_filesystem_credentials($error); //Failed to connect, Error and request again + return false; + } + + if ( ! is_object($wp_filesystem) ) + return new WP_Error('fs_unavailable', $this->strings['fs_unavailable'] ); + + if ( is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code() ) + return new WP_Error('fs_error', $this->strings['fs_error'], $wp_filesystem->errors); + + foreach ( (array)$directories as $dir ) { + switch ( $dir ) { + case ABSPATH: + if ( ! $wp_filesystem->abspath() ) + return new WP_Error('fs_no_root_dir', $this->strings['fs_no_root_dir']); + break; + case WP_CONTENT_DIR: + if ( ! $wp_filesystem->wp_content_dir() ) + return new WP_Error('fs_no_content_dir', $this->strings['fs_no_content_dir']); + break; + case WP_PLUGIN_DIR: + if ( ! $wp_filesystem->wp_plugins_dir() ) + return new WP_Error('fs_no_plugins_dir', $this->strings['fs_no_plugins_dir']); + break; + case get_theme_root(): + if ( ! $wp_filesystem->wp_themes_dir() ) + return new WP_Error('fs_no_themes_dir', $this->strings['fs_no_themes_dir']); + break; + default: + if ( ! $wp_filesystem->find_folder($dir) ) + return new WP_Error( 'fs_no_folder', sprintf( $this->strings['fs_no_folder'], esc_html( basename( $dir ) ) ) ); + break; + } + } + return true; + } //end fs_connect(); + + function download_package($package) { + + /** + * Filter whether to return the package. + * + * @since 3.7.0 + * + * @param bool $reply Whether to bail without returning the package. Default is false. + * @param string $package The package file name. + * @param object $this The WP_Upgrader instance. + */ + $reply = apply_filters( 'upgrader_pre_download', false, $package, $this ); + if ( false !== $reply ) + return $reply; + + if ( ! preg_match('!^(http|https|ftp)://!i', $package) && file_exists($package) ) //Local file or remote? + return $package; //must be a local file.. + + if ( empty($package) ) + return new WP_Error('no_package', $this->strings['no_package']); + + $this->skin->feedback('downloading_package', $package); + + $download_file = download_url($package); + + if ( is_wp_error($download_file) ) + return new WP_Error('download_failed', $this->strings['download_failed'], $download_file->get_error_message()); + + return $download_file; + } + + function unpack_package($package, $delete_package = true) { + global $wp_filesystem; + + $this->skin->feedback('unpack_package'); + + $upgrade_folder = $wp_filesystem->wp_content_dir() . 'upgrade/'; + + //Clean up contents of upgrade directory beforehand. + $upgrade_files = $wp_filesystem->dirlist($upgrade_folder); + if ( !empty($upgrade_files) ) { + foreach ( $upgrade_files as $file ) + $wp_filesystem->delete($upgrade_folder . $file['name'], true); + } + + //We need a working directory + $working_dir = $upgrade_folder . basename($package, '.zip'); + + // Clean up working directory + if ( $wp_filesystem->is_dir($working_dir) ) + $wp_filesystem->delete($working_dir, true); + + // Unzip package to working directory + $result = unzip_file( $package, $working_dir ); + + // Once extracted, delete the package if required. + if ( $delete_package ) + unlink($package); + + if ( is_wp_error($result) ) { + $wp_filesystem->delete($working_dir, true); + if ( 'incompatible_archive' == $result->get_error_code() ) { + return new WP_Error( 'incompatible_archive', $this->strings['incompatible_archive'], $result->get_error_data() ); + } + return $result; + } + + return $working_dir; + } + + function install_package( $args = array() ) { + global $wp_filesystem, $wp_theme_directories; + + $defaults = array( + 'source' => '', // Please always pass this + 'destination' => '', // and this + 'clear_destination' => false, + 'clear_working' => false, + 'abort_if_destination_exists' => true, + 'hook_extra' => array() + ); + + $args = wp_parse_args($args, $defaults); + extract($args); + + @set_time_limit( 300 ); + + if ( empty($source) || empty($destination) ) + return new WP_Error('bad_request', $this->strings['bad_request']); + + $this->skin->feedback('installing_package'); + + $res = apply_filters('upgrader_pre_install', true, $hook_extra); + if ( is_wp_error($res) ) + return $res; + + //Retain the Original source and destinations + $remote_source = $source; + $local_destination = $destination; + + $source_files = array_keys( $wp_filesystem->dirlist($remote_source) ); + $remote_destination = $wp_filesystem->find_folder($local_destination); + + //Locate which directory to copy to the new folder, This is based on the actual folder holding the files. + if ( 1 == count($source_files) && $wp_filesystem->is_dir( trailingslashit($source) . $source_files[0] . '/') ) //Only one folder? Then we want its contents. + $source = trailingslashit($source) . trailingslashit($source_files[0]); + elseif ( count($source_files) == 0 ) + return new WP_Error( 'incompatible_archive_empty', $this->strings['incompatible_archive'], $this->strings['no_files'] ); // There are no files? + else //It's only a single file, the upgrader will use the foldername of this file as the destination folder. foldername is based on zip filename. + $source = trailingslashit($source); + + //Hook ability to change the source file location.. + $source = apply_filters('upgrader_source_selection', $source, $remote_source, $this); + if ( is_wp_error($source) ) + return $source; + + //Has the source location changed? If so, we need a new source_files list. + if ( $source !== $remote_source ) + $source_files = array_keys( $wp_filesystem->dirlist($source) ); + + // Protection against deleting files in any important base directories. + // Theme_Upgrader & Plugin_Upgrader also trigger this, as they pass the destination directory (WP_PLUGIN_DIR / wp-content/themes) + // intending to copy the directory into the directory, whilst they pass the source as the actual files to copy. + $protected_directories = array( ABSPATH, WP_CONTENT_DIR, WP_PLUGIN_DIR, WP_CONTENT_DIR . '/themes' ); + if ( is_array( $wp_theme_directories ) ) + $protected_directories = array_merge( $protected_directories, $wp_theme_directories ); + if ( in_array( $destination, $protected_directories ) ) { + $remote_destination = trailingslashit($remote_destination) . trailingslashit(basename($source)); + $destination = trailingslashit($destination) . trailingslashit(basename($source)); + } + + if ( $clear_destination ) { + //We're going to clear the destination if there's something there + $this->skin->feedback('remove_old'); + $removed = true; + if ( $wp_filesystem->exists($remote_destination) ) + $removed = $wp_filesystem->delete($remote_destination, true); + $removed = apply_filters('upgrader_clear_destination', $removed, $local_destination, $remote_destination, $hook_extra); + + if ( is_wp_error($removed) ) + return $removed; + else if ( ! $removed ) + return new WP_Error('remove_old_failed', $this->strings['remove_old_failed']); + } elseif ( $abort_if_destination_exists && $wp_filesystem->exists($remote_destination) ) { + //If we're not clearing the destination folder and something exists there already, Bail. + //But first check to see if there are actually any files in the folder. + $_files = $wp_filesystem->dirlist($remote_destination); + if ( ! empty($_files) ) { + $wp_filesystem->delete($remote_source, true); //Clear out the source files. + return new WP_Error('folder_exists', $this->strings['folder_exists'], $remote_destination ); + } + } + + //Create destination if needed + if ( !$wp_filesystem->exists($remote_destination) ) + if ( !$wp_filesystem->mkdir($remote_destination, FS_CHMOD_DIR) ) + return new WP_Error( 'mkdir_failed_destination', $this->strings['mkdir_failed'], $remote_destination ); + + // Copy new version of item into place. + $result = copy_dir($source, $remote_destination); + if ( is_wp_error($result) ) { + if ( $clear_working ) + $wp_filesystem->delete($remote_source, true); + return $result; + } + + //Clear the Working folder? + if ( $clear_working ) + $wp_filesystem->delete($remote_source, true); + + $destination_name = basename( str_replace($local_destination, '', $destination) ); + if ( '.' == $destination_name ) + $destination_name = ''; + + $this->result = compact('local_source', 'source', 'source_name', 'source_files', 'destination', 'destination_name', 'local_destination', 'remote_destination', 'clear_destination', 'delete_source_dir'); + + $res = apply_filters('upgrader_post_install', true, $hook_extra, $this->result); + if ( is_wp_error($res) ) { + $this->result = $res; + return $res; + } + + //Bombard the calling function will all the info which we've just used. + return $this->result; + } + + function run($options) { + + $defaults = array( + 'package' => '', // Please always pass this. + 'destination' => '', // And this + 'clear_destination' => false, + 'abort_if_destination_exists' => true, // Abort if the Destination directory exists, Pass clear_destination as false please + 'clear_working' => true, + 'is_multi' => false, + 'hook_extra' => array() // Pass any extra $hook_extra args here, this will be passed to any hooked filters. + ); + + $options = wp_parse_args($options, $defaults); + extract($options); + + if ( ! $is_multi ) // call $this->header separately if running multiple times + $this->skin->header(); + + // Connect to the Filesystem first. + $res = $this->fs_connect( array(WP_CONTENT_DIR, $destination) ); + // Mainly for non-connected filesystem. + if ( ! $res ) { + if ( ! $is_multi ) + $this->skin->footer(); + return false; + } + + $this->skin->before(); + + if ( is_wp_error($res) ) { + $this->skin->error($res); + $this->skin->after(); + if ( ! $is_multi ) + $this->skin->footer(); + return $res; + } + + //Download the package (Note, This just returns the filename of the file if the package is a local file) + $download = $this->download_package( $package ); + if ( is_wp_error($download) ) { + $this->skin->error($download); + $this->skin->after(); + if ( ! $is_multi ) + $this->skin->footer(); + return $download; + } + + $delete_package = ($download != $package); // Do not delete a "local" file + + //Unzips the file into a temporary directory + $working_dir = $this->unpack_package( $download, $delete_package ); + if ( is_wp_error($working_dir) ) { + $this->skin->error($working_dir); + $this->skin->after(); + if ( ! $is_multi ) + $this->skin->footer(); + return $working_dir; + } + + //With the given options, this installs it to the destination directory. + $result = $this->install_package( array( + 'source' => $working_dir, + 'destination' => $destination, + 'clear_destination' => $clear_destination, + 'abort_if_destination_exists' => $abort_if_destination_exists, + 'clear_working' => $clear_working, + 'hook_extra' => $hook_extra + ) ); + + $this->skin->set_result($result); + if ( is_wp_error($result) ) { + $this->skin->error($result); + $this->skin->feedback('process_failed'); + } else { + //Install Succeeded + $this->skin->feedback('process_success'); + } + + $this->skin->after(); + + if ( ! $is_multi ) { + do_action( 'upgrader_process_complete', $this, $hook_extra ); + $this->skin->footer(); + } + + return $result; + } + + function maintenance_mode($enable = false) { + global $wp_filesystem; + $file = $wp_filesystem->abspath() . '.maintenance'; + if ( $enable ) { + $this->skin->feedback('maintenance_start'); + // Create maintenance file to signal that we are upgrading + $maintenance_string = ''; + $wp_filesystem->delete($file); + $wp_filesystem->put_contents($file, $maintenance_string, FS_CHMOD_FILE); + } else if ( !$enable && $wp_filesystem->exists($file) ) { + $this->skin->feedback('maintenance_end'); + $wp_filesystem->delete($file); + } + } + +} + +/** + * Plugin Upgrader class for WordPress Plugins, It is designed to upgrade/install plugins from a local zip, remote zip URL, or uploaded zip file. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Plugin_Upgrader extends WP_Upgrader { + + var $result; + var $bulk = false; + + function upgrade_strings() { + $this->strings['up_to_date'] = __('The plugin is at the latest version.'); + $this->strings['no_package'] = __('Update package not available.'); + $this->strings['downloading_package'] = __('Downloading update from %s…'); + $this->strings['unpack_package'] = __('Unpacking the update…'); + $this->strings['remove_old'] = __('Removing the old version of the plugin…'); + $this->strings['remove_old_failed'] = __('Could not remove the old plugin.'); + $this->strings['process_failed'] = __('Plugin update failed.'); + $this->strings['process_success'] = __('Plugin updated successfully.'); + } + + function install_strings() { + $this->strings['no_package'] = __('Install package not available.'); + $this->strings['downloading_package'] = __('Downloading install package from %s…'); + $this->strings['unpack_package'] = __('Unpacking the package…'); + $this->strings['installing_package'] = __('Installing the plugin…'); + $this->strings['no_files'] = __('The plugin contains no files.'); + $this->strings['process_failed'] = __('Plugin install failed.'); + $this->strings['process_success'] = __('Plugin installed successfully.'); + } + + function install( $package, $args = array() ) { + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->install_strings(); + + add_filter('upgrader_source_selection', array($this, 'check_package') ); + + $this->run( array( + 'package' => $package, + 'destination' => WP_PLUGIN_DIR, + 'clear_destination' => false, // Do not overwrite files. + 'clear_working' => true, + 'hook_extra' => array( + 'type' => 'plugin', + 'action' => 'install', + ) + ) ); + + remove_filter('upgrader_source_selection', array($this, 'check_package') ); + + if ( ! $this->result || is_wp_error($this->result) ) + return $this->result; + + // Force refresh of plugin update information + wp_clean_plugins_cache( $parsed_args['clear_update_cache'] ); + + return true; + } + + function upgrade( $plugin, $args = array() ) { + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->upgrade_strings(); + + $current = get_site_transient( 'update_plugins' ); + if ( !isset( $current->response[ $plugin ] ) ) { + $this->skin->before(); + $this->skin->set_result(false); + $this->skin->error('up_to_date'); + $this->skin->after(); + return false; + } + + // Get the URL to the zip file + $r = $current->response[ $plugin ]; + + add_filter('upgrader_pre_install', array($this, 'deactivate_plugin_before_upgrade'), 10, 2); + add_filter('upgrader_clear_destination', array($this, 'delete_old_plugin'), 10, 4); + //'source_selection' => array($this, 'source_selection'), //there's a trac ticket to move up the directory for zip's which are made a bit differently, useful for non-.org plugins. + + $this->run( array( + 'package' => $r->package, + 'destination' => WP_PLUGIN_DIR, + 'clear_destination' => true, + 'clear_working' => true, + 'hook_extra' => array( + 'plugin' => $plugin, + 'type' => 'plugin', + 'action' => 'update', + ), + ) ); + + // Cleanup our hooks, in case something else does a upgrade on this connection. + remove_filter('upgrader_pre_install', array($this, 'deactivate_plugin_before_upgrade')); + remove_filter('upgrader_clear_destination', array($this, 'delete_old_plugin')); + + if ( ! $this->result || is_wp_error($this->result) ) + return $this->result; + + // Force refresh of plugin update information + wp_clean_plugins_cache( $parsed_args['clear_update_cache'] ); + + return true; + } + + function bulk_upgrade( $plugins, $args = array() ) { + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->bulk = true; + $this->upgrade_strings(); + + $current = get_site_transient( 'update_plugins' ); + + add_filter('upgrader_clear_destination', array($this, 'delete_old_plugin'), 10, 4); + + $this->skin->header(); + + // Connect to the Filesystem first. + $res = $this->fs_connect( array(WP_CONTENT_DIR, WP_PLUGIN_DIR) ); + if ( ! $res ) { + $this->skin->footer(); + return false; + } + + $this->skin->bulk_header(); + + // Only start maintenance mode if: + // - running Multisite and there are one or more plugins specified, OR + // - a plugin with an update available is currently active. + // @TODO: For multisite, maintenance mode should only kick in for individual sites if at all possible. + $maintenance = ( is_multisite() && ! empty( $plugins ) ); + foreach ( $plugins as $plugin ) + $maintenance = $maintenance || ( is_plugin_active( $plugin ) && isset( $current->response[ $plugin] ) ); + if ( $maintenance ) + $this->maintenance_mode(true); + + $results = array(); + + $this->update_count = count($plugins); + $this->update_current = 0; + foreach ( $plugins as $plugin ) { + $this->update_current++; + $this->skin->plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin, false, true); + + if ( !isset( $current->response[ $plugin ] ) ) { + $this->skin->set_result(true); + $this->skin->before(); + $this->skin->feedback('up_to_date'); + $this->skin->after(); + $results[$plugin] = true; + continue; + } + + // Get the URL to the zip file + $r = $current->response[ $plugin ]; + + $this->skin->plugin_active = is_plugin_active($plugin); + + $result = $this->run( array( + 'package' => $r->package, + 'destination' => WP_PLUGIN_DIR, + 'clear_destination' => true, + 'clear_working' => true, + 'is_multi' => true, + 'hook_extra' => array( + 'plugin' => $plugin + ) + ) ); + + $results[$plugin] = $this->result; + + // Prevent credentials auth screen from displaying multiple times + if ( false === $result ) + break; + } //end foreach $plugins + + $this->maintenance_mode(false); + + do_action( 'upgrader_process_complete', $this, array( + 'action' => 'update', + 'type' => 'plugin', + 'bulk' => true, + 'plugins' => $plugins, + ) ); + + $this->skin->bulk_footer(); + + $this->skin->footer(); + + // Cleanup our hooks, in case something else does a upgrade on this connection. + remove_filter('upgrader_clear_destination', array($this, 'delete_old_plugin')); + + // Force refresh of plugin update information + wp_clean_plugins_cache( $parsed_args['clear_update_cache'] ); + + return $results; + } + + function check_package($source) { + global $wp_filesystem; + + if ( is_wp_error($source) ) + return $source; + + $working_directory = str_replace( $wp_filesystem->wp_content_dir(), trailingslashit(WP_CONTENT_DIR), $source); + if ( ! is_dir($working_directory) ) // Sanity check, if the above fails, lets not prevent installation. + return $source; + + // Check the folder contains at least 1 valid plugin. + $plugins_found = false; + foreach ( glob( $working_directory . '*.php' ) as $file ) { + $info = get_plugin_data($file, false, false); + if ( !empty( $info['Name'] ) ) { + $plugins_found = true; + break; + } + } + + if ( ! $plugins_found ) + return new WP_Error( 'incompatible_archive_no_plugins', $this->strings['incompatible_archive'], __( 'No valid plugins were found.' ) ); + + return $source; + } + + //return plugin info. + function plugin_info() { + if ( ! is_array($this->result) ) + return false; + if ( empty($this->result['destination_name']) ) + return false; + + $plugin = get_plugins('/' . $this->result['destination_name']); //Ensure to pass with leading slash + if ( empty($plugin) ) + return false; + + $pluginfiles = array_keys($plugin); //Assume the requested plugin is the first in the list + + return $this->result['destination_name'] . '/' . $pluginfiles[0]; + } + + //Hooked to pre_install + function deactivate_plugin_before_upgrade($return, $plugin) { + + if ( is_wp_error($return) ) //Bypass. + return $return; + + // When in cron (background updates) don't deactivate the plugin, as we require a browser to reactivate it + if ( defined( 'DOING_CRON' ) && DOING_CRON ) + return $return; + + $plugin = isset($plugin['plugin']) ? $plugin['plugin'] : ''; + if ( empty($plugin) ) + return new WP_Error('bad_request', $this->strings['bad_request']); + + if ( is_plugin_active($plugin) ) { + //Deactivate the plugin silently, Prevent deactivation hooks from running. + deactivate_plugins($plugin, true); + } + } + + //Hooked to upgrade_clear_destination + function delete_old_plugin($removed, $local_destination, $remote_destination, $plugin) { + global $wp_filesystem; + + if ( is_wp_error($removed) ) + return $removed; //Pass errors through. + + $plugin = isset($plugin['plugin']) ? $plugin['plugin'] : ''; + if ( empty($plugin) ) + return new WP_Error('bad_request', $this->strings['bad_request']); + + $plugins_dir = $wp_filesystem->wp_plugins_dir(); + $this_plugin_dir = trailingslashit( dirname($plugins_dir . $plugin) ); + + if ( ! $wp_filesystem->exists($this_plugin_dir) ) //If it's already vanished. + return $removed; + + // If plugin is in its own directory, recursively delete the directory. + if ( strpos($plugin, '/') && $this_plugin_dir != $plugins_dir ) //base check on if plugin includes directory separator AND that it's not the root plugin folder + $deleted = $wp_filesystem->delete($this_plugin_dir, true); + else + $deleted = $wp_filesystem->delete($plugins_dir . $plugin); + + if ( ! $deleted ) + return new WP_Error('remove_old_failed', $this->strings['remove_old_failed']); + + return true; + } +} + +/** + * Theme Upgrader class for WordPress Themes, It is designed to upgrade/install themes from a local zip, remote zip URL, or uploaded zip file. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Theme_Upgrader extends WP_Upgrader { + + var $result; + var $bulk = false; + + function upgrade_strings() { + $this->strings['up_to_date'] = __('The theme is at the latest version.'); + $this->strings['no_package'] = __('Update package not available.'); + $this->strings['downloading_package'] = __('Downloading update from %s…'); + $this->strings['unpack_package'] = __('Unpacking the update…'); + $this->strings['remove_old'] = __('Removing the old version of the theme…'); + $this->strings['remove_old_failed'] = __('Could not remove the old theme.'); + $this->strings['process_failed'] = __('Theme update failed.'); + $this->strings['process_success'] = __('Theme updated successfully.'); + } + + function install_strings() { + $this->strings['no_package'] = __('Install package not available.'); + $this->strings['downloading_package'] = __('Downloading install package from %s…'); + $this->strings['unpack_package'] = __('Unpacking the package…'); + $this->strings['installing_package'] = __('Installing the theme…'); + $this->strings['no_files'] = __('The theme contains no files.'); + $this->strings['process_failed'] = __('Theme install failed.'); + $this->strings['process_success'] = __('Theme installed successfully.'); + /* translators: 1: theme name, 2: version */ + $this->strings['process_success_specific'] = __('Successfully installed the theme %1$s %2$s.'); + $this->strings['parent_theme_search'] = __('This theme requires a parent theme. Checking if it is installed…'); + /* translators: 1: theme name, 2: version */ + $this->strings['parent_theme_prepare_install'] = __('Preparing to install %1$s %2$s…'); + /* translators: 1: theme name, 2: version */ + $this->strings['parent_theme_currently_installed'] = __('The parent theme, %1$s %2$s, is currently installed.'); + /* translators: 1: theme name, 2: version */ + $this->strings['parent_theme_install_success'] = __('Successfully installed the parent theme, %1$s %2$s.'); + $this->strings['parent_theme_not_found'] = __('The parent theme could not be found. You will need to install the parent theme, %s, before you can use this child theme.'); + } + + function check_parent_theme_filter($install_result, $hook_extra, $child_result) { + // Check to see if we need to install a parent theme + $theme_info = $this->theme_info(); + + if ( ! $theme_info->parent() ) + return $install_result; + + $this->skin->feedback( 'parent_theme_search' ); + + if ( ! $theme_info->parent()->errors() ) { + $this->skin->feedback( 'parent_theme_currently_installed', $theme_info->parent()->display('Name'), $theme_info->parent()->display('Version') ); + // We already have the theme, fall through. + return $install_result; + } + + // We don't have the parent theme, lets install it + $api = themes_api('theme_information', array('slug' => $theme_info->get('Template'), 'fields' => array('sections' => false, 'tags' => false) ) ); //Save on a bit of bandwidth. + + if ( ! $api || is_wp_error($api) ) { + $this->skin->feedback( 'parent_theme_not_found', $theme_info->get('Template') ); + // Don't show activate or preview actions after install + add_filter('install_theme_complete_actions', array($this, 'hide_activate_preview_actions') ); + return $install_result; + } + + // Backup required data we're going to override: + $child_api = $this->skin->api; + $child_success_message = $this->strings['process_success']; + + // Override them + $this->skin->api = $api; + $this->strings['process_success_specific'] = $this->strings['parent_theme_install_success'];//, $api->name, $api->version); + + $this->skin->feedback('parent_theme_prepare_install', $api->name, $api->version); + + add_filter('install_theme_complete_actions', '__return_false', 999); // Don't show any actions after installing the theme. + + // Install the parent theme + $parent_result = $this->run( array( + 'package' => $api->download_link, + 'destination' => get_theme_root(), + 'clear_destination' => false, //Do not overwrite files. + 'clear_working' => true + ) ); + + if ( is_wp_error($parent_result) ) + add_filter('install_theme_complete_actions', array($this, 'hide_activate_preview_actions') ); + + // Start cleaning up after the parents installation + remove_filter('install_theme_complete_actions', '__return_false', 999); + + // Reset child's result and data + $this->result = $child_result; + $this->skin->api = $child_api; + $this->strings['process_success'] = $child_success_message; + + return $install_result; + } + + function hide_activate_preview_actions($actions) { + unset($actions['activate'], $actions['preview']); + return $actions; + } + + function install( $package, $args = array() ) { + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->install_strings(); + + add_filter('upgrader_source_selection', array($this, 'check_package') ); + add_filter('upgrader_post_install', array($this, 'check_parent_theme_filter'), 10, 3); + + $this->run( array( + 'package' => $package, + 'destination' => get_theme_root(), + 'clear_destination' => false, //Do not overwrite files. + 'clear_working' => true, + 'hook_extra' => array( + 'type' => 'theme', + 'action' => 'install', + ), + ) ); + + remove_filter('upgrader_source_selection', array($this, 'check_package') ); + remove_filter('upgrader_post_install', array($this, 'check_parent_theme_filter')); + + if ( ! $this->result || is_wp_error($this->result) ) + return $this->result; + + // Refresh the Theme Update information + wp_clean_themes_cache( $parsed_args['clear_update_cache'] ); + + return true; + } + + function upgrade( $theme, $args = array() ) { + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->upgrade_strings(); + + // Is an update available? + $current = get_site_transient( 'update_themes' ); + if ( !isset( $current->response[ $theme ] ) ) { + $this->skin->before(); + $this->skin->set_result(false); + $this->skin->error('up_to_date'); + $this->skin->after(); + return false; + } + + $r = $current->response[ $theme ]; + + add_filter('upgrader_pre_install', array($this, 'current_before'), 10, 2); + add_filter('upgrader_post_install', array($this, 'current_after'), 10, 2); + add_filter('upgrader_clear_destination', array($this, 'delete_old_theme'), 10, 4); + + $this->run( array( + 'package' => $r['package'], + 'destination' => get_theme_root( $theme ), + 'clear_destination' => true, + 'clear_working' => true, + 'hook_extra' => array( + 'theme' => $theme, + 'type' => 'theme', + 'action' => 'update', + ), + ) ); + + remove_filter('upgrader_pre_install', array($this, 'current_before')); + remove_filter('upgrader_post_install', array($this, 'current_after')); + remove_filter('upgrader_clear_destination', array($this, 'delete_old_theme')); + + if ( ! $this->result || is_wp_error($this->result) ) + return $this->result; + + wp_clean_themes_cache( $parsed_args['clear_update_cache'] ); + + return true; + } + + function bulk_upgrade( $themes, $args = array() ) { + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->bulk = true; + $this->upgrade_strings(); + + $current = get_site_transient( 'update_themes' ); + + add_filter('upgrader_pre_install', array($this, 'current_before'), 10, 2); + add_filter('upgrader_post_install', array($this, 'current_after'), 10, 2); + add_filter('upgrader_clear_destination', array($this, 'delete_old_theme'), 10, 4); + + $this->skin->header(); + + // Connect to the Filesystem first. + $res = $this->fs_connect( array(WP_CONTENT_DIR) ); + if ( ! $res ) { + $this->skin->footer(); + return false; + } + + $this->skin->bulk_header(); + + // Only start maintenance mode if: + // - running Multisite and there are one or more themes specified, OR + // - a theme with an update available is currently in use. + // @TODO: For multisite, maintenance mode should only kick in for individual sites if at all possible. + $maintenance = ( is_multisite() && ! empty( $themes ) ); + foreach ( $themes as $theme ) + $maintenance = $maintenance || $theme == get_stylesheet() || $theme == get_template(); + if ( $maintenance ) + $this->maintenance_mode(true); + + $results = array(); + + $this->update_count = count($themes); + $this->update_current = 0; + foreach ( $themes as $theme ) { + $this->update_current++; + + $this->skin->theme_info = $this->theme_info($theme); + + if ( !isset( $current->response[ $theme ] ) ) { + $this->skin->set_result(true); + $this->skin->before(); + $this->skin->feedback('up_to_date'); + $this->skin->after(); + $results[$theme] = true; + continue; + } + + // Get the URL to the zip file + $r = $current->response[ $theme ]; + + $result = $this->run( array( + 'package' => $r['package'], + 'destination' => get_theme_root( $theme ), + 'clear_destination' => true, + 'clear_working' => true, + 'hook_extra' => array( + 'theme' => $theme + ), + ) ); + + $results[$theme] = $this->result; + + // Prevent credentials auth screen from displaying multiple times + if ( false === $result ) + break; + } //end foreach $plugins + + $this->maintenance_mode(false); + + do_action( 'upgrader_process_complete', $this, array( + 'action' => 'update', + 'type' => 'theme', + 'bulk' => true, + 'themes' => $themes, + ) ); + + $this->skin->bulk_footer(); + + $this->skin->footer(); + + // Cleanup our hooks, in case something else does a upgrade on this connection. + remove_filter('upgrader_pre_install', array($this, 'current_before')); + remove_filter('upgrader_post_install', array($this, 'current_after')); + remove_filter('upgrader_clear_destination', array($this, 'delete_old_theme')); + + // Refresh the Theme Update information + wp_clean_themes_cache( $parsed_args['clear_update_cache'] ); + + return $results; + } + + function check_package($source) { + global $wp_filesystem; + + if ( is_wp_error($source) ) + return $source; + + // Check the folder contains a valid theme + $working_directory = str_replace( $wp_filesystem->wp_content_dir(), trailingslashit(WP_CONTENT_DIR), $source); + if ( ! is_dir($working_directory) ) // Sanity check, if the above fails, lets not prevent installation. + return $source; + + // A proper archive should have a style.css file in the single subdirectory + if ( ! file_exists( $working_directory . 'style.css' ) ) + return new WP_Error( 'incompatible_archive_theme_no_style', $this->strings['incompatible_archive'], __( 'The theme is missing the style.css stylesheet.' ) ); + + $info = get_file_data( $working_directory . 'style.css', array( 'Name' => 'Theme Name', 'Template' => 'Template' ) ); + + if ( empty( $info['Name'] ) ) + return new WP_Error( 'incompatible_archive_theme_no_name', $this->strings['incompatible_archive'], __( "The style.css stylesheet doesn't contain a valid theme header." ) ); + + // If it's not a child theme, it must have at least an index.php to be legit. + if ( empty( $info['Template'] ) && ! file_exists( $working_directory . 'index.php' ) ) + return new WP_Error( 'incompatible_archive_theme_no_index', $this->strings['incompatible_archive'], __( 'The theme is missing the index.php file.' ) ); + + return $source; + } + + function current_before($return, $theme) { + + if ( is_wp_error($return) ) + return $return; + + $theme = isset($theme['theme']) ? $theme['theme'] : ''; + + if ( $theme != get_stylesheet() ) //If not current + return $return; + //Change to maintenance mode now. + if ( ! $this->bulk ) + $this->maintenance_mode(true); + + return $return; + } + + function current_after($return, $theme) { + if ( is_wp_error($return) ) + return $return; + + $theme = isset($theme['theme']) ? $theme['theme'] : ''; + + if ( $theme != get_stylesheet() ) // If not current + return $return; + + // Ensure stylesheet name hasn't changed after the upgrade: + if ( $theme == get_stylesheet() && $theme != $this->result['destination_name'] ) { + wp_clean_themes_cache(); + $stylesheet = $this->result['destination_name']; + switch_theme( $stylesheet ); + } + + //Time to remove maintenance mode + if ( ! $this->bulk ) + $this->maintenance_mode(false); + return $return; + } + + function delete_old_theme( $removed, $local_destination, $remote_destination, $theme ) { + global $wp_filesystem; + + if ( is_wp_error( $removed ) ) + return $removed; // Pass errors through. + + if ( ! isset( $theme['theme'] ) ) + return $removed; + + $theme = $theme['theme']; + $themes_dir = trailingslashit( $wp_filesystem->wp_themes_dir( $theme ) ); + if ( $wp_filesystem->exists( $themes_dir . $theme ) ) { + if ( ! $wp_filesystem->delete( $themes_dir . $theme, true ) ) + return false; + } + + return true; + } + + function theme_info($theme = null) { + + if ( empty($theme) ) { + if ( !empty($this->result['destination_name']) ) + $theme = $this->result['destination_name']; + else + return false; + } + return wp_get_theme( $theme ); + } + +} + +add_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 ); + +/** + * Language pack upgrader, for updating translations of plugins, themes, and core. + * + * @package WordPress + * @subpackage Upgrader + * @since 3.7.0 + */ +class Language_Pack_Upgrader extends WP_Upgrader { + + var $result; + var $bulk = true; + + static function async_upgrade( $upgrader = false ) { + // Avoid recursion. + if ( $upgrader && $upgrader instanceof Language_Pack_Upgrader ) + return; + + // Nothing to do? + $language_updates = wp_get_translation_updates(); + if ( ! $language_updates ) + return; + + $skin = new Language_Pack_Upgrader_Skin( array( + 'skip_header_footer' => true, + ) ); + + $lp_upgrader = new Language_Pack_Upgrader( $skin ); + $lp_upgrader->upgrade(); + } + + function upgrade_strings() { + $this->strings['starting_upgrade'] = __( 'Some of your translations need updating. Sit tight for a few more seconds while we update them as well.' ); + $this->strings['up_to_date'] = __( 'The translation is up to date.' ); // We need to silently skip this case + $this->strings['no_package'] = __( 'Update package not available.' ); + $this->strings['downloading_package'] = __( 'Downloading translation from %s…' ); + $this->strings['unpack_package'] = __( 'Unpacking the update…' ); + $this->strings['process_failed'] = __( 'Translation update failed.' ); + $this->strings['process_success'] = __( 'Translation updated successfully.' ); + } + + function upgrade( $update = false, $args = array() ) { + if ( $update ) + $update = array( $update ); + $results = $this->bulk_upgrade( $update, $args ); + return $results[0]; + } + + function bulk_upgrade( $language_updates = array(), $args = array() ) { + global $wp_filesystem; + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->upgrade_strings(); + + if ( ! $language_updates ) + $language_updates = wp_get_translation_updates(); + + if ( empty( $language_updates ) ) { + $this->skin->header(); + $this->skin->before(); + $this->skin->set_result( true ); + $this->skin->feedback( 'up_to_date' ); + $this->skin->after(); + $this->skin->bulk_footer(); + $this->skin->footer(); + return true; + } + + if ( 'upgrader_process_complete' == current_filter() ) + $this->skin->feedback( 'starting_upgrade' ); + + add_filter( 'upgrader_source_selection', array( &$this, 'check_package' ), 10, 3 ); + + $this->skin->header(); + + // Connect to the Filesystem first. + $res = $this->fs_connect( array( WP_CONTENT_DIR, WP_LANG_DIR ) ); + if ( ! $res ) { + $this->skin->footer(); + return false; + } + + $results = array(); + + $this->update_count = count( $language_updates ); + $this->update_current = 0; + + // The filesystem's mkdir() is not recursive. Make sure WP_LANG_DIR exists, + // as we then may need to create a /plugins or /themes directory inside of it. + $remote_destination = $wp_filesystem->find_folder( WP_LANG_DIR ); + if ( ! $wp_filesystem->exists( $remote_destination ) ) + if ( ! $wp_filesystem->mkdir( $remote_destination, FS_CHMOD_DIR ) ) + return new WP_Error( 'mkdir_failed_lang_dir', $this->strings['mkdir_failed'], $remote_destination ); + + foreach ( $language_updates as $language_update ) { + + $this->skin->language_update = $language_update; + + $destination = WP_LANG_DIR; + if ( 'plugin' == $language_update->type ) + $destination .= '/plugins'; + elseif ( 'theme' == $language_update->type ) + $destination .= '/themes'; + + $this->update_current++; + + $options = array( + 'package' => $language_update->package, + 'destination' => $destination, + 'clear_destination' => false, + 'abort_if_destination_exists' => false, // We expect the destination to exist. + 'clear_working' => true, + 'is_multi' => true, + 'hook_extra' => array( + 'language_update_type' => $language_update->type, + 'language_update' => $language_update, + ) + ); + + $result = $this->run( $options ); + + $results[] = $this->result; + + // Prevent credentials auth screen from displaying multiple times. + if ( false === $result ) + break; + } + + $this->skin->bulk_footer(); + + $this->skin->footer(); + + // Clean up our hooks, in case something else does an upgrade on this connection. + remove_filter( 'upgrader_source_selection', array( &$this, 'check_package' ), 10, 2 ); + + if ( $parsed_args['clear_update_cache'] ) { + wp_clean_themes_cache( true ); + wp_clean_plugins_cache( true ); + delete_site_transient( 'update_core' ); + } + + return $results; + } + + function check_package( $source, $remote_source ) { + global $wp_filesystem; + + if ( is_wp_error( $source ) ) + return $source; + + // Check that the folder contains a valid language. + $files = $wp_filesystem->dirlist( $remote_source ); + + // Check to see if a .po and .mo exist in the folder. + $po = $mo = false; + foreach ( (array) $files as $file => $filedata ) { + if ( '.po' == substr( $file, -3 ) ) + $po = true; + elseif ( '.mo' == substr( $file, -3 ) ) + $mo = true; + } + + if ( ! $mo || ! $po ) + return new WP_Error( 'incompatible_archive_pomo', $this->strings['incompatible_archive'], + __( 'The language pack is missing either the .po or .mo files.' ) ); + + return $source; + } + + function get_name_for_update( $update ) { + switch ( $update->type ) { + case 'core': + return 'WordPress'; // Not translated + break; + case 'theme': + $theme = wp_get_theme( $update->slug ); + if ( $theme->exists() ) + return $theme->Get( 'Name' ); + break; + case 'plugin': + $plugin_data = get_plugins( '/' . $update->slug ); + $plugin_data = array_shift( $plugin_data ); + if ( $plugin_data ) + return $plugin_data['Name']; + break; + } + return ''; + } + +} + +/** + * Core Upgrader class for WordPress. It allows for WordPress to upgrade itself in combination with the wp-admin/includes/update-core.php file + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Core_Upgrader extends WP_Upgrader { + + function upgrade_strings() { + $this->strings['up_to_date'] = __('WordPress is at the latest version.'); + $this->strings['no_package'] = __('Update package not available.'); + $this->strings['downloading_package'] = __('Downloading update from %s…'); + $this->strings['unpack_package'] = __('Unpacking the update…'); + $this->strings['copy_failed'] = __('Could not copy files.'); + $this->strings['copy_failed_space'] = __('Could not copy files. You may have run out of disk space.' ); + $this->strings['start_rollback'] = __( 'Attempting to roll back to previous version.' ); + $this->strings['rollback_was_required'] = __( 'Due to an error during updating, WordPress has rolled back to your previous version.' ); + } + + function upgrade( $current, $args = array() ) { + global $wp_filesystem; + + include ABSPATH . WPINC . '/version.php'; // $wp_version; + + $start_time = time(); + + $defaults = array( + 'pre_check_md5' => true, + 'attempt_rollback' => false, + 'do_rollback' => false, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->upgrade_strings(); + + // Is an update available? + if ( !isset( $current->response ) || $current->response == 'latest' ) + return new WP_Error('up_to_date', $this->strings['up_to_date']); + + $res = $this->fs_connect( array(ABSPATH, WP_CONTENT_DIR) ); + if ( ! $res || is_wp_error( $res ) ) { + return $res; + } + + $wp_dir = trailingslashit($wp_filesystem->abspath()); + + $partial = true; + if ( $parsed_args['do_rollback'] ) + $partial = false; + elseif ( $parsed_args['pre_check_md5'] && ! $this->check_files() ) + $partial = false; + + // If partial update is returned from the API, use that, unless we're doing a reinstall. + // If we cross the new_bundled version number, then use the new_bundled zip. + // Don't though if the constant is set to skip bundled items. + // If the API returns a no_content zip, go with it. Finally, default to the full zip. + if ( $parsed_args['do_rollback'] && $current->packages->rollback ) + $to_download = 'rollback'; + elseif ( $current->packages->partial && 'reinstall' != $current->response && $wp_version == $current->partial_version && $partial ) + $to_download = 'partial'; + elseif ( $current->packages->new_bundled && version_compare( $wp_version, $current->new_bundled, '<' ) + && ( ! defined( 'CORE_UPGRADE_SKIP_NEW_BUNDLED' ) || ! CORE_UPGRADE_SKIP_NEW_BUNDLED ) ) + $to_download = 'new_bundled'; + elseif ( $current->packages->no_content ) + $to_download = 'no_content'; + else + $to_download = 'full'; + + $download = $this->download_package( $current->packages->$to_download ); + if ( is_wp_error($download) ) + return $download; + + $working_dir = $this->unpack_package( $download ); + if ( is_wp_error($working_dir) ) + return $working_dir; + + // Copy update-core.php from the new version into place. + if ( !$wp_filesystem->copy($working_dir . '/wordpress/wp-admin/includes/update-core.php', $wp_dir . 'wp-admin/includes/update-core.php', true) ) { + $wp_filesystem->delete($working_dir, true); + return new WP_Error( 'copy_failed_for_update_core_file', __( 'The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.' ), 'wp-admin/includes/update-core.php' ); + } + $wp_filesystem->chmod($wp_dir . 'wp-admin/includes/update-core.php', FS_CHMOD_FILE); + + require_once( ABSPATH . 'wp-admin/includes/update-core.php' ); + + if ( ! function_exists( 'update_core' ) ) + return new WP_Error( 'copy_failed_space', $this->strings['copy_failed_space'] ); + + $result = update_core( $working_dir, $wp_dir ); + + // In the event of an issue, we may be able to roll back. + if ( $parsed_args['attempt_rollback'] && $current->packages->rollback && ! $parsed_args['do_rollback'] ) { + $try_rollback = false; + if ( is_wp_error( $result ) ) { + $error_code = $result->get_error_code(); + // Not all errors are equal. These codes are critical: copy_failed__copy_dir, + // mkdir_failed__copy_dir, copy_failed__copy_dir_retry, and disk_full. + // do_rollback allows for update_core() to trigger a rollback if needed. + if ( false !== strpos( $error_code, 'do_rollback' ) ) + $try_rollback = true; + elseif ( false !== strpos( $error_code, '__copy_dir' ) ) + $try_rollback = true; + elseif ( 'disk_full' === $error_code ) + $try_rollback = true; + } + + if ( $try_rollback ) { + apply_filters( 'update_feedback', $result ); + apply_filters( 'update_feedback', $this->strings['start_rollback'] ); + + $rollback_result = $this->upgrade( $current, array_merge( $parsed_args, array( 'do_rollback' => true ) ) ); + + $original_result = $result; + $result = new WP_Error( 'rollback_was_required', $this->strings['rollback_was_required'], (object) array( 'update' => $original_result, 'rollback' => $rollback_result ) ); + } + } + + do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'core' ) ); + + // Clear the current updates + delete_site_transient( 'update_core' ); + + if ( ! $parsed_args['do_rollback'] ) { + $stats = array( + 'update_type' => $current->response, + 'success' => true, + 'fs_method' => $wp_filesystem->method, + 'fs_method_forced' => defined( 'FS_METHOD' ) || has_filter( 'filesystem_method' ), + 'time_taken' => time() - $start_time, + 'reported' => $wp_version, + 'attempted' => $current->version, + ); + + if ( is_wp_error( $result ) ) { + $stats['success'] = false; + // Did a rollback occur? + if ( ! empty( $try_rollback ) ) { + $stats['error_code'] = $original_result->get_error_code(); + $stats['error_data'] = $original_result->get_error_data(); + // Was the rollback successful? If not, collect its error too. + $stats['rollback'] = ! is_wp_error( $rollback_result ); + if ( is_wp_error( $rollback_result ) ) { + $stats['rollback_code'] = $rollback_result->get_error_code(); + $stats['rollback_data'] = $rollback_result->get_error_data(); + } + } else { + $stats['error_code'] = $result->get_error_code(); + $stats['error_data'] = $result->get_error_data(); + } + } + + wp_version_check( $stats ); + } + + return $result; + } + + // Determines if this WordPress Core version should update to $offered_ver or not + static function should_update_to_version( $offered_ver /* x.y.z */ ) { + include ABSPATH . WPINC . '/version.php'; // $wp_version; // x.y.z + + $current_branch = implode( '.', array_slice( preg_split( '/[.-]/', $wp_version ), 0, 2 ) ); // x.y + $new_branch = implode( '.', array_slice( preg_split( '/[.-]/', $offered_ver ), 0, 2 ) ); // x.y + $current_is_development_version = (bool) strpos( $wp_version, '-' ); + + // Defaults: + $upgrade_dev = true; + $upgrade_minor = true; + $upgrade_major = false; + + // WP_AUTO_UPDATE_CORE = true (all), 'minor', false. + if ( defined( 'WP_AUTO_UPDATE_CORE' ) ) { + if ( false === WP_AUTO_UPDATE_CORE ) { + // Defaults to turned off, unless a filter allows it + $upgrade_dev = $upgrade_minor = $upgrade_major = false; + } elseif ( true === WP_AUTO_UPDATE_CORE ) { + // ALL updates for core + $upgrade_dev = $upgrade_minor = $upgrade_major = true; + } elseif ( 'minor' === WP_AUTO_UPDATE_CORE ) { + // Only minor updates for core + $upgrade_dev = $upgrade_major = false; + $upgrade_minor = true; + } + } + + // 1: If we're already on that version, not much point in updating? + if ( $offered_ver == $wp_version ) + return false; + + // 2: If we're running a newer version, that's a nope + if ( version_compare( $wp_version, $offered_ver, '>' ) ) + return false; + + $failure_data = get_site_option( 'auto_core_update_failed' ); + if ( $failure_data ) { + // If this was a critical update failure, cannot update. + if ( ! empty( $failure_data['critical'] ) ) + return false; + + // Don't claim we can update on update-core.php if we have a non-critical failure logged. + if ( $wp_version == $failure_data['current'] && false !== strpos( $offered_ver, '.1.next.minor' ) ) + return false; + + // Cannot update if we're retrying the same A to B update that caused a non-critical failure. + // Some non-critical failures do allow retries, like download_failed. + // 3.7.1 => 3.7.2 resulted in files_not_writable, if we are still on 3.7.1 and still trying to update to 3.7.2. + if ( empty( $failure_data['retry'] ) && $wp_version == $failure_data['current'] && $offered_ver == $failure_data['attempted'] ) + return false; + } + + // 3: 3.7-alpha-25000 -> 3.7-alpha-25678 -> 3.7-beta1 -> 3.7-beta2 + if ( $current_is_development_version ) { + if ( ! apply_filters( 'allow_dev_auto_core_updates', $upgrade_dev ) ) + return false; + // else fall through to minor + major branches below + } + + // 4: Minor In-branch updates (3.7.0 -> 3.7.1 -> 3.7.2 -> 3.7.4) + if ( $current_branch == $new_branch ) + return apply_filters( 'allow_minor_auto_core_updates', $upgrade_minor ); + + // 5: Major version updates (3.7.0 -> 3.8.0 -> 3.9.1) + if ( version_compare( $new_branch, $current_branch, '>' ) ) + return apply_filters( 'allow_major_auto_core_updates', $upgrade_major ); + + // If we're not sure, we don't want it + return false; + } + + function check_files() { + global $wp_version, $wp_local_package; + + $checksums = get_core_checksums( $wp_version, isset( $wp_local_package ) ? $wp_local_package : 'en_US' ); + + if ( ! is_array( $checksums ) ) + return false; + + foreach ( $checksums as $file => $checksum ) { + // Skip files which get updated + if ( 'wp-content' == substr( $file, 0, 10 ) ) + continue; + if ( ! file_exists( ABSPATH . $file ) || md5_file( ABSPATH . $file ) !== $checksum ) + return false; + } + + return true; + } +} + +/** + * Upgrade Skin helper for File uploads. This class handles the upload process and passes it as if it's a local file to the Upgrade/Installer functions. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class File_Upload_Upgrader { + var $package; + var $filename; + var $id = 0; + + function __construct($form, $urlholder) { + + if ( empty($_FILES[$form]['name']) && empty($_GET[$urlholder]) ) + wp_die(__('Please select a file')); + + //Handle a newly uploaded file, Else assume it's already been uploaded + if ( ! empty($_FILES) ) { + $overrides = array( 'test_form' => false, 'test_type' => false ); + $file = wp_handle_upload( $_FILES[$form], $overrides ); + + if ( isset( $file['error'] ) ) + wp_die( $file['error'] ); + + $this->filename = $_FILES[$form]['name']; + $this->package = $file['file']; + + // Construct the object array + $object = array( + 'post_title' => $this->filename, + 'post_content' => $file['url'], + 'post_mime_type' => $file['type'], + 'guid' => $file['url'], + 'context' => 'upgrader', + 'post_status' => 'private' + ); + + // Save the data + $this->id = wp_insert_attachment( $object, $file['file'] ); + + // schedule a cleanup for 2 hours from now in case of failed install + wp_schedule_single_event( time() + 7200, 'upgrader_scheduled_cleanup', array( $this->id ) ); + + } elseif ( is_numeric( $_GET[$urlholder] ) ) { + // Numeric Package = previously uploaded file, see above. + $this->id = (int) $_GET[$urlholder]; + $attachment = get_post( $this->id ); + if ( empty($attachment) ) + wp_die(__('Please select a file')); + + $this->filename = $attachment->post_title; + $this->package = get_attached_file( $attachment->ID ); + } else { + // Else, It's set to something, Back compat for plugins using the old (pre-3.3) File_Uploader handler. + if ( ! ( ( $uploads = wp_upload_dir() ) && false === $uploads['error'] ) ) + wp_die( $uploads['error'] ); + + $this->filename = $_GET[$urlholder]; + $this->package = $uploads['basedir'] . '/' . $this->filename; + } + } + + function cleanup() { + if ( $this->id ) + wp_delete_attachment( $this->id ); + + elseif ( file_exists( $this->package ) ) + return @unlink( $this->package ); + + return true; + } +} + +/** + * The WordPress automatic background updater. + * + * @package WordPress + * @subpackage Upgrader + * @since 3.7.0 + */ +class WP_Automatic_Updater { + + /** + * Tracks update results during processing. + * + * @var array + */ + protected $update_results = array(); + + /** + * Whether the entire automatic updater is disabled. + * + * @since 3.7.0 + */ + public function is_disabled() { + // Background updates are disabled if you don't want file changes. + if ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS ) + return true; + + if ( defined( 'WP_INSTALLING' ) ) + return true; + + // More fine grained control can be done through the WP_AUTO_UPDATE_CORE constant and filters. + $disabled = defined( 'AUTOMATIC_UPDATER_DISABLED' ) && AUTOMATIC_UPDATER_DISABLED; + + /** + * Filter whether to entirely disable background updates. + * + * There are more fine-grained filters and controls for selective disabling. + * This filter parallels the AUTOMATIC_UPDATER_DISABLED constant in name. + * + * This also disables update notification emails. That may change in the future. + * + * @since 3.7.0 + * @param bool $disabled Whether the updater should be disabled. + */ + return apply_filters( 'automatic_updater_disabled', $disabled ); + } + + /** + * Check for version control checkouts. + * + * Checks for Subversion, Git, Mercurial, and Bazaar. It recursively looks up the + * filesystem to the top of the drive, erring on the side of detecting a VCS + * checkout somewhere. + * + * ABSPATH is always checked in addition to whatever $context is (which may be the + * wp-content directory, for example). The underlying assumption is that if you are + * using version control *anywhere*, then you should be making decisions for + * how things get updated. + * + * @since 3.7.0 + * + * @param string $context The filesystem path to check, in addition to ABSPATH. + */ + public function is_vcs_checkout( $context ) { + $context_dirs = array( untrailingslashit( $context ) ); + if ( $context !== ABSPATH ) + $context_dirs[] = untrailingslashit( ABSPATH ); + + $vcs_dirs = array( '.svn', '.git', '.hg', '.bzr' ); + $check_dirs = array(); + + foreach ( $context_dirs as $context_dir ) { + // Walk up from $context_dir to the root. + do { + $check_dirs[] = $context_dir; + + // Once we've hit '/' or 'C:\', we need to stop. dirname will keep returning the input here. + if ( $context_dir == dirname( $context_dir ) ) + break; + + // Continue one level at a time. + } while ( $context_dir = dirname( $context_dir ) ); + } + + $check_dirs = array_unique( $check_dirs ); + + // Search all directories we've found for evidence of version control. + foreach ( $vcs_dirs as $vcs_dir ) { + foreach ( $check_dirs as $check_dir ) { + if ( $checkout = @is_dir( rtrim( $check_dir, '\\/' ) . "/$vcs_dir" ) ) + break 2; + } + } + + /** + * Filter whether the automatic updater should consider a filesystem location to be potentially + * managed by a version control system. + * + * @since 3.7.0 + * + * @param bool $checkout Whether a VCS checkout was discovered at $context or ABSPATH, or anywhere higher. + * @param string $context The filesystem context (a path) against which filesystem status should be checked. + */ + return apply_filters( 'automatic_updates_is_vcs_checkout', $checkout, $context ); + } + + /** + * Tests to see if we can and should update a specific item. + * + * @since 3.7.0 + * + * @param string $type The type of update being checked: 'core', 'theme', 'plugin', 'translation'. + * @param object $item The update offer. + * @param string $context The filesystem context (a path) against which filesystem access and status + * should be checked. + */ + public function should_update( $type, $item, $context ) { + // Used to see if WP_Filesystem is set up to allow unattended updates. + $skin = new Automatic_Upgrader_Skin; + + if ( $this->is_disabled() ) + return false; + + // If we can't do an auto core update, we may still be able to email the user. + if ( ! $skin->request_filesystem_credentials( false, $context ) || $this->is_vcs_checkout( $context ) ) { + if ( 'core' == $type ) + $this->send_core_update_notification_email( $item ); + return false; + } + + // Next up, is this an item we can update? + if ( 'core' == $type ) + $update = Core_Upgrader::should_update_to_version( $item->current ); + else + $update = ! empty( $item->autoupdate ); + + /** + * Filter whether to automatically update core, a plugin, a theme, or a language. + * + * The dynamic portion of the hook name, $type, refers to the type of update + * being checked. Can be 'core', 'theme', 'plugin', or 'translation'. + * + * Generally speaking, plugins, themes, and major core versions are not updated by default, + * while translations and minor and development versions for core are updated by default. + * + * See the filters allow_dev_auto_core_updates, allow_minor_auto_core_updates, and + * allow_major_auto_core_updates more straightforward filters to adjust core updates. + * + * @since 3.7.0 + * + * @param bool $update Whether to update. + * @param object $item The update offer. + */ + $update = apply_filters( 'auto_update_' . $type, $update, $item ); + + if ( ! $update ) { + if ( 'core' == $type ) + $this->send_core_update_notification_email( $item ); + return false; + } + + // If it's a core update, are we actually compatible with its requirements? + if ( 'core' == $type ) { + global $wpdb; + + $php_compat = version_compare( phpversion(), $item->php_version, '>=' ); + if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) + $mysql_compat = true; + else + $mysql_compat = version_compare( $wpdb->db_version(), $item->mysql_version, '>=' ); + + if ( ! $php_compat || ! $mysql_compat ) + return false; + } + + return true; + } + + /** + * Notifies an administrator of a core update. + * + * @since 3.7.0 + * + * @param object $item The update offer. + */ + protected function send_core_update_notification_email( $item ) { + $notify = true; + $notified = get_site_option( 'auto_core_update_notified' ); + + // Don't notify if we've already notified the same email address of the same version. + if ( $notified && $notified['email'] == get_site_option( 'admin_email' ) && $notified['version'] == $item->current ) + return false; + + // See if we need to notify users of a core update. + $notify = ! empty( $item->notify_email ); + + /** + * Whether to notify the site administrator of a new core update. + * + * By default, administrators are notified when the update offer received from WordPress.org + * sets a particular flag. This allows for discretion in if and when to notify. + * + * This filter only fires once per release -- if the same email address was already + * notified of the same new version, we won't repeatedly email the administrator. + * + * This filter is also used on about.php to check if a plugin has disabled these notifications. + * + * @since 3.7.0 + * + * @param bool $notify Whether the site administrator is notified. + * @param object $item The update offer. + */ + if ( ! apply_filters( 'send_core_update_notification_email', $notify, $item ) ) + return false; + + $this->send_email( 'manual', $item ); + return true; + } + + /** + * Update an item, if appropriate. + * + * @since 3.7.0 + * + * @param string $type The type of update being checked: 'core', 'theme', 'plugin', 'translation'. + * @param object $item The update offer. + */ + public function update( $type, $item ) { + $skin = new Automatic_Upgrader_Skin; + + switch ( $type ) { + case 'core': + // The Core upgrader doesn't use the Upgrader's skin during the actual main part of the upgrade, instead, firing a filter. + add_filter( 'update_feedback', array( $skin, 'feedback' ) ); + $upgrader = new Core_Upgrader( $skin ); + $context = ABSPATH; + break; + case 'plugin': + $upgrader = new Plugin_Upgrader( $skin ); + $context = WP_PLUGIN_DIR; // We don't support custom Plugin directories, or updates for WPMU_PLUGIN_DIR + break; + case 'theme': + $upgrader = new Theme_Upgrader( $skin ); + $context = get_theme_root( $item ); + break; + case 'translation': + $upgrader = new Language_Pack_Upgrader( $skin ); + $context = WP_CONTENT_DIR; // WP_LANG_DIR; + break; + } + + // Determine whether we can and should perform this update. + if ( ! $this->should_update( $type, $item, $context ) ) + return false; + + switch ( $type ) { + case 'core': + $skin->feedback( __( 'Updating to WordPress %s' ), $item->version ); + $item_name = sprintf( __( 'WordPress %s' ), $item->version ); + break; + case 'theme': + $theme = wp_get_theme( $item ); + $item_name = $theme->Get( 'Name' ); + $skin->feedback( __( 'Updating theme: %s' ), $item_name ); + break; + case 'plugin': + $plugin_data = get_plugin_data( $context . '/' . $item ); + $item_name = $plugin_data['Name']; + $skin->feedback( __( 'Updating plugin: %s' ), $item_name ); + break; + case 'translation': + $language_item_name = $upgrader->get_name_for_update( $item ); + $item_name = sprintf( __( 'Translations for %s' ), $language_item_name ); + $skin->feedback( sprintf( __( 'Updating translations for %1$s (%2$s)…' ), $language_item_name, $item->language ) ); + break; + } + + // Boom, This sites about to get a whole new splash of paint! + $upgrade_result = $upgrader->upgrade( $item, array( + 'clear_update_cache' => false, + 'pre_check_md5' => false, /* always use partial builds if possible for core updates */ + 'attempt_rollback' => true, /* only available for core updates */ + ) ); + + // if the filesystem is unavailable, false is returned. + if ( false === $upgrade_result ) { + $upgrade_result = new WP_Error( 'fs_unavailable', __( 'Could not access filesystem.' ) ); + } + + // Core doesn't output this, so lets append it so we don't get confused + if ( 'core' == $type ) { + if ( is_wp_error( $upgrade_result ) ) { + $skin->error( __( 'Installation Failed' ), $upgrade_result ); + } else { + $skin->feedback( __( 'WordPress updated successfully' ) ); + } + } + + $this->update_results[ $type ][] = (object) array( + 'item' => $item, + 'result' => $upgrade_result, + 'name' => $item_name, + 'messages' => $skin->get_upgrade_messages() + ); + + return $upgrade_result; + } + + /** + * Kicks off the background update process, looping through all pending updates. + * + * @since 3.7.0 + */ + public function run() { + global $wpdb, $wp_version; + + if ( $this->is_disabled() ) + return; + + if ( ! is_main_network() || ! is_main_site() ) + return; + + $lock_name = 'auto_updater.lock'; + + // Try to lock + $lock_result = $wpdb->query( $wpdb->prepare( "INSERT IGNORE INTO `$wpdb->options` ( `option_name`, `option_value`, `autoload` ) VALUES (%s, %s, 'no') /* LOCK */", $lock_name, time() ) ); + + if ( ! $lock_result ) { + $lock_result = get_option( $lock_name ); + + // If we couldn't create a lock, and there isn't a lock, bail + if ( ! $lock_result ) + return; + + // Check to see if the lock is still valid + if ( $lock_result > ( time() - HOUR_IN_SECONDS ) ) + return; + } + + // Update the lock, as by this point we've definately got a lock, just need to fire the actions + update_option( $lock_name, time() ); + + // Don't automatically run these thins, as we'll handle it ourselves + remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 ); + remove_action( 'upgrader_process_complete', 'wp_version_check' ); + remove_action( 'upgrader_process_complete', 'wp_update_plugins' ); + remove_action( 'upgrader_process_complete', 'wp_update_themes' ); + + // Next, Plugins + wp_update_plugins(); // Check for Plugin updates + $plugin_updates = get_site_transient( 'update_plugins' ); + if ( $plugin_updates && !empty( $plugin_updates->response ) ) { + foreach ( array_keys( $plugin_updates->response ) as $plugin ) { + $this->update( 'plugin', $plugin ); + } + // Force refresh of plugin update information + wp_clean_plugins_cache(); + } + + // Next, those themes we all love + wp_update_themes(); // Check for Theme updates + $theme_updates = get_site_transient( 'update_themes' ); + if ( $theme_updates && !empty( $theme_updates->response ) ) { + foreach ( array_keys( $theme_updates->response ) as $theme ) { + $this->update( 'theme', $theme ); + } + // Force refresh of theme update information + wp_clean_themes_cache(); + } + + // Next, Process any core update + wp_version_check(); // Check for Core updates + $core_update = find_core_auto_update(); + + if ( $core_update ) + $this->update( 'core', $core_update ); + + // Clean up, and check for any pending translations + // (Core_Upgrader checks for core updates) + wp_update_themes(); // Check for Theme updates + wp_update_plugins(); // Check for Plugin updates + + // Finally, Process any new translations + $language_updates = wp_get_translation_updates(); + if ( $language_updates ) { + foreach ( $language_updates as $update ) { + $this->update( 'translation', $update ); + } + + // Clear existing caches + wp_clean_plugins_cache(); + wp_clean_themes_cache(); + delete_site_transient( 'update_core' ); + + wp_version_check(); // check for Core updates + wp_update_themes(); // Check for Theme updates + wp_update_plugins(); // Check for Plugin updates + } + + // Send debugging email to all development installs. + if ( ! empty( $this->update_results ) ) { + $development_version = false !== strpos( $wp_version, '-' ); + /** + * Filter whether to send a debugging email for each automatic background update. + * + * @since 3.7.0 + * @param bool $development_version By default, emails are sent if the install is a development version. + * Return false to avoid the email. + */ + if ( apply_filters( 'automatic_updates_send_debug_email', $development_version ) ) + $this->send_debug_email(); + + if ( ! empty( $this->update_results['core'] ) ) + $this->after_core_update( $this->update_results['core'][0] ); + + /** + * Action triggered after all automatic updates have run. + * + * @since 3.8.0 + * + * @param array $update_results The results of all attempted updates. + */ + do_action( 'automatic_updates_complete', $this->update_results ); + } + + // Clear the lock + delete_option( $lock_name ); + } + + /** + * If we tried to perform a core update, check if we should send an email, + * and if we need to avoid processing future updates. + * + * @param object $update_result The result of the core update. Includes the update offer and result. + */ + protected function after_core_update( $update_result ) { + global $wp_version; + + $core_update = $update_result->item; + $result = $update_result->result; + + if ( ! is_wp_error( $result ) ) { + $this->send_email( 'success', $core_update ); + return; + } + + $error_code = $result->get_error_code(); + + // Any of these WP_Error codes are critical failures, as in they occurred after we started to copy core files. + // We should not try to perform a background update again until there is a successful one-click update performed by the user. + $critical = false; + if ( $error_code === 'disk_full' || false !== strpos( $error_code, '__copy_dir' ) ) { + $critical = true; + } elseif ( $error_code === 'rollback_was_required' && is_wp_error( $result->get_error_data()->rollback ) ) { + // A rollback is only critical if it failed too. + $critical = true; + $rollback_result = $result->get_error_data()->rollback; + } elseif ( false !== strpos( $error_code, 'do_rollback' ) ) { + $critical = true; + } + + if ( $critical ) { + $critical_data = array( + 'attempted' => $core_update->current, + 'current' => $wp_version, + 'error_code' => $error_code, + 'error_data' => $result->get_error_data(), + 'timestamp' => time(), + 'critical' => true, + ); + if ( isset( $rollback_result ) ) { + $critical_data['rollback_code'] = $rollback_result->get_error_code(); + $critical_data['rollback_data'] = $rollback_result->get_error_data(); + } + update_site_option( 'auto_core_update_failed', $critical_data ); + $this->send_email( 'critical', $core_update, $result ); + return; + } + + /* + * Any other WP_Error code (like download_failed or files_not_writable) occurs before + * we tried to copy over core files. Thus, the failures are early and graceful. + * + * We should avoid trying to perform a background update again for the same version. + * But we can try again if another version is released. + * + * For certain 'transient' failures, like download_failed, we should allow retries. + * In fact, let's schedule a special update for an hour from now. (It's possible + * the issue could actually be on WordPress.org's side.) If that one fails, then email. + */ + $send = true; + $transient_failures = array( 'incompatible_archive', 'download_failed', 'insane_distro' ); + if ( in_array( $error_code, $transient_failures ) && ! get_site_option( 'auto_core_update_failed' ) ) { + wp_schedule_single_event( time() + HOUR_IN_SECONDS, 'wp_maybe_auto_update' ); + $send = false; + } + + $n = get_site_option( 'auto_core_update_notified' ); + // Don't notify if we've already notified the same email address of the same version of the same notification type. + if ( $n && 'fail' == $n['type'] && $n['email'] == get_site_option( 'admin_email' ) && $n['version'] == $core_update->current ) + $send = false; + + update_site_option( 'auto_core_update_failed', array( + 'attempted' => $core_update->current, + 'current' => $wp_version, + 'error_code' => $error_code, + 'error_data' => $result->get_error_data(), + 'timestamp' => time(), + 'retry' => in_array( $error_code, $transient_failures ), + ) ); + + if ( $send ) + $this->send_email( 'fail', $core_update, $result ); + } + + /** + * Sends an email upon the completion or failure of a background core update. + * + * @since 3.7.0 + * + * @param string $type The type of email to send. Can be one of 'success', 'fail', 'manual', 'critical'. + * @param object $core_update The update offer that was attempted. + * @param mixed $result Optional. The result for the core update. Can be WP_Error. + */ + protected function send_email( $type, $core_update, $result = null ) { + update_site_option( 'auto_core_update_notified', array( + 'type' => $type, + 'email' => get_site_option( 'admin_email' ), + 'version' => $core_update->current, + 'timestamp' => time(), + ) ); + + $next_user_core_update = get_preferred_from_update_core(); + // If the update transient is empty, use the update we just performed + if ( ! $next_user_core_update ) + $next_user_core_update = $core_update; + $newer_version_available = ( 'upgrade' == $next_user_core_update->response && version_compare( $next_user_core_update->version, $core_update->version, '>' ) ); + + /** + * Filter whether to send an email following an automatic background core update. + * + * @since 3.7.0 + * + * @param bool $send Whether to send the email. Default true. + * @param string $type The type of email to send. Can be one of 'success', 'fail', 'critical'. + * @param object $core_update The update offer that was attempted. + * @param mixed $result The result for the core update. Can be WP_Error. + */ + if ( 'manual' !== $type && ! apply_filters( 'auto_core_update_send_email', true, $type, $core_update, $result ) ) + return; + + switch ( $type ) { + case 'success' : // We updated. + /* translators: 1: Site name, 2: WordPress version number. */ + $subject = __( '[%1$s] Your site has updated to WordPress %2$s' ); + break; + + case 'fail' : // We tried to update but couldn't. + case 'manual' : // We can't update (and made no attempt). + /* translators: 1: Site name, 2: WordPress version number. */ + $subject = __( '[%1$s] WordPress %2$s is available. Please update!' ); + break; + + case 'critical' : // We tried to update, started to copy files, then things went wrong. + /* translators: 1: Site name. */ + $subject = __( '[%1$s] URGENT: Your site may be down due to a failed update' ); + break; + + default : + return; + } + + // If the auto update is not to the latest version, say that the current version of WP is available instead. + $version = 'success' === $type ? $core_update->current : $next_user_core_update->current; + $subject = sprintf( $subject, wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ), $version ); + + $body = ''; + + switch ( $type ) { + case 'success' : + $body .= sprintf( __( 'Howdy! Your site at %1$s has been updated automatically to WordPress %2$s.' ), home_url(), $core_update->current ); + $body .= "\n\n"; + if ( ! $newer_version_available ) + $body .= __( 'No further action is needed on your part.' ) . ' '; + + // Can only reference the About screen if their update was successful. + list( $about_version ) = explode( '-', $core_update->current, 2 ); + $body .= sprintf( __( "For more on version %s, see the About WordPress screen:" ), $about_version ); + $body .= "\n" . admin_url( 'about.php' ); + + if ( $newer_version_available ) { + $body .= "\n\n" . sprintf( __( 'WordPress %s is also now available.' ), $next_user_core_update->current ) . ' '; + $body .= __( 'Updating is easy and only takes a few moments:' ); + $body .= "\n" . network_admin_url( 'update-core.php' ); + } + + break; + + case 'fail' : + case 'manual' : + $body .= sprintf( __( 'Please update your site at %1$s to WordPress %2$s.' ), home_url(), $next_user_core_update->current ); + + $body .= "\n\n"; + + // Don't show this message if there is a newer version available. + // Potential for confusion, and also not useful for them to know at this point. + if ( 'fail' == $type && ! $newer_version_available ) + $body .= __( 'We tried but were unable to update your site automatically.' ) . ' '; + + $body .= __( 'Updating is easy and only takes a few moments:' ); + $body .= "\n" . network_admin_url( 'update-core.php' ); + break; + + case 'critical' : + if ( $newer_version_available ) + $body .= sprintf( __( 'Your site at %1$s experienced a critical failure while trying to update WordPress to version %2$s.' ), home_url(), $core_update->current ); + else + $body .= sprintf( __( 'Your site at %1$s experienced a critical failure while trying to update to the latest version of WordPress, %2$s.' ), home_url(), $core_update->current ); + + $body .= "\n\n" . __( "This means your site may be offline or broken. Don't panic; this can be fixed." ); + + $body .= "\n\n" . __( "Please check out your site now. It's possible that everything is working. If it says you need to update, you should do so:" ); + $body .= "\n" . network_admin_url( 'update-core.php' ); + break; + } + + // Updates are important! + if ( $type != 'success' || $newer_version_available ) + $body .= "\n\n" . __( 'Keeping your site updated is important for security. It also makes the internet a safer place for you and your readers.' ); + + // Add a note about the support forums to all emails. + $body .= "\n\n" . __( 'If you experience any issues or need support, the volunteers in the WordPress.org support forums may be able to help.' ); + $body .= "\n" . __( 'http://wordpress.org/support/' ); + + // If things are successful and we're now on the latest, mention plugins and themes if any are out of date. + if ( $type == 'success' && ! $newer_version_available && ( get_plugin_updates() || get_theme_updates() ) ) { + $body .= "\n\n" . __( 'You also have some plugins or themes with updates available. Update them now:' ); + $body .= "\n" . network_admin_url(); + } + + $body .= "\n\n" . __( 'The WordPress Team' ) . "\n"; + + if ( 'critical' == $type && is_wp_error( $result ) ) { + $body .= "\n***\n\n"; + $body .= sprintf( __( 'Your site was running version %s.' ), $GLOBALS['wp_version'] ); + $body .= ' ' . __( 'We have some data that describes the error your site encountered.' ); + $body .= ' ' . __( 'Your hosting company, support forum volunteers, or a friendly developer may be able to use this information to help you:' ); + + // If we had a rollback and we're still critical, then the rollback failed too. + // Loop through all errors (the main WP_Error, the update result, the rollback result) for code, data, etc. + if ( 'rollback_was_required' == $result->get_error_code() ) + $errors = array( $result, $result->get_error_data()->update, $result->get_error_data()->rollback ); + else + $errors = array( $result ); + + foreach ( $errors as $error ) { + if ( ! is_wp_error( $error ) ) + continue; + $error_code = $error->get_error_code(); + $body .= "\n\n" . sprintf( __( "Error code: %s" ), $error_code ); + if ( 'rollback_was_required' == $error_code ) + continue; + if ( $error->get_error_message() ) + $body .= "\n" . $error->get_error_message(); + $error_data = $error->get_error_data(); + if ( $error_data ) + $body .= "\n" . implode( ', ', (array) $error_data ); + } + $body .= "\n"; + } + + $to = get_site_option( 'admin_email' ); + $headers = ''; + + $email = compact( 'to', 'subject', 'body', 'headers' ); + /** + * Filter the email sent following an automatic background core update. + * + * @since 3.7.0 + * + * @param array $email { + * Array of email arguments that will be passed to wp_mail(). + * + * @type string $to The email recipient. An array of emails can be returned, as handled by wp_mail(). + * @type string $subject The email's subject. + * @type string $body The email message body. + * @type string $headers Any email headers, defaults to no headers. + * } + * @param string $type The type of email being sent. Can be one of 'success', 'fail', 'manual', 'critical'. + * @param object $core_update The update offer that was attempted. + * @param mixed $result The result for the core update. Can be WP_Error. + */ + $email = apply_filters( 'auto_core_update_email', $email, $type, $core_update, $result ); + + wp_mail( $email['to'], $email['subject'], $email['body'], $email['headers'] ); + } + + /** + * Prepares and sends an email of a full log of background update results, useful for debugging and geekery. + * + * @since 3.7.0 + */ + protected function send_debug_email() { + $update_count = 0; + foreach ( $this->update_results as $type => $updates ) + $update_count += count( $updates ); + + $body = array(); + $failures = 0; + + $body[] = sprintf( __( 'WordPress site: %s' ), network_home_url( '/' ) ); + + // Core + if ( isset( $this->update_results['core'] ) ) { + $result = $this->update_results['core'][0]; + if ( $result->result && ! is_wp_error( $result->result ) ) { + $body[] = sprintf( __( 'SUCCESS: WordPress was successfully updated to %s' ), $result->name ); + } else { + $body[] = sprintf( __( 'FAILED: WordPress failed to update to %s' ), $result->name ); + $failures++; + } + $body[] = ''; + } + + // Plugins, Themes, Translations + foreach ( array( 'plugin', 'theme', 'translation' ) as $type ) { + if ( ! isset( $this->update_results[ $type ] ) ) + continue; + $success_items = wp_list_filter( $this->update_results[ $type ], array( 'result' => true ) ); + if ( $success_items ) { + $messages = array( + 'plugin' => __( 'The following plugins were successfully updated:' ), + 'theme' => __( 'The following themes were successfully updated:' ), + 'translation' => __( 'The following translations were successfully updated:' ), + ); + + $body[] = $messages[ $type ]; + foreach ( wp_list_pluck( $success_items, 'name' ) as $name ) { + $body[] = ' * ' . sprintf( __( 'SUCCESS: %s' ), $name ); + } + } + if ( $success_items != $this->update_results[ $type ] ) { + // Failed updates + $messages = array( + 'plugin' => __( 'The following plugins failed to update:' ), + 'theme' => __( 'The following themes failed to update:' ), + 'translation' => __( 'The following translations failed to update:' ), + ); + + $body[] = $messages[ $type ]; + foreach ( $this->update_results[ $type ] as $item ) { + if ( ! $item->result || is_wp_error( $item->result ) ) { + $body[] = ' * ' . sprintf( __( 'FAILED: %s' ), $item->name ); + $failures++; + } + } + } + $body[] = ''; + } + + $site_title = wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ); + if ( $failures ) { + $body[] = __( " +BETA TESTING? +============= + +This debugging email is sent when you are using a development version of WordPress. + +If you think these failures might be due to a bug in WordPress, could you report it? + * Open a thread in the support forums: http://wordpress.org/support/forum/alphabeta + * Or, if you're comfortable writing a bug report: http://core.trac.wordpress.org/ + +Thanks! -- The WordPress Team" ); + + $subject = sprintf( __( '[%s] There were failures during background updates' ), $site_title ); + } else { + $subject = sprintf( __( '[%s] Background updates have finished' ), $site_title ); + } + + $body[] = __( 'UPDATE LOG' ); + $body[] = '=========='; + $body[] = ''; + + foreach ( array( 'core', 'plugin', 'theme', 'translation' ) as $type ) { + if ( ! isset( $this->update_results[ $type ] ) ) + continue; + foreach ( $this->update_results[ $type ] as $update ) { + $body[] = $update->name; + $body[] = str_repeat( '-', strlen( $update->name ) ); + foreach ( $update->messages as $message ) + $body[] = " " . html_entity_decode( str_replace( '…', '...', $message ) ); + if ( is_wp_error( $update->result ) ) { + $results = array( 'update' => $update->result ); + // If we rolled back, we want to know an error that occurred then too. + if ( 'rollback_was_required' === $update->result->get_error_code() ) + $results = (array) $update->result->get_error_data(); + foreach ( $results as $result_type => $result ) { + if ( ! is_wp_error( $result ) ) + continue; + + if ( 'rollback' === $result_type ) { + /* translators: 1: Error code, 2: Error message. */ + $body[] = ' ' . sprintf( __( 'Rollback Error: [%1$s] %2$s' ), $result->get_error_code(), $result->get_error_message() ); + } else { + /* translators: 1: Error code, 2: Error message. */ + $body[] = ' ' . sprintf( __( 'Error: [%1$s] %2$s' ), $result->get_error_code(), $result->get_error_message() ); + } + + if ( $result->get_error_data() ) + $body[] = ' ' . implode( ', ', (array) $result->get_error_data() ); + } + } + $body[] = ''; + } + } + + $email = array( + 'to' => get_site_option( 'admin_email' ), + 'subject' => $subject, + 'body' => implode( "\n", $body ), + 'headers' => '' + ); + + /** + * Filter the debug email that can be sent following an automatic background core update. + * + * @since 3.8.0 + * + * @param array $email { + * Array of email arguments that will be passed to wp_mail(). + * + * @type string $to The email recipient. An array of emails can be returned, + * as handled by wp_mail(). + * @type string $subject Email subject. + * @type string $body Email message body. + * @type string $headers Any email headers. Default empty. + * } + * @param int $failures The number of failures encountered while upgrading. + * @param mixed $results The results of all attempted updates. + */ + $email = apply_filters( 'automatic_updates_debug_email', $email, $failures, $this->update_results ); + + wp_mail( $email['to'], $email['subject'], $email['body'], $email['headers'] ); + } +} diff --git a/src/wp-admin/includes/class-wp-users-list-table.php b/src/wp-admin/includes/class-wp-users-list-table.php new file mode 100644 index 0000000..48c9c0c --- /dev/null +++ b/src/wp-admin/includes/class-wp-users-list-table.php @@ -0,0 +1,324 @@ + 'user', + 'plural' => 'users', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + + $this->is_site_users = 'site-users-network' == $this->screen->id; + + if ( $this->is_site_users ) + $this->site_id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0; + } + + function ajax_user_can() { + if ( $this->is_site_users ) + return current_user_can( 'manage_sites' ); + else + return current_user_can( 'list_users' ); + } + + function prepare_items() { + global $role, $usersearch; + + $usersearch = isset( $_REQUEST['s'] ) ? trim( $_REQUEST['s'] ) : ''; + + $role = isset( $_REQUEST['role'] ) ? $_REQUEST['role'] : ''; + + $per_page = ( $this->is_site_users ) ? 'site_users_network_per_page' : 'users_per_page'; + $users_per_page = $this->get_items_per_page( $per_page ); + + $paged = $this->get_pagenum(); + + $args = array( + 'number' => $users_per_page, + 'offset' => ( $paged-1 ) * $users_per_page, + 'role' => $role, + 'search' => $usersearch, + 'fields' => 'all_with_meta' + ); + + if ( '' !== $args['search'] ) + $args['search'] = '*' . $args['search'] . '*'; + + if ( $this->is_site_users ) + $args['blog_id'] = $this->site_id; + + if ( isset( $_REQUEST['orderby'] ) ) + $args['orderby'] = $_REQUEST['orderby']; + + if ( isset( $_REQUEST['order'] ) ) + $args['order'] = $_REQUEST['order']; + + // Query the user IDs for this page + $wp_user_search = new WP_User_Query( $args ); + + $this->items = $wp_user_search->get_results(); + + $this->set_pagination_args( array( + 'total_items' => $wp_user_search->get_total(), + 'per_page' => $users_per_page, + ) ); + } + + function no_items() { + _e( 'No matching users were found.' ); + } + + function get_views() { + global $wp_roles, $role; + + if ( $this->is_site_users ) { + $url = 'site-users.php?id=' . $this->site_id; + switch_to_blog( $this->site_id ); + $users_of_blog = count_users(); + restore_current_blog(); + } else { + $url = 'users.php'; + $users_of_blog = count_users(); + } + $total_users = $users_of_blog['total_users']; + $avail_roles =& $users_of_blog['avail_roles']; + unset($users_of_blog); + + $current_role = false; + $class = empty($role) ? ' class="current"' : ''; + $role_links = array(); + $role_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_users, 'users' ), number_format_i18n( $total_users ) ) . ''; + foreach ( $wp_roles->get_names() as $this_role => $name ) { + if ( !isset($avail_roles[$this_role]) ) + continue; + + $class = ''; + + if ( $this_role == $role ) { + $current_role = $role; + $class = ' class="current"'; + } + + $name = translate_user_role( $name ); + /* translators: User role name with count */ + $name = sprintf( __('%1$s (%2$s)'), $name, number_format_i18n( $avail_roles[$this_role] ) ); + $role_links[$this_role] = "$name"; + } + + return $role_links; + } + + function get_bulk_actions() { + $actions = array(); + + if ( is_multisite() ) { + if ( current_user_can( 'remove_users' ) ) + $actions['remove'] = __( 'Remove' ); + } else { + if ( current_user_can( 'delete_users' ) ) + $actions['delete'] = __( 'Delete' ); + } + + return $actions; + } + + function extra_tablenav( $which ) { + if ( 'top' != $which ) + return; + ?> +
    + + + + '; + } + + function current_action() { + if ( isset($_REQUEST['changeit']) && !empty($_REQUEST['new_role']) ) + return 'promote'; + + return parent::current_action(); + } + + function get_columns() { + $c = array( + 'cb' => '', + 'username' => __( 'Username' ), + 'name' => __( 'Name' ), + 'email' => __( 'E-mail' ), + 'role' => __( 'Role' ), + 'posts' => __( 'Posts' ) + ); + + if ( $this->is_site_users ) + unset( $c['posts'] ); + + return $c; + } + + function get_sortable_columns() { + $c = array( + 'username' => 'login', + 'name' => 'name', + 'email' => 'email', + ); + + if ( $this->is_site_users ) + unset( $c['posts'] ); + + return $c; + } + + function display_rows() { + // Query the post counts for this page + if ( ! $this->is_site_users ) + $post_counts = count_many_users_posts( array_keys( $this->items ) ); + + $editable_roles = array_keys( get_editable_roles() ); + + $style = ''; + foreach ( $this->items as $userid => $user_object ) { + if ( count( $user_object->roles ) <= 1 ) { + $role = reset( $user_object->roles ); + } elseif ( $roles = array_intersect( array_values( $user_object->roles ), $editable_roles ) ) { + $role = reset( $roles ); + } else { + $role = reset( $user_object->roles ); + } + + if ( is_multisite() && empty( $user_object->allcaps ) ) + continue; + + $style = ( ' class="alternate"' == $style ) ? '' : ' class="alternate"'; + echo "\n\t" . $this->single_row( $user_object, $style, $role, isset( $post_counts ) ? $post_counts[ $userid ] : 0 ); + } + } + + /** + * Generate HTML for a single row on the users.php admin panel. + * + * @since 2.1.0 + * + * @param object $user_object + * @param string $style Optional. Attributes added to the TR element. Must be sanitized. + * @param string $role Key for the $wp_roles array. + * @param int $numposts Optional. Post count to display for this user. Defaults to zero, as in, a new user has made zero posts. + * @return string + */ + function single_row( $user_object, $style = '', $role = '', $numposts = 0 ) { + global $wp_roles; + + if ( !( is_object( $user_object ) && is_a( $user_object, 'WP_User' ) ) ) + $user_object = get_userdata( (int) $user_object ); + $user_object->filter = 'display'; + $email = $user_object->user_email; + + if ( $this->is_site_users ) + $url = "site-users.php?id={$this->site_id}&"; + else + $url = 'users.php?'; + + $checkbox = ''; + // Check if the user for this row is editable + if ( current_user_can( 'list_users' ) ) { + // Set up the user editing link + $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_object->ID ) ) ); + + // Set up the hover actions for this user + $actions = array(); + + if ( current_user_can( 'edit_user', $user_object->ID ) ) { + $edit = "$user_object->user_login
    "; + $actions['edit'] = '' . __( 'Edit' ) . ''; + } else { + $edit = "$user_object->user_login
    "; + } + + if ( !is_multisite() && get_current_user_id() != $user_object->ID && current_user_can( 'delete_user', $user_object->ID ) ) + $actions['delete'] = "" . __( 'Delete' ) . ""; + if ( is_multisite() && get_current_user_id() != $user_object->ID && current_user_can( 'remove_user', $user_object->ID ) ) + $actions['remove'] = "" . __( 'Remove' ) . ""; + $actions = apply_filters( 'user_row_actions', $actions, $user_object ); + $edit .= $this->row_actions( $actions ); + + // Set up the checkbox ( because the user is editable, otherwise it's empty ) + $checkbox = '' + . ""; + + } else { + $edit = '' . $user_object->user_login . ''; + } + $role_name = isset( $wp_roles->role_names[$role] ) ? translate_user_role( $wp_roles->role_names[$role] ) : __( 'None' ); + $avatar = get_avatar( $user_object->ID, 32 ); + + $r = ""; + + list( $columns, $hidden ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $class = "class=\"$column_name column-$column_name\""; + + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + $attributes = "$class$style"; + + switch ( $column_name ) { + case 'cb': + $r .= "$checkbox"; + break; + case 'username': + $r .= "$avatar $edit"; + break; + case 'name': + $r .= "$user_object->first_name $user_object->last_name"; + break; + case 'email': + $r .= "$email"; + break; + case 'role': + $r .= "$role_name"; + break; + case 'posts': + $attributes = 'class="posts column-posts num"' . $style; + $r .= ""; + if ( $numposts > 0 ) { + $r .= ""; + $r .= $numposts; + $r .= ''; + } else { + $r .= 0; + } + $r .= ""; + break; + default: + $r .= ""; + $r .= apply_filters( 'manage_users_custom_column', '', $column_name, $user_object->ID ); + $r .= ""; + } + } + $r .= ''; + + return $r; + } +} diff --git a/src/wp-admin/includes/comment.php b/src/wp-admin/includes/comment.php new file mode 100644 index 0000000..a74eeaa --- /dev/null +++ b/src/wp-admin/includes/comment.php @@ -0,0 +1,171 @@ +get_var( $wpdb->prepare("SELECT comment_post_ID FROM $wpdb->comments + WHERE comment_author = %s AND comment_date = %s", $comment_author, $comment_date) ); +} + +/** + * Update a comment with values provided in $_POST. + * + * @since 2.0.0 + */ +function edit_comment() { + + if ( ! current_user_can( 'edit_comment', (int) $_POST['comment_ID'] ) ) + wp_die ( __( 'You are not allowed to edit comments on this post.' ) ); + + if ( isset( $_POST['newcomment_author'] ) ) + $_POST['comment_author'] = $_POST['newcomment_author']; + if ( isset( $_POST['newcomment_author_email'] ) ) + $_POST['comment_author_email'] = $_POST['newcomment_author_email']; + if ( isset( $_POST['newcomment_author_url'] ) ) + $_POST['comment_author_url'] = $_POST['newcomment_author_url']; + if ( isset( $_POST['comment_status'] ) ) + $_POST['comment_approved'] = $_POST['comment_status']; + if ( isset( $_POST['content'] ) ) + $_POST['comment_content'] = $_POST['content']; + if ( isset( $_POST['comment_ID'] ) ) + $_POST['comment_ID'] = (int) $_POST['comment_ID']; + + foreach ( array ('aa', 'mm', 'jj', 'hh', 'mn') as $timeunit ) { + if ( !empty( $_POST['hidden_' . $timeunit] ) && $_POST['hidden_' . $timeunit] != $_POST[$timeunit] ) { + $_POST['edit_date'] = '1'; + break; + } + } + + if ( !empty ( $_POST['edit_date'] ) ) { + $aa = $_POST['aa']; + $mm = $_POST['mm']; + $jj = $_POST['jj']; + $hh = $_POST['hh']; + $mn = $_POST['mn']; + $ss = $_POST['ss']; + $jj = ($jj > 31 ) ? 31 : $jj; + $hh = ($hh > 23 ) ? $hh -24 : $hh; + $mn = ($mn > 59 ) ? $mn -60 : $mn; + $ss = ($ss > 59 ) ? $ss -60 : $ss; + $_POST['comment_date'] = "$aa-$mm-$jj $hh:$mn:$ss"; + } + + wp_update_comment( $_POST ); +} + +/** + * Returns a comment object based on comment ID. + * + * @since 2.0.0 + * + * @param int $id ID of comment to retrieve. + * @return bool|object Comment if found. False on failure. + */ +function get_comment_to_edit( $id ) { + if ( !$comment = get_comment($id) ) + return false; + + $comment->comment_ID = (int) $comment->comment_ID; + $comment->comment_post_ID = (int) $comment->comment_post_ID; + + $comment->comment_content = format_to_edit( $comment->comment_content ); + /** + * Filter the comment content before editing. + * + * @since 2.0.0 + * + * @param string $comment->comment_content Comment content. + */ + $comment->comment_content = apply_filters( 'comment_edit_pre', $comment->comment_content ); + + $comment->comment_author = format_to_edit( $comment->comment_author ); + $comment->comment_author_email = format_to_edit( $comment->comment_author_email ); + $comment->comment_author_url = format_to_edit( $comment->comment_author_url ); + $comment->comment_author_url = esc_url($comment->comment_author_url); + + return $comment; +} + +/** + * Get the number of pending comments on a post or posts + * + * @since 2.3.0 + * @uses $wpdb + * + * @param int|array $post_id Either a single Post ID or an array of Post IDs + * @return int|array Either a single Posts pending comments as an int or an array of ints keyed on the Post IDs + */ +function get_pending_comments_num( $post_id ) { + global $wpdb; + + $single = false; + if ( !is_array($post_id) ) { + $post_id_array = (array) $post_id; + $single = true; + } else { + $post_id_array = $post_id; + } + $post_id_array = array_map('intval', $post_id_array); + $post_id_in = "'" . implode("', '", $post_id_array) . "'"; + + $pending = $wpdb->get_results( "SELECT comment_post_ID, COUNT(comment_ID) as num_comments FROM $wpdb->comments WHERE comment_post_ID IN ( $post_id_in ) AND comment_approved = '0' GROUP BY comment_post_ID", ARRAY_A ); + + if ( $single ) { + if ( empty($pending) ) + return 0; + else + return absint($pending[0]['num_comments']); + } + + $pending_keyed = array(); + + // Default to zero pending for all posts in request + foreach ( $post_id_array as $id ) + $pending_keyed[$id] = 0; + + if ( !empty($pending) ) + foreach ( $pending as $pend ) + $pending_keyed[$pend['comment_post_ID']] = absint($pend['num_comments']); + + return $pending_keyed; +} + +/** + * Add avatars to relevant places in admin, or try to. + * + * @since 2.5.0 + * @uses $comment + * + * @param string $name User name. + * @return string Avatar with Admin name. + */ +function floated_admin_avatar( $name ) { + global $comment; + $avatar = get_avatar( $comment, 32, 'mystery' ); + return "$avatar $name"; +} + +function enqueue_comment_hotkeys_js() { + if ( 'true' == get_user_option( 'comment_shortcuts' ) ) + wp_enqueue_script( 'jquery-table-hotkeys' ); +} diff --git a/src/wp-admin/includes/continents-cities.php b/src/wp-admin/includes/continents-cities.php new file mode 100644 index 0000000..0ebc4f3 --- /dev/null +++ b/src/wp-admin/includes/continents-cities.php @@ -0,0 +1,493 @@ +%1$s %2$s', __( 'Quick Draft' ), __( 'Drafts' ) ); + wp_add_dashboard_widget( 'dashboard_quick_press', $quick_draft_title, 'wp_dashboard_quick_press' ); + } + + // WordPress News + wp_add_dashboard_widget( 'dashboard_primary', __( 'WordPress News' ), 'wp_dashboard_primary' ); + + // Hook to register new widgets + // Filter widget order + if ( is_network_admin() ) { + do_action( 'wp_network_dashboard_setup' ); + $dashboard_widgets = apply_filters( 'wp_network_dashboard_widgets', array() ); + } elseif ( is_user_admin() ) { + do_action( 'wp_user_dashboard_setup' ); + $dashboard_widgets = apply_filters( 'wp_user_dashboard_widgets', array() ); + } else { + do_action( 'wp_dashboard_setup' ); + $dashboard_widgets = apply_filters( 'wp_dashboard_widgets', array() ); + } + + foreach ( $dashboard_widgets as $widget_id ) { + $name = empty( $wp_registered_widgets[$widget_id]['all_link'] ) ? $wp_registered_widgets[$widget_id]['name'] : $wp_registered_widgets[$widget_id]['name'] . " " . __('View all') . ''; + wp_add_dashboard_widget( $widget_id, $name, $wp_registered_widgets[$widget_id]['callback'], $wp_registered_widget_controls[$widget_id]['callback'] ); + } + + if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget_id']) ) { + check_admin_referer( 'edit-dashboard-widget_' . $_POST['widget_id'], 'dashboard-widget-nonce' ); + ob_start(); // hack - but the same hack wp-admin/widgets.php uses + wp_dashboard_trigger_widget_control( $_POST['widget_id'] ); + ob_end_clean(); + wp_redirect( remove_query_arg( 'edit' ) ); + exit; + } + + if ( $update ) + update_option( 'dashboard_widget_options', $widget_options ); + + /** This action is documented in wp-admin/edit-form-advanced.php */ + do_action('do_meta_boxes', $screen->id, 'normal', ''); + /** This action is documented in wp-admin/edit-form-advanced.php */ + do_action('do_meta_boxes', $screen->id, 'side', ''); +} + +function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback = null, $callback_args = null ) { + $screen = get_current_screen(); + global $wp_dashboard_control_callbacks; + + if ( $control_callback && current_user_can( 'edit_dashboard' ) && is_callable( $control_callback ) ) { + $wp_dashboard_control_callbacks[$widget_id] = $control_callback; + if ( isset( $_GET['edit'] ) && $widget_id == $_GET['edit'] ) { + list($url) = explode( '#', add_query_arg( 'edit', false ), 2 ); + $widget_name .= ' ' . __( 'Cancel' ) . ''; + $callback = '_wp_dashboard_control_callback'; + } else { + list($url) = explode( '#', add_query_arg( 'edit', $widget_id ), 2 ); + $widget_name .= ' ' . __( 'Configure' ) . ''; + } + } + + $side_widgets = array( 'dashboard_quick_press', 'dashboard_primary' ); + + $location = 'normal'; + if ( in_array($widget_id, $side_widgets) ) + $location = 'side'; + + $priority = 'core'; + if ( 'dashboard_browser_nag' === $widget_id ) + $priority = 'high'; + + add_meta_box( $widget_id, $widget_name, $callback, $screen, $location, $priority, $callback_args ); +} + +function _wp_dashboard_control_callback( $dashboard, $meta_box ) { + echo '
    '; + wp_dashboard_trigger_widget_control( $meta_box['id'] ); + wp_nonce_field( 'edit-dashboard-widget_' . $meta_box['id'], 'dashboard-widget-nonce' ); + echo ''; + submit_button( __('Submit') ); + echo '
    '; +} + +/** + * Displays the dashboard. + * + * @since 2.5.0 + */ +function wp_dashboard() { + $screen = get_current_screen(); + $columns = absint( $screen->get_columns() ); + $columns_css = ''; + if ( $columns ) { + $columns_css = " columns-$columns"; + } + +?> +
    +
    + id, 'normal', '' ); ?> +
    +
    + id, 'side', '' ); ?> +
    +
    + id, 'column3', '' ); ?> +
    +
    + id, 'column4', '' ); ?> +
    +
    + +%1$s', $theme->display('Name') ); + else + $theme_name = $theme->display('Name'); +?> +
    +
      + publish ) { + if ( 'post' == $post_type ) { + $text = _n( '%s Post', '%s Posts', $num_posts->publish ); + } else { + $text = _n( '%s Page', '%s Pages', $num_posts->publish ); + } + $text = sprintf( $text, number_format_i18n( $num_posts->publish ) ); + $post_type_object = get_post_type_object( $post_type ); + if ( $post_type_object && current_user_can( $post_type_object->cap->edit_posts ) ) { + printf( '
    • %2$s
    • ', $post_type, $text ); + } else { + printf( '
    • %2$s
    • ', $post_type, $text ); + } + + } + } + // Comments + $num_comm = wp_count_comments(); + if ( $num_comm && $num_comm->total_comments ) { + $text = sprintf( _n( '%s Comment', '%s Comments', $num_comm->total_comments ), number_format_i18n( $num_comm->total_comments ) ); + ?> +
    • + moderated ) { + /* translators: Number of comments in moderation */ + $text = sprintf( _nx( '%s in moderation', '%s in moderation', $num_comm->moderated, 'comments' ), number_format_i18n( $num_comm->moderated ) ); + ?> +
    • + ' . implode( "\n
    • ", $elements ) . "
    • \n"; + } + + ?> +
    +

    + $content

    "; + } + ?> +
    + +
    + +
    + ' . __( 'Create a New Site' ) . ''; + if ( current_user_can('create_users') ) + $actions['create-user'] = '' . __( 'Create a New User' ) . ''; + + $c_users = get_user_count(); + $c_blogs = get_blog_count(); + + $user_text = sprintf( _n( '%s user', '%s users', $c_users ), number_format_i18n( $c_users ) ); + $blog_text = sprintf( _n( '%s site', '%s sites', $c_blogs ), number_format_i18n( $c_blogs ) ); + + $sentence = sprintf( __( 'You have %1$s and %2$s.' ), $blog_text, $user_text ); + + if ( $actions ) { + echo '
      '; + foreach ( $actions as $class => $action ) { + $actions[ $class ] = "\t
    • $action"; + } + echo implode( " |
    • \n", $actions ) . "\n"; + echo '
    '; + } +?> +
    + +

    + + +
    +

    + + 'submit_users' ) ); ?> +

    +
    + +
    +

    + + 'submit_sites' ) ); ?> +

    +
    +post_status != 'auto-draft' ) { // auto-draft doesn't exists anymore + $post = get_default_post_to_edit( 'post', true ); + update_user_option( get_current_user_id(), 'dashboard_quick_press_last_post_id', (int) $post->ID ); // Save post_ID + } else { + $post->post_title = ''; // Remove the auto draft title + } + } else { + $post = get_default_post_to_edit( 'post' , true); + $user_id = get_current_user_id(); + // Don't create an option if this is a super admin who does not belong to this site. + if ( ! ( is_super_admin( $user_id ) && ! in_array( get_current_blog_id(), array_keys( get_blogs_of_user( $user_id ) ) ) ) ) + update_user_option( $user_id, 'dashboard_quick_press_last_post_id', (int) $post->ID ); // Save post_ID + } + + $post_ID = (int) $post->ID; +?> + +
    + + +
    + + +
    + + +
    + +
    + + +
    + +

    + + + + + 'save-post' ) ); ?> +
    +

    + +
    + 'post', + 'post_status' => 'draft', + 'author' => get_current_user_id(), + 'posts_per_page' => 4, + 'orderby' => 'modified', + 'order' => 'DESC' + ); + $drafts = get_posts( $query_args ); + if ( ! $drafts ) { + return; + } + } + + echo '
    '; + if ( count( $drafts ) > 3 ) { + echo '

    ' . _x( 'View all', 'drafts' ) . "

    \n"; + } + echo '

    ' . __( 'Drafts' ) . "

    \n
      "; + + $drafts = array_slice( $drafts, 0, 3 ); + foreach ( $drafts as $draft ) { + $url = get_edit_post_link( $draft->ID ); + $title = _draft_or_post_title( $draft->ID ); + echo "
    • \n"; + echo '
      ' . esc_html( $title ) . ''; + echo '
      '; + if ( $the_content = wp_trim_words( $draft->post_content, 10 ) ) { + echo '

      ' . $the_content . '

      '; + } + echo "
    • \n"; + } + echo "
    \n
    "; +} + +function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { + $GLOBALS['comment'] =& $comment; + + $comment_post_url = get_edit_post_link( $comment->comment_post_ID ); + $comment_post_title = strip_tags(get_the_title( $comment->comment_post_ID )); + $comment_post_link = "$comment_post_title"; + $comment_link = '#'; + + $actions_string = ''; + if ( current_user_can( 'edit_comment', $comment->comment_ID ) ) { + // preorder it: Approve | Reply | Edit | Spam | Trash + $actions = array( + 'approve' => '', 'unapprove' => '', + 'reply' => '', + 'edit' => '', + 'spam' => '', + 'trash' => '', 'delete' => '' + ); + + $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) ); + $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "approve-comment_$comment->comment_ID" ) ); + + $approve_url = esc_url( "comment.php?action=approvecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$approve_nonce" ); + $unapprove_url = esc_url( "comment.php?action=unapprovecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$approve_nonce" ); + $spam_url = esc_url( "comment.php?action=spamcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); + $trash_url = esc_url( "comment.php?action=trashcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); + $delete_url = esc_url( "comment.php?action=deletecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); + + $actions['approve'] = "" . __( 'Approve' ) . ''; + $actions['unapprove'] = "" . __( 'Unapprove' ) . ''; + $actions['edit'] = "". __('Edit') . ''; + $actions['reply'] = '' . __('Reply') . ''; + $actions['spam'] = "" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . ''; + if ( !EMPTY_TRASH_DAYS ) + $actions['delete'] = "" . __('Delete Permanently') . ''; + else + $actions['trash'] = "" . _x('Trash', 'verb') . ''; + + $actions = apply_filters( 'comment_row_actions', array_filter($actions), $comment ); + + $i = 0; + foreach ( $actions as $action => $link ) { + ++$i; + ( ( ('approve' == $action || 'unapprove' == $action) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | '; + + // Reply and quickedit need a hide-if-no-js span + if ( 'reply' == $action || 'quickedit' == $action ) + $action .= ' hide-if-no-js'; + + $actions_string .= "$sep$link"; + } + } + +?> + +
    comment_ID) ) ); ?>> + comment_type || 'comment' == $comment->comment_type ) : ?> + + + +
    +

    + ' . get_comment_author_link() . '', $comment_post_link.' '.$comment_link, ' ' . __( '[Pending]' ) . '' ); ?> +

    + + comment_type ) : + case 'pingback' : + $type = __( 'Pingback' ); + break; + case 'trackback' : + $type = __( 'Trackback' ); + break; + default : + $type = ucwords( $comment->comment_type ); + endswitch; + $type = esc_html( $type ); + ?> +
    + +

    $type", $comment_post_link." ".$comment_link ); ?>

    +

    + + +

    +

    +
    +
    +'; + + $future_posts = wp_dashboard_recent_posts( array( + 'display' => 2, + 'max' => 5, + 'status' => 'future', + 'order' => 'ASC', + 'title' => __( 'Publishing Soon' ), + 'id' => 'future-posts', + ) ); + $recent_posts = wp_dashboard_recent_posts( array( + 'display' => 2, + 'max' => 5, + 'status' => 'publish', + 'order' => 'DESC', + 'title' => __( 'Recently Published' ), + 'id' => 'published-posts', + ) ); + + $recent_comments = wp_dashboard_recent_comments(); + + if ( !$future_posts && !$recent_posts && !$recent_comments ) { + echo '
    '; + echo '

    '; + echo '

    ' . __( 'No activity yet!' ) . '

    '; + echo '
    '; + } + + echo '
    '; +} + +/** + * Generates Publishing Soon and Recently Published sections. + * + * @since 3.8.0 + * + * @param array $args { + * An array of query and display arguments. + * + * @type int $display Number of posts to display. + * @type int $max Maximum number of posts to query. + * @type string $status Post status. + * @type string $order Designates ascending ('ASC') or descending ('DESC') order. + * @type string $title Section title. + * @type string $id The container id. + * } + * @return bool False if no posts were found. True otherwise. + */ +function wp_dashboard_recent_posts( $args ) { + $query_args = array( + 'post_type' => 'post', + 'post_status' => $args['status'], + 'orderby' => 'date', + 'order' => $args['order'], + 'posts_per_page' => intval( $args['max'] ), + 'no_found_rows' => true, + 'cache_results' => false + ); + $posts = new WP_Query( $query_args ); + + if ( $posts->have_posts() ) { + + echo '
    '; + + if ( $posts->post_count > $args['display'] ) { + echo '' . sprintf( __( 'See %s more…'), $posts->post_count - intval( $args['display'] ) ) . ''; + } + + echo '

    ' . $args['title'] . '

    '; + + echo '
      '; + + $i = 0; + $today = date( 'Y-m-d', current_time( 'timestamp' ) ); + $tomorrow = date( 'Y-m-d', strtotime( '+1 day', current_time( 'timestamp' ) ) ); + + while ( $posts->have_posts() ) { + $posts->the_post(); + + $time = get_the_time( 'U' ); + if ( date( 'Y-m-d', $time ) == $today ) { + $relative = __( 'Today' ); + } elseif ( date( 'Y-m-d', $time ) == $tomorrow ) { + $relative = __( 'Tomorrow' ); + } else { + /* translators: date and time format for recent posts on the dashboard, see http://php.net/date */ + $relative = date_i18n( __( 'M jS' ), $time ); + } + + $text = sprintf( + /* translators: 1: relative date, 2: time, 4: post title */ + __( '%1$s, %2$s %4$s' ), + $relative, + get_the_time(), + get_edit_post_link(), + _draft_or_post_title() + ); + + $hidden = $i >= $args['display'] ? ' class="hidden"' : ''; + echo "$text"; + $i++; + } + + echo '
    '; + echo '
    '; + + } else { + return false; + } + + wp_reset_postdata(); + + return true; +} + +/** + * Show Comments section. + * + * @since 3.8.0 + * + * @param int $total_items Optional. Number of comments to query. Default 5. + * @return bool False if no comments were found. True otherwise. + */ +function wp_dashboard_recent_comments( $total_items = 5 ) { + global $wpdb; + + // Select all comment types and filter out spam later for better query performance. + $comments = array(); + $start = 0; + + $comments_query = array( + 'number' => $total_items * 5, + 'offset' => 0 + ); + if ( ! current_user_can( 'edit_posts' ) ) + $comments_query['status'] = 'approve'; + + while ( count( $comments ) < $total_items && $possible = get_comments( $comments_query ) ) { + foreach ( $possible as $comment ) { + if ( ! current_user_can( 'read_post', $comment->comment_post_ID ) ) + continue; + $comments[] = $comment; + if ( count( $comments ) == $total_items ) + break 2; + } + $comments_query['offset'] += $comments_query['number']; + $comments_query['number'] = $total_items * 10; + } + + + + if ( $comments ) { + echo '
    '; + echo '

    ' . __( 'Comments' ) . '

    '; + + echo '
    '; + foreach ( $comments as $comment ) + _wp_dashboard_recent_comments_row( $comment ); + echo '
    '; + + if ( current_user_can('edit_posts') ) + _get_list_table('WP_Comments_List_Table')->views(); + + wp_comment_reply( -1, false, 'dashboard', false ); + wp_comment_trashnotice(); + + echo '
    '; + } else { + return false; + } + return true; +} + +/** + * Display generic dashboard RSS widget feed. + * + * @since 2.5.0 + * + * @param string $widget_id + */ +function wp_dashboard_rss_output( $widget_id ) { + $widgets = get_option( 'dashboard_widget_options' ); + echo '
    '; + wp_widget_rss_output( $widgets[ $widget_id ] ); + echo "
    "; +} + +/** + * Checks to see if all of the feed url in $check_urls are cached. + * + * If $check_urls is empty, look for the rss feed url found in the dashboard + * widget options of $widget_id. If cached, call $callback, a function that + * echoes out output for this widget. If not cache, echo a "Loading..." stub + * which is later replaced by AJAX call (see top of /wp-admin/index.php) + * + * @since 2.5.0 + * + * @param string $widget_id + * @param callback $callback + * @param array $check_urls RSS feeds + * @return bool False on failure. True on success. + */ +function wp_dashboard_cached_rss_widget( $widget_id, $callback, $check_urls = array() ) { + $loading = '

    ' . __( 'Loading…' ) . '

    ' . __( 'This widget requires JavaScript.' ) . '

    '; + $doing_ajax = ( defined('DOING_AJAX') && DOING_AJAX ); + + if ( empty($check_urls) ) { + $widgets = get_option( 'dashboard_widget_options' ); + if ( empty($widgets[$widget_id]['url']) && ! $doing_ajax ) { + echo $loading; + return false; + } + $check_urls = array( $widgets[$widget_id]['url'] ); + } + + $cache_key = 'dash_' . md5( $widget_id ); + if ( false !== ( $output = get_transient( $cache_key ) ) ) { + echo $output; + return true; + } + + if ( ! $doing_ajax ) { + echo $loading; + return false; + } + + if ( $callback && is_callable( $callback ) ) { + $args = array_slice( func_get_args(), 2 ); + array_unshift( $args, $widget_id ); + ob_start(); + call_user_func_array( $callback, $args ); + set_transient( $cache_key, ob_get_flush(), 12 * HOUR_IN_SECONDS ); // Default lifetime in cache of 12 hours (same as the feeds) + } + + return true; +} + +/* Dashboard Widgets Controls */ + +// Calls widget_control callback +/** + * Calls widget control callback. + * + * @since 2.5.0 + * + * @param int $widget_control_id Registered Widget ID. + */ +function wp_dashboard_trigger_widget_control( $widget_control_id = false ) { + global $wp_dashboard_control_callbacks; + + if ( is_scalar($widget_control_id) && $widget_control_id && isset($wp_dashboard_control_callbacks[$widget_control_id]) && is_callable($wp_dashboard_control_callbacks[$widget_control_id]) ) { + call_user_func( $wp_dashboard_control_callbacks[$widget_control_id], '', array( 'id' => $widget_control_id, 'callback' => $wp_dashboard_control_callbacks[$widget_control_id] ) ); + } +} + +/** + * The RSS dashboard widget control. + * + * Sets up $args to be used as input to wp_widget_rss_form(). Handles POST data + * from RSS-type widgets. + * + * @since 2.5.0 + * + * @param string $widget_id + * @param array $form_inputs + */ +function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) { + if ( !$widget_options = get_option( 'dashboard_widget_options' ) ) + $widget_options = array(); + + if ( !isset($widget_options[$widget_id]) ) + $widget_options[$widget_id] = array(); + + $number = 1; // Hack to use wp_widget_rss_form() + $widget_options[$widget_id]['number'] = $number; + + if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget-rss'][$number]) ) { + $_POST['widget-rss'][$number] = wp_unslash( $_POST['widget-rss'][$number] ); + $widget_options[$widget_id] = wp_widget_rss_process( $_POST['widget-rss'][$number] ); + $widget_options[$widget_id]['number'] = $number; + // title is optional. If black, fill it if possible + if ( !$widget_options[$widget_id]['title'] && isset($_POST['widget-rss'][$number]['title']) ) { + $rss = fetch_feed($widget_options[$widget_id]['url']); + if ( is_wp_error($rss) ) { + $widget_options[$widget_id]['title'] = htmlentities(__('Unknown Feed')); + } else { + $widget_options[$widget_id]['title'] = htmlentities(strip_tags($rss->get_title())); + $rss->__destruct(); + unset($rss); + } + } + update_option( 'dashboard_widget_options', $widget_options ); + $cache_key = 'dash_' . md5( $widget_id ); + delete_transient( $cache_key ); + } + + wp_widget_rss_form( $widget_options[$widget_id], $form_inputs ); +} + +/** + * WordPress News dashboard widget. + * + * @since 2.7.0 + */ +function wp_dashboard_primary() { + $feeds = array( + 'news' => array( + 'link' => apply_filters( 'dashboard_primary_link', __( 'http://wordpress.org/news/' ) ), + 'url' => apply_filters( 'dashboard_primary_feed', __( 'http://wordpress.org/news/feed/' ) ), + 'title' => apply_filters( 'dashboard_primary_title', __( 'WordPress Blog' ) ), + 'items' => 1, + 'show_summary' => 1, + 'show_author' => 0, + 'show_date' => 1, + ), + 'planet' => array( + 'link' => apply_filters( 'dashboard_secondary_link', __( 'http://planet.wordpress.org/' ) ), + 'url' => apply_filters( 'dashboard_secondary_feed', __( 'http://planet.wordpress.org/feed/' ) ), + 'title' => apply_filters( 'dashboard_secondary_title', __( 'Other WordPress News' ) ), + 'items' => 3, + 'show_summary' => 0, + 'show_author' => 0, + 'show_date' => 0, + ) + ); + + if ( ( ! is_multisite() && is_blog_admin() && current_user_can( 'install_plugins' ) ) || ( is_network_admin() && current_user_can( 'manage_network_plugins' ) && current_user_can( 'install_plugins' ) ) ) { + $feeds['plugins'] = array( + 'link' => '', + 'url' => array( + 'popular' => 'http://wordpress.org/plugins/rss/browse/popular/', + ), + 'title' => '', + 'items' => 1, + 'show_summary' => 0, + 'show_author' => 0, + 'show_date' => 0, + ); + } + + wp_dashboard_cached_rss_widget( 'dashboard_primary', 'wp_dashboard_primary_output', $feeds ); +} + +/** + * Display the WordPress news feeds. + * + * @since 3.8.0 + * + * @param string $widget_id Widget ID. + * @param array $feeds Array of RSS feeds. + */ +function wp_dashboard_primary_output( $widget_id, $feeds ) { + foreach( $feeds as $type => $args ) { + $args['type'] = $type; + echo '
    '; + if ( $type === 'plugins' ) { + wp_dashboard_plugins_output( $args['url'], $args ); + } else { + wp_widget_rss_output( $args['url'], $args ); + } + echo "
    "; + } +} + +/** + * Display plugins text for the WordPress news widget. + * + * @since 2.5.0 + */ +function wp_dashboard_plugins_output( $rss, $args = array() ) { + // Plugin feeds plus link to install them + $popular = fetch_feed( $args['url']['popular'] ); + + if ( false === $plugin_slugs = get_transient( 'plugin_slugs' ) ) { + $plugin_slugs = array_keys( get_plugins() ); + set_transient( 'plugin_slugs', $plugin_slugs, DAY_IN_SECONDS ); + } + + echo '
      '; + + foreach ( array( + 'popular' => __( 'Popular Plugin' ) + ) as $feed => $label ) { + if ( is_wp_error($$feed) || !$$feed->get_item_quantity() ) + continue; + + $items = $$feed->get_items(0, 5); + + // Pick a random, non-installed plugin + while ( true ) { + // Abort this foreach loop iteration if there's no plugins left of this type + if ( 0 == count($items) ) + continue 2; + + $item_key = array_rand($items); + $item = $items[$item_key]; + + list($link, $frag) = explode( '#', $item->get_link() ); + + $link = esc_url($link); + if ( preg_match( '|/([^/]+?)/?$|', $link, $matches ) ) + $slug = $matches[1]; + else { + unset( $items[$item_key] ); + continue; + } + + // Is this random plugin's slug already installed? If so, try again. + reset( $plugin_slugs ); + foreach ( $plugin_slugs as $plugin_slug ) { + if ( $slug == substr( $plugin_slug, 0, strlen( $slug ) ) ) { + unset( $items[$item_key] ); + continue 2; + } + } + + // If we get to this point, then the random plugin isn't installed and we can stop the while(). + break; + } + + // Eliminate some common badly formed plugin descriptions + while ( ( null !== $item_key = array_rand($items) ) && false !== strpos( $items[$item_key]->get_description(), 'Plugin Name:' ) ) + unset($items[$item_key]); + + if ( !isset($items[$item_key]) ) + continue; + + $title = esc_html( $item->get_title() ); + + $description = esc_html( strip_tags( @html_entity_decode( $item->get_description(), ENT_QUOTES, get_option( 'blog_charset' ) ) ) ); + + $ilink = wp_nonce_url('plugin-install.php?tab=plugin-information&plugin=' . $slug, 'install-plugin_' . $slug) . '&TB_iframe=true&width=600&height=800'; + + echo "
    • $label: $title (" . __( 'Install' ) . ")
    • "; + + $$feed->__destruct(); + unset( $$feed ); + } + + echo '
    '; +} + +/** + * Display file upload quota on dashboard. + * + * Runs on the activity_box_end hook in wp_dashboard_right_now(). + * + * @since 3.0.0 + * + * @return bool True if not multisite, user can't upload files, or the space check option is disabled. +*/ +function wp_dashboard_quota() { + if ( !is_multisite() || !current_user_can( 'upload_files' ) || get_site_option( 'upload_space_check_disabled' ) ) + return true; + + $quota = get_space_allowed(); + $used = get_space_used(); + + if ( $used > $quota ) + $percentused = '100'; + else + $percentused = ( $used / $quota ) * 100; + $used_class = ( $percentused >= 70 ) ? ' warning' : ''; + $used = round( $used, 2 ); + $percentused = number_format( $percentused ); + + ?> +

    +
    +
      +
    • + %3$s', + esc_url( admin_url( 'upload.php' ) ), + __( 'Manage Uploads' ), + $text + ); ?> +
    • + %3$s', + esc_url( admin_url( 'upload.php' ) ), + __( 'Manage Uploads' ), + $text + ); ?> +
    • +
    +
    + %s. Using an outdated browser makes your computer unsafe. For the best WordPress experience, please update your browser." ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ) ); + } else { + $msg = sprintf( __( "It looks like you're using an old version of %s. For the best WordPress experience, please update your browser." ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ) ); + } + + $browser_nag_class = ''; + if ( !empty( $response['img_src'] ) ) { + $img_src = ( is_ssl() && ! empty( $response['img_src_ssl'] ) )? $response['img_src_ssl'] : $response['img_src']; + + $notice .= '
    '; + $browser_nag_class = ' has-browser-icon'; + } + $notice .= "

    {$msg}

    "; + + $browsehappy = 'http://browsehappy.com/'; + $locale = get_locale(); + if ( 'en_US' !== $locale ) + $browsehappy = add_query_arg( 'locale', $locale, $browsehappy ); + + $notice .= '

    ' . sprintf( __( 'Update %2$s or learn how to browse happy' ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ), esc_url( $browsehappy ) ) . '

    '; + $notice .= '

    ' . __( 'Dismiss' ) . '

    '; + $notice .= '
    '; + } + + echo apply_filters( 'browse-happy-notice', $notice, $response ); +} + +function dashboard_browser_nag_class( $classes ) { + $response = wp_check_browser_version(); + + if ( $response && $response['insecure'] ) + $classes[] = 'browser-insecure'; + + return $classes; +} + +/** + * Check if the user needs a browser update + * + * @since 3.2.0 + * + * @return array|bool False on failure, array of browser data on success. + */ +function wp_check_browser_version() { + if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) + return false; + + $key = md5( $_SERVER['HTTP_USER_AGENT'] ); + + if ( false === ($response = get_site_transient('browser_' . $key) ) ) { + global $wp_version; + + $options = array( + 'body' => array( 'useragent' => $_SERVER['HTTP_USER_AGENT'] ), + 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url() + ); + + $response = wp_remote_post( 'http://api.wordpress.org/core/browse-happy/1.1/', $options ); + + if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) + return false; + + /** + * Response should be an array with: + * 'name' - string - A user friendly browser name + * 'version' - string - The most recent version of the browser + * 'current_version' - string - The version of the browser the user is using + * 'upgrade' - boolean - Whether the browser needs an upgrade + * 'insecure' - boolean - Whether the browser is deemed insecure + * 'upgrade_url' - string - The url to visit to upgrade + * 'img_src' - string - An image representing the browser + * 'img_src_ssl' - string - An image (over SSL) representing the browser + */ + $response = json_decode( wp_remote_retrieve_body( $response ), true ); + + if ( ! is_array( $response ) ) + return false; + + set_site_transient( 'browser_' . $key, $response, WEEK_IN_SECONDS ); + } + + return $response; +} + +/** + * Empty function usable by plugins to output empty dashboard widget (to be populated later by JS). + */ +function wp_dashboard_empty() {} + +/** + * Displays a welcome panel to introduce users to WordPress. + * + * @since 3.3.0 + */ +function wp_welcome_panel() { + ?> +
    +

    +

    +
    +
    +

    + + + true ) ) ) > 1 ) ) : ?> +

    change your theme completely' ), admin_url( 'themes.php' ) ); ?>

    + +
    +
    +

    +
      + +
    • ' . __( 'Edit your front page' ) . '', get_edit_post_link( get_option( 'page_on_front' ) ) ); ?>
    • +
    • ' . __( 'Add additional pages' ) . '', admin_url( 'post-new.php?post_type=page' ) ); ?>
    • + +
    • ' . __( 'Edit your front page' ) . '', get_edit_post_link( get_option( 'page_on_front' ) ) ); ?>
    • +
    • ' . __( 'Add additional pages' ) . '', admin_url( 'post-new.php?post_type=page' ) ); ?>
    • +
    • ' . __( 'Add a blog post' ) . '', admin_url( 'post-new.php' ) ); ?>
    • + +
    • ' . __( 'Write your first blog post' ) . '', admin_url( 'post-new.php' ) ); ?>
    • +
    • ' . __( 'Add an About page' ) . '', admin_url( 'post-new.php?post_type=page' ) ); ?>
    • + +
    • ' . __( 'View your site' ) . '', home_url( '/' ) ); ?>
    • +
    +
    +
    +

    +
    ', admin_url( 'widgets.php' ), admin_url( 'nav-menus.php' ) ); ?> +
  1. ' . __( 'Turn comments on or off' ) . '', admin_url( 'options-discussion.php' ) ); ?>
  2. +
  3. ' . __( 'Learn more about getting started' ) . '', __( 'http://codex.wordpress.org/First_Steps_With_WordPress' ) ); ?>
  4. + +
    +
    +
    + 0) ); + + if ( $categories ) { + foreach ( $categories as $category ) { + if ( $currentcat != $category->term_id && $parent == $category->parent) { + $pad = str_repeat( '– ', $level ); + $category->name = esc_html( $category->name ); + echo "\n\t"; + wp_dropdown_cats( $currentcat, $currentparent, $category->term_id, $level +1, $categories ); + } + } + } else { + return false; + } +} + +/** + * Register a setting and its sanitization callback + * + * @since 2.7.0 + * @deprecated 3.0.0 + * @deprecated Use register_setting() + * @see register_setting() + * + * @param string $option_group A settings group name. Should correspond to a whitelisted option key name. + * Default whitelisted option key names include "general," "discussion," and "reading," among others. + * @param string $option_name The name of an option to sanitize and save. + * @param unknown_type $sanitize_callback A callback function that sanitizes the option's value. + * @return unknown + */ +function add_option_update_handler( $option_group, $option_name, $sanitize_callback = '' ) { + _deprecated_function( __FUNCTION__, '3.0', 'register_setting()' ); + return register_setting( $option_group, $option_name, $sanitize_callback ); +} + +/** + * Unregister a setting + * + * @since 2.7.0 + * @deprecated 3.0.0 + * @deprecated Use unregister_setting() + * @see unregister_setting() + * + * @param unknown_type $option_group + * @param unknown_type $option_name + * @param unknown_type $sanitize_callback + * @return unknown + */ +function remove_option_update_handler( $option_group, $option_name, $sanitize_callback = '' ) { + _deprecated_function( __FUNCTION__, '3.0', 'unregister_setting()' ); + return unregister_setting( $option_group, $option_name, $sanitize_callback ); +} + +/** + * Determines the language to use for CodePress syntax highlighting. + * + * @since 2.8.0 + * @deprecated 3.0.0 + * + * @param string $filename +**/ +function codepress_get_lang( $filename ) { + _deprecated_function( __FUNCTION__, '3.0' ); + return; +} + +/** + * Adds Javascript required to make CodePress work on the theme/plugin editors. + * + * @since 2.8.0 + * @deprecated 3.0.0 +**/ +function codepress_footer_js() { + _deprecated_function( __FUNCTION__, '3.0' ); + return; +} + +/** + * Determine whether to use CodePress. + * + * @since 2.8.0 + * @deprecated 3.0.0 +**/ +function use_codepress() { + _deprecated_function( __FUNCTION__, '3.0' ); + return; +} + +/** + * @deprecated 3.1.0 + * + * @return array List of user IDs. + */ +function get_author_user_ids() { + _deprecated_function( __FUNCTION__, '3.1', 'get_users()' ); + + global $wpdb; + if ( !is_multisite() ) + $level_key = $wpdb->get_blog_prefix() . 'user_level'; + else + $level_key = $wpdb->get_blog_prefix() . 'capabilities'; // wpmu site admins don't have user_levels + + return $wpdb->get_col( $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s AND meta_value != '0'", $level_key) ); +} + +/** + * @deprecated 3.1.0 + * + * @param int $user_id User ID. + * @return array|bool List of editable authors. False if no editable users. + */ +function get_editable_authors( $user_id ) { + _deprecated_function( __FUNCTION__, '3.1', 'get_users()' ); + + global $wpdb; + + $editable = get_editable_user_ids( $user_id ); + + if ( !$editable ) { + return false; + } else { + $editable = join(',', $editable); + $authors = $wpdb->get_results( "SELECT * FROM $wpdb->users WHERE ID IN ($editable) ORDER BY display_name" ); + } + + return apply_filters('get_editable_authors', $authors); +} + +/** + * @deprecated 3.1.0 + * + * @param int $user_id User ID. + * @param bool $exclude_zeros Optional, default is true. Whether to exclude zeros. + * @return unknown + */ +function get_editable_user_ids( $user_id, $exclude_zeros = true, $post_type = 'post' ) { + _deprecated_function( __FUNCTION__, '3.1', 'get_users()' ); + + global $wpdb; + + if ( ! $user = get_userdata( $user_id ) ) + return array(); + $post_type_obj = get_post_type_object($post_type); + + if ( ! $user->has_cap($post_type_obj->cap->edit_others_posts) ) { + if ( $user->has_cap($post_type_obj->cap->edit_posts) || ! $exclude_zeros ) + return array($user->ID); + else + return array(); + } + + if ( !is_multisite() ) + $level_key = $wpdb->get_blog_prefix() . 'user_level'; + else + $level_key = $wpdb->get_blog_prefix() . 'capabilities'; // wpmu site admins don't have user_levels + + $query = $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s", $level_key); + if ( $exclude_zeros ) + $query .= " AND meta_value != '0'"; + + return $wpdb->get_col( $query ); +} + +/** + * @deprecated 3.1.0 + */ +function get_nonauthor_user_ids() { + _deprecated_function( __FUNCTION__, '3.1', 'get_users()' ); + + global $wpdb; + + if ( !is_multisite() ) + $level_key = $wpdb->get_blog_prefix() . 'user_level'; + else + $level_key = $wpdb->get_blog_prefix() . 'capabilities'; // wpmu site admins don't have user_levels + + return $wpdb->get_col( $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s AND meta_value = '0'", $level_key) ); +} + +if ( !class_exists('WP_User_Search') ) : +/** + * WordPress User Search class. + * + * @since 2.1.0 + * @deprecated 3.1.0 + */ +class WP_User_Search { + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var unknown_type + */ + var $results; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var unknown_type + */ + var $search_term; + + /** + * Page number. + * + * @since 2.1.0 + * @access private + * @var int + */ + var $page; + + /** + * Role name that users have. + * + * @since 2.5.0 + * @access private + * @var string + */ + var $role; + + /** + * Raw page number. + * + * @since 2.1.0 + * @access private + * @var int|bool + */ + var $raw_page; + + /** + * Amount of users to display per page. + * + * @since 2.1.0 + * @access public + * @var int + */ + var $users_per_page = 50; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var unknown_type + */ + var $first_user; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var int + */ + var $last_user; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var string + */ + var $query_limit; + + /** + * {@internal Missing Description}} + * + * @since 3.0.0 + * @access private + * @var string + */ + var $query_orderby; + + /** + * {@internal Missing Description}} + * + * @since 3.0.0 + * @access private + * @var string + */ + var $query_from; + + /** + * {@internal Missing Description}} + * + * @since 3.0.0 + * @access private + * @var string + */ + var $query_where; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var int + */ + var $total_users_for_query = 0; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var bool + */ + var $too_many_total_users = false; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var unknown_type + */ + var $search_errors; + + /** + * {@internal Missing Description}} + * + * @since 2.7.0 + * @access private + * @var unknown_type + */ + var $paging_text; + + /** + * PHP4 Constructor - Sets up the object properties. + * + * @since 2.1.0 + * + * @param string $search_term Search terms string. + * @param int $page Optional. Page ID. + * @param string $role Role name. + * @return WP_User_Search + */ + function WP_User_Search ($search_term = '', $page = '', $role = '') { + _deprecated_function( __FUNCTION__, '3.1', 'WP_User_Query' ); + + $this->search_term = wp_unslash( $search_term ); + $this->raw_page = ( '' == $page ) ? false : (int) $page; + $this->page = (int) ( '' == $page ) ? 1 : $page; + $this->role = $role; + + $this->prepare_query(); + $this->query(); + $this->do_paging(); + } + + /** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * @access public + */ + function prepare_query() { + global $wpdb; + $this->first_user = ($this->page - 1) * $this->users_per_page; + + $this->query_limit = $wpdb->prepare(" LIMIT %d, %d", $this->first_user, $this->users_per_page); + $this->query_orderby = ' ORDER BY user_login'; + + $search_sql = ''; + if ( $this->search_term ) { + $searches = array(); + $search_sql = 'AND ('; + foreach ( array('user_login', 'user_nicename', 'user_email', 'user_url', 'display_name') as $col ) + $searches[] = $wpdb->prepare( $col . ' LIKE %s', '%' . like_escape($this->search_term) . '%' ); + $search_sql .= implode(' OR ', $searches); + $search_sql .= ')'; + } + + $this->query_from = " FROM $wpdb->users"; + $this->query_where = " WHERE 1=1 $search_sql"; + + if ( $this->role ) { + $this->query_from .= " INNER JOIN $wpdb->usermeta ON $wpdb->users.ID = $wpdb->usermeta.user_id"; + $this->query_where .= $wpdb->prepare(" AND $wpdb->usermeta.meta_key = '{$wpdb->prefix}capabilities' AND $wpdb->usermeta.meta_value LIKE %s", '%' . $this->role . '%'); + } elseif ( is_multisite() ) { + $level_key = $wpdb->prefix . 'capabilities'; // wpmu site admins don't have user_levels + $this->query_from .= ", $wpdb->usermeta"; + $this->query_where .= " AND $wpdb->users.ID = $wpdb->usermeta.user_id AND meta_key = '{$level_key}'"; + } + + do_action_ref_array( 'pre_user_search', array( &$this ) ); + } + + /** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * @access public + */ + function query() { + global $wpdb; + + $this->results = $wpdb->get_col("SELECT DISTINCT($wpdb->users.ID)" . $this->query_from . $this->query_where . $this->query_orderby . $this->query_limit); + + if ( $this->results ) + $this->total_users_for_query = $wpdb->get_var("SELECT COUNT(DISTINCT($wpdb->users.ID))" . $this->query_from . $this->query_where); // no limit + else + $this->search_errors = new WP_Error('no_matching_users_found', __('No matching users were found!')); + } + + /** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * @access public + */ + function prepare_vars_for_template_usage() {} + + /** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * @access public + */ + function do_paging() { + if ( $this->total_users_for_query > $this->users_per_page ) { // have to page the results + $args = array(); + if( ! empty($this->search_term) ) + $args['usersearch'] = urlencode($this->search_term); + if( ! empty($this->role) ) + $args['role'] = urlencode($this->role); + + $this->paging_text = paginate_links( array( + 'total' => ceil($this->total_users_for_query / $this->users_per_page), + 'current' => $this->page, + 'base' => 'users.php?%_%', + 'format' => 'userspage=%#%', + 'add_args' => $args + ) ); + if ( $this->paging_text ) { + $this->paging_text = sprintf( '' . __( 'Displaying %s–%s of %s' ) . '%s', + number_format_i18n( ( $this->page - 1 ) * $this->users_per_page + 1 ), + number_format_i18n( min( $this->page * $this->users_per_page, $this->total_users_for_query ) ), + number_format_i18n( $this->total_users_for_query ), + $this->paging_text + ); + } + } + } + + /** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * @access public + * + * @return unknown + */ + function get_results() { + return (array) $this->results; + } + + /** + * Displaying paging text. + * + * @see do_paging() Builds paging text. + * + * @since 2.1.0 + * @access public + */ + function page_links() { + echo $this->paging_text; + } + + /** + * Whether paging is enabled. + * + * @see do_paging() Builds paging text. + * + * @since 2.1.0 + * @access public + * + * @return bool + */ + function results_are_paged() { + if ( $this->paging_text ) + return true; + return false; + } + + /** + * Whether there are search terms. + * + * @since 2.1.0 + * @access public + * + * @return bool + */ + function is_search() { + if ( $this->search_term ) + return true; + return false; + } +} +endif; + +/** + * Retrieve editable posts from other users. + * + * @deprecated 3.1.0 + * + * @param int $user_id User ID to not retrieve posts from. + * @param string $type Optional, defaults to 'any'. Post type to retrieve, can be 'draft' or 'pending'. + * @return array List of posts from others. + */ +function get_others_unpublished_posts($user_id, $type='any') { + _deprecated_function( __FUNCTION__, '3.1' ); + + global $wpdb; + + $editable = get_editable_user_ids( $user_id ); + + if ( in_array($type, array('draft', 'pending')) ) + $type_sql = " post_status = '$type' "; + else + $type_sql = " ( post_status = 'draft' OR post_status = 'pending' ) "; + + $dir = ( 'pending' == $type ) ? 'ASC' : 'DESC'; + + if ( !$editable ) { + $other_unpubs = ''; + } else { + $editable = join(',', $editable); + $other_unpubs = $wpdb->get_results( $wpdb->prepare("SELECT ID, post_title, post_author FROM $wpdb->posts WHERE post_type = 'post' AND $type_sql AND post_author IN ($editable) AND post_author != %d ORDER BY post_modified $dir", $user_id) ); + } + + return apply_filters('get_others_drafts', $other_unpubs); +} + +/** + * Retrieve drafts from other users. + * + * @deprecated 3.1.0 + * + * @param int $user_id User ID. + * @return array List of drafts from other users. + */ +function get_others_drafts($user_id) { + _deprecated_function( __FUNCTION__, '3.1' ); + + return get_others_unpublished_posts($user_id, 'draft'); +} + +/** + * Retrieve pending review posts from other users. + * + * @deprecated 3.1.0 + * + * @param int $user_id User ID. + * @return array List of posts with pending review post type from other users. + */ +function get_others_pending($user_id) { + _deprecated_function( __FUNCTION__, '3.1' ); + + return get_others_unpublished_posts($user_id, 'pending'); +} + +/** + * Output the QuickPress dashboard widget. + * + * @since 3.0.0 + * @deprecated 3.2.0 + * @deprecated Use wp_dashboard_quick_press() + * @see wp_dashboard_quick_press() + */ +function wp_dashboard_quick_press_output() { + _deprecated_function( __FUNCTION__, '3.2', 'wp_dashboard_quick_press()' ); + wp_dashboard_quick_press(); +} + +/** + * @since 2.7.0 + * @deprecated 3.3.0 + * @deprecated Use wp_editor() + * @see wp_editor() + */ +function wp_tiny_mce( $teeny = false, $settings = false ) { + _deprecated_function( __FUNCTION__, '3.3', 'wp_editor()' ); + + static $num = 1; + + if ( ! class_exists('_WP_Editors' ) ) + require_once( ABSPATH . WPINC . '/class-wp-editor.php' ); + + $editor_id = 'content' . $num++; + + $set = array( + 'teeny' => $teeny, + 'tinymce' => $settings ? $settings : true, + 'quicktags' => false + ); + + $set = _WP_Editors::parse_settings($editor_id, $set); + _WP_Editors::editor_settings($editor_id, $set); +} + +/** + * @deprecated 3.3.0 + * @deprecated Use wp_editor() + * @see wp_editor() + */ +function wp_preload_dialogs() { + _deprecated_function( __FUNCTION__, '3.3', 'wp_editor()' ); +} + +/** + * @deprecated 3.3.0 + * @deprecated Use wp_editor() + * @see wp_editor() + */ +function wp_print_editor_js() { + _deprecated_function( __FUNCTION__, '3.3', 'wp_editor()' ); +} + +/** + * @deprecated 3.3.0 + * @deprecated Use wp_editor() + * @see wp_editor() + */ +function wp_quicktags() { + _deprecated_function( __FUNCTION__, '3.3', 'wp_editor()' ); +} + +/** + * Returns the screen layout options. + * + * @since 2.8.0 + * @deprecated 3.3.0 + * @deprecated Use $current_screen->render_screen_layout() + * @see WP_Screen::render_screen_layout() + */ +function screen_layout( $screen ) { + _deprecated_function( __FUNCTION__, '3.3', '$current_screen->render_screen_layout()' ); + + $current_screen = get_current_screen(); + + if ( ! $current_screen ) + return ''; + + ob_start(); + $current_screen->render_screen_layout(); + return ob_get_clean(); +} + +/** + * Returns the screen's per-page options. + * + * @since 2.8.0 + * @deprecated 3.3.0 + * @deprecated Use $current_screen->render_per_page_options() + * @see WP_Screen::render_per_page_options() + */ +function screen_options( $screen ) { + _deprecated_function( __FUNCTION__, '3.3', '$current_screen->render_per_page_options()' ); + + $current_screen = get_current_screen(); + + if ( ! $current_screen ) + return ''; + + ob_start(); + $current_screen->render_per_page_options(); + return ob_get_clean(); +} + +/** + * Renders the screen's help. + * + * @since 2.7.0 + * @deprecated 3.3.0 + * @deprecated Use $current_screen->render_screen_meta() + * @see WP_Screen::render_screen_meta() + */ +function screen_meta( $screen ) { + $current_screen = get_current_screen(); + $current_screen->render_screen_meta(); +} + +/** + * Favorite actions were deprecated in version 3.2. Use the admin bar instead. + * + * @since 2.7.0 + * @deprecated 3.2.0 + */ +function favorite_actions() { + _deprecated_function( __FUNCTION__, '3.2', 'WP_Admin_Bar' ); +} + +function media_upload_image() { + __deprecated_function( __FUNCTION__, '3.3', 'wp_media_upload_handler()' ); + return wp_media_upload_handler(); +} + +function media_upload_audio() { + __deprecated_function( __FUNCTION__, '3.3', 'wp_media_upload_handler()' ); + return wp_media_upload_handler(); +} + +function media_upload_video() { + __deprecated_function( __FUNCTION__, '3.3', 'wp_media_upload_handler()' ); + return wp_media_upload_handler(); +} + +function media_upload_file() { + __deprecated_function( __FUNCTION__, '3.3', 'wp_media_upload_handler()' ); + return wp_media_upload_handler(); +} + +function type_url_form_image() { + __deprecated_function( __FUNCTION__, '3.3', "wp_media_insert_url_form('image')" ); + return wp_media_insert_url_form( 'image' ); +} + +function type_url_form_audio() { + __deprecated_function( __FUNCTION__, '3.3', "wp_media_insert_url_form('audio')" ); + return wp_media_insert_url_form( 'audio' ); +} + +function type_url_form_video() { + __deprecated_function( __FUNCTION__, '3.3', "wp_media_insert_url_form('video')" ); + return wp_media_insert_url_form( 'video' ); +} + +function type_url_form_file() { + __deprecated_function( __FUNCTION__, '3.3', "wp_media_insert_url_form('file')" ); + return wp_media_insert_url_form( 'file' ); +} + +/** + * Add contextual help text for a page. + * + * Creates an 'Overview' help tab. + * + * @since 2.7.0 + * @deprecated 3.3.0 + * @deprecated Use get_current_screen()->add_help_tab() + * @see WP_Screen + * + * @param string $screen The handle for the screen to add help to. This is usually the hook name returned by the add_*_page() functions. + * @param string $help The content of an 'Overview' help tab. + */ +function add_contextual_help( $screen, $help ) { + _deprecated_function( __FUNCTION__, '3.3', 'get_current_screen()->add_help_tab()' ); + + if ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + WP_Screen::add_old_compat_help( $screen, $help ); +} + +/** + * Get the allowed themes for the current blog. + * + * @since 3.0.0 + * @deprecated 3.4.0 + * @deprecated Use wp_get_themes() + * @see wp_get_themes() + * + * @return array $themes Array of allowed themes. + */ +function get_allowed_themes() { + _deprecated_function( __FUNCTION__, '3.4', "wp_get_themes( array( 'allowed' => true ) )" ); + + $themes = wp_get_themes( array( 'allowed' => true ) ); + + $wp_themes = array(); + foreach ( $themes as $theme ) { + $wp_themes[ $theme->get('Name') ] = $theme; + } + + return $wp_themes; +} + +/** + * {@internal Missing Short Description}} + * + * @since 1.5.0 + * @deprecated 3.4.0 + * + * @return unknown + */ +function get_broken_themes() { + _deprecated_function( __FUNCTION__, '3.4', "wp_get_themes( array( 'errors' => true )" ); + + $themes = wp_get_themes( array( 'errors' => true ) ); + $broken = array(); + foreach ( $themes as $theme ) { + $name = $theme->get('Name'); + $broken[ $name ] = array( + 'Name' => $name, + 'Title' => $name, + 'Description' => $theme->errors()->get_error_message(), + ); + } + return $broken; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.0.0 + * @deprecated 3.4.0 + * + * @return unknown + */ +function current_theme_info() { + _deprecated_function( __FUNCTION__, '3.4', 'wp_get_theme()' ); + + return wp_get_theme(); +} + +/** + * This was once used to display an 'Insert into Post' button. Now it is deprecated and stubbed. + * + * @deprecated 3.5.0 + */ +function _insert_into_post_button( $type ) { + _deprecated_function( __FUNCTION__, '3.5' ); +} + +/** + * This was once used to display a media button. Now it is deprecated and stubbed. + * + * @deprecated 3.5.0 + */ +function _media_button($title, $icon, $type, $id) { + _deprecated_function( __FUNCTION__, '3.5' ); +} + +/** + * Get an existing post and format it for editing. + * + * @since 2.0.0 + * @deprecated 3.5.0 + * + * @param int $id + * @return object + */ +function get_post_to_edit( $id ) { + _deprecated_function( __FUNCTION__, '3.5', 'get_post()' ); + + return get_post( $id, OBJECT, 'edit' ); +} + +/** + * Get the default page information to use. + * + * @since 2.5.0 + * @deprecated 3.5.0 + * @deprecated Use get_default_post_to_edit() + * + * @return WP_Post Post object containing all the default post data as attributes + */ +function get_default_page_to_edit() { + _deprecated_function( __FUNCTION__, '3.5', "get_default_post_to_edit( 'page' )" ); + + $page = get_default_post_to_edit(); + $page->post_type = 'page'; + return $page; +} + +/** + * This was once used to create a thumbnail from an Image given a maximum side size. + * + * @since 1.2.0 + * @deprecated 3.5.0 + * @deprecated Use image_resize() + * @see image_resize() + * + * @param mixed $file Filename of the original image, Or attachment id. + * @param int $max_side Maximum length of a single side for the thumbnail. + * @param mixed $deprecated Never used. + * @return string Thumbnail path on success, Error string on failure. + */ +function wp_create_thumbnail( $file, $max_side, $deprecated = '' ) { + _deprecated_function( __FUNCTION__, '3.5', 'image_resize()' ); + return apply_filters( 'wp_create_thumbnail', image_resize( $file, $max_side, $max_side ) ); +} + +/** + * This was once used to display a metabox for the nav menu theme locations. + * + * Deprecated in favor of a 'Manage Locations' tab added to nav menus management screen. + * + * @since 3.0.0 + * @deprecated 3.6.0 + */ +function wp_nav_menu_locations_meta_box() { + _deprecated_function( __FUNCTION__, '3.6' ); +} + +/** + * This was once used to kick-off the Core Updater. + * + * Deprecated in favor of instantating a Core_Upgrader instance directly, + * and calling the 'upgrade' method. + * + * @since 2.7.0 + * @deprecated 3.7.0 + * @see Core_Upgrader + */ +function wp_update_core($current, $feedback = '') { + _deprecated_function( __FUNCTION__, '3.7', 'new Core_Upgrader();' ); + + if ( !empty($feedback) ) + add_filter('update_feedback', $feedback); + + include ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + $upgrader = new Core_Upgrader(); + return $upgrader->upgrade($current); + +} + +/** + * This was once used to kick-off the Plugin Updater. + * + * Deprecated in favor of instantating a Plugin_Upgrader instance directly, + * and calling the 'upgrade' method. + * Unused since 2.8.0. + * + * @since 2.5.0 + * @deprecated 3.7.0 + * @see Plugin_Upgrader + */ +function wp_update_plugin($plugin, $feedback = '') { + _deprecated_function( __FUNCTION__, '3.7', 'new Plugin_Upgrader();' ); + + if ( !empty($feedback) ) + add_filter('update_feedback', $feedback); + + include ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + $upgrader = new Plugin_Upgrader(); + return $upgrader->upgrade($plugin); +} + +/** + * This was once used to kick-off the Theme Updater. + * + * Deprecated in favor of instantating a Theme_Upgrader instance directly, + * and calling the 'upgrade' method. + * Unused since 2.8.0. + * + * @since 2.7.0 + * @deprecated 3.7.0 + * @see Theme_Upgrader + */ +function wp_update_theme($theme, $feedback = '') { + _deprecated_function( __FUNCTION__, '3.7', 'new Theme_Upgrader();' ); + + if ( !empty($feedback) ) + add_filter('update_feedback', $feedback); + + include ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + $upgrader = new Theme_Upgrader(); + return $upgrader->upgrade($theme); +} + +/** + * This was once used to display attachment links. Now it is deprecated and stubbed. + * + * {@internal Missing Short Description}} + * + * @since 2.0.0 + * @deprecated 3.7.0 + * + * @param unknown_type $id + * @return unknown + */ +function the_attachment_links( $id = false ) { + _deprecated_function( __FUNCTION__, '3.7' ); +} + +/**#@+ + * Displays a screen icon. + * + * @since 2.7.0 + * @since 3.8.0 Screen icons are no longer used in WordPress. This function no longer produces output. + * @deprecated 3.8.0 + */ +function screen_icon() { + echo get_screen_icon(); +} +function get_screen_icon() { + return ''; +} +/**#@-*/ + +/**#@+ + * Deprecated dashboard widget controls. + * + * @since 2.5.0 + * @deprecated 3.8.0 + */ +function wp_dashboard_incoming_links_output() {} +function wp_dashboard_secondary_output() {} +/**#@-*/ + +/**#@+ + * Deprecated dashboard widget controls. + * + * @since 2.7.0 + * @deprecated 3.8.0 + */ +function wp_dashboard_incoming_links() {} +function wp_dashboard_incoming_links_control() {} +function wp_dashboard_plugins() {} +function wp_dashboard_primary_control() {} +function wp_dashboard_recent_comments_control() {} +function wp_dashboard_secondary() {} +function wp_dashboard_secondary_control() {} +/**#@-*/ diff --git a/src/wp-admin/includes/export.php b/src/wp-admin/includes/export.php new file mode 100644 index 0000000..a7f2099 --- /dev/null +++ b/src/wp-admin/includes/export.php @@ -0,0 +1,437 @@ + 'all', 'author' => false, 'category' => false, + 'start_date' => false, 'end_date' => false, 'status' => false, + ); + $args = wp_parse_args( $args, $defaults ); + + do_action( 'export_wp', $args ); + + $sitename = sanitize_key( get_bloginfo( 'name' ) ); + if ( ! empty($sitename) ) $sitename .= '.'; + $filename = $sitename . 'wordpress.' . date( 'Y-m-d' ) . '.xml'; + + header( 'Content-Description: File Transfer' ); + header( 'Content-Disposition: attachment; filename=' . $filename ); + header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ), true ); + + if ( 'all' != $args['content'] && post_type_exists( $args['content'] ) ) { + $ptype = get_post_type_object( $args['content'] ); + if ( ! $ptype->can_export ) + $args['content'] = 'post'; + + $where = $wpdb->prepare( "{$wpdb->posts}.post_type = %s", $args['content'] ); + } else { + $post_types = get_post_types( array( 'can_export' => true ) ); + $esses = array_fill( 0, count($post_types), '%s' ); + $where = $wpdb->prepare( "{$wpdb->posts}.post_type IN (" . implode( ',', $esses ) . ')', $post_types ); + } + + if ( $args['status'] && ( 'post' == $args['content'] || 'page' == $args['content'] ) ) + $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_status = %s", $args['status'] ); + else + $where .= " AND {$wpdb->posts}.post_status != 'auto-draft'"; + + $join = ''; + if ( $args['category'] && 'post' == $args['content'] ) { + if ( $term = term_exists( $args['category'], 'category' ) ) { + $join = "INNER JOIN {$wpdb->term_relationships} ON ({$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id)"; + $where .= $wpdb->prepare( " AND {$wpdb->term_relationships}.term_taxonomy_id = %d", $term['term_taxonomy_id'] ); + } + } + + if ( 'post' == $args['content'] || 'page' == $args['content'] ) { + if ( $args['author'] ) + $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_author = %d", $args['author'] ); + + if ( $args['start_date'] ) + $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_date >= %s", date( 'Y-m-d', strtotime($args['start_date']) ) ); + + if ( $args['end_date'] ) + $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_date < %s", date( 'Y-m-d', strtotime('+1 month', strtotime($args['end_date'])) ) ); + } + + // grab a snapshot of post IDs, just in case it changes during the export + $post_ids = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} $join WHERE $where" ); + + // get the requested terms ready, empty unless posts filtered by category or all content + $cats = $tags = $terms = array(); + if ( isset( $term ) && $term ) { + $cat = get_term( $term['term_id'], 'category' ); + $cats = array( $cat->term_id => $cat ); + unset( $term, $cat ); + } else if ( 'all' == $args['content'] ) { + $categories = (array) get_categories( array( 'get' => 'all' ) ); + $tags = (array) get_tags( array( 'get' => 'all' ) ); + + $custom_taxonomies = get_taxonomies( array( '_builtin' => false ) ); + $custom_terms = (array) get_terms( $custom_taxonomies, array( 'get' => 'all' ) ); + + // put categories in order with no child going before its parent + while ( $cat = array_shift( $categories ) ) { + if ( $cat->parent == 0 || isset( $cats[$cat->parent] ) ) + $cats[$cat->term_id] = $cat; + else + $categories[] = $cat; + } + + // put terms in order with no child going before its parent + while ( $t = array_shift( $custom_terms ) ) { + if ( $t->parent == 0 || isset( $terms[$t->parent] ) ) + $terms[$t->term_id] = $t; + else + $custom_terms[] = $t; + } + + unset( $categories, $custom_taxonomies, $custom_terms ); + } + + /** + * Wrap given string in XML CDATA tag. + * + * @since 2.1.0 + * + * @param string $str String to wrap in XML CDATA tag. + * @return string + */ + function wxr_cdata( $str ) { + if ( seems_utf8( $str ) == false ) + $str = utf8_encode( $str ); + + // $str = ent2ncr(esc_html($str)); + $str = '', ']]]]>', $str ) . ']]>'; + + return $str; + } + + /** + * Return the URL of the site + * + * @since 2.5.0 + * + * @return string Site URL. + */ + function wxr_site_url() { + // ms: the base url + if ( is_multisite() ) + return network_home_url(); + // wp: the blog url + else + return get_bloginfo_rss( 'url' ); + } + + /** + * Output a cat_name XML tag from a given category object + * + * @since 2.1.0 + * + * @param object $category Category Object + */ + function wxr_cat_name( $category ) { + if ( empty( $category->name ) ) + return; + + echo '' . wxr_cdata( $category->name ) . ''; + } + + /** + * Output a category_description XML tag from a given category object + * + * @since 2.1.0 + * + * @param object $category Category Object + */ + function wxr_category_description( $category ) { + if ( empty( $category->description ) ) + return; + + echo '' . wxr_cdata( $category->description ) . ''; + } + + /** + * Output a tag_name XML tag from a given tag object + * + * @since 2.3.0 + * + * @param object $tag Tag Object + */ + function wxr_tag_name( $tag ) { + if ( empty( $tag->name ) ) + return; + + echo '' . wxr_cdata( $tag->name ) . ''; + } + + /** + * Output a tag_description XML tag from a given tag object + * + * @since 2.3.0 + * + * @param object $tag Tag Object + */ + function wxr_tag_description( $tag ) { + if ( empty( $tag->description ) ) + return; + + echo '' . wxr_cdata( $tag->description ) . ''; + } + + /** + * Output a term_name XML tag from a given term object + * + * @since 2.9.0 + * + * @param object $term Term Object + */ + function wxr_term_name( $term ) { + if ( empty( $term->name ) ) + return; + + echo '' . wxr_cdata( $term->name ) . ''; + } + + /** + * Output a term_description XML tag from a given term object + * + * @since 2.9.0 + * + * @param object $term Term Object + */ + function wxr_term_description( $term ) { + if ( empty( $term->description ) ) + return; + + echo '' . wxr_cdata( $term->description ) . ''; + } + + /** + * Output list of authors with posts + * + * @since 3.1.0 + */ + function wxr_authors_list() { + global $wpdb; + + $authors = array(); + $results = $wpdb->get_results( "SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_status != 'auto-draft'" ); + foreach ( (array) $results as $result ) + $authors[] = get_userdata( $result->post_author ); + + $authors = array_filter( $authors ); + + foreach ( $authors as $author ) { + echo "\t"; + echo '' . $author->ID . ''; + echo '' . $author->user_login . ''; + echo '' . $author->user_email . ''; + echo '' . wxr_cdata( $author->display_name ) . ''; + echo '' . wxr_cdata( $author->user_firstname ) . ''; + echo '' . wxr_cdata( $author->user_lastname ) . ''; + echo "\n"; + } + } + + /** + * Ouput all navigation menu terms + * + * @since 3.1.0 + */ + function wxr_nav_menu_terms() { + $nav_menus = wp_get_nav_menus(); + if ( empty( $nav_menus ) || ! is_array( $nav_menus ) ) + return; + + foreach ( $nav_menus as $menu ) { + echo "\t{$menu->term_id}nav_menu{$menu->slug}"; + wxr_term_name( $menu ); + echo "\n"; + } + } + + /** + * Output list of taxonomy terms, in XML tag format, associated with a post + * + * @since 2.3.0 + */ + function wxr_post_taxonomy() { + $post = get_post(); + + $taxonomies = get_object_taxonomies( $post->post_type ); + if ( empty( $taxonomies ) ) + return; + $terms = wp_get_object_terms( $post->ID, $taxonomies ); + + foreach ( (array) $terms as $term ) { + echo "\t\ttaxonomy}\" nicename=\"{$term->slug}\">" . wxr_cdata( $term->name ) . "\n"; + } + } + + function wxr_filter_postmeta( $return_me, $meta_key ) { + if ( '_edit_lock' == $meta_key ) + $return_me = true; + return $return_me; + } + add_filter( 'wxr_export_skip_postmeta', 'wxr_filter_postmeta', 10, 2 ); + + echo '\n"; + + ?> + + + + + + + + + + + + + + + + + + + + + + <?php bloginfo_rss( 'name' ); ?> + + + + + + + + + + + + term_id ?>slug; ?>parent ? $cats[$c->parent]->slug : ''; ?> + + + term_id ?>slug; ?> + + + term_id ?>taxonomy; ?>slug; ?>parent ? $terms[$t->parent]->slug : ''; ?> + + + + + +in_the_loop = true; // Fake being in the loop. + + // fetch 20 posts at a time rather than loading the entire table into memory + while ( $next_posts = array_splice( $post_ids, 0, 20 ) ) { + $where = 'WHERE ID IN (' . join( ',', $next_posts ) . ')'; + $posts = $wpdb->get_results( "SELECT * FROM {$wpdb->posts} $where" ); + + // Begin Loop + foreach ( $posts as $post ) { + setup_postdata( $post ); + $is_sticky = is_sticky( $post->ID ) ? 1 : 0; +?> + + + <?php echo apply_filters( 'the_title_rss', $post->post_title ); ?> + + + + + + post_content ) ); ?> + post_excerpt ) ); ?> + ID; ?> + post_date; ?> + post_date_gmt; ?> + comment_status; ?> + ping_status; ?> + post_name; ?> + post_status; ?> + post_parent; ?> + menu_order; ?> + post_type; ?> + post_password; ?> + +post_type == 'attachment' ) : ?> + ID ); ?> + + +get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE post_id = %d", $post->ID ) ); + foreach ( $postmeta as $meta ) : + if ( apply_filters( 'wxr_export_skip_postmeta', false, $meta->meta_key, $meta ) ) + continue; + ?> + + meta_key; ?> + meta_value ); ?> + + +get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved <> 'spam'", $post->ID ) ); + foreach ( $comments as $c ) : ?> + + comment_ID; ?> + comment_author ); ?> + comment_author_email; ?> + comment_author_url ); ?> + comment_author_IP; ?> + comment_date; ?> + comment_date_gmt; ?> + comment_content ) ?> + comment_approved; ?> + comment_type; ?> + comment_parent; ?> + user_id; ?> +get_results( $wpdb->prepare( "SELECT * FROM $wpdb->commentmeta WHERE comment_id = %d", $c->comment_ID ) ); + foreach ( $c_meta as $meta ) : ?> + + meta_key; ?> + meta_value ); ?> + + + + + + + + + __( 'Main Index Template' ), + 'style.css' => __( 'Stylesheet' ), + 'editor-style.css' => __( 'Visual Editor Stylesheet' ), + 'editor-style-rtl.css' => __( 'Visual Editor RTL Stylesheet' ), + 'rtl.css' => __( 'RTL Stylesheet' ), + 'comments.php' => __( 'Comments' ), + 'comments-popup.php' => __( 'Popup Comments' ), + 'footer.php' => __( 'Footer' ), + 'header.php' => __( 'Header' ), + 'sidebar.php' => __( 'Sidebar' ), + 'archive.php' => __( 'Archives' ), + 'author.php' => __( 'Author Template' ), + 'tag.php' => __( 'Tag Template' ), + 'category.php' => __( 'Category Template' ), + 'page.php' => __( 'Page Template' ), + 'search.php' => __( 'Search Results' ), + 'searchform.php' => __( 'Search Form' ), + 'single.php' => __( 'Single Post' ), + '404.php' => __( '404 Template' ), + 'link.php' => __( 'Links Template' ), + 'functions.php' => __( 'Theme Functions' ), + 'attachment.php' => __( 'Attachment Template' ), + 'image.php' => __('Image Attachment Template'), + 'video.php' => __('Video Attachment Template'), + 'audio.php' => __('Audio Attachment Template'), + 'application.php' => __('Application Attachment Template'), + 'my-hacks.php' => __( 'my-hacks.php (legacy hacks support)' ), + '.htaccess' => __( '.htaccess (for rewrite rules )' ), + // Deprecated files + 'wp-layout.css' => __( 'Stylesheet' ), + 'wp-comments.php' => __( 'Comments Template' ), + 'wp-comments-popup.php' => __( 'Popup Comments Template' ), +); + +/** + * Get the description for standard WordPress theme files and other various standard + * WordPress files + * + * @since 1.5.0 + * + * @uses _cleanup_header_comment + * @uses $wp_file_descriptions + * @param string $file Filesystem path or filename + * @return string Description of file from $wp_file_descriptions or basename of $file if description doesn't exist + */ +function get_file_description( $file ) { + global $wp_file_descriptions; + + if ( isset( $wp_file_descriptions[basename( $file )] ) ) { + return $wp_file_descriptions[basename( $file )]; + } + elseif ( file_exists( $file ) && is_file( $file ) ) { + $template_data = implode( '', file( $file ) ); + if ( preg_match( '|Template Name:(.*)$|mi', $template_data, $name )) + return sprintf( __( '%s Page Template' ), _cleanup_header_comment($name[1]) ); + } + + return trim( basename( $file ) ); +} + +/** + * Get the absolute filesystem path to the root of the WordPress installation + * + * @since 1.5.0 + * + * @uses get_option + * @return string Full filesystem path to the root of the WordPress installation + */ +function get_home_path() { + $home = get_option( 'home' ); + $siteurl = get_option( 'siteurl' ); + if ( ! empty( $home ) && 0 !== strcasecmp( $home, $siteurl ) ) { + $wp_path_rel_to_home = str_ireplace( $home, '', $siteurl ); /* $siteurl - $home */ + $pos = strripos( str_replace( '\\', '/', $_SERVER['SCRIPT_FILENAME'] ), trailingslashit( $wp_path_rel_to_home ) ); + $home_path = substr( $_SERVER['SCRIPT_FILENAME'], 0, $pos ); + $home_path = trailingslashit( $home_path ); + } else { + $home_path = ABSPATH; + } + + return str_replace( '\\', '/', $home_path ); +} + +/** + * Returns a listing of all files in the specified folder and all subdirectories up to 100 levels deep. + * The depth of the recursiveness can be controlled by the $levels param. + * + * @since 2.6.0 + * + * @param string $folder Full path to folder + * @param int $levels (optional) Levels of folders to follow, Default: 100 (PHP Loop limit). + * @return bool|array False on failure, Else array of files + */ +function list_files( $folder = '', $levels = 100 ) { + if ( empty($folder) ) + return false; + + if ( ! $levels ) + return false; + + $files = array(); + if ( $dir = @opendir( $folder ) ) { + while (($file = readdir( $dir ) ) !== false ) { + if ( in_array($file, array('.', '..') ) ) + continue; + if ( is_dir( $folder . '/' . $file ) ) { + $files2 = list_files( $folder . '/' . $file, $levels - 1); + if ( $files2 ) + $files = array_merge($files, $files2 ); + else + $files[] = $folder . '/' . $file . '/'; + } else { + $files[] = $folder . '/' . $file; + } + } + } + @closedir( $dir ); + return $files; +} + +/** + * Returns a filename of a Temporary unique file. + * Please note that the calling function must unlink() this itself. + * + * The filename is based off the passed parameter or defaults to the current unix timestamp, + * while the directory can either be passed as well, or by leaving it blank, default to a writable temporary directory. + * + * @since 2.6.0 + * + * @param string $filename (optional) Filename to base the Unique file off + * @param string $dir (optional) Directory to store the file in + * @return string a writable filename + */ +function wp_tempnam($filename = '', $dir = '') { + if ( empty($dir) ) + $dir = get_temp_dir(); + $filename = basename($filename); + if ( empty($filename) ) + $filename = time(); + + $filename = preg_replace('|\..*$|', '.tmp', $filename); + $filename = $dir . wp_unique_filename($dir, $filename); + touch($filename); + return $filename; +} + +/** + * Make sure that the file that was requested to edit, is allowed to be edited + * + * Function will die if if you are not allowed to edit the file + * + * @since 1.5.0 + * + * @uses wp_die + * @uses validate_file + * @param string $file file the users is attempting to edit + * @param array $allowed_files Array of allowed files to edit, $file must match an entry exactly + * @return null + */ +function validate_file_to_edit( $file, $allowed_files = '' ) { + $code = validate_file( $file, $allowed_files ); + + if (!$code ) + return $file; + + switch ( $code ) { + case 1 : + wp_die( __('Sorry, can’t edit files with “..” in the name. If you are trying to edit a file in your WordPress home directory, you can just type the name of the file in.' )); + + //case 2 : + // wp_die( __('Sorry, can’t call files with their real path.' )); + + case 3 : + wp_die( __('Sorry, that file cannot be edited.' )); + } +} + +/** + * Handle PHP uploads in WordPress, sanitizing file names, checking extensions for mime type, + * and moving the file to the appropriate directory within the uploads directory. + * + * @since 2.0 + * + * @uses wp_handle_upload_error + * @uses apply_filters + * @uses is_multisite + * @uses wp_check_filetype_and_ext + * @uses current_user_can + * @uses wp_upload_dir + * @uses wp_unique_filename + * @uses delete_transient + * @param array $file Reference to a single element of $_FILES. Call the function once for each uploaded file. + * @param array $overrides Optional. An associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ). + * @param string $time Optional. Time formatted in 'yyyy/mm'. + * @return array On success, returns an associative array of file attributes. On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ). + */ +function wp_handle_upload( &$file, $overrides = false, $time = null ) { + // The default error handler. + if ( ! function_exists( 'wp_handle_upload_error' ) ) { + function wp_handle_upload_error( &$file, $message ) { + return array( 'error'=>$message ); + } + } + + $file = apply_filters( 'wp_handle_upload_prefilter', $file ); + + // You may define your own function and pass the name in $overrides['upload_error_handler'] + $upload_error_handler = 'wp_handle_upload_error'; + + // You may have had one or more 'wp_handle_upload_prefilter' functions error out the file. Handle that gracefully. + if ( isset( $file['error'] ) && !is_numeric( $file['error'] ) && $file['error'] ) + return $upload_error_handler( $file, $file['error'] ); + + // You may define your own function and pass the name in $overrides['unique_filename_callback'] + $unique_filename_callback = null; + + // $_POST['action'] must be set and its value must equal $overrides['action'] or this: + $action = 'wp_handle_upload'; + + // Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error']. + $upload_error_strings = array( false, + __( "The uploaded file exceeds the upload_max_filesize directive in php.ini." ), + __( "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." ), + __( "The uploaded file was only partially uploaded." ), + __( "No file was uploaded." ), + '', + __( "Missing a temporary folder." ), + __( "Failed to write file to disk." ), + __( "File upload stopped by extension." )); + + // All tests are on by default. Most can be turned off by $overrides[{test_name}] = false; + $test_form = true; + $test_size = true; + $test_upload = true; + + // If you override this, you must provide $ext and $type!!!! + $test_type = true; + $mimes = false; + + // Install user overrides. Did we mention that this voids your warranty? + if ( is_array( $overrides ) ) + extract( $overrides, EXTR_OVERWRITE ); + + // A correct form post will pass this test. + if ( $test_form && (!isset( $_POST['action'] ) || ($_POST['action'] != $action ) ) ) + return call_user_func($upload_error_handler, $file, __( 'Invalid form submission.' )); + + // A successful upload will pass this test. It makes no sense to override this one. + if ( $file['error'] > 0 ) + return call_user_func($upload_error_handler, $file, $upload_error_strings[$file['error']] ); + + // A non-empty file will pass this test. + if ( $test_size && !($file['size'] > 0 ) ) { + if ( is_multisite() ) + $error_msg = __( 'File is empty. Please upload something more substantial.' ); + else + $error_msg = __( 'File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini.' ); + return call_user_func($upload_error_handler, $file, $error_msg); + } + + // A properly uploaded file will pass this test. There should be no reason to override this one. + if ( $test_upload && ! @ is_uploaded_file( $file['tmp_name'] ) ) + return call_user_func($upload_error_handler, $file, __( 'Specified file failed upload test.' )); + + // A correct MIME type will pass this test. Override $mimes or use the upload_mimes filter. + if ( $test_type ) { + $wp_filetype = wp_check_filetype_and_ext( $file['tmp_name'], $file['name'], $mimes ); + + extract( $wp_filetype ); + + // Check to see if wp_check_filetype_and_ext() determined the filename was incorrect + if ( $proper_filename ) + $file['name'] = $proper_filename; + + if ( ( !$type || !$ext ) && !current_user_can( 'unfiltered_upload' ) ) + return call_user_func($upload_error_handler, $file, __( 'Sorry, this file type is not permitted for security reasons.' )); + + if ( !$ext ) + $ext = ltrim(strrchr($file['name'], '.'), '.'); + + if ( !$type ) + $type = $file['type']; + } else { + $type = ''; + } + + // A writable uploads dir will pass this test. Again, there's no point overriding this one. + if ( ! ( ( $uploads = wp_upload_dir($time) ) && false === $uploads['error'] ) ) + return call_user_func($upload_error_handler, $file, $uploads['error'] ); + + $filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback ); + + // Move the file to the uploads dir + $new_file = $uploads['path'] . "/$filename"; + if ( false === @ move_uploaded_file( $file['tmp_name'], $new_file ) ) { + if ( 0 === strpos( $uploads['basedir'], ABSPATH ) ) + $error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir']; + else + $error_path = basename( $uploads['basedir'] ) . $uploads['subdir']; + + return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $error_path ) ); + } + + // Set correct file permissions + $stat = stat( dirname( $new_file )); + $perms = $stat['mode'] & 0000666; + @ chmod( $new_file, $perms ); + + // Compute the URL + $url = $uploads['url'] . "/$filename"; + + if ( is_multisite() ) + delete_transient( 'dirsize_cache' ); + + return apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ), 'upload' ); +} + +/** + * Handle sideloads, which is the process of retrieving a media item from another server instead of + * a traditional media upload. This process involves sanitizing the filename, checking extensions + * for mime type, and moving the file to the appropriate directory within the uploads directory. + * + * @since 2.6.0 + * + * @uses wp_handle_upload_error + * @uses apply_filters + * @uses wp_check_filetype_and_ext + * @uses current_user_can + * @uses wp_upload_dir + * @uses wp_unique_filename + * @param array $file an array similar to that of a PHP $_FILES POST array + * @param array $overrides Optional. An associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ). + * @param string $time Optional. Time formatted in 'yyyy/mm'. + * @return array On success, returns an associative array of file attributes. On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ). + */ +function wp_handle_sideload( &$file, $overrides = false, $time = null ) { + // The default error handler. + if (! function_exists( 'wp_handle_upload_error' ) ) { + function wp_handle_upload_error( &$file, $message ) { + return array( 'error'=>$message ); + } + } + + // You may define your own function and pass the name in $overrides['upload_error_handler'] + $upload_error_handler = 'wp_handle_upload_error'; + + // You may define your own function and pass the name in $overrides['unique_filename_callback'] + $unique_filename_callback = null; + + // $_POST['action'] must be set and its value must equal $overrides['action'] or this: + $action = 'wp_handle_sideload'; + + // Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error']. + $upload_error_strings = array( false, + __( "The uploaded file exceeds the upload_max_filesize directive in php.ini." ), + __( "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." ), + __( "The uploaded file was only partially uploaded." ), + __( "No file was uploaded." ), + '', + __( "Missing a temporary folder." ), + __( "Failed to write file to disk." ), + __( "File upload stopped by extension." )); + + // All tests are on by default. Most can be turned off by $overrides[{test_name}] = false; + $test_form = true; + $test_size = true; + + // If you override this, you must provide $ext and $type!!!! + $test_type = true; + $mimes = false; + + // Install user overrides. Did we mention that this voids your warranty? + if ( is_array( $overrides ) ) + extract( $overrides, EXTR_OVERWRITE ); + + // A correct form post will pass this test. + if ( $test_form && (!isset( $_POST['action'] ) || ($_POST['action'] != $action ) ) ) + return $upload_error_handler( $file, __( 'Invalid form submission.' )); + + // A successful upload will pass this test. It makes no sense to override this one. + if ( ! empty( $file['error'] ) ) + return $upload_error_handler( $file, $upload_error_strings[$file['error']] ); + + // A non-empty file will pass this test. + if ( $test_size && !(filesize($file['tmp_name']) > 0 ) ) + return $upload_error_handler( $file, __( 'File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini.' )); + + // A properly uploaded file will pass this test. There should be no reason to override this one. + if (! @ is_file( $file['tmp_name'] ) ) + return $upload_error_handler( $file, __( 'Specified file does not exist.' )); + + // A correct MIME type will pass this test. Override $mimes or use the upload_mimes filter. + if ( $test_type ) { + $wp_filetype = wp_check_filetype_and_ext( $file['tmp_name'], $file['name'], $mimes ); + + extract( $wp_filetype ); + + // Check to see if wp_check_filetype_and_ext() determined the filename was incorrect + if ( $proper_filename ) + $file['name'] = $proper_filename; + + if ( ( !$type || !$ext ) && !current_user_can( 'unfiltered_upload' ) ) + return $upload_error_handler( $file, __( 'Sorry, this file type is not permitted for security reasons.' )); + + if ( !$ext ) + $ext = ltrim(strrchr($file['name'], '.'), '.'); + + if ( !$type ) + $type = $file['type']; + } + + // A writable uploads dir will pass this test. Again, there's no point overriding this one. + if ( ! ( ( $uploads = wp_upload_dir( $time ) ) && false === $uploads['error'] ) ) + return $upload_error_handler( $file, $uploads['error'] ); + + $filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback ); + + // Strip the query strings. + $filename = str_replace('?','-', $filename); + $filename = str_replace('&','-', $filename); + + // Move the file to the uploads dir + $new_file = $uploads['path'] . "/$filename"; + if ( false === @ rename( $file['tmp_name'], $new_file ) ) { + if ( 0 === strpos( $uploads['basedir'], ABSPATH ) ) + $error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir']; + else + $error_path = basename( $uploads['basedir'] ) . $uploads['subdir']; + return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $error_path ) ); + } + + // Set correct file permissions + $stat = stat( dirname( $new_file )); + $perms = $stat['mode'] & 0000666; + @ chmod( $new_file, $perms ); + + // Compute the URL + $url = $uploads['url'] . "/$filename"; + + $return = apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ), 'sideload' ); + + return $return; +} + +/** + * Downloads a url to a local temporary file using the WordPress HTTP Class. + * Please note, That the calling function must unlink() the file. + * + * @since 2.5.0 + * + * @param string $url the URL of the file to download + * @param int $timeout The timeout for the request to download the file default 300 seconds + * @return mixed WP_Error on failure, string Filename on success. + */ +function download_url( $url, $timeout = 300 ) { + //WARNING: The file is not automatically deleted, The script must unlink() the file. + if ( ! $url ) + return new WP_Error('http_no_url', __('Invalid URL Provided.')); + + $tmpfname = wp_tempnam($url); + if ( ! $tmpfname ) + return new WP_Error('http_no_file', __('Could not create Temporary file.')); + + $response = wp_safe_remote_get( $url, array( 'timeout' => $timeout, 'stream' => true, 'filename' => $tmpfname ) ); + + if ( is_wp_error( $response ) ) { + unlink( $tmpfname ); + return $response; + } + + if ( 200 != wp_remote_retrieve_response_code( $response ) ){ + unlink( $tmpfname ); + return new WP_Error( 'http_404', trim( wp_remote_retrieve_response_message( $response ) ) ); + } + + $content_md5 = wp_remote_retrieve_header( $response, 'content-md5' ); + if ( $content_md5 ) { + $md5_check = verify_file_md5( $tmpfname, $content_md5 ); + if ( is_wp_error( $md5_check ) ) { + unlink( $tmpfname ); + return $md5_check; + } + } + + return $tmpfname; +} + +/** + * Calculates and compares the MD5 of a file to it's expected value. + * + * @since 3.7.0 + * + * @param string $filename The filename to check the MD5 of. + * @param string $expected_md5 The expected MD5 of the file, either a base64 encoded raw md5, or a hex-encoded md5 + * @return bool|object WP_Error on failure, true on success, false when the MD5 format is unknown/unexpected + */ +function verify_file_md5( $filename, $expected_md5 ) { + if ( 32 == strlen( $expected_md5 ) ) + $expected_raw_md5 = pack( 'H*', $expected_md5 ); + elseif ( 24 == strlen( $expected_md5 ) ) + $expected_raw_md5 = base64_decode( $expected_md5 ); + else + return false; // unknown format + + $file_md5 = md5_file( $filename, true ); + + if ( $file_md5 === $expected_raw_md5 ) + return true; + + return new WP_Error( 'md5_mismatch', sprintf( __( 'The checksum of the file (%1$s) does not match the expected checksum value (%2$s).' ), bin2hex( $file_md5 ), bin2hex( $expected_raw_md5 ) ) ); +} + +/** + * Unzips a specified ZIP file to a location on the Filesystem via the WordPress Filesystem Abstraction. + * Assumes that WP_Filesystem() has already been called and set up. Does not extract a root-level __MACOSX directory, if present. + * + * Attempts to increase the PHP Memory limit to 256M before uncompressing, + * However, The most memory required shouldn't be much larger than the Archive itself. + * + * @since 2.5.0 + * + * @param string $file Full path and filename of zip archive + * @param string $to Full path on the filesystem to extract archive to + * @return mixed WP_Error on failure, True on success + */ +function unzip_file($file, $to) { + global $wp_filesystem; + + if ( ! $wp_filesystem || !is_object($wp_filesystem) ) + return new WP_Error('fs_unavailable', __('Could not access filesystem.')); + + // Unzip can use a lot of memory, but not this much hopefully + @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) ); + + $needed_dirs = array(); + $to = trailingslashit($to); + + // Determine any parent dir's needed (of the upgrade directory) + if ( ! $wp_filesystem->is_dir($to) ) { //Only do parents if no children exist + $path = preg_split('![/\\\]!', untrailingslashit($to)); + for ( $i = count($path); $i >= 0; $i-- ) { + if ( empty($path[$i]) ) + continue; + + $dir = implode('/', array_slice($path, 0, $i+1) ); + if ( preg_match('!^[a-z]:$!i', $dir) ) // Skip it if it looks like a Windows Drive letter. + continue; + + if ( ! $wp_filesystem->is_dir($dir) ) + $needed_dirs[] = $dir; + else + break; // A folder exists, therefor, we dont need the check the levels below this + } + } + + if ( class_exists('ZipArchive') && apply_filters('unzip_file_use_ziparchive', true ) ) { + $result = _unzip_file_ziparchive($file, $to, $needed_dirs); + if ( true === $result ) { + return $result; + } elseif ( is_wp_error($result) ) { + if ( 'incompatible_archive' != $result->get_error_code() ) + return $result; + } + } + // Fall through to PclZip if ZipArchive is not available, or encountered an error opening the file. + return _unzip_file_pclzip($file, $to, $needed_dirs); +} + +/** + * This function should not be called directly, use unzip_file instead. Attempts to unzip an archive using the ZipArchive class. + * Assumes that WP_Filesystem() has already been called and set up. + * + * @since 3.0.0 + * @see unzip_file + * @access private + * + * @param string $file Full path and filename of zip archive + * @param string $to Full path on the filesystem to extract archive to + * @param array $needed_dirs A partial list of required folders needed to be created. + * @return mixed WP_Error on failure, True on success + */ +function _unzip_file_ziparchive($file, $to, $needed_dirs = array() ) { + global $wp_filesystem; + + $z = new ZipArchive(); + + $zopen = $z->open( $file, ZIPARCHIVE::CHECKCONS ); + if ( true !== $zopen ) + return new WP_Error( 'incompatible_archive', __( 'Incompatible Archive.' ), array( 'ziparchive_error' => $zopen ) ); + + $uncompressed_size = 0; + + for ( $i = 0; $i < $z->numFiles; $i++ ) { + if ( ! $info = $z->statIndex($i) ) + return new WP_Error( 'stat_failed_ziparchive', __( 'Could not retrieve file from archive.' ) ); + + if ( '__MACOSX/' === substr($info['name'], 0, 9) ) // Skip the OS X-created __MACOSX directory + continue; + + $uncompressed_size += $info['size']; + + if ( '/' == substr($info['name'], -1) ) // directory + $needed_dirs[] = $to . untrailingslashit($info['name']); + else + $needed_dirs[] = $to . untrailingslashit(dirname($info['name'])); + } + + /* + * disk_free_space() could return false. Assume that any falsey value is an error. + * A disk that has zero free bytes has bigger problems. + * Require we have enough space to unzip the file and copy its contents, with a 10% buffer. + */ + if ( defined( 'DOING_CRON' ) && DOING_CRON ) { + $available_space = @disk_free_space( WP_CONTENT_DIR ); + if ( $available_space && ( $uncompressed_size * 2.1 ) > $available_space ) + return new WP_Error( 'disk_full_unzip_file', __( 'Could not copy files. You may have run out of disk space.' ), compact( 'uncompressed_size', 'available_space' ) ); + } + + $needed_dirs = array_unique($needed_dirs); + foreach ( $needed_dirs as $dir ) { + // Check the parent folders of the folders all exist within the creation array. + if ( untrailingslashit($to) == $dir ) // Skip over the working directory, We know this exists (or will exist) + continue; + if ( strpos($dir, $to) === false ) // If the directory is not within the working directory, Skip it + continue; + + $parent_folder = dirname($dir); + while ( !empty($parent_folder) && untrailingslashit($to) != $parent_folder && !in_array($parent_folder, $needed_dirs) ) { + $needed_dirs[] = $parent_folder; + $parent_folder = dirname($parent_folder); + } + } + asort($needed_dirs); + + // Create those directories if need be: + foreach ( $needed_dirs as $_dir ) { + if ( ! $wp_filesystem->mkdir($_dir, FS_CHMOD_DIR) && ! $wp_filesystem->is_dir($_dir) ) // Only check to see if the Dir exists upon creation failure. Less I/O this way. + return new WP_Error( 'mkdir_failed_ziparchive', __( 'Could not create directory.' ), substr( $_dir, strlen( $to ) ) ); + } + unset($needed_dirs); + + for ( $i = 0; $i < $z->numFiles; $i++ ) { + if ( ! $info = $z->statIndex($i) ) + return new WP_Error( 'stat_failed_ziparchive', __( 'Could not retrieve file from archive.' ) ); + + if ( '/' == substr($info['name'], -1) ) // directory + continue; + + if ( '__MACOSX/' === substr($info['name'], 0, 9) ) // Don't extract the OS X-created __MACOSX directory files + continue; + + $contents = $z->getFromIndex($i); + if ( false === $contents ) + return new WP_Error( 'extract_failed_ziparchive', __( 'Could not extract file from archive.' ), $info['name'] ); + + if ( ! $wp_filesystem->put_contents( $to . $info['name'], $contents, FS_CHMOD_FILE) ) + return new WP_Error( 'copy_failed_ziparchive', __( 'Could not copy file.' ), $info['name'] ); + } + + $z->close(); + + return true; +} + +/** + * This function should not be called directly, use unzip_file instead. Attempts to unzip an archive using the PclZip library. + * Assumes that WP_Filesystem() has already been called and set up. + * + * @since 3.0.0 + * @see unzip_file + * @access private + * + * @param string $file Full path and filename of zip archive + * @param string $to Full path on the filesystem to extract archive to + * @param array $needed_dirs A partial list of required folders needed to be created. + * @return mixed WP_Error on failure, True on success + */ +function _unzip_file_pclzip($file, $to, $needed_dirs = array()) { + global $wp_filesystem; + + mbstring_binary_safe_encoding(); + + require_once(ABSPATH . 'wp-admin/includes/class-pclzip.php'); + + $archive = new PclZip($file); + + $archive_files = $archive->extract(PCLZIP_OPT_EXTRACT_AS_STRING); + + reset_mbstring_encoding(); + + // Is the archive valid? + if ( !is_array($archive_files) ) + return new WP_Error('incompatible_archive', __('Incompatible Archive.'), $archive->errorInfo(true)); + + if ( 0 == count($archive_files) ) + return new WP_Error( 'empty_archive_pclzip', __( 'Empty archive.' ) ); + + $uncompressed_size = 0; + + // Determine any children directories needed (From within the archive) + foreach ( $archive_files as $file ) { + if ( '__MACOSX/' === substr($file['filename'], 0, 9) ) // Skip the OS X-created __MACOSX directory + continue; + + $uncompressed_size += $file['size']; + + $needed_dirs[] = $to . untrailingslashit( $file['folder'] ? $file['filename'] : dirname($file['filename']) ); + } + + /* + * disk_free_space() could return false. Assume that any falsey value is an error. + * A disk that has zero free bytes has bigger problems. + * Require we have enough space to unzip the file and copy its contents, with a 10% buffer. + */ + if ( defined( 'DOING_CRON' ) && DOING_CRON ) { + $available_space = @disk_free_space( WP_CONTENT_DIR ); + if ( $available_space && ( $uncompressed_size * 2.1 ) > $available_space ) + return new WP_Error( 'disk_full_unzip_file', __( 'Could not copy files. You may have run out of disk space.' ), compact( 'uncompressed_size', 'available_space' ) ); + } + + $needed_dirs = array_unique($needed_dirs); + foreach ( $needed_dirs as $dir ) { + // Check the parent folders of the folders all exist within the creation array. + if ( untrailingslashit($to) == $dir ) // Skip over the working directory, We know this exists (or will exist) + continue; + if ( strpos($dir, $to) === false ) // If the directory is not within the working directory, Skip it + continue; + + $parent_folder = dirname($dir); + while ( !empty($parent_folder) && untrailingslashit($to) != $parent_folder && !in_array($parent_folder, $needed_dirs) ) { + $needed_dirs[] = $parent_folder; + $parent_folder = dirname($parent_folder); + } + } + asort($needed_dirs); + + // Create those directories if need be: + foreach ( $needed_dirs as $_dir ) { + // Only check to see if the dir exists upon creation failure. Less I/O this way. + if ( ! $wp_filesystem->mkdir( $_dir, FS_CHMOD_DIR ) && ! $wp_filesystem->is_dir( $_dir ) ) + return new WP_Error( 'mkdir_failed_pclzip', __( 'Could not create directory.' ), substr( $_dir, strlen( $to ) ) ); + } + unset($needed_dirs); + + // Extract the files from the zip + foreach ( $archive_files as $file ) { + if ( $file['folder'] ) + continue; + + if ( '__MACOSX/' === substr($file['filename'], 0, 9) ) // Don't extract the OS X-created __MACOSX directory files + continue; + + if ( ! $wp_filesystem->put_contents( $to . $file['filename'], $file['content'], FS_CHMOD_FILE) ) + return new WP_Error( 'copy_failed_pclzip', __( 'Could not copy file.' ), $file['filename'] ); + } + return true; +} + +/** + * Copies a directory from one location to another via the WordPress Filesystem Abstraction. + * Assumes that WP_Filesystem() has already been called and setup. + * + * @since 2.5.0 + * + * @param string $from source directory + * @param string $to destination directory + * @param array $skip_list a list of files/folders to skip copying + * @return mixed WP_Error on failure, True on success. + */ +function copy_dir($from, $to, $skip_list = array() ) { + global $wp_filesystem; + + $dirlist = $wp_filesystem->dirlist($from); + + $from = trailingslashit($from); + $to = trailingslashit($to); + + foreach ( (array) $dirlist as $filename => $fileinfo ) { + if ( in_array( $filename, $skip_list ) ) + continue; + + if ( 'f' == $fileinfo['type'] ) { + if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) ) { + // If copy failed, chmod file to 0644 and try again. + $wp_filesystem->chmod( $to . $filename, FS_CHMOD_FILE ); + if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) ) + return new WP_Error( 'copy_failed_copy_dir', __( 'Could not copy file.' ), $to . $filename ); + } + } elseif ( 'd' == $fileinfo['type'] ) { + if ( !$wp_filesystem->is_dir($to . $filename) ) { + if ( !$wp_filesystem->mkdir($to . $filename, FS_CHMOD_DIR) ) + return new WP_Error( 'mkdir_failed_copy_dir', __( 'Could not create directory.' ), $to . $filename ); + } + + // generate the $sub_skip_list for the subdirectory as a sub-set of the existing $skip_list + $sub_skip_list = array(); + foreach ( $skip_list as $skip_item ) { + if ( 0 === strpos( $skip_item, $filename . '/' ) ) + $sub_skip_list[] = preg_replace( '!^' . preg_quote( $filename, '!' ) . '/!i', '', $skip_item ); + } + + $result = copy_dir($from . $filename, $to . $filename, $sub_skip_list); + if ( is_wp_error($result) ) + return $result; + } + } + return true; +} + +/** + * Initialises and connects the WordPress Filesystem Abstraction classes. + * This function will include the chosen transport and attempt connecting. + * + * Plugins may add extra transports, And force WordPress to use them by returning the filename via the 'filesystem_method_file' filter. + * + * @since 2.5.0 + * + * @param array $args (optional) Connection args, These are passed directly to the WP_Filesystem_*() classes. + * @param string $context (optional) Context for get_filesystem_method(), See function declaration for more information. + * @return boolean false on failure, true on success + */ +function WP_Filesystem( $args = false, $context = false ) { + global $wp_filesystem; + + require_once(ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php'); + + $method = get_filesystem_method($args, $context); + + if ( ! $method ) + return false; + + if ( ! class_exists("WP_Filesystem_$method") ) { + $abstraction_file = apply_filters('filesystem_method_file', ABSPATH . 'wp-admin/includes/class-wp-filesystem-' . $method . '.php', $method); + if ( ! file_exists($abstraction_file) ) + return; + + require_once($abstraction_file); + } + $method = "WP_Filesystem_$method"; + + $wp_filesystem = new $method($args); + + //Define the timeouts for the connections. Only available after the construct is called to allow for per-transport overriding of the default. + if ( ! defined('FS_CONNECT_TIMEOUT') ) + define('FS_CONNECT_TIMEOUT', 30); + if ( ! defined('FS_TIMEOUT') ) + define('FS_TIMEOUT', 30); + + if ( is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code() ) + return false; + + if ( !$wp_filesystem->connect() ) + return false; //There was an error connecting to the server. + + // Set the permission constants if not already set. + if ( ! defined('FS_CHMOD_DIR') ) + define('FS_CHMOD_DIR', ( fileperms( ABSPATH ) & 0777 | 0755 ) ); + if ( ! defined('FS_CHMOD_FILE') ) + define('FS_CHMOD_FILE', ( fileperms( ABSPATH . 'index.php' ) & 0777 | 0644 ) ); + + return true; +} + +/** + * Determines which Filesystem Method to use. + * The priority of the Transports are: Direct, SSH2, FTP PHP Extension, FTP Sockets (Via Sockets class, or fsockopen()) + * + * Note that the return value of this function can be overridden in 2 ways + * - By defining FS_METHOD in your wp-config.php file + * - By using the filesystem_method filter + * Valid values for these are: 'direct', 'ssh', 'ftpext' or 'ftpsockets' + * Plugins may also define a custom transport handler, See the WP_Filesystem function for more information. + * + * @since 2.5.0 + * + * @param array $args Connection details. + * @param string $context Full path to the directory that is tested for being writable. + * @return string The transport to use, see description for valid return values. + */ +function get_filesystem_method($args = array(), $context = false) { + $method = defined('FS_METHOD') ? FS_METHOD : false; //Please ensure that this is either 'direct', 'ssh', 'ftpext' or 'ftpsockets' + + if ( ! $method && function_exists('getmyuid') && function_exists('fileowner') ){ + if ( !$context ) + $context = WP_CONTENT_DIR; + + // If the directory doesn't exist (wp-content/languages) then use the parent directory as we'll create it. + if ( WP_LANG_DIR == $context && ! is_dir( $context ) ) + $context = dirname( $context ); + + $context = trailingslashit($context); + $temp_file_name = $context . 'temp-write-test-' . time(); + $temp_handle = @fopen($temp_file_name, 'w'); + if ( $temp_handle ) { + if ( getmyuid() == @fileowner($temp_file_name) ) + $method = 'direct'; + @fclose($temp_handle); + @unlink($temp_file_name); + } + } + + if ( ! $method && isset($args['connection_type']) && 'ssh' == $args['connection_type'] && extension_loaded('ssh2') && function_exists('stream_get_contents') ) $method = 'ssh2'; + if ( ! $method && extension_loaded('ftp') ) $method = 'ftpext'; + if ( ! $method && ( extension_loaded('sockets') || function_exists('fsockopen') ) ) $method = 'ftpsockets'; //Sockets: Socket extension; PHP Mode: FSockopen / fwrite / fread + return apply_filters('filesystem_method', $method, $args); +} + +/** + * Displays a form to the user to request for their FTP/SSH details in order to connect to the filesystem. + * All chosen/entered details are saved, Excluding the Password. + * + * Hostnames may be in the form of hostname:portnumber (eg: wordpress.org:2467) to specify an alternate FTP/SSH port. + * + * Plugins may override this form by returning true|false via the request_filesystem_credentials filter. + * + * @since 2.5.0 + * + * @param string $form_post the URL to post the form to + * @param string $type the chosen Filesystem method in use + * @param boolean $error if the current request has failed to connect + * @param string $context The directory which is needed access to, The write-test will be performed on this directory by get_filesystem_method() + * @param string $extra_fields Extra POST fields which should be checked for to be included in the post. + * @return boolean False on failure. True on success. + */ +function request_filesystem_credentials($form_post, $type = '', $error = false, $context = false, $extra_fields = null) { + $req_cred = apply_filters( 'request_filesystem_credentials', '', $form_post, $type, $error, $context, $extra_fields ); + if ( '' !== $req_cred ) + return $req_cred; + + if ( empty($type) ) + $type = get_filesystem_method(array(), $context); + + if ( 'direct' == $type ) + return true; + + if ( is_null( $extra_fields ) ) + $extra_fields = array( 'version', 'locale' ); + + $credentials = get_option('ftp_credentials', array( 'hostname' => '', 'username' => '')); + + // If defined, set it to that, Else, If POST'd, set it to that, If not, Set it to whatever it previously was(saved details in option) + $credentials['hostname'] = defined('FTP_HOST') ? FTP_HOST : (!empty($_POST['hostname']) ? wp_unslash( $_POST['hostname'] ) : $credentials['hostname']); + $credentials['username'] = defined('FTP_USER') ? FTP_USER : (!empty($_POST['username']) ? wp_unslash( $_POST['username'] ) : $credentials['username']); + $credentials['password'] = defined('FTP_PASS') ? FTP_PASS : (!empty($_POST['password']) ? wp_unslash( $_POST['password'] ) : ''); + + // Check to see if we are setting the public/private keys for ssh + $credentials['public_key'] = defined('FTP_PUBKEY') ? FTP_PUBKEY : (!empty($_POST['public_key']) ? wp_unslash( $_POST['public_key'] ) : ''); + $credentials['private_key'] = defined('FTP_PRIKEY') ? FTP_PRIKEY : (!empty($_POST['private_key']) ? wp_unslash( $_POST['private_key'] ) : ''); + + //sanitize the hostname, Some people might pass in odd-data: + $credentials['hostname'] = preg_replace('|\w+://|', '', $credentials['hostname']); //Strip any schemes off + + if ( strpos($credentials['hostname'], ':') ) { + list( $credentials['hostname'], $credentials['port'] ) = explode(':', $credentials['hostname'], 2); + if ( ! is_numeric($credentials['port']) ) + unset($credentials['port']); + } else { + unset($credentials['port']); + } + + if ( (defined('FTP_SSH') && FTP_SSH) || (defined('FS_METHOD') && 'ssh' == FS_METHOD) ) + $credentials['connection_type'] = 'ssh'; + else if ( (defined('FTP_SSL') && FTP_SSL) && 'ftpext' == $type ) //Only the FTP Extension understands SSL + $credentials['connection_type'] = 'ftps'; + else if ( !empty($_POST['connection_type']) ) + $credentials['connection_type'] = wp_unslash( $_POST['connection_type'] ); + else if ( !isset($credentials['connection_type']) ) //All else fails (And it's not defaulted to something else saved), Default to FTP + $credentials['connection_type'] = 'ftp'; + + if ( ! $error && + ( + ( !empty($credentials['password']) && !empty($credentials['username']) && !empty($credentials['hostname']) ) || + ( 'ssh' == $credentials['connection_type'] && !empty($credentials['public_key']) && !empty($credentials['private_key']) ) + ) ) { + $stored_credentials = $credentials; + if ( !empty($stored_credentials['port']) ) //save port as part of hostname to simplify above code. + $stored_credentials['hostname'] .= ':' . $stored_credentials['port']; + + unset($stored_credentials['password'], $stored_credentials['port'], $stored_credentials['private_key'], $stored_credentials['public_key']); + update_option('ftp_credentials', $stored_credentials); + return $credentials; + } + $hostname = ''; + $username = ''; + $password = ''; + $connection_type = ''; + if ( !empty($credentials) ) + extract($credentials, EXTR_OVERWRITE); + if ( $error ) { + $error_string = __('ERROR: There was an error connecting to the server, Please verify the settings are correct.'); + if ( is_wp_error($error) ) + $error_string = esc_html( $error->get_error_message() ); + echo '

    ' . $error_string . '

    '; + } + + $types = array(); + if ( extension_loaded('ftp') || extension_loaded('sockets') || function_exists('fsockopen') ) + $types[ 'ftp' ] = __('FTP'); + if ( extension_loaded('ftp') ) //Only this supports FTPS + $types[ 'ftps' ] = __('FTPS (SSL)'); + if ( extension_loaded('ssh2') && function_exists('stream_get_contents') ) + $types[ 'ssh' ] = __('SSH2'); + + $types = apply_filters('fs_ftp_connection_types', $types, $credentials, $type, $error, $context); + +?> + +
    +
    +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    " size="40" />
    size="40" />
    size="40" />
    +
    +
    +
    + +

    size="40" />
    size="40" /> +
    +
    + $text ) : ?> + + +
    +
    + +'; +} +submit_button( __( 'Proceed' ), 'button', 'upgrade' ); +?> +
    +
    + 400 ? 400 / $big : 1; + + $backup_sizes = get_post_meta( $post_id, '_wp_attachment_backup_sizes', true ); + $can_restore = false; + if ( ! empty( $backup_sizes ) && isset( $backup_sizes['full-orig'], $meta['file'] ) ) + $can_restore = $backup_sizes['full-orig']['file'] != basename( $meta['file'] ); + + if ( $msg ) { + if ( isset($msg->error) ) + $note = "

    $msg->error

    "; + elseif ( isset($msg->msg) ) + $note = "

    $msg->msg

    "; + } + + ?> +
    + + + + + +
    +
    +
    , this)" class="imgedit-crop disabled" title="">
    get_post_mime_type( $post_id ), 'methods' => array( 'rotate' ) ) ) ) { ?> +
    , this)" title="">
    +
    , this)" title="">
    + +
    +
    + + +
    , this)" class="imgedit-flipv" title="">
    +
    , this)" class="imgedit-fliph" title="">
    + +
    , this)" class="imgedit-undo disabled" title="">
    +
    , this)" class="imgedit-redo disabled" title="">
    +
    +
    + + + + + + + + + +
    + +
    + +
    + + )" disabled="disabled" class="button-primary imgedit-submit-btn" value="" /> +
    +
    +
    +
    + +
    +

    + +

    + +
    + × + ! + , 'scale')" class="button-primary" value="" /> +
    +
    +
    + + + +
    + +
    +

    +
    + , 'restore')" class="button-primary" value="" /> +
    +
    +
    + + + +
    + +
    +
    + + +
    +

    + +


    +

    + +


    +

    +
    +
    + +

    + + + + : + + +

    + +

    + + + + : + + +

    +
    + + + +
    +
    + + +

    +
    + +

    +
    +

    + +

    +
    + + + + + + +

    +
    + + + +
    +
    + + +
    +stream( $mime_type ) ) ) + return false; + + return true; + } else { + _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) ); + + $image = apply_filters('image_save_pre', $image, $post_id); + + switch ( $mime_type ) { + case 'image/jpeg': + header( 'Content-Type: image/jpeg' ); + return imagejpeg( $image, null, 90 ); + case 'image/png': + header( 'Content-Type: image/png' ); + return imagepng( $image ); + case 'image/gif': + header( 'Content-Type: image/gif' ); + return imagegif( $image ); + default: + return false; + } + } +} + +/** + * Saves Image to File + * + * @param string $filename + * @param WP_Image_Editor $image + * @param string $mime_type + * @param int $post_id + * @return boolean + */ +function wp_save_image_file( $filename, $image, $mime_type, $post_id ) { + if ( $image instanceof WP_Image_Editor ) { + $image = apply_filters('image_editor_save_pre', $image, $post_id); + $saved = apply_filters('wp_save_image_editor_file', null, $filename, $image, $mime_type, $post_id); + + if ( null !== $saved ) + return $saved; + + return $image->save( $filename, $mime_type ); + } else { + _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) ); + + $image = apply_filters('image_save_pre', $image, $post_id); + $saved = apply_filters('wp_save_image_file', null, $filename, $image, $mime_type, $post_id); + + if ( null !== $saved ) + return $saved; + + switch ( $mime_type ) { + case 'image/jpeg': + /** This filter is documented in wp-includes/class-wp-image-editor.php */ + return imagejpeg( $image, $filename, apply_filters( 'jpeg_quality', 90, 'edit_image' ) ); + case 'image/png': + return imagepng( $image, $filename ); + case 'image/gif': + return imagegif( $image, $filename ); + default: + return false; + } + } +} + +function _image_get_preview_ratio($w, $h) { + $max = max($w, $h); + return $max > 400 ? (400 / $max) : 1; +} + +// @TODO: Returns GD resource, but is NOT public +function _rotate_image_resource($img, $angle) { + _deprecated_function( __FUNCTION__, '3.5', __( 'Use WP_Image_Editor::rotate' ) ); + if ( function_exists('imagerotate') ) { + $rotated = imagerotate($img, $angle, 0); + if ( is_resource($rotated) ) { + imagedestroy($img); + $img = $rotated; + } + } + return $img; +} + +/** + * @TODO: Only used within image_edit_apply_changes + * and receives/returns GD Resource. + * Consider removal. + * + * @param GD_Resource $img + * @param boolean $horz + * @param boolean $vert + * @return GD_Resource + */ +function _flip_image_resource($img, $horz, $vert) { + _deprecated_function( __FUNCTION__, '3.5', __( 'Use WP_Image_Editor::flip' ) ); + $w = imagesx($img); + $h = imagesy($img); + $dst = wp_imagecreatetruecolor($w, $h); + if ( is_resource($dst) ) { + $sx = $vert ? ($w - 1) : 0; + $sy = $horz ? ($h - 1) : 0; + $sw = $vert ? -$w : $w; + $sh = $horz ? -$h : $h; + + if ( imagecopyresampled($dst, $img, 0, 0, $sx, $sy, $w, $h, $sw, $sh) ) { + imagedestroy($img); + $img = $dst; + } + } + return $img; +} + +/** + * @TODO: Only used within image_edit_apply_changes + * and receives/returns GD Resource. + * Consider removal. + * + * @param GD_Resource $img + * @param float $x + * @param float $y + * @param float $w + * @param float $h + * @return GD_Resource + */ +function _crop_image_resource($img, $x, $y, $w, $h) { + $dst = wp_imagecreatetruecolor($w, $h); + if ( is_resource($dst) ) { + if ( imagecopy($dst, $img, 0, 0, $x, $y, $w, $h) ) { + imagedestroy($img); + $img = $dst; + } + } + return $img; +} + +/** + * Performs group of changes on Editor specified. + * + * @param WP_Image_Editor $image + * @param type $changes + * @return WP_Image_Editor + */ +function image_edit_apply_changes( $image, $changes ) { + if ( is_resource( $image ) ) + _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) ); + + if ( !is_array($changes) ) + return $image; + + // expand change operations + foreach ( $changes as $key => $obj ) { + if ( isset($obj->r) ) { + $obj->type = 'rotate'; + $obj->angle = $obj->r; + unset($obj->r); + } elseif ( isset($obj->f) ) { + $obj->type = 'flip'; + $obj->axis = $obj->f; + unset($obj->f); + } elseif ( isset($obj->c) ) { + $obj->type = 'crop'; + $obj->sel = $obj->c; + unset($obj->c); + } + $changes[$key] = $obj; + } + + // combine operations + if ( count($changes) > 1 ) { + $filtered = array($changes[0]); + for ( $i = 0, $j = 1; $j < count($changes); $j++ ) { + $combined = false; + if ( $filtered[$i]->type == $changes[$j]->type ) { + switch ( $filtered[$i]->type ) { + case 'rotate': + $filtered[$i]->angle += $changes[$j]->angle; + $combined = true; + break; + case 'flip': + $filtered[$i]->axis ^= $changes[$j]->axis; + $combined = true; + break; + } + } + if ( !$combined ) + $filtered[++$i] = $changes[$j]; + } + $changes = $filtered; + unset($filtered); + } + + // image resource before applying the changes + if ( $image instanceof WP_Image_Editor ) + $image = apply_filters('wp_image_editor_before_change', $image, $changes); + elseif ( is_resource( $image ) ) + $image = apply_filters('image_edit_before_change', $image, $changes); + + foreach ( $changes as $operation ) { + switch ( $operation->type ) { + case 'rotate': + if ( $operation->angle != 0 ) { + if ( $image instanceof WP_Image_Editor ) + $image->rotate( $operation->angle ); + else + $image = _rotate_image_resource( $image, $operation->angle ); + } + break; + case 'flip': + if ( $operation->axis != 0 ) + if ( $image instanceof WP_Image_Editor ) + $image->flip( ($operation->axis & 1) != 0, ($operation->axis & 2) != 0 ); + else + $image = _flip_image_resource( $image, ( $operation->axis & 1 ) != 0, ( $operation->axis & 2 ) != 0 ); + break; + case 'crop': + $sel = $operation->sel; + + if ( $image instanceof WP_Image_Editor ) { + $size = $image->get_size(); + $w = $size['width']; + $h = $size['height']; + + $scale = 1 / _image_get_preview_ratio( $w, $h ); // discard preview scaling + $image->crop( $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale ); + } else { + $scale = 1 / _image_get_preview_ratio( imagesx( $image ), imagesy( $image ) ); // discard preview scaling + $image = _crop_image_resource( $image, $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale ); + } + break; + } + } + + return $image; +} + + +/** + * Streams image in post to browser, along with enqueued changes + * in $_REQUEST['history'] + * + * @param int $post_id + * @return boolean + */ +function stream_preview_image( $post_id ) { + $post = get_post( $post_id ); + @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) ); + + $img = wp_get_image_editor( _load_image_to_edit_path( $post_id ) ); + + if ( is_wp_error( $img ) ) + return false; + + $changes = !empty($_REQUEST['history']) ? json_decode( wp_unslash($_REQUEST['history']) ) : null; + if ( $changes ) + $img = image_edit_apply_changes( $img, $changes ); + + // scale the image + $size = $img->get_size(); + $w = $size['width']; + $h = $size['height']; + + $ratio = _image_get_preview_ratio( $w, $h ); + $w2 = max ( 1, $w * $ratio ); + $h2 = max ( 1, $h * $ratio ); + + if ( is_wp_error( $img->resize( $w2, $h2 ) ) ) + return false; + + return wp_stream_image( $img, $post->post_mime_type, $post_id ); +} + +function wp_restore_image($post_id) { + $meta = wp_get_attachment_metadata($post_id); + $file = get_attached_file($post_id); + $backup_sizes = get_post_meta( $post_id, '_wp_attachment_backup_sizes', true ); + $restored = false; + $msg = new stdClass; + + if ( !is_array($backup_sizes) ) { + $msg->error = __('Cannot load image metadata.'); + return $msg; + } + + $parts = pathinfo($file); + $suffix = time() . rand(100, 999); + $default_sizes = get_intermediate_image_sizes(); + + if ( isset($backup_sizes['full-orig']) && is_array($backup_sizes['full-orig']) ) { + $data = $backup_sizes['full-orig']; + + if ( $parts['basename'] != $data['file'] ) { + if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ) { + // delete only if it's edited image + if ( preg_match('/-e[0-9]{13}\./', $parts['basename']) ) { + /** This filter is documented in wp-admin/custom-header.php */ + $delpath = apply_filters('wp_delete_file', $file); + @unlink($delpath); + } + } elseif ( isset( $meta['width'], $meta['height'] ) ) { + $backup_sizes["full-$suffix"] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $parts['basename']); + } + } + + $restored_file = path_join($parts['dirname'], $data['file']); + $restored = update_attached_file($post_id, $restored_file); + + $meta['file'] = _wp_relative_upload_path( $restored_file ); + $meta['width'] = $data['width']; + $meta['height'] = $data['height']; + } + + foreach ( $default_sizes as $default_size ) { + if ( isset($backup_sizes["$default_size-orig"]) ) { + $data = $backup_sizes["$default_size-orig"]; + if ( isset($meta['sizes'][$default_size]) && $meta['sizes'][$default_size]['file'] != $data['file'] ) { + if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ) { + // delete only if it's edited image + if ( preg_match('/-e[0-9]{13}-/', $meta['sizes'][$default_size]['file']) ) { + /** This filter is documented in wp-admin/custom-header.php */ + $delpath = apply_filters( 'wp_delete_file', path_join($parts['dirname'], $meta['sizes'][$default_size]['file']) ); + @unlink($delpath); + } + } else { + $backup_sizes["$default_size-{$suffix}"] = $meta['sizes'][$default_size]; + } + } + + $meta['sizes'][$default_size] = $data; + } else { + unset($meta['sizes'][$default_size]); + } + } + + if ( !wp_update_attachment_metadata($post_id, $meta) || !update_post_meta( $post_id, '_wp_attachment_backup_sizes', $backup_sizes) ) { + $msg->error = __('Cannot save image metadata.'); + return $msg; + } + + if ( !$restored ) + $msg->error = __('Image metadata is inconsistent.'); + else + $msg->msg = __('Image restored successfully.'); + + return $msg; +} + +/** + * Saves image to post along with enqueued changes + * in $_REQUEST['history'] + * + * @param int $post_id + * @return \stdClass + */ +function wp_save_image( $post_id ) { + $return = new stdClass; + $success = $delete = $scaled = $nocrop = false; + $post = get_post( $post_id ); + + $img = wp_get_image_editor( _load_image_to_edit_path( $post_id, 'full' ) ); + if ( is_wp_error( $img ) ) { + $return->error = esc_js( __('Unable to create new image.') ); + return $return; + } + + $fwidth = !empty($_REQUEST['fwidth']) ? intval($_REQUEST['fwidth']) : 0; + $fheight = !empty($_REQUEST['fheight']) ? intval($_REQUEST['fheight']) : 0; + $target = !empty($_REQUEST['target']) ? preg_replace('/[^a-z0-9_-]+/i', '', $_REQUEST['target']) : ''; + $scale = !empty($_REQUEST['do']) && 'scale' == $_REQUEST['do']; + + if ( $scale && $fwidth > 0 && $fheight > 0 ) { + $size = $img->get_size(); + $sX = $size['width']; + $sY = $size['height']; + + // check if it has roughly the same w / h ratio + $diff = round($sX / $sY, 2) - round($fwidth / $fheight, 2); + if ( -0.1 < $diff && $diff < 0.1 ) { + // scale the full size image + if ( $img->resize( $fwidth, $fheight ) ) + $scaled = true; + } + + if ( !$scaled ) { + $return->error = esc_js( __('Error while saving the scaled image. Please reload the page and try again.') ); + return $return; + } + } elseif ( !empty($_REQUEST['history']) ) { + $changes = json_decode( wp_unslash($_REQUEST['history']) ); + if ( $changes ) + $img = image_edit_apply_changes($img, $changes); + } else { + $return->error = esc_js( __('Nothing to save, the image has not changed.') ); + return $return; + } + + $meta = wp_get_attachment_metadata($post_id); + $backup_sizes = get_post_meta( $post->ID, '_wp_attachment_backup_sizes', true ); + + if ( !is_array($meta) ) { + $return->error = esc_js( __('Image data does not exist. Please re-upload the image.') ); + return $return; + } + + if ( !is_array($backup_sizes) ) + $backup_sizes = array(); + + // generate new filename + $path = get_attached_file($post_id); + $path_parts = pathinfo( $path ); + $filename = $path_parts['filename']; + $suffix = time() . rand(100, 999); + + if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE && + isset($backup_sizes['full-orig']) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) { + + if ( 'thumbnail' == $target ) + $new_path = "{$path_parts['dirname']}/{$filename}-temp.{$path_parts['extension']}"; + else + $new_path = $path; + } else { + while( true ) { + $filename = preg_replace( '/-e([0-9]+)$/', '', $filename ); + $filename .= "-e{$suffix}"; + $new_filename = "{$filename}.{$path_parts['extension']}"; + $new_path = "{$path_parts['dirname']}/$new_filename"; + if ( file_exists($new_path) ) + $suffix++; + else + break; + } + } + + // save the full-size file, also needed to create sub-sizes + if ( !wp_save_image_file($new_path, $img, $post->post_mime_type, $post_id) ) { + $return->error = esc_js( __('Unable to save the image.') ); + return $return; + } + + if ( 'nothumb' == $target || 'all' == $target || 'full' == $target || $scaled ) { + $tag = false; + if ( isset($backup_sizes['full-orig']) ) { + if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) + $tag = "full-$suffix"; + } else { + $tag = 'full-orig'; + } + + if ( $tag ) + $backup_sizes[$tag] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $path_parts['basename']); + + $success = update_attached_file( $post_id, $new_path ); + + $meta['file'] = _wp_relative_upload_path( $new_path ); + + $size = $img->get_size(); + $meta['width'] = $size['width']; + $meta['height'] = $size['height']; + + if ( $success && ('nothumb' == $target || 'all' == $target) ) { + $sizes = get_intermediate_image_sizes(); + if ( 'nothumb' == $target ) + $sizes = array_diff( $sizes, array('thumbnail') ); + } + + $return->fw = $meta['width']; + $return->fh = $meta['height']; + } elseif ( 'thumbnail' == $target ) { + $sizes = array( 'thumbnail' ); + $success = $delete = $nocrop = true; + } + + if ( isset( $sizes ) ) { + $_sizes = array(); + + foreach ( $sizes as $size ) { + $tag = false; + if ( isset( $meta['sizes'][$size] ) ) { + if ( isset($backup_sizes["$size-orig"]) ) { + if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes["$size-orig"]['file'] != $meta['sizes'][$size]['file'] ) + $tag = "$size-$suffix"; + } else { + $tag = "$size-orig"; + } + + if ( $tag ) + $backup_sizes[$tag] = $meta['sizes'][$size]; + } + + $crop = $nocrop ? false : get_option("{$size}_crop"); + $_sizes[ $size ] = array( 'width' => get_option("{$size}_size_w"), 'height' => get_option("{$size}_size_h"), 'crop' => $crop ); + } + + $meta['sizes'] = array_merge( $meta['sizes'], $img->multi_resize( $_sizes ) ); + } + + unset( $img ); + + if ( $success ) { + wp_update_attachment_metadata( $post_id, $meta ); + update_post_meta( $post_id, '_wp_attachment_backup_sizes', $backup_sizes); + + if ( $target == 'thumbnail' || $target == 'all' || $target == 'full' ) { + // Check if it's an image edit from attachment edit screen + if ( ! empty( $_REQUEST['context'] ) && 'edit-attachment' == $_REQUEST['context'] ) { + $thumb_url = wp_get_attachment_image_src( $post_id, array( 900, 600 ), true ); + $return->thumbnail = $thumb_url[0]; + } else { + $file_url = wp_get_attachment_url($post_id); + if ( $thumb = $meta['sizes']['thumbnail'] ) + $return->thumbnail = path_join( dirname($file_url), $thumb['file'] ); + else + $return->thumbnail = "$file_url?w=128&h=128"; + } + } + } else { + $delete = true; + } + + if ( $delete ) { + /** This filter is documented in wp-admin/custom-header.php */ + $delpath = apply_filters('wp_delete_file', $new_path); + @unlink( $delpath ); + } + + $return->msg = esc_js( __('Image saved') ); + return $return; +} diff --git a/src/wp-admin/includes/image.php b/src/wp-admin/includes/image.php new file mode 100644 index 0000000..61f527a --- /dev/null +++ b/src/wp-admin/includes/image.php @@ -0,0 +1,452 @@ +crop( $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs ); + if ( is_wp_error( $src ) ) + return $src; + + if ( ! $dst_file ) + $dst_file = str_replace( basename( $src_file ), 'cropped-' . basename( $src_file ), $src_file ); + + // The directory containing the original file may no longer exist when + // using a replication plugin. + wp_mkdir_p( dirname( $dst_file ) ); + + $dst_file = dirname( $dst_file ) . '/' . wp_unique_filename( dirname( $dst_file ), basename( $dst_file ) ); + + $result = $editor->save( $dst_file ); + if ( is_wp_error( $result ) ) + return $result; + + return $dst_file; +} + +/** + * Generate post thumbnail attachment meta data. + * + * @since 2.1.0 + * + * @param int $attachment_id Attachment Id to process. + * @param string $file Filepath of the Attached image. + * @return mixed Metadata for attachment. + */ +function wp_generate_attachment_metadata( $attachment_id, $file ) { + $attachment = get_post( $attachment_id ); + + $metadata = array(); + $support = false; + if ( preg_match('!^image/!', get_post_mime_type( $attachment )) && file_is_displayable_image($file) ) { + $imagesize = getimagesize( $file ); + $metadata['width'] = $imagesize[0]; + $metadata['height'] = $imagesize[1]; + + // Make the file path relative to the upload dir + $metadata['file'] = _wp_relative_upload_path($file); + + // make thumbnails and other intermediate sizes + global $_wp_additional_image_sizes; + + $sizes = array(); + foreach ( get_intermediate_image_sizes() as $s ) { + $sizes[$s] = array( 'width' => '', 'height' => '', 'crop' => false ); + if ( isset( $_wp_additional_image_sizes[$s]['width'] ) ) + $sizes[$s]['width'] = intval( $_wp_additional_image_sizes[$s]['width'] ); // For theme-added sizes + else + $sizes[$s]['width'] = get_option( "{$s}_size_w" ); // For default sizes set in options + if ( isset( $_wp_additional_image_sizes[$s]['height'] ) ) + $sizes[$s]['height'] = intval( $_wp_additional_image_sizes[$s]['height'] ); // For theme-added sizes + else + $sizes[$s]['height'] = get_option( "{$s}_size_h" ); // For default sizes set in options + if ( isset( $_wp_additional_image_sizes[$s]['crop'] ) ) + $sizes[$s]['crop'] = intval( $_wp_additional_image_sizes[$s]['crop'] ); // For theme-added sizes + else + $sizes[$s]['crop'] = get_option( "{$s}_crop" ); // For default sizes set in options + } + + $sizes = apply_filters( 'intermediate_image_sizes_advanced', $sizes ); + + if ( $sizes ) { + $editor = wp_get_image_editor( $file ); + + if ( ! is_wp_error( $editor ) ) + $metadata['sizes'] = $editor->multi_resize( $sizes ); + } else { + $metadata['sizes'] = array(); + } + + // fetch additional metadata from exif/iptc + $image_meta = wp_read_image_metadata( $file ); + if ( $image_meta ) + $metadata['image_meta'] = $image_meta; + + } elseif ( preg_match( '#^video/#', get_post_mime_type( $attachment ) ) ) { + $metadata = wp_read_video_metadata( $file ); + $support = current_theme_supports( 'post-thumbnails', 'attachment:video' ) && post_type_supports( 'attachment:video', 'thumbnail' ); + } elseif ( preg_match( '#^audio/#', get_post_mime_type( $attachment ) ) ) { + $metadata = wp_read_audio_metadata( $file ); + $support = current_theme_supports( 'post-thumbnails', 'attachment:audio' ) && post_type_supports( 'attachment:audio', 'thumbnail' ); + } + + if ( $support && ! empty( $metadata['image']['data'] ) ) { + $ext = '.jpg'; + switch ( $metadata['image']['mime'] ) { + case 'image/gif': + $ext = '.gif'; + break; + case 'image/png': + $ext = '.png'; + break; + } + $basename = str_replace( '.', '-', basename( $file ) ) . '-image' . $ext; + $uploaded = wp_upload_bits( $basename, '', $metadata['image']['data'] ); + if ( false === $uploaded['error'] ) { + $attachment = array( + 'post_mime_type' => $metadata['image']['mime'], + 'post_type' => 'attachment', + 'post_content' => '', + ); + $sub_attachment_id = wp_insert_attachment( $attachment, $uploaded['file'] ); + $attach_data = wp_generate_attachment_metadata( $sub_attachment_id, $uploaded['file'] ); + wp_update_attachment_metadata( $sub_attachment_id, $attach_data ); + update_post_meta( $attachment_id, '_thumbnail_id', $sub_attachment_id ); + } + } + + // remove the blob of binary data from the array + if ( isset( $metadata['image']['data'] ) ) + unset( $metadata['image']['data'] ); + + return apply_filters( 'wp_generate_attachment_metadata', $metadata, $attachment_id ); +} + +/** + * Convert a fraction string to a decimal. + * + * @since 2.5.0 + * + * @param string $str + * @return int|float + */ +function wp_exif_frac2dec($str) { + @list( $n, $d ) = explode( '/', $str ); + if ( !empty($d) ) + return $n / $d; + return $str; +} + +/** + * Convert the exif date format to a unix timestamp. + * + * @since 2.5.0 + * + * @param string $str + * @return int + */ +function wp_exif_date2ts($str) { + @list( $date, $time ) = explode( ' ', trim($str) ); + @list( $y, $m, $d ) = explode( ':', $date ); + + return strtotime( "{$y}-{$m}-{$d} {$time}" ); +} + +/** + * Get extended image metadata, exif or iptc as available. + * + * Retrieves the EXIF metadata aperture, credit, camera, caption, copyright, iso + * created_timestamp, focal_length, shutter_speed, and title. + * + * The IPTC metadata that is retrieved is APP13, credit, byline, created date + * and time, caption, copyright, and title. Also includes FNumber, Model, + * DateTimeDigitized, FocalLength, ISOSpeedRatings, and ExposureTime. + * + * @todo Try other exif libraries if available. + * @since 2.5.0 + * + * @param string $file + * @return bool|array False on failure. Image metadata array on success. + */ +function wp_read_image_metadata( $file ) { + if ( ! file_exists( $file ) ) + return false; + + list( , , $sourceImageType ) = getimagesize( $file ); + + // exif contains a bunch of data we'll probably never need formatted in ways + // that are difficult to use. We'll normalize it and just extract the fields + // that are likely to be useful. Fractions and numbers are converted to + // floats, dates to unix timestamps, and everything else to strings. + $meta = array( + 'aperture' => 0, + 'credit' => '', + 'camera' => '', + 'caption' => '', + 'created_timestamp' => 0, + 'copyright' => '', + 'focal_length' => 0, + 'iso' => 0, + 'shutter_speed' => 0, + 'title' => '', + ); + + // read iptc first, since it might contain data not available in exif such + // as caption, description etc + if ( is_callable( 'iptcparse' ) ) { + getimagesize( $file, $info ); + + if ( ! empty( $info['APP13'] ) ) { + $iptc = iptcparse( $info['APP13'] ); + + // headline, "A brief synopsis of the caption." + if ( ! empty( $iptc['2#105'][0] ) ) + $meta['title'] = trim( $iptc['2#105'][0] ); + // title, "Many use the Title field to store the filename of the image, though the field may be used in many ways." + elseif ( ! empty( $iptc['2#005'][0] ) ) + $meta['title'] = trim( $iptc['2#005'][0] ); + + if ( ! empty( $iptc['2#120'][0] ) ) { // description / legacy caption + $caption = trim( $iptc['2#120'][0] ); + if ( empty( $meta['title'] ) ) { + // Assume the title is stored in 2:120 if it's short. + if ( strlen( $caption ) < 80 ) + $meta['title'] = $caption; + else + $meta['caption'] = $caption; + } elseif ( $caption != $meta['title'] ) { + $meta['caption'] = $caption; + } + } + + if ( ! empty( $iptc['2#110'][0] ) ) // credit + $meta['credit'] = trim( $iptc['2#110'][0] ); + elseif ( ! empty( $iptc['2#080'][0] ) ) // creator / legacy byline + $meta['credit'] = trim( $iptc['2#080'][0] ); + + if ( ! empty( $iptc['2#055'][0] ) and ! empty( $iptc['2#060'][0] ) ) // created date and time + $meta['created_timestamp'] = strtotime( $iptc['2#055'][0] . ' ' . $iptc['2#060'][0] ); + + if ( ! empty( $iptc['2#116'][0] ) ) // copyright + $meta['copyright'] = trim( $iptc['2#116'][0] ); + } + } + + // fetch additional info from exif if available + if ( is_callable( 'exif_read_data' ) && in_array( $sourceImageType, apply_filters( 'wp_read_image_metadata_types', array( IMAGETYPE_JPEG, IMAGETYPE_TIFF_II, IMAGETYPE_TIFF_MM ) ) ) ) { + $exif = @exif_read_data( $file ); + + if ( !empty( $exif['Title'] ) ) + $meta['title'] = trim( $exif['Title'] ); + + if ( ! empty( $exif['ImageDescription'] ) ) { + if ( empty( $meta['title'] ) && strlen( $exif['ImageDescription'] ) < 80 ) { + // Assume the title is stored in ImageDescription + $meta['title'] = trim( $exif['ImageDescription'] ); + if ( ! empty( $exif['COMPUTED']['UserComment'] ) && trim( $exif['COMPUTED']['UserComment'] ) != $meta['title'] ) + $meta['caption'] = trim( $exif['COMPUTED']['UserComment'] ); + } elseif ( trim( $exif['ImageDescription'] ) != $meta['title'] ) { + $meta['caption'] = trim( $exif['ImageDescription'] ); + } + } elseif ( ! empty( $exif['Comments'] ) && trim( $exif['Comments'] ) != $meta['title'] ) { + $meta['caption'] = trim( $exif['Comments'] ); + } + + if ( ! empty( $exif['Artist'] ) ) + $meta['credit'] = trim( $exif['Artist'] ); + elseif ( ! empty($exif['Author'] ) ) + $meta['credit'] = trim( $exif['Author'] ); + + if ( ! empty( $exif['Copyright'] ) ) + $meta['copyright'] = trim( $exif['Copyright'] ); + if ( ! empty($exif['FNumber'] ) ) + $meta['aperture'] = round( wp_exif_frac2dec( $exif['FNumber'] ), 2 ); + if ( ! empty($exif['Model'] ) ) + $meta['camera'] = trim( $exif['Model'] ); + if ( ! empty($exif['DateTimeDigitized'] ) ) + $meta['created_timestamp'] = wp_exif_date2ts($exif['DateTimeDigitized'] ); + if ( ! empty($exif['FocalLength'] ) ) + $meta['focal_length'] = (string) wp_exif_frac2dec( $exif['FocalLength'] ); + if ( ! empty($exif['ISOSpeedRatings'] ) ) { + $meta['iso'] = is_array( $exif['ISOSpeedRatings'] ) ? reset( $exif['ISOSpeedRatings'] ) : $exif['ISOSpeedRatings']; + $meta['iso'] = trim( $meta['iso'] ); + } + if ( ! empty($exif['ExposureTime'] ) ) + $meta['shutter_speed'] = (string) wp_exif_frac2dec( $exif['ExposureTime'] ); + } + + foreach ( array( 'title', 'caption', 'credit', 'copyright', 'camera', 'iso' ) as $key ) { + if ( $meta[ $key ] && ! seems_utf8( $meta[ $key ] ) ) + $meta[ $key ] = utf8_encode( $meta[ $key ] ); + } + + return apply_filters( 'wp_read_image_metadata', $meta, $file, $sourceImageType ); + +} + +/** + * Validate that file is an image. + * + * @since 2.5.0 + * + * @param string $path File path to test if valid image. + * @return bool True if valid image, false if not valid image. + */ +function file_is_valid_image($path) { + $size = @getimagesize($path); + return !empty($size); +} + +/** + * Validate that file is suitable for displaying within a web page. + * + * @since 2.5.0 + * @uses apply_filters() Calls 'file_is_displayable_image' on $result and $path. + * + * @param string $path File path to test. + * @return bool True if suitable, false if not suitable. + */ +function file_is_displayable_image($path) { + $info = @getimagesize($path); + if ( empty($info) ) + $result = false; + elseif ( !in_array($info[2], array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG)) ) // only gif, jpeg and png images can reliably be displayed + $result = false; + else + $result = true; + + return apply_filters('file_is_displayable_image', $result, $path); +} + +/** + * Load an image resource for editing. + * + * @since 2.9.0 + * + * @param string $attachment_id Attachment ID. + * @param string $mime_type Image mime type. + * @param string $size Optional. Image size, defaults to 'full'. + * @return resource|false The resulting image resource on success, false on failure. + */ +function load_image_to_edit( $attachment_id, $mime_type, $size = 'full' ) { + $filepath = _load_image_to_edit_path( $attachment_id, $size ); + if ( empty( $filepath ) ) + return false; + + switch ( $mime_type ) { + case 'image/jpeg': + $image = imagecreatefromjpeg($filepath); + break; + case 'image/png': + $image = imagecreatefrompng($filepath); + break; + case 'image/gif': + $image = imagecreatefromgif($filepath); + break; + default: + $image = false; + break; + } + if ( is_resource($image) ) { + $image = apply_filters('load_image_to_edit', $image, $attachment_id, $size); + if ( function_exists('imagealphablending') && function_exists('imagesavealpha') ) { + imagealphablending($image, false); + imagesavealpha($image, true); + } + } + return $image; +} + +/** + * Retrieve the path or url of an attachment's attached file. + * + * If the attached file is not present on the local filesystem (usually due to replication plugins), + * then the url of the file is returned if url fopen is supported. + * + * @since 3.4.0 + * @access private + * + * @param string $attachment_id Attachment ID. + * @param string $size Optional. Image size, defaults to 'full'. + * @return string|false File path or url on success, false on failure. + */ +function _load_image_to_edit_path( $attachment_id, $size = 'full' ) { + $filepath = get_attached_file( $attachment_id ); + + if ( $filepath && file_exists( $filepath ) ) { + if ( 'full' != $size && ( $data = image_get_intermediate_size( $attachment_id, $size ) ) ) { + $filepath = apply_filters( 'load_image_to_edit_filesystempath', path_join( dirname( $filepath ), $data['file'] ), $attachment_id, $size ); + } + } elseif ( function_exists( 'fopen' ) && function_exists( 'ini_get' ) && true == ini_get( 'allow_url_fopen' ) ) { + $filepath = apply_filters( 'load_image_to_edit_attachmenturl', wp_get_attachment_url( $attachment_id ), $attachment_id, $size ); + } + + return apply_filters( 'load_image_to_edit_path', $filepath, $attachment_id, $size ); +} + +/** + * Copy an existing image file. + * + * @since 3.4.0 + * @access private + * + * @param string $attachment_id Attachment ID. + * @return string|false New file path on success, false on failure. + */ +function _copy_image_file( $attachment_id ) { + $dst_file = $src_file = get_attached_file( $attachment_id ); + if ( ! file_exists( $src_file ) ) + $src_file = _load_image_to_edit_path( $attachment_id ); + + if ( $src_file ) { + $dst_file = str_replace( basename( $dst_file ), 'copy-' . basename( $dst_file ), $dst_file ); + $dst_file = dirname( $dst_file ) . '/' . wp_unique_filename( dirname( $dst_file ), basename( $dst_file ) ); + + // The directory containing the original file may no longer exist when + // using a replication plugin. + wp_mkdir_p( dirname( $dst_file ) ); + + if ( ! @copy( $src_file, $dst_file ) ) + $dst_file = false; + } else { + $dst_file = false; + } + + return $dst_file; +} diff --git a/src/wp-admin/includes/import.php b/src/wp-admin/includes/import.php new file mode 100644 index 0000000..590a54f --- /dev/null +++ b/src/wp-admin/includes/import.php @@ -0,0 +1,186 @@ + false, 'test_type' => false ); + $_FILES['import']['name'] .= '.txt'; + $file = wp_handle_upload( $_FILES['import'], $overrides ); + + if ( isset( $file['error'] ) ) + return $file; + + $url = $file['url']; + $type = $file['type']; + $file = $file['file']; + $filename = basename( $file ); + + // Construct the object array + $object = array( 'post_title' => $filename, + 'post_content' => $url, + 'post_mime_type' => $type, + 'guid' => $url, + 'context' => 'import', + 'post_status' => 'private' + ); + + // Save the data + $id = wp_insert_attachment( $object, $file ); + + // schedule a cleanup for one day from now in case of failed import or missing wp_import_cleanup() call + wp_schedule_single_event( time() + DAY_IN_SECONDS, 'importer_scheduled_cleanup', array( $id ) ); + + return array( 'file' => $file, 'id' => $id ); +} + +/** + * Returns a list from WordPress.org of popular importer plugins. + * + * @since 3.5.0 + * + * @return array Importers with metadata for each. + */ +function wp_get_popular_importers() { + include ABSPATH . WPINC . '/version.php'; // include an unmodified $wp_version + + $locale = get_locale(); + $popular_importers = get_site_transient( 'popular_importers_' . $locale ); + + if ( ! $popular_importers ) { + $url = add_query_arg( 'locale', get_locale(), 'http://api.wordpress.org/core/importers/1.1/' ); + $options = array( 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url() ); + $response = wp_remote_get( $url, $options ); + $popular_importers = json_decode( wp_remote_retrieve_body( $response ), true ); + + if ( is_array( $popular_importers ) ) + set_site_transient( 'popular_importers_' . $locale, $popular_importers, 2 * DAY_IN_SECONDS ); + else + $popular_importers = false; + } + + if ( is_array( $popular_importers ) ) { + // If the data was received as translated, return it as-is. + if ( $popular_importers['translated'] ) + return $popular_importers['importers']; + + foreach ( $popular_importers['importers'] as &$importer ) { + $importer['description'] = translate( $importer['description'] ); + if ( $importer['name'] != 'WordPress' ) + $importer['name'] = translate( $importer['name'] ); + } + return $popular_importers['importers']; + } + + return array( + // slug => name, description, plugin slug, and register_importer() slug + 'blogger' => array( + 'name' => __( 'Blogger' ), + 'description' => __( 'Install the Blogger importer to import posts, comments, and users from a Blogger blog.' ), + 'plugin-slug' => 'blogger-importer', + 'importer-id' => 'blogger', + ), + 'wpcat2tag' => array( + 'name' => __( 'Categories and Tags Converter' ), + 'description' => __( 'Install the category/tag converter to convert existing categories to tags or tags to categories, selectively.' ), + 'plugin-slug' => 'wpcat2tag-importer', + 'importer-id' => 'wp-cat2tag', + ), + 'livejournal' => array( + 'name' => __( 'LiveJournal' ), + 'description' => __( 'Install the LiveJournal importer to import posts from LiveJournal using their API.' ), + 'plugin-slug' => 'livejournal-importer', + 'importer-id' => 'livejournal', + ), + 'movabletype' => array( + 'name' => __( 'Movable Type and TypePad' ), + 'description' => __( 'Install the Movable Type importer to import posts and comments from a Movable Type or TypePad blog.' ), + 'plugin-slug' => 'movabletype-importer', + 'importer-id' => 'mt', + ), + 'opml' => array( + 'name' => __( 'Blogroll' ), + 'description' => __( 'Install the blogroll importer to import links in OPML format.' ), + 'plugin-slug' => 'opml-importer', + 'importer-id' => 'opml', + ), + 'rss' => array( + 'name' => __( 'RSS' ), + 'description' => __( 'Install the RSS importer to import posts from an RSS feed.' ), + 'plugin-slug' => 'rss-importer', + 'importer-id' => 'rss', + ), + 'tumblr' => array( + 'name' => __( 'Tumblr' ), + 'description' => __( 'Install the Tumblr importer to import posts & media from Tumblr using their API.' ), + 'plugin-slug' => 'tumblr-importer', + 'importer-id' => 'tumblr', + ), + 'wordpress' => array( + 'name' => 'WordPress', + 'description' => __( 'Install the WordPress importer to import posts, pages, comments, custom fields, categories, and tags from a WordPress export file.' ), + 'plugin-slug' => 'wordpress-importer', + 'importer-id' => 'wordpress', + ), + ); +} diff --git a/src/wp-admin/includes/list-table.php b/src/wp-admin/includes/list-table.php new file mode 100644 index 0000000..2403ec8 --- /dev/null +++ b/src/wp-admin/includes/list-table.php @@ -0,0 +1,113 @@ + 'posts', + 'WP_Media_List_Table' => 'media', + 'WP_Terms_List_Table' => 'terms', + 'WP_Users_List_Table' => 'users', + 'WP_Comments_List_Table' => 'comments', + 'WP_Post_Comments_List_Table' => 'comments', + 'WP_Links_List_Table' => 'links', + 'WP_Plugin_Install_List_Table' => 'plugin-install', + 'WP_Themes_List_Table' => 'themes', + 'WP_Theme_Install_List_Table' => array( 'themes', 'theme-install' ), + 'WP_Plugins_List_Table' => 'plugins', + // Network Admin + 'WP_MS_Sites_List_Table' => 'ms-sites', + 'WP_MS_Users_List_Table' => 'ms-users', + 'WP_MS_Themes_List_Table' => 'ms-themes', + ); + + if ( isset( $core_classes[ $class ] ) ) { + foreach ( (array) $core_classes[ $class ] as $required ) + require_once( ABSPATH . 'wp-admin/includes/class-wp-' . $required . '-list-table.php' ); + + if ( isset( $args['screen'] ) ) + $args['screen'] = convert_to_screen( $args['screen'] ); + elseif ( isset( $GLOBALS['hook_suffix'] ) ) + $args['screen'] = get_current_screen(); + else + $args['screen'] = null; + + return new $class( $args ); + } + + return false; +} + +/** + * Register column headers for a particular screen. + * + * @since 2.7.0 + * + * @param string $screen The handle for the screen to add help to. This is usually the hook name returned by the add_*_page() functions. + * @param array $columns An array of columns with column IDs as the keys and translated column names as the values + * @see get_column_headers(), print_column_headers(), get_hidden_columns() + */ +function register_column_headers($screen, $columns) { + $wp_list_table = new _WP_List_Table_Compat($screen, $columns); +} + +/** + * Prints column headers for a particular screen. + * + * @since 2.7.0 + */ +function print_column_headers($screen, $id = true) { + $wp_list_table = new _WP_List_Table_Compat($screen); + + $wp_list_table->print_column_headers($id); +} + +/** + * Helper class to be used only by back compat functions + * + * @since 3.1.0 + */ +class _WP_List_Table_Compat extends WP_List_Table { + var $_screen; + var $_columns; + + function _WP_List_Table_Compat( $screen, $columns = array() ) { + if ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + $this->_screen = $screen; + + if ( !empty( $columns ) ) { + $this->_columns = $columns; + add_filter( 'manage_' . $screen->id . '_columns', array( $this, 'get_columns' ), 0 ); + } + } + + function get_column_info() { + $columns = get_column_headers( $this->_screen ); + $hidden = get_hidden_columns( $this->_screen ); + $sortable = array(); + + return array( $columns, $hidden, $sortable ); + } + + function get_columns() { + return $this->_columns; + } +} diff --git a/src/wp-admin/includes/media.php b/src/wp-admin/includes/media.php new file mode 100644 index 0000000..e2f78d6 --- /dev/null +++ b/src/wp-admin/includes/media.php @@ -0,0 +1,2708 @@ + __('From Computer'), // handler action suffix => tab text + 'type_url' => __('From URL'), + 'gallery' => __('Gallery'), + 'library' => __('Media Library') + ); + + return apply_filters('media_upload_tabs', $_default_tabs); +} + +/** + * Adds the gallery tab back to the tabs array if post has image attachments + * + * @since 2.5.0 + * + * @param array $tabs + * @return array $tabs with gallery if post has image attachment + */ +function update_gallery_tab($tabs) { + global $wpdb; + + if ( !isset($_REQUEST['post_id']) ) { + unset($tabs['gallery']); + return $tabs; + } + + $post_id = intval($_REQUEST['post_id']); + + if ( $post_id ) + $attachments = intval( $wpdb->get_var( $wpdb->prepare( "SELECT count(*) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent = %d", $post_id ) ) ); + + if ( empty($attachments) ) { + unset($tabs['gallery']); + return $tabs; + } + + $tabs['gallery'] = sprintf(__('Gallery (%s)'), "$attachments"); + + return $tabs; +} +add_filter('media_upload_tabs', 'update_gallery_tab'); + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + */ +function the_media_upload_tabs() { + global $redir_tab; + $tabs = media_upload_tabs(); + $default = 'type'; + + if ( !empty($tabs) ) { + echo "
      \n"; + if ( isset($redir_tab) && array_key_exists($redir_tab, $tabs) ) + $current = $redir_tab; + elseif ( isset($_GET['tab']) && array_key_exists($_GET['tab'], $tabs) ) + $current = $_GET['tab']; + else + $current = apply_filters('media_upload_default_tab', $default); + + foreach ( $tabs as $callback => $text ) { + $class = ''; + + if ( $current == $callback ) + $class = " class='current'"; + + $href = add_query_arg(array('tab' => $callback, 's' => false, 'paged' => false, 'post_mime_type' => false, 'm' => false)); + $link = "$text"; + echo "\t
    • $link
    • \n"; + } + echo "
    \n"; + } +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param integer $id image attachment id + * @param string $caption image caption + * @param string $alt image alt attribute + * @param string $title image title attribute + * @param string $align image css alignment property + * @param string $url image src url + * @param string|bool $rel image rel attribute + * @param string $size image size (thumbnail, medium, large, full or added with add_image_size() ) + * @return string the html to insert into editor + */ +function get_image_send_to_editor($id, $caption, $title, $align, $url='', $rel = false, $size='medium', $alt = '') { + + $html = get_image_tag($id, $alt, '', $align, $size); + + $rel = $rel ? ' rel="attachment wp-att-' . esc_attr($id).'"' : ''; + + if ( $url ) + $html = '$html"; + + $html = apply_filters( 'image_send_to_editor', $html, $id, $caption, $title, $align, $url, $size, $alt ); + + return $html; +} + +/** + * Adds image shortcode with caption to editor + * + * @since 2.6.0 + * + * @param string $html + * @param integer $id + * @param string $caption image caption + * @param string $alt image alt attribute + * @param string $title image title attribute + * @param string $align image css alignment property + * @param string $url image src url + * @param string $size image size (thumbnail, medium, large, full or added with add_image_size() ) + * @return string + */ +function image_add_caption( $html, $id, $caption, $title, $align, $url, $size, $alt = '' ) { + + if ( empty($caption) || apply_filters( 'disable_captions', '' ) ) + return $html; + + $id = ( 0 < (int) $id ) ? 'attachment_' . $id : ''; + + if ( ! preg_match( '/width=["\']([0-9]+)/', $html, $matches ) ) + return $html; + + $width = $matches[1]; + + $caption = str_replace( array("\r\n", "\r"), "\n", $caption); + $caption = preg_replace_callback( '/<[a-zA-Z0-9]+(?: [^<>]+>)*/', '_cleanup_image_add_caption', $caption ); + // convert any remaining line breaks to
    + $caption = preg_replace( '/[ \n\t]*\n[ \t]*/', '
    ', $caption ); + + $html = preg_replace( '/(class=["\'][^\'"]*)align(none|left|right|center)\s?/', '$1', $html ); + if ( empty($align) ) + $align = 'none'; + + $shcode = '[caption id="' . $id . '" align="align' . $align . '" width="' . $width . '"]' . $html . ' ' . $caption . '[/caption]'; + + return apply_filters( 'image_add_caption_shortcode', $shcode, $html ); +} +add_filter( 'image_send_to_editor', 'image_add_caption', 20, 8 ); + +/** + * Private preg_replace callback used in image_add_caption() + * + * @access private + * @since 3.4.0 + */ +function _cleanup_image_add_caption( $matches ) { + // remove any line breaks from inside the tags + return preg_replace( '/[\r\n\t]+/', ' ', $matches[0] ); +} + +/** + * Adds image html to editor + * + * @since 2.5.0 + * + * @param string $html + */ +function media_send_to_editor($html) { +?> + + false )) { + + $time = current_time('mysql'); + if ( $post = get_post($post_id) ) { + if ( substr( $post->post_date, 0, 4 ) > 0 ) + $time = $post->post_date; + } + + $name = $_FILES[$file_id]['name']; + $file = wp_handle_upload($_FILES[$file_id], $overrides, $time); + + if ( isset($file['error']) ) + return new WP_Error( 'upload_error', $file['error'] ); + + $name_parts = pathinfo($name); + $name = trim( substr( $name, 0, -(1 + strlen($name_parts['extension'])) ) ); + + $url = $file['url']; + $type = $file['type']; + $file = $file['file']; + $title = $name; + $content = ''; + + if ( preg_match( '#^audio#', $type ) ) { + $meta = wp_read_audio_metadata( $file ); + + if ( ! empty( $meta['title'] ) ) + $title = $meta['title']; + + $content = ''; + + if ( ! empty( $title ) ) { + + if ( ! empty( $meta['album'] ) && ! empty( $meta['artist'] ) ) { + /* translators: 1: audio track title, 2: album title, 3: artist name */ + $content .= sprintf( __( '"%1$s" from %2$s by %3$s.' ), $title, $meta['album'], $meta['artist'] ); + } else if ( ! empty( $meta['album'] ) ) { + /* translators: 1: audio track title, 2: album title */ + $content .= sprintf( __( '"%1$s" from %2$s.' ), $title, $meta['album'] ); + } else if ( ! empty( $meta['artist'] ) ) { + /* translators: 1: audio track title, 2: artist name */ + $content .= sprintf( __( '"%1$s" by %2$s.' ), $title, $meta['artist'] ); + } else { + $content .= sprintf( __( '"%s".' ), $title ); + } + + } else if ( ! empty( $meta['album'] ) ) { + + if ( ! empty( $meta['artist'] ) ) { + /* translators: 1: audio album title, 2: artist name */ + $content .= sprintf( __( '%1$s by %2$s.' ), $meta['album'], $meta['artist'] ); + } else { + $content .= $meta['album'] . '.'; + } + + } else if ( ! empty( $meta['artist'] ) ) { + + $content .= $meta['artist'] . '.'; + + } + + if ( ! empty( $meta['year'] ) ) + $content .= ' ' . sprintf( __( 'Released: %d.' ), $meta['year'] ); + + if ( ! empty( $meta['track_number'] ) ) { + $track_number = explode( '/', $meta['track_number'] ); + if ( isset( $track_number[1] ) ) + $content .= ' ' . sprintf( __( 'Track %1$s of %2$s.' ), number_format_i18n( $track_number[0] ), number_format_i18n( $track_number[1] ) ); + else + $content .= ' ' . sprintf( __( 'Track %1$s.' ), number_format_i18n( $track_number[0] ) ); + } + + if ( ! empty( $meta['genre'] ) ) + $content .= ' ' . sprintf( __( 'Genre: %s.' ), $meta['genre'] ); + + // use image exif/iptc data for title and caption defaults if possible + } elseif ( $image_meta = @wp_read_image_metadata( $file ) ) { + if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) + $title = $image_meta['title']; + if ( trim( $image_meta['caption'] ) ) + $content = $image_meta['caption']; + } + + // Construct the attachment array + $attachment = array_merge( array( + 'post_mime_type' => $type, + 'guid' => $url, + 'post_parent' => $post_id, + 'post_title' => $title, + 'post_content' => $content, + ), $post_data ); + + // This should never be set as it would then overwrite an existing attachment. + if ( isset( $attachment['ID'] ) ) + unset( $attachment['ID'] ); + + // Save the data + $id = wp_insert_attachment($attachment, $file, $post_id); + if ( !is_wp_error($id) ) { + wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); + } + + return $id; + +} + +/** + * This handles a sideloaded file in the same way as an uploaded file is handled by {@link media_handle_upload()} + * + * @since 2.6.0 + * + * @param array $file_array Array similar to a {@link $_FILES} upload array + * @param int $post_id The post ID the media is associated with + * @param string $desc Description of the sideloaded file + * @param array $post_data allows you to overwrite some of the attachment + * @return int|object The ID of the attachment or a WP_Error on failure + */ +function media_handle_sideload($file_array, $post_id, $desc = null, $post_data = array()) { + $overrides = array('test_form'=>false); + + $time = current_time( 'mysql' ); + if ( $post = get_post( $post_id ) ) { + if ( substr( $post->post_date, 0, 4 ) > 0 ) + $time = $post->post_date; + } + + $file = wp_handle_sideload( $file_array, $overrides, $time ); + if ( isset($file['error']) ) + return new WP_Error( 'upload_error', $file['error'] ); + + $url = $file['url']; + $type = $file['type']; + $file = $file['file']; + $title = preg_replace('/\.[^.]+$/', '', basename($file)); + $content = ''; + + // use image exif/iptc data for title and caption defaults if possible + if ( $image_meta = @wp_read_image_metadata($file) ) { + if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) + $title = $image_meta['title']; + if ( trim( $image_meta['caption'] ) ) + $content = $image_meta['caption']; + } + + if ( isset( $desc ) ) + $title = $desc; + + // Construct the attachment array + $attachment = array_merge( array( + 'post_mime_type' => $type, + 'guid' => $url, + 'post_parent' => $post_id, + 'post_title' => $title, + 'post_content' => $content, + ), $post_data ); + + // This should never be set as it would then overwrite an existing attachment. + if ( isset( $attachment['ID'] ) ) + unset( $attachment['ID'] ); + + // Save the attachment metadata + $id = wp_insert_attachment($attachment, $file, $post_id); + if ( !is_wp_error($id) ) + wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); + + return $id; +} + +/** + * Adds the iframe to display content for the media upload page + * + * @since 2.5.0 + * + * @param array $content_func + */ +function wp_iframe($content_func /* ... */) { + _wp_admin_html_begin(); +?> +<?php bloginfo('name') ?> › <?php _e('Uploads'); ?> — <?php _e('WordPress'); ?> + + + + + class="wp-core-ui no-js"> + + + + + + $post + ) ); + + $img = ' '; + + echo '' . $img . __( 'Add Media' ) . ''; + + // Don't use this filter. Want to add a button? Use the media_buttons action. + $legacy_filter = apply_filters('media_buttons_context', ''); // deprecated + + if ( $legacy_filter ) { + // #WP22559. Close if a plugin started by closing to open their own tag. + if ( 0 === stripos( trim( $legacy_filter ), '' ) ) + $legacy_filter .= ''; + echo $legacy_filter; + } +} +add_action( 'media_buttons', 'media_buttons' ); + +function get_upload_iframe_src( $type = null, $post_id = null, $tab = null ) { + global $post_ID; + + if ( empty( $post_id ) ) + $post_id = $post_ID; + + $upload_iframe_src = add_query_arg( 'post_id', (int) $post_id, admin_url('media-upload.php') ); + + if ( $type && 'media' != $type ) + $upload_iframe_src = add_query_arg('type', $type, $upload_iframe_src); + + if ( ! empty( $tab ) ) + $upload_iframe_src = add_query_arg('tab', $tab, $upload_iframe_src); + + $upload_iframe_src = apply_filters($type . '_upload_iframe_src', $upload_iframe_src); + + return add_query_arg('TB_iframe', true, $upload_iframe_src); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @return mixed void|object WP_Error on failure + */ +function media_upload_form_handler() { + check_admin_referer('media-form'); + + $errors = null; + + if ( isset($_POST['send']) ) { + $keys = array_keys($_POST['send']); + $send_id = (int) array_shift($keys); + } + + if ( !empty($_POST['attachments']) ) foreach ( $_POST['attachments'] as $attachment_id => $attachment ) { + $post = $_post = get_post($attachment_id, ARRAY_A); + + if ( !current_user_can( 'edit_post', $attachment_id ) ) + continue; + + if ( isset($attachment['post_content']) ) + $post['post_content'] = $attachment['post_content']; + if ( isset($attachment['post_title']) ) + $post['post_title'] = $attachment['post_title']; + if ( isset($attachment['post_excerpt']) ) + $post['post_excerpt'] = $attachment['post_excerpt']; + if ( isset($attachment['menu_order']) ) + $post['menu_order'] = $attachment['menu_order']; + + if ( isset($send_id) && $attachment_id == $send_id ) { + if ( isset($attachment['post_parent']) ) + $post['post_parent'] = $attachment['post_parent']; + } + + $post = apply_filters('attachment_fields_to_save', $post, $attachment); + + if ( isset($attachment['image_alt']) ) { + $image_alt = wp_unslash( $attachment['image_alt'] ); + if ( $image_alt != get_post_meta($attachment_id, '_wp_attachment_image_alt', true) ) { + $image_alt = wp_strip_all_tags( $image_alt, true ); + // update_meta expects slashed + update_post_meta( $attachment_id, '_wp_attachment_image_alt', wp_slash( $image_alt ) ); + } + } + + if ( isset($post['errors']) ) { + $errors[$attachment_id] = $post['errors']; + unset($post['errors']); + } + + if ( $post != $_post ) + wp_update_post($post); + + foreach ( get_attachment_taxonomies($post) as $t ) { + if ( isset($attachment[$t]) ) + wp_set_object_terms($attachment_id, array_map('trim', preg_split('/,+/', $attachment[$t])), $t, false); + } + } + + if ( isset($_POST['insert-gallery']) || isset($_POST['update-gallery']) ) { ?> + + $html"; + } + + $html = apply_filters('media_send_to_editor', $html, $send_id, $attachment); + return media_send_to_editor($html); + } + + return $errors; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @return mixed + */ +function wp_media_upload_handler() { + $errors = array(); + $id = 0; + + if ( isset($_POST['html-upload']) && !empty($_FILES) ) { + check_admin_referer('media-form'); + // Upload File button was clicked + $id = media_handle_upload('async-upload', $_REQUEST['post_id']); + unset($_FILES); + if ( is_wp_error($id) ) { + $errors['upload_error'] = $id; + $id = false; + } + } + + if ( !empty($_POST['insertonlybutton']) ) { + $src = $_POST['src']; + if ( !empty($src) && !strpos($src, '://') ) + $src = "http://$src"; + + if ( isset( $_POST['media_type'] ) && 'image' != $_POST['media_type'] ) { + $title = esc_html( wp_unslash( $_POST['title'] ) ); + if ( empty( $title ) ) + $title = esc_html( basename( $src ) ); + + if ( $title && $src ) + $html = "$title"; + + $type = 'file'; + if ( ( $ext = preg_replace( '/^.+?\.([^.]+)$/', '$1', $src ) ) && ( $ext_type = wp_ext2type( $ext ) ) + && ( 'audio' == $ext_type || 'video' == $ext_type ) ) + $type = $ext_type; + + $html = apply_filters( $type . '_send_to_editor_url', $html, esc_url_raw( $src ), $title ); + } else { + $align = ''; + $alt = esc_attr( wp_unslash( $_POST['alt'] ) ); + if ( isset($_POST['align']) ) { + $align = esc_attr( wp_unslash( $_POST['align'] ) ); + $class = " class='align$align'"; + } + if ( !empty($src) ) + $html = "$alt"; + + $html = apply_filters( 'image_send_to_editor_url', $html, esc_url_raw( $src ), $alt, $align ); + } + + return media_send_to_editor($html); + } + + if ( !empty($_POST) ) { + $return = media_upload_form_handler(); + + if ( is_string($return) ) + return $return; + if ( is_array($return) ) + $errors = $return; + } + + if ( isset($_POST['save']) ) { + $errors['upload_notice'] = __('Saved.'); + return media_upload_gallery(); + } + + if ( isset($_GET['tab']) && $_GET['tab'] == 'type_url' ) { + $type = 'image'; + if ( isset( $_GET['type'] ) && in_array( $_GET['type'], array( 'video', 'audio', 'file' ) ) ) + $type = $_GET['type']; + return wp_iframe( 'media_upload_type_url_form', $type, $errors, $id ); + } + + return wp_iframe( 'media_upload_type_form', 'image', $errors, $id ); +} + +/** + * Download an image from the specified URL and attach it to a post. + * + * @since 2.6.0 + * + * @param string $file The URL of the image to download + * @param int $post_id The post ID the media is to be associated with + * @param string $desc Optional. Description of the image + * @return string|WP_Error Populated HTML img tag on success + */ +function media_sideload_image($file, $post_id, $desc = null) { + if ( ! empty($file) ) { + // Download file to temp location + $tmp = download_url( $file ); + + // Set variables for storage + // fix file filename for query strings + preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $file, $matches ); + $file_array['name'] = basename($matches[0]); + $file_array['tmp_name'] = $tmp; + + // If error storing temporarily, unlink + if ( is_wp_error( $tmp ) ) { + @unlink($file_array['tmp_name']); + $file_array['tmp_name'] = ''; + } + + // do the validation and storage stuff + $id = media_handle_sideload( $file_array, $post_id, $desc ); + // If error storing permanently, unlink + if ( is_wp_error($id) ) { + @unlink($file_array['tmp_name']); + return $id; + } + + $src = wp_get_attachment_url( $id ); + } + + // Finally check to make sure the file has been saved, then return the html + if ( ! empty($src) ) { + $alt = isset($desc) ? esc_attr($desc) : ''; + $html = "$alt"; + return $html; + } +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @return unknown + */ +function media_upload_gallery() { + $errors = array(); + + if ( !empty($_POST) ) { + $return = media_upload_form_handler(); + + if ( is_string($return) ) + return $return; + if ( is_array($return) ) + $errors = $return; + } + + wp_enqueue_script('admin-gallery'); + return wp_iframe( 'media_upload_gallery_form', $errors ); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @return unknown + */ +function media_upload_library() { + $errors = array(); + if ( !empty($_POST) ) { + $return = media_upload_form_handler(); + + if ( is_string($return) ) + return $return; + if ( is_array($return) ) + $errors = $return; + } + + return wp_iframe( 'media_upload_library_form', $errors ); +} + +/** + * Retrieve HTML for the image alignment radio buttons with the specified one checked. + * + * @since 2.7.0 + * + * @param object $post + * @param string $checked + * @return string + */ +function image_align_input_fields( $post, $checked = '' ) { + + if ( empty($checked) ) + $checked = get_user_setting('align', 'none'); + + $alignments = array('none' => __('None'), 'left' => __('Left'), 'center' => __('Center'), 'right' => __('Right')); + if ( !array_key_exists( (string) $checked, $alignments ) ) + $checked = 'none'; + + $out = array(); + foreach ( $alignments as $name => $label ) { + $name = esc_attr($name); + $out[] = ""; + } + return join("\n", $out); +} + +/** + * Retrieve HTML for the size radio buttons with the specified one checked. + * + * @since 2.7.0 + * + * @param object $post + * @param bool|string $check + * @return array + */ +function image_size_input_fields( $post, $check = '' ) { + + // get a list of the actual pixel dimensions of each possible intermediate version of this image + $size_names = apply_filters( 'image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size')) ); + + if ( empty($check) ) + $check = get_user_setting('imgsize', 'medium'); + + foreach ( $size_names as $size => $label ) { + $downsize = image_downsize($post->ID, $size); + $checked = ''; + + // is this size selectable? + $enabled = ( $downsize[3] || 'full' == $size ); + $css_id = "image-size-{$size}-{$post->ID}"; + // if this size is the default but that's not available, don't select it + if ( $size == $check ) { + if ( $enabled ) + $checked = " checked='checked'"; + else + $check = ''; + } elseif ( !$check && $enabled && 'thumbnail' != $size ) { + // if $check is not enabled, default to the first available size that's bigger than a thumbnail + $check = $size; + $checked = " checked='checked'"; + } + + $html = "
    "; + + $html .= ""; + // only show the dimensions if that choice is available + if ( $enabled ) + $html .= " "; + + $html .= '
    '; + + $out[] = $html; + } + + return array( + 'label' => __('Size'), + 'input' => 'html', + 'html' => join("\n", $out), + ); +} + +/** + * Retrieve HTML for the Link URL buttons with the default link type as specified. + * + * @since 2.7.0 + * + * @param object $post + * @param string $url_type + * @return string + */ +function image_link_input_fields($post, $url_type = '') { + + $file = wp_get_attachment_url($post->ID); + $link = get_attachment_link($post->ID); + + if ( empty($url_type) ) + $url_type = get_user_setting('urlbutton', 'post'); + + $url = ''; + if ( $url_type == 'file' ) + $url = $file; + elseif ( $url_type == 'post' ) + $url = $link; + + return " +
    + + + +"; +} + +function wp_caption_input_textarea($edit_post) { + // post data is already escaped + $name = "attachments[{$edit_post->ID}][post_excerpt]"; + + return ''; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param array $form_fields + * @param object $post + * @return array + */ +function image_attachment_fields_to_edit($form_fields, $post) { + return $form_fields; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param array $form_fields + * @param object $post {@internal $post not used}} + * @return array + */ +function media_single_attachment_fields_to_edit( $form_fields, $post ) { + unset($form_fields['url'], $form_fields['align'], $form_fields['image-size']); + return $form_fields; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.8.0 + * + * @param array $form_fields + * @param object $post {@internal $post not used}} + * @return array + */ +function media_post_single_attachment_fields_to_edit( $form_fields, $post ) { + unset($form_fields['image_url']); + return $form_fields; +} + +/** + * Filters input from media_upload_form_handler() and assigns a default + * post_title from the file name if none supplied. + * + * Illustrates the use of the attachment_fields_to_save filter + * which can be used to add default values to any field before saving to DB. + * + * @since 2.5.0 + * + * @param object $post + * @param array $attachment {@internal $attachment not used}} + * @return array + */ +function image_attachment_fields_to_save( $post, $attachment ) { + if ( substr( $post['post_mime_type'], 0, 5 ) == 'image' ) { + if ( strlen( trim( $post['post_title'] ) ) == 0 ) { + $attachment_url = ( isset( $post['attachment_url'] ) ) ? $post['attachment_url'] : $post['guid']; + $post['post_title'] = preg_replace( '/\.\w+$/', '', wp_basename( $attachment_url ) ); + $post['errors']['post_title']['errors'][] = __( 'Empty Title filled from filename.' ); + } + } + + return $post; +} + +add_filter( 'attachment_fields_to_save', 'image_attachment_fields_to_save', 10, 2 ); + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param string $html + * @param integer $attachment_id + * @param array $attachment + * @return array + */ +function image_media_send_to_editor($html, $attachment_id, $attachment) { + $post = get_post($attachment_id); + if ( substr($post->post_mime_type, 0, 5) == 'image' ) { + $url = $attachment['url']; + $align = !empty($attachment['align']) ? $attachment['align'] : 'none'; + $size = !empty($attachment['image-size']) ? $attachment['image-size'] : 'medium'; + $alt = !empty($attachment['image_alt']) ? $attachment['image_alt'] : ''; + $rel = ( $url == get_attachment_link($attachment_id) ); + + return get_image_send_to_editor($attachment_id, $attachment['post_excerpt'], $attachment['post_title'], $align, $url, $rel, $size, $alt); + } + + return $html; +} + +add_filter('media_send_to_editor', 'image_media_send_to_editor', 10, 3); + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param object $post + * @param array $errors + * @return array + */ +function get_attachment_fields_to_edit($post, $errors = null) { + if ( is_int($post) ) + $post = get_post($post); + if ( is_array($post) ) + $post = new WP_Post( (object) $post ); + + $image_url = wp_get_attachment_url($post->ID); + + $edit_post = sanitize_post($post, 'edit'); + + $form_fields = array( + 'post_title' => array( + 'label' => __('Title'), + 'value' => $edit_post->post_title + ), + 'image_alt' => array(), + 'post_excerpt' => array( + 'label' => __('Caption'), + 'input' => 'html', + 'html' => wp_caption_input_textarea($edit_post) + ), + 'post_content' => array( + 'label' => __('Description'), + 'value' => $edit_post->post_content, + 'input' => 'textarea' + ), + 'url' => array( + 'label' => __('Link URL'), + 'input' => 'html', + 'html' => image_link_input_fields($post, get_option('image_default_link_type')), + 'helps' => __('Enter a link URL or click above for presets.') + ), + 'menu_order' => array( + 'label' => __('Order'), + 'value' => $edit_post->menu_order + ), + 'image_url' => array( + 'label' => __('File URL'), + 'input' => 'html', + 'html' => "
    ", + 'value' => wp_get_attachment_url($post->ID), + 'helps' => __('Location of the uploaded file.') + ) + ); + + foreach ( get_attachment_taxonomies($post) as $taxonomy ) { + $t = (array) get_taxonomy($taxonomy); + if ( ! $t['public'] || ! $t['show_ui'] ) + continue; + if ( empty($t['label']) ) + $t['label'] = $taxonomy; + if ( empty($t['args']) ) + $t['args'] = array(); + + $terms = get_object_term_cache($post->ID, $taxonomy); + if ( false === $terms ) + $terms = wp_get_object_terms($post->ID, $taxonomy, $t['args']); + + $values = array(); + + foreach ( $terms as $term ) + $values[] = $term->slug; + $t['value'] = join(', ', $values); + + $form_fields[$taxonomy] = $t; + } + + // Merge default fields with their errors, so any key passed with the error (e.g. 'error', 'helps', 'value') will replace the default + // The recursive merge is easily traversed with array casting: foreach( (array) $things as $thing ) + $form_fields = array_merge_recursive($form_fields, (array) $errors); + + // This was formerly in image_attachment_fields_to_edit(). + if ( substr($post->post_mime_type, 0, 5) == 'image' ) { + $alt = get_post_meta($post->ID, '_wp_attachment_image_alt', true); + if ( empty($alt) ) + $alt = ''; + + $form_fields['post_title']['required'] = true; + + $form_fields['image_alt'] = array( + 'value' => $alt, + 'label' => __('Alternative Text'), + 'helps' => __('Alt text for the image, e.g. “The Mona Lisa”') + ); + + $form_fields['align'] = array( + 'label' => __('Alignment'), + 'input' => 'html', + 'html' => image_align_input_fields($post, get_option('image_default_align')), + ); + + $form_fields['image-size'] = image_size_input_fields( $post, get_option('image_default_size', 'medium') ); + + } else { + unset( $form_fields['image_alt'] ); + } + + $form_fields = apply_filters('attachment_fields_to_edit', $form_fields, $post); + + return $form_fields; +} + +/** + * Retrieve HTML for media items of post gallery. + * + * The HTML markup retrieved will be created for the progress of SWF Upload + * component. Will also create link for showing and hiding the form to modify + * the image attachment. + * + * @since 2.5.0 + * + * @param int $post_id Optional. Post ID. + * @param array $errors Errors for attachment, if any. + * @return string + */ +function get_media_items( $post_id, $errors ) { + $attachments = array(); + if ( $post_id ) { + $post = get_post($post_id); + if ( $post && $post->post_type == 'attachment' ) + $attachments = array($post->ID => $post); + else + $attachments = get_children( array( 'post_parent' => $post_id, 'post_type' => 'attachment', 'orderby' => 'menu_order ASC, ID', 'order' => 'DESC') ); + } else { + if ( is_array($GLOBALS['wp_the_query']->posts) ) + foreach ( $GLOBALS['wp_the_query']->posts as $attachment ) + $attachments[$attachment->ID] = $attachment; + } + + $output = ''; + foreach ( (array) $attachments as $id => $attachment ) { + if ( $attachment->post_status == 'trash' ) + continue; + if ( $item = get_media_item( $id, array( 'errors' => isset($errors[$id]) ? $errors[$id] : null) ) ) + $output .= "\n
    $item\n
    "; + } + + return $output; +} + +/** + * Retrieve HTML form for modifying the image attachment. + * + * @since 2.5.0 + * + * @param int $attachment_id Attachment ID for modification. + * @param string|array $args Optional. Override defaults. + * @return string HTML form for attachment. + */ +function get_media_item( $attachment_id, $args = null ) { + global $redir_tab; + + if ( ( $attachment_id = intval( $attachment_id ) ) && $thumb_url = wp_get_attachment_image_src( $attachment_id, 'thumbnail', true ) ) + $thumb_url = $thumb_url[0]; + else + $thumb_url = false; + + $post = get_post( $attachment_id ); + $current_post_id = !empty( $_GET['post_id'] ) ? (int) $_GET['post_id'] : 0; + + $default_args = array( 'errors' => null, 'send' => $current_post_id ? post_type_supports( get_post_type( $current_post_id ), 'editor' ) : true, 'delete' => true, 'toggle' => true, 'show_title' => true ); + $args = wp_parse_args( $args, $default_args ); + $args = apply_filters( 'get_media_item_args', $args ); + extract( $args, EXTR_SKIP ); + + $toggle_on = __( 'Show' ); + $toggle_off = __( 'Hide' ); + + $filename = esc_html( wp_basename( $post->guid ) ); + $title = esc_attr( $post->post_title ); + + if ( $_tags = get_the_tags( $attachment_id ) ) { + foreach ( $_tags as $tag ) + $tags[] = $tag->name; + $tags = esc_attr( join( ', ', $tags ) ); + } + + $post_mime_types = get_post_mime_types(); + $keys = array_keys( wp_match_mime_types( array_keys( $post_mime_types ), $post->post_mime_type ) ); + $type = array_shift( $keys ); + $type_html = ""; + + $form_fields = get_attachment_fields_to_edit( $post, $errors ); + + if ( $toggle ) { + $class = empty( $errors ) ? 'startclosed' : 'startopen'; + $toggle_links = " + $toggle_on + $toggle_off"; + } else { + $class = ''; + $toggle_links = ''; + } + + $display_title = ( !empty( $title ) ) ? $title : $filename; // $title shouldn't ever be empty, but just in case + $display_title = $show_title ? "
    " . wp_html_excerpt( $display_title, 60, '…' ) . "
    " : ''; + + $gallery = ( ( isset( $_REQUEST['tab'] ) && 'gallery' == $_REQUEST['tab'] ) || ( isset( $redir_tab ) && 'gallery' == $redir_tab ) ); + $order = ''; + + foreach ( $form_fields as $key => $val ) { + if ( 'menu_order' == $key ) { + if ( $gallery ) + $order = ""; + else + $order = ""; + + unset( $form_fields['menu_order'] ); + break; + } + } + + $media_dims = ''; + $meta = wp_get_attachment_metadata( $post->ID ); + if ( isset( $meta['width'], $meta['height'] ) ) + $media_dims .= "{$meta['width']} × {$meta['height']} "; + $media_dims = apply_filters( 'media_meta', $media_dims, $post ); + + $image_edit_button = ''; + if ( wp_attachment_is_image( $post->ID ) && wp_image_editor_supports( array( 'mime_type' => $post->post_mime_type ) ) ) { + $nonce = wp_create_nonce( "image_editor-$post->ID" ); + $image_edit_button = " "; + } + + $attachment_url = get_permalink( $attachment_id ); + + $item = " + $type_html + $toggle_links + $order + $display_title + + + + + \n"; + + $item .= " + + + + \n"; + + $defaults = array( + 'input' => 'text', + 'required' => false, + 'value' => '', + 'extra_rows' => array(), + ); + + if ( $send ) + $send = get_submit_button( __( 'Insert into Post' ), 'button', "send[$attachment_id]", false ); + if ( $delete && current_user_can( 'delete_post', $attachment_id ) ) { + if ( !EMPTY_TRASH_DAYS ) { + $delete = "" . __( 'Delete Permanently' ) . ''; + } elseif ( !MEDIA_TRASH ) { + $delete = "" . __( 'Delete' ) . " + "; + } else { + $delete = "" . __( 'Move to Trash' ) . " + "; + } + } else { + $delete = ''; + } + + $thumbnail = ''; + $calling_post_id = 0; + if ( isset( $_GET['post_id'] ) ) + $calling_post_id = absint( $_GET['post_id'] ); + elseif ( isset( $_POST ) && count( $_POST ) ) // Like for async-upload where $_GET['post_id'] isn't set + $calling_post_id = $post->post_parent; + if ( 'image' == $type && $calling_post_id && current_theme_supports( 'post-thumbnails', get_post_type( $calling_post_id ) ) + && post_type_supports( get_post_type( $calling_post_id ), 'thumbnail' ) && get_post_thumbnail_id( $calling_post_id ) != $attachment_id ) { + $ajax_nonce = wp_create_nonce( "set_post_thumbnail-$calling_post_id" ); + $thumbnail = "" . esc_html__( "Use as featured image" ) . ""; + } + + if ( ( $send || $thumbnail || $delete ) && !isset( $form_fields['buttons'] ) ) + $form_fields['buttons'] = array( 'tr' => "\t\t\n" ); + + $hidden_fields = array(); + + foreach ( $form_fields as $id => $field ) { + if ( $id[0] == '_' ) + continue; + + if ( !empty( $field['tr'] ) ) { + $item .= $field['tr']; + continue; + } + + $field = array_merge( $defaults, $field ); + $name = "attachments[$attachment_id][$id]"; + + if ( $field['input'] == 'hidden' ) { + $hidden_fields[$name] = $field['value']; + continue; + } + + $required = $field['required'] ? '*' : ''; + $aria_required = $field['required'] ? " aria-required='true' " : ''; + $class = $id; + $class .= $field['required'] ? ' form-required' : ''; + + $item .= "\t\t\n\t\t\t\n\t\t\t\n\t\t\n"; + + $extra_rows = array(); + + if ( !empty( $field['errors'] ) ) + foreach ( array_unique( (array) $field['errors'] ) as $error ) + $extra_rows['error'][] = $error; + + if ( !empty( $field['extra_rows'] ) ) + foreach ( $field['extra_rows'] as $class => $rows ) + foreach ( (array) $rows as $html ) + $extra_rows[$class][] = $html; + + foreach ( $extra_rows as $class => $rows ) + foreach ( $rows as $html ) + $item .= "\t\t\n"; + } + + if ( !empty( $form_fields['_final'] ) ) + $item .= "\t\t\n"; + $item .= "\t\n"; + $item .= "\t
    +

    +

    $image_edit_button

    +
    +

    " . __('File name:') . " $filename

    +

    " . __('File type:') . " $post->post_mime_type

    +

    " . __('Upload date:') . " " . mysql2date( get_option('date_format'), $post->post_date ). '

    '; + if ( !empty( $media_dims ) ) + $item .= "

    " . __('Dimensions:') . " $media_dims

    \n"; + + $item .= "
    $send $thumbnail $delete
    "; + if ( !empty( $field[ $field['input'] ] ) ) + $item .= $field[ $field['input'] ]; + elseif ( $field['input'] == 'textarea' ) { + if ( 'post_content' == $id && user_can_richedit() ) { + // sanitize_post() skips the post_content when user_can_richedit + $field['value'] = htmlspecialchars( $field['value'], ENT_QUOTES ); + } + // post_excerpt is already escaped by sanitize_post() in get_attachment_fields_to_edit() + $item .= "'; + } else { + $item .= ""; + } + if ( !empty( $field['helps'] ) ) + $item .= "

    " . join( "

    \n

    ", array_unique( (array) $field['helps'] ) ) . '

    '; + $item .= "
    $html
    {$form_fields['_final']}
    \n"; + + foreach ( $hidden_fields as $name => $value ) + $item .= "\t\n"; + + if ( $post->post_parent < 1 && isset( $_REQUEST['post_id'] ) ) { + $parent = (int) $_REQUEST['post_id']; + $parent_name = "attachments[$attachment_id][post_parent]"; + $item .= "\t\n"; + } + + return $item; +} + +function get_compat_media_markup( $attachment_id, $args = null ) { + $post = get_post( $attachment_id ); + + $default_args = array( + 'errors' => null, + 'in_modal' => false, + ); + + $user_can_edit = current_user_can( 'edit_post', $attachment_id ); + + $args = wp_parse_args( $args, $default_args ); + $args = apply_filters( 'get_media_item_args', $args ); + + $form_fields = array(); + + if ( $args['in_modal'] ) { + foreach ( get_attachment_taxonomies($post) as $taxonomy ) { + $t = (array) get_taxonomy($taxonomy); + if ( ! $t['public'] || ! $t['show_ui'] ) + continue; + if ( empty($t['label']) ) + $t['label'] = $taxonomy; + if ( empty($t['args']) ) + $t['args'] = array(); + + $terms = get_object_term_cache($post->ID, $taxonomy); + if ( false === $terms ) + $terms = wp_get_object_terms($post->ID, $taxonomy, $t['args']); + + $values = array(); + + foreach ( $terms as $term ) + $values[] = $term->slug; + $t['value'] = join(', ', $values); + $t['taxonomy'] = true; + + $form_fields[$taxonomy] = $t; + } + } + + // Merge default fields with their errors, so any key passed with the error (e.g. 'error', 'helps', 'value') will replace the default + // The recursive merge is easily traversed with array casting: foreach( (array) $things as $thing ) + $form_fields = array_merge_recursive($form_fields, (array) $args['errors'] ); + + $form_fields = apply_filters( 'attachment_fields_to_edit', $form_fields, $post ); + + unset( $form_fields['image-size'], $form_fields['align'], $form_fields['image_alt'], + $form_fields['post_title'], $form_fields['post_excerpt'], $form_fields['post_content'], + $form_fields['url'], $form_fields['menu_order'], $form_fields['image_url'] ); + + $media_meta = apply_filters( 'media_meta', '', $post ); + + $defaults = array( + 'input' => 'text', + 'required' => false, + 'value' => '', + 'extra_rows' => array(), + 'show_in_edit' => true, + 'show_in_modal' => true, + ); + + $hidden_fields = array(); + + $item = ''; + foreach ( $form_fields as $id => $field ) { + if ( $id[0] == '_' ) + continue; + + $name = "attachments[$attachment_id][$id]"; + $id_attr = "attachments-$attachment_id-$id"; + + if ( !empty( $field['tr'] ) ) { + $item .= $field['tr']; + continue; + } + + $field = array_merge( $defaults, $field ); + + if ( ( ! $field['show_in_edit'] && ! $args['in_modal'] ) || ( ! $field['show_in_modal'] && $args['in_modal'] ) ) + continue; + + if ( $field['input'] == 'hidden' ) { + $hidden_fields[$name] = $field['value']; + continue; + } + + $readonly = ! $user_can_edit && ! empty( $field['taxonomy'] ) ? " readonly='readonly' " : ''; + $required = $field['required'] ? '*' : ''; + $aria_required = $field['required'] ? " aria-required='true' " : ''; + $class = 'compat-field-' . $id; + $class .= $field['required'] ? ' form-required' : ''; + + $item .= "\t\t"; + $item .= "\t\t\t"; + $item .= "\n\t\t\t"; + + if ( !empty( $field[ $field['input'] ] ) ) + $item .= $field[ $field['input'] ]; + elseif ( $field['input'] == 'textarea' ) { + if ( 'post_content' == $id && user_can_richedit() ) { + // sanitize_post() skips the post_content when user_can_richedit + $field['value'] = htmlspecialchars( $field['value'], ENT_QUOTES ); + } + $item .= "'; + } else { + $item .= ""; + } + if ( !empty( $field['helps'] ) ) + $item .= "

    " . join( "

    \n

    ", array_unique( (array) $field['helps'] ) ) . '

    '; + $item .= "\n\t\t\n"; + + $extra_rows = array(); + + if ( !empty( $field['errors'] ) ) + foreach ( array_unique( (array) $field['errors'] ) as $error ) + $extra_rows['error'][] = $error; + + if ( !empty( $field['extra_rows'] ) ) + foreach ( $field['extra_rows'] as $class => $rows ) + foreach ( (array) $rows as $html ) + $extra_rows[$class][] = $html; + + foreach ( $extra_rows as $class => $rows ) + foreach ( $rows as $html ) + $item .= "\t\t$html\n"; + } + + if ( !empty( $form_fields['_final'] ) ) + $item .= "\t\t{$form_fields['_final']}\n"; + if ( $item ) + $item = '' . $item . '
    '; + + foreach ( $hidden_fields as $hidden_field => $value ) { + $item .= '' . "\n"; + } + + if ( $item ) + $item = '' . $item; + + return array( + 'item' => $item, + 'meta' => $media_meta, + ); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + */ +function media_upload_header() { + $post_id = isset( $_REQUEST['post_id'] ) ? intval( $_REQUEST['post_id'] ) : 0; + echo '\n"; + if ( empty( $_GET['chromeless'] ) ) { + echo '
    '; + the_media_upload_tabs(); + echo '
    '; + } +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param unknown_type $errors + */ +function media_upload_form( $errors = null ) { + global $type, $tab, $is_IE, $is_opera; + + if ( ! _device_can_upload() ) { + echo '

    ' . sprintf( __('The web browser on your device cannot be used to upload files. You may be able to use the native app for your device instead.'), 'http://wordpress.org/mobile/' ) . '

    '; + return; + } + + $upload_action_url = admin_url('async-upload.php'); + $post_id = isset($_REQUEST['post_id']) ? intval($_REQUEST['post_id']) : 0; + $_type = isset($type) ? $type : ''; + $_tab = isset($tab) ? $tab : ''; + + $upload_size_unit = $max_upload_size = wp_max_upload_size(); + $sizes = array( 'KB', 'MB', 'GB' ); + + for ( $u = -1; $upload_size_unit > 1024 && $u < count( $sizes ) - 1; $u++ ) { + $upload_size_unit /= 1024; + } + + if ( $u < 0 ) { + $upload_size_unit = 0; + $u = 0; + } else { + $upload_size_unit = (int) $upload_size_unit; + } +?> + +
    +
    get_error_message(); + +?>
    + $post_id, + "_wpnonce" => wp_create_nonce('media-form'), + "type" => $_type, + "tab" => $_tab, + "short" => "1", +); + +$post_params = apply_filters( 'upload_post_params', $post_params ); // hook change! old name: 'swfupload_post_params' + +$plupload_init = array( + 'runtimes' => 'html5,silverlight,flash,html4', + 'browse_button' => 'plupload-browse-button', + 'container' => 'plupload-upload-ui', + 'drop_element' => 'drag-drop-area', + 'file_data_name' => 'async-upload', + 'multiple_queues' => true, + 'max_file_size' => $max_upload_size . 'b', + 'url' => $upload_action_url, + 'flash_swf_url' => includes_url('js/plupload/plupload.flash.swf'), + 'silverlight_xap_url' => includes_url('js/plupload/plupload.silverlight.xap'), + 'filters' => array( array('title' => __( 'Allowed Files' ), 'extensions' => '*') ), + 'multipart' => true, + 'urlstream_upload' => true, + 'multipart_params' => $post_params +); + +// Multi-file uploading doesn't currently work in iOS Safari, +// single-file allows the built-in camera to be used as source for images +if ( wp_is_mobile() ) + $plupload_init['multi_selection'] = false; + +$plupload_init = apply_filters( 'plupload_init', $plupload_init ); + +?> + + + +
    + +
    +
    +

    +

    +

    +
    +
    + +
    + +
    + +

    + + + + +

    +
    + +
    + + + 100 * 1024 * 1024 ) { ?> + + + +
    + + + + +

    + + + + +
    '.esc_html($id->get_error_message()).'
    '; + exit; + } +} +?>
    + +

    + +

    + + + +
    + + + +

    + + + +
    +
    + +
    +
    +
    + + + +
    + + + + + + + | + | + +
    + + + +
    + + + + + + + + +
      + $reals ) + foreach ( $reals as $real ) + if ( isset($num_posts[$_type]) ) + $num_posts[$_type] += $_num_posts[$real]; + else + $num_posts[$_type] = $_num_posts[$real]; +// If available type specified by media button clicked, filter by that type +if ( empty($_GET['post_mime_type']) && !empty($num_posts[$type]) ) { + $_GET['post_mime_type'] = $type; + list($post_mime_types, $avail_post_mime_types) = wp_edit_attachments_query(); +} +if ( empty($_GET['post_mime_type']) || $_GET['post_mime_type'] == 'all' ) + $class = ' class="current"'; +else + $class = ''; +$type_links[] = "
    • 'all', 'paged'=>false, 'm'=>false))) . "'$class>".__('All Types').""; +foreach ( $post_mime_types as $mime_type => $label ) { + $class = ''; + + if ( !wp_match_mime_types($mime_type, $avail_post_mime_types) ) + continue; + + if ( isset($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type']) ) + $class = ' class="current"'; + + $type_links[] = "
    • $mime_type, 'paged'=>false))) . "'$class>" . sprintf( translate_nooped_plural( $label[2], $num_posts[$mime_type] ), "" . number_format_i18n( $num_posts[$mime_type] ) . '') . ''; +} +echo implode(' |
    • ', apply_filters( 'media_upload_mime_type_links', $type_links ) ) . ''; +unset($type_links); +?> +
    + +
    + + add_query_arg( 'paged', '%#%' ), + 'format' => '', + 'prev_text' => __('«'), + 'next_text' => __('»'), + 'total' => ceil($wp_query->found_posts / 10), + 'current' => $_GET['paged'] +)); + +if ( $page_links ) + echo "
    $page_links
    "; +?> + +
    +posts WHERE post_type = 'attachment' ORDER BY post_date DESC"; + +$arc_result = $wpdb->get_results( $arc_query ); + +$month_count = count($arc_result); +$selected_month = isset( $_GET['m'] ) ? $_GET['m'] : 0; + +if ( $month_count && !( 1 == $month_count && 0 == $arc_result[0]->mmonth ) ) { ?> + + + + + +
    + +
    +
    +
    + +
    + + + + + + +
    + + +
    +

    + + +

    +
    + + + + + + +'; + } else { + $caption = ''; + } + + $default_align = get_option('image_default_align'); + if ( empty($default_align) ) + $default_align = 'none'; + + if ( 'image' == $default_view ) { + $view = 'image-only'; + $table_class = ''; + } else { + $view = $table_class = 'not-image'; + } + + return ' +

       

    + + + + + + + + + + + + + + + + + + ' . $caption . ' + + + + + + + + + + + + + + + + + +
    + + * +
    + + * +

    ' . __('Link text, e.g. “Ransom Demands (PDF)”') . '

    + + +

    ' . __('Alt text for the image, e.g. “The Mona Lisa”') . '

    + + + + + + + + +
    + +
    + + + +

    ' . __('Enter a link URL or click above for presets.') . '

    + +
    + ' . get_submit_button( __( 'Insert into Post' ), 'button', 'insertonlybutton', false ) . ' +
    +'; + +} + +/** + * Displays the multi-file uploader message. + * + * @since 2.6.0 + */ +function media_upload_flash_bypass() { + $browser_uploader = admin_url( 'media-new.php?browser-uploader' ); + + if ( $post = get_post() ) + $browser_uploader .= '&post_id=' . intval( $post->ID ); + elseif ( ! empty( $GLOBALS['post_ID'] ) ) + $browser_uploader .= '&post_id=' . intval( $GLOBALS['post_ID'] ); + + ?> +

    + browser uploader instead.' ), $browser_uploader, '_blank' ); ?> +

    + +

    + Switch to the multi-file uploader.'); ?> +

    + '; + $end = ''; + } +?> +

    +' . sprintf( __( 'Sorry, you have used all of your storage quota of %s MB.' ), get_space_allowed() ) . '

    '; +} + +/** + * Displays the image and editor in the post editor + * + * @since 3.5.0 + */ +function edit_form_image_editor( $post ) { + $open = isset( $_GET['image-editor'] ); + if ( $open ) + require_once ABSPATH . 'wp-admin/includes/image-edit.php'; + + $thumb_url = false; + if ( $attachment_id = intval( $post->ID ) ) + $thumb_url = wp_get_attachment_image_src( $attachment_id, array( 900, 450 ), true ); + + $filename = esc_html( basename( $post->guid ) ); + $title = esc_attr( $post->post_title ); + $alt_text = get_post_meta( $post->ID, '_wp_attachment_image_alt', true ); + + $att_url = wp_get_attachment_url( $post->ID ); ?> +
    + ID ) ) : + $image_edit_button = ''; + if ( wp_image_editor_supports( array( 'mime_type' => $post->post_mime_type ) ) ) { + $nonce = wp_create_nonce( "image_editor-$post->ID" ); + $image_edit_button = " "; + } + ?> + +
    + + class="wp_attachment_image" id="media-head-"> +

    +

    +
    + class="image-editor" id="image-editor-"> + + + post_mime_type, 'audio/' ) ): + + echo wp_audio_shortcode( array( 'src' => $att_url ) ); + + elseif ( $attachment_id && 0 === strpos( $post->post_mime_type, 'video/' ) ): + + $meta = wp_get_attachment_metadata( $attachment_id ); + $w = ! empty( $meta['width'] ) ? min( $meta['width'], 600 ) : 0; + $h = 0; + if ( ! empty( $meta['height'] ) ) + $h = $meta['height']; + if ( $h && $w < $meta['width'] ) + $h = round( ( $meta['height'] * $w ) / $meta['width'] ); + + $attr = array( 'src' => $att_url ); + + if ( ! empty( $meta['width' ] ) ) + $attr['width'] = $w; + + if ( ! empty( $meta['height'] ) ) + $attr['height'] = $h; + + echo wp_video_shortcode( $attr ); + + endif; ?> + +
    +

    +
    + +

    + + post_mime_type, 0, 5 ) ) : ?> +

    +
    + +

    + + + 'strong,em,link,block,del,ins,img,ul,ol,li,code,close' ); + $editor_args = array( + 'textarea_name' => 'content', + 'textarea_rows' => 5, + 'media_buttons' => false, + 'tinymce' => false, + 'quicktags' => $quicktags_settings, + ); + ?> + + + post_content, 'attachment_content', $editor_args ); ?> + +
    + ID ); + echo $extras['item']; + echo '' . "\n"; +} + +/** + * Displays non-editable attachment metadata in the publish metabox + * + * @since 3.5.0 + */ +function attachment_submitbox_metadata() { + $post = get_post(); + + $filename = esc_html( wp_basename( $post->guid ) ); + + $media_dims = ''; + $meta = wp_get_attachment_metadata( $post->ID ); + if ( isset( $meta['width'], $meta['height'] ) ) + $media_dims .= "{$meta['width']} × {$meta['height']} "; + $media_dims = apply_filters( 'media_meta', $media_dims, $post ); + + $att_url = wp_get_attachment_url( $post->ID ); +?> +
    + + +
    +
    + +
    +
    + ID ), $matches ) ) + echo esc_html( strtoupper( $matches[1] ) ); + else + echo strtoupper( str_replace( 'image/', '', $post->post_mime_type ) ); + ?> +
    + + ID ); + $file_size = false; + + if ( isset( $meta['filesize'] ) ) + $file_size = $meta['filesize']; + elseif ( file_exists( $file ) ) + $file_size = filesize( $file ); + + if ( ! empty( $file_size ) ) : ?> +
    + +
    + post_mime_type ) ): + + /** + * Audio and video metadata fields to be shown in the publish meta box. + * + * The key for each item in the array should correspond to an attachment + * metadata key, and the value should be the desired label. + * + * @since 3.7.0 + * + * @param array $fields { + * An array of the attachment metadata keys and labels. + * + * @type string 'mime_type' Label to be shown before the field mime_type. + * @type string 'year' Label to be shown before the field year. + * @type string 'genre' Label to be shown before the field genre. + * @type string 'length_formatted' Label to be shown before the field length_formatted. + * } + */ + $fields = apply_filters( 'media_submitbox_misc_sections', array( + 'mime_type' => __( 'Mime-type:' ), + 'year' => __( 'Year:' ), + 'genre' => __( 'Genre:' ), + 'length_formatted' => __( 'Length:' ), + ) ); + + foreach ( $fields as $key => $label ): + if ( ! empty( $meta[$key] ) ) : ?> +
    + +
    + +
    + +
    + __( 'Audio Format:' ), + 'codec' => __( 'Audio Codec:' ) + ) ); + + foreach ( $audio_fields as $key => $label ): + if ( ! empty( $meta['audio'][$key] ) ) : ?> +
    + +
    + +
    + +
    + $list ) { + if ( ! empty( $list ) ) { + $metadata[$key] = reset( $list ); + // fix bug in byte stream analysis + if ( 'terms_of_use' === $key && 0 === strpos( $metadata[$key], 'yright notice.' ) ) + $metadata[$key] = 'Cop' . $metadata[$key]; + } + } + break; + } + } + + if ( ! empty( $data['id3v2']['APIC'] ) ) { + $image = reset( $data['id3v2']['APIC']); + if ( ! empty( $image['data'] ) ) { + $metadata['image'] = array( + 'data' => $image['data'], + 'mime' => $image['image_mime'], + 'width' => $image['image_width'], + 'height' => $image['image_height'] + ); + } + } elseif ( ! empty( $data['comments']['picture'] ) ) { + $image = reset( $data['comments']['picture'] ); + if ( ! empty( $image['data'] ) ) { + $metadata['image'] = array( + 'data' => $image['data'], + 'mime' => $image['image_mime'] + ); + } + } +} + +/** + * Retrieve metadata from a video file's ID3 tags + * + * @since 3.6.0 + * + * @param string $file Path to file. + * @return array|boolean Returns array of metadata, if found. + */ +function wp_read_video_metadata( $file ) { + if ( ! file_exists( $file ) ) + return false; + + $metadata = array(); + + if ( ! class_exists( 'getID3' ) ) + require( ABSPATH . WPINC . '/ID3/getid3.php' ); + $id3 = new getID3(); + $data = $id3->analyze( $file ); + + if ( isset( $data['video']['lossless'] ) ) + $metadata['lossless'] = $data['video']['lossless']; + if ( ! empty( $data['video']['bitrate'] ) ) + $metadata['bitrate'] = (int) $data['video']['bitrate']; + if ( ! empty( $data['video']['bitrate_mode'] ) ) + $metadata['bitrate_mode'] = $data['video']['bitrate_mode']; + if ( ! empty( $data['filesize'] ) ) + $metadata['filesize'] = (int) $data['filesize']; + if ( ! empty( $data['mime_type'] ) ) + $metadata['mime_type'] = $data['mime_type']; + if ( ! empty( $data['playtime_seconds'] ) ) + $metadata['length'] = (int) ceil( $data['playtime_seconds'] ); + if ( ! empty( $data['playtime_string'] ) ) + $metadata['length_formatted'] = $data['playtime_string']; + if ( ! empty( $data['video']['resolution_x'] ) ) + $metadata['width'] = (int) $data['video']['resolution_x']; + if ( ! empty( $data['video']['resolution_y'] ) ) + $metadata['height'] = (int) $data['video']['resolution_y']; + if ( ! empty( $data['fileformat'] ) ) + $metadata['fileformat'] = $data['fileformat']; + if ( ! empty( $data['video']['dataformat'] ) ) + $metadata['dataformat'] = $data['video']['dataformat']; + if ( ! empty( $data['video']['encoder'] ) ) + $metadata['encoder'] = $data['video']['encoder']; + if ( ! empty( $data['video']['codec'] ) ) + $metadata['codec'] = $data['video']['codec']; + + if ( ! empty( $data['audio'] ) ) { + unset( $data['audio']['streams'] ); + $metadata['audio'] = $data['audio']; + } + + wp_add_id3_tag_data( $metadata, $data ); + + return $metadata; +} + +/** + * Retrieve metadata from a audio file's ID3 tags + * + * @since 3.6.0 + * + * @param string $file Path to file. + * @return array|boolean Returns array of metadata, if found. + */ +function wp_read_audio_metadata( $file ) { + if ( ! file_exists( $file ) ) + return false; + $metadata = array(); + + if ( ! class_exists( 'getID3' ) ) + require( ABSPATH . WPINC . '/ID3/getid3.php' ); + $id3 = new getID3(); + $data = $id3->analyze( $file ); + + if ( ! empty( $data['audio'] ) ) { + unset( $data['audio']['streams'] ); + $metadata = $data['audio']; + } + + if ( ! empty( $data['fileformat'] ) ) + $metadata['fileformat'] = $data['fileformat']; + if ( ! empty( $data['filesize'] ) ) + $metadata['filesize'] = (int) $data['filesize']; + if ( ! empty( $data['mime_type'] ) ) + $metadata['mime_type'] = $data['mime_type']; + if ( ! empty( $data['playtime_seconds'] ) ) + $metadata['length'] = (int) ceil( $data['playtime_seconds'] ); + if ( ! empty( $data['playtime_string'] ) ) + $metadata['length_formatted'] = $data['playtime_string']; + + wp_add_id3_tag_data( $metadata, $data ); + + return $metadata; +} diff --git a/src/wp-admin/includes/menu.php b/src/wp-admin/includes/menu.php new file mode 100644 index 0000000..e315c76 --- /dev/null +++ b/src/wp-admin/includes/menu.php @@ -0,0 +1,229 @@ + $sub) { + foreach ($sub as $index => $data) { + if ( ! current_user_can($data[1]) ) { + unset(${$sub_loop}[$parent][$index]); + $_wp_submenu_nopriv[$parent][$data[2]] = true; + } + } + unset($index, $data); + + if ( empty(${$sub_loop}[$parent]) ) + unset(${$sub_loop}[$parent]); + } + unset($sub, $parent); +} +unset($sub_loop); + +// Loop over the top-level menu. +// Menus for which the original parent is not accessible due to lack of privs will have the next +// submenu in line be assigned as the new menu parent. +foreach ( $menu as $id => $data ) { + if ( empty($submenu[$data[2]]) ) + continue; + $subs = $submenu[$data[2]]; + $first_sub = array_shift($subs); + $old_parent = $data[2]; + $new_parent = $first_sub[2]; + // If the first submenu is not the same as the assigned parent, + // make the first submenu the new parent. + if ( $new_parent != $old_parent ) { + $_wp_real_parent_file[$old_parent] = $new_parent; + $menu[$id][2] = $new_parent; + + foreach ($submenu[$old_parent] as $index => $data) { + $submenu[$new_parent][$index] = $submenu[$old_parent][$index]; + unset($submenu[$old_parent][$index]); + } + unset($submenu[$old_parent], $index); + + if ( isset($_wp_submenu_nopriv[$old_parent]) ) + $_wp_submenu_nopriv[$new_parent] = $_wp_submenu_nopriv[$old_parent]; + } +} +unset($id, $data, $subs, $first_sub, $old_parent, $new_parent); + +if ( is_network_admin() ) + do_action('network_admin_menu', ''); +elseif ( is_user_admin() ) + do_action('user_admin_menu', ''); +else + do_action('admin_menu', ''); + +// Remove menus that have no accessible submenus and require privs that the user does not have. +// Run re-parent loop again. +foreach ( $menu as $id => $data ) { + if ( ! current_user_can($data[1]) ) + $_wp_menu_nopriv[$data[2]] = true; + + // If there is only one submenu and it is has same destination as the parent, + // remove the submenu. + if ( ! empty( $submenu[$data[2]] ) && 1 == count ( $submenu[$data[2]] ) ) { + $subs = $submenu[$data[2]]; + $first_sub = array_shift($subs); + if ( $data[2] == $first_sub[2] ) + unset( $submenu[$data[2]] ); + } + + // If submenu is empty... + if ( empty($submenu[$data[2]]) ) { + // And user doesn't have privs, remove menu. + if ( isset( $_wp_menu_nopriv[$data[2]] ) ) { + unset($menu[$id]); + } + } +} +unset($id, $data, $subs, $first_sub); + +// Remove any duplicated separators +$separator_found = false; +foreach ( $menu as $id => $data ) { + if ( 0 == strcmp('wp-menu-separator', $data[4] ) ) { + if (false == $separator_found) { + $separator_found = true; + } else { + unset($menu[$id]); + $separator_found = false; + } + } else { + $separator_found = false; + } +} +unset($id, $data); + +function add_cssclass($add, $class) { + $class = empty($class) ? $add : $class .= ' ' . $add; + return $class; +} + +function add_menu_classes($menu) { + + $first = $lastorder = false; + $i = 0; + $mc = count($menu); + foreach ( $menu as $order => $top ) { + $i++; + + if ( 0 == $order ) { // dashboard is always shown/single + $menu[0][4] = add_cssclass('menu-top-first', $top[4]); + $lastorder = 0; + continue; + } + + if ( 0 === strpos($top[2], 'separator') && false !== $lastorder ) { // if separator + $first = true; + $c = $menu[$lastorder][4]; + $menu[$lastorder][4] = add_cssclass('menu-top-last', $c); + continue; + } + + if ( $first ) { + $c = $menu[$order][4]; + $menu[$order][4] = add_cssclass('menu-top-first', $c); + $first = false; + } + + if ( $mc == $i ) { // last item + $c = $menu[$order][4]; + $menu[$order][4] = add_cssclass('menu-top-last', $c); + } + + $lastorder = $order; + } + + return apply_filters( 'add_menu_classes', $menu ); +} + +uksort($menu, "strnatcasecmp"); // make it all pretty + +if ( apply_filters('custom_menu_order', false) ) { + $menu_order = array(); + foreach ( $menu as $menu_item ) { + $menu_order[] = $menu_item[2]; + } + unset($menu_item); + $default_menu_order = $menu_order; + $menu_order = apply_filters('menu_order', $menu_order); + $menu_order = array_flip($menu_order); + $default_menu_order = array_flip($default_menu_order); + + function sort_menu($a, $b) { + global $menu_order, $default_menu_order; + $a = $a[2]; + $b = $b[2]; + if ( isset($menu_order[$a]) && !isset($menu_order[$b]) ) { + return -1; + } elseif ( !isset($menu_order[$a]) && isset($menu_order[$b]) ) { + return 1; + } elseif ( isset($menu_order[$a]) && isset($menu_order[$b]) ) { + if ( $menu_order[$a] == $menu_order[$b] ) + return 0; + return ($menu_order[$a] < $menu_order[$b]) ? -1 : 1; + } else { + return ($default_menu_order[$a] <= $default_menu_order[$b]) ? -1 : 1; + } + } + + usort($menu, 'sort_menu'); + unset($menu_order, $default_menu_order); +} + +// Remove the last menu item if it is a separator. +$last_menu_key = array_keys( $menu ); +$last_menu_key = array_pop( $last_menu_key ); +if ( !empty( $menu ) && 'wp-menu-separator' == $menu[ $last_menu_key ][ 4 ] ) + unset( $menu[ $last_menu_key ] ); +unset( $last_menu_key ); + +if ( !user_can_access_admin_page() ) { + do_action('admin_page_access_denied'); + wp_die( __('You do not have sufficient permissions to access this page.') ); +} + +$menu = add_menu_classes($menu); diff --git a/src/wp-admin/includes/meta-boxes.php b/src/wp-admin/includes/meta-boxes.php new file mode 100644 index 0000000..e77c9ec --- /dev/null +++ b/src/wp-admin/includes/meta-boxes.php @@ -0,0 +1,1000 @@ +post_type; + $post_type_object = get_post_type_object($post_type); + $can_publish = current_user_can($post_type_object->cap->publish_posts); +?> +
    + +
    + + +
    + +
    + +
    +
    +post_status && 'future' != $post->post_status && 'pending' != $post->post_status ) { ?> +post_status ) { ?>style="display:none" type="submit" name="save" id="save-post" value="" class="button" /> +post_status && $can_publish ) { ?> + + + +
    +public ) : ?> +
    +post_status ) { + $preview_link = esc_url( get_permalink( $post->ID ) ); + $preview_button = __( 'Preview Changes' ); +} else { + $preview_link = set_url_scheme( get_permalink( $post->ID ) ); + $preview_link = esc_url( apply_filters( 'preview_post_link', add_query_arg( 'preview', 'true', $preview_link ) ) ); + $preview_button = __( 'Preview' ); +} +?> + + +
    + +
    +
    + +
    + +
    + +post_status ) { + case 'private': + _e('Privately Published'); + break; + case 'publish': + _e('Published'); + break; + case 'future': + _e('Scheduled'); + break; + case 'pending': + _e('Pending Review'); + break; + case 'draft': + case 'auto-draft': + _e('Draft'); + break; +} +?> + +post_status || 'private' == $post->post_status || $can_publish ) { ?> +post_status ) { ?>style="display:none;" class="edit-post-status hide-if-no-js"> + +
    + + + + +
    + + +
    + +
    + post_status ) { + $post->post_password = ''; + $visibility = 'private'; + $visibility_trans = __('Private'); +} elseif ( !empty( $post->post_password ) ) { + $visibility = 'password'; + $visibility_trans = __('Password protected'); +} elseif ( $post_type == 'post' && is_sticky( $post->ID ) ) { + $visibility = 'public'; + $visibility_trans = __('Public, Sticky'); +} else { + $visibility = 'public'; + $visibility_trans = __('Public'); +} + +echo esc_html( $visibility_trans ); ?> + + + +
    + + +ID)); ?> /> + + + />
    + +ID ) ); ?> />
    + + />
    +
    + />
    + +

    + + +

    +
    + + +
    + +ID ) { + if ( 'future' == $post->post_status ) { // scheduled for publishing at a future date + $stamp = __('Scheduled for: %1$s'); + } else if ( 'publish' == $post->post_status || 'private' == $post->post_status ) { // already published + $stamp = __('Published on: %1$s'); + } else if ( '0000-00-00 00:00:00' == $post->post_date_gmt ) { // draft, 1 or more saves, no date specified + $stamp = __('Publish immediately'); + } else if ( time() < strtotime( $post->post_date_gmt . ' +0000' ) ) { // draft, 1 or more saves, future date specified + $stamp = __('Schedule for: %1$s'); + } else { // draft, 1 or more saves, date specified + $stamp = __('Publish on: %1$s'); + } + $date = date_i18n( $datef, strtotime( $post->post_date ) ); +} else { // draft (no saves, and thus no date specified) + $stamp = __('Publish immediately'); + $date = date_i18n( $datef, strtotime( current_time('mysql') ) ); +} + +if ( ! empty( $args['args']['revisions_count'] ) ) : + $revisions_to_keep = wp_revisions_to_keep( $post ); +?> +
    + 0 && $revisions_to_keep <= $args['args']['revisions_count'] ) { + echo ''; + printf( __( 'Revisions: %s' ), '' . number_format_i18n( $args['args']['revisions_count'] ) . '+' ); + echo ''; + } else { + printf( __( 'Revisions: %s' ), '' . number_format_i18n( $args['args']['revisions_count'] ) . '' ); + } +?> + +
    + +
    + + + +
    +
    + + + +
    +
    +
    + +
    + +
    +ID ) ) { + if ( !EMPTY_TRASH_DAYS ) + $delete_text = __('Delete Permanently'); + else + $delete_text = __('Move to Trash'); + ?> + +
    + +
    + +post_status, array('publish', 'future', 'private') ) || 0 == $post->ID ) { + if ( $can_publish ) : + if ( !empty($post->post_date_gmt) && time() < strtotime( $post->post_date_gmt . ' +0000' ) ) : ?> + + 'p' ) ); ?> + + + 'p' ) ); ?> + + + 'p' ) ); ?> + + + + +
    +
    +
    +
    + +post_type; + $post_type_object = get_post_type_object($post_type); + $can_publish = current_user_can($post_type_object->cap->publish_posts); +?> +
    + +
    + + +
    + +
    + + +
    + %1$s'); + $date = date_i18n( $datef, strtotime( $post->post_date ) ); + ?> +
    + +
    + + +
    +
    +
    + +
    +
    + ID ) ) + if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) { + echo "" . __( 'Trash' ) . ""; + } else { + $delete_ays = ! MEDIA_TRASH ? " onclick='return showNotice.warn();'" : ''; + echo "" . __( 'Delete Permanently' ) . ""; + } + ?> +
    + +
    + + + +
    +
    +
    + +
    + +post_type, 'post-formats' ) ) : + $post_formats = get_theme_support( 'post-formats' ); + + if ( is_array( $post_formats[0] ) ) : + $post_format = get_post_format( $post->ID ); + if ( !$post_format ) + $post_format = '0'; + // Add in the current one if it isn't there yet, in case the current theme doesn't support it + if ( $post_format && !in_array( $post_format, $post_formats[0] ) ) + $post_formats[0][] = $post_format; + ?> +
    + /> + +
    /> +
    +
    + 'post_tag'); + if ( !isset($box['args']) || !is_array($box['args']) ) + $args = array(); + else + $args = $box['args']; + extract( wp_parse_args($args, $defaults), EXTR_SKIP ); + $tax_name = esc_attr($taxonomy); + $taxonomy = get_taxonomy($taxonomy); + $user_can_assign_terms = current_user_can( $taxonomy->cap->assign_terms ); + $comma = _x( ',', 'tag delimiter' ); +?> +
    +
    +
    +

    labels->add_or_remove_items; ?>

    +
    + +
    + +
    labels->add_new_item; ?>
    +

    +

    +
    +

    labels->separate_items_with_commas; ?>

    + +
    +
    +
    + +

    labels->choose_from_most_used; ?>

    + + 'category'); + if ( !isset($box['args']) || !is_array($box['args']) ) + $args = array(); + else + $args = $box['args']; + extract( wp_parse_args($args, $defaults), EXTR_SKIP ); + $tax = get_taxonomy($taxonomy); + + ?> +
    + + + + +
    + "; // Allows for an empty term set to be sent. 0 is an invalid Term ID and will be ignored by empty() checks. + ?> +
      + ID, array( 'taxonomy' => $taxonomy, 'popular_cats' => $popular_ids ) ) ?> +
    +
    + cap->edit_terms) ) : ?> +
    +

    + + labels->add_new_item ); + ?> + +

    +

    + + + + $taxonomy, 'hide_empty' => 0, 'name' => 'new'.$taxonomy.'_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => '— ' . $tax->labels->parent_item . ' —' ) ); ?> + + + +

    +
    + +
    + + +

    Learn more about manual excerpts.'); ?>

    +to_ping) ) .'" />'; + if ('' != $post->pinged) { + $pings = '

    '. __('Already pinged:') . '

      '; + $already_pinged = explode("\n", trim($post->pinged)); + foreach ($already_pinged as $pinged_url) { + $pings .= "\n\t
    • " . esc_html($pinged_url) . "
    • "; + } + $pings .= '
    '; + } + +?> +


    ()

    +

    pingbacks, no other action necessary.'); ?>

    + +
    +
    +ID); +foreach ( $metadata as $key => $value ) { + if ( is_protected_meta( $metadata[ $key ][ 'meta_key' ], 'post' ) || ! current_user_can( 'edit_post_meta', $post->ID, $metadata[ $key ][ 'meta_key' ] ) ) + unset( $metadata[ $key ] ); +} +list_meta( $metadata ); +meta_form( $post ); ?> +
    +

    use in your theme.'); ?>

    + + +

    +
    + + +

    + +

    + $post->ID, 'number' => 1, 'count' => true ) ); + $wp_list_table = _get_list_table('WP_Post_Comments_List_Table'); + $wp_list_table->display( true ); + + if ( 1 > $total ) { + echo '

    ' . __('No comments yet.') . '

    '; + } else { + $hidden = get_hidden_meta_boxes( get_current_screen() ); + if ( ! in_array('commentsdiv', $hidden) ) { + ?> + + +

    + + + + + 'authors', + 'name' => 'post_author_override', + 'selected' => empty($post->ID) ? $user_ID : $post->post_author, + 'include_selected' => true + ) ); +} + +/** + * Display list of revisions. + * + * @since 2.6.0 + * + * @param object $post + */ +function post_revisions_meta_box( $post ) { + wp_list_post_revisions( $post ); +} + +// -- Page related Meta Boxes + +/** + * Display page attributes form fields. + * + * @since 2.7.0 + * + * @param object $post + */ +function page_attributes_meta_box($post) { + $post_type_object = get_post_type_object($post->post_type); + if ( $post_type_object->hierarchical ) { + $dropdown_args = array( + 'post_type' => $post->post_type, + 'exclude_tree' => $post->ID, + 'selected' => $post->post_parent, + 'name' => 'parent_id', + 'show_option_none' => __('(no parent)'), + 'sort_column' => 'menu_order, post_title', + 'echo' => 0, + ); + + $dropdown_args = apply_filters( 'page_attributes_dropdown_pages_args', $dropdown_args, $post ); + $pages = wp_dropdown_pages( $dropdown_args ); + if ( ! empty($pages) ) { +?> +

    + + +post_type && 0 != count( get_page_templates() ) ) { + $template = !empty($post->page_template) ? $post->page_template : false; + ?> +

    + + +

    +

    +

    post_type ) _e( 'Need help? Use the Help tab in the upper right of your screen.' ); ?>

    + + + +
    +
      +
    • +
    • +
    + +
    +
      + link_id) ) + wp_link_category_checklist($link->link_id); + else + wp_link_category_checklist(); + ?> +
    +
    + + + +
    +

    + +
    +
    + +
    +

    +

    +

    +
    +

    +link_rel ) ? $link->link_rel : ''; // In PHP 5.3: $link_rel = $link->link_rel ?: ''; + $rels = preg_split('/\s+/', $link_rel); + + if ('' != $value && in_array($value, $rels) ) { + echo ' checked="checked"'; + } + + if ('' == $value) { + if ('family' == $class && strpos($link_rel, 'child') === false && strpos($link_rel, 'parent') === false && strpos($link_rel, 'sibling') === false && strpos($link_rel, 'spouse') === false && strpos($link_rel, 'kin') === false) echo ' checked="checked"'; + if ('friendship' == $class && strpos($link_rel, 'friend') === false && strpos($link_rel, 'acquaintance') === false && strpos($link_rel, 'contact') === false) echo ' checked="checked"'; + if ('geographical' == $class && strpos($link_rel, 'co-resident') === false && strpos($link_rel, 'neighbor') === false) echo ' checked="checked"'; + if ('identity' == $class && in_array('me', $rels) ) echo ' checked="checked"'; + } +} + +/** + * Display xfn form fields. + * + * @since 2.6.0 + * + * @param object $link + */ +function link_xfn_meta_box($link) { +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    XFN.'); ?>

    + + + + + + + + + + + + + + + + + + + +ID, '_thumbnail_id', true ); + echo _wp_post_thumbnail_html( $thumbnail_id, $post->ID ); +} diff --git a/src/wp-admin/includes/misc.php b/src/wp-admin/includes/misc.php new file mode 100644 index 0000000..3a8ad89 --- /dev/null +++ b/src/wp-admin/includes/misc.php @@ -0,0 +1,770 @@ + $markerline ) { + if (strpos($markerline, '# BEGIN ' . $marker) !== false) + $state = false; + if ( $state ) { + if ( $n + 1 < count( $markerdata ) ) + fwrite( $f, "{$markerline}\n" ); + else + fwrite( $f, "{$markerline}" ); + } + if (strpos($markerline, '# END ' . $marker) !== false) { + fwrite( $f, "# BEGIN {$marker}\n" ); + if ( is_array( $insertion )) + foreach ( $insertion as $insertline ) + fwrite( $f, "{$insertline}\n" ); + fwrite( $f, "# END {$marker}\n" ); + $state = true; + $foundit = true; + } + } + } + if (!$foundit) { + fwrite( $f, "\n# BEGIN {$marker}\n" ); + foreach ( $insertion as $insertline ) + fwrite( $f, "{$insertline}\n" ); + fwrite( $f, "# END {$marker}\n" ); + } + fclose( $f ); + return true; + } else { + return false; + } +} + +/** + * Updates the htaccess file with the current rules if it is writable. + * + * Always writes to the file if it exists and is writable to ensure that we + * blank out old rules. + * + * @since 1.5.0 + */ +function save_mod_rewrite_rules() { + if ( is_multisite() ) + return; + + global $wp_rewrite; + + $home_path = get_home_path(); + $htaccess_file = $home_path.'.htaccess'; + + // If the file doesn't already exist check for write access to the directory and whether we have some rules. + // else check for write access to the file. + if ((!file_exists($htaccess_file) && is_writable($home_path) && $wp_rewrite->using_mod_rewrite_permalinks()) || is_writable($htaccess_file)) { + if ( got_mod_rewrite() ) { + $rules = explode( "\n", $wp_rewrite->mod_rewrite_rules() ); + return insert_with_markers( $htaccess_file, 'WordPress', $rules ); + } + } + + return false; +} + +/** + * Updates the IIS web.config file with the current rules if it is writable. + * If the permalinks do not require rewrite rules then the rules are deleted from the web.config file. + * + * @since 2.8.0 + * + * @return bool True if web.config was updated successfully + */ +function iis7_save_url_rewrite_rules(){ + if ( is_multisite() ) + return; + + global $wp_rewrite; + + $home_path = get_home_path(); + $web_config_file = $home_path . 'web.config'; + + // Using win_is_writable() instead of is_writable() because of a bug in Windows PHP + if ( iis7_supports_permalinks() && ( ( ! file_exists($web_config_file) && win_is_writable($home_path) && $wp_rewrite->using_mod_rewrite_permalinks() ) || win_is_writable($web_config_file) ) ) { + $rule = $wp_rewrite->iis7_url_rewrite_rules(false, '', ''); + if ( ! empty($rule) ) { + return iis7_add_rewrite_rule($web_config_file, $rule); + } else { + return iis7_delete_rewrite_rule($web_config_file); + } + } + return false; +} + +/** + * {@internal Missing Short Description}} + * + * @since 1.5.0 + * + * @param unknown_type $file + */ +function update_recently_edited( $file ) { + $oldfiles = (array ) get_option( 'recently_edited' ); + if ( $oldfiles ) { + $oldfiles = array_reverse( $oldfiles ); + $oldfiles[] = $file; + $oldfiles = array_reverse( $oldfiles ); + $oldfiles = array_unique( $oldfiles ); + if ( 5 < count( $oldfiles )) + array_pop( $oldfiles ); + } else { + $oldfiles[] = $file; + } + update_option( 'recently_edited', $oldfiles ); +} + +/** + * If siteurl, home or page_on_front changed, flush rewrite rules. + * + * @since 2.1.0 + * + * @param string $old_value + * @param string $value + */ +function update_home_siteurl( $old_value, $value ) { + if ( defined( "WP_INSTALLING" ) ) + return; + + // If home changed, write rewrite rules to new location. + flush_rewrite_rules(); +} + +add_action( 'update_option_home', 'update_home_siteurl', 10, 2 ); +add_action( 'update_option_siteurl', 'update_home_siteurl', 10, 2 ); +add_action( 'update_option_page_on_front', 'update_home_siteurl', 10, 2 ); + +/** + * Shorten an URL, to be used as link text + * + * @since 1.2.0 + * + * @param string $url + * @return string + */ +function url_shorten( $url ) { + $short_url = str_replace( array( 'http://', 'www.' ), '', $url ); + $short_url = untrailingslashit( $short_url ); + if ( strlen( $short_url ) > 35 ) + $short_url = substr( $short_url, 0, 32 ) . '…'; + return $short_url; +} + +/** + * Resets global variables based on $_GET and $_POST + * + * This function resets global variables based on the names passed + * in the $vars array to the value of $_POST[$var] or $_GET[$var] or '' + * if neither is defined. + * + * @since 2.0.0 + * + * @param array $vars An array of globals to reset. + */ +function wp_reset_vars( $vars ) { + for ( $i=0; $iget_error_data() && is_string( $message->get_error_data() ) ) + $message = $message->get_error_message() . ': ' . $message->get_error_data(); + else + $message = $message->get_error_message(); + } + echo "

    $message

    \n"; + wp_ob_end_flush_all(); + flush(); +} + +function wp_doc_link_parse( $content ) { + if ( !is_string( $content ) || empty( $content ) ) + return array(); + + if ( !function_exists('token_get_all') ) + return array(); + + $tokens = token_get_all( $content ); + $functions = array(); + $ignore_functions = array(); + for ( $t = 0, $count = count( $tokens ); $t < $count; $t++ ) { + if ( !is_array( $tokens[$t] ) ) continue; + if ( T_STRING == $tokens[$t][0] && ( '(' == $tokens[ $t + 1 ] || '(' == $tokens[ $t + 2 ] ) ) { + // If it's a function or class defined locally, there's not going to be any docs available + if ( ( isset( $tokens[ $t - 2 ][1] ) && in_array( $tokens[ $t - 2 ][1], array( 'function', 'class' ) ) ) || ( isset( $tokens[ $t - 2 ][0] ) && T_OBJECT_OPERATOR == $tokens[ $t - 1 ][0] ) ) { + $ignore_functions[] = $tokens[$t][1]; + } + // Add this to our stack of unique references + $functions[] = $tokens[$t][1]; + } + } + + $functions = array_unique( $functions ); + sort( $functions ); + $ignore_functions = apply_filters( 'documentation_ignore_functions', $ignore_functions ); + $ignore_functions = array_unique( $ignore_functions ); + + $out = array(); + foreach ( $functions as $function ) { + if ( in_array( $function, $ignore_functions ) ) + continue; + $out[] = $function; + } + + return $out; +} + +/** + * Saves option for number of rows when listing posts, pages, comments, etc. + * + * @since 2.8 +**/ +function set_screen_options() { + + if ( isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options']) ) { + check_admin_referer( 'screen-options-nonce', 'screenoptionnonce' ); + + if ( !$user = wp_get_current_user() ) + return; + $option = $_POST['wp_screen_options']['option']; + $value = $_POST['wp_screen_options']['value']; + + if ( $option != sanitize_key( $option ) ) + return; + + $map_option = $option; + $type = str_replace('edit_', '', $map_option); + $type = str_replace('_per_page', '', $type); + if ( in_array( $type, get_taxonomies() ) ) + $map_option = 'edit_tags_per_page'; + elseif ( in_array( $type, get_post_types() ) ) + $map_option = 'edit_per_page'; + else + $option = str_replace('-', '_', $option); + + switch ( $map_option ) { + case 'edit_per_page': + case 'users_per_page': + case 'edit_comments_per_page': + case 'upload_per_page': + case 'edit_tags_per_page': + case 'plugins_per_page': + // Network admin + case 'sites_network_per_page': + case 'users_network_per_page': + case 'site_users_network_per_page': + case 'plugins_network_per_page': + case 'themes_network_per_page': + case 'site_themes_network_per_page': + $value = (int) $value; + if ( $value < 1 || $value > 999 ) + return; + break; + default: + $value = apply_filters('set-screen-option', false, $option, $value); + if ( false === $value ) + return; + break; + } + + update_user_meta($user->ID, $option, $value); + wp_safe_redirect( remove_query_arg( array('pagenum', 'apage', 'paged'), wp_get_referer() ) ); + exit; + } +} + +/** + * Check if rewrite rule for WordPress already exists in the IIS 7+ configuration file + * + * @since 2.8.0 + * + * @return bool + * @param string $filename The file path to the configuration file + */ +function iis7_rewrite_rule_exists($filename) { + if ( ! file_exists($filename) ) + return false; + if ( ! class_exists('DOMDocument') ) + return false; + + $doc = new DOMDocument(); + if ( $doc->load($filename) === false ) + return false; + $xpath = new DOMXPath($doc); + $rules = $xpath->query('/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'wordpress\')]'); + if ( $rules->length == 0 ) + return false; + else + return true; +} + +/** + * Delete WordPress rewrite rule from web.config file if it exists there + * + * @since 2.8.0 + * + * @param string $filename Name of the configuration file + * @return bool + */ +function iis7_delete_rewrite_rule($filename) { + // If configuration file does not exist then rules also do not exist so there is nothing to delete + if ( ! file_exists($filename) ) + return true; + + if ( ! class_exists('DOMDocument') ) + return false; + + $doc = new DOMDocument(); + $doc->preserveWhiteSpace = false; + + if ( $doc -> load($filename) === false ) + return false; + $xpath = new DOMXPath($doc); + $rules = $xpath->query('/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'wordpress\')]'); + if ( $rules->length > 0 ) { + $child = $rules->item(0); + $parent = $child->parentNode; + $parent->removeChild($child); + $doc->formatOutput = true; + saveDomDocument($doc, $filename); + } + return true; +} + +/** + * Add WordPress rewrite rule to the IIS 7+ configuration file. + * + * @since 2.8.0 + * + * @param string $filename The file path to the configuration file + * @param string $rewrite_rule The XML fragment with URL Rewrite rule + * @return bool + */ +function iis7_add_rewrite_rule($filename, $rewrite_rule) { + if ( ! class_exists('DOMDocument') ) + return false; + + // If configuration file does not exist then we create one. + if ( ! file_exists($filename) ) { + $fp = fopen( $filename, 'w'); + fwrite($fp, ''); + fclose($fp); + } + + $doc = new DOMDocument(); + $doc->preserveWhiteSpace = false; + + if ( $doc->load($filename) === false ) + return false; + + $xpath = new DOMXPath($doc); + + // First check if the rule already exists as in that case there is no need to re-add it + $wordpress_rules = $xpath->query('/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'wordpress\')]'); + if ( $wordpress_rules->length > 0 ) + return true; + + // Check the XPath to the rewrite rule and create XML nodes if they do not exist + $xmlnodes = $xpath->query('/configuration/system.webServer/rewrite/rules'); + if ( $xmlnodes->length > 0 ) { + $rules_node = $xmlnodes->item(0); + } else { + $rules_node = $doc->createElement('rules'); + + $xmlnodes = $xpath->query('/configuration/system.webServer/rewrite'); + if ( $xmlnodes->length > 0 ) { + $rewrite_node = $xmlnodes->item(0); + $rewrite_node->appendChild($rules_node); + } else { + $rewrite_node = $doc->createElement('rewrite'); + $rewrite_node->appendChild($rules_node); + + $xmlnodes = $xpath->query('/configuration/system.webServer'); + if ( $xmlnodes->length > 0 ) { + $system_webServer_node = $xmlnodes->item(0); + $system_webServer_node->appendChild($rewrite_node); + } else { + $system_webServer_node = $doc->createElement('system.webServer'); + $system_webServer_node->appendChild($rewrite_node); + + $xmlnodes = $xpath->query('/configuration'); + if ( $xmlnodes->length > 0 ) { + $config_node = $xmlnodes->item(0); + $config_node->appendChild($system_webServer_node); + } else { + $config_node = $doc->createElement('configuration'); + $doc->appendChild($config_node); + $config_node->appendChild($system_webServer_node); + } + } + } + } + + $rule_fragment = $doc->createDocumentFragment(); + $rule_fragment->appendXML($rewrite_rule); + $rules_node->appendChild($rule_fragment); + + $doc->encoding = "UTF-8"; + $doc->formatOutput = true; + saveDomDocument($doc, $filename); + + return true; +} + +/** + * Saves the XML document into a file + * + * @since 2.8.0 + * + * @param DOMDocument $doc + * @param string $filename + */ +function saveDomDocument($doc, $filename) { + $config = $doc->saveXML(); + $config = preg_replace("/([^\r])\n/", "$1\r\n", $config); + $fp = fopen($filename, 'w'); + fwrite($fp, $config); + fclose($fp); +} + +/** + * Display the default admin color scheme picker (Used in user-edit.php) + * + * @since 3.0.0 + */ +function admin_color_scheme_picker( $user_id ) { + global $_wp_admin_css_colors; + + ksort( $_wp_admin_css_colors ); + + if ( isset( $_wp_admin_css_colors['fresh'] ) ) { + // Set Default ('fresh') and Light should go first. + $_wp_admin_css_colors = array_filter( array_merge( array( 'fresh' => '', 'light' => '' ), $_wp_admin_css_colors ) ); + } + + $current_color = get_user_option( 'admin_color', $user_id ); + + if ( empty( $current_color ) || ! isset( $_wp_admin_css_colors[ $current_color ] ) ) { + $current_color = 'fresh'; + } + + ?> +
    + + $color_info ) : + + ?> +
    + /> + + + + + + colors as $html_color ) { + ?> + + + +
     
    +
    + +
    + icon_colors ) ) { + $icon_colors = $_wp_admin_css_colors[ $color_scheme ]->icon_colors; + } elseif ( ! empty( $_wp_admin_css_colors['fresh']->icon_colors ) ) { + $icon_colors = $_wp_admin_css_colors['fresh']->icon_colors; + } else { + // Fall back to the default set of icon colors if the default scheme is missing. + $icon_colors = array( 'base' => '#999', 'focus' => '#2ea2cc', 'current' => '#fff' ); + } + + echo '\n"; +} +add_action( 'admin_head', 'wp_color_scheme_settings' ); + +function _ipad_meta() { + if ( wp_is_mobile() ) { + ?> + + sprintf( __( '%s is currently editing' ), $user->display_name ) ); + + if ( ( $avatar = get_avatar( $user->ID, 18 ) ) && preg_match( "|src='([^']+)'|", $avatar, $matches ) ) + $send['avatar_src'] = $matches[1]; + + $checked[$key] = $send; + } + } + } + + if ( ! empty( $checked ) ) + $response['wp-check-locked-posts'] = $checked; + + return $response; +} +add_filter( 'heartbeat_received', 'wp_check_locked_posts', 10, 3 ); + +/** + * Check lock status on the New/Edit Post screen and refresh the lock + * + * @since 3.6 + */ +function wp_refresh_post_lock( $response, $data, $screen_id ) { + if ( array_key_exists( 'wp-refresh-post-lock', $data ) ) { + $received = $data['wp-refresh-post-lock']; + $send = array(); + + if ( ! $post_id = absint( $received['post_id'] ) ) + return $response; + + if ( ! current_user_can('edit_post', $post_id) ) + return $response; + + if ( ( $user_id = wp_check_post_lock( $post_id ) ) && ( $user = get_userdata( $user_id ) ) ) { + $error = array( + 'text' => sprintf( __( '%s has taken over and is currently editing.' ), $user->display_name ) + ); + + if ( $avatar = get_avatar( $user->ID, 64 ) ) { + if ( preg_match( "|src='([^']+)'|", $avatar, $matches ) ) + $error['avatar_src'] = $matches[1]; + } + + $send['lock_error'] = $error; + } else { + if ( $new_lock = wp_set_post_lock( $post_id ) ) + $send['new_lock'] = implode( ':', $new_lock ); + } + + $response['wp-refresh-post-lock'] = $send; + } + + return $response; +} +add_filter( 'heartbeat_received', 'wp_refresh_post_lock', 10, 3 ); + +/** + * Check nonce expiration on the New/Edit Post screen and refresh if needed + * + * @since 3.6 + */ +function wp_refresh_post_nonces( $response, $data, $screen_id ) { + if ( array_key_exists( 'wp-refresh-post-nonces', $data ) ) { + $received = $data['wp-refresh-post-nonces']; + $response['wp-refresh-post-nonces'] = array( 'check' => 1 ); + + if ( ! $post_id = absint( $received['post_id'] ) ) + return $response; + + if ( ! current_user_can( 'edit_post', $post_id ) || empty( $received['post_nonce'] ) ) + return $response; + + if ( 2 === wp_verify_nonce( $received['post_nonce'], 'update-post_' . $post_id ) ) { + $response['wp-refresh-post-nonces'] = array( + 'replace' => array( + 'autosavenonce' => wp_create_nonce('autosave'), + 'getpermalinknonce' => wp_create_nonce('getpermalink'), + 'samplepermalinknonce' => wp_create_nonce('samplepermalink'), + 'closedpostboxesnonce' => wp_create_nonce('closedpostboxes'), + '_ajax_linking_nonce' => wp_create_nonce( 'internal-linking' ), + '_wpnonce' => wp_create_nonce( 'update-post_' . $post_id ), + ), + 'heartbeatNonce' => wp_create_nonce( 'heartbeat-nonce' ), + ); + } + } + + return $response; +} +add_filter( 'heartbeat_received', 'wp_refresh_post_nonces', 10, 3 ); + +/** + * Disable suspension of Heartbeat on the Add/Edit Post screens. + * + * @since 3.8.0 + * + * @param array $settings An array of Heartbeat settings. + * @return array Filtered Heartbeat settings. + */ +function wp_heartbeat_set_suspension( $settings ) { + global $pagenow; + + if ( 'post.php' === $pagenow || 'post-new.php' === $pagenow ) { + $settings['suspension'] = 'disable'; + } + + return $settings; +} +add_filter( 'heartbeat_settings', 'wp_heartbeat_set_suspension' ); diff --git a/src/wp-admin/includes/ms-deprecated.php b/src/wp-admin/includes/ms-deprecated.php new file mode 100644 index 0000000..702e3e1 --- /dev/null +++ b/src/wp-admin/includes/ms-deprecated.php @@ -0,0 +1,78 @@ + ( 1024 * get_site_option( 'fileupload_maxk', 1500 ) ) ) + $file['error'] = sprintf(__('This file is too big. Files must be less than %1$s KB in size.'), get_site_option( 'fileupload_maxk', 1500 ) ); + if ( upload_is_user_over_quota( false ) ) { + $file['error'] = __( 'You have used your space quota. Please delete files before uploading.' ); + } + if ( $file['error'] != '0' && !isset($_POST['html-upload']) ) + wp_die( $file['error'] . ' ' . __( 'Back' ) . '' ); + + return $file; +} +add_filter( 'wp_handle_upload_prefilter', 'check_upload_size' ); + +/** + * Delete a blog + * + * @since 3.0.0 + * + * @param int $blog_id Blog ID + * @param bool $drop True if blog's table should be dropped. Default is false. + * @return void + */ +function wpmu_delete_blog( $blog_id, $drop = false ) { + global $wpdb; + + $switch = false; + if ( get_current_blog_id() != $blog_id ) { + $switch = true; + switch_to_blog( $blog_id ); + } + + $blog = get_blog_details( $blog_id ); + /** + * Fires before a blog is deleted. + * + * @since MU + * + * @param int $blog_id The blog ID. + * @param bool $drop True if blog's table should be dropped. Default is false. + */ + do_action( 'delete_blog', $blog_id, $drop ); + + $users = get_users( array( 'blog_id' => $blog_id, 'fields' => 'ids' ) ); + + // Remove users from this blog. + if ( ! empty( $users ) ) { + foreach ( $users as $user_id ) { + remove_user_from_blog( $user_id, $blog_id ); + } + } + + update_blog_status( $blog_id, 'deleted', 1 ); + + $current_site = get_current_site(); + + // Don't destroy the initial, main, or root blog. + if ( $drop && ( 1 == $blog_id || is_main_site( $blog_id ) || ( $blog->path == $current_site->path && $blog->domain == $current_site->domain ) ) ) + $drop = false; + + if ( $drop ) { + $tables = $wpdb->tables( 'blog' ); + /** + * Filter the tables to drop when the blog is deleted. + * + * @since MU + * + * @param array $tables The blog tables to be dropped. + * @param int $blog_id The ID of the blog to drop tables for. + */ + $drop_tables = apply_filters( 'wpmu_drop_tables', $tables, $blog_id ); + + foreach ( (array) $drop_tables as $table ) { + $wpdb->query( "DROP TABLE IF EXISTS `$table`" ); + } + + $wpdb->delete( $wpdb->blogs, array( 'blog_id' => $blog_id ) ); + + $uploads = wp_upload_dir(); + /** + * Filter the upload base directory to delete when the blog is deleted. + * + * @since MU + * + * @param string $uploads['basedir'] Uploads path without subdirectory. @see wp_upload_dir() + * @param int $blog_id The blog ID. + */ + $dir = apply_filters( 'wpmu_delete_blog_upload_dir', $uploads['basedir'], $blog_id ); + $dir = rtrim( $dir, DIRECTORY_SEPARATOR ); + $top_dir = $dir; + $stack = array($dir); + $index = 0; + + while ( $index < count( $stack ) ) { + # Get indexed directory from stack + $dir = $stack[$index]; + + $dh = @opendir( $dir ); + if ( $dh ) { + while ( ( $file = @readdir( $dh ) ) !== false ) { + if ( $file == '.' || $file == '..' ) + continue; + + if ( @is_dir( $dir . DIRECTORY_SEPARATOR . $file ) ) + $stack[] = $dir . DIRECTORY_SEPARATOR . $file; + else if ( @is_file( $dir . DIRECTORY_SEPARATOR . $file ) ) + @unlink( $dir . DIRECTORY_SEPARATOR . $file ); + } + @closedir( $dh ); + } + $index++; + } + + $stack = array_reverse( $stack ); // Last added dirs are deepest + foreach( (array) $stack as $dir ) { + if ( $dir != $top_dir) + @rmdir( $dir ); + } + + clean_blog_cache( $blog ); + } + + if ( $switch ) + restore_current_blog(); +} + +// @todo Merge with wp_delete_user() ? +function wpmu_delete_user( $id ) { + global $wpdb; + + $id = (int) $id; + $user = new WP_User( $id ); + + if ( !$user->exists() ) + return false; + /** + * Fires before a user is deleted from the network. + * + * @since MU + * + * @param int $id ID of the user about to be deleted from the network. + */ + do_action( 'wpmu_delete_user', $id ); + + $blogs = get_blogs_of_user( $id ); + + if ( ! empty( $blogs ) ) { + foreach ( $blogs as $blog ) { + switch_to_blog( $blog->userblog_id ); + remove_user_from_blog( $id, $blog->userblog_id ); + + $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d", $id ) ); + foreach ( (array) $post_ids as $post_id ) { + wp_delete_post( $post_id ); + } + + // Clean links + $link_ids = $wpdb->get_col( $wpdb->prepare( "SELECT link_id FROM $wpdb->links WHERE link_owner = %d", $id ) ); + + if ( $link_ids ) { + foreach ( $link_ids as $link_id ) + wp_delete_link( $link_id ); + } + + restore_current_blog(); + } + } + + $meta = $wpdb->get_col( $wpdb->prepare( "SELECT umeta_id FROM $wpdb->usermeta WHERE user_id = %d", $id ) ); + foreach ( $meta as $mid ) + delete_metadata_by_mid( 'user', $mid ); + + $wpdb->delete( $wpdb->users, array( 'ID' => $id ) ); + + clean_user_cache( $user ); + + /** This action is documented in wp-admin/includes/user.php */ + do_action( 'deleted_user', $id ); + + return true; +} + +function update_option_new_admin_email( $old_value, $value ) { + $email = get_option( 'admin_email' ); + if ( $value == get_option( 'admin_email' ) || !is_email( $value ) ) + return; + + $hash = md5( $value. time() .mt_rand() ); + $new_admin_email = array( + 'hash' => $hash, + 'newemail' => $value + ); + update_option( 'adminhash', $new_admin_email ); + + $email_text = __( 'Dear user, + +You recently requested to have the administration email address on +your site changed. +If this is correct, please click on the following link to change it: +###ADMIN_URL### + +You can safely ignore and delete this email if you do not want to +take this action. + +This email has been sent to ###EMAIL### + +Regards, +All at ###SITENAME### +###SITEURL###' ); + + /** + * Filter the email text sent when the site admin email is changed. + * + * The following strings have a special meaning and will get replaced dynamically: + * ###ADMIN_URL### The link to click on to confirm the email change. Required otherwise this functunalty is will break. + * ###EMAIL### The new email. + * ###SITENAME### The name of the site. + * ###SITEURL### The URL to the site. + * + * @since MU + * + * @param string $email_text Text in the email. + * @param string $new_admin_email New admin email that the current administration email was changed to. + */ + $content = apply_filters( 'new_admin_email_content', $email_text, $new_admin_email ); + + $content = str_replace( '###ADMIN_URL###', esc_url( admin_url( 'options.php?adminhash='.$hash ) ), $content ); + $content = str_replace( '###EMAIL###', $value, $content ); + $content = str_replace( '###SITENAME###', get_site_option( 'site_name' ), $content ); + $content = str_replace( '###SITEURL###', network_home_url(), $content ); + + wp_mail( $value, sprintf( __( '[%s] New Admin Email Address' ), get_option( 'blogname' ) ), $content ); +} +add_action( 'update_option_new_admin_email', 'update_option_new_admin_email', 10, 2 ); +add_action( 'add_option_new_admin_email', 'update_option_new_admin_email', 10, 2 ); + +function send_confirmation_on_profile_email() { + global $errors, $wpdb; + $current_user = wp_get_current_user(); + if ( ! is_object($errors) ) + $errors = new WP_Error(); + + if ( $current_user->ID != $_POST['user_id'] ) + return false; + + if ( $current_user->user_email != $_POST['email'] ) { + if ( !is_email( $_POST['email'] ) ) { + $errors->add( 'user_email', __( "ERROR: The email address isn’t correct." ), array( 'form-field' => 'email' ) ); + return; + } + + if ( $wpdb->get_var( $wpdb->prepare( "SELECT user_email FROM {$wpdb->users} WHERE user_email=%s", $_POST['email'] ) ) ) { + $errors->add( 'user_email', __( "ERROR: The email address is already used." ), array( 'form-field' => 'email' ) ); + delete_option( $current_user->ID . '_new_email' ); + return; + } + + $hash = md5( $_POST['email'] . time() . mt_rand() ); + $new_user_email = array( + 'hash' => $hash, + 'newemail' => $_POST['email'] + ); + update_option( $current_user->ID . '_new_email', $new_user_email ); + + $email_text = __( 'Dear user, + +You recently requested to have the email address on your account changed. +If this is correct, please click on the following link to change it: +###ADMIN_URL### + +You can safely ignore and delete this email if you do not want to +take this action. + +This email has been sent to ###EMAIL### + +Regards, +All at ###SITENAME### +###SITEURL###' ); + + /** + * Filter the email text sent when a user changes emails. + * + * The following strings have a special meaning and will get replaced dynamically: + * ###ADMIN_URL### The link to click on to confirm the email change. Required otherwise this functunalty is will break. + * ###EMAIL### The new email. + * ###SITENAME### The name of the site. + * ###SITEURL### The URL to the site. + * + * @since MU + * + * @param string $email_text Text in the email. + * @param string $new_user_email New user email that the current user has changed to. + */ + $content = apply_filters( 'new_user_email_content', $email_text, $new_user_email ); + + $content = str_replace( '###ADMIN_URL###', esc_url( admin_url( 'profile.php?newuseremail='.$hash ) ), $content ); + $content = str_replace( '###EMAIL###', $_POST['email'], $content); + $content = str_replace( '###SITENAME###', get_site_option( 'site_name' ), $content ); + $content = str_replace( '###SITEURL###', network_home_url(), $content ); + + wp_mail( $_POST['email'], sprintf( __( '[%s] New Email Address' ), get_option( 'blogname' ) ), $content ); + $_POST['email'] = $current_user->user_email; + } +} +add_action( 'personal_options_update', 'send_confirmation_on_profile_email' ); + +function new_user_email_admin_notice() { + if ( strpos( $_SERVER['PHP_SELF'], 'profile.php' ) && isset( $_GET['updated'] ) && $email = get_option( get_current_user_id() . '_new_email' ) ) + echo "
    " . sprintf( __( "Your email address has not been updated yet. Please check your inbox at %s for a confirmation email." ), $email['newemail'] ) . "
    "; +} +add_action( 'admin_notices', 'new_user_email_admin_notice' ); + +/** + * Check whether a blog has used its allotted upload space. + * + * @since MU + * + * @param bool $echo Optional. If $echo is set and the quota is exceeded, a warning message is echoed. Default is true. + * @return int + */ +function upload_is_user_over_quota( $echo = true ) { + if ( get_site_option( 'upload_space_check_disabled' ) ) + return false; + + $space_allowed = get_space_allowed(); + if ( empty( $space_allowed ) || !is_numeric( $space_allowed ) ) + $space_allowed = 10; // Default space allowed is 10 MB + + $space_used = get_space_used(); + + if ( ( $space_allowed - $space_used ) < 0 ) { + if ( $echo ) + _e( 'Sorry, you have used your space allocation. Please delete some files to upload more files.' ); + return true; + } else { + return false; + } +} + +/** + * Displays the amount of disk space used by the current blog. Not used in core. + * + * @since MU + */ +function display_space_usage() { + $space_allowed = get_space_allowed(); + $space_used = get_space_used(); + + $percent_used = ( $space_used / $space_allowed ) * 100; + + if ( $space_allowed > 1000 ) { + $space = number_format( $space_allowed / 1024 ); + /* translators: Gigabytes */ + $space .= __( 'GB' ); + } else { + $space = number_format( $space_allowed ); + /* translators: Megabytes */ + $space .= __( 'MB' ); + } + ?> + + + + + + + update( $wpdb->users, array( sanitize_key( $pref ) => $value ), array( 'ID' => $id ) ); + + $user = new WP_User( $id ); + clean_user_cache( $user ); + + if ( $pref == 'spam' ) { + if ( $value == 1 ) { + /** + * Fires after the user is marked as a SPAM user. + * + * @since 3.0.0 + * + * @param int $id ID of the user marked as SPAM. + */ + do_action( 'make_spam_user', $id ); + } else { + /** + * Fires after the user is marked as a HAM user. Opposite of SPAM. + * + * @since 3.0.0 + * + * @param int $id ID of the user marked as HAM. + */ + do_action( 'make_ham_user', $id ); + } + } + + return $value; +} + +function refresh_user_details( $id ) { + $id = (int) $id; + + if ( !$user = get_userdata( $id ) ) + return false; + + clean_user_cache( $user ); + + return $id; +} + +function format_code_lang( $code = '' ) { + $code = strtolower( substr( $code, 0, 2 ) ); + $lang_codes = array( + 'aa' => 'Afar', 'ab' => 'Abkhazian', 'af' => 'Afrikaans', 'ak' => 'Akan', 'sq' => 'Albanian', 'am' => 'Amharic', 'ar' => 'Arabic', 'an' => 'Aragonese', 'hy' => 'Armenian', 'as' => 'Assamese', 'av' => 'Avaric', 'ae' => 'Avestan', 'ay' => 'Aymara', 'az' => 'Azerbaijani', 'ba' => 'Bashkir', 'bm' => 'Bambara', 'eu' => 'Basque', 'be' => 'Belarusian', 'bn' => 'Bengali', + 'bh' => 'Bihari', 'bi' => 'Bislama', 'bs' => 'Bosnian', 'br' => 'Breton', 'bg' => 'Bulgarian', 'my' => 'Burmese', 'ca' => 'Catalan; Valencian', 'ch' => 'Chamorro', 'ce' => 'Chechen', 'zh' => 'Chinese', 'cu' => 'Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic', 'cv' => 'Chuvash', 'kw' => 'Cornish', 'co' => 'Corsican', 'cr' => 'Cree', + 'cs' => 'Czech', 'da' => 'Danish', 'dv' => 'Divehi; Dhivehi; Maldivian', 'nl' => 'Dutch; Flemish', 'dz' => 'Dzongkha', 'en' => 'English', 'eo' => 'Esperanto', 'et' => 'Estonian', 'ee' => 'Ewe', 'fo' => 'Faroese', 'fj' => 'Fijjian', 'fi' => 'Finnish', 'fr' => 'French', 'fy' => 'Western Frisian', 'ff' => 'Fulah', 'ka' => 'Georgian', 'de' => 'German', 'gd' => 'Gaelic; Scottish Gaelic', + 'ga' => 'Irish', 'gl' => 'Galician', 'gv' => 'Manx', 'el' => 'Greek, Modern', 'gn' => 'Guarani', 'gu' => 'Gujarati', 'ht' => 'Haitian; Haitian Creole', 'ha' => 'Hausa', 'he' => 'Hebrew', 'hz' => 'Herero', 'hi' => 'Hindi', 'ho' => 'Hiri Motu', 'hu' => 'Hungarian', 'ig' => 'Igbo', 'is' => 'Icelandic', 'io' => 'Ido', 'ii' => 'Sichuan Yi', 'iu' => 'Inuktitut', 'ie' => 'Interlingue', + 'ia' => 'Interlingua (International Auxiliary Language Association)', 'id' => 'Indonesian', 'ik' => 'Inupiaq', 'it' => 'Italian', 'jv' => 'Javanese', 'ja' => 'Japanese', 'kl' => 'Kalaallisut; Greenlandic', 'kn' => 'Kannada', 'ks' => 'Kashmiri', 'kr' => 'Kanuri', 'kk' => 'Kazakh', 'km' => 'Central Khmer', 'ki' => 'Kikuyu; Gikuyu', 'rw' => 'Kinyarwanda', 'ky' => 'Kirghiz; Kyrgyz', + 'kv' => 'Komi', 'kg' => 'Kongo', 'ko' => 'Korean', 'kj' => 'Kuanyama; Kwanyama', 'ku' => 'Kurdish', 'lo' => 'Lao', 'la' => 'Latin', 'lv' => 'Latvian', 'li' => 'Limburgan; Limburger; Limburgish', 'ln' => 'Lingala', 'lt' => 'Lithuanian', 'lb' => 'Luxembourgish; Letzeburgesch', 'lu' => 'Luba-Katanga', 'lg' => 'Ganda', 'mk' => 'Macedonian', 'mh' => 'Marshallese', 'ml' => 'Malayalam', + 'mi' => 'Maori', 'mr' => 'Marathi', 'ms' => 'Malay', 'mg' => 'Malagasy', 'mt' => 'Maltese', 'mo' => 'Moldavian', 'mn' => 'Mongolian', 'na' => 'Nauru', 'nv' => 'Navajo; Navaho', 'nr' => 'Ndebele, South; South Ndebele', 'nd' => 'Ndebele, North; North Ndebele', 'ng' => 'Ndonga', 'ne' => 'Nepali', 'nn' => 'Norwegian Nynorsk; Nynorsk, Norwegian', 'nb' => 'Bokmål, Norwegian, Norwegian Bokmål', + 'no' => 'Norwegian', 'ny' => 'Chichewa; Chewa; Nyanja', 'oc' => 'Occitan, Provençal', 'oj' => 'Ojibwa', 'or' => 'Oriya', 'om' => 'Oromo', 'os' => 'Ossetian; Ossetic', 'pa' => 'Panjabi; Punjabi', 'fa' => 'Persian', 'pi' => 'Pali', 'pl' => 'Polish', 'pt' => 'Portuguese', 'ps' => 'Pushto', 'qu' => 'Quechua', 'rm' => 'Romansh', 'ro' => 'Romanian', 'rn' => 'Rundi', 'ru' => 'Russian', + 'sg' => 'Sango', 'sa' => 'Sanskrit', 'sr' => 'Serbian', 'hr' => 'Croatian', 'si' => 'Sinhala; Sinhalese', 'sk' => 'Slovak', 'sl' => 'Slovenian', 'se' => 'Northern Sami', 'sm' => 'Samoan', 'sn' => 'Shona', 'sd' => 'Sindhi', 'so' => 'Somali', 'st' => 'Sotho, Southern', 'es' => 'Spanish; Castilian', 'sc' => 'Sardinian', 'ss' => 'Swati', 'su' => 'Sundanese', 'sw' => 'Swahili', + 'sv' => 'Swedish', 'ty' => 'Tahitian', 'ta' => 'Tamil', 'tt' => 'Tatar', 'te' => 'Telugu', 'tg' => 'Tajik', 'tl' => 'Tagalog', 'th' => 'Thai', 'bo' => 'Tibetan', 'ti' => 'Tigrinya', 'to' => 'Tonga (Tonga Islands)', 'tn' => 'Tswana', 'ts' => 'Tsonga', 'tk' => 'Turkmen', 'tr' => 'Turkish', 'tw' => 'Twi', 'ug' => 'Uighur; Uyghur', 'uk' => 'Ukrainian', 'ur' => 'Urdu', 'uz' => 'Uzbek', + 've' => 'Venda', 'vi' => 'Vietnamese', 'vo' => 'Volapük', 'cy' => 'Welsh','wa' => 'Walloon','wo' => 'Wolof', 'xh' => 'Xhosa', 'yi' => 'Yiddish', 'yo' => 'Yoruba', 'za' => 'Zhuang; Chuang', 'zu' => 'Zulu' ); + + /** + * Filter the language codes. + * + * @since MU + * + * @param array $lang_codes Key/value pair of language codes where key is the short version. + * @param string $code A two-letter designation of the language. + */ + $lang_codes = apply_filters( 'lang_codes', $lang_codes, $code ); + return strtr( $code, $lang_codes ); +} + +function sync_category_tag_slugs( $term, $taxonomy ) { + if ( global_terms_enabled() && ( $taxonomy == 'category' || $taxonomy == 'post_tag' ) ) { + if ( is_object( $term ) ) { + $term->slug = sanitize_title( $term->name ); + } else { + $term['slug'] = sanitize_title( $term['name'] ); + } + } + return $term; +} +add_filter( 'get_term', 'sync_category_tag_slugs', 10, 2 ); + +function _access_denied_splash() { + if ( ! is_user_logged_in() || is_network_admin() ) + return; + + $blogs = get_blogs_of_user( get_current_user_id() ); + + if ( wp_list_filter( $blogs, array( 'userblog_id' => get_current_blog_id() ) ) ) + return; + + $blog_name = get_bloginfo( 'name' ); + + if ( empty( $blogs ) ) + wp_die( sprintf( __( 'You attempted to access the "%1$s" dashboard, but you do not currently have privileges on this site. If you believe you should be able to access the "%1$s" dashboard, please contact your network administrator.' ), $blog_name ) ); + + $output = '

    ' . sprintf( __( 'You attempted to access the "%1$s" dashboard, but you do not currently have privileges on this site. If you believe you should be able to access the "%1$s" dashboard, please contact your network administrator.' ), $blog_name ) . '

    '; + $output .= '

    ' . __( 'If you reached this screen by accident and meant to visit one of your own sites, here are some shortcuts to help you find your way.' ) . '

    '; + + $output .= '

    ' . __('Your Sites') . '

    '; + $output .= ''; + + foreach ( $blogs as $blog ) { + $output .= ""; + $output .= ""; + $output .= ""; + $output .= ""; + } + $output .= '
    "; + $output .= "{$blog->blogname}"; + $output .= ""; + $output .= "" . __( 'Visit Dashboard' ) . " | " . __( 'View Site' ) . "" ; + $output .= "
    '; + + wp_die( $output ); +} +add_action( 'admin_page_access_denied', '_access_denied_splash', 99 ); + +function check_import_new_users( $permission ) { + if ( !is_super_admin() ) + return false; + return true; +} +add_filter( 'import_allow_create_users', 'check_import_new_users' ); +// See "import_allow_fetch_attachments" and "import_attachment_size_limit" filters too. + +function mu_dropdown_languages( $lang_files = array(), $current = '' ) { + $flag = false; + $output = array(); + + foreach ( (array) $lang_files as $val ) { + $code_lang = basename( $val, '.mo' ); + + if ( $code_lang == 'en_US' ) { // American English + $flag = true; + $ae = __( 'American English' ); + $output[$ae] = ''; + } elseif ( $code_lang == 'en_GB' ) { // British English + $flag = true; + $be = __( 'British English' ); + $output[$be] = ''; + } else { + $translated = format_code_lang( $code_lang ); + $output[$translated] = ''; + } + + } + + if ( $flag === false ) // WordPress english + $output[] = '"; + + // Order by name + uksort( $output, 'strnatcasecmp' ); + /** + * Filter the languages available in the dropdown. + * + * @since MU + * + * @param array $output HTML output of the dropdown. + * @param array $lang_files Available language files. + * @param string $current The current language code. + */ + $output = apply_filters( 'mu_dropdown_languages', $output, $lang_files, $current ); + echo implode( "\n\t", $output ); +} + +function site_admin_notice() { + global $wp_db_version; + if ( !is_super_admin() ) + return false; + if ( get_site_option( 'wpmu_upgrade_site' ) != $wp_db_version ) + echo "
    " . sprintf( __( 'Thank you for Updating! Please visit the Upgrade Network page to update all your sites.' ), esc_url( network_admin_url( 'upgrade.php' ) ) ) . "
    "; +} +add_action( 'admin_notices', 'site_admin_notice' ); +add_action( 'network_admin_notices', 'site_admin_notice' ); + +function avoid_blog_page_permalink_collision( $data, $postarr ) { + if ( is_subdomain_install() ) + return $data; + if ( $data['post_type'] != 'page' ) + return $data; + if ( !isset( $data['post_name'] ) || $data['post_name'] == '' ) + return $data; + if ( !is_main_site() ) + return $data; + + $post_name = $data['post_name']; + $c = 0; + while( $c < 10 && get_id_from_blogname( $post_name ) ) { + $post_name .= mt_rand( 1, 10 ); + $c ++; + } + if ( $post_name != $data['post_name'] ) { + $data['post_name'] = $post_name; + } + return $data; +} +add_filter( 'wp_insert_post_data', 'avoid_blog_page_permalink_collision', 10, 2 ); + +function choose_primary_blog() { + ?> + + + + + + + + + + + +
    + 1 ) { + $found = false; + ?> + + userblog_id ); + } + } elseif ( count( $all_blogs ) == 1 ) { + $blog = array_shift( $all_blogs ); + echo $blog->domain; + if ( $primary_blog != $blog->userblog_id ) // Set the primary blog again if it's out of sync with blog list. + update_user_meta( get_current_user_id(), 'primary_blog', $blog->userblog_id ); + } else { + echo "N/A"; + } + ?> +
    + + +
    + user_login, $super_admins ) ) { + $super_admins[] = $user->user_login; + update_site_option( 'site_admins' , $super_admins ); + + /** + * Fires after the user is granted Super Admin privileges. + * + * @since 3.0.0 + * + * @param int $user_id ID of the user that was granted Super Admin privileges. + */ + do_action( 'granted_super_admin', $user_id ); + return true; + } + return false; +} + +/** + * Revokes Super Admin privileges. + * + * @since 3.0.0 + * @param int $user_id ID of the user Super Admin privileges to be revoked from. + */ +function revoke_super_admin( $user_id ) { + global $super_admins; + + // If global super_admins override is defined, there is nothing to do here. + if ( isset( $super_admins ) ) + return false; + + /** + * Fires before the user's Super Admin privileges are revoked. + * + * @since 3.0.0 + * + * @param int $user_id ID of the user Super Admin privileges are being revoked from. + */ + do_action( 'revoke_super_admin', $user_id ); + + // Directly fetch site_admins instead of using get_super_admins() + $super_admins = get_site_option( 'site_admins', array( 'admin' ) ); + + $user = get_userdata( $user_id ); + if ( $user && 0 !== strcasecmp( $user->user_email, get_site_option( 'admin_email' ) ) ) { + if ( false !== ( $key = array_search( $user->user_login, $super_admins ) ) ) { + unset( $super_admins[$key] ); + update_site_option( 'site_admins', $super_admins ); + + /** + * Fires after the user's Super Admin privileges are revoked. + * + * @since 3.0.0 + * + * @param int $user_id ID of the user Super Admin privileges were revoked from. + */ + do_action( 'revoked_super_admin', $user_id ); + return true; + } + } + return false; +} + +/** + * Whether or not we can edit this network from this page + * + * By default editing of network is restricted to the Network Admin for that site_id this allows for this to be overridden + * + * @since 3.1.0 + * @param integer $site_id The network/site ID to check. + */ +function can_edit_network( $site_id ) { + global $wpdb; + + if ( $site_id == $wpdb->siteid ) + $result = true; + else + $result = false; + + /** + * Filter whether this network can be edited from this page. + * + * @since 3.1.0 + * + * @param bool $result Whether the network can be edited from this page. + * @param int $site_id The network/site ID to check. + */ + return apply_filters( 'can_edit_network', $result, $site_id ); +} + +/** + * Thickbox image paths for Network Admin. + * + * @since 3.1.0 + * @access private + */ +function _thickbox_path_admin_subfolder() { +?> + + $_wp_nav_menu_max_depth ? $depth : $_wp_nav_menu_max_depth; + + ob_start(); + $item_id = esc_attr( $item->ID ); + $removed_args = array( + 'action', + 'customlink-tab', + 'edit-menu-item', + 'menu-item', + 'page-tab', + '_wpnonce', + ); + + $original_title = ''; + if ( 'taxonomy' == $item->type ) { + $original_title = get_term_field( 'name', $item->object_id, $item->object, 'raw' ); + if ( is_wp_error( $original_title ) ) + $original_title = false; + } elseif ( 'post_type' == $item->type ) { + $original_object = get_post( $item->object_id ); + $original_title = get_the_title( $original_object->ID ); + } + + $classes = array( + 'menu-item menu-item-depth-' . $depth, + 'menu-item-' . esc_attr( $item->object ), + 'menu-item-edit-' . ( ( isset( $_GET['edit-menu-item'] ) && $item_id == $_GET['edit-menu-item'] ) ? 'active' : 'inactive'), + ); + + $title = $item->title; + + if ( ! empty( $item->_invalid ) ) { + $classes[] = 'menu-item-invalid'; + /* translators: %s: title of menu item which is invalid */ + $title = sprintf( __( '%s (Invalid)' ), $item->title ); + } elseif ( isset( $item->post_status ) && 'draft' == $item->post_status ) { + $classes[] = 'pending'; + /* translators: %s: title of menu item in draft status */ + $title = sprintf( __('%s (Pending)'), $item->title ); + } + + $title = ( ! isset( $item->label ) || '' == $item->label ) ? $title : $item->label; + + $submenu_text = ''; + if ( 0 == $depth ) + $submenu_text = 'style="display: none;"'; + + ?> +
  5. '; + $output .= ''; + + // Menu item hidden fields + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + } + +} // Walker_Nav_Menu_Checklist + +/** + * Prints the appropriate response to a menu quick search. + * + * @since 3.0.0 + * + * @param array $request The unsanitized request values. + */ +function _wp_ajax_menu_quick_search( $request = array() ) { + $args = array(); + $type = isset( $request['type'] ) ? $request['type'] : ''; + $object_type = isset( $request['object_type'] ) ? $request['object_type'] : ''; + $query = isset( $request['q'] ) ? $request['q'] : ''; + $response_format = isset( $request['response-format'] ) && in_array( $request['response-format'], array( 'json', 'markup' ) ) ? $request['response-format'] : 'json'; + + if ( 'markup' == $response_format ) { + $args['walker'] = new Walker_Nav_Menu_Checklist; + } + + if ( 'get-post-item' == $type ) { + if ( post_type_exists( $object_type ) ) { + if ( isset( $request['ID'] ) ) { + $object_id = (int) $request['ID']; + if ( 'markup' == $response_format ) { + echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', array( get_post( $object_id ) ) ), 0, (object) $args ); + } elseif ( 'json' == $response_format ) { + $post_obj = get_post( $object_id ); + echo json_encode( + array( + 'ID' => $object_id, + 'post_title' => get_the_title( $object_id ), + 'post_type' => get_post_type( $object_id ), + ) + ); + echo "\n"; + } + } + } elseif ( taxonomy_exists( $object_type ) ) { + if ( isset( $request['ID'] ) ) { + $object_id = (int) $request['ID']; + if ( 'markup' == $response_format ) { + echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', array( get_term( $object_id, $object_type ) ) ), 0, (object) $args ); + } elseif ( 'json' == $response_format ) { + $post_obj = get_term( $object_id, $object_type ); + echo json_encode( + array( + 'ID' => $object_id, + 'post_title' => $post_obj->name, + 'post_type' => $object_type, + ) + ); + echo "\n"; + } + } + + } + + } elseif ( preg_match('/quick-search-(posttype|taxonomy)-([a-zA-Z_-]*\b)/', $type, $matches) ) { + if ( 'posttype' == $matches[1] && get_post_type_object( $matches[2] ) ) { + query_posts(array( + 'posts_per_page' => 10, + 'post_type' => $matches[2], + 's' => $query, + )); + if ( ! have_posts() ) + return; + while ( have_posts() ) { + the_post(); + if ( 'markup' == $response_format ) { + $var_by_ref = get_the_ID(); + echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', array( get_post( $var_by_ref ) ) ), 0, (object) $args ); + } elseif ( 'json' == $response_format ) { + echo json_encode( + array( + 'ID' => get_the_ID(), + 'post_title' => get_the_title(), + 'post_type' => get_post_type(), + ) + ); + echo "\n"; + } + } + } elseif ( 'taxonomy' == $matches[1] ) { + $terms = get_terms( $matches[2], array( + 'name__like' => $query, + 'number' => 10, + )); + if ( empty( $terms ) || is_wp_error( $terms ) ) + return; + foreach( (array) $terms as $term ) { + if ( 'markup' == $response_format ) { + echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', array( $term ) ), 0, (object) $args ); + } elseif ( 'json' == $response_format ) { + echo json_encode( + array( + 'ID' => $term->term_id, + 'post_title' => $term->name, + 'post_type' => $matches[2], + ) + ); + echo "\n"; + } + } + } + } +} + +/** + * Register nav menu metaboxes and advanced menu items + * + * @since 3.0.0 + **/ +function wp_nav_menu_setup() { + // Register meta boxes + wp_nav_menu_post_type_meta_boxes(); + add_meta_box( 'add-custom-links', __( 'Links' ), 'wp_nav_menu_item_link_meta_box', 'nav-menus', 'side', 'default' ); + wp_nav_menu_taxonomy_meta_boxes(); + + // Register advanced menu items (columns) + add_filter( 'manage_nav-menus_columns', 'wp_nav_menu_manage_columns' ); + + // If first time editing, disable advanced items by default. + if( false === get_user_option( 'managenav-menuscolumnshidden' ) ) { + $user = wp_get_current_user(); + update_user_option($user->ID, 'managenav-menuscolumnshidden', + array( 0 => 'link-target', 1 => 'css-classes', 2 => 'xfn', 3 => 'description', ), + true); + } +} + +/** + * Limit the amount of meta boxes to just links, pages and cats for first time users. + * + * @since 3.0.0 + **/ +function wp_initial_nav_menu_meta_boxes() { + global $wp_meta_boxes; + + if ( get_user_option( 'metaboxhidden_nav-menus' ) !== false || ! is_array($wp_meta_boxes) ) + return; + + $initial_meta_boxes = array( 'nav-menu-theme-locations', 'add-page', 'add-custom-links', 'add-category' ); + $hidden_meta_boxes = array(); + + foreach ( array_keys($wp_meta_boxes['nav-menus']) as $context ) { + foreach ( array_keys($wp_meta_boxes['nav-menus'][$context]) as $priority ) { + foreach ( $wp_meta_boxes['nav-menus'][$context][$priority] as $box ) { + if ( in_array( $box['id'], $initial_meta_boxes ) ) { + unset( $box['id'] ); + } else { + $hidden_meta_boxes[] = $box['id']; + } + } + } + } + + $user = wp_get_current_user(); + update_user_option( $user->ID, 'metaboxhidden_nav-menus', $hidden_meta_boxes, true ); +} + +/** + * Creates metaboxes for any post type menu item. + * + * @since 3.0.0 + */ +function wp_nav_menu_post_type_meta_boxes() { + $post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'object' ); + + if ( ! $post_types ) + return; + + foreach ( $post_types as $post_type ) { + /** + * Filter whether a menu items meta box will be added for the current post type. + * + * If a falsey value is returned instead of a post type object, + * the post type menu items meta box will not be added. + * + * @since 3.0.0 + * + * @param object $post_type The post type object to be used as a meta box. + */ + $post_type = apply_filters( 'nav_menu_meta_box_object', $post_type ); + if ( $post_type ) { + $id = $post_type->name; + // give pages a higher priority + $priority = ( 'page' == $post_type->name ? 'core' : 'default' ); + add_meta_box( "add-{$id}", $post_type->labels->name, 'wp_nav_menu_item_post_type_meta_box', 'nav-menus', 'side', $priority, $post_type ); + } + } +} + +/** + * Creates metaboxes for any taxonomy menu item. + * + * @since 3.0.0 + */ +function wp_nav_menu_taxonomy_meta_boxes() { + $taxonomies = get_taxonomies( array( 'show_in_nav_menus' => true ), 'object' ); + + if ( !$taxonomies ) + return; + + foreach ( $taxonomies as $tax ) { + /** + * Filter whether a menu items meta box will be added for the current taxonomy. + * + * If a falsey value is returned instead of a taxonomy object, + * the taxonomy menu items meta box will not be added. + * + * @since 3.0.0 + * + * @param object $tax The taxonomy object to be used as a meta box. + */ + $tax = apply_filters( 'nav_menu_meta_box_object', $tax ); + if ( $tax ) { + $id = $tax->name; + add_meta_box( "add-{$id}", $tax->labels->name, 'wp_nav_menu_item_taxonomy_meta_box', 'nav-menus', 'side', 'default', $tax ); + } + } +} + +/** + * Check whether to disable the Menu Locations meta box submit button + * + * @since 3.6.0 + * + * @uses global $one_theme_location_no_menus to determine if no menus exist + * @uses disabled() to output the disabled attribute in $other_attributes param in submit_button() + * + * @param int|string $nav_menu_selected_id (id, name or slug) of the currently-selected menu + * @return string Disabled attribute if at least one menu exists, false if not +*/ +function wp_nav_menu_disabled_check( $nav_menu_selected_id ) { + global $one_theme_location_no_menus; + + if ( $one_theme_location_no_menus ) + return false; + + return disabled( $nav_menu_selected_id, 0 ); +} + +/** + * Displays a metabox for the custom links menu item. + * + * @since 3.0.0 + */ +function wp_nav_menu_item_link_meta_box() { + global $_nav_menu_placeholder, $nav_menu_selected_id; + + $_nav_menu_placeholder = 0 > $_nav_menu_placeholder ? $_nav_menu_placeholder - 1 : -1; + + ?> +
    + + + + + +

    + + class="button-secondary submit-add-to-menu right" value="" name="add-custom-menu-item" id="submit-customlinkdiv" /> + + +

    + +
    + name; + + // paginate browsing for large numbers of post objects + $per_page = 50; + $pagenum = isset( $_REQUEST[$post_type_name . '-tab'] ) && isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 1; + $offset = 0 < $pagenum ? $per_page * ( $pagenum - 1 ) : 0; + + $args = array( + 'offset' => $offset, + 'order' => 'ASC', + 'orderby' => 'title', + 'posts_per_page' => $per_page, + 'post_type' => $post_type_name, + 'suppress_filters' => true, + 'update_post_term_cache' => false, + 'update_post_meta_cache' => false + ); + + if ( isset( $post_type['args']->_default_query ) ) + $args = array_merge($args, (array) $post_type['args']->_default_query ); + + // @todo transient caching of these results with proper invalidation on updating of a post of this type + $get_posts = new WP_Query; + $posts = $get_posts->query( $args ); + if ( ! $get_posts->post_count ) { + echo '

    ' . __( 'No items.' ) . '

    '; + return; + } + + $post_type_object = get_post_type_object($post_type_name); + + $num_pages = $get_posts->max_num_pages; + + $page_links = paginate_links( array( + 'base' => add_query_arg( + array( + $post_type_name . '-tab' => 'all', + 'paged' => '%#%', + 'item-type' => 'post_type', + 'item-object' => $post_type_name, + ) + ), + 'format' => '', + 'prev_text' => __('«'), + 'next_text' => __('»'), + 'total' => $num_pages, + 'current' => $pagenum + )); + + if ( !$posts ) + $error = '
  6. '. $post_type['args']->labels->not_found .'
  7. '; + + $db_fields = false; + if ( is_post_type_hierarchical( $post_type_name ) ) { + $db_fields = array( 'parent' => 'post_parent', 'id' => 'ID' ); + } + + $walker = new Walker_Nav_Menu_Checklist( $db_fields ); + + $current_tab = 'most-recent'; + if ( isset( $_REQUEST[$post_type_name . '-tab'] ) && in_array( $_REQUEST[$post_type_name . '-tab'], array('all', 'search') ) ) { + $current_tab = $_REQUEST[$post_type_name . '-tab']; + } + + if ( ! empty( $_REQUEST['quick-search-posttype-' . $post_type_name] ) ) { + $current_tab = 'search'; + } + + $removed_args = array( + 'action', + 'customlink-tab', + 'edit-menu-item', + 'menu-item', + 'page-tab', + '_wpnonce', + ); + + ?> +
    + + +
    +
      + 'post_date', 'order' => 'DESC', 'posts_per_page' => 15 ) ); + $most_recent = $get_posts->query( $recent_args ); + $args['walker'] = $walker; + echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $most_recent), 0, (object) $args ); + ?> +
    +
    + + + +
    + + + +
      + front_or_home = true; + array_unshift( $posts, $front_page_obj ); + } else { + $_nav_menu_placeholder = ( 0 > $_nav_menu_placeholder ) ? intval($_nav_menu_placeholder) - 1 : -1; + array_unshift( $posts, (object) array( + 'front_or_home' => true, + 'ID' => 0, + 'object_id' => $_nav_menu_placeholder, + 'post_content' => '', + 'post_excerpt' => '', + 'post_parent' => '', + 'post_title' => _x('Home', 'nav menu home label'), + 'post_type' => 'nav_menu_item', + 'type' => 'custom', + 'url' => home_url('/'), + ) ); + } + } + + /** + * Filter the posts displayed in the 'View All' tab of the current + * post type's menu items meta box. + * + * The dynamic portion of the hook name, $post_type_name, + * refers to the slug of the current post type. + * + * @since 3.2.0 + * + * @see WP_Query::query() + * + * @param array $posts The posts for the current post type. + * @param array $args An array of WP_Query arguments. + * @param object $post_type The current post type object for this menu item meta box. + */ + $posts = apply_filters( "nav_menu_items_{$post_type_name}", $posts, $args, $post_type ); + $checkbox_items = walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $posts), 0, (object) $args ); + + if ( 'all' == $current_tab && ! empty( $_REQUEST['selectall'] ) ) { + $checkbox_items = preg_replace('/(type=(.)checkbox(\2))/', '$1 checked=$2checked$2', $checkbox_items); + + } + + echo $checkbox_items; + ?> +
    + + + +
    + +

    + + + + + + class="button-secondary submit-add-to-menu right" value="" name="add-post-type-menu-item" id="" /> + + +

    + +
    + name; + + // paginate browsing for large numbers of objects + $per_page = 50; + $pagenum = isset( $_REQUEST[$taxonomy_name . '-tab'] ) && isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 1; + $offset = 0 < $pagenum ? $per_page * ( $pagenum - 1 ) : 0; + + $args = array( + 'child_of' => 0, + 'exclude' => '', + 'hide_empty' => false, + 'hierarchical' => 1, + 'include' => '', + 'number' => $per_page, + 'offset' => $offset, + 'order' => 'ASC', + 'orderby' => 'name', + 'pad_counts' => false, + ); + + $terms = get_terms( $taxonomy_name, $args ); + + if ( ! $terms || is_wp_error($terms) ) { + echo '

    ' . __( 'No items.' ) . '

    '; + return; + } + + $num_pages = ceil( wp_count_terms( $taxonomy_name , array_merge( $args, array('number' => '', 'offset' => '') ) ) / $per_page ); + + $page_links = paginate_links( array( + 'base' => add_query_arg( + array( + $taxonomy_name . '-tab' => 'all', + 'paged' => '%#%', + 'item-type' => 'taxonomy', + 'item-object' => $taxonomy_name, + ) + ), + 'format' => '', + 'prev_text' => __('«'), + 'next_text' => __('»'), + 'total' => $num_pages, + 'current' => $pagenum + )); + + $db_fields = false; + if ( is_taxonomy_hierarchical( $taxonomy_name ) ) { + $db_fields = array( 'parent' => 'parent', 'id' => 'term_id' ); + } + + $walker = new Walker_Nav_Menu_Checklist( $db_fields ); + + $current_tab = 'most-used'; + if ( isset( $_REQUEST[$taxonomy_name . '-tab'] ) && in_array( $_REQUEST[$taxonomy_name . '-tab'], array('all', 'most-used', 'search') ) ) { + $current_tab = $_REQUEST[$taxonomy_name . '-tab']; + } + + if ( ! empty( $_REQUEST['quick-search-taxonomy-' . $taxonomy_name] ) ) { + $current_tab = 'search'; + } + + $removed_args = array( + 'action', + 'customlink-tab', + 'edit-menu-item', + 'menu-item', + 'page-tab', + '_wpnonce', + ); + + ?> +
    + + +
    +
      + 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) ); + $args['walker'] = $walker; + echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $popular_terms), 0, (object) $args ); + ?> +
    +
    + +
    + + + +
      + +
    + + + +
    + +
    + $searched, 'fields' => 'all', 'orderby' => 'count', 'order' => 'DESC', 'hierarchical' => false ) ); + } else { + $searched = ''; + $search_results = array(); + } + ?> +

    + + + 'submit-quick-search-taxonomy-' . $taxonomy_name ) ); ?> +

    + +
      + + + +
    • get_error_message(); ?>
    • + +
    • + +
    +
    + +

    + + + + + + class="button-secondary submit-add-to-menu right" value="" name="add-taxonomy-menu-item" id="" /> + + +

    + +
    + $_item_object_data ) { + if ( + empty( $_item_object_data['menu-item-object-id'] ) && // checkbox is not checked + ( + ! isset( $_item_object_data['menu-item-type'] ) || // and item type either isn't set + in_array( $_item_object_data['menu-item-url'], array( 'http://', '' ) ) || // or URL is the default + ! ( 'custom' == $_item_object_data['menu-item-type'] && ! isset( $_item_object_data['menu-item-db-id'] ) ) || // or it's not a custom menu item (but not the custom home page) + ! empty( $_item_object_data['menu-item-db-id'] ) // or it *is* a custom menu item that already exists + ) + ) { + continue; // then this potential menu item is not getting added to this menu + } + + // if this possible menu item doesn't actually have a menu database ID yet + if ( + empty( $_item_object_data['menu-item-db-id'] ) || + ( 0 > $_possible_db_id ) || + $_possible_db_id != $_item_object_data['menu-item-db-id'] + ) { + $_actual_db_id = 0; + } else { + $_actual_db_id = (int) $_item_object_data['menu-item-db-id']; + } + + $args = array( + 'menu-item-db-id' => ( isset( $_item_object_data['menu-item-db-id'] ) ? $_item_object_data['menu-item-db-id'] : '' ), + 'menu-item-object-id' => ( isset( $_item_object_data['menu-item-object-id'] ) ? $_item_object_data['menu-item-object-id'] : '' ), + 'menu-item-object' => ( isset( $_item_object_data['menu-item-object'] ) ? $_item_object_data['menu-item-object'] : '' ), + 'menu-item-parent-id' => ( isset( $_item_object_data['menu-item-parent-id'] ) ? $_item_object_data['menu-item-parent-id'] : '' ), + 'menu-item-position' => ( isset( $_item_object_data['menu-item-position'] ) ? $_item_object_data['menu-item-position'] : '' ), + 'menu-item-type' => ( isset( $_item_object_data['menu-item-type'] ) ? $_item_object_data['menu-item-type'] : '' ), + 'menu-item-title' => ( isset( $_item_object_data['menu-item-title'] ) ? $_item_object_data['menu-item-title'] : '' ), + 'menu-item-url' => ( isset( $_item_object_data['menu-item-url'] ) ? $_item_object_data['menu-item-url'] : '' ), + 'menu-item-description' => ( isset( $_item_object_data['menu-item-description'] ) ? $_item_object_data['menu-item-description'] : '' ), + 'menu-item-attr-title' => ( isset( $_item_object_data['menu-item-attr-title'] ) ? $_item_object_data['menu-item-attr-title'] : '' ), + 'menu-item-target' => ( isset( $_item_object_data['menu-item-target'] ) ? $_item_object_data['menu-item-target'] : '' ), + 'menu-item-classes' => ( isset( $_item_object_data['menu-item-classes'] ) ? $_item_object_data['menu-item-classes'] : '' ), + 'menu-item-xfn' => ( isset( $_item_object_data['menu-item-xfn'] ) ? $_item_object_data['menu-item-xfn'] : '' ), + ); + + $items_saved[] = wp_update_nav_menu_item( $menu_id, $_actual_db_id, $args ); + + } + } + return $items_saved; +} + +/** + * Adds custom arguments to some of the meta box object types. + * + * @since 3.0.0 + * + * @access private + * + * @param object $object The post type or taxonomy meta-object. + * @return object The post type of taxonomy object. + */ +function _wp_nav_menu_meta_box_object( $object = null ) { + if ( isset( $object->name ) ) { + + if ( 'page' == $object->name ) { + $object->_default_query = array( + 'orderby' => 'menu_order title', + 'post_status' => 'publish', + ); + + // posts should show only published items + } elseif ( 'post' == $object->name ) { + $object->_default_query = array( + 'post_status' => 'publish', + ); + + // cats should be in reverse chronological order + } elseif ( 'category' == $object->name ) { + $object->_default_query = array( + 'orderby' => 'id', + 'order' => 'DESC', + ); + + // custom post types should show only published items + } else { + $object->_default_query = array( + 'post_status' => 'publish', + ); + } + } + + return $object; +} + +/** + * Returns the menu formatted to edit. + * + * @since 3.0.0 + * + * @param string $menu_id The ID of the menu to format. + * @return string|WP_Error $output The menu formatted to edit or error object on failure. + */ +function wp_get_nav_menu_to_edit( $menu_id = 0 ) { + $menu = wp_get_nav_menu_object( $menu_id ); + + // If the menu exists, get its items. + if ( is_nav_menu( $menu ) ) { + $menu_items = wp_get_nav_menu_items( $menu->term_id, array('post_status' => 'any') ); + $result = '
    ' : '">'; + $result .= '

    ' . __( 'Add menu items from the column on the left.' ) . '

    '; + $result .= '
    '; + + if( empty($menu_items) ) + return $result . ' '; + + /** + * Filter the Walker class used to render a menu formatted for editing. + * + * @since 3.0.0 + * + * @param string $walker_class_name The Walker class used to render a menu formatted for editing. + * @param int $menu_id The ID of the menu being rendered. + */ + $walker_class_name = apply_filters( 'wp_edit_nav_menu_walker', 'Walker_Nav_Menu_Edit', $menu_id ); + + if ( class_exists( $walker_class_name ) ) + $walker = new $walker_class_name; + else + return new WP_Error( 'menu_walker_not_exist', sprintf( __('The Walker class named %s does not exist.'), $walker_class_name ) ); + + $some_pending_menu_items = $some_invalid_menu_items = false; + foreach( (array) $menu_items as $menu_item ) { + if ( isset( $menu_item->post_status ) && 'draft' == $menu_item->post_status ) + $some_pending_menu_items = true; + if ( ! empty( $menu_item->_invalid ) ) + $some_invalid_menu_items = true; + } + + if ( $some_pending_menu_items ) + $result .= '

    ' . __('Click Save Menu to make pending menu items public.') . '

    '; + + if ( $some_invalid_menu_items ) + $result .= '

    ' . __('There are some invalid menu items. Please check or delete them.') . '

    '; + + $result .= ' '; + return $result; + } elseif ( is_wp_error( $menu ) ) { + return $menu; + } + +} + +/** + * Returns the columns for the nav menus page. + * + * @since 3.0.0 + * + * @return string|WP_Error $output The menu formatted to edit or error object on failure. + */ +function wp_nav_menu_manage_columns() { + return array( + '_title' => __('Show advanced menu properties'), + 'cb' => '', + 'link-target' => __('Link Target'), + 'css-classes' => __('CSS Classes'), + 'xfn' => __('Link Relationship (XFN)'), + 'description' => __('Description'), + ); +} + +/** + * Deletes orphaned draft menu items + * + * @access private + * @since 3.0.0 + * + */ +function _wp_delete_orphaned_draft_menu_items() { + global $wpdb; + $delete_timestamp = time() - ( DAY_IN_SECONDS * EMPTY_TRASH_DAYS ); + + // delete orphaned draft menu items + $menu_items_to_delete = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts AS p LEFT JOIN $wpdb->postmeta AS m ON p.ID = m.post_id WHERE post_type = 'nav_menu_item' AND post_status = 'draft' AND meta_key = '_menu_item_orphaned' AND meta_value < '%d'", $delete_timestamp ) ); + + foreach( (array) $menu_items_to_delete as $menu_item_id ) + wp_delete_post( $menu_item_id, true ); +} +add_action('admin_head-nav-menus.php', '_wp_delete_orphaned_draft_menu_items'); + +/** + * Saves nav menu items + * + * @since 3.6.0 + * + * @uses wp_get_nav_menu_items() to retrieve the nav menu's menu items + * @uses wp_defer_term_counter() to enable then disable term counting + * + * @param int|string $nav_menu_selected_id (id, slug, or name ) of the currently-selected menu + * @param string $nav_menu_selected_title Title of the currently-selected menu + * @return array $messages The menu updated message + */ +function wp_nav_menu_update_menu_items ( $nav_menu_selected_id, $nav_menu_selected_title ) { + $unsorted_menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array( 'orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID', 'post_status' => 'draft,publish' ) ); + + $menu_items = array(); + // Index menu items by db ID + foreach ( $unsorted_menu_items as $_item ) + $menu_items[$_item->db_id] = $_item; + + $post_fields = array( + 'menu-item-db-id', 'menu-item-object-id', 'menu-item-object', + 'menu-item-parent-id', 'menu-item-position', 'menu-item-type', + 'menu-item-title', 'menu-item-url', 'menu-item-description', + 'menu-item-attr-title', 'menu-item-target', 'menu-item-classes', 'menu-item-xfn' + ); + + wp_defer_term_counting( true ); + // Loop through all the menu items' POST variables + if ( ! empty( $_POST['menu-item-db-id'] ) ) { + foreach( (array) $_POST['menu-item-db-id'] as $_key => $k ) { + + // Menu item title can't be blank + if ( ! isset( $_POST['menu-item-title'][ $_key ] ) || '' == $_POST['menu-item-title'][ $_key ] ) + continue; + + $args = array(); + foreach ( $post_fields as $field ) + $args[$field] = isset( $_POST[$field][$_key] ) ? $_POST[$field][$_key] : ''; + + $menu_item_db_id = wp_update_nav_menu_item( $nav_menu_selected_id, ( $_POST['menu-item-db-id'][$_key] != $_key ? 0 : $_key ), $args ); + + if ( is_wp_error( $menu_item_db_id ) ) + $messages[] = '

    ' . $menu_item_db_id->get_error_message() . '

    '; + elseif ( isset( $menu_items[$menu_item_db_id] ) ) + unset( $menu_items[$menu_item_db_id] ); + } + } + + // Remove menu items from the menu that weren't in $_POST + if ( ! empty( $menu_items ) ) { + foreach ( array_keys( $menu_items ) as $menu_item_id ) { + if ( is_nav_menu_item( $menu_item_id ) ) { + wp_delete_post( $menu_item_id ); + } + } + } + + // Store 'auto-add' pages. + $auto_add = ! empty( $_POST['auto-add-pages'] ); + $nav_menu_option = (array) get_option( 'nav_menu_options' ); + if ( ! isset( $nav_menu_option['auto_add'] ) ) + $nav_menu_option['auto_add'] = array(); + if ( $auto_add ) { + if ( ! in_array( $nav_menu_selected_id, $nav_menu_option['auto_add'] ) ) + $nav_menu_option['auto_add'][] = $nav_menu_selected_id; + } else { + if ( false !== ( $key = array_search( $nav_menu_selected_id, $nav_menu_option['auto_add'] ) ) ) + unset( $nav_menu_option['auto_add'][$key] ); + } + // Remove nonexistent/deleted menus + $nav_menu_option['auto_add'] = array_intersect( $nav_menu_option['auto_add'], wp_get_nav_menus( array( 'fields' => 'ids' ) ) ); + update_option( 'nav_menu_options', $nav_menu_option ); + + wp_defer_term_counting( false ); + + /** This action is documented in wp-includes/nav-menu.php */ + do_action( 'wp_update_nav_menu', $nav_menu_selected_id ); + + $messages[] = '

    ' . sprintf( __( '%1$s has been updated.' ), $nav_menu_selected_title ) . '

    '; + unset( $menu_items, $unsorted_menu_items ); + + return $messages; +} diff --git a/src/wp-admin/includes/plugin-install.php b/src/wp-admin/includes/plugin-install.php new file mode 100644 index 0000000..37d862e --- /dev/null +++ b/src/wp-admin/includes/plugin-install.php @@ -0,0 +1,452 @@ +per_page) ) + $args->per_page = 24; + + /** + * Override the Plugin Install API arguments. + * + * Please ensure that an object is returned. + * + * @since 2.7.0 + * + * @param object $args Plugin API arguments. + * @param string $action The type of information being requested from the Plugin Install API. + */ + $args = apply_filters( 'plugins_api_args', $args, $action ); + + /** + * Allows a plugin to override the WordPress.org Plugin Install API entirely. + * + * Please ensure that an object is returned. + * + * @since 2.7.0 + * + * @param bool|object The result object. Default is false. + * @param string $action The type of information being requested from the Plugin Install API. + * @param object $args Plugin API arguments. + */ + $res = apply_filters( 'plugins_api', false, $action, $args ); + + if ( false === $res ) { + $url = $http_url = 'http://api.wordpress.org/plugins/info/1.0/'; + if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) + $url = set_url_scheme( $url, 'https' ); + + $args = array( + 'timeout' => 15, + 'body' => array( + 'action' => $action, + 'request' => serialize( $args ) + ) + ); + $request = wp_remote_post( $url, $args ); + + if ( $ssl && is_wp_error( $request ) ) { + trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)', headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); + $request = wp_remote_post( $http_url, $args ); + } + + if ( is_wp_error($request) ) { + $res = new WP_Error('plugins_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ), $request->get_error_message() ); + } else { + $res = maybe_unserialize( wp_remote_retrieve_body( $request ) ); + if ( ! is_object( $res ) && ! is_array( $res ) ) + $res = new WP_Error('plugins_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ), wp_remote_retrieve_body( $request ) ); + } + } elseif ( !is_wp_error($res) ) { + $res->external = true; + } + + /** + * Filter the Plugin Install API response results. + * + * @since 2.7.0 + * + * @param object|WP_Error $res Response object or WP_Error. + * @param string $action The type of information being requested from the Plugin Install API. + * @param object $args Plugin API arguments. + */ + return apply_filters( 'plugins_api_result', $res, $action, $args ); +} + +/** + * Retrieve popular WordPress plugin tags. + * + * @since 2.7.0 + * + * @param array $args + * @return array + */ +function install_popular_tags( $args = array() ) { + $key = md5(serialize($args)); + if ( false !== ($tags = get_site_transient('poptags_' . $key) ) ) + return $tags; + + $tags = plugins_api('hot_tags', $args); + + if ( is_wp_error($tags) ) + return $tags; + + set_site_transient( 'poptags_' . $key, $tags, 3 * HOUR_IN_SECONDS ); + + return $tags; +} + +function install_dashboard() { + ?> +

    WordPress Plugin Directory or upload a plugin in .zip format via this page.' ), 'http://wordpress.org/plugins/', self_admin_url( 'plugin-install.php?tab=upload' ) ); ?>

    + +

    + + +

    +

    + '; + if ( is_wp_error($api_tags) ) { + echo $api_tags->get_error_message(); + } else { + //Set up the tags in a way which can be interpreted by wp_generate_tag_cloud() + $tags = array(); + foreach ( (array)$api_tags as $tag ) + $tags[ $tag['name'] ] = (object) array( + 'link' => esc_url( self_admin_url('plugin-install.php?tab=search&type=tag&s=' . urlencode($tag['name'])) ), + 'name' => $tag['name'], + 'id' => sanitize_title_with_dashes($tag['name']), + 'count' => $tag['count'] ); + echo wp_generate_tag_cloud($tags, array( 'single_text' => __('%s plugin'), 'multiple_text' => __('%s plugins') ) ); + } + echo '


    '; +} +add_action('install_plugins_dashboard', 'install_dashboard'); + +/** + * Display search form for searching plugins. + * + * @since 2.7.0 + */ +function install_search_form( $type_selector = true ) { + $type = isset($_REQUEST['type']) ? wp_unslash( $_REQUEST['type'] ) : 'term'; + $term = isset($_REQUEST['s']) ? wp_unslash( $_REQUEST['s'] ) : ''; + + ?>
    + + + + + + + +
    +

    +

    +
    + + + + +
    + +

    +
    + +

    + + + +

    +
    + display(); +} +add_action( 'install_plugins_search', 'display_plugins_table' ); +add_action( 'install_plugins_featured', 'display_plugins_table' ); +add_action( 'install_plugins_popular', 'display_plugins_table' ); +add_action( 'install_plugins_new', 'display_plugins_table' ); +add_action( 'install_plugins_favorites', 'display_plugins_table' ); + +/** + * Determine the status we can perform on a plugin. + * + * @since 3.0.0 + */ +function install_plugin_install_status($api, $loop = false) { + // this function is called recursively, $loop prevents further loops. + if ( is_array($api) ) + $api = (object) $api; + + //Default to a "new" plugin + $status = 'install'; + $url = false; + + //Check to see if this plugin is known to be installed, and has an update awaiting it. + $update_plugins = get_site_transient('update_plugins'); + if ( isset( $update_plugins->response ) ) { + foreach ( (array)$update_plugins->response as $file => $plugin ) { + if ( $plugin->slug === $api->slug ) { + $status = 'update_available'; + $update_file = $file; + $version = $plugin->new_version; + if ( current_user_can('update_plugins') ) + $url = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=' . $update_file), 'upgrade-plugin_' . $update_file); + break; + } + } + } + + if ( 'install' == $status ) { + if ( is_dir( WP_PLUGIN_DIR . '/' . $api->slug ) ) { + $installed_plugin = get_plugins('/' . $api->slug); + if ( empty($installed_plugin) ) { + if ( current_user_can('install_plugins') ) + $url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $api->slug), 'install-plugin_' . $api->slug); + } else { + $key = array_keys( $installed_plugin ); + $key = array_shift( $key ); //Use the first plugin regardless of the name, Could have issues for multiple-plugins in one directory if they share different version numbers + if ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '=') ){ + $status = 'latest_installed'; + } elseif ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '<') ) { + $status = 'newer_installed'; + $version = $installed_plugin[ $key ]['Version']; + } else { + //If the above update check failed, Then that probably means that the update checker has out-of-date information, force a refresh + if ( ! $loop ) { + delete_site_transient('update_plugins'); + wp_update_plugins(); + return install_plugin_install_status($api, true); + } + } + } + } else { + // "install" & no directory with that slug + if ( current_user_can('install_plugins') ) + $url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $api->slug), 'install-plugin_' . $api->slug); + } + } + if ( isset($_GET['from']) ) + $url .= '&from=' . urlencode( wp_unslash( $_GET['from'] ) ); + + return compact('status', 'url', 'version'); +} + +/** + * Display plugin information in dialog box form. + * + * @since 2.7.0 + */ +function install_plugin_information() { + global $tab; + + $api = plugins_api( 'plugin_information', array( 'slug' => wp_unslash( $_REQUEST['plugin'] ), 'is_ssl' => is_ssl() ) ); + + if ( is_wp_error($api) ) + wp_die($api); + + $plugins_allowedtags = array( + 'a' => array( 'href' => array(), 'title' => array(), 'target' => array() ), + 'abbr' => array( 'title' => array() ), 'acronym' => array( 'title' => array() ), + 'code' => array(), 'pre' => array(), 'em' => array(), 'strong' => array(), + 'div' => array(), 'p' => array(), 'ul' => array(), 'ol' => array(), 'li' => array(), + 'h1' => array(), 'h2' => array(), 'h3' => array(), 'h4' => array(), 'h5' => array(), 'h6' => array(), + 'img' => array( 'src' => array(), 'class' => array(), 'alt' => array() ) + ); + + $plugins_section_titles = array( + 'description' => _x('Description', 'Plugin installer section title'), + 'installation' => _x('Installation', 'Plugin installer section title'), + 'faq' => _x('FAQ', 'Plugin installer section title'), + 'screenshots' => _x('Screenshots', 'Plugin installer section title'), + 'changelog' => _x('Changelog', 'Plugin installer section title'), + 'other_notes' => _x('Other Notes', 'Plugin installer section title') + ); + + //Sanitize HTML + foreach ( (array)$api->sections as $section_name => $content ) + $api->sections[$section_name] = wp_kses($content, $plugins_allowedtags); + foreach ( array( 'version', 'author', 'requires', 'tested', 'homepage', 'downloaded', 'slug' ) as $key ) { + if ( isset( $api->$key ) ) + $api->$key = wp_kses( $api->$key, $plugins_allowedtags ); + } + + $section = isset( $_REQUEST['section'] ) ? wp_unslash( $_REQUEST['section'] ) : 'description'; //Default to the Description tab, Do not translate, API returns English. + if ( empty( $section ) || ! isset( $api->sections[ $section ] ) ) { + $section_titles = array_keys( (array) $api->sections ); + $section = array_shift( $section_titles ); + } + + iframe_header( __('Plugin Install') ); + echo "
    \n"; + echo "
      \n"; + foreach ( (array)$api->sections as $section_name => $content ) { + + if ( isset( $plugins_section_titles[ $section_name ] ) ) + $title = $plugins_section_titles[ $section_name ]; + else + $title = ucwords( str_replace( '_', ' ', $section_name ) ); + + $class = ( $section_name == $section ) ? ' class="current"' : ''; + $href = add_query_arg( array('tab' => $tab, 'section' => $section_name) ); + $href = esc_url($href); + $san_section = esc_attr( $section_name ); + echo "\t
    • $title
    • \n"; + } + echo "
    \n"; + echo "
    \n"; + ?> +
    + download_link) && ( current_user_can('install_plugins') || current_user_can('update_plugins') ) ) : ?> +

    + ' . __('Install Now') . ''; + break; + case 'update_available': + if ( $status['url'] ) + echo '' . __('Install Update Now') .''; + break; + case 'newer_installed': + echo '' . sprintf(__('Newer Version (%s) Installed'), $status['version']) . ''; + break; + case 'latest_installed': + echo '' . __('Latest Version Installed') . ''; + break; + } + ?> +

    + +

    +
      +version) ) : ?> +
    • version ?>
    • +author) ) : ?> +
    • author, '_blank') ?>
    • +last_updated) ) : ?> +
    • last_updated)) ) ?>
    • +requires) ) : ?> +
    • requires) ?>
    • +tested) ) : ?> +
    • tested ?>
    • +downloaded) ) : ?> +
    • downloaded), number_format_i18n($api->downloaded)) ?>
    • +slug) && empty($api->external) ) : ?> +
    • +homepage) ) : ?> +
    • + +
    + rating) ) : ?> +

    + $api->rating, 'type' => 'percent', 'number' => $api->num_ratings ) ); ?> + num_ratings), number_format_i18n($api->num_ratings)); ?> + +
    +
    + tested) && version_compare( substr($GLOBALS['wp_version'], 0, strlen($api->tested)), $api->tested, '>') ) + echo '

    ' . __('Warning: This plugin has not been tested with your current version of WordPress.') . '

    '; + + else if ( !empty($api->requires) && version_compare( substr($GLOBALS['wp_version'], 0, strlen($api->requires)), $api->requires, '<') ) + echo '

    ' . __('Warning: This plugin has not been marked as compatible with your version of WordPress.') . '

    '; + + foreach ( (array)$api->sections as $section_name => $content ) { + + if ( isset( $plugins_section_titles[ $section_name ] ) ) + $title = $plugins_section_titles[ $section_name ]; + else + $title = ucwords( str_replace( '_', ' ', $section_name ) ); + + $content = links_add_base_url($content, 'http://wordpress.org/plugins/' . $api->slug . '/'); + $content = links_add_target($content, '_blank'); + + $san_section = esc_attr( $section_name ); + + $display = ( $section_name == $section ) ? 'block' : 'none'; + + echo "\t
    \n"; + echo "\t\t

    $title

    "; + echo $content; + echo "\t
    \n"; + } + echo "
    \n"; + + iframe_footer(); + exit; +} +add_action('install_plugins_pre_plugin-information', 'install_plugin_information'); diff --git a/src/wp-admin/includes/plugin.php b/src/wp-admin/includes/plugin.php new file mode 100644 index 0000000..8095cd4 --- /dev/null +++ b/src/wp-admin/includes/plugin.php @@ -0,0 +1,1861 @@ + + * /* + * Plugin Name: Name of Plugin + * Plugin URI: Link to plugin information + * Description: Plugin Description + * Author: Plugin author's name + * Author URI: Link to the author's web site + * Version: Must be set in the plugin for WordPress 2.3+ + * Text Domain: Optional. Unique identifier, should be same as the one used in + * plugin_text_domain() + * Domain Path: Optional. Only useful if the translations are located in a + * folder above the plugin's base path. For example, if .mo files are + * located in the locale folder then Domain Path will be "/locale/" and + * must have the first slash. Defaults to the base folder the plugin is + * located in. + * Network: Optional. Specify "Network: true" to require that a plugin is activated + * across all sites in an installation. This will prevent a plugin from being + * activated on a single site when Multisite is enabled. + * * / # Remove the space to close comment + * + * + * Plugin data returned array contains the following: + * 'Name' - Name of the plugin, must be unique. + * 'Title' - Title of the plugin and the link to the plugin's web site. + * 'Description' - Description of what the plugin does and/or notes + * from the author. + * 'Author' - The author's name + * 'AuthorURI' - The authors web site address. + * 'Version' - The plugin version number. + * 'PluginURI' - Plugin web site address. + * 'TextDomain' - Plugin's text domain for localization. + * 'DomainPath' - Plugin's relative directory path to .mo files. + * 'Network' - Boolean. Whether the plugin can only be activated network wide. + * + * Some users have issues with opening large files and manipulating the contents + * for want is usually the first 1kiB or 2kiB. This function stops pulling in + * the plugin contents when it has all of the required plugin data. + * + * The first 8kiB of the file will be pulled in and if the plugin data is not + * within that first 8kiB, then the plugin author should correct their plugin + * and move the plugin data headers to the top. + * + * The plugin file is assumed to have permissions to allow for scripts to read + * the file. This is not checked however and the file is only opened for + * reading. + * + * @link http://trac.wordpress.org/ticket/5651 Previous Optimizations. + * @link http://trac.wordpress.org/ticket/7372 Further and better Optimizations. + * @since 1.5.0 + * + * @param string $plugin_file Path to the plugin file + * @param bool $markup Optional. If the returned data should have HTML markup applied. Defaults to true. + * @param bool $translate Optional. If the returned data should be translated. Defaults to true. + * @return array See above for description. + */ +function get_plugin_data( $plugin_file, $markup = true, $translate = true ) { + + $default_headers = array( + 'Name' => 'Plugin Name', + 'PluginURI' => 'Plugin URI', + 'Version' => 'Version', + 'Description' => 'Description', + 'Author' => 'Author', + 'AuthorURI' => 'Author URI', + 'TextDomain' => 'Text Domain', + 'DomainPath' => 'Domain Path', + 'Network' => 'Network', + // Site Wide Only is deprecated in favor of Network. + '_sitewide' => 'Site Wide Only', + ); + + $plugin_data = get_file_data( $plugin_file, $default_headers, 'plugin' ); + + // Site Wide Only is the old header for Network + if ( ! $plugin_data['Network'] && $plugin_data['_sitewide'] ) { + _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The %1$s plugin header is deprecated. Use %2$s instead.' ), 'Site Wide Only: true', 'Network: true' ) ); + $plugin_data['Network'] = $plugin_data['_sitewide']; + } + $plugin_data['Network'] = ( 'true' == strtolower( $plugin_data['Network'] ) ); + unset( $plugin_data['_sitewide'] ); + + if ( $markup || $translate ) { + $plugin_data = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup, $translate ); + } else { + $plugin_data['Title'] = $plugin_data['Name']; + $plugin_data['AuthorName'] = $plugin_data['Author']; + } + + return $plugin_data; +} + +/** + * Sanitizes plugin data, optionally adds markup, optionally translates. + * + * @since 2.7.0 + * @access private + * @see get_plugin_data() + */ +function _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup = true, $translate = true ) { + + // Sanitize the plugin filename to a WP_PLUGIN_DIR relative path + $plugin_file = plugin_basename( $plugin_file ); + + // Translate fields + if ( $translate ) { + if ( $textdomain = $plugin_data['TextDomain'] ) { + if ( $plugin_data['DomainPath'] ) + load_plugin_textdomain( $textdomain, false, dirname( $plugin_file ) . $plugin_data['DomainPath'] ); + else + load_plugin_textdomain( $textdomain, false, dirname( $plugin_file ) ); + } elseif ( in_array( basename( $plugin_file ), array( 'hello.php', 'akismet.php' ) ) ) { + $textdomain = 'default'; + } + if ( $textdomain ) { + foreach ( array( 'Name', 'PluginURI', 'Description', 'Author', 'AuthorURI', 'Version' ) as $field ) + $plugin_data[ $field ] = translate( $plugin_data[ $field ], $textdomain ); + } + } + + // Sanitize fields + $allowed_tags = $allowed_tags_in_links = array( + 'abbr' => array( 'title' => true ), + 'acronym' => array( 'title' => true ), + 'code' => true, + 'em' => true, + 'strong' => true, + ); + $allowed_tags['a'] = array( 'href' => true, 'title' => true ); + + // Name is marked up inside tags. Don't allow these. + // Author is too, but some plugins have used here (omitting Author URI). + $plugin_data['Name'] = wp_kses( $plugin_data['Name'], $allowed_tags_in_links ); + $plugin_data['Author'] = wp_kses( $plugin_data['Author'], $allowed_tags ); + + $plugin_data['Description'] = wp_kses( $plugin_data['Description'], $allowed_tags ); + $plugin_data['Version'] = wp_kses( $plugin_data['Version'], $allowed_tags ); + + $plugin_data['PluginURI'] = esc_url( $plugin_data['PluginURI'] ); + $plugin_data['AuthorURI'] = esc_url( $plugin_data['AuthorURI'] ); + + $plugin_data['Title'] = $plugin_data['Name']; + $plugin_data['AuthorName'] = $plugin_data['Author']; + + // Apply markup + if ( $markup ) { + if ( $plugin_data['PluginURI'] && $plugin_data['Name'] ) + $plugin_data['Title'] = '' . $plugin_data['Name'] . ''; + + if ( $plugin_data['AuthorURI'] && $plugin_data['Author'] ) + $plugin_data['Author'] = '' . $plugin_data['Author'] . ''; + + $plugin_data['Description'] = wptexturize( $plugin_data['Description'] ); + + if ( $plugin_data['Author'] ) + $plugin_data['Description'] .= ' ' . sprintf( __('By %s.'), $plugin_data['Author'] ) . ''; + } + + return $plugin_data; +} + +/** + * Get a list of a plugin's files. + * + * @since 2.8.0 + * + * @param string $plugin Plugin ID + * @return array List of files relative to the plugin root. + */ +function get_plugin_files($plugin) { + $plugin_file = WP_PLUGIN_DIR . '/' . $plugin; + $dir = dirname($plugin_file); + $plugin_files = array($plugin); + if ( is_dir($dir) && $dir != WP_PLUGIN_DIR ) { + $plugins_dir = @ opendir( $dir ); + if ( $plugins_dir ) { + while (($file = readdir( $plugins_dir ) ) !== false ) { + if ( substr($file, 0, 1) == '.' ) + continue; + if ( is_dir( $dir . '/' . $file ) ) { + $plugins_subdir = @ opendir( $dir . '/' . $file ); + if ( $plugins_subdir ) { + while (($subfile = readdir( $plugins_subdir ) ) !== false ) { + if ( substr($subfile, 0, 1) == '.' ) + continue; + $plugin_files[] = plugin_basename("$dir/$file/$subfile"); + } + @closedir( $plugins_subdir ); + } + } else { + if ( plugin_basename("$dir/$file") != $plugin ) + $plugin_files[] = plugin_basename("$dir/$file"); + } + } + @closedir( $plugins_dir ); + } + } + + return $plugin_files; +} + +/** + * Check the plugins directory and retrieve all plugin files with plugin data. + * + * WordPress only supports plugin files in the base plugins directory + * (wp-content/plugins) and in one directory above the plugins directory + * (wp-content/plugins/my-plugin). The file it looks for has the plugin data and + * must be found in those two locations. It is recommended that do keep your + * plugin files in directories. + * + * The file with the plugin data is the file that will be included and therefore + * needs to have the main execution for the plugin. This does not mean + * everything must be contained in the file and it is recommended that the file + * be split for maintainability. Keep everything in one file for extreme + * optimization purposes. + * + * @since 1.5.0 + * + * @param string $plugin_folder Optional. Relative path to single plugin folder. + * @return array Key is the plugin file path and the value is an array of the plugin data. + */ +function get_plugins($plugin_folder = '') { + + if ( ! $cache_plugins = wp_cache_get('plugins', 'plugins') ) + $cache_plugins = array(); + + if ( isset($cache_plugins[ $plugin_folder ]) ) + return $cache_plugins[ $plugin_folder ]; + + $wp_plugins = array (); + $plugin_root = WP_PLUGIN_DIR; + if ( !empty($plugin_folder) ) + $plugin_root .= $plugin_folder; + + // Files in wp-content/plugins directory + $plugins_dir = @ opendir( $plugin_root); + $plugin_files = array(); + if ( $plugins_dir ) { + while (($file = readdir( $plugins_dir ) ) !== false ) { + if ( substr($file, 0, 1) == '.' ) + continue; + if ( is_dir( $plugin_root.'/'.$file ) ) { + $plugins_subdir = @ opendir( $plugin_root.'/'.$file ); + if ( $plugins_subdir ) { + while (($subfile = readdir( $plugins_subdir ) ) !== false ) { + if ( substr($subfile, 0, 1) == '.' ) + continue; + if ( substr($subfile, -4) == '.php' ) + $plugin_files[] = "$file/$subfile"; + } + closedir( $plugins_subdir ); + } + } else { + if ( substr($file, -4) == '.php' ) + $plugin_files[] = $file; + } + } + closedir( $plugins_dir ); + } + + if ( empty($plugin_files) ) + return $wp_plugins; + + foreach ( $plugin_files as $plugin_file ) { + if ( !is_readable( "$plugin_root/$plugin_file" ) ) + continue; + + $plugin_data = get_plugin_data( "$plugin_root/$plugin_file", false, false ); //Do not apply markup/translate as it'll be cached. + + if ( empty ( $plugin_data['Name'] ) ) + continue; + + $wp_plugins[plugin_basename( $plugin_file )] = $plugin_data; + } + + uasort( $wp_plugins, '_sort_uname_callback' ); + + $cache_plugins[ $plugin_folder ] = $wp_plugins; + wp_cache_set('plugins', $cache_plugins, 'plugins'); + + return $wp_plugins; +} + +/** + * Check the mu-plugins directory and retrieve all mu-plugin files with any plugin data. + * + * WordPress only includes mu-plugin files in the base mu-plugins directory (wp-content/mu-plugins). + * + * @since 3.0.0 + * @return array Key is the mu-plugin file path and the value is an array of the mu-plugin data. + */ +function get_mu_plugins() { + $wp_plugins = array(); + // Files in wp-content/mu-plugins directory + $plugin_files = array(); + + if ( ! is_dir( WPMU_PLUGIN_DIR ) ) + return $wp_plugins; + if ( $plugins_dir = @ opendir( WPMU_PLUGIN_DIR ) ) { + while ( ( $file = readdir( $plugins_dir ) ) !== false ) { + if ( substr( $file, -4 ) == '.php' ) + $plugin_files[] = $file; + } + } else { + return $wp_plugins; + } + + @closedir( $plugins_dir ); + + if ( empty($plugin_files) ) + return $wp_plugins; + + foreach ( $plugin_files as $plugin_file ) { + if ( !is_readable( WPMU_PLUGIN_DIR . "/$plugin_file" ) ) + continue; + + $plugin_data = get_plugin_data( WPMU_PLUGIN_DIR . "/$plugin_file", false, false ); //Do not apply markup/translate as it'll be cached. + + if ( empty ( $plugin_data['Name'] ) ) + $plugin_data['Name'] = $plugin_file; + + $wp_plugins[ $plugin_file ] = $plugin_data; + } + + if ( isset( $wp_plugins['index.php'] ) && filesize( WPMU_PLUGIN_DIR . '/index.php') <= 30 ) // silence is golden + unset( $wp_plugins['index.php'] ); + + uasort( $wp_plugins, '_sort_uname_callback' ); + + return $wp_plugins; +} + +/** + * Callback to sort array by a 'Name' key. + * + * @since 3.1.0 + * @access private + */ +function _sort_uname_callback( $a, $b ) { + return strnatcasecmp( $a['Name'], $b['Name'] ); +} + +/** + * Check the wp-content directory and retrieve all drop-ins with any plugin data. + * + * @since 3.0.0 + * @return array Key is the file path and the value is an array of the plugin data. + */ +function get_dropins() { + $dropins = array(); + $plugin_files = array(); + + $_dropins = _get_dropins(); + + // These exist in the wp-content directory + if ( $plugins_dir = @ opendir( WP_CONTENT_DIR ) ) { + while ( ( $file = readdir( $plugins_dir ) ) !== false ) { + if ( isset( $_dropins[ $file ] ) ) + $plugin_files[] = $file; + } + } else { + return $dropins; + } + + @closedir( $plugins_dir ); + + if ( empty($plugin_files) ) + return $dropins; + + foreach ( $plugin_files as $plugin_file ) { + if ( !is_readable( WP_CONTENT_DIR . "/$plugin_file" ) ) + continue; + $plugin_data = get_plugin_data( WP_CONTENT_DIR . "/$plugin_file", false, false ); //Do not apply markup/translate as it'll be cached. + if ( empty( $plugin_data['Name'] ) ) + $plugin_data['Name'] = $plugin_file; + $dropins[ $plugin_file ] = $plugin_data; + } + + uksort( $dropins, 'strnatcasecmp' ); + + return $dropins; +} + +/** + * Returns drop-ins that WordPress uses. + * + * Includes Multisite drop-ins only when is_multisite() + * + * @since 3.0.0 + * @return array Key is file name. The value is an array, with the first value the + * purpose of the drop-in and the second value the name of the constant that must be + * true for the drop-in to be used, or true if no constant is required. + */ +function _get_dropins() { + $dropins = array( + 'advanced-cache.php' => array( __( 'Advanced caching plugin.' ), 'WP_CACHE' ), // WP_CACHE + 'db.php' => array( __( 'Custom database class.' ), true ), // auto on load + 'db-error.php' => array( __( 'Custom database error message.' ), true ), // auto on error + 'install.php' => array( __( 'Custom install script.' ), true ), // auto on install + 'maintenance.php' => array( __( 'Custom maintenance message.' ), true ), // auto on maintenance + 'object-cache.php' => array( __( 'External object cache.' ), true ), // auto on load + ); + + if ( is_multisite() ) { + $dropins['sunrise.php' ] = array( __( 'Executed before Multisite is loaded.' ), 'SUNRISE' ); // SUNRISE + $dropins['blog-deleted.php' ] = array( __( 'Custom site deleted message.' ), true ); // auto on deleted blog + $dropins['blog-inactive.php' ] = array( __( 'Custom site inactive message.' ), true ); // auto on inactive blog + $dropins['blog-suspended.php'] = array( __( 'Custom site suspended message.' ), true ); // auto on archived or spammed blog + } + + return $dropins; +} + +/** + * Check whether the plugin is active by checking the active_plugins list. + * + * @since 2.5.0 + * + * @param string $plugin Base plugin path from plugins directory. + * @return bool True, if in the active plugins list. False, not in the list. + */ +function is_plugin_active( $plugin ) { + return in_array( $plugin, (array) get_option( 'active_plugins', array() ) ) || is_plugin_active_for_network( $plugin ); +} + +/** + * Check whether the plugin is inactive. + * + * Reverse of is_plugin_active(). Used as a callback. + * + * @since 3.1.0 + * @see is_plugin_active() + * + * @param string $plugin Base plugin path from plugins directory. + * @return bool True if inactive. False if active. + */ +function is_plugin_inactive( $plugin ) { + return ! is_plugin_active( $plugin ); +} + +/** + * Check whether the plugin is active for the entire network. + * + * @since 3.0.0 + * + * @param string $plugin Base plugin path from plugins directory. + * @return bool True, if active for the network, otherwise false. + */ +function is_plugin_active_for_network( $plugin ) { + if ( !is_multisite() ) + return false; + + $plugins = get_site_option( 'active_sitewide_plugins'); + if ( isset($plugins[$plugin]) ) + return true; + + return false; +} + +/** + * Checks for "Network: true" in the plugin header to see if this should + * be activated only as a network wide plugin. The plugin would also work + * when Multisite is not enabled. + * + * Checks for "Site Wide Only: true" for backwards compatibility. + * + * @since 3.0.0 + * + * @param string $plugin Plugin to check + * @return bool True if plugin is network only, false otherwise. + */ +function is_network_only_plugin( $plugin ) { + $plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); + if ( $plugin_data ) + return $plugin_data['Network']; + return false; +} + +/** + * Attempts activation of plugin in a "sandbox" and redirects on success. + * + * A plugin that is already activated will not attempt to be activated again. + * + * The way it works is by setting the redirection to the error before trying to + * include the plugin file. If the plugin fails, then the redirection will not + * be overwritten with the success message. Also, the options will not be + * updated and the activation hook will not be called on plugin error. + * + * It should be noted that in no way the below code will actually prevent errors + * within the file. The code should not be used elsewhere to replicate the + * "sandbox", which uses redirection to work. + * {@source 13 1} + * + * If any errors are found or text is outputted, then it will be captured to + * ensure that the success redirection will update the error redirection. + * + * @since 2.5.0 + * + * @param string $plugin Plugin path to main plugin file with plugin data. + * @param string $redirect Optional. URL to redirect to. + * @param bool $network_wide Whether to enable the plugin for all sites in the + * network or just the current site. Multisite only. Default is false. + * @param bool $silent Prevent calling activation hooks. Optional, default is false. + * @return WP_Error|null WP_Error on invalid file or null on success. + */ +function activate_plugin( $plugin, $redirect = '', $network_wide = false, $silent = false ) { + $plugin = plugin_basename( trim( $plugin ) ); + + if ( is_multisite() && ( $network_wide || is_network_only_plugin($plugin) ) ) { + $network_wide = true; + $current = get_site_option( 'active_sitewide_plugins', array() ); + $_GET['networkwide'] = 1; // Back compat for plugins looking for this value. + } else { + $current = get_option( 'active_plugins', array() ); + } + + $valid = validate_plugin($plugin); + if ( is_wp_error($valid) ) + return $valid; + + if ( !in_array($plugin, $current) ) { + if ( !empty($redirect) ) + wp_redirect(add_query_arg('_error_nonce', wp_create_nonce('plugin-activation-error_' . $plugin), $redirect)); // we'll override this later if the plugin can be included without fatal error + ob_start(); + include_once(WP_PLUGIN_DIR . '/' . $plugin); + + if ( ! $silent ) { + /** + * Fires before a plugin is activated in activate_plugin() when the $silent parameter is false. + * + * @since 2.9.0 + * + * @param string $plugin Plugin path to main plugin file with plugin data. + * @param bool $network_wide Whether to enable the plugin for all sites in the network + * or just the current site. Multisite only. Default is false. + */ + do_action( 'activate_plugin', $plugin, $network_wide ); + + /** + * Fires before a plugin is activated in activate_plugin() when the $silent parameter is false. + * + * The action concatenates the 'activate_' prefix with the $plugin value passed to + * activate_plugin() to create a dynamically-named action. + * + * @since 2.0.0 + * + * @param bool $network_wide Whether to enable the plugin for all sites in the network + * or just the current site. Multisite only. Default is false. + */ + do_action( 'activate_' . $plugin, $network_wide ); + } + + if ( $network_wide ) { + $current[$plugin] = time(); + update_site_option( 'active_sitewide_plugins', $current ); + } else { + $current[] = $plugin; + sort($current); + update_option('active_plugins', $current); + } + + if ( ! $silent ) { + /** + * Fires after a plugin has been activated in activate_plugin() when the $silent parameter is false. + * + * @since 2.9.0 + * + * @param string $plugin Plugin path to main plugin file with plugin data. + * @param bool $network_wide Whether to enable the plugin for all sites in the network + * or just the current site. Multisite only. Default is false. + */ + do_action( 'activated_plugin', $plugin, $network_wide ); + } + + if ( ob_get_length() > 0 ) { + $output = ob_get_clean(); + return new WP_Error('unexpected_output', __('The plugin generated unexpected output.'), $output); + } + ob_end_clean(); + } + + return null; +} + +/** + * Deactivate a single plugin or multiple plugins. + * + * The deactivation hook is disabled by the plugin upgrader by using the $silent + * parameter. + * + * @since 2.5.0 + * + * @param string|array $plugins Single plugin or list of plugins to deactivate. + * @param bool $silent Prevent calling deactivation hooks. Default is false. + * @param mixed $network_wide Whether to deactivate the plugin for all sites in the network. + * A value of null (the default) will deactivate plugins for both the site and the network. + */ +function deactivate_plugins( $plugins, $silent = false, $network_wide = null ) { + if ( is_multisite() ) + $network_current = get_site_option( 'active_sitewide_plugins', array() ); + $current = get_option( 'active_plugins', array() ); + $do_blog = $do_network = false; + + foreach ( (array) $plugins as $plugin ) { + $plugin = plugin_basename( trim( $plugin ) ); + if ( ! is_plugin_active($plugin) ) + continue; + + $network_deactivating = false !== $network_wide && is_plugin_active_for_network( $plugin ); + + if ( ! $silent ) { + /** + * Fires for each plugin being deactivated in deactivate_plugins(), before deactivation + * and when the $silent parameter is false. + * + * @since 2.9.0 + * + * @param string $plugin Plugin path to main plugin file with plugin data. + * @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network + * or just the current site. Multisite only. Default is false. + */ + do_action( 'deactivate_plugin', $plugin, $network_deactivating ); + } + + if ( false !== $network_wide ) { + if ( is_plugin_active_for_network( $plugin ) ) { + $do_network = true; + unset( $network_current[ $plugin ] ); + } elseif ( $network_wide ) { + continue; + } + } + + if ( true !== $network_wide ) { + $key = array_search( $plugin, $current ); + if ( false !== $key ) { + $do_blog = true; + unset( $current[ $key ] ); + } + } + + if ( ! $silent ) { + /** + * Fires for each plugin being deactivated in deactivate_plugins(), after deactivation + * and when the $silent parameter is false. + * + * The action concatenates the 'deactivate_' prefix with the plugin's basename + * to create a dynamically-named action. + * + * @since 2.0.0 + * + * @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network + * or just the current site. Multisite only. Default is false. + */ + do_action( 'deactivate_' . $plugin, $network_deactivating ); + + /** + * Fires for each plugin being deactivated in deactivate_plugins(), after deactivation + * and when the $silent parameter is false. + * + * @since 2.9.0 + * + * @param string $plugin Plugin path to main plugin file with plugin data. + * @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network + * or just the current site. Multisite only. Default is false. + */ + do_action( 'deactivated_plugin', $plugin, $network_deactivating ); + } + } + + if ( $do_blog ) + update_option('active_plugins', $current); + if ( $do_network ) + update_site_option( 'active_sitewide_plugins', $network_current ); +} + +/** + * Activate multiple plugins. + * + * When WP_Error is returned, it does not mean that one of the plugins had + * errors. It means that one or more of the plugins file path was invalid. + * + * The execution will be halted as soon as one of the plugins has an error. + * + * @since 2.6.0 + * + * @param string|array $plugins + * @param string $redirect Redirect to page after successful activation. + * @param bool $network_wide Whether to enable the plugin for all sites in the network. + * @param bool $silent Prevent calling activation hooks. Default is false. + * @return bool|WP_Error True when finished or WP_Error if there were errors during a plugin activation. + */ +function activate_plugins( $plugins, $redirect = '', $network_wide = false, $silent = false ) { + if ( !is_array($plugins) ) + $plugins = array($plugins); + + $errors = array(); + foreach ( $plugins as $plugin ) { + if ( !empty($redirect) ) + $redirect = add_query_arg('plugin', $plugin, $redirect); + $result = activate_plugin($plugin, $redirect, $network_wide, $silent); + if ( is_wp_error($result) ) + $errors[$plugin] = $result; + } + + if ( !empty($errors) ) + return new WP_Error('plugins_invalid', __('One of the plugins is invalid.'), $errors); + + return true; +} + +/** + * Remove directory and files of a plugin for a single or list of plugin(s). + * + * If the plugins parameter list is empty, false will be returned. True when + * completed. + * + * @since 2.6.0 + * + * @param array $plugins List of plugin + * @param string $redirect Redirect to page when complete. + * @return mixed + */ +function delete_plugins($plugins, $redirect = '' ) { + global $wp_filesystem; + + if ( empty($plugins) ) + return false; + + $checked = array(); + foreach( $plugins as $plugin ) + $checked[] = 'checked[]=' . $plugin; + + ob_start(); + $url = wp_nonce_url('plugins.php?action=delete-selected&verify-delete=1&' . implode('&', $checked), 'bulk-plugins'); + if ( false === ($credentials = request_filesystem_credentials($url)) ) { + $data = ob_get_contents(); + ob_end_clean(); + if ( ! empty($data) ){ + include_once( ABSPATH . 'wp-admin/admin-header.php'); + echo $data; + include( ABSPATH . 'wp-admin/admin-footer.php'); + exit; + } + return; + } + + if ( ! WP_Filesystem($credentials) ) { + request_filesystem_credentials($url, '', true); //Failed to connect, Error and request again + $data = ob_get_contents(); + ob_end_clean(); + if ( ! empty($data) ){ + include_once( ABSPATH . 'wp-admin/admin-header.php'); + echo $data; + include( ABSPATH . 'wp-admin/admin-footer.php'); + exit; + } + return; + } + + if ( ! is_object($wp_filesystem) ) + return new WP_Error('fs_unavailable', __('Could not access filesystem.')); + + if ( is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code() ) + return new WP_Error('fs_error', __('Filesystem error.'), $wp_filesystem->errors); + + //Get the base plugin folder + $plugins_dir = $wp_filesystem->wp_plugins_dir(); + if ( empty($plugins_dir) ) + return new WP_Error('fs_no_plugins_dir', __('Unable to locate WordPress Plugin directory.')); + + $plugins_dir = trailingslashit( $plugins_dir ); + + $errors = array(); + + foreach( $plugins as $plugin_file ) { + // Run Uninstall hook + if ( is_uninstallable_plugin( $plugin_file ) ) + uninstall_plugin($plugin_file); + + $this_plugin_dir = trailingslashit( dirname($plugins_dir . $plugin_file) ); + // If plugin is in its own directory, recursively delete the directory. + if ( strpos($plugin_file, '/') && $this_plugin_dir != $plugins_dir ) //base check on if plugin includes directory separator AND that it's not the root plugin folder + $deleted = $wp_filesystem->delete($this_plugin_dir, true); + else + $deleted = $wp_filesystem->delete($plugins_dir . $plugin_file); + + if ( ! $deleted ) + $errors[] = $plugin_file; + } + + // Remove deleted plugins from the plugin updates list. + if ( $current = get_site_transient('update_plugins') ) { + // Don't remove the plugins that weren't deleted. + $deleted = array_diff( $plugins, $errors ); + + foreach ( $deleted as $plugin_file ) { + unset( $current->response[ $plugin_file ] ); + } + + set_site_transient( 'update_plugins', $current ); + } + + if ( ! empty($errors) ) + return new WP_Error('could_not_remove_plugin', sprintf(__('Could not fully remove the plugin(s) %s.'), implode(', ', $errors)) ); + + return true; +} + +/** + * Validate active plugins + * + * Validate all active plugins, deactivates invalid and + * returns an array of deactivated ones. + * + * @since 2.5.0 + * @return array invalid plugins, plugin as key, error as value + */ +function validate_active_plugins() { + $plugins = get_option( 'active_plugins', array() ); + // validate vartype: array + if ( ! is_array( $plugins ) ) { + update_option( 'active_plugins', array() ); + $plugins = array(); + } + + if ( is_multisite() && current_user_can( 'manage_network_plugins' ) ) { + $network_plugins = (array) get_site_option( 'active_sitewide_plugins', array() ); + $plugins = array_merge( $plugins, array_keys( $network_plugins ) ); + } + + if ( empty( $plugins ) ) + return; + + $invalid = array(); + + // invalid plugins get deactivated + foreach ( $plugins as $plugin ) { + $result = validate_plugin( $plugin ); + if ( is_wp_error( $result ) ) { + $invalid[$plugin] = $result; + deactivate_plugins( $plugin, true ); + } + } + return $invalid; +} + +/** + * Validate the plugin path. + * + * Checks that the file exists and {@link validate_file() is valid file}. + * + * @since 2.5.0 + * + * @param string $plugin Plugin Path + * @return WP_Error|int 0 on success, WP_Error on failure. + */ +function validate_plugin($plugin) { + if ( validate_file($plugin) ) + return new WP_Error('plugin_invalid', __('Invalid plugin path.')); + if ( ! file_exists(WP_PLUGIN_DIR . '/' . $plugin) ) + return new WP_Error('plugin_not_found', __('Plugin file does not exist.')); + + $installed_plugins = get_plugins(); + if ( ! isset($installed_plugins[$plugin]) ) + return new WP_Error('no_plugin_header', __('The plugin does not have a valid header.')); + return 0; +} + +/** + * Whether the plugin can be uninstalled. + * + * @since 2.7.0 + * + * @param string $plugin Plugin path to check. + * @return bool Whether plugin can be uninstalled. + */ +function is_uninstallable_plugin($plugin) { + $file = plugin_basename($plugin); + + $uninstallable_plugins = (array) get_option('uninstall_plugins'); + if ( isset( $uninstallable_plugins[$file] ) || file_exists( WP_PLUGIN_DIR . '/' . dirname($file) . '/uninstall.php' ) ) + return true; + + return false; +} + +/** + * Uninstall a single plugin. + * + * Calls the uninstall hook, if it is available. + * + * @since 2.7.0 + * + * @param string $plugin Relative plugin path from Plugin Directory. + */ +function uninstall_plugin($plugin) { + $file = plugin_basename($plugin); + + $uninstallable_plugins = (array) get_option('uninstall_plugins'); + if ( file_exists( WP_PLUGIN_DIR . '/' . dirname($file) . '/uninstall.php' ) ) { + if ( isset( $uninstallable_plugins[$file] ) ) { + unset($uninstallable_plugins[$file]); + update_option('uninstall_plugins', $uninstallable_plugins); + } + unset($uninstallable_plugins); + + define('WP_UNINSTALL_PLUGIN', $file); + include WP_PLUGIN_DIR . '/' . dirname($file) . '/uninstall.php'; + + return true; + } + + if ( isset( $uninstallable_plugins[$file] ) ) { + $callable = $uninstallable_plugins[$file]; + unset($uninstallable_plugins[$file]); + update_option('uninstall_plugins', $uninstallable_plugins); + unset($uninstallable_plugins); + + include WP_PLUGIN_DIR . '/' . $file; + + add_action( 'uninstall_' . $file, $callable ); + + /** + * Fires in uninstall_plugin() once the plugin has been uninstalled. + * + * The action concatenates the 'uninstall_' prefix with the basename of the + * plugin passed to {@see uninstall_plugin()} to create a dynamically-named action. + * + * @since 2.7.0 + */ + do_action( 'uninstall_' . $file ); + } +} + +// +// Menu +// + +/** + * Add a top level menu page + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * @param string $icon_url The url to the icon to be used for this menu. + * * Pass a base64-encoded SVG using a data URI, which will be colored to match the color scheme. + * This should begin with 'data:image/svg+xml;base64,'. + * * Pass the name of a Dashicons helper class to use a font icon, e.g. 'dashicons-piechart'. + * * Pass 'none' to leave div.wp-menu-image empty so an icon can be added via CSS. + * @param int $position The position in the menu order this one should appear + * + * @return string The resulting page's hook_suffix + */ +function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '', $position = null ) { + global $menu, $admin_page_hooks, $_registered_pages, $_parent_pages; + + $menu_slug = plugin_basename( $menu_slug ); + + $admin_page_hooks[$menu_slug] = sanitize_title( $menu_title ); + + $hookname = get_plugin_page_hookname( $menu_slug, '' ); + + if ( !empty( $function ) && !empty( $hookname ) && current_user_can( $capability ) ) + add_action( $hookname, $function ); + + if ( empty($icon_url) ) { + $icon_url = 'none'; + $icon_class = 'menu-icon-generic '; + } else { + $icon_url = set_url_scheme( $icon_url ); + $icon_class = ''; + } + + $new_menu = array( $menu_title, $capability, $menu_slug, $page_title, 'menu-top ' . $icon_class . $hookname, $hookname, $icon_url ); + + if ( null === $position ) + $menu[] = $new_menu; + else + $menu[$position] = $new_menu; + + $_registered_pages[$hookname] = true; + + // No parent as top level + $_parent_pages[$menu_slug] = false; + + return $hookname; +} + +/** + * Add a top level menu page in the 'objects' section + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * @param string $icon_url The url to the icon to be used for this menu + * + * @return string The resulting page's hook_suffix + */ +function add_object_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '') { + global $_wp_last_object_menu; + + $_wp_last_object_menu++; + + return add_menu_page($page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $_wp_last_object_menu); +} + +/** + * Add a top level menu page in the 'utility' section + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * @param string $icon_url The url to the icon to be used for this menu + * + * @return string The resulting page's hook_suffix + */ +function add_utility_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '') { + global $_wp_last_utility_menu; + + $_wp_last_utility_menu++; + + return add_menu_page($page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $_wp_last_utility_menu); +} + +/** + * Add a sub menu page + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $parent_slug The slug name for the parent menu (or the file name of a standard WordPress admin page) + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + global $submenu; + global $menu; + global $_wp_real_parent_file; + global $_wp_submenu_nopriv; + global $_registered_pages; + global $_parent_pages; + + $menu_slug = plugin_basename( $menu_slug ); + $parent_slug = plugin_basename( $parent_slug); + + if ( isset( $_wp_real_parent_file[$parent_slug] ) ) + $parent_slug = $_wp_real_parent_file[$parent_slug]; + + if ( !current_user_can( $capability ) ) { + $_wp_submenu_nopriv[$parent_slug][$menu_slug] = true; + return false; + } + + // If the parent doesn't already have a submenu, add a link to the parent + // as the first item in the submenu. If the submenu file is the same as the + // parent file someone is trying to link back to the parent manually. In + // this case, don't automatically add a link back to avoid duplication. + if (!isset( $submenu[$parent_slug] ) && $menu_slug != $parent_slug ) { + foreach ( (array)$menu as $parent_menu ) { + if ( $parent_menu[2] == $parent_slug && current_user_can( $parent_menu[1] ) ) + $submenu[$parent_slug][] = $parent_menu; + } + } + + $submenu[$parent_slug][] = array ( $menu_title, $capability, $menu_slug, $page_title ); + + $hookname = get_plugin_page_hookname( $menu_slug, $parent_slug); + if (!empty ( $function ) && !empty ( $hookname )) + add_action( $hookname, $function ); + + $_registered_pages[$hookname] = true; + // backwards-compatibility for plugins using add_management page. See wp-admin/admin.php for redirect from edit.php to tools.php + if ( 'tools.php' == $parent_slug ) + $_registered_pages[get_plugin_page_hookname( $menu_slug, 'edit.php')] = true; + + // No parent as top level + $_parent_pages[$menu_slug] = $parent_slug; + + return $hookname; +} + +/** + * Add sub menu page to the tools main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_management_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'tools.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the options main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'options-general.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the themes main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_theme_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'themes.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the plugins main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_plugins_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'plugins.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the Users/Profile main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_users_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + if ( current_user_can('edit_users') ) + $parent = 'users.php'; + else + $parent = 'profile.php'; + return add_submenu_page( $parent, $page_title, $menu_title, $capability, $menu_slug, $function ); +} +/** + * Add sub menu page to the Dashboard main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_dashboard_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'index.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the posts main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_posts_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'edit.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the media main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_media_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'upload.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the links main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_links_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'link-manager.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the pages main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. +*/ +function add_pages_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'edit.php?post_type=page', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the comments main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. +*/ +function add_comments_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'edit-comments.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Remove a top level admin menu + * + * @since 3.1.0 + * + * @param string $menu_slug The slug of the menu + * @return array|bool The removed menu on success, False if not found + */ +function remove_menu_page( $menu_slug ) { + global $menu; + + foreach ( $menu as $i => $item ) { + if ( $menu_slug == $item[2] ) { + unset( $menu[$i] ); + return $item; + } + } + + return false; +} + +/** + * Remove an admin submenu + * + * @since 3.1.0 + * + * @param string $menu_slug The slug for the parent menu + * @param string $submenu_slug The slug of the submenu + * @return array|bool The removed submenu on success, False if not found + */ +function remove_submenu_page( $menu_slug, $submenu_slug ) { + global $submenu; + + if ( !isset( $submenu[$menu_slug] ) ) + return false; + + foreach ( $submenu[$menu_slug] as $i => $item ) { + if ( $submenu_slug == $item[2] ) { + unset( $submenu[$menu_slug][$i] ); + return $item; + } + } + + return false; +} + +/** + * Get the url to access a particular menu page based on the slug it was registered with. + * + * If the slug hasn't been registered properly no url will be returned + * + * @since 3.0 + * + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param bool $echo Whether or not to echo the url - default is true + * @return string the url + */ +function menu_page_url($menu_slug, $echo = true) { + global $_parent_pages; + + if ( isset( $_parent_pages[$menu_slug] ) ) { + $parent_slug = $_parent_pages[$menu_slug]; + if ( $parent_slug && ! isset( $_parent_pages[$parent_slug] ) ) { + $url = admin_url( add_query_arg( 'page', $menu_slug, $parent_slug ) ); + } else { + $url = admin_url( 'admin.php?page=' . $menu_slug ); + } + } else { + $url = ''; + } + + $url = esc_url($url); + + if ( $echo ) + echo $url; + + return $url; +} + +// +// Pluggable Menu Support -- Private +// + +function get_admin_page_parent( $parent = '' ) { + global $parent_file; + global $menu; + global $submenu; + global $pagenow; + global $typenow; + global $plugin_page; + global $_wp_real_parent_file; + global $_wp_menu_nopriv; + global $_wp_submenu_nopriv; + + if ( !empty ( $parent ) && 'admin.php' != $parent ) { + if ( isset( $_wp_real_parent_file[$parent] ) ) + $parent = $_wp_real_parent_file[$parent]; + return $parent; + } + + /* + if ( !empty ( $parent_file ) ) { + if ( isset( $_wp_real_parent_file[$parent_file] ) ) + $parent_file = $_wp_real_parent_file[$parent_file]; + + return $parent_file; + } + */ + + if ( $pagenow == 'admin.php' && isset( $plugin_page ) ) { + foreach ( (array)$menu as $parent_menu ) { + if ( $parent_menu[2] == $plugin_page ) { + $parent_file = $plugin_page; + if ( isset( $_wp_real_parent_file[$parent_file] ) ) + $parent_file = $_wp_real_parent_file[$parent_file]; + return $parent_file; + } + } + if ( isset( $_wp_menu_nopriv[$plugin_page] ) ) { + $parent_file = $plugin_page; + if ( isset( $_wp_real_parent_file[$parent_file] ) ) + $parent_file = $_wp_real_parent_file[$parent_file]; + return $parent_file; + } + } + + if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$pagenow][$plugin_page] ) ) { + $parent_file = $pagenow; + if ( isset( $_wp_real_parent_file[$parent_file] ) ) + $parent_file = $_wp_real_parent_file[$parent_file]; + return $parent_file; + } + + foreach (array_keys( (array)$submenu ) as $parent) { + foreach ( $submenu[$parent] as $submenu_array ) { + if ( isset( $_wp_real_parent_file[$parent] ) ) + $parent = $_wp_real_parent_file[$parent]; + if ( !empty($typenow) && ($submenu_array[2] == "$pagenow?post_type=$typenow") ) { + $parent_file = $parent; + return $parent; + } elseif ( $submenu_array[2] == $pagenow && empty($typenow) && ( empty($parent_file) || false === strpos($parent_file, '?') ) ) { + $parent_file = $parent; + return $parent; + } else + if ( isset( $plugin_page ) && ($plugin_page == $submenu_array[2] ) ) { + $parent_file = $parent; + return $parent; + } + } + } + + if ( empty($parent_file) ) + $parent_file = ''; + return ''; +} + +function get_admin_page_title() { + global $title; + global $menu; + global $submenu; + global $pagenow; + global $plugin_page; + global $typenow; + + if ( ! empty ( $title ) ) + return $title; + + $hook = get_plugin_page_hook( $plugin_page, $pagenow ); + + $parent = $parent1 = get_admin_page_parent(); + + if ( empty ( $parent) ) { + foreach ( (array)$menu as $menu_array ) { + if ( isset( $menu_array[3] ) ) { + if ( $menu_array[2] == $pagenow ) { + $title = $menu_array[3]; + return $menu_array[3]; + } else + if ( isset( $plugin_page ) && ($plugin_page == $menu_array[2] ) && ($hook == $menu_array[3] ) ) { + $title = $menu_array[3]; + return $menu_array[3]; + } + } else { + $title = $menu_array[0]; + return $title; + } + } + } else { + foreach ( array_keys( $submenu ) as $parent ) { + foreach ( $submenu[$parent] as $submenu_array ) { + if ( isset( $plugin_page ) && + ( $plugin_page == $submenu_array[2] ) && + ( + ( $parent == $pagenow ) || + ( $parent == $plugin_page ) || + ( $plugin_page == $hook ) || + ( $pagenow == 'admin.php' && $parent1 != $submenu_array[2] ) || + ( !empty($typenow) && $parent == $pagenow . '?post_type=' . $typenow) + ) + ) { + $title = $submenu_array[3]; + return $submenu_array[3]; + } + + if ( $submenu_array[2] != $pagenow || isset( $_GET['page'] ) ) // not the current page + continue; + + if ( isset( $submenu_array[3] ) ) { + $title = $submenu_array[3]; + return $submenu_array[3]; + } else { + $title = $submenu_array[0]; + return $title; + } + } + } + if ( empty ( $title ) ) { + foreach ( $menu as $menu_array ) { + if ( isset( $plugin_page ) && + ( $plugin_page == $menu_array[2] ) && + ( $pagenow == 'admin.php' ) && + ( $parent1 == $menu_array[2] ) ) + { + $title = $menu_array[3]; + return $menu_array[3]; + } + } + } + } + + return $title; +} + +function get_plugin_page_hook( $plugin_page, $parent_page ) { + $hook = get_plugin_page_hookname( $plugin_page, $parent_page ); + if ( has_action($hook) ) + return $hook; + else + return null; +} + +function get_plugin_page_hookname( $plugin_page, $parent_page ) { + global $admin_page_hooks; + + $parent = get_admin_page_parent( $parent_page ); + + $page_type = 'admin'; + if ( empty ( $parent_page ) || 'admin.php' == $parent_page || isset( $admin_page_hooks[$plugin_page] ) ) { + if ( isset( $admin_page_hooks[$plugin_page] ) ) + $page_type = 'toplevel'; + else + if ( isset( $admin_page_hooks[$parent] )) + $page_type = $admin_page_hooks[$parent]; + } else if ( isset( $admin_page_hooks[$parent] ) ) { + $page_type = $admin_page_hooks[$parent]; + } + + $plugin_name = preg_replace( '!\.php!', '', $plugin_page ); + + return $page_type . '_page_' . $plugin_name; +} + +function user_can_access_admin_page() { + global $pagenow; + global $menu; + global $submenu; + global $_wp_menu_nopriv; + global $_wp_submenu_nopriv; + global $plugin_page; + global $_registered_pages; + + $parent = get_admin_page_parent(); + + if ( !isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$parent][$pagenow] ) ) + return false; + + if ( isset( $plugin_page ) ) { + if ( isset( $_wp_submenu_nopriv[$parent][$plugin_page] ) ) + return false; + + $hookname = get_plugin_page_hookname($plugin_page, $parent); + + if ( !isset($_registered_pages[$hookname]) ) + return false; + } + + if ( empty( $parent) ) { + if ( isset( $_wp_menu_nopriv[$pagenow] ) ) + return false; + if ( isset( $_wp_submenu_nopriv[$pagenow][$pagenow] ) ) + return false; + if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$pagenow][$plugin_page] ) ) + return false; + if ( isset( $plugin_page ) && isset( $_wp_menu_nopriv[$plugin_page] ) ) + return false; + foreach (array_keys( $_wp_submenu_nopriv ) as $key ) { + if ( isset( $_wp_submenu_nopriv[$key][$pagenow] ) ) + return false; + if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$key][$plugin_page] ) ) + return false; + } + return true; + } + + if ( isset( $plugin_page ) && ( $plugin_page == $parent ) && isset( $_wp_menu_nopriv[$plugin_page] ) ) + return false; + + if ( isset( $submenu[$parent] ) ) { + foreach ( $submenu[$parent] as $submenu_array ) { + if ( isset( $plugin_page ) && ( $submenu_array[2] == $plugin_page ) ) { + if ( current_user_can( $submenu_array[1] )) + return true; + else + return false; + } else if ( $submenu_array[2] == $pagenow ) { + if ( current_user_can( $submenu_array[1] )) + return true; + else + return false; + } + } + } + + foreach ( $menu as $menu_array ) { + if ( $menu_array[2] == $parent) { + if ( current_user_can( $menu_array[1] )) + return true; + else + return false; + } + } + + return true; +} + +/* Whitelist functions */ + +/** + * Register a setting and its sanitization callback + * + * @since 2.7.0 + * + * @param string $option_group A settings group name. Should correspond to a whitelisted option key name. + * Default whitelisted option key names include "general," "discussion," and "reading," among others. + * @param string $option_name The name of an option to sanitize and save. + * @param unknown_type $sanitize_callback A callback function that sanitizes the option's value. + * @return unknown + */ +function register_setting( $option_group, $option_name, $sanitize_callback = '' ) { + global $new_whitelist_options; + + if ( 'misc' == $option_group ) { + _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) ); + $option_group = 'general'; + } + + if ( 'privacy' == $option_group ) { + _deprecated_argument( __FUNCTION__, '3.5', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) ); + $option_group = 'reading'; + } + + $new_whitelist_options[ $option_group ][] = $option_name; + if ( $sanitize_callback != '' ) + add_filter( "sanitize_option_{$option_name}", $sanitize_callback ); +} + +/** + * Unregister a setting + * + * @since 2.7.0 + * + * @param unknown_type $option_group + * @param unknown_type $option_name + * @param unknown_type $sanitize_callback + * @return unknown + */ +function unregister_setting( $option_group, $option_name, $sanitize_callback = '' ) { + global $new_whitelist_options; + + if ( 'misc' == $option_group ) { + _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) ); + $option_group = 'general'; + } + + if ( 'privacy' == $option_group ) { + _deprecated_argument( __FUNCTION__, '3.5', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) ); + $option_group = 'reading'; + } + + $pos = array_search( $option_name, (array) $new_whitelist_options ); + if ( $pos !== false ) + unset( $new_whitelist_options[ $option_group ][ $pos ] ); + if ( $sanitize_callback != '' ) + remove_filter( "sanitize_option_{$option_name}", $sanitize_callback ); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.7.0 + * + * @param unknown_type $options + * @return unknown + */ +function option_update_filter( $options ) { + global $new_whitelist_options; + + if ( is_array( $new_whitelist_options ) ) + $options = add_option_whitelist( $new_whitelist_options, $options ); + + return $options; +} +add_filter( 'whitelist_options', 'option_update_filter' ); + +/** + * {@internal Missing Short Description}} + * + * @since 2.7.0 + * + * @param unknown_type $new_options + * @param unknown_type $options + * @return unknown + */ +function add_option_whitelist( $new_options, $options = '' ) { + if ( $options == '' ) + global $whitelist_options; + else + $whitelist_options = $options; + + foreach ( $new_options as $page => $keys ) { + foreach ( $keys as $key ) { + if ( !isset($whitelist_options[ $page ]) || !is_array($whitelist_options[ $page ]) ) { + $whitelist_options[ $page ] = array(); + $whitelist_options[ $page ][] = $key; + } else { + $pos = array_search( $key, $whitelist_options[ $page ] ); + if ( $pos === false ) + $whitelist_options[ $page ][] = $key; + } + } + } + + return $whitelist_options; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.7.0 + * + * @param unknown_type $del_options + * @param unknown_type $options + * @return unknown + */ +function remove_option_whitelist( $del_options, $options = '' ) { + if ( $options == '' ) + global $whitelist_options; + else + $whitelist_options = $options; + + foreach ( $del_options as $page => $keys ) { + foreach ( $keys as $key ) { + if ( isset($whitelist_options[ $page ]) && is_array($whitelist_options[ $page ]) ) { + $pos = array_search( $key, $whitelist_options[ $page ] ); + if ( $pos !== false ) + unset( $whitelist_options[ $page ][ $pos ] ); + } + } + } + + return $whitelist_options; +} + +/** + * Output nonce, action, and option_page fields for a settings page. + * + * @since 2.7.0 + * + * @param string $option_group A settings group name. This should match the group name used in register_setting(). + */ +function settings_fields($option_group) { + echo ""; + echo ''; + wp_nonce_field("$option_group-options"); +} + +/** + * Clears the Plugins cache used by get_plugins() and by default, the Plugin Update cache. + * + * @since 3.7.0 + * + * @param bool $clear_update_cache Whether to clear the Plugin updates cache + */ +function wp_clean_plugins_cache( $clear_update_cache = true ) { + if ( $clear_update_cache ) + delete_site_transient( 'update_plugins' ); + wp_cache_delete( 'plugins', 'plugins' ); +} diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php new file mode 100644 index 0000000..983e4e7 --- /dev/null +++ b/src/wp-admin/includes/post.php @@ -0,0 +1,1452 @@ +cap->create_posts ) ) { + if ( 'page' == $post_data['post_type'] ) + return new WP_Error( 'edit_others_pages', __( 'You are not allowed to create pages as this user.' ) ); + else + return new WP_Error( 'edit_others_posts', __( 'You are not allowed to create posts as this user.' ) ); + } + + if ( isset( $post_data['content'] ) ) + $post_data['post_content'] = $post_data['content']; + + if ( isset( $post_data['excerpt'] ) ) + $post_data['post_excerpt'] = $post_data['excerpt']; + + if ( isset( $post_data['parent_id'] ) ) + $post_data['post_parent'] = (int) $post_data['parent_id']; + + if ( isset($post_data['trackback_url']) ) + $post_data['to_ping'] = $post_data['trackback_url']; + + $post_data['user_ID'] = get_current_user_id(); + + if (!empty ( $post_data['post_author_override'] ) ) { + $post_data['post_author'] = (int) $post_data['post_author_override']; + } else { + if (!empty ( $post_data['post_author'] ) ) { + $post_data['post_author'] = (int) $post_data['post_author']; + } else { + $post_data['post_author'] = (int) $post_data['user_ID']; + } + } + + if ( isset( $post_data['user_ID'] ) && ( $post_data['post_author'] != $post_data['user_ID'] ) + && ! current_user_can( $ptype->cap->edit_others_posts ) ) { + if ( $update ) { + if ( 'page' == $post_data['post_type'] ) + return new WP_Error( 'edit_others_pages', __( 'You are not allowed to edit pages as this user.' ) ); + else + return new WP_Error( 'edit_others_posts', __( 'You are not allowed to edit posts as this user.' ) ); + } else { + if ( 'page' == $post_data['post_type'] ) + return new WP_Error( 'edit_others_pages', __( 'You are not allowed to create pages as this user.' ) ); + else + return new WP_Error( 'edit_others_posts', __( 'You are not allowed to create posts as this user.' ) ); + } + } + + if ( ! empty( $post_data['post_status'] ) ) + $post_data['post_status'] = sanitize_key( $post_data['post_status'] ); + + // What to do based on which button they pressed + if ( isset($post_data['saveasdraft']) && '' != $post_data['saveasdraft'] ) + $post_data['post_status'] = 'draft'; + if ( isset($post_data['saveasprivate']) && '' != $post_data['saveasprivate'] ) + $post_data['post_status'] = 'private'; + if ( isset($post_data['publish']) && ( '' != $post_data['publish'] ) && ( !isset($post_data['post_status']) || $post_data['post_status'] != 'private' ) ) + $post_data['post_status'] = 'publish'; + if ( isset($post_data['advanced']) && '' != $post_data['advanced'] ) + $post_data['post_status'] = 'draft'; + if ( isset($post_data['pending']) && '' != $post_data['pending'] ) + $post_data['post_status'] = 'pending'; + + if ( isset( $post_data['ID'] ) ) + $post_id = $post_data['ID']; + else + $post_id = false; + $previous_status = $post_id ? get_post_field( 'post_status', $post_id ) : false; + + $published_statuses = array( 'publish', 'future' ); + + // Posts 'submitted for approval' present are submitted to $_POST the same as if they were being published. + // Change status from 'publish' to 'pending' if user lacks permissions to publish or to resave published posts. + if ( isset($post_data['post_status']) && (in_array( $post_data['post_status'], $published_statuses ) && !current_user_can( $ptype->cap->publish_posts )) ) + if ( ! in_array( $previous_status, $published_statuses ) || !current_user_can( 'edit_post', $post_id ) ) + $post_data['post_status'] = 'pending'; + + if ( ! isset($post_data['post_status']) ) + $post_data['post_status'] = $previous_status; + + if (!isset( $post_data['comment_status'] )) + $post_data['comment_status'] = 'closed'; + + if (!isset( $post_data['ping_status'] )) + $post_data['ping_status'] = 'closed'; + + foreach ( array('aa', 'mm', 'jj', 'hh', 'mn') as $timeunit ) { + if ( !empty( $post_data['hidden_' . $timeunit] ) && $post_data['hidden_' . $timeunit] != $post_data[$timeunit] ) { + $post_data['edit_date'] = '1'; + break; + } + } + + if ( !empty( $post_data['edit_date'] ) ) { + $aa = $post_data['aa']; + $mm = $post_data['mm']; + $jj = $post_data['jj']; + $hh = $post_data['hh']; + $mn = $post_data['mn']; + $ss = $post_data['ss']; + $aa = ($aa <= 0 ) ? date('Y') : $aa; + $mm = ($mm <= 0 ) ? date('n') : $mm; + $jj = ($jj > 31 ) ? 31 : $jj; + $jj = ($jj <= 0 ) ? date('j') : $jj; + $hh = ($hh > 23 ) ? $hh -24 : $hh; + $mn = ($mn > 59 ) ? $mn -60 : $mn; + $ss = ($ss > 59 ) ? $ss -60 : $ss; + $post_data['post_date'] = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $aa, $mm, $jj, $hh, $mn, $ss ); + $valid_date = wp_checkdate( $mm, $jj, $aa, $post_data['post_date'] ); + if ( !$valid_date ) { + return new WP_Error( 'invalid_date', __( 'Whoops, the provided date is invalid.' ) ); + } + $post_data['post_date_gmt'] = get_gmt_from_date( $post_data['post_date'] ); + } + + return $post_data; +} + +/** + * Update an existing post with values provided in $_POST. + * + * @since 1.5.0 + * + * @param array $post_data Optional. + * @return int Post ID. + */ +function edit_post( $post_data = null ) { + + if ( empty($post_data) ) + $post_data = &$_POST; + + // Clear out any data in internal vars. + unset( $post_data['filter'] ); + + $post_ID = (int) $post_data['post_ID']; + $post = get_post( $post_ID ); + $post_data['post_type'] = $post->post_type; + $post_data['post_mime_type'] = $post->post_mime_type; + + $ptype = get_post_type_object($post_data['post_type']); + if ( !current_user_can( 'edit_post', $post_ID ) ) { + if ( 'page' == $post_data['post_type'] ) + wp_die( __('You are not allowed to edit this page.' )); + else + wp_die( __('You are not allowed to edit this post.' )); + } + + if ( post_type_supports( $ptype->name, 'revisions' ) ) { + $revisions = wp_get_post_revisions( $post_ID, array( 'order' => 'ASC', 'posts_per_page' => 1 ) ); + $revision = current( $revisions ); + + // Check if the revisions have been upgraded + if ( $revisions && _wp_get_post_revision_version( $revision ) < 1 ) + _wp_upgrade_revisions_of_post( $post, wp_get_post_revisions( $post_ID ) ); + } + + $post_data = _wp_translate_postdata( true, $post_data ); + if ( is_wp_error($post_data) ) + wp_die( $post_data->get_error_message() ); + if ( ( empty( $post_data['action'] ) || 'autosave' != $post_data['action'] ) && 'auto-draft' == $post_data['post_status'] ) { + $post_data['post_status'] = 'draft'; + } + + if ( isset($post_data['visibility']) ) { + switch ( $post_data['visibility'] ) { + case 'public' : + $post_data['post_password'] = ''; + break; + case 'password' : + unset( $post_data['sticky'] ); + break; + case 'private' : + $post_data['post_status'] = 'private'; + $post_data['post_password'] = ''; + unset( $post_data['sticky'] ); + break; + } + } + + // Post Formats + if ( isset( $post_data['post_format'] ) ) + set_post_format( $post_ID, $post_data['post_format'] ); + + $format_meta_urls = array( 'url', 'link_url', 'quote_source_url' ); + foreach ( $format_meta_urls as $format_meta_url ) { + $keyed = '_format_' . $format_meta_url; + if ( isset( $post_data[ $keyed ] ) ) + update_post_meta( $post_ID, $keyed, wp_slash( esc_url_raw( wp_unslash( $post_data[ $keyed ] ) ) ) ); + } + + $format_keys = array( 'quote', 'quote_source_name', 'image', 'gallery', 'audio_embed', 'video_embed' ); + + foreach ( $format_keys as $key ) { + $keyed = '_format_' . $key; + if ( isset( $post_data[ $keyed ] ) ) { + if ( current_user_can( 'unfiltered_html' ) ) + update_post_meta( $post_ID, $keyed, $post_data[ $keyed ] ); + else + update_post_meta( $post_ID, $keyed, wp_filter_post_kses( $post_data[ $keyed ] ) ); + } + } + + // Meta Stuff + if ( isset($post_data['meta']) && $post_data['meta'] ) { + foreach ( $post_data['meta'] as $key => $value ) { + if ( !$meta = get_post_meta_by_id( $key ) ) + continue; + if ( $meta->post_id != $post_ID ) + continue; + if ( is_protected_meta( $value['key'], 'post' ) || ! current_user_can( 'edit_post_meta', $post_ID, $value['key'] ) ) + continue; + update_meta( $key, $value['key'], $value['value'] ); + } + } + + if ( isset($post_data['deletemeta']) && $post_data['deletemeta'] ) { + foreach ( $post_data['deletemeta'] as $key => $value ) { + if ( !$meta = get_post_meta_by_id( $key ) ) + continue; + if ( $meta->post_id != $post_ID ) + continue; + if ( is_protected_meta( $meta->meta_key, 'post' ) || ! current_user_can( 'delete_post_meta', $post_ID, $meta->meta_key ) ) + continue; + delete_meta( $key ); + } + } + + // Attachment stuff + if ( 'attachment' == $post_data['post_type'] ) { + if ( isset( $post_data[ '_wp_attachment_image_alt' ] ) ) { + $image_alt = wp_unslash( $post_data['_wp_attachment_image_alt'] ); + if ( $image_alt != get_post_meta( $post_ID, '_wp_attachment_image_alt', true ) ) { + $image_alt = wp_strip_all_tags( $image_alt, true ); + // update_meta expects slashed + update_post_meta( $post_ID, '_wp_attachment_image_alt', wp_slash( $image_alt ) ); + } + } + + $attachment_data = isset( $post_data['attachments'][ $post_ID ] ) ? $post_data['attachments'][ $post_ID ] : array(); + /** This filter is documented in wp-admin/includes/media.php */ + $post_data = apply_filters( 'attachment_fields_to_save', $post_data, $attachment_data ); + } + + add_meta( $post_ID ); + + update_post_meta( $post_ID, '_edit_last', get_current_user_id() ); + + wp_update_post( $post_data ); + + // Now that we have an ID we can fix any attachment anchor hrefs + _fix_attachment_links( $post_ID ); + + wp_set_post_lock( $post_ID ); + + if ( current_user_can( $ptype->cap->edit_others_posts ) ) { + if ( ! empty( $post_data['sticky'] ) ) + stick_post( $post_ID ); + else + unstick_post( $post_ID ); + } + + return $post_ID; +} + +/** + * Process the post data for the bulk editing of posts. + * + * Updates all bulk edited posts/pages, adding (but not removing) tags and + * categories. Skips pages when they would be their own parent or child. + * + * @since 2.7.0 + * + * @param array $post_data Optional, the array of post data to process if not provided will use $_POST superglobal. + * @return array + */ +function bulk_edit_posts( $post_data = null ) { + global $wpdb; + + if ( empty($post_data) ) + $post_data = &$_POST; + + if ( isset($post_data['post_type']) ) + $ptype = get_post_type_object($post_data['post_type']); + else + $ptype = get_post_type_object('post'); + + if ( !current_user_can( $ptype->cap->edit_posts ) ) { + if ( 'page' == $ptype->name ) + wp_die( __('You are not allowed to edit pages.')); + else + wp_die( __('You are not allowed to edit posts.')); + } + + if ( -1 == $post_data['_status'] ) { + $post_data['post_status'] = null; + unset($post_data['post_status']); + } else { + $post_data['post_status'] = $post_data['_status']; + } + unset($post_data['_status']); + + $post_IDs = array_map( 'intval', (array) $post_data['post'] ); + + $reset = array( + 'post_author', 'post_status', 'post_password', + 'post_parent', 'page_template', 'comment_status', + 'ping_status', 'keep_private', 'tax_input', + 'post_category', 'sticky', 'post_format', + ); + + foreach ( $reset as $field ) { + if ( isset($post_data[$field]) && ( '' == $post_data[$field] || -1 == $post_data[$field] ) ) + unset($post_data[$field]); + } + + if ( isset($post_data['post_category']) ) { + if ( is_array($post_data['post_category']) && ! empty($post_data['post_category']) ) + $new_cats = array_map( 'absint', $post_data['post_category'] ); + else + unset($post_data['post_category']); + } + + $tax_input = array(); + if ( isset($post_data['tax_input'])) { + foreach ( $post_data['tax_input'] as $tax_name => $terms ) { + if ( empty($terms) ) + continue; + if ( is_taxonomy_hierarchical( $tax_name ) ) { + $tax_input[ $tax_name ] = array_map( 'absint', $terms ); + } else { + $comma = _x( ',', 'tag delimiter' ); + if ( ',' !== $comma ) + $terms = str_replace( $comma, ',', $terms ); + $tax_input[ $tax_name ] = explode( ',', trim( $terms, " \n\t\r\0\x0B," ) ); + } + } + } + + if ( isset($post_data['post_parent']) && ($parent = (int) $post_data['post_parent']) ) { + $pages = $wpdb->get_results("SELECT ID, post_parent FROM $wpdb->posts WHERE post_type = 'page'"); + $children = array(); + + for ( $i = 0; $i < 50 && $parent > 0; $i++ ) { + $children[] = $parent; + + foreach ( $pages as $page ) { + if ( $page->ID == $parent ) { + $parent = $page->post_parent; + break; + } + } + } + } + + $updated = $skipped = $locked = array(); + foreach ( $post_IDs as $post_ID ) { + $post_type_object = get_post_type_object( get_post_type( $post_ID ) ); + + if ( !isset( $post_type_object ) || ( isset($children) && in_array($post_ID, $children) ) || !current_user_can( 'edit_post', $post_ID ) ) { + $skipped[] = $post_ID; + continue; + } + + if ( wp_check_post_lock( $post_ID ) ) { + $locked[] = $post_ID; + continue; + } + + $post = get_post( $post_ID ); + $tax_names = get_object_taxonomies( $post ); + foreach ( $tax_names as $tax_name ) { + $taxonomy_obj = get_taxonomy($tax_name); + if ( isset( $tax_input[$tax_name]) && current_user_can( $taxonomy_obj->cap->assign_terms ) ) + $new_terms = $tax_input[$tax_name]; + else + $new_terms = array(); + + if ( $taxonomy_obj->hierarchical ) + $current_terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'ids') ); + else + $current_terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'names') ); + + $post_data['tax_input'][$tax_name] = array_merge( $current_terms, $new_terms ); + } + + if ( isset($new_cats) && in_array( 'category', $tax_names ) ) { + $cats = (array) wp_get_post_categories($post_ID); + $post_data['post_category'] = array_unique( array_merge($cats, $new_cats) ); + unset( $post_data['tax_input']['category'] ); + } + + $post_data['post_mime_type'] = $post->post_mime_type; + $post_data['guid'] = $post->guid; + + $post_data['ID'] = $post_ID; + $updated[] = wp_update_post( $post_data ); + + if ( isset( $post_data['sticky'] ) && current_user_can( $ptype->cap->edit_others_posts ) ) { + if ( 'sticky' == $post_data['sticky'] ) + stick_post( $post_ID ); + else + unstick_post( $post_ID ); + } + + if ( isset( $post_data['post_format'] ) ) + set_post_format( $post_ID, $post_data['post_format'] ); + } + + return array( 'updated' => $updated, 'skipped' => $skipped, 'locked' => $locked ); +} + +/** + * Default post information to use when populating the "Write Post" form. + * + * @since 2.0.0 + * + * @param string $post_type A post type string, defaults to 'post'. + * @return WP_Post Post object containing all the default post data as attributes + */ +function get_default_post_to_edit( $post_type = 'post', $create_in_db = false ) { + global $wpdb; + + $post_title = ''; + if ( !empty( $_REQUEST['post_title'] ) ) + $post_title = esc_html( wp_unslash( $_REQUEST['post_title'] )); + + $post_content = ''; + if ( !empty( $_REQUEST['content'] ) ) + $post_content = esc_html( wp_unslash( $_REQUEST['content'] )); + + $post_excerpt = ''; + if ( !empty( $_REQUEST['excerpt'] ) ) + $post_excerpt = esc_html( wp_unslash( $_REQUEST['excerpt'] )); + + if ( $create_in_db ) { + $post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) ); + $post = get_post( $post_id ); + if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) ) + set_post_format( $post, get_option( 'default_post_format' ) ); + } else { + $post = new stdClass; + $post->ID = 0; + $post->post_author = ''; + $post->post_date = ''; + $post->post_date_gmt = ''; + $post->post_password = ''; + $post->post_type = $post_type; + $post->post_status = 'draft'; + $post->to_ping = ''; + $post->pinged = ''; + $post->comment_status = get_option( 'default_comment_status' ); + $post->ping_status = get_option( 'default_ping_status' ); + $post->post_pingback = get_option( 'default_pingback_flag' ); + $post->post_category = get_option( 'default_category' ); + $post->page_template = 'default'; + $post->post_parent = 0; + $post->menu_order = 0; + $post = new WP_Post( $post ); + } + + $post->post_content = apply_filters( 'default_content', $post_content, $post ); + $post->post_title = apply_filters( 'default_title', $post_title, $post ); + $post->post_excerpt = apply_filters( 'default_excerpt', $post_excerpt, $post ); + $post->post_name = ''; + + return $post; +} + +/** + * Determine if a post exists based on title, content, and date + * + * @since 2.0.0 + * + * @param string $title Post title + * @param string $content Optional post content + * @param string $date Optional post date + * @return int Post ID if post exists, 0 otherwise. + */ +function post_exists($title, $content = '', $date = '') { + global $wpdb; + + $post_title = wp_unslash( sanitize_post_field( 'post_title', $title, 0, 'db' ) ); + $post_content = wp_unslash( sanitize_post_field( 'post_content', $content, 0, 'db' ) ); + $post_date = wp_unslash( sanitize_post_field( 'post_date', $date, 0, 'db' ) ); + + $query = "SELECT ID FROM $wpdb->posts WHERE 1=1"; + $args = array(); + + if ( !empty ( $date ) ) { + $query .= ' AND post_date = %s'; + $args[] = $post_date; + } + + if ( !empty ( $title ) ) { + $query .= ' AND post_title = %s'; + $args[] = $post_title; + } + + if ( !empty ( $content ) ) { + $query .= 'AND post_content = %s'; + $args[] = $post_content; + } + + if ( !empty ( $args ) ) + return (int) $wpdb->get_var( $wpdb->prepare($query, $args) ); + + return 0; +} + +/** + * Creates a new post from the "Write Post" form using $_POST information. + * + * @since 2.1.0 + * + * @return unknown + */ +function wp_write_post() { + if ( isset($_POST['post_type']) ) + $ptype = get_post_type_object($_POST['post_type']); + else + $ptype = get_post_type_object('post'); + + if ( !current_user_can( $ptype->cap->edit_posts ) ) { + if ( 'page' == $ptype->name ) + return new WP_Error( 'edit_pages', __( 'You are not allowed to create pages on this site.' ) ); + else + return new WP_Error( 'edit_posts', __( 'You are not allowed to create posts or drafts on this site.' ) ); + } + + $_POST['post_mime_type'] = ''; + + // Clear out any data in internal vars. + unset( $_POST['filter'] ); + + // Edit don't write if we have a post id. + if ( isset( $_POST['post_ID'] ) ) + return edit_post(); + + $translated = _wp_translate_postdata( false ); + if ( is_wp_error($translated) ) + return $translated; + + if ( isset($_POST['visibility']) ) { + switch ( $_POST['visibility'] ) { + case 'public' : + $_POST['post_password'] = ''; + break; + case 'password' : + unset( $_POST['sticky'] ); + break; + case 'private' : + $_POST['post_status'] = 'private'; + $_POST['post_password'] = ''; + unset( $_POST['sticky'] ); + break; + } + } + + // Create the post. + $post_ID = wp_insert_post( $_POST ); + if ( is_wp_error( $post_ID ) ) + return $post_ID; + + if ( empty($post_ID) ) + return 0; + + add_meta( $post_ID ); + + add_post_meta( $post_ID, '_edit_last', $GLOBALS['current_user']->ID ); + + // Now that we have an ID we can fix any attachment anchor hrefs + _fix_attachment_links( $post_ID ); + + wp_set_post_lock( $post_ID ); + + return $post_ID; +} + +/** + * Calls wp_write_post() and handles the errors. + * + * @since 2.0.0 + + * @uses wp_write_post() + * @uses is_wp_error() + * @uses wp_die() + * @return unknown + */ +function write_post() { + $result = wp_write_post(); + if ( is_wp_error( $result ) ) + wp_die( $result->get_error_message() ); + else + return $result; +} + +// +// Post Meta +// + +/** + * {@internal Missing Short Description}} + * + * @since 1.2.0 + * + * @param unknown_type $post_ID + * @return unknown + */ +function add_meta( $post_ID ) { + global $wpdb; + $post_ID = (int) $post_ID; + + $metakeyselect = isset($_POST['metakeyselect']) ? wp_unslash( trim( $_POST['metakeyselect'] ) ) : ''; + $metakeyinput = isset($_POST['metakeyinput']) ? wp_unslash( trim( $_POST['metakeyinput'] ) ) : ''; + $metavalue = isset($_POST['metavalue']) ? $_POST['metavalue'] : ''; + if ( is_string( $metavalue ) ) + $metavalue = trim( $metavalue ); + + if ( ('0' === $metavalue || ! empty ( $metavalue ) ) && ( ( ( '#NONE#' != $metakeyselect ) && !empty ( $metakeyselect) ) || !empty ( $metakeyinput ) ) ) { + // We have a key/value pair. If both the select and the + // input for the key have data, the input takes precedence: + + if ( '#NONE#' != $metakeyselect ) + $metakey = $metakeyselect; + + if ( $metakeyinput ) + $metakey = $metakeyinput; // default + + if ( is_protected_meta( $metakey, 'post' ) || ! current_user_can( 'add_post_meta', $post_ID, $metakey ) ) + return false; + + $metakey = wp_slash( $metakey ); + + return add_post_meta( $post_ID, $metakey, $metavalue ); + } + + return false; +} // add_meta + +/** + * {@internal Missing Short Description}} + * + * @since 1.2.0 + * + * @param unknown_type $mid + * @return unknown + */ +function delete_meta( $mid ) { + return delete_metadata_by_mid( 'post' , $mid ); +} + +/** + * Get a list of previously defined keys. + * + * @since 1.2.0 + * + * @return unknown + */ +function get_meta_keys() { + global $wpdb; + + $keys = $wpdb->get_col( " + SELECT meta_key + FROM $wpdb->postmeta + GROUP BY meta_key + ORDER BY meta_key" ); + + return $keys; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.1.0 + * + * @param unknown_type $mid + * @return unknown + */ +function get_post_meta_by_id( $mid ) { + return get_metadata_by_mid( 'post', $mid ); +} + +/** + * {@internal Missing Short Description}} + * + * Some postmeta stuff. + * + * @since 1.2.0 + * + * @param unknown_type $postid + * @return unknown + */ +function has_meta( $postid ) { + global $wpdb; + + return $wpdb->get_results( $wpdb->prepare("SELECT meta_key, meta_value, meta_id, post_id + FROM $wpdb->postmeta WHERE post_id = %d + ORDER BY meta_key,meta_id", $postid), ARRAY_A ); +} + +/** + * {@internal Missing Short Description}} + * + * @since 1.2.0 + * + * @param unknown_type $meta_id + * @param unknown_type $meta_key Expect Slashed + * @param unknown_type $meta_value Expect Slashed + * @return unknown + */ +function update_meta( $meta_id, $meta_key, $meta_value ) { + $meta_key = wp_unslash( $meta_key ); + $meta_value = wp_unslash( $meta_value ); + + return update_metadata_by_mid( 'post', $meta_id, $meta_value, $meta_key ); +} + +// +// Private +// + +/** + * Replace hrefs of attachment anchors with up-to-date permalinks. + * + * @since 2.3.0 + * @access private + * + * @param int|object $post Post ID or post object. + * @return void|int|WP_Error Void if nothing fixed. 0 or WP_Error on update failure. The post ID on update success. + */ +function _fix_attachment_links( $post ) { + $post = get_post( $post, ARRAY_A ); + $content = $post['post_content']; + + // Don't run if no pretty permalinks or post is not published, scheduled, or privately published. + if ( ! get_option( 'permalink_structure' ) || ! in_array( $post['post_status'], array( 'publish', 'future', 'private' ) ) ) + return; + + // Short if there aren't any links or no '?attachment_id=' strings (strpos cannot be zero) + if ( !strpos($content, '?attachment_id=') || !preg_match_all( '/]+)>[\s\S]+?<\/a>/', $content, $link_matches ) ) + return; + + $site_url = get_bloginfo('url'); + $site_url = substr( $site_url, (int) strpos($site_url, '://') ); // remove the http(s) + $replace = ''; + + foreach ( $link_matches[1] as $key => $value ) { + if ( !strpos($value, '?attachment_id=') || !strpos($value, 'wp-att-') + || !preg_match( '/href=(["\'])[^"\']*\?attachment_id=(\d+)[^"\']*\\1/', $value, $url_match ) + || !preg_match( '/rel=["\'][^"\']*wp-att-(\d+)/', $value, $rel_match ) ) + continue; + + $quote = $url_match[1]; // the quote (single or double) + $url_id = (int) $url_match[2]; + $rel_id = (int) $rel_match[1]; + + if ( !$url_id || !$rel_id || $url_id != $rel_id || strpos($url_match[0], $site_url) === false ) + continue; + + $link = $link_matches[0][$key]; + $replace = str_replace( $url_match[0], 'href=' . $quote . get_attachment_link( $url_id ) . $quote, $link ); + + $content = str_replace( $link, $replace, $content ); + } + + if ( $replace ) { + $post['post_content'] = $content; + // Escape data pulled from DB. + $post = add_magic_quotes($post); + + return wp_update_post($post); + } +} + +/** + * Move child posts to a new parent. + * + * @since 2.3.0 + * @access private + * + * @param unknown_type $old_ID + * @param unknown_type $new_ID + * @return unknown + */ +function _relocate_children( $old_ID, $new_ID ) { + global $wpdb; + $old_ID = (int) $old_ID; + $new_ID = (int) $new_ID; + + $children = $wpdb->get_col( $wpdb->prepare(" + SELECT post_id + FROM $wpdb->postmeta + WHERE meta_key = '_wp_attachment_temp_parent' + AND meta_value = %d", $old_ID) ); + + foreach ( $children as $child_id ) { + $wpdb->update($wpdb->posts, array('post_parent' => $new_ID), array('ID' => $child_id) ); + delete_post_meta($child_id, '_wp_attachment_temp_parent'); + } +} + +/** + * Get all the possible statuses for a post_type + * + * @since 2.5.0 + * + * @param string $type The post_type you want the statuses for + * @return array As array of all the statuses for the supplied post type + */ +function get_available_post_statuses($type = 'post') { + $stati = wp_count_posts($type); + + return array_keys(get_object_vars($stati)); +} + +/** + * Run the wp query to fetch the posts for listing on the edit posts page + * + * @since 2.5.0 + * + * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal. + * @return array + */ +function wp_edit_posts_query( $q = false ) { + if ( false === $q ) + $q = $_GET; + $q['m'] = isset($q['m']) ? (int) $q['m'] : 0; + $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0; + $post_stati = get_post_stati(); + + if ( isset($q['post_type']) && in_array( $q['post_type'], get_post_types() ) ) + $post_type = $q['post_type']; + else + $post_type = 'post'; + + $avail_post_stati = get_available_post_statuses($post_type); + + if ( isset($q['post_status']) && in_array( $q['post_status'], $post_stati ) ) { + $post_status = $q['post_status']; + $perm = 'readable'; + } + + if ( isset($q['orderby']) ) + $orderby = $q['orderby']; + elseif ( isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft')) ) + $orderby = 'modified'; + + if ( isset($q['order']) ) + $order = $q['order']; + elseif ( isset($q['post_status']) && 'pending' == $q['post_status'] ) + $order = 'ASC'; + + $per_page = 'edit_' . $post_type . '_per_page'; + $posts_per_page = (int) get_user_option( $per_page ); + if ( empty( $posts_per_page ) || $posts_per_page < 1 ) + $posts_per_page = 20; + + $posts_per_page = apply_filters( $per_page, $posts_per_page ); + $posts_per_page = apply_filters( 'edit_posts_per_page', $posts_per_page, $post_type ); + + $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page'); + + // Hierarchical types require special args. + if ( is_post_type_hierarchical( $post_type ) && !isset($orderby) ) { + $query['orderby'] = 'menu_order title'; + $query['order'] = 'asc'; + $query['posts_per_page'] = -1; + $query['posts_per_archive_page'] = -1; + } + + if ( ! empty( $q['show_sticky'] ) ) + $query['post__in'] = (array) get_option( 'sticky_posts' ); + + wp( $query ); + + return $avail_post_stati; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param unknown_type $type + * @return unknown + */ +function get_available_post_mime_types($type = 'attachment') { + global $wpdb; + + $types = $wpdb->get_col($wpdb->prepare("SELECT DISTINCT post_mime_type FROM $wpdb->posts WHERE post_type = %s", $type)); + return $types; +} + +/** + * Executes a query for attachments. An array of WP_Query arguments + * can be passed in, which will override the arguments set by this function. + * + * @since 2.5.0 + * @uses apply_filters() Calls 'upload_per_page' on posts_per_page argument + * + * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal. + * @return array + */ +function wp_edit_attachments_query( $q = false ) { + if ( false === $q ) + $q = $_GET; + + $q['m'] = isset( $q['m'] ) ? (int) $q['m'] : 0; + $q['cat'] = isset( $q['cat'] ) ? (int) $q['cat'] : 0; + $q['post_type'] = 'attachment'; + $post_type = get_post_type_object( 'attachment' ); + $states = 'inherit'; + if ( current_user_can( $post_type->cap->read_private_posts ) ) + $states .= ',private'; + + $q['post_status'] = isset( $q['status'] ) && 'trash' == $q['status'] ? 'trash' : $states; + $media_per_page = (int) get_user_option( 'upload_per_page' ); + if ( empty( $media_per_page ) || $media_per_page < 1 ) + $media_per_page = 20; + $q['posts_per_page'] = apply_filters( 'upload_per_page', $media_per_page ); + + $post_mime_types = get_post_mime_types(); + $avail_post_mime_types = get_available_post_mime_types('attachment'); + + if ( isset($q['post_mime_type']) && !array_intersect( (array) $q['post_mime_type'], array_keys($post_mime_types) ) ) + unset($q['post_mime_type']); + + if ( isset($q['detached']) ) + add_filter('posts_where', '_edit_attachments_query_helper'); + + wp( $q ); + + if ( isset($q['detached']) ) + remove_filter('posts_where', '_edit_attachments_query_helper'); + + return array($post_mime_types, $avail_post_mime_types); +} + +function _edit_attachments_query_helper($where) { + global $wpdb; + return $where .= " AND {$wpdb->posts}.post_parent < 1"; +} + +/** + * Returns the list of classes to be used by a metabox + * + * @uses get_user_option() + * @since 2.5.0 + * + * @param unknown_type $id + * @param unknown_type $page + * @return unknown + */ +function postbox_classes( $id, $page ) { + if ( isset( $_GET['edit'] ) && $_GET['edit'] == $id ) { + $classes = array( '' ); + } elseif ( $closed = get_user_option('closedpostboxes_'.$page ) ) { + if ( !is_array( $closed ) ) { + $classes = array( '' ); + } else { + $classes = in_array( $id, $closed ) ? array( 'closed' ) : array( '' ); + } + } else { + $classes = array( '' ); + } + + $classes = apply_filters( "postbox_classes_{$page}_{$id}", $classes ); + return implode( ' ', $classes ); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param int|object $id Post ID or post object. + * @param string $title (optional) Title + * @param string $name (optional) Name + * @return array With two entries of type string + */ +function get_sample_permalink($id, $title = null, $name = null) { + $post = get_post( $id ); + if ( ! $post ) + return array( '', '' ); + + $ptype = get_post_type_object($post->post_type); + + $original_status = $post->post_status; + $original_date = $post->post_date; + $original_name = $post->post_name; + + // Hack: get_permalink() would return ugly permalink for drafts, so we will fake that our post is published. + if ( in_array( $post->post_status, array( 'draft', 'pending' ) ) ) { + $post->post_status = 'publish'; + $post->post_name = sanitize_title($post->post_name ? $post->post_name : $post->post_title, $post->ID); + } + + // If the user wants to set a new name -- override the current one + // Note: if empty name is supplied -- use the title instead, see #6072 + if ( !is_null($name) ) + $post->post_name = sanitize_title($name ? $name : $title, $post->ID); + + $post->post_name = wp_unique_post_slug($post->post_name, $post->ID, $post->post_status, $post->post_type, $post->post_parent); + + $post->filter = 'sample'; + + $permalink = get_permalink($post, true); + + // Replace custom post_type Token with generic pagename token for ease of use. + $permalink = str_replace("%$post->post_type%", '%pagename%', $permalink); + + // Handle page hierarchy + if ( $ptype->hierarchical ) { + $uri = get_page_uri($post); + $uri = untrailingslashit($uri); + $uri = strrev( stristr( strrev( $uri ), '/' ) ); + $uri = untrailingslashit($uri); + $uri = apply_filters( 'editable_slug', $uri ); + if ( !empty($uri) ) + $uri .= '/'; + $permalink = str_replace('%pagename%', "{$uri}%pagename%", $permalink); + } + + $permalink = array($permalink, apply_filters('editable_slug', $post->post_name)); + $post->post_status = $original_status; + $post->post_date = $original_date; + $post->post_name = $original_name; + unset($post->filter); + + return $permalink; +} + +/** + * Returns the HTML of the sample permalink slug editor. + * + * @since 2.5.0 + * + * @param int|object $id Post ID or post object. + * @param string $new_title Optional. New title. + * @param string $new_slug Optional. New slug. + * @return string The HTML of the sample permalink slug editor. + */ +function get_sample_permalink_html( $id, $new_title = null, $new_slug = null ) { + $post = get_post( $id ); + if ( ! $post ) + return ''; + + list($permalink, $post_name) = get_sample_permalink($post->ID, $new_title, $new_slug); + + if ( 'publish' == get_post_status( $post ) ) { + $ptype = get_post_type_object($post->post_type); + $view_post = $ptype->labels->view_item; + $title = __('Click to edit this part of the permalink'); + } else { + $title = __('Temporary permalink. Click to edit this part.'); + } + + if ( false === strpos($permalink, '%postname%') && false === strpos($permalink, '%pagename%') ) { + $return = '' . __('Permalink:') . "\n" . '' . $permalink . "\n"; + if ( '' == get_option( 'permalink_structure' ) && current_user_can( 'manage_options' ) && !( 'page' == get_option('show_on_front') && $id == get_option('page_on_front') ) ) + $return .= '' . __('Change Permalinks') . "\n"; + if ( isset( $view_post ) ) + $return .= "$view_post\n"; + + $return = apply_filters('get_sample_permalink_html', $return, $id, $new_title, $new_slug); + + return $return; + } + + if ( function_exists('mb_strlen') ) { + if ( mb_strlen($post_name) > 30 ) { + $post_name_abridged = mb_substr($post_name, 0, 14). '…' . mb_substr($post_name, -14); + } else { + $post_name_abridged = $post_name; + } + } else { + if ( strlen($post_name) > 30 ) { + $post_name_abridged = substr($post_name, 0, 14). '…' . substr($post_name, -14); + } else { + $post_name_abridged = $post_name; + } + } + + $post_name_html = '' . $post_name_abridged . ''; + $display_link = str_replace(array('%pagename%','%postname%'), $post_name_html, $permalink); + $view_link = str_replace(array('%pagename%','%postname%'), $post_name, $permalink); + $return = '' . __('Permalink:') . "\n"; + $return .= '' . $display_link . "\n"; + $return .= '‎'; // Fix bi-directional text display defect in RTL languages. + $return .= '' . __('Edit') . "\n"; + $return .= '' . $post_name . "\n"; + if ( isset($view_post) ) + $return .= "$view_post\n"; + + $return = apply_filters('get_sample_permalink_html', $return, $id, $new_title, $new_slug); + + return $return; +} + +/** + * Output HTML for the post thumbnail meta-box. + * + * @since 2.9.0 + * + * @param int $thumbnail_id ID of the attachment used for thumbnail + * @param mixed $post The post ID or object associated with the thumbnail, defaults to global $post. + * @return string html + */ +function _wp_post_thumbnail_html( $thumbnail_id = null, $post = null ) { + global $content_width, $_wp_additional_image_sizes; + + $post = get_post( $post ); + + $upload_iframe_src = esc_url( get_upload_iframe_src('image', $post->ID ) ); + $set_thumbnail_link = '

    %s

    '; + $content = sprintf( $set_thumbnail_link, $upload_iframe_src, esc_html__( 'Set featured image' ) ); + + if ( $thumbnail_id && get_post( $thumbnail_id ) ) { + $old_content_width = $content_width; + $content_width = 266; + if ( !isset( $_wp_additional_image_sizes['post-thumbnail'] ) ) + $thumbnail_html = wp_get_attachment_image( $thumbnail_id, array( $content_width, $content_width ) ); + else + $thumbnail_html = wp_get_attachment_image( $thumbnail_id, 'post-thumbnail' ); + if ( !empty( $thumbnail_html ) ) { + $ajax_nonce = wp_create_nonce( 'set_post_thumbnail-' . $post->ID ); + $content = sprintf( $set_thumbnail_link, $upload_iframe_src, $thumbnail_html ); + $content .= '

    ' . esc_html__( 'Remove featured image' ) . '

    '; + } + $content_width = $old_content_width; + } + + return apply_filters( 'admin_post_thumbnail_html', $content, $post->ID ); +} + +/** + * Check to see if the post is currently being edited by another user. + * + * @since 2.5.0 + * + * @param int $post_id ID of the post to check for editing + * @return bool|int False: not locked or locked by current user. Int: user ID of user with lock. + */ +function wp_check_post_lock( $post_id ) { + if ( !$post = get_post( $post_id ) ) + return false; + + if ( !$lock = get_post_meta( $post->ID, '_edit_lock', true ) ) + return false; + + $lock = explode( ':', $lock ); + $time = $lock[0]; + $user = isset( $lock[1] ) ? $lock[1] : get_post_meta( $post->ID, '_edit_last', true ); + + $time_window = apply_filters( 'wp_check_post_lock_window', 150 ); + + if ( $time && $time > time() - $time_window && $user != get_current_user_id() ) + return $user; + return false; +} + +/** + * Mark the post as currently being edited by the current user + * + * @since 2.5.0 + * + * @param int $post_id ID of the post to being edited + * @return bool|array Returns false if the post doesn't exist of there is no current user, or + * an array of the lock time and the user ID. + */ +function wp_set_post_lock( $post_id ) { + if ( !$post = get_post( $post_id ) ) + return false; + if ( 0 == ($user_id = get_current_user_id()) ) + return false; + + $now = time(); + $lock = "$now:$user_id"; + + update_post_meta( $post->ID, '_edit_lock', $lock ); + return array( $now, $user_id ); +} + +/** + * Outputs the HTML for the notice to say that someone else is editing or has taken over editing of this post. + * + * @since 2.8.5 + * @return none + */ +function _admin_notice_post_locked() { + if ( ! $post = get_post() ) + return; + + $user = null; + if ( $user_id = wp_check_post_lock( $post->ID ) ) + $user = get_userdata( $user_id ); + + if ( $user ) { + if ( ! apply_filters( 'show_post_locked_dialog', true, $post, $user ) ) + return; + + $locked = true; + } else { + $locked = false; + } + + if ( $locked && ( $sendback = wp_get_referer() ) && + false === strpos( $sendback, 'post.php' ) && false === strpos( $sendback, 'post-new.php' ) ) { + + $sendback_text = __('Go back'); + } else { + $sendback = admin_url( 'edit.php' ); + + if ( 'post' != $post->post_type ) + $sendback = add_query_arg( 'post_type', $post->post_type, $sendback ); + + $sendback_text = get_post_type_object( $post->post_type )->labels->all_items; + } + + $hidden = $locked ? '' : ' hidden'; + + ?> +
    +
    +
    + post_type )->public ) { + $preview_link = set_url_scheme( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ); + + if ( 'publish' == $post->post_status || $user->ID != $post->post_author ) { + // Latest content is in autosave + $nonce = wp_create_nonce( 'post_preview_' . $post->ID ); + $preview_link = add_query_arg( array( 'preview_id' => $post->ID, 'preview_nonce' => $nonce ), $preview_link ); + } + } else { + $preview_link = ''; + } + + $preview_link = apply_filters( 'preview_post_link', $preview_link ); + $override = apply_filters( 'override_post_lock', true, $post, $user ); + $tab_last = $override ? '' : ' wp-tab-last'; + + ?> +
    +
    ID, 64 ); ?>
    +

    + display_name ) ); + ?> +

    + +

    + + + + + + +

    +
    + +
    +
    +

    +
    + + +

    + +

    +
    + +
    +
    + ID; + $new_autosave['post_author'] = $post_author; + + // If the new autosave is the same content as the post, delete the old autosave. + $post = get_post( $post_id ); + $autosave_is_different = false; + foreach ( array_keys( _wp_post_revision_fields() ) as $field ) { + if ( normalize_whitespace( $new_autosave[ $field ] ) != normalize_whitespace( $post->$field ) ) { + $autosave_is_different = true; + break; + } + } + + if ( ! $autosave_is_different ) { + wp_delete_post_revision( $old_autosave->ID ); + return; + } + + return wp_update_post( $new_autosave ); + } + + // _wp_put_post_revision() expects unescaped. + $post_data = wp_unslash( $_POST ); + + // Otherwise create the new autosave as a special post revision + return _wp_put_post_revision( $post_data, true ); +} + +/** + * Save draft or manually autosave for showing preview. + * + * @package WordPress + * @since 2.7.0 + * + * @uses get_post_status() + * @uses edit_post() + * @uses get_post() + * @uses current_user_can() + * @uses wp_die() + * @uses wp_create_post_autosave() + * @uses add_query_arg() + * @uses wp_create_nonce() + * + * @return str URL to redirect to show the preview + */ +function post_preview() { + + $post_ID = (int) $_POST['post_ID']; + $status = get_post_status( $post_ID ); + if ( 'auto-draft' == $status ) + wp_die( __('Preview not available. Please save as a draft first.') ); + + if ( isset($_POST['catslist']) ) + $_POST['post_category'] = explode(",", $_POST['catslist']); + + if ( isset($_POST['tags_input']) ) + $_POST['tags_input'] = explode(",", $_POST['tags_input']); + + if ( $_POST['post_type'] == 'page' || empty($_POST['post_category']) ) + unset($_POST['post_category']); + + $_POST['ID'] = $post_ID; + $post = get_post($post_ID); + + if ( 'page' == $post->post_type ) { + if ( ! current_user_can('edit_page', $post_ID) ) + wp_die( __('You are not allowed to edit this page.') ); + } else { + if ( ! current_user_can('edit_post', $post_ID) ) + wp_die( __('You are not allowed to edit this post.') ); + } + + $user_id = get_current_user_id(); + $locked = wp_check_post_lock( $post->ID ); + if ( ! $locked && 'draft' == $post->post_status && $user_id == $post->post_author ) { + $id = edit_post(); + } else { // Non drafts are not overwritten. The autosave is stored in a special post revision. + $id = wp_create_post_autosave( $post->ID ); + if ( ! is_wp_error($id) ) + $id = $post->ID; + } + + if ( is_wp_error($id) ) + wp_die( $id->get_error_message() ); + + if ( ! $locked && $_POST['post_status'] == 'draft' && $user_id == $post->post_author ) { + $url = add_query_arg( 'preview', 'true', get_permalink($id) ); + } else { + $nonce = wp_create_nonce('post_preview_' . $id); + $args = array( + 'preview' => 'true', + 'preview_id' => $id, + 'preview_nonce' => $nonce, + ); + + if ( isset( $_POST['post_format'] ) ) + $args['post_format'] = empty( $_POST['post_format'] ) ? 'standard' : sanitize_key( $_POST['post_format'] ); + + $url = add_query_arg( $args, get_permalink($id) ); + } + + return apply_filters( 'preview_post_link', $url ); +} diff --git a/src/wp-admin/includes/revision.php b/src/wp-admin/includes/revision.php new file mode 100644 index 0000000..737c3b1 --- /dev/null +++ b/src/wp-admin/includes/revision.php @@ -0,0 +1,224 @@ +post_parent !== $post->ID && $compare_from->ID !== $post->ID ) + return false; + if ( $compare_to->post_parent !== $post->ID && $compare_to->ID !== $post->ID ) + return false; + + if ( $compare_from && strtotime( $compare_from->post_date_gmt ) > strtotime( $compare_to->post_date_gmt ) ) { + $temp = $compare_from; + $compare_from = $compare_to; + $compare_to = $temp; + } + + // Add default title if title field is empty + if ( $compare_from && empty( $compare_from->post_title ) ) + $compare_from->post_title = __( '(no title)' ); + if ( empty( $compare_to->post_title ) ) + $compare_to->post_title = __( '(no title)' ); + + $return = array(); + + foreach ( _wp_post_revision_fields() as $field => $name ) { + /** + * Contextually filter a post revision field. + * + * The dynamic portion of the hook name, $field, corresponds to each of the post + * fields of the revision object being iterated over in a foreach statement. + * + * @since 3.6.0 + * + * @param string $compare_from->$field The current revision field to compare to or from. + * @param string $field The current revision field. + * @param WP_Post $compare_from The revision post object to compare to or from. + * @param string null The context of whether the current revision is the old or the new one. Values are 'to' or 'from'. + */ + $content_from = $compare_from ? apply_filters( "_wp_post_revision_field_$field", $compare_from->$field, $field, $compare_from, 'from' ) : ''; + + /** This filter is documented in wp-admin/includes/revision.php */ + $content_to = apply_filters( "_wp_post_revision_field_$field", $compare_to->$field, $field, $compare_to, 'to' ); + + $diff = wp_text_diff( $content_from, $content_to, array( 'show_split_view' => true ) ); + + if ( ! $diff && 'post_title' === $field ) { + // It's a better user experience to still show the Title, even if it didn't change. + // No, you didn't see this. + $diff = ''; + $diff .= ''; + $diff .= ''; + $diff .= '
    ' . esc_html( $compare_from->post_title ) . '' . esc_html( $compare_to->post_title ) . '
    '; + } + + if ( $diff ) { + $return[] = array( + 'id' => $field, + 'name' => $name, + 'diff' => $diff, + ); + } + } + return $return; +} + +/** + * Prepare revisions for JavaScript. + * + * @since 3.6.0 + * + * @param object|int $post The post object. Also accepts a post ID. + * @param int $selected_revision_id The selected revision ID. + * @param int $from Optional. The revision ID to compare from. + * + * @return array An associative array of revision data and related settings. + */ +function wp_prepare_revisions_for_js( $post, $selected_revision_id, $from = null ) { + $post = get_post( $post ); + $revisions = $authors = array(); + $now_gmt = time(); + + $revisions = wp_get_post_revisions( $post->ID, array( 'order' => 'ASC', 'check_enabled' => false ) ); + // If revisions are disabled, we only want autosaves and the current post. + if ( ! wp_revisions_enabled( $post ) ) { + foreach ( $revisions as $revision_id => $revision ) { + if ( ! wp_is_post_autosave( $revision ) ) + unset( $revisions[ $revision_id ] ); + } + $revisions = array( $post->ID => $post ) + $revisions; + } + + $show_avatars = get_option( 'show_avatars' ); + + cache_users( wp_list_pluck( $revisions, 'post_author' ) ); + + $can_restore = current_user_can( 'edit_post', $post->ID ); + + foreach ( $revisions as $revision ) { + $modified = strtotime( $revision->post_modified ); + $modified_gmt = strtotime( $revision->post_modified_gmt ); + if ( $can_restore ) { + $restore_link = str_replace( '&', '&', wp_nonce_url( + add_query_arg( + array( 'revision' => $revision->ID, + 'action' => 'restore' ), + admin_url( 'revision.php' ) + ), + "restore-post_{$revision->ID}" + ) ); + } + + if ( ! isset( $authors[ $revision->post_author ] ) ) { + $authors[ $revision->post_author ] = array( + 'id' => (int) $revision->post_author, + 'avatar' => $show_avatars ? get_avatar( $revision->post_author, 32 ) : '', + 'name' => get_the_author_meta( 'display_name', $revision->post_author ), + ); + } + + $autosave = (bool) wp_is_post_autosave( $revision ); + $current = ! $autosave && $revision->post_modified_gmt === $post->post_modified_gmt; + if ( $current && ! empty( $current_id ) ) { + // If multiple revisions have the same post_modified_gmt, highest ID is current. + if ( $current_id < $revision->ID ) { + $revisions[ $current_id ]['current'] = false; + $current_id = $revision->ID; + } else { + $current = false; + } + } elseif ( $current ) { + $current_id = $revision->ID; + } + + $revisions[ $revision->ID ] = array( + 'id' => $revision->ID, + 'title' => get_the_title( $post->ID ), + 'author' => $authors[ $revision->post_author ], + 'date' => date_i18n( __( 'M j, Y @ G:i' ), $modified ), + 'dateShort' => date_i18n( _x( 'j M @ G:i', 'revision date short format' ), $modified ), + 'timeAgo' => sprintf( __( '%s ago' ), human_time_diff( $modified_gmt, $now_gmt ) ), + 'autosave' => $autosave, + 'current' => $current, + 'restoreUrl' => $can_restore ? $restore_link : false, + ); + } + + // If a post has been saved since the last revision (no revisioned fields were changed) + // we may not have a "current" revision. Mark the latest revision as "current". + if ( empty( $current_id ) ) { + if ( $revisions[ $revision->ID ]['autosave'] ) { + $revision = end( $revisions ); + while ( $revision['autosave'] ) { + $revision = prev( $revisions ); + } + $current_id = $revision['id']; + } else { + $current_id = $revision->ID; + } + $revisions[ $current_id ]['current'] = true; + } + + // Now, grab the initial diff + $compare_two_mode = is_numeric( $from ); + if ( ! $compare_two_mode ) { + $found = array_search( $selected_revision_id, array_keys( $revisions ) ); + if ( $found ) { + $from = array_keys( array_slice( $revisions, $found - 1, 1, true ) ); + $from = reset( $from ); + } else { + $from = 0; + } + } + + $from = absint( $from ); + + $diffs = array( array( + 'id' => $from . ':' . $selected_revision_id, + 'fields' => wp_get_revision_ui_diff( $post->ID, $from, $selected_revision_id ), + )); + + return array( + 'postId' => $post->ID, + 'nonce' => wp_create_nonce( 'revisions-ajax-nonce' ), + 'revisionData' => array_values( $revisions ), + 'to' => $selected_revision_id, + 'from' => $from, + 'diffData' => $diffs, + 'baseUrl' => parse_url( admin_url( 'revision.php' ), PHP_URL_PATH ), + 'compareTwoMode' => absint( $compare_two_mode ), // Apparently booleans are not allowed + 'revisionIds' => array_keys( $revisions ), + ); +} diff --git a/src/wp-admin/includes/schema.php b/src/wp-admin/includes/schema.php new file mode 100644 index 0000000..90ab600 --- /dev/null +++ b/src/wp-admin/includes/schema.php @@ -0,0 +1,1012 @@ +get_charset_collate(); + +/** + * Retrieve the SQL for creating database tables. + * + * @since 3.3.0 + * + * @param string $scope Optional. The tables for which to retrieve SQL. Can be all, global, ms_global, or blog tables. Defaults to all. + * @param int $blog_id Optional. The blog ID for which to retrieve SQL. Default is the current blog ID. + * @return string The SQL needed to create the requested tables. + */ +function wp_get_db_schema( $scope = 'all', $blog_id = null ) { + global $wpdb; + + $charset_collate = ''; + + if ( ! empty($wpdb->charset) ) + $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; + if ( ! empty($wpdb->collate) ) + $charset_collate .= " COLLATE $wpdb->collate"; + + if ( $blog_id && $blog_id != $wpdb->blogid ) + $old_blog_id = $wpdb->set_blog_id( $blog_id ); + + // Engage multisite if in the middle of turning it on from network.php. + $is_multisite = is_multisite() || ( defined( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK ); + + // Blog specific tables. + $blog_tables = "CREATE TABLE $wpdb->terms ( + term_id bigint(20) unsigned NOT NULL auto_increment, + name varchar(200) NOT NULL default '', + slug varchar(200) NOT NULL default '', + term_group bigint(10) NOT NULL default 0, + PRIMARY KEY (term_id), + UNIQUE KEY slug (slug), + KEY name (name) +) $charset_collate; +CREATE TABLE $wpdb->term_taxonomy ( + term_taxonomy_id bigint(20) unsigned NOT NULL auto_increment, + term_id bigint(20) unsigned NOT NULL default 0, + taxonomy varchar(32) NOT NULL default '', + description longtext NOT NULL, + parent bigint(20) unsigned NOT NULL default 0, + count bigint(20) NOT NULL default 0, + PRIMARY KEY (term_taxonomy_id), + UNIQUE KEY term_id_taxonomy (term_id,taxonomy), + KEY taxonomy (taxonomy) +) $charset_collate; +CREATE TABLE $wpdb->term_relationships ( + object_id bigint(20) unsigned NOT NULL default 0, + term_taxonomy_id bigint(20) unsigned NOT NULL default 0, + term_order int(11) NOT NULL default 0, + PRIMARY KEY (object_id,term_taxonomy_id), + KEY term_taxonomy_id (term_taxonomy_id) +) $charset_collate; +CREATE TABLE $wpdb->commentmeta ( + meta_id bigint(20) unsigned NOT NULL auto_increment, + comment_id bigint(20) unsigned NOT NULL default '0', + meta_key varchar(255) default NULL, + meta_value longtext, + PRIMARY KEY (meta_id), + KEY comment_id (comment_id), + KEY meta_key (meta_key) +) $charset_collate; +CREATE TABLE $wpdb->comments ( + comment_ID bigint(20) unsigned NOT NULL auto_increment, + comment_post_ID bigint(20) unsigned NOT NULL default '0', + comment_author tinytext NOT NULL, + comment_author_email varchar(100) NOT NULL default '', + comment_author_url varchar(200) NOT NULL default '', + comment_author_IP varchar(100) NOT NULL default '', + comment_date datetime NOT NULL default '0000-00-00 00:00:00', + comment_date_gmt datetime NOT NULL default '0000-00-00 00:00:00', + comment_content text NOT NULL, + comment_karma int(11) NOT NULL default '0', + comment_approved varchar(20) NOT NULL default '1', + comment_agent varchar(255) NOT NULL default '', + comment_type varchar(20) NOT NULL default '', + comment_parent bigint(20) unsigned NOT NULL default '0', + user_id bigint(20) unsigned NOT NULL default '0', + PRIMARY KEY (comment_ID), + KEY comment_post_ID (comment_post_ID), + KEY comment_approved_date_gmt (comment_approved,comment_date_gmt), + KEY comment_date_gmt (comment_date_gmt), + KEY comment_parent (comment_parent) +) $charset_collate; +CREATE TABLE $wpdb->links ( + link_id bigint(20) unsigned NOT NULL auto_increment, + link_url varchar(255) NOT NULL default '', + link_name varchar(255) NOT NULL default '', + link_image varchar(255) NOT NULL default '', + link_target varchar(25) NOT NULL default '', + link_description varchar(255) NOT NULL default '', + link_visible varchar(20) NOT NULL default 'Y', + link_owner bigint(20) unsigned NOT NULL default '1', + link_rating int(11) NOT NULL default '0', + link_updated datetime NOT NULL default '0000-00-00 00:00:00', + link_rel varchar(255) NOT NULL default '', + link_notes mediumtext NOT NULL, + link_rss varchar(255) NOT NULL default '', + PRIMARY KEY (link_id), + KEY link_visible (link_visible) +) $charset_collate; +CREATE TABLE $wpdb->options ( + option_id bigint(20) unsigned NOT NULL auto_increment, + option_name varchar(64) NOT NULL default '', + option_value longtext NOT NULL, + autoload varchar(20) NOT NULL default 'yes', + PRIMARY KEY (option_id), + UNIQUE KEY option_name (option_name) +) $charset_collate; +CREATE TABLE $wpdb->postmeta ( + meta_id bigint(20) unsigned NOT NULL auto_increment, + post_id bigint(20) unsigned NOT NULL default '0', + meta_key varchar(255) default NULL, + meta_value longtext, + PRIMARY KEY (meta_id), + KEY post_id (post_id), + KEY meta_key (meta_key) +) $charset_collate; +CREATE TABLE $wpdb->posts ( + ID bigint(20) unsigned NOT NULL auto_increment, + post_author bigint(20) unsigned NOT NULL default '0', + post_date datetime NOT NULL default '0000-00-00 00:00:00', + post_date_gmt datetime NOT NULL default '0000-00-00 00:00:00', + post_content longtext NOT NULL, + post_title text NOT NULL, + post_excerpt text NOT NULL, + post_status varchar(20) NOT NULL default 'publish', + comment_status varchar(20) NOT NULL default 'open', + ping_status varchar(20) NOT NULL default 'open', + post_password varchar(20) NOT NULL default '', + post_name varchar(200) NOT NULL default '', + to_ping text NOT NULL, + pinged text NOT NULL, + post_modified datetime NOT NULL default '0000-00-00 00:00:00', + post_modified_gmt datetime NOT NULL default '0000-00-00 00:00:00', + post_content_filtered longtext NOT NULL, + post_parent bigint(20) unsigned NOT NULL default '0', + guid varchar(255) NOT NULL default '', + menu_order int(11) NOT NULL default '0', + post_type varchar(20) NOT NULL default 'post', + post_mime_type varchar(100) NOT NULL default '', + comment_count bigint(20) NOT NULL default '0', + PRIMARY KEY (ID), + KEY post_name (post_name), + KEY type_status_date (post_type,post_status,post_date,ID), + KEY post_parent (post_parent), + KEY post_author (post_author) +) $charset_collate;\n"; + + // Single site users table. The multisite flavor of the users table is handled below. + $users_single_table = "CREATE TABLE $wpdb->users ( + ID bigint(20) unsigned NOT NULL auto_increment, + user_login varchar(60) NOT NULL default '', + user_pass varchar(64) NOT NULL default '', + user_nicename varchar(50) NOT NULL default '', + user_email varchar(100) NOT NULL default '', + user_url varchar(100) NOT NULL default '', + user_registered datetime NOT NULL default '0000-00-00 00:00:00', + user_activation_key varchar(60) NOT NULL default '', + user_status int(11) NOT NULL default '0', + display_name varchar(250) NOT NULL default '', + PRIMARY KEY (ID), + KEY user_login_key (user_login), + KEY user_nicename (user_nicename) +) $charset_collate;\n"; + + // Multisite users table + $users_multi_table = "CREATE TABLE $wpdb->users ( + ID bigint(20) unsigned NOT NULL auto_increment, + user_login varchar(60) NOT NULL default '', + user_pass varchar(64) NOT NULL default '', + user_nicename varchar(50) NOT NULL default '', + user_email varchar(100) NOT NULL default '', + user_url varchar(100) NOT NULL default '', + user_registered datetime NOT NULL default '0000-00-00 00:00:00', + user_activation_key varchar(60) NOT NULL default '', + user_status int(11) NOT NULL default '0', + display_name varchar(250) NOT NULL default '', + spam tinyint(2) NOT NULL default '0', + deleted tinyint(2) NOT NULL default '0', + PRIMARY KEY (ID), + KEY user_login_key (user_login), + KEY user_nicename (user_nicename) +) $charset_collate;\n"; + + // usermeta + $usermeta_table = "CREATE TABLE $wpdb->usermeta ( + umeta_id bigint(20) unsigned NOT NULL auto_increment, + user_id bigint(20) unsigned NOT NULL default '0', + meta_key varchar(255) default NULL, + meta_value longtext, + PRIMARY KEY (umeta_id), + KEY user_id (user_id), + KEY meta_key (meta_key) +) $charset_collate;\n"; + + // Global tables + if ( $is_multisite ) + $global_tables = $users_multi_table . $usermeta_table; + else + $global_tables = $users_single_table . $usermeta_table; + + // Multisite global tables. + $ms_global_tables = "CREATE TABLE $wpdb->blogs ( + blog_id bigint(20) NOT NULL auto_increment, + site_id bigint(20) NOT NULL default '0', + domain varchar(200) NOT NULL default '', + path varchar(100) NOT NULL default '', + registered datetime NOT NULL default '0000-00-00 00:00:00', + last_updated datetime NOT NULL default '0000-00-00 00:00:00', + public tinyint(2) NOT NULL default '1', + archived tinyint(2) NOT NULL default '0', + mature tinyint(2) NOT NULL default '0', + spam tinyint(2) NOT NULL default '0', + deleted tinyint(2) NOT NULL default '0', + lang_id int(11) NOT NULL default '0', + PRIMARY KEY (blog_id), + KEY domain (domain(50),path(5)), + KEY lang_id (lang_id) +) $charset_collate; +CREATE TABLE $wpdb->blog_versions ( + blog_id bigint(20) NOT NULL default '0', + db_version varchar(20) NOT NULL default '', + last_updated datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (blog_id), + KEY db_version (db_version) +) $charset_collate; +CREATE TABLE $wpdb->registration_log ( + ID bigint(20) NOT NULL auto_increment, + email varchar(255) NOT NULL default '', + IP varchar(30) NOT NULL default '', + blog_id bigint(20) NOT NULL default '0', + date_registered datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (ID), + KEY IP (IP) +) $charset_collate; +CREATE TABLE $wpdb->site ( + id bigint(20) NOT NULL auto_increment, + domain varchar(200) NOT NULL default '', + path varchar(100) NOT NULL default '', + PRIMARY KEY (id), + KEY domain (domain,path) +) $charset_collate; +CREATE TABLE $wpdb->sitemeta ( + meta_id bigint(20) NOT NULL auto_increment, + site_id bigint(20) NOT NULL default '0', + meta_key varchar(255) default NULL, + meta_value longtext, + PRIMARY KEY (meta_id), + KEY meta_key (meta_key), + KEY site_id (site_id) +) $charset_collate; +CREATE TABLE $wpdb->signups ( + signup_id bigint(20) NOT NULL auto_increment, + domain varchar(200) NOT NULL default '', + path varchar(100) NOT NULL default '', + title longtext NOT NULL, + user_login varchar(60) NOT NULL default '', + user_email varchar(100) NOT NULL default '', + registered datetime NOT NULL default '0000-00-00 00:00:00', + activated datetime NOT NULL default '0000-00-00 00:00:00', + active tinyint(1) NOT NULL default '0', + activation_key varchar(50) NOT NULL default '', + meta longtext, + PRIMARY KEY (signup_id), + KEY activation_key (activation_key), + KEY user_email (user_email), + KEY user_login_email (user_login,user_email), + KEY domain_path (domain,path) +) $charset_collate;"; + + switch ( $scope ) { + case 'blog' : + $queries = $blog_tables; + break; + case 'global' : + $queries = $global_tables; + if ( $is_multisite ) + $queries .= $ms_global_tables; + break; + case 'ms_global' : + $queries = $ms_global_tables; + break; + default: + case 'all' : + $queries = $global_tables . $blog_tables; + if ( $is_multisite ) + $queries .= $ms_global_tables; + break; + } + + if ( isset( $old_blog_id ) ) + $wpdb->set_blog_id( $old_blog_id ); + + return $queries; +} + +// Populate for back compat. +$wp_queries = wp_get_db_schema( 'all' ); + +/** + * Create WordPress options and set the default values. + * + * @since 1.5.0 + * @uses $wpdb + * @uses $wp_db_version + */ +function populate_options() { + global $wpdb, $wp_db_version, $wp_current_db_version; + + $guessurl = wp_guess_url(); + /** + * Fires before creating WordPress options and populating their default values. + * + * @since 2.6.0 + */ + do_action( 'populate_options' ); + + if ( ini_get('safe_mode') ) { + // Safe mode can break mkdir() so use a flat structure by default. + $uploads_use_yearmonth_folders = 0; + } else { + $uploads_use_yearmonth_folders = 1; + } + + $template = WP_DEFAULT_THEME; + // If default theme is a child theme, we need to get its template + $theme = wp_get_theme( $template ); + if ( ! $theme->errors() ) + $template = $theme->get_template(); + + $timezone_string = ''; + $gmt_offset = 0; + /* translators: default GMT offset or timezone string. Must be either a valid offset (-12 to 14) + or a valid timezone string (America/New_York). See http://us3.php.net/manual/en/timezones.php + for all timezone strings supported by PHP. + */ + $offset_or_tz = _x( '0', 'default GMT offset or timezone string' ); + if ( is_numeric( $offset_or_tz ) ) + $gmt_offset = $offset_or_tz; + elseif ( $offset_or_tz && in_array( $offset_or_tz, timezone_identifiers_list() ) ) + $timezone_string = $offset_or_tz; + + $options = array( + 'siteurl' => $guessurl, + 'blogname' => __('My Site'), + /* translators: blog tagline */ + 'blogdescription' => __('Just another WordPress site'), + 'users_can_register' => 0, + 'admin_email' => 'you@example.com', + /* translators: default start of the week. 0 = Sunday, 1 = Monday */ + 'start_of_week' => _x( '1', 'start of week' ), + 'use_balanceTags' => 0, + 'use_smilies' => 1, + 'require_name_email' => 1, + 'comments_notify' => 1, + 'posts_per_rss' => 10, + 'rss_use_excerpt' => 0, + 'mailserver_url' => 'mail.example.com', + 'mailserver_login' => 'login@example.com', + 'mailserver_pass' => 'password', + 'mailserver_port' => 110, + 'default_category' => 1, + 'default_comment_status' => 'open', + 'default_ping_status' => 'open', + 'default_pingback_flag' => 1, + 'posts_per_page' => 10, + /* translators: default date format, see http://php.net/date */ + 'date_format' => __('F j, Y'), + /* translators: default time format, see http://php.net/date */ + 'time_format' => __('g:i a'), + /* translators: links last updated date format, see http://php.net/date */ + 'links_updated_date_format' => __('F j, Y g:i a'), + 'links_recently_updated_prepend' => '', + 'links_recently_updated_append' => '', + 'links_recently_updated_time' => 120, + 'comment_moderation' => 0, + 'moderation_notify' => 1, + 'permalink_structure' => '', + 'gzipcompression' => 0, + 'hack_file' => 0, + 'blog_charset' => 'UTF-8', + 'moderation_keys' => '', + 'active_plugins' => array(), + 'home' => $guessurl, + 'category_base' => '', + 'ping_sites' => 'http://rpc.pingomatic.com/', + 'advanced_edit' => 0, + 'comment_max_links' => 2, + 'gmt_offset' => $gmt_offset, + + // 1.5 + 'default_email_category' => 1, + 'recently_edited' => '', + 'template' => $template, + 'stylesheet' => WP_DEFAULT_THEME, + 'comment_whitelist' => 1, + 'blacklist_keys' => '', + 'comment_registration' => 0, + 'html_type' => 'text/html', + + // 1.5.1 + 'use_trackback' => 0, + + // 2.0 + 'default_role' => 'subscriber', + 'db_version' => $wp_db_version, + + // 2.0.1 + 'uploads_use_yearmonth_folders' => $uploads_use_yearmonth_folders, + 'upload_path' => '', + + // 2.1 + 'blog_public' => '1', + 'default_link_category' => 2, + 'show_on_front' => 'posts', + + // 2.2 + 'tag_base' => '', + + // 2.5 + 'show_avatars' => '1', + 'avatar_rating' => 'G', + 'upload_url_path' => '', + 'thumbnail_size_w' => 150, + 'thumbnail_size_h' => 150, + 'thumbnail_crop' => 1, + 'medium_size_w' => 300, + 'medium_size_h' => 300, + + // 2.6 + 'avatar_default' => 'mystery', + + // 2.7 + 'large_size_w' => 1024, + 'large_size_h' => 1024, + 'image_default_link_type' => 'file', + 'image_default_size' => '', + 'image_default_align' => '', + 'close_comments_for_old_posts' => 0, + 'close_comments_days_old' => 14, + 'thread_comments' => 1, + 'thread_comments_depth' => 5, + 'page_comments' => 0, + 'comments_per_page' => 50, + 'default_comments_page' => 'newest', + 'comment_order' => 'asc', + 'sticky_posts' => array(), + 'widget_categories' => array(), + 'widget_text' => array(), + 'widget_rss' => array(), + 'uninstall_plugins' => array(), + + // 2.8 + 'timezone_string' => $timezone_string, + + // 3.0 + 'page_for_posts' => 0, + 'page_on_front' => 0, + + // 3.1 + 'default_post_format' => 0, + + // 3.5 + 'link_manager_enabled' => 0, + ); + + // 3.3 + if ( ! is_multisite() ) { + $options['initial_db_version'] = ! empty( $wp_current_db_version ) && $wp_current_db_version < $wp_db_version + ? $wp_current_db_version : $wp_db_version; + } + + // 3.0 multisite + if ( is_multisite() ) { + /* translators: blog tagline */ + $options[ 'blogdescription' ] = sprintf(__('Just another %s site'), get_current_site()->site_name ); + $options[ 'permalink_structure' ] = '/%year%/%monthnum%/%day%/%postname%/'; + } + + // Set autoload to no for these options + $fat_options = array( 'moderation_keys', 'recently_edited', 'blacklist_keys', 'uninstall_plugins' ); + + $keys = "'" . implode( "', '", array_keys( $options ) ) . "'"; + $existing_options = $wpdb->get_col( "SELECT option_name FROM $wpdb->options WHERE option_name in ( $keys )" ); + + $insert = ''; + foreach ( $options as $option => $value ) { + if ( in_array($option, $existing_options) ) + continue; + if ( in_array($option, $fat_options) ) + $autoload = 'no'; + else + $autoload = 'yes'; + + if ( is_array($value) ) + $value = serialize($value); + if ( !empty($insert) ) + $insert .= ', '; + $insert .= $wpdb->prepare( "(%s, %s, %s)", $option, $value, $autoload ); + } + + if ( !empty($insert) ) + $wpdb->query("INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES " . $insert); + + // in case it is set, but blank, update "home" + if ( !__get_option('home') ) update_option('home', $guessurl); + + // Delete unused options + $unusedoptions = array( + 'blodotgsping_url', 'bodyterminator', 'emailtestonly', 'phoneemail_separator', 'smilies_directory', + 'subjectprefix', 'use_bbcode', 'use_blodotgsping', 'use_phoneemail', 'use_quicktags', 'use_weblogsping', + 'weblogs_cache_file', 'use_preview', 'use_htmltrans', 'smilies_directory', 'fileupload_allowedusers', + 'use_phoneemail', 'default_post_status', 'default_post_category', 'archive_mode', 'time_difference', + 'links_minadminlevel', 'links_use_adminlevels', 'links_rating_type', 'links_rating_char', + 'links_rating_ignore_zero', 'links_rating_single_image', 'links_rating_image0', 'links_rating_image1', + 'links_rating_image2', 'links_rating_image3', 'links_rating_image4', 'links_rating_image5', + 'links_rating_image6', 'links_rating_image7', 'links_rating_image8', 'links_rating_image9', + 'weblogs_cacheminutes', 'comment_allowed_tags', 'search_engine_friendly_urls', 'default_geourl_lat', + 'default_geourl_lon', 'use_default_geourl', 'weblogs_xml_url', 'new_users_can_blog', '_wpnonce', + '_wp_http_referer', 'Update', 'action', 'rich_editing', 'autosave_interval', 'deactivated_plugins', + 'can_compress_scripts', 'page_uris', 'update_core', 'update_plugins', 'update_themes', 'doing_cron', + 'random_seed', 'rss_excerpt_length', 'secret', 'use_linksupdate', 'default_comment_status_page', + 'wporg_popular_tags', 'what_to_show', 'rss_language', 'language', 'enable_xmlrpc', 'enable_app', + 'embed_autourls', 'default_post_edit_rows', + ); + foreach ( $unusedoptions as $option ) + delete_option($option); + + // delete obsolete magpie stuff + $wpdb->query("DELETE FROM $wpdb->options WHERE option_name REGEXP '^rss_[0-9a-f]{32}(_ts)?$'"); + + // Deletes all expired transients. + // The multi-table delete syntax is used to delete the transient record from table a, + // and the corresponding transient_timeout record from table b. + $time = time(); + $wpdb->query("DELETE a, b FROM $wpdb->options a, $wpdb->options b WHERE + a.option_name LIKE '\_transient\_%' AND + a.option_name NOT LIKE '\_transient\_timeout\_%' AND + b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) ) + AND b.option_value < $time"); + + if ( is_main_site() && is_main_network() ) { + $wpdb->query("DELETE a, b FROM $wpdb->options a, $wpdb->options b WHERE + a.option_name LIKE '\_site\_transient\_%' AND + a.option_name NOT LIKE '\_site\_transient\_timeout\_%' AND + b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) ) + AND b.option_value < $time"); + } +} + +/** + * Execute WordPress role creation for the various WordPress versions. + * + * @since 2.0.0 + */ +function populate_roles() { + populate_roles_160(); + populate_roles_210(); + populate_roles_230(); + populate_roles_250(); + populate_roles_260(); + populate_roles_270(); + populate_roles_280(); + populate_roles_300(); +} + +/** + * Create the roles for WordPress 2.0 + * + * @since 2.0.0 + */ +function populate_roles_160() { + // Add roles + + // Dummy gettext calls to get strings in the catalog. + /* translators: user role */ + _x('Administrator', 'User role'); + /* translators: user role */ + _x('Editor', 'User role'); + /* translators: user role */ + _x('Author', 'User role'); + /* translators: user role */ + _x('Contributor', 'User role'); + /* translators: user role */ + _x('Subscriber', 'User role'); + + add_role('administrator', 'Administrator'); + add_role('editor', 'Editor'); + add_role('author', 'Author'); + add_role('contributor', 'Contributor'); + add_role('subscriber', 'Subscriber'); + + // Add caps for Administrator role + $role = get_role('administrator'); + $role->add_cap('switch_themes'); + $role->add_cap('edit_themes'); + $role->add_cap('activate_plugins'); + $role->add_cap('edit_plugins'); + $role->add_cap('edit_users'); + $role->add_cap('edit_files'); + $role->add_cap('manage_options'); + $role->add_cap('moderate_comments'); + $role->add_cap('manage_categories'); + $role->add_cap('manage_links'); + $role->add_cap('upload_files'); + $role->add_cap('import'); + $role->add_cap('unfiltered_html'); + $role->add_cap('edit_posts'); + $role->add_cap('edit_others_posts'); + $role->add_cap('edit_published_posts'); + $role->add_cap('publish_posts'); + $role->add_cap('edit_pages'); + $role->add_cap('read'); + $role->add_cap('level_10'); + $role->add_cap('level_9'); + $role->add_cap('level_8'); + $role->add_cap('level_7'); + $role->add_cap('level_6'); + $role->add_cap('level_5'); + $role->add_cap('level_4'); + $role->add_cap('level_3'); + $role->add_cap('level_2'); + $role->add_cap('level_1'); + $role->add_cap('level_0'); + + // Add caps for Editor role + $role = get_role('editor'); + $role->add_cap('moderate_comments'); + $role->add_cap('manage_categories'); + $role->add_cap('manage_links'); + $role->add_cap('upload_files'); + $role->add_cap('unfiltered_html'); + $role->add_cap('edit_posts'); + $role->add_cap('edit_others_posts'); + $role->add_cap('edit_published_posts'); + $role->add_cap('publish_posts'); + $role->add_cap('edit_pages'); + $role->add_cap('read'); + $role->add_cap('level_7'); + $role->add_cap('level_6'); + $role->add_cap('level_5'); + $role->add_cap('level_4'); + $role->add_cap('level_3'); + $role->add_cap('level_2'); + $role->add_cap('level_1'); + $role->add_cap('level_0'); + + // Add caps for Author role + $role = get_role('author'); + $role->add_cap('upload_files'); + $role->add_cap('edit_posts'); + $role->add_cap('edit_published_posts'); + $role->add_cap('publish_posts'); + $role->add_cap('read'); + $role->add_cap('level_2'); + $role->add_cap('level_1'); + $role->add_cap('level_0'); + + // Add caps for Contributor role + $role = get_role('contributor'); + $role->add_cap('edit_posts'); + $role->add_cap('read'); + $role->add_cap('level_1'); + $role->add_cap('level_0'); + + // Add caps for Subscriber role + $role = get_role('subscriber'); + $role->add_cap('read'); + $role->add_cap('level_0'); +} + +/** + * Create and modify WordPress roles for WordPress 2.1. + * + * @since 2.1.0 + */ +function populate_roles_210() { + $roles = array('administrator', 'editor'); + foreach ($roles as $role) { + $role = get_role($role); + if ( empty($role) ) + continue; + + $role->add_cap('edit_others_pages'); + $role->add_cap('edit_published_pages'); + $role->add_cap('publish_pages'); + $role->add_cap('delete_pages'); + $role->add_cap('delete_others_pages'); + $role->add_cap('delete_published_pages'); + $role->add_cap('delete_posts'); + $role->add_cap('delete_others_posts'); + $role->add_cap('delete_published_posts'); + $role->add_cap('delete_private_posts'); + $role->add_cap('edit_private_posts'); + $role->add_cap('read_private_posts'); + $role->add_cap('delete_private_pages'); + $role->add_cap('edit_private_pages'); + $role->add_cap('read_private_pages'); + } + + $role = get_role('administrator'); + if ( ! empty($role) ) { + $role->add_cap('delete_users'); + $role->add_cap('create_users'); + } + + $role = get_role('author'); + if ( ! empty($role) ) { + $role->add_cap('delete_posts'); + $role->add_cap('delete_published_posts'); + } + + $role = get_role('contributor'); + if ( ! empty($role) ) { + $role->add_cap('delete_posts'); + } +} + +/** + * Create and modify WordPress roles for WordPress 2.3. + * + * @since 2.3.0 + */ +function populate_roles_230() { + $role = get_role( 'administrator' ); + + if ( !empty( $role ) ) { + $role->add_cap( 'unfiltered_upload' ); + } +} + +/** + * Create and modify WordPress roles for WordPress 2.5. + * + * @since 2.5.0 + */ +function populate_roles_250() { + $role = get_role( 'administrator' ); + + if ( !empty( $role ) ) { + $role->add_cap( 'edit_dashboard' ); + } +} + +/** + * Create and modify WordPress roles for WordPress 2.6. + * + * @since 2.6.0 + */ +function populate_roles_260() { + $role = get_role( 'administrator' ); + + if ( !empty( $role ) ) { + $role->add_cap( 'update_plugins' ); + $role->add_cap( 'delete_plugins' ); + } +} + +/** + * Create and modify WordPress roles for WordPress 2.7. + * + * @since 2.7.0 + */ +function populate_roles_270() { + $role = get_role( 'administrator' ); + + if ( !empty( $role ) ) { + $role->add_cap( 'install_plugins' ); + $role->add_cap( 'update_themes' ); + } +} + +/** + * Create and modify WordPress roles for WordPress 2.8. + * + * @since 2.8.0 + */ +function populate_roles_280() { + $role = get_role( 'administrator' ); + + if ( !empty( $role ) ) { + $role->add_cap( 'install_themes' ); + } +} + +/** + * Create and modify WordPress roles for WordPress 3.0. + * + * @since 3.0.0 + */ +function populate_roles_300() { + $role = get_role( 'administrator' ); + + if ( !empty( $role ) ) { + $role->add_cap( 'update_core' ); + $role->add_cap( 'list_users' ); + $role->add_cap( 'remove_users' ); + + // Never used, will be removed. create_users or + // promote_users is the capability you're looking for. + $role->add_cap( 'add_users' ); + + $role->add_cap( 'promote_users' ); + $role->add_cap( 'edit_theme_options' ); + $role->add_cap( 'delete_themes' ); + $role->add_cap( 'export' ); + } +} + +/** + * Install Network. + * + * @since 3.0.0 + * + */ +if ( !function_exists( 'install_network' ) ) : +function install_network() { + if ( ! defined( 'WP_INSTALLING_NETWORK' ) ) + define( 'WP_INSTALLING_NETWORK', true ); + + dbDelta( wp_get_db_schema( 'global' ) ); +} +endif; + +/** + * Populate network settings. + * + * @since 3.0.0 + * + * @param int $network_id ID of network to populate. + * @return bool|WP_Error True on success, or WP_Error on warning (with the install otherwise successful, + * so the error code must be checked) or failure. + */ +function populate_network( $network_id = 1, $domain = '', $email = '', $site_name = '', $path = '/', $subdomain_install = false ) { + global $wpdb, $current_site, $wp_db_version, $wp_rewrite; + + $errors = new WP_Error(); + if ( '' == $domain ) + $errors->add( 'empty_domain', __( 'You must provide a domain name.' ) ); + if ( '' == $site_name ) + $errors->add( 'empty_sitename', __( 'You must provide a name for your network of sites.' ) ); + + // check for network collision + if ( $network_id == $wpdb->get_var( $wpdb->prepare( "SELECT id FROM $wpdb->site WHERE id = %d", $network_id ) ) ) + $errors->add( 'siteid_exists', __( 'The network already exists.' ) ); + + $site_user = get_user_by( 'email', $email ); + if ( ! is_email( $email ) ) + $errors->add( 'invalid_email', __( 'You must provide a valid e-mail address.' ) ); + + if ( $errors->get_error_code() ) + return $errors; + + // set up site tables + $template = get_option( 'template' ); + $stylesheet = get_option( 'stylesheet' ); + $allowed_themes = array( $stylesheet => true ); + if ( $template != $stylesheet ) + $allowed_themes[ $template ] = true; + if ( WP_DEFAULT_THEME != $stylesheet && WP_DEFAULT_THEME != $template ) + $allowed_themes[ WP_DEFAULT_THEME ] = true; + + if ( 1 == $network_id ) { + $wpdb->insert( $wpdb->site, array( 'domain' => $domain, 'path' => $path ) ); + $network_id = $wpdb->insert_id; + } else { + $wpdb->insert( $wpdb->site, array( 'domain' => $domain, 'path' => $path, 'id' => $network_id ) ); + } + + if ( !is_multisite() ) { + $site_admins = array( $site_user->user_login ); + $users = get_users( array( 'fields' => array( 'ID', 'user_login' ) ) ); + if ( $users ) { + foreach ( $users as $user ) { + if ( is_super_admin( $user->ID ) && !in_array( $user->user_login, $site_admins ) ) + $site_admins[] = $user->user_login; + } + } + } else { + $site_admins = get_site_option( 'site_admins' ); + } + + $welcome_email = __( 'Dear User, + +Your new SITE_NAME site has been successfully set up at: +BLOG_URL + +You can log in to the administrator account with the following information: +Username: USERNAME +Password: PASSWORD +Log in here: BLOG_URLwp-login.php + +We hope you enjoy your new site. Thanks! + +--The Team @ SITE_NAME' ); + + $sitemeta = array( + 'site_name' => $site_name, + 'admin_email' => $site_user->user_email, + 'admin_user_id' => $site_user->ID, + 'registration' => 'none', + 'upload_filetypes' => 'jpg jpeg png gif mp3 mov avi wmv midi mid pdf', + 'blog_upload_space' => 100, + 'fileupload_maxk' => 1500, + 'site_admins' => $site_admins, + 'allowedthemes' => $allowed_themes, + 'illegal_names' => array( 'www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'files' ), + 'wpmu_upgrade_site' => $wp_db_version, + 'welcome_email' => $welcome_email, + 'first_post' => __( 'Welcome to SITE_NAME. This is your first post. Edit or delete it, then start blogging!' ), + // @todo - network admins should have a method of editing the network siteurl (used for cookie hash) + 'siteurl' => get_option( 'siteurl' ) . '/', + 'add_new_users' => '0', + 'upload_space_check_disabled' => is_multisite() ? get_site_option( 'upload_space_check_disabled' ) : '1', + 'subdomain_install' => intval( $subdomain_install ), + 'global_terms_enabled' => global_terms_enabled() ? '1' : '0', + 'ms_files_rewriting' => is_multisite() ? get_site_option( 'ms_files_rewriting' ) : '0', + 'initial_db_version' => get_option( 'initial_db_version' ), + 'active_sitewide_plugins' => array(), + 'WPLANG' => get_locale(), + ); + if ( ! $subdomain_install ) + $sitemeta['illegal_names'][] = 'blog'; + + /** + * Filter meta for a network on creation. + * + * @since 3.7.0 + * + * @param array $sitemeta Associative array of network meta keys and values to be inserted. + * @param int $network_id ID of network to populate. + */ + $sitemeta = apply_filters( 'populate_network_meta', $sitemeta, $network_id ); + + $insert = ''; + foreach ( $sitemeta as $meta_key => $meta_value ) { + if ( is_array( $meta_value ) ) + $meta_value = serialize( $meta_value ); + if ( !empty( $insert ) ) + $insert .= ', '; + $insert .= $wpdb->prepare( "( %d, %s, %s)", $network_id, $meta_key, $meta_value ); + } + $wpdb->query( "INSERT INTO $wpdb->sitemeta ( site_id, meta_key, meta_value ) VALUES " . $insert ); + + // When upgrading from single to multisite, assume the current site will become the main site of the network. + // When using populate_network() to create another network in an existing multisite environment, + // skip these steps since the main site of the new network has not yet been created. + if ( ! is_multisite() ) { + $current_site = new stdClass; + $current_site->domain = $domain; + $current_site->path = $path; + $current_site->site_name = ucfirst( $domain ); + $wpdb->insert( $wpdb->blogs, array( 'site_id' => $network_id, 'blog_id' => 1, 'domain' => $domain, 'path' => $path, 'registered' => current_time( 'mysql' ) ) ); + $current_site->blog_id = $blog_id = $wpdb->insert_id; + update_user_meta( $site_user->ID, 'source_domain', $domain ); + update_user_meta( $site_user->ID, 'primary_blog', $blog_id ); + + if ( $subdomain_install ) + $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%day%/%postname%/' ); + else + $wp_rewrite->set_permalink_structure( '/blog/%year%/%monthnum%/%day%/%postname%/' ); + + flush_rewrite_rules(); + + if ( ! $subdomain_install ) + return true; + + $vhost_ok = false; + $errstr = ''; + $hostname = substr( md5( time() ), 0, 6 ) . '.' . $domain; // Very random hostname! + $page = wp_remote_get( 'http://' . $hostname, array( 'timeout' => 5, 'httpversion' => '1.1' ) ); + if ( is_wp_error( $page ) ) + $errstr = $page->get_error_message(); + elseif ( 200 == wp_remote_retrieve_response_code( $page ) ) + $vhost_ok = true; + + if ( ! $vhost_ok ) { + $msg = '

    ' . __( 'Warning! Wildcard DNS may not be configured correctly!' ) . '

    '; + $msg .= '

    ' . sprintf( __( 'The installer attempted to contact a random hostname (%1$s) on your domain.' ), $hostname ); + if ( ! empty ( $errstr ) ) + $msg .= ' ' . sprintf( __( 'This resulted in an error message: %s' ), '' . $errstr . '' ); + $msg .= '

    '; + $msg .= '

    ' . __( 'To use a subdomain configuration, you must have a wildcard entry in your DNS. This usually means adding a * hostname record pointing at your web server in your DNS configuration tool.' ) . '

    '; + $msg .= '

    ' . __( 'You can still use your site but any subdomain you create may not be accessible. If you know your DNS is correct, ignore this message.' ) . '

    '; + return new WP_Error( 'no_wildcard_dns', $msg ); + } + } + + return true; +} diff --git a/src/wp-admin/includes/screen.php b/src/wp-admin/includes/screen.php new file mode 100644 index 0000000..85ab712 --- /dev/null +++ b/src/wp-admin/includes/screen.php @@ -0,0 +1,1064 @@ + UI String + */ +function get_column_headers( $screen ) { + if ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + static $column_headers = array(); + + if ( ! isset( $column_headers[ $screen->id ] ) ) + $column_headers[ $screen->id ] = apply_filters( 'manage_' . $screen->id . '_columns', array() ); + + return $column_headers[ $screen->id ]; +} + +/** + * Get a list of hidden columns. + * + * @since 2.7.0 + * + * @param string|WP_Screen $screen The screen you want the hidden columns for + * @return array + */ +function get_hidden_columns( $screen ) { + if ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + return (array) get_user_option( 'manage' . $screen->id . 'columnshidden' ); +} + +/** + * Prints the meta box preferences for screen meta. + * + * @since 2.7.0 + * + * @param string|WP_Screen $screen + */ +function meta_box_prefs( $screen ) { + global $wp_meta_boxes; + + if ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + if ( empty($wp_meta_boxes[$screen->id]) ) + return; + + $hidden = get_hidden_meta_boxes($screen); + + foreach ( array_keys($wp_meta_boxes[$screen->id]) as $context ) { + foreach ( array_keys($wp_meta_boxes[$screen->id][$context]) as $priority ) { + foreach ( $wp_meta_boxes[$screen->id][$context][$priority] as $box ) { + if ( false == $box || ! $box['title'] ) + continue; + // Submit box cannot be hidden + if ( 'submitdiv' == $box['id'] || 'linksubmitdiv' == $box['id'] ) + continue; + $box_id = $box['id']; + echo '\n"; + } + } + } +} + +/** + * Get Hidden Meta Boxes + * + * @since 2.7.0 + * + * @param string|WP_Screen $screen Screen identifier + * @return array Hidden Meta Boxes + */ +function get_hidden_meta_boxes( $screen ) { + if ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + $hidden = get_user_option( "metaboxhidden_{$screen->id}" ); + + $use_defaults = ! is_array( $hidden ); + + // Hide slug boxes by default + if ( $use_defaults ) { + $hidden = array(); + if ( 'post' == $screen->base ) { + if ( 'post' == $screen->post_type || 'page' == $screen->post_type || 'attachment' == $screen->post_type ) + $hidden = array('slugdiv', 'trackbacksdiv', 'postcustom', 'postexcerpt', 'commentstatusdiv', 'commentsdiv', 'authordiv', 'revisionsdiv'); + else + $hidden = array( 'slugdiv' ); + } + $hidden = apply_filters( 'default_hidden_meta_boxes', $hidden, $screen ); + } + + return apply_filters( 'hidden_meta_boxes', $hidden, $screen, $use_defaults ); +} + +/** + * Register and configure an admin screen option + * + * @since 3.1.0 + * + * @param string $option An option name. + * @param mixed $args Option-dependent arguments. + */ +function add_screen_option( $option, $args = array() ) { + $current_screen = get_current_screen(); + + if ( ! $current_screen ) + return; + + $current_screen->add_option( $option, $args ); +} + +/** + * Get the current screen object + * + * @since 3.1.0 + * + * @return WP_Screen Current screen object + */ +function get_current_screen() { + global $current_screen; + + if ( ! isset( $current_screen ) ) + return null; + + return $current_screen; +} + +/** + * Set the current screen object + * + * @since 3.0.0 + * @uses $current_screen + * + * @param mixed $hook_name Optional. The hook name (also known as the hook suffix) used to determine the screen, + * or an existing screen object. + */ +function set_current_screen( $hook_name = '' ) { + WP_Screen::get( $hook_name )->set_current_screen(); +} + +/** + * A class representing the admin screen. + * + * @since 3.3.0 + * @access public + */ +final class WP_Screen { + /** + * Any action associated with the screen. 'add' for *-add.php and *-new.php screens. Empty otherwise. + * + * @since 3.3.0 + * @var string + * @access public + */ + public $action; + + /** + * The base type of the screen. This is typically the same as $id but with any post types and taxonomies stripped. + * For example, for an $id of 'edit-post' the base is 'edit'. + * + * @since 3.3.0 + * @var string + * @access public + */ + public $base; + + /** + * The number of columns to display. Access with get_columns(). + * + * @since 3.4.0 + * @var int + * @access private + */ + private $columns = 0; + + /** + * The unique ID of the screen. + * + * @since 3.3.0 + * @var string + * @access public + */ + public $id; + + /** + * Which admin the screen is in. network | user | site | false + * + * @since 3.5.0 + * @var string + * @access protected + */ + protected $in_admin; + + /** + * Whether the screen is in the network admin. + * + * Deprecated. Use in_admin() instead. + * + * @since 3.3.0 + * @deprecated 3.5.0 + * @var bool + * @access public + */ + public $is_network; + + /** + * Whether the screen is in the user admin. + * + * Deprecated. Use in_admin() instead. + * + * @since 3.3.0 + * @deprecated 3.5.0 + * @var bool + * @access public + */ + public $is_user; + + /** + * The base menu parent. + * This is derived from $parent_file by removing the query string and any .php extension. + * $parent_file values of 'edit.php?post_type=page' and 'edit.php?post_type=post' have a $parent_base of 'edit'. + * + * @since 3.3.0 + * @var string + * @access public + */ + public $parent_base; + + /** + * The parent_file for the screen per the admin menu system. + * Some $parent_file values are 'edit.php?post_type=page', 'edit.php', and 'options-general.php'. + * + * @since 3.3.0 + * @var string + * @access public + */ + public $parent_file; + + /** + * The post type associated with the screen, if any. + * The 'edit.php?post_type=page' screen has a post type of 'page'. + * The 'edit-tags.php?taxonomy=$taxonomy&post_type=page' screen has a post type of 'page'. + * + * @since 3.3.0 + * @var string + * @access public + */ + public $post_type; + + /** + * The taxonomy associated with the screen, if any. + * The 'edit-tags.php?taxonomy=category' screen has a taxonomy of 'category'. + * @since 3.3.0 + * @var string + * @access public + */ + public $taxonomy; + + /** + * The help tab data associated with the screen, if any. + * + * @since 3.3.0 + * @var array + * @access private + */ + private $_help_tabs = array(); + + /** + * The help sidebar data associated with screen, if any. + * + * @since 3.3.0 + * @var string + * @access private + */ + private $_help_sidebar = ''; + + /** + * Stores old string-based help. + */ + private static $_old_compat_help = array(); + + /** + * The screen options associated with screen, if any. + * + * @since 3.3.0 + * @var array + * @access private + */ + private $_options = array(); + + /** + * The screen object registry. + * + * @since 3.3.0 + * @var array + * @access private + */ + private static $_registry = array(); + + /** + * Stores the result of the public show_screen_options function. + * + * @since 3.3.0 + * @var bool + * @access private + */ + private $_show_screen_options; + + /** + * Stores the 'screen_settings' section of screen options. + * + * @since 3.3.0 + * @var string + * @access private + */ + private $_screen_settings; + + /** + * Fetches a screen object. + * + * @since 3.3.0 + * @access public + * + * @param string $hook_name Optional. The hook name (also known as the hook suffix) used to determine the screen. + * Defaults to the current $hook_suffix global. + * @return WP_Screen Screen object. + */ + public static function get( $hook_name = '' ) { + + if ( is_a( $hook_name, 'WP_Screen' ) ) + return $hook_name; + + $post_type = $taxonomy = null; + $in_admin = false; + $action = ''; + + if ( $hook_name ) + $id = $hook_name; + else + $id = $GLOBALS['hook_suffix']; + + // For those pesky meta boxes. + if ( $hook_name && post_type_exists( $hook_name ) ) { + $post_type = $id; + $id = 'post'; // changes later. ends up being $base. + } else { + if ( '.php' == substr( $id, -4 ) ) + $id = substr( $id, 0, -4 ); + + if ( 'post-new' == $id || 'link-add' == $id || 'media-new' == $id || 'user-new' == $id ) { + $id = substr( $id, 0, -4 ); + $action = 'add'; + } + } + + if ( ! $post_type && $hook_name ) { + if ( '-network' == substr( $id, -8 ) ) { + $id = substr( $id, 0, -8 ); + $in_admin = 'network'; + } elseif ( '-user' == substr( $id, -5 ) ) { + $id = substr( $id, 0, -5 ); + $in_admin = 'user'; + } + + $id = sanitize_key( $id ); + if ( 'edit-comments' != $id && 'edit-tags' != $id && 'edit-' == substr( $id, 0, 5 ) ) { + $maybe = substr( $id, 5 ); + if ( taxonomy_exists( $maybe ) ) { + $id = 'edit-tags'; + $taxonomy = $maybe; + } elseif ( post_type_exists( $maybe ) ) { + $id = 'edit'; + $post_type = $maybe; + } + } + + if ( ! $in_admin ) + $in_admin = 'site'; + } else { + if ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) + $in_admin = 'network'; + elseif ( defined( 'WP_USER_ADMIN' ) && WP_USER_ADMIN ) + $in_admin = 'user'; + else + $in_admin = 'site'; + } + + if ( 'index' == $id ) + $id = 'dashboard'; + elseif ( 'front' == $id ) + $in_admin = false; + + $base = $id; + + // If this is the current screen, see if we can be more accurate for post types and taxonomies. + if ( ! $hook_name ) { + if ( isset( $_REQUEST['post_type'] ) ) + $post_type = post_type_exists( $_REQUEST['post_type'] ) ? $_REQUEST['post_type'] : false; + if ( isset( $_REQUEST['taxonomy'] ) ) + $taxonomy = taxonomy_exists( $_REQUEST['taxonomy'] ) ? $_REQUEST['taxonomy'] : false; + + switch ( $base ) { + case 'post' : + if ( isset( $_GET['post'] ) ) + $post_id = (int) $_GET['post']; + elseif ( isset( $_POST['post_ID'] ) ) + $post_id = (int) $_POST['post_ID']; + else + $post_id = 0; + + if ( $post_id ) { + $post = get_post( $post_id ); + if ( $post ) + $post_type = $post->post_type; + } + break; + case 'edit-tags' : + if ( null === $post_type && is_object_in_taxonomy( 'post', $taxonomy ? $taxonomy : 'post_tag' ) ) + $post_type = 'post'; + break; + } + } + + switch ( $base ) { + case 'post' : + if ( null === $post_type ) + $post_type = 'post'; + $id = $post_type; + break; + case 'edit' : + if ( null === $post_type ) + $post_type = 'post'; + $id .= '-' . $post_type; + break; + case 'edit-tags' : + if ( null === $taxonomy ) + $taxonomy = 'post_tag'; + // The edit-tags ID does not contain the post type. Look for it in the request. + if ( null === $post_type ) { + $post_type = 'post'; + if ( isset( $_REQUEST['post_type'] ) && post_type_exists( $_REQUEST['post_type'] ) ) + $post_type = $_REQUEST['post_type']; + } + + $id = 'edit-' . $taxonomy; + break; + } + + if ( 'network' == $in_admin ) { + $id .= '-network'; + $base .= '-network'; + } elseif ( 'user' == $in_admin ) { + $id .= '-user'; + $base .= '-user'; + } + + if ( isset( self::$_registry[ $id ] ) ) { + $screen = self::$_registry[ $id ]; + if ( $screen === get_current_screen() ) + return $screen; + } else { + $screen = new WP_Screen(); + $screen->id = $id; + } + + $screen->base = $base; + $screen->action = $action; + $screen->post_type = (string) $post_type; + $screen->taxonomy = (string) $taxonomy; + $screen->is_user = ( 'user' == $in_admin ); + $screen->is_network = ( 'network' == $in_admin ); + $screen->in_admin = $in_admin; + + self::$_registry[ $id ] = $screen; + + return $screen; + } + + /** + * Makes the screen object the current screen. + * + * @see set_current_screen() + * @since 3.3.0 + */ + function set_current_screen() { + global $current_screen, $taxnow, $typenow; + $current_screen = $this; + $taxnow = $this->taxonomy; + $typenow = $this->post_type; + do_action( 'current_screen', $current_screen ); + } + + /** + * Constructor + * + * @since 3.3.0 + * @access private + */ + private function __construct() {} + + /** + * Indicates whether the screen is in a particular admin + * + * @since 3.5.0 + * + * @param string $admin The admin to check against (network | user | site). + * If empty any of the three admins will result in true. + * @return boolean True if the screen is in the indicated admin, false otherwise. + * + */ + public function in_admin( $admin = null ) { + if ( empty( $admin ) ) + return (bool) $this->in_admin; + + return ( $admin == $this->in_admin ); + } + + /** + * Sets the old string-based contextual help for the screen. + * + * For backwards compatibility. + * + * @since 3.3.0 + * + * @param WP_Screen $screen A screen object. + * @param string $help Help text. + */ + static function add_old_compat_help( $screen, $help ) { + self::$_old_compat_help[ $screen->id ] = $help; + } + + /** + * Set the parent information for the screen. + * This is called in admin-header.php after the menu parent for the screen has been determined. + * + * @since 3.3.0 + * + * @param string $parent_file The parent file of the screen. Typically the $parent_file global. + */ + function set_parentage( $parent_file ) { + $this->parent_file = $parent_file; + list( $this->parent_base ) = explode( '?', $parent_file ); + $this->parent_base = str_replace( '.php', '', $this->parent_base ); + } + + /** + * Adds an option for the screen. + * Call this in template files after admin.php is loaded and before admin-header.php is loaded to add screen options. + * + * @since 3.3.0 + * + * @param string $option Option ID + * @param mixed $args Option-dependent arguments. + */ + public function add_option( $option, $args = array() ) { + $this->_options[ $option ] = $args; + } + + /** + * Remove an option from the screen. + * + * @since 3.8.0 + * + * @param string $option Option ID. + */ + public function remove_option( $option ) { + unset( $this->_options[ $option ] ); + } + + /** + * Remove all options from the screen. + * + * @since 3.8.0 + */ + public function remove_options() { + $this->_options = array(); + } + + /** + * Get the options registered for the screen. + * + * @since 3.8.0 + * + * @return array Options with arguments. + */ + public function get_options() { + return $this->_options; + } + + /** + * Gets the arguments for an option for the screen. + * + * @since 3.3.0 + * + * @param string $option Option ID. + * @param mixed $key Optional. Specific array key for when the option is an array. + */ + public function get_option( $option, $key = false ) { + if ( ! isset( $this->_options[ $option ] ) ) + return null; + if ( $key ) { + if ( isset( $this->_options[ $option ][ $key ] ) ) + return $this->_options[ $option ][ $key ]; + return null; + } + return $this->_options[ $option ]; + } + + /** + * Gets the help tabs registered for the screen. + * + * @since 3.4.0 + * + * @return array Help tabs with arguments. + */ + public function get_help_tabs() { + return $this->_help_tabs; + } + + /** + * Gets the arguments for a help tab. + * + * @since 3.4.0 + * + * @param string $id Help Tab ID. + * @return array Help tab arguments. + */ + public function get_help_tab( $id ) { + if ( ! isset( $this->_help_tabs[ $id ] ) ) + return null; + return $this->_help_tabs[ $id ]; + } + + /** + * Add a help tab to the contextual help for the screen. + * Call this on the load-$pagenow hook for the relevant screen. + * + * @since 3.3.0 + * + * @param array $args + * - string - title - Title for the tab. + * - string - id - Tab ID. Must be HTML-safe. + * - string - content - Help tab content in plain text or HTML. Optional. + * - callback - callback - A callback to generate the tab content. Optional. + * + */ + public function add_help_tab( $args ) { + $defaults = array( + 'title' => false, + 'id' => false, + 'content' => '', + 'callback' => false, + ); + $args = wp_parse_args( $args, $defaults ); + + $args['id'] = sanitize_html_class( $args['id'] ); + + // Ensure we have an ID and title. + if ( ! $args['id'] || ! $args['title'] ) + return; + + // Allows for overriding an existing tab with that ID. + $this->_help_tabs[ $args['id'] ] = $args; + } + + /** + * Removes a help tab from the contextual help for the screen. + * + * @since 3.3.0 + * + * @param string $id The help tab ID. + */ + public function remove_help_tab( $id ) { + unset( $this->_help_tabs[ $id ] ); + } + + /** + * Removes all help tabs from the contextual help for the screen. + * + * @since 3.3.0 + */ + public function remove_help_tabs() { + $this->_help_tabs = array(); + } + + /** + * Gets the content from a contextual help sidebar. + * + * @since 3.4.0 + * + * @return string Contents of the help sidebar. + */ + public function get_help_sidebar() { + return $this->_help_sidebar; + } + + /** + * Add a sidebar to the contextual help for the screen. + * Call this in template files after admin.php is loaded and before admin-header.php is loaded to add a sidebar to the contextual help. + * + * @since 3.3.0 + * + * @param string $content Sidebar content in plain text or HTML. + */ + public function set_help_sidebar( $content ) { + $this->_help_sidebar = $content; + } + + /** + * Gets the number of layout columns the user has selected. + * + * The layout_columns option controls the max number and default number of + * columns. This method returns the number of columns within that range selected + * by the user via Screen Options. If no selection has been made, the default + * provisioned in layout_columns is returned. If the screen does not support + * selecting the number of layout columns, 0 is returned. + * + * @since 3.4.0 + * + * @return int Number of columns to display. + */ + public function get_columns() { + return $this->columns; + } + + /** + * Render the screen's help section. + * + * This will trigger the deprecated filters for backwards compatibility. + * + * @since 3.3.0 + */ + public function render_screen_meta() { + + // Call old contextual_help_list filter. + self::$_old_compat_help = apply_filters( 'contextual_help_list', self::$_old_compat_help, $this ); + + $old_help = isset( self::$_old_compat_help[ $this->id ] ) ? self::$_old_compat_help[ $this->id ] : ''; + $old_help = apply_filters( 'contextual_help', $old_help, $this->id, $this ); + + // Default help only if there is no old-style block of text and no new-style help tabs. + if ( empty( $old_help ) && ! $this->get_help_tabs() ) { + $default_help = apply_filters( 'default_contextual_help', '' ); + if ( $default_help ) + $old_help = '

    ' . $default_help . '

    '; + } + + if ( $old_help ) { + $this->add_help_tab( array( + 'id' => 'old-contextual-help', + 'title' => __('Overview'), + 'content' => $old_help, + ) ); + } + + $help_sidebar = $this->get_help_sidebar(); + + $help_class = 'hidden'; + if ( ! $help_sidebar ) + $help_class .= ' no-sidebar'; + + // Time to render! + ?> +
    + +
    +
    +
    +
    +
      + get_help_tabs() as $tab ) : + $link_id = "tab-link-{$tab['id']}"; + $panel_id = "tab-panel-{$tab['id']}"; + ?> + + + +
    +
    + + +
    + +
    + + +
    + get_help_tabs() as $tab ): + $panel_id = "tab-panel-{$tab['id']}"; + ?> + +
    + +
    + +
    +
    +
    + id, $this ); + + if ( ! empty( $columns ) && isset( $columns[ $this->id ] ) ) + $this->add_option( 'layout_columns', array('max' => $columns[ $this->id ] ) ); + + if ( $this->get_option( 'layout_columns' ) ) { + $this->columns = (int) get_user_option("screen_layout_$this->id"); + + if ( ! $this->columns && $this->get_option( 'layout_columns', 'default' ) ) + $this->columns = $this->get_option( 'layout_columns', 'default' ); + } + $GLOBALS[ 'screen_layout_columns' ] = $this->columns; // Set the global for back-compat. + + // Add screen options + if ( $this->show_screen_options() ) + $this->render_screen_options(); + ?> +
    + get_help_tabs() && ! $this->show_screen_options() ) + return; + ?> + + _show_screen_options ) ) + return $this->_show_screen_options; + + $columns = get_column_headers( $this ); + + $show_screen = ! empty( $wp_meta_boxes[ $this->id ] ) || $columns || $this->get_option( 'per_page' ); + + switch ( $this->id ) { + case 'widgets': + $this->_screen_settings = '

    ' . __('Enable accessibility mode') . '' . __('Disable accessibility mode') . "

    \n"; + break; + default: + $this->_screen_settings = ''; + break; + } + + $this->_screen_settings = apply_filters( 'screen_settings', $this->_screen_settings, $this ); + + if ( $this->_screen_settings || $this->_options ) + $show_screen = true; + + $this->_show_screen_options = apply_filters( 'screen_options_show_screen', $show_screen, $this ); + return $this->_show_screen_options; + } + + /** + * Render the screen options tab. + * + * @since 3.3.0 + */ + public function render_screen_options() { + global $wp_meta_boxes, $wp_list_table; + + $columns = get_column_headers( $this ); + $hidden = get_hidden_columns( $this ); + $post = get_post(); + + ?> + + get_option('layout_columns') ) + return; + + $screen_layout_columns = $this->get_columns(); + $num = $this->get_option( 'layout_columns', 'max' ); + + ?> +
    +
    + + +
    + get_option( 'per_page' ) ) + return; + + $per_page_label = $this->get_option( 'per_page', 'label' ); + + $option = $this->get_option( 'per_page', 'option' ); + if ( ! $option ) + $option = str_replace( '-', '_', "{$this->id}_per_page" ); + + $per_page = (int) get_user_option( $option ); + if ( empty( $per_page ) || $per_page < 1 ) { + $per_page = $this->get_option( 'per_page', 'default' ); + if ( ! $per_page ) + $per_page = 20; + } + + if ( 'edit_comments_per_page' == $option ) { + $comment_status = isset( $_REQUEST['comment_status'] ) ? $_REQUEST['comment_status'] : 'all'; + $per_page = apply_filters( 'comments_per_page', $per_page, $comment_status ); + } elseif ( 'categories_per_page' == $option ) { + $per_page = apply_filters( 'edit_categories_per_page', $per_page ); + } else { + $per_page = apply_filters( $option, $per_page ); + } + + // Back compat + if ( isset( $this->post_type ) ) + $per_page = apply_filters( 'edit_posts_per_page', $per_page, $this->post_type ); + + ?> +
    + + + + + +
    + $cat_name, 'category_parent' => $parent) ); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.0.0 + * + * @param unknown_type $categories + * @param unknown_type $post_id + * @return unknown + */ +function wp_create_categories($categories, $post_id = '') { + $cat_ids = array (); + foreach ($categories as $category) { + if ($id = category_exists($category)) + $cat_ids[] = $id; + else + if ($id = wp_create_category($category)) + $cat_ids[] = $id; + } + + if ( $post_id ) + wp_set_post_categories($post_id, $cat_ids); + + return $cat_ids; +} + +/** + * Updates an existing Category or creates a new Category. + * + * @since 2.0.0 + * + * @param mixed $catarr See defaults below. Set 'cat_ID' to a non-zero value to update an existing category. The 'taxonomy' key was added in 3.0.0. + * @param bool $wp_error Optional, since 2.5.0. Set this to true if the caller handles WP_Error return values. + * @return int|object The ID number of the new or updated Category on success. Zero or a WP_Error on failure, depending on param $wp_error. + */ +function wp_insert_category($catarr, $wp_error = false) { + $cat_defaults = array('cat_ID' => 0, 'taxonomy' => 'category', 'cat_name' => '', 'category_description' => '', 'category_nicename' => '', 'category_parent' => ''); + $catarr = wp_parse_args($catarr, $cat_defaults); + extract($catarr, EXTR_SKIP); + + if ( trim( $cat_name ) == '' ) { + if ( ! $wp_error ) + return 0; + else + return new WP_Error( 'cat_name', __('You did not enter a category name.') ); + } + + $cat_ID = (int) $cat_ID; + + // Are we updating or creating? + if ( !empty ($cat_ID) ) + $update = true; + else + $update = false; + + $name = $cat_name; + $description = $category_description; + $slug = $category_nicename; + $parent = $category_parent; + + $parent = (int) $parent; + if ( $parent < 0 ) + $parent = 0; + + if ( empty( $parent ) || ! term_exists( $parent, $taxonomy ) || ( $cat_ID && term_is_ancestor_of( $cat_ID, $parent, $taxonomy ) ) ) + $parent = 0; + + $args = compact('name', 'slug', 'parent', 'description'); + + if ( $update ) + $cat_ID = wp_update_term($cat_ID, $taxonomy, $args); + else + $cat_ID = wp_insert_term($cat_name, $taxonomy, $args); + + if ( is_wp_error($cat_ID) ) { + if ( $wp_error ) + return $cat_ID; + else + return 0; + } + + return $cat_ID['term_id']; +} + +/** + * Aliases wp_insert_category() with minimal args. + * + * If you want to update only some fields of an existing category, call this + * function with only the new values set inside $catarr. + * + * @since 2.0.0 + * + * @param array $catarr The 'cat_ID' value is required. All other keys are optional. + * @return int|bool The ID number of the new or updated Category on success. Zero or FALSE on failure. + */ +function wp_update_category($catarr) { + $cat_ID = (int) $catarr['cat_ID']; + + if ( isset($catarr['category_parent']) && ($cat_ID == $catarr['category_parent']) ) + return false; + + // First, get all of the original fields + $category = get_term( $cat_ID, 'category', ARRAY_A ); + _make_cat_compat( $category ); + + // Escape data pulled from DB. + $category = wp_slash($category); + + // Merge old and new fields with new fields overwriting old ones. + $catarr = array_merge($category, $catarr); + + return wp_insert_category($catarr); +} + +// +// Tags +// + +/** + * {@internal Missing Short Description}} + * + * @since 2.3.0 + * + * @param unknown_type $tag_name + * @return unknown + */ +function tag_exists($tag_name) { + return term_exists($tag_name, 'post_tag'); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.3.0 + * + * @param unknown_type $tag_name + * @return unknown + */ +function wp_create_tag($tag_name) { + return wp_create_term( $tag_name, 'post_tag'); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.3.0 + * + * @param unknown_type $post_id + * @return unknown + */ +function get_tags_to_edit( $post_id, $taxonomy = 'post_tag' ) { + return get_terms_to_edit( $post_id, $taxonomy); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.8.0 + * + * @param unknown_type $post_id + * @return unknown + */ +function get_terms_to_edit( $post_id, $taxonomy = 'post_tag' ) { + $post_id = (int) $post_id; + if ( !$post_id ) + return false; + + $tags = wp_get_post_terms($post_id, $taxonomy, array()); + + if ( !$tags ) + return false; + + if ( is_wp_error($tags) ) + return $tags; + + foreach ( $tags as $tag ) + $tag_names[] = $tag->name; + $tags_to_edit = join( ',', $tag_names ); + $tags_to_edit = esc_attr( $tags_to_edit ); + $tags_to_edit = apply_filters( 'terms_to_edit', $tags_to_edit, $taxonomy ); + + return $tags_to_edit; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.8.0 + * + * @param unknown_type $tag_name + * @return unknown + */ +function wp_create_term($tag_name, $taxonomy = 'post_tag') { + if ( $id = term_exists($tag_name, $taxonomy) ) + return $id; + + return wp_insert_term($tag_name, $taxonomy); +} diff --git a/src/wp-admin/includes/template.php b/src/wp-admin/includes/template.php new file mode 100644 index 0000000..0766382 --- /dev/null +++ b/src/wp-admin/includes/template.php @@ -0,0 +1,2024 @@ + elements. + * + * @see Walker + * @see wp_category_checklist() + * @see wp_terms_checklist() + * @since 2.5.1 + */ +class Walker_Category_Checklist extends Walker { + var $tree_type = 'category'; + var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this + + /** + * Starts the list before the elements are added. + * + * @see Walker:start_lvl() + * + * @since 2.5.1 + * + * @param string $output Passed by reference. Used to append additional content. + * @param int $depth Depth of category. Used for tab indentation. + * @param array $args An array of arguments. @see wp_terms_checklist() + */ + function start_lvl( &$output, $depth = 0, $args = array() ) { + $indent = str_repeat("\t", $depth); + $output .= "$indent
      \n"; + } + + /** + * Ends the list of after the elements are added. + * + * @see Walker::end_lvl() + * + * @since 2.5.1 + * + * @param string $output Passed by reference. Used to append additional content. + * @param int $depth Depth of category. Used for tab indentation. + * @param array $args An array of arguments. @see wp_terms_checklist() + */ + function end_lvl( &$output, $depth = 0, $args = array() ) { + $indent = str_repeat("\t", $depth); + $output .= "$indent
    \n"; + } + + /** + * Start the element output. + * + * @see Walker::start_el() + * + * @since 2.5.1 + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $category The current term object. + * @param int $depth Depth of the term in reference to parents. Default 0. + * @param array $args An array of arguments. @see wp_terms_checklist() + * @param int $id ID of the current term. + */ + function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { + extract($args); + if ( empty($taxonomy) ) + $taxonomy = 'category'; + + if ( $taxonomy == 'category' ) + $name = 'post_category'; + else + $name = 'tax_input['.$taxonomy.']'; + + $class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : ''; + $output .= "\n
  8. " . ''; + } + + /** + * Ends the element output, if needed. + * + * @see Walker::end_el() + * + * @since 2.5.1 + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $category The current term object. + * @param int $depth Depth of the term in reference to parents. Default 0. + * @param array $args An array of arguments. @see wp_terms_checklist() + */ + function end_el( &$output, $category, $depth = 0, $args = array() ) { + $output .= "
  9. \n"; + } +} + +/** + * Output an unordered list of checkbox elements labelled + * with category names. + * + * @see wp_terms_checklist() + * @since 2.5.1 + * + * @param int $post_id Mark categories associated with this post as checked. $selected_cats must not be an array. + * @param int $descendants_and_self ID of the category to output along with its descendents. + * @param bool|array $selected_cats List of categories to mark as checked. + * @param bool|array $popular_cats Override the list of categories that receive the "popular-category" class. + * @param object $walker Walker object to use to build the output. + * @param bool $checked_ontop Move checked items out of the hierarchy and to the top of the list. + */ +function wp_category_checklist( $post_id = 0, $descendants_and_self = 0, $selected_cats = false, $popular_cats = false, $walker = null, $checked_ontop = true ) { + wp_terms_checklist( $post_id, array( + 'taxonomy' => 'category', + 'descendants_and_self' => $descendants_and_self, + 'selected_cats' => $selected_cats, + 'popular_cats' => $popular_cats, + 'walker' => $walker, + 'checked_ontop' => $checked_ontop + ) ); +} + +/** + * Output an unordered list of checkbox elements labelled + * with term names. Taxonomy independent version of wp_category_checklist(). + * + * @since 3.0.0 + * + * @param int $post_id + * @param array $args + */ +function wp_terms_checklist($post_id = 0, $args = array()) { + $defaults = array( + 'descendants_and_self' => 0, + 'selected_cats' => false, + 'popular_cats' => false, + 'walker' => null, + 'taxonomy' => 'category', + 'checked_ontop' => true + ); + $args = apply_filters( 'wp_terms_checklist_args', $args, $post_id ); + + extract( wp_parse_args($args, $defaults), EXTR_SKIP ); + + if ( empty($walker) || !is_a($walker, 'Walker') ) + $walker = new Walker_Category_Checklist; + + $descendants_and_self = (int) $descendants_and_self; + + $args = array('taxonomy' => $taxonomy); + + $tax = get_taxonomy($taxonomy); + $args['disabled'] = !current_user_can($tax->cap->assign_terms); + + if ( is_array( $selected_cats ) ) + $args['selected_cats'] = $selected_cats; + elseif ( $post_id ) + $args['selected_cats'] = wp_get_object_terms($post_id, $taxonomy, array_merge($args, array('fields' => 'ids'))); + else + $args['selected_cats'] = array(); + + if ( is_array( $popular_cats ) ) + $args['popular_cats'] = $popular_cats; + else + $args['popular_cats'] = get_terms( $taxonomy, array( 'fields' => 'ids', 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) ); + + if ( $descendants_and_self ) { + $categories = (array) get_terms($taxonomy, array( 'child_of' => $descendants_and_self, 'hierarchical' => 0, 'hide_empty' => 0 ) ); + $self = get_term( $descendants_and_self, $taxonomy ); + array_unshift( $categories, $self ); + } else { + $categories = (array) get_terms($taxonomy, array('get' => 'all')); + } + + if ( $checked_ontop ) { + // Post process $categories rather than adding an exclude to the get_terms() query to keep the query the same across all posts (for any query cache) + $checked_categories = array(); + $keys = array_keys( $categories ); + + foreach( $keys as $k ) { + if ( in_array( $categories[$k]->term_id, $args['selected_cats'] ) ) { + $checked_categories[] = $categories[$k]; + unset( $categories[$k] ); + } + } + + // Put checked cats on top + echo call_user_func_array(array(&$walker, 'walk'), array($checked_categories, 0, $args)); + } + // Then the rest of them + echo call_user_func_array(array(&$walker, 'walk'), array($categories, 0, $args)); +} + +/** + * Retrieve a list of the most popular terms from the specified taxonomy. + * + * If the $echo argument is true then the elements for a list of checkbox + * elements labelled with the names of the selected terms is output. + * If the $post_ID global isn't empty then the terms associated with that + * post will be marked as checked. + * + * @since 2.5.0 + * + * @param string $taxonomy Taxonomy to retrieve terms from. + * @param int $default Unused. + * @param int $number Number of terms to retrieve. Defaults to 10. + * @param bool $echo Optionally output the list as well. Defaults to true. + * @return array List of popular term IDs. + */ +function wp_popular_terms_checklist( $taxonomy, $default = 0, $number = 10, $echo = true ) { + $post = get_post(); + + if ( $post && $post->ID ) + $checked_terms = wp_get_object_terms($post->ID, $taxonomy, array('fields'=>'ids')); + else + $checked_terms = array(); + + $terms = get_terms( $taxonomy, array( 'orderby' => 'count', 'order' => 'DESC', 'number' => $number, 'hierarchical' => false ) ); + + $tax = get_taxonomy($taxonomy); + + $popular_ids = array(); + foreach ( (array) $terms as $term ) { + $popular_ids[] = $term->term_id; + if ( !$echo ) // hack for AJAX use + continue; + $id = "popular-$taxonomy-$term->term_id"; + $checked = in_array( $term->term_id, $checked_terms ) ? 'checked="checked"' : ''; + ?> + + + + 'name', 'hide_empty' => 0 ) ); + + if ( empty( $categories ) ) + return; + + foreach ( $categories as $category ) { + $cat_id = $category->term_id; + $name = esc_html( apply_filters( 'the_category', $category->name ) ); + $checked = in_array( $cat_id, $checked_categories ) ? ' checked="checked"' : ''; + echo '"; + } +} + +// adds hidden fields with the data for use in the inline editor for posts and pages +/** + * {@internal Missing Short Description}} + * + * @since 2.7.0 + * + * @param unknown_type $post + */ +function get_inline_data($post) { + $post_type_object = get_post_type_object($post->post_type); + if ( ! current_user_can( 'edit_post', $post->ID ) ) + return; + + $title = esc_textarea( trim( $post->post_title ) ); + + echo ' +'; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.7.0 + * + * @param unknown_type $position + * @param unknown_type $checkbox + * @param unknown_type $mode + */ +function wp_comment_reply($position = '1', $checkbox = false, $mode = 'single', $table_row = true) { + // allow plugin to replace the popup content + $content = apply_filters( 'wp_comment_reply', '', array('position' => $position, 'checkbox' => $checkbox, 'mode' => $mode) ); + + if ( ! empty($content) ) { + echo $content; + return; + } + + if ( $mode == 'single' ) { + $wp_list_table = _get_list_table('WP_Post_Comments_List_Table'); + } else { + $wp_list_table = _get_list_table('WP_Comments_List_Table'); + } + +?> +
    + +
    + + + +
    + + + + + + + ' . _x( 'Name', 'meta name' ) . ' + ' . __( 'Value' ) . ' + + + + + +'; //TBODY needed for list-manipulation JS + return; + } + $count = 0; +?> + + + + + + + + + + +
    + + $entry['meta_id'] = (int) $entry['meta_id']; + + $delete_nonce = wp_create_nonce( 'delete-meta_' . $entry['meta_id'] ); + + $r .= "\n\t"; + $r .= "\n\t\t"; + + $r .= "\n\t\t
    "; + $r .= get_submit_button( __( 'Delete' ), 'deletemeta small', "deletemeta[{$entry['meta_id']}]", false, array( 'data-wp-lists' => "delete:the-list:meta-{$entry['meta_id']}::_ajax_nonce=$delete_nonce" ) ); + $r .= "\n\t\t"; + $r .= get_submit_button( __( 'Update' ), 'updatemeta small', "meta-{$entry['meta_id']}-submit", false, array( 'data-wp-lists' => "add:the-list:meta-{$entry['meta_id']}::_ajax_nonce-add-meta=$update_nonce" ) ); + $r .= "
    "; + $r .= wp_nonce_field( 'change-meta', '_ajax_nonce', false, false ); + $r .= ""; + + $r .= "\n\t\t\n\t"; + return $r; +} + +/** + * Prints the form in the Custom Fields meta box. + * + * @since 1.2.0 + * + * @param WP_Post $post Optional. The post being edited. + */ +function meta_form( $post = null ) { + global $wpdb; + $post = get_post( $post ); + $limit = (int) apply_filters( 'postmeta_form_limit', 30 ); + $keys = $wpdb->get_col( " + SELECT meta_key + FROM $wpdb->postmeta + GROUP BY meta_key + HAVING meta_key NOT LIKE '\_%' + ORDER BY meta_key + LIMIT $limit" ); + if ( $keys ) + natcasesort($keys); +?> +

    + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    +
    + 'newmeta-submit', 'data-wp-lists' => 'add:the-list:newmeta' ) ); ?> +
    + +
    +post_status, array('draft', 'pending') ) && (!$post->post_date_gmt || '0000-00-00 00:00:00' == $post->post_date_gmt ) ); + + $tab_index_attribute = ''; + if ( (int) $tab_index > 0 ) + $tab_index_attribute = " tabindex=\"$tab_index\""; + + // echo '
    '; + + $time_adj = current_time('timestamp'); + $post_date = ($for_post) ? $post->post_date : $comment->comment_date; + $jj = ($edit) ? mysql2date( 'd', $post_date, false ) : gmdate( 'd', $time_adj ); + $mm = ($edit) ? mysql2date( 'm', $post_date, false ) : gmdate( 'm', $time_adj ); + $aa = ($edit) ? mysql2date( 'Y', $post_date, false ) : gmdate( 'Y', $time_adj ); + $hh = ($edit) ? mysql2date( 'H', $post_date, false ) : gmdate( 'H', $time_adj ); + $mn = ($edit) ? mysql2date( 'i', $post_date, false ) : gmdate( 'i', $time_adj ); + $ss = ($edit) ? mysql2date( 's', $post_date, false ) : gmdate( 's', $time_adj ); + + $cur_jj = gmdate( 'd', $time_adj ); + $cur_mm = gmdate( 'm', $time_adj ); + $cur_aa = gmdate( 'Y', $time_adj ); + $cur_hh = gmdate( 'H', $time_adj ); + $cur_mn = gmdate( 'i', $time_adj ); + + $month = "'; + + $day = ''; + $year = ''; + $hour = ''; + $minute = ''; + + echo '
    '; + /* translators: 1: month, 2: day, 3: year, 4: hour, 5: minute */ + printf( __( '%1$s %2$s, %3$s @ %4$s : %5$s' ), $month, $day, $year, $hour, $minute ); + + echo '
    '; + + if ( $multi ) return; + + echo "\n\n"; + foreach ( array('mm', 'jj', 'aa', 'hh', 'mn') as $timeunit ) { + echo '' . "\n"; + $cur_timeunit = 'cur_' . $timeunit; + echo '' . "\n"; + } +?> + +

    + + +

    +$template"; + endforeach; +} + +/** + * {@internal Missing Short Description}} + * + * @since 1.5.0 + * + * @param unknown_type $default + * @param unknown_type $parent + * @param unknown_type $level + * @return unknown + */ +function parent_dropdown( $default = 0, $parent = 0, $level = 0 ) { + global $wpdb; + $post = get_post(); + $items = $wpdb->get_results( $wpdb->prepare("SELECT ID, post_parent, post_title FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'page' ORDER BY menu_order", $parent) ); + + if ( $items ) { + foreach ( $items as $item ) { + // A page cannot be its own parent. + if ( $post && $post->ID && $item->ID == $post->ID ) + continue; + + $pad = str_repeat( ' ', $level * 3 ); + if ( $item->ID == $default) + $current = ' selected="selected"'; + else + $current = ''; + + echo "\n\t"; + parent_dropdown( $default, $item->ID, $level +1 ); + } + } else { + return false; + } +} + +/** + * Print out "; + else + $r .= "\n\t"; + } + echo $p . $r; +} + +/** + * Outputs the form used by the importers to accept the data to be imported + * + * @since 2.0.0 + * + * @param string $action The action attribute for the form. + */ +function wp_import_upload_form( $action ) { + $bytes = apply_filters( 'import_upload_size_limit', wp_max_upload_size() ); + $size = size_format( $bytes ); + $upload_dir = wp_upload_dir(); + if ( ! empty( $upload_dir['error'] ) ) : + ?>

    +

    +
    +

    + () + + + +

    + +
    +id; + + if ( !isset($wp_meta_boxes) ) + $wp_meta_boxes = array(); + if ( !isset($wp_meta_boxes[$page]) ) + $wp_meta_boxes[$page] = array(); + if ( !isset($wp_meta_boxes[$page][$context]) ) + $wp_meta_boxes[$page][$context] = array(); + + foreach ( array_keys($wp_meta_boxes[$page]) as $a_context ) { + foreach ( array('high', 'core', 'default', 'low') as $a_priority ) { + if ( !isset($wp_meta_boxes[$page][$a_context][$a_priority][$id]) ) + continue; + + // If a core box was previously added or removed by a plugin, don't add. + if ( 'core' == $priority ) { + // If core box previously deleted, don't add + if ( false === $wp_meta_boxes[$page][$a_context][$a_priority][$id] ) + return; + // If box was added with default priority, give it core priority to maintain sort order + if ( 'default' == $a_priority ) { + $wp_meta_boxes[$page][$a_context]['core'][$id] = $wp_meta_boxes[$page][$a_context]['default'][$id]; + unset($wp_meta_boxes[$page][$a_context]['default'][$id]); + } + return; + } + // If no priority given and id already present, use existing priority + if ( empty($priority) ) { + $priority = $a_priority; + // else if we're adding to the sorted priority, we don't know the title or callback. Grab them from the previously added context/priority. + } elseif ( 'sorted' == $priority ) { + $title = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['title']; + $callback = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['callback']; + $callback_args = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['args']; + } + // An id can be in only one priority and one context + if ( $priority != $a_priority || $context != $a_context ) + unset($wp_meta_boxes[$page][$a_context][$a_priority][$id]); + } + } + + if ( empty($priority) ) + $priority = 'low'; + + if ( !isset($wp_meta_boxes[$page][$context][$priority]) ) + $wp_meta_boxes[$page][$context][$priority] = array(); + + $wp_meta_boxes[$page][$context][$priority][$id] = array('id' => $id, 'title' => $title, 'callback' => $callback, 'args' => $callback_args); +} + +/** + * Meta-Box template function + * + * @since 2.5.0 + * + * @param string|object $screen Screen identifier + * @param string $context box context + * @param mixed $object gets passed to the box callback function as first parameter + * @return int number of meta_boxes + */ +function do_meta_boxes( $screen, $context, $object ) { + global $wp_meta_boxes; + static $already_sorted = false; + + if ( empty( $screen ) ) + $screen = get_current_screen(); + elseif ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + $page = $screen->id; + + $hidden = get_hidden_meta_boxes( $screen ); + + printf('
    ', htmlspecialchars($context)); + + $i = 0; + do { + // Grab the ones the user has manually sorted. Pull them out of their previous context/priority and into the one the user chose + if ( !$already_sorted && $sorted = get_user_option( "meta-box-order_$page" ) ) { + foreach ( $sorted as $box_context => $ids ) { + foreach ( explode(',', $ids ) as $id ) { + if ( $id && 'dashboard_browser_nag' !== $id ) + add_meta_box( $id, null, null, $screen, $box_context, 'sorted' ); + } + } + } + $already_sorted = true; + + if ( !isset($wp_meta_boxes) || !isset($wp_meta_boxes[$page]) || !isset($wp_meta_boxes[$page][$context]) ) + break; + + foreach ( array('high', 'sorted', 'core', 'default', 'low') as $priority ) { + if ( isset($wp_meta_boxes[$page][$context][$priority]) ) { + foreach ( (array) $wp_meta_boxes[$page][$context][$priority] as $box ) { + if ( false == $box || ! $box['title'] ) + continue; + $i++; + $hidden_class = in_array($box['id'], $hidden) ? ' hide-if-js' : ''; + echo '
    ' . "\n"; + if ( 'dashboard_browser_nag' != $box['id'] ) + echo '

    '; + echo "

    {$box['title']}

    \n"; + echo '
    ' . "\n"; + call_user_func($box['callback'], $object, $box); + echo "
    \n"; + echo "
    \n"; + } + } + } + } while(0); + + echo "
    "; + + return $i; + +} + +/** + * Remove a meta box from an edit form. + * + * @since 2.6.0 + * + * @param string $id String for use in the 'id' attribute of tags. + * @param string|object $screen The screen on which to show the box (post, page, link). + * @param string $context The context within the page where the boxes should show ('normal', 'advanced'). + */ +function remove_meta_box($id, $screen, $context) { + global $wp_meta_boxes; + + if ( empty( $screen ) ) + $screen = get_current_screen(); + elseif ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + $page = $screen->id; + + if ( !isset($wp_meta_boxes) ) + $wp_meta_boxes = array(); + if ( !isset($wp_meta_boxes[$page]) ) + $wp_meta_boxes[$page] = array(); + if ( !isset($wp_meta_boxes[$page][$context]) ) + $wp_meta_boxes[$page][$context] = array(); + + foreach ( array('high', 'core', 'default', 'low') as $priority ) + $wp_meta_boxes[$page][$context][$priority][$id] = false; +} + +/** + * Meta Box Accordion Template Function + * + * Largely made up of abstracted code from {@link do_meta_boxes()}, this + * function serves to build meta boxes as list items for display as + * a collapsible accordion. + * + * @since 3.6.0 + * + * @uses global $wp_meta_boxes Used to retrieve registered meta boxes. + * + * @param string|object $screen The screen identifier. + * @param string $context The meta box context. + * @param mixed $object gets passed to the section callback function as first parameter. + * @return int number of meta boxes as accordion sections. + */ +function do_accordion_sections( $screen, $context, $object ) { + global $wp_meta_boxes; + + wp_enqueue_script( 'accordion' ); + + if ( empty( $screen ) ) + $screen = get_current_screen(); + elseif ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + $page = $screen->id; + + $hidden = get_hidden_meta_boxes( $screen ); + ?> +
    +
      + +
    • +

      +
      +
      + +
      +
      +
    • + +
    +
    + $id, 'title' => $title, 'callback' => $callback); +} + +/** + * Add a new field to a section of a settings page + * + * Part of the Settings API. Use this to define a settings field that will show + * as part of a settings section inside a settings page. The fields are shown using + * do_settings_fields() in do_settings-sections() + * + * The $callback argument should be the name of a function that echoes out the + * html input tags for this setting field. Use get_option() to retrieve existing + * values to show. + * + * @since 2.7.0 + * + * @global $wp_settings_fields Storage array of settings fields and info about their pages/sections + * + * @param string $id Slug-name to identify the field. Used in the 'id' attribute of tags. + * @param string $title Formatted title of the field. Shown as the label for the field during output. + * @param string $callback Function that fills the field with the desired form inputs. The function should echo its output. + * @param string $page The slug-name of the settings page on which to show the section (general, reading, writing, ...). + * @param string $section The slug-name of the section of the settings page in which to show the box (default, ...). + * @param array $args Additional arguments + */ +function add_settings_field($id, $title, $callback, $page, $section = 'default', $args = array()) { + global $wp_settings_fields; + + if ( 'misc' == $page ) { + _deprecated_argument( __FUNCTION__, '3.0', __( 'The miscellaneous options group has been removed. Use another settings group.' ) ); + $page = 'general'; + } + + if ( 'privacy' == $page ) { + _deprecated_argument( __FUNCTION__, '3.5', __( 'The privacy options group has been removed. Use another settings group.' ) ); + $page = 'reading'; + } + + $wp_settings_fields[$page][$section][$id] = array('id' => $id, 'title' => $title, 'callback' => $callback, 'args' => $args); +} + +/** + * Prints out all settings sections added to a particular settings page + * + * Part of the Settings API. Use this in a settings page callback function + * to output all the sections and fields that were added to that $page with + * add_settings_section() and add_settings_field() + * + * @global $wp_settings_sections Storage array of all settings sections added to admin pages + * @global $wp_settings_fields Storage array of settings fields and info about their pages/sections + * @since 2.7.0 + * + * @param string $page The slug name of the page whos settings sections you want to output + */ +function do_settings_sections( $page ) { + global $wp_settings_sections, $wp_settings_fields; + + if ( ! isset( $wp_settings_sections[$page] ) ) + return; + + foreach ( (array) $wp_settings_sections[$page] as $section ) { + if ( $section['title'] ) + echo "

    {$section['title']}

    \n"; + + if ( $section['callback'] ) + call_user_func( $section['callback'], $section ); + + if ( ! isset( $wp_settings_fields ) || !isset( $wp_settings_fields[$page] ) || !isset( $wp_settings_fields[$page][$section['id']] ) ) + continue; + echo ''; + do_settings_fields( $page, $section['id'] ); + echo '
    '; + } +} + +/** + * Print out the settings fields for a particular settings section + * + * Part of the Settings API. Use this in a settings page to output + * a specific section. Should normally be called by do_settings_sections() + * rather than directly. + * + * @global $wp_settings_fields Storage array of settings fields and their pages/sections + * + * @since 2.7.0 + * + * @param string $page Slug title of the admin page who's settings fields you want to show. + * @param section $section Slug title of the settings section who's fields you want to show. + */ +function do_settings_fields($page, $section) { + global $wp_settings_fields; + + if ( ! isset( $wp_settings_fields[$page][$section] ) ) + return; + + foreach ( (array) $wp_settings_fields[$page][$section] as $field ) { + echo ''; + if ( !empty($field['args']['label_for']) ) + echo ''; + else + echo '' . $field['title'] . ''; + echo ''; + call_user_func($field['callback'], $field['args']); + echo ''; + echo ''; + } +} + +/** + * Register a settings error to be displayed to the user + * + * Part of the Settings API. Use this to show messages to users about settings validation + * problems, missing settings or anything else. + * + * Settings errors should be added inside the $sanitize_callback function defined in + * register_setting() for a given setting to give feedback about the submission. + * + * By default messages will show immediately after the submission that generated the error. + * Additional calls to settings_errors() can be used to show errors even when the settings + * page is first accessed. + * + * @since 3.0.0 + * + * @global array $wp_settings_errors Storage array of errors registered during this pageload + * + * @param string $setting Slug title of the setting to which this error applies + * @param string $code Slug-name to identify the error. Used as part of 'id' attribute in HTML output. + * @param string $message The formatted message text to display to the user (will be shown inside styled
    and

    ) + * @param string $type The type of message it is, controls HTML class. Use 'error' or 'updated'. + */ +function add_settings_error( $setting, $code, $message, $type = 'error' ) { + global $wp_settings_errors; + + $new_error = array( + 'setting' => $setting, + 'code' => $code, + 'message' => $message, + 'type' => $type + ); + $wp_settings_errors[] = $new_error; +} + +/** + * Fetch settings errors registered by add_settings_error() + * + * Checks the $wp_settings_errors array for any errors declared during the current + * pageload and returns them. + * + * If changes were just submitted ($_GET['settings-updated']) and settings errors were saved + * to the 'settings_errors' transient then those errors will be returned instead. This + * is used to pass errors back across pageloads. + * + * Use the $sanitize argument to manually re-sanitize the option before returning errors. + * This is useful if you have errors or notices you want to show even when the user + * hasn't submitted data (i.e. when they first load an options page, or in admin_notices action hook) + * + * @since 3.0.0 + * + * @global array $wp_settings_errors Storage array of errors registered during this pageload + * + * @param string $setting Optional slug title of a specific setting who's errors you want. + * @param boolean $sanitize Whether to re-sanitize the setting value before returning errors. + * @return array Array of settings errors + */ +function get_settings_errors( $setting = '', $sanitize = false ) { + global $wp_settings_errors; + + // If $sanitize is true, manually re-run the sanitization for this option + // This allows the $sanitize_callback from register_setting() to run, adding + // any settings errors you want to show by default. + if ( $sanitize ) + sanitize_option( $setting, get_option( $setting ) ); + + // If settings were passed back from options.php then use them + if ( isset( $_GET['settings-updated'] ) && $_GET['settings-updated'] && get_transient( 'settings_errors' ) ) { + $wp_settings_errors = array_merge( (array) $wp_settings_errors, get_transient( 'settings_errors' ) ); + delete_transient( 'settings_errors' ); + } + + // Check global in case errors have been added on this pageload + if ( ! count( $wp_settings_errors ) ) + return array(); + + // Filter the results to those of a specific setting if one was set + if ( $setting ) { + $setting_errors = array(); + foreach ( (array) $wp_settings_errors as $key => $details ) { + if ( $setting == $details['setting'] ) + $setting_errors[] = $wp_settings_errors[$key]; + } + return $setting_errors; + } + + return $wp_settings_errors; +} + +/** + * Display settings errors registered by add_settings_error() + * + * Part of the Settings API. Outputs a

    for each error retrieved by get_settings_errors(). + * + * This is called automatically after a settings page based on the Settings API is submitted. + * Errors should be added during the validation callback function for a setting defined in register_setting() + * + * The $sanitize option is passed into get_settings_errors() and will re-run the setting sanitization + * on its current value. + * + * The $hide_on_update option will cause errors to only show when the settings page is first loaded. + * if the user has already saved new values it will be hidden to avoid repeating messages already + * shown in the default error reporting after submission. This is useful to show general errors like missing + * settings when the user arrives at the settings page. + * + * @since 3.0.0 + * + * @param string $setting Optional slug title of a specific setting who's errors you want. + * @param boolean $sanitize Whether to re-sanitize the setting value before returning errors. + * @param boolean $hide_on_update If set to true errors will not be shown if the settings page has already been submitted. + */ +function settings_errors( $setting = '', $sanitize = false, $hide_on_update = false ) { + + if ( $hide_on_update && ! empty( $_GET['settings-updated'] ) ) + return; + + $settings_errors = get_settings_errors( $setting, $sanitize ); + + if ( empty( $settings_errors ) ) + return; + + $output = ''; + foreach ( $settings_errors as $key => $details ) { + $css_id = 'setting-error-' . $details['code']; + $css_class = $details['type'] . ' settings-error'; + $output .= "
    \n"; + $output .= "

    {$details['message']}

    "; + $output .= "
    \n"; + } + echo $output; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.7.0 + * + * @param unknown_type $found_action + */ +function find_posts_div($found_action = '') { +?> + +post_password ) ) + echo esc_attr( $post->post_password ); +} + +/** + * Get the post title. + * + * The post title is fetched and if it is blank then a default string is + * returned. + * + * @since 2.7.0 + * @param mixed $post Post id or object. If not supplied the global $post is used. + * @return string The post title if set + */ +function _draft_or_post_title( $post = 0 ) { + $title = get_the_title( $post ); + if ( empty( $title ) ) + $title = __( '(no title)' ); + return $title; +} + +/** + * Display the search query. + * + * A simple wrapper to display the "s" parameter in a GET URI. This function + * should only be used when {@link the_search_query()} cannot. + * + * @uses attr + * @since 2.7.0 + * + */ +function _admin_search_query() { + echo isset($_REQUEST['s']) ? esc_attr( wp_unslash( $_REQUEST['s'] ) ) : ''; +} + +/** + * Generic Iframe header for use with Thickbox + * + * @since 2.7.0 + * @param string $title Title of the Iframe page. + * @param bool $limit_styles Limit styles to colour-related styles only (unless others are enqueued). + * + */ +function iframe_header( $title = '', $limit_styles = false ) { + show_admin_bar( false ); + global $hook_suffix, $current_user, $admin_body_class, $wp_locale; + $admin_body_class = preg_replace('/[^a-z0-9_-]+/i', '-', $hook_suffix); + + $current_screen = get_current_screen(); + + @header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) ); + _wp_admin_html_begin(); +?> +<?php bloginfo('name') ?> › <?php echo $title ?> — <?php _e('WordPress'); ?> + + + + + class="wp-admin wp-core-ui no-js iframe "> + + + + + + +post_password) ) + $post_states['protected'] = __('Password protected'); + if ( 'private' == $post->post_status && 'private' != $post_status ) + $post_states['private'] = __('Private'); + if ( 'draft' == $post->post_status && 'draft' != $post_status ) + $post_states['draft'] = __('Draft'); + if ( 'pending' == $post->post_status && 'pending' != $post_status ) + /* translators: post state */ + $post_states['pending'] = _x('Pending', 'post state'); + if ( is_sticky($post->ID) ) + $post_states['sticky'] = __('Sticky'); + + $post_states = apply_filters( 'display_post_states', $post_states, $post ); + + if ( ! empty($post_states) ) { + $state_count = count($post_states); + $i = 0; + echo ' - '; + foreach ( $post_states as $state ) { + ++$i; + ( $i == $state_count ) ? $sep = '' : $sep = ', '; + echo "$state$sep"; + } + } + +} + +function _media_states( $post ) { + $media_states = array(); + $stylesheet = get_option('stylesheet'); + + if ( current_theme_supports( 'custom-header') ) { + $meta_header = get_post_meta($post->ID, '_wp_attachment_is_custom_header', true ); + if ( ! empty( $meta_header ) && $meta_header == $stylesheet ) + $media_states[] = __( 'Header Image' ); + } + + if ( current_theme_supports( 'custom-background') ) { + $meta_background = get_post_meta($post->ID, '_wp_attachment_is_custom_background', true ); + if ( ! empty( $meta_background ) && $meta_background == $stylesheet ) + $media_states[] = __( 'Background Image' ); + } + + $media_states = apply_filters( 'display_media_states', $media_states ); + + if ( ! empty( $media_states ) ) { + $state_count = count( $media_states ); + $i = 0; + echo ' - '; + foreach ( $media_states as $state ) { + ++$i; + ( $i == $state_count ) ? $sep = '' : $sep = ', '; + echo "$state$sep"; + } + } +} + +/** + * Test support for compressing JavaScript from PHP + * + * Outputs JavaScript that tests if compression from PHP works as expected + * and sets an option with the result. Has no effect when the current user + * is not an administrator. To run the test again the option 'can_compress_scripts' + * has to be deleted. + * + * @since 2.8.0 + */ +function compression_test() { +?> + + '1' ). + * These attributes will be output as attribute="value", such as tabindex="1". + * Defaults to no other attributes. Other attributes can also be provided as a + * string such as 'tabindex="1"', though the array format is typically cleaner. + */ +function submit_button( $text = null, $type = 'primary', $name = 'submit', $wrap = true, $other_attributes = null ) { + echo get_submit_button( $text, $type, $name, $wrap, $other_attributes ); +} + +/** + * Returns a submit button, with provided text and appropriate class + * + * @since 3.1.0 + * + * @param string $text The text of the button (defaults to 'Save Changes') + * @param string $type The type of button. One of: primary, secondary, delete + * @param string $name The HTML name of the submit button. Defaults to "submit". If no id attribute + * is given in $other_attributes below, $name will be used as the button's id. + * @param bool $wrap True if the output button should be wrapped in a paragraph tag, + * false otherwise. Defaults to true + * @param array|string $other_attributes Other attributes that should be output with the button, + * mapping attributes to their values, such as array( 'tabindex' => '1' ). + * These attributes will be output as attribute="value", such as tabindex="1". + * Defaults to no other attributes. Other attributes can also be provided as a + * string such as 'tabindex="1"', though the array format is typically cleaner. + */ +function get_submit_button( $text = null, $type = 'primary large', $name = 'submit', $wrap = true, $other_attributes = null ) { + if ( ! is_array( $type ) ) + $type = explode( ' ', $type ); + + $button_shorthand = array( 'primary', 'small', 'large' ); + $classes = array( 'button' ); + foreach ( $type as $t ) { + if ( 'secondary' === $t || 'button-secondary' === $t ) + continue; + $classes[] = in_array( $t, $button_shorthand ) ? 'button-' . $t : $t; + } + $class = implode( ' ', array_unique( $classes ) ); + + if ( 'delete' === $type ) + $class = 'button-secondary delete'; + + $text = $text ? $text : __( 'Save Changes' ); + + // Default the id attribute to $name unless an id was specifically provided in $other_attributes + $id = $name; + if ( is_array( $other_attributes ) && isset( $other_attributes['id'] ) ) { + $id = $other_attributes['id']; + unset( $other_attributes['id'] ); + } + + $attributes = ''; + if ( is_array( $other_attributes ) ) { + foreach ( $other_attributes as $attribute => $value ) { + $attributes .= $attribute . '="' . esc_attr( $value ) . '" '; // Trailing space is important + } + } else if ( !empty( $other_attributes ) ) { // Attributes provided as a string + $attributes = $other_attributes; + } + + $button = ''; + + if ( $wrap ) { + $button = '

    ' . $button . '

    '; + } + + return $button; +} + +function _wp_admin_html_begin() { + global $is_IE; + + $admin_html_class = ( is_admin_bar_showing() ) ? 'wp-toolbar' : ''; + + if ( $is_IE ) + @header('X-UA-Compatible: IE=edge'); + +?> + + + + > + + + + pointer_id ) + */ + + $registered_pointers = array( + 'index.php' => 'wp330_toolbar', + 'post-new.php' => 'wp350_media', + 'post.php' => array( 'wp350_media', 'wp360_revisions' ), + 'edit.php' => 'wp360_locks', + 'themes.php' => array( 'wp330_saving_widgets', 'wp340_customize_current_theme_link' ), + 'appearance_page_custom-header' => 'wp340_choose_image_from_library', + 'appearance_page_custom-background' => 'wp340_choose_image_from_library', + ); + + // Check if screen related pointer is registered + if ( empty( $registered_pointers[ $hook_suffix ] ) ) + return; + + $pointers = (array) $registered_pointers[ $hook_suffix ]; + + $caps_required = array( + 'wp330_saving_widgets' => array( 'edit_theme_options', 'switch_themes' ), + 'wp340_customize_current_theme_link' => array( 'edit_theme_options' ), + 'wp340_choose_image_from_library' => array( 'edit_theme_options' ), + 'wp350_media' => array( 'upload_files' ), + ); + + // Get dismissed pointers + $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ); + + $got_pointers = false; + foreach ( array_diff( $pointers, $dismissed ) as $pointer ) { + if ( isset( $caps_required[ $pointer ] ) ) { + foreach ( $caps_required[ $pointer ] as $cap ) { + if ( ! current_user_can( $cap ) ) + continue 2; + } + } + + // Bind pointer print function + add_action( 'admin_print_footer_scripts', array( 'WP_Internal_Pointers', 'pointer_' . $pointer ) ); + $got_pointers = true; + } + + if ( ! $got_pointers ) + return; + + // Add pointers script and style to queue + wp_enqueue_style( 'wp-pointer' ); + wp_enqueue_script( 'wp-pointer' ); + } + + /** + * Print the pointer javascript data. + * + * @since 3.3.0 + * + * @param string $pointer_id The pointer ID. + * @param string $selector The HTML elements, on which the pointer should be attached. + * @param array $args Arguments to be passed to the pointer JS (see wp-pointer.js). + */ + private static function print_js( $pointer_id, $selector, $args ) { + if ( empty( $pointer_id ) || empty( $selector ) || empty( $args ) || empty( $args['content'] ) ) + return; + + ?> + + ' . __( 'New Feature: Toolbar' ) . ''; + $content .= '

    ' . __( 'We’ve combined the admin bar and the old Dashboard header into one persistent toolbar. Hover over the toolbar items to see what’s new.' ) . '

    '; + + if ( is_multisite() && is_super_admin() ) + $content .= '

    ' . __( 'Network Admin is now located in the My Sites menu.' ) . '

    '; + + WP_Internal_Pointers::print_js( 'wp330_toolbar', '#wpadminbar', array( + 'content' => $content, + 'position' => array( 'edge' => 'top', 'align' => 'center' ), + ) ); + } + + /** + * Print 'Updated Media Uploader' for 3.3.0. + * + * @since 3.3.0 + */ + public static function pointer_wp330_media_uploader() {} + + /** + * Print 'New Feature: Saving Widgets' for 3.3.0. + * + * @since 3.3.0 + */ + public static function pointer_wp330_saving_widgets() { + $content = '

    ' . __( 'New Feature: Saving Widgets' ) . '

    '; + $content .= '

    ' . __( 'If you change your mind and revert to your previous theme, we’ll put the widgets back the way you had them.' ) . '

    '; + + WP_Internal_Pointers::print_js( 'wp330_saving_widgets', '#message2', array( + 'content' => $content, + 'position' => array( 'edge' => 'top', 'align' => is_rtl() ? 'right' : 'left' ), + ) ); + } + + /** + * Print 'New Feature: Current Theme Customize Link' for 3.4.0. + * + * @since 3.4.0 + */ + public static function pointer_wp340_customize_current_theme_link() { + $content = '

    ' . __( 'New Feature: Customizer' ) . '

    '; + $content .= '

    ' . __( 'Click Customize to change the header, background, title and menus of the current theme, all in one place.' ) . '

    '; + $content .= '

    ' . __( 'Click the Live Preview links in the Available Themes list below to customize and preview another theme before activating it.' ) . '

    '; + + WP_Internal_Pointers::print_js( 'wp340_customize_current_theme_link', '#customize-current-theme-link', array( + 'content' => $content, + 'position' => array( 'edge' => 'top', 'align' => is_rtl() ? 'right' : 'left', 'offset' => is_rtl() ? '32 0' : '-32 0' ), + ) ); + } + + /** + * Print 'New Feature: Choose Image from Library' for 3.4.0. + * + * @since 3.4.0 + */ + public static function pointer_wp340_choose_image_from_library() { + $content = '

    ' . __( 'New Feature: Choose Image from Library' ) . '

    '; + $content .= '

    ' . __( 'Want to use an image you uploaded earlier? Select it from your media library instead of uploading it again.' ) . '

    '; + + WP_Internal_Pointers::print_js( 'wp340_choose_image_from_library', '#choose-from-library-link', array( + 'content' => $content, + 'position' => array( 'edge' => 'top', 'align' => is_rtl() ? 'right' : 'left', 'defer_loading' => true ), + ) ); + } + + public static function pointer_wp350_media() { + $content = '

    ' . __( 'New Media Manager' ) . '

    '; + $content .= '

    ' . __( 'Uploading files and creating image galleries has a whole new look. Check it out!' ) . '

    '; + + self::print_js( 'wp350_media', '.insert-media', array( + 'content' => $content, + 'position' => array( 'edge' => is_rtl() ? 'right' : 'left', 'align' => 'center' ), + ) ); + } + + public static function pointer_wp360_revisions() { + $content = '

    ' . __( 'Compare Revisions' ) . '

    '; + $content .= '

    ' . __( 'View, compare, and restore other versions of this content on the improved revisions screen.' ) . '

    '; + + self::print_js( 'wp360_revisions', '.misc-pub-section.misc-pub-revisions', array( + 'content' => $content, + 'position' => array( 'edge' => is_rtl() ? 'left' : 'right', 'align' => 'center', 'my' => is_rtl() ? 'left' : 'right-14px' ), + ) ); + } + + public static function pointer_wp360_locks() { + $content = '

    ' . __( 'Edit Lock' ) . '

    '; + $content .= '

    ' . __( 'Someone else is editing this. No need to refresh; the lock will disappear when they’re done.' ) . '

    '; + + if ( ! is_multi_author() ) + return; + + self::print_js( 'wp360_locks', 'tr.wp-locked .locked-indicator', array( + 'content' => $content, + 'position' => array( 'edge' => 'left', 'align' => 'left' ), + ) ); + } + + /** + * Prevents new users from seeing existing 'new feature' pointers. + * + * @since 3.3.0 + */ + public static function dismiss_pointers_for_new_users( $user_id ) { + add_user_meta( $user_id, 'dismissed_wp_pointers', 'wp330_toolbar,wp330_saving_widgets,wp340_choose_image_from_library,wp340_customize_current_theme_link,wp350_media,wp360_revisions,wp360_locks' ); + } +} + +add_action( 'admin_enqueue_scripts', array( 'WP_Internal_Pointers', 'enqueue_scripts' ) ); +add_action( 'user_register', array( 'WP_Internal_Pointers', 'dismiss_pointers_for_new_users' ) ); + +/** + * Convert a screen string to a screen object + * + * @since 3.0.0 + * + * @param string $hook_name The hook name (also known as the hook suffix) used to determine the screen. + * @return WP_Screen Screen object. + */ +function convert_to_screen( $hook_name ) { + if ( ! class_exists( 'WP_Screen' ) ) { + _doing_it_wrong( 'convert_to_screen(), add_meta_box()', __( "Likely direct inclusion of wp-admin/includes/template.php in order to use add_meta_box(). This is very wrong. Hook the add_meta_box() call into the add_meta_boxes action instead." ), '3.3' ); + return (object) array( 'id' => '_invalid', 'base' => '_are_belong_to_us' ); + } + + return WP_Screen::get( $hook_name ); +} + +/** + * Output the HTML for restoring the post data from DOM storage + * + * @since 3.6 + * @access private + */ +function _local_storage_notice() { + ?> + + 0, + 'type' => 'rating', + 'number' => 0, + ); + $r = wp_parse_args( $args, $defaults ); + extract( $r, EXTR_SKIP ); + + // Non-english decimal places when the $rating is coming from a string + $rating = str_replace( ',', '.', $rating ); + + // Convert Percentage to star rating, 0..5 in .5 increments + if ( 'percent' == $type ) { + $rating = round( $rating / 10, 0 ) / 2; + } + + // Calculate the number of each type of star needed + $full_stars = floor( $rating ); + $half_stars = ceil( $rating - $full_stars ); + $empty_stars = 5 - $full_stars - $half_stars; + + if ( $number ) { + /* translators: 1: The rating, 2: The number of ratings */ + $title = _n( '%1$s rating based on %2$s rating', '%1$s rating based on %2$s ratings', $number ); + $title = sprintf( $title, number_format_i18n( $rating, 1 ), number_format_i18n( $number ) ); + } else { + /* translators: 1: The rating */ + $title = sprintf( __( '%s rating' ), number_format_i18n( $rating, 1 ) ); + } + + echo '
    '; + echo str_repeat( '
    ', $full_stars ); + echo str_repeat( '
    ', $half_stars ); + echo str_repeat( '
    ', $empty_stars); + echo '
    '; +} \ No newline at end of file diff --git a/src/wp-admin/includes/theme-install.php b/src/wp-admin/includes/theme-install.php new file mode 100644 index 0000000..63be1d7 --- /dev/null +++ b/src/wp-admin/includes/theme-install.php @@ -0,0 +1,194 @@ + array('href' => array(), 'title' => array(), 'target' => array()), + 'abbr' => array('title' => array()), 'acronym' => array('title' => array()), + 'code' => array(), 'pre' => array(), 'em' => array(), 'strong' => array(), + 'div' => array(), 'p' => array(), 'ul' => array(), 'ol' => array(), 'li' => array(), + 'h1' => array(), 'h2' => array(), 'h3' => array(), 'h4' => array(), 'h5' => array(), 'h6' => array(), + 'img' => array('src' => array(), 'class' => array(), 'alt' => array()) +); + +$theme_field_defaults = array( 'description' => true, 'sections' => false, 'tested' => true, 'requires' => true, + 'rating' => true, 'downloaded' => true, 'downloadlink' => true, 'last_updated' => true, 'homepage' => true, + 'tags' => true, 'num_ratings' => true +); + +/** + * Retrieve list of WordPress theme features (aka theme tags) + * + * @since 2.8.0 + * + * @deprecated since 3.1.0 Use get_theme_feature_list() instead. + * + * @return array + */ +function install_themes_feature_list() { + _deprecated_function( __FUNCTION__, '3.1', 'get_theme_feature_list()' ); + + if ( !$cache = get_transient( 'wporg_theme_feature_list' ) ) + set_transient( 'wporg_theme_feature_list', array(), 3 * HOUR_IN_SECONDS ); + + if ( $cache ) + return $cache; + + $feature_list = themes_api( 'feature_list', array() ); + if ( is_wp_error( $feature_list ) ) + return array(); + + set_transient( 'wporg_theme_feature_list', $feature_list, 3 * HOUR_IN_SECONDS ); + + return $feature_list; +} + +/** + * Display search form for searching themes. + * + * @since 2.8.0 + */ +function install_theme_search_form( $type_selector = true ) { + $type = isset( $_REQUEST['type'] ) ? wp_unslash( $_REQUEST['type'] ) : 'term'; + $term = isset( $_REQUEST['s'] ) ? wp_unslash( $_REQUEST['s'] ) : ''; + if ( ! $type_selector ) + echo '

    ' . __( 'Search for themes by keyword.' ) . '

    '; + ?> +
    + + + + + + + + + + +
    + +

    +

    + +
    + + '; + + foreach ( (array) $feature_list as $feature_name => $features ) { + $feature_name = esc_html( $feature_name ); + echo '
    ' . $feature_name . '
    '; + + echo '
      '; + foreach ( $features as $feature => $feature_name ) { + $feature_name = esc_html( $feature_name ); + $feature = esc_attr($feature); +?> + +
    1. + + +
    2. + + +
    +
    + + +
    +
    + + + +

    +

    +
    + + + +
    + single_row( $theme ); +} + +/** + * Display theme content based on theme list. + * + * @since 2.8.0 + */ +function display_themes() { + global $wp_list_table; + + $wp_list_table->display(); +} +add_action('install_themes_search', 'display_themes'); +add_action('install_themes_featured', 'display_themes'); +add_action('install_themes_new', 'display_themes'); +add_action('install_themes_updated', 'display_themes'); + +/** + * Display theme information in dialog box form. + * + * @since 2.8.0 + */ +function install_theme_information() { + global $tab, $themes_allowedtags, $wp_list_table; + + $theme = themes_api( 'theme_information', array( 'slug' => wp_unslash( $_REQUEST['theme'] ) ) ); + + if ( is_wp_error( $theme ) ) + wp_die( $theme ); + + iframe_header( __('Theme Install') ); + $wp_list_table->theme_installer_single( $theme ); + iframe_footer(); + exit; +} +add_action('install_themes_pre_theme-information', 'install_theme_information'); diff --git a/src/wp-admin/includes/theme.php b/src/wp-admin/includes/theme.php new file mode 100644 index 0000000..2d98920 --- /dev/null +++ b/src/wp-admin/includes/theme.php @@ -0,0 +1,455 @@ +errors) && $wp_filesystem->errors->get_error_code() ) + return new WP_Error('fs_error', __('Filesystem error.'), $wp_filesystem->errors); + + //Get the base plugin folder + $themes_dir = $wp_filesystem->wp_themes_dir(); + if ( empty($themes_dir) ) + return new WP_Error('fs_no_themes_dir', __('Unable to locate WordPress theme directory.')); + + $themes_dir = trailingslashit( $themes_dir ); + $theme_dir = trailingslashit($themes_dir . $stylesheet); + $deleted = $wp_filesystem->delete($theme_dir, true); + + if ( ! $deleted ) + return new WP_Error('could_not_remove_theme', sprintf(__('Could not fully remove the theme %s.'), $stylesheet) ); + + // Force refresh of theme update information + delete_site_transient('update_themes'); + + return true; +} + +/** + * Get the Page Templates available in this theme + * + * @since 1.5.0 + * + * @return array Key is the template name, value is the filename of the template + */ +function get_page_templates() { + return array_flip( wp_get_theme()->get_page_templates() ); +} + +/** + * Tidies a filename for url display by the theme editor. + * + * @since 2.9.0 + * @access private + * + * @param string $fullpath Full path to the theme file + * @param string $containingfolder Path of the theme parent folder + * @return string + */ +function _get_template_edit_filename($fullpath, $containingfolder) { + return str_replace(dirname(dirname( $containingfolder )) , '', $fullpath); +} + +/** + * Check if there is an update for a theme available. + * + * Will display link, if there is an update available. + * + * @since 2.7.0 + * @see get_theme_update_available() + * + * @param object $theme Theme data object. + */ +function theme_update_available( $theme ) { + echo get_theme_update_available( $theme ); +} + +/** + * Retrieve the update link if there is a theme update available. + * + * Will return a link if there is an update available. + * + * @since 3.8.0 + * + * @param WP_Theme $theme WP_Theme object. + * @return string|bool HTML for the update link, or false if invalid info was passed. + */ +function get_theme_update_available( $theme ) { + static $themes_update; + + if ( !current_user_can('update_themes' ) ) + return false; + + if ( !isset($themes_update) ) + $themes_update = get_site_transient('update_themes'); + + if ( ! is_a( $theme, 'WP_Theme' ) ) + return false; + + $stylesheet = $theme->get_stylesheet(); + + $html = ''; + + if ( isset($themes_update->response[ $stylesheet ]) ) { + $update = $themes_update->response[ $stylesheet ]; + $theme_name = $theme->display('Name'); + $details_url = add_query_arg(array('TB_iframe' => 'true', 'width' => 1024, 'height' => 800), $update['url']); //Theme browser inside WP? replace this, Also, theme preview JS will override this on the available list. + $update_url = wp_nonce_url( admin_url( 'update.php?action=upgrade-theme&theme=' . urlencode( $stylesheet ) ), 'upgrade-theme_' . $stylesheet ); + $update_onclick = 'onclick="if ( confirm(\'' . esc_js( __("Updating this theme will lose any customizations you have made. 'Cancel' to stop, 'OK' to update.") ) . '\') ) {return true;}return false;"'; + + if ( !is_multisite() ) { + if ( ! current_user_can('update_themes') ) { + $html = sprintf( '

    ' . __('There is a new version of %1$s available. View version %3$s details.') . '

    ', $theme_name, $details_url, $update['new_version']); + } else if ( empty( $update['package'] ) ) { + $html = sprintf( '

    ' . __('There is a new version of %1$s available. View version %3$s details. Automatic update is unavailable for this theme.') . '

    ', $theme_name, $details_url, $update['new_version']); + } else { + $html = sprintf( '

    ' . __('There is a new version of %1$s available. View version %3$s details or update now.') . '

    ', $theme_name, $details_url, $update['new_version'], $update_url, $update_onclick ); + } + } + } + + return $html; +} + +/** + * Retrieve list of WordPress theme features (aka theme tags) + * + * @since 3.1.0 + * + * @param bool $api Optional. Whether try to fetch tags from the WP.org API. Defaults to true. + * @return array Array of features keyed by category with translations keyed by slug. + */ +function get_theme_feature_list( $api = true ) { + // Hard-coded list is used if api not accessible. + $features = array( + __( 'Colors' ) => array( + 'black' => __( 'Black' ), + 'blue' => __( 'Blue' ), + 'brown' => __( 'Brown' ), + 'gray' => __( 'Gray' ), + 'green' => __( 'Green' ), + 'orange' => __( 'Orange' ), + 'pink' => __( 'Pink' ), + 'purple' => __( 'Purple' ), + 'red' => __( 'Red' ), + 'silver' => __( 'Silver' ), + 'tan' => __( 'Tan' ), + 'white' => __( 'White' ), + 'yellow' => __( 'Yellow' ), + 'dark' => __( 'Dark' ), + 'light' => __( 'Light' ), + ), + + __( 'Columns' ) => array( + 'one-column' => __( 'One Column' ), + 'two-columns' => __( 'Two Columns' ), + 'three-columns' => __( 'Three Columns' ), + 'four-columns' => __( 'Four Columns' ), + 'left-sidebar' => __( 'Left Sidebar' ), + 'right-sidebar' => __( 'Right Sidebar' ), + ), + + __( 'Layout' ) => array( + 'fixed-layout' => __( 'Fixed Layout' ), + 'fluid-layout' => __( 'Fluid Layout' ), + 'responsive-layout' => __( 'Responsive Layout' ), + ), + + __( 'Features' ) => array( + 'accessibility-ready' => __( 'Accessibility Ready' ), + 'blavatar' => __( 'Blavatar' ), + 'buddypress' => __( 'BuddyPress' ), + 'custom-background' => __( 'Custom Background' ), + 'custom-colors' => __( 'Custom Colors' ), + 'custom-header' => __( 'Custom Header' ), + 'custom-menu' => __( 'Custom Menu' ), + 'editor-style' => __( 'Editor Style' ), + 'featured-image-header' => __( 'Featured Image Header' ), + 'featured-images' => __( 'Featured Images' ), + 'flexible-header' => __( 'Flexible Header' ), + 'front-page-post-form' => __( 'Front Page Posting' ), + 'full-width-template' => __( 'Full Width Template' ), + 'microformats' => __( 'Microformats' ), + 'post-formats' => __( 'Post Formats' ), + 'rtl-language-support' => __( 'RTL Language Support' ), + 'sticky-post' => __( 'Sticky Post' ), + 'theme-options' => __( 'Theme Options' ), + 'threaded-comments' => __( 'Threaded Comments' ), + 'translation-ready' => __( 'Translation Ready' ), + ), + + __( 'Subject' ) => array( + 'holiday' => __( 'Holiday' ), + 'photoblogging' => __( 'Photoblogging' ), + 'seasonal' => __( 'Seasonal' ), + ) + ); + + if ( ! $api || ! current_user_can( 'install_themes' ) ) + return $features; + + if ( !$feature_list = get_site_transient( 'wporg_theme_feature_list' ) ) + set_site_transient( 'wporg_theme_feature_list', array(), 10800); + + if ( !$feature_list ) { + $feature_list = themes_api( 'feature_list', array() ); + if ( is_wp_error( $feature_list ) ) + return $features; + } + + if ( !$feature_list ) + return $features; + + set_site_transient( 'wporg_theme_feature_list', $feature_list, 10800 ); + + $category_translations = array( + 'Colors' => __( 'Colors' ), + 'Columns' => __( 'Columns' ), + 'Layout' => __( 'Layout' ), + 'Features' => __( 'Features' ), + 'Subject' => __( 'Subject' ) + ); + + // Loop over the wporg canonical list and apply translations + $wporg_features = array(); + foreach ( (array) $feature_list as $feature_category => $feature_items ) { + if ( isset($category_translations[$feature_category]) ) + $feature_category = $category_translations[$feature_category]; + $wporg_features[$feature_category] = array(); + + foreach ( $feature_items as $feature ) { + if ( isset($features[$feature_category][$feature]) ) + $wporg_features[$feature_category][$feature] = $features[$feature_category][$feature]; + else + $wporg_features[$feature_category][$feature] = $feature; + } + } + + return $wporg_features; +} + +/** + * Retrieve theme installer pages from WordPress Themes API. + * + * It is possible for a theme to override the Themes API result with three + * filters. Assume this is for themes, which can extend on the Theme Info to + * offer more choices. This is very powerful and must be used with care, when + * overridding the filters. + * + * The first filter, 'themes_api_args', is for the args and gives the action as + * the second parameter. The hook for 'themes_api_args' must ensure that an + * object is returned. + * + * The second filter, 'themes_api', is the result that would be returned. + * + * @since 2.8.0 + * + * @param string $action The requested action. Likely values are 'theme_information', + * 'feature_list', or 'query_themes'. + * @param array|object $args Optional. Arguments to serialize for the Theme Info API. + * @return mixed + */ +function themes_api( $action, $args = null ) { + + if ( is_array($args) ) + $args = (object)$args; + + if ( !isset($args->per_page) ) + $args->per_page = 24; + /** + * Filter arguments used to query for installer pages from the WordPress.org Themes API. + * + * Important: An object MUST be returned to this filter. + * + * @since 2.8.0 + * + * @param object $args Arguments used to query for installer pages from the WordPress.org Themes API. + * @param string $action Requested action. Likely values are 'theme_information', + * 'feature_list', or 'query_themes'. + */ + $args = apply_filters( 'themes_api_args', $args, $action ); + + /** + * Filter whether to override the WordPress.org Themes API. + * + * Returning a value of true to this filter allows a theme to completely + * override the built-in WordPress.org API. + * + * @since 2.8.0 + * + * @param bool $bool Whether to override the WordPress.org Themes API. Default false. + * @param string $action Requested action. Likely values are 'theme_information', + * 'feature_list', or 'query_themes'. + * @param object $args Arguments used to query for installer pages from the Themes API. + */ + $res = apply_filters( 'themes_api', false, $action, $args ); + + if ( ! $res ) { + $url = $http_url = 'http://api.wordpress.org/themes/info/1.0/'; + if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) + $url = set_url_scheme( $url, 'https' ); + + $args = array( + 'body' => array( + 'action' => $action, + 'request' => serialize( $args ) + ) + ); + $request = wp_remote_post( $url, $args ); + + if ( $ssl && is_wp_error( $request ) ) { + trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)', headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); + $request = wp_remote_post( $http_url, $args ); + } + + if ( is_wp_error($request) ) { + $res = new WP_Error('themes_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ), $request->get_error_message() ); + } else { + $res = maybe_unserialize( wp_remote_retrieve_body( $request ) ); + if ( ! is_object( $res ) && ! is_array( $res ) ) + $res = new WP_Error('themes_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ), wp_remote_retrieve_body( $request ) ); + } + } + + /** + * Filter the returned WordPress.org Themes API response. + * + * @since 2.8.0 + * + * @param array|object $res WordPress.org Themes API response. + * @param string $action Requested action. Likely values are 'theme_information', + * 'feature_list', or 'query_themes'. + * @param object $args Arguments used to query for installer pages from the WordPress.org Themes API. + */ + return apply_filters( 'themes_api_result', $res, $action, $args ); +} + +/** + * Prepare themes for JavaScript. + * + * @since 3.8.0 + * + * @param array $themes Optional. Array of WP_Theme objects to prepare. + * Defaults to all allowed themes. + * + * @return array An associative array of theme data, sorted by name. + */ +function wp_prepare_themes_for_js( $themes = null ) { + $current_theme = get_stylesheet(); + + // Make sure the current theme is listed first. + $prepared_themes = array( $current_theme => array() ); + + if ( null === $themes ) { + $themes = wp_get_themes( array( 'allowed' => true ) ); + if ( ! isset( $themes[ $current_theme ] ) ) { + $themes[ $current_theme ] = wp_get_theme(); + } + } + + $updates = array(); + if ( current_user_can( 'update_themes' ) ) { + $updates_transient = get_site_transient( 'update_themes' ); + if ( isset( $updates_transient->response ) ) { + $updates = $updates_transient->response; + } + } + + WP_Theme::sort_by_name( $themes ); + foreach ( $themes as $theme ) { + $parent = false; + if ( $theme->parent() ) { + $parent = $theme->parent()->display( 'Name' ); + } + + $slug = $theme->get_stylesheet(); + $encoded_slug = urlencode( $slug ); + + $prepared_themes[ $slug ] = array( + 'id' => $slug, + 'name' => $theme->display( 'Name' ), + 'screenshot' => array( $theme->get_screenshot() ), // @todo multiple + 'description' => $theme->display( 'Description' ), + 'author' => $theme->display( 'Author', false, true ), + 'authorAndUri' => $theme->display( 'Author' ), + 'version' => $theme->display( 'Version' ), + 'tags' => $theme->display( 'Tags' ), + 'parent' => $parent, + 'active' => $slug === $current_theme, + 'hasUpdate' => isset( $updates[ $slug ] ), + 'update' => get_theme_update_available( $theme ), + 'actions' => array( + 'activate' => current_user_can( 'switch_themes' ) ? wp_nonce_url( admin_url( 'themes.php?action=activate&stylesheet=' . $encoded_slug ), 'switch-theme_' . $slug ) : null, + 'customize'=> current_user_can( 'edit_theme_options' ) ? wp_customize_url( $slug ) : null, + 'preview' => add_query_arg( array( + 'preview' => 1, + 'template' => urlencode( $theme->get_template() ), + 'stylesheet' => urlencode( $slug ), + 'preview_iframe' => true, + 'TB_iframe' => true, + ), home_url( '/' ) ), + 'delete' => current_user_can( 'delete_themes' ) ? wp_nonce_url( admin_url( 'themes.php?action=delete&stylesheet=' . $encoded_slug ), 'delete-theme_' . $slug ) : null, + ), + ); + } + + /** + * Filter the themes prepared for JavaScript, for themes.php. + * + * Could be useful for changing the order, which is by name by default. + * + * @since 3.8.0 + * + * @param array $prepared_themes Array of themes. + */ + $prepared_themes = apply_filters( 'wp_prepare_themes_for_js', $prepared_themes ); + return array_values( $prepared_themes ); +} \ No newline at end of file diff --git a/src/wp-admin/includes/update-core.php b/src/wp-admin/includes/update-core.php new file mode 100644 index 0000000..cb41afe --- /dev/null +++ b/src/wp-admin/includes/update-core.php @@ -0,0 +1,1053 @@ + Introduced version + * Directories should be noted by suffixing it with a trailing slash (/) + * + * @since 3.2.0 + * @global array $_new_bundled_files + * @var array + * @name $_new_bundled_files + */ +global $_new_bundled_files; + +$_new_bundled_files = array( + 'plugins/akismet/' => '2.0', + 'themes/twentyten/' => '3.0', + 'themes/twentyeleven/' => '3.2', + 'themes/twentytwelve/' => '3.5', + 'themes/twentythirteen/' => '3.6', + 'themes/twentyfourteen/' => '3.8', +); + +/** + * Upgrade the core of WordPress. + * + * This will create a .maintenance file at the base of the WordPress directory + * to ensure that people can not access the web site, when the files are being + * copied to their locations. + * + * The files in the {@link $_old_files} list will be removed and the new files + * copied from the zip file after the database is upgraded. + * + * The files in the {@link $_new_bundled_files} list will be added to the installation + * if the version is greater than or equal to the old version being upgraded. + * + * The steps for the upgrader for after the new release is downloaded and + * unzipped is: + * 1. Test unzipped location for select files to ensure that unzipped worked. + * 2. Create the .maintenance file in current WordPress base. + * 3. Copy new WordPress directory over old WordPress files. + * 4. Upgrade WordPress to new version. + * 4.1. Copy all files/folders other than wp-content + * 4.2. Copy any language files to WP_LANG_DIR (which may differ from WP_CONTENT_DIR + * 4.3. Copy any new bundled themes/plugins to their respective locations + * 5. Delete new WordPress directory path. + * 6. Delete .maintenance file. + * 7. Remove old files. + * 8. Delete 'update_core' option. + * + * There are several areas of failure. For instance if PHP times out before step + * 6, then you will not be able to access any portion of your site. Also, since + * the upgrade will not continue where it left off, you will not be able to + * automatically remove old files and remove the 'update_core' option. This + * isn't that bad. + * + * If the copy of the new WordPress over the old fails, then the worse is that + * the new WordPress directory will remain. + * + * If it is assumed that every file will be copied over, including plugins and + * themes, then if you edit the default theme, you should rename it, so that + * your changes remain. + * + * @since 2.7.0 + * + * @param string $from New release unzipped path. + * @param string $to Path to old WordPress installation. + * @return WP_Error|null WP_Error on failure, null on success. + */ +function update_core($from, $to) { + global $wp_filesystem, $_old_files, $_new_bundled_files, $wpdb; + + @set_time_limit( 300 ); + + // Sanity check the unzipped distribution + apply_filters( 'update_feedback', __('Verifying the unpacked files…') ); + $distro = ''; + $roots = array( '/wordpress/', '/wordpress-mu/' ); + foreach ( $roots as $root ) { + if ( $wp_filesystem->exists( $from . $root . 'readme.html' ) && $wp_filesystem->exists( $from . $root . 'wp-includes/version.php' ) ) { + $distro = $root; + break; + } + } + if ( ! $distro ) { + $wp_filesystem->delete( $from, true ); + return new WP_Error( 'insane_distro', __('The update could not be unpacked') ); + } + + // Import $wp_version, $required_php_version, and $required_mysql_version from the new version + // $wp_filesystem->wp_content_dir() returned unslashed pre-2.8 + $versions_file = trailingslashit( $wp_filesystem->wp_content_dir() ) . 'upgrade/version-current.php'; + if ( ! $wp_filesystem->copy( $from . $distro . 'wp-includes/version.php', $versions_file ) ) { + $wp_filesystem->delete( $from, true ); + return new WP_Error( 'copy_failed_for_version_file', __( 'The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.' ), 'wp-includes/version.php' ); + } + + $wp_filesystem->chmod( $versions_file, FS_CHMOD_FILE ); + require( WP_CONTENT_DIR . '/upgrade/version-current.php' ); + $wp_filesystem->delete( $versions_file ); + + $php_version = phpversion(); + $mysql_version = $wpdb->db_version(); + $old_wp_version = $GLOBALS['wp_version']; // The version of WordPress we're updating from + $development_build = ( false !== strpos( $old_wp_version . $wp_version, '-' ) ); // a dash in the version indicates a Development release + $php_compat = version_compare( $php_version, $required_php_version, '>=' ); + if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) + $mysql_compat = true; + else + $mysql_compat = version_compare( $mysql_version, $required_mysql_version, '>=' ); + + if ( !$mysql_compat || !$php_compat ) + $wp_filesystem->delete($from, true); + + if ( !$mysql_compat && !$php_compat ) + return new WP_Error( 'php_mysql_not_compatible', sprintf( __('The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s.'), $wp_version, $required_php_version, $required_mysql_version, $php_version, $mysql_version ) ); + elseif ( !$php_compat ) + return new WP_Error( 'php_not_compatible', sprintf( __('The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s.'), $wp_version, $required_php_version, $php_version ) ); + elseif ( !$mysql_compat ) + return new WP_Error( 'mysql_not_compatible', sprintf( __('The update cannot be installed because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s.'), $wp_version, $required_mysql_version, $mysql_version ) ); + + apply_filters( 'update_feedback', __( 'Preparing to install the latest version…' ) ); + + // Don't copy wp-content, we'll deal with that below + $skip = array( 'wp-content' ); + $check_is_writable = array(); + + // Check to see which files don't really need updating - only available for 3.7 and higher + if ( function_exists( 'get_core_checksums' ) ) { + // Find the local version of the working directory + $working_dir_local = WP_CONTENT_DIR . '/upgrade/' . basename( $from ) . $distro; + + $checksums = get_core_checksums( $wp_version, isset( $wp_local_package ) ? $wp_local_package : 'en_US' ); + if ( is_array( $checksums ) && isset( $checksums[ $wp_version ] ) ) + $checksums = $checksums[ $wp_version ]; // Compat code for 3.7-beta2 + if ( is_array( $checksums ) ) { + foreach( $checksums as $file => $checksum ) { + if ( 'wp-content' == substr( $file, 0, 10 ) ) + continue; + if ( ! file_exists( ABSPATH . $file ) ) + continue; + if ( ! file_exists( $working_dir_local . $file ) ) + continue; + if ( md5_file( ABSPATH . $file ) === $checksum ) + $skip[] = $file; + else + $check_is_writable[ $file ] = ABSPATH . $file; + } + } + } + + // If we're using the direct method, we can predict write failures that are due to permissions. + if ( $check_is_writable && 'direct' === $wp_filesystem->method ) { + $files_writable = array_filter( $check_is_writable, array( $wp_filesystem, 'is_writable' ) ); + if ( $files_writable !== $check_is_writable ) { + $files_not_writable = array_diff_key( $check_is_writable, $files_writable ); + foreach ( $files_not_writable as $relative_file_not_writable => $file_not_writable ) { + // If the writable check failed, chmod file to 0644 and try again, same as copy_dir(). + $wp_filesystem->chmod( $file_not_writable, FS_CHMOD_FILE ); + if ( $wp_filesystem->is_writable( $file_not_writable ) ) + unset( $files_not_writable[ $relative_file_not_writable ] ); + } + + // Store package-relative paths (the key) of non-writable files in the WP_Error object. + $error_data = version_compare( $old_wp_version, '3.7-beta2', '>' ) ? array_keys( $files_not_writable ) : ''; + + if ( $files_not_writable ) + return new WP_Error( 'files_not_writable', __( 'The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.' ), implode( ', ', $error_data ) ); + } + } + + apply_filters( 'update_feedback', __( 'Enabling Maintenance mode…' ) ); + // Create maintenance file to signal that we are upgrading + $maintenance_string = ''; + $maintenance_file = $to . '.maintenance'; + $wp_filesystem->delete($maintenance_file); + $wp_filesystem->put_contents($maintenance_file, $maintenance_string, FS_CHMOD_FILE); + + apply_filters( 'update_feedback', __( 'Copying the required files…' ) ); + // Copy new versions of WP files into place. + $result = _copy_dir( $from . $distro, $to, $skip ); + if ( is_wp_error( $result ) ) + $result = new WP_Error( $result->get_error_code(), $result->get_error_message(), substr( $result->get_error_data(), strlen( $to ) ) ); + + // Check to make sure everything copied correctly, ignoring the contents of wp-content + $skip = array( 'wp-content' ); + $failed = array(); + if ( isset( $checksums ) && is_array( $checksums ) ) { + foreach ( $checksums as $file => $checksum ) { + if ( 'wp-content' == substr( $file, 0, 10 ) ) + continue; + if ( ! file_exists( $working_dir_local . $file ) ) + continue; + if ( file_exists( ABSPATH . $file ) && md5_file( ABSPATH . $file ) == $checksum ) + $skip[] = $file; + else + $failed[] = $file; + } + } + + // Some files didn't copy properly + if ( ! empty( $failed ) ) { + $total_size = 0; + foreach ( $failed as $file ) { + if ( file_exists( $working_dir_local . $file ) ) + $total_size += filesize( $working_dir_local . $file ); + } + + // If we don't have enough free space, it isn't worth trying again. + // Unlikely to be hit due to the check in unzip_file(). + $available_space = @disk_free_space( ABSPATH ); + if ( $available_space && $total_size >= $available_space ) { + $result = new WP_Error( 'disk_full', __( 'There is not enough free disk space to complete the update.' ) ); + } else { + $result = _copy_dir( $from . $distro, $to, $skip ); + if ( is_wp_error( $result ) ) + $result = new WP_Error( $result->get_error_code() . '_retry', $result->get_error_message(), substr( $result->get_error_data(), strlen( $to ) ) ); + } + } + + // Custom Content Directory needs updating now. + // Copy Languages + if ( !is_wp_error($result) && $wp_filesystem->is_dir($from . $distro . 'wp-content/languages') ) { + if ( WP_LANG_DIR != ABSPATH . WPINC . '/languages' || @is_dir(WP_LANG_DIR) ) + $lang_dir = WP_LANG_DIR; + else + $lang_dir = WP_CONTENT_DIR . '/languages'; + + if ( !@is_dir($lang_dir) && 0 === strpos($lang_dir, ABSPATH) ) { // Check the language directory exists first + $wp_filesystem->mkdir($to . str_replace(ABSPATH, '', $lang_dir), FS_CHMOD_DIR); // If it's within the ABSPATH we can handle it here, otherwise they're out of luck. + clearstatcache(); // for FTP, Need to clear the stat cache + } + + if ( @is_dir($lang_dir) ) { + $wp_lang_dir = $wp_filesystem->find_folder($lang_dir); + if ( $wp_lang_dir ) { + $result = copy_dir($from . $distro . 'wp-content/languages/', $wp_lang_dir); + if ( is_wp_error( $result ) ) + $result = new WP_Error( $result->get_error_code() . '_languages', $result->get_error_message(), substr( $result->get_error_data(), strlen( $wp_lang_dir ) ) ); + } + } + } + + apply_filters( 'update_feedback', __( 'Disabling Maintenance mode…' ) ); + // Remove maintenance file, we're done with potential site-breaking changes + $wp_filesystem->delete( $maintenance_file ); + + // 3.5 -> 3.5+ - an empty twentytwelve directory was created upon upgrade to 3.5 for some users, preventing installation of Twenty Twelve. + if ( '3.5' == $old_wp_version ) { + if ( is_dir( WP_CONTENT_DIR . '/themes/twentytwelve' ) && ! file_exists( WP_CONTENT_DIR . '/themes/twentytwelve/style.css' ) ) { + $wp_filesystem->delete( $wp_filesystem->wp_themes_dir() . 'twentytwelve/' ); + } + } + + // Copy New bundled plugins & themes + // This gives us the ability to install new plugins & themes bundled with future versions of WordPress whilst avoiding the re-install upon upgrade issue. + // $development_build controls us overwriting bundled themes and plugins when a non-stable release is being updated + if ( !is_wp_error($result) && ( ! defined('CORE_UPGRADE_SKIP_NEW_BUNDLED') || ! CORE_UPGRADE_SKIP_NEW_BUNDLED ) ) { + foreach ( (array) $_new_bundled_files as $file => $introduced_version ) { + // If a $development_build or if $introduced version is greater than what the site was previously running + if ( $development_build || version_compare( $introduced_version, $old_wp_version, '>' ) ) { + $directory = ('/' == $file[ strlen($file)-1 ]); + list($type, $filename) = explode('/', $file, 2); + + // Check to see if the bundled items exist before attempting to copy them + if ( ! $wp_filesystem->exists( $from . $distro . 'wp-content/' . $file ) ) + continue; + + if ( 'plugins' == $type ) + $dest = $wp_filesystem->wp_plugins_dir(); + elseif ( 'themes' == $type ) + $dest = trailingslashit($wp_filesystem->wp_themes_dir()); // Back-compat, ::wp_themes_dir() did not return trailingslash'd pre-3.2 + else + continue; + + if ( ! $directory ) { + if ( ! $development_build && $wp_filesystem->exists( $dest . $filename ) ) + continue; + + if ( ! $wp_filesystem->copy($from . $distro . 'wp-content/' . $file, $dest . $filename, FS_CHMOD_FILE) ) + $result = new WP_Error( "copy_failed_for_new_bundled_$type", __( 'Could not copy file.' ), $dest . $filename ); + } else { + if ( ! $development_build && $wp_filesystem->is_dir( $dest . $filename ) ) + continue; + + $wp_filesystem->mkdir($dest . $filename, FS_CHMOD_DIR); + $_result = copy_dir( $from . $distro . 'wp-content/' . $file, $dest . $filename); + + // If a error occurs partway through this final step, keep the error flowing through, but keep process going. + if ( is_wp_error( $_result ) ) { + if ( ! is_wp_error( $result ) ) + $result = new WP_Error; + $result->add( $_result->get_error_code() . "_$type", $_result->get_error_message(), substr( $_result->get_error_data(), strlen( $dest ) ) ); + } + } + } + } //end foreach + } + + // Handle $result error from the above blocks + if ( is_wp_error($result) ) { + $wp_filesystem->delete($from, true); + return $result; + } + + // Remove old files + foreach ( $_old_files as $old_file ) { + $old_file = $to . $old_file; + if ( !$wp_filesystem->exists($old_file) ) + continue; + $wp_filesystem->delete($old_file, true); + } + + // Upgrade DB with separate request + apply_filters('update_feedback', __('Upgrading database…')); + $db_upgrade_url = admin_url('upgrade.php?step=upgrade_db'); + wp_remote_post($db_upgrade_url, array('timeout' => 60)); + + // Clear the cache to prevent an update_option() from saving a stale db_version to the cache + wp_cache_flush(); + // (Not all cache backends listen to 'flush') + wp_cache_delete( 'alloptions', 'options' ); + + // Remove working directory + $wp_filesystem->delete($from, true); + + // Force refresh of update information + if ( function_exists('delete_site_transient') ) + delete_site_transient('update_core'); + else + delete_option('update_core'); + + // If we made it this far: + do_action( '_core_updated_successfully', $wp_version ); + + // Clear the option that blocks auto updates after failures, now that we've been successful. + if ( function_exists( 'delete_site_option' ) ) + delete_site_option( 'auto_core_update_failed' ); + + return $wp_version; +} + +/** + * Copies a directory from one location to another via the WordPress Filesystem Abstraction. + * Assumes that WP_Filesystem() has already been called and setup. + * + * This is a temporary function for the 3.1 -> 3.2 upgrade, as well as for those upgrading to + * 3.7+ + * + * @ignore + * @since 3.2.0 + * @since 3.7.0 Updated not to use a regular expression for the skip list + * @see copy_dir() + * + * @param string $from source directory + * @param string $to destination directory + * @param array $skip_list a list of files/folders to skip copying + * @return mixed WP_Error on failure, True on success. + */ +function _copy_dir($from, $to, $skip_list = array() ) { + global $wp_filesystem; + + $dirlist = $wp_filesystem->dirlist($from); + + $from = trailingslashit($from); + $to = trailingslashit($to); + + foreach ( (array) $dirlist as $filename => $fileinfo ) { + if ( in_array( $filename, $skip_list ) ) + continue; + + if ( 'f' == $fileinfo['type'] ) { + if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) ) { + // If copy failed, chmod file to 0644 and try again. + $wp_filesystem->chmod( $to . $filename, FS_CHMOD_FILE ); + if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) ) + return new WP_Error( 'copy_failed__copy_dir', __( 'Could not copy file.' ), $to . $filename ); + } + } elseif ( 'd' == $fileinfo['type'] ) { + if ( !$wp_filesystem->is_dir($to . $filename) ) { + if ( !$wp_filesystem->mkdir($to . $filename, FS_CHMOD_DIR) ) + return new WP_Error( 'mkdir_failed__copy_dir', __( 'Could not create directory.' ), $to . $filename ); + } + + // generate the $sub_skip_list for the subdirectory as a sub-set of the existing $skip_list + $sub_skip_list = array(); + foreach ( $skip_list as $skip_item ) { + if ( 0 === strpos( $skip_item, $filename . '/' ) ) + $sub_skip_list[] = preg_replace( '!^' . preg_quote( $filename, '!' ) . '/!i', '', $skip_item ); + } + + $result = _copy_dir($from . $filename, $to . $filename, $sub_skip_list); + if ( is_wp_error($result) ) + return $result; + } + } + return true; +} + +/** + * Redirect to the About WordPress page after a successful upgrade. + * + * This function is only needed when the existing install is older than 3.4.0. + * + * @since 3.3.0 + * + */ +function _redirect_to_about_wordpress( $new_version ) { + global $wp_version, $pagenow, $action; + + if ( version_compare( $wp_version, '3.4-RC1', '>=' ) ) + return; + + // Ensure we only run this on the update-core.php page. The Core_Upgrader may be used in other contexts. + if ( 'update-core.php' != $pagenow ) + return; + + if ( 'do-core-upgrade' != $action && 'do-core-reinstall' != $action ) + return; + + // Load the updated default text localization domain for new strings + load_default_textdomain(); + + // See do_core_upgrade() + show_message( __('WordPress updated successfully') ); + + // self_admin_url() won't exist when upgrading from <= 3.0, so relative URLs are intentional. + show_message( '' . sprintf( __( 'Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click here.' ), $new_version, 'about.php?updated' ) . '' ); + show_message( '' . sprintf( __( 'Welcome to WordPress %1$s. Learn more.' ), $new_version, 'about.php?updated' ) . '' ); + echo '
    '; + ?> + + 'latest' ); + return $updates[0]; +} + +/** + * Get available core updates + * + * @param array $options Set $options['dismissed'] to true to show dismissed upgrades too, + * set $options['available'] to false to skip not-dismissed updates. + * @return array Array of the update objects + */ +function get_core_updates( $options = array() ) { + $options = array_merge( array( 'available' => true, 'dismissed' => false ), $options ); + $dismissed = get_site_option( 'dismissed_update_core' ); + + if ( ! is_array( $dismissed ) ) + $dismissed = array(); + + $from_api = get_site_transient( 'update_core' ); + + if ( ! isset( $from_api->updates ) || ! is_array( $from_api->updates ) ) + return false; + + $updates = $from_api->updates; + $result = array(); + foreach ( $updates as $update ) { + if ( $update->response == 'autoupdate' ) + continue; + + if ( array_key_exists( $update->current . '|' . $update->locale, $dismissed ) ) { + if ( $options['dismissed'] ) { + $update->dismissed = true; + $result[] = $update; + } + } else { + if ( $options['available'] ) { + $update->dismissed = false; + $result[] = $update; + } + } + } + return $result; +} + +/** + * Gets the best available (and enabled) Auto-Update for WordPress Core. + * + * If there's 1.2.3 and 1.3 on offer, it'll choose 1.3 if the install allows it, else, 1.2.3 + * + * @since 3.7.0 + * + * @return bool|array False on failure, otherwise the core update offering. + */ +function find_core_auto_update() { + $updates = get_site_transient( 'update_core' ); + if ( ! $updates || empty( $updates->updates ) ) + return false; + + include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + + $auto_update = false; + $upgrader = new WP_Automatic_Updater; + foreach ( $updates->updates as $update ) { + if ( 'autoupdate' != $update->response ) + continue; + + if ( ! $upgrader->should_update( 'core', $update, ABSPATH ) ) + continue; + + if ( ! $auto_update || version_compare( $update->current, $auto_update->current, '>' ) ) + $auto_update = $update; + } + return $auto_update; +} + +/** + * Gets and caches the checksums for the given version of WordPress. + * + * @since 3.7.0 + * + * @param string $version Version string to query. + * @param string $locale Locale to query. + * @return bool|array False on failure. An array of checksums on success. + */ +function get_core_checksums( $version, $locale ) { + $return = array(); + + $url = $http_url = 'http://api.wordpress.org/core/checksums/1.0/?' . http_build_query( compact( 'version', 'locale' ), null, '&' ); + + if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) + $url = set_url_scheme( $url, 'https' ); + + $options = array( + 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3 ), + ); + + $response = wp_remote_get( $url, $options ); + if ( $ssl && is_wp_error( $response ) ) { + trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)', headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); + $response = wp_remote_get( $http_url, $options ); + } + + if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) + return false; + + $body = trim( wp_remote_retrieve_body( $response ) ); + $body = json_decode( $body, true ); + + if ( ! is_array( $body ) || ! isset( $body['checksums'] ) || ! is_array( $body['checksums'] ) ) + return false; + + return $body['checksums']; +} + +function dismiss_core_update( $update ) { + $dismissed = get_site_option( 'dismissed_update_core' ); + $dismissed[ $update->current . '|' . $update->locale ] = true; + return update_site_option( 'dismissed_update_core', $dismissed ); +} + +function undismiss_core_update( $version, $locale ) { + $dismissed = get_site_option( 'dismissed_update_core' ); + $key = $version . '|' . $locale; + + if ( ! isset( $dismissed[$key] ) ) + return false; + + unset( $dismissed[$key] ); + return update_site_option( 'dismissed_update_core', $dismissed ); +} + +function find_core_update( $version, $locale ) { + $from_api = get_site_transient( 'update_core' ); + + if ( ! isset( $from_api->updates ) || ! is_array( $from_api->updates ) ) + return false; + + $updates = $from_api->updates; + foreach ( $updates as $update ) { + if ( $update->current == $version && $update->locale == $locale ) + return $update; + } + return false; +} + +function core_update_footer( $msg = '' ) { + if ( !current_user_can('update_core') ) + return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); + + $cur = get_preferred_from_update_core(); + if ( ! is_object( $cur ) ) + $cur = new stdClass; + + if ( ! isset( $cur->current ) ) + $cur->current = ''; + + if ( ! isset( $cur->url ) ) + $cur->url = ''; + + if ( ! isset( $cur->response ) ) + $cur->response = ''; + + switch ( $cur->response ) { + case 'development' : + return sprintf( __( 'You are using a development version (%1$s). Cool! Please stay updated.' ), get_bloginfo( 'version', 'display' ), network_admin_url( 'update-core.php' ) ); + break; + + case 'upgrade' : + return sprintf( ''.__( 'Get Version %2$s' ).'', network_admin_url( 'update-core.php' ), $cur->current); + break; + + case 'latest' : + default : + return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); + break; + } +} +add_filter( 'update_footer', 'core_update_footer' ); + +function update_nag() { + if ( is_multisite() && !current_user_can('update_core') ) + return false; + + global $pagenow; + + if ( 'update-core.php' == $pagenow ) + return; + + $cur = get_preferred_from_update_core(); + + if ( ! isset( $cur->response ) || $cur->response != 'upgrade' ) + return false; + + if ( current_user_can('update_core') ) { + $msg = sprintf( __('WordPress %1$s is available! Please update now.'), $cur->current, network_admin_url( 'update-core.php' ) ); + } else { + $msg = sprintf( __('WordPress %1$s is available! Please notify the site administrator.'), $cur->current ); + } + echo "
    $msg
    "; +} +add_action( 'admin_notices', 'update_nag', 3 ); +add_action( 'network_admin_notices', 'update_nag', 3 ); + +// Called directly from dashboard +function update_right_now_message() { + $msg = sprintf( __( 'You are using WordPress %s.' ), get_bloginfo( 'version', 'display' ) ); + + if ( current_user_can('update_core') ) { + $cur = get_preferred_from_update_core(); + + if ( isset( $cur->response ) && $cur->response == 'upgrade' ) + $msg .= " " . sprintf( __('Update to %s'), $cur->current ? $cur->current : __( 'Latest' ) ) . ''; + } + + echo "$msg"; +} + +function get_plugin_updates() { + $all_plugins = get_plugins(); + $upgrade_plugins = array(); + $current = get_site_transient( 'update_plugins' ); + foreach ( (array)$all_plugins as $plugin_file => $plugin_data) { + if ( isset( $current->response[ $plugin_file ] ) ) { + $upgrade_plugins[ $plugin_file ] = (object) $plugin_data; + $upgrade_plugins[ $plugin_file ]->update = $current->response[ $plugin_file ]; + } + } + + return $upgrade_plugins; +} + +function wp_plugin_update_rows() { + if ( !current_user_can('update_plugins' ) ) + return; + + $plugins = get_site_transient( 'update_plugins' ); + if ( isset($plugins->response) && is_array($plugins->response) ) { + $plugins = array_keys( $plugins->response ); + foreach( $plugins as $plugin_file ) { + add_action( "after_plugin_row_$plugin_file", 'wp_plugin_update_row', 10, 2 ); + } + } +} +add_action( 'admin_init', 'wp_plugin_update_rows' ); + +function wp_plugin_update_row( $file, $plugin_data ) { + $current = get_site_transient( 'update_plugins' ); + if ( !isset( $current->response[ $file ] ) ) + return false; + + $r = $current->response[ $file ]; + + $plugins_allowedtags = array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array()); + $plugin_name = wp_kses( $plugin_data['Name'], $plugins_allowedtags ); + + $details_url = self_admin_url('plugin-install.php?tab=plugin-information&plugin=' . $r->slug . '§ion=changelog&TB_iframe=true&width=600&height=800'); + + $wp_list_table = _get_list_table('WP_Plugins_List_Table'); + + if ( is_network_admin() || !is_multisite() ) { + echo '
    '; + + if ( ! current_user_can('update_plugins') ) + printf( __('There is a new version of %1$s available. View version %4$s details.'), $plugin_name, esc_url($details_url), esc_attr($plugin_name), $r->new_version ); + else if ( empty($r->package) ) + printf( __('There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this plugin.'), $plugin_name, esc_url($details_url), esc_attr($plugin_name), $r->new_version ); + else + printf( __('There is a new version of %1$s available. View version %4$s details or update now.'), $plugin_name, esc_url($details_url), esc_attr($plugin_name), $r->new_version, wp_nonce_url( self_admin_url('update.php?action=upgrade-plugin&plugin=') . $file, 'upgrade-plugin_' . $file) ); + + /** + * Fires at the end of the update message container in each + * row of the plugins list table. + * + * The dynamic portion of the hook name, $file, refers to the path + * of the plugin's primary file relative to the plugins directory. + * + * @since 2.8.0 + * + * @param array $plugin_data { + * An array of plugin metadata. + * + * @type string $name The human-readable name of the plugin. + * @type string $plugin_uri Plugin URI. + * @type string $version Plugin version. + * @type string $description Plugin description. + * @type string $author Plugin author. + * @type string $author_uri Plugin author URI. + * @type string $text_domain Plugin text domain. + * @type string $domain_path Relative path to the plugin's .mo file(s). + * @type bool $network Whether the plugin can only be activated network wide. + * @type string $title The human-readable title of the plugin. + * @type string $author_name Plugin author's name. + * @type bool $update Whether there's an available update. Default null. + * } + * @param array $r { + * An array of metadata about the available plugin update. + * + * @type int $id Plugin ID. + * @type string $slug Plugin slug. + * @type string $new_version New plugin version. + * @type string $url Plugin URL. + * @type string $package Plugin update package URL. + * } + */ + do_action( "in_plugin_update_message-{$file}", $plugin_data, $r ); + + echo '
    '; + } +} + +function get_theme_updates() { + $themes = wp_get_themes(); + $current = get_site_transient('update_themes'); + + if ( ! isset( $current->response ) ) + return array(); + + $update_themes = array(); + foreach ( $current->response as $stylesheet => $data ) { + $update_themes[ $stylesheet ] = wp_get_theme( $stylesheet ); + $update_themes[ $stylesheet ]->update = $data; + } + + return $update_themes; +} + +function wp_theme_update_rows() { + if ( !current_user_can('update_themes' ) ) + return; + + $themes = get_site_transient( 'update_themes' ); + if ( isset($themes->response) && is_array($themes->response) ) { + $themes = array_keys( $themes->response ); + + foreach( $themes as $theme ) { + add_action( "after_theme_row_$theme", 'wp_theme_update_row', 10, 2 ); + } + } +} +add_action( 'admin_init', 'wp_theme_update_rows' ); + +function wp_theme_update_row( $theme_key, $theme ) { + $current = get_site_transient( 'update_themes' ); + if ( !isset( $current->response[ $theme_key ] ) ) + return false; + $r = $current->response[ $theme_key ]; + $themes_allowedtags = array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array()); + $theme_name = wp_kses( $theme['Name'], $themes_allowedtags ); + + $details_url = add_query_arg( array( 'TB_iframe' => 'true', 'width' => 1024, 'height' => 800 ), $current->response[ $theme_key ]['url'] ); + + $wp_list_table = _get_list_table('WP_MS_Themes_List_Table'); + + echo '
    '; + if ( ! current_user_can('update_themes') ) + printf( __('There is a new version of %1$s available. View version %4$s details.'), $theme['Name'], esc_url($details_url), esc_attr($theme['Name']), $r->new_version ); + else if ( empty( $r['package'] ) ) + printf( __('There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this theme.'), $theme['Name'], esc_url($details_url), esc_attr($theme['Name']), $r['new_version'] ); + else + printf( __('There is a new version of %1$s available. View version %4$s details or update now.'), $theme['Name'], esc_url($details_url), esc_attr($theme['Name']), $r['new_version'], wp_nonce_url( self_admin_url('update.php?action=upgrade-theme&theme=') . $theme_key, 'upgrade-theme_' . $theme_key) ); + + /** + * Fires at the end of the update message container in each + * row of the themes list table. + * + * The dynamic portion of the hook name, $theme_key, refers to + * the theme slug as found in the WordPress.org themes repository. + * + * @since 3.1.0 + * + * @param WP_Theme $theme The WP_Theme object. + * @param array $r { + * An array of metadata about the available theme update. + * + * @type string $new_version New theme version. + * @type string $url Theme URL. + * @type string $package Theme update package URL. + * } + */ + do_action( "in_theme_update_message-{$theme_key}", $theme, $r ); + + echo '
    '; +} + +function maintenance_nag() { + include ABSPATH . WPINC . '/version.php'; // include an unmodified $wp_version + global $upgrading; + $nag = isset( $upgrading ); + if ( ! $nag ) { + $failed = get_site_option( 'auto_core_update_failed' ); + /* + * If an update failed critically, we may have copied over version.php but not other files. + * In that case, if the install claims we're running the version we attempted, nag. + * This is serious enough to err on the side of nagging. + * + * If we simply failed to update before we tried to copy any files, then assume things are + * OK if they are now running the latest. + * + * This flag is cleared whenever a successful update occurs using Core_Upgrader. + */ + $comparison = ! empty( $failed['critical'] ) ? '>=' : '>'; + if ( version_compare( $failed['attempted'], $wp_version, $comparison ) ) + $nag = true; + } + + if ( ! $nag ) + return false; + + if ( current_user_can('update_core') ) + $msg = sprintf( __('An automated WordPress update has failed to complete - please attempt the update again now.'), 'update-core.php' ); + else + $msg = __('An automated WordPress update has failed to complete! Please notify the site administrator.'); + + echo "
    $msg
    "; +} +add_action( 'admin_notices', 'maintenance_nag' ); +add_action( 'network_admin_notices', 'maintenance_nag' ); diff --git a/src/wp-admin/includes/upgrade.php b/src/wp-admin/includes/upgrade.php new file mode 100644 index 0000000..1622cab --- /dev/null +++ b/src/wp-admin/includes/upgrade.php @@ -0,0 +1,2081 @@ +Note that password carefully! It is a random password that was generated just for you.'); + $user_id = wp_create_user($user_name, $user_password, $user_email); + update_user_option($user_id, 'default_password_nag', true, true); + $email_password = true; + } else if ( !$user_id ) { + // Password has been provided + $message = ''.__('Your chosen password.').''; + $user_id = wp_create_user($user_name, $user_password, $user_email); + } else { + $message = __('User already exists. Password inherited.'); + } + + $user = new WP_User($user_id); + $user->set_role('administrator'); + + wp_install_defaults($user_id); + + flush_rewrite_rules(); + + wp_new_blog_notification($blog_title, $guessurl, $user_id, ($email_password ? $user_password : __('The password you chose during the install.') ) ); + + wp_cache_flush(); + + return array('url' => $guessurl, 'user_id' => $user_id, 'password' => $user_password, 'password_message' => $message); +} +endif; + +if ( !function_exists('wp_install_defaults') ) : +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * + * @param int $user_id User ID. + */ +function wp_install_defaults( $user_id ) { + global $wpdb, $wp_rewrite, $table_prefix; + + // Default category + $cat_name = __('Uncategorized'); + /* translators: Default category slug */ + $cat_slug = sanitize_title(_x('Uncategorized', 'Default category slug')); + + if ( global_terms_enabled() ) { + $cat_id = $wpdb->get_var( $wpdb->prepare( "SELECT cat_ID FROM {$wpdb->sitecategories} WHERE category_nicename = %s", $cat_slug ) ); + if ( $cat_id == null ) { + $wpdb->insert( $wpdb->sitecategories, array('cat_ID' => 0, 'cat_name' => $cat_name, 'category_nicename' => $cat_slug, 'last_updated' => current_time('mysql', true)) ); + $cat_id = $wpdb->insert_id; + } + update_option('default_category', $cat_id); + } else { + $cat_id = 1; + } + + $wpdb->insert( $wpdb->terms, array('term_id' => $cat_id, 'name' => $cat_name, 'slug' => $cat_slug, 'term_group' => 0) ); + $wpdb->insert( $wpdb->term_taxonomy, array('term_id' => $cat_id, 'taxonomy' => 'category', 'description' => '', 'parent' => 0, 'count' => 1)); + $cat_tt_id = $wpdb->insert_id; + + // First post + $now = date('Y-m-d H:i:s'); + $now_gmt = gmdate('Y-m-d H:i:s'); + $first_post_guid = get_option('home') . '/?p=1'; + + if ( is_multisite() ) { + $first_post = get_site_option( 'first_post' ); + + if ( empty($first_post) ) + $first_post = __( 'Welcome to SITE_NAME. This is your first post. Edit or delete it, then start blogging!' ); + + $first_post = str_replace( "SITE_URL", esc_url( network_home_url() ), $first_post ); + $first_post = str_replace( "SITE_NAME", get_current_site()->site_name, $first_post ); + } else { + $first_post = __('Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!'); + } + + $wpdb->insert( $wpdb->posts, array( + 'post_author' => $user_id, + 'post_date' => $now, + 'post_date_gmt' => $now_gmt, + 'post_content' => $first_post, + 'post_excerpt' => '', + 'post_title' => __('Hello world!'), + /* translators: Default post slug */ + 'post_name' => sanitize_title( _x('hello-world', 'Default post slug') ), + 'post_modified' => $now, + 'post_modified_gmt' => $now_gmt, + 'guid' => $first_post_guid, + 'comment_count' => 1, + 'to_ping' => '', + 'pinged' => '', + 'post_content_filtered' => '' + )); + $wpdb->insert( $wpdb->term_relationships, array('term_taxonomy_id' => $cat_tt_id, 'object_id' => 1) ); + + // Default comment + $first_comment_author = __('Mr WordPress'); + $first_comment_url = 'http://wordpress.org/'; + $first_comment = __('Hi, this is a comment. +To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.'); + if ( is_multisite() ) { + $first_comment_author = get_site_option( 'first_comment_author', $first_comment_author ); + $first_comment_url = get_site_option( 'first_comment_url', network_home_url() ); + $first_comment = get_site_option( 'first_comment', $first_comment ); + } + $wpdb->insert( $wpdb->comments, array( + 'comment_post_ID' => 1, + 'comment_author' => $first_comment_author, + 'comment_author_email' => '', + 'comment_author_url' => $first_comment_url, + 'comment_date' => $now, + 'comment_date_gmt' => $now_gmt, + 'comment_content' => $first_comment + )); + + // First Page + $first_page = sprintf( __( "This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this: + +
    Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my blog. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin' caught in the rain.)
    + +...or something like this: + +
    The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys 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!" ), admin_url() ); + if ( is_multisite() ) + $first_page = get_site_option( 'first_page', $first_page ); + $first_post_guid = get_option('home') . '/?page_id=2'; + $wpdb->insert( $wpdb->posts, array( + 'post_author' => $user_id, + 'post_date' => $now, + 'post_date_gmt' => $now_gmt, + 'post_content' => $first_page, + 'post_excerpt' => '', + 'post_title' => __( 'Sample Page' ), + /* translators: Default page slug */ + 'post_name' => __( 'sample-page' ), + 'post_modified' => $now, + 'post_modified_gmt' => $now_gmt, + 'guid' => $first_post_guid, + 'post_type' => 'page', + 'to_ping' => '', + 'pinged' => '', + 'post_content_filtered' => '' + )); + $wpdb->insert( $wpdb->postmeta, array( 'post_id' => 2, 'meta_key' => '_wp_page_template', 'meta_value' => 'default' ) ); + + // Set up default widgets for default theme. + update_option( 'widget_search', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) ); + update_option( 'widget_recent-posts', array ( 2 => array ( 'title' => '', 'number' => 5 ), '_multiwidget' => 1 ) ); + update_option( 'widget_recent-comments', array ( 2 => array ( 'title' => '', 'number' => 5 ), '_multiwidget' => 1 ) ); + update_option( 'widget_archives', array ( 2 => array ( 'title' => '', 'count' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) ); + update_option( 'widget_categories', array ( 2 => array ( 'title' => '', 'count' => 0, 'hierarchical' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) ); + update_option( 'widget_meta', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) ); + update_option( 'sidebars_widgets', array ( 'wp_inactive_widgets' => array (), 'sidebar-1' => array ( 0 => 'search-2', 1 => 'recent-posts-2', 2 => 'recent-comments-2', 3 => 'archives-2', 4 => 'categories-2', 5 => 'meta-2', ), 'sidebar-2' => array (), 'sidebar-3' => array (), 'array_version' => 3 ) ); + + if ( ! is_multisite() ) + update_user_meta( $user_id, 'show_welcome_panel', 1 ); + elseif ( ! is_super_admin( $user_id ) && ! metadata_exists( 'user', $user_id, 'show_welcome_panel' ) ) + update_user_meta( $user_id, 'show_welcome_panel', 2 ); + + if ( is_multisite() ) { + // Flush rules to pick up the new page. + $wp_rewrite->init(); + $wp_rewrite->flush_rules(); + + $user = new WP_User($user_id); + $wpdb->update( $wpdb->options, array('option_value' => $user->user_email), array('option_name' => 'admin_email') ); + + // Remove all perms except for the login user. + $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id != %d AND meta_key = %s", $user_id, $table_prefix.'user_level') ); + $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id != %d AND meta_key = %s", $user_id, $table_prefix.'capabilities') ); + + // Delete any caps that snuck into the previously active blog. (Hardcoded to blog 1 for now.) TODO: Get previous_blog_id. + if ( !is_super_admin( $user_id ) && $user_id != 1 ) + $wpdb->delete( $wpdb->usermeta, array( 'user_id' => $user_id , 'meta_key' => $wpdb->base_prefix.'1_capabilities' ) ); + } +} +endif; + +if ( !function_exists('wp_new_blog_notification') ) : +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * + * @param string $blog_title Blog title. + * @param string $blog_url Blog url. + * @param int $user_id User ID. + * @param string $password User's Password. + */ +function wp_new_blog_notification($blog_title, $blog_url, $user_id, $password) { + $user = new WP_User( $user_id ); + $email = $user->user_email; + $name = $user->user_login; + $message = sprintf(__("Your new WordPress site has been successfully set up at: + +%1\$s + +You can log in to the administrator account with the following information: + +Username: %2\$s +Password: %3\$s + +We hope you enjoy your new site. Thanks! + +--The WordPress Team +http://wordpress.org/ +"), $blog_url, $name, $password); + + @wp_mail($email, __('New WordPress Site'), $message); +} +endif; + +if ( !function_exists('wp_upgrade') ) : +/** + * Run WordPress Upgrade functions. + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * + * @return null + */ +function wp_upgrade() { + global $wp_current_db_version, $wp_db_version, $wpdb; + + $wp_current_db_version = __get_option('db_version'); + + // We are up-to-date. Nothing to do. + if ( $wp_db_version == $wp_current_db_version ) + return; + + if ( ! is_blog_installed() ) + return; + + wp_check_mysql_version(); + wp_cache_flush(); + pre_schema_upgrade(); + make_db_current_silent(); + upgrade_all(); + if ( is_multisite() && is_main_site() ) + upgrade_network(); + wp_cache_flush(); + + if ( is_multisite() ) { + if ( $wpdb->get_row( "SELECT blog_id FROM {$wpdb->blog_versions} WHERE blog_id = '{$wpdb->blogid}'" ) ) + $wpdb->query( "UPDATE {$wpdb->blog_versions} SET db_version = '{$wp_db_version}' WHERE blog_id = '{$wpdb->blogid}'" ); + else + $wpdb->query( "INSERT INTO {$wpdb->blog_versions} ( `blog_id` , `db_version` , `last_updated` ) VALUES ( '{$wpdb->blogid}', '{$wp_db_version}', NOW());" ); + } +} +endif; + +/** + * Functions to be called in install and upgrade scripts. + * + * {@internal Missing Long Description}} + * + * @since 1.0.1 + */ +function upgrade_all() { + global $wp_current_db_version, $wp_db_version; + $wp_current_db_version = __get_option('db_version'); + + // We are up-to-date. Nothing to do. + if ( $wp_db_version == $wp_current_db_version ) + return; + + // If the version is not set in the DB, try to guess the version. + if ( empty($wp_current_db_version) ) { + $wp_current_db_version = 0; + + // If the template option exists, we have 1.5. + $template = __get_option('template'); + if ( !empty($template) ) + $wp_current_db_version = 2541; + } + + if ( $wp_current_db_version < 6039 ) + upgrade_230_options_table(); + + populate_options(); + + if ( $wp_current_db_version < 2541 ) { + upgrade_100(); + upgrade_101(); + upgrade_110(); + upgrade_130(); + } + + if ( $wp_current_db_version < 3308 ) + upgrade_160(); + + if ( $wp_current_db_version < 4772 ) + upgrade_210(); + + if ( $wp_current_db_version < 4351 ) + upgrade_old_slugs(); + + if ( $wp_current_db_version < 5539 ) + upgrade_230(); + + if ( $wp_current_db_version < 6124 ) + upgrade_230_old_tables(); + + if ( $wp_current_db_version < 7499 ) + upgrade_250(); + + if ( $wp_current_db_version < 7935 ) + upgrade_252(); + + if ( $wp_current_db_version < 8201 ) + upgrade_260(); + + if ( $wp_current_db_version < 8989 ) + upgrade_270(); + + if ( $wp_current_db_version < 10360 ) + upgrade_280(); + + if ( $wp_current_db_version < 11958 ) + upgrade_290(); + + if ( $wp_current_db_version < 15260 ) + upgrade_300(); + + if ( $wp_current_db_version < 19389 ) + upgrade_330(); + + if ( $wp_current_db_version < 20080 ) + upgrade_340(); + + if ( $wp_current_db_version < 22422 ) + upgrade_350(); + + if ( $wp_current_db_version < 25824 ) + upgrade_370(); + + if ( $wp_current_db_version < 26148 ) + upgrade_372(); + + if ( $wp_current_db_version < 26691 ) + upgrade_380(); + + maybe_disable_link_manager(); + + maybe_disable_automattic_widgets(); + + update_option( 'db_version', $wp_db_version ); + update_option( 'db_upgraded', true ); +} + +/** + * Execute changes made in WordPress 1.0. + * + * @since 1.0.0 + */ +function upgrade_100() { + global $wpdb; + + // Get the title and ID of every post, post_name to check if it already has a value + $posts = $wpdb->get_results("SELECT ID, post_title, post_name FROM $wpdb->posts WHERE post_name = ''"); + if ($posts) { + foreach($posts as $post) { + if ('' == $post->post_name) { + $newtitle = sanitize_title($post->post_title); + $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_name = %s WHERE ID = %d", $newtitle, $post->ID) ); + } + } + } + + $categories = $wpdb->get_results("SELECT cat_ID, cat_name, category_nicename FROM $wpdb->categories"); + foreach ($categories as $category) { + if ('' == $category->category_nicename) { + $newtitle = sanitize_title($category->cat_name); + $wpdb->update( $wpdb->categories, array('category_nicename' => $newtitle), array('cat_ID' => $category->cat_ID) ); + } + } + + $wpdb->query("UPDATE $wpdb->options SET option_value = REPLACE(option_value, 'wp-links/links-images/', 'wp-images/links/') + WHERE option_name LIKE 'links_rating_image%' + AND option_value LIKE 'wp-links/links-images/%'"); + + $done_ids = $wpdb->get_results("SELECT DISTINCT post_id FROM $wpdb->post2cat"); + if ($done_ids) : + foreach ($done_ids as $done_id) : + $done_posts[] = $done_id->post_id; + endforeach; + $catwhere = ' AND ID NOT IN (' . implode(',', $done_posts) . ')'; + else: + $catwhere = ''; + endif; + + $allposts = $wpdb->get_results("SELECT ID, post_category FROM $wpdb->posts WHERE post_category != '0' $catwhere"); + if ($allposts) : + foreach ($allposts as $post) { + // Check to see if it's already been imported + $cat = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->post2cat WHERE post_id = %d AND category_id = %d", $post->ID, $post->post_category) ); + if (!$cat && 0 != $post->post_category) { // If there's no result + $wpdb->insert( $wpdb->post2cat, array('post_id' => $post->ID, 'category_id' => $post->post_category) ); + } + } + endif; +} + +/** + * Execute changes made in WordPress 1.0.1. + * + * @since 1.0.1 + */ +function upgrade_101() { + global $wpdb; + + // Clean up indices, add a few + add_clean_index($wpdb->posts, 'post_name'); + add_clean_index($wpdb->posts, 'post_status'); + add_clean_index($wpdb->categories, 'category_nicename'); + add_clean_index($wpdb->comments, 'comment_approved'); + add_clean_index($wpdb->comments, 'comment_post_ID'); + add_clean_index($wpdb->links , 'link_category'); + add_clean_index($wpdb->links , 'link_visible'); +} + +/** + * Execute changes made in WordPress 1.2. + * + * @since 1.2.0 + */ +function upgrade_110() { + global $wpdb; + + // Set user_nicename. + $users = $wpdb->get_results("SELECT ID, user_nickname, user_nicename FROM $wpdb->users"); + foreach ($users as $user) { + if ('' == $user->user_nicename) { + $newname = sanitize_title($user->user_nickname); + $wpdb->update( $wpdb->users, array('user_nicename' => $newname), array('ID' => $user->ID) ); + } + } + + $users = $wpdb->get_results("SELECT ID, user_pass from $wpdb->users"); + foreach ($users as $row) { + if (!preg_match('/^[A-Fa-f0-9]{32}$/', $row->user_pass)) { + $wpdb->update( $wpdb->users, array('user_pass' => md5($row->user_pass)), array('ID' => $row->ID) ); + } + } + + // Get the GMT offset, we'll use that later on + $all_options = get_alloptions_110(); + + $time_difference = $all_options->time_difference; + + $server_time = time()+date('Z'); + $weblogger_time = $server_time + $time_difference * HOUR_IN_SECONDS; + $gmt_time = time(); + + $diff_gmt_server = ($gmt_time - $server_time) / HOUR_IN_SECONDS; + $diff_weblogger_server = ($weblogger_time - $server_time) / HOUR_IN_SECONDS; + $diff_gmt_weblogger = $diff_gmt_server - $diff_weblogger_server; + $gmt_offset = -$diff_gmt_weblogger; + + // Add a gmt_offset option, with value $gmt_offset + add_option('gmt_offset', $gmt_offset); + + // Check if we already set the GMT fields (if we did, then + // MAX(post_date_gmt) can't be '0000-00-00 00:00:00' + // I just slapped myself silly for not thinking about it earlier + $got_gmt_fields = ! ($wpdb->get_var("SELECT MAX(post_date_gmt) FROM $wpdb->posts") == '0000-00-00 00:00:00'); + + if (!$got_gmt_fields) { + + // Add or subtract time to all dates, to get GMT dates + $add_hours = intval($diff_gmt_weblogger); + $add_minutes = intval(60 * ($diff_gmt_weblogger - $add_hours)); + $wpdb->query("UPDATE $wpdb->posts SET post_date_gmt = DATE_ADD(post_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); + $wpdb->query("UPDATE $wpdb->posts SET post_modified = post_date"); + $wpdb->query("UPDATE $wpdb->posts SET post_modified_gmt = DATE_ADD(post_modified, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE) WHERE post_modified != '0000-00-00 00:00:00'"); + $wpdb->query("UPDATE $wpdb->comments SET comment_date_gmt = DATE_ADD(comment_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); + $wpdb->query("UPDATE $wpdb->users SET user_registered = DATE_ADD(user_registered, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); + } + +} + +/** + * Execute changes made in WordPress 1.5. + * + * @since 1.5.0 + */ +function upgrade_130() { + global $wpdb; + + // Remove extraneous backslashes. + $posts = $wpdb->get_results("SELECT ID, post_title, post_content, post_excerpt, guid, post_date, post_name, post_status, post_author FROM $wpdb->posts"); + if ($posts) { + foreach($posts as $post) { + $post_content = addslashes(deslash($post->post_content)); + $post_title = addslashes(deslash($post->post_title)); + $post_excerpt = addslashes(deslash($post->post_excerpt)); + if ( empty($post->guid) ) + $guid = get_permalink($post->ID); + else + $guid = $post->guid; + + $wpdb->update( $wpdb->posts, compact('post_title', 'post_content', 'post_excerpt', 'guid'), array('ID' => $post->ID) ); + + } + } + + // Remove extraneous backslashes. + $comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_content FROM $wpdb->comments"); + if ($comments) { + foreach($comments as $comment) { + $comment_content = deslash($comment->comment_content); + $comment_author = deslash($comment->comment_author); + + $wpdb->update($wpdb->comments, compact('comment_content', 'comment_author'), array('comment_ID' => $comment->comment_ID) ); + } + } + + // Remove extraneous backslashes. + $links = $wpdb->get_results("SELECT link_id, link_name, link_description FROM $wpdb->links"); + if ($links) { + foreach($links as $link) { + $link_name = deslash($link->link_name); + $link_description = deslash($link->link_description); + + $wpdb->update( $wpdb->links, compact('link_name', 'link_description'), array('link_id' => $link->link_id) ); + } + } + + $active_plugins = __get_option('active_plugins'); + + // If plugins are not stored in an array, they're stored in the old + // newline separated format. Convert to new format. + if ( !is_array( $active_plugins ) ) { + $active_plugins = explode("\n", trim($active_plugins)); + update_option('active_plugins', $active_plugins); + } + + // Obsolete tables + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optionvalues'); + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiontypes'); + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiongroups'); + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiongroup_options'); + + // Update comments table to use comment_type + $wpdb->query("UPDATE $wpdb->comments SET comment_type='trackback', comment_content = REPLACE(comment_content, '', '') WHERE comment_content LIKE '%'"); + $wpdb->query("UPDATE $wpdb->comments SET comment_type='pingback', comment_content = REPLACE(comment_content, '', '') WHERE comment_content LIKE '%'"); + + // Some versions have multiple duplicate option_name rows with the same values + $options = $wpdb->get_results("SELECT option_name, COUNT(option_name) AS dupes FROM `$wpdb->options` GROUP BY option_name"); + foreach ( $options as $option ) { + if ( 1 != $option->dupes ) { // Could this be done in the query? + $limit = $option->dupes - 1; + $dupe_ids = $wpdb->get_col( $wpdb->prepare("SELECT option_id FROM $wpdb->options WHERE option_name = %s LIMIT %d", $option->option_name, $limit) ); + if ( $dupe_ids ) { + $dupe_ids = join($dupe_ids, ','); + $wpdb->query("DELETE FROM $wpdb->options WHERE option_id IN ($dupe_ids)"); + } + } + } + + make_site_theme(); +} + +/** + * Execute changes made in WordPress 2.0. + * + * @since 2.0.0 + */ +function upgrade_160() { + global $wpdb, $wp_current_db_version; + + populate_roles_160(); + + $users = $wpdb->get_results("SELECT * FROM $wpdb->users"); + foreach ( $users as $user ) : + if ( !empty( $user->user_firstname ) ) + update_user_meta( $user->ID, 'first_name', wp_slash($user->user_firstname) ); + if ( !empty( $user->user_lastname ) ) + update_user_meta( $user->ID, 'last_name', wp_slash($user->user_lastname) ); + if ( !empty( $user->user_nickname ) ) + update_user_meta( $user->ID, 'nickname', wp_slash($user->user_nickname) ); + if ( !empty( $user->user_level ) ) + update_user_meta( $user->ID, $wpdb->prefix . 'user_level', $user->user_level ); + if ( !empty( $user->user_icq ) ) + update_user_meta( $user->ID, 'icq', wp_slash($user->user_icq) ); + if ( !empty( $user->user_aim ) ) + update_user_meta( $user->ID, 'aim', wp_slash($user->user_aim) ); + if ( !empty( $user->user_msn ) ) + update_user_meta( $user->ID, 'msn', wp_slash($user->user_msn) ); + if ( !empty( $user->user_yim ) ) + update_user_meta( $user->ID, 'yim', wp_slash($user->user_icq) ); + if ( !empty( $user->user_description ) ) + update_user_meta( $user->ID, 'description', wp_slash($user->user_description) ); + + if ( isset( $user->user_idmode ) ): + $idmode = $user->user_idmode; + if ($idmode == 'nickname') $id = $user->user_nickname; + if ($idmode == 'login') $id = $user->user_login; + if ($idmode == 'firstname') $id = $user->user_firstname; + if ($idmode == 'lastname') $id = $user->user_lastname; + if ($idmode == 'namefl') $id = $user->user_firstname.' '.$user->user_lastname; + if ($idmode == 'namelf') $id = $user->user_lastname.' '.$user->user_firstname; + if (!$idmode) $id = $user->user_nickname; + $wpdb->update( $wpdb->users, array('display_name' => $id), array('ID' => $user->ID) ); + endif; + + // FIXME: RESET_CAPS is temporary code to reset roles and caps if flag is set. + $caps = get_user_meta( $user->ID, $wpdb->prefix . 'capabilities'); + if ( empty($caps) || defined('RESET_CAPS') ) { + $level = get_user_meta($user->ID, $wpdb->prefix . 'user_level', true); + $role = translate_level_to_role($level); + update_user_meta( $user->ID, $wpdb->prefix . 'capabilities', array($role => true) ); + } + + endforeach; + $old_user_fields = array( 'user_firstname', 'user_lastname', 'user_icq', 'user_aim', 'user_msn', 'user_yim', 'user_idmode', 'user_ip', 'user_domain', 'user_browser', 'user_description', 'user_nickname', 'user_level' ); + $wpdb->hide_errors(); + foreach ( $old_user_fields as $old ) + $wpdb->query("ALTER TABLE $wpdb->users DROP $old"); + $wpdb->show_errors(); + + // populate comment_count field of posts table + $comments = $wpdb->get_results( "SELECT comment_post_ID, COUNT(*) as c FROM $wpdb->comments WHERE comment_approved = '1' GROUP BY comment_post_ID" ); + if ( is_array( $comments ) ) + foreach ($comments as $comment) + $wpdb->update( $wpdb->posts, array('comment_count' => $comment->c), array('ID' => $comment->comment_post_ID) ); + + // Some alpha versions used a post status of object instead of attachment and put + // the mime type in post_type instead of post_mime_type. + if ( $wp_current_db_version > 2541 && $wp_current_db_version <= 3091 ) { + $objects = $wpdb->get_results("SELECT ID, post_type FROM $wpdb->posts WHERE post_status = 'object'"); + foreach ($objects as $object) { + $wpdb->update( $wpdb->posts, array( 'post_status' => 'attachment', + 'post_mime_type' => $object->post_type, + 'post_type' => ''), + array( 'ID' => $object->ID ) ); + + $meta = get_post_meta($object->ID, 'imagedata', true); + if ( ! empty($meta['file']) ) + update_attached_file( $object->ID, $meta['file'] ); + } + } +} + +/** + * Execute changes made in WordPress 2.1. + * + * @since 2.1.0 + */ +function upgrade_210() { + global $wpdb, $wp_current_db_version; + + if ( $wp_current_db_version < 3506 ) { + // Update status and type. + $posts = $wpdb->get_results("SELECT ID, post_status FROM $wpdb->posts"); + + if ( ! empty($posts) ) foreach ($posts as $post) { + $status = $post->post_status; + $type = 'post'; + + if ( 'static' == $status ) { + $status = 'publish'; + $type = 'page'; + } else if ( 'attachment' == $status ) { + $status = 'inherit'; + $type = 'attachment'; + } + + $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_status = %s, post_type = %s WHERE ID = %d", $status, $type, $post->ID) ); + } + } + + if ( $wp_current_db_version < 3845 ) { + populate_roles_210(); + } + + if ( $wp_current_db_version < 3531 ) { + // Give future posts a post_status of future. + $now = gmdate('Y-m-d H:i:59'); + $wpdb->query ("UPDATE $wpdb->posts SET post_status = 'future' WHERE post_status = 'publish' AND post_date_gmt > '$now'"); + + $posts = $wpdb->get_results("SELECT ID, post_date FROM $wpdb->posts WHERE post_status ='future'"); + if ( !empty($posts) ) + foreach ( $posts as $post ) + wp_schedule_single_event(mysql2date('U', $post->post_date, false), 'publish_future_post', array($post->ID)); + } +} + +/** + * Execute changes made in WordPress 2.3. + * + * @since 2.3.0 + */ +function upgrade_230() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 5200 ) { + populate_roles_230(); + } + + // Convert categories to terms. + $tt_ids = array(); + $have_tags = false; + $categories = $wpdb->get_results("SELECT * FROM $wpdb->categories ORDER BY cat_ID"); + foreach ($categories as $category) { + $term_id = (int) $category->cat_ID; + $name = $category->cat_name; + $description = $category->category_description; + $slug = $category->category_nicename; + $parent = $category->category_parent; + $term_group = 0; + + // Associate terms with the same slug in a term group and make slugs unique. + if ( $exists = $wpdb->get_results( $wpdb->prepare("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $slug) ) ) { + $term_group = $exists[0]->term_group; + $id = $exists[0]->term_id; + $num = 2; + do { + $alt_slug = $slug . "-$num"; + $num++; + $slug_check = $wpdb->get_var( $wpdb->prepare("SELECT slug FROM $wpdb->terms WHERE slug = %s", $alt_slug) ); + } while ( $slug_check ); + + $slug = $alt_slug; + + if ( empty( $term_group ) ) { + $term_group = $wpdb->get_var("SELECT MAX(term_group) FROM $wpdb->terms GROUP BY term_group") + 1; + $wpdb->query( $wpdb->prepare("UPDATE $wpdb->terms SET term_group = %d WHERE term_id = %d", $term_group, $id) ); + } + } + + $wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->terms (term_id, name, slug, term_group) VALUES + (%d, %s, %s, %d)", $term_id, $name, $slug, $term_group) ); + + $count = 0; + if ( !empty($category->category_count) ) { + $count = (int) $category->category_count; + $taxonomy = 'category'; + $wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ( %d, %s, %s, %d, %d)", $term_id, $taxonomy, $description, $parent, $count) ); + $tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id; + } + + if ( !empty($category->link_count) ) { + $count = (int) $category->link_count; + $taxonomy = 'link_category'; + $wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ( %d, %s, %s, %d, %d)", $term_id, $taxonomy, $description, $parent, $count) ); + $tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id; + } + + if ( !empty($category->tag_count) ) { + $have_tags = true; + $count = (int) $category->tag_count; + $taxonomy = 'post_tag'; + $wpdb->insert( $wpdb->term_taxonomy, compact('term_id', 'taxonomy', 'description', 'parent', 'count') ); + $tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id; + } + + if ( empty($count) ) { + $count = 0; + $taxonomy = 'category'; + $wpdb->insert( $wpdb->term_taxonomy, compact('term_id', 'taxonomy', 'description', 'parent', 'count') ); + $tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id; + } + } + + $select = 'post_id, category_id'; + if ( $have_tags ) + $select .= ', rel_type'; + + $posts = $wpdb->get_results("SELECT $select FROM $wpdb->post2cat GROUP BY post_id, category_id"); + foreach ( $posts as $post ) { + $post_id = (int) $post->post_id; + $term_id = (int) $post->category_id; + $taxonomy = 'category'; + if ( !empty($post->rel_type) && 'tag' == $post->rel_type) + $taxonomy = 'tag'; + $tt_id = $tt_ids[$term_id][$taxonomy]; + if ( empty($tt_id) ) + continue; + + $wpdb->insert( $wpdb->term_relationships, array('object_id' => $post_id, 'term_taxonomy_id' => $tt_id) ); + } + + // < 3570 we used linkcategories. >= 3570 we used categories and link2cat. + if ( $wp_current_db_version < 3570 ) { + // Create link_category terms for link categories. Create a map of link cat IDs + // to link_category terms. + $link_cat_id_map = array(); + $default_link_cat = 0; + $tt_ids = array(); + $link_cats = $wpdb->get_results("SELECT cat_id, cat_name FROM " . $wpdb->prefix . 'linkcategories'); + foreach ( $link_cats as $category) { + $cat_id = (int) $category->cat_id; + $term_id = 0; + $name = wp_slash($category->cat_name); + $slug = sanitize_title($name); + $term_group = 0; + + // Associate terms with the same slug in a term group and make slugs unique. + if ( $exists = $wpdb->get_results( $wpdb->prepare("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $slug) ) ) { + $term_group = $exists[0]->term_group; + $term_id = $exists[0]->term_id; + } + + if ( empty($term_id) ) { + $wpdb->insert( $wpdb->terms, compact('name', 'slug', 'term_group') ); + $term_id = (int) $wpdb->insert_id; + } + + $link_cat_id_map[$cat_id] = $term_id; + $default_link_cat = $term_id; + + $wpdb->insert( $wpdb->term_taxonomy, array('term_id' => $term_id, 'taxonomy' => 'link_category', 'description' => '', 'parent' => 0, 'count' => 0) ); + $tt_ids[$term_id] = (int) $wpdb->insert_id; + } + + // Associate links to cats. + $links = $wpdb->get_results("SELECT link_id, link_category FROM $wpdb->links"); + if ( !empty($links) ) foreach ( $links as $link ) { + if ( 0 == $link->link_category ) + continue; + if ( ! isset($link_cat_id_map[$link->link_category]) ) + continue; + $term_id = $link_cat_id_map[$link->link_category]; + $tt_id = $tt_ids[$term_id]; + if ( empty($tt_id) ) + continue; + + $wpdb->insert( $wpdb->term_relationships, array('object_id' => $link->link_id, 'term_taxonomy_id' => $tt_id) ); + } + + // Set default to the last category we grabbed during the upgrade loop. + update_option('default_link_category', $default_link_cat); + } else { + $links = $wpdb->get_results("SELECT link_id, category_id FROM $wpdb->link2cat GROUP BY link_id, category_id"); + foreach ( $links as $link ) { + $link_id = (int) $link->link_id; + $term_id = (int) $link->category_id; + $taxonomy = 'link_category'; + $tt_id = $tt_ids[$term_id][$taxonomy]; + if ( empty($tt_id) ) + continue; + $wpdb->insert( $wpdb->term_relationships, array('object_id' => $link_id, 'term_taxonomy_id' => $tt_id) ); + } + } + + if ( $wp_current_db_version < 4772 ) { + // Obsolete linkcategories table + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'linkcategories'); + } + + // Recalculate all counts + $terms = $wpdb->get_results("SELECT term_taxonomy_id, taxonomy FROM $wpdb->term_taxonomy"); + foreach ( (array) $terms as $term ) { + if ( ('post_tag' == $term->taxonomy) || ('category' == $term->taxonomy) ) + $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id AND post_status = 'publish' AND post_type = 'post' AND term_taxonomy_id = %d", $term->term_taxonomy_id) ); + else + $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d", $term->term_taxonomy_id) ); + $wpdb->update( $wpdb->term_taxonomy, array('count' => $count), array('term_taxonomy_id' => $term->term_taxonomy_id) ); + } +} + +/** + * Remove old options from the database. + * + * @since 2.3.0 + */ +function upgrade_230_options_table() { + global $wpdb; + $old_options_fields = array( 'option_can_override', 'option_type', 'option_width', 'option_height', 'option_description', 'option_admin_level' ); + $wpdb->hide_errors(); + foreach ( $old_options_fields as $old ) + $wpdb->query("ALTER TABLE $wpdb->options DROP $old"); + $wpdb->show_errors(); +} + +/** + * Remove old categories, link2cat, and post2cat database tables. + * + * @since 2.3.0 + */ +function upgrade_230_old_tables() { + global $wpdb; + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'categories'); + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'link2cat'); + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'post2cat'); +} + +/** + * Upgrade old slugs made in version 2.2. + * + * @since 2.2.0 + */ +function upgrade_old_slugs() { + // upgrade people who were using the Redirect Old Slugs plugin + global $wpdb; + $wpdb->query("UPDATE $wpdb->postmeta SET meta_key = '_wp_old_slug' WHERE meta_key = 'old_slug'"); +} + +/** + * Execute changes made in WordPress 2.5.0. + * + * @since 2.5.0 + */ +function upgrade_250() { + global $wp_current_db_version; + + if ( $wp_current_db_version < 6689 ) { + populate_roles_250(); + } + +} + +/** + * Execute changes made in WordPress 2.5.2. + * + * @since 2.5.2 + */ +function upgrade_252() { + global $wpdb; + + $wpdb->query("UPDATE $wpdb->users SET user_activation_key = ''"); +} + +/** + * Execute changes made in WordPress 2.6. + * + * @since 2.6.0 + */ +function upgrade_260() { + global $wp_current_db_version; + + if ( $wp_current_db_version < 8000 ) + populate_roles_260(); +} + +/** + * Execute changes made in WordPress 2.7. + * + * @since 2.7.0 + */ +function upgrade_270() { + global $wpdb, $wp_current_db_version; + + if ( $wp_current_db_version < 8980 ) + populate_roles_270(); + + // Update post_date for unpublished posts with empty timestamp + if ( $wp_current_db_version < 8921 ) + $wpdb->query( "UPDATE $wpdb->posts SET post_date = post_modified WHERE post_date = '0000-00-00 00:00:00'" ); +} + +/** + * Execute changes made in WordPress 2.8. + * + * @since 2.8.0 + */ +function upgrade_280() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 10360 ) + populate_roles_280(); + if ( is_multisite() ) { + $start = 0; + while( $rows = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options ORDER BY option_id LIMIT $start, 20" ) ) { + foreach( $rows as $row ) { + $value = $row->option_value; + if ( !@unserialize( $value ) ) + $value = stripslashes( $value ); + if ( $value !== $row->option_value ) { + update_option( $row->option_name, $value ); + } + } + $start += 20; + } + refresh_blog_details( $wpdb->blogid ); + } +} + +/** + * Execute changes made in WordPress 2.9. + * + * @since 2.9.0 + */ +function upgrade_290() { + global $wp_current_db_version; + + if ( $wp_current_db_version < 11958 ) { + // Previously, setting depth to 1 would redundantly disable threading, but now 2 is the minimum depth to avoid confusion + if ( get_option( 'thread_comments_depth' ) == '1' ) { + update_option( 'thread_comments_depth', 2 ); + update_option( 'thread_comments', 0 ); + } + } +} + +/** + * Execute changes made in WordPress 3.0. + * + * @since 3.0.0 + */ +function upgrade_300() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 15093 ) + populate_roles_300(); + + if ( $wp_current_db_version < 14139 && is_multisite() && is_main_site() && ! defined( 'MULTISITE' ) && get_site_option( 'siteurl' ) === false ) + add_site_option( 'siteurl', '' ); + + // 3.0 screen options key name changes. + if ( is_main_site() && !defined('DO_NOT_UPGRADE_GLOBAL_TABLES') ) { + $prefix = like_escape($wpdb->base_prefix); + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key LIKE '{$prefix}%meta-box-hidden%' OR meta_key LIKE '{$prefix}%closedpostboxes%' OR meta_key LIKE '{$prefix}%manage-%-columns-hidden%' OR meta_key LIKE '{$prefix}%meta-box-order%' OR meta_key LIKE '{$prefix}%metaboxorder%' OR meta_key LIKE '{$prefix}%screen_layout%' + OR meta_key = 'manageedittagscolumnshidden' OR meta_key='managecategoriescolumnshidden' OR meta_key = 'manageedit-tagscolumnshidden' OR meta_key = 'manageeditcolumnshidden' OR meta_key = 'categories_per_page' OR meta_key = 'edit_tags_per_page'" ); + } + +} + +/** + * Execute changes made in WordPress 3.3. + * + * @since 3.3.0 + */ +function upgrade_330() { + global $wp_current_db_version, $wpdb, $wp_registered_widgets, $sidebars_widgets; + + if ( $wp_current_db_version < 19061 && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key IN ('show_admin_bar_admin', 'plugins_last_view')" ); + } + + if ( $wp_current_db_version >= 11548 ) + return; + + $sidebars_widgets = get_option( 'sidebars_widgets', array() ); + $_sidebars_widgets = array(); + + if ( isset($sidebars_widgets['wp_inactive_widgets']) || empty($sidebars_widgets) ) + $sidebars_widgets['array_version'] = 3; + elseif ( !isset($sidebars_widgets['array_version']) ) + $sidebars_widgets['array_version'] = 1; + + switch ( $sidebars_widgets['array_version'] ) { + case 1 : + foreach ( (array) $sidebars_widgets as $index => $sidebar ) + if ( is_array($sidebar) ) + foreach ( (array) $sidebar as $i => $name ) { + $id = strtolower($name); + if ( isset($wp_registered_widgets[$id]) ) { + $_sidebars_widgets[$index][$i] = $id; + continue; + } + $id = sanitize_title($name); + if ( isset($wp_registered_widgets[$id]) ) { + $_sidebars_widgets[$index][$i] = $id; + continue; + } + + $found = false; + + foreach ( $wp_registered_widgets as $widget_id => $widget ) { + if ( strtolower($widget['name']) == strtolower($name) ) { + $_sidebars_widgets[$index][$i] = $widget['id']; + $found = true; + break; + } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { + $_sidebars_widgets[$index][$i] = $widget['id']; + $found = true; + break; + } + } + + if ( $found ) + continue; + + unset($_sidebars_widgets[$index][$i]); + } + $_sidebars_widgets['array_version'] = 2; + $sidebars_widgets = $_sidebars_widgets; + unset($_sidebars_widgets); + + case 2 : + $sidebars_widgets = retrieve_widgets(); + $sidebars_widgets['array_version'] = 3; + update_option( 'sidebars_widgets', $sidebars_widgets ); + } +} + +/** + * Execute changes made in WordPress 3.4. + * + * @since 3.4.0 + */ +function upgrade_340() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 19798 ) { + $wpdb->hide_errors(); + $wpdb->query( "ALTER TABLE $wpdb->options DROP COLUMN blog_id" ); + $wpdb->show_errors(); + } + + if ( $wp_current_db_version < 19799 ) { + $wpdb->hide_errors(); + $wpdb->query("ALTER TABLE $wpdb->comments DROP INDEX comment_approved"); + $wpdb->show_errors(); + } + + if ( $wp_current_db_version < 20022 && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key = 'themes_last_view'" ); + } + + if ( $wp_current_db_version < 20080 ) { + if ( 'yes' == $wpdb->get_var( "SELECT autoload FROM $wpdb->options WHERE option_name = 'uninstall_plugins'" ) ) { + $uninstall_plugins = get_option( 'uninstall_plugins' ); + delete_option( 'uninstall_plugins' ); + add_option( 'uninstall_plugins', $uninstall_plugins, null, 'no' ); + } + } +} + +/** + * Execute changes made in WordPress 3.5. + * + * @since 3.5.0 + */ +function upgrade_350() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 22006 && $wpdb->get_var( "SELECT link_id FROM $wpdb->links LIMIT 1" ) ) + update_option( 'link_manager_enabled', 1 ); // Previously set to 0 by populate_options() + + if ( $wp_current_db_version < 21811 && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $meta_keys = array(); + foreach ( array_merge( get_post_types(), get_taxonomies() ) as $name ) { + if ( false !== strpos( $name, '-' ) ) + $meta_keys[] = 'edit_' . str_replace( '-', '_', $name ) . '_per_page'; + } + if ( $meta_keys ) { + $meta_keys = implode( "', '", $meta_keys ); + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key IN ('$meta_keys')" ); + } + } + + if ( $wp_current_db_version < 22422 && $term = get_term_by( 'slug', 'post-format-standard', 'post_format' ) ) + wp_delete_term( $term->term_id, 'post_format' ); +} + +/** + * Execute changes made in WordPress 3.7. + * + * @since 3.7.0 + */ +function upgrade_370() { + global $wp_current_db_version; + if ( $wp_current_db_version < 25824 ) + wp_clear_scheduled_hook( 'wp_auto_updates_maybe_update' ); +} + +/** + * Execute changes made in WordPress 3.7.2. + * + * @since 3.7.2 + * @since 3.8.0 + */ +function upgrade_372() { + global $wp_current_db_version; + if ( $wp_current_db_version < 26148 ) + wp_clear_scheduled_hook( 'wp_maybe_auto_update' ); +} + +/** + * Execute changes made in WordPress 3.8.0. + * + * @since 3.8.0 + */ +function upgrade_380() { + global $wp_current_db_version; + if ( $wp_current_db_version < 26691 ) { + deactivate_plugins( array( 'mp6/mp6.php' ), true ); + } +} +/** + * Execute network level changes + * + * @since 3.0.0 + */ +function upgrade_network() { + global $wp_current_db_version, $wpdb; + + // Always + if ( is_main_network() ) { + // Deletes all expired transients. + // The multi-table delete syntax is used to delete the transient record from table a, + // and the corresponding transient_timeout record from table b. + $time = time(); + $wpdb->query("DELETE a, b FROM $wpdb->sitemeta a, $wpdb->sitemeta b WHERE + a.meta_key LIKE '\_site\_transient\_%' AND + a.meta_key NOT LIKE '\_site\_transient\_timeout\_%' AND + b.meta_key = CONCAT( '_site_transient_timeout_', SUBSTRING( a.meta_key, 17 ) ) + AND b.meta_value < $time"); + } + + // 2.8 + if ( $wp_current_db_version < 11549 ) { + $wpmu_sitewide_plugins = get_site_option( 'wpmu_sitewide_plugins' ); + $active_sitewide_plugins = get_site_option( 'active_sitewide_plugins' ); + if ( $wpmu_sitewide_plugins ) { + if ( !$active_sitewide_plugins ) + $sitewide_plugins = (array) $wpmu_sitewide_plugins; + else + $sitewide_plugins = array_merge( (array) $active_sitewide_plugins, (array) $wpmu_sitewide_plugins ); + + update_site_option( 'active_sitewide_plugins', $sitewide_plugins ); + } + delete_site_option( 'wpmu_sitewide_plugins' ); + delete_site_option( 'deactivated_sitewide_plugins' ); + + $start = 0; + while( $rows = $wpdb->get_results( "SELECT meta_key, meta_value FROM {$wpdb->sitemeta} ORDER BY meta_id LIMIT $start, 20" ) ) { + foreach( $rows as $row ) { + $value = $row->meta_value; + if ( !@unserialize( $value ) ) + $value = stripslashes( $value ); + if ( $value !== $row->meta_value ) { + update_site_option( $row->meta_key, $value ); + } + } + $start += 20; + } + } + + // 3.0 + if ( $wp_current_db_version < 13576 ) + update_site_option( 'global_terms_enabled', '1' ); + + // 3.3 + if ( $wp_current_db_version < 19390 ) + update_site_option( 'initial_db_version', $wp_current_db_version ); + + if ( $wp_current_db_version < 19470 ) { + if ( false === get_site_option( 'active_sitewide_plugins' ) ) + update_site_option( 'active_sitewide_plugins', array() ); + } + + // 3.4 + if ( $wp_current_db_version < 20148 ) { + // 'allowedthemes' keys things by stylesheet. 'allowed_themes' keyed things by name. + $allowedthemes = get_site_option( 'allowedthemes' ); + $allowed_themes = get_site_option( 'allowed_themes' ); + if ( false === $allowedthemes && is_array( $allowed_themes ) && $allowed_themes ) { + $converted = array(); + $themes = wp_get_themes(); + foreach ( $themes as $stylesheet => $theme_data ) { + if ( isset( $allowed_themes[ $theme_data->get('Name') ] ) ) + $converted[ $stylesheet ] = true; + } + update_site_option( 'allowedthemes', $converted ); + delete_site_option( 'allowed_themes' ); + } + } + + // 3.5 + if ( $wp_current_db_version < 21823 ) + update_site_option( 'ms_files_rewriting', '1' ); + + // 3.5.2 + if ( $wp_current_db_version < 24448 ) { + $illegal_names = get_site_option( 'illegal_names' ); + if ( is_array( $illegal_names ) && count( $illegal_names ) === 1 ) { + $illegal_name = reset( $illegal_names ); + $illegal_names = explode( ' ', $illegal_name ); + update_site_option( 'illegal_names', $illegal_names ); + } + } +} + +// The functions we use to actually do stuff + +// General + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.0.0 + * + * @param string $table_name Database table name to create. + * @param string $create_ddl SQL statement to create table. + * @return bool If table already exists or was created by function. + */ +function maybe_create_table($table_name, $create_ddl) { + global $wpdb; + if ( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name ) + return true; + //didn't find it try to create it. + $q = $wpdb->query($create_ddl); + // we cannot directly tell that whether this succeeded! + if ( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name ) + return true; + return false; +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.0.1 + * + * @param string $table Database table name. + * @param string $index Index name to drop. + * @return bool True, when finished. + */ +function drop_index($table, $index) { + global $wpdb; + $wpdb->hide_errors(); + $wpdb->query("ALTER TABLE `$table` DROP INDEX `$index`"); + // Now we need to take out all the extra ones we may have created + for ($i = 0; $i < 25; $i++) { + $wpdb->query("ALTER TABLE `$table` DROP INDEX `{$index}_$i`"); + } + $wpdb->show_errors(); + return true; +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.0.1 + * + * @param string $table Database table name. + * @param string $index Database table index column. + * @return bool True, when done with execution. + */ +function add_clean_index($table, $index) { + global $wpdb; + drop_index($table, $index); + $wpdb->query("ALTER TABLE `$table` ADD INDEX ( `$index` )"); + return true; +} + +/** + ** maybe_add_column() + ** Add column to db table if it doesn't exist. + ** Returns: true if already exists or on successful completion + ** false on error + */ +function maybe_add_column($table_name, $column_name, $create_ddl) { + global $wpdb; + foreach ($wpdb->get_col("DESC $table_name", 0) as $column ) { + if ($column == $column_name) { + return true; + } + } + //didn't find it try to create it. + $q = $wpdb->query($create_ddl); + // we cannot directly tell that whether this succeeded! + foreach ($wpdb->get_col("DESC $table_name", 0) as $column ) { + if ($column == $column_name) { + return true; + } + } + return false; +} + +/** + * Retrieve all options as it was for 1.2. + * + * @since 1.2.0 + * + * @return array List of options. + */ +function get_alloptions_110() { + global $wpdb; + $all_options = new stdClass; + if ( $options = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options" ) ) { + foreach ( $options as $option ) { + if ( 'siteurl' == $option->option_name || 'home' == $option->option_name || 'category_base' == $option->option_name ) + $option->option_value = untrailingslashit( $option->option_value ); + $all_options->{$option->option_name} = stripslashes( $option->option_value ); + } + } + return $all_options; +} + +/** + * Version of get_option that is private to install/upgrade. + * + * @since 1.5.1 + * @access private + * + * @param string $setting Option name. + * @return mixed + */ +function __get_option($setting) { + global $wpdb; + + if ( $setting == 'home' && defined( 'WP_HOME' ) ) + return untrailingslashit( WP_HOME ); + + if ( $setting == 'siteurl' && defined( 'WP_SITEURL' ) ) + return untrailingslashit( WP_SITEURL ); + + $option = $wpdb->get_var( $wpdb->prepare("SELECT option_value FROM $wpdb->options WHERE option_name = %s", $setting ) ); + + if ( 'home' == $setting && '' == $option ) + return __get_option( 'siteurl' ); + + if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting || 'tag_base' == $setting ) + $option = untrailingslashit( $option ); + + return maybe_unserialize( $option ); +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @param string $content + * @return string + */ +function deslash($content) { + // Note: \\\ inside a regex denotes a single backslash. + + // Replace one or more backslashes followed by a single quote with + // a single quote. + $content = preg_replace("/\\\+'/", "'", $content); + + // Replace one or more backslashes followed by a double quote with + // a double quote. + $content = preg_replace('/\\\+"/', '"', $content); + + // Replace one or more backslashes with one backslash. + $content = preg_replace("/\\\+/", "\\", $content); + + return $content; +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @param unknown_type $queries + * @param unknown_type $execute + * @return unknown + */ +function dbDelta( $queries = '', $execute = true ) { + global $wpdb; + + if ( in_array( $queries, array( '', 'all', 'blog', 'global', 'ms_global' ), true ) ) + $queries = wp_get_db_schema( $queries ); + + // Separate individual queries into an array + if ( !is_array($queries) ) { + $queries = explode( ';', $queries ); + $queries = array_filter( $queries ); + } + $queries = apply_filters( 'dbdelta_queries', $queries ); + + $cqueries = array(); // Creation Queries + $iqueries = array(); // Insertion Queries + $for_update = array(); + + // Create a tablename index for an array ($cqueries) of queries + foreach($queries as $qry) { + if (preg_match("|CREATE TABLE ([^ ]*)|", $qry, $matches)) { + $cqueries[ trim( $matches[1], '`' ) ] = $qry; + $for_update[$matches[1]] = 'Created table '.$matches[1]; + } else if (preg_match("|CREATE DATABASE ([^ ]*)|", $qry, $matches)) { + array_unshift($cqueries, $qry); + } else if (preg_match("|INSERT INTO ([^ ]*)|", $qry, $matches)) { + $iqueries[] = $qry; + } else if (preg_match("|UPDATE ([^ ]*)|", $qry, $matches)) { + $iqueries[] = $qry; + } else { + // Unrecognized query type + } + } + $cqueries = apply_filters( 'dbdelta_create_queries', $cqueries ); + $iqueries = apply_filters( 'dbdelta_insert_queries', $iqueries ); + + $global_tables = $wpdb->tables( 'global' ); + foreach ( $cqueries as $table => $qry ) { + // Upgrade global tables only for the main site. Don't upgrade at all if DO_NOT_UPGRADE_GLOBAL_TABLES is defined. + if ( in_array( $table, $global_tables ) && ( !is_main_site() || defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) ) { + unset( $cqueries[ $table ], $for_update[ $table ] ); + continue; + } + + // Fetch the table column structure from the database + $suppress = $wpdb->suppress_errors(); + $tablefields = $wpdb->get_results("DESCRIBE {$table};"); + $wpdb->suppress_errors( $suppress ); + + if ( ! $tablefields ) + continue; + + // Clear the field and index arrays + $cfields = $indices = array(); + // Get all of the field names in the query from between the parens + preg_match("|\((.*)\)|ms", $qry, $match2); + $qryline = trim($match2[1]); + + // Separate field lines into an array + $flds = explode("\n", $qryline); + + //echo "
    \n".print_r(strtolower($table), true).":\n".print_r($cqueries, true)."

    "; + + // For every field line specified in the query + foreach ($flds as $fld) { + // Extract the field name + preg_match("|^([^ ]*)|", trim($fld), $fvals); + $fieldname = trim( $fvals[1], '`' ); + + // Verify the found field name + $validfield = true; + switch (strtolower($fieldname)) { + case '': + case 'primary': + case 'index': + case 'fulltext': + case 'unique': + case 'key': + $validfield = false; + $indices[] = trim(trim($fld), ", \n"); + break; + } + $fld = trim($fld); + + // If it's a valid field, add it to the field array + if ($validfield) { + $cfields[strtolower($fieldname)] = trim($fld, ", \n"); + } + } + + // For every field in the table + foreach ($tablefields as $tablefield) { + // If the table field exists in the field array... + if (array_key_exists(strtolower($tablefield->Field), $cfields)) { + // Get the field type from the query + preg_match("|".$tablefield->Field." ([^ ]*( unsigned)?)|i", $cfields[strtolower($tablefield->Field)], $matches); + $fieldtype = $matches[1]; + + // Is actual field type different from the field type in query? + if ($tablefield->Type != $fieldtype) { + // Add a query to change the column type + $cqueries[] = "ALTER TABLE {$table} CHANGE COLUMN {$tablefield->Field} " . $cfields[strtolower($tablefield->Field)]; + $for_update[$table.'.'.$tablefield->Field] = "Changed type of {$table}.{$tablefield->Field} from {$tablefield->Type} to {$fieldtype}"; + } + + // Get the default value from the array + //echo "{$cfields[strtolower($tablefield->Field)]}
    "; + if (preg_match("| DEFAULT '(.*?)'|i", $cfields[strtolower($tablefield->Field)], $matches)) { + $default_value = $matches[1]; + if ($tablefield->Default != $default_value) { + // Add a query to change the column's default value + $cqueries[] = "ALTER TABLE {$table} ALTER COLUMN {$tablefield->Field} SET DEFAULT '{$default_value}'"; + $for_update[$table.'.'.$tablefield->Field] = "Changed default value of {$table}.{$tablefield->Field} from {$tablefield->Default} to {$default_value}"; + } + } + + // Remove the field from the array (so it's not added) + unset($cfields[strtolower($tablefield->Field)]); + } else { + // This field exists in the table, but not in the creation queries? + } + } + + // For every remaining field specified for the table + foreach ($cfields as $fieldname => $fielddef) { + // Push a query line into $cqueries that adds the field to that table + $cqueries[] = "ALTER TABLE {$table} ADD COLUMN $fielddef"; + $for_update[$table.'.'.$fieldname] = 'Added column '.$table.'.'.$fieldname; + } + + // Index stuff goes here + // Fetch the table index structure from the database + $tableindices = $wpdb->get_results("SHOW INDEX FROM {$table};"); + + if ($tableindices) { + // Clear the index array + unset($index_ary); + + // For every index in the table + foreach ($tableindices as $tableindex) { + // Add the index to the index data array + $keyname = $tableindex->Key_name; + $index_ary[$keyname]['columns'][] = array('fieldname' => $tableindex->Column_name, 'subpart' => $tableindex->Sub_part); + $index_ary[$keyname]['unique'] = ($tableindex->Non_unique == 0)?true:false; + } + + // For each actual index in the index array + foreach ($index_ary as $index_name => $index_data) { + // Build a create string to compare to the query + $index_string = ''; + if ($index_name == 'PRIMARY') { + $index_string .= 'PRIMARY '; + } else if($index_data['unique']) { + $index_string .= 'UNIQUE '; + } + $index_string .= 'KEY '; + if ($index_name != 'PRIMARY') { + $index_string .= $index_name; + } + $index_columns = ''; + // For each column in the index + foreach ($index_data['columns'] as $column_data) { + if ($index_columns != '') $index_columns .= ','; + // Add the field to the column list string + $index_columns .= $column_data['fieldname']; + if ($column_data['subpart'] != '') { + $index_columns .= '('.$column_data['subpart'].')'; + } + } + // Add the column list to the index create string + $index_string .= ' ('.$index_columns.')'; + if (!(($aindex = array_search($index_string, $indices)) === false)) { + unset($indices[$aindex]); + //echo "
    {$table}:
    Found index:".$index_string."
    \n"; + } + //else echo "
    {$table}:
    Did not find index:".$index_string."
    ".print_r($indices, true)."
    \n"; + } + } + + // For every remaining index specified for the table + foreach ( (array) $indices as $index ) { + // Push a query line into $cqueries that adds the index to that table + $cqueries[] = "ALTER TABLE {$table} ADD $index"; + $for_update[] = 'Added index ' . $table . ' ' . $index; + } + + // Remove the original table creation query from processing + unset( $cqueries[ $table ], $for_update[ $table ] ); + } + + $allqueries = array_merge($cqueries, $iqueries); + if ($execute) { + foreach ($allqueries as $query) { + //echo "
    ".print_r($query, true)."
    \n"; + $wpdb->query($query); + } + } + + return $for_update; +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + */ +function make_db_current( $tables = 'all' ) { + $alterations = dbDelta( $tables ); + echo "
      \n"; + foreach($alterations as $alteration) echo "
    1. $alteration
    2. \n"; + echo "
    \n"; +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + */ +function make_db_current_silent( $tables = 'all' ) { + $alterations = dbDelta( $tables ); +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @param unknown_type $theme_name + * @param unknown_type $template + * @return unknown + */ +function make_site_theme_from_oldschool($theme_name, $template) { + $home_path = get_home_path(); + $site_dir = WP_CONTENT_DIR . "/themes/$template"; + + if (! file_exists("$home_path/index.php")) + return false; + + // Copy files from the old locations to the site theme. + // TODO: This does not copy arbitrary include dependencies. Only the + // standard WP files are copied. + $files = array('index.php' => 'index.php', 'wp-layout.css' => 'style.css', 'wp-comments.php' => 'comments.php', 'wp-comments-popup.php' => 'comments-popup.php'); + + foreach ($files as $oldfile => $newfile) { + if ($oldfile == 'index.php') + $oldpath = $home_path; + else + $oldpath = ABSPATH; + + if ($oldfile == 'index.php') { // Check to make sure it's not a new index + $index = implode('', file("$oldpath/$oldfile")); + if (strpos($index, 'WP_USE_THEMES') !== false) { + if (! @copy(WP_CONTENT_DIR . '/themes/' . WP_DEFAULT_THEME . '/index.php', "$site_dir/$newfile")) + return false; + continue; // Don't copy anything + } + } + + if (! @copy("$oldpath/$oldfile", "$site_dir/$newfile")) + return false; + + chmod("$site_dir/$newfile", 0777); + + // Update the blog header include in each file. + $lines = explode("\n", implode('', file("$site_dir/$newfile"))); + if ($lines) { + $f = fopen("$site_dir/$newfile", 'w'); + + foreach ($lines as $line) { + if (preg_match('/require.*wp-blog-header/', $line)) + $line = '//' . $line; + + // Update stylesheet references. + $line = str_replace("/wp-layout.css", "", $line); + + // Update comments template inclusion. + $line = str_replace("", "", $line); + + fwrite($f, "{$line}\n"); + } + fclose($f); + } + } + + // Add a theme header. + $header = "/*\nTheme Name: $theme_name\nTheme URI: " . __get_option('siteurl') . "\nDescription: A theme automatically created by the update.\nVersion: 1.0\nAuthor: Moi\n*/\n"; + + $stylelines = file_get_contents("$site_dir/style.css"); + if ($stylelines) { + $f = fopen("$site_dir/style.css", 'w'); + + fwrite($f, $header); + fwrite($f, $stylelines); + fclose($f); + } + + return true; +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @param unknown_type $theme_name + * @param unknown_type $template + * @return unknown + */ +function make_site_theme_from_default($theme_name, $template) { + $site_dir = WP_CONTENT_DIR . "/themes/$template"; + $default_dir = WP_CONTENT_DIR . '/themes/' . WP_DEFAULT_THEME; + + // Copy files from the default theme to the site theme. + //$files = array('index.php', 'comments.php', 'comments-popup.php', 'footer.php', 'header.php', 'sidebar.php', 'style.css'); + + $theme_dir = @ opendir($default_dir); + if ($theme_dir) { + while(($theme_file = readdir( $theme_dir )) !== false) { + if (is_dir("$default_dir/$theme_file")) + continue; + if (! @copy("$default_dir/$theme_file", "$site_dir/$theme_file")) + return; + chmod("$site_dir/$theme_file", 0777); + } + } + @closedir($theme_dir); + + // Rewrite the theme header. + $stylelines = explode("\n", implode('', file("$site_dir/style.css"))); + if ($stylelines) { + $f = fopen("$site_dir/style.css", 'w'); + + foreach ($stylelines as $line) { + if (strpos($line, 'Theme Name:') !== false) $line = 'Theme Name: ' . $theme_name; + elseif (strpos($line, 'Theme URI:') !== false) $line = 'Theme URI: ' . __get_option('url'); + elseif (strpos($line, 'Description:') !== false) $line = 'Description: Your theme.'; + elseif (strpos($line, 'Version:') !== false) $line = 'Version: 1'; + elseif (strpos($line, 'Author:') !== false) $line = 'Author: You'; + fwrite($f, $line . "\n"); + } + fclose($f); + } + + // Copy the images. + umask(0); + if (! mkdir("$site_dir/images", 0777)) { + return false; + } + + $images_dir = @ opendir("$default_dir/images"); + if ($images_dir) { + while(($image = readdir($images_dir)) !== false) { + if (is_dir("$default_dir/images/$image")) + continue; + if (! @copy("$default_dir/images/$image", "$site_dir/images/$image")) + return; + chmod("$site_dir/images/$image", 0777); + } + } + @closedir($images_dir); +} + +// Create a site theme from the default theme. +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @return unknown + */ +function make_site_theme() { + // Name the theme after the blog. + $theme_name = __get_option('blogname'); + $template = sanitize_title($theme_name); + $site_dir = WP_CONTENT_DIR . "/themes/$template"; + + // If the theme already exists, nothing to do. + if ( is_dir($site_dir)) { + return false; + } + + // We must be able to write to the themes dir. + if (! is_writable(WP_CONTENT_DIR . "/themes")) { + return false; + } + + umask(0); + if (! mkdir($site_dir, 0777)) { + return false; + } + + if (file_exists(ABSPATH . 'wp-layout.css')) { + if (! make_site_theme_from_oldschool($theme_name, $template)) { + // TODO: rm -rf the site theme directory. + return false; + } + } else { + if (! make_site_theme_from_default($theme_name, $template)) + // TODO: rm -rf the site theme directory. + return false; + } + + // Make the new site theme active. + $current_template = __get_option('template'); + if ($current_template == WP_DEFAULT_THEME) { + update_option('template', $template); + update_option('stylesheet', $template); + } + return $template; +} + +/** + * Translate user level to user role name. + * + * @since 2.0.0 + * + * @param int $level User level. + * @return string User role name. + */ +function translate_level_to_role($level) { + switch ($level) { + case 10: + case 9: + case 8: + return 'administrator'; + case 7: + case 6: + case 5: + return 'editor'; + case 4: + case 3: + case 2: + return 'author'; + case 1: + return 'contributor'; + case 0: + return 'subscriber'; + } +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + */ +function wp_check_mysql_version() { + global $wpdb; + $result = $wpdb->check_database_version(); + if ( is_wp_error( $result ) ) + die( $result->get_error_message() ); +} + +/** + * Disables the Automattic widgets plugin, which was merged into core. + * + * @since 2.2.0 + */ +function maybe_disable_automattic_widgets() { + $plugins = __get_option( 'active_plugins' ); + + foreach ( (array) $plugins as $plugin ) { + if ( basename( $plugin ) == 'widgets.php' ) { + array_splice( $plugins, array_search( $plugin, $plugins ), 1 ); + update_option( 'active_plugins', $plugins ); + break; + } + } +} + +/** + * Disables the Link Manager on upgrade, if at the time of upgrade, no links exist in the DB. + * + * @since 3.5.0 + */ +function maybe_disable_link_manager() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version >= 22006 && get_option( 'link_manager_enabled' ) && ! $wpdb->get_var( "SELECT link_id FROM $wpdb->links LIMIT 1" ) ) + update_option( 'link_manager_enabled', 0 ); +} + +/** + * Runs before the schema is upgraded. + * + * @since 2.9.0 + */ +function pre_schema_upgrade() { + global $wp_current_db_version, $wpdb; + + // Upgrade versions prior to 2.9 + if ( $wp_current_db_version < 11557 ) { + // Delete duplicate options. Keep the option with the highest option_id. + $wpdb->query("DELETE o1 FROM $wpdb->options AS o1 JOIN $wpdb->options AS o2 USING (`option_name`) WHERE o2.option_id > o1.option_id"); + + // Drop the old primary key and add the new. + $wpdb->query("ALTER TABLE $wpdb->options DROP PRIMARY KEY, ADD PRIMARY KEY(option_id)"); + + // Drop the old option_name index. dbDelta() doesn't do the drop. + $wpdb->query("ALTER TABLE $wpdb->options DROP INDEX option_name"); + } + + // Multisite schema upgrades. + if ( $wp_current_db_version < 25448 && is_multisite() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) && is_main_network() ) { + + // Upgrade verions prior to 3.7 + if ( $wp_current_db_version < 25179 ) { + // New primary key for signups. + $wpdb->query( "ALTER TABLE $wpdb->signups ADD signup_id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST" ); + $wpdb->query( "ALTER TABLE $wpdb->signups DROP INDEX domain" ); + } + + if ( $wp_current_db_version < 25448 ) { + // Convert archived from enum to tinyint. + $wpdb->query( "ALTER TABLE $wpdb->blogs CHANGE COLUMN archived archived varchar(1) NOT NULL default '0'" ); + $wpdb->query( "ALTER TABLE $wpdb->blogs CHANGE COLUMN archived archived tinyint(2) NOT NULL default 0" ); + } + } +} + +/** + * Install global terms. + * + * @since 3.0.0 + * + */ +if ( !function_exists( 'install_global_terms' ) ) : +function install_global_terms() { + global $wpdb, $charset_collate; + $ms_queries = " +CREATE TABLE $wpdb->sitecategories ( + cat_ID bigint(20) NOT NULL auto_increment, + cat_name varchar(55) NOT NULL default '', + category_nicename varchar(200) NOT NULL default '', + last_updated timestamp NOT NULL, + PRIMARY KEY (cat_ID), + KEY category_nicename (category_nicename), + KEY last_updated (last_updated) +) $charset_collate; +"; +// now create tables + dbDelta( $ms_queries ); +} +endif; diff --git a/src/wp-admin/includes/user.php b/src/wp-admin/includes/user.php new file mode 100644 index 0000000..85939fa --- /dev/null +++ b/src/wp-admin/includes/user.php @@ -0,0 +1,426 @@ +ID = (int) $user_id; + $userdata = get_userdata( $user_id ); + $user->user_login = wp_slash( $userdata->user_login ); + } else { + $update = false; + } + + if ( !$update && isset( $_POST['user_login'] ) ) + $user->user_login = sanitize_user($_POST['user_login'], true); + + $pass1 = $pass2 = ''; + if ( isset( $_POST['pass1'] ) ) + $pass1 = $_POST['pass1']; + if ( isset( $_POST['pass2'] ) ) + $pass2 = $_POST['pass2']; + + if ( isset( $_POST['role'] ) && current_user_can( 'edit_users' ) ) { + $new_role = sanitize_text_field( $_POST['role'] ); + $potential_role = isset($wp_roles->role_objects[$new_role]) ? $wp_roles->role_objects[$new_role] : false; + // Don't let anyone with 'edit_users' (admins) edit their own role to something without it. + // Multisite super admins can freely edit their blog roles -- they possess all caps. + if ( ( is_multisite() && current_user_can( 'manage_sites' ) ) || $user_id != get_current_user_id() || ($potential_role && $potential_role->has_cap( 'edit_users' ) ) ) + $user->role = $new_role; + + // If the new role isn't editable by the logged-in user die with error + $editable_roles = get_editable_roles(); + if ( ! empty( $new_role ) && empty( $editable_roles[$new_role] ) ) + wp_die(__('You can’t give users that role.')); + } + + if ( isset( $_POST['email'] )) + $user->user_email = sanitize_text_field( $_POST['email'] ); + if ( isset( $_POST['url'] ) ) { + if ( empty ( $_POST['url'] ) || $_POST['url'] == 'http://' ) { + $user->user_url = ''; + } else { + $user->user_url = esc_url_raw( $_POST['url'] ); + $protocols = implode( '|', array_map( 'preg_quote', wp_allowed_protocols() ) ); + $user->user_url = preg_match('/^(' . $protocols . '):/is', $user->user_url) ? $user->user_url : 'http://'.$user->user_url; + } + } + if ( isset( $_POST['first_name'] ) ) + $user->first_name = sanitize_text_field( $_POST['first_name'] ); + if ( isset( $_POST['last_name'] ) ) + $user->last_name = sanitize_text_field( $_POST['last_name'] ); + if ( isset( $_POST['nickname'] ) ) + $user->nickname = sanitize_text_field( $_POST['nickname'] ); + if ( isset( $_POST['display_name'] ) ) + $user->display_name = sanitize_text_field( $_POST['display_name'] ); + + if ( isset( $_POST['description'] ) ) + $user->description = trim( $_POST['description'] ); + + foreach ( wp_get_user_contact_methods( $user ) as $method => $name ) { + if ( isset( $_POST[$method] )) + $user->$method = sanitize_text_field( $_POST[$method] ); + } + + if ( $update ) { + $user->rich_editing = isset( $_POST['rich_editing'] ) && 'false' == $_POST['rich_editing'] ? 'false' : 'true'; + $user->admin_color = isset( $_POST['admin_color'] ) ? sanitize_text_field( $_POST['admin_color'] ) : 'fresh'; + $user->show_admin_bar_front = isset( $_POST['admin_bar_front'] ) ? 'true' : 'false'; + } + + $user->comment_shortcuts = isset( $_POST['comment_shortcuts'] ) && 'true' == $_POST['comment_shortcuts'] ? 'true' : ''; + + $user->use_ssl = 0; + if ( !empty($_POST['use_ssl']) ) + $user->use_ssl = 1; + + $errors = new WP_Error(); + + /* checking that username has been typed */ + if ( $user->user_login == '' ) + $errors->add( 'user_login', __( 'ERROR: Please enter a username.' ) ); + + /* checking the password has been typed twice */ + /** + * Fires before the password and confirm password fields are checked for congruity. + * + * @since 1.5.1 + * + * @param string $user_login The username. + * @param string &$pass1 The password, passed by reference. + * @param string &$pass2 The confirmed password, passed by reference. + */ + do_action_ref_array( 'check_passwords', array( $user->user_login, &$pass1, &$pass2 ) ); + + if ( $update ) { + if ( empty($pass1) && !empty($pass2) ) + $errors->add( 'pass', __( 'ERROR: You entered your new password only once.' ), array( 'form-field' => 'pass1' ) ); + elseif ( !empty($pass1) && empty($pass2) ) + $errors->add( 'pass', __( 'ERROR: You entered your new password only once.' ), array( 'form-field' => 'pass2' ) ); + } else { + if ( empty($pass1) ) + $errors->add( 'pass', __( 'ERROR: Please enter your password.' ), array( 'form-field' => 'pass1' ) ); + elseif ( empty($pass2) ) + $errors->add( 'pass', __( 'ERROR: Please enter your password twice.' ), array( 'form-field' => 'pass2' ) ); + } + + /* Check for "\" in password */ + if ( false !== strpos( wp_unslash( $pass1 ), "\\" ) ) + $errors->add( 'pass', __( 'ERROR: Passwords may not contain the character "\\".' ), array( 'form-field' => 'pass1' ) ); + + /* checking the password has been typed twice the same */ + if ( $pass1 != $pass2 ) + $errors->add( 'pass', __( 'ERROR: Please enter the same password in the two password fields.' ), array( 'form-field' => 'pass1' ) ); + + if ( !empty( $pass1 ) ) + $user->user_pass = $pass1; + + if ( !$update && isset( $_POST['user_login'] ) && !validate_username( $_POST['user_login'] ) ) + $errors->add( 'user_login', __( 'ERROR: This username is invalid because it uses illegal characters. Please enter a valid username.' )); + + if ( !$update && username_exists( $user->user_login ) ) + $errors->add( 'user_login', __( 'ERROR: This username is already registered. Please choose another one.' )); + + /* checking e-mail address */ + if ( empty( $user->user_email ) ) { + $errors->add( 'empty_email', __( 'ERROR: Please enter an e-mail address.' ), array( 'form-field' => 'email' ) ); + } elseif ( !is_email( $user->user_email ) ) { + $errors->add( 'invalid_email', __( 'ERROR: The email address isn’t correct.' ), array( 'form-field' => 'email' ) ); + } elseif ( ( $owner_id = email_exists($user->user_email) ) && ( !$update || ( $owner_id != $user->ID ) ) ) { + $errors->add( 'email_exists', __('ERROR: This email is already registered, please choose another one.'), array( 'form-field' => 'email' ) ); + } + + /** + * Fires before user profile update errors are returned. + * + * @since 2.8.0 + * + * @param array &$errors An array of user profile update errors, passed by reference. + * @param bool $update Whether this is a user update. + * @param WP_User &$user WP_User object, passed by reference. + */ + do_action_ref_array( 'user_profile_update_errors', array( &$errors, $update, &$user ) ); + + if ( $errors->get_error_codes() ) + return $errors; + + if ( $update ) { + $user_id = wp_update_user( $user ); + } else { + $user_id = wp_insert_user( $user ); + wp_new_user_notification( $user_id, isset( $_POST['send_password'] ) ? wp_unslash( $pass1 ) : '' ); + } + return $user_id; +} + +/** + * Fetch a filtered list of user roles that the current user is + * allowed to edit. + * + * Simple function who's main purpose is to allow filtering of the + * list of roles in the $wp_roles object so that plugins can remove + * inappropriate ones depending on the situation or user making edits. + * Specifically because without filtering anyone with the edit_users + * capability can edit others to be administrators, even if they are + * only editors or authors. This filter allows admins to delegate + * user management. + * + * @since 2.8 + * + * @return unknown + */ +function get_editable_roles() { + global $wp_roles; + + $all_roles = $wp_roles->roles; + + /** + * Filter the list of editable roles. + * + * @since 2.8.0 + * + * @param array $all_roles List of roles. + */ + $editable_roles = apply_filters( 'editable_roles', $all_roles ); + + return $editable_roles; +} + +/** + * Retrieve user data and filter it. + * + * @since 2.0.5 + * + * @param int $user_id User ID. + * @return WP_User|bool WP_User object on success, false on failure. + */ +function get_user_to_edit( $user_id ) { + $user = get_userdata( $user_id ); + + if ( $user ) + $user->filter = 'edit'; + + return $user; +} + +/** + * Retrieve the user's drafts. + * + * @since 2.0.0 + * + * @param int $user_id User ID. + * @return array + */ +function get_users_drafts( $user_id ) { + global $wpdb; + $query = $wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'draft' AND post_author = %d ORDER BY post_modified DESC", $user_id); + + /** + * Filter the user's drafts query string. + * + * @since 2.0.0 + * + * @param string $query The user's drafts query string. + */ + $query = apply_filters( 'get_users_drafts', $query ); + return $wpdb->get_results( $query ); +} + +/** + * Remove user and optionally reassign posts and links to another user. + * + * If the $reassign parameter is not assigned to an User ID, then all posts will + * be deleted of that user. The action 'delete_user' that is passed the User ID + * being deleted will be run after the posts are either reassigned or deleted. + * The user meta will also be deleted that are for that User ID. + * + * @since 2.0.0 + * + * @param int $id User ID. + * @param int $reassign Optional. Reassign posts and links to new User ID. + * @return bool True when finished. + */ +function wp_delete_user( $id, $reassign = 'novalue' ) { + global $wpdb; + + $id = (int) $id; + $user = new WP_User( $id ); + + if ( !$user->exists() ) + return false; + + /** + * Fires immediately before a user is deleted from the database. + * + * @since 2.0.0 + * + * @param int $id User ID. + */ + do_action( 'delete_user', $id ); + + if ( 'novalue' === $reassign || null === $reassign ) { + $post_types_to_delete = array(); + foreach ( get_post_types( array(), 'objects' ) as $post_type ) { + if ( $post_type->delete_with_user ) { + $post_types_to_delete[] = $post_type->name; + } elseif ( null === $post_type->delete_with_user && post_type_supports( $post_type->name, 'author' ) ) { + $post_types_to_delete[] = $post_type->name; + } + } + + /** + * Filter the list of post types to delete with a user. + * + * @since 3.4.0 + * + * @param array $post_types_to_delete Post types to delete. + * @param int $id User ID. + */ + $post_types_to_delete = apply_filters( 'post_types_to_delete_with_user', $post_types_to_delete, $id ); + $post_types_to_delete = implode( "', '", $post_types_to_delete ); + $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d AND post_type IN ('$post_types_to_delete')", $id ) ); + if ( $post_ids ) { + foreach ( $post_ids as $post_id ) + wp_delete_post( $post_id ); + } + + // Clean links + $link_ids = $wpdb->get_col( $wpdb->prepare("SELECT link_id FROM $wpdb->links WHERE link_owner = %d", $id) ); + + if ( $link_ids ) { + foreach ( $link_ids as $link_id ) + wp_delete_link($link_id); + } + } else { + $reassign = (int) $reassign; + $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d", $id ) ); + $wpdb->update( $wpdb->posts, array('post_author' => $reassign), array('post_author' => $id) ); + if ( ! empty( $post_ids ) ) { + foreach ( $post_ids as $post_id ) + clean_post_cache( $post_id ); + } + $link_ids = $wpdb->get_col( $wpdb->prepare("SELECT link_id FROM $wpdb->links WHERE link_owner = %d", $id) ); + $wpdb->update( $wpdb->links, array('link_owner' => $reassign), array('link_owner' => $id) ); + if ( ! empty( $link_ids ) ) { + foreach ( $link_ids as $link_id ) + clean_bookmark_cache( $link_id ); + } + } + + // FINALLY, delete user + if ( is_multisite() ) { + remove_user_from_blog( $id, get_current_blog_id() ); + } else { + $meta = $wpdb->get_col( $wpdb->prepare( "SELECT umeta_id FROM $wpdb->usermeta WHERE user_id = %d", $id ) ); + foreach ( $meta as $mid ) + delete_metadata_by_mid( 'user', $mid ); + + $wpdb->delete( $wpdb->users, array( 'ID' => $id ) ); + } + + clean_user_cache( $user ); + + /** + * Fires immediately after a user is deleted from the database. + * + * @since 2.9.0 + * + * @param int $id ID of the deleted user. + */ + do_action( 'deleted_user', $id ); + + return true; +} + +/** + * Remove all capabilities from user. + * + * @since 2.1.0 + * + * @param int $id User ID. + */ +function wp_revoke_user($id) { + $id = (int) $id; + + $user = new WP_User($id); + $user->remove_all_caps(); +} + +add_action('admin_init', 'default_password_nag_handler'); +/** + * @since 2.8.0 + */ +function default_password_nag_handler($errors = false) { + global $user_ID; + if ( ! get_user_option('default_password_nag') ) //Short circuit it. + return; + + //get_user_setting = JS saved UI setting. else no-js-fallback code. + if ( 'hide' == get_user_setting('default_password_nag') || isset($_GET['default_password_nag']) && '0' == $_GET['default_password_nag'] ) { + delete_user_setting('default_password_nag'); + update_user_option($user_ID, 'default_password_nag', false, true); + } +} + +add_action('profile_update', 'default_password_nag_edit_user', 10, 2); +/** + * @since 2.8.0 + */ +function default_password_nag_edit_user($user_ID, $old_data) { + if ( ! get_user_option('default_password_nag', $user_ID) ) //Short circuit it. + return; + + $new_data = get_userdata($user_ID); + + if ( $new_data->user_pass != $old_data->user_pass ) { //Remove the nag if the password has been changed. + delete_user_setting('default_password_nag'); + update_user_option($user_ID, 'default_password_nag', false, true); + } +} + +add_action('admin_notices', 'default_password_nag'); +/** + * @since 2.8.0 + */ +function default_password_nag() { + global $pagenow; + if ( 'profile.php' == $pagenow || ! get_user_option('default_password_nag') ) //Short circuit it. + return; + + echo '
    '; + echo '

    '; + echo '' . __('Notice:') . ' '; + _e('You’re using the auto-generated password for your account. Would you like to change it to something easier to remember?'); + echo '

    '; + printf( '' . __('Yes, take me to my profile page') . ' | ', get_edit_profile_url( get_current_user_id() ) . '#password' ); + printf( '' . __('No thanks, do not remind me again') . '', '?default_password_nag=0' ); + echo '

    '; +} diff --git a/src/wp-admin/includes/widgets.php b/src/wp-admin/includes/widgets.php new file mode 100644 index 0000000..c574f41 --- /dev/null +++ b/src/wp-admin/includes/widgets.php @@ -0,0 +1,241 @@ + $widget['id'], 'widget_name' => $widget['name'], '_display' => 'template' ); + + if ( isset($wp_registered_widget_controls[$widget['id']]['id_base']) && isset($widget['params'][0]['number']) ) { + $id_base = $wp_registered_widget_controls[$widget['id']]['id_base']; + $args['_temp_id'] = "$id_base-__i__"; + $args['_multi_num'] = next_widget_id_number($id_base); + $args['_add'] = 'multi'; + } else { + $args['_add'] = 'single'; + if ( $sidebar ) + $args['_hide'] = '1'; + } + + $args = wp_list_widget_controls_dynamic_sidebar( array( 0 => $args, 1 => $widget['params'][0] ) ); + call_user_func_array( 'wp_widget_control', $args ); + } +} + +/** + * Callback to sort array by a 'name' key. + * + * @since 3.1.0 + * @access private + */ +function _sort_name_callback( $a, $b ) { + return strnatcasecmp( $a['name'], $b['name'] ); +} + +/** + * Show the widgets and their settings for a sidebar. + * Used in the admin widget config screen. + * + * @since 2.5.0 + * + * @param string $sidebar id slug of the sidebar + * @param string optional $sidebar_name Include the HTML for the sidebar name + */ +function wp_list_widget_controls( $sidebar, $sidebar_name = '' ) { + add_filter( 'dynamic_sidebar_params', 'wp_list_widget_controls_dynamic_sidebar' ); + + $description = wp_sidebar_description( $sidebar ); + + echo '
    '; + + if ( $sidebar_name ) { + ?> + + '; + + if ( ! empty( $description ) ) { + echo '

    ' . $description . '

    '; + } + + echo '
    '; + + dynamic_sidebar( $sidebar ); + + echo ''; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param array $params + * @return array + */ +function wp_list_widget_controls_dynamic_sidebar( $params ) { + global $wp_registered_widgets; + static $i = 0; + $i++; + + $widget_id = $params[0]['widget_id']; + $id = isset($params[0]['_temp_id']) ? $params[0]['_temp_id'] : $widget_id; + $hidden = isset($params[0]['_hide']) ? ' style="display:none;"' : ''; + + $params[0]['before_widget'] = "
    "; + $params[0]['after_widget'] = "
    "; + $params[0]['before_title'] = "%BEG_OF_TITLE%"; // deprecated + $params[0]['after_title'] = "%END_OF_TITLE%"; // deprecated + if ( is_callable( $wp_registered_widgets[$widget_id]['callback'] ) ) { + $wp_registered_widgets[$widget_id]['_callback'] = $wp_registered_widgets[$widget_id]['callback']; + $wp_registered_widgets[$widget_id]['callback'] = 'wp_widget_control'; + } + + return $params; +} + +function next_widget_id_number($id_base) { + global $wp_registered_widgets; + $number = 1; + + foreach ( $wp_registered_widgets as $widget_id => $widget ) { + if ( preg_match( '/' . $id_base . '-([0-9]+)$/', $widget_id, $matches ) ) + $number = max($number, $matches[1]); + } + $number++; + + return $number; +} + +/** + * Meta widget used to display the control form for a widget. + * + * Called from dynamic_sidebar(). + * + * @since 2.5.0 + * + * @param array $sidebar_args + * @return array + */ +function wp_widget_control( $sidebar_args ) { + global $wp_registered_widgets, $wp_registered_widget_controls, $sidebars_widgets; + + $widget_id = $sidebar_args['widget_id']; + $sidebar_id = isset($sidebar_args['id']) ? $sidebar_args['id'] : false; + $key = $sidebar_id ? array_search( $widget_id, $sidebars_widgets[$sidebar_id] ) : '-1'; // position of widget in sidebar + $control = isset($wp_registered_widget_controls[$widget_id]) ? $wp_registered_widget_controls[$widget_id] : array(); + $widget = $wp_registered_widgets[$widget_id]; + + $id_format = $widget['id']; + $widget_number = isset($control['params'][0]['number']) ? $control['params'][0]['number'] : ''; + $id_base = isset($control['id_base']) ? $control['id_base'] : $widget_id; + $multi_number = isset($sidebar_args['_multi_num']) ? $sidebar_args['_multi_num'] : ''; + $add_new = isset($sidebar_args['_add']) ? $sidebar_args['_add'] : ''; + + $query_arg = array( 'editwidget' => $widget['id'] ); + if ( $add_new ) { + $query_arg['addnew'] = 1; + if ( $multi_number ) { + $query_arg['num'] = $multi_number; + $query_arg['base'] = $id_base; + } + } else { + $query_arg['sidebar'] = $sidebar_id; + $query_arg['key'] = $key; + } + + // We aren't showing a widget control, we're outputting a template for a multi-widget control + if ( isset($sidebar_args['_display']) && 'template' == $sidebar_args['_display'] && $widget_number ) { + // number == -1 implies a template where id numbers are replaced by a generic '__i__' + $control['params'][0]['number'] = -1; + // with id_base widget id's are constructed like {$id_base}-{$id_number} + if ( isset($control['id_base']) ) + $id_format = $control['id_base'] . '-__i__'; + } + + $wp_registered_widgets[$widget_id]['callback'] = $wp_registered_widgets[$widget_id]['_callback']; + unset($wp_registered_widgets[$widget_id]['_callback']); + + $widget_title = esc_html( strip_tags( $sidebar_args['widget_name'] ) ); + $has_form = 'noform'; + + echo $sidebar_args['before_widget']; ?> +
    +
    + + + + + + +
    +

    +
    + +
    +
    +
    +" . __('There are no options for this widget.') . "

    \n"; ?> +
    + + + + + + + + +
    +
    + | + +
    +
    + 'widget-' . esc_attr( $id_format ) . '-savewidget' ) ); ?> + +
    +
    +
    +
    +
    + +
    + +
    +' . __( 'Welcome to your WordPress Dashboard! This is the screen you will see when you log in to your site, and gives you access to all the site management features of WordPress. You can get help for any screen by clicking the Help tab in the upper corner.' ) . '

    '; + +// Not using chaining here, so as to be parseable by PHP4. +$screen = get_current_screen(); + +$screen->add_help_tab( array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => $help, +) ); + +// Help tabs + +$help = '

    ' . __( 'The left-hand navigation menu provides links to all of the WordPress administration screens, with submenu items displayed on hover. You can minimize this menu to a narrow icon strip by clicking on the Collapse Menu arrow at the bottom.' ) . '

    '; +$help .= '

    ' . __( 'Links in the Toolbar at the top of the screen connect your dashboard and the front end of your site, and provide access to your profile and helpful WordPress information.' ) . '

    '; + +$screen->add_help_tab( array( + 'id' => 'help-navigation', + 'title' => __( 'Navigation' ), + 'content' => $help, +) ); + +$help = '

    ' . __( 'You can use the following controls to arrange your Dashboard screen to suit your workflow. This is true on most other administration screens as well.' ) . '

    '; +$help .= '

    ' . __( 'Screen Options - Use the Screen Options tab to choose which Dashboard boxes to show.' ) . '

    '; +$help .= '

    ' . __( 'Drag and Drop - To rearrange the boxes, drag and drop by clicking on the title bar of the selected box and releasing when you see a gray dotted-line rectangle appear in the location you want to place the box.' ) . '

    '; +$help .= '

    ' . __( 'Box Controls - Click the title bar of the box to expand or collapse it. In addition, some boxes have configurable content, and will show a “Configure” link in the title bar if you hover over it.' ) . '

    '; + +$screen->add_help_tab( array( + 'id' => 'help-layout', + 'title' => __( 'Layout' ), + 'content' => $help, +) ); + +$help = '

    ' . __( 'The boxes on your Dashboard screen are:' ) . '

    '; +if ( current_user_can( 'edit_posts' ) ) + $help .= '

    ' . __( 'Site Content - Displays a summary of the content on your site and identifies which theme and version of WordPress you are using.' ) . '

    '; +$help .= '

    ' . __( 'Activity - Shows the upcoming scheduled posts, recently published posts, and the most recent comments on your posts and allows you to moderate them.' ) . '

    '; +if ( is_blog_admin() && current_user_can( 'edit_posts' ) ) + $help .= '

    ' . __( "Quick Draft - Allows you to create a new post and save it as a draft. Also displays links to the 5 most recent draft posts you've started." ) . '

    '; +if ( ! is_multisite() && current_user_can( 'install_plugins' ) ) + $help .= '

    ' . __( 'WordPress News - Latest news from the official WordPress project, the WordPress Planet, and popular and recent plugins.' ) . '

    '; +else + $help .= '

    ' . __( 'WordPress News - Latest news from the official WordPress project, the WordPress Planet.' ) . '

    '; +if ( current_user_can( 'edit_theme_options' ) ) + $help .= '

    ' . __( 'Welcome - Shows links for some of the most common tasks when setting up a new site.' ) . '

    '; + +$screen->add_help_tab( array( + 'id' => 'help-content', + 'title' => __( 'Content' ), + 'content' => $help, +) ); + +unset( $help ); + +$screen->set_help_sidebar( + '

    ' . __( 'For more information:' ) . '

    ' . + '

    ' . __( 'Documentation on Dashboard' ) . '

    ' . + '

    ' . __( 'Support Forums' ) . '

    ' +); + +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + +user_email != get_option( 'admin_email' ) ); + if ( $hide ) + $classes .= ' hidden'; ?> + +
    + + + remove_action( 'welcome_panel', 'wp_welcome_panel' ); + * + * @since 3.5.0 + */ + do_action( 'welcome_panel' ); + ?> +
    + + +
    + +
    + +
    + + + * check_column('wp_links', 'link_description', 'mediumtext'); + * if (check_column($wpdb->comments, 'comment_author', 'tinytext')) + * echo "ok\n"; + * + * $error_count = 0; + * $tablename = $wpdb->links; + * // check the column + * if (!check_column($wpdb->links, 'link_description', 'varchar(255)')) { + * $ddl = "ALTER TABLE $wpdb->links MODIFY COLUMN link_description varchar(255) NOT NULL DEFAULT '' "; + * $q = $wpdb->query($ddl); + * } + * + * if (check_column($wpdb->links, 'link_description', 'varchar(255)')) { + * $res .= $tablename . ' - ok
    '; + * } else { + * $res .= 'There was a problem with ' . $tablename . '
    '; + * ++$error_count; + * } + * + * + * @package WordPress + * @subpackage Plugin + */ + +/** Load WordPress Bootstrap */ +require_once(dirname(dirname(__FILE__)).'/wp-load.php'); + +if ( ! function_exists('maybe_create_table') ) : +/** + * Create database table, if it doesn't already exist. + * + * @since 1.0.0 + * @package WordPress + * @subpackage Plugin + * @uses $wpdb + * + * @param string $table_name Database table name. + * @param string $create_ddl Create database table SQL. + * @return bool False on error, true if already exists or success. + */ +function maybe_create_table($table_name, $create_ddl) { + global $wpdb; + foreach ($wpdb->get_col("SHOW TABLES",0) as $table ) { + if ($table == $table_name) { + return true; + } + } + //didn't find it try to create it. + $wpdb->query($create_ddl); + // we cannot directly tell that whether this succeeded! + foreach ($wpdb->get_col("SHOW TABLES",0) as $table ) { + if ($table == $table_name) { + return true; + } + } + return false; +} +endif; + +if ( ! function_exists('maybe_add_column') ) : +/** + * Add column to database table, if column doesn't already exist in table. + * + * @since 1.0.0 + * @package WordPress + * @subpackage Plugin + * @uses $wpdb + * + * @param string $table_name Database table name + * @param string $column_name Table column name + * @param string $create_ddl SQL to add column to table. + * @return bool False on failure. True, if already exists or was successful. + */ +function maybe_add_column($table_name, $column_name, $create_ddl) { + global $wpdb; + foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { + + if ($column == $column_name) { + return true; + } + } + //didn't find it try to create it. + $wpdb->query($create_ddl); + // we cannot directly tell that whether this succeeded! + foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { + if ($column == $column_name) { + return true; + } + } + return false; +} +endif; + +/** + * Drop column from database table, if it exists. + * + * @since 1.0.0 + * @package WordPress + * @subpackage Plugin + * @uses $wpdb + * + * @param string $table_name Table name + * @param string $column_name Column name + * @param string $drop_ddl SQL statement to drop column. + * @return bool False on failure, true on success or doesn't exist. + */ +function maybe_drop_column($table_name, $column_name, $drop_ddl) { + global $wpdb; + foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { + if ($column == $column_name) { + //found it try to drop it. + $wpdb->query($drop_ddl); + // we cannot directly tell that whether this succeeded! + foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { + if ($column == $column_name) { + return false; + } + } + } + } + // else didn't find it + return true; +} + +/** + * Check column matches criteria. + * + * Uses the SQL DESC for retrieving the table info for the column. It will help + * understand the parameters, if you do more research on what column information + * is returned by the SQL statement. Pass in null to skip checking that + * criteria. + * + * Column names returned from DESC table are case sensitive and are listed: + * Field + * Type + * Null + * Key + * Default + * Extra + * + * @since 1.0.0 + * @package WordPress + * @subpackage Plugin + * + * @param string $table_name Table name + * @param string $col_name Column name + * @param string $col_type Column type + * @param bool $is_null Optional. Check is null. + * @param mixed $key Optional. Key info. + * @param mixed $default Optional. Default value. + * @param mixed $extra Optional. Extra value. + * @return bool True, if matches. False, if not matching. + */ +function check_column($table_name, $col_name, $col_type, $is_null = null, $key = null, $default = null, $extra = null) { + global $wpdb; + $diffs = 0; + $results = $wpdb->get_results("DESC $table_name"); + + foreach ($results as $row ) { + + if ($row->Field == $col_name) { + // got our column, check the params + if (($col_type != null) && ($row->Type != $col_type)) { + ++$diffs; + } + if (($is_null != null) && ($row->Null != $is_null)) { + ++$diffs; + } + if (($key != null) && ($row->Key != $key)) { + ++$diffs; + } + if (($default != null) && ($row->Default != $default)) { + ++$diffs; + } + if (($extra != null) && ($row->Extra != $extra)) { + ++$diffs; + } + if ($diffs > 0) { + return false; + } + return true; + } // end if found our column + } + return false; +} diff --git a/src/wp-admin/install.php b/src/wp-admin/install.php new file mode 100644 index 0000000..587d79a --- /dev/null +++ b/src/wp-admin/install.php @@ -0,0 +1,259 @@ + + + + + + Error: PHP is not running + + +

    WordPress

    +

    Error: PHP is not running

    +

    WordPress requires that your web server is running PHP. Your server does not have PHP installed, or PHP is turned off.

    + + + + +> + + + + <?php _e( 'WordPress › Installation' ); ?> + + + +

    + +get_var("SHOW TABLES LIKE '$wpdb->users'") != null ); + + // Ensure that Blogs appear in search engines by default + $blog_public = 1; + if ( ! empty( $_POST ) ) + $blog_public = isset( $_POST['blog_public'] ); + + $weblog_title = isset( $_POST['weblog_title'] ) ? trim( wp_unslash( $_POST['weblog_title'] ) ) : ''; + $user_name = isset($_POST['user_name']) ? trim( wp_unslash( $_POST['user_name'] ) ) : ''; + $admin_password = isset($_POST['admin_password']) ? trim( wp_unslash( $_POST['admin_password'] ) ) : ''; + $admin_email = isset( $_POST['admin_email'] ) ? trim( wp_unslash( $_POST['admin_email'] ) ) : ''; + + if ( ! is_null( $error ) ) { +?> +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + +

    + +
    + +

    +
    + +

    +
    +

    +
    +

    +

    +
    +' . __( 'Already Installed' ) . '

    ' . __( 'You appear to have already installed WordPress. To reinstall please clear your old database tables first.' ) . '

    ' . __( 'Log In' ) . '

    ' ); +} + +$php_version = phpversion(); +$mysql_version = $wpdb->db_version(); +$php_compat = version_compare( $php_version, $required_php_version, '>=' ); +$mysql_compat = version_compare( $mysql_version, $required_mysql_version, '>=' ) || file_exists( WP_CONTENT_DIR . '/db.php' ); + +if ( !$mysql_compat && !$php_compat ) + $compat = sprintf( __( 'You cannot install because WordPress %1$s requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s.' ), $wp_version, $required_php_version, $required_mysql_version, $php_version, $mysql_version ); +elseif ( !$php_compat ) + $compat = sprintf( __( 'You cannot install because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s.' ), $wp_version, $required_php_version, $php_version ); +elseif ( !$mysql_compat ) + $compat = sprintf( __( 'You cannot install because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s.' ), $wp_version, $required_mysql_version, $mysql_version ); + +if ( !$mysql_compat || !$php_compat ) { + display_header(); + die( '

    ' . __( 'Insufficient Requirements' ) . '

    ' . $compat . '

    ' ); +} + +if ( ! is_string( $wpdb->base_prefix ) || '' === $wpdb->base_prefix ) { + display_header(); + die( '

    ' . __( 'Configuration Error' ) . '

    ' . __( 'Your wp-config.php file has an empty database table prefix, which is not supported.' ) . '

    ' ); +} + +switch($step) { + case 0: // Step 1 + case 1: // Step 1, direct link. + display_header(); +?> +

    +

    ReadMe documentation at your leisure. Otherwise, just fill in the information below and you’ll be on your way to using the most extendable and powerful personal publishing platform in the world.' ), '../readme.html' ); ?>

    + +

    +

    + +error ) ) + wp_die( $wpdb->error->get_error_message() ); + + display_header(); + // Fill in the data we gathered + $weblog_title = isset( $_POST['weblog_title'] ) ? trim( wp_unslash( $_POST['weblog_title'] ) ) : ''; + $user_name = isset($_POST['user_name']) ? trim( wp_unslash( $_POST['user_name'] ) ) : ''; + $admin_password = isset($_POST['admin_password']) ? wp_unslash( $_POST['admin_password'] ) : ''; + $admin_password_check = isset($_POST['admin_password2']) ? wp_unslash( $_POST['admin_password2'] ) : ''; + $admin_email = isset( $_POST['admin_email'] ) ?trim( wp_unslash( $_POST['admin_email'] ) ) : ''; + $public = isset( $_POST['blog_public'] ) ? (int) $_POST['blog_public'] : 0; + // check e-mail address + $error = false; + if ( empty( $user_name ) ) { + // TODO: poka-yoke + display_setup_form( __( 'Please provide a valid username.' ) ); + $error = true; + } elseif ( $user_name != sanitize_user( $user_name, true ) ) { + display_setup_form( __( 'The username you provided has invalid characters.' ) ); + $error = true; + } elseif ( $admin_password != $admin_password_check ) { + // TODO: poka-yoke + display_setup_form( __( 'Your passwords do not match. Please try again.' ) ); + $error = true; + } else if ( empty( $admin_email ) ) { + // TODO: poka-yoke + display_setup_form( __( 'You must provide an email address.' ) ); + $error = true; + } elseif ( ! is_email( $admin_email ) ) { + // TODO: poka-yoke + display_setup_form( __( 'Sorry, that isn’t a valid email address. Email addresses look like username@example.com.' ) ); + $error = true; + } + + if ( $error === false ) { + $wpdb->show_errors(); + $result = wp_install($weblog_title, $user_name, $admin_email, $public, '', $admin_password); + extract( $result, EXTR_SKIP ); +?> + +

    + +

    + + + + + + + + + + +
    '. esc_html($password) .'
    '; + echo "

    $password_message

    "; ?> +
    + +

    + + + + + + + diff --git a/src/wp-admin/js/accordion.js b/src/wp-admin/js/accordion.js new file mode 100644 index 0000000..7bc99cc --- /dev/null +++ b/src/wp-admin/js/accordion.js @@ -0,0 +1,55 @@ +( function( $ ){ + + $( document ).ready( function () { + + // Expand/Collapse on click + $( '.accordion-container' ).on( 'click keydown', '.accordion-section-title', function( e ) { + if ( e.type === 'keydown' && 13 !== e.which ) // "return" key + return; + e.preventDefault(); // Keep this AFTER the key filter above + + accordionSwitch( $( this ) ); + }); + + // Re-initialize accordion when screen options are toggled + $( '.hide-postbox-tog' ).click( function () { + accordionInit(); + }); + + }); + + var accordionOptions = $( '.accordion-container li.accordion-section' ), + sectionContent = $( '.accordion-section-content' ); + + function accordionInit () { + // Rounded corners + accordionOptions.removeClass( 'top bottom' ); + accordionOptions.filter( ':visible' ).first().addClass( 'top' ); + accordionOptions.filter( ':visible' ).last().addClass( 'bottom' ).find( sectionContent ).addClass( 'bottom' ); + } + + function accordionSwitch ( el ) { + var section = el.closest( '.accordion-section' ), + siblings = section.closest( '.accordion-container' ).find( '.open' ), + content = section.find( sectionContent ); + + if ( section.hasClass( 'cannot-expand' ) ) + return; + + if ( section.hasClass( 'open' ) ) { + section.toggleClass( 'open' ); + content.toggle( true ).slideToggle( 150 ); + } else { + siblings.removeClass( 'open' ); + siblings.find( sectionContent ).show().slideUp( 150 ); + content.toggle( false ).slideToggle( 150 ); + section.toggleClass( 'open' ); + } + + accordionInit(); + } + + // Initialize the accordion (currently just corner fixes) + accordionInit(); + +})(jQuery); diff --git a/src/wp-admin/js/accordion.min.js b/src/wp-admin/js/accordion.min.js new file mode 100644 index 0000000..a67e757 --- /dev/null +++ b/src/wp-admin/js/accordion.min.js @@ -0,0 +1 @@ +!function(a){function b(){d.removeClass("top bottom"),d.filter(":visible").first().addClass("top"),d.filter(":visible").last().addClass("bottom").find(e).addClass("bottom")}function c(a){var c=a.closest(".accordion-section"),d=c.closest(".accordion-container").find(".open"),f=c.find(e);c.hasClass("cannot-expand")||(c.hasClass("open")?(c.toggleClass("open"),f.toggle(!0).slideToggle(150)):(d.removeClass("open"),d.find(e).show().slideUp(150),f.toggle(!1).slideToggle(150),c.toggleClass("open")),b())}a(document).ready(function(){a(".accordion-container").on("click keydown",".accordion-section-title",function(b){("keydown"!==b.type||13===b.which)&&(b.preventDefault(),c(a(this)))}),a(".hide-postbox-tog").click(function(){b()})});var d=a(".accordion-container li.accordion-section"),e=a(".accordion-section-content");b()}(jQuery); \ No newline at end of file diff --git a/src/wp-admin/js/color-picker.js b/src/wp-admin/js/color-picker.js new file mode 100644 index 0000000..1cc0a13 --- /dev/null +++ b/src/wp-admin/js/color-picker.js @@ -0,0 +1,134 @@ +/* global wpColorPickerL10n:true */ +( function( $, undef ){ + + var ColorPicker, + // html stuff + _before = '', + _after = '
    ', + _wrap = '
    ', + _button = ''; + + // jQuery UI Widget constructor + ColorPicker = { + options: { + defaultColor: false, + change: false, + clear: false, + hide: true, + palettes: true + }, + _create: function() { + // bail early for unsupported Iris. + if ( ! $.support.iris ) + return; + var self = this, + el = self.element; + + $.extend( self.options, el.data() ); + + self.initialValue = el.val(); + + // Set up HTML structure, hide things + el.addClass( 'wp-color-picker' ).hide().wrap( _wrap ); + self.wrap = el.parent(); + self.toggler = $( _before ).insertBefore( el ).css( { backgroundColor: self.initialValue } ).attr( 'title', wpColorPickerL10n.pick ).attr( 'data-current', wpColorPickerL10n.current ); + self.pickerContainer = $( _after ).insertAfter( el ); + self.button = $( _button ); + + if ( self.options.defaultColor ) + self.button.addClass( 'wp-picker-default' ).val( wpColorPickerL10n.defaultString ); + else + self.button.addClass( 'wp-picker-clear' ).val( wpColorPickerL10n.clear ); + + el.wrap('').after(self.button); + + el.iris( { + target: self.pickerContainer, + hide: true, + width: 255, + mode: 'hsv', + palettes: self.options.palettes, + change: function( event, ui ) { + self.toggler.css( { backgroundColor: ui.color.toString() } ); + // check for a custom cb + if ( $.isFunction( self.options.change ) ) + self.options.change.call( this, event, ui ); + } + } ); + el.val( self.initialValue ); + self._addListeners(); + if ( ! self.options.hide ) + self.toggler.click(); + }, + _addListeners: function() { + var self = this; + + self.toggler.click( function( event ){ + event.stopPropagation(); + self.element.toggle().iris( 'toggle' ); + self.button.toggleClass('hidden'); + self.toggler.toggleClass( 'wp-picker-open' ); + + // close picker when you click outside it + if ( self.toggler.hasClass( 'wp-picker-open' ) ) + $( 'body' ).on( 'click', { wrap: self.wrap, toggler: self.toggler }, self._bodyListener ); + else + $( 'body' ).off( 'click', self._bodyListener ); + }); + + self.element.change(function( event ) { + var me = $(this), + val = me.val(); + // Empty = clear + if ( val === '' || val === '#' ) { + self.toggler.css('backgroundColor', ''); + // fire clear callback if we have one + if ( $.isFunction( self.options.clear ) ) + self.options.clear.call( this, event ); + } + }); + + // open a keyboard-focused closed picker with space or enter + self.toggler.on('keyup', function( e ) { + if ( e.keyCode === 13 || e.keyCode === 32 ) { + e.preventDefault(); + self.toggler.trigger('click').next().focus(); + } + }); + + self.button.click( function( event ) { + var me = $(this); + if ( me.hasClass( 'wp-picker-clear' ) ) { + self.element.val( '' ); + self.toggler.css('backgroundColor', ''); + if ( $.isFunction( self.options.clear ) ) + self.options.clear.call( this, event ); + } else if ( me.hasClass( 'wp-picker-default' ) ) { + self.element.val( self.options.defaultColor ).change(); + } + }); + }, + _bodyListener: function( event ) { + if ( ! event.data.wrap.find( event.target ).length ) + event.data.toggler.click(); + }, + // $("#input").wpColorPicker('color') returns the current color + // $("#input").wpColorPicker('color', '#bada55') to set + color: function( newColor ) { + if ( newColor === undef ) + return this.element.iris( 'option', 'color' ); + + this.element.iris( 'option', 'color', newColor ); + }, + //$("#input").wpColorPicker('defaultColor') returns the current default color + //$("#input").wpColorPicker('defaultColor', newDefaultColor) to set + defaultColor: function( newDefaultColor ) { + if ( newDefaultColor === undef ) + return this.options.defaultColor; + + this.options.defaultColor = newDefaultColor; + } + }; + + $.widget( 'wp.wpColorPicker', ColorPicker ); +}( jQuery ) ); diff --git a/src/wp-admin/js/color-picker.min.js b/src/wp-admin/js/color-picker.min.js new file mode 100644 index 0000000..eb73b44 --- /dev/null +++ b/src/wp-admin/js/color-picker.min.js @@ -0,0 +1 @@ +!function(a,b){var c,d='',e='
    ',f='
    ',g='';c={options:{defaultColor:!1,change:!1,clear:!1,hide:!0,palettes:!0},_create:function(){if(a.support.iris){var b=this,c=b.element;a.extend(b.options,c.data()),b.initialValue=c.val(),c.addClass("wp-color-picker").hide().wrap(f),b.wrap=c.parent(),b.toggler=a(d).insertBefore(c).css({backgroundColor:b.initialValue}).attr("title",wpColorPickerL10n.pick).attr("data-current",wpColorPickerL10n.current),b.pickerContainer=a(e).insertAfter(c),b.button=a(g),b.options.defaultColor?b.button.addClass("wp-picker-default").val(wpColorPickerL10n.defaultString):b.button.addClass("wp-picker-clear").val(wpColorPickerL10n.clear),c.wrap('').after(b.button),c.iris({target:b.pickerContainer,hide:!0,width:255,mode:"hsv",palettes:b.options.palettes,change:function(c,d){b.toggler.css({backgroundColor:d.color.toString()}),a.isFunction(b.options.change)&&b.options.change.call(this,c,d)}}),c.val(b.initialValue),b._addListeners(),b.options.hide||b.toggler.click()}},_addListeners:function(){var b=this;b.toggler.click(function(c){c.stopPropagation(),b.element.toggle().iris("toggle"),b.button.toggleClass("hidden"),b.toggler.toggleClass("wp-picker-open"),b.toggler.hasClass("wp-picker-open")?a("body").on("click",{wrap:b.wrap,toggler:b.toggler},b._bodyListener):a("body").off("click",b._bodyListener)}),b.element.change(function(c){var d=a(this),e=d.val();(""===e||"#"===e)&&(b.toggler.css("backgroundColor",""),a.isFunction(b.options.clear)&&b.options.clear.call(this,c))}),b.toggler.on("keyup",function(a){(13===a.keyCode||32===a.keyCode)&&(a.preventDefault(),b.toggler.trigger("click").next().focus())}),b.button.click(function(c){var d=a(this);d.hasClass("wp-picker-clear")?(b.element.val(""),b.toggler.css("backgroundColor",""),a.isFunction(b.options.clear)&&b.options.clear.call(this,c)):d.hasClass("wp-picker-default")&&b.element.val(b.options.defaultColor).change()})},_bodyListener:function(a){a.data.wrap.find(a.target).length||a.data.toggler.click()},color:function(a){return a===b?this.element.iris("option","color"):(this.element.iris("option","color",a),void 0)},defaultColor:function(a){return a===b?this.options.defaultColor:(this.options.defaultColor=a,void 0)}},a.widget("wp.wpColorPicker",c)}(jQuery); \ No newline at end of file diff --git a/src/wp-admin/js/comment.js b/src/wp-admin/js/comment.js new file mode 100644 index 0000000..b5506ea --- /dev/null +++ b/src/wp-admin/js/comment.js @@ -0,0 +1,50 @@ +/* global postboxes:true, commentL10n:true */ +jQuery(document).ready( function($) { + + postboxes.add_postbox_toggles('comment'); + + var stamp = $('#timestamp').html(); + $('.edit-timestamp').click(function () { + if ($('#timestampdiv').is(':hidden')) { + $('#timestampdiv').slideDown('normal'); + $('.edit-timestamp').hide(); + } + return false; + }); + + $('.cancel-timestamp').click(function() { + $('#timestampdiv').slideUp('normal'); + $('#mm').val($('#hidden_mm').val()); + $('#jj').val($('#hidden_jj').val()); + $('#aa').val($('#hidden_aa').val()); + $('#hh').val($('#hidden_hh').val()); + $('#mn').val($('#hidden_mn').val()); + $('#timestamp').html(stamp); + $('.edit-timestamp').show(); + return false; + }); + + $('.save-timestamp').click(function () { // crazyhorse - multiple ok cancels + var aa = $('#aa').val(), mm = $('#mm').val(), jj = $('#jj').val(), hh = $('#hh').val(), mn = $('#mn').val(), + newD = new Date( aa, mm - 1, jj, hh, mn ); + + if ( newD.getFullYear() != aa || (1 + newD.getMonth()) != mm || newD.getDate() != jj || newD.getMinutes() != mn ) { + $('.timestamp-wrap', '#timestampdiv').addClass('form-invalid'); + return false; + } else { + $('.timestamp-wrap', '#timestampdiv').removeClass('form-invalid'); + } + + $('#timestampdiv').slideUp('normal'); + $('.edit-timestamp').show(); + $('#timestamp').html( + commentL10n.submittedOn + ' ' + + $( '#mm option[value="' + mm + '"]' ).text() + ' ' + + jj + ', ' + + aa + ' @ ' + + hh + ':' + + mn + ' ' + ); + return false; + }); +}); diff --git a/src/wp-admin/js/comment.min.js b/src/wp-admin/js/comment.min.js new file mode 100644 index 0000000..fbfa877 --- /dev/null +++ b/src/wp-admin/js/comment.min.js @@ -0,0 +1 @@ +jQuery(document).ready(function(a){postboxes.add_postbox_toggles("comment");var b=a("#timestamp").html();a(".edit-timestamp").click(function(){return a("#timestampdiv").is(":hidden")&&(a("#timestampdiv").slideDown("normal"),a(".edit-timestamp").hide()),!1}),a(".cancel-timestamp").click(function(){return a("#timestampdiv").slideUp("normal"),a("#mm").val(a("#hidden_mm").val()),a("#jj").val(a("#hidden_jj").val()),a("#aa").val(a("#hidden_aa").val()),a("#hh").val(a("#hidden_hh").val()),a("#mn").val(a("#hidden_mn").val()),a("#timestamp").html(b),a(".edit-timestamp").show(),!1}),a(".save-timestamp").click(function(){var b=a("#aa").val(),c=a("#mm").val(),d=a("#jj").val(),e=a("#hh").val(),f=a("#mn").val(),g=new Date(b,c-1,d,e,f);return g.getFullYear()!=b||1+g.getMonth()!=c||g.getDate()!=d||g.getMinutes()!=f?(a(".timestamp-wrap","#timestampdiv").addClass("form-invalid"),!1):(a(".timestamp-wrap","#timestampdiv").removeClass("form-invalid"),a("#timestampdiv").slideUp("normal"),a(".edit-timestamp").show(),a("#timestamp").html(commentL10n.submittedOn+" "+a('#mm option[value="'+c+'"]').text()+" "+d+", "+b+" @ "+e+":"+f+" "),!1)})}); \ No newline at end of file diff --git a/src/wp-admin/js/common.js b/src/wp-admin/js/common.js new file mode 100644 index 0000000..c126a98 --- /dev/null +++ b/src/wp-admin/js/common.js @@ -0,0 +1,708 @@ +/* global setUserSetting, ajaxurl, commonL10n, alert, confirm, toggleWithKeyboard, pagenow */ +var showNotice, adminMenu, columns, validateForm, screenMeta; +( function( $, window, undefined ) { +// Removed in 3.3. +// (perhaps) needed for back-compat +adminMenu = { + init : function() {}, + fold : function() {}, + restoreMenuState : function() {}, + toggle : function() {}, + favorites : function() {} +}; + +// show/hide/save table columns +columns = { + init : function() { + var that = this; + $('.hide-column-tog', '#adv-settings').click( function() { + var $t = $(this), column = $t.val(); + if ( $t.prop('checked') ) + that.checked(column); + else + that.unchecked(column); + + columns.saveManageColumnsState(); + }); + }, + + saveManageColumnsState : function() { + var hidden = this.hidden(); + $.post(ajaxurl, { + action: 'hidden-columns', + hidden: hidden, + screenoptionnonce: $('#screenoptionnonce').val(), + page: pagenow + }); + }, + + checked : function(column) { + $('.column-' + column).show(); + this.colSpanChange(+1); + }, + + unchecked : function(column) { + $('.column-' + column).hide(); + this.colSpanChange(-1); + }, + + hidden : function() { + return $('.manage-column').filter(':hidden').map(function() { return this.id; }).get().join(','); + }, + + useCheckboxesForHidden : function() { + this.hidden = function(){ + return $('.hide-column-tog').not(':checked').map(function() { + var id = this.id; + return id.substring( id, id.length - 5 ); + }).get().join(','); + }; + }, + + colSpanChange : function(diff) { + var $t = $('table').find('.colspanchange'), n; + if ( !$t.length ) + return; + n = parseInt( $t.attr('colspan'), 10 ) + diff; + $t.attr('colspan', n.toString()); + } +}; + +$(document).ready(function(){columns.init();}); + +validateForm = function( form ) { + return !$( form ) + .find( '.form-required' ) + .filter( function() { return $( 'input:visible', this ).val() === ''; } ) + .addClass( 'form-invalid' ) + .find( 'input:visible' ) + .change( function() { $( this ).closest( '.form-invalid' ).removeClass( 'form-invalid' ); } ) + .size(); +}; + +// stub for doing better warnings +showNotice = { + warn : function() { + var msg = commonL10n.warnDelete || ''; + if ( confirm(msg) ) { + return true; + } + + return false; + }, + + note : function(text) { + alert(text); + } +}; + +screenMeta = { + element: null, // #screen-meta + toggles: null, // .screen-meta-toggle + page: null, // #wpcontent + + init: function() { + this.element = $('#screen-meta'); + this.toggles = $('.screen-meta-toggle a'); + this.page = $('#wpcontent'); + + this.toggles.click( this.toggleEvent ); + }, + + toggleEvent: function( e ) { + var panel = $( this.href.replace(/.+#/, '#') ); + e.preventDefault(); + + if ( !panel.length ) + return; + + if ( panel.is(':visible') ) + screenMeta.close( panel, $(this) ); + else + screenMeta.open( panel, $(this) ); + }, + + open: function( panel, link ) { + + $('.screen-meta-toggle').not( link.parent() ).css('visibility', 'hidden'); + + panel.parent().show(); + panel.slideDown( 'fast', function() { + panel.focus(); + link.addClass('screen-meta-active').attr('aria-expanded', true); + }); + }, + + close: function( panel, link ) { + panel.slideUp( 'fast', function() { + link.removeClass('screen-meta-active').attr('aria-expanded', false); + $('.screen-meta-toggle').css('visibility', ''); + panel.parent().hide(); + }); + } +}; + +/** + * Help tabs. + */ +$('.contextual-help-tabs').delegate('a', 'click focus', function(e) { + var link = $(this), + panel; + + e.preventDefault(); + + // Don't do anything if the click is for the tab already showing. + if ( link.is('.active a') ) + return false; + + // Links + $('.contextual-help-tabs .active').removeClass('active'); + link.parent('li').addClass('active'); + + panel = $( link.attr('href') ); + + // Panels + $('.help-tab-content').not( panel ).removeClass('active').hide(); + panel.addClass('active').show(); +}); + +$(document).ready( function() { + var checks, first, last, checked, sliced, mobileEvent, transitionTimeout, focusedRowActions, + lastClicked = false, + menu = $('#adminmenu'), + pageInput = $('input.current-page'), + currentPage = pageInput.val(); + + // when the menu is folded, make the fly-out submenu header clickable + menu.on('click.wp-submenu-head', '.wp-submenu-head', function(e){ + $(e.target).parent().siblings('a').get(0).click(); + }); + + $('#collapse-menu').on('click.collapse-menu', function() { + var body = $( document.body ), respWidth; + + // reset any compensation for submenus near the bottom of the screen + $('#adminmenu div.wp-submenu').css('margin-top', ''); + + if ( window.innerWidth ) { + // window.innerWidth is affected by zooming on phones + respWidth = Math.max( window.innerWidth, document.documentElement.clientWidth ); + } else { + // IE < 9 doesn't support @media CSS rules + respWidth = 901; + } + + if ( respWidth && respWidth < 900 ) { + if ( body.hasClass('auto-fold') ) { + body.removeClass('auto-fold').removeClass('folded'); + setUserSetting('unfold', 1); + setUserSetting('mfold', 'o'); + } else { + body.addClass('auto-fold'); + setUserSetting('unfold', 0); + } + } else { + if ( body.hasClass('folded') ) { + body.removeClass('folded'); + setUserSetting('mfold', 'o'); + } else { + body.addClass('folded'); + setUserSetting('mfold', 'f'); + } + } + }); + + if ( 'ontouchstart' in window || /IEMobile\/[1-9]/.test(navigator.userAgent) ) { // touch screen device + // iOS Safari works with touchstart, the rest work with click + mobileEvent = /Mobile\/.+Safari/.test(navigator.userAgent) ? 'touchstart' : 'click'; + + // close any open submenus when touch/click is not on the menu + $(document.body).on( mobileEvent+'.wp-mobile-hover', function(e) { + if ( menu.data('wp-responsive') ) { + return; + } + + if ( ! $(e.target).closest('#adminmenu').length ) { + menu.find('li.wp-has-submenu.opensub').removeClass('opensub'); + } + }); + + menu.find('a.wp-has-submenu').on( mobileEvent+'.wp-mobile-hover', function(e) { + var el = $(this), parent = el.parent(); + + if ( menu.data('wp-responsive') ) { + return; + } + + // Show the sub instead of following the link if: + // - the submenu is not open + // - the submenu is not shown inline or the menu is not folded + if ( !parent.hasClass('opensub') && ( !parent.hasClass('wp-menu-open') || parent.width() < 40 ) ) { + e.preventDefault(); + menu.find('li.opensub').removeClass('opensub'); + parent.addClass('opensub'); + } + }); + } + + menu.find('li.wp-has-submenu').hoverIntent({ + over: function() { + var b, h, o, f, m = $(this).find('.wp-submenu'), menutop, wintop, maxtop, top = parseInt( m.css('top'), 10 ); + + if ( isNaN(top) || top > -5 ) // meaning the submenu is visible + return; + + if ( menu.data('wp-responsive') ) { + // The menu is in responsive mode, bail + return; + } + + menutop = $(this).offset().top; + wintop = $(window).scrollTop(); + maxtop = menutop - wintop - 30; // max = make the top of the sub almost touch admin bar + + b = menutop + m.height() + 1; // Bottom offset of the menu + h = $('#wpwrap').height(); // Height of the entire page + o = 60 + b - h; + f = $(window).height() + wintop - 15; // The fold + + if ( f < (b - o) ) + o = b - f; + + if ( o > maxtop ) + o = maxtop; + + if ( o > 1 ) + m.css('margin-top', '-'+o+'px'); + else + m.css('margin-top', ''); + + menu.find('li.menu-top').removeClass('opensub'); + $(this).addClass('opensub'); + }, + out: function(){ + if ( menu.data('wp-responsive') ) { + // The menu is in responsive mode, bail + return; + } + + $(this).removeClass('opensub').find('.wp-submenu').css('margin-top', ''); + }, + timeout: 200, + sensitivity: 7, + interval: 90 + }); + + menu.on('focus.adminmenu', '.wp-submenu a', function(e){ + if ( menu.data('wp-responsive') ) { + // The menu is in responsive mode, bail + return; + } + + $(e.target).closest('li.menu-top').addClass('opensub'); + }).on('blur.adminmenu', '.wp-submenu a', function(e){ + if ( menu.data('wp-responsive') ) { + // The menu is in responsive mode, bail + return; + } + + $(e.target).closest('li.menu-top').removeClass('opensub'); + }); + + // Move .updated and .error alert boxes. Don't move boxes designed to be inline. + $('div.wrap h2:first').nextAll('div.updated, div.error').addClass('below-h2'); + $('div.updated, div.error').not('.below-h2, .inline').insertAfter( $('div.wrap h2:first') ); + + // Init screen meta + screenMeta.init(); + + // check all checkboxes + $('tbody').children().children('.check-column').find(':checkbox').click( function(e) { + if ( 'undefined' == e.shiftKey ) { return true; } + if ( e.shiftKey ) { + if ( !lastClicked ) { return true; } + checks = $( lastClicked ).closest( 'form' ).find( ':checkbox' ); + first = checks.index( lastClicked ); + last = checks.index( this ); + checked = $(this).prop('checked'); + if ( 0 < first && 0 < last && first != last ) { + sliced = ( last > first ) ? checks.slice( first, last ) : checks.slice( last, first ); + sliced.prop( 'checked', function() { + if ( $(this).closest('tr').is(':visible') ) + return checked; + + return false; + }); + } + } + lastClicked = this; + + // toggle "check all" checkboxes + var unchecked = $(this).closest('tbody').find(':checkbox').filter(':visible').not(':checked'); + $(this).closest('table').children('thead, tfoot').find(':checkbox').prop('checked', function() { + return ( 0 === unchecked.length ); + }); + + return true; + }); + + $('thead, tfoot').find('.check-column :checkbox').click( function(e) { + var c = $(this).prop('checked'), + kbtoggle = 'undefined' == typeof toggleWithKeyboard ? false : toggleWithKeyboard, + toggle = e.shiftKey || kbtoggle; + + $(this).closest( 'table' ).children( 'tbody' ).filter(':visible') + .children().children('.check-column').find(':checkbox') + .prop('checked', function() { + if ( $(this).is(':hidden') ) + return false; + if ( toggle ) + return $(this).prop( 'checked' ); + else if (c) + return true; + return false; + }); + + $(this).closest('table').children('thead, tfoot').filter(':visible') + .children().children('.check-column').find(':checkbox') + .prop('checked', function() { + if ( toggle ) + return false; + else if (c) + return true; + return false; + }); + }); + + // Show row actions on keyboard focus of its parent container element or any other elements contained within + $( 'td.post-title, td.title, td.comment, .bookmarks td.column-name, td.blogname, td.username, .dashboard-comment-wrap' ).focusin(function(){ + clearTimeout( transitionTimeout ); + focusedRowActions = $(this).find( '.row-actions' ); + focusedRowActions.addClass( 'visible' ); + }).focusout(function(){ + // Tabbing between post title and .row-actions links needs a brief pause, otherwise + // the .row-actions div gets hidden in transit in some browsers (ahem, Firefox). + transitionTimeout = setTimeout(function(){ + focusedRowActions.removeClass( 'visible' ); + }, 30); + }); + + $('#default-password-nag-no').click( function() { + setUserSetting('default_password_nag', 'hide'); + $('div.default-password-nag').hide(); + return false; + }); + + // tab in textareas + $('#newcontent').bind('keydown.wpevent_InsertTab', function(e) { + var el = e.target, selStart, selEnd, val, scroll, sel; + + if ( e.keyCode == 27 ) { // escape key + $(el).data('tab-out', true); + return; + } + + if ( e.keyCode != 9 || e.ctrlKey || e.altKey || e.shiftKey ) // tab key + return; + + if ( $(el).data('tab-out') ) { + $(el).data('tab-out', false); + return; + } + + selStart = el.selectionStart; + selEnd = el.selectionEnd; + val = el.value; + + try { + this.lastKey = 9; // not a standard DOM property, lastKey is to help stop Opera tab event. See blur handler below. + } catch(err) {} + + if ( document.selection ) { + el.focus(); + sel = document.selection.createRange(); + sel.text = '\t'; + } else if ( selStart >= 0 ) { + scroll = this.scrollTop; + el.value = val.substring(0, selStart).concat('\t', val.substring(selEnd) ); + el.selectionStart = el.selectionEnd = selStart + 1; + this.scrollTop = scroll; + } + + if ( e.stopPropagation ) + e.stopPropagation(); + if ( e.preventDefault ) + e.preventDefault(); + }); + + $('#newcontent').bind('blur.wpevent_InsertTab', function() { + if ( this.lastKey && 9 == this.lastKey ) + this.focus(); + }); + + if ( pageInput.length ) { + pageInput.closest('form').submit( function() { + + // Reset paging var for new filters/searches but not for bulk actions. See #17685. + if ( $('select[name="action"]').val() == -1 && $('select[name="action2"]').val() == -1 && pageInput.val() == currentPage ) + pageInput.val('1'); + }); + } + + $('.search-box input[type="search"], .search-box input[type="submit"]').mousedown(function () { + $('select[name^="action"]').val('-1'); + }); + + // Scroll into view when focused + $('#contextual-help-link, #show-settings-link').on( 'focus.scroll-into-view', function(e){ + if ( e.target.scrollIntoView ) + e.target.scrollIntoView(false); + }); + + // Disable upload buttons until files are selected + (function(){ + var button, input, form = $('form.wp-upload-form'); + if ( ! form.length ) + return; + button = form.find('input[type="submit"]'); + input = form.find('input[type="file"]'); + + function toggleUploadButton() { + button.prop('disabled', '' === input.map( function() { + return $(this).val(); + }).get().join('')); + } + toggleUploadButton(); + input.on('change', toggleUploadButton); + })(); +}); + +// Fire a custom jQuery event at the end of window resize +( function() { + var timeout; + + function triggerEvent() { + $(document).trigger( 'wp-window-resized' ); + } + + function fireOnce() { + window.clearTimeout( timeout ); + timeout = window.setTimeout( triggerEvent, 200 ); + } + + $(window).on( 'resize.wp-fire-once', fireOnce ); +}()); + +$(document).ready( function() { + var $document = $( document ), + $window = $( window ), + $body = $( document.body ), + $adminMenuWrap = $( '#adminmenuwrap' ), + $collapseMenu = $( '#collapse-menu' ), + $wpwrap = $( '#wpwrap' ), + $adminmenu = $( '#adminmenu' ), + $overlay = $( '#wp-responsive-overlay' ), + $toolbar = $( '#wp-toolbar' ), + $toolbarPopups = $toolbar.find( 'a[aria-haspopup="true"]' ), + $sortables = $('.meta-box-sortables'), + stickyMenuActive = false, + wpResponsiveActive = false; + + window.stickyMenu = { + enable: function() { + if ( ! stickyMenuActive ) { + $document.on( 'wp-window-resized.sticky-menu', $.proxy( this.update, this ) ); + $collapseMenu.on( 'click.sticky-menu', $.proxy( this.update, this ) ); + this.update(); + stickyMenuActive = true; + } + }, + + disable: function() { + if ( stickyMenuActive ) { + $window.off( 'resize.sticky-menu' ); + $collapseMenu.off( 'click.sticky-menu' ); + $body.removeClass( 'sticky-menu' ); + stickyMenuActive = false; + } + }, + + update: function() { + // Make the admin menu sticky if the viewport is taller than it + if ( $window.height() > $adminMenuWrap.height() + 32 ) { + if ( ! $body.hasClass( 'sticky-menu' ) ) { + $body.addClass( 'sticky-menu' ); + } + } else { + if ( $body.hasClass( 'sticky-menu' ) ) { + $body.removeClass( 'sticky-menu' ); + } + } + } + }; + + window.wpResponsive = { + init: function() { + var self = this, + scrollStart = 0; + + // Modify functionality based on custom activate/deactivate event + $document.on( 'wp-responsive-activate.wp-responsive', function() { + self.activate(); + }).on( 'wp-responsive-deactivate.wp-responsive', function() { + self.deactivate(); + }); + + $( '#wp-admin-bar-menu-toggle a' ).attr( 'aria-expanded', 'false' ); + + // Toggle sidebar when toggle is clicked + $( '#wp-admin-bar-menu-toggle' ).on( 'click.wp-responsive', function( event ) { + event.preventDefault(); + $wpwrap.toggleClass( 'wp-responsive-open' ); + if ( $wpwrap.hasClass( 'wp-responsive-open' ) ) { + $(this).find('a').attr( 'aria-expanded', 'true' ); + $( '#adminmenu a:first' ).focus(); + } else { + $(this).find('a').attr( 'aria-expanded', 'false' ); + } + } ); + + // Add menu events + $adminmenu.on( 'touchstart.wp-responsive', 'li.wp-has-submenu > a', function() { + scrollStart = $window.scrollTop(); + }).on( 'touchend.wp-responsive click.wp-responsive', 'li.wp-has-submenu > a', function( event ) { + if ( ! $adminmenu.data('wp-responsive') || + ( event.type === 'touchend' && $window.scrollTop() !== scrollStart ) ) { + + return; + } + + $( this ).parent( 'li' ).toggleClass( 'selected' ); + event.preventDefault(); + }); + + self.trigger(); + $document.on( 'wp-window-resized.wp-responsive', $.proxy( this.trigger, this ) ); + + // This needs to run later as UI Sortable may be initialized later on $(document).ready() + $window.on( 'load.wp-responsive', function() { + var width = navigator.userAgent.indexOf('AppleWebKit/') > -1 ? $window.width() : window.innerWidth; + + if ( width <= 782 ) { + self.disableSortables(); + } + }); + }, + + activate: function() { + window.stickyMenu.disable(); + + if ( ! $body.hasClass( 'auto-fold' ) ) { + $body.addClass( 'auto-fold' ); + } + + $adminmenu.data( 'wp-responsive', 1 ); + this.disableSortables(); + }, + + deactivate: function() { + window.stickyMenu.enable(); + $adminmenu.removeData('wp-responsive'); + this.enableSortables(); + }, + + trigger: function() { + var width; + + if ( window.innerWidth ) { + // window.innerWidth is affected by zooming on phones + width = Math.max( window.innerWidth, document.documentElement.clientWidth ); + } else { + // Exclude IE < 9, it doesn't support @media CSS rules + return; + } + + if ( width <= 782 ) { + if ( ! wpResponsiveActive ) { + $document.trigger( 'wp-responsive-activate' ); + wpResponsiveActive = true; + } + } else { + if ( wpResponsiveActive ) { + $document.trigger( 'wp-responsive-deactivate' ); + wpResponsiveActive = false; + } + } + + if ( width <= 480 ) { + this.enableOverlay(); + } else { + this.disableOverlay(); + } + }, + + enableOverlay: function() { + if ( $overlay.length === 0 ) { + $overlay = $( '
    ' ) + .insertAfter( '#wpcontent' ) + .hide() + .on( 'click.wp-responsive', function() { + $toolbar.find( '.menupop.hover' ).removeClass( 'hover' ); + $( this ).hide(); + }); + } + + $toolbarPopups.on( 'click.wp-responsive', function() { + $overlay.show(); + }); + }, + + disableOverlay: function() { + $toolbarPopups.off( 'click.wp-responsive' ); + $overlay.hide(); + }, + + disableSortables: function() { + if ( $sortables.length ) { + try { + $sortables.sortable('disable'); + } catch(e) {} + } + }, + + enableSortables: function() { + if ( $sortables.length ) { + try { + $sortables.sortable('enable'); + } catch(e) {} + } + } + }; + + window.stickyMenu.enable(); + window.wpResponsive.init(); +}); + +// make Windows 8 devices playing along nicely +(function(){ + if ( '-ms-user-select' in document.documentElement.style && navigator.userAgent.match(/IEMobile\/10\.0/) ) { + var msViewportStyle = document.createElement( 'style' ); + msViewportStyle.appendChild( + document.createTextNode( '@-ms-viewport{width:auto!important}' ) + ); + document.getElementsByTagName( 'head' )[0].appendChild( msViewportStyle ); + } +})(); + +// internal use +$(document).bind( 'wp_CloseOnEscape', function( e, data ) { + if ( typeof(data.cb) != 'function' ) + return; + + if ( typeof(data.condition) != 'function' || data.condition() ) + data.cb(); + + return true; +}); + +}( jQuery, window )); diff --git a/src/wp-admin/js/common.min.js b/src/wp-admin/js/common.min.js new file mode 100644 index 0000000..5da5820 --- /dev/null +++ b/src/wp-admin/js/common.min.js @@ -0,0 +1 @@ +var showNotice,adminMenu,columns,validateForm,screenMeta;!function(a,b){adminMenu={init:function(){},fold:function(){},restoreMenuState:function(){},toggle:function(){},favorites:function(){}},columns={init:function(){var b=this;a(".hide-column-tog","#adv-settings").click(function(){var c=a(this),d=c.val();c.prop("checked")?b.checked(d):b.unchecked(d),columns.saveManageColumnsState()})},saveManageColumnsState:function(){var b=this.hidden();a.post(ajaxurl,{action:"hidden-columns",hidden:b,screenoptionnonce:a("#screenoptionnonce").val(),page:pagenow})},checked:function(b){a(".column-"+b).show(),this.colSpanChange(1)},unchecked:function(b){a(".column-"+b).hide(),this.colSpanChange(-1)},hidden:function(){return a(".manage-column").filter(":hidden").map(function(){return this.id}).get().join(",")},useCheckboxesForHidden:function(){this.hidden=function(){return a(".hide-column-tog").not(":checked").map(function(){var a=this.id;return a.substring(a,a.length-5)}).get().join(",")}},colSpanChange:function(b){var c,d=a("table").find(".colspanchange");d.length&&(c=parseInt(d.attr("colspan"),10)+b,d.attr("colspan",c.toString()))}},a(document).ready(function(){columns.init()}),validateForm=function(b){return!a(b).find(".form-required").filter(function(){return""===a("input:visible",this).val()}).addClass("form-invalid").find("input:visible").change(function(){a(this).closest(".form-invalid").removeClass("form-invalid")}).size()},showNotice={warn:function(){var a=commonL10n.warnDelete||"";return confirm(a)?!0:!1},note:function(a){alert(a)}},screenMeta={element:null,toggles:null,page:null,init:function(){this.element=a("#screen-meta"),this.toggles=a(".screen-meta-toggle a"),this.page=a("#wpcontent"),this.toggles.click(this.toggleEvent)},toggleEvent:function(b){var c=a(this.href.replace(/.+#/,"#"));b.preventDefault(),c.length&&(c.is(":visible")?screenMeta.close(c,a(this)):screenMeta.open(c,a(this)))},open:function(b,c){a(".screen-meta-toggle").not(c.parent()).css("visibility","hidden"),b.parent().show(),b.slideDown("fast",function(){b.focus(),c.addClass("screen-meta-active").attr("aria-expanded",!0)})},close:function(b,c){b.slideUp("fast",function(){c.removeClass("screen-meta-active").attr("aria-expanded",!1),a(".screen-meta-toggle").css("visibility",""),b.parent().hide()})}},a(".contextual-help-tabs").delegate("a","click focus",function(b){var c,d=a(this);return b.preventDefault(),d.is(".active a")?!1:(a(".contextual-help-tabs .active").removeClass("active"),d.parent("li").addClass("active"),c=a(d.attr("href")),a(".help-tab-content").not(c).removeClass("active").hide(),c.addClass("active").show(),void 0)}),a(document).ready(function(){var c,d,e,f,g,h,i,j,k=!1,l=a("#adminmenu"),m=a("input.current-page"),n=m.val();l.on("click.wp-submenu-head",".wp-submenu-head",function(b){a(b.target).parent().siblings("a").get(0).click()}),a("#collapse-menu").on("click.collapse-menu",function(){var c,d=a(document.body);a("#adminmenu div.wp-submenu").css("margin-top",""),c=b.innerWidth?Math.max(b.innerWidth,document.documentElement.clientWidth):901,c&&900>c?d.hasClass("auto-fold")?(d.removeClass("auto-fold").removeClass("folded"),setUserSetting("unfold",1),setUserSetting("mfold","o")):(d.addClass("auto-fold"),setUserSetting("unfold",0)):d.hasClass("folded")?(d.removeClass("folded"),setUserSetting("mfold","o")):(d.addClass("folded"),setUserSetting("mfold","f"))}),("ontouchstart"in b||/IEMobile\/[1-9]/.test(navigator.userAgent))&&(h=/Mobile\/.+Safari/.test(navigator.userAgent)?"touchstart":"click",a(document.body).on(h+".wp-mobile-hover",function(b){l.data("wp-responsive")||a(b.target).closest("#adminmenu").length||l.find("li.wp-has-submenu.opensub").removeClass("opensub")}),l.find("a.wp-has-submenu").on(h+".wp-mobile-hover",function(b){var c=a(this),d=c.parent();l.data("wp-responsive")||d.hasClass("opensub")||d.hasClass("wp-menu-open")&&!(d.width()<40)||(b.preventDefault(),l.find("li.opensub").removeClass("opensub"),d.addClass("opensub"))})),l.find("li.wp-has-submenu").hoverIntent({over:function(){var c,d,e,f,g,h,i,j=a(this).find(".wp-submenu"),k=parseInt(j.css("top"),10);isNaN(k)||k>-5||l.data("wp-responsive")||(g=a(this).offset().top,h=a(b).scrollTop(),i=g-h-30,c=g+j.height()+1,d=a("#wpwrap").height(),e=60+c-d,f=a(b).height()+h-15,c-e>f&&(e=c-f),e>i&&(e=i),e>1?j.css("margin-top","-"+e+"px"):j.css("margin-top",""),l.find("li.menu-top").removeClass("opensub"),a(this).addClass("opensub"))},out:function(){l.data("wp-responsive")||a(this).removeClass("opensub").find(".wp-submenu").css("margin-top","")},timeout:200,sensitivity:7,interval:90}),l.on("focus.adminmenu",".wp-submenu a",function(b){l.data("wp-responsive")||a(b.target).closest("li.menu-top").addClass("opensub")}).on("blur.adminmenu",".wp-submenu a",function(b){l.data("wp-responsive")||a(b.target).closest("li.menu-top").removeClass("opensub")}),a("div.wrap h2:first").nextAll("div.updated, div.error").addClass("below-h2"),a("div.updated, div.error").not(".below-h2, .inline").insertAfter(a("div.wrap h2:first")),screenMeta.init(),a("tbody").children().children(".check-column").find(":checkbox").click(function(b){if("undefined"==b.shiftKey)return!0;if(b.shiftKey){if(!k)return!0;c=a(k).closest("form").find(":checkbox"),d=c.index(k),e=c.index(this),f=a(this).prop("checked"),d>0&&e>0&&d!=e&&(g=e>d?c.slice(d,e):c.slice(e,d),g.prop("checked",function(){return a(this).closest("tr").is(":visible")?f:!1}))}k=this;var h=a(this).closest("tbody").find(":checkbox").filter(":visible").not(":checked");return a(this).closest("table").children("thead, tfoot").find(":checkbox").prop("checked",function(){return 0===h.length}),!0}),a("thead, tfoot").find(".check-column :checkbox").click(function(b){var c=a(this).prop("checked"),d="undefined"==typeof toggleWithKeyboard?!1:toggleWithKeyboard,e=b.shiftKey||d;a(this).closest("table").children("tbody").filter(":visible").children().children(".check-column").find(":checkbox").prop("checked",function(){return a(this).is(":hidden")?!1:e?a(this).prop("checked"):c?!0:!1}),a(this).closest("table").children("thead, tfoot").filter(":visible").children().children(".check-column").find(":checkbox").prop("checked",function(){return e?!1:c?!0:!1})}),a("td.post-title, td.title, td.comment, .bookmarks td.column-name, td.blogname, td.username, .dashboard-comment-wrap").focusin(function(){clearTimeout(i),j=a(this).find(".row-actions"),j.addClass("visible")}).focusout(function(){i=setTimeout(function(){j.removeClass("visible")},30)}),a("#default-password-nag-no").click(function(){return setUserSetting("default_password_nag","hide"),a("div.default-password-nag").hide(),!1}),a("#newcontent").bind("keydown.wpevent_InsertTab",function(b){var c,d,e,f,g,h=b.target;if(27==b.keyCode)return a(h).data("tab-out",!0),void 0;if(!(9!=b.keyCode||b.ctrlKey||b.altKey||b.shiftKey)){if(a(h).data("tab-out"))return a(h).data("tab-out",!1),void 0;c=h.selectionStart,d=h.selectionEnd,e=h.value;try{this.lastKey=9}catch(i){}document.selection?(h.focus(),g=document.selection.createRange(),g.text=" "):c>=0&&(f=this.scrollTop,h.value=e.substring(0,c).concat(" ",e.substring(d)),h.selectionStart=h.selectionEnd=c+1,this.scrollTop=f),b.stopPropagation&&b.stopPropagation(),b.preventDefault&&b.preventDefault()}}),a("#newcontent").bind("blur.wpevent_InsertTab",function(){this.lastKey&&9==this.lastKey&&this.focus()}),m.length&&m.closest("form").submit(function(){-1==a('select[name="action"]').val()&&-1==a('select[name="action2"]').val()&&m.val()==n&&m.val("1")}),a('.search-box input[type="search"], .search-box input[type="submit"]').mousedown(function(){a('select[name^="action"]').val("-1")}),a("#contextual-help-link, #show-settings-link").on("focus.scroll-into-view",function(a){a.target.scrollIntoView&&a.target.scrollIntoView(!1)}),function(){function b(){c.prop("disabled",""===d.map(function(){return a(this).val()}).get().join(""))}var c,d,e=a("form.wp-upload-form");e.length&&(c=e.find('input[type="submit"]'),d=e.find('input[type="file"]'),b(),d.on("change",b))}()}),function(){function c(){a(document).trigger("wp-window-resized")}function d(){b.clearTimeout(e),e=b.setTimeout(c,200)}var e;a(b).on("resize.wp-fire-once",d)}(),a(document).ready(function(){var c=a(document),d=a(b),e=a(document.body),f=a("#adminmenuwrap"),g=a("#collapse-menu"),h=a("#wpwrap"),i=a("#adminmenu"),j=a("#wp-responsive-overlay"),k=a("#wp-toolbar"),l=k.find('a[aria-haspopup="true"]'),m=a(".meta-box-sortables"),n=!1,o=!1;b.stickyMenu={enable:function(){n||(c.on("wp-window-resized.sticky-menu",a.proxy(this.update,this)),g.on("click.sticky-menu",a.proxy(this.update,this)),this.update(),n=!0)},disable:function(){n&&(d.off("resize.sticky-menu"),g.off("click.sticky-menu"),e.removeClass("sticky-menu"),n=!1)},update:function(){d.height()>f.height()+32?e.hasClass("sticky-menu")||e.addClass("sticky-menu"):e.hasClass("sticky-menu")&&e.removeClass("sticky-menu")}},b.wpResponsive={init:function(){var e=this,f=0;c.on("wp-responsive-activate.wp-responsive",function(){e.activate()}).on("wp-responsive-deactivate.wp-responsive",function(){e.deactivate()}),a("#wp-admin-bar-menu-toggle a").attr("aria-expanded","false"),a("#wp-admin-bar-menu-toggle").on("click.wp-responsive",function(b){b.preventDefault(),h.toggleClass("wp-responsive-open"),h.hasClass("wp-responsive-open")?(a(this).find("a").attr("aria-expanded","true"),a("#adminmenu a:first").focus()):a(this).find("a").attr("aria-expanded","false")}),i.on("touchstart.wp-responsive","li.wp-has-submenu > a",function(){f=d.scrollTop()}).on("touchend.wp-responsive click.wp-responsive","li.wp-has-submenu > a",function(b){!i.data("wp-responsive")||"touchend"===b.type&&d.scrollTop()!==f||(a(this).parent("li").toggleClass("selected"),b.preventDefault())}),e.trigger(),c.on("wp-window-resized.wp-responsive",a.proxy(this.trigger,this)),d.on("load.wp-responsive",function(){var a=navigator.userAgent.indexOf("AppleWebKit/")>-1?d.width():b.innerWidth;782>=a&&e.disableSortables()})},activate:function(){b.stickyMenu.disable(),e.hasClass("auto-fold")||e.addClass("auto-fold"),i.data("wp-responsive",1),this.disableSortables()},deactivate:function(){b.stickyMenu.enable(),i.removeData("wp-responsive"),this.enableSortables()},trigger:function(){var a;b.innerWidth&&(a=Math.max(b.innerWidth,document.documentElement.clientWidth),782>=a?o||(c.trigger("wp-responsive-activate"),o=!0):o&&(c.trigger("wp-responsive-deactivate"),o=!1),480>=a?this.enableOverlay():this.disableOverlay())},enableOverlay:function(){0===j.length&&(j=a('
    ').insertAfter("#wpcontent").hide().on("click.wp-responsive",function(){k.find(".menupop.hover").removeClass("hover"),a(this).hide()})),l.on("click.wp-responsive",function(){j.show()})},disableOverlay:function(){l.off("click.wp-responsive"),j.hide()},disableSortables:function(){if(m.length)try{m.sortable("disable")}catch(a){}},enableSortables:function(){if(m.length)try{m.sortable("enable")}catch(a){}}},b.stickyMenu.enable(),b.wpResponsive.init()}),function(){if("-ms-user-select"in document.documentElement.style&&navigator.userAgent.match(/IEMobile\/10\.0/)){var a=document.createElement("style");a.appendChild(document.createTextNode("@-ms-viewport{width:auto!important}")),document.getElementsByTagName("head")[0].appendChild(a)}}(),a(document).bind("wp_CloseOnEscape",function(a,b){return"function"==typeof b.cb?(("function"!=typeof b.condition||b.condition())&&b.cb(),!0):void 0})}(jQuery,window); \ No newline at end of file diff --git a/src/wp-admin/js/custom-background.js b/src/wp-admin/js/custom-background.js new file mode 100644 index 0000000..81fd591 --- /dev/null +++ b/src/wp-admin/js/custom-background.js @@ -0,0 +1,75 @@ +/* global ajaxurl */ +(function($) { + $(document).ready(function() { + var frame, + bgImage = $( '#custom-background-image' ); + + $('#background-color').wpColorPicker({ + change: function( event, ui ) { + bgImage.css('background-color', ui.color.toString()); + }, + clear: function() { + bgImage.css('background-color', ''); + } + }); + + $('input[name="background-position-x"]').change(function() { + bgImage.css('background-position', $(this).val() + ' top'); + }); + + $('input[name="background-repeat"]').change(function() { + bgImage.css('background-repeat', $(this).val()); + }); + + $('#choose-from-library-link').click( function( event ) { + var $el = $(this); + + event.preventDefault(); + + // If the media frame already exists, reopen it. + if ( frame ) { + frame.open(); + return; + } + + // Create the media frame. + frame = wp.media.frames.customBackground = wp.media({ + // Set the title of the modal. + title: $el.data('choose'), + + // Tell the modal to show only images. + library: { + type: 'image' + }, + + // Customize the submit button. + button: { + // Set the text of the button. + text: $el.data('update'), + // Tell the button not to close the modal, since we're + // going to refresh the page when the image is selected. + close: false + } + }); + + // When an image is selected, run a callback. + frame.on( 'select', function() { + // Grab the selected attachment. + var attachment = frame.state().get('selection').first(); + + // Run an AJAX request to set the background image. + $.post( ajaxurl, { + action: 'set-background-image', + attachment_id: attachment.id, + size: 'full' + }).done( function() { + // When the request completes, reload the window. + window.location.reload(); + }); + }); + + // Finally, open the modal. + frame.open(); + }); + }); +})(jQuery); diff --git a/src/wp-admin/js/custom-background.min.js b/src/wp-admin/js/custom-background.min.js new file mode 100644 index 0000000..669d281 --- /dev/null +++ b/src/wp-admin/js/custom-background.min.js @@ -0,0 +1 @@ +!function(a){a(document).ready(function(){var b,c=a("#custom-background-image");a("#background-color").wpColorPicker({change:function(a,b){c.css("background-color",b.color.toString())},clear:function(){c.css("background-color","")}}),a('input[name="background-position-x"]').change(function(){c.css("background-position",a(this).val()+" top")}),a('input[name="background-repeat"]').change(function(){c.css("background-repeat",a(this).val())}),a("#choose-from-library-link").click(function(c){var d=a(this);return c.preventDefault(),b?(b.open(),void 0):(b=wp.media.frames.customBackground=wp.media({title:d.data("choose"),library:{type:"image"},button:{text:d.data("update"),close:!1}}),b.on("select",function(){var c=b.state().get("selection").first();a.post(ajaxurl,{action:"set-background-image",attachment_id:c.id,size:"full"}).done(function(){window.location.reload()})}),b.open(),void 0)})})}(jQuery); \ No newline at end of file diff --git a/src/wp-admin/js/custom-header.js b/src/wp-admin/js/custom-header.js new file mode 100644 index 0000000..ce224e4 --- /dev/null +++ b/src/wp-admin/js/custom-header.js @@ -0,0 +1,61 @@ +/* global isRtl */ +(function($) { + var frame; + + $( function() { + // Fetch available headers and apply jQuery.masonry + // once the images have loaded. + var $headers = $('.available-headers'); + + $headers.imagesLoaded( function() { + $headers.masonry({ + itemSelector: '.default-header', + isRTL: !! ( 'undefined' != typeof isRtl && isRtl ) + }); + }); + + // Build the choose from library frame. + $('#choose-from-library-link').click( function( event ) { + var $el = $(this); + event.preventDefault(); + + // If the media frame already exists, reopen it. + if ( frame ) { + frame.open(); + return; + } + + // Create the media frame. + frame = wp.media.frames.customHeader = wp.media({ + // Set the title of the modal. + title: $el.data('choose'), + + // Tell the modal to show only images. + library: { + type: 'image' + }, + + // Customize the submit button. + button: { + // Set the text of the button. + text: $el.data('update'), + // Tell the button not to close the modal, since we're + // going to refresh the page when the image is selected. + close: false + } + }); + + // When an image is selected, run a callback. + frame.on( 'select', function() { + // Grab the selected attachment. + var attachment = frame.state().get('selection').first(), + link = $el.data('updateLink'); + + // Tell the browser to navigate to the crop step. + window.location = link + '&file=' + attachment.id; + }); + + frame.open(); + }); + }); +}(jQuery)); diff --git a/src/wp-admin/js/customize-controls.js b/src/wp-admin/js/customize-controls.js new file mode 100644 index 0000000..3a05ad4 --- /dev/null +++ b/src/wp-admin/js/customize-controls.js @@ -0,0 +1,1004 @@ +(function( exports, $ ){ + var api = wp.customize; + + /** + * @param options + * - previewer - The Previewer instance to sync with. + * - transport - The transport to use for previewing. Supports 'refresh' and 'postMessage'. + */ + api.Setting = api.Value.extend({ + initialize: function( id, value, options ) { + api.Value.prototype.initialize.call( this, value, options ); + + this.id = id; + this.transport = this.transport || 'refresh'; + + this.bind( this.preview ); + }, + preview: function() { + switch ( this.transport ) { + case 'refresh': + return this.previewer.refresh(); + case 'postMessage': + return this.previewer.send( 'setting', [ this.id, this() ] ); + } + } + }); + + api.Control = api.Class.extend({ + initialize: function( id, options ) { + var control = this, + nodes, radios, settings; + + this.params = {}; + $.extend( this, options || {} ); + + this.id = id; + this.selector = '#customize-control-' + id.replace( /\]/g, '' ).replace( /\[/g, '-' ); + this.container = $( this.selector ); + + settings = $.map( this.params.settings, function( value ) { + return value; + }); + + api.apply( api, settings.concat( function() { + var key; + + control.settings = {}; + for ( key in control.params.settings ) { + control.settings[ key ] = api( control.params.settings[ key ] ); + } + + control.setting = control.settings['default'] || null; + control.ready(); + }) ); + + control.elements = []; + + nodes = this.container.find('[data-customize-setting-link]'); + radios = {}; + + nodes.each( function() { + var node = $(this), + name; + + if ( node.is(':radio') ) { + name = node.prop('name'); + if ( radios[ name ] ) + return; + + radios[ name ] = true; + node = nodes.filter( '[name="' + name + '"]' ); + } + + api( node.data('customizeSettingLink'), function( setting ) { + var element = new api.Element( node ); + control.elements.push( element ); + element.sync( setting ); + element.set( setting() ); + }); + }); + }, + + ready: function() {}, + + dropdownInit: function() { + var control = this, + statuses = this.container.find('.dropdown-status'), + params = this.params, + toggleFreeze = false, + update = function( to ) { + if ( typeof to === 'string' && params.statuses && params.statuses[ to ] ) + statuses.html( params.statuses[ to ] ).show(); + else + statuses.hide(); + }; + + // Support the .dropdown class to open/close complex elements + this.container.on( 'click keydown', '.dropdown', function( event ) { + if ( event.type === 'keydown' && 13 !== event.which ) // enter + return; + + event.preventDefault(); + + if (!toggleFreeze) + control.container.toggleClass('open'); + + if ( control.container.hasClass('open') ) + control.container.parent().parent().find('li.library-selected').focus(); + + // Don't want to fire focus and click at same time + toggleFreeze = true; + setTimeout(function () { + toggleFreeze = false; + }, 400); + }); + + this.setting.bind( update ); + update( this.setting() ); + } + }); + + api.ColorControl = api.Control.extend({ + ready: function() { + var control = this, + picker = this.container.find('.color-picker-hex'); + + picker.val( control.setting() ).wpColorPicker({ + change: function() { + control.setting.set( picker.wpColorPicker('color') ); + }, + clear: function() { + control.setting.set( false ); + } + }); + } + }); + + api.UploadControl = api.Control.extend({ + ready: function() { + var control = this; + + this.params.removed = this.params.removed || ''; + + this.success = $.proxy( this.success, this ); + + this.uploader = $.extend({ + container: this.container, + browser: this.container.find('.upload'), + dropzone: this.container.find('.upload-dropzone'), + success: this.success, + plupload: {}, + params: {} + }, this.uploader || {} ); + + if ( control.params.extensions ) { + control.uploader.plupload.filters = [{ + title: api.l10n.allowedFiles, + extensions: control.params.extensions + }]; + } + + if ( control.params.context ) + control.uploader.params['post_data[context]'] = this.params.context; + + if ( api.settings.theme.stylesheet ) + control.uploader.params['post_data[theme]'] = api.settings.theme.stylesheet; + + this.uploader = new wp.Uploader( this.uploader ); + + this.remover = this.container.find('.remove'); + this.remover.on( 'click keydown', function( event ) { + if ( event.type === 'keydown' && 13 !== event.which ) // enter + return; + + control.setting.set( control.params.removed ); + event.preventDefault(); + }); + + this.removerVisibility = $.proxy( this.removerVisibility, this ); + this.setting.bind( this.removerVisibility ); + this.removerVisibility( this.setting.get() ); + }, + success: function( attachment ) { + this.setting.set( attachment.get('url') ); + }, + removerVisibility: function( to ) { + this.remover.toggle( to != this.params.removed ); + } + }); + + api.ImageControl = api.UploadControl.extend({ + ready: function() { + var control = this, + panels; + + this.uploader = { + init: function() { + var fallback, button; + + if ( this.supports.dragdrop ) + return; + + // Maintain references while wrapping the fallback button. + fallback = control.container.find( '.upload-fallback' ); + button = fallback.children().detach(); + + this.browser.detach().empty().append( button ); + fallback.append( this.browser ).show(); + } + }; + + api.UploadControl.prototype.ready.call( this ); + + this.thumbnail = this.container.find('.preview-thumbnail img'); + this.thumbnailSrc = $.proxy( this.thumbnailSrc, this ); + this.setting.bind( this.thumbnailSrc ); + + this.library = this.container.find('.library'); + + // Generate tab objects + this.tabs = {}; + panels = this.library.find('.library-content'); + + this.library.children('ul').children('li').each( function() { + var link = $(this), + id = link.data('customizeTab'), + panel = panels.filter('[data-customize-tab="' + id + '"]'); + + control.tabs[ id ] = { + both: link.add( panel ), + link: link, + panel: panel + }; + }); + + // Bind tab switch events + this.library.children('ul').on( 'click keydown', 'li', function( event ) { + if ( event.type === 'keydown' && 13 !== event.which ) // enter + return; + + var id = $(this).data('customizeTab'), + tab = control.tabs[ id ]; + + event.preventDefault(); + + if ( tab.link.hasClass('library-selected') ) + return; + + control.selected.both.removeClass('library-selected'); + control.selected = tab; + control.selected.both.addClass('library-selected'); + }); + + // Bind events to switch image urls. + this.library.on( 'click keydown', 'a', function( event ) { + if ( event.type === 'keydown' && 13 !== event.which ) // enter + return; + + var value = $(this).data('customizeImageValue'); + + if ( value ) { + control.setting.set( value ); + event.preventDefault(); + } + }); + + if ( this.tabs.uploaded ) { + this.tabs.uploaded.target = this.library.find('.uploaded-target'); + if ( ! this.tabs.uploaded.panel.find('.thumbnail').length ) + this.tabs.uploaded.both.addClass('hidden'); + } + + // Select a tab + panels.each( function() { + var tab = control.tabs[ $(this).data('customizeTab') ]; + + // Select the first visible tab. + if ( ! tab.link.hasClass('hidden') ) { + control.selected = tab; + tab.both.addClass('library-selected'); + return false; + } + }); + + this.dropdownInit(); + }, + success: function( attachment ) { + api.UploadControl.prototype.success.call( this, attachment ); + + // Add the uploaded image to the uploaded tab. + if ( this.tabs.uploaded && this.tabs.uploaded.target.length ) { + this.tabs.uploaded.both.removeClass('hidden'); + + // @todo: Do NOT store this on the attachment model. That is bad. + attachment.element = $( '
    ' ) + .data( 'customizeImageValue', attachment.get('url') ) + .append( '' ) + .appendTo( this.tabs.uploaded.target ); + } + }, + thumbnailSrc: function( to ) { + if ( /^(https?:)?\/\//.test( to ) ) + this.thumbnail.prop( 'src', to ).show(); + else + this.thumbnail.hide(); + } + }); + + // Change objects contained within the main customize object to Settings. + api.defaultConstructor = api.Setting; + + // Create the collection of Control objects. + api.control = new api.Values({ defaultConstructor: api.Control }); + + api.PreviewFrame = api.Messenger.extend({ + sensitivity: 2000, + + initialize: function( params, options ) { + var deferred = $.Deferred(); + + // This is the promise object. + deferred.promise( this ); + + this.container = params.container; + this.signature = params.signature; + + $.extend( params, { channel: api.PreviewFrame.uuid() }); + + api.Messenger.prototype.initialize.call( this, params, options ); + + this.add( 'previewUrl', params.previewUrl ); + + this.query = $.extend( params.query || {}, { customize_messenger_channel: this.channel() }); + + this.run( deferred ); + }, + + run: function( deferred ) { + var self = this, + loaded = false, + ready = false; + + if ( this._ready ) + this.unbind( 'ready', this._ready ); + + this._ready = function() { + ready = true; + + if ( loaded ) + deferred.resolveWith( self ); + }; + + this.bind( 'ready', this._ready ); + + this.request = $.ajax( this.previewUrl(), { + type: 'POST', + data: this.query, + xhrFields: { + withCredentials: true + } + } ); + + this.request.fail( function() { + deferred.rejectWith( self, [ 'request failure' ] ); + }); + + this.request.done( function( response ) { + var location = self.request.getResponseHeader('Location'), + signature = self.signature, + index; + + // Check if the location response header differs from the current URL. + // If so, the request was redirected; try loading the requested page. + if ( location && location != self.previewUrl() ) { + deferred.rejectWith( self, [ 'redirect', location ] ); + return; + } + + // Check if the user is not logged in. + if ( '0' === response ) { + self.login( deferred ); + return; + } + + // Check for cheaters. + if ( '-1' === response ) { + deferred.rejectWith( self, [ 'cheatin' ] ); + return; + } + + // Check for a signature in the request. + index = response.lastIndexOf( signature ); + if ( -1 === index || index < response.lastIndexOf('') ) { + deferred.rejectWith( self, [ 'unsigned' ] ); + return; + } + + // Strip the signature from the request. + response = response.slice( 0, index ) + response.slice( index + signature.length ); + + // Create the iframe and inject the html content. + self.iframe = $('"; + echo '
    '; + require_once(ABSPATH . 'wp-admin/admin-footer.php'); + exit; + break; + case 'delete-selected': + if ( ! current_user_can( 'delete_themes' ) ) + wp_die( __('You do not have sufficient permissions to delete themes for this site.') ); + check_admin_referer( 'bulk-themes' ); + + $themes = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array(); + + unset( $themes[ get_option( 'stylesheet' ) ], $themes[ get_option( 'template' ) ] ); + + if ( empty( $themes ) ) { + wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) ); + exit; + } + + $files_to_delete = $theme_info = array(); + foreach ( $themes as $key => $theme ) { + $theme_info[ $theme ] = wp_get_theme( $theme ); + $files_to_delete = array_merge( $files_to_delete, list_files( $theme_info[ $theme ]->get_stylesheet_directory() ) ); + } + + if ( empty( $themes ) ) { + wp_safe_redirect( add_query_arg( 'error', 'main', $referer ) ); + exit; + } + + include(ABSPATH . 'wp-admin/update.php'); + + $parent_file = 'themes.php'; + + if ( ! isset( $_REQUEST['verify-delete'] ) ) { + wp_enqueue_script( 'jquery' ); + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + ?> +
    + ' . _n( 'Delete Theme', 'Delete Themes', $themes_to_delete ) . ''; + ?> +

    +

    +
      + ', sprintf( __('%1$s by %2$s' ), $theme->display('Name'), $theme->display('Author') ), ''; /* translators: 1: theme name, 2: theme author */ ?> +
    +

    +
    + + + '; + ?> + + +
    +
    + +
    + +

    + +
    + 1, + 'action' => 'delete-selected', + 'checked' => $_REQUEST['checked'], + '_wpnonce' => $_REQUEST['_wpnonce'] + ), network_admin_url( 'themes.php' ) ) ) ); + } + + $paged = ( $_REQUEST['paged'] ) ? $_REQUEST['paged'] : 1; + wp_redirect( add_query_arg( array( + 'deleted' => count( $themes ), + 'paged' => $paged, + 's' => $s + ), network_admin_url( 'themes.php' ) ) ); + exit; + break; + } +} + +$wp_list_table->prepare_items(); + +add_thickbox(); + +add_screen_option( 'per_page', array('label' => _x( 'Themes', 'themes per page (screen options)' )) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __('This screen enables and disables the inclusion of themes available to choose in the Appearance menu for each site. It does not activate or deactivate which theme a site is currently using.') . '

    ' . + '

    ' . __('If the network admin disables a theme that is in use, it can still remain selected on that site. If another theme is chosen, the disabled theme will not appear in the site’s Appearance > Themes screen.') . '

    ' . + '

    ' . __('Themes can be enabled on a site by site basis by the network admin on the Edit Site screen (which has a Themes tab); get there via the Edit action link on the All Sites screen. Only network admins are able to install or edit themes.') . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Network Themes') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +$title = __('Themes'); +$parent_file = 'themes.php'; + +wp_enqueue_script( 'theme-preview' ); + +require_once(ABSPATH . 'wp-admin/admin-header.php'); + +?> + +
    +

    ' . __('Search results for “%s”') . '', esc_html( $s ) ); ?> +

    + +

    ' . sprintf( _n( 'Theme enabled.', '%s themes enabled.', $_GET['enabled'] ), number_format_i18n( $_GET['enabled'] ) ) . '

    '; +} elseif ( isset( $_GET['disabled'] ) ) { + $_GET['disabled'] = absint( $_GET['disabled'] ); + echo '

    ' . sprintf( _n( 'Theme disabled.', '%s themes disabled.', $_GET['disabled'] ), number_format_i18n( $_GET['disabled'] ) ) . '

    '; +} elseif ( isset( $_GET['deleted'] ) ) { + $_GET['deleted'] = absint( $_GET['deleted'] ); + echo '

    ' . sprintf( _nx( 'Theme deleted.', '%s themes deleted.', $_GET['deleted'], 'network' ), number_format_i18n( $_GET['deleted'] ) ) . '

    '; +} elseif ( isset( $_GET['error'] ) && 'none' == $_GET['error'] ) { + echo '

    ' . __( 'No theme selected.' ) . '

    '; +} elseif ( isset( $_GET['error'] ) && 'main' == $_GET['error'] ) { + echo '

    ' . __( 'You cannot delete a theme while it is active on the main site.' ) . '

    '; +} + +?> + +
    +search_box( __( 'Search Installed Themes' ), 'theme' ); ?> +
    + +views(); + +if ( 'broken' == $status ) + echo '

    ' . __('The following themes are installed but incomplete. Themes must have a stylesheet and a template.') . '

    '; +?> + +
    + + + +display(); ?> +
    + +
    + +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __('Only use this screen once you have updated to a new version of WordPress through Updates/Available Updates (via the Network Administration navigation menu or the Toolbar). Clicking the Upgrade Network button will step through each site in the network, five at a time, and make sure any database updates are applied.') . '

    ' . + '

    ' . __('If a version update to core has not happened, clicking this button won’t affect anything.') . '

    ' . + '

    ' . __('If this process fails for any reason, users logging in to their sites will force the same update.') . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Upgrade Network') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +if ( ! current_user_can( 'manage_network' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + +echo '
    '; +echo '

    ' . __( 'Upgrade Network' ) . '

    '; + +$action = isset($_GET['action']) ? $_GET['action'] : 'show'; + +switch ( $action ) { + case "upgrade": + $n = ( isset($_GET['n']) ) ? intval($_GET['n']) : 0; + + if ( $n < 5 ) { + global $wp_db_version; + update_site_option( 'wpmu_upgrade_site', $wp_db_version ); + } + + $blogs = $wpdb->get_results( "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0' ORDER BY registered DESC LIMIT {$n}, 5", ARRAY_A ); + if ( empty( $blogs ) ) { + echo '

    ' . __( 'All done!' ) . '

    '; + break; + } + echo "
      "; + foreach ( (array) $blogs as $details ) { + switch_to_blog( $details['blog_id'] ); + $siteurl = site_url(); + $upgrade_url = admin_url( 'upgrade.php?step=upgrade_db' ); + restore_current_blog(); + echo "
    • $siteurl
    • "; + $response = wp_remote_get( $upgrade_url, array( 'timeout' => 120, 'httpversion' => '1.1' ) ); + if ( is_wp_error( $response ) ) + wp_die( sprintf( __( 'Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: %2$s' ), $siteurl, $response->get_error_message() ) ); + do_action( 'after_mu_upgrade', $response ); + do_action( 'wpmu_upgrade_site', $details[ 'blog_id' ] ); + } + echo "
    "; + ?>

    + +

    +

    + + +

    +

    + +
    + + diff --git a/src/wp-admin/network/user-edit.php b/src/wp-admin/network/user-edit.php new file mode 100644 index 0000000..effaaf8 --- /dev/null +++ b/src/wp-admin/network/user-edit.php @@ -0,0 +1,16 @@ +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __('Add User will set up a new user account on the network and send that person an email with username and password.') . '

    ' . + '

    ' . __('Users who are signed up to the network without a site are added as subscribers to the main or primary dashboard site, giving them profile pages to manage their accounts. These users will only see Dashboard and My Sites in the main navigation until a site is created for them.') . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Network Users') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +if ( isset($_REQUEST['action']) && 'add-user' == $_REQUEST['action'] ) { + check_admin_referer( 'add-user', '_wpnonce_add-user' ); + if ( ! current_user_can( 'manage_network_users' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( ! is_array( $_POST['user'] ) ) + wp_die( __( 'Cannot create an empty user.' ) ); + + $user = $_POST['user']; + + $user_details = wpmu_validate_user_signup( $user['username'], $user['email'] ); + if ( is_wp_error( $user_details[ 'errors' ] ) && ! empty( $user_details[ 'errors' ]->errors ) ) { + $add_user_errors = $user_details[ 'errors' ]; + } else { + $password = wp_generate_password( 12, false); + $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ) ); + + if ( ! $user_id ) { + $add_user_errors = new WP_Error( 'add_user_fail', __( 'Cannot add user.' ) ); + } else { + wp_new_user_notification( $user_id, $password ); + wp_redirect( add_query_arg( array('update' => 'added'), 'user-new.php' ) ); + exit; + } + } +} + +if ( isset($_GET['update']) ) { + $messages = array(); + if ( 'added' == $_GET['update'] ) + $messages[] = __('User added.'); +} + +$title = __('Add New User'); +$parent_file = 'users.php'; + +require( ABSPATH . 'wp-admin/admin-header.php' ); ?> + +
    +

    +

    ' . $msg . '

    '; +} + +if ( isset( $add_user_errors ) && is_wp_error( $add_user_errors ) ) { ?> +
    + get_error_messages() as $message ) + echo "

    $message

    "; + ?> +
    + +
    + + + + + + + + + + + + +
    + + +
    +
    + +

    +

    +
    + + ID'>$current_user->user_login"; + + foreach ( ( $allusers = (array) $_POST['allusers'] ) as $key => $val ) { + if ( $val != '' && $val != '0' ) { + $delete_user = get_userdata( $val ); + + if ( ! current_user_can( 'delete_user', $delete_user->ID ) ) + wp_die( sprintf( __( 'Warning! User %s cannot be deleted.' ), $delete_user->user_login ) ); + + if ( in_array( $delete_user->user_login, $site_admins ) ) + wp_die( sprintf( __( 'Warning! User cannot be deleted. The user %s is a network administrator.' ), $delete_user->user_login ) ); + + echo "\n"; + $blogs = get_blogs_of_user( $val, true ); + + if ( !empty( $blogs ) ) { + ?> +

    %s?" ), $delete_user->user_login ); ?>

    + $details ) { + $blog_users = get_users( array( 'blog_id' => $details->userblog_id, 'fields' => array( 'ID', 'user_login' ) ) ); + if ( is_array( $blog_users ) && !empty( $blog_users ) ) { + $user_site = "{$details->blogname}"; + $user_dropdown = "\n"; + ?> +
      +
    • +
    • +
    • +
    + "; + } + } + } + + submit_button( __('Confirm Deletion'), 'delete' ); + ?> + + '; + confirm_delete_users( $_POST['allusers'] ); + echo '
    '; + require_once( ABSPATH . 'wp-admin/admin-footer.php' ); + } else { + wp_redirect( network_admin_url( 'users.php' ) ); + } + exit(); + break; + + case 'allusers': + if ( !current_user_can( 'manage_network_users' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( ( isset( $_POST['action']) || isset($_POST['action2'] ) ) && isset( $_POST['allusers'] ) ) { + check_admin_referer( 'bulk-users-network' ); + + $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; + $userfunction = ''; + + foreach ( (array) $_POST['allusers'] as $key => $val ) { + if ( !empty( $val ) ) { + switch ( $doaction ) { + case 'delete': + if ( ! current_user_can( 'delete_users' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + $title = __( 'Users' ); + $parent_file = 'users.php'; + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + echo '
    '; + confirm_delete_users( $_POST['allusers'] ); + echo '
    '; + require_once( ABSPATH . 'wp-admin/admin-footer.php' ); + exit(); + break; + + case 'spam': + $user = get_userdata( $val ); + if ( is_super_admin( $user->ID ) ) + wp_die( sprintf( __( 'Warning! User cannot be modified. The user %s is a network administrator.' ), esc_html( $user->user_login ) ) ); + + $userfunction = 'all_spam'; + $blogs = get_blogs_of_user( $val, true ); + foreach ( (array) $blogs as $key => $details ) { + if ( $details->userblog_id != $current_site->blog_id ) // main blog not a spam ! + update_blog_status( $details->userblog_id, 'spam', '1' ); + } + update_user_status( $val, 'spam', '1' ); + break; + + case 'notspam': + $userfunction = 'all_notspam'; + $blogs = get_blogs_of_user( $val, true ); + foreach ( (array) $blogs as $key => $details ) + update_blog_status( $details->userblog_id, 'spam', '0' ); + + update_user_status( $val, 'spam', '0' ); + break; + } + } + } + + wp_safe_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $userfunction ), wp_get_referer() ) ); + } else { + $location = network_admin_url( 'users.php' ); + + if ( ! empty( $_REQUEST['paged'] ) ) + $location = add_query_arg( 'paged', (int) $_REQUEST['paged'], $location ); + wp_redirect( $location ); + } + exit(); + break; + + case 'dodelete': + check_admin_referer( 'ms-users-delete' ); + if ( ! ( current_user_can( 'manage_network_users' ) && current_user_can( 'delete_users' ) ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( ! empty( $_POST['blog'] ) && is_array( $_POST['blog'] ) ) { + foreach ( $_POST['blog'] as $id => $users ) { + foreach ( $users as $blogid => $user_id ) { + if ( ! current_user_can( 'delete_user', $id ) ) + continue; + + if ( ! empty( $_POST['delete'] ) && 'reassign' == $_POST['delete'][$blogid][$id] ) + remove_user_from_blog( $id, $blogid, $user_id ); + else + remove_user_from_blog( $id, $blogid ); + } + } + } + $i = 0; + if ( is_array( $_POST['user'] ) && ! empty( $_POST['user'] ) ) + foreach( $_POST['user'] as $id ) { + if ( ! current_user_can( 'delete_user', $id ) ) + continue; + wpmu_delete_user( $id ); + $i++; + } + + if ( $i == 1 ) + $deletefunction = 'delete'; + else + $deletefunction = 'all_delete'; + + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $deletefunction ), network_admin_url( 'users.php' ) ) ); + exit(); + break; + } +} + +$wp_list_table = _get_list_table('WP_MS_Users_List_Table'); +$pagenum = $wp_list_table->get_pagenum(); +$wp_list_table->prepare_items(); +$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); + +if ( $pagenum > $total_pages && $total_pages > 0 ) { + wp_redirect( add_query_arg( 'paged', $total_pages ) ); + exit; +} +$title = __( 'Users' ); +$parent_file = 'users.php'; + +add_screen_option( 'per_page', array('label' => _x( 'Users', 'users per page (screen options)' )) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __('This table shows all users across the network and the sites to which they are assigned.') . '

    ' . + '

    ' . __('Hover over any user on the list to make the edit links appear. The Edit link on the left will take you to their Edit User profile page; the Edit link on the right by any site name goes to an Edit Site screen for that site.') . '

    ' . + '

    ' . __('You can also go to the user’s profile page by clicking on the individual username.') . '

    ' . + '

    ' . __('You can sort the table by clicking on any of the bold headings and switch between list and excerpt views by using the icons in the upper right.') . '

    ' . + '

    ' . __('The bulk action will permanently delete selected users, or mark/unmark those selected as spam. Spam users will have posts removed and will be unable to sign up again with the same email addresses.') . '

    ' . + '

    ' . __('You can make an existing user an additional super admin by going to the Edit User profile page and checking the box to grant that privilege.') . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Network Users') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +if ( isset( $_REQUEST['updated'] ) && $_REQUEST['updated'] == 'true' && ! empty( $_REQUEST['action'] ) ) { + ?> +

    + +

    + +
    +

    + ' . __( 'Search results for “%s”' ) . '', esc_html( $usersearch ) ); + ?> +

    + + views(); ?> + +
    + search_box( __( 'Search Users' ), 'all-user' ); ?> +
    + +
    + display(); ?> +
    +
    + + diff --git a/src/wp-admin/options-discussion.php b/src/wp-admin/options-discussion.php new file mode 100644 index 0000000..717defa --- /dev/null +++ b/src/wp-admin/options-discussion.php @@ -0,0 +1,273 @@ +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

    ' . __('This screen provides many options for controlling the management and display of comments and links to your posts/pages. So many, in fact, they won’t all fit here! :) Use the documentation links to get information on what each discussion setting does.') . '

    ' . + '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    ', +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Discussion Settings') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +

    +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    +

    + +

    +

    + +

    +
    +

    +

    + +

    +
    + +

    + +

    + + + + + + + + + + + + + + + + + +
    + +
    + + __('G — Suitable for all audiences'), + /* translators: Content suitability rating: http://bit.ly/89QxZA */ + 'PG' => __('PG — Possibly offensive, usually for audiences 13 and above'), + /* translators: Content suitability rating: http://bit.ly/89QxZA */ + 'R' => __('R — Intended for adult audiences above 17'), + /* translators: Content suitability rating: http://bit.ly/89QxZA */ + 'X' => __('X — Even more mature than above') +); +foreach ($ratings as $key => $rating) : + $selected = (get_option('avatar_rating') == $key) ? 'checked="checked"' : ''; + echo "\n\t
    "; +endforeach; +?> + +
    + +
    + + __('Mystery Man'), + 'blank' => __('Blank'), + 'gravatar_default' => __('Gravatar Logo'), + 'identicon' => __('Identicon (Generated)'), + 'wavatar' => __('Wavatar (Generated)'), + 'monsterid' => __('MonsterID (Generated)'), + 'retro' => __('Retro (Generated)') +); +/** + * Filter the default avatars. + * + * Avatars are stored in key/value pairs, where the key is option value, + * and the name is the displayed avatar name. + * + * @since 2.6.0 + * + * @param array $avatar_defaults Array of default avatars. + */ +$avatar_defaults = apply_filters( 'avatar_defaults', $avatar_defaults ); +$default = get_option('avatar_default'); +if ( empty($default) ) + $default = 'mystery'; +$size = 32; +$avatar_list = ''; +foreach ( $avatar_defaults as $default_key => $default_name ) { + $selected = ($default == $default_key) ? 'checked="checked" ' : ''; + $avatar_list .= "\n\t'; + $avatar_list .= '
    '; +} +/** + * Filter the HTML output of the default avatar list. + * + * @since 2.6.0 + * + * @param string $avatar_list HTML markup of the avatar list. + */ +echo apply_filters( 'default_avatar_select', $avatar_list ); +?> + +
    + + + + +
    +
    + + diff --git a/src/wp-admin/options-general.php b/src/wp-admin/options-general.php new file mode 100644 index 0000000..f294600 --- /dev/null +++ b/src/wp-admin/options-general.php @@ -0,0 +1,329 @@ + + +' . __('The fields on this screen determine some of the basics of your site setup.') . '

    ' . + '

    ' . __('Most themes display the site title at the top of every page, in the title bar of the browser, and as the identifying name for syndicated feeds. The tagline is also displayed by many themes.') . '

    '; + +if ( ! is_multisite() ) { + $options_help .= '

    ' . __('The WordPress URL and the Site URL can be the same (example.com) or different; for example, having the WordPress core files (example.com/wordpress) in a subdirectory instead of the root directory.') . '

    ' . + '

    ' . __('If you want site visitors to be able to register themselves, as opposed to by the site administrator, check the membership box. A default user role can be set for all new users, whether self-registered or registered by the site admin.') . '

    '; +} + +$options_help .= '

    ' . __('UTC means Coordinated Universal Time.') . '

    ' . + '

    ' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => $options_help, +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on General Settings') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    class="regular-text code" />
    class="regular-text code" /> +

    to be different from the directory you installed WordPress.'); ?>

    +

    +
    + +
    +

    The new address will not become active until confirmed.') ?>

    + +
    +

    %1$s. Cancel'), esc_html( $new_admin_email ), esc_url( admin_url( 'options.php?dismiss=new_admin_email' ) ) ); ?>

    +
    + +
    + + + + UTC time is %s'), date_i18n($timezone_format, false, 'gmt')); ?> + + %1$s'), date_i18n($timezone_format)); ?> + +

    + +
    + + +
    + $right_now ) { + $found = true; + break; + } + } + + if ( $found ) { + echo ' '; + $message = $tr['isdst'] ? + __('Daylight saving time begins on: %s.') : + __('Standard time begins on: %s.'); + // Add the difference between the current offset and the new offset to ts to get the correct transition time from date_i18n(). + printf( $message, date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $tr['ts'] + ($tz_offset - $tr['offset']) ) ); + } else { + _e('This timezone does not observe daylight saving time.'); + } + } + // Set back to UTC. + date_default_timezone_set('UTC'); + ?> +
    + +
    +
    + ' . date_i18n( $format ) . "
    \n"; + } + + echo ' ' . date_i18n( get_option('date_format') ) . " \n"; + + echo "\t

    " . __('Documentation on date and time formatting.') . "

    \n"; +?> +
    +
    +
    + ' . date_i18n( $format ) . "
    \n"; + } + + echo ' ' . date_i18n( get_option('time_format') ) . " \n"; + ; +?> +
    +
    + +
    + + + + +
    + +
    + + diff --git a/src/wp-admin/options-head.php b/src/wp-admin/options-head.php new file mode 100644 index 0000000..1c706c8 --- /dev/null +++ b/src/wp-admin/options-head.php @@ -0,0 +1,18 @@ +' . __('You can set maximum sizes for images inserted into your written content; you can also insert an image as Full Size.') . '

    '; + +if ( ! is_multisite() && ( get_option('upload_url_path') || ( get_option('upload_path') != 'wp-content/uploads' && get_option('upload_path') ) ) ) { + $media_options_help .= '

    ' . __('Uploading Files allows you to choose the folder and path for storing your uploaded files.') . '

    '; +} + +$media_options_help .= '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => $media_options_help, +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Media Settings') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +include( ABSPATH . 'wp-admin/admin-header.php' ); + +?> + +
    +

    + +
    + + +

    +

    + + + + + + + + + + + + + + + + + + +
    + + + +
    +/> + +
    + + + + +
    + + + + +
    + + +

    + + +
    + + + +

    + + + + + + + + + + + + + + + + + +
    +

    wp-content/uploads'); ?>

    +
    +

    +
    + +
    + + + + + + +
    + +
    + + diff --git a/src/wp-admin/options-permalink.php b/src/wp-admin/options-permalink.php new file mode 100644 index 0000000..63ddc55 --- /dev/null +++ b/src/wp-admin/options-permalink.php @@ -0,0 +1,288 @@ +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

    ' . __('Permalinks are the permanent URLs to your individual pages and blog posts, as well as your category and tag archives. A permalink is the web address used to link to your content. The URL to each post should be permanent, and never change — hence the name permalink.') . '

    ' . + '

    ' . __('This screen allows you to choose your default permalink structure. You can choose from common settings or create custom URL structures.') . '

    ' . + '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    ', +) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'common-settings', + 'title' => __('Common Settings'), + 'content' => '

    ' . __('Many people choose to use “pretty permalinks,” URLs that contain useful information such as the post title rather than generic post ID numbers. You can choose from any of the permalink formats under Common Settings, or can craft your own if you select Custom Structure.') . '

    ' . + '

    ' . __('If you pick an option other than Default, your general URL path with structure tags, terms surrounded by %, will also appear in the custom structure field and your path can be further modified there.') . '

    ' . + '

    ' . __('When you assign multiple categories or tags to a post, only one can show up in the permalink: the lowest numbered category. This applies if your custom structure includes %category% or %tag%.') . '

    ' . + '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    ', +) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'custom-structures', + 'title' => __('Custom Structures'), + 'content' => '

    ' . __('The Optional fields let you customize the “category” and “tag” base names that will appear in archive URLs. For example, the page listing all posts in the “Uncategorized” category could be /topics/uncategorized instead of /category/uncategorized.') . '

    ' . + '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    ', +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Permalinks Settings') . '

    ' . + '

    ' . __('Documentation on Using Permalinks') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +/** + * Display JavaScript on the page. + * + * @since 3.5.0 + */ +function options_permalink_add_js() { + ?> + +set_permalink_structure( $permalink_structure ); + } + + if ( isset( $_POST['category_base'] ) ) { + $category_base = $_POST['category_base']; + if ( ! empty( $category_base ) ) + $category_base = $blog_prefix . preg_replace('#/+#', '/', '/' . str_replace( '#', '', $category_base ) ); + $wp_rewrite->set_category_base( $category_base ); + } + + if ( isset( $_POST['tag_base'] ) ) { + $tag_base = $_POST['tag_base']; + if ( ! empty( $tag_base ) ) + $tag_base = $blog_prefix . preg_replace('#/+#', '/', '/' . str_replace( '#', '', $tag_base ) ); + $wp_rewrite->set_tag_base( $tag_base ); + } + + wp_redirect( admin_url( 'options-permalink.php?settings-updated=true' ) ); + exit; +} + +$permalink_structure = get_option('permalink_structure'); +$category_base = get_option('category_base'); +$tag_base = get_option( 'tag_base' ); + +if ( $iis7_permalinks ) { + if ( ( ! file_exists($home_path . 'web.config') && win_is_writable($home_path) ) || win_is_writable($home_path . 'web.config') ) + $writable = true; + else + $writable = false; +} elseif ( $is_nginx ) { + $writable = false; +} else { + if ( ( ! file_exists($home_path . '.htaccess') && is_writable($home_path) ) || is_writable($home_path . '.htaccess') ) + $writable = true; + else + $writable = false; +} + +if ( $wp_rewrite->using_index_permalinks() ) + $usingpi = true; +else + $usingpi = false; + +flush_rewrite_rules(); + +require( ABSPATH . 'wp-admin/admin-header.php' ); + +if ( ! empty( $_GET['settings-updated'] ) ) : ?> +

    +

    + + +
    +

    + +
    + + +

    URLs which have question marks and lots of numbers in them; however, WordPress offers you the ability to create a custom URL structure for your permalinks and archives. This can improve the aesthetics, usability, and forward-compatibility of your links. A number of tags are available, and here are some examples to get you started.'); ?>

    + + '', + 1 => $prefix . '/%year%/%monthnum%/%day%/%postname%/', + 2 => $prefix . '/%year%/%monthnum%/%postname%/', + 3 => $prefix . '/' . _x( 'archives', 'sample permalink base' ) . '/%post_id%', + 4 => $prefix . '/%postname%/', +); +?> +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + +

    URLs here. For example, using topics as your category base would make your category links like http://example.org/%stopics/uncategorized/. If you leave these blank the defaults will be used.'), $suffix ); ?>

    + + + + + + + + + + + +
    + + + + +
    + + +

    web.config file were writable, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your web.config file. Click in the field and press CTRL + a to select all. Then insert this rule inside of the /<configuration>/<system.webServer>/<rewrite>/<rules> element in web.config file.') ?>

    +
    + +

    +
    +

    web.config file writable for us to generate rewrite rules automatically, do not forget to revert the permissions after rule has been saved.') ?>

    + +

    writable, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your web.config file. Create a new file, called web.config in the root directory of your site. Click in the field and press CTRL + a to select all. Then insert this code into the web.config file.') ?>

    +
    + +

    +
    +

    web.config file automatically, do not forget to revert the permissions after the file has been created.') ?>

    + + + +

    .htaccess file were writable, we could do this automatically, but it isn’t so these are the mod_rewrite rules you should have in your .htaccess file. Click in the field and press CTRL + a to select all.') ?>

    +
    + +

    +
    + + + + +
    + + diff --git a/src/wp-admin/options-reading.php b/src/wp-admin/options-reading.php new file mode 100644 index 0000000..a09d6ed --- /dev/null +++ b/src/wp-admin/options-reading.php @@ -0,0 +1,184 @@ + + +'; + echo '

    ' . __( 'The character encoding of your site (UTF-8 is recommended)' ) . '

    '; +} + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

    ' . __('This screen contains the settings that affect the display of your content.') . '

    ' . + '

    ' . sprintf(__('You can choose what’s displayed on the front page of your site. It can be posts in reverse chronological order (classic blog), or a fixed/static page. To set a static home page, you first need to create two Pages. One will become the front page, and the other will be where your posts are displayed.'), 'post-new.php?post_type=page') . '

    ' . + '

    ' . __('You can also control the display of your content in RSS feeds, including the maximum numbers of posts to display and whether to show full text or a summary.') . '

    ' . + '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    ', +) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'site-visibility', + 'title' => has_action( 'blog_privacy_selector' ) ? __( 'Site Visibility' ) : __( 'Search Engine Visibility' ), + 'content' => '

    ' . __( 'You can choose whether or not your site will be crawled by robots, ping services, and spiders. If you want those services to ignore your site, click the checkbox next to “Discourage search engines from indexing this site” and click the Save Changes button at the bottom of the screen. Note that your privacy is not complete; your site is still visible on the web.' ) . '

    ' . + '

    ' . __( 'When this setting is in effect, a reminder is shown in the At a Glance box of the Dashboard that says, “Search Engines Discouraged,” to remind you that your site is not being crawled.' ) . '

    ', +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Reading Settings') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + +
    + 'blog_charset' ) ); +?> + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    +

    +

    +

    +
      +
    • +
    • +
    + +

    Warning: these pages should not be the same!' ); ?>

    + +
    + +
    +


    +

    +
    + + /> +
    + /> + +

    + + + +

    + +
    + + + + +
    +
    + diff --git a/src/wp-admin/options-writing.php b/src/wp-admin/options-writing.php new file mode 100644 index 0000000..d6ba5d3 --- /dev/null +++ b/src/wp-admin/options-writing.php @@ -0,0 +1,194 @@ +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

    ' . __('You can submit content in several different ways; this screen holds the settings for all of them. The top section controls the editor within the dashboard, while the rest control external publishing methods. For more information on any of these methods, use the documentation links.') . '

    ' . + '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    ', +) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'options-press', + 'title' => __('Press This'), + 'content' => '

    ' . __('Press This is a bookmarklet that makes it easy to blog about something you come across on the web. You can use it to just grab a link, or to post an excerpt. Press This will even allow you to choose from images included on the page and use them in your post. Just drag the Press This link on this screen to your bookmarks bar in your browser, and you’ll be on your way to easier content creation. Clicking on it while on another website opens a popup window with all these options.') . '

    ', +) ); + +/** This filter is documented in wp-admin/options.php */ +if ( apply_filters( 'enable_post_by_email_configuration', true ) ) { + get_current_screen()->add_help_tab( array( + 'id' => 'options-postemail', + 'title' => __( 'Post Via Email' ), + 'content' => '

    ' . __( 'Post via email settings allow you to send your WordPress install an email with the content of your post. You must set up a secret e-mail account with POP3 access to use this, and any mail received at this address will be posted, so it’s a good idea to keep this address very secret.' ) . '

    ', + ) ); +} + +/** + * Toggle site update services configuration functionality. + * + * @since 3.0.0 + * + * @param bool True or false, based on whether update services configuration is enabled or not. + */ +if ( apply_filters( 'enable_update_services_configuration', true ) ) { + get_current_screen()->add_help_tab( array( + 'id' => 'options-services', + 'title' => __( 'Update Services' ), + 'content' => '

    ' . __( 'If desired, WordPress will automatically alert various services of your new posts.' ) . '

    ', + ) ); +} + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Writing Settings') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + 0, 'name' => 'default_category', 'orderby' => 'name', 'selected' => get_option('default_category'), 'hierarchical' => true)); +?> +
    + +
    + 0, 'name' => 'default_link_category', 'orderby' => 'name', 'selected' => get_option('default_link_category'), 'hierarchical' => true, 'taxonomy' => 'link_category')); +?> +
    + +

    +

    +

    +

    +

    + + + +

    +

    %s, %s, %s.'), wp_generate_password(8, false), wp_generate_password(8, false), wp_generate_password(8, false)) ?>

    + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    + 0, 'name' => 'default_email_category', 'orderby' => 'name', 'selected' => get_option('default_email_category'), 'hierarchical' => true)); +?> +
    + + + +

    + + + +

    + + + + + +

    Update Services because of your site’s visibility settings.'), 'options-reading.php'); ?>

    + + + + + + + +
    +
    + + diff --git a/src/wp-admin/options.php b/src/wp-admin/options.php new file mode 100644 index 0000000..8b84811 --- /dev/null +++ b/src/wp-admin/options.php @@ -0,0 +1,255 @@ + array( 'blogname', 'blogdescription', 'gmt_offset', 'date_format', 'time_format', 'start_of_week', 'timezone_string' ), + 'discussion' => array( 'default_pingback_flag', 'default_ping_status', 'default_comment_status', 'comments_notify', 'moderation_notify', 'comment_moderation', 'require_name_email', 'comment_whitelist', 'comment_max_links', 'moderation_keys', 'blacklist_keys', 'show_avatars', 'avatar_rating', 'avatar_default', 'close_comments_for_old_posts', 'close_comments_days_old', 'thread_comments', 'thread_comments_depth', 'page_comments', 'comments_per_page', 'default_comments_page', 'comment_order', 'comment_registration' ), + 'media' => array( 'thumbnail_size_w', 'thumbnail_size_h', 'thumbnail_crop', 'medium_size_w', 'medium_size_h', 'large_size_w', 'large_size_h', 'image_default_size', 'image_default_align', 'image_default_link_type' ), + 'reading' => array( 'posts_per_page', 'posts_per_rss', 'rss_use_excerpt', 'show_on_front', 'page_on_front', 'page_for_posts', 'blog_public' ), + 'writing' => array( 'use_smilies', 'default_category', 'default_email_category', 'use_balanceTags', 'default_link_category', 'default_post_format' ) +); +$whitelist_options['misc'] = $whitelist_options['options'] = $whitelist_options['privacy'] = array(); + +$mail_options = array('mailserver_url', 'mailserver_port', 'mailserver_login', 'mailserver_pass'); + +if ( ! in_array( get_option( 'blog_charset' ), array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ) ) ) + $whitelist_options['reading'][] = 'blog_charset'; + +if ( !is_multisite() ) { + if ( !defined( 'WP_SITEURL' ) ) + $whitelist_options['general'][] = 'siteurl'; + if ( !defined( 'WP_HOME' ) ) + $whitelist_options['general'][] = 'home'; + + $whitelist_options['general'][] = 'admin_email'; + $whitelist_options['general'][] = 'users_can_register'; + $whitelist_options['general'][] = 'default_role'; + + $whitelist_options['writing'] = array_merge($whitelist_options['writing'], $mail_options); + $whitelist_options['writing'][] = 'ping_sites'; + + $whitelist_options['media'][] = 'uploads_use_yearmonth_folders'; + + // If upload_url_path and upload_path are both default values, they're locked. + if ( get_option( 'upload_url_path' ) || ( get_option('upload_path') != 'wp-content/uploads' && get_option('upload_path') ) ) { + $whitelist_options['media'][] = 'upload_path'; + $whitelist_options['media'][] = 'upload_url_path'; + } +} else { + $whitelist_options['general'][] = 'new_admin_email'; + $whitelist_options['general'][] = 'WPLANG'; + + /** + * Toggle post-by-email functionality. + * + * @since 3.0.0 + * + * @param bool True or false, based on whether post-by-email configuration is enabled or not. + */ + if ( apply_filters( 'enable_post_by_email_configuration', true ) ) + $whitelist_options['writing'] = array_merge($whitelist_options['writing'], $mail_options); +} + +/** + * Filter the options white list. + * + * @since 2.7.0 + * + * @param array White list options. + */ +$whitelist_options = apply_filters( 'whitelist_options', $whitelist_options ); + +/* + * If $_GET['action'] == 'update' we are saving settings sent from a settings page + */ +if ( 'update' == $action ) { + if ( 'options' == $option_page && !isset( $_POST['option_page'] ) ) { // This is for back compat and will eventually be removed. + $unregistered = true; + check_admin_referer( 'update-options' ); + } else { + $unregistered = false; + check_admin_referer( $option_page . '-options' ); + } + + if ( !isset( $whitelist_options[ $option_page ] ) ) + wp_die( __( 'ERROR: options page not found.' ) ); + + if ( 'options' == $option_page ) { + if ( is_multisite() && ! is_super_admin() ) + wp_die( __( 'You do not have sufficient permissions to modify unregistered settings for this site.' ) ); + $options = explode( ',', wp_unslash( $_POST[ 'page_options' ] ) ); + } else { + $options = $whitelist_options[ $option_page ]; + } + + // Handle custom date/time formats + if ( 'general' == $option_page ) { + if ( !empty($_POST['date_format']) && isset($_POST['date_format_custom']) && '\c\u\s\t\o\m' == wp_unslash( $_POST['date_format'] ) ) + $_POST['date_format'] = $_POST['date_format_custom']; + if ( !empty($_POST['time_format']) && isset($_POST['time_format_custom']) && '\c\u\s\t\o\m' == wp_unslash( $_POST['time_format'] ) ) + $_POST['time_format'] = $_POST['time_format_custom']; + // Map UTC+- timezones to gmt_offsets and set timezone_string to empty. + if ( !empty($_POST['timezone_string']) && preg_match('/^UTC[+-]/', $_POST['timezone_string']) ) { + $_POST['gmt_offset'] = $_POST['timezone_string']; + $_POST['gmt_offset'] = preg_replace('/UTC\+?/', '', $_POST['gmt_offset']); + $_POST['timezone_string'] = ''; + } + } + + if ( $options ) { + foreach ( $options as $option ) { + if ( $unregistered ) + _deprecated_argument( 'options.php', '2.7', sprintf( __( 'The %1$s setting is unregistered. Unregistered settings are deprecated. See http://codex.wordpress.org/Settings_API' ), $option, $option_page ) ); + + $option = trim( $option ); + $value = null; + if ( isset( $_POST[ $option ] ) ) { + $value = $_POST[ $option ]; + if ( ! is_array( $value ) ) + $value = trim( $value ); + $value = wp_unslash( $value ); + } + update_option( $option, $value ); + } + } + + /** + * Handle settings errors and return to options page + */ + // If no settings errors were registered add a general 'updated' message. + if ( !count( get_settings_errors() ) ) + add_settings_error('general', 'settings_updated', __('Settings saved.'), 'updated'); + set_transient('settings_errors', get_settings_errors(), 30); + + /** + * Redirect back to the settings page that was submitted + */ + $goback = add_query_arg( 'settings-updated', 'true', wp_get_referer() ); + wp_redirect( $goback ); + exit; +} + +include( ABSPATH . 'wp-admin/admin-header.php' ); ?> + +
    +

    +
    + + + + +get_results( "SELECT * FROM $wpdb->options ORDER BY option_name" ); + +foreach ( (array) $options as $option ) : + $disabled = false; + if ( $option->option_name == '' ) + continue; + if ( is_serialized( $option->option_value ) ) { + if ( is_serialized_string( $option->option_value ) ) { + // this is a serialized string, so we should display it + $value = maybe_unserialize( $option->option_value ); + $options_to_update[] = $option->option_name; + $class = 'all-options'; + } else { + $value = 'SERIALIZED DATA'; + $disabled = true; + $class = 'all-options disabled'; + } + } else { + $value = $option->option_value; + $options_to_update[] = $option->option_name; + $class = 'all-options'; + } + $name = esc_attr( $option->option_name ); + echo " + + + +"; +endforeach; +?> +
    "; + if ( strpos( $value, "\n" ) !== false ) + echo ""; + else + echo ""; + echo "
    + + + + + +
    +
    + + time() ) + (array) get_option( 'recently_activated' ) ); + + wp_redirect(add_query_arg('_wpnonce', wp_create_nonce('edit-plugin-test_' . $file), "plugin-editor.php?file=$file&liveupdate=1&scrollto=$scrollto&networkwide=" . $network_wide)); + exit; + } + wp_redirect( self_admin_url("plugin-editor.php?file=$file&a=te&scrollto=$scrollto") ); + } else { + wp_redirect( self_admin_url("plugin-editor.php?file=$file&scrollto=$scrollto") ); + } + exit; + +break; + +default: + + if ( isset($_GET['liveupdate']) ) { + check_admin_referer('edit-plugin-test_' . $file); + + $error = validate_plugin($file); + if ( is_wp_error($error) ) + wp_die( $error ); + + if ( ( ! empty( $_GET['networkwide'] ) && ! is_plugin_active_for_network($file) ) || ! is_plugin_active($file) ) + activate_plugin($file, "plugin-editor.php?file=$file&phperror=1", ! empty( $_GET['networkwide'] ) ); // we'll override this later if the plugin can be included without fatal error + + wp_redirect( self_admin_url("plugin-editor.php?file=$file&a=te&scrollto=$scrollto") ); + exit; + } + + // List of allowable extensions + $editable_extensions = array('php', 'txt', 'text', 'js', 'css', 'html', 'htm', 'xml', 'inc', 'include'); + + /** + * Filter file type extensions editable in the plugin editor. + * + * @since 2.8.0 + * + * @param array $editable_extensions An array of editable plugin file extensions. + */ + $editable_extensions = (array) apply_filters( 'editable_extensions', $editable_extensions ); + + if ( ! is_file($real_file) ) { + wp_die(sprintf('

    %s

    ', __('No such file exists! Double check the name and try again.'))); + } else { + // Get the extension of the file + if ( preg_match('/\.([^.]+)$/', $real_file, $matches) ) { + $ext = strtolower($matches[1]); + // If extension is not in the acceptable list, skip it + if ( !in_array( $ext, $editable_extensions) ) + wp_die(sprintf('

    %s

    ', __('Files of this type are not editable.'))); + } + } + + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __('You can use the editor to make changes to any of your plugins’ individual PHP files. Be aware that if you make changes, plugins updates will overwrite your customizations.') . '

    ' . + '

    ' . __('Choose a plugin to edit from the menu in the upper right and click the Select button. Click once on any file name to load it in the editor, and make your changes. Don’t forget to save your changes (Update File) when you’re finished.') . '

    ' . + '

    ' . __('The Documentation menu below the editor lists the PHP functions recognized in the plugin file. Clicking Look Up takes you to a web page about that particular function.') . '

    ' . + '

    ' . __('In the editing area the Tab key enters a tab character. To move below this area by pressing Tab, press the Esc key followed by the Tab key.') . '

    ' . + '

    ' . __('If you want to make changes but don’t want them to be overwritten when the plugin is updated, you may be ready to think about writing your own plugin. For information on how to edit plugins, write your own from scratch, or just better understand their anatomy, check out the links below.') . '

    ' . + ( is_network_admin() ? '

    ' . __('Any edits to files from this screen will be reflected on all sites in the network.') . '

    ' : '' ) + ) ); + + get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Editing Plugins') . '

    ' . + '

    ' . __('Documentation on Writing Plugins') . '

    ' . + '

    ' . __('Support Forums') . '

    ' + ); + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + update_recently_edited(WP_PLUGIN_DIR . '/' . $file); + + $content = file_get_contents( $real_file ); + + if ( '.php' == substr( $real_file, strrpos( $real_file, '.' ) ) ) { + $functions = wp_doc_link_parse( $content ); + + if ( !empty($functions) ) { + $docs_select = ''; + } + } + + $content = esc_textarea( $content ); + ?> + +

    + +

    fatal error.') ?>

    + + + +
    + +
    +

    + +
    +
    +%s (active)'), $file); + else + echo sprintf(__('Browsing %s (active)'), $file); + } else { + if ( is_writeable($real_file) ) + echo sprintf(__('Editing %s (inactive)'), $file); + else + echo sprintf(__('Browsing %s (inactive)'), $file); + } + ?> +
    +
    +
    + + + +
    +
    +
    +
    + +
    +

    + +
      + + > + +
    +
    +
    + +
    + + + + +
    + +
    + + + +

    Warning: Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated.'); ?>

    + +

    + "; + submit_button( __( 'Update File and Attempt to Reactivate' ), 'primary', 'submit', false ); + } else { + submit_button( __( 'Update File' ), 'primary', 'submit', false ); + } + ?> +

    + +

    the Codex for more information.'); ?>

    + +
    +
    +
    + +get_pagenum(); +$wp_list_table->prepare_items(); + +$title = __('Install Plugins'); +$parent_file = 'plugins.php'; + +wp_enqueue_script( 'plugin-install' ); +if ( 'plugin-information' != $tab ) + add_thickbox(); + +$body_id = $tab; + +/** + * Fires before each tab on the Install Plugins screen is loaded. + * + * The dynamic portion of the action hook, $tab, allows for targeting + * individual tabs, for instance 'install_plugins_pre_plugin-information'. + * + * @since 2.7.0 + */ +do_action( "install_plugins_pre_$tab" ); + +get_current_screen()->add_help_tab( array( +'id' => 'overview', +'title' => __('Overview'), +'content' => + '

    ' . sprintf(__('Plugins hook into WordPress to extend its functionality with custom features. Plugins are developed independently from the core WordPress application by thousands of developers all over the world. All plugins in the official WordPress.org Plugin Directory are compatible with the license WordPress uses. You can find new plugins to install by searching or browsing the Directory right here in your own Plugins section.'), 'http://wordpress.org/plugins/') . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'adding-plugins', +'title' => __('Adding Plugins'), +'content' => + '

    ' . __('If you know what you’re looking for, Search is your best bet. The Search screen has options to search the WordPress.org Plugin Directory for a particular Term, Author, or Tag. You can also search the directory by selecting popular tags. Tags in larger type mean more plugins have been labeled with that tag.') . '

    ' . + '

    ' . __('If you just want to get an idea of what’s available, you can browse Featured, Popular, and Newest plugins by using the links in the upper left of the screen. These sections rotate regularly.') . '

    ' . + '

    ' . __('You can also browse a user’s favorite plugins, by using the Favorites link in the upper left of the screen and entering their WordPress.org username.') . '

    ' . + '

    ' . __('If you want to install a plugin that you’ve downloaded elsewhere, click the Upload link in the upper left. You will be prompted to upload the .zip package, and once uploaded, you can activate the new plugin.') . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Installing Plugins') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +/** + * WordPress Administration Template Header. + */ +include(ABSPATH . 'wp-admin/admin-header.php'); +?> +
    +

    + +views(); ?> + +
    + + +
    +get_pagenum(); + +$action = $wp_list_table->current_action(); + +$plugin = isset($_REQUEST['plugin']) ? $_REQUEST['plugin'] : ''; +$s = isset($_REQUEST['s']) ? urlencode($_REQUEST['s']) : ''; + +// Clean up request URI from temporary args for screen options/paging uri's to work as expected. +$_SERVER['REQUEST_URI'] = remove_query_arg(array('error', 'deleted', 'activate', 'activate-multi', 'deactivate', 'deactivate-multi', '_error_nonce'), $_SERVER['REQUEST_URI']); + +if ( $action ) { + + switch ( $action ) { + case 'activate': + if ( ! current_user_can('activate_plugins') ) + wp_die(__('You do not have sufficient permissions to activate plugins for this site.')); + + if ( is_multisite() && ! is_network_admin() && is_network_only_plugin( $plugin ) ) { + wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") ); + exit; + } + + check_admin_referer('activate-plugin_' . $plugin); + + $result = activate_plugin($plugin, self_admin_url('plugins.php?error=true&plugin=' . $plugin), is_network_admin() ); + if ( is_wp_error( $result ) ) { + if ( 'unexpected_output' == $result->get_error_code() ) { + $redirect = self_admin_url('plugins.php?error=true&charsout=' . strlen($result->get_error_data()) . '&plugin=' . $plugin . "&plugin_status=$status&paged=$page&s=$s"); + wp_redirect(add_query_arg('_error_nonce', wp_create_nonce('plugin-activation-error_' . $plugin), $redirect)); + exit; + } else { + wp_die($result); + } + } + + if ( ! is_network_admin() ) { + $recent = (array) get_option( 'recently_activated' ); + unset( $recent[ $plugin ] ); + update_option( 'recently_activated', $recent ); + } + + if ( isset($_GET['from']) && 'import' == $_GET['from'] ) { + wp_redirect( self_admin_url("import.php?import=" . str_replace('-importer', '', dirname($plugin))) ); // overrides the ?error=true one above and redirects to the Imports page, stripping the -importer suffix + } else { + wp_redirect( self_admin_url("plugins.php?activate=true&plugin_status=$status&paged=$page&s=$s") ); // overrides the ?error=true one above + } + exit; + break; + case 'activate-selected': + if ( ! current_user_can('activate_plugins') ) + wp_die(__('You do not have sufficient permissions to activate plugins for this site.')); + + check_admin_referer('bulk-plugins'); + + $plugins = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array(); + + // Only activate plugins which are not already active. + if ( is_network_admin() ) { + foreach ( $plugins as $i => $plugin ) { + if ( is_plugin_active_for_network( $plugin ) ) + unset( $plugins[ $i ] ); + } + } else { + foreach ( $plugins as $i => $plugin ) { + if ( is_plugin_active( $plugin ) || is_network_only_plugin( $plugin ) ) + unset( $plugins[ $i ] ); + } + } + + if ( empty($plugins) ) { + wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") ); + exit; + } + + activate_plugins($plugins, self_admin_url('plugins.php?error=true'), is_network_admin() ); + + if ( ! is_network_admin() ) { + $recent = (array) get_option('recently_activated' ); + foreach ( $plugins as $plugin ) + unset( $recent[ $plugin ] ); + update_option( 'recently_activated', $recent ); + } + + wp_redirect( self_admin_url("plugins.php?activate-multi=true&plugin_status=$status&paged=$page&s=$s") ); + exit; + break; + case 'update-selected' : + + check_admin_referer( 'bulk-plugins' ); + + if ( isset( $_GET['plugins'] ) ) + $plugins = explode( ',', $_GET['plugins'] ); + elseif ( isset( $_POST['checked'] ) ) + $plugins = (array) $_POST['checked']; + else + $plugins = array(); + + $title = __( 'Update Plugins' ); + $parent_file = 'plugins.php'; + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + echo '
    '; + echo '

    ' . esc_html( $title ) . '

    '; + + $url = self_admin_url('update.php?action=update-selected&plugins=' . urlencode( join(',', $plugins) )); + $url = wp_nonce_url($url, 'bulk-update-plugins'); + + echo ""; + echo '
    '; + require_once(ABSPATH . 'wp-admin/admin-footer.php'); + exit; + break; + case 'error_scrape': + if ( ! current_user_can('activate_plugins') ) + wp_die(__('You do not have sufficient permissions to activate plugins for this site.')); + + check_admin_referer('plugin-activation-error_' . $plugin); + + $valid = validate_plugin($plugin); + if ( is_wp_error($valid) ) + wp_die($valid); + + if ( ! WP_DEBUG ) { + error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR ); + } + + @ini_set('display_errors', true); //Ensure that Fatal errors are displayed. + // Go back to "sandbox" scope so we get the same errors as before + function plugin_sandbox_scrape( $plugin ) { + include( WP_PLUGIN_DIR . '/' . $plugin ); + } + plugin_sandbox_scrape( $plugin ); + /** This action is documented in wp-admin/includes/plugins.php */ + do_action( "activate_{$plugin}" ); + exit; + break; + case 'deactivate': + if ( ! current_user_can('activate_plugins') ) + wp_die(__('You do not have sufficient permissions to deactivate plugins for this site.')); + + check_admin_referer('deactivate-plugin_' . $plugin); + + if ( ! is_network_admin() && is_plugin_active_for_network( $plugin ) ) { + wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") ); + exit; + } + + deactivate_plugins( $plugin, false, is_network_admin() ); + if ( ! is_network_admin() ) + update_option( 'recently_activated', array( $plugin => time() ) + (array) get_option( 'recently_activated' ) ); + if ( headers_sent() ) + echo ""; + else + wp_redirect( self_admin_url("plugins.php?deactivate=true&plugin_status=$status&paged=$page&s=$s") ); + exit; + break; + case 'deactivate-selected': + if ( ! current_user_can('activate_plugins') ) + wp_die(__('You do not have sufficient permissions to deactivate plugins for this site.')); + + check_admin_referer('bulk-plugins'); + + $plugins = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array(); + // Do not deactivate plugins which are already deactivated. + if ( is_network_admin() ) { + $plugins = array_filter( $plugins, 'is_plugin_active_for_network' ); + } else { + $plugins = array_filter( $plugins, 'is_plugin_active' ); + $plugins = array_diff( $plugins, array_filter( $plugins, 'is_plugin_active_for_network' ) ); + } + if ( empty($plugins) ) { + wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") ); + exit; + } + + deactivate_plugins( $plugins, false, is_network_admin() ); + + if ( ! is_network_admin() ) { + $deactivated = array(); + foreach ( $plugins as $plugin ) + $deactivated[ $plugin ] = time(); + update_option( 'recently_activated', $deactivated + (array) get_option( 'recently_activated' ) ); + } + + wp_redirect( self_admin_url("plugins.php?deactivate-multi=true&plugin_status=$status&paged=$page&s=$s") ); + exit; + break; + case 'delete-selected': + if ( ! current_user_can('delete_plugins') ) + wp_die(__('You do not have sufficient permissions to delete plugins for this site.')); + + check_admin_referer('bulk-plugins'); + + //$_POST = from the plugin form; $_GET = from the FTP details screen. + $plugins = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array(); + if ( empty( $plugins ) ) { + wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") ); + exit; + } + + $plugins = array_filter($plugins, 'is_plugin_inactive'); // Do not allow to delete Activated plugins. + if ( empty( $plugins ) ) { + wp_redirect( self_admin_url( "plugins.php?error=true&main=true&plugin_status=$status&paged=$page&s=$s" ) ); + exit; + } + + include(ABSPATH . 'wp-admin/update.php'); + + $parent_file = 'plugins.php'; + + if ( ! isset($_REQUEST['verify-delete']) ) { + wp_enqueue_script('jquery'); + require_once(ABSPATH . 'wp-admin/admin-header.php'); + ?> +
    + $data ) { + $plugin_info[ $plugin_file ] = _get_plugin_data_markup_translate( $plugin_file, $data ); + $plugin_info[ $plugin_file ]['is_uninstallable'] = is_uninstallable_plugin( $plugin ); + if ( ! $plugin_info[ $plugin_file ]['Network'] ) + $have_non_network_plugins = true; + } + } + } + } + $plugins_to_delete = count( $plugin_info ); + echo '

    ' . _n( 'Delete Plugin', 'Delete Plugins', $plugins_to_delete ) . '

    '; + ?> + +

    + +

    +
      + ', sprintf( __( '%1$s by %2$s (will also delete its data)' ), esc_html($plugin['Name']), esc_html($plugin['AuthorName']) ), ''; + $data_to_delete = true; + } else { + /* translators: 1: plugin name, 2: plugin author */ + echo '
    • ', sprintf( __('%1$s by %2$s' ), esc_html($plugin['Name']), esc_html($plugin['AuthorName']) ), '
    • '; + } + } + ?> +
    +

    +
    + + + '; + ?> + + +
    +
    + +
    + +

    + +
    + prepare_items(); + +wp_enqueue_script('plugin-install'); +add_thickbox(); + +add_screen_option( 'per_page', array('label' => _x( 'Plugins', 'plugins per page (screen options)' ), 'default' => 999 ) ); + +get_current_screen()->add_help_tab( array( +'id' => 'overview', +'title' => __('Overview'), +'content' => + '

    ' . __('Plugins extend and expand the functionality of WordPress. Once a plugin is installed, you may activate it or deactivate it here.') . '

    ' . + '

    ' . sprintf(__('You can find additional plugins for your site by using the Plugin Browser/Installer functionality or by browsing the WordPress Plugin Directory directly and installing new plugins manually. To manually install a plugin you generally just need to upload the plugin file into your /wp-content/plugins directory. Once a plugin has been installed, you can activate it here.'), 'plugin-install.php', 'http://wordpress.org/plugins/') . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'compatibility-problems', +'title' => __('Troubleshooting'), +'content' => + '

    ' . __('Most of the time, plugins play nicely with the core of WordPress and with other plugins. Sometimes, though, a plugin’s code will get in the way of another plugin, causing compatibility issues. If your site starts doing strange things, this may be the problem. Try deactivating all your plugins and re-activating them in various combinations until you isolate which one(s) caused the issue.') . '

    ' . + '

    ' . sprintf( __('If something goes wrong with a plugin and you can’t use WordPress, delete or rename that file in the %s directory and it will be automatically deactivated.'), WP_PLUGIN_DIR) . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Managing Plugins') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +$title = __('Plugins'); +$parent_file = 'plugins.php'; + +require_once(ABSPATH . 'wp-admin/admin-header.php'); + +$invalid = validate_active_plugins(); +if ( !empty($invalid) ) + foreach ( $invalid as $plugin_file => $error ) + echo '

    ' . sprintf(__('The plugin %s has been deactivated due to an error: %s'), esc_html($plugin_file), $error->get_error_message()) . '

    '; +?> + +unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.'), $_GET['charsout']); + else + $errmsg = __('Plugin could not be activated because it triggered a fatal error.'); + ?> +

    + + + +
    + +

    get_error_message() ); ?>

    + +

    deleted.'); ?>

    + + +

    activated.') ?>

    + +

    activated.'); ?>

    + +

    deactivated.') ?>

    + +

    deactivated.'); ?>

    + +

    + + +
    +

    + +' . __('Search results for “%s”') . '', esc_html( $s ) ); ?> +

    + + + +views(); ?> + +
    +search_box( __( 'Search Installed Plugins' ), 'plugin' ); ?> +
    + +
    + + + + +display(); ?> +
    + +
    + + true ) ) ) ) + $post_type = $_GET['post_type']; +else + wp_die( __('Invalid post type') ); + +$post_type_object = get_post_type_object( $post_type ); + +if ( 'post' == $post_type ) { + $parent_file = 'edit.php'; + $submenu_file = 'post-new.php'; +} elseif ( 'attachment' == $post_type ) { + if ( wp_redirect( admin_url( 'media-new.php' ) ) ) + exit; +} else { + $submenu_file = "post-new.php?post_type=$post_type"; + if ( isset( $post_type_object ) && $post_type_object->show_in_menu && $post_type_object->show_in_menu !== true ) { + $parent_file = $post_type_object->show_in_menu; + if ( ! isset( $_registered_pages[ get_plugin_page_hookname( "post-new.php?post_type=$post_type", $post_type_object->show_in_menu ) ] ) ) + $submenu_file = $parent_file; + } else { + $parent_file = "edit.php?post_type=$post_type"; + } +} + +$title = $post_type_object->labels->add_new_item; + +$editing = true; + +if ( ! current_user_can( $post_type_object->cap->edit_posts ) || ! current_user_can( $post_type_object->cap->create_posts ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + +// Schedule auto-draft cleanup +if ( ! wp_next_scheduled( 'wp_scheduled_auto_draft_delete' ) ) + wp_schedule_event( time(), 'daily', 'wp_scheduled_auto_draft_delete' ); + +wp_enqueue_script( 'autosave' ); + +if ( is_multisite() ) { + add_action( 'admin_footer', '_admin_notice_post_locked' ); +} else { + $check_users = get_users( array( 'fields' => 'ID', 'number' => 2 ) ); + + if ( count( $check_users ) > 1 ) + add_action( 'admin_footer', '_admin_notice_post_locked' ); + + unset( $check_users ); +} + +// Show post form. +$post = get_default_post_to_edit( $post_type, true ); +$post_ID = $post->ID; +include( ABSPATH . 'wp-admin/edit-form-advanced.php' ); +include( ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/src/wp-admin/post.php b/src/wp-admin/post.php new file mode 100644 index 0000000..a4f5cc7 --- /dev/null +++ b/src/wp-admin/post.php @@ -0,0 +1,323 @@ +post_type; + $post_type_object = get_post_type_object( $post_type ); +} + +/** + * Redirect to previous page. + * + * @param int $post_id Optional. Post ID. + */ +function redirect_post($post_id = '') { + if ( isset($_POST['save']) || isset($_POST['publish']) ) { + $status = get_post_status( $post_id ); + + if ( isset( $_POST['publish'] ) ) { + switch ( $status ) { + case 'pending': + $message = 8; + break; + case 'future': + $message = 9; + break; + default: + $message = 6; + } + } else { + $message = 'draft' == $status ? 10 : 1; + } + + $location = add_query_arg( 'message', $message, get_edit_post_link( $post_id, 'url' ) ); + } elseif ( isset($_POST['addmeta']) && $_POST['addmeta'] ) { + $location = add_query_arg( 'message', 2, wp_get_referer() ); + $location = explode('#', $location); + $location = $location[0] . '#postcustom'; + } elseif ( isset($_POST['deletemeta']) && $_POST['deletemeta'] ) { + $location = add_query_arg( 'message', 3, wp_get_referer() ); + $location = explode('#', $location); + $location = $location[0] . '#postcustom'; + } else { + $location = add_query_arg( 'message', 4, get_edit_post_link( $post_id, 'url' ) ); + } + + /** + * Filter the post redirect destination URL. + * + * @since 2.9.0 + * + * @param string $location The destination URL. + * @param int $post_id The post ID. + */ + wp_redirect( apply_filters( 'redirect_post_location', $location, $post_id ) ); + exit; +} + +if ( isset( $_POST['deletepost'] ) ) + $action = 'delete'; +elseif ( isset($_POST['wp-preview']) && 'dopreview' == $_POST['wp-preview'] ) + $action = 'preview'; + +$sendback = wp_get_referer(); +if ( ! $sendback || + strpos( $sendback, 'post.php' ) !== false || + strpos( $sendback, 'post-new.php' ) !== false ) { + if ( 'attachment' == $post_type ) { + $sendback = admin_url( 'upload.php' ); + } else { + $sendback = admin_url( 'edit.php' ); + $sendback .= ( ! empty( $post_type ) ) ? '?post_type=' . $post_type : ''; + } +} else { + $sendback = remove_query_arg( array('trashed', 'untrashed', 'deleted', 'ids'), $sendback ); +} + +switch($action) { +case 'post-quickdraft-save': + // Check nonce and capabilities + $nonce = $_REQUEST['_wpnonce']; + $error_msg = false; + if ( ! wp_verify_nonce( $nonce, 'add-post' ) ) + $error_msg = __( 'Unable to submit this form, please refresh and try again.' ); + + if ( ! current_user_can( 'edit_posts' ) ) + $error_msg = __( 'Oops, you don’t have access to add new drafts.' ); + + if ( $error_msg ) + return wp_dashboard_quick_press( $error_msg ); + + $post = get_post( $_REQUEST['post_ID'] ); + check_admin_referer( 'add-' . $post->post_type ); + + $_POST['comment_status'] = get_option( 'default_comment_status' ); + $_POST['ping_status'] = get_option( 'default_ping_status' ); + + edit_post(); + // output the quickdraft dashboard widget + require_once(ABSPATH . 'wp-admin/includes/dashboard.php'); + wp_dashboard_quick_press(); + exit; + break; + +case 'postajaxpost': +case 'post': + check_admin_referer( 'add-' . $post_type ); + $post_id = 'postajaxpost' == $action ? edit_post() : write_post(); + redirect_post( $post_id ); + exit(); + break; + +case 'edit': + $editing = true; + + if ( empty( $post_id ) ) { + wp_redirect( admin_url('post.php') ); + exit(); + } + + if ( ! $post ) + wp_die( __( 'You attempted to edit an item that doesn’t exist. Perhaps it was deleted?' ) ); + + if ( ! $post_type_object ) + wp_die( __( 'Unknown post type.' ) ); + + if ( ! current_user_can( 'edit_post', $post_id ) ) + wp_die( __( 'You are not allowed to edit this item.' ) ); + + if ( 'trash' == $post->post_status ) + wp_die( __( 'You can’t edit this item because it is in the Trash. Please restore it and try again.' ) ); + + if ( ! empty( $_GET['get-post-lock'] ) ) { + wp_set_post_lock( $post_id ); + wp_redirect( get_edit_post_link( $post_id, 'url' ) ); + exit(); + } + + $post_type = $post->post_type; + if ( 'post' == $post_type ) { + $parent_file = "edit.php"; + $submenu_file = "edit.php"; + $post_new_file = "post-new.php"; + } elseif ( 'attachment' == $post_type ) { + $parent_file = 'upload.php'; + $submenu_file = 'upload.php'; + $post_new_file = 'media-new.php'; + } else { + if ( isset( $post_type_object ) && $post_type_object->show_in_menu && $post_type_object->show_in_menu !== true ) + $parent_file = $post_type_object->show_in_menu; + else + $parent_file = "edit.php?post_type=$post_type"; + $submenu_file = "edit.php?post_type=$post_type"; + $post_new_file = "post-new.php?post_type=$post_type"; + } + + if ( ! wp_check_post_lock( $post->ID ) ) { + $active_post_lock = wp_set_post_lock( $post->ID ); + + if ( 'attachment' !== $post_type ) + wp_enqueue_script('autosave'); + } + + if ( is_multisite() ) { + add_action( 'admin_footer', '_admin_notice_post_locked' ); + } else { + $check_users = get_users( array( 'fields' => 'ID', 'number' => 2 ) ); + + if ( count( $check_users ) > 1 ) + add_action( 'admin_footer', '_admin_notice_post_locked' ); + + unset( $check_users ); + } + + $title = $post_type_object->labels->edit_item; + $post = get_post($post_id, OBJECT, 'edit'); + + if ( post_type_supports($post_type, 'comments') ) { + wp_enqueue_script('admin-comments'); + enqueue_comment_hotkeys_js(); + } + + include( ABSPATH . 'wp-admin/edit-form-advanced.php' ); + + break; + +case 'editattachment': + check_admin_referer('update-post_' . $post_id); + + // Don't let these be changed + unset($_POST['guid']); + $_POST['post_type'] = 'attachment'; + + // Update the thumbnail filename + $newmeta = wp_get_attachment_metadata( $post_id, true ); + $newmeta['thumb'] = $_POST['thumb']; + + wp_update_attachment_metadata( $post_id, $newmeta ); + +case 'editpost': + check_admin_referer('update-post_' . $post_id); + + $post_id = edit_post(); + + // Session cookie flag that the post was saved + if ( isset( $_COOKIE['wp-saving-post-' . $post_id] ) ) + setcookie( 'wp-saving-post-' . $post_id, 'saved' ); + + redirect_post($post_id); // Send user on their way while we keep working + + exit(); + break; + +case 'trash': + check_admin_referer('trash-post_' . $post_id); + + if ( ! $post ) + wp_die( __( 'The item you are trying to move to the Trash no longer exists.' ) ); + + if ( ! $post_type_object ) + wp_die( __( 'Unknown post type.' ) ); + + if ( ! current_user_can( 'delete_post', $post_id ) ) + wp_die( __( 'You are not allowed to move this item to the Trash.' ) ); + + if ( $user_id = wp_check_post_lock( $post_id ) ) { + $user = get_userdata( $user_id ); + wp_die( sprintf( __( 'You cannot move this item to the Trash. %s is currently editing.' ), $user->display_name ) ); + } + + if ( ! wp_trash_post( $post_id ) ) + wp_die( __( 'Error in moving to Trash.' ) ); + + wp_redirect( add_query_arg( array('trashed' => 1, 'ids' => $post_id), $sendback ) ); + exit(); + break; + +case 'untrash': + check_admin_referer('untrash-post_' . $post_id); + + if ( ! $post ) + wp_die( __( 'The item you are trying to restore from the Trash no longer exists.' ) ); + + if ( ! $post_type_object ) + wp_die( __( 'Unknown post type.' ) ); + + if ( ! current_user_can( 'delete_post', $post_id ) ) + wp_die( __( 'You are not allowed to move this item out of the Trash.' ) ); + + if ( ! wp_untrash_post( $post_id ) ) + wp_die( __( 'Error in restoring from Trash.' ) ); + + wp_redirect( add_query_arg('untrashed', 1, $sendback) ); + exit(); + break; + +case 'delete': + check_admin_referer('delete-post_' . $post_id); + + if ( ! $post ) + wp_die( __( 'This item has already been deleted.' ) ); + + if ( ! $post_type_object ) + wp_die( __( 'Unknown post type.' ) ); + + if ( ! current_user_can( 'delete_post', $post_id ) ) + wp_die( __( 'You are not allowed to delete this item.' ) ); + + $force = ! EMPTY_TRASH_DAYS; + if ( $post->post_type == 'attachment' ) { + $force = ( $force || ! MEDIA_TRASH ); + if ( ! wp_delete_attachment( $post_id, $force ) ) + wp_die( __( 'Error in deleting.' ) ); + } else { + if ( ! wp_delete_post( $post_id, $force ) ) + wp_die( __( 'Error in deleting.' ) ); + } + + wp_redirect( add_query_arg('deleted', 1, $sendback) ); + exit(); + break; + +case 'preview': + check_admin_referer( 'autosave', 'autosavenonce' ); + + $url = post_preview(); + + wp_redirect($url); + exit(); + break; + +default: + wp_redirect( admin_url('edit.php') ); + exit(); + break; +} // end switch +include( ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/src/wp-admin/press-this.php b/src/wp-admin/press-this.php new file mode 100644 index 0000000..58394c8 --- /dev/null +++ b/src/wp-admin/press-this.php @@ -0,0 +1,677 @@ +cap->create_posts ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + +/** + * Press It form handler. + * + * @package WordPress + * @subpackage Press_This + * @since 2.6.0 + * + * @return int Post ID + */ +function press_it() { + + $post = get_default_post_to_edit(); + $post = get_object_vars($post); + $post_ID = $post['ID'] = (int) $_POST['post_id']; + + if ( !current_user_can('edit_post', $post_ID) ) + wp_die(__('You are not allowed to edit this post.')); + + $post['post_category'] = isset($_POST['post_category']) ? $_POST['post_category'] : ''; + $post['tax_input'] = isset($_POST['tax_input']) ? $_POST['tax_input'] : ''; + $post['post_title'] = isset($_POST['title']) ? $_POST['title'] : ''; + $content = isset($_POST['content']) ? $_POST['content'] : ''; + + $upload = false; + if ( !empty($_POST['photo_src']) && current_user_can('upload_files') ) { + foreach( (array) $_POST['photo_src'] as $key => $image) { + // see if files exist in content - we don't want to upload non-used selected files. + if ( strpos($_POST['content'], htmlspecialchars($image)) !== false ) { + $desc = isset($_POST['photo_description'][$key]) ? $_POST['photo_description'][$key] : ''; + $upload = media_sideload_image($image, $post_ID, $desc); + + // Replace the POSTED content with correct uploaded ones. Regex contains fix for Magic Quotes + if ( !is_wp_error($upload) ) + $content = preg_replace('/]*)src=\\\?(\"|\')'.preg_quote(htmlspecialchars($image), '/').'\\\?(\2)([^>\/]*)\/*>/is', $upload, $content); + } + } + } + // set the post_content and status + $post['post_content'] = $content; + if ( isset( $_POST['publish'] ) && current_user_can( 'publish_posts' ) ) + $post['post_status'] = 'publish'; + elseif ( isset( $_POST['review'] ) ) + $post['post_status'] = 'pending'; + else + $post['post_status'] = 'draft'; + + // error handling for media_sideload + if ( is_wp_error($upload) ) { + wp_delete_post($post_ID); + wp_die($upload); + } else { + // Post formats + if ( isset( $_POST['post_format'] ) ) { + if ( current_theme_supports( 'post-formats', $_POST['post_format'] ) ) + set_post_format( $post_ID, $_POST['post_format'] ); + elseif ( '0' == $_POST['post_format'] ) + set_post_format( $post_ID, false ); + } + + $post_ID = wp_update_post($post); + } + + return $post_ID; +} + +// For submitted posts. +if ( isset($_REQUEST['action']) && 'post' == $_REQUEST['action'] ) { + check_admin_referer('press-this'); + $posted = $post_ID = press_it(); +} else { + $post = get_default_post_to_edit('post', true); + $post_ID = $post->ID; +} + +// Set Variables +$title = isset( $_GET['t'] ) ? trim( strip_tags( html_entity_decode( wp_unslash( $_GET['t'] ) , ENT_QUOTES) ) ) : ''; + +$selection = ''; +if ( !empty($_GET['s']) ) { + $selection = str_replace(''', "'", wp_unslash($_GET['s'])); + $selection = trim( htmlspecialchars( html_entity_decode($selection, ENT_QUOTES) ) ); +} + +if ( ! empty($selection) ) { + $selection = preg_replace('/(\r?\n|\r)/', '

    ', $selection); + $selection = '

    ' . str_replace('

    ', '', $selection) . '

    '; +} + +$url = isset($_GET['u']) ? esc_url($_GET['u']) : ''; +$image = isset($_GET['i']) ? $_GET['i'] : ''; + +if ( !empty($_REQUEST['ajax']) ) { + switch ($_REQUEST['ajax']) { + case 'video': ?> + +
    +

    +
    + +

    +
    +
    + + +

    +
    +
    + +
    +
    + +

    + + + <?php echo esc_attr(__('Click to insert.')); ?> + +

    + +

    + ]*)src=(\"|\')([^<>\'\"]+)(\2)([^>]*)\/*>/i'; + $content = str_replace(array("\n","\t","\r"), '', $content); + preg_match_all($pattern, $content, $matches); + if ( empty($matches[0]) ) + return ''; + $sources = array(); + foreach ($matches[3] as $src) { + // if no http in url + if (strpos($src, 'http') === false) + // if it doesn't have a relative uri + if ( strpos($src, '../') === false && strpos($src, './') === false && strpos($src, '/') === 0) + $src = 'http://'.str_replace('//','/', $host['host'].'/'.$src); + else + $src = 'http://'.str_replace('//','/', $host['host'].'/'.dirname($host['path']).'/'.$src); + $sources[] = esc_url($src); + } + return "'" . implode("','", $sources) . "'"; + } + $url = wp_kses(urldecode($url), null); + echo 'new Array('.get_images_from_uri($url).')'; + break; + + case 'photo_js': ?> + // gather images and load some default JS + var last = null + var img, img_tag, aspect, w, h, skip, i, strtoappend = ""; + if(photostorage == false) { + var my_src = eval( + jQuery.ajax({ + type: "GET", + url: "", + cache : false, + async : false, + data: "ajax=photo_images&u=", + dataType : "script" + }).responseText + ); + if(my_src.length == 0) { + var my_src = eval( + jQuery.ajax({ + type: "GET", + url: "", + cache : false, + async : false, + data: "ajax=photo_images&u=", + dataType : "script" + }).responseText + ); + if(my_src.length == 0) { + strtoappend = ''; + } + } + } + for (i = 0; i < my_src.length; i++) { + img = new Image(); + img.src = my_src[i]; + img_attr = 'id="img' + i + '"'; + skip = false; + + maybeappend = ''; + + if (img.width && img.height) { + if (img.width >= 30 && img.height >= 30) { + aspect = img.width / img.height; + scale = (aspect > 1) ? (71 / img.width) : (71 / img.height); + + w = img.width; + h = img.height; + + if (scale < 1) { + w = parseInt(img.width * scale); + h = parseInt(img.height * scale); + } + img_attr += ' style="width: ' + w + 'px; height: ' + h + 'px;"'; + strtoappend += maybeappend; + } + } else { + strtoappend += maybeappend; + } + } + + function pick(img, desc) { + if (img) { + if('object' == typeof jQuery('.photolist input') && jQuery('.photolist input').length != 0) length = jQuery('.photolist input').length; + if(length == 0) length = 1; + jQuery('.photolist').append(''); + jQuery('.photolist').append(''); + insert_editor( "\n\n" + encodeURI('

    ' + desc + '

    ')); + } + return false; + } + + function image_selector(el) { + var desc, src, parent = jQuery(el).closest('#photo-add-url-div'); + + if ( parent.length ) { + desc = parent.find('input.tb_this_photo_description').val() || ''; + src = parent.find('input.tb_this_photo').val() || '' + } else { + desc = jQuery('#tb_this_photo_description').val() || ''; + src = jQuery('#tb_this_photo').val() || '' + } + + tb_remove(); + pick(src, desc); + jQuery('#extra-fields').hide(); + jQuery('#extra-fields').html(''); + return false; + } + + jQuery('#extra-fields').html('

    ()

    '); + jQuery('#img_container').html(strtoappend); + +<?php _e('Press This') ?> + + + + + + + +
    +
    +
    +
    + + + + + + + + +
    + +
    +

    +

    +
    +

    + 'save' ) ); + if ( current_user_can('publish_posts') ) { + submit_button( __( 'Publish' ), 'primary', 'publish', false ); + } else { + echo '

    '; + submit_button( __( 'Submit for Review' ), 'primary', 'review', false ); + } ?> + +

    + +

    + +

    + +
    +
    + + +
    +

    +

    +
    +
    + + + + + +
    +
      + 'category', 'popular_cats' => $popular_ids ) ) ?> +
    +
    + + cap->assign_terms) ) : ?> +

    + + cap->edit_terms) ) : ?> +
    +

    + + labels->add_new_item ); ?> + +

    +

    + + + + 'category', 'hide_empty' => 0, 'name' => 'newcategory_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => '— ' . $tax->labels->parent_item . ' —' ) ); ?> + + + +

    +
    + +
    +
    +
    + +
    +

    +

    +
    +
    +
    + + +
    + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + + + +
    +

    + + | + |

    +
    + + +
    +
    + +
    +
    + + + + + +
    + true, + 'textarea_rows' => '15' + ); + + $content = ''; + if ( $selection ) + $content .= $selection; + + if ( $url ) { + $content .= '

    '; + + if ( $selection ) + $content .= __('via '); + + $content .= sprintf( "%s.

    ", esc_url( $url ), esc_html( $title ) ); + } + + remove_action( 'media_buttons', 'media_buttons' ); + add_action( 'media_buttons', 'press_this_media_buttons' ); + function press_this_media_buttons() { + _e( 'Add:' ); + + if ( current_user_can('upload_files') ) { + ?> + + <?php esc_attr_e('Insert an Image'); ?> + + <?php esc_attr_e('Embed a Video'); ?> + +
    +
    +
    +
    + + + + + diff --git a/src/wp-admin/profile.php b/src/wp-admin/profile.php new file mode 100644 index 0000000..0f33eb2 --- /dev/null +++ b/src/wp-admin/profile.php @@ -0,0 +1,18 @@ +post_parent ) ) + break; + + if ( ! $post = get_post( $revision->post_parent ) ) + break; + + // Revisions disabled (previously checked autosaves && ! wp_is_post_autosave( $revision )) + if ( ! wp_revisions_enabled( $post ) ) { + $redirect = 'edit.php?post_type=' . $post->post_type; + break; + } + + // Don't allow revision restore when post is locked + if ( wp_check_post_lock( $post->ID ) ) + break; + + check_admin_referer( "restore-post_{$revision->ID}" ); + + wp_restore_post_revision( $revision->ID ); + $redirect = add_query_arg( array( 'message' => 5, 'revision' => $revision->ID ), get_edit_post_link( $post->ID, 'url' ) ); + break; +case 'view' : +case 'edit' : +default : + if ( ! $revision = wp_get_post_revision( $revision_id ) ) + break; + if ( ! $post = get_post( $revision->post_parent ) ) + break; + + if ( ! current_user_can( 'read_post', $revision->ID ) || ! current_user_can( 'read_post', $post->ID ) ) + break; + + // Revisions disabled and we're not looking at an autosave + if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) { + $redirect = 'edit.php?post_type=' . $post->post_type; + break; + } + + $post_title = '' . _draft_or_post_title() . ''; + $h2 = sprintf( __( 'Compare Revisions of “%1$s”' ), $post_title ); + $title = __( 'Revisions' ); + + $redirect = false; + break; +endswitch; + +// Empty post_type means either malformed object found, or no valid parent was found. +if ( ! $redirect && empty( $post->post_type ) ) + $redirect = 'edit.php'; + +if ( ! empty( $redirect ) ) { + wp_redirect( $redirect ); + exit; +} + +// This is so that the correct "Edit" menu item is selected. +if ( ! empty( $post->post_type ) && 'post' != $post->post_type ) + $parent_file = $submenu_file = 'edit.php?post_type=' . $post->post_type; +else + $parent_file = $submenu_file = 'edit.php'; + +wp_enqueue_script( 'revisions' ); +wp_localize_script( 'revisions', '_wpRevisionsSettings', wp_prepare_revisions_for_js( $post, $revision_id, $from ) ); + +/* Revisions Help Tab */ + +$revisions_overview = '

    ' . __( 'This screen is used for managing your content revisions.' ) . '

    '; +$revisions_overview .= '

    ' . __( 'Revisions are saved copies of your post or page, which are periodically created as you update your content. The red text on the left shows the content that was removed. The green text on the right shows the content that was added.' ) . '

    '; +$revisions_overview .= '

    ' . __( 'From this screen you can review, compare, and restore revisions:' ) . '

    '; +$revisions_overview .= '
    • ' . __( 'To navigate between revisions, drag the slider handle left or right or use the Previous or Next buttons.' ) . '
    • '; +$revisions_overview .= '
    • ' . __( 'Compare two different revisions by selecting the “Compare any two revisions” box to the side.' ) . '
    • '; +$revisions_overview .= '
    • ' . __( 'To restore a revision, click Restore This Revision.' ) . '
    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'revisions-overview', + 'title' => __( 'Overview' ), + 'content' => $revisions_overview +) ); + +$revisions_sidebar = '

    ' . __( 'For more information:' ) . '

    '; +$revisions_sidebar .= '

    ' . __( 'Revisions Management' ) . '

    '; +$revisions_sidebar .= '

    ' . __( 'Support Forums' ) . '

    '; + +get_current_screen()->set_help_sidebar( $revisions_sidebar ); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +?> + +
    +

    +
    + + + + + + + + + + + + +El archivo 'wp-config.php' ya existe. Si necesitas reiniciar alguno de los elementos de la configuración de este archivo bórralo primero. Puedes tratar de instalar ahora.

    "); + +// Comprobamos si existe un wp-config.php por encima del directorio raiz pero que no sea parte de otra instalación +if (file_exists(ABSPATH . '../wp-config.php') && ! file_exists(ABSPATH . '../wp-settings.php')) + wp_die("

    El archivo 'wp-config.php' ya existe un nivel por encima de tu instalación de WordPress. Si necesitas reiniciar alguno de los elementos de la configuración de este archivo bórralo primero. Puedes tratar de instalar ahora.

    "); + +if (isset($_GET['step'])) + $step = $_GET['step']; +else + $step = 0; + +/** + * Muestra la cabecera de configuración del fichero wp-config.php. + * + * @ignore + * @since 2.3.0 + * @package WordPress + * @subpackage Installer_WP_Config + */ +function display_header() { + header( 'Content-Type: text/html; charset=utf-8' ); +?> + + + + +Archivo de configuración de WordPress + + + + +

    WordPress

    + + +

    Bienvenid@ a WordPress. Antes de empezar necesitamos algo de información de la base de datos. Necesitas conocer la siguiente información antes de seguir.

    +
      +
    1. Nombre de la base de datos
    2. +
    3. Nombre de usuario de la base de datos
    4. +
    5. Contraseña de la base de datos
    6. +
    7. Host de la base de datos (en el 99% de los casos, localhost)
    8. +
    9. Prefijo de tabla (si quieres ejecutar más de un WordPress en una sola base de datos)
    10. +
    +

    Si por alguna razón no funciona la creación automática de este archivo no te preocupes. Todo lo que hace es rellenar un fichero de configuración con la información de la base de datos. También puedes simplemente abrir el fichero wp-config-sample.php en un editor de texto, rellenar la información y guardarlo como wp-config.php.

    +

    En la mayoría de las ocasiones esta información te la facilita tu proveedor de alojamiento. Si no tienes esta información tendrás que contactar con ellos antes de poder continuar. Si ya estás listo …

    + +

    ¡Vamos a ello!

    + +
    +

    A continuación deberás introducir los detalles de conexión con tu base de datos. Si no estás seguro de cuáles son contacta con tu proveedor de alojamiento.

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    El nombre de la base de datos en la que quieres que se ejecute WP.
    Tu nombre de usuario de MySQL
    …y la contraseña de MySQL.
    Si no funciona localhost tendrás que contactar con tu proveedor de alojamiento para que te diga cual es.
    Si quieres ejecutar varias instalaciones de WordPress en una sola base de datos cambia esto.
    + +

    +
    +ERROR: "Prefijo de tabla" solo puede contener números, letras y guión bajo.'/*/WP_I18N_BAD_PREFIX*/ ); + + // Probamos la conexión con la base de datos. + /**#@+ + * @ignore + */ + define('DB_NAME', $dbname); + define('DB_USER', $uname); + define('DB_PASSWORD', $passwrd); + define('DB_HOST', $dbhost); + /**#@-*/ + + // Fallará si los valores son incorrectos. + require_wp_db(); + if ( ! empty( $wpdb->error ) ) { + $back = '

    Inténtalo de nuevo

    '; + wp_die( $wpdb->error->get_error_message() . $back ); + } + + // Carga o generación de las claves y salts. + $no_api = isset( $_POST['noapi'] ); + require_once( ABSPATH . WPINC . '/plugin.php' ); + require_once( ABSPATH . WPINC . '/l10n.php' ); + require_once( ABSPATH . WPINC . '/pomo/translations.php' ); + if ( ! $no_api ) { + require_once( ABSPATH . WPINC . '/class-http.php' ); + require_once( ABSPATH . WPINC . '/http.php' ); + wp_fix_server_vars(); + /**#@+ + * @ignore + */ + function get_bloginfo() { + return ( ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . str_replace( $_SERVER['PHP_SELF'], '/wp-admin/setup-config.php', '' ) ); + } + /**#@-*/ + $secret_keys = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' ); + } + + if ( $no_api || is_wp_error( $secret_keys ) ) { + $secret_keys = array(); + require_once( ABSPATH . WPINC . '/pluggable.php' ); + for ( $i = 0; $i < 8; $i++ ) { + $secret_keys[] = wp_generate_password( 64, true, true ); + } + } else { + $secret_keys = explode( "\n", wp_remote_retrieve_body( $secret_keys ) ); + foreach ( $secret_keys as $k => $v ) { + $secret_keys[$k] = substr( $v, 28, 64 ); + } + } + $key = 0; + + foreach ($configFile as $line_num => $line) { + switch (substr($line,0,16)) { + case "define('DB_NAME'": + $configFile[$line_num] = str_replace("nombredetubasededatos", $dbname, $line); + break; + case "define('DB_USER'": + $configFile[$line_num] = str_replace("'nombredeusuario'", "'$uname'", $line); + break; + case "define('DB_PASSW": + $configFile[$line_num] = str_replace("'contraseña'", "'$passwrd'", $line); + break; + case "define('DB_HOST'": + $configFile[$line_num] = str_replace("localhost", $dbhost, $line); + break; + case '$table_prefix =': + $configFile[$line_num] = str_replace('wp_', $prefix, $line); + break; + case "define('AUTH_KEY": + case "define('SECURE_A": + case "define('LOGGED_I": + case "define('NONCE_KE": + case "define('AUTH_SAL": + case "define('SECURE_A": + case "define('LOGGED_I": + case "define('NONCE_SA": + $configFile[$line_num] = str_replace('pon aquí tu frase aleatoria', $secret_keys[$key++], $line ); + break; + } + } + if ( ! is_writable(ABSPATH) ) : + display_header(); +?> +

    Lo siento, pero no se ha podido escribir en el fichero wp-config.php.

    +

    Puedes crear mahualmente el archivo wp-config.php y pegar dentro el siguiente texto.

    + +

    Una vez hayas hecho esto haz clic en "Iniciar la instalación."

    +

    Iniciar la instalación

    + +

    ¡Todo correcto! Ya has terminado esta parte de la instalación. Ahora WordPress puede comunicarse con tu base de datos. Si estás preparado es momento de …

    + +

    Iniciar la instalación

    + + + diff --git a/src/wp-admin/theme-editor.php b/src/wp-admin/theme-editor.php new file mode 100644 index 0000000..8d1775d --- /dev/null +++ b/src/wp-admin/theme-editor.php @@ -0,0 +1,245 @@ +'.__('You do not have sufficient permissions to edit templates for this site.').'

    '); + +$title = __("Edit Themes"); +$parent_file = 'themes.php'; + +get_current_screen()->add_help_tab( array( +'id' => 'overview', +'title' => __('Overview'), +'content' => + '

    ' . __('You can use the Theme Editor to edit the individual CSS and PHP files which make up your theme.') . '

    +

    ' . __('Begin by choosing a theme to edit from the dropdown menu and clicking Select. A list then appears of all the template files. Clicking once on any file name causes the file to appear in the large Editor box.') . '

    +

    ' . __('For PHP files, you can use the Documentation dropdown to select from functions recognized in that file. Look Up takes you to a web page with reference material about that particular function.') . '

    +

    ' . __('In the editing area the Tab key enters a tab character. To move below this area by pressing Tab, press the Esc key followed by the Tab key.') . '

    +

    ' . __('After typing in your edits, click Update File.') . '

    +

    ' . __('Advice: think very carefully about your site crashing if you are live-editing the theme currently in use.') . '

    +

    ' . sprintf( __('Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a child theme instead.'), __('http://codex.wordpress.org/Child_Themes') ) . '

    ' . + ( is_network_admin() ? '

    ' . __('Any edits to files from this screen will be reflected on all sites in the network.') . '

    ' : '' ) +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Theme Development') . '

    ' . + '

    ' . __('Documentation on Using Themes') . '

    ' . + '

    ' . __('Documentation on Editing Files') . '

    ' . + '

    ' . __('Documentation on Template Tags') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +wp_reset_vars( array( 'action', 'error', 'file', 'theme' ) ); + +if ( $theme ) + $stylesheet = $theme; +else + $stylesheet = get_stylesheet(); + +$theme = wp_get_theme( $stylesheet ); + +if ( ! $theme->exists() ) + wp_die( __( 'The requested theme does not exist.' ) ); + +if ( $theme->errors() && 'theme_no_stylesheet' == $theme->errors()->get_error_code() ) + wp_die( __( 'The requested theme does not exist.' ) . ' ' . $theme->errors()->get_error_message() ); + +$allowed_files = $theme->get_files( 'php', 1 ); +$has_templates = ! empty( $allowed_files ); +$style_files = $theme->get_files( 'css' ); +$allowed_files['style.css'] = $style_files['style.css']; +$allowed_files += $style_files; + +if ( empty( $file ) ) { + $relative_file = 'style.css'; + $file = $allowed_files['style.css']; +} else { + $relative_file = $file; + $file = $theme->get_stylesheet_directory() . '/' . $relative_file; +} + +validate_file_to_edit( $file, $allowed_files ); +$scrollto = isset( $_REQUEST['scrollto'] ) ? (int) $_REQUEST['scrollto'] : 0; + +switch( $action ) { +case 'update': + check_admin_referer( 'edit-theme_' . $file . $stylesheet ); + $newcontent = wp_unslash( $_POST['newcontent'] ); + $location = 'theme-editor.php?file=' . urlencode( $relative_file ) . '&theme=' . urlencode( $stylesheet ) . '&scrollto=' . $scrollto; + if ( is_writeable( $file ) ) { + //is_writable() not always reliable, check return value. see comments @ http://uk.php.net/is_writable + $f = fopen( $file, 'w+' ); + if ( $f !== false ) { + fwrite( $f, $newcontent ); + fclose( $f ); + $location .= '&updated=true'; + $theme->cache_delete(); + } + } + wp_redirect( $location ); + exit; +break; + +default: + + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + + update_recently_edited( $file ); + + if ( ! is_file( $file ) ) + $error = true; + + $content = ''; + if ( ! $error && filesize( $file ) > 0 ) { + $f = fopen($file, 'r'); + $content = fread($f, filesize($file)); + + if ( '.php' == substr( $file, strrpos( $file, '.' ) ) ) { + $functions = wp_doc_link_parse( $content ); + + $docs_select = ''; + } + + $content = esc_textarea( $content ); + } + + ?> + +

    +(' . $file_show . ')'; +?> +
    +

    + +
    +
    +

    display('Name'); if ( $description ) echo ': ' . $description; ?>

    +
    +
    +
    + + + +
    +
    +
    +
    +errors() ) + echo '

    ' . __( 'This theme is broken.' ) . ' ' . $theme->errors()->get_error_message() . '

    '; +?> +
    +parent() ) : +?> +

    + parent() ) : ?> +

    get_template() ) ) . '">' . $theme->parent()->display('Name') . '' ); ?>

    + +
      + $absolute_filename ) : + if ( 'style.css' == $filename ) + echo "\t
    \n\t

    " . _x( 'Styles', 'Theme stylesheets in theme editor' ) . "

    \n\t
      \n"; + + $file_description = get_file_description( $absolute_filename ); + if ( $file_description != basename( $filename ) ) + $file_description .= '
      (' . $filename . ')'; + + if ( $absolute_filename == $file ) + $file_description = '' . $file_description . ''; +?> +
    • + +
    + +
    +

    ' . __('Oops, no such file exists! Double check the name and try again, merci.') . '

    '; +else : ?> +
    + +
    + + + + +
    + +
    + + + +
    + + +
    + get_stylesheet() == get_template() ) : ?> +

    +

    + + +

    the Codex for more information.'); ?>

    + +
    +
    + +
    +
    + +get_pagenum(); +$wp_list_table->prepare_items(); + +$title = __('Install Themes'); +$parent_file = 'themes.php'; +if ( !is_network_admin() ) + $submenu_file = 'themes.php'; + +wp_enqueue_script( 'theme-install' ); +wp_enqueue_script( 'theme-preview' ); + +$body_id = $tab; + +/** + * Fires before each of the tabs are rendered on the Install Themes page. + * + * The dynamic portion of the hook name, $tab, refers to the current + * theme install tab. Possible values are 'dashboard', 'search', 'upload', + * 'featured', 'new', or 'updated'. + * + * @since 2.8.0 + */ +do_action( "install_themes_pre_{$tab}" ); + +$help_overview = + '

    ' . sprintf(__('You can find additional themes for your site by using the Theme Browser/Installer on this screen, which will display themes from the WordPress.org Theme Directory. These themes are designed and developed by third parties, are available free of charge, and are compatible with the license WordPress uses.'), 'http://wordpress.org/themes/') . '

    ' . + '

    ' . __('You can Search for themes by keyword, author, or tag, or can get more specific and search by criteria listed in the feature filter. Alternately, you can browse the themes that are Featured, Newest, or Recently Updated. When you find a theme you like, you can preview it or install it.') . '

    ' . + '

    ' . __('You can Upload a theme manually if you have already downloaded its ZIP archive onto your computer (make sure it is from a trusted and original source). You can also do it the old-fashioned way and copy a downloaded theme’s folder via FTP into your /wp-content/themes directory.') . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => $help_overview +) ); + +$help_installing = + '

    ' . __('Once you have generated a list of themes, you can preview and install any of them. Click on the thumbnail of the theme you’re interested in previewing. It will open up in a full-screen Preview page to give you a better idea of how that theme will look.') . '

    ' . + '

    ' . __('To install the theme so you can preview it with your site’s content and customize its theme options, click the "Install" button at the top of the left-hand pane. The theme files will be downloaded to your website automatically. When this is complete, the theme is now available for activation, which you can do by clicking the "Activate" link, or by navigating to your Manage Themes screen and clicking the "Live Preview" link under any installed theme’s thumbnail image.') . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'installing', + 'title' => __('Previewing and Installing'), + 'content' => $help_installing +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Adding New Themes') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +include(ABSPATH . 'wp-admin/admin-header.php'); +?> +
    +

    +views(); ?> + +
    + +
    +exists() || ! $theme->is_allowed() ) + wp_die( __( 'Cheatin’ uh?' ) ); + switch_theme( $theme->get_stylesheet() ); + wp_redirect( admin_url('themes.php?activated=true') ); + exit; + } elseif ( 'delete' == $_GET['action'] ) { + check_admin_referer('delete-theme_' . $_GET['stylesheet']); + $theme = wp_get_theme( $_GET['stylesheet'] ); + if ( !current_user_can('delete_themes') || ! $theme->exists() ) + wp_die( __( 'Cheatin’ uh?' ) ); + delete_theme($_GET['stylesheet']); + wp_redirect( admin_url('themes.php?deleted=true') ); + exit; + } +} + +$title = __('Manage Themes'); +$parent_file = 'themes.php'; + +// Help tab: Overview +if ( current_user_can( 'switch_themes' ) ) { + $help_overview = '

    ' . __( 'This screen is used for managing your installed themes. Aside from the default theme(s) included with your WordPress installation, themes are designed and developed by third parties.' ) . '

    ' . + '

    ' . __( 'From this screen you can:' ) . '

    ' . + '
    • ' . __( 'Hover or tap to see Activate and Live Preview buttons' ) . '
    • ' . + '
    • ' . __( 'Click on the theme to see the theme name, version, author, description, tags, and the Delete link' ) . '
    • ' . + '
    • ' . __( 'Click Customize for the current theme or Live Preview for any other theme to see a live preview' ) . '
    ' . + '

    ' . __( 'The current theme is displayed highlighted as the first theme.' ) . '

    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => $help_overview + ) ); +} // switch_themes + +// Help tab: Adding Themes +if ( current_user_can( 'install_themes' ) ) { + if ( is_multisite() ) { + $help_install = '

    ' . __('Installing themes on Multisite can only be done from the Network Admin section.') . '

    '; + } else { + $help_install = '

    ' . sprintf( __('If you would like to see more themes to choose from, click on the “Add New” button and you will be able to browse or search for additional themes from the WordPress.org Theme Directory. Themes in the WordPress.org Theme Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they’re free!'), 'http://wordpress.org/themes/' ) . '

    '; + } + + get_current_screen()->add_help_tab( array( + 'id' => 'adding-themes', + 'title' => __('Adding Themes'), + 'content' => $help_install + ) ); +} // install_themes + +// Help tab: Previewing and Customizing +if ( current_user_can( 'edit_theme_options' ) ) { + $help_customize = + '

    ' . __( 'Tap or hover on any theme then click the Live Preview button to see a live preview of that theme and change theme options in a separate, full-screen view. You can also find a Live Preview button at the bottom of the theme details screen. Any installed theme can be previewed and customized in this way.' ) . '

    '. + '

    ' . __( 'The theme being previewed is fully interactive — navigate to different pages to see how the theme handles posts, archives, and other page templates. The settings may differ depending on what theme features the theme being previewed supports. To accept the new settings and activate the theme all in one step, click the Save & Activate button above the menu.' ) . '

    ' . + '

    ' . __( 'When previewing on smaller monitors, you can use the collapse icon at the bottom of the left-hand pane. This will hide the pane, giving you more room to preview your site in the new theme. To bring the pane back, click on the collapse icon again.' ) . '

    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'customize-preview-themes', + 'title' => __( 'Previewing and Customizing' ), + 'content' => $help_customize + ) ); +} // edit_theme_options + +get_current_screen()->set_help_sidebar( + '

    ' . __( 'For more information:' ) . '

    ' . + '

    ' . __( 'Documentation on Using Themes' ) . '

    ' . + '

    ' . __( 'Support Forums' ) . '

    ' +); + +if ( current_user_can( 'switch_themes' ) ) { + $themes = wp_prepare_themes_for_js(); +} else { + $themes = wp_prepare_themes_for_js( array( wp_get_theme() ) ); +} +wp_reset_vars( array( 'theme', 'search' ) ); + +wp_localize_script( 'theme', '_wpThemeSettings', array( + 'themes' => $themes, + 'settings' => array( + 'canInstall' => ( ! is_multisite() && current_user_can( 'install_themes' ) ), + 'installURI' => ( ! is_multisite() && current_user_can( 'install_themes' ) ) ? admin_url( 'theme-install.php' ) : null, + 'confirmDelete' => __( "Are you sure you want to delete this theme?\n\nClick 'Cancel' to go back, 'OK' to confirm the delete." ), + 'root' => parse_url( admin_url( 'themes.php' ), PHP_URL_PATH ), + 'theme' => esc_html( $theme ), + 'search' => esc_html( $search ), + + ), + 'l10n' => array( + 'addNew' => __( 'Add New Theme' ), + 'search' => __( 'Search Installed Themes' ), + 'searchPlaceholder' => __( 'Search installed themes...' ), + ), +) ); + +add_thickbox(); +wp_enqueue_script( 'theme' ); +wp_enqueue_script( 'customize-loader' ); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + + + + +

    + +

    + +

    Visit site' ), home_url( '/' ) ); ?>

    + +

    Visit site' ), home_url( '/' ) ); ?>

    +

    +errors() && ( ! is_multisite() || current_user_can( 'manage_network_themes' ) ) ) { + echo '

    ' . sprintf( __( 'ERROR: %s' ), $ct->errors()->get_error_message() ) . '

    '; +} + +/* +// Certain error codes are less fatal than others. We can still display theme information in most cases. +if ( ! $ct->errors() || ( 1 == count( $ct->errors()->get_error_codes() ) + && in_array( $ct->errors()->get_error_code(), array( 'theme_no_parent', 'theme_parent_invalid', 'theme_no_index' ) ) ) ) : ?> +*/ + + // Pretend you didn't see this. + $current_theme_actions = array(); + if ( is_array( $submenu ) && isset( $submenu['themes.php'] ) ) { + foreach ( (array) $submenu['themes.php'] as $item) { + $class = ''; + if ( 'themes.php' == $item[2] || 'theme-editor.php' == $item[2] || 'customize.php' == $item[2] ) + continue; + // 0 = name, 1 = capability, 2 = file + if ( ( strcmp($self, $item[2]) == 0 && empty($parent_file)) || ($parent_file && ($item[2] == $parent_file)) ) + $class = ' class="current"'; + if ( !empty($submenu[$item[2]]) ) { + $submenu[$item[2]] = array_values($submenu[$item[2]]); // Re-index. + $menu_hook = get_plugin_page_hook($submenu[$item[2]][0][2], $item[2]); + if ( file_exists(WP_PLUGIN_DIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook)) + $current_theme_actions[] = "{$item[0]}"; + else + $current_theme_actions[] = "{$item[0]}"; + } else if ( current_user_can($item[1]) ) { + $menu_file = $item[2]; + if ( false !== ( $pos = strpos( $menu_file, '?' ) ) ) + $menu_file = substr( $menu_file, 0, $pos ); + if ( file_exists( ABSPATH . "wp-admin/$menu_file" ) ) { + $current_theme_actions[] = "{$item[0]}"; + } else { + $current_theme_actions[] = "{$item[0]}"; + } + } + } + } + +?> + +
    +
    + + +
    + +
    + +
    + +
    + + +
    + + +

    + +

    + + +
    + + + + + + + + + + + +
    + + +
    + +
    + +
    +
    +
    +
    + + true ) ) ) { +?> + +
    +

    +

    + + + + + + + + + + "; + } +?> +
    " . ( $broken_theme->get( 'Name' ) ? $broken_theme->get( 'Name' ) : $broken_theme->get_stylesheet() ) . "" . $broken_theme->errors()->get_error_message() . "
    +
    + + +
    + + + + + + + diff --git a/src/wp-admin/tools.php b/src/wp-admin/tools.php new file mode 100644 index 0000000..b55328a --- /dev/null +++ b/src/wp-admin/tools.php @@ -0,0 +1,75 @@ +add_help_tab( array( + 'id' => 'press-this', + 'title' => __('Press This'), + 'content' => '

    ' . __('Press This is a bookmarklet that makes it easy to blog about something you come across on the web. You can use it to just grab a link, or to post an excerpt. Press This will even allow you to choose from images included on the page and use them in your post. Just drag the Press This link on this screen to your bookmarks bar in your browser, and you’ll be on your way to easier content creation. Clicking on it while on another website opens a popup window with all these options.') . '

    ', +) ); +get_current_screen()->add_help_tab( array( + 'id' => 'converter', + 'title' => __('Categories and Tags Converter'), + 'content' => '

    ' . __('Categories have hierarchy, meaning that you can nest sub-categories. Tags do not have hierarchy and cannot be nested. Sometimes people start out using one on their posts, then later realize that the other would work better for their content.' ) . '

    ' . + '

    ' . __( 'The Categories and Tags Converter link on this screen will take you to the Import screen, where that Converter is one of the plugins you can install. Once that plugin is installed, the Activate Plugin & Run Importer link will take you to a screen where you can choose to convert tags into categories or vice versa.' ) . '

    ', +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Tools') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +?> +
    +

    + + +
    +

    +

    + +

    +

    +

    + +
    +cap->manage_terms) || current_user_can($tags->cap->manage_terms) ) : ?> +
    +

    +

    Categories and Tags Converter available from the Import screen.'), 'import.php' ); ?>

    +
    + +
    +locale && 'en_US' == get_locale() ) + $version_string = $update->current; + // If the only available update is a partial builds, it doesn't need a language-specific version string. + elseif ( 'en_US' == $update->locale && $update->packages->partial && $wp_version == $update->partial_version && ( $updates = get_core_updates() ) && 1 == count( $updates ) ) + $version_string = $update->current; + else + $version_string = sprintf( "%s–%s", $update->current, $update->locale ); + + $current = false; + if ( !isset($update->response) || 'latest' == $update->response ) + $current = true; + $submit = __('Update Now'); + $form_action = 'update-core.php?action=do-core-upgrade'; + $php_version = phpversion(); + $mysql_version = $wpdb->db_version(); + $show_buttons = true; + if ( 'development' == $update->response ) { + $message = __('You are using a development version of WordPress. You can update to the latest nightly build automatically or download the nightly build and install it manually:'); + $download = __('Download nightly build'); + } else { + if ( $current ) { + $message = sprintf( __( 'If you need to re-install version %s, you can do so here or download the package and re-install manually:' ), $version_string ); + $submit = __('Re-install Now'); + $form_action = 'update-core.php?action=do-core-reinstall'; + } else { + $php_compat = version_compare( $php_version, $update->php_version, '>=' ); + if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) + $mysql_compat = true; + else + $mysql_compat = version_compare( $mysql_version, $update->mysql_version, '>=' ); + + if ( !$mysql_compat && !$php_compat ) + $message = sprintf( __('You cannot update because WordPress %1$s requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s.'), $update->current, $update->php_version, $update->mysql_version, $php_version, $mysql_version ); + elseif ( !$php_compat ) + $message = sprintf( __('You cannot update because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s.'), $update->current, $update->php_version, $php_version ); + elseif ( !$mysql_compat ) + $message = sprintf( __('You cannot update because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s.'), $update->current, $update->mysql_version, $mysql_version ); + else + $message = sprintf(__('You can update to WordPress %2$s automatically or download the package and install it manually:'), $update->current, $version_string); + if ( !$mysql_compat || !$php_compat ) + $show_buttons = false; + } + $download = sprintf(__('Download %s'), $version_string); + } + + echo '

    '; + echo $message; + echo '

    '; + echo '
    '; + wp_nonce_field('upgrade-core'); + echo '

    '; + echo ''; + echo ''; + if ( $show_buttons ) { + if ( $first_pass ) { + submit_button( $submit, $current ? 'button' : 'primary regular', 'upgrade', false ); + $first_pass = false; + } else { + submit_button( $submit, 'button', 'upgrade', false ); + } + echo ' ' . $download . ' '; + } + if ( 'en_US' != $update->locale ) + if ( !isset( $update->dismissed ) || !$update->dismissed ) + submit_button( __('Hide this update'), 'button', 'dismiss', false ); + else + submit_button( __('Bring back this update'), 'button', 'undismiss', false ); + echo '

    '; + if ( 'en_US' != $update->locale && ( !isset($wp_local_package) || $wp_local_package != $update->locale ) ) + echo '

    '.__('This localized version contains both the translation and various other localization fixes. You can skip upgrading if you want to keep your current translation.').'

    '; + // Partial builds don't need language-specific warnings. + elseif ( 'en_US' == $update->locale && get_locale() != 'en_US' && ( ! $update->packages->partial && $wp_version == $update->partial_version ) ) { + echo '

    '.sprintf( __('You are about to install WordPress %s in English (US). There is a chance this update will break your translation. You may prefer to wait for the localized version to be released.'), $update->response != 'development' ? $update->current : '' ).'

    '; + } + echo '
    '; + +} + +function dismissed_updates() { + $dismissed = get_core_updates( array( 'dismissed' => true, 'available' => false ) ); + if ( $dismissed ) { + + $show_text = esc_js(__('Show hidden updates')); + $hide_text = esc_js(__('Hide hidden updates')); + ?> + + '.__('Show hidden updates').'

    '; + echo '
      '; + foreach( (array) $dismissed as $update) { + echo '
    • '; + list_core_update( $update ); + echo '
    • '; + } + echo '
    '; + } +} + +/** + * Display upgrade WordPress for downloading latest or upgrading automatically form. + * + * @since 2.7 + * + * @return null + */ +function core_upgrade_preamble() { + global $wp_version, $required_php_version, $required_mysql_version; + + $updates = get_core_updates(); + + if ( !isset($updates[0]->response) || 'latest' == $updates[0]->response ) { + echo '

    '; + _e('You have the latest version of WordPress.'); + + if ( wp_http_supports( array( 'ssl' ) ) ) { + require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + $upgrader = new WP_Automatic_Updater; + $future_minor_update = (object) array( + 'current' => $wp_version . '.1.next.minor', + 'version' => $wp_version . '.1.next.minor', + 'php_version' => $required_php_version, + 'mysql_version' => $required_mysql_version, + ); + $should_auto_update = $upgrader->should_update( 'core', $future_minor_update, ABSPATH ); + if ( $should_auto_update ) + echo ' ' . __( 'Future security updates will be applied automatically.' ); + } + echo '

    '; + } else { + echo '

    '; + _e('Important: before updating, please back up your database and files. For help with updates, visit the Updating WordPress Codex page.'); + echo '

    '; + + echo '

    '; + _e( 'An updated version of WordPress is available.' ); + echo '

    '; + } + + if ( isset( $updates[0] ) && $updates[0]->response == 'development' ) { + require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + $upgrader = new WP_Automatic_Updater; + if ( wp_http_supports( 'ssl' ) && $upgrader->should_update( 'core', $updates[0], ABSPATH ) ) + echo '

    BETA TESTERS: This site is set up to install updates of future beta versions automatically.

    '; + } + + echo '
      '; + $alternate = true; + foreach( (array) $updates as $update ) { + echo '
    • '; + list_core_update( $update ); + echo '
    • '; + } + echo '
    '; + // Don't show the maintenance mode notice when we are only showing a single re-install option. + if ( $updates && ( count( $updates ) > 1 || $updates[0]->response != 'latest' ) ) { + echo '

    ' . __( 'While your site is being updated, it will be in maintenance mode. As soon as your updates are complete, your site will return to normal.' ) . '

    '; + } elseif ( ! $updates ) { + list( $normalized_version ) = explode( '-', $wp_version ); + echo '

    ' . sprintf( __( 'Learn more about WordPress %s.' ), esc_url( self_admin_url( 'about.php' ) ), $normalized_version ) . '

    '; + } + dismissed_updates(); +} + +function list_plugin_updates() { + global $wp_version; + + $cur_wp_version = preg_replace('/-.*$/', '', $wp_version); + + require_once(ABSPATH . 'wp-admin/includes/plugin-install.php'); + $plugins = get_plugin_updates(); + if ( empty( $plugins ) ) { + echo '

    ' . __( 'Plugins' ) . '

    '; + echo '

    ' . __( 'Your plugins are all up to date.' ) . '

    '; + return; + } + $form_action = 'update-core.php?action=do-plugin-upgrade'; + + $core_updates = get_core_updates(); + if ( !isset($core_updates[0]->response) || 'latest' == $core_updates[0]->response || 'development' == $core_updates[0]->response || version_compare( $core_updates[0]->current, $cur_wp_version, '=') ) + $core_update_version = false; + else + $core_update_version = $core_updates[0]->current; + ?> +

    +

    +
    + +

    + + + + + + + + + + + + + + + + $plugin_data) { + $info = plugins_api('plugin_information', array('slug' => $plugin_data->update->slug )); + // Get plugin compat for running version of WordPress. + if ( isset($info->tested) && version_compare($info->tested, $cur_wp_version, '>=') ) { + $compat = '
    ' . sprintf(__('Compatibility with WordPress %1$s: 100%% (according to its author)'), $cur_wp_version); + } elseif ( isset($info->compatibility[$cur_wp_version][$plugin_data->update->new_version]) ) { + $compat = $info->compatibility[$cur_wp_version][$plugin_data->update->new_version]; + $compat = '
    ' . sprintf(__('Compatibility with WordPress %1$s: %2$d%% (%3$d "works" votes out of %4$d total)'), $cur_wp_version, $compat[0], $compat[2], $compat[1]); + } else { + $compat = '
    ' . sprintf(__('Compatibility with WordPress %1$s: Unknown'), $cur_wp_version); + } + // Get plugin compat for updated version of WordPress. + if ( $core_update_version ) { + if ( isset($info->compatibility[$core_update_version][$plugin_data->update->new_version]) ) { + $update_compat = $info->compatibility[$core_update_version][$plugin_data->update->new_version]; + $compat .= '
    ' . sprintf(__('Compatibility with WordPress %1$s: %2$d%% (%3$d "works" votes out of %4$d total)'), $core_update_version, $update_compat[0], $update_compat[2], $update_compat[1]); + } else { + $compat .= '
    ' . sprintf(__('Compatibility with WordPress %1$s: Unknown'), $core_update_version); + } + } + // Get the upgrade notice for the new plugin version. + if ( isset($plugin_data->update->upgrade_notice) ) { + $upgrade_notice = '
    ' . strip_tags($plugin_data->update->upgrade_notice); + } else { + $upgrade_notice = ''; + } + + $details_url = self_admin_url('plugin-install.php?tab=plugin-information&plugin=' . $plugin_data->update->slug . '§ion=changelog&TB_iframe=true&width=640&height=662'); + $details_text = sprintf(__('View version %1$s details'), $plugin_data->update->new_version); + $details = sprintf('%3$s.', esc_url($details_url), esc_attr($plugin_data->Name), $details_text); + + echo " + + + + "; + } +?> + +

    {$plugin_data->Name}
    " . sprintf(__('You have version %1$s installed. Update to %2$s.'), $plugin_data->Version, $plugin_data->update->new_version) . ' ' . $details . $compat . $upgrade_notice . "

    +

    +
    +' . __( 'Themes' ) . ''; + echo '

    ' . __( 'Your themes are all up to date.' ) . '

    '; + return; + } + + $form_action = 'update-core.php?action=do-theme-upgrade'; + +?> +

    +

    +

    Please Note: Any customizations you have made to theme files will be lost. Please consider using child themes for modifications.' ), __( 'http://codex.wordpress.org/Child_Themes' ) ); ?>

    +
    + +

    + + + + + + + + + + + + + + + + $theme ) { + echo " + + + + "; + } +?> + +
    " . $theme->display('Name') . ' ' . sprintf( __( 'You have version %1$s installed. Update to %2$s.' ), $theme->display('Version'), $theme->update['new_version'] ) . "
    +

    +
    +' . __( 'Translations' ) . ''; + echo '

    ' . __( 'Your translations are all up to date.' ) . '

    '; + } + return; + } + + $form_action = 'update-core.php?action=do-translation-upgrade'; + ?> +

    +
    +

    + +

    +
    + +
    +

    +'; + return; + } + + if ( ! WP_Filesystem( $credentials, ABSPATH ) ) { + // Failed to connect, Error and request again + request_filesystem_credentials( $url, '', true, ABSPATH ); + echo '
    '; + return; + } + + if ( $wp_filesystem->errors->get_error_code() ) { + foreach ( $wp_filesystem->errors->get_error_messages() as $message ) + show_message($message); + echo ''; + return; + } + + if ( $reinstall ) + $update->response = 'reinstall'; + + add_filter( 'update_feedback', 'show_message' ); + + $upgrader = new Core_Upgrader(); + $result = $upgrader->upgrade( $update ); + + if ( is_wp_error($result) ) { + show_message($result); + if ('up_to_date' != $result->get_error_code() ) + show_message( __('Installation Failed') ); + echo ''; + return; + } + + show_message( __('WordPress updated successfully') ); + show_message( '' . sprintf( __( 'Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click here.' ), $result, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '' ); + show_message( '' . sprintf( __( 'Welcome to WordPress %1$s. Learn more.' ), $result, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '' ); + ?> + + + ' . __( 'On this screen, you can update to the latest version of WordPress, as well as update your themes and plugins from the WordPress.org repositories.' ) . '

    '; +$updates_overview .= '

    ' . __( 'If an update is available, you᾿ll see a notification appear in the Toolbar and navigation menu.' ) . ' ' . __( 'Keeping your site up to date is important for your site’s security, and makes the internet a safer place for you and your readers.' ) . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => $updates_overview +) ); + +$updates_howto = '

    ' . __( 'WordPress — Updating your WordPress installation is a simple one-click procedure: just click on the “Update Now” button when you are notified that a new version is available.' ) . ' ' . __( 'In most cases, WordPress will automatically apply maintenance and security updates in the background for you.' ) . '

    '; +$updates_howto .= '

    ' . __( 'Themes and Plugins — To update individual themes or plugins from this screen, use the checkboxes to make your selection, then click on the appropriate “Update” button. To update all of your themes or plugins at once, you can check the box at the top of the section to select all before clicking the update button.' ) . '

    '; + +if ( 'en_US' != get_locale() ) { + $updates_howto .= '

    ' . __( 'Translations — The files translating WordPress into your language are updated for you whenever any other updates occur. But if these files are out of date, you can click the “Update Translations” button.' ) . '

    '; +} + +get_current_screen()->add_help_tab( array( + 'id' => 'how-to-update', + 'title' => __( 'How to Update' ), + 'content' => $updates_howto +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __( 'Documentation on Updating WordPress' ) . '

    ' . + '

    ' . __( 'Support Forums' ) . '

    ' +); + +if ( 'upgrade-core' == $action ) { + // Force a update check when requested + $force_check = ! empty( $_GET['force-check'] ); + wp_version_check( array(), $force_check ); + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + ?> +
    +

    +

    '; + if ( $upgrade_error == 'themes' ) + _e('Please select one or more themes to update.'); + else + _e('Please select one or more plugins to update.'); + echo '

    '; + } + + echo '

    '; + /* translators: %1 date, %2 time. */ + printf( __('Last checked on %1$s at %2$s.'), date_i18n( get_option( 'date_format' ) ), date_i18n( get_option( 'time_format' ) ) ); + echo '   ' . __( 'Check Again' ) . ''; + echo '

    '; + + if ( $core = current_user_can( 'update_core' ) ) + core_upgrade_preamble(); + if ( $plugins = current_user_can( 'update_plugins' ) ) + list_plugin_updates(); + if ( $themes = current_user_can( 'update_themes' ) ) + list_theme_updates(); + if ( $core || $plugins || $themes ) + list_translation_updates(); + unset( $core, $plugins, $themes ); + do_action('core_upgrade_preamble'); + echo ''; + include(ABSPATH . 'wp-admin/admin-footer.php'); + +} elseif ( 'do-core-upgrade' == $action || 'do-core-reinstall' == $action ) { + + if ( ! current_user_can( 'update_core' ) ) + wp_die( __( 'You do not have sufficient permissions to update this site.' ) ); + + check_admin_referer('upgrade-core'); + + // do the (un)dismiss actions before headers, + // so that they can redirect + if ( isset( $_POST['dismiss'] ) ) + do_dismiss_core_update(); + elseif ( isset( $_POST['undismiss'] ) ) + do_undismiss_core_update(); + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + if ( 'do-core-reinstall' == $action ) + $reinstall = true; + else + $reinstall = false; + + if ( isset( $_POST['upgrade'] ) ) + do_core_upgrade($reinstall); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + +} elseif ( 'do-plugin-upgrade' == $action ) { + + if ( ! current_user_can( 'update_plugins' ) ) + wp_die( __( 'You do not have sufficient permissions to update this site.' ) ); + + check_admin_referer('upgrade-core'); + + if ( isset( $_GET['plugins'] ) ) { + $plugins = explode( ',', $_GET['plugins'] ); + } elseif ( isset( $_POST['checked'] ) ) { + $plugins = (array) $_POST['checked']; + } else { + wp_redirect( admin_url('update-core.php') ); + exit; + } + + $url = 'update.php?action=update-selected&plugins=' . urlencode(implode(',', $plugins)); + $url = wp_nonce_url($url, 'bulk-update-plugins'); + + $title = __('Update Plugins'); + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + echo '
    '; + echo '

    ' . esc_html__('Update Plugins') . '

    '; + echo ""; + echo '
    '; + include(ABSPATH . 'wp-admin/admin-footer.php'); + +} elseif ( 'do-theme-upgrade' == $action ) { + + if ( ! current_user_can( 'update_themes' ) ) + wp_die( __( 'You do not have sufficient permissions to update this site.' ) ); + + check_admin_referer('upgrade-core'); + + if ( isset( $_GET['themes'] ) ) { + $themes = explode( ',', $_GET['themes'] ); + } elseif ( isset( $_POST['checked'] ) ) { + $themes = (array) $_POST['checked']; + } else { + wp_redirect( admin_url('update-core.php') ); + exit; + } + + $url = 'update.php?action=update-selected-themes&themes=' . urlencode(implode(',', $themes)); + $url = wp_nonce_url($url, 'bulk-update-themes'); + + $title = __('Update Themes'); + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + echo '
    '; + echo '

    ' . esc_html__('Update Themes') . '

    '; + echo ""; + echo '
    '; + include(ABSPATH . 'wp-admin/admin-footer.php'); + +} elseif ( 'do-translation-upgrade' == $action ) { + + if ( ! current_user_can( 'update_core' ) && ! current_user_can( 'update_plugins' ) && ! current_user_can( 'update_themes' ) ) + wp_die( __( 'You do not have sufficient permissions to update this site.' ) ); + + check_admin_referer( 'upgrade-translations' ); + + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); + + $url = 'update-core.php?action=do-translation-upgrade'; + $nonce = 'upgrade-translations'; + $title = __( 'Update Translations' ); + $context = WP_LANG_DIR; + + $upgrader = new Language_Pack_Upgrader( new Language_Pack_Upgrader_Skin( compact( 'url', 'nonce', 'title', 'context' ) ) ); + $result = $upgrader->bulk_upgrade(); + + require_once( ABSPATH . 'wp-admin/admin-footer.php' ); + +} else { + do_action('update-core-custom_' . $action); +} diff --git a/src/wp-admin/update.php b/src/wp-admin/update.php new file mode 100644 index 0000000..4290e58 --- /dev/null +++ b/src/wp-admin/update.php @@ -0,0 +1,266 @@ +bulk_upgrade( $plugins ); + + iframe_footer(); + + } elseif ( 'upgrade-plugin' == $action ) { + if ( ! current_user_can('update_plugins') ) + wp_die(__('You do not have sufficient permissions to update plugins for this site.')); + + check_admin_referer('upgrade-plugin_' . $plugin); + + $title = __('Update Plugin'); + $parent_file = 'plugins.php'; + $submenu_file = 'plugins.php'; + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + $nonce = 'upgrade-plugin_' . $plugin; + $url = 'update.php?action=upgrade-plugin&plugin=' . urlencode( $plugin ); + + $upgrader = new Plugin_Upgrader( new Plugin_Upgrader_Skin( compact('title', 'nonce', 'url', 'plugin') ) ); + $upgrader->upgrade($plugin); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + } elseif ('activate-plugin' == $action ) { + if ( ! current_user_can('update_plugins') ) + wp_die(__('You do not have sufficient permissions to update plugins for this site.')); + + check_admin_referer('activate-plugin_' . $plugin); + if ( ! isset($_GET['failure']) && ! isset($_GET['success']) ) { + wp_redirect( admin_url('update.php?action=activate-plugin&failure=true&plugin=' . urlencode( $plugin ) . '&_wpnonce=' . $_GET['_wpnonce']) ); + activate_plugin( $plugin, '', ! empty( $_GET['networkwide'] ), true ); + wp_redirect( admin_url('update.php?action=activate-plugin&success=true&plugin=' . urlencode( $plugin ) . '&_wpnonce=' . $_GET['_wpnonce']) ); + die(); + } + iframe_header( __('Plugin Reactivation'), true ); + if ( isset($_GET['success']) ) + echo '

    ' . __('Plugin reactivated successfully.') . '

    '; + + if ( isset($_GET['failure']) ){ + echo '

    ' . __('Plugin failed to reactivate due to a fatal error.') . '

    '; + + error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR ); + @ini_set('display_errors', true); //Ensure that Fatal errors are displayed. + include(WP_PLUGIN_DIR . '/' . $plugin); + } + iframe_footer(); + } elseif ( 'install-plugin' == $action ) { + + if ( ! current_user_can('install_plugins') ) + wp_die( __( 'You do not have sufficient permissions to install plugins on this site.' ) ); + + include_once ABSPATH . 'wp-admin/includes/plugin-install.php'; //for plugins_api.. + + check_admin_referer('install-plugin_' . $plugin); + $api = plugins_api('plugin_information', array('slug' => $plugin, 'fields' => array('sections' => false) ) ); //Save on a bit of bandwidth. + + if ( is_wp_error($api) ) + wp_die($api); + + $title = __('Plugin Install'); + $parent_file = 'plugins.php'; + $submenu_file = 'plugin-install.php'; + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + $title = sprintf( __('Installing Plugin: %s'), $api->name . ' ' . $api->version ); + $nonce = 'install-plugin_' . $plugin; + $url = 'update.php?action=install-plugin&plugin=' . urlencode( $plugin ); + if ( isset($_GET['from']) ) + $url .= '&from=' . urlencode(stripslashes($_GET['from'])); + + $type = 'web'; //Install plugin type, From Web or an Upload. + + $upgrader = new Plugin_Upgrader( new Plugin_Installer_Skin( compact('title', 'url', 'nonce', 'plugin', 'api') ) ); + $upgrader->install($api->download_link); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + } elseif ( 'upload-plugin' == $action ) { + + if ( ! current_user_can('install_plugins') ) + wp_die( __( 'You do not have sufficient permissions to install plugins on this site.' ) ); + + check_admin_referer('plugin-upload'); + + $file_upload = new File_Upload_Upgrader('pluginzip', 'package'); + + $title = __('Upload Plugin'); + $parent_file = 'plugins.php'; + $submenu_file = 'plugin-install.php'; + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + $title = sprintf( __('Installing Plugin from uploaded file: %s'), esc_html( basename( $file_upload->filename ) ) ); + $nonce = 'plugin-upload'; + $url = add_query_arg(array('package' => $file_upload->id), 'update.php?action=upload-plugin'); + $type = 'upload'; //Install plugin type, From Web or an Upload. + + $upgrader = new Plugin_Upgrader( new Plugin_Installer_Skin( compact('type', 'title', 'nonce', 'url') ) ); + $result = $upgrader->install( $file_upload->package ); + + if ( $result || is_wp_error($result) ) + $file_upload->cleanup(); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + } elseif ( 'upgrade-theme' == $action ) { + + if ( ! current_user_can('update_themes') ) + wp_die(__('You do not have sufficient permissions to update themes for this site.')); + + check_admin_referer('upgrade-theme_' . $theme); + + wp_enqueue_script( 'customize-loader' ); + + $title = __('Update Theme'); + $parent_file = 'themes.php'; + $submenu_file = 'themes.php'; + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + $nonce = 'upgrade-theme_' . $theme; + $url = 'update.php?action=upgrade-theme&theme=' . urlencode( $theme ); + + $upgrader = new Theme_Upgrader( new Theme_Upgrader_Skin( compact('title', 'nonce', 'url', 'theme') ) ); + $upgrader->upgrade($theme); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + } elseif ( 'update-selected-themes' == $action ) { + if ( ! current_user_can( 'update_themes' ) ) + wp_die( __( 'You do not have sufficient permissions to update themes for this site.' ) ); + + check_admin_referer( 'bulk-update-themes' ); + + if ( isset( $_GET['themes'] ) ) + $themes = explode( ',', stripslashes($_GET['themes']) ); + elseif ( isset( $_POST['checked'] ) ) + $themes = (array) $_POST['checked']; + else + $themes = array(); + + $themes = array_map('urldecode', $themes); + + $url = 'update.php?action=update-selected-themes&themes=' . urlencode(implode(',', $themes)); + $nonce = 'bulk-update-themes'; + + wp_enqueue_script('jquery'); + iframe_header(); + + $upgrader = new Theme_Upgrader( new Bulk_Theme_Upgrader_Skin( compact( 'nonce', 'url' ) ) ); + $upgrader->bulk_upgrade( $themes ); + + iframe_footer(); + } elseif ( 'install-theme' == $action ) { + + if ( ! current_user_can('install_themes') ) + wp_die( __( 'You do not have sufficient permissions to install themes on this site.' ) ); + + include_once ABSPATH . 'wp-admin/includes/theme-install.php'; //for themes_api.. + + check_admin_referer('install-theme_' . $theme); + $api = themes_api('theme_information', array('slug' => $theme, 'fields' => array('sections' => false, 'tags' => false) ) ); //Save on a bit of bandwidth. + + if ( is_wp_error($api) ) + wp_die($api); + + wp_enqueue_script( 'customize-loader' ); + + $title = __('Install Themes'); + $parent_file = 'themes.php'; + $submenu_file = 'themes.php'; + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + $title = sprintf( __('Installing Theme: %s'), $api->name . ' ' . $api->version ); + $nonce = 'install-theme_' . $theme; + $url = 'update.php?action=install-theme&theme=' . urlencode( $theme ); + $type = 'web'; //Install theme type, From Web or an Upload. + + $upgrader = new Theme_Upgrader( new Theme_Installer_Skin( compact('title', 'url', 'nonce', 'plugin', 'api') ) ); + $upgrader->install($api->download_link); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + } elseif ( 'upload-theme' == $action ) { + + if ( ! current_user_can('install_themes') ) + wp_die( __( 'You do not have sufficient permissions to install themes on this site.' ) ); + + check_admin_referer('theme-upload'); + + $file_upload = new File_Upload_Upgrader('themezip', 'package'); + + wp_enqueue_script( 'customize-loader' ); + + $title = __('Upload Theme'); + $parent_file = 'themes.php'; + $submenu_file = 'theme-install.php'; + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + $title = sprintf( __('Installing Theme from uploaded file: %s'), esc_html( basename( $file_upload->filename ) ) ); + $nonce = 'theme-upload'; + $url = add_query_arg(array('package' => $file_upload->id), 'update.php?action=upload-theme'); + $type = 'upload'; //Install plugin type, From Web or an Upload. + + $upgrader = new Theme_Upgrader( new Theme_Installer_Skin( compact('type', 'title', 'nonce', 'url') ) ); + $result = $upgrader->install( $file_upload->package ); + + if ( $result || is_wp_error($result) ) + $file_upload->cleanup(); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + } else { + /** + * Fires when a custom plugin or theme update request is received. + * + * The dynamic portion of the hook name, $action, refers to the action + * provided in the request for wp-admin/update.php. Can be used to + * provide custom update functionality for themes and plugins. + * + * @since 2.8.0 + */ + do_action( "update-custom_{$action}" ); + } +} diff --git a/src/wp-admin/upgrade-functions.php b/src/wp-admin/upgrade-functions.php new file mode 100644 index 0000000..080d74d --- /dev/null +++ b/src/wp-admin/upgrade-functions.php @@ -0,0 +1,12 @@ +db_version(); +$php_compat = version_compare( $php_version, $required_php_version, '>=' ); +if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) + $mysql_compat = true; +else + $mysql_compat = version_compare( $mysql_version, $required_mysql_version, '>=' ); + +@header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) ); +?> + +> + + + + <?php _e( 'WordPress › Update' ); ?> + + + +

    + + + +

    +

    +

    + +WordPress %1$s requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s.'), $wp_version, $required_php_version, $required_mysql_version, $php_version, $mysql_version ); + elseif ( !$php_compat ) + printf( __('You cannot update because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s.'), $wp_version, $required_php_version, $php_version ); + elseif ( !$mysql_compat ) + printf( __('You cannot update because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s.'), $wp_version, $required_mysql_version, $mysql_version ); +?> + +

    +

    +

    +

    + +

    +

    +

    + + + + + + diff --git a/src/wp-admin/upload.php b/src/wp-admin/upload.php new file mode 100644 index 0000000..df99809 --- /dev/null +++ b/src/wp-admin/upload.php @@ -0,0 +1,249 @@ +get_pagenum(); + +// Handle bulk actions +$doaction = $wp_list_table->current_action(); + +if ( $doaction ) { + check_admin_referer('bulk-media'); + + if ( 'delete_all' == $doaction ) { + $post_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type='attachment' AND post_status = 'trash'" ); + $doaction = 'delete'; + } elseif ( isset( $_REQUEST['media'] ) ) { + $post_ids = $_REQUEST['media']; + } elseif ( isset( $_REQUEST['ids'] ) ) { + $post_ids = explode( ',', $_REQUEST['ids'] ); + } + + $location = 'upload.php'; + if ( $referer = wp_get_referer() ) { + if ( false !== strpos( $referer, 'upload.php' ) ) + $location = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'message', 'ids', 'posted' ), $referer ); + } + + switch ( $doaction ) { + case 'find_detached': + if ( !current_user_can('edit_posts') ) + wp_die( __('You are not allowed to scan for lost attachments.') ); + + $lost = $wpdb->get_col( " + SELECT ID FROM $wpdb->posts + WHERE post_type = 'attachment' AND post_parent > '0' + AND post_parent NOT IN ( + SELECT ID FROM $wpdb->posts + WHERE post_type NOT IN ( 'attachment', '" . join( "', '", get_post_types( array( 'public' => false ) ) ) . "' ) + ) + " ); + + $_REQUEST['detached'] = 1; + break; + case 'attach': + $parent_id = (int) $_REQUEST['found_post_id']; + if ( !$parent_id ) + return; + + $parent = get_post( $parent_id ); + if ( !current_user_can( 'edit_post', $parent_id ) ) + wp_die( __( 'You are not allowed to edit this post.' ) ); + + $attach = array(); + foreach ( (array) $_REQUEST['media'] as $att_id ) { + $att_id = (int) $att_id; + + if ( !current_user_can( 'edit_post', $att_id ) ) + continue; + + $attach[] = $att_id; + } + + if ( ! empty( $attach ) ) { + $attach_string = implode( ',', $attach ); + $attached = $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_parent = %d WHERE post_type = 'attachment' AND ID IN ( $attach_string )", $parent_id ) ); + foreach ( $attach as $att_id ) { + clean_attachment_cache( $att_id ); + } + } + + if ( isset( $attached ) ) { + $location = 'upload.php'; + if ( $referer = wp_get_referer() ) { + if ( false !== strpos( $referer, 'upload.php' ) ) + $location = $referer; + } + + $location = add_query_arg( array( 'attached' => $attached ) , $location ); + wp_redirect( $location ); + exit; + } + break; + case 'trash': + if ( !isset( $post_ids ) ) + break; + foreach ( (array) $post_ids as $post_id ) { + if ( !current_user_can( 'delete_post', $post_id ) ) + wp_die( __( 'You are not allowed to move this post to the trash.' ) ); + + if ( !wp_trash_post( $post_id ) ) + wp_die( __( 'Error in moving to trash.' ) ); + } + $location = add_query_arg( array( 'trashed' => count( $post_ids ), 'ids' => join( ',', $post_ids ) ), $location ); + break; + case 'untrash': + if ( !isset( $post_ids ) ) + break; + foreach ( (array) $post_ids as $post_id ) { + if ( !current_user_can( 'delete_post', $post_id ) ) + wp_die( __( 'You are not allowed to move this post out of the trash.' ) ); + + if ( !wp_untrash_post( $post_id ) ) + wp_die( __( 'Error in restoring from trash.' ) ); + } + $location = add_query_arg( 'untrashed', count( $post_ids ), $location ); + break; + case 'delete': + if ( !isset( $post_ids ) ) + break; + foreach ( (array) $post_ids as $post_id_del ) { + if ( !current_user_can( 'delete_post', $post_id_del ) ) + wp_die( __( 'You are not allowed to delete this post.' ) ); + + if ( !wp_delete_attachment( $post_id_del ) ) + wp_die( __( 'Error in deleting.' ) ); + } + $location = add_query_arg( 'deleted', count( $post_ids ), $location ); + break; + } + + wp_redirect( $location ); + exit; +} elseif ( ! empty( $_GET['_wp_http_referer'] ) ) { + wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); + exit; +} + +$wp_list_table->prepare_items(); + +$title = __('Media Library'); +$parent_file = 'upload.php'; + +wp_enqueue_script( 'wp-ajax-response' ); +wp_enqueue_script( 'jquery-ui-draggable' ); +wp_enqueue_script( 'media' ); + +add_screen_option( 'per_page', array('label' => _x( 'Media items', 'items per page (screen options)' )) ); + +get_current_screen()->add_help_tab( array( +'id' => 'overview', +'title' => __('Overview'), +'content' => + '

    ' . __( 'All the files you’ve uploaded are listed in the Media Library, with the most recent uploads listed first. You can use the Screen Options tab to customize the display of this screen.' ) . '

    ' . + '

    ' . __( 'You can narrow the list by file type/status using the text link filters at the top of the screen. You also can refine the list by date using the dropdown menu above the media table.' ) . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'actions-links', +'title' => __('Available Actions'), +'content' => + '

    ' . __( 'Hovering over a row reveals action links: Edit, Delete Permanently, and View. Clicking Edit or on the media file’s name displays a simple screen to edit that individual file’s metadata. Clicking Delete Permanently will delete the file from the media library (as well as from any posts to which it is currently attached). View will take you to the display page for that file.' ) . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'attaching-files', +'title' => __('Attaching Files'), +'content' => + '

    ' . __( 'If a media file has not been attached to any post, you will see that in the Attached To column, and can click on Attach File to launch a small popup that will allow you to search for a post and attach the file.' ) . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __( 'For more information:' ) . '

    ' . + '

    ' . __( 'Documentation on Media Library' ) . '

    ' . + '

    ' . __( 'Support Forums' ) . '

    ' +); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + + ' . __('Search results for “%s”') . '', get_search_query() ); ?> +

    + +' . __('Undo') . ''; + $_SERVER['REQUEST_URI'] = remove_query_arg(array('trashed'), $_SERVER['REQUEST_URI']); +} + +if ( ! empty( $_GET['untrashed'] ) && $untrashed = absint( $_GET['untrashed'] ) ) { + $message = sprintf( _n( 'Media attachment restored from the trash.', '%d media attachments restored from the trash.', $untrashed ), number_format_i18n( $_GET['untrashed'] ) ); + $_SERVER['REQUEST_URI'] = remove_query_arg(array('untrashed'), $_SERVER['REQUEST_URI']); +} + +$messages[1] = __('Media attachment updated.'); +$messages[2] = __('Media permanently deleted.'); +$messages[3] = __('Error saving media attachment.'); +$messages[4] = __('Media moved to the trash.') . ' ' . __('Undo') . ''; +$messages[5] = __('Media restored from the trash.'); + +if ( ! empty( $_GET['message'] ) && isset( $messages[ $_GET['message'] ] ) ) { + $message = $messages[ $_GET['message'] ]; + $_SERVER['REQUEST_URI'] = remove_query_arg(array('message'), $_SERVER['REQUEST_URI']); +} + +if ( !empty($message) ) { ?> +

    + + +views(); ?> + +
    + +search_box( __( 'Search Media' ), 'media' ); ?> + +display(); ?> + +
    + +
    + +
    +
    + +ID ) ); + +if ( ! $user_id && IS_PROFILE_PAGE ) + $user_id = $current_user->ID; +elseif ( ! $user_id && ! IS_PROFILE_PAGE ) + wp_die(__( 'Invalid user ID.' ) ); +elseif ( ! get_userdata( $user_id ) ) + wp_die( __('Invalid user ID.') ); + +wp_enqueue_script('user-profile'); + +$title = IS_PROFILE_PAGE ? __('Profile') : __('Edit User'); +if ( current_user_can('edit_users') && !IS_PROFILE_PAGE ) + $submenu_file = 'users.php'; +else + $submenu_file = 'profile.php'; + +if ( current_user_can('edit_users') && !is_user_admin() ) + $parent_file = 'users.php'; +else + $parent_file = 'profile.php'; + +$profile_help = '

    ' . __('Your profile contains information about you (your “account”) as well as some personal options related to using WordPress.') . '

    ' . + '

    ' . __('You can change your password, turn on keyboard shortcuts, change the color scheme of your WordPress administration screens, and turn off the WYSIWYG (Visual) editor, among other things. You can hide the Toolbar (formerly called the Admin Bar) from the front end of your site, however it cannot be disabled on the admin screens.') . '

    ' . + '

    ' . __('Your username cannot be changed, but you can use other fields to enter your real name or a nickname, and change which name to display on your posts.') . '

    ' . + '

    ' . __('Required fields are indicated; the rest are optional. Profile information will only be displayed if your theme is set up to do so.') . '

    ' . + '

    ' . __('Remember to click the Update Profile button when you are finished.') . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => $profile_help, +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on User Profiles') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +$wp_http_referer = remove_query_arg(array('update', 'delete_count'), $wp_http_referer ); + +$user_can_edit = current_user_can( 'edit_posts' ) || current_user_can( 'edit_pages' ); + +/** + * Optional SSL preference that can be turned on by hooking to the 'personal_options' action. + * + * @since 2.7.0 + * + * @param object $user User data object + */ +function use_ssl_preference($user) { +?> + + + + +ID + && ! apply_filters( 'enable_edit_any_user_configuration', true ) +) { + wp_die( __( 'You do not have permission to edit this user.' ) ); +} + +// Execute confirmed email change. See send_confirmation_on_profile_email(). +if ( is_multisite() && IS_PROFILE_PAGE && isset( $_GET[ 'newuseremail' ] ) && $current_user->ID ) { + $new_email = get_option( $current_user->ID . '_new_email' ); + if ( $new_email[ 'hash' ] == $_GET[ 'newuseremail' ] ) { + $user = new stdClass; + $user->ID = $current_user->ID; + $user->user_email = esc_html( trim( $new_email[ 'newemail' ] ) ); + if ( $wpdb->get_var( $wpdb->prepare( "SELECT user_login FROM {$wpdb->signups} WHERE user_login = %s", $current_user->user_login ) ) ) + $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->signups} SET user_email = %s WHERE user_login = %s", $user->user_email, $current_user->user_login ) ); + wp_update_user( $user ); + delete_option( $current_user->ID . '_new_email' ); + wp_redirect( add_query_arg( array('updated' => 'true'), self_admin_url( 'profile.php' ) ) ); + die(); + } +} elseif ( is_multisite() && IS_PROFILE_PAGE && !empty( $_GET['dismiss'] ) && $current_user->ID . '_new_email' == $_GET['dismiss'] ) { + delete_option( $current_user->ID . '_new_email' ); + wp_redirect( add_query_arg( array('updated' => 'true'), self_admin_url( 'profile.php' ) ) ); + die(); +} + +switch ($action) { +case 'update': + +check_admin_referer('update-user_' . $user_id); + +if ( !current_user_can('edit_user', $user_id) ) + wp_die(__('You do not have permission to edit this user.')); + +if ( IS_PROFILE_PAGE ) { + /** + * Fires before the page loads on the 'Your Profile' editing screen. + * + * The action only fires if the current user is editing their own profile. + * + * @since 2.0.0 + * + * @param int $user_id The user ID. + */ + do_action( 'personal_options_update', $user_id ); +} else { + /** + * Fires before the page loads on the 'Edit User' screen. + * + * @since 2.7.0 + * + * @param int $user_id The user ID. + */ + do_action( 'edit_user_profile_update', $user_id ); +} + +if ( !is_multisite() ) { + $errors = edit_user($user_id); +} else { + $user = get_userdata( $user_id ); + + // Update the email address in signups, if present. + if ( $user->user_login && isset( $_POST[ 'email' ] ) && is_email( $_POST[ 'email' ] ) && $wpdb->get_var( $wpdb->prepare( "SELECT user_login FROM {$wpdb->signups} WHERE user_login = %s", $user->user_login ) ) ) + $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->signups} SET user_email = %s WHERE user_login = %s", $_POST[ 'email' ], $user_login ) ); + + // We must delete the user from the current blog if WP added them after editing. + $delete_role = false; + $blog_prefix = $wpdb->get_blog_prefix(); + if ( $user_id != $current_user->ID ) { + $cap = $wpdb->get_var( "SELECT meta_value FROM {$wpdb->usermeta} WHERE user_id = '{$user_id}' AND meta_key = '{$blog_prefix}capabilities' AND meta_value = 'a:0:{}'" ); + if ( !is_network_admin() && null == $cap && $_POST[ 'role' ] == '' ) { + $_POST[ 'role' ] = 'contributor'; + $delete_role = true; + } + } + if ( !isset( $errors ) || ( isset( $errors ) && is_object( $errors ) && false == $errors->get_error_codes() ) ) + $errors = edit_user($user_id); + if ( $delete_role ) // stops users being added to current blog when they are edited + delete_user_meta( $user_id, $blog_prefix . 'capabilities' ); + + if ( is_multisite() && is_network_admin() && !IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && !isset($super_admins) && empty( $_POST['super_admin'] ) == is_super_admin( $user_id ) ) + empty( $_POST['super_admin'] ) ? revoke_super_admin( $user_id ) : grant_super_admin( $user_id ); +} + +if ( !is_wp_error( $errors ) ) { + $redirect = add_query_arg( 'updated', true, get_edit_user_link( $user_id ) ); + if ( $wp_http_referer ) + $redirect = add_query_arg('wp_http_referer', urlencode($wp_http_referer), $redirect); + wp_redirect($redirect); + exit; +} + +default: +$profileuser = get_user_to_edit($user_id); + +if ( !current_user_can('edit_user', $user_id) ) + wp_die(__('You do not have permission to edit this user.')); + +include (ABSPATH . 'wp-admin/admin-header.php'); +?> + +ID ) && current_user_can( 'manage_network_options' ) ) { ?> +

    + + +
    + +

    + +

    + + +

    + +
    + + +

    \n

    ", $errors->get_error_messages() ); ?>

    + + +
    +

    + + + + + +

    + +
    > + + + + +

    + + +

    + +

    + + + + + + + + + 1 && has_action('admin_color_scheme_picker') ) : ?> + + + + + + + + + + + + + + + + +
    More information'); ?>
    +
    +
    +
    + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +user_email != get_site_option( 'admin_email' ) || ! is_super_admin( $profileuser->ID ) ) : ?> +

    + +

    + +
    + +
    + +

    + + + + + + + + + + + + + $desc ) { +?> + + + + + + +
    + ID . '_new_email' ); + if ( $new_email && $new_email['newemail'] != $current_user->user_email && $profileuser->ID == $current_user->ID ) : ?> +
    +

    %1$s. Cancel'), $new_email['newemail'], esc_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ) ) ); ?>

    +
    + +
    + +

    + + + + + + + + + + + + + + + + + +

    +
    + +
    + +
    +
    + +
    +
    +

    +
    + + + +caps ) > count( $profileuser->roles ) + && apply_filters( 'additional_capabilities_display', true, $profileuser ) +) : ?> +

    + + + + + +
    +caps as $cap => $value ) { + if ( ! $wp_roles->is_role( $cap ) ) { + if ( '' != $output ) + $output .= ', '; + $output .= $value ? $cap : sprintf( __( 'Denied: %s' ), $cap ); + } + } + echo $output; +?> +
    + + + + + + + +
    +
    + + + 'enter_email'), 'user-new.php' ) ); + die(); + } + } + + if ( !$user_details ) { + wp_redirect( add_query_arg( array('update' => 'does_not_exist'), 'user-new.php' ) ); + die(); + } + + if ( ! current_user_can('promote_user', $user_details->ID) ) + wp_die(__('Cheatin’ uh?')); + + // Adding an existing user to this blog + $new_user_email = $user_details->user_email; + $redirect = 'user-new.php'; + $username = $user_details->user_login; + $user_id = $user_details->ID; + if ( ( $username != null && !is_super_admin( $user_id ) ) && ( array_key_exists($blog_id, get_blogs_of_user($user_id)) ) ) { + $redirect = add_query_arg( array('update' => 'addexisting'), 'user-new.php' ); + } else { + if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) { + add_existing_user_to_blog( array( 'user_id' => $user_id, 'role' => $_REQUEST[ 'role' ] ) ); + $redirect = add_query_arg( array('update' => 'addnoconfirmation'), 'user-new.php' ); + } else { + $newuser_key = substr( md5( $user_id ), 0, 5 ); + add_option( 'new_user_' . $newuser_key, array( 'user_id' => $user_id, 'email' => $user_details->user_email, 'role' => $_REQUEST[ 'role' ] ) ); + + $roles = get_editable_roles(); + $role = $roles[ $_REQUEST['role'] ]; + /* translators: 1: Site name, 2: site URL, 3: role, 4: activation URL */ + $message = __( 'Hi, + +You\'ve been invited to join \'%1$s\' at +%2$s with the role of %3$s. + +Please click the following link to confirm the invite: +%4$s' ); + wp_mail( $new_user_email, sprintf( __( '[%s] Joining confirmation' ), get_option( 'blogname' ) ), sprintf( $message, get_option( 'blogname' ), home_url(), wp_specialchars_decode( translate_user_role( $role['name'] ) ), home_url( "/newbloguser/$newuser_key/" ) ) ); + $redirect = add_query_arg( array('update' => 'add'), 'user-new.php' ); + } + } + wp_redirect( $redirect ); + die(); +} elseif ( isset($_REQUEST['action']) && 'createuser' == $_REQUEST['action'] ) { + check_admin_referer( 'create-user', '_wpnonce_create-user' ); + + if ( ! current_user_can('create_users') ) + wp_die(__('Cheatin’ uh?')); + + if ( ! is_multisite() ) { + $user_id = edit_user(); + + if ( is_wp_error( $user_id ) ) { + $add_user_errors = $user_id; + } else { + if ( current_user_can( 'list_users' ) ) + $redirect = 'users.php?update=add&id=' . $user_id; + else + $redirect = add_query_arg( 'update', 'add', 'user-new.php' ); + wp_redirect( $redirect ); + die(); + } + } else { + // Adding a new user to this site + $user_details = wpmu_validate_user_signup( $_REQUEST[ 'user_login' ], $_REQUEST[ 'email' ] ); + if ( is_wp_error( $user_details[ 'errors' ] ) && !empty( $user_details[ 'errors' ]->errors ) ) { + $add_user_errors = $user_details[ 'errors' ]; + } else { + /** + * Filter the user_login, also known as the username, before it is added to the site. + * + * @since 2.0.3 + * + * @param string $user_login The sanitized username. + */ + $new_user_login = apply_filters( 'pre_user_login', sanitize_user( wp_unslash( $_REQUEST['user_login'] ), true ) ); + if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) { + add_filter( 'wpmu_signup_user_notification', '__return_false' ); // Disable confirmation email + } + wpmu_signup_user( $new_user_login, $_REQUEST[ 'email' ], array( 'add_to_blog' => $wpdb->blogid, 'new_role' => $_REQUEST[ 'role' ] ) ); + if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) { + $key = $wpdb->get_var( $wpdb->prepare( "SELECT activation_key FROM {$wpdb->signups} WHERE user_login = %s AND user_email = %s", $new_user_login, $_REQUEST[ 'email' ] ) ); + wpmu_activate_signup( $key ); + $redirect = add_query_arg( array('update' => 'addnoconfirmation'), 'user-new.php' ); + } else { + $redirect = add_query_arg( array('update' => 'newuserconfirmation'), 'user-new.php' ); + } + wp_redirect( $redirect ); + die(); + } + } +} + +$title = __('Add New User'); +$parent_file = 'users.php'; + +$do_both = false; +if ( is_multisite() && current_user_can('promote_users') && current_user_can('create_users') ) + $do_both = true; + +$help = '

    ' . __('To add a new user to your site, fill in the form on this screen and click the Add New User button at the bottom.') . '

    '; + +if ( is_multisite() ) { + $help .= '

    ' . __('Because this is a multisite installation, you may add accounts that already exist on the Network by specifying a username or email, and defining a role. For more options, such as specifying a password, you have to be a Network Administrator and use the hover link under an existing user’s name to Edit the user profile under Network Admin > All Users.') . '

    ' . + '

    ' . __('New users will receive an email letting them know they’ve been added as a user for your site. This email will also contain their password. Check the box if you don’t want the user to receive a welcome email.') . '

    '; +} else { + $help .= '

    ' . __('You must assign a password to the new user, which they can change after logging in. The username, however, cannot be changed.') . '

    ' . + '

    ' . __('New users will receive an email letting them know they’ve been added as a user for your site. By default, this email will also contain their password. Uncheck the box if you don’t want the password to be included in the welcome email.') . '

    '; +} + +$help .= '

    ' . __('Remember to click the Add New User button at the bottom of this screen when you are finished.') . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => $help, +) ); + +get_current_screen()->add_help_tab( array( +'id' => 'user-roles', +'title' => __('User Roles'), +'content' => '

    ' . __('Here is a basic overview of the different user roles and the permissions associated with each one:') . '

    ' . + '
      ' . + '
    • ' . __('Administrators have access to all the administration features.') . '
    • ' . + '
    • ' . __('Editors can publish posts, manage posts as well as manage other people’s posts, etc.') . '
    • ' . + '
    • ' . __('Authors can publish and manage their own posts, and are able to upload files.') . '
    • ' . + '
    • ' . __('Contributors can write and manage their posts but not publish posts or upload media files.') . '
    • ' . + '
    • ' . __('Subscribers can read comments/comment/receive newsletters, etc. but cannot create regular site content.') . '
    • ' . + '
    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Adding New Users') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +wp_enqueue_script('wp-ajax-response'); +wp_enqueue_script('user-profile'); + +/** + * Filter whether to enable user auto-complete for non-super admins in Multisite. + * + * @since 3.4.0 + * + * @param bool $enable Whether to enable auto-complete for non-super admins. Default false. + */ +if ( is_multisite() && current_user_can( 'promote_users' ) && ! wp_is_large_network( 'users' ) + && ( is_super_admin() || apply_filters( 'autocomplete_users_for_site_admins', false ) ) +) { + wp_enqueue_script( 'user-suggest' ); +} + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +if ( isset($_GET['update']) ) { + $messages = array(); + if ( is_multisite() ) { + switch ( $_GET['update'] ) { + case "newuserconfirmation": + $messages[] = __('Invitation email sent to new user. A confirmation link must be clicked before their account is created.'); + break; + case "add": + $messages[] = __('Invitation email sent to user. A confirmation link must be clicked for them to be added to your site.'); + break; + case "addnoconfirmation": + $messages[] = __('User has been added to your site.'); + break; + case "addexisting": + $messages[] = __('That user is already a member of this site.'); + break; + case "does_not_exist": + $messages[] = __('The requested user does not exist.'); + break; + case "enter_email": + $messages[] = __('Please enter a valid email address.'); + break; + } + } else { + if ( 'add' == $_GET['update'] ) + $messages[] = __('User added.'); + } +} +?> +
    +

    +

    + + +
    +
      + get_error_messages() as $err ) + echo "
    • $err
    • \n"; + ?> +
    +
    +

    ' . $msg . '

    '; +} ?> + + +
    + get_error_messages() as $message ) + echo "

    $message

    "; + ?> +
    + +
    + +' . __('Add Existing User') . ''; + if ( !is_super_admin() ) { + _e( 'Enter the email address of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ); + $label = __('E-mail'); + } else { + _e( 'Enter the email address or username of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ); + $label = __('E-mail or Username'); + } +?> + +
    > + + + + + + + + + + + + + + + + + + +
    +
    + + 'addusersub' ) ); ?> +
    +' . __( 'Add New User' ) . ''; +?> +

    + +
    > + + + 'login', 'first_name' => 'firstname', 'last_name' => 'lastname', + 'email' => 'email', 'url' => 'uri', 'role' => 'role', 'send_password' => 'send_password', 'noconfirmation' => 'ignore_pass' ) as $post_field => $var ) { + $var = "new_user_$var"; + if( isset( $_POST['createuser'] ) ) { + if ( ! isset($$var) ) + $$var = isset( $_POST[$post_field] ) ? wp_unslash( $_POST[$post_field] ) : ''; + } else { + $$var = false; + } +} + +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +

    +
    +
    + + + + 'createusersub' ) ); ?> + +
    + + +domain != $current_site->domain ) || ( $current_blog->path != $current_site->path ) ); +/** + * Filter whether a user should be redirected to the Global Dashboard in Multisite. + * + * Users not assigned to any sites in the network will be redirected to the Global + * Dashboard after logging in. + * + * @since 3.2.0 + * + * @param bool $redirect_user_admin_request Whether the request should be redirected. + */ +$redirect_user_admin_request = apply_filters( 'redirect_user_admin_request', $redirect_user_admin_request ); +if ( $redirect_user_admin_request ) { + wp_redirect( user_admin_url() ); + exit; +} +unset( $redirect_user_admin_request ); diff --git a/src/wp-admin/user/credits.php b/src/wp-admin/user/credits.php new file mode 100644 index 0000000..2b4021a --- /dev/null +++ b/src/wp-admin/user/credits.php @@ -0,0 +1,13 @@ +get_pagenum(); +$title = __('Users'); +$parent_file = 'users.php'; + +add_screen_option( 'per_page', array('label' => _x( 'Users', 'users per page (screen options)' )) ); + +// contextual help - choose Help on the top right of admin panel to preview this. +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

    ' . __('This screen lists all the existing users for your site. Each user has one of five defined roles as set by the site admin: Site Administrator, Editor, Author, Contributor, or Subscriber. Users with roles other than Administrator will see fewer options in the dashboard navigation when they are logged in, based on their role.') . '

    ' . + '

    ' . __('To add a new user for your site, click the Add New button at the top of the screen or Add New in the Users menu section.') . '

    ' +) ) ; + +get_current_screen()->add_help_tab( array( + 'id' => 'screen-display', + 'title' => __('Screen Display'), + 'content' => '

    ' . __('You can customize the display of this screen in a number of ways:') . '

    ' . + '
      ' . + '
    • ' . __('You can hide/display columns based on your needs and decide how many users to list per screen using the Screen Options tab.') . '
    • ' . + '
    • ' . __('You can filter the list of users by User Role using the text links in the upper left to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed.') . '
    • ' . + '
    • ' . __('You can view all posts made by a user by clicking on the number under the Posts column.') . '
    • ' . + '
    ' +) ); + +$help = '

    ' . __('Hovering over a row in the users list will display action links that allow you to manage users. You can perform the following actions:') . '

    ' . + '
      ' . + '
    • ' . __('Edit takes you to the editable profile screen for that user. You can also reach that screen by clicking on the username.') . '
    • '; + +if ( is_multisite() ) + $help .= '
    • ' . __( 'Remove allows you to remove a user from your site. It does not delete their posts. You can also remove multiple users at once by using Bulk Actions.' ) . '
    • '; +else + $help .= '
    • ' . __( 'Delete brings you to the Delete Users screen for confirmation, where you can permanently remove a user from your site and delete their posts. You can also delete multiple users at once by using Bulk Actions.' ) . '
    • '; + +$help .= '
    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'actions', + 'title' => __('Actions'), + 'content' => $help, +) ); +unset( $help ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Managing Users') . '

    ' . + '

    ' . __('Descriptions of Roles and Capabilities') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +if ( empty($_REQUEST) ) { + $referer = ''; +} elseif ( isset($_REQUEST['wp_http_referer']) ) { + $redirect = remove_query_arg(array('wp_http_referer', 'updated', 'delete_count'), wp_unslash( $_REQUEST['wp_http_referer'] ) ); + $referer = ''; +} else { + $redirect = 'users.php'; + $referer = ''; +} + +$update = ''; + +/** + * @since 3.5.0 + * @access private + */ +function delete_users_add_js() { ?> + +current_action() ) { + +/* Bulk Dropdown menu Role changes */ +case 'promote': + check_admin_referer('bulk-users'); + + if ( ! current_user_can( 'promote_users' ) ) + wp_die( __( 'You can’t edit that user.' ) ); + + if ( empty($_REQUEST['users']) ) { + wp_redirect($redirect); + exit(); + } + + $editable_roles = get_editable_roles(); + if ( empty( $editable_roles[$_REQUEST['new_role']] ) ) + wp_die(__('You can’t give users that role.')); + + $userids = $_REQUEST['users']; + $update = 'promote'; + foreach ( $userids as $id ) { + $id = (int) $id; + + if ( ! current_user_can('promote_user', $id) ) + wp_die(__('You can’t edit that user.')); + // The new role of the current user must also have the promote_users cap or be a multisite super admin + if ( $id == $current_user->ID && ! $wp_roles->role_objects[ $_REQUEST['new_role'] ]->has_cap('promote_users') + && ! ( is_multisite() && is_super_admin() ) ) { + $update = 'err_admin_role'; + continue; + } + + // If the user doesn't already belong to the blog, bail. + if ( is_multisite() && !is_user_member_of_blog( $id ) ) + wp_die(__('Cheatin’ uh?')); + + $user = get_userdata( $id ); + $user->set_role($_REQUEST['new_role']); + } + + wp_redirect(add_query_arg('update', $update, $redirect)); + exit(); + +break; + +case 'dodelete': + if ( is_multisite() ) + wp_die( __('User deletion is not allowed from this screen.') ); + + check_admin_referer('delete-users'); + + if ( empty($_REQUEST['users']) ) { + wp_redirect($redirect); + exit(); + } + + $userids = array_map( 'intval', (array) $_REQUEST['users'] ); + + if ( empty( $_REQUEST['delete_option'] ) ) { + $url = self_admin_url( 'users.php?action=delete&users[]=' . implode( '&users[]=', $userids ) . '&error=true' ); + $url = str_replace( '&', '&', wp_nonce_url( $url, 'bulk-users' ) ); + wp_redirect( $url ); + exit; + } + + if ( ! current_user_can( 'delete_users' ) ) + wp_die(__('You can’t delete users.')); + + $update = 'del'; + $delete_count = 0; + + foreach ( $userids as $id ) { + if ( ! current_user_can( 'delete_user', $id ) ) + wp_die(__( 'You can’t delete that user.' ) ); + + if ( $id == $current_user->ID ) { + $update = 'err_admin_del'; + continue; + } + switch ( $_REQUEST['delete_option'] ) { + case 'delete': + wp_delete_user( $id ); + break; + case 'reassign': + wp_delete_user( $id, $_REQUEST['reassign_user'] ); + break; + } + ++$delete_count; + } + + $redirect = add_query_arg( array('delete_count' => $delete_count, 'update' => $update), $redirect); + wp_redirect($redirect); + exit(); + +break; + +case 'delete': + if ( is_multisite() ) + wp_die( __('User deletion is not allowed from this screen.') ); + + check_admin_referer('bulk-users'); + + if ( empty($_REQUEST['users']) && empty($_REQUEST['user']) ) { + wp_redirect($redirect); + exit(); + } + + if ( ! current_user_can( 'delete_users' ) ) + $errors = new WP_Error( 'edit_users', __( 'You can’t delete users.' ) ); + + if ( empty($_REQUEST['users']) ) + $userids = array( intval( $_REQUEST['user'] ) ); + else + $userids = array_map( 'intval', (array) $_REQUEST['users'] ); + + add_action( 'admin_head', 'delete_users_add_js' ); + + include( ABSPATH . 'wp-admin/admin-header.php' ); +?> +
    + + + +
    +

    + +
    +

    +
    + +

    +
      +ID ) { + echo "
    • " . sprintf(__('ID #%1$s: %2$s The current user will not be deleted.'), $id, $user->user_login) . "
    • \n"; + } else { + echo "
    • " . sprintf(__('ID #%1$s: %2$s'), $id, $user->user_login) . "
    • \n"; + $go_delete++; + } + } + ?> +
    + +

    +
      +
    • +
    • + ' . __( 'Attribute all posts to:' ) . ' '; + wp_dropdown_users( array( 'name' => 'reassign_user', 'exclude' => array_diff( $userids, array($current_user->ID) ) ) ); ?>
    • +
    + + + +

    + +
    +
    +ID && !is_super_admin() ) { + $update = 'err_admin_remove'; + continue; + } + if ( !current_user_can('remove_user', $id) ) { + $update = 'err_admin_remove'; + continue; + } + remove_user_from_blog($id, $blog_id); + } + + $redirect = add_query_arg( array('update' => $update), $redirect); + wp_redirect($redirect); + exit; + +break; + +case 'remove': + + check_admin_referer('bulk-users'); + + if ( ! is_multisite() ) + wp_die( __( 'You can’t remove users.' ) ); + + if ( empty($_REQUEST['users']) && empty($_REQUEST['user']) ) { + wp_redirect($redirect); + exit(); + } + + if ( !current_user_can('remove_users') ) + $error = new WP_Error('edit_users', __('You can’t remove users.')); + + if ( empty($_REQUEST['users']) ) + $userids = array(intval($_REQUEST['user'])); + else + $userids = $_REQUEST['users']; + + include( ABSPATH . 'wp-admin/admin-header.php' ); +?> +
    + + + +
    +

    +

    +
      +ID && !is_super_admin() ) { + echo "
    • " . sprintf(__('ID #%1$s: %2$s The current user will not be removed.'), $id, $user->user_login) . "
    • \n"; + } elseif ( !current_user_can('remove_user', $id) ) { + echo "
    • " . sprintf(__('ID #%1$s: %2$s You don\'t have permission to remove this user.'), $id, $user->user_login) . "
    • \n"; + } else { + echo "
    • " . sprintf(__('ID #%1$s: %2$s'), $id, $user->user_login) . "
    • \n"; + $go_remove = true; + } + } + ?> + + + + +

      + +
    +
    +prepare_items(); + $total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); + if ( $pagenum > $total_pages && $total_pages > 0 ) { + wp_redirect( add_query_arg( 'paged', $total_pages ) ); + exit; + } + + include( ABSPATH . 'wp-admin/admin-header.php' ); + + $messages = array(); + if ( isset($_GET['update']) ) : + switch($_GET['update']) { + case 'del': + case 'del_many': + $delete_count = isset($_GET['delete_count']) ? (int) $_GET['delete_count'] : 0; + $messages[] = '

    ' . sprintf( _n( 'User deleted.', '%s users deleted.', $delete_count ), number_format_i18n( $delete_count ) ) . '

    '; + break; + case 'add': + if ( isset( $_GET['id'] ) && ( $user_id = $_GET['id'] ) && current_user_can( 'edit_user', $user_id ) ) { + $messages[] = '

    ' . sprintf( __( 'New user created. Edit user' ), + esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), + self_admin_url( 'user-edit.php?user_id=' . $user_id ) ) ) ) . '

    '; + } else { + $messages[] = '

    ' . __( 'New user created.' ) . '

    '; + } + break; + case 'promote': + $messages[] = '

    ' . __('Changed roles.') . '

    '; + break; + case 'err_admin_role': + $messages[] = '

    ' . __('The current user’s role must have user editing capabilities.') . '

    '; + $messages[] = '

    ' . __('Other user roles have been changed.') . '

    '; + break; + case 'err_admin_del': + $messages[] = '

    ' . __('You can’t delete the current user.') . '

    '; + $messages[] = '

    ' . __('Other users have been deleted.') . '

    '; + break; + case 'remove': + $messages[] = '

    ' . __('User removed from this site.') . '

    '; + break; + case 'err_admin_remove': + $messages[] = '

    ' . __("You can't remove the current user.") . '

    '; + $messages[] = '

    ' . __('Other users have been removed.') . '

    '; + break; + } + endif; ?> + + +
    +
      + get_error_messages() as $err ) + echo "
    • $err
    • \n"; + ?> +
    +
    + + +
    +

    + + + + +' . __('Search results for “%s”') . '', esc_html( $usersearch ) ); ?> +

    + +views(); ?> + +
    + +search_box( __( 'Search Users' ), 'user' ); ?> + +display(); ?> +
    + +
    +
    +add_help_tab( array( +'id' => 'overview', +'title' => __('Overview'), +'content' => + '

    ' . __('Widgets are independent sections of content that can be placed into any widgetized area provided by your theme (commonly called sidebars). To populate your sidebars/widget areas with individual widgets, drag and drop the title bars into the desired area. By default, only the first widget area is expanded. To populate additional widget areas, click on their title bars to expand them.') . '

    +

    ' . __('The Available Widgets section contains all the widgets you can choose from. Once you drag a widget into a sidebar, it will open to allow you to configure its settings. When you are happy with the widget settings, click the Save button and the widget will go live on your site. If you click Delete, it will remove the widget.') . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'removing-reusing', +'title' => __('Removing and Reusing'), +'content' => + '

    ' . __('If you want to remove the widget but save its setting for possible future use, just drag it into the Inactive Widgets area. You can add them back anytime from there. This is especially helpful when you switch to a theme with fewer or different widget areas.') . '

    +

    ' . __('Widgets may be used multiple times. You can give each widget a title, to display on your site, but it’s not required.') . '

    +

    ' . __('Enabling Accessibility Mode, via Screen Options, allows you to use Add and Edit buttons instead of using drag and drop.') . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'missing-widgets', +'title' => __('Missing Widgets'), +'content' => + '

    ' . __('Many themes show some sidebar widgets by default until you edit your sidebars, but they are not automatically displayed in your sidebar management tool. After you make your first widget change, you can re-add the default widgets by adding them from the Available Widgets area.') . '

    ' . + '

    ' . __('When changing themes, there is often some variation in the number and setup of widget areas/sidebars and sometimes these conflicts make the transition a bit less smooth. If you changed themes and seem to be missing widgets, scroll down on this screen to the Inactive Widgets area, where all of your widgets and their settings will have been saved.') . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Widgets') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +if ( ! current_theme_supports( 'widgets' ) ) { + wp_die( __( 'The theme you are currently using isn’t widget-aware, meaning that it has no sidebars that you are able to change. For information on making your theme widget-aware, please follow these instructions.' ) ); +} + +// These are the widgets grouped by sidebar +$sidebars_widgets = wp_get_sidebars_widgets(); + +if ( empty( $sidebars_widgets ) ) + $sidebars_widgets = wp_get_widget_defaults(); + +foreach ( $sidebars_widgets as $sidebar_id => $widgets ) { + if ( 'wp_inactive_widgets' == $sidebar_id ) + continue; + + if ( !isset( $wp_registered_sidebars[ $sidebar_id ] ) ) { + if ( ! empty( $widgets ) ) { // register the inactive_widgets area as sidebar + register_sidebar(array( + 'name' => __( 'Inactive Sidebar (not used)' ), + 'id' => $sidebar_id, + 'class' => 'inactive-sidebar orphan-sidebar', + 'description' => __( 'This sidebar is no longer available and does not show anywhere on your site. Remove each of the widgets below to fully remove this inactive sidebar.' ), + 'before_widget' => '', + 'after_widget' => '', + 'before_title' => '', + 'after_title' => '', + )); + } else { + unset( $sidebars_widgets[ $sidebar_id ] ); + } + } +} + +// register the inactive_widgets area as sidebar +register_sidebar(array( + 'name' => __('Inactive Widgets'), + 'id' => 'wp_inactive_widgets', + 'class' => 'inactive-sidebar', + 'description' => __( 'Drag widgets here to remove them from the sidebar but keep their settings.' ), + 'before_widget' => '', + 'after_widget' => '', + 'before_title' => '', + 'after_title' => '', +)); + +retrieve_widgets(); + +// We're saving a widget without js +if ( isset($_POST['savewidget']) || isset($_POST['removewidget']) ) { + $widget_id = $_POST['widget-id']; + check_admin_referer("save-delete-widget-$widget_id"); + + $number = isset($_POST['multi_number']) ? (int) $_POST['multi_number'] : ''; + if ( $number ) { + foreach ( $_POST as $key => $val ) { + if ( is_array($val) && preg_match('/__i__|%i%/', key($val)) ) { + $_POST[$key] = array( $number => array_shift($val) ); + break; + } + } + } + + $sidebar_id = $_POST['sidebar']; + $position = isset($_POST[$sidebar_id . '_position']) ? (int) $_POST[$sidebar_id . '_position'] - 1 : 0; + + $id_base = $_POST['id_base']; + $sidebar = isset($sidebars_widgets[$sidebar_id]) ? $sidebars_widgets[$sidebar_id] : array(); + + // delete + if ( isset($_POST['removewidget']) && $_POST['removewidget'] ) { + + if ( !in_array($widget_id, $sidebar, true) ) { + wp_redirect( admin_url('widgets.php?error=0') ); + exit; + } + + $sidebar = array_diff( $sidebar, array($widget_id) ); + $_POST = array('sidebar' => $sidebar_id, 'widget-' . $id_base => array(), 'the-widget-id' => $widget_id, 'delete_widget' => '1'); + } + + $_POST['widget-id'] = $sidebar; + + foreach ( (array) $wp_registered_widget_updates as $name => $control ) { + if ( $name != $id_base || !is_callable($control['callback']) ) + continue; + + ob_start(); + call_user_func_array( $control['callback'], $control['params'] ); + ob_end_clean(); + + break; + } + + $sidebars_widgets[$sidebar_id] = $sidebar; + + // remove old position + if ( !isset($_POST['delete_widget']) ) { + foreach ( $sidebars_widgets as $key => $sb ) { + if ( is_array($sb) ) + $sidebars_widgets[$key] = array_diff( $sb, array($widget_id) ); + } + array_splice( $sidebars_widgets[$sidebar_id], $position, 0, $widget_id ); + } + + wp_set_sidebars_widgets($sidebars_widgets); + wp_redirect( admin_url('widgets.php?message=0') ); + exit; +} + +// Output the widget form without js +if ( isset($_GET['editwidget']) && $_GET['editwidget'] ) { + $widget_id = $_GET['editwidget']; + + if ( isset($_GET['addnew']) ) { + // Default to the first sidebar + $keys = array_keys( $wp_registered_sidebars ); + $sidebar = array_shift( $keys ); + + if ( isset($_GET['base']) && isset($_GET['num']) ) { // multi-widget + // Copy minimal info from an existing instance of this widget to a new instance + foreach ( $wp_registered_widget_controls as $control ) { + if ( $_GET['base'] === $control['id_base'] ) { + $control_callback = $control['callback']; + $multi_number = (int) $_GET['num']; + $control['params'][0]['number'] = -1; + $widget_id = $control['id'] = $control['id_base'] . '-' . $multi_number; + $wp_registered_widget_controls[$control['id']] = $control; + break; + } + } + } + } + + if ( isset($wp_registered_widget_controls[$widget_id]) && !isset($control) ) { + $control = $wp_registered_widget_controls[$widget_id]; + $control_callback = $control['callback']; + } elseif ( !isset($wp_registered_widget_controls[$widget_id]) && isset($wp_registered_widgets[$widget_id]) ) { + $name = esc_html( strip_tags($wp_registered_widgets[$widget_id]['name']) ); + } + + if ( !isset($name) ) + $name = esc_html( strip_tags($control['name']) ); + + if ( !isset($sidebar) ) + $sidebar = isset($_GET['sidebar']) ? $_GET['sidebar'] : 'wp_inactive_widgets'; + + if ( !isset($multi_number) ) + $multi_number = isset($control['params'][0]['number']) ? $control['params'][0]['number'] : ''; + + $id_base = isset($control['id_base']) ? $control['id_base'] : $control['id']; + + // show the widget form + $width = ' style="width:' . max($control['width'], 350) . 'px"'; + $key = isset($_GET['key']) ? (int) $_GET['key'] : 0; + + require_once( ABSPATH . 'wp-admin/admin-header.php' ); ?> +
    +

    +
    > +

    + +
    +
    +' . __('There are no options for this widget.') . "

    \n"; ?> +
    + +

    +
    + + $sbvalue ) { + echo "\t\t\n"; + } ?> +
    "; + if ( 'wp_inactive_widgets' == $sbname || 'orphaned_widgets' == substr( $sbname, 0, 16 ) ) { + echo ' '; + } else { + if ( !isset($sidebars_widgets[$sbname]) || !is_array($sidebars_widgets[$sbname]) ) { + $j = 1; + $sidebars_widgets[$sbname] = array(); + } else { + $j = count($sidebars_widgets[$sbname]); + if ( isset($_GET['addnew']) || !in_array($widget_id, $sidebars_widgets[$sbname], true) ) + $j++; + } + $selected = ''; + echo "\t\t\n"; + } + echo "
    +
    + +
    + + + + + + + +
    +
    +
    +
    +
    + + +
    +

    + + +

    + + +

    + + + + +
    +
    +
    + +
    + +
    + +
    +
    +
    +
    +
    + + $registered_sidebar ) { + if ( false !== strpos( $registered_sidebar['class'], 'inactive-sidebar' ) || 'orphaned_widgets' == substr( $sidebar, 0, 16 ) ) { + $wrap_class = 'widgets-holder-wrap'; + if ( !empty( $registered_sidebar['class'] ) ) + $wrap_class .= ' ' . $registered_sidebar['class']; + + ?> +
    +
    + +
    +
    +
    + +
    +
    + 1 ) { + $split = ceil( $sidebars_count / 2 ); +} else { + $single_sidebar_class = ' class="single-sidebar"'; +} + +?> +
    +
    > + +
    +
    +
    + +
    +
    +
    + +
    +
      +
      + + +
      +
      + +comment_status ) ) { + /** + * Fires when a comment is attempted on a post that does not exist. + * + * @since unknown + * @param int $comment_post_ID Post ID. + */ + do_action( 'comment_id_not_found', $comment_post_ID ); + exit; +} + +// get_post_status() will get the parent status for attachments. +$status = get_post_status($post); + +$status_obj = get_post_status_object($status); + +if ( ! comments_open( $comment_post_ID ) ) { + /** + * Fires when a comment is attempted on a post that has comments closed. + * + * @since unknown + * @param int $comment_post_ID Post ID. + */ + do_action( 'comment_closed', $comment_post_ID ); + wp_die( __('Sorry, comments are closed for this item.') ); +} elseif ( 'trash' == $status ) { + /** + * Fires when a comment is attempted on a trashed post. + * + * @since 2.9.0 + * @param int $comment_post_ID Post ID. + */ + do_action( 'comment_on_trash', $comment_post_ID ); + exit; +} elseif ( ! $status_obj->public && ! $status_obj->private ) { + /** + * Fires when a comment is attempted on a post in draft mode. + * + * @since unknown + * @param int $comment_post_ID Post ID. + */ + do_action( 'comment_on_draft', $comment_post_ID ); + exit; +} elseif ( post_password_required( $comment_post_ID ) ) { + /** + * Fires when a comment is attempted on a password-protected post. + * + * @since unknown + * @param int $comment_post_ID Post ID. + */ + do_action( 'comment_on_password_protected', $comment_post_ID ); + exit; +} else { + /** + * Fires before a comment is posted. + * + * @since unknown + * @param int $comment_post_ID Post ID. + */ + do_action( 'pre_comment_on_post', $comment_post_ID ); +} + +$comment_author = ( isset($_POST['author']) ) ? trim(strip_tags($_POST['author'])) : null; +$comment_author_email = ( isset($_POST['email']) ) ? trim($_POST['email']) : null; +$comment_author_url = ( isset($_POST['url']) ) ? trim($_POST['url']) : null; +$comment_content = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null; + +// If the user is logged in +$user = wp_get_current_user(); +if ( $user->exists() ) { + if ( empty( $user->display_name ) ) + $user->display_name=$user->user_login; + $comment_author = wp_slash( $user->display_name ); + $comment_author_email = wp_slash( $user->user_email ); + $comment_author_url = wp_slash( $user->user_url ); + if ( current_user_can( 'unfiltered_html' ) ) { + if ( ! isset( $_POST['_wp_unfiltered_html_comment'] ) + || ! wp_verify_nonce( $_POST['_wp_unfiltered_html_comment'], 'unfiltered-html-comment_' . $comment_post_ID ) + ) { + kses_remove_filters(); // start with a clean slate + kses_init_filters(); // set up the filters + } + } +} else { + if ( get_option('comment_registration') || 'private' == $status ) + wp_die( __('Sorry, you must be logged in to post a comment.') ); +} + +$comment_type = ''; + +if ( get_option('require_name_email') && !$user->exists() ) { + if ( 6 > strlen($comment_author_email) || '' == $comment_author ) + wp_die( __('ERROR: please fill the required fields (name, email).') ); + elseif ( !is_email($comment_author_email)) + wp_die( __('ERROR: please enter a valid email address.') ); +} + +if ( '' == $comment_content ) + wp_die( __('ERROR: please type a comment.') ); + +$comment_parent = isset($_POST['comment_parent']) ? absint($_POST['comment_parent']) : 0; + +$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID'); + +$comment_id = wp_new_comment( $commentdata ); +$comment = get_comment($comment_id); + +/** + * Perform other actions when comment cookies are set. + * + * @since 3.4.0 + * + * @param object $comment Comment object. + * @param WP_User $user User object. The user may not exist. + */ +do_action( 'set_comment_cookies', $comment, $user ); + +$location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id; + +/** + * The location URI to send commenter after posting. + * + * @since unknown + * + * @param string $location The 'redirect_to' URI sent via $_POST. + * @param object $comment Comment object. + */ +$location = apply_filters( 'comment_post_redirect', $location, $comment ); + +wp_safe_redirect( $location ); +exit; diff --git a/src/wp-config-sample.php b/src/wp-config-sample.php new file mode 100644 index 0000000..3024109 --- /dev/null +++ b/src/wp-config-sample.php @@ -0,0 +1,91 @@ +zy|$D^~x^Rw9aDNZJ5#L}yt?sB'); // Cambia esto por tu frase aleatoria. +define('SECURE_AUTH_KEY', 'm{E.E&/:4ndChmra]A}v5S#%i%I?HM|tJ_+@]k?N(31n-b9>OAnA-W^Hen*V('); // Cambia esto por tu frase aleatoria. +define('LOGGED_IN_SALT', ',6N;BI01Nqqv4+hH.AQOGoWr`-|U^x[-O#L%cg]|-b2f32wpurW&P$ z2_A[visit your profile." +msgstr "Para cambiar tu esquema de color más tarde simplemente visita tu perfil." + +#: wp-admin/about.php:107 +msgid "Refined theme management" +msgstr "Gestión de temas mejorado" + +#: wp-admin/about.php:108 +msgid "The new themes screen lets you survey your themes at a glance. Or want more information? Click to discover more. Then sit back and use your keyboard’s navigation arrows to flip through every theme you’ve got." +msgstr "La nueva pantalla de temas te permite revisar tus temas de un vistazo. ¿O quieres más información? Haz clic para descubrir más. Luego vuelve y usa las flechas de navegación del teclado para moverte a cualquier tema que tengas." + +#: wp-admin/about.php:109 +msgid "Smoother widget experience" +msgstr "Experiencia de widgets más agradable" + +#: wp-admin/about.php:110 +msgid "Drag-drag-drag. Scroll-scroll-scroll. Widget management can be complicated. With the new design, we’ve worked to streamline the widgets screen." +msgstr "Arrastra-arrastra-arrastra. Navega-navega-navega. La gestión de widgets puede ser complicada. Con el nuevo diseño hemos trabajado para mejorar la pantalla de widgets." + +#: wp-admin/about.php:111 +msgid "Have a large monitor? Multiple widget areas stack side-by-side to use the available space. Using a tablet? Just tap a widget to add it." +msgstr "¿Tienes un monitor grande? Las áreas múltiples de widgets se apilan una al lado del otra para usar todo el espacio disponible. ¿Usas una tableta? Simplemente toca un widget para añadirlo." + +#: wp-admin/about.php:122 +msgid "Twenty Fourteen, a sleek new magazine theme" +msgstr "Twenty Fourteen, un nuevo y elegante tema estilo revista" + +#: wp-admin/about.php:127 +msgid "Turn your blog into a magazine" +msgstr "Convierte tu sitio en una revista digital" + +#: wp-admin/about.php:128 +msgid "Create a beautiful magazine-style site with WordPress and Twenty Fourteen. Choose a grid or a slider to display featured content on your homepage. Customize your site with three widget areas or change your layout with two page templates." +msgstr "Crea un sitio con un bonito estilo revista con WordPress y Twenty Fourteen. Elige un estilo de rejilla o carrusel para mostrar contenido destacado en tu página principal. Personaliza tu sitio con tres áreas de widgets o cambia tu diseño con dos plantillas de página." + +#: wp-admin/about.php:129 +msgid "With a striking design that does not compromise our trademark simplicity, Twenty Fourteen is our most intrepid default theme yet." +msgstr "Con un llamativo diseño, que no compromete nuestra simplicidad marca de la casa, Twenty Fourteen es nuestro más intrépido tema por defecto hasta la fecha." + +#: wp-admin/update-core.php:463 +msgid "Keeping your site up to date is important for your site’s security, and makes the internet a safer place for you and your readers." +msgstr "Mantener tu sitio actualizado es importante para la seguridad de tu sitio, y hace que Internet sea un lugar más seguro para ti y tus lectores." + +#: wp-admin/themes.php:110 +msgid "Search installed themes..." +msgstr "Buscar temas instalados..." + +#: wp-admin/update-core.php:463 +msgid "If an update is available, you᾿ll see a notification appear in the Toolbar and navigation menu." +msgstr "Si hay una actualización disponible, aparecerá una notificación en la barra de herramientas y en el menú de navegación." + +#: wp-admin/update-core.php:471 +msgid "WordPress — Updating your WordPress installation is a simple one-click procedure: just click on the “Update Now” button when you are notified that a new version is available." +msgstr "WordPress — Actualizar tu instalación de WordPress es un procedimiento sencillo de un solo clic: simplemente haz clic en el botón “Actualizar ahora” cuando veas el aviso de que hay disponible una nueva versión." + +#: wp-admin/update-core.php:471 +msgid "In most cases, WordPress will automatically apply maintenance and security updates in the background for you." +msgstr "En la mayoría de los casos WordPress realizará por su cuenta las actualizaciones de seguridad y mantenimiento." + +#: wp-admin/update-core.php:475 +msgid "Translations — The files translating WordPress into your language are updated for you whenever any other updates occur. But if these files are out of date, you can click the “Update Translations” button." +msgstr "Traducciones — Los archivos que traducen WordPress a tu idioma se actualizan por si solos cuando se actualice cualquier otra cosa. Pero si estos archivos están anticuados puedes hacer clic en el botón “Actualizar traducciones”." + +#: wp-admin/update-core.php:462 +msgid "On this screen, you can update to the latest version of WordPress, as well as update your themes and plugins from the WordPress.org repositories." +msgstr "En esta pantalla puedes actualizar a la última versión de WordPress, así como actualizar tus temas y plugins desde los repositorios de WordPress.org" + +#: wp-admin/update-core.php:472 +msgid "Themes and Plugins — To update individual themes or plugins from this screen, use the checkboxes to make your selection, then click on the appropriate “Update” button. To update all of your themes or plugins at once, you can check the box at the top of the section to select all before clicking the update button." +msgstr "Temas y Plugins — Para actualizar temas o plugins uno a uno desde esta pantalla usa las casillas de selección para hacer tu elección, luego haz clic en el botón “Actualizar” correspondiente. Para actualizar todos tus temas o plugins de una vez puedes marcar la casilla de la parte superior de la sección para elegirlos todos antes de hacer clic en el botón de actualizar." + +#: wp-admin/about.php:25 +msgid "Welcome to WordPress %s" +msgstr "Bienvenido a WordPress %s" + +#: wp-admin/about.php:27 wp-admin/credits.php:84 wp-admin/freedoms.php:22 +msgid "Thank you for updating to WordPress %s, the most beautiful WordPress yet." +msgstr "Gracias por actualizar a WordPress %s, el más hermoso WordPress hasta la fecha." + +#: wp-admin/themes.php:59 +msgid "If you would like to see more themes to choose from, click on the “Add New” button and you will be able to browse or search for additional themes from the WordPress.org Theme Directory. Themes in the WordPress.org Theme Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they’re free!" +msgstr "Si quieres ver más temas entre los que elegir haz clic en el botón “Añadir nuevo” y podrás navegar o buscar temas adicionales del directorio de temas de WordPress.org. Los temas del directorio de temas de WordPress.org están diseñados y desarrollados por otros, y son compatibles con la licencia que usa WordPress. ¡Ah, y son gratis!" + +#: wp-admin/includes/theme.php:201 +msgid "Fixed Layout" +msgstr "Diseño fijo" + +#: wp-admin/includes/theme.php:202 +msgid "Fluid Layout" +msgstr "Diseño fluido" + +#: wp-admin/includes/theme.php:203 +msgid "Responsive Layout" +msgstr "Diseño adaptable" + +#: wp-admin/includes/dashboard.php:192 +msgid "%s Post" +msgid_plural "%s Posts" +msgstr[0] "%s entrada" +msgstr[1] "%s entradas" + +#: wp-admin/includes/dashboard.php:194 +msgid "%s Page" +msgid_plural "%s Pages" +msgstr[0] "%s página" +msgstr[1] "%s páginas" + +#: wp-admin/includes/dashboard.php:203 +msgid "%s Comment" +msgid_plural "%s Comments" +msgstr[0] "%s comentario" +msgstr[1] "%s comentarios" + +#: wp-admin/includes/dashboard.php:209 +msgctxt "comments" +msgid "%s in moderation" +msgid_plural "%s in moderation" +msgstr[0] "%s en moderación" +msgstr[1] "%s en moderación" + +#: wp-admin/includes/dashboard.php:609 +msgid "M jS" +msgstr "j M" + +#: wp-admin/includes/dashboard.php:614 +msgid "%1$s, %2$s %4$s" +msgstr "%1$s, %2$s %4$s" + +#: wp-admin/includes/dashboard.php:996 +msgid "%s MB Space Allowed" +msgstr "%s MB de espacio permitidos" + +#: wp-admin/includes/dashboard.php:1008 +msgid "%1$s MB (%2$s%%) Space Used" +msgstr "%1$s MB (%2$s%%) del espacio utilizado" + +#: wp-admin/themes.php:203 wp-admin/themes.php:280 +msgid "Theme Details" +msgstr "Detalles del tema" + +#: wp-admin/options-reading.php:66 +msgid "When this setting is in effect, a reminder is shown in the At a Glance box of the Dashboard that says, “Search Engines Discouraged,” to remind you that your site is not being crawled." +msgstr "Cuando este ajuste está activo se muestra un recordatorio en la caja De un vistazo del Escritorio que dice “Motores de búsqueda disuadidos,” para recordarte que tu sitio no está siendo rastreado." + +#: wp-admin/includes/dashboard.php:40 +msgid "At a Glance" +msgstr "De un vistazo" + +#: wp-admin/themes.php:207 wp-admin/themes.php:284 +msgctxt "theme" +msgid "Active:" +msgstr "Activo:" + +#: wp-admin/includes/theme.php:207 +msgid "Accessibility Ready" +msgstr "Listo para accesibilidad" + +#: wp-admin/themes.php:341 +msgid "This is a child theme of %s." +msgstr "Este es un tema hijo de %s." + +#: wp-admin/themes.php:40 +msgid "This screen is used for managing your installed themes. Aside from the default theme(s) included with your WordPress installation, themes are designed and developed by third parties." +msgstr "Esta pantalla se utiliza para gestionar los temas que tienes instalados. Además del (los) tema(s) por defecto incluidos en tu instalación de WordPress, los temas son diseñados y desarrollados por terceros." + +#: wp-admin/themes.php:42 +msgid "Hover or tap to see Activate and Live Preview buttons" +msgstr "Pasa el cursor por encima o haz click para activar y ver los botones de Vista previa." + +#: wp-admin/themes.php:43 +msgid "Click on the theme to see the theme name, version, author, description, tags, and the Delete link" +msgstr "Haz click en el tema para ver el nombre del tema, su versión, autor, descripción, etiquetas y el enlace para borrar" + +#: wp-admin/themes.php:44 +msgid "Click Customize for the current theme or Live Preview for any other theme to see a live preview" +msgstr "Haz click en Personalizar para el tema activo, o en Vista previa previa para los demás temas para ver una previsualización" + +#: wp-admin/themes.php:45 +msgid "The current theme is displayed highlighted as the first theme." +msgstr "El tema actual se muestra de forma destacada en primer lugar." + +#: wp-admin/themes.php:72 +msgid "Tap or hover on any theme then click the Live Preview button to see a live preview of that theme and change theme options in a separate, full-screen view. You can also find a Live Preview button at the bottom of the theme details screen. Any installed theme can be previewed and customized in this way." +msgstr "Toca o muévete sobre cualquier tema, luego haz clic en el botón de Vista previa para ver una visualización en directo de ese tema y cambiar los ajustes del tema en una vista separada y a pantalla completa. También encontrarás un botón de Vista previa al fondo de la pantalla de detalles del tema. Cualquier tema instalado puede previsualizarse y personalizarse de este modo." + +#: wp-admin/themes.php:73 +msgid "The theme being previewed is fully interactive — navigate to different pages to see how the theme handles posts, archives, and other page templates. The settings may differ depending on what theme features the theme being previewed supports. To accept the new settings and activate the theme all in one step, click the Save & Activate button above the menu." +msgstr "El tema que previsualizado es totalmente interactivo — navega por distintas páginas para ver como el tema muestra entradas, archivos u otras plantillas de página. Los ajustes pueden diferir dependiendo de las características que soporte el tema previsualizado. Para aceptar los nuevos ajustes y activar el tema en un solo paso haz cli en el botón Guardar y activar que hay sobre el menú." + +#: wp-admin/themes.php:74 +msgid "When previewing on smaller monitors, you can use the collapse icon at the bottom of the left-hand pane. This will hide the pane, giving you more room to preview your site in the new theme. To bring the pane back, click on the collapse icon again." +msgstr "Al previsualizar en monitores pequeños puedes usar el icono de Contraer que está al fondo del panel izquierdo. esto ocultará el panel, dándote más espacio para previsualizar tu sitio con el nuevo tema. Para volver a ver el panel haz clic de nuevo en el icono de Contraer." + +#: wp-admin/widgets.php:338 +msgid "To activate a widget drag it to a sidebar or click on it. To deactivate a widget and delete its settings, drag it back." +msgstr "Para activar un widget, arrástralo a la barra lateral o haz click en él. Para desactivar un widget y borrar su configuración, arrástralo de vuelta a su lugar de origen." + +#: wp-admin/includes/template.php:2012 +msgid "%1$s rating based on %2$s rating" +msgid_plural "%1$s rating based on %2$s ratings" +msgstr[0] "Valoración de %1$s basada en %2$s valoración" +msgstr[1] "Valoración de %1$s basada en %2$s valoraciones" + +#: wp-admin/includes/template.php:2016 +msgid "%s rating" +msgstr "valoración %s" + +#: wp-admin/my-sites.php:42 +msgid "This screen shows an individual user all of their sites in this network, and also allows that user to set a primary site. They can use the links under each site to visit either the frontend or the dashboard for that site." +msgstr "Esta pantalla muestra a un usuario individual todos los sitios de esta red, y también permite a ese usuario establecer un sitio principal. Pueden utilizar los enlaces debajo de cada sitio para visitar o la portada o el escritorio de ese sitio." + +#: wp-admin/credits.php:163 +msgid "http://make.wordpress.org/" +msgstr "http://make.wordpress.org/" + +#: wp-admin/includes/class-wp-upgrader.php:2421 +msgid "Rollback Error: [%1$s] %2$s" +msgstr "Error de rollback: [%1$s] %2$s" + +#: wp-admin/includes/class-wp-upgrader.php:2424 +msgid "Error: [%1$s] %2$s" +msgstr "Error: [%1$s] %2$s" + +#: wp-admin/includes/class-wp-upgrader.php:2350 +msgid "The following plugins were successfully updated:" +msgstr "Lo siguientes plugins se actualizaron con éxito:" + +#: wp-admin/includes/class-wp-upgrader.php:2351 +msgid "The following themes were successfully updated:" +msgstr "Los siguientes temas se actualizaron con éxito:" + +#: wp-admin/includes/class-wp-upgrader.php:2352 +msgid "The following translations were successfully updated:" +msgstr "Las siguientes traducción se actualizaron con éxito:" + +#: wp-admin/includes/class-wp-upgrader.php:2363 +msgid "The following plugins failed to update:" +msgstr "Los siguientes plugins no lograron actualizarse:" + +#: wp-admin/includes/class-wp-upgrader.php:2364 +msgid "The following themes failed to update:" +msgstr "Los siguientes temas no lograron actualizarse:" + +#: wp-admin/includes/class-wp-upgrader.php:2365 +msgid "The following translations failed to update:" +msgstr "Lass siguientes traducciones no lograron actualizarse:" + +#: wp-admin/post.php:110 +msgid "Unable to submit this form, please refresh and try again." +msgstr "Ha sido imposible enviar este formulario, por favor, recarga e inténtalo de nuevo." + +#: wp-admin/index.php:55 +msgid "Screen Options - Use the Screen Options tab to choose which Dashboard boxes to show." +msgstr "Ajustes de pantalla - Usa la pestaña de Ajustes de pantalla para elegir que cajas de Escritorio se mostrarán." + +#: wp-admin/index.php:67 +msgid "Site Content - Displays a summary of the content on your site and identifies which theme and version of WordPress you are using." +msgstr "Contenido del sitio - Muestra un resumen del contenido de tu sitio e identifica qué tema y versión de WordPress estás utilizando." + +#: wp-admin/index.php:68 +msgid "Activity - Shows the upcoming scheduled posts, recently published posts, and the most recent comments on your posts and allows you to moderate them." +msgstr "Actividad - Muestra las siguientes entradas programadas, las publicadas recientemente y los comentarios más recientes a tus entradas, además de permitirte moderarlos. " + +#: wp-admin/index.php:70 +msgid "Quick Draft - Allows you to create a new post and save it as a draft. Also displays links to the 5 most recent draft posts you've started." +msgstr "Borrador rápido - Te permite crear una entrada nueva y guardarla como borrador. También muestra enlaces a los últimos 5 borradores que hayas creado." + +#: wp-admin/index.php:72 +msgid "WordPress News - Latest news from the official WordPress project, the WordPress Planet, and popular and recent plugins." +msgstr "Noticias sobre WordPress - Las últimas noticias del proyecto oficial de WordPress, el Planeta WordPress, así como los plugins más nuevos y los populares." + +#: wp-admin/index.php:74 +msgid "WordPress News - Latest news from the official WordPress project, the WordPress Planet." +msgstr "Noticias sobre WordPress - Las últimas noticias del proyecto oficial de WordPress, el Planeta WordPress." + +#: wp-admin/post.php:113 +msgid "Oops, you don’t have access to add new drafts." +msgstr "Vaya, no tienes permisos para crear nuevos borradores." + +#: wp-admin/themes.php:101 +msgid "" +"Are you sure you want to delete this theme?\n" +"\n" +"Click 'Cancel' to go back, 'OK' to confirm the delete." +msgstr "" +"¿Estás seguro de querer borrar este tema?\n" +"\n" +"Haz clic en 'Cancelar' para regresar o en 'Aceptar' para confirmar el borrado." + +#: wp-admin/themes.php:108 +msgid "Add New Theme" +msgstr "Añadir un tema nuevo" + +#: wp-admin/themes.php:125 +msgctxt "Add new theme" +msgid "Add New" +msgstr "Añadir nuevo" + +#: wp-admin/themes.php:227 wp-admin/themes.php:304 wp-admin/themes.php:334 +msgid "Update Available" +msgstr "Actualización disponible" + +#: wp-admin/themes.php:312 +msgid "Close overlay" +msgstr "Cerrar superposición" + +#: wp-admin/themes.php:313 +msgid "Show previous theme" +msgstr "Mostrar tema anterior" + +#: wp-admin/themes.php:314 +msgid "Show next theme" +msgstr "Mostrar el tema nuevo" + +#: wp-admin/widgets.php:429 +msgid "Add Widget" +msgstr "Añadir widget" + +#: wp-admin/includes/dashboard.php:47 +msgid "Activity" +msgstr "Actividad" + +#: wp-admin/includes/class-wp-upgrader.php:2329 +msgid "WordPress site: %s" +msgstr "Sitio de WordPress: %s" + +#: wp-admin/includes/class-wp-upgrader.php:2335 +msgid "SUCCESS: WordPress was successfully updated to %s" +msgstr "¡Conseguido!: WordPress se actualizó a %s" + +#: wp-admin/includes/class-wp-upgrader.php:2337 +msgid "FAILED: WordPress failed to update to %s" +msgstr "¡Fallo!: WordPress no consiguió actualizarse a %s" + +#: wp-admin/includes/class-wp-upgrader.php:2357 +msgid "SUCCESS: %s" +msgstr "¡Conseguido!: %s" + +#: wp-admin/includes/class-wp-upgrader.php:2371 +msgid "FAILED: %s" +msgstr "¡Fallo!: %s" + +#: wp-admin/includes/class-wp-upgrader.php:2381 +msgid "" +"\n" +"BETA TESTING?\n" +"=============\n" +"\n" +"This debugging email is sent when you are using a development version of WordPress.\n" +"\n" +"If you think these failures might be due to a bug in WordPress, could you report it?\n" +" * Open a thread in the support forums: http://wordpress.org/support/forum/alphabeta\n" +" * Or, if you're comfortable writing a bug report: http://core.trac.wordpress.org/\n" +"\n" +"Thanks! -- The WordPress Team" +msgstr "" +"\n" +"¿PRUEBAS BETA?\n" +"=============\n" +"\n" +"Este correo electrónico de revisión se te envía cuando estás usando una versión en desarrollo de WordPress.\n" +"\n" +"Si crees que estos fallos son debidos a un error en WordPress ¿te importaría informar sobre ello?\n" +" * Abre un debate nuevo en los foros de soporte: http://wordpress.org/support/forum/alphabeta\n" +" * O, si te sientes capaz de escribir un informe de error: http://core.trac.wordpress.org/\n" +"\n" +"¡Gracias! -- El equipo de WordPress" + +#: wp-admin/includes/class-wp-upgrader.php:2393 +msgid "[%s] There were failures during background updates" +msgstr "[%s] Hubo fallos durante las actualizaciones en segundo plano" + +#: wp-admin/includes/class-wp-upgrader.php:2395 +msgid "[%s] Background updates have finished" +msgstr "[%s] Han finalizado las actualizaciones en segundo plano" + +#: wp-admin/includes/class-wp-upgrader.php:2398 +msgid "UPDATE LOG" +msgstr "ACTUALIZAR LOG" + +#: wp-admin/includes/dashboard.php:52 +msgid "Quick Draft" +msgstr "Borrador rápido" + +#: wp-admin/includes/dashboard.php:57 +msgid "WordPress News" +msgstr "Noticias de WordPress" + +#: wp-admin/includes/dashboard.php:230 +msgid "WordPress %1$s running %2$s theme." +msgstr "WordPress %1$s funciona con el tema %2$s." + +#: wp-admin/includes/dashboard.php:363 +msgid "What’s on your mind?" +msgstr "¿Qué te está pasando por la cabeza?" + +#: wp-admin/includes/dashboard.php:404 +msgctxt "drafts" +msgid "View all" +msgstr "Ver todos" + +#: wp-admin/includes/dashboard.php:52 wp-admin/includes/dashboard.php:406 +msgid "Drafts" +msgstr "Borradores" + +#: wp-admin/includes/dashboard.php:530 +msgid "Publishing Soon" +msgstr "Próxima publicación" + +#: wp-admin/includes/dashboard.php:538 +msgid "Recently Published" +msgstr "Publicaciones recientes" + +#: wp-admin/includes/dashboard.php:547 +msgid "No activity yet!" +msgstr "¡Todavía no hay actividad!" + +#: wp-admin/includes/dashboard.php:588 +msgid "See %s more…" +msgstr "Ver %s más" + +#: wp-admin/includes/dashboard.php:604 +msgid "Today" +msgstr "Hoy" + +#: wp-admin/includes/dashboard.php:606 +msgid "Tomorrow" +msgstr "Mañana" + +#: wp-admin/includes/dashboard.php:904 +msgid "Popular Plugin" +msgstr "Plugin popular" + +#: wp-admin/includes/dashboard.php:1002 wp-admin/includes/dashboard.php:1015 +msgid "Manage Uploads" +msgstr "Gestionar subidas" + +#: wp-admin/includes/class-wp-upgrader.php:1376 +#: wp-admin/includes/update-core.php:707 wp-admin/includes/update-core.php:780 +msgid "The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions." +msgstr "No se ha podido instalar la actualización debido a que no se han podido copiar algunos archivos. Normalmente esto es debido a permisos de archivo inconsistentes." + +#: wp-admin/includes/class-wp-upgrader.php:2210 +msgid "WordPress %s is also now available." +msgstr "WordPress %s también está ahora disponible." + +#: wp-admin/includes/class-wp-upgrader.php:2234 +msgid "Your site at %1$s experienced a critical failure while trying to update WordPress to version %2$s." +msgstr "Tu sitio en %1$s ha experimentado un fallo crítico mientras se trataba de actualizar WordPress a la versión %2$s." + +#: wp-admin/includes/class-wp-upgrader.php:2263 +msgid "Your site was running version %s." +msgstr "Tu sitio está ejecutando la versión %s." + +#: wp-admin/includes/class-wp-upgrader-skins.php:536 +#: wp-admin/update-core.php:348 wp-admin/update-core.php:621 +msgid "Update Translations" +msgstr "Actualizar traducciones" + +#: wp-admin/includes/class-wp-upgrader-skins.php:550 +#: wp-admin/includes/class-wp-upgrader.php:1892 +msgid "Updating translations for %1$s (%2$s)…" +msgstr "Actualizando traducciones de %1$s (%2$s)…" + +#: wp-admin/includes/class-wp-upgrader.php:1891 +msgid "Translations for %s" +msgstr "Traducciones para %s" + +#: wp-admin/includes/class-wp-upgrader.php:2173 +msgid "[%1$s] Your site has updated to WordPress %2$s" +msgstr "[%1$s] Tu sitio ha sido actualizado a WordPress %2$s" + +#: wp-admin/includes/class-wp-upgrader.php:2179 +msgid "[%1$s] WordPress %2$s is available. Please update!" +msgstr "[%1$s] WordPress %2$s está disponible. Por favor, ¡actualiza!" + +#: wp-admin/includes/class-wp-upgrader.php:2184 +msgid "[%1$s] URGENT: Your site may be down due to a failed update" +msgstr "[%1$s] URGENTE: Tu sitio puede no estar funcionando debido a un fallo de actualización" + +#: wp-admin/includes/class-wp-upgrader.php:2199 +msgid "Howdy! Your site at %1$s has been updated automatically to WordPress %2$s." +msgstr "¡Hola! Tu sitio %1$s ha sido actualizado automáticamente a WordPress %2$s." + +#: wp-admin/includes/class-wp-upgrader.php:2202 +msgid "No further action is needed on your part." +msgstr "No es necesaria ninguna acción adicional por tu parte." + +#: wp-admin/includes/class-wp-upgrader.php:2206 +msgid "For more on version %s, see the About WordPress screen:" +msgstr "Para más información sobre la versión %s revisa la pantalla Acerca de WordPress:" + +#: wp-admin/includes/class-wp-upgrader.php:2219 +msgid "Please update your site at %1$s to WordPress %2$s." +msgstr "Por favor, actualiza tu sitio %1$s a WordPress %2$s." + +#: wp-admin/includes/class-wp-upgrader.php:2226 +msgid "We tried but were unable to update your site automatically." +msgstr "Lo intentamos, pero no hemos podido actualizar tu sitio automáticamente." + +#: wp-admin/includes/class-wp-upgrader.php:2211 +#: wp-admin/includes/class-wp-upgrader.php:2228 +msgid "Updating is easy and only takes a few moments:" +msgstr "La actualización es fácil y sólo dura un momento:" + +#: wp-admin/includes/class-wp-upgrader.php:2236 +msgid "Your site at %1$s experienced a critical failure while trying to update to the latest version of WordPress, %2$s." +msgstr "Tu sitio %1$s ha experimentado un fallo crítico mientras se intentaba actualizar a la última versión de WordPress, %2$s." + +#: wp-admin/includes/class-wp-upgrader.php:2238 +msgid "This means your site may be offline or broken. Don't panic; this can be fixed." +msgstr "Esto significa que tu sitio puede estar roto o desconectado. No entre en pánico, esto puede ser arreglado." + +#: wp-admin/includes/class-wp-upgrader.php:2240 +msgid "Please check out your site now. It's possible that everything is working. If it says you need to update, you should do so:" +msgstr "Por favor comprueba tu sitio ahora. Es posible que todo esté funcionando. Si indica que necesitas actualizar, deberías hacerlo:" + +#: wp-admin/includes/class-wp-upgrader.php:2247 +msgid "Keeping your site updated is important for security. It also makes the internet a safer place for you and your readers." +msgstr "Mantener tu sitio actualizado es importante para la seguridad. También hace que Internet sea un lugar más seguro para ti y tus lectores." + +#: wp-admin/includes/class-wp-upgrader.php:2250 +msgid "If you experience any issues or need support, the volunteers in the WordPress.org support forums may be able to help." +msgstr "Si tienes algún problema o necesitas ayuda, los voluntarios en los foros de soporte WordPress.org pueden ayudarte." + +#: wp-admin/includes/class-wp-upgrader.php:2255 +msgid "You also have some plugins or themes with updates available. Update them now:" +msgstr "También tienes algunos plugins o temas con actualizaciones disponibles. Actualizalos ahora:" + +#: wp-admin/includes/class-wp-upgrader.php:2259 +msgid "The WordPress Team" +msgstr "El equipo de WordPress" + +#: wp-admin/includes/class-wp-upgrader.php:2264 +msgid "We have some data that describes the error your site encountered." +msgstr "Tenemos algunos datos que describen el error que se ha producido en tu sitio." + +#: wp-admin/includes/class-wp-upgrader.php:2265 +msgid "Your hosting company, support forum volunteers, or a friendly developer may be able to use this information to help you:" +msgstr "Su empresa de alojamiento, los voluntarios del foro, o un desarrollador pueden utilizar esta información para ayudarte:" + +#: wp-admin/includes/class-wp-upgrader.php:2278 +msgid "Error code: %s" +msgstr "Código de error: %s" + +#: wp-admin/themes.php:145 +msgid "ERROR: %s" +msgstr "ERROR: %s" + +#: wp-admin/includes/post.php:1283 +msgid "This content is currently locked." +msgstr "Este contenido está actualmente bloqueado." + +#: wp-admin/includes/post.php:1285 +msgid "If you take over, %s will be blocked from continuing to edit." +msgstr "Si tomas el control, %s no podrá seguir editando." + +#: wp-admin/update-core.php:49 +msgid "If you need to re-install version %s, you can do so here or download the package and re-install manually:" +msgstr "Si necesitas reinstalar la versión %s, puedes hacerlo desde aquí o puedes descargar el paquete para reinstalarla manualmente:" + +#: wp-admin/update-core.php:160 +msgid "Future security updates will be applied automatically." +msgstr "Las siguientes actualizaciones de seguridad se aplicarán automáticamente." + +#: wp-admin/update-core.php:336 wp-admin/update-core.php:344 +msgid "Translations" +msgstr "Traducciones" + +#: wp-admin/update-core.php:337 +msgid "Your translations are all up to date." +msgstr "Tus traducciones están actualizadas." + +#: wp-admin/update-core.php:346 +msgid "Some of your translations are out of date." +msgstr "Algunas de tus traducciones no están actualizadas." + +#: wp-admin/includes/class-wp-upgrader.php:1131 +msgid "Some of your translations need updating. Sit tight for a few more seconds while we update them as well." +msgstr "Algunas de tus traducciones necesitan actualizarse. Espera unos segundos más mientras las actualizamos también." + +#: wp-admin/includes/class-wp-upgrader.php:1132 +msgid "The translation is up to date." +msgstr "La traducción está actualizada." + +#: wp-admin/includes/class-wp-upgrader.php:1134 +msgid "Downloading translation from %s…" +msgstr "Descargando traducción desde %s…" + +#: wp-admin/includes/class-wp-upgrader.php:1136 +msgid "Translation update failed." +msgstr "La actualización de la traducción ha fallado." + +#: wp-admin/includes/class-wp-upgrader.php:1137 +msgid "Translation updated successfully." +msgstr "Traducción actualizada con éxito." + +#: wp-admin/includes/class-wp-upgrader.php:1882 +msgid "Updating theme: %s" +msgstr "Actualizando tema: %s" + +#: wp-admin/includes/class-wp-upgrader.php:1887 +msgid "Updating plugin: %s" +msgstr "Actualizando plugin: %s" + +#: wp-admin/includes/update-core.php:825 +msgid "There is not enough free disk space to complete the update." +msgstr "No hay suficiente espacio en disco para completar la actualización." + +#: wp-admin/options-discussion.php:143 +msgid "Comment must be manually approved" +msgstr "El comentario debe aprobarse manualmente." + +#: wp-admin/options-media.php:49 +msgid "The sizes listed below determine the maximum dimensions in pixels to use when adding an image to the Media Library." +msgstr "Los tamaños de la siguiente lista determinan las dimensiones máximas en pixels a usar cuando se añada una imagen a la Biblioteca de medios." + +#: wp-admin/options-permalink.php:178 +msgid "By default WordPress uses web URLs which have question marks and lots of numbers in them; however, WordPress offers you the ability to create a custom URL structure for your permalinks and archives. This can improve the aesthetics, usability, and forward-compatibility of your links. A number of tags are available, and here are some examples to get you started." +msgstr "Por defecto WordPress utiliza URLs que tengan signos de interrogación y montones de números, sin embargo WordPress te ofrece la posibilida de crear una estructura de URL personalizada para tus enlaces permanentes y archivos. Esto puede mejorar la estética, usabilidad y compatibilidad futura de tus enlaces. Hay varias etiquetas disponibles, y aquí tienes algunos ejemplos para empezar." + +#: wp-admin/theme-editor.php:33 +msgid "Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a child theme instead." +msgstr "Actualizar a una versión más nueva del mismo tema sobrescribirá los cambios que hayas hecho. Para evitar esto prueba a crear un tema hijo." + +#: wp-admin/user-new.php:335 +msgid "Create a brand new user and add them to this site." +msgstr "Crea un nuevo usuario y añádelo a este sitio." + +#: wp-admin/includes/ms.php:225 +msgid "" +"Dear user,\n" +"\n" +"You recently requested to have the administration email address on\n" +"your site changed.\n" +"If this is correct, please click on the following link to change it:\n" +"###ADMIN_URL###\n" +"\n" +"You can safely ignore and delete this email if you do not want to\n" +"take this action.\n" +"\n" +"This email has been sent to ###EMAIL###\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Estimado usuario,\n" +"\n" +"Recientemente has solicitado cambiar la dirección de correo electrónico de administración en\n" +"tu sitio.\n" +"Si esto es así haz clic en el siguiente enlace para cambiarla:\n" +"###ADMIN_URL###\n" +"\n" +"Puedes ignorar y borrar este correo electrónico con seguridad si no quieres\n" +"llevar a cabo esta acción.\n" +"\n" +"Este correo electrónico ha sido enviado a ###EMAIL###\n" +"\n" +"Saludos,\n" +"El equipo de ###SITENAME###\n" +"###SITEURL###" + +#: wp-admin/includes/class-wp-filesystem-base.php:251 +msgid "Looking for %1$s in %2$s" +msgstr "Buscando %1$s en %2$s" + +#: wp-admin/includes/class-wp-upgrader.php:1268 +msgid "The language pack is missing either the .po or .mo files." +msgstr "El paquete de idioma no encuentra los archivos .po o .mo." + +#: wp-admin/includes/class-wp-upgrader.php:1311 +msgid "Attempting to roll back to previous version." +msgstr "Tratando de volver a la versión anterior." + +#: wp-admin/includes/class-wp-upgrader.php:1312 +msgid "Due to an error during updating, WordPress has rolled back to your previous version." +msgstr "Debido a un error durante la actualización WordPress ha vuelto a tu versión anterior." + +#: wp-admin/includes/class-wp-upgrader.php:1876 +msgid "Updating to WordPress %s" +msgstr "Actualizando a WordPress %s" + +#: wp-admin/includes/class-wp-upgrader.php:1877 +msgid "WordPress %s" +msgstr "WordPress %s" + +#: wp-admin/includes/file.php:522 +msgid "The checksum of the file (%1$s) does not match the expected checksum value (%2$s)." +msgstr "La suma de verificación del archivo (%1$s) no coincide con el valor de suma de verificación esperado (%2$s)." + +#: wp-admin/includes/file.php:1068 +msgid "This password will not be stored on the server." +msgstr "Esta contraseña no se almacenará en el servidor." + +#: wp-admin/includes/media.php:2464 +msgid "File size:" +msgstr "Tamaño de archivo:" + +#: wp-admin/includes/update-core.php:734 +msgid "Preparing to install the latest version…" +msgstr "Preparando para instalar la última versión…" + +#: wp-admin/includes/update-core.php:791 +msgid "Copying the required files…" +msgstr "Copiando los archivos necesarios…" + +#: wp-admin/install.php:203 +msgid "Please provide a valid username." +msgstr "Por favor, facilita un nombre de usuario válido." + +#: wp-admin/install.php:206 +msgid "The username you provided has invalid characters." +msgstr "El nombre de usuario que has facilitado tiene caracteres no válidos." + +#: wp-admin/install.php:210 +msgid "Your passwords do not match. Please try again." +msgstr "Tus contraseñas no coinciden. Inténtalo de nuevo." + +#: wp-admin/install.php:214 +msgid "You must provide an email address." +msgstr "Debes facilitar una dirección de correo electrónico" + +#: wp-admin/install.php:218 +msgid "Sorry, that isn’t a valid email address. Email addresses look like username@example.com." +msgstr "Lo siento, no es una dirección de correo electrónica válida. Las direcciones de correo electrónico deben parecerse a usuario@ejemplo.com." + +#: wp-admin/nav-menus.php:475 +msgid "Your theme does not natively support menus, but you can use them in sidebars by adding a “Custom Menu” widget on the Widgets screen." +msgstr "Tu tema no soporta menús de manera nativa pero puedes usarlos en las barras laterales añadiendo un widget de “Menú personalizado” en la pantalla de Widgets." + +#: wp-admin/nav-menus.php:479 +msgid "Menus can be displayed in locations defined by your theme, even used in sidebars by adding a “Custom Menu” widget on the Widgets screen. If your theme does not support the custom menus feature (the default themes, %2$s and %3$s, do), you can learn about adding this support by following the Documentation link to the side." +msgstr "Los menús se pueden mostrar en distintas ubicaciones definidas por tu tema, o incluso puedes usarlos añadiendo un widget de #8220;Menú personalizado” en la pantalla de Widgets. Si tu tema no soporta la característica de menús personalizados (los temas por defecto %2$s y %3$s si) puedes aprender añadirlos usando el enlace a la Documentación." + +#: wp-admin/nav-menus.php:502 +msgid "Clicking the arrow to the right of any menu item in the editor will reveal a standard group of settings. Additional settings such as link target, CSS classes, link relationships, and link descriptions can be enabled and disabled via the Screen Options tab." +msgstr "Si haces clic en la flecha de la derecha de cualquier elemento de menú del editor mostrará un grupo estándar de ajustes. Ajustes adicionales como destino del enlace, clases CSS, relaciones del enlace y descripciones del enlace puedes activarlas y desactivarlas en la pestaña de Ajustes de pantalla." + +#: wp-admin/edit-form-comment.php:96 +msgid "IP address:" +msgstr "Dirección IP:" + +#: wp-admin/edit-tags.php:267 +msgid "Category added." +msgstr "Categoría añadida." + +#: wp-admin/edit-tags.php:268 +msgid "Category deleted." +msgstr "Categoría borrada." + +#: wp-admin/edit-tags.php:269 +msgid "Category updated." +msgstr "Categoría actualizada." + +#: wp-admin/edit-tags.php:270 +msgid "Category not added." +msgstr "Categoría no añadida." + +#: wp-admin/edit-tags.php:271 +msgid "Category not updated." +msgstr "Categoría no actualizada." + +#: wp-admin/edit-tags.php:272 +msgid "Categories deleted." +msgstr "Categorías borradas." + +#: wp-admin/edit-tags.php:276 +msgid "Tag added." +msgstr "Etiqueta añadida." + +#: wp-admin/edit-tags.php:277 +msgid "Tag deleted." +msgstr "Etiqueta borrada." + +#: wp-admin/edit-tags.php:278 +msgid "Tag updated." +msgstr "Etiqueta actualizada." + +#: wp-admin/edit-tags.php:279 +msgid "Tag not added." +msgstr "Etiqueta no añadida." + +#: wp-admin/edit-tags.php:280 +msgid "Tag not updated." +msgstr "Etiqueta no actualizada." + +#: wp-admin/edit-tags.php:281 +msgid "Tags deleted." +msgstr "Etiquetas borradas." + +#: wp-admin/edit.php:238 +msgid "%s post not updated, somebody is editing it." +msgid_plural "%s posts not updated, somebody is editing them." +msgstr[0] "%s entrada no actualizada, alguien la está editando." +msgstr[1] "%s entradas no actualizadas, alguien las está editando." + +#: wp-admin/edit.php:239 +msgid "%s post permanently deleted." +msgid_plural "%s posts permanently deleted." +msgstr[0] "%s entrada borrada permanentemente." +msgstr[1] "%s entradas borradas permanentemente." + +#: wp-admin/edit.php:240 +msgid "%s post moved to the Trash." +msgid_plural "%s posts moved to the Trash." +msgstr[0] "%s entrada movida a la Papelera." +msgstr[1] "%s entradas movidas a la Papelera." + +#: wp-admin/edit.php:241 +msgid "%s post restored from the Trash." +msgid_plural "%s posts restored from the Trash." +msgstr[0] "%s entrada restaurada desde la Papelera." +msgstr[1] "%s entradas restauradas desde la Papelera." + +#: wp-admin/edit.php:244 +msgid "%s page updated." +msgid_plural "%s pages updated." +msgstr[0] "%s página actualizada." +msgstr[1] "%s páginas actualizadas." + +#: wp-admin/edit.php:245 +msgid "%s page not updated, somebody is editing it." +msgid_plural "%s pages not updated, somebody is editing them." +msgstr[0] "%s página no actualizada, alguien la está editando." +msgstr[1] "%s páginas no actualizadas, alguien las está editando." + +#: wp-admin/edit.php:246 +msgid "%s page permanently deleted." +msgid_plural "%s pages permanently deleted." +msgstr[0] "%s página borrada permanentemente." +msgstr[1] "%s páginas borradas permanentemente." + +#: wp-admin/edit.php:247 +msgid "%s page moved to the Trash." +msgid_plural "%s pages moved to the Trash." +msgstr[0] "%s página movida a la Papelera." +msgstr[1] "%s páginas movidas a la Papelera." + +#: wp-admin/edit.php:248 +msgid "%s page restored from the Trash." +msgid_plural "%s pages restored from the Trash." +msgstr[0] "%s página restaurada desde la Papelera." +msgstr[1] "%s páginas restauradas desde la Papelera." + +#: wp-admin/revision.php:107 +msgid "Compare two different revisions by selecting the “Compare any two revisions” box to the side." +msgstr "Compara dos revisiones seleccionando “Compara dos revisiones cualquiera” en el lateral." + +#: wp-admin/includes/template.php:1897 +msgid "Compare Revisions" +msgstr "Comparar revisiones" + +#: wp-admin/includes/template.php:1898 +msgid "View, compare, and restore other versions of this content on the improved revisions screen." +msgstr "Ver, comparar y restaurar otras versiones de este contenido en la pantalla mejorada de revisiones." + +#: wp-admin/includes/template.php:1907 +msgid "Edit Lock" +msgstr "Bloqueo de edición" + +#: wp-admin/includes/template.php:1908 +msgid "Someone else is editing this. No need to refresh; the lock will disappear when they’re done." +msgstr "Alguien más está editando esto. No necesitas refrescar el navegador, el bloqueo desaparecerá cuando hayan terminado." + +#: wp-admin/revision.php:155 +msgid "Compare any two revisions" +msgstr "Comparar dos revisiones cualesquiera" + +#: wp-admin/includes/media.php:239 +msgid "\"%1$s\" from %2$s by %3$s." +msgstr "\"%1$s\" de %2$s por %3$s." + +#: wp-admin/includes/media.php:242 +msgid "\"%1$s\" from %2$s." +msgstr "\"%1$s\" de %2$s." + +#: wp-admin/includes/media.php:245 +msgid "\"%1$s\" by %2$s." +msgstr "\"%1$s\" en %2$s." + +#: wp-admin/includes/media.php:247 +msgid "\"%s\"." +msgstr "\"%s\"." + +#: wp-admin/includes/meta-boxes.php:180 +msgid "Your site is configured to keep only the last %s revisions." +msgstr "Tu sitio está configurado para mantener sólo las últimas %s revisiones." + +#: wp-admin/includes/meta-boxes.php:182 wp-admin/includes/meta-boxes.php:185 +msgid "Revisions: %s" +msgstr "Revisiones: %s" + +#: wp-admin/includes/meta-boxes.php:188 +msgctxt "revisions" +msgid "Browse" +msgstr "Explora" + +#: wp-admin/revision.php:172 +msgid "Autosave by %s" +msgstr "Copia de seguridad automática de %s" + +#: wp-admin/revision.php:175 +msgid "Current Revision by %s" +msgstr "Revisión actual de %s" + +#: wp-admin/revision.php:193 +msgid "Restore This Autosave" +msgstr "Restaurar este autoguardado" + +#: wp-admin/revision.php:178 +msgid "Revision by %s" +msgstr "Revisión de %s" + +#: wp-admin/edit-form-advanced.php:374 +msgid "Connection lost. Saving has been disabled until you’re reconnected." +msgstr "Perdida la conexión. El guardado automático se ha desactivado hasta que se vuelva a conectar." + +#: wp-admin/edit-form-advanced.php:375 +msgid "We’re backing up this post in your browser, just in case." +msgstr "Hemos hecho copias de seguridad de esta entrada en tu navegador por si acaso." + +#: wp-admin/revision.php:207 +msgid "Sorry, something went wrong. The requested comparison could not be loaded." +msgstr "Lo sentimos, algo salió mal. La comparación solicitada no se pudo cargar." + +#: wp-admin/custom-background.php:304 +msgctxt "Background Attachment" +msgid "Attachment" +msgstr "Adjunto" + +#: wp-admin/includes/image-edit.php:85 +msgid "You can proportionally scale the original image. For best results the scaling should be done before performing any other operations on it like crop, rotate, etc. Note that images can only be scaled down, not up." +msgstr "Puedes escalar proporcionalmente la imagen original. Para obtener los mejores resultados se debe escalar antes de realizar ninguna otra acción sobre ella como recortar, rotar, etc Ten en cuenta que las imágenes sólo se pueden escalar reduciéndose, no ampliándose." + +#: wp-admin/user-edit.php:467 +msgid "Repeat New Password" +msgstr "Confirmar Nueva Contraseña " + +#: wp-admin/user-new.php:393 +msgid "Repeat Password" +msgstr "Confirmar Contraseña" + +#: wp-admin/includes/nav-menu.php:1169 +msgid "Add menu items from the column on the left." +msgstr "Añade elementos de menú desde la columna derecha." + +#: wp-admin/includes/plugin-install.php:129 +msgid "Plugins extend and expand the functionality of WordPress. You may automatically install plugins from the WordPress Plugin Directory or upload a plugin in .zip format via this page." +msgstr "Los plugins extienden y amplían las funcionalidades de WordPress. Puedes instalar automáticamente plugins del Directorio de Plugins de WordPress o subir un plugin en formato Zip a través de esta página." + +msgid "http://wordpress.org/plugins/hello-dolly/" +msgstr "http://wordpress.org/plugins/hello-dolly/" + +#: wp-admin/includes/class-wp-upgrader.php:53 +msgid "The package contains no files." +msgstr "El paquete no contiene archivos." + +#: wp-admin/includes/class-wp-upgrader.php:736 +msgid "The theme contains no files." +msgstr "El Tema no contiene archivos." + +#: wp-admin/includes/class-wp-upgrader-skins.php:160 +msgid "An error occurred while updating %1$s: %2$s" +msgstr "Se ha producido un error al actualizar %1$s: %2$s" + +#: wp-admin/revision.php:106 +msgid "To navigate between revisions, drag the slider handle left or right or use the Previous or Next buttons." +msgstr "Para navegar entre revisiones arrastra el deslizador a la izquierda o la derecha o usa los botones Anterior o Siguiente." + +#: wp-admin/press-this.php:610 +msgid "Loading…" +msgstr "Cargando…" + +#: wp-admin/upload.php:102 +msgid "Error in moving to trash." +msgstr "Error trasladando elementos a la basura" + +#: wp-admin/upload.php:114 +msgid "Error in restoring from trash." +msgstr "Error restaurando elementos de la basura" + +#: wp-admin/post.php:240 +msgid "The item you are trying to move to the Trash no longer exists." +msgstr "El artículo que estás tratando de mover a la papelera ya no existe." + +#: wp-admin/post.php:264 +msgid "The item you are trying to restore from the Trash no longer exists." +msgstr "El elemento que intentas restaurar de la papelera no existe ya." + +#: wp-admin/post.php:283 +msgid "This item has already been deleted." +msgstr "Este elemento ya ha sido eliminado." + +#: wp-admin/nav-menus.php:708 +msgid "Drag each item into the order you prefer. Click the arrow on the right of the item to reveal additional configuration options." +msgstr "Coloca cada elemento en el orden que prefieras. Haz click en la flecha que hay a la derecha del elemento para mostrar más opciones de configuración." + +#: wp-admin/nav-menus.php:492 +msgid "If you haven’t yet created any menus, click the ’create a new menu’ link to get started" +msgstr "Si no has creado ningún menú todavía, haz click en el enlace de ’Crear un menú nuevo ’." + +#: wp-admin/revision.php:103 +msgid "This screen is used for managing your content revisions." +msgstr "Esta pantalla es utilizada para gestionar tus revisiones de contenido." + +#: wp-admin/revision.php:104 +msgid "Revisions are saved copies of your post or page, which are periodically created as you update your content. The red text on the left shows the content that was removed. The green text on the right shows the content that was added." +msgstr "Las revisiones son copias guardadas de tus entradas o páginas que se crean periódicamente conforme vas creando tu contenido. El texto en rojo de la derecha muestra el contenido que ha sido quitado. El texto en verde de la derecha, el contenido que ha sido añadido." + +#: wp-admin/revision.php:105 +msgid "From this screen you can review, compare, and restore revisions:" +msgstr "En esta pantalla podrá revisar, comparar y restaurar las revisiones:" + +#: wp-admin/revision.php:108 +msgid "To restore a revision, click Restore This Revision." +msgstr "Para restaurar una revisión, haz click en Restaurar esta revisión." + +#: wp-admin/revision.php:117 +msgid "Revisions Management" +msgstr "Gestión de Revisiones" + +#: wp-admin/revision.php:166 +msgctxt "Followed by post revision info" +msgid "To:" +msgstr "Para:" + +#: wp-admin/revision.php:164 +msgctxt "Followed by post revision info" +msgid "From:" +msgstr "Desde:" + +#: wp-admin/revision.php:137 +msgctxt "Button label for a previous revision" +msgid "Previous" +msgstr "Anterior" + +#: wp-admin/revision.php:141 +msgctxt "Button label for a next revision" +msgid "Next" +msgstr "Siguiente" + +#: wp-admin/nav-menus.php:369 +msgid "Menu locations updated." +msgstr "Ubicaciones de menú actualizadas." + +#: wp-admin/includes/revision.php:171 +msgctxt "revision date short format" +msgid "j M @ G:i" +msgstr "j M @ G:i" + +#: wp-admin/includes/media.php:254 +msgid "%1$s by %2$s." +msgstr "%1$s por %2$s." + +#: wp-admin/includes/media.php:266 +msgid "Released: %d." +msgstr "Lanzamiento: %d." + +#: wp-admin/includes/media.php:271 +msgid "Track %1$s of %2$s." +msgstr "Pista %1$s de %2$s." + +#: wp-admin/includes/media.php:273 +msgid "Track %1$s." +msgstr "Pista %1$s." + +#: wp-admin/includes/media.php:277 +msgid "Genre: %s." +msgstr "Género: %s." + +#: wp-admin/includes/media.php:2489 +msgid "Mime-type:" +msgstr "Tipo-Mime:" + +#: wp-admin/includes/media.php:2490 +msgid "Year:" +msgstr "Año:" + +#: wp-admin/includes/media.php:2491 +msgid "Genre:" +msgstr "Género:" + +#: wp-admin/includes/media.php:2506 +msgid "Bitrate:" +msgstr "Bitrate:" + +#: wp-admin/includes/media.php:2533 +msgid "Audio Format:" +msgstr "Formato de audio:" + +#: wp-admin/includes/media.php:2534 +msgid "Audio Codec:" +msgstr "Códec de audio:" + +#: wp-admin/includes/post.php:1313 +msgid "Saving revision..." +msgstr "Guardando revisión..." + +#: wp-admin/includes/post.php:1314 +msgid "Your latest changes were saved as a revision." +msgstr "Tu últimos cambios fueron guardados en la revisión." + +#: wp-admin/nav-menus.php:478 +msgid "This screen is used for managing your custom navigation menus." +msgstr "Esta pantalla es utilizada para gestionar tus menús de navegación personalizados." + +#: wp-admin/nav-menus.php:480 wp-admin/themes.php:41 +msgid "From this screen you can:" +msgstr "En esta pantalla puedes:" + +#: wp-admin/nav-menus.php:481 +msgid "Create, edit, and delete menus" +msgstr "Crear, editar y borrar menús" + +#: wp-admin/nav-menus.php:482 +msgid "Add, organize, and modify individual menu items" +msgstr "Añadir, organizar y modificar elementos individuales de los menús" + +#: wp-admin/nav-menus.php:490 +msgid "The menu management box at the top of the screen is used to control which menu is opened in the editor below." +msgstr "La pestaña de gestión de menús de la parte superior de la pantalla se usa para controlar qué menú se abre en el editor inferior." + +#: wp-admin/nav-menus.php:491 +msgid "To edit an existing menu, choose a menu from the drop down and click Select" +msgstr "Para editar un menú existente, elige un menú del desplegable y haz click en Seleccionar" + +#: wp-admin/nav-menus.php:493 +msgid "You can assign theme locations to individual menus by selecting the desired settings at the bottom of the menu editor. To assign menus to all theme locations at once, visit the Manage Locations tab at the top of the screen." +msgstr "Puedes asignar ubicaciones del tema a menús individuales eligiendo los ajustes que desees al fondo del editor de menús. Para asignar menús a todas las ubicaciones del tema visita la pestaña de Gestionar ubicaciones en la parte superior de la pantalla." + +#: wp-admin/nav-menus.php:497 +msgid "Menu Management" +msgstr "Gestión de Menús" + +#: wp-admin/nav-menus.php:501 +msgid "Each custom menu may contain a mix of links to pages, categories, custom URLs or other content types. Menu links are added by selecting items from the expanding boxes in the left-hand column below." +msgstr "Cada menú personalizado puede contener una mezcla de enlaces a páginas, categorías, URLs personalizadas u otro tipo de contenido. Los enlaces de menú se añaden eligiendo elementos de las cajas expandibles de la columna izquierda inferior." + +#: wp-admin/nav-menus.php:503 +msgid "Add one or several items at once by selecting the checkbox next to each item and clicking Add to Menu" +msgstr "Añade uno o varios elementos a la vez eligiendo la casilla de al lado de cada elemento y haciendo clic en Añadir al menú" + +#: wp-admin/nav-menus.php:504 +msgid "To add a custom link, expand the Links section, enter a URL and link text, and click Add to Menu" +msgstr "Para añadir un enlace personalizado expande la sección de enlaces, introduce una URL y texto del enlace y luego haz clic en Añadir al menú" + +#: wp-admin/nav-menus.php:505 +msgid "To reorganize menu items, drag and drop items with your mouse or use your keyboard. Drag or move a menu item a little to the right to make it a submenu" +msgstr "Para reorganizar elementos del menú arrastra y suelta elementos con el ratón o usa el teclado. Arrastrando o moviendo un elemento de menú un poco a la derecha lo convierte en submenú." + +#: wp-admin/nav-menus.php:506 +msgid "Delete a menu item by expanding it and clicking the Remove link" +msgstr "Borra un elemento de menú expandiéndolo y haciendo clic en el enlace Borrar" + +#: wp-admin/nav-menus.php:510 +msgid "Editing Menus" +msgstr "Editando menús" + +#: wp-admin/nav-menus.php:514 +msgid "This screen is used for globally assigning menus to locations defined by your theme." +msgstr "Esta pantalla se usa para asignar menús globalmente a ubicaciones definidas en tu tema." + +#: wp-admin/nav-menus.php:515 +msgid "To assign menus to one or more theme locations, select a menu from each location’s drop down. When you’re finished, click Save Changes" +msgstr "Para asignar menús a una o más ubicaciones del tema elige un menú de cada desplegable de ubicación. Cuando hayas terminado haz clic en Guardar cambios" + +#: wp-admin/nav-menus.php:516 +msgid "To edit a menu currently assigned to a theme location, click the adjacent ’Edit’ link" +msgstr "Para editar un menú actualmente asignado a una ubicación del tema haz clic en el el enlace Editar a su lado" + +#: wp-admin/nav-menus.php:517 +msgid "To add a new menu instead of assigning an existing one, click the ’Use new menu’ link. Your new menu will be automatically assigned to that theme location" +msgstr "Para añadir un nuevo menú en vez de asignar a uno existente haz clic en el enlace Usar menú nuevo. Tu nuevo menú se asignará automáticamente a esa ubicación del tema" + +#: wp-admin/nav-menus.php:537 +msgid "Edit Menus" +msgstr "Editar Menús" + +#: wp-admin/nav-menus.php:539 +msgid "Manage Locations" +msgstr "Gestionar lugares" + +#: wp-admin/nav-menus.php:556 wp-admin/nav-menus.php:562 +msgid "Theme Location" +msgstr "Localización del Tema" + +#: wp-admin/nav-menus.php:557 wp-admin/nav-menus.php:563 +msgid "Assigned Menu" +msgstr "Menú asignado" + +#: wp-admin/nav-menus.php:572 +msgid "Select a Menu" +msgstr "Seleccionar un menú" + +#: wp-admin/nav-menus.php:584 +msgctxt "menu" +msgid "Edit" +msgstr "Editar" + +#: wp-admin/nav-menus.php:590 +msgctxt "menu" +msgid "Use new menu" +msgstr "Utilizar menú nuevo" + +#: wp-admin/revision.php:195 +msgid "Restore This Revision" +msgstr "Restaurar esta revisión" + +#: wp-admin/nav-menus.php:389 +msgid "Move up one" +msgstr "Mover uno arriba" + +#: wp-admin/nav-menus.php:390 +msgid "Move down one" +msgstr "Mover uno abajo" + +#: wp-admin/nav-menus.php:391 +msgid "Move to the top" +msgstr "Mover a la primera posición" + +#: wp-admin/nav-menus.php:393 +msgid "Move under %s" +msgstr "Mover detrás de %s" + +#: wp-admin/nav-menus.php:395 +msgid "Move out from under %s" +msgstr "Sacarlo de debajo de %s" + +#: wp-admin/nav-menus.php:397 +msgid "Under %s" +msgstr "Detrás de %s" + +#: wp-admin/nav-menus.php:399 +msgid "Out from under %s" +msgstr "Sacar %s" + +#: wp-admin/nav-menus.php:401 +msgid "%1$s. Menu item %2$d of %3$d." +msgstr "%1$s. Elemento de menú %2$d de %3$d." + +#: wp-admin/nav-menus.php:403 +msgid "%1$s. Sub item number %2$d under %3$s." +msgstr "%1$s. Número de subelemento %2$d de %3$s." + +#: wp-admin/user-edit.php:522 +msgid "Capabilities" +msgstr "Permisos" + +#: wp-admin/user-edit.php:530 +msgid "Denied: %s" +msgstr "Denegado: %s" + +#: wp-admin/includes/nav-menu.php:188 +msgid "Move" +msgstr "Mover" + +#: wp-admin/includes/nav-menu.php:189 +msgid "Up one" +msgstr "Uno hacia arriba" + +#: wp-admin/includes/nav-menu.php:190 +msgid "Down one" +msgstr "Uno hacia abajo" + +#: wp-admin/includes/nav-menu.php:193 +msgid "To the top" +msgstr "A la parte superior" + +#: wp-admin/nav-menus.php:707 +msgid "Menu Structure" +msgstr "Estructura del Menú" + +#: wp-admin/nav-menus.php:727 +msgid "Menu Settings" +msgstr "Opciones del Menú" + +#: wp-admin/includes/template.php:1959 +msgid "The backup of this post in your browser is different from the version below." +msgstr "La copia de seguridad de esta entrada de tu navegador es diferente de la versión que hay en la parte inferior." + +#: wp-admin/includes/template.php:1960 +msgid "Restore the backup." +msgstr "Restaurar la copia de seguridad." + +#: wp-admin/includes/template.php:1963 +msgid "Post restored successfully." +msgstr "Entrada restaurada con éxito." + +#: wp-admin/includes/template.php:1964 +msgid "Undo." +msgstr "Deshacer." + +#: wp-admin/includes/ajax-actions.php:993 +msgid "Draft created on %1$s at %2$s" +msgstr "Borrador creado el %1$s a las %2$s" + +#: wp-admin/includes/misc.php:697 +msgid "%s has taken over and is currently editing." +msgstr "%s ha tomado la posesión y está editando en este momento." + +#: wp-admin/includes/post.php:1299 +msgid "Take over" +msgstr "Tomar posesión" + +#: wp-admin/post.php:250 +msgid "You cannot move this item to the Trash. %s is currently editing." +msgstr "No puedes mover este elemento a la papelera. %s lo está editando en este momento." + +#: wp-admin/nav-menus.php:615 +msgid "Edit your menu below, or create a new menu." +msgstr "Edita tu menú abajo o crea un nuevo menú." + +#: wp-admin/nav-menus.php:620 +msgid "Select a menu to edit:" +msgstr "Elige el menú que quieras editar:" + +#: wp-admin/nav-menus.php:661 +msgid "or create a new menu." +msgstr "o crea un nuevo menú. " + +#: wp-admin/includes/ms.php:607 +msgid "Thank you for Updating! Please visit the Upgrade Network page to update all your sites." +msgstr "¡Gracias por actualizar! Visita la página de Actualizar red para actualizar todos tus sitios." + +#: wp-admin/setup-config.php:299 +msgid "All right, sparky! You’ve made it through this part of the installation. WordPress can now communicate with your database. If you are ready, time now to…" +msgstr "¡Todo bien amigo! Ya has terminado esta parte de la instalación. Ahora WordPress se puede comunicar con tu base de datos. Si estás listo es hora de%hellip;" + +#: wp-admin/includes/nav-menu.php:102 +msgid "sub item" +msgstr "subelemento" + +#: wp-admin/includes/nav-menu.php:598 +msgid "Link Text" +msgstr "Enlace de texto" + +#: wp-admin/includes/nav-menu.php:1330 +msgid "%1$s has been updated." +msgstr "%1$s se ha actualizado." + +#: wp-admin/nav-menus.php:263 +msgid "Selected menus have been successfully deleted." +msgstr "Los menús seleccionados han sido eliminados con éxito." + +#: wp-admin/nav-menus.php:623 +msgid "-- Select --" +msgstr "-- Seleccionar --" + +#: wp-admin/nav-menus.php:697 +msgid "Menu 1" +msgstr "Menú 1" + +#: wp-admin/nav-menus.php:708 +msgid "Edit your default menu by adding or removing items. Drag each item into the order you prefer. Click Create Menu to save your changes." +msgstr "Edita tu tema por defecto añadiendo o quitando elementos. Coloca cada elemento en el orden que prefieras. Haz click en Crear menú para guardar los cambios." + +#: wp-admin/nav-menus.php:721 +msgid "Give your menu a name above, then click Create Menu." +msgstr "Añade un nombre a tu menú, luego haz click en Crear Menú." + +#: wp-admin/nav-menus.php:740 +msgid "Auto add pages" +msgstr "Añadir páginas automáticamente" + +#: wp-admin/nav-menus.php:741 +msgid "Automatically add new top-level pages to this menu" +msgstr "Añade automáticamente nuevas páginas de nivel superior a este menú" + +#: wp-admin/nav-menus.php:747 +msgid "Theme locations" +msgstr "Ubicación del tema" + +#: wp-admin/nav-menus.php:752 +msgid "(Currently set to: %s)" +msgstr "(Actualmente establecido a: %s)" + +#: wp-admin/plugin-editor.php:125 +msgid "The Documentation menu below the editor lists the PHP functions recognized in the plugin file. Clicking Look Up takes you to a web page about that particular function." +msgstr "El menú de documentación de debajo del editor lista las funciones PHP reconocidas en el archivo del plugin. Haciendo clic en Buscar te lleva a una web con información sobre esa función en particular." + +#: wp-admin/plugin-editor.php:241 wp-admin/theme-editor.php:211 +msgid "Look Up" +msgstr "Buscar" + +#: wp-admin/theme-editor.php:29 +msgid "For PHP files, you can use the Documentation dropdown to select from functions recognized in that file. Look Up takes you to a web page with reference material about that particular function." +msgstr "Para los archivos PHP puedes usar el desplegable de documentación y elegir entre las funciones reconocidas en ese archivo. Buscar te lleva a una web con material de referencia acerca de esa función en particular." + +#: wp-admin/includes/class-wp-posts-list-table.php:582 +#: wp-admin/includes/misc.php:662 +msgid "%s is currently editing" +msgstr "%s está editando en este momento" + +#: wp-admin/includes/dashboard.php:1162 +msgid "http://codex.wordpress.org/First_Steps_With_WordPress" +msgstr "http://codex.wordpress.org/First_Steps_With_WordPress" + +#: wp-admin/edit-form-advanced.php:308 +msgid "You can upload and insert media (images, audio, documents, etc.) by clicking the Add Media button. You can select from the images and files already uploaded to the Media Library, or upload new media to add to your page or post. To create an image gallery, select the images to add and click the “Create a new gallery” button." +msgstr "Puedes subir e insertar archivos multimedia (imágenes, audios, documentos, etc.) con sólo hacer click en el botón \"Añadir medio\". Puedes elegir entras las imágenes ya subidas a la librería multimedia o subir nuevos archivos. Para crear una galería de imágenes, sólo tienes que seleccionar algunas y hacer click en el botón “Crear nueva galería”" + +#: wp-admin/edit-form-advanced.php:309 +msgid "You can also embed media from many popular websites including Twitter, YouTube, Flickr and others by pasting the media URL on its own line into the content of your post/page. Please refer to the Codex to learn more about embeds." +msgstr "Puedes incrustar contenidos de muchos sitios web como Twitter, You Tube, Flickr y otros sólo con poner la URL del contenido en una línea (sólo la URL en el párrafo) en la entrada o página. Por favor, consulta el Codex para saber más sobre contenido incrustado" + +#: wp-admin/includes/template.php:1887 +msgid "New Media Manager" +msgstr "Nuevo gestor de multimedia" + +#: wp-admin/includes/template.php:1888 +msgid "Uploading files and creating image galleries has a whole new look. Check it out!" +msgstr "Subir imágenes y la creación de galerías multimedia tiene un nuevo diseño, compruébalo" + +#: wp-admin/includes/image-edit.php:48 +msgid "Image rotation is not supported by your web host." +msgstr "La rotación de imágenes no es soportada por tu hosting" + +#: wp-admin/includes/bookmark.php:311 +msgid "If you are looking to use the link manager, please install the Link Manager plugin." +msgstr "Si quieres usar el gestor de enlaces, por favor, instala el plugin Link Manager" + +#: wp-admin/includes/dashboard.php:1160 +msgid "Manage widgets or menus" +msgstr "Gestiona widgets o menús" + +#: wp-admin/custom-background.php:91 +msgid "To use a background image, simply upload it or choose an image that has already been uploaded to your Media Library by clicking the “Choose Image” button. You can display a single instance of your image, or tile it to fill the screen. You can have your background fixed in place, so your site content moves on top of it, or you can have it scroll with your site." +msgstr "Para usar una imagen de fondo, simplemente súbela o selecciona una imagen que ya esté en la librería multimedia apretando el botón \"Selecciona una imagen\". Puedes mostrar toda la imagen de una vez o recortarla para que se ajuste a tu pantalla. Puedes tener la imagen de fondo fija, es decir, que el contenido de tu sitio se mueva por encima de ella, o puedes hacer que se desplace con tu sitio." + +#: wp-admin/custom-header.php:128 +msgid "Don’t forget to click “Save Changes” when you’re done!" +msgstr "No olvides presionar “Guardar cambios” cuando esté listo." + +#: wp-admin/edit-form-advanced.php:250 +msgid "The title field and the big Post Editing Area are fixed in place, but you can reposition all the other boxes using drag and drop. You can also minimize or expand them by clicking the title bar of each box. Use the Screen Options tab to unhide more boxes (Excerpt, Send Trackbacks, Custom Fields, Discussion, Slug, Author) or to choose a 1- or 2-column layout for this screen." +msgstr "El campo de título y el área de edición de la entrada son fijos, pero puedes recolocar el resto de cajas arrastrando y soltando. También puedes minimizarlas o expandirlas haciendo clic en la barra de título de cada caja. Usa la pestaña de Opciones de pantalla para desvelar más cajas (Extracto, Enviar trackbacks, campos personalizados, comenetarios, slug, autor) o elige una disposición a 1 o 2 columnas para esta pantalla. " + +#: wp-admin/edit-form-advanced.php:313 +msgid "Inserting Media" +msgstr "Insertando multimedia" + +#: wp-admin/edit-form-advanced.php:319 +msgid "Several boxes on this screen contain settings for how your content will be published, including:" +msgstr "Muchos apartados en esta pantalla contienen configuraciones para cómo se publicará tu contenido, incluyendo:" + +#: wp-admin/edit-form-advanced.php:323 +msgid "Format - Post Formats designate how your theme will display a specific post. For example, you could have a standard blog post with a title and paragraphs, or a short aside that omits the title and contains a short text blurb. Please refer to the Codex for descriptions of each post format. Your theme could enable all or some of 10 possible formats." +msgstr "Formato - Los formatos de entrada definen como tu tema mostrará una entrada específica. Por ejemplo, podría ser una entrada de blog estándar, con un título y párrafos, o una pequeña minientrada que omita el título y contenga solo un pequeño texto. Revisa el Codex para saber más de las descripciones de cada formato de entrada. Tu tema puede soportar todos o solo alguno de los 10 posibles formatos." + +#: wp-admin/edit-form-advanced.php:334 +msgid "Publish Settings" +msgstr "Configuración de publicación" + +#: wp-admin/edit-tags.php:221 +msgid "Parent - Categories, unlike tags, can have a hierarchy. You might have a Jazz category, and under that have child categories for Bebop and Big Band. Totally optional. To create a subcategory, just choose another category from the Parent dropdown." +msgstr "Superior - Las categorías, al contrario que las etiquetas, pueden tener jerarquías. Podrías tener una categoría Jazz, y bajo ella categorías hijas para Bebop y Big Band. Es totalmente opcional. Para crear una subcategoría simplemente elige otra categoría del desplegable Superior." + +#: wp-admin/index.php:57 +msgid "Box Controls - Click the title bar of the box to expand or collapse it. In addition, some boxes have configurable content, and will show a “Configure” link in the title bar if you hover over it." +msgstr "Controles de caja - Haz clic en la barra de título de la caja para expandirla o contraerla. Además, algunas cajas tienen contenido configurable, y mostrarán un enlace para “Configurar” en la barra de título al pasar con el cursor sobre ella." + +#: wp-admin/widgets.php:67 +msgid "When changing themes, there is often some variation in the number and setup of widget areas/sidebars and sometimes these conflicts make the transition a bit less smooth. If you changed themes and seem to be missing widgets, scroll down on this screen to the Inactive Widgets area, where all of your widgets and their settings will have been saved." +msgstr "Al cambiar de tema, a menudo hay algunos cambios en el número y configuración de las áreas y barras laterales de los widgets, y a veces estos conflictos hacen que el cambio sea un poco menos fácil. Si has cambiado de tema y parece que se hubiesen perdido widgets, ve al final de esta página al área de Widgets inactivos, donde se guardan todos tus widgets inactivos, con sus configuraciones." + +#: wp-admin/includes/media.php:2260 +msgid "You are using the multi-file uploader. Problems? Try the browser uploader instead." +msgstr "Estás utilizando la subida múltiple de archivos. ¿Algún problema? Puedes probar a subirlo desde el navegador." + +#: wp-admin/async-upload.php:57 +msgctxt "media item" +msgid "Edit" +msgstr "Editar" + +#: wp-admin/custom-header.php:625 +msgctxt "color" +msgid "Default: %s" +msgstr "Por defecto: %s" + +#: wp-admin/includes/class-wp-media-list-table.php:156 +msgctxt "column name" +msgid "Uploaded to" +msgstr "Subido a" + +#: wp-admin/custom-background.php:355 wp-admin/custom-header.php:771 +#: wp-admin/includes/ajax-actions.php:1665 +msgid "The uploaded file is not a valid image. Please try again." +msgstr "El archivo subido no es una imagen válida. Inténtalo de nuevo." + +#: wp-admin/custom-background.php:261 +msgid "Choose a Background Image" +msgstr "Elige una imagen de fondo" + +#: wp-admin/custom-header.php:536 +msgid "Choose a Custom Header" +msgstr "Elige una cabecera personalizada" + +#: wp-admin/custom-background.php:92 +msgid "You can also choose a background color by clicking the Select Color button and either typing in a legitimate HTML hex value, e.g. “#ff0000” for red, or by choosing a color using the color picker." +msgstr "Puedes elegir un color de fondo haciendo click en el botón de selección del color o escribiendo un valor hexadecimal HTML válido. Por ejemplo “#ff0000” para rojo o utilizando el selector de color." + +#: wp-admin/custom-header.php:127 +msgid "In the Header Text section of this page, you can choose whether to display this text or hide it. You can also choose a color for the text by clicking the Select Color button and either typing in a legitimate HTML hex value, e.g. “#ff0000” for red, or by choosing a color using the color picker." +msgstr "En la sección del texto de la cabecera puedes elegir entre mostrarlo u ocultarlo. También puedes elegir el color del texto haciendo click en el botón de selección del color o escribiendo un valor hexadecimal HTML válido. Por ejemplo “#ff0000” para rojo o utilizando el selector de color." + +#: wp-admin/customize.php:121 +msgid "Theme Customizer Options" +msgstr "Opciones de personalización del tema" + +#: wp-admin/options-reading.php:65 +msgid "You can choose whether or not your site will be crawled by robots, ping services, and spiders. If you want those services to ignore your site, click the checkbox next to “Discourage search engines from indexing this site” and click the Save Changes button at the bottom of the screen. Note that your privacy is not complete; your site is still visible on the web." +msgstr "Puedes elegir si quieres (o no) que tu sitio sea rastreado por robots, servicios de notificación o arañas. Si quieres que esos servicios ignoren tu sitio, haz click en la casilla de verificación que están junto a “No permitir a los motores de búsqueda indexar este sitio”y hacer click en el botón de Guardar Cambios que hay en la parte inferior de la pantalla. Ten en cuenta que la privacidad no es completa, el sitio sigue siendo visible y público en la web." + +#: wp-admin/includes/dashboard.php:1158 +msgid "More Actions" +msgstr "Más acciones" + +#: wp-admin/includes/dashboard.php:1161 +msgid "Turn comments on or off" +msgstr "Activa o desactiva los comentarios" + +#: wp-admin/includes/dashboard.php:1162 +msgid "Learn more about getting started" +msgstr "Aprende más de cómo comenzar" + +#: wp-admin/includes/media.php:2438 +msgid "File URL:" +msgstr "URL archivo:" + +#: wp-admin/edit-comments.php:127 +msgid "In the In Response To column, there are three elements. The text is the name of the post that inspired the comment, and links to the post editor for that entry. The View Post link leads to that post on your live site. The small bubble with the number in it shows the number of approved comments that post has received. If the bubble is gray, you have moderated all comments for that post. If it is blue, there are pending comments. Clicking the bubble will filter the comments screen to show only comments on that post." +msgstr "En la columna En respuesta a hay tres elementos. El texto es el nombre de la entrada que inspiró el comentario, y los enlaces al editor para esa entrada. El enlace de Ver entrada te lleva a esa entrada en tu sitio. La pequeña burbuja con números muestra la cantidad de comentarios aprobados que ha recibido esa entrada. Si la burbuja es gris has aprobado todos los comentarios de esa entrada. Si es azul hay comentarios pendientes. Haciendo clic en la burbuja filtrará la pantalla de comentarios para mostrar solo los comentarios de esa entrada." + +#: wp-admin/includes/ms.php:391 +msgid "Used: %1$s%% of %2$s" +msgstr "Usado %1$s%% de %2$s" + +#: wp-admin/users.php:234 +msgid "ID #%1$s: %2$s The current user will not be deleted." +msgstr "ID #%1$s: %2$s El usuario actual no será eliminado." + +#: wp-admin/users.php:236 wp-admin/users.php:338 +msgid "ID #%1$s: %2$s" +msgstr "ID #%1$s: %2$s" + +#: wp-admin/users.php:334 +msgid "ID #%1$s: %2$s The current user will not be removed." +msgstr "ID #%1$s: %2$s El usuario actual no será borrado." + +#: wp-admin/users.php:336 +msgid "ID #%1$s: %2$s You don't have permission to remove this user." +msgstr "ID #%1$s: %2$s No tienes permisos para borrar este usuario." + +#: wp-admin/users.php:224 +msgid "Please select an option." +msgstr "Por favor, elige una opción" + +#: wp-admin/includes/ms.php:283 +msgid "ERROR: The email address is already used." +msgstr "ERROR: Esa dirección de correo electrónico ya está siendo utilizada." + +#: wp-admin/includes/image-edit.php:213 wp-admin/includes/image-edit.php:252 +#: wp-admin/includes/image-edit.php:353 +msgid "$image needs to be an WP_Image_Editor object" +msgstr "$image necesita ser un objeto de WP_Image_Editor" + +#: wp-admin/includes/image-edit.php:281 +msgid "Use WP_Image_Editor::rotate" +msgstr "Utiliza WP_Image_Editor::rotate" + +#: wp-admin/includes/image-edit.php:303 +msgid "Use WP_Image_Editor::flip" +msgstr "Utiliza WP_Image_Editor::flip" + +#: wp-admin/includes/template.php:1108 +msgid "The privacy options group has been removed. Use another settings group." +msgstr "El grupo de opciones de privacidad se ha eliminado. Utiliza otro grupo de ajustes." + +#: wp-admin/options-writing.php:183 +msgid "WordPress is not notifying any Update Services because of your site’s visibility settings." +msgstr "WordPress no está notificando a ningún Servicios de notificación por los ajustes de visibilidad del sitio." + +#: wp-admin/includes/class-wp-themes-list-table.php:198 +#: wp-admin/theme-editor.php:33 wp-admin/update-core.php:297 +msgid "http://codex.wordpress.org/Child_Themes" +msgstr "http://codex.wordpress.org/Child_Themes" + +#: wp-admin/includes/dashboard.php:252 +msgid "Search Engines Discouraged" +msgstr "Motores de búsqueda disuadidos" + +#: wp-admin/includes/dashboard.php:1129 +msgid "Welcome to WordPress!" +msgstr "Bienvenido a WordPress" + +#: wp-admin/includes/dashboard.php:1130 +msgid "We’ve assembled some links to get you started:" +msgstr "Estamos preparando algunos enlaces para que puedas comenzar:" + +#: wp-admin/includes/dashboard.php:1133 +msgid "Get Started" +msgstr "Comienza" + +#: wp-admin/includes/dashboard.php:1137 +msgid "or, change your theme completely" +msgstr "o, cambia tu tema por completo" + +#: wp-admin/includes/dashboard.php:1141 +msgid "Next Steps" +msgstr "Siguientes pasos" + +#: wp-admin/includes/dashboard.php:1144 wp-admin/includes/dashboard.php:1147 +msgid "Edit your front page" +msgstr "Edita tu página de inicio" + +#: wp-admin/includes/dashboard.php:1145 wp-admin/includes/dashboard.php:1148 +msgid "Add additional pages" +msgstr "Añade páginas adicionales" + +#: wp-admin/includes/dashboard.php:1149 +msgid "Add a blog post" +msgstr "Añade una entrada" + +#: wp-admin/includes/dashboard.php:1151 +msgid "Write your first blog post" +msgstr "Escribe tu primera entrada en el blog" + +#: wp-admin/includes/dashboard.php:1152 +msgid "Add an About page" +msgstr "Añade una página Sobre mí" + +#: wp-admin/includes/dashboard.php:1154 +msgid "View your site" +msgstr "Ver tu sitio" + +#: wp-admin/includes/meta-boxes.php:278 +msgid "Uploaded on: %1$s" +msgstr "Subido a: %1$s" + +#: wp-admin/includes/plugin-install.php:210 +msgid "If you have marked plugins as favorites on WordPress.org, you can browse them here." +msgstr "Si has marcado un plugin cómo favorito en WordPress.org, los puedes ver desde aquí." + +#: wp-admin/includes/plugin-install.php:214 +msgid "Your WordPress.org username:" +msgstr "Tu nombre de usuario en WordPress.org" + +#: wp-admin/includes/plugin-install.php:216 +msgid "Get Favorites" +msgstr "Obtener favoritos" + +#: wp-admin/includes/plugin.php:1716 wp-admin/includes/plugin.php:1721 +#: wp-admin/includes/plugin.php:1744 wp-admin/includes/plugin.php:1749 +#: wp-admin/includes/template.php:1065 wp-admin/includes/template.php:1070 +msgid "The \"%s\" options group has been removed. Use another settings group." +msgstr "El grupo de opciones \"%s\" ha sido eliminado. Utiliza otro grupo de ajustes." + +#: wp-admin/includes/update-core.php:1040 wp-admin/update-core.php:418 +msgid "Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click here." +msgstr "Bienvenido a WordPress %1$s. Serás redirigido a la pantalla Sobre WordPress. Si no es así, haz clic aquí." + +#: wp-admin/options-reading.php:58 +msgid "You can also control the display of your content in RSS feeds, including the maximum numbers of posts to display and whether to show full text or a summary." +msgstr "También puedes controlar que mostrar en el contenido de tu canal RSS, incluyendo el número máximo de entradas a mostrar o si mostrar todo el texto o solo un resumen." + +#: wp-admin/options-reading.php:64 wp-admin/options-reading.php:144 +#: wp-admin/options-reading.php:145 +msgid "Search Engine Visibility" +msgstr "Visibilidad para los buscadores" + +#: wp-admin/options-reading.php:148 +msgid "Allow search engines to index this site" +msgstr "Permitir a los buscadores que indexen el sitio" + +#: wp-admin/options-reading.php:150 wp-admin/options-reading.php:170 +msgid "Discourage search engines from indexing this site" +msgstr "Disuade a los motores de búsqueda de indexar este sitio" + +#: wp-admin/options-reading.php:171 +msgid "It is up to search engines to honor this request." +msgstr "Depende de los motores de búsqueda atender esta petición o no." + +#: wp-admin/plugin-install.php:58 +msgid "If you know what you’re looking for, Search is your best bet. The Search screen has options to search the WordPress.org Plugin Directory for a particular Term, Author, or Tag. You can also search the directory by selecting popular tags. Tags in larger type mean more plugins have been labeled with that tag." +msgstr "Si sabes lo que estás buscando Buscar es tu mejor apuesta. La pantalla de búsqueda tiene opciones para buscar en el directorio de plugins de WordPress.org para un término, autor o etiqueta concretos. También puedes buscar en el directorio eligiendo las etiquetas populares. Las etiquetas de mayor tamaño muestran más plugins que han sido etiquetados con esa etiqueta." + +#: wp-admin/plugin-install.php:60 +msgid "You can also browse a user’s favorite plugins, by using the Favorites link in the upper left of the screen and entering their WordPress.org username." +msgstr "También puedes navegar por los plugins favoritos de un usuario usando el enlace Favoritos de la parte superior derecha de la pantalla e introduciendo su nombre de usuario en WordPress.org." + +#: wp-admin/plugin-install.php:61 +msgid "If you want to install a plugin that you’ve downloaded elsewhere, click the Upload link in the upper left. You will be prompted to upload the .zip package, and once uploaded, you can activate the new plugin." +msgstr "Si quieres instalar un plugin que hayas descargado por ahí haz clic en el enlace Subir de la parte superior izquierda. Se te pedirá que subas el paquete .zip, y una vez subido podrás activar el nuevo plugin." + +#: wp-admin/setup-config.php:127 +msgid "If for any reason this automatic file creation doesn’t work, don’t worry. All this does is fill in the database information to a configuration file. You may also simply open wp-config-sample.php in a text editor, fill in your information, and save it as wp-config.php." +msgstr "Si por cualquier motivo la creación automática del archivo no funciona no te preocupes. Lo que hace este proceso es rellenar un fichero de configuración con la información de la base de datos. También puedes simplemente abrir el archivo wp-config-sample.php en un editor de texto, rellenarlo con tu información, y guardarlo como . " + +#: wp-admin/setup-config.php:138 +msgid "Below you should enter your database connection details. If you’re not sure about these, contact your host." +msgstr "A continuación deberás introducir los detalles de conexión a tu base de datos. Si no estás seguro de esta información contacta con tu proveedor de alojamiento web." + +#: wp-admin/setup-config.php:266 +msgid "Sorry, but I can’t write the wp-config.php file." +msgstr "Lo siento, pero no puedo escribir en el archivo wp-config.php." + +#: wp-admin/setup-config.php:273 +msgid "After you’ve done that, click “Run the install.”" +msgstr "Después de hacer esto haz clic en “Ejecutar la instalación.”" + +#: wp-admin/themes.php:133 +msgid "Settings saved and theme activated. Visit site" +msgstr "Opciones guardadas y tema activado. Visitar sitio" + +#: wp-admin/includes/class-wp-themes-list-table.php:197 +msgid "This child theme requires its parent theme, %2$s." +msgstr "Este tema hijo requiere su tema superior, %2$s." + +#: wp-admin/edit-form-advanced.php:294 +msgid "This screen allows you to edit four fields for metadata in a file within the media library." +msgstr "Esta pantalla te permite editar los cambios de los metadatos en un archivo dentro de la Librería multimedia." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:36 +msgctxt "Plugin Installer" +msgid "Favorites" +msgstr "Favoritos" + +#: wp-admin/includes/theme.php:217 +msgid "Flexible Header" +msgstr "Cabecera flexible" + +#: wp-admin/users.php:248 +msgid "Attribute all posts to:" +msgstr "Atribuir todas las entradas a: " + +#: wp-admin/users.php:246 +msgid "Delete all posts." +msgstr "Borrar todas la entradas." + +#: wp-admin/users.php:243 +msgid "What should be done with posts owned by this user?" +msgid_plural "What should be done with posts owned by these users?" +msgstr[0] "¿Qué debe hacerse con las entradas de este usuario?" +msgstr[1] "¿Qué debe hacerse con las entradas de estos usuarios?" + +#: wp-admin/theme-install.php:61 +msgid "To install the theme so you can preview it with your site’s content and customize its theme options, click the \"Install\" button at the top of the left-hand pane. The theme files will be downloaded to your website automatically. When this is complete, the theme is now available for activation, which you can do by clicking the \"Activate\" link, or by navigating to your Manage Themes screen and clicking the \"Live Preview\" link under any installed theme’s thumbnail image." +msgstr "Para instalar el tema puedes previsualizarlo con el contenido de tu sitio y personalizar las opciones del tema haz clc en el botón \"Instalar\" de la parte superior izquierda del panel. Los archivos del tema se descargarán automáticamente en tu sitio. Cuando se complete el tema estará listo para activarlo haciendo clic en el enlace \"Activar\", o navegar a la pantalla de Administrar temas y hacer clic en el enlace de \"Vista previa\" debajo de la miniatura de cada tema instalado. " + +#: wp-admin/options-reading.php:50 +msgid "The character encoding of your site (UTF-8 is recommended)" +msgstr "La codificación de caracteres de tu sitio (se recomienda UTF-8)" + +#: wp-admin/plugin-editor.php:126 wp-admin/theme-editor.php:30 +msgid "In the editing area the Tab key enters a tab character. To move below this area by pressing Tab, press the Esc key followed by the Tab key." +msgstr "En el área de edición, la tecla Tab introduce un caracter de tabulado. Para moverte por debajo de este área tecleando la tecla Tab teclea la tecla Esc seguida de la tecla Tab." + +#: wp-admin/includes/widgets.php:197 +msgctxt "widget" +msgid "Add" +msgstr "Añadir" + +#: wp-admin/includes/widgets.php:196 +msgctxt "widget" +msgid "Edit" +msgstr "Editar" + +#: wp-admin/includes/upgrade.php:183 +msgid "" +"This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:\n" +"\n" +"
      Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my blog. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin' caught in the rain.)
      \n" +"\n" +"...or something like this:\n" +"\n" +"
      The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys 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.
      \n" +"\n" +"As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!" +msgstr "" +"Esto es una página de ejemplo. Es diferente a una entrada porque permanece fija en un lugar y se mostrará en la navegación de tu sitio (en la mayoría de los temas). La mayoría de la gente empieza con una página de Acerca de, que les presenta a los potenciales visitantes del sitio. Podría ser algo como esto:\n" +"\n" +"
      ¡Hola! Soy mensajero por el día, aspirante a actor por la noche, y este es mi blog. Vivo en Madrid, tengo un perrazo llamado Duque y me gustan las piñas coladas (y que me pille un chaparrón)
      \n" +"\n" +"...o algo así:\n" +"\n" +"
      La empresa XYZ se fundó en 1971 y ha estado ofreciendo \"cosas\" de calidad al público desde entonces. Situada en Madrid, XYZ emplea a más de 2.000 personas y hace todo tipo de cosas sorprendentes para la comunidad de Madrid.
      \n" +"\n" +"Si eres nuevo en WordPress deberías ir a tu escritorio para borrar esta páginay crear páginas nuevas con tu propio contenido. ¡Pásalo bien!" + +#: wp-admin/includes/upgrade.php:165 +msgid "" +"Hi, this is a comment.\n" +"To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them." +msgstr "" +"Hola, esto es un comentario.\n" +"Para borrar un comentario simplemente accede y revisa los comentarios de la entrada. Ahí tendrás la opción de editarlo o borrarlo." + +#: wp-admin/includes/theme-install.php:78 +msgid "Search by tag" +msgstr "Búsqueda por etiquetas" + +#: wp-admin/includes/theme-install.php:75 +msgid "Search by author" +msgstr "Búsqueda por autor" + +#: wp-admin/includes/theme-install.php:72 +#: wp-admin/includes/theme-install.php:83 +msgid "Search by keyword" +msgstr "Búsqueda por palabra clave" + +#: wp-admin/includes/theme-install.php:63 +msgid "Type of search" +msgstr "Tipo de búsqueda" + +#: wp-admin/includes/screen.php:917 +msgid "Screen Options Tab" +msgstr "Pestaña de opciones de pantalla" + +#: wp-admin/includes/screen.php:781 +msgid "Contextual Help Tab" +msgstr "Pestaña de ayuda contextual" + +#: wp-admin/includes/ms.php:363 +msgid "Sorry, you have used your space allocation. Please delete some files to upload more files." +msgstr "Lo siento, has agotado la cuota de espacio disponible. Por favor, borra algunos archivos para poder subir más." + +#: wp-admin/includes/media.php:2317 +msgid "Sorry, you have used all of your storage quota of %s MB." +msgstr "Disculpa, pero ya has utilizado cuota de almacenamiento de %s MB." + +#: wp-admin/includes/class-wp-comments-list-table.php:363 +msgid "Select comment" +msgstr "Elegir comentario" + +#: wp-admin/includes/class-wp-links-list-table.php:134 +#: wp-admin/includes/class-wp-media-list-table.php:213 +#: wp-admin/includes/class-wp-ms-sites-list-table.php:228 +#: wp-admin/includes/class-wp-ms-users-list-table.php:176 +#: wp-admin/includes/class-wp-plugins-list-table.php:373 +#: wp-admin/includes/class-wp-posts-list-table.php:525 +#: wp-admin/includes/class-wp-terms-list-table.php:236 +#: wp-admin/includes/class-wp-users-list-table.php:264 +msgid "Select %s" +msgstr "Elige %s" + +#: wp-admin/edit-tags.php:347 +msgid "Tags can be selectively converted to categories using the tag to category converter." +msgstr "Puedes elegir las etiquetas que quieras y convertirlas en categorías utilizando el conversor de etiquetas a categorías." + +#: wp-admin/edit-tags.php:198 +msgid "You can delete Link Categories in the Bulk Action pull-down, but that action does not delete the links within the category. Instead, it moves them to the default Link Category." +msgstr "Puedes borrar Categorías de enlace en el desplegable de Acciones en lote, pero la acción no borra los enlaces dentro de la categoría. En su lugar, los mueve a la Categoría de enlaces por defecto." + +#: wp-admin/edit-form-advanced.php:275 +msgid "Creating a Page is very similar to creating a Post, and the screens can be customized in the same way using drag and drop, the Screen Options tab, and expanding/collapsing boxes as you choose. This screen also has the distraction-free writing space, available in both the Visual and Text modes via the Fullscreen buttons. The Page editor mostly works the same as the Post editor, but there are some Page-specific features in the Page Attributes box:" +msgstr "Crear una Página es muy parecido a crear una Entrada, las pantallas se pueden personalizar del mismo modo, arrastrando y soltando, tienes pestaña de Opciones de pantalla, y puedes expandir y contraer cajas como quieras. Esta pantalla también dispone del espacio de escritura sin distracciones, disponible tanto en el editor Visual como en el de Texto a través del botón \"Pantalla completa\". El editor de Páginas funciona muy similar al editor de Entradas, pero aquí hay algunas características específicas para páginas en la caja de Atributos de página:" + +#: wp-admin/edit-form-advanced.php:259 +msgid "Post editor - Enter the text for your post. There are two modes of editing: Visual and Text. Choose the mode by clicking on the appropriate tab. Visual mode gives you a WYSIWYG editor. Click the last icon in the row to get a second row of controls. The Text mode allows you to enter HTML along with your post text. Line breaks will be converted to paragraphs automatically. You can insert media files by clicking the icons above the post editor and following the directions. You can go to the distraction-free writing screen via the Fullscreen icon in Visual mode (second to last in the top row) or the Fullscreen button in Text mode (last in the row). Once there, you can make buttons visible by hovering over the top area. Exit Fullscreen back to the regular post editor." +msgstr "Editor de entradas - Introduce el texto de tu entrada. Hay dos modos de edición: Visual y Texto. Elige el modo haciendo clic en la pestaña correspondiente. El modo visual te ofrece un editor WYSIWYG (lo que ves es lo que obtendrás). Haz clic en el último icono de la fila para disponer de una segunda fila de controles. El modo Texto te permite introducir HTML en el texto de la entrada. Los saltos de línea se convertirán automáticamente en párrafos. Puedes insertar archivos multimedia haciendo clic en los iconos sobre el editor de entradas y siguiendo las instrucciones. Puedes ir a la pantalla de escritura sin distracciones desde el icono de Pantalla completa del modo Visual (el segundo desde el final en la fila superior) o desde el botón Pantalla completa del modo Texto (el último de la fila). Una vez ahí puedes hacer los botones visibles moviendo el cursor a la parte superior. Al salir de Pantalla completa se vuelve al editor de entradas normal." + +#: wp-admin/custom-header.php:499 +msgid "You can select an image to be shown at the top of your site by uploading from your computer or choosing from your media library. After selecting an image you will be able to crop it." +msgstr "Puedes elegir una imagen para que se muestre en la parte superior de tu sitio subiéndola desde tu ordenador o eligiéndola de tu librería multimedia. Después de elegir una imagen podrás recortarla." + +#: wp-admin/admin-header.php:206 +msgid "Main content" +msgstr "Contenido principal" + +#: wp-admin/admin-header.php:185 +msgid "Skip to main content" +msgstr "Saltar al contenido principal" + +#: wp-admin/custom-header.php:116 +msgid "You can set a custom image header for your site. Simply upload the image and crop it, and the new header will go live immediately. Alternatively, you can use an image that has already been uploaded to your Media Library by clicking the “Choose Image” button." +msgstr "Puedes elegir una imagen de cabecera personalizada para tu sitio. Simplemente sube la imagen y recórtala, la nueva cabecera se verá en directo inmediatamente. Alternativamente puedes usar una imagen que ya hayas subido a tu Librería multimedia haciendo clic en el botón “Elegir imagen”" + +#: wp-admin/custom-header.php:751 +msgid "Skip Cropping, Publish Image as Is" +msgstr "Dejar de recortar, publicar la imagen tal cual" + +#: wp-admin/customize.php:124 +msgid "You are previewing %s" +msgstr "Estás previsualizando %s" + +#: wp-admin/custom-background.php:249 wp-admin/custom-header.php:497 +msgid "Select Image" +msgstr "Elegir imagen" + +#: wp-admin/custom-background.php:259 wp-admin/custom-header.php:533 +msgid "Or choose an image from your media library:" +msgstr "O elige una imagen de tu librería multimedia:" + +#: wp-admin/custom-background.php:262 wp-admin/custom-header.php:537 +msgid "Choose Image" +msgstr "Elegir imagen" + +#: wp-admin/includes/template.php:1863 +msgid "Click the Live Preview links in the Available Themes list below to customize and preview another theme before activating it." +msgstr "Haz clic en los enlaces de Vista previa de la siguiente lista de Temas disponibles para personalizar y previsualizar otro tema antes de activarlo. " + +#: wp-admin/customize.php:76 +msgid "Customize %s" +msgstr "Personalizar %s" + +#: wp-admin/customize.php:151 +#: wp-admin/includes/class-wp-theme-install-list-table.php:266 +msgid "Collapse" +msgstr "Contraer" + +#: wp-admin/includes/template.php:1877 +msgid "New Feature: Choose Image from Library" +msgstr "Nueva característica: Elegir imagen desde la librería" + +#: wp-admin/includes/template.php:1878 +msgid "Want to use an image you uploaded earlier? Select it from your media library instead of uploading it again." +msgstr "¿Quieres usar una imagen que ya subiste? Elígela desde tu librería multimedia en vez de subirla de nuevo." + +#: wp-admin/includes/template.php:1861 +msgid "New Feature: Customizer" +msgstr "Nueva característica: Personalizador" + +#: wp-admin/includes/template.php:1862 +msgid "Click Customize to change the header, background, title and menus of the current theme, all in one place." +msgstr "Haz clic en Personalizar para cambiar la cabecera, fondo, título y menús del tema actual, todo desde un mismo lugar." + +#: wp-admin/custom-header.php:119 +msgid "If you don’t want a header image to be displayed on your site at all, click the “Remove Header Image” button at the bottom of the Header Image section of this page. If you want to re-enable the header image later, you just have to select one of the other image options and click “Save Changes”." +msgstr "Si no quieres que se muestre ninguna imagen de cabecera en tu sitio haz clic en el botón “Quitar imagen de cabecera” al fondo de la sección de Cabecera de imagen de esta página. Si quieres reactivar la cabecera de imagen más tarde tendrás que elegir una de las opciones de imagen y hacer clic en “Guardar cambios”." + +#: wp-admin/media.php:62 +msgid "You attempted to edit an item that isn’t an attachment. Please go back and try again." +msgstr "Has tratado de editar un elemento que no es un adjunto. Por favor, vuelve atrás e inténtalo de nuevo." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:252 +msgctxt "plugin" +msgid "Installed" +msgstr "Instalado" + +#: wp-admin/includes/class-wp-theme-install-list-table.php:221 +#: wp-admin/includes/class-wp-theme-install-list-table.php:335 +msgid "This theme is already installed and is up to date" +msgstr "Este tema ya está instalado y actualizado" + +#: wp-admin/includes/class-wp-theme-install-list-table.php:221 +#: wp-admin/includes/class-wp-theme-install-list-table.php:335 +msgctxt "theme" +msgid "Installed" +msgstr "Instalado" + +#: wp-admin/theme-install.php:60 +msgid "Once you have generated a list of themes, you can preview and install any of them. Click on the thumbnail of the theme you’re interested in previewing. It will open up in a full-screen Preview page to give you a better idea of how that theme will look." +msgstr "Una vez que hayas generado una lista de temas puedes previsualizar e instalar cualquiera de ellos. Haz clic en la miniatura del tema que quieras previsualizar. Se abrirá una vista previa a pantalla completa para darte una mejor idea de como se verá ese tema." + +#: wp-admin/theme-install.php:65 +msgid "Previewing and Installing" +msgstr "Previsualizando e instalando" + +#: wp-admin/themes.php:78 +msgid "Previewing and Customizing" +msgstr "Previsualizar y personalizar" + +#: wp-admin/includes/media.php:2274 +msgid "You are using the browser’s built-in file uploader. The WordPress uploader includes multiple file selection and drag and drop capability. Switch to the multi-file uploader." +msgstr "Estás usando el cargador propio del navegador. El cargador de WordPress incluye selección múltiple de archivos y capacidad de arrastrar y soltar. Cambiar al cargador múltiple." + +#: wp-admin/includes/class-wp-theme-install-list-table.php:225 +msgid "Preview %s" +msgstr "Previsualizar %s" + +#: wp-admin/tools.php:22 +msgid "Categories have hierarchy, meaning that you can nest sub-categories. Tags do not have hierarchy and cannot be nested. Sometimes people start out using one on their posts, then later realize that the other would work better for their content." +msgstr "Las categorías tienen jerarquías, lo que significa que pueden anidar subcategorías. Las Etiquetas no tienen jerarquías y no pueden anidarse. A veces la gente empieza a usar una en sus entradas, y luego se da cuenta de que otra funcionaría mejor para su contenido." + +#: wp-admin/tools.php:23 +msgid "The Categories and Tags Converter link on this screen will take you to the Import screen, where that Converter is one of the plugins you can install. Once that plugin is installed, the Activate Plugin & Run Importer link will take you to a screen where you can choose to convert tags into categories or vice versa." +msgstr "El enlace del Conversor de categorías y etiquetas de esta pantalla te llevará a la pantalla de importación, donde el conversor es un plugin que puedes instalar. Una vez esté instalado el plugin, el enlace de Activar plugin y ejecutar importador te llevará a una pantalla donde podrás elegir convertir etiquetas a categorías y viceversa." + +#: wp-admin/includes/class-wp-themes-list-table.php:154 +#: wp-admin/includes/class-wp-upgrader-skins.php:442 +#: wp-admin/includes/class-wp-upgrader-skins.php:507 wp-admin/themes.php:220 +#: wp-admin/themes.php:297 wp-admin/themes.php:359 +msgid "Live Preview" +msgstr "Vista previa" + +#: wp-admin/custom-header.php:108 +msgid "This screen is used to customize the header section of your theme." +msgstr "Esta pantalla se usa para personalizar la sección de cabecera de tu tema." + +#: wp-admin/custom-header.php:109 +msgid "You can choose from the theme’s default header images, or use one of your own. You can also customize how your Site Title and Tagline are displayed." +msgstr "Puedes elegir entre las imágenes por defecto del tema, o usar una tuya. También puedes personalizar como se mostrarán el título y descripción de tu sitio." + +#: wp-admin/custom-header.php:117 +msgid "Some themes come with additional header images bundled. If you see multiple images displayed, select the one you’d like and click the “Save Changes” button." +msgstr "Algunos temas vienen con imágenes de cabecera adicionales. Si ves que se muestran varias imágenes elige una que te guste y haz clic en el botón “Guardar cambios”" + +#: wp-admin/custom-header.php:118 +msgid "If your theme has more than one default header image, or you have uploaded more than one custom header image, you have the option of having WordPress display a randomly different image on each page of your site. Click the “Random” radio button next to the Uploaded Images or Default Images section to enable this feature." +msgstr "Si tu tema tiene más de una imagen de cabecera por defecto, o has subido más de una imagen de cabecera personalizada, tienes la opción de hacer que WordPress muestre una imagen diferente al azar en cada página de tu sitio. Haz clic en el botón “Al azar” junto a la sección de Subir imágenes o Imágenes por defecto para activar esta característica." + +#: wp-admin/custom-header.php:126 +msgid "For most themes, the header text is your Site Title and Tagline, as defined in the General Settings section." +msgstr "En la mayoría de los temas el texto de cabecera es tu Título y descripción del sitio, como tu lo defines en la sección de Ajustes generales." + +#: wp-admin/install.php:170 +msgid "Configuration Error" +msgstr "Error de configuración" + +#: wp-admin/install.php:170 +msgid "Your wp-config.php file has an empty database table prefix, which is not supported." +msgstr "Tu archivo wp-config.php tiene un prefijo de tabla de base de datos vacío, y esto no está soportado." + +#: wp-admin/media-new.php:51 +msgid "Revert to the Browser Uploader by clicking the link below the drag and drop box." +msgstr "Vuelve al Cargador del navegador haciendo clic en el enlace siguiente para poder arrastrar y soltar." + +#: wp-admin/users.php:377 +msgid "User deleted." +msgid_plural "%s users deleted." +msgstr[0] "Usuario borrado." +msgstr[1] "%s usuarios borrados." + +#: wp-admin/users.php:381 +msgid "New user created. Edit user" +msgstr "Nuevo usuario creado. Editar usuario" + +#: wp-admin/includes/class-wp-upgrader.php:1310 wp-admin/includes/file.php:628 +#: wp-admin/includes/file.php:730 +msgid "Could not copy files. You may have run out of disk space." +msgstr "No se han podido copiar los archivos. Puede que tengas que liberar espacio en disco." + +#: wp-admin/includes/theme-install.php:58 +msgid "Search for themes by keyword." +msgstr "Buscar temas por palabra clave." + +#: wp-admin/includes/theme-install.php:100 +msgid "Find a theme based on specific features." +msgstr "Busca un tema basándote en características específicas." + +#: wp-admin/setup-config.php:128 +msgid "In all likelihood, these items were supplied to you by your Web Host. If you do not have this information, then you will need to contact them before you can continue. If you’re all ready…" +msgstr "Con toda probabilidad, tu alojamiento web te ha dado la información de estos elementos. Si no tienes esta información, necesitarás contactar con ellos antes de continuar. Si estás listo, …" + +#: wp-admin/theme-editor.php:163 +msgid "This theme is broken." +msgstr "Este tema está roto." + +#: wp-admin/includes/class-wp-themes-list-table.php:194 +msgid "Version: " +msgstr "Versión:" + +#: wp-admin/custom-background.php:262 +msgid "Set as background" +msgstr "Establecer como fondo" + +#: wp-admin/custom-header.php:537 +msgid "Set as header" +msgstr "Establecer como cabecera" + +#: wp-admin/includes/class-wp-upgrader-skins.php:504 +msgid "Customize “%s”" +msgstr "Personalizar “%s”" + +#: wp-admin/edit-comments.php:209 wp-admin/edit-comments.php:215 +#: wp-admin/includes/class-wp-comments-list-table.php:460 +#: wp-admin/includes/dashboard.php:453 +msgid "Edit comment" +msgstr "Editar comentario" + +#: wp-admin/includes/class-wp-comments-list-table.php:216 +#: wp-admin/includes/class-wp-comments-list-table.php:450 +#: wp-admin/includes/class-wp-media-list-table.php:419 +#: wp-admin/includes/class-wp-posts-list-table.php:186 +#: wp-admin/includes/class-wp-posts-list-table.php:600 +msgid "Restore" +msgstr "Restaurar" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:157 +#: wp-admin/includes/media.php:1879 wp-admin/users.php:54 +msgid "Actions" +msgstr "Acciones" + +#: wp-admin/customize.php:149 +#: wp-admin/includes/class-wp-theme-install-list-table.php:265 +msgid "Collapse Sidebar" +msgstr "Contraer barra lateral" + +#: wp-admin/includes/media.php:1877 wp-admin/menu.php:63 wp-admin/menu.php:219 +msgid "Media" +msgstr "Medios" + +#: wp-admin/includes/meta-boxes.php:373 wp-admin/includes/meta-boxes.php:773 +#: wp-admin/press-this.php:573 +msgid "Add" +msgstr "Añadir" + +#: wp-admin/includes/theme.php:208 +msgid "Blavatar" +msgstr "Blavatar" + +#: wp-admin/link.php:107 +msgid "Edit Link" +msgstr "Editar enlace" + +#: wp-admin/includes/plugin-install.php:171 +#: wp-admin/includes/theme-install.php:65 +msgid "Keyword" +msgstr "Palabra clave" + +#: wp-admin/includes/class-wp-upgrader.php:741 +msgid "This theme requires a parent theme. Checking if it is installed…" +msgstr "Este tema requiere un tema padre. Comprueba si está instalado…" + +#: wp-admin/includes/class-wp-upgrader.php:743 +msgid "Preparing to install %1$s %2$s…" +msgstr "Preparando para instalar %1$s %2$s…" + +#: wp-admin/includes/class-wp-upgrader.php:745 +msgid "The parent theme, %1$s %2$s, is currently installed." +msgstr "El tema padre, %1$s %2$s, ya está instalado." + +#: wp-admin/includes/class-wp-upgrader.php:747 +msgid "Successfully installed the parent theme, %1$s %2$s." +msgstr "Instalado con éxito el tema padre, %1$s %2$s." + +#: wp-admin/includes/class-wp-upgrader.php:748 +msgid "The parent theme could not be found. You will need to install the parent theme, %s, before you can use this child theme." +msgstr "No se encuentra el tema padre. Tienes que instalar el tema padre, %s, antes de utilizar este tema hijo." + +#: wp-admin/custom-header.php:124 wp-admin/custom-header.php:600 +#: wp-admin/custom-header.php:605 +msgid "Header Text" +msgstr "Texto de cabecera" + +#: wp-admin/custom-header.php:608 +msgid "Show header text with your image." +msgstr "Mostrar texto de cabecera junto con tu imagen." + +#: wp-admin/includes/theme.php:154 +msgid "There is a new version of %1$s available. View version %3$s details or update now." +msgstr "Hay disponible una nueva versión de %1$s. Ver los detalles de la versión %3$s o actualízala ahora." + +#: wp-admin/includes/update.php:286 wp-admin/includes/update.php:378 +msgid "There is a new version of %1$s available. View version %4$s details or update now." +msgstr "Hay disponible una nueva versión de %1$s. Ver los detalles de la versión %4$s o actualízala ahora." + +#: wp-admin/includes/plugin.php:171 +msgid "By %s." +msgstr "Por %s." + +#: wp-admin/includes/meta-boxes.php:558 +msgid "Add comment" +msgstr "Añadir comentario" + +#: wp-admin/includes/template.php:374 +msgid "Add new Comment" +msgstr "Añadir nuevo comentario" + +#: wp-admin/includes/template.php:402 +msgid "Add Comment" +msgstr "Añadir comentario" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:320 +msgid "Broken Theme:" +msgstr "Tema roto:" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:207 +msgid "Broken (%s)" +msgid_plural "Broken (%s)" +msgstr[0] "Roto (%s)" +msgstr[1] "Rotos (%s)" + +#: wp-admin/includes/theme.php:188 +msgid "Light" +msgstr "Ligero" + +msgid "http://akismet.com/?return=true" +msgstr "http://akismet.com/?return=true" + +msgid "Used by millions, Akismet is quite possibly the best way in the world to protect your blog from comment and trackback spam. It keeps your site protected from spam even while you sleep. To get started: 1) Click the \"Activate\" link to the left of this description, 2) Sign up for an Akismet API key, and 3) Go to your Akismet configuration page, and save your API key." +msgstr "Utilizado por millones de usuarios, Akismet es probablemente el mejor modo que hay en el mundo para proteger tu sitio de spam en comentarios y trackbacks. Mantiene tu sitio protegido de spam incluso mientras duermes. Para empezar: 1) Haz clic en el enlace \"Activar\" a la izquierda de la descripción, 2) Regístrate para obtener una clave API de Akismet, y 3) Ve a tu página de configuración de Akismet y guarda tu clave API." + +msgid "Automattic" +msgstr "Automattic" + +msgid "http://automattic.com/wordpress-plugins/" +msgstr "http://automattic.com/wordpress-plugins/" + +msgid "Hello Dolly" +msgstr "Hello Dolly" + +msgid "This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from Hello, Dolly in the upper right of your admin screen on every page." +msgstr "Esto no es solo un plugin, simboliza la esperanza y entusiasmo de toda una generación resumidas en las dos palabras más famosas cantadas por Louis Armstrong: Hello, Dolly. Cuando lo actives verás frases al azar de Hello, Dolly en la parte superior derecha de cada página de tu pantalla de administración." + +msgid "Matt Mullenweg" +msgstr "Matt Mullenweg" + +msgid "http://ma.tt/" +msgstr "http://ma.tt/" + +#: wp-admin/includes/screen.php:920 +msgid "Show on screen" +msgstr "Mostrar en pantalla" + +#: wp-admin/index.php:76 +msgid "Welcome - Shows links for some of the most common tasks when setting up a new site." +msgstr "Hola - Se muestran enlaces para algunas de las tareas comunes para configurar un sitio nuevo." + +#: wp-admin/includes/ajax-actions.php:225 +msgid "%1$s (%2$s)" +msgstr "%1$s (%2$s)" + +#: wp-admin/includes/update.php:376 +msgid "There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this theme." +msgstr "Hay una nueva versión disponible de %1$s. Ver los detalles de la versión %4$s. La actualización automática no está disponible para este tema." + +#: wp-admin/includes/schema.php:373 +msgctxt "start of week" +msgid "1" +msgstr "1" + +#: wp-admin/includes/screen.php:940 +msgctxt "Welcome panel" +msgid "Welcome" +msgstr "Hola" + +#: wp-admin/includes/schema.php:359 +msgctxt "default GMT offset or timezone string" +msgid "0" +msgstr "0" + +#: wp-admin/includes/template.php:662 +msgid "%1$s-%2$s" +msgstr "%1$s-%2$s" + +#: wp-admin/custom-header.php:505 +msgid "Images should be at least %1$d pixels wide." +msgstr "Las imágenes deben ser de al menos %1$d pixels de ancho." + +#: wp-admin/custom-header.php:514 +msgid "Suggested height is %1$d pixels." +msgstr "La altura sugerida es de %1$d pixels." + +#: wp-admin/custom-header.php:508 +msgid "Images should be at least %1$d pixels tall." +msgstr "Las imágenes deben ser de al menos %1$d pixels de altura." + +#: wp-admin/install.php:178 +msgctxt "Howdy" +msgid "Welcome" +msgstr "Hola" + +#: wp-admin/custom-header.php:512 +msgid "Suggested width is %1$d pixels." +msgstr "El ancho sugerido es %1$d pixels." + +#: wp-admin/ms-delete-site.php:84 +msgid "I'm sure I want to permanently disable my site, and I am aware I can never get it back or use %s again." +msgstr "Estoy seguro que quiero desactivar mi sitio permanentemente, y soy consciente de que nunca podré recuperarlo o usar %s de nuevo." + +#: wp-admin/ms-delete-site.php:85 +msgid "Delete My Site Permanently" +msgstr "Eliminar mi sitio permanentemente" + +#: wp-admin/ms-delete-site.php:71 +msgid "Delete My Site" +msgstr "Eliminar mi sitio" + +#: wp-admin/ms-delete-site.php:79 +msgid "Remember, once deleted your site cannot be restored." +msgstr "Recuerda, una vez eliminado el sitio no puede ser restaurado." + +#: wp-admin/ms-delete-site.php:24 +msgid "I'm sorry, the link you clicked is stale. Please select another option." +msgstr "Lo siento, el enlace en el que has hecho clic está caducado. Elige otra opción." + +#: wp-admin/ms-delete-site.php:22 +msgid "Thank you for using %s, your site has been deleted. Happy trails to you until we meet again." +msgstr "Gracias por usar %s, tu sitio se ha borrado. Buen viaje hasta que nos veamos de nuevo." + +#: wp-admin/ms-delete-site.php:78 +msgid "If you do not want to use your %s site any more, you can delete it using the form below. When you click Delete My Site Permanently you will be sent an email with a link in it. Click on this link to delete your site." +msgstr "Si no quieres usar tu sitio %s más puedes borrarlo usando el siguiente formulario. Cuando hagas clic en Borrar permanentemente mi sitio se te enviará un correo electrónico con un enlace en el mismo. Haz clic en ese enlace para borrar tu sitio." + +#: wp-admin/ms-delete-site.php:17 +msgid "You do not have sufficient permissions to delete this site." +msgstr "No tienes sufientes permisos para eliminar este sitio." + +#: wp-admin/ms-delete-site.php:74 +msgid "Thank you. Please check your email for a link to confirm your action. Your site will not be deleted until this link is clicked. " +msgstr "Gracias. Por favor, comprueba tu correo electrónico y busca un enlace en el mismo para confirmar tu acción. Tu sitio no se borrará hasta que hagas clic en ese enlace." + +#: wp-admin/ms-delete-site.php:45 +msgid "" +"Dear User,\n" +"You recently clicked the 'Delete Site' link on your site and filled in a\n" +"form on that page.\n" +"If you really want to delete your site, click the link below. You will not\n" +"be asked to confirm again so only click this link if you are absolutely certain:\n" +"###URL_DELETE###\n" +"\n" +"If you delete your site, please consider opening a new site here\n" +"some time in the future! (But remember your current site and username\n" +"are gone forever.)\n" +"\n" +"Thanks for using the site,\n" +"Webmaster\n" +"###SITE_NAME###" +msgstr "" +"Estimado usuario,\n" +"Acabas de hacer clic en el enlace 'Borrar sitio' de tu sitio y rellenado un\n" +"formulario en esa página.\n" +"Si realmente quieres borrar tu sitio haz clic en el siguiente enlace. No se te\n" +"preguntará de nuevo si quieres confirmar, así que haz clic en este enlace solo si estás absolutamente seguro:\n" +"###URL_DELETE###\n" +"\n" +"Si borras tu sitio puede que quieras abrir otro sitio nuevo aquí\n" +"en el futuro (pero recuerda que tu sitio y usuario actual ya\n" +"no podrás usarlos nunca.)\n" +"\n" +"Gracias por usar el sitio,\n" +"Webmaster\n" +"###SITE_NAME###" + +#: wp-admin/includes/ms.php:34 +msgid "This file is too big. Files must be less than %1$s KB in size." +msgstr "El archivo es demasiado grande. Los archivos deben ser menores de %1$s KB." + +#: wp-admin/includes/ms.php:36 +msgid "You have used your space quota. Please delete files before uploading." +msgstr "Ya has llenado tu cuota de espacio. Por favor, borra archivos antes de subir más." + +#: wp-admin/includes/ms.php:39 +msgid "Back" +msgstr "Volver" + +#: wp-admin/includes/ms.php:262 +msgid "[%s] New Admin Email Address" +msgstr "[%s] Nueva dirección de correo electrónico de administrador" + +#: wp-admin/includes/ms.php:295 +msgid "" +"Dear user,\n" +"\n" +"You recently requested to have the email address on your account changed.\n" +"If this is correct, please click on the following link to change it:\n" +"###ADMIN_URL###\n" +"\n" +"You can safely ignore and delete this email if you do not want to\n" +"take this action.\n" +"\n" +"This email has been sent to ###EMAIL###\n" +"\n" +"Regards,\n" +"All at ###SITENAME###\n" +"###SITEURL###" +msgstr "" +"Estimado usuario,\n" +"\n" +"Recientemente has solicitado cambiar la dirección de correo electrónico de tu cuenta.\n" +"Si esto es así haz clic en el siguiente enlace para cambiarla:\n" +"###ADMIN_URL###\n" +"\n" +"Puedes ignorar y borrar este correo electrónico con seguridad si no quieres\n" +"llevar a cabo esta acción.\n" +"\n" +"Este correo electrónico ha sido enviado a ###EMAIL###\n" +"\n" +"Gracias,\n" +"Desde ###SITENAME###\n" +"###SITEURL###" + +#: wp-admin/includes/ms.php:339 +msgid "Your email address has not been updated yet. Please check your inbox at %s for a confirmation email." +msgstr "Tu dirección de correo electrónico no se ha actualizado todavía. Por favor, revisa la bandeja de entrada de %s para ver si llegó el correo electrónico de confirmación." + +#: wp-admin/includes/ms.php:384 +msgid "GB" +msgstr "GB" + +#: wp-admin/includes/ms.php:388 +msgid "MB" +msgstr "MB" + +#: wp-admin/includes/ms.php:331 +msgid "[%s] New Email Address" +msgstr "[%s] Nueva dirección de correo electrónico" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:235 +#: wp-admin/includes/class-wp-ms-themes-list-table.php:278 +msgid "Network Disable" +msgstr "Desactivar red" + +#: wp-admin/includes/ms-deprecated.php:30 +msgid "Sorry, you must delete files before you can upload any more." +msgstr "Lo siento, tienes que eliminar archivos antes de subir más." + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:198 +msgid "Enabled (%s)" +msgid_plural "Enabled (%s)" +msgstr[0] "Activado (%s)" +msgstr[1] "Activados (%s)" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:174 +msgid "Theme" +msgstr "Tema" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:166 +msgid "You do not appear to have any themes available at this time." +msgstr "Parece ser que no tienes ningún tema disponible en este momento." + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:164 +msgid "No themes found." +msgstr "No se han encontrado temas." + +#: wp-admin/includes/ms.php:544 +msgid "Visit Dashboard" +msgstr "Visitar Escritorio" + +#: wp-admin/includes/ms.php:535 +msgid "Your Sites" +msgstr "Tus sitios" + +#: wp-admin/includes/ms.php:533 +msgid "If you reached this screen by accident and meant to visit one of your own sites, here are some shortcuts to help you find your way." +msgstr "Si has llegado a esta pantalla por accidente y querías visitar uno de tus propios sitios aquí tienes algunos enlaces que te ayudarán a encontrar el camino." + +#: wp-admin/includes/class-wp-ms-users-list-table.php:77 +msgctxt "user" +msgid "Not Spam" +msgstr "No es spam" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:201 +msgid "Disabled (%s)" +msgid_plural "Disabled (%s)" +msgstr[0] "Desactivado (%s)" +msgstr[1] "Desactivados (%s)" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:282 +msgid "Open this theme in the Theme Editor" +msgstr "Abrir este tema en el Editor de temas" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:278 +msgid "Disable this theme" +msgstr "Desactivar este tema" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:276 +msgid "Enable this theme" +msgstr "Activar este tema" + +#: wp-admin/includes/class-wp-ms-users-list-table.php:76 +msgctxt "user" +msgid "Mark as Spam" +msgstr "Marcar como spam" + +#: wp-admin/includes/ms.php:530 wp-admin/includes/ms.php:532 +msgid "You attempted to access the \"%1$s\" dashboard, but you do not currently have privileges on this site. If you believe you should be able to access the \"%1$s\" dashboard, please contact your network administrator." +msgstr "Has tratado de acceder al escritorio \"%1$s\" pero actualmente no tienes privilegios en este sitio. Si crees que deberías poder acceder al escritorio \"%1$s\" contacta con tu administrador de la red." + +#: wp-admin/includes/ms.php:426 +msgid "MB (Leave blank for network default)" +msgstr "MB (déjalo en blanco para el valor por defecto de la red)" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:334 +msgid "Visit theme homepage" +msgstr "Visitar la web del tema" + +#: wp-admin/includes/ms.php:575 +msgid "British English" +msgstr "Inglés británico" + +#: wp-admin/includes/ms.php:544 +msgid "View Site" +msgstr "Ver sitio" + +#: wp-admin/includes/class-wp-ms-users-list-table.php:98 +msgid "Super Admin (%s)" +msgid_plural "Super Admins (%s)" +msgstr[0] "Super administrador (%s)" +msgstr[1] "Super administradores (%s)" + +#: wp-admin/includes/ms.php:571 +msgid "American English" +msgstr "Inglés americano" + +#: wp-admin/includes/ms.php:640 +msgid "Primary Site" +msgstr "Sitio principal" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:334 +msgid "Visit Theme Site" +msgstr "Visitar el sitio del tema" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:285 +msgid "Delete this theme" +msgstr "Borrar este tema" + +#: wp-admin/includes/ms.php:425 +msgid "Site Upload Space Quota " +msgstr "Cuota de espacio de archivos del sitio" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:235 +#: wp-admin/includes/class-wp-ms-themes-list-table.php:278 +msgid "Disable" +msgstr "Desactivar" + +#: wp-admin/includes/ms.php:32 +msgid "Not enough space to upload. %1$s KB needed." +msgstr "No hay espacio suficiente para subir. Se necesitan %1$s KB " + +#: wp-admin/includes/ms.php:585 +msgid "English" +msgstr "Inglés" + +#: wp-admin/my-sites.php:63 +msgid "You must be a member of at least one site to use this page." +msgstr "Debes ser miembro de al menos un sitio para usar esta página." + +#: wp-admin/my-sites.php:94 +msgid "Global Settings" +msgstr "Ajustes globales" + +#: wp-admin/my-sites.php:48 +msgid "Documentation on My Sites" +msgstr "Documentación sobre Mis sitios" + +#: wp-admin/my-sites.php:16 +msgid "You do not have sufficient permissions to view this page." +msgstr "No tienes suficientes permisos para ver esta página." + +#: wp-admin/my-sites.php:31 +msgid "The primary site you chose does not exist." +msgstr "El sitio principal que has elegido no existe." + +#: wp-admin/my-sites.php:43 +msgid "Up until WordPress version 3.0, what is now called a Multisite Network had to be installed separately as WordPress MU (multi-user)." +msgstr "Hasta la versión 3.0 de WordPress, lo que ahora llamamos Red multisitio tenía que instalarse por separado como WordPress MU (multiusuario)." + +#: wp-admin/setup-config.php:74 +msgid "Sorry, I need a wp-config-sample.php file to work from. Please re-upload this file from your WordPress installation." +msgstr "Perdón, necesito un archivo wp-config-sample.php para trabajar. Por favor, vuelve a subir este archivo desde tu instalación de WordPress." + +#: wp-admin/setup-config.php:78 +msgid "The file 'wp-config.php' already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try installing now." +msgstr "El archivo 'wp-config.php' ya existe. Si necesitas recuperar algunos de los elementos de configuración de este archivo bórralo primero. Puedes probar a instalar ahora." + +#: wp-admin/setup-config.php:82 +msgid "The file 'wp-config.php' already exists one level above your WordPress installation. If you need to reset any of the configuration items in this file, please delete it first. You may try installing now." +msgstr "El archivo 'wp-config.php' ya existe a un nivel por encima de tu instalación de WordPress. Si necesitas reiniciar algunos de los elementos de configuración de este archivo bórralo primero. Puedes probar a instalar ahora." + +#: wp-admin/setup-config.php:104 +msgid "WordPress › Setup Configuration File" +msgstr "WordPress › Instalación del archivo de configuración." + +#: wp-admin/setup-config.php:119 +msgid "Welcome to WordPress. Before getting started, we need some information on the database. You will need to know the following items before proceeding." +msgstr "Bienvenido a WordPress. Antes de empezar necesitamos alguna información de la base de datos. Necesitarás saber lo siguiente antes de continuar." + +#: wp-admin/setup-config.php:121 +msgid "Database name" +msgstr "Nombre de la base de datos" + +#: wp-admin/setup-config.php:122 +msgid "Database username" +msgstr "Usuario de la base de datos" + +#: wp-admin/setup-config.php:123 +msgid "Database password" +msgstr "Contraseña de la base de datos" + +#: wp-admin/setup-config.php:124 +msgid "Database host" +msgstr "Servidor de la base de datos" + +#: wp-admin/setup-config.php:125 +msgid "Table prefix (if you want to run more than one WordPress in a single database)" +msgstr "Prefijo de la tabla (si quieres ejecutar más de un WordPress en una sola base de datos)" + +#: wp-admin/setup-config.php:130 +msgid "Let’s go!" +msgstr "¡Vamos a ello!" + +#: wp-admin/setup-config.php:141 +msgid "Database Name" +msgstr "Nombre de la base de datos" + +#: wp-admin/setup-config.php:143 +msgid "The name of the database you want to run WP in." +msgstr "El nombre de la base de datos en la que quieres ejecutar WordPress." + +#: wp-admin/setup-config.php:147 +msgctxt "example username" +msgid "username" +msgstr "nombre de usuario" + +#: wp-admin/setup-config.php:148 +msgid "Your MySQL username" +msgstr "Tu usuario de MySQL" + +#: wp-admin/setup-config.php:152 +msgctxt "example password" +msgid "password" +msgstr "contraseña" + +#: wp-admin/setup-config.php:153 +msgid "…and your MySQL password." +msgstr "…y tu contraseña de MySQL." + +#: wp-admin/setup-config.php:156 +msgid "Database Host" +msgstr "Servidor de la base de datos" + +#: wp-admin/setup-config.php:158 +msgid "You should be able to get this info from your web host, if localhost does not work." +msgstr "Deberías poder acceder desde tu servidor web si localhost no funciona." + +#: wp-admin/setup-config.php:161 +msgid "Table Prefix" +msgstr "Prefijo de tabla" + +#: wp-admin/setup-config.php:163 +msgid "If you want to run multiple WordPress installations in a single database, change this." +msgstr "Si quieres ejecutar varias instalaciones de WordPress en una sola base de datos cambia esto." + +#: wp-admin/setup-config.php:267 +msgid "You can create the wp-config.php manually and paste the following text into it." +msgstr "Puedes crear manualmente el arhivo wp-config.php y pegar el siguiente texto en el." + +#: wp-admin/setup-config.php:274 wp-admin/setup-config.php:301 +msgid "Run the install" +msgstr "Ejecutar la instalación" + +#: wp-admin/maint/repair.php:30 +msgid "To allow use of this page to automatically repair database problems, please add the following line to your wp-config.php file. Once this line is added to your config, reload this page." +msgstr "Para permitir usar esta página para reparar automáticamente problemas en la base de datos añade la siguiente línea al archivo wp-config.php. Una vez añadas esta línea a tu archivo de configuración vuelve a cargar esta página." + +#: wp-admin/maint/repair.php:101 +msgid "http://wordpress.org/support/forum/how-to-and-troubleshooting" +msgstr "http://es.forums.wordpress.org/forum/manuales-y-resolucion-de-problemas" + +#: wp-admin/includes/class-wp-comments-list-table.php:146 +msgid "No comments awaiting moderation." +msgstr "No hay comentarios esperando moderación." + +#: wp-admin/includes/plugin-install.php:332 +msgctxt "Plugin installer section title" +msgid "Changelog" +msgstr "Informe de cambios" + +#: wp-admin/includes/plugin-install.php:333 +msgctxt "Plugin installer section title" +msgid "Other Notes" +msgstr "Otras notas" + +#: wp-admin/includes/plugin-install.php:330 +msgctxt "Plugin installer section title" +msgid "FAQ" +msgstr "FAQ" + +#: wp-admin/includes/plugin-install.php:329 +msgctxt "Plugin installer section title" +msgid "Installation" +msgstr "Instalación" + +#: wp-admin/includes/plugin-install.php:328 +msgctxt "Plugin installer section title" +msgid "Description" +msgstr "Descripción" + +#: wp-admin/includes/plugin-install.php:331 +msgctxt "Plugin installer section title" +msgid "Screenshots" +msgstr "Capturas de pantalla" + +#: wp-admin/plugin-install.php:59 +msgid "If you just want to get an idea of what’s available, you can browse Featured, Popular, and Newest plugins by using the links in the upper left of the screen. These sections rotate regularly." +msgstr "Si solo quieres hacerte una idea de lo que hay disponible puedes navegar por los plugins Destacados, Populares y Novedosos, usando los enlaces de la parte superior izquierda de la pantalla. Estas secciones rotan regularmente. " + +#: wp-admin/options-permalink.php:238 +msgid "If you like, you may enter custom structures for your category and tag URLs here. For example, using topics as your category base would make your category links like http://example.org/%stopics/uncategorized/. If you leave these blank the defaults will be used." +msgstr "Si quieres, puedes introducir aquí estructuras personalizadas en las URLs de tus categorías y etiquetas. Por ejemplo, usando temas como categoría base podrías tener enlaces de categorías como http://ejemplo.org/%stemas/sincategoria/. Si dejas esto en blanco se usarán los valores predeterminados." + +#: wp-admin/options-permalink.php:152 +msgid "You should update your web.config now." +msgstr "Deberías actualizar tu archivo web.config ahora." + +#: wp-admin/includes/meta-boxes.php:717 +msgid "" +"You are about to delete this link '%s'\n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Estás a punto de borrar este enlace '%s'\n" +" 'Cancelar' para parar, 'Aceptar' para borrar." + +#: wp-admin/includes/plugin-install.php:411 +msgid "Plugin Homepage »" +msgstr "Página principal del plugin »" + +#: wp-admin/export.php:49 +msgid "You can export a file of your site’s content in order to import it into another installation or platform. The export file will be an XML file format called WXR. Posts, pages, comments, custom fields, categories, and tags can be included. You can choose for the WXR file to include only certain posts or pages by setting the dropdown filters to limit the export by category, author, date range by month, or publishing status." +msgstr "Puedes exportar un archivo del contenido de tu sitio para que puedas importarlo a otra instalación o plataforma. El archivo de exportación será un archivo en formato XML llamado WXR. Entradas, páginas, comentarios, campos personalizados, categorías y etiquetas serán incluidas. Puedes elegir incluir en el archivo WXR sólo cierta entradas o páginas con los filtros desplegables para limitar la exportación por categorías, autor, rango de fechas por mes o estado de plublicación." + +#: wp-admin/maint/repair.php:71 +msgid "Failed to repair the %1$s table. Error: %2$s" +msgstr "Error al reparar la tabla %1$s. Error: %2$s" + +#: wp-admin/options-general.php:211 +msgid "Standard time begins on: %s." +msgstr "La hora estándar comienza el: %s." + +#: wp-admin/user-new.php:155 +msgid "New users will receive an email letting them know they’ve been added as a user for your site. This email will also contain their password. Check the box if you don’t want the user to receive a welcome email." +msgstr "Los nuevos usuarios recibirán un correo electrónico haciéndoles saber que han sido agregados como usuarios de tu sitio. Este correo electrónico contendrá también su contraseña. Marca la casilla si no deseas que el usuario reciba un mensaje de bienvenida." + +#: wp-admin/plugins.php:374 +msgid "The plugin generated %d characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin." +msgstr "El plugin ha provocado una salida inesperada de %d caracteres durante la activación. Si ves mensajes de “cabeceras ya enviadas”, problemas con los feeds de sindicación u otros problemas, trata desactivar y eliminar el plugin." + +#: wp-admin/includes/theme.php:146 +msgid "Updating this theme will lose any customizations you have made. 'Cancel' to stop, 'OK' to update." +msgstr "La actualización de este tema perderá cualquier cambio que hayas hecho. Pulsa 'Cancelar' para cancelar, 'OK' para actualizar." + +#: wp-admin/users.php:36 +msgid "You can filter the list of users by User Role using the text links in the upper left to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed." +msgstr "Puedes filtrar la lista de roles de usuario usando los enlaces de texto de arriba a la izquierda para mostrar Todos, Administrador, Editor, Autor, Colaborador o Subscriptor. La vista por defecto muestra todos los usuarios. Los roles de usuario no usados no se listan." + +#: wp-admin/update-core.php:45 +msgid "You are using a development version of WordPress. You can update to the latest nightly build automatically or download the nightly build and install it manually:" +msgstr "Estás usando una versión de desarrollo de WordPress. Puedes actualizar a la última versión de desarrollo automáticamente o descargarla e instalarla manualmente:" + +#: wp-admin/options-writing.php:36 +msgid "Post via email settings allow you to send your WordPress install an email with the content of your post. You must set up a secret e-mail account with POP3 access to use this, and any mail received at this address will be posted, so it’s a good idea to keep this address very secret." +msgstr "La configuración de publicar via correo electrónico te permite enviar a tu WordPress un correo con el contenido de tu entrada. Debes dar de alta una cuenta de correo secreta con acceso por POP3 para poder usarlo, y cualquier correo recibido en esta dirección se publicará, por eso es buena idea mantener esta dirección secretísima." + +#: wp-admin/includes/image-edit.php:190 +msgid "There are unsaved changes that will be lost. 'OK' to continue, 'Cancel' to return to the Image Editor." +msgstr "Hay cambios sin guardar que se perderán. 'Aceptar' para continuar, 'Cancelar' para volver a editor de imágenes." + +#: wp-admin/import.php:23 +msgid "In previous versions of WordPress, all importers were built-in. They have been turned into plugins since most people only use them once or infrequently." +msgstr "En las versiones anteriores de WordPress todos los importadores estaban incluidos. Se han convertido en plugins porque la mayoría de la gente los usa sólo una vez o pocas veces." + +#: wp-admin/themes.php:130 +msgid "The active theme is broken. Reverting to the default theme." +msgstr "El tema activo está roto. Volviendo al tema por defecto." + +#: wp-admin/custom-header.php:712 wp-admin/custom-header.php:853 +msgid "Image could not be processed. Please go back and try again." +msgstr "La imagen no puede ser procesada. Por favor, inténtalo otra vez." + +#: wp-admin/maint/repair.php:61 +msgid "The %1$s table is not okay. It is reporting the following error: %2$s. WordPress will attempt to repair this table…" +msgstr "La tabla %1$s no está bien. Informa del siguiente error: %2$s. WordPress intentará reparar esta tabla…" + +#: wp-admin/edit-form-advanced.php:107 +msgid "There is an autosave of this post that is more recent than the version below. View the autosave" +msgstr "Hay un autoguardado de esta entrada que es más reciente que la versión de abajo. Ver el autoguardado" + +#: wp-admin/maint/repair.php:107 +msgid "Repairs complete. Please remove the following line from wp-config.php to prevent this page from being used by unauthorized users." +msgstr "Reparaciones completadas. Por favor, quita la siguiente línea del archivo wp-config.php para evitar que esta página sea utilizada por usuarios no autorizados." + +#: wp-admin/maint/repair.php:113 +msgid "WordPress can automatically look for some common database problems and repair them. Repairing can take a while, so please be patient." +msgstr "WordPress puede reconocer automáticamente algunos problemas comunes de base de datos y repararlos. La reparación puede durar un rato, sé paciente por favor." + +#: wp-admin/maint/repair.php:116 +msgid "WordPress can also attempt to optimize the database. This improves performance in some situations. Repairing and optimizing the database can take a long time and the database will be locked while optimizing." +msgstr "WordPress también puede tratar de optimizar la base de datos. Esto mejora el rendimiento en algunas situaciones. La reparación y optimización de la base de datos puede tomar mucho tiempo y la base de datos se bloqueará mientras se optimiza." + +#: wp-admin/user-new.php:278 +msgid "Enter the email address or username of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite." +msgstr "Introduce la dirección de correo electrónico o el nombre de usuario de un usuario existente en esta red para invitarle a este sitio. A esa persona se le enviará un correo pidiéndole que confirme la invitación." + +#: wp-admin/options-discussion.php:173 +msgid "An avatar is an image that follows you from weblog to weblog appearing beside your name when you comment on avatar enabled sites. Here you can enable the display of avatars for people who comment on your site." +msgstr "Un avatar es una imagen que te sigue de blog en blog y aparece junto a tu nombre cuando comentas en sitios que tengan activos los avatares. Aquí puedes activar la visualización de avatares para la gente que comente en tu sitio." + +#: wp-admin/plugin-editor.php:245 +msgid "Warning: Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated." +msgstr "Cuidado: Hacer cambios en plugins activos no es recomendable. Si tus cambios producen un error grave, el plugin será desactivado automáticamente." + +#: wp-admin/user-new.php:275 +msgid "Enter the email address of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite." +msgstr "Escribe la dirección de correo electrónico de un usuario de esta red para invitarlo a este sitio. A esa persona se le enviará un correo electrónico para que confirme la invitación." + +#: wp-admin/credits.php:178 +msgid "Contributing Developers" +msgstr "Desarrolladores colaboradores" + +#: wp-admin/user-edit.php:278 +msgid "Show Toolbar when viewing site" +msgstr "Muestra la barra de herramientas en el sitio" + +#: wp-admin/about.php:167 +msgid "Version %1$s addressed a security issue and fixed %2$s bug." +msgid_plural "Version %1$s addressed a security issue and fixed %2$s bugs." +msgstr[0] "Versión %1$s marcada como actualización de seguridad, soluciona el error %2$s." +msgstr[1] "Versión %1$s marcada como actualización de seguridad, soluciona %2$s errores." + +#: wp-admin/about.php:174 +msgid "For more information, see the release notes." +msgstr "Para más información, lee las notas de la versión." + +#: wp-admin/about.php:171 +msgid "Version %1$s addressed some security issues and fixed %2$s bug." +msgid_plural "Version %1$s addressed some security issues and fixed %2$s bugs." +msgstr[0] "Versión %1$s marcada como actualización de seguridad, soluciona el error %2$s." +msgstr[1] "Versión %1$s marcada como actualización de seguridad, soluciona %2$s errores." + +#: wp-admin/about.php:163 +msgid "Version %1$s addressed %2$s bug." +msgid_plural "Version %1$s addressed %2$s bugs." +msgstr[0] "Versión %1$s soluciona el bug %2$s." +msgstr[1] "Versión %1$s soluciona %2$s bugs." + +#: wp-admin/index.php:32 +msgid "Welcome to your WordPress Dashboard! This is the screen you will see when you log in to your site, and gives you access to all the site management features of WordPress. You can get help for any screen by clicking the Help tab in the upper corner." +msgstr "¡Bienvenido a tu panel de WordPress! Esta es la pantalla que verás cuando inicies sesión en tu sitio, que te da acceso a todas las funciones de gestión del sitio de WordPress. Puedes obtener ayuda para cualquier pantalla haciendo clic en la pestaña Ayuda en la esquina superior." + +#: wp-admin/about.php:156 +msgid "Maintenance and Security Release" +msgid_plural "Maintenance and Security Releases" +msgstr[0] "Versión de mantenimiento y seguridad" +msgstr[1] "Versiones de mantenimiento y seguridad" + +#: wp-admin/about.php:33 wp-admin/credits.php:90 wp-admin/freedoms.php:28 +msgid "What’s New" +msgstr "¿Qué hay de nuevo?" + +#: wp-admin/about.php:155 +msgid "Security Release" +msgid_plural "Security Releases" +msgstr[0] "Versión de seguridad" +msgstr[1] "Versiones de seguridad" + +#: wp-admin/about.php:154 +msgid "Maintenance Release" +msgid_plural "Maintenance Releases" +msgstr[0] "Versión de mantenimiento" +msgstr[1] "Versiones de mantenimiento" + +#: wp-admin/about.php:159 +msgid "Version %1$s addressed a security issue." +msgid_plural "Version %1$s addressed some security issues." +msgstr[0] "La versión %1$s resuelve un problema de seguridad." +msgstr[1] "La versión %1$s resuelve varios problemas de seguridad." + +#: wp-admin/options-permalink.php:22 +msgid "This screen allows you to choose your default permalink structure. You can choose from common settings or create custom URL structures." +msgstr "Esta pantalla te permite elegir la estructura de enlaces permanentes. Puedes elegir entre las más habituales o crear una estructura de URL personalizada." + +#: wp-admin/about.php:139 +msgid "Return to Updates" +msgstr "Volver a las actualizaciones" + +#: wp-admin/includes/update-core.php:1041 wp-admin/update-core.php:419 +msgid "Welcome to WordPress %1$s. Learn more." +msgstr "Bienvenido a WordPress %1$s. Aprende más." + +#: wp-admin/edit-tags.php:229 +msgid "Adding Categories" +msgstr "Añadir categorías" + +#: wp-admin/edit-tags.php:229 +msgid "Adding Tags" +msgstr "Añadir etiquetas" + +#: wp-admin/plugins.php:346 +msgid "Troubleshooting" +msgstr "Solución de problemas" + +#: wp-admin/media-new.php:47 +msgid "You can upload media files here without creating a post first. This allows you to upload files to use with posts and pages later and/or to get a web link for a particular file that you can share. There are three options for uploading files:" +msgstr "Aquí puedes subir archivos de medios sin tener que crear una entrada antes. Esto te permite subir archivos para entradas o páginas que escribas con posterioridad u obtener un enlace para un archivo que quieras compartir. Hay tres opciones para subir archivos:" + +#: wp-admin/user-new.php:157 +msgid "You must assign a password to the new user, which they can change after logging in. The username, however, cannot be changed." +msgstr "Debes asignar una contraseña al nuevo usuario, la cual puedes cambiar después de que acceda. En todo caso, el nombre de usuario no pude cambiarse." + +#: wp-admin/tools.php:60 +msgid "If you want to convert your categories to tags (or vice versa), use the Categories and Tags Converter available from the Import screen." +msgstr "Si quieres convertir categorías en etiquetas (o viceversa), utiliza el Conversor de categorías y etiquetas que está disponible en la página de importación." + +#: wp-admin/user-new.php:161 +msgid "Remember to click the Add New User button at the bottom of this screen when you are finished." +msgstr "Recuerda hacer clic en el botón \"Añadir nuevo usuario\" de esta pantalla cuando hayas terminado." + +#: wp-admin/export.php:151 +msgid "Once you’ve saved the download file, you can use the Import function in another WordPress installation to import the content from this site." +msgstr "Una vez que has guardado el archivo descargado, puedes utilizar la función de importarlo en otra instalación de WordPress para importar el contenido de este sitio." + +#: wp-admin/users.php:32 +msgid "Screen Display" +msgstr "Visualización en pantalla" + +#: wp-admin/upload.php:165 +msgid "Attaching Files" +msgstr "Adjuntando archivos" + +#: wp-admin/user-new.php:172 +msgid "Here is a basic overview of the different user roles and the permissions associated with each one:" +msgstr "Aquí tienes una visión general de los diferentes roles de usuarios y los permisos que cada uno tiene:" + +#: wp-admin/user-new.php:171 +msgid "User Roles" +msgstr "Roles de usuario" + +#: wp-admin/user-new.php:151 +msgid "To add a new user to your site, fill in the form on this screen and click the Add New User button at the bottom." +msgstr "Para añadir un usuario nuevo a tu sitio, rellena el formulario de esta pantalla y haz clic en el botón \"Añadir nuevo usuario\" de abajo." + +#: wp-admin/edit-comments.php:122 +msgid "Moderating Comments" +msgstr "Moderar comentarios" + +#: wp-admin/user-new.php:178 +msgid "Subscribers can read comments/comment/receive newsletters, etc. but cannot create regular site content." +msgstr "Los suscriptores pueden leer comentarios/comentar/recibir listas de distribución, etc, pero no pueden crear contenido normal en el sitio." + +#: wp-admin/import.php:125 +msgid "If the importer you need is not listed, search the plugin directory to see if an importer is available." +msgstr "Si el importador que necesitas no está en la lista, busca en el directorio de plugins para ver si hay un importador disponible." + +#: wp-admin/edit.php:194 +msgid "When using Bulk Edit, you can change the metadata (categories, author, etc.) for all selected posts at once. To remove a post from the grouping, just click the x next to its name in the Bulk Edit area that appears." +msgstr "Si usas la edición por bloques, podrás cambiar los metadatos (categorías, autor, etc.) para los todas las entradas seleccionadas de una tacada. Para eliminar una entrada de esa selección, sólo tienes que hacer clic en la x que hay junto a nombre en el área de edición por bloques que aparece." + +#: wp-admin/edit.php:179 wp-admin/upload.php:159 +msgid "Available Actions" +msgstr "Acciones disponibles" + +#: wp-admin/user-new.php:176 +msgid "Authors can publish and manage their own posts, and are able to upload files." +msgstr "Los autores pueden publicar y gestionar sus propias entradas, además de subir archivos." + +#: wp-admin/update-core.php:480 +msgid "How to Update" +msgstr "Cómo actualizar" + +#: wp-admin/edit.php:163 +msgid "This screen provides access to all of your posts. You can customize the display of this screen to suit your workflow." +msgstr "Esta pantalla te da acceso a todas tus entradas. Puedes personalizar el formato de esta pantalla para acomodarlo a tu sistema de trabajo." + +#: wp-admin/edit.php:193 +msgid "You can also edit or move multiple posts to the trash at once. Select the posts you want to act on using the checkboxes, then select the action you want to take from the Bulk Actions menu and click Apply." +msgstr "También puedes editar o mover varias entradas a la basura a la vez. Selecciona los mensajes sobre los que deseas actuar utilizando las casillas de verificación. A continuaciónselecciona la acción a realizar en el menú Acciones en Bloque y haz clic en Aplicar." + +#: wp-admin/plugin-install.php:56 +msgid "Adding Plugins" +msgstr "Añadir plugins" + +#: wp-admin/edit.php:167 +msgid "Screen Content" +msgstr "Pantalla de contenido" + +#: wp-admin/edit.php:169 +msgid "You can customize the display of this screen’s contents in a number of ways:" +msgstr "Puedes personalizar el formato de los contenidos de esta pantalla’s de muchas formas:" + +#: wp-admin/themes.php:64 +msgid "Adding Themes" +msgstr "Añadir temas" + +#: wp-admin/users.php:48 +msgid "Delete brings you to the Delete Users screen for confirmation, where you can permanently remove a user from your site and delete their posts. You can also delete multiple users at once by using Bulk Actions." +msgstr "Borrar te lleva a la pantalla de borrado de usuarios para su confirmación, donde podrás eliminar permanentemente un usuario y sus entradas de tu sitio. También puedes borrar varios usuarios al mismo tiempo usando las acciones en bloque." + +#: wp-admin/users.php:46 +msgid "Remove allows you to remove a user from your site. It does not delete their posts. You can also remove multiple users at once by using Bulk Actions." +msgstr "Eliminar te permite quitar un usuario de tu sitio. No borra sus entradas. Puedes eliminar varios usuarios a la vez utilizando las acciones en lote." + +#: wp-admin/plugin-install.php:52 +msgid "Plugins hook into WordPress to extend its functionality with custom features. Plugins are developed independently from the core WordPress application by thousands of developers all over the world. All plugins in the official WordPress.org Plugin Directory are compatible with the license WordPress uses. You can find new plugins to install by searching or browsing the Directory right here in your own Plugins section." +msgstr "Los ganchos de plugins en WordPress extienden la funcionalidad de los mismos con características personalizadas. Los plugins son desarrollados de forma independiente de la aplicación principal de WordPress por miles de desarrolladores en todo el mundo. Todos los plugins en el Repositorio Oficial de Plugins de WordPress.org son compatibles con la licencia de uso de WordPress. Puedes encontrar nuevos plugins para instalar haciendo una búsqueda o explorando el Directorio en tu sección de Plugins." + +#: wp-admin/options-permalink.php:21 +msgid "Permalinks are the permanent URLs to your individual pages and blog posts, as well as your category and tag archives. A permalink is the web address used to link to your content. The URL to each post should be permanent, and never change — hence the name permalink." +msgstr "Los enlaces permanentes son URLs permanentes para tus páginas y entradas de blog, así como para las categorías y las etiquetas de archivos. Un enlace permanente es la dirección web utilizada para enlazar tu contenido. La URL de cada entrada debe ser siempre la misma, permanente, y nunca cambiar; de ahí que se llame enlace permanente." + +#: wp-admin/options-permalink.php:29 +msgid "Many people choose to use “pretty permalinks,” URLs that contain useful information such as the post title rather than generic post ID numbers. You can choose from any of the permalink formats under Common Settings, or can craft your own if you select Custom Structure." +msgstr "Mucha gente elige utilizar “enlaces permanentes chulos,” URLs que contienen información útil, como el título de la entrada en vez del los números de ID de la entrada genéricos. Puedes elegir cualquiera de los formatos de enlace permanente que hay en Ajustes comunes o puedes construir el tuyo propio si eliges Estructura personalizada." + +#: wp-admin/options-permalink.php:28 wp-admin/options-permalink.php:195 +msgid "Common Settings" +msgstr "Ajustes comunes" + +#: wp-admin/options-permalink.php:37 +msgid "Custom Structures" +msgstr "Estruturas personalizadas" + +#: wp-admin/options-media.php:21 +msgid "Uploading Files allows you to choose the folder and path for storing your uploaded files." +msgstr "La subida de archivo te permite elegir la carpeta y la ruta donde guardar tu archivos subidos." + +#: wp-admin/options-writing.php:21 +msgid "You can submit content in several different ways; this screen holds the settings for all of them. The top section controls the editor within the dashboard, while the rest control external publishing methods. For more information on any of these methods, use the documentation links." +msgstr "Puedes enviar contenido de muchas formas; esta pantalla contiene las opciones para todas ellas. La selección superior controla el editor dentro del escritorio, mientras las demás controlan las formas externas de publicación. Para más información sobre estos métodos para publicar, puedes mirar en los enlaces de la documentación." + +#: wp-admin/themes.php:57 +msgid "Installing themes on Multisite can only be done from the Network Admin section." +msgstr "La instalación de temas en el multisitio sólo se puede hacer desde la sección de Administrador de red." + +#: wp-admin/options-general.php:65 +msgid "If you want site visitors to be able to register themselves, as opposed to by the site administrator, check the membership box. A default user role can be set for all new users, whether self-registered or registered by the site admin." +msgstr "Si quieres que los visitantes puedan registrarse sólos, no que sea el administrador el que lo haga, marca la caja de miembros. Puede definirse un rol de usuario por defecto para todos los usuarios, ya sean de registro propio o por el administrador." + +#: wp-admin/options-writing.php:35 +msgid "Post Via Email" +msgstr "Publicar por Correo Electrónico" + +#: wp-admin/options-writing.php:51 +msgid "If desired, WordPress will automatically alert various services of your new posts." +msgstr "Si lo deseas, WordPress puede alertar automáticamente a varios servicios de tus nuevos artículos." + +#: wp-admin/options-discussion.php:20 +msgid "This screen provides many options for controlling the management and display of comments and links to your posts/pages. So many, in fact, they won’t all fit here! :) Use the documentation links to get information on what each discussion setting does." +msgstr "Esta pantalla da muchas opciones para controlar la gestión y la visualización de los comentarios y enlaces de tus páginas y entradas. Hay tantas que no todas caben aquí :). Puedes consultar en los enlaces de la documentación para saber qué hace cada opción de discusión." + +#: wp-admin/user-edit.php:40 +msgid "You can change your password, turn on keyboard shortcuts, change the color scheme of your WordPress administration screens, and turn off the WYSIWYG (Visual) editor, among other things. You can hide the Toolbar (formerly called the Admin Bar) from the front end of your site, however it cannot be disabled on the admin screens." +msgstr "Puedes cambiar tu contraseña, activar los atajos de teclado, cambiar la paleta de colores de tus pantallas de administración, desactivar el editor WYSIWYG (visual), entre otras cosas. Puedes ocultar la barra de herramientas (antes conocida como barra de administración) de la parte pública (front end) de tu sitio, aunque no es posible desactivarlo para las pantallas de administración." + +#: wp-admin/widgets.php:93 +msgid "Inactive Sidebar (not used)" +msgstr "Barra lateral Inactiva (no utilizada) " + +#: wp-admin/widgets.php:96 +msgid "This sidebar is no longer available and does not show anywhere on your site. Remove each of the widgets below to fully remove this inactive sidebar." +msgstr "Esta barra lateral no está disponible y no se muestra en tu sitio. Elimina cada uno de sus widgets para eliminar por completo esta barra inactiva." + +#: wp-admin/media-new.php:49 +msgid "Drag and drop your files into the area below. Multiple files are allowed." +msgstr "Arrastra y suelta tus archivos en el espacio inferior. Puedes subir múltiples archivos." + +#: wp-admin/media-new.php:50 +msgid "Clicking Select Files opens a navigation window showing you files in your operating system. Selecting Open after clicking on the file you want activates a progress bar on the uploader screen." +msgstr "Haciendo click en Seleccionar archivos se abre una ventana de navegación, mostrando los archivos de tu sistema operativo. Seleccionando Abrir después de hacer clic en el archivo que quieres, activas una barra de progreso en la pantalla del cargador." + +#: wp-admin/edit-tags.php:193 +msgid "You can create groups of links by using Link Categories. Link Category names must be unique and Link Categories are separate from the categories you use for posts." +msgstr "Puedes crear grupos de enlaces utilizando las Categorías de enlaces. Los nombres de las Categorías de enlaces deben ser únicos y son algo distinto a las categorías que usas para tus entradas." + +#: wp-admin/widgets.php:56 +msgid "Removing and Reusing" +msgstr "Quitar y reutilizar" + +#: wp-admin/edit-tags.php:195 +msgid "You can assign keywords to your posts using tags. Unlike categories, tags have no hierarchy, meaning there’s no relationship from one tag to another." +msgstr "Puedes asignar palabras clave a tu entradas utilizando las etiquetas. A diferencia de las categorías, las etiquetas no tienen jerarquía, lo que significa que no hay relación de una etiqueta con otra." + +#: wp-admin/widgets.php:64 +msgid "Missing Widgets" +msgstr "Widgets perdidos" + +#: wp-admin/edit-comments.php:118 +msgid "You can manage comments made on your site similar to the way you manage posts and other content. This screen is customizable in the same ways as other management screens, and you can act on comments using the on-hover action links or the Bulk Actions." +msgstr "Puedes gestionar los comentarios de tu sitio igual que gestionas tus artículos y el resto de tu contenido. Esta pantalla es configurable de la misma forma que el resto de pantallas de gestión, pudiendo utilizar las acciones que aparecen al pasar sobre los comentarios, o las Acciones en Bloque." + +#: wp-admin/edit-comments.php:125 +msgid "In the Author column, in addition to the author’s name, email address, and blog URL, the commenter’s IP address is shown. Clicking on this link will show you all the comments made from this IP address." +msgstr "En la columna de Autor, además del nombre del autor, dirección de correo electrónico y URL del blog, se muestra la dirección IP del comentarista. Haciendo clic en ese enlace se mostrarán todos los comentarios realizados desde esa dirección IP." + +#: wp-admin/index.php:46 +msgid "Links in the Toolbar at the top of the screen connect your dashboard and the front end of your site, and provide access to your profile and helpful WordPress information." +msgstr "Enlaces en la Barra de Herramientas en la parte superior de la pantalla conecta tu escritorio y tu sitio, y proporciona acceso a tu perfil e información valiosa de WordPress. " + +#: wp-admin/link-manager.php:53 +msgid "Deleting Links" +msgstr "Borrar enlaces" + +#: wp-admin/upload.php:161 +msgid "Hovering over a row reveals action links: Edit, Delete Permanently, and View. Clicking Edit or on the media file’s name displays a simple screen to edit that individual file’s metadata. Clicking Delete Permanently will delete the file from the media library (as well as from any posts to which it is currently attached). View will take you to the display page for that file." +msgstr "Pasar sobre una fila revela los enlaces de acción: Editar, Borrar Permanentemente y Ver. Haciendo clic en Editar o en los nombres de los archivos multimedia se mostrará una pantalla simple para editar los metadatos de ese archivo. Haciendo clic en Borrar Permanentemente se borrará el archivo de la librería multimedia, así como de todos los artículos en los que estuviera adjuntada. Ver te llevará a la página de visualización de ese archivo. " + +#: wp-admin/edit.php:214 +msgid "Managing pages is very similar to managing posts, and the screens can be customized in the same way." +msgstr "Gestionar páginas es muy parecido a gestionar entradas, y las pantallas pueden ser personalizadas de la misma manera." + +#: wp-admin/edit.php:215 +msgid "You can also perform the same types of actions, including narrowing the list by using the filters, acting on a page using the action links that appear when you hover over a row, or using the Bulk Actions menu to edit the metadata for multiple pages at once." +msgstr "Puedes realizar el mismo tipo de acciones, incluyendo disminuir la lista utilizando filtros, utilizar los enlaces de acción que aparecen al pasar sobre una fila, o utilizando el menú de Acciones en Bloque para editar los metadatos de varias páginas a la vez. " + +#: wp-admin/upload.php:167 +msgid "If a media file has not been attached to any post, you will see that in the Attached To column, and can click on Attach File to launch a small popup that will allow you to search for a post and attach the file." +msgstr "Si un archivo no se ha adjuntado a ningún artículo, podrás verlo en la columna de Adjunto. Puedes hacer clic en Adjuntar Archivo para lanzar un pequeño popup que te permitirá buscar un artículo para adjuntar el archivo. " + +#: wp-admin/upload.php:154 +msgid "All the files you’ve uploaded are listed in the Media Library, with the most recent uploads listed first. You can use the Screen Options tab to customize the display of this screen." +msgstr "Todos los archivos que has subido están listados en la Librería Multimedia, con las subidas más recientes listadas primero. Puedes utilizar la pestaña de Opciones de Pantalla para personalizar la visualización de esta pantalla." + +#: wp-admin/edit.php:208 +msgid "Pages are similar to posts in that they have a title, body text, and associated metadata, but they are different in that they are not part of the chronological blog stream, kind of like permanent posts. Pages are not categorized or tagged, but can have a hierarchy. You can nest pages under other pages by making one the “Parent” of the other, creating a group of pages." +msgstr "" +"Las páginas son similares a los artículos en que tienen un título, cuerpo y metadatos asociados. Son diferentes en que no son parte de la corriente cronológica del blog, siendo una especie de artículos permanentes. \n" +"Las páginas no están categorizadas o etiquetadas, pero pueden tener jerarquía. Puedes anidar páginas bajo otras páginas haciendo que una sea “Padre” de otra, creando así grupos de páginas." + +#: wp-admin/edit-comments.php:128 +msgid "Many people take advantage of keyboard shortcuts to moderate their comments more quickly. Use the link to the side to learn more." +msgstr "Mucha gente aprovecha los atajos de teclado para moderar los comentarios más rapidamente. Utiliza el enlace del lateral para aprender más sobre esto." + +#: wp-admin/edit-comments.php:126 +msgid "In the Comment column, above each comment it says “Submitted on,” followed by the date and time the comment was left on your site. Clicking on the date/time link will take you to that comment on your live site. Hovering over any comment gives you options to approve, reply (and approve), quick edit, edit, spam mark, or trash that comment." +msgstr "En la columna Comentarios, sobre cada comentario hay un “Añadido el,” seguido de la fecha y la hora en la que se dejó el comentario en tu sitio. Haciendo clic en el enlace de fecha/hora irás a ese comentario en tu sitio. Pasando sobre cualquier comentario tendrás la opción de aprobarlo, responderlo (y aprobarlo), edición rápida, edición, marcarlo como spam, o enviarlo. " + +#: wp-admin/link-manager.php:48 +msgid "Links may be separated into Link Categories; these are different than the categories used on your posts." +msgstr "Los enlaces pueden dividirse en categorías de enlaces; estas son diferentes de las categorías utilizadas en las entradas" + +#: wp-admin/update-core.php:193 +msgid "Learn more about WordPress %s." +msgstr "Aprende más sobre WordPress, %s." + +#: wp-admin/edit.php:212 +msgid "Managing Pages" +msgstr "Gestionar páginas" + +#: wp-admin/users.php:35 +msgid "You can hide/display columns based on your needs and decide how many users to list per screen using the Screen Options tab." +msgstr "Puedes mostrar/ocultar columnas basándote en tus necesidades y decidir cuántos usuarios listar por pantalla utilizando la pestaña de Opciones de Pantalla." + +#: wp-admin/edit.php:186 +msgid "Preview will show you what your draft post will look like if you publish it. View will take you to your live site to view the post. Which link is available depends on your post’s status." +msgstr "Previsualizacón mostrará cómo se verá tu borrador si se publica. Ver te llevará a tu sitio para ver el artículo. El enlace que esté disponible dependerá del estado del artículo." + +#: wp-admin/users.php:41 +msgid "Hovering over a row in the users list will display action links that allow you to manage users. You can perform the following actions:" +msgstr "Pasando por encima de una línea en la lista de usuarios se mostrarán los enlaces de acción para gestionar usuarios. Puedes realizar las siguientes acciones:" + +#: wp-admin/edit.php:185 +msgid "Trash removes your post from this list and places it in the trash, from which you can permanently delete it." +msgstr "Papelera elimina tu artículo de esta lista y lo añade a la papelera, donde puedes borrarlo permanentemente. " + +#: wp-admin/edit.php:184 +msgid "Quick Edit provides inline access to the metadata of your post, allowing you to update post details without leaving this screen." +msgstr "Edición Rápida proporciona acceso en línea a los metadatos de tu artículo, permitiéndote actualizar detalles del artículo sin dejar la pantalla. " + +#: wp-admin/edit.php:183 +msgid "Edit takes you to the editing screen for that post. You can also reach that screen by clicking on the post title." +msgstr "Editar te lleva a la pantalla de edición de esa entrada. También puede llegar hasta ella haciendo clic en el título de la entrada." + +#: wp-admin/users.php:43 +msgid "Edit takes you to the editable profile screen for that user. You can also reach that screen by clicking on the username." +msgstr "Editar te lleva a la pantalla de edición de perfil para ese usuario. Puedes llegar también a esa pantalla cliqueando sobre su nombre de usuario." + +#: wp-admin/users.php:37 +msgid "You can view all posts made by a user by clicking on the number under the Posts column." +msgstr "Puedes ver todas las entradas escritas por un usuario haciendo clic en el número que hay bajo la columna Entradas." + +#: wp-admin/user-new.php:154 +msgid "Because this is a multisite installation, you may add accounts that already exist on the Network by specifying a username or email, and defining a role. For more options, such as specifying a password, you have to be a Network Administrator and use the hover link under an existing user’s name to Edit the user profile under Network Admin > All Users." +msgstr "En una instalación multisitio puedes añadir cuentas que ya existen en la Red especificando el nombre de usuario o la contraseña con la que están registrados en la misma, y definiendo un rol. Para más opciones, como especificar una contraseña, debes ser Administrador de la Red y utilizar el enlace que aparece al pasar sobre los nombres de usuario. Puedes encontrar esta opción bajo Administración de Red > Todos los Usuarios." + +#: wp-admin/includes/template.php:1942 +msgid "Likely direct inclusion of wp-admin/includes/template.php in order to use add_meta_box(). This is very wrong. Hook the add_meta_box() call into the add_meta_boxes action instead." +msgstr "Es común la inclusión directa de wp-admin/includes/template.php en el tema para utilizar add_meta_box(). En vez de hacer esto, y por seguridad, debes utilizar la llamada al gancho add_meta_box() de la acción add_meta_boxes." + +#: wp-admin/credits.php:82 wp-admin/freedoms.php:20 +msgid "Welcome to WordPress %s" +msgstr "Bienvenido a WordPress %s" + +#: wp-admin/about.php:143 +msgid "Go to Dashboard → Home" +msgstr "Ve a Escritorio → Inicio" + +#: wp-admin/about.php:139 +msgid "Return to Dashboard → Updates" +msgstr "Vuelve a Escritorio → Actualizaciones" + +#: wp-admin/credits.php:111 +msgid "WordPress is created by a worldwide team of passionate individuals." +msgstr "WordPress está creado por un equipo mundial de personas apasionadas de forma individual." + +#: wp-admin/includes/template.php:1822 +msgid "We’ve combined the admin bar and the old Dashboard header into one persistent toolbar. Hover over the toolbar items to see what’s new." +msgstr "Hemos combinado la barra de administración y la vieja cabecera del Escritorio en una única barra de herramientas siempre visible. Pasa el ratón sobre los elementos de barra de herramientas para ver las novedades." + +#: wp-admin/includes/template.php:1846 +msgid "New Feature: Saving Widgets" +msgstr "Nueva funcionalidad: guardar widgets" + +#: wp-admin/includes/template.php:1825 +msgid "Network Admin is now located in the My Sites menu." +msgstr "Administrador de la red se encuentra ahora en el menú Mis Sitios." + +#: wp-admin/includes/template.php:1847 +msgid "If you change your mind and revert to your previous theme, we’ll put the widgets back the way you had them." +msgstr "Si cambias de opinión y vuelves a tu tema anterior, pondremos los widgets de nuevo como estaban." + +#: wp-admin/includes/template.php:1821 +msgid "New Feature: Toolbar" +msgstr "Nueva característica: Barra de Herramientas" + +#: wp-admin/credits.php:175 +msgid "Core Developers" +msgstr "Jefe de Desarrollo" + +#: wp-admin/includes/dashboard.php:1134 wp-admin/includes/dashboard.php:1135 +msgid "Customize Your Site" +msgstr "Personaliza tu sitio" + +#: wp-admin/includes/media.php:1627 +msgid "Your browser has some limitations uploading large files with the multi-file uploader. Please use the browser uploader for files over 100MB." +msgstr "Tu navegador tiene algunas limitaciones subiendo archivos grandes con la subida de archivos múltiple. Por favor, usa la subida de archivos del navegador para archivos mayores de 100MB." + +#: wp-admin/user-edit.php:199 +msgid "Profile updated." +msgstr "Perfil actualizado." + +#: wp-admin/user-new.php:81 +msgid "" +"Hi,\n" +"\n" +"You've been invited to join '%1$s' at\n" +"%2$s with the role of %3$s.\n" +"\n" +"Please click the following link to confirm the invite:\n" +"%4$s" +msgstr "" +"Hola,\n" +"\n" +"Has sido invitado a participar de '%1s' en\n" +"%2$s como %3$s.\n" +"\n" +"Por favor, haz clic en el enlace para aceptar la invitación:\n" +"%4$s" + +#: wp-admin/credits.php:182 +msgid "Core Developer" +msgstr "Jefe de Desarrollo" + +#: wp-admin/includes/class-wp-upgrader.php:56 +msgid "The package could not be installed." +msgstr "No se ha podido descomprimir el paquete." + +#: wp-admin/includes/class-wp-upgrader.php:428 +msgid "The plugin contains no files." +msgstr "El plugin no tiene archivos." + +#: wp-admin/includes/class-wp-upgrader.php:637 +msgid "No valid plugins were found." +msgstr "No se encontraron plugins." + +#: wp-admin/includes/class-wp-upgrader.php:1014 +msgid "The theme is missing the style.css stylesheet." +msgstr "El tema no tiene la hoja de estilo style.css." + +#: wp-admin/includes/class-wp-upgrader.php:1023 +msgid "The theme is missing the index.php file." +msgstr "El tema no tiene el archivo index.php." + +#: wp-admin/includes/class-wp-upgrader.php:1019 +msgid "The style.css stylesheet doesn't contain a valid theme header." +msgstr "La hoja de estilo style.css no contiene una cabecera válida." + +#: wp-admin/includes/media.php:852 +msgid "Attachment Post URL" +msgstr "URL del adjunto a la entrada" + +#: wp-admin/menu.php:76 +msgctxt "admin menu" +msgid "All Links" +msgstr "Todos los enlaces" + +#: wp-admin/includes/media.php:1605 +msgctxt "Uploader: Drop files here - or - Select Files" +msgid "or" +msgstr "o" + +#: wp-admin/includes/media.php:1604 +msgid "Drop files here" +msgstr "Arrastra los archivos aquí" + +#: wp-admin/includes/plugin-install.php:152 +msgid "%s plugins" +msgstr "%d plugins" + +#: wp-admin/includes/plugin-install.php:152 +msgid "%s plugin" +msgstr "%d plugin" + +#: wp-admin/maint/repair.php:90 +msgid "Successfully optimized the %s table." +msgstr "Optimizada la tabla %s con éxito." + +#: wp-admin/maint/repair.php:93 +msgid "Failed to optimize the %1$s table. Error: %2$s" +msgstr "No se pudo optimizar la tabla %1$s . Error: %2$s" + +#: wp-admin/maint/repair.php:68 +msgid "Successfully repaired the %s table." +msgstr "La tabla %s ha sido reparada con éxito." + +#: wp-admin/maint/repair.php:83 +msgid "The %s table is already optimized." +msgstr "La tabla %s ya está optimizada." + +#: wp-admin/maint/repair.php:58 +msgid "The %s table is okay." +msgstr "La tabla %s está correcta." + +#: wp-admin/update-core.php:267 +msgid "View version %1$s details" +msgstr "Ver los detalles de la versión %1$" + +#: wp-admin/includes/import.php:174 +msgid "Tumblr" +msgstr "Tumblr" + +#: wp-admin/includes/import.php:175 +msgid "Install the Tumblr importer to import posts & media from Tumblr using their API." +msgstr "Instala el importador de Tumblr para importar entradas y media de Tumblr usando su API" + +#: wp-admin/includes/dashboard.php:1051 +msgid "Update %2$s or learn how to browse happy" +msgstr "

      Actualiza %2$s o aprende como navegar feliz

      " + +#: wp-admin/includes/media.php:2305 +msgid "Scale images to match the large size selected in %1$simage options%2$s (%3$d × %4$d)." +msgstr "Redimensiona las imágenes para que coincidan con la medida más larga seleccionada en las %1$sopciones sobre imágenes%2$s (%3$d × %4$d)." + +#: wp-admin/includes/media.php:2176 +msgid "Audio, Video, or Other File" +msgstr "Audio, vídeo u otro tipo de archivo." + +#: wp-admin/includes/media.php:1725 +msgid "Insert media from another website" +msgstr "Insertar medio desde otra web" + +#: wp-admin/options.php:143 +msgid "ERROR: options page not found." +msgstr "ERROR: no se encuentra la página de opciones." + +#: wp-admin/includes/file.php:1002 +msgid "ERROR: There was an error connecting to the server, Please verify the settings are correct." +msgstr "Error: Se ha producido un error en la conexión con el servidor. Por favor, verifica que la configuración es correcta." + +#: wp-admin/includes/ajax-actions.php:777 +msgid "ERROR: you are replying to a comment on a draft post." +msgstr "Error: estás respondiendo a un comentario de una entrada en borrador." + +#: wp-admin/includes/ajax-actions.php:800 +#: wp-admin/includes/ajax-actions.php:863 +msgid "ERROR: please type a comment." +msgstr "Error: por favor, escribe un comentario." + +#: wp-admin/index.php:45 +msgid "The left-hand navigation menu provides links to all of the WordPress administration screens, with submenu items displayed on hover. You can minimize this menu to a narrow icon strip by clicking on the Collapse Menu arrow at the bottom." +msgstr "El menú de navegación de la izquierda proporciona enlaces a todas las pantallas de administración de WordPress, con elementos de submenú que aparecen al pasar el ratón sobre ellos. Puedes minimizar este menú para que sea una barra estrecha de iconos haciendo clic en la flecha del menú Cerrar en la parte inferior." + +#: wp-admin/index.php:56 +msgid "Drag and Drop - To rearrange the boxes, drag and drop by clicking on the title bar of the selected box and releasing when you see a gray dotted-line rectangle appear in the location you want to place the box." +msgstr "Arrastra y suelta - Para reordenar los cuadros, arrastra y suelta, haz clic en la barra de título del cuadro seleccionado y suéltalo cuando se vea un rectángulo de líneas punteadas en la ubicación donde quieras ponerlo." + +#: wp-admin/index.php:54 +msgid "You can use the following controls to arrange your Dashboard screen to suit your workflow. This is true on most other administration screens as well." +msgstr "Puedes usar los controles siguientes para organizar tu escritorio de modo que se adapte a tu rutina de trabajo. Puedes hacer lo mismo en la mayoría de las secciones de administración." + +#: wp-admin/comment.php:50 wp-admin/custom-background.php:88 +#: wp-admin/custom-header.php:106 wp-admin/edit-comments.php:116 +#: wp-admin/edit-form-advanced.php:292 wp-admin/edit-link-form.php:56 +#: wp-admin/edit-tags.php:204 wp-admin/edit.php:161 wp-admin/edit.php:206 +#: wp-admin/export.php:48 wp-admin/import.php:21 +#: wp-admin/includes/screen.php:766 wp-admin/index.php:39 +#: wp-admin/link-manager.php:45 wp-admin/media-new.php:45 wp-admin/media.php:73 +#: wp-admin/my-sites.php:40 wp-admin/nav-menus.php:486 +#: wp-admin/nav-menus.php:521 wp-admin/options-discussion.php:19 +#: wp-admin/options-general.php:73 wp-admin/options-media.php:28 +#: wp-admin/options-permalink.php:20 wp-admin/options-reading.php:55 +#: wp-admin/options-writing.php:20 wp-admin/plugin-editor.php:121 +#: wp-admin/plugin-install.php:50 wp-admin/plugins.php:339 +#: wp-admin/revision.php:112 wp-admin/theme-editor.php:25 +#: wp-admin/theme-install.php:55 wp-admin/themes.php:49 +#: wp-admin/update-core.php:467 wp-admin/upload.php:152 +#: wp-admin/user-edit.php:47 wp-admin/user-new.php:165 wp-admin/users.php:25 +#: wp-admin/widgets.php:49 +msgid "Overview" +msgstr "Vista previa" + +#: wp-admin/menu.php:43 +msgid "Updates %s" +msgstr "Actualizaciones %s" + +#: wp-admin/edit-comments.php:155 wp-admin/edit-tags.php:306 +#: wp-admin/edit.php:273 wp-admin/link-manager.php:74 wp-admin/plugins.php:414 +#: wp-admin/upload.php:187 wp-admin/users.php:436 +msgid "Search results for “%s”" +msgstr "Resultados de búsqueda para “%s”" + +#: wp-admin/includes/user.php:62 wp-admin/users.php:113 +msgid "You can’t give users that role." +msgstr "No puedes asignar ese perfil a los usuarios." + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:204 +#: wp-admin/includes/class-wp-plugins-list-table.php:218 +msgid "Update Available (%s)" +msgid_plural "Update Available (%s)" +msgstr[0] "Actualización disponible (%s)" +msgstr[1] "Actualizaciones disponibles (%s)" + +#: wp-admin/plugins.php:303 +msgid "Click to view entire list of files which will be deleted" +msgstr "Haz clic para ver toda la lista de archivos que se borrarán" + +#: wp-admin/plugins.php:278 +msgid "%1$s by %2$s" +msgstr "%1$s por %2$s" + +#: wp-admin/comment.php:157 wp-admin/plugins.php:265 +#: wp-admin/theme-editor.php:217 +msgid "Caution:" +msgstr "Precaución:" + +#: wp-admin/menu.php:200 wp-admin/menu.php:202 wp-admin/user-new.php:144 +#: wp-admin/user-new.php:333 +msgid "Add New User" +msgstr "Añadir nuevo usuario" + +#: wp-admin/users.php:20 +msgctxt "users per page (screen options)" +msgid "Users" +msgstr "Usuarios" + +#: wp-admin/options-discussion.php:12 wp-admin/options-general.php:13 +#: wp-admin/options-media.php:13 wp-admin/options-permalink.php:13 +#: wp-admin/options-reading.php:13 wp-admin/options-writing.php:13 +msgid "You do not have sufficient permissions to manage options for this site." +msgstr "No tienes suficientes permisos para gestionar opciones en este sitio." + +#: wp-admin/menu.php:177 +msgctxt "plugin editor" +msgid "Editor" +msgstr "Editor" + +#: wp-admin/menu.php:172 +msgid "Installed Plugins" +msgstr "Plugins instalados" + +#: wp-admin/users.php:252 +msgid "Confirm Deletion" +msgstr "Confirmar borrado" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:268 +#: wp-admin/includes/class-wp-plugins-list-table.php:243 +#: wp-admin/includes/class-wp-plugins-list-table.php:351 +msgid "Deactivate" +msgstr "Desactivar" + +#: wp-admin/about.php:29 wp-admin/credits.php:86 wp-admin/freedoms.php:24 +#: wp-admin/includes/class-wp-ms-themes-list-table.php:329 +#: wp-admin/includes/class-wp-plugins-list-table.php:410 +#: wp-admin/includes/update.php:166 wp-admin/includes/update.php:192 +msgid "Version %s" +msgstr "Versión %s" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:331 +#: wp-admin/includes/class-wp-plugin-install-list-table.php:229 +#: wp-admin/includes/class-wp-plugins-list-table.php:415 +#: wp-admin/includes/class-wp-theme-install-list-table.php:235 +#: wp-admin/includes/class-wp-theme-install-list-table.php:339 +#: wp-admin/includes/class-wp-themes-list-table.php:180 wp-admin/themes.php:204 +#: wp-admin/themes.php:281 wp-admin/themes.php:330 +msgid "By %s" +msgstr "Por %s" + +#: wp-admin/user-new.php:231 +msgid "User added." +msgstr "Usuario añadido." + +#: wp-admin/includes/class-wp-media-list-table.php:410 +#: wp-admin/includes/class-wp-media-list-table.php:429 +#: wp-admin/includes/class-wp-ms-users-list-table.php:259 +#: wp-admin/includes/class-wp-posts-list-table.php:611 +#: wp-admin/includes/class-wp-terms-list-table.php:263 +msgid "View" +msgstr "Ver" + +#: wp-admin/includes/class-wp-ms-users-list-table.php:189 +#: wp-admin/user-edit.php:337 +msgid "Super Admin" +msgstr "Super administrador" + +#: wp-admin/users.php:266 wp-admin/users.php:274 wp-admin/users.php:303 +#: wp-admin/users.php:311 +msgid "You can’t remove users." +msgstr "No puedes borrar usuarios." + +#: wp-admin/comment.php:59 wp-admin/custom-background.php:99 +#: wp-admin/custom-header.php:134 wp-admin/edit-comments.php:136 +#: wp-admin/edit-form-advanced.php:271 wp-admin/edit-form-advanced.php:287 +#: wp-admin/edit-form-advanced.php:303 wp-admin/edit-link-form.php:66 +#: wp-admin/edit-tags.php:243 wp-admin/edit.php:200 wp-admin/edit.php:221 +#: wp-admin/export.php:56 wp-admin/import.php:29 wp-admin/index.php:89 +#: wp-admin/link-manager.php:61 wp-admin/media-new.php:57 wp-admin/media.php:84 +#: wp-admin/my-sites.php:49 wp-admin/nav-menus.php:529 +#: wp-admin/options-discussion.php:27 wp-admin/options-general.php:80 +#: wp-admin/options-media.php:35 wp-admin/options-permalink.php:46 +#: wp-admin/options-reading.php:72 wp-admin/options-writing.php:58 +#: wp-admin/plugin-editor.php:135 wp-admin/plugin-install.php:67 +#: wp-admin/plugins.php:355 wp-admin/revision.php:118 +#: wp-admin/theme-editor.php:43 wp-admin/theme-install.php:72 +#: wp-admin/themes.php:86 wp-admin/tools.php:29 wp-admin/update-core.php:487 +#: wp-admin/upload.php:173 wp-admin/user-edit.php:54 wp-admin/user-new.php:185 +#: wp-admin/users.php:63 wp-admin/widgets.php:73 +msgid "Support Forums" +msgstr "Foros de soporte" + +#: wp-admin/users.php:389 +msgid "Changed roles." +msgstr "Perfiles cambiados." + +#: wp-admin/users.php:400 +msgid "User removed from this site." +msgstr "Usuario borrado de este sitio." + +#: wp-admin/includes/dashboard.php:305 wp-admin/users.php:443 +msgid "Search Users" +msgstr "Buscar usuarios" + +#: wp-admin/user-new.php:273 +msgid "Add Existing User" +msgstr "Añadir usuario existente" + +#: wp-admin/includes/class-wp-users-list-table.php:168 +#: wp-admin/user-edit.php:317 wp-admin/user-new.php:299 +#: wp-admin/user-new.php:408 +msgid "Role" +msgstr "Perfil" + +#: wp-admin/includes/class-wp-ms-users-list-table.php:96 +#: wp-admin/includes/class-wp-users-list-table.php:101 +msgctxt "users" +msgid "All (%s)" +msgid_plural "All (%s)" +msgstr[0] "Todo (%s)" +msgstr[1] "Todos (%s)" + +#: wp-admin/comment.php:57 wp-admin/custom-background.php:97 +#: wp-admin/custom-header.php:132 wp-admin/edit-comments.php:132 +#: wp-admin/edit-form-advanced.php:269 wp-admin/edit-form-advanced.php:284 +#: wp-admin/edit-form-advanced.php:301 wp-admin/edit-link-form.php:64 +#: wp-admin/edit-tags.php:234 wp-admin/edit.php:198 wp-admin/edit.php:219 +#: wp-admin/export.php:54 wp-admin/import.php:27 wp-admin/index.php:87 +#: wp-admin/link-manager.php:59 wp-admin/media-new.php:55 wp-admin/media.php:82 +#: wp-admin/my-sites.php:47 wp-admin/nav-menus.php:527 +#: wp-admin/options-discussion.php:25 wp-admin/options-general.php:78 +#: wp-admin/options-media.php:33 wp-admin/options-permalink.php:43 +#: wp-admin/options-reading.php:70 wp-admin/options-writing.php:56 +#: wp-admin/plugin-editor.php:132 wp-admin/plugin-install.php:65 +#: wp-admin/plugins.php:353 wp-admin/revision.php:116 +#: wp-admin/theme-editor.php:38 wp-admin/theme-install.php:70 +#: wp-admin/themes.php:84 wp-admin/tools.php:27 wp-admin/update-core.php:485 +#: wp-admin/upload.php:171 wp-admin/user-edit.php:52 wp-admin/user-new.php:183 +#: wp-admin/users.php:60 wp-admin/widgets.php:71 +msgid "For more information:" +msgstr "Para más información:" + +#: wp-admin/menu.php:191 wp-admin/menu.php:193 wp-admin/user-edit.php:218 +#: wp-admin/users.php:430 +msgctxt "user" +msgid "Add New" +msgstr "Añadir nuevo" + +#: wp-admin/menu.php:160 +msgctxt "theme editor" +msgid "Editor" +msgstr "Editor" + +#: wp-admin/includes/class-wp-links-list-table.php:48 +#: wp-admin/includes/class-wp-links-list-table.php:145 +#: wp-admin/includes/class-wp-ms-sites-list-table.php:130 +#: wp-admin/includes/class-wp-ms-sites-list-table.php:281 +#: wp-admin/includes/class-wp-ms-themes-list-table.php:240 +#: wp-admin/includes/class-wp-ms-themes-list-table.php:285 +#: wp-admin/includes/class-wp-ms-users-list-table.php:75 +#: wp-admin/includes/class-wp-ms-users-list-table.php:197 +#: wp-admin/includes/class-wp-plugins-list-table.php:249 +#: wp-admin/includes/class-wp-plugins-list-table.php:347 +#: wp-admin/includes/class-wp-plugins-list-table.php:356 +#: wp-admin/includes/class-wp-terms-list-table.php:84 +#: wp-admin/includes/class-wp-terms-list-table.php:261 +#: wp-admin/includes/class-wp-themes-list-table.php:159 +#: wp-admin/includes/class-wp-users-list-table.php:130 +#: wp-admin/includes/class-wp-users-list-table.php:257 +#: wp-admin/includes/media.php:1233 wp-admin/includes/meta-boxes.php:717 +#: wp-admin/includes/template.php:538 wp-admin/includes/widgets.php:223 +#: wp-admin/themes.php:364 wp-admin/widgets.php:283 +msgid "Delete" +msgstr "Borrar" + +#: wp-admin/menu.php:189 +msgid "All Users" +msgstr "Todos los usuarios" + +#: wp-admin/edit-form-advanced.php:164 +msgid "Attributes" +msgstr "Atributos" + +#: wp-admin/includes/class-wp-theme-install-list-table.php:328 +#: wp-admin/includes/dashboard.php:956 +msgid "Install" +msgstr "Instalar" + +#: wp-admin/menu.php:170 +msgid "Plugins %s" +msgstr "Plugins %s" + +#: wp-admin/menu.php:210 wp-admin/ms-delete-site.php:30 +msgid "Delete Site" +msgstr "Borrar sitio" + +#: wp-admin/edit-form-advanced.php:279 +msgid "About Pages" +msgstr "Sobre las páginas" + +#: wp-admin/edit-form-advanced.php:254 +msgid "Customizing This Display" +msgstr "Personalizando esta pantalla" + +#: wp-admin/edit-form-advanced.php:263 +msgid "Title and Post Editor" +msgstr "Título y editor de entradas" + +#: wp-admin/edit-tags.php:241 +msgid "Documentation on Tags" +msgstr "Documentación sobre etiquetas de las entradas" + +#: wp-admin/options-reading.php:151 +msgid "Note: Neither of these options blocks access to your site — it is up to search engines to honor your request." +msgstr "Nota: ninguna de estas opciones bloquea el acceso a tu sitio — los motores de búsqueda podrán o no respetar tu petición." + +#: wp-admin/options-permalink.php:214 +msgid "Post name" +msgstr "Nombre entrada" + +#: wp-admin/options-permalink.php:203 wp-admin/options-permalink.php:207 +#: wp-admin/options-permalink.php:215 +msgctxt "sample permalink structure" +msgid "sample-post" +msgstr "pagina-ejemplo" + +#: wp-admin/options-permalink.php:191 wp-admin/options-permalink.php:211 +msgctxt "sample permalink base" +msgid "archives" +msgstr "archivos" + +#: wp-admin/import.php:104 +msgid "This importer is not installed. Please install importers from the main site." +msgstr "Este importador no está instalado. Por favor, instala los importadores desde el sitio principal." + +#: wp-admin/options-general.php:113 wp-admin/options-general.php:132 +msgid "E-mail Address" +msgstr "Dirección de correo electrónico" + +#: wp-admin/options-general.php:310 +msgid "Site Language" +msgstr "Idioma del sitio" + +#: wp-admin/options-discussion.php:45 +msgid "Attempt to notify any blogs linked to from the article" +msgstr "Tratar de avisar a los sitios enlazados desde el artículo." + +#: wp-admin/user-new.php:24 +msgid "" +"Hi,\n" +"You've been invited to join '%1$s' at\n" +"%2$s with the role of %3$s.\n" +"If you do not want to join this site please ignore\n" +"this email. This invitation will expire in a few days.\n" +"\n" +"Please click the following link to activate your user account:\n" +"%%s" +msgstr "" +"Hola,\n" +"Has sido invitado a unirte a '%1$s' en\n" +"%2$s como %3$s.\n" +"Si no quieres unirte a este sitio, por favor ignora este correo electrónico\n" +"Esta invitación caducará en unos días.\n" +"\n" +"Por favor, haga click en el siguiente enlace para activar su cuenta de usuario:\n" +"%%s" + +#: wp-admin/includes/theme.php:219 +msgid "Full Width Template" +msgstr "Plantilla a pantalla completa" + +#: wp-admin/includes/theme.php:221 +msgid "Post Formats" +msgstr "Formatos de entradas" + +#: wp-admin/includes/theme.php:216 +msgid "Featured Images" +msgstr "Imágenes destacadas" + +#: wp-admin/includes/theme.php:215 +msgid "Featured Image Header" +msgstr "Imagen de cabecera" + +#: wp-admin/includes/dashboard.php:1034 +msgid "It looks like you're using an old version of %s. For the best WordPress experience, please update your browser." +msgstr "Parece que estás usando una versión antigua de %s. Para una mejor experiencia de WordPress, por favor, actualiza tu navegador." + +#: wp-admin/includes/dashboard.php:1032 +msgid "It looks like you're using an insecure version of %s. Using an outdated browser makes your computer unsafe. For the best WordPress experience, please update your browser." +msgstr "Parece que estás usando una versión insegura de %s. El uso de un navegador obsoleto hace que tu ordenador sea inseguro. Para una mejor experiencia con WordPress, por favor, actualiza tu navegador." + +#: wp-admin/includes/nav-menu.php:1202 +msgid "There are some invalid menu items. Please check or delete them." +msgstr "Hay algunos elementos de menú no válidos. Por favor, compruébalos o elimínalos." + +#: wp-admin/includes/nav-menu.php:85 +msgid "%s (Invalid)" +msgstr "%s (no válido)" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:185 +msgctxt "plugin name" +msgid "Name" +msgstr "Nombre" + +#: wp-admin/includes/class-wp-terms-list-table.php:99 +#: wp-admin/includes/class-wp-terms-list-table.php:339 +msgctxt "term name" +msgid "Name" +msgstr "Nombre" + +#: wp-admin/includes/template.php:463 wp-admin/includes/template.php:478 +#: wp-admin/includes/template.php:574 +msgctxt "meta name" +msgid "Name" +msgstr "Nombre" + +#: wp-admin/user-new.php:36 +msgid "[%s] Your site invite" +msgstr "[%s] Tu sitio invita a" + +#: wp-admin/themes.php:247 +msgctxt "theme name" +msgid "Name" +msgstr "Nombre" + +#: wp-admin/edit-link-form.php:94 +#: wp-admin/includes/class-wp-links-list-table.php:81 +msgctxt "link name" +msgid "Name" +msgstr "Nombre" + +#: wp-admin/credits.php:190 +msgid "Icon Design" +msgstr "Diseño del icono" + +#: wp-admin/theme-install.php:49 +msgid "You can find additional themes for your site by using the Theme Browser/Installer on this screen, which will display themes from the WordPress.org Theme Directory. These themes are designed and developed by third parties, are available free of charge, and are compatible with the license WordPress uses." +msgstr "Puedes encontrar más temas en el buscador/instalador de temas que hay en esta misma página, donde se mostrarán los temas del Directorio de temas. Estos temas son diseñados y desarrollados por terceros y estás disponibles sin cargo (gratis) y compatible con la licencia que utiliza WordPress." + +#: wp-admin/update-core.php:50 +msgid "Re-install Now" +msgstr "Reinstalar ahora" + +#: wp-admin/includes/file.php:234 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini." +msgstr "El archivo subido excede la directiva upload_max_filesize en php.ini." + +#: wp-admin/includes/file.php:235 +msgid "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." +msgstr "El archivo subido excede la directiva MAX_FILE_SIZE que se especificó en el formulario HTML." + +#: wp-admin/options-writing.php:128 wp-admin/tools.php:47 +msgid "If your bookmarks toolbar is hidden: copy the code below, open your Bookmarks manager, create new bookmark, type Press This into the name field and paste the code into the URL field." +msgstr "Si tu barra de marcadores está oculta: copia el siguiente código, abre el gestor de marcadores, crea un nuevo marcador, teclea Publica esto en el campo de nombre y pega el código en el campo de la URL." + +#: wp-admin/credits.php:183 +msgid "Core Committer" +msgstr "Confirmador del núcleo" + +#: wp-admin/credits.php:184 +msgid "Guest Committer" +msgstr "Confirmador invitado" + +#: wp-admin/credits.php:189 +msgid "External Libraries" +msgstr "Librerías externas" + +#: wp-admin/press-this.php:638 +msgid "Add:" +msgstr "Añadir:" + +#: wp-admin/press-this.php:291 +msgid "Add Photos" +msgstr "Añadir fotos" + +#: wp-admin/menu.php:206 +msgid "Available Tools" +msgstr "Herramientas disponibles" + +#: wp-admin/menu.php:212 +msgid "Network Setup" +msgstr "Configuración de la red" + +#: wp-admin/credits.php:181 +msgid "User Experience Lead" +msgstr "Líder de experiencia de usuario" + +#: wp-admin/credits.php:119 +msgctxt "Translate this to be the equivalent of English Translators in your language for the credits page Translators section" +msgid "Translators" +msgstr "Traductores" + +#: wp-admin/credits.php:106 +msgid "http://codex.wordpress.org/Contributing_to_WordPress" +msgstr "http://codex.wordpress.org/Contributing_to_WordPress" + +#: wp-admin/freedoms.php:45 +msgid "WordPress grows when people like you tell their friends about it, and the thousands of businesses and services that are built on and around WordPress share that fact with their users. We’re flattered every time someone spreads the good word, just make sure to check out our trademark guidelines first." +msgstr "WordPress crece cuando la gente habla a sus amigos sobre él y los miles de negocios y servicios que se construyen en y alrededor de WordPress lo comparten con sus usuarios. Nos enorgullece cada vez que alguien difunde la buena nueva, simplemente asegúrate de echar un vistazo a nuestras guías de marca." + +#: wp-admin/freedoms.php:52 +msgid "Every plugin and theme in WordPress.org’s directory is 100%% GPL or a similarly free and compatible license, so you can feel safe finding plugins and themes there. If you get a plugin or theme from another source, make sure to ask them if it’s GPL first. If they don’t respect the WordPress license, we don’t recommend them." +msgstr "Cada plugin y tema del directorio de WordPress.org es 100%% GPL o con una licencia libre similar y compatible, así que puedes sentirte seguro buscando plugins y temas aquí. Si obtienes un plugin o tema desde otra fuente asegúrate de preguntar primero si es GPL. Si no respeta la licencia de WordPress no lo recomedamos." + +#: wp-admin/freedoms.php:36 +msgid "WordPress is Free and open source software, built by a distributed community of mostly volunteer developers from around the world. WordPress comes with some awesome, worldview-changing rights courtesy of its license, the GPL." +msgstr "WordPress es un software de código libre y abierto, construido por una comunidad de desarrolladores, en su mayoría voluntarios, distribuidos por todo el mundo. WordPress viene con la genial licencia que cambiará el mundo, la licencia GPL." + +#: wp-admin/credits.php:180 +msgid "Lead Developer" +msgstr "Jefe de Desarrollo" + +#: wp-admin/credits.php:185 +msgid "Developer" +msgstr "Desarrollador" + +#: wp-admin/credits.php:174 +msgid "Extended Core Team" +msgstr "Equipo Extendido del Core" + +#: wp-admin/credits.php:161 +msgid "Want to see your name in lights on this page? Get involved in WordPress." +msgstr "¿Quieres ver tu nombre destacado en esta página? Involúcrate en WordPress." + +#: wp-admin/about.php:35 wp-admin/credits.php:12 wp-admin/credits.php:92 +#: wp-admin/freedoms.php:30 +msgid "Credits" +msgstr "Créditos" + +#: wp-admin/widgets.php:334 +msgctxt "removing-widget" +msgid "Deactivate" +msgstr "Desactivar" + +#: wp-admin/credits.php:179 +msgid "Cofounder, Project Lead" +msgstr "Co-fundador, jefe de proyecto" + +#: wp-admin/credits.php:188 +msgid "Internationalization" +msgstr "Internacionalización" + +#: wp-admin/credits.php:177 +msgid "Core Contributors to WordPress %s" +msgstr "Colaboradores del núcleo de Wordpress %s" + +#: wp-admin/credits.php:176 +msgid "Recent Rockstars" +msgstr "Estrellas del rock recientes" + +#: wp-admin/menu.php:99 +msgid "All Comments" +msgstr "Todos los comentarios" + +#: wp-admin/credits.php:103 +msgid "WordPress is created by a worldwide team of passionate individuals. Get involved in WordPress." +msgstr "WordPress está creado por un equipo de personas apasionadas que están alrededor del todo el planeta.Involucrarse en WordPress." + +#: wp-admin/credits.php:173 +msgid "Project Leaders" +msgstr "Líderes de proyecto" + +#: wp-admin/credits.php:186 +msgid "Designer" +msgstr "Diseñador" + +#: wp-admin/freedoms.php:39 +msgid "You have the freedom to run the program, for any purpose." +msgstr "Tienes la libertad de usar el programa con cualquier propósito." + +#: wp-admin/freedoms.php:40 +msgid "You have access to the source code, the freedom to study how the program works, and the freedom to change it to make it do what you wish." +msgstr "Tienes acceso al código fuente, la libertad de estudiar cómo funciona el programa, y ​​la libertad de cambiarlo para que haga lo que quieras." + +#: wp-admin/freedoms.php:41 +msgid "You have the freedom to redistribute copies of the original program so you can help your neighbor." +msgstr "Tienes la libertad de redistribuir copias del programa original y así ayudar a otros." + +#: wp-admin/freedoms.php:42 +msgid "You have the freedom to distribute copies of your modified versions to others. By doing this you can give the whole community a chance to benefit from your changes." +msgstr "Eres libre de distribuir copias de tu versión modificada a quien quieras. Si lo haces, das la oportunidad de beneficiarse de tus cambios a toda la comunidad." + +#: wp-admin/includes/dashboard.php:33 +msgid "You are using an insecure browser!" +msgstr "¡Estás usando un navegador inseguro!" + +#: wp-admin/includes/dashboard.php:35 +msgid "Your browser is out of date!" +msgstr "¡Tu navegador está obsoleto!" + +#: wp-admin/freedoms.php:54 +msgid "Don’t you wish all software came with these freedoms? So do we! For more information, check out the Free Software Foundation." +msgstr "¿No te gustaría que todo el software tuviera esa libertad? Nosotros también. Para más información ve a la Free Software Foundation." + +#: wp-admin/about.php:37 wp-admin/credits.php:94 wp-admin/freedoms.php:12 +#: wp-admin/freedoms.php:32 +msgid "Freedoms" +msgstr "Derechos" + +#: wp-admin/custom-header.php:567 +msgid "You can use one of these cool headers or show a random one on each page." +msgstr "Puedes usar una de estas cabeceras tan chulas o mostrarlas aleatoriamente en cada página." + +#: wp-admin/custom-header.php:565 +msgid "If you don‘t want to upload your own image, you can use one of these cool headers, or show a random one." +msgstr "Si no quieres subir tu propia imagen puedes usar una de estas cabeceras tan chulas o ir mostrándolas aleatoriamente." + +#: wp-admin/custom-header.php:553 +msgid "You can choose one of your previously uploaded headers, or show a random one." +msgstr "Puedes elegir una las cabeceras que ya has subido o que se muestren aleatoriamente." + +#: wp-admin/menu-header.php:185 +msgid "Collapse menu" +msgstr "Cerrar menú" + +#: wp-admin/includes/class-wp-plugins-list-table.php:277 +msgid "Drop-ins are advanced plugins in the %s directory that replace WordPress functionality when present." +msgstr "Los infiltrados son plugins avanzados del directorio %s que reemplazan funcionalidades de WordPress cuando están disponibles." + +#: wp-admin/includes/class-wp-plugins-list-table.php:275 +msgid "Files in the %s directory are executed automatically." +msgstr "Los archivos del directorio %s se ejecutan automáticamente." + +#: wp-admin/custom-header.php:280 +msgid "Random: Show a different image on each page." +msgstr "Aleatoria: Muestra una imagen diferente en cada página." + +#: wp-admin/custom-header.php:551 +msgid "Uploaded Images" +msgstr "Imágenes subidas" + +#: wp-admin/media-new.php:56 +msgid "Documentation on Uploading Media Files" +msgstr "Documentación sobre la carga de archivos multimedia" + +#: wp-admin/user-edit.php:53 +msgid "Documentation on User Profiles" +msgstr " Documentación sobre los perfiles de usuario" + +#: wp-admin/options-permalink.php:44 +msgid "Documentation on Permalinks Settings" +msgstr " Documentación sobre ajustes de enlaces permanentes" + +#: wp-admin/edit-tags.php:237 +msgid "Documentation on Categories" +msgstr "Documentación sobre las categorías" + +#: wp-admin/edit-tags.php:239 +msgid "Documentation on Link Categories" +msgstr " Documentación sobre categorías de enlaces" + +#: wp-admin/widgets.php:72 +msgid "Documentation on Widgets" +msgstr " Documentación sobre widgets" + +#: wp-admin/nav-menus.php:528 +msgid "Documentation on Menus" +msgstr " Documentación sobre menús " + +#: wp-admin/edit-form-advanced.php:302 wp-admin/media.php:83 +msgid "Documentation on Edit Media" +msgstr "Documentación de editar objetos multimedia" + +#: wp-admin/edit-form-advanced.php:286 +msgid "Documentation on Editing Pages" +msgstr " Documentación de la edición de páginas" + +#: wp-admin/upload.php:172 +msgid "Documentation on Media Library" +msgstr "Documentación sobre la librería multimedia " + +#: wp-admin/tools.php:28 +msgid "Documentation on Tools" +msgstr "Documentación sobre herramientas " + +#: wp-admin/custom-header.php:133 +msgid "Documentation on Custom Header" +msgstr "Documentación sobre cabeceras personalizadas" + +#: wp-admin/export.php:55 +msgid "Documentation on Export" +msgstr "Documentación sobre exportación " + +#: wp-admin/options-general.php:79 +msgid "Documentation on General Settings" +msgstr "Documentación sobre ajustes generales" + +#: wp-admin/options-media.php:34 +msgid "Documentation on Media Settings" +msgstr "Documentación sobre Ajustes multimedia" + +#: wp-admin/update-core.php:486 +msgid "Documentation on Updating WordPress" +msgstr " Documentación sobre actualizar WordPress" + +#: wp-admin/edit-form-advanced.php:270 +msgid "Documentation on Writing and Editing Posts" +msgstr "Documentación sobre escritura y edición de entradas " + +#: wp-admin/comment.php:58 wp-admin/edit-comments.php:133 +msgid "Documentation on Comments" +msgstr "Documentación sobre comentarios" + +#: wp-admin/users.php:61 +msgid "Documentation on Managing Users" +msgstr "Documentación sobre la gestión de usuarios" + +#: wp-admin/options-discussion.php:26 +msgid "Documentation on Discussion Settings" +msgstr "Documentación sobre ajustes de comentarios" + +#: wp-admin/edit-link-form.php:65 +msgid "Documentation on Creating Links" +msgstr " Documentación sobre la creación de enlaces " + +#: wp-admin/options-reading.php:71 +msgid "Documentation on Reading Settings" +msgstr "Documentación sobre ajustes de lectura" + +#: wp-admin/plugin-install.php:66 +msgid "Documentation on Installing Plugins" +msgstr "Documentación sobre la instalación de plugins " + +#: wp-admin/edit.php:199 +msgid "Documentation on Managing Posts" +msgstr "Documentación sobre la gestión de entradas " + +#: wp-admin/index.php:88 +msgid "Documentation on Dashboard" +msgstr "Documentación sobre el escritorio" + +#: wp-admin/plugin-editor.php:133 +msgid "Documentation on Editing Plugins" +msgstr "Documentación de la edición de plugins" + +#: wp-admin/custom-background.php:98 +msgid "Documentation on Custom Background" +msgstr " Documentación sobre fondo personalizado" + +#: wp-admin/import.php:28 +msgid "Documentation on Import" +msgstr "Documentación sobre importar" + +#: wp-admin/edit.php:220 +msgid "Documentation on Managing Pages" +msgstr "Documentación sobre la gestión de páginas" + +#: wp-admin/edit-form-advanced.php:285 +msgid "Documentation on Adding New Pages" +msgstr "Documentación sobre añadir nuevas páginas" + +#: wp-admin/options-writing.php:57 +msgid "Documentation on Writing Settings" +msgstr "Documentación sobre ajustes de escritura" + +#: wp-admin/link-manager.php:60 +msgid "Documentation on Managing Links" +msgstr "Documentación sobre la gestión de enlaces " + +#: wp-admin/user-new.php:184 +msgid "Documentation on Adding New Users" +msgstr "Documentación sobre agregar nuevos usuarios" + +#: wp-admin/includes/theme.php:200 wp-admin/index.php:61 +msgid "Layout" +msgstr "Diseño de pantalla" + +#: wp-admin/includes/ajax-actions.php:1794 +msgid "Save failed" +msgstr "Error al guardar" + +#: wp-admin/users.php:227 +msgid "You have specified this user for deletion:" +msgid_plural "You have specified these users for deletion:" +msgstr[0] "Ha marcado a este usuario para su eliminación:" +msgstr[1] "Ha marcado a estos usuarios para su eliminación:" + +#: wp-admin/user-edit.php:204 +msgid "← Back to Users" +msgstr "← Volver a usuarios" + +#: wp-admin/includes/class-wp-list-table.php:573 +msgctxt "paging" +msgid "%1$s of %2$s" +msgstr "%1$s de %2$s" + +#: wp-admin/includes/file.php:67 +msgid "%s Page Template" +msgstr "%s Plantilla de Página" + +#: wp-admin/press-this.php:500 +msgid "Post Format:" +msgstr "Formato de entrada:" + +#: wp-admin/plugins.php:265 +msgid "This plugin may be active on other sites in the network." +msgid_plural "These plugins may be active on other sites in the network." +msgstr[0] "Este plugin puede estar activado para otros sitios de la red." +msgstr[1] "Estos plugins pueden estar activos para otros sitios de la red." + +#: wp-admin/plugins.php:372 +msgid "You cannot delete a plugin while it is active on the main site." +msgstr "No puedes borrar un plugin si está activado para el sitio principal." + +#: wp-admin/options-writing.php:93 +msgid "Default Post Format" +msgstr "Formato de entrada por defecto" + +#: wp-admin/update-core.php:22 wp-admin/update-core.php:531 +#: wp-admin/update-core.php:556 wp-admin/update-core.php:584 +#: wp-admin/update-core.php:612 +msgid "You do not have sufficient permissions to update this site." +msgstr "No tienes los permisos adecuados para actualizar este sitio." + +#: wp-admin/user-edit.php:220 wp-admin/users.php:432 +msgctxt "user" +msgid "Add Existing" +msgstr "Añadir usuario existente" + +#: wp-admin/user-new.php:238 +msgctxt "user" +msgid "Add New User" +msgstr "Añadir nuevo usuario " + +#: wp-admin/user-new.php:431 +msgid "Add New User " +msgstr "Añadir nuevo usuario" + +#: wp-admin/user-new.php:326 +msgid "Add Existing User " +msgstr "Añadir usuario existente" + +#: wp-admin/plugin-editor.php:128 wp-admin/theme-editor.php:34 +msgid "Any edits to files from this screen will be reflected on all sites in the network." +msgstr "Cualquier modificación de los archivos se verá reflejada en todos los sitios de la red." + +#: wp-admin/user-new.php:240 +msgctxt "user" +msgid "Add Existing User" +msgstr "Añadir usuario existente" + +#: wp-admin/options-writing.php:28 wp-admin/tools.php:17 +msgid "Press This is a bookmarklet that makes it easy to blog about something you come across on the web. You can use it to just grab a link, or to post an excerpt. Press This will even allow you to choose from images included on the page and use them in your post. Just drag the Press This link on this screen to your bookmarks bar in your browser, and you’ll be on your way to easier content creation. Clicking on it while on another website opens a popup window with all these options." +msgstr "" +"Publicar esto es un marcador de enlaces que hace fácil bloguear sobre algo con lo que te hayas topado en la web. Puedes usarlo para guardar un enlace, para publicar un resumen del mismo. Publicar esto te permite elegir de entre las imágenes de esa página cuál se utilizará para tu entrada. \n" +"Sólo tienes que arrastrar el enlace de Publicar esto de esta pantalla a la barra de enlaces favoritos de tu navegador y tendrás la forma más fácil de crear contenido. Haciendo clic en él mientras estés visitando cualquier sitio web se abre una ventana emergente con las opciones mencionadas. " + +#: wp-admin/plugin-editor.php:134 +msgid "Documentation on Writing Plugins" +msgstr "Documentación sobre cómo escribir plugins" + +#: wp-admin/index.php:65 +msgid "The boxes on your Dashboard screen are:" +msgstr "Las cajas en tu Escritorio son:" + +#: wp-admin/users.php:26 +msgid "This screen lists all the existing users for your site. Each user has one of five defined roles as set by the site admin: Site Administrator, Editor, Author, Contributor, or Subscriber. Users with roles other than Administrator will see fewer options in the dashboard navigation when they are logged in, based on their role." +msgstr "Esta pantalla muestra todos los usuarios existentes para tu sitio. Cada usuario dispone de uno de los cinco perfiles definidos según lo establecido por el administrador del sitio: Administrador del sitio, editor, autor, colaborador o suscriptor. Los usuarios con perfiles que no sean de administrador verán menos opciones en el panel de navegación cuando se hayan identificado, en base a su perfil." + +#: wp-admin/options-permalink.php:45 +msgid "Documentation on Using Permalinks" +msgstr "Documentación sobre el uso de enlaces permanentes" + +#: wp-admin/plugin-editor.php:127 +msgid "If you want to make changes but don’t want them to be overwritten when the plugin is updated, you may be ready to think about writing your own plugin. For information on how to edit plugins, write your own from scratch, or just better understand their anatomy, check out the links below." +msgstr "Si quieres hacer cambios pero no quieres que se sobreescriban cuando se actualice el plugin, deberías pensar en escribir tu propio plugin. Para obtener información acerca de cómo editar plugins, escribir desde cero el tuyo, o simplemente entender mejor su anatomía, echa un vistazo a los enlaces de aquí abajo." + +#: wp-admin/users.php:62 +msgid "Descriptions of Roles and Capabilities" +msgstr "Descripción de los perfiles y capacidades" + +#: wp-admin/includes/upgrade.php:203 +msgid "sample-page" +msgstr "pagina-ejemplo" + +#: wp-admin/includes/upgrade.php:201 +msgid "Sample Page" +msgstr "Página de ejemplo" + +#: wp-admin/options-discussion.php:224 +msgid "Retro (Generated)" +msgstr "Retro (generado)" + +#: wp-admin/includes/class-wp-themes-list-table.php:68 +msgid "You only have one theme enabled for this site right now. Visit the Network Admin to enable or install more themes." +msgstr "Sólo tienes un tema activado para este sitio. Ve a la administración de la red para activar or instalar más temas." + +#: wp-admin/includes/class-wp-themes-list-table.php:72 +msgid "You only have one theme enabled for this site right now. Visit the Network Admin to enable more themes." +msgstr "Sólo tienes un tema activado para este sitio. Ve a la administración de la red para activar más temas." + +#: wp-admin/user-edit.php:342 +msgid "Super admin privileges cannot be removed because this user has the network admin email." +msgstr "Los privilegios del Super admin no se pueden eliminar porque este usuario tiene el correo electrónico de administrador de la red." + +#: wp-admin/includes/class-wp-themes-list-table.php:79 +msgid "You only have one theme installed right now. Live a little! You can choose from over 1,000 free themes in the WordPress.org Theme Directory at any time: just click on the Install Themes tab above." +msgstr "Tienes sólo un tema instalado. ¡Disfruta de la vida! Puedes elegir entre más de 1.000 temas gratuitos en el directorio de temas de WordPress.org cuando quieras: sólo tienes que hacer clic en la pestaña Instalar tema de arriba." + +#: wp-admin/maint/repair.php:111 +msgid "One or more database tables are unavailable. To allow WordPress to attempt to repair these tables, press the “Repair Database” button. Repairing can take a while, so please be patient." +msgstr "Una o más tablas no están disponibles. Para permitir a WordPress que intente repararlas, pulse el botón “Reparar bases de datos”. La reparación puede llevar un rato, ten paciencia, por favor." + +#: wp-admin/includes/file.php:16 +msgid "Visual Editor RTL Stylesheet" +msgstr "Editor visual de estilos RTL" + +#: wp-admin/theme-editor.php:172 +msgid "This child theme inherits templates from a parent theme, %s." +msgstr "Este tema hijo hereda plantillas de un tema padre, %s." + +#: wp-admin/theme-editor.php:218 +msgid "This is a file in your current parent theme." +msgstr "Este es un archivo del tema padre actual." + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:233 +#: wp-admin/includes/class-wp-ms-themes-list-table.php:276 +#: wp-admin/includes/class-wp-upgrader-skins.php:446 +msgid "Network Enable" +msgstr "Activar para la red" + +#: wp-admin/includes/ajax-actions.php:642 +#: wp-admin/includes/ajax-actions.php:1590 +msgid "An error has occurred. Please reload the page and try again." +msgstr "Ha ocurrido un error. Por favor, recarga la página e inténtalo de nuevo." + +#: wp-admin/upgrade.php:99 +msgid "Your WordPress database has been successfully updated!" +msgstr "¡La base de datos de WordPress se ha actualizado con éxito!" + +#: wp-admin/upgrade.php:88 +msgid "Update WordPress Database" +msgstr "Actualizar la base de datos de WordPress" + +#: wp-admin/update-core.php:100 +msgid "You are about to install WordPress %s in English (US). There is a chance this update will break your translation. You may prefer to wait for the localized version to be released." +msgstr "Se va a instalar WordPress %s en inglés (US). Existe la posibilidad de que esta actualización rompa tu traducción. Puede que prefieras esperar a que salga la versión local." + +#: wp-admin/upgrade.php:87 +msgid "The update process may take a little while, so please be patient." +msgstr "La actualización puede tardar un poco, así que sé paciente, por favor." + +#: wp-admin/upgrade.php:55 +msgid "WordPress › Update" +msgstr "Actualización de WordPress" + +#: wp-admin/upgrade.php:98 +msgid "Update Complete" +msgstr "Actualización completada" + +#: wp-admin/upgrade.php:85 +msgid "Database Update Required" +msgstr "Es necesaria una actualización de la base de datos" + +#: wp-admin/upgrade.php:86 +msgid "WordPress has been updated! Before we send you on your way, we have to update your database to the newest version." +msgstr "¡WordPress se ha actualizado! Antes de continuar, tenemos que actualizar tu base de datos a la última versión." + +#: wp-admin/upgrade.php:66 +msgid "No Update Required" +msgstr "No es necesaria la actualización" + +#: wp-admin/includes/class-wp-upgrader.php:420 +msgid "Plugin updated successfully." +msgstr "El plugin se ha actualizado con éxito." + +#: wp-admin/includes/class-wp-upgrader-skins.php:473 wp-admin/update.php:157 +msgid "Update Theme" +msgstr "Actualizar tema" + +#: wp-admin/includes/theme.php:152 +msgid "There is a new version of %1$s available. View version %3$s details. Automatic update is unavailable for this theme." +msgstr "Hay una nueva versión de %1$s disponible. Ver detalles de la versión %3$s. La actualización automática no está disponible para este tema." + +#: wp-admin/includes/class-wp-upgrader.php:419 +msgid "Plugin update failed." +msgstr "Actualización de plugin fallida." + +#: wp-admin/includes/class-wp-upgrader.php:727 +msgid "Theme update failed." +msgstr "Actualización del tema fallida." + +#: wp-admin/includes/class-wp-upgrader.php:728 +msgid "Theme updated successfully." +msgstr "Tema actualizado correctamente." + +#: wp-admin/includes/class-wp-upgrader-skins.php:110 wp-admin/update.php:54 +msgid "Update Plugin" +msgstr "Actualizar plugin" + +#: wp-admin/includes/update.php:284 +msgid "There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this plugin." +msgstr "Hay una nueva versión de %1$s disponible. Ver detalles de la versión %4$s. La actualización automática no está disponible para este plugin." + +#: wp-admin/includes/class-wp-upgrader.php:414 +#: wp-admin/includes/class-wp-upgrader.php:722 +#: wp-admin/includes/class-wp-upgrader.php:1133 +#: wp-admin/includes/class-wp-upgrader.php:1306 +msgid "Update package not available." +msgstr "Paquete de actualización no disponible." + +#: wp-admin/export.php:173 wp-admin/export.php:205 +msgid "Date range:" +msgstr "Rango de fechas:" + +#: wp-admin/export.php:157 +msgid "This will contain all of your posts, pages, comments, custom fields, terms, navigation menus and custom posts." +msgstr "Esto contendrá todas tus entradas, páginas, comentarios, campos personalizados, menús de navegación y entradas personalizadas." + +#: wp-admin/export.php:153 +msgid "Choose what to export" +msgstr "Elige qué exportar" + +#: wp-admin/export.php:166 wp-admin/export.php:198 +msgid "Authors:" +msgstr "Autores:" + +#: wp-admin/export.php:156 +msgid "All content" +msgstr "Todo el contenido" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:195 +msgctxt "themes" +msgid "All (%s)" +msgid_plural "All (%s)" +msgstr[0] "(%s)" +msgstr[1] "Todos (%s)" + +#: wp-admin/includes/file.php:288 wp-admin/includes/file.php:415 +msgid "Sorry, this file type is not permitted for security reasons." +msgstr "Perdona, por razones de seguridad, este tipo de archivos no está permitido." + +#: wp-admin/admin-header.php:32 wp-admin/customize.php:76 +msgid "%1$s — WordPress" +msgstr "%1$s — WordPress" + +#: wp-admin/user-edit.php:270 +msgid "More information" +msgstr "Más información" + +#: wp-admin/includes/class-wp-comments-list-table.php:299 +msgctxt "column name" +msgid "In Response To" +msgstr "En respuesta a" + +#: wp-admin/includes/class-wp-comments-list-table.php:395 +msgid "Submitted on %2$s at %3$s" +msgstr "Enviado el %2$s a las %3$s" + +#: wp-admin/edit-comments.php:134 +msgid "Documentation on Comment Spam" +msgstr "Documentación sobre los comentarios de spam" + +#: wp-admin/edit-comments.php:135 +msgid "Documentation on Keyboard Shortcuts" +msgstr "Documentación sobre atajos de teclado" + +#: wp-admin/widgets.php:52 +msgid "The Available Widgets section contains all the widgets you can choose from. Once you drag a widget into a sidebar, it will open to allow you to configure its settings. When you are happy with the widget settings, click the Save button and the widget will go live on your site. If you click Delete, it will remove the widget." +msgstr "La sección de widgets disponibles contiene todos los widgets que puedes elegir. Cuando arrastres el widget a la barra lateral, se abrirá para que puedas configurar sus opciones. Cuando las tengas a tu gusto, haz clic en botón de guardar y el widget se pondrá a funcionar en tu sitio. Si pulsas borrar, se quitará el widget." + +#: wp-admin/edit-form-advanced.php:297 wp-admin/media.php:78 +msgid "Remember to click Update Media to save metadata entered or changed." +msgstr "Recuerda hacer clic en Actualizar archivos multimedia para guardar los metadatos que hayas introducido o cambiado." + +#: wp-admin/edit-form-advanced.php:296 wp-admin/media.php:77 +msgid "Note that you crop the image by clicking on it (the Crop icon is already selected) and dragging the cropping frame to select the desired part. Then click Save to retain the cropping." +msgstr "Se recorta la imagen haciendo clic en la misma (el icono de recorte ya estará seleccionado) y arrastrando el marcho de recorte hasta donde se desee. Para fijarla, haz clic en guardar." + +#: wp-admin/edit-form-advanced.php:295 wp-admin/media.php:76 +msgid "For images only, you can click on Edit Image under the thumbnail to expand out an inline image editor with icons for cropping, rotating, or flipping the image as well as for undoing and redoing. The boxes on the right give you more options for scaling the image, for cropping it, and for cropping the thumbnail in a different way than you crop the original image. You can click on Help in those boxes to get more information." +msgstr "(Sólo para imágenes) Puedes hacer clic en editar imágenes, debajo de la miniatura, para obtener el menú de edición de imágenes y recortar, rotar o invertir la imagen, así como deshacer y rehacer. Las cajas de la derecha te dan más opciones para escalar y recortar la imagen; y para recortar la miniatura de forma diferente de la imagen original. Puedes hacer clic en la ayuda en esas cajas para obtener más información." + +#: wp-admin/media.php:75 +msgid "This screen allows you to edit five fields for metadata in a file within the media library." +msgstr "Esta pantalla te permite editar cinco campos para metadatos de un archivo en la biblioteca multimedia." + +#: wp-admin/user-new.php:279 +msgid "E-mail or Username" +msgstr "Correo electrónico o nombre usuario" + +#: wp-admin/admin-header.php:34 +msgid "%1$s ‹ %2$s — WordPress" +msgstr "%1$s ‹ %2$s — WordPress" + +#: wp-admin/user-new.php:308 wp-admin/user-new.php:421 +msgid "Add the user without sending them a confirmation email." +msgstr "Añadir el usuario sin enviarle un email de confirmación." + +#: wp-admin/themes.php:109 +msgid "Search Installed Themes" +msgstr "Buscar temas instalados" + +#: wp-admin/includes/class-wp-upgrader-skins.php:446 +msgid "Enable this theme for all sites in this network" +msgstr "Activar este plugin para todos los sitios en esta red" + +#: wp-admin/update-core.php:297 +msgid "Please Note: Any customizations you have made to theme files will be lost. Please consider using child themes for modifications." +msgstr "Atención: Se perderá cualquier personalización que hayas hecho a los archivos del tema. Por favor, considere el uso de temas hijos para mantener cambios." + +#: wp-admin/includes/class-wp-posts-list-table.php:172 +msgctxt "posts" +msgid "Sticky (%s)" +msgid_plural "Sticky (%s)" +msgstr[0] "(%s) fija" +msgstr[1] "(%s) fijas" + +#: wp-admin/update-core.php:505 +msgid "Please select one or more plugins to update." +msgstr "Por favor, elige uno o más plugins a actualizar." + +#: wp-admin/update-core.php:503 +msgid "Please select one or more themes to update." +msgstr "Por favor, elige uno o más temas para actualizarlos." + +#: wp-admin/update-core.php:511 +msgid "Last checked on %1$s at %2$s." +msgstr "Última revisión el %1$s a las %2$s." + +#: wp-admin/update-core.php:512 +msgid "Check Again" +msgstr "Comprobar de nuevo" + +#: wp-admin/includes/class-wp-upgrader-skins.php:159 +msgid "The update process is starting. This process may take a while on some hosts, so please be patient." +msgstr "El proceso de actualización ha empezado. Puede llevar un rato en algunos servidores, ten paciencia, por favor." + +#: wp-admin/options-general.php:255 +msgid "Documentation on date and time formatting." +msgstr "Documentación sobre formatos de fecha y hora." + +#: wp-admin/includes/user.php:421 +msgid "You’re using the auto-generated password for your account. Would you like to change it to something easier to remember?" +msgstr "Estás utilizando la contraseña generada automáticamente para tu cuenta. ¿Quieres cambiarla por otra más fácil de recordar?" + +#: wp-admin/includes/theme.php:222 +msgid "RTL Language Support" +msgstr "Soporte del lenguaje RTL" + +#: wp-admin/includes/theme.php:209 +msgid "BuddyPress" +msgstr "BuddyPress" + +#: wp-admin/includes/theme.php:214 +msgid "Editor Style" +msgstr "Estilo del editor" + +#: wp-admin/includes/theme.php:218 +msgid "Front Page Posting" +msgstr "Escritura en la página principal" + +#: wp-admin/includes/theme.php:226 +msgid "Translation Ready" +msgstr "Traducción lista" + +#: wp-admin/comment.php:71 +msgid "You are not allowed to edit this comment." +msgstr "No tienes permiso para editar este comentario." + +#: wp-admin/includes/file.php:1038 +msgid "To perform the requested action, WordPress needs to access your web server." +msgstr "Para realizar la operación que has solicitado WordPress necesita tener acceso a tu servidor web." + +#: wp-admin/includes/class-wp-list-table.php:567 +msgid "Current page" +msgstr "Página actual" + +#: wp-admin/includes/class-wp-list-table.php:558 +msgid "Go to the previous page" +msgstr "Ir a la página anterior" + +#: wp-admin/includes/class-wp-list-table.php:577 +msgid "Go to the next page" +msgstr "Ir a la página siguiente" + +#: wp-admin/includes/class-wp-list-table.php:584 +msgid "Go to the last page" +msgstr "Ir a la última página" + +#: wp-admin/includes/ajax-actions.php:307 +#: wp-admin/includes/class-wp-list-table.php:533 +#: wp-admin/includes/class-wp-list-table.php:948 +msgid "1 item" +msgid_plural "%s items" +msgstr[0] "1 elemento" +msgstr[1] "%s elementos" + +#: wp-admin/includes/class-wp-users-list-table.php:79 +msgid "No matching users were found." +msgstr "No se han encontrado usuarios que se ajusten a lo que buscas." + +#: wp-admin/includes/class-wp-theme-install-list-table.php:116 +msgid "No themes match your request." +msgstr "Ningún tema se ajusta a lo que buscas." + +#: wp-admin/includes/class-wp-list-table.php:551 +msgid "Go to the first page" +msgstr "Ir a la primera página" + +#: wp-admin/includes/dashboard.php:312 +msgid "Search Sites" +msgstr "Buscar sitios" + +#: wp-admin/includes/dashboard.php:278 +msgid "Create a New User" +msgstr "Crear un nuevo usuario" + +#: wp-admin/includes/dashboard.php:286 +msgid "You have %1$s and %2$s." +msgstr "Tienes %1$s y %2$s." + +#: wp-admin/includes/dashboard.php:284 +msgid "%s site" +msgid_plural "%s sites" +msgstr[0] "%s sitio" +msgstr[1] "%s sitios" + +#: wp-admin/includes/dashboard.php:283 +msgid "%s user" +msgid_plural "%s users" +msgstr[0] "%s usuario" +msgstr[1] "%s usuarios" + +#: wp-admin/update-core.php:165 +msgid "Important: before updating, please back up your database and files. For help with updates, visit the Updating WordPress Codex page." +msgstr "Importante: antes de la actualización, por favor, realiza un respaldo de la base de datos y ficheros. Si necesitas ayuda para la actualización, visita la página del Codex: Actualización de WordPress." + +#: wp-admin/includes/dashboard.php:830 +msgid "http://wordpress.org/news/" +msgstr "http://wordpress.org/news/" + +#: wp-admin/includes/dashboard.php:831 +msgid "http://wordpress.org/news/feed/" +msgstr "http://wordpress.org/news/feed/" + +#: wp-admin/options-discussion.php:66 +msgid "(Signup has been disabled. Only members of this site can comment.)" +msgstr "(El registro ha sido deshabilitado. Sólo los miembros de este sitio pueden comentar.)" + +#: wp-admin/update-core.php:66 +msgid "You can update to WordPress %2$s automatically or download the package and install it manually:" +msgstr "Puedes actualizar a WordPress %2$s automáticamente o descargar el paquete e instalarlo manualmente:" + +#: wp-admin/user-new.php:158 +msgid "New users will receive an email letting them know they’ve been added as a user for your site. By default, this email will also contain their password. Uncheck the box if you don’t want the password to be included in the welcome email." +msgstr "Los usuarios nuevos recibirán un correo electrónico haciéndoles saber que han sido añadidos como usuarios de tu sitio. De forma predeterminada, este correo electrónico también contendrá su contraseña. Desmarca la casilla si no quieres que la contraseña se incluya en el correo electrónico de bienvenida." + +#: wp-admin/includes/theme.php:150 +msgid "There is a new version of %1$s available. View version %3$s details." +msgstr "Hay una nueva versión de %1$s disponible. Ver detalles de la versión %3$s." + +#: wp-admin/includes/update.php:282 wp-admin/includes/update.php:374 +msgid "There is a new version of %1$s available. View version %4$s details." +msgstr "Hay una nueva versión de %1$s disponible. Ver detalles de la versión %4$s. " + +#: wp-admin/includes/class-wp-upgrader-skins.php:314 +msgid "Go to themes page" +msgstr "Ir a la página de temas" + +#: wp-admin/includes/class-wp-upgrader-skins.php:129 +#: wp-admin/includes/class-wp-upgrader-skins.php:279 +msgid "Go to plugins page" +msgstr "Ir a la página de plugins" + +#: wp-admin/includes/class-wp-upgrader-skins.php:280 +#: wp-admin/includes/class-wp-upgrader-skins.php:315 +#: wp-admin/includes/class-wp-upgrader-skins.php:565 +msgid "Go to WordPress Updates page" +msgstr "Ir a la página de actualizaciones de WordPress" + +#: wp-admin/includes/nav-menu.php:89 +msgid "%s (Pending)" +msgstr "%s (Pendiente)" + +#: wp-admin/includes/nav-menu.php:1199 +msgid "Click Save Menu to make pending menu items public." +msgstr "Haz click en Guardar menú para hacer públicos los elementos de menú pendientes." + +#: wp-admin/includes/dashboard.php:990 +msgid "Storage Space" +msgstr "Espacio de almacenamiento" + +#: wp-admin/includes/dashboard.php:276 wp-admin/includes/ms.php:678 +msgid "Create a New Site" +msgstr "Crear nuevo sitio" + +#: wp-admin/plugins.php:335 +msgctxt "plugins per page (screen options)" +msgid "Plugins" +msgstr "Plugins" + +#: wp-admin/upload.php:148 +msgctxt "items per page (screen options)" +msgid "Media items" +msgstr "Elementos multimedia" + +#: wp-admin/edit-comments.php:112 +msgctxt "comments per page (screen options)" +msgid "Comments" +msgstr "Comentarios" + +#: wp-admin/custom-header.php:502 +msgid "Images of exactly %1$d × %2$d pixels will be used as-is." +msgstr "Las imágenes de exactamente %1$d x %2$d pixels se utilizarán tal cual." + +#: wp-admin/theme-install.php:71 +msgid "Documentation on Adding New Themes" +msgstr "Documentación sobre Añadir nuevos temas" + +#: wp-admin/custom-header.php:748 +msgid "Crop and Publish" +msgstr "Recortar y publicar" + +#: wp-admin/plugins.php:342 +msgid "You can find additional plugins for your site by using the Plugin Browser/Installer functionality or by browsing the WordPress Plugin Directory directly and installing new plugins manually. To manually install a plugin you generally just need to upload the plugin file into your /wp-content/plugins directory. Once a plugin has been installed, you can activate it here." +msgstr "Puedes encontrar plugins adicionales para tu sitio usando la funcionalidad Instalador/navegador de plugins o navegando por el directorio de plugins de WordPress directamente e instalando manualmente nuevos plugins. Para instalar manualmente un plugin normalmente necesitarás subir el fichero del plugin a tu directorio /wp-content/plugins. Una vez se haya instalado el plugin puedes activarlo aquí." + +#: wp-admin/edit-link-form.php:60 +msgid "XFN stands for XHTML Friends Network, which is optional. WordPress allows the generation of XFN attributes to show how you are related to the authors/owners of the site to which you are linking." +msgstr "XFN se refiere a red de amigos XHTML (XHTML Friends Network), y es opcional. WordPress permite generar atributos XFN que muestran tu relación con los autores/propietarios del sitio al que estés enlazando." + +#: wp-admin/plugins.php:354 +msgid "Documentation on Managing Plugins" +msgstr "Documentación sobre cómo gestionar plugins" + +#: wp-admin/theme-editor.php:42 +msgid "Documentation on Template Tags" +msgstr "Documentación sobre etiquetas de plantilla" + +#: wp-admin/theme-editor.php:41 +msgid "Documentation on Editing Files" +msgstr "Documentación sobre cómo editar archivos" + +#: wp-admin/theme-editor.php:40 wp-admin/themes.php:85 +msgid "Documentation on Using Themes" +msgstr "Documentación sobre el uso de temas" + +#: wp-admin/theme-editor.php:39 +msgid "Documentation on Theme Development" +msgstr "Documentación sobre el desarrollo de temas" + +#: wp-admin/includes/file.php:1048 +msgid "FTP Password" +msgstr "Contraseña FTP" + +#: wp-admin/includes/file.php:1047 +msgid "FTP Username" +msgstr "Usuario FTP" + +#: wp-admin/includes/file.php:1044 +msgid "FTP/SSH Password" +msgstr "Contraseña FTP/SSH" + +#: wp-admin/includes/file.php:1043 +msgid "FTP/SSH Username" +msgstr "Usuario FTP/SSH" + +#: wp-admin/options-reading.php:57 +msgid "You can choose what’s displayed on the front page of your site. It can be posts in reverse chronological order (classic blog), or a fixed/static page. To set a static home page, you first need to create two Pages. One will become the front page, and the other will be where your posts are displayed." +msgstr "Puedes elegir lo que se muestra en la página principal de tu sitio. Pueden ser entradas en orden cronológico inverso (blog clásico) o una página fija/estática. Para definir una página de inicio estática primero tienes que crear dos páginas. Una será la página principal y la otra donde se mostrarán tus entradas." + +#: wp-admin/options-permalink.php:38 +msgid "The Optional fields let you customize the “category” and “tag” base names that will appear in archive URLs. For example, the page listing all posts in the “Uncategorized” category could be /topics/uncategorized instead of /category/uncategorized." +msgstr "Los campos opcionales te permiten personalizar los nombres base de “categoría” y “etiqueta” que aparecerán en las URLs del archivo. Por ejemplo, la página con el listado de todas las entradas de la categoría “Sin categoría” podrían ser como /temas/sin-categoria en vez de /category/sin-categoria." + +#: wp-admin/themes.php:243 +msgid "The following themes are installed but incomplete. Themes must have a stylesheet and a template." +msgstr "Los siguientes temas están instalados pero incompletos. Los temas deben tener una hoja de estilos y una plantilla." + +#: wp-admin/options-permalink.php:31 +msgid "When you assign multiple categories or tags to a post, only one can show up in the permalink: the lowest numbered category. This applies if your custom structure includes %category% or %tag%." +msgstr "Cuando asignas varias categorías o etiquetas a una entrada sólo se puede mostrar una en el enlace permanente: la categoría con el número más bajo. Esto es así si tu estructura personalizada contiene %category% o %tag%." + +#: wp-admin/options-permalink.php:30 +msgid "If you pick an option other than Default, your general URL path with structure tags, terms surrounded by %, will also appear in the custom structure field and your path can be further modified there." +msgstr "Si eliges una opción distinta de la que está por defecto tu ruta general de URL con etiquetas de estructura, los términos rodeados por %, también aparecerán en el campo de estructura personalizada y podrás cambiar aquí tu ruta en otro momento." + +#: wp-admin/widgets.php:66 +msgid "Many themes show some sidebar widgets by default until you edit your sidebars, but they are not automatically displayed in your sidebar management tool. After you make your first widget change, you can re-add the default widgets by adding them from the Available Widgets area." +msgstr "Muchos temas muestran varios widgets de barra lateral por defecto hasta que editas tus barras laterales, pero no se muestran automáticamente en tu herramienta de gestión de barras laterales. Una vez hagas tu primer cambio en un widget puedes volver a añadirlo desde el área de widgets disponibles." + +#: wp-admin/widgets.php:58 +msgid "If you want to remove the widget but save its setting for possible future use, just drag it into the Inactive Widgets area. You can add them back anytime from there. This is especially helpful when you switch to a theme with fewer or different widget areas." +msgstr "Si quieres quitar el widget, pero también guardar los ajustes por si los necesitaras en el futuro, simplemente arrástralo al área de widgets inactivos. Puedes añadirlos de nuevo en cualquier otro momento desde ahí. Esto es especialmente útil cuando cambias a un tema con pocas o distintas áreas de widgets." + +#: wp-admin/users.php:27 +msgid "To add a new user for your site, click the Add New button at the top of the screen or Add New in the Users menu section." +msgstr "Para añadir un usuario nuevo a tu sitio haz clic en el botón Añadir nuevo en la parte superior de la pantalla o en la sección Añadir nuevo del menú Usuarios." + +#: wp-admin/options-media.php:18 +msgid "You can set maximum sizes for images inserted into your written content; you can also insert an image as Full Size." +msgstr "Puedes establecer los tamaños máximos para las imágenes insertadas en tu contenido; también puedes insertar una imagen a tamaño completo." + +#: wp-admin/options-general.php:61 +msgid "Most themes display the site title at the top of every page, in the title bar of the browser, and as the identifying name for syndicated feeds. The tagline is also displayed by many themes." +msgstr "La mayoría de los temas muestran el título del sitio en la parte superior de cada página, en la barra de título del navegador, y como nombre identificativo para los feeds. La descripción corta también se muestra en muchos temas." + +#: wp-admin/edit-form-advanced.php:349 +msgid "Order - Pages are usually ordered alphabetically, but you can choose your own order by entering a number (1 for first, etc.) in this field." +msgstr "Orden - Normalmente las páginas se ordenan alfabéticamente, pero puedes elegir tu propio orden introduciendo un número (1 para la primera, etc) en este campo." + +#: wp-admin/includes/file.php:1042 +msgid "Please enter your FTP or SSH credentials to proceed." +msgstr "Por favor, introduce tus datos de acceso FTP o SSH para proceder." + +#: wp-admin/includes/file.php:1046 +msgid "Please enter your FTP credentials to proceed." +msgstr "Por favor, introduce tus datos de acceso FTP para proceder." + +#: wp-admin/includes/file.php:1052 +msgid "If you do not remember your credentials, you should contact your web host." +msgstr "Si no recuerdas tus datos de acceso deberías contactar con tu proveedor de alojamiento." + +#: wp-admin/theme-install.php:51 +msgid "You can Upload a theme manually if you have already downloaded its ZIP archive onto your computer (make sure it is from a trusted and original source). You can also do it the old-fashioned way and copy a downloaded theme’s folder via FTP into your /wp-content/themes directory." +msgstr "Pudes subir manualmente un tema si ya has descargado su archivo ZIP en tu ordenador (asegúrate de que sea de una fuente fiable y original). También puedes hacerlo al viejo estilo y copiar un tema descargado a través de FTP en tu directorio /wp-content/themes." + +#: wp-admin/user-edit.php:39 +msgid "Your profile contains information about you (your “account”) as well as some personal options related to using WordPress." +msgstr "Tu perfil contiene infomación sobre ti (tu “cuenta”) así como algunas opciones personales relacionadas con el uso de WordPress." + +#: wp-admin/edit-form-advanced.php:274 +msgid "Pages are similar to Posts in that they have a title, body text, and associated metadata, but they are different in that they are not part of the chronological blog stream, kind of like permanent posts. Pages are not categorized or tagged, but can have a hierarchy. You can nest Pages under other Pages by making one the “Parent” of the other, creating a group of Pages." +msgstr "Las páginas son similares a las entradas y tienen título, cuerpo de texto y metadatos asociados, pero son diferentes en que no forman parte de la secuencia cronológica tipo blog, son una especie de entradas permanentes. Las páginas no tienen categorías ni etiquetas, pero pueden tener una jerarquía. Puedes anidar páginas bajo otras páginas haciendo a una “Superior” de otra, creando así un grupo de páginas." + +#: wp-admin/edit-form-advanced.php:338 +msgid "Send Trackbacks - Trackbacks are a way to notify legacy blog systems that you’ve linked to them. Enter the URL(s) you want to send trackbacks. If you link to other WordPress sites they’ll be notified automatically using pingbacks, and this field is unnecessary." +msgstr "Enviar trackbacks - Los trackbacks son un modo de avisar a los sistemas antiguos de blogs que les has enlazado. Introduce la(s) URL(s) a la(s) que quieres enviar trackbacks. Si enlazas a otro sitio creado con WordPress recibirán aviso automáticamente por medio de los pingbacks, y este campo no sería necesario." + +#: wp-admin/user-new.php:177 +msgid "Contributors can write and manage their posts but not publish posts or upload media files." +msgstr "Los Colaboradores pueden escribir y gestionar sus entradas, pero no pueden publicar entradas o subir archivos multimedia." + +#: wp-admin/user-new.php:174 +msgid "Administrators have access to all the administration features." +msgstr "Los Administradores tienen acceso a todas las funciones de administración." + +#: wp-admin/plugin-editor.php:123 +msgid "You can use the editor to make changes to any of your plugins’ individual PHP files. Be aware that if you make changes, plugins updates will overwrite your customizations." +msgstr "Puedes usar el editor para realizar cambios a cualquier archivo php de tus plugins. Cuidado si realizas cambios, la actualización de los plugins producirá que tus modificaciones sean sobrescritas y se pierdan." + +#: wp-admin/link-manager.php:47 +msgid "You can add links here to be displayed on your site, usually using Widgets. By default, links to several sites in the WordPress community are included as examples." +msgstr "Aquí puedes añadir enlaces a mostrar en tu sitio, generalmente usando Widgets. Por defecto, los enlaces son a varios sitios de la comunidad de WordPress. Son incluidos como ejemplo." + +#: wp-admin/link-manager.php:55 +msgid "If you delete a link, it will be removed permanently, as Links do not have a Trash function yet." +msgstr "Si eliminas un enlace, será eliminado de forma permanente. Aún no existe una Papelera para los enlaces." + +#: wp-admin/custom-background.php:93 +msgid "Don’t forget to click on the Save Changes button when you are finished." +msgstr "No olvides hacer clic en el botón Guardar cambios cuando acabes." + +#: wp-admin/custom-background.php:90 +msgid "You can customize the look of your site without touching any of your theme’s code by using a custom background. Your background can be an image or a color." +msgstr "Puedes personalizar la imagen de tu sitio sin tocar nada del código del tema usando un fondo personalizado. Tu fondo puede ser una imagen o un color." + +#: wp-admin/edit-tags.php:218 +msgid "Slug - The “slug” is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens." +msgstr "Slug - La “slug ” es la versión amigable de la URL. Normalmente, son todo minúsculas y contiene sólo letras, números y guiones." + +#: wp-admin/edit-form-advanced.php:268 +msgid "You can also create posts with the Press This bookmarklet." +msgstr "También puedes crear entradas con el marcador Publicar esto." + +#: wp-admin/user-edit.php:41 +msgid "Your username cannot be changed, but you can use other fields to enter your real name or a nickname, and change which name to display on your posts." +msgstr "Tu nombre de usuario no puede cambiarse, pero puedes usar los otros campos para introducir tu nombre real o tu alias y utilizarlo para que se muestre en tus entradas." + +#: wp-admin/user-edit.php:42 +msgid "Required fields are indicated; the rest are optional. Profile information will only be displayed if your theme is set up to do so." +msgstr "Los campos necesarios están marcados. El resto son opcionales. El perfil sólo será mostrado si tu tema está configurado para ello." + +#: wp-admin/user-edit.php:43 +msgid "Remember to click the Update Profile button when you are finished." +msgstr "Recuerda hacer click en el botón actualizar Perfil cuando acabes." + +#: wp-admin/user-new.php:175 +msgid "Editors can publish posts, manage posts as well as manage other people’s posts, etc." +msgstr "Los Editores pueden publicar entradas, gestionar sus entradas y entradas de otras personas, etc." + +#: wp-admin/comment.php:53 +msgid "You can also moderate the comment from this screen using the Status box, where you can also change the timestamp of the comment." +msgstr "También puedes moderar los comentarios desde esta pantalla usando la caja de estado, donde puedes cambiar el día/hora del comentario." + +#: wp-admin/comment.php:52 +msgid "You can edit the information left in a comment if needed. This is often useful when you notice that a commenter has made a typographical error." +msgstr "Si te es necesario puedes editar la información que falta en un comentario. Esto es muy útil si te advierten que un usuario ha cometido un error tipográfico al realizar un comentario." + +#: wp-admin/nav-menus.php:697 +msgid "Enter menu name here" +msgstr "Introduce el nombre del menú aquí." + +#: wp-admin/options-general.php:68 +msgid "UTC means Coordinated Universal Time." +msgstr "UTC quiere decir Hora universal coordinada (Coordinated Universal Time)" + +#: wp-admin/options-general.php:60 +msgid "The fields on this screen determine some of the basics of your site setup." +msgstr "Los campos en esta pantalla determinan algunas configuraciones básicas de tu sitio." + +#: wp-admin/options-reading.php:56 +msgid "This screen contains the settings that affect the display of your content." +msgstr "Esta pantalla contiene los ajustes que afectarán a cómo se muestran tus contenidos." + +#: wp-admin/options-discussion.php:21 wp-admin/options-general.php:69 +#: wp-admin/options-media.php:24 wp-admin/options-permalink.php:23 +#: wp-admin/options-permalink.php:32 wp-admin/options-permalink.php:39 +#: wp-admin/options-reading.php:59 wp-admin/options-writing.php:22 +msgid "You must click the Save Changes button at the bottom of the screen for new settings to take effect." +msgstr "Debes hacer clic en el botón Guardar cambios en la parte inferior de la pantalla para que los nuevos ajustes tengan efecto." + +#: wp-admin/options-general.php:64 +msgid "The WordPress URL and the Site URL can be the same (example.com) or different; for example, having the WordPress core files (example.com/wordpress) in a subdirectory instead of the root directory." +msgstr "La URL de WordPress y la URL del sitio pueden ser las mismas (ejemplo.com) o diferentes; por ejemplo, puedes tener los archivos del core de WordPress en un subdirectorio (ejemplo.com/wordpress) en vez de en el directorio raíz." + +#: wp-admin/edit-link-form.php:59 +msgid "The boxes for link name, web address, and description have fixed positions, while the others may be repositioned using drag and drop. You can also hide boxes you don’t use in the Screen Options tab, or minimize boxes by clicking on the title bar of the box." +msgstr "Las cajas para el nombre del enlace, dirección web y descripción tienen una posición fija. Las otras las puedes mover y colocar mediante arrastrar y soltar. Puedes esconder cajas que no quieras usar en la pestaña Opciones de pantalla o minimizar las cajas haciendo clic en la barra del título de la caja." + +#: wp-admin/update-core.php:190 +msgid "While your site is being updated, it will be in maintenance mode. As soon as your updates are complete, your site will return to normal." +msgstr "Mientras se actualiza tu sitio, éste permanecerá en modo mantenimiento. Tan pronto como finalice la actualización, tu sitio volverá a estar activo." + +#: wp-admin/update-core.php:207 +msgid "Your plugins are all up to date." +msgstr "Tus plugins están actualizados." + +#: wp-admin/update-core.php:147 +msgid "You have the latest version of WordPress." +msgstr "Tienes la última versión de WordPress. No es necesario actualizarla." + +#: wp-admin/update-core.php:288 +msgid "Your themes are all up to date." +msgstr "Tus temas están actualizados." + +#: wp-admin/update-core.php:169 +msgid "An updated version of WordPress is available." +msgstr "Hay disponible una nueva versión actualizada de WordPress." + +#: wp-admin/includes/nav-menu.php:200 +msgid "Original: %s" +msgstr "Original: %s" + +#: wp-admin/plugin-editor.php:149 wp-admin/theme-editor.php:115 +msgid "Function Name…" +msgstr "Nombre de la función…" + +#: wp-admin/import.php:94 +msgid "Activate importer" +msgstr "Activar importador" + +#: wp-admin/edit-link-form.php:58 +msgid "You can add or edit links on this screen by entering information in each of the boxes. Only the link’s web address and name (the text you want to display on your site as the link) are required fields." +msgstr "Puede añadir o editar enlaces desde esta pantalla introduciendo la información en cada caja. Sólo son necesarios el enlace a la web y el nombre (el texto que quieres mostrar en el enlace en tu sitio)." + +#: wp-admin/includes/class-wp-upgrader-skins.php:371 +msgid "Return to Importers" +msgstr "Volver a los importadores" + +#: wp-admin/includes/class-wp-upgrader-skins.php:361 +msgid "Activate Plugin & Run Importer" +msgstr "Activar plugin y Comenzar Importación" + +#: wp-admin/edit-tags.php:342 +msgid "Categories can be selectively converted to tags using the category to tag converter." +msgstr "Las categorías se pueden convertir a voluntad en etiquetas usando el conversor de categorías a etiquetas." + +#: wp-admin/includes/nav-menu.php:314 +msgctxt "nav menu front page title" +msgid "Home: %s" +msgstr "Inicio: %s" + +#: wp-admin/import.php:57 wp-admin/users.php:224 +msgid "ERROR:" +msgstr "ERROR:" + +#: wp-admin/import.php:57 +msgid "The %s importer is invalid or is not installed." +msgstr "El importador %s no es válido o no está instalado." + +#: wp-admin/edit-form-advanced.php:164 wp-admin/edit-form-advanced.php:353 +msgid "Page Attributes" +msgstr "Atributos de página" + +#: wp-admin/includes/meta-boxes.php:671 +msgid "Need help? Use the Help tab in the upper right of your screen." +msgstr "¿Necesitas ayuda? Usa la pestaña Ayuda en la parte superior derecha de la pantalla." + +#: wp-admin/import.php:22 +msgid "This screen lists links to plugins to import data from blogging/content management platforms. Choose the platform you want to import from, and click Install Now when you are prompted in the popup window. If your platform is not listed, click the link to search the plugin directory for other importer plugins to see if there is one for your platform." +msgstr "Esta pantalla lista los enlaces a los plugins de importación de datos de blogs/contenido de diferentes plataformas. Elige la plataforma desde la que quieres importar datos y haz clic en Instalar ahora cuando seas preguntado en la ventana emergente. Si tu plataforma no está en la lista, haz clic en el enlace de buscar en el directorio de plugins para ver si hay uno para tu plataforma." + +#: wp-admin/export.php:50 +msgid "Once generated, your WXR file can be imported by another WordPress site or by another blogging platform able to access this format." +msgstr "Una vez generado, tu archivo WXR puede ser importado por otro sitio WordPress o por otra plataforma de blogs que pueda acceder a este formato." + +#: wp-admin/link-manager.php:49 +msgid "You can customize the display of this screen using the Screen Options tab and/or the dropdown filters above the links table." +msgstr "Puedes personalizar cómo se muestra esta pantalla usando la pestaña Opciones de pantalla y/o el menú desplegable de filtros encima de la tabla de enlaces." + +#: wp-admin/plugin-editor.php:124 +msgid "Choose a plugin to edit from the menu in the upper right and click the Select button. Click once on any file name to load it in the editor, and make your changes. Don’t forget to save your changes (Update File) when you’re finished." +msgstr "Elige un plugin a editar en el menú superior derecha y haz clic en el botón Seleccionar. Haz clic una vez sobre cualquier nombre de archivo para cargarlo en el editor. No olvides guardar tus cambios (Actualizar archivo) cuando acabes." + +#: wp-admin/plugins.php:348 +msgid "Most of the time, plugins play nicely with the core of WordPress and with other plugins. Sometimes, though, a plugin’s code will get in the way of another plugin, causing compatibility issues. If your site starts doing strange things, this may be the problem. Try deactivating all your plugins and re-activating them in various combinations until you isolate which one(s) caused the issue." +msgstr "La mayoría de las veces los plugins funcionan perfectamente con el núcleo de WordPress y con los otros plugins. Algunas veces, puede haber incompatibilidades entre algunos plugins produciendo problemas. Tu sitio podría comenzar a hacer cosas raras, esto podría ser un problema. Prueba a desactivar tus plugin e ir activándolos uno a uno y comprobando que el problema no reaparezca. Es la forma de detectar el plugin problemático o la combinación de plugins problemáticos." + +#: wp-admin/widgets.php:59 +msgid "Widgets may be used multiple times. You can give each widget a title, to display on your site, but it’s not required." +msgstr "Los widgets pueden usarse varias veces. Puedes proporcionar a cada widget un título para ser mostrado en tu sitio, pero no es necesario." + +#: wp-admin/widgets.php:60 +msgid "Enabling Accessibility Mode, via Screen Options, allows you to use Add and Edit buttons instead of using drag and drop." +msgstr "Activar el modo de accesibilidad, vía Opciones de Pantalla, te permite usar botones de Añadir y Editar en vez de arrastrar y soltar." + +#: wp-admin/theme-editor.php:27 +msgid "You can use the Theme Editor to edit the individual CSS and PHP files which make up your theme." +msgstr "Puedes usar el Editor de temas para editar de forma individual los archivos css y php que crean la apariencia de tu sitio." + +#: wp-admin/theme-editor.php:28 +msgid "Begin by choosing a theme to edit from the dropdown menu and clicking Select. A list then appears of all the template files. Clicking once on any file name causes the file to appear in the large Editor box." +msgstr "Comienza seleccionando qué tema quieres editar en el menú desplegable y haz clic en Elegir. Una lista de todas las plantillas aparecerá. Apretando una vez sobre el nombre de un archivo, éste aparecerá en la gran caja de edición." + +#: wp-admin/widgets.php:51 +msgid "Widgets are independent sections of content that can be placed into any widgetized area provided by your theme (commonly called sidebars). To populate your sidebars/widget areas with individual widgets, drag and drop the title bars into the desired area. By default, only the first widget area is expanded. To populate additional widget areas, click on their title bars to expand them." +msgstr "Los Widgets son secciones independientes de contenido que pueden ser colocados en cualquier parte de tu tema que esté preparado para ello (comúnmente llamados barras laterales/sidebars). Para colocar en tus áreas laterales/widgets con widgets de forma individual, arrastra y suelta la barra del título del widget al área deseada. Por defecto, sólo la primera área está desplegada. Para poner widgets en otras aéreas haz clic en el barra del título para desplegarlas." + +#: wp-admin/theme-install.php:50 +msgid "You can Search for themes by keyword, author, or tag, or can get more specific and search by criteria listed in the feature filter. Alternately, you can browse the themes that are Featured, Newest, or Recently Updated. When you find a theme you like, you can preview it or install it." +msgstr "Puedes buscar temas por palabras clave, autor o etiquetas o puedes ser más específico y buscar por criterios utilizando los filtros. De forma alternativa, puedes ver los temas Destacados, Nuevos o Actualizados Recientemente. Cuando encuentres el tema que te guste, puedes realizar una previsualización o instalarlo." + +#: wp-admin/theme-editor.php:32 +msgid "Advice: think very carefully about your site crashing if you are live-editing the theme currently in use." +msgstr "Advertencia: piensa detenidamente en la posibilidad de que tu sitio produzca errores y sea inaccesible si estás editando el tema en uso y cometes algún error." + +#: wp-admin/theme-editor.php:31 +msgid "After typing in your edits, click Update File." +msgstr "Después de introducir tus modificaciones, haz click en Actualizar archivo." + +#: wp-admin/includes/meta-boxes.php:644 +msgid "(no parent)" +msgstr "(sin superior)" + +#: wp-admin/edit-form-advanced.php:348 +msgid "Template - Some themes have custom templates you can use for certain pages that might have additional features or custom layouts. If so, you’ll see them in this dropdown menu." +msgstr "Plantilla - Algunos temas tienen plantillas personalizadas que pueden usarse para añadir algunas características adicionales o diseños personalizados. Si las hay, las encontrarás en el menú desplegable." + +#: wp-admin/edit-form-advanced.php:347 +msgid "Parent - You can arrange your pages in hierarchies. For example, you could have an “About” page that has “Life Story” and “My Dog” pages under it. There are no limits to how many levels you can nest pages." +msgstr "Superiores - Puedes ordenar tus páginas en jerarquías. Por ejemplo, podrías tener una página “Sobre” que bajo ella las páginas “Historia de mi vida” y “Mi perro”. No hay límites en cuántos niveles puedes anidar páginas." + +#: wp-admin/includes/class-wp-upgrader-skins.php:163 +msgid "All updates have been completed." +msgstr "Todas las actualizaciones han sido completadas." + +#: wp-admin/edit-tags.php:212 +msgid "When adding a new tag on this screen, you’ll fill in the following fields:" +msgstr "Cuando añadas una nueva etiqueta en esta pantalla, rellenarás los siguientes campos:" + +#: wp-admin/edit-tags.php:191 +msgid "You can use categories to define sections of your site and group related posts. The default category is “Uncategorized” until you change it in your writing settings." +msgstr "Puedes usar categorías para definir secciones para las entradas de tu sitio y grupo. La categoría por defecto es “Sin categoría” hasta que la cambies en tus ajustes de escritura." + +#: wp-admin/edit-tags.php:200 +msgid "What’s the difference between categories and tags? Normally, tags are ad-hoc keywords that identify important information in your post (names, subjects, etc) that may or may not recur in other posts, while categories are pre-determined sections. If you think of your site like a book, the categories are like the Table of Contents and the tags are like the terms in the index." +msgstr "¿Cuál es la diferencia entre categorías y etiquetas? Normalmente, las etiquetas son palabras clave que identifican información importante en tus entradas (nombres, asuntos, etc...) que pueden ser recurrentes o no en otras entradas, mientras que las categorías son secciones predeterminadas. Si piensas en tu sitio como en un libro, las categorías sería la tabla de contenidos mientras que las etiquetas serían como los términos en el índice." + +#: wp-admin/edit-tags.php:225 +msgid "You can change the display of this screen using the Screen Options tab to set how many items are displayed per screen and to display/hide columns in the table." +msgstr "Puedes cambiar la forma de visualización de esta pantalla usando la pestaña Opciones de pantalla para marcar cuántos elementos se muestran por pantalla y mostrar/esconder columnas." + +#: wp-admin/edit-tags.php:223 +msgid "Description - The description is not prominent by default; however, some themes may display it." +msgstr "Descripción - La descripción no se muestra por defecto, pero algunos temas la podrían mostrar." + +#: wp-admin/edit-tags.php:215 +msgid "Name - The name is how it appears on your site." +msgstr "Nombre - El nombre es como aparece en tu sitio" + +#: wp-admin/edit-tags.php:210 +msgid "When adding a new category on this screen, you’ll fill in the following fields:" +msgstr "Cuando añades una nueva categoría en esta pantalla, rellenas los siguientes campos." + +#: wp-admin/upload.php:155 +msgid "You can narrow the list by file type/status using the text link filters at the top of the screen. You also can refine the list by date using the dropdown menu above the media table." +msgstr "Puedes reducir el listado por tipo/estado usando los filtros en la parte superior de la pantalla. También puedes refinar la búsqueda por fecha usando el menú desplegable junto a la tabla de multimedia." + +#: wp-admin/custom-header.php:562 +msgid "Default Images" +msgstr "Imágenes por defecto" + +#: wp-admin/custom-header.php:726 +msgid "Crop Header Image" +msgstr "Recortar imagen de cabecera" + +#: wp-admin/custom-header.php:579 +msgid "This will remove the header image. You will not be able to restore any customizations." +msgstr "Esto eliminará la imagen de cabecera. No podrás restaurar ninguna personalización." + +#: wp-admin/custom-header.php:580 +msgid "Remove Header Image" +msgstr "Eliminar imagen de cabecera" + +#: wp-admin/custom-header.php:588 +msgid "Reset Image" +msgstr "Restaurar imagen" + +#: wp-admin/custom-header.php:590 +msgid "This will restore the original header image. You will not be able to restore any customizations." +msgstr "Esto restaurará la imagen de cabecera original. No te será posible restaurar ninguna personalización." + +#: wp-admin/custom-header.php:591 +msgid "Restore Original Header Image" +msgstr "Restaurar imagen de cabecera original" + +#: wp-admin/custom-header.php:614 +msgid "Text Color" +msgstr "Color de texto" + +#: wp-admin/custom-header.php:776 +msgid "Image Upload Error" +msgstr "Error al subir la imagen" + +#: wp-admin/custom-header.php:730 +msgid "You need Javascript to choose a part of the image." +msgstr "Necesitas Javascript para elegir una parte de la imagen." + +#: wp-admin/edit-comments.php:124 +msgid "A yellow row means the comment is waiting for you to moderate it." +msgstr "Una fila amarilla significa que el comentario está esperando a que lo moderes." + +#: wp-admin/includes/class-wp-posts-list-table.php:595 +msgid "Edit this item" +msgstr "Editar este elemento" + +#: wp-admin/includes/class-wp-posts-list-table.php:596 +msgid "Edit this item inline" +msgstr "Editar este elemento en línea" + +#: wp-admin/includes/class-wp-posts-list-table.php:600 +msgid "Restore this item from the Trash" +msgstr "Restaurar este elemento desde la papelera" + +#: wp-admin/includes/class-wp-posts-list-table.php:602 +msgid "Move this item to the Trash" +msgstr "Mover este elemento a la papelera" + +#: wp-admin/includes/class-wp-posts-list-table.php:604 +msgid "Delete this item permanently" +msgstr "Borrar este elemento permanentemente" + +#: wp-admin/includes/meta-boxes.php:526 +msgid "Allow comments." +msgstr "Permitir comentarios." + +#: wp-admin/includes/import.php:151 +msgid "Install the LiveJournal importer to import posts from LiveJournal using their API." +msgstr "Instala el importador de LiveJournal para importar entradas usando su API" + +#: wp-admin/includes/class-wp-upgrader-skins.php:280 +#: wp-admin/includes/class-wp-upgrader-skins.php:315 +#: wp-admin/includes/class-wp-upgrader-skins.php:565 +msgid "Return to WordPress Updates" +msgstr "Volver a las actualizaciones de WordPress" + +#: wp-admin/edit-form-advanced.php:320 +msgid "Publish - You can set the terms of publishing your post in the Publish box. For Status, Visibility, and Publish (immediately), click on the Edit link to reveal more options. Visibility includes options for password-protecting a post or making it stay at the top of your blog indefinitely (sticky). Publish (immediately) allows you to set a future or past date and time, so you can schedule a post to be published in the future or backdate a post." +msgstr "Publicar - Puedes fijar las características de publicación en la caja de publicación. Para el estado, visibilidad y publicar (inmediatamente), haz clic en el enlace \"editar\" para ver más opciones. La visibilidad incluye opciones para proteger una entrada con contraseña o para hacer que se quede en la parte superior de tu sitio indefinidamente (entrada fija). Publicar (inmediatamente) te permite fijar una fecha de publicación pasada o futura, con lo que puedes programar una entrada para publicarse después o atrasar la fecha de una entrada." + +#: wp-admin/edit-form-advanced.php:327 +msgid "Featured Image - This allows you to associate an image with your post without inserting it. This is usually useful only if your theme makes use of the featured image as a post thumbnail on the home page, a custom header, etc." +msgstr "Imagen destacada - Esto te permite asociar una imagen con su entrada sin tener que insertarla, Es útil sólo si tu tema usa la imagen destacada para mostrar una miniatura en la página de inicio, en una cabecera personalizada, etc." + +#: wp-admin/edit-form-advanced.php:258 +msgid "Title - Enter a title for your post. After you enter a title, you’ll see the permalink below, which you can edit." +msgstr "Título - Introduce el título de tu entrada. Después de introducir el título, podrás ver el enlace permanente el cual podrás editar." + +#: wp-admin/edit-form-advanced.php:339 +msgid "Discussion - You can turn comments and pings on or off, and if there are comments on the post, you can see them here and moderate them." +msgstr "Comentarios - Puedes activar o desactivar los comentarios y pings, y si hay comentario en las entradas, puedes verlos aquí y moderarlos." + +#: wp-admin/edit.php:174 +msgid "You can refine the list to show only posts in a specific category or from a specific month by using the dropdown menus above the posts list. Click the Filter button after making your selection. You also can refine the list by clicking on the post author, category or tag in the posts list." +msgstr "Puedes refinar lo que muestra el listado de entradas haciendo que sólo se muestren las de una categoría específica o de un mes determinado usando el menú desplegable que encontrarás sobre el listado de entradas. Realiza un clic sobre el botón Filtro después de realizar tu selección. También puedes refinar el listado haciendo clic sobre el autor de una entrada, categoría o etiqueta del listado de entradas." + +#: wp-admin/edit.php:173 +msgid "You can view posts in a simple title list or with an excerpt. Choose the view you prefer by clicking on the icons at the top of the list on the right." +msgstr "Puedes ver las entradas en un listado que muestre sólo los títulos o un fragmento del contenido. Selecciona la vista que prefieras realizando un clic en los iconos que encontrarás en la parte superior derecha del listado." + +#: wp-admin/edit.php:171 +msgid "You can hide/display columns based on your needs and decide how many posts to list per screen using the Screen Options tab." +msgstr "Puedes esconder/mostrar columnas basándote en tus necesidades y decidir cuántas entradas se mostrarán por pantalla utilizando la pestaña Opciones de pantalla." + +#: wp-admin/edit.php:172 +msgid "You can filter the list of posts by post status using the text links in the upper left to show All, Published, Draft, or Trashed posts. The default view is to show all posts." +msgstr "Puedes filtrar la lista de entradas por estados usando los enlaces que aparecen en la parte superior izquierda para mostrar Todas, Publicado, Borrador o entradas en Papelera. La vista por defecto es mostrar todas las entradas." + +#: wp-admin/users.php:33 +msgid "You can customize the display of this screen in a number of ways:" +msgstr "Puedes personalizar cómo se muestra esta pantalla de diferentes formas:" + +#: wp-admin/edit.php:181 +msgid "Hovering over a row in the posts list will display action links that allow you to manage your post. You can perform the following actions:" +msgstr "Pasando el cursor sobre la línea de la entrada, mostrará los enlaces de las acciones, permitiéndote gestionar la entrada. Puedes realizar las siguientes acciones:" + +#: wp-admin/plugins.php:436 +msgid "Search Installed Plugins" +msgstr "Buscar Plugins Instalados" + +#: wp-admin/nav-menus.php:19 +msgid "Your theme does not support navigation menus or widgets." +msgstr "El tema actual no soporta menús de navegación o widgets." + +#: wp-admin/async-upload.php:86 +msgid "“%s” has failed to upload due to an error" +msgstr "Ha habido un error al subir “%s”" + +#: wp-admin/includes/import.php:144 wp-admin/tools.php:21 wp-admin/tools.php:59 +msgid "Categories and Tags Converter" +msgstr "Conversor de etiquetas y categorías" + +#: wp-admin/includes/import.php:145 +msgid "Install the category/tag converter to convert existing categories to tags or tags to categories, selectively." +msgstr "Instala el conversor de categorías existentes en etiquetas o las etiquetas en categorías, de forma selectiva." + +#: wp-admin/user-edit.php:409 +msgid "There is a pending change of your e-mail to %1$s. Cancel" +msgstr "Hay un cambio pendiente en tu correo electrónico a %1$s. Cancelar" + +#: wp-admin/includes/nav-menu.php:707 +msgid "Most Recent" +msgstr "Más reciente" + +#: wp-admin/export.php:179 wp-admin/export.php:211 +msgid "End Date" +msgstr "Fecha de finalización" + +#: wp-admin/export.php:175 wp-admin/export.php:207 +msgid "Start Date" +msgstr "Fecha de inicio" + +#: wp-admin/includes/import.php:181 +msgid "Install the WordPress importer to import posts, pages, comments, custom fields, categories, and tags from a WordPress export file." +msgstr "Instala el importador de WordPress para importar entradas, páginas, comentarios, campos personalizados, categorías y etiquetas de un archivo de exportación de WordPress." + +#: wp-admin/includes/import.php:169 +msgid "Install the RSS importer to import posts from an RSS feed." +msgstr "Instala el importador RSS para Importar entradas de una fuente RSS." + +#: wp-admin/includes/import.php:163 +msgid "Install the blogroll importer to import links in OPML format." +msgstr "Instala el importador de sitios de interés para importar enlaces en formato OPML." + +#: wp-admin/includes/import.php:157 +msgid "Install the Movable Type importer to import posts and comments from a Movable Type or TypePad blog." +msgstr "Instala el importador de Movable Type para importar entradas y comentarios de un blog de Movable Type o TypePad." + +#: wp-admin/includes/import.php:139 +msgid "Install the Blogger importer to import posts, comments, and users from a Blogger blog." +msgstr "Instala el importador de Blogger para importar entradas, comentarios y usuarios de un blog de Blogger." + +#: wp-admin/import.php:101 +msgid "Install importer" +msgstr "Instalar importador" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:131 +msgctxt "site" +msgid "Mark as Spam" +msgstr "Marcar como spam" + +#: wp-admin/theme-editor.php:180 +msgctxt "Theme stylesheets in theme editor" +msgid "Styles" +msgstr "Estilos" + +#: wp-admin/includes/plugin-install.php:173 +msgctxt "Plugin Installer" +msgid "Tag" +msgstr "Etiqueta" + +#: wp-admin/includes/theme-install.php:67 +msgctxt "Theme Installer" +msgid "Tag" +msgstr "Etiqueta" + +#: wp-admin/includes/media.php:1870 +msgctxt "verb" +msgid "Clear" +msgstr "Limpiar" + +#: wp-admin/edit-tag-form.php:62 wp-admin/edit-tags.php:504 +msgctxt "Taxonomy Description" +msgid "Description" +msgstr "Descripción" + +#: wp-admin/edit-tag-form.php:45 wp-admin/edit-tags.php:457 +msgctxt "Taxonomy Slug" +msgid "Slug" +msgstr "Slug" + +#: wp-admin/edit-tag-form.php:39 wp-admin/edit-tags.php:451 +msgctxt "Taxonomy Name" +msgid "Name" +msgstr "Nombre" + +#: wp-admin/edit-tag-form.php:52 wp-admin/edit-tags.php:464 +msgctxt "Taxonomy Parent" +msgid "Parent" +msgstr "Superior" + +#: wp-admin/edit-form-comment.php:90 +msgctxt "adjective" +msgid "Pending" +msgstr "Pendiente" + +#: wp-admin/includes/class-wp-comments-list-table.php:213 +msgctxt "comment" +msgid "Mark as Spam" +msgstr "Marcar como spam" + +#: wp-admin/custom-background.php:227 +msgid "Remove Background Image" +msgstr "Quitar imagen de fondo" + +#: wp-admin/edit-comments.php:108 wp-admin/edit-comments.php:145 +msgid "Comments on “%s”" +msgstr "Comentarios en “%s”" + +#: wp-admin/includes/nav-menu.php:1188 +msgid "The Walker class named %s does not exist." +msgstr "La clase Walker para el nombre %s no existe." + +#: wp-admin/includes/nav-menu.php:1223 +msgid "Show advanced menu properties" +msgstr "Mostrar propiedades avanzadas de menú" + +#: wp-admin/includes/meta-boxes.php:430 wp-admin/press-this.php:543 +msgid "+ %s" +msgstr "+ %s" + +#: wp-admin/update-core.php:273 wp-admin/update-core.php:321 +msgid "You have version %1$s installed. Update to %2$s." +msgstr "Estás usando la versión %1$s. Actualiza a %2$s." + +#: wp-admin/includes/nav-menu.php:313 wp-admin/includes/nav-menu.php:795 +msgctxt "nav menu home label" +msgid "Home" +msgstr "Inicio" + +#: wp-admin/includes/class-wp-ms-themes-list-table.php:233 +#: wp-admin/includes/class-wp-ms-themes-list-table.php:276 +msgid "Enable" +msgstr "Activar" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:248 +msgctxt "%1$s: site name. %2$s: site tagline." +msgid "%1$s – %2$s" +msgstr "%1$s – %2$s" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:152 +msgctxt "site" +msgid "Registered" +msgstr "Registrado" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:132 +#: wp-admin/includes/class-wp-ms-sites-list-table.php:276 +msgctxt "site" +msgid "Not Spam" +msgstr "No es Spam" + +#: wp-admin/includes/class-wp-ms-users-list-table.php:118 +msgctxt "user" +msgid "Registered" +msgstr "Registrado" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:273 +msgctxt "verb; site" +msgid "Archive" +msgstr "Archivar" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:185 +#: wp-admin/includes/class-wp-ms-sites-list-table.php:278 +msgctxt "site" +msgid "Spam" +msgstr "Spam" + +#: wp-admin/includes/class-wp-comments-list-table.php:218 +#: wp-admin/includes/class-wp-comments-list-table.php:448 +msgctxt "comment" +msgid "Not Spam" +msgstr "No es spam" + +#: wp-admin/custom-background.php:242 +msgid "This will restore the original background image. You will not be able to restore any customizations." +msgstr "Esto restaurará la imagen de fondo original. No te será posible restaurar ninguna personalización." + +#: wp-admin/nav-menus.php:700 wp-admin/nav-menus.php:771 +msgid "Create Menu" +msgstr "Crear menú" + +#: wp-admin/includes/upgrade.php:264 +msgid "" +"Your new WordPress site has been successfully set up at:\n" +"\n" +"%1$s\n" +"\n" +"You can log in to the administrator account with the following information:\n" +"\n" +"Username: %2$s\n" +"Password: %3$s\n" +"\n" +"We hope you enjoy your new site. Thanks!\n" +"\n" +"--The WordPress Team\n" +"http://wordpress.org/\n" +msgstr "" +"Se ha configurado correctamente tu nuevo sitio de WordPress en:\n" +"\n" +"%1$s\n" +"\n" +"Puedes identificarte como administrador con la siguiente información:\n" +"\n" +"Nombre de usuario: %2$s\n" +"Contraseña: %3$s\n" +"\n" +"Esperamos que disfrutes de tu nuevo sitio. ¡Gracias!\n" +"\n" +"--El equipo de WordPress\n" +"http://es.wordpress.org/\n" + +#: wp-admin/includes/dashboard.php:832 +msgid "WordPress Blog" +msgstr "Blog oficial WordPress" + +#: wp-admin/user-edit.php:329 wp-admin/user-edit.php:331 +msgid "— No role for this site —" +msgstr "— No hay perfil para este sitio —" + +#: wp-admin/options-writing.php:124 wp-admin/tools.php:43 +msgid "Use Press This to clip text, images and videos from any web page. Then edit and add more straight from Press This before you save or publish it in a post on your site." +msgstr "Utiliza Publicar esto para copiar texto, imágenes y vídeos de cualquier página Web. Después corrige y añade más directamente desde Publicar esto antes de guardarlo o publicarlo en una entrada del sitio." + +#: wp-admin/users.php:325 +msgid "Remove Users from Site" +msgstr "Eliminar usuarios del sitio" + +#: wp-admin/includes/post.php:560 +msgid "You are not allowed to create posts or drafts on this site." +msgstr "No tienes autorización para crear entradas o borradores en este sitio." + +#: wp-admin/includes/plugin.php:421 +msgid "Custom site deleted message." +msgstr "Mensaje personalizado para sitios eliminados." + +#: wp-admin/includes/plugin.php:423 +msgid "Custom site suspended message." +msgstr "Mensaje personalizado para sitios suspendidos." + +#: wp-admin/includes/plugin.php:422 +msgid "Custom site inactive message." +msgstr "Mensaje personalizado para sitios inactivos." + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:124 +msgid "No sites found." +msgstr "No se encontraron sitios." + +#: wp-admin/includes/meta-boxes.php:485 +msgid "Trackbacks are a way to notify legacy blog systems that you’ve linked to them. If you link other WordPress sites they’ll be notified automatically using pingbacks, no other action necessary." +msgstr "Los trackbacks son un modo de avisar a sistemas antiguos de que les has enlazado. Si enlazas a otros sitios creados con WordPress recibirán un aviso automático gracias a los pingbacks, sin tener que hacer nada." + +#: wp-admin/includes/post.php:558 +msgid "You are not allowed to create pages on this site." +msgstr "No tienes autorización para crear páginas en este sitio." + +#: wp-admin/includes/schema.php:367 +msgid "My Site" +msgstr "Mi sitio" + +#: wp-admin/includes/upgrade.php:279 +msgid "New WordPress Site" +msgstr "Nuevo sitio de WordPress" + +#: wp-admin/update.php:151 wp-admin/update.php:171 +msgid "You do not have sufficient permissions to update themes for this site." +msgstr "No tienes suficientes permisos para actualizar temas en este sitio." + +#: wp-admin/update.php:24 wp-admin/update.php:50 wp-admin/update.php:69 +msgid "You do not have sufficient permissions to update plugins for this site." +msgstr "No tienes suficientes permisos para actualizar plugins en este sitio." + +#: wp-admin/theme-install.php:16 wp-admin/update.php:197 +#: wp-admin/update.php:227 +msgid "You do not have sufficient permissions to install themes on this site." +msgstr "No tienes suficientes permisos para instalar temas en este sitio." + +#: wp-admin/theme-editor.php:18 +msgid "You do not have sufficient permissions to edit templates for this site." +msgstr "No tienes suficientes permisos para editar las plantillas de este sitio." + +#: wp-admin/plugins.php:31 wp-admin/plugins.php:66 wp-admin/plugins.php:131 +msgid "You do not have sufficient permissions to activate plugins for this site." +msgstr "No tienes suficientes permisos para activar plugins en este sitio." + +#: wp-admin/plugin-install.php:18 wp-admin/update.php:93 +#: wp-admin/update.php:124 +msgid "You do not have sufficient permissions to install plugins on this site." +msgstr "No tienes suficientes permisos para instalar plugins en este sitio." + +#: wp-admin/plugins.php:155 wp-admin/plugins.php:175 +msgid "You do not have sufficient permissions to deactivate plugins for this site." +msgstr "No tienes suficientes permisos para desactivar plugins en este sitio." + +#: wp-admin/plugins.php:206 +msgid "You do not have sufficient permissions to delete plugins for this site." +msgstr "No tienes suficientes permisos para eliminar plugins en este sitio." + +#: wp-admin/link-add.php:13 +msgid "You do not have sufficient permissions to add links to this site." +msgstr "No tienes suficientes permisos para añadir enlaces a este sitio." + +#: wp-admin/includes/bookmark.php:314 wp-admin/link-manager.php:12 +#: wp-admin/link-manager.php:67 +msgid "You do not have sufficient permissions to edit the links for this site." +msgstr "No tienes suficientes permisos para editar los enlaces en este sitio." + +#: wp-admin/export.php:13 +msgid "You do not have sufficient permissions to export the content of this site." +msgstr "No tienes suficientes permisos para exportar el contenido de este sitio." + +#: wp-admin/import.php:15 +msgid "You do not have sufficient permissions to import content in this site." +msgstr "No tienes suficientes permisos para importar contenidos en este sitio." + +#: wp-admin/import.php:59 +msgid "If you have posts or comments in another system, WordPress can import those into this site. To get started, choose a system to import from below:" +msgstr "Si tienes entradas o comentarios en otro sistema, WordPress los puede importar a este sitio. Para comenzar, elige el sistema desde el que los importarás:" + +#: wp-admin/plugin-editor.php:28 +msgid "There are no plugins installed on this site." +msgstr "No hay plugins instalados en este sitio." + +#: wp-admin/plugin-editor.php:18 +msgid "You do not have sufficient permissions to edit plugins for this site." +msgstr "No tienes suficientes permisos para editar los plugins de este sitio." + +#: wp-admin/includes/nav-menu.php:650 wp-admin/includes/nav-menu.php:892 +msgid "No items." +msgstr "Sin elementos." + +#: wp-admin/nav-menus.php:696 +msgid "Menu Name" +msgstr "Nombre del menú" + +#: wp-admin/includes/nav-menu.php:1226 +msgid "CSS Classes" +msgstr "Clases CSS" + +#: wp-admin/includes/nav-menu.php:150 +msgid "Navigation Label" +msgstr "Etiqueta de navegación" + +#: wp-admin/includes/schema.php:1005 +msgid "To use a subdomain configuration, you must have a wildcard entry in your DNS. This usually means adding a * hostname record pointing at your web server in your DNS configuration tool." +msgstr "Para hacer uso de la configuración en subdominios debes tener una entrada de registro wildcard en tu DNS. Normalmente esto se consigue añadiendo el registro * en tu nombre de servidor, apuntando a tu servidor o dominio en las herramientas de configuración de tu servidor o dominio." + +#: wp-admin/includes/schema.php:1001 +msgid "The installer attempted to contact a random hostname (%1$s) on your domain." +msgstr "El instalador ha tratado de contactar con un servidor aleatorio (%1$s) en tu dominio." + +#: wp-admin/install.php:111 +msgid "Usernames can have only alphanumeric characters, spaces, underscores, hyphens, periods and the @ symbol." +msgstr "Los nombres de usuario sólo pueden tener caracteres alfanuméricos, espacios, guiones bajos, guiones, puntos y el símbolo @." + +#: wp-admin/includes/nav-menu.php:130 +msgid "Move down" +msgstr "Mover abajo" + +#: wp-admin/nav-menus.php:227 +msgid "The menu item has been successfully deleted." +msgstr "La opción del menú se ha eliminado correctamente." + +#: wp-admin/includes/nav-menu.php:117 +msgid "Move up" +msgstr "Mover arriba" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:126 +#: wp-admin/includes/class-wp-theme-install-list-table.php:104 +#: wp-admin/setup-config.php:176 +msgid "Try again" +msgstr "Inténtalo de nuevo" + +#: wp-admin/includes/ajax-actions.php:1028 +msgid "Please provide a custom field name." +msgstr "Por favor, proporciona un nombre al campo personalizado." + +#: wp-admin/custom-background.php:270 +msgid "Display Options" +msgstr "Opciones de visualización" + +#: wp-admin/users.php:326 +msgid "You have specified these users for removal:" +msgstr "Has especificado estos usuarios para ser eliminados:" + +#: wp-admin/users.php:144 wp-admin/users.php:195 +msgid "User deletion is not allowed from this screen." +msgstr "No está permitido eliminar usuarios desde esta pantalla." + +#: wp-admin/users.php:170 +msgid "You can’t delete that user." +msgstr "No puedes eliminar este usuario." + +#: wp-admin/users.php:345 +msgid "Confirm Removal" +msgstr "Confirmar Eliminación" + +#: wp-admin/users.php:347 +msgid "There are no valid users selected for removal." +msgstr "No hay usuarios válidos seleccionados para su eliminación." + +#: wp-admin/users.php:403 +msgid "You can't remove the current user." +msgstr "No puedes eliminar el usuario actual." + +#: wp-admin/users.php:404 +msgid "Other users have been removed." +msgstr "Otros usuarios han sido eliminados." + +#: wp-admin/includes/class-wp-upgrader-skins.php:162 +msgid "%1$s updated successfully." +msgstr "%1$s actualizado correctamente." + +#: wp-admin/includes/class-wp-upgrader-skins.php:162 +msgid "Show Details" +msgstr "Mostrar detalles" + +#: wp-admin/includes/class-wp-upgrader-skins.php:162 +msgid "Hide Details" +msgstr "Ocultar detalles" + +#: wp-admin/includes/user.php:423 +msgid "Yes, take me to my profile page" +msgstr "Sí, llévame a mi página de perfil" + +#: wp-admin/includes/upgrade.php:72 +msgid "Your chosen password." +msgstr "Tu contraseña elegida." + +#: wp-admin/includes/user.php:424 +msgid "No thanks, do not remind me again" +msgstr "No gracias, no me lo recuerdes de nuevo" + +#: wp-admin/post.php:270 +msgid "You are not allowed to move this item out of the Trash." +msgstr "No te está permitido mover este elemento fuera de la Papelera." + +#: wp-admin/edit.php:120 wp-admin/edit.php:123 wp-admin/post.php:295 +#: wp-admin/post.php:298 wp-admin/upload.php:126 +msgid "Error in deleting." +msgstr "Error al eliminar." + +#: wp-admin/edit.php:104 wp-admin/post.php:273 +msgid "Error in restoring from Trash." +msgstr "Error al restaurar de la papelera." + +#: wp-admin/edit.php:101 +msgid "You are not allowed to restore this item from the Trash." +msgstr "No estás autorizado para restaurar este elemento de la papelera." + +#: wp-admin/edit.php:90 wp-admin/post.php:254 +msgid "Error in moving to Trash." +msgstr "Error moviendo a la papelera." + +#: wp-admin/edit-comments.php:201 +msgid "%s comment restored from the Trash" +msgid_plural "%s comments restored from the Trash" +msgstr[0] "%s comentario restaurado de la papelera" +msgstr[1] "%s comentarios restaurados de la papelera" + +#: wp-admin/edit-comments.php:197 +msgid "%s comment moved to the Trash." +msgid_plural "%s comments moved to the Trash." +msgstr[0] "%s comentario movido a la papelera." +msgstr[1] "%s comentarios movidos a la papelera." + +#: wp-admin/edit.php:82 wp-admin/post.php:246 +msgid "You are not allowed to move this item to the Trash." +msgstr "No te está permitido mover este elemento a la papelera." + +#: wp-admin/update-core.php:296 +msgid "The following themes have new versions available. Check the ones you want to update and then click “Update Themes”." +msgstr "Los siguientes temas tienen versiones nuevas disponibles. Marca aquellas que quieras actualizar y haz clic en “Actualizar Temas”." + +#: wp-admin/user-new.php:217 +msgid "User has been added to your site." +msgstr "El usuario ha sido añadido a tu sitio." + +#: wp-admin/user-new.php:220 +msgid "That user is already a member of this site." +msgstr "Este usuario ya es miembro de este sitio." + +#: wp-admin/user-new.php:214 +msgid "Invitation email sent to user. A confirmation link must be clicked for them to be added to your site." +msgstr "Invitación enviada por correo electrónico al usuario. Debe hacer clic en un enlace de confirmación para que se añada a tu sitio." + +#: wp-admin/update-core.php:219 +msgid "The following plugins have new versions available. Check the ones you want to update and then click “Update Plugins”." +msgstr "Hay nuevas versiones de los siguientes plugins. Marca aquellos que quieras actualizar y haz clic en “Actualizar plugins”." + +#: wp-admin/options.php:170 +msgid "The %1$s setting is unregistered. Unregistered settings are deprecated. See http://codex.wordpress.org/Settings_API" +msgstr "La configuración %1$s no está registrada. Las configuraciones sin registrar son obsoletas. Visita http://codex.wordpress.org/Settings_API" + +#: wp-admin/custom-background.php:228 +msgid "This will remove the background image. You will not be able to restore any customizations." +msgstr "Esto eliminará la imagen de fondo. No podrás restaurar ninguna personalización." + +#: wp-admin/edit-tag-form.php:14 +msgid "You did not select an item for editing." +msgstr "No has elegido un elemento para editar." + +#: wp-admin/includes/class-wp-themes-list-table.php:85 +msgid "Only the current theme is available to you. Contact the %s administrator for information about accessing additional themes." +msgstr "Para ti sólo está disponible el tema actual. Contacta con el administrador de %s para obtener información sobre cómo acceder a temas adicionales." + +#: wp-admin/includes/file.php:24 +msgid "Author Template" +msgstr "Plantilla de autor" + +#: wp-admin/includes/file.php:15 +msgid "Visual Editor Stylesheet" +msgstr "Hoja de estilos del editor visual" + +#: wp-admin/includes/file.php:25 +msgid "Tag Template" +msgstr "Plantilla de etiqueta" + +#: wp-admin/edit-form-advanced.php:63 +msgid "Page saved." +msgstr "Página guardada." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:252 +msgid "This plugin is already installed and is up to date" +msgstr "Este plugin ya está instalado y actualizado" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:236 +msgid "More information about %s" +msgstr "Más información sobre %s" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:248 +#: wp-admin/update-core.php:39 +msgid "Update Now" +msgstr "Actualizar ahora" + +#: wp-admin/user-edit.php:340 +msgid "Grant this user super admin privileges for the Network." +msgstr "Dar permisos de super admin en la red a este usuario." + +#: wp-admin/user-edit.php:194 +msgid "Important:" +msgstr "Importante:" + +#: wp-admin/user-edit.php:194 +msgid "This user has super admin privileges." +msgstr "Este usuario tiene privilegios de super admin." + +#: wp-admin/includes/post.php:1161 +msgid "Remove featured image" +msgstr "Quitar la imagen destacada" + +#: wp-admin/edit-form-advanced.php:174 +msgid "Featured Image" +msgstr "Imagen destacada" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:248 +#: wp-admin/includes/class-wp-theme-install-list-table.php:217 +#: wp-admin/includes/class-wp-theme-install-list-table.php:331 +msgid "Update to version %s" +msgstr "Actualizar a la versión %s" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:273 +msgid "You are about to archive the site %s." +msgstr "Estás apunto de archivar el sitio %s." + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:276 +msgid "You are about to unspam the site %s." +msgstr "Estás a punto de sacar el sitio %s de spam." + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:278 +msgid "You are about to mark the site %s as spam." +msgstr "Estás a punto de marcar el sitio %s como spam." + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:281 +msgid "You are about to delete the site %s." +msgstr "Estás a punto de eliminar el sitio %s." + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:271 +msgid "You are about to unarchive the site %s." +msgstr "Estás a punto de desarchiva el sitio %s." + +#: wp-admin/press-this.php:537 +msgid "You cannot modify this Taxonomy." +msgstr "No puedes modificar esta taxonomía." + +#: wp-admin/options-reading.php:133 +msgid "items" +msgstr "elementos" + +#: wp-admin/user-edit.php:313 +msgid "Usernames cannot be changed." +msgstr "El nombre de usuario no puede cambiarse." + +#: wp-admin/nav-menus.php:246 +msgid "The menu has been successfully deleted." +msgstr "El menú se ha borrado con éxito." + +#: wp-admin/includes/dashboard.php:243 +msgid "Your site is asking search engines not to index its content" +msgstr "Tu sitio le está pidiendo a los buscadores que no indexen su contenido." + +#: wp-admin/plugins.php:13 +msgid "You do not have sufficient permissions to manage plugins for this site." +msgstr "No tienes suficientes permisos para administrar los plugins de este sitio." + +#: wp-admin/options-general.php:110 +msgid "Enter the address here if you want your site homepage to be different from the directory you installed WordPress." +msgstr "Introduce la dirección de tu página de inicio si es diferente al directorio donde está instalado WordPress." + +#: wp-admin/options-general.php:100 +msgid "In a few words, explain what this site is about." +msgstr "En pocas palabras, explica de qué va este sitio." + +#: wp-admin/options-reading.php:64 wp-admin/options-reading.php:144 +#: wp-admin/options-reading.php:145 +msgid "Site Visibility" +msgstr "Visibilidad del sitio" + +#: wp-admin/includes/template.php:1103 +msgid "The miscellaneous options group has been removed. Use another settings group." +msgstr "Las opciones misceláneas de grupo se han eliminado. Usa otros ajustes de grupo." + +#: wp-admin/includes/nav-menu.php:182 +msgid "The description will be displayed in the menu if the current theme supports it." +msgstr "La descripción se mostrará en los menús si el tema actual lo soporta." + +#: wp-admin/options.php:147 +msgid "You do not have sufficient permissions to modify unregistered settings for this site." +msgstr "No tienes suficientes permisos para modificar ajustes no registrados para este sitio." + +#: wp-admin/options-general.php:139 +msgid "There is a pending change of the admin e-mail to %1$s. Cancel" +msgstr "Hay un cambio pendiente del correo electrónico del administrador a %1$s. Cancelar" + +#: wp-admin/includes/nav-menu.php:156 +msgid "Title Attribute" +msgstr "Atributos del título" + +#: wp-admin/includes/nav-menu.php:1225 +msgid "Link Target" +msgstr "Destino del enlace" + +#: wp-admin/includes/nav-menu.php:168 +msgid "CSS Classes (optional)" +msgstr "Clases CSS (opcional)" + +#: wp-admin/nav-menus.php:700 wp-admin/nav-menus.php:771 +msgid "Save Menu" +msgstr "Guardar menú" + +#: wp-admin/install.php:120 +msgid "A password will be automatically generated for you if you leave this blank." +msgstr "Se generará un password automático si lo dejas en blanco. " + +#: wp-admin/install.php:119 +msgid "Password, twice" +msgstr "Password, dos veces" + +#: wp-admin/includes/class-wp-upgrader-skins.php:300 +msgid "Updating Theme %1$s (%2$d/%3$d)" +msgstr "Actualizando tema %1$s (%2$d/%3$d)" + +#: wp-admin/includes/schema.php:861 +msgid "You must provide a domain name." +msgstr "Debes facilitarnos un nombre de dominio." + +#: wp-admin/includes/schema.php:863 +msgid "You must provide a name for your network of sites." +msgstr "Debes facilitarnos un nombre para tu red de sitios." + +#: wp-admin/includes/schema.php:867 +msgid "The network already exists." +msgstr "La red ya existe." + +#: wp-admin/includes/schema.php:871 +msgid "You must provide a valid e-mail address." +msgstr "Debes facilitarnos una dirección de correo electrónico válida." + +#: wp-admin/includes/schema.php:1003 +msgid "This resulted in an error message: %s" +msgstr "Esto ha dado como resultado un mensaje de error: %s" + +#: wp-admin/includes/schema.php:1006 +msgid "You can still use your site but any subdomain you create may not be accessible. If you know your DNS is correct, ignore this message." +msgstr "Puedes continuar usando tu sitio, pero ningún subdominio que crees será accesible. Si sabes que tu configuración de DNS es correcta, ignora este mensaje." + +#: wp-admin/includes/user.php:420 +msgid "Notice:" +msgstr "Aviso:" + +#: wp-admin/edit-form-advanced.php:448 +msgid "Get Shortlink" +msgstr "Obtener enlace corto" + +#: wp-admin/includes/class-wp-upgrader-skins.php:266 +msgid "Updating Plugin %1$s (%2$d/%3$d)" +msgstr "Actualizando plugin %1$s (%2$d/%3$d)" + +#: wp-admin/includes/class-wp-upgrader-skins.php:161 +msgid "The update of %1$s failed." +msgstr "La actualización de %1$s ha fallado." + +#: wp-admin/includes/upgrade.php:85 +msgid "The password you chose during the install." +msgstr "La contraseña que has elegido durante la instalación." + +#: wp-admin/includes/upgrade.php:75 +msgid "User already exists. Password inherited." +msgstr "El usuario ya existe. No se ha modificado la contraseña." + +#: wp-admin/update-core.php:64 wp-admin/upgrade.php:76 +msgid "You cannot update because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s." +msgstr "La actualización no puede instalarse porque WordPress %1$s requiere la versión %2$s o superior de MySQL. Estás usando la versión %3$s." + +#: wp-admin/includes/class-wp-upgrader.php:1913 +#: wp-admin/includes/update-core.php:1037 wp-admin/update-core.php:417 +msgid "WordPress updated successfully" +msgstr "WordPress ha sido actualizado correctamente" + +#: wp-admin/update-core.php:379 +msgid "Update WordPress" +msgstr "Actualizar WordPress" + +#: wp-admin/plugins.php:113 wp-admin/update-core.php:222 +#: wp-admin/update-core.php:279 wp-admin/update-core.php:572 +#: wp-admin/update-core.php:576 +msgid "Update Plugins" +msgstr "Actualizar plugins" + +#: wp-admin/update-core.php:62 wp-admin/upgrade.php:74 +msgid "You cannot update because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s." +msgstr "La actualización no puede instalarse ya que WordPress %1$s requiere la versión %2$s o superior de PHP. Estás usando la versión %3$s." + +#: wp-admin/update-core.php:60 wp-admin/upgrade.php:72 +msgid "You cannot update because WordPress %1$s requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s." +msgstr "No puedes instalar a causa de que WordPress %1$s requiere la versión %2$s o superior de PHP y la versión %3$s o superior de MySQL. Estás usando la versión %4$s de PHP y la versión %5$s de MySQL." + +#: wp-admin/update-core.php:459 wp-admin/update-core.php:498 +msgid "WordPress Updates" +msgstr "Actualizaciones de WordPress" + +#: wp-admin/includes/nav-menu.php:132 wp-admin/includes/nav-menu.php:134 +msgid "Edit Menu Item" +msgstr "Editar elemento del menú" + +#: wp-admin/options-general.php:134 +msgid "This address is used for admin purposes. If you change this we will send you an e-mail at your new address to confirm it. The new address will not become active until confirmed." +msgstr "Esta dirección de correo electrónico se usa para propósitos administrativos. Si la cambias, te enviaremos un correo electrónico a tu nueva dirección para confirmarla. La nueva dirección no se activará hasta ser confirmada." + +#: wp-admin/options-general.php:210 +msgid "Daylight saving time begins on: %s." +msgstr "El horario de verano comienza el: %s." + +#: wp-admin/plugins.php:274 +msgid "%1$s by %2$s (will also delete its data)" +msgstr "%1$s por %2$s (también elimina sus propios datos)" + +#: wp-admin/plugins.php:267 +msgid "You are about to remove the following plugin:" +msgid_plural "You are about to remove the following plugins:" +msgstr[0] "Estás a punto de eliminar el siguiente plugin:" +msgstr[1] "Estás a punto de eliminar los siguientes plugins:" + +#: wp-admin/plugins.php:262 +msgid "Delete Plugin" +msgid_plural "Delete Plugins" +msgstr[0] "Eliminar Plugin" +msgstr[1] "Eliminar Plugins" + +#: wp-admin/plugins.php:285 +msgid "Are you sure you wish to delete these files and data?" +msgstr "¿Estás seguro de que deseas eliminar estos archivos y datos?" + +#: wp-admin/plugins.php:297 +msgid "Yes, Delete these files and data" +msgstr "Sí, quiero borrar estos archivos y datos" + +#: wp-admin/includes/class-wp-plugins-list-table.php:329 +msgid "Requires %s in wp-config.php." +msgstr "Requiere %s en wp-config.php." + +#: wp-admin/includes/class-wp-plugins-list-table.php:329 +msgid "Inactive:" +msgstr "Inactivo:" + +#: wp-admin/includes/class-wp-plugins-list-table.php:212 +msgid "Must-Use (%s)" +msgid_plural "Must-Use (%s)" +msgstr[0] "Debes Usar (%s)" +msgstr[1] "Debes Usar (%s)" + +#: wp-admin/about.php:143 +msgid "Go to Dashboard" +msgstr "Ir al Escritorio" + +#: wp-admin/nav-menus.php:322 wp-admin/nav-menus.php:332 +msgid "Please enter a valid menu name." +msgstr "Por favor, introduce un nombre de menú válido." + +#: wp-admin/nav-menus.php:767 +msgid "Delete Menu" +msgstr "Eliminar menú" + +#: wp-admin/includes/nav-menu.php:599 +msgid "Menu Item" +msgstr "Elemento del menú" + +#: wp-admin/includes/nav-menu.php:712 wp-admin/includes/nav-menu.php:949 +msgid "View All" +msgstr "Ver todo" + +#: wp-admin/includes/nav-menu.php:605 wp-admin/includes/nav-menu.php:850 +#: wp-admin/includes/nav-menu.php:1038 +msgid "Add to Menu" +msgstr "Añadir al menú" + +#: wp-admin/options-general.php:187 +msgid "This timezone is currently in daylight saving time." +msgstr "Esta zona horaria se encuentra actualmente en el horario de verano." + +#: wp-admin/options-general.php:215 +msgid "This timezone does not observe daylight saving time." +msgstr "Esta zona horaria no tiene en cuenta el horario de verano." + +#: wp-admin/includes/class-wp-plugins-list-table.php:215 +msgid "Drop-ins (%s)" +msgid_plural "Drop-ins (%s)" +msgstr[0] "Infiltrado (%s)" +msgstr[1] "Infiltrados (%s)" + +#: wp-admin/includes/plugin.php:420 +msgid "Executed before Multisite is loaded." +msgstr "Ejecutado antes de cargar el Multisitio." + +#: wp-admin/includes/plugin.php:416 +msgid "External object cache." +msgstr "Caché de objetos externos." + +#: wp-admin/includes/plugin.php:415 +msgid "Custom maintenance message." +msgstr "Mensaje personalizado de mantenimiento." + +#: wp-admin/includes/plugin.php:414 +msgid "Custom install script." +msgstr "Script personalizado de instalación." + +#: wp-admin/includes/plugin.php:413 +msgid "Custom database error message." +msgstr "Mensaje de error de base de datos personalizado." + +#: wp-admin/includes/file.php:267 +msgid "File is empty. Please upload something more substantial." +msgstr "El archivo está vacío. Por favor, sube algo con más sustancia." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:244 +#: wp-admin/includes/class-wp-theme-install-list-table.php:214 +msgid "Install %s" +msgstr "Instalar %s" + +#: wp-admin/includes/plugin.php:412 +msgid "Custom database class." +msgstr "Clase de base datos personalizada." + +#: wp-admin/includes/plugin.php:411 +msgid "Advanced caching plugin." +msgstr "Plugin avanzado de caché." + +#: wp-admin/install.php:161 +msgid "You cannot install because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s." +msgstr "No puedes instalar porque WordPress %1$s requiere la versión %2$s o superior de MySQL. Estás usando la versión %3$s." + +#: wp-admin/install.php:159 +msgid "You cannot install because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s." +msgstr "No puedes instalar porque WordPress %1$s requiere la versión %2$s o superior de PHP. Estás usando la versión %3$s." + +#: wp-admin/includes/update.php:215 +msgid "WordPress %1$s is available! Please notify the site administrator." +msgstr "¡WordPress %1$s está disponible! Por favor, avisa al administrador del sitio." + +#: wp-admin/includes/update.php:213 +msgid "WordPress %1$s is available! Please update now." +msgstr "¡WordPress %1$s está disponible! Por favor, actualiza ahora." + +#: wp-admin/install.php:157 +msgid "You cannot install because WordPress %1$s requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s." +msgstr "No puedes instalar ya que WordPress %1$s requiere la versión %2$s o superior de PHP y la versión %3$s o superior de MySQL. Estás usando la versión %4$s de PHP y la versión %5$s de MySQL." + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:266 +msgid "You are about to activate the site %s" +msgstr "Estás a punto de activar el sitio %s" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:268 +msgid "You are about to deactivate the site %s" +msgstr "Estás a punto desactivar el sitio %s" + +#: wp-admin/comment.php:147 +msgid "This comment is currently marked as spam." +msgstr "Este comentario está marcado como spam." + +#: wp-admin/comment.php:87 +msgid "Moderate Comment" +msgstr "Comentario moderado" + +#: wp-admin/comment.php:144 +msgid "This comment is currently approved." +msgstr "Este comentario está aprobado." + +#: wp-admin/edit-comments.php:209 +msgid "This comment is already approved." +msgstr "Este comentario ya está aprobado." + +#: wp-admin/comment.php:150 +msgid "This comment is currently in the Trash." +msgstr "Este comentario está actualmente en la papelera." + +#: wp-admin/custom-background.php:294 +msgid "Repeat" +msgstr "Repetir" + +#: wp-admin/edit-comments.php:212 +msgid "This comment is already in the Trash." +msgstr "Este comentario ya está en la papelera." + +#: wp-admin/edit-comments.php:212 +msgid "View Trash" +msgstr "Ver papelera" + +#: wp-admin/edit-comments.php:215 +msgid "This comment is already marked as spam." +msgstr "Este comentario ya ha sido marcado como spam." + +#: wp-admin/includes/screen.php:869 +msgid "Screen Options" +msgstr "Opciones de pantalla" + +#: wp-admin/includes/screen.php:997 +msgid "Screen Layout" +msgstr "Diseño de pantalla" + +#: wp-admin/includes/screen.php:999 +msgid "Number of Columns:" +msgstr "Número de columnas:" + +#: wp-admin/includes/theme-install.php:99 +msgid "Feature Filter" +msgstr "Filtrar por características" + +#: wp-admin/includes/theme.php:184 +msgid "Tan" +msgstr "Café" + +#: wp-admin/includes/theme.php:187 +msgid "Dark" +msgstr "Negro" + +#: wp-admin/includes/theme.php:192 +msgid "One Column" +msgstr "Una columna" + +#: wp-admin/includes/theme.php:193 +msgid "Two Columns" +msgstr "Dos columnas" + +#: wp-admin/includes/theme.php:194 +msgid "Three Columns" +msgstr "Tres columnas" + +#: wp-admin/includes/theme.php:195 +msgid "Four Columns" +msgstr "Cuatro columnas" + +#: wp-admin/includes/theme.php:196 +msgid "Left Sidebar" +msgstr "Barra lateral izquierda" + +#: wp-admin/includes/theme.php:197 +msgid "Right Sidebar" +msgstr "Barra lateral derecha" + +#: wp-admin/includes/theme.php:206 wp-admin/includes/theme.php:254 +msgid "Features" +msgstr "Características" + +#: wp-admin/includes/theme.php:211 +msgid "Custom Colors" +msgstr "Colores personalizados" + +#: wp-admin/includes/theme.php:224 +msgid "Theme Options" +msgstr "Opciones del tema" + +#: wp-admin/includes/theme.php:225 +msgid "Threaded Comments" +msgstr "Comentarios anidados" + +#: wp-admin/includes/theme.php:223 +msgid "Sticky Post" +msgstr "Entrada fija" + +#: wp-admin/includes/theme.php:220 +msgid "Microformats" +msgstr "Microformatos" + +#: wp-admin/includes/theme.php:229 wp-admin/includes/theme.php:254 +msgid "Subject" +msgstr "Asunto" + +#: wp-admin/includes/theme.php:230 +msgid "Holiday" +msgstr "Vacaciones" + +#: wp-admin/includes/theme.php:231 +msgid "Photoblogging" +msgstr "Fotoblogging" + +#: wp-admin/includes/theme.php:232 +msgid "Seasonal" +msgstr "Estacional" + +#: wp-admin/includes/theme-install.php:131 +msgid "Find Themes" +msgstr "Buscar temas" + +#: wp-admin/includes/theme-install.php:139 +msgid "Install a theme in .zip format" +msgstr "Instalar un tema desde un archivo .zip" + +#: wp-admin/includes/theme-install.php:140 +msgid "If you have a theme in a .zip format, you may install it by uploading it here." +msgstr "Si tienes un tema en un archivo .zip, puedes instalarlo subiendo el archivo desde aquí." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:236 +#: wp-admin/includes/class-wp-theme-install-list-table.php:242 +#: wp-admin/includes/class-wp-themes-list-table.php:186 +msgid "Details" +msgstr "Detalles" + +#: wp-admin/includes/theme-install.php:189 +msgid "Theme Install" +msgstr "Instalar" + +#: wp-admin/themes.php:329 +msgid "Version: %s" +msgstr "Versión: %s" + +#: wp-admin/includes/theme.php:61 +msgid "Unable to locate WordPress theme directory." +msgstr "Ha sido imposible localizar el directorio de temas de WordPress." + +#: wp-admin/includes/theme.php:68 +msgid "Could not fully remove the theme %s." +msgstr "No se pudo eliminar completamente el tema %s." + +#: wp-admin/includes/update-core.php:728 +msgid "The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s." +msgstr "La actualización no se pudo instalar a causa de que WordPress %1$s requiere la versión %2$s o superior de PHP y la versión %3$s o superior de MySQL. Estás usando la versión %4$s de PHP y la versión %5$s de MySQL." + +#: wp-admin/includes/update-core.php:730 +msgid "The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s." +msgstr "La actualización no puede instalarse ya que WordPress %1$s requiere la versión %2$s o superior de PHP. Estás usando la versión %3$s." + +#: wp-admin/includes/update-core.php:732 +msgid "The update cannot be installed because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s." +msgstr "La actualización no puede instalarse porque WordPress %1$s requiere la versión %2$s o superior de MySQL. Estás usando la versión %3$s." + +#: wp-admin/includes/update-core.php:688 +msgid "Verifying the unpacked files…" +msgstr "Verificando los archivos descomprimidos…" + +#: wp-admin/includes/update-core.php:699 +msgid "The update could not be unpacked" +msgstr "No se ha podido descomprimir la actualización." + +#: wp-admin/includes/update-core.php:927 +msgid "Upgrading database…" +msgstr "Actualizado la base de datos…" + +#: wp-admin/includes/update.php:183 +msgid "You are using a development version (%1$s). Cool! Please stay updated." +msgstr "Estás usando una versión en desarrollo (%1$s). ¡Mola! Por favor, mantente actualizado." + +#: wp-admin/includes/update.php:187 +msgid "Get Version %2$s" +msgstr "Descargar versión %2$s" + +#: wp-admin/includes/update.php:224 +msgid "You are using WordPress %s." +msgstr "Estás usando WordPress %s." + +#: wp-admin/includes/update.php:230 +msgid "Update to %s" +msgstr "Actualizar a %s" + +#: wp-admin/includes/update.php:230 +msgid "Latest" +msgstr "Última" + +#: wp-admin/includes/update.php:428 +msgid "An automated WordPress update has failed to complete - please attempt the update again now." +msgstr "No se ha podido completar la actualización automática de WordPress. Por favor, vuelve a intentarlo." + +#: wp-admin/includes/update.php:430 +msgid "An automated WordPress update has failed to complete! Please notify the site administrator." +msgstr "¡No se ha podido completar la actualización automática de WordPress! Por favor, avisa al administrador." + +#: wp-admin/includes/upgrade.php:66 +msgid "Note that password carefully! It is a random password that was generated just for you." +msgstr "¡Anota la contraseña cuidadosamente! Es una contraseña aleatoria que ha sido generada sólo para ti." + +#: wp-admin/includes/upgrade.php:109 +msgctxt "Default category slug" +msgid "Uncategorized" +msgstr "Sin categoría" + +#: wp-admin/includes/upgrade.php:140 +msgid "Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!" +msgstr "Bienvenido a WordPress. Esta es tu primera entrada. Edítala o bórrala, ¡y comienza a publicar!." + +#: wp-admin/includes/upgrade.php:149 +msgid "Hello world!" +msgstr "¡Hola mundo!" + +#: wp-admin/includes/upgrade.php:151 +msgctxt "Default post slug" +msgid "hello-world" +msgstr "hola-mundo" + +#: wp-admin/includes/upgrade.php:163 +msgid "Mr WordPress" +msgstr "Sr WordPress" + +#: wp-admin/includes/user.php:125 wp-admin/includes/user.php:127 +msgid "ERROR: You entered your new password only once." +msgstr "ERROR: Has escrito tu nueva contraseña sólo una vez." + +#: wp-admin/includes/user.php:130 +msgid "ERROR: Please enter your password." +msgstr "ERROR: Por favor, escribe tu contraseña." + +#: wp-admin/includes/user.php:132 +msgid "ERROR: Please enter your password twice." +msgstr "ERROR: Por favor, escribe tu contraseña dos veces." + +#: wp-admin/includes/user.php:137 +msgid "ERROR: Passwords may not contain the character \"\\\"." +msgstr "ERROR: La contraseña no puede contener el carácter \"\\\"." + +#: wp-admin/includes/user.php:141 +msgid "ERROR: Please enter the same password in the two password fields." +msgstr "ERROR: Por favor, introduce la misma contraseña en los dos campos." + +#: wp-admin/includes/user.php:154 +msgid "ERROR: Please enter an e-mail address." +msgstr "ERROR: Por favor, introduce un correo electrónico" + +#: wp-admin/includes/deprecated.php:557 +msgid "No matching users were found!" +msgstr "¡No se encontraron usuarios!" + +#: wp-admin/install.php:61 +msgid "WordPress › Installation" +msgstr "Instalación de WordPress" + +#: wp-admin/setup-config.php:146 +msgid "User Name" +msgstr "Nombre de Usuario" + +#: wp-admin/install.php:108 +msgid "User(s) already exists." +msgstr "El (los) usuario(s) ya existe(n)." + +#: wp-admin/install.php:131 +msgid "Your E-mail" +msgstr "Tu correo electrónico" + +#: wp-admin/install.php:133 +msgid "Double-check your email address before continuing." +msgstr "Comprueba bien tu dirección de correo electrónico antes de continuar." + +#: wp-admin/install.php:140 +msgid "Install WordPress" +msgstr "Instalar WordPress" + +#: wp-admin/install.php:165 +msgid "Insufficient Requirements" +msgstr "Requisitos Insuficientes" + +#: wp-admin/install.php:179 +msgid "Welcome to the famous five minute WordPress installation process! You may want to browse the ReadMe documentation at your leisure. Otherwise, just fill in the information below and you’ll be on your way to using the most extendable and powerful personal publishing platform in the world." +msgstr "¡Bienvenido al famoso proceso de instalación de WordPress de cinco minutos! Tal vez quieras leer tranquilamente la Documentación del archivo Léeme. En caso contrario, rellena los datos más abajo y en seguida estarás utilizando la plataforma de publicación personal más potente y extensible del mundo." + +#: wp-admin/install.php:181 +msgid "Information needed" +msgstr "Información necesaria" + +#: wp-admin/install.php:182 +msgid "Please provide the following information. Don’t worry, you can always change these settings later." +msgstr "Por favor, debes facilitarnos los siguientes datos. No te preocupes, siempre podrás cambiar estos ajustes más tarde." + +#: wp-admin/install.php:228 +msgid "Success!" +msgstr "¡Lo lograste!" + +#: wp-admin/install.php:230 +msgid "WordPress has been installed. Were you expecting more steps? Sorry to disappoint." +msgstr "Wordpress se ha instalado correctamente. ¿Esperabas más pasos? Sentimos decepcionarte. :)" + +#: wp-admin/link-add.php:15 +msgid "Add New Link" +msgstr "Añadir enlace" + +#: wp-admin/edit-link-form.php:73 wp-admin/link-manager.php:72 +#: wp-admin/menu.php:78 +msgctxt "link" +msgid "Add New" +msgstr "Añadir nuevo" + +#: wp-admin/link-manager.php:81 +msgid "%s link deleted." +msgid_plural "%s links deleted" +msgstr[0] "%s enlace eliminado." +msgstr[1] "%s enlaces eliminados." + +#: wp-admin/link-manager.php:89 +msgid "Search Links" +msgstr "Buscar enlaces" + +#: wp-admin/includes/class-wp-links-list-table.php:151 +msgid "Visit %s" +msgstr "Visitar %s" + +#: wp-admin/includes/class-wp-links-list-table.php:43 +msgid "No links found." +msgstr "No se encontraron enlaces." + +#: wp-admin/link-parse-opml.php:90 +msgid "XML error: %1$s at line %2$s" +msgstr "Error de XML: %1$s en la línea %2$s" + +#: wp-admin/link.php:112 +msgid "Link not found." +msgstr "No se encontró el enlace." + +#: wp-admin/maint/repair.php:19 +msgid "WordPress › Database Repair" +msgstr "WordPress › Reparación de la base de datos" + +#: wp-admin/maint/repair.php:101 +msgid "Some database problems could not be repaired. Please copy-and-paste the following list of errors to the WordPress support forums to get additional assistance." +msgstr "Algunos problemas de la base de datos no se han podido reparar. Por favor, copia y pega la siguiente lista de errores en los foros de soporte de WordPress para conseguir ayuda." + +#: wp-admin/maint/repair.php:115 +msgid "Repair Database" +msgstr "Reparar base de datos" + +#: wp-admin/maint/repair.php:117 +msgid "Repair and Optimize Database" +msgstr "Reparar y optimizar la base de datos" + +#: wp-admin/media-new.php:40 +msgid "Upload New Media" +msgstr "Subir nuevo medio" + +#: wp-admin/media.php:23 wp-admin/media.php:57 +msgid "You are not allowed to edit this attachment." +msgstr "No tienes autorización para editar este archivo adjunto." + +#: wp-admin/media.php:61 +msgid "You attempted to edit an attachment that doesn’t exist. Perhaps it was deleted?" +msgstr "Estás intentando editar un adjunto que no existe. ¿Lo has borrado?" + +#: wp-admin/media.php:63 +msgid "You can’t edit this attachment because it is in the Trash. Please move it out of the Trash and try again." +msgstr "No puedes editar este adjunto ya que está en la Papelera. Sácalo de la Papelera e inténtalo de nuevo." + +#: wp-admin/edit-form-advanced.php:68 wp-admin/media.php:95 +#: wp-admin/upload.php:193 wp-admin/upload.php:218 +msgid "Media attachment updated." +msgstr "El archivo ha sido actualizado." + +#: wp-admin/media.php:116 wp-admin/media.php:125 +msgid "Update Media" +msgstr "Actualizar medio" + +#: wp-admin/menu.php:64 +msgid "Library" +msgstr "Librería multimedia" + +#: wp-admin/media.php:110 wp-admin/menu.php:66 wp-admin/upload.php:184 +msgctxt "file" +msgid "Add New" +msgstr "Añadir nuevo" + +#: wp-admin/menu.php:96 +msgid "Comments %s" +msgstr "Comentarios %s" + +#: wp-admin/menu.php:147 +msgid "Appearance" +msgstr "Apariencia" + +#: wp-admin/menu.php:176 wp-admin/plugins.php:411 +msgctxt "plugin" +msgid "Add New" +msgstr "Añadir nuevo" + +#: wp-admin/menu.php:185 wp-admin/user/menu.php:14 wp-admin/user-edit.php:28 +msgid "Profile" +msgstr "Perfil" + +#: wp-admin/menu.php:195 wp-admin/menu.php:198 +msgid "Your Profile" +msgstr "Tu perfil" + +#: wp-admin/menu.php:205 wp-admin/tools.php:12 +msgid "Tools" +msgstr "Herramientas" + +#: wp-admin/menu.php:215 +msgctxt "settings screen" +msgid "General" +msgstr "Generales" + +#: wp-admin/menu.php:216 +msgid "Writing" +msgstr "Escritura" + +#: wp-admin/menu.php:217 +msgid "Reading" +msgstr "Lectura" + +#: wp-admin/install.php:136 +msgid "Privacy" +msgstr "Privacidad" + +#: wp-admin/menu.php:220 +msgid "Permalinks" +msgstr "Enlaces permanentes" + +#: wp-admin/ms-delete-site.php:13 wp-admin/my-sites.php:13 +msgid "Multisite support is not enabled." +msgstr "El soporte multisitio no está activado." + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:147 +msgid "Domain" +msgstr "Dominio" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:151 +msgid "Last Updated" +msgstr "Última actualización" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:184 +msgid "Archived" +msgstr "Archivado" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:187 +msgid "Mature" +msgstr "Adulto" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:186 +msgid "Deleted" +msgstr "Borrado" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:271 +msgid "Unarchive" +msgstr "Desarchivar" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:284 +#: wp-admin/my-sites.php:129 +msgid "Visit" +msgstr "Visitar" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:314 +msgid "Never" +msgstr "Nunca" + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:335 +msgid "Only showing first 5 users." +msgstr "Mostrando solo los 5 primeros usuarios." + +#: wp-admin/includes/class-wp-ms-sites-list-table.php:335 +msgid "More" +msgstr "Más" + +#: wp-admin/update-core.php:300 wp-admin/update-core.php:327 +#: wp-admin/update-core.php:600 wp-admin/update-core.php:604 +msgid "Update Themes" +msgstr "Actualizar temas" + +#: wp-admin/includes/class-wp-ms-users-list-table.php:83 +msgid "No users found." +msgstr "No se encontraron usuarios." + +#: wp-admin/edit-form-advanced.php:343 wp-admin/options-discussion.php:14 +msgid "Discussion Settings" +msgstr "Ajustes de comentarios" + +#: wp-admin/options-discussion.php:41 wp-admin/options-discussion.php:42 +msgid "Default article settings" +msgstr "Ajustes por defecto de las entradas" + +#: wp-admin/options-discussion.php:55 +msgid "These settings may be overridden for individual articles." +msgstr "Estos ajustes pueden modificarse para cada entrada en particular." + +#: wp-admin/options-discussion.php:59 wp-admin/options-discussion.php:60 +msgid "Other comment settings" +msgstr "Otros ajustes de comentarios" + +#: wp-admin/options-discussion.php:61 +msgid "Comment author must fill out name and e-mail" +msgstr "El autor del comentario debe rellenar el nombre y el correo electrónico" + +#: wp-admin/options-discussion.php:65 +msgid "Users must be registered and logged in to comment" +msgstr "Los usuarios deben registrarse e identificarse para comentar" + +#: wp-admin/options-discussion.php:72 +msgid "Automatically close comments on articles older than %s days" +msgstr "Cerrar automáticamente los comentarios en las entradas con más de %s días" + +#: wp-admin/options-discussion.php:95 +msgid "Enable threaded (nested) comments %s levels deep" +msgstr "Activar los comentarios anidados hasta %s niveles" + +#: wp-admin/options-discussion.php:105 +msgid "last" +msgstr "última" + +#: wp-admin/options-discussion.php:107 +msgid "first" +msgstr "primera" + +#: wp-admin/options-discussion.php:109 +msgid "Break comments into pages with %1$s top level comments per page and the %2$s page displayed by default" +msgstr "Separa los comentarios en páginas de %1$s comentarios por página y se muestra la %2$s página por defecto" + +#: wp-admin/options-discussion.php:117 +msgid "older" +msgstr "más antiguos" + +#: wp-admin/options-discussion.php:119 +msgid "newer" +msgstr "más recientes" + +#: wp-admin/options-discussion.php:121 +msgid "Comments should be displayed with the %s comments at the top of each page" +msgstr "Los comentarios se ordenarán con los %s al principio" + +#: wp-admin/options-discussion.php:127 wp-admin/options-discussion.php:128 +msgid "E-mail me whenever" +msgstr "Enviarme un correo electrónico cuando" + +#: wp-admin/options-discussion.php:131 +msgid "Anyone posts a comment" +msgstr "Alguien envía un comentario" + +#: wp-admin/options-discussion.php:135 +msgid "A comment is held for moderation" +msgstr "Se ha recibido un comentario para moderar" + +#: wp-admin/options-discussion.php:139 wp-admin/options-discussion.php:140 +msgid "Before a comment appears" +msgstr "Para que un comentario aparezca" + +#: wp-admin/options-discussion.php:145 +msgid "Comment author must have a previously approved comment" +msgstr "El autor del comentario debe tener un comentario previamente aprobado" + +#: wp-admin/options-discussion.php:149 wp-admin/options-discussion.php:150 +msgid "Comment Moderation" +msgstr "Moderación de comentarios" + +#: wp-admin/options-discussion.php:151 +msgid "Hold a comment in the queue if it contains %s or more links. (A common characteristic of comment spam is a large number of hyperlinks.)" +msgstr "Mantener un comentario en espera si contiene más de %s enlaces (una característica común del spam en comentarios es el gran número de enlaces)." + +#: wp-admin/options-discussion.php:153 +msgid "When a comment contains any of these words in its content, name, URL, e-mail, or IP, it will be held in the moderation queue. One word or IP per line. It will match inside words, so “press” will match “WordPress”." +msgstr "Mantener en la cola de moderación todo comentario que incluya cualquiera de las siguientes palabras en su contenido, nombre, URL, e-mail o IP. Una palabra o IP por línea. Atención a las coincidencias en el interior de palabras: “press” coincidirá con “WordPress”." + +#: wp-admin/options-discussion.php:160 wp-admin/options-discussion.php:161 +msgid "Comment Blacklist" +msgstr "Lista negra de comentarios" + +#: wp-admin/options-discussion.php:162 +msgid "When a comment contains any of these words in its content, name, URL, e-mail, or IP, it will be marked as spam. One word or IP per line. It will match inside words, so “press” will match “WordPress”." +msgstr "Cuando un comentario contenga cualquiera de estas palabras en su contenido, nombre, URL, correo electrónico, o IP, será marcado como spam. Una palabra o IP por línea. Tendrá en cuenta las coincidencias parciales, así que “press” coincidirá con “WordPress”." + +#: wp-admin/options-discussion.php:171 +msgid "Avatars" +msgstr "Avatares" + +#: wp-admin/options-discussion.php:179 wp-admin/options-discussion.php:180 +msgid "Avatar Display" +msgstr "Visibilidad" + +#: wp-admin/options-discussion.php:183 +msgid "Show Avatars" +msgstr "Mostrar avatares" + +#: wp-admin/options-discussion.php:188 wp-admin/options-discussion.php:189 +msgid "Maximum Rating" +msgstr "Calificación máxima" + +#: wp-admin/options-discussion.php:194 +msgid "G — Suitable for all audiences" +msgstr "G — Para todos los públicos" + +#: wp-admin/options-discussion.php:196 +msgid "PG — Possibly offensive, usually for audiences 13 and above" +msgstr "PG — Posiblemente ofensivo, normalmente para mayores de 13 años" + +#: wp-admin/options-discussion.php:198 +msgid "R — Intended for adult audiences above 17" +msgstr "R — Destinado a un público adulto mayor de 17" + +#: wp-admin/options-discussion.php:200 +msgid "X — Even more mature than above" +msgstr "X — Contenido más adulto que los anteriores." + +#: wp-admin/options-discussion.php:211 wp-admin/options-discussion.php:212 +msgid "Default Avatar" +msgstr "Avatar por defecto" + +#: wp-admin/options-discussion.php:214 +msgid "For users without a custom avatar of their own, you can either display a generic logo or a generated one based on their e-mail address." +msgstr "Para usuarios que no tengan un avatar personalizado podemos mostrar uno genérico o uno basado en su dirección de correo electrónico." + +#: wp-admin/options-discussion.php:218 +msgid "Mystery Man" +msgstr "Hombre misterioso" + +#: wp-admin/options-discussion.php:219 +msgid "Blank" +msgstr "Sin avatar" + +#: wp-admin/options-discussion.php:220 +msgid "Gravatar Logo" +msgstr "Logo de Gravatar" + +#: wp-admin/options-discussion.php:221 +msgid "Identicon (Generated)" +msgstr "Identicon (autogenerado)" + +#: wp-admin/options-discussion.php:222 +msgid "Wavatar (Generated)" +msgstr "Wavatar (autogenerado)" + +#: wp-admin/options-discussion.php:223 +msgid "MonsterID (Generated)" +msgstr "MonsterID (autogenerado)" + +#: wp-admin/options-general.php:15 +msgid "General Settings" +msgstr "Ajustes generales" + +#: wp-admin/options-general.php:18 +msgctxt "timezone date format" +msgid "Y-m-d G:i:s" +msgstr "d-m-Y G:i" + +#: wp-admin/options-general.php:115 +msgid "This address is used for admin purposes, like new user notification." +msgstr "Esta dirección se usa sólo con fines administrativos, como para la notificación de nuevos usuarios." + +#: wp-admin/options-general.php:118 wp-admin/options-general.php:119 +msgid "Membership" +msgstr "Miembros" + +#: wp-admin/options-general.php:121 +msgid "Anyone can register" +msgstr "Cualquiera puede registrarse" + +#: wp-admin/options-general.php:125 +msgid "New User Default Role" +msgstr "Perfil predeterminado para nuevos usuarios" + +#: wp-admin/options-general.php:167 +msgid "Timezone" +msgstr "Zona horaria" + +#: wp-admin/options-general.php:174 +msgid "UTC time is %s" +msgstr "La hora UTC es %s" + +#: wp-admin/options-general.php:176 +msgid "Local time is %1$s" +msgstr "La hora local es %1$s" + +#: wp-admin/options-general.php:178 +msgid "Choose a city in the same timezone as you." +msgstr "Elige una ciudad que esté en la misma zona horaria que la tuya." + +#: wp-admin/options-general.php:189 +msgid "This timezone is currently in standard time." +msgstr "Esta zona horaria se encuentra actualmente en horario de invierno." + +#: wp-admin/options-general.php:253 wp-admin/options-general.php:287 +msgid "Custom:" +msgstr "Personalizado:" + +#: wp-admin/options-general.php:294 +msgid "Week Starts On" +msgstr "La semana comienza el" + +#: wp-admin/options-media.php:15 +msgid "Media Settings" +msgstr "Ajustes de medios" + +#: wp-admin/options-media.php:48 +msgid "Image sizes" +msgstr "Tamaño de las imágenes" + +#: wp-admin/options-media.php:53 +msgid "Thumbnail size" +msgstr "Tamaño de la miniatura" + +#: wp-admin/options-media.php:60 +msgid "Crop thumbnail to exact dimensions (normally thumbnails are proportional)" +msgstr "Recortar las miniaturas en las dimensiones exactas (normalmente, las miniaturas son proporcionales)" + +#: wp-admin/options-media.php:65 wp-admin/options-media.php:66 +msgid "Medium size" +msgstr "Tamaño medio" + +#: wp-admin/options-media.php:67 wp-admin/options-media.php:77 +msgid "Max Width" +msgstr "Anchura máxima" + +#: wp-admin/options-media.php:69 wp-admin/options-media.php:79 +msgid "Max Height" +msgstr "Altura máxima" + +#: wp-admin/options-media.php:75 wp-admin/options-media.php:76 +msgid "Large size" +msgstr "Tamaño grande" + +#: wp-admin/options-media.php:88 +msgid "Embeds" +msgstr "Incrustados" + +#: wp-admin/options-media.php:95 +msgid "Uploading Files" +msgstr "Subida de archivos" + +#: wp-admin/options-media.php:102 +msgid "Store uploads in this folder" +msgstr "Guardar los archivos subidos en esta carpeta" + +#: wp-admin/options-media.php:104 +msgid "Default is wp-content/uploads" +msgstr "El predeterminado es wp-content/uploads" + +#: wp-admin/options-media.php:109 +msgid "Full URL path to files" +msgstr "Ruta URL completa a los archivos" + +#: wp-admin/options-media.php:111 +msgid "Configuring this is optional. By default, it should be blank." +msgstr "Esta configuración es opcional. Por defecto debería estar en blanco." + +#: wp-admin/options-media.php:119 +msgid "Organize my uploads into month- and year-based folders" +msgstr "Organizar mis archivos subidos en carpetas basadas en mes y año" + +#: wp-admin/options-permalink.php:15 +msgid "Permalink Settings" +msgstr "Ajustes de los enlaces permanentes" + +#: wp-admin/options-permalink.php:154 +msgid "Permalink structure updated. Remove write access on web.config file now!" +msgstr "La estructura de enlaces permanentes se ha actualizado. Elimina el acceso de escritura en el archivo web.config ahora mismo." + +#: wp-admin/options-permalink.php:161 +msgid "You should update your .htaccess now." +msgstr "Ahora debes actualizar tu .htaccess" + +#: wp-admin/options-permalink.php:156 wp-admin/options-permalink.php:158 +#: wp-admin/options-permalink.php:163 wp-admin/options-permalink.php:166 +msgid "Permalink structure updated." +msgstr "Estructura de enlaces permanentes actualizada." + +#: wp-admin/options-permalink.php:202 +msgid "Day and name" +msgstr "Día y nombre" + +#: wp-admin/options-permalink.php:206 +msgid "Month and name" +msgstr "Mes y nombre" + +#: wp-admin/options-permalink.php:210 +msgid "Numeric" +msgstr "Numérico" + +#: wp-admin/options-permalink.php:220 +msgid "Custom Structure" +msgstr "Estructura personalizada" + +#: wp-admin/options-permalink.php:230 +msgid "Optional" +msgstr "Opcional" + +#: wp-admin/options-permalink.php:242 +msgid "Category base" +msgstr "Categoría base" + +#: wp-admin/options-permalink.php:246 +msgid "Tag base" +msgstr "Etiqueta base" + +#: wp-admin/options-permalink.php:260 +msgid "If your web.config file were writable, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your web.config file. Click in the field and press CTRL + a to select all. Then insert this rule inside of the /<configuration>/<system.webServer>/<rewrite>/<rules> element in web.config file." +msgstr "Si tu archivo web.config tuviera permisos de escritura los cambios se harían automáticamente. Al no ser así, a continuación tienes las reglas de mod_rewrite que debes agregar manualmente a tu archivo web.config que se encuentra en el directorio raíz de WordPress. Haz clic en el área de texto y pulsa CTRL + a para seleccionar todo el texto. Después copia y pega las reglas de la configuración /<configuration>/<system.webServer>/<rewrite>/<rules> en tu archivo web.config." + +#: wp-admin/options-permalink.php:265 +msgid "If you temporarily make your web.config file writable for us to generate rewrite rules automatically, do not forget to revert the permissions after rule has been saved." +msgstr "Si temporalmente tienes que hacer el web.config editable para que podamos generar automaticamente las reglas de reescritura, no te olvides de volverlo a poner como estaba." + +#: wp-admin/options-permalink.php:267 +msgid "If the root directory of your site were writable, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your web.config file. Create a new file, called web.config in the root directory of your site. Click in the field and press CTRL + a to select all. Then insert this code into the web.config file." +msgstr "Si la carpeta raíz de tu sitio tuviera permisos de escritura, podríamos hacer este cambio automáticamente. Al no tener permisos de escritura, deberás editar tu web.config y añadirla a mano. Crea un nuevo archivo en la carpeta raíz de tu sitio y llámalo web.config. Haz clic en el siguiente campo y teclea CTRL + a para seleccionarlo todo. Luego pega este código en el fichero web.config." + +#: wp-admin/options-permalink.php:272 +msgid "If you temporarily make your site’s root directory writable for us to generate the web.config file automatically, do not forget to revert the permissions after the file has been created." +msgstr "Si das permisos temporales de escritura a la carpeta raíz de tu sitio para que se genere el archivo web.config automáticamente, no olvides revertir los permisos después de que se cree el archivo." + +#: wp-admin/options-permalink.php:277 +msgid "If your .htaccess file were writable, we could do this automatically, but it isn’t so these are the mod_rewrite rules you should have in your .htaccess file. Click in the field and press CTRL + a to select all." +msgstr "Si tu archivo .htaccess tuviera permisos de escritura los cambios se harían automáticamente, pero si no fuera así, aquí tienes las reglas de mod_rewrite que debes agregar manualmente a tu archivo .htaccess. Haz clic en el área de texto y pulsa CTRL + a o COMANDO + a para seleccionarlo todo." + +#: wp-admin/options-reading.php:15 +msgid "Reading Settings" +msgstr "Ajustes de lectura" + +#: wp-admin/options-reading.php:112 +msgid "A static page (select below)" +msgstr "Una página estática (seleccionar abajo)" + +#: wp-admin/options-reading.php:116 +msgid "Front page: %s" +msgstr "Página inicial: %s" + +#: wp-admin/options-reading.php:117 +msgid "Posts page: %s" +msgstr "Página de entradas: %s" + +#: wp-admin/options-reading.php:120 +msgid "Warning: these pages should not be the same!" +msgstr "Atención: estas páginas no pueden ser las mismas." + +#: wp-admin/options-reading.php:126 +msgid "Blog pages show at most" +msgstr "Número máximo de entradas a mostrar en el sitio" + +#: wp-admin/options-reading.php:128 +msgid "posts" +msgstr "entradas" + +#: wp-admin/options-reading.php:132 +msgid "Syndication feeds show the most recent" +msgstr "Número máximo de entradas a mostrar en el feed" + +#: wp-admin/options-reading.php:136 wp-admin/options-reading.php:137 +msgid "For each article in a feed, show" +msgstr "Mostrar, para cada entrada en el feed," + +#: wp-admin/options-reading.php:138 +msgid "Full text" +msgstr "Texto completo" + +#: wp-admin/options-reading.php:139 +msgid "Summary" +msgstr "Resumen" + +#: wp-admin/options-reading.php:86 +msgid "Encoding for pages and feeds" +msgstr "Codificación para páginas y feeds" + +#: wp-admin/options-writing.php:15 +msgid "Writing Settings" +msgstr "Ajustes de escritura" + +#: wp-admin/options-writing.php:72 wp-admin/options-writing.php:73 +msgid "Formatting" +msgstr "Formato" + +#: wp-admin/options-writing.php:76 +msgid "Convert emoticons like :-) and :-P to graphics on display" +msgstr "Convertir emoticonos como :-) y :-P a gráficos en pantalla" + +#: wp-admin/options-writing.php:77 +msgid "WordPress should correct invalidly nested XHTML automatically" +msgstr "WordPress corregirá de forma automática el XHTML incorrectamente anidado" + +#: wp-admin/options-writing.php:81 +msgid "Default Post Category" +msgstr "Categoría predeterminada para las entradas" + +#: wp-admin/options-writing.php:107 +msgid "Default Link Category" +msgstr "Categoría predeterminada para enlaces" + +#: wp-admin/credits.php:187 +msgid "XML-RPC" +msgstr "XML-RPC" + +#: wp-admin/options-writing.php:136 +msgid "Post via e-mail" +msgstr "Publicar por correo electrónico" + +#: wp-admin/options-writing.php:137 +msgid "To post to WordPress by e-mail you must set up a secret e-mail account with POP3 access. Any mail received at this address will be posted, so it’s a good idea to keep this address very secret. Here are three random strings you could use: %s, %s, %s." +msgstr "Para publicar en WordPress por correo electrónico debes crear una cuenta de correo electrónico secreta con acceso POP3. Todo correo recibido en esta dirección será publicado, por ello es buena idea que mantengas esa dirección totalmente secreta. Aquí tienes tres cadenas aleatorias que puedes usar como nombre de cuenta: %s, %s, %s." + +#: wp-admin/options-writing.php:141 +msgid "Mail Server" +msgstr "Servidor de correo" + +#: wp-admin/options-writing.php:143 +msgid "Port" +msgstr "Puerto" + +#: wp-admin/options-writing.php:148 +msgid "Login Name" +msgstr "Nombre de acceso" + +#: wp-admin/options-writing.php:158 +msgid "Default Mail Category" +msgstr "Categoría predeterminada para publicar por correo electrónico" + +#: wp-admin/options-writing.php:50 wp-admin/options-writing.php:173 +msgid "Update Services" +msgstr "Servicios de actualización" + +#: wp-admin/options-writing.php:177 +msgid "When you publish a new post, WordPress automatically notifies the following site update services. For more about this, see Update Services on the Codex. Separate multiple service URLs with line breaks." +msgstr "Cuando publicas una entrada nueva, WordPress lo notifica automáticamente a los siguientes servicios de actualización. Para más información, visita Update Services en el Codex. Separa las URL de distintos servicios con saltos de línea." + +#: wp-admin/options.php:203 +msgid "All Settings" +msgstr "Todos los ajustes" + +#: wp-admin/plugin-editor.php:20 +msgid "Edit Plugins" +msgstr "Editar plugins" + +#: wp-admin/plugin-editor.php:108 +msgid "No such file exists! Double check the name and try again." +msgstr "¡El archivo no existe! Comprueba el nombre e inténtalo de nuevo." + +#: wp-admin/plugin-editor.php:115 +msgid "Files of this type are not editable." +msgstr "Los archivos de este tipo no son editables." + +#: wp-admin/plugin-editor.php:160 wp-admin/theme-editor.php:127 +msgid "File edited successfully." +msgstr "El archivo ha sido editado correctamente." + +#: wp-admin/plugin-editor.php:162 +msgid "This plugin has been deactivated because your changes resulted in a fatal error." +msgstr "El plugin ha sido desactivado porque tus cambios han provocado un error fatal." + +#: wp-admin/plugin-editor.php:177 +msgid "Editing %s (active)" +msgstr "Editando %s (activo)" + +#: wp-admin/plugin-editor.php:179 +msgid "Browsing %s (active)" +msgstr "Examinando %s (activo)" + +#: wp-admin/plugin-editor.php:182 +msgid "Editing %s (inactive)" +msgstr "Editando %s (inactivo)" + +#: wp-admin/plugin-editor.php:184 +msgid "Browsing %s (inactive)" +msgstr "Examinando %s (inactivo)" + +#: wp-admin/plugin-editor.php:190 +msgid "Select plugin to edit:" +msgstr "Elige el plugin a editar:" + +#: wp-admin/plugin-editor.php:212 +msgid "Plugin Files" +msgstr "Archivos del plugin" + +#: wp-admin/plugin-editor.php:241 wp-admin/theme-editor.php:209 +msgid "Documentation:" +msgstr "Documentación:" + +#: wp-admin/plugin-editor.php:251 +msgid "Update File and Attempt to Reactivate" +msgstr "Actualizar archivo e intentar reactivarlo" + +#: wp-admin/plugin-editor.php:253 wp-admin/theme-editor.php:222 +msgid "Update File" +msgstr "Actualizar archivo" + +#: wp-admin/plugin-editor.php:258 wp-admin/theme-editor.php:224 +msgid "You need to make this file writable before you can save your changes. See the Codex for more information." +msgstr "Para guardar los cambios, es necesario que el archivo tenga permisos de escritura. Visita el codex para obtener más información." + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:33 +msgctxt "Plugin Installer" +msgid "Featured" +msgstr "Destacados" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:34 +msgctxt "Plugin Installer" +msgid "Popular" +msgstr "Populares" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:35 +msgctxt "Plugin Installer" +msgid "Newest" +msgstr "Recientes" + +#: wp-admin/plugins.php:287 +msgid "Are you sure you wish to delete these files?" +msgstr "¿Estás seguro de que deseas eliminar estos archivos?" + +#: wp-admin/plugins.php:297 +msgid "Yes, Delete these files" +msgstr "Sí, quiero borrar estos archivos" + +#: wp-admin/plugins.php:300 +msgid "No, Return me to the plugin list" +msgstr "No, quiero volver a la lista de plugins" + +#: wp-admin/plugins.php:341 +msgid "Plugins extend and expand the functionality of WordPress. Once a plugin is installed, you may activate it or deactivate it here." +msgstr "Los plugins amplían las funcionalidades de WordPress. Una vez instalados, puedes activarlos o desactivarlos desde aquí." + +#: wp-admin/plugins.php:349 +msgid "If something goes wrong with a plugin and you can’t use WordPress, delete or rename that file in the %s directory and it will be automatically deactivated." +msgstr "Si algo va mal con un plugin y no puedes utilizar tu WordPress, borra o renombra ese archivo en el directorio %s y se desactivará automáticamente." + +#: wp-admin/plugins.php:366 +msgid "The plugin %s has been deactivated due to an error: %s" +msgstr "El plugin %s se ha desactivado debido a un error: %s" + +#: wp-admin/plugins.php:376 +msgid "Plugin could not be activated because it triggered a fatal error." +msgstr "El plugin no ha podido activarse porque ha provocado un error fatal." + +#: wp-admin/plugins.php:392 +msgid "Plugin could not be deleted due to an error: %s" +msgstr "El plugin no se ha podido eliminar debido a un error: %s" + +#: wp-admin/plugins.php:394 +msgid "The selected plugins have been deleted." +msgstr "Los plugins elegidos han sido eliminados." + +#: wp-admin/plugins.php:397 +msgid "Plugin activated." +msgstr "El plugin ha sido activado." + +#: wp-admin/plugins.php:399 +msgid "Selected plugins activated." +msgstr "Los plugins elegidos han sido activados." + +#: wp-admin/plugins.php:401 +msgid "Plugin deactivated." +msgstr "El plugin ha sido desactivado." + +#: wp-admin/plugins.php:403 +msgid "Selected plugins deactivated." +msgstr "Los plugins elegidos han sido desactivados." + +#: wp-admin/plugins.php:405 +msgid "No out of date plugins were selected." +msgstr "Ningún plugin actualizable elegido." + +#: wp-admin/includes/class-wp-plugins-list-table.php:342 +#: wp-admin/includes/class-wp-plugins-list-table.php:351 +msgid "Deactivate this plugin" +msgstr "Desactivar este plugin" + +#: wp-admin/includes/class-wp-plugins-list-table.php:243 +#: wp-admin/includes/class-wp-plugins-list-table.php:342 +msgid "Network Deactivate" +msgstr "Desactivar para la red" + +#: wp-admin/includes/class-wp-plugins-list-table.php:345 +#: wp-admin/includes/class-wp-upgrader-skins.php:366 +msgid "Activate this plugin for all sites in this network" +msgstr "Activar este plugin para todos los sitios en esta red" + +#: wp-admin/includes/class-wp-plugins-list-table.php:240 +#: wp-admin/includes/class-wp-plugins-list-table.php:345 +#: wp-admin/includes/class-wp-upgrader-skins.php:366 +msgid "Network Activate" +msgstr "Activar para la red" + +#: wp-admin/includes/class-wp-plugins-list-table.php:361 +msgid "Open this file in the Plugin Editor" +msgstr "Abrir este archivo en el editor de plugins" + +#: wp-admin/includes/class-wp-plugins-list-table.php:347 +#: wp-admin/includes/class-wp-plugins-list-table.php:356 +msgid "Delete this plugin" +msgstr "Borrar este plugin" + +#: wp-admin/includes/class-wp-plugins-list-table.php:418 +msgid "Visit plugin site" +msgstr "Visitar la web del plugin" + +#: wp-admin/includes/class-wp-plugins-list-table.php:273 +msgid "Clear List" +msgstr "Limpiar lista" + +#: wp-admin/includes/class-wp-plugins-list-table.php:200 +msgctxt "plugins" +msgid "All (%s)" +msgid_plural "All (%s)" +msgstr[0] "Todo (%s)" +msgstr[1] "Todos (%s)" + +#: wp-admin/includes/class-wp-plugins-list-table.php:203 +msgid "Active (%s)" +msgid_plural "Active (%s)" +msgstr[0] "Activo (%s)" +msgstr[1] "Activos (%s)" + +#: wp-admin/includes/class-wp-plugins-list-table.php:206 +msgid "Recently Active (%s)" +msgid_plural "Recently Active (%s)" +msgstr[0] "Activo recientemente (%s)" +msgstr[1] "Activos recientemente (%s)" + +#: wp-admin/includes/class-wp-plugins-list-table.php:209 +msgid "Inactive (%s)" +msgid_plural "Inactive (%s)" +msgstr[0] "Inactivo (%s)" +msgstr[1] "Inactivos (%s)" + +#: wp-admin/includes/class-wp-plugins-list-table.php:171 +msgid "No plugins found." +msgstr "No se encontraron plugins." + +#: wp-admin/includes/class-wp-plugins-list-table.php:173 +msgid "You do not appear to have any plugins available at this time." +msgstr "No parece que tengas plugins disponibles en este momento." + +#: wp-admin/edit-tags.php:128 wp-admin/edit-tags.php:143 wp-admin/post.php:144 +msgid "You attempted to edit an item that doesn’t exist. Perhaps it was deleted?" +msgstr "Lo que intentas editar no existe. ¿Habrá sido borrado?" + +#: wp-admin/async-upload.php:51 wp-admin/edit-tags.php:253 +#: wp-admin/post.php:150 +msgid "You are not allowed to edit this item." +msgstr "No tienes autorización para editar esto." + +#: wp-admin/post.php:153 +msgid "You can’t edit this item because it is in the Trash. Please restore it and try again." +msgstr "No puedes editar esto ya que está en la Papelera. Sácala de la Papelera e inténtalo de nuevo." + +#: wp-admin/async-upload.php:49 wp-admin/post.php:147 wp-admin/post.php:243 +#: wp-admin/post.php:267 wp-admin/post.php:286 +msgid "Unknown post type." +msgstr "Tipo de entrada desconocida." + +#: wp-admin/press-this.php:127 +msgid "Embed Code" +msgstr "Incrustar código" + +#: wp-admin/press-this.php:130 +msgid "Insert Video" +msgstr "Insertar vídeo" + +#: wp-admin/press-this.php:156 +msgid "Click to insert." +msgstr "Clic para insertar." + +#: wp-admin/press-this.php:230 +msgid "Unable to retrieve images or no images on page." +msgstr "No se pueden extraer imágenes o no hay imágenes en la página." + +#: wp-admin/press-this.php:291 +msgid "click images to select" +msgstr "haz clic en las imágenes para seleccionar" + +#: wp-admin/press-this.php:291 +msgid "Add from URL" +msgstr "Añadir desde URL" + +#: wp-admin/press-this.php:597 +msgid "Your post has been saved." +msgstr "Tu entrada ha sido guardada correctamente." + +#: wp-admin/press-this.php:598 +msgid "View post" +msgstr "Ver entrada" + +#: wp-admin/press-this.php:600 +msgid "Close Window" +msgstr "Cerrar ventana" + +#: wp-admin/press-this.php:642 wp-admin/press-this.php:643 +msgid "Insert an Image" +msgstr "Insertar imagen" + +#: wp-admin/press-this.php:647 +msgid "Embed a Video" +msgstr "Insertar vídeo" + +#: wp-admin/press-this.php:630 +msgid "via " +msgstr "vía " + +#: wp-admin/revision.php:76 +msgid "Compare Revisions of “%1$s”" +msgstr "Comparar revisiones de “%s”" + +#: wp-admin/themes.php:345 +msgid "Tags:" +msgstr "Etiquetas:" + +#: wp-admin/theme-editor.php:20 +msgid "Edit Themes" +msgstr "Editar temas" + +#: wp-admin/theme-editor.php:56 wp-admin/theme-editor.php:59 +msgid "The requested theme does not exist." +msgstr "El tema solicitado no existe." + +#: wp-admin/theme-editor.php:144 +msgid "Select theme to edit:" +msgstr "Elige el tema a editar:" + +#: wp-admin/theme-editor.php:170 +msgid "Templates" +msgstr "Plantillas" + +#: wp-admin/theme-editor.php:197 +msgid "Oops, no such file exists! Double check the name and try again, merci." +msgstr "¡El archivo no existe! Comprueba el nombre e inténtalo de nuevo, gracias." + +#: wp-admin/includes/class-wp-theme-install-list-table.php:44 +msgctxt "Theme Installer" +msgid "Featured" +msgstr "Destacados" + +#: wp-admin/includes/class-wp-theme-install-list-table.php:46 +msgctxt "Theme Installer" +msgid "Newest" +msgstr "Recientes" + +#: wp-admin/includes/class-wp-theme-install-list-table.php:47 +msgctxt "Theme Installer" +msgid "Recently Updated" +msgstr "Actualizados recientemente" + +#: wp-admin/themes.php:135 +msgid "New theme activated. Visit site" +msgstr "Nuevo tema activado. Visitar sitio" + +#: wp-admin/themes.php:138 +msgid "Theme deleted." +msgstr "El tema ha sido eliminado." + +#: wp-admin/themes.php:327 +msgid "Current Theme" +msgstr "Tema actual" + +#: wp-admin/includes/class-wp-themes-list-table.php:158 +msgid "" +"You are about to delete this theme '%s'\n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Estás a punto de borrar este tema '%s'\n" +" 'Aceptar' para borrar, 'Cancelar' para salir." + +#: wp-admin/themes.php:242 +msgid "Broken Themes" +msgstr "Temas dañados" + +#: wp-admin/options-writing.php:123 wp-admin/tools.php:41 +msgid "Press This is a bookmarklet: a little app that runs in your browser and lets you grab bits of the web." +msgstr "Publicar esto es un marcador: una pequeña aplicación que se ejecuta en el navegador y permite coger secciones de la web." + +#: wp-admin/options-writing.php:125 wp-admin/tools.php:44 +msgid "Drag-and-drop the following link to your bookmarks bar or right click it and add it to your favorites for a posting shortcut." +msgstr "Arrastra el siguente enlace y colócalo en tu barra de marcadores o haz clic con el botón derecho para añadirlo en tu lista de favoritos como un atajo de publicación de entradas." + +#: wp-admin/update-core.php:46 +msgid "Download nightly build" +msgstr "Descargando la última versión de desarrollo" + +#: wp-admin/update-core.php:70 +msgid "Download %s" +msgstr "Descargar %s" + +#: wp-admin/update-core.php:92 +msgid "Hide this update" +msgstr "Ocultar esta actualización" + +#: wp-admin/update-core.php:94 +msgid "Bring back this update" +msgstr "Volver a mostrar esta actualización" + +#: wp-admin/update-core.php:97 +msgid "This localized version contains both the translation and various other localization fixes. You can skip upgrading if you want to keep your current translation." +msgstr "Esta versión traducida contiene tanto la traducción como otros ajustes de traducción. Puedes saltarte la actualización si quieres mantener la traducción actual." + +#: wp-admin/update-core.php:110 wp-admin/update-core.php:122 +msgid "Show hidden updates" +msgstr "Mostrar actualizaciones ocultas" + +#: wp-admin/update-core.php:111 +msgid "Hide hidden updates" +msgstr "Ocultar actualizaciones ocultas" + +#: wp-admin/update-core.php:243 +msgid "Compatibility with WordPress %1$s: 100%% (according to its author)" +msgstr "Compatibilidad con WordPress %1$s: 100%% (según su autor)" + +#: wp-admin/update-core.php:246 wp-admin/update-core.php:254 +msgid "Compatibility with WordPress %1$s: %2$d%% (%3$d \"works\" votes out of %4$d total)" +msgstr "Compatibilidad con WordPress %1$s: %2$d%% (%3$d votos de \"funciona\" de un total de %4$d)" + +#: wp-admin/update-core.php:248 wp-admin/update-core.php:256 +msgid "Compatibility with WordPress %1$s: Unknown" +msgstr "Compatibilidad con WordPress %1$s: Desconocida" + +#: wp-admin/includes/class-wp-upgrader.php:1911 wp-admin/update-core.php:412 +msgid "Installation Failed" +msgstr "Instalación fallida" + +#: wp-admin/update.php:78 +msgid "Plugin Reactivation" +msgstr "Reactivación del plugin" + +#: wp-admin/update.php:80 +msgid "Plugin reactivated successfully." +msgstr "El plugin ha sido reactivado." + +#: wp-admin/update.php:83 +msgid "Plugin failed to reactivate due to a fatal error." +msgstr "El plugin no ha sido reactivado debido a un error fatal." + +#: wp-admin/update.php:108 +msgid "Installing Plugin: %s" +msgstr "Instalando plugin: %s" + +#: wp-admin/update.php:130 +msgid "Upload Plugin" +msgstr "Subir plugin" + +#: wp-admin/update.php:135 +msgid "Installing Plugin from uploaded file: %s" +msgstr "Instalando plugin desde el archivo: %s" + +#: wp-admin/update.php:214 +msgid "Installing Theme: %s" +msgstr "Instalando tema: %s" + +#: wp-admin/update.php:235 +msgid "Upload Theme" +msgstr "Subir tema" + +#: wp-admin/update.php:241 +msgid "Installing Theme from uploaded file: %s" +msgstr "Instalando tema desde el archivo: %s" + +#: wp-admin/upgrade.php:67 +msgid "Your WordPress database is already up-to-date!" +msgstr "¡Tu base de datos de WordPress ya está actualizada!" + +#: wp-admin/upgrade.php:104 +msgid "%s queries" +msgstr "%s consultas" + +#: wp-admin/upgrade.php:106 +msgid "%s seconds" +msgstr "%s segundos" + +#: wp-admin/upload.php:42 +msgid "You are not allowed to scan for lost attachments." +msgstr "No tienes autorización para buscar adjuntos perdidos." + +#: wp-admin/upload.php:99 +msgid "You are not allowed to move this post to the trash." +msgstr "No tienes autorización para mover esta entrada a la papelera." + +#: wp-admin/upload.php:111 +msgid "You are not allowed to move this post out of the trash." +msgstr "No tienes autorización para sacar esta entrada de la papelera." + +#: wp-admin/upload.php:123 +msgid "You are not allowed to delete this post." +msgstr "No tienes autorización para borrar esta entrada." + +#: wp-admin/upload.php:198 +msgid "Reattached %d attachment." +msgid_plural "Reattached %d attachments." +msgstr[0] "Se ha vuelto a adjuntar %d adjunto." +msgstr[1] "Se han vuelto a adjuntar %d adjuntos." + +#: wp-admin/upload.php:203 +msgid "Media attachment permanently deleted." +msgid_plural "%d media attachments permanently deleted." +msgstr[0] "Medio adjunto borrado permanentemente." +msgstr[1] "%d medios adjuntos borrados permanentemente." + +#: wp-admin/upload.php:208 +msgid "Media attachment moved to the trash." +msgid_plural "%d media attachments moved to the trash." +msgstr[0] "Medio adjunto movido a la papelera." +msgstr[1] "%d medios adjuntos movidos a la papelera." + +#: wp-admin/upload.php:214 +msgid "Media attachment restored from the trash." +msgid_plural "%d media attachments restored from the trash." +msgstr[0] "Medio adjunto restaurado de la papelera." +msgstr[1] "%d medios adjuntos restaurados de la papelera." + +#: wp-admin/upload.php:219 +msgid "Media permanently deleted." +msgstr "Medio borrado permanentemente." + +#: wp-admin/upload.php:220 +msgid "Error saving media attachment." +msgstr "Error al guardar el archivo." + +#: wp-admin/upload.php:221 +msgid "Media moved to the trash." +msgstr "Medios movidos a la papelera." + +#: wp-admin/upload.php:222 +msgid "Media restored from the trash." +msgstr "Medios restaurados de la papelera." + +#: wp-admin/includes/class-wp-media-list-table.php:57 +msgctxt "uploaded files" +msgid "All (%s)" +msgid_plural "All (%s)" +msgstr[0] "Todo (%s)" +msgstr[1] "Todos (%s)" + +#: wp-admin/includes/class-wp-media-list-table.php:69 +msgctxt "detached files" +msgid "Unattached (%s)" +msgid_plural "Unattached (%s)" +msgstr[0] "Sin adjuntar (%s)" +msgstr[1] "Sin adjuntar (%s)" + +#: wp-admin/includes/class-wp-media-list-table.php:72 +msgctxt "uploaded files" +msgid "Trash (%s)" +msgid_plural "Trash (%s)" +msgstr[0] "Papelera (%s)" +msgstr[1] "Papelera (%s)" + +#: wp-admin/includes/class-wp-media-list-table.php:81 +msgid "Attach to a post" +msgstr "Adjuntar a una entrada" + +#: wp-admin/includes/class-wp-media-list-table.php:98 +msgid "Scan for lost attachments" +msgstr "Buscar adjuntos perdidos" + +#: wp-admin/user-edit.php:28 +msgid "Edit User" +msgstr "Editar usuario" + +#: wp-admin/user-edit.php:71 +msgid "Use https" +msgstr "Usar https" + +#: wp-admin/user-edit.php:72 +msgid "Always use https when visiting the admin" +msgstr "Usar siempre https para visitar la administración" + +#: wp-admin/user-edit.php:95 wp-admin/user-edit.php:124 +#: wp-admin/user-edit.php:188 +msgid "You do not have permission to edit this user." +msgstr "No tienes autorización para editar este usuario." + +#: wp-admin/user-edit.php:201 +msgid "User updated." +msgstr "El usuario ha sido actualizado." + +#: wp-admin/user-edit.php:241 +msgid "Personal Options" +msgstr "Opciones personales" + +#: wp-admin/user-edit.php:246 +msgid "Visual Editor" +msgstr "Editor visual" + +#: wp-admin/user-edit.php:247 +msgid "Disable the visual editor when writing" +msgstr "Desactivar el editor visual al escribir" + +#: wp-admin/includes/misc.php:582 wp-admin/user-edit.php:252 +msgid "Admin Color Scheme" +msgstr "Esquema de color de administración" + +#: wp-admin/user-edit.php:270 +msgid "Enable keyboard shortcuts for comment moderation." +msgstr "Activar los atajos del teclado para la moderación de comentarios." + +#: wp-admin/user-edit.php:348 wp-admin/user-new.php:365 +msgid "First Name" +msgstr "Nombre" + +#: wp-admin/user-edit.php:353 wp-admin/user-new.php:369 +msgid "Last Name" +msgstr "Apellidos" + +#: wp-admin/user-edit.php:358 +msgid "Nickname" +msgstr "Alias" + +#: wp-admin/user-edit.php:363 +msgid "Display name publicly as" +msgstr "Mostrar este nombre públicamente" + +#: wp-admin/user-edit.php:399 +msgid "Contact Info" +msgstr "Información de contacto" + +#: wp-admin/user-edit.php:444 +msgid "About Yourself" +msgstr "Acerca de ti" + +#: wp-admin/user-edit.php:444 +msgid "About the user" +msgstr "Acerca del usuario" + +#: wp-admin/user-edit.php:448 +msgid "Biographical Info" +msgstr "Información biográfica" + +#: wp-admin/user-edit.php:450 +msgid "Share a little biographical information to fill out your profile. This may be shown publicly." +msgstr "Incluye alguna información biográfica en tu perfil. Podrá mostrarse públicamente." + +#: wp-admin/user-edit.php:459 +msgid "New Password" +msgstr "Nueva contraseña" + +#: wp-admin/user-edit.php:463 +msgid "If you would like to change the password type a new one. Otherwise leave this blank." +msgstr "Si deseas cambiar la contraseña del usuario, escribe aquí dos veces la nueva. En caso contrario, deja las casillas en blanco." + +#: wp-admin/user-edit.php:470 +msgid "Type your new password again." +msgstr "Teclea tu nueva contraseña otra vez." + +#: wp-admin/user-edit.php:519 +msgid "Additional Capabilities" +msgstr "Capacidades adicionales" + +#: wp-admin/user-edit.php:543 +msgid "Update Profile" +msgstr "Actualizar perfil" + +#: wp-admin/user-edit.php:543 +msgid "Update User" +msgstr "Actualizar usuario" + +#: wp-admin/user-new.php:88 +msgid "[%s] Joining confirmation" +msgstr "[%s] Esperando confirmación" + +#: wp-admin/user-new.php:211 +msgid "Invitation email sent to new user. A confirmation link must be clicked before their account is created." +msgstr "La invitación ha sido enviada al nuevo usuario por correo electrónico. Deberá hacer clic en el enlace de confirmación para que su cuenta sea creada." + +#: wp-admin/user-new.php:402 +msgid "Send Password?" +msgstr "¿Enviar Contraseña?" + +#: wp-admin/user-new.php:403 +msgid "Send this password to the new user by email." +msgstr "Enviar esta contraseña al nuevo usuario por correo electrónico." + +#: wp-admin/user-new.php:307 wp-admin/user-new.php:420 +msgid "Skip Confirmation Email" +msgstr "No enviar el correo electrónico de confirmación" + +#: wp-admin/users.php:104 wp-admin/users.php:121 +msgid "You can’t edit that user." +msgstr "No puedes editar ese usuario." + +#: wp-admin/users.php:163 wp-admin/users.php:205 +msgid "You can’t delete users." +msgstr "No puedes borrar usuarios." + +#: wp-admin/users.php:221 +msgid "Delete Users" +msgstr "Borrar usuarios" + +#: wp-admin/users.php:254 +msgid "There are no valid users selected for deletion." +msgstr "No se han seleccionado usuarios válidos para borrar." + +#: wp-admin/users.php:385 +msgid "New user created." +msgstr "Nuevo usuario creado." + +#: wp-admin/users.php:392 +msgid "The current user’s role must have user editing capabilities." +msgstr "El perfil del usuario actual debería poder editar usuarios." + +#: wp-admin/users.php:393 +msgid "Other user roles have been changed." +msgstr "Se han cambiado los perfiles de los otros usuarios." + +#: wp-admin/users.php:396 +msgid "You can’t delete the current user." +msgstr "No puedes borrar el usuario actual." + +#: wp-admin/users.php:397 +msgid "Other users have been deleted." +msgstr "Se han eliminado los otros usuarios." + +#: wp-admin/includes/class-wp-users-list-table.php:115 +msgid "%1$s (%2$s)" +msgstr "%1$s (%2$s)" + +#: wp-admin/includes/class-wp-users-list-table.php:142 +#: wp-admin/includes/class-wp-users-list-table.php:144 +msgid "Change role to…" +msgstr "Cambiar perfil a…" + +#: wp-admin/includes/class-wp-users-list-table.php:148 +msgid "Change" +msgstr "Cambiar" + +#: wp-admin/widgets.php:110 +msgid "Inactive Widgets" +msgstr "Widgets inactivos" + +#: wp-admin/widgets.php:77 +msgid "The theme you are currently using isn’t widget-aware, meaning that it has no sidebars that you are able to change. For information on making your theme widget-aware, please follow these instructions." +msgstr "Estás viendo este mensaje porque el tema que estás usando actualmente no está preparado para widgets. Esto significa que no tiene barras laterales que puedas cambiar. Para información de cómo preparar tu tema para widgets, por favor sigue estas instrucciones." + +#: wp-admin/widgets.php:234 +msgid "Widget %s" +msgstr "Widget %s" + +#: wp-admin/widgets.php:245 +msgid "Select both the sidebar for this widget and the position of the widget in that sidebar." +msgstr "Selecciona la barra lateral y la posición en la que irá el widget." + +#: wp-admin/custom-background.php:276 wp-admin/widgets.php:247 +msgid "Position" +msgstr "Posición" + +#: wp-admin/widgets.php:285 +msgid "Save Widget" +msgstr "Guardar Widget" + +#: wp-admin/widgets.php:301 +msgid "Changes saved." +msgstr "Cambios guardados." + +#: wp-admin/widgets.php:305 +msgid "Error while saving." +msgstr "Error al guardar los cambios." + +#: wp-admin/widgets.php:306 +msgid "Error in displaying the widget settings form." +msgstr "Error al mostrar el formulario con las opciones del widget." + +#: wp-admin/widgets.php:334 +msgid "Available Widgets" +msgstr "Widgets disponibles" + +#: wp-admin/widgets.php:113 +msgid "Drag widgets here to remove them from the sidebar but keep their settings." +msgstr "Arrastra los widgets aquí para eliminarlos de la barra lateral pero manteniendo su configuración." + +#: wp-admin/export.php:162 +msgid "Categories:" +msgstr "Categorías:" + +#: wp-admin/comment.php:132 +msgid "Permanently Delete Comment" +msgstr "Borrar comentario permanentemente" + +#: wp-admin/comment.php:135 +msgid "You are about to approve the following comment:" +msgstr "Estás a punto de aprobar el siguiente comentario:" + +#: wp-admin/comment.php:136 +msgid "Approve Comment" +msgstr "Aprobar comentario" + +#: wp-admin/comment.php:297 +msgid "Unknown action." +msgstr "Acción desconocida." + +#: wp-admin/custom-background.php:182 wp-admin/includes/theme.php:210 +msgid "Custom Background" +msgstr "Fondo personalizado" + +#: wp-admin/custom-background.php:185 +msgid "Background updated. Visit your site to see how it looks." +msgstr "Fondo actualizado. Visita tu sitio para ver cómo queda." + +#: wp-admin/custom-background.php:252 wp-admin/custom-header.php:519 +msgid "Choose an image from your computer:" +msgstr "Elige una imagen desde tu ordenador:" + +#: wp-admin/custom-header.php:453 wp-admin/includes/theme.php:212 +msgid "Custom Header" +msgstr "Cabecera personalizada" + +#: wp-admin/custom-header.php:457 +msgid "Header updated. Visit your site to see how it looks." +msgstr "Cabezera actualizada. Visita tu sitio para ver los cambios." + +#: wp-admin/custom-header.php:712 wp-admin/custom-header.php:853 +msgid "Image Processing Error" +msgstr "Error en el procesado de la imagen" + +#: wp-admin/custom-header.php:729 +msgid "Choose the part of the image you want to use as your header." +msgstr "Elige la parte de la imagen que quieras usar como cabecera." + +#: wp-admin/custom-header.php:923 +msgid "You do not have permission to customize headers." +msgstr "No tienes autorización para personalizar cabeceras." + +#: wp-admin/includes/class-wp-links-list-table.php:141 +#: wp-admin/includes/class-wp-media-list-table.php:229 +#: wp-admin/includes/class-wp-media-list-table.php:247 +#: wp-admin/includes/class-wp-posts-list-table.php:568 +#: wp-admin/includes/class-wp-terms-list-table.php:253 +#: wp-admin/includes/dashboard.php:413 +msgid "Edit “%s”" +msgstr "Editar “%s”" + +#: wp-admin/includes/class-wp-media-list-table.php:405 +#: wp-admin/includes/class-wp-media-list-table.php:421 +#: wp-admin/includes/class-wp-posts-list-table.php:602 +#: wp-admin/includes/meta-boxes.php:295 +msgid "Trash" +msgstr "Papelera" + +#: wp-admin/includes/class-wp-media-list-table.php:410 +#: wp-admin/includes/class-wp-media-list-table.php:429 +#: wp-admin/includes/class-wp-posts-list-table.php:611 +msgid "View “%s”" +msgstr "Ver “%s”" + +#: wp-admin/includes/class-wp-media-list-table.php:285 +#: wp-admin/includes/class-wp-posts-list-table.php:624 +msgid "Unpublished" +msgstr "Sin publicar" + +#: wp-admin/includes/class-wp-posts-list-table.php:627 +msgid "Y/m/d g:i:s A" +msgstr "d/m/Y G:i" + +#: wp-admin/includes/class-wp-media-list-table.php:291 +msgid "%s from now" +msgstr "%s desde ahora" + +#: wp-admin/includes/class-wp-media-list-table.php:325 +msgid "(Unattached)" +msgstr "(Sin adjuntar)" + +#: wp-admin/includes/class-wp-media-list-table.php:330 +#: wp-admin/includes/class-wp-media-list-table.php:412 +msgid "Attach" +msgstr "Adjuntar" + +#: wp-admin/includes/class-wp-list-table.php:465 +msgid "%s pending" +msgstr "%s pendientes" + +#: wp-admin/includes/class-wp-media-list-table.php:124 +msgid "No media attachments found." +msgstr "No se han encontrado adjuntos." + +#: wp-admin/edit-comments.php:185 +msgid "%s comment approved" +msgid_plural "%s comments approved" +msgstr[0] "%s comentario aprobado" +msgstr[1] "%s comentarios aprobados" + +#: wp-admin/edit-comments.php:189 +msgid "%s comment marked as spam." +msgid_plural "%s comments marked as spam." +msgstr[0] "%s comentario marcado como spam." +msgstr[1] "%s comentarios marcados como spam." + +#: wp-admin/edit-comments.php:193 +msgid "%s comment restored from the spam" +msgid_plural "%s comments restored from the spam" +msgstr[0] "%s comentario recuperado de spam" +msgstr[1] "%s comentarios recuperados de spam" + +#: wp-admin/edit-comments.php:204 +msgid "%s comment permanently deleted" +msgid_plural "%s comments permanently deleted" +msgstr[0] "%s comentario borrado permanentemente" +msgstr[1] "%s comentarios borrados permanentemente" + +#: wp-admin/includes/class-wp-comments-list-table.php:159 +msgctxt "comments" +msgid "All" +msgid_plural "All" +msgstr[0] "Todo" +msgstr[1] "Todos" + +#: wp-admin/includes/class-wp-comments-list-table.php:160 +msgid "Pending (%s)" +msgid_plural "Pending (%s)" +msgstr[0] "Pendiente (%s)" +msgstr[1] "Pendientes (%s)" + +#: wp-admin/includes/class-wp-comments-list-table.php:161 +msgid "Approved" +msgid_plural "Approved" +msgstr[0] "Aprobado" +msgstr[1] "Aprobados" + +#: wp-admin/includes/class-wp-comments-list-table.php:162 +msgid "Spam (%s)" +msgid_plural "Spam (%s)" +msgstr[0] "Spam (%s)" +msgstr[1] "Spam (%s)" + +#: wp-admin/includes/class-wp-comments-list-table.php:163 +msgid "Trash (%s)" +msgid_plural "Trash (%s)" +msgstr[0] "Papelera (%s)" +msgstr[1] "Papelera (%s)" + +#: wp-admin/edit-comments.php:229 +msgid "Search Comments" +msgstr "Buscar comentarios" + +#: wp-admin/includes/deprecated.php:594 +msgid "Displaying %s–%s of %s" +msgstr "Mostrando %s–%s de %s" + +#: wp-admin/edit.php:191 wp-admin/includes/class-wp-list-table.php:315 +msgid "Bulk Actions" +msgstr "Acciones en lote" + +#: wp-admin/includes/class-wp-comments-list-table.php:209 +#: wp-admin/includes/class-wp-comments-list-table.php:437 +#: wp-admin/includes/class-wp-comments-list-table.php:442 +#: wp-admin/includes/dashboard.php:452 +msgid "Unapprove" +msgstr "Rechazar" + +#: wp-admin/includes/class-wp-comments-list-table.php:211 +#: wp-admin/includes/class-wp-comments-list-table.php:439 +#: wp-admin/includes/class-wp-comments-list-table.php:441 +#: wp-admin/includes/dashboard.php:451 +msgid "Approve" +msgstr "Aprobar" + +#: wp-admin/edit-form-comment.php:116 +#: wp-admin/includes/class-wp-comments-list-table.php:223 +#: wp-admin/includes/class-wp-posts-list-table.php:193 +#: wp-admin/includes/media.php:1239 wp-admin/includes/meta-boxes.php:214 +msgid "Move to Trash" +msgstr "Mover a la papelera" + +#: wp-admin/includes/class-wp-comments-list-table.php:236 +msgid "Show all comment types" +msgstr "Mostrar todos los comentarios" + +#: wp-admin/includes/class-wp-comments-list-table.php:247 +#: wp-admin/includes/class-wp-posts-list-table.php:974 +msgid "Pings" +msgstr "Pings" + +#: wp-admin/includes/class-wp-comments-list-table.php:261 +#: wp-admin/includes/class-wp-links-list-table.php:72 +#: wp-admin/includes/class-wp-media-list-table.php:94 +#: wp-admin/includes/class-wp-posts-list-table.php:219 +msgid "Filter" +msgstr "Filtrar" + +#: wp-admin/includes/class-wp-comments-list-table.php:266 +msgid "Empty Spam" +msgstr "Vaciar spam" + +#: wp-admin/includes/class-wp-comments-list-table.php:266 +#: wp-admin/includes/class-wp-media-list-table.php:100 +#: wp-admin/includes/class-wp-posts-list-table.php:223 +msgid "Empty Trash" +msgstr "Vaciar papelera" + +#: wp-admin/includes/class-wp-comments-list-table.php:148 +msgid "No comments found." +msgstr "Sin comentarios." + +#: wp-admin/edit-form-advanced.php:41 +msgid "Post updated. View post" +msgstr "Entrada actualizada. Vista previa" + +#: wp-admin/edit-form-advanced.php:42 wp-admin/edit-form-advanced.php:58 +msgid "Custom field updated." +msgstr "Campo personalizado actualizado." + +#: wp-admin/edit-form-advanced.php:43 wp-admin/edit-form-advanced.php:59 +msgid "Custom field deleted." +msgstr "Campo personalizado borrado." + +#: wp-admin/edit-form-advanced.php:44 +msgid "Post updated." +msgstr "Entrada actualizada." + +#: wp-admin/edit-form-advanced.php:46 +msgid "Post restored to revision from %s" +msgstr "Entrada restaurada a la revisión %s" + +#: wp-admin/edit-form-advanced.php:47 +msgid "Post published. View post" +msgstr "Entrada publicada. Ver entrada" + +#: wp-admin/edit-form-advanced.php:48 +msgid "Post saved." +msgstr "Entrada guardada." + +#: wp-admin/edit-form-advanced.php:49 +msgid "Post submitted. Preview post" +msgstr "Entrada enviada. Vista previa" + +#: wp-admin/edit-form-advanced.php:50 +msgid "Post scheduled for: %1$s. Preview post" +msgstr "Entrada programada el: %1$s. Vista previa" + +#: wp-admin/edit-form-advanced.php:52 wp-admin/edit-form-advanced.php:65 +#: wp-admin/edit-form-comment.php:103 wp-admin/includes/meta-boxes.php:155 +#: wp-admin/includes/meta-boxes.php:277 wp-admin/includes/revision.php:170 +msgid "M j, Y @ G:i" +msgstr "j F Y G:i a" + +#: wp-admin/edit-form-advanced.php:53 +msgid "Post draft updated. Preview post" +msgstr "Entrada actualizada. Vista previa" + +#: wp-admin/edit-form-advanced.php:57 +msgid "Page updated. View page" +msgstr "Página actualizada. Vista previa" + +#: wp-admin/edit-form-advanced.php:60 +msgid "Page updated." +msgstr "Página actualizada." + +#: wp-admin/edit-form-advanced.php:61 +msgid "Page restored to revision from %s" +msgstr "Página restaurada desde la revisión %s" + +#: wp-admin/edit-form-advanced.php:62 +msgid "Page published. View page" +msgstr "Página publicada. Vista previa" + +#: wp-admin/edit-form-advanced.php:64 +msgid "Page submitted. Preview page" +msgstr "Página enviada. Vista previa" + +#: wp-admin/edit-form-advanced.php:65 +msgid "Page scheduled for: %1$s. Preview page" +msgstr "Página programada para: %1$s. Vista previa" + +#: wp-admin/edit-form-advanced.php:66 +msgid "Page draft updated. Preview page" +msgstr "Borrador de página actualizado. Vista previa" + +#: wp-admin/edit-form-advanced.php:180 +msgid "Send Trackbacks" +msgstr "Enviar trackbacks" + +#: wp-admin/edit-form-advanced.php:183 +msgid "Custom Fields" +msgstr "Campos personalizados" + +#: wp-admin/edit-form-advanced.php:196 wp-admin/menu.php:218 +msgid "Discussion" +msgstr "Comentarios" + +#: wp-admin/edit-form-advanced.php:202 +#: wp-admin/includes/class-wp-posts-list-table.php:800 +#: wp-admin/includes/class-wp-terms-list-table.php:101 +#: wp-admin/includes/class-wp-terms-list-table.php:344 +#: wp-admin/includes/meta-boxes.php:592 +msgid "Slug" +msgstr "Slug" + +#: wp-admin/edit-form-advanced.php:495 wp-admin/includes/ajax-actions.php:1812 +msgid "Last edited by %1$s on %2$s at %3$s" +msgstr "Última edición por %1$s el %2$s a las %3$s" + +#: wp-admin/edit-form-advanced.php:497 wp-admin/includes/ajax-actions.php:1814 +msgid "Last edited on %1$s at %2$s" +msgstr "Última edición el %1$s a las %2$s" + +#: wp-admin/edit-form-comment.php:81 +msgid "View Comment" +msgstr "Ver comentario" + +#: wp-admin/edit-form-comment.php:104 +msgid "Submitted on: %1$s" +msgstr "Enviado el: %1$s" + +#: wp-admin/includes/template.php:403 +msgid "Update Comment" +msgstr "Actualizar comentario" + +#: wp-admin/edit-form-comment.php:32 +msgid "Name:" +msgstr "Nombre:" + +#: wp-admin/edit-form-comment.php:39 +msgid "E-mail (%s):" +msgstr "Correo electrónico (%s):" + +#: wp-admin/edit-form-comment.php:39 +msgid "send e-mail" +msgstr "enviar correo electrónico" + +#: wp-admin/edit-form-comment.php:41 +msgid "E-mail:" +msgstr "Correo electrónico:" + +#: wp-admin/edit-form-comment.php:50 +msgid "visit site" +msgstr "visitar sitio" + +#: wp-admin/edit-form-comment.php:52 +msgid "URL (%s):" +msgstr "URL (%s):" + +#: wp-admin/edit-form-comment.php:54 +msgid "URL:" +msgstr "URL:" + +#: wp-admin/edit-tag-form.php:47 wp-admin/edit-tags.php:459 +msgid "The “slug” is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens." +msgstr "El “slug” es la versión amigable de la URL del nombre. Suele estar en minúsculas y contiene sólo letras, números y guiones." + +#: wp-admin/edit-tag-form.php:64 wp-admin/edit-tags.php:506 +msgid "The description is not prominent by default; however, some themes may show it." +msgstr "La descripción no suele mostrarse por defecto, sin embargo hay algunos temas que puede que la muestren." + +#: wp-admin/edit-link-form.php:14 +msgid "Links / Edit Link" +msgstr "Enlaces / Editar enlace" + +#: wp-admin/edit-link-form.php:15 wp-admin/includes/meta-boxes.php:723 +msgid "Update Link" +msgstr "Actualizar enlace" + +#: wp-admin/edit-link-form.php:19 +msgid "Links / Add New Link" +msgstr "Enlaces / Añadir nuevo enlace" + +#: wp-admin/edit-link-form.php:30 wp-admin/includes/nav-menu.php:174 +#: wp-admin/includes/nav-menu.php:1227 +msgid "Link Relationship (XFN)" +msgstr "Relación con el enlace (XFN)" + +#: wp-admin/edit-link-form.php:76 +msgid "Link added." +msgstr "Enlace añadido." + +#: wp-admin/edit-link-form.php:97 +msgid "Example: Nifty blogging software" +msgstr "Ejemplo: Estupendo software de publicación" + +#: wp-admin/edit-link-form.php:102 +msgid "Web Address" +msgstr "Dirección web" + +#: wp-admin/edit-link-form.php:105 +msgid "Example: http://wordpress.org/ — don’t forget the http://" +msgstr "Ejemplo: http://wordpress.org/ —no olvides poner http://" + +#: wp-admin/edit-link-form.php:113 +msgid "This will be shown when someone hovers over the link in the blogroll, or optionally below the link." +msgstr "Esto se mostrará cuando alguien pase el cursor sobre el enlace en los sitios de interés, u opcionalmente a debajo del enlace." + +#: wp-admin/edit-tag-form.php:41 wp-admin/edit-tags.php:453 +msgid "The name is how it appears on your site." +msgstr "El nombre es cómo aparecerá en tu sitio." + +#: wp-admin/edit-tag-form.php:56 wp-admin/edit-tags.php:499 +msgid "Categories, unlike tags, can have a hierarchy. You might have a Jazz category, and under that have children categories for Bebop and Big Band. Totally optional." +msgstr "Las categorías, a diferencia de las etiquetas, pueden tener jerarquías. Podrías tener una categoría de Jazz, y por debajo las categorías Bebop y Big Band. Totalmente opcional." + +#: wp-admin/edit-tags.php:258 +msgid "Item added." +msgstr "Añadido." + +#: wp-admin/edit-tags.php:259 +msgid "Item deleted." +msgstr "Eliminado." + +#: wp-admin/edit-tags.php:260 +msgid "Item updated." +msgstr "Actualizado." + +#: wp-admin/edit-tags.php:261 +msgid "Item not added." +msgstr "No añadido." + +#: wp-admin/edit-tags.php:263 +msgid "Items deleted." +msgstr "Eliminados." + +#: wp-admin/edit-tags.php:340 +msgid "Note:
      Deleting a category does not delete the posts in that category. Instead, posts that were only assigned to the deleted category are set to the category %s." +msgstr "Nota:
      Al borrar una categoría no borrarás las entradas que hay en ella. En su lugar, las entradas que sólo estén asignadas a esa categoría se asignarán a la categoría %s." + +#: wp-admin/edit.php:116 wp-admin/post.php:289 +msgid "You are not allowed to delete this item." +msgstr "No tienes autorización para borrar este elemento." + +#: wp-admin/edit.php:237 +msgid "%s post updated." +msgid_plural "%s posts updated." +msgstr[0] "%s entrada actualizada." +msgstr[1] "%s entradas actualizadas." + +#: wp-admin/includes/class-wp-posts-list-table.php:139 +msgctxt "posts" +msgid "Mine (%s)" +msgid_plural "Mine (%s)" +msgstr[0] "Mío (%s)" +msgstr[1] "Míos (%s)" + +#: wp-admin/includes/class-wp-posts-list-table.php:150 +msgctxt "posts" +msgid "All (%s)" +msgid_plural "All (%s)" +msgstr[0] "Todo (%s)" +msgstr[1] "Todos (%s)" + +#: wp-admin/includes/class-wp-list-table.php:409 +#: wp-admin/includes/media.php:2085 +msgid "Show all dates" +msgstr "Mostrar todas las fechas" + +#: wp-admin/includes/class-wp-links-list-table.php:65 +#: wp-admin/includes/class-wp-posts-list-table.php:209 +msgid "View all categories" +msgstr "Ver todas las categorías" + +#: wp-admin/includes/class-wp-list-table.php:438 +msgid "List View" +msgstr "Ver lista" + +#: wp-admin/includes/class-wp-list-table.php:439 +msgid "Excerpt View" +msgstr "Ver extracto" + +#: wp-admin/export.php:17 wp-admin/menu.php:208 +msgid "Export" +msgstr "Exportar" + +#: wp-admin/export.php:149 +msgid "When you click the button below WordPress will create an XML file for you to save to your computer." +msgstr "Cuando hagas clic en el botón de abajo, WordPress creará un archivo XML para que lo guardes en tu ordenador." + +#: wp-admin/export.php:150 +msgid "This format, which we call WordPress eXtended RSS or WXR, will contain your posts, pages, comments, custom fields, categories, and tags." +msgstr "Este formato, que llamamos WordPress eXtended RSS (RSS ampliado de WordPress) o WXR, contendrá todas tus entradas, comentarios, campos personalizados, categorías y etiquetas." + +#: wp-admin/export.php:239 +msgid "Download Export File" +msgstr "Descargar el archivo de exportación" + +#: wp-admin/import.php:75 +msgid "No importers are available." +msgstr "No hay importadores disponibles." + +#: wp-admin/includes/media.php:1235 wp-admin/upgrade.php:68 +#: wp-admin/upgrade.php:100 +msgid "Continue" +msgstr "Continuar" + +#: wp-admin/export.php:159 wp-admin/includes/class-wp-terms-list-table.php:108 +#: wp-admin/includes/class-wp-users-list-table.php:169 wp-admin/menu.php:49 +msgid "Posts" +msgstr "Entradas" + +#: wp-admin/includes/import.php:138 +msgid "Blogger" +msgstr "Blogger" + +#: wp-admin/includes/import.php:150 +msgid "LiveJournal" +msgstr "LiveJournal" + +#: wp-admin/includes/import.php:156 +msgid "Movable Type and TypePad" +msgstr "Movable Type y TypePad" + +#: wp-admin/includes/import.php:162 +msgid "Blogroll" +msgstr "Sitios de interés" + +#: wp-admin/includes/bookmark.php:205 +msgid "Could not update link in the database" +msgstr "No ha sido posible actualizar el enlace en la base de datos." + +#: wp-admin/includes/bookmark.php:212 +msgid "Could not insert link into the database" +msgstr "No ha sido posible insertar el enlace en la base de datos." + +#: wp-admin/includes/class-wp-filesystem-base.php:272 +msgid "Changing to %s" +msgstr "Cambiando a %s" + +#: wp-admin/includes/class-wp-filesystem-base.php:283 +msgid "Found %s" +msgstr "Encontrado %s" + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:28 +msgid "The ftp PHP extension is not available" +msgstr "La extensión PHP de FTP no está disponible." + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:43 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:37 +msgid "FTP hostname is required" +msgstr "El nombre del servidor del FTP es necesario" + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:52 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:46 +msgid "FTP username is required" +msgstr "El nombre de usuario del FTP es necesario" + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:57 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:51 +msgid "FTP password is required" +msgstr "La contraseña del FTP es necesaria" + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:73 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:63 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:68 +msgid "Failed to connect to FTP Server %1$s:%2$s" +msgstr "Ha sido imposible conectar con el servidor FTP %1$s:%2$s" + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:78 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:73 +#: wp-admin/includes/class-wp-filesystem-ssh2.php:110 +msgid "Username/Password incorrect for %s" +msgstr "Nombre de usuario y/o contraseña incorrecto/s para %s" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:50 +msgid "The ssh2 PHP extension is not available" +msgstr "La extesión PHP de SSH2 no está disponible" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:54 +msgid "The ssh2 PHP extension is available, however, we require the PHP5 function stream_get_contents()" +msgstr "La extensión ssh2 de PHP está disponible, no obstante es necesaria la función de PHP5 stream_get_contents()" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:65 +msgid "SSH2 hostname is required" +msgstr "El nombre del servidor del SSH2 es necesario" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:81 +msgid "SSH2 username is required" +msgstr "El nombre de usuario del SSH2 es necesario" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:89 +msgid "SSH2 password is required" +msgstr "La contraseña del SSH2 es necesaria" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:104 +msgid "Failed to connect to SSH2 Server %1$s:%2$s" +msgstr "Ha sido imposible conectar con el SSH2 %1$s:%2$s" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:115 +msgid "Public and Private keys incorrect for %s" +msgstr "Claves públicas y privadas incorrectas para %s" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:131 +msgid "Unable to perform command: %s" +msgstr "No se pudo realizar el comando: %s" + +#: wp-admin/includes/class-wp-upgrader.php:41 +msgid "Invalid Data provided." +msgstr "Datos facilitado no válidos." + +#: wp-admin/includes/class-wp-upgrader.php:42 +#: wp-admin/includes/class-wp-upgrader.php:1905 wp-admin/includes/file.php:542 +#: wp-admin/includes/plugin.php:777 wp-admin/includes/theme.php:53 +msgid "Could not access filesystem." +msgstr "No ha sido posible acceder al sistema de archivos." + +#: wp-admin/includes/class-wp-upgrader.php:43 wp-admin/includes/plugin.php:780 +#: wp-admin/includes/theme.php:56 +msgid "Filesystem error." +msgstr "Error del sistema de archivos." + +#: wp-admin/includes/class-wp-upgrader.php:44 +msgid "Unable to locate WordPress Root directory." +msgstr "Ha sido imposible localizar el directorio de WordPress." + +#: wp-admin/includes/class-wp-upgrader.php:45 +msgid "Unable to locate WordPress Content directory (wp-content)." +msgstr "Ha sido imposible localizar el directorio de contenidos de WordPress (wp-content)." + +#: wp-admin/includes/class-wp-upgrader.php:46 wp-admin/includes/plugin.php:785 +msgid "Unable to locate WordPress Plugin directory." +msgstr "Ha sido imposible localizar el directorio de plugins de WordPress." + +#: wp-admin/includes/class-wp-upgrader.php:47 +msgid "Unable to locate WordPress Theme directory." +msgstr "Ha sido imposible localizar el directorio de temas de WordPress." + +#: wp-admin/includes/class-wp-upgrader.php:49 +msgid "Unable to locate needed folder (%s)." +msgstr "Ha sido imposible localizar la carpeta %s." + +#: wp-admin/includes/class-wp-upgrader.php:51 +msgid "Download failed." +msgstr "Descarga fallida." + +#: wp-admin/includes/class-wp-upgrader.php:52 +msgid "Installing the latest version…" +msgstr "Instalando última versión…" + +#: wp-admin/includes/class-wp-upgrader.php:54 +msgid "Destination folder already exists." +msgstr "La carpeta ya existe." + +#: wp-admin/includes/class-wp-upgrader.php:55 wp-admin/includes/file.php:650 +#: wp-admin/includes/file.php:753 wp-admin/includes/file.php:804 +#: wp-admin/includes/update-core.php:994 +msgid "Could not create directory." +msgstr "No ha sido posible crear el directorio" + +#: wp-admin/includes/file.php:601 wp-admin/includes/file.php:705 +msgid "Incompatible Archive." +msgstr "Archivo incompatible." + +#: wp-admin/includes/class-wp-upgrader.php:58 +#: wp-admin/includes/update-core.php:784 +msgid "Enabling Maintenance mode…" +msgstr "Activando el modo mantenimiento…" + +#: wp-admin/includes/class-wp-upgrader.php:59 +#: wp-admin/includes/update-core.php:856 +msgid "Disabling Maintenance mode…" +msgstr "Desactivando el modo de mantenimiento…" + +#: wp-admin/includes/class-wp-upgrader.php:413 +msgid "The plugin is at the latest version." +msgstr "Tienes la última versión del plugin." + +#: wp-admin/includes/class-wp-upgrader.php:415 +#: wp-admin/includes/class-wp-upgrader.php:723 +#: wp-admin/includes/class-wp-upgrader.php:1307 +msgid "Downloading update from %s…" +msgstr "Descargando paquete de instalación desde %s…" + +#: wp-admin/includes/class-wp-upgrader.php:416 +#: wp-admin/includes/class-wp-upgrader.php:724 +#: wp-admin/includes/class-wp-upgrader.php:1135 +#: wp-admin/includes/class-wp-upgrader.php:1308 +msgid "Unpacking the update…" +msgstr "Descomprimiendo actualización…" + +#: wp-admin/includes/class-wp-upgrader.php:417 +msgid "Removing the old version of the plugin…" +msgstr "Eliminando la antigua versión del plugin…" + +#: wp-admin/includes/class-wp-upgrader.php:418 +msgid "Could not remove the old plugin." +msgstr "No ha sido posible eliminar la versión anterior del plugin." + +#: wp-admin/includes/class-wp-upgrader.php:424 +#: wp-admin/includes/class-wp-upgrader.php:732 +msgid "Install package not available." +msgstr "El paquete de instalación no está disponible." + +#: wp-admin/includes/class-wp-upgrader.php:425 +#: wp-admin/includes/class-wp-upgrader.php:733 +msgid "Downloading install package from %s…" +msgstr "Descargando el archivo de instalación de %s…" + +#: wp-admin/includes/class-wp-upgrader.php:426 +#: wp-admin/includes/class-wp-upgrader.php:734 +msgid "Unpacking the package…" +msgstr "Descomprimiendo…" + +#: wp-admin/includes/class-wp-upgrader.php:427 +msgid "Installing the plugin…" +msgstr "Instalando el plugin…" + +#: wp-admin/includes/class-wp-upgrader.php:429 +msgid "Plugin install failed." +msgstr "Fallo en la instalación del plugin." + +#: wp-admin/includes/class-wp-upgrader.php:430 +msgid "Plugin installed successfully." +msgstr "Plugin instalado correctamente." + +#: wp-admin/includes/class-wp-upgrader.php:721 +msgid "The theme is at the latest version." +msgstr "Tienes la última versión del tema." + +#: wp-admin/includes/class-wp-upgrader.php:725 +msgid "Removing the old version of the theme…" +msgstr "Eliminando la antigua versión del tema…" + +#: wp-admin/includes/class-wp-upgrader.php:726 +msgid "Could not remove the old theme." +msgstr "No ha sido posible eliminar la versión anterior del tema." + +#: wp-admin/includes/class-wp-upgrader.php:735 +msgid "Installing the theme…" +msgstr "Instalando el tema…" + +#: wp-admin/includes/class-wp-upgrader.php:737 +msgid "Theme install failed." +msgstr "Fallo en la instalación del tema." + +#: wp-admin/includes/class-wp-upgrader.php:738 +msgid "Theme installed successfully." +msgstr "El tema se ha instalado correctamente." + +#: wp-admin/includes/class-wp-upgrader.php:1305 +msgid "WordPress is at the latest version." +msgstr "Tienes la última versión de WordPress." + +#: wp-admin/includes/class-wp-upgrader.php:1309 +msgid "Could not copy files." +msgstr "No ha sido posible copiar los archivos." + +#: wp-admin/includes/class-wp-plugins-list-table.php:353 +#: wp-admin/includes/class-wp-upgrader-skins.php:128 +#: wp-admin/includes/class-wp-upgrader-skins.php:361 +#: wp-admin/includes/class-wp-upgrader-skins.php:363 +msgid "Activate this plugin" +msgstr "Activar este plugin" + +#: wp-admin/includes/class-wp-upgrader-skins.php:128 +#: wp-admin/includes/class-wp-upgrader-skins.php:363 +msgid "Activate Plugin" +msgstr "Activar plugin" + +#: wp-admin/includes/class-wp-upgrader-skins.php:129 +#: wp-admin/includes/class-wp-upgrader-skins.php:279 +#: wp-admin/includes/class-wp-upgrader-skins.php:375 +msgid "Return to Plugins page" +msgstr "Volver a la página de plugins" + +#: wp-admin/includes/class-wp-upgrader-skins.php:349 +msgid "Successfully installed the plugin %s %s." +msgstr "El plugin %s %s se ha instalado correctamente." + +#: wp-admin/includes/class-wp-upgrader-skins.php:373 +msgid "Return to Plugin Installer" +msgstr "Volver al instalador de plugins" + +#: wp-admin/includes/class-wp-upgrader.php:740 +msgid "Successfully installed the theme %1$s %2$s." +msgstr "El tema %1$s %2$s se ha instalado correctamente." + +#: wp-admin/includes/class-wp-posts-list-table.php:609 +#: wp-admin/includes/class-wp-theme-install-list-table.php:191 +#: wp-admin/includes/class-wp-themes-list-table.php:150 +#: wp-admin/includes/class-wp-upgrader-skins.php:441 +#: wp-admin/includes/class-wp-upgrader-skins.php:442 +#: wp-admin/includes/class-wp-upgrader-skins.php:506 +#: wp-admin/includes/class-wp-upgrader-skins.php:507 +msgid "Preview “%s”" +msgstr "Vista previa “%s”" + +#: wp-admin/includes/class-wp-themes-list-table.php:147 +#: wp-admin/includes/class-wp-upgrader-skins.php:443 +#: wp-admin/includes/class-wp-upgrader-skins.php:508 +msgid "Activate “%s”" +msgstr "Activar “%s”" + +#: wp-admin/includes/class-wp-upgrader-skins.php:449 +msgid "Return to Theme Installer" +msgstr "Volver al instalador de temas" + +#: wp-admin/includes/class-wp-upgrader-skins.php:451 +msgid "Themes page" +msgstr "Página de temas" + +#: wp-admin/includes/class-wp-upgrader-skins.php:314 +#: wp-admin/includes/class-wp-upgrader-skins.php:451 +#: wp-admin/includes/class-wp-upgrader-skins.php:515 +msgid "Return to Themes page" +msgstr "Volver a la página de temas" + +#: wp-admin/includes/class-wp-upgrader.php:1561 +#: wp-admin/includes/class-wp-upgrader.php:1595 +msgid "Please select a file" +msgstr "Por favor elige un archivo" + +#: wp-admin/includes/file.php:313 wp-admin/includes/file.php:441 +msgid "The uploaded file could not be moved to %s." +msgstr "El archivo subido no se ha podido mover a %s." + +#: wp-admin/includes/dashboard.php:43 +msgid "Right Now" +msgstr "Ahora mismo" + +#: wp-admin/includes/dashboard.php:839 +msgid "http://planet.wordpress.org/" +msgstr "http://planet.wordpress.org/" + +#: wp-admin/includes/dashboard.php:840 +msgid "http://planet.wordpress.org/feed/" +msgstr "http://planet.wordpress.org/feed/" + +#: wp-admin/includes/dashboard.php:841 +msgid "Other WordPress News" +msgstr "Otras noticias sobre WordPress" + +#: wp-admin/includes/dashboard.php:73 +msgid "View all" +msgstr "Ver todo" + +#: wp-admin/includes/dashboard.php:107 +msgid "Configure" +msgstr "Configurar" + +#: wp-admin/options-writing.php:27 wp-admin/options-writing.php:122 +#: wp-admin/options-writing.php:126 wp-admin/press-this.php:302 +#: wp-admin/press-this.php:481 wp-admin/tools.php:16 wp-admin/tools.php:40 +#: wp-admin/tools.php:45 +msgid "Press This" +msgstr "Publicar esto" + +#: wp-admin/includes/meta-boxes.php:233 wp-admin/includes/meta-boxes.php:234 +#: wp-admin/press-this.php:490 +msgid "Submit for Review" +msgstr "Enviar para revisión" + +#: wp-admin/includes/class-wp-comments-list-table.php:439 +#: wp-admin/includes/class-wp-comments-list-table.php:441 +#: wp-admin/includes/dashboard.php:451 +msgid "Approve this comment" +msgstr "Aprobar este comentario" + +#: wp-admin/includes/class-wp-comments-list-table.php:437 +#: wp-admin/includes/class-wp-comments-list-table.php:442 +#: wp-admin/includes/dashboard.php:452 +msgid "Unapprove this comment" +msgstr "Rechazar este comentario" + +#: wp-admin/includes/class-wp-comments-list-table.php:462 +#: wp-admin/includes/dashboard.php:454 +msgid "Reply to this comment" +msgstr "Responder a este comentario" + +#: wp-admin/includes/class-wp-comments-list-table.php:446 +#: wp-admin/includes/dashboard.php:455 +msgid "Mark this comment as spam" +msgstr "Marcar este comentario como spam" + +#: wp-admin/includes/class-wp-comments-list-table.php:446 +#: wp-admin/includes/dashboard.php:455 +msgctxt "verb" +msgid "Spam" +msgstr "Spam" + +#: wp-admin/includes/class-wp-comments-list-table.php:456 +#: wp-admin/includes/dashboard.php:459 +msgid "Move this comment to the trash" +msgstr "Mover este comentario a la papelera" + +#: wp-admin/includes/class-wp-comments-list-table.php:456 +#: wp-admin/includes/dashboard.php:459 +msgctxt "verb" +msgid "Trash" +msgstr "Enviar a la Papelera" + +#: wp-admin/includes/dashboard.php:485 +msgid "From %1$s on %2$s%3$s" +msgstr "De %1$s en %2$s%3$s" + +#: wp-admin/includes/dashboard.php:486 +msgid "[Pending]" +msgstr "[Pendiente]" + +#: wp-admin/includes/dashboard.php:505 +msgctxt "dashboard" +msgid "%1$s on %2$s" +msgstr "%1$s en %2$s" + +#: wp-admin/includes/dashboard.php:726 +msgid "Loading…" +msgstr "Cargando…" + +#: wp-admin/includes/dashboard.php:726 +msgid "This widget requires JavaScript." +msgstr "Este widget requiere Javascript." + +#: wp-admin/includes/file.php:13 +msgid "Main Index Template" +msgstr "Plantilla de la página principal" + +#: wp-admin/includes/file.php:17 +msgid "RTL Stylesheet" +msgstr "Hoja de estilos RTL" + +#: wp-admin/includes/file.php:19 +msgid "Popup Comments" +msgstr "Comentarios emergentes" + +#: wp-admin/includes/file.php:20 +msgid "Footer" +msgstr "Pie de página" + +#: wp-admin/includes/file.php:26 +msgid "Category Template" +msgstr "Plantilla de categoría" + +#: wp-admin/includes/file.php:27 wp-admin/includes/meta-boxes.php:663 +msgid "Page Template" +msgstr "Plantilla de página" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:31 +#: wp-admin/includes/class-wp-theme-install-list-table.php:42 +#: wp-admin/includes/file.php:28 +msgid "Search Results" +msgstr "Resultados de la búsqueda" + +#: wp-admin/includes/file.php:29 +msgid "Search Form" +msgstr "Formulario de búsqueda" + +#: wp-admin/includes/file.php:30 +msgid "Single Post" +msgstr "Entrada individual" + +#: wp-admin/includes/file.php:31 +msgid "404 Template" +msgstr "Error 404 (página no encontrada)" + +#: wp-admin/includes/file.php:32 +msgid "Links Template" +msgstr "Plantilla de enlaces" + +#: wp-admin/includes/file.php:33 +msgid "Theme Functions" +msgstr "Funciones del tema" + +#: wp-admin/includes/file.php:34 +msgid "Attachment Template" +msgstr "Plantilla de archivos adjuntos" + +#: wp-admin/includes/file.php:35 +msgid "Image Attachment Template" +msgstr "Plantilla de imagen adjunta" + +#: wp-admin/includes/file.php:36 +msgid "Video Attachment Template" +msgstr "Plantilla de vídeo adjunto" + +#: wp-admin/includes/file.php:37 +msgid "Audio Attachment Template" +msgstr "Plantilla de audio adjunto" + +#: wp-admin/includes/file.php:38 +msgid "Application Attachment Template" +msgstr "Plantilla de aplicación adjunta" + +#: wp-admin/includes/file.php:39 +msgid "my-hacks.php (legacy hacks support)" +msgstr "my-hacks.php (soporte para hacks)" + +#: wp-admin/includes/file.php:40 +msgid ".htaccess (for rewrite rules )" +msgstr ".htaccess (para reglas de reescritura)" + +#: wp-admin/includes/file.php:43 +msgid "Comments Template" +msgstr "Plantilla de comentarios" + +#: wp-admin/includes/file.php:44 +msgid "Popup Comments Template" +msgstr "Plantilla de comentarios emergentes" + +#: wp-admin/includes/file.php:180 +msgid "Sorry, can’t edit files with “..” in the name. If you are trying to edit a file in your WordPress home directory, you can just type the name of the file in." +msgstr "Disculpa, no puedes editar archivos con \"..\" en el nombre. Si estás intentando editar un archivo en tu directorio raíz de WordPress, simplemente escribe el nombre del archivo." + +#: wp-admin/includes/file.php:367 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini." +msgstr "El archivo a subir sobrepasa la directiva upload_max_filesize (tamaño máximo de subida) en php.ini." + +#: wp-admin/includes/file.php:368 +msgid "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." +msgstr "El archivo a subir sobrepasa la directiva MAX_FILE_SIZE (tamaño máximo de archivo) especificada en el formulario HTML." + +#: wp-admin/includes/file.php:236 wp-admin/includes/file.php:369 +msgid "The uploaded file was only partially uploaded." +msgstr "Sólo se ha podido subir una parte del archivo." + +#: wp-admin/includes/file.php:237 wp-admin/includes/file.php:370 +msgid "No file was uploaded." +msgstr "No se ha subido ningún archivo." + +#: wp-admin/includes/file.php:239 wp-admin/includes/file.php:372 +msgid "Missing a temporary folder." +msgstr "Falta un directorio temporal." + +#: wp-admin/includes/file.php:240 wp-admin/includes/file.php:373 +msgid "Failed to write file to disk." +msgstr "El archivo no se ha podido grabar en el disco." + +#: wp-admin/includes/file.php:241 wp-admin/includes/file.php:374 +msgid "File upload stopped by extension." +msgstr "Subida de archivo detenida a causa de la extensión." + +#: wp-admin/includes/file.php:258 wp-admin/includes/file.php:390 +msgid "Invalid form submission." +msgstr "Se envió un formulario erróneo." + +#: wp-admin/includes/file.php:269 wp-admin/includes/import.php:63 +msgid "File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini." +msgstr "El archivo está vacío. Por favor, sube algo con más sustancia. Este error puede que lo provoque que tu fichero php.ini tenga inhabilitadas las subidas o porque post_max_size esté definido más pequeño que el upload_max_filesize en php.ini." + +#: wp-admin/includes/file.php:275 +msgid "Specified file failed upload test." +msgstr "El archivo indicado no cumple los requisitos de subida." + +#: wp-admin/includes/file.php:398 +msgid "File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini." +msgstr "El archivo está vacío. Por favor, sube algo con más sustancia. Este error podría ser causado porque las subidas está desactivadas en tu php.ini." + +#: wp-admin/includes/file.php:402 +msgid "Specified file does not exist." +msgstr "El archivo especificado no existe." + +#: wp-admin/includes/file.php:470 +msgid "Invalid URL Provided." +msgstr "La URL especificada no es válido." + +#: wp-admin/includes/file.php:474 +msgid "Could not create Temporary file." +msgstr "No ha sido posible crear el archivo temporal." + +#: wp-admin/includes/file.php:607 wp-admin/includes/file.php:656 +msgid "Could not retrieve file from archive." +msgstr "No se puede recuperar el archivo." + +#: wp-admin/includes/file.php:666 +msgid "Could not extract file from archive." +msgstr "No podemos descomprimir el archivo." + +#: wp-admin/includes/file.php:669 wp-admin/includes/file.php:766 +#: wp-admin/includes/file.php:799 wp-admin/includes/update-core.php:893 +#: wp-admin/includes/update-core.php:989 +msgid "Could not copy file." +msgstr "No ha sido posible copiar el archivo." + +#: wp-admin/includes/file.php:708 +msgid "Empty archive." +msgstr "Archivo vacío." + +#: wp-admin/includes/file.php:1010 +msgid "FTP" +msgstr "FTP" + +#: wp-admin/includes/file.php:1012 +msgid "FTPS (SSL)" +msgstr "FTPS (SSL)" + +#: wp-admin/includes/file.php:1014 +msgid "SSH2" +msgstr "SSH2" + +#: wp-admin/includes/file.php:1034 +msgid "Connection Information" +msgstr "Datos de conexión" + +#: wp-admin/includes/file.php:1056 +msgid "Hostname" +msgstr "Servidor" + +#: wp-admin/includes/file.php:1073 +msgid "Authentication Keys" +msgstr "Claves de autentificación" + +#: wp-admin/includes/file.php:1075 +msgid "Public Key:" +msgstr "Clave pública:" + +#: wp-admin/includes/file.php:1076 +msgid "Private Key:" +msgstr "Clave privada:" + +#: wp-admin/includes/file.php:1079 +msgid "Enter the location on the server where the keys are located. If a passphrase is needed, enter that in the password field above." +msgstr "Introduce la dirección del servidor en el que se encuentran las claves. Si es necesaria una contraseña, introdúcela en el campo de contraseña." + +#: wp-admin/includes/file.php:1084 wp-admin/includes/file.php:1086 +msgid "Connection Type" +msgstr "Tipo de conexión" + +#: wp-admin/includes/file.php:1105 +msgid "Proceed" +msgstr "Ejecutar" + +#: wp-admin/includes/image-edit.php:19 wp-admin/includes/image-edit.php:608 +msgid "Image data does not exist. Please re-upload the image." +msgstr "No existen datos de la imagen. Por favor, vuelve a subir la imagen." + +#: wp-admin/includes/image-edit.php:41 +msgid "Crop" +msgstr "Recortar" + +#: wp-admin/includes/image-edit.php:45 +msgid "Rotate counter-clockwise" +msgstr "Rotar en sentido contrario a las agujas del reloj." + +#: wp-admin/includes/image-edit.php:46 +msgid "Rotate clockwise" +msgstr "Rotar en el sentido de las agujas del reloj." + +#: wp-admin/includes/image-edit.php:54 +msgid "Flip vertically" +msgstr "Voltear verticalmente" + +#: wp-admin/includes/image-edit.php:55 +msgid "Flip horizontally" +msgstr "Voltear horizontalmente" + +#: wp-admin/includes/image-edit.php:83 +msgid "Scale Image" +msgstr "Escalar imagen" + +#: wp-admin/includes/image-edit.php:87 +msgid "Original dimensions %s" +msgstr "Dimensiones originales %s" + +#: wp-admin/custom-background.php:237 wp-admin/custom-background.php:241 +#: wp-admin/includes/image-edit.php:100 +msgid "Restore Original Image" +msgstr "Restaurar imagen original" + +#: wp-admin/includes/image-edit.php:102 +msgid "Discard any changes and restore the original image." +msgstr "Descartar todos los cambios y restaurar la imagen original." + +#: wp-admin/includes/image-edit.php:105 +msgid "Previously edited copies of the image will not be deleted." +msgstr "Las copias de la imagen editadas previamente no se borrarán." + +#: wp-admin/includes/image-edit.php:109 +msgid "Restore image" +msgstr "Restaurar imagen" + +#: wp-admin/includes/image-edit.php:120 +msgid "Image Crop" +msgstr "Recortar imagen" + +#: wp-admin/includes/image-edit.php:121 wp-admin/includes/image-edit.php:159 +msgid "(help)" +msgstr "(ayuda)" + +#: wp-admin/includes/image-edit.php:123 +msgid "The image can be cropped by clicking on it and dragging to select the desired part. While dragging the dimensions of the selection are displayed below." +msgstr "Puedes recortar la imagen haciendo clic en ella y arrastrando la parte deseada. Mientras arrastras, abajo se muestran las dimensiones." + +#: wp-admin/user-edit.php:269 +msgid "Keyboard Shortcuts" +msgstr "Atajos de teclado" + +#: wp-admin/includes/image-edit.php:125 +msgid "Crop Aspect Ratio" +msgstr "Relación de aspecto de la zona a recortar" + +#: wp-admin/includes/image-edit.php:126 +msgid "You can specify the crop selection aspect ratio then hold down the Shift key while dragging to lock it. The values can be 1:1 (square), 4:3, 16:9, etc. If there is a selection, specifying aspect ratio will set it immediately." +msgstr "Puedes especificar la relación de aspecto de la zona seleccionada para recortar y luego mantener la tecla mayúsculas mientras arrastras para bloquearlo. Los valores pueden ser 1:1 (cuadrado), 4:3, 16:9, etc. Si hay una selección, al especificar la relación de aspecto se establece al instante." + +#: wp-admin/includes/image-edit.php:128 +msgid "Crop Selection" +msgstr "Selección de recorte" + +#: wp-admin/includes/image-edit.php:129 +msgid "Once started, the selection can be adjusted by entering new values (in pixels). Note that these values are scaled to approximately match the original image dimensions. The minimum selection size equals the thumbnail size as set in the Media settings." +msgstr "Una vez comiences, la selección puede ajustarse introduciendo nuevos valores (en pixels). Date cuenta que estos valores se escalan para que se ajusten, aproximadamente, a las dimensiones de la imagen original. El tamaño de selección mínimo se iguala al tamaño de miniatura establecido en las opciones de Multimedia." + +#: wp-admin/includes/image-edit.php:134 +msgid "Aspect ratio:" +msgstr "Relación de aspecto:" + +#: wp-admin/includes/image-edit.php:143 +msgid "Selection:" +msgstr "Selección:" + +#: wp-admin/includes/image-edit.php:158 +msgid "Thumbnail Settings" +msgstr "Opciones de miniatura" + +#: wp-admin/includes/image-edit.php:160 +msgid "The thumbnail image can be cropped differently. For example it can be square or contain only a portion of the original image to showcase it better. Here you can select whether to apply changes to all image sizes or make the thumbnail different." +msgstr "La imagen de miniatura puede recortarse de manera diferente. Por ejemplo, puede ser cuadrada, o contener sólo una parte de la imagen original para que se ajuste mejor. Aquí puedes elegir si aplicar los cambios a todos los tamaños de imagen o hacer una miniatura diferente." + +#: wp-admin/includes/image-edit.php:164 +msgid "Current thumbnail" +msgstr "Miniatura actual" + +#: wp-admin/includes/image-edit.php:168 +msgid "Apply changes to:" +msgstr "Aplicar cambios a:" + +#: wp-admin/includes/image-edit.php:172 +msgid "All image sizes" +msgstr "Todos los tamaños de imagen" + +#: wp-admin/includes/image-edit.php:180 +msgid "All sizes except thumbnail" +msgstr "Todos los tamaños excepto la miniatura" + +#: wp-admin/includes/image-edit.php:488 +msgid "Cannot load image metadata." +msgstr "No se pudieron cargar los metadatos de la imagen." + +#: wp-admin/includes/image-edit.php:543 +msgid "Cannot save image metadata." +msgstr "No se pudieron guardar los metadatos de la imagen." + +#: wp-admin/includes/image-edit.php:548 +msgid "Image metadata is inconsistent." +msgstr "Los metadatos de la imagen son inconsistentes." + +#: wp-admin/includes/image-edit.php:550 +msgid "Image restored successfully." +msgstr "Imagen restaurada con éxito." + +#: wp-admin/includes/image-edit.php:569 +msgid "Unable to create new image." +msgstr "No se pudo crear una imagen nueva." + +#: wp-admin/includes/image-edit.php:592 +msgid "Error while saving the scaled image. Please reload the page and try again." +msgstr "Error al tratar de guardar la imagen escalada. Vuelve a cargar la página e inténtalo de nuevo." + +#: wp-admin/includes/image-edit.php:600 +msgid "Nothing to save, the image has not changed." +msgstr "Nada que guardar, la imagen no ha cambiado." + +#: wp-admin/includes/image-edit.php:643 +msgid "Unable to save the image." +msgstr "No se pudo guardar la imagen." + +#: wp-admin/includes/image-edit.php:733 +msgid "Image saved" +msgstr "Imagen guardada" + +#: wp-admin/includes/media.php:18 +msgid "From Computer" +msgstr "Desde el ordenador" + +#: wp-admin/includes/media.php:19 +msgid "From URL" +msgstr "Desde una URL" + +#: wp-admin/includes/media.php:20 +msgid "Gallery" +msgstr "Galería" + +#: wp-admin/includes/media.php:53 +msgid "Gallery (%s)" +msgstr "Galería (%s)" + +#: wp-admin/includes/media.php:382 +msgid "Uploads" +msgstr "Archivos subidos" + +#: wp-admin/includes/media.php:382 wp-admin/includes/template.php:1411 +#: wp-admin/install.php:67 wp-admin/maint/repair.php:25 +#: wp-admin/setup-config.php:110 wp-admin/upgrade.php:62 +msgid "WordPress" +msgstr "WordPress" + +#: wp-admin/includes/media.php:851 wp-admin/includes/media.php:1004 +msgid "File URL" +msgstr "URL del archivo" + +#: wp-admin/includes/media.php:1049 wp-admin/includes/media.php:2201 +msgid "Alt text for the image, e.g. “The Mona Lisa”" +msgstr "Texto alternativo (alt) de la imagen, por ejemplo “La Mona Lisa”" + +#: wp-admin/includes/media.php:922 +msgid "Empty Title filled from filename." +msgstr "Título vacío rellenado desde el nombre de fichero." + +#: wp-admin/includes/class-wp-posts-list-table.php:920 +#: wp-admin/includes/media.php:1000 wp-admin/includes/media.php:1878 +#: wp-admin/includes/meta-boxes.php:669 wp-admin/includes/meta-boxes.php:670 +msgid "Order" +msgstr "Orden" + +#: wp-admin/includes/media.php:1008 +msgid "Location of the uploaded file." +msgstr "Ubicación del archivo subido." + +#: wp-admin/includes/media.php:1132 wp-admin/includes/media.php:1864 +msgid "Show" +msgstr "Mostrar" + +#: wp-admin/includes/media.php:1133 wp-admin/includes/media.php:1865 +msgid "Hide" +msgstr "Ocultar" + +#: wp-admin/includes/media.php:1206 wp-admin/includes/media.php:2442 +msgid "File name:" +msgstr "Nombre de archivo:" + +#: wp-admin/includes/media.php:1207 wp-admin/includes/media.php:2445 +msgid "File type:" +msgstr "Tipo de archivo:" + +#: wp-admin/includes/media.php:1208 +msgid "Upload date:" +msgstr "Fecha de subida:" + +#: wp-admin/includes/media.php:1210 wp-admin/includes/media.php:2550 +msgid "Dimensions:" +msgstr "Dimensiones:" + +#: wp-admin/includes/media.php:1228 wp-admin/includes/media.php:2231 +#: wp-admin/includes/media.php:2237 +msgid "Insert into Post" +msgstr "Insertar en la entrada" + +#: wp-admin/includes/media.php:1234 +msgid "You are about to delete %s." +msgstr "Estás a punto de eliminar %s." + +#: wp-admin/includes/media.php:1661 +msgid "Add media files from your computer" +msgstr "Añadir archivos desde tu ordenador" + +#: wp-admin/includes/media.php:1690 wp-admin/includes/media.php:1888 +#: wp-admin/includes/media.php:2135 +msgid "Save all changes" +msgstr "Guardar todos los cambios" + +#: wp-admin/includes/media.php:1863 +msgid "All Tabs:" +msgstr "Todas las pestañas:" + +#: wp-admin/includes/media.php:1867 +msgid "Sort Order:" +msgstr "Ordenar:" + +#: wp-admin/includes/media.php:1868 wp-admin/includes/media.php:1936 +msgid "Ascending" +msgstr "Ascendente" + +#: wp-admin/includes/media.php:1869 wp-admin/includes/media.php:1939 +msgid "Descending" +msgstr "Descendente" + +#: wp-admin/includes/media.php:1900 +msgid "Link thumbnails to:" +msgstr "Enlazar miniaturas a:" + +#: wp-admin/includes/media.php:1905 +msgid "Image File" +msgstr "Archivo de imagen" + +#: wp-admin/includes/media.php:1915 +msgid "Order images by:" +msgstr "Ordenar imágenes por:" + +#: wp-admin/includes/media.php:1920 +msgid "Menu order" +msgstr "Orden del menú" + +#: wp-admin/includes/media.php:1922 +msgid "Date/Time" +msgstr "Fecha/Hora" + +#: wp-admin/includes/media.php:1923 +msgid "Random" +msgstr "Aleatorio" + +#: wp-admin/includes/media.php:1931 +msgid "Order:" +msgstr "Orden:" + +#: wp-admin/includes/media.php:1946 +msgid "Gallery columns:" +msgstr "Columnas de la galería" + +#: wp-admin/includes/media.php:1967 +msgid "Update gallery settings" +msgstr "Actualizar ajustes de la galería" + +#: wp-admin/includes/media.php:2015 wp-admin/includes/media.php:2017 +#: wp-admin/upload.php:237 +msgid "Search Media" +msgstr "Buscar medios" + +#: wp-admin/includes/media.php:2040 +msgid "All Types" +msgstr "Todos los tipos" + +#: wp-admin/includes/media.php:2105 +msgid "Filter »" +msgstr "Filtrar »" + +#: wp-admin/includes/media.php:2155 +msgid "Image Caption" +msgstr "Leyenda de la imagen" + +#: wp-admin/includes/media.php:2220 +msgid "Link Image To:" +msgstr "Enlazar la imagen a:" + +#: wp-admin/includes/media.php:2225 +msgid "Link to image" +msgstr "Enlace a la imagen" + +#: wp-admin/includes/media.php:2194 +msgid "Link text, e.g. “Ransom Demands (PDF)”" +msgstr "Texto del enlace, por ejemplo \"Peticiones de rescate (PDF)\"" + +#: wp-admin/includes/meta-boxes.php:42 +msgid "Preview Changes" +msgstr "Vista previa de los cambios" + +#: wp-admin/export.php:184 wp-admin/export.php:216 +#: wp-admin/includes/meta-boxes.php:58 +msgid "Status:" +msgstr "Estado:" + +#: wp-admin/includes/meta-boxes.php:109 +msgid "Visibility:" +msgstr "Visibilidad:" + +#: wp-admin/includes/meta-boxes.php:117 wp-admin/includes/meta-boxes.php:140 +#: wp-admin/includes/template.php:1484 +msgid "Password protected" +msgstr "Protegida con contraseña" + +#: wp-admin/includes/meta-boxes.php:138 +msgid "Stick this post to the front page" +msgstr "Fijar esta entrada en la página principal" + +#: wp-admin/includes/meta-boxes.php:158 +msgid "Scheduled for: %1$s" +msgstr "Programada para:%1$s" + +#: wp-admin/includes/meta-boxes.php:160 +msgid "Published on: %1$s" +msgstr "Publicada el: %1$s" + +#: wp-admin/includes/meta-boxes.php:162 wp-admin/includes/meta-boxes.php:170 +msgid "Publish immediately" +msgstr "Publicar inmediatamente" + +#: wp-admin/includes/meta-boxes.php:164 +msgid "Schedule for: %1$s" +msgstr "Programar para:%1$s" + +#: wp-admin/includes/meta-boxes.php:166 +msgid "Publish on: %1$s" +msgstr "Publicar el: %1$s" + +#: wp-admin/includes/meta-boxes.php:406 wp-admin/includes/meta-boxes.php:748 +#: wp-admin/includes/nav-menu.php:944 wp-admin/press-this.php:521 +msgid "Most Used" +msgstr "Más utilizadas" + +#: wp-admin/includes/meta-boxes.php:769 wp-admin/includes/meta-boxes.php:771 +msgid "+ Add New Category" +msgstr "+ Añadir categoría nueva " + +#: wp-admin/includes/meta-boxes.php:772 +msgid "New category name" +msgstr "Nombre nueva categoría" + +#: wp-admin/includes/meta-boxes.php:461 +msgid "Excerpts are optional hand-crafted summaries of your content that can be used in your theme. Learn more about manual excerpts." +msgstr "Los extractos son resúmenes opcionales de tu contenido hechos \"ex-profeso\" que puedes usar en tu tema. Aprende algo acerca de los extractos manuales." + +#: wp-admin/includes/meta-boxes.php:475 +msgid "Already pinged:" +msgstr "Pingbacks enviados:" + +#: wp-admin/includes/meta-boxes.php:484 +msgid "Send trackbacks to:" +msgstr "Enviar trackbacks a:" + +#: wp-admin/includes/meta-boxes.php:484 +msgid "Separate multiple URLs with spaces" +msgstr "Separar varias URLs con espacios" + +#: wp-admin/includes/meta-boxes.php:511 +msgid "Custom fields can be used to add extra metadata to a post that you can use in your theme." +msgstr "Los campos personalizados se pueden usar para añadir metadatos adicionales a una entrada y luego mostrarlos en tu tema. ." + +#: wp-admin/includes/meta-boxes.php:527 +msgid "Allow trackbacks and pingbacks on this page." +msgstr "Permitir trackbacks y pingbacks en esta página." + +#: wp-admin/includes/meta-boxes.php:527 +msgid "http://codex.wordpress.org/Introduction_to_Blogging#Managing_Comments" +msgstr "http://codex.wordpress.org/Introduction_to_Blogging#Managing_Comments" + +#: wp-admin/includes/meta-boxes.php:576 +msgid "Show comments" +msgstr "Mostrar comentarios" + +#: wp-admin/includes/class-wp-posts-list-table.php:896 +#: wp-admin/includes/meta-boxes.php:653 wp-admin/includes/meta-boxes.php:654 +msgid "Parent" +msgstr "Superior" + +#: wp-admin/includes/class-wp-posts-list-table.php:902 +msgid "Main Page (no parent)" +msgstr "Página principal (sin superior)" + +#: wp-admin/includes/class-wp-posts-list-table.php:935 +#: wp-admin/includes/meta-boxes.php:664 +msgid "Default Template" +msgstr "Plantilla predeterminada" + +#: wp-admin/includes/meta-boxes.php:698 +msgid "Visit Link" +msgstr "Visitar enlace" + +#: wp-admin/includes/meta-boxes.php:706 +msgid "Keep this link private" +msgstr "Mantener este enlace como privado" + +#: wp-admin/includes/class-wp-links-list-table.php:145 +msgid "" +"You are about to delete this link '%s'\n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Estás a punto de borrar este enlace '%s'\n" +" 'Cancelar' para borrar, 'Aceptar' para borrarlo." + +#: wp-admin/includes/meta-boxes.php:793 +msgid "_blank — new window or tab." +msgstr "_blank — nueva ventana o pestaña." + +#: wp-admin/includes/meta-boxes.php:796 +msgid "_top — current window or tab, with no frames." +msgstr "_top — ventana o pestaña actual, sin marcos." + +#: wp-admin/includes/meta-boxes.php:799 +msgid "_none — same window or tab." +msgstr "_none — misma ventana o pestaña." + +#: wp-admin/includes/meta-boxes.php:801 +msgid "Choose the target frame for your link." +msgstr "Ellige el marco de destino para tu enlace." + +#: wp-admin/includes/meta-boxes.php:846 +msgid "rel:" +msgstr "rel:" + +#: wp-admin/includes/meta-boxes.php:850 wp-admin/includes/meta-boxes.php:851 +msgid "identity" +msgstr "identidad" + +#: wp-admin/includes/meta-boxes.php:854 +msgid "another web address of mine" +msgstr "otra dirección web mía" + +#: wp-admin/includes/meta-boxes.php:858 wp-admin/includes/meta-boxes.php:859 +msgid "friendship" +msgstr "amistad" + +#: wp-admin/includes/meta-boxes.php:861 +msgid "contact" +msgstr "contacto" + +#: wp-admin/includes/meta-boxes.php:864 +msgid "acquaintance" +msgstr "conocido" + +#: wp-admin/includes/meta-boxes.php:867 +msgid "friend" +msgstr "amigo" + +#: wp-admin/includes/meta-boxes.php:870 wp-admin/includes/meta-boxes.php:903 +#: wp-admin/includes/meta-boxes.php:926 +msgid "none" +msgstr "ninguno" + +#: wp-admin/includes/meta-boxes.php:875 wp-admin/includes/meta-boxes.php:876 +msgid "physical" +msgstr "físico" + +#: wp-admin/includes/meta-boxes.php:878 +msgid "met" +msgstr "conocido en persona" + +#: wp-admin/includes/meta-boxes.php:883 wp-admin/includes/meta-boxes.php:884 +msgid "professional" +msgstr "profesional" + +#: wp-admin/includes/meta-boxes.php:886 +msgid "co-worker" +msgstr "compañero de trabajo" + +#: wp-admin/includes/meta-boxes.php:889 +msgid "colleague" +msgstr "colega" + +#: wp-admin/includes/meta-boxes.php:894 wp-admin/includes/meta-boxes.php:895 +msgid "geographical" +msgstr "geográfico" + +#: wp-admin/includes/meta-boxes.php:897 +msgid "co-resident" +msgstr "co-residente" + +#: wp-admin/includes/meta-boxes.php:900 +msgid "neighbor" +msgstr "vecino" + +#: wp-admin/includes/meta-boxes.php:908 wp-admin/includes/meta-boxes.php:909 +msgid "family" +msgstr "familia" + +#: wp-admin/includes/meta-boxes.php:911 +msgid "child" +msgstr "hija/o" + +#: wp-admin/includes/meta-boxes.php:914 +msgid "kin" +msgstr "pariente" + +#: wp-admin/includes/meta-boxes.php:917 +msgid "parent" +msgstr "padre/madre" + +#: wp-admin/includes/meta-boxes.php:920 +msgid "sibling" +msgstr "hermano/a" + +#: wp-admin/includes/meta-boxes.php:923 +msgid "spouse" +msgstr "cónyuge" + +#: wp-admin/includes/meta-boxes.php:931 wp-admin/includes/meta-boxes.php:932 +msgid "romantic" +msgstr "romántica" + +#: wp-admin/includes/meta-boxes.php:934 +msgid "muse" +msgstr "inspiración" + +#: wp-admin/includes/meta-boxes.php:937 +msgid "crush" +msgstr "flechazo" + +#: wp-admin/includes/meta-boxes.php:940 +msgid "date" +msgstr "fecha" + +#: wp-admin/includes/meta-boxes.php:943 +msgid "sweetheart" +msgstr "pareja" + +#: wp-admin/includes/meta-boxes.php:949 +msgid "If the link is to a person, you can specify your relationship with them using the above form. If you would like to learn more about the idea check out XFN." +msgstr "Si el enlace es a una persona, puedes especificar tu relación con ella utilizando el formulario de arriba. Si deseas aprender más acerca de cómo funciona esto revisa el XFN." + +#: wp-admin/includes/meta-boxes.php:964 +msgid "Image Address" +msgstr "Dirección de la imagen" + +#: wp-admin/includes/meta-boxes.php:968 +msgid "RSS Address" +msgstr "Dirección RSS" + +#: wp-admin/includes/meta-boxes.php:972 +msgid "Notes" +msgstr "Notas" + +#: wp-admin/includes/class-wp-links-list-table.php:86 +#: wp-admin/includes/class-wp-plugin-install-list-table.php:187 +#: wp-admin/includes/meta-boxes.php:976 +msgid "Rating" +msgstr "Valoración" + +#: wp-admin/includes/meta-boxes.php:985 +msgid "(Leave at 0 for no rating.)" +msgstr "(Dejalo en 0 para no valorar.)" + +#: wp-admin/includes/menu.php:226 +msgid "You do not have sufficient permissions to access this page." +msgstr "No tienes suficientes permisos para acceder a esta página" + +#: wp-admin/includes/plugin-install.php:134 +msgid "Popular tags" +msgstr "Etiquetas populares" + +#: wp-admin/includes/plugin-install.php:135 +msgid "You may also browse based on the most popular tags in the Plugin Directory:" +msgstr "También puedes ver las etiquetas más populares del directorio de plugins:" + +#: wp-admin/includes/plugin-install.php:177 +#: wp-admin/includes/plugin-install.php:178 +msgid "Search Plugins" +msgstr "Buscar plugins" + +#: wp-admin/includes/plugin-install.php:190 +msgid "Install a plugin in .zip format" +msgstr "Instalar un plugin en formato .zip" + +#: wp-admin/includes/plugin-install.php:191 +msgid "If you have a plugin in a .zip format, you may install it by uploading it here." +msgstr "Si tienes un plugin en un archivo .zip, puedes subirlo e instalarlo desde aquí." + +#: wp-admin/includes/plugin-install.php:194 +msgid "Plugin zip file" +msgstr "Archivo .zip del plugin" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:244 +#: wp-admin/includes/class-wp-theme-install-list-table.php:214 +#: wp-admin/includes/plugin-install.php:196 +#: wp-admin/includes/plugin-install.php:377 +#: wp-admin/includes/theme-install.php:144 +msgid "Install Now" +msgstr "Instalar ahora" + +#: wp-admin/includes/class-wp-plugin-install-list-table.php:137 +msgid "No plugins match your request." +msgstr "No hay plugins que mostrar." + +#: wp-admin/includes/class-wp-theme-install-list-table.php:309 +#: wp-admin/includes/plugin-install.php:417 +msgid "(based on %s rating)" +msgid_plural "(based on %s ratings)" +msgstr[0] "(basado en %s voto)" +msgstr[1] "(basado en %s votos)" + +#: wp-admin/includes/plugin-install.php:350 wp-admin/update.php:103 +msgid "Plugin Install" +msgstr "Instalar plugin" + +#: wp-admin/includes/plugin-install.php:381 +msgid "Install Update Now" +msgstr "Instalar actualización ahora" + +#: wp-admin/includes/plugin-install.php:384 +msgid "Newer Version (%s) Installed" +msgstr "Instalada la última versión (%s)" + +#: wp-admin/includes/plugin-install.php:387 +msgid "Latest Version Installed" +msgstr "Instalada la última versión" + +#: wp-admin/includes/plugin-install.php:393 +msgid "FYI" +msgstr "FYI" + +#: wp-admin/includes/plugin-install.php:398 +msgid "Author:" +msgstr "Autor:" + +#: wp-admin/includes/plugin-install.php:400 +msgid "Last Updated:" +msgstr "Última actualización:" + +#: wp-admin/includes/plugin-install.php:403 +msgid "Requires WordPress Version:" +msgstr "Requiere la versión de WordPress:" + +#: wp-admin/includes/plugin-install.php:403 +msgid "%s or higher" +msgstr "%s o superior" + +#: wp-admin/includes/plugin-install.php:405 +msgid "Compatible up to:" +msgstr "Compatible con:" + +#: wp-admin/includes/plugin-install.php:407 +msgid "Downloaded:" +msgstr "Descargado:" + +#: wp-admin/includes/plugin-install.php:407 +msgid "%s time" +msgid_plural "%s times" +msgstr[0] "%s vez" +msgstr[1] "%s veces" + +#: wp-admin/includes/plugin-install.php:409 +msgid "WordPress.org Plugin Page »" +msgstr "Página de plugins de WordPress.org »" + +#: wp-admin/includes/plugin-install.php:415 +msgid "Average Rating" +msgstr "Puntuación promedio" + +#: wp-admin/includes/plugin-install.php:423 +msgid "Warning: This plugin has not been tested with your current version of WordPress." +msgstr "Atención: Este plugin no ha sido probado en esta versión de WordPress." + +#: wp-admin/includes/plugin-install.php:426 +msgid "Warning: This plugin has not been marked as compatible with your version of WordPress." +msgstr "Atención: Este plugin no es compatible con esta versión de WordPress." + +#: wp-admin/includes/plugin.php:92 +msgid "The %1$s plugin header is deprecated. Use %2$s instead." +msgstr "La cabecera del plugin %1$s es obsoleta. Usa %2$s en su lugar." + +#: wp-admin/includes/plugin.php:163 +msgid "Visit plugin homepage" +msgstr "Visitar la web del plugin" + +#: wp-admin/includes/plugin.php:592 +msgid "The plugin generated unexpected output." +msgstr "El plugin ha generado una respuesta insesperada." + +#: wp-admin/includes/plugin.php:722 +msgid "One of the plugins is invalid." +msgstr "Uno de los plugins no es válido." + +#: wp-admin/includes/plugin.php:820 +msgid "Could not fully remove the plugin(s) %s." +msgstr "No se pudo/ieron eliminar completamente el/los plugin/s %s." + +#: wp-admin/includes/plugin.php:875 +msgid "Invalid plugin path." +msgstr "La ruta del plugin no es válida." + +#: wp-admin/includes/plugin.php:877 +msgid "Plugin file does not exist." +msgstr "El archivo del plugin no existe." + +#: wp-admin/includes/plugin.php:881 +msgid "The plugin does not have a valid header." +msgstr "El plugin no tiene una cabecera válida." + +#: wp-admin/includes/post.php:33 wp-admin/includes/post.php:71 +msgid "You are not allowed to edit pages as this user." +msgstr "No tienes autorización para editar páginas con este nombre de usuario." + +#: wp-admin/includes/post.php:35 wp-admin/includes/post.php:73 +msgid "You are not allowed to edit posts as this user." +msgstr "No tienes autorización para editar entradas con este nombre de usuario." + +#: wp-admin/includes/post.php:322 +msgid "You are not allowed to edit pages." +msgstr "No tienes autorización para editar páginas." + +#: wp-admin/includes/post.php:324 +msgid "You are not allowed to edit posts." +msgstr "No tienes autorización para editar entradas." + +#: wp-admin/includes/post.php:469 +msgid "Auto Draft" +msgstr "Borrador automático" + +#: wp-admin/includes/post.php:1086 +msgid "Click to edit this part of the permalink" +msgstr "Haz clic para editar esta parte del enlace permanente" + +#: wp-admin/includes/post.php:1088 +msgid "Temporary permalink. Click to edit this part." +msgstr "Enlace permanente temporal. Haz clic para editar esta parte." + +#: wp-admin/includes/post.php:1092 wp-admin/includes/post.php:1120 +msgid "Permalink:" +msgstr "Enlace permanente:" + +#: wp-admin/includes/post.php:1094 +msgid "Change Permalinks" +msgstr "Enlaces permanentes" + +#: wp-admin/includes/post.php:1400 +msgid "Preview not available. Please save as a draft first." +msgstr "Vista previa no disponible. Por favor, guarda antes el borrador." + +#: wp-admin/includes/schema.php:369 +msgid "Just another WordPress site" +msgstr "Otro sitio realizado con WordPress" + +#: wp-admin/includes/schema.php:498 +msgid "Just another %s site" +msgstr "Otro sitio más de %s" + +#: wp-admin/includes/schema.php:599 +msgctxt "User role" +msgid "Administrator" +msgstr "Administrador" + +#: wp-admin/includes/schema.php:601 +msgctxt "User role" +msgid "Editor" +msgstr "Editor" + +#: wp-admin/includes/schema.php:603 +msgctxt "User role" +msgid "Author" +msgstr "Autor" + +#: wp-admin/includes/schema.php:605 +msgctxt "User role" +msgid "Contributor" +msgstr "Colaborador" + +#: wp-admin/includes/schema.php:607 +msgctxt "User role" +msgid "Subscriber" +msgstr "Suscriptor" + +#: wp-admin/includes/schema.php:932 wp-admin/includes/upgrade.php:135 +msgid "Welcome to SITE_NAME. This is your first post. Edit or delete it, then start blogging!" +msgstr "Te damos la bienvenida a SITE_NAME. Este es tu primer artículo. Edítalo o bórralo... ¡y comienza a publicar!" + +#: wp-admin/includes/schema.php:1000 +msgid "Warning! Wildcard DNS may not be configured correctly!" +msgstr "¡Atención! ¡Puede que las DNS no estén configuradas correctamente." + +#: wp-admin/includes/class-wp-comments-list-table.php:461 +#: wp-admin/includes/class-wp-posts-list-table.php:783 +#: wp-admin/includes/class-wp-terms-list-table.php:336 +msgid "Quick Edit" +msgstr "Edición rápida" + +#: wp-admin/includes/class-wp-comments-list-table.php:461 +#: wp-admin/includes/class-wp-posts-list-table.php:596 +#: wp-admin/includes/class-wp-terms-list-table.php:258 +msgid "Quick Edit" +msgstr "Edición rápida" + +#: wp-admin/includes/class-wp-posts-list-table.php:258 +msgctxt "column name" +msgid "Title" +msgstr "Título" + +#: wp-admin/includes/class-wp-media-list-table.php:132 +msgctxt "column name" +msgid "File" +msgstr "Archivo" + +#: wp-admin/includes/class-wp-media-list-table.php:161 +msgctxt "column name" +msgid "Date" +msgstr "Fecha" + +#: wp-admin/includes/class-wp-comments-list-table.php:296 +#: wp-admin/includes/class-wp-comments-list-table.php:581 +msgctxt "column name" +msgid "Comment" +msgstr "Comentario" + +#: wp-admin/includes/class-wp-links-list-table.php:84 +msgid "Relationship" +msgstr "Relación con el enlace (XFN)" + +#: wp-admin/includes/class-wp-links-list-table.php:85 +msgid "Visible" +msgstr "Visible" + +#: wp-admin/includes/class-wp-posts-list-table.php:783 +msgid "Bulk Edit" +msgstr "Edición masiva" + +#: wp-admin/includes/class-wp-posts-list-table.php:828 +#: wp-admin/includes/class-wp-posts-list-table.php:908 +#: wp-admin/includes/class-wp-posts-list-table.php:933 +#: wp-admin/includes/class-wp-posts-list-table.php:967 +#: wp-admin/includes/class-wp-posts-list-table.php:976 +#: wp-admin/includes/class-wp-posts-list-table.php:1008 +#: wp-admin/includes/class-wp-posts-list-table.php:1029 +#: wp-admin/includes/class-wp-posts-list-table.php:1057 +msgid "— No Change —" +msgstr "— Sin cambios —" + +#: wp-admin/includes/class-wp-posts-list-table.php:854 +msgid "–OR–" +msgstr "–O–" + +#: wp-admin/includes/class-wp-posts-list-table.php:968 +#: wp-admin/includes/class-wp-posts-list-table.php:977 +msgid "Allow" +msgstr "Permitir" + +#: wp-admin/includes/class-wp-posts-list-table.php:969 +#: wp-admin/includes/class-wp-posts-list-table.php:978 +msgid "Do not allow" +msgstr "No permitir" + +#: wp-admin/includes/class-wp-posts-list-table.php:990 +msgid "Allow Comments" +msgstr "Permitir comentarios" + +#: wp-admin/includes/class-wp-posts-list-table.php:995 +msgid "Allow Pings" +msgstr "Permitir pings" + +#: wp-admin/includes/class-wp-posts-list-table.php:1027 +#: wp-admin/includes/class-wp-posts-list-table.php:1030 +#: wp-admin/includes/template.php:1493 +msgid "Sticky" +msgstr "Fija" + +#: wp-admin/includes/class-wp-posts-list-table.php:1031 +msgid "Not Sticky" +msgstr "No es fija" + +#: wp-admin/includes/class-wp-posts-list-table.php:1039 +msgid "Make this post sticky" +msgstr "Marcar esta entrada como fija" + +#: wp-admin/includes/class-wp-posts-list-table.php:649 +msgid "Missed schedule" +msgstr "Programación perdida" + +#: wp-admin/includes/class-wp-posts-list-table.php:653 +msgid "Last Modified" +msgstr "Última modificación" + +#: wp-admin/includes/class-wp-users-list-table.php:306 +msgid "View posts by this author" +msgstr "Ver las entradas de este autor" + +#: wp-admin/includes/class-wp-comments-list-table.php:405 +msgid "In reply to %2$s." +msgstr "En respuesta a %2$s." + +#: wp-admin/includes/class-wp-comments-list-table.php:521 +msgid "Y/m/d \\a\\t g:ia" +msgstr "d/m/Y \\a\\t G:i" + +#: wp-admin/includes/template.php:373 +msgid "Reply to Comment" +msgstr "Responder al comentarío" + +#: wp-admin/includes/template.php:404 +msgid "Submit Reply" +msgstr "Enviar respuesta" + +#: wp-admin/includes/template.php:441 +msgid "Comment by %s moved to the trash." +msgstr "Comentario de %s movido a la papelera." + +#: wp-admin/includes/template.php:444 +msgid "Comment by %s marked as spam." +msgstr "El comentario de %s se ha marcado como spam." + +#: wp-admin/includes/template.php:464 wp-admin/includes/template.php:479 +#: wp-admin/includes/template.php:545 wp-admin/includes/template.php:575 +msgid "Value" +msgstr "Valor" + +#: wp-admin/includes/template.php:535 +msgid "Key" +msgstr "Clave" + +#: wp-admin/includes/template.php:570 +msgid "Add New Custom Field:" +msgstr "Añadir nuevo campo personalizado:" + +#: wp-admin/includes/template.php:596 +msgid "Enter new" +msgstr "Nuevo" + +#: wp-admin/includes/template.php:607 +msgid "Add Custom Field" +msgstr "Añadir un campo personalizado" + +#: wp-admin/includes/template.php:783 +msgid "Before you can upload your import file, you will need to fix the following error:" +msgstr "Antes de poder subir el fichero de importación, debes resolver el siguiente error:" + +#: wp-admin/includes/template.php:789 +msgid "Choose a file from your computer:" +msgstr "Elige un archivo de tu ordenador:" + +#: wp-admin/includes/template.php:789 +msgid "Maximum size: %s" +msgstr "Tamaño máximo: %s" + +#: wp-admin/includes/template.php:794 +msgid "Upload file and import" +msgstr "Subir archivo e importar" + +#: wp-admin/includes/template.php:921 wp-admin/press-this.php:480 +#: wp-admin/press-this.php:514 wp-admin/press-this.php:564 +msgid "Click to toggle" +msgstr "Haz clic para cambiar" + +#: wp-admin/includes/template.php:1323 +msgid "Find Posts or Pages" +msgstr "Buscar entradas o páginas" + +#: wp-admin/plugin-install.php:29 +msgid "Install Plugins" +msgstr "Instalar plugins" + +#: wp-admin/theme-install.php:27 wp-admin/update.php:209 +msgid "Install Themes" +msgstr "Instalar temas" + +#: wp-admin/themes.php:35 +msgid "Manage Themes" +msgstr "Administrar temas" + +#: wp-admin/includes/template.php:1491 +msgctxt "post state" +msgid "Pending" +msgstr "Pendiente" + +#: wp-admin/includes/screen.php:888 +msgid "Enable accessibility mode" +msgstr "Activar modo de accesibilidad" + +#: wp-admin/includes/screen.php:888 +msgid "Disable accessibility mode" +msgstr "Desactivar modo de accesibilidad" + +#: wp-admin/includes/media.php:2063 wp-admin/includes/nav-menu.php:668 +#: wp-admin/includes/nav-menu.php:908 +msgid "«" +msgstr "«" + +#: wp-admin/includes/media.php:2064 wp-admin/includes/nav-menu.php:669 +#: wp-admin/includes/nav-menu.php:909 +msgid "»" +msgstr "»" + +#: wp-admin/includes/ajax-actions.php:565 +msgid "Comment %d does not exist" +msgstr "El comentario %d no existe" + +#: wp-admin/includes/taxonomy.php:101 +msgid "You did not enter a category name." +msgstr "No has introducido un nombre de categoría." + +#: wp-admin/includes/ajax-actions.php:796 +msgid "Sorry, you must be logged in to reply to a comment." +msgstr "Lo siento, tienes que iniciar sesión para responder a un comentario." + +#: wp-admin/includes/ajax-actions.php:1005 +#: wp-admin/includes/ajax-actions.php:1010 +#: wp-admin/includes/ajax-actions.php:1030 +msgid "Please provide a custom field value." +msgstr "Por favor, pon algún valor en el campo personalizado." + +#: wp-admin/includes/ajax-actions.php:1085 +msgid "User %s added" +msgstr "Usuario %s añadido" + +#: wp-admin/includes/ajax-actions.php:1133 +msgid "g:i:s a" +msgstr "G:i:s" + +#: wp-admin/includes/ajax-actions.php:1135 +msgid "Draft saved at %s." +msgstr "Borrador guardado a las %s." + +#: wp-admin/includes/ajax-actions.php:1357 +msgid "Someone" +msgstr "Alguien" + +#: wp-admin/includes/ajax-actions.php:1113 +#: wp-admin/includes/ajax-actions.php:1349 wp-admin/includes/post.php:176 +#: wp-admin/includes/post.php:1416 +msgid "You are not allowed to edit this page." +msgstr "No tienes autorización para editar esta página." + +#: wp-admin/includes/ajax-actions.php:1110 +#: wp-admin/includes/ajax-actions.php:1352 wp-admin/includes/post.php:178 +#: wp-admin/includes/post.php:1419 wp-admin/press-this.php:35 +#: wp-admin/upload.php:62 +msgid "You are not allowed to edit this post." +msgstr "No tienes autorización para editar esta entrada." + +#: wp-admin/includes/ajax-actions.php:1358 +msgid "Saving is disabled: %s is currently editing this page." +msgstr "Guardar está desactivado: %s está ahora mismo editando esta página." + +#: wp-admin/includes/ajax-actions.php:1358 +msgid "Saving is disabled: %s is currently editing this post." +msgstr "Guardar está desactivado: %s está ahora mismo editando esta entrada." + +#: wp-admin/edit-tags.php:262 wp-admin/includes/ajax-actions.php:1442 +#: wp-admin/includes/ajax-actions.php:1447 +msgid "Item not updated." +msgstr "No actualizado." + +#: wp-admin/includes/ajax-actions.php:1483 +#: wp-admin/includes/class-wp-posts-list-table.php:286 +#: wp-admin/includes/class-wp-posts-list-table.php:808 +msgid "Date" +msgstr "Fecha" + +#: wp-admin/edit-form-comment.php:74 wp-admin/includes/ajax-actions.php:1483 +#: wp-admin/includes/class-wp-posts-list-table.php:1005 +msgid "Status" +msgstr "Estado" + +#: wp-admin/includes/ajax-actions.php:1493 +#: wp-admin/includes/class-wp-posts-list-table.php:651 +#: wp-admin/includes/class-wp-posts-list-table.php:1012 +#: wp-admin/includes/meta-boxes.php:69 wp-admin/includes/meta-boxes.php:92 +msgid "Scheduled" +msgstr "Programada" + +#: wp-admin/admin-footer.php:35 +msgid "Thank you for creating with WordPress." +msgstr "Gracias por crear con WordPress." + +#: wp-admin/admin.php:220 +msgid "Invalid plugin page" +msgstr "Página de plugin no válida" + +#: wp-admin/admin.php:223 +msgid "Cannot load %s." +msgstr "No se pudo cargar %s." + +#: wp-admin/admin.php:256 +msgid "You are not allowed to import." +msgstr "No tienes autorización para importar." + +#: wp-admin/admin.php:279 wp-admin/import.php:17 wp-admin/menu.php:207 +msgid "Import" +msgstr "Importar" + +#: wp-admin/comment.php:46 wp-admin/edit-form-comment.php:16 +msgid "Edit Comment" +msgstr "Editar comentario" + +#: wp-admin/comment.php:68 wp-admin/comment.php:221 +#: wp-admin/edit-comments.php:164 +msgid "Oops, no comment with this ID." +msgstr "Vaya, no hay comentarios con ese ID." + +#: wp-admin/comment.php:68 wp-admin/comment.php:221 +#: wp-admin/includes/post.php:1243 +msgid "Go back" +msgstr "Volver atrás" + +#: wp-admin/comment.php:223 wp-admin/edit-comments.php:167 +#: wp-admin/includes/comment.php:37 +msgid "You are not allowed to edit comments on this post." +msgstr "No tienes autorización para editar comentarios en esta entrada." + +#: wp-admin/comment.php:74 +msgid "This comment is in the Trash. Please move it out of the Trash if you want to edit it." +msgstr "Este comentario está en la papelera. Por favor, sácalo de la papelera si quieres editarlo." + +#: wp-admin/comment.php:123 +msgid "You are about to mark the following comment as spam:" +msgstr "Estás a punto de marcar el siguiente comentario como spam:" + +#: wp-admin/comment.php:124 +msgid "Spam Comment" +msgstr "Comentario spam" + +#: wp-admin/comment.php:127 +msgid "You are about to move the following comment to the Trash:" +msgstr "Estás a punto de mover el siguiente comentario a la basura:" + +#: wp-admin/comment.php:128 +msgid "Trash Comment" +msgstr "Enviar comentario a la papelera" + +#: wp-admin/comment.php:131 +msgid "You are about to delete the following comment:" +msgstr "Estás a punto de borrar el siguiente comentario:" \ No newline at end of file diff --git a/src/wp-content/languages/admin-network-es_ES.mo b/src/wp-content/languages/admin-network-es_ES.mo new file mode 100644 index 0000000..b2a502a Binary files /dev/null and b/src/wp-content/languages/admin-network-es_ES.mo differ diff --git a/src/wp-content/languages/admin-network-es_ES.po b/src/wp-content/languages/admin-network-es_ES.po new file mode 100644 index 0000000..b35b59b --- /dev/null +++ b/src/wp-content/languages/admin-network-es_ES.po @@ -0,0 +1,1102 @@ +# 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: 2013-12-05 00:41:07+0000\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: GlotPress/0.1\n" +"Project-Id-Version: Network Admin\n" + +#: wp-admin/network/settings.php:104 +msgid "This email address will receive notifications. Registration and support emails will also come from this address." +msgstr "Esta dirección de correo electrónico recibirá las notificaciones. Los correos electrónicos de registro y soporte también vendrán de esta dirección." + +#: wp-admin/network/users.php:234 +msgid "Hover over any user on the list to make the edit links appear. The Edit link on the left will take you to their Edit User profile page; the Edit link on the right by any site name goes to an Edit Site screen for that site." +msgstr "Pasa el cursor sobre cualquier usuario de las lista para que se muestren los enlaces de edición. El enlace de edición de la izquierda te llevará a la página de edición del perfil de usuario; El de la derecha de los nombres de los sitios te lleva a la pantalla de edición de sitio del mismo." + +#: wp-admin/network/index.php:39 +msgid "To add a new user, click Create a New User." +msgstr "Para añadir un usuario nuevo haz clic en Crear nuevo usuario." + +#: wp-admin/network/index.php:40 +msgid "To add a new site, click Create a New Site." +msgstr "Para añadir un sitio nuevo haz clic en Crear un nuevo sitio." + +#: wp-admin/network/index.php:42 +msgid "To search for a user, enter an email address or username. Use a wildcard to search for a partial username, such as user*." +msgstr "Para buscar un usuario introduce una dirección de correo electrónico o un nombre de usuario. Utiliza comodines para buscar un nombre de usuario parcial, como usuario*." + +#: wp-admin/network/index.php:43 +msgid "To search for a site, enter the path or domain." +msgstr "Para buscar un sitio introduce la ruta o el dominio." + +#: wp-admin/network/upgrade.php:92 +msgid "The database upgrade process may take a little while, so please be patient." +msgstr "El proceso de actualización de la base de datos puede tardar un rato así que por favor ten paciencia." + +#: wp-admin/network/settings.php:82 +msgid "Options saved." +msgstr "Opciones guardadas." + +#: wp-admin/network/index.php:25 +msgid "Welcome to your Network Admin. This area of the Administration Screens is used for managing all aspects of your Multisite Network." +msgstr "Bienvenido a la administración de la red (Network Admin). Esta área de administración se utiliza para gestionar todos los aspectos de tu red multisitio (Multisite Network)" + +#: wp-admin/network/index.php:26 +msgid "From here you can:" +msgstr "Desde aquí puedes:" + +#: wp-admin/network/index.php:27 +msgid "Add and manage sites or users" +msgstr "Añade y gestiona sitios o usuarios" + +#: wp-admin/network/index.php:28 +msgid "Install and activate themes or plugins" +msgstr "Instala y activa temas o plugins" + +#: wp-admin/network/index.php:29 +msgid "Update your network" +msgstr "Actualiza tu red" + +#: wp-admin/network/index.php:30 +msgid "Modify global network settings" +msgstr "Modifica las opciones globales de la red" + +#: wp-admin/network/index.php:38 +msgid "The Right Now widget on this screen provides current user and site counts on your network." +msgstr "El widget Ahora mismo de esta pantalla ofrece contadores al usuario y sitio actual de tu red." + +#: wp-admin/network/index.php:41 +msgid "To search for a user or site, use the search boxes." +msgstr "Para buscar un usuario o sitio usa las cajas de búsqueda." + +#: wp-admin/network/index.php:47 +msgid "Quick Tasks" +msgstr "Tareas rápidas" + +#: wp-admin/network/menu.php:59 wp-admin/network/upgrade.php:18 +#: wp-admin/network/upgrade.php:42 wp-admin/network/upgrade.php:93 +msgid "Upgrade Network" +msgstr "Actualiza la red" + +#: wp-admin/network/upgrade.php:25 +msgid "Only use this screen once you have updated to a new version of WordPress through Updates/Available Updates (via the Network Administration navigation menu or the Toolbar). Clicking the Upgrade Network button will step through each site in the network, five at a time, and make sure any database updates are applied." +msgstr "Usa esta pantalla solamente una vez hayas actualizado a una nueva versión de WordPress desde Actualizaciones disponibles (en el menú de navegación o barra de Administración de la red). Haciendo clic en el botón Actualizar red va sitio a sitio de la red, cinco cada vez, y se asegura de que se actualizan las bases de datos." + +#: wp-admin/network/upgrade.php:32 +msgid "Documentation on Upgrade Network" +msgstr "Documentación sobre actualizar red" + +#: wp-admin/network/upgrade.php:88 +msgid "Database Upgrade Required" +msgstr "Se requiere actualizar la base de datos" + +#: wp-admin/network/upgrade.php:89 +msgid "WordPress has been updated! Before we send you on your way, we need to individually upgrade the sites in your network." +msgstr "¡WordPress está actualizado\" Antes de devolverte a tus cosas tenemos que actualizar los sitios de tu red uno a uno." + +#: wp-admin/network/site-new.php:87 +msgid "" +"New site created by %1$s\n" +"\n" +"Address: %2$s\n" +"Name: %3$s" +msgstr "" +"Nuevo sitio creado por %1$s\n" +" \n" +" Dirección: %2$s\n" +" Nombre: %3$s" + +#: wp-admin/network.php:116 +msgid "Add the designated lines of code to wp-config.php (just before /*...stop editing...*/) and .htaccess (replacing the existing WordPress rules)." +msgstr "Añade las líneas señaladas designadas a wp-config.php (justo antes de /*...para de editar...*/) y a .htaccess (remplazando las reglas existentes de WordPress)." + +#: wp-admin/network.php:235 wp-admin/network.php:474 wp-admin/network.php:508 +msgid "Subdirectory networks may not be fully compatible with custom wp-content directories." +msgstr "Las redes en subdirectorios pueden no ser totalmente compatibles con el directorio wp-content personalizado." + +#: wp-admin/network/users.php:25 +msgid "Transfer or delete posts before deleting users." +msgstr "Transfiere o elimina las entradas antes de eliminar el usuario." + +#: wp-admin/network/users.php:48 +msgid "What should be done with posts owned by %s?" +msgstr "¿Qué debemos hacer con las entradas propiedad de %s?" + +#: wp-admin/network/settings.php:37 +msgid "Documentation on Network Settings" +msgstr "Documentación sobre Ajustes de la red" + +#: wp-admin/network/site-users.php:230 +msgid "Enter the username and email." +msgstr "Introduce el nombre de usuario y email." + +#: wp-admin/network/site-users.php:218 +msgid "Select a user to change role." +msgstr "Elige un usuario para cambiar su perfil." + +#: wp-admin/network/site-users.php:224 +msgid "Select a user to remove." +msgstr "Elige un usuario para borrarlo." + +#: wp-admin/network/site-users.php:227 +msgid "User created." +msgstr "Usuario creado." + +#: wp-admin/network/users.php:41 +msgid "Warning! User cannot be deleted. The user %s is a network administrator." +msgstr "¡Atención! Este usuario no puede borrarse. El usuario %s es un administrador de la red." + +#: wp-admin/network/users.php:66 +msgid "Site: %s" +msgstr "Sitio: %s" + +#: wp-admin/network/site-users.php:284 wp-admin/network/user-new.php:102 +msgid "Add User" +msgstr "Añadir usuario" + +#: wp-admin/network/user-new.php:51 +msgid "Cannot add user." +msgstr "No se pudo añadir el usuario." + +#: wp-admin/network/sites.php:126 +msgid "You are not allowed to delete the site." +msgstr "No tienes permisos para borrar este sitio." + +#: wp-admin/network/site-users.php:209 +msgid "User is already a member of this site." +msgstr "El usuario ya es miembro de este sitio." + +#: wp-admin/network/site-info.php:84 +msgid "Site info updated." +msgstr "Información del sitio actualizada." + +#: wp-admin/network/users.php:38 +msgid "Warning! User %s cannot be deleted." +msgstr "¡Aviso! El usuario %s no puede borrarse." + +#: wp-admin/network/site-users.php:212 +msgid "Enter the username of an existing user." +msgstr "Introduce el nombre de usuario de un usuario existente." + +#: wp-admin/network/themes.php:246 +msgid "You cannot delete a theme while it is active on the main site." +msgstr "No puedes borrar un tema si está activo en el sitio principal." + +#: wp-admin/network/site-new.php:106 wp-admin/network/site-new.php:114 +msgid "Add New Site" +msgstr "Añadir nuevo sitio" + +#: wp-admin/network/themes.php:242 +msgctxt "network" +msgid "Theme deleted." +msgid_plural "%s themes deleted." +msgstr[0] "Tema borrado." +msgstr[1] "%s temas borrados." + +#: wp-admin/network/themes.php:214 +msgid "Documentation on Network Themes" +msgstr "Documentación sobre Temas de la red" + +#: wp-admin/network/site-info.php:103 wp-admin/network/site-settings.php:94 +#: wp-admin/network/site-themes.php:142 wp-admin/network/site-users.php:191 +msgid "Info" +msgstr "Información" + +#: wp-admin/network/themes.php:147 +msgid "Are you sure you wish to delete these themes?" +msgstr "¿Estás seguro de que quieres borrar estos temas?" + +#: wp-admin/network/themes.php:156 +msgid "Yes, Delete this theme" +msgid_plural "Yes, Delete these themes" +msgstr[0] "Sí, borrar este tema" +msgstr[1] "Sí, borrar estos temas" + +#: wp-admin/network/themes.php:142 +msgid "You are about to remove the following theme:" +msgid_plural "You are about to remove the following themes:" +msgstr[0] "Estás a punto de borrar el siguiente tema:" +msgstr[1] "Estás a punto de borrar los siguientes temas:" + +#: wp-admin/network/themes.php:141 +msgid "This theme may be active on other sites in the network." +msgid_plural "These themes may be active on other sites in the network." +msgstr[0] "Este tema podría estar activo en otros sitios de la red." +msgstr[1] "Estos temas podrían estar activos en otros sitios de la red." + +#: wp-admin/network/themes.php:139 +msgid "Delete Theme" +msgid_plural "Delete Themes" +msgstr[0] "Borrar tema" +msgstr[1] "Borrar temas" + +#: wp-admin/network/menu.php:46 wp-admin/network/settings.php:19 +msgid "Network Settings" +msgstr "Ajustes de red" + +#: wp-admin/network/site-themes.php:164 +msgid "Network enabled themes are not shown on this screen." +msgstr "Los temas activos para la red no se muestran en esta pantalla." + +#: wp-admin/network/themes.php:17 +msgid "You do not have sufficient permissions to manage network themes." +msgstr "No tienes suficientes permisos para administrar temas de la red." + +#: wp-admin/network/menu.php:58 +msgid "Available Updates" +msgstr "Actualizaciones disponibles" + +#: wp-admin/network/user-new.php:23 +msgid "Add User will set up a new user account on the network and send that person an email with username and password." +msgstr "Añadir usuario configurará una nueva cuenta de usuario en la red y enviará a esa persona un correo electrónico con su usuario y contraseña." + +#: wp-admin/network/site-info.php:88 wp-admin/network/site-settings.php:79 +#: wp-admin/network/site-themes.php:129 wp-admin/network/site-users.php:161 +msgid "Edit Site: %2$s" +msgstr "Editar sitio: %2$s" + +#: wp-admin/network/themes.php:105 +msgid "You do not have sufficient permissions to delete themes for this site." +msgstr "No tienes suficientes permisos para borrar temas en este sitio." + +#: wp-admin/network/site-themes.php:159 wp-admin/network/themes.php:239 +msgid "Theme disabled." +msgid_plural "%s themes disabled." +msgstr[0] "Tema desactivado." +msgstr[1] "%s temas desactivados." + +#: wp-admin/network/site-info.php:39 wp-admin/network/site-settings.php:39 +#: wp-admin/network/site-themes.php:50 wp-admin/network/site-users.php:45 +msgid "Invalid site ID." +msgstr "ID de sitio no válido." + +#: wp-admin/network/site-themes.php:156 wp-admin/network/themes.php:236 +msgid "Theme enabled." +msgid_plural "%s themes enabled." +msgstr[0] "Tema activado" +msgstr[1] "%s temas activados." + +#: wp-admin/network/site-themes.php:161 wp-admin/network/themes.php:244 +msgid "No theme selected." +msgstr "Ningún tema seleccionado." + +#: wp-admin/network/site-info.php:26 wp-admin/network/site-settings.php:26 +#: wp-admin/network/site-themes.php:26 wp-admin/network/site-users.php:29 +msgid "Themes - This area shows themes that are not already enabled across the network. Enabling a theme in this menu makes it accessible to this site. It does not activate the theme, but allows it to show in the site’s Appearance menu. To enable a theme for the entire network, see the Network Themes screen." +msgstr "Temas - Esta área muestra temas que no están activos en la red. Activando un tema en este menú hará que esté disponible para este sitio. No activa el tema pero permite que se muestre en el menú de Aspecto del sitio. Para activar un tema para toda la red ve a la pantalla de Temas de la red." + +#: wp-admin/network/site-info.php:89 wp-admin/network/site-settings.php:80 +#: wp-admin/network/site-themes.php:130 wp-admin/network/site-users.php:162 +msgid "Edit Site: %s" +msgstr "Editar sitio: %s" + +#: wp-admin/network/themes.php:159 +msgid "No, Return me to the theme list" +msgstr "No, devuélveme a la lista de temas" + +#: wp-admin/network/site-info.php:27 wp-admin/network/site-settings.php:27 +#: wp-admin/network/site-themes.php:27 wp-admin/network/site-users.php:30 +msgid "Settings - This page shows a list of all settings associated with this site. Some are created by WordPress and others are created by plugins you activate. Note that some fields are grayed out and say Serialized Data. You cannot modify these values due to the way the setting is stored in the database." +msgstr "Ajustes - Esta página muestra una lista de todos los ajustes asociados a este sitio. Algunos han sido creados por WordPerss y otros los crean los plugins que activas. Observa que algunos campos están oscurecidos y muestran Serialized data. No puedes modificar estos valores por el modo en que el ajuste está almacenado en la base de datos." + +#: wp-admin/network/site-themes.php:126 wp-admin/network/themes.php:201 +msgctxt "themes per page (screen options)" +msgid "Themes" +msgstr "Temas" + +#: wp-admin/network/site-info.php:24 wp-admin/network/site-settings.php:24 +#: wp-admin/network/site-themes.php:24 wp-admin/network/site-users.php:27 +msgid "Info - The domain and path are rarely edited as this can cause the site to not work properly. The Registered date and Last Updated date are displayed. Network admins can mark a site as archived, spam, deleted and mature, to remove from public listings or disable." +msgstr "Información: El dominio y la ruta raramente se editan porque podría provocar que el sitio no funcionase correctamente. Se muestran las fechas de registro y de la última actualización. Los administradores de red puede marcar un sitio como archivado, spam, borrado y de contenido pata adultos, para borrarlo de las listas públicas o desactivado." + +#: wp-admin/network/site-info.php:25 wp-admin/network/site-settings.php:25 +#: wp-admin/network/site-themes.php:25 wp-admin/network/site-users.php:28 +msgid "Users - This displays the users associated with this site. You can also change their role, reset their password, or remove them from the site. Removing the user from the site does not remove the user from the network." +msgstr "Usuarios - Esto muestra los usuarios asociados a este sitio. También puedes cambiar su perfil, reiniciar su contraseña o borrarlos del sitio. Borrar un usuario del sitio no borra al usuario de la red." + +#: wp-admin/network/site-info.php:23 wp-admin/network/site-settings.php:23 +#: wp-admin/network/site-themes.php:23 wp-admin/network/site-users.php:26 +msgid "The menu is for editing information specific to individual sites, particularly if the admin area of a site is unavailable." +msgstr "El menú es para editar información específica de sitios individuales, especialmente si el área de administración de un sitio no está disponible." + +#: wp-admin/network/sites.php:35 +msgid "Dashboard leads to the Dashboard for that site." +msgstr "Escritorio te lleva al escritorio de ese sitio." + +#: wp-admin/network/settings.php:145 +msgid "Allow site administrators to add new users to their site via the \"Users → Add New\" page." +msgstr "Permite a los administradores de sitio añadir nuevos usuarios a su sitio a través de la página \"Usuarios → Añadir nuevo\"." + +#: wp-admin/network/settings.php:281 +msgid "Language Settings" +msgstr "Ajustes de idioma" + +#: wp-admin/network/site-settings.php:75 +msgid "Site options updated." +msgstr "Opciones del sitio actualizadas." + +#: wp-admin/network/menu.php:31 +msgid "Installed Themes" +msgstr "Temas instalados" + +#: wp-admin/network/menu.php:27 +msgid "Themes %s" +msgstr "Temas %s" + +#: wp-admin/network/site-info.php:32 wp-admin/network/site-new.php:29 +#: wp-admin/network/site-settings.php:32 wp-admin/network/site-themes.php:32 +#: wp-admin/network/site-users.php:35 wp-admin/network/sites.php:45 +msgid "Documentation on Site Management" +msgstr "Documentación sobre Gestión del sitio" + +#: wp-admin/network/index.php:54 wp-admin/network/site-info.php:33 +#: wp-admin/network/site-new.php:30 wp-admin/network/site-settings.php:33 +#: wp-admin/network/site-themes.php:33 wp-admin/network/site-users.php:36 +#: wp-admin/network/sites.php:46 wp-admin/network/user-new.php:30 +#: wp-admin/network/users.php:244 +msgid "Support Forums" +msgstr "Foros de soporte" + +#: wp-admin/network/menu.php:18 wp-admin/network/sites.php:237 +msgctxt "site" +msgid "Add New" +msgstr "Añadir nuevo" + +#: wp-admin/network/menu.php:17 +msgid "All Sites" +msgstr "Todos los sitios" + +#: wp-admin/network/index.php:53 +msgid "Documentation on the Network Admin" +msgstr "Documentación sobre Administrador de la red" + +#: wp-admin/network/site-themes.php:17 +msgid "You do not have sufficient permissions to manage themes for this site." +msgstr "No tienes suficentes permisos para administrar temas en este sitio." + +#: wp-admin/network/site-new.php:103 +msgid "Site added. Visit Dashboard or Edit Site" +msgstr "Sitio añadido. Visita el Escritorio or Edita el sitio" + +#: wp-admin/network/sites.php:31 +msgid "Add New takes you to the Add New Site screen. You can search for a site by Name, ID number, or IP address. Screen Options allows you to choose how many sites to display on one page." +msgstr "Añadir nuevo te lleva a la pantalla de Añadir nuevo sitiio. Puedes buscar un sitio por nombre, número de ID o dirección IP. Las Opciones de pantalla te permiten elegir cuantos sitios mostrar por página." + +#: wp-admin/network/user-new.php:17 +msgid "You do not have sufficient permissions to add users to this network." +msgstr "No tienes suficientes permisos para añadir usuarios a esta red." + +#: wp-admin/network/sites.php:25 +msgctxt "sites per page (screen options)" +msgid "Sites" +msgstr "Sitios" + +#: wp-admin/network/sites.php:199 +msgid "You do not have permission to delete that site." +msgstr "No tienes permisos para borrar ese sitio." + +#: wp-admin/network/site-new.php:17 +msgid "You do not have sufficient permissions to add sites to this network." +msgstr "No tienes suficientes permisos para añadir sitios a esta red." + +#: wp-admin/network/menu.php:32 wp-admin/network/themes.php:228 +msgctxt "theme" +msgid "Add New" +msgstr "Añadir nuevo" + +#: wp-admin/network/user-new.php:29 wp-admin/network/users.php:243 +msgid "Documentation on Network Users" +msgstr "Documentación sobre Usuarios de la red" + +#: wp-admin/network/sites.php:40 +msgid "Clicking on bold headings can re-sort this table." +msgstr "Haciendo clic en las cabeceras en negrita puedes reordenar esta tabla." + +#: wp-admin/network/sites.php:37 +msgid "Delete which is a permanent action after the confirmation screens." +msgstr "Borrar es una acción permanente tras las pantallas de confirmación." + +#: wp-admin/network/themes.php:209 +msgid "Themes can be enabled on a site by site basis by the network admin on the Edit Site screen (which has a Themes tab); get there via the Edit action link on the All Sites screen. Only network admins are able to install or edit themes." +msgstr "Los temas puede activarlos el administrador de la red sitio a sitio en la pantalla de Editar sitio (que tiene una pestaña Temas); puedes llegar ahí desde el enlace de acción Editar de la pantalla Todos los sitios. Solo los administradores de red pueden instalar o editar temas. " + +#: wp-admin/network/sites.php:34 +msgid "An Edit link to a separate Edit Site screen." +msgstr "Un enlace de Editar que lleva a otra pantalla de Editar sitio." + +#: wp-admin/network/site-new.php:23 +msgid "This screen is for Super Admins to add new sites to the network. This is not affected by the registration settings." +msgstr "Esta pantalla es para que los Super administradores añadan nuevos sitios a la red. No le afectan los ajustes de registro." + +#: wp-admin/network/menu.php:53 +msgid "Updates" +msgstr "Actualizar" + +#: wp-admin/network/settings.php:32 +msgid "Super admins can no longer be added on the Options screen. You must now go to the list of existing users on Network Admin > Users and click on Username or the Edit action link below that name. This goes to an Edit User page where you can check a box to grant super admin privileges." +msgstr "Los super administadores ya no pueden añadirse en la pantalla de Ajustes. Ahora debes ir a la lista de usuarios existentes en Administrar red > Usuarios y hacer clic en el enlace de acción de Usuario o Editar debajo del nombre. Esto te lleva a una página de Editar usuario en la que puedes marcar una casilla que le dará privilegios de Super administrador." + +#: wp-admin/network.php:227 +msgctxt "subdirectory examples" +msgid "like %1$s/site1 and %1$s/site2" +msgstr "cómo %1$s/sitio1 and %1$s/sitio2" + +#: wp-admin/network.php:240 wp-admin/network.php:244 wp-admin/network.php:284 +msgid "Server Address" +msgstr "Dirección del servidor" + +#: wp-admin/network.php:258 +msgid "Because you are using localhost, the sites in your WordPress network must use sub-directories. Consider using localhost.localdomain if you wish to use sub-domains." +msgstr "Cómo estás usando localhost los sitios en tu red de WordPress deben estar en subdirectorios. Considera usar localhost.localdomain si deseas usar subdominios." + +#: wp-admin/network.php:261 wp-admin/network.php:271 wp-admin/network.php:278 +msgid "The main site in a sub-directory install will need to use a modified permalink structure, potentially breaking existing links." +msgstr "El sitio principal en un subdirectorio de instalación tendrá que utilizar una estructura de enlaces permanentes modificada, lo que podría romper los vínculos existentes." + +#: wp-admin/network.php:268 +msgid "Because your install is in a directory, the sites in your WordPress network must use sub-directories." +msgstr "Cómo lo has instalado en un subdirectorio, los sitios en tu red de WordPress, deben usar subdirectorios." + +#: wp-admin/network.php:276 +msgid "Sub-domain Install" +msgstr "Instalación en subdominio" + +#: wp-admin/network.php:277 +msgid "Because your install is not new, the sites in your WordPress network must use sub-domains." +msgstr "Cómo como tu instalación no es nueva, los sitios de tu red deberán utilizar subdominios." + +#: wp-admin/network/settings.php:93 wp-admin/network.php:291 +msgid "Network Title" +msgstr "Título de la red" + +#: wp-admin/network.php:295 +msgid "What would you like to call your network?" +msgstr "¿Cómo quieres llamar a tu red?" + +#: wp-admin/network.php:304 +msgid "Your email address." +msgstr "Tu dirección de correo electrónico." + +#: wp-admin/network.php:349 +msgid "The original configuration steps are shown here for reference." +msgstr "Los pasos de configuración originales se muestran aquí para tenerlos como referencia." + +#: wp-admin/network.php:354 +msgid "An existing WordPress network was detected." +msgstr "Se ha detectado una red de WordPress existente." + +#: wp-admin/network.php:355 +msgid "Please complete the configuration steps. To create a new network, you will need to empty or remove the network database tables." +msgstr "Por favor, completa los pasos de configuración. Para crear una nueva red necesitarás vaciar o eliminar las tablas de la red en la base de datos." + +#: wp-admin/network.php:366 +msgid "Enabling the Network" +msgstr "Activando la red" + +#: wp-admin/network.php:367 +msgid "Complete the following steps to enable the features for creating a network of sites." +msgstr "Completa los siguientes pasos para activar la función de creación de red de sitios." + +#: wp-admin/network.php:370 wp-admin/network.php:372 +msgid "Caution: We recommend you back up your existing wp-config.php and %s files." +msgstr "Cuidado: Te recomendamos que hagas copia de seguridad de tus archivos wp-config.php y %s." + +#: wp-admin/network.php:374 +msgid "Caution: We recommend you back up your existing wp-config.php file." +msgstr "Atención: Recomendamos realizar una copia de seguridad de tu archivo wp-config.php." + +#: wp-admin/network.php:380 +msgid "Add the following to your wp-config.php file in %s above the line reading /* That’s all, stop editing! Happy blogging. */:" +msgstr "Añade lo siguiente a tu archivo wp-config.php en %s sobre la línea que dice /* ¡Eso es todo, no hay que editar nada más! Feliz blogging. */:" + +#: wp-admin/network.php:196 +msgid "Fill in the information below and you’ll be on your way to creating a network of WordPress sites. We will create configuration files in the next step." +msgstr "Completa la información siguiente y estarás en el camino de crear una red de sitios con WordPress. Crearemos los archivos de configuración en el siguiente paso." + +#: wp-admin/network.php:208 +msgid "Note:" +msgstr "Nota:" + +#: wp-admin/network.php:208 +msgid "Please make sure the Apache mod_rewrite module is installed as it will be used at the end of this installation." +msgstr "Por favor, asegúrate de que el módulo Apache mod_rewrite está instalado, ya que será utilizado al finalizar la instalación." + +#: wp-admin/network.php:411 +msgid "This unique authentication key is also missing from your wp-config.php file." +msgid_plural "These unique authentication keys are also missing from your wp-config.php file." +msgstr[0] "Esta clave de autentificación tampoco se encuentra en tu archivo wp-config.php" +msgstr[1] "Estas claves de autentificación tampoco se encuentran en tu archivo wp-config.php" + +#: wp-admin/network.php:171 +msgid "You cannot install a network of sites with your server address." +msgstr "No puedes instalar una red de sitios con tu dirección de servidor." + +#: wp-admin/network.php:172 +msgid "You cannot use port numbers such as %s." +msgstr "No puedes usar números de puerto como %s." + +#: wp-admin/network.php:218 +msgid "You will need a wildcard DNS record if you are going to use the virtual host (sub-domain) functionality." +msgstr "Necesitarás crear un registro DNS wildcard si vas a utilizar la funcionalidad de servidor vitual (sub-dominios)." + +#: wp-admin/network.php:212 +msgid "If mod_rewrite is disabled, ask your administrator to enable that module, or look at the Apache documentation or elsewhere for help setting it up." +msgstr "Si mod_rewrite está deshabilitado, pide a su administrador que active ese módulo, o revise la documentación de Apache o en otros sitios para conseguir ayuda para su configuración." + +#: wp-admin/network.php:192 +msgctxt "Default network name" +msgid "%s Sites" +msgstr "Sitios de %s" + +#: wp-admin/network.php:246 wp-admin/network.php:286 +msgid "The internet address of your network will be %s." +msgstr "La dirección en internet de tu red será %s." + +#: wp-admin/network.php:210 wp-admin/network.php:235 wp-admin/network.php:261 +#: wp-admin/network.php:271 +msgid "Warning!" +msgstr "¡Aviso!" + +#: wp-admin/network.php:222 +msgid "Sub-domains" +msgstr "Subdominios" + +#: wp-admin/network.php:411 +msgid "To make your installation more secure, you should also add:" +msgstr "Para hacer tu instalación más segura debes añadir lo siguiente:" + +#: wp-admin/network.php:114 +msgid "Choose subdomains or subdirectories; this can only be switched afterwards by reconfiguring your install. Fill out the network details, and click install. If this does not work, you may have to add a wildcard DNS record (for subdomains) or change to another setting in Permalinks (for subdirectories)." +msgstr "Elige subdominios o subdirectorios. Esto solo puede cambiarse reconfigurando tu instalación. Rellena los detalles de la red y haz clic en instalar. Si no funciona, deberás añadir un registro DNS wildcard (para los subdominios) o cambiar a otro ajuste de enlaces permanentes (para los subdirectorios)." + +#: wp-admin/network.php:115 +msgid "The next screen for Network Setup will give you individually-generated lines of code to add to your wp-config.php and .htaccess files. Make sure the settings of your FTP client make files starting with a dot visible, so that you can find .htaccess; you may have to create this file if it really is not there. Make backup copies of those two files." +msgstr "La siguiente pantalla para configurar la red te ofrecerá líneas de código autogeneradas para ti para que las añadas a tus archivos wp-config.php y .htaccess. Asegúrate de que los ajustes de tu cliente FTP permiten que los ficheros con un punto delante se muestren, para que puedas ver el fichero .htaccess; puede que tengas que crear este archivo si no estuviera ya creado. Haz copias de seguridad de esos dos archivos." + +#: wp-admin/network.php:471 +msgid "Add the following to your web.config file in %s, replacing other WordPress rules:" +msgstr "Añade lo siguiente a tu archivo web.config en %s, remplazando las reglas existentes de WordPress:" + +#: wp-admin/network.php:505 +msgid "Add the following to your .htaccess file in %s, replacing other WordPress rules:" +msgstr "Añade lo siguiente a tu archivo .htaccess en %s, remplazando las reglas existentes de WordPress:" + +#: wp-admin/network.php:517 +msgid "Once you complete these steps, your network is enabled and configured. You will have to log in again." +msgstr "Una vez que completes estos pasos tu red estará activa y configurada. Deberás acceder de nuevo." + +#: wp-admin/network.php:154 +msgid "The constant DO_NOT_UPGRADE_GLOBAL_TABLES cannot be defined when creating a network." +msgstr "La constante DO_NOT_UPGRADE_GLOBAL_TABLES no puede definirse al crear una red." + +#: wp-admin/network.php:252 +msgid "Network Details" +msgstr "Detalles de la red" + +#: wp-admin/network.php:195 +msgid "Welcome to the Network installation process!" +msgstr "¡Bienvenido al proceso de instalación de la red!" + +#: wp-admin/network.php:210 +msgid "It looks like the Apache mod_rewrite module is not installed." +msgstr "Parece que el módulo mod_rewrite de Apache no está instalado." + +#: wp-admin/network.php:120 wp-admin/network.php:131 +msgid "Documentation on Creating a Network" +msgstr "Documentación sobre Crear una red" + +#: wp-admin/network.php:118 +msgid "The choice of subdirectory sites is disabled if this setup is more than a month old because of permalink problems with “/blog/” from the main site. This disabling will be addressed in a future version." +msgstr "La elección de sitios como subdirectorios está desactivada si esta instalación es de hace más de un mes para evitar problemas con la estructura “/blog/” de los enlaces permanentes. Esta desactivación y cómo evitarla será abordado en futuras versiones de WordPress." + +#: wp-admin/network.php:162 +msgid "Once the network is created, you may reactivate your plugins." +msgstr "Una vez que se cree la red podrás reactivar tus plugins." + +#: wp-admin/network.php:162 +msgid "Please deactivate your plugins before enabling the Network feature." +msgstr "Por favor, desactiva tus plugins antes de activar la función de red." + +#: wp-admin/network.php:241 +msgid "We recommend you change your siteurl to %1$s before enabling the network feature. It will still be possible to visit your site using the www prefix with an address like %2$s but any links will not have the www prefix." +msgstr "Te recomendamos que cambies la URL de tu sitio a %1$s antes de activar la función de red. Seguirá siendo posible visitar tu sitio con el prefijo www con una dirección como %2$s, pero ningún enlace tendrá el prefijo www." + +#: wp-admin/network.php:256 wp-admin/network.php:266 +msgid "Sub-directory Install" +msgstr "Instalación en subdirectorio" + +#: wp-admin/network.php:113 +msgid "This screen allows you to configure a network as having subdomains (site1.example.com) or subdirectories (example.com/site1). Subdomains require wildcard subdomains to be enabled in Apache and DNS records, if your host allows it." +msgstr "Esta pantalla te permite configurar una red con subdominios (sitio1.ejemplo.com) o subdirectorios (ejemplo.com/sitio1). Los subdominios requieren tener activadas las wildcard de subdominios en la configuración de Apache y en los registros DNS, si tu alojamiento lo permite." + +#: wp-admin/network.php:109 +msgid "Create a Network of WordPress Sites" +msgstr "Crear una red de sitios de WordPress" + +#: wp-admin/network.php:173 +msgid "Return to Dashboard" +msgstr "Volver al escritorio" + +#: wp-admin/network.php:27 +msgid "The Network creation panel is not for WordPress MU networks." +msgstr "El panel de creación de la Red no es para redes de WordPress MU." + +#: wp-admin/network.php:162 wp-admin/network.php:354 wp-admin/network.php:474 +#: wp-admin/network.php:508 +msgid "Warning:" +msgstr "Advertencia:" + +#: wp-admin/network.php:217 +msgid "Please choose whether you would like sites in your WordPress network to use sub-domains or sub-directories. You cannot change this later." +msgstr "Por favor, elige como quieres que estén los sitios en tu red de WordPress, subdominios o subdirectorios. No podrás cambiarlo más tarde." + +#: wp-admin/network.php:121 wp-admin/network.php:132 +msgid "Documentation on the Network Screen" +msgstr "Documentación sobre la pantalla de red" + +#: wp-admin/network.php:216 +msgid "Addresses of Sites in your Network" +msgstr "Direcciones de los sitios en tu red" + +#: wp-admin/network.php:223 +msgctxt "subdomain examples" +msgid "like site1.%1$s and site2.%1$s" +msgstr "cómo sitio1.%1$s y sitio2.%1$s" + +#: wp-admin/network.php:125 +msgid "Network" +msgstr "Red" + +#: wp-admin/network.php:226 +msgid "Sub-directories" +msgstr "Subdirectorios" + +#: wp-admin/network.php:103 +msgid "You must define the WP_ALLOW_MULTISITE constant as true in your wp-config.php file to allow creation of a Network." +msgstr "Debes definir la constante WP_ALLOW_MULTISITE como true en tu archivo wp-config.php para permitir la creación de una red." + +#: wp-admin/network.php:185 +msgid "ERROR: The network could not be created." +msgstr "ERROR: La red no ha podido crearse." + +#: wp-admin/network.php:117 +msgid "Once you add this code and refresh your browser, multisite should be enabled. This screen, now in the Network Admin navigation menu, will keep an archive of the added code. You can toggle between Network Admin and Site Admin by clicking on the Network Admin or an individual site name under the My Sites dropdown in the Toolbar." +msgstr "Una vez añadido este código y recargado tu navegador, el multisitio debería estar activo. Esta pantalla, una vez que se convierta en el menú de navegación del administrador de la red, mantendrá un archivo del código añadido. Puedes alternar entre Administrador de red y Administración del sitio haciendo clic en el administrador de red o en Mis sitios en el menú desplegable en la barra de herramientas." + +#: wp-admin/network/site-info.php:17 wp-admin/network/site-settings.php:17 +#: wp-admin/network/site-users.php:17 +msgid "You do not have sufficient permissions to edit this site." +msgstr "No tienes suficientes permisos para editar este sitio." + +#: wp-admin/network/users.php:143 +msgid "Warning! User cannot be modified. The user %s is a network administrator." +msgstr "¡Atención! El usuario no puede modificarse. El usuario %s es un administrador de la red." + +#: wp-admin/network/site-new.php:24 +msgid "If the admin email for the new site does not exist in the database, a new user will also be created." +msgstr "Si el correo electrónico del administrador para el nuevo sitio no existe en la base de datos también se creará un nuevo usuario." + +#: wp-admin/network/sites.php:36 +msgid "Deactivate, Archive, and Spam which lead to confirmation screens. These actions can be reversed later." +msgstr "Desactivar, Archivar y Spam te llevan a pantallas de confirmación. Estas acciones pueden revertirse más tarde." + +#: wp-admin/network/sites.php:39 +msgid "The site ID is used internally, and is not shown on the front end of the site or to users/viewers." +msgstr "El ID de sitio se usa internamente, y no se muestra en la parte visible del sitio o a los usuarios/visitantes." + +#: wp-admin/network/sites.php:33 +msgid "Hovering over each site reveals seven options (three for the primary site):" +msgstr "Al pasar el cursor sobre cada sitio se muestran siete opciones (tres para el sitio primario):" + +#: wp-admin/network/settings.php:27 +msgid "Operational settings has fields for the network’s name and admin email." +msgstr "Los ajustes operacionales tienen campos para el nombre de red y el correo electrónico del administrador." + +#: wp-admin/network/users.php:235 +msgid "You can also go to the user’s profile page by clicking on the individual username." +msgstr "También puedes ir a la página de perfil del usuario haciendo clic en el nombre de usuario concreto." + +#: wp-admin/network/users.php:237 +msgid "The bulk action will permanently delete selected users, or mark/unmark those selected as spam. Spam users will have posts removed and will be unable to sign up again with the same email addresses." +msgstr "La acción en lote borrará permanentemente los usuarios seleccionados, o marca/desmarca los seleccionados como spam. Se borrarán las entradas de los usuarios spam y no podrán acceder de nuevo con la misma dirección de correo electrónico. " + +#: wp-admin/network/settings.php:30 +msgid "Upload settings control the size of the uploaded files and the amount of available upload space for each site. You can change the default value for specific sites when you edit a particular site. Allowed file types are also listed (space separated only)." +msgstr "Los ajustes de subida controlan el tamaño para la subida de archivos y la cantidad de espacio de subida disponible para cada sitio. Puedes cambiar el valor por defecto para sitios específicos cuando edites un sitio en concreto. También se listan los tipos de archivo permitidos (separados solo por espacios)." + +#: wp-admin/network/sites.php:38 +msgid "Visit to go to the frontend site live." +msgstr "Visitar para ir a la portada del sitio público." + +#: wp-admin/network/settings.php:29 +msgid "New site settings are defaults applied when a new site is created in the network. These include welcome email for when a new site or user account is registered, and what᾿s put in the first post, page, comment, comment author, and comment URL." +msgstr "Los ajustes para nuevos sitios se aplican cuando se crea un nuevo sitio en la red. Esto incluye correo electrónico de bienvenida cuando se registra un nuevo sitio o cuenta de usuario y que poner en la primera entrada, página, comentario, autor del comentario y la URL del comentario." + +#: wp-admin/network/themes.php:207 +msgid "This screen enables and disables the inclusion of themes available to choose in the Appearance menu for each site. It does not activate or deactivate which theme a site is currently using." +msgstr "Esta pantalla activa o desactiva la inclusión en la disponibilidad de Temas para los sitios en el menú Apariencia de cada sitio. No activa o desactiva que temas se están usando en cada sitio." + +#: wp-admin/network/themes.php:208 +msgid "If the network admin disables a theme that is in use, it can still remain selected on that site. If another theme is chosen, the disabled theme will not appear in the site’s Appearance > Themes screen." +msgstr "Si el administrador de la red desactiva un tema que está en uso, podrá continuar seleccionado en el sitio que lo tenga en uso. Si en el sitio selecciona otro tema, el tema ya no le aparecerá en la pantalla Apariencia > Temas." + +#: wp-admin/network/settings.php:26 +msgid "This screen sets and changes options for the network as a whole. The first site is the main site in the network and network options are pulled from that original site’s options." +msgstr "Esta pantalla establece y cambia las opciones para toda la red. El primer sitio es el sitio principal de la red y las opciones de red serán pasadas desde las opciones del sitio original." + +#: wp-admin/network/settings.php:28 +msgid "Registration settings can disable/enable public signups. If you let others sign up for a site, install spam plugins. Spaces, not commas, should separate names banned as sites for this network." +msgstr "Los ajustes de registro pueden activar/desactivar el registro público. Si permites que la gente registre un sitio, instala un plugins de spam. Espacio, sin comas, debes separar los nombres para sitios no permitidos para esta red." + +#: wp-admin/network/settings.php:31 +msgid "Menu setting enables/disables the plugin menus from appearing for non super admins, so that only super admins, not site admins, have access to activate plugins." +msgstr "En ajustes de menú se activa o desactiva que aparezca o no el menú plugins para los usuarios que no son Super Admin. Es decir, solo los Super Admins, no los Admin, tienen acceso a los plugins." + +#: wp-admin/network/sites.php:32 +msgid "This is the main table of all sites on this network. Switch between list and excerpt views by using the icons above the right side of the table." +msgstr "Esta es la tabla principal de todos los sitios de la red. Cambia de vista listado o fragmento usando los iconos de la parte superior derecha de la tabla." + +#: wp-admin/network/user-new.php:24 +msgid "Users who are signed up to the network without a site are added as subscribers to the main or primary dashboard site, giving them profile pages to manage their accounts. These users will only see Dashboard and My Sites in the main navigation until a site is created for them." +msgstr "Los usuarios que se registran en la red sin crear un sitio son añadidos al escritorio del sitio principal como suscriptores, dándoles unas páginas de perfil para gestionar sus cuentas. Estos usuarios solo verán el escritorio y Mis sitios en la navegación principal hasta que creen su propio sitio." + +#: wp-admin/network/users.php:236 +msgid "You can sort the table by clicking on any of the bold headings and switch between list and excerpt views by using the icons in the upper right." +msgstr "Puedes ordenar la tabla haciendo clic en cualquiera de las cabeceras en negritas y cambiando entre listado y extracto haciendo clic en los iconos de arriba a la derecha." + +#: wp-admin/network/upgrade.php:27 +msgid "If this process fails for any reason, users logging in to their sites will force the same update." +msgstr "Si este proceso falla por cualquier circunstancia, cuando los usuarios accedan a su sitio forzaran esta misma actualización." + +#: wp-admin/network/upgrade.php:26 +msgid "If a version update to core has not happened, clicking this button won’t affect anything." +msgstr "Si no se ha actualizado el núcleo, hacer clic en este botón no afectará en nada." + +#: wp-admin/network/users.php:233 +msgid "This table shows all users across the network and the sites to which they are assigned." +msgstr "Esta tabla muestra todos los usuarios de la red y los sitios que tienen asignados." + +#: wp-admin/network/users.php:238 +msgid "You can make an existing user an additional super admin by going to the Edit User profile page and checking the box to grant that privilege." +msgstr "Puedes hacer a un usuario existente Super Admin. Ve a la página del perfil Editar usuario y marca la casilla para darle este privilegio." + +#: wp-admin/network/site-new.php:49 +msgid "The following words are reserved for use by WordPress functions and cannot be used as blog names: %s" +msgstr "Las siguientes palabras están reservadas para el uso en las funciones de WordPress y no pueden ser usadas como nombre del sitio: %s" + +#: wp-admin/network/upgrade.php:69 +msgid "Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: %2$s" +msgstr "¡Atención! Problema al actualizar %1$s. Tu servidor no puede conectar con el sitio que está funcionando en él. Mensaje de Error: %2$s" + +#: wp-admin/network/settings.php:167 +msgid "If you want to limit site registrations to certain domains. One domain per line." +msgstr "Si quieres limitar el registro de sitios a determinados dominios. Un dominio por línea." + +#: wp-admin/network/settings.php:178 +msgid "If you want to ban domains from site registrations. One domain per line." +msgstr "Si quieres banear dominios del registro de sitios. Un dominio por línea." + +#: wp-admin/network/settings.php:125 +msgid "If registration is disabled, please set NOBLOGREDIRECT in wp-config.php to a URL you will redirect visitors to if they visit a non-existent site." +msgstr "Si el registro está deshabilitado, por favor, define NOBLOGREDIRECT en wp-config.php con la URL que quieres que se redirija a los visitantes que visitan un sitio inexistente." + +#: wp-admin/network/site-new.php:37 +msgid "Can’t create an empty site." +msgstr "No se puede crear un sitio vacío." + +#: wp-admin/network/upgrade.php:74 +msgid "If your browser doesn’t start loading the next page automatically, click this link:" +msgstr "Si tu navegador no carga la siguiente página de forma automática haz clic en este enlace:" + +#: wp-admin/network/sites.php:217 +msgid "Site marked as spam." +msgstr "Sitio marcado como spam." + +#: wp-admin/network/sites.php:190 +msgid "Sites marked as spam." +msgstr "Sitios marcados como spam." + +#: wp-admin/network/sites.php:187 +msgid "Sites removed from spam." +msgstr "Sitios eliminados de spam." + +#: wp-admin/network/users.php:261 +msgid "Users removed from spam." +msgstr "Usuarios eliminados de spam." + +#: wp-admin/network/sites.php:214 +msgid "Site removed from spam." +msgstr "Sitio eliminado de spam." + +#: wp-admin/network/sites.php:193 +msgid "Sites deleted." +msgstr "Sitios eliminados." + +#: wp-admin/network/sites.php:196 +msgid "Site deleted." +msgstr "Sitio eliminado." + +#: wp-admin/network/users.php:258 +msgid "Users marked as spam." +msgstr "Usuario marcado como spam." + +#: wp-admin/network/site-info.php:142 +msgid "Update siteurl and home as well." +msgstr "Actualizar siteurl y portada" + +#: wp-admin/network/sites.php:211 +msgid "Site deactivated." +msgstr "Sitio desactivado." + +#: wp-admin/network/sites.php:208 +msgid "Site activated." +msgstr "Sitio activado." + +#: wp-admin/network/sites.php:205 +msgid "Site unarchived." +msgstr "Sitio desarchivado." + +#: wp-admin/network/users.php:264 +msgid "Users deleted." +msgstr "Usuarios eliminados." + +#: wp-admin/network/sites.php:202 +msgid "Site archived." +msgstr "Sitio archivado." + +#: wp-admin/network/site-new.php:60 +msgid "Invalid email address." +msgstr "Dirección de correo electrónico no válida." + +#: wp-admin/network/site-new.php:76 +msgid "There was an error creating the user." +msgstr "Hubo un error al crear el usuario." + +#: wp-admin/network/sites.php:63 wp-admin/network/sites.php:139 +msgid "You are not allowed to change the current site." +msgstr "No estás autorizado a cambiar el sitio actual." + +#: wp-admin/network/settings.php:272 +msgctxt "File size in kilobytes" +msgid "%s KB" +msgstr "%s KB" + +#: wp-admin/network/settings.php:266 +msgid "Upload file types" +msgstr "Tipos de archivo permitidos" + +#: wp-admin/network/settings.php:261 +msgid "Limit total size of files uploaded to %s MB" +msgstr "Tamaño máximo de espacio para archivos subidos %s MB" + +#: wp-admin/network/settings.php:242 +msgid "The author of the first comment on a new site." +msgstr "El autor del primer comentario en un sitio nuevo." + +#: wp-admin/network/settings.php:213 +msgid "The first post on a new site." +msgstr "La primera entrada en un sitio nuevo." + +#: wp-admin/network/settings.php:223 +msgid "The first page on a new site." +msgstr "La primera página en un sitio nuevo." + +#: wp-admin/network/settings.php:233 +msgid "The first comment on a new site." +msgstr "El primer comentario en un sitio nuevo." + +#: wp-admin/network/settings.php:251 +msgid "The URL for the first comment on a new site." +msgstr "La URL para el primer comentario en un nuevo sitio." + +#: wp-admin/network/upgrade.php:57 +msgid "All done!" +msgstr "¡Todo hecho!" + +#: wp-admin/network/settings.php:121 +msgid "Logged in users may register new sites." +msgstr "Solo los usuarios identificados, pueden crear sitios." + +#: wp-admin/network/settings.php:122 +msgid "Both sites and user accounts can be registered." +msgstr "Pueden ser creados sitios y usuarios." + +#: wp-admin/network/settings.php:120 +msgid "User accounts may be registered." +msgstr "Solo las cuentas de usuario pueden ser creadas." + +#: wp-admin/network/settings.php:119 +msgid "Registration is disabled." +msgstr "Los registros están deshabilitados." + +#: wp-admin/network/settings.php:299 +msgid "Enable administration menus" +msgstr "Activar menús de administración" + +#: wp-admin/network/settings.php:90 +msgid "Operational Settings" +msgstr "Ajustes operacionales" + +#: wp-admin/network/settings.php:256 +msgid "Upload Settings" +msgstr "Ajustes de subidas" + +#: wp-admin/network/settings.php:184 +msgid "New Site Settings" +msgstr "Ajustes para sitios nuevos" + +#: wp-admin/network/settings.php:109 +msgid "Registration Settings" +msgstr "Ajustes de registro" + +#: wp-admin/network/site-new.php:56 +msgid "Missing or invalid site address." +msgstr "La dirección del sitio no está o no es válida." + +#: wp-admin/network/site-new.php:58 +msgid "Missing email address." +msgstr "Falta la dirección de correo electrónico." + +#: wp-admin/network/settings.php:100 wp-admin/network.php:300 +msgid "Network Admin Email" +msgstr "Correo electrónico del administrador de la red" + +#: wp-admin/network/site-new.php:91 +msgid "[%s] New Site Created" +msgstr "[%s] Nuevo sitio creado" + +#: wp-admin/network/sites.php:69 +msgid "WordPress › Confirm your action" +msgstr "WordPress › Confirma tu acción" + +#: wp-admin/network/settings.php:193 +msgid "The welcome email sent to new site owners." +msgstr "El correo electrónico de bienvenida enviado a los dueños de sitios nuevos." + +#: wp-admin/network/settings.php:259 +msgid "Site upload space" +msgstr "Espacio de subidas para el sitio" + +#: wp-admin/network/settings.php:138 +msgid "Send the network admin an email notification every time someone registers a site or user account." +msgstr "Enviar al administrador de la red un correo electrónico cada vez que alguien se registre o registre un sitio." + +#: wp-admin/network/settings.php:154 +msgid "Users are not allowed to register these sites. Separate names by spaces." +msgstr "Los usuarios no tienes permiso para crear estos sitios. Separa los nombres mediante espacios." + +#: wp-admin/network/upgrade.php:74 +msgid "Next Sites" +msgstr "Sitios siguientes" + +#: wp-admin/network/index.php:20 wp-admin/network/settings.php:17 +#: wp-admin/network/site-info.php:43 wp-admin/network/site-settings.php:43 +#: wp-admin/network/site-themes.php:56 wp-admin/network/site-users.php:49 +#: wp-admin/network/sites.php:17 wp-admin/network/sites.php:108 +#: wp-admin/network/upgrade.php:39 wp-admin/network/user-new.php:36 +#: wp-admin/network/users.php:17 wp-admin/network/users.php:94 +#: wp-admin/network/users.php:116 wp-admin/network/users.php:129 +#: wp-admin/network/users.php:180 +msgid "You do not have permission to access this page." +msgstr "No tienes autorización para acceder a esta página" + +#: wp-admin/network/sites.php:85 +msgid "Confirm" +msgstr "Confirmar" + +#: wp-admin/network/user-new.php:39 +msgid "Cannot create an empty user." +msgstr "No se puede crear un usuario vacio" + +#: wp-admin/network/site-users.php:233 +msgid "Duplicated username or email address." +msgstr "Nombre de usuario o correo electrónico duplicado." + +#: wp-admin/network/settings.php:112 +msgid "Allow new registrations" +msgstr "Permitir nuevos registros" + +#: wp-admin/network/settings.php:132 +msgid "Registration notification" +msgstr "Notificación de registro" + +#: wp-admin/network/settings.php:143 +msgid "Add New Users" +msgstr "Añadir nuevos usuarios" + +#: wp-admin/network/settings.php:150 +msgid "Banned Names" +msgstr "Nombre no permitidos" + +#: wp-admin/network/settings.php:160 +msgid "Limited Email Registrations" +msgstr "Limitar el registro por correo electrónico" + +#: wp-admin/network/settings.php:173 +msgid "Banned Email Domains" +msgstr "Dominios de correo electrónico no permitidos" + +#: wp-admin/network/settings.php:188 +msgid "Welcome Email" +msgstr "Correo electrónico de bienvenida" + +#: wp-admin/network/settings.php:198 +msgid "Welcome User Email" +msgstr "Correo electrónico de bienvenida al usuario" + +#: wp-admin/network/settings.php:203 +msgid "The welcome email sent to new users." +msgstr "El correo electrónico de bienvenida enviado a los nuevos usuarios." + +#: wp-admin/network/settings.php:218 +msgid "First Page" +msgstr "Primera página" + +#: wp-admin/network/settings.php:228 +msgid "First Comment" +msgstr "Primer comentario" + +#: wp-admin/network/settings.php:238 +msgid "First Comment Author" +msgstr "Autor del primer comentario" + +#: wp-admin/network/settings.php:247 +msgid "First Comment URL" +msgstr "URL del primer comentario" + +#: wp-admin/network/settings.php:271 +msgid "Max upload file size" +msgstr "Tamaño máximo de archivo" + +#: wp-admin/network/settings.php:284 +msgid "Default Language" +msgstr "Idioma prederterminado." + +#: wp-admin/network/site-new.php:147 +msgid "Add Site" +msgstr "Añadir sitio" + +#: wp-admin/network/site-new.php:124 +msgid "Site Address" +msgstr "Dirección del sitio" + +#: wp-admin/network/site-new.php:140 +msgid "Admin Email" +msgstr "Correo electrónico del administrador" + +#: wp-admin/network/site-new.php:144 +msgid "A new user will be created if the above email address is not in the database." +msgstr "Se creará un usuario nuevo si el correo electrónico no está en la base de datos" + +#: wp-admin/network/site-new.php:144 +msgid "The username and password will be mailed to this email address." +msgstr "El nombre de usuario y la contraseña se enviarán a este correo electrónico." + +#: wp-admin/network/site-users.php:322 wp-admin/network/user-new.php:98 +msgid "Username and password will be mailed to the above email address." +msgstr "Se enviarán el nombre de usuario y la contraseña a esta dirección de correo electrónico." \ No newline at end of file diff --git a/src/wp-content/languages/es_ES.mo b/src/wp-content/languages/es_ES.mo new file mode 100644 index 0000000..6e8cb31 Binary files /dev/null and b/src/wp-content/languages/es_ES.mo differ diff --git a/src/wp-content/languages/es_ES.po b/src/wp-content/languages/es_ES.po new file mode 100644 index 0000000..97fe860 --- /dev/null +++ b/src/wp-content/languages/es_ES.po @@ -0,0 +1,7696 @@ +# Translation of Development (trunk) in Spanish (Spain) +# This file is distributed under the same license as the Development (trunk) package. +msgid "" +msgstr "" +"PO-Revision-Date: 2013-12-12 16:02:48+0000\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: GlotPress/0.1\n" +"Project-Id-Version: Development (trunk)\n" + +#: wp-includes/locale.php:184 +msgctxt "text direction" +msgid "ltr" +msgstr "ltr" + +#: wp-includes/general-template.php:2149 +msgctxt "admin color scheme" +msgid "Sunrise" +msgstr "Amanecer" + +#: wp-includes/general-template.php:2155 +msgctxt "admin color scheme" +msgid "Ectoplasm" +msgstr "Ectoplasma" + +#: wp-includes/general-template.php:2161 +msgctxt "admin color scheme" +msgid "Ocean" +msgstr "Océano" + +#: wp-includes/general-template.php:2167 +msgctxt "admin color scheme" +msgid "Coffee" +msgstr "Café" + +#: wp-includes/class-wp-image-editor.php:249 +msgid "Attempted to set image quality outside of the range [1,100]." +msgstr "Intento de poner una calidad de la imagen fuera del rango [1,100]." + +#: wp-includes/taxonomy.php:2174 +msgid "A term with the name and slug provided already exists with this parent." +msgstr "Un elemento con el nombre y slug propuesto ya existe en este elemento padre." + +#: wp-includes/taxonomy.php:2192 +msgid "A term with the name and slug provided already exists." +msgstr "Ya existe un término con el mismo nombre y slug que has propuesto." + +#: wp-includes/default-widgets.php:17 +msgid "A list of your site’s Pages." +msgstr "Una lista de las páginas de tu sitio." + +#: wp-includes/default-widgets.php:193 +msgid "A search form for your site." +msgstr "Un formulario de búsqueda de tu sitio." + +#: wp-includes/default-widgets.php:236 +msgid "A monthly archive of your site’s Posts." +msgstr "Un listado mensual de las entradas de tu sitio." + +#: wp-includes/default-widgets.php:301 +msgid "Login, RSS, & WordPress.org links." +msgstr "Acceder, RSS y enlaces de WordPress.com." + +#: wp-includes/default-widgets.php:353 +msgid "A calendar of your site’s Posts." +msgstr "Un calendario de las entradas de tu sitio." + +#: wp-includes/default-widgets.php:394 +msgid "Arbitrary text or HTML." +msgstr "Texto cualquiera o HTML." + +#: wp-includes/default-widgets.php:444 +msgid "A list or dropdown of categories." +msgstr "Lista o desplegable de categorías." + +#: wp-includes/default-widgets.php:536 +msgid "Your site’s most recent Posts." +msgstr "Las entradas más recientes de tu sitio." + +#: wp-includes/default-widgets.php:638 +msgid "Your site’s most recent comments." +msgstr "Los comentarios más recientes de tu sitio." + +#: wp-includes/default-widgets.php:745 +msgid "Entries from any RSS or Atom feed." +msgstr "Publicaciones de cualquier RSS o Feed de Atom." + +#: wp-includes/default-widgets.php:1036 +msgid "A cloud of your most used tags." +msgstr "Nube de tus etiquetas más utilizadas." + +#: wp-includes/default-widgets.php:1103 +msgid "Add a custom menu to your sidebar." +msgstr "Añade un menú personalizado a tu barra lateral." + +#: wp-includes/script-loader.php:564 +msgctxt "Open Sans font: on or off" +msgid "on" +msgstr "on" + +#: wp-includes/general-template.php:2121 +msgctxt "admin color scheme" +msgid "Default" +msgstr "Por defecto" + +#: wp-includes/general-template.php:2131 +msgctxt "admin color scheme" +msgid "Light" +msgstr "Luminoso" + +#: wp-includes/general-template.php:2143 +msgctxt "admin color scheme" +msgid "Midnight" +msgstr "Medianoche" + +#: wp-includes/link-template.php:1158 +msgid "Use commas instead of %s to separate excluded terms." +msgstr "Usa comas en vez de %s para separar los términos excluidos." + +#: wp-includes/script-loader.php:570 +msgctxt "Open Sans font: add new subset (greek, cyrillic, vietnamese)" +msgid "no-subset" +msgstr "sin subconjunto" + +#: wp-includes/update.php:120 wp-includes/update.php:267 +#: wp-includes/update.php:407 +msgid "An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums." +msgstr "Sucedió un error inesperado. Puede que algo vaya mal con WordPress.org o la configuración de este servidor. Si sigues teniendo problemas, por favor prueba en los foros de soporte." + +#: wp-includes/admin-bar.php:172 +msgid "Menu" +msgstr "Menú" + +#: wp-includes/update.php:503 +msgid "Translation Updates" +msgstr "Actualizaciones de traducción" + +#: wp-login.php:501 +msgid "Sorry, that key has expired. Please try again." +msgstr "Lo siento, la clave ha expirado. Por favor, inténtalo de nuevo." + +#: wp-includes/class-wp-theme.php:218 +msgid "The theme directory \"%s\" does not exist." +msgstr "La carpeta del tema \"%s\" no existe." + +#: wp-includes/query.php:721 +msgid "In %1$s, use the %2$s method, not the %3$s function. See %4$s." +msgstr "En %1$s, usa el método %2$s, no la función %3$s. Mira %4$s." + +#: wp-includes/functions.php:1034 +msgid "ERROR: This is not a valid feed template." +msgstr "ERROR: Esta no es una plantilla de agregador válida." + +#: wp-includes/post-template.php:1250 +msgid "This content is password protected. To view it please enter your password below:" +msgstr "Este contenido está protegido por contraseña. Para verlo introduce tu contraseña a continuación:" + +#: wp-includes/query.php:722 +msgid "http://codex.wordpress.org/Function_Reference/is_main_query" +msgstr "http://codex.wordpress.org/Function_Reference/is_main_query" + +#: wp-includes/query.php:2031 +msgctxt "Comma-separated list of search stopwords in your language" +msgid "about,an,are,as,at,be,by,com,for,from,how,in,is,it,of,on,or,that,the,this,to,was,what,when,where,who,will,with,www" +msgstr "un, una, para, como, en, ser, por, com, cómo, para, desde, como, es, de, en, o, eso, el, esto, a, hacía, que, qué, cuando, cuándo, donde, dónde, quien, quién, será, con, www, y, entre, la, lo, este, ese, esa, eso, es, está, esta, asi, así" + +#: wp-includes/class-http.php:887 wp-includes/class-http.php:1262 +msgid "Failed to write request to temporary file." +msgstr "Fallo al tratar de escribir el archivo temporal." + +#: wp-includes/class-http.php:793 wp-includes/class-http.php:801 +msgid "The SSL certificate for the host could not be verified." +msgstr "El certificado SSL del servidor no se ha podido verificar." + +#: wp-includes/media-template.php:310 +msgid "Embed Media Player" +msgstr "Incrustar reproductor de medios" + +#: wp-includes/media-template.php:217 +msgid "Length:" +msgstr "Longitud:" + +#: wp-includes/media-template.php:297 +msgid "Embed or Link" +msgstr "Incrustar o enlazar" + +#: wp-includes/media-template.php:317 +msgid "Link to Media File" +msgstr "Enlace al archivo de medios" + +#: wp-includes/media-template.php:324 +msgid "Link to Attachment Page" +msgstr "Enlace a página de adjuntos" + +#: wp-includes/script-loader.php:295 +msgid "Download File" +msgstr "Descargar archivo" + +#: wp-includes/script-loader.php:296 +msgid "Download Video" +msgstr "Descargar vídeo" + +#: wp-includes/script-loader.php:297 +msgid "Play/Pause" +msgstr "Reproducir/Pausar" + +#: wp-includes/script-loader.php:298 +msgid "Mute Toggle" +msgstr "Desactivar sonido" + +#: wp-includes/script-loader.php:300 +msgid "Turn off Fullscreen" +msgstr "Salir de pantalla completa" + +#: wp-includes/script-loader.php:301 +msgid "Go Fullscreen" +msgstr "Ver en pantalla completa" + +#: wp-includes/script-loader.php:302 +msgid "Unmute" +msgstr "Activar sonido" + +#: wp-includes/script-loader.php:304 +msgid "Captions/Subtitles" +msgstr "Piés de foto / Subtítulos" + +#: wp-content/plugins/akismet/admin.php:166 +msgid "Empty" +msgstr "Vacío" + +#: wp-content/plugins/akismet/admin.php:167 +msgid "Valid" +msgstr "Válido" + +#: wp-content/plugins/akismet/admin.php:168 +msgid "Invalid" +msgstr "No válido" + +#: wp-content/plugins/akismet/admin.php:169 +msgid "Failed" +msgstr "Fallido" + +#: wp-content/plugins/akismet/admin.php:393 +msgid "Activate your Akismet account" +msgstr "Activa tu cuenta de Akismet" + +#: wp-content/plugins/akismet/admin.php:396 +msgid "Almost done - activate your account and say goodbye to comment spam" +msgstr "Casi completado - activa tu acuenta y despídete del spam" + +#: wp-includes/formatting.php:2324 +msgid "%s week" +msgid_plural "%s weeks" +msgstr[0] "%s semana" +msgstr[1] "%s semanas" + +#: wp-includes/formatting.php:2329 +msgid "%s month" +msgid_plural "%s months" +msgstr[0] "%s mes" +msgstr[1] "%s meses" + +#: wp-includes/formatting.php:2334 +msgid "%s year" +msgid_plural "%s years" +msgstr[0] "%s año" +msgstr[1] "%s años" + +#: wp-includes/nav-menu.php:643 wp-includes/post-template.php:1072 +msgid "#%d (no title)" +msgstr "#%d (sin título)" + +#: wp-includes/post-template.php:1440 +msgid "JavaScript must be enabled to use this feature." +msgstr "JavaScript debe estar activado para utilizar esta funcionalidad." + +#: wp-includes/locale.php:351 +msgid "F j, Y" +msgstr "j F, Y" + +#: wp-includes/locale.php:353 +msgid "g:i a" +msgstr "g:i a" + +#: wp-includes/locale.php:355 +msgid "F j, Y g:i a" +msgstr "j F, Y g:i a" + +#: wp-content/plugins/akismet/admin.php:174 +msgid "Your Akismet account has been successfully set up and activated. Happy blogging!" +msgstr "Tu cuenta de Akismet se ha creado y activado con éxito. ¡Feliz blogueo!" + +#: wp-content/plugins/akismet/admin.php:178 +msgid "Please enter an API key" +msgstr "Por favor, introduzca una clave de API" + +#: wp-content/plugins/akismet/admin.php:190 +msgid "Akismet Stats" +msgstr "Estadísticas de Akismet" + +#: wp-content/plugins/akismet/admin.php:193 +msgid "Akismet eliminates the comment and trackback spam you get on your site. To use Akismet you may need to sign up for an API key. Click the button below to get started." +msgstr "Akismet elimina los comentarios y trackbacks de spam que llaga a tu sitio. Para utilizar Akismet necesitas registrarte y obtener una clave de API. Haz click en en botón inferior para comenzar." + +#: wp-content/plugins/akismet/admin.php:198 +msgid "Create a new Akismet Key" +msgstr "Crear una clave de Akismet" + +#: wp-content/plugins/akismet/admin.php:201 +msgid "I already have a key" +msgstr "Ya tengo una clave" + +#: wp-content/plugins/akismet/admin.php:220 +msgid "You must enter a valid Akismet API key here. If you need an API key, you can create one here" +msgstr "Aquí debes introducir una clave API válida de Akismet. Si necesitas una clave API, puedes crear una aquí" + +#: wp-content/plugins/akismet/admin.php:228 +msgid "Auto-detete old spam" +msgstr "Autoborrado de spam antiguo" + +#: wp-content/plugins/akismet/admin.php:229 +msgid "Show approved comments" +msgstr "Mostrar comentarios aprobados" + +#: wp-content/plugins/akismet/admin.php:238 +msgid "Save Changes" +msgstr "Guardar cambios" + +#: wp-content/plugins/akismet/admin.php:248 +msgid "Server Status" +msgstr "Estado del servidor" + +#: wp-content/plugins/akismet/admin.php:294 +msgid "Check Network Status" +msgstr "Comprueba el estado de la red" + +#: wp-content/plugins/akismet/admin.php:299 +msgid "Last Checked" +msgstr "Última revisión" + +#: wp-content/plugins/akismet/admin.php:301 +msgid "%s Ago" +msgstr "Hace %s" + +#: wp-content/plugins/akismet/admin.php:301 +msgid "Not yet" +msgstr "Todavía no" + +#: wp-content/plugins/akismet/admin.php:302 +msgid "You can confirm that Akismet.com is up by clicking here." +msgstr "Puedes confirmar que Akismet.com funciona haciendo click aquí." + +#: wp-content/plugins/akismet/admin.php:362 +msgid "Akismet Error Code" +msgstr "Código de Akismet erróneo" + +#: wp-includes/class-wp-xmlrpc-server.php:325 +msgid "Login Address (URL)" +msgstr "Dirección de acceso (URL)" + +#: wp-includes/class-wp-xmlrpc-server.php:330 +msgid "The URL to the admin area" +msgstr "La URL del área de administración" + +#: wp-includes/class-wp-customize-control.php:596 +#: wp-includes/media-template.php:51 +msgid "The web browser on your device cannot be used to upload files. You may be able to use the native app for your device instead." +msgstr "El navegador web de tu dispositivo no puede subir archivos. Podrías probar la aplicación nativa de tu dispositivo en su lugar." + +#: wp-includes/post-template.php:186 +msgid "(more…)" +msgstr "(más…)" + +#: wp-login.php:394 +msgid "Possible reason: your host may have disabled the mail() function." +msgstr "Posible razón: Tu alojamiento puede tener desactivado la función mail()" + +#: wp-includes/user.php:1697 +msgid "ERROR: Couldn’t register you… please contact the webmaster !" +msgstr "ERROR: No te has podido registrar… por favor, ¡ponte en contacto con el webmaster !" + +#: wp-includes/post-template.php:1330 +msgctxt "post revision title extra" +msgid "%1$s [Autosave]" +msgstr "%1$s [Autoguardado]" + +#: wp-includes/post-template.php:1332 +msgctxt "post revision title extra" +msgid "%1$s [Current Revision]" +msgstr "%1$s [Revisión actual]" + +#: wp-includes/script-loader.php:121 +msgid "Your session has expired. You can log in again from this page or go to the login page." +msgstr "Tu sesión ha caducado. Puedes identificarte otra vez desde esta página o ir a la página de identificación." + +#: wp-includes/script-loader.php:420 +msgid "%1$s %2$s, %3$s @ %4$s : %5$s" +msgstr "%2$s del %1$s de %3$s a las %4$s : %5$s" + +#: wp-login.php:803 +msgid "Session expired. Please log in again. You will not move away from this page." +msgstr "La sesión ha caducado. Por favor, identifícate de nuevo. No podrás acceder a otras páginas." + +#: wp-signup.php:640 +msgid "Have you entered your email correctly? You have entered %s, if it’s incorrect, you will not receive your email." +msgstr "¿Has puesto tu correo correctamente? Has escrito %s. Si es incorrecto, no recibirás el correo electrónico." + +#: wp-signup.php:717 +msgid "The site you were looking for, %s, does not exist, but you can create it now!" +msgstr "El sitio que estabas buscando, %s, no existe, ¡pero puedes crearlo ahora!" + +#: wp-signup.php:719 +msgid "The site you were looking for, %s, does not exist." +msgstr "El sitio que estabas buscando, %s, no existe." + +#: wp-includes/functions.php:4083 +msgid "The login page will open in a new window. After logging in you can close it and return to this page." +msgstr "La página de acceso se abrirá en una ventana nueva. Después del acceso puede cerrarla y volver a esta página." + +#: wp-includes/post-template.php:1378 +msgctxt "post revision title" +msgid "%1$s %2$s, %3$s ago (%4$s)" +msgstr "%1$s %2$s, hace %3$s (%4$s)" + +#: wp-includes/comment-template.php:1760 +msgid "%s says:" +msgstr "%s dice:" + +#: wp-includes/comment-template.php:1766 +msgctxt "1: date, 2: time" +msgid "%1$s at %2$s" +msgstr "%1$s a las %2$s" + +#: wp-includes/general-template.php:175 +msgctxt "placeholder" +msgid "Search …" +msgstr "Buscar …" + +#: wp-includes/general-template.php:174 wp-includes/general-template.php:175 +#: wp-includes/general-template.php:182 +msgctxt "label" +msgid "Search for:" +msgstr "Buscar:" + +#: wp-includes/general-template.php:177 wp-includes/general-template.php:184 +msgctxt "submit button" +msgid "Search" +msgstr "Buscar" + +#: wp-includes/post-template.php:1368 +msgctxt "revision date format" +msgid "j F, Y @ G:i:s" +msgstr "j F, Y @ G:i:s" + +#: wp-includes/functions.php:4081 +msgid "Session expired" +msgstr "Sesión caducada" + +#: wp-includes/taxonomy.php:478 +msgid "No tags found." +msgstr "No se han encontrado etiquetas." + +#: wp-includes/default-widgets.php:321 +msgctxt "meta widget link text" +msgid "WordPress.org" +msgstr "WordPress.org" + +#: wp-includes/functions.wp-scripts.php:166 +msgid "Do not deregister the %1$s script in the administration area. To target the frontend theme, use the %2$s hook." +msgstr "No de-registres el script %1$s en el área de administración. Para aplicarlo sobre el tema del sitio usa el gancho (hook) %2$s." + +#: wp-includes/class-wp-xmlrpc-server.php:315 +msgid "WordPress Address (URL)" +msgstr "Dirección de WordPress (URL)" + +#: wp-includes/class-wp-xmlrpc-server.php:320 +msgid "Site Address (URL)" +msgstr "Dirección del sitio (URL)" + +#: wp-includes/user.php:1468 +msgid "Invalid user ID." +msgstr "ID de usuario erróneo." + +#: wp-includes/media-template.php:409 +msgid "Random Order" +msgstr "Orden aleatorio" + +#: wp-includes/media-template.php:168 +msgid "Caption this image…" +msgstr "Titula esta imagen…" + +#: wp-includes/media.php:1895 +msgid "%d selected" +msgstr "%d seleccionados" + +#: wp-includes/media.php:1914 +msgid "Insert from URL" +msgstr "Insertar desde URL" + +#: wp-includes/media.php:1917 +msgid "Set Featured Image" +msgstr "Fijar la imagen destacada" + +#: wp-includes/default-widgets.php:164 +msgctxt "Links widget" +msgid "Random" +msgstr "Aleatorio" + +#: wp-includes/media.php:1908 +msgid "No items found." +msgstr "No se han encontrado elementos." + +#: wp-includes/media.php:1927 +msgid "Add to Gallery" +msgstr "Añadir a la Galería" + +#: wp-includes/media.php:1928 +msgid "Reverse order" +msgstr "Orden inverso" + +#: wp-includes/media.php:1918 +msgid "Set featured image" +msgstr "Asignar imagen destacada" + +#: wp-includes/media-template.php:160 +msgid "Deselect" +msgstr "Desmarcar" + +#: wp-includes/class-wp-xmlrpc-server.php:3841 +#: wp-includes/class-wp-xmlrpc-server.php:3851 +msgid "Sorry, that file cannot be edited." +msgstr "Lo siento, este archivo no puede editarse." + +#: wp-includes/media-template.php:105 +msgid "Your browser has some limitations uploading large files with the multi-file uploader. Please use the browser uploader for files over 100MB." +msgstr "Tu navegador tiene algunas limitaciones para subir archivos grandes desde el cargador múltiple. Por favor, usa el cargador de navegador para archivos de más de 100MB." + +#: wp-includes/media.php:1911 +msgid "" +"You are about to permanently delete this item.\n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Estás a punto de borrar permanentemente este elemento.\n" +" 'Cancelar' para parar, 'Aceptar' para borrar." + +#: wp-includes/media-template.php:221 +msgid "Delete Permanently" +msgstr "Borrar permanentemente" + +#: wp-includes/media-template.php:53 +msgid "Upload Limit Exceeded" +msgstr "Límite de subida excedido" + +#: wp-includes/media-template.php:99 +msgid "Maximum upload file size: %d%s." +msgstr "Tamaño máximo del archivo a subir: %d%s." + +#: wp-includes/media-template.php:119 +msgid "Dismiss Errors" +msgstr "Descartar errores" + +#: wp-includes/media-template.php:133 +msgid "Error" +msgstr "Error" + +#: wp-includes/media.php:1570 +msgid "No editor could be selected." +msgstr "No se pudo elegir ningún editor." + +#: wp-includes/media-template.php:118 +msgid "Uploading" +msgstr "Subiendo" + +#: wp-includes/post.php:2183 +msgid "Manage Images" +msgstr "Administrar imágenes" + +#: wp-includes/post.php:2183 +msgid "Image (%s)" +msgid_plural "Images (%s)" +msgstr[0] "Imagen (%s)" +msgstr[1] "Imágenes (%s)" + +#: wp-includes/post.php:2184 +msgid "Manage Audio" +msgstr "Administrar audio" + +#: wp-includes/post.php:2184 +msgid "Audio (%s)" +msgid_plural "Audio (%s)" +msgstr[0] "Audio (%s)" +msgstr[1] "Audios (%s)" + +#: wp-includes/post.php:2185 +msgid "Video" +msgstr "Vídeo" + +#: wp-includes/post.php:2185 +msgid "Manage Video" +msgstr "Administrar vídeo" + +#: wp-includes/post.php:2185 +msgid "Video (%s)" +msgid_plural "Video (%s)" +msgstr[0] "Vídeo (%s)" +msgstr[1] "Vídeos (%s)" + +#: wp-includes/media.php:1909 +msgid "Insert into page" +msgstr "Insertar en la página" + +#: wp-includes/media.php:1910 +msgid "Uploaded to this page" +msgstr "Subir a esta página" + +#: wp-includes/media.php:1907 +msgid "All media items" +msgstr "Todos los elementos multimedia" + +#: wp-includes/media.php:1910 +msgid "Uploaded to this post" +msgstr "Subido a esta entrada" + +#: wp-includes/post.php:2184 +msgid "Audio" +msgstr "Audio" + +#: wp-includes/media.php:1906 +msgid "← Return to library" +msgstr "← Volver a la librería" + +#: wp-includes/media-template.php:331 wp-includes/media-template.php:465 +msgid "Custom URL" +msgstr "URL personalizada" + +#: wp-includes/media-template.php:184 +msgid "Attachment Details" +msgstr "Detalles de adjuntos" + +#: wp-includes/media-template.php:243 wp-includes/media-template.php:436 +msgid "Alt Text" +msgstr "Texto alternativo" + +#: wp-includes/media-template.php:397 +msgid "Columns" +msgstr "Columnas" + +#: wp-includes/media.php:1896 +msgid "Drag and drop to reorder images." +msgstr "Arrastra y suelta para ordenar las imágenes." + +#: wp-includes/media-template.php:355 wp-includes/media.php:1751 +msgid "Large" +msgstr "Grande" + +#: wp-includes/media-template.php:267 +msgid "Attachment Display Settings" +msgstr "Ajustes de la pantalla de adjuntos" + +#: wp-includes/media-template.php:374 +msgid "Gallery Settings" +msgstr "Ajustes de galería" + +#: wp-includes/media.php:1900 +msgid "Upload Images" +msgstr "Subir imágenes" + +#: wp-includes/media.php:1923 +msgid "← Cancel Gallery" +msgstr "← Cancelar galería" + +#: wp-includes/ms-functions.php:1955 +msgid "WordPress › Success" +msgstr "WordPress › Conseguido" + +#: wp-includes/media-template.php:60 +msgid "Drop files anywhere to upload" +msgstr "Suelta archivos en cualquier lugar para subirlos" + +#: wp-includes/media.php:1899 +msgid "Upload Files" +msgstr "Subir archivos" + +#: wp-includes/media.php:1924 +msgid "Insert gallery" +msgstr "Inserta galería" + +#: wp-includes/media-template.php:40 +msgid "Drop files to upload" +msgstr "Suelta aquí los archivos a subir" + +#: wp-includes/media.php:1903 +msgid "Media Library" +msgstr "Librería multimedia" + +#: wp-includes/media.php:1921 +msgid "Create Gallery" +msgstr "Crear galería" + +#: wp-includes/ms-functions.php:933 +msgid "" +"To activate your user, please click the following link:\n" +"\n" +"%s\n" +"\n" +"After you activate, you will receive *another email* with your login." +msgstr "" +"Para activar tu usuario, por favor haz click en el siguiente enlace:\n" +"\n" +"%s\n" +"\n" +"Después de activar, recibirás *otro correo electrónico* con tus credenciales de acceso." + +#: wp-includes/ms-functions.php:1361 +msgid "Already Installed" +msgstr "Ya instalado" + +#: wp-includes/ms-functions.php:1361 +msgid "You appear to have already installed WordPress. To reinstall please clear your old database tables first." +msgstr "Parece que has instalado WordPress antes. Para volver a instalar borra antes las tablas de la base de datos antigua, por favor." + +#: wp-includes/taxonomy.php:349 +msgid "Taxonomies cannot exceed 32 characters in length" +msgstr "Las taxonomías no pueden tener más de 32 caracteres." + +#: wp-includes/ms-functions.php:1215 +msgid "" +"New Site: %1$s\n" +"URL: %2$s\n" +"Remote IP: %3$s\n" +"\n" +"Disable these notifications: %4$s" +msgstr "" +"Nuevo Sitio: %1$s\n" +"URL: %2$s\n" +"IP remota: %3$s\n" +"\n" +"Desactivar las notificaciones: %4$s" + +#: wp-includes/ms-functions.php:1258 +msgid "" +"New User: %1$s\n" +"Remote IP: %2$s\n" +"\n" +"Disable these notifications: %3$s" +msgstr "" +"Nuevo Usuario: %1$s\n" +"IP Remota: %2$s\n" +"\n" +"Desactivar las notificaciones: %3$s" + +#: wp-includes/media-template.php:299 wp-includes/media-template.php:377 +#: wp-includes/media-template.php:459 +msgid "Link To" +msgstr "Enlazado a" + +#: wp-includes/media-template.php:326 wp-includes/media-template.php:385 +msgid "Attachment Page" +msgstr "Página de adjuntos" + +#: wp-includes/media-template.php:319 wp-includes/media-template.php:388 +msgid "Media File" +msgstr "Archivo multimedia" + +#: wp-includes/media-template.php:172 +msgid "Describe this video…" +msgstr "Describe este video…" + +#: wp-includes/media-template.php:174 +msgid "Describe this audio file…" +msgstr "Describe este archivo de audio…" + +#: wp-includes/media-template.php:176 +msgid "Describe this media file…" +msgstr "Describe este archivo…" + +#: wp-includes/media.php:1925 +msgid "Update gallery" +msgstr "Actualizar galería" + +#: wp-includes/ms-functions.php:186 +msgid "The requested user does not exist." +msgstr "El usuario solicitado no existe." + +#: wp-includes/ms-functions.php:496 +msgid "Please enter a valid email address." +msgstr "Por favor, introduce una dirección de correo válida." + +#: wp-includes/user.php:1674 +msgid "ERROR: This username is already registered. Please choose another one." +msgstr "ERROR: Este usuario ya está registrado. Por favor elige otro." + +#: wp-includes/class-wp-image-editor-gd.php:87 +#: wp-includes/class-wp-image-editor-imagick.php:120 +msgid "File doesn’t exist?" +msgstr "¿El archivo no existe?" + +#: wp-includes/class-wp-image-editor-gd.php:103 +#: wp-includes/class-wp-image-editor-imagick.php:130 +msgid "File is not an image." +msgstr "El archivo no es una imagen." + +#: wp-includes/class-wp-image-editor-gd.php:107 +msgid "Could not read image size." +msgstr "No se pudo leer el tamaño de la imagen." + +#: wp-includes/class-wp-image-editor-gd.php:165 +#: wp-includes/class-wp-image-editor-gd.php:183 +msgid "Image resize failed." +msgstr "Fallo en el cambio de tamaño de la imagen." + +#: wp-includes/class-wp-image-editor-gd.php:276 +msgid "Image crop failed." +msgstr "Fallo en el recorte de la imagen." + +#: wp-includes/class-wp-image-editor-gd.php:300 +msgid "Image rotate failed." +msgstr "Fallo girando la imagen." + +#: wp-includes/class-wp-image-editor-gd.php:330 +msgid "Image flip failed." +msgstr "Fallo en la rotación de la imagen." + +#: wp-includes/class-wp-image-editor-gd.php:362 +#: wp-includes/class-wp-image-editor-gd.php:370 +#: wp-includes/class-wp-image-editor-gd.php:374 +#: wp-includes/class-wp-image-editor-gd.php:377 +msgid "Image Editor Save Failed" +msgstr "Fallo guardando la imagen" + +#: wp-includes/post.php:55 +msgctxt "post type general name" +msgid "Media" +msgstr "Objeto" + +#: wp-includes/post.php:57 +msgctxt "add new media" +msgid "Add New" +msgstr "Añadir objeto" + +#: wp-includes/post.php:59 +msgid "View Attachment Page" +msgstr "Ver la página de adjuntos" + +#: wp-includes/post.php:2807 +msgid "Whoops, the provided date is invalid." +msgstr "¡Vaya! la fecha que has dado no es válida." + +#: wp-includes/media.php:1904 +msgid "Insert Media" +msgstr "Insertar objeto" + +#: wp-includes/media.php:1905 +msgid "Create a new gallery" +msgstr "Crear una nueva galería" + +#: wp-includes/media.php:1909 +msgid "Insert into post" +msgstr "Insertar en la entrada" + +#: wp-includes/media.php:1926 +msgid "Add to gallery" +msgstr "Añadir a la galería" + +#: wp-includes/media-template.php:260 wp-includes/script-loader.php:479 +msgid "Clear" +msgstr "Borrar" + +#: wp-includes/script-loader.php:481 +msgid "Select Color" +msgstr "Elige un color" + +#: wp-includes/script-loader.php:482 +msgid "Current Color" +msgstr "Color actual" + +#: wp-includes/taxonomy.php:2326 +msgid "Could not insert term relationship into the database" +msgstr "No se ha podido insertar la relación entre términos en la base de datos" + +#: wp-includes/user.php:1363 +msgctxt "Display name based on first name and last name" +msgid "%1$s %2$s" +msgstr "%1$s %2$s" + +#: wp-includes/class-wp-xmlrpc-server.php:188 +msgid "Incorrect username or password." +msgstr "Usuario o contraseña incorrecta." + +#: wp-includes/class-wp-xmlrpc-server.php:181 +msgid "XML-RPC services are disabled on this site." +msgstr "El servicio XML-RPC está desactivado en este sitio." + +#: wp-includes/class-wp-xmlrpc-server.php:1269 +msgid "There is a revision of this post that is more recent." +msgstr "Hay una revisión más reciente de esta entrada." + +#: wp-includes/general-template.php:1695 +msgid "%1$s %2$s %3$s Feed" +msgstr "%1$s %2$s %3$s Feed" + +#: wp-includes/default-widgets.php:625 +msgid "Display post date?" +msgstr "¿Mostrar la fecha de la entrada?" + +#: wp-includes/class-wp-xmlrpc-server.php:4135 +msgid "You are not allowed to create pages as this user." +msgstr "Con este usuario no tienes permisos para crear páginas." + +#: wp-includes/class-wp-xmlrpc-server.php:3539 +#: wp-includes/class-wp-xmlrpc-server.php:3600 +#: wp-includes/class-wp-xmlrpc-server.php:3603 +#: wp-includes/class-wp-xmlrpc-server.php:3606 +msgid "Invalid post ID" +msgstr "ID de entrada incorrecto" + +#: wp-includes/class-wp-xmlrpc-server.php:2040 +msgid "Sorry, you cannot edit users." +msgstr "Lo siento, no puedes editar usuarios." + +#: wp-includes/class-wp-xmlrpc-server.php:2045 +msgid "Invalid user ID" +msgstr "ID de usuario incorrecto" + +#: wp-includes/class-wp-xmlrpc-server.php:2093 +msgid "Sorry, you cannot list users." +msgstr "Lo siento, no puedes listar usuarios." + +#: wp-includes/class-wp-xmlrpc-server.php:2109 +msgid "The role specified is not valid" +msgstr "El rol especificado no es válido" + +#: wp-includes/class-wp-xmlrpc-server.php:2160 +#: wp-includes/class-wp-xmlrpc-server.php:2203 +msgid "Sorry, you cannot edit your profile." +msgstr "Lo siento, no puedes editar tu perfil." + +#: wp-includes/class-wp-xmlrpc-server.php:2237 +msgid "Sorry, the user cannot be updated." +msgstr "Lo siento, el usuario no puede ser actualizado." + +#: wp-includes/class-wp-xmlrpc-server.php:3542 +msgid "Sorry, you are not allowed to edit posts." +msgstr "Lo siento. no tienes permitido editar entradas." + +#: wp-includes/class-wp-xmlrpc-server.php:3546 +#: wp-includes/class-wp-xmlrpc-server.php:3613 +msgid "Sorry, revisions are disabled." +msgstr "Lo siento, las revisiones están desactivadas" + +#: wp-includes/js/tinymce/langs/wp-langs.php:549 +msgid "Alternative Text" +msgstr "Texto alternativo" + +#: wp-includes/media-template.php:61 +msgid "Select Files" +msgstr "Selecciona archivos" + +#: wp-includes/js/tinymce/wp-mce-help.php:216 +msgid "Distraction Free Writing mode" +msgstr "Mode de escritura sin distracciones" + +#: wp-includes/js/tinymce/wp-mce-help.php:234 +msgid "For more information about this software visit the TinyMCE website." +msgstr "Para más información sobre este software visita la web de TinyMCE." + +#: wp-includes/js/tinymce/wp-mce-help.php:232 +msgid "GNU Library General Public License" +msgstr "GNU Library General Public License" + +#: wp-includes/js/tinymce/wp-mce-help.php:187 +msgid "Pasting content from another application, like Word or Excel, is best done with the Paste from Word button on the second row, or in Text mode." +msgstr "Si quieres pegar contenido de otra aplicación, como Word o Excel, se hace mucho mejor con el botón \"Pegar desde Word\" que hay en la segunda fila, o en modo texto" + +#: wp-includes/js/tinymce/wp-mce-help.php:186 +msgid "When pasting content from another web page the results can be inconsistent and depend on your browser and on the web page you are pasting from. The editor tries to correct any invalid HTML code that was pasted, but for best results try using the Text tab or one of the paste buttons that are on the second row. Alternatively try pasting paragraph by paragraph. In most browsers to select one paragraph at a time, triple-click on it." +msgstr "Cuando pegas contenido directamente de otra web, los resultados pueden ser inconsistentes y variables dependiendo de tu navegador y de la página desde la que pegues. El editor intentará corregir los códigos HTML no válidos que pongas, pero para obtener un mejor resultado, usa la pestaña de edición de texto o los botones de pegar que hay en la segunda fila. También puedes intentar pegarlo párrafo por párrafo. En la mayoría de los navegadores, si hace clic tres veces seleccionas un párrafo entero." + +#: wp-includes/js/tinymce/wp-mce-help.php:184 +msgid "Any HTML entered directly into the rich editor will show up as text when the post is viewed. What you see is what you get. When you want to include HTML elements that cannot be generated with the toolbar buttons, you must enter it by hand in the Text editor. Examples are tables and <code>. To do this, click the Text tab and edit the code, then switch back to Visual mode. If the code is valid and understood by the editor, you should see it rendered immediately." +msgstr "Cualquier código HTML introducido directamente en el editor Visual aparecerá como texto en la entrada. Lo que ves es lo que hay. Cuando quieras incluir elementos HTML que no pueden ser generados con los botones de la barra de herramientas, debes introducirlos a mano en el modo HTML del editor. Por ejemplo, tablas o <código>. Para hacer esto haz click en la pestaña HTML y edita el código, después vuelve al modo Visual. Si el código es válido y entendido por el editor, deberías verlo transformado inmediatamente." + +#: wp-includes/js/tinymce/wp-mce-help.php:182 +msgid "If you need to upload an image or another media file from your computer, you can use the Media Library button above the editor. The media library will attempt to create a thumbnail-sized copy from each uploaded image. To insert your image into the post, first click on the thumbnail to reveal a menu of options. When you have selected the options you like, click \"Insert into Post\" and your image or file will appear in the post you are editing." +msgstr "Si necesitas subir una imagen u otro archivo multimedia desde tu ordenador puedes usar el botón de la Librería multimedia que hay sobre el editor. La librería multimedia intentará crear una copia en miniatura para cada imagen cargada. Para insertar tu imagen en la entrada, primero haz clic en la miniatura para mostrar un menú de opciones. Cuando hayas elegido las opciones que te gusten haz clic en \"Insertar en la entrada\" y tu imagen o archivo aparecerá en la entrada que se está editando." + +#: wp-includes/js/tinymce/wp-mce-help.php:220 +msgid "Editor width in Distraction Free Writing mode:" +msgstr "Anchura del editor en el modo de escritura sin distracciones:" + +#: wp-includes/js/tinymce/langs/wp-langs.php:449 +msgid "QuickTime options" +msgstr "Opciones de QuickTime" + +#: wp-includes/class-wp-admin-bar.php:360 +msgid "Skip to toolbar" +msgstr "Abrir la barra de herramientas" + +#: wp-includes/class-wp-admin-bar.php:361 +msgid "Top navigation toolbar." +msgstr "Barra de herramientas en la parte superior." + +#: wp-includes/js/tinymce/langs/wp-langs.php:513 +msgid "Distraction Free Writing mode (Alt + Shift + W)" +msgstr "Modo de escritura sin distracciones (Alt + Shift + W)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:135 +msgid "Horizontal rule" +msgstr "Regla horizontal" + +#: wp-includes/class-wp-editor.php:114 wp-includes/class-wp-editor.php:699 +msgctxt "Name for the Text editor tab (formerly HTML)" +msgid "Text" +msgstr "Texto" + +#: wp-includes/class-wp-customize-control.php:387 +msgid "Hex Value" +msgstr "Valor hexadecimal " + +#: wp-includes/class-wp-customize-manager.php:770 +msgid "Header Text Color" +msgstr "Color del texto de la cabecera" + +#: wp-includes/class-wp-customize-manager.php:748 +msgid "Colors" +msgstr "Colores" + +#: wp-includes/script-loader.php:365 +msgid "Save & Activate" +msgstr "Guardar y activar" + +#: wp-includes/script-loader.php:367 +msgid "Saved" +msgstr "Guardado" + +#: wp-login.php:817 +msgid "You have successfully updated WordPress! Please log back in to experience the awesomeness." +msgstr "¡Has actualizado WordPress con éxito! Por favor, accede de nuevo para disfrutar de su genialidad." + +#: wp-includes/script-loader.php:366 +msgid "Save & Publish" +msgstr "Guardar y publicar" + +#: wp-includes/class-wp-customize-control.php:603 +msgid "Select File" +msgstr "Elegir archivo" + +#: wp-includes/admin-bar.php:658 +msgid "Customize" +msgstr "Personalizar" + +#: wp-includes/class-wp-xmlrpc-server.php:517 +msgid "Insufficient arguments passed to this XML-RPC method." +msgstr "Argumentos insuficientes para este método de XML-RPC." + +#: wp-includes/class-wp-xmlrpc-server.php:1088 +msgid "Sorry, you cannot stick a private post." +msgstr "Lo siento, no puedes destacar una entrada privada" + +#: wp-content/plugins/akismet/admin.php:179 +msgid "This key is invalid." +msgstr "Esta clave no es válida." + +#: wp-content/plugins/akismet/admin.php:414 +msgid "Some comments have not yet been checked for spam by Akismet. They have been temporarily held for moderation. Please check your Akismet configuration and contact your web host if problems persist." +msgstr "Algunos comentarios no han sido revisados por Akismet en busca de spam. Han sido temporalmente puestos en moderación. Por favor, revisa tu configuración de Akismet y si el problema continua, habla con tu servicio de alojamiento." + +#: wp-content/plugins/akismet/admin.php:436 +msgid "Awaiting spam check" +msgstr "Esperando la verificación de correo no deseado" + +#: wp-content/plugins/akismet/widget.php:10 +msgid "Akismet Widget" +msgstr "Widget de Akismet" + +#: wp-content/plugins/akismet/widget.php:11 +msgid "Display the number of spam comments Akismet has caught" +msgstr "Muestra el número de comentarios de spam que Akismet ha capturado" + +#: wp-content/plugins/akismet/widget.php:96 +msgid "%1$s spam blocked by Akismet" +msgid_plural "%1$s spam blocked by Akismet" +msgstr[0] "%1$s mensaje spam bloqueado por Akismet" +msgstr[1] "%1$s mensajes de spam bloqueados por Akismet" + +#: wp-includes/class-wp-customize-control.php:480 +#: wp-includes/class-wp-customize-control.php:738 +msgid "No Image" +msgstr "Sin imagen" + +#: wp-includes/class-wp-customize-control.php:739 +msgid "Random Default Image" +msgstr "Imágenes por defecto aleatorias" + +#: wp-includes/class-wp-customize-control.php:740 +msgid "Random Uploaded Image" +msgstr "Imágenes subidas aleatorias" + +#: wp-includes/class-wp-customize-manager.php:896 +msgid "You can edit your menu content on the Menus screen in the Appearance section." +msgstr "Puedes editar el contenido de la pantalla de Menus en la sección Apariencia." + +#: wp-includes/class-wp-customize-control.php:600 +msgid "Drop a file here or select a file." +msgstr "Arrastra un archivo aquí o elige un archivo." + +#: wp-includes/class-wp-customize-control.php:727 +#: wp-includes/class-wp-customize-manager.php:793 +msgid "Header Image" +msgstr "Imagen de cabecera" + +#: wp-includes/class-wp-xmlrpc-server.php:360 +msgid "Post Thumbnail" +msgstr "Miniatura de la entrada" + +#: wp-includes/script-loader.php:91 +msgid "text direction" +msgstr "Dirección del texto" + +#: wp-includes/script-loader.php:92 +msgid "Toggle Editor Text Direction" +msgstr "Cambiar la dirección del editor de texto" + +#: wp-includes/ms-functions.php:624 +msgid "Site name must be at least 4 characters." +msgstr "El nombre del sitio debe tener al menos 4 caracteres." + +#: wp-includes/ms-functions.php:615 +msgid "Please enter a site name." +msgstr "Por favor, introduce un nombre para el sitio." + +#: wp-includes/ms-functions.php:480 +msgid "That username is not allowed." +msgstr "Ese nombre de usuario no está permitido." + +#: wp-includes/ms-functions.php:472 +msgid "Please enter a username." +msgstr "Por favor escribe el nombre de usuario." + +#: wp-includes/ms-functions.php:652 +msgid "Please enter a site title." +msgstr "Por favor, introduce el título del sitio." + +#: wp-includes/ms-functions.php:621 +msgid "That name is not allowed." +msgstr "Ese nombre no está permitido." + +#: wp-includes/ms-functions.php:486 +msgid "Username must be at least 4 characters." +msgstr "El nombre de usuario debe tener, al menos, 4 caracteres." + +#: wp-includes/class-wp-customize-manager.php:945 +msgid "A static page" +msgstr "Una página estática" + +#: wp-includes/class-wp-customize-manager.php:764 +msgid "Display Header Text" +msgstr "Mostrar texto de cabecera" + +#: wp-includes/class-wp-customize-manager.php:785 +msgid "Background Color" +msgstr "Color de fondo" + +#: wp-includes/class-wp-customize-control.php:654 +#: wp-includes/class-wp-customize-manager.php:813 +msgid "Background Image" +msgstr "Imagen de fondo" + +#: wp-includes/class-wp-customize-manager.php:835 +msgid "Background Repeat" +msgstr "Repetición del fondo" + +#: wp-includes/class-wp-customize-manager.php:852 +msgid "Background Position" +msgstr "Posición del fondo" + +#: wp-includes/class-wp-customize-manager.php:868 +msgid "Background Attachment" +msgstr "Adjunto del fondo" + +#: wp-includes/class-wp-customize-control.php:485 +msgid "Uploaded" +msgstr "Subido" + +#: wp-includes/class-wp-customize-control.php:484 +msgid "Upload New" +msgstr "Añadir nueva" + +#: wp-includes/class-wp-customize-control.php:558 +msgid "Remove Image" +msgstr "Eliminar imagen" + +#: wp-includes/class-wp-xmlrpc-server.php:3444 +msgid "Sorry, you are not allowed to edit this post type." +msgstr "Lo siento, no estás autorizado a editar este tipo de entrada." + +#: wp-includes/class-wp-customize-manager.php:873 +msgid "Scroll" +msgstr "Desplazamiento" + +#: wp-includes/class-wp-customize-manager.php:872 +msgid "Fixed" +msgstr "Fijo" + +#: wp-includes/class-wp-customize-manager.php:839 +msgid "No Repeat" +msgstr "Sin repetición" + +#: wp-includes/class-wp-customize-manager.php:840 +msgid "Tile" +msgstr "Mosaico" + +#: wp-includes/class-wp-customize-manager.php:841 +msgid "Tile Horizontally" +msgstr "Mosaico horizontal" + +#: wp-includes/class-wp-customize-manager.php:842 +msgid "Tile Vertically" +msgstr "Mosaico vertical" + +#: wp-includes/class-wp-customize-manager.php:956 +msgid "Front page" +msgstr "Portada" + +#: wp-includes/class-wp-customize-manager.php:968 +msgid "Posts page" +msgstr "Página de entradas" + +#: wp-includes/class-wp-customize-control.php:444 +msgid "Upload" +msgstr "Subir" + +#: wp-includes/class-wp-customize-control.php:445 +#: wp-includes/media-template.php:156 +msgid "Remove" +msgstr "Eliminar" + +#: wp-includes/media.php:1647 wp-includes/script-loader.php:373 +msgid "Allowed Files" +msgstr "Archivos permitidos" + +#: wp-includes/class-wp-xmlrpc-server.php:1562 +#: wp-includes/class-wp-xmlrpc-server.php:1660 +msgid "The term name cannot be empty." +msgstr "El nombre del término no puede estar vacío." + +#: wp-includes/class-wp-xmlrpc-server.php:1553 +msgid "You are not allowed to create terms in this taxonomy." +msgstr "No tienes permiso para crear un término en esta taxonomía." + +#: wp-includes/class-wp-xmlrpc-server.php:1566 +msgid "This taxonomy is not hierarchical." +msgstr "Esta taxonomía no es jerárquica." + +#: wp-includes/class-wp-xmlrpc-server.php:1575 +#: wp-includes/class-wp-xmlrpc-server.php:1674 +msgid "Parent term does not exist." +msgstr "No existe término padre." + +#: wp-includes/class-wp-xmlrpc-server.php:1592 +msgid "Sorry, your term could not be created. Something wrong happened." +msgstr "Lo siento, el término no se pudo crear. algo salió mal." + +#: wp-includes/class-wp-xmlrpc-server.php:1641 +msgid "You are not allowed to edit terms in this taxonomy." +msgstr "No estás autorizado para editar términos de esta taxonomía." + +#: wp-includes/class-wp-xmlrpc-server.php:1665 +msgid "This taxonomy is not hierarchical so you can't set a parent." +msgstr "Esta taxonomía no es jerárquica por lo que no se puede establecer un padre." + +#: wp-includes/class-wp-xmlrpc-server.php:1691 +msgid "Sorry, editing the term failed." +msgstr "Perdón, fallo editando el término." + +#: wp-includes/class-wp-xmlrpc-server.php:1733 +msgid "You are not allowed to delete terms in this taxonomy." +msgstr "No está permitido eliminar los términos de esta taxonomía." + +#: wp-includes/class-wp-xmlrpc-server.php:1749 +msgid "Sorry, deleting the term failed." +msgstr "Perdón, fallo al borrar el término." + +#: wp-includes/class-wp-xmlrpc-server.php:1800 +#: wp-includes/class-wp-xmlrpc-server.php:1853 +#: wp-includes/class-wp-xmlrpc-server.php:1932 +msgid "You are not allowed to assign terms in this taxonomy." +msgstr "No tienes permiso para asignar términos en esta taxonomía." + +#: wp-includes/default-widgets.php:148 +msgid "Select Link Category:" +msgstr "Elige una categoría de enlace:" + +#: wp-includes/class-wp-xmlrpc-server.php:350 +msgid "Template" +msgstr "Plantilla" + +#: wp-includes/class-wp-xmlrpc-server.php:355 +msgid "Stylesheet" +msgstr "Hoja de estilo" + +#: wp-includes/default-widgets.php:161 +msgid "Link title" +msgstr "Título de enlace" + +#: wp-includes/default-widgets.php:162 +msgid "Link rating" +msgstr "Valoración de los enlaces" + +#: wp-includes/default-widgets.php:163 +msgid "Link ID" +msgstr "ID de enlace" + +#: wp-includes/default-widgets.php:178 +msgid "Number of links to show:" +msgstr "Número de enlaces a mostrar:" + +#: wp-includes/class-wp-theme.php:224 +msgid "ERROR: The themes directory is either empty or doesn’t exist. Please check your installation." +msgstr "ERROR: El directorio de temas está vacio o no existe. Por favor revisa tu instalación." + +#: wp-includes/class-wp-theme.php:228 +msgid "Stylesheet is not readable." +msgstr "La hoja de estilo no es legible." + +#: wp-includes/class-wp-theme.php:277 wp-includes/class-wp-theme.php:281 +msgid "The \"%s\" theme is not a valid parent theme." +msgstr "El tema \"%s\" no es un tema padre válido." + +#: wp-includes/class-wp-customize-manager.php:893 +msgid "Navigation" +msgstr "Navegación" + +#: wp-includes/class-wp-customize-manager.php:896 +msgid "Your theme supports %s menu. Select which menu you would like to use." +msgid_plural "Your theme supports %s menus. Select which menu appears in each location." +msgstr[0] "Tu tema permite %s menú. Selecciona cuál quieres usar." +msgstr[1] "Tu tema permite %s menús. Selecciona qué menú aparecerá en cada sitio." + +#: wp-includes/media-template.php:212 +msgid "Refresh" +msgstr "Actualizar" + +#: wp-includes/class-wp-customize-manager.php:926 +msgid "Static Front Page" +msgstr "Portada estática" + +#: wp-includes/class-wp-customize-manager.php:929 +msgid "Your theme supports a static front page." +msgstr "Tu tema permite una página estática como portada." + +#: wp-includes/class-wp-customize-manager.php:944 +msgid "Your latest posts" +msgstr "Tus últimas entradas" + +#: wp-includes/class-wp-customize-manager.php:940 +msgid "Front page displays" +msgstr "Página frontal muestra" + +#: wp-includes/class-wp-customize-manager.php:719 +msgid "Site Title & Tagline" +msgstr "Título del sitio y descripción corta" + +#: wp-includes/class-wp-customize-manager.php:741 +msgid "Tagline" +msgstr "Descripción corta" + +#: wp-includes/class-wp-customize-control.php:292 +#: wp-includes/class-wp-customize-manager.php:900 +msgid "— Select —" +msgstr "— Elegir —" + +#: wp-includes/js/tinymce/langs/wp-langs.php:270 +msgid "Styles" +msgstr "Estilos" + +#: wp-includes/js/tinymce/langs/wp-langs.php:359 +msgid "Use left and right arrows to navigate." +msgstr "Usa las flechas izquierda y derecha para navegar." + +#: wp-includes/formatting.php:2416 wp-includes/script-loader.php:353 +msgctxt "word count: words or characters?" +msgid "words" +msgstr "words" + +#: wp-includes/class-wp-xmlrpc-server.php:1019 +#: wp-includes/class-wp-xmlrpc-server.php:4392 +msgid "The post type may not be changed." +msgstr "El tipo de entrada no puede cambiarse." + +#: wp-includes/class-wp-xmlrpc-server.php:340 +msgid "Image default size" +msgstr "Tamaño por defecto de imagen" + +#: wp-includes/class-wp-xmlrpc-server.php:335 +msgid "Image default link type" +msgstr "Tipo de enlace de imagen por defecto" + +#: wp-includes/class-wp-xmlrpc-server.php:345 +msgid "Image default align" +msgstr "Alineación de imagen por defecto" + +#: wp-includes/class-wp-xmlrpc-server.php:1017 +msgid "Sorry, you are not allowed to edit this post." +msgstr "Perdón, no tienes permisos para editar esta entrada." + +#: wp-includes/post.php:3244 wp-includes/script-loader.php:434 +#: wp-includes/script-loader.php:460 +msgctxt "tag delimiter" +msgid "," +msgstr "," + +#: wp-includes/admin-bar.php:308 +msgid "Edit Site" +msgstr "Editar sitio" + +#: wp-includes/class-wp-xmlrpc-server.php:1469 +msgid "Sorry, you are not allowed to edit posts in this post type" +msgstr "Perdón, no tienes permisos para editar entradas de este tipo" + +#: wp-includes/class-wp-xmlrpc-server.php:1055 +#: wp-includes/class-wp-xmlrpc-server.php:4143 +msgid "Invalid author ID." +msgstr "ID de autor incorrecto." + +#: wp-includes/class-wp-xmlrpc-server.php:1327 +msgid "Sorry, you are not allowed to delete this post." +msgstr "Perdón, no tienes permisos para borrar esta entrada." + +#: wp-includes/class-wp-xmlrpc-server.php:1172 +msgid "Ambiguous term name used in a hierarchical taxonomy. Please use term ID instead." +msgstr "Nombre de término ambiguo usado en una taxonomía jerárquica. Por favor usa en su lugar el ID del término." + +#: wp-includes/class-wp-xmlrpc-server.php:1179 +msgid "Sorry, you are not allowed to add a term to one of the given taxonomies." +msgstr "Perdón, no tienes permiso para añadir un término a una de las taxonomías dadas." + +#: wp-includes/class-wp-xmlrpc-server.php:1332 +msgid "The post cannot be deleted." +msgstr "La entrada no puede borrarse." + +#: wp-includes/class-wp-xmlrpc-server.php:1463 +msgid "The post type specified is not valid" +msgstr "El tipo de entrada especificada no es válida" + +#: wp-includes/class-wp-xmlrpc-server.php:1009 +#: wp-includes/class-wp-xmlrpc-server.php:3439 +#: wp-includes/class-wp-xmlrpc-server.php:4080 +#: wp-includes/class-wp-xmlrpc-server.php:4138 +#: wp-includes/class-wp-xmlrpc-server.php:4388 +#: wp-includes/class-wp-xmlrpc-server.php:4440 +msgid "Invalid post type" +msgstr "Tipo de entrada no válida" + +#: wp-includes/class-wp-xmlrpc-server.php:1045 +msgid "Sorry, you are not allowed to create password protected posts in this post type" +msgstr "Perdón, no tienes permiso para crear entradas protegidas con contraseña en este tipo de entrada" + +#: wp-includes/class-wp-xmlrpc-server.php:1050 +#: wp-includes/class-wp-xmlrpc-server.php:4131 +msgid "You are not allowed to create posts as this user." +msgstr "No tienes permisos para crear entradas en nombre de este usuario." + +#: wp-includes/class-wp-xmlrpc-server.php:1031 +msgid "Sorry, you are not allowed to create private posts in this post type" +msgstr "Perdón, no tienes permiso para crear entradas privadas en este tipo de entrada" + +#: wp-includes/class-wp-xmlrpc-server.php:1036 +msgid "Sorry, you are not allowed to publish posts in this post type" +msgstr "Lo siento, no tienes permiso para publicar en este tipo de entrada." + +#: wp-includes/class-wp-xmlrpc-server.php:1130 +#: wp-includes/class-wp-xmlrpc-server.php:1153 +msgid "Sorry, you are not allowed to assign a term to one of the given taxonomies." +msgstr "Perdón, no tienes permisos para asignar un término a una de las taxonomías dadas." + +#: wp-includes/class-wp-xmlrpc-server.php:1127 +#: wp-includes/class-wp-xmlrpc-server.php:1150 +msgid "Sorry, one of the given taxonomies is not supported by the post type." +msgstr "Lo siento, una de las taxonomías dadas no es compatible con el tipo de entrada." + +#: wp-includes/class-wp-xmlrpc-server.php:1093 +msgid "Sorry, you are not allowed to stick this post." +msgstr "Perdón, no tienes permiso para destacar esta entrada." + +#: wp-includes/class-wp-editor.php:296 +msgid "English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv" +msgstr "Inglés=en,Danés=da,Holándes=nl,Finés=fi,Francés=fr,Alemán=de,Italiano=it,Polaco=pl,Portugués=pt,Español=es,Sueco=sv" + +#: wp-includes/formatting.php:37 wp-includes/formatting.php:3663 +msgctxt "opening curly double quote" +msgid "“" +msgstr "“" + +#: wp-includes/formatting.php:39 +msgctxt "closing curly double quote" +msgid "”" +msgstr "”" + +#: wp-includes/formatting.php:42 +msgctxt "apostrophe" +msgid "’" +msgstr "’" + +#: wp-includes/formatting.php:45 +msgctxt "prime" +msgid "′" +msgstr "′" + +#: wp-includes/formatting.php:47 +msgctxt "double prime" +msgid "″" +msgstr "″" + +#: wp-includes/formatting.php:50 +msgctxt "opening curly single quote" +msgid "‘" +msgstr "‘" + +#: wp-includes/formatting.php:52 +msgctxt "closing curly single quote" +msgid "’" +msgstr "’" + +#: wp-signup.php:127 +msgid "Allow search engines to index this site." +msgstr "Permite que los motores de búsquedas indexen este sitio." + +#: wp-load.php:56 +msgid "There doesn't seem to be a wp-config.php file. I need this before we can get started." +msgstr "Parece que el archivo wp-config.php no existe. Lo necesito antes de que podamos empezar." + +#: wp-load.php:57 +msgid "Need more help? We got it." +msgstr "¿Necesitas más ayuda? La tenemos." + +#: wp-load.php:58 +msgid "You can create a wp-config.php file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file." +msgstr "Puedes crear un archivo wp-config.php a través de la interface web pero esto no funciona para todos las configuraciones de servidores. La manera más segura es la de crear manualmente el archivo." + +#: wp-load.php:59 +msgid "Create a Configuration File" +msgstr "Crear un archivo de configuración" + +#: wp-includes/admin-bar.php:130 wp-includes/default-widgets.php:319 +#: wp-login.php:101 +msgid "http://wordpress.org/" +msgstr "http://es.wordpress.org/" + +#: wp-includes/admin-bar.php:138 +msgid "http://codex.wordpress.org/" +msgstr "http://codex.wordpress.org/" + +#: wp-activate.php:98 +msgid "Your site at %2$s is active. You may now log in to your site using your chosen username of “%3$s”. Please check your email inbox at %4$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can reset your password." +msgstr "Tu sitio en %2$s está activo. Puedes entrar en tu sitio usando el usuario “%3$s”. Por favor, comprueba en tu correo electrónico %4$s la contraseña y las instrucciones de acceso. Si no recibes el correo mira en la papelera o en la carpeta de spam. Si no recibes el correo en una hora puedes reiniciar tu contraseña." + +#: wp-signup.php:375 +msgid "http://%2$s is your new site. Log in as “%4$s” using your existing password." +msgstr "http://%2$s es tu nuevo sitio. Accede como “%4$s” usando tu contraseña." + +#: wp-activate.php:96 +msgid "Your account has been activated. You may now log in to the site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can reset your password." +msgstr "Tu cuenta ha sido activada. Ahora puedes acceder al sitio usando el usuario “%2$s” que has elegido. Por favor, revisa tu correo electrónico para conocer %3$s la contraseña y las instrucciones de acceso. Si no recibes el correo, por favor revisa la carpeta de correo basura y en la de spam. Si en una hora no recibes el correo, puedes reiniciar tu contraseña." + +#: wp-includes/functions.php:1176 +msgid "One or more database tables are unavailable. The database may need to be repaired." +msgstr "Una o más tablas de la base de datos no están disponibles. La base de datos podría necesitar ser reparada." + +#: wp-mail.php:252 +msgid "Mission complete. Message %s deleted." +msgstr "Misión cumplida. Mensaje %s borrado." + +#: wp-includes/comment.php:871 wp-includes/comment.php:873 +msgid "You are posting comments too quickly. Slow down." +msgstr "Estás publicando comentarios demasiado rápido. Frena." + +#: wp-includes/admin-bar.php:589 +msgctxt "admin bar menu group label" +msgid "New" +msgstr "Nuevo" + +#: wp-includes/admin-bar.php:625 +msgid "%s comment awaiting moderation" +msgid_plural "%s comments awaiting moderation" +msgstr[0] "%s comentario está esperando moderación" +msgstr[1] "%s comentarios están esperando moderación" + +#: wp-includes/ms-load.php:253 +msgid "What do I do now?" +msgstr "¿Ahora qué hago?" + +#: wp-includes/script-loader.php:234 +msgid "%s exceeds the maximum upload size for the multi-file uploader when used in your browser." +msgstr "%s excede el tamaño máximo de subida de la herramienta de subida múltiple de archivos del navegador." + +#: wp-includes/script-loader.php:233 +msgid "Please try uploading this file with the %1$sbrowser uploader%2$s." +msgstr "Por favor, intenta subir este archivo a través del %1$snavegador%2$s." + +#: wp-includes/script-loader.php:242 +msgid "“%s” has failed to upload." +msgstr "Ha habido un error al subir “%s”" + +#: wp-includes/js/tinymce/langs/wp-langs.php:231 +msgid "Toggle spellchecker (Alt + Shift + N)" +msgstr "Activar/desactivar corrector (Alt + Shift + N)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:210 +msgid "Toggle fullscreen mode (Alt + Shift + G)" +msgstr "Activar/desactivar pantalla completa (Alt + Shift + G)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:294 +msgid "Align Center (Alt + Shift + C)" +msgstr "Alinear al centro (Alt + Shift + C)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:293 +msgid "Align Left (Alt + Shift + L)" +msgstr "Alinear a la izquierda (Alt + Shift + L)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:292 +msgid "Strikethrough (Alt + Shift + D)" +msgstr "Tachado (Alt + Shift + D)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:296 +msgid "Align Full (Alt + Shift + J)" +msgstr "Justificación completa (Alt + Shift + J)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:302 +msgid "Redo (Ctrl + Y)" +msgstr "Rehacer (Ctrl + Y)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:301 +msgid "Undo (Ctrl + Z)" +msgstr "Deshacer (Ctrl + Z)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:503 +msgid "Insert Page break (Alt + Shift + P)" +msgstr "Insertar salto de línea (Alt + Shift + P)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:502 +msgid "Insert More Tag (Alt + Shift + T)" +msgstr "Insertar etiqueta More (Alt + Shift+ T)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:501 +msgid "Show/Hide Kitchen Sink (Alt + Shift + Z)" +msgstr "Mostrar/Oultar opciones avanzadas (Alt + Shift + Z)" + +#: wp-includes/class-wp-editor.php:713 +#: wp-includes/js/tinymce/langs/wp-langs.php:323 +msgid "Blockquote (Alt + Shift + Q)" +msgstr "Cita (Alt+Shift+Q)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:295 +msgid "Align Right (Alt + Shift + R)" +msgstr "Alinear a la derecha (Alt + Shift + R)" + +#: wp-includes/default-widgets.php:150 +msgctxt "links widget" +msgid "All Links" +msgstr "Todos los enlaces" + +#: wp-includes/formatting.php:55 +msgctxt "en dash" +msgid "–" +msgstr "–" + +#: wp-includes/formatting.php:57 +msgctxt "em dash" +msgid "—" +msgstr "—" + +#: wp-includes/class-wp-admin-bar.php:105 +msgid "The menu ID should not be empty." +msgstr "El ID de menú, no puede estar vacio." + +#: wp-includes/admin-bar.php:111 wp-includes/admin-bar.php:120 +msgid "About WordPress" +msgstr "Acerca de WordPress" + +#: wp-includes/admin-bar.php:146 +msgid "http://wordpress.org/support/" +msgstr "http://es.forums.wordpress.org/" + +#: wp-includes/admin-bar.php:154 +msgid "http://wordpress.org/support/forum/requests-and-feedback" +msgstr "http://es.forums.wordpress.org/forum/peticiones-y-feedback" + +#: wp-includes/script-loader.php:222 +msgid "%s exceeds the maximum upload size for this site." +msgstr "El tamaño del archivo %s excede el tamaño permitido en este sitio." + +#: wp-includes/functions.php:3048 +msgid "Please see Debugging in WordPress for more information." +msgstr "Por favor, mira Debugging in WordPress para más información." + +#: wp-includes/admin-bar.php:153 +msgid "Feedback" +msgstr "Sugerencias" + +#: wp-includes/ms-functions.php:1454 +msgid "" +"Dear User,\n" +"\n" +"Your new SITE_NAME site has been successfully set up at:\n" +"BLOG_URL\n" +"\n" +"You can log in to the administrator account with the following information:\n" +"Username: USERNAME\n" +"Password: PASSWORD\n" +"Log in here: BLOG_URLwp-login.php\n" +"\n" +"We hope you enjoy your new site. Thanks!\n" +"\n" +"--The Team @ SITE_NAME" +msgstr "" +"Estimado usuario:\n" +"\n" +"Tu nuevo sitio SITE_NAME se ha creado en:\n" +"BLOG_URL\n" +"\n" +"Puedes acceder a la administración de la cuenta con la siguiente información:\n" +"Nombre de usuario: USERNAME\n" +"Contraseña: PASSWORD\n" +"Acceda aquí: BLOG_URLwp-login.php\n" +"\n" +"Esperamos que disfrutes de tu nuevo sitio\n" +"Gracias\n" +"\n" +"-- El equipo @ SITE_NAME" + +#: wp-comments-post.php:122 +msgid "ERROR: please type a comment." +msgstr "ERROR: Por favor, introduce un comentario." + +#: wp-comments-post.php:118 +msgid "ERROR: please enter a valid email address." +msgstr "ERROR: Por favor, introduce un correo electrónico válido." + +#: wp-comments-post.php:116 +msgid "ERROR: please fill the required fields (name, email)." +msgstr "Error: por favor, completa los campos requeridos (nombre, correo electrónico)." + +#: wp-includes/js/tinymce/langs/wp-langs.php:30 +msgid "ERROR: Invalid values entered, these are marked in red." +msgstr "Error: Se han introducido valores incorrectos que han sido marcados en rojo." + +#: wp-includes/script-loader.php:493 +msgid "Could not load the preview image. Please reload the page and try again." +msgstr "No se puede cargar la previsualización de la imagen. Por favor, recarga la página y prueba de nuevo." + +#: wp-includes/ms-functions.php:305 +msgid "ERROR: Site URL already taken." +msgstr "ERROR: URL del sitio ya utilizada." + +#: wp-includes/ms-functions.php:312 +msgid "ERROR: problem creating site entry." +msgstr "ERROR: ha habido un problema al crear la entrada del sitio." + +#: wp-admin/custom-header.php:588 wp-admin/comment.php:192 +#: wp-admin/includes/class-wp-links-list-table.php:110 +msgid "No" +msgstr "No" + +#: wp-includes/comment-template.php:1527 +msgid "Email" +msgstr "Correo electrónico" + +#: wp-includes/admin-bar.php:316 wp-admin/users.php:17 wp-admin/menu.php:168 +msgid "Users" +msgstr "Usuarios" + +#: wp-includes/script-loader.php:268 wp-includes/script-loader.php:325 +#: wp-includes/class-wp-editor.php:599 +#: wp-includes/js/tinymce/langs/wp-langs.php:15 +#: wp-admin/includes/class-wp-posts-list-table.php:1032 +#: wp-admin/includes/class-wp-posts-list-table.php:1034 +#: wp-admin/includes/class-wp-posts-list-table.php:1037 +#: wp-admin/includes/template.php:479 +#: wp-admin/includes/class-wp-plugins-list-table.php:260 +#: wp-admin/includes/meta-boxes.php:222 wp-admin/includes/meta-boxes.php:223 +#: wp-admin/edit-form-comment.php:66 wp-admin/edit-tag-form.php:90 +msgid "Update" +msgstr "Actualizar" + +#: wp-includes/admin-bar.php:310 +msgid "Sites" +msgstr "Sitios" + +#: wp-includes/theme-compat/comments-popup.php:80 wp-login.php:514 +#: wp-admin/user-new.php:255 wp-admin/user-new.php:317 wp-admin/comment.php:170 +#: wp-admin/includes/class-wp-users-list-table.php:165 +#: wp-admin/includes/template.php:322 wp-admin/user-edit.php:335 +msgid "E-mail" +msgstr "Correo electrónico" + +#: wp-includes/theme-compat/comments.php:77 +#: wp-includes/theme-compat/comments-popup.php:75 +#: wp-includes/comment-template.php:1525 +#: wp-admin/includes/class-wp-users-list-table.php:164 +#: wp-admin/includes/template.php:317 wp-admin/user-edit.php:239 +msgid "Name" +msgstr "Nombre" + +#: wp-includes/general-template.php:258 wp-login.php:510 wp-login.php:630 +#: wp-admin/user-new.php:313 wp-admin/install.php:101 wp-admin/install.php:226 +#: wp-admin/includes/file.php:1003 +#: wp-admin/includes/class-wp-users-list-table.php:163 +#: wp-admin/user-edit.php:243 +msgid "Username" +msgstr "Nombre de usuario" + +#: wp-admin/menu.php:199 wp-admin/options.php:21 +#: wp-content/plugins/akismet/admin.php:59 +msgid "Settings" +msgstr "Ajustes" + +#: wp-includes/deprecated.php:2845 wp-includes/deprecated.php:2847 +#: wp-includes/admin-bar.php:257 wp-includes/admin-bar.php:304 +#: wp-includes/admin-bar.php:356 wp-admin/index.php:22 +#: wp-admin/user/menu.php:10 wp-admin/menu.php:25 +msgid "Dashboard" +msgstr "Escritorio" + +#: wp-admin/user-new.php:14 wp-admin/user-new.php:16 wp-admin/user-new.php:59 +#: wp-admin/user-new.php:93 wp-admin/themes.php:13 wp-admin/themes.php:26 +#: wp-admin/custom-header.php:638 wp-admin/custom-header.php:724 +#: wp-admin/edit-comments.php:12 wp-admin/edit.php:22 wp-admin/post-new.php:40 +#: wp-admin/users.php:13 wp-admin/users.php:112 +#: wp-admin/includes/bookmark.php:30 wp-admin/press-this.php:17 +#: wp-admin/widgets.php:16 wp-admin/plugins.php:16 wp-admin/edit-tags.php:21 +#: wp-admin/edit-tags.php:48 wp-admin/edit-tags.php:86 +#: wp-admin/edit-tags.php:100 wp-admin/edit-tags.php:139 +#: wp-admin/nav-menus.php:23 wp-admin/options.php:35 wp-admin/options.php:59 +#: wp-content/plugins/akismet/admin.php:72 +msgid "Cheatin’ uh?" +msgstr "¡Haciendo trampas! ¿eh?" + +#: wp-includes/admin-bar.php:566 wp-admin/update-core.php:284 +#: wp-admin/update-core.php:292 wp-admin/menu.php:128 wp-admin/menu.php:133 +msgid "Themes" +msgstr "Temas" + +#: wp-includes/general-template.php:261 wp-login.php:621 wp-login.php:640 +#: wp-admin/install.php:145 wp-admin/install.php:239 +msgid "Log In" +msgstr "Acceder" + +#: wp-includes/post.php:4680 wp-includes/class-wp-editor.php:755 +#: wp-includes/js/tinymce/langs/wp-langs.php:344 +#: wp-includes/js/tinymce/langs/wp-langs.php:508 +#: wp-admin/includes/dashboard.php:531 +#: wp-admin/includes/class-wp-posts-list-table.php:739 +#: wp-admin/includes/media.php:922 wp-admin/includes/media.php:1686 +#: wp-admin/includes/media.php:1950 wp-admin/includes/ajax-actions.php:1355 +msgid "Title" +msgstr "Título" + +#: wp-includes/script-loader.php:329 wp-admin/includes/meta-boxes.php:125 +#: wp-admin/includes/meta-boxes.php:138 +msgid "Public" +msgstr "Público" + +#: wp-includes/js/tinymce/langs/wp-langs.php:288 +msgid "Path" +msgstr "Ruta" + +#: wp-includes/js/tinymce/langs/wp-langs.php:303 wp-admin/update-core.php:203 +#: wp-admin/update-core.php:215 wp-admin/includes/dashboard.php:75 +#: wp-admin/plugins.php:341 +msgid "Plugins" +msgstr "Plugins" + +#: wp-admin/custom-header.php:589 +#: wp-admin/includes/class-wp-links-list-table.php:110 +msgid "Yes" +msgstr "Sí" + +#: wp-includes/admin-bar.php:284 wp-admin/menu.php:30 +msgid "My Sites" +msgstr "Mis sitios" + +#: wp-includes/class-wp-xmlrpc-server.php:316 wp-admin/options-general.php:96 +#: wp-admin/install.php:97 +msgid "Site Title" +msgstr "Título del sitio" + +#: wp-includes/deprecated.php:2728 +msgid "First Post" +msgstr "Primera entrada" + +#: wp-includes/post-template.php:1227 wp-admin/includes/meta-boxes.php:143 +msgid "Password:" +msgstr "Contraseña:" + +#: wp-admin/includes/class-wp-themes-list-table.php:152 +#: wp-admin/includes/class-wp-upgrader.php:1421 +#: wp-admin/includes/class-wp-upgrader.php:1477 +#: wp-admin/includes/class-wp-plugins-list-table.php:252 +#: wp-admin/includes/class-wp-plugins-list-table.php:373 +msgid "Activate" +msgstr "Activar" + +#: wp-includes/admin-bar.php:137 +msgid "Documentation" +msgstr "Documentación" + +#: wp-includes/admin-bar.php:145 +msgid "Support Forums" +msgstr "Foros de soporte" + +#: wp-includes/formatting.php:2411 wp-includes/general-template.php:2052 +msgid "…" +msgstr "…" + +#: wp-includes/functions.php:2817 +msgid "Database Error" +msgstr "Error de la base de datos" + +#: wp-includes/functions.php:2821 wp-includes/ms-load.php:243 +msgid "Error establishing a database connection" +msgstr "Error estableciendo una conexión con la base de datos" + +#: wp-includes/admin-bar.php:129 +msgid "WordPress.org" +msgstr "WordPress.org" + +#: wp-includes/admin-bar.php:282 +msgid "Global Dashboard: %s" +msgstr "Escritorio global: %s" + +#: wp-includes/admin-bar.php:280 +msgid "Network Admin: %s" +msgstr "Administrador de la red: %s" + +#: wp-includes/taxonomy.php:463 +msgctxt "taxonomy general name" +msgid "Tags" +msgstr "Etiquetas" + +#: wp-includes/taxonomy.php:464 +msgctxt "taxonomy singular name" +msgid "Tag" +msgstr "Etiqueta" + +#: wp-includes/functions.wp-scripts.php:40 +#: wp-includes/functions.wp-scripts.php:77 +#: wp-includes/functions.wp-scripts.php:117 +#: wp-includes/functions.wp-scripts.php:143 +#: wp-includes/functions.wp-scripts.php:199 +#: wp-includes/functions.wp-scripts.php:227 +#: wp-includes/functions.wp-scripts.php:252 +#: wp-includes/functions.wp-styles.php:39 +#: wp-includes/functions.wp-styles.php:72 +#: wp-includes/functions.wp-styles.php:107 +#: wp-includes/functions.wp-styles.php:129 +#: wp-includes/functions.wp-styles.php:162 +#: wp-includes/functions.wp-styles.php:188 +#: wp-includes/functions.wp-styles.php:212 +msgid "Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks." +msgstr "Los scripts y estilos que utilices no deberías utlizarlos (registrarlos o engancharlos) a los ganchos %1, %2 y %3." + +#: wp-includes/class-wp-xmlrpc-server.php:437 +msgid "Allow link notifications from other blogs (pingbacks and trackbacks)" +msgstr "Permitir notificaciones de enlace desde otros sitios (pingbacks y trackbacks)" + +#: wp-includes/capabilities.php:604 wp-includes/capabilities.php:624 +#: wp-includes/capabilities.php:650 +msgid "Use WP_User->ID instead." +msgstr "Utiliza WP_User->ID en su lugar." + +#: wp-includes/ms-functions.php:1955 +msgid "You have been added to this site. Please visit the homepage or log in using your username and password." +msgstr "Has sido añadido a este sitio. Por favor, visita la página de inicio o accede utilizando tu nombre de usuario y contraseña." + +#: wp-includes/script-loader.php:226 +msgid "Memory exceeded. Please try another smaller file." +msgstr "Memoria excedida. Por favor, prueba con otro archivo más pequeño." + +#: wp-includes/script-loader.php:227 +msgid "This is larger than the maximum size. Please try another." +msgstr "Supera el tamaño permitido. Por favor, prueba con otro." + +#: wp-includes/script-loader.php:225 +msgid "This file is not an image. Please try another." +msgstr "Este archivo no es una imagen. Por favor, prueba con otro." + +#: wp-includes/general-template.php:2137 +msgctxt "admin color scheme" +msgid "Blue" +msgstr "Azul" + +#: wp-includes/formatting.php:3238 +msgid "The timezone you have entered is not valid. Please select a valid timezone." +msgstr "La zona horaria que has introducido no es válida. Por favor, selecciona una zona horaria válida." + +#: wp-includes/post.php:22 +msgctxt "add new on admin bar" +msgid "Post" +msgstr "Entrada" + +#: wp-includes/post.php:38 +msgctxt "add new on admin bar" +msgid "Page" +msgstr "Página" + +#: wp-includes/js/tinymce/langs/wp-langs.php:401 +msgctxt "html attribute" +msgid "Name" +msgstr "Nombre" + +#: wp-includes/js/tinymce/langs/wp-langs.php:357 +msgctxt "html attribute" +msgid "Name:" +msgstr "Nombre:" + +#: wp-includes/post.php:56 +msgctxt "add new from admin bar" +msgid "Media" +msgstr "Medio" + +#: wp-includes/admin-bar.php:564 +msgctxt "add new from admin bar" +msgid "Link" +msgstr "Enlace" + +#: wp-includes/admin-bar.php:584 +msgctxt "add new from admin bar" +msgid "User" +msgstr "Usuario" + +#: wp-includes/pluggable.php:806 +msgid "You should specify a nonce action to be verified by using the first parameter." +msgstr "Debes especificar una acción \"nonce\" a verificar mediante el primer parámetro." + +#: wp-includes/taxonomy.php:471 +msgid "View Tag" +msgstr "Ver etiqueta" + +#: wp-includes/taxonomy.php:471 +msgid "View Category" +msgstr "Ver categoría" + +#: wp-includes/js/tinymce/wp-mce-help.php:222 +msgid "Wider" +msgstr "Más ancho" + +#: wp-includes/js/tinymce/wp-mce-help.php:223 +msgid "Narrower" +msgstr "Más estrecho" + +#: wp-includes/js/tinymce/wp-mce-help.php:224 +msgid "Default width" +msgstr "Ancho por defecto" + +#: wp-includes/class-wp-editor.php:761 +msgid "Word count: %s" +msgstr "Número de palabras: %s" + +#: wp-activate.php:122 +msgid "Your account is now activated. Log in or go back to the homepage." +msgstr "Tu cuenta se ha activado. Accede o vuelve a la página de inicio." + +#: wp-activate.php:120 +msgid "Your account is now activated. View your site or Log in" +msgstr "Tu cuenta se ha activado. Visualiza tu sitio o Accede" + +#: wp-includes/class-wp-editor.php:719 +#: wp-includes/js/tinymce/langs/wp-langs.php:504 +msgid "Help (Alt + Shift + H)" +msgstr "Ayuda (Alt + Mayús + H)" + +#: wp-includes/admin-bar.php:194 +msgid "Howdy, %1$s" +msgstr "Hola, %1$s" + +#: wp-includes/class-wp-editor.php:694 +msgid "Exit fullscreen" +msgstr "Salir de pantalla completa" + +#: wp-includes/class-wp-editor.php:762 +msgid "Just write." +msgstr "Simplemente escribe." + +#: wp-includes/script-loader.php:404 +msgid "Approve and Reply" +msgstr "Aprobar y responder" + +#: wp-includes/post.php:1497 +msgid "All Posts" +msgstr "Todas las entradas" + +#: wp-includes/post.php:1497 +msgid "All Pages" +msgstr "Todas las páginas" + +#: wp-includes/class-wp-editor.php:743 +msgid "Updated." +msgstr "Actualizada." + +#: wp-includes/script-loader.php:89 +msgid "fullscreen" +msgstr "pantalla completa" + +#: wp-includes/class-wp-editor.php:707 +#: wp-includes/js/tinymce/langs/wp-langs.php:289 +msgid "Bold (Ctrl + B)" +msgstr "Negrita (Ctrl + B)" + +#: wp-includes/class-wp-editor.php:708 +#: wp-includes/js/tinymce/langs/wp-langs.php:290 +msgid "Italic (Ctrl + I)" +msgstr "Cursiva (Ctrl + I)" + +#: wp-includes/class-wp-editor.php:711 +#: wp-includes/js/tinymce/langs/wp-langs.php:298 +msgid "Ordered list (Alt + Shift + O)" +msgstr "Lista ordenada (Alt + Mayúsculas + O)" + +#: wp-includes/class-wp-editor.php:710 +#: wp-includes/js/tinymce/langs/wp-langs.php:297 +msgid "Unordered list (Alt + Shift + U)" +msgstr "Lista sin ordenar (Alt + Shift + U)" + +#: wp-includes/class-wp-editor.php:714 +#: wp-includes/js/tinymce/langs/wp-langs.php:305 +msgid "Insert/edit image (Alt + Shift + M)" +msgstr "Insertar/editar imagen (Alt + Mayúsculas + M)" + +#: wp-includes/class-wp-editor.php:716 +#: wp-includes/js/tinymce/langs/wp-langs.php:303 +msgid "Insert/edit link (Alt + Shift + A)" +msgstr "Insertar / editar enlace (Alt + Mayúsculas + A)" + +#: wp-includes/class-wp-editor.php:717 +#: wp-includes/js/tinymce/langs/wp-langs.php:304 +msgid "Unlink (Alt + Shift + S)" +msgstr "Desvincular (Alt + Shift + S)" + +#: wp-includes/comment-template.php:1687 +msgid "Pingback:" +msgstr "Pingback:" + +#: wp-includes/js/tinymce/wp-mce-help.php:232 +msgid "TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor released as Open Source under %sLGPL\tby Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances." +msgstr "TinyMCE es un editor Javascript HTML WYSIWYG basado en web e independiente de la plataforma, liberado como Código abierto bajo la licencia %sLGPL→ por Moxiecode Systems AB. Puede convertir campos u o tros elementos HTML en instancias del editor." + +#: wp-includes/js/tinymce/langs/wp-langs.php:44 +msgid "Indigo" +msgstr "Índigo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:43 +msgid "Navy Blue" +msgstr "Azul marino" + +#: wp-includes/js/tinymce/langs/wp-langs.php:41 +msgid "Dark green" +msgstr "Verde oscuro" + +#: wp-includes/js/tinymce/langs/wp-langs.php:55 +msgid "Amber" +msgstr "Ámbar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:48 +msgid "Olive" +msgstr "Verde oliva" + +#: wp-includes/js/tinymce/langs/wp-langs.php:265 +msgid "Words:" +msgstr "Palabras:" + +#: wp-includes/js/tinymce/langs/wp-langs.php:46 +msgid "Maroon" +msgstr "Granate" + +#: wp-includes/js/tinymce/langs/wp-langs.php:496 +msgid "Poster" +msgstr "Cartel" + +#: wp-includes/js/tinymce/langs/wp-langs.php:495 +msgid "Preload" +msgstr "Precarga" + +#: wp-includes/js/tinymce/langs/wp-langs.php:494 +msgid "Alternative source 2" +msgstr "Fuente alternativa 2" + +#: wp-includes/js/tinymce/langs/wp-langs.php:493 +msgid "Alternative source 1" +msgstr "Fuente alternativa 1" + +#: wp-includes/js/tinymce/langs/wp-langs.php:256 +msgid "Disc" +msgstr "Disco" + +#: wp-includes/js/tinymce/langs/wp-langs.php:254 +msgid "Upper roman" +msgstr "Romana superior" + +#: wp-includes/js/tinymce/langs/wp-langs.php:66 +msgid "Aqua" +msgstr "Agua" + +#: wp-includes/js/tinymce/langs/wp-langs.php:65 +msgid "Lime" +msgstr "Lima" + +#: wp-includes/js/tinymce/langs/wp-langs.php:62 +msgid "Magenta" +msgstr "Magenta" + +#: wp-includes/js/tinymce/langs/wp-langs.php:59 +msgid "Royal blue" +msgstr "Azul real" + +#: wp-includes/js/tinymce/langs/wp-langs.php:58 +msgid "Turquoise" +msgstr "Turquesa" + +#: wp-includes/js/tinymce/langs/wp-langs.php:56 +msgid "Yellow green" +msgstr "Verde amarillento" + +#: wp-includes/js/tinymce/langs/wp-langs.php:253 +msgid "Upper alpha" +msgstr "Alfa superior" + +#: wp-includes/js/tinymce/langs/wp-langs.php:252 +msgid "Lower roman" +msgstr "Romana inferior" + +#: wp-includes/js/tinymce/langs/wp-langs.php:39 +msgid "Burnt orange" +msgstr "Naranja quemado" + +#: wp-includes/js/tinymce/langs/wp-langs.php:173 +msgid "Paste is now in plain text mode. Click again to toggle back to regular paste mode." +msgstr "Pegar está ahora en modo de texto sin formato. Haz clic de nuevo para volver al modo de pegado normal." + +#: wp-includes/js/tinymce/langs/wp-langs.php:76 +msgid "Plum" +msgstr "Ciruela" + +#: wp-includes/js/tinymce/langs/wp-langs.php:31 +msgid "{#field} must be a number" +msgstr "{#field} debe ser un número" + +#: wp-includes/js/tinymce/langs/wp-langs.php:61 +msgid "Medium gray" +msgstr "Gris medio" + +#: wp-includes/js/tinymce/langs/wp-langs.php:57 +msgid "Sea green" +msgstr "Verde mar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:172 +msgid "Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode." +msgstr "Pegar está ahora en modo de texto sin formato. Haz clic de nuevo para volver al modo de pegado regular. Después de pegar algo se te devolverá al modo de pegado normal." + +#: wp-includes/js/tinymce/langs/wp-langs.php:492 +msgid "HTML5 Video Options" +msgstr "Opciones de vídeo HTML5" + +#: wp-includes/js/tinymce/langs/wp-langs.php:45 +msgid "Very dark gray" +msgstr "Gris muy oscuro" + +#: wp-includes/js/tinymce/langs/wp-langs.php:330 +msgid "Press ALT F10 for toolbar. Press ALT 0 for help." +msgstr "Pulsa ALT F10 para la barra de herramientas. Pulsa ALT 0 para ayuda." + +#: wp-includes/js/tinymce/langs/wp-langs.php:329 +#: wp-includes/js/tinymce/langs/wp-langs.php:386 +msgid "Accessibility Help" +msgstr "Ayuda sobre accesibilidad" + +#: wp-includes/js/tinymce/langs/wp-langs.php:387 +msgid "General Usage" +msgstr "Uso general" + +#: wp-includes/js/tinymce/langs/wp-langs.php:32 +msgid "{#field} must be a number greater than {#min}" +msgstr "{#field} debe ser un número mayor que {#min}" + +#: wp-includes/js/tinymce/langs/wp-langs.php:42 +msgid "Dark azure" +msgstr "Azur oscuro" + +#: wp-includes/js/tinymce/langs/wp-langs.php:40 +msgid "Dark olive" +msgstr "Verde oliva oscuro" + +#: wp-includes/js/tinymce/langs/wp-langs.php:251 +msgid "Lower greek" +msgstr "Griega inferior" + +#: wp-includes/js/tinymce/langs/wp-langs.php:250 +msgid "Lower alpha" +msgstr "Alfa inferior" + +#: wp-includes/js/tinymce/langs/wp-langs.php:240 +msgid "Learn word" +msgstr "Aprender palabra" + +#: wp-includes/js/tinymce/langs/wp-langs.php:248 +msgid "Types" +msgstr "Tipos" + +#: wp-includes/js/tinymce/langs/wp-langs.php:332 +msgid "Toolbar" +msgstr "Barra de herramientas" + +#: wp-includes/js/tinymce/langs/wp-langs.php:33 +msgid "{#field} must be a number or percentage" +msgstr "{#field} debe ser un número o porcentaje" + +#: wp-includes/js/tinymce/langs/wp-langs.php:257 +msgid "Square" +msgstr "Cuadrado" + +#: wp-includes/js/tinymce/langs/wp-langs.php:63 +msgid "Gold" +msgstr "Dorado" + +#: wp-includes/js/tinymce/langs/wp-langs.php:75 +msgid "Light sky blue" +msgstr "Azul cielo claro" + +#: wp-includes/js/tinymce/langs/wp-langs.php:255 +msgid "Circle" +msgstr "Círculo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:71 +msgid "Peach" +msgstr "Melocotón" + +#: wp-includes/js/tinymce/wp-mce-help.php:233 +msgid "Copyright © 2003-2011, Moxiecode Systems AB, All rights reserved." +msgstr "Derechos de copia © 2003-2011, Moxiecode Systems AB, Todos los derechos reservados." + +#: wp-includes/js/tinymce/langs/wp-langs.php:67 +msgid "Sky blue" +msgstr "Azul cielo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:261 +#: wp-includes/js/tinymce/langs/wp-langs.php:331 +msgid "Rich Text Area" +msgstr "Área de texto enriquecido" + +#: wp-includes/js/tinymce/langs/wp-langs.php:73 +msgid "Pale green" +msgstr "Verde pálido" + +#: wp-includes/js/tinymce/langs/wp-langs.php:72 +msgid "Light yellow" +msgstr "Amarillo claro" + +#: wp-includes/js/tinymce/langs/wp-langs.php:50 +msgid "Teal" +msgstr "Turquesa" + +#: wp-includes/js/tinymce/langs/wp-langs.php:74 +msgid "Pale cyan" +msgstr "Cian pálido" + +#: wp-includes/js/tinymce/langs/wp-langs.php:52 +msgid "Grayish blue" +msgstr "Azul grisáceo" + +#: wp-includes/class-http.php:141 +msgid "Destination directory for file streaming does not exist or is not writable." +msgstr "La carpeta de destino para cargar el archivo no existe o no tiene permisos de escritura." + +#: wp-includes/class-http.php:260 +msgid "There are no HTTP transports available which can complete the requested request." +msgstr "No hay medios de transporte HTTP disponibles que puedan completar la solicitud requerida." + +#: wp-includes/taxonomy.php:111 wp-includes/taxonomy.php:112 +msgctxt "post format" +msgid "Format" +msgstr "Formato" + +#: wp-content/plugins/akismet/admin.php:556 +msgid "Akismet has protected your site from %2$s spam comment already. " +msgid_plural "Akismet has protected your site from %2$s spam comments already. " +msgstr[0] "Akismet ha protegido su sitio de %2$s comentario de spam hasta ahora." +msgstr[1] "Akismet ha protegido su sitio de %2$s comentarios de spam hasta ahora." + +#: wp-content/plugins/akismet/admin.php:567 +msgid "There's %1$s comment in your spam queue right now." +msgid_plural "There are %1$s comments in your spam queue right now." +msgstr[0] "Hay %1$s comentario en la cola de spam en este momento." +msgstr[1] "Hay %1$s comentarios en la cola de spam en este momento." + +#: wp-content/plugins/akismet/admin.php:562 +msgid "Akismet blocks spam from getting to your blog. " +msgstr "Akismet bloquea el spam que llegue a tu sitio." + +#: wp-content/plugins/akismet/admin.php:208 +msgid "Sign up success! Please check your email for your Akismet API Key and enter it below." +msgstr "¡Regístro completado! Por favor, consulta en tu correo electrónico tu clave de API de Akismet y añádela debajo." + +#: wp-content/plugins/akismet/admin.php:440 +msgid "Flagged as spam by Akismet" +msgstr "Marcado como spam por Akismet" + +#: wp-content/plugins/akismet/admin.php:460 +msgid "History" +msgstr "Historial" + +#: wp-content/plugins/akismet/admin.php:336 +msgctxt "comments" +msgid "Spam" +msgstr "Spam" + +#: wp-content/plugins/akismet/admin.php:573 +msgid "There's nothing in your spam queue at the moment." +msgstr "En este momento no tienes nada en la cola de spam. " + +#: wp-content/plugins/akismet/admin.php:442 +msgid "Cleared by Akismet" +msgstr "Borrado por Akismet" + +#: wp-includes/class-wp-editor.php:870 +msgid "Enter the destination URL" +msgstr "Introduce la URL de destino" + +#: wp-includes/class-wp-editor.php:882 +msgid "Or link to existing content" +msgstr "O enlaza a contenido ya existente" + +#: wp-includes/query.php:140 wp-includes/query.php:161 +#: wp-includes/query.php:181 wp-includes/query.php:205 +#: wp-includes/query.php:229 wp-includes/query.php:253 +#: wp-includes/query.php:282 wp-includes/query.php:302 +#: wp-includes/query.php:322 wp-includes/query.php:342 +#: wp-includes/query.php:363 wp-includes/query.php:383 +#: wp-includes/query.php:413 wp-includes/query.php:442 +#: wp-includes/query.php:462 wp-includes/query.php:489 +#: wp-includes/query.php:509 wp-includes/query.php:529 +#: wp-includes/query.php:549 wp-includes/query.php:569 +#: wp-includes/query.php:598 wp-includes/query.php:625 +#: wp-includes/query.php:645 wp-includes/query.php:665 +#: wp-includes/query.php:685 wp-includes/query.php:705 +msgid "Conditional query tags do not work before the query is run. Before then, they always return false." +msgstr "Las etiquetas de las consultas condicionales no funcionan antes de ejecutar la consulta. Haciéndolo antes, siempre devuelven falso." + +#: wp-includes/ms-functions.php:991 +msgid "The user is already active." +msgstr "El usuario ya esta activo." + +#: wp-includes/functions.php:3049 +msgid "%1$s was called incorrectly. %2$s %3$s" +msgstr "%1$s se llamó incorrectamente. %2$s %3$s" + +#: wp-includes/functions.php:3047 +msgid "(This message was added in version %s.)" +msgstr "(Este mensaje se añadió en la versión %s.)" + +#: wp-includes/user.php:100 +msgid "ERROR: The password you entered for the username %1$s is incorrect. Lost your password?" +msgstr "ERROR: La contraseña que introdujo para el usuario %1$s no es correcta. Has perdido tu contraseña?" + +#: wp-includes/class-wp-xmlrpc-server.php:5281 +msgid "Sorry, you cannot publish this post." +msgstr "Perdona, pero no puedes publicar esta entrada." + +#: wp-content/plugins/akismet/admin.php:26 +msgid "Comment History" +msgstr "Historial de comentarios" + +#: wp-content/plugins/akismet/admin.php:14 +msgid "Akismet %s requires WordPress 3.0 or higher." +msgstr "Akismet %s necesita WordPress 3.0 o superior para funcionar." + +#: wp-content/plugins/akismet/admin.php:473 +msgid "%s approved" +msgid_plural "%s approved" +msgstr[0] "%s aprobado" +msgstr[1] "%s aprobados" + +#: wp-content/plugins/akismet/admin.php:636 +msgid "%s reported this comment as not spam" +msgstr "%s no considera este comentario como spam" + +#: wp-content/plugins/akismet/akismet.php:292 +msgid "Akismet caught this comment as spam" +msgstr "Akismet considera que este comentario es spam" + +#: wp-content/plugins/akismet/admin.php:687 +msgid "%s reported this comment as spam" +msgstr "%s considera que este comentario es spam" + +#: wp-content/plugins/akismet/akismet.php:541 +msgid "Akismet caught this comment as spam during an automatic retry." +msgstr "Akismet ha realizado una revisión auntomática y considera que este comentario es spam" + +#: wp-content/plugins/akismet/admin.php:288 +msgid "Re-trying" +msgstr "Intentándolo de nuevo" + +#: wp-content/plugins/akismet/admin.php:228 +msgid "Auto-delete spam submitted on posts more than a month old." +msgstr "Autoborrado de spam realizado para entradas con más de un mes de antiguedad." + +#: wp-content/plugins/akismet/admin.php:181 +msgid "Your WordPress home URL %s is invalid. Please fix the home option." +msgstr "La URL de la página de inicio de tu WordPress %s no es válida. Por favor, arregla la opción de página de inicio." + +#: wp-content/plugins/akismet/admin.php:229 +msgid "Show the number of comments you've approved beside each comment author." +msgstr "Mostrar el número de comentarios que has aprobado junto al autor de cada comentario." + +#: wp-content/plugins/akismet/admin.php:735 +msgid "%s changed the comment status to %s" +msgstr "%s cambió el estado del comentario a %s" + +#: wp-content/plugins/akismet/akismet.php:294 +#: wp-content/plugins/akismet/akismet.php:302 +msgid "Comment status was changed to %s" +msgstr "El estado del comentario se cambió a %s" + +#: wp-content/plugins/akismet/akismet.php:543 +msgid "Akismet cleared this comment during an automatic retry." +msgstr "Akismet borró este comentario durante una revisión automática." + +#: wp-content/plugins/akismet/akismet.php:297 +msgid "Akismet cleared this comment" +msgstr "Akismet borró este comentario" + +#: wp-content/plugins/akismet/akismet.php:300 +msgid "Comment was caught by wp_blacklist_check" +msgstr "Comentario pillado por wp_blacklist_check" + +#: wp-content/plugins/akismet/admin.php:288 +msgid "Accessible" +msgstr "Accesible" + +#: wp-content/plugins/akismet/akismet.php:307 +msgid "Akismet was unable to check this comment (response: %s), will automatically retry again later." +msgstr "Akismet fue incapaz de revisar este comentario (respuesta: %s), se volverá a intentar más tarde." + +#: wp-includes/pluggable.php:1124 +msgid "Permalink: %s" +msgstr "Enlace permanente: %s" + +#: wp-includes/post-formats.php:92 +msgctxt "Post format" +msgid "Standard" +msgstr "Estándar" + +#: wp-includes/post.php:1223 +msgid "Post types cannot exceed 20 characters in length" +msgstr "Los tipos de entradas no pueden exceder de 20 caracteres de longitud" + +#: wp-signup.php:112 +msgid "Your address will be %s." +msgstr "Tu dirección será %s." + +#: wp-signup.php:111 +msgid "domain" +msgstr "dominio" + +#: wp-includes/admin-bar.php:596 +msgctxt "admin bar menu group label" +msgid "Add New" +msgstr "Añadir nueva" + +#: wp-includes/post-formats.php:101 +msgctxt "Post format" +msgid "Audio" +msgstr "Audio" + +#: wp-includes/class-wp-xmlrpc-server.php:4102 +#: wp-includes/class-wp-xmlrpc-server.php:4398 +msgid "Invalid post format" +msgstr "Formato de entrada no válido" + +#: wp-includes/pluggable.php:1116 wp-includes/pluggable.php:1218 +msgid "Whois : http://whois.arin.net/rest/ip/%s" +msgstr "Whois : http://whois.arin.net/rest/ip/%s" + +#: wp-includes/class-wp-editor.php:878 +msgid "Open link in a new window/tab" +msgstr "Abrir enlace en una nueva ventana/pestaña" + +#: wp-includes/class-wp-editor.php:898 +msgid "No search term specified. Showing recent items." +msgstr "" +"No se ha indicado ningún término de búsqueda. Se mostrarán\n" +" los objetos más recientes." + +#: wp-includes/plugin.php:700 +msgid "Only a static class method or function can be used in an uninstall hook." +msgstr "Sólo una función o método de la clase estática pueden ser usados en un gancho de desinstalación." + +#: wp-includes/post.php:2639 +msgid "Passing an integer number of posts is deprecated. Pass an array of arguments instead." +msgstr "Pasar un número entero de entradas es obsoleto. Pasa una matriz de argumentos en su lugar." + +#: wp-includes/post-formats.php:93 +msgctxt "Post format" +msgid "Aside" +msgstr "Minientrada" + +#: wp-includes/post-formats.php:94 +msgctxt "Post format" +msgid "Chat" +msgstr "Chat" + +#: wp-includes/post-formats.php:95 +msgctxt "Post format" +msgid "Gallery" +msgstr "Galería" + +#: wp-includes/post-formats.php:96 +msgctxt "Post format" +msgid "Link" +msgstr "Enlace" + +#: wp-includes/post-formats.php:97 +msgctxt "Post format" +msgid "Image" +msgstr "Imagen" + +#: wp-includes/post-formats.php:98 +msgctxt "Post format" +msgid "Quote" +msgstr "Cita" + +#: wp-includes/post-formats.php:99 +msgctxt "Post format" +msgid "Status" +msgstr "Estado" + +#: wp-includes/post-formats.php:100 +msgctxt "Post format" +msgid "Video" +msgstr "Vídeo" + +#: wp-includes/post.php:1495 +msgid "No pages found in Trash." +msgstr "Ninguna página encontrada en la papelera." + +#: wp-includes/post.php:1494 +msgid "No pages found." +msgstr "No se encontraron páginas." + +#: wp-includes/post.php:1495 +msgid "No posts found in Trash." +msgstr "Ningún post encontrado en la papelera." + +#: wp-includes/admin-bar.php:472 +msgid "Shortlink" +msgstr "Enlace corto" + +#: wp-includes/class-wp-xmlrpc-server.php:1106 +#: wp-includes/class-wp-xmlrpc-server.php:3290 +#: wp-includes/class-wp-xmlrpc-server.php:4285 +#: wp-includes/class-wp-xmlrpc-server.php:4600 +msgid "Invalid attachment ID." +msgstr "ID de adjunto no válido." + +#: wp-includes/registration-functions.php:7 wp-includes/registration.php:7 +msgid "This file no longer needs to be included." +msgstr "Ya no es necesario incluir este archivo." + +#: wp-login.php:521 +msgid "Please enter your username or email address. You will receive a link to create a new password via email." +msgstr "Por favor, escribe tu nombre de usuario o tu correo electrónico. Recibirás un enlace para crear la contraseña nueva por correo electrónico." + +#: wp-includes/default-widgets.php:283 wp-includes/default-widgets.php:516 +msgid "Display as dropdown" +msgstr "Mostrar como desplegable" + +#: wp-includes/class-wp-xmlrpc-server.php:427 +msgid "Large size image height" +msgstr "Altura de la imagen de tamaño grande" + +#: wp-includes/class-wp-xmlrpc-server.php:412 +msgid "Medium size image width" +msgstr "Achura de la imagen de tamaño medio" + +#: wp-includes/class-wp-xmlrpc-server.php:417 +msgid "Medium size image height" +msgstr "Altura de la imagen de tamaño medio" + +#: wp-includes/class-wp-xmlrpc-server.php:422 +msgid "Large size image width" +msgstr "Tamaño grande de ancho de imagen" + +#: wp-includes/class-wp-xmlrpc-server.php:407 +msgid "Crop thumbnail to exact dimensions" +msgstr "Recortar la miniatura a sus dimensiones exactas" + +#: wp-includes/class-wp-xmlrpc-server.php:402 +msgid "Thumbnail Height" +msgstr "Altura de la miniatura" + +#: wp-includes/class-wp-xmlrpc-server.php:397 +msgid "Thumbnail Width" +msgstr "Anchura de la miniatura" + +#: wp-includes/script-loader.php:342 +msgid "No matches found." +msgstr "No se han encontrado coincidencias." + +#: wp-login.php:608 +msgid "New password" +msgstr "Nueva contraseña" + +#: wp-login.php:612 +msgid "Confirm new password" +msgstr "Confirma la nueva contraseña" + +#: wp-login.php:363 +msgid "To reset your password, visit the following address:" +msgstr "Para restaurar la contraseña, visita la siguiente dirección:" + +#: wp-login.php:601 wp-login.php:620 +msgid "Reset Password" +msgstr "Restaurar contraseña" + +#: wp-login.php:579 +msgid "The passwords do not match." +msgstr "Las contraseñas no coinciden." + +#: wp-login.php:593 +msgid "Password Reset" +msgstr "Contraseña restaurada" + +#: wp-login.php:593 +msgid "Your password has been reset." +msgstr "Tu contraseña ha sido restaurada." + +#: wp-login.php:359 +msgid "Someone requested that the password be reset for the following account:" +msgstr "Alguien ha solicitado que sea restaurada la contraseña de la siguiente cuenta:" + +#: wp-login.php:362 +msgid "If this was a mistake, just ignore this email and nothing will happen." +msgstr "Si ha sido un error, ignora este correo y no pasará nada." + +#: wp-login.php:601 +msgid "Enter your new password below." +msgstr "Introduce tu nueva contraseña abajo." + +#: wp-includes/post-formats.php:70 +msgid "Invalid post" +msgstr "Entrada no válida" + +#: wp-includes/admin-bar.php:247 +msgid "Edit My Profile" +msgstr "Editar mi perfil" + +#: wp-includes/admin-bar.php:204 +msgid "My Account" +msgstr "Mi cuenta" + +#: wp-includes/admin-bar.php:438 +msgid "Manage Comments" +msgstr "Gestionar comentarios" + +#: wp-content/plugins/akismet/admin.php:460 +#: wp-content/plugins/akismet/admin.php:468 +msgid "View comment history" +msgstr "Ver histórico de comentarios" + +#: wp-content/plugins/akismet/admin.php:188 +#: wp-content/plugins/akismet/admin.php:500 +#: wp-content/plugins/akismet/admin.php:919 +#: wp-content/plugins/akismet/admin.php:922 +msgid "Akismet" +msgstr "Akismet" + +#: wp-content/plugins/akismet/admin.php:813 +msgid "Akismet was unable to re-check this comment (response: %s)" +msgstr "Akismet ha sido incapaz de revisar de nuevo el comentario (respuesta: %s)" + +#: wp-content/plugins/akismet/admin.php:446 +msgid "Flagged as spam by %s" +msgstr "Marcado como spam por %s" + +#: wp-content/plugins/akismet/admin.php:804 +msgid "Akismet re-checked and caught this comment as spam" +msgstr "Akismet ha revisado de nuevo el comentario y lo considera spam" + +#: wp-content/plugins/akismet/admin.php:14 +msgid "Please upgrade WordPress to a current version, or downgrade to version 2.4 of the Akismet plugin." +msgstr "Por favor, actualiza WordPress a la versión actual, o vuelve a la version 2.4 el plugin de Akismet" + +#: wp-content/plugins/akismet/admin.php:448 +msgid "Un-spammed by %s" +msgstr "Desmarcado como spam por %s" + +#: wp-content/plugins/akismet/admin.php:809 +msgid "Akismet re-checked and cleared this comment" +msgstr "Akismet revisó de nuevo este comentario y lo ha marcado como bueno" + +#: wp-includes/ms-functions.php:465 wp-includes/ms-functions.php:618 +msgid "Only lowercase letters (a-z) and numbers are allowed." +msgstr "Sólo se permiten minúsculas (a-z) y números." + +#: wp-includes/query.php:2188 +msgid "\"caller_get_posts\" is deprecated. Use \"ignore_sticky_posts\" instead." +msgstr "\"caller_get_posts\" está obsoleto. Utilice \"ignore_sticky_posts\" en su lugar." + +#: wp-includes/taxonomy.php:89 +msgid "New Link Category Name" +msgstr "Nuevo nombre de categoría de enlaces" + +#: wp-includes/taxonomy.php:88 +msgid "Add New Link Category" +msgstr "Añadir nueva categoría de enlaces" + +#: wp-includes/taxonomy.php:87 +msgid "Update Link Category" +msgstr "Actualizar categoría de enlaces" + +#: wp-includes/taxonomy.php:85 +msgid "All Link Categories" +msgstr "Todas las categorías de enlaces" + +#: wp-includes/taxonomy.php:83 +msgid "Search Link Categories" +msgstr "Buscar categorías de enlaces" + +#: wp-includes/taxonomy.php:82 +msgid "Link Category" +msgstr "Categoría de enlaces" + +#: wp-includes/admin-bar.php:358 +msgid "Network Admin" +msgstr "Administrador de la red" + +#: wp-includes/wp-db.php:836 +msgid "" +"

      Can’t select database

      \n" +"

      We were able to connect to the database server (which means your username and password is okay) but not able to select the %1$s database.

      \n" +"
        \n" +"
      • Are you sure it exists?
      • \n" +"
      • Does the user %2$s have permission to use the %1$s database?
      • \n" +"
      • On some systems the name of your database is prefixed with your username, so it would be like username_%1$s. Could that be the problem?
      • \n" +"
      \n" +"

      If you don't know how to set up a database you should contact your host. If all else fails you may find help at the WordPress Support Forums.

      " +msgstr "" +"

      No se pudo elegir base de datos

      \n" +"

      Hemos podido conectar con el servidor de la bases de datos (lo que significa que tu nombre de usuario y la contraseña están correctos) pero no se pudo elegir la base de datos %1$s.

      \n" +"
        \n" +"
      • ¿Estás seguro que existe?
      • \n" +"
      • ¿El usuario %2$s tiene permiso para utilizar la base de datos %1$?
      • \n" +"
      • En algunos sistemas el nombre de la base de datos es el prefijo con el nombre de usuario, que sería como username_%1$s. ¿Podría ser ésto el problema?
      • \n" +"
      \n" +"

      Si no sabes cómo configurar una base de datos debes ponerte en contacto con el administrador de su hosting. Si todo lo demás falla puedes encontrar ayuda en los Foros de Soporte de WordPress.

      " + +#: wp-includes/ms-load.php:254 +msgid "Read the bug report page. Some of the guidelines there may help you figure out what went wrong." +msgstr "Lee la página de errores. Algunas de las guías que hay ahí pueden ayudarte a hacerte una idea sobre qué ha ido mal." + +#: wp-includes/ms-functions.php:867 wp-includes/ms-functions.php:952 +msgid "[%1$s] Activate %2$s" +msgstr "[%1$s] Activar %2$s" + +#: wp-includes/ms-load.php:227 +msgid "No site defined on this host. If you are the owner of this site, please check Debugging a WordPress Network for help." +msgstr "No se ha definido un sitio para este servidor. Si eres el propietario de este sitio, por favor, consulta Arreglando una red de WordPress para tener ayuda." + +#: wp-content/plugins/akismet/widget.php:67 +msgid "Spam Blocked" +msgstr "Spam bloqueado" + +#: wp-content/plugins/akismet/admin.php:323 +msgid "You must enter your Akismet API key for it to work." +msgstr "Debes introducir tu clave de API de Akismet para que funcione." + +#: wp-content/plugins/akismet/admin.php:217 +msgid "Akismet API Key" +msgstr "Clave de API de Akismet" + +#: wp-includes/load.php:107 +msgid "Your server is running PHP version %1$s but WordPress %2$s requires at least %3$s." +msgstr "Tu servidor está ejecutando la versión %1$s de PHP, pero WordPess %2$s necesita, al menos, la versión %3$s." + +#: wp-includes/pluggable.php:1199 +msgid "A new trackback on the post \"%s\" is waiting for your approval" +msgstr "Un nuevo trackback a la entrada \"%s\" está esperando tu aprobación" + +#: wp-includes/ms-load.php:248 +msgid "If you are the owner of this network please check that MySQL is running properly and all tables are error free." +msgstr "Si eres el propietario de esta red comprueba que MySQL se está ejecutando adecuadamente y que niguna de las tablas tiene errores." + +#: wp-includes/ms-load.php:247 +msgid "If your site does not display, please contact the owner of this network." +msgstr "Si tu sitio no se muestra contacta con el propietario de esta red." + +#: wp-includes/theme-compat/comments.php:26 +msgid "One Response to %2$s" +msgid_plural "%1$s Responses to %2$s" +msgstr[0] "Una Respuesta a %2$s" +msgstr[1] "%1$s Respuestas a %2$s" + +#: wp-signup.php:664 +msgctxt "Multisite active signup type" +msgid "user" +msgstr "usuario" + +#: wp-signup.php:663 +msgctxt "Multisite active signup type" +msgid "blog" +msgstr "blog" + +#: wp-signup.php:662 +msgctxt "Multisite active signup type" +msgid "none" +msgstr "ninguno" + +#: wp-signup.php:661 +msgctxt "Multisite active signup type" +msgid "all" +msgstr "todo" + +#: wp-includes/default-widgets.php:1104 +msgid "Custom Menu" +msgstr "Menú personalizado" + +#: wp-includes/pluggable.php:1101 +msgid "New pingback on your post \"%s\"" +msgstr "Nuevo pingback en tu entrada \"%s\"" + +#: wp-includes/pluggable.php:1206 +msgid "A new pingback on the post \"%s\" is waiting for your approval" +msgstr "Un nuevo pingback a la entada \"%s\" está esperando tu aprobación" + +#: wp-includes/pluggable.php:1213 +msgid "A new comment on the post \"%s\" is waiting for your approval" +msgstr "Un nuevo comentario a la entrada \"%s\" está esperando tu aprobación" + +#: wp-includes/pluggable.php:1091 +msgid "New trackback on your post \"%s\"" +msgstr "Nuevo trackback a tu entrada \"%s\"" + +#: wp-includes/pluggable.php:1111 +msgid "New comment on your post \"%s\"" +msgstr "Nuevo comentario a tu entrada \"%s\"" + +#: wp-includes/theme-compat/sidebar.php:74 +msgid "XFN" +msgstr "XFN" + +#: wp-includes/theme-compat/sidebar.php:74 +msgid "XHTML Friends Network" +msgstr "Red de amigos de XHTML" + +#: wp-includes/theme-compat/sidebar.php:73 +msgid "Valid XHTML" +msgstr "Valida XHTML" + +#: wp-includes/theme-compat/footer.php:19 +msgid "%1$s and %2$s." +msgstr "%1$s y %2$s." + +#: wp-includes/theme-compat/sidebar.php:38 +msgid "F, Y" +msgstr "j F Y" + +#: wp-includes/theme-compat/sidebar.php:47 +msgid "You are currently browsing the %2$s blog archives." +msgstr "Estás navegando por el archivo de %2$s." + +#: wp-includes/theme-compat/sidebar.php:38 +msgid "You are currently browsing the %2$s blog archives for %3$s." +msgstr "Actualmente estás viendo el archivo del sitio %2$s de %3$s." + +#: wp-includes/theme-compat/comments.php:49 +msgid "Comments are closed." +msgstr "Los comentarios están cerrados." + +#: wp-includes/theme-compat/sidebar.php:41 +msgid "You are currently browsing the %2$s blog archives for the year %3$s." +msgstr "Actualmente estás viendo el archivo del sitio %2$s del año %3$s." + +#: wp-includes/theme-compat/comments.php:72 +msgid "Logged in as %2$s." +msgstr "Identificado como %2$s." + +#: wp-includes/theme-compat/comments-popup.php:71 +msgid "Logged in as %2$s. Log out »" +msgstr "Identificado como %2$s. Salir »" + +#: wp-includes/theme-compat/comments.php:91 +msgid "Submit Comment" +msgstr "Enviar comentario" + +#: wp-includes/theme-compat/footer.php:17 +msgid "%1$s is proudly powered by %2$s" +msgstr "%1$s funciona gracias a %2$s" + +#: wp-includes/theme-compat/comments-popup.php:85 +msgid "URL" +msgstr "URL" + +#: wp-includes/theme-compat/comments-popup.php:90 +msgid "Your Comment" +msgstr "Tu comentario" + +#: wp-includes/theme-compat/comments-popup.php:98 +msgid "Say It!" +msgstr "Enviar" + +#: wp-includes/theme-compat/comments-popup.php:108 +msgid "Close this window." +msgstr "Cerrar esta ventana." + +#: wp-includes/theme-compat/comments-popup.php:114 +msgid "Sorry, no posts matched your criteria." +msgstr "Lo siento, no hay nada que se ajuste a lo que buscas." + +#: wp-includes/theme-compat/comments-popup.php:118 +msgid "Powered by WordPress" +msgstr "Gestionado con WordPress" + +#: wp-includes/theme-compat/comments.php:72 +msgid "Log out of this account" +msgstr "Salir de esta cuenta" + +#: wp-includes/theme-compat/comments.php:72 +msgid "Log out »" +msgstr "Salir »" + +#: wp-includes/theme-compat/comments.php:80 +msgid "Mail (will not be published)" +msgstr "Correo electrónico (no será publicado)" + +#: wp-includes/theme-compat/comments.php:87 +msgid "XHTML: You can use these tags: %s" +msgstr "XHTML: Puedes usar estas etiquetas: %s" + +#: wp-includes/theme-compat/sidebar.php:44 +msgid "You have searched the %2$s blog archives for ‘%3$s’. If you are unable to find anything in these search results, you can try one of these links." +msgstr "Has buscado en el archivo del sitio %2$s el término ‘%3$s’. Si no te es posible encontrar nada en los resultados, puedes probar uno de estos enlaces." + +#: wp-includes/theme-compat/sidebar.php:35 +msgid "l, F jS, Y" +msgstr "j F Y" + +#: wp-includes/theme-compat/sidebar.php:35 +msgid "You are currently browsing the %2$s blog archives for the day %3$s." +msgstr "Actualmente estás navegando por el archivo del sitio %2$s del día %3$s." + +#: wp-includes/theme-compat/sidebar.php:32 +msgid "You are currently browsing the archives for the %s category." +msgstr "Actualmente estás navegando por el archivo de la categoría %s" + +#: wp-includes/theme-compat/footer.php:20 +msgid "%d queries. %s seconds." +msgstr "%d consultas. %s segundos." + +#: wp-includes/theme-compat/footer.php:19 +msgid "Comments (RSS)" +msgstr "Comentarios (RSS)" + +#: wp-includes/theme-compat/footer.php:19 +msgid "Entries (RSS)" +msgstr "Artículos (RSS)" + +#: wp-includes/theme-compat/comments-popup.php:67 +msgid "Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: %s" +msgstr "Las líneas y párrafos saltan automáticamente, nunca se mostrarán los correos electrónicos. HTMLpermitido: %s" + +#: wp-includes/theme-compat/comments.php:17 +msgid "This post is password protected. Enter the password to view comments." +msgstr "Esta entrada está protegida. Para verla, escribe la contraseña:" + +#: wp-includes/theme-compat/sidebar.php:73 +msgid "This page validates as XHTML 1.0 Transitional" +msgstr "Esta página valida como XHTML 1.0 transicional" + +#: wp-includes/theme-compat/comments-popup.php:103 +msgid "Sorry, the comment form is closed at this time." +msgstr "Lo siento, el formulario de comentarios está cerrado en este momento." + +#: wp-includes/theme-compat/comments-popup.php:14 +msgid "%1$s - Comments on %2$s" +msgstr "%1$s - Comentarios en %2$s" + +#: wp-includes/theme-compat/comments-popup.php:35 +msgid "RSS feed for comments on this post." +msgstr "RSS feed para los comentarios de esta entrada." + +#: wp-includes/theme-compat/comments-popup.php:38 +msgid "The URL to TrackBack this entry is: %s" +msgstr "La URL para realizar un TrackBack a esta entrada es: %s" + +#: wp-includes/theme-compat/comments-popup.php:56 +msgid "by %1$s — %2$s @ %4$s" +msgstr "por %1$s — %2$s @ %4$s" + +#: wp-includes/theme-compat/comments-popup.php:66 +msgid "Leave a comment" +msgstr "Deja un comentario" + +#: wp-includes/taxonomy.php:477 +msgid "Choose from the most used tags" +msgstr "Elige entre las etiquetas más utilizadas" + +#: wp-includes/comment-template.php:2002 +msgid "You may use these HTML tags and attributes: %s" +msgstr "Puedes usar las siguientes etiquetas y atributos HTML: %s" + +#: wp-includes/taxonomy.php:464 +msgctxt "taxonomy singular name" +msgid "Category" +msgstr "Categoría" + +#: wp-includes/taxonomy.php:465 +msgid "Search Tags" +msgstr "Buscar etiquetas" + +#: wp-includes/taxonomy.php:466 +msgid "Popular Tags" +msgstr "Etiquetas populares" + +#: wp-includes/taxonomy.php:474 +msgid "New Category Name" +msgstr "Nombre de la nueva categoría" + +#: wp-includes/taxonomy.php:474 +msgid "New Tag Name" +msgstr "Nombre de la nueva etiqueta" + +#: wp-includes/taxonomy.php:473 +msgid "Add New Category" +msgstr "Añadir nueva categoría" + +#: wp-includes/taxonomy.php:473 +msgid "Add New Tag" +msgstr "Añadir nueva etiqueta" + +#: wp-includes/taxonomy.php:472 +msgid "Update Tag" +msgstr "Etiqueta actualizada" + +#: wp-includes/taxonomy.php:469 +msgid "Parent Category:" +msgstr "Categoría superior:" + +#: wp-includes/taxonomy.php:468 +msgid "Parent Category" +msgstr "Categoría superior" + +#: wp-includes/taxonomy.php:467 +msgid "All Tags" +msgstr "Todas las etiquetas" + +#: wp-includes/taxonomy.php:463 +msgctxt "taxonomy general name" +msgid "Categories" +msgstr "Categorías" + +#: wp-signup.php:709 +msgid "Sorry, new registrations are not allowed at this time." +msgstr "Disculpa, los nuevos registros están deshabilitados." + +#: wp-signup.php:502 wp-signup.php:632 +msgid "Check your inbox at %s and click the link given." +msgstr "Comprueba la bandeja de entrada de %s y haz clic en el enlace que encontrarás." + +#: wp-signup.php:638 +msgid "Wait a little longer. Sometimes delivery of email can be delayed by processes outside of our control." +msgstr "Espera un poco más. Hay veces, que el correo electrónico puede tardar en salir, por razones que escapan a nuestro control." + +#: wp-signup.php:639 +msgid "Check the junk or spam folder of your email client. Sometime emails wind up there by mistake." +msgstr "Comprueba la carpeta de correo basura, correo no deseado o spam de tu cliente de correo electrónico o correo web. A veces los correos electrónicos acaban ahí por equivocación." + +#: wp-signup.php:667 +msgid "Greetings Site Administrator! You are currently allowing “%s” registrations. To change or disable registration go to your Options page." +msgstr "¡Felicidades administrador del sitio! Ahora ya permites registros de “%s”. Para cambiarlo o desactivar los registros ve a tu página de opciones." + +#: wp-signup.php:191 +msgid "We send your registration email to this address. (Double-check your email address before continuing.)" +msgstr "Enviaremos los datos de registro a esta dirección de correo electrónico. Comprueba bien esta dirección antes de continuar." + +#: wp-includes/post.php:1493 +msgid "Search Pages" +msgstr "Buscar páginas" + +#: wp-includes/post.php:1489 +msgid "Add New Post" +msgstr "Añadir nueva entrada" + +#: wp-includes/post.php:1496 +msgid "Parent Page:" +msgstr "Página superior:" + +#: wp-includes/post.php:1486 +msgctxt "post type general name" +msgid "Posts" +msgstr "Entradas" + +#: wp-includes/post.php:1490 +msgid "Edit Page" +msgstr "Editar página" + +#: wp-includes/post.php:1493 +msgid "Search Posts" +msgstr "Buscar entradas" + +#: wp-includes/post.php:1489 +msgid "Add New Page" +msgstr "Añadir nueva página" + +#: wp-includes/post.php:1486 +msgctxt "post type general name" +msgid "Pages" +msgstr "Páginas" + +#: wp-includes/post.php:1487 +msgctxt "post type singular name" +msgid "Page" +msgstr "Página" + +#: wp-includes/post.php:1487 +msgctxt "post type singular name" +msgid "Post" +msgstr "Entrada" + +#: wp-includes/ms-default-constants.php:126 +msgid "The constant VHOST is deprecated. Use the boolean constant SUBDOMAIN_INSTALL in wp-config.php to enable a subdomain configuration. Use is_subdomain_install() to check whether a subdomain configuration is enabled." +msgstr "La constante VHOST está obsoleta. Usa la constante booleana/lógica SUBDOMAIN_INSTALL en wp-config.php para habilitar la configuración de subdominios. Usa is_subdomain_install() para comprobar si la configuración de subdominios está activada." + +#: wp-includes/ms-default-constants.php:128 +msgid "Conflicting values for the constants VHOST and SUBDOMAIN_INSTALL. The value of SUBDOMAIN_INSTALL will be assumed to be your subdomain configuration setting." +msgstr "Hay valores en conflicto para las constantes VHOST y SUBDOMAIN_INSTALL. Se asumirá que el valor de la configuración de subdominio es SUBDOMAIN_INSTALL." + +#: wp-includes/user.php:1671 +msgid "ERROR: This username is invalid because it uses illegal characters. Please enter a valid username." +msgstr "ERROR: Este nombre de usuario no es válido, ya que usa caracteres no permitidos. Por favor, introduce un nombre de usuario válido." + +#: wp-includes/comment-template.php:1986 +msgid "Required fields are marked %s" +msgstr "Los campos necesarios están marcados %s" + +#: wp-includes/theme-compat/comments-popup.php:10 +#: wp-includes/theme-compat/comments.php:10 +#: wp-includes/theme-compat/footer.php:10 +#: wp-includes/theme-compat/header.php:10 +#: wp-includes/theme-compat/sidebar.php:10 +msgid "Please include a %1$s template in your theme." +msgstr "Por favor, incluye la plantilla %1$s en tu tema" + +#: wp-includes/theme-compat/comments-popup.php:10 +#: wp-includes/theme-compat/comments.php:10 +#: wp-includes/theme-compat/footer.php:10 +#: wp-includes/theme-compat/header.php:10 +#: wp-includes/theme-compat/sidebar.php:10 +msgid "Theme without %1$s" +msgstr "Tema sin %1$s" + +#: wp-includes/ms-load.php:252 +msgid "Could not find site %1$s. Searched for table %2$s in database %3$s. Is that right?" +msgstr "No podemos encontrar el sitio %1$s. Buscamos la tabla %2$sen la base de datos %3$s. ¿Es correcto?" + +#: wp-includes/general-template.php:452 +msgid "The %s option is deprecated for the family of bloginfo() functions." +msgstr "La opción %s es obsoleta, ya no se utiliza en la familia de funciones bloginfo()." + +#: wp-includes/general-template.php:452 +msgid "Use the %s option instead." +msgstr "Usa la opción %s en su lugar." + +#: wp-content/plugins/akismet/admin.php:252 +msgid "Your web host or server administrator has disabled PHP's fsockopen or gethostbynamel functions. Akismet cannot work correctly until this is fixed. Please contact your web host or firewall administrator and give them this information about Akismet's system requirements." +msgstr "Tu servidor tiene desactivada la función fsockopen o la función gethostbynamel de PHP. Akismet no puede funcionar correctamente si esto está desactivado. Por favor, ponte en contacto con tu proveedor e infórmales sobre los requisitos de Akismet." + +#: wp-includes/ms-load.php:250 +msgid "Database tables are missing. This means that MySQL is not running, WordPress was not installed properly, or someone deleted %s. You really should look at your database now." +msgstr "Se han perdido las tablas de la base de datos. Esto quiere decir que MySQL no está funcionando, WordPress no ha sido instalado correctamente, o alguien ha eliminado %s. Deberías revisar tu base de datos ahora mismo." + +#: wp-includes/class-wp-xmlrpc-server.php:3711 +msgid "Sorry, you do not have access to user data on this site." +msgstr "Disculpa, no tienes acceso a los datos de los usuarios de este sitio." + +#: wp-includes/class-wp-xmlrpc-server.php:1022 +#: wp-includes/class-wp-xmlrpc-server.php:3879 +msgid "Sorry, you are not allowed to post on this site." +msgstr "Disculpa, no tienes autorización para publicar en este sitio." + +#: wp-includes/class-wp-xmlrpc-server.php:4076 +#: wp-includes/class-wp-xmlrpc-server.php:4089 +#: wp-includes/class-wp-xmlrpc-server.php:4094 +msgid "Sorry, you are not allowed to publish posts on this site." +msgstr "Disculpa, no tienes autorización para publicar entradas en este sitio." + +#: wp-includes/class-wp-xmlrpc-server.php:4883 +#: wp-includes/class-wp-xmlrpc-server.php:5082 +msgid "Sorry, you must be able to edit posts on this site in order to view categories." +msgstr "Disculpa, para ver las categorías tienes que estar autorizado para editar entradas en este sitio." + +#: wp-includes/class-wp-xmlrpc-server.php:4065 +msgid "Sorry, you are not allowed to publish pages on this site." +msgstr "Disculpa, no tienes autorización para publicar páginas en este sitio." + +#: wp-includes/ms-functions.php:663 wp-includes/ms-functions.php:1144 +msgid "Sorry, that site already exists!" +msgstr "Disculpa, este sitio ya existe." + +#: wp-includes/ms-functions.php:843 +msgid "" +"To activate your blog, please click the following link:\n" +"\n" +"%s\n" +"\n" +"After you activate, you will receive *another email* with your login.\n" +"\n" +"After you activate, you can visit your site here:\n" +"\n" +"%s" +msgstr "" +"Para activar tu sitio haz clic en el siguiente enlace:\n" +"\n" +"%s\n" +"\n" +"Después de activarlo recibirás *otro correo electrónico* con tus datos de acceso.\n" +"\n" +"Después de activarlo, podrás visitar tu sitio aquí:\n" +"\n" +"%s" + +#: wp-includes/ms-functions.php:1230 +msgid "New Site Registration: %s" +msgstr "Nuevo sitio registrado: %s" + +#: wp-includes/ms-functions.php:627 +msgid "Sorry, site names may not contain the character “_”!" +msgstr "¡Lo siento, el nombre del sitio no puede contener el carácter “_”!" + +#: wp-includes/ms-functions.php:1511 +msgid "New %1$s Site: %2$s" +msgstr "Nuevo sitio en %1$s: %2$s" + +#: wp-includes/ms-functions.php:993 +msgid "The site is already active." +msgstr "El sitio ya está activado." + +#: wp-includes/class-wp-xmlrpc-server.php:2520 +#: wp-includes/class-wp-xmlrpc-server.php:3795 +#: wp-includes/class-wp-xmlrpc-server.php:4769 +msgid "Sorry, you cannot edit posts on this site." +msgstr "Disculpa, no puedes editar entradas en este sitio." + +#: wp-includes/class-wp-xmlrpc-server.php:2691 +msgid "Sorry, you must be able to edit posts to this site in order to view categories." +msgstr "Disculpa, para ver las categorías tienes que estar autorizado para editar entradas en este sitio." + +#: wp-includes/class-wp-xmlrpc-server.php:3043 +#: wp-includes/class-wp-xmlrpc-server.php:3102 +#: wp-includes/class-wp-xmlrpc-server.php:3128 +#: wp-includes/class-wp-xmlrpc-server.php:3154 +#: wp-includes/class-wp-xmlrpc-server.php:3371 +msgid "You are not allowed access to details about this site." +msgstr "No tienes autorización para ver los detalles de este sitio." + +#: wp-includes/ms-functions.php:1150 +msgid "Could not create site." +msgstr "No se pudo crear el sitio." + +#: wp-includes/ms-functions.php:635 +msgid "Sorry, site names must have letters too!" +msgstr "Disculpa, el nombre del sitio, también debe contener letras." + +#: wp-includes/ms-functions.php:631 +msgid "Sorry, you may not use that site name." +msgstr "Lo siento, no puedes utilizar este nombre para el sitio." + +#: wp-includes/ms-functions.php:667 +msgid "Sorry, that site is reserved!" +msgstr "Disculpa, este nombre de sitio está reservado" + +#: wp-includes/ms-functions.php:678 +msgid "That site is currently reserved but may be available in a couple days." +msgstr "Este nombre de sitio está reservado, pero puede estar libre en un par de días." + +#: wp-includes/pluggable.php:1287 +msgid "New user registration on your site %s:" +msgstr "Registrado un nuevo usuario en tu sitio %s:" + +#: wp-includes/class-wp-xmlrpc-server.php:2727 +#: wp-includes/class-wp-xmlrpc-server.php:2828 +#: wp-includes/class-wp-xmlrpc-server.php:2834 +#: wp-includes/class-wp-xmlrpc-server.php:2883 +#: wp-includes/class-wp-xmlrpc-server.php:2889 +msgid "You are not allowed to moderate comments on this site." +msgstr "No tienes autorización para moderar comentarios en este sitio." + +#: wp-includes/class-wp-xmlrpc-server.php:2555 +msgid "Sorry, you must be able to edit posts on this site in order to view tags." +msgstr "Disculpa, para ver las etiquetas tienes que estar autorizado para editar entradas en este sitio." + +#: wp-includes/class-wp-xmlrpc-server.php:377 +msgid "Site Tagline" +msgstr "Descripción corta" + +#: wp-includes/ms-load.php:109 +msgid "This site has been archived or suspended." +msgstr "Este sitio ha sido archivado o suspendido." + +#: wp-includes/ms-settings.php:122 +msgid "No site by that name on this system." +msgstr "No existe ningún sitio en el sistema con este nombre." + +#: wp-includes/ms-load.php:225 +msgid "That site does not exist. Please try %s." +msgstr "Este sitio no existe. Por favor, prueba %s." + +#: wp-includes/load.php:446 +msgid "The site you have requested is not installed properly. Please contact the system administrator." +msgstr "El sitio que has solicitado no está instalado correctamente. Por favor, ponte en contacto con el administrador del sistema." + +#: wp-includes/script-loader.php:507 +msgctxt "search results" +msgid "No results found." +msgstr "No se han encontrado resultados." + +#: wp-includes/nav-menu.php:235 wp-includes/nav-menu.php:242 +msgid "The menu name %s conflicts with another menu name. Please try another." +msgstr "El nombre de menú %s está creando un conflicto con otro nombre de menú. Por favor, selecciona otro nombre." + +#: wp-includes/nav-menu.php:284 +msgid "The given object ID is not that of a menu item." +msgstr "El ID de objeto dado no es de un objeto de menú." + +#: wp-includes/formatting.php:3100 +msgid "The email address entered did not appear to be a valid email address. Please enter a valid email address." +msgstr "La dirección de correo electrónico parece que no es válida. Por favor, introduce una válida." + +#: wp-includes/formatting.php:3187 +msgid "The WordPress address you entered did not appear to be a valid URL. Please enter a valid URL." +msgstr "La dirección de WordPress parece no ser una URL válida. Por favor, introduce una válida." + +#: wp-includes/formatting.php:3197 +msgid "The Site address you entered did not appear to be a valid URL. Please enter a valid URL." +msgstr "La dirección del sitio no parece ser una URL válida. Por favor, introduce una válida." + +#: wp-includes/taxonomy.php:2176 +msgid "A term with the name provided already exists with this parent." +msgstr "Un término con el nombre dado ya existe en este nivel." + +#: wp-includes/ms-functions.php:1953 +msgid "An error occurred adding you to this site. Back to the homepage." +msgstr "Hubo un error añadiéndote a este sitio. Volver a la página de inicio." + +#: wp-includes/ms-functions.php:1869 +msgid "This file is too big. Files must be less than %d KB in size." +msgstr "Este archivo es demasiado grande. Los archivos deben tener un tamaño inferior a %d KB." + +#: wp-includes/locale.php:177 +msgid "number_format_decimal_point" +msgstr "," + +#: wp-includes/comment-template.php:2001 +msgid "Your email address will not be published." +msgstr "Tu dirección de correo electrónico no será publicada." + +#: wp-includes/class-http.php:118 wp-includes/class-wp-xmlrpc-server.php:5325 +msgid "A valid URL was not provided." +msgstr "No se ha facilitado una URL válida." + +#: wp-includes/comment-template.php:2000 +msgid "Logged in as %2$s. Log out?" +msgstr "Conectado como %2$s. ¿Quieres salir?" + +#: wp-includes/class-wp-image-editor-gd.php:171 +#: wp-includes/class-wp-image-editor-imagick.php:228 +msgid "Could not calculate resized image dimensions" +msgstr "No se han podido recalcular las dimensiones de la imagen redimensionada" + +#: wp-signup.php:112 +msgid "Must be at least 4 characters, letters and numbers only. It cannot be changed, so choose carefully!" +msgstr "Debe tener al menos 4 caracteres, letras y números solamente. ¡No se puede cambiar, así que elige con cuidado!" + +#: wp-signup.php:676 +msgid "You must first log in, and then you can create a new site." +msgstr "Primero debes iniciar sesión, después podrás crear un sitio nuevo." + +#: wp-signup.php:711 +msgid "You are logged in already. No need to register again!" +msgstr "Ya te has identificado. ¡No necesitas registrarte de nuevo!" + +#: wp-includes/comment-template.php:890 +msgid "Use get_trackback_url() instead if you do not want the value echoed." +msgstr "Utiliza get_trackback_url() en su lugar si no quieres un valor vacío." + +#: wp-mail.php:15 +msgid "This action has been disabled by the administrator." +msgstr "Esta acción ha sido deshabilitada por el administrador." + +#: wp-signup.php:266 +msgid "Welcome back, %s. By filling out the form below, you can add another site to your account. There is no limit to the number of sites you can have, so create to your heart’s content, but write responsibly!" +msgstr "Bienvenido de nuevo %s. Rellenando el siguiente formulario, puedes añadir otro sitio a tu cuenta. No hay límite en el número de sitios que puedas tener, por tanto, crea los que necesites, pero escribe con responsabilidad." + +#: wp-includes/ms-functions.php:489 +msgid "Sorry, usernames may not contain the character “_”!" +msgstr "¡Lo siento, nombres de usuario no puede contener el carácter “_”!" + +#: wp-signup.php:636 +msgid "If you haven’t received your email yet, there are a number of things you can do:" +msgstr "Si todavía no has recibido el correo electrónico, hay una serie de acciones que puedes realizar:" + +#: wp-includes/author-template.php:62 +msgid "Use get_the_author() instead if you do not want the value echoed." +msgstr "Utiliza get_the_author() en su lugar si no quieres un valor vacío." + +#: wp-includes/ms-load.php:255 +msgid "If you’re still stuck with this message, then check that your database contains the following tables:" +msgstr "Si todavía estás atascado con este mensaje, comprueba que tu base de datos contiene las siguientes tablas:" + +#: wp-includes/class-wp-editor.php:752 +msgid "Enter title here" +msgstr "Introduce el título aquí" + +#: wp-includes/script-loader.php:471 +msgid "Are you sure you want to install this plugin?" +msgstr "¿Estás seguro de querer instalar este plugin?" + +#: wp-includes/script-loader.php:498 +msgid "Use as featured image" +msgstr "Usar como imagen destacada" + +#: wp-includes/script-loader.php:327 +msgid "Mismatch" +msgstr "No coinciden" + +#: wp-includes/load.php:173 +msgid "Maintenance" +msgstr "Mantenimiento" + +#: wp-includes/load.php:177 +msgid "Briefly unavailable for scheduled maintenance. Check back in a minute." +msgstr "No disponible por mantenimiento programado. Vuelve a comprobar el sitio en unos minutos." + +#: wp-includes/post.php:98 +msgid "Navigation Menu Items" +msgstr "Elementos del menú de navegación" + +#: wp-includes/post.php:99 +msgid "Navigation Menu Item" +msgstr "Elemento del menú de navegación" + +#: wp-includes/taxonomy.php:68 +msgid "Navigation Menus" +msgstr "Menús de navegación" + +#: wp-includes/ms-settings.php:35 +msgid "Multisite only works without the port number in the URL." +msgstr "El multisitio sólo funciona sin el número del puerto en la URL." + +#: wp-links-opml.php:29 +msgid "Links for %s" +msgstr "Enlaces para %s" + +#: wp-includes/nav-menu.php:618 +msgid "Custom" +msgstr "Personalizado" + +#: wp-includes/default-widgets.php:1141 +msgid "No menus have been created yet. Create some." +msgstr "Aún no se han creado menús. Crea alguno." + +#: wp-includes/script-loader.php:508 +msgid "" +"You are about to permanently delete this menu. \n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Estás a punto de eliminar permanentemente este menú. \n" +"'Cancelar' para parar, 'OK' para eliminar." + +#: wp-includes/link-template.php:2521 +msgid "This is the short link." +msgstr "Este es el enlace corto." + +#: wp-includes/update.php:497 +msgid "%d WordPress Update" +msgstr "%d Actualización WordPress" + +#: wp-includes/update.php:501 +msgid "%d Theme Update" +msgid_plural "%d Theme Updates" +msgstr[0] "%d Actualización tema" +msgstr[1] "%d Actualizaciones temas" + +#: wp-includes/update.php:499 +msgid "%d Plugin Update" +msgid_plural "%d Plugin Updates" +msgstr[0] "%d actualización de plugin" +msgstr[1] "%d actualizaciones de plugins" + +#: wp-signup.php:373 +msgid "The site %s is yours." +msgstr "El sitio %s es tuyo." + +#: wp-signup.php:296 +msgid "Create Site" +msgstr "Crear sitio" + +#: wp-signup.php:281 +msgid "If you’re not going to use a great site domain, leave it for a new user. Now have at it!" +msgstr "Si no vas a usar un dominio de un sitio, por favor, libéralo para que otro lo pueda usar. Ahora ¡consigue uno!" + +#: wp-signup.php:272 +msgid "Sites you are already a member of:" +msgstr "Eres miembro de los siguientes sitios:" + +#: wp-includes/ms-load.php:102 +msgid "This site has not been activated yet. If you are having problems activating your site, please contact %1$s." +msgstr "Este sitio aún no ha sido activado. Si estas teniendo problemas en el proceso de activación, por favor contacta con %1$s." + +#: wp-includes/script-loader.php:237 +msgid "File canceled." +msgstr "Archivo cancelado." + +#: wp-signup.php:117 +msgid "Site Title:" +msgstr "Título del sitio:" + +#: wp-signup.php:96 +msgid "Site Domain:" +msgstr "Dominio del sitio:" + +#: wp-signup.php:94 +msgid "Site Name:" +msgstr "Nombre del sitio:" + +#: wp-signup.php:109 +msgid "sitename" +msgstr "nombresitio" + +#: wp-signup.php:260 +msgid "Get another %s site in seconds" +msgstr "Consigue otro sitio en %s en segundos" + +#: wp-signup.php:629 +msgid "Congratulations! Your new site, %s, is almost ready." +msgstr "¡Felicidades! Tu nuevo sitio , %s, ya está listo." + +#: wp-signup.php:690 +msgid "Site registration has been disabled." +msgstr "No se permiten nuevos registros de sitios." + +#: wp-signup.php:447 +msgid "Gimme a site!" +msgstr "¡Dame un sitio!" + +#: wp-signup.php:631 +msgid "But, before you can start using your site, you must activate it." +msgstr "Pero, antes de que puedas comenzar a usar tu sitio, debes activarlo." + +#: wp-signup.php:633 +msgid "If you do not activate your site within two days, you will have to sign up again." +msgstr "Si no activas tu sitio en dos días, deberás registrarte de nuevo." + +#: wp-includes/default-widgets.php:1150 +msgid "Select Menu:" +msgstr "Elegir menú:" + +#: wp-includes/taxonomy.php:69 +msgid "Navigation Menu" +msgstr "Menú de Navegación" + +#: wp-includes/default-widgets.php:1075 +msgid "Taxonomy:" +msgstr "Taxonomía:" + +#: wp-includes/admin-bar.php:670 +msgid "Menus" +msgstr "Menús" + +#: wp-includes/class-wp-xmlrpc-server.php:305 +msgid "Software Name" +msgstr "Nombre de la aplicación" + +#: wp-includes/class-wp-xmlrpc-server.php:310 +msgid "Software Version" +msgstr "Versión de la aplicación" + +#: wp-includes/class-wp-xmlrpc-server.php:367 +msgid "Time Zone" +msgstr "Zona horaria" + +#: wp-includes/class-wp-xmlrpc-server.php:392 +msgid "Allow new users to sign up" +msgstr "Permite el registro de nuevos usuarios" + +#: wp-includes/class-wp-xmlrpc-server.php:2271 +msgid "Sorry, you cannot edit this page." +msgstr "Disculpa, no puedes editar esta página." + +#: wp-includes/class-wp-xmlrpc-server.php:2281 +#: wp-includes/class-wp-xmlrpc-server.php:2385 +#: wp-includes/class-wp-xmlrpc-server.php:2426 +msgid "Sorry, no such page." +msgstr "Disculpa, no existe esa página." + +#: wp-includes/class-wp-xmlrpc-server.php:2309 +#: wp-includes/class-wp-xmlrpc-server.php:2469 +msgid "Sorry, you cannot edit pages." +msgstr "Disculpa, no puedes editar páginas." + +#: wp-includes/class-wp-xmlrpc-server.php:2389 +msgid "Sorry, you do not have the right to delete this page." +msgstr "Disculpa, no tienes autorización para borrar esta página." + +#: wp-includes/class-wp-xmlrpc-server.php:2394 +msgid "Failed to delete the page." +msgstr "No se logró borrar la página." + +#: wp-includes/class-wp-xmlrpc-server.php:2430 +msgid "Sorry, you do not have the right to edit this page." +msgstr "Disculpa, no tienes autorización para editar esta página." + +#: wp-includes/class-wp-xmlrpc-server.php:2600 +msgid "Sorry, you do not have the right to add a category." +msgstr "Disculpa, no tienes autorización para añadir categorías." + +#: wp-includes/class-wp-xmlrpc-server.php:2628 +#: wp-includes/class-wp-xmlrpc-server.php:2630 +msgid "Sorry, the new category failed." +msgstr "Disculpa, la creación de la nueva categoría falló." + +#: wp-includes/class-wp-xmlrpc-server.php:2660 +msgid "Sorry, you do not have the right to delete a category." +msgstr "Disculpa, no tienes autorización para borrar categorías." + +#: wp-includes/class-wp-xmlrpc-server.php:2732 +#: wp-includes/class-wp-xmlrpc-server.php:2831 +#: wp-includes/class-wp-xmlrpc-server.php:2886 +msgid "Invalid comment ID." +msgstr "El ID del comentario no es válido." + +#: wp-includes/class-wp-xmlrpc-server.php:2768 +msgid "Sorry, you cannot edit comments." +msgstr "Disculpa, no puedes editar comentarios." + +#: wp-includes/class-wp-xmlrpc-server.php:2898 +msgid "Invalid comment status." +msgstr "El estado del comentario no es válido." + +#: wp-includes/class-wp-xmlrpc-server.php:2930 +msgid "Sorry, the comment could not be edited. Something wrong happened." +msgstr "Disculpa, no se ha podido editar el comentario. Se ha producido un error." + +#: wp-includes/class-wp-xmlrpc-server.php:2963 +msgid "You must be registered to comment" +msgstr "Los usuarios deben registrarse e identificarse para comentar" + +#: wp-includes/class-wp-xmlrpc-server.php:1015 +#: wp-includes/class-wp-xmlrpc-server.php:1264 +#: wp-includes/class-wp-xmlrpc-server.php:1324 +#: wp-includes/class-wp-xmlrpc-server.php:1405 +#: wp-includes/class-wp-xmlrpc-server.php:2268 +#: wp-includes/class-wp-xmlrpc-server.php:2976 +#: wp-includes/class-wp-xmlrpc-server.php:2979 +#: wp-includes/class-wp-xmlrpc-server.php:3747 +#: wp-includes/class-wp-xmlrpc-server.php:4381 +#: wp-includes/class-wp-xmlrpc-server.php:4642 +#: wp-includes/class-wp-xmlrpc-server.php:5120 +#: wp-includes/class-wp-xmlrpc-server.php:5166 +#: wp-includes/class-wp-xmlrpc-server.php:5278 wp-includes/post.php:2735 +#: wp-includes/post.php:2991 +msgid "Invalid post ID." +msgstr "El ID de la entrada no es válido." + +#: wp-includes/class-wp-xmlrpc-server.php:3005 +msgid "Comment author name and email are required" +msgstr "El nombre y correo electrónico del autor del comentario son campos necesarios" + +#: wp-includes/class-wp-xmlrpc-server.php:3007 +msgid "A valid email address is required" +msgstr "Se necesita un correo electrónico válido" + +#: wp-includes/class-wp-xmlrpc-server.php:3070 +msgid "You are not allowed access to details about comments." +msgstr "No tienes autorización para ver los detalles de los comentarios." + +#: wp-includes/class-wp-xmlrpc-server.php:3236 +msgid "You are not allowed to update options." +msgstr "No tienes autorización para actualizar las opciones." + +#: wp-includes/class-wp-xmlrpc-server.php:1408 +#: wp-includes/class-wp-xmlrpc-server.php:3609 +#: wp-includes/class-wp-xmlrpc-server.php:3750 +#: wp-includes/class-wp-xmlrpc-server.php:4645 +#: wp-includes/class-wp-xmlrpc-server.php:4972 +#: wp-includes/class-wp-xmlrpc-server.php:5169 +msgid "Sorry, you cannot edit this post." +msgstr "Disculpa, no puedes editar esta entrada." + +#: wp-includes/class-wp-xmlrpc-server.php:3802 +#: wp-includes/class-wp-xmlrpc-server.php:5030 +msgid "Either there are no posts, or something went wrong." +msgstr "Una de dos, o no hay entradas o algo fue mal." + +#: wp-includes/class-wp-xmlrpc-server.php:3934 +#: wp-includes/class-wp-xmlrpc-server.php:3988 +#: wp-includes/class-wp-xmlrpc-server.php:4741 +#: wp-includes/class-wp-xmlrpc-server.php:5232 +msgid "Sorry, no such post." +msgstr "Disculpa, no existe la entrada." + +#: wp-includes/class-wp-xmlrpc-server.php:3944 +#: wp-includes/class-wp-xmlrpc-server.php:4545 +msgid "Sorry, you do not have the right to publish this post." +msgstr "Disculpa, no tienes autorización para publicar esta entrada." + +#: wp-includes/class-wp-xmlrpc-server.php:4433 +msgid "You are not allowed to change the post author as this user." +msgstr "No tienes autorización para cambiar el autor de la entrada identificado con este nombre de usuario." + +#: wp-includes/class-wp-xmlrpc-server.php:4437 +msgid "You are not allowed to change the page author as this user." +msgstr "No tienes autorización para cambiar el autor de la página identificado con este nombre de usuario." + +#: wp-includes/class-wp-xmlrpc-server.php:4543 +msgid "Sorry, you do not have the right to publish this page." +msgstr "Disculpa, no tienes autorización para publicar esta página." + +#: wp-includes/class-wp-xmlrpc-server.php:4581 +msgid "Sorry, your entry could not be edited. Something wrong happened." +msgstr "Disculpa, no se pudo editar tu entrada. Ocurrió algún error." + +#: wp-includes/class-wp-xmlrpc-server.php:4963 +msgid "Could not write file %1$s (%2$s)" +msgstr "No se pudo escribir el archivo %1$s (%2$s)" + +#: wp-includes/class-wp-xmlrpc-server.php:5123 +msgid "Sorry, you can not edit this post." +msgstr "Disculpa, no puedes editar esta entrada." + +#: wp-includes/class-wp-xmlrpc-server.php:5330 +msgid "Is there no link to us?" +msgstr "¿No hay enlace hacia nosotros?" + +#: wp-includes/class-wp-xmlrpc-server.php:5370 +#: wp-includes/class-wp-xmlrpc-server.php:5377 +#: wp-includes/class-wp-xmlrpc-server.php:5384 +#: wp-includes/class-wp-xmlrpc-server.php:5497 +msgid "The specified target URL cannot be used as a target. It either doesn’t exist, or it is not a pingback-enabled resource." +msgstr "La URL especificada no puede utilizarse como destino. O bien no existe o no está habilitado para pingbacks." + +#: wp-includes/class-wp-xmlrpc-server.php:5380 +msgid "The source URL and the target URL cannot both point to the same resource." +msgstr "La URL de origen y la URL de destino no pueden apuntar ambas al mismo recurso." + +#: wp-includes/class-wp-xmlrpc-server.php:5388 +msgid "The pingback has already been registered." +msgstr "El pingback ya ha sido registrado." + +#: wp-includes/class-wp-xmlrpc-server.php:5402 +msgid "The source URL does not exist." +msgstr "La URL de origen no existe." + +#: wp-includes/class-wp-xmlrpc-server.php:5414 +msgid "We cannot find a title on that page." +msgstr "No podemos encontrar un título en esa página." + +#: wp-includes/class-wp-xmlrpc-server.php:5450 +msgid "The source URL does not contain a link to the target URL, and so cannot be used as a source." +msgstr "La URL de origen no contiene un enlace a la URL de destino, así que no puede ser usada como origen." + +#: wp-includes/class-wp-xmlrpc-server.php:5471 +msgid "Pingback from %1$s to %2$s registered. Keep the web talking! :-)" +msgstr "Pingback desde %1$s a %2$s registrado. ¡Haz que la web hable! :-)" + +#: wp-includes/class-wp-xmlrpc-server.php:5504 +msgid "The specified target URL does not exist." +msgstr "La URL de destino especificada no existe." + +#: wp-includes/load.php:112 +msgid "Your PHP installation appears to be missing the MySQL extension which is required by WordPress." +msgstr "Parece que tu instalación de PHP no cuenta con la extensión de MySQL, necesaria para hacer funcionar WordPress." + +#: wp-includes/load.php:368 +msgid "ERROR: $table_prefix in wp-config.php can only contain numbers, letters, and underscores." +msgstr "ERROR: $table_prefix en wp-config.php sólo puede contener números, letras y guiones bajos." + +#: wp-includes/wp-db.php:1157 +msgid "" +"\n" +"

      Error establishing a database connection

      \n" +"

      This either means that the username and password information in your wp-config.php file is incorrect or we can't contact the database server at %s. This could mean your host's database server is down.

      \n" +"
        \n" +"\t
      • Are you sure you have the correct username and password?
      • \n" +"\t
      • Are you sure that you have typed the correct hostname?
      • \n" +"\t
      • Are you sure that the database server is running?
      • \n" +"
      \n" +"

      If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.

      \n" +msgstr "" +"\n" +"

      Error de conexión con la base de datos

      \n" +"

      Esto puede deberse a que los datos de usuario y contraseña de tu wp-config.php son incorrectos o a que no es posible contactar con el servidor de base de datos en %s, lo que podría significar que el servidor de bases de datos de tu host está inactivo.

      \n" +"
        \n" +"\t
      • ¿Estás seguro de que el nombre de usuario y la contraseña son correctos?
      • \n" +"\t
      • ¿Estás seguro de que el nombre del host es correcto?
      • \n" +"\t
      • ¿Estás seguro de que el servidor de bases de datos está activo?
      • \n" +"
      \n" +"

      Si no tienes muy claro lo que significan los términos anteriores, ponte en contacto con tu proveedor de alojamiento. Si necesitas más ayuda, puedes visitar los Foros de ayuda de WordPress.

      \n" + +#: wp-includes/wp-db.php:1031 +msgid "WordPress database error %1$s for query %2$s made by %3$s" +msgstr "Error %1$s de la base de datos de WordPress para la consulta %2$s realizada por %3$s" + +#: wp-includes/wp-db.php:1033 +msgid "WordPress database error %1$s for query %2$s" +msgstr "Error %1$s de la base de datos de WordPress para la consulta %2$s" + +#: wp-includes/comment-template.php:2007 +msgid "Cancel reply" +msgstr "Cancelar respuesta" + +#: wp-includes/comment-template.php:2008 +msgid "Post Comment" +msgstr "Publicar comentario" + +#: wp-includes/comment.php:473 +msgid "Unapproved" +msgstr "Rechazado" + +#: wp-includes/comment.php:776 wp-includes/comment.php:778 +msgid "Duplicate comment detected; it looks as though you’ve already said that!" +msgstr "Comentario duplicado: ¡parece que ya había sido enviado antes!" + +#: wp-includes/comment.php:1787 +msgid "Could not update comment status" +msgstr "No ha sido posible actualizar el estado del comentario" + +#: wp-includes/cron.php:167 +msgid "This argument has changed to an array to match the behavior of the other cron functions." +msgstr "Este argumento ha cambiado a un array para que coincida con el comportamiento de otras funciones de cron." + +#: wp-includes/cron.php:364 +msgid "Once Hourly" +msgstr "Cada hora" + +#: wp-includes/cron.php:365 +msgid "Twice Daily" +msgstr "Dos veces al día" + +#: wp-includes/cron.php:366 +msgid "Once Daily" +msgstr "Cada día" + +#: wp-includes/default-widgets.php:68 wp-includes/default-widgets.php:159 +msgid "Sort by:" +msgstr "Ordenar por:" + +#: wp-includes/default-widgets.php:70 +msgid "Page title" +msgstr "Título de la página" + +#: wp-includes/default-widgets.php:71 +msgid "Page order" +msgstr "Orden de la página" + +#: wp-includes/default-widgets.php:72 +msgid "Page ID" +msgstr "ID de la página" + +#: wp-includes/default-widgets.php:76 +msgid "Exclude:" +msgstr "Excluir:" + +#: wp-includes/default-widgets.php:78 +msgid "Page IDs, separated by commas." +msgstr "IDs de página, separados por comas." + +#: wp-includes/default-widgets.php:93 +msgid "Your blogroll" +msgstr "Tus sitios de interés" + +#: wp-includes/default-widgets.php:169 +msgid "Show Link Image" +msgstr "Mostrar la imagen del enlace" + +#: wp-includes/default-widgets.php:171 +msgid "Show Link Name" +msgstr "Mostrar el nombre del enlace" + +#: wp-includes/default-widgets.php:173 +msgid "Show Link Description" +msgstr "Mostrar la descripción del enlace" + +#: wp-includes/default-widgets.php:175 +msgid "Show Link Rating" +msgstr "Mostrar la clasificación del enlace" + +#: wp-includes/default-widgets.php:252 +msgid "Select Month" +msgstr "Elegir mes" + +#: wp-includes/default-widgets.php:285 wp-includes/default-widgets.php:519 +msgid "Show post counts" +msgstr "Mostrar la cantidad de entradas" + +#: wp-includes/default-widgets.php:316 +msgid "Syndicate this site using RSS 2.0" +msgstr "Suscribirse a este sitio usando RSS 2.0" + +#: wp-includes/default-widgets.php:316 +msgid "Entries RSS" +msgstr "RSS de las entradas" + +#: wp-includes/default-widgets.php:354 +msgid "Calendar" +msgstr "Calendario" + +#: wp-includes/default-widgets.php:396 +msgid "Text" +msgstr "Texto" + +#: wp-includes/default-widgets.php:431 +msgid "Automatically add paragraphs" +msgstr "Añadir párrafos automáticamente" + +#: wp-includes/default-widgets.php:463 +msgid "Select Category" +msgstr "Elegir categoría" + +#: wp-includes/default-widgets.php:522 +msgid "Show hierarchy" +msgstr "Mostrar jerarquía" + +#: wp-includes/default-widgets.php:537 wp-includes/default-widgets.php:562 +msgid "Recent Posts" +msgstr "Entradas recientes" + +#: wp-includes/default-widgets.php:621 +msgid "Number of posts to show:" +msgstr "Número de entradas a mostrar:" + +#: wp-includes/default-widgets.php:700 +msgctxt "widgets" +msgid "%1$s on %2$s" +msgstr "%1$s en %2$s" + +#: wp-includes/default-widgets.php:789 +msgid "Syndicate this content" +msgstr "Sindicar este contenido" + +#: wp-includes/default-widgets.php:867 +msgid "Untitled" +msgstr "Sin título" + +#: wp-includes/default-widgets.php:945 +msgid "RSS Error: %s" +msgstr "RSS Error: %s" + +#: wp-includes/default-widgets.php:949 +msgid "Enter the RSS feed URL here:" +msgstr "Introduce la URL del feed RSS aquí:" + +#: wp-includes/default-widgets.php:952 +msgid "Give the feed a title (optional):" +msgstr "Dale un título al feed (opcional):" + +#: wp-includes/default-widgets.php:955 +msgid "How many items would you like to display?" +msgstr "¿Cuantos elementos te gustaría mostrar?" + +#: wp-includes/default-widgets.php:964 +msgid "Display item content?" +msgstr "¿Mostrar el contenido?" + +#: wp-includes/default-widgets.php:967 +msgid "Display item author if available?" +msgstr "¿Mostrar el autor si está disponible?" + +#: wp-includes/default-widgets.php:970 +msgid "Display item date?" +msgstr "¿Mostrar la fecha?" + +#: wp-includes/default-widgets.php:1037 +msgid "Tag Cloud" +msgstr "Nube de etiquetas" + +#: wp-includes/deprecated.php:62 +msgid "new WordPress Loop" +msgstr "nuevo Loop de WordPress" + +#: wp-includes/deprecated.php:987 +msgid "Last updated" +msgstr "Última actualización" + +#: wp-includes/deprecated.php:1884 wp-includes/post-template.php:1190 +msgid "Missing Attachment" +msgstr "Falta el archivo" + +#: wp-includes/feed-atom-comments.php:21 wp-includes/feed-rss2-comments.php:36 +msgid "Comments for %1$s searching on %2$s" +msgstr "Comentarios para %1$s buscando en %2$s" + +#: wp-includes/feed-atom-comments.php:23 wp-includes/feed-rss2-comments.php:38 +msgid "Comments for %s" +msgstr "Comentarios para %s" + +#: wp-includes/feed-atom-comments.php:53 wp-includes/feed-rss2-comments.php:65 +msgid "Comment on %1$s by %2$s" +msgstr "Comentario en %1$s por %2$s" + +#: wp-includes/feed-atom-comments.php:55 wp-includes/feed-rss2-comments.php:67 +msgid "By: %s" +msgstr "Por: %s" + +#: wp-includes/feed-rss2-comments.php:34 +msgid "Comments on: %s" +msgstr "Comentarios en: %s" + +#: wp-includes/feed-rss2-comments.php:75 +msgid "Protected Comments: Please enter your password to view comments." +msgstr "Comentarios protegidos: Por favor, escribe tu contraseña para ver los comentarios." + +#: wp-includes/formatting.php:2309 +msgid "%s min" +msgid_plural "%s mins" +msgstr[0] "%s min" +msgstr[1] "%s mins" + +#: wp-includes/formatting.php:2314 +msgid "%s hour" +msgid_plural "%s hours" +msgstr[0] "%s hora" +msgstr[1] "%s horas" + +#: wp-includes/formatting.php:2319 +msgid "%s day" +msgid_plural "%s days" +msgstr[0] "%s día" +msgstr[1] "%s días" + +#: wp-includes/class-wp-theme.php:673 wp-includes/formatting.php:3427 +msgid ", " +msgstr ", " + +#: wp-includes/formatting.php:3429 +msgid ", and " +msgstr ", y " + +#: wp-includes/formatting.php:3431 +msgid " and " +msgstr "y " + +#: wp-includes/option.php:108 +msgid "%s is a protected WP option and may not be modified" +msgstr "%s es una opción protegida de WP y no puede modificarse" + +#: wp-includes/functions.php:1662 wp-includes/functions.php:1785 +msgid "Unable to create directory %s. Is its parent directory writable by the server?" +msgstr "No se pudo crear el directorio %s. Asegúrate de que el servidor tiene permisos de escritura para el directorio superior." + +#: wp-includes/functions.php:1759 +msgid "Empty filename" +msgstr "El nombre de archivo está vacío." + +#: wp-includes/functions.php:1791 +msgid "Could not write file %s" +msgstr "No se pudo escribir el archivo %s." + +#: wp-includes/functions.php:2083 +msgid "You are attempting to log out of %s" +msgstr "Estás intentando cerrar tu sesión en %s." + +#: wp-includes/functions.php:2081 +msgid "WordPress Failure Notice" +msgstr "Aviso de fallo de WordPress" + +#: wp-includes/functions.php:2084 +msgid "Do you really want to log out?" +msgstr "¿Estás seguro de que quieres desconectarte?" + +#: wp-includes/functions.php:2088 wp-includes/ms-functions.php:1900 +msgid "Please try again." +msgstr "Por favor, inténtalo de nuevo." + +#: wp-includes/functions.php:2162 +msgid "« Back" +msgstr "« Volver" + +#: wp-includes/functions.php:2174 wp-load.php:61 +msgid "WordPress › Error" +msgstr "WordPress › Error" + +#: wp-includes/functions.php:2908 wp-includes/functions.php:2955 +msgid "%1$s is deprecated since version %2$s! Use %3$s instead." +msgstr "%1$s está obsoleto desde la versión %2$s. Utiliza %3$s en su lugar." + +#: wp-includes/functions.php:2910 wp-includes/functions.php:2957 +msgid "%1$s is deprecated since version %2$s with no alternative available." +msgstr "%1$s está obsoleto desde la versión %2$s y no hay alternativas disponibles." + +#: wp-includes/functions.php:3006 +msgid "%1$s was called with an argument that is deprecated since version %2$s! %3$s" +msgstr "%1$s fue llamado con un argumento que está obsoleto desde la versión %2$s! %3$s" + +#: wp-includes/functions.php:3008 +msgid "%1$s was called with an argument that is deprecated since version %2$s with no alternative available." +msgstr "%1$s fue llamado con un argumento que está obsoleto desde la versión %2$s y no hay alternativas disponibles." + +#: wp-includes/functions.php:3512 +msgid "Select a city" +msgstr "Elige una ciudad" + +#: wp-includes/functions.php:3557 wp-includes/functions.php:3561 +msgid "UTC" +msgstr "UTC" + +#: wp-includes/functions.php:3565 +msgid "Manual Offsets" +msgstr "Desplazamientos manuales" + +#: wp-includes/general-template.php:215 wp-login.php:544 wp-login.php:593 +#: wp-login.php:624 wp-login.php:706 +msgid "Log in" +msgstr "Acceder" + +#: wp-includes/general-template.php:217 +msgid "Log out" +msgstr "Desconectar" + +#: wp-includes/general-template.php:305 wp-login.php:858 +msgid "Remember Me" +msgstr "Recuérdame" + +#: wp-includes/general-template.php:383 wp-login.php:547 wp-login.php:627 +#: wp-login.php:702 wp-login.php:877 +msgid "Register" +msgstr "Registrarse" + +#: wp-includes/general-template.php:387 +msgid "Site Admin" +msgstr "Administrador del sitio" + +#: wp-includes/general-template.php:635 +msgid "Search Results %1$s %2$s" +msgstr "Resultados de la búsqueda %1$s %2$s" + +#: wp-includes/general-template.php:640 +msgid "Page not found" +msgstr "No se encontró la página" + +#: wp-includes/general-template.php:1005 +msgid "%1$s %2$d" +msgstr "%1$s %2$d" + +#: wp-includes/general-template.php:1205 +msgctxt "calendar caption" +msgid "%1$s %2$s" +msgstr "%1$s %2$s" + +#: wp-includes/general-template.php:1231 wp-includes/general-template.php:1239 +msgid "View posts for %1$s %2$s" +msgstr "Ver todas las entradas para %1$s %2$s" + +#: wp-includes/general-template.php:1660 wp-includes/general-template.php:1683 +msgctxt "feed link" +msgid "»" +msgstr "»" + +#: wp-includes/general-template.php:1662 +msgid "%1$s %2$s Feed" +msgstr "%1$s %2$s Feed" + +#: wp-includes/general-template.php:1664 +msgid "%1$s %2$s Comments Feed" +msgstr "%1$s %2$s RSS de los comentarios" + +#: wp-includes/general-template.php:1685 +msgid "%1$s %2$s %3$s Comments Feed" +msgstr "%1$s %2$s %3$s RSS de los comentarios" + +#: wp-includes/general-template.php:1687 +msgid "%1$s %2$s %3$s Category Feed" +msgstr "%1$s %2$s %3$s RSS de la categoría" + +#: wp-includes/general-template.php:1689 +msgid "%1$s %2$s %3$s Tag Feed" +msgstr "%1$s %2$s %3$s RSS de la etiqueta" + +#: wp-includes/general-template.php:1691 +msgid "%1$s %2$s Posts by %3$s Feed" +msgstr "%1$s %2$s RSS de las entradas de %3$s" + +#: wp-includes/general-template.php:1693 +msgid "%1$s %2$s Search Results for “%3$s” Feed" +msgstr "%1$s %2$s Resultados de búsqueda para “%3$s” RSS" + +#: wp-includes/general-template.php:2004 +msgid "« Previous" +msgstr "« Anterior" + +#: wp-includes/general-template.php:2005 +msgid "Next »" +msgstr "Siguiente »" + +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +msgid "Gray" +msgstr "Gris" + +#: wp-includes/class-http.php:121 +msgid "User has blocked requests through HTTP." +msgstr "El usuario ha bloqueado las peticiones a través de HTTP." + +#: wp-includes/class-http.php:615 wp-includes/class-http.php:1242 +#: wp-includes/class-http.php:1270 +msgid "Too many redirects." +msgstr "Demasiadas redirecciones." + +#: wp-includes/class-http.php:861 wp-includes/class-http.php:1209 +msgid "Could not open handle for fopen() to %s" +msgstr "No se pudo utilizar la función fopen() para %s." + +#: wp-includes/js/tinymce/langs/wp-langs.php:18 +msgid "Do you want to use the WYSIWYG mode for this textarea?" +msgstr "¿Quieres usar el editor visual en este área de texto?" + +#: wp-includes/js/tinymce/langs/wp-langs.php:20 +msgid "Insert" +msgstr "Insertar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:24 +msgid "Browse" +msgstr "Examinar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:25 +#: wp-includes/js/tinymce/langs/wp-langs.php:402 +msgid "Class" +msgstr "Clase" + +#: wp-includes/js/tinymce/langs/wp-langs.php:26 +msgid "-- Not set --" +msgstr "-- Sin configurar --" + +#: wp-includes/js/tinymce/langs/wp-langs.php:27 +#: wp-includes/js/tinymce/langs/wp-langs.php:324 +msgid "Copy/Cut/Paste is not available in Mozilla and Firefox." +msgstr "Copiar/Cortar/Pegar no está disponible en Mozilla y Firefox" + +#: wp-includes/js/tinymce/langs/wp-langs.php:28 +msgid "Currently not supported by your browser, use keyboard shortcuts instead." +msgstr "Actualmente no es compatible con tu navegador, en su lugar puedes utilizar los atajos de teclado." + +#: wp-includes/js/tinymce/langs/wp-langs.php:29 +msgid "Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool." +msgstr "Disculpa, parece que tu bloqueador de ventanas emergentes ha bloqueado una ventana que proporciona funciones de la aplicación. Tendrás que desactivar el bloqueador si quieres usar esta herramienta." + +#: wp-includes/js/tinymce/langs/wp-langs.php:34 +#: wp-includes/js/tinymce/langs/wp-langs.php:328 +msgid "More colors" +msgstr "Más colores" + +#: wp-includes/js/tinymce/langs/wp-langs.php:85 +msgid "Full" +msgstr "Completo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:89 +msgid "%Y-%m-%d" +msgstr "%d-%m-%Y" + +#: wp-includes/js/tinymce/langs/wp-langs.php:90 +msgid "%H:%M:%S" +msgstr "%H:%M:%S" + +#: wp-includes/js/tinymce/langs/wp-langs.php:91 +msgid "Insert date" +msgstr "Insertar fecha" + +#: wp-includes/js/tinymce/langs/wp-langs.php:92 +msgid "Insert time" +msgstr "Insertar hora" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 wp-includes/locale.php:131 +#: wp-includes/locale.php:146 +msgid "January" +msgstr "enero" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 wp-includes/locale.php:132 +#: wp-includes/locale.php:147 +msgid "February" +msgstr "febrero" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 wp-includes/locale.php:133 +#: wp-includes/locale.php:148 +msgid "March" +msgstr "marzo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 wp-includes/locale.php:134 +#: wp-includes/locale.php:149 +msgid "April" +msgstr "abril" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 wp-includes/locale.php:135 +#: wp-includes/locale.php:150 +msgid "May" +msgstr "mayo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 wp-includes/locale.php:136 +#: wp-includes/locale.php:151 +msgid "June" +msgstr "junio" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 wp-includes/locale.php:137 +#: wp-includes/locale.php:152 +msgid "July" +msgstr "julio" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 wp-includes/locale.php:138 +#: wp-includes/locale.php:153 +msgid "August" +msgstr "agosto" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 wp-includes/locale.php:139 +#: wp-includes/locale.php:154 +msgid "September" +msgstr "septiembre" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 wp-includes/locale.php:140 +#: wp-includes/locale.php:155 +msgid "October" +msgstr "octubre" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 wp-includes/locale.php:141 +#: wp-includes/locale.php:156 +msgid "November" +msgstr "noviembre" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 wp-includes/locale.php:142 +#: wp-includes/locale.php:157 +msgid "December" +msgstr "diciembre" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 wp-includes/locale.php:146 +msgid "Jan_January_abbreviation" +msgstr "ene" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 wp-includes/locale.php:147 +msgid "Feb_February_abbreviation" +msgstr "feb" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 wp-includes/locale.php:148 +msgid "Mar_March_abbreviation" +msgstr "mar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 wp-includes/locale.php:149 +msgid "Apr_April_abbreviation" +msgstr "abr" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 wp-includes/locale.php:150 +msgid "May_May_abbreviation" +msgstr "may" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 wp-includes/locale.php:151 +msgid "Jun_June_abbreviation" +msgstr "jun" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 wp-includes/locale.php:152 +msgid "Jul_July_abbreviation" +msgstr "jul" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 wp-includes/locale.php:153 +msgid "Aug_August_abbreviation" +msgstr "ago" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 wp-includes/locale.php:154 +msgid "Sep_September_abbreviation" +msgstr "sep" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 wp-includes/locale.php:155 +msgid "Oct_October_abbreviation" +msgstr "oct" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 wp-includes/locale.php:156 +msgid "Nov_November_abbreviation" +msgstr "nov" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 wp-includes/locale.php:157 +msgid "Dec_December_abbreviation" +msgstr "dic" + +#: wp-includes/js/tinymce/langs/wp-langs.php:95 wp-includes/locale.php:99 +#: wp-includes/locale.php:109 wp-includes/locale.php:122 +msgid "Sunday" +msgstr "Domingo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:95 wp-includes/locale.php:100 +#: wp-includes/locale.php:110 wp-includes/locale.php:123 +msgid "Monday" +msgstr "Lunes" + +#: wp-includes/js/tinymce/langs/wp-langs.php:95 wp-includes/locale.php:101 +#: wp-includes/locale.php:111 wp-includes/locale.php:124 +msgid "Tuesday" +msgstr "Martes" + +#: wp-includes/js/tinymce/langs/wp-langs.php:95 wp-includes/locale.php:102 +#: wp-includes/locale.php:112 wp-includes/locale.php:125 +msgid "Wednesday" +msgstr "Miércoles" + +#: wp-includes/js/tinymce/langs/wp-langs.php:95 wp-includes/locale.php:103 +#: wp-includes/locale.php:113 wp-includes/locale.php:126 +msgid "Thursday" +msgstr "Jueves" + +#: wp-includes/js/tinymce/langs/wp-langs.php:95 wp-includes/locale.php:104 +#: wp-includes/locale.php:114 wp-includes/locale.php:127 +msgid "Friday" +msgstr "Viernes" + +#: wp-includes/js/tinymce/langs/wp-langs.php:95 wp-includes/locale.php:105 +#: wp-includes/locale.php:115 wp-includes/locale.php:128 +msgid "Saturday" +msgstr "Sábado" + +#: wp-includes/js/tinymce/langs/wp-langs.php:96 wp-includes/locale.php:122 +msgid "Sun" +msgstr "Dom" + +#: wp-includes/js/tinymce/langs/wp-langs.php:96 wp-includes/locale.php:123 +msgid "Mon" +msgstr "Lun" + +#: wp-includes/js/tinymce/langs/wp-langs.php:96 wp-includes/locale.php:124 +msgid "Tue" +msgstr "Mar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:96 wp-includes/locale.php:125 +msgid "Wed" +msgstr "Mie" + +#: wp-includes/js/tinymce/langs/wp-langs.php:96 wp-includes/locale.php:126 +msgid "Thu" +msgstr "Jue" + +#: wp-includes/js/tinymce/langs/wp-langs.php:96 wp-includes/locale.php:127 +msgid "Fri" +msgstr "Vie" + +#: wp-includes/js/tinymce/langs/wp-langs.php:96 wp-includes/locale.php:128 +msgid "Sat" +msgstr "Sab" + +#: wp-includes/js/tinymce/langs/wp-langs.php:100 +msgid "Print" +msgstr "Imprimir" + +#: wp-includes/js/tinymce/langs/wp-langs.php:108 +msgid "Direction left to right" +msgstr "Dirección de izquierda a derecha" + +#: wp-includes/js/tinymce/langs/wp-langs.php:109 +msgid "Direction right to left" +msgstr "Dirección de derecha a izquierda" + +#: wp-includes/js/tinymce/langs/wp-langs.php:113 +msgid "Insert new layer" +msgstr "Insertar nueva capa" + +#: wp-includes/js/tinymce/langs/wp-langs.php:114 +msgid "Move forward" +msgstr "Avanzar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:115 +msgid "Move backward" +msgstr "Retroceder" + +#: wp-includes/js/tinymce/langs/wp-langs.php:116 +msgid "Toggle absolute positioning" +msgstr "Cambiar la posición absoluta" + +#: wp-includes/js/tinymce/langs/wp-langs.php:117 +msgid "New layer..." +msgstr "Nueva capa..." + +#: wp-includes/js/tinymce/langs/wp-langs.php:122 +msgid "Cancel all changes" +msgstr "Cancelar todos los cambios" + +#: wp-includes/js/tinymce/langs/wp-langs.php:126 +msgid "Insert non-breaking space character" +msgstr "Insertar un caracter de espacio" + +#: wp-includes/js/tinymce/langs/wp-langs.php:130 +msgid "Run spell checking" +msgstr "Iniciar el corrector ortográfico" + +#: wp-includes/js/tinymce/langs/wp-langs.php:131 +msgid "ieSpell not detected. Do you want to install it now?" +msgstr "No se ha detectado ieSpell. ¿Quieres instalarlo ahora?" + +#: wp-includes/js/tinymce/langs/wp-langs.php:139 +msgid "Emotions" +msgstr "Emoticonos" + +#: wp-includes/js/tinymce/langs/wp-langs.php:143 +msgid "Find" +msgstr "Buscar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:144 +msgid "Find/Replace" +msgstr "Buscar/Remplazar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:148 +#: wp-includes/js/tinymce/langs/wp-langs.php:360 +msgid "Insert/edit image" +msgstr "Insertar/Editar imagen" + +#: wp-includes/js/tinymce/langs/wp-langs.php:152 +#: wp-includes/js/tinymce/langs/wp-langs.php:377 +#: wp-includes/script-loader.php:338 +msgid "Insert/edit link" +msgstr "Insertar/Editar enlace" + +#: wp-includes/js/tinymce/langs/wp-langs.php:156 +msgid "Citation" +msgstr "Cita" + +#: wp-includes/js/tinymce/langs/wp-langs.php:157 +msgid "Abbreviation" +msgstr "Abreviatura" + +#: wp-includes/js/tinymce/langs/wp-langs.php:158 +msgid "Acronym" +msgstr "Acrónimo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:159 +msgid "Deletion" +msgstr "Borrado" + +#: wp-includes/js/tinymce/langs/wp-langs.php:160 +msgid "Insertion" +msgstr "Insertar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:161 +msgid "Insert/Edit Attributes" +msgstr "Insertar/Editar atributos" + +#: wp-includes/js/tinymce/langs/wp-langs.php:165 +msgid "Edit CSS Style" +msgstr "Editar la hoja de estilos CSS" + +#: wp-includes/js/tinymce/langs/wp-langs.php:169 +msgid "Paste as Plain Text" +msgstr "Pegar como texto plano" + +#: wp-includes/js/tinymce/langs/wp-langs.php:170 +msgid "Paste from Word" +msgstr "Pegar desde Word" + +#: wp-includes/js/tinymce/langs/wp-langs.php:177 +#: wp-includes/js/tinymce/langs/wp-langs.php:179 +msgid "Use CTRL+V on your keyboard to paste the text into the window." +msgstr "Usa CTRL+V en tu teclado para pegar el texto en la ventana." + +#: wp-includes/js/tinymce/langs/wp-langs.php:178 +msgid "Keep linebreaks" +msgstr "Conservar los saltos de línea" + +#: wp-includes/js/tinymce/langs/wp-langs.php:183 +msgid "Inserts a new table" +msgstr "Insertar una nueva tabla" + +#: wp-includes/js/tinymce/langs/wp-langs.php:184 +msgid "Insert row before" +msgstr "Insertar fila encima" + +#: wp-includes/js/tinymce/langs/wp-langs.php:185 +msgid "Insert row after" +msgstr "Insertar fila debajo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:186 +msgid "Delete row" +msgstr "Borrar fila" + +#: wp-includes/js/tinymce/langs/wp-langs.php:187 +msgid "Insert column before" +msgstr "Insertar columna a la izquierda" + +#: wp-includes/js/tinymce/langs/wp-langs.php:188 +msgid "Insert column after" +msgstr "Insertar columna a la derecha" + +#: wp-includes/js/tinymce/langs/wp-langs.php:189 +msgid "Remove column" +msgstr "Borrar columna" + +#: wp-includes/js/tinymce/langs/wp-langs.php:190 +msgid "Split merged table cells" +msgstr "Dividir celdas combinadas" + +#: wp-includes/js/tinymce/langs/wp-langs.php:191 +msgid "Merge table cells" +msgstr "Combinar celdas" + +#: wp-includes/js/tinymce/langs/wp-langs.php:192 +msgid "Table row properties" +msgstr "Propiedades de fila" + +#: wp-includes/js/tinymce/langs/wp-langs.php:193 +msgid "Table cell properties" +msgstr "Propiedades de celda" + +#: wp-includes/js/tinymce/langs/wp-langs.php:194 +msgid "Table properties" +msgstr "Propiedades de tabla" + +#: wp-includes/js/tinymce/langs/wp-langs.php:195 +msgid "Paste table row before" +msgstr "Pegar fila encima" + +#: wp-includes/js/tinymce/langs/wp-langs.php:196 +msgid "Paste table row after" +msgstr "Pegar fila debajo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:197 +msgid "Cut table row" +msgstr "Cortar fila" + +#: wp-includes/js/tinymce/langs/wp-langs.php:198 +msgid "Copy table row" +msgstr "Copiar fila" + +#: wp-includes/js/tinymce/langs/wp-langs.php:199 +msgid "Delete table" +msgstr "Borrar tabla" + +#: wp-includes/js/tinymce/langs/wp-langs.php:200 +msgid "Row" +msgstr "Fila" + +#: wp-includes/js/tinymce/langs/wp-langs.php:201 +msgid "Column" +msgstr "Columna" + +#: wp-includes/js/tinymce/langs/wp-langs.php:202 +msgid "Cell" +msgstr "Celda" + +#: wp-includes/js/tinymce/langs/wp-langs.php:206 +#: wp-includes/script-loader.php:509 wp-includes/script-loader.php:659 +msgid "The changes you made will be lost if you navigate away from this page." +msgstr "Los cambios realizados se perderán si abres otra página." + +#: wp-includes/script-loader.php:90 +msgid "Toggle fullscreen mode" +msgstr "Cambiar a modo pantalla completa" + +#: wp-includes/js/tinymce/langs/wp-langs.php:214 +#: wp-includes/js/tinymce/langs/wp-langs.php:391 +msgid "Insert / edit embedded media" +msgstr "Insertar / editar inserción de archivos" + +#: wp-includes/js/tinymce/langs/wp-langs.php:215 +msgid "Edit embedded media" +msgstr "Editar medios incrustados" + +#: wp-includes/js/tinymce/langs/wp-langs.php:219 +msgid "Document properties" +msgstr "Propiedades del documento" + +#: wp-includes/js/tinymce/langs/wp-langs.php:223 +msgid "Insert predefined template content" +msgstr "Insertar la plantilla predefinida de contenido" + +#: wp-includes/js/tinymce/langs/wp-langs.php:227 +msgid "Visual control characters on/off." +msgstr "Control visual de los caracteres on/off." + +#: wp-includes/js/tinymce/langs/wp-langs.php:232 +msgid "Spellchecker settings" +msgstr "Opciones del corrector ortográfico" + +#: wp-includes/js/tinymce/langs/wp-langs.php:233 +msgid "Ignore word" +msgstr "Ignorar palabra" + +#: wp-includes/js/tinymce/langs/wp-langs.php:234 +msgid "Ignore all" +msgstr "Ignorar todo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:235 +msgid "Languages" +msgstr "Idiomas" + +#: wp-includes/js/tinymce/langs/wp-langs.php:236 +msgid "Please wait..." +msgstr "Un momento..." + +#: wp-includes/js/tinymce/langs/wp-langs.php:237 +msgid "Suggestions" +msgstr "Sugerencias" + +#: wp-includes/js/tinymce/langs/wp-langs.php:238 +msgid "No suggestions" +msgstr "No hay sugerencias" + +#: wp-includes/js/tinymce/langs/wp-langs.php:239 +msgid "No misspellings found." +msgstr "No hay errores ortográficos." + +#: wp-includes/js/tinymce/langs/wp-langs.php:244 +msgid "Insert Page Break" +msgstr "Insertar salto de página" + +#: wp-includes/js/tinymce/langs/wp-langs.php:271 +msgid "Font size" +msgstr "Tamaño de la fuente" + +#: wp-includes/js/tinymce/langs/wp-langs.php:272 +msgid "Font family" +msgstr "Familia de la fuente" + +#: wp-includes/js/tinymce/langs/wp-langs.php:273 +msgid "Format" +msgstr "Formato" + +#: wp-includes/js/tinymce/langs/wp-langs.php:274 +msgid "Paragraph" +msgstr "Párrafo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:275 +msgid "Div" +msgstr "Div" + +#: wp-includes/js/tinymce/langs/wp-langs.php:276 +#: wp-includes/js/tinymce/wp-mce-help.php:204 +msgid "Address" +msgstr "Dirección" + +#: wp-includes/js/tinymce/langs/wp-langs.php:277 +msgid "Preformatted" +msgstr "Preformateado" + +#: wp-includes/js/tinymce/langs/wp-langs.php:278 +#: wp-includes/js/tinymce/wp-mce-help.php:201 +msgid "Heading 1" +msgstr "Título 1" + +#: wp-includes/js/tinymce/langs/wp-langs.php:279 +#: wp-includes/js/tinymce/wp-mce-help.php:202 +msgid "Heading 2" +msgstr "Título 2" + +#: wp-includes/js/tinymce/langs/wp-langs.php:280 +#: wp-includes/js/tinymce/wp-mce-help.php:202 +msgid "Heading 3" +msgstr "Título 3" + +#: wp-includes/js/tinymce/langs/wp-langs.php:281 +#: wp-includes/js/tinymce/wp-mce-help.php:203 +msgid "Heading 4" +msgstr "Título 4" + +#: wp-includes/js/tinymce/langs/wp-langs.php:282 +#: wp-includes/js/tinymce/wp-mce-help.php:203 +msgid "Heading 5" +msgstr "Título 5" + +#: wp-includes/js/tinymce/langs/wp-langs.php:283 +#: wp-includes/js/tinymce/wp-mce-help.php:204 +msgid "Heading 6" +msgstr "Título 6" + +#: wp-includes/js/tinymce/langs/wp-langs.php:284 +msgid "Blockquote" +msgstr "Cita" + +#: wp-includes/js/tinymce/langs/wp-langs.php:285 +msgid "Code" +msgstr "Código" + +#: wp-includes/js/tinymce/langs/wp-langs.php:286 +msgid "Code sample" +msgstr "Código de ejemplo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:287 +msgid "Definition term " +msgstr "Definición del término" + +#: wp-includes/js/tinymce/langs/wp-langs.php:288 +msgid "Definition description" +msgstr "Definición de descripción" + +#: wp-includes/js/tinymce/wp-mce-help.php:200 +msgid "Bold" +msgstr "Negrita" + +#: wp-includes/js/tinymce/wp-mce-help.php:200 +msgid "Italic" +msgstr "Cursiva" + +#: wp-includes/js/tinymce/langs/wp-langs.php:291 +#: wp-includes/js/tinymce/wp-mce-help.php:201 +msgid "Underline" +msgstr "Subrayado" + +#: wp-includes/js/tinymce/wp-mce-help.php:212 +msgid "Strikethrough" +msgstr "Tachado" + +#: wp-includes/js/tinymce/wp-mce-help.php:210 +msgid "Align Left" +msgstr "Alinear a la izquierda" + +#: wp-includes/js/tinymce/wp-mce-help.php:211 +msgid "Align Center" +msgstr "Alinear al centro" + +#: wp-includes/js/tinymce/wp-mce-help.php:212 +msgid "Align Right" +msgstr "Alinear a la derecha" + +#: wp-includes/js/tinymce/langs/wp-langs.php:299 +msgid "Outdent" +msgstr "Disminuir margen" + +#: wp-includes/js/tinymce/langs/wp-langs.php:300 +msgid "Indent" +msgstr "Aumentar margen" + +#: wp-includes/js/tinymce/langs/wp-langs.php:306 +msgid "Cleanup messy code" +msgstr "Limpiar el código desordenado" + +#: wp-includes/js/tinymce/langs/wp-langs.php:307 +msgid "Edit HTML Source" +msgstr "Editar HTML" + +#: wp-includes/js/tinymce/langs/wp-langs.php:308 +msgid "Subscript" +msgstr "Subíndice" + +#: wp-includes/js/tinymce/langs/wp-langs.php:309 +msgid "Superscript" +msgstr "Superíndice" + +#: wp-includes/js/tinymce/langs/wp-langs.php:310 +msgid "Insert horizontal ruler" +msgstr "Insertar línea horizontal" + +#: wp-includes/js/tinymce/langs/wp-langs.php:311 +msgid "Remove formatting" +msgstr "Eliminar formato" + +#: wp-includes/js/tinymce/langs/wp-langs.php:312 +msgid "Select text color" +msgstr "Elegir color de texto" + +#: wp-includes/js/tinymce/langs/wp-langs.php:313 +msgid "Select background color" +msgstr "Elegir color de fondo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:314 +msgid "Insert custom character" +msgstr "Insertar carácter especial" + +#: wp-includes/js/tinymce/langs/wp-langs.php:315 +msgid "Toggle guidelines/invisible elements" +msgstr "Mostrar/Ocultar guías y otros elementos" + +#: wp-includes/js/tinymce/langs/wp-langs.php:316 +#: wp-includes/js/tinymce/langs/wp-langs.php:345 +msgid "Insert/edit anchor" +msgstr "Insertar/Editar anclaje" + +#: wp-includes/js/tinymce/langs/wp-langs.php:317 +#: wp-includes/js/tinymce/wp-mce-help.php:197 +msgid "Cut" +msgstr "Cortar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:318 +#: wp-includes/js/tinymce/wp-mce-help.php:196 +msgid "Copy" +msgstr "Copiar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:319 +#: wp-includes/js/tinymce/wp-mce-help.php:196 +msgid "Paste" +msgstr "Pegar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:320 +msgid "Image properties" +msgstr "Propiedades de la imagen" + +#: wp-includes/js/tinymce/langs/wp-langs.php:321 +msgid "New document" +msgstr "Nuevo documento" + +#: wp-includes/js/tinymce/langs/wp-langs.php:326 +msgid "Are you sure you want to clear all contents?" +msgstr "¿Seguro que quieres borrar todo el contenido?" + +#: wp-includes/js/tinymce/langs/wp-langs.php:327 +msgid "Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X" +msgstr "Ir a la herramienta de los botones - Alt + Q, Ir al editor - Alt-Z, Ir al elemento de la ruta - Alt-X" + +#: wp-includes/js/tinymce/langs/wp-langs.php:336 +#: wp-includes/js/tinymce/wp-mce-help.php:229 +msgid "About TinyMCE" +msgstr "Acerca de TinyMCE" + +#: wp-includes/js/tinymce/langs/wp-langs.php:339 +msgid "License" +msgstr "Licencia" + +#: wp-includes/js/tinymce/langs/wp-langs.php:344 +msgid "Loaded plugins" +msgstr "Plugins cargados" + +#: wp-includes/js/tinymce/langs/wp-langs.php:346 +msgid "Anchor name" +msgstr "Nombre del ancla" + +#: wp-includes/js/tinymce/langs/wp-langs.php:347 +msgid "HTML Source Editor" +msgstr "Editor HTML" + +#: wp-includes/js/tinymce/langs/wp-langs.php:348 +msgid "Word wrap" +msgstr "Ajuste de palabras" + +#: wp-includes/js/tinymce/langs/wp-langs.php:349 +msgid "Select a color" +msgstr "Elige un color" + +#: wp-includes/js/tinymce/langs/wp-langs.php:350 +msgid "Picker" +msgstr "Selector" + +#: wp-includes/js/tinymce/langs/wp-langs.php:351 +msgid "Color picker" +msgstr "Selector de color" + +#: wp-includes/js/tinymce/langs/wp-langs.php:352 +msgid "Palette" +msgstr "Paleta" + +#: wp-includes/js/tinymce/langs/wp-langs.php:353 +msgid "Palette colors" +msgstr "Paleta de colores" + +#: wp-includes/js/tinymce/langs/wp-langs.php:354 +msgid "Named" +msgstr "Nombrado" + +#: wp-includes/js/tinymce/langs/wp-langs.php:355 +msgid "Named colors" +msgstr "Nombre de los colores" + +#: wp-includes/js/tinymce/langs/wp-langs.php:356 +msgid "Color:" +msgstr "Color:" + +#: wp-includes/js/tinymce/langs/wp-langs.php:358 +msgid "Select custom character" +msgstr "Elegir un carácter especial" + +#: wp-includes/js/tinymce/langs/wp-langs.php:362 +msgid "Image description" +msgstr "Descripción de la imagen" + +#: wp-includes/js/tinymce/langs/wp-langs.php:363 +msgid "Image list" +msgstr "Lista de imágenes" + +#: wp-includes/js/tinymce/langs/wp-langs.php:364 +msgid "Border" +msgstr "Borde" + +#: wp-includes/js/tinymce/langs/wp-langs.php:365 +#: wp-includes/js/tinymce/langs/wp-langs.php:396 +msgid "Dimensions" +msgstr "Dimensiones" + +#: wp-includes/js/tinymce/langs/wp-langs.php:366 +msgid "Vertical space" +msgstr "Espacio vertical" + +#: wp-includes/js/tinymce/langs/wp-langs.php:367 +msgid "Horizontal space" +msgstr "Espacio horizontal" + +#: wp-includes/js/tinymce/langs/wp-langs.php:369 +msgid "Baseline" +msgstr "Linea base" + +#: wp-includes/js/tinymce/langs/wp-langs.php:370 +#: wp-includes/js/tinymce/langs/wp-langs.php:471 +msgid "Top" +msgstr "Arriba" + +#: wp-includes/js/tinymce/langs/wp-langs.php:371 +msgid "Middle" +msgstr "Intermedio" + +#: wp-includes/js/tinymce/langs/wp-langs.php:372 +#: wp-includes/js/tinymce/langs/wp-langs.php:473 +msgid "Bottom" +msgstr "Abajo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:373 +msgid "Text top" +msgstr "Texto superior" + +#: wp-includes/js/tinymce/langs/wp-langs.php:374 +msgid "Text bottom" +msgstr "Texto inferior" + +#: wp-includes/js/tinymce/langs/wp-langs.php:380 +msgid "Open link in the same window" +msgstr "Abrir el enlace en la misma ventana" + +#: wp-includes/js/tinymce/langs/wp-langs.php:381 +msgid "Open link in a new window" +msgstr "Abrir el enlace en una nueva ventana" + +#: wp-includes/js/tinymce/langs/wp-langs.php:383 +msgid "The URL you entered seems to be an email address, do you want to add the required mailto: prefix?" +msgstr "La URL que has introducido parece ser un correo electrónico, ¿quieres añadir el prefijo mailto:?" + +#: wp-includes/js/tinymce/langs/wp-langs.php:384 +msgid "The URL you entered seems to external link, do you want to add the required http:// prefix?" +msgstr "La URL especificada parece ser un enlace externo, ¿quieres añadir el prefijo http://?" + +#: wp-includes/js/tinymce/langs/wp-langs.php:385 +msgid "Link list" +msgstr "Lista de enlaces" + +#: wp-includes/js/tinymce/langs/wp-langs.php:392 +msgid "General" +msgstr "Generales" + +#: wp-includes/js/tinymce/langs/wp-langs.php:394 +msgid "File/URL" +msgstr "Archivo/URL" + +#: wp-includes/js/tinymce/langs/wp-langs.php:395 +#: wp-includes/js/tinymce/wp-mce-help.php:213 +#: wp-includes/js/tinymce/wp-mce-help.php:214 +msgid "List" +msgstr "Lista" + +#: wp-includes/js/tinymce/langs/wp-langs.php:398 +msgid "Constrain proportions" +msgstr "Mantener proporciones" + +#: wp-includes/js/tinymce/langs/wp-langs.php:399 +msgid "Type" +msgstr "Tipo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:400 +msgid "Id" +msgstr "Id" + +#: wp-includes/js/tinymce/langs/wp-langs.php:403 +msgid "V-Space" +msgstr "Espacio vertical" + +#: wp-includes/js/tinymce/langs/wp-langs.php:404 +msgid "H-Space" +msgstr "Espacio horizontal" + +#: wp-includes/js/tinymce/langs/wp-langs.php:405 +msgid "Auto play" +msgstr "Reproducción automática" + +#: wp-includes/js/tinymce/langs/wp-langs.php:406 +#: wp-includes/js/tinymce/langs/wp-langs.php:488 +msgid "Loop" +msgstr "Repetir" + +#: wp-includes/js/tinymce/langs/wp-langs.php:407 +msgid "Show menu" +msgstr "Mostrar menú" + +#: wp-includes/js/tinymce/langs/wp-langs.php:408 +msgid "Quality" +msgstr "Calidad" + +#: wp-includes/js/tinymce/langs/wp-langs.php:410 +#: wp-includes/media-template.php:441 +msgid "Align" +msgstr "Alineación" + +#: wp-includes/js/tinymce/langs/wp-langs.php:411 +msgid "SAlign" +msgstr "SAlign" + +#: wp-includes/js/tinymce/langs/wp-langs.php:412 +msgid "WMode" +msgstr "Modo de ventana" + +#: wp-includes/admin-bar.php:673 wp-includes/js/tinymce/langs/wp-langs.php:413 +msgid "Background" +msgstr "Fondo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:414 +msgid "Base" +msgstr "Base" + +#: wp-includes/js/tinymce/langs/wp-langs.php:415 +msgid "Flashvars" +msgstr "Flashvars" + +#: wp-includes/js/tinymce/langs/wp-langs.php:416 +msgid "SWLiveConnect" +msgstr "SWLiveConnect" + +#: wp-includes/js/tinymce/langs/wp-langs.php:417 +msgid "AutoHREF" +msgstr "AutoHREF" + +#: wp-includes/js/tinymce/langs/wp-langs.php:418 +msgid "Cache" +msgstr "Caché" + +#: wp-includes/js/tinymce/langs/wp-langs.php:419 +msgid "Hidden" +msgstr "Oculto" + +#: wp-includes/js/tinymce/langs/wp-langs.php:420 +msgid "Controller" +msgstr "Controlador" + +#: wp-includes/js/tinymce/langs/wp-langs.php:421 +msgid "Kiosk mode" +msgstr "Modo quiosco" + +#: wp-includes/js/tinymce/langs/wp-langs.php:422 +msgid "Play every frame" +msgstr "Reproducir todos los cuadros" + +#: wp-includes/js/tinymce/langs/wp-langs.php:423 +msgid "Target cache" +msgstr "Caché destino" + +#: wp-includes/js/tinymce/langs/wp-langs.php:424 +msgid "No correction" +msgstr "Sin corrección" + +#: wp-includes/js/tinymce/langs/wp-langs.php:425 +msgid "Enable JavaScript" +msgstr "Activar JavaScript" + +#: wp-includes/js/tinymce/langs/wp-langs.php:426 +#: wp-includes/js/tinymce/langs/wp-langs.php:484 +msgid "Start time" +msgstr "Hora de inicio" + +#: wp-includes/js/tinymce/langs/wp-langs.php:427 +msgid "End time" +msgstr "Hora de finalización" + +#: wp-includes/js/tinymce/langs/wp-langs.php:428 +msgid "href" +msgstr "href" + +#: wp-includes/js/tinymce/langs/wp-langs.php:429 +msgid "Choke speed" +msgstr "Velocidad de obstrucción" + +#: wp-includes/js/tinymce/langs/wp-langs.php:431 +msgid "Volume" +msgstr "Volumen" + +#: wp-includes/js/tinymce/langs/wp-langs.php:432 +#: wp-includes/js/tinymce/langs/wp-langs.php:487 +msgid "Auto start" +msgstr "Inicio automático" + +#: wp-includes/js/tinymce/langs/wp-langs.php:434 +#: wp-includes/script-loader.php:294 +msgid "Fullscreen" +msgstr "Pantalla completa" + +#: wp-includes/js/tinymce/langs/wp-langs.php:435 +msgid "Invoke URLs" +msgstr "Invocar URLs" + +#: wp-includes/js/tinymce/langs/wp-langs.php:436 +#: wp-includes/script-loader.php:303 +msgid "Mute" +msgstr "Silenciar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:437 +msgid "Stretch to fit" +msgstr "Estrechar para ajustar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:438 +msgid "Windowless video" +msgstr "Vídeo sin ventana" + +#: wp-includes/js/tinymce/langs/wp-langs.php:439 +msgid "Balance" +msgstr "Balance" + +#: wp-includes/js/tinymce/langs/wp-langs.php:440 +msgid "Base URL" +msgstr "URL base" + +#: wp-includes/js/tinymce/langs/wp-langs.php:441 +msgid "Captioning id" +msgstr "ID de captura" + +#: wp-includes/js/tinymce/langs/wp-langs.php:442 +msgid "Current marker" +msgstr "Marcador actual" + +#: wp-includes/js/tinymce/langs/wp-langs.php:443 +msgid "Current position" +msgstr "Posición actual" + +#: wp-includes/js/tinymce/langs/wp-langs.php:444 +msgid "Default frame" +msgstr "Marco por defecto" + +#: wp-includes/js/tinymce/langs/wp-langs.php:445 +msgid "Play count" +msgstr "Contador de reproducción" + +#: wp-includes/js/tinymce/langs/wp-langs.php:446 +msgid "Rate" +msgstr "Puntuar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:447 +msgid "UI Mode" +msgstr "Modo UI" + +#: wp-includes/js/tinymce/langs/wp-langs.php:448 +msgid "Flash options" +msgstr "Opciones del Flash" + +#: wp-includes/js/tinymce/langs/wp-langs.php:450 +msgid "Windows media player options" +msgstr "Opciones de Windows Media Player" + +#: wp-includes/js/tinymce/langs/wp-langs.php:451 +msgid "Real media player options" +msgstr "Opciones de Real Media Player" + +#: wp-includes/js/tinymce/langs/wp-langs.php:452 +msgid "Shockwave options" +msgstr "Opciones de Shockwave" + +#: wp-includes/js/tinymce/langs/wp-langs.php:453 +msgid "Auto goto URL" +msgstr "Ir automáticamente a la URL" + +#: wp-includes/js/tinymce/langs/wp-langs.php:455 +msgid "Image status" +msgstr "Estado de la Imagen" + +#: wp-includes/js/tinymce/langs/wp-langs.php:456 +msgid "Maintain aspect" +msgstr "Mantener aspecto" + +#: wp-includes/js/tinymce/langs/wp-langs.php:457 +msgid "No java" +msgstr "Sin java" + +#: wp-includes/js/tinymce/langs/wp-langs.php:458 +msgid "Prefetch" +msgstr "Prelectura" + +#: wp-includes/js/tinymce/langs/wp-langs.php:459 +msgid "Shuffle" +msgstr "Aleatorio" + +#: wp-includes/js/tinymce/langs/wp-langs.php:460 +msgid "Console" +msgstr "Consola" + +#: wp-includes/js/tinymce/langs/wp-langs.php:461 +msgid "Num loops" +msgstr "Bucles numéricos" + +#: wp-includes/js/tinymce/langs/wp-langs.php:462 +msgid "Controls" +msgstr "Controles" + +#: wp-includes/js/tinymce/langs/wp-langs.php:463 +msgid "Script callbacks" +msgstr "Llamadas de Script" + +#: wp-includes/js/tinymce/langs/wp-langs.php:464 +msgid "Stretch style" +msgstr "Estilo estirado" + +#: wp-includes/js/tinymce/langs/wp-langs.php:465 +msgid "Stretch H-Align" +msgstr "Estirar alineación horizontal" + +#: wp-includes/js/tinymce/langs/wp-langs.php:466 +msgid "Stretch V-Align" +msgstr "Estirar alineación vertical" + +#: wp-includes/js/tinymce/langs/wp-langs.php:467 +msgid "Sound" +msgstr "Sonido" + +#: wp-includes/js/tinymce/langs/wp-langs.php:468 +msgid "Progress" +msgstr "Progreso" + +#: wp-includes/js/tinymce/langs/wp-langs.php:469 +msgid "QT Src" +msgstr "Origen de QT" + +#: wp-includes/js/tinymce/langs/wp-langs.php:470 +msgid "Streamed rtsp resources should be added to the QT Src field under the advanced tab." +msgstr "Los recursos Rtsp deben añadirse en el campo Origen de QT en la pestaña de Ajustes avanzados." + +#: wp-includes/js/tinymce/langs/wp-langs.php:476 +msgid "Top left" +msgstr "Arriba izq." + +#: wp-includes/js/tinymce/langs/wp-langs.php:477 +msgid "Top right" +msgstr "Arriba dcha." + +#: wp-includes/js/tinymce/langs/wp-langs.php:478 +msgid "Bottom left" +msgstr "Abajo izq." + +#: wp-includes/js/tinymce/langs/wp-langs.php:479 +msgid "Bottom right" +msgstr "Abajo dcha." + +#: wp-includes/js/tinymce/langs/wp-langs.php:480 +msgid "Flash video options" +msgstr "Opciones del video Flash" + +#: wp-includes/js/tinymce/langs/wp-langs.php:481 +msgid "Scale mode" +msgstr "Modo de escala" + +#: wp-includes/js/tinymce/langs/wp-langs.php:482 +msgid "Buffer" +msgstr "Buffer" + +#: wp-includes/js/tinymce/langs/wp-langs.php:483 +msgid "Start image" +msgstr "Imagen de inicio" + +#: wp-includes/js/tinymce/langs/wp-langs.php:485 +msgid "Default volume" +msgstr "Volumen predeterminado" + +#: wp-includes/js/tinymce/langs/wp-langs.php:486 +msgid "Hidden GUI" +msgstr "Ocultar GUI" + +#: wp-includes/js/tinymce/langs/wp-langs.php:489 +msgid "Show scale modes" +msgstr "Mostrar modos de escala" + +#: wp-includes/js/tinymce/langs/wp-langs.php:490 +msgid "Smooth video" +msgstr "Suavizar vídeo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:491 +msgid "JS Callback" +msgstr "Llamada JS" + +#: wp-includes/js/tinymce/wp-mce-help.php:216 +msgid "Insert More Tag" +msgstr "Insertar etiqueta Más" + +#: wp-includes/js/tinymce/langs/wp-langs.php:505 +msgid "More..." +msgstr "Más..." + +#: wp-includes/js/tinymce/langs/wp-langs.php:506 +msgid "Next page..." +msgstr "Siguiente página..." + +#: wp-includes/js/tinymce/langs/wp-langs.php:511 wp-includes/media.php:1922 +msgid "Edit Gallery" +msgstr "Editar galería" + +#: wp-includes/js/tinymce/langs/wp-langs.php:512 +msgid "Delete Gallery" +msgstr "Eliminar galería" + +#: wp-includes/js/tinymce/langs/wp-langs.php:518 +msgid "Delete Image" +msgstr "Eliminar imagen" + +#: wp-includes/js/tinymce/langs/wp-langs.php:519 +msgid "Advanced Settings" +msgstr "Ajustes avanzados" + +#: wp-includes/js/tinymce/langs/wp-langs.php:525 +msgid "Current Link" +msgstr "Enlace actual" + +#: wp-includes/js/tinymce/langs/wp-langs.php:526 +msgid "Link to Image" +msgstr "Enlazar a imagen" + +#: wp-includes/js/tinymce/langs/wp-langs.php:528 +msgid "Advanced Image Settings" +msgstr "Ajustes avanzados de imágenes" + +#: wp-includes/js/tinymce/langs/wp-langs.php:497 +#: wp-includes/js/tinymce/langs/wp-langs.php:529 +msgid "Source" +msgstr "Fuente" + +#: wp-includes/js/tinymce/langs/wp-langs.php:532 +#: wp-includes/js/tinymce/langs/wp-langs.php:537 +msgid "Original Size" +msgstr "Tamaño original" + +#: wp-includes/js/tinymce/langs/wp-langs.php:533 +#: wp-includes/js/tinymce/langs/wp-langs.php:538 +msgid "CSS Class" +msgstr "Clase CSS" + +#: wp-includes/js/tinymce/langs/wp-langs.php:534 +msgid "Advanced Link Settings" +msgstr "Ajustes avanzados de enlaces" + +#: wp-includes/js/tinymce/langs/wp-langs.php:535 +msgid "Link Rel" +msgstr "Relación del enlace" + +#: wp-includes/js/tinymce/langs/wp-langs.php:539 +msgid "60%" +msgstr "60%" + +#: wp-includes/js/tinymce/langs/wp-langs.php:540 +msgid "70%" +msgstr "70%" + +#: wp-includes/js/tinymce/langs/wp-langs.php:541 +msgid "80%" +msgstr "80%" + +#: wp-includes/js/tinymce/langs/wp-langs.php:542 +msgid "90%" +msgstr "90%" + +#: wp-includes/js/tinymce/langs/wp-langs.php:543 +msgid "100%" +msgstr "100%" + +#: wp-includes/js/tinymce/langs/wp-langs.php:544 +msgid "110%" +msgstr "110%" + +#: wp-includes/js/tinymce/langs/wp-langs.php:545 +msgid "120%" +msgstr "120%" + +#: wp-includes/js/tinymce/langs/wp-langs.php:546 +msgid "130%" +msgstr "130%" + +#: wp-includes/js/tinymce/wp-mce-help.php:16 +msgid "Rich Editor Help" +msgstr "Ayuda del editor visual" + +#: wp-includes/js/tinymce/wp-mce-help.php:162 +msgid "Basics of Rich Editing" +msgstr "Uso básico del editor visual" + +#: wp-includes/js/tinymce/wp-mce-help.php:162 +msgid "Basics" +msgstr "Básico" + +#: wp-includes/js/tinymce/wp-mce-help.php:163 +msgid "Advanced use of the Rich Editor" +msgstr "Uso avanzado del Editor visual" + +#: wp-includes/js/tinymce/wp-mce-help.php:164 +msgid "Hotkeys" +msgstr "Atajos de teclado" + +#: wp-includes/js/tinymce/wp-mce-help.php:165 +msgid "About the software" +msgstr "Acerca del programa" + +#: wp-includes/js/tinymce/wp-mce-help.php:171 +msgid "Rich Editing Basics" +msgstr "Edición visual básica" + +#: wp-includes/js/tinymce/wp-mce-help.php:172 +msgid "Rich editing, also called WYSIWYG for What You See Is What You Get, means your text is formatted as you type. The rich editor creates HTML code behind the scenes while you concentrate on writing. Font styles, links and images all appear approximately as they will on the internet." +msgstr "La edición visual, también llamada WYSIWYG por What You See Is What You Get (en inglés, Lo Que Ves Es Lo Que Obtendrás), consiste en dar formato al texto a medida que lo escribes. El editor visual va creando el código HTML tras las bambalinas mientras tú te centras en escribir. Tipos de letra, enlaces e imágenes se ven tal y como aparecerán en Internet." + +#: wp-includes/js/tinymce/wp-mce-help.php:173 +msgid "WordPress includes a rich HTML editor that works well in all major web browsers used today. However editing HTML is not the same as typing text. Each web page has two major components: the structure, which is the actual HTML code and is produced by the editor as you type, and the display, that is applied to it by the currently selected WordPress theme and is defined in style.css. WordPress is producing valid XHTML 1.0 which means that inserting multiple line breaks (BR tags) after a paragraph would not produce white space on the web page. The BR tags will be removed as invalid by the internal HTML correcting functions." +msgstr "WordPress incluye un editor HTML que suele funcionar bien en los principales navegadores utilizados en la actualidad. Sin embargo, la edición de HTML no es tan fiable como escribir texto. Cada página Web tiene dos componentes principales: la estructura, que es el actual código HTML y es producido por el editor a partir de los que estás escribiendo, y el diseño, que se aplica a ella por el tema seleccionado WordPress y se define en el style.css. Además WordPress válida XHTML 1.0, lo que significa que no se puede mostrar el control de los elementos estructurales. Por lo tanto, la inserción de varios saltos de línea (BR etiquetas) después de un párrafo no da lugar a espacios en blanco en la página web final. La etiquetas BR serán eliminadas como incorrectas por las funciones de corrección." + +#: wp-includes/js/tinymce/wp-mce-help.php:174 +msgid "While using the editor, most basic keyboard shortcuts work like in any other text editor. For example: Shift+Enter inserts line break, Ctrl+C = copy, Ctrl+X = cut, Ctrl+Z = undo, Ctrl+Y = redo, Ctrl+A = select all, etc. (on Mac use the Command key instead of Ctrl). See the Hotkeys tab for all available keyboard shortcuts." +msgstr "Si sueles usar el editor, la mayoría de las combinaciones de teclas básicas funcionan como en cualquier otro editor de texto. Por ejemplo: Shift + Enter inserta un salto de línea, Ctrl + C = copiar, Ctrl + X = cortar, Ctrl + Z = deshacer, Ctrl + Y = rehacer, Ctrl + A = seleccionar todo, etc (en Mac usar la tecla Comando en lugar de Ctrl). Puedes ver la lista de teclas rápidas para todos los atajos de teclado." + +#: wp-includes/js/tinymce/wp-mce-help.php:175 +msgid "If you do not like the way the rich editor works, you may turn it off from Your Profile submenu, under Users in the admin menu." +msgstr "Si no te gusta la forma en que trabaja el editor visual, podrás desactivarlo desde el submenu de tu perfil, en el menú usuario en la administración." + +#: wp-includes/js/tinymce/wp-mce-help.php:179 +msgid "Advanced Rich Editing" +msgstr "Edición visual avanzada" + +#: wp-includes/js/tinymce/wp-mce-help.php:180 +msgid "Images and Attachments" +msgstr "Imágenes y archivos" + +#: wp-includes/js/tinymce/wp-mce-help.php:181 +msgid "There is a button in the editor toolbar for inserting images that are already hosted somewhere on the internet. If you have a URL for an image, click this button and enter the URL in the box which appears." +msgstr "En la barra de herramientas del editor hay un botón para insertar imágenes hospedadas en cualquier sitio de Internet. Si tienes el URL de una imagen, haz clic en ese botón y escríbelo en la ventana que aparecerá." + +#: wp-includes/js/tinymce/wp-mce-help.php:183 +msgid "HTML in the Rich Editor" +msgstr "HTML en el editor visual" + +#: wp-includes/js/tinymce/wp-mce-help.php:185 +msgid "Pasting in the Rich Editor" +msgstr "Pegando en el editor visual" + +#: wp-includes/js/tinymce/wp-mce-help.php:191 +msgid "Writing at Full Speed" +msgstr "Escribir a toda velocidad" + +#: wp-includes/js/tinymce/wp-mce-help.php:192 +msgid "Rather than reaching for your mouse to click on the toolbar, use these access keys. Windows and Linux use Ctrl + letter. Macintosh uses Command + letter." +msgstr "En lugar de mover el ratón para hacer clic en la barra de herramientas, usa estas teclas de acceso rápido. En Windows y Linux usa Ctrl+letra. En Macintosh usa Comando+letra." + +#: wp-includes/js/tinymce/wp-mce-help.php:195 +#: wp-includes/js/tinymce/wp-mce-help.php:209 +msgid "Letter" +msgstr "Letra" + +#: wp-includes/js/tinymce/wp-mce-help.php:195 +#: wp-includes/js/tinymce/wp-mce-help.php:209 +msgid "Action" +msgstr "Acción" + +#: wp-includes/js/tinymce/wp-mce-help.php:197 +msgid "Select all" +msgstr "Seleccionar todos" + +#: wp-includes/js/tinymce/wp-mce-help.php:207 +msgid "The following shortcuts use different access keys: Alt + Shift + letter." +msgstr "Los siguientes atajos utilizan claves de acceso diferentes: Alt + Shift + letra." + +#: wp-includes/js/tinymce/wp-mce-help.php:210 +msgid "Check Spelling" +msgstr "Comprobar ortografía" + +#: wp-includes/js/tinymce/wp-mce-help.php:211 +msgid "Justify Text" +msgstr "Justificar texto" + +#: wp-includes/js/tinymce/wp-mce-help.php:213 +msgid "Insert link" +msgstr "Insertar enlace" + +#: wp-includes/js/tinymce/wp-mce-help.php:214 +msgid "Remove link" +msgstr "Borrar enlace" + +#: wp-includes/js/tinymce/wp-mce-help.php:215 +msgid "Quote" +msgstr "Cita" + +#: wp-includes/js/tinymce/wp-mce-help.php:217 +msgid "Insert Page Break tag" +msgstr "Insertar etiqueta de salto de página" + +#: wp-includes/js/tinymce/wp-mce-help.php:237 +msgid "Got Moxie?" +msgstr "¿Tienes Moxie?" + +#: wp-includes/link-template.php:514 +msgid "Comments Feed" +msgstr "Feed de comentarios" + +#: wp-includes/link-template.php:1233 wp-includes/link-template.php:1453 +msgid "Previous Post" +msgstr "Entrada anterior" + +#: wp-includes/link-template.php:1233 wp-includes/link-template.php:1453 +msgid "Next Post" +msgstr "Entrada siguiente" + +#: wp-includes/deprecated.php:2718 +msgid "Last Post" +msgstr "Última entrada" + +#: wp-includes/link-template.php:1829 +msgid "Newer Comments »" +msgstr "Últimos comentarios »" + +#: wp-includes/link-template.php:1866 +msgid "« Older Comments" +msgstr "« Comentarios más viejos" + +#: wp-includes/locale.php:109 +msgid "S_Sunday_initial" +msgstr "D" + +#: wp-includes/locale.php:110 +msgid "M_Monday_initial" +msgstr "L" + +#: wp-includes/locale.php:111 +msgid "T_Tuesday_initial" +msgstr "M" + +#: wp-includes/locale.php:112 +msgid "W_Wednesday_initial" +msgstr "X" + +#: wp-includes/locale.php:113 +msgid "T_Thursday_initial" +msgstr "J" + +#: wp-includes/locale.php:114 +msgid "F_Friday_initial" +msgstr "V" + +#: wp-includes/locale.php:115 +msgid "S_Saturday_initial" +msgstr "S" + +#: wp-includes/locale.php:164 +msgid "am" +msgstr "am" + +#: wp-includes/locale.php:165 +msgid "pm" +msgstr "pm" + +#: wp-includes/locale.php:166 +msgid "AM" +msgstr "AM" + +#: wp-includes/locale.php:167 +msgid "PM" +msgstr "PM" + +#: wp-includes/locale.php:173 +msgid "number_format_thousands_sep" +msgstr "." + +#: wp-includes/class-wp-image-editor-imagick.php:198 +msgid "Could not read image size" +msgstr "No se pudo leer el tamaño de imagen" + +#: wp-includes/ms-functions.php:265 +msgid "That user does not exist." +msgstr "Este usuario no existe" + +#: wp-includes/ms-functions.php:483 +msgid "You cannot use that email address to signup. We are having problems with them blocking some of our email. Please use another email provider." +msgstr "No puedes usar este correo electrónico para registrarte. Estamos teniendo problemas con él, bloquea nuestros correos electrónicos. Por favor, usa otro proveedor." + +#: wp-includes/ms-functions.php:493 +msgid "Sorry, usernames must have letters too!" +msgstr "Disculpa, el nombre de usuario, también debe contener letras." + +#: wp-includes/ms-functions.php:502 +msgid "Sorry, that email address is not allowed!" +msgstr "Disculpa, este correo electrónico no está permitido" + +#: wp-includes/ms-functions.php:507 wp-includes/user.php:1329 +msgid "Sorry, that username already exists!" +msgstr "Disculpa, este usuario ya existe." + +#: wp-includes/ms-functions.php:511 wp-includes/user.php:1344 +msgid "Sorry, that email address is already used!" +msgstr "Disculpa, este correo electrónico ya está en uso." + +#: wp-includes/ms-functions.php:523 +msgid "That username is currently reserved but may be available in a couple of days." +msgstr "Este nombre de usuario está reservado, pero podría estar libre en un par de días" + +#: wp-includes/ms-functions.php:533 +msgid "That email address has already been used. Please check your inbox for an activation email. It will become available in a couple of days if you do nothing." +msgstr "Este correo electrónico ya ha sido usado. Por favor, comprueba tu bandeja de entrada. Podría estar libre en un par de días si no haces nada." + +#: wp-includes/ms-functions.php:987 +msgid "Invalid activation key." +msgstr "Clave de activación inválida" + +#: wp-includes/ms-functions.php:1007 +msgid "Could not create user" +msgstr "No podemos crear el usuario" + +#: wp-includes/ms-functions.php:1015 +msgid "That username is already activated." +msgstr "Este usuario, ya está activado." + +#: wp-includes/ms-functions.php:1273 +msgid "New User Registration: %s" +msgstr "Nuevo registro de usuario: %s" + +#: wp-includes/ms-functions.php:1589 +msgid "New %1$s User: %2$s" +msgstr "Nuevo %1$s usuario: %2$s" + +#: wp-includes/ms-functions.php:2109 +msgid "" +"Dear User,\n" +"\n" +"Your new account is set up.\n" +"\n" +"You can log in with the following information:\n" +"Username: USERNAME\n" +"Password: PASSWORD\n" +"LOGINLINK\n" +"\n" +"Thanks!\n" +"\n" +"--The Team @ SITE_NAME" +msgstr "" +"Apreciado usuario,\n" +"\n" +"Tu nueva cuenta está configurada.\n" +"\n" +"Puedes identificarte con la siguiente información:\n" +"Usuario: USERNAME\n" +"Clave: PASSWORD\n" +"LOGINLINK\n" +"\n" +"¡Gracias!\n" +"\n" +"--El equipo de SITE_NAME" + +#: wp-includes/ms-load.php:95 +msgid "This user has elected to delete their account and the content is no longer available." +msgstr "Este usuario ha decidido eliminar su cuenta y ya no están los contenidos." + +#: wp-includes/ms-settings.php:121 +msgid "Database tables are missing." +msgstr "No se encuentran tablas de la base de datos." + +#: wp-includes/pluggable.php:474 +msgid "ERROR: Invalid username or incorrect password." +msgstr "ERROR: El nombre de usuario y/o la contraseña no son correctos." + +#: wp-includes/pluggable.php:1113 wp-includes/pluggable.php:1215 +msgid "Author : %1$s (IP: %2$s , %3$s)" +msgstr "Autor : %1$s (IP: %2$s , %3$s)" + +#: wp-includes/pluggable.php:1114 wp-includes/pluggable.php:1216 +msgid "E-mail : %s" +msgstr "Correo electrónico : %s" + +#: wp-includes/pluggable.php:1094 wp-includes/pluggable.php:1104 +#: wp-includes/pluggable.php:1115 wp-includes/pluggable.php:1202 +#: wp-includes/pluggable.php:1209 wp-includes/pluggable.php:1217 +msgid "URL : %s" +msgstr "URL : %s" + +#: wp-includes/pluggable.php:1117 wp-includes/pluggable.php:1219 +msgid "Comment: " +msgstr "Comentario:" + +#: wp-includes/pluggable.php:1118 +msgid "You can see all comments on this post here: " +msgstr "Puedes ver todos los comentarios de esta entrada aquí:" + +#: wp-includes/pluggable.php:1120 +msgid "[%1$s] Comment: \"%2$s\"" +msgstr "[%1$s] Comentario: \"%2$s\"" + +#: wp-includes/pluggable.php:1093 wp-includes/pluggable.php:1103 +msgid "Website: %1$s (IP: %2$s , %3$s)" +msgstr "Sitio web: %1$s (IP: %2$s , %3$s)" + +#: wp-includes/pluggable.php:1095 wp-includes/pluggable.php:1105 +msgid "Excerpt: " +msgstr "Extracto:" + +#: wp-includes/pluggable.php:1096 +msgid "You can see all trackbacks on this post here: " +msgstr "Puedes ver todos los trackbacks de esta entrada aquí:" + +#: wp-includes/pluggable.php:1098 +msgid "[%1$s] Trackback: \"%2$s\"" +msgstr "[%1$s] Trackback: \"%2$s\"" + +#: wp-includes/pluggable.php:1106 +msgid "You can see all pingbacks on this post here: " +msgstr "Puede ver todos los pingback de esta entrada aquí:" + +#: wp-includes/pluggable.php:1108 +msgid "[%1$s] Pingback: \"%2$s\"" +msgstr "[%1$s] Pingback: \"%2$s\"" + +#: wp-includes/pluggable.php:1128 wp-includes/pluggable.php:1225 +msgid "Trash it: %s" +msgstr "Enviar a la papelera: %s" + +#: wp-includes/pluggable.php:1130 wp-includes/pluggable.php:1227 +msgid "Delete it: %s" +msgstr "Borrarlo: %s" + +#: wp-includes/pluggable.php:1131 wp-includes/pluggable.php:1228 +msgid "Spam it: %s" +msgstr "Marcarlo como spam: %s" + +#: wp-includes/pluggable.php:1201 wp-includes/pluggable.php:1208 +msgid "Website : %1$s (IP: %2$s , %3$s)" +msgstr "Sitio web : %1$s (IP: %2$s , %3$s)" + +#: wp-includes/pluggable.php:1203 +msgid "Trackback excerpt: " +msgstr "Extracto del trackback:" + +#: wp-includes/pluggable.php:1210 +msgid "Pingback excerpt: " +msgstr "Extracto del pingback:" + +#: wp-includes/pluggable.php:1223 +msgid "Approve it: %s" +msgstr "Aprobarlo: %s" + +#: wp-includes/pluggable.php:1230 +msgid "Currently %s comment is waiting for approval. Please visit the moderation panel:" +msgid_plural "Currently %s comments are waiting for approval. Please visit the moderation panel:" +msgstr[0] "Actualmente hay %s comentario en espera de aprobación. Por favor visita el panel de moderación:" +msgstr[1] "Actualmente hay %s comentarios en espera de aprobación. Por favor visita el panel de moderación:" + +#: wp-includes/pluggable.php:1234 +msgid "[%1$s] Please moderate: \"%2$s\"" +msgstr "[%1$s] Pendientes de moderación: \"%2$s\"" + +#: wp-includes/pluggable.php:1262 +msgid "Password Lost and Changed for user: %s" +msgstr "Contraseña perdida y cambiada para el usuario: %s" + +#: wp-includes/pluggable.php:1266 +msgid "[%s] Password Lost/Changed" +msgstr "[%s] Contraseña Perdida/Cambiada" + +#: wp-includes/pluggable.php:1288 wp-includes/pluggable.php:1296 +#: wp-login.php:361 +msgid "Username: %s" +msgstr "Nombre de usuario: %s" + +#: wp-includes/pluggable.php:1291 +msgid "[%s] New User Registration" +msgstr "[%s] Registro de nuevo usuario" + +#: wp-includes/pluggable.php:1297 +msgid "Password: %s" +msgstr "Contraseña: %s" + +#: wp-includes/pluggable.php:1300 +msgid "[%s] Your username and password" +msgstr "[%s] Tu nombre de usuario y contraseña" + +#: wp-includes/post-template.php:110 +msgid "Protected: %s" +msgstr "Protegido: %s" + +#: wp-includes/post-template.php:113 +msgid "Private: %s" +msgstr "Privado: %s" + +#: wp-includes/post-template.php:272 +msgid "There is no excerpt because this is a protected post." +msgstr "No hay extracto porque es una entrada protegida." + +#: wp-includes/post-template.php:646 +msgid "Next page" +msgstr "Página siguiente" + +#: wp-includes/post-template.php:647 +msgid "Previous page" +msgstr "Página anterior" + +#: wp-includes/post-template.php:910 +msgid "Home" +msgstr "Inicio" + +#: wp-includes/post-template.php:1328 +msgctxt "revision date format" +msgid "j F, Y @ G:i" +msgstr "j F, Y @ G:i" + +#: wp-includes/post-template.php:1385 +msgid "%1$s [Autosave]" +msgstr "%s [Autoguardado]" + +#: wp-includes/post-template.php:1386 +msgid "%1$s [Current Revision]" +msgstr "%s [Revisión Actual]" + +#: wp-includes/post.php:81 +msgid "Revision" +msgstr "Revisión" + +#: wp-includes/post.php:110 +msgctxt "post" +msgid "Published" +msgstr "Publicada" + +#: wp-includes/post.php:113 +msgid "Published (%s)" +msgid_plural "Published (%s)" +msgstr[0] "Publicada (%s)" +msgstr[1] "Publicadas (%s)" + +#: wp-includes/post.php:117 +msgctxt "post" +msgid "Scheduled" +msgstr "Programada" + +#: wp-includes/post.php:120 +msgid "Scheduled (%s)" +msgid_plural "Scheduled (%s)" +msgstr[0] "Programada (%s)" +msgstr[1] "Programadas (%s)" + +#: wp-includes/post.php:124 +msgctxt "post" +msgid "Draft" +msgstr "Borrador" + +#: wp-includes/post.php:127 +msgid "Draft (%s)" +msgid_plural "Drafts (%s)" +msgstr[0] "Borrador (%s)" +msgstr[1] "Borradores (%s)" + +#: wp-includes/post.php:131 +msgctxt "post" +msgid "Pending" +msgstr "Pendiente" + +#: wp-includes/post.php:134 +msgid "Pending (%s)" +msgid_plural "Pending (%s)" +msgstr[0] "Pendiente (%s)" +msgstr[1] "Pendientes (%s)" + +#: wp-includes/post.php:138 +msgctxt "post" +msgid "Private" +msgstr "Privada" + +#: wp-includes/post.php:141 +msgid "Private (%s)" +msgid_plural "Private (%s)" +msgstr[0] "Privada (%s)" +msgstr[1] "Privadas (%s)" + +#: wp-includes/post.php:145 +msgctxt "post" +msgid "Trash" +msgstr "Papelera" + +#: wp-includes/post.php:148 +msgid "Trash (%s)" +msgid_plural "Trash (%s)" +msgstr[0] "Papelera (%s)" +msgstr[1] "Papelera (%s)" + +#: wp-includes/post.php:2750 +msgid "Content, title, and excerpt are empty." +msgstr "Contenido, título y extracto están vacios." + +#: wp-includes/post.php:2882 +msgid "Could not update post in the database" +msgstr "No ha sido posible actualizar la entrada en la base de datos" + +#: wp-includes/post.php:2898 +msgid "Could not insert post into the database" +msgstr "No ha sido posible insertar la entrada en la base de datos" + +#: wp-includes/post.php:2945 +msgid "The page template is invalid." +msgstr "La plantilla de la página no es válida." + +#: wp-includes/revision.php:230 +msgid "Cannot create a revision of a revision" +msgstr "No se puede crear una revisión de una revisión" + +#: wp-includes/revision.php:468 +msgid "You do not have permission to preview drafts." +msgstr "No tienes autorización para previsualizar borradores." + +#: wp-includes/user.php:1326 +msgid "Cannot create a user with an empty login name." +msgstr "No se puede crear un usuario con el nombre de identificación vacio." + +#: wp-includes/user.php:1555 +msgid "AIM" +msgstr "AIM" + +#: wp-includes/user.php:1556 +msgid "Yahoo IM" +msgstr "Yahoo IM" + +#: wp-includes/user.php:1557 +msgid "Jabber / Google Talk" +msgstr "Jabber / Google Talk" + +#: wp-includes/default-widgets.php:853 wp-includes/rss.php:899 +msgid "An error has occurred, which probably means the feed is down. Try again later." +msgstr "Ha ocurrido un error, probablemente el feed esté caído. Inténtalo de nuevo más tarde." + +#: wp-includes/script-loader.php:77 +msgid "" +"You are about to permanently delete the selected items.\n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Estás a punto de borrar permanentemente los elementos seleccionados. \n" +" 'Aceptar' para borrar, 'Cancelar' para salir." + +#: wp-includes/script-loader.php:84 +msgid "Close all open tags" +msgstr "Cerrar todas las etiquetas abiertas" + +#: wp-includes/script-loader.php:85 +msgid "close tags" +msgstr "cerrar etiquetas" + +#: wp-includes/script-loader.php:86 +msgid "Enter the URL" +msgstr "Introduce la URL" + +#: wp-includes/script-loader.php:87 +msgid "Enter the URL of the image" +msgstr "Introduce la URL de la imagen" + +#: wp-includes/script-loader.php:88 +msgid "Enter a description of the image" +msgstr "Introduce una descripción de la imagen" + +#: wp-includes/script-loader.php:103 wp-includes/script-loader.php:396 +msgid "You do not have permission to do that." +msgstr "No tienes autorización para hacer eso." + +#: wp-includes/script-loader.php:104 wp-includes/script-loader.php:397 +msgid "An unidentified error has occurred." +msgstr "Ha ocurrido un error no identificado." + +#: wp-includes/script-loader.php:200 +msgid "Next >" +msgstr "Siguiente >" + +#: wp-includes/script-loader.php:201 +msgid "< Prev" +msgstr "< Anterior" + +#: wp-includes/script-loader.php:202 +msgid "Image" +msgstr "Imagen" + +#: wp-includes/script-loader.php:203 +msgid "of" +msgstr "de" + +#: wp-includes/script-loader.php:205 +msgid "This feature requires inline frames. You have iframes disabled or your browser does not support them." +msgstr "Esta función requiere de frames insertados. Tienes los iframes desactivados o tu navegador no los soporta." + +#: wp-includes/script-loader.php:217 +msgid "not configured" +msgstr "sin configurar" + +#: wp-includes/script-loader.php:221 +msgid "You have attempted to queue too many files." +msgstr "Has intentado poner en cola demasiados archivos." + +#: wp-includes/script-loader.php:223 +msgid "This file is empty. Please try another." +msgstr "Este archivo está vacio. Por favor, prueba con otro." + +#: wp-includes/script-loader.php:224 +msgid "This file type is not allowed. Please try another." +msgstr "Este tipo de archivo no está permitido. Por favor, prueba con otro." + +#: wp-includes/script-loader.php:228 +msgid "An error occurred in the upload. Please try again later." +msgstr "Ha habido un error en la subida. Por favor inténtalo más tarde." + +#: wp-includes/script-loader.php:229 +msgid "There was a configuration error. Please contact the server administrator." +msgstr "Ha habido un problema con la configuración. Por favor, contacta con el administrador del servidor." + +#: wp-includes/script-loader.php:230 +msgid "You may only upload 1 file." +msgstr "Sólo puedes subir 1 archivo." + +#: wp-includes/script-loader.php:231 +msgid "HTTP error." +msgstr "Error HTTP." + +#: wp-includes/script-loader.php:232 +msgid "Upload failed." +msgstr "Falló la subida." + +#: wp-includes/script-loader.php:235 +msgid "IO error." +msgstr "Error de entrada/salida." + +#: wp-includes/script-loader.php:236 +msgid "Security error." +msgstr "Error de seguridad." + +#: wp-includes/script-loader.php:238 +msgid "Upload stopped." +msgstr "Subida detenida." + +#: wp-includes/script-loader.php:240 +msgid "Crunching…" +msgstr "Calculando…" + +#: wp-includes/script-loader.php:241 +msgid "moved to the trash." +msgstr "movidos a la papelera." + +#: wp-includes/script-loader.php:325 +msgctxt "password strength" +msgid "Medium" +msgstr "Medio" + +#: wp-includes/script-loader.php:416 +msgid "Publish on:" +msgstr "Publicar el:" + +#: wp-includes/script-loader.php:417 +msgid "Schedule for:" +msgstr "Programar para el:" + +#: wp-includes/script-loader.php:418 +msgid "Published on:" +msgstr "Publicada el:" + +#: wp-includes/script-loader.php:421 +msgid "Show more comments" +msgstr "Mostrar más comentarios" + +#: wp-includes/script-loader.php:422 +msgid "No more comments found." +msgstr "No hay más comentarios." + +#: wp-includes/script-loader.php:431 +msgid "Password Protected" +msgstr "Protegida con contraseña" + +#: wp-includes/script-loader.php:442 +msgid "Submitted on:" +msgstr "Enviado el:" + +#: wp-includes/script-loader.php:457 wp-includes/script-loader.php:465 +msgid "Error while saving the changes." +msgstr "Error al guardar los cambios." + +#: wp-includes/script-loader.php:458 +msgid "Remove From Bulk Edit" +msgstr "Borrar desde la edición en bloque" + +#: wp-includes/script-loader.php:470 +msgid "Plugin Information:" +msgstr "Información del plugin:" + +#: wp-includes/script-loader.php:499 +msgid "Saving..." +msgstr "Guardando..." + +#: wp-includes/script-loader.php:500 +msgid "Could not set that as the thumbnail image. Try a different attachment." +msgstr "No se pudo establecer como imagen de miniatura. Prueba con otro adjunto." + +#: wp-includes/script-loader.php:658 +msgid "Saving Draft…" +msgstr "Guardando borrador…" + +#: wp-includes/taxonomy.php:2374 +msgid "Invalid Taxonomy" +msgstr "Taxonomía no válida" + +#: wp-includes/taxonomy.php:938 wp-includes/taxonomy.php:3170 +msgid "Empty Term" +msgstr "Término vacío" + +#: wp-includes/class-wp-xmlrpc-server.php:1137 +#: wp-includes/class-wp-xmlrpc-server.php:1654 +#: wp-includes/class-wp-xmlrpc-server.php:1741 +#: wp-includes/class-wp-xmlrpc-server.php:1808 wp-includes/taxonomy.php:2130 +msgid "Invalid term ID" +msgstr "ID del término no válido" + +#: wp-includes/taxonomy.php:2133 wp-includes/taxonomy.php:2547 +msgid "A name is required for this term" +msgstr "Este término necesita un nombre." + +#: wp-includes/taxonomy.php:2181 wp-includes/taxonomy.php:2188 +#: wp-includes/taxonomy.php:2198 +msgid "Could not insert term into the database" +msgstr "No ha sido posible insertar el término en la base de datos." + +#: wp-includes/taxonomy.php:2580 +msgid "The slug “%s” is already in use by another term" +msgstr "El slug “%s” lo está utilizando ya otro término." + +#: wp-includes/taxonomy.php:3331 +msgid "Invalid object ID" +msgstr "El ID del objeto no es válido" + +#: wp-includes/class-wp-theme.php:246 +msgid "Template is missing." +msgstr "Falta la plantilla." + +#: wp-includes/class-wp-theme.php:265 +msgid "The parent theme is missing. Please install the \"%s\" parent theme." +msgstr "No encontramos el tema principal. Por favor, instala el tema principal \"%s\"." + +#: wp-includes/class-wp-theme.php:220 +msgid "Stylesheet is missing." +msgstr "Falta la hoja de estilo." + +#: wp-includes/user.php:82 +msgid "ERROR: The username field is empty." +msgstr "ERROR: El campo Nombre de usuario está vacío." + +#: wp-includes/user.php:85 +msgid "ERROR: The password field is empty." +msgstr "ERROR: El campo contraseña está vacío." + +#: wp-includes/user.php:93 +msgid "ERROR: Invalid username. Lost your password?" +msgstr "ERROR: El usuario es incorrecto. ¿La has olvidado?" + +#: wp-includes/user.php:144 +msgid "ERROR: Your account has been marked as a spammer." +msgstr "ERROR: Tu cuenta ha sido marcada como spammer." + +#: wp-includes/functions.php:4082 wp-includes/user.php:125 +msgid "Please log in again." +msgstr "Por favor, accede de nuevo." + +#: wp-includes/widgets.php:488 wp-includes/widgets.php:558 +msgid "Sidebar %d" +msgstr "Barra lateral %d" + +#: wp-includes/wp-db.php:1675 +msgid "ERROR: WordPress %1$s requires MySQL %2$s or higher" +msgstr "ERROR: WordPress %1$s necesita MySQL %2$s o superior." + +#: wp-login.php:102 +msgid "Powered by WordPress" +msgstr "Funciona gracias a WordPress" + +#: wp-login.php:276 +msgid "ERROR: Enter a username or e-mail address." +msgstr "ERROR: escribe un nombre de usuario o correo electrónico." + +#: wp-login.php:280 +msgid "ERROR: There is no user registered with that email address." +msgstr "ERROR: no hay ningún usuario registrado con esa dirección de correo electrónico." + +#: wp-login.php:297 +msgid "ERROR: Invalid username or e-mail." +msgstr "ERROR: el nombre de usuario o el correo electrónico no son correctos." + +#: wp-login.php:334 +msgid "Password reset is not allowed for this user" +msgstr "El restablecimiento de contraseña no está permitido para este usuario" + +#: wp-login.php:373 +msgid "[%s] Password Reset" +msgstr "[%s] Restablecer contraseña" + +#: wp-login.php:394 +msgid "The e-mail could not be sent." +msgstr "No se pudo enviar el correo electrónico" + +#: wp-includes/user.php:1602 wp-includes/user.php:1605 +#: wp-includes/user.php:1609 wp-includes/user.php:1620 +#: wp-includes/user.php:1636 +msgid "Invalid key" +msgstr "Clave no válida." + +#: wp-includes/user.php:1679 +msgid "ERROR: Please type your e-mail address." +msgstr "ERROR: Por favor, escribe tu correo electrónico." + +#: wp-includes/user.php:1681 +msgid "ERROR: The email address isn’t correct." +msgstr "ERROR: La dirección de correo electrónico no es correcta." + +#: wp-login.php:499 +msgid "Sorry, that key does not appear to be valid." +msgstr "Disculpa, la contraseña no es válida." + +#: wp-login.php:521 +msgid "Lost Password" +msgstr "Contraseña perdida" + +#: wp-login.php:529 +msgid "Username or E-mail:" +msgstr "Nombre de usuario o correo electrónico:" + +#: wp-login.php:540 +msgid "Get New Password" +msgstr "Obtener una contraseña nueva" + +#: wp-login.php:218 +msgid "Are you lost?" +msgstr "¿Te has perdido?" + +#: wp-login.php:218 +msgid "← Back to %s" +msgstr "« Volver a %s" + +#: wp-login.php:679 +msgid "Registration Form" +msgstr "Formulario de registro" + +#: wp-login.php:679 +msgid "Register For This Site" +msgstr "Regístrate en este sitio" + +#: wp-login.php:699 +msgid "A password will be e-mailed to you." +msgstr "Recibirás una contraseña en este correo electrónico." + +#: wp-login.php:707 wp-login.php:882 +msgid "Password Lost and Found" +msgstr "Recupera tu contraseña perdida" + +#: wp-login.php:707 wp-login.php:882 +msgid "Lost your password?" +msgstr "¿Has perdido tu contraseña?" + +#: wp-login.php:769 +msgid "You have logged in successfully." +msgstr "Te has conectado con éxito." + +#: wp-login.php:751 +msgid "ERROR: Cookies are blocked or not supported by your browser. You must enable cookies to use WordPress." +msgstr "ERROR: Las Cookies están bloqueadas o no las soporta tu navegador. Debes habilitar las cookies para usar WordPress." + +#: wp-login.php:807 +msgid "You are now logged out." +msgstr "Ahora estás desconectado." + +#: wp-login.php:809 +msgid "User registration is currently not allowed." +msgstr "No se permite el registro de nuevos usuarios." + +#: wp-login.php:811 +msgid "Check your e-mail for the confirmation link." +msgstr "Revisa tu correo electrónico para obtener el enlace de confirmación." + +#: wp-login.php:813 +msgid "Check your e-mail for your new password." +msgstr "Revisa tu correo electrónico para obtener la contraseña nueva." + +#: wp-login.php:815 +msgid "Registration complete. Please check your e-mail." +msgstr "Registro completo. Por favor, revisa tu correo electrónico." + +#: wp-mail.php:34 +msgid "Slow down cowboy, no need to check for new mails so often!" +msgstr "¡Tranquilo, campeón! ¡No hace falta comprobar el correo tan a menudo!" + +#: wp-mail.php:54 +msgid "There doesn’t seem to be any new mail." +msgstr "Parece que no hay ningún correo electrónico nuevo." + +#: wp-mail.php:120 +msgid "Author is %s" +msgstr "El autor es %s" + +#: wp-mail.php:244 +msgid "Author: %s" +msgstr "Autor: %s" + +#: wp-mail.php:245 +msgid "Posted title: %s" +msgstr "Título publicado: %s" + +#: wp-mail.php:248 +msgid "Oops: %s" +msgstr "Oops: %s" + +#: wp-signup.php:126 +msgid "Privacy:" +msgstr "Privacidad:" + +#: wp-signup.php:184 +msgid "(Must be at least 4 characters, letters and numbers only.)" +msgstr "(Deben tener como mínimo 4 caracteres, solo letras y números.)" + +#: wp-signup.php:187 +msgid "Email Address:" +msgstr "Dirección de correo electrónico:" + +#: wp-signup.php:263 +msgid "There was a problem, please correct the form below and try again." +msgstr "Hubo un problema, revisa el formulario y prueba de nuevo." + +#: wp-signup.php:431 +msgid "Get your own %s account in seconds" +msgstr "Consigue tu propia cuenta %s en segundos." + +#: wp-signup.php:450 +msgid "Just a username, please." +msgstr "Solo el nombre de usuario, gracias." + +#: wp-signup.php:454 +msgid "Next" +msgstr "Siguiente" + +#: wp-signup.php:500 +msgid "%s is your new username" +msgstr "%s es tu nuevo nombre de usuario" + +#: wp-signup.php:501 +msgid "But, before you can start using your new username, you must activate it." +msgstr "Pero, antes de poder comenzar a usar tu nuevo nombre de usuario, debes activarlo." + +#: wp-signup.php:503 +msgid "If you do not activate your username within two days, you will have to sign up again." +msgstr "Si no activas tu nombre de usuario en dos días, deberás registrarte de nuevo." + +#: wp-signup.php:569 +msgid "Signup" +msgstr "Registrarse" + +#: wp-signup.php:634 +msgid "Still waiting for your email?" +msgstr "¿Continúas esperando el correo electrónico?" + +#: wp-signup.php:673 +msgid "Registration has been disabled." +msgstr "Los registros están deshabilitados." + +#: wp-signup.php:684 +msgid "User registration has been disabled." +msgstr "No se permite el registro de nuevos usuarios." + +#: wp-includes/js/tinymce/langs/wp-langs.php:322 +#: wp-includes/js/tinymce/langs/wp-langs.php:338 +#: wp-includes/js/tinymce/wp-mce-help.php:217 +msgid "Help" +msgstr "Ayuda" + +#: wp-includes/js/tinymce/langs/wp-langs.php:38 +msgid "Black" +msgstr "Negro" + +#: wp-includes/js/tinymce/langs/wp-langs.php:51 +msgid "Blue" +msgstr "Azul" + +#: wp-includes/js/tinymce/langs/wp-langs.php:68 +msgid "Brown" +msgstr "Marrón" + +#: wp-includes/js/tinymce/langs/wp-langs.php:49 +msgid "Green" +msgstr "Verde" + +#: wp-includes/js/tinymce/langs/wp-langs.php:47 +msgid "Orange" +msgstr "Naranja" + +#: wp-includes/js/tinymce/langs/wp-langs.php:70 +msgid "Pink" +msgstr "Rosa" + +#: wp-includes/js/tinymce/langs/wp-langs.php:60 +msgid "Purple" +msgstr "Púrpura" + +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +msgid "Red" +msgstr "Rojo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:69 +msgid "Silver" +msgstr "Gris" + +#: wp-includes/js/tinymce/langs/wp-langs.php:77 +msgid "White" +msgstr "Blanco" + +#: wp-includes/js/tinymce/langs/wp-langs.php:64 +msgid "Yellow" +msgstr "Amarillo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:530 +msgid "Width" +msgstr "Ancho" + +#: wp-includes/js/tinymce/langs/wp-langs.php:337 +#: wp-includes/js/tinymce/wp-mce-help.php:165 +msgid "About" +msgstr "Acerca de" + +#: wp-includes/user.php:1669 +msgid "ERROR: Please enter a username." +msgstr "ERROR: Por favor, introduce un nombre de usuario." + +#: wp-includes/user.php:1684 +msgid "ERROR: This email is already registered, please choose another one." +msgstr "ERROR: Esa dirección de correo electrónico ya está registrada. Por favor, elige otra." + +#: wp-includes/widgets.php:67 +msgid "There are no options for this widget." +msgstr "No hay opciones para este widget." + +#: wp-includes/script-loader.php:321 wp-login.php:616 +msgid "Strength indicator" +msgstr "Seguridad de la contraseña" + +#: wp-login.php:617 +msgid "Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! \" ? $ % ^ & )." +msgstr "Tu contraseña debe tener al menos siete caracteres. Para que tu contraseña sea segura, usa mayúsculas, minúsculas, números y símbolos como ! \" ? $ % ^ & )." + +#: wp-includes/script-loader.php:322 +msgid "Very weak" +msgstr "Muy débil" + +#: wp-includes/script-loader.php:323 +msgid "Weak" +msgstr "Débil" + +#: wp-includes/script-loader.php:326 +msgid "Strong" +msgstr "Fuerte" + +#: wp-includes/taxonomy.php:470 +msgid "Edit Category" +msgstr "Editar Categoría" + +#: wp-includes/post.php:1488 +msgctxt "page" +msgid "Add New" +msgstr "Añadir nueva" + +#: wp-content/plugins/akismet/admin.php:148 +msgid "Options saved." +msgstr "Opciones guardadas." + +#: wp-includes/js/tinymce/langs/wp-langs.php:433 +msgid "Enabled" +msgstr "Activado" + +#: wp-includes/class-wp-xmlrpc-server.php:432 +msgid "Allow people to post comments on new articles" +msgstr "Permite que se publiquen comentarios en los artículos nuevos" + +#: wp-includes/class-wp-xmlrpc-server.php:382 +msgid "Date Format" +msgstr "Formato de fecha" + +#: wp-includes/class-wp-xmlrpc-server.php:387 +msgid "Time Format" +msgstr "Formato de hora" + +#: wp-content/plugins/akismet/admin.php:205 +msgid "Settings saved." +msgstr "Ajustes guardados." + +#: wp-includes/js/tinymce/langs/wp-langs.php:531 +#: wp-includes/js/tinymce/langs/wp-langs.php:536 +msgid "Height" +msgstr "Altura" + +#: wp-includes/class-wp-customize-control.php:344 +#: wp-includes/class-wp-customize-control.php:661 +#: wp-includes/class-wp-customize-control.php:737 +#: wp-includes/class-wp-customize-control.php:766 +#: wp-includes/js/tinymce/langs/wp-langs.php:249 +#: wp-includes/script-loader.php:480 +msgid "Default" +msgstr "Predeterminado" + +#: wp-includes/js/tinymce/langs/wp-langs.php:341 +msgid "Plugin" +msgstr "Plugin" + +#: wp-includes/js/tinymce/wp-mce-help.php:215 +msgid "Insert Image" +msgstr "Insertar imagen" + +#: wp-includes/class-wp-editor.php:115 wp-includes/class-wp-editor.php:698 +msgid "Visual" +msgstr "Visual" + +#: wp-content/plugins/akismet/widget.php:72 wp-includes/default-widgets.php:66 +#: wp-includes/default-widgets.php:215 wp-includes/default-widgets.php:281 +#: wp-includes/default-widgets.php:340 wp-includes/default-widgets.php:380 +#: wp-includes/default-widgets.php:426 wp-includes/default-widgets.php:512 +#: wp-includes/default-widgets.php:618 wp-includes/default-widgets.php:728 +#: wp-includes/default-widgets.php:1073 wp-includes/default-widgets.php:1146 +msgid "Title:" +msgstr "Título:" + +#: wp-includes/taxonomy.php:475 +msgid "Separate tags with commas" +msgstr "Separa las etiquetas con comas." + +#: wp-includes/js/tinymce/langs/wp-langs.php:171 +msgid "Select All" +msgstr "Elegir todo" + +#: wp-includes/theme-compat/comments.php:77 +#: wp-includes/theme-compat/comments.php:80 +msgid "(required)" +msgstr "(requerido)" + +#: wp-includes/comment-template.php:1982 +#: wp-includes/theme-compat/comments.php:83 +msgid "Website" +msgstr "Web" + +#: wp-includes/admin-bar.php:667 wp-includes/functions.php:2759 +msgid "Widgets" +msgstr "Widgets" + +#: wp-includes/class-wp-xmlrpc-server.php:1223 +#: wp-includes/class-wp-xmlrpc-server.php:3899 +#: wp-includes/class-wp-xmlrpc-server.php:4306 +msgid "Sorry, your entry could not be posted. Something wrong happened." +msgstr "Disculpa, ha sido imposible publicar la entrada. Algo ha ocurrido." + +#: wp-includes/class-wp-xmlrpc-server.php:3939 +#: wp-includes/class-wp-xmlrpc-server.php:4384 +msgid "Sorry, you do not have the right to edit this post." +msgstr "Lo siento, no tienes autorización para editar esta entrada." + +#: wp-includes/class-wp-xmlrpc-server.php:3955 +msgid "For some strange yet very annoying reason, this post could not be edited." +msgstr "Por alguna extraña razón esta entrada no puede editarse." + +#: wp-includes/class-wp-xmlrpc-server.php:3991 +msgid "Sorry, you do not have the right to delete this post." +msgstr "Lo siento, no tienes autorización para borrar esta entrada." + +#: wp-includes/class-wp-xmlrpc-server.php:3996 +msgid "For some strange yet very annoying reason, this post could not be deleted." +msgstr "Por alguna extraña y desagradable razón esta entrada no puede borrarse." + +#: wp-comments-post.php:48 +msgid "Sorry, comments are closed for this item." +msgstr "Disculpa, los comentarios están cerrados." + +#: wp-comments-post.php:109 +msgid "Sorry, you must be logged in to post a comment." +msgstr "Disculpa, debes identificarte para escribir un comentario." + +#: wp-content/plugins/akismet/admin.php:173 +msgid "Your key has been cleared." +msgstr "Tu clave ha sido eliminada." + +#: wp-content/plugins/akismet/admin.php:175 +msgid "The key you entered is invalid. Please double-check it." +msgstr "La clave que has introducido no es válida. Por favor compruébala." + +#: wp-content/plugins/akismet/admin.php:176 +msgid "The key you entered could not be verified because a connection to akismet.com could not be established. Please check your server configuration." +msgstr "La clave que has introducido no se ha podido verificar porque no se ha podido realizar la conexión con akismet.com. Por favor, comprueba la configuración de tu servidor." + +#: wp-content/plugins/akismet/admin.php:177 +msgid "There was a problem connecting to the Akismet server. Please check your server configuration." +msgstr "Hubo un problema al conectar con el servidor de Akismet. Por favor, comprueba la configuración de tu servidor." + +#: wp-content/plugins/akismet/admin.php:180 +msgid "The key below was previously validated but a connection to akismet.com can not be established at this time. Please check your server configuration." +msgstr "La clave mostrada fue validada anteriormente pero no se puede realizar una conexión con akismet.com en este momento. Por favor, comprueba la configuración de tu servidor." + +#: wp-content/plugins/akismet/admin.php:243 +msgid "Server Connectivity" +msgstr "Conectividad del servidor" + +#: wp-content/plugins/akismet/admin.php:258 +msgid "Unable to reach some Akismet servers." +msgstr "No se puede acceder a ningún servidor de Akismet." + +#: wp-content/plugins/akismet/admin.php:259 +msgid "A network problem or firewall is blocking some connections from your web server to Akismet.com. Akismet is working but this may cause problems during times of network congestion. Please contact your web host or firewall administrator and give them this information about Akismet and firewalls." +msgstr "Un problema en la red o en el firewall está bloqueando algunas conexiones de su servidor web para Akismet.com. Akismet está funcionando pero esto te puede causar problemas cuando la red esté saturada. Por favor, ponte en contacto con tuproveedor e infórmales sobre este problema." + +#: wp-content/plugins/akismet/admin.php:261 +msgid "Unable to reach any Akismet servers." +msgstr "No se puede acceder a ningún servidor de Akismet." + +#: wp-content/plugins/akismet/admin.php:262 +msgid "A network problem or firewall is blocking all connections from your web server to Akismet.com. Akismet cannot work correctly until this is fixed. Please contact your web host or firewall administrator and give them this information about Akismet and firewalls." +msgstr "Un problema en la red o en el firewall está bloqueando algunas conexiones de tu servidor web para Akismet.com. Akismet no está funcionando correctamente. Por favor, ponte en contacto con tu proveedor e infórmales sobre este problema." + +#: wp-content/plugins/akismet/admin.php:264 +msgid "All Akismet servers are available." +msgstr "Todos los servidores Akismet están disponibles." + +#: wp-content/plugins/akismet/admin.php:265 +msgid "Akismet is working correctly. All servers are accessible." +msgstr "Akismet está funcionando correctamente. Se puede acceder a todos los servidores." + +#: wp-content/plugins/akismet/admin.php:251 +msgid "Network functions are disabled." +msgstr "Las funciones de red están desactivadas." + +#: wp-content/plugins/akismet/admin.php:268 +msgid "Unable to find Akismet servers." +msgstr "No se pudieron encontrar los servidores de Akismet." + +#: wp-content/plugins/akismet/admin.php:269 +msgid "A DNS problem or firewall is preventing all access from your web server to Akismet.com. Akismet cannot work correctly until this is fixed. Please contact your web host or firewall administrator and give them this information about Akismet and firewalls." +msgstr "Un problema de DNS o en el firewall impide el acceso de su servidor a Akismet.com. Akismet no puede funcionar correctamente con este problema. Por favor, ponte en contacto con tu proveedor e infórmales sobre este problema." + +#: wp-content/plugins/akismet/admin.php:280 +msgid "Akismet server" +msgstr "Servidor Akismet" + +#: wp-content/plugins/akismet/admin.php:276 +#: wp-content/plugins/akismet/admin.php:280 +msgid "Network Status" +msgstr "Estado de la red" + +#: wp-content/plugins/akismet/admin.php:920 +#: wp-content/plugins/akismet/admin.php:923 +msgid "Akismet Stats" +msgstr "Estadísticas de Akismet" + +#: wp-content/plugins/akismet/admin.php:323 +msgid "Akismet is almost ready." +msgstr "Akismet casi está preparado." + +#: wp-content/plugins/akismet/admin.php:414 +msgid "Akismet has detected a problem." +msgstr "Akismet ha detectado un problema." + +#: wp-content/plugins/akismet/legacy.php:47 +msgid "Akismet Spam (%s)" +msgstr "Spam en Akismet (%s)" + +#: wp-content/plugins/akismet/legacy.php:49 +#: wp-content/plugins/akismet/legacy.php:51 +msgid "Akismet Spam" +msgstr "Spam en Akismet" + +#: wp-content/plugins/akismet/legacy.php:61 +#: wp-content/plugins/akismet/legacy.php:80 +msgid "You do not have sufficient permission to moderate comments." +msgstr "No tienes autorización para moderar comentarios." + +#: wp-content/plugins/akismet/legacy.php:96 +msgid "%1$s comments recovered." +msgstr "%1$s comentario ha sido recuperado." + +#: wp-content/plugins/akismet/legacy.php:100 +msgid "All spam deleted." +msgstr "Todo el spam ha sido borrado." + +#: wp-content/plugins/akismet/legacy.php:148 +msgid "Caught Spam" +msgstr "Spam capturado" + +#: wp-content/plugins/akismet/legacy.php:153 +msgid "Akismet has caught %1$s spam for you since you first installed it." +msgstr "Akismet ha capturado %1$s spam desde la primera vez que lo instalaste." + +#: wp-content/plugins/akismet/legacy.php:160 +msgid "You have no spam currently in the queue. Must be your lucky day. :)" +msgstr "En este momento no tienes spam en cola. Debe ser tu día de suerte. :)" + +#: wp-content/plugins/akismet/legacy.php:163 +msgid "You can delete all of the spam from your database with a single click. This operation cannot be undone, so you may wish to check to ensure that no legitimate comments got through first. Spam is automatically deleted after 15 days, so don’t sweat it." +msgstr "Puedes borrar todo el spam de tu base de datos con un solo clic. Esta operación no es reversible así que puede que quieras antes comprobar si hay comentarios legítimos. El spam se borra automáticamente a los 15 días, así que no te agobies." + +#: wp-content/plugins/akismet/legacy.php:169 +#: wp-content/plugins/akismet/legacy.php:347 +msgid "There are currently %1$s comments identified as spam." +msgstr "En este momento hay %1$s comentarios identificados como spam." + +#: wp-content/plugins/akismet/legacy.php:169 +#: wp-content/plugins/akismet/legacy.php:347 +msgid "Delete all" +msgstr "Borrar todos" + +#: wp-content/plugins/akismet/legacy.php:178 +msgid "These are the latest comments identified as spam by Akismet. If you see any mistakes, simply mark the comment as \"not spam\" and Akismet will learn from the submission. If you wish to recover a comment from spam, simply select the comment, and click Not Spam. After 15 days we clean out the junk for you." +msgstr "Estos son los últimos comentarios identificados como spam por Akismet. Si encuentras algún error, sólo tienes que marcarlo como \"No es spam\" y Akismet aprenderá al recibirlo. Si deseas recuperar un comentario, selecciónalo y haz clic en \"No es spam\". Tras 15 días, la basura desaparecerá sola." + +#: wp-content/plugins/akismet/legacy.php:209 +msgid "All" +msgstr "Todo" + +#: wp-content/plugins/akismet/legacy.php:232 +msgid "Search Spam »" +msgstr "Buscar spam »" + +#: wp-content/plugins/akismet/legacy.php:239 +#: wp-content/plugins/akismet/legacy.php:306 wp-includes/link-template.php:1691 +#: wp-includes/link-template.php:1727 +msgid "« Previous Page" +msgstr "« Página anterior" + +#: wp-content/plugins/akismet/legacy.php:260 +#: wp-content/plugins/akismet/legacy.php:327 wp-includes/link-template.php:1620 +#: wp-includes/link-template.php:1728 +msgid "Next Page »" +msgstr "Página siguiente »" + +#: wp-content/plugins/akismet/legacy.php:282 +msgid "IP:" +msgstr "IP:" + +#: wp-content/plugins/akismet/legacy.php:333 +msgid "De-spam marked comments »" +msgstr "Quitar marca de spam »" + +#: wp-content/plugins/akismet/legacy.php:335 +msgid "Comments you de-spam will be submitted to Akismet as mistakes so it can learn and get better." +msgstr "Los comentarios a los que quites la marca de \"spam\" se enviarán a Akismet como errores para que vaya aprendiendo y mejorando." + +#: wp-content/plugins/akismet/legacy.php:340 +msgid "No results found." +msgstr "Sin resultados." + +#: wp-content/plugins/akismet/admin.php:342 +msgid "Akismet has protected your site from %3$s spam comments." +msgid_plural "Akismet has protected your site from %3$s spam comments." +msgstr[0] "Akismet ha protegido tu sitio de %3$s comentarios de spam." +msgstr[1] "Akismet ha protegido tu sitio de %3$s comentarios de spam." + +#: wp-content/plugins/akismet/legacy.php:385 +msgid "Recheck Queue for Spam" +msgstr "Volver a comprobar cola de spam" + +#: wp-content/plugins/akismet/admin.php:591 +msgid "Check for Spam" +msgstr "Comprobar la lista de spam" + +#: wp-includes/feed-atom-comments.php:19 +msgid "Comments on %s" +msgstr "Comentarios en %s" + +#: wp-includes/default-widgets.php:320 wp-includes/theme-compat/sidebar.php:75 +msgid "Powered by WordPress, state-of-the-art semantic personal publishing platform." +msgstr "Gestionado con WordPress, una avanzada plataforma semántica de publicación personal." + +#: wp-includes/comment-template.php:1172 +msgid "Enter your password to view comments." +msgstr "Escribe tu contraseña para ver los comentarios." + +#: wp-includes/comment-template.php:697 wp-includes/comment-template.php:1159 +msgid "No Comments" +msgstr "No hay comentarios" + +#: wp-includes/comment-template.php:699 wp-includes/comment-template.php:1160 +msgid "1 Comment" +msgstr "1 comentario" + +#: wp-includes/comment-template.php:695 wp-includes/comment-template.php:1161 +msgid "% Comments" +msgstr "% comentarios" + +#: wp-includes/link-template.php:727 wp-includes/link-template.php:938 +#: wp-includes/link-template.php:1013 wp-includes/link-template.php:1054 +msgid "Edit This" +msgstr "Editar esto" + +#: wp-includes/comment-template.php:1999 +#: wp-includes/theme-compat/comments.php:65 +msgid "You must be logged in to post a comment." +msgstr "Disculpa, debes iniciar sesión para escribir un comentario." + +#: wp-includes/category-template.php:1038 +msgid "Tags: " +msgstr "Etiquetas: " + +#: wp-includes/post-template.php:640 +msgid "Pages:" +msgstr "Páginas:" + +#: wp-includes/default-widgets.php:317 +msgid "The latest comments to all posts in RSS" +msgstr "Últimos comentarios a todas las entradas en RSS" + +#: wp-includes/default-widgets.php:317 +msgid "Comments RSS" +msgstr "RSS de los comentarios" + +#: wp-includes/comment-template.php:1717 +msgid "%s says:" +msgstr "%s dice:" + +#: wp-includes/comment-template.php:1720 wp-includes/comment-template.php:1773 +msgid "Your comment is awaiting moderation." +msgstr "Tu comentario está pendiente de moderación" + +#: wp-includes/comment-template.php:1727 +msgid "%1$s at %2$s" +msgstr "%1$s a las %2$s" + +#: wp-includes/comment-template.php:1727 +msgid "(Edit)" +msgstr "(Editar)" + +#: wp-includes/category-template.php:59 wp-includes/category-template.php:174 +#: wp-includes/category-template.php:177 wp-includes/category-template.php:184 +#: wp-includes/category-template.php:197 wp-includes/category-template.php:200 +#: wp-includes/category-template.php:207 +msgid "View all posts in %s" +msgstr "Ver todas las entradas en %s" + +#: wp-includes/default-widgets.php:302 wp-includes/default-widgets.php:307 +#: wp-includes/theme-compat/sidebar.php:69 +msgid "Meta" +msgstr "Meta" + +#: wp-includes/atomlib.php:133 +msgid "XML error: %s at line %d" +msgstr "Error de XML: %s en la línea %d" + +#: wp-includes/author-template.php:174 +msgid "Visit %s’s website" +msgstr "Visitar el sitio de %s" + +#: wp-includes/author-template.php:241 wp-includes/author-template.php:372 +msgid "Posts by %s" +msgstr "Entradas de %s" + +#: wp-includes/bookmark-template.php:81 +msgid "Last updated: %s" +msgstr "Última actualización: %s" + +#: wp-includes/bookmark-template.php:205 +msgid "Bookmarks" +msgstr "Marcadores" + +#: wp-includes/capabilities.php:950 +msgid "Usage of user levels by plugins and themes is deprecated. Use roles and capabilities instead." +msgstr "El uso de niveles de usuarios por plugins y temas está obsoleto. Usa los perfiles y capacidades en su lugar." + +#: wp-includes/category-template.php:415 +msgid "No categories" +msgstr "No hay categorías" + +#: wp-includes/category-template.php:564 +msgid "%s topic" +msgid_plural "%s topics" +msgstr[0] "%s tema" +msgstr[1] "%s temas" + +#: wp-includes/class-pop3.php:82 +msgid "No server specified" +msgstr "Servidor no especificado" + +#: wp-includes/class-pop3.php:90 wp-includes/class-pop3.php:102 +#: wp-includes/class-pop3.php:123 wp-includes/class-pop3.php:246 +#: wp-includes/class-pop3.php:300 wp-includes/class-pop3.php:311 +#: wp-includes/class-pop3.php:359 wp-includes/class-pop3.php:393 +#: wp-includes/class-pop3.php:426 wp-includes/class-pop3.php:525 +#: wp-includes/class-pop3.php:548 +msgid "Error " +msgstr "Error " + +#: wp-includes/class-pop3.php:115 +msgid "no login ID submitted" +msgstr "no se ha enviado el ID de usuario" + +#: wp-includes/class-pop3.php:118 wp-includes/class-pop3.php:138 +msgid "connection not established" +msgstr "no se estableció la conexión" + +#: wp-includes/class-pop3.php:135 wp-includes/class-pop3.php:171 +msgid "No password submitted" +msgstr "No se envió la contraseña" + +#: wp-includes/class-pop3.php:143 +msgid "Authentication failed" +msgstr "Autentificación fallida" + +#: wp-includes/class-pop3.php:162 wp-includes/class-pop3.php:205 +#: wp-includes/class-pop3.php:230 wp-includes/class-pop3.php:272 +#: wp-includes/class-pop3.php:346 wp-includes/class-pop3.php:386 +#: wp-includes/class-pop3.php:416 wp-includes/class-pop3.php:450 +#: wp-includes/class-pop3.php:513 wp-includes/class-pop3.php:578 +msgid "No connection to server" +msgstr "No hay conexión con el servidor." + +#: wp-includes/class-pop3.php:168 +msgid "No login ID submitted" +msgstr "No se ha enviado el ID de usuario" + +#: wp-includes/class-pop3.php:176 +msgid "No server banner" +msgstr "No hay identificación del servidor" + +#: wp-includes/class-pop3.php:176 wp-includes/class-pop3.php:186 +msgid "abort" +msgstr "cancelar" + +#: wp-includes/class-pop3.php:186 +msgid "apop authentication failed" +msgstr "Falló la autenticación apop" + +#: wp-includes/class-pop3.php:323 +msgid "Premature end of list" +msgstr "Final prematuro de la lista " + +#: wp-includes/class-pop3.php:456 +msgid "Empty command string" +msgstr "Cadena de comandos vacía" + +#: wp-includes/class-pop3.php:476 +msgid "connection does not exist" +msgstr "conexión inexistente" + +#: wp-includes/class-pop3.php:583 +msgid "No msg number submitted" +msgstr "No se envió ningún número de mensaje" + +#: wp-includes/class-pop3.php:589 +msgid "Command failed " +msgstr "Comando fallido" + +#: wp-includes/category-template.php:847 +msgid "View all posts filed under %s" +msgstr "Ver todas las entradas archivadas en %s" + +#: wp-includes/category-template.php:862 +msgid "Feed for all posts filed under %s" +msgstr "Feed para todas las entradas archivadas en %s" + +#: wp-includes/comment-template.php:1162 +msgid "Comments Off" +msgstr "Comentarios desactivados" + +#: wp-includes/comment-template.php:1207 +msgid "Comment on %s" +msgstr "Comentarios en %s" + +#: wp-includes/comment-template.php:1243 +msgid "Log in to Reply" +msgstr "Inicia sesión para responder" + +#: wp-includes/comment-template.php:1325 +msgid "Leave a Comment" +msgstr "Dejar un comentario" + +#: wp-includes/comment-template.php:1326 +msgid "Log in to leave a Comment" +msgstr "Inicia sesión para dejar un comentario" + +#: wp-includes/comment-template.php:1377 +msgid "Click here to cancel reply." +msgstr "Clic para cancelar respuesta." + +#: wp-includes/comment-template.php:1460 wp-includes/comment-template.php:2005 +#: wp-includes/theme-compat/comments.php:58 +msgid "Leave a Reply" +msgstr "Deja un comentario" + +#: wp-includes/comment-template.php:1461 wp-includes/comment-template.php:2006 +#: wp-includes/theme-compat/comments.php:58 +msgid "Leave a Reply to %s" +msgstr "Responder a %s" + +#: wp-includes/js/tinymce/langs/wp-langs.php:342 +#: wp-includes/theme-compat/sidebar.php:21 +msgid "Author" +msgstr "Autor" + +#: wp-includes/class-wp-editor.php:872 wp-includes/media.php:1886 +msgid "URL" +msgstr "URL" + +#: wp-includes/comment-template.php:837 wp-includes/comment-template.php:1998 +msgctxt "noun" +msgid "Comment" +msgstr "Comentario" + +#: wp-includes/deprecated.php:3161 wp-includes/functions.php:2086 +msgid "Are you sure you want to do this?" +msgstr "¿Seguro que quieres hacer esto?" + +#: wp-includes/comment-template.php:1687 wp-includes/comment-template.php:1769 +#: wp-includes/media-template.php:257 +msgid "Edit" +msgstr "Editar" + +#: wp-content/plugins/akismet/admin.php:488 +#: wp-content/plugins/akismet/admin.php:516 +msgid "%s ago" +msgstr "hace %s" + +#: wp-includes/js/tinymce/wp-mce-help.php:198 +msgid "Undo" +msgstr "Deshacer" + +#: wp-content/plugins/akismet/legacy.php:288 +msgid "Not Spam" +msgstr "No es spam" + +#: wp-includes/js/tinymce/langs/wp-langs.php:19 +msgid "Apply" +msgstr "Aplicar" + +#: wp-content/plugins/akismet/legacy.php:214 +#: wp-includes/theme-compat/comments-popup.php:33 +msgid "Comments" +msgstr "Comentarios" + +#: wp-includes/script-loader.php:423 +msgid "Publish" +msgstr "Publicar" + +#: wp-includes/revision.php:33 +msgid "Excerpt" +msgstr "Extracto" + +#: wp-includes/post.php:80 +msgid "Revisions" +msgstr "Revisiones" + +#: wp-includes/comment.php:475 +msgctxt "adjective" +msgid "Approved" +msgstr "Aprobado" + +#: wp-includes/comment.php:477 +msgctxt "adjective" +msgid "Spam" +msgstr "Spam" + +#: wp-includes/taxonomy.php:81 +msgid "Link Categories" +msgstr "Categorías de enlaces" + +#: wp-includes/taxonomy.php:465 +msgid "Search Categories" +msgstr "Buscar categorías" + +#: wp-includes/taxonomy.php:86 +msgid "Edit Link Category" +msgstr "Editar categoría del enlace" + +#: wp-includes/taxonomy.php:472 +msgid "Update Category" +msgstr "Actualizar categoría" + +#: wp-includes/class-wp-editor.php:908 wp-includes/script-loader.php:340 +msgid "Add Link" +msgstr "Añadir enlace" + +#: wp-includes/class-wp-editor.php:689 +#: wp-includes/js/tinymce/langs/wp-langs.php:121 +msgid "Save" +msgstr "Guardar" + +#: wp-includes/category-template.php:423 wp-includes/default-widgets.php:445 +#: wp-includes/default-widgets.php:451 wp-includes/theme-compat/sidebar.php:63 +msgid "Categories" +msgstr "Categorías" + +#: wp-includes/js/tinymce/langs/wp-langs.php:379 +#: wp-includes/js/tinymce/langs/wp-langs.php:430 +msgid "Target" +msgstr "Destino" + +#: wp-includes/js/tinymce/langs/wp-langs.php:393 +#: wp-includes/js/tinymce/wp-mce-help.php:163 +msgid "Advanced" +msgstr "Avanzado" + +#: wp-includes/media-template.php:248 +msgid "Description" +msgstr "Descripción" + +#: wp-includes/deprecated.php:707 wp-includes/js/tinymce/langs/wp-langs.php:520 +#: wp-includes/media-template.php:288 wp-includes/media-template.php:334 +#: wp-includes/media-template.php:391 wp-includes/media-template.php:453 +#: wp-includes/media-template.php:468 wp-includes/script-loader.php:299 +msgid "None" +msgstr "Ninguna" + +#: wp-includes/class-wp-xmlrpc-server.php:1548 +#: wp-includes/class-wp-xmlrpc-server.php:1636 +#: wp-includes/class-wp-xmlrpc-server.php:1728 +#: wp-includes/class-wp-xmlrpc-server.php:1795 +#: wp-includes/class-wp-xmlrpc-server.php:1848 +#: wp-includes/class-wp-xmlrpc-server.php:1927 wp-includes/taxonomy.php:581 +#: wp-includes/taxonomy.php:943 wp-includes/taxonomy.php:1075 +#: wp-includes/taxonomy.php:1266 wp-includes/taxonomy.php:1975 +#: wp-includes/taxonomy.php:2123 wp-includes/taxonomy.php:2260 +#: wp-includes/taxonomy.php:2521 +msgid "Invalid taxonomy" +msgstr "Taxonomia no válida" + +#: wp-includes/taxonomy.php:470 +msgid "Edit Tag" +msgstr "Editar etiqueta" + +#: wp-includes/post.php:1488 +msgctxt "post" +msgid "Add New" +msgstr "Añadir nueva" + +#: wp-content/plugins/akismet/legacy.php:294 wp-includes/post.php:1492 +msgid "View Post" +msgstr "Ver entrada" + +#: wp-includes/post.php:1490 +msgid "Edit Post" +msgstr "Editar entrada" + +#: wp-includes/script-loader.php:501 +msgid "Done" +msgstr "Hecho" + +#: wp-includes/class-wp-theme.php:666 wp-includes/comment-template.php:29 +msgid "Anonymous" +msgstr "Anónimo" + +#: wp-includes/post-template.php:1251 +msgid "Submit" +msgstr "Enviar" + +#: wp-includes/default-widgets.php:747 +msgid "RSS" +msgstr "RSS" + +#: wp-includes/functions.php:1763 +msgid "Invalid file type" +msgstr "Tipo de archivo no válido" + +#: wp-includes/js/tinymce/langs/wp-langs.php:104 +#: wp-includes/js/tinymce/langs/wp-langs.php:397 +msgid "Preview" +msgstr "Vista previa" + +#: wp-includes/default-widgets.php:639 wp-includes/default-widgets.php:682 +msgid "Recent Comments" +msgstr "Comentarios recientes" + +#: wp-includes/class-wp-editor.php:911 +#: wp-includes/js/tinymce/langs/wp-langs.php:22 wp-includes/media.php:1890 +#: wp-includes/script-loader.php:368 wp-includes/script-loader.php:415 +msgid "Cancel" +msgstr "Cancelar" + +#: wp-includes/revision.php:32 +msgid "Content" +msgstr "Contenido" + +#: wp-includes/default-widgets.php:1047 +msgid "Tags" +msgstr "Etiquetas" + +#: wp-includes/script-loader.php:427 +msgid "Save Draft" +msgstr "Guardar borrador" + +#: wp-includes/theme-compat/comments-popup.php:62 +msgid "No comments yet." +msgstr "Aún no hay comentarios." + +#: wp-includes/comment-template.php:1242 wp-includes/script-loader.php:405 +msgid "Reply" +msgstr "Responder" + +#: wp-includes/comment-template.php:839 +msgid "Pingback" +msgstr "Pingback" + +#: wp-includes/comment-template.php:838 +msgid "Trackback" +msgstr "Trackback" + +#: wp-includes/default-widgets.php:731 +msgid "Number of comments to show:" +msgstr "Número de comentarios a mostrar:" + +#: wp-includes/default-widgets.php:837 +msgid "RSS Error: %s" +msgstr "Error en el RSS: %s" + +#: wp-includes/default-widgets.php:783 +msgid "Unknown Feed" +msgstr "Feed desconocido" + +#: wp-includes/admin-bar.php:676 +msgid "Header" +msgstr "Cabecera" + +#: wp-includes/widgets.php:490 +msgid "Sidebar" +msgstr "Barra lateral" + +#: wp-includes/default-widgets.php:237 wp-includes/default-widgets.php:244 +#: wp-includes/theme-compat/sidebar.php:57 +msgid "Archives" +msgstr "Archivos" + +#: wp-includes/general-template.php:304 wp-login.php:847 +msgid "Password" +msgstr "Contraseña" + +#: wp-includes/js/tinymce/wp-mce-help.php:198 +msgid "Redo" +msgstr "Rehacer" + +#: wp-includes/js/tinymce/langs/wp-langs.php:409 +msgid "Scale" +msgstr "Escala" + +#: wp-includes/js/tinymce/langs/wp-langs.php:522 +#: wp-includes/media-template.php:353 wp-includes/media.php:1749 +msgid "Thumbnail" +msgstr "Miniatura" + +#: wp-includes/deprecated.php:3211 +msgid "File “%s” doesn’t exist?" +msgstr "¿El archivo “%s” no existe?" + +#: wp-includes/deprecated.php:3214 +msgid "The GD image library is not installed." +msgstr "La librería de imágenes GD no está instalada." + +#: wp-includes/deprecated.php:3221 +msgid "File “%s” is not an image." +msgstr "El archivo “%s” no es una imagen." + +#: wp-includes/js/tinymce/langs/wp-langs.php:507 wp-includes/media.php:1887 +msgid "Add Media" +msgstr "Añadir objeto" + +#: wp-includes/js/tinymce/langs/wp-langs.php:508 +msgid "Add an Image" +msgstr "Añadir una imagen" + +#: wp-includes/js/tinymce/langs/wp-langs.php:509 +msgid "Add Video" +msgstr "Añadir un vídeo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:510 +msgid "Add Audio" +msgstr "Añadir un archivo de audio" + +#: wp-includes/class-wp-editor.php:743 wp-includes/media-template.php:188 +msgid "Saved." +msgstr "Guardado." + +#: wp-includes/class-wp-customize-manager.php:856 +#: wp-includes/js/tinymce/langs/wp-langs.php:82 +#: wp-includes/js/tinymce/langs/wp-langs.php:375 +#: wp-includes/js/tinymce/langs/wp-langs.php:474 +#: wp-includes/media-template.php:279 wp-includes/media-template.php:444 +msgid "Left" +msgstr "Izquierda" + +#: wp-includes/class-wp-customize-manager.php:857 +#: wp-includes/js/tinymce/langs/wp-langs.php:83 +#: wp-includes/js/tinymce/langs/wp-langs.php:454 +#: wp-includes/js/tinymce/langs/wp-langs.php:475 +#: wp-includes/media-template.php:282 wp-includes/media-template.php:447 +msgid "Center" +msgstr "Centrar" + +#: wp-includes/class-wp-customize-manager.php:858 +#: wp-includes/js/tinymce/langs/wp-langs.php:84 +#: wp-includes/js/tinymce/langs/wp-langs.php:376 +#: wp-includes/js/tinymce/langs/wp-langs.php:472 +#: wp-includes/media-template.php:285 wp-includes/media-template.php:450 +msgid "Right" +msgstr "Derecha" + +#: wp-includes/js/tinymce/langs/wp-langs.php:523 +#: wp-includes/media-template.php:354 wp-includes/media.php:1750 +msgid "Medium" +msgstr "Medio" + +#: wp-includes/js/tinymce/langs/wp-langs.php:524 +#: wp-includes/media-template.php:356 wp-includes/media.php:1752 +msgid "Full Size" +msgstr "Tamaño completo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:521 +#: wp-includes/media-template.php:344 +msgid "Size" +msgstr "Tamaño" + +#: wp-includes/js/tinymce/langs/wp-langs.php:81 +#: wp-includes/js/tinymce/langs/wp-langs.php:368 +#: wp-includes/media-template.php:271 +msgid "Alignment" +msgstr "Alineación" + +#: wp-includes/js/tinymce/langs/wp-langs.php:548 +#: wp-includes/media-template.php:238 wp-includes/media-template.php:430 +msgid "Caption" +msgstr "Leyenda" + +#: wp-includes/js/tinymce/langs/wp-langs.php:378 +msgid "Link URL" +msgstr "URL del enlace" + +#: wp-includes/js/tinymce/langs/wp-langs.php:527 +msgid "Enter a link URL or click above for presets." +msgstr "Introduce una URL para el enlace o clic sobre el actual." + +#: wp-includes/js/tinymce/langs/wp-langs.php:517 +#: wp-includes/media-template.php:211 +msgid "Edit Image" +msgstr "Editar imagen" + +#: wp-includes/post-template.php:1430 wp-admin/users.php:54 +#: wp-admin/includes/media.php:1644 +msgid "Actions" +msgstr "Acciones" + +#: wp-includes/js/tinymce/langs/wp-langs.php:361 +#: wp-includes/media-template.php:462 +msgid "Image URL" +msgstr "URL de la imagen" + +#: wp-includes/script-loader.php:426 +msgid "Save as Pending" +msgstr "Guardar como pendiente" + +#: wp-includes/script-loader.php:432 +msgid "Privately Published" +msgstr "Publicada como privada" + +#: wp-includes/script-loader.php:414 +msgid "OK" +msgstr "Aceptar" + +#: wp-includes/post.php:833 wp-includes/post.php:853 +#: wp-includes/script-loader.php:428 +msgid "Private" +msgstr "Privada" + +#: wp-includes/script-loader.php:430 +msgid "Public, Sticky" +msgstr "Pública, destacada" + +#: wp-includes/script-loader.php:424 +msgid "Schedule" +msgstr "Programar" + +#: wp-includes/taxonomy.php:476 +msgid "Add or remove tags" +msgstr "Añadir o quitar etiquetas" + +#: wp-includes/taxonomy.php:467 +msgid "All Categories" +msgstr "Todas las categorías" + +#: wp-includes/script-loader.php:109 wp-includes/script-loader.php:239 +msgid "Dismiss" +msgstr "Descartar" + +#: wp-content/plugins/akismet/legacy.php:176 wp-includes/admin-bar.php:719 +#: wp-includes/class-wp-editor.php:886 wp-includes/default-widgets.php:194 +#: wp-includes/media.php:1888 +msgid "Search" +msgstr "Buscar" + +#: wp-includes/js/tinymce/langs/wp-langs.php:343 +msgid "Version" +msgstr "Versión" + +#: wp-includes/js/tinymce/wp-mce-help.php:231 +msgid "Version:" +msgstr "Versión:" + +#: wp-includes/class-wp-theme.php:663 +msgid "Visit author homepage" +msgstr "Visitar la web del autor" + +#: wp-includes/post.php:2183 +msgid "Images" +msgstr "Imágenes" + +#: wp-includes/post.php:1492 +msgid "View Page" +msgstr "Ver página" + +#: wp-includes/default-widgets.php:94 +msgid "Links" +msgstr "Enlaces" + +#: wp-includes/category-template.php:161 +msgid "Uncategorized" +msgstr "Sin categoría" + +#: wp-includes/pluggable.php:1289 +msgid "E-mail: %s" +msgstr "Correo electrónico: %s" + +#: wp-includes/default-widgets.php:18 wp-includes/default-widgets.php:24 +#: wp-includes/post-template.php:829 wp-includes/theme-compat/sidebar.php:55 +msgid "Pages" +msgstr "Páginas" + +#: wp-includes/functions.php:4070 wp-includes/js/tinymce/langs/wp-langs.php:23 +#: wp-includes/js/tinymce/wp-mce-help.php:245 wp-includes/media-template.php:32 +#: wp-includes/script-loader.php:204 wp-includes/script-loader.php:293 +#: wp-includes/script-loader.php:369 +msgid "Close" +msgstr "Cerrar" + +#: wp-includes/media.php:1889 +msgid "Select" +msgstr "Elegir" + +#: wp-includes/post.php:1491 +msgid "New Page" +msgstr "Nueva página" + +#: wp-includes/post.php:58 +msgid "Edit Media" +msgstr "Editar medios" + +#: wp-includes/admin-bar.php:429 wp-includes/post.php:1491 +msgid "New Post" +msgstr "Nueva entrada" + +#: wp-includes/script-loader.php:341 wp-includes/script-loader.php:459 +msgid "(no title)" +msgstr "(sin título)" + +#: wp-activate.php:73 +msgid "Activation Key Required" +msgstr "Requiere clave de activación" + +#: wp-activate.php:76 +msgid "Activation Key:" +msgstr "Clave de activación:" + +#: wp-activate.php:92 wp-activate.php:112 +msgid "Your account is now active!" +msgstr "¡Tu cuenta ahora está activada!" + +#: wp-activate.php:103 +msgid "An error occurred during the activation" +msgstr "Ha habido un error en la activación" + +#: wp-activate.php:115 wp-signup.php:179 +msgid "Username:" +msgstr "Nombre de usuario:" + +#: wp-includes/post.php:1494 +msgid "No posts found." +msgstr "No se encontraron entradas." + +#: wp-includes/post.php:834 wp-includes/post.php:854 +#: wp-includes/script-loader.php:433 +msgid "Published" +msgstr "Publicada" + +#: wp-includes/post.php:832 +msgid "Pending Review" +msgstr "Pendiente de revisión" + +#: wp-includes/post.php:831 wp-includes/post.php:852 +msgid "Draft" +msgstr "Borrador" + +#: wp-includes/class-wp-editor.php:824 +msgid "Y/m/d" +msgstr "d/m/Y" + +#: wp-includes/admin-bar.php:300 wp-includes/admin-bar.php:446 +#: wp-includes/deprecated.php:2833 +msgid "Visit Site" +msgstr "Visitar sitio" + +#: wp-includes/admin-bar.php:253 wp-includes/class-wp-admin-bar.php:367 +msgid "Log Out" +msgstr "Cerrar sesión" + +#: wp-includes/class-wp-xmlrpc-server.php:3285 +#: wp-includes/class-wp-xmlrpc-server.php:3330 +#: wp-includes/class-wp-xmlrpc-server.php:4936 +msgid "You do not have permission to upload files." +msgstr "No tienes autorización para subir archivos." \ No newline at end of file diff --git a/src/wp-content/languages/themes/twentyfourteen-es_ES.mo b/src/wp-content/languages/themes/twentyfourteen-es_ES.mo new file mode 100644 index 0000000..15e7984 Binary files /dev/null and b/src/wp-content/languages/themes/twentyfourteen-es_ES.mo differ diff --git a/src/wp-content/languages/themes/twentyfourteen-es_ES.po b/src/wp-content/languages/themes/twentyfourteen-es_ES.po new file mode 100644 index 0000000..efdf84f --- /dev/null +++ b/src/wp-content/languages/themes/twentyfourteen-es_ES.po @@ -0,0 +1,395 @@ +# Translation of Twenty Fourteen in Spanish (Spain) +# This file is distributed under the same license as the Twenty Fourteen package. +msgid "" +msgstr "" +"PO-Revision-Date: 2013-12-11 22:04:42+0000\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: GlotPress/0.1\n" +"Project-Id-Version: Twenty Fourteen\n" + +msgid "http://wordpress.org/themes/twentyfourteen" +msgstr "http://wordpress.org/themes/twentyfourteen" + +#: inc/customizer.php:36 +msgid "Use a tag to feature your posts. If no posts match the tag, sticky posts will be displayed instead." +msgstr "Usa una etiqueta para destacar tus entradas. Si ninguna entrada se ajusta a la etiqueta entonces se usarán las entradas fijas." + +#: 404.php:17 +msgid "Not Found" +msgstr "No se ha encontrado" + +#: inc/customizer.php:31 +msgid "Display Site Title & Tagline" +msgstr "Muestra el título y descripción del sitio" + +#: inc/customizer.php:101 +msgid "The home page features your choice of up to 6 posts prominently displayed in a grid or slider, controlled by the featured tag; you can change the tag and layout in Appearance → Customize. If no posts match the tag, sticky posts will be displayed instead." +msgstr "La página principal te permite elegir hasta 6 entradas que destacarán en una rejilla o carrusel, controlado por la etiqueta destacado; puedes cambiar la etiqueta y la disposición en Apariencia y personalización. Si no hay ninguna entrada con la etiqueta entonces se mostrarán las entradas fijas." + +#: inc/customizer.php:103 +msgid "For an in-depth tutorial, and more tips and tricks, visit the Twenty Fourteen documentation." +msgstr "Para un tutorial en profundidad y más trucos visita la página de documentación de Twenty Fourteen." + +#: archive.php:34 +msgctxt "monthly archives date format" +msgid "F Y" +msgstr "F Y" + +#: archive.php:37 +msgctxt "yearly archives date format" +msgid "Y" +msgstr "Y" + +#: inc/customizer.php:28 +msgid "Site Title Color" +msgstr "Color del título del sitio" + +#: inc/featured-content.php:409 +msgid "Use the \"featured\" tag to feature your posts. You can change this to a tag of your choice; if no posts match the tag, sticky posts will be displayed instead." +msgstr "Usa la etiqueta \"destacado\" para destacar tus entradas. Puedes cambiar esto a una etiqueta de tu elección; si no hay ninguna entrada con la etiqueta entonces se mostrarán las entradas fijas." + +#: inc/featured-content.php:428 +msgid "Tag Name" +msgstr "Nombre de la etiqueta" + +#: inc/featured-content.php:433 +msgid "Don’t display tag on front end." +msgstr "No mostrar la etiqueta en la portada." + +msgid "In 2014, our default theme lets you create a responsive magazine website with a sleek, modern design. Feature your favorite homepage content in either a grid or a slider. Use the three widget areas to customize your website, and change your content's layout with a full-width page template and a contributor page to show off your authors. Creating a magazine website with WordPress has never been easier." +msgstr "En 2014 nuestro tema por defecto permite crear una revista digital adaptable con un diseño moderno y limpio. Destaca tu contenido favorito en la portada en modo rejilla o carrusel. Usa las tres áreas de widges para personalizar tu web, y cambia la disposición de tu contenido gracias a la plantilla de página de ancho completo, o la de colaborador, que muestra los autores de tu sitio. Crear una revista digital con WordPress nunca ha sido más fácil." + +#: functions.php:260 +msgid "Previous" +msgstr "Anterior" + +#: functions.php:261 +msgid "Next" +msgstr "Siguiente" + +#: 404.php:21 +msgid "It looks like nothing was found at this location. Maybe try a search?" +msgstr "Parece que no hay nada en esa ubicación ¿quieres probar a buscar?" + +#: author.php:31 +msgid "All posts by %s" +msgstr "Todas las entradas de %s" + +#: content-aside.php:17 content-audio.php:17 content-featured-post.php:28 +#: content-gallery.php:17 content-image.php:17 content-link.php:17 +#: content-quote.php:17 content-video.php:17 content.php:19 +msgctxt "Used between list items, there is a space after the comma." +msgid ", " +msgstr ", " + +#: functions.php:186 +msgid "Additional sidebar that appears on the right." +msgstr "Barra lateral adicional que aparece a la derecha." + +#: functions.php:193 +msgid "Footer Widget Area" +msgstr "Área de widgets del pié de página" + +#: functions.php:195 +msgid "Appears in the footer section of the site." +msgstr "Aparece en la sección del pié de página del sitio." + +#: functions.php:384 +msgid "%d Article" +msgid_plural "%d Articles" +msgstr[0] "%d Artículo" +msgstr[1] "%d Artículos" + +#: image.php:65 +msgid "Previous Image" +msgstr "Imagen anterior" + +#: image.php:66 +msgid "Next Image" +msgstr "Imagen siguiente" + +#: inc/back-compat.php:41 inc/back-compat.php:53 inc/back-compat.php:68 +msgid "Twenty Fourteen requires at least WordPress version 3.6. You are running version %s. Please upgrade and try again." +msgstr "Twenty Fourteen requiere al menos la versión 3.6 de WordPress. Estás usando la versión %s. Por favor, actualiza e inténtalo de nuevo." + +#: inc/customizer.php:19 inc/customizer.php:20 +msgid "Background may only be visible on wide screens." +msgstr "El fondo solo será visible en pantallas anchas." + +#: inc/customizer.php:35 inc/featured-content.php:408 +msgid "Featured Content" +msgstr "Contenido destacado" + +#: inc/customizer.php:47 +msgid "Layout" +msgstr "Disposición" + +#: inc/customizer.php:51 +msgid "Grid" +msgstr "Rejilla" + +#: inc/customizer.php:52 +msgid "Slider" +msgstr "Carrusel" + +#: inc/customizer.php:102 +msgid "Enhance your site design by using Featured Images for posts you’d like to stand out (also known as post thumbnails). This allows you to associate an image with your post without inserting it. Twenty Fourteen uses featured images for posts and pages—above the title—and in the Featured Content area on the home page." +msgstr "Mejora el diseño de tu sitio usando Imágenes destacadas en las entradas que quieras resaltar (también conocidas como miniaturas de entrada). Esto te permite asociar una imagen con tu entrada sin insertarla en la misma. Twenty Fourteen utiliza las imágenes destacadas de las entradas y páginas—sobre el título— y el área de Contenido destacado en la portada." + +#: inc/template-tags.php:55 +msgid "Posts navigation" +msgstr "Navegación de entradas" + +#: inc/template-tags.php:88 +msgid "Published In%title" +msgstr "Publicada en%title" + +#: inc/template-tags.php:90 +msgid "Previous Post%title" +msgstr "Entrada anterior%title" + +#: inc/template-tags.php:91 +msgid "Next Post%title" +msgstr "Entrada siguiente%title" + +#: inc/widgets.php:44 +msgid "Twenty Fourteen Ephemera" +msgstr "Twenty Fourteen Efímera" + +#: inc/widgets.php:46 +msgid "Use this widget to list your recent Aside, Quote, Video, Audio, Image, Gallery, and Link posts" +msgstr "Utiliza este widget para mostrar una lista de tus entradas de tipo Minientrada, Cita, Vídeo, Audio, Imagen, Galería y Enlace" + +#: inc/widgets.php:56 taxonomy-post_format.php:39 +msgid "Audio" +msgstr "Audio" + +#: inc/widgets.php:148 +msgid "This gallery contains %2$s photo." +msgid_plural "This gallery contains %2$s photos." +msgstr[0] "Esta galería contiene %2$s foto." +msgstr[1] "Esta galería contiene %2$s fotos." + +#: inc/widgets.php:189 +msgid "More %s " +msgstr "Más %s " + +#: inc/widgets.php:236 +msgid "Title:" +msgstr "Título:" + +#: inc/widgets.php:239 +msgid "Number of posts to show:" +msgstr "Número de entradas a mostrar:" + +#: inc/widgets.php:242 +msgid "Post format to show:" +msgstr "Formato de entrada a mostrar:" + +msgid "Contributor Page" +msgstr "Página de colaborador" + +#: category.php:20 +msgid "Category Archives: %s" +msgstr "Archivos de la categoría %s" + +#: tag.php:22 +msgid "Tag Archives: %s" +msgstr "Archivo de la etiqueta: %s" + +#: archive.php:31 +msgid "Daily Archives: %s" +msgstr "Archivo por días: %s" + +#: archive.php:34 +msgid "Monthly Archives: %s" +msgstr "Archivos mensuales: %s" + +#: archive.php:37 +msgid "Yearly Archives: %s" +msgstr "Archivos anuales: %s" + +#: archive.php:40 taxonomy-post_format.php:51 +msgid "Archives" +msgstr "Archivo" + +#: comments.php:27 +msgid "One thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "Un pensamiento en “%2$s”" +msgstr[1] "%1$s pensamientos en “%2$s”" + +#: comments.php:34 comments.php:52 +msgid "Comment navigation" +msgstr "Navegación de comentarios" + +#: comments.php:35 comments.php:53 +msgid "← Older Comments" +msgstr "← Comentarios antiguos" + +#: comments.php:36 comments.php:54 +msgid "Newer Comments →" +msgstr "Comentarios más recientes →" + +#: comments.php:59 +msgid "Comments are closed." +msgstr "Los comentarios están cerrados." + +#: content-aside.php:48 content-audio.php:48 content-gallery.php:48 +#: content-image.php:48 content-link.php:48 content-page.php:22 +#: content-quote.php:48 content-video.php:48 content.php:56 image.php:54 +msgid "Pages:" +msgstr "Páginas:" + +#: content-aside.php:40 content-audio.php:40 content-gallery.php:40 +#: content-image.php:40 content-link.php:40 content-page.php:28 +#: content-quote.php:40 content-video.php:40 content.php:42 image.php:34 +#: page-templates/contributors.php:35 +msgid "Edit" +msgstr "Editar" + +#: content-aside.php:37 content-audio.php:37 content-gallery.php:37 +#: content-image.php:37 content-link.php:37 content-quote.php:37 +#: content-video.php:37 content.php:38 inc/widgets.php:180 +msgid "Leave a comment" +msgstr "Dejar un comentario" + +#: content-aside.php:37 content-audio.php:37 content-gallery.php:37 +#: content-image.php:37 content-link.php:37 content-quote.php:37 +#: content-video.php:37 content.php:38 inc/widgets.php:180 +msgid "1 Comment" +msgstr "1 comentario" + +#: content-aside.php:37 content-audio.php:37 content-gallery.php:37 +#: content-image.php:37 content-link.php:37 content-quote.php:37 +#: content-video.php:37 content.php:38 inc/widgets.php:180 +msgid "% Comments" +msgstr "% comentarios" + +#: content-aside.php:46 content-audio.php:46 content-gallery.php:46 +#: content-image.php:46 content-link.php:46 content-quote.php:46 +#: content-video.php:46 content.php:54 inc/widgets.php:113 inc/widgets.php:158 +msgid "Continue reading " +msgstr "Sigue leyendo " + +#: footer.php:21 +msgid "http://wordpress.org/" +msgstr "http://es.wordpress.org/" + +#: footer.php:21 +msgid "Proudly powered by %s" +msgstr "Creado con %s" + +#: functions.php:83 +msgid "Top primary menu" +msgstr "Menú principal superior" + +#: functions.php:84 +msgid "Secondary menu in left sidebar" +msgstr "Menú secundario de la barra lateral izquierda" + +#: functions.php:175 +msgid "Primary Sidebar" +msgstr "Barra lateral principal" + +#: functions.php:177 +msgid "Main sidebar that appears on the left." +msgstr "Barra lateral principal que aparece a la izquierda." + +#: functions.php:184 +msgid "Content Sidebar" +msgstr "Barra lateral de contenido" + +#: functions.php:217 +msgctxt "Lato font: on or off" +msgid "on" +msgstr "activada" + +#: functions.php:500 +msgid "Page %s" +msgstr "Página %s" + +#: header.php:48 +msgid "Search" +msgstr "Buscar" + +#: header.php:52 +msgid "Primary Menu" +msgstr "Menú principal" + +#: header.php:53 +msgid "Skip to content" +msgstr "Ir al contenido" + +#: inc/template-tags.php:84 +msgid "Post navigation" +msgstr "Ir a la entrada" + +#: inc/template-tags.php:47 +msgid "← Previous" +msgstr "← Anterior" + +#: inc/template-tags.php:48 +msgid "Next →" +msgstr "Siguiente →" + +#: inc/template-tags.php:110 +msgid "Sticky" +msgstr "Destacada" + +#: content-none.php:12 +msgid "Nothing Found" +msgstr "No se ha encontrado nada" + +#: content-none.php:18 +msgid "Ready to publish your first post? Get started here." +msgstr "¿Preparado para publicar tu primera entrada? Empieza aquí." + +#: content-none.php:22 +msgid "Sorry, but nothing matched your search terms. Please try again with some different keywords." +msgstr "Lo siento pero no hay nada que se ajuste a tus criterios de búsqueda. Por favor, inténtalo de nuevo con palabras claves distintas." + +#: content-none.php:27 +msgid "It seems we can’t find what you’re looking for. Perhaps searching can help." +msgstr "Parece que no podemos encontrar lo que estás buscando. Tal vez la búsqueda le pueda ayudar." + +#: inc/widgets.php:55 taxonomy-post_format.php:36 +msgid "Videos" +msgstr "Vídeos" + +#: inc/widgets.php:54 taxonomy-post_format.php:33 +msgid "Images" +msgstr "Imágenes" + +#: inc/widgets.php:59 taxonomy-post_format.php:48 +msgid "Galleries" +msgstr "Galerías" + +#: inc/widgets.php:53 taxonomy-post_format.php:30 +msgid "Asides" +msgstr "Minientradas" + +#: inc/widgets.php:58 taxonomy-post_format.php:45 +msgid "Links" +msgstr "Enlaces" + +#: inc/widgets.php:57 taxonomy-post_format.php:42 +msgid "Quotes" +msgstr "Citas" + +#: search.php:18 +msgid "Search Results for: %s" +msgstr "Resultados de búsqueda por: %s" + +#: inc/customizer.php:98 +msgid "Twenty Fourteen" +msgstr "Twenty Fourteen" + +msgid "the WordPress team" +msgstr "el equipo WordPress" + +msgid "Full Width Page" +msgstr "Página de ancho completo" \ No newline at end of file diff --git a/src/wp-content/languages/themes/twentythirteen-es_ES.mo b/src/wp-content/languages/themes/twentythirteen-es_ES.mo new file mode 100644 index 0000000..1d67ba3 Binary files /dev/null and b/src/wp-content/languages/themes/twentythirteen-es_ES.mo differ diff --git a/src/wp-content/languages/themes/twentythirteen-es_ES.po b/src/wp-content/languages/themes/twentythirteen-es_ES.po new file mode 100644 index 0000000..d58a2b9 --- /dev/null +++ b/src/wp-content/languages/themes/twentythirteen-es_ES.po @@ -0,0 +1,303 @@ +# Translation of Twenty Thirteen in Spanish (Spain) +# This file is distributed under the same license as the Twenty Thirteen package. +msgid "" +msgstr "" +"PO-Revision-Date: 2013-12-05 10:06:59+0000\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: GlotPress/0.1\n" +"Project-Id-Version: Twenty Thirteen\n" + +#: 404.php:16 +msgid "Not Found" +msgstr "No se encontró" + +msgid "The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small." +msgstr "El tema 2013 para WordPress se remonta al clásico esquema de blog, destacando un amplio rango de tipos de entrada, desplegando cada uno de ellos de una manera hermosa y única. El diseño abunda en detalles, comenzando por la paleta de colores vibrantes e imágenes de cabecera correspondientes, continuando con una hermosa mezcla de tipografías e iconos y finalizando con un esquema totalmente flexible que permite visualizar el sitio perfectamente desde cualquier dispositivo, pequeño o grande." + +#: functions.php:237 +msgid "Appears in the footer section of the site." +msgstr "Aparece en la sección de pie de página del sitio." + +msgid "http://wordpress.org/themes/twentythirteen" +msgstr "http://wordpress.org/themes/twentythirteen" + +#: image.php:38 +msgid "Link to full-size image" +msgstr "Enlace a imagen en tamaño completo" + +#: functions.php:235 +msgid "Main Widget Area" +msgstr "Zona principal de Widgets" + +#: functions.php:245 +msgid "Secondary Widget Area" +msgstr "Zona secundaria de Widgets" + +#: functions.php:247 +msgid "Appears on posts and pages in the sidebar." +msgstr "Aparece en páginas y artículos en la barra lateral" + +#: image.php:39 +msgid "Full resolution" +msgstr "Máxima resolución" + +#: inc/back-compat.php:41 inc/back-compat.php:53 inc/back-compat.php:68 +msgid "Twenty Thirteen requires at least WordPress version 3.6. You are running version %s. Please upgrade and try again." +msgstr "Twenty Thirteen requiere al menos la versión 3.6 de WordPress. Estás utilizando la versión %s. Por favor, actualiza e inténtalo de nuevo." + +#: 404.php:21 +msgid "This is somewhat embarrassing, isn’t it?" +msgstr "Esto es algo embarazoso ¿no?" + +#: 404.php:22 +msgid "It looks like nothing was found at this location. Maybe try a search?" +msgstr "Parece que no hay nada en este lugar. ¿Y si pruebas una búsqueda?" + +#: archive.php:29 +msgid "Daily Archives: %s" +msgstr "Archivo por días: %s" + +#: archive.php:31 +msgid "Monthly Archives: %s" +msgstr "Archivos mensuales: %s" + +#: archive.php:31 +msgctxt "monthly archives date format" +msgid "F Y" +msgstr "F Y" + +#: archive.php:33 +msgid "Yearly Archives: %s" +msgstr "Archivos anuales: %s" + +#: archive.php:33 +msgctxt "yearly archives date format" +msgid "Y" +msgstr "Y" + +#: archive.php:35 +msgid "Archives" +msgstr "Archivo" + +#: author-bio.php:26 +msgid "About %s" +msgstr "Acerca de %s" + +#: author-bio.php:30 +msgid "View all posts by %s " +msgstr "Ver todas las entradas de %s " + +#: author.php:31 +msgid "All posts by %s" +msgstr "Todas las entradas de: %s" + +#: category.php:19 +msgid "Category Archives: %s" +msgstr "Archivos de la categoría %s" + +#: comments.php:25 +msgctxt "comments title" +msgid "One thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "Un comentario en “%2$s”" +msgstr[1] "%1$s comentarios en “%2$s”" + +#: comments.php:45 +msgid "Comment navigation" +msgstr "Navegación de comentarios" + +#: comments.php:46 +msgid "← Older Comments" +msgstr "← Comentarios antiguos" + +#: comments.php:47 +msgid "Newer Comments →" +msgstr "Comentarios más recientes →" + +#: comments.php:52 +msgid "Comments are closed." +msgstr "Los comentarios están cerrados." + +#: content-aside.php:13 content-audio.php:24 content-gallery.php:24 +#: content-image.php:23 content-link.php:24 content-quote.php:13 +#: content-status.php:13 content-video.php:23 content.php:41 +msgid "Continue reading " +msgstr "Sigue leyendo " + +#: content-aside.php:14 content-audio.php:25 content-chat.php:24 +#: content-gallery.php:25 content-image.php:24 content-link.php:25 +#: content-quote.php:14 content-status.php:14 content-video.php:24 +#: content.php:42 image.php:70 page.php:35 +msgid "Pages:" +msgstr "Páginas:" + +#: content-aside.php:20 content-aside.php:28 content-audio.php:31 +#: content-chat.php:29 content-gallery.php:39 content-image.php:35 +#: content-link.php:19 content-quote.php:25 content-status.php:19 +#: content-video.php:35 content.php:31 image.php:44 page.php:39 +msgid "Edit" +msgstr "Editar" + +#: functions.php:379 +msgid "Permalink to %s" +msgstr "Enlace permanente a %s" + +#: content-gallery.php:36 content-image.php:32 content-quote.php:22 +#: content-video.php:32 content.php:49 +msgid "Leave a comment" +msgstr "Dejar un comentario" + +#: content-gallery.php:36 content-image.php:32 content-quote.php:22 +#: content-video.php:32 content.php:49 +msgid "One comment so far" +msgstr "Un comentario por ahora" + +#: content-gallery.php:36 content-image.php:32 content-quote.php:22 +#: content-video.php:32 content.php:49 +msgid "View all % comments" +msgstr "Ver todos los % comentarios" + +#: content-none.php:12 +msgid "Nothing Found" +msgstr "No se ha encontrado nada" + +#: content-none.php:18 +msgid "Ready to publish your first post? Get started here." +msgstr "¿Preparado para publicar tu primera entrada? Empieza aquí." + +#: content-none.php:22 +msgid "Sorry, but nothing matched your search terms. Please try again with different keywords." +msgstr "Lo sentimos, pero no se encuentra nada con estos términos de búsqueda. Por favor, inténtalo de nuevo con diferentes palabras clave." + +#: content-none.php:27 +msgid "It seems we can’t find what you’re looking for. Perhaps searching can help." +msgstr "Parece que no podemos encontrar lo que estás buscando. Tal vez la búsqueda le pueda ayudar." + +#: footer.php:19 +msgid "http://wordpress.org/" +msgstr "http://es.wordpress.org/" + +#: footer.php:19 +msgid "Semantic Personal Publishing Platform" +msgstr "Plataforma de publicación semántica personal." + +#: footer.php:19 +msgid "Proudly powered by %s" +msgstr "Creado con %s" + +#: functions.php:97 +msgid "Navigation Menu" +msgstr "Menú de navegación" + +#: functions.php:128 +msgctxt "Source Sans Pro font: on or off" +msgid "on" +msgstr "activa" + +#: functions.php:134 +msgctxt "Bitter font: on or off" +msgid "on" +msgstr "activa" + +#: functions.php:220 +msgid "Page %s" +msgstr "Página %s" + +#: functions.php:272 +msgid "Posts navigation" +msgstr "Ir a las entradas" + +#: functions.php:276 +msgid " Older posts" +msgstr " Entradas más antiguas" + +#: functions.php:280 +msgid "Newer posts " +msgstr "Entradas más nuevas " + +#: functions.php:308 +msgid "Post navigation" +msgstr "Ir a la entrada" + +#: functions.php:311 +msgctxt "Previous post link" +msgid " %title" +msgstr " %title" + +#: functions.php:312 +msgctxt "Next post link" +msgid "%title " +msgstr "%title " + +#: functions.php:332 +msgid "Sticky" +msgstr "Destacada" + +#: functions.php:338 functions.php:344 +msgid ", " +msgstr ", " + +#: functions.php:353 +msgid "View all posts by %s" +msgstr "Ver todas las entradas por %s" + +#: functions.php:373 +msgctxt "1: post format name. 2: date" +msgid "%1$s on %2$s" +msgstr "%1$s en %2$s" + +#: header.php:43 +msgid "Menu" +msgstr "Menú" + +#: header.php:44 +msgid "Skip to content" +msgstr "Ir al contenido" + +#: image.php:22 +msgid "Published on in %5$s" +msgstr "Publicado el en %5$s" + +#: image.php:51 +msgid " Previous" +msgstr " Anterior" + +#: image.php:52 +msgid "Next " +msgstr "Siguiente " + +#: inc/custom-header.php:51 +msgctxt "header image description" +msgid "Circle" +msgstr "Círculo" + +#: inc/custom-header.php:56 +msgctxt "header image description" +msgid "Diamond" +msgstr "Diamante" + +#: inc/custom-header.php:61 +msgctxt "header image description" +msgid "Star" +msgstr "Estrella" + +#: search.php:18 +msgid "Search Results for: %s" +msgstr "Resultados de búsqueda por: %s" + +#: tag.php:21 +msgid "Tag Archives: %s" +msgstr "Archivo de la etiqueta: %s" + +#: taxonomy-post_format.php:23 +msgid "%s Archives" +msgstr "Archivos de %s" + +msgid "Twenty Thirteen" +msgstr "Twenty Thirteen" + +msgid "the WordPress team" +msgstr "el equipo WordPress" \ No newline at end of file diff --git a/src/wp-content/languages/themes/twentytwelve-es_ES.mo b/src/wp-content/languages/themes/twentytwelve-es_ES.mo new file mode 100644 index 0000000..d37aa0f Binary files /dev/null and b/src/wp-content/languages/themes/twentytwelve-es_ES.mo differ diff --git a/src/wp-content/languages/themes/twentytwelve-es_ES.po b/src/wp-content/languages/themes/twentytwelve-es_ES.po new file mode 100644 index 0000000..657518b --- /dev/null +++ b/src/wp-content/languages/themes/twentytwelve-es_ES.po @@ -0,0 +1,308 @@ +# Translation of Twenty Twelve in Spanish (Spain) +# This file is distributed under the same license as the Twenty Twelve package. +msgid "" +msgstr "" +"PO-Revision-Date: 2013-07-31 18:21:04+0000\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: GlotPress/0.1\n" +"Project-Id-Version: Twenty Twelve\n" + +msgid "http://wordpress.org/themes/twentytwelve" +msgstr "http://wordpress.org/themes/twentytwelve" + +#: functions.php:353 +msgid "Reply" +msgstr "Responder" + +#: image.php:26 +msgid "Published at %4$s × %5$s in %8$s." +msgstr "Publicado a las %4$s × %5$s en %8$s." + +msgid "The 2012 theme for WordPress is a fully responsive theme that looks great on any device. Features include a front page template with its own widgets, an optional display font, styling for post formats on both index and single views, and an optional no-sidebar page template. Make it yours with a custom menu, header image, and background." +msgstr "El tema 2012 para WordPress es un tema totalmente adaptable que se ve genial en cualquier dispositivo. Entra sus características encontrarás una plantilla de página principal con sus propios widgets, una fuente opcional, estilos para formatos de entrada tanto en portada como en entradas, y una plantilla de página opcional sin barra lateral. Ponlo a tu gusto con un menú personalizado, la cabecera de imagen o el fondo." + +#: functions.php:101 +msgctxt "Open Sans font: on or off" +msgid "on" +msgstr "activada" + +#: functions.php:107 +msgctxt "Open Sans font: add new subset (greek, cyrillic, vietnamese)" +msgid "no-subset" +msgstr "sin derivadas" + +#: functions.php:246 +msgid "Appears on posts and pages except the optional Front Page template, which has its own widgets" +msgstr "Aparece en entradas y páginas excepto en la plantilla opcional de página principal, que tiene sus propios widgets " + +#: functions.php:254 +msgid "First Front Page Widget Area" +msgstr "Primer area de widgets de página principal" + +#: functions.php:256 functions.php:266 +msgid "Appears when using the optional Front Page template with a page set as Static Front Page" +msgstr "Aparece al usar la plantilla opcional de página principal con una página establecida como página principal estática" + +#: functions.php:264 +msgid "Second Front Page Widget Area" +msgstr "Segunda area de widgets de página principal" + +#: functions.php:396 +msgid "This entry was posted in %1$s and tagged %2$s on %3$s by %4$s." +msgstr "Esta entrada se publicó en %1$s y está etiquetada con %2$s en %3$s por %4$s." + +#: functions.php:398 +msgid "This entry was posted in %1$s on %3$s by %4$s." +msgstr "Esta entrada fue publicada en %1$s el %3$s por %4$s." + +#: functions.php:400 +msgid "This entry was posted on %3$s by %4$s." +msgstr "Esta entrada fue publicada el %3$s por %4$s." + +#: single.php:21 +msgctxt "Previous post link" +msgid "←" +msgstr "←" + +#: single.php:22 +msgctxt "Next post link" +msgid "→" +msgstr "→" + +msgid "Front Page Template" +msgstr "Plantilla de página de portada" + +msgid "Full-width Page Template, No Sidebar" +msgstr "Plantilla de ancho completo, sin laterales" + +#: content.php:16 +msgid "Featured post" +msgstr "Entrada destacada" + +#: functions.php:215 +msgid "Page %s" +msgstr "Página %s" + +#: content-link.php:12 +msgid "Link" +msgstr "Enlace" + +#: content-aside.php:23 content-image.php:23 content-link.php:21 +#: content-quote.php:20 content-status.php:37 content.php:30 +msgid "% Replies" +msgstr "% respuestas" + +#: content-aside.php:23 content-image.php:23 content-link.php:21 +#: content-quote.php:20 content-status.php:37 content.php:30 +msgid "1 Reply" +msgstr "1 respuesta" + +#: 404.php:21 +msgid "It seems we can’t find what you’re looking for. Perhaps searching can help." +msgstr "Parece que no encontramos lo que estás intentando localizar. Es posible que te ayude buscarlo." + +#: content-none.php:17 index.php:53 +msgid "Apologies, but no results were found. Perhaps searching will help find a related post." +msgstr "Disculpas, pero no se han encontrado resultados. Quizás pueda buscar una entrada relacionada." + +#: functions.php:332 +msgid "Post author" +msgstr "Autor" + +#: functions.php:317 +msgid "(Edit)" +msgstr "(Editar)" + +#: header.php:43 +msgid "Menu" +msgstr "Menú" + +#: header.php:44 +msgid "Skip to content" +msgstr "Ir al contenido" + +#: index.php:38 +msgid "No posts to display" +msgstr "No hay entradas que mostrar" + +#: index.php:42 +msgid "Ready to publish your first post? Get started here." +msgstr "¿Listo para publicar tu primera entrada? Empieza aquí." + +#: functions.php:390 +msgid "View all posts by %s" +msgstr "Ver todas las entradas de %s" + +#: image.php:41 +msgid "← Previous" +msgstr "← Anterior" + +#: image.php:42 +msgid "Next →" +msgstr "Siguiente →" + +#: search.php:18 +msgid "Search Results for: %s" +msgstr "Resultados de la búsqueda para: %s" + +#: search.php:38 +msgid "Sorry, but nothing matched your search criteria. Please try again with some different keywords." +msgstr "Lo sentimos pero no hay nada que se ajuste a tu criterio de búsqueda. Por favor, inténtalo de nuevo con otras palabras clave." + +#: archive.php:35 +msgid "Archives" +msgstr "Archivo" + +msgid "Twenty Twelve" +msgstr "Twenty Twelve" + +msgid "the WordPress team" +msgstr "el equipo de WordPress" + +#: functions.php:344 +msgid "Your comment is awaiting moderation." +msgstr "Tu comentario está pendiente de moderación." + +#: functions.php:338 +msgid "%1$s at %2$s" +msgstr "%1$s en %2$s" + +#: content-aside.php:20 content-link.php:18 content-quote.php:17 +#: content-status.php:15 +msgid "Permalink to %s" +msgstr "Enlace permanente a %s" + +#: functions.php:244 +msgid "Main Sidebar" +msgstr "Barra lateral principal" + +#: functions.php:288 single.php:20 +msgid "Post navigation" +msgstr "Navegación de entradas" + +#: functions.php:289 +msgid " Older posts" +msgstr " Entradas más antiguas" + +#: functions.php:290 +msgid "Newer posts " +msgstr "Entradas más nuevas " + +#: functions.php:317 +msgid "Pingback:" +msgstr "Pingback: " + +#: functions.php:64 +msgid "Primary Menu" +msgstr "Menú principal" + +#: footer.php:16 +msgid "Proudly powered by %s" +msgstr "Creado con %s" + +#: content-aside.php:26 content-image.php:26 content-link.php:24 +#: content-page.php:24 content-quote.php:23 content-status.php:40 +#: content.php:48 functions.php:349 image.php:37 +msgid "Edit" +msgstr "Editar" + +#: comments.php:44 +msgid "Newer Comments →" +msgstr "Comentarios más recientes →" + +#: comments.php:53 +msgid "Comments are closed." +msgstr "Los comentarios están cerrados." + +#: author.php:63 content.php:59 +msgid "About %s" +msgstr "Acerca de %s" + +#: comments.php:31 +msgid "One thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "Un pensamiento en “%2$s”" +msgstr[1] "%1$s pensamientos en “%2$s”" + +#: archive.php:31 +msgctxt "monthly archives date format" +msgid "F Y" +msgstr "F Y" + +#: archive.php:33 +msgid "Yearly Archives: %s" +msgstr "Archivo por años: %s" + +#: archive.php:33 +msgctxt "yearly archives date format" +msgid "Y" +msgstr "Y" + +#: tag.php:21 +msgid "Tag Archives: %s" +msgstr "Archivo de la etiqueta: %s" + +#: category.php:21 +msgid "Category Archives: %s" +msgstr "Archivo de la categoría: %s" + +#: archive.php:29 +msgid "Daily Archives: %s" +msgstr "Archivo por días: %s" + +#: archive.php:31 +msgid "Monthly Archives: %s" +msgstr "Archivo por meses: %s" + +#: content-aside.php:15 content-image.php:13 content-link.php:14 +#: content-quote.php:13 content-status.php:31 content.php:41 +msgid "Continue reading " +msgstr "Sigue leyendo " + +#: content-aside.php:23 content-image.php:23 content-link.php:21 +#: content-quote.php:20 content-status.php:37 content.php:30 +msgid "Leave a reply" +msgstr "Deja una respuesta" + +#: footer.php:16 +msgid "http://wordpress.org/" +msgstr "http://es.wordpress.org/" + +#: footer.php:16 +msgid "Semantic Personal Publishing Platform" +msgstr "Plataforma semántica de publicación personal" + +#: content-none.php:13 index.php:49 search.php:34 +msgid "Nothing Found" +msgstr "No se ha encontrado nada" + +#: author.php:32 +msgid "Author Archives: %s" +msgstr "Archivo del Autor: %s" + +#: comments.php:42 +msgid "Comment navigation" +msgstr "Navegación de comentarios" + +#: comments.php:43 +msgid "← Older Comments" +msgstr "← Comentarios más antiguos" + +#: functions.php:376 functions.php:379 +msgid ", " +msgstr ", " + +#: content-page.php:21 content.php:42 image.php:102 +msgid "Pages:" +msgstr "Páginas:" + +#: content.php:63 +msgid "View all posts by %s " +msgstr "Ver todas las entradas por %s " + +#: 404.php:17 +msgid "This is somewhat embarrassing, isn’t it?" +msgstr "Esto es algo embarazoso ¿no?" \ No newline at end of file diff --git a/src/wp-content/plugins/fusion-core/fusion-core.php b/src/wp-content/plugins/fusion-core/fusion-core.php new file mode 100644 index 0000000..2886131 --- /dev/null +++ b/src/wp-content/plugins/fusion-core/fusion-core.php @@ -0,0 +1,138 @@ + plugins_url( '', __FILE__ ), 'dev' => $dev_mode) ); + } + + /** + * Popup function which will show shortcode options in thickbox. + * + * @return void + */ + function popup() { + + require_once( FUSION_TINYMCE_DIR . '/fusion-sc.php' ); + + die(); + + } + +} +$fusion_shortcodes_obj = new FusionShortcodes(); +?> \ No newline at end of file diff --git a/src/wp-content/plugins/fusion-core/js/fusion-shortcodes-lib.js b/src/wp-content/plugins/fusion-core/js/fusion-shortcodes-lib.js new file mode 100644 index 0000000..547732b --- /dev/null +++ b/src/wp-content/plugins/fusion-core/js/fusion-shortcodes-lib.js @@ -0,0 +1,2 @@ +jQuery(document).ready(function($) { +}); \ No newline at end of file diff --git a/src/wp-content/plugins/fusion-core/shortcodes.css b/src/wp-content/plugins/fusion-core/shortcodes.css new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/fusion-core/shortcodes.php b/src/wp-content/plugins/fusion-core/shortcodes.php new file mode 100644 index 0000000..322dde1 --- /dev/null +++ b/src/wp-content/plugins/fusion-core/shortcodes.php @@ -0,0 +1,3508 @@ +)?\[($block)(\s[^\]]+)?\](<\/p>|
      )?/","[$2$3]",$content); + + // closing tag + $rep = preg_replace("/(

      )?\[\/($block)](<\/p>|
      )?/","[/$2]",$rep); + + return $rep; +} + +add_filter('the_content', 'avada_shortcodes_formatter'); +add_filter('widget_text', 'avada_shortcodes_formatter'); + +////////////////////////////////////////////////////////////////// +// Youtube shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('youtube', 'shortcode_youtube'); + function shortcode_youtube($atts) { + $atts = shortcode_atts( + array( + 'id' => '', + 'width' => 600, + 'height' => 360, + 'autoplay' => "false" + ), $atts); + + $autoplay = ""; + if($atts['autoplay'] == "true" || $atts['autoplay'] == "yes") { + $autoplay = "&autoplay=1"; + } + return '

      '; + } + +////////////////////////////////////////////////////////////////// +// Vimeo shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('vimeo', 'shortcode_vimeo'); + function shortcode_vimeo($atts) { + $atts = shortcode_atts( + array( + 'id' => '', + 'width' => 600, + 'height' => 360, + 'autoplay' => "false" + ), $atts); + + $protocol = (is_ssl())? 's' : ''; + + $autoplay = ""; + if($atts['autoplay'] == "true" || $atts['autoplay'] == "yes") { + $autoplay = "?autoplay=1"; + } + + return '
      '; + } + +////////////////////////////////////////////////////////////////// +// SoundCloud shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('soundcloud', 'shortcode_soundcloud'); + function shortcode_soundcloud($atts) { + $atts = shortcode_atts( + array( + 'url' => '', + 'width' => '100%', + 'height' => 81, + 'comments' => 'true', + 'auto_play' => 'true', + 'color' => 'ff7700', + ), $atts); + + if($atts['comments'] == 'yes') { + $atts['comments'] = 'true'; + } elseif($atts['comments'] == 'no') { + $atts['comments'] = 'false'; + } + + if($atts['auto_play'] == 'yes') { + $atts['auto_play'] = 'true'; + } elseif($atts['auto_play'] == 'no') { + $atts['auto_play'] = 'false'; + } + + if($atts['color']) { + $atts['color'] = str_replace('#', '', $atts['color']); + } + + return ''; + //return ''; + } + +////////////////////////////////////////////////////////////////// +// Button shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('button', 'shortcode_button'); + function shortcode_button($atts, $content = null) { + extract(shortcode_atts(array( + 'link' => '', + 'color' => 'default', + 'size' => 'small', + 'target' => '_self', + 'title' => '', + 'animation_type' => '', + 'animation_direction' => 'left', + 'animation_speed' => '' + ), $atts)); + + $direction_suffix = ''; + $animation_class = ''; + $animation_attribues = ''; + if($animation_type) { + $animation_class = ' animated'; + if($animation_type != 'flash' && $animation_type != 'shake') { + $direction_suffix = 'In'.ucfirst($animation_direction); + $animation_type .= $direction_suffix; + } + $animation_attribues = ' animation_type="'.$animation_type.'"'; + + if($animation_speed) { + $animation_attribues .= ' animation_duration="'.$animation_speed.'"'; + } + } + + if(!$color || !isset($color)) { + $color = 'default'; + } + return '' .do_shortcode($content). ''; + } + +////////////////////////////////////////////////////////////////// +// Dropcap shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('dropcap', 'shortcode_dropcap'); + function shortcode_dropcap( $atts, $content = null ) { + + return '' .do_shortcode($content). ''; + +} + +////////////////////////////////////////////////////////////////// +// Highlight shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('highlight', 'shortcode_highlight'); + function shortcode_highlight($atts, $content = null) { + $atts = shortcode_atts( + array( + 'color' => 'yellow', + ), $atts); + + if($atts['color'] == 'black') { + return '' .do_shortcode($content). ''; + } else { + return '' .do_shortcode($content). ''; + } + + } + + +////////////////////////////////////////////////////////////////// +// Check list shortcode +////////////////////////////////////////////////////////////////// +// Fontawesome icons list +$pattern = '/\.(icon-(?:\w+(?:-)?)+):before\s+{\s*content:\s*"(.+)";\s+}/'; +$fontawesome_path = plugin_dir_path( __FILE__ ) .'tinymce/css/font-awesome.css'; +if( file_exists( $fontawesome_path ) ) { + @$subject = file_get_contents($fontawesome_path); +} + +preg_match_all($pattern, $subject, $matches, PREG_SET_ORDER); + +global $icons; + +foreach($matches as $match){ + $icons[$match[1]] = $match[2]; +} + +add_shortcode('checklist', 'shortcode_checklist'); + function shortcode_checklist( $atts, $content = null ) { + global $data, $icons; + + static $avada_checklist_box_counter = 1; + + extract(shortcode_atts(array( + 'icon' => 'arrow', + 'iconcolor' => '', + 'circle' => 'yes' + ), $atts)); + + if(!$iconcolor) { + $iconcolor = strtolower($data['checklist_icons_color']); + } + + $css_attributes = ""; + if($icon != "arrow" && $icon != "asterik" && $icon != "cross") { + $css_attributes = "content:'{$icons['icon-'.$icon]}'"; + } + $str = ""; + $str .= str_replace('
        ', '
          ', $content); + $str = str_replace('
        • ', '
        • ', $str); + + $str = do_shortcode($str); + + $avada_checklist_box_counter++; + + return $str; +} + +////////////////////////////////////////////////////////////////// +// Tabs shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('tabs', 'shortcode_tabs'); + function shortcode_tabs( $atts, $content = null ) { + global $data; + + extract(shortcode_atts(array( + 'layout' => 'horizontal', + 'backgroundcolor' => '', + 'inactivecolor' => '' + ), $atts)); + + if(!$backgroundcolor) { + $backgroundcolor = $data['tabs_bg_color']; + } + + if(!$inactivecolor) { + $inactivecolor = $data['tabs_inactive_color']; + } + + static $avada_tabs_counter = 1; + + $out = ""; + + $out .= '
          '; + + $out .= '
          '; + + $out .= '
            '; + foreach ($atts as $key => $tab) { + if($key != 'layout' && $key != 'backgroundcolor' && $key != 'inactivecolor') { + $out .= '
          • ' . $tab . '
          • '; + } + } + $out .= '
          '; + + $out .= '
          '; + + $out .= do_shortcode($content) .'
          '; + + $avada_tabs_counter++; + + return $out; +} + +add_shortcode('tab', 'shortcode_tab'); + function shortcode_tab( $atts, $content = null ) { + extract(shortcode_atts(array( + ), $atts)); + + $out = ''; + $out .= '
          ' . do_shortcode($content) .'
          '; + + return $out; +} + +add_shortcode('fusion_tabs', 'shortcode_fusion_tabs'); + function shortcode_fusion_tabs( $atts, $content = null ) { + $content = preg_replace('/tab\][^\[]*/','tab]', $content); + $content = preg_replace('/^[^\[]*\[/','[', $content); + + $preg_match_all = preg_match_all( '/fusion_tab title="([^\"]+)"/i', $content, $matches ); + + if($matches[1]) { + foreach($matches[1] as $key => $title) { + $sanitized_title = hash("adler32", $title, false); + $sanitized_title = str_replace('-', '_', $sanitized_title); + $tabs .= 'tab' . $sanitized_title . '="' . $title . '" '; + } + } + + $shortcode_wrapper = '[tabs ' . $tabs . ' layout="' . $atts['layout'] . '" backgroundcolor="' . $atts['backgroundcolor'] . '" inactivecolor="' . $atts['inactivecolor'] . '"]'; + $shortcode_wrapper .= $content; + $shortcode_wrapper .= '[/tabs]'; + + return do_shortcode($shortcode_wrapper); + } + +add_shortcode('fusion_tab', 'shortcode_fusion_tab'); + function shortcode_fusion_tab( $atts, $content = null ) { + $sanitized_title = hash("adler32", $atts['title'], false); + $sanitized_title = str_replace('-', '_', $sanitized_title); + $shortcode_wrapper = '[tab id="' . $sanitized_title . '"]' . do_shortcode($content) . '[/tab]'; + + return do_shortcode($shortcode_wrapper); + } + +////////////////////////////////////////////////////////////////// +// Accordian +////////////////////////////////////////////////////////////////// +add_shortcode('accordian', 'shortcode_accordian'); + function shortcode_accordian( $atts, $content = null ) { + $out = ''; + $out .= '
          '; + $out .= do_shortcode($content); + $out .= '
          '; + + return $out; +} + +////////////////////////////////////////////////////////////////// +// Toggle shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('toggle', 'shortcode_toggle'); + function shortcode_toggle( $atts, $content = null ) { + extract(shortcode_atts(array( + 'title' => '', + 'open' => 'no' + ), $atts)); + + $toggleclass = ''; + $toggleclass2 = ''; + $togglestyle = 'display: none;'; + + if($open == 'yes'){ + $toggleclass = "active"; + $toggleclass2 = "default-open"; + $togglestyle = "display: block;"; + } + + $out = ''; + $out .= '
          ' .$title. '
          '; + $out .= '
          '; + $out .= do_shortcode($content); + $out .= '
          '; + + return $out; +} + +////////////////////////////////////////////////////////////////// +// Column one_half shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('one_half', 'shortcode_one_half'); + function shortcode_one_half($atts, $content = null) { + $atts = shortcode_atts( + array( + 'last' => 'no', + ), $atts); + + if($atts['last'] == 'yes') { + return '
          ' .do_shortcode($content). '
          '; + } else { + return '
          ' .do_shortcode($content). '
          '; + } + + } + +////////////////////////////////////////////////////////////////// +// Column one_third shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('one_third', 'shortcode_one_third'); + function shortcode_one_third($atts, $content = null) { + $atts = shortcode_atts( + array( + 'last' => 'no', + ), $atts); + + if($atts['last'] == 'yes') { + return '
          ' .do_shortcode($content). '
          '; + } else { + return '
          ' .do_shortcode($content). '
          '; + } + + } + +////////////////////////////////////////////////////////////////// +// Column two_third shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('two_third', 'shortcode_two_third'); + function shortcode_two_third($atts, $content = null) { + $atts = shortcode_atts( + array( + 'last' => 'no', + ), $atts); + + if($atts['last'] == 'yes') { + return '
          ' .do_shortcode($content). '
          '; + } else { + return '
          ' .do_shortcode($content). '
          '; + } + + } + +////////////////////////////////////////////////////////////////// +// Column one_fourth shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('one_fourth', 'shortcode_one_fourth'); + function shortcode_one_fourth($atts, $content = null) { + $atts = shortcode_atts( + array( + 'last' => 'no', + ), $atts); + + if($atts['last'] == 'yes') { + return '
          ' .do_shortcode($content). '
          '; + } else { + return '
          ' .do_shortcode($content). '
          '; + } + + } + +////////////////////////////////////////////////////////////////// +// Column three_fourth shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('three_fourth', 'shortcode_three_fourth'); + function shortcode_three_fourth($atts, $content = null) { + $atts = shortcode_atts( + array( + 'last' => 'no', + ), $atts); + + if($atts['last'] == 'yes') { + return '
          ' .do_shortcode($content). '
          '; + } else { + return '
          ' .do_shortcode($content). '
          '; + } + + } + +////////////////////////////////////////////////////////////////// +// Tagline box shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('tagline_box', 'shortcode_tagline_box'); + function shortcode_tagline_box($atts, $content = null) { + global $data; + + static $tagline_box_counter = 1; + + extract(shortcode_atts(array( + 'backgroundcolor' => '', + 'shadow' => 'no', + 'shadowopacity' => '0.7', + 'border' => '0px', + 'bordercolor' => '', + 'highlightposition' => 'left', + 'linktarget' => '_self', + 'buttoncolor' => 'default', + 'animation_type' => '', + 'animation_direction' => 'left', + 'animation_speed' => '' + ), $atts)); + + $direction_suffix = ''; + $animation_class = ''; + $animation_attribues = ''; + if($animation_type) { + $animation_class = ' animated'; + if($animation_type != 'flash' && $animation_type != 'shake') { + $direction_suffix = 'In'.ucfirst($animation_direction); + $animation_type .= $direction_suffix; + } + $animation_attribues = ' animation_type="'.$animation_type.'"'; + + if($animation_speed) { + $animation_attribues .= ' animation_duration="'.$animation_speed.'"'; + } + } + + if(!$backgroundcolor) { + $backgroundcolor = $data['tagline_bg']; + } + + if(!$bordercolor) { + $bordercolor = $data['tagline_border_color']; + } + + if(!$buttoncolor) { + $buttoncolor = 'default'; + } + + $class = ''; + + if($shadow == 'yes') { + $class = 'tagline-shadow'; + } + + $str = ""; + $str .= '
          '; + if((isset($atts['link']) && $atts['link']) && (isset($atts['button']) && $atts['button'])): + $str .= ''.$atts['button'].''; + endif; + if(isset($atts['title']) && $atts['title']): + $str .= '

          '.$atts['title'].'

          '; + endif; + if(isset($atts['description']) && $atts['description']): + $str.= '

          '.$atts['description'].'

          '; + endif; + if(isset($atts['link']) && $atts['link'] && isset($atts['button']) && $atts['button']): + $str .= ''.$atts['button'].''; + endif; + $str .= '
          '; + + $tagline_box_counter++; + + return $str; + } + +////////////////////////////////////////////////////////////////// +// Pricing table +////////////////////////////////////////////////////////////////// +add_shortcode('pricing_table', 'shortcode_pricing_table'); + function shortcode_pricing_table($atts, $content = null) { + global $data; + + extract(shortcode_atts(array( + 'backgroundcolor' => '', + 'bordercolor' => '', + 'dividercolor' => '' + ), $atts)); + + static $avada_pricing_table_counter = 1; + + if(!$backgroundcolor) { + $backgroundcolor = $data['pricing_bg_color']; + } + + if(!$bordercolor) { + $bordercolor = $data['pricing_border_color']; + } + + if(!$dividercolor) { + $dividercolor = $data['pricing_divider_color']; + } + + $str = ""; + + if($atts['type'] == '2') { + $type = 'sep'; + } elseif($atts['type'] == '1') { + $type = 'full'; + } else { + $type = 'third'; + } + $str .= '
          '; + $str .= do_shortcode($content); + $str .= '
          '; + + $avada_pricing_table_counter++; + + return $str; + } + +////////////////////////////////////////////////////////////////// +// Pricing Column +////////////////////////////////////////////////////////////////// +add_shortcode('pricing_column', 'shortcode_pricing_column'); + function shortcode_pricing_column($atts, $content = null) { + $str = '
          '; + $str .= '
            '; + if($atts['title']): + $str .= '
          • '.$atts['title'].'
          • '; + endif; + $str .= do_shortcode($content); + $str .= '
          '; + $str .= '
          '; + + return $str; + } + +////////////////////////////////////////////////////////////////// +// Pricing Row +////////////////////////////////////////////////////////////////// +add_shortcode('pricing_price', 'shortcode_pricing_price'); + function shortcode_pricing_price($atts, $content = null) { + $str = ''; + $str .= '
        • '; + if(isset($atts['currency']) && !empty($atts['currency']) && isset($atts['price']) && (!empty($atts['price']) || ($atts['price'] == '0')) ) { + $class = ''; + $price = explode('.', $atts['price']); + if($price[1]){ + $class .= 'price-with-decimal'; + } + $str .= '
          '; + $str .= ''.$atts['currency'].''; + $str .= ''.$price[0].''; + if($price[1]){ + $str .= ''.$price[1].''; + } + if($atts['time']) { + $str .= ''.$atts['time'].''; + } + $str .= '
          '; + } else { + $str .= do_shortcode($content); + } + $str .= '
        • '; + + return $str; + } + +////////////////////////////////////////////////////////////////// +// Pricing Row +////////////////////////////////////////////////////////////////// +add_shortcode('pricing_row', 'shortcode_pricing_row'); + function shortcode_pricing_row($atts, $content = null) { + $str = ''; + $str .= '
        • '; + $str .= do_shortcode($content); + $str .= '
        • '; + + return $str; + } + +////////////////////////////////////////////////////////////////// +// Pricing Footer +////////////////////////////////////////////////////////////////// +add_shortcode('pricing_footer', 'shortcode_pricing_footer'); + function shortcode_pricing_footer($atts, $content = null) { + $str = ''; + $str .= ''; + + return $str; + } + +////////////////////////////////////////////////////////////////// +// Content box shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('content_boxes', 'shortcode_content_boxes'); + function shortcode_content_boxes($atts, $content = null) { + global $data; + + extract(shortcode_atts(array( + 'layout' => 'icon-with-title', + 'iconcolor' => '', + 'circlecolor' => '', + 'circlebordercolor' => '', + 'backgroundcolor' => '' + ), $atts)); + + static $avada_content_box_counter = 1; + + if(!$iconcolor) { + $iconcolor = $data['icon_color']; + } + + if(!$circlecolor) { + $circlecolor = $data['icon_circle_color']; + } + + if(!$circlebordercolor) { + $circlebordercolor = $data['icon_border_color']; + } + + if(!$backgroundcolor) { + $backgroundcolor = $data['content_box_bg_color']; + } + + $str = ""; + + preg_match_all('/(\[content_box (.*?)\](.*?)\[\/content_box\])/s', $content, $matches); + if( is_array( $matches ) && !empty( $matches ) ) { + $columns = count($matches[0]); + if( $columns > 0 ) { + $columns = $columns; + } else if( $columns > 4 ) { + $columns = 4; + } else if ( !$columns ) { + $columns = 4; + } + } else { + $columns = 4; + } + $str .= '
          '; + $str .= do_shortcode($content); + $str .= '
          '; + + $avada_content_box_counter++; + + return $str; + } + +////////////////////////////////////////////////////////////////// +// Content box shortcode +////////////////////////////////////////////////////////////////// +add_shortcode('content_box', 'shortcode_content_box'); + function shortcode_content_box($atts, $content = null) { + + extract(shortcode_atts(array( + 'linktarget' => '_self', + 'width' => '35', + 'height' => '35', + 'animation_type' => '', + 'animation_direction' => 'left', + 'animation_speed' => '', + 'img_id' => '', + ), $atts)); + + $direction_suffix = ''; + $animation_class = ''; + $animation_attribues = ''; + if($animation_type) { + $animation_class = ' animated'; + if($animation_type != 'flash' && $animation_type != 'shake') { + $direction_suffix = 'In'.ucfirst($animation_direction); + $animation_type .= $direction_suffix; + } + $animation_attribues = ' animation_type="'.$animation_type.'"'; + + if($animation_speed) { + $animation_attribues .= ' animation_duration="'.$animation_speed.'"'; + } + } + + $str = ''; + if(!empty($atts['last']) && $atts['last'] == 'yes'): + $str .= '
          '; + else: + $str .= '
          '; + endif; + + if((isset($atts['image']) && $atts['image']) || (isset($atts['title']) && $atts['title'])): + if(!empty($atts['image'])) { + $margin_left = -$atts['image_width']/2; + $margin_top = 0; + if($atts['image_height'] < 64) { + $margin_top = strval((64 - $atts['image_height'])/2).'px'; + } + $padding_left = $atts['image_width']+10; + $img_id = "id".strval(mt_rand()); + $str .= ""; + } + if(!empty($atts['image']) || !empty($atts['icon'])){ + $str .= '
          '; + } else { + $str .= '
          '; + } + if(isset($atts['image']) && $atts['image']): + if($animation_type) { + $animation_class = 'class="animated"'; + } + $str .= ''; + elseif(!empty($atts['icon']) && $atts['icon']): + $str .= ''; + endif; + if($atts['title']): + $str .= '

          '.$atts['title'].'

          '; + endif; + $str .= '
          '; + endif; + + $str .= '
          '; + + $str .= do_shortcode($content); + + if(isset($atts['link']) && $atts['link'] && isset($atts['linktext']) && $atts['linktext']): + $str .= ''.$atts['linktext'].''; + endif; + + $str .= '
          '; + + $str .= '
          '; + + return $str; + } + +////////////////////////////////////////////////////////////////// +// Slider +////////////////////////////////////////////////////////////////// +add_shortcode('slider', 'shortcode_slider'); + function shortcode_slider($atts, $content = null) { + wp_enqueue_script( 'jquery.flexslider' ); + + extract(shortcode_atts(array( + 'width' => '100%', + 'height' => '100%' + ), $atts)); + $str = ''; + $str .= '
          '; + $str .= '
            '; + $str .= do_shortcode($content); + $str .= '
          '; + $str .= '
          '; + + return $str; + } + +////////////////////////////////////////////////////////////////// +// Slide +////////////////////////////////////////////////////////////////// +add_shortcode('slide', 'shortcode_slide'); + function shortcode_slide($atts, $content = null) { + extract(shortcode_atts(array( + 'linktarget' => '_self', + 'lightbox' => 'no' + ), $atts)); + + if($lightbox == 'yes') { + $rel = 'prettyPhoto'; + } else { + $rel = ''; + } + + $str = ''; + $alt = 'alt=""'; + $title = 'title=""'; + if($lightbox == 'yes' && $atts['type'] == 'image') { + $src = str_replace('×', 'x', $content); + if(!empty($atts['link']) && $atts['link']) { + $image_id = tf_get_attachment_id_from_url($atts['link']); + } else { + $image_id = tf_get_attachment_id_from_url($src); + } + + if($image_id) { + $alt = 'alt="'. get_post_meta($image_id, '_wp_attachment_image_alt', true).'"'; + $title = 'title="'. get_post_field("post_excerpt", $image_id).'"'; + } + } + + if(!empty($atts['type']) && $atts['type'] == 'video') { + $str .= '
        • '; + } else { + $str .= '
        • '; + } + + if(isset($atts['link']) && empty($atts['link']) && !$atts['link'] && $atts['type'] == 'image') { + $atts['link'] = $src; + } + if(!empty($atts['link']) && $atts['link']): + $str .= ''; + endif; + if(!empty($atts['type']) && $atts['type'] == 'video') { + $str .= '
          '.do_shortcode($content).'
          '; + } else { + $str .= ''; + } + if(!empty($atts['link']) && $atts['link']): + $str .= '
          '; + endif; + $str .= '
        • '; + + return $str; + } + +////////////////////////////////////////////////////////////////// +// Testimonials +////////////////////////////////////////////////////////////////// +add_shortcode('testimonials', 'shortcode_testimonials'); + function shortcode_testimonials($atts, $content = null) { + global $data; + + wp_enqueue_script( 'jquery.cycle' ); + + extract(shortcode_atts(array( + 'backgroundcolor' => '', + 'textcolor' => '' + ), $atts)); + + static $avada_testimonials_id = 1; + + if(!$backgroundcolor) { + $backgroundcolor = $data['testimonial_bg_color']; + } + + + if(!$textcolor) { + $textcolor = $data['testimonial_text_color']; + } + + $str = " + "; + + $str .= '
          '; + $str .= do_shortcode($content); + $str .= '
          '; + + $avada_testimonials_id++; + + return $str; + } + +////////////////////////////////////////////////////////////////// +// Testimonial +////////////////////////////////////////////////////////////////// +add_shortcode('testimonial', 'shortcode_testimonial'); + function shortcode_testimonial($atts, $content = null) { + if(!isset($atts['gender'])) { + $atts['gender'] = 'male'; + } + $str = ''; + $str .= '
          '; + $str .= '
          '; + $str .= ''; + $str .= do_shortcode($content); + $str .= ''; + if($atts['name']): + $str .= '
          '; + $str .= ''.$atts['name'].''; + if($atts['company']): + if(!empty($atts['link']) && $atts['link']): + $str .= ''; + endif; + $str .= ', '.$atts['company'].''; + if(!empty($atts['link']) && $atts['link']): + $str .= ''; + endif; + endif; + $str .= '
          '; + endif; + $str .= '
          '; + $str .= '
          '; + + return $str; + } + + +////////////////////////////////////////////////////////////////// +// Progess Bar +////////////////////////////////////////////////////////////////// +add_shortcode('progress', 'shortcode_progress'); +function shortcode_progress($atts, $content = null) { + global $data; + + wp_enqueue_script( 'jquery.waypoint' ); + + extract(shortcode_atts(array( + 'filledcolor' => '', + 'unfilledcolor' => '', + 'value' => '70', + 'unit' => '' + ), $atts)); + + if(!$filledcolor) { + $filledcolor = $data['counter_filled_color']; + } + + if(!$unfilledcolor) { + $unfilledcolor = $data['counter_unfilled_color']; + } + + $html = ''; + $html .= '
          '; + $html .= '
          '; + $html .= '
          '; + $html .= '' . $content . ' ' . $atts['percentage']; + if(isset($atts['unit']) && $atts['unit']) { + $html .= $atts['unit'].''; + } else { + $html .= ''; + } + $html .= '
          '; + return $html; +} + +////////////////////////////////////////////////////////////////// +// Person +////////////////////////////////////////////////////////////////// +add_shortcode('person', 'shortcode_person'); +function shortcode_person($atts, $content = null) { + global $data; + + $html = ''; + $html .= '
          '; + if($atts['picture']): + if($atts['pic_link']): + $html .= '' . $atts['name'] . ''; + else: + $html .= '' . $atts['name'] . ''; + endif; + endif; + + if(!isset($atts['linktarget'])) { + $atts['linktarget'] = ''; + } + + if($atts['name'] || $atts['title'] || $atts['facebooklink'] || $atts['twitterlink'] || $atts['linkedinlink'] || $content) { + $html .= '
          '; + $icons_color_scheme = "person-author-light"; + if($data['social_links_color'] == 'Dark') { + $icons_color_scheme = "person-author-dark"; + } + $nofollow = ''; + if($data['nofollow_social_links']) { + $nofollow = ' rel="nofollow"'; + } + $html .= '
          '; + $html .= '
          ' . $atts['name'] . ''; + $html .= '' . $atts['title'] . '
          '; + if(isset($atts['facebook']) && $atts['facebook']) { + $html .= ''; + } + if(isset($atts['twitter']) && $atts['twitter']) { + $html .= ''; + } + if(isset($atts['linkedin']) && $atts['linkedin']) { + $html .= ''; + } + if(isset($atts['dribbble']) && $atts['dribbble']) { + $html .= ''; + } + if(isset($atts['rss']) && $atts['rss']) { + $html .= ''; + } + if(isset($atts['youtube']) && $atts['youtube']) { + $html .= ''; + } + if(isset($atts['pinterest']) && $atts['pinterest']) { + $html .= ''; + } + if(isset($atts['flickr']) && $atts['flickr']) { + $html .= ''; + } + if(isset($atts['vimeo']) && $atts['vimeo']) { + $html .= ''; + } + if(isset($atts['tumlr']) && $atts['tumblr']) { + $html .= ''; + } + if(isset($atts['google']) && $atts['google']) { + $html .= ''; + } + if(isset($atts['digg']) && $atts['digg']) { + $html .= ''; + } + if(isset($atts['blogger']) && $atts['blogger']) { + $html .= ''; + } + if(isset($atts['skype']) && $atts['skype']) { + $html .= ''; + } + if(isset($atts['myspace']) && $atts['myspace']) { + $html .= ''; + } + if(isset($atts['deviantart']) && $atts['deviantart']) { + $html .= ''; + } + if(isset($atts['yahoo']) && $atts['yahoo']) { + $html .= ''; + } + if(isset($atts['reddit']) && $atts['reddit']) { + $html .= ''; + } + if(isset($atts['forrst']) && $atts['forrst']) { + $html .= ''; + } + if(isset($atts['email']) && $atts['email']) { + $html .= ''; + } + $html .= '
          '; + $html .= '
          ' . do_shortcode($content) . '
          '; + $html .= '
          '; + } + $html .= '
          '; + + return $html; +} + +////////////////////////////////////////////////////////////////// +// Recent Posts +////////////////////////////////////////////////////////////////// +add_shortcode('recent_posts', 'shortcode_recent_posts'); +function shortcode_recent_posts($atts, $content = null) { + global $data; + + wp_enqueue_script( 'jquery.flexslider' ); + + extract(shortcode_atts(array( + 'layout' => 'default', + 'columns' => 1, + 'number_posts' => 4, + 'exclude_cats' => '', + 'excerpt_words' => '15', + 'excerpt' => 'no', + 'strip_html' => 'yes', + 'cat_id' => '', + 'cat_slug' => '', + 'animation_type' => '', + 'animation_direction' => 'left', + 'animation_speed' => '' + ), $atts)); + + $direction_suffix = ''; + $animation_class = ''; + $animation_attribues = ''; + if($animation_type) { + $animation_class = ' animated'; + if($animation_type != 'flash' && $animation_type != 'shake') { + $direction_suffix = 'In'.ucfirst($animation_direction); + $animation_type .= $direction_suffix; + } + $animation_attribues = ' animation_type="'.$animation_type.'"'; + + if($animation_speed) { + $animation_attribues .= ' animation_duration="'.$animation_speed.'"'; + } + } + + if(!isset($atts['columns'])) { + $atts['columns'] = 3; + } + + if(!isset($atts['excerpt_words'])) { + $atts['excerpt_words'] = 15; + } + + if(!isset($atts['number_posts'])) { + $atts['number_posts'] = 3; + } + + if(!isset($atts['strip_html'])) { + $atts['strip_html'] = 'true'; + } + + if($atts['strip_html'] == 'yes') { + $atts['strip_html'] = 'true'; + } elseif($atts['strip_html'] == 'no') { + $atts['strip_html'] = 'false'; + } + + if(!empty($atts['cat_id']) && $atts['cat_id']){ + $query_atts['category_name'] = $atts['cat_id']; + } elseif(!empty($atts['cat_slug']) && $atts['cat_slug']){ + $query_atts['category_name'] = $atts['cat_slug']; + } + $query_atts['posts_per_page'] = $atts['number_posts']; + + if($exclude_cats) { + $cats_to_exclude = explode(',', $exclude_cats); + foreach($cats_to_exclude as $cat_to_exclude) { + $idObj = get_category_by_slug($cat_to_exclude); + if($idObj) { + $cats_id_to_exclude[] = $idObj->term_id; + } + } + if($cats_id_to_exclude) { + $query_atts['category__not_in'] = $cats_id_to_exclude; + } + } + + wp_reset_query(); + + $recent_posts = new WP_Query($query_atts); + if($layout == 'default'): + $attachment = ''; + $html = '
          '; + $html .= '
          '; + $html .= '
          '; + $count = 1; + while($recent_posts->have_posts()): $recent_posts->the_post(); + $html .= '
          '; + if($atts['thumbnail'] == "yes"): + if($data['legacy_posts_slideshow']): + $args = array( + 'post_type' => 'attachment', + 'numberposts' => $data['posts_slideshow_number']-1, + 'post_status' => null, + 'post_mime_type' => 'image', + 'post_parent' => get_the_ID(), + 'orderby' => 'menu_order', + 'order' => 'ASC', + 'exclude' => get_post_thumbnail_id() + ); + $attachments = get_posts($args); + if($attachments || has_post_thumbnail() || get_post_meta(get_the_ID(), 'pyre_video', true)): + $html .= '
          '; + $html .= '
            '; + if(get_post_meta(get_the_ID(), 'pyre_video', true)): + $html .= '
          • '; + $html .= get_post_meta(get_the_ID(), 'pyre_video', true); + $html .= '
          • '; + endif; + if(has_post_thumbnail()): + $attachment_image = wp_get_attachment_image_src(get_post_thumbnail_id(), 'recent-posts'); + $full_image = wp_get_attachment_image_src(get_post_thumbnail_id(), 'full'); + $attachment_data = wp_get_attachment_metadata(get_post_thumbnail_id()); + $html .= '
          • + '.get_the_title().' +
          • '; + endif; + if($data['posts_slideshow']): + foreach($attachments as $attachment): + $attachment_image = wp_get_attachment_image_src($attachment->ID, 'recent-posts'); + $full_image = wp_get_attachment_image_src($attachment->ID, 'full'); + $attachment_data = wp_get_attachment_metadata($attachment->ID); + $html .= '
          • + '.$attachment->post_title.' +
          • '; + endforeach; + endif; + $html .= '
          +
          '; + endif; + else: + if(has_post_thumbnail() || get_post_meta(get_the_ID(), 'pyre_video', true)): + $html .= '
          '; + $html .= '
            '; + if(get_post_meta(get_the_ID(), 'pyre_video', true)): + $html .= '
          • '; + $html .= get_post_meta(get_the_ID(), 'pyre_video', true); + $html .= '
          • '; + endif; + if(has_post_thumbnail()): + $attachment_image = wp_get_attachment_image_src(get_post_thumbnail_id(), 'recent-posts'); + $full_image = wp_get_attachment_image_src(get_post_thumbnail_id(), 'full'); + $attachment_data = wp_get_attachment_metadata(get_post_thumbnail_id()); + $html .= '
          • + '.get_the_title().' +
          • '; + endif; + if($data['posts_slideshow']): + $i = 2; + while($i <= $data['posts_slideshow_number']): + $attachment_new_id = kd_mfi_get_featured_image_id('featured-image-'.$i, 'post'); + if($attachment_new_id): + $attachment_image = wp_get_attachment_image_src($attachment_new_id, 'recent-posts'); + $full_image = wp_get_attachment_image_src($attachment_new_id, 'full'); + $attachment_data = wp_get_attachment_metadata($attachment_new_id); + $html .= '
          • + +
          • '; + endif; $i++; endwhile; + endif; + $html .= '
          +
          '; + endif; + endif; + endif; + if($atts['title'] == "yes"): + $html .= '

          '.get_the_title().'

          '; + endif; + if($atts['meta'] == "yes"): + $html .= ''; + endif; + if($atts['excerpt'] == "yes"): + $stripped_content = tf_content( $atts['excerpt_words'], $atts['strip_html'] ); + $html .= '

          '.$stripped_content.'

          '; + endif; + $html .= '
          '; + $count++; + endwhile; + $html .= '
          '; + $html .= '
          '; + $html .= '
          '; + elseif($layout == 'thumbnails-on-side'): + $attachment = ''; + $html = '
          '; + $html .= '
          '; + $html .= '
          '; + $count = 1; + while($recent_posts->have_posts()): $recent_posts->the_post(); + $html .= '
          '; + if($atts['thumbnail'] == "yes"): + if($data['legacy_posts_slideshow']): + $args = array( + 'post_type' => 'attachment', + 'numberposts' => $data['posts_slideshow_number']-1, + 'post_status' => null, + 'post_mime_type' => 'image', + 'post_parent' => get_the_ID(), + 'orderby' => 'menu_order', + 'order' => 'ASC', + 'exclude' => get_post_thumbnail_id() + ); + $attachments = get_posts($args); + if($attachments || has_post_thumbnail() || get_post_meta(get_the_ID(), 'pyre_video', true)): + $html .= '
          '; + $html .= '
            '; + if(get_post_meta(get_the_ID(), 'pyre_video', true)): + $html .= '
          • '; + $html .= get_post_meta(get_the_ID(), 'pyre_video', true); + $html .= '
          • '; + endif; + if(has_post_thumbnail()): + $attachment_image = wp_get_attachment_image_src(get_post_thumbnail_id(), 'portfolio-two'); + $full_image = wp_get_attachment_image_src(get_post_thumbnail_id(), 'full'); + $attachment_data = wp_get_attachment_metadata(get_post_thumbnail_id()); + $html .= '
          • + '.get_the_title().' +
          • '; + endif; + if($data['posts_slideshow']): + foreach($attachments as $attachment): + $attachment_image = wp_get_attachment_image_src($attachment->ID, 'portfolio-two'); + $full_image = wp_get_attachment_image_src($attachment->ID, 'full'); + $attachment_data = wp_get_attachment_metadata($attachment->ID); + $html .= '
          • + '.$attachment->post_title.' +
          • '; + endforeach; + endif; + $html .= '
          +
          '; + endif; + else: + if(has_post_thumbnail() || get_post_meta(get_the_ID(), 'pyre_video', true)): + $html .= '
          ';; + $html .= '
            '; + if(get_post_meta(get_the_ID(), 'pyre_video', true)): + $html .= '
          • '; + $html .= get_post_meta(get_the_ID(), 'pyre_video', true); + $html .= '
          • '; + endif; + if(has_post_thumbnail()): + $attachment_image = wp_get_attachment_image_src(get_post_thumbnail_id(), 'portfolio-two'); + $full_image = wp_get_attachment_image_src(get_post_thumbnail_id(), 'full'); + $attachment_data = wp_get_attachment_metadata(get_post_thumbnail_id()); + $html .= '
          • + '.get_the_title().' +
          • '; + endif; + if($data['posts_slideshow']): + $i = 2; + while($i <= $data['posts_slideshow_number']): + $attachment_new_id = kd_mfi_get_featured_image_id('featured-image-'.$i, 'post'); + if($attachment_new_id): + $attachment_image = wp_get_attachment_image_src($attachment_new_id, 'portfolio-two'); + $full_image = wp_get_attachment_image_src($attachment_new_id, 'full'); + $attachment_data = wp_get_attachment_metadata($attachment_new_id); + $html .= '
          • + +
          • '; + endif; $i++; endwhile; + endif; + $html .= '
          +
          '; + endif; + endif; + endif; + $html .= '
          '; + if($atts['title'] == "yes"): + $html .= '

          '.get_the_title().'

          '; + endif; + if($atts['meta'] == "yes"): + $html .= ''; + endif; + if($atts['excerpt'] == "yes"): + $stripped_content = tf_content( $atts['excerpt_words'], $atts['strip_html'] ); + $html .= $stripped_content; + endif; + $html .= '
          '; + $html .= '
          '; + $count++; + endwhile; + $html .= '
          '; + $html .= '
          '; + $html .= '
          '; + elseif($layout == 'date-on-side'): + $attachment = ''; + $html = '
          '; + $html .= '
          '; + $html .= '
          '; + $count = 1; + while($recent_posts->have_posts()): $recent_posts->the_post(); + $html .= '
          '; + $html .= '
          +
          + '.get_the_time('j').' + '.get_the_time('m, Y').' +
          '; + $html .= '
          '; + switch(get_post_format()) { + case 'gallery': + $format_class = 'camera-retro'; + break; + case 'link': + $format_class = 'link'; + break; + case 'image': + $format_class = 'picture'; + break; + case 'quote': + $format_class = 'quote-left'; + break; + case 'video': + $format_class = 'film'; + break; + case 'audio': + $format_class = 'headphones'; + break; + case 'chat': + $format_class = 'comments-alt'; + break; + default: + $format_class = 'book'; + break; + } + $html .= ' +
          +
          '; + $html .= '
          '; + if($atts['title'] == "yes"): + $html .= '

          '.get_the_title().'

          '; + endif; + if($atts['meta'] == "yes"): + $html .= ''; + endif; + if($atts['excerpt'] == "yes"): + $stripped_content = tf_content( $atts['excerpt_words'], $atts['strip_html'] ); + $html .= $stripped_content; + endif; + $html .= '
          '; + $html .= '
          '; + $count++; + endwhile; + $html .= '
          '; + $html .= '
          '; + $html .= '
          '; + endif; + + wp_reset_query(); + + return $html; +} + +////////////////////////////////////////////////////////////////// +// Recent Works +////////////////////////////////////////////////////////////////// +add_shortcode('recent_works', 'shortcode_recent_works'); +function shortcode_recent_works($atts, $content = null) { + global $data; + + static $recent_works_counter = 1; + + wp_enqueue_script( 'jquery.isotope' ); + wp_enqueue_script( 'jquery.carouFredSel' ); + + extract(shortcode_atts(array( + 'layout' => 'carousel', + 'filters' => 'true', + 'columns' => 4, + 'cat_slug' => '', + 'number_posts' => 10, + 'excerpt_words' => 15, + 'animation_type' => '', + 'animation_direction' => 'left', + 'animation_speed' => '' + ), $atts)); + + $direction_suffix = ''; + $animation_class = ''; + $animation_attribues = ''; + if($animation_type) { + $animation_class = ' animated'; + if($animation_type != 'flash' && $animation_type != 'shake') { + $direction_suffix = 'In'.ucfirst($animation_direction); + $animation_type .= $direction_suffix; + } + $animation_attribues = ' animation_type="'.$animation_type.'"'; + + if($animation_speed) { + $animation_attribues .= ' animation_duration="'.$animation_speed.'"'; + } + } + + if($columns == 1) { + $columns_words = 'one'; + $portfolio_image_size = 'full'; + } elseif($columns == 2) { + $columns_words = 'two'; + $portfolio_image_size = 'portfolio-two'; + } elseif($columns == 3) { + $columns_words = 'three'; + $portfolio_image_size = 'portfolio-three'; + } elseif($columns == 4) { + $columns_words = 'four'; + $portfolio_image_size = 'portfolio-four'; + } + + if($filters == 'yes') { + $filters = 'true'; + } elseif($filters == 'no') { + $filters = 'false'; + } + + $html = ''; + + wp_reset_query(); + + if($layout == 'carousel') { + $html .= ''; + wp_reset_query(); + } elseif($layout == 'grid') { + $html .= '
          '; + + $portfolio_category = get_terms('portfolio_category'); + if($portfolio_category && $filters == 'true'): + $html .= '
            +
          • '.__('All', 'Avada').'
          • '; + foreach($portfolio_category as $portfolio_cat): + if($atts['cat_slug']): + $cat_slug = preg_replace('/\s+/', '', $atts['cat_slug']); + $cat_slug = explode(',', $cat_slug); + if(in_array($portfolio_cat->slug, $cat_slug)): + $html .='
          • '.$portfolio_cat->name.'
          • '; + endif; + else: + $html .= '
          • '.$portfolio_cat->name.'
          • '; + endif; + endforeach; + $html .= '
          '; + endif; + + $html .= '
          '; + + $args = array( + 'post_type' => 'avada_portfolio', + 'posts_per_page' => $number_posts + ); + if(isset($atts['cat_id']) && !empty($atts['cat_id'])){ + $cat_id = explode(',', $atts['cat_id']); + $args['tax_query'] = array( + array( + 'taxonomy' => 'portfolio_category', + 'field' => 'slug', + 'terms' => $cat_id + ) + ); + } elseif(isset($atts['cat_slug']) && !empty($atts['cat_slug'])){ + $cat_id = explode(',', $atts['cat_slug']); + $args['tax_query'] = array( + array( + 'taxonomy' => 'portfolio_category', + 'field' => 'slug', + 'terms' => $cat_id + ) + ); + } + $gallery = new WP_Query($args); + while($gallery->have_posts()): $gallery->the_post(); + if(has_post_thumbnail() || get_post_meta(get_the_ID(), 'pyre_video', true)): + $item_classes = ''; + $item_cats = get_the_terms(get_the_ID(), 'portfolio_category'); + if($item_cats): + foreach($item_cats as $item_cat) { + $item_classes .= $item_cat->slug . ' '; + } + endif; + + $permalink = get_permalink(); + + $html .= '
          '; + if(has_post_thumbnail()): + $html .= '
          '; + if($data['image_rollover']): + $thumbnail = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()), $portfolio_image_size); + $html .= ''.get_post_field('post_excerpt', get_post_thumbnail_id(get_the_ID())).''; + else: + $thumbnail = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()), $portfolio_image_size); + $html .= ''.''.get_post_field('post_excerpt', get_post_thumbnail_id(get_the_ID())).''.''; + endif; + if(get_post_meta(get_the_ID(), 'pyre_image_rollover_icons', true) == 'link') { + $link_icon_css = 'display:inline-block;'; + $zoom_icon_css = 'display:none;'; + } elseif(get_post_meta(get_the_ID(), 'pyre_image_rollover_icons', true) == 'zoom') { + $link_icon_css = 'display:none;'; + $zoom_icon_css = 'display:inline-block;'; + } elseif(get_post_meta(get_the_ID(), 'pyre_image_rollover_icons', true) == 'no') { + $link_icon_css = 'display:none;'; + $zoom_icon_css = 'display:none;'; + } else { + $link_icon_css = 'display:inline-block;'; + $zoom_icon_css = 'display:inline-block;'; + } + + $link_target = ""; + $icon_url_check = get_post_meta(get_the_ID(), 'pyre_link_icon_url', true); if(!empty($icon_url_check)) { + $icon_permalink = get_post_meta(get_the_ID(), 'pyre_link_icon_url', true); + if(get_post_meta(get_the_ID(), 'pyre_link_icon_target', true) == "yes") { + $link_target = ' target="_blank"'; + } + } else { + $icon_permalink = get_permalink(get_the_ID()); + } + $html .= '
          +
          '; + $full_image = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()), 'full'); + $html .= 'Permalink'; + + if(get_post_meta(get_the_ID(), 'pyre_video_url', true)) { + $full_image[0] = get_post_meta(get_the_ID(), 'pyre_video_url', true); + } + + $html .= ''.get_post_meta(get_post_thumbnail_id(get_the_ID()), '_wp_attachment_image_alt', true).'Gallery'; + if($data['title_link_image_rollover']) { + $html .= '

          '.get_the_title().'

          '; + } else { + $html .= '

          '.get_the_title().'

          '; + } + $html .= '

          '.get_the_term_list(get_the_ID(), 'portfolio_category', '', ', ', '').'

          '; + $html .= '
          +
          +
          '; + endif; + $html .= '
          '; + endif; + endwhile; + wp_reset_query(); + + $html .= '
          '; + + $html .= '
          '; + } elseif($layout == 'grid-with-excerpts') { + $html .= '
          '; + + $portfolio_category = get_terms('portfolio_category'); + if($portfolio_category && $filters == 'true'): + $html .= '
            +
          • '.__('All', 'Avada').'
          • '; + foreach($portfolio_category as $portfolio_cat): + if($atts['cat_slug']): + $cat_slug = preg_replace('/\s+/', '', $atts['cat_slug']); + $cat_slug = explode(',', $cat_slug); + if(in_array($portfolio_cat->slug, $cat_slug)): + $html .='
          • '.$portfolio_cat->name.'
          • '; + endif; + else: + $html .= '
          • '.$portfolio_cat->name.'
          • '; + endif; + endforeach; + $html .= '
          '; + endif; + + $html .= '
          '; + + $args = array( + 'post_type' => 'avada_portfolio', + 'posts_per_page' => $number_posts + ); + if(isset($atts['cat_id']) && !empty($atts['cat_id'])){ + $cat_id = explode(',', $atts['cat_id']); + $args['tax_query'] = array( + array( + 'taxonomy' => 'portfolio_category', + 'field' => 'slug', + 'terms' => $cat_id + ) + ); + } elseif(isset($atts['cat_slug']) && !empty($atts['cat_slug'])){ + $cat_id = explode(',', $atts['cat_slug']); + $args['tax_query'] = array( + array( + 'taxonomy' => 'portfolio_category', + 'field' => 'slug', + 'terms' => $cat_id + ) + ); + } + $gallery = new WP_Query($args); + while($gallery->have_posts()): $gallery->the_post(); + if(has_post_thumbnail() || get_post_meta(get_the_ID(), 'pyre_video', true)): + $item_classes = ''; + $item_cats = get_the_terms(get_the_ID(), 'portfolio_category'); + if($item_cats): + foreach($item_cats as $item_cat) { + $item_classes .= $item_cat->slug . ' '; + } + endif; + + $permalink = get_permalink(); + + $html .= '
          '; + if(has_post_thumbnail()): + $html .= '
          '; + if($data['image_rollover']): + $thumbnail = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()), $portfolio_image_size); + $html .= ''.get_post_field('post_excerpt', get_post_thumbnail_id(get_the_ID())).''; + else: + $thumbnail = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()), $portfolio_image_size); + $html .= ''.get_post_field('post_excerpt', get_post_thumbnail_id(get_the_ID())).''; + endif; + if(get_post_meta(get_the_ID(), 'pyre_image_rollover_icons', true) == 'link') { + $link_icon_css = 'display:inline-block;'; + $zoom_icon_css = 'display:none;'; + } elseif(get_post_meta(get_the_ID(), 'pyre_image_rollover_icons', true) == 'zoom') { + $link_icon_css = 'display:none;'; + $zoom_icon_css = 'display:inline-block;'; + } elseif(get_post_meta(get_the_ID(), 'pyre_image_rollover_icons', true) == 'no') { + $link_icon_css = 'display:none;'; + $zoom_icon_css = 'display:none;'; + } else { + $link_icon_css = 'display:inline-block;'; + $zoom_icon_css = 'display:inline-block;'; + } + + $link_target = ""; + $icon_url_check = get_post_meta(get_the_ID(), 'pyre_link_icon_url', true); if(!empty($icon_url_check)) { + $icon_permalink = get_post_meta(get_the_ID(), 'pyre_link_icon_url', true); + if(get_post_meta(get_the_ID(), 'pyre_link_icon_target', true) == "yes") { + $link_target = ' target="_blank"'; + } + } else { + $icon_permalink = get_permalink(get_the_ID()); + } + $html .= '
          +
          '; + $full_image = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()), 'full'); + $html .= 'Permalink'; + + if(get_post_meta(get_the_ID(), 'pyre_video_url', true)) { + $full_image[0] = get_post_meta(get_the_ID(), 'pyre_video_url', true); + } + + $html .= ''.get_post_meta(get_post_thumbnail_id(get_the_ID()), '_wp_attachment_image_alt', true).'Gallery'; + if($data['title_link_image_rollover']) { + $html .= '

          '.get_the_title().'

          '; + } else { + $html .= '

          '.get_the_title().'

          '; + }; + $html .= '

          '.get_the_term_list(get_the_ID(), 'portfolio_category', '', ', ', '').'

          '; + $html .= '
          +
          +
          '; + $html .= '
          +

          '.get_the_title().'

          +

          '.get_the_term_list(get_the_ID(), 'portfolio_category', '', ', ', '').'

          '; + + $excerpt_length = $excerpt_words; + + $stripped_content = strip_shortcodes( tf_content( $excerpt_length, $data['strip_html_excerpt'] ) ); + $html .= $stripped_content; + + if($columns == 1): + $html .= '
          + '.__('Learn More', 'Avada').''; + if(get_post_meta(get_the_ID(), 'pyre_project_url', true)): + $html .= ''.__('View Project', 'Avada').''; + endif; + $html .= '
          '; + endif; + $html .= '
          '; + endif; + $html .= '
          '; + endif; + endwhile; + wp_reset_query(); + + $html .= '
          '; + + $html .= '
          '; + } + + $recent_works_counter++; + + return $html; +} + + +////////////////////////////////////////////////////////////////// +// Alert Message +////////////////////////////////////////////////////////////////// +add_shortcode('alert', 'shortcode_alert'); +function shortcode_alert($atts, $content = null) { + + extract(shortcode_atts(array( + 'type' => 'general', + 'animation_type' => '', + 'animation_direction' => 'left', + 'animation_speed' => '' + ), $atts)); + + $direction_suffix = ''; + $animation_class = ''; + $animation_attribues = ''; + if($animation_type) { + $animation_class = ' animated'; + if($animation_type != 'flash' && $animation_type != 'shake') { + $direction_suffix = 'In'.ucfirst($animation_direction); + $animation_type .= $direction_suffix; + } + $animation_attribues = ' animation_type="'.$animation_type.'"'; + + if($animation_speed) { + $animation_attribues .= ' animation_duration="'.$animation_speed.'"'; + } + } + $html = ''; + $html .= '
          '; + $html .= '
          '.do_shortcode($content).'
          '; + $html .= 'Toggle'; + $html .= '
          '; + + return $html; +} + +////////////////////////////////////////////////////////////////// +// FontAwesome Icons +////////////////////////////////////////////////////////////////// +add_shortcode('fontawesome', 'shortcode_fontawesome'); +function shortcode_fontawesome($atts, $content = null) { + global $data; + + extract(shortcode_atts(array( + 'iconcolor' => '', + 'circlecolor' => '', + 'circlebordercolor' => '', + 'animation_type' => '', + 'animation_direction' => 'left', + 'animation_speed' => '' + ), $atts)); + + $direction_suffix = ''; + $animation_class = ''; + $animation_attribues = ''; + if($animation_type) { + $animation_class = ' animated'; + if($animation_type != 'flash' && $animation_type != 'shake') { + $direction_suffix = 'In'.ucfirst($animation_direction); + $animation_type .= $direction_suffix; + } + $animation_attribues = 'animation_type="'.$animation_type.'"'; + + if($animation_speed) { + $animation_attribues .= ' animation_duration="'.$animation_speed.'"'; + } + } + + if(!$iconcolor) { + $iconcolor = $data['icon_color']; + } + + if(!$circlecolor) { + $circlecolor = $data['icon_circle_color']; + } + + if(!$circlebordercolor) { + $circlebordercolor = $data['icon_border_color']; + } + + $style = 'color:'.$iconcolor.' !important;'; + + if($atts['circle'] == 'yes') { + $style .= 'background-color:'.$circlecolor.' !important;border:1px solid '.$circlebordercolor.' !important;'; + } + + $html = ''; + + return $html; +} + +////////////////////////////////////////////////////////////////// +// Social Links +////////////////////////////////////////////////////////////////// +add_shortcode('social_links', 'shortcode_social_links'); +function shortcode_social_links($atts, $content = null) { + global $data; + + extract(shortcode_atts(array( + 'colorscheme' => '', + 'linktarget' => '_self', + 'show_custom' => "no" + ), $atts)); + + if(!$colorscheme) { + $colorscheme = strtolower($data['social_links_color']); + } + + $nofollow = ''; + if($data['nofollow_social_links']) { + $nofollow = ' rel="nofollow"'; + } + + $html = ''; + + return $html; +} + +////////////////////////////////////////////////////////////////// +// Clients container +////////////////////////////////////////////////////////////////// +add_shortcode('clients', 'shortcode_clients'); +function shortcode_clients($atts, $content = null) { + wp_enqueue_script( 'jquery.carouFredSel' ); + + extract(shortcode_atts(array( + 'picture_size' => 'fixed' + ), $atts)); + + $css_class = "related-posts"; + $carousel_class = "clients-carousel"; + if($picture_size != 'fixed') { + $css_class = ""; + $carousel_class = ""; + } + + $picture_size == 'fixed'; + + $html = ''; + return $html; +} + +////////////////////////////////////////////////////////////////// +// Client +////////////////////////////////////////////////////////////////// +add_shortcode('client', 'shortcode_client'); +function shortcode_client($atts, $content = null) { + extract(shortcode_atts(array( + 'linktarget' => '_self', + 'link' => '', + 'image' => '', + 'alt' => '', + ), $atts)); + + $html = '
        • '; + if ($link) { + $html .= ''.$alt.''; + } else { + $html .= ''.$alt.''; + } + $html .= '
        • '; + return $html; +} + +////////////////////////////////////////////////////////////////// +// Title +////////////////////////////////////////////////////////////////// +add_shortcode('title', 'shortcode_title'); +function shortcode_title($atts, $content = null) { + + $html = '
          '.do_shortcode($content).'
          '; + + return $html; +} + +////////////////////////////////////////////////////////////////// +// Separator +////////////////////////////////////////////////////////////////// +add_shortcode('separator', 'shortcode_separator'); +function shortcode_separator($atts, $content = null) { + extract(shortcode_atts(array( + 'style' => 'none', + ), $atts)); + $html = ''; + $css = ''; + if($style != 'none') { + $css = 'margin-bottom:'.$atts['top'].'px'; + } + $html .= '
          '; + return $html; +} + +////////////////////////////////////////////////////////////////// +// Tooltip +////////////////////////////////////////////////////////////////// +add_shortcode('tooltip', 'shortcode_tooltip'); +function shortcode_tooltip($atts, $content = null) { + extract(shortcode_atts(array( + 'title' => 'none', + ), $atts)); + + $html = ''; + $html .= $content; + $html .= ' + + '.$title.' + + '; + $html .= ''; + + return $html; +} + +////////////////////////////////////////////////////////////////// +// Full Width +////////////////////////////////////////////////////////////////// +add_shortcode('fullwidth', 'shortcode_fullwidth'); +function shortcode_fullwidth($atts, $content = null) { + extract(shortcode_atts(array( + 'backgroundcolor' => '', + 'backgroundimage' => '', + 'backgroundrepeat' => 'no-repeat', + 'backgroundposition' => 'top left', + 'backgroundattachment' => 'scroll', + 'bordersize' => '1px', + 'bordercolor' => '', + 'paddingtop' => '20px', + 'paddingbottom' => '20px' + ), $atts)); + + $css = ''; + if($backgroundrepeat == 'no-repeat') { + $css .= '-webkit-background-size: cover;-moz-background-size: cover;-o-background-size: cover;background-size: cover;'; + } + + $html = '
          '; + $html .= '
          '; + $html .= do_shortcode($content); + $html .= '
          '; + $html .= '
          '; + + return $html; +} + +////////////////////////////////////////////////////////////////// +// Google Map +////////////////////////////////////////////////////////////////// +add_shortcode('map', 'shortcode_google_map'); +function shortcode_google_map($atts, $content = null) { + global $data; + + wp_enqueue_script( 'gmaps.api' ); + wp_enqueue_script( 'jquery.ui.map' ); + + extract(shortcode_atts(array( + 'address' => '', + 'type' => 'satellite', + 'width' => '100%', + 'height' => '300px', + 'zoom' => '14', + 'scrollwheel' => 'true', + 'scale' => 'true', + 'zoom_pancontrol' => 'true', + ), $atts)); + + static $avada_map_counter = 1; + + if($scrollwheel == 'yes') { + $scrollwheel = 'true'; + } elseif($scrollwheel == 'no') { + $scrollwheel = 'false'; + } + + if($scale == 'yes') { + $scale = 'true'; + } elseif($scale == 'no') { + $scale = 'false'; + } + + if($zoom_pancontrol == 'yes') { + $zoom_pancontrol = 'true'; + } elseif($zoom_pancontrol == 'no') { + $zoom_pancontrol = 'false'; + } + + $address = addslashes($address); + $addresses = explode('|', $address); + + $markers = ''; + $marker_counter = 0; + foreach($addresses as $address_string) { + $markers .= "{ + id: 'gmap-{$avada_map_counter}-{$marker_counter}', + address: '{$address_string}', + html: { + content: '{$address_string}', + popup: true + } + },"; + $marker_counter++; + } + + if(!$data['status_gmap']) { + $html = ""; + } + + $html .= '
          '; + $html .= '
          '; + + $avada_map_counter++; + + return $html; +} + +////////////////////////////////////////////////////////////////// +// Counters (Circle) +////////////////////////////////////////////////////////////////// +add_shortcode('counters_circle', 'shortcode_counters_circle'); +function shortcode_counters_circle($atts, $content = null) { + $html = '
          '; + $html .= do_shortcode($content); + $html .= '
          '; + + return $html; +} + +////////////////////////////////////////////////////////////////// +// Counter (Circle) +////////////////////////////////////////////////////////////////// +add_shortcode('counter_circle', 'shortcode_counter_circle'); +function shortcode_counter_circle($atts, $content = null) { + global $data; + + wp_enqueue_script( 'jquery.waypoint' ); + + + extract(shortcode_atts(array( + 'filledcolor' => '#A0CE4E', + 'unfilledcolor' => '#e3edd1', + 'value' => '70', + 'size' => '220', + 'speed' => '1500' + ), $atts)); + + if(!$filledcolor) { + $filledcolor = $data['counter_filled_color']; + } + + if(!$unfilledcolor) { + $unfilledcolor = $data['counter_unfilled_color']; + } + + static $avada_counter_circle = 1; + + $multiplicator = $size / 220; + $stroke_size = 11 * $multiplicator; + $font_size = 50 * $multiplicator; + $html .= '
          '; + $html .= '
          '; + $html .= do_shortcode($content); + $html .='
          '; + + $avada_counter_circle++; + + return $html; +} + +////////////////////////////////////////////////////////////////// +// Counters Box +////////////////////////////////////////////////////////////////// +add_shortcode('counters_box', 'shortcode_counters_box'); +function shortcode_counters_box($atts, $content = null) { + $html = '
          '; + $html .= do_shortcode($content); + $html .= '
          '; + + return $html; +} + +////////////////////////////////////////////////////////////////// +// Counter Box +////////////////////////////////////////////////////////////////// +add_shortcode('counter_box', 'shortcode_counter_box'); +function shortcode_counter_box($atts, $content = null) { + extract(shortcode_atts(array( + 'value' => '70', + 'unit' => '' + ), $atts)); + + $html = ''; + $html .= '
          '; + $html .= '
          '; + $value = intval($value); + + $html .= '0'; + if($unit) { + $html .= ''.$atts['unit'].''; + } + $html .= '
          '; + $html .= '
          '; + $html .= do_shortcode($content); + $html .= '
          '; + $html .= '
          '; + + return $html; +} + +////////////////////////////////////////////////////////////////// +// Flexslider +////////////////////////////////////////////////////////////////// +add_shortcode('flexslider', 'shortcode_flexslider'); +function shortcode_flexslider($atts, $content = null) { + extract(shortcode_atts(array( + 'layout' => 'posts', + 'excerpt' => '25', + 'category' => '', + 'limit' => '3', + 'id' => '', + 'lightbox' => 'no' + ), $atts)); + + $shortcode = ''; + + if($layout == 'posts') { + if($id) { + $shortcode .= 'id="'.$id.'"'; + } + if($category) { + $shortcode .= ' category="'.$category.'"'; + } + $html = do_shortcode('[wooslider slider_type="posts" layout="text-bottom" overlay="natural" link_title="true" display_excerpt="false" limit="'.$limit.'" excerpt="'.$excerpt.'" '.$shortcode.']'); + } elseif($layout == 'posts-with-excerpt') { + if($id) { + $shortcode .= 'id="'.$id.'"'; + } + if($category) { + $shortcode .= ' category="'.$category.'"'; + } + $html = do_shortcode('[wooslider slider_type="posts" layout="text-left" overlay="full" link_title="true" display_excerpt="true" limit="'.$limit.'" excerpt="'.$excerpt.'" '.$shortcode.']'); + } else { + if($id) { + $shortcode .= 'id="'.$id.'"'; + } + $html = do_shortcode('[wooslider limit="'.$limit.'" slider_type="attachments" thumbnails="true" '.$shortcode.' lightbox="'.$lightbox.'"]'); + } + + return $html; +} + + +////////////////////////////////////////////////////////////////// +// Blog Shortcode. Credits: media-lounge.at +////////////////////////////////////////////////////////////////// +function blog_shortcode($atts) { + global $data; + global $post; + + wp_enqueue_script( '/js/jquery.flexslider-min' ); + + if((is_front_page() || is_home() ) ) { + $paged = (get_query_var('paged')) ?get_query_var('paged') : ((get_query_var('page')) ? get_query_var('page') : 1); + } else { + $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; + } + + // get specified number of posts per page + if (isset($atts['number_posts']) && $atts['number_posts']) { + $atts['number_posts'] = (int) $atts['number_posts']; + + $atts = shortcode_atts( array( + 'author' => '', + 'author_name' => '', + 'category_name' => '', + 'cat' => '', + 'id' => false, + 'p' => false, + 'post__in' => false, + 'order' => 'DESC', + 'orderby' => 'date', + 'post_status' => 'publish', + 'post_type' => 'post', + 'posts_per_page' => (int) $atts['number_posts'], + 'nopaging' => false, + 'paged' => $paged, + 'tag' => '', + 'tax_operator' => 'IN', + 'tax_term' => false, + 'taxonomy' => 'category', + 'title_meta' => '', + 'include_shortcodes' => false, + 'layout' => 'large', + + 'cat_slug' => '', + 'title' => true, + 'meta_all' => true, + 'meta_author' => true, + 'meta_date' => true, + 'meta_categories' => true, + 'meta_comments' => true, + 'meta_link' => true, + 'thumbnail' => true, + 'excerpt' => true, + 'excerpt_words' => '50', + 'strip_html' => true, + 'paging' => true, + 'scrolling' => 'infinite', + 'blog_grid_columns' => '3' + ), $atts ); + + } else { + // get all posts, i.e. default + $atts = shortcode_atts( array( + 'author' => '', + 'author_name' => '', + 'category_name' => '', + 'cat' => '', + 'id' => false, + 'p' => false, + 'post__in' => false, + 'order' => 'DESC', + 'orderby' => 'date', + 'post_status' => 'publish', + 'post_type' => 'post', + 'nopaging' => false, + 'paged' => $paged, + 'tag' => '', + 'tax_operator' => 'IN', + 'tax_term' => false, + 'taxonomy' => 'category', + 'title_meta' => false, + 'include_shortcodes' => false, + 'layout' => 'large', + + 'cat_slug' => '', + 'title' => true, + 'meta_all' => true, + 'meta_author' => true, + 'meta_date' => true, + 'meta_categories' => true, + 'meta_comments' => true, + 'meta_link' => true, + 'thumbnail' => true, + 'excerpt' => true, + 'excerpt_words' => '50', + 'strip_html' => true, + 'paging' => true, + 'scrolling' => 'infinite', + 'blog_grid_columns' => '3' + ), $atts ); + } + + if(isset($atts['posts_per_page']) && $atts['posts_per_page'] == -1) { + $atts['nopaging'] = true; + } + + // setting attributes right for the php script + ($atts['title'] == "yes") ? ($atts['title'] = true) : ($atts['title'] = false); + ($atts['meta_all'] == "yes") ? ($atts['meta_all'] = true) : ($atts['meta_all'] = false); + ($atts['meta_author'] == "yes") ? ($atts['meta_author'] = true) : ($atts['meta_author'] = false); + ($atts['meta_date'] == "yes") ? ($atts['meta_date'] = true) : ($atts['meta_date'] = false); + ($atts['meta_categories'] == "yes") ? ($atts['meta_categories'] = true) : ($atts['meta_categories'] = false); + ($atts['meta_comments'] == "yes") ? ($atts['meta_comments'] = true) : ($atts['meta_comments'] = false); + ($atts['meta_link'] == "yes") ? ($atts['meta_link'] = true) : ($atts['meta_link'] = false); + + //checking if there are categories that are excluded using "-"; transform slugs to ids + $cat_ids =''; + $categories = explode(',', $atts['cat_slug']); + if ( isset($categories) && $categories) { + foreach ($categories as $category) { + if(strpos($category, '-') === 0) { + $cat_ids .= '-' .get_category_by_slug( $category )->cat_ID .','; + } else { + $cat_ids .= get_category_by_slug( $category )->cat_ID .','; + } + } + } + $atts['cat'] = substr($cat_ids, 0, -1); + + ($atts['thumbnail'] == "yes") ? ($atts['thumbnail'] = true) : ($atts['thumbnail'] = false); + ($atts['thumbnail'] == "yes") ? ($atts['thumbnail'] = true) : ($atts['thumbnail'] = false); + ($atts['excerpt'] == "yes") ? ($atts['excerpt'] = true) : ($atts['excerpt'] = false); + ($atts['strip_html'] == "yes") ? ($atts['strip_html'] = 1) : ($atts['strip_html'] = 0); + ($atts['paging'] == "yes") ? ($atts['paging'] = true) : ($atts['paging'] = false); + ($atts['scrolling'] == "infinite") ? ($atts['paging'] = true) : ($atts['paging'] = $atts['paging']); + + $container_class = ''; + $post_class = ''; + if($atts['layout'] == 'large alternate') { + $post_class = 'large-alternate'; + } elseif($atts['layout'] == 'medium alternate') { + $post_class = 'medium-alternate'; + } elseif($atts['layout'] == 'grid') { + $post_class = 'grid-post'; + $container_class = 'grid-layout'; + if(get_post_meta($post->ID, 'pyre_full_width', true) == 'yes' || basename( get_page_template() ) == "full-width.php" || basename( get_page_template() ) == "100-width.php") { + if($atts['blog_grid_columns'] == '3') { + $container_class = 'grid-layout grid-full-layout-3'; + } else { + $container_class = 'grid-layout grid-full-layout-4'; + } + } + } elseif($atts['layout'] == 'timeline') { + $post_class = 'timeline-post'; + $container_class = 'timeline-layout'; + if(get_post_meta($post->ID, 'pyre_full_width', true) == 'no' && basename( get_page_template() ) != "full-width.php" || basename( get_page_template() ) == "100-width.php") { + $container_class = 'timeline-layout timeline-sidebar-layout'; + } + } + + $ml_query = new WP_Query($atts); + + $html = ''; + + if ($atts['scrolling'] == "infinite") { + $html .= '
          '; + $posts_container_id = 'posts-container-infinite'; + } else { + $html .= '
          '; + $posts_container_id = 'posts-container-pagination'; + } + if($atts['layout'] == 'timeline') { + $html .= '
          '; + } + + $html .= '
          '; + + $post_count = 1; + + $prev_post_timestamp = null; + $prev_post_month = null; + $first_timeline_loop = false; + + while( $ml_query->have_posts() ) : + $ml_query->the_post(); + + $post_timestamp = strtotime($post->post_date); + $post_month = date('n', $post_timestamp); + $post_year = get_the_date('o'); + $current_date = get_the_date('o-n'); + + if($atts['layout'] == 'timeline') { + if($prev_post_month != $post_month) { + $html.= '

          ' . get_the_date($data['timeline_date_format']) .'

          '; + } + } + $html .= '
          '; + if($atts['layout'] == 'medium alternate') { + $html.= '
          +
          + ' . get_the_time($data['alternate_date_format_day']) .' + ' .get_the_time($data['alternate_date_format_month_year']) .' +
          +
          '; + + switch(get_post_format()) { + case 'gallery': + $format_class = 'camera-retro'; + break; + case 'link': + $format_class = 'link'; + break; + case 'image': + $format_class = 'picture'; + break; + case 'quote': + $format_class = 'quote-left'; + break; + case 'video': + $format_class = 'film'; + break; + case 'audio': + $format_class = 'headphones'; + break; + case 'chat': + $format_class = 'comments-alt'; + break; + default: + $format_class = 'book'; + break; + } + + $html.= ' +
          +
          '; + } + + if($atts['thumbnail']) { + if($data['legacy_posts_slideshow']) { + ob_start(); + include(locate_template('legacy-slideshow-blog-shortcode.php', false)); + //get_template_part('legacy-slideshow'); + $html .= ob_get_clean(); + } else { + ob_start(); + include(locate_template('new-slideshow-blog-shortcode.php', false)); + //get_template_part('new-slideshow-blog-shortcode'); + $html .= ob_get_clean(); + + } + } + + $html.= '
          '; + if($atts['layout'] == 'timeline') { + $html.= '
          +
          '; + } + if($atts['layout'] != 'large alternate' && $atts['layout'] != 'medium alternate' && $atts['layout'] != 'grid' && $atts['layout'] != 'timeline') { + if($atts['title']) { + $html.= '

          ' .get_the_title() .'

          '; + } + } + if($atts['layout'] == 'large alternate') { + $html.= '
          +
          + ' .get_the_time($data['alternate_date_format_day']) .' + ' .get_the_time($data['alternate_date_format_month_year']) .' +
          +
          '; + + switch(get_post_format()) { + case 'gallery': + $format_class = 'camera-retro'; + break; + case 'link': + $format_class = 'link'; + break; + case 'image': + $format_class = 'picture'; + break; + case 'quote': + $format_class = 'quote-left'; + break; + case 'video': + $format_class = 'film'; + break; + case 'audio': + $format_class = 'headphones'; + break; + case 'chat': + $format_class = 'comments-alt'; + break; + default: + $format_class = 'book'; + break; + } + + $html.= ' +
          +
          '; + } + + + $html.= '
          '; + if($atts['layout'] == 'large alternate' || $atts['layout'] == 'medium alternate' || $atts['layout'] == 'grid' || $atts['layout'] == 'timeline') { + if($atts['title']) { + $html.= '

          ' . get_the_title() .'

          '; + } + if($atts['meta_all']) { + if($atts['layout'] == 'grid' || $atts['layout'] == 'timeline') { + $html.= '

          '; + if($atts['meta_author']) { + $html .= __('By', 'Avada') .' '; + ob_start(); + the_author_posts_link(); + $html .= ''.ob_get_clean().'|'; + } + if($atts['meta_date']) { + $html .= ''.get_the_time($data["date_format"]).'|'; + } + $html.= '

          '; + } else { + $html.= '

          '; + if($atts['meta_author']) { + $html .= __('By', 'Avada') .' '; + ob_start(); + the_author_posts_link(); + $html .= ''.ob_get_clean().'|'; + } + if($atts['meta_date']) { + $html .= ''.get_the_time($data["date_format"]).'|'; + } + if($atts['meta_categories']) { + ob_start(); + the_category(', '); + $html .= ob_get_clean().'|'; + } + if($atts['meta_comments']) { + ob_start(); + comments_popup_link(__('0 Comments', 'Avada'), __('1 Comment', 'Avada'), '% '.__('Comments', 'Avada')); + $html .= ob_get_clean().'|'; + } + $html .= '

          '; + } + } + } + $html .= '
          '; + + // get the post content according to the chosen kind of delivery + if($atts['excerpt']) { + // content of shortcodes should be displayed + if (isset($atts['include_shortcodes']) && $atts['include_shortcodes'] == true) { + $html .= avada_custom_excerpt(); + } else { + // content of shortcodes will be cut out, i.e. standard + $stripped_content = tf_content( $atts['excerpt_words'], $atts['strip_html'] ); + $html .= $stripped_content; + } + } else { + global $more; $more = 0; + $content = get_the_content(''); + $content = apply_filters('the_content', $content); + $content = str_replace(']]>', ']]>', $content); + $html .= $content; + } + + $html .= '
          +
          '; + + if($atts['meta_all']) { + $html .= '
          '; + if($atts['layout'] == 'grid' || $atts['layout'] == 'timeline') { + if($atts['layout'] != 'large alternate' && $atts['layout'] != 'medium alternate') { + $html .= '
          '; + if($atts['meta_link']) { + $html .= '' .__("Read More", "Avada") .''; + } + $html .= '
          '; + } + $html .= '
          '; + if($atts['meta_comments']) { + ob_start(); + comments_popup_link(' '.__('0', 'Avada'), ' '.__('1', 'Avada'), ' '.'%'); + $html .= ob_get_clean(); + } + $html .= '
          '; + } else { + if($atts['layout'] != 'large alternate' && $atts['layout'] != 'medium alternate') { + $html .= '
          '; + if($atts['meta_author']) { + $html .= __('By', 'Avada') .' '; + ob_start(); + the_author_posts_link(); + $html .= ''.ob_get_clean().'|'; + } + if($atts['meta_date']) { + $html .= ''.get_the_time($data["date_format"]).'|'; + } + if($atts['meta_categories']) { + ob_start(); + the_category(', '); + $html .= ob_get_clean().'|'; + } + if($atts['meta_comments']) { + ob_start(); + comments_popup_link(__('0 Comments', 'Avada'), __('1 Comment', 'Avada'), '% '.__('Comments', 'Avada')); + $html .= ob_get_clean().'|'; + } + $html .= '
          '; + } + $html .= '
          '; + if($atts['meta_link']) { + $html .= '' .__("Read More", "Avada") .''; + } + $html .= '
          '; + } + $html .= '
          '; + } + $html .= '
          +
          '; + + $prev_post_timestamp = $post_timestamp; + $prev_post_month = $post_month; + $post_count++; + endwhile; + + $html .= '
          '; + + //no paging if only the latest posts are shown + if ($atts['paging']) { + $html .= avada_blog_shortcode_pagination($ml_query, $pages = '', $range = 2, $atts['scrolling']); + } + wp_reset_query(); + return $html; +} +add_shortcode( 'blog', 'blog_shortcode' ); + +if(!function_exists('avada_blog_shortcode_pagination')): +function avada_blog_shortcode_pagination($ml_query, $pages = '', $range = 2, $infinite_scrolling = false) +{ + $html = ''; + + $showitems = ($range * 2)+1; + + if((is_front_page() || is_home() ) ) { + $paged = (get_query_var('paged')) ?get_query_var('paged') : ((get_query_var('page')) ? get_query_var('page') : 1); + } else { + $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; + } + + if($pages == '') { + global $wp_query; + $pages = $ml_query->max_num_pages; + if(!$pages) { + $pages = 1; + } + } + + if(1 != $pages) { + if ($infinite_scrolling == "infinite") { + $html .= '
        + + + +
        +
        +
          "; + + return $html; + } + } + + if($field["type"] == "post_category") { + + + + } + + if(!IS_ADMIN && rgar($field,"adminOnly")) + { + if($field["allowsPrepopulate"]) + $field["inputType"] = "adminonly_hidden"; + else + return; + } + + $id = $field["id"]; + $type = $field["type"]; + $input_type = RGFormsModel::get_input_type($field); + + $error_class = rgget("failed_validation", $field) ? "gfield_error" : ""; + $admin_only_class = rgget("adminOnly", $field) ? "field_admin_only" : ""; + $selectable_class = IS_ADMIN ? "selectable" : ""; + $hidden_class = in_array($input_type, array("hidden", "hiddenproduct")) ? "gform_hidden" : ""; + + $section_class = $field["type"] == "section" ? "gsection" : ""; + $page_class = $field["type"] == "page" ? "gpage" : ""; + $html_block_class = $field["type"] == "html" ? "gfield_html" : ""; + $html_formatted_class = $field["type"] == "html" && !IS_ADMIN && !rgget("disableMargins", $field) ? "gfield_html_formatted" : ""; + $html_no_follows_desc_class = $field["type"] == "html" && !IS_ADMIN && !self::prev_field_has_description($form, $field["id"]) ? "gfield_no_follows_desc" : ""; + + $calculation_class = RGFormsModel::get_input_type($field) == 'number' && GFCommon::has_field_calculation($field) ? 'gfield_calculation' : ''; + $calculation_class = RGFormsModel::get_input_type($field) == 'calculation' ? 'gfield_calculation' : ''; + + $product_suffix = "_{$form["id"]}_" . rgget("productField", $field); + $option_class = $field["type"] == "option" ? "gfield_price gfield_price{$product_suffix} gfield_option{$product_suffix}" : ""; + $quantity_class = $field["type"] == "quantity" ? "gfield_price gfield_price{$product_suffix} gfield_quantity{$product_suffix}" : ""; + $shipping_class = $field["type"] == "shipping" ? "gfield_price gfield_shipping gfield_shipping_{$form["id"]}" : ""; + $product_class = $field["type"] == "product" ? "gfield_price gfield_price_{$form["id"]}_{$field["id"]} gfield_product_{$form["id"]}_{$field["id"]}" : ""; + $hidden_product_class = $input_type == "hiddenproduct" ? "gfield_hidden_product" : ""; + $donation_class = $field["type"] == "donation" ? "gfield_price gfield_price_{$form["id"]}_{$field["id"]} gfield_donation_{$form["id"]}_{$field["id"]}" : ""; + $required_class = rgar($field, "isRequired") ? "gfield_contains_required" : ""; + $creditcard_warning_class = $input_type == "creditcard" && !GFCommon::is_ssl() ? "gfield_creditcard_warning" : ""; + + $css_class = "$selectable_class gfield $error_class $section_class $admin_only_class $custom_class $hidden_class $html_block_class $html_formatted_class $html_no_follows_desc_class $option_class $quantity_class $product_class $donation_class $shipping_class $page_class $required_class $hidden_product_class $creditcard_warning_class $calculation_class"; + $css_class = apply_filters("gform_field_css_class_{$form["id"]}", apply_filters("gform_field_css_class", trim($css_class), $field, $form), $field, $form); + + $style = !empty($form) && !IS_ADMIN && RGFormsModel::is_field_hidden($form, $field, $field_values) ? "style='display:none;'" : ""; + + $field_id = IS_ADMIN || empty($form) ? "field_$id" : "field_" . $form["id"] . "_$id"; + + return "
        • " . self::get_field_content($field, $value, $force_frontend_label, $form == null ? 0 : $form["id"]) . "
        • "; + } + + private static function prev_field_has_description($form, $field_id){ + if(!is_array($form["fields"])) + return false; + + $prev = null; + foreach($form["fields"] as $field){ + if($field["id"] == $field_id){ + return $prev != null && !empty($prev["description"]); + } + $prev = $field; + } + return false; + } + + public static function get_field_content($field, $value="", $force_frontend_label = false, $form_id=0){ + $id = $field["id"]; + $size = rgar($field,"size"); + $validation_message = (rgget("failed_validation", $field) && !empty($field["validation_message"])) ? sprintf("
          %s
          ", $field["validation_message"]) : ""; + + $duplicate_disabled = array('captcha', 'post_title', 'post_content', 'post_excerpt', 'total', 'shipping', 'creditcard'); + $duplicate_field_link = !in_array($field['type'], $duplicate_disabled) ? "" : ""; + $duplicate_field_link = apply_filters("gform_duplicate_field_link", $duplicate_field_link); + + $delete_field_link = ""; + $delete_field_link = apply_filters("gform_delete_field_link", $delete_field_link); + $field_type_title = GFCommon::get_field_type_title($field["type"]); + $admin_buttons = IS_ADMIN ? "
          {$field_type_title} : " . __("Field ID", "gravityforms") . " {$field["id"]}
          " . $delete_field_link . $duplicate_field_link . "
          " : ""; + + $field_label = $force_frontend_label ? $field["label"] : GFCommon::get_label($field); + if(rgar($field, "inputType") == "singleproduct" && !rgempty($field["id"] . ".1", $value)) + $field_label = rgar($value, $field["id"] . ".1"); + + + $field_id = IS_ADMIN || $form_id == 0 ? "input_$id" : "input_" . $form_id . "_$id"; + + $required_div = IS_ADMIN || rgar($field, "isRequired") ? sprintf("%s", rgar($field, "isRequired") ? "*" : "") : ""; + $target_input_id = ""; + $is_description_above = rgar($field, "descriptionPlacement") == "above"; + + switch(RGFormsModel::get_input_type($field)){ + case "section" : + $description = self::get_description(rgget("description", $field), "gsection_description"); + $field_content = sprintf("%s

          %s

          %s", $admin_buttons, esc_html($field_label), $description); + break; + + case "page" : + //only executed on the form editor in the admin + // removed images to make page breaks translatable + $page_label = __("Page Break", "gravityforms"); + $field_content = "{$admin_buttons}
          " . __("end of page", "gravityforms") . "
          " . __("PAGE BREAK", "gravityforms") . "
          " . __("top of new page", "gravityforms") . "
          "; + break; + + case "adminonly_hidden": + case "hidden" : + case "html" : + $field_content = !IS_ADMIN ? "{FIELD}" : $field_content = sprintf("%s{FIELD}", $admin_buttons, $field_id, esc_html($field_label)); + break; + + case "checkbox": + case "radio": + $description = self::get_description(rgget("description", $field),"gfield_description"); + if($is_description_above) + $field_content = sprintf("%s%s{FIELD}%s", $admin_buttons, esc_html($field_label), $required_div , $description, $validation_message); + else + $field_content = sprintf("%s{FIELD}%s%s", $admin_buttons, esc_html($field_label), $required_div , $description, $validation_message); + break; + + case "name" : + switch(rgar($field, "nameFormat")){ + case "simple" : + $target_input_id = $field_id; + break; + + case "extended" : + $target_input_id = $field_id . "_2"; + break; + + default : + $target_input_id = $field_id . "_3"; + } + + case "address" : + if(empty($target_input_id)) + $target_input_id = $field_id . "_1"; + + default : + if(empty($target_input_id)) + $target_input_id = $field_id; + + $description = self::get_description(rgget("description", $field),"gfield_description"); + if($is_description_above) + $field_content = sprintf("%s%s{FIELD}%s", $admin_buttons, $target_input_id, esc_html($field_label), $required_div , $description, $validation_message); + else + $field_content = sprintf("%s{FIELD}%s%s", $admin_buttons, $target_input_id, esc_html($field_label), $required_div , $description, $validation_message); + break; + } + + if(RGFormsModel::get_input_type($field) == "creditcard" && !GFCommon::is_ssl() && !IS_ADMIN){ + $field_content = "
          " . __("This page is unsecured. Do not enter a real credit card number. Use this field only for testing purposes. ", "gravityforms") . "
          " . $field_content; + } + + $value = self::default_if_empty($field, $value); + + $field_content = str_replace("{FIELD}", GFCommon::get_field_input($field, $value, 0, $form_id), $field_content); + + $field_content = apply_filters("gform_field_content", $field_content, $field, $value, 0, $form_id); + + return $field_content; + } + + private static function default_if_empty($field, $value){ + + if(!GFCommon::is_empty_array($value)) + return $value; + + if(IS_ADMIN){ + $value = rgget("defaultValue", $field); + } + else{ + $value = rgar($field, "defaultValue"); + if(!is_array($value)) + $value = GFCommon::replace_variables_prepopulate(rgget("defaultValue", $field)); + } + + return $value; + } + + private static function get_description($description, $css_class){ + return IS_ADMIN || !empty($description) ? "
          " . $description . "
          " : ""; + } + + public static function get_credit_card_rules() { + + $cards = GFCommon::get_card_types(); + //$supported_cards = //TODO: Only include enabled cards + $rules = array(); + + foreach($cards as $card) { + $prefixes = explode(',', $card['prefixes']); + foreach($prefixes as $prefix) { + $rules[$card['slug']][] = $prefix; + } + } + + return $rules; + } + + private static function get_progress_bar($form, $form_id,$confirmation_message) { + + $progress_complete = false; + $progress_bar = ""; + $page_count = self::get_max_page_number($form); + $current_page = self::get_current_page($form_id); + $page_name = rgar(rgar($form["pagination"],"pages"), $current_page -1); + $page_name = !empty($page_name) ? " - " . $page_name : ""; + $style = $form["pagination"]["style"]; + $color = $style == "custom" ? " color:{$form["pagination"]["color"]};" : ""; + $bgcolor = $style == "custom" ? " background-color:{$form["pagination"]["backgroundColor"]};" : ""; + + if (!empty($confirmation_message)) + { + $progress_complete = true; + } + //check admin setting for whether the progress bar should start at zero + $start_at_zero = rgars($form, "pagination/display_progressbar_on_confirmation"); + //check for filter + $start_at_zero = apply_filters("gform_progressbar_start_at_zero", $start_at_zero, $form); + $progressbar_page_count = $start_at_zero ? $current_page - 1 : $current_page; + $percent = !$progress_complete ? floor(( ($progressbar_page_count) / $page_count ) * 100) . "%" : "100%"; + $percent_number = !$progress_complete ? floor(( ($progressbar_page_count) / $page_count ) * 100) . "" : "100"; + + if ($progress_complete) + { + $wrapper_css_class = GFCommon::get_browser_class() . " gform_wrapper"; + + //add on surrounding wrapper class when confirmation page + $progress_bar = "
          "; + $page_name = !empty($form["pagination"]["progressbar_completion_text"]) ? $form["pagination"]["progressbar_completion_text"] : ""; + } + + + $progress_bar .=" +
          +

          "; + $progress_bar .= !$progress_complete ? __("Step", "gravityforms") . " {$current_page} " . __("of", "gravityforms") . " {$page_count}{$page_name}" : "{$page_name}"; + $progress_bar .= " +

          +
          +
          {$percent}
          +
          "; + //close div for surrounding wrapper class when confirmation page + $progress_bar .= $progress_complete ? $confirmation_message . "
          " : ""; + + return $progress_bar; + } + + /** + * Validates the form's entry limit settings. Returns the entry limit message if entry limit exceeded. + * + * @param array $form current GF form object + * @return string If entry limit exceeded returns entry limit setting. + */ + public static function validate_entry_limit($form) { + + //If form has a limit of entries, check current entry count + if(rgar($form,"limitEntries")) { + $period = rgar($form, "limitEntriesPeriod"); + $range = self::get_limit_period_dates($period); + $entry_count = RGFormsModel::get_lead_count($form['id'], "", null, null, $range["start_date"], $range["end_date"]); + + if($entry_count >= $form["limitEntriesCount"]) + return empty($form["limitEntriesMessage"]) ? "

          " . __("Sorry. This form is no longer accepting new submissions.", "gravityforms"). "

          " : "

          " . GFCommon::gform_do_shortcode($form["limitEntriesMessage"]) . "

          "; + } + + } + + public static function validate_form_schedule($form) { + + //If form has a schedule, make sure it is within the configured start and end dates + if(rgar($form, "scheduleForm")){ + $local_time_start = sprintf("%s %02d:%02d %s", $form["scheduleStart"], $form["scheduleStartHour"], $form["scheduleStartMinute"], $form["scheduleStartAmpm"]); + $local_time_end = sprintf("%s %02d:%02d %s", $form["scheduleEnd"], $form["scheduleEndHour"], $form["scheduleEndMinute"], $form["scheduleEndAmpm"]); + $timestamp_start = strtotime($local_time_start . ' +0000'); + $timestamp_end = strtotime($local_time_end . ' +0000'); + $now = current_time("timestamp"); + + if (!empty($form["scheduleStart"]) && $now < $timestamp_start) + return empty($form["schedulePendingMessage"]) ? "

          " . __("This form is not yet available.", "gravityforms") . "

          " : "

          " . GFCommon::gform_do_shortcode($form["schedulePendingMessage"]) . "

          "; + elseif(!empty($form["scheduleEnd"]) && $now > $timestamp_end) + return empty($form["scheduleMessage"]) ? "

          " . __("Sorry. This form is no longer available.", "gravityforms") . "

          " : "

          " . GFCommon::gform_do_shortcode($form["scheduleMessage"]) . "

          "; + } + + } + + public static function update_confirmation($form, $lead=null) { + if(!is_array(rgar($form, "confirmations"))) + return $form; + + // if there is only one confirmation, don't bother with the conditional logic, just return it + // this is here mostly to avoid the semi-costly GFFormsModel::create_lead() function unless we really need it + if(is_array($form["confirmations"]) && count($form['confirmations']) <= 1) { + $form['confirmation'] = reset($form['confirmations']); + return $form; + } + + if (empty($lead)){ + $lead = GFFormsModel::create_lead($form); + } + + foreach($form['confirmations'] as $confirmation) { + + if($confirmation['isDefault']) + continue; + + if(isset($confirmation['isActive']) && ! $confirmation['isActive']) + continue; + + $logic = rgar($confirmation, "conditionalLogic"); + if(GFCommon::evaluate_conditional_logic($logic, $form, $lead)) { + $form['confirmation'] = $confirmation; + return $form; + } + + } + $filtered_list = wp_filter_object_list($form['confirmations'], array('isDefault' => true)); + $form['confirmation'] = reset($filtered_list); + + return $form; + } + +} \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/form_list.php b/src/wp-content/plugins/gravityforms/form_list.php new file mode 100644 index 0000000..ae5b82e --- /dev/null +++ b/src/wp-content/plugins/gravityforms/form_list.php @@ -0,0 +1,620 @@ + + + + + + + + + + + + + +
          + +

          + + +

          + + +

          + + +
          + + + + + + + +
          +
          + + + + '; + echo apply_filters("gform_form_apply_button", $apply_button); + ?> + +
          + +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0){ + $alternate_row = false; + foreach($forms as $form){ + $conversion = "0%"; + if($form->view_count > 0){ + $conversion = (number_format($form->lead_count / $form->view_count, 3) * 100) . "%"; + } + $gf_form_locking = new GFFormLocking(); + ?> + ' valign="top" data-id="id) ?>"> + + + + + + + + + + + + + + + + + +
          lock_indicator();?> + + <?php echo $form->is_active ? __(" title="is_active ? __("Active", "gravityforms") : __("Inactive", "gravityforms");?>" onclick="ToggleActive(this, id ?>); " /> + + id ?> + title; + else : + ?> + ">title ?> + lock_info($form->id); + endif + ?> +
          + + __("Restore", "gravityforms"), + 'title' => __("Restore", "gravityforms"), + 'url' => 'javascript:RestoreForm(' . $form->id . ');', + 'capabilities' => "gravityforms_delete_forms", + 'priority' => 600 + ); + $form_actions['delete'] = array( + 'label' => __("Delete permanently", "gravityforms"), + 'title' => __("Delete permanently", "gravityforms"), + 'menu_class' => 'delete', + 'url' => 'javascript: if(confirm("' . __("WARNING: You are about to delete this form and ALL entries associated with it. ", "gravityforms") . __('\"Cancel\" to stop, \"OK\" to delete.', "gravityforms") . '")){ DeleteForm(' . $form->id . ');}', + 'capabilities' => "gravityforms_delete_forms", + 'priority' => 500 + ); + + } else { + require_once(GFCommon::get_base_path() . '/form_settings.php'); + + $form_actions = GFForms::get_toolbar_menu_items($form->id, true); + + $form_actions['duplicate'] = array( + 'label' => __("Duplicate", "gravityforms"), + 'title' => __("Duplicate this form", "gravityforms"), + 'url' => 'javascript:DuplicateForm(' . $form->id . ');', + 'capabilities' => "gravityforms_create_form", + 'priority' => 600 + ); + + $form_actions['trash'] = array( + 'label' => __("Trash", "gravityforms"), + 'title' => __("Move this form to the trash", "gravityforms"), + 'url' => 'javascript:TrashForm(' . $form->id . ');', + 'capabilities' => "gravityforms_delete_forms", + 'menu_class' => 'trash', + 'priority' => 500 + ); + $form_actions = apply_filters("gform_form_actions", $form_actions, $form->id); + } + echo GFForms::format_toolbar_menu_items($form_actions, true); + + ?> + +
          +
          view_count ?> + + lead_count > 0 && !$trash) { ?> + id}"); ?>">lead_count; ?> + lead_count; + } ?> + +
          + ', ""); + + ?> +
          +
          +
          + + + + '; + echo apply_filters("gform_form_apply_button", $apply_button); + } + ?> +
          +
          +
          +
          +
          + __('There was an issue creating your form.', 'gravityforms') ) ) ); + } + + GFFormsModel::ensure_tables_exist(); + + require_once(GFCommon::get_base_path() . '/form_detail.php'); + + $form_json = rgpost('form'); + + $form = json_decode($form_json, true); + + if( empty( $form['title'] ) ) { + $result = array( 'error' => __( 'Please enter a form title.', 'gravityforms' ) ); + die( json_encode( $result ) ); + } + + /* + * This is now added in JavaScript using jQuery.toJSON(). See the DocBlock GFFormDetail::save_form_info() for details. + * + $form['labelPlacement'] = 'top_label'; + $form['descriptionPlacement'] = 'below'; + $form['button'] = array( + 'type' => 'text', + 'text' => __("Submit", "gravityforms"), + 'imageUrl' => '' + ); + $form['fields'] = array(); + */ + + $result = GFFormDetail::save_form_info( 0, $form_json ); + + switch(rgar($result, 'status')){ + case 'invalid_json': + $result['error'] = __('There was an issue creating your form.', 'gravityforms'); + die(json_encode($result)); + + case 'duplicate_title': + $result['error'] = __('Please enter a unique form title.', 'gravityforms'); + die(json_encode($result)); + + default: + $form_id = abs($result['status']); + die( json_encode( array('redirect' => admin_url("admin.php?page=gf_edit_forms&id={$form_id}")) ) ); + } + + } + +} + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/form_settings.php b/src/wp-content/plugins/gravityforms/form_settings.php new file mode 100644 index 0000000..01b3e46 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/form_settings.php @@ -0,0 +1,1559 @@ + + + + + +
          +

          + + ', '') ?> +

          +
          + +
          +

          + +

          +
          + +
          +

          + +

          +
          + +
          + + '; + $subsetting_close = ' + +
          +
          + '; + + + + //create form settings table rows and put them into an array + //form title + $tr_form_title = ' + + + ' . + __("Form title", "gravityforms") . ' ' . + gform_tooltip("form_title", "", true) . + ' + + + + + '; + + //form description + $tr_form_description = ' + + + ' . + __("Form description", "gravityforms") . ' ' . + gform_tooltip("form_description", "", true) . + ' + + + + + '; + + //form label placement + $alignment_options = array( + 'top_label' => __("Top aligned", "gravityforms"), + 'left_label' => __("Left aligned", "gravityforms"), + 'right_label' => __("Right aligned", "gravityforms") + ); + + $label_dd = ""; + foreach($alignment_options as $value => $label) { + $selected = $form['labelPlacement'] == $value ? 'selected="selected"' : ''; + + $label_dd .= ''; + } + $tr_form_label_placement = ' + + + ' . + __("Label placement", "gravityforms") . ' ' . + gform_tooltip("form_label_placement", "", true) . + ' + + + + + '; + + //form description placement + $style = $form['labelPlacement'] != 'top_label' ? 'display:none;' : ''; + $description_dd = ""; + $description_options = array( + 'below' => __("Below inputs", "gravityforms"), + 'above' => __("Above inputs", "gravityforms") + ); + foreach($description_options as $value => $label) { + $selected = rgar( $form, 'descriptionPlacement' ) == $value ? 'selected="selected"' : ''; + + $description_dd .= ''; + } + $tr_form_description_placement = ' + + + ' . + __("Description placement", "gravityforms") . ' ' . + gform_tooltip("form_description_placement", "", true) . + ' + + + + + '; + + + + //css class name + $tr_css_class_name = ' + + + + + + + + '; + + + + //create form advanced settings table rows + //create form button rows + $form_button_type = rgars($form, 'button/type'); + $text_button_checked = ""; + $image_button_checked = ""; + $text_style_display = ""; + $image_style_display = ""; + if ($form_button_type == "text"){ + $text_button_checked = 'checked="checked"'; + $image_style_display = "display:none;"; + } + else if ($form_button_type == "image"){ + $image_button_checked = 'checked="checked"'; + $text_style_display = "display:none;"; + } + //form button + $tr_form_button = ' + + + ' . __("Input type", "gravityforms") . ' + + + + + + +    + + + + + + + '; + + //form button text + $tr_form_button_text = $subsetting_open . ' + + + ' . + __("Button text", "gravityforms") . ' ' . + gform_tooltip("form_button_text", "", true) . + ' + + + + + '; + + //form button image path + $tr_form_button_image_path = ' + + + ' . + __("Button image path", "gravityforms") . ' ' . + gform_tooltip("form_button_image", "", true) . + ' + + + + + ' . $subsetting_close; + + //form button conditional logic + $button_conditional_checked = ""; + if (rgars($form, 'button/conditionalLogic')){ + $button_conditional_checked = 'checked="checked"'; + } + + $tr_form_button_conditional = ' + + + ' . __("Button conditional logic", "gravityforms") . ' ' . gform_tooltip("form_button_conditional_logic", "", true) . ' + + + + + + + + + + + + + '; + + //limit entries + $limit_entry_checked = ""; + $limit_entry_style = ""; + $limit_entries_dd = ""; + if(rgar($form, 'limitEntries')){ + $limit_entry_checked = 'checked="checked"'; + + } + else{ + $limit_entry_style = "display:none"; + } + + $limit_periods = array( + '' => __('total entries', 'gravityforms'), + 'day' => __('per day', 'gravityforms'), + 'week' => __('per week', 'gravityforms'), + 'month' => __('per month', 'gravityforms'), + 'year' => __('per year', 'gravityforms') + ); + foreach($limit_periods as $value => $label) { + $selected = rgar($form, 'limitEntriesPeriod') == $value ? 'selected="selected"' : ''; + $limit_entries_dd .= ''; + } + + $tr_limit_entries = ' + + + ' . __("Limit number of entries", "gravityforms") . ' ' . gform_tooltip("form_limit_entries", "", true) . ' + + + + + + '; + + //limit entries count + $tr_limit_entries_count = ' + + ' . $subsetting_open . ' + + ' . + __("Number of Entries", "gravityforms") . + ' + + + +   + + + ' . $subsetting_close . ' + '; + + //limit entries message + $tr_limit_entries_message = ' + + ' . $subsetting_open . ' + + + + + + + ' . $subsetting_close . ' + + '; + + //schedule form + $schedule_form_checked = ""; + $schedule_form_style = ""; + $start_hour_dd = ""; + $start_minute_dd = ""; + $start_am_selected = ""; + $start_pm_selected = ""; + $end_hour_dd = ""; + $end_minute_dd = ""; + $end_am_selected = ""; + $end_pm_selected = ""; + + if (rgar($form, 'scheduleForm')){ + $schedule_form_checked = 'checked="checked"'; + } + else{ + $schedule_form_style = "display:none"; + } + //create start hour dd options + for($i = 1; $i <= 12; $i++) { + $selected = rgar($form, 'scheduleStartHour') == $i ? 'selected="selected"' : ''; + $start_hour_dd .= ''; + } + //create start minute dd options + foreach(array('00', '15', '30', '45') as $value) { + $selected = rgar($form, 'scheduleStartMinute') == $value ? 'selected="selected"' : ''; + $start_minute_dd .= ''; + } + //set start am/pm + if (rgar($form, 'scheduleStartAmpm') == 'am') { + $start_am_selected = 'selected="selected"'; + } + elseif (rgar($form, 'scheduleStartAmpm') == 'pm'){ + $start_pm_selected = 'selected="selected"'; + } + //create end hour dd options + for($i = 1; $i <= 12; $i++) { + $selected = rgar($form, 'scheduleEndHour') == $i ? 'selected="selected"' : ''; + $end_hour_dd .= ''; + } + //create end minute dd options + foreach(array('00', '15', '30', '45') as $value) { + $selected = rgar($form, 'scheduleEndMinute') == $value ? 'selected="selected"' : ''; + $end_minute_dd .= ''; + } + //set end am/pm + if (rgar($form, 'scheduleEndAmpm') == 'am') { + $end_am_selected = 'selected="selected"'; + } + elseif (rgar($form, 'scheduleEndAmpm') == 'pm'){ + $end_pm_selected = 'selected="selected"'; + } + + //schedule form + $tr_schedule_form = ' + + + ' . __("Schedule form", "gravityforms") . ' ' . gform_tooltip("form_schedule_form", "", true) . ' + + + + + + '; + + //schedule start + $tr_schedule_start = ' + + ' . $subsetting_open . ' + + + + + +    + + : + + + + ' . $subsetting_close . ' + '; + + //schedule end + $tr_schedule_end = ' + + ' . $subsetting_open . ' + + ' . __("Schedule Form End Date/Time", "gravityforms") . ' + + + +    + + : + + + + ' . $subsetting_close . ' + '; + + //schedule message + $tr_schedule_pending_message = ' + + ' . $subsetting_open . ' + + ' . __("Form Pending Message", "gravityforms") . ' + + + + + ' . $subsetting_close . ' + '; + + //schedule message + $tr_schedule_message = ' + + ' . $subsetting_open . ' + + ' . __("Form Expired Message", "gravityforms") . ' + + + + + ' . $subsetting_close . ' + '; + + //honey pot + $honey_pot_checked = ""; + if (rgar($form, 'enableHoneypot')){ + $honey_pot_checked = 'checked="checked"'; + } + $tr_honey_pot = ' + + + ' . __("Anti-spam honeypot", "gravityforms") . ' ' . gform_tooltip("form_honeypot", "", true) . ' + + + + + + '; + + //enable animation + $enable_animation_checked = ""; + if (rgar($form, 'enableAnimation')){ + $enable_animation_checked = 'checked="checked"'; + } + $tr_enable_animation = ' + + + ' . __("Animated transitions", "gravityforms") . ' ' . gform_tooltip("form_animation", "", true) . ' + + + + + + '; + + //require login + $require_login_checked = ""; + $require_login_style = ""; + if (rgar($form, 'requireLogin')){ + $require_login_checked = 'checked="checked"'; + } + else{ + $require_login_style = "display:none"; + } + $tr_requires_login = ' + + + ' . __("Require user to be logged in", "gravityforms") . ' ' . gform_tooltip("form_require_login", "", true) . ' + + + + + + '; + + //require login message + $tr_requires_login_message = ' + + ' . $subsetting_open . ' + + ' . __("Require Login Message", "gravityforms") . ' ' . gform_tooltip("form_require_login_message", "", true) . ' + + + + + ' . $subsetting_close . ' + '; + + //populate arrays with table rows + $form_basics = array("form_title" => $tr_form_title, "form_description" => $tr_form_description); + $form_layout = array("form_label_placement" => $tr_form_label_placement, "form_description_placement" => $tr_form_description_placement, "css_class_name" => $tr_css_class_name); + $form_button = array("form_button_type" => $tr_form_button, "form_button_text" => $tr_form_button_text, "form_button_image_path" => $tr_form_button_image_path, "form_button_conditional" => $tr_form_button_conditional); + $form_restrictions = array("limit_entries" => $tr_limit_entries, "number_of_entries" => $tr_limit_entries_count, "entry_limit_message" => $tr_limit_entries_message, "schedule_form" => $tr_schedule_form, "schedule_start" => $tr_schedule_start, "schedule_end" => $tr_schedule_end, "schedule_pending_message" => $tr_schedule_pending_message, "schedule_message" => $tr_schedule_message, "requires_login" => $tr_requires_login, "requires_login_message" => $tr_requires_login_message); + $form_options = array("honey_pot" => $tr_honey_pot, "enable_animation" => $tr_enable_animation); + + $form_settings = array( + __("Form Basics", "gravityforms") => $form_basics, + __("Form Layout", "gravityforms") => $form_layout, + __("Form Button", "gravityforms") => $form_button, + __("Restrictions", "gravityforms") => $form_restrictions, + __("Form Options", "gravityforms") => $form_options); + + $form_settings = apply_filters("gform_form_settings", $form_settings, $form); + ?> + +
          + +

          + +
          + + + $value) { + ?> + + + + +

          + + +
          + + + + + + + + + + + + + + + + + +
          + + + + + +
          + +
          + + + + 0)); + ?> + +

          + + + + + + prepare_items(); + ?> + +
          + + display(); ?> + + + + + + +
          + + + + + + + +
          + +
          + + + +
          + + + + + + " /> + + +

          + +

          + + + +
          + +
          + + +
          + + '; + $subsetting_close = ' + +
          +
          + '; + + $ui_settings = array(); + $confirmation_type = rgar($confirmation, 'type') ? rgar($confirmation, 'type') : 'message'; + $is_valid = !empty(GFCommon::$errors); + $is_default = rgar($confirmation, 'isDefault'); + + $form_id = rgget('id'); + $form = RGFormsModel::get_form_meta($form_id); + + ob_start(); ?> + + + + class=""> + + + + + + + + + + value="message" onclick="ToggleConfirmation();" /> + +    + value="page" onclick="ToggleConfirmation();" /> + +    + value="redirect" onclick="ToggleConfirmation();" /> + + + + + + + > + + + + +
          + /> + +
          + + + + + + + + class=""> + + + + "form_confirmation_page", "selected" => rgar($confirmation, 'pageId'), "show_option_none" => __("Select a page", "gravityforms"))); ?> + + + + + + class=""> + + + + onclick="TogglePageQueryString()"/> +
          > +
          +
          +
          + + + + + + + > + + + + " style="width:98%;" /> + + + + + + + > + + + + onclick="ToggleQueryString()"/> +
          > +
          +
          +
          + + + + + + + > + + + +
          + +
          + + + + + + + +
          +

          ID: :

          + + + + + +
          +
            + $tab["name"]); + if(isset($tab["query"])) + $query = array_merge($query, $tab["query"]); + + ?> +
          • > + +
          • + +
          + +
          +
          + + +
          +
          +
          + +
          + +
          + + + + array("name" => "settings", "label" => __("Form Settings", "gravityforms")), + "20" => array("name" => "confirmation" , "label" => __("Confirmations", "gravityforms"), "query" => array("cid"=>null, "duplicatedcid"=>null)), + "30" => array("name" => "notification", "label" => __("Notifications", "gravityforms"), "query" => array("nid"=>null)) + ); + + $setting_tabs = apply_filters("gform_form_settings_menu", $setting_tabs, $form_id); + ksort($setting_tabs, SORT_NUMERIC); + + return $setting_tabs; + } + + + /* Ajax Functions */ + + public static function handle_confirmation_edit_submission($confirmation, $form) { + + if( empty($_POST) || !check_admin_referer('gform_confirmation_edit', 'gform_confirmation_edit') ) + return $confirmation; + + $is_new_confirmation = !$confirmation; + + if($is_new_confirmation) + $confirmation['id'] = uniqid(); + + $confirmation['name'] = rgpost('form_confirmation_name'); + $confirmation['type'] = rgpost('form_confirmation'); + $confirmation['message'] = rgpost('form_confirmation_message'); + $confirmation['disableAutoformat'] = rgpost('form_disable_autoformatting'); + $confirmation['pageId'] = rgpost('form_confirmation_page'); + $confirmation['url'] = rgpost('form_confirmation_url'); + $confirmation['queryString'] = '' != rgpost('form_redirect_querystring') ? rgpost('form_redirect_querystring') : rgpost('form_page_querystring'); + $confirmation['isDefault'] = rgpost('is_default'); + + // if is default confirmation, override any submitted conditional logic with empty array + $confirmation['conditionalLogic'] = $confirmation['isDefault'] ? array() : json_decode(rgpost('conditional_logic'), ARRAY_A); + + $failed_validation = false; + + if(!$confirmation['name']) { + $failed_validation = true; + GFCommon::add_error_message(__('You must specify a Confirmation Name.', 'gravityforms')); + } + + switch($confirmation['type']) { + case 'page': + if(empty($confirmation['pageId'])) { + $failed_validation = true; + GFCommon::add_error_message( __('You must select a Confirmation Page.', 'gravityforms') ); + } + break; + case 'redirect': + if(empty($confirmation['url'])) { + $failed_validation = true; + GFCommon::add_error_message( __('You must specify a Redirect URL.', 'gravityforms') ); + } + break; + } + + if($failed_validation) + return $confirmation; + + // allow user to filter confirmation before save + $confirmation = apply_filters("gform_pre_confirmation_save_{$form['id']}", apply_filters('gform_pre_confirmation_save', $confirmation, $form), $form); + + // add current confirmation to confirmations array + $form['confirmations'][$confirmation['id']] = $confirmation; + + // save updated confirmations array + $result = GFFormsModel::save_form_confirmations($form['id'], $form['confirmations']); + + if($result !== false) { + GFCommon::add_message( sprintf( __('Confirmation saved successfully. %sBack to confirmations.%s', 'gravityforms'), '', '') ); + } else { + GFCommon::add_error_message(__('There was an issue saving this confirmation.', 'gravityforms')); + } + + return $confirmation; + } + + public static function maybe_process_confirmation_list_action() { + + if( empty($_POST) || !check_admin_referer('gform_confirmation_list_action', 'gform_confirmation_list_action') ) + return; + + $action = rgpost('action'); + $object_id = rgpost('action_argument'); + + switch($action) { + case 'delete': + $confirmation_deleted = self::delete_confirmation($object_id, rgget('id')); + if($confirmation_deleted) { + GFCommon::add_message( __('Confirmation deleted.', 'gravityforms') ); + } else { + GFCommon::add_error_message( __('There was an issue deleting this confirmation.', 'gravityforms') ); + } + break; + } + + } + + /** + * Delete a form confirmation by ID. + * + * @param mixed $confirmation_id + * @param mixed $form_id Can pass a form ID or a form object + */ + public static function delete_confirmation($confirmation_id, $form_id) { + + if(!$form_id) + return false; + + $form = !is_array($form_id) ? RGFormsModel::get_form_meta($form_id) : $form_id; + unset($form['confirmations'][$confirmation_id]); + + // clear form cache so next retrieval of form meta will reflect deleted notification + RGFormsModel::flush_current_forms(); + + return RGFormsModel::save_form_confirmations($form['id'], $form['confirmations']); + } + + public static function output($a) { + echo $a; + } + + public static function is_unique_name($name, $confirmations){ + + foreach ($confirmations as $confirmation){ + if(strtolower(rgar($confirmation, "name")) == strtolower($name)) + return false; + } + + return true; + } + +} + + + +require_once(ABSPATH . '/wp-admin/includes/class-wp-list-table.php'); + +class GFConfirmationTable extends WP_List_Table { + + public $form; + + function __construct($form) { + + $this->form = $form; + + $this->_column_headers = array( + array( + 'cb' => '', + 'name' => __('Name','gravityforms'), + 'type' => __('Type','gravityforms'), + 'content' => __('Content','gravityforms') + ), + array(), + array() + ); + + parent::__construct(); + } + + function prepare_items() { + $this->items = $this->form['confirmations']; + } + + function display() { + extract( $this->_args ); + ?> + + + + print_column_headers(); ?> + + + + + + print_column_headers( false ); ?> + + + + > + + display_rows_or_placeholder(); ?> + + +
          + + '; + echo $this->single_row_columns( $item ); + echo ''; + } + + function column_content($item) { + return self::get_column_content($item); + } + + function column_default($item, $column) { + echo rgar($item, $column); + } + + function column_type($item) { + return self::get_column_type($item); + } + + function column_cb($item) { + if(isset($item['isDefault']) && $item['isDefault']) + return; + + $is_active = isset($item["isActive"]) ? $item["isActive"] : true; + ?> + <?php $is_active ? __(" title="" onclick="ToggleActive(this, ''); " /> + $item["id"])); + $duplicate_url = add_query_arg(array("cid" => 0, "duplicatedcid" => $item["id"])); + $actions = apply_filters('gform_confirmation_actions', array( + 'edit' => '' . __('Edit', 'gravityforms') . '', + 'duplicate' => '' . __('Duplicate', 'gravityforms') . '', + 'delete' => '' . __('Delete', 'gravityforms') . '' + )); + + if(isset($item['isDefault']) && $item['isDefault']) + unset($actions['delete']); + + ?> + + +
          + + $html) { + $divider = $key == $last_key ? '' : " | "; + ?> + + + + + +
          + + ' . strip_tags($item['message']) . ''; + + case 'page': + + $page = get_post($item['pageId']); + if(empty($page)) + return __('This page does not exist.', 'gravityforms'); + + return '' . $page->post_title . ''; + + case 'redirect': + $url_pieces = parse_url($item['url']); + $url_connector = rgar($url_pieces, 'query') ? '&' : '?'; + $url = rgar($item, 'queryString') ? "{$item['url']}{$url_connector}{$item['queryString']}" : $item['url']; + return '' . $url . ''; + } + + return ''; + } + + public static function get_column_type($item) { + switch($item['type']) { + case 'message': + $type = __('Text', 'gravityforms'); + break; + case 'page': + $type = __('Page', 'gravityforms'); + break; + case 'redirect': + $type = __('Redirect', 'gravityforms'); + break; + } + return $type; + } + +} \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/forms_model.php b/src/wp-content/plugins/gravityforms/forms_model.php new file mode 100644 index 0000000..a057b15 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/forms_model.php @@ -0,0 +1,4268 @@ +prefix . "rg_form"; + } + + public static function get_meta_table_name(){ + global $wpdb; + return $wpdb->prefix . "rg_form_meta"; + } + + public static function get_form_view_table_name(){ + global $wpdb; + return $wpdb->prefix . "rg_form_view"; + } + + public static function get_lead_table_name(){ + global $wpdb; + return $wpdb->prefix . "rg_lead"; + } + + public static function get_lead_meta_table_name(){ + global $wpdb; + return $wpdb->prefix . "rg_lead_meta"; + } + + public static function get_lead_notes_table_name(){ + global $wpdb; + return $wpdb->prefix . "rg_lead_notes"; + } + + public static function get_lead_details_table_name(){ + global $wpdb; + return $wpdb->prefix . "rg_lead_detail"; + } + + public static function get_lead_details_long_table_name(){ + global $wpdb; + return $wpdb->prefix . "rg_lead_detail_long"; + } + + public static function get_lead_view_name(){ + global $wpdb; + return $wpdb->prefix . "rg_lead_view"; + } + + public static function get_forms($is_active = null, $sort_column = "title", $sort_dir = "ASC", $is_trash = false){ + global $wpdb; + $form_table_name = self::get_form_table_name(); + $lead_table_name = self::get_lead_table_name(); + $view_table_name = self::get_form_view_table_name(); + + $where_arr = array(); + $where_arr[] = $wpdb->prepare("is_trash=%d", $is_trash); + if($is_active !== null) + $where_arr[] = $wpdb->prepare("is_active=%d", $is_active); + + $where_clause = "WHERE " . join(" AND ", $where_arr); + $sort_keyword = $sort_dir == "ASC" ? "ASC" : "DESC"; + $sort_column = ESC_SQL($sort_column); + $order_by = !empty($sort_column) ? "ORDER BY $sort_column $sort_keyword" : ""; + + $sql = "SELECT f.id, f.title, f.date_created, f.is_active, 0 as lead_count, 0 view_count + FROM $form_table_name f + $where_clause + $order_by"; + + //Getting all forms + $forms = $wpdb->get_results($sql); + + //Getting entry count per form + $sql = "SELECT form_id, count(id) as lead_count FROM $lead_table_name l WHERE status='active' GROUP BY form_id"; + $entry_count = $wpdb->get_results($sql); + + //Getting view count per form + $sql = "SELECT form_id, sum(count) as view_count FROM $view_table_name GROUP BY form_id"; + $view_count = $wpdb->get_results($sql); + + //Adding entry counts and to form array + foreach($forms as &$form){ + foreach($view_count as $count){ + if($count->form_id == $form->id){ + $form->view_count = $count->view_count; + break; + } + } + + foreach($entry_count as $count){ + if($count->form_id == $form->id){ + $form->lead_count = $count->lead_count; + break; + } + } + } + + return $forms; + } + + public static function get_forms_by_id($ids){ + _deprecated_function('get_forms_by_id', '1.7', 'get_form_meta_by_id'); + return self::get_form_meta_by_id($ids); + } + + public static function get_form_payment_totals($form_id){ + global $wpdb; + $lead_table_name = self::get_lead_table_name(); + + $sql = $wpdb->prepare(" SELECT sum(payment_amount) revenue, count(l.id) orders + FROM $lead_table_name l + WHERE form_id=%d AND payment_amount IS NOT null", $form_id); + + $totals = $wpdb->get_row($sql, ARRAY_A); + + $active = $wpdb->get_var($wpdb->prepare(" SELECT count(id) as active + FROM $lead_table_name + WHERE form_id=%d AND payment_status='Active'", $form_id)); + + if(empty($active)) + $active = 0; + + $totals["active"] = $active; + + return $totals; + } + + public static function get_form_counts($form_id){ + global $wpdb; + $lead_table_name = self::get_lead_table_name(); + $sql = $wpdb->prepare( + "SELECT + (SELECT count(0) FROM $lead_table_name WHERE form_id=%d AND status='active') as total, + (SELECT count(0) FROM $lead_table_name WHERE is_read=0 AND status='active' AND form_id=%d) as unread, + (SELECT count(0) FROM $lead_table_name WHERE is_starred=1 AND status='active' AND form_id=%d) as starred, + (SELECT count(0) FROM $lead_table_name WHERE status='spam' AND form_id=%d) as spam, + (SELECT count(0) FROM $lead_table_name WHERE status='trash' AND form_id=%d) as trash", + $form_id, $form_id, $form_id, $form_id, $form_id); + + $results = $wpdb->get_results($sql, ARRAY_A); + + return $results[0]; + + } + + public static function get_form_summary(){ + global $wpdb; + $form_table_name = self::get_form_table_name(); + $lead_table_name = self::get_lead_table_name(); + + $sql = "SELECT l.form_id, count(l.id) as unread_count + FROM $lead_table_name l + WHERE is_read=0 AND status='active' + GROUP BY form_id"; + + //getting number of unread and total leads for all forms + $unread_results = $wpdb->get_results($sql, ARRAY_A); + + $sql = "SELECT l.form_id, max(l.date_created) as last_lead_date, count(l.id) as total_leads + FROM $lead_table_name l + WHERE status='active' + GROUP BY form_id"; + + $lead_date_results = $wpdb->get_results($sql, ARRAY_A); + + $sql = "SELECT id, title, '' as last_lead_date, 0 as unread_count + FROM $form_table_name + WHERE is_active=1 + ORDER BY title"; + + $forms = $wpdb->get_results($sql, ARRAY_A); + + + for($i=0; $count = sizeof($forms), $i<$count; $i++){ + if(is_array($unread_results)){ + foreach($unread_results as $unread_result){ + if($unread_result["form_id"] == $forms[$i]["id"]){ + $forms[$i]["unread_count"] = $unread_result["unread_count"]; + break; + } + } + } + + if(is_array($lead_date_results)){ + foreach($lead_date_results as $lead_date_result){ + if($lead_date_result["form_id"] == $forms[$i]["id"]){ + $forms[$i]["last_lead_date"] = $lead_date_result["last_lead_date"]; + $forms[$i]["total_leads"] = $lead_date_result["total_leads"]; + break; + } + } + } + + } + + return $forms; + } + + public static function get_form_count(){ + global $wpdb; + $form_table_name = self::get_form_table_name(); + $results = $wpdb->get_results(" + SELECT + (SELECT count(0) FROM $form_table_name WHERE is_trash = 0) as total, + (SELECT count(0) FROM $form_table_name WHERE is_active=1 AND is_trash = 0 ) as active, + (SELECT count(0) FROM $form_table_name WHERE is_active=0 AND is_trash = 0 ) as inactive, + (SELECT count(0) FROM $form_table_name WHERE is_trash=1) as trash + "); + + return array( "total" => intval($results[0]->total), + "active" => intval($results[0]->active), + "inactive" => intval($results[0]->inactive), + "trash" => intval($results[0]->trash) + ); + } + + public static function get_form_id($form_title){ + $forms = self::get_forms(); + foreach($forms as $form){ + $sanitized_name = str_replace("[", "", str_replace("]","", $form->title)); + if($form->title == $form_title || $sanitized_name == $form_title) + return $form->id; + } + return 0; + } + + public static function get_form($form_id){ + global $wpdb; + $table_name = self::get_form_table_name(); + $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM $table_name WHERE id=%d AND is_trash = 0", $form_id)); + return isset($results[0]) ? $results[0] : false; + } + + public static function unserialize($string){ + + if(is_serialized($string)){ + $obj = @unserialize($string); + } + else{ + $obj = json_decode($string, true); + } + + return $obj; + } + + public static function get_form_meta($form_id){ + global $wpdb; + + // return cached version if form meta has been previously retrieved for this form + if(isset(self::$_current_forms[$form_id])){ + return self::$_current_forms[$form_id]; + } + + $table_name = self::get_meta_table_name(); + $form_row = $wpdb->get_row($wpdb->prepare("SELECT display_meta, notifications FROM {$table_name} WHERE form_id=%d", $form_id), ARRAY_A); + + + //Loading main form object (supports serialized strings as well as JSON strings) + $form = self::unserialize($form_row["display_meta"]); + + if(!$form) + return null; + + //loading notifications + $form["notifications"] = self::unserialize($form_row["notifications"]); + + + //copying some form variables down to fields for easier access + $page_number = 1; + $description_placement = rgar($form, "descriptionPlacement") == "above" ? "above" : "below"; + if(is_array(rgar($form,"fields"))){ + foreach($form["fields"] as &$field){ + $field["label"] = !isset($field["label"]) ? "" : $field["label"]; + $field["formId"] = $form["id"]; + $field["pageNumber"] = $page_number; + $field["descriptionPlacement"] = $description_placement; + if($field["type"] == "page"){ + $page_number++; + $field["pageNumber"] = $page_number; + } + } + } + + // loading confirmations from legacy structure into new structure + $form = self::load_confirmations($form); + + //only migrate legacy notification if there isn't any notification configured in new structure + if(!isset($form["notifications"])){ + $form = self::load_notifications_from_legacy($form); //moving notification data from legacy structure into new "notifications" array + } + + //load notifications to legacy structure to maintain backward compatibility with legacy hooks and functions + $form = self::load_notifications_to_legacy($form); + + // cached form meta for cheaper retrieval on subsequent requests + self::$_current_forms[$form_id] = $form; + + return $form; + } + + public static function get_form_meta_by_id($ids){ + global $wpdb; + $form_table_name = self::get_form_table_name(); + $meta_table_name = self::get_meta_table_name(); + + if(is_array($ids)) + $ids = implode(",", array_map('intval', $ids ) ); + else + $ids = intval($ids); + + $results = $wpdb->get_results(" SELECT display_meta, confirmations, notifications FROM {$form_table_name} f + INNER JOIN {$meta_table_name} m ON f.id = m.form_id + WHERE id in({$ids})", ARRAY_A); + + foreach ($results as &$result) { + $form = self::unserialize($result["display_meta"]); + $form['confirmations'] = self::unserialize($result["confirmations"]); + $form['notifications'] = self::unserialize($result["notifications"]); + $result = $form; + } + + return $results; + + } + + private static function load_notifications_to_legacy($form){ + if(!is_array(rgar($form, "notifications"))) + return $form; + + foreach($form["notifications"] as $notification){ + if(!in_array(rgar($notification,"type"), array("user", "admin"))) + continue; + + $legacy_notification = $notification; + + if($notification["toType"] == "field"){ + $legacy_notification["toField"] = $notification["to"]; + unset($legacy_notification["to"]); + } + + //unsetting new properties + unset($legacy_notification["toType"]); + unset($legacy_notification["id"]); + unset($legacy_notification["event"]); + unset($legacy_notification["name"]); + if(isset($legacy_notification["type"])) + unset($legacy_notification["type"]); + + //saving into form object + $property = $notification["type"] == "user" ? "autoResponder" : "notification"; + $form[$property] = $legacy_notification; + } + + return $form; + } + + private static function load_notifications_from_legacy($form){ + + $form["notifications"] = array(); + if(GFCommon::has_admin_notification($form)){ + $admin_notification = $form["notification"]; + + //if there is a fromField configured, move it to "from" as a merge tag + $admin_notification = self::convert_property_to_merge_tag($form, $form["notification"], "from", "fromField"); + + //if there is a fromNameField configured, move it to "fromName" as a merge tag + $admin_notification = self::convert_property_to_merge_tag($form, $form["notification"], "fromName", "fromNameField"); + + //if there is a replyToField configured, move it to "replyTo" as a merge tag + $admin_notification = self::convert_property_to_merge_tag($form, $form["notification"], "replyTo", "replyToField"); + + //if routing is configured, set toType to routing, otherwise, set it to email + $admin_notification["toType"] = !rgempty("routing", $admin_notification) ? "routing" : "email"; + + $notification_id = uniqid(); + + //assigning this notification to the form_submission action + $admin_notification["event"] = "form_submission"; + $admin_notification["name"] = __("Admin Notification", "gravityforms"); + $admin_notification["type"] = "admin"; + $admin_notification["id"] = $notification_id; + + //copying admin notification as an item in the new notifications array + $form["notifications"][$notification_id] = $admin_notification; + } + + if(GFCommon::has_user_notification($form)){ + + $user_notification = $form["autoResponder"]; + + //if there is a toField configured, set toType to field, if not, set it toemail + $to_field = rgar($user_notification, "toField"); + if(!empty($to_field)){ + $user_notification["toType"] = "field"; + $user_notification["to"] = $to_field; + } + else{ + $user_notification["toType"] = "email"; + } + + $notification_id = uniqid(); + //assigning this notification to the form_submission action + $user_notification["event"] = "form_submission"; + $user_notification["name"] = __("User Notification", "gravityforms"); + $user_notification["type"] = "user"; + $user_notification["id"] = $notification_id; + + //copying user notification as an item in the new notifications array + $form["notifications"][$notification_id] = $user_notification; + } + + self::save_form_notifications($form["id"], $form["notifications"]); + + return $form; + } + + private static function convert_property_to_merge_tag($form, $array, $target_property, $source_property){ + $merge_tag = self::get_field_merge_tag($form, rgar($array, $source_property)); + if($merge_tag){ + $array[$target_property] = $merge_tag; + unset($array[$source_property]); + } + + return $array; + } + + private static function get_field_merge_tag($form, $field_id){ + $field = self::get_field($form, $field_id); + if(!$field) + return false; + + return "{" . GFCommon::get_label($field, $field_id) . ":" . $field_id . "}"; + } + + public static function add_default_properties($form){ + if(is_array(rgar($form,"fields"))){ + $all_fields = array("adminLabel"=>"","adminOnly"=>"","allowsPrepopulate"=>"","defaultValue"=>"","description"=>"","content"=>"","cssClass"=>"", + "errorMessage"=>"","id"=>"","inputName"=>"","isRequired"=>"","label"=>"","noDuplicates"=>"", + "size"=>"","type"=>"","postCustomFieldName"=>"","displayAllCategories"=>"","displayCaption"=>"","displayDescription"=>"", + "displayTitle"=>"","inputType"=>"","rangeMin"=>"","rangeMax"=>"","calendarIconType"=>"", + "calendarIconUrl"=>"", "dateType"=>"","dateFormat"=>"","phoneFormat"=>"","addressType"=>"","defaultCountry"=>"","defaultProvince"=>"", + "defaultState"=>"","hideAddress2"=>"","hideCountry"=>"","hideState"=>"","inputs"=>"","nameFormat"=>"","allowedExtensions"=>"", + "captchaType"=>"","pageNumber"=>"","captchaTheme"=>"","simpleCaptchaSize"=>"","simpleCaptchaFontColor"=>"","simpleCaptchaBackgroundColor"=>"", + "failed_validation"=>"", "productField" => "", "enablePasswordInput" => "", "maxLength" => "", "enablePrice" => "", "basePrice" => ""); + + foreach($form["fields"] as &$field) + $field = wp_parse_args($field, $all_fields); + } + return $form; + } + + public static function get_grid_column_meta($form_id){ + global $wpdb; + + $table_name = self::get_meta_table_name(); + return maybe_unserialize($wpdb->get_var($wpdb->prepare("SELECT entries_grid_meta FROM $table_name WHERE form_id=%d", $form_id))); + } + + public static function update_grid_column_meta($form_id, $columns){ + global $wpdb; + + $table_name = self::get_meta_table_name(); + $meta = maybe_serialize(stripslashes_deep($columns) ); + $wpdb->query( $wpdb->prepare("UPDATE $table_name SET entries_grid_meta=%s WHERE form_id=%d", $meta, $form_id) ); + } + + public static function get_lead_detail_id($current_fields, $field_number){ + foreach($current_fields as $field) + if($field->field_number == $field_number) + return $field->id; + + return 0; + } + + public static function update_form_active($form_id, $is_active){ + global $wpdb; + $form_table = self::get_form_table_name(); + $sql = $wpdb->prepare("UPDATE $form_table SET is_active=%d WHERE id=%d", $is_active, $form_id); + $wpdb->query($sql); + } + + public static function update_notification_active($form_id, $notification_id, $is_active){ + $form = GFFormsModel::get_form_meta($form_id); + + if(!isset($form["notifications"][$notification_id])) + return new WP_Error("not_found", __("Notification not found", "gravityforms")); + + $form["notifications"][$notification_id]["isActive"] = (bool) $is_active; + + $result = GFFormsModel::update_form_meta($form_id, $form["notifications"], "notifications"); + return $result; + } + + public static function update_confirmation_active($form_id, $confirmation_id, $is_active){ + $form = GFFormsModel::get_form_meta($form_id); + + if(!isset($form["confirmations"][$confirmation_id])) + return new WP_Error("not_found", __("Notification not found", "gravityforms")); + + $form["confirmations"][$confirmation_id]["isActive"] = (bool) $is_active; + + $result = GFFormsModel::update_form_meta($form_id, $form["confirmations"], "confirmations"); + return $result; + } + + public static function update_forms_active($forms, $is_active){ + foreach($forms as $form_id) + self::update_form_active($form_id, $is_active); + } + + public static function update_leads_property($leads, $property_name, $property_value){ + foreach($leads as $lead) + self::update_lead_property($lead, $property_name, $property_value); + } + + public static function update_lead_property($lead_id, $property_name, $property_value, $update_akismet=true, $disable_hook=false){ + global $wpdb; + $lead_table = self::get_lead_table_name(); + + $lead = self::get_lead($lead_id); + + //marking entry as "spam" or "not spam" with Akismet if the plugin is installed + if($update_akismet && GFCommon::akismet_enabled($lead["form_id"]) && $property_name == "status" && in_array($property_value, array("active", "spam"))){ + + $current_status = $lead["status"]; + if($current_status == "spam" && $property_value == "active"){ + $form = self::get_form_meta($lead["form_id"]); + GFCommon::mark_akismet_spam($form, $lead, false); + } + else if($current_status == "active" && $property_value == "spam"){ + $form = self::get_form_meta($lead["form_id"]); + GFCommon::mark_akismet_spam($form, $lead, true); + } + } + + //updating lead + $wpdb->update($lead_table, array($property_name => $property_value ), array("id" => $lead_id)); + + if(!$disable_hook){ + + $previous_value = rgar($lead, $property_name); + + if($previous_value != $property_value) { + + // if property is status, prev value is spam and new value is active + if($property_name == 'status' && $previous_value == 'spam' && $property_value == 'active' && !rgar($lead, 'post_id')) { + $lead[$property_name] = $property_value; + $lead['post_id'] = GFCommon::create_post($form, $lead); + } + + do_action("gform_update_{$property_name}", $lead_id, $property_value, $previous_value); + } + } + + } + + public static function update_lead($lead){ + global $wpdb; + $lead_table = self::get_lead_table_name(); + + $payment_date = strtotime(rgar($lead,"payment_date")) ? "'" . gmdate( 'Y-m-d H:i:s', strtotime("{$lead["payment_date"]}") ) . "'" : "NULL"; + $payment_amount = !rgblank(rgar($lead, "payment_amount")) ? (float) rgar($lead, "payment_amount") : "NULL"; + $transaction_type = !rgempty("transaction_type", $lead) ? intval($lead["transaction_type"]) : "NULL"; + + $status = !rgempty("status", $lead) ? $lead["status"] : "active"; + $source_url = self::truncate(rgar($lead,"source_url"), 200); + $user_agent = self::truncate(rgar($lead,"user_agent"), 250); + + $sql = $wpdb->prepare("UPDATE $lead_table SET + form_id=%d, + post_id=%d, + is_starred=%d, + is_read=%d, + ip=%s, + source_url=%s, + user_agent=%s, + currency=%s, + payment_status=%s, + payment_date={$payment_date}, + payment_amount={$payment_amount}, + transaction_id=%s, + is_fulfilled=%d, + transaction_type={$transaction_type}, + payment_method=%s, + status='{$status}' + WHERE id=%d", rgar($lead,"form_id"), rgar($lead,"post_id"), rgar($lead,"is_starred"), rgar($lead,"is_read"), rgar($lead,"ip"), $source_url, $user_agent, + rgar($lead,"currency"), rgar($lead,"payment_status"), rgar($lead,"transaction_id"), rgar($lead,"is_fulfilled"), rgar($lead, "payment_method"), rgar($lead,"id")); + $wpdb->query($sql); + + self::set_current_lead($lead); + } + + private static function truncate($str, $length){ + if(strlen($str) > $length){ + $str = substr($str, 0, $length); + } + return $str; + } + + public static function delete_leads($leads){ + foreach($leads as $lead_id) + self::delete_lead($lead_id); + } + + public static function delete_forms($forms){ + foreach($forms as $form_id) + self::delete_form($form_id); + } + + public static function trash_forms($form_ids){ + foreach($form_ids as $form_id) + self::trash_form($form_id); + } + + public static function restore_forms($form_ids){ + foreach($form_ids as $form_id) + self::restore_form($form_id); + } + + public static function delete_leads_by_form($form_id, $status=""){ + global $wpdb; + + if(!GFCommon::current_user_can_any("gravityforms_delete_entries")) + die(__("You don't have adequate permission to delete entries.", "gravityforms")); + + $lead_table = self::get_lead_table_name(); + $lead_notes_table = self::get_lead_notes_table_name(); + $lead_detail_table = self::get_lead_details_table_name(); + $lead_detail_long_table = self::get_lead_details_long_table_name(); + + //deleting uploaded files + self::delete_files_by_form($form_id, $status); + + $status_filter = empty($status) ? "" : $wpdb->prepare("AND status=%s", $status); + + //Delete from detail long + $sql = $wpdb->prepare(" DELETE FROM $lead_detail_long_table + WHERE lead_detail_id IN( + SELECT ld.id FROM $lead_detail_table ld + INNER JOIN $lead_table l ON l.id = ld.lead_id + WHERE l.form_id=%d AND ld.form_id=%d {$status_filter} + )", $form_id, $form_id); + $wpdb->query($sql); + + //Delete from lead details + $sql = $wpdb->prepare(" DELETE FROM $lead_detail_table + WHERE lead_id IN ( + SELECT id FROM $lead_table WHERE form_id=%d {$status_filter} + )", $form_id); + $wpdb->query($sql); + + //Delete from lead notes + $sql = $wpdb->prepare(" DELETE FROM $lead_notes_table + WHERE lead_id IN ( + SELECT id FROM $lead_table WHERE form_id=%d {$status_filter} + )", $form_id); + $wpdb->query($sql); + + //Delete from lead + $sql = $wpdb->prepare("DELETE FROM $lead_table WHERE form_id=%d {$status_filter}", $form_id); + $wpdb->query($sql); + } + + public static function delete_views($form_id){ + global $wpdb; + + $form_view_table = self::get_form_view_table_name(); + + //Delete form view + $sql = $wpdb->prepare("DELETE FROM $form_view_table WHERE form_id=%d", $form_id); + $wpdb->query($sql); + } + + public static function delete_form($form_id){ + global $wpdb; + + if(!GFCommon::current_user_can_any("gravityforms_delete_forms")) + die(__("You don't have adequate permission to delete forms.", "gravityforms")); + + do_action("gform_before_delete_form", $form_id); + + $form_meta_table = self::get_meta_table_name(); + $form_table = self::get_form_table_name(); + + //Deleting form Entries + self::delete_leads_by_form($form_id); + + //Delete form meta + $sql = $wpdb->prepare("DELETE FROM $form_meta_table WHERE form_id=%d", $form_id); + $wpdb->query($sql); + + //Deleting form Views + self::delete_views($form_id); + + //Delete form + $sql = $wpdb->prepare("DELETE FROM $form_table WHERE id=%d", $form_id); + $wpdb->query($sql); + + do_action("gform_after_delete_form", $form_id); + } + + public static function trash_form($form_id){ + global $wpdb; + $form_table_name = self::get_form_table_name(); + $sql = $wpdb->prepare("UPDATE $form_table_name SET is_trash=1 WHERE id=%d", $form_id) ; + $result = $wpdb->query($sql); + + self::$_current_forms[$form_id] = null; + $success = $result == false; + return $success; + } + + public static function restore_form($form_id){ + global $wpdb; + $form_table_name = self::get_form_table_name(); + $sql = $wpdb->prepare("UPDATE $form_table_name SET is_trash=0 WHERE id=%d", $form_id) ; + $result = $wpdb->query($sql); + + self::$_current_forms[$form_id] = null; + $success = $result == false; + return $success; + } + + public static function duplicate_form($form_id){ + global $wpdb; + + if(!GFCommon::current_user_can_any("gravityforms_create_form")) + die(__("You don't have adequate permission to create forms.", "gravityforms")); + + //finding unique title + $form = self::get_form($form_id); + $count = 2; + $title = $form->title . " - Copy 1"; + while(!self::is_unique_title($title)){ + $title = $form->title . " - Copy $count"; + $count++; + } + + //creating new form + $new_id = self::insert_form($title); + + //copying form meta + $meta = self::get_form_meta($form_id); + $meta["title"] = $title; + $meta["id"] = $new_id; + + $notifications = $meta["notifications"]; + $confirmations = $meta["confirmations"]; + unset($meta["notifications"]); + unset($meta["confirmations"]); + self::update_form_meta($new_id, $meta); + + //copying notification meta + self::update_form_meta($new_id, $notifications, "notifications"); + + //copying confirmation meta + self::update_form_meta($new_id, $confirmations, "confirmations"); + return $new_id; + } + + public static function is_unique_title($title){ + $forms = self::get_forms(); + foreach($forms as $form){ + if(strtolower($form->title) == strtolower($title)) + return false; + } + + return true; + } + + public static function ensure_tables_exist(){ + global $wpdb; + $form_table_name = self::get_form_table_name(); + $form_count = $wpdb->get_var("SELECT count(0) FROM {$form_table_name}"); + if($wpdb->last_error){ + GFCommon::log_debug("Blog " . get_current_blog_id() . " - Form database table does not exist. Forcing database setup."); + GFForms::setup_database(); + } + } + + public static function insert_form($form_title){ + global $wpdb; + $form_table_name = $wpdb->prefix . "rg_form"; + + //creating new form + $wpdb->query($wpdb->prepare("INSERT INTO $form_table_name(title, date_created) VALUES(%s, utc_timestamp())", $form_title)); + + //returning newly created form id + return $wpdb->insert_id; + + } + + public static function update_form_meta($form_id, $form_meta, $meta_name="display_meta"){ + global $wpdb; + $meta_table_name = self::get_meta_table_name(); + $form_meta = json_encode($form_meta); + + if(intval($wpdb->get_var($wpdb->prepare("SELECT count(0) FROM $meta_table_name WHERE form_id=%d", $form_id))) > 0) + $result = $wpdb->query( $wpdb->prepare("UPDATE $meta_table_name SET $meta_name=%s WHERE form_id=%d", $form_meta, $form_id) ); + else + $result = $wpdb->query( $wpdb->prepare("INSERT INTO $meta_table_name(form_id, $meta_name) VALUES(%d, %s)", $form_id, $form_meta ) ); + + self::$_current_forms[$form_id] = null; + + return $result; + } + + public static function delete_files($lead_id, $form=null){ + $lead = self::get_lead($lead_id); + + if($form == null) + $form = self::get_form_meta($lead["form_id"]); + + $fields = GFCommon::get_fields_by_type($form, array("fileupload", "post_image")); + if(is_array($fields)){ + foreach($fields as $field){ + if(rgar($field, "multipleFiles")){ + $value_json = self::get_lead_field_value($lead, $field); + $files = json_decode($value_json, true); + foreach ($files as $file){ + self::delete_physical_file($file); + } + } else { + $value = self::get_lead_field_value($lead, $field); + self::delete_physical_file($value); + } + } + } + } + + public static function delete_files_by_form($form_id, $status=""){ + global $wpdb; + $form = self::get_form_meta($form_id); + $fields = GFCommon::get_fields_by_type($form, array("fileupload", "post_image")); + if(empty($fields)) + return; + + $status_filter = empty($status) ? "" : $wpdb->prepare("AND status=%s", $status); + $results = $wpdb->get_results($wpdb->prepare("SELECT id FROM {$wpdb->prefix}rg_lead WHERE form_id=%d {$status_filter}", $form_id), ARRAY_A); + + foreach($results as $result){ + self::delete_files($result["id"], $form); + } + } + + public static function delete_file($entry_id, $field_id, $file_index = 0){ + global $wpdb; + + if($entry_id == 0 || $field_id == 0) + return; + + $entry = self::get_lead($entry_id); + $form_id = $entry["form_id"]; + $form = self::get_form_meta($form_id); + $field = self::get_field($form, $field_id); + $multiple_files = rgar($field, "multipleFiles"); + if($multiple_files){ + $file_urls = json_decode($entry[$field_id], true); + $file_url = $file_urls[$file_index]; + unset($file_urls[$file_index]); + $file_urls = array_values($file_urls); + $field_value = empty($file_urls) ? "" : json_encode($file_urls); + } else { + $file_url = $entry[$field_id]; + $field_value = ""; + } + + self::delete_physical_file($file_url); + + // update lead field value - simulate form submission + + $lead_detail_table = self::get_lead_details_table_name(); + $sql = $wpdb->prepare("SELECT id FROM $lead_detail_table WHERE lead_id=%d AND field_number BETWEEN %s AND %s", $entry_id, doubleval($field_id) - 0.001, doubleval($field_id) + 0.001); + $entry_detail_id = $wpdb->get_var($sql); + + self::update_lead_field_value($form, $entry, $field, $entry_detail_id, $field_id, $field_value); + + } + + private static function delete_physical_file($file_url){ + $ary = explode("|:|", $file_url); + $url = rgar($ary,0); + if(empty($url)) + return; + + //Convert from url to physical path + if (is_multisite()) { + $file_path = preg_replace("|^(.*?)/files/gravity_forms/|", BLOGUPLOADDIR . "gravity_forms/", $url); + } + else { + $file_path = str_replace(WP_CONTENT_URL, WP_CONTENT_DIR, $url); + } + + if(file_exists($file_path)){ + unlink($file_path); + } + } + + public static function delete_field($form_id, $field_id){ + global $wpdb; + + if($form_id == 0) + return; + + do_action("gform_before_delete_field", $form_id, $field_id); + + $lead_table = self::get_lead_table_name(); + $lead_detail_table = self::get_lead_details_table_name(); + $lead_detail_long_table = self::get_lead_details_long_table_name(); + + + $form = self::get_form_meta($form_id); + + $field_type = ""; + + //Deleting field from form meta + $count = sizeof($form["fields"]); + for($i = $count-1; $i >= 0; $i--){ + $field = $form["fields"][$i]; + + //Deleting associated conditional logic rules + if(!empty($field["conditionalLogic"])){ + $rule_count = sizeof($field["conditionalLogic"]["rules"]); + for($j = $rule_count-1; $j >= 0; $j--){ + if($field["conditionalLogic"]["rules"][$j]["fieldId"] == $field_id){ + unset($form["fields"][$i]["conditionalLogic"]["rules"][$j]); + } + } + $form["fields"][$i]["conditionalLogic"]["rules"] = array_values($form["fields"][$i]["conditionalLogic"]["rules"]); + + //If there aren't any rules, remove the conditional logic + if(sizeof($form["fields"][$i]["conditionalLogic"]["rules"]) == 0){ + $form["fields"][$i]["conditionalLogic"] = false; + } + } + + //Deleting field from form meta + if($field["id"] == $field_id){ + $field_type = $field["type"]; + unset($form["fields"][$i]); + } + + } + + //removing post content and title template if the field being deleted is a post content field or post title field + if($field_type == "post_content"){ + $form["postContentTemplateEnabled"] = false; + $form["postContentTemplate"] = ""; + } + else if($field_type == "post_title"){ + $form["postTitleTemplateEnabled"] = false; + $form["postTitleTemplate"] = ""; + } + + //Deleting associated routing rules + if(!empty($form["notification"]["routing"])){ + $routing_count = sizeof($form["notification"]["routing"]); + for($j = $routing_count-1; $j >= 0; $j--){ + if(intval($form["notification"]["routing"][$j]["fieldId"]) == $field_id){ + unset($form["notification"]["routing"][$j]); + } + } + $form["notification"]["routing"] = array_values($form["notification"]["routing"]); + + //If there aren't any routing, remove it + if(sizeof($form["notification"]["routing"]) == 0){ + $form["notification"]["routing"] = null; + } + } + + $form["fields"] = array_values($form["fields"]); + self::update_form_meta($form_id, $form); + + //Delete from grid column meta + $columns = self::get_grid_column_meta($form_id); + $count = sizeof($columns); + for($i = $count -1; $i >=0; $i--) + { + if(intval(rgar($columns,$i)) == intval($field_id)){ + unset($columns[$i]); + } + } + self::update_grid_column_meta($form_id, $columns); + + //Delete from detail long + $sql = $wpdb->prepare(" DELETE FROM $lead_detail_long_table + WHERE lead_detail_id IN( + SELECT id FROM $lead_detail_table WHERE form_id=%d AND field_number >= %d AND field_number < %d + )", $form_id, $field_id, $field_id + 1); + $wpdb->query($sql); + + //Delete from lead details + $sql = $wpdb->prepare("DELETE FROM $lead_detail_table WHERE form_id=%d AND field_number >= %d AND field_number < %d", $form_id, $field_id, $field_id + 1); + $wpdb->query($sql); + + //Delete leads with no details + $sql = $wpdb->prepare(" DELETE FROM $lead_table + WHERE form_id=%d + AND id NOT IN( + SELECT DISTINCT(lead_id) FROM $lead_detail_table WHERE form_id=%d + )", $form_id, $form_id); + $wpdb->query($sql); + + do_action("gform_after_delete_field", $form_id, $field_id); + } + + public static function delete_lead($lead_id){ + global $wpdb; + + if(!GFCommon::current_user_can_any("gravityforms_delete_entries")) + die(__("You don't have adequate permission to delete entries.", "gravityforms")); + + do_action("gform_delete_lead", $lead_id); + + $lead_table = self::get_lead_table_name(); + $lead_notes_table = self::get_lead_notes_table_name(); + $lead_detail_table = self::get_lead_details_table_name(); + $lead_detail_long_table = self::get_lead_details_long_table_name(); + + //deleting uploaded files + self::delete_files($lead_id); + + //Delete from detail long + $sql = $wpdb->prepare(" DELETE FROM $lead_detail_long_table + WHERE lead_detail_id IN( + SELECT id FROM $lead_detail_table WHERE lead_id=%d + )", $lead_id); + $wpdb->query($sql); + + //Delete from lead details + $sql = $wpdb->prepare("DELETE FROM $lead_detail_table WHERE lead_id=%d", $lead_id); + $wpdb->query($sql); + + //Delete from lead notes + $sql = $wpdb->prepare("DELETE FROM $lead_notes_table WHERE lead_id=%d", $lead_id); + $wpdb->query($sql); + + //Delete from lead meta + gform_delete_meta($lead_id); + + //Delete from lead + $sql = $wpdb->prepare("DELETE FROM $lead_table WHERE id=%d", $lead_id); + $wpdb->query($sql); + + } + + public static function add_note($lead_id, $user_id, $user_name, $note){ + global $wpdb; + + $table_name = self::get_lead_notes_table_name(); + $sql = $wpdb->prepare("INSERT INTO $table_name(lead_id, user_id, user_name, value, date_created) values(%d, %d, %s, %s, utc_timestamp())", $lead_id, $user_id, $user_name, $note); + + $wpdb->query($sql); + } + + public static function delete_note($note_id){ + global $wpdb; + + if(!GFCommon::current_user_can_any("gravityforms_edit_entry_notes")) + die(__("You don't have adequate permission to delete notes.", "gravityforms")); + + $table_name = self::get_lead_notes_table_name(); + $sql = $wpdb->prepare("DELETE FROM $table_name WHERE id=%d", $note_id); + $wpdb->query($sql); + } + + public static function delete_notes($notes){ + if(!is_array($notes)) + return; + + foreach($notes as $note_id){ + self::delete_note($note_id); + } + } + + public static function get_ip(){ + + $ip = ''; + $headers = array( 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR' ); + + foreach( $headers as $header ) { + $ip = rgar( $_SERVER, $header ); + if( $ip ) + break; + } + + // HTTP_X_FORWARDED_FOR can return a comma separated list of IPs; using the first one + $ips = explode( ',', $ip ); + + return $ips[0]; + } + + public static function save_lead($form, &$lead){ + global $wpdb; + + GFCommon::log_debug("Saving entry."); + + if(IS_ADMIN && !GFCommon::current_user_can_any("gravityforms_edit_entries")) + die(__("You don't have adequate permission to edit entries.", "gravityforms")); + + $lead_detail_table = self::get_lead_details_table_name(); + + //Inserting lead if null + if($lead == null){ + global $current_user; + $user_id = $current_user && $current_user->ID ? $current_user->ID : 'NULL'; + + $lead_table = RGFormsModel::get_lead_table_name(); + $user_agent = self::truncate($_SERVER["HTTP_USER_AGENT"], 250); + $currency = GFCommon::get_currency(); + $source_url = self::truncate(self::get_current_page_url(), 200); + + $wpdb->query($wpdb->prepare("INSERT INTO $lead_table(form_id, ip, source_url, date_created, user_agent, currency, created_by) VALUES(%d, %s, %s, utc_timestamp(), %s, %s, {$user_id})", $form["id"], self::get_ip(), $source_url, $user_agent, $currency)); + + + //reading newly created lead id + $lead_id = $wpdb->insert_id; + $lead = array("id" => $lead_id); + + GFCommon::log_debug("Entry record created in the database. ID: {$lead_id}"); + } + + $current_fields = $wpdb->get_results($wpdb->prepare("SELECT id, field_number FROM $lead_detail_table WHERE lead_id=%d", $lead["id"])); + $original_post_id = rgget("post_id", $lead); + + $total_fields = array(); + $calculation_fields = array(); + $recalculate_total = false; + + GFCommon::log_debug("Saving entry fields."); + + foreach($form["fields"] as $field){ + + //Ignore fields that are marked as display only + if(rgget("displayOnly", $field) && $field["type"] != "password"){ + continue; + } + + //ignore pricing fields in the entry detail + if(RG_CURRENT_VIEW == "entry" && GFCommon::is_pricing_field($field["type"])){ + continue; + } + + + //process total field after all fields have been saved + if($field["type"] == "total"){ + $total_fields[] = $field; + continue; + } + + //only save fields that are not hidden (except on entry screen) + if(RG_CURRENT_VIEW == "entry" || !RGFormsModel::is_field_hidden($form, $field, array()) ){ + + // process calculation fields after all fields have been saved (moved after the is hidden check) + if( GFCommon::has_field_calculation($field) ) { + $calculation_fields[] = $field; + continue; + } + + GFCommon::log_debug("Saving field {$field["label"]}"); + + if($field['type'] == 'post_category') + $field = GFCommon::add_categories_as_choices($field, ''); + + if(isset($field["inputs"]) && is_array($field["inputs"])){ + + foreach($field["inputs"] as $input) + self::save_input($form, $field, $lead, $current_fields, $input["id"]); + } + else{ + self::save_input($form, $field, $lead, $current_fields, $field["id"]); + } + } + } + + if(!empty($calculation_fields)) { + foreach($calculation_fields as $calculation_field) { + + GFCommon::log_debug("Saving calculated field {$calculation_field["label"]}"); + + if(isset($calculation_field["inputs"]) && is_array($calculation_field["inputs"])){ + foreach($calculation_field["inputs"] as $input) { + self::save_input($form, $calculation_field, $lead, $current_fields, $input["id"]); + self::refresh_lead_field_value($lead["id"], $input["id"]); + } + } + else{ + self::save_input($form, $calculation_field, $lead, $current_fields, $calculation_field["id"]); + self::refresh_lead_field_value($lead["id"], $calculation_field["id"]); + } + + } + self::refresh_product_cache($form, $lead = RGFormsModel::get_lead($lead['id'])); + } + + //saving total field as the last field of the form. + if(!empty($total_fields)) { + foreach($total_fields as $total_field){ + GFCommon::log_debug("Saving total field."); + self::save_input($form, $total_field, $lead, $current_fields, $total_field["id"]); + } + } + } + + public static function create_lead($form) { + global $current_user; + + $total_fields = array(); + $calculation_fields = array(); + + $lead = array(); + $lead['id'] = null; + $lead['post_id'] = null; + $lead['date_created'] = null; + $lead['form_id'] = $form['id']; + $lead['ip'] = self::get_ip(); + $lead['source_url'] = self::truncate(self::get_current_page_url(), 200); + $lead['user_agent'] = strlen($_SERVER['HTTP_USER_AGENT']) > 250 ? substr($_SERVER['HTTP_USER_AGENT'], 0, 250) : $_SERVER['HTTP_USER_AGENT']; + $lead['currency'] = GFCommon::get_currency(); + $lead['created_by'] = $current_user && $current_user->ID ? $current_user->ID : 'NULL'; + + foreach($form['fields'] as $field) { + + // ignore fields that are marked as display only + if(rgget('displayOnly', $field) && $field['type'] != 'password'){ + continue; + } + + // process total field after all fields have been saved + if($field['type'] == 'total'){ + $total_fields[] = $field; + continue; + } + + // process calculation fields after all fields have been saved + if(GFCommon::has_field_calculation($field)) { + $calculation_fields[] = $field; + continue; + } + + // only save fields that are not hidden + if(!RGFormsModel::is_field_hidden($form, $field, array()) ){ + + if($field['type'] == 'post_category') + $field = GFCommon::add_categories_as_choices($field, ''); + + if(isset($field['inputs']) && is_array($field['inputs'])){ + foreach($field['inputs'] as $input) { + $lead[(string)$input['id']] = self::get_prepared_input_value($form, $field, $lead, $input["id"]); + } + } + else { + $lead[$field['id']] = self::get_prepared_input_value($form, $field, $lead, $field["id"]); + } + } + } + + if(!empty($calculation_fields)) { + foreach($calculation_fields as $field) { + + // only save fields that are not hidden + if(RGFormsModel::is_field_hidden($form, $field, array()) ) + continue; + + if(isset($field["inputs"]) && is_array($field["inputs"])){ + foreach($field["inputs"] as $input) { + $lead[(string)$input['id']] = self::get_prepared_input_value($form, $field, $lead, $input["id"]); + } + } + else{ + $lead[$field['id']] = self::get_prepared_input_value($form, $field, $lead, $field["id"]); + } + + } + self::refresh_product_cache($form, $lead); + } + + // saving total field as the last field of the form. + if( ! empty( $total_fields ) ) { + foreach( $total_fields as $total_field ) { + $lead[$total_field['id']] = self::get_prepared_input_value( $form, $total_field, $lead, $total_field['id'] ); + } + } + + return $lead; + } + + public static function get_prepared_input_value($form, $field, $lead, $input_id) { + + $input_name = "input_" . str_replace('.', '_', $input_id); + $value = rgpost($input_name); + + if(empty($value) && rgar($field, "adminOnly") && !IS_ADMIN){ + $value = self::get_default_value($field, $input_id); + } + + switch(self::get_input_type($field)) { + + case "post_image": + $file_info = self::get_temp_filename($form['id'], $input_name); + $file_path = self::get_file_upload_path($form['id'], $file_info["uploaded_filename"]); + $url = $file_path['url']; + + $image_title = isset($_POST["{$input_name}_1"]) ? strip_tags($_POST["{$input_name}_1"]) : ""; + $image_caption = isset($_POST["{$input_name}_4"]) ? strip_tags($_POST["{$input_name}_4"]) : ""; + $image_description = isset($_POST["{$input_name}_7"]) ? strip_tags($_POST["{$input_name}_7"]) : ""; + + $value = !empty($url) ? $url . "|:|" . $image_title . "|:|" . $image_caption . "|:|" . $image_description : ""; + break; + + case "fileupload" : + if(rgar($field, "multipleFiles")){ + $value = json_encode($value); + } else{ + $file_info = self::get_temp_filename($form['id'], $input_name); + $file_path = self::get_file_upload_path($form['id'], $file_info["uploaded_filename"]); + $value = $file_path['url']; + } + + break; + + default: + + // processing values so that they are in the correct format for each input type + $value = self::prepare_value($form, $field, $value, $input_name, rgar($lead, 'id'), $lead); + + } + + return apply_filters("gform_save_field_value", $value, $lead, $field, $form); + } + + public static function refresh_product_cache($form, $lead, $use_choice_text = false, $use_admin_label = false) { + + $cache_options = array( + array(false, false), + array(false, true), + array(true, false), + array(true, true) + ); + + foreach($form["fields"] as $field){ + if(GFCommon::has_field_calculation($field)){ + //deleting field value cache for calculated fields + $cache_key = "GFFormsModel::get_lead_field_value_" . $lead["id"] . "_" . $field["id"]; + GFCache::delete($cache_key); + } + } + + foreach($cache_options as $cache_option) { + list($use_choice_text, $use_admin_label) = $cache_option; + if( gform_get_meta( rgar($lead,'id'), "gform_product_info_{$use_choice_text}_{$use_admin_label}") ) { + gform_delete_meta(rgar($lead,'id'), "gform_product_info_{$use_choice_text}_{$use_admin_label}"); + GFCommon::get_product_fields($form, $lead, $use_choice_text, $use_admin_label); + } + } + + } + + /** + * Check whether a field is hidden via conditional logic. + * + * @param array $form Form object. + * @param array $field Field object. + * @param array $field_values Default field values for this form. Used when form has not yet been submitted. Pass an array if no default field values are avilable/required. + * @return array $lead Optional, default is null. If lead object is available, pass the lead. + */ + public static function is_field_hidden($form, $field, $field_values, $lead=null){ + + $cache_key = "GFFormsModel::is_field_hidden_" . $form["id"] . "_" . $field["id"]; + $display = GFCache::get($cache_key); + if($display !== false) + return $display; + + $section = self::get_section($form, $field["id"]); + $section_display = self::get_field_display($form, $section, $field_values, $lead); + + //if section is hidden, hide field no matter what. if section is visible, see if field is supposed to be visible + if($section_display == "hide"){ + $display = "hide"; + } + else if(self::is_page_hidden($form, rgar($field,"pageNumber"), $field_values, $lead)){ + $display = "hide"; + } + else{ + $display = self::get_field_display($form, $field, $field_values, $lead); + return $display == "hide"; + } + + GFCache::set($cache_key, $display); + + return $display == "hide"; + } + + public static function is_page_hidden($form, $page_number, $field_values, $lead=null){ + $page = self::get_page_by_number($form, $page_number); + + if(!$page) + return false; + + $display = self::get_field_display($form, $page, $field_values, $lead); + return $display == "hide"; + } + + public static function get_page_by_number($form, $page_number){ + foreach($form["fields"] as $field){ + if($field["type"] == "page" && $field["pageNumber"] == $page_number) + return $field; + } + return null; + } + + public static function get_page_by_field($form, $field){ + return get_page_by_number($field["pageNumber"]); + } + + //gets the section that the specified field belongs to, or null if none + public static function get_section($form, $field_id){ + $current_section = null; + foreach($form["fields"] as $field){ + if($field["type"] == "section") + $current_section = $field; + + //stop section at a page break (sections don't go cross page) + if($field["type"] == "page") + $current_section = null; + + if($field["id"] == $field_id) + return $current_section; + } + + return null; + } + + public static function is_value_match( $field_value, $target_value, $operation="is", $source_field = null, $rule = null ){ + + $is_match = false; + + if($source_field && $source_field["type"] == "post_category") + $field_value = GFCommon::prepare_post_category_value($field_value, $source_field, "conditional_logic"); + + if (!empty($field_value) && !is_array($field_value) && $source_field["type"] == "multiselect") + $field_value = explode(",", $field_value); // convert the comma-delimited string into an array + + $target_value = GFFormsModel::maybe_trim_input($target_value, rgar($source_field, "formId"),$source_field); + + if(is_array($field_value)){ + $field_value = array_values($field_value); //returning array values, ignoring keys if array is associative + $match_count = 0; + foreach($field_value as $val){ + $val = GFFormsModel::maybe_trim_input(GFCommon::get_selection_value($val), rgar($source_field,"formId"),$source_field); + if(self::matches_operation($val, $target_value, $operation)){ + $match_count++; + } + } + // if operation is Is Not, none of the values in the array can match the target value. + $is_match = $operation == "isnot" ? $match_count == count($field_value) : $match_count > 0; + } + else if(self::matches_operation(GFFormsModel::maybe_trim_input(GFCommon::get_selection_value($field_value), rgar($source_field,"formId"),$source_field), $target_value, $operation)){ + $is_match = true; + } + + return apply_filters( 'gform_is_value_match', $is_match, $field_value, $target_value, $operation, $source_field, $rule ); + } + + private static function try_convert_float($text){ + global $wp_locale; + $number_format = $wp_locale->number_format['decimal_point'] == "," ? "decimal_comma" : "decimal_dot"; + + if(GFCommon::is_numeric($text, $number_format)) + return GFCommon::clean_number($text, $number_format); + + return $text; + } + + public static function matches_operation($val1, $val2, $operation){ + + $val1 = !rgblank($val1) ? strtolower($val1) : ""; + $val2 = !rgblank($val2) ? strtolower($val2) : ""; + + switch($operation){ + case "is" : + return $val1 == $val2; + break; + + case "isnot" : + return $val1 != $val2; + break; + + case "greater_than": + case ">" : + $val1 = self::try_convert_float($val1); + $val2 = self::try_convert_float($val2); + + return $val1 > $val2; + break; + + case "less_than": + case "<" : + $val1 = self::try_convert_float($val1); + $val2 = self::try_convert_float($val2); + + return $val1 < $val2; + break; + + case "contains" : + return !empty($val2) && strpos($val1, $val2) !== false; + break; + + case "starts_with" : + return !empty($val2) && strpos($val1, $val2) === 0; + break; + + case "ends_with" : + $start = strlen($val1) - strlen($val2); + if($start < 0) + return false; + + $tail = substr($val1, $start); + return $val2 == $tail; + break; + } + + + return false; + } + + private static function get_field_display($form, $field, $field_values, $lead=null){ + + $logic = rgar($field, "conditionalLogic"); + + //if this field does not have any conditional logic associated with it, it won't be hidden + if(empty($logic)) + return "show"; + + $match_count = 0; + foreach($logic["rules"] as $rule){ + $source_field = RGFormsModel::get_field($form, $rule["fieldId"]); + $field_value = empty($lead) ? self::get_field_value($source_field, $field_values) : self::get_lead_field_value($lead, $source_field); + + $is_value_match = self::is_value_match($field_value, $rule["value"], $rule["operator"], $source_field); + + if($is_value_match) + $match_count++; + } + + $do_action = ($logic["logicType"] == "all" && $match_count == sizeof($logic["rules"]) ) || ($logic["logicType"] == "any" && $match_count > 0); + $is_hidden = ($do_action && $logic["actionType"] == "hide") || (!$do_action && $logic["actionType"] == "show"); + + return $is_hidden ? "hide" : "show"; + } + + public static function get_custom_choices(){ + $choices = get_option("gform_custom_choices"); + if(!$choices) + $choices = array(); + + return $choices; + } + + public static function delete_custom_choice($name){ + $choices = self::get_custom_choices(); + if(array_key_exists($name, $choices)) + unset($choices[$name]); + + update_option("gform_custom_choices", $choices); + } + + public static function save_custom_choice($previous_name, $new_name, $choices){ + $all_choices = self::get_custom_choices(); + + if(array_key_exists($previous_name, $all_choices)) + unset($all_choices[$previous_name]); + + $all_choices[$new_name] = $choices; + + update_option("gform_custom_choices", $all_choices); + } + + public static function get_field_value(&$field, $field_values = array(), $get_from_post=true){ + + if($field['type'] == 'post_category') + $field = GFCommon::add_categories_as_choices($field, ''); + + $value = array(); + switch(RGFormsModel::get_input_type($field)){ + case "post_image" : + $value[$field["id"] . ".1"] = self::get_input_value($field, "input_" . $field["id"] . "_1", $get_from_post); + $value[$field["id"] . ".4"] = self::get_input_value($field, "input_" . $field["id"] . "_4", $get_from_post); + $value[$field["id"] . ".7"] = self::get_input_value($field, "input_" . $field["id"] . "_7", $get_from_post); + break; + case "checkbox" : + $parameter_values = self::get_parameter_value($field["inputName"], $field_values, $field); + if(!empty($parameter_values) && !is_array($parameter_values)){ + $parameter_values = explode(",", $parameter_values); + } + + if(!is_array($field["inputs"])) + return ""; + + $choice_index = 0; + foreach($field["inputs"] as $input){ + if(!empty($_POST["is_submit_" . $field["formId"]]) && $get_from_post){ + $value[strval($input["id"])] = rgpost("input_" . str_replace('.', '_', strval($input["id"]))); + } + else{ + if(is_array($parameter_values)){ + foreach($parameter_values as $item){ + $item = trim($item); + if(self::choice_value_match($field, $field["choices"][$choice_index], $item)) + { + $value[$input["id"] . ""] = $item; + break; + } + } + } + } + $choice_index++; + } + + break; + + case "list" : + $value = self::get_input_value($field, "input_" . $field["id"], rgar($field, "inputName"), $field_values, $get_from_post); + $value = self::create_list_array($field, $value); + break; + + case "number" : + $value = self::get_input_value($field, "input_" . $field["id"], rgar($field, "inputName"), $field_values, $get_from_post); + $value = trim($value); + if($field["numberFormat"] == "currency"){ + require_once(GFCommon::get_base_path() . '/currency.php'); + $currency = new RGCurrency(GFCommon::get_currency()); + $value = $currency->to_number( $value ); + } + break; + + default: + + if(isset($field["inputs"]) && is_array($field["inputs"])){ + foreach($field["inputs"] as $input){ + $value[strval($input["id"])] = self::get_input_value($field, "input_" . str_replace('.', '_', strval($input["id"])), RGForms::get("name", $input), $field_values, $get_from_post); + } + } + else{ + $value = self::get_input_value($field, "input_" . $field["id"], rgar($field, "inputName"), $field_values, $get_from_post); + } + break; + } + + return $value; + } + + public static function maybe_trim_input($value, $form_id, $field){ + $trim_value = apply_filters("gform_trim_input_value", true, $form_id, $field); + + if($trim_value) + $value = is_array($value) ? array_map('trim', $value) : trim($value); + + return $value; + } + + private static function get_input_value($field, $standard_name, $custom_name = "", $field_values=array(), $get_from_post=true){ + $form_id = rgar($field,"formId"); + if(!empty($_POST["is_submit_" . $form_id]) && $get_from_post){ + $value = rgpost($standard_name); + $value = self::maybe_trim_input($value, $form_id, $field); + return $value; + } + else if(rgar($field, "allowsPrepopulate")){ + return self::get_parameter_value($custom_name, $field_values, $field); + } + } + + public static function get_parameter_value($name, $field_values, $field){ + $value = stripslashes(rgget($name)); + if(empty($value)) + $value = rgget($name, $field_values); + + //converting list format + if(RGFormsModel::get_input_type($field) == "list"){ + + //transforms this: col1|col2,col1b|col2b into this: col1,col2,col1b,col2b + $column_count = count(rgar($field,"choices")); + + $rows = explode(",", $value); + $ary_rows = array(); + if(!empty($rows)){ + foreach($rows as $row) + $ary_rows = array_merge($ary_rows, rgexplode("|", $row, $column_count)); + + $value = $ary_rows; + } + } + + return apply_filters("gform_field_value_$name", apply_filters("gform_field_value", $value, $field), $field); + } + + public static function get_default_value($field, $input_id){ + if(!is_array(rgar($field,"choices"))){ + if(is_array(rgar($field, "inputs"))){ + $input = RGFormsModel::get_input($field, $input_id); + return rgar($input, "defaultValue"); + } + else{ + return IS_ADMIN ? $field["defaultValue"] : GFCommon::replace_variables_prepopulate($field["defaultValue"]); + } + } + else if($field["type"] == "checkbox"){ + for($i=0, $count=sizeof($field["inputs"]); $i<$count; $i++){ + $input = $field["inputs"][$i]; + $choice = $field["choices"][$i]; + if($input["id"] == $input_id && $choice["isSelected"]){ + return $choice["value"]; + } + } + return ""; + } + else{ + foreach($field["choices"] as $choice){ + if(rgar($choice,"isSelected") || $field["type"] == "post_category") + return $choice["value"]; + } + return ""; + } + + } + + public static function get_input_type($field){ + return empty($field["inputType"]) ? rgar($field,"type") : $field["inputType"]; + } + + private static function get_post_field_value($field, $lead){ + + if(isset($field["inputs"]) && is_array($field["inputs"])){ + $value = array(); + foreach($field["inputs"] as $input){ + $val = isset($lead[strval($input["id"])]) ? $lead[strval($input["id"])] : ""; + if(!empty($val)) { + + // replace commas in individual values to prevent individual value from being split into multiple values (checkboxes, multiselects) + if( in_array(RGFormsModel::get_input_type($field), array('checkbox', 'multiselect')) ) + $val = str_replace(',', ',', $val); + + $value[] = $val; + } + } + $value = implode(",", $value); + } + else{ + $value = isset($lead[$field["id"]]) ? $lead[$field["id"]] : ""; + } + return $value; + } + + private static function get_post_fields($form, $lead) { + + $post_data = array(); + $post_data["post_custom_fields"] = array(); + $post_data["tags_input"] = array(); + $categories = array(); + $images = array(); + + foreach($form["fields"] as $field){ + + if($field['type'] == 'post_category') + $field = GFCommon::add_categories_as_choices($field, ''); + + $value = self::get_post_field_value($field, $lead); + + switch($field["type"]){ + case "post_title" : + case "post_excerpt" : + case "post_content" : + $post_data[$field["type"]] = $value; + break; + + case "post_tags" : + $tags = explode(",", $value); + if(is_array($tags) && sizeof($tags) > 0) + $post_data["tags_input"] = array_merge($post_data["tags_input"], $tags) ; + break; + + case "post_custom_field" : + + $type = self::get_input_type($field); + if("fileupload" === $type && rgar($field, "multipleFiles")) + $value = json_decode($value, true); + + $meta_name = $field["postCustomFieldName"]; + + if(!isset($post_data["post_custom_fields"][$meta_name])){ + $post_data["post_custom_fields"][$meta_name] = $value; + } + else if(!is_array($post_data["post_custom_fields"][$meta_name])){ + $post_data["post_custom_fields"][$meta_name] = array($post_data["post_custom_fields"][$meta_name], $value); + } + else{ + $post_data["post_custom_fields"][$meta_name][] = $value; + } + + break; + + case "post_category" : + foreach(explode(',', $value) as $cat_string) { + list($cat_name, $cat_id) = rgexplode(":", $cat_string, 2); + array_push($categories, $cat_id); + } + break; + + case "post_image" : + $ary = !empty($value) ? explode("|:|", $value) : array(); + $url = count($ary) > 0 ? $ary[0] : ""; + $title = count($ary) > 1 ? $ary[1] : ""; + $caption = count($ary) > 2 ? $ary[2] : ""; + $description = count($ary) > 3 ? $ary[3] : ""; + + array_push($images, array("field_id" => $field["id"], "url" => $url, "title" => $title, "description" => $description, "caption" => $caption)); + break; + } + } + + $post_data["post_status"] = rgar($form, "postStatus"); + $post_data["post_category"] = !empty($categories) ? $categories : array(rgar($form, 'postCategory')); + $post_data["images"] = $images; + + //setting current user as author depending on settings + $post_data["post_author"] = $form["useCurrentUserAsAuthor"] && !empty($lead["created_by"]) ? $lead["created_by"] : $form["postAuthor"]; + + return $post_data; + } + + public static function get_custom_field_names(){ + global $wpdb; + $keys = $wpdb->get_col( " + SELECT meta_key + FROM $wpdb->postmeta + WHERE meta_key NOT LIKE '\_%' + GROUP BY meta_key + ORDER BY meta_id DESC"); + + if ( $keys ) + natcasesort($keys); + + return $keys; + } + + public static function get_input_masks(){ + + $masks = array( + 'US Phone' => '(999) 999-9999', + 'US Phone + Ext' => '(999) 999-9999? x99999', + 'Date' => '99/99/9999', + 'Tax ID' => '99-9999999', + 'SSN' => '999-99-9999', + 'Zip Code' => '99999', + 'Full Zip Code' => '99999?-9999' + ); + + return apply_filters('gform_input_masks', $masks); + } + + private static function get_default_post_title(){ + global $wpdb; + $title = "Untitled"; + $count = 1; + + $titles = $wpdb->get_col("SELECT post_title FROM $wpdb->posts WHERE post_title like '%Untitled%'"); + $titles = array_values($titles); + while(in_array($title, $titles)){ + $title = "Untitled_$count"; + $count++; + } + return $title; + } + + public static function prepare_date($date_format, $value){ + $format = empty($date_format) ? "mdy" : $date_format; + $date_info = GFCommon::parse_date($value, $format); + if(!empty($date_info) && !GFCommon::is_empty_array($date_info)) + $value = sprintf("%s-%02d-%02d", $date_info["year"], $date_info["month"], $date_info["day"]); + else + $value = ""; + + return $value; + } + + /** + * Prepare the value before saving it to the lead. + * + * @param mixed $form + * @param mixed $field + * @param mixed $value + * @param mixed $input_name + * @param mixed $lead_id the current lead ID, used for fields that are processed after other fields have been saved (ie Total, Calculations) + * @param mixed $lead passed by the RGFormsModel::create_lead() method, lead ID is not available for leads created by this function + */ + public static function prepare_value($form, $field, $value, $input_name, $lead_id, $lead = array()){ + $form_id = $form["id"]; + + $input_type = self::get_input_type($field); + switch($input_type) + { + case "total" : + $lead = empty($lead) ? RGFormsModel::get_lead($lead_id) : $lead; + $value = GFCommon::get_order_total($form, $lead); + break; + + case "calculation" : + // ignore submitted value and recalculate price in backend + list(,,$input_id) = rgexplode("_", $input_name, 3); + if($input_id == 2) { + require_once(GFCommon::get_base_path() . '/currency.php'); + $currency = new RGCurrency(GFCommon::get_currency()); + $lead = empty($lead) ? RGFormsModel::get_lead($lead_id) : $lead; + $value = $currency->to_money(GFCommon::calculate($field, $form, $lead)); + } + break; + + case "phone" : + if($field["phoneFormat"] == "standard" && preg_match('/^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$/', $value, $matches)) + $value = sprintf("(%s)%s-%s", $matches[1], $matches[2], $matches[3]); + break; + + case "time": + + if(!is_array($value) && !empty($value)){ + preg_match('/^(\d*):(\d*) ?(.*)$/', $value, $matches); + $value = array(); + $value[0] = $matches[1]; + $value[1] = $matches[2]; + $value[2] = rgar($matches,3); + } + + $hour = empty($value[0]) ? "0" : strip_tags($value[0]); + $minute = empty($value[1]) ? "0" : strip_tags($value[1]); + $ampm = strip_tags(rgar($value,2)); + if(!empty($ampm)) + $ampm = " $ampm"; + + if(!(empty($hour) && empty($minute))) + $value = sprintf("%02d:%02d%s", $hour, $minute, $ampm); + else + $value = ""; + + break; + + case "date" : + $value = self::prepare_date($field["dateFormat"], $value); + + break; + + case "post_image": + $url = self::get_fileupload_value($form_id, $input_name); + $image_title = isset($_POST["{$input_name}_1"]) ? strip_tags($_POST["{$input_name}_1"]) : ""; + $image_caption = isset($_POST["{$input_name}_4"]) ? strip_tags($_POST["{$input_name}_4"]) : ""; + $image_description = isset($_POST["{$input_name}_7"]) ? strip_tags($_POST["{$input_name}_7"]) : ""; + + $value = !empty($url) ? $url . "|:|" . $image_title . "|:|" . $image_caption . "|:|" . $image_description : ""; + break; + + case "fileupload" : + if(rgar($field, "multipleFiles")){ + if(isset(GFFormsModel::$uploaded_files[$form_id][$input_name])){ + $uploaded_temp_files = GFFormsModel::$uploaded_files[$form_id][$input_name]; + $uploaded_files = array(); + foreach($uploaded_temp_files as $i => $file_info){ + $temp_filepath = self::get_upload_path($form_id) . "/tmp/" . $file_info["temp_filename"]; + if($file_info && file_exists($temp_filepath)){ + $uploaded_files[$i] = self::move_temp_file($form_id, $file_info); + } + } + + if(!empty($value)){ // merge with existing files (admin edit entry) + $value = json_decode($value, true); + $value = array_merge($value, $uploaded_files); + $value = json_encode($value); + } else { + $value = json_encode($uploaded_files); + } + + } else { + $value = ""; + } + + } else + $value = self::get_fileupload_value($form_id, $input_name); + break; + + case "number" : + + $value = GFCommon::maybe_add_leading_zero($value); + + $is_hidden = RGFormsModel::is_field_hidden($form, $field, array()); + $lead = empty($lead) ? RGFormsModel::get_lead($lead_id) : $lead; + $value = GFCommon::has_field_calculation($field) ? GFCommon::round_number(GFCommon::calculate($field, $form, $lead), rgar($field, "calculationRounding")) : GFCommon::clean_number($value, rgar($field, "numberFormat")); + //return the value as a string when it is zero and a calc so that the "==" comparison done when checking if the field has changed isn't treated as false + if (GFCommon::has_field_calculation($field) && $value == 0){ + $value = "0"; + } + break; + + case "website" : + if($value == "http://") + $value = ""; + break; + + case "list" : + + if(rgar($field, "adminOnly") && rgar($field, "allowsPrepopulate")) + $value = json_decode($value); + + if(GFCommon::is_empty_array($value)) + $value = ""; + else{ + $value = self::create_list_array($field, $value); + $value = serialize($value); + } + break; + + case "radio" : + if(rgar($field, 'enableOtherChoice') && $value == 'gf_other_choice') + $value = rgpost("input_{$field['id']}_other"); + break; + + case "multiselect" : + $value = empty($value) ? "" : is_array($value) ? implode(",", $value) : $value; + break; + + case "creditcard" : + //saving last 4 digits of credit card + list($input_token, $field_id_token, $input_id) = rgexplode("_", $input_name, 3); + if($input_id == "1"){ + $value = str_replace(" ", "", $value); + $card_number_length = strlen($value); + $value = substr($value, -4, 4); + $value = str_pad($value, $card_number_length, "X", STR_PAD_LEFT); + } + else if( $input_id == '4' ) { + + $value = rgpost( "input_{$field_id_token}_4" ); + + if( ! $value ) { + $card_number = rgpost( "input_{$field_id_token}_1" ); + $card_type = GFCommon::get_card_type( $card_number ); + $value = $card_type ? $card_type['name'] : ''; + } + + } + else{ + $value = ""; + } + + break; + + default: + + //allow HTML for certain field types + $allow_html = in_array($field["type"], array("post_custom_field", "post_title", "post_content", "post_excerpt", "post_tags")) || in_array($input_type, array("checkbox", "radio")) ? true : false; + $allowable_tags = apply_filters("gform_allowable_tags_{$form_id}", apply_filters("gform_allowable_tags", $allow_html, $field, $form_id), $field, $form_id); + + if($allowable_tags !== true) + $value = strip_tags($value, $allowable_tags); + + break; + } + + // special format for Post Category fields + if($field['type'] == 'post_category') { + + $full_values = array(); + + if(!is_array($value)) + $value = explode(',', $value); + + foreach($value as $cat_id) { + $cat = get_term($cat_id, 'category'); + $full_values[] = !is_wp_error($cat) && is_object($cat) ? $cat->name . ":" . $cat_id : ""; + } + + $value = implode(',', $full_values); + } + + //do not save price fields with blank price + if(rgar($field, "enablePrice")){ + $ary = explode("|", $value); + $label = count($ary) > 0 ? $ary[0] : ""; + $price = count($ary) > 1 ? $ary[1] : ""; + + $is_empty = (strlen(trim($price)) <= 0); + if($is_empty) + $value = ""; + } + + return $value; + } + + private static function create_list_array($field, $value){ + if(!rgar($field,"enableColumns")){ + return $value; + } + else{ + $col_count = count(rgar($field, "choices")); + $rows = array(); + + $row_count = count($value)/$col_count; + + $col_index = 0; + for($i=0; $i<$row_count; $i++){ + $row = array(); + foreach($field["choices"] as $column){ + $row[$column["text"]] = rgar($value,$col_index); + $col_index++; + } + $rows[] = $row; + } + return $rows; + } + } + + private static function get_fileupload_value($form_id, $input_name){ + global $_gf_uploaded_files; + + GFCommon::log_debug("Starting GFFormsModel::get_fileupload_value()"); + + if(empty($_gf_uploaded_files)){ + GFCommon::log_debug("No files uploaded. Exiting GFFormsModel::get_fileupload_value()"); + $_gf_uploaded_files = array(); + } + + + if(!isset($_gf_uploaded_files[$input_name])){ + + //check if file has already been uploaded by previous step + $file_info = self::get_temp_filename($form_id, $input_name); + $temp_filepath = self::get_upload_path($form_id) . "/tmp/" . $file_info["temp_filename"]; + GFCommon::log_debug("get_fileupload_value() - temp file path: " . $temp_filepath); + if($file_info && file_exists($temp_filepath)){ + GFCommon::log_debug("get_fileupload_value() - moving temp file: " . $temp_filepath); + $_gf_uploaded_files[$input_name] = self::move_temp_file($form_id, $file_info); + } else if(!empty($_FILES[$input_name]["name"])) { + GFCommon::log_debug("get_fileupload_value() - uploading file: " . $_FILES[$input_name]["name"]); + $_gf_uploaded_files[$input_name] = self::upload_file($form_id, $_FILES[$input_name]); + } + } + + return rgget($input_name, $_gf_uploaded_files); + } + + public static function get_form_unique_id($form_id) { + $unique_id = ""; + if (rgpost("gform_submit") == $form_id) { + $posted_uid = rgpost("gform_unique_id"); + if (false === empty($posted_uid)) { + $unique_id = $posted_uid; + self::$unique_ids[$form_id] = $unique_id; + } elseif (isset(self::$unique_ids[$form_id])) { + $unique_id = self::$unique_ids[$form_id]; + } else { + $unique_id = uniqid(); + self::$unique_ids[$form_id] = $unique_id; + } + } + + return $unique_id; + } + + public static function get_temp_filename($form_id, $input_name){ + + $uploaded_filename = !empty($_FILES[$input_name]["name"]) && $_FILES[$input_name]["error"] === 0 ? $_FILES[$input_name]["name"] : ""; + + if(empty($uploaded_filename) && isset(self::$uploaded_files[$form_id])) + $uploaded_filename = rgget($input_name, self::$uploaded_files[$form_id]); + + if(empty($uploaded_filename)) + return false; + + $form_unique_id = self::get_form_unique_id($form_id); + $pathinfo = pathinfo($uploaded_filename); + return array("uploaded_filename" => $uploaded_filename, "temp_filename" => "{$form_unique_id}_{$input_name}.{$pathinfo["extension"]}"); + + } + + public static function get_choice_text($field, $value, $input_id=0){ + if(!is_array(rgar($field, "choices"))) + return $value; + + foreach($field["choices"] as $choice){ + if(is_array($value) && self::choice_value_match($field, $choice, $value[$input_id])){ + return $choice["text"]; + } + else if(!is_array($value) && self::choice_value_match($field, $choice, $value)){ + return $choice["text"]; + } + } + return is_array($value) ? "" : $value; + } + + + public static function choice_value_match($field, $choice, $value){ + $choice_value = GFFormsModel::maybe_trim_input($choice["value"], rgar($field, "formId"), $field); + $value = GFFormsModel::maybe_trim_input($value, rgar($field, "formId"), $field); + if($choice_value == $value){ + return true; + } + else if(rgget("enablePrice", $field)){ + $ary = explode("|", $value); + $val = count($ary) > 0 ? $ary[0] : ""; + $price = count($ary) > 1 ? $ary[1] : ""; + + if($val == $choice["value"]) + return true; + } + // add support for prepopulating multiselects @alex + else if(RGFormsModel::get_input_type($field) == 'multiselect') { + $values = explode(',', $value); + if(in_array($choice_value, $values)) + return true; + } + return false; + } + + public static function choices_value_match($field, $choices, $value) { + foreach($choices as $choice){ + if(self::choice_value_match($field, $choice, $value)) + return true; + } + + return false; + } + + public static function create_post($form, &$lead){ + + GFCommon::log_debug("Starting GFFormsModel::create_post()"); + + $has_post_field = false; + foreach($form["fields"] as $field){ + $is_hidden = self::is_field_hidden($form, $field, array(), $lead); + if(!$is_hidden && in_array($field["type"], array("post_category","post_title","post_content","post_excerpt","post_tags","post_custom_field","post_image"))){ + $has_post_field = true; + break; + } + } + + //if this form does not have any post fields, don't create a post + if(!$has_post_field){ + GFCommon::log_debug("The form doesn't have any post fields - stopping."); + return $lead; + } + + + //processing post fields + GFCommon::log_debug("Getting post fields."); + $post_data = self::get_post_fields($form, $lead); + + //allowing users to change post fields before post gets created + $post_data = apply_filters("gform_post_data_{$form["id"]}", apply_filters("gform_post_data", $post_data , $form, $lead), $form, $lead); + + //adding default title if none of the required post fields are in the form (will make sure wp_insert_post() inserts the post) + if(empty($post_data["post_title"]) && empty($post_data["post_content"]) && empty($post_data["post_excerpt"])){ + $post_data["post_title"] = self::get_default_post_title(); + } + + // remove original post status and save it for later + $post_status = $post_data['post_status']; + + // replace original post status with 'draft' so other plugins know this post is not fully populated yet + $post_data['post_status'] = 'draft'; + + // inserting post + GFCommon::log_debug("Inserting post"); + $post_id = wp_insert_post( $post_data ); + GFCommon::log_debug("Done inserting post"); + + //adding form id and entry id hidden custom fields + add_post_meta($post_id, "_gform-form-id", $form["id"]); + add_post_meta($post_id, "_gform-entry-id", $lead["id"]); + + //creating post images + GFCommon::log_debug("Creating post images."); + $post_images = array(); + foreach($post_data["images"] as $image){ + $image_meta= array( "post_excerpt" => $image["caption"], + "post_content" => $image["description"]); + + //adding title only if it is not empty. It will default to the file name if it is not in the array + if(!empty($image["title"])) + $image_meta["post_title"] = $image["title"]; + + if(!empty($image["url"])){ + GFCommon::log_debug("Adding image: " . $image["url"]); + $media_id = self::media_handle_upload($image["url"], $post_id, $image_meta); + + if($media_id){ + + //save media id for post body/title template variable replacement (below) + $post_images[$image["field_id"]] = $media_id; + $lead[$image["field_id"]] .= "|:|$media_id"; + + // set featured image + $field = RGFormsModel::get_field($form, $image["field_id"]); + if(rgar($field, 'postFeaturedImage')) + set_post_thumbnail($post_id, $media_id); + } + } + } + + //adding custom fields + GFCommon::log_debug("Adding custom fields."); + foreach($post_data["post_custom_fields"] as $meta_name => $meta_value) { + if(!is_array($meta_value)) + $meta_value = array($meta_value); + + $meta_index = 0; + foreach($meta_value as $value){ + GFCommon::log_debug("Getting custom field: " . $meta_name); + $custom_field = self::get_custom_field($form, $meta_name, $meta_index); + + //replacing template variables if template is enabled + if($custom_field && rgget("customFieldTemplateEnabled", $custom_field)){ + //replacing post image variables + GFCommon::log_debug("Replacing post image variables."); + $value = GFCommon::replace_variables_post_image($custom_field["customFieldTemplate"], $post_images, $lead); + + //replacing all other variables + $value = GFCommon::replace_variables($value, $form, $lead, false, false, false); + + // replace conditional shortcodes + $value = do_shortcode($value); + } + switch(RGFormsModel::get_input_type($custom_field)){ + case "list" : + $value = maybe_unserialize($value); + if(is_array($value)){ + foreach($value as $item){ + if(is_array($item)) + $item = implode("|", $item); + + if(!rgblank($item)) + add_post_meta($post_id, $meta_name, $item); + } + } + break; + + case "multiselect" : + case "checkbox" : + $value = explode(",", $value); + if(is_array($value)){ + foreach($value as $item){ + if(!rgblank($item)) { + // add post meta and replace HTML symbol in $item with real comma + add_post_meta($post_id, $meta_name, str_replace(',', ',', $item)); + } + } + } + break; + + case "date" : + $value = GFCommon::date_display($value, rgar($custom_field, "dateFormat")); + if(!rgblank($value)) + add_post_meta($post_id, $meta_name, $value); + break; + + default : + if(!rgblank($value)) + add_post_meta($post_id, $meta_name, $value); + break; + } + + $meta_index++; + } + } + + $has_content_field = sizeof(GFCommon::get_fields_by_type($form, array("post_content"))) > 0; + $has_title_field = sizeof(GFCommon::get_fields_by_type($form, array("post_title"))) > 0; + $post = false; + + //if a post field was configured with a content or title template, process template + if( (rgar($form, "postContentTemplateEnabled") && $has_content_field) || (rgar($form, "postTitleTemplateEnabled") && $has_title_field) ){ + GFCommon::log_debug("Processing template."); + $post = get_post($post_id); + + if($form["postContentTemplateEnabled"] && $has_content_field){ + + //replacing post image variables + $post_content = GFCommon::replace_variables_post_image($form["postContentTemplate"], $post_images, $lead); + + //replacing all other variables + $post_content = GFCommon::replace_variables($post_content, $form, $lead, false, false, false); + + //updating post content + $post->post_content = $post_content; + } + + if($form["postTitleTemplateEnabled"] && $has_title_field){ + + //replacing post image variables + $post_title = GFCommon::replace_variables_post_image($form["postTitleTemplate"], $post_images, $lead); + + //replacing all other variables + $post_title = GFCommon::replace_variables($post_title, $form, $lead, false, false, false); + + // replace conditional shortcodes + $post_title = do_shortcode($post_title); + + //updating post + $post->post_title = $post_title; + + $post->post_name = $post_title; + } + + } + + // update post status back to original status (if not draft) + if( $post_status != 'draft' ) { + $post = is_object( $post ) ? $post : get_post( $post_id ); + $post->post_status = $post_status; + } + + // if post has been modified since creation, save updates + if( is_object( $post ) ){ + GFCommon::log_debug("Updating post."); + wp_update_post($post); + } + + + //adding post format + if(current_theme_supports('post-formats') && rgar($form, 'postFormat')) { + + $formats = get_theme_support('post-formats'); + $post_format = rgar($form, 'postFormat'); + + if(is_array($formats)) { + $formats = $formats[0]; + if(in_array( $post_format, $formats)) { + set_post_format($post_id, $post_format); + } else if('0' == $post_format) { + set_post_format($post_id, false); + } + } + + } + + //update post_id field if a post was created + $lead["post_id"] = $post_id; + GFCommon::log_debug("Updating entry."); + self::update_lead($lead); + + do_action( 'gform_after_create_post', $post_id ); + + return $post_id; + } + + private static function get_custom_field($form, $meta_name, $meta_index){ + $custom_fields = GFCommon::get_fields_by_type($form, array("post_custom_field")); + + $index = 0; + foreach($custom_fields as $field){ + if($field["postCustomFieldName"] == $meta_name){ + if($meta_index == $index){ + return $field; + } + $index++; + } + } + return false; + } + + private static function copy_post_image($url, $post_id){ + $time = current_time('mysql'); + + if ( $post = get_post($post_id) ) { + if ( substr( $post->post_date, 0, 4 ) > 0 ) + $time = $post->post_date; + } + + //making sure there is a valid upload folder + if ( ! ( ( $uploads = wp_upload_dir($time) ) && false === $uploads['error'] ) ) + return false; + + $name = basename($url); + + $filename = wp_unique_filename($uploads['path'], $name); + + // Move the file to the uploads dir + $new_file = $uploads['path'] . "/$filename"; + + $uploaddir = wp_upload_dir(); + $path = str_replace($uploaddir["baseurl"], $uploaddir["basedir"], $url); + + if(!copy($path, $new_file)) + return false; + + // Set correct file permissions + $stat = stat( dirname( $new_file )); + $perms = $stat['mode'] & 0000666; + @ chmod( $new_file, $perms ); + + // Compute the URL + $url = $uploads['url'] . "/$filename"; + + if ( is_multisite() ) + delete_transient( 'dirsize_cache' ); + + $type = wp_check_filetype($new_file); + return array("file" => $new_file, "url" => $url, "type" => $type["type"]); + + } + + private static function media_handle_upload($url, $post_id, $post_data = array()) { + + //WordPress Administration API required for the media_handle_upload() function + require_once(ABSPATH . 'wp-admin/includes/image.php'); + + $name = basename($url); + + $file = self::copy_post_image($url, $post_id); + + if(!$file) + return false; + + $name_parts = pathinfo($name); + $name = trim( substr( $name, 0, -(1 + strlen($name_parts['extension'])) ) ); + + $url = $file['url']; + $type = $file['type']; + $file = $file['file']; + $title = $name; + $content = ''; + + // use image exif/iptc data for title and caption defaults if possible + if ( $image_meta = @wp_read_image_metadata($file) ) { + if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) + $title = $image_meta['title']; + if ( trim( $image_meta['caption'] ) ) + $content = $image_meta['caption']; + } + + // Construct the attachment array + $attachment = array_merge( array( + 'post_mime_type' => $type, + 'guid' => $url, + 'post_parent' => $post_id, + 'post_title' => $title, + 'post_content' => $content, + ), $post_data ); + + // Save the data + $id = wp_insert_attachment($attachment, $file, $post_id); + if ( !is_wp_error($id) ) { + wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); + } + + return $id; + } + + public static function save_input($form, $field, &$lead, $current_fields, $input_id){ + + $input_name = "input_" . str_replace('.', '_', $input_id); + $value = rgpost($input_name); + + $value = self::maybe_trim_input($value, $form["id"], $field); + + //ignore file upload when nothing was sent in the admin + //ignore post fields in the admin + $type = self::get_input_type($field) ; + $multiple_files = rgar($field, "multipleFiles"); + $uploaded_files = GFFormsModel::$uploaded_files; + $form_id = $form["id"]; + if(RG_CURRENT_VIEW == "entry" && $type == "fileupload" && ((!$multiple_files && empty($_FILES[$input_name]["name"])) || ($multiple_files && !isset($uploaded_files[$form_id][$input_name])))) + return; + else if(RG_CURRENT_VIEW == "entry" && in_array($field["type"], array("post_category","post_title","post_content","post_excerpt","post_tags","post_custom_field","post_image"))) + return; + + if(empty($value) && rgar($field, "adminOnly") && !IS_ADMIN){ + $value = self::get_default_value($field, $input_id); + } + + //processing values so that they are in the correct format for each input type + $value = self::prepare_value($form, $field, $value, $input_name, rgar($lead, "id")); + + //ignore fields that have not changed + if($lead != null && $value === rgget($input_id, $lead)){ + return; + } + + + $lead_detail_id = self::get_lead_detail_id($current_fields, $input_id); + self::update_lead_field_value($form, $lead, $field, $lead_detail_id, $input_id, $value); + + } + + public static function update_lead_field_value($form, $lead, $field, $lead_detail_id, $input_id, $value){ + global $wpdb; + + $lead_id = $lead["id"]; + $form_id = $form["id"]; + $lead_detail_table = self::get_lead_details_table_name(); + $lead_detail_long_table = self::get_lead_details_long_table_name(); + + if(!rgblank($value)){ + + $value = apply_filters("gform_save_field_value", $value, $lead, $field, $form); + $truncated_value = GFCommon::safe_substr($value, 0, GFORMS_MAX_FIELD_LENGTH); + + if($lead_detail_id > 0){ + + $result = $wpdb->update($lead_detail_table, array("value" => $truncated_value), array("id" => $lead_detail_id), array("%s"), array("%d")); + if(false === $result) + return false ; + + //insert, update or delete long value + $sql = $wpdb->prepare("SELECT count(0) FROM $lead_detail_long_table WHERE lead_detail_id=%d", $lead_detail_id); + $has_long_field = intval($wpdb->get_var($sql)) > 0; + + //delete long field if value has been shortened + if($has_long_field && GFCommon::safe_strlen($value) <= GFORMS_MAX_FIELD_LENGTH){ + $sql = $wpdb->prepare("DELETE FROM $lead_detail_long_table WHERE lead_detail_id=%d", $lead_detail_id); + $result = $wpdb->query($sql); + if(false === $result) + return false ; + } + //update long field + else if($has_long_field){ + $result = $wpdb->update($lead_detail_long_table, array("value" => $value), array("lead_detail_id" => $lead_detail_id), array("%s"), array("%d")); + if(false === $result) + return false ; + } + //insert long field (value has been increased) + else if(GFCommon::safe_strlen($value) > GFORMS_MAX_FIELD_LENGTH){ + $result = $wpdb->insert($lead_detail_long_table, array("lead_detail_id" => $lead_detail_id, "value" => $value), array("%d", "%s")); + if(false === $result) + return false ; + } + } + else{ + $result = $wpdb->insert($lead_detail_table, array("lead_id" => $lead_id, "form_id" => $form_id, "field_number" => $input_id, "value" => $truncated_value), array("%d", "%d", "%F", "%s")); + if(false === $result) + return false ; + + if(GFCommon::safe_strlen($value) > GFORMS_MAX_FIELD_LENGTH){ + + //read newly created lead detal id + $lead_detail_id = $wpdb->insert_id; + + //insert long value + $result = $wpdb->insert($lead_detail_long_table, array("lead_detail_id" => $lead_detail_id, "value" => $value), array("%d", "%s")); + if(false === $result) + return false ; + } + } + } + else{ + //Deleting long field if there is one + $sql = $wpdb->prepare("DELETE FROM $lead_detail_long_table + WHERE lead_detail_id IN( + SELECT id FROM $lead_detail_table WHERE lead_id=%d AND field_number BETWEEN %s AND %s + )", + $lead_id, doubleval($input_id) - 0.001, doubleval($input_id) + 0.001); + $result = $wpdb->query($sql); + if(false === $result) + return false ; + + //Deleting details for this field + $sql = $wpdb->prepare("DELETE FROM $lead_detail_table WHERE lead_id=%d AND field_number BETWEEN %s AND %s ", $lead_id, doubleval($input_id) - 0.001, doubleval($input_id) + 0.001); + $result = $wpdb->query($sql); + if(false === $result) + return false ; + } + return true; + } + + private static function move_temp_file($form_id, $tempfile_info){ + + $target = self::get_file_upload_path($form_id, $tempfile_info["uploaded_filename"]); + $source = self::get_upload_path($form_id) . "/tmp/" . $tempfile_info["temp_filename"]; + + if(rename($source, $target["path"])){ + self::set_permissions($target["path"]); + return $target["url"]; + } + else{ + return "FAILED (Temporary file could not be moved.)"; + } + } + + private static function set_permissions($path){ + + $permission = apply_filters("gform_file_permission", 0644, $path); + if($permission){ + chmod($path, $permission); + } + } + + public static function upload_file($form_id, $file){ + + $target = self::get_file_upload_path($form_id, $file["name"]); + if(!$target){ + GFCommon::log_debug("upload_file() - FAILED (Upload folder could not be created.)"); + return "FAILED (Upload folder could not be created.)"; + } + + + if(move_uploaded_file($file['tmp_name'], $target["path"])){ + GFCommon::log_debug("upload_file() - setting permissions on " . $target["path"]); + self::set_permissions($target["path"]); + return $target["url"]; + } + else{ + GFCommon::log_debug("upload_file() - FAILED (Temporary file could not be copied.)"); + return "FAILED (Temporary file could not be copied.)"; + } + } + + + public static function get_upload_root(){ + $dir = wp_upload_dir(); + + if($dir["error"]) + return null; + + return $dir["basedir"] . "/gravity_forms/"; + } + + public static function get_upload_url_root(){ + $dir = wp_upload_dir(); + + if($dir["error"]) + return null; + + return $dir["baseurl"] . "/gravity_forms/"; + } + + public static function get_upload_path($form_id){ + return self::get_upload_root() . $form_id . "-" . wp_hash($form_id); + } + + public static function get_upload_url($form_id){ + $dir = wp_upload_dir(); + + return $dir["baseurl"] . "/gravity_forms/$form_id" . "-" . wp_hash($form_id); + } + + public static function get_file_upload_path($form_id, $file_name){ + if (get_magic_quotes_gpc()) + $file_name = stripslashes($file_name); + + // Where the file is going to be placed + // Generate the yearly and monthly dirs + $time = current_time( 'mysql' ); + $y = substr( $time, 0, 4 ); + $m = substr( $time, 5, 2 ); + $target_root = self::get_upload_path($form_id) . "/$y/$m/"; + $target_root_url = self::get_upload_url($form_id) . "/$y/$m/"; + + //adding filter to upload root path and url + $upload_root_info = array("path" => $target_root, "url" => $target_root_url); + $upload_root_info = apply_filters("gform_upload_path_{$form_id}", apply_filters("gform_upload_path", $upload_root_info, $form_id), $form_id); + + $target_root = $upload_root_info["path"]; + $target_root_url = $upload_root_info["url"]; + + if(!is_dir($target_root)){ + if(!wp_mkdir_p($target_root)) + return false; + + //adding index.html files to all subfolders + if(!file_exists(self::get_upload_root() . "/index.html")){ + GFCommon::recursive_add_index_file(self::get_upload_root()); + } + else if(!file_exists(self::get_upload_path($form_id) . "/index.html")){ + GFCommon::recursive_add_index_file(self::get_upload_path($form_id)); + } + else if(!file_exists(self::get_upload_path($form_id) . "/$y/index.html")){ + GFCommon::recursive_add_index_file(self::get_upload_path($form_id) . "/$y"); + } + else{ + GFCommon::recursive_add_index_file(self::get_upload_path($form_id) . "/$y/$m"); + } + + } + + //Add the original filename to our target path. + //Result is "uploads/filename.extension" + $file_info = pathinfo($file_name); + $extension = rgar($file_info, 'extension'); + if(!empty($extension)) + $extension = "." . $extension; + $file_name = basename($file_info["basename"], $extension); + + $file_name = sanitize_file_name($file_name); + + $counter = 1; + $target_path = $target_root . $file_name . $extension; + while(file_exists($target_path)){ + $target_path = $target_root . $file_name . "$counter" . $extension; + $counter++; + } + + //Remove "." from the end if file does not have a file extension + $target_path = trim($target_path, '.'); + + //creating url + $target_url = str_replace($target_root, $target_root_url, $target_path); + + return array("path" => $target_path, "url" => $target_url); + } + + public static function get_tables() { + return array( + self::get_lead_details_long_table_name(), + self::get_lead_notes_table_name(), + self::get_lead_details_table_name(), + self::get_lead_table_name(), + self::get_form_view_table_name(), + self::get_meta_table_name(), + self::get_form_table_name(), + self::get_lead_meta_table_name() + ); + } + + public static function drop_tables(){ + global $wpdb; + foreach(self::get_tables() as $table) { + $wpdb->query("DROP TABLE IF EXISTS $table"); + } + } + + public static function mu_drop_tables($drop_tables) { + return array_merge($drop_tables, self::get_tables()); + } + + public static function insert_form_view($form_id, $ip){ + global $wpdb; + $table_name = self::get_form_view_table_name(); + + $sql = $wpdb->prepare(" SELECT id FROM $table_name + WHERE form_id=%d + AND year(date_created) = year(utc_timestamp()) + AND month(date_created) = month(utc_timestamp()) + AND day(date_created) = day(utc_timestamp()) + AND hour(date_created) = hour(utc_timestamp())", $form_id); + + $id = $wpdb->get_var($sql, 0, 0); + + if(empty($id)) + $wpdb->query($wpdb->prepare("INSERT INTO $table_name(form_id, date_created, ip) values(%d, utc_timestamp(), %s)", $form_id, $ip)); + else + $wpdb->query($wpdb->prepare("UPDATE $table_name SET count = count+1 WHERE id=%d", $id)); + } + + public static function is_duplicate($form_id, $field, $value){ + global $wpdb; + $lead_detail_table_name = self::get_lead_details_table_name(); + $lead_table_name = self::get_lead_table_name(); + $sql_comparison = "ld.value=%s"; + + switch(RGFormsModel::get_input_type($field)){ + case "time" : + $value = sprintf("%02d:%02d %s", $value[0], $value[1], $value[2]); + break; + case "date" : + $value = self::prepare_date(rgar($field, "dateFormat"), $value); + break; + case "number" : + $value = GFCommon::clean_number($value, rgar($field, 'numberFormat')); + break; + case "phone" : + $value = str_replace(array(")", "(", "-", " "), array("", "", "", ""), $value); + $sql_comparison = 'replace(replace(replace(replace(ld.value, ")", ""), "(", ""), "-", ""), " ", "") = %s'; + break; + } + + + $inner_sql_template = " SELECT %s as input, ld.lead_id + FROM $lead_detail_table_name ld + INNER JOIN $lead_table_name l ON l.id = ld.lead_id + WHERE l.form_id=%d AND ld.form_id=%d + AND ld.field_number between %s AND %s + AND status='active' AND {$sql_comparison}"; + + $sql = "SELECT count(distinct input) as match_count FROM ( "; + + $input_count = 1; + if(is_array($field["inputs"])){ + $input_count = sizeof($field["inputs"]); + foreach($field["inputs"] as $input){ + $union = empty($inner_sql) ? "" : " UNION ALL "; + $inner_sql .= $union . $wpdb->prepare($inner_sql_template, $input["id"], $form_id, $form_id, $input["id"] - 0.001, $input["id"] + 0.001, $value[$input["id"]]); + } + } + else{ + $inner_sql = $wpdb->prepare($inner_sql_template, $field["id"], $form_id, $form_id, doubleval($field["id"]) - 0.001, doubleval($field["id"]) + 0.001, $value); + } + + $sql .= $inner_sql . " + ) as count + GROUP BY lead_id + ORDER BY match_count DESC"; + + $count = apply_filters("gform_is_duplicate_{$form_id}", apply_filters('gform_is_duplicate', $wpdb->get_var($sql), $form_id, $field, $value), $form_id, $field, $value); + + return $count != null && $count >= $input_count; + } + + public static function get_lead($lead_id){ + global $wpdb; + $lead_detail_table_name = self::get_lead_details_table_name(); + $lead_table_name = self::get_lead_table_name(); + + $results = $wpdb->get_results($wpdb->prepare(" SELECT l.*, field_number, value + FROM $lead_table_name l + INNER JOIN $lead_detail_table_name ld ON l.id = ld.lead_id + WHERE l.id=%d", $lead_id)); + + $leads = self::build_lead_array($results, true); + return sizeof($leads) == 1 ? $leads[0] : false; + } + + public static function get_lead_notes($lead_id){ + global $wpdb; + $notes_table = self::get_lead_notes_table_name(); + + return $wpdb->get_results($wpdb->prepare(" SELECT n.id, n.user_id, n.date_created, n.value, ifnull(u.display_name,n.user_name) as user_name, u.user_email + FROM $notes_table n + LEFT OUTER JOIN $wpdb->users u ON n.user_id = u.id + WHERE lead_id=%d ORDER BY id", $lead_id)); + } + + public static function refresh_lead_field_value($lead_id, $field_id){ + $cache_key = "GFFormsModel::get_lead_field_value_" . $lead_id . "_" . $field_id; + GFCache::delete($cache_key); + } + + public static function get_lead_field_value($lead, $field){ + + if(empty($lead)) + return; + + //returning cache entry if available + $cache_key = "GFFormsModel::get_lead_field_value_" . $lead["id"] . "_" . $field["id"]; + + $cache_value = GFCache::get($cache_key); + if($cache_value !== false) + return $cache_value; + + $max_length = GFORMS_MAX_FIELD_LENGTH; + $value = array(); + if(is_array(rgar($field, "inputs"))){ + //making sure values submitted are sent in the value even if + //there isn't an input associated with it + $lead_field_keys = array_keys($lead); + foreach($lead_field_keys as $input_id){ + if(is_numeric($input_id) && absint($input_id) == absint($field["id"])){ + $val = $lead[$input_id]; + if(strlen($val) >= ($max_length-10)) { + if(empty($form)) + $form = RGFormsModel::get_form_meta($lead["form_id"]); + + $long_choice = self::get_field_value_long($lead, $input_id, $form); + } + else{ + $long_choice = $val; + } + + $value[$input_id] = !empty($long_choice) ? $long_choice : $val; + } + } + } + else{ + $val = rgget($field["id"], $lead); + + //To save a database call to get long text, only getting long text if regular field is "somewhat" large (i.e. max - 50) + if(strlen($val) >= ($max_length - 50)){ + if(empty($form)) + $form = RGFormsModel::get_form_meta($lead["form_id"]); + + $long_text = self::get_field_value_long($lead, $field["id"], $form); + } + + $value = !empty($long_text) ? $long_text : $val; + } + + //filtering lead value + $value = apply_filters("gform_get_field_value", $value, $lead, $field); + + //saving value in global variable to optimize performance + GFCache::set($cache_key, $value); + + return $value; + } + + public static function get_field_value_long($lead, $field_number, $form, $apply_filter=true){ + global $wpdb; + $detail_table_name = self::get_lead_details_table_name(); + $long_table_name = self::get_lead_details_long_table_name(); + + $sql = $wpdb->prepare(" SELECT l.value FROM $detail_table_name d + INNER JOIN $long_table_name l ON l.lead_detail_id = d.id + WHERE lead_id=%d AND field_number BETWEEN %s AND %s", $lead["id"], doubleval($field_number) - 0.001, doubleval($field_number) + 0.001); + + $val = $wpdb->get_var($sql); + + //running aform_get_input_value when needed + if($apply_filter){ + $field = RGFormsModel::get_field($form, $field_number); + $input_id = (string)$field_number == (string)$field["id"] ? "" : $field_number; + $val = apply_filters("gform_get_input_value", $val, $lead, $field, $input_id); + } + + return $val; + } + + public static function get_leads_by_meta($meta_key, $meta_value){ + global $wpdb; + + $sql = $wpdb->prepare( " SELECT l.*, d.field_number, d.value + FROM {$wpdb->prefix}rg_lead l + INNER JOIN {$wpdb->prefix}rg_lead_detail d ON l.id = d.lead_id + INNER JOIN {$wpdb->prefix}rg_lead_meta m ON l.id = m.lead_id + WHERE m.meta_key=%s AND m.meta_value=%s", $meta_key, $meta_value); + + //getting results + $results = $wpdb->get_results($sql); + $leads = self::build_lead_array($results); + return $leads; + } + + public static function get_leads($form_id, $sort_field_number=0, $sort_direction='DESC', $search='', $offset=0, $page_size=30, $star=null, $read=null, $is_numeric_sort = false, $start_date=null, $end_date=null, $status='active', $payment_status = false){ + global $wpdb; + + if(empty($sort_field_number)) + $sort_field_number = "date_created"; + + if(is_numeric($sort_field_number)) { + $sql = self::sort_by_custom_field_query($form_id, $sort_field_number, $sort_direction, $search, $offset, $page_size, $star, $read, $is_numeric_sort, $status, $payment_status); + } else { + $sql = self::sort_by_default_field_query($form_id, $sort_field_number, $sort_direction, $search, $offset, $page_size, $star, $read, $is_numeric_sort, $start_date, $end_date, $status, $payment_status); + } + + //initializing rownum + $wpdb->query("select @rownum:=0"); + + GFCommon::log_debug($sql); + + //getting results + $results = $wpdb->get_results($sql); + + $leads = self::build_lead_array($results); + + return $leads; + } + + public static function get_leads_count($form_id) { } + + private static function sort_by_custom_field_query($form_id, $sort_field_number=0, $sort_direction='DESC', $search='', $offset=0, $page_size=30, $star=null, $read=null, $is_numeric_sort = false, $status='active', $payment_status = false){ + global $wpdb; + if(!is_numeric($form_id) || !is_numeric($sort_field_number)|| !is_numeric($offset)|| !is_numeric($page_size)) + return ""; + + $lead_detail_table_name = self::get_lead_details_table_name(); + $lead_table_name = self::get_lead_table_name(); + + $orderby = $is_numeric_sort ? "ORDER BY query, (value+0) $sort_direction" : "ORDER BY query, value $sort_direction"; + $is_default = false; + + $search_sql = self::get_leads_where_sql(compact('form_id', 'search', 'status', 'star', 'read', 'start_date', 'end_date', 'payment_status', 'is_default')); + + $field_number_min = $sort_field_number - 0.001; + $field_number_max = $sort_field_number + 0.001; + + $sql = " + SELECT filtered.sort, l.*, d.field_number, d.value + FROM $lead_table_name l + INNER JOIN $lead_detail_table_name d ON d.lead_id = l.id + INNER JOIN ( + SELECT distinct sorted.sort, l.id + FROM $lead_table_name l + INNER JOIN $lead_detail_table_name d ON d.lead_id = l.id + INNER JOIN ( + SELECT @rownum:=@rownum+1 as sort, id FROM ( + SELECT 0 as query, lead_id as id, value + FROM $lead_detail_table_name + WHERE form_id=$form_id + AND field_number between $field_number_min AND $field_number_max + + UNION ALL + + SELECT 1 as query, l.id, d.value + FROM $lead_table_name l + LEFT OUTER JOIN $lead_detail_table_name d ON d.lead_id = l.id AND field_number between $field_number_min AND $field_number_max + WHERE l.form_id=$form_id + AND d.lead_id IS NULL + + ) sorted1 + $orderby + ) sorted ON d.lead_id = sorted.id + $search_sql + LIMIT $offset,$page_size + ) filtered ON filtered.id = l.id + ORDER BY filtered.sort"; + + return $sql; + } + + private static function sort_by_default_field_query($form_id, $sort_field, $sort_direction='DESC', $search='', $offset=0, $page_size=30, $star=null, $read=null, $is_numeric_sort = false, $start_date=null, $end_date=null, $status='active', $payment_status = false){ + global $wpdb; + + if(!is_numeric($form_id) || !is_numeric($offset)|| !is_numeric($page_size)){ + return ""; + } + + $lead_detail_table_name = self::get_lead_details_table_name(); + $lead_table_name = self::get_lead_table_name(); + $lead_meta_table_name = self::get_lead_meta_table_name(); + + $where = self::get_leads_where_sql(compact('form_id', 'search', 'status', 'star', 'read', 'start_date', 'end_date', 'payment_status')); + + $entry_meta = self::get_entry_meta($form_id); + $entry_meta_sql_join = ""; + if ( false === empty( $entry_meta ) && array_key_exists( $sort_field, $entry_meta ) ) { + $entry_meta_sql_join = $wpdb->prepare("INNER JOIN + ( + SELECT + lead_id, meta_value as $sort_field + from $lead_meta_table_name + WHERE meta_key = '$sort_field' + ) lead_meta_data ON lead_meta_data.lead_id = l.id + "); + $is_numeric_sort = $entry_meta[$sort_field]['is_numeric']; + } + $grid_columns = RGFormsModel::get_grid_columns($form_id); + if ( $sort_field != "date_created" && false === array_key_exists($sort_field, $grid_columns) ) + $sort_field = "date_created"; + $orderby = $is_numeric_sort ? "ORDER BY ($sort_field+0) $sort_direction" : "ORDER BY $sort_field $sort_direction"; + + $sql = " + SELECT filtered.sort, l.*, d.field_number, d.value + FROM $lead_table_name l + INNER JOIN $lead_detail_table_name d ON d.lead_id = l.id + INNER JOIN + ( + SELECT @rownum:=@rownum + 1 as sort, id + FROM + ( + SELECT distinct l.id + FROM $lead_table_name l + INNER JOIN $lead_detail_table_name d ON d.lead_id = l.id + $entry_meta_sql_join + $where + $orderby + LIMIT $offset,$page_size + ) page + ) filtered ON filtered.id = l.id + ORDER BY filtered.sort"; + + return $sql; + } + + public static function get_leads_where_sql($args) { + global $wpdb; + + extract(wp_parse_args($args, array( + 'form_id' => false, + 'search' => '', + 'status' => 'active', + 'star' => null, + 'read' => null, + 'start_date' => null, + 'end_date' => null, + 'payment_status' => null, + 'is_default' => true + ))); + + $where = array(); + + if($is_default) + $where[] = "l.form_id = $form_id"; + + if($search && $is_default) { + $where[] = $wpdb->prepare("value LIKE %s", "%$search%"); + } else if($search) { + $where[] = $wpdb->prepare("d.value LIKE %s", "%$search%"); + } + + if($star !== null && $status == 'active') + $where[] = $wpdb->prepare("is_starred = %d AND status = 'active'", $star); + + if($read !== null && $status == 'active') + $where[] = $wpdb->prepare("is_read = %d AND status = 'active'", $read); + + if($payment_status) + $where[] = $wpdb->prepare("payment_status = '%s'", $payment_status); + + if ($status !== null) + $where[] = $wpdb->prepare("status = %s", $status); + + if(!empty($start_date)) + $where[] = "timestampdiff(SECOND, '$start_date', date_created) >= 0"; + + if(!empty($end_date)) + $where[] = "timestampdiff(SECOND, '$end_date', date_created) <= 0"; + + return 'WHERE ' . implode(' AND ', $where); + } + + public static function build_lead_array($results, $use_long_values = true){ + + $leads = array(); + $lead = array(); + $form_id = 0; + if(is_array($results) && sizeof($results) > 0){ + $form_id = $results[0]->form_id; + $lead = array("id" => $results[0]->id, "form_id" => $results[0]->form_id, "date_created" => $results[0]->date_created, "is_starred" => intval($results[0]->is_starred), "is_read" => intval($results[0]->is_read), "ip" => $results[0]->ip, "source_url" => $results[0]->source_url, "post_id" => $results[0]->post_id, "currency" => $results[0]->currency, "payment_status" => $results[0]->payment_status, "payment_date" => $results[0]->payment_date, "transaction_id" => $results[0]->transaction_id, "payment_amount" => $results[0]->payment_amount, "payment_method" => $results[0]->payment_method, "is_fulfilled" => $results[0]->is_fulfilled, "created_by" => $results[0]->created_by, "transaction_type" => $results[0]->transaction_type, "user_agent" => $results[0]->user_agent, "status" => $results[0]->status); + + $form = RGFormsModel::get_form_meta($form_id); + $prev_lead_id=0; + foreach($results as $result){ + if($prev_lead_id <> $result->id && $prev_lead_id > 0){ + array_push($leads, $lead); + $lead = array("id" => $result->id, "form_id" => $result->form_id, "date_created" => $result->date_created, "is_starred" => intval($result->is_starred), "is_read" => intval($result->is_read), "ip" => $result->ip, "source_url" => $result->source_url, "post_id" => $result->post_id, "currency" => $result->currency, "payment_status" => $result->payment_status, "payment_date" => $result->payment_date, "transaction_id" => $result->transaction_id, "payment_amount" => $result->payment_amount, "payment_method" => $result->payment_method, "is_fulfilled" => $result->is_fulfilled, "created_by" => $result->created_by, "transaction_type" => $result->transaction_type, "user_agent" => $result->user_agent, "status" => $result->status); + } + + $field_value = $result->value; + //using long values if specified + if($use_long_values && strlen($field_value) >= (GFORMS_MAX_FIELD_LENGTH-10)){ + $field = RGFormsModel::get_field($form, $result->field_number); + $long_text = RGFormsModel::get_field_value_long($lead, $result->field_number, $form, false); + $field_value = !empty($long_text) ? $long_text : $field_value; + } + + $lead[$result->field_number] = $field_value; + $prev_lead_id = $result->id; + } + } + + + //adding last lead. + if(sizeof($lead) > 0) + array_push($leads, $lead); + + //running entry through gform_get_field_value filter + foreach($leads as &$lead){ + foreach($form["fields"] as $field){ + // skip types html, page and section? + if(isset($field["inputs"]) && is_array($field["inputs"])){ + foreach($field["inputs"] as $input){ + $lead[(string)$input["id"]] = apply_filters("gform_get_input_value", rgar($lead, (string)$input["id"]), $lead, $field, $input["id"]); + } + } + else{ + + $lead[$field["id"]] = apply_filters("gform_get_input_value", rgar($lead, (string)$field["id"]), $lead, $field, ""); + } + } + } + + //add custom entry properties + $entry_ids = array(); + foreach($leads as $l){ + $entry_ids[] = $l["id"]; + } + $entry_meta = GFFormsModel::get_entry_meta($form_id); + $meta_keys = array_keys($entry_meta); + $entry_meta_data_rows = gform_get_meta_values_for_entries($entry_ids, $meta_keys); + foreach($leads as &$lead){ + foreach($entry_meta_data_rows as $entry_meta_data_row){ + if($entry_meta_data_row->lead_id == $lead["id"]){ + foreach($meta_keys as $meta_key){ + $lead[$meta_key] = $entry_meta_data_row->$meta_key; + } + } + } + } + + return $leads; + } + + public static function save_key($key){ + $current_key = get_option("rg_gforms_key"); + if(empty($key)){ + delete_option("rg_gforms_key"); + } + else if($current_key != $key){ + $key = trim($key); + update_option("rg_gforms_key", md5($key)); + } + } + + public static function get_lead_count($form_id, $search, $star=null, $read=null, $start_date=null, $end_date=null, $status=null, $payment_status = null){ + global $wpdb; + + if(!is_numeric($form_id)) + return ""; + + $detail_table_name = self::get_lead_details_table_name(); + $lead_table_name = self::get_lead_table_name(); + + $where = self::get_leads_where_sql(compact('form_id', 'search', 'status', 'star', 'read', 'start_date', 'end_date', 'payment_status', 'is_default')); + + $sql = "SELECT count(distinct l.id) + FROM $lead_table_name l + INNER JOIN $detail_table_name ld ON l.id = ld.lead_id + $where"; + + return $wpdb->get_var($sql); + } + + public static function get_lead_ids($form_id, $search, $star=null, $read=null, $start_date=null, $end_date=null, $status=null, $payment_status = null){ + global $wpdb; + + if(!is_numeric($form_id)) + return ""; + + $detail_table_name = self::get_lead_details_table_name(); + $lead_table_name = self::get_lead_table_name(); + + $where = self::get_leads_where_sql(compact('form_id', 'search', 'status', 'star', 'read', 'start_date', 'end_date', 'payment_status', 'is_default')); + + $sql = "SELECT distinct l.id + FROM $lead_table_name l + INNER JOIN $detail_table_name ld ON l.id = ld.lead_id + $where"; + + $rows = $wpdb->get_results($sql); + + if(empty($rows)) + return array(); + + foreach ($rows as $row){ + $lead_ids[] = $row->id; + } + + return $lead_ids; + + } + + public static function get_grid_columns($form_id, $input_label_only=false){ + $form = self::get_form_meta($form_id); + $field_ids = self::get_grid_column_meta($form_id); + + if(!is_array($field_ids)){ + $field_ids = array(); + for($i=0, $count=sizeof($form["fields"]); $i<$count && $i<5; $i++){ + $field = $form["fields"][$i]; + + //loading post category fields with choices and inputs + if($field["type"] == "post_category") + $field = GFCommon::add_categories_as_choices($field, ""); + + if(RGForms::get("displayOnly",$field) || self::get_input_type($field) == "list") + continue; + + if(isset($field["inputs"]) && is_array($field["inputs"])){ + if($field["type"] == "name"){ + $field_ids[] = $field["id"] . '.3'; //adding first name + $field_ids[] = $field["id"] . '.6'; //adding last name + } + else{ + $field_ids[] = $field["inputs"][0]["id"]; //getting first input + } + } + else{ + $field_ids[] = $field["id"]; + } + } + //adding default entry meta columns + $entry_metas = GFFormsModel::get_entry_meta($form_id); + foreach ($entry_metas as $key => $entry_meta){ + if (rgar($entry_meta,"is_default_column")) + $field_ids[] = $key; + } + } + + $columns = array(); + $entry_meta = self::get_entry_meta($form_id); + foreach($field_ids as $field_id){ + + switch($field_id){ + case "id" : + $columns[$field_id] = array("label" => "Entry Id", "type" => "id"); + break; + case "ip" : + $columns[$field_id] = array("label" => "User IP", "type" => "ip"); + break; + case "date_created" : + $columns[$field_id] = array("label" => "Entry Date", "type" => "date_created"); + break; + case "source_url" : + $columns[$field_id] = array("label" => "Source Url", "type" => "source_url"); + break; + case "payment_status" : + $columns[$field_id] = array("label" => "Payment Status", "type" => "payment_status"); + break; + case "transaction_id" : + $columns[$field_id] = array("label" => "Transaction Id", "type" => "transaction_id"); + break; + case "payment_date" : + $columns[$field_id] = array("label" => "Payment Date", "type" => "payment_date"); + break; + case "payment_amount" : + $columns[$field_id] = array("label" => "Payment Amount", "type" => "payment_amount"); + break; + case "created_by" : + $columns[$field_id] = array("label" => "User", "type" => "created_by"); + break; + case ((is_string($field_id) || is_int($field_id)) && array_key_exists($field_id, $entry_meta)) : + $columns[$field_id] = array("label" => $entry_meta[$field_id]["label"], "type" => $field_id); + break; + default : + $field = self::get_field($form, $field_id); + if($field) + $columns[strval($field_id)] = array("label" => self::get_label($field, $field_id, $input_label_only), "type" => rgget("type", $field), "inputType" => rgget("inputType", $field)); + } + } + return $columns; + } + + public static function get_label($field, $input_id = 0, $input_only = false){ + $field_label = (IS_ADMIN || RG_CURRENT_PAGE == "select_columns.php" || RG_CURRENT_PAGE == "print-entry.php" || rgget("gf_page", $_GET) == "select_columns" || rgget("gf_page", $_GET) == "print-entry") && !rgempty("adminLabel", $field) ? rgar($field,"adminLabel") : rgar($field,"label"); + $input = self::get_input($field, $input_id); + if(rgget("type", $field) == "checkbox" && $input != null) + return $input["label"]; + else if($input != null) + return $input_only ? $input["label"] : $field_label . ' (' . $input["label"] . ')'; + else + return $field_label; + } + + public static function get_input($field, $id){ + if(isset($field["inputs"]) && is_array($field["inputs"])){ + foreach($field["inputs"] as $input) + { + if($input["id"] == $id) + return $input; + } + } + return null; + } + + public static function has_input($field, $input_id){ + if(!is_array($field["inputs"])) + return false; + else{ + foreach($field["inputs"] as $input) + { + if($input["id"] == $input_id) + return true; + } + return false; + } + } + + public static function get_current_page_url($force_ssl=false) { + $pageURL = 'http'; + if (RGForms::get("HTTPS",$_SERVER) == "on" || $force_ssl) + $pageURL .= "s"; + $pageURL .= "://"; + + $pageURL .= RGForms::get("HTTP_HOST", $_SERVER) . rgget("REQUEST_URI", $_SERVER); + return $pageURL; + } + + public static function get_submitted_fields($form_id){ + global $wpdb; + $lead_detail_table_name = self::get_lead_details_table_name(); + $field_list = ""; + $fields = $wpdb->get_results($wpdb->prepare("SELECT DISTINCT field_number FROM $lead_detail_table_name WHERE form_id=%d", $form_id)); + foreach($fields as $field) + $field_list .= intval($field->field_number) . ','; + + if(!empty($field_list)) + $field_list = substr($field_list, 0, strlen($field_list) -1); + + return $field_list; + } + + public static function get_field($form, $field_id){ + if(is_numeric($field_id)) + $field_id = intval($field_id); //removing floating part of field (i.e 1.3 -> 1) to return field by input id + + if(!is_array($form["fields"])) + return null; + + global $_fields; + $key = $form["id"] . "_" . $field_id; + if(!isset($_fields[$key])){ + $_fields[$key] = null; + foreach($form["fields"] as $field){ + if($field["id"] == $field_id){ + $_fields[$key] = $field; + break; + } + } + } + return $_fields[$key]; + } + + public static function is_html5_enabled(){ + return get_option("rg_gforms_enable_html5"); + } + + /** + * Return the current lead being processed. Should only be called when a form has been submitted. + * If called before the "real" lead has been saved to the database, uses self::create_lead() to create + * a temporary lead to work with. + */ + public static function get_current_lead() { + + // if a GF submission is not in process, always return false + if(!rgpost('gform_submit')) + return false; + + if(!self::$_current_lead) { + $form = self::get_form_meta(rgpost('gform_submit')); + self::$_current_lead = self::create_lead($form); + } + + return self::$_current_lead; + } + + /** + * Set RGFormsModel::$lead for use in hooks where $lead is not explicitly passed. + * + * @param mixed $lead + */ + public static function set_current_lead($lead) { + GFCache::flush(); + self::$_current_lead = $lead; + } + + /** + * v1.7 introduces conditional confirmations. If the form's "confirmations" key is empty, grab the existing confirmation + * and populate it in the form's "confirmations" property. + * + * @param mixed $form + */ + public static function convert_confirmation($form) { + + $id = uniqid(); + + // convert confirmation to new confirmations format + $confirmation = rgar($form,'confirmation'); + $confirmation['id'] = $id; + $confirmation['name'] = __('Default Confirmation', 'gravityforms'); + $confirmation['isDefault'] = true; + + $form['confirmations'] = array($id => $confirmation); + + self::save_form_confirmations($form['id'], $form['confirmations']); + + return $form; + } + + public static function load_confirmations($form) { + + $confirmations = self::get_form_confirmations($form['id']); + + // if there are no confirmations, convert existing (singular) confirmation (prior to 1.7) to new (plural) confirmations format + if(empty($confirmations)) { + $form = self::convert_confirmation($form); + } else { + $form['confirmations'] = $confirmations; + } + + return $form; + } + + public static function get_form_confirmations($form_id) { + global $wpdb; + + if(isset($_confirmations[$form_id])) + return $_confirmations[$form_id]; + + $tablename = GFFormsModel::get_meta_table_name(); + $sql = $wpdb->prepare("SELECT confirmations FROM $tablename WHERE form_id = %d", $form_id); + $results = $wpdb->get_results($sql, ARRAY_A); + $confirmations = rgars($results, '0/confirmations'); + + self::$_confirmations[$form_id] = $confirmations ? self::unserialize($confirmations) : array(); + + return self::$_confirmations[$form_id]; + } + + public static function save_form_confirmations($form_id, $confirmations) { + return self::update_form_meta($form_id, $confirmations, 'confirmations'); + } + + public static function save_form_notifications($form_id, $notifications) { + return self::update_form_meta($form_id, $notifications, 'notifications'); + } + + public static function get_form_ids($active = true, $trash = false){ + global $wpdb; + $table = self::get_form_table_name(); + $sql = $wpdb->prepare("SELECT id from $table where is_active = %d and is_trash = %d", (bool) $active, (bool) $trash ); + $results = $wpdb->get_col($sql); + return $results; + } + + public static function get_entry_meta($form_ids){ + global $_entry_meta; + + if($form_ids==0) + $form_ids = self::get_form_ids(); + + if(!is_array($form_ids)) + $form_ids=array($form_ids); + $meta = array(); + foreach($form_ids as $form_id){ + if(!isset($_entry_meta[$form_id])){ + $_entry_meta = array(); + $_entry_meta[$form_id] = apply_filters('gform_entry_meta', array(), $form_id); + } + $meta = array_merge($meta, $_entry_meta[$form_id]); + } + + return $meta; + } + + public static function set_entry_meta($lead, $form){ + $entry_meta = self::get_entry_meta($form["id"]); + $keys = array_keys($entry_meta); + foreach ($keys as $key){ + if (isset($entry_meta[$key]['update_entry_meta_callback'])){ + $callback = $entry_meta[$key]['update_entry_meta_callback']; + $value = call_user_func_array($callback, array($key, $lead, $form)); + gform_update_meta($lead["id"], $key, $value); + $lead[$key] = $value; + } + } + return $lead; + } + + public static function search_leads($form_id, $search_criteria = array(), $sorting = null, $paging = null) { + + global $wpdb; + $sort_field = isset($sorting["key"]) ? $sorting["key"] : "date_created"; // column, field or entry meta + + if (is_numeric($sort_field)) + $sql = self::sort_by_field_query($form_id, $search_criteria, $sorting, $paging); + else + $sql = self::sort_by_column_query($form_id, $search_criteria, $sorting, $paging); + + //initializing rownum + $wpdb->query("select @rownum:=0"); + + GFCommon::log_debug($sql); + + //getting results + $results = $wpdb->get_results($sql); + + $leads = GFFormsModel::build_lead_array($results); + + return $leads; + } + + public static function search_lead_ids($form_id, $search_criteria = array()) { + global $wpdb; + + $detail_table_name = GFFormsModel::get_lead_details_table_name(); + $lead_table_name = GFFormsModel::get_lead_table_name(); + + $where = self::get_search_where($form_id, $search_criteria); + + $sql = "SELECT distinct l.id + FROM $lead_table_name l + INNER JOIN $detail_table_name ld ON l.id = ld.lead_id + $where + "; + + $rows = $wpdb->get_results($sql); + + if(empty($rows)) + return array(); + + foreach ($rows as $row){ + $lead_ids[] = $row->id; + } + + return $lead_ids; + } + + private static function sort_by_field_query($form_id, $search_criteria, $sorting, $paging) { + global $wpdb; + $sort_field_number = rgar($sorting, "key"); + $sort_direction = isset($sorting["direction"]) ? $sorting["direction"] : "DESC"; + + $is_numeric_sort = isset($sorting["is_numeric"]) ? $sorting["is_numeric"] : false; + $offset = isset($paging["offset"]) ? $paging["offset"] : 0; + $page_size = isset($paging["page_size"]) ? $paging["page_size"] : 20; + + if (!is_numeric($sort_field_number) || !is_numeric($offset) || !is_numeric($page_size)) + return ""; + + $lead_detail_table_name = GFFormsModel::get_lead_details_table_name(); + $lead_table_name = GFFormsModel::get_lead_table_name(); + + $orderby = $is_numeric_sort ? "ORDER BY query, (value+0) $sort_direction" : "ORDER BY query, value $sort_direction"; + + + $field_filters_where = self::get_field_filters_where($form_id, $search_criteria); + if (!empty($field_filters_where)) + $where_arr[]=$field_filters_where; + + $info_search_where = self::get_info_search_where($search_criteria); + if(!empty($info_search_where)) + $where_arr[] = $info_search_where; + + $search_operator = self::get_search_operator($search_criteria); + $where = empty($where_arr) ? "" : join(" $search_operator ", $where_arr); + + $date_range_where = self::get_date_range_where($search_criteria); + if(!empty($date_range_where)) + $where = empty($where) ? $date_range_where : $where . " AND " . $date_range_where; + + if(!empty($where)) + $where = "WHERE " . $where; + + if(is_array($form_id)){ + $in_str_arr = array_fill(0, count($form_id), '%s'); + $in_str = esc_sql(join(",", $in_str_arr)); + $form_id_where = $wpdb->prepare(" AND form_id IN ($in_str)", $form_id); + } else { + $form_id_where = $form_id > 0 ? $wpdb->prepare(" AND l.form_id=%d", $form_id) : ""; + } + + $field_number_min = $sort_field_number - 0.001; + $field_number_max = $sort_field_number + 0.001; + + $sql = " + SELECT filtered.sort, l.*, d.field_number, d.value + FROM $lead_table_name l + INNER JOIN $lead_detail_table_name d ON d.lead_id = l.id + INNER JOIN ( + SELECT distinct sorted.sort, l.id + FROM $lead_table_name l + INNER JOIN $lead_detail_table_name d ON d.lead_id = l.id + INNER JOIN ( + SELECT @rownum:=@rownum+1 as sort, id FROM ( + SELECT 0 as query, lead_id as id, value + FROM $lead_detail_table_name l + WHERE field_number between $field_number_min AND $field_number_max + $form_id_where + + UNION ALL + + SELECT 1 as query, l.id, d.value + FROM $lead_table_name l + LEFT OUTER JOIN $lead_detail_table_name d ON d.lead_id = l.id AND field_number between $field_number_min AND $field_number_max + WHERE d.lead_id IS NULL + $form_id_where + + ) sorted1 + $orderby + ) sorted ON d.lead_id = sorted.id + $where + LIMIT $offset,$page_size + ) filtered ON filtered.id = l.id + + ORDER BY filtered.sort"; + + return $sql; + } + + private static function sort_by_column_query($form_id, $search_criteria, $sorting, $paging) { + global $wpdb; + $sort_field = isset($sorting["key"]) ? $sorting["key"] : "date_created"; + $sort_direction = isset($sorting["direction"]) ? $sorting["direction"] : "DESC"; + $is_numeric_sort = isset($sorting["is_numeric"]) ? $sorting["is_numeric"] : false; + $offset = isset($paging["offset"]) ? $paging["offset"] : 0; + $page_size = isset($paging["page_size"]) ? $paging["page_size"] : 20; + + if (!is_numeric($offset) || !is_numeric($page_size)) { + return ""; + } + + $lead_detail_table_name = GFFormsModel::get_lead_details_table_name(); + $lead_table_name = GFFormsModel::get_lead_table_name(); + $lead_meta_table_name = GFFormsModel::get_lead_meta_table_name(); + + $entry_meta = GFFormsModel::get_entry_meta(is_array($form_id) ? 0 : $form_id); + $entry_meta_sql_join = ""; + $sort_field_is_entry_meta = false; + if (false === empty($entry_meta) && array_key_exists($sort_field, $entry_meta)) { + $entry_meta_sql_join = $wpdb->prepare("INNER JOIN + ( + SELECT + lead_id, meta_value as $sort_field + from $lead_meta_table_name + WHERE meta_key=%s + ) lead_meta_data ON lead_meta_data.lead_id = l.id + ", $sort_field); + $is_numeric_sort = $entry_meta[$sort_field]['is_numeric']; + $sort_field_is_entry_meta = true; + } else { + $db_columns = self::get_lead_db_columns(); + if ($sort_field != "date_created" && false === in_array($sort_field, $db_columns)) + $sort_field = "date_created"; + } + + if($sort_field_is_entry_meta){ + $orderby = $is_numeric_sort ? "ORDER BY ($sort_field+0) $sort_direction" : "ORDER BY $sort_field $sort_direction"; + } else { + $orderby = $is_numeric_sort ? "ORDER BY (l.$sort_field+0) $sort_direction" : "ORDER BY l.$sort_field $sort_direction"; + } + + $where = self::get_search_where($form_id, $search_criteria); + + $sql = " + SELECT filtered.sort, l.*, d.field_number, d.value + FROM $lead_table_name l + INNER JOIN $lead_detail_table_name d ON d.lead_id = l.id + INNER JOIN + ( + SELECT @rownum:=@rownum + 1 as sort, id + FROM + ( + SELECT distinct l.id + FROM $lead_table_name l + INNER JOIN $lead_detail_table_name d ON d.lead_id = l.id + $entry_meta_sql_join + $where + $orderby + LIMIT $offset,$page_size + ) page + ) filtered ON filtered.id = l.id + + ORDER BY filtered.sort"; + + return $sql; + } + + private static function get_search_where($form_id, $search_criteria){ + + global $wpdb; + $where_arr = array(); + + $field_filters_where = self::get_field_filters_where($form_id, $search_criteria); + if (!empty($field_filters_where)) + $where_arr[]=$field_filters_where; + + $info_search_where = self::get_info_search_where($search_criteria); + + if(!empty($info_search_where)) + $where_arr[] = $info_search_where; + + if(is_array($form_id)){ + $in_str_arr = array_fill(0, count($form_id), '%s'); + $in_str = esc_sql(join(",", $in_str_arr)); + $form_id_where = $wpdb->prepare("l.form_id IN ($in_str)", $form_id); + } else { + $form_id_where = $form_id > 0 ? $wpdb->prepare("l.form_id=%d", $form_id) : ""; + } + + $search_operator = self::get_search_operator($search_criteria); + $where = empty($where_arr) ? "" : "(" . join( " $search_operator ", $where_arr) . ")" ; + + $date_range_where = self::get_date_range_where($search_criteria); + + $where_and_clause_arr = array(); + if(!empty($date_range_where)) + $where_and_clause_arr[] = $date_range_where; + + if(!empty($form_id_where)) + $where_and_clause_arr[] = $form_id_where; + + $status_where = isset($search_criteria["status"]) ? $wpdb->prepare("l.status = %s", $search_criteria["status"]) : ""; + if(!empty($status_where)) + $where_and_clause_arr[] = $status_where; + + $where_and_clause = join(" AND ", $where_and_clause_arr); + + if(!empty($where_and_clause)) + $where_and_clause = "(" . $where_and_clause . ")"; + + $where_parts = array(); + if(!empty($where)) + $where_parts[] = $where; + if(!empty($where_and_clause)) + $where_parts[] = $where_and_clause; + + $where = join(" AND ", $where_parts); + + if(!empty($where)) + $where = "WHERE " . $where; + + return $where; + } + + private static function get_field_filters_where($form_id, $search_criteria) { + global $wpdb; + + $field_filters = rgar($search_criteria, "field_filters"); + + $search_operator = self::get_search_operator($search_criteria); + + if(empty($field_filters)) + return false; + + unset($field_filters["mode"]); + + $sql_array = array(); + $lead_details_table_name = GFFormsModel::get_lead_details_table_name(); + $lead_meta_table_name = GFFormsModel::get_lead_meta_table_name(); + if(is_array($form_id)){ + $in_str_arr = array_fill(0, count($form_id), '%s'); + $in_str = esc_sql(join(",", $in_str_arr)); + $form_id_where = $wpdb->prepare("AND form_id IN ($in_str)", $form_id); + } else { + $form_id_where = $form_id > 0 ? $wpdb->prepare("AND form_id=%d", $form_id) : ""; + } + $info_column_keys = self::get_lead_db_columns(); + $entry_meta = self::get_entry_meta(is_array($form_id) ? 0 : $form_id); + array_push($info_column_keys, "id"); + foreach ($field_filters as $search) { + + $key = rgar($search, "key"); + if("entry_id" === $key) + $key = "id"; + if(in_array($key, $info_column_keys)) + continue; + + $val = rgar($search, "value"); + $operator = isset($search["operator"]) ? strtolower($search["operator"]) : "="; + if("is" == $operator) + $operator = "="; + if("isnot" == $operator) + $operator = "<>"; + if("contains" == $operator) + $operator = "like"; + $search_term = "like" == $operator ? "%$val%" : $val; + + $search_type = rgar($search, "type"); + if(empty($search_type)){ + if(empty($key)){ + $search_type = "global"; + } elseif (is_numeric($key)){ + $search_type = "field"; + } elseif(isset($entry_meta[$key])){ + $search_type = "meta"; + } else { + $search_type = "global"; + } + } + + switch ($search_type) { + case "field": + $upper_field_number_limit = (string)(int)$key === $key ? (float)$key + 0.9999 : (float)$key + 0.0001; + /* doesn't support "<>" for checkboxes */ + $field_query = $wpdb->prepare("l.id IN + ( + SELECT + lead_id + from $lead_details_table_name + WHERE (field_number BETWEEN %s AND %s AND value $operator %s) + $form_id_where + ) + ", (float)$key - 0.0001, $upper_field_number_limit, $search_term); + if(empty($val) || "%%" === $val || "<>" === $operator){ + $skipped_field_query = $wpdb->prepare("l.id NOT IN + ( + SELECT + lead_id + from $lead_details_table_name + WHERE (field_number BETWEEN %s AND %s) + $form_id_where + ) + ", (float)$key - 0.0001, $upper_field_number_limit, $search_term); + $field_query = "(" . $field_query . " OR " . $skipped_field_query . ")"; + } + + $sql_array[] = $field_query; + + /* + //supports "<>" for checkboxes but it doesn't scale + $sql_array[] = $wpdb->prepare("l.id IN + (SELECT lead_id + FROM + ( + SELECT lead_id, value + FROM $lead_details_table_name + WHERE form_id = %d + AND (field_number BETWEEN %s AND %s) + GROUP BY lead_id + HAVING value $operator %s + ) ld + ) + ", $form_id, (float)$key - 0.0001, $upper_field_number_limit, $val ); + */ + break; + case "global": + + $sql_array[] = $wpdb->prepare("value $operator %s", $search_term); + break; + case "meta": + /* doesn't support "<>" for multiple values of the same key */ + + $meta = rgar($entry_meta, $key); + $placeholder = rgar($meta, "is_numeric") ? "%s" : "%s"; + $search_term = "like" == $operator ? "%$val%" : $val; + $sql_array[] = $wpdb->prepare("l.id IN + ( + SELECT + lead_id + FROM $lead_meta_table_name + WHERE meta_key=%s AND meta_value $operator $placeholder + $form_id_where + ) + ", $search["key"], $search_term); + break; + + } + + } + + $sql = empty($sql_array) ? "" : join(" " . $search_operator . " ", $sql_array); + + return $sql; + } + + private static function get_date_range_where($search_criteria) { + global $wpdb; + + if(isset($search_criteria["start_date"])) + $where_array[] = $wpdb->prepare("datediff(date_created, %s) >= 0", $search_criteria["start_date"]); + if(isset($search_criteria["end_date"])) + $where_array[] = $wpdb->prepare("datediff(date_created, %s) <= 0", $search_criteria["end_date"]); + + $sql = empty($where_array) ? "" : "(" . join(" AND ", $where_array) . ")"; + + return $sql; + } + + private static function get_search_operator($search_criteria){ + if(!isset($search_criteria["field_filters"])) + return ""; + $field_filters = $search_criteria["field_filters"]; + + $search_mode = isset($field_filters["mode"]) ? strtolower($field_filters["mode"]) : "all"; + + return strtolower($search_mode) == "any" ? "OR" : "AND"; + } + + private static function get_lead_db_columns(){ + return array("id", "form_id", "post_id", "date_created", "is_starred", "is_read", "ip", "source_url", "user_agent", "currency", "payment_status", "payment_date", "payment_amount", "transaction_id", "is_fulfilled", "created_by", "transaction_type", "status"); + } + + private static function get_info_search_where($search_criteria) { + global $wpdb; + + $field_filters = rgar($search_criteria, "field_filters"); + $search_operator = self::get_search_operator($search_criteria); + + if(empty($field_filters)) + return; + + unset($field_filters["mode"]); + + $info_column_keys = self::get_lead_db_columns(); + array_push($info_column_keys, "id"); + $int_columns = array("id", "post_id", "is_starred", "is_read", "is_fulfilled"); + $where_array = array(); + foreach ($field_filters as $filter) { + $key = strtolower(rgar($filter, "key")); + if(!in_array($key, $info_column_keys)) + continue; + if("entry_id" === $key) + $key = "id"; + + $operator = isset($filter["operator"]) ? strtolower($filter["operator"]) : "="; + + $value = rgar($filter, "value"); + + if("is" == $operator) + $operator = "="; + if("isnot" == $operator) + $operator = "<>"; + if("contains" == $operator) + $operator = "like"; + $search_term = "like" == $operator ? "%value%" : $value; + if("date_created" == $key && "=" === $operator){ + $where_array[] = $wpdb->prepare("(datediff(date_created, %s) >= 0 AND datediff(date_created, %s) <= 0)", $search_term, $search_term); + }else if(in_array($key, $int_columns)){ + $where_array[] = $wpdb->prepare("l.{$key} $operator %d", $search_term); + } else { + $where_array[] = $wpdb->prepare("l.{$key} $operator %s", $search_term); + } + + } + + + $sql = empty($where_array) ? "" : join(" $search_operator ", $where_array); + + return $sql; + } + + public static function count_search_leads($form_id, $search_criteria = array()) { + global $wpdb; + + $detail_table_name = GFFormsModel::get_lead_details_table_name(); + $lead_table_name = GFFormsModel::get_lead_table_name(); + + $where = self::get_search_where($form_id, $search_criteria); + + $sql = "SELECT count(distinct l.id) + FROM $lead_table_name l + INNER JOIN $detail_table_name ld ON l.id = ld.lead_id + $where + "; + + return $wpdb->get_var($sql); + } + + public static function get_lead_count_all_forms($status='active'){ + global $wpdb; + + $detail_table_name = self::get_lead_details_table_name(); + $lead_table_name = self::get_lead_table_name(); + + $sql = "SELECT count(id) + FROM $lead_table_name + WHERE status='{$status}'"; + + return $wpdb->get_var($sql); + } + + public static function dbDelta($sql){ + global $wpdb; + + require_once(ABSPATH . '/wp-admin/includes/upgrade.php'); + + //Fixes issue with dbDelta lower-casing table names, which cause problems on case sensitive DB servers. + add_filter( 'dbdelta_create_queries', array("GFForms", "dbdelta_fix_case")); + + dbDelta($sql); + + remove_filter('dbdelta_create_queries', array("GFForms", "dbdelta_fix_case")); + } + + public static function get_db_charset(){ + global $wpdb; + + if ( ! empty($wpdb->charset) ) + $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; + + if ( ! empty($wpdb->collate) ) + $charset_collate .= " COLLATE $wpdb->collate"; + + return $charset_collate; + } +} + +class RGFormsModel extends GFFormsModel { } + +global $_gform_lead_meta; +$_gform_lead_meta = array(); + +//functions to handle lead meta +function gform_get_meta($entry_id, $meta_key){ + global $wpdb, $_gform_lead_meta; + + //get from cache if available + $cache_key = $entry_id . "_" . $meta_key; + if(array_key_exists($cache_key, $_gform_lead_meta)) + return $_gform_lead_meta[$cache_key]; + + $table_name = RGFormsModel::get_lead_meta_table_name(); + $results = $wpdb->get_results($wpdb->prepare("SELECT meta_value FROM {$table_name} WHERE lead_id=%d AND meta_key=%s", $entry_id, $meta_key)); + $value = isset($results[0]) ? $results[0]->meta_value : null; + $meta_value = $value == null ? false : maybe_unserialize($value); + $_gform_lead_meta[$cache_key] = $meta_value; + return $meta_value; +} + +function gform_get_meta_values_for_entries($entry_ids, $meta_keys){ + global $wpdb; + + if (empty($meta_keys) || empty($entry_ids)) + return array(); + + $table_name = RGFormsModel::get_lead_meta_table_name(); + $meta_value_array = array(); + $select_meta_keys = join(",", $meta_keys); + $meta_key_select_array = array(); + + foreach($meta_keys as $meta_key){ + $meta_key_select_array[] = "max(case when meta_key = '$meta_key' then meta_value end) as $meta_key"; + } + + $entry_ids_str = join(",", $entry_ids); + + $meta_key_select = join(",", $meta_key_select_array); + + $sql_query = " SELECT + lead_id, $meta_key_select + FROM $table_name + WHERE lead_id IN ($entry_ids_str) + GROUP BY lead_id"; + + $results = $wpdb->get_results($sql_query); + + foreach($results as $result){ + foreach($meta_keys as $meta_key){ + $result->$meta_key = $result->$meta_key == null ? false : maybe_unserialize($result->$meta_key); + } + } + + $meta_value_array = $results; + return $meta_value_array; +} + +function gform_update_meta($entry_id, $meta_key, $meta_value){ + global $wpdb, $_gform_lead_meta; + $table_name = RGFormsModel::get_lead_meta_table_name(); + if (false === $meta_value) + $meta_value = "0"; + $meta_value = maybe_serialize($meta_value); + $meta_exists = gform_get_meta($entry_id, $meta_key) !== false; + if($meta_exists){ + $wpdb->update($table_name, array("meta_value" => $meta_value), array("lead_id" => $entry_id, "meta_key" => $meta_key),array("%s"), array("%d", "%s")); + } + else{ + $lead_table_name = RGFormsModel::get_lead_table_name(); + $form_id = $wpdb->get_var($wpdb->prepare("SELECT form_id from $lead_table_name WHERE id=%d", $entry_id)); + $wpdb->insert($table_name, array("form_id" => $form_id, "lead_id" => $entry_id, "meta_key" => $meta_key, "meta_value" => $meta_value), array("%d", "%d", "%s", "%s")); + } + + //updates cache + $cache_key = $entry_id . "_" . $meta_key; + if(array_key_exists($cache_key, $_gform_lead_meta)) + $_gform_lead_meta[$cache_key] = maybe_unserialize($meta_value); +} + +function gform_delete_meta($entry_id, $meta_key=""){ + global $wpdb, $_gform_lead_meta; + $table_name = RGFormsModel::get_lead_meta_table_name(); + $meta_filter = empty($meta_key) ? "" : $wpdb->prepare("AND meta_key=%s", $meta_key); + + $wpdb->query($wpdb->prepare("DELETE FROM {$table_name} WHERE lead_id=%d {$meta_filter}", $entry_id)); + + //clears cache. + $_gform_lead_meta = array(); +} + diff --git a/src/wp-content/plugins/gravityforms/gravityforms.php b/src/wp-content/plugins/gravityforms/gravityforms.php new file mode 100644 index 0000000..4a1c8da --- /dev/null +++ b/src/wp-content/plugins/gravityforms/gravityforms.php @@ -0,0 +1,2563 @@ +=')); + +if(!defined("GRAVITY_MANAGER_URL")) + define("GRAVITY_MANAGER_URL", "http://www.gravityhelp.com/wp-content/plugins/gravitymanager"); + +require_once( plugin_dir_path( __FILE__ ). '/common.php'); +require_once( plugin_dir_path( __FILE__ ). '/forms_model.php'); +require_once( plugin_dir_path( __FILE__ ). '/widget.php'); +require_once( plugin_dir_path( __FILE__ ) . '/includes/api.php'); +require_once( plugin_dir_path( __FILE__ ) . '/includes/webapi/webapi.php'); + +// GFCommon::$version is deprecated, set it to current version for backwards compat +GFCommon::$version = GFForms::$version; + +add_action('init', array('RGForms', 'init')); +add_action('wp', array('RGForms', 'maybe_process_form'), 9); +add_action('wp', array('RGForms', 'process_exterior_pages')); +add_filter('upgrader_pre_install', array("GFForms", 'validate_upgrade'), 10, 2); + +add_filter('user_has_cap', array("RGForms", "user_has_cap"), 10, 3); + +//Hooks for no-conflict functionality +if(is_admin() && (RGForms::is_gravity_page() || RGForms::is_gravity_ajax_action())){ + add_action("wp_print_scripts", array("RGForms", "no_conflict_mode_script"), 1000); + add_action("admin_print_footer_scripts", array("RGForms", "no_conflict_mode_script"), 9); + + add_action("wp_print_styles", array("RGForms", "no_conflict_mode_style"), 1000); + add_action("admin_print_styles", array("RGForms", "no_conflict_mode_style"), 1); + add_action("admin_print_footer_scripts", array("RGForms", "no_conflict_mode_style"), 1); + add_action("admin_footer", array("RGForms", "no_conflict_mode_style"), 1); +} + +class GFForms { + + public static $version = '1.8.3'; + + public static function has_members_plugin(){ + return function_exists( 'members_get_capabilities' ); + } + + //Plugin starting point. Will load appropriate files + public static function init(){ + + //initializing translations + load_plugin_textdomain( 'gravityforms', false, '/gravityforms/languages' ); + + add_filter("gform_logging_supported", array("RGForms", "set_logging_supported")); + add_action( 'admin_head', array( 'GFCommon', 'maybe_output_gf_vars' ) ); + + self::register_scripts(); + + //Setting up Gravity Forms + self::setup(); + + if(IS_ADMIN){ + + global $current_user; + + //Members plugin integration. Adding Gravity Forms roles to the checkbox list + if (self::has_members_plugin()) + add_filter('members_get_capabilities', array("RGForms", "members_get_capabilities")); + + if(is_multisite()) { + add_filter('wpmu_drop_tables', array('GFFormsModel', 'mu_drop_tables')); + } + + add_action('admin_enqueue_scripts', array('GFForms', 'enqueue_admin_scripts')); + + //Loading Gravity Forms if user has access to any functionality + if(GFCommon::current_user_can_any(GFCommon::all_caps())) + { + require_once(GFCommon::get_base_path() . "/export.php"); + GFExport::maybe_export(); + + //imports theme forms if configured to be automatic imported + self::maybe_import_theme_forms(); + + //creates the "Forms" left menu + add_action('admin_menu', array('RGForms', 'create_menu')); + + if(GF_SUPPORTED_WP_VERSION){ + + add_action('admin_footer', array('RGForms', 'check_upload_folder')); + add_action('wp_dashboard_setup', array('RGForms', 'dashboard_setup')); + + // Support modifying the admin page title for settings + add_filter( 'admin_title' , array( __class__, 'modify_admin_title' ), 10, 2 ); + + //Adding "embed form" button + add_action('media_buttons', array('RGForms', 'add_form_button'), 20); + + // Add "Form" to the "New" menu in WP admin bar + add_action( 'wp_before_admin_bar_render', array('GFForms', 'admin_bar') ); + + //Plugin update actions + add_filter("transient_update_plugins", array('RGForms', 'check_update')); + add_filter("site_transient_update_plugins", array('RGForms', 'check_update')); + + require_once(GFCommon::get_base_path() . "/includes/locking/locking.php"); + + if(self::page_supports_add_form_button()){ + add_action('admin_footer', array('RGForms', 'add_mce_popup')); + } + + if(self::is_gravity_page()){ + require_once(GFCommon::get_base_path() . "/tooltips.php"); + add_action("admin_print_scripts", array('RGForms', 'print_scripts')); + } + else if(RG_CURRENT_PAGE == 'media-upload.php'){ + require_once(GFCommon::get_base_path() . "/entry_list.php"); + } + else if(in_array(RG_CURRENT_PAGE, array("admin.php", "admin-ajax.php"))){ + + add_action('wp_ajax_rg_save_form', array('RGForms', 'save_form')); + add_action('wp_ajax_rg_change_input_type', array('RGForms', 'change_input_type')); + add_action('wp_ajax_rg_add_field', array('RGForms', 'add_field')); + add_action('wp_ajax_rg_duplicate_field', array('RGForms', 'duplicate_field')); + add_action('wp_ajax_rg_delete_field', array('RGForms', 'delete_field')); + add_action('wp_ajax_rg_delete_file', array('RGForms', 'delete_file')); + add_action('wp_ajax_rg_select_export_form', array('RGForms', 'select_export_form')); + add_action('wp_ajax_rg_start_export', array('RGForms', 'start_export')); + add_action('wp_ajax_gf_upgrade_license', array('RGForms', 'upgrade_license')); + add_action('wp_ajax_gf_delete_custom_choice', array('RGForms', 'delete_custom_choice')); + add_action('wp_ajax_gf_save_custom_choice', array('RGForms', 'save_custom_choice')); + add_action('wp_ajax_gf_get_post_categories', array('RGForms', 'get_post_category_values')); + add_action('wp_ajax_gf_get_notification_post_categories', array('RGForms', 'get_notification_post_category_values')); + add_action('wp_ajax_gf_save_confirmation', array('RGForms', 'save_confirmation')); + add_action('wp_ajax_gf_delete_confirmation', array('RGForms', 'delete_confirmation')); + add_action('wp_ajax_gf_save_new_form', array('RGForms', 'save_new_form')); + + //entry list ajax operations + add_action('wp_ajax_rg_update_lead_property', array('RGForms', 'update_lead_property')); + add_action('wp_ajax_delete-gf_entry', array('RGForms', 'update_lead_status')); + + //form list ajax operations + add_action('wp_ajax_rg_update_form_active', array('RGForms', 'update_form_active')); + + //notification list ajax operations + add_action('wp_ajax_rg_update_notification_active', array('RGForms', 'update_notification_active')); + + //confirmation list ajax operations + add_action('wp_ajax_rg_update_confirmation_active', array('RGForms', 'update_confirmation_active')); + + //dynamic captcha image + add_action('wp_ajax_rg_captcha_image', array('RGForms', 'captcha_image')); + + //dashboard message "dismiss upgrade" link + add_action("wp_ajax_rg_dismiss_upgrade", array('RGForms', 'dashboard_dismiss_upgrade')); + + // entry detail: resend notifications + add_action("wp_ajax_gf_resend_notifications", array('RGForms', 'resend_notifications')); + + } + + add_filter("plugins_api", array("RGForms", "get_addon_info"), 100, 3); + add_action('after_plugin_row_gravityforms/gravityforms.php', array('RGForms', 'plugin_row') ); + add_action('install_plugins_pre_plugin-information', array('RGForms', 'display_changelog')); + add_filter('plugin_action_links', array('RGForms', 'plugin_settings_link'),10,2); + } + } + + } + else{ + add_action('wp_enqueue_scripts', array('RGForms', 'enqueue_scripts')); + add_action('wp', array('RGForms', 'ajax_parse_request'), 10); + } + + add_shortcode('gravityform', array('RGForms', 'parse_shortcode')); + add_shortcode('gravityforms', array('RGForms', 'parse_shortcode')); + + // ManageWP premium update filters + add_filter( 'mwp_premium_update_notification', array('RGForms', 'premium_update_push') ); + add_filter( 'mwp_premium_perform_update', array('RGForms', 'premium_update') ); + + // Push Gravity Forms to the top of the list of plugins to make sure it's loaded before any add-ons + add_action("activated_plugin", array("GFForms", "load_first")); + } + + public static function load_first() { + $plugin_path = basename(dirname(__FILE__)) . "/gravityforms.php"; + $active_plugins = get_option('active_plugins'); + $key = array_search($plugin_path, $active_plugins); + if ($key > 0) { + array_splice($active_plugins, $key, 1); + array_unshift($active_plugins, $plugin_path); + update_option('active_plugins', $active_plugins); + } + } + + public static function set_logging_supported($plugins){ + $plugins["gravityforms"] = "Gravity Forms Core"; + return $plugins; + } + + public static function maybe_process_form(){ + + $form_id = isset($_POST["gform_submit"]) ? $_POST["gform_submit"] : 0; + if($form_id){ + $form_info = RGFormsModel::get_form($form_id); + $is_valid_form = $form_info && $form_info->is_active; + + if($is_valid_form){ + require_once(GFCommon::get_base_path() . "/form_display.php"); + GFFormDisplay::process_form($form_id); + } + } + } + + public static function process_exterior_pages(){ + if(rgempty("gf_page", $_GET)) + return; + + if("upload" === rgget("gf_page")){ + require_once(GFCommon::get_base_path() . "/includes/upload.php"); + exit(); + } + + + //ensure users are logged in + if(!is_user_logged_in()) + auth_redirect(); + + switch(rgget("gf_page")){ + case "preview": + require_once(GFCommon::get_base_path() . "/preview.php"); + break; + + case "print-entry" : + require_once(GFCommon::get_base_path() . "/print-entry.php"); + break; + + case "select_columns" : + require_once(GFCommon::get_base_path() . "/select_columns.php"); + break; + } + exit(); + } + + public static function check_update($update_plugins_option){ + if(!class_exists("GFCommon")) + require_once("common.php"); + + return GFCommon::check_update($update_plugins_option, true); + } + + //Creates or updates database tables. Will only run when version changes + public static function setup($force_setup = false){ + global $wpdb; + + $has_version_changed = get_option("rg_form_version") != GFCommon::$version; + if($has_version_changed){ + //Making sure version has really changed. Gets around aggressive caching issue on some sites that cause setup to run multiple times. + $has_version_changed = self::get_wp_option("rg_form_version") != GFCommon::$version; + } + + if($has_version_changed || $force_setup){ + + $blog_id = get_current_blog_id(); + + GFCommon::log_debug("Blog {$blog_id} - Beginning of setup. From version " . get_option("rg_form_version") . " to version " . GFCommon::$version); + + //setting up database structure + self::setup_database(); + + //auto-setting and auto-validating license key based on value configured via the GF_LICENSE_KEY constant or the gf_license_key variable + //auto-populating reCAPTCHA keys base on constant + self::maybe_populate_keys(); + + //Auto-importing forms based on GF_IMPORT_FILE AND GF_THEME_IMPORT_FILE + self::maybe_import_forms(); + + //The format the version info changed to JSON. Make sure the old format is not cached. + if(version_compare(get_option("rg_form_version"), "1.8.0.3", "<" )){ + delete_transient("gform_update_info"); + } + + update_option("rg_form_version", GFCommon::$version); + + GFCommon::log_debug("Blog {$blog_id} - End of setup."); + + } + } + + + public static function setup_database() + { + global $wpdb; + + require_once(ABSPATH . '/wp-admin/includes/upgrade.php'); + + if (!empty($wpdb->charset)) + $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; + if (!empty($wpdb->collate)) + $charset_collate .= " COLLATE $wpdb->collate"; + + //Fixes issue with dbDelta lower-casing table names, which cause problems on case sensitive DB servers. + add_filter('dbdelta_create_queries', array("RGForms", "dbdelta_fix_case")); + + //------ FORM ----------------------------------------------- + $form_table_name = RGFormsModel::get_form_table_name(); + $sql = "CREATE TABLE " . $form_table_name . " ( + id mediumint(8) unsigned not null auto_increment, + title varchar(150) not null, + date_created datetime not null, + is_active tinyint(1) not null default 1, + is_trash tinyint(1) not null default 0, + PRIMARY KEY (id) + ) $charset_collate;"; + dbDelta($sql); + + //droping table that was created by mistake in version 1.6.3.2 + $wpdb->query("DROP TABLE IF EXISTS A" . $form_table_name); + + //------ META ----------------------------------------------- + $meta_table_name = RGFormsModel::get_meta_table_name(); + $sql = "CREATE TABLE " . $meta_table_name . " ( + form_id mediumint(8) unsigned not null, + display_meta longtext, + entries_grid_meta longtext, + confirmations longtext, + notifications longtext, + PRIMARY KEY (form_id) + ) $charset_collate;"; + dbDelta($sql); + + //droping outdated form_id index (if one exists) + self::drop_index($meta_table_name, 'form_id'); + + //------ FORM VIEW ----------------------------------------------- + $form_view_table_name = RGFormsModel::get_form_view_table_name(); + $sql = "CREATE TABLE " . $form_view_table_name . " ( + id bigint(20) unsigned not null auto_increment, + form_id mediumint(8) unsigned not null, + date_created datetime not null, + ip char(15), + count mediumint(8) unsigned not null default 1, + PRIMARY KEY (id), + KEY form_id (form_id) + ) $charset_collate;"; + dbDelta($sql); + + //------ LEAD ----------------------------------------------- + $lead_table_name = RGFormsModel::get_lead_table_name(); + $sql = "CREATE TABLE " . $lead_table_name . " ( + id int(10) unsigned not null auto_increment, + form_id mediumint(8) unsigned not null, + post_id bigint(20) unsigned, + date_created datetime not null, + is_starred tinyint(1) not null default 0, + is_read tinyint(1) not null default 0, + ip varchar(39) not null, + source_url varchar(200) not null default '', + user_agent varchar(250) not null default '', + currency varchar(5), + payment_status varchar(15), + payment_date datetime, + payment_amount decimal(19,2), + payment_method varchar(30), + transaction_id varchar(50), + is_fulfilled tinyint(1), + created_by bigint(20) unsigned, + transaction_type tinyint(1), + status varchar(20) not null default 'active', + PRIMARY KEY (id), + KEY form_id (form_id), + KEY status (status) + ) $charset_collate;"; + dbDelta($sql); + + //------ LEAD NOTES ------------------------------------------ + $lead_notes_table_name = RGFormsModel::get_lead_notes_table_name(); + $sql = "CREATE TABLE " . $lead_notes_table_name . " ( + id int(10) unsigned not null auto_increment, + lead_id int(10) unsigned not null, + user_name varchar(250), + user_id bigint(20), + date_created datetime not null, + value longtext, + PRIMARY KEY (id), + KEY lead_id (lead_id), + KEY lead_user_key (lead_id,user_id) + ) $charset_collate;"; + dbDelta($sql); + + //------ LEAD DETAIL ----------------------------------------- + $lead_detail_table_name = RGFormsModel::get_lead_details_table_name(); + $sql = "CREATE TABLE " . $lead_detail_table_name . " ( + id bigint(20) unsigned not null auto_increment, + lead_id int(10) unsigned not null, + form_id mediumint(8) unsigned not null, + field_number float not null, + value varchar(" . GFORMS_MAX_FIELD_LENGTH . "), + PRIMARY KEY (id), + KEY form_id (form_id), + KEY lead_id (lead_id), + KEY lead_field_number (lead_id,field_number) + ) $charset_collate;"; + dbDelta($sql); + + //------ LEAD DETAIL LONG ----------------------------------- + $lead_detail_long_table_name = RGFormsModel::get_lead_details_long_table_name(); + + $sql = "CREATE TABLE " . $lead_detail_long_table_name . " ( + lead_detail_id bigint(20) unsigned not null, + value longtext, + PRIMARY KEY (lead_detail_id) + ) $charset_collate;"; + dbDelta($sql); + + //droping outdated form_id index (if one exists) + self::drop_index($lead_detail_long_table_name, 'lead_detail_key'); + + //------ LEAD META ----------------------------------- + $lead_meta_table_name = RGFormsModel::get_lead_meta_table_name(); + $sql = "CREATE TABLE " . $lead_meta_table_name . " ( + id bigint(20) unsigned not null auto_increment, + form_id mediumint(8) unsigned not null default 0, + lead_id bigint(20) unsigned not null, + meta_key varchar(255), + meta_value longtext, + PRIMARY KEY (id), + KEY meta_key (meta_key), + KEY lead_id (lead_id), + KEY form_id_meta_key (form_id,meta_key) + ) $charset_collate;"; + dbDelta($sql); + + remove_filter('dbdelta_create_queries', array("RGForms", "dbdelta_fix_case")); + + //fix form_id value needed to update from version 1.6.11 + self::fix_lead_meta_form_id_values(); + + //fix checkbox value. needed for version 1.0 and below but won't hurt for higher versions + self::fix_checkbox_value(); + + //fix leading and trailing spaces in Form objects and entry values from versions prior to 1.8.2 + if(version_compare(get_option("rg_form_version"), "1.8.2", "<=" )){ + //uncomment to test + //self::fix_leading_and_trailing_spaces(); + } + + } + + private static function fix_leading_and_trailing_spaces(){ + + global $wpdb; + + $meta_table_name = GFFormsModel::get_meta_table_name(); + $lead_details_table = GFFormsModel::get_lead_details_table_name(); + $lead_details_long_table = GFFormsModel::get_lead_details_long_table_name(); + + //fast but doesn't allow for the gform_trim_input_value filter + //$result = $wpdb->query("UPDATE $lead_details_table SET value = TRIM(value)"); + //$result = $wpdb->query("UPDATE $lead_details_long_table SET value = TRIM(value)"); + + + $results = $wpdb->get_results("SELECT form_id, display_meta FROM {$meta_table_name}", ARRAY_A); + + foreach ($results as &$result) { + $form_id = $result["form_id"]; + + $form = GFFormsModel::unserialize($result["display_meta"]); + $form_updated = false; + if(isset($form["fields"]) && is_array($form["fields"])){ + $fields_to_update = array(); + foreach($form["fields"] as &$field){ + $trim_value = apply_filters("gform_trim_input_value", true, $form_id, $field); + if(!$trim_value){ + continue; + } + + if(isset($field["label"]) && $field["label"] != trim($field["label"])){ + $field["label"] = trim($field["label"]); + $form_updated = true; + } + if(isset($field["choices"]) && is_array($field["choices"])){ + foreach($field["choices"] as &$choice){ + if(isset($choice["text"]) && $choice["text"] != trim($choice["text"])){ + $choice["text"] = trim($choice["text"]); + $form_updated = true; + } + if(isset($choice["value"]) && $choice["value"] != trim($choice["value"])){ + $choice["value"] = trim($choice["value"]); + $form_updated = true; + } + } + } + if(isset($field["inputs"]) && is_array($field["inputs"])){ + foreach($field["inputs"] as &$input){ + if(isset($input["label"]) && $input["label"] != trim($input["label"])){ + $input["label"] = trim($input["label"]); + $form_updated = true; + } + } + } + $field_id = (int)$field["id"]; + $field_number_min = $field_id - 0.001; + $field_number_max = $field_id + 0.999; + $fields_to_update[] = sprintf("field_number BETWEEN %s AND %s", $field_number_min, $field_number_max); + } + + + if(!empty($fields_to_update)){ + $fields_to_update_str = join(" OR ", $fields_to_update); + + //slow - may cause timeouts on sites with high volume of entries + $result = $wpdb->query("UPDATE $lead_details_table SET value = TRIM(value) WHERE form_id = $form_id AND ($fields_to_update_str)"); + $result = $wpdb->query("UPDATE $lead_details_long_table SET value = TRIM(value) WHERE lead_detail_id IN (SELECT id FROM $lead_details_table WHERE form_id = $form_id AND ($fields_to_update_str))"); + } + + } + if($form_updated){ + GFFormsModel::update_form_meta($form_id, $form); + } + } + + return $results; + } + + private static function maybe_import_forms() + { + if (defined("GF_IMPORT_FILE") && !get_option("gf_imported_file")) { + + require_once(GFCommon::get_base_path() . "/export.php"); + + GFExport::import_file(GF_IMPORT_FILE); + + update_option("gf_imported_file", true); + } + } + + private static function maybe_import_theme_forms(){ + + //Import theme specific forms if configured. Will only import forms once per theme. + if(defined("GF_THEME_IMPORT_FILE")){ + $themes = get_option("gf_imported_theme_file"); + if(!is_array($themes)) + $themes = array(); + + //if current theme has already imported it's forms, don't import again + $theme = get_template(); + if(!isset($themes[$theme])){ + + require_once(GFCommon::get_base_path() . "/export.php"); + + //importing forms + GFExport::import_file(get_stylesheet_directory() . "/" . GF_THEME_IMPORT_FILE); + + //adding current theme to the list of imported themes. So that forms are not imported again for it. + $themes[$theme] = true; + update_option("gf_imported_theme_file", $themes); + } + } + + } + + private static function maybe_populate_keys(){ + + global $gf_license_key; + $license_key = defined("GF_LICENSE_KEY") && empty($gf_license_key) ? GF_LICENSE_KEY : $gf_license_key; + if(!empty($license_key)){ + RGFormsModel::save_key($license_key); + GFCommon::cache_remote_message(); + GFCommon::get_version_info(false); + } + + //auto-setting recaptcha keys based on value configured via the constant or global variable + global $gf_recaptcha_public_key, $gf_recaptcha_private_key; + $private_key = defined("GF_RECAPTCHA_PRIVATE_KEY") && empty($gf_recaptcha_private_key) ? GF_RECAPTCHA_PRIVATE_KEY : $gf_recaptcha_private_key; + if(!empty($private_key)) + update_option("rg_gforms_captcha_private_key", $private_key); + + $public_key = defined("GF_RECAPTCHA_PUBLIC_KEY") && empty($gf_recaptcha_public_key) ? GF_RECAPTCHA_PUBLIC_KEY : $gf_recaptcha_public_key; + if(!empty($public_key)) + update_option("rg_gforms_captcha_public_key", $public_key); + + } + + public static function get_wp_option($option_name){ + global $wpdb; + return $wpdb->get_var($wpdb->prepare("SELECT option_value FROM {$wpdb->prefix}options WHERE option_name=%s", $option_name)); + } + + //Changes form_id values from default value "0" to the correct value. Needed when upgrading users from 1.6.11 + private static function fix_lead_meta_form_id_values(){ + global $wpdb; + + $lead_meta_table_name = RGFormsModel::get_lead_meta_table_name(); + $lead_table_name = RGFormsModel::get_lead_table_name(); + + $sql = "UPDATE $lead_meta_table_name lm,$lead_table_name l SET lm.form_id = l.form_id + WHERE lm.form_id=0 AND lm.lead_id = l.id; + "; + $wpdb->get_results($sql); + + } + + public static function dbdelta_fix_case($cqueries){ + foreach ($cqueries as $table => $qry) { + $table_name = $table; + if(preg_match("|CREATE TABLE ([^ ]*)|", $qry, $matches)){ + $query_table_name = trim($matches[1], '`' ); + + //fix table names that are different just by their casing + if(strtolower($query_table_name) == $table){ + $table_name = $query_table_name; + } + } + $queries[$table_name] = $qry; + } + return $queries; + } + + public static function no_conflict_mode_style(){ + if(!get_option("gform_enable_noconflict")) + return; + + global $wp_styles; + $wp_required_styles = array("admin-bar", "colors", "ie", "wp-admin", "editor-style"); + $gf_required_styles = array( + "common" => array(), + "gf_edit_forms" => array("thickbox", "editor-buttons", "wp-jquery-ui-dialog", "media-views", "buttons", "wp-pointer" ), + "gf_edit_forms_notification" => array("thickbox", "editor-buttons", "wp-jquery-ui-dialog", "media-views", "buttons"), + "gf_new_form" => array("thickbox"), + "gf_entries" => array("thickbox"), + "gf_settings" => array(), + "gf_export" => array(), + "gf_help" => array() + ); + + self::no_conflict_mode($wp_styles, $wp_required_styles, $gf_required_styles, "styles"); + } + + + public static function no_conflict_mode_script(){ + if(!get_option("gform_enable_noconflict")) + return; + + global $wp_scripts; + + $wp_required_scripts = array("admin-bar", "common", "jquery-color", "utils"); + $gf_required_scripts = array( + "common" => array("gform_tooltip_init", "sack"), + "gf_edit_forms" => array("backbone", "editor", "gform_floatmenu", "gform_forms", "gform_form_admin", "gform_form_editor", "gform_gravityforms", "gform_json", "gform_menu", "gform_placeholder", "jquery-ui-autocomplete", "jquery-ui-core", "jquery-ui-datepicker", "jquery-ui-sortable", "jquery-ui-tabs", "json2", "media-editor", "media-models", "media-upload", "media-views", "plupload", "plupload-flash", "plupload-html4", "plupload-html5", "quicktags", "rg_currency", "thickbox", "word-count", "wp-plupload", "wpdialogs-popup", "wplink", "wp-pointer"), + "gf_edit_forms_notification" => array("editor", "word-count", "quicktags", "wpdialogs-popup", "media-upload", "wplink", "backbone", "jquery-ui-sortable", "json2", "media-editor", "media-models", "media-views", "plupload", "plupload-flash", "plupload-html4", "plupload-html5", "plupload-silverlight", "wp-plupload", "gform_placeholder", "gform_json", "jquery-ui-autocomplete"), + "gf_new_form" => array("thickbox", "jquery-ui-core", "jquery-ui-sortable", "jquery-ui-tabs", "rg_currency", "gform_gravityforms", "gform_json", "gform_form_admin" ), + "gf_entries" => array("thickbox", "gform_gravityforms", "wp-lists", "gform_json", "gform_field_filter","plupload-all"), + "gf_settings" => array(), + "gf_export" => array("gform_form_admin","jquery-ui-datepicker","gform_field_filter"), + "gf_help" => array(), + ); + + self::no_conflict_mode($wp_scripts, $wp_required_scripts, $gf_required_scripts, "scripts"); + } + + private static function no_conflict_mode(&$wp_objects, $wp_required_objects, $gf_required_objects, $type="scripts"){ + + $current_page = trim(strtolower(rgget("page"))); + if(empty($current_page)) + $current_page = trim(strtolower(rgget("gf_page"))); + if(empty($current_page)) + $current_page = RG_CURRENT_PAGE; + + $view = rgempty("view", $_GET) ? "default" : rgget("view"); + $page_objects = isset($gf_required_objects[$current_page . "_" . $view]) ? $gf_required_objects[$current_page . "_" . $view] : rgar($gf_required_objects, $current_page); + + //disable no-conflict if $page_objects is false + if($page_objects === false) + return; + + if(!is_array($page_objects)) + $page_objects = array(); + + //merging wp scripts with gravity forms scripts + $required_objects = array_merge($wp_required_objects, $gf_required_objects["common"], $page_objects); + + //allowing addons or other products to change the list of no conflict scripts + $required_objects = apply_filters("gform_noconflict_{$type}", $required_objects); + + $queue = array(); + foreach($wp_objects->queue as $object){ + if(in_array($object, $required_objects)) + $queue[] = $object; + } + $wp_objects->queue = $queue; + + $required_objects = self::add_script_dependencies($wp_objects->registered, $required_objects); + + //unregistering scripts + $registered = array(); + foreach($wp_objects->registered as $script_name => $script_registration){ + if(in_array($script_name, $required_objects)){ + $registered[$script_name] = $script_registration; + } + } + $wp_objects->registered = $registered; + } + + private static function add_script_dependencies($registered, $scripts){ + + //gets all dependent scripts linked to the $scripts array passed + do{ + $dependents = array(); + foreach($scripts as $script){ + $deps = isset($registered[$script]) && is_array($registered[$script]->deps) ? $registered[$script]->deps : array(); + foreach($deps as $dep){ + if(!in_array($dep, $scripts) && !in_array($dep, $dependents)){ + $dependents[] = $dep; + } + } + } + $scripts = array_merge($scripts, $dependents); + }while(!empty($dependents)); + + return $scripts; + } + + //Integration with ManageWP + public static function premium_update_push( $premium_update ){ + + if( !function_exists( 'get_plugin_data' ) ) + include_once( ABSPATH.'wp-admin/includes/plugin.php'); + + $update = GFCommon::get_version_info(); + if( $update["is_valid_key"] == true && version_compare(GFCommon::$version, $update["version"], '<') ){ + $gforms = get_plugin_data( __FILE__ ); + $gforms['type'] = 'plugin'; + $gforms['slug'] = 'gravityforms/gravityforms.php'; + $gforms['new_version'] = !rgempty("version", $update) ? $update['version'] : false ; + $premium_update[] = $gforms; + } + + return $premium_update; + } + + //Integration with ManageWP + public static function premium_update( $premium_update ){ + + if( !function_exists( 'get_plugin_data' ) ) + include_once( ABSPATH.'wp-admin/includes/plugin.php'); + + $update = GFCommon::get_version_info(); + if( $update["is_valid_key"] == true && version_compare(GFCommon::$version, $update["version"], '<') ){ + $gforms = get_plugin_data( __FILE__ ); + $gforms['slug'] = 'gravityforms/gravityforms.php'; // If not set by default, always pass theme template + $gforms['type'] = 'plugin'; + $gforms['url'] = !rgempty("url",$update) ? $update["url"] : false; // OR provide your own callback function for managing the update + + array_push($premium_update, $gforms); + } + return $premium_update; + } + + private static function drop_index($table, $index){ + global $wpdb; + $has_index = $wpdb->get_var("SHOW INDEX FROM {$table} WHERE Key_name='{$index}'"); + if($has_index){ + $wpdb->query("DROP INDEX {$index} ON {$table}"); + } + } + + public static function validate_upgrade($do_upgrade, $hook_extra){ + + if(rgar($hook_extra,"plugin") == "gravityforms/gravityforms.php" && !GFForms::has_database_permission($error)){ + return new WP_Error("no_db_permission", $error); + } + + return true; + } + + private static function has_database_permission(&$error){ + global $wpdb; + + $wpdb->hide_errors(); + + $has_permission = true; + + $sql = "CREATE TABLE IF NOT EXISTS {$wpdb->prefix}rg_test ( col1 int )"; + $wpdb->query($sql); + $error = "Current database user does not have necessary permissions to create tables. Gravity Forms requires that the database user has CREATE and ALTER permissions. If you need assistance in changing database user permissions, contact your hosting provider."; + if(!empty($wpdb->last_error)) + $has_permission = false; + + if($has_permission){ + $sql = "ALTER TABLE {$wpdb->prefix}rg_test ADD COLUMN a" . uniqid() ." int"; + $wpdb->query($sql); + $error = "Current database user does not have necessary permissions to modify (ALTER) tables. Gravity Forms requires that the database user has CREATE and ALTER permissions. If you need assistance in changing database user permissions, contact your hosting provider."; + if(!empty($wpdb->last_error)) + $has_permission = false; + + $sql = "DROP TABLE {$wpdb->prefix}rg_test"; + $wpdb->query($sql); + } + + $wpdb->show_errors(); + + return $has_permission; + } + + //Changes checkbox entry values from "!" to the current choice text. Neededed when upgrading users from 1.0 + private static function fix_checkbox_value(){ + global $wpdb; + + $table_name = RGFormsModel::get_lead_details_table_name(); + + $sql = "select * from $table_name where value= '!'"; + $results = $wpdb->get_results($sql); + foreach($results as $result){ + $form = RGFormsModel::get_form_meta($result->form_id); + $field = RGFormsModel::get_field($form, $result->field_number); + if($field["type"] == "checkbox"){ + $input = GFCommon::get_input($field, $result->field_number); + $wpdb->update($table_name, array("value" => $input["label"]), array("id" => $result->id)); + } + } + } + + public static function user_has_cap($all_caps, $cap, $args){ + $gf_caps = GFCommon::all_caps(); + $capability = rgar($cap, 0); + if($capability != "gform_full_access"){ + return $all_caps; + } + + if(!self::has_members_plugin()){ + //give full access to administrators if the members plugin is not installed + if(current_user_can("administrator") || is_super_admin()){ + $all_caps["gform_full_access"] = true; + } + } + else if(current_user_can("administrator")|| is_super_admin()){ + + //checking if user has any GF permission. + $has_gf_cap = false; + foreach($gf_caps as $gf_cap){ + if(rgar($all_caps, $gf_cap)) + $has_gf_cap = true; + } + + if(!$has_gf_cap){ + //give full access to administrators if none of the GF permissions are active by the Members plugin + $all_caps["gform_full_access"] = true; + } + } + + return $all_caps; + } + + //Target of Member plugin filter. Provides the plugin with Gravity Forms lists of capabilities + public static function members_get_capabilities( $caps ) { + return array_merge($caps, GFCommon::all_caps()); + } + + //Tests if the upload folder is writable and displays an error message if not + public static function check_upload_folder(){ + //check if upload folder is writable + $folder = RGFormsModel::get_upload_root(); + if(empty($folder)) + echo "
          Upload folder is not writable. Export and file upload features will not be functional.
          "; + } + + //Prints common admin scripts + public static function print_scripts(){ + wp_enqueue_script("sack"); + wp_print_scripts(); + } + + public static function is_gravity_ajax_action(){ + //Gravity Forms AJAX requests + $current_action = self::post("action"); + $gf_ajax_actions = array('rg_save_form', 'rg_change_input_type', 'rg_add_field', 'rg_duplicate_field', + 'rg_delete_field', 'rg_select_export_form', 'rg_start_export', 'gf_upgrade_license', + 'gf_delete_custom_choice', 'gf_save_custom_choice', 'gf_get_notification_post_categories', + 'rg_update_lead_property', 'delete-gf_entry', 'rg_update_form_active', 'rg_update_notification_active', + 'rg_update_confirmation_active', 'gf_resend_notifications', 'rg_dismiss_upgrade', 'gf_save_confirmation'); + + if(defined("DOING_AJAX") && DOING_AJAX && in_array($current_action, $gf_ajax_actions)) + return true; + + //not a gravity forms ajax request. + return false; + } + + //Returns true if the current page is one of Gravity Forms pages. Returns false if not + public static function is_gravity_page(){ + + //Gravity Forms pages + $current_page = trim(strtolower(self::get("page"))); + $gf_pages = array("gf_edit_forms", "gf_new_form", "gf_entries", "gf_settings", "gf_export", "gf_help"); + + return in_array($current_page, $gf_pages); + } + + //Creates "Forms" left nav + public static function create_menu(){ + + $has_full_access = current_user_can("gform_full_access"); + $min_cap = GFCommon::current_user_can_which(GFCommon::all_caps()); + if(empty($min_cap)) + $min_cap = "gform_full_access"; + + $addon_menus = array(); + $addon_menus = apply_filters("gform_addon_navigation", $addon_menus); + + $parent_menu = self::get_parent_menu($addon_menus); + + // Add a top-level left nav + $update_icon = GFCommon::has_update() && current_user_can("install_plugins") ? "1" : ""; + + add_menu_page(__('Forms', "gravityforms"), __("Forms", "gravityforms") . $update_icon , $has_full_access ? "gform_full_access" : $min_cap, $parent_menu["name"] , $parent_menu["callback"], GFCommon::get_base_url() . '/images/gravity-admin-icon.png', apply_filters("gform_menu_position", "16.9")); + + // Adding submenu pages + add_submenu_page($parent_menu["name"], __("Forms", "gravityforms"), __("Forms", "gravityforms"), $has_full_access ? "gform_full_access" : "gravityforms_edit_forms", "gf_edit_forms", array("RGForms", "forms")); + + add_submenu_page($parent_menu["name"], __("New Form", "gravityforms"), __("New Form", "gravityforms"), $has_full_access ? "gform_full_access" : "gravityforms_create_form", "gf_new_form", array("RGForms", "new_form")); + + add_submenu_page($parent_menu["name"], __("Entries", "gravityforms"), __("Entries", "gravityforms"), $has_full_access ? "gform_full_access" : "gravityforms_view_entries", "gf_entries", array("RGForms", "all_leads_page")); + + if(is_array($addon_menus)){ + foreach($addon_menus as $addon_menu) + add_submenu_page(esc_html($parent_menu["name"]), esc_html($addon_menu["label"]), esc_html($addon_menu["label"]), $has_full_access ? "gform_full_access" : $addon_menu["permission"], esc_html($addon_menu["name"]), $addon_menu["callback"]); + } + + add_submenu_page($parent_menu["name"], __("Settings", "gravityforms"), __("Settings", "gravityforms"), $has_full_access ? "gform_full_access" : "gravityforms_view_settings", "gf_settings", array("RGForms", "settings_page")); + + add_submenu_page($parent_menu["name"], __("Import/Export", "gravityforms"), __("Import/Export", "gravityforms"), $has_full_access ? "gform_full_access" : "gravityforms_export_entries", "gf_export", array("RGForms", "export_page")); + + if(current_user_can("install_plugins")){ + add_submenu_page($parent_menu["name"], __("Updates", "gravityforms"), __("Updates", "gravityforms"), $has_full_access ? "gform_full_access" : "gravityforms_view_updates", "gf_update", array("RGForms", "update_page")); + add_submenu_page($parent_menu["name"], __("Add-Ons", "gravityforms"), __("Add-Ons", "gravityforms"), $has_full_access ? "gform_full_access" : "gravityforms_view_addons", "gf_addons", array("RGForms", "addons_page")); + } + + add_submenu_page($parent_menu["name"], __("Help", "gravityforms"), __("Help", "gravityforms"), $has_full_access ? "gform_full_access" : $min_cap, "gf_help", array("RGForms", "help_page")); + + } + + //Returns the parent menu item. It needs to be the same as the first sub-menu (otherwise WP will duplicate the main menu as a sub-menu) + public static function get_parent_menu($addon_menus){ + + if(GFCommon::current_user_can_any("gravityforms_edit_forms")) + $parent = array("name" => "gf_edit_forms", "callback" => array("RGForms", "forms")); + + else if(GFCommon::current_user_can_any("gravityforms_create_form")) + $parent = array("name" => "gf_new_form", "callback" => array("RGForms", "new_form")); + + else if(GFCommon::current_user_can_any("gravityforms_view_entries")) + $parent = array("name" => "gf_entries", "callback" => array("RGForms", "all_leads_page")); + + else if(is_array($addon_menus) && sizeof($addon_menus) > 0){ + foreach($addon_menus as $addon_menu) + if(GFCommon::current_user_can_any($addon_menu["permission"])) + { + $parent = array("name" => $addon_menu["name"], "callback" => $addon_menu["callback"]); + break; + } + } + else if(GFCommon::current_user_can_any("gravityforms_view_settings")) + $parent = array("name" => "gf_settings", "callback" => array("RGForms", "settings_page")); + + else if(GFCommon::current_user_can_any("gravityforms_export_entries")) + $parent = array("name" => "gf_export", "callback" => array("RGForms", "export_page")); + + else if(GFCommon::current_user_can_any("gravityforms_view_updates")) + $parent = array("name" => "gf_update", "callback" => array("RGForms", "update_page")); + + else if(GFCommon::current_user_can_any("gravityforms_view_addons")) + $parent = array("name" => "gf_addons", "callback" => array("RGForms", "addons_page")); + + else if(GFCommon::current_user_can_any(GFCommon::all_caps())) + $parent = array("name" => "gf_help", "callback" => array("RGForms", "help_page")); + + return $parent; + } + + public static function modify_admin_title( $admin_title, $title ) { + + $subview = rgget( 'subview' ); + $form_id = rgget( 'id' ); + + if( ! $form_id || rgget( 'page' ) != 'gf_edit_forms' || rgget( 'view' ) != 'settings' ) + return $admin_title; + + require_once( GFCommon::get_base_path() . '/form_settings.php' ); + + $setting_tabs = GFFormSettings::get_tabs( $form_id ); + $page_title = ''; + + foreach( $setting_tabs as $tab ) { + if( $tab['name'] == $subview ) + $page_title = $tab['label']; + } + + if( $page_title ) + $admin_title = sprintf( __( '%1$s ‹ %2$s — WordPress' , 'gravityforms'), $page_title, $admin_title ); + + return $admin_title; + } + + //Parses the [gravityform shortcode and returns the front end form UI + public static function parse_shortcode( $attributes, $content = null ) { + + extract( shortcode_atts( array( + 'title' => true, + 'description' => true, + 'id' => 0, + 'name' => '', + 'field_values' => "", + 'ajax' => false, + 'tabindex' => 1, + 'action' => 'form' + ), $attributes ) ); + + $shortcode_string = ""; + + switch($action) { + case 'conditional': + $shortcode_string = GFCommon::conditional_shortcode($attributes, $content); + break; + + case 'form' : + //displaying form + $title = strtolower($title) == "false" ? false : true; + $description = strtolower($description) == "false" ? false : true; + $field_values = htmlspecialchars_decode($field_values); + $field_values = str_replace("&", "&", $field_values); + + $ajax = strtolower($ajax) == "true" ? true : false; + + //using name to lookup form if id is not specified + if(empty($id)) + $id = $name; + + parse_str($field_values, $field_value_array); //parsing query string like string for field values and placing them into an associative array + $field_value_array = stripslashes_deep($field_value_array); + + $shortcode_string = self::get_form($id, $title, $description, false, $field_value_array, $ajax, $tabindex); + + break; + } + + $shortcode_string = apply_filters("gform_shortcode_{$action}", $shortcode_string, $attributes, $content); + + return $shortcode_string; + } + + public static function include_addon_framework() { + require_once( GFCommon::get_base_path() . '/includes/addon/class-gf-addon.php' ); + } + + public static function include_feed_addon_framework() { + require_once(GFCommon::get_base_path() . '/includes/addon/class-gf-feed-addon.php' ); + } + + public static function include_payment_addon_framework() { + require_once(GFCommon::get_base_path() . '/includes/addon/class-gf-payment-addon.php' ); + } + + + //------------------------------------------------- + //----------- AJAX -------------------------------- + + public static function ajax_parse_request($wp) { + + if (isset($_POST["gform_ajax"])) { + parse_str($_POST["gform_ajax"]); + + require_once(GFCommon::get_base_path() . "/form_display.php"); + // GFCommon::$tab_index = $tabindex; + $result = GFFormDisplay::get_form($form_id, $title, $description, false, $_POST["gform_field_values"], true, $tabindex); + die($result); + } + } + + //------------------------------------------------------ + //------------- PAGE/POST EDIT PAGE --------------------- + + public static function page_supports_add_form_button(){ + $is_post_edit_page = in_array(RG_CURRENT_PAGE, array('post.php', 'page.php', 'page-new.php', 'post-new.php')); + + $display_add_form_button = apply_filters("gform_display_add_form_button", $is_post_edit_page); + + return $display_add_form_button; + } + + //Action target that adds the "Insert Form" button to the post/page edit screen + public static function add_form_button(){ + + $is_add_form_page = self::page_supports_add_form_button(); + if(!$is_add_form_page) + return; + + // do a version check for the new 3.5 UI + $version = get_bloginfo('version'); + + if ($version < 3.5) { + // show button for v 3.4 and below + $image_btn = GFCommon::get_base_url() . "/images/form-button.png"; + echo '' . __('; + } else { + // display button matching new UI + echo ' + ' . __("Add Form", "gravityforms") . ''; + } + } + + + //Action target that displays the popup to insert a form to a post/page + public static function add_mce_popup(){ + ?> + + + + + ' . __( 'Settings', 'gravityforms' ) . ''); + + return $links; + } + + //Displays message on Plugin's page + public static function plugin_row($plugin_name){ + $key = GFCommon::get_key(); + $version_info = GFCommon::get_version_info(); + + if(!$version_info["is_valid_key"]){ + + $plugin_name = "gravityforms/gravityforms.php"; + + $new_version = version_compare(GFCommon::$version, $version_info["version"], '<') ? __('There is a new version of Gravity Forms available.', 'gravityforms') .' '. sprintf(__('View version %s Details', 'gravityforms'), $version_info["version"]) . '. ' : ''; + + echo '
          ' . $new_version . __('Register your copy of Gravity Forms to receive access to automatic upgrades and support. Need a license key? Purchase one now.', 'gravityforms') . '
          '; + + } + } + + //Displays current version details on Plugin's page + public static function display_changelog(){ + if($_REQUEST["plugin"] != "gravityforms") + return; + + $page_text = self::get_changelog(); + echo $page_text; + + exit; + } + + public static function get_changelog(){ + $key = GFCommon::get_key(); + $body = "key=$key"; + $options = array('method' => 'POST', 'timeout' => 3, 'body' => $body); + $options['headers'] = array( + 'Content-Type' => 'application/x-www-form-urlencoded; charset=' . get_option('blog_charset'), + 'Content-Length' => strlen($body), + 'User-Agent' => 'WordPress/' . get_bloginfo("version"), + 'Referer' => get_bloginfo("url") + ); + + $raw_response = wp_remote_request(GRAVITY_MANAGER_URL . "/changelog.php?" . GFCommon::get_remote_request_params(), $options); + + if ( is_wp_error( $raw_response ) || 200 != $raw_response['response']['code']){ + $page_text = __("Oops!! Something went wrong.
          Please try again or contact us.", 'gravityforms'); + } + else{ + $page_text = $raw_response['body']; + if(substr($page_text, 0, 10) != "") + $page_text = ""; + } + return stripslashes($page_text); + } + +//------------------------------------------------------ +//-------------- DASHBOARD PAGE ------------------------- + + //Registers the dashboard widget + public static function dashboard_setup(){ + $dashboard_title = apply_filters("gform_dashboard_title", __("Forms", "gravityforms")); + wp_add_dashboard_widget('rg_forms_dashboard', $dashboard_title, array('RGForms', 'dashboard')); + } + + //Displays the dashboard UI + public static function dashboard(){ + $forms = RGFormsModel::get_form_summary(); + + if(sizeof($forms) > 0){ + ?> + + + + + + + + + + + + + + + + + + +
          + 0 ? "class='form_title_unread' style='font-weight:bold;'" : "" ?> href="admin.php?page=gf_entries&view=entries&id=" title=" : "> + 0 ? "class='form_entries_unread' style='font-weight:bold;'" : "" ?> href="admin.php?page=gf_entries&view=entries&filter=unread&id=" title="">" title="">
          + + +

          + + +

          + +
          + ', ''); ?> +
          + ", ""); + }*/ + $message = sprintf(__("There is an update available for Gravity Forms. %sView Details%s %s", "gravityforms"), "", "", $auto_upgrade); + ?> +
          + +
          + + __( 'Next >', "gravityforms" ), + 'prev' => __( '< Prev', "gravityforms" ), + 'image' => __( 'Image', "gravityforms" ), + 'of' => __( 'of', "gravityforms" ), + 'close' => __( 'Close', "gravityforms" ), + 'noiframes' => __( 'This feature requires inline frames. You have iframes disabled or your browser does not support them.' , 'gravityforms'), + 'loadingAnimation' => includes_url( 'js/thickbox/loadingAnimation.gif' ), + 'closeImage' => includes_url( 'js/thickbox/tb-close.png' ) + ) ); + } + + public static function enqueue_admin_scripts() { + + $scripts = array(); + $page = self::get_page(); + + switch($page) { + case 'new_form' : + case 'form_list': + $scripts = array( + 'gform_gravityforms', + 'gform_json', + 'gform_form_admin', + 'thickbox' + ); + break; + + case 'form_settings': + $scripts = array( + 'gform_gravityforms', + 'gform_forms', + 'gform_json', + 'gform_form_admin', + 'gform_placeholder', + 'jquery-ui-datepicker', + 'gform_masked_input', + 'jquery-ui-sortable' + ); + break; + + case 'form_editor': + $thickbox = !GFCommon::is_wp_version("3.3") ? 'gf_thickbox' : 'thickbox'; + $scripts = array( + $thickbox, + 'jquery-ui-core', + 'jquery-ui-sortable', + 'jquery-ui-tabs', + 'sack', + 'gform_gravityforms', + 'gform_forms', + 'gform_json', + 'gform_form_admin', + 'gform_floatmenu', + 'gform_menu', + 'gform_placeholder', + 'jquery-ui-autocomplete' + ); + + if ( wp_is_mobile() ) + $scripts[] = 'jquery-touch-punch'; + + break; + + case 'entry_detail': + $scripts = array('gform_json'); + break; + + case 'entry_detail_edit': + $scripts = array('gform_gravityforms','plupload-all'); + break; + + case 'entry_list': + $scripts = array( + 'wp-lists', + 'wp-ajax-response', + 'thickbox', + 'gform_json', + 'thickbox', + 'gform_field_filter' + ); + break; + + case 'notification_list': + $scripts = array( + 'gform_forms', + 'gform_json', + 'gform_form_admin' + ); + break; + + case 'notification_new': + case 'notification_edit': + $scripts = array( + 'jquery-ui-autocomplete', + 'gform_gravityforms', + 'gform_placeholder', + 'gform_form_admin', + 'gform_forms', + 'gform_json' + ); + break; + + case 'confirmation': + $scripts = array( + 'gform_form_admin', + 'gform_forms', + 'gform_gravityforms', + 'gform_placeholder', + 'gform_json', + 'wp-pointer' + ); + break; + + case 'addons': + $scripts = array('thickbox'); + break; + + case 'export_entry': + $scripts = array( + 'jquery-ui-datepicker', + 'gform_form_admin', + 'gform_field_filter' + ); + break; + + } + + if(empty($scripts)) + return; + + foreach($scripts as $script){ + wp_enqueue_script($script); + } + + + GFCommon::localize_gform_gravityforms_multifile(); + + + } + + public static function get_page() { + + /** + * Page names: + * + * new_form + * form_list + * form_editor + * form_settings + * confirmation + * notification_list + * notification_new + * notification_edit + * entry_list + * entry_detail + * entry_detail_edit + * settings + * addons + * export_entry + * export_form + * import_form + */ + + if( rgget('page') == 'gf_new_form' ) + return 'new_form'; + + if( rgget('page') == 'gf_edit_forms' && !rgget('id') ) + return 'form_list'; + + if( rgget('page') == 'gf_edit_forms' && !rgget('view') ) + return 'form_editor'; + + if( rgget('page') == 'gf_edit_forms' && rgget('view') == 'settings' && ( !rgget('subview') || rgget('subview') == 'settings') ) + return 'form_settings'; + + if( rgget('page') == 'gf_edit_forms' && rgget('view') == 'settings' && rgget('subview') == 'confirmation' ) + return 'confirmation'; + + if( rgget('page') == 'gf_edit_forms' && rgget('view') == 'settings' && rgget('subview') == 'notification' && rgget('nid') ) + return 'notification_edit'; + + if( rgget('page') == 'gf_edit_forms' && rgget('view') == 'settings' && rgget('subview') == 'notification' && isset($_GET['nid']) ) + return 'notification_edit'; + + if( rgget('page') == 'gf_edit_forms' && rgget('view') == 'settings' && rgget('subview') == 'notification' ) + return 'notification_list'; + + if( rgget('page') == 'gf_entries' && (!rgget('view') || rgget('view') == 'entries' ) ) + return 'entry_list'; + + if( rgget('page') == 'gf_entries' && rgget('view') == 'entry' && isset($_POST['screen_mode']) && rgpost('screen_mode') != 'view') + return 'entry_detail_edit'; + + if( rgget('page') == 'gf_entries' && rgget('view') == 'entry') + return 'entry_detail'; + + if( rgget('page') == 'gf_settings') + return 'settings'; + + if(rgget('page') == 'gf_addons') + return 'addons'; + + if(rgget('page') == 'gf_export' && ( rgget('view') == 'export_entry' || !isset($_GET['view']) ) ) + return 'export_entry'; + + if(rgget('page') == 'gf_export' && rgget('view') == 'export_form') + return 'export_form'; + + if(rgget('page') == 'gf_export' && rgget('view') == 'import_form') + return 'import_form'; + + return false; + } + + public static function get_form($form_id, $display_title=true, $display_description=true, $force_display=false, $field_values=null, $ajax=false, $tabindex = 1){ + require_once(GFCommon::get_base_path() . "/form_display.php"); + return GFFormDisplay::get_form($form_id, $display_title, $display_description, $force_display, $field_values, $ajax, $tabindex); + } + + public static function new_form(){ + self::form_list_page(); + } + + public static function enqueue_scripts(){ + require_once(GFCommon::get_base_path() . "/form_display.php"); + GFFormDisplay::enqueue_scripts(); + } + + public static function print_form_scripts($form, $ajax){ + require_once(GFCommon::get_base_path() . "/form_display.php"); + GFFormDisplay::print_form_scripts($form, $ajax); + } + + public static function forms_page($form_id){ + require_once(GFCommon::get_base_path() . "/form_detail.php"); + GFFormDetail::forms_page($form_id); + } + + public static function settings_page(){ + require_once(GFCommon::get_base_path() . "/settings.php"); + GFSettings::settings_page(); + } + + public static function add_settings_page( $name, $handle = '', $icon_path = '' ){ + require_once(GFCommon::get_base_path() . "/settings.php"); + GFSettings::add_settings_page($name, $handle, $icon_path); + } + + public static function help_page(){ + require_once(GFCommon::get_base_path() . "/help.php"); + GFHelp::help_page(); + } + + public static function export_page(){ + require_once(GFCommon::get_base_path() . "/export.php"); + GFExport::export_page(); + } + + public static function update_page(){ + require_once(GFCommon::get_base_path() . "/update.php"); + GFUpdate::update_page(); + } + + public static function addons_page(){ + + wp_print_styles(array("thickbox")); + + $plugins = get_plugins(); + $installed_plugins = array(); + foreach($plugins as $key => $plugin){ + $is_active = is_plugin_active($key); + $installed_plugin = array("plugin" => $key, "name" => $plugin["Name"], "is_active"=>$is_active); + $installed_plugin["activation_url"] = $is_active ? "" : wp_nonce_url("plugins.php?action=activate&plugin={$key}", "activate-plugin_{$key}"); + $installed_plugin["deactivation_url"] = !$is_active ? "" : wp_nonce_url("plugins.php?action=deactivate&plugin={$key}", "deactivate-plugin_{$key}"); + + $installed_plugins[] = $installed_plugin; + } + + $nonces = self::get_addon_nonces(); + + $body = array("plugins" => urlencode(serialize($installed_plugins)), "nonces" => urlencode(serialize($nonces)), "key" => GFCommon::get_key()); + $options = array('body' => $body, 'headers' => array('Referer' => get_bloginfo("url")), 'timeout' => 15); + + $request_url = GRAVITY_MANAGER_URL . "/api.php?op=plugin_browser&{$_SERVER["QUERY_STRING"]}"; + $raw_response = wp_remote_post($request_url, $options); + + if ( is_wp_error( $raw_response ) || $raw_response['response']['code'] != 200){ + echo "
          " . __("Add-On browser is currently unavailable. Please try again later.", "gravityforms") . "
          "; + } + else{ + echo GFCommon::get_remote_message(); + echo $raw_response["body"]; + } + } + + public static function get_addon_info($api, $action, $args){ + if($action == "plugin_information" && empty($api) && !rgempty("rg", $_GET)){ + $request_url = GRAVITY_MANAGER_URL . "/api.php?op=get_plugin&slug={$args->slug}"; + $raw_response = wp_remote_post($request_url); + + if ( is_wp_error( $raw_response ) || $raw_response['response']['code'] != 200) + return false; + + $plugin = unserialize($raw_response["body"]); + + $api = new stdClass(); + $api->name = $plugin["title"]; + $api->version = $plugin["version"]; + $api->download_link = $plugin["download_url"]; + } + return $api; + } + + public static function get_addon_nonces(){ + $request_url = GRAVITY_MANAGER_URL . "/api.php?op=get_plugins"; + $raw_response = wp_remote_get($request_url); + + if ( is_wp_error( $raw_response ) || $raw_response['response']['code'] != 200) + return false; + + $addons = unserialize($raw_response["body"]); + $nonces = array(); + foreach($addons as $addon){ + $nonces[$addon["key"]] = wp_create_nonce("install-plugin_{$addon["key"]}"); + } + + return $nonces; + } + + public static function start_export(){ + require_once(GFCommon::get_base_path() . "/export.php"); + GFExport::start_export(); + } + + public static function get_post_category_values(){ + require_once(GFCommon::get_base_path() . "/form_detail.php"); + GFFormDetail::get_post_category_values(); + } + + public static function get_notification_post_category_values(){ + require_once(GFCommon::get_base_path() . "/notification.php"); + GFNotification::get_post_category_values(); + } + + public static function all_leads_page(){ + + $view = rgget("view"); + $lead_id = rgget('lid'); + + if($view == 'entry' && (rgget('lid') || !rgblank(rgget('pos')))) { + require_once(GFCommon::get_base_path() . "/entry_detail.php"); + GFEntryDetail::lead_detail_page(); + } else if ($view == 'entries' || empty($view)){ + require_once(GFCommon::get_base_path() . "/entry_list.php"); + GFEntryList::all_leads_page(); + } else { + $form_id = rgget('id'); + do_action("gform_entries_view", $view, $form_id, $lead_id); + } + + } + + public static function form_list_page(){ + require_once(GFCommon::get_base_path() . "/form_list.php"); + GFFormList::form_list_page(); + } + + public static function forms(){ + if(!GFCommon::ensure_wp_version()) + return; + + $id = RGForms::get("id"); + $view = RGForms::get("view"); + + if($view == "entries"){ + require_once(GFCommon::get_base_path() . "/entry_list.php"); + GFEntryList::leads_page($id); + } else if($view == "entry"){ + require_once(GFCommon::get_base_path() . "/entry_detail.php"); + GFEntryDetail::lead_detail_page(); + } else if($view == "notification"){ + require_once(GFCommon::get_base_path() . "/notification.php"); + //GFNotification::notification_page($id); + } else if($view == 'settings') { + require_once(GFCommon::get_base_path() . "/form_settings.php"); + GFFormSettings::form_settings_page($id); + } else if(empty($view)){ + if(is_numeric($id)){ + self::forms_page($id); + } else{ + self::form_list_page(); + } + } + + do_action("gform_view", $view, $id); + + } + + public static function get($name, $array=null){ + if(!$array) + $array = $_GET; + + if(isset($array[$name])) + return $array[$name]; + + return ""; + } + + public static function post($name){ + if(isset($_POST[$name])) + return $_POST[$name]; + + return ""; + } + + // AJAX Function + public static function resend_notifications(){ + + check_admin_referer('gf_resend_notifications', 'gf_resend_notifications'); + $form_id = rgpost('formId'); + $leads = rgpost('leadIds'); // may be a single ID or an array of IDs + if(0 == $leads){ + // get all the lead ids for the current filter / search + $filter = rgpost("filter"); + $search = rgpost("search"); + $star = $filter == "star" ? 1 : null; + $read = $filter == "unread" ? 0 : null; + $status = in_array($filter, array("trash", "spam")) ? $filter : "active"; + + $search_criteria["status"] = $status; + + if($star) + $search_criteria["field_filters"][] = array("key" => "is_starred", "value" => (bool) $star ); + if(!is_null($read)) + $search_criteria["field_filters"][] = array("key" => "is_read", "value" => (bool) $read ); + + $search_field_id = rgpost("fieldId"); + + if(isset($_POST["fieldId"]) && $_POST["fieldId"] !== ''){ + $key = $search_field_id; + $val = $search; + $strpos_row_key = strpos($search_field_id, "|"); + if ($strpos_row_key !== false) { //multi-row + $key_array = explode("|", $search_field_id); + $key = $key_array[0]; + $val = $key_array[1] . ":" . $val; + } + $search_criteria["field_filters"][] = array( + "key" => $key, + "operator" => rgempty("operator", $_POST) ? "is" : rgpost("operator"), + "value" => $val + ); + } + + $leads = GFFormsModel::search_lead_ids($form_id, $search_criteria); + } else { + $leads = !is_array($leads) ? array($leads) : $leads; + } + + $form = apply_filters("gform_before_resend_notifications_{$form_id}", apply_filters('gform_before_resend_notifications', RGFormsModel::get_form_meta($form_id), $leads), $leads); + + if(empty($leads) || empty($form)) { + _e("There was an error while resending the notifications.", "gravityforms"); + die(); + }; + + $notifications = json_decode(rgpost('notifications')); + if(!is_array($notifications)) + die(__("No notifications have been selected. Please select a notification to be sent.", "gravityforms")); + + if(rgpost('sendTo') && GFCommon::is_invalid_or_empty_email(rgpost('sendTo'))) + die(__("The Send To email address provided is not valid.", "gravityforms")); + + foreach($leads as $lead_id){ + + $lead = RGFormsModel::get_lead($lead_id); + foreach($notifications as $notification_id){ + $notification = $form["notifications"][$notification_id]; + if(!$notification) + continue; + + //overriding To email if one was specified + if(rgpost('sendTo')){ + $notification["to"] = rgpost('sendTo'); + $notification["toType"] = "email"; + } + + GFCommon::send_notification($notification, $form, $lead); + } + } + + die(); + } + +//------------------------------------------------- +//----------- AJAX CALLS -------------------------- + //captcha image + + public static function captcha_image(){ + $field = array("simpleCaptchaSize" => $_GET["size"], "simpleCaptchaFontColor"=> $_GET["fg"], "simpleCaptchaBackgroundColor"=>$_GET["bg"]); + if($_GET["type"] == "math") + $captcha = GFCommon::get_math_captcha($field, $_GET["pos"]); + else + $captcha = GFCommon::get_captcha($field); + + @ini_set('memory_limit', '256M'); + $image = imagecreatefrompng($captcha["path"]); + + include_once( ABSPATH . 'wp-admin/includes/image-edit.php' ); + wp_stream_image($image, "image/png", 0); + imagedestroy($image); + die(); + } + + + public static function update_form_active(){ + check_ajax_referer('rg_update_form_active','rg_update_form_active'); + RGFormsModel::update_form_active($_POST["form_id"], $_POST["is_active"]); + } + public static function update_notification_active(){ + check_ajax_referer('rg_update_notification_active','rg_update_notification_active'); + RGFormsModel::update_notification_active($_POST["form_id"], $_POST["notification_id"], $_POST["is_active"]); + } + public static function update_confirmation_active(){ + check_ajax_referer('rg_update_confirmation_active','rg_update_confirmation_active'); + RGFormsModel::update_confirmation_active($_POST["form_id"], $_POST["confirmation_id"], $_POST["is_active"]); + } + public static function update_lead_property(){ + check_ajax_referer('rg_update_lead_property','rg_update_lead_property'); + RGFormsModel::update_lead_property($_POST["lead_id"], $_POST["name"], $_POST["value"]); + } + + public static function update_lead_status(){ + check_ajax_referer('gf_delete_entry'); + $status = rgpost("status"); + $lead_id = rgpost("entry"); + + switch($status){ + case "unspam" : + //TODO: call akismet and set entry as not spam. + RGFormsModel::update_lead_property($lead_id, "status", "active"); + break; + + case "delete" : + RGFormsModel::delete_lead($lead_id); + break; + + default : + RGFormsModel::update_lead_property($lead_id, "status", $status); + break; + } + header("Content-Type: text/xml"); + echo ""; + exit(); + + } + + //settings + public static function upgrade_license(){ + require_once(GFCommon::get_base_path() . "/settings.php"); + GFSettings::upgrade_license(); + } + + //form detail + public static function save_form(){ + require_once(GFCommon::get_base_path() . "/form_detail.php"); + GFFormDetail::save_form(); + } + public static function add_field(){ + require_once(GFCommon::get_base_path() . "/form_detail.php"); + GFFormDetail::add_field(); + } + public static function duplicate_field(){ + require_once(GFCommon::get_base_path() . "/form_detail.php"); + GFFormDetail::duplicate_field(); + } + public static function delete_field(){ + require_once(GFCommon::get_base_path() . "/form_detail.php"); + GFFormDetail::delete_field(); + } + public static function change_input_type(){ + require_once(GFCommon::get_base_path() . "/form_detail.php"); + GFFormDetail::change_input_type(); + } + public static function delete_custom_choice(){ + require_once(GFCommon::get_base_path() . "/form_detail.php"); + GFFormDetail::delete_custom_choice(); + } + public static function save_custom_choice(){ + require_once(GFCommon::get_base_path() . "/form_detail.php"); + GFFormDetail::save_custom_choice(); + } + + //entry detail + public static function delete_file(){ + check_ajax_referer("rg_delete_file", "rg_delete_file"); + $lead_id = intval($_POST["lead_id"]); + $field_id = intval($_POST["field_id"]); + $file_index = intval($_POST["file_index"]); + + RGFormsModel::delete_file($lead_id, $field_id, $file_index); + die("EndDeleteFile($field_id, $file_index);"); + } + + //export + public static function select_export_form(){ + check_ajax_referer("rg_select_export_form", "rg_select_export_form"); + $form_id = intval($_POST["form_id"]); + $form = RGFormsModel::get_form_meta($form_id); + $filter_settings = GFCommon::get_field_filter_settings($form); + $filter_settings_json = json_encode($filter_settings); + $fields = array(); + + $form = GFExport::add_default_export_fields($form); + + if(is_array($form["fields"])){ + foreach($form["fields"] as $field){ + if(is_array(rgar($field,"inputs"))){ + foreach($field["inputs"] as $input) + $fields[] = array($input["id"], GFCommon::get_label($field, $input["id"])); + } + else if(!rgar($field,"displayOnly")){ + $fields[] = array($field["id"], GFCommon::get_label($field)); + } + } + } + $field_json = GFCommon::json_encode($fields); + + die("EndSelectExportForm($field_json, $filter_settings_json);"); + } + + // form settings + public static function save_confirmation() { + require_once(GFCommon::get_base_path() . '/form_settings.php'); + GFFormSettings::save_confirmation(); + } + + public static function delete_confirmation() { + require_once(GFCommon::get_base_path() . '/form_settings.php'); + GFFormSettings::delete_confirmation(); + } + + // form list + public static function save_new_form() { + require_once(GFCommon::get_base_path() . '/form_list.php'); + GFFormList::save_new_form(); + } + + public static function top_toolbar(){ + + $forms = RGFormsModel::get_forms(null, "title"); + $id = rgempty("id", $_GET) ? count($forms) > 0 ? $forms[0]->id : "0" : rgget("id"); + + ?> + + + +
          + +
          + + $menu_item){ + $priorities[$k] = rgar($menu_item,"priority"); + } + + array_multisort($priorities, SORT_DESC, $menu_items); + + $keys = array_keys($menu_items); + $last_key = array_pop($keys); // array_pop(array_keys($menu_items)) causes a Strict Standards warning in WP 3.6 on PHP 5.4 + + foreach($menu_items as $key => $menu_item){ + if(is_array($menu_item)){ + if(GFCommon::current_user_can_any(rgar($menu_item, "capabilities"))){ + $sub_menu_str = ""; + $count_sub_menu_items = 0; + $sub_menu_items = rgar($menu_item, "sub_menu_items"); + if (is_array($sub_menu_items)){ + foreach($sub_menu_items as $k => $val){ + if(false === GFCommon::current_user_can_any(rgar($sub_menu_items[$k], "capabilities"))) + unset($sub_menu_items[$k]); + } + $sub_menu_items = array_values($sub_menu_items); //reset numeric keys + $count_sub_menu_items = count($sub_menu_items); + } + + $menu_class = rgar($menu_item, "menu_class"); + + if ($count_sub_menu_items == 1){ + $label = $compact ? rgar($menu_item, "label") : rgar($sub_menu_items[0], "label"); + $menu_item = $sub_menu_items[0]; + } else { + $label = rgar($menu_item, "label"); + $sub_menu_str = self::toolbar_sub_menu_items($sub_menu_items, $compact); + } + $link_class = rgar($menu_item, "link_class"); + $icon = rgar($menu_item, "icon"); + $url = rgar($menu_item, "url"); + $title = rgar($menu_item, "title"); + $onclick = rgar($menu_item, "onclick"); + + $target = rgar($menu_item, "target"); + $link = "{$icon} {$label}" . $sub_menu_str; + if($compact){ + if ($key == "delete") + $link = apply_filters("gform_form_delete_link", $link); + $divider = $key == $last_key ? '' : " | "; + if($count_sub_menu_items > 0) + $menu_class .= " gf_form_action_has_submenu"; + $output .= '' . $link . $divider . ''; + } else { + + $output .= "
        • {$link}
        • "; + } + + } + } elseif($compact) { + //for backwards compatibility <1.7: form actions only + $divider = $key == $last_key ? '' : " | "; + $output .= ''. $menu_item . $divider . ''; + } + } + + return $output; + } + + public static function get_toolbar_menu_items($form_id, $compact = false){ + $menu_items = array(); + + //---- Form Editor ---- + $edit_capabilities = array("gravityforms_edit_forms"); + + $menu_items['edit'] = array( + 'label' => $compact ? __("Edit", "gravityforms") : __("Form Editor", "gravityforms"), + 'icon' => '', + 'title' => __('Edit this form', 'gravityforms'), + 'url' => '?page=gf_edit_forms&id=' . $form_id, + 'menu_class' => 'gf_form_toolbar_editor', + 'link_class' => self::toolbar_class("editor"), + 'capabilities' => $edit_capabilities, + 'priority' => 1000 + ); + + //---- Form Settings ---- + + $sub_menu_items = self::get_form_settings_sub_menu_items($form_id); + + $menu_items['settings'] = array( + 'label' => $compact ? __("Settings", "gravityforms") : __("Form Settings", "gravityforms"), + 'icon' => '', + 'title' => __('Edit settings for this form', 'gravityforms'), + 'url' => '?page=gf_edit_forms&view=settings&id=' . $form_id, + 'menu_class' => 'gf_form_toolbar_settings', + 'link_class' => self::toolbar_class("settings"), + 'sub_menu_items' => $sub_menu_items, + 'capabilities' => $edit_capabilities, + 'priority' => 900 + ); + + + //---- Entries ---- + + $entries_capabilities = array('gravityforms_view_entries','gravityforms_edit_entries','gravityforms_delete_entries'); + + $menu_items['entries'] = array( + 'label' => __("Entries", "gravityforms"), + 'icon' => '', + 'title' => __('View entries generated by this form', 'gravityforms'), + 'url' => '?page=gf_entries&id=' . $form_id, + 'menu_class' => 'gf_form_toolbar_entries', + 'link_class' => self::toolbar_class("entries"), + 'capabilities' => $entries_capabilities, + 'priority' => 800 + ); + + //---- Preview ---- + + $preview_capabilities = array("gravityforms_edit_forms", "gravityforms_create_form", "gravityforms_preview_forms"); + + $menu_items['preview'] = array( + 'label' => __("Preview", "gravityforms"), + 'icon' => '', + 'title' => __('Preview this form', 'gravityforms'), + 'url' => trailingslashit(site_url()) . '?gf_page=preview&id=' . $form_id, + 'menu_class' => 'gf_form_toolbar_preview', + 'link_class' => self::toolbar_class("preview"), + 'target' => '_blank', + 'capabilities' => $preview_capabilities, + 'priority' => 700 + ); + + + return $menu_items; + } + + public static function toolbar_sub_menu_items($menu_items, $compact = false){ + if (empty($menu_items)) + return ""; + + $sub_menu_items_string = ""; + foreach ($menu_items as $menu_item){ + if(GFCommon::current_user_can_any(rgar($menu_item, "capabilities"))){ + $menu_class = rgar($menu_item, "menu_class"); + $link_class = rgar($menu_item, "link_class"); + $url = rgar($menu_item, "url"); + $label = rgar($menu_item, "label"); + $target = rgar($menu_item, "target"); + $sub_menu_items_string .= "
        • {$label}
        • "; + } + } + if($compact){ + $sub_menu_items_string = '
            ' . $sub_menu_items_string . '
          '; + }else{ + $sub_menu_items_string = '
            ' . $sub_menu_items_string . '
          '; + } + + return $sub_menu_items_string; + } + + public static function get_form_settings_sub_menu_items($form_id) { + require_once(GFCommon::get_base_path() . '/form_settings.php'); + + $sub_menu_items = array(); + $tabs = GFFormSettings::get_tabs($form_id); + + foreach($tabs as $tab) { + + if($tab['name'] == 'settings') + $form_setting_menu_item['label'] = 'Settings'; + + $sub_menu_items[] = array( + 'url' => admin_url("admin.php?page=gf_edit_forms&view=settings&subview={$tab['name']}&id={$form_id}"), + 'label' => $tab['label'], + 'capabilities' => array("gravityforms_edit_forms") + ); + + } + + return $sub_menu_items; + } + + private static function toolbar_class($item){ + + switch($item){ + + case "editor": + if(in_array(rgget("page"), array("gf_edit_forms", "gf_new_form")) && rgempty("view", $_GET)) + return "gf_toolbar_active"; + break; + + case "settings": + if(rgget('view') == 'settings') + return "gf_toolbar_active"; + break; + + case "notifications" : + if(rgget("page") == "gf_new_form") + return "gf_toolbar_disabled"; + else if(rgget("page") == "gf_edit_forms" && rgget("view") == "notification") + return "gf_toolbar_active"; + break; + + case "entries" : + if(rgget("page") == "gf_new_form") + return "gf_toolbar_disabled"; + else if(rgget("page") == "gf_entries" && rgempty("view", $_GET)) + return "gf_toolbar_active"; + + break; + + case "preview" : + if(rgget("page") == "gf_new_form") + return "gf_toolbar_disabled"; + + break; + } + + return ""; + } + + public static function admin_bar() { + global $wp_admin_bar; + + if(!GFCommon::current_user_can_any("gravityforms_create_form")) + return; + + $wp_admin_bar->add_menu( + array( + 'id' => 'gravityforms-new-form', + 'parent' => 'new-content', + 'title' => esc_attr__( 'Form', 'gravityforms' ), + 'href' => admin_url( 'admin.php?page="gf_new_form' ) + ) + ); + + } + +} + +class RGForms extends GFForms { } + +//Main function call. Should be used to insert a Gravity Form from code. +function gravity_form($id, $display_title=true, $display_description=true, $display_inactive=false, $field_values=null, $ajax=false, $tabindex = 1, $echo = true){ + if (!$echo) + return RGForms::get_form($id, $display_title, $display_description, $display_inactive, $field_values, $ajax, $tabindex); + + echo RGForms::get_form($id, $display_title, $display_description, $display_inactive, $field_values, $ajax, $tabindex); +} + +//Enqueues the appropriate scripts for the specified form +function gravity_form_enqueue_scripts($form_id, $is_ajax=false){ + if(!is_admin()){ + require_once(GFCommon::get_base_path() . "/form_display.php"); + $form = RGFormsModel::get_form_meta($form_id); + GFFormDisplay::enqueue_form_scripts($form, $is_ajax); + } +} + +if(!function_exists("rgget")){ +function rgget($name, $array=null){ + if(!isset($array)) + $array = $_GET; + + if(isset($array[$name])) + return $array[$name]; + + return ""; +} +} + +if(!function_exists("rgpost")){ +function rgpost($name, $do_stripslashes=true){ + if(isset($_POST[$name])) + return $do_stripslashes ? stripslashes_deep($_POST[$name]) : $_POST[$name]; + + return ""; +} +} + +if(!function_exists("rgar")){ +function rgar($array, $name){ + if(isset($array[$name])) + return $array[$name]; + + return ''; +} +} + +if(!function_exists("rgars")){ +function rgars($array, $name){ + $names = explode("/", $name); + $val = $array; + foreach($names as $current_name){ + $val = rgar($val, $current_name); + } + return $val; +} +} + +if( ! function_exists( 'rgempty' ) ) { +function rgempty( $name, $array = null ) { + + if( is_array( $name ) ) + return empty( $name ); + + if( ! $array ) + $array = $_POST; + + $val = rgar( $array, $name ); + + return empty( $val ); +} +} + +if(!function_exists("rgblank")){ +function rgblank($text){ + return empty($text) && strval($text) != "0"; +} +} + +if(!function_exists("rgobj")){ +function rgobj($obj, $name){ + if(isset($obj->$name)) + return $obj->$name; + + return ''; +} +} +if(!function_exists("rgexplode")){ +function rgexplode($sep, $string, $count){ + $ary = explode($sep, $string); + while(count($ary) < $count) + $ary[] = ""; + + return $ary; +} +} \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/help.php b/src/wp-content/plugins/gravityforms/help.php new file mode 100644 index 0000000..2aebeb8 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/help.php @@ -0,0 +1,149 @@ + + +
          +

          + +
          + +
          IMPORTANT NOTICE: We do not provide support via e-mail. Please open a support ticket.", "gravityforms") ?>
          + +
          frequently asked questions (FAQ) first. If you still can't find the answer open a support ticket and we will be happy to answer your questions and assist you with any problems. Please note: If you have not purchased a license from us, you won't have access to these help resources.", "gravityforms"); ?>
          + + +
          + +

          + +
            +
          • +
            +
            + + "> +
            +
            + +
          • +
          + +
          + +

          +
            +
          • +
            +
            + + "> +
            +
            + +
          • + +
          + +
          + +

          + Please Note: Only licensed Gravity Forms customers are granted access to the downloads section.", "gravityforms"); ?> +
            +
          • +
            +
            + + "> +
            +
            + +
          • + +
          + + +
          + +

          + Please note: The Gravity Forms support team does not provide support for third party scripts, widgets, etc.", "gravityforms"); ?> + + + +
          +
          + + + \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/images/active0.png b/src/wp-content/plugins/gravityforms/images/active0.png new file mode 100644 index 0000000..c6a7516 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/active0.png differ diff --git a/src/wp-content/plugins/gravityforms/images/active1.png b/src/wp-content/plugins/gravityforms/images/active1.png new file mode 100644 index 0000000..86574e9 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/active1.png differ diff --git a/src/wp-content/plugins/gravityforms/images/add.png b/src/wp-content/plugins/gravityforms/images/add.png new file mode 100644 index 0000000..227426e Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/add.png differ diff --git a/src/wp-content/plugins/gravityforms/images/arrow-handle.png b/src/wp-content/plugins/gravityforms/images/arrow-handle.png new file mode 100644 index 0000000..d452313 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/arrow-handle.png differ diff --git a/src/wp-content/plugins/gravityforms/images/arrow-right.jpg b/src/wp-content/plugins/gravityforms/images/arrow-right.jpg new file mode 100644 index 0000000..bcc6732 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/arrow-right.jpg differ diff --git a/src/wp-content/plugins/gravityforms/images/arrow-rightleft.jpg b/src/wp-content/plugins/gravityforms/images/arrow-rightleft.jpg new file mode 100644 index 0000000..f40ae3d Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/arrow-rightleft.jpg differ diff --git a/src/wp-content/plugins/gravityforms/images/blank.gif b/src/wp-content/plugins/gravityforms/images/blank.gif new file mode 100644 index 0000000..e565824 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/blank.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/calendar.png b/src/wp-content/plugins/gravityforms/images/calendar.png new file mode 100644 index 0000000..6b354e3 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/calendar.png differ diff --git a/src/wp-content/plugins/gravityforms/images/captcha_blackglass.jpg b/src/wp-content/plugins/gravityforms/images/captcha_blackglass.jpg new file mode 100644 index 0000000..eb8a16b Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/captcha_blackglass.jpg differ diff --git a/src/wp-content/plugins/gravityforms/images/captcha_clean.jpg b/src/wp-content/plugins/gravityforms/images/captcha_clean.jpg new file mode 100644 index 0000000..0490657 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/captcha_clean.jpg differ diff --git a/src/wp-content/plugins/gravityforms/images/captcha_large.png b/src/wp-content/plugins/gravityforms/images/captcha_large.png new file mode 100644 index 0000000..efaab53 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/captcha_large.png differ diff --git a/src/wp-content/plugins/gravityforms/images/captcha_medium.png b/src/wp-content/plugins/gravityforms/images/captcha_medium.png new file mode 100644 index 0000000..d76b775 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/captcha_medium.png differ diff --git a/src/wp-content/plugins/gravityforms/images/captcha_red.jpg b/src/wp-content/plugins/gravityforms/images/captcha_red.jpg new file mode 100644 index 0000000..7a595f5 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/captcha_red.jpg differ diff --git a/src/wp-content/plugins/gravityforms/images/captcha_small.png b/src/wp-content/plugins/gravityforms/images/captcha_small.png new file mode 100644 index 0000000..fd528e7 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/captcha_small.png differ diff --git a/src/wp-content/plugins/gravityforms/images/captcha_white.jpg b/src/wp-content/plugins/gravityforms/images/captcha_white.jpg new file mode 100644 index 0000000..517df7b Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/captcha_white.jpg differ diff --git a/src/wp-content/plugins/gravityforms/images/chosen-sprite.png b/src/wp-content/plugins/gravityforms/images/chosen-sprite.png new file mode 100644 index 0000000..f20db44 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/chosen-sprite.png differ diff --git a/src/wp-content/plugins/gravityforms/images/close.png b/src/wp-content/plugins/gravityforms/images/close.png new file mode 100644 index 0000000..482d830 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/close.png differ diff --git a/src/wp-content/plugins/gravityforms/images/color.png b/src/wp-content/plugins/gravityforms/images/color.png new file mode 100644 index 0000000..809fb00 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/color.png differ diff --git a/src/wp-content/plugins/gravityforms/images/datepicker/arrow.png b/src/wp-content/plugins/gravityforms/images/datepicker/arrow.png new file mode 100644 index 0000000..65cee77 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/datepicker/arrow.png differ diff --git a/src/wp-content/plugins/gravityforms/images/datepicker/ui-icons_222222_256x240.png b/src/wp-content/plugins/gravityforms/images/datepicker/ui-icons_222222_256x240.png new file mode 100644 index 0000000..b273ff1 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/datepicker/ui-icons_222222_256x240.png differ diff --git a/src/wp-content/plugins/gravityforms/images/datepicker/ui-icons_454545_256x240.png b/src/wp-content/plugins/gravityforms/images/datepicker/ui-icons_454545_256x240.png new file mode 100644 index 0000000..59bd45b Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/datepicker/ui-icons_454545_256x240.png differ diff --git a/src/wp-content/plugins/gravityforms/images/datepicker/ui-icons_888888_256x240.png b/src/wp-content/plugins/gravityforms/images/datepicker/ui-icons_888888_256x240.png new file mode 100644 index 0000000..6d02426 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/datepicker/ui-icons_888888_256x240.png differ diff --git a/src/wp-content/plugins/gravityforms/images/datepicker/ui-icons_cd0a0a_256x240.png b/src/wp-content/plugins/gravityforms/images/datepicker/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000..2ab019b Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/datepicker/ui-icons_cd0a0a_256x240.png differ diff --git a/src/wp-content/plugins/gravityforms/images/delete.png b/src/wp-content/plugins/gravityforms/images/delete.png new file mode 100644 index 0000000..120d942 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/delete.png differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_audio.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_audio.gif new file mode 100644 index 0000000..22dbad8 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_audio.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_css.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_css.gif new file mode 100644 index 0000000..f41be96 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_css.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_doc.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_doc.gif new file mode 100644 index 0000000..31e2217 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_doc.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_fla.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_fla.gif new file mode 100644 index 0000000..ed2e018 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_fla.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_generic.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_generic.gif new file mode 100644 index 0000000..a483fa9 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_generic.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_html.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_html.gif new file mode 100644 index 0000000..cc1f8e9 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_html.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_image.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_image.gif new file mode 100644 index 0000000..b62949f Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_image.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_js.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_js.gif new file mode 100644 index 0000000..c17243e Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_js.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_log.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_log.gif new file mode 100644 index 0000000..09c4ee3 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_log.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_mov.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_mov.gif new file mode 100644 index 0000000..821024e Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_mov.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_pdf.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_pdf.gif new file mode 100644 index 0000000..fdd6634 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_pdf.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_php.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_php.gif new file mode 100644 index 0000000..b7cb745 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_php.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_ppt.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_ppt.gif new file mode 100644 index 0000000..b788279 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_ppt.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_psd.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_psd.gif new file mode 100644 index 0000000..16fb71b Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_psd.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_sql.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_sql.gif new file mode 100644 index 0000000..f129eb8 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_sql.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_swf.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_swf.gif new file mode 100644 index 0000000..8dd07cf Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_swf.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_txt.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_txt.gif new file mode 100644 index 0000000..a215971 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_txt.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_video.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_video.gif new file mode 100644 index 0000000..e442f9e Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_video.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_xls.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_xls.gif new file mode 100644 index 0000000..16a039f Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_xls.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_xml.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_xml.gif new file mode 100644 index 0000000..32c163a Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_xml.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/doctypes/icon_zip.gif b/src/wp-content/plugins/gravityforms/images/doctypes/icon_zip.gif new file mode 100644 index 0000000..bc15b68 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/doctypes/icon_zip.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/download.png b/src/wp-content/plugins/gravityforms/images/download.png new file mode 100644 index 0000000..79c035d Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/download.png differ diff --git a/src/wp-content/plugins/gravityforms/images/error.png b/src/wp-content/plugins/gravityforms/images/error.png new file mode 100644 index 0000000..9ab9b58 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/error.png differ diff --git a/src/wp-content/plugins/gravityforms/images/exclamation.png b/src/wp-content/plugins/gravityforms/images/exclamation.png new file mode 100644 index 0000000..d93f9e4 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/exclamation.png differ diff --git a/src/wp-content/plugins/gravityforms/images/form-button.png b/src/wp-content/plugins/gravityforms/images/form-button.png new file mode 100644 index 0000000..4f01bec Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/form-button.png differ diff --git a/src/wp-content/plugins/gravityforms/images/form_options.png b/src/wp-content/plugins/gravityforms/images/form_options.png new file mode 100644 index 0000000..ddf134b Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/form_options.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-creditcard-icons.png b/src/wp-content/plugins/gravityforms/images/gf-creditcard-icons.png new file mode 100644 index 0000000..22f239d Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-creditcard-icons.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-expand-title-bg-rtl.png b/src/wp-content/plugins/gravityforms/images/gf-expand-title-bg-rtl.png new file mode 100644 index 0000000..f1f204a Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-expand-title-bg-rtl.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-expand-title-bg.png b/src/wp-content/plugins/gravityforms/images/gf-expand-title-bg.png new file mode 100644 index 0000000..9ffebb6 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-expand-title-bg.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-fieldsettings-header.jpg b/src/wp-content/plugins/gravityforms/images/gf-fieldsettings-header.jpg new file mode 100644 index 0000000..8d908be Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-fieldsettings-header.jpg differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-hovergrad-bg.png b/src/wp-content/plugins/gravityforms/images/gf-hovergrad-bg.png new file mode 100644 index 0000000..dd080f6 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-hovergrad-bg.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-media-button-bg.jpg b/src/wp-content/plugins/gravityforms/images/gf-media-button-bg.jpg new file mode 100644 index 0000000..d3372a9 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-media-button-bg.jpg differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-new-option-bg.png b/src/wp-content/plugins/gravityforms/images/gf-new-option-bg.png new file mode 100644 index 0000000..3486ed7 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-new-option-bg.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-nofields-steps.png b/src/wp-content/plugins/gravityforms/images/gf-nofields-steps.png new file mode 100644 index 0000000..5e16526 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-nofields-steps.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-pagebreak-end.png b/src/wp-content/plugins/gravityforms/images/gf-pagebreak-end.png new file mode 100644 index 0000000..0630aea Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-pagebreak-end.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-pagebreak-first.png b/src/wp-content/plugins/gravityforms/images/gf-pagebreak-first.png new file mode 100644 index 0000000..3181912 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-pagebreak-first.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-pagebreak-inline.png b/src/wp-content/plugins/gravityforms/images/gf-pagebreak-inline.png new file mode 100644 index 0000000..56fb263 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-pagebreak-inline.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-percentbar-bg.png b/src/wp-content/plugins/gravityforms/images/gf-percentbar-bg.png new file mode 100644 index 0000000..050b897 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-percentbar-bg.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-percentbar-blue.png b/src/wp-content/plugins/gravityforms/images/gf-percentbar-blue.png new file mode 100644 index 0000000..f965abe Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-percentbar-blue.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-percentbar-custom.png b/src/wp-content/plugins/gravityforms/images/gf-percentbar-custom.png new file mode 100644 index 0000000..baf6304 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-percentbar-custom.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-percentbar-gray.png b/src/wp-content/plugins/gravityforms/images/gf-percentbar-gray.png new file mode 100644 index 0000000..1e05e88 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-percentbar-gray.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-percentbar-green.png b/src/wp-content/plugins/gravityforms/images/gf-percentbar-green.png new file mode 100644 index 0000000..0c8e2a5 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-percentbar-green.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-percentbar-orange.png b/src/wp-content/plugins/gravityforms/images/gf-percentbar-orange.png new file mode 100644 index 0000000..49b5335 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-percentbar-orange.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-percentbar-red.png b/src/wp-content/plugins/gravityforms/images/gf-percentbar-red.png new file mode 100644 index 0000000..cad91b8 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-percentbar-red.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-percentbar-yellow.png b/src/wp-content/plugins/gravityforms/images/gf-percentbar-yellow.png new file mode 100644 index 0000000..db384a5 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-percentbar-yellow.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gf-toolbar-iconsprite.png b/src/wp-content/plugins/gravityforms/images/gf-toolbar-iconsprite.png new file mode 100644 index 0000000..8967552 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gf-toolbar-iconsprite.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gravity-admin-icon.png b/src/wp-content/plugins/gravityforms/images/gravity-admin-icon.png new file mode 100644 index 0000000..5c02b87 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gravity-admin-icon.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gravity-logo.png b/src/wp-content/plugins/gravityforms/images/gravity-logo.png new file mode 100644 index 0000000..70e9c8d Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gravity-logo.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gravityforms-business-upgrade.png b/src/wp-content/plugins/gravityforms/images/gravityforms-business-upgrade.png new file mode 100644 index 0000000..5d90130 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gravityforms-business-upgrade.png differ diff --git a/src/wp-content/plugins/gravityforms/images/gravityforms-developer-upgrade.png b/src/wp-content/plugins/gravityforms/images/gravityforms-developer-upgrade.png new file mode 100644 index 0000000..21732c6 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/gravityforms-developer-upgrade.png differ diff --git a/src/wp-content/plugins/gravityforms/images/icon-drop-list.png b/src/wp-content/plugins/gravityforms/images/icon-drop-list.png new file mode 100644 index 0000000..340e68d Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/icon-drop-list.png differ diff --git a/src/wp-content/plugins/gravityforms/images/icon-submenu-down.png b/src/wp-content/plugins/gravityforms/images/icon-submenu-down.png new file mode 100644 index 0000000..3bdc9fd Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/icon-submenu-down.png differ diff --git a/src/wp-content/plugins/gravityforms/images/loading.gif b/src/wp-content/plugins/gravityforms/images/loading.gif new file mode 100644 index 0000000..d42f72c Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/loading.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/prodlist-last.png b/src/wp-content/plugins/gravityforms/images/prodlist-last.png new file mode 100644 index 0000000..24332c4 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/prodlist-last.png differ diff --git a/src/wp-content/plugins/gravityforms/images/prodlist.png b/src/wp-content/plugins/gravityforms/images/prodlist.png new file mode 100644 index 0000000..2a8fb79 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/prodlist.png differ diff --git a/src/wp-content/plugins/gravityforms/images/prodlist_last.png b/src/wp-content/plugins/gravityforms/images/prodlist_last.png new file mode 100644 index 0000000..24332c4 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/prodlist_last.png differ diff --git a/src/wp-content/plugins/gravityforms/images/remove.png b/src/wp-content/plugins/gravityforms/images/remove.png new file mode 100644 index 0000000..bfd82cc Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/remove.png differ diff --git a/src/wp-content/plugins/gravityforms/images/screen-options-left.gif b/src/wp-content/plugins/gravityforms/images/screen-options-left.gif new file mode 100644 index 0000000..d692d86 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/screen-options-left.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/spinner.gif b/src/wp-content/plugins/gravityforms/images/spinner.gif new file mode 100644 index 0000000..e10b97f Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/spinner.gif differ diff --git a/src/wp-content/plugins/gravityforms/images/star0.png b/src/wp-content/plugins/gravityforms/images/star0.png new file mode 100644 index 0000000..41bc4e4 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/star0.png differ diff --git a/src/wp-content/plugins/gravityforms/images/star1.png b/src/wp-content/plugins/gravityforms/images/star1.png new file mode 100644 index 0000000..64af7f6 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/star1.png differ diff --git a/src/wp-content/plugins/gravityforms/images/stop.png b/src/wp-content/plugins/gravityforms/images/stop.png new file mode 100644 index 0000000..5eabc52 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/stop.png differ diff --git a/src/wp-content/plugins/gravityforms/images/stopbanner.png b/src/wp-content/plugins/gravityforms/images/stopbanner.png new file mode 100644 index 0000000..a3a7ce7 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/stopbanner.png differ diff --git a/src/wp-content/plugins/gravityforms/images/tiny-arrow-down.png b/src/wp-content/plugins/gravityforms/images/tiny-arrow-down.png new file mode 100644 index 0000000..41bac2f Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/tiny-arrow-down.png differ diff --git a/src/wp-content/plugins/gravityforms/images/webkit-enhanced-select.png b/src/wp-content/plugins/gravityforms/images/webkit-enhanced-select.png new file mode 100644 index 0000000..fe2b24b Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/webkit-enhanced-select.png differ diff --git a/src/wp-content/plugins/gravityforms/images/wp-logo.png b/src/wp-content/plugins/gravityforms/images/wp-logo.png new file mode 100644 index 0000000..1324b6a Binary files /dev/null and b/src/wp-content/plugins/gravityforms/images/wp-logo.png differ diff --git a/src/wp-content/plugins/gravityforms/includes/addon/class-gf-addon-locking.php b/src/wp-content/plugins/gravityforms/includes/addon/class-gf-addon-locking.php new file mode 100644 index 0000000..c7e5dcd --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/addon/class-gf-addon-locking.php @@ -0,0 +1,35 @@ +_addon = $addon; + $capabilities = isset($config["capabilities"]) ? $config["capabilities"] : array(); + $redirect_url = isset($config["redirect_url"]) ? $config["redirect_url"] : ""; + $edit_url = isset($config["edit_url"]) ? $config["edit_url"] : ""; + $object_type = isset($config["object_type"]) ? $config["object_type"] : ""; + $this->_strings = isset($config["strings"]) ? $config["strings"] : array(); + parent::__construct($object_type, $redirect_url, $edit_url, $capabilities); + } + + public function get_strings() { + return array_merge(parent::get_strings(), $this->_strings); + } + + protected function is_edit_page() { + return $this->_addon->is_locking_edit_page(); + } + + protected function is_list_page() { + return $this->_addon->is_locking_list_page(); + } + + protected function is_view_page() { + return $this->_addon->is_locking_view_page(); + } + + protected function get_object_id() { + return $this->_addon->get_locking_object_id(); + } +} \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/includes/addon/class-gf-addon.php b/src/wp-content/plugins/gravityforms/includes/addon/class-gf-addon.php new file mode 100644 index 0000000..d3f9529 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/addon/class-gf-addon.php @@ -0,0 +1,2634 @@ +_enable_rg_autoupgrade) { + require_once("class-gf-auto-upgrade.php"); + $is_gravityforms_supported = $this->is_gravityforms_supported($this->_min_gravityforms_version); + new GFAutoUpgrade($this->_slug, $this->_version, $this->_min_gravityforms_version, $this->_title, $this->_full_path, $this->_path, $this->_url, $is_gravityforms_supported); + } + + $this->pre_init(); + } + + /** + * Gets executed before all init functions. Override this function to perform initialization tasks that must be done prior to init + */ + public function pre_init(){ + + if($this->is_gravityforms_supported()){ + + //Entry meta + if ($this->method_is_overridden('get_entry_meta')) + add_filter('gform_entry_meta', array($this, 'get_entry_meta'), 10, 2); + + } + } + + /** + * Plugin starting point. Handles hooks and loading of language files. + */ + public function init() { + + load_plugin_textdomain($this->_slug, FALSE, $this->_slug . '/languages'); + + if(RG_CURRENT_PAGE == 'admin-ajax.php') { + + //If gravity forms is supported, initialize AJAX + if($this->is_gravityforms_supported()){ + $this->init_ajax(); + } + + } + else if (is_admin()) { + + $this->init_admin(); + + } + else { + + if($this->is_gravityforms_supported()){ + $this->init_frontend(); + } + } + + + } + + /** + * Override this function to add initialization code (i.e. hooks) for the admin site (WP dashboard) + */ + protected function init_admin(){ + + // enqueues admin scripts + add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts'), 10, 0); + + // message enforcing min version of Gravity Forms + if (isset($this->_min_gravityforms_version) && RG_CURRENT_PAGE == "plugins.php" && false === $this->_enable_rg_autoupgrade) + add_action('after_plugin_row_' . $this->_path, array($this, 'plugin_row')); + + // STOP HERE IF GRAVITY FORMS IS NOT SUPPORTED + if (isset($this->_min_gravityforms_version) && !$this->is_gravityforms_supported($this->_min_gravityforms_version)) + return; + + $this->setup(); + + // Add form settings only when there are form settings fields configured or form_settings() method is implemented + if (self::has_form_settings_page()) { + $this->form_settings_init(); + } + + // Add plugin page when there is a plugin page configured or plugin_page() method is implemented + if (self::has_plugin_page()) { + $this->plugin_page_init(); + } + + // Add addon settings page only when there are addon settings fields configured or settings_page() method is implemented + if (self::has_plugin_settings_page()) { + if ($this->current_user_can_any($this->_capabilities_settings_page)) { + $this->plugin_settings_init(); + } + } + + // Members plugin integration + if (self::has_members_plugin()) + add_filter('members_get_capabilities', array($this, 'members_get_capabilities')); + + // Results page + if ($this->method_is_overridden('get_results_page_config')) { + $results_page_config = $this->get_results_page_config(); + $results_capabilities = rgar($results_page_config, "capabilities"); + if($results_page_config && $this->current_user_can_any($results_capabilities)) + $this->results_page_init($results_page_config); + } + + // Locking + if ($this->method_is_overridden('get_locking_config')) { + require_once(GFCommon::get_base_path() . "/includes/locking/class-gf-locking.php"); + require_once("class-gf-addon-locking.php"); + $config = $this->get_locking_config(); + new GFAddonLocking($config, $this); + } + + // No conflict scripts + add_filter('gform_noconflict_scripts', array($this, 'register_noconflict_scripts')); + add_filter('gform_noconflict_styles', array($this, 'register_noconflict_styles')); + + } + + /** + * Override this function to add initialization code (i.e. hooks) for the public (customer facing) site + */ + protected function init_frontend(){ + + $this->setup(); + + add_filter('gform_preview_styles', array($this, "enqueue_preview_styles"), 10, 2); + add_filter('gform_print_styles', array($this, "enqueue_print_styles"), 10, 2); + add_action("gform_enqueue_scripts", array($this, "enqueue_scripts"), 10, 2); + + } + + /** + * Override this function to add AJAX hooks or to add initialization code when an AJAX request is being performed + */ + protected function init_ajax(){ + if (rgpost("view") == "gf_results_" . $this->_slug) { + require_once(GFCommon::get_base_path() . "/tooltips.php"); + require_once("class-gf-results.php"); + $gf_results = new GFResults($this->_slug, $this->get_results_page_config()); + add_action('wp_ajax_gresults_get_results_gf_results_' . $this->_slug, array($gf_results, 'ajax_get_results')); + add_action('wp_ajax_gresults_get_more_results_gf_results_' . $this->_slug, array($gf_results, 'ajax_get_more_results')); + } elseif ($this->method_is_overridden('get_locking_config')) { + require_once(GFCommon::get_base_path() . "/includes/locking/class-gf-locking.php"); + require_once("class-gf-addon-locking.php"); + $config = $this->get_locking_config(); + new GFAddonLocking($config, $this); + } + } + + + //-------------- Setup --------------- + + /** + * Performs upgrade tasks when the version of the Add-On changes. To add additional upgrade tasks, override the upgrade() function, which will only get executed when the plugin version has changed. + */ + protected function setup() { + + //Upgrading add-on + $installed_version = get_option("gravityformsaddon_" . $this->_slug . "_version"); + + //Making sure version has really changed. Gets around aggressive caching issue on some sites that cause setup to run multiple times. + if ($installed_version != $this->_version){ + $installed_version = GFForms::get_wp_option("gravityformsaddon_" . $this->_slug . "_version"); + } + + //Upgrade if version has changed + if ($installed_version != $this->_version){ + + $this->upgrade($installed_version); + update_option("gravityformsaddon_" . $this->_slug . "_version", $this->_version); + } + } + + /** + * Override this function to add to add database update scripts or any other code to be executed when the Add-On version changes + */ + protected function upgrade($previous_version) { + return; + } + + + //-------------- Script enqueuing --------------- + + /** + * Override this function to provide a list of styles to be enqueued. + * When overriding this function, be sure to call parent::styles() to ensure the base class scripts are enqueued. + * See scripts() for an example of the format expected to be returned. + */ + protected function styles(){ + return array( + array( "handle" => "gaddon_form_settings_css", + "src" => GFAddOn::get_gfaddon_base_url() . "/css/gaddon_form_settings.css", + "version" => GFCommon::$version, + "enqueue" => array( + array("admin_page" => array("form_settings", "plugin_settings", "plugin_page") ) + ) + ), + array( "handle" => "gaddon_results_css", + "src" => GFAddOn::get_gfaddon_base_url() . "/css/gaddon_results.css", + "version" => GFCommon::$version, + "enqueue" => array( + array("admin_page" => array("results") ) + ) + ) + ); + } + + + /** + * Override this function to provide a list of scripts to be enqueued. + * When overriding this function, be sure to call parent::scripts() to ensure the base class scripts are enqueued. + * Following is an example of the array that is expected to be returned by this function: + *
          +    * 
          +    *
          +    *    array(
          +    *        array(  "handle" => "maskedinput",
          +    *                "src" => GFCommon::get_base_url() . "/js/jquery.maskedinput-1.3.min.js",
          +    *                "version" => GFCommon::$version,
          +    *                "deps" => array("jquery"),
          +    *                "in_footer" => false,
          +    *
          +    *                //Determines where the script will be enqueued. The script will be enqueued if any of the conditions match
          +    *                "enqueue" => array(
          +    *                                    //admin_page - Specified one or more pages (known pages) where the script is supposed to be enqueued. When this setting is specified, scripts will only be enqueued in those pages.
          +    *                                    //To enqueue scripts in the front end (public website), simply don't define this setting
          +    *                                    array("admin_page" => array("form_settings", "plugin_settings") ),
          +    *
          +    *                                    //tab - Specifies a form settings or plugin settings tab in which the script is supposed to be enqueued. If none is specified, the script will be enqueued in any of the form settings or plugin_settings page
          +    *                                    array("tab" => "signature"),
          +    *
          +    *                                    //query - Specifies a set of query string ($_GET) values. If all specified query string values match the current requested page, the script will be enqueued
          +    *                                    array("query" => "page=gf_edit_forms&view=settings&id=_notempty_")
          +    *
          +    *                                    //post - Specifies a set of post ($_POST) values. If all specified posted values match the current request, the script will be enqueued
          +    *                                    array("post" => "posted_field=val")
          +    *
          +    *                                    )
          +    *            ),
          +    *        array(
          +    *            "handle" => "super_signature_script",
          +    *            "src" => $this->get_base_url() . "/super_signature/ss.js",
          +    *            "version" => $this->_version,
          +    *            "deps" => array("jquery"),
          +    *            "callback" => array($this, "localize_scripts"),
          +    *            "strings" => array(
          +    *                               // Accessible in JavaScript using the global variable "[script handle]_strings"
          +    *                               "stringKey1" => __("The string", "gravityforms"),
          +    *                               "stringKey2" => __("Another string.", "gravityforms")
          +    *                               )
          +    *            "enqueue" => array(
          +    *                                //field_types - Specifies one or more field types that requires this script. The script will only be enqueued if the current form has a field of any of the specified field types. Only applies when a current form is available.
          +    *                                array("field_types" => array("signature"))
          +    *                                )
          +    *        )
          +    *  );
          +    *
          +    * 
          +    * 
          + */ + protected function scripts(){ + return array( + array( + 'handle' => 'gform_form_admin', + 'enqueue' => array( array( "admin_page" => array("form_settings") ) ) + ), + array( + 'handle' => 'gform_gravityforms', + 'enqueue' => array( array( "admin_page" => array("form_settings") ) ) + ), + array("handle" => "google_charts", + "src" => "https://www.google.com/jsapi", + "version" => GFCommon::$version, + "enqueue" => array( + array("admin_page" => array("results")), + ) + ), + array("handle" => "gaddon_results_js", + "src" => GFAddOn::get_gfaddon_base_url() . "/js/gaddon_results.js", + "version" => GFCommon::$version, + "deps" => array('jquery', 'sack', 'jquery-ui-resizable', 'jquery-ui-datepicker' , 'google_charts', 'gform_field_filter'), + "callback" => array('GFResults', "localize_results_scripts"), + "enqueue" => array( + array("admin_page" => array("results")), + ) + ) + ); + } + + + /** + * Target of admin_enqueue_scripts and gform_enqueue_scripts hooks. + * Not intended to be overridden by child classes. + * In order to enqueue scripts and styles, override the scripts() and styles() functions + * + * @ignore + */ + public function enqueue_scripts($form="", $is_ajax=false){ + + if(empty($form)) + $form = $this->get_current_form(); + + //Enqueueing scripts + $scripts = $this->scripts(); + foreach($scripts as $script){ + $src = isset($script["src"]) ? $script["src"] : false; + $deps = isset($script["deps"]) ? $script["deps"] : array(); + $version = isset($script["version"]) ? $script["version"] : false; + $in_footer = isset($script["in_footer"]) ? $script["in_footer"] : false; + wp_register_script($script["handle"],$src, $deps, $version, $in_footer); + if(isset($script["enqueue"]) && $this->_can_enqueue_script($script["enqueue"], $form, $is_ajax)){ + $this->add_no_conflict_scripts(array($script["handle"])); + wp_enqueue_script($script["handle"]); + if(isset($script["strings"])) + wp_localize_script($script["handle"], $script["handle"]."_strings", $script["strings"]); + if(isset($script["callback"]) && is_callable($script["callback"])){ + $args = compact("form", "is_ajax"); + call_user_func_array($script["callback"], $args); + } + } + } + + //Enqueueing styles + $styles = $this->styles(); + foreach($styles as $style){ + $src = isset($style["src"]) ? $style["src"] : false; + $deps = isset($style["deps"]) ? $style["deps"] : array(); + $version = isset($style["version"]) ? $style["version"] : false; + $media = isset($style["media"]) ? $style["media"] : "all"; + wp_register_style($style["handle"], $src, $deps, $version, $media); + if($this->_can_enqueue_script($style["enqueue"], $form, $is_ajax)){ + $this->add_no_conflict_styles(array($style["handle"])); + if ($this->is_preview()) { + $this->_preview_styles[] = $style["handle"]; + } elseif ($this->is_print()) { + $this->_print_styles[] = $style["handle"]; + } else { + wp_enqueue_style($style["handle"]); + } + } + } + } + + /** + * Target of gform_preview_styles. Enqueue styles to the preview page. + * Not intented to be overriden by child classes + * + * @ignore + */ + public function enqueue_preview_styles($preview_styles, $form) { + return array_merge($preview_styles, $this->_preview_styles); + } + + + /** + * Target of gform_print_styles. Enqueue styles to the print entry page. + * Not intented to be overriden by child classes + * + * @ignore + */ + public function enqueue_print_styles($print_styles, $form) { + if(false === $print_styles) + $print_styles = array(); + + $styles = $this->styles(); + foreach($styles as $style){ + if($this->_can_enqueue_script($style["enqueue"], $form, false)){ + $this->add_no_conflict_styles(array($style["handle"])); + $src = isset($style["src"]) ? $style["src"] : false; + $deps = isset($style["deps"]) ? $style["deps"] : array(); + $version = isset($style["version"]) ? $style["version"] : false; + $media = isset($style["media"]) ? $style["media"] : "all"; + wp_register_style($style["handle"], $src, $deps, $version, $media); + $print_styles[] = $style["handle"]; + } + } + + return array_merge($print_styles, $this->_print_styles); + } + + + /** + * Adds scripts to the list of white-listed no conflict scripts. + * + * @param $scripts + */ + private function add_no_conflict_scripts($scripts) { + $this->_no_conflict_scripts = array_merge($scripts, $this->_no_conflict_scripts); + + } + + /** + * Adds styles to the list of white-listed no conflict styles. + * + * @param $styles + */ + private function add_no_conflict_styles($styles) { + $this->_no_conflict_styles = array_merge($styles, $this->_no_conflict_styles); + } + + private function _can_enqueue_script($enqueue_conditions, $form, $is_ajax){ + if(empty($enqueue_conditions)) + return false; + + foreach($enqueue_conditions as $condition){ + if(is_callable($condition)){ + return call_user_func($condition, $form, $is_ajax); + } + else{ + $query_matches = isset($condition["query"]) ? $this->_request_condition_matches($_GET, $condition["query"]) : true; + $post_matches = isset($condition["post"]) ? $this->_request_condition_matches($_POST, $condition["query"]) : true; + $admin_page_matches = isset($condition["admin_page"]) ? $this->_page_condition_matches($condition["admin_page"], rgar($condition,"tab")) : true; + $field_type_matches = isset($condition["field_types"]) ? $this->_field_condition_matches($condition["field_types"], $form) : true; + + //Scripts will only be enqueued in any admin page if "admin_page", "query" or "post" variable is set. + //Scripts will only be enqueued in the front end if "admin_page" is not set. + $site_matches = ( isset($condition["admin_page"]) && is_admin() ) || ( !isset($condition["admin_page"]) && !is_admin() ) || ( isset($condition["query"]) || isset($condition["post"]) ) ; + + if($query_matches && $post_matches && $admin_page_matches && $field_type_matches && $site_matches){ + return true; + } + } + } + return false; + } + + private function _request_condition_matches($request, $query){ + parse_str($query, $query_array); + foreach($query_array as $key => $value){ + + switch ($value){ + case "_notempty_" : + if(rgempty($key, $request)) + return false; + break; + case "_empty_" : + if(!rgempty($key, $request)) + return false; + break; + default : + if (rgar($request, $key) != $value) + return false; + break; + } + + } + return true; + } + + private function _page_condition_matches($pages, $tab){ + if(!is_array($pages)) + $pages = array($pages); + + foreach($pages as $page){ + switch($page){ + case "form_editor" : + if($this->is_form_editor()) + return true; + + break; + + case "form_settings" : + if($this->is_form_settings($tab)) + return true; + + break; + + case "plugin_settings" : + if($this->is_plugin_settings($tab)) + return true; + + break; + + case "plugin_page" : + if($this->is_plugin_page()) + return true; + + break; + + case "entry_view" : + if($this->is_entry_view()) + return true; + + break; + + case "entry_edit" : + if($this->is_entry_edit()) + return true; + + break; + + case "results" : + if($this->is_results()) + return true; + + break; + + } + } + return false; + + } + + private function _field_condition_matches($field_types, $form){ + if(!is_array($field_types)) + $field_types = array($field_types); + + $fields = GFCommon::get_fields_by_type($form, $field_types); + if(count($fields) > 0) + return true; + + return false; + } + + /** + * Target for the gform_noconflict_scripts filter. Adds scripts to the list of white-listed no conflict scripts. + * + * Not intended to be overridden or called directed by Add-Ons. + * + * @ignore + * + * @param array $scripts Array of scripts to be white-listed + * @return array + */ + public function register_noconflict_scripts($scripts) { + //registering scripts with Gravity Forms so that they get enqueued when running in no-conflict mode + return array_merge($scripts, $this->_no_conflict_scripts); + } + + /** + * Target for the gform_noconflict_styles filter. Adds styles to the list of white-listed no conflict scripts. + * + * Not intended to be overridden or called directed by Add-Ons. + * + * @ignore + * + * @param array $styles Array of styles to be white-listed + * @return array + */ + public function register_noconflict_styles($styles) { + //registering styles with Gravity Forms so that they get enqueued when running in no-conflict mode + return array_merge($styles, $this->_no_conflict_styles); + } + + + + //-------------- Entry meta -------------------------------------- + + /** + * Override this method to activate and configure entry meta. + * + * + * @param array $entry_meta An array of entry meta already registered with the gform_entry_meta filter. + * @param int $form_id The form id + * + * @return array The filtered entry meta array. + */ + protected function get_entry_meta($entry_meta, $form_id) { + return $entry_meta; + } + + + //-------------- Results page -------------------------------------- + /** + * Returns the configuration for the results page. By default this is not activated. + * To activate the results page override this function and return an array with the configuration data. + * + * Example: + * public function get_results_page_config() { + * return array( + * "title" => "Quiz Results", + * "capabilities" => array("gravityforms_quiz_results"), + * "callbacks" => array( + * "fields" => array($this, "results_fields"), + * "calculation" => array($this, "results_calculation"), + * "markup" => array($this, "results_markup"), + * ) + * ); + * } + * + */ + public function get_results_page_config() { + return false; + } + + /** + * Initializes the result page functionality. To activate result page functionality, override the get_results_page_config() function. + * + * @param $results_page_config - configuration returned by get_results_page_config() + */ + protected function results_page_init($results_page_config) { + require_once("class-gf-results.php"); + + if(isset($results_page_config["callbacks"]["filters"])) + add_filter("gform_filters_pre_results", $results_page_config["callbacks"]["filters"], 10, 2); + + if(isset($results_page_config["callbacks"]["filter_ui"])){ + add_filter("gform_filter_ui", $results_page_config["callbacks"]["filter_ui"], 10, 5); + } + + $gf_results = new GFResults($this->_slug, $results_page_config); + $gf_results->init(); + } + + + //-------------- Members plugin integration -------------------------------------- + + /** + * Checks whether the Members plugin is installed and activated. + * + * Not intended to be overridden or called directly by Add-Ons. + * + * @ignore + * + * @return bool + */ + protected function has_members_plugin() { + return function_exists('members_get_capabilities'); + } + + /** + * Not intended to be overridden or called directly by Add-Ons. + * + * @ignore + * + * @param $caps + * @return array + */ + public function members_get_capabilities($caps) { + return array_merge($caps, $this->_capabilities); + } + + //-------------- Permissions: Capabilities and Roles ---------------------------- + + /** + * Checks whether the current user is assigned to a capability or role. + * + * @param string|array $caps An string or array of capabilities to check + * @return bool Returns true if the current user is assigned to any of the capabilities. + */ + protected function current_user_can_any($caps) { + return GFCommon::current_user_can_any($caps); + } + + + //------- Settings Helper Methods (Common to all settings pages) ------------------- + + /*** + * Renders the UI of all settings page based on the specified configuration array $sections + * + * @param array $sections - Configuration array containing all fields to be rendered grouped into sections + */ + protected function render_settings( $sections ) { + + if( ! $this->has_setting_field_type( 'save', $sections ) ) + $sections = $this->add_default_save_button( $sections ); + + ?> + +
          + + settings($sections); ?> + +
          + + setting_dependency_met( rgar( $section, 'dependency' ) ) ) + $this->single_section( $section, $is_first); + + $is_first = false; + } + } + + /*** + * Displays the UI for a field section + * + * @param array $section - The section to be displayed + * @param bool $is_first - true for the first section in the list, false for all others + */ + protected function single_section( $section, $is_first = false) { + + extract( wp_parse_args( $section, array( + 'title' => false, + 'description' => false, + 'id' => '', + 'class' => false, + 'style' => '', + '' + ) ) ); + + $classes = array( 'gaddon-section' ); + + if( $is_first ) + $classes[] = 'gaddon-first-section'; + + if( $class ) + $classes[] = $class; + + ?> + +
          + + +

          + + + +

          + + + + + setting_dependency_met( rgar( $field, 'dependency' ) ) ) + continue; + + if ( is_callable( array( $this, "single_setting_row_{$field["type"]}") ) ) { + call_user_func( array( $this, "single_setting_row_{$field["type"]}" ), $field ); + } else { + $this->single_setting_row( $field ); + } + + } + ?> + +
          + +
          + + + + " > + + get_required_indicator( $field ); + + if( isset( $field['tooltip'] ) ) + echo ' ' . gform_tooltip( $field['tooltip'], rgar( $field, 'tooltip_class'), true ); + + ?> + + + single_setting( $field ); ?> + + + + + + + + single_setting( $field ); ?> + + + + _saved_settings = $settings; + } + + /*** + * Sets the previous settings to a class variable so that it can be accessed by lower level functions providing support for + * verifying whether a value was changed before executing an action + * + * @param array $settings: Settings to be stored + */ + protected function set_previous_settings( $settings ) { + $this->_previous_settings = $settings; + } + + protected function get_previous_settings() { + return $this->_previous_settings; + } + + + + /*** + * Gets settings from $_POST variable, returning a name/value collection of setting name and setting value + */ + protected function get_posted_settings(){ + global $_gaddon_posted_settings; + + if(isset($_gaddon_posted_settings)) + return $_gaddon_posted_settings; + + $_gaddon_posted_settings = array(); + if(count($_POST) > 0){ + foreach($_POST as $key => $value){ + if(preg_match("|_gaddon_setting_(.*)|", $key, $matches)){ + $_gaddon_posted_settings[$matches[1]] = self::maybe_decode_json(stripslashes_deep($value)); + } + } + } + + return $_gaddon_posted_settings; + } + + protected static function maybe_decode_json($value) { + if (self::is_json($value)) + return json_decode($value, ARRAY_A); + + return $value; + } + + protected static function is_json($value) { + if (is_string($value) && substr($value, 0, 1) == '{' && is_array(json_decode($value, ARRAY_A))) + return true; + + return false; + } + + /*** + * Gets the "current" settings, which are settings from $_POST variables if this is a postback request, or the current saved settings for a get request. + */ + protected function get_current_settings(){ + //try getting settings from post + $settings = $this->get_posted_settings(); + + //if nothing has been posted, get current saved settings + if(empty($settings)){ + $settings = $this->_saved_settings; + } + + return $settings; + } + + /*** + * Retrieves the setting for a specific field/input + * + * @param string $setting_name The field or input name + * @param string $default_value Optional. The default value + * @return string|array + */ + protected function get_setting( $setting_name, $default_value = "" , $settings = false ) { + + if( ! $settings ) + $settings = $this->get_current_settings(); + + if (false === $settings) + return $default_value; + + if (strpos($setting_name, "[") !== false) { + $path_parts = explode("[", $setting_name); + foreach ($path_parts as $part) { + $part = trim($part, "]"); + if (false === isset($settings[$part])) + return $default_value; + $settings = rgar($settings, $part); + } + $setting = $settings; + } else { + if (false === isset($settings[$setting_name])) + return $default_value; + $setting = $settings[$setting_name]; + } + + return $setting; + } + + /*** + * Determines if a dependent field has been populated. + * + * @param string $dependency - Field or input name of the "parent" field. + * @return bool - true if the "parent" field has been filled out and false if it has not. + * + */ + protected function setting_dependency_met( $dependency ) { + + // if no dependency, always return true + if( ! $dependency ) + return true; + + //use a callback if one is specified in the configuration + if(is_callable($dependency)){ + return call_user_func($dependency); + } + + if(is_array($dependency)){ + //supports: "dependency" => array("field" => "myfield", "values" => array("val1", "val2")) + $dependency_field = $dependency["field"]; + $dependency_value = $dependency["values"]; + } + else{ + //supports: "dependency" => "myfield" + $dependency_field = $dependency; + $dependency_value = "_notempty_"; + } + + if(!is_array($dependency_value)) + $dependency_value = array($dependency_value); + + $current_value = $this->get_setting($dependency_field); + + foreach($dependency_value as $val){ + if($current_value == $val) + return true; + + if($val == "_notempty_" && !rgblank($current_value)) + return true; + } + + return false; + } + + protected function has_setting_field_type( $type, $fields ) { + + foreach( $fields as &$section ) { + foreach( $section['fields'] as $field ) { + if( rgar( $field, 'type' ) == $type ) + return true; + } + } + + return false; + } + + protected function add_default_save_button( $sections ) { + $sections[count($sections) - 1]['fields'][] = array( 'type' => 'save' ); + return $sections; + } + + protected function get_save_success_message( $sections ) { + $save_button = $this->get_save_button($sections); + return isset($save_button["messages"]["success"]) ? $save_button["messages"]["success"] : __("Settings updated", "gravityforms") ; + } + + protected function get_save_error_message( $sections ) { + $save_button = $this->get_save_button($sections); + return isset($save_button["messages"]["error"]) ? $save_button["messages"]["error"] : __("There was an error while saving your settings", "gravityforms") ; + } + + protected function get_save_button($sections){ + $fields = $sections[count($sections) - 1]['fields']; + + foreach($fields as $field){ + if ($field["type"] == "save") + return $field; + } + + return false; + } + + + + //------------- Field Types ------------------------------------------------------ + + /*** + * Renders and initializes a text field based on the $field array + * + * @param array $field - Field array containing the configuration options of this field + * @param bool $echo = true - true to echo the output to the screen, false to simply return the contents as a string + * @return string The HTML for the field + */ + protected function settings_text($field, $echo = true) { + + $field["type"] = "text"; //making sure type is set to text + $attributes = $this->get_field_attributes($field); + $default_value = rgar( $field, 'value' ) ? rgar( $field, 'value' ) : rgar( $field, 'default_value' ); + $value = $this->get_setting($field["name"], $default_value); + + + $name = esc_attr($field["name"]); + $tooltip = isset( $choice['tooltip'] ) ? gform_tooltip( $choice['tooltip'], rgar( $choice, 'tooltip_class'), true ) : ""; + $html = ""; + + $html .= ''; + + $feedback_callback = rgar($field, 'feedback_callback'); + if(is_callable($feedback_callback)){ + $is_valid = call_user_func_array( $feedback_callback, array( $value, $field ) ); + $icon = ""; + if($is_valid === true) + $icon = "icon-check fa-check gf_valid"; // check icon + else if($is_valid === false) + $icon = "icon-remove fa-times gf_invalid"; // x icon + + if(!empty($icon)) + $html .= "  "; + } + + if( $this->field_failed_validation( $field ) ) + $html .= $this->get_error_icon( $field ); + + if ($echo) + echo $html; + + return $html; + } + + /*** + * Renders and initializes a textarea field based on the $field array + * + * @param array $field - Field array containing the configuration options of this field + * @param bool $echo = true - true to echo the output to the screen, false to simply return the contents as a string + * @return string The HTML for the field + */ + protected function settings_textarea($field, $echo = true) { + $field["type"] = "textarea"; //making sure type is set to textarea + $attributes = $this->get_field_attributes($field); + $default_value = rgar( $field, 'value' ) ? rgar( $field, 'value' ) : rgar( $field, 'default_value' ); + $value = $this->get_setting($field["name"], $default_value); + + $name = '' . esc_attr($field["name"]); + $tooltip = isset( $choice['tooltip'] ) ? gform_tooltip( $choice['tooltip'], rgar( $choice, 'tooltip_class'), true ) : ""; + $html = ""; + + $html .= ''; + + if ($echo) + echo $html; + + return $html; + } + + + /*** + * Renders and initializes a hidden field based on the $field array + * + * @param array $field - Field array containing the configuration options of this field + * @param bool $echo = true - true to echo the output to the screen, false to simply return the contents as a string + * @return string The HTML for the field + */ + protected function settings_hidden($field, $echo = true) { + $field["type"] = "hidden"; //making sure type is set to hidden + $attributes = $this->get_field_attributes($field); + + $default_value = rgar( $field, 'value' ) ? rgar( $field, 'value' ) : rgar( $field, 'default_value' ); + $value = $this->get_setting($field["name"], $default_value); + + if ( is_array( $value ) ) + $value = json_encode($value); + + $html = ''; + + if ($echo) + echo $html; + + return $html; + } + + /*** + * Renders and initializes a checkbox field or a collection of checkbox fields based on the $field array + * + * @param array $field - Field array containing the configuration options of this field + * @param bool $echo = true - true to echo the output to the screen, false to simply return the contents as a string + * @return string The HTML for the field + */ + protected function settings_checkbox( $field, $echo = true ) { + + $field["type"] = "checkbox"; //making sure type is set to checkbox + + $default_attributes = array("onclick" => 'jQuery(this).siblings("input[type=hidden]").val(jQuery(this).prop("checked") ? 1 : 0);'); + $field_attributes = $this->get_field_attributes($field, $default_attributes); + $horizontal = rgar($field, "horizontal") ? " gaddon-setting-inline" : ""; + + $html = ""; + + if(is_array($field["choices"])){ + foreach( $field["choices"] as $choice ) { + $choice['id'] = $choice['name']; + $choice_attributes = $this->get_choice_attributes($choice, $field_attributes); + $value = $this->get_setting($choice['name'], rgar($choice, "default_value")); + $tooltip = isset( $choice['tooltip'] ) ? gform_tooltip( $choice['tooltip'], rgar( $choice, 'tooltip_class'), true ) : ""; + $hidden_field_value = $value == '1' ? '1' : '0'; + $html .= ' +
          + + + +
          + '; + } + } + + if ($echo) + echo $html; + + return $html; + } + + /*** + * Renders and initializes a radio field or a collection of radio fields based on the $field array + * + * @param array $field - Field array containing the configuration options of this field + * @param bool $echo = true - true to echo the output to the screen, false to simply return the contents as a string + * @return string Returns the markup for the radio buttons + * + */ + protected function settings_radio($field, $echo = true) { + + $field["type"] = "radio"; //making sure type is set to radio + + $selected_value = $this->get_setting($field['name'], rgar($field, "default_value")); + $field_attributes = $this->get_field_attributes($field); + $horizontal = rgar($field, "horizontal") ? " gaddon-setting-inline" : ""; + $html = ""; + if (is_array($field["choices"])) { + foreach ($field["choices"] as $i => $choice) { + $choice['id'] = $field['name'] . $i; + $choice_attributes = $this->get_choice_attributes($choice, $field_attributes); + + $tooltip = isset( $choice['tooltip'] ) ? gform_tooltip( $choice['tooltip'], rgar( $choice, 'tooltip_class'), true ) : ""; + + $radio_value = isset($choice["value"]) ? $choice["value"] : $choice["label"]; + $checked = checked($selected_value, $radio_value, false); + $html .= ' +
          + + +
          + '; + } + } + + if ($echo) + echo $html; + + return $html; + } + + /*** + * Renders and initializes a drop down field based on the $field array + * + * @param array $field - Field array containing the configuration options of this field + * @param bool $echo = true - true to echo the output to the screen, false to simply return the contents as a string + * + * @return string The HTML for the field + */ + protected function settings_select( $field, $echo = true ) { + + $field["type"] = "select"; //making sure type is set to select + $attributes = $this->get_field_attributes($field); + $value = $this->get_setting($field["name"], rgar($field, "default_value")); + $name = '' . esc_attr($field["name"]); + + $options = ""; + if(is_array($field["choices"])){ + foreach( $field["choices"] as $choice ) { + + if(!isset($choice["value"])) + $choice["value"] = $choice["label"]; + + $options .= ''; + } + } + + $html = ''; + + if( $this->field_failed_validation( $field ) ) + $html .= $this->get_error_icon( $field ); + + if ($echo) + echo $html; + + return $html; + } + + /*** + * Renders the save button for settings pages + * + * @param array $field - Field array containing the configuration options of this field + * @param bool $echo = true - true to echo the output to the screen, false to simply return the contents as a string + * + * @return string The HTML + */ + protected function settings_save( $field, $echo = true ) { + + $field['type'] = 'submit'; + $field['name'] = 'gform-settings-save'; + $field['class'] = 'button-primary gfbutton'; + + if( ! rgar( $field, 'value' ) ) + $field['value'] = __( 'Update Settings', 'gravityforms' ); + + $attributes = $this->get_field_attributes( $field ); + + $html = ''; + + if ( $echo ) + echo $html; + + return $html; + } + + /** + * Helper to create a simple conditional logic set of fields. It creates one row of conditional logic with Field/Operator/Value inputs. + * + * @param mixed $setting_name_root - The root name to be used for inputs. It will be used as a prefix to the inputs that make up the conditional logic fields. + * @return string The HTML + */ + protected function simple_condition($setting_name_root){ + + $conditional_fields = $this->get_conditional_logic_fields(); + $create_condition_value_script = ""; + + $str = $this->settings_select(array( + "name" => "{$setting_name_root}_field_id", + "type" => "select", + "choices" => $conditional_fields, + "class" => "optin_select", + "onchange" => "jQuery('#" . esc_attr($setting_name_root) . "_container').html(GetRuleValues('gf_setting', 0, jQuery(this).val(), '', '_gaddon_setting_" . esc_attr($setting_name_root) . "_value'));" + ), false); + + $str .= $this->settings_select(array( + "name" => "{$setting_name_root}_operator", + "type" => "select", + "choices" => array( + array( + "value" => "is", + "label" => __("is", "gravityforms") + ), + array( + "value" => "isnot", + "label" => __("is not", "gravityforms") + ), + array( + "value" => ">", + "label" => __("greater than", "gravityforms") + ), + array( + "value" => "<", + "label" => __("less than", "gravityforms") + ), + array( + "value" => "contains", + "label" => __("contains", "gravityforms") + ), + array( + "value" => "starts_with", + "label" => __("starts with", "gravityforms") + ), + array( + "value" => "ends_with", + "label" => __("ends with", "gravityforms") + ) + ) + ), false); + + $str .= ""; + + $field_id = $this->get_setting("{$setting_name_root}_field_id"); + + if(!empty($field_id)){ + $current_condition_value = $this->get_setting("{$setting_name_root}_value"); + $str .= ""; + } + return $str; + } + + /** + * Parses the properties of the $field meta array and returns a set of HTML attributes to be added to the HTML element. + * @param array $field - current field meta to be parsed. + * @param array $default - default set of properties. Will be appended to the properties specified in the $field array + * @return array - resulting HTML attributes ready to be included in the HTML element. + */ + protected function get_field_attributes($field, $default = array()){ + + // each nonstandard property will be extracted from the $props array so it is not auto-output in the field HTML + $no_output_props = apply_filters( 'gaddon_no_output_field_properties', + array( 'default_value', 'label', 'choices', 'feedback_callback', 'checked', 'checkbox_label', 'value', 'type', + 'validation_callback', 'required', 'hidden', 'tooltip', 'dependency' ), $field ); + + $default_props = array( + 'class' => '', // will default to gaddon-setting + 'default_value' => '' // default value that should be selected or entered for the field + ); + + // Property switch case + switch( $field['type'] ) { + case 'select': + $default_props['choices'] = array(); + break; + case 'checkbox': + $default_props['checked'] = false; + $default_props['checkbox_label'] = ''; + $default_props['choices'] = array(); + break; + case 'text': + default: + break; + } + + $props = wp_parse_args( $field, $default_props ); + $props['id'] = rgempty("id", $props) ? rgar( $props, 'name' ) : rgar( $props, "id"); + $props['class'] = trim("{$props['class']} gaddon-setting gaddon-{$props['type']}"); + + // extract no-output properties from $props array so they are not auto-output in the field HTML + foreach( $no_output_props as $prop ) { + if( isset( $props[$prop] ) ) { + ${$prop} = $props[$prop]; + unset( $props[$prop] ); + } + } + + //adding default attributes + foreach($default as $key=>$value){ + if(isset($props[$key])) + $props[$key] = $value . $props[$key]; + else + $props[$key] = $value; + } + + // get an array of property strings, example: name='myFieldName' + $prop_strings = array(); + foreach( $props as $prop => $value ) { + $prop_strings[$prop] = "{$prop}='" . esc_attr($value) . "'"; + } + + return $prop_strings; + } + + /** + * Parses the properties of the $choice meta array and returns a set of HTML attributes to be added to the HTML element. + * @param array $choice - current choice meta to be parsed. + * @param array $field_attributes - current field's attributes. + * @return array - resulting HTML attributes ready to be included in the HTML element. + */ + protected function get_choice_attributes($choice, $field_attributes){ + $choice_attributes = $field_attributes; + foreach( $choice as $prop => $val ) { + $no_output_choice_attributes = array( 'default_value', 'label', 'checked', 'value', 'type', + 'validation_callback', 'required', 'tooltip' ); + if(in_array($prop, $no_output_choice_attributes)) + unset($choice_attributes[$prop]); + else + $choice_attributes[$prop] = "{$prop}='" . esc_attr($val) . "'"; + } + return $choice_attributes; + } + + /** + * Validates settings fields. + * Validates that all fields are valid. Fields can be invalid when they are blank and marked as required or if it fails a custom validation check. + * To specify a custom validation, use the 'validation_callback' field meta property and implement the validation function with the custom logic. + * @param $fields - A list of all fields from the field meta configuration + * @param $settings - A list of submitted settings values + * @return bool - Returns true if all fields have passed validation, and false otherwise. + */ + protected function validate_settings( $fields, $settings ) { + + foreach( $fields as $section ) { + + if( ! $this->setting_dependency_met( rgar( $section, 'dependency' ) ) ) + continue; + + foreach( $section['fields'] as $field ) { + + if( ! $this->setting_dependency_met( rgar( $field, 'dependency' ) ) ) + continue; + + $field_setting = rgar( $settings, rgar( $field, 'name' ) ); + + if( is_callable( rgar( $field, 'validation_callback' ) ) ) { + call_user_func( rgar( $field, 'validation_callback' ), $field, $field_setting ); + } else if( rgar( $field, 'required' ) ) { + if( rgblank( $field_setting ) ) + $this->set_field_error( $field, rgar( $field, 'error_message' ) ); + } + + } + } + + $field_errors = $this->get_field_errors(); + $is_valid = empty( $field_errors ); + + return $is_valid; + } + + /** + * Sets the validation error message + * Sets the error message to be displayed when a field fails validation. + * When implementing a custom validation callback function, use this function to specify the error message to be displayed. + * + * @param array $field - The current field meta + * @param string $error_message - The error message to be displayed + */ + protected function set_field_error( $field, $error_message = '' ) { + + // set default error message if none passed + if( !$error_message ) + $error_message = __( 'This field is required.', 'gravityforms' ); + + $this->_setting_field_errors[$field['name']] = $error_message; + } + + /** + * Gets the validation errors for a field. + * Returns validation errors associated with the specified field or a list of all validation messages (if a field isn't specified) + * @param array|boolean $field - Optional. The field meta. When specified, errors for this field will be returned + * @return mixed - If a field is specified, a string containing the error message will be returned. Otherwise, an array of all errors will be returned + */ + protected function get_field_errors( $field = false ) { + + if( !$field ) + return $this->_setting_field_errors; + + return isset( $this->_setting_field_errors[$field['name']] ) ? $this->_setting_field_errors[$field['name']] : array(); + } + + /** + * Gets the invalid field icon + * Returns the markup for an alert icon to indicate and highlight invalid fields. + * @param array $field - The field meta. + * @return string - The full markup for the icon + */ + protected function get_error_icon( $field ) { + + $error = $this->get_field_errors( $field ); + + return ' + + '; + } + + /** + * Gets the required indicator + * Gets the markup of the required indicator symbol to highlight fields that are required + * @param $field - The field meta. + * @return string - Returns markup of the required indicator symbol + */ + protected function get_required_indicator( $field ) { + return '*'; + } + + /** + * Checks if the specified field failed validation + * + * @param $field - The field meta to be checked + * @return bool|mixed - Returns a validation error string if the field has failed validation. Otherwise returns false + */ + protected function field_failed_validation( $field ) { + $field_error = $this->get_field_errors( $field ); + return !empty( $field_error ) ? $field_error : false; + } + + protected function add_field_before( $name, $fields, $settings ) { + return $this->add_field( $name, $fields, $settings, 'before' ); + } + + protected function add_field_after( $name, $fields, $settings ) { + return $this->add_field( $name, $fields, $settings, 'after' ); + } + + protected function add_field( $name, $fields, $settings, $pos ) { + + if( rgar( $fields, 'name' ) ) + $fields = array( $fields ); + + $pos_mod = $pos == 'before' ? 0 : 1; + + foreach( $settings as &$section ) { + for( $i = 0; $i < count( $section['fields'] ); $i++ ) { + if( $section['fields'][$i]['name'] == $name ) { + array_splice( $section['fields'], $i + $pos_mod, 0, $fields ); + break 2; + } + } + } + + return $settings; + } + + protected function remove_field( $name, $settings ) { + + foreach( $settings as &$section ) { + for( $i = 0; $i < count( $section['fields'] ); $i++ ) { + if( $section['fields'][$i]['name'] == $name ) { + array_splice( $section['fields'], $i, 1 ); + break 2; + } + } + } + + return $settings; + } + + //-------------- Form settings --------------------------------------------------- + + /** + * Initializes form settings page + * Hooks up the required scripts and actions for the Form Settings page + */ + protected function form_settings_init() { + $view = rgget("view"); + $subview = rgget("subview"); + add_action('gform_form_settings_menu', array($this, 'add_form_settings_menu'), 10, 2); + if (rgget("page") == "gf_edit_forms" && $view == "settings" && $subview == $this->_slug && $this->current_user_can_any($this->_capabilities_form_settings)) { + require_once(GFCommon::get_base_path() . "/tooltips.php"); + add_action("gform_form_settings_page_" . $this->_slug, array($this, 'form_settings_page')); + } + } + + /** + * Initializes plugin settings page + * Hooks up the required scripts and actions for the Plugin Settings page + */ + protected function plugin_page_init(){ + + if($this->current_user_can_any($this->_capabilities_plugin_page)){ + //creates the subnav left menu + add_filter("gform_addon_navigation", array($this, 'create_plugin_page_menu')); + } + + } + + /** + * Creates plugin page menu item + * Target of gform_addon_navigation filter. Creates a menu item in the left nav, linking to the plugin page + * + * @param $menus - Current list of menu items + * @return array - Returns a new list of menu items + */ + public function create_plugin_page_menu($menus){ + + $menus[] = array("name" => $this->_slug, "label" => $this->get_short_title(), "callback" => array($this, "plugin_page_container"), "permission" => $this->_capabilities_plugin_page); + + return $menus; + } + + /** + * Renders the form settings page. + * + * Not intended to be overridden or called directly by Add-Ons. + * Sets up the form settings page. + * + * @ignore + */ + public function form_settings_page() { + + GFFormSettings::page_header($this->_title); + ?> +
          + +
          + + get_current_form(); + + $form_id = $form["id"]; + $form = apply_filters("gform_admin_pre_render_{$form_id}", apply_filters("gform_admin_pre_render", $form)); + + if($this->method_is_overridden('form_settings')){ + + //enables plugins to override settings page by implementing a form_settings() function + $this->form_settings($form); + } else { + + //saves form settings if save button was pressed + $this->maybe_save_form_settings($form); + + //reads current form settings + $settings = $this->get_form_settings($form); + $this->set_settings( $settings ); + + //reading addon fields + $sections = $this->form_settings_fields($form); + + GFCommon::display_admin_message(); + + //rendering settings based on fields and current settings + $this->render_settings( $sections ); + } + ?> + +
          + +
          + is_save_postback() ){ + + // store a copy of the previous settings for cases where action whould only happen if value has changed + $this->set_previous_settings( $this->get_form_settings( $form ) ); + + $settings = $this->get_posted_settings(); + $sections = $this->form_settings_fields($form); + + $is_valid = $this->validate_settings( $sections, $settings ); + $result = false; + + if( $is_valid ) + $result = $this->save_form_settings($form, $settings); + + if( $result ) { + GFCommon::add_message( $this->get_save_success_message($sections) ); + } else { + GFCommon::add_error_message( $this->get_save_error_message($sections) ); + } + + return $result; + } + + } + + /*** + * Saves form settings to form object + * + * @param array $form + * @param array $settings + * @return true|false True on success or false on error + */ + public function save_form_settings($form, $settings){ + $form[$this->_slug] = $settings; + $result = GFFormsModel::update_form_meta($form["id"], $form); + return ! (false === $result); + } + + /** + * Checks whether the current Add-On has a form settings page. + * + * @return bool + */ + private function has_form_settings_page() { + return $this->method_is_overridden('form_settings_fields') || $this->method_is_overridden('form_settings'); + } + + /** + * Custom form settings page + * Override this function to implement a complete custom form settings page. + * Before overriding this function, consider using the form_settings_fields() and specifying your field meta. + */ + protected function form_settings($form){} + + /** + * Checks whether the current Add-On has a plugin page. + * + * @return bool + */ + private function has_plugin_page() { + return $this->method_is_overridden('plugin_page'); + } + + /** + * Override this function to create a custom plugin page + */ + protected function plugin_page(){ + } + + /** + * Override this function to customize the plugin page icon + */ + protected function plugin_page_icon(){ + return ""; + } + + protected function plugin_page_title(){ + return $this->_title; + } + + /** + * Plugin page container + * Target of the plugin menu left nav icon. Displays the outer plugin page markup and calls plugin_page() to render the actual page. + * Override plugin_page() in order to provide a custom plugin page + */ + public function plugin_page_container(){ + ?> +
          + plugin_page_icon(); + if(!empty($icon)){ + ?> + <?php echo $this->get_short_title() ?> + + +

          plugin_page_title() ?>

          + plugin_page(); + ?> +
          + _slug ); + } + + /** + * Add the form settings tab. + * + * Override this function to add the tab conditionally. + * + * + * @param $tabs + * @param $form_id + * @return array + */ + public function add_form_settings_menu($tabs, $form_id) { + + $tabs[] = array("name" => $this->_slug, "label" => $this->get_short_title(), "query" => array("fid" => null)); + + return $tabs; + } + + /** + * Override this function to specify the settings fields to be rendered on the form settings page + */ + protected function form_settings_fields($form){ + // should return an array of sections, each section contains a title, description and an array of fields + return array(); + } + + //-------------- Plugin Settings --------------------------------------------------- + + protected function plugin_settings_init() { + $subview = rgget("subview"); + RGForms::add_settings_page( array( + 'name' => $this->get_short_title(), + 'tab_label' => $this->get_short_title(), + 'handler' => array($this, 'plugin_settings_page') + ) ); + if (rgget("page") == "gf_settings" && $subview == $this->get_short_title() && $this->current_user_can_any($this->_capabilities_settings_page)) { + require_once(GFCommon::get_base_path() . "/tooltips.php"); + } + } + + /** + * Plugin settings page + */ + public function plugin_settings_page() { + ?> + +

          plugin_settings_title() ?>

          + + method_is_overridden('plugin_settings')){ + //enables plugins to override settings page by implementing a plugin_settings() function + $this->plugin_settings(); + } + else if($this->maybe_uninstall()){ + ?> +
          + _title, "", ""), "gravityforms")?> +
          + maybe_save_plugin_settings(); + + //reads main addon settings + $settings = $this->get_plugin_settings(); + $this->set_settings( $settings ); + + //reading addon fields + $sections = $this->plugin_settings_fields(); + + GFCommon::display_admin_message(); + + //rendering settings based on fields and current settings + $this->render_settings( $sections, $settings); + + //renders uninstall section + $this->render_uninstall(); + + } + + } + + public function plugin_settings_title(){ + return $this->get_short_title() . ' ' . __( "Settings", "gravityforms" ); + } + + /** + * Override this function to add a custom settings page. + */ + protected function plugin_settings(){ + } + + + /** + * Checks whether the current Add-On has a settings page. + * + * @return bool + */ + public function has_plugin_settings_page() { + return $this->method_is_overridden('plugin_settings_fields') || $this->method_is_overridden('plugin_settings'); + } + + /** + * Returns the currently saved plugin settings + * @return mixed + */ + protected function get_plugin_settings() { + return get_option("gravityformsaddon_" . $this->_slug . "_settings"); + } + + /** + * Get plugin setting + * Returns the plugin setting specified by the $setting_name parameter + * @param string $setting_name - Plugin setting to be returned + * @return mixed - Returns the specified plugin setting or null if the setting doesn't exist + */ + protected function get_plugin_setting($setting_name){ + $settings = $this->get_plugin_settings(); + return isset($settings[$setting_name]) ? $settings[$setting_name] : null; + } + + /** + * Updates plugin settings with the provided settings + * + * @param array $settings - Plugin settings to be saved + */ + protected function update_plugin_settings($settings){ + update_option("gravityformsaddon_" . $this->_slug . "_settings", $settings); + } + + /** + * Saves the plugin settings if the submit button was pressed + * + */ + protected function maybe_save_plugin_settings(){ + + if( $this->is_save_postback() ) { + + // store a copy of the previous settings for cases where action whould only happen if value has changed + $this->set_previous_settings( $this->get_plugin_settings() ); + + $settings = $this->get_posted_settings(); + $sections = $this->plugin_settings_fields(); + $is_valid = $this->validate_settings( $sections, $settings ); + + if( $is_valid ) + $this->update_plugin_settings( $settings ); + + GFCommon::add_message( $this->get_save_success_message( $sections ) ); + } + + } + + /** + * Override this function to specify the settings fields to be rendered on the plugin settings page + * @return array + */ + public function plugin_settings_fields(){ + // should return an array of sections, each section contains a title, description and an array of fields + return array(); + } + + /** + * Returns an flattened array of field settings for the specified settings type ignoring sections. + * @param string $settings_type The settings type. e.g. 'plugin' + * @return array + */ + protected function settings_fields_only($settings_type = 'plugin') { + + $fields = array(); + + if (!is_callable(array($this, "{$settings_type}_settings_fields"))) + return $fields; + + $sections = call_user_func(array($this, "{$settings_type}_settings_fields")); + + foreach ($sections as $section) { + foreach ($section['fields'] as $field) { + $fields[] = $field; + } + } + + return $fields; + } + + //-------------- Uninstall --------------- + + /** + * Override this function to customize the markup for the uninstall section on the plugin settings page + */ + public function render_uninstall(){ + + ?> +
          + + current_user_can_any($this->_capabilities_uninstall)) { ?> +
          + +

          +
          + '; + echo $uninstall_button; + ?> +
          + +
          + uninstall_addon(); + } + + return false; + } + + /** + * Removes all settings and deactivates the Add-On. + * + * Not intended to be overridden or called directly by Add-Ons. + * + * @ignore + */ + public function uninstall_addon() { + + if (!$this->current_user_can_any($this->_capabilities_uninstall)) + die(__("You don't have adequate permission to uninstall this addon: " . $this->_title, "gravityforms")); + + $continue = $this->uninstall(); + if (false === $continue) + return false; + + global $wpdb; + $lead_meta_table = GFFormsModel::get_lead_meta_table_name(); + + $forms = GFFormsModel::get_forms(); + $all_form_ids = array(); + + // remove entry meta + foreach ($forms as $form) { + $all_form_ids[] = $form->id; + $entry_meta = $this->get_entry_meta(array(), $form->id); + if(is_array($entry_meta)){ + foreach(array_keys($entry_meta) as $meta_key){ + $sql = $wpdb->prepare("DELETE from $lead_meta_table WHERE meta_key=%s", $meta_key); + $wpdb->query($sql); + } + } + } + + //remove form settings + $form_metas = GFFormsModel::get_form_meta_by_id($all_form_ids); + require_once(GFCommon::get_base_path() . '/form_detail.php'); + foreach ($form_metas as $form_meta) { + if (isset($form_meta[$this->_slug])) { + unset($form_meta[$this->_slug]); + $form_json = json_encode($form_meta); + GFFormDetail::save_form_info($form_meta["id"], addslashes($form_json)); + } + } + + //removing options + delete_option("gravityformsaddon_" . $this->_slug . "_settings"); + delete_option("gravityformsaddon_" . $this->_slug . "_version"); + + + //Deactivating plugin + deactivate_plugins($this->_path); + update_option('recently_activated', array($this->_path => time()) + (array)get_option('recently_activated')); + + return true; + + } + + /** + * Called when the user chooses to uninstall the Add-On - after permissions have been checked and before removing + * all Add-On settings and Form settings. + * + * Override this method to perform additional functions such as dropping database tables. + * + * + * Return false to cancel the uninstall request. + */ + protected function uninstall() { + return true; + } + + //-------------- Enforce minimum GF version --------------------------------------------------- + + /** + * Target for the after_plugin_row action hook. Checks whether the current version of Gravity Forms + * is supported and outputs a message just below the plugin info on the plugins page. + * + * Not intended to be overridden or called directly by Add-Ons. + * + * @ignore + */ + public function plugin_row() { + if (!self::is_gravityforms_supported($this->_min_gravityforms_version)) { + $message = $this->plugin_message(); + self::display_plugin_message($message, true); + } + } + + /** + * Returns the message that will be displayed if the current version of Gravity Forms is not supported. + * + * Override this method to display a custom message. + */ + public function plugin_message() { + $message = sprintf(__("Gravity Forms " . $this->_min_gravityforms_version . " is required. Activate it now or %spurchase it today!%s", "gravityforms"), "", ""); + + return $message; + } + + /** + * Formats and outs a message for the plugin row. + * + * Not intended to be overridden or called directly by Add-Ons. + * + * @ignore + * + * @param $message + * @param bool $is_error + */ + public static function display_plugin_message($message, $is_error = false) { + $style = $is_error ? 'style="background-color: #ffebe8;"' : ""; + echo '
          ' . $message . '
          '; + } + + //--------------- Logging ------------------------------------------------------------- + + /** + * Writes an error message to the Gravity Forms log. Requires the Gravity Forms logging Add-On. + * + * Not intended to be overridden by Add-Ons. + * + * @ignore + */ + public function log_error($message){ + if (class_exists("GFLogging")) { + GFLogging::include_logger(); + GFLogging::log_message($this->_slug, $message, KLogger::ERROR); + } + } + + /** + * Writes an error message to the Gravity Forms log. Requires the Gravity Forms logging Add-On. + * + * Not intended to be overridden by Add-Ons. + * + * @ignore + */ + public function log_debug($message){ + if (class_exists("GFLogging")) { + GFLogging::include_logger(); + GFLogging::log_message($this->_slug, $message, KLogger::DEBUG); + } + } + + //--------------- Locking ------------------------------------------------------------ + + /** + * Returns the configuration for locking + * + * e.g. + * + * array( + * "object_type" => "contact", + * "capabilities" => array("gravityforms_contacts_edit_contacts"), + * "redirect_url" => admin_url("admin.php?page=gf_contacts"), + * "edit_url" => admin_url(sprintf("admin.php?page=gf_contacts&id=%d", $contact_id)), + * "strings" => $strings + * ); + * + * Override this method to implement locking + */ + public function get_locking_config() { + return array(); + } + + + /** + * Returns TRUE if the current page is the edit page. Otherwise, returns FALSE + * + * Override this method to implement locking on the edit page. + */ + public function is_locking_edit_page() { + return false; + } + /** + * Returns TRUE if the current page is the list page. Otherwise, returns FALSE + * + * Override this method to display locking info on the list page. + */ + public function is_locking_list_page() { + return false; + } + /** + * Returns TRUE if the current page is the view page. Otherwise, returns FALSE + * + * Override this method to display locking info on the view page. + */ + public function is_locking_view_page() { + return false; + } + /** + * Returns the ID of the object to be locked. E.g. Form ID + * + * Override this method to implement locking + */ + public function get_locking_object_id() { + return 0; + } + + /** + * Outputs information about the user currently editing the specified object + * + * @param int $object_id The Object ID + * @param bool $echo Whether to echo + * @return string The markup for the lock info + */ + public function lock_info($object_id, $echo = true) { + $gf_locking = new GFAddonLocking($this->get_locking_config(),$this); + $lock_info = $gf_locking->lock_info($object_id, false); + if ($echo) + echo $lock_info; + return $lock_info; + } + /** + * Outputs class for the row for the specified Object ID on the list page. + * + * @param int $object_id The object ID + * @param bool $echo Whether to echo + * @return string The markup for the class + */ + public function list_row_class($object_id, $echo = true) { + $gf_locking = new GFAddonLocking($this->get_locking_config(),$this); + $class = $gf_locking->list_row_class($object_id, false); + if ($echo) + echo $class; + return $class; + } + + + + //-------------- Helper functions --------------------------------------------------- + + protected final function method_is_overridden($method_name, $base_class="GFAddOn"){ + $reflector = new ReflectionMethod($this, $method_name); + $name = $reflector->getDeclaringClass()->getName(); + return $name !== $base_class; + } + + /** + * Returns the url of the root folder of the current Add-On. + * + * @param string $full_path Optional. The full path the the plugin file. + * @return string + */ + protected function get_base_url($full_path = "") { + if (empty($full_path)) + $full_path = $this->_full_path; + + return plugins_url(null, $full_path); + } + + /** + * Returns the url of the Add-On Framework root folder. + * + * @return string + */ + final public static function get_gfaddon_base_url() { + return plugins_url(null, __FILE__); + } + + /** + * Returns the physical path of the Add-On Framework root folder. + * + * @return string + */ + final public static function get_gfaddon_base_path() { + return self::_get_base_path(); + } + + /** + * Returns the physical path of the plugins root folder. + * + * @param string $full_path + * @return string + */ + protected function get_base_path($full_path = "") { + if (empty($full_path)) + $full_path = $this->_full_path; + $folder = basename(dirname($full_path)); + + return WP_PLUGIN_DIR . "/" . $folder; + } + + /** + * Returns the physical path of the Add-On Framework root folder + * + * @return string + */ + private static function _get_base_path() { + $folder = basename(dirname(__FILE__)); + + return GFCommon::get_base_path() . "/includes/" . $folder; + } + + /** + * Returns the URL of the Add-On Framework root folder + * + * @return string + */ + private static function _get_base_url() { + $folder = basename(dirname(__FILE__)); + + return GFCommon::get_base_url() . "/includes/" . $folder; + } + + /** + * Checks whether the Gravity Forms is installed. + * + * @return bool + */ + public function is_gravityforms_installed() { + return class_exists("GFForms"); + } + + public function table_exists($table_name){ + global $wpdb; + + $count = $wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"); + return !empty($count); + } + + /** + * Checks whether the current version of Gravity Forms is supported + * + * @param $min_gravityforms_version + * @return bool|mixed + */ + public function is_gravityforms_supported($min_gravityforms_version = "") { + if(isset($this->_min_gravityforms_version) && empty($min_gravityforms_version)) + $min_gravityforms_version = $this->_min_gravityforms_version; + + if(empty($min_gravityforms_version)) + return true; + + if (class_exists("GFCommon")) { + $is_correct_version = version_compare(GFCommon::$version, $min_gravityforms_version, ">="); + + return $is_correct_version; + } else { + return false; + } + } + + /** + * Returns this plugin's short title. Used to display the plugin title in small areas such as tabs + */ + protected function get_short_title() { + return isset( $this->_short_title ) ? $this->_short_title : $this->_title; + } + + /** + * Returns the URL for the plugin settings tab associated with this plugin + * + */ + protected function get_plugin_settings_url() { + return add_query_arg( array( 'page' => 'gf_settings', 'subview' => $this->get_short_title() ), admin_url('admin.php') ); + } + + /** + * When called from a page that supports it (i.e. entry detail, form editor and form settings), + * returns the current form object. Otherwise returns false + */ + protected function get_current_form(){ + +// if( $this->is_entry_edit() || +// $this->is_entry_view() || +// $this->is_entry_list() || +// $this->is_form_editor() || +// $this->is_form_settings() ) +// { + + return rgempty("id", $_GET) ? false : GFFormsModel::get_form_meta(rgget('id')); + } + + /** + * Returns TRUE if the current request is a postback, otherwise returns FALSE + */ + protected function is_postback(){ + return is_array($_POST) && count($_POST) > 0; + } + + /** + * Returns TRUE if the settings "Save" button was pressed + */ + protected function is_save_postback(){ + return !rgempty("gform-settings-save"); + } + + /** + * Returns TRUE if the current page is the form editor page. Otherwise, returns FALSE + */ + protected function is_form_editor(){ + + if(rgget("page") == "gf_edit_forms" && !rgempty("id", $_GET) && rgempty("view", $_GET)) + return true; + + return false; + } + + /** + * Returns TRUE if the current page is the form settings page, or a specific form settings tab (specified by the $tab parameter). Otherwise returns FALSE + * + * @param string $tab - Specifies a specific form setting page/tab + * @return bool + */ + protected function is_form_settings($tab = null){ + + $is_form_settings = rgget("page") == "gf_edit_forms" && rgget("view") == "settings"; + $is_tab = $this->_tab_matches($tab); + + if($is_form_settings && $is_tab){ + return true; + } + else{ + return false; + } + } + + private function _tab_matches($tabs){ + if($tabs == null) + return true; + + if(!is_array($tabs)) + $tabs = array($tabs); + + $current_tab = rgempty("subview", $_GET) ? "settings" : rgget("subview"); + + foreach($tabs as $tab){ + if( strtolower( $tab ) == strtolower( $current_tab ) ) + return true; + } + } + + /** + * Returns TRUE if the current page is the plugin settings main page, or a specific plugin settings tab (specified by the $tab parameter). Otherwise returns FALSE + * + * @param string $tab - Specifies a specific plugin setting page/tab. + * @return bool + */ + protected function is_plugin_settings($tab = ""){ + + $is_plugin_settings = rgget("page") == "gf_settings"; + $is_tab = $this->_tab_matches($tab); + + if($is_plugin_settings && $is_tab){ + return true; + } + else{ + return false; + } + } + + /** + * Returns TRUE if the current page is the plugin page. Otherwise returns FALSE + * @return bool + */ + protected function is_plugin_page(){ + + return strtolower(rgget("page")) == strtolower($this->_slug); + } + + /** + * Returns TRUE if the current page is the entry view page. Otherwise, returns FALSE + * @return bool + */ + protected function is_entry_view(){ + if(rgget("page") == "gf_entries" && rgget("view") == "entry" && (!isset($_POST["screen_mode"]) || rgpost("screen_mode") == "view")) + return true; + + return false; + } + + /** + * Returns TRUE if the current page is the entry edit page. Otherwise, returns FALSE + * @return bool + */ + protected function is_entry_edit(){ + if(rgget("page") == "gf_entries" && rgget("view") == "entry" && rgpost("screen_mode") == "edit") + return true; + + return false; + } + + protected function is_entry_list(){ + if( rgget("page") == "gf_entries" && rgempty("view", $_GET) ) + return true; + + return false; + } + + /** + * Returns TRUE if the current page is the results page. Otherwise, returns FALSE + */ + protected function is_results(){ + if(rgget("page") == "gf_entries" && rgget("view") == "gf_results_" . $this->_slug) + return true; + + return false; + } + + /** + * Returns TRUE if the current page is the print page. Otherwise, returns FALSE + */ + protected function is_print(){ + if(rgget("gf_page") == "print-entry") + return true; + + return false; + } + + /** + * Returns TRUE if the current page is the preview page. Otherwise, returns FALSE + */ + protected function is_preview(){ + if(rgget("gf_page") == "preview") + return true; + + return false; + } + +} diff --git a/src/wp-content/plugins/gravityforms/includes/addon/class-gf-auto-upgrade.php b/src/wp-content/plugins/gravityforms/includes/addon/class-gf-auto-upgrade.php new file mode 100644 index 0000000..230511f --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/addon/class-gf-auto-upgrade.php @@ -0,0 +1,194 @@ +_slug = $slug; + $this->_version = $version; + $this->_min_gravityforms_version = $min_gravityforms_version; + $this->_title = $title; + $this->_full_path = $full_path; + $this->_path = $path; + $this->_url = $url; + $this->_is_gravityforms_supported = $is_gravityforms_supported; + add_action('init', array($this, 'init')); + } + + public function init(){ + if (is_admin()) { + load_plugin_textdomain($this->_slug, FALSE, $this->_slug . '/languages'); + + add_filter('transient_update_plugins', array($this, 'check_update')); + add_filter('site_transient_update_plugins', array($this, 'check_update')); + add_action('install_plugins_pre_plugin-information', array($this, 'display_changelog')); + add_action('gform_after_check_update', array($this, 'flush_version_info')); + + if (RG_CURRENT_PAGE == "plugins.php") + add_action('after_plugin_row_' . $this->_path, array($this, 'rg_plugin_row')); + + } + + // ManageWP premium update filters + add_filter('mwp_premium_update_notification', array($this, 'premium_update_push')); + add_filter('mwp_premium_perform_update', array($this, 'premium_update')); + } + + public function rg_plugin_row() { + + if (!$this->_is_gravityforms_supported) { + $message = sprintf(__("Gravity Forms " . $this->_min_gravityforms_version . " is required. Activate it now or %spurchase it today!%s", "gravityforms"), "", ""); + GFAddOn::display_plugin_message($message, true); + } else { + $version_info = $this->get_version_info($this->_slug); + + if (!$version_info["is_valid_key"]) { + $title = $this->_title; + $new_version = version_compare($this->_version, $version_info["version"], '<') ? __("There is a new version of {$title} available.", 'gravityforms') . " " . sprintf(__('View version %s Details', 'gravityforms'), $version_info["version"]) . '. ' : ''; + $message = $new_version . sprintf(__('%sRegister%s your copy of Gravity Forms to receive access to automatic upgrades and support. Need a license key? %sPurchase one now%s.', 'gravityforms'), '', '', '', '') . '
        '; + GFAddOn::display_plugin_message($message); + } + } + } + + //Integration with ManageWP + public function premium_update_push($premium_update) { + + if (!function_exists('get_plugin_data')) + include_once(ABSPATH . 'wp-admin/includes/plugin.php'); + + $update = $this->get_version_info($this->_slug); + if ($update["is_valid_key"] == true && version_compare($this->_version, $update["version"], '<')) { + $plugin_data = get_plugin_data($this->_full_path); + $plugin_data['type'] = 'plugin'; + $plugin_data['slug'] = $this->_path; + $plugin_data['new_version'] = isset($update['version']) ? $update['version'] : false; + $premium_update[] = $plugin_data; + } + + return $premium_update; + } + + //Integration with ManageWP + public function premium_update($premium_update) { + + if (!function_exists('get_plugin_data')) + include_once(ABSPATH . 'wp-admin/includes/plugin.php'); + + $update = $this->get_version_info($this->_slug); + if ($update["is_valid_key"] == true && version_compare($this->_version, $update["version"], '<')) { + $plugin_data = get_plugin_data($this->_full_path); + $plugin_data['slug'] = $this->_path; + $plugin_data['type'] = 'plugin'; + $plugin_data['url'] = isset($update["url"]) ? $update["url"] : false; // OR provide your own callback function for managing the update + + array_push($premium_update, $plugin_data); + } + + return $premium_update; + } + + public function flush_version_info() { + $this->set_version_info($this->_slug, false); + } + + private function set_version_info($plugin_slug, $version_info){ + if ( function_exists('set_site_transient') ) + set_site_transient($plugin_slug . "_version", $version_info, 60*60*12); + else + set_transient($plugin_slug . "_version", $version_info, 60*60*12); + } + + public function check_update($option){ + + $key = $this->get_key(); + + $version_info = $this->get_version_info($this->_slug); + + if ( rgar($version_info, "is_error") == "1") + return $option; + + if(empty($option->response[$this->_path])) + $option->response[$this->_path] = new stdClass(); + + //Empty response means that the key is invalid. Do not queue for upgrade + if(!$version_info["is_valid_key"] || version_compare($this->_version, $version_info["version"], '>=')){ + unset($option->response[$this->_path]); + } + else{ + $option->response[$this->_path]->url = $this->_url; + $option->response[$this->_path]->slug = $this->_slug; + $option->response[$this->_path]->package = str_replace("{KEY}", $key, $version_info["url"]); + $option->response[$this->_path]->new_version = $version_info["version"]; + $option->response[$this->_path]->id = "0"; + } + + return $option; + + } + + private function display_upgrade_message($plugin_name, $plugin_title, $version, $message, $localization_namespace){ + $upgrade_message = $message .' '. sprintf(__('View version %s Details', $localization_namespace), $version) . '. '; + GFAddOn::display_plugin_message($upgrade_message); + } + + // Displays current version details on plugins page + public function display_changelog(){ + if ($_REQUEST["plugin"] != $this->_slug) + return; + $key = $this->get_key(); + $body = "key=$key"; + $options = array('method' => 'POST', 'timeout' => 3, 'body' => $body); + $options['headers'] = array( + 'Content-Type' => 'application/x-www-form-urlencoded; charset=' . get_option('blog_charset'), + 'Content-Length' => strlen($body), + 'User-Agent' => 'WordPress/' . get_bloginfo("version"), + 'Referer' => get_bloginfo("url") + ); + + $raw_response = wp_remote_request(GRAVITY_MANAGER_URL . "/changelog.php?" . $this->get_remote_request_params($this->_slug, $key, $this->_version), $options); + + if ( is_wp_error( $raw_response ) || 200 != $raw_response['response']['code']){ + $page_text = sprintf(__("Oops!! Something went wrong.%sPlease try again or %scontact us%s.", 'gravityforms'), "
        ", "", ""); + } + else{ + $page_text = $raw_response['body']; + if(substr($page_text, 0, 10) != "") + $page_text = ""; + } + echo stripslashes($page_text); + + exit; + } + + private function get_version_info($offering, $use_cache=true){ + + $version_info = GFCommon::get_version_info($use_cache); + $is_valid_key = $version_info["is_valid_key"] && rgars($version_info, "offerings/{$offering}/is_available"); + + $info = array("is_valid_key" => $is_valid_key, "version" => rgars($version_info, "offerings/{$offering}/version"), "url" => rgars($version_info, "offerings/{$offering}/url")); + + return $info; + } + + private function get_remote_request_params($offering, $key, $version){ + global $wpdb; + return sprintf("of=%s&key=%s&v=%s&wp=%s&php=%s&mysql=%s", urlencode($offering), urlencode($key), urlencode($version), urlencode(get_bloginfo("version")), urlencode(phpversion()), urlencode($wpdb->db_version())); + } + + private function get_key() { + if ($this->_is_gravityforms_supported) + return GFCommon::get_key(); + else + return ""; + } + + +} diff --git a/src/wp-content/plugins/gravityforms/includes/addon/class-gf-feed-addon.php b/src/wp-content/plugins/gravityforms/includes/addon/class-gf-feed-addon.php new file mode 100644 index 0000000..ca37ce8 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/addon/class-gf-feed-addon.php @@ -0,0 +1,1021 @@ +_feed_version) + $this->upgrade_base($installed_version); + + update_option("gravityformsaddon_feed-base_version", $this->_feed_version); + } + + private function upgrade_base($previous_version) { + global $wpdb; + + require_once(ABSPATH . '/wp-admin/includes/upgrade.php'); + if ( ! empty($wpdb->charset) ) + $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; + if ( ! empty($wpdb->collate) ) + $charset_collate .= " COLLATE $wpdb->collate"; + + $sql = "CREATE TABLE {$wpdb->prefix}gf_addon_feed ( + id mediumint(8) unsigned not null auto_increment, + form_id mediumint(8) unsigned not null, + is_active tinyint(1) not null default 1, + meta longtext, + addon_slug varchar(50), + PRIMARY KEY (id), + KEY addon_form (addon_slug,form_id) + ) $charset_collate;"; + + //Fixes issue with dbDelta lower-casing table names, which cause problems on case sensitive DB servers. + add_filter( 'dbdelta_create_queries', array("RGForms", "dbdelta_fix_case")); + + dbDelta($sql); + + remove_filter('dbdelta_create_queries', array("RGForms", "dbdelta_fix_case")); + } + + public function scripts() { + + $scripts = array( + array( + 'handle' => 'gform_form_admin', + 'enqueue' => array( array( "admin_page" => array("form_settings") ) ) + ), + array( + 'handle' => 'gform_gravityforms', + 'enqueue' => array( array( "admin_page" => array("form_settings") ) ) + ), + array( + 'handle' => 'gform_forms', + 'enqueue' => array( array( "admin_page" => array("form_settings") ) ) + ), + array( + 'handle' => 'json2', + 'enqueue' => array( array( "admin_page" => array("form_settings") ) ) + ), + array( + 'handle' => 'gform_placeholder', + 'enqueue' => array( + array( + "admin_page" => array("form_settings"), + "field_types" => array("feed_condition") + ) + ) + ) + ); + + return array_merge( parent::scripts(), $scripts ); + } + + protected function uninstall(){ + global $wpdb; + $sql = $wpdb->prepare( "DELETE FROM {$wpdb->prefix}gf_addon_feed WHERE addon_slug=%s", $this->_slug); + $wpdb->query($sql); + + } + + //-------- Front-end methods --------------------------- + + public function maybe_process_feed( $entry, $form, $is_delayed = false ) { + + // getting all active feeds + $feeds = $this->get_feeds( $form['id'] ); + + $paypal_feed = $this->get_paypal_feed( $form['id'], $entry ); + + $has_payment = self::get_paypal_payment_amount($form, $entry, $paypal_feed) > 0; + + if( $paypal_feed && rgar( $paypal_feed['meta'], "delay_{$this->_slug}" ) && $has_payment && !$is_delayed ) { + self::log_debug( "Feed processing delayed pending PayPal payment received for entry {$entry['id']}" ); + return; + } + + $processed_feeds = array(); + foreach ( $feeds as $feed ) { + if ( $this->is_feed_condition_met( $feed, $form, $entry ) ) { + $this->process_feed( $feed, $entry, $form ); + $processed_feeds[] = $feed["id"]; + } else { + self::log_debug( "Opt-in condition not met; not fulfilling entry {$entry["id"]} to list" ); + } + } + + if(!empty($processed_feeds)){ + $meta = gform_get_meta($entry["id"], "processed_feeds"); + if(empty($meta)) + $meta = array(); + + $meta[$this->_slug] = $processed_feeds; + + gform_update_meta( $entry["id"], "processed_feeds", $meta ); + } + } + + public function process_feed( $feed, $entry, $form ) { + + return; + } + + public function is_feed_condition_met( $feed, $form, $entry ) { + + $feed_meta = $feed['meta']; + $is_condition_enabled = rgar( $feed_meta, 'feed_condition_conditional_logic' ) == true; + $logic = rgars( $feed_meta, 'feed_condition_conditional_logic_object/conditionalLogic' ); + + if( !$is_condition_enabled || empty( $logic ) ) + return true; + + return GFCommon::evaluate_conditional_logic( $logic, $form, $entry ); + } + + public function get_paypal_feed( $form_id, $entry ) { + + if( !class_exists( 'GFPayPal' ) ) + return false; + + if( method_exists( 'GFPayPal', 'get_config_by_entry' ) ) { + $feed = GFPayPal::get_config_by_entry( $entry ); + } + else if(method_exists( 'GFPayPal', 'get_config' )){ + $feed = GFPayPal::get_config( $form_id ); + } + else{ + $feed = false; + } + + return $feed; + } + + + //-------- Feed data methods ------------------------- + + public function get_feeds( $form_id = null ){ + global $wpdb; + + $cache_key = implode( '_', array_filter( array( $this->_slug, 'get_feeds', $form_id ) ) ); + $feeds = GFCache::get( $cache_key ); + if( is_array( $feeds ) ) + return $feeds; + + $form_filter = is_numeric($form_id) ? $wpdb->prepare("AND form_id=%d", absint($form_id)) : ""; + + $sql = $wpdb->prepare("SELECT * FROM {$wpdb->prefix}gf_addon_feed + WHERE addon_slug=%s {$form_filter}", $this->_slug); + + $results = $wpdb->get_results($sql, ARRAY_A); + foreach($results as &$result){ + $result["meta"] = json_decode($result["meta"], true); + } + + GFCache::set( $cache_key, $results ); + + return $results; + } + + public function get_current_feed(){ + $feed_id = $this->get_current_feed_id(); + return empty($feed_id) ? false : $this->get_feed( $feed_id ); + } + + public function get_current_feed_id(){ + return rgempty('gf_feed_id') ? rgget("fid") : rgpost('gf_feed_id'); + } + + public function get_feed( $id ) { + global $wpdb; + + $sql = $wpdb->prepare("SELECT * FROM {$wpdb->prefix}gf_addon_feed WHERE id=%d", $id); + + $row = $wpdb->get_row($sql, ARRAY_A); + $row["meta"] = json_decode($row["meta"], true); + + return $row; + } + + public function get_processed_feeds($entry_id){ + $processed_feeds = gform_get_meta($entry_id, "processed_feeds"); + if(!$processed_feeds) + return false; + + return rgar($processed_feeds, $this->_slug); + } + + public function update_feed_meta($id, $meta){ + global $wpdb; + + $meta = json_encode($meta); + $wpdb->update("{$wpdb->prefix}gf_addon_feed", array( 'meta' => $meta ), array( 'id' => $id ), array('%s'), array('%d') ); + + return $wpdb->rows_affected > 0; + } + + public function update_feed_active($id, $is_active){ + global $wpdb; + $is_active = $is_active ? "1" : "0"; + + $wpdb->update("{$wpdb->prefix}gf_addon_feed", array('is_active'=>$is_active), array("id" => $id), array('%d'), array('%d')); + + return $wpdb->rows_affected > 0; + } + + public function insert_feed($form_id, $is_active, $meta){ + global $wpdb; + + $meta = json_encode($meta); + $wpdb->insert("{$wpdb->prefix}gf_addon_feed", array("addon_slug" => $this->_slug, "form_id"=> $form_id, "is_active"=>$is_active, 'meta'=>$meta), array('%s', '%d', '%d', '%s')); + + return $wpdb->insert_id; + } + + public function delete_feed($id){ + global $wpdb; + + $wpdb->delete("{$wpdb->prefix}gf_addon_feed", array("id" => $id), array('%d')); + } + + public function delete_feeds($form_id = null){ + global $wpdb; + + $where = is_numeric($form_id) ? array("addon_slug" => $this->_slug, "form_id" => $form_id) : array("addon_slug" => $this->_slug); + $format = is_numeric($form_id) ? array('%s','%d') : array('%s'); + + $wpdb->delete("{$wpdb->prefix}gf_addon_feed", $where, $format); + } + + + //---------- Form Settings Pages -------------------------- + + public function form_settings_init(){ + parent::form_settings_init(); + + if (RG_CURRENT_PAGE == "admin-ajax.php") { + add_action("wp_ajax_gf_feed_is_active_{$this->_slug}", array($this, 'ajax_toggle_is_active')); + } + } + + public function ajax_toggle_is_active(){ + $feed_id = rgpost("feed_id"); + $is_active = rgpost("is_active"); + + $this->update_feed_active($feed_id, $is_active); + die(); + } + public function form_settings_sections() { + return array(); + } + + public function form_settings($form) { + if( ! $this->_multiple_feeds || $this->is_detail_page() ) { + + // feed edit page + $feed_id = $this->_multiple_feeds ? $this->get_current_feed_id() : $this->get_default_feed_id($form["id"]) ; + + $this->feed_edit_page($form, $feed_id); + } + else { + // feed list UI + $this->feed_list_page($form); + } + } + + public function is_feed_list_page(){ + return !isset($_GET["fid"]); + } + + public function is_detail_page(){ + return !$this->is_feed_list_page(); + } + + public function form_settings_header(){ + if($this->is_feed_list_page()){ + $title = $this->form_settings_title(); + return $title . " " . __("Add New", "gravityforms") . ""; + } + } + + public function form_settings_title(){ + return $this->_title . " " . __("Feeds", "gravityforms"); + } + + protected function feed_edit_page($form, $feed_id) { + + // Save feed if appropriate + $feed_id = $this->maybe_save_feed_settings( $feed_id, $form['id'] ); + + ?> + +

        feed_settings_title() ?>

        + + + + get_feed( $feed_id ); + $this->set_settings( $feed['meta'] ); + + GFCommon::display_admin_message(); + + $this->render_settings( $this->get_feed_settings_fields($form) ); + + } + + public function feed_settings_title(){ + return __( "Feed Settings", "gravityforms" ); + } + + public function feed_list_page($form=null){ + $action = $this->get_bulk_action(); + if($action){ + check_admin_referer("feed_list", "feed_list"); + $this->process_bulk_action($action); + } + + $single_action = rgpost("single_action"); + if(!empty($single_action)){ + check_admin_referer("feed_list", "feed_list"); + $this->process_single_action($single_action); + } + + $columns = $this->feed_list_columns(); + $column_value_callback = array($this, "get_column_value"); + $feeds = $this->get_feeds(rgar($form,"id")); + $bulk_actions = $this->get_bulk_actions(); + $action_links = $this->get_action_links(); + + ?> +

        feed_list_title() ?>

        + _slug, $columns, $bulk_actions, $action_links, $column_value_callback); + $feed_list->prepare_items(); + $feed_list->display(); + + ?> + + + + + " name="id"> + + + + + + "0")); + return $this->get_short_title() . " " . __("Feeds", "gravityforms") . " " . __("Add New", "gravityforms") . ""; + } + + protected function maybe_save_feed_settings( $feed_id, $form_id ){ + + if( ! rgpost( 'gform-settings-save' ) ) + return $feed_id; + + // store a copy of the previous settings for cases where action whould only happen if value has changed + $feed = $this->get_feed( $feed_id ); + $this->set_previous_settings( $feed['meta'] ); + + $settings = $this->get_posted_settings(); + $sections = $this->get_feed_settings_fields(); + + $is_valid = $this->validate_settings( $sections, $settings ); + $result = false; + + if( $is_valid ) + $result = $this->save_feed_settings( $feed_id, $form_id, $settings ); + + if( $result ) { + GFCommon::add_message( $this->get_save_success_message($sections) ); + } else { + GFCommon::add_error_message( $this->get_save_error_message($sections) ); + } + + // if no $feed_id is passed, assume that a new feed was created and return new $feed_id + if( ! $feed_id ) + $feed_id = $result; + + return $feed_id; + } + + protected function get_save_success_message( $sections ) { + $save_button = $this->get_save_button($sections); + return isset($save_button["messages"]["success"]) ? $save_button["messages"]["success"] : __("Feed updated successfully.", "gravityforms") ; + } + + protected function get_save_error_message( $sections ) { + $save_button = $this->get_save_button($sections); + return isset($save_button["messages"]["error"]) ? $save_button["messages"]["error"] : __("There was an error updating this feed. Please review all errors below and try again.", "gravityforms") ; + } + + protected function save_feed_settings( $feed_id, $form_id, $settings ) { + + if( $feed_id ) { + $this->update_feed_meta( $feed_id, $settings ); + $result = true; + } else { + $result = $this->insert_feed( $form_id, true, $settings ); + } + + return $result; + } + + public function get_feed_settings_fields() { + + if( !empty( $this->_feed_settings_fields ) ) + return $this->_feed_settings_fields; + + $this->_feed_settings_fields = $this->add_default_feed_settings_fields_props( $this->feed_settings_fields() ); + + return $this->_feed_settings_fields; + } + + public function feed_settings_fields(){ + return array(); + } + + public function add_default_feed_settings_fields_props( $fields ) { + + foreach( $fields as &$section ) { + foreach( $section['fields'] as &$field ) { + switch( $field['type'] ) { + case 'field_map': + if( !rgar( $field, 'validation_callback' ) ) + $field['validation_callback'] = array( $this, 'validate_feed_map_settings' ); + break; + case 'hidden': + $field['hidden'] = true; + break; + } + } + } + + return $fields; + } + + private function get_bulk_action(){ + $action = rgpost("action"); + if(empty($action) || $action == "-1") + $action = rgpost("action2"); + + return empty($action) || $action == "-1" ? false : $action; + } + + /*** + * Override this function to add custom bulk actions + */ + protected function get_bulk_actions(){ + $bulk_actions = array('delete' => __('Delete', 'gravityforms')); + return $bulk_actions; + } + + /*** + * Override this function to process custom bulk actions added via the get_bulk_actions() function + * + * @param string $action: The bulk action selected by the user + */ + protected function process_bulk_action($action){ + if($action == "delete"){ + $feeds = rgpost("feed_ids"); + if(is_array($feeds)){ + foreach($feeds as $feed_id){ + $this->delete_feed($feed_id); + } + } + } + } + + protected function process_single_action($action){ + if($action == "delete"){ + $feed_id = absint(rgpost("single_action_argument")); + $this->delete_feed($feed_id); + } + } + + protected function get_action_links(){ + $feed_id = "{id}"; + $edit_url = add_query_arg(array("fid" => $feed_id)); + $links = array( + 'edit' => '' . __('Edit', 'gravityforms') . '', + 'delete' => '' . __('Delete', 'gravityforms') . '' + ); + + return $links; + } + + protected function feed_list_columns() { + return array(); + } + + public function get_column_value($item, $column) { + if(is_callable(array($this, "get_column_value_{$column}"))){ + return call_user_func(array($this, "get_column_value_{$column}"), $item); + } + else if(isset($item[$column])){ + return $item[$column]; + } + else if(isset($item["meta"][$column])){ + return $item["meta"][$column]; + } + } + + protected function update_form_settings($form, $new_form_settings) { + $feed_id = rgar($new_form_settings, "id"); + foreach ($new_form_settings as $key => $value) { + $form[$this->_slug]["feeds"][$feed_id][$key] = $value; + } + + return $form; + } + + protected function get_default_feed_id($form_id){ + global $wpdb; + + $sql = $wpdb->prepare("SELECT id FROM {$wpdb->prefix}gf_addon_feed WHERE addon_slug=%s AND form_id = %d LIMIT 0,1", $this->_slug, $form_id); + + $feed_id = $wpdb->get_var($sql); + if(!$feed_id) + $feed_id = 0; + return $feed_id; + } + + protected function settings_feed_condition( $field, $echo = true ) { + + $checkbox_label = isset($field["checkbox_label"]) ? $field["checkbox_label"] : __('Enable Condition', 'gravityforms'); + + $checkbox_field = array( + 'name' => 'feed_condition_conditional_logic', + 'type' => 'checkbox', + 'choices' => array( + array( + 'label' => $checkbox_label, + 'name' => 'feed_condition_conditional_logic' + ) + ), + 'onclick' => 'ToggleConditionalLogic( false, "feed_condition" );' + ); + + $conditional_logic = $this->get_setting( 'feed_condition_conditional_logic_object' ) ? json_encode( $this->get_setting( 'feed_condition_conditional_logic_object' ) ) : '{}'; + $hidden_field = array( + 'name' => 'feed_condition_conditional_logic_object', + 'value' => $conditional_logic + ); + $instructions = isset($field["instructions"]) ? $field["instructions"] : __("Process this feed if", "gravityforms"); + $html = $this->settings_checkbox( $checkbox_field, '', false ); + $html .= $this->settings_hidden( $hidden_field, '', false ); + $html .= '
        '; + $html .= ''; + + if( $echo ) + echo $html; + + return $html; + } + + protected function field_map_title(){ + return __("Field", "gravityforms"); + } + + public function settings_field_map( $field, $echo = true ) { + + $html = ''; + $field_map = rgar( $field, 'field_map' ); + + if( empty( $field_map ) ) + return $html; + + $form_id = rgget( 'id' ); + + $html .= ' + + + + + + + + '; + + foreach( $field['field_map'] as $child_field ) { + + if( ! $this->setting_dependency_met( rgar( $child_field, 'dependency' ) ) ) + continue; + + $child_field['name'] = $this->get_mapped_field_name( $field, $child_field['name'] ); + $required = rgar( $child_field, 'required' ) ? $this->get_required_indicator( $child_field ) : ''; + + $html .= ' + + + + '; + } + + $html .= ' + +
        ' . $this->field_map_title() . '' . __("Form Field", "gravityforms") . '
        + ' . + $this->settings_field_map_select( $child_field, $form_id ) . + '
        '; + + if( $echo ) + echo $html; + + return $html; + } + + public function settings_field_map_select( $field, $form_id ) { + + $field['choices'] = self::get_field_map_choices( $form_id ); + + return $this->settings_select( $field, false ); + } + + public static function get_field_map_choices( $form_id ) { + + $form = RGFormsModel::get_form_meta($form_id); + + $fields = array(); + + // Adding default fields + $fields[] = array( "value" => "", "label" => "" ); + $fields[] = array( "value" => "date_created" , "label" => __("Entry Date", "gravityforms") ); + $fields[] = array( "value" => "ip" , "label" => __("User IP", "gravityforms") ); + $fields[] = array( "value" => "source_url" , "label" => __("Source Url", "gravityforms") ); + $fields[] = array( "value" => "form_title" , "label" => __("Form Title", "gravityforms") ); + + // Populate entry meta + $entry_meta = GFFormsModel::get_entry_meta( $form["id"] ); + foreach( $entry_meta as $meta_key => $meta ) { + $fields[] = array( 'value' => $meta_key , 'label' => rgars($entry_meta, "{$meta_key}/label") ); + } + + // Populate form fields + if( is_array( $form["fields"] ) ) { + foreach( $form["fields"] as $field ) { + if( is_array( rgar( $field, "inputs") ) ) { + + //If this is an address field, add full name to the list + if(RGFormsModel::get_input_type($field) == "address") + $fields[] = array( 'value' => $field["id"], 'label' => GFCommon::get_label($field) . " (" . __("Full" , "gravityforms") . ")" ); + + //If this is a name field, add full name to the list + if(RGFormsModel::get_input_type($field) == "name") + $fields[] = array( 'value' => $field["id"], 'label' => GFCommon::get_label($field) . " (" . __("Full" , "gravityforms") . ")" ); + + //If this is a checkbox field, add to the list + if(RGFormsModel::get_input_type($field) == "checkbox") + $fields[] = array( 'value' => $field["id"], 'label' => GFCommon::get_label($field) . " (" . __("Selected" , "gravityforms") . ")" ); + + foreach($field["inputs"] as $input) + $fields[] = array( 'value' => $input["id"], 'label' => GFCommon::get_label($field, $input["id"]) ); + } + else if(!rgar($field,"displayOnly")){ + $fields[] = array( 'value' => $field["id"], 'label' => GFCommon::get_label($field)); + } + } + } + + return $fields; + } + + public static function add_entry_meta($form){ + $entry_meta = GFFormsModel::get_entry_meta($form["id"]); + $keys = array_keys($entry_meta); + foreach ($keys as $key){ + array_push($form["fields"],array("id" => $key , "label" => $entry_meta[$key]['label'])); + } + return $form; + } + + public function get_mapped_field_name( $parent_field, $field_name ) { + return "{$parent_field['name']}_{$field_name}"; + } + + public function validate_feed_map_settings( $field ) { + + $settings = $this->get_posted_settings(); + $field_map = rgar( $field, 'field_map' ); + + if( empty( $field_map ) ) + return; + + foreach( $field_map as $child_field ) { + + if( ! $this->setting_dependency_met( rgar( $child_field, 'dependency' ) ) ) + continue; + + $child_field['name'] = $this->get_mapped_field_name( $field, $child_field['name'] ); + $setting_value = rgar( $settings, $child_field['name'] ); + + if( rgar( $child_field, 'required' ) && rgblank( $setting_value ) ) { + $this->set_field_error( $child_field ); + } else if( rgar( $child_field, 'validation_callback' ) && is_callable( rgar( $child_field, 'validation_callback' ) ) ) { + call_user_func( rgar( $child_field, 'validation_callback' ), $child_field, $field ); + } + + } + + } + + public static function get_field_map_fields( $feed, $field_name ) { + + $fields = array(); + $prefix = "field_map_{$field_name}_"; + + foreach( $feed['meta'] as $name => $value ) { + if( strpos( $name, $prefix ) === 0 ) { + $name = str_replace( $prefix, '', $name ); + $fields[$name] = $value; + } + } + + return $fields; + } + + protected function has_feed_condition_field() { + + $fields = $this->settings_fields_only( 'feed' ); + + foreach( $fields as $field ) { + if( $field['type'] == 'feed_condition' ) + return true; + } + + return false; + } + + protected function add_delayed_payment_support( $options ) { + + $this->delayed_payment_integration = $options; + + if( is_admin() ) { + add_action( 'gform_paypal_action_fields', array( $this, 'add_paypal_settings' ), 10, 2); + add_filter( 'gform_paypal_save_config', array( $this, 'save_paypal_settings' ) ); + } else { + add_action( 'gform_paypal_fulfillment', array( $this, 'paypal_fulfillment' ), 10, 4 ); + } + + } + + public function add_paypal_settings( $feed, $form ) { + + $form_id = rgar( $form, 'id' ); + $feed_meta = $feed['meta']; + $settings_style = $this->has_feed( $form_id ) ? '' : 'display:none;'; + + $addon_name = $this->_slug; + $addon_feeds = array(); + foreach( $this->get_feeds( $form_id ) as $feed ) { + $addon_feeds[] = $feed['form_id']; + } + + ?> + +
      • + /> + +
      • + + + + _slug}"] = rgpost( "paypal_delay_{$this->_slug}" ); + return $feed; + } + + public function paypal_fulfillment( $entry, $config, $transaction_id, $amount ) { + + self::log_debug( "Checking PayPal fulfillment for transaction {$transaction_id}" ); + + $is_fulfilled = gform_get_meta( $entry['id'], "{$this->_slug}_is_fulfilled" ); + + if ( !$is_fulfilled ) { + + self::log_debug( "Entry {$entry['id']} has not been fulfilled." ); + $form = RGFormsModel::get_form_meta( $entry['form_id'] ); + $this->maybe_process_feed( $entry, $form, true ); + + // updating meta to indicate this entry has been fulfilled for the current add-on + self::log_debug( "Marking entry {$entry['id']} as fulfilled" ); + gform_update_meta( $entry['id'], "{$this->_slug}_is_fulfilled", true ); + + } else { + self::log_debug( "Entry {$entry['id']} is already fulfilled." ); + } + + } + + public static function get_paypal_payment_amount($form, $entry, $paypal_config){ + + $products = GFCommon::get_product_fields($form, $entry, true); + $recurring_field = rgar($paypal_config["meta"], "recurring_amount_field"); + $total = 0; + foreach($products["products"] as $id => $product){ + + if($paypal_config["meta"]["type"] != "subscription" || $recurring_field == $id || $recurring_field == "all"){ + $price = GFCommon::to_number($product["price"]); + if(is_array(rgar($product,"options"))){ + foreach($product["options"] as $option){ + $price += GFCommon::to_number($option["price"]); + } + } + + $total += $price * $product['quantity']; + } + } + + if($recurring_field == "all" && !empty($products["shipping"]["price"])) + $total += floatval($products["shipping"]["price"]); + + return $total; + } + + protected function has_feed( $form_id ) { + return $this->get_feeds( $form_id ) != false; + } + +} + + +if (!class_exists('WP_List_Table')) + require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php'); + +class GFAddOnFeedsTable extends WP_List_Table { + + public $_column_value_callback = array(); + public $_no_items_callback = array(); + + private $_feeds; + private $_slug; + private $_columns; + private $_bulk_actions; + private $_action_links; + + function __construct($feeds, $slug, $columns = array(), $bulk_actions, $action_links, $column_value_callback, $no_items_callback=null) { + $this->_bulk_actions = $bulk_actions; + $this->_feeds = $feeds; + $this->_slug = $slug; + $this->_columns = $columns; + $this->_column_value_callback = $column_value_callback; + $this->_action_links = $action_links; + $this->_no_items_callback = $no_items_callback; + + $standard_cols = array( + 'cb' => __('Checkbox', 'gravityforms'), + 'is_active' => '' + ); + + $all_cols = array_merge($standard_cols, $columns); + + $this->_column_headers = array( + $all_cols, + array(), + array() + ); + + parent::__construct(array( + 'singular' => __('feed', 'gravityforms'), + 'plural' => __('feeds', 'gravityforms'), + 'ajax' => false + )); + } + + function prepare_items() { + $this->items = isset($this->_feeds) ? $this->_feeds : array(); + } + + function get_bulk_actions() { + return $this->_bulk_actions; + } + + function no_items() { + $default = sprintf(__("You don't have any feeds configured. Let's go %screate one%s", "gravityforms"), "", ""); + $message = is_callable($this->_no_items_callback) ? $value = call_user_func($this->_no_items_callback) : $default; + + echo $message; + } + + function column_default($item, $column) { + if (is_callable($this->_column_value_callback)) { + $value = call_user_func($this->_column_value_callback, $item, $column); + } + + //adding action links to the first column of the list + $columns = array_keys($this->_columns); + if(is_array($columns) && count($columns) > 0 && $columns[0] == $column){ + $value = $this->add_action_links($item, $column, $value); + } + + return $value; + } + + function column_cb($item) { + $feed_id = rgar($item, "id"); + + return sprintf( + '', $feed_id + ); + } + + function add_action_links($item, $column, $value){ + + $actions = apply_filters($this->_slug . '_feed_actions', $this->_action_links, $item, $column); + + //replacing {id} merge variable with actual feed id + foreach($actions as $action => &$link){ + $link = str_replace("{id}", $item["id"], $link); + } + + return sprintf('%1$s %2$s', $value, $this->row_actions($actions)); + } + + /*function column_feed_name($item) { + $name = isset($item["name"]) ? $item["name"] : __("Untitled feed", "gravityforms"); + $feed_id = rgar($item, "id"); + $edit_url = add_query_arg(array("fid" => $feed_id)); + $actions = apply_filters($this->_slug . '_feed_actions', array( + 'edit' => '' . __('Edit', 'gravityforms') . '', + 'delete' => '' . __('Delete', 'gravityforms') . '' + )); + + return sprintf('%1$s %2$s', $name, $this->row_actions($actions)); + }*/ + + function column_is_active($item) { + $is_active = intval(rgar($item, "is_active")); + $src = GFCommon::get_base_url() . "/images/active{$is_active}.png"; + + $title = $is_active ? __("Active", "gravityforms") : __("Inactive", "gravityforms"); + $img = ""; + + return $img; + } +} diff --git a/src/wp-content/plugins/gravityforms/includes/addon/class-gf-payment-addon.php b/src/wp-content/plugins/gravityforms/includes/addon/class-gf-payment-addon.php new file mode 100644 index 0000000..6420728 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/addon/class-gf-payment-addon.php @@ -0,0 +1,1556 @@ +payment_method_is_overridden("check_status")) + $this->setup_cron(); + + } + + public function init_admin() { + + parent::init_admin(); + + //enables credit card field + add_filter("gform_enable_credit_card_field", "__return_true"); + + add_filter("gform_currencies", array($this, "supported_currencies")); + + if(rgget("page") == "gf_entries"){ + add_action('gform_entry_info',array($this, "entry_info"), 10, 2); + } + } + + public function init_frontend(){ + + parent::init_frontend(); + + add_filter("gform_confirmation", array($this, "confirmation"), 20, 4); + + add_filter("gform_validation", array($this, "validation")); + add_action("gform_entry_post_save", array($this, "entry_post_save"), 10, 2); + } + + public function init_ajax(){ + parent::init_ajax(); + + add_action('wp_ajax_gaddon_cancel_subscription', array($this, 'start_cancel_subscription')); + + } + + protected function setup(){ + parent::setup(); + + //upgrading Feed Add-On base class + $installed_version = get_option("gravityformsaddon_payment_version"); + if ($installed_version != $this->_payment_version) + $this->upgrade_payment($installed_version); + + update_option("gravityformsaddon_payment_version", $this->_payment_version); + } + + private function upgrade_payment($previous_version) { + global $wpdb; + + $charset_collate = GFFormsModel::get_db_charset(); + + $sql = "CREATE TABLE {$wpdb->prefix}gf_addon_payment_transaction ( + id int(10) unsigned not null auto_increment, + lead_id int(10) unsigned not null, + transaction_type varchar(30) not null, + transaction_id varchar(50), + is_recurring tinyint(1) not null default 0, + amount decimal(19,2), + date_created datetime, + PRIMARY KEY (id), + KEY lead_id (lead_id), + KEY trasanction_type (transaction_type), + KEY type_lead (lead_id,transaction_type) + ) $charset_collate;"; + + GFFormsModel::dbDelta($sql); + } + + //--------- Submission Process ------ + public function confirmation($confirmation, $form, $entry, $ajax){ + + if(!$this->payment_method_is_overridden('redirect_url')) + return $confirmation; + + $feed = $this->get_payment_feed($entry, $form); + + if(!$feed) + return $confirmation; + + $submission_data = $this->get_submission_data($feed, $form, $entry); + + $url = $this->redirect_url($feed, $submission_data, $form, $entry); + + if($url) + $confirmation = array("redirect" => $url); + + return $confirmation; + } + + /** + * Override this function to specify a URL to the third party payment processor. Useful when developing a payment gateway that processes the payment outsite of the website (i.e. PayPal Standard). + * @param $feed - Active payment feed containing all the configuration data + * @param $submission_data - Contains form field data submitted by the user as well as payment information (i.e. payment amount, setup fee, line items, etc...) + * @param $form - Current form array containing all form settings + * @param $entry - Current entry array containing entry information (i.e data submitted by users) + * @return string - Return a full URL (inlucing http:// or https://) to the payment processor + */ + protected function redirect_url($feed, $submission_data, $form, $entry){ + + } + + public function validation( $validation_result ) { + + if( ! GFFormDisplay::is_last_page( $validation_result['form'] ) ) + return $validation_result; + + $has_authorize = $this->payment_method_is_overridden('authorize'); + $has_subscribe = $this->payment_method_is_overridden('subscribe'); + if(!$has_authorize && !$has_subscribe) + return $validation_result; + + //Getting submission data + $form = $validation_result["form"]; + $entry = GFFormsModel::create_lead($form); + $feed = $this->get_payment_feed($entry, $form); + + if(!$feed) + return $validation_result; + + $do_authorization = $has_authorize && $feed["meta"]["transactionType"] == "product"; + $do_subscription = $has_subscribe && $feed["meta"]["transactionType"] == "subscription"; + + if(!$do_authorization && !$do_subscription) + return $validation_result; + + $submission_data = $this->get_submission_data($feed, $form, $entry); + + //Running an authorization only transaction if function is implemented and this is a single payment + if($do_authorization){ + $this->authorization = $this->authorize($feed, $submission_data, $form, $entry); + } + else if($do_subscription){ + $subscription = $this->subscribe($feed, $submission_data, $form, $entry); + + $this->authorization["is_authorized"] = $subscription["is_success"]; + $this->authorization["error_message"] = rgar($subscription, "error_message"); + $this->authorization["subscription"] = $subscription; + } + + + $this->authorization["feed"] = $feed; + $this->authorization["submission_data"] = $submission_data; + + if(!$this->authorization["is_authorized"]){ + $validation_result = $this->get_validation_result($validation_result, $this->authorization); + + //Setting up current page to point to the credit card page since that will be the highlighted field + GFFormDisplay::set_current_page($validation_result["form"]["id"], $validation_result["credit_card_page"]); + } + + return $validation_result; + } + + /** + * Override this method to add integration code to the payment processor in order to authorize a credit card with or without capturing payment. This method is executed during the form validation process and allows + * the form submission process to fail with a validation error if there is anything wrong with the payment/authorization. This method is only supported by single payments. + * For subscriptions or recurring payments, use the subscribe() method. + * @param $feed - Current configured payment feed + * @param $submission_data - Contains form field data submitted by the user as well as payment information (i.e. payment amount, setup fee, line items, etc...) + * @param $form - Current form array containing all form settings + * @param $entry - Current entry array containing entry information (i.e data submitted by users). NOTE: the entry hasn't been saved to the database at this point, so this $entry object does not have the "ID" property and is only a memory representation of the entry. + * @return array - Return an $authorization array in the following format: + * [ + * "is_authorized" => true|false, + * "error_message" => "Error message", + * "transaction_id" => "XXX", + * + * //If the payment is captured in this method, return a "captured_payment" array with the following information about the payment + * "captured_payment" => ["is_success"=>true|false, "error_message" => "error message", "transaction_id" => "xxx", "amount" => 20] + * ] + */ + protected function authorize($feed, $submission_data, $form, $entry){ + + } + + /** + * Override this method to capture a single payment that has been authorized via the authorize() method. Use only with single payments. For subscriptions, use subscribe() instead. + * @param $authorization - Contains the result of the authorize() function + * @param $feed - Current configured payment feed + * @param $submission_data - Contains form field data submitted by the user as well as payment information (i.e. payment amount, setup fee, line items, etc...) + * @param $form - Current form array containing all form settings + * @param $entry - Current entry array containing entry information (i.e data submitted by users). + * @return array - Return an array with the information about the captured payment in the following format: + [ + * "is_success"=>true|false, + * "error_message" => "error message", + * "transaction_id" => "xxx", + * "amount" => 20, + * "payment_method" => "Visa" + * ] + */ + protected function capture($authorization, $feed, $submission_data, $form, $entry){ + + } + + /** + * Override this method to add integration code to the payment processor in order to create a subscription. This method is executed during the form validation process and allows + * the form submission process to fail with a validation error if there is anything wrong when creating the subscription. + * @param $feed - Current configured payment feed + * @param $submission_data - Contains form field data submitted by the user as well as payment information (i.e. payment amount, setup fee, line items, etc...) + * @param $form - Current form array containing all form settings + * @param $entry - Current entry array containing entry information (i.e data submitted by users). NOTE: the entry hasn't been saved to the database at this point, so this $entry object does not have the "ID" property and is only a memory representation of the entry. + * @return array - Return an $subscription array in the following format: + * [ + * "is_success"=>true|false, + * "error_message" => "error message", + * "subscription_id" => "xxx", + * "amount" => 10 + * + * //To implement an initial/setup fee for gateways that don't support setup fees as part of subscriptions, manually capture the funds for the setup fee as a separate transaction and send that payment + * //information in the following "captured_payment" array + * "captured_payment" => ["name" => "Setup Fee", "is_success"=>true|false, "error_message" => "error message", "transaction_id" => "xxx", "amount" => 20] + * ] + */ + protected function subscribe($feed, $submission_data, $form, $entry){ + + } + + + protected function get_validation_result($validation_result, $authorization_result){ + + $credit_card_page = 0; + foreach($validation_result["form"]["fields"] as &$field) + { + if($field["type"] == "creditcard") + { + $field["failed_validation"] = true; + $field["validation_message"] = $authorization_result["error_message"]; + $credit_card_page = $field["pageNumber"]; + break; + } + } + + $validation_result["credit_card_page"] = $credit_card_page; + $validation_result["is_valid"] = false; + + return $validation_result; + + } + + public function entry_post_save($entry, $form){ + + //Abort if authorization wasn't done. + if(empty($this->authorization)) + return $entry; + + $feed = $this->authorization["feed"]; + + if($feed["meta"]["transactionType"] == "product"){ + + if($this->payment_method_is_overridden('capture') && rgempty("captured_payment", $this->authorization)){ + $capture_response = $this->capture($this->authorization, $feed, $this->authorization["submission_data"], $form, $entry); + $this->authorization["captured_payment"] = $capture_response; + } + + $this->process_capture($this->authorization, $feed, $this->authorization["submission_data"], $form, $entry); + + } + else if($feed["meta"]["transactionType"] == "subscription"){ + + $this->process_subscription($this->authorization, $feed, $this->authorization["submission_data"], $form, $entry); + } + + return $entry; + } + + protected function process_capture($authorization, $feed, $submission_data, $form, $entry){ + + $payment = rgar($authorization,"captured_payment"); + if(empty($payment)) + return; + + if($payment["is_success"]){ + + $entry["transaction_id"] = $payment["transaction_id"]; + $entry["transaction_type"] = "1"; + $entry["is_fulfilled"] = true; + $entry["currency"] = GFCommon::get_currency(); + $entry["payment_amount"] = $payment["amount"]; + $entry["payment_status"] = "Paid"; + $entry["payment_date"] = gmdate("Y-m-d H:i:s"); + $entry["payment_method"] = $payment["payment_method"]; + + $this->insert_transaction($entry["id"], "payment", $entry["transaction_id"], $entry["payment_amount"]); + + GFFormsModel::add_note($entry["id"], 0, "System", sprintf(__("Payment has been captured successfully. Amount: %s. Transaction Id: %s", "gravityforms"), GFCommon::to_money($payment["amount"], $entry["currency"]),$payment["transaction_id"])); + } + else{ + $entry["payment_status"] = "Failed"; + GFFormsModel::add_note($entry["id"], 0, "System", sprintf( __("Payment failed to be captured. Reason: %s", "gravityforms") , $payment["error_message"] )); + } + + GFAPI::update_entry($entry); + + return $entry; + + } + + protected function process_subscription($authorization, $feed, $submission_data, $form, $entry){ + + $subscription = rgar($authorization,"subscription"); + if(empty($subscription)) + return; + + //If setup fee / trial is captured as part of a separate transaction + $payment = rgar($subscription,"captured_payment"); + $payment_name = rgempty("name", $payment) ? __("Initial payment", "gravityforms") : $payment["name"]; + if($payment && $payment["is_success"]){ + + $this->insert_transaction($entry["id"], "payment", $payment["transaction_id"], $payment["amount"]); + GFFormsModel::add_note($entry["id"], 0, "System", sprintf(__("%s has been captured successfully. Amount: %s. Transaction Id: %s", "gravityforms"), $payment_name, GFCommon::to_money($payment["amount"], $entry["currency"]),$payment["transaction_id"])); + + } + else if($payment && !$payment["is_success"]){ + + GFFormsModel::add_note($entry["id"], 0, "System", sprintf(__("Failed to capture %s. Reason: %s.", "gravityforms"), $payment("error_message"), $payment_name)); + } + + //Updating subscription information + if($subscription["is_success"]){ + + $entry["transaction_id"] = $subscription["subscription_id"]; + $entry["transaction_type"] = "2"; + $entry["is_fulfilled"] = true; + $entry["currency"] = GFCommon::get_currency(); + $entry["payment_amount"] = $subscription["amount"]; + $entry["payment_status"] = "Active"; + $entry["payment_date"] = gmdate("Y-m-d H:i:s"); + + GFFormsModel::add_note($entry["id"], 0, "System", sprintf(__("Subscription successfully created. Subscription Id: %s.", "gravityforms"), $subscription["subscription_id"])); + + } + else{ + $entry["payment_status"] = "Failed"; + + GFFormsModel::add_note($entry["id"], 0, "System", sprintf( __("Subscription failed to be created. Reason: %s", "gravityforms") , $subscription["error_message"])); + } + + GFFormsModel::update_lead($entry); + + return $entry; + } + + + + protected function insert_transaction($entry_id, $transaction_type, $transaction_id, $amount){ + global $wpdb; + + $payment_count = $wpdb->get_var($wpdb->prepare("SELECT count(id) FROM {$wpdb->prefix}gf_addon_payment_transaction WHERE lead_id=%d", $entry_id)); + $is_recurring = $payment_count > 0 && $transaction_type == "payment" ? 1 : 0; + + $sql = $wpdb->prepare(" INSERT INTO {$wpdb->prefix}gf_addon_payment_transaction (lead_id, transaction_type, transaction_id, amount, is_recurring, date_created) + values(%d, %s, %s, %f, %d, utc_timestamp())", $entry_id, $transaction_type, $transaction_id, $amount, $is_recurring); + $wpdb->query($sql); + + return $wpdb->insert_id; + } + + public function get_payment_feed($entry, $form) { + $submission_feed = GFCache::get("payment_feed"); + + if(!$submission_feed){ + + if(!empty($entry["id"])){ + $feeds = $this->get_processed_feeds($entry["id"]); + $submission_feed = $this->get_feed($feeds[0]); + } + else{ + // getting all active feeds + $feeds = $this->get_feeds( $form['id'] ); + + foreach ( $feeds as $feed ) { + if ( $this->is_feed_condition_met( $feed, $form, $entry ) ){ + $submission_feed = $feed; + break; + } + } + } + GFCache::set("payment_feed", $submission_feed); + } + + return $submission_feed; + } + + protected function is_payment_gateway($entry_id){ + $feeds = $this->get_processed_feeds($entry_id); + return is_array($feeds) && count($feeds) > 0; + } + + protected function get_submission_data($feed, $form, $entry){ + + $form_data = array(); + + $form_data["form_title"] = $form["title"]; + + //getting mapped field data + $billing_fields = $this->billing_info_fields(); + foreach($billing_fields as $billing_field){ + $field_name = $billing_field["name"]; + $form_data[$field_name] = rgpost('input_'. str_replace(".", "_", rgar($feed["meta"],"billingInformation_{$field_name}") )); + } + + //getting credit card field data + $card_field = $this->get_creditcard_field($form); + if($card_field){ + + $form_data["card_number"] = rgpost("input_{$card_field["id"]}_1"); + $form_data["card_expiration_date"] = rgpost("input_{$card_field["id"]}_2"); + $form_data["card_security_code"] = rgpost("input_{$card_field["id"]}_3"); + $form_data["card_name"] = rgpost("input_{$card_field["id"]}_5"); + +// $names = explode(" ", $form_data["card_name"]); +// $form_data["card_first_name"] = rgar($names,0); +// $form_data["card_last_name"] = rgempty(1,$names) ? rgar($names,0) : rgar($names,1); + + } + + //getting product field data + $order_info = $this->get_order_data($feed, $form, $entry); + $form_data = array_merge($form_data, $order_info); + + return $form_data; + } + + protected function get_creditcard_field($form){ + $fields = GFCommon::get_fields_by_type($form, array("creditcard")); + return empty($fields) ? false : $fields[0]; + } + + private function get_order_data($feed, $form, $entry){ + + $products = GFCommon::get_product_fields($form, $entry); + + $payment_field = $feed["meta"]["transactionType"] == "product" ? $feed["meta"]["paymentAmount"] : $feed["meta"]["recurringAmount"]; + $setup_fee_field = rgar($feed["meta"],"setupFee_enabled") ? $feed["meta"]["setupFee_product"] : false; + $trial_field = rgar($feed["meta"], "trial_enabled") ? $feed["meta"]["trial_product"] : false; + + $amount = 0; + $line_items = array(); + $fee_amount = 0; + $trial_amount = 0; + foreach($products["products"] as $field_id => $product) + { + + $quantity = $product["quantity"] ? $product["quantity"] : 1; + $product_price = GFCommon::to_number($product['price']); + + $options = array(); + if(is_array(rgar($product, "options"))){ + foreach($product["options"] as $option){ + $options[] = $option["option_name"]; + $product_price += $option["price"]; + } + } + + if(!empty($trial_field) && $trial_field == $field_id){ + $trial_amount = $product_price * $quantity; + } + else if(!empty($setup_fee_field) && $setup_fee_field == $field_id){ + $fee_amount = $product_price * $quantity; + } + else + { + if(is_numeric($payment_field) && $payment_field != $field_id) + continue; + + $amount += $product_price * $quantity; + + $description = ""; + if(!empty($options)) + $description = __("options: ", "gravityforms") . " " . implode(", ", $options); + + if($product_price >= 0){ + $line_items[] = array("id" => $field_id, "name"=>$product["name"], "description" =>$description, "quantity" =>$quantity, "unit_price"=>GFCommon::to_number($product_price)); + } + } + } + + if(!empty($products["shipping"]["name"]) && !is_numeric($payment_field)){ + $line_items[] = array("id" => "", "name"=>$products["shipping"]["name"], "description" =>"", "quantity" =>1, "unit_price"=>GFCommon::to_number($products["shipping"]["price"])); + $amount += $products["shipping"]["price"]; + } + + return array("payment_amount" => $amount, "setup_fee" => $fee_amount, "trial" => $trial_amount, "line_items" => $line_items); + } + + + //--------- Callback ---------------- + public function maybe_process_callback(){ + + //Ignoring requests that are not this addon's callbacks + if( rgget("callback") != $this->_slug || !$this->payment_method_is_overridden("callback")) + return; + + $result = $this->callback(); + + if(is_wp_error($result)){ + status_header(500); + echo $result->get_error_message(); + } + else{ + status_header(200); + echo "Callback processed successfully."; + } + + die(); + } + + protected function callback(){ + + } + + + // -------- Cron -------------------- + protected function setup_cron() + { + // Setting up cron + $cron_name = "{$this->_slug}_cron"; + + add_action($cron_name, array($this, "check_status")); + + if (!wp_next_scheduled($cron_name)) + wp_schedule_event(time(), "daily", $cron_name); + + + } + + public function check_status(){ + + } + + //--------- List Columns ------------ + protected function feed_list_columns() { + return array( + 'feedName' => __( 'Name', 'gravityforms' ), + 'transactionType' => __('Transaction Type', 'gravityforms'), + 'amount' => __('Amount', 'gravityforms') + ); + } + + public function get_column_value_transactionType($feed){ + switch(rgar($feed["meta"], "transactionType")){ + case "subscription" : + return __("Subscription", "gravityforms"); + break; + case "product" : + return __("Products and Services", "gravityforms"); + break; + + } + return __("Unsupported transaction type", "gravityforms"); + } + + public function get_column_value_amount($feed){ + $form = $this->get_current_form(); + $field_id = $feed["meta"]["transactionType"] == "subscription" ? $feed["meta"]["recurringAmount"] : $feed["meta"]["paymentAmount"]; + if($field_id == "form_total"){ + $label = __("Form Total", "gravityforms"); + } + else{ + $field = GFFormsModel::get_field($form, $field_id); + $label = GFCommon::get_label($field); + } + + return $label; + } + + + //--------- Feed Settings ---------------- + public function feed_settings_fields() { + return array( + + array( + //"title" => __("Feed Settings", "gravityforms"), + "description" => '', + "fields" => array( + array( + "name" => "feedName", + "label" => __("Name", "gravityforms"), + "type" => "text", + "required" => true + ), + array( + "name"=> "transactionType", + "label" => __("Transaction Type", "gravityforms"), + "type" => "select", + "onchange" => "jQuery(this).parents('form').submit();", //TODO: move this to base class + "choices" => array( + array("label" => __("Select a transaction type", "gravityforms"), "value" => ""), + array("label" => __("Products and Services", "gravityforms"), "value" => "product"), + array("label" => __("Subscription", "gravityforms"), "value" => "subscription") + ) + ) + ) + ), + + array( + 'title' => 'Subscription Settings', + 'dependency' => array( + "field" => "transactionType", + "values" => array("subscription") + ), + 'fields' => array( + array( + "name" => "recurringAmount", + "label" => __("Recurring Amount", "gravityforms"), + "type" => "select", + "choices" => $this->recurring_amount_choices(), + "required" => true + ), + array( + "name" => "billingCycle", + "label" => __("Billing Cycle", "gravityforms"), + "type" => "billing_cycle", + ), + array( + "name" => "recurringTimes", + "label" => __("Recurring Times", "gravityforms"), + "type" => "select", + "choices" => array(array("label" => "infinite", "value" => "0")) + $this->get_numeric_choices(1,100) + ), + array( + "name" => "setupFee", + "label" => __("Setup Fee", "gravityforms"), + "type" => "setup_fee", + ), + array( + "name" => "trial", + "label" => __("Trial", "gravityforms"), + "type" => "trial", + "hidden" => $this->get_setting("setupFee_enabled") + ) + ) + ), + + array( + 'title' => 'Product & Services Settings', + 'dependency' => array( + 'field' => 'transactionType', + 'values' => array( 'product' ) + ), + 'fields' => array( + array( + "name" => "paymentAmount", + "label" => __("Payment Amount", "gravityforms"), + "type" => "select", + "choices" => $this->product_amount_choices(), + "required" => true + ) + ) + ), + + array( + 'title' => __( 'Other Settings', 'gravityforms' ), + 'dependency' => array( + 'field' => 'transactionType', + 'values' => array( 'subscription', 'product' ) + ), + 'fields' => array( + array( + "name" => "billingInformation", + "label" => __("Billing Information", "gravityforms"), + "type" => "field_map", + "field_map" => $this->billing_info_fields() + ), + array( + "name" => "options", + "label" => __("Options", "gravityforms"), + "type" => "checkbox", + "choices" => $this->option_choices() + ), + array( + "name" => "conditionalLogic", + "label" => __("Conditional Logic", "gravityforms"), + "type" => "feed_condition" + ) + ) + ) + + ); + } + + public function settings_billing_cycle( $field, $echo = true ) { + + $intervals = $this->supported_billing_intervals(); + + //Length drop down + $interval_keys = array_keys($intervals); + $first_interval = $intervals[$interval_keys[0]]; + $length_field = array( + "name" => $field["name"] . "_length", + "type" => "select", + "choices" => $this->get_numeric_choices($first_interval["min"], $first_interval["max"]) + ); + + $html = $this->settings_select( $length_field, false ); + + //Unit drop down + $choices = array(); + foreach($intervals as $unit => $interval){ + if(!empty($interval)) + $choices[] = array("value" => $unit, "label" => $interval["label"]); + } + + $unit_field = array( + "name" => $field["name"] . "_unit", + "type" => "select", + "onchange" => "loadBillingLength('" . esc_attr($field["name"]) . "')", + "choices" => $choices + ); + + $html .= " " . $this->settings_select( $unit_field, false ); + + $html .= ""; + + if( $echo ) + echo $html; + + return $html; + } + + public function settings_setup_fee( $field, $echo = true ) { + + $enabled_field = array( + "type" => "checkbox", + "horizontal" => true, + "choices" => array( + array( "label" => __("Enabled", "gravityforms"), + "name" => $field["name"] . "_enabled", + "value"=>"1", + "onchange" => "if(jQuery(this).prop('checked')){jQuery('#{$field["name"]}_product').show('slow'); jQuery('#gaddon-setting-row-trial').hide('slow');} else {jQuery('#{$field["name"]}_product').hide('slow'); jQuery('#gaddon-setting-row-trial').show('slow');}" + )) + ); + + $html = $this->settings_checkbox( $enabled_field, false ); + + $form = $this->get_current_form(); + + $is_enabled = $this->get_setting("{$field["name"]}_enabled"); + + $product_field = array( + "name" => $field["name"] . "_product", + "type" => "select", + "class" => $is_enabled ? "" : "hidden", + "choices" => $this->get_payment_choices($form) + ); + + $html .= " " . $this->settings_select( $product_field, false ); + + if( $echo ) + echo $html; + + return $html; + } + + public function settings_trial( $field, $echo = true ) { + + //--- Enabled field --- + $enabled_field = array( + "type" => "checkbox", + "horizontal" => true, + "choices" => array( + array( "label" => __("Enabled", "gravityforms"), + "name" => $field["name"] . "_enabled", + "value"=>"1", + "onchange" => "if(jQuery(this).prop('checked')){jQuery('#{$field["name"]}_product').show('slow'); } else {jQuery('#{$field["name"]}_product').hide('slow');}" + )) + ); + + $html = $this->settings_checkbox( $enabled_field, false ); + + //--- Select Product field --- + $form = $this->get_current_form(); + $payment_choices = array_merge($this->get_payment_choices($form), array(array("label" => __("Enter an amount", "gravityforms"), "value" => "enter_amount"))); + + $product_field = array( + "name" => $field["name"] . "_product", + "type" => "select", + "class" => $this->get_setting("{$field["name"]}_enabled") ? "" : "hidden", + "onchange" => "if(jQuery(this).val() == 'enter_amount'){jQuery('#{$field["name"]}_amount').show('slow');} else {jQuery('#{$field["name"]}_amount').hide('slow');}", + "choices" => $payment_choices + ); + + $html .= " " . $this->settings_select( $product_field, false ); + + //--- Trial Amount field ---- + $amount_field = array( + "type" => "text", + "name" => "{$field["name"]}_amount", + "class" => $this->get_setting("{$field["name"]}_product") == "enter_amount" ? "" : "hidden", + ); + + $html .= " " . $this->settings_text($amount_field, false); + + + if( $echo ) + echo $html; + + return $html; + } + + protected function recurring_amount_choices(){ + $form = $this->get_current_form(); + $recurring_choices = $this->get_payment_choices($form); + $recurring_choices[] = array("label" => __("Form Total", "gravityforms"), "value" => "form_total"); + + return $recurring_choices; + } + + protected function product_amount_choices(){ + $form = $this->get_current_form(); + $product_choices = $this->get_payment_choices($form); + $product_choices[] = array("label" => __("Form Total", "gravityforms"), "value" => "form_total"); + + return $product_choices; + } + + protected function option_choices(){ + + $option_choices = array( + array("label" => __("Sample Option", "gravityforms"), "name" => "sample_option", "value" => "sample_option") + ); + + return $option_choices; + } + + protected function billing_info_fields() { + + $fields = array( + array("name" => "email", "label" => __("Email", "gravityforms"), "required" => false), + array("name" => "address", "label" => __("Address", "gravityforms"), "required" => false), + array("name" => "address2", "label" => __("Address 2", "gravityforms"), "required" => false), + array("name" => "city", "label" => __("City", "gravityforms"), "required" => false), + array("name" => "state", "label" => __("State", "gravityforms"), "required" => false), + array("name" => "zip", "label" => __("Zip", "gravityforms"), "required" => false), + array("name" => "country", "label" => __("Country", "gravityforms"), "required" => false), + ); + + return $fields; + } + + public function get_numeric_choices($min, $max){ + $choices = array(); + for($i = $min; $i<=$max; $i++){ + $choices[] = array("label" => $i, "value" => $i); + } + return $choices; + } + + protected function supported_billing_intervals(){ + + $billing_cycles = array( + "day" => array( "label" => __( "day(s)", "gravityforms" ), "min" => 1, "max" => 365 ), + "week" => array( "label" => __( "week(s)", "gravityforms" ), "min" => 1, "max" => 52 ), + "month" => array( "label" => __( "month(s)", "gravityforms" ), "min" => 1, "max" => 12 ), + "year" => array( "label" => __( "year(s)", "gravityforms" ), "min" => 1, "max" => 10 ) + ); + + return $billing_cycles; + } + + private function get_payment_choices($form){ + $fields = GFCommon::get_fields_by_type($form, array("product")); + $choices = array( + array("label" => __("Select a product field", "gravityforms"), "value" => "") + ); + + foreach($fields as $field){ + $field_id = $field["id"]; + $field_label = RGFormsModel::get_label($field); + $choices[] = array("value" => $field_id, "label" => $field_label); + } + + return $choices; + } + + //--------- Stats Page ------------------- + public function get_results_page_config() { + $current_form = $this->get_current_form(); + + if(!$this->has_feed($current_form["id"])) + return false; + + return array( + "title" => "Sales", + "search_title" => "Filter", + "capabilities" => array("gravityforms_view_entries"), + "callbacks" => array( + "data" => array($this, "results_data"), + "markup" => array($this, "results_markup"), + "filter_ui" => array($this, "results_filter_ui") + ) + ); + + } + + public function results_markup($html, $data, $form, $fields){ + + $html = " + + + + + + + + + + + + + + +
        " . __("Today", "gravityforms") . "" . __("Yesterday", "gravityforms") . "" . __("Last 30 Days", "gravityforms") . "" . __("Total", "gravityforms") . "
        +
        +
        {$data["summary"]["today"]["revenue"]}
        +
        {$data["summary"]["today"]["subscriptions"]} " . __("subscriptions", "gravityforms") . "
        +
        {$data["summary"]["today"]["orders"]} " . __("orders", "gravityforms") . "
        +
        +
        +
        +
        {$data["summary"]["yesterday"]["revenue"]}
        +
        {$data["summary"]["yesterday"]["subscriptions"]} " . __("subscriptions", "gravityforms") . "
        +
        {$data["summary"]["yesterday"]["orders"]} " . __("orders", "gravityforms") . "
        +
        +
        +
        +
        {$data["summary"]["last30"]["revenue"]}
        +
        {$data["summary"]["last30"]["subscriptions"]} " . __("subscriptions", "gravityforms") . "
        +
        {$data["summary"]["last30"]["orders"]} " . __("orders", "gravityforms") . "
        +
        +
        +
        +
        {$data["summary"]["total"]["revenue"]}
        +
        {$data["summary"]["total"]["subscriptions"]} " . __("subscriptions", "gravityforms") . "
        +
        {$data["summary"]["total"]["orders"]} " . __("orders", "gravityforms") . "
        +
        +
        "; + + if($data["row_count"] == "0"){ + $html .= "
        " . __("There aren't any transactions that match your criteria.", "gravityforms") . "
        "; + } + else{ + $chart_data = $this->get_chart_data($data); + $html .= $this->get_sales_chart($chart_data); + + //Getting sales table markup + $sales_table = new GFPaymentStatsTable($data["table"]["header"], $data["data"], $data["row_count"], $data["page_size"]); + $sales_table->prepare_items(); + ob_start(); + $sales_table->display(); + $html .= ob_get_clean(); + } + + $html .= ""; + + return $html; + } + + protected function get_chart_data($data){ + $hAxis_column = $data["chart"]["hAxis"]["column"]; + $vAxis_column = $data["chart"]["vAxis"]["column"]; + + $chart_data = array(); + foreach($data["data"] as $row){ + $hAxis_value = $row[$hAxis_column]; + $chart_data[$hAxis_value] = $row[$vAxis_column]; + } + + return array("hAxis_title" => $data["chart"]["hAxis"]["label"], "vAxis_title" => $data["chart"]["vAxis"]["label"], "data" => $chart_data); + } + + public static function get_sales_chart($sales_data) { + $markup = ""; + + $data_table = array(); + $data_table[] = array($sales_data["hAxis_title"], $sales_data["vAxis_title"]); + + foreach ($sales_data["data"] as $key => $value) { + $data_table[] = array((string)$key, $value); + } + + $chart_options = array( + 'series' => array( + '0' => array( + 'color' => '#66CCFF', + 'visibleInLegend' => 'false' + ), + ), + 'hAxis' => array( + 'title' => $sales_data["hAxis_title"] + ), + 'vAxis' => array( + 'title' => $sales_data["vAxis_title"] + ) + ); + + $data_table_json = json_encode($data_table); + $options_json = json_encode($chart_options); + $div_id = "gquiz-results-chart-field-score-frequencies"; + $markup .= "
        "; + $markup .= ""; + + return $markup; + + } + + public function results_data($form, $fields, $search_criteria, $state_array) { + + $summary = $this->get_sales_summary($form["id"]); + + $data = $this->get_sales_data($form["id"], $search_criteria, $state_array); + + return array( "entry_count" => $data["row_count"], + "row_count" => $data["row_count"], + "page_size" => $data["page_size"], + "status" => "complete", + "summary" => $summary, + "data" => $data["rows"], + "chart" => $data["chart"], + "table" => $data["table"] + ); + } + + private function get_mysql_tz_offset(){ + $tz_offset = get_option("gmt_offset"); + + //add + if offset starts with a number + if(is_numeric(substr($tz_offset, 0, 1))) + $tz_offset = "+" . $tz_offset; + + return $tz_offset . ":00"; + } + + protected function get_sales_data($form_id, $search, $state){ + global $wpdb; + + $data = array( "chart" => array("hAxis" => array(), "vAxis" => array("column" => "revenue", "label" => __("Revenue", "gravityforms"))), + "table" => array("header" => array("orders" => __("Orders", "gravityforms"), "subscriptions" =>__("Subscriptions", "gravityforms"), "recurring_payments" =>__("Recurring Payments", "gravityforms"), "refunds" =>__("Refunds", "gravityforms"), "revenue" => __("Revenue", "gravityforms"))), + "rows" => array() + ); + + $tz_offset = $this->get_mysql_tz_offset(); + + $page_size = 10; + $group = strtolower(rgpost('group')); + switch($group){ + + case "weekly" : + $select = "concat(left(lead.week,4), ' - ', right(lead.week,2)) as week"; + $select_inner1 = "yearweek(CONVERT_TZ(date_created, '+00:00', '" . $tz_offset . "')) week"; + $select_inner2 = "yearweek(CONVERT_TZ(t.date_created, '+00:00', '" . $tz_offset . "')) week"; + $group_by = "week"; + $order_by = "week desc"; + $join = "lead.week = transaction.week"; + + $data["chart"]["hAxis"]["column"] = "week"; + $data["chart"]["hAxis"]["label"] = __("Week", "gravityforms"); + $data["table"]["header"] = array_merge(array("week" => __("Week", "gravityforms")), $data["table"]["header"]); + break; + + case "monthly" : + $select = "date_format(lead.month, '%%Y') as year, date_format(lead.month, '%%c') as month, '' as month_abbrev, '' as month_year"; + $select_inner1 = "date_format(CONVERT_TZ(date_created, '+00:00', '" . $tz_offset . "'), '%%Y-%%m-01') month"; + $select_inner2 = "date_format(CONVERT_TZ(t.date_created, '+00:00', '" . $tz_offset . "'), '%%Y-%%m-01') month"; + $group_by = "month"; + $order_by = "month desc"; + $join = "lead.month = transaction.month"; + + $data["chart"]["hAxis"]["column"] = "month_abbrev"; + $data["chart"]["hAxis"]["label"] = __("Month", "gravityforms"); + $data["table"]["header"] = array_merge(array("month_year" => __("Month", "gravityforms")), $data["table"]["header"]); + break; + + default : //daily + $select = "lead.date, date_format(lead.date, '%%c') as month, day(lead.date) as day, dayname(lead.date) as day_of_week, '' as month_day"; + $select_inner1 = "date(CONVERT_TZ(date_created, '+00:00', '" . $tz_offset . "')) as date"; + $select_inner2 = "date(CONVERT_TZ(t.date_created, '+00:00', '" . $tz_offset . "')) as date"; + $group_by = "date"; + $order_by = "date desc"; + $join = "lead.date = transaction.date"; + + $data["chart"]["hAxis"]["column"] = "month_day"; + $data["chart"]["hAxis"]["label"] = __("Day", "gravityforms"); + $data["table"]["header"] = array_merge(array("date" => __("Date", "gravityforms"), "day_of_week" => __("Day", "gravityforms")), $data["table"]["header"]); + break; + } + + $lead_date_filter = ""; + $transaction_date_filter = ""; + if(isset($search["start_date"])) { + $lead_date_filter = $wpdb->prepare(" AND timestampdiff(SECOND, %s, CONVERT_TZ(l.date_created, '+00:00', '" . $tz_offset . "')) >= 0", $search["start_date"]); + $transaction_date_filter = $wpdb->prepare(" AND timestampdiff(SECOND, %s, CONVERT_TZ(t.date_created, '+00:00', '" . $tz_offset . "')) >= 0", $search["start_date"]); + } + + if(isset($search["end_date"])) { + $lead_date_filter .= $wpdb->prepare(" AND timestampdiff(SECOND, %s, CONVERT_TZ(l.date_created, '+00:00', '" . $tz_offset . "')) <= 0", $search["end_date"]); + $transaction_date_filter .= $wpdb->prepare(" AND timestampdiff(SECOND, %s, CONVERT_TZ(t.date_created, '+00:00', '" . $tz_offset . "')) <= 0", $search["end_date"]); + } + + $payment_method = rgpost("payment_method"); + $payment_method_filter = ""; + if(!empty($payment_method)){ + $payment_method_filter = $wpdb->prepare(" AND l.payment_method=%s", $payment_method); + } + + $current_page = rgempty("paged") ? 1 : absint(rgpost("paged")); + $offset = $page_size * ($current_page - 1); + + $sql = $wpdb->prepare(" SELECT SQL_CALC_FOUND_ROWS {$select}, lead.orders, lead.subscriptions, transaction.refunds, transaction.recurring_payments, transaction.revenue + FROM ( + SELECT {$select_inner1}, + sum( if(transaction_type = 1,1,0) ) as orders, + sum( if(transaction_type = 2,1,0) ) as subscriptions + FROM {$wpdb->prefix}rg_lead l + WHERE form_id=%d {$lead_date_filter} {$payment_method_filter} + GROUP BY {$group_by} + ) AS lead + + LEFT OUTER JOIN( + SELECT {$select_inner2}, + sum(t.amount) as revenue, + sum( if(t.transaction_type = 'refund', 1, 0) ) as refunds, + sum( if(t.transaction_type = 'payment' AND t.is_recurring = 1, 1, 0) ) as recurring_payments + FROM {$wpdb->prefix}gf_addon_payment_transaction t + INNER JOIN {$wpdb->prefix}rg_lead l ON l.id = t.lead_id + WHERE l.form_id=%d {$lead_date_filter} {$transaction_date_filter} {$payment_method_filter} + GROUP BY {$group_by} + + ) AS transaction on {$join} + ORDER BY {$order_by} + LIMIT $page_size OFFSET $offset + ", $form_id, $form_id); + + + $results = $wpdb->get_results($sql, ARRAY_A); + foreach($results as &$result){ + $result["orders"] = intval($result["orders"]); + $result["subscriptions"] = intval($result["subscriptions"]); + $result["refunds"] = intval($result["refunds"]); + $result["recurring_payments"] = intval($result["recurring_payments"]); + $result["revenue"] = floatval($result["revenue"]); + + $result = $this->format_chart_h_axis($result); + + } + + $data["row_count"] = $wpdb->get_var("SELECT FOUND_ROWS()"); + $data["page_size"] = $page_size; + + $data["rows"] = $results; + + return $data; + + } + + protected function format_chart_h_axis($result){ + $months = array(__("Jan", "gravityforms"), __("Feb", "gravityforms"), __("Mar", "gravityforms"), __("Apr", "gravityforms") ,__("May", "gravityforms"), __("Jun", "gravityforms"), __("Jul", "gravityforms"), __("Aug", "gravityforms"), __("Sep", "gravityforms"), __("Oct", "gravityforms"), __("Nov", "gravityforms"), __("Dec", "gravityforms")); + + if(isset($result["month_abbrev"])){ + $result["month_abbrev"] = $months[intval($result["month"]) - 1]; + $result["month_year"] = $months[intval($result["month"]) - 1] . ", " . $result["year"]; + return $result; + } + else if(isset($result["month_day"])){ + $result["month_day"] = $months[intval($result["month"]) - 1] . " " . $result["day"]; + return $result; + } + + return $result; + } + + protected function get_sales_summary($form_id){ + global $wpdb; + + $tz_offset = $this->get_mysql_tz_offset(); + + $summary = $wpdb->get_results( + $wpdb->prepare(" + SELECT lead.date, lead.orders, lead.subscriptions, transaction.revenue + FROM ( + SELECT date( CONVERT_TZ(date_created, '+00:00', '" . $tz_offset . "') ) as date, + sum( if(transaction_type = 1,1,0) ) as orders, + sum( if(transaction_type = 2,1,0) ) as subscriptions + FROM {$wpdb->prefix}rg_lead + WHERE form_id = %d and datediff(now(), CONVERT_TZ(date_created, '+00:00', '" . $tz_offset . "') ) <= 30 + GROUP BY date + ) AS lead + + LEFT OUTER JOIN( + SELECT date( CONVERT_TZ(t.date_created, '+00:00', '" . $tz_offset . "') ) as date, + sum(t.amount) as revenue + FROM {$wpdb->prefix}gf_addon_payment_transaction t + INNER JOIN {$wpdb->prefix}rg_lead l ON l.id = t.lead_id + WHERE l.form_id=%d + GROUP BY date + ) AS transaction on lead.date = transaction.date + ORDER BY date desc", $form_id, $form_id), ARRAY_A); + + $total_summary = $wpdb->get_results( + $wpdb->prepare(" + SELECT sum( if(transaction_type = 1,1,0) ) as orders, + sum( if(transaction_type = 2,1,0) ) as subscriptions + FROM {$wpdb->prefix}rg_lead + WHERE form_id=%d", $form_id), ARRAY_A ); + + $total_revenue = $wpdb->get_var( + $wpdb->prepare(" + SELECT sum(t.amount) as revenue + FROM {$wpdb->prefix}gf_addon_payment_transaction t + INNER JOIN {$wpdb->prefix}rg_lead l ON l.id = t.lead_id + WHERE l.form_id=%d", $form_id)); + + + $result = array("today" => array("revenue" => GFCommon::to_money(0), "orders" => 0, "subscriptions" => 0), + "yesterday" => array("revenue" => GFCommon::to_money(0), "orders" => 0, "subscriptions" => 0), + "last30" => array("revenue" => 0, "orders" => 0, "subscriptions" => 0), + "total" => array("revenue" => GFCommon::to_money($total_revenue), "orders" => $total_summary[0]["orders"], "subscriptions" => $total_summary[0]["subscriptions"])); + + $local_time = GFCommon::get_local_timestamp(); + $today = gmdate("Y-m-d", $local_time); + $yesterday = gmdate("Y-m-d", strtotime("-1 day", $local_time)); + + foreach($summary as $day){ + if($day["date"] == $today){ + $result["today"]["revenue"] = GFCommon::to_money($day["revenue"]); + $result["today"]["orders"] = $day["orders"]; + $result["today"]["subscriptions"] = $day["subscriptions"]; + } + else if($day["date"] == $yesterday){ + $result["yesterday"]["revenue"] = GFCommon::to_money($day["revenue"]); + $result["yesterday"]["orders"] = $day["orders"]; + $result["yesterday"]["subscriptions"] = $day["subscriptions"]; + } + + $is_within_30_days = strtotime($day["date"]) >= strtotime($local_time . " -30 days") ; + if($is_within_30_days){ + $result["last30"]["revenue"] += floatval($day["revenue"]); + $result["last30"]["orders"] += floatval($day["orders"]); + $result["last30"]["subscriptions"] += floatval($day["subscriptions"]); + } + } + + $result["last30"]["revenue"] = GFCommon::to_money($result["last30"]["revenue"]); + + return $result; + } + + public function results_filter_ui($filter_ui, $form_id, $page_title, $gf_page, $gf_view){ + + if($gf_view == "gf_results_{$this->_slug}") + unset($filter_ui["fields"]); + + $view_markup = "
        + +
        "; + $view_filter = array("view" => array("label" => __("View", "gravityforms"), "tooltip" => __("
        View
        Select how you would like the sales data to be displayed.", "gravityforms"), "markup" => $view_markup)); + + $payment_methods = $this->get_payment_methods($form_id); + + $payment_method_markup = " +
        + +
        "; + + $payment_method_filter = array("payment_method" => array("label" => __("Payment Method", "gravityforms"), "tooltip" => "", "markup" => $payment_method_markup)); + + + $filter_ui = array_merge($view_filter, $payment_method_filter, $filter_ui); + + return $filter_ui; + + } + + protected function get_payment_methods($form_id){ + global $wpdb; + + $payment_methods = $wpdb->get_col($wpdb->prepare("SELECT DISTINCT payment_method FROM {$wpdb->prefix}rg_lead WHERE form_id=%d", $form_id)); + + return $payment_methods; + } + //-------- Uninstall --------------------- + protected function uninstall(){ + global $wpdb; + + // deleting transactions + $sql = $wpdb->prepare( "DELETE FROM {$wpdb->prefix}gf_addon_payment_transaction + WHERE feed_id IN (SELECT id FROM {$wpdb->prefix}gf_addon_feed WHERE addon_slug=%s)", $this->_slug); + $wpdb->query($sql); + + //clear cron + wp_clear_scheduled_hook($this->_slug . "_cron"); + + parent::uninstall(); + } + + //-------- Scripts ----------------------- + public function scripts() { + + $scripts = array( + array( + 'handle' => 'gaddon_payment', + "src" => $this->get_gfaddon_base_url() . "/js/gaddon_payment.js", + "version" => GFCommon::$version, + "strings" => array( + "subscriptionCancelWarning" => __("Warning! This Authorize.Net Subscription will be canceled. This cannot be undone. 'OK' to cancel subscription, 'Cancel' to stop", "gravityforms"), + "subscriptionCancelNonce" => wp_create_nonce('gaddon_cancel_subscription'), + "subscriptionCanceled" => __("Canceled", "gravityforms"), + "subscriptionError" => __("The subscription could not be canceled. Please try again later.", "gravityforms") + ), + 'enqueue' => array( array( "admin_page" => array("form_settings"), "tab" => "gravityformspaypal" ), + array( "admin_page" => array("entry_view") ) + ) + ) + ); + + return array_merge( parent::scripts(), $scripts ); + } + + + //-------- Currency ---------------------- + /** + * Override this function to add or remove currencies from the list of supported currencies + * @param $currencies - Currently supported currencies + * @return mixed - A filtered list of supported currencies + */ + public function supported_currencies($currencies){ + return $currencies; + } + + + //-------- Cancel Subscription ----------- + public function entry_info($form_id, $entry) { + + //abort if subscription cancelation isn't supported by the addon + if(!$this->payment_method_is_overridden("cancel_subscription")) + return; + + // adding cancel subscription button and script to entry info section + $cancelsub_button = ""; + if($entry["transaction_type"] == "2" && $entry["payment_status"] <> "Canceled" && $this->is_payment_gateway($entry["id"])) + { + ?> + " class="button" onclick="cancel_subscription();"/> + + + + + get_payment_feed($entry, $form); + + if($this->cancel_subscription($entry, $form, $feed)) + { + $this->process_subscription_canceled($entry, $feed); + die("1"); + } + else{ + die("0"); + } + + } + + protected function process_subscription_canceled($entry, $feed){ + + //Updating entry payment status + $entry["payment_status"] = "Canceled"; + RGFormsModel::update_lead($entry); + + //Delete post or mark it as a draft based on feed configuration + if(rgars($feed, "meta/update_post_action") == "draft" && !rgempty("post_id", $entry)){ + $post = get_post($entry["post_id"]); + $post->post_status = 'draft'; + wp_update_post($post); + } + else if(rgars($feed, "meta/update_post_action") == "delete" && !rgempty("post_id", $entry)){ + wp_delete_post($entry["post_id"]); + } + + } + + protected function cancel_subscription($entry, $form, $feed){ + return true; + } + + //-------- Helpers ----------------------- + private function payment_method_is_overridden($method_name, $base_class='GFPaymentAddOn'){ + return parent::method_is_overridden($method_name, $base_class); + } + + public function authorization_error( $error_message ) { + return array( 'is_authorized' => false, 'error_message' => $error_message ); + } +} + +class GFPaymentStatsTable extends WP_List_Table { + + private $_rows = array(); + private $_page_size = 10; + private $_total_items = 0; + + + function __construct($columns, $rows, $total_count, $page_size) { + $this->_rows = $rows; + $this->_total_items = $total_count; + $this->_page_size = $page_size; + + $this->_column_headers = array( + $columns, + array(), + array() + ); + + parent::__construct(array( + 'singular' => __('sale', 'gravityforms'), + 'plural' => __('sales', 'gravityforms'), + 'ajax' => false, + 'screen' => 'gaddon_sales' + )); + } + + + function prepare_items() { + $this->items = $this->_rows; + + $this->set_pagination_args(array("total_items" => $this->_total_items, "per_page" => $this->_page_size)); + } + + function no_items() { + echo __("There hasn't been any sales in the specified date range.", "gravityforms"); + } + + function column_default($item, $column){ + return rgar($item, $column); + } + + + function pagination( $which ) { + if ( empty( $this->_pagination_args ) ) + return; + + extract( $this->_pagination_args, EXTR_SKIP ); + + $output = '' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . ''; + + $current = $this->get_pagenum(); + + $page_links = array(); + + $disable_first = $disable_last = ''; + if ( $current == 1 ) + $disable_first = ' disabled'; + if ( $current == $total_pages ) + $disable_last = ' disabled'; + + $page_links[] = sprintf( "%s", + 'first-page' . $disable_first, + esc_attr__( 'Go to the first page', 'gravityforms' ), + '«' + ); + + $page_links[] = sprintf( "%s", + 'prev-page' . $disable_first, + esc_attr__( 'Go to the previous page', 'gravityforms' ), + max( 1, $current-1 ), + '‹' + ); + + + $html_current_page = $current; + + $html_total_pages = sprintf( "%s", number_format_i18n( $total_pages ) ); + $page_links[] = '' . sprintf( _x( '%1$s of %2$s', 'paging' ), $html_current_page, $html_total_pages ) . ''; + + $page_links[] = sprintf( "%s", + 'next-page' . $disable_last, + esc_attr__( 'Go to the next page', 'gravityforms' ), + min( $total_pages, $current+1 ), + '›' + ); + + $page_links[] = sprintf( "%s", + 'last-page' . $disable_last, + esc_attr__( 'Go to the last page', 'gravityforms'), + $total_pages, + '»' + ); + + $pagination_links_class = 'pagination-links'; + if ( ! empty( $infinite_scroll ) ) + $pagination_links_class = ' hide-if-js'; + $output .= "\n" . join( "\n", $page_links ) . ''; + + if ( $total_pages ) + $page_class = $total_pages < 2 ? ' one-page' : ''; + else + $page_class = ' no-pages'; + + $this->_pagination = "
        $output
        "; + + echo $this->_pagination; + } + +} diff --git a/src/wp-content/plugins/gravityforms/includes/addon/class-gf-results.php b/src/wp-content/plugins/gravityforms/includes/addon/class-gf-results.php new file mode 100644 index 0000000..728956e --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/addon/class-gf-results.php @@ -0,0 +1,826 @@ +_slug = $slug; + $this->_title = rgar($config, "title"); + $this->_search_title = rgempty("search_title", $config) ? __("Results Filters", "gravityforms") : rgar($config, "search_title"); + $this->_callbacks = isset($config["callbacks"]) ? $config["callbacks"] : array(); + $this->_capabilities = isset($config["capabilities"]) ? $config["capabilities"] : array(); + } + + public function init() { + + if (!GFCommon::current_user_can_any($this->_capabilities)) + return; + + //add top toolbar menu item + add_filter("gform_toolbar_menu", array($this, 'add_toolbar_menu_item'), 10, 2); + //add custom form action + add_filter("gform_form_actions", array($this, 'add_form_action'), 10, 2); + //add the results view + add_action("gform_entries_view", array($this, 'add_view'), 10, 2); + + add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts')); + + require_once(GFCommon::get_base_path() . "/tooltips.php"); + + add_filter('gform_tooltips', array($this, 'add_tooltips')); + + } + + public function enqueue_admin_scripts() { + wp_enqueue_script('jquery-ui-resizable'); + wp_enqueue_script('jquery-ui-datepicker'); + + wp_enqueue_script('google_charts'); + wp_enqueue_style('gaddon_results_css'); + wp_enqueue_script("gaddon_results_js"); + $this->localize_results_scripts(); + } + + public static function localize_results_scripts() { + + // Get current page protocol + $protocol = isset($_SERVER["HTTPS"]) ? 'https://' : 'http://'; + // Output admin-ajax.php URL with same protocol as current page + + $vars = array( + 'ajaxurl' => admin_url('admin-ajax.php', $protocol), + 'imagesUrl' => GFCommon::get_base_url() . "/images" + ); + + wp_localize_script('gaddon_results_js', 'gresultsVars', $vars); + + $strings = array( + 'ajaxError' => __("Error retrieving results. If the problem persists, please contact support.", "gravityforms") + ); + + wp_localize_script('gaddon_results_js', 'gresultsStrings', $strings); + + } + + private function get_fields($form) { + return isset($this->_callbacks["fields"]) ? call_user_func($this->_callbacks["fields"], $form) : $form["fields"]; + } + + public function add_form_action($actions, $form_id) { + return $this->filter_menu_items($actions, $form_id, true); + } + + public function add_toolbar_menu_item($menu_items, $form_id) { + return $this->filter_menu_items($menu_items, $form_id, false); + } + + public function filter_menu_items($menu_items, $form_id, $compact) { + $form_meta = GFFormsModel::get_form_meta($form_id); + $results_fields = $this->get_fields($form_meta); + if (false === empty($results_fields)) { + $form_id = $form_meta["id"]; + $link_class = ""; + if (rgget("page") == "gf_new_form") + $link_class = "gf_toolbar_disabled"; + else if (rgget("page") == "gf_entries" && rgget("view") == "gf_results_" . $this->_slug) + $link_class = "gf_toolbar_active"; + + $sub_menu_items = array(); + $sub_menu_items[] = array( + 'label' => $this->_title, + 'title' => __("View results generated by this form", "gravityforms"), + 'link_class' => $link_class, + 'url' => admin_url("admin.php?page=gf_entries&view=gf_results_{$this->_slug}&id={$form_id}"), + 'capabilities' => $this->_capabilities + ); + + $duplicate_submenus = wp_filter_object_list( rgars($menu_items, "results/sub_menu_items") , array("label" => $sub_menu_items[0]["label"] ) ); + if(count($duplicate_submenus) > 0) + { + return $menu_items; + } + + // If there's already a menu item with the key "results" then merge the two. + if (isset($menu_items["results"])) { + $existing_link_class = $menu_items["results"]["link_class"]; + $link_class == empty($existing_link_class) ? $link_class : $existing_link_class; + $existing_capabilities = $menu_items["results"]["capabilities"]; + $merged_capabilities = array_merge($existing_capabilities, $this->_capabilities); + $existing_sub_menu_items = $menu_items["results"]["sub_menu_items"]; + $merged_sub_menu_items = array_merge($existing_sub_menu_items, $sub_menu_items); + $menu_items["results"]["link_class"] = $link_class; + $menu_items["results"]["capabilities"] = $merged_capabilities; + $menu_items["results"]["sub_menu_items"] = $merged_sub_menu_items; + $menu_items["results"]["label"] = __("Results", "gravityforms"); + + } else { + // so far during the page cycle this is the only menu item for this key + $menu_items["results"] = array( + 'label' => $compact ? __("Results", "gravityforms") : $this->_title, + 'title' => __("View results generated by this form", "gravityforms"), + 'url' => "", + 'onclick' => "return false;", + 'menu_class' => 'gf_form_toolbar_results', + 'link_class' => $link_class, + 'capabilities' => $this->_capabilities, + 'sub_menu_items' => $sub_menu_items, + 'priority' => 750 + ); + } + + } + + return $menu_items; + } + + + public function add_view($view, $form_id) { + if ($view == "gf_results_" . $this->_slug) + GFResults::results_page($form_id, $this->_title, "gf_entries", $view); + + } + + public function results_page($form_id, $page_title, $gf_page, $gf_view) { + if (empty($form_id)) { + $forms = RGFormsModel::get_forms(); + if (!empty($forms)) { + $form_id = $forms[0]->id; + } + } + $form = GFFormsModel::get_form_meta($form_id); + $form = apply_filters("gform_form_pre_results_$form_id", apply_filters("gform_form_pre_results", $form)); + + // set up filter vars + $start_date = rgget("start"); + $end_date = rgget("end"); + + $all_fields = $form["fields"]; + + $filter_settings = GFCommon::get_field_filter_settings($form); + $filter_settings = apply_filters("gform_filters_pre_results", $filter_settings, $form); + $filter_settings = array_values($filter_settings); // reset the numeric keys in case some filters have been unset + + $filter_fields = rgget("f"); + $filter_operators = rgget("o"); + $filter_values = rgget("v"); + $filters = array(); + + $init_vars = array(); + if (!empty($filter_fields)) { + $init_vars["mode"] = rgget("mode"); + foreach ($filter_fields as $i => $filter_field) { + $filters[$i]["field"] = $filter_field; + $filters[$i]["operator"] = $filter_operators[$i]; + $filters[$i]["value"] = $filter_values[$i]; + } + $init_vars["filters"] = $filters; + } + + ?> + + + +
        + +

        + +

        + + + + +
        +
        +
        +

        _search_title ?>

        + +
        +
        + + + + + array( "label" => __("Filters", "gravityforms"), + "tooltip" => "gresults_filters", + "markup" => '
        + +
        ' + + + ), + + "date_range" => array( "label" => __("Date Range", "gravityforms"), + "tooltip" => "gresults_date_range", + "markup" => '
        + + + +
        +
        + + +
        ' + ) + + ); + + $filter_ui = apply_filters("gform_filter_ui", $filter_ui, $form_id, $page_title, $gf_page, $gf_view); + + foreach($filter_ui as $name => $filter){ + ?> + + + +
        + +
        + + + + +
        +
        +
        +
        +
        +
        + + +
        +
          +
        +
        + + +
        + + + " . __("Total Score", "gravityforms") . "" . __("Scores are weighted calculations. Items ranked higher are given a greater score than items that are ranked lower. The total score for each item is the sum of the weighted scores.", "gravityforms"); + $tooltips["gresults_agg_rank"] = "
        " . __("Aggregate Rank", "gravityforms") . "
        " . __("The aggregate rank is the overall rank for all entries based on the weighted scores for each item.", "gravityforms"); + $tooltips["gresults_date_range"] = "
        " . __("Date Range", "gravityforms") . "
        " . __("Date Range is optional, if no date range is specified it will be ignored.", "gravityforms"); + $tooltips["gresults_filters"] = "
        " . __("Filters", "gravityforms") . "
        " . __("Narrow the results by adding filters. Note that some field types support more options than others.", "gravityforms"); + + return $tooltips; + } + + + public function ajax_get_results() { + $output = array(); + $html = ""; + $form_id = rgpost("id"); + $form = GFFormsModel::get_form_meta($form_id); + $form = apply_filters("gform_form_pre_results_$form_id", apply_filters("gform_form_pre_results", $form)); + $search_criteria["status"] = "active"; + $fields = $this->get_fields($form); + $total_entries = GFAPI::count_entries($form_id, $search_criteria); + if ($total_entries == 0) { + $html = __("No results.", "gravityforms"); + } else { + $search_criteria = array(); + $search_criteria["field_filters"] = GFCommon::get_field_filters_from_post(); + + $start_date = rgpost("start"); + $end_date = rgpost("end"); + if ($start_date) + $search_criteria["start_date"] = $start_date; + if ($end_date) + $search_criteria["end_date"] = $end_date; + + $search_criteria["status"] = "active"; + $output["s"] = http_build_query($search_criteria); + $state_array = null; + if (isset($_POST["state"])) { + $state = $_POST["state"]; + $posted_check_sum = rgpost("checkSum"); + $generated_check_sum = self::generate_checksum($state); + $state_array = json_decode(base64_decode($state), true); + if ($generated_check_sum !== $posted_check_sum) { + $output["status"] = "complete"; + $output["html"] = __('There was an error while processing the entries. Please contact support.', "gravityforms"); + echo json_encode($output); + die(); + } + } + + $data = isset($this->_callbacks["data"]) ? call_user_func($this->_callbacks["data"], $form, $fields, $search_criteria, $state_array) : $this->get_results_data($form, $fields, $search_criteria, $state_array); + $entry_count = $data["entry_count"]; + + if ("incomplete" === rgar($data, "status")) { + $state = base64_encode(json_encode($data)); + $output["status"] = "incomplete"; + $output["stateObject"] = $state; + $output["checkSum"] = self::generate_checksum($state); + $output["html"] = sprintf(__('Entries processed: %1$d of %2$d', "gravityforms"), rgar($data, "offset"), $entry_count); + echo json_encode($output); + die(); + } + + if ($total_entries > 0) { + $html = isset($this->_callbacks["markup"]) ? call_user_func($this->_callbacks["markup"], $html, $data, $form, $fields) : ""; + if (empty($html)) { + foreach ($fields as $field) { + $field_id = $field['id']; + $html .= "
        "; + $html .= "
        " . esc_html(GFCommon::get_label($field)) . "
        "; + $html .= "
        " . self::get_field_results($form_id, $data, $field, $search_criteria) . "
        "; + $html .= "
        "; + } + } + + } else { + $html .= __("No results", "gravityforms"); + } + } + + $output["html"] = $html; + $output["status"] = "complete"; + $output["searchCriteria"] = $search_criteria; + echo json_encode($output); + die(); + } + + + public static function ajax_get_more_results() { + $form_id = rgpost("form_id"); + $field_id = rgpost("field_id"); + $offset = rgpost("offset"); + $search_criteria = rgpost("search_criteria"); + + if (empty($search_criteria)) + $search_criteria = array(); + $page_size = 10; + + $form = RGFormsModel::get_form_meta($form_id); + $form_id = $form["id"]; + $field = RGFormsModel::get_field($form, $field_id); + $more_remaining = false; + $html = self::get_default_field_results($form_id, $field, $search_criteria, $offset, $page_size, $more_remaining); + + $response = array(); + $response["more_remaining"] = $more_remaining; + $response['html'] = $html; + + echo json_encode($response); + die(); + } + + private static function generate_checksum($data) { + return wp_hash(crc32(($data))); + } + + + public static function get_total_entries($form) { + $totals = RGFormsModel::get_form_counts($form["id"]); + + return $totals["total"]; + } + + public static function get_field_results($form_id, $data, $field, $search_criteria) { + $field_data = $data["field_data"]; + $entry_count = $data["entry_count"]; + $field_results = ""; + if (empty($field_data[$field["id"]])) { + $field_results .= __("No entries for this field", "gravityforms"); + + return $field_results; + } + $field_type = GFFormsModel::get_input_type($field); + switch ($field_type) { + case "radio" : + case "checkbox" : + case "select" : + case "rating" : + case "multiselect" : + $results = $field_data[$field["id"]]; + $non_zero_results = is_array($results) ? array_filter($results) : $results; + if (empty($non_zero_results)) { + $field_results .= __("No entries for this field", "gravityforms"); + + return $field_results; + } + $choices = $field["choices"]; + + $data_table = array(); + $data_table [] = array(__('Choice', "gravityforms"), __('Frequency', "gravityforms")); + + foreach ($choices as $choice) { + $text = $choice["text"]; + $val = $results[$choice['value']]; + $data_table [] = array($text, $val); + } + + $bar_height = 40; + $chart_area_height = (count($choices) * $bar_height); + + $chart_options = array( + 'isStacked' => true, + 'height' => ($chart_area_height + $bar_height), + 'chartArea' => array( + 'top' => 0, + 'left' => 200, + 'height' => $chart_area_height, + 'width' => '100%' + ), + 'series' => array( + '0' => array( + 'color' => 'silver', + 'visibleInLegend' => 'false' + ) + ), + 'hAxis' => array( + 'viewWindowMode' => 'explicit', + 'viewWindow' => array('min' => 0), + 'title' => __('Frequency', "gravityforms") + ) + + ); + + $data_table_json = htmlentities(json_encode($data_table), ENT_QUOTES, 'UTF-8', true); + $options_json = htmlentities(json_encode($chart_options), ENT_QUOTES, 'UTF-8', true); + $div_id = "gresults-results-chart-field-" . $field["id"]; + $height = ""; // = sprintf("height:%dpx", (count($choices) * $bar_height)); + + $field_results .= sprintf('
        ', $height, $div_id, $data_table_json, $options_json); + + + break; + case "likert" : + $results = $field_data[$field["id"]]; + $multiple_rows = rgar($field, "gsurveyLikertEnableMultipleRows") ? true : false; + + $n = 100; + + $xr = 255; + $xg = 255; + $xb = 255; + + $yr = 100; + $yg = 250; + $yb = 100; + + $field_results .= "
        "; + $field_results .= ""; + $field_results .= ""; + if ($multiple_rows) + $field_results .= ""; + + foreach ($field["choices"] as $choice) { + $field_results .= ""; + } + $field_results .= ""; + + foreach ($field["gsurveyLikertRows"] as $row) { + $row_text = $row["text"]; + $row_value = $row["value"]; + $max = 0; + foreach ($field["choices"] as $choice) { + if ($multiple_rows) { + $choice_value = rgar($choice, "value"); + $results_row = rgar($results, $row_value); + $results_for_choice = rgar($results_row, $choice_value); + $max = max(array($max, $results_for_choice)); + } else { + $max = max(array($max, $results[$choice['value']])); + } + + } + + $field_results .= ""; + + if ($multiple_rows) + $field_results .= ""; + + foreach ($field["choices"] as $choice) { + $val = $multiple_rows ? $results[$row_value][$choice['value']] : $results[$choice['value']]; + $percent = $max > 0 ? round($val / $max * 100, 0) : 0; + $red = (int)(($xr + (($percent * ($yr - $xr)) / ($n - 1)))); + $green = (int)(($xg + (($percent * ($yg - $xg)) / ($n - 1)))); + $blue = (int)(($xb + (($percent * ($yb - $xb)) / ($n - 1)))); + $clr = 'rgb(' . $red . ',' . $green . ',' . $blue . ')'; + $field_results .= ""; + } + $field_results .= ""; + + if (false === $multiple_rows) + break; + + } + $field_results .= "
        " . $choice['text'] . "
        " . $row_text . "" . $val . "
        "; + $field_results .= "
        "; + + if (rgar($field, "gsurveyLikertEnableScoring") && class_exists("GFSurvey")) { + $sum = $results["sum_of_scores"]; + $average_score = $sum == 0 ? 0 : round($sum / $entry_count, 3); + $field_results .= "
        " . __("Average score: ", "gravityforms") . $average_score . "
        "; + } + + break; + case "rank" : + $results = $field_data[$field["id"]]; + arsort($results); + $field_results .= "
        "; + $field_results .= " "; + $field_results .= " "; + $field_results .= " "; + $field_results .= " "; + $field_results .= " "; + $field_results .= " "; + + $agg_rank = 1; + foreach ($results as $choice_val => $score) { + $field_results .= ""; + $field_results .= " "; + $field_results .= " "; + $field_results .= " "; + $field_results .= ""; + $agg_rank++; + } + $field_results .= "
        "; + $field_results .= __("Item", "gravityforms"); + $field_results .= " "; + $field_results .= __("Total Score", "gravityforms") . " " . gform_tooltip("gresults_total_score", null, true); + $field_results .= " "; + $field_results .= __("Aggregate Rank", "gravityforms") . " " . gform_tooltip("gresults_agg_rank", null, true); + $field_results .= "
        "; + $field_results .= RGFormsModel::get_choice_text($field, $choice_val); + $field_results .= " "; + $field_results .= $score; + $field_results .= " "; + $field_results .= $agg_rank; + $field_results .= "
        "; + $field_results .= "
        "; + + break; + default : + $page_size = 5; + $offset = 0; + $field_id = $field["id"]; + + $field_results .= "
        " . __("Latest values:", "gravityforms") . "
        "; + + $field_results .= "
          "; + $more_remaining = false; + $field_results .= self::get_default_field_results($form_id, $field, $search_criteria, $offset, $page_size, $more_remaining); + $field_results .= "
        "; + + if ($more_remaining) { + $field_results .= "Show more"; + } + break; + } + + return $field_results; + + } + + public function get_results_data($form, $fields, $search_criteria = array(), $state_array = array(), $max_execution_time = 15 /* seconds */) { + // todo: add hooks to modify $max_execution_time and $page_size? + + $page_size = 150; + + $time_start = microtime(true); + + $form_id = $form["id"]; + $data = array(); + $offset = 0; + $entry_count = 0; + $field_data = array(); + + + if ($state_array) { + //get counts from state + $data = $state_array; + $offset = (int)rgar($data, "offset"); + + unset($data["offset"]); + $entry_count = $offset; + $field_data = rgar($data, "field_data"); + } else { + //initialize counts + foreach ($fields as $field) { + $field_type = GFFormsModel::get_input_type($field); + if (false === isset($field["choices"])) { + $field_data[$field["id"]] = 0; + continue; + } + $choices = $field["choices"]; + + if ($field_type == "likert" && rgar($field, "gsurveyLikertEnableMultipleRows")) { + foreach ($field["gsurveyLikertRows"] as $row) { + foreach ($choices as $choice) { + $field_data[$field["id"]][$row["value"]][$choice['value']] = 0; + } + } + } else { + foreach ($choices as $choice) { + $field_data[$field["id"]][$choice['value']] = 0; + } + } + if ($field_type == "likert" && rgar($field, "gsurveyLikertEnableScoring")) { + $field_data[$field["id"]]["sum_of_scores"] = 0; + } + + } + } + + $count_search_leads = GFAPI::count_entries($form_id, $search_criteria); + $data["entry_count"] = $count_search_leads; + + $entries_left = $count_search_leads - $offset; + + while ($entries_left >= 0) { + + $paging = array( + 'offset' => $offset, + 'page_size' => $page_size + ); + + $search_leads_time_start = microtime(true); + $leads = GFFormsModel::search_leads($form_id, $search_criteria, null, $paging); + $search_leads_time_end = microtime(true); + $search_leads_time = $search_leads_time_end - $search_leads_time_start; + + $leads_in_search = count($leads); + + $entry_count += $leads_in_search; + + foreach ($leads as $lead) { + foreach ($fields as $field) { + $field_type = GFFormsModel::get_input_type($field); + $field_id = $field["id"]; + $value = RGFormsModel::get_lead_field_value($lead, $field); + + if ($field_type == "likert" && rgar($field, "gsurveyLikertEnableMultipleRows")) { + + if (empty($value)) + continue; + foreach ($value as $value_vector) { + if (empty($value_vector)) + continue; + list($row_val, $col_val) = explode(":", $value_vector, 2); + if (isset($field_data[$field["id"]][$row_val]) && isset($field_data[$field["id"]][$row_val][$col_val])) { + $field_data[$field["id"]][$row_val][$col_val]++; + } + } + } elseif ($field_type == "rank") { + $score = count(rgar($field, "choices")); + $values = explode(",", $value); + foreach ($values as $ranked_value) { + $field_data[$field["id"]][$ranked_value] += $score; + $score--; + } + } else { + + if (false === isset($field["choices"])) { + if (false === empty($value)) + $field_data[$field_id]++; + continue; + } + $choices = $field["choices"]; + foreach ($choices as $choice) { + $choice_is_selected = false; + if (is_array($value)) { + $choice_value = rgar($choice, "value"); + if (in_array($choice_value, $value)) + $choice_is_selected = true; + } else { + if (RGFormsModel::choice_value_match($field, $choice, $value)) + $choice_is_selected = true; + } + if ($choice_is_selected) { + $field_data[$field_id][$choice['value']]++; + } + } + + } + if ($field_type == "likert" && rgar($field, "gsurveyLikertEnableScoring")) { + $field_data[$field["id"]]["sum_of_scores"] += $this->get_likert_score($field, $lead); + } + + + } + + } + $data["field_data"] = $field_data; + if (isset($this->_callbacks["calculation"])) + $data = call_user_func($this->_callbacks["calculation"], $data, $form, $fields, $leads); + + $offset += $page_size; + $entries_left -= $page_size; + + $time_end = microtime(true); + $execution_time = ($time_end - $time_start); + + if ($entries_left > 0 && $execution_time + $search_leads_time > $max_execution_time) { + $data["status"] = "incomplete"; + $data["offset"] = $offset; + $progress = $data["entry_count"] > 0 ? round($data["offset"] / $data["entry_count"] * 100) : 0; + $data["progress"] = $progress; + break; + } + + if ($entries_left <= 0) { + $data["status"] = "complete"; + } + } + + $data["timestamp"] = time(); + + return $data; + } + + public function get_likert_score($field, $entry) { + return is_callable(array("GFSurvey", "get_field_score")) ? GFSurvey::get_field_score($field, $entry) : 0; + } + + + public static function get_default_field_results($form_id, $field, $search_criteria, $offset, $page_size, &$more_remaining = false) { + $field_results = ""; + + + $sorting = array('key' => "date_created", 'direction' => "DESC"); + + $c = 0; + + + do { + $paging = array('offset' => $offset, 'page_size' => $page_size); + $leads = GFFormsModel::search_leads($form_id, $search_criteria, $sorting, $paging); + foreach ($leads as $lead) { + + $value = RGFormsModel::get_lead_field_value($lead, $field); + $content = apply_filters("gform_entries_field_value", $value, $form_id, $field["id"], $lead); + + if (!empty($content)) { + $field_results .= "
      • {$content}
      • "; + $c++; + } + + } + $offset += $page_size; + + } while ($c < $page_size && !empty($leads)); + + if (!empty($leads)) + $more_remaining = true; + + return $field_results; + + } + } +} diff --git a/src/wp-content/plugins/gravityforms/includes/addon/css/gaddon_form_settings.css b/src/wp-content/plugins/gravityforms/includes/addon/css/gaddon_form_settings.css new file mode 100644 index 0000000..632c959 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/addon/css/gaddon_form_settings.css @@ -0,0 +1,9 @@ +.settings-field-map-table { } +.settings-field-map-table thead th { font-weight: bold; border-bottom: 1px solid #ccc; } +.settings-field-map-table tbody td { border-bottom: 1px dotted #eee; } +.settings-field-map-table select { max-width: 90%; } +.gaddon-section .required { color: #f00; } +.gaddon-setting-inline{ + display:inline; + margin-right:6px; +} \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/includes/addon/css/gaddon_results.css b/src/wp-content/plugins/gravityforms/includes/addon/css/gaddon_results.css new file mode 100644 index 0000000..b2264f6 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/addon/css/gaddon_results.css @@ -0,0 +1,253 @@ +/* --------- TODO: remove quiz specific styles ------------------*/ + +table#gquiz-results-summary { + table-layout: fixed; +} + +table#gquiz-results-summary td { + font-weight: bold; + text-align: center; + padding: 10px; +} + +table#gquiz-results-summary td.gquiz-results-summary-label { + font-size: 1.2em; +} + +table#gquiz-results-summary td.gquiz-results-summary-data { + font-size: 2em; +} + +.gquiz-results-summary-data-box { + border: 1px solid silver; + padding: 10px; + width: 75%; + margin: auto; +} + +.gaddon-results-summary-secondary{ + padding-top: 4px; + font-weight: normal; + font-size:13px; +} + +.gaddon-results-summary-primary{ + padding:5px; +} + +.gquiz-field-precentages-correct { + float: left; + margin: 15px 0 0 50px; +} + +/* -------------------------------------*/ + +table#gaddon-results-summary { + table-layout: fixed; +} + +table#gaddon-results-summary td { + font-weight: bold; + text-align: center; + padding: 10px; +} + +table#gaddon-results-summary td.gaddon-results-summary-label { + font-size: 1.2em; +} + +table#gaddon-results-summary td.gaddon-results-summary-data { + font-size: 2em; +} + +.gaddon-results-summary-data-box { + border: 1px solid silver; + padding: 10px; + width: 75%; + margin: auto; +} + +.gaddon-field-precentages-correct { + float: left; + margin: 15px 0 0 50px; +} + + +/*-------------*/ + +#gresults-results { + margin-right:300px; + min-height:460px;; +} + +.gresults-results-field { + margin-bottom:20px; +} + +.gresults-results-field-label { + font-size:1.2em; + margin-bottom:10px; +} + +.gresults-results-field table{ + border-bottom: 1px solid silver; + border-spacing: 0; +} + +.gresults-results-field table td{ + padding:5px; + border-right: 1px solid silver; + border-top: 1px solid silver; + text-align:center; +} + +.gresults-results-field-table-header{ + background-color: #EEEEEE; +} + +.gresults-results-field table td:first-child { + border-left: 1px solid silver; +} + + +ul.gresults-results-field-content, +ul.gresults-results-field-content li{ + list-style:disc outside none; +} +ul.gresults-results-field-content{ + margin:10px; +} + +td.gresults-rank-field-score, +td.gresults-rank-field-rank{ + width:110px; +} + +.gsurvey-rank-field-results table{ + width:100%; +} + + +/* filter box */ + +#gresults-results-filter { + /*position:absolute; + width:270px;*/ +} + +#gresults-results-filter-content { + padding:10px; +} +/* +#gresults-results-filter.sticky { + position:fixed; + top:30px; +} +*/ + +.gresults-results-filter-section-label { + font-size:1.2em; + font-weight:bold; + margin-top:10px; + margin-bottom:10px; +} + +#gresults-results-filter label { + margin-top:10px; + display:block; +} + +.gresults-remove, +.gresults-add { + margin-top:2px; + vertical-align:middle; + cursor:pointer; +} + +.gresults-add { + margin-left:5px; +} + +#gresults-no-filters{ + color:silver; +} + +.gresults-datepicker, +.gresults-filter-value, +.gresults-filter-field { + width:150px; + box-sizing:border-box; + -ms-box-sizing:border-box; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + height: 2em; + padding: 2px; +} + +.gresults-filter-operator { + width:70px; +} + +#gresults-results-filter-buttons { + clear:both; + margin-top:20px; + width:180px; +} + +.gresults-results-filter-field-label { + font-size:1.1em; + font-weight:bold; + margin-bottom:10px; +} + +.gresults-results-filter-field { + margin-bottom:20px; +} + +.gresults-results-filter-field ul li label { + margin-left:5px; +} + +.gresults-results-filter-title { + font-size:1.5em; + font-weight:bold; +} + +/* +#gresults-results-filter { + visibility: hidden; +} +*/ + +#gresults-results-field-filters-container.resizable { + border-bottom:5px double #DDD; + min-height:120px; +} + +#gresults-results-field-filters { + height:100%; + overflow-y:auto; +} + +.ui-resizable { + position:relative; +} + +.ui-resizable-handle { + position:absolute; + font-size:0.1px; + z-index:99999; + display:block; +} + +.ui-resizable-s { + cursor:s-resize; + height:7px; + width:100%; + bottom:-5px; + left:0px; +} + +.gsurvey-likert-score{ + margin-top:5px; +} \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/includes/addon/js/gaddon_payment.js b/src/wp-content/plugins/gravityforms/includes/addon/js/gaddon_payment.js new file mode 100644 index 0000000..3b88062 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/addon/js/gaddon_payment.js @@ -0,0 +1,52 @@ +function loadBillingLength(setting_name){ + var intervals = window[setting_name + "_intervals"] + if(!intervals) + return; + + var unit = jQuery("#" + setting_name + "_unit").val(); + var min = intervals[unit]["min"]; + var max = intervals[unit]["max"]; + + var lengthField = jQuery("#" + setting_name + "_length"); + var length = lengthField.val(); + + var str = ""; + for(var i=min; i<=max; i++){ + var selected = length == i ? "selected='selected'" : ""; + str += ""; + } + lengthField.html(str); + + +} + +function cancel_subscription(entryId){ + + if(! confirm(gaddon_payment_strings.subscriptionCancelWarning) ) + return; + + jQuery("#subscription_cancel_spinner").show(); + jQuery("#cancelsub").prop("disabled", true); + jQuery.post(ajaxurl, { + action:"gaddon_cancel_subscription", + entry_id:entryId, + gaddon_cancel_subscription: gaddon_payment_strings.subscriptionCancelNonce}, + function(response){ + + jQuery("#subscription_cancel_spinner").hide(); + if(response == "1") + { + jQuery("#gform_payment_status").html(gaddon_payment_strings.subscriptionCanceled); + jQuery("#cancelsub").hide(); + } + else + { + jQuery("#cancelsub").prop("disabled", false); + alert(gaddon_payment_strings.subscriptionError); + } + } + ); + + + +} \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/includes/addon/js/gaddon_results.js b/src/wp-content/plugins/gravityforms/includes/addon/js/gaddon_results.js new file mode 100644 index 0000000..686bb8e --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/addon/js/gaddon_results.js @@ -0,0 +1,275 @@ +var gresultsAjaxRequest; + +var gresults = { + + drawCharts: function () { + var containers = jQuery('.gresults-chart-wrapper'); + containers.each(function (index, elem) { + var id = jQuery(elem).attr('id'); + var options = jQuery(elem).data('options'); + var datatable = jQuery(elem).data('datatable'); + var chartType = jQuery(elem).data('charttype'); + var data_array = datatable; + var data = google.visualization.arrayToDataTable(data_array); + var cont = document.getElementById(id); + var chart; + if (chartType == "bar") { + chart = new google.visualization.BarChart(cont); + } else if (chartType == "pie") { + chart = new google.visualization.PieChart(cont); + } else if (chartType == "column") { + chart = new google.visualization.ColumnChart(cont); + } + chart.draw(data, options); + }); + }, + + renderStateData: function (state) { + jQuery("#gresults-results").data('searchcriteria', state.searchCriteria) + jQuery("#gresults-results-filter").html(state.filterUI); + jQuery("#gresults-results").css('opacity', 0); + jQuery("#gresults-results").html(state.html); + gresults.drawCharts(); + jQuery("#gresults-results").fadeTo("slow", 1); + + var filterContainer = jQuery("#gresults-results-field-filters-container"); + filterContainer.resizable(); + filterContainer.resizable('destroy'); + filterContainer.resizable({ + handles: 's' + }); + }, + + getResults: function () { + gresults.recordFormState(); + var gresultsData = jQuery('#gresults-results-filter-form').serialize(); + gresults.sendRequest(gresultsData) + }, + + sendRequest: function (gresultsData, serverStateObject, checkSum) { + var results = jQuery("#gresults-results"); + var filterButtons = jQuery("#gresults-results-filter-buttons input"); + var loading = jQuery(".gresults-filter-loading"); + var viewSlug = jQuery("#gresults-view-slug").val(); + var data_str = "action=gresults_get_results_" + viewSlug + "&" + gresultsData; + if (serverStateObject) + data_str += "&state=" + serverStateObject + "&checkSum=" + checkSum; + + gresultsAjaxRequest = jQuery.ajax({ + url : ajaxurl, + type : 'POST', + dataType : 'json', + data : data_str, + beforeSend: function (xhr, opts) { + results.fadeTo("slow", 0.33); + results.html(''); + loading.show(); + filterButtons.attr('disabled', 'disabled'); + } + }) + .done(function (response) { + if (!response || response === -1) { + loading.hide(); + results.html(gresultsStrings.ajaxError); + } else { + if (response.status === "complete") { + filterButtons.removeAttr('disabled'); + loading.hide(); + results.html(response.html); + jQuery("#gresults-results").data('searchcriteria', response.searchCriteria) //used in 'more' links + + var filterUI = jQuery("#gresults-results-filter").html(); + + gresults.drawCharts(); + results.fadeTo("slow", 1); + if (window.history.replaceState) { + if (!history.state) { + history.replaceState({"html": response.html, "filterUI": filterUI, "searchCriteria": response.searchCriteria}, "", "?" + gresultsData); + } else { + history.pushState({"html": response.html, "filterUI": filterUI, "searchCriteria": response.searchCriteria}, "", "?" + gresultsData); + } + } + gresults.drawCharts(); + if (window["gform_initialize_tooltips"]) + gform_initialize_tooltips(); + } else if (response.status === "incomplete") { + serverStateObject = response.stateObject; + gresults.sendRequest(gresultsData, serverStateObject, response.checkSum); + results.html(response.html); + } else { + loading.hide(); + results.html(gresultsStrings.ajaxError); + } + } + }) + .fail(function (error) { + filterButtons.removeAttr('disabled'); + results.fadeTo("fast", 1); + var msg = error.statusText; + loading.hide(); + if (msg == "abort") { + msg = "Request cancelled"; + } else { + msg = gresultsStrings.ajaxError; + } + results.html(msg); + }) + }, + + getMoreResults: function (formId, fieldId) { + var container = jQuery('#gresults-results-field-content-' + fieldId); + var results = jQuery("#gresults-results"); + var offset = jQuery(container).data('offset'); + var viewSlug = jQuery("#gresults-view-slug").val(); + var searchCriteria = jQuery("#gresults-results").data('searchcriteria'); + jQuery.ajax({ + url : ajaxurl, + type : 'POST', + dataType: 'json', + data : { + action: 'gresults_get_more_results_' + viewSlug, + view: viewSlug, + form_id: formId, + field_id: fieldId, + offset: offset, + search_criteria: searchCriteria + }, + success : function (response) { + if (response === -1) { + //permission denied + } + else { + + if (response.html) + jQuery(container).append(response.html); + if (!response.more_remaining) + jQuery('#gresults-results-field-more-link-' + fieldId).hide(); + + jQuery(container).data('offset', offset + 10); + } + } + }); + + return false; + + }, + + clearFilterForm: function () { + jQuery("#gresults-results-field-filters-container").gfFilterUI(gresultsFilterSettings, [], true); + jQuery('#gresults-results-filter-form').find('input, select').each(function () { + switch (this.type) { + case 'text': + case 'select-one': + jQuery(this).val('').change(); + break; + case 'checkbox': + case 'radio': + this.checked = false; + } + }); + }, + + recordFormState: function () { + jQuery("#gresults-results-filter-form input[type='radio']").each(function () { + if (this.checked) { + jQuery(this).prop("defaultChecked", true); + } else { + jQuery(this).prop("defaultChecked", false); + } + }); + jQuery("#gresults-results-filter-form input[type='checkbox']").each(function () { + if (this.checked) { + jQuery(this).prop("defaultChecked", true); + } else { + jQuery(this).prop("defaultChecked", false); + } + }); + jQuery("#gresults-results-filter-form input[type='text']").each(function () { + jQuery(this).prop("defaultValue", jQuery(this).val()); + }); + jQuery("#gresults-results-filter-form select option").each(function () { + jQuery(this).prop("defaultSelected", jQuery(this).prop('selected')); + }); + }, + + setCustomFilter: function(key, value){ + elementId = "gresults-custom-" + key; + if(jQuery('#' + elementId).length == 0) + jQuery('#gresults-results-filter-form').append(""); + else + jQuery('#' + elementId).val(value); + } + +}; + +google.load('visualization', '1', {packages: ['corechart']}); +google.setOnLoadCallback(gresults.drawCharts); + + +jQuery(document).ready(function () { + + if (jQuery("#gresults-results").length > 0) { + + jQuery("#gresults-results-field-filters-container").gfFilterUI(gresultsFilterSettings, gresultsInitVars, true); + var $window = jQuery(window); + /* + // sticky filter box + var filter = jQuery('#gresults-results-filter'), + filterTop = filter.offset().top, + gresultsIsFilterSticky, + resultsDiv = jQuery('#gresults-results'), + gresultsFilterLeftMargin = 20, + gresultsFilterLeft, + gresultsFilterRelativeLeft; + + function gresultsPostionFilterUI() { + gresultsFilterLeft = resultsDiv.width() + resultsDiv.offset().left + gresultsFilterLeftMargin; + filter.offset({left: gresultsFilterLeft}); + gresultsFilterRelativeLeft = resultsDiv.width() + gresultsFilterLeftMargin; + jQuery("#gresults-results-filter").css('visibility', 'visible'); + } + + $window.scroll(function (e) { + var newIsFilterSticky = $window.scrollTop() > filterTop - 30; + if (gresultsIsFilterSticky != newIsFilterSticky) { + gresultsIsFilterSticky = newIsFilterSticky + if (gresultsIsFilterSticky) { + filter.css("left", gresultsFilterLeft); + } else { + filter.css("left", gresultsFilterRelativeLeft); + } + } + filter.toggleClass('sticky', gresultsIsFilterSticky); + }); + gresultsPostionFilterUI(); + */ + + $window.resize(function (e) { + if (e.target === window) { + gresults.drawCharts(); + } + }); + + window.onpopstate = function (e) { + if (e.state) + gresults.renderStateData(e.state) + }; + + + jQuery("#gresults-results-filter-date-start, #gresults-results-filter-date-end").datepicker({dateFormat: 'yy-mm-dd', changeMonth: true, changeYear: true}); + + jQuery("#gresults-results-filter-form").submit(function (e) { + gresults.getResults(); + return false; + }); + + if (history.state) { + gresults.renderStateData(history.state) + } else { + gresults.getResults(); + } + if (window["gform_initialize_tooltips"]) + gform_initialize_tooltips(); + + } +}); \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/includes/api.php b/src/wp-content/plugins/gravityforms/includes/api.php new file mode 100644 index 0000000..d3e69ac --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/api.php @@ -0,0 +1,835 @@ +is_active; + $form["date_created"] = $form_info->date_created; + + return $form; + + } + + /** + * Deletes the forms with the given Form IDs + * + * @since 1.8 + * @access public + * @static + * + * @param array $form_ids An array of form IDs to delete + */ + public static function delete_forms($form_ids) { + + GFFormsModel::delete_forms($form_ids); + } + + /** + * Deletes the form with the given Form ID + * + * @since 1.8 + * @access public + * @static + * + * @param int $form_id The ID of the Form to delete + * + * @return mixed True for success, or a WP_Error instance + */ + public static function delete_form($form_id) { + $form = self::get_form($form_id); + if (empty($form)) + return new WP_Error("not_found", sprintf(__("Form with id: %s not found", "gravityforms"), $form_id), $form_id); + $result = self::delete_forms(array($form_id)); + + return $result; + } + + /** + * Updates the forms with an array of form objects + * + * @since 1.8 + * @access public + * @static + * + * @param array $forms The Form objects + * + * @return mixed True for success, or a WP_Error instance + */ + public static function update_forms($forms) { + + foreach ($forms as $form) { + $result = self::update_form($form); + if (is_wp_error($result)) + return $result; + } + + return true; + } + + /** + * Updates the form with a given form object. + * + * @since 1.8 + * @access public + * @static + * + * @param array $form_meta The Form object + * @param int $form_id Optional. If specified, then the ID in the Form object will be ignored + * + * @return mixed True for success, or a WP_Error instance + */ + public static function update_form($form_meta, $form_id = null) { + global $wpdb; + + if (!$form_meta) + return new WP_Error("invalid", __("Invalid form object", "gravityforms")); + + $form_table_name = $wpdb->prefix . "rg_form"; + if (empty($form_id)) { + $form_id = $form_meta["id"]; + } else { + // make sure the form object has the right form id + $form_meta["id"] = $form_id; + if (isset($form["fields"])) { + foreach ($form["fields"] as &$field) { + $field["formId"] = $form_id; + } + } + } + + if (empty($form_id)) + return new WP_Error("missing_form_id", __("Missing form id", "gravityforms")); + + $result = GFFormsModel::update_form_meta($form_id, $form_meta); + if (false === $result) + return new WP_Error("error_updating_form", __("Error updating form", "gravityforms"), $wpdb->last_error); + + if (0 === $result) + return new WP_Error("not_found", sprintf(__("Form with id %s not found", "gravityforms"), $form_id), $form_id); + + //updating form title and is_active flag + $is_active = rgar($form_meta, "is_active") ? "1" : "0"; + $result = $wpdb->query($wpdb->prepare("UPDATE $form_table_name SET title=%s, is_active=%s WHERE id=%d", $form_meta["title"], $is_active, $form_meta["id"])); + if (false === $result) + return new WP_Error("error_updating_title", __("Error updating title", "gravityforms"), $wpdb->last_error); + + return true; + } + + /** + * Adds multiple form objects. + * + * @since 1.8 + * @access public + * @static + * + * @param array $forms The Form objects + * + * @return mixed Either an array of new form IDs or a WP_Error instance + */ + public static function add_forms($forms) { + + if (!$forms || !is_array($forms)) + return new WP_Error("invalid", __("Invalid form objects", "gravityforms")); + $form_ids = array(); + foreach ($forms as $form) { + $result = self::add_form($form); + if (is_wp_error($result)) + return $result; + $form_ids[] = $result; + } + + return $form_ids; + } + + /** + * Adds a new form using the given Form object. Warning, little checking is done to make sure it's a valid Form object. + * + * @since 1.8 + * @access public + * @static + * + * @param array $form_meta The Form object + * + * @return mixed Either the new Form ID or a WP_Error instance + */ + public static function add_form($form_meta) { + global $wpdb; + + if (!$form_meta || !is_array($form_meta)) + return new WP_Error("invalid", __("Invalid form object", "gravityforms")); + + if (rgar($form_meta, "title") == "") + return new WP_Error("missing_title", __("The form title is missing", "gravityforms")); + //Making sure title is not duplicate + $title = $form_meta["title"]; + $count = 2; + while (!RGFormsModel::is_unique_title($title)) { + $title = $form_meta["title"] . "($count)"; + $count++; + } + + //inserting form + $form_id = RGFormsModel::insert_form($title); + + //updating form meta + $form_meta["title"] = $title; + + //updating object's id property + $form_meta["id"] = $form_id; + + if (isset($form_meta['confirmations'])) { + $form_meta['confirmations'] = self::set_property_as_key($form_meta['confirmations'], 'id'); + GFFormsModel::update_form_meta($form_id, $form_meta['confirmations'], 'confirmations'); + unset($form_meta['confirmations']); + } + + if (isset($form_meta['notifications'])) { + $form_meta['notifications'] = self::set_property_as_key($form_meta['notifications'], 'id'); + GFFormsModel::update_form_meta($form_id, $form_meta['notifications'], 'notifications'); + unset($form_meta['notifications']); + } + + //updating form meta + $result = GFFormsModel::update_form_meta($form_id, $form_meta); + + if (false === $result) + return new WP_Error("insert_form_error", __("There was a problem while inserting the form", "gravityforms"), $wpdb->last_error); + + return $form_id; + } + + /** + * Private. + * + * @since 1.8 + * @access private + * @static + * @ignore + */ + private static function set_property_as_key($array, $property) { + $new_array = array(); + foreach ($array as $item) { + $new_array[$item[$property]] = $item; + } + + return $new_array; + } + + // ENTRIES ---------------------------------------------------- + + /** + * Returns an array of Entry objects for the given search criteria. The search criteria array is constructed as follows: + * + * Filter by status + * $search_criteria["status"] = "active"; + * + * Filter by date range + * $search_criteria["start_date"] = $start_date; + * $search_criteria["end_date"] = $end_date; + * + * Filter by any column in the main table + * $search_criteria["field_filters"][] = array("key" => "currency", value => "USD"); + * $search_criteria["field_filters"][] = array("key" => "is_read", value => true); + * + * Filter by Field Values + * $search_criteria["field_filters"][] = array('key' => "1", 'value' => "gquiz159982170"); + * + * Filter by a checkbox value (not recommended) + * $search_criteria["field_filters"][] = array('key' => "2.2", 'value' => "gquiz246fec995"); + * note: this will work for checkboxes but it won't work if the checkboxes have been re-ordered - best to use the following example below + * + * Filter by a checkbox value (recommended) + * $search_criteria["field_filters"][] = array('key' => "2", 'value' => "gquiz246fec995"); + * + * Filter by a global search of values of any form field + * $search_criteria["field_filters"][] = array('value' => $search_value); + * OR + * $search_criteria["field_filters"][] = array('key' => 0, 'value' => $search_value); + * + * Filter entries by Entry meta (added using the gform_entry_meta hook) + * $search_criteria["field_filters"][] = array('key' => "gquiz_score", 'value' => "1"); + * $search_criteria["field_filters"][] = array('key' => "gquiz_is_pass", 'value' => "1"); + * + * Filter by ALL / ANY of the field filters + * $search_criteria["field_filters"]["mode"] = "all"; // default + * $search_criteria["field_filters"]["mode"] = "any"; + * + * Sorting: column, field or entry meta + * $sorting = array('key' => $sort_field, 'direction' => "ASC" ); + * + * Paging + * $paging = array('offset' => 0, 'page_size' => 20 ); + * + * + * + * @since 1.8 + * @access public + * @static + * + * @param int|array $form_ids The ID of the form or an array IDs of the Forms. Zero for all forms. + * @param array $search_criteria Optional. An array containing the search criteria + * @param array $sorting Optional. An array containing the sorting criteria + * @param array $paging Optional. An array containing the paging criteria + * @param int $total_count Optional. An output parameter containing the total number of entries. Pass a non-null value to get the total count. + * + * @return mixed Either an array of the Entry objects or a WP_Error instance + */ + public static function get_entries($form_ids, $search_criteria = array(), $sorting = null, $paging = null, &$total_count = null) { + + if (empty($sorting)) + $sorting = array('key' => 'id', 'direction' => "DESC", "is_numeric" => true); + + + $entries = GFFormsModel::search_leads($form_ids, $search_criteria, $sorting, $paging); + + if (!is_null($total_count)) + $total_count = self::count_entries($form_ids, $search_criteria); + + + return $entries; + } + + /** + * Returns the total number of entries for the given search criteria. See get_entries() for examples of the search criteria. + * + * @since 1.8 + * @access public + * @static + * + * @param int|array $form_ids The ID of the Form or an array of Form IDs + * @param array $search_criteria Optional. An array containing the search criteria + * + * @return int The total count + */ + public static function count_entries($form_ids, $search_criteria = array()) { + return GFFormsModel::count_search_leads($form_ids, $search_criteria); + } + + /** + * Returns the Entry object for a given Entry ID + * + * @since 1.8 + * @access public + * @static + * + * @param int $entry_id The ID of the Entry + * + * @return mixed The Entry object or a WP_Error instance + */ + public static function get_entry($entry_id) { + + $search_criteria["field_filters"][] = array("key" => "id", "value" => $entry_id); + $paging = array("offset" => 0, "page_size" => 1); + $entries = self::get_entries(0, $search_criteria, null, $paging); + + if (empty($entries)) + return new WP_Error("not_found", sprintf(__("Entry with id %s not found", "gravityforms"), $entry_id), $entry_id); + + return $entries[0]; + } + + /** + * Adds multiple Entry objects. + * + * @since 1.8 + * @access public + * @static + * + * @param array $entries The Entry objects + * @param int $form_id Optional. If specified, the form_id in the Entry objects will be ignored + * + * @return mixed Either an array of new Entry IDs or a WP_Error instance + */ + public static function add_entries($entries, $form_id = null) { + + $entry_ids = array(); + foreach ($entries as $entry) { + if ($form_id) + $entry["form_id"] = $form_id; + $result = self::add_entry($entry); + if (is_wp_error($result)) + return $result; + $entry_ids[] = $result; + } + + return $entry_ids; + } + + /** + * Updates multiple Entry objects. + * + * @since 1.8 + * @access public + * @static + * + * @param array $entries The Entry objects + * + * @return mixed Either True for success, or a WP_Error instance + */ + public static function update_entries($entries) { + + foreach ($entries as $entry) { + $result = self::update_entry($entry, $entry["id"]); + if (is_wp_error($result)) + return $result; + } + + return true; + } + + /** + * Updates a single Entry object. + * + * @since 1.8 + * @access public + * @static + * + * @param array $entry The Entry object + * @param int $entry_id Optional. If specified, the ID in the Entry object will be ignored + * + * @return mixed Either True or a WP_Error instance + */ + public static function update_entry($entry, $entry_id = null) { + global $wpdb; + + if (empty($entry_id)) + $entry_id = $entry["id"]; + + if (empty($entry_id)) + return new WP_Error("missing_entry_id", __("Missing entry id", "gravityforms")); + + $current_entry = self::get_entry($entry_id); + + if(!$current_entry) + return new WP_Error("not_found", __("Entry not found", "gravityforms"), $entry_id); + + + if(is_wp_error($current_entry)) + return $current_entry; + + // make sure the form id exists + $form_id = rgar($entry, "form_id"); + if (empty($form_id)) + $form_id = rgar($current_entry, "form_id"); + + if (false === self::form_id_exists($form_id)) + return new WP_Error("invalid_form_id", __("The form for this entry does not exist", "gravityforms")); + + // use values in the entry object if present + $post_id = isset($entry["post_id"]) ? intval($entry["post_id"]) : 'NULL'; + $date_created = isset($entry["date_created"]) ? sprintf("'%s'", mysql_real_escape_string($entry["date_created"])) : "utc_timestamp()"; + $is_starred = isset($entry["is_starred"]) ? $entry["is_starred"] : 0; + $is_read = isset($entry["is_read"]) ? $entry["is_read"] : 0; + $ip = isset($entry["ip"]) ? $entry["ip"] : GFFormsModel::get_ip(); + $source_url = isset($entry["source_url"]) ? $entry["source_url"] : GFFormsModel::get_current_page_url(); + $user_agent = isset($entry["user_agent"]) ? $entry["user_agent"] : "API"; + $currency = isset($entry["currency"]) ? $entry["currency"] : GFCommon::get_currency(); + $payment_status = isset($entry["payment_status"]) ? sprintf("'%s'", mysql_real_escape_string($entry["payment_status"])) : 'NULL'; + $payment_date = strtotime(rgar($entry, "payment_date")) ? "'" . gmdate('Y-m-d H:i:s', strtotime("{$entry["payment_date"]}")) . "'" : "NULL"; + $payment_amount = isset($entry["payment_amount"]) ? (float)$entry["payment_amount"] : 'NULL'; + $payment_method = isset($entry["payment_method"]) ? $entry["payment_method"] : ''; + $transaction_id = isset($entry["transaction_id"]) ? sprintf("'%s'", mysql_real_escape_string($entry["transaction_id"])) : 'NULL'; + $is_fulfilled = isset($entry["is_fulfilled"]) ? intval($entry["is_fulfilled"]) : 'NULL'; + + global $current_user; + $user_id = isset($entry["created_by"]) ? mysql_real_escape_string($entry["created_by"]) : ""; + if (empty($user_id)) + $user_id = $current_user && $current_user->ID ? $current_user->ID : 'NULL'; + + $transaction_type = isset($entry["transaction_type"]) ? intval($entry["transaction_type"]) : 'NULL'; + + $lead_table = GFFormsModel::get_lead_table_name(); + $result = $wpdb->query($wpdb->prepare(" + UPDATE $lead_table + SET + form_id = %d, + post_id = {$post_id}, + date_created = {$date_created}, + is_starred = %d, + is_read = %d, + ip = %s, + source_url = %s, + user_agent = %s, + currency = %s, + payment_status = {$payment_status}, + payment_date = {$payment_date}, + payment_amount = {$payment_amount}, + transaction_id = {$transaction_id}, + is_fulfilled = {$is_fulfilled}, + created_by = {$user_id}, + transaction_type = {$transaction_type}, + payment_method = %s + WHERE + id = %d + ", $form_id, $is_starred, $is_read, $ip, $source_url, $user_agent, $currency, $payment_method, $entry_id)); + if (false === $result) + return new WP_Error("update_entry_properties_failed", __("There was a problem while updating the entry properties", "gravityforms"), $wpdb->last_error); + + // only save field values for fields that currently exist in the form. The rest in entry_id will be ignored. The rest in current_entry will get deleted. + + $lead_detail_table = GFFormsModel::get_lead_details_table_name(); + $current_fields = $wpdb->get_results($wpdb->prepare("SELECT id, field_number FROM $lead_detail_table WHERE lead_id=%d", $entry_id)); + + $form = GFFormsModel::get_form_meta($form_id); + foreach ($form["fields"] as $field) { + $type = GFFormsModel::get_input_type($field); + if(in_array($type, array("html", "page", "section"))){ + continue; + } + if (isset($field["inputs"]) && is_array($field["inputs"])) { + foreach ($field["inputs"] as $input) { + $input_id = (string)$input["id"]; + if (isset($entry[$input_id])) { + $lead_detail_id = GFFormsModel::get_lead_detail_id($current_fields, $input_id); + $result = GFFormsModel::update_lead_field_value($form, $entry, $field, $lead_detail_id, $input_id, $entry[$input_id]); + if(false === $result) + return new WP_Error("update_input_value_failed", __("There was a problem while updating one of the input values for the entry", "gravityforms"), $wpdb->last_error); + unset($current_entry[$input_id]); + } + } + } else { + $field_id = $field["id"]; + $field_value = isset($entry[(string)$field_id]) ? $entry[(string)$field_id] : ""; + $lead_detail_id = GFFormsModel::get_lead_detail_id($current_fields, $field_id); + $result = GFFormsModel::update_lead_field_value($form, $entry, $field, $lead_detail_id, $field_id, $field_value); + if (false === $result) + return new WP_Error("update_field_values_failed", __("There was a problem while updating the field values", "gravityforms"), $wpdb->last_error); + unset($current_entry[$field_id]); + } + } + + // add save the entry meta values - only for the entry meta currently available for the form, ignore the rest + $entry_meta = GFFormsModel::get_entry_meta($form_id); + if (is_array($entry_meta)) { + foreach (array_keys($entry_meta) as $key) { + if (isset($entry[$key])){ + gform_update_meta($entry_id, $key, $entry[$key]); + unset($current_entry[$key]); + } + + } + } + + // now delete remaining values from the old entry + + if (is_array($entry_meta)) { + foreach (array_keys($entry_meta) as $meta_key) { + if (isset($current_entry[$meta_key])){ + gform_delete_meta($entry_id, $meta_key); + unset($current_entry[$meta_key]); + } + } + } + + foreach($current_entry as $k => $v){ + $lead_detail_id = GFFormsModel::get_lead_detail_id($current_fields, $k); + $result = GFFormsModel::update_lead_field_value($form, $entry, $field, $lead_detail_id, $k, ""); + if (false === $result) + return new WP_Error("update_field_values_failed", __("There was a problem while updating the field values", "gravityforms"), $wpdb->last_error); + } + + return true; + } + + /** + * Adds a single Entry object. + * + * Intended to be used for importing an entry object. The usual hooks that are triggered while saving entries are not fired here. + * Checks that the form id, field ids and entry meta exist and ignores legacy values (i.e. values for fields that no longer exist). + * + * @since 1.8 + * @access public + * @static + * + * @param array $entry The Entry object + * + * @return mixed Either the new Entry ID or a WP_Error instance + */ + public static function add_entry($entry) { + global $wpdb; + + // make sure the form id exists + $form_id = rgar($entry, "form_id"); + if (empty($form_id)) + return new WP_Error("empty_form_id", __("The form id must be specified", "gravityforms")); + + if (false === self::form_id_exists($form_id)) + return new WP_Error("invalid_form_id", __("The form for this entry does not exist", "gravityforms")); + + // use values in the entry object if present + $post_id = isset($entry["post_id"]) ? intval($entry["post_id"]) : 'NULL'; + $date_created = isset($entry["date_created"]) && $entry["date_created"] != "" ? sprintf("'%s'", mysql_real_escape_string($entry["date_created"])) : "utc_timestamp()"; + $is_starred = isset($entry["is_starred"]) ? $entry["is_starred"] : 0; + $is_read = isset($entry["is_read"]) ? $entry["is_read"] : 0; + $ip = isset($entry["ip"]) ? $entry["ip"] : GFFormsModel::get_ip(); + $source_url = isset($entry["source_url"]) ? $entry["source_url"] : GFFormsModel::get_current_page_url(); + $user_agent = isset($entry["user_agent"]) ? $entry["user_agent"] : "API"; + $currency = isset($entry["currency"]) ? $entry["currency"] : GFCommon::get_currency(); + $payment_status = isset($entry["payment_status"]) ? sprintf("'%s'", mysql_real_escape_string($entry["payment_status"])) : 'NULL'; + $payment_date = strtotime(rgar($entry, "payment_date")) ? sprintf("'%s'", gmdate('Y-m-d H:i:s', strtotime("{$entry["payment_date"]}"))) : "NULL"; + $payment_amount = isset($entry["payment_amount"]) ? (float)$entry["payment_amount"] : 'NULL'; + $payment_method = isset($entry["payment_method"]) ? $entry["payment_method"] : ''; + $transaction_id = isset($entry["transaction_id"]) ? sprintf("'%s'", mysql_real_escape_string($entry["transaction_id"])) : 'NULL'; + $is_fulfilled = isset($entry["is_fulfilled"]) ? intval($entry["is_fulfilled"]) : 'NULL'; + + global $current_user; + $user_id = isset($entry["created_by"]) ? mysql_real_escape_string($entry["created_by"]) : ""; + if (empty($user_id)) + $user_id = $current_user && $current_user->ID ? $current_user->ID : 'NULL'; + + $transaction_type = isset($entry["transaction_type"]) ? intval($entry["transaction_type"]) : 'NULL'; + + $lead_table = GFFormsModel::get_lead_table_name(); + $result = $wpdb->query($wpdb->prepare(" + INSERT INTO $lead_table + (form_id, post_id, date_created, is_starred, is_read, ip, source_url, user_agent, currency, payment_status, payment_date, payment_amount, transaction_id, is_fulfilled, created_by, transaction_type, payment_method) + VALUES + (%d, {$post_id}, {$date_created}, %d, %d, %s, %s, %s, %s, {$payment_status}, {$payment_date}, {$payment_amount}, {$transaction_id}, {$is_fulfilled}, {$user_id}, {$transaction_type}, %s) + ", $form_id, $is_starred, $is_read, $ip, $source_url, $user_agent, $currency, $payment_method)); + if (false === $result) + return new WP_Error("insert_entry_properties_failed", __("There was a problem while inserting the entry properties", "gravityforms"), $wpdb->last_error); + // reading newly created lead id + $entry_id = $wpdb->insert_id; + $entry["id"] = $entry_id; + + // only save field values for fields that currently exist in the form + + $form = GFFormsModel::get_form_meta($form_id); + foreach ($form["fields"] as $field) { + if(in_array($field["type"], array("html", "page", "section"))){ + continue; + } + if (isset($field["inputs"]) && is_array($field["inputs"])) { + foreach ($field["inputs"] as $input) { + $input_id = $input["id"]; + if (isset($entry[(string)$input_id])) { + $result = GFFormsModel::update_lead_field_value($form, $entry, $field, 0, $input_id, $entry[(string)$input_id]); + if(false === $result) + return new WP_Error("insert_input_value_failed", __("There was a problem while inserting one of the input values for the entry", "gravityforms"), $wpdb->last_error); + } + } + } else { + $field_id = $field["id"]; + $field_value = isset($entry[(string)$field_id]) ? $entry[(string)$field_id] : ""; + $result = GFFormsModel::update_lead_field_value($form, $entry, $field, 0, $field_id, $field_value); + if (false === $result) + return new WP_Error("insert_field_values_failed", __("There was a problem while inserting the field values", "gravityforms"), $wpdb->last_error); + } + } + + // add save the entry meta values - only for the entry meta currently available for the form, ignore the rest + $entry_meta = GFFormsModel::get_entry_meta($form_id); + if (is_array($entry_meta)) { + foreach (array_keys($entry_meta) as $key) { + if (isset($entry[$key])) + gform_update_meta($entry_id, $key, $entry[$key]); + } + } + + return $entry_id; + } + + /** + * Deletes a single Entry. + * + * @since 1.8 + * @access public + * @static + * + * @param int $entry_id The ID of the Entry object + * + * @return mixed Either true for success or a WP_Error instance + */ + public static function delete_entry($entry_id) { + + $entry = GFFormsModel::get_lead($entry_id); + if (empty($entry)) + return new WP_Error("invalid_entry_id", sprintf(__("Invalid entry id: %s", "gravityforms"), $entry_id), $entry_id); + GFFormsModel::delete_lead($entry_id); + + return true; + } + + // FEEDS ------------------------------------------------------ + + /** + * Returns all the feeds for the given criteria. + * + * @since 1.8 + * @access public + * @static + * + * @param mixed $feed_ids The ID of the Feed or an array of Feed IDs + * @param int $form_id The ID of the Form to which the Feeds belong + * @param string $addon_slug The slug of the add-on to which the Feeds belong + * @param bool $is_active + * + * @return mixed Either an array of Feed objects or a WP_Error instance + */ + public static function get_feeds($feed_ids = null, $form_id = null, $addon_slug = null, $is_active = true) { + global $wpdb; + + $table = $wpdb->prefix . "gf_addon_feed"; + $where_arr = array(); + $where_arr[] = $wpdb->prepare("is_active=%d", $is_active); + if (false === empty($form_id)) + $where_arr[] = $wpdb->prepare("form_id=%d", $form_id); + if (false === empty($addon_slug)) + $where_arr[] = $wpdb->prepare("addon_slug=%s", $addon_slug); + if (false === empty($feed_ids)) { + if (!is_array($feed_ids)) + $feed_ids = array($feed_ids); + $in_str_arr = array_fill(0, count($feed_ids), '%d'); + $in_str = join($in_str_arr, ","); + $where_arr[] = $wpdb->prepare("id IN ($in_str)", $feed_ids); + } + + + $where = join(" AND ", $where_arr); + + $sql = "SELECT id, form_id, addon_slug, meta FROM {$table} WHERE $where"; + + $results = $wpdb->get_results($sql, ARRAY_A); + if (empty($results)) + return new WP_Error("not_found", __("Feed not found", "gravityforms")); + + foreach ($results as &$result) { + $result["meta"] = json_decode($result["meta"], true); + } + + return $results; + } + + /** + * Deletes a single Feed + * + * @since 1.8 + * @access public + * @static + * + * @param int $feed_id The ID of the Feed to delete + * + * @return mixed Either an array of Feed objects or a WP_Error instance + */ + public static function delete_feed($feed_id) { + + global $wpdb; + + $table = $wpdb->prefix . "gf_addon_feed"; + + $sql = $wpdb->prepare("DELETE FROM {$table} WHERE id=%d", $feed_id); + + $results = $wpdb->query($sql); + if (false === $results) + return new WP_Error("error_deleting", sprintf(__("There was an an error while deleting feed id %s", "gravityforms"), $feed_id), $wpdb->last_error); + + if (0 === $results) + return new WP_Error("not_found", sprintf(__("Feed id %s not found", "gravityforms"), $feed_id)); + + return true; + } + + public static function update_feed($feed_id, $feed_meta, $form_id = null) { + global $wpdb; + + $feed_meta_json = json_encode($feed_meta); + $table = $wpdb->prefix . "gf_addon_feed"; + if (empty($form_id)) + $sql = $wpdb->prepare("UPDATE {$table} SET meta= %s WHERE id=%d", $feed_meta_json, $feed_id); + else + $sql = $wpdb->prepare("UPDATE {$table} SET form_id = %d, meta= %s WHERE id=%d", $form_id, $feed_meta_json, $feed_id); + + $results = $wpdb->query($sql); + + if (false === $results) + return new WP_Error("error_updating", sprintf(__("There was an an error while updating feed id %s", "gravityforms"), $feed_id), $wpdb->last_error); + + if (0 === $results) + return new WP_Error("not_found", sprintf(__("Feed id %s not found", "gravityforms"), $feed_id)); + + return $results; + } + + /** + * Adds a feed with the given Feed object. + * + * @since 1.8 + * @access public + * @static + * + * @param int $form_id The ID of the Form to which the Feed belongs + * @param array $feed_meta The Feed object + * @param string $addon_slug The slug of the add-on to which the Feeds belong + * + * @return mixed Either the ID of the newly created Feed or a WP_Error instance + */ + public static function add_feed($form_id, $feed_meta, $addon_slug) { + global $wpdb; + + $table = $wpdb->prefix . "gf_addon_feed"; + $feed_meta_json = json_encode($feed_meta); + $sql = $wpdb->prepare("INSERT INTO {$table} (form_id, meta, addon_slug) VALUES (%d, %s, %s)", $form_id, $feed_meta_json, $addon_slug); + + $results = $wpdb->query($sql); + + if (false === $results) + return new WP_Error("error_inserting", __("There was an an error while inserting a feed", "gravityforms"), $wpdb->last_error); + + return $wpdb->insert_id; + } + + + // HELPERS ---------------------------------------------------- + + /** + * Private. + * + * @since 1.8 + * @access private + * @static + * @ignore + */ + public static function form_id_exists($form_id) { + global $wpdb; + $form_table_name = GFFormsModel::get_form_table_name(); + $form_id = intval($form_id); + $result = $wpdb->get_var($wpdb->prepare(" SELECT count(id) FROM {$form_table_name} + WHERE id=%d", $form_id)); + $result = intval($result); + + return $result > 0; + } + +} diff --git a/src/wp-content/plugins/gravityforms/includes/locking/class-gf-locking.php b/src/wp-content/plugins/gravityforms/includes/locking/class-gf-locking.php new file mode 100644 index 0000000..f770ee6 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/locking/class-gf-locking.php @@ -0,0 +1,569 @@ +_object_type = $object_type; + $this->_redirect_url = $redirect_url; + $this->_capabilities = $capabilities; + + if (defined('DOING_AJAX') && DOING_AJAX) { + $this->init_ajax(); + } else { + $this->register_scripts(); + $is_locking_page = false; + $is_edit_page = false; + if ($this->is_edit_page()) { + $this->init_edit_lock(); + $is_locking_page = true; + $is_edit_page = true; + } else if ($this->is_list_page()) { + $this->init_list_page(); + $is_locking_page = true; + } else if ($this->is_view_page()) { + $this->init_view_page(); + $is_locking_page = true; + } + if($is_locking_page){ + $this->_object_id = $this->get_object_id(); + $this->_edit_url = $edit_url; + $this->maybe_lock_object($is_edit_page); + } + } + } + + /** + * Override this method to check the condition for the edit page. + * + * @return bool + */ + protected function is_edit_page() { + return false; + } + + /** + * Override this method to check the condition for the list page. + * + * @return bool + */ + protected function is_list_page() { + return false; + } + + /** + * Override this method to check the condition for the view page. + * + * @return bool + */ + protected function is_view_page() { + return false; + } + + /** + * Override this method to provide the class with the correct object id. + * + * @return bool + */ + protected function get_object_id() { + return rgget("id"); // example in the case of form id + } + + public function init_edit_lock() { + add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts')); + } + + public function init_ajax() { + add_filter('heartbeat_received', array($this, 'heartbeat_refresh_nonces'), 10, 3); + add_filter('heartbeat_received', array($this, 'heartbeat_check_locked_objects'), 10, 3); + add_filter('heartbeat_received', array($this, 'heartbeat_refresh_lock'), 10, 3); + add_filter('heartbeat_received', array($this, 'heartbeat_request_lock'), 10, 3); + add_filter('wp_ajax_gf_lock_request_' . $this->_object_type, array($this, 'ajax_lock_request')); + add_filter('wp_ajax_gf_reject_lock_request_' . $this->_object_type, array($this, 'ajax_reject_lock_request')); + } + + public function init_list_page() { + add_action('admin_enqueue_scripts', array($this, 'enqueue_list_scripts')); + } + + public function init_view_page() { + add_action('admin_enqueue_scripts', array($this, 'enqueue_view_page_scripts')); + } + + public function register_scripts() { + $locking_path = GFCommon::get_base_url() . "/includes/locking/"; + wp_register_script("gforms_locking", $locking_path . "js/locking.js", array("jquery", "heartbeat"), GFCommon::$version); + wp_register_script("gforms_locking_view", $locking_path . "js/locking-view.js", array("jquery", "heartbeat"), GFCommon::$version); + wp_register_script("gforms_locking_list", $locking_path . "js/locking-list.js", array("jquery", "heartbeat"), GFCommon::$version); + wp_register_style("gforms_locking_css", $locking_path . "css/locking.css", array(), GFCommon::$version); + wp_register_style("gforms_locking_list_css", $locking_path . "css/locking-list.css", array(), GFCommon::$version); + + // No conflict scripts + add_filter('gform_noconflict_scripts', array($this, 'register_noconflict_scripts')); + add_filter('gform_noconflict_styles', array($this, 'register_noconflict_styles')); + } + + public function register_noconflict_scripts($scripts) { + $locking_scripts = array("gforms_locking", "gforms_locking_list", "gforms_locking_view"); + + return array_merge($scripts, $locking_scripts); + } + + public function register_noconflict_styles($styles) { + $locking_styles = array("gforms_locking_css", "gforms_locking_list_css"); + + return array_merge($styles, $locking_styles); + } + + public function enqueue_scripts() { + + + wp_enqueue_script("gforms_locking"); + wp_enqueue_style("gforms_locking_css"); + $lock_user_id = $this->check_lock($this->get_object_id()); + + $strings = array( + 'noResponse' => $this->get_string("no_response"), + 'requestAgain' => $this->get_string("request_again"), + 'requestError' => $this->get_string("request_error"), + 'gainedControl' => $this->get_string("gained_control"), + 'rejected' => $this->get_string("request_rejected"), + 'pending' => $this->get_string("request_pending") + ); + + + $vars = array( + "hasLock" => !$lock_user_id ? 1 : 0, + "lockUI" => $this->get_lock_ui($lock_user_id), + "objectID" => $this->_object_id, + "objectType" => $this->_object_type, + "strings" => $strings + ); + + wp_localize_script("gforms_locking", "gflockingVars", $vars); + } + + public function enqueue_list_scripts() { + + wp_enqueue_script("gforms_locking_list"); + wp_enqueue_style("gforms_locking_list_css"); + + $vars = array( + "objectType" => $this->_object_type, + ); + + wp_localize_script("gforms_locking_list", "gflockingVars", $vars); + + } + + public function enqueue_view_page_scripts() { + + wp_enqueue_script("gforms_locking_view"); + wp_enqueue_style("gforms_locking_view_css"); + + $lock_user_id = $this->check_lock($this->get_object_id()); + $vars = array( + "hasLock" => !$lock_user_id ? 1 : 0, + "objectID" => $this->_object_id, + "objectType" => $this->_object_type, + ); + + wp_localize_script("gforms_locking_view", "gflockingVars", $vars); + } + + + protected function get_strings() { + $strings = array( + "currently_locked" => __('This page is currently locked. Click on the "Request Control" button to let %s know you\'d like to take over.', "gravityforms"), + "accept" => __("Accept", "gravityforms"), + "cancel" => __("Cancel", "gravityforms"), + "currently_editing" => __("%s is currently editing", "gravityforms"), + "taken_over" => __("%s has taken over and is currently editing.", "gravityforms"), + "lock_requested" => __("%s has requested permission to take over control.", "gravityforms"), + "gained_control" => __("You now have control", "gravityforms"), + "request_pending" => __("Pending", "gravityforms"), + "no_response" => __("No response", "gravityforms"), + "request_again" => __("Request again", "gravityforms"), + "request_error" => __("Error", "gravityforms"), + "request_rejected" => __("Your request was rejected", "gravityforms") + ); + + return $strings; + } + + public function ajax_lock_request() { + $object_id = rgget("object_id"); + $response = $this->request_lock($object_id); + echo json_encode($response); + die(); + } + + public function ajax_reject_lock_request() { + $object_id = rgget("object_id"); + $response = $this->delete_lock_request_meta($object_id); + echo json_encode($response); + die(); + } + + protected function has_lock() { + return $this->check_lock($this->get_object_id()) ? true : false; + } + + + protected function check_lock($object_id) { + + if (!$user_id = $this->get_lock_meta($object_id)) + return false; + + if ($user_id != get_current_user_id()) + return $user_id; + + return false; + } + + protected function check_lock_request($object_id) { + + if (!$user_id = $this->get_lock_request_meta($object_id)) + return false; + + if ($user_id != get_current_user_id()) + return $user_id; + + return false; + } + + protected function set_lock($object_id) { + if (!GFCommon::current_user_can_any($this->_capabilities)) + return false; + + if (0 == ($user_id = get_current_user_id())) + return false; + + $this->update_lock_meta($object_id, $user_id); + + return $user_id; + } + + protected function request_lock($object_id) { + if (0 == ($user_id = get_current_user_id())) + return false; + + $lock_holder_user_id = $this->check_lock($object_id); + + $result = array(); + if (!$lock_holder_user_id) { + $this->set_lock($object_id); + $result["html"] = __("You now have control", "gravityforms"); + $result["status"] = "lock_obtained"; + } else { + $user = get_userdata($lock_holder_user_id); + $this->update_lock_request_meta($object_id, $user_id); + $result["html"] = sprintf(__("%s has been notified of your request", "gravityforms"), $user->display_name); + $result["status"] = "lock_requested"; + } + + return $result; + } + + protected function get_lock_request_meta($object_id) { + return GFCache::get(self::PREFIX_EDIT_LOCK_REQUEST . $this->_object_type . "_" . $object_id); + } + + protected function get_lock_meta($object_id) { + return GFCache::get(self::PREFIX_EDIT_LOCK . $this->_object_type . "_" . $object_id); + } + + protected function update_lock_meta($object_id, $lock_value) { + GFCache::set(self::PREFIX_EDIT_LOCK . $this->_object_type . "_" . $object_id, $lock_value, true, 90); + } + + protected function update_lock_request_meta($object_id, $lock_request_value) { + GFCache::set(self::PREFIX_EDIT_LOCK_REQUEST . $this->_object_type . "_" . $object_id, $lock_request_value, true, 120); + } + + protected function delete_lock_request_meta($object_id) { + GFCache::delete(self::PREFIX_EDIT_LOCK_REQUEST . $this->_object_type . "_" . $object_id); + + return true; + } + + protected function delete_lock_meta($object_id) { + GFCache::delete(self::PREFIX_EDIT_LOCK . $this->_object_type . "_" . $object_id); + + return true; + } + + public function maybe_lock_object($is_edit_page) { + if (isset($_GET['get-edit-lock'])) { + $this->set_lock($this->_object_id); + wp_redirect($this->_edit_url); + exit(); + } else if (isset($_GET['release-edit-lock'])) { + $this->delete_lock_meta($this->_object_id); + wp_redirect($this->_redirect_url); + exit(); + } else { + if ($is_edit_page && !$user_id = $this->check_lock($this->_object_id)) + $this->set_lock($this->_object_id); + } + } + + + + public function heartbeat_check_locked_objects($response, $data, $screen_id) { + $checked = array(); + $heartbeat_key = 'gform-check-locked-objects-' . $this->_object_type; + if (array_key_exists($heartbeat_key, $data) && is_array($data[$heartbeat_key])) { + foreach ($data[$heartbeat_key] as $object_id) { + if (($user_id = $this->check_lock($object_id)) && ($user = get_userdata($user_id))) { + $send = array('text' => sprintf(__($this->get_string("currently_editing")), $user->display_name)); + + if (($avatar = get_avatar($user->ID, 18)) && preg_match("|src='([^']+)'|", $avatar, $matches)) + $send['avatar_src'] = $matches[1]; + + $checked[$object_id] = $send; + } + } + } + + if (!empty($checked)) + $response[$heartbeat_key] = $checked; + + return $response; + } + + public function heartbeat_refresh_lock($response, $data, $screen_id) { + $heartbeat_key = 'gform-refresh-lock-' . $this->_object_type; + if (array_key_exists($heartbeat_key, $data)) { + $received = $data[$heartbeat_key]; + $send = array(); + + if (!isset($received['objectID'])) + return $response; + + $object_id = $received['objectID']; + + if (($user_id = $this->check_lock($object_id)) && ($user = get_userdata($user_id))) { + $error = array( + 'text' => sprintf(__($this->get_string("taken_over")), $user->display_name) + ); + + if ($avatar = get_avatar($user->ID, 64)) { + if (preg_match("|src='([^']+)'|", $avatar, $matches)) + $error['avatar_src'] = $matches[1]; + } + + $send['lock_error'] = $error; + } else { + if ($new_lock = $this->set_lock($object_id)) { + $send['new_lock'] = $new_lock; + + if (($lock_requester = $this->check_lock_request($object_id)) && ($user = get_userdata($lock_requester))) { + $lock_request = array( + 'text' => sprintf(__($this->get_string("lock_requested")), $user->display_name) + ); + + if ($avatar = get_avatar($user->ID, 64)) { + if (preg_match("|src='([^']+)'|", $avatar, $matches)) + $lock_request['avatar_src'] = $matches[1]; + } + $send['lock_request'] = $lock_request; + } + + } + + } + + $response[$heartbeat_key] = $send; + } + + return $response; + } + + public function heartbeat_request_lock($response, $data, $screen_id) { + $heartbeat_key = 'gform-request-lock-' . $this->_object_type; + if (array_key_exists($heartbeat_key, $data)) { + $received = $data[$heartbeat_key]; + $send = array(); + + if (!isset($received['objectID'])) + return $response; + + $object_id = $received['objectID']; + + if (($user_id = $this->check_lock($object_id)) && ($user = get_userdata($user_id))) { + if ($this->get_lock_request_meta($object_id)) { + $send["status"] = "pending"; + } else { + $send["status"] = "deleted"; + } + } else { + if ($new_lock = $this->set_lock($object_id)) { + $send['status'] = "granted"; + } + + } + + $response[$heartbeat_key] = $send; + } + + return $response; + } + + + public function heartbeat_refresh_nonces($response, $data, $screen_id) { + if (array_key_exists('gform-refresh-nonces', $data)) { + $received = $data['gform-refresh-nonces']; + $response['gform-refresh-nonces'] = array('check' => 1); + + if (!isset($received['objectID'])) + return $response; + + $object_id = $received['objectID']; + + if (!GFCommon::current_user_can_any($this->_capabilities) || empty($received['post_nonce'])) + return $response; + + if (2 === wp_verify_nonce($received['object_nonce'], 'update-contact_' . $object_id)) { + $response['gform-refresh-nonces'] = array( + 'replace' => array( + '_wpnonce' => wp_create_nonce('update-object_' . $object_id), + ), + 'heartbeatNonce' => wp_create_nonce('heartbeat-nonce'), + ); + } + } + + return $response; + } + + public function get_lock_ui($user_id) { + + $user = get_userdata($user_id); + + $locked = $user_id && $user; + + $edit_url = $this->_edit_url; + + $hidden = $locked ? '' : ' hidden'; + if ($locked) { + + $message = '
        +
        ' . get_avatar($user->ID, 64) . '
        +

        ' . __(sprintf($this->get_string("currently_locked"), $user->display_name)) . '

        +

        + + + + ' . $this->get_string("cancel") . ' +

        +
        + +
        +
        '; + + } else { + + $message = '
        +
        +

        +
        +

        +

        + ' . $this->get_string("accept") . ' + +

        +
        '; + + } + $html = '
        +
        +
        '; + $html .= $message; + + $html .= '
        +
        '; + + return $html; + } + + public function get_string($string_key) { + $strings = $this->get_strings(); + + return rgar($strings, $string_key); + } + + // helper functions for the list page + + public function list_row_class($object_id, $echo = true) { + $locked_class = $this->is_locked($object_id) ? "wp-locked" : ""; + $classes = " gf-locking " . $locked_class; + if ($echo) + echo $classes; + + return $classes; + } + + public function is_locked($object_id) { + if (!$user_id = GFCache::get(self::PREFIX_EDIT_LOCK . $this->_object_type . "_" . $object_id)) + return false; + + if ($user_id != get_current_user_id()) + return true; + + return false; + } + + public function lock_indicator($echo = true) { + + $lock_indicator = '
        '; + + if ($echo) + echo $lock_indicator; + + return $lock_indicator; + } + + public function lock_info($object_id, $echo = true) { + $user_id = $this->check_lock($object_id); + + if (!$user_id) + return ""; + + if ($user_id && $user = get_userdata($user_id)) { + $locked_avatar = get_avatar($user->ID, 18); + $locked_text = esc_html(sprintf($this->get_string("currently_editing"), $user->display_name)); + } else { + $locked_avatar = $locked_text = ''; + } + + $locked_info = '
        ' . $locked_avatar . ' ' . $locked_text . "
        \n"; + + if ($echo) + echo $locked_info; + + return $locked_info; + } + + protected function is_page($page_name) { + + return $page_name == GFForms::get_page(); + } + +} diff --git a/src/wp-content/plugins/gravityforms/includes/locking/css/locking-list.css b/src/wp-content/plugins/gravityforms/includes/locking/css/locking-list.css new file mode 100644 index 0000000..3517224 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/locking/css/locking-list.css @@ -0,0 +1,3 @@ +tr.wp-locked .locked-indicator { + background: url('../images/lock.png') no-repeat; +} diff --git a/src/wp-content/plugins/gravityforms/includes/locking/css/locking.css b/src/wp-content/plugins/gravityforms/includes/locking/css/locking.css new file mode 100644 index 0000000..fc465ed --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/locking/css/locking.css @@ -0,0 +1,20 @@ + +#gform-lock-dialog .gform-locked-message, +#gform-lock-dialog .gform-taken-over { + margin: 25px; +} + +#gform-lock-dialog .gform-locked-message a.button { + margin-right: 10px; +} + +#gform-lock-dialog .gform-locked-avatar { + float: left; + margin: 0 20px 20px 0; +} + +#gform-lock-dialog .wp-tab-first { + outline: 0; +} + + diff --git a/src/wp-content/plugins/gravityforms/includes/locking/images/lock.png b/src/wp-content/plugins/gravityforms/includes/locking/images/lock.png new file mode 100644 index 0000000..e17cc7d Binary files /dev/null and b/src/wp-content/plugins/gravityforms/includes/locking/images/lock.png differ diff --git a/src/wp-content/plugins/gravityforms/includes/locking/js/locking-list.js b/src/wp-content/plugins/gravityforms/includes/locking/js/locking-list.js new file mode 100644 index 0000000..e15e67a --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/locking/js/locking-list.js @@ -0,0 +1,53 @@ +(function (gflocking, $) { + var objectType; + + $(document).ready(function () { + objectType = gflockingVars.objectType; + gflocking.init(); + + }); + + gflocking.init = function () { + initHeartbeat(); + }; + + function initHeartbeat() { + + var checkLocksKey = 'gform-check-locked-objects-' + objectType; + + $(document).on('heartbeat-tick.' + checkLocksKey,function (e, data) { + var locked = data[checkLocksKey] || {}; + + $('.gf-locking').each(function (i, el) { + var id , $row = $(el), lock_data, avatar; + id = $row.data("id"); + if (locked.hasOwnProperty(id)) { + if (!$row.hasClass('wp-locked')) { + lock_data = locked[id]; + $row.find('.locked-text').text(lock_data.text); + $row.find('.check-column input[type=checkbox]').prop('checked', false); + + if (lock_data.avatar_src) { + avatar = $('').attr('src', lock_data.avatar_src.replace(/&/g, '&')); + $row.find('.locked-avatar').empty().append(avatar); + } + $row.addClass('wp-locked'); + } + } else if ($row.hasClass('wp-locked')) { + $row.removeClass('wp-locked').delay(1000).find('.locked-info span').empty(); + } + }); + }).on('heartbeat-send.' + checkLocksKey, function (e, data) { + var check = []; + + $('.gf-locking').each(function (i, row) { + check.push($(row).data("id")); + }); + + if (check.length) + data[checkLocksKey] = check; + }); + + } + +}(window.gflocking = window.gflocking || {}, jQuery)); diff --git a/src/wp-content/plugins/gravityforms/includes/locking/js/locking-view.js b/src/wp-content/plugins/gravityforms/includes/locking/js/locking-view.js new file mode 100644 index 0000000..87926bb --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/locking/js/locking-view.js @@ -0,0 +1,40 @@ +(function (gflocking, $) { + var objectID, objectType; + + $(document).ready( function() { + objectID = gflockingVars.objectID; + objectType = gflockingVars.objectType; + gflocking.init(); + }); + + gflocking.init = function () { + initHeartbeat(); + }; + + function initHeartbeat() { + var checkLocksKey = 'gform-check-locked-objects-' + objectType; + $( document ).on( 'heartbeat-tick.' + checkLocksKey, function( e, data ) { + var locked = data[checkLocksKey] || {}; + + if ( locked.hasOwnProperty( objectID ) ) { + var lock_data = locked[objectID]; + $('.locked-text').text( lock_data.text ); + if ( lock_data.avatar_src ) { + var avatar = $('').attr( 'src', lock_data.avatar_src.replace(/&/g, '&') ); + $('.locked-avatar').empty().append( avatar ); + } + } else { + $(".locked-info span").empty(); + } + + }).on( 'heartbeat-send.' + checkLocksKey, function( e, data ) { + var check = []; + + check.push( objectID); + + data[checkLocksKey] = check; + }); + + } + +}(window.gflocking = window.gflocking || {}, jQuery)); diff --git a/src/wp-content/plugins/gravityforms/includes/locking/js/locking.js b/src/wp-content/plugins/gravityforms/includes/locking/js/locking.js new file mode 100644 index 0000000..ac1b05d --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/locking/js/locking.js @@ -0,0 +1,188 @@ +(function (gflocking, $) { + + $(document).ready(function () { + gflocking.init(); + }); + + var objectID, objectType, strings, hasLock, lockUI, rejectionCountdown, rejectionRequestTimeout, lockRequestInProgress = false; + + gflocking.init = function () { + hasLock = gflockingVars.hasLock; + objectID = gflockingVars.objectID; + objectType = gflockingVars.objectType; + lockUI = gflockingVars.lockUI; + strings = gflockingVars.strings; + + initHeartbeat(); + + initUI(); + + }; + + function lock_request_timedout() { + $("#gform-lock-request-status").html(strings.noResponse); + $("#gform-lock-request-button").attr("disabled", false).text(strings.requestAgain); + lockRequestInProgress = false + rejectionRequestTimeout = true; + rejectionCountdown = false; + } + + function initUI() { + $("#gform-lock-request-button").click(function () { + var $this = $(this), key; + $this.text("Request sent"); + $this.attr("disabled", true); + $("#gform-lock-request-status").html(""); + rejectionRequestTimeout = false; + lockRequestInProgress = true; + rejectionCountdown = setTimeout(lock_request_timedout, 30000); + $.getJSON(ajaxurl, { action: "gf_lock_request_" + objectType, object_id: objectID }) + .done(function (json) { + $("#gform-lock-request-status").html(json.html); + }) + .fail(function (jqxhr, textStatus, error) { + var err = textStatus + ', ' + error; + $("#gform-lock-request-status").html(strings.requestError + ": " + err); + }); + }); + + $("#gform-reject-lock-request-button").click(function () { + $.getJSON(ajaxurl, { action: "gf_reject_lock_request_" + objectType, object_id: objectID, object_type: objectType }) + .done(function (json) { + $('#gform-lock-dialog').hide(); + }) + .fail(function (jqxhr, textStatus, error) { + var err = textStatus + ', ' + error; + $("#gform-lock-request-status").html(strings.requestError + ": " + err); + $('#gform-lock-dialog').hide(); + }); + }); + + + } + + function initHeartbeat() { + + $("#wpfooter").append(lockUI); + + // todo: refresh nonces + + var refreshLockKey = 'gform-refresh-lock-' + objectType; + + var requestLockKey = 'gform-request-lock-' + objectType; + + $(document).on('heartbeat-send.' + refreshLockKey, function (e, data) { + var send = {}; + + if (!objectID || !$('#gform-lock-dialog').length) + return; + + if (hasLock == 0) + return; + + send['objectID'] = objectID; + + data[refreshLockKey] = send; + }); + + $(document).on('heartbeat-send.' + requestLockKey, function (e, data) { + var send = {}; + + if (!lockRequestInProgress) + return; + + send['objectID'] = objectID; + + data[requestLockKey] = send; + }); + + // update the lock or show the dialog if somebody has taken over editing + + $(document).on('heartbeat-tick.' + refreshLockKey, function (e, data) { + var received, wrap, avatar, details; + + if (data[refreshLockKey]) { + received = data[refreshLockKey]; + + if (received.lock_error || received.lock_request) { + details = received.lock_error ? received.lock_error : received.lock_request; + wrap = $('#gform-lock-dialog'); + if (!wrap.length) + return; + if (!wrap.is(':visible')) { + + if (details.avatar_src) { + avatar = $('').attr('src', details.avatar_src.replace(/&/g, '&')); + wrap.find('div.gform-locked-avatar').empty().append(avatar); + } + + wrap.show().find('.currently-editing').text(details.text); + if (received.lock_request) { + $("#gform-reject-lock-request-button").show(); + } else { + $("#gform-reject-lock-request-button").hide(); + } + wrap.find('.wp-tab-first').focus(); + + } else { + + // dialog is already visible so the context is different + + if (received.lock_error) { + if ($("#gform-reject-lock-request-button").is(":visible")) { + if (received.lock_error.avatar_src) { + avatar = $('').attr('src', received.lock_error.avatar_src.replace(/&/g, '&')); + wrap.find('div.gform-locked-avatar').empty().append(avatar); + } + $("#gform-reject-lock-request-button").hide(); + wrap.show().find('.currently-editing').text(received.lock_error.text); + } + } else if (received.lock_request) { + $("#gform-lock-request-status").html(received.lock_request.text); + } + + } + } + } + }); + + + $(document).on('heartbeat-tick.' + requestLockKey, function (e, data) { + var received, wrap, status; + + if (data[requestLockKey]) { + received = data[requestLockKey]; + + if (received.status) { + status = received.status; + wrap = $('#gform-lock-dialog'); + if (!wrap.length) + return; + + if (status != 'pending') { + clearTimeout(rejectionCountdown); + rejectionCountdown = false; + lockRequestInProgress = false + } + + switch (status) { + case "granted" : + $("#gform-lock-request-status").html(strings.gainedControl); + $("#gform-take-over-button").show(); + $("#gform-lock-request-button").hide(); + hasLock = true; + break; + case "deleted" : + $("#gform-lock-request-button").text(strings.requestAgain).attr("disabled", false); + $("#gform-lock-request-status").html(strings.rejected); + break; + case "pending" : + $("#gform-lock-request-status").html(strings.pending); + } + + } + } + }); + } + +}(window.gflocking = window.gflocking || {}, jQuery)); diff --git a/src/wp-content/plugins/gravityforms/includes/locking/locking.php b/src/wp-content/plugins/gravityforms/includes/locking/locking.php new file mode 100644 index 0000000..9912921 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/locking/locking.php @@ -0,0 +1,157 @@ +get_object_id(); + $edit_url = admin_url(sprintf("admin.php?page=gf_edit_forms&id=%d", $form_id)); + parent::__construct("form", $redirect_url, $edit_url, $capabilities); + } + + public function get_strings() { + $strings = array( + "currently_locked" => __('This form is currently locked. Click on the "Request Control" button to let %s know you\'d like to take over.', "gravityforms"), + "accept" => "Accept", + "currently_editing" => "%s is currently editing this form", + "taken_over" => "%s has taken over and is currently editing this form.", + "lock_requested" => __("%s has requested permission to take over control of this form.", "gravityforms") + ); + + return array_merge(parent::get_strings(), $strings); + } + + protected function is_edit_page() { + return $this->is_page("form_editor"); + } + + protected function is_list_page() { + return $this->is_page("form_list"); + } + + protected function get_object_id() { + return rgget("id"); + } + +} + +new GFFormLocking(); + + +class GFEntryLocking extends GFLocking { + public function __construct() { + $capabilities = array("gravityforms_edit_entries"); + $redirect_url = admin_url("admin.php?page=gf_entries"); + $entry_id = $this->get_object_id(); + $form_id = rgget("id"); + $edit_url = admin_url(sprintf("admin.php?page=gf_entries&view=entry&id=%d&lid=%d", $form_id, $entry_id)); + parent::__construct("entry", $redirect_url, $edit_url, $capabilities); + } + + public function get_strings() { + $strings = array( + "currently_locked" => __('This entry is currently locked. Click on the "Request Control" button to let %s know you\'d like to take over.', "gravityforms"), + "currently_editing" => "%s is currently editing this entry", + "taken_over" => "%s has taken over and is currently editing this entry.", + "lock_requested" => __("%s has requested permission to take over control of this entry.", "gravityforms") + ); + + return array_merge(parent::get_strings(), $strings); + } + + protected function is_edit_page() { + return $this->is_page("entry_detail_edit"); + } + + protected function is_list_page() { + return $this->is_page("entry_list"); + } + + protected function is_view_page() { + return $this->is_page("entry_detail"); + } + + protected function get_object_id() { + return rgget("lid"); + } + +} + +new GFEntryLocking(); + +class GFFormSettingsLocking extends GFLocking { + public function __construct() { + $capabilities = array("gravityforms_edit_forms"); + $redirect_url = admin_url("admin.php?page=gf_edit_forms"); + $form_id = rgget("id"); + $subview = rgget("subview"); + if(empty($subview)) + $subview = "settings"; + $edit_url = admin_url(sprintf("admin.php?page=gf_edit_forms&view=settings&subview=%s&id=%d", esc_html($subview), $form_id)); + parent::__construct("form_settings", $redirect_url, $edit_url, $capabilities); + } + + public function get_strings() { + $strings = array( + "currently_locked" => __('These form settings are currently locked. Click on the "Request Control" button to let %s know you\'d like to take over.', "gravityforms"), + "currently_editing" => "%s is currently editing these settings", + "taken_over" => "%s has taken over and is currently editing these settings.", + "lock_requested" => __("%s has requested permission to take over control of these settings.", "gravityforms") + ); + + return array_merge(parent::get_strings(), $strings); + } + + protected function is_edit_page() { + $is_edit_page = rgget('page') == 'gf_edit_forms' && rgget('view') == 'settings'; + return $is_edit_page ; + } + + protected function get_object_id() { + $subview = rgget("subview"); + if(empty($subview)) + $subview = "settings"; + + $form_id = rgget("id"); + return $subview . "-" . $form_id; + } + +} + +new GFFormSettingsLocking(); + +class GFPluginSettingsLocking extends GFLocking { + public function __construct() { + $capabilities = array("gravityforms_edit_settings"); + $redirect_url = admin_url("admin.php?page=gf_edit_forms"); + $edit_url = admin_url("admin.php?page=gf_settings"); + parent::__construct("plugin_settings", $redirect_url, $edit_url, $capabilities); + } + + public function get_strings() { + $strings = array( + "currently_locked" => __('These settings are currently locked. Click on the "Request Control" button to let %s know you\'d like to take over.', "gravityforms"), + "currently_editing" => "%s is currently editing these settings", + "taken_over" => "%s has taken over and is currently editing these settings.", + "lock_requested" => __("%s has requested permission to take over control of these settings.", "gravityforms") + ); + + return array_merge(parent::get_strings(), $strings); + } + + protected function is_edit_page() { + return $this->is_page("settings"); + } + + protected function get_object_id() { + $view = rgget("subview"); + if(empty($view)) + $view = "settings"; + return $view; + } + +} + +new GFPluginSettingsLocking(); \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/includes/phpqrcode/LICENSE b/src/wp-content/plugins/gravityforms/includes/phpqrcode/LICENSE new file mode 100644 index 0000000..1883303 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/phpqrcode/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/src/wp-content/plugins/gravityforms/includes/phpqrcode/phpqrcode.php b/src/wp-content/plugins/gravityforms/includes/phpqrcode/phpqrcode.php new file mode 100644 index 0000000..80adb9d --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/phpqrcode/phpqrcode.php @@ -0,0 +1,3312 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/* + * Version: 1.1.4 + * Build: 2010100721 + */ + + + +//---- qrconst.php ----------------------------- + + + + + +/* + * PHP QR Code encoder + * + * Common constants + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + // Encoding modes + + define('QR_MODE_NUL', -1); + define('QR_MODE_NUM', 0); + define('QR_MODE_AN', 1); + define('QR_MODE_8', 2); + define('QR_MODE_KANJI', 3); + define('QR_MODE_STRUCTURE', 4); + + // Levels of error correction. + + define('QR_ECLEVEL_L', 0); + define('QR_ECLEVEL_M', 1); + define('QR_ECLEVEL_Q', 2); + define('QR_ECLEVEL_H', 3); + + // Supported output formats + + define('QR_FORMAT_TEXT', 0); + define('QR_FORMAT_PNG', 1); + + class qrstr { + public static function set(&$srctab, $x, $y, $repl, $replLen = false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + } + } + + + +//---- merged_config.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Config file, tuned-up for merged verion + */ + + define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there + define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true + define('QR_LOG_DIR', false); // default error logs dir + + define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false + + define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images + + + + +//---- qrtools.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Toolset, handy and debug utilites. + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRtools { + + //---------------------------------------------------------------------- + public static function binarize($frame) + { + $len = count($frame); + foreach ($frame as &$frameLine) { + + for($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + + return $frame; + } + + //---------------------------------------------------------------------- + public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') + { + $barcode_array = array(); + + if (!is_array($mode)) + $mode = explode(',', $mode); + + $eccLevel = 'L'; + + if (count($mode) > 1) { + $eccLevel = $mode[1]; + } + + $qrTab = QRcode::text($code, false, $eccLevel); + $size = count($qrTab); + + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach(str_split($line) as $char) + $arrAdd[] = ($char=='1')?1:0; + $barcode_array['bcode'][] = $arrAdd; + } + + return $barcode_array; + } + + //---------------------------------------------------------------------- + public static function clearCache() + { + self::$frames = array(); + } + + //---------------------------------------------------------------------- + public static function buildCache() + { + QRtools::markTime('before_build_cache'); + + $mask = new QRmask(); + for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { + $frame = QRspec::newFrame($a); + if (QR_IMAGE) { + $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; + QRimage::png(self::binarize($frame), $fileName, 1, 0); + } + + $width = count($frame); + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($maskNo=0; $maskNo<8; $maskNo++) + $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); + } + + QRtools::markTime('after_build_cache'); + } + + //---------------------------------------------------------------------- + public static function log($outfile, $err) + { + if (QR_LOG_DIR !== false) { + if ($err != '') { + if ($outfile !== false) { + file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } else { + file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } + } + } + } + + //---------------------------------------------------------------------- + public static function dumpMask($frame) + { + $width = count($frame); + for($y=0;$y<$width;$y++) { + for($x=0;$x<$width;$x++) { + echo ord($frame[$y][$x]).','; + } + } + } + + //---------------------------------------------------------------------- + public static function markTime($markerId) + { + list($usec, $sec) = explode(" ", microtime()); + $time = ((float)$usec + (float)$sec); + + if (!isset($GLOBALS['qr_time_bench'])) + $GLOBALS['qr_time_bench'] = array(); + + $GLOBALS['qr_time_bench'][$markerId] = $time; + } + + //---------------------------------------------------------------------- + public static function timeBenchmark() + { + self::markTime('finish'); + + $lastTime = 0; + $startTime = 0; + $p = 0; + + echo ' + + '; + + foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { + if ($p > 0) { + echo ''; + } else { + $startTime = $thisTime; + } + + $p++; + $lastTime = $thisTime; + } + + echo ' + + +
        BENCHMARK
        till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
        TOTAL: '.number_format($lastTime-$startTime, 6).'s
        '; + } + + } + + //########################################################################## + + QRtools::markTime('start'); + + + + +//---- qrspec.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * QR Code specifications + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QRSPEC_VERSION_MAX', 40); + define('QRSPEC_WIDTH_MAX', 177); + + define('QRCAP_WIDTH', 0); + define('QRCAP_WORDS', 1); + define('QRCAP_REMINDER', 2); + define('QRCAP_EC', 3); + + class QRspec { + + public static $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), + array( 29, 70, 7, array( 15, 26, 36, 44)), + array( 33, 100, 7, array( 20, 36, 52, 64)), + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), + array( 45, 196, 0, array( 40, 72, 108, 130)), + array( 49, 242, 0, array( 48, 88, 132, 156)), + array( 53, 292, 0, array( 60, 110, 160, 192)), + array( 57, 346, 0, array( 72, 130, 192, 224)), //10 + array( 61, 404, 0, array( 80, 150, 224, 264)), + array( 65, 466, 0, array( 96, 176, 260, 308)), + array( 69, 532, 0, array( 104, 198, 288, 352)), + array( 73, 581, 3, array( 120, 216, 320, 384)), + array( 77, 655, 3, array( 132, 240, 360, 432)), //15 + array( 81, 733, 3, array( 144, 280, 408, 480)), + array( 85, 815, 3, array( 168, 308, 448, 532)), + array( 89, 901, 3, array( 180, 338, 504, 588)), + array( 93, 991, 3, array( 196, 364, 546, 650)), + array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 + array(101, 1156, 4, array( 224, 442, 644, 750)), + array(105, 1258, 4, array( 252, 476, 690, 816)), + array(109, 1364, 4, array( 270, 504, 750, 900)), + array(113, 1474, 4, array( 300, 560, 810, 960)), + array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), + array(125, 1828, 4, array( 360, 700, 1020, 1200)), + array(129, 1921, 3, array( 390, 728, 1050, 1260)), + array(133, 2051, 3, array( 420, 784, 1140, 1350)), + array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), + array(145, 2465, 3, array( 510, 924, 1350, 1620)), + array(149, 2611, 3, array( 540, 980, 1440, 1710)), + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 + ); + + //---------------------------------------------------------------------- + public static function getDataLength($version, $level) + { + return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getECCLength($version, $level) + { + return self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getWidth($version) + { + return self::$capacity[$version][QRCAP_WIDTH]; + } + + //---------------------------------------------------------------------- + public static function getRemainder($version) + { + return self::$capacity[$version][QRCAP_REMINDER]; + } + + //---------------------------------------------------------------------- + public static function getMinimumVersion($size, $level) + { + + for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { + $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; + if($words >= $size) + return $i; + } + + return -1; + } + + //###################################################################### + + public static $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + //---------------------------------------------------------------------- + public static function lengthIndicator($mode, $version) + { + if ($mode == QR_MODE_STRUCTURE) + return 0; + + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + return self::$lengthTableBits[$mode][$l]; + } + + //---------------------------------------------------------------------- + public static function maximumWords($mode, $version) + { + if($mode == QR_MODE_STRUCTURE) + return 3; + + if($version <= 9) { + $l = 0; + } else if($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + $bits = self::$lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + + if($mode == QR_MODE_KANJI) { + $words *= 2; // the number of bytes is required + } + + return $words; + } + + // Error correction code ----------------------------------------------- + // Table of the error correction code (Reed-Solomon block) + // See Table 12-16 (pp.30-36), JIS X0510:2004. + + public static $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 + ); + + //---------------------------------------------------------------------- + // CACHEABLE!!! + + public static function getEccSpec($version, $level, array &$spec) + { + if (count($spec) < 5) { + $spec = array(0,0,0,0,0); + } + + $b1 = self::$eccTable[$version][$level][0]; + $b2 = self::$eccTable[$version][$level][1]; + $data = self::getDataLength($version, $level); + $ecc = self::getECCLength($version, $level); + + if($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + } + + // Alignment pattern --------------------------------------------------- + + // Positions of alignment patterns. + // This array includes only the second and the third position of the + // alignment patterns. Rest of them can be calculated from the distance + // between them. + + // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + + public static $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 + ); + + + /** -------------------------------------------------------------------- + * Put an alignment marker. + * @param frame + * @param width + * @param ox,oy center coordinate of the pattern + */ + public static function putAlignmentMarker(array &$frame, $ox, $oy) + { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + + $yStart = $oy-2; + $xStart = $ox-2; + + for($y=0; $y<5; $y++) { + QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function putAlignmentPattern($version, &$frame, $width) + { + if($version < 2) + return; + + $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; + if($d < 0) { + $w = 2; + } else { + $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); + } + + if($w * $w - 3 == 1) { + $x = self::$alignmentPattern[$version][0]; + $y = self::$alignmentPattern[$version][0]; + self::putAlignmentMarker($frame, $x, $y); + return; + } + + $cx = self::$alignmentPattern[$version][0]; + for($x=1; $x<$w - 1; $x++) { + self::putAlignmentMarker($frame, 6, $cx); + self::putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + + $cy = self::$alignmentPattern[$version][0]; + for($y=0; $y<$w-1; $y++) { + $cx = self::$alignmentPattern[$version][0]; + for($x=0; $x<$w-1; $x++) { + self::putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + } + + // Version information pattern ----------------------------------------- + + // Version information pattern (BCH coded). + // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + + // size: [QRSPEC_VERSION_MAX - 6] + + public static $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, + 0x27541, 0x28c69 + ); + + //---------------------------------------------------------------------- + public static function getVersionPattern($version) + { + if($version < 7 || $version > QRSPEC_VERSION_MAX) + return 0; + + return self::$versionPattern[$version -7]; + } + + // Format information -------------------------------------------------- + // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) + + public static $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) + ); + + public static function getFormatInfo($mask, $level) + { + if($mask < 0 || $mask > 7) + return 0; + + if($level < 0 || $level > 3) + return 0; + + return self::$formatInfo[$level][$mask]; + } + + // Frame --------------------------------------------------------------- + // Cache of initial frames. + + public static $frames = array(); + + /** -------------------------------------------------------------------- + * Put a finder pattern. + * @param frame + * @param width + * @param ox,oy upper-left coordinate of the pattern + */ + public static function putFinderPattern(&$frame, $ox, $oy) + { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + + for($y=0; $y<7; $y++) { + QRstr::set($frame, $ox, $oy+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function createFrame($version) + { + $width = self::$capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + + // Finder pattern + self::putFinderPattern($frame, 0, 0); + self::putFinderPattern($frame, $width - 7, 0); + self::putFinderPattern($frame, 0, $width - 7); + + // Separator + $yOffset = $width - 7; + + for($y=0; $y<7; $y++) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + $yOffset++; + } + + $setPattern = str_repeat("\xc0", 8); + + QRstr::set($frame, 0, 7, $setPattern); + QRstr::set($frame, $width-8, 7, $setPattern); + QRstr::set($frame, 0, $width - 8, $setPattern); + + // Format info + $setPattern = str_repeat("\x84", 9); + QRstr::set($frame, 0, 8, $setPattern); + QRstr::set($frame, $width - 8, 8, $setPattern, 8); + + $yOffset = $width - 8; + + for($y=0; $y<8; $y++,$yOffset++) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + + // Timing pattern + + for($i=1; $i<$width-15; $i++) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + + // Alignment pattern + self::putAlignmentPattern($version, $frame, $width); + + // Version information + if($version >= 7) { + $vinf = self::getVersionPattern($version); + + $v = $vinf; + + for($x=0; $x<6; $x++) { + for($y=0; $y<3; $y++) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + + $v = $vinf; + for($y=0; $y<6; $y++) { + for($x=0; $x<3; $x++) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + + // and a little bit... + $frame[$width - 8][8] = "\x81"; + + return $frame; + } + + //---------------------------------------------------------------------- + public static function debug($frame, $binary_mode = false) + { + if ($binary_mode) { + + foreach ($frame as &$frameLine) { + $frameLine = join('  ', explode('0', $frameLine)); + $frameLine = join('██', explode('1', $frameLine)); + } + + ?> + +


                '; + echo join("
                ", $frame); + echo '






        '; + + } else { + + foreach ($frame as &$frameLine) { + $frameLine = join(' ', explode("\xc0", $frameLine)); + $frameLine = join('', explode("\xc1", $frameLine)); + $frameLine = join(' ', explode("\xa0", $frameLine)); + $frameLine = join('', explode("\xa1", $frameLine)); + $frameLine = join('', explode("\x84", $frameLine)); //format 0 + $frameLine = join('', explode("\x85", $frameLine)); //format 1 + $frameLine = join('', explode("\x81", $frameLine)); //special bit + $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 + $frameLine = join('', explode("\x91", $frameLine)); //clock 1 + $frameLine = join(' ', explode("\x88", $frameLine)); //version + $frameLine = join('', explode("\x89", $frameLine)); //version + $frameLine = join('♦', explode("\x01", $frameLine)); + $frameLine = join('⋅', explode("\0", $frameLine)); + } + + ?> + + "; + echo join("
        ", $frame); + echo "
        "; + + } + } + + //---------------------------------------------------------------------- + public static function serial($frame) + { + return gzcompress(join("\n", $frame), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + return explode("\n", gzuncompress($code)); + } + + //---------------------------------------------------------------------- + public static function newFrame($version) + { + if($version < 1 || $version > QRSPEC_VERSION_MAX) + return null; + + if(!isset(self::$frames[$version])) { + + $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + self::$frames[$version] = self::unserial(file_get_contents($fileName)); + } else { + self::$frames[$version] = self::createFrame($version); + file_put_contents($fileName, self::serial(self::$frames[$version])); + } + } else { + self::$frames[$version] = self::createFrame($version); + } + } + + if(is_null(self::$frames[$version])) + return null; + + return self::$frames[$version]; + } + + //---------------------------------------------------------------------- + public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } + public static function rsBlockNum1($spec) { return $spec[0]; } + public static function rsDataCodes1($spec) { return $spec[1]; } + public static function rsEccCodes1($spec) { return $spec[2]; } + public static function rsBlockNum2($spec) { return $spec[3]; } + public static function rsDataCodes2($spec) { return $spec[4]; } + public static function rsEccCodes2($spec) { return $spec[2]; } + public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } + public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } + + } + + + +//---- qrimage.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Image output of code using GD2 + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_IMAGE', true); + + class QRimage { + + //---------------------------------------------------------------------- + public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/png"); + ImagePng($image); + } else { + if($saveandprint===TRUE){ + ImagePng($image, $filename); + header("Content-type: image/png"); + ImagePng($image); + }else{ + ImagePng($image, $filename); + } + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/jpeg"); + ImageJpeg($image, null, $q); + } else { + ImageJpeg($image, $filename, $q); + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + $base_image =ImageCreate($imgW, $imgH); + + $col[0] = ImageColorAllocate($base_image,255,255,255); + $col[1] = ImageColorAllocate($base_image,0,0,0); + + imagefill($base_image, 0, 0, $col[0]); + + for($y=0; $y<$h; $y++) { + for($x=0; $x<$w; $x++) { + if ($frame[$y][$x] == '1') { + ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); + } + } + } + + $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); + ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); + ImageDestroy($base_image); + + return $target_image; + } + } + + + +//---- qrinput.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input encoding class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('STRUCTURE_HEADER_BITS', 20); + define('MAX_STRUCTURED_SYMBOLS', 16); + + class QRinputItem { + + public $mode; + public $size; + public $data; + public $bstream; + + public function __construct($mode, $size, $data, $bstream = null) + { + $setData = array_slice($data, 0, $size); + + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); + } + + if(!QRinput::check($mode, $size, $setData)) { + throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); + return null; + } + + $this->mode = $mode; + $this->size = $size; + $this->data = $setData; + $this->bstream = $bstream; + } + + //---------------------------------------------------------------------- + public function encodeModeNum($version) + { + try { + + $words = (int)($this->size / 3); + $bs = new QRbitstream(); + + $val = 0x1; + $bs->appendNum(4, $val); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; + $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; + $val += (ord($this->data[$i*3+2]) - ord('0')); + $bs->appendNum(10, $val); + } + + if($this->size - $words * 3 == 1) { + $val = ord($this->data[$words*3]) - ord('0'); + $bs->appendNum(4, $val); + } else if($this->size - $words * 3 == 2) { + $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; + $val += (ord($this->data[$words*3+1]) - ord('0')); + $bs->appendNum(7, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeAn($version) + { + try { + $words = (int)($this->size / 2); + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x02); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; + $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); + + $bs->appendNum(11, $val); + } + + if($this->size & 1) { + $val = QRinput::lookAnTable(ord($this->data[$words * 2])); + $bs->appendNum(6, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeMode8($version) + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x4); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); + + for($i=0; $i<$this->size; $i++) { + $bs->appendNum(8, ord($this->data[$i])); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeKanji($version) + { + try { + + $bs = new QRbitrtream(); + + $bs->appendNum(4, 0x8); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); + + for($i=0; $i<$this->size; $i+=2) { + $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); + if($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + + $bs->appendNum(13, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeStructure() + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x03); + $bs->appendNum(4, ord($this->data[1]) - 1); + $bs->appendNum(4, ord($this->data[0]) - 1); + $bs->appendNum(8, ord($this->data[2])); + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function estimateBitStreamSizeOfEntry($version) + { + $bits = 0; + + if($version == 0) + $version = 1; + + switch($this->mode) { + case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; + case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; + case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; + case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; + case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; + default: + return 0; + } + + $l = QRspec::lengthIndicator($this->mode, $version); + $m = 1 << $l; + $num = (int)(($this->size + $m - 1) / $m); + + $bits += $num * (4 + $l); + + return $bits; + } + + //---------------------------------------------------------------------- + public function encodeBitStream($version) + { + try { + + unset($this->bstream); + $words = QRspec::maximumWords($this->mode, $version); + + if($this->size > $words) { + + $st1 = new QRinputItem($this->mode, $words, $this->data); + $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); + + $st1->encodeBitStream($version); + $st2->encodeBitStream($version); + + $this->bstream = new QRbitstream(); + $this->bstream->append($st1->bstream); + $this->bstream->append($st2->bstream); + + unset($st1); + unset($st2); + + } else { + + $ret = 0; + + switch($this->mode) { + case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; + case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; + case QR_MODE_8: $ret = $this->encodeMode8($version); break; + case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; + case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; + + default: + break; + } + + if($ret < 0) + return -1; + } + + return $this->bstream->size(); + + } catch (Exception $e) { + return -1; + } + } + }; + + //########################################################################## + + class QRinput { + + public $items; + + private $version; + private $level; + + //---------------------------------------------------------------------- + public function __construct($version = 0, $level = QR_ECLEVEL_L) + { + if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { + throw new Exception('Invalid version no'); + return NULL; + } + + $this->version = $version; + $this->level = $level; + } + + //---------------------------------------------------------------------- + public function getVersion() + { + return $this->version; + } + + //---------------------------------------------------------------------- + public function setVersion($version) + { + if($version < 0 || $version > QRSPEC_VERSION_MAX) { + throw new Exception('Invalid version no'); + return -1; + } + + $this->version = $version; + + return 0; + } + + //---------------------------------------------------------------------- + public function getErrorCorrectionLevel() + { + return $this->level; + } + + //---------------------------------------------------------------------- + public function setErrorCorrectionLevel($level) + { + if($level > QR_ECLEVEL_H) { + throw new Exception('Invalid ECLEVEL'); + return -1; + } + + $this->level = $level; + + return 0; + } + + //---------------------------------------------------------------------- + public function appendEntry(QRinputItem $entry) + { + $this->items[] = $entry; + } + + //---------------------------------------------------------------------- + public function append($mode, $size, $data) + { + try { + $entry = new QRinputItem($mode, $size, $data); + $this->items[] = $entry; + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + + public function insertStructuredAppendHeader($size, $index, $parity) + { + if( $size > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong size'); + } + + if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong index'); + } + + $buf = array($size, $index, $parity); + + try { + $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); + array_unshift($this->items, $entry); + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function calcParity() + { + $parity = 0; + + foreach($this->items as $item) { + if($item->mode != QR_MODE_STRUCTURE) { + for($i=$item->size-1; $i>=0; $i--) { + $parity ^= $item->data[$i]; + } + } + } + + return $parity; + } + + //---------------------------------------------------------------------- + public static function checkModeNum($size, $data) + { + for($i=0; $i<$size; $i++) { + if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeNum($size) + { + $w = (int)$size / 3; + $bits = $w * 10; + + switch($size - $w * 3) { + case 1: + $bits += 4; + break; + case 2: + $bits += 7; + break; + default: + break; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + ); + + //---------------------------------------------------------------------- + public static function lookAnTable($c) + { + return (($c > 127)?-1:self::$anTable[$c]); + } + + //---------------------------------------------------------------------- + public static function checkModeAn($size, $data) + { + for($i=0; $i<$size; $i++) { + if (self::lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeAn($size) + { + $w = (int)($size / 2); + $bits = $w * 11; + + if($size & 1) { + $bits += 6; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static function estimateBitsMode8($size) + { + return $size * 8; + } + + //---------------------------------------------------------------------- + public function estimateBitsModeKanji($size) + { + return (int)(($size / 2) * 13); + } + + //---------------------------------------------------------------------- + public static function checkModeKanji($size, $data) + { + if($size & 1) + return false; + + for($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if( $val < 0x8140 + || ($val > 0x9ffc && $val < 0xe040) + || $val > 0xebbf) { + return false; + } + } + + return true; + } + + /*********************************************************************** + * Validation + **********************************************************************/ + + public static function check($mode, $size, $data) + { + if($size <= 0) + return false; + + switch($mode) { + case QR_MODE_NUM: return self::checkModeNum($size, $data); break; + case QR_MODE_AN: return self::checkModeAn($size, $data); break; + case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; + case QR_MODE_8: return true; break; + case QR_MODE_STRUCTURE: return true; break; + + default: + break; + } + + return false; + } + + + //---------------------------------------------------------------------- + public function estimateBitStreamSize($version) + { + $bits = 0; + + foreach($this->items as $item) { + $bits += $item->estimateBitStreamSizeOfEntry($version); + } + + return $bits; + } + + //---------------------------------------------------------------------- + public function estimateVersion() + { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($prev); + $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + + return $version; + } + + //---------------------------------------------------------------------- + public static function lengthOfCode($mode, $version, $bits) + { + $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NUM: + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if($remain >= 7) { + $size += 2; + } else if($remain >= 4) { + $size += 1; + } + break; + case QR_MODE_AN: + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if($remain >= 6) + $size++; + break; + case QR_MODE_8: + $size = (int)($payload / 8); + break; + case QR_MODE_KANJI: + $size = (int)(($payload / 13) * 2); + break; + case QR_MODE_STRUCTURE: + $size = (int)($payload / 8); + break; + default: + $size = 0; + break; + } + + $maxsize = QRspec::maximumWords($mode, $version); + if($size < 0) $size = 0; + if($size > $maxsize) $size = $maxsize; + + return $size; + } + + //---------------------------------------------------------------------- + public function createBitStream() + { + $total = 0; + + foreach($this->items as $item) { + $bits = $item->encodeBitStream($this->version); + + if($bits < 0) + return -1; + + $total += $bits; + } + + return $total; + } + + //---------------------------------------------------------------------- + public function convertData() + { + $ver = $this->estimateVersion(); + if($ver > $this->getVersion()) { + $this->setVersion($ver); + } + + for(;;) { + $bits = $this->createBitStream(); + + if($bits < 0) + return -1; + + $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if($ver < 0) { + throw new Exception('WRONG VERSION'); + return -1; + } else if($ver > $this->getVersion()) { + $this->setVersion($ver); + } else { + break; + } + } + + return 0; + } + + //---------------------------------------------------------------------- + public function appendPaddingBit(&$bstream) + { + $bits = $bstream->size(); + $maxwords = QRspec::getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + + if ($maxbits == $bits) { + return 0; + } + + if ($maxbits - $bits < 5) { + return $bstream->appendNum($maxbits - $bits, 0); + } + + $bits += 4; + $words = (int)(($bits + 7) / 8); + + $padding = new QRbitstream(); + $ret = $padding->appendNum($words * 8 - $bits + 4, 0); + + if($ret < 0) + return $ret; + + $padlen = $maxwords - $words; + + if($padlen > 0) { + + $padbuf = array(); + for($i=0; $i<$padlen; $i++) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + + $ret = $padding->appendBytes($padlen, $padbuf); + + if($ret < 0) + return $ret; + + } + + $ret = $bstream->append($padding); + + return $ret; + } + + //---------------------------------------------------------------------- + public function mergeBitStream() + { + if($this->convertData() < 0) { + return null; + } + + $bstream = new QRbitstream(); + + foreach($this->items as $item) { + $ret = $bstream->append($item->bstream); + if($ret < 0) { + return null; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getBitStream() + { + + $bstream = $this->mergeBitStream(); + + if($bstream == null) { + return null; + } + + $ret = $this->appendPaddingBit($bstream); + if($ret < 0) { + return null; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getByteStream() + { + $bstream = $this->getBitStream(); + if($bstream == null) { + return null; + } + + return $bstream->toByte(); + } + } + + + + + + +//---- qrbitstream.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Bitstream class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRbitstream { + + public $data = array(); + + //---------------------------------------------------------------------- + public function size() + { + return count($this->data); + } + + //---------------------------------------------------------------------- + public function allocate($setLength) + { + $this->data = array_fill(0, $setLength, 0); + return 0; + } + + //---------------------------------------------------------------------- + public static function newFromNum($bits, $num) + { + $bstream = new QRbitstream(); + $bstream->allocate($bits); + + $mask = 1 << ($bits - 1); + for($i=0; $i<$bits; $i++) { + if($num & $mask) { + $bstream->data[$i] = 1; + } else { + $bstream->data[$i] = 0; + } + $mask = $mask >> 1; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public static function newFromBytes($size, $data) + { + $bstream = new QRbitstream(); + $bstream->allocate($size * 8); + $p=0; + + for($i=0; $i<$size; $i++) { + $mask = 0x80; + for($j=0; $j<8; $j++) { + if($data[$i] & $mask) { + $bstream->data[$p] = 1; + } else { + $bstream->data[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function append(QRbitstream $arg) + { + if (is_null($arg)) { + return -1; + } + + if($arg->size() == 0) { + return 0; + } + + if($this->size() == 0) { + $this->data = $arg->data; + return 0; + } + + $this->data = array_values(array_merge($this->data, $arg->data)); + + return 0; + } + + //---------------------------------------------------------------------- + public function appendNum($bits, $num) + { + if ($bits == 0) + return 0; + + $b = QRbitstream::newFromNum($bits, $num); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function appendBytes($size, $data) + { + if ($size == 0) + return 0; + + $b = QRbitstream::newFromBytes($size, $data); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function toByte() + { + + $size = $this->size(); + + if($size == 0) { + return array(); + } + + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + + $p = 0; + + for($i=0; $i<$bytes; $i++) { + $v = 0; + for($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$i] = $v; + } + + if($size & 7) { + $v = 0; + for($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$bytes] = $v; + } + + return $data; + } + + } + + + + +//---- qrsplit.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input splitting classes + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + class QRsplit { + + public $dataStr = ''; + public $input; + public $modeHint; + + //---------------------------------------------------------------------- + public function __construct($dataStr, $input, $modeHint) + { + $this->dataStr = $dataStr; + $this->input = $input; + $this->modeHint = $modeHint; + } + + //---------------------------------------------------------------------- + public static function isdigitat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + //---------------------------------------------------------------------- + public static function isalnumat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return (QRinput::lookAnTable(ord($str[$pos])) >= 0); + } + + //---------------------------------------------------------------------- + public function identifyMode($pos) + { + if ($pos >= strlen($this->dataStr)) + return QR_MODE_NUL; + + $c = $this->dataStr[$pos]; + + if(self::isdigitat($this->dataStr, $pos)) { + return QR_MODE_NUM; + } else if(self::isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } else if($this->modeHint == QR_MODE_KANJI) { + + if ($pos+1 < strlen($this->dataStr)) + { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KANJI; + } + } + } + + return QR_MODE_8; + } + + //---------------------------------------------------------------------- + public function eatNum() + { + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + while(self::isdigitat($this->dataStr, $p)) { + $p++; + } + + $run = $p; + $mode = $this->identifyMode($p); + + if($mode == QR_MODE_8) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + if($mode == QR_MODE_AN) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsModeAn(1) // + 4 + la + - QRinput::estimateBitsModeAn($run + 1);// - 4 - la + if($dif > 0) { + return $this->eatAn(); + } + } + + $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatAn() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + + while(self::isalnumat($this->dataStr, $p)) { + if(self::isdigitat($this->dataStr, $p)) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + + $dif = QRinput::estimateBitsModeAn($p) // + 4 + la + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsModeAn($q); // - 4 - la + + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + + if(!self::isalnumat($this->dataStr, $p)) { + $dif = QRinput::estimateBitsModeAn($run) + 4 + $la + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + + $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatKanji() + { + $p = 0; + + while($this->identifyMode($p) == QR_MODE_KANJI) { + $p += 2; + } + + $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eat8() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 1; + $dataStrLen = strlen($this->dataStr); + + while($p < $dataStrLen) { + + $mode = $this->identifyMode($p); + if($mode == QR_MODE_KANJI) { + break; + } + if($mode == QR_MODE_NUM) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else if($mode == QR_MODE_AN) { + $q = $p; + while(self::isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeAn($q - $p) + 4 + $la + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); + + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function splitString() + { + while (strlen($this->dataStr) > 0) + { + if($this->dataStr == '') + return 0; + + $mode = $this->identifyMode(0); + + switch ($mode) { + case QR_MODE_NUM: $length = $this->eatNum(); break; + case QR_MODE_AN: $length = $this->eatAn(); break; + case QR_MODE_KANJI: + if ($hint == QR_MODE_KANJI) + $length = $this->eatKanji(); + else $length = $this->eat8(); + break; + default: $length = $this->eat8(); break; + + } + + if($length == 0) return 0; + if($length < 0) return -1; + + $this->dataStr = substr($this->dataStr, $length); + } + } + + //---------------------------------------------------------------------- + public function toUpper() + { + $stringLen = strlen($this->dataStr); + $p = 0; + + while ($p<$stringLen) { + $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); + if($mode == QR_MODE_KANJI) { + $p += 2; + } else { + if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + + return $this->dataStr; + } + + //---------------------------------------------------------------------- + public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) + { + if(is_null($string) || $string == '\0' || $string == '') { + throw new Exception('empty string!!!'); + } + + $split = new QRsplit($string, $input, $modeHint); + + if(!$casesensitive) + $split->toUpper(); + + return $split->splitString(); + } + } + + + +//---- qrrscode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Reed-Solomon error correction support + * + * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q + * (libfec is released under the GNU Lesser General Public License.) + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsItem { + + public $mm; // Bits per symbol + public $nn; // Symbols per block (= (1<= $this->nn) { + $x -= $this->nn; + $x = ($x >> $this->mm) + ($x & $this->nn); + } + + return $x; + } + + //---------------------------------------------------------------------- + public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + // Common code for intializing a Reed-Solomon control block (char or int symbols) + // Copyright 2004 Phil Karn, KA9Q + // May be used under the terms of the GNU Lesser General Public License (LGPL) + + $rs = null; + + // Check parameter ranges + if($symsize < 0 || $symsize > 8) return $rs; + if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; + if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; + if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! + if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding + + $rs = new QRrsItem(); + $rs->mm = $symsize; + $rs->nn = (1<<$symsize)-1; + $rs->pad = $pad; + + $rs->alpha_to = array_fill(0, $rs->nn+1, 0); + $rs->index_of = array_fill(0, $rs->nn+1, 0); + + // PHP style macro replacement ;) + $NN =& $rs->nn; + $A0 =& $NN; + + // Generate Galois field lookup tables + $rs->index_of[0] = $A0; // log(zero) = -inf + $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 + $sr = 1; + + for($i=0; $i<$rs->nn; $i++) { + $rs->index_of[$sr] = $i; + $rs->alpha_to[$i] = $sr; + $sr <<= 1; + if($sr & (1<<$symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs->nn; + } + + if($sr != 1){ + // field generator polynomial is not primitive! + $rs = NULL; + return $rs; + } + + /* Form RS code generator polynomial from its roots */ + $rs->genpoly = array_fill(0, $nroots+1, 0); + + $rs->fcr = $fcr; + $rs->prim = $prim; + $rs->nroots = $nroots; + $rs->gfpoly = $gfpoly; + + /* Find prim-th root of 1, used in decoding */ + for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) + ; // intentional empty-body loop! + + $rs->iprim = (int)($iprim / $prim); + $rs->genpoly[0] = 1; + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs->genpoly[$i+1] = 1; + + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; $j--) { + if ($rs->genpoly[$j] != 0) { + $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; + } else { + $rs->genpoly[$j] = $rs->genpoly[$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; + } + + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; $i++) + $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; + + return $rs; + } + + //---------------------------------------------------------------------- + public function encode_rs_char($data, &$parity) + { + $MM =& $this->mm; + $NN =& $this->nn; + $ALPHA_TO =& $this->alpha_to; + $INDEX_OF =& $this->index_of; + $GENPOLY =& $this->genpoly; + $NROOTS =& $this->nroots; + $FCR =& $this->fcr; + $PRIM =& $this->prim; + $IPRIM =& $this->iprim; + $PAD =& $this->pad; + $A0 =& $NN; + + $parity = array_fill(0, $NROOTS, 0); + + for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { + + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if($feedback != $A0) { + // feedback term is non-zero + + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); + + for($j=1;$j<$NROOTS;$j++) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; + } + } + + // Shift + array_shift($parity); + if($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + } + } + + //########################################################################## + + class QRrs { + + public static $items = array(); + + //---------------------------------------------------------------------- + public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + foreach(self::$items as $rs) { + if($rs->pad != $pad) continue; + if($rs->nroots != $nroots) continue; + if($rs->mm != $symsize) continue; + if($rs->gfpoly != $gfpoly) continue; + if($rs->fcr != $fcr) continue; + if($rs->prim != $prim) continue; + + return $rs; + } + + $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift(self::$items, $rs); + + return $rs; + } + } + + + +//---- qrmask.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Masking + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('N1', 3); + define('N2', 3); + define('N3', 40); + define('N4', 10); + + class QRmask { + + public $runLength = array(); + + //---------------------------------------------------------------------- + public function __construct() + { + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + } + + //---------------------------------------------------------------------- + public function writeFormatInformation($width, &$frame, $mask, $level) + { + $blacks = 0; + $format = QRspec::getFormatInfo($mask, $level); + + for($i=0; $i<8; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[8][$width - 1 - $i] = chr($v); + if($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + + for($i=0; $i<7; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[$width - 7 + $i][8] = chr($v); + if($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + + $format = $format >> 1; + } + + return $blacks; + } + + //---------------------------------------------------------------------- + public function mask0($x, $y) { return ($x+$y)&1; } + public function mask1($x, $y) { return ($y&1); } + public function mask2($x, $y) { return ($x%3); } + public function mask3($x, $y) { return ($x+$y)%3; } + public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } + public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } + public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } + public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } + + //---------------------------------------------------------------------- + private function generateMaskNo($maskNo, $width, $frame) + { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if(ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + + } + } + + return $bitMask; + } + + //---------------------------------------------------------------------- + public static function serial($bitFrame) + { + $codeArr = array(); + + foreach ($bitFrame as $line) + $codeArr[] = join('', $line); + + return gzcompress(join("\n", $codeArr), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + $codeArr = array(); + + $codeLines = explode("\n", gzuncompress($code)); + foreach ($codeLines as $line) + $codeArr[] = str_split($line); + + return $codeArr; + } + + //---------------------------------------------------------------------- + public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) + { + $b = 0; + $bitMask = array(); + + $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + $bitMask = self::unserial(file_get_contents($fileName)); + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) + mkdir(QR_CACHE_DIR.'mask_'.$maskNo); + file_put_contents($fileName, self::serial($bitMask)); + } + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + } + + if ($maskGenOnly) + return; + + $d = $s; + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + + return $b; + } + + //---------------------------------------------------------------------- + public function makeMask($width, $frame, $maskNo, $level) + { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + + return $masked; + } + + //---------------------------------------------------------------------- + public function calcN1N3($length) + { + $demerit = 0; + + for($i=0; $i<$length; $i++) { + + if($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if($i & 1) { + if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if(($this->runLength[$i-2] == $fact) && + ($this->runLength[$i-1] == $fact) && + ($this->runLength[$i+1] == $fact) && + ($this->runLength[$i+2] == $fact)) { + if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + //---------------------------------------------------------------------- + public function evaluateSymbol($width, $frame) + { + $head = 0; + $demerit = 0; + + for($y=0; $y<$width; $y++) { + $head = 0; + $this->runLength[0] = 1; + + $frameY = $frame[$y]; + + if ($y>0) + $frameYM = $frame[$y-1]; + + for($x=0; $x<$width; $x++) { + if(($x > 0) && ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + + if(($b22 | ($w22 ^ 1))&1) { + $demerit += N2; + } + } + if(($x == 0) && (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($x > 0) { + if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + for($x=0; $x<$width; $x++) { + $head = 0; + $this->runLength[0] = 1; + + for($y=0; $y<$width; $y++) { + if($y == 0 && (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($y > 0) { + if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + return $demerit; + } + + + //---------------------------------------------------------------------- + public function mask($width, $frame, $level) + { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + + $checked_masks = array(0,1,2,3,4,5,6,7); + + if (QR_FIND_FROM_RANDOM !== false) { + + $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; $i++) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + + } + + $bestMask = $frame; + + foreach($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + + if($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + + return $bestMask; + } + + //---------------------------------------------------------------------- + } + + + + +//---- qrencode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Main encoder classes. + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsblock { + public $dataLength; + public $data = array(); + public $eccLength; + public $ecc = array(); + + public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) + { + $rs->encode_rs_char($data, $ecc); + + $this->dataLength = $dl; + $this->data = $data; + $this->eccLength = $el; + $this->ecc = $ecc; + } + }; + + //########################################################################## + + class QRrawcode { + public $version; + public $datacode = array(); + public $ecccode = array(); + public $blocks; + public $rsblocks = array(); //of RSblock + public $count; + public $dataLength; + public $eccLength; + public $b1; + + //---------------------------------------------------------------------- + public function __construct(QRinput $input) + { + $spec = array(0,0,0,0,0); + + $this->datacode = $input->getByteStream(); + if(is_null($this->datacode)) { + throw new Exception('null imput string'); + } + + QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); + + $this->version = $input->getVersion(); + $this->b1 = QRspec::rsBlockNum1($spec); + $this->dataLength = QRspec::rsDataLength($spec); + $this->eccLength = QRspec::rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = QRspec::rsBlockNum($spec); + + $ret = $this->init($spec); + if($ret < 0) { + throw new Exception('block alloc error'); + return null; + } + + $this->count = 0; + } + + //---------------------------------------------------------------------- + public function init(array $spec) + { + $dl = QRspec::rsDataCodes1($spec); + $el = QRspec::rsEccCodes1($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + if(QRspec::rsBlockNum2($spec) == 0) + return 0; + + $dl = QRspec::rsDataCodes2($spec); + $el = QRspec::rsEccCodes2($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + if($rs == NULL) return -1; + + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + return 0; + } + + //---------------------------------------------------------------------- + public function getCode() + { + $ret; + + if($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if($col >= $this->rsblocks[0]->dataLength) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]->data[$col]; + } else if($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]->ecc[$col]; + } else { + return 0; + } + $this->count++; + + return $ret; + } + } + + //########################################################################## + + class QRcode { + + public $version; + public $width; + public $data; + + //---------------------------------------------------------------------- + public function encodeMask(QRinput $input, $mask) + { + if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { + throw new Exception('wrong version'); + } + if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { + throw new Exception('wrong level'); + } + + $raw = new QRrawcode($input); + + QRtools::markTime('after_raw'); + + $version = $raw->version; + $width = QRspec::getWidth($version); + $frame = QRspec::newFrame($version); + + $filler = new FrameFiller($width, $frame); + if(is_null($filler)) { + return NULL; + } + + // inteleaved data and ecc codes + for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { + $code = $raw->getCode(); + $bit = 0x80; + for($j=0; $j<8; $j++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + + QRtools::markTime('after_filler'); + + unset($raw); + + // remainder bits + $j = QRspec::getRemainder($version); + for($i=0; $i<$j; $i++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02); + } + + $frame = $filler->frame; + unset($filler); + + + // masking + $maskObj = new QRmask(); + if($mask < 0) { + + if (QR_FIND_BEST_MASK) { + $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); + } else { + $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); + } + } else { + $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); + } + + if($masked == NULL) { + return NULL; + } + + QRtools::markTime('after_mask'); + + $this->version = $version; + $this->width = $width; + $this->data = $masked; + + return $this; + } + + //---------------------------------------------------------------------- + public function encodeInput(QRinput $input) + { + return $this->encodeMask($input, -1); + } + + //---------------------------------------------------------------------- + public function encodeString8bit($string, $version, $level) + { + if(string == NULL) { + throw new Exception('empty string!'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); + if($ret < 0) { + unset($input); + return NULL; + } + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public function encodeString($string, $version, $level, $hint, $casesensitive) + { + + if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { + throw new Exception('bad hint'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); + if($ret < 0) { + return NULL; + } + + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodePNG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encode($text, $outfile); + } + + //---------------------------------------------------------------------- + public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodeRAW($text, $outfile); + } + } + + //########################################################################## + + class FrameFiller { + + public $width; + public $frame; + public $x; + public $y; + public $dir; + public $bit; + + //---------------------------------------------------------------------- + public function __construct($width, &$frame) + { + $this->width = $width; + $this->frame = $frame; + $this->x = $width - 1; + $this->y = $width - 1; + $this->dir = -1; + $this->bit = -1; + } + + //---------------------------------------------------------------------- + public function setFrameAt($at, $val) + { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + //---------------------------------------------------------------------- + public function getFrameAt($at) + { + return ord($this->frame[$at['y']][$at['x']]); + } + + //---------------------------------------------------------------------- + public function next() + { + do { + + if($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + + $x = $this->x; + $y = $this->y; + $w = $this->width; + + if($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + + if($this->dir < 0) { + if($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if($x == 6) { + $x--; + $y = 9; + } + } + } else { + if($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if($x == 6) { + $x--; + $y -= 8; + } + } + } + if($x < 0 || $y < 0) return null; + + $this->x = $x; + $this->y = $y; + + } while(ord($this->frame[$y][$x]) & 0x80); + + return array('x'=>$x, 'y'=>$y); + } + + } ; + + //########################################################################## + + class QRencode { + + public $casesensitive = true; + public $eightbit = false; + + public $version = 0; + public $size = 3; + public $margin = 4; + + public $structured = 0; // not supported yet + + public $level = QR_ECLEVEL_L; + public $hint = QR_MODE_8; + + //---------------------------------------------------------------------- + public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = new QRencode(); + $enc->size = $size; + $enc->margin = $margin; + + switch ($level.'') { + case '0': + case '1': + case '2': + case '3': + $enc->level = $level; + break; + case 'l': + case 'L': + $enc->level = QR_ECLEVEL_L; + break; + case 'm': + case 'M': + $enc->level = QR_ECLEVEL_M; + break; + case 'q': + case 'Q': + $enc->level = QR_ECLEVEL_Q; + break; + case 'h': + case 'H': + $enc->level = QR_ECLEVEL_H; + break; + } + + return $enc; + } + + //---------------------------------------------------------------------- + public function encodeRAW($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + return $code->data; + } + + //---------------------------------------------------------------------- + public function encode($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + QRtools::markTime('after_encode'); + + if ($outfile!== false) { + file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); + } else { + return QRtools::binarize($code->data); + } + } + + //---------------------------------------------------------------------- + public function encodePNG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + } + + diff --git a/src/wp-content/plugins/gravityforms/includes/upload.php b/src/wp-content/plugins/gravityforms/includes/upload.php new file mode 100644 index 0000000..5c4f36e --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/upload.php @@ -0,0 +1,162 @@ + 0) + $img.attr('src', ajaxurl + '?action=gfwebapi_qrcode&rnd=' + Date.now()); + + return false; + }); + + jQuery("#public_key, #private_key").on("keyup", function () { + jQuery("#gfwebapi-qrcode-container").html("The keys have changes. Please save the changes and try again.") + }) + + jQuery("#gfapi-url-builder-button").click(function (e) { + e.preventDefault(); + var publicKey, privateKey, expiration, method, route, stringToSign, url, sig; + publicKey = jQuery("#public_key").val(); + privateKey = jQuery("#private_key").val(); + expiration = parseInt(jQuery("#gfapi-url-builder-expiration").val()); + method = jQuery("#gfapi-url-builder-method").val(); + route = jQuery("#gfapi-url-builder-route").val(); + route = route.replace(/\/$/, ""); // remove trailing slash + var d = new Date; + var unixtime = parseInt(d.getTime() / 1000); + var future_unixtime = unixtime + expiration; + + stringToSign = publicKey + ":" + method + ":" + route + ":" + future_unixtime; + sig = gfapiCalculateSig(stringToSign, privateKey); + url = gfapiBaseUrl + "/" + route + "/?api_key=" + publicKey + "&signature=" + sig + "&expires=" + future_unixtime; + jQuery('#gfapi-url-builder-generated-url').val(url); + return false; + }); + var gfapiTesterAjaxRequest; + jQuery("#gfapi-url-tester-button").click(function (e) { + var $button = jQuery(this); + var $loading = jQuery("#gfapi-url-tester-loading"); + var $results = jQuery("#gfapi-url-tester-results"); + var url = jQuery('#gfapi-url-tester-url').val(); + var method = jQuery('#gfapi-url-tester-method').val(); + gfapiTesterAjaxRequest = jQuery.ajax({ + url : url + "&test=1", + type : method, + dataType : 'json', + data : {}, + beforeSend: function (xhr, opts) { + $button.attr('disabled', 'disabled'); + $loading.show(); + } + }) + .done(function (data, textStatus, xhr) { + $button.removeAttr('disabled'); + $loading.hide(); + $results.html(xhr.status); + $results.fadeTo("fast", 1); + }) + .fail(function (jqXHR) { + + $button.removeAttr('disabled'); + $loading.hide(); + $results.fadeTo("fast", 1); + var msg; + $loading.hide(); + if (msg == "abort") { + msg = "Request cancelled"; + } else { + msg = jqXHR.status + ": " + jqXHR.statusText; + } + $results.html(msg); + }); + return false; + }); + +}) diff --git a/src/wp-content/plugins/gravityforms/includes/webapi/lib/phpqrcode/LICENSE b/src/wp-content/plugins/gravityforms/includes/webapi/lib/phpqrcode/LICENSE new file mode 100644 index 0000000..1883303 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/webapi/lib/phpqrcode/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/src/wp-content/plugins/gravityforms/includes/webapi/lib/phpqrcode/phpqrcode.php b/src/wp-content/plugins/gravityforms/includes/webapi/lib/phpqrcode/phpqrcode.php new file mode 100644 index 0000000..80adb9d --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/webapi/lib/phpqrcode/phpqrcode.php @@ -0,0 +1,3312 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/* + * Version: 1.1.4 + * Build: 2010100721 + */ + + + +//---- qrconst.php ----------------------------- + + + + + +/* + * PHP QR Code encoder + * + * Common constants + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + // Encoding modes + + define('QR_MODE_NUL', -1); + define('QR_MODE_NUM', 0); + define('QR_MODE_AN', 1); + define('QR_MODE_8', 2); + define('QR_MODE_KANJI', 3); + define('QR_MODE_STRUCTURE', 4); + + // Levels of error correction. + + define('QR_ECLEVEL_L', 0); + define('QR_ECLEVEL_M', 1); + define('QR_ECLEVEL_Q', 2); + define('QR_ECLEVEL_H', 3); + + // Supported output formats + + define('QR_FORMAT_TEXT', 0); + define('QR_FORMAT_PNG', 1); + + class qrstr { + public static function set(&$srctab, $x, $y, $repl, $replLen = false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + } + } + + + +//---- merged_config.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Config file, tuned-up for merged verion + */ + + define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there + define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true + define('QR_LOG_DIR', false); // default error logs dir + + define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false + + define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images + + + + +//---- qrtools.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Toolset, handy and debug utilites. + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRtools { + + //---------------------------------------------------------------------- + public static function binarize($frame) + { + $len = count($frame); + foreach ($frame as &$frameLine) { + + for($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + + return $frame; + } + + //---------------------------------------------------------------------- + public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') + { + $barcode_array = array(); + + if (!is_array($mode)) + $mode = explode(',', $mode); + + $eccLevel = 'L'; + + if (count($mode) > 1) { + $eccLevel = $mode[1]; + } + + $qrTab = QRcode::text($code, false, $eccLevel); + $size = count($qrTab); + + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach(str_split($line) as $char) + $arrAdd[] = ($char=='1')?1:0; + $barcode_array['bcode'][] = $arrAdd; + } + + return $barcode_array; + } + + //---------------------------------------------------------------------- + public static function clearCache() + { + self::$frames = array(); + } + + //---------------------------------------------------------------------- + public static function buildCache() + { + QRtools::markTime('before_build_cache'); + + $mask = new QRmask(); + for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { + $frame = QRspec::newFrame($a); + if (QR_IMAGE) { + $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; + QRimage::png(self::binarize($frame), $fileName, 1, 0); + } + + $width = count($frame); + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($maskNo=0; $maskNo<8; $maskNo++) + $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); + } + + QRtools::markTime('after_build_cache'); + } + + //---------------------------------------------------------------------- + public static function log($outfile, $err) + { + if (QR_LOG_DIR !== false) { + if ($err != '') { + if ($outfile !== false) { + file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } else { + file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } + } + } + } + + //---------------------------------------------------------------------- + public static function dumpMask($frame) + { + $width = count($frame); + for($y=0;$y<$width;$y++) { + for($x=0;$x<$width;$x++) { + echo ord($frame[$y][$x]).','; + } + } + } + + //---------------------------------------------------------------------- + public static function markTime($markerId) + { + list($usec, $sec) = explode(" ", microtime()); + $time = ((float)$usec + (float)$sec); + + if (!isset($GLOBALS['qr_time_bench'])) + $GLOBALS['qr_time_bench'] = array(); + + $GLOBALS['qr_time_bench'][$markerId] = $time; + } + + //---------------------------------------------------------------------- + public static function timeBenchmark() + { + self::markTime('finish'); + + $lastTime = 0; + $startTime = 0; + $p = 0; + + echo ' + + '; + + foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { + if ($p > 0) { + echo ''; + } else { + $startTime = $thisTime; + } + + $p++; + $lastTime = $thisTime; + } + + echo ' + + +
        BENCHMARK
        till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
        TOTAL: '.number_format($lastTime-$startTime, 6).'s
        '; + } + + } + + //########################################################################## + + QRtools::markTime('start'); + + + + +//---- qrspec.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * QR Code specifications + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QRSPEC_VERSION_MAX', 40); + define('QRSPEC_WIDTH_MAX', 177); + + define('QRCAP_WIDTH', 0); + define('QRCAP_WORDS', 1); + define('QRCAP_REMINDER', 2); + define('QRCAP_EC', 3); + + class QRspec { + + public static $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), + array( 29, 70, 7, array( 15, 26, 36, 44)), + array( 33, 100, 7, array( 20, 36, 52, 64)), + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), + array( 45, 196, 0, array( 40, 72, 108, 130)), + array( 49, 242, 0, array( 48, 88, 132, 156)), + array( 53, 292, 0, array( 60, 110, 160, 192)), + array( 57, 346, 0, array( 72, 130, 192, 224)), //10 + array( 61, 404, 0, array( 80, 150, 224, 264)), + array( 65, 466, 0, array( 96, 176, 260, 308)), + array( 69, 532, 0, array( 104, 198, 288, 352)), + array( 73, 581, 3, array( 120, 216, 320, 384)), + array( 77, 655, 3, array( 132, 240, 360, 432)), //15 + array( 81, 733, 3, array( 144, 280, 408, 480)), + array( 85, 815, 3, array( 168, 308, 448, 532)), + array( 89, 901, 3, array( 180, 338, 504, 588)), + array( 93, 991, 3, array( 196, 364, 546, 650)), + array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 + array(101, 1156, 4, array( 224, 442, 644, 750)), + array(105, 1258, 4, array( 252, 476, 690, 816)), + array(109, 1364, 4, array( 270, 504, 750, 900)), + array(113, 1474, 4, array( 300, 560, 810, 960)), + array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), + array(125, 1828, 4, array( 360, 700, 1020, 1200)), + array(129, 1921, 3, array( 390, 728, 1050, 1260)), + array(133, 2051, 3, array( 420, 784, 1140, 1350)), + array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), + array(145, 2465, 3, array( 510, 924, 1350, 1620)), + array(149, 2611, 3, array( 540, 980, 1440, 1710)), + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 + ); + + //---------------------------------------------------------------------- + public static function getDataLength($version, $level) + { + return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getECCLength($version, $level) + { + return self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getWidth($version) + { + return self::$capacity[$version][QRCAP_WIDTH]; + } + + //---------------------------------------------------------------------- + public static function getRemainder($version) + { + return self::$capacity[$version][QRCAP_REMINDER]; + } + + //---------------------------------------------------------------------- + public static function getMinimumVersion($size, $level) + { + + for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { + $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; + if($words >= $size) + return $i; + } + + return -1; + } + + //###################################################################### + + public static $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + //---------------------------------------------------------------------- + public static function lengthIndicator($mode, $version) + { + if ($mode == QR_MODE_STRUCTURE) + return 0; + + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + return self::$lengthTableBits[$mode][$l]; + } + + //---------------------------------------------------------------------- + public static function maximumWords($mode, $version) + { + if($mode == QR_MODE_STRUCTURE) + return 3; + + if($version <= 9) { + $l = 0; + } else if($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + $bits = self::$lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + + if($mode == QR_MODE_KANJI) { + $words *= 2; // the number of bytes is required + } + + return $words; + } + + // Error correction code ----------------------------------------------- + // Table of the error correction code (Reed-Solomon block) + // See Table 12-16 (pp.30-36), JIS X0510:2004. + + public static $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 + ); + + //---------------------------------------------------------------------- + // CACHEABLE!!! + + public static function getEccSpec($version, $level, array &$spec) + { + if (count($spec) < 5) { + $spec = array(0,0,0,0,0); + } + + $b1 = self::$eccTable[$version][$level][0]; + $b2 = self::$eccTable[$version][$level][1]; + $data = self::getDataLength($version, $level); + $ecc = self::getECCLength($version, $level); + + if($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + } + + // Alignment pattern --------------------------------------------------- + + // Positions of alignment patterns. + // This array includes only the second and the third position of the + // alignment patterns. Rest of them can be calculated from the distance + // between them. + + // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + + public static $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 + ); + + + /** -------------------------------------------------------------------- + * Put an alignment marker. + * @param frame + * @param width + * @param ox,oy center coordinate of the pattern + */ + public static function putAlignmentMarker(array &$frame, $ox, $oy) + { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + + $yStart = $oy-2; + $xStart = $ox-2; + + for($y=0; $y<5; $y++) { + QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function putAlignmentPattern($version, &$frame, $width) + { + if($version < 2) + return; + + $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; + if($d < 0) { + $w = 2; + } else { + $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); + } + + if($w * $w - 3 == 1) { + $x = self::$alignmentPattern[$version][0]; + $y = self::$alignmentPattern[$version][0]; + self::putAlignmentMarker($frame, $x, $y); + return; + } + + $cx = self::$alignmentPattern[$version][0]; + for($x=1; $x<$w - 1; $x++) { + self::putAlignmentMarker($frame, 6, $cx); + self::putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + + $cy = self::$alignmentPattern[$version][0]; + for($y=0; $y<$w-1; $y++) { + $cx = self::$alignmentPattern[$version][0]; + for($x=0; $x<$w-1; $x++) { + self::putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + } + + // Version information pattern ----------------------------------------- + + // Version information pattern (BCH coded). + // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + + // size: [QRSPEC_VERSION_MAX - 6] + + public static $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, + 0x27541, 0x28c69 + ); + + //---------------------------------------------------------------------- + public static function getVersionPattern($version) + { + if($version < 7 || $version > QRSPEC_VERSION_MAX) + return 0; + + return self::$versionPattern[$version -7]; + } + + // Format information -------------------------------------------------- + // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) + + public static $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) + ); + + public static function getFormatInfo($mask, $level) + { + if($mask < 0 || $mask > 7) + return 0; + + if($level < 0 || $level > 3) + return 0; + + return self::$formatInfo[$level][$mask]; + } + + // Frame --------------------------------------------------------------- + // Cache of initial frames. + + public static $frames = array(); + + /** -------------------------------------------------------------------- + * Put a finder pattern. + * @param frame + * @param width + * @param ox,oy upper-left coordinate of the pattern + */ + public static function putFinderPattern(&$frame, $ox, $oy) + { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + + for($y=0; $y<7; $y++) { + QRstr::set($frame, $ox, $oy+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function createFrame($version) + { + $width = self::$capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + + // Finder pattern + self::putFinderPattern($frame, 0, 0); + self::putFinderPattern($frame, $width - 7, 0); + self::putFinderPattern($frame, 0, $width - 7); + + // Separator + $yOffset = $width - 7; + + for($y=0; $y<7; $y++) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + $yOffset++; + } + + $setPattern = str_repeat("\xc0", 8); + + QRstr::set($frame, 0, 7, $setPattern); + QRstr::set($frame, $width-8, 7, $setPattern); + QRstr::set($frame, 0, $width - 8, $setPattern); + + // Format info + $setPattern = str_repeat("\x84", 9); + QRstr::set($frame, 0, 8, $setPattern); + QRstr::set($frame, $width - 8, 8, $setPattern, 8); + + $yOffset = $width - 8; + + for($y=0; $y<8; $y++,$yOffset++) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + + // Timing pattern + + for($i=1; $i<$width-15; $i++) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + + // Alignment pattern + self::putAlignmentPattern($version, $frame, $width); + + // Version information + if($version >= 7) { + $vinf = self::getVersionPattern($version); + + $v = $vinf; + + for($x=0; $x<6; $x++) { + for($y=0; $y<3; $y++) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + + $v = $vinf; + for($y=0; $y<6; $y++) { + for($x=0; $x<3; $x++) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + + // and a little bit... + $frame[$width - 8][8] = "\x81"; + + return $frame; + } + + //---------------------------------------------------------------------- + public static function debug($frame, $binary_mode = false) + { + if ($binary_mode) { + + foreach ($frame as &$frameLine) { + $frameLine = join('  ', explode('0', $frameLine)); + $frameLine = join('██', explode('1', $frameLine)); + } + + ?> + +


                '; + echo join("
                ", $frame); + echo '






        '; + + } else { + + foreach ($frame as &$frameLine) { + $frameLine = join(' ', explode("\xc0", $frameLine)); + $frameLine = join('', explode("\xc1", $frameLine)); + $frameLine = join(' ', explode("\xa0", $frameLine)); + $frameLine = join('', explode("\xa1", $frameLine)); + $frameLine = join('', explode("\x84", $frameLine)); //format 0 + $frameLine = join('', explode("\x85", $frameLine)); //format 1 + $frameLine = join('', explode("\x81", $frameLine)); //special bit + $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 + $frameLine = join('', explode("\x91", $frameLine)); //clock 1 + $frameLine = join(' ', explode("\x88", $frameLine)); //version + $frameLine = join('', explode("\x89", $frameLine)); //version + $frameLine = join('♦', explode("\x01", $frameLine)); + $frameLine = join('⋅', explode("\0", $frameLine)); + } + + ?> + + "; + echo join("
        ", $frame); + echo "
        "; + + } + } + + //---------------------------------------------------------------------- + public static function serial($frame) + { + return gzcompress(join("\n", $frame), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + return explode("\n", gzuncompress($code)); + } + + //---------------------------------------------------------------------- + public static function newFrame($version) + { + if($version < 1 || $version > QRSPEC_VERSION_MAX) + return null; + + if(!isset(self::$frames[$version])) { + + $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + self::$frames[$version] = self::unserial(file_get_contents($fileName)); + } else { + self::$frames[$version] = self::createFrame($version); + file_put_contents($fileName, self::serial(self::$frames[$version])); + } + } else { + self::$frames[$version] = self::createFrame($version); + } + } + + if(is_null(self::$frames[$version])) + return null; + + return self::$frames[$version]; + } + + //---------------------------------------------------------------------- + public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } + public static function rsBlockNum1($spec) { return $spec[0]; } + public static function rsDataCodes1($spec) { return $spec[1]; } + public static function rsEccCodes1($spec) { return $spec[2]; } + public static function rsBlockNum2($spec) { return $spec[3]; } + public static function rsDataCodes2($spec) { return $spec[4]; } + public static function rsEccCodes2($spec) { return $spec[2]; } + public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } + public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } + + } + + + +//---- qrimage.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Image output of code using GD2 + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_IMAGE', true); + + class QRimage { + + //---------------------------------------------------------------------- + public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/png"); + ImagePng($image); + } else { + if($saveandprint===TRUE){ + ImagePng($image, $filename); + header("Content-type: image/png"); + ImagePng($image); + }else{ + ImagePng($image, $filename); + } + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/jpeg"); + ImageJpeg($image, null, $q); + } else { + ImageJpeg($image, $filename, $q); + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + $base_image =ImageCreate($imgW, $imgH); + + $col[0] = ImageColorAllocate($base_image,255,255,255); + $col[1] = ImageColorAllocate($base_image,0,0,0); + + imagefill($base_image, 0, 0, $col[0]); + + for($y=0; $y<$h; $y++) { + for($x=0; $x<$w; $x++) { + if ($frame[$y][$x] == '1') { + ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); + } + } + } + + $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); + ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); + ImageDestroy($base_image); + + return $target_image; + } + } + + + +//---- qrinput.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input encoding class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('STRUCTURE_HEADER_BITS', 20); + define('MAX_STRUCTURED_SYMBOLS', 16); + + class QRinputItem { + + public $mode; + public $size; + public $data; + public $bstream; + + public function __construct($mode, $size, $data, $bstream = null) + { + $setData = array_slice($data, 0, $size); + + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); + } + + if(!QRinput::check($mode, $size, $setData)) { + throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); + return null; + } + + $this->mode = $mode; + $this->size = $size; + $this->data = $setData; + $this->bstream = $bstream; + } + + //---------------------------------------------------------------------- + public function encodeModeNum($version) + { + try { + + $words = (int)($this->size / 3); + $bs = new QRbitstream(); + + $val = 0x1; + $bs->appendNum(4, $val); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; + $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; + $val += (ord($this->data[$i*3+2]) - ord('0')); + $bs->appendNum(10, $val); + } + + if($this->size - $words * 3 == 1) { + $val = ord($this->data[$words*3]) - ord('0'); + $bs->appendNum(4, $val); + } else if($this->size - $words * 3 == 2) { + $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; + $val += (ord($this->data[$words*3+1]) - ord('0')); + $bs->appendNum(7, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeAn($version) + { + try { + $words = (int)($this->size / 2); + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x02); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; + $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); + + $bs->appendNum(11, $val); + } + + if($this->size & 1) { + $val = QRinput::lookAnTable(ord($this->data[$words * 2])); + $bs->appendNum(6, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeMode8($version) + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x4); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); + + for($i=0; $i<$this->size; $i++) { + $bs->appendNum(8, ord($this->data[$i])); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeKanji($version) + { + try { + + $bs = new QRbitrtream(); + + $bs->appendNum(4, 0x8); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); + + for($i=0; $i<$this->size; $i+=2) { + $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); + if($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + + $bs->appendNum(13, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeStructure() + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x03); + $bs->appendNum(4, ord($this->data[1]) - 1); + $bs->appendNum(4, ord($this->data[0]) - 1); + $bs->appendNum(8, ord($this->data[2])); + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function estimateBitStreamSizeOfEntry($version) + { + $bits = 0; + + if($version == 0) + $version = 1; + + switch($this->mode) { + case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; + case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; + case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; + case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; + case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; + default: + return 0; + } + + $l = QRspec::lengthIndicator($this->mode, $version); + $m = 1 << $l; + $num = (int)(($this->size + $m - 1) / $m); + + $bits += $num * (4 + $l); + + return $bits; + } + + //---------------------------------------------------------------------- + public function encodeBitStream($version) + { + try { + + unset($this->bstream); + $words = QRspec::maximumWords($this->mode, $version); + + if($this->size > $words) { + + $st1 = new QRinputItem($this->mode, $words, $this->data); + $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); + + $st1->encodeBitStream($version); + $st2->encodeBitStream($version); + + $this->bstream = new QRbitstream(); + $this->bstream->append($st1->bstream); + $this->bstream->append($st2->bstream); + + unset($st1); + unset($st2); + + } else { + + $ret = 0; + + switch($this->mode) { + case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; + case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; + case QR_MODE_8: $ret = $this->encodeMode8($version); break; + case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; + case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; + + default: + break; + } + + if($ret < 0) + return -1; + } + + return $this->bstream->size(); + + } catch (Exception $e) { + return -1; + } + } + }; + + //########################################################################## + + class QRinput { + + public $items; + + private $version; + private $level; + + //---------------------------------------------------------------------- + public function __construct($version = 0, $level = QR_ECLEVEL_L) + { + if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { + throw new Exception('Invalid version no'); + return NULL; + } + + $this->version = $version; + $this->level = $level; + } + + //---------------------------------------------------------------------- + public function getVersion() + { + return $this->version; + } + + //---------------------------------------------------------------------- + public function setVersion($version) + { + if($version < 0 || $version > QRSPEC_VERSION_MAX) { + throw new Exception('Invalid version no'); + return -1; + } + + $this->version = $version; + + return 0; + } + + //---------------------------------------------------------------------- + public function getErrorCorrectionLevel() + { + return $this->level; + } + + //---------------------------------------------------------------------- + public function setErrorCorrectionLevel($level) + { + if($level > QR_ECLEVEL_H) { + throw new Exception('Invalid ECLEVEL'); + return -1; + } + + $this->level = $level; + + return 0; + } + + //---------------------------------------------------------------------- + public function appendEntry(QRinputItem $entry) + { + $this->items[] = $entry; + } + + //---------------------------------------------------------------------- + public function append($mode, $size, $data) + { + try { + $entry = new QRinputItem($mode, $size, $data); + $this->items[] = $entry; + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + + public function insertStructuredAppendHeader($size, $index, $parity) + { + if( $size > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong size'); + } + + if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong index'); + } + + $buf = array($size, $index, $parity); + + try { + $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); + array_unshift($this->items, $entry); + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function calcParity() + { + $parity = 0; + + foreach($this->items as $item) { + if($item->mode != QR_MODE_STRUCTURE) { + for($i=$item->size-1; $i>=0; $i--) { + $parity ^= $item->data[$i]; + } + } + } + + return $parity; + } + + //---------------------------------------------------------------------- + public static function checkModeNum($size, $data) + { + for($i=0; $i<$size; $i++) { + if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeNum($size) + { + $w = (int)$size / 3; + $bits = $w * 10; + + switch($size - $w * 3) { + case 1: + $bits += 4; + break; + case 2: + $bits += 7; + break; + default: + break; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + ); + + //---------------------------------------------------------------------- + public static function lookAnTable($c) + { + return (($c > 127)?-1:self::$anTable[$c]); + } + + //---------------------------------------------------------------------- + public static function checkModeAn($size, $data) + { + for($i=0; $i<$size; $i++) { + if (self::lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeAn($size) + { + $w = (int)($size / 2); + $bits = $w * 11; + + if($size & 1) { + $bits += 6; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static function estimateBitsMode8($size) + { + return $size * 8; + } + + //---------------------------------------------------------------------- + public function estimateBitsModeKanji($size) + { + return (int)(($size / 2) * 13); + } + + //---------------------------------------------------------------------- + public static function checkModeKanji($size, $data) + { + if($size & 1) + return false; + + for($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if( $val < 0x8140 + || ($val > 0x9ffc && $val < 0xe040) + || $val > 0xebbf) { + return false; + } + } + + return true; + } + + /*********************************************************************** + * Validation + **********************************************************************/ + + public static function check($mode, $size, $data) + { + if($size <= 0) + return false; + + switch($mode) { + case QR_MODE_NUM: return self::checkModeNum($size, $data); break; + case QR_MODE_AN: return self::checkModeAn($size, $data); break; + case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; + case QR_MODE_8: return true; break; + case QR_MODE_STRUCTURE: return true; break; + + default: + break; + } + + return false; + } + + + //---------------------------------------------------------------------- + public function estimateBitStreamSize($version) + { + $bits = 0; + + foreach($this->items as $item) { + $bits += $item->estimateBitStreamSizeOfEntry($version); + } + + return $bits; + } + + //---------------------------------------------------------------------- + public function estimateVersion() + { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($prev); + $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + + return $version; + } + + //---------------------------------------------------------------------- + public static function lengthOfCode($mode, $version, $bits) + { + $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NUM: + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if($remain >= 7) { + $size += 2; + } else if($remain >= 4) { + $size += 1; + } + break; + case QR_MODE_AN: + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if($remain >= 6) + $size++; + break; + case QR_MODE_8: + $size = (int)($payload / 8); + break; + case QR_MODE_KANJI: + $size = (int)(($payload / 13) * 2); + break; + case QR_MODE_STRUCTURE: + $size = (int)($payload / 8); + break; + default: + $size = 0; + break; + } + + $maxsize = QRspec::maximumWords($mode, $version); + if($size < 0) $size = 0; + if($size > $maxsize) $size = $maxsize; + + return $size; + } + + //---------------------------------------------------------------------- + public function createBitStream() + { + $total = 0; + + foreach($this->items as $item) { + $bits = $item->encodeBitStream($this->version); + + if($bits < 0) + return -1; + + $total += $bits; + } + + return $total; + } + + //---------------------------------------------------------------------- + public function convertData() + { + $ver = $this->estimateVersion(); + if($ver > $this->getVersion()) { + $this->setVersion($ver); + } + + for(;;) { + $bits = $this->createBitStream(); + + if($bits < 0) + return -1; + + $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if($ver < 0) { + throw new Exception('WRONG VERSION'); + return -1; + } else if($ver > $this->getVersion()) { + $this->setVersion($ver); + } else { + break; + } + } + + return 0; + } + + //---------------------------------------------------------------------- + public function appendPaddingBit(&$bstream) + { + $bits = $bstream->size(); + $maxwords = QRspec::getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + + if ($maxbits == $bits) { + return 0; + } + + if ($maxbits - $bits < 5) { + return $bstream->appendNum($maxbits - $bits, 0); + } + + $bits += 4; + $words = (int)(($bits + 7) / 8); + + $padding = new QRbitstream(); + $ret = $padding->appendNum($words * 8 - $bits + 4, 0); + + if($ret < 0) + return $ret; + + $padlen = $maxwords - $words; + + if($padlen > 0) { + + $padbuf = array(); + for($i=0; $i<$padlen; $i++) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + + $ret = $padding->appendBytes($padlen, $padbuf); + + if($ret < 0) + return $ret; + + } + + $ret = $bstream->append($padding); + + return $ret; + } + + //---------------------------------------------------------------------- + public function mergeBitStream() + { + if($this->convertData() < 0) { + return null; + } + + $bstream = new QRbitstream(); + + foreach($this->items as $item) { + $ret = $bstream->append($item->bstream); + if($ret < 0) { + return null; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getBitStream() + { + + $bstream = $this->mergeBitStream(); + + if($bstream == null) { + return null; + } + + $ret = $this->appendPaddingBit($bstream); + if($ret < 0) { + return null; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getByteStream() + { + $bstream = $this->getBitStream(); + if($bstream == null) { + return null; + } + + return $bstream->toByte(); + } + } + + + + + + +//---- qrbitstream.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Bitstream class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRbitstream { + + public $data = array(); + + //---------------------------------------------------------------------- + public function size() + { + return count($this->data); + } + + //---------------------------------------------------------------------- + public function allocate($setLength) + { + $this->data = array_fill(0, $setLength, 0); + return 0; + } + + //---------------------------------------------------------------------- + public static function newFromNum($bits, $num) + { + $bstream = new QRbitstream(); + $bstream->allocate($bits); + + $mask = 1 << ($bits - 1); + for($i=0; $i<$bits; $i++) { + if($num & $mask) { + $bstream->data[$i] = 1; + } else { + $bstream->data[$i] = 0; + } + $mask = $mask >> 1; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public static function newFromBytes($size, $data) + { + $bstream = new QRbitstream(); + $bstream->allocate($size * 8); + $p=0; + + for($i=0; $i<$size; $i++) { + $mask = 0x80; + for($j=0; $j<8; $j++) { + if($data[$i] & $mask) { + $bstream->data[$p] = 1; + } else { + $bstream->data[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function append(QRbitstream $arg) + { + if (is_null($arg)) { + return -1; + } + + if($arg->size() == 0) { + return 0; + } + + if($this->size() == 0) { + $this->data = $arg->data; + return 0; + } + + $this->data = array_values(array_merge($this->data, $arg->data)); + + return 0; + } + + //---------------------------------------------------------------------- + public function appendNum($bits, $num) + { + if ($bits == 0) + return 0; + + $b = QRbitstream::newFromNum($bits, $num); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function appendBytes($size, $data) + { + if ($size == 0) + return 0; + + $b = QRbitstream::newFromBytes($size, $data); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function toByte() + { + + $size = $this->size(); + + if($size == 0) { + return array(); + } + + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + + $p = 0; + + for($i=0; $i<$bytes; $i++) { + $v = 0; + for($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$i] = $v; + } + + if($size & 7) { + $v = 0; + for($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$bytes] = $v; + } + + return $data; + } + + } + + + + +//---- qrsplit.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input splitting classes + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + class QRsplit { + + public $dataStr = ''; + public $input; + public $modeHint; + + //---------------------------------------------------------------------- + public function __construct($dataStr, $input, $modeHint) + { + $this->dataStr = $dataStr; + $this->input = $input; + $this->modeHint = $modeHint; + } + + //---------------------------------------------------------------------- + public static function isdigitat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + //---------------------------------------------------------------------- + public static function isalnumat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return (QRinput::lookAnTable(ord($str[$pos])) >= 0); + } + + //---------------------------------------------------------------------- + public function identifyMode($pos) + { + if ($pos >= strlen($this->dataStr)) + return QR_MODE_NUL; + + $c = $this->dataStr[$pos]; + + if(self::isdigitat($this->dataStr, $pos)) { + return QR_MODE_NUM; + } else if(self::isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } else if($this->modeHint == QR_MODE_KANJI) { + + if ($pos+1 < strlen($this->dataStr)) + { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KANJI; + } + } + } + + return QR_MODE_8; + } + + //---------------------------------------------------------------------- + public function eatNum() + { + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + while(self::isdigitat($this->dataStr, $p)) { + $p++; + } + + $run = $p; + $mode = $this->identifyMode($p); + + if($mode == QR_MODE_8) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + if($mode == QR_MODE_AN) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsModeAn(1) // + 4 + la + - QRinput::estimateBitsModeAn($run + 1);// - 4 - la + if($dif > 0) { + return $this->eatAn(); + } + } + + $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatAn() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + + while(self::isalnumat($this->dataStr, $p)) { + if(self::isdigitat($this->dataStr, $p)) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + + $dif = QRinput::estimateBitsModeAn($p) // + 4 + la + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsModeAn($q); // - 4 - la + + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + + if(!self::isalnumat($this->dataStr, $p)) { + $dif = QRinput::estimateBitsModeAn($run) + 4 + $la + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + + $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatKanji() + { + $p = 0; + + while($this->identifyMode($p) == QR_MODE_KANJI) { + $p += 2; + } + + $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eat8() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 1; + $dataStrLen = strlen($this->dataStr); + + while($p < $dataStrLen) { + + $mode = $this->identifyMode($p); + if($mode == QR_MODE_KANJI) { + break; + } + if($mode == QR_MODE_NUM) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else if($mode == QR_MODE_AN) { + $q = $p; + while(self::isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeAn($q - $p) + 4 + $la + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); + + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function splitString() + { + while (strlen($this->dataStr) > 0) + { + if($this->dataStr == '') + return 0; + + $mode = $this->identifyMode(0); + + switch ($mode) { + case QR_MODE_NUM: $length = $this->eatNum(); break; + case QR_MODE_AN: $length = $this->eatAn(); break; + case QR_MODE_KANJI: + if ($hint == QR_MODE_KANJI) + $length = $this->eatKanji(); + else $length = $this->eat8(); + break; + default: $length = $this->eat8(); break; + + } + + if($length == 0) return 0; + if($length < 0) return -1; + + $this->dataStr = substr($this->dataStr, $length); + } + } + + //---------------------------------------------------------------------- + public function toUpper() + { + $stringLen = strlen($this->dataStr); + $p = 0; + + while ($p<$stringLen) { + $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); + if($mode == QR_MODE_KANJI) { + $p += 2; + } else { + if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + + return $this->dataStr; + } + + //---------------------------------------------------------------------- + public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) + { + if(is_null($string) || $string == '\0' || $string == '') { + throw new Exception('empty string!!!'); + } + + $split = new QRsplit($string, $input, $modeHint); + + if(!$casesensitive) + $split->toUpper(); + + return $split->splitString(); + } + } + + + +//---- qrrscode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Reed-Solomon error correction support + * + * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q + * (libfec is released under the GNU Lesser General Public License.) + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsItem { + + public $mm; // Bits per symbol + public $nn; // Symbols per block (= (1<= $this->nn) { + $x -= $this->nn; + $x = ($x >> $this->mm) + ($x & $this->nn); + } + + return $x; + } + + //---------------------------------------------------------------------- + public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + // Common code for intializing a Reed-Solomon control block (char or int symbols) + // Copyright 2004 Phil Karn, KA9Q + // May be used under the terms of the GNU Lesser General Public License (LGPL) + + $rs = null; + + // Check parameter ranges + if($symsize < 0 || $symsize > 8) return $rs; + if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; + if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; + if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! + if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding + + $rs = new QRrsItem(); + $rs->mm = $symsize; + $rs->nn = (1<<$symsize)-1; + $rs->pad = $pad; + + $rs->alpha_to = array_fill(0, $rs->nn+1, 0); + $rs->index_of = array_fill(0, $rs->nn+1, 0); + + // PHP style macro replacement ;) + $NN =& $rs->nn; + $A0 =& $NN; + + // Generate Galois field lookup tables + $rs->index_of[0] = $A0; // log(zero) = -inf + $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 + $sr = 1; + + for($i=0; $i<$rs->nn; $i++) { + $rs->index_of[$sr] = $i; + $rs->alpha_to[$i] = $sr; + $sr <<= 1; + if($sr & (1<<$symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs->nn; + } + + if($sr != 1){ + // field generator polynomial is not primitive! + $rs = NULL; + return $rs; + } + + /* Form RS code generator polynomial from its roots */ + $rs->genpoly = array_fill(0, $nroots+1, 0); + + $rs->fcr = $fcr; + $rs->prim = $prim; + $rs->nroots = $nroots; + $rs->gfpoly = $gfpoly; + + /* Find prim-th root of 1, used in decoding */ + for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) + ; // intentional empty-body loop! + + $rs->iprim = (int)($iprim / $prim); + $rs->genpoly[0] = 1; + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs->genpoly[$i+1] = 1; + + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; $j--) { + if ($rs->genpoly[$j] != 0) { + $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; + } else { + $rs->genpoly[$j] = $rs->genpoly[$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; + } + + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; $i++) + $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; + + return $rs; + } + + //---------------------------------------------------------------------- + public function encode_rs_char($data, &$parity) + { + $MM =& $this->mm; + $NN =& $this->nn; + $ALPHA_TO =& $this->alpha_to; + $INDEX_OF =& $this->index_of; + $GENPOLY =& $this->genpoly; + $NROOTS =& $this->nroots; + $FCR =& $this->fcr; + $PRIM =& $this->prim; + $IPRIM =& $this->iprim; + $PAD =& $this->pad; + $A0 =& $NN; + + $parity = array_fill(0, $NROOTS, 0); + + for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { + + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if($feedback != $A0) { + // feedback term is non-zero + + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); + + for($j=1;$j<$NROOTS;$j++) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; + } + } + + // Shift + array_shift($parity); + if($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + } + } + + //########################################################################## + + class QRrs { + + public static $items = array(); + + //---------------------------------------------------------------------- + public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + foreach(self::$items as $rs) { + if($rs->pad != $pad) continue; + if($rs->nroots != $nroots) continue; + if($rs->mm != $symsize) continue; + if($rs->gfpoly != $gfpoly) continue; + if($rs->fcr != $fcr) continue; + if($rs->prim != $prim) continue; + + return $rs; + } + + $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift(self::$items, $rs); + + return $rs; + } + } + + + +//---- qrmask.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Masking + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('N1', 3); + define('N2', 3); + define('N3', 40); + define('N4', 10); + + class QRmask { + + public $runLength = array(); + + //---------------------------------------------------------------------- + public function __construct() + { + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + } + + //---------------------------------------------------------------------- + public function writeFormatInformation($width, &$frame, $mask, $level) + { + $blacks = 0; + $format = QRspec::getFormatInfo($mask, $level); + + for($i=0; $i<8; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[8][$width - 1 - $i] = chr($v); + if($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + + for($i=0; $i<7; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[$width - 7 + $i][8] = chr($v); + if($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + + $format = $format >> 1; + } + + return $blacks; + } + + //---------------------------------------------------------------------- + public function mask0($x, $y) { return ($x+$y)&1; } + public function mask1($x, $y) { return ($y&1); } + public function mask2($x, $y) { return ($x%3); } + public function mask3($x, $y) { return ($x+$y)%3; } + public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } + public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } + public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } + public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } + + //---------------------------------------------------------------------- + private function generateMaskNo($maskNo, $width, $frame) + { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if(ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + + } + } + + return $bitMask; + } + + //---------------------------------------------------------------------- + public static function serial($bitFrame) + { + $codeArr = array(); + + foreach ($bitFrame as $line) + $codeArr[] = join('', $line); + + return gzcompress(join("\n", $codeArr), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + $codeArr = array(); + + $codeLines = explode("\n", gzuncompress($code)); + foreach ($codeLines as $line) + $codeArr[] = str_split($line); + + return $codeArr; + } + + //---------------------------------------------------------------------- + public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) + { + $b = 0; + $bitMask = array(); + + $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + $bitMask = self::unserial(file_get_contents($fileName)); + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) + mkdir(QR_CACHE_DIR.'mask_'.$maskNo); + file_put_contents($fileName, self::serial($bitMask)); + } + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + } + + if ($maskGenOnly) + return; + + $d = $s; + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + + return $b; + } + + //---------------------------------------------------------------------- + public function makeMask($width, $frame, $maskNo, $level) + { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + + return $masked; + } + + //---------------------------------------------------------------------- + public function calcN1N3($length) + { + $demerit = 0; + + for($i=0; $i<$length; $i++) { + + if($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if($i & 1) { + if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if(($this->runLength[$i-2] == $fact) && + ($this->runLength[$i-1] == $fact) && + ($this->runLength[$i+1] == $fact) && + ($this->runLength[$i+2] == $fact)) { + if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + //---------------------------------------------------------------------- + public function evaluateSymbol($width, $frame) + { + $head = 0; + $demerit = 0; + + for($y=0; $y<$width; $y++) { + $head = 0; + $this->runLength[0] = 1; + + $frameY = $frame[$y]; + + if ($y>0) + $frameYM = $frame[$y-1]; + + for($x=0; $x<$width; $x++) { + if(($x > 0) && ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + + if(($b22 | ($w22 ^ 1))&1) { + $demerit += N2; + } + } + if(($x == 0) && (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($x > 0) { + if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + for($x=0; $x<$width; $x++) { + $head = 0; + $this->runLength[0] = 1; + + for($y=0; $y<$width; $y++) { + if($y == 0 && (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($y > 0) { + if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + return $demerit; + } + + + //---------------------------------------------------------------------- + public function mask($width, $frame, $level) + { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + + $checked_masks = array(0,1,2,3,4,5,6,7); + + if (QR_FIND_FROM_RANDOM !== false) { + + $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; $i++) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + + } + + $bestMask = $frame; + + foreach($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + + if($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + + return $bestMask; + } + + //---------------------------------------------------------------------- + } + + + + +//---- qrencode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Main encoder classes. + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsblock { + public $dataLength; + public $data = array(); + public $eccLength; + public $ecc = array(); + + public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) + { + $rs->encode_rs_char($data, $ecc); + + $this->dataLength = $dl; + $this->data = $data; + $this->eccLength = $el; + $this->ecc = $ecc; + } + }; + + //########################################################################## + + class QRrawcode { + public $version; + public $datacode = array(); + public $ecccode = array(); + public $blocks; + public $rsblocks = array(); //of RSblock + public $count; + public $dataLength; + public $eccLength; + public $b1; + + //---------------------------------------------------------------------- + public function __construct(QRinput $input) + { + $spec = array(0,0,0,0,0); + + $this->datacode = $input->getByteStream(); + if(is_null($this->datacode)) { + throw new Exception('null imput string'); + } + + QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); + + $this->version = $input->getVersion(); + $this->b1 = QRspec::rsBlockNum1($spec); + $this->dataLength = QRspec::rsDataLength($spec); + $this->eccLength = QRspec::rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = QRspec::rsBlockNum($spec); + + $ret = $this->init($spec); + if($ret < 0) { + throw new Exception('block alloc error'); + return null; + } + + $this->count = 0; + } + + //---------------------------------------------------------------------- + public function init(array $spec) + { + $dl = QRspec::rsDataCodes1($spec); + $el = QRspec::rsEccCodes1($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + if(QRspec::rsBlockNum2($spec) == 0) + return 0; + + $dl = QRspec::rsDataCodes2($spec); + $el = QRspec::rsEccCodes2($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + if($rs == NULL) return -1; + + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + return 0; + } + + //---------------------------------------------------------------------- + public function getCode() + { + $ret; + + if($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if($col >= $this->rsblocks[0]->dataLength) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]->data[$col]; + } else if($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]->ecc[$col]; + } else { + return 0; + } + $this->count++; + + return $ret; + } + } + + //########################################################################## + + class QRcode { + + public $version; + public $width; + public $data; + + //---------------------------------------------------------------------- + public function encodeMask(QRinput $input, $mask) + { + if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { + throw new Exception('wrong version'); + } + if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { + throw new Exception('wrong level'); + } + + $raw = new QRrawcode($input); + + QRtools::markTime('after_raw'); + + $version = $raw->version; + $width = QRspec::getWidth($version); + $frame = QRspec::newFrame($version); + + $filler = new FrameFiller($width, $frame); + if(is_null($filler)) { + return NULL; + } + + // inteleaved data and ecc codes + for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { + $code = $raw->getCode(); + $bit = 0x80; + for($j=0; $j<8; $j++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + + QRtools::markTime('after_filler'); + + unset($raw); + + // remainder bits + $j = QRspec::getRemainder($version); + for($i=0; $i<$j; $i++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02); + } + + $frame = $filler->frame; + unset($filler); + + + // masking + $maskObj = new QRmask(); + if($mask < 0) { + + if (QR_FIND_BEST_MASK) { + $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); + } else { + $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); + } + } else { + $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); + } + + if($masked == NULL) { + return NULL; + } + + QRtools::markTime('after_mask'); + + $this->version = $version; + $this->width = $width; + $this->data = $masked; + + return $this; + } + + //---------------------------------------------------------------------- + public function encodeInput(QRinput $input) + { + return $this->encodeMask($input, -1); + } + + //---------------------------------------------------------------------- + public function encodeString8bit($string, $version, $level) + { + if(string == NULL) { + throw new Exception('empty string!'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); + if($ret < 0) { + unset($input); + return NULL; + } + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public function encodeString($string, $version, $level, $hint, $casesensitive) + { + + if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { + throw new Exception('bad hint'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); + if($ret < 0) { + return NULL; + } + + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodePNG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encode($text, $outfile); + } + + //---------------------------------------------------------------------- + public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodeRAW($text, $outfile); + } + } + + //########################################################################## + + class FrameFiller { + + public $width; + public $frame; + public $x; + public $y; + public $dir; + public $bit; + + //---------------------------------------------------------------------- + public function __construct($width, &$frame) + { + $this->width = $width; + $this->frame = $frame; + $this->x = $width - 1; + $this->y = $width - 1; + $this->dir = -1; + $this->bit = -1; + } + + //---------------------------------------------------------------------- + public function setFrameAt($at, $val) + { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + //---------------------------------------------------------------------- + public function getFrameAt($at) + { + return ord($this->frame[$at['y']][$at['x']]); + } + + //---------------------------------------------------------------------- + public function next() + { + do { + + if($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + + $x = $this->x; + $y = $this->y; + $w = $this->width; + + if($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + + if($this->dir < 0) { + if($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if($x == 6) { + $x--; + $y = 9; + } + } + } else { + if($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if($x == 6) { + $x--; + $y -= 8; + } + } + } + if($x < 0 || $y < 0) return null; + + $this->x = $x; + $this->y = $y; + + } while(ord($this->frame[$y][$x]) & 0x80); + + return array('x'=>$x, 'y'=>$y); + } + + } ; + + //########################################################################## + + class QRencode { + + public $casesensitive = true; + public $eightbit = false; + + public $version = 0; + public $size = 3; + public $margin = 4; + + public $structured = 0; // not supported yet + + public $level = QR_ECLEVEL_L; + public $hint = QR_MODE_8; + + //---------------------------------------------------------------------- + public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = new QRencode(); + $enc->size = $size; + $enc->margin = $margin; + + switch ($level.'') { + case '0': + case '1': + case '2': + case '3': + $enc->level = $level; + break; + case 'l': + case 'L': + $enc->level = QR_ECLEVEL_L; + break; + case 'm': + case 'M': + $enc->level = QR_ECLEVEL_M; + break; + case 'q': + case 'Q': + $enc->level = QR_ECLEVEL_Q; + break; + case 'h': + case 'H': + $enc->level = QR_ECLEVEL_H; + break; + } + + return $enc; + } + + //---------------------------------------------------------------------- + public function encodeRAW($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + return $code->data; + } + + //---------------------------------------------------------------------- + public function encode($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + QRtools::markTime('after_encode'); + + if ($outfile!== false) { + file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); + } else { + return QRtools::binarize($code->data); + } + } + + //---------------------------------------------------------------------- + public function encodePNG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + } + + diff --git a/src/wp-content/plugins/gravityforms/includes/webapi/webapi.php b/src/wp-content/plugins/gravityforms/includes/webapi/webapi.php new file mode 100644 index 0000000..5054e09 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/includes/webapi/webapi.php @@ -0,0 +1,1516 @@ +_slug, array($this, 'results_cron'), 10, 3); + + return; + } + parent::__construct(); + } + + public function init_ajax() { + parent::init_ajax(); + add_action('wp_ajax_gfwebapi_qrcode', array($this, 'ajax_qrcode')); + } + + public function init_admin() { + parent::init_admin(); + // update the cache meta + add_action("gform_after_update_entry", array($this, 'entry_updated'), 10, 2); + add_action("gform_update_status", array($this, 'update_entry_status'), 10, 2); + add_action("gform_after_save_form", array($this, 'after_save_form'), 10, 2); + } + + + public function init_frontend() { + $settings = $this->get_plugin_settings(); + $this->_enabled = rgar($settings, "enabled"); + $this->_public_key = rgar($settings, "public_key"); + $this->_private_key = rgar($settings, "private_key"); + + if (false == $this->_enabled) + return; + + add_filter('option_rewrite_rules', array($this, 'rewrite_rules')); + + add_filter('query_vars', array($this, 'query_vars')); + + add_filter('pre_get_posts', array($this, 'handle_page_request')); + + // update the cache + add_action('gform_entry_created', array($this, 'entry_created'), 10, 2); + } + + protected function plugin_settings_init() { + $subview = rgget("subview"); + RGForms::add_settings_page(array( + 'name' => __("Gravity Forms API Settings", "gravityforms"), + 'tab_label' => $this->get_short_title(), + 'handler' => array($this, 'plugin_settings_page') + )); + if (rgget("page") == "gf_settings" && $subview == $this->get_short_title() && $this->current_user_can_any($this->_capabilities_settings_page)) { + require_once(GFCommon::get_base_path() . "/tooltips.php"); + } + } + + // Scripts + public function scripts() { + $scripts = array( + array("handle" => "gfwebapi_hmac_sha1", + "src" => "http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha1.js", + "enqueue" => array( + array("admin_page" => array("plugin_settings")) + ) + ), + array("handle" => "gfwebapi_enc_base64", + "src" => "http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js", + "deps" => array('gfwebapi_hmac_sha1'), + "callback" => array($this, "localize_form_settings_scripts"), + "enqueue" => array( + array("admin_page" => array("plugin_settings")) + ) + ), + array( + "handle" => "gfwebapi_settings.js", + "src" => GFCommon::get_base_url() . "/includes/webapi/js/gfwebapi_settings.js", + "version" => $this->_version, + "deps" => array("jquery", 'thickbox'), + "enqueue" => array( + array("admin_page" => array("plugin_settings")) + ) + ) + ); + + return array_merge(parent::scripts(), $scripts); + } + + public function styles() { + $styles = array( + array("handle" => "gfwebap_settings", + "src" => GFCommon::get_base_url() . "/includes/webapi/css/gfwebapi_settings.css", + "version" => $this->_version, + "deps" => array("thickbox"), + "enqueue" => array( + array("admin_page" => array("plugin_settings")), + ) + ) + ); + + return array_merge(parent::scripts(), $styles); + } + + public function render_uninstall() { + } + + // ------- Plugin settings ------- + + public function plugin_settings_title() { + return " " . __("Gravity Forms API Settings", "gravityforms") . ""; + } + + public function plugin_settings_fields() { + + $args = apply_filters("gform_webapi_get_users_settings_page", array("number" => 200)); + + $accounts = get_users($args); + + $account_choices = array(); + foreach ($accounts as $account) { + $account_choices[] = array("label" => $account->user_login, "value" => $account->ID); + } + $permalink_structure = get_option('permalink_structure'); + if (!$permalink_structure) { + return array( + array( + "description" => __('The Gravity Forms API allows developers to interact with this install via a JSON REST API.', 'gravityforms'), + "fields" => array( + array( + "name" => "requirements_check", + "label" => __("Requirements check", "gravityforms"), + "type" => "requirements_check" + ) + ) + ) + ); + } + + + return array( + array( + "description" => __('The Gravity Forms API allows developers to interact with this install via a JSON REST API.', 'gravityforms'), + "fields" => array( + array( + "type" => "checkbox", + "label" => __("Enable access to the API", "gravityforms"), + "name" => "activate", + "onclick" => 'gfapiToggleSettings(jQuery(this).prop("checked"))', + "choices" => array( + array("label" => "Enabled", "name" => "enabled") + ) + ), + array( + "name" => "public_key", + "label" => __("Public API Key", "gravityforms"), + "type" => "text", + "default_value" => substr(wp_hash(site_url()), 0, 10), + "class" => "medium", + "feedback_callback" => array($this, "is_valid_public_key"), + ), + array( + "name" => "private_key", + "label" => __("Private API Key", "gravityforms"), + "type" => "text", + "default_value" => substr(wp_hash(get_bloginfo("admin_email")), 0, 15), + "class" => "medium", + "feedback_callback" => array($this, "is_valid_private_key") + ), + array( + "name" => "qrcode", + "label" => __("QR Code", "gravityforms"), + "type" => "qrcode", + "dependency" => array("field" => "private_key", "values" => array("_notempty_")) + ), + array( + "name" => "impersonate_account", + "label" => __("Impersonate account", "gravityforms"), + "type" => "select", + "choices" => $account_choices + ), + array( + "name" => "developer_tools", + "label" => __("Developer tools", "gravityforms"), + "type" => "developer_tools", + "dependency" => array("field" => "private_key", "values" => array("_notempty_")) + ) + ) + ) + ); + } + + public function settings_requirements_check() { + $permalinks_url = admin_url("options-permalink.php"); + echo " Permalinks are not in the correct format.
        Change the WordPress Permalink Settings from default to any of the other options to get started."; + } + + public function settings_qrcode() { + ?> + + + + + + + + + + + die_not_authorized(); + $account_id = $settings["impersonate_account"]; + wp_set_current_user($account_id); + + $route_parts = pathinfo($route); + + $format = rgar($route_parts, 'extension'); + if ($format) + $route = str_replace("." . $format, "", $route); + + $path_array = explode("/", $route); + $collection = strtolower(rgar($path_array, 0)); + + $id = rgar($path_array, 1); + + if (strpos($id, ";") !== false) + $id = explode(";", $id); + + $collection2 = strtolower(rgar($path_array, 2)); + $id2 = rgar($path_array, 3); + + if (strpos($id2, ";") !== false) + $id2 = explode(";", $id2); + else + $id2 = intval($id2); + + if (empty($format)) + $format = "json"; + + $schema = strtolower((rgget("schema"))); + $offset = isset($_GET["paging"]["offset"]) ? strtolower($_GET["paging"]["offset"]) : 0; + $page_size = isset($_GET["paging"]["page_size"]) ? strtolower($_GET["paging"]["page_size"]) : 10; + + $method = strtoupper($_SERVER['REQUEST_METHOD']); + $args = compact("offset", "page_size", "schema"); + if(empty($collection2)){ + do_action("gform_webapi_" . strtolower($method) . "_" . $collection, $id, $format, $args); + } else { + do_action("gform_webapi_" . strtolower($method) . "_" . $collection . "_" . $collection2, $id, $id2, $format, $args); + } + + $data = file_get_contents("php://input"); + $data = json_decode($data, true); + switch ($collection) { + case "forms" : + switch ($collection2) { + case "results" : + switch ($method) { + case 'GET' : + $this->get_results($id); + break; + case 'DELETE': + case 'PUT': + case 'POST': + default: + $this->die_bad_request(); + } + break; + case "feeds" : + if (false == empty($id2)) + $this->die_bad_request(); + switch ($method) { + case 'GET' : + $this->get_feeds(null, $id); + break; + case 'DELETE' : + $this->delete_feeds(null, $id); + break; + case 'PUT' : + $this->die_not_implemented(); + break; + case 'POST' : + $this->post_feeds($data, $id); + break; + default : + $this->die_bad_request(); + } + break; + case "entries" : + if (false == empty($id2)) + $this->die_bad_request(); + switch ($method) { + case 'GET' : + $this->get_entries(null, $id, $schema); + break; + case 'POST' : + $this->post_entries($data, $id); + break; + case 'PUT' : + case 'DELETE' : + case 'POST' : + $this->die_not_implemented(); + break; + default: + $this->die_bad_request(); + } + break; + + case "" : + switch ($method) { + case 'GET': + $this->get_forms($id, $schema); + break; + case 'DELETE': + $this->delete_forms($id); + break; + case 'PUT': + $this->put_forms($data, $id, $id2); + break; + case 'POST': + if (false === empty($id)) + $this->die_bad_request(); + $this->post_forms($data, $id); + break; + default: + $this->die_bad_request(); + } + break; + default : + $this->die_bad_request(); + break; + + } + break; + case "entries" : // route = /entries/{id} + switch ($method) { + case 'GET': + switch ($collection2) { + case "fields" : // route = /entries/{id}/fields/{id2} + switch ($method) { + case 'GET' : + $this->get_entries($id, null, $schema, $id2); + break; + case 'DELETE' : + case 'PUT' : + case 'POST' : + default: + $this->die_bad_request(); + } + break; + case "" : + $this->get_entries($id, null, $schema); + break; + } + + break; + case 'DELETE' : + $this->delete_entries($id); + break; + case 'PUT' : + $this->put_entries($data, $id); + break; + case 'POST' : + if (false === empty($id)) + $this->die_bad_request(); + $this->post_entries($data); + break; + default: + $this->die_bad_request(); + } + break; + case "feeds" : + switch ($method) { + case 'GET' : + $this->get_feeds($id); + break; + case 'DELETE' : + if (empty($id)) + $this->die_bad_request(); + $this->delete_feeds($id); + break; + case 'PUT' : + $this->put_feeds($data, $id); + break; + case 'POST' : + if (false === empty($id)) + $this->die_bad_request(); + $this->post_feeds($data); + break; + default : + $this->die_bad_request(); + } + break; + default : + $this->die_bad_request(); + break; + } + + + $this->die_bad_request(); + + } + + public function authorize($caps = array()) { + + if (GFCommon::current_user_can_any($caps)) { + + GFCommon::add_api_call(); + + return true; + } + + $this->die_permission_denied(); + } + + //----- Feeds ------ + + public function get_feeds($feed_ids, $form_id = null) { + + $this->authorize("gravityforms_edit_forms"); + + $addon_slug = rgget("addon"); + $output = GFAPI::get_feeds($feed_ids, $form_id, $addon_slug); + if (is_wp_error($output)) + $this->die_not_found(); + + $response = false === empty($feed_ids) && false === is_array($feed_ids) && is_array($output) ? array_shift($output) : ""; + + $this->end(200, $response); + + } + + + public function delete_feeds($feed_ids, $form_id = null) { + + self::authorize("gravityforms_edit_forms"); + + $count = 0; + if (empty($feed_ids)) { + $feeds = GFAPI::get_feeds(null, $form_id); + foreach ($feeds as $feed) { + $result = GFAPI::delete_feed($feed["id"]); + if (is_wp_error($result)) + break; + $count++; + } + } else { + if (is_array($feed_ids)) { + foreach ($feed_ids as $feed_id) { + $result = GFAPI::delete_feed($feed_id); + if (is_wp_error($result)) + break; + $count++; + } + } else { + $result = GFAPI::delete_feed($feed_ids); + $count++; + } + } + + if (isset($result) && is_wp_error($result)) { + $response = $this->get_error_response($result); + $status = $this->get_error_status($result); + } else { + $status = 200; + $response = sprintf(__("Feeds deleted successfully: %d", "gravityforms"), $count); + } + + $this->end($status, $response); + } + + public function put_feeds($feed_data, $feed_id = null) { + + self::authorize("gravityforms_edit_forms"); + + $count = 0; + $result = array(); + if (empty($feed_id)) { + foreach ($feed_data as $feed) { + //todo: validate feed id and form id + $result = GFAPI::update_feed($feed["id"], $feed["meta"], $feed["form_id"]); + if (is_wp_error($result)) + break; + $count++; + } + } else { + $result = GFAPI::update_feed($feed_id, $feed_data["meta"], $feed_data["form_id"]); + $count++; + } + + + if (isset($results) && is_wp_error($result)) { + $response = $this->get_error_response($result); + $status = $this->get_error_status($result); + } else { + $status = 200; + $response = sprintf(__("Feeds updated: %d", "gravityforms"), $count); + } + + $this->end($status, $response); + } + + public function post_feeds($feeds, $form_id = null) { + + $this->authorize("gravityforms_edit_forms"); + + $feed_ids = array(); + $result = array(); + foreach ($feeds as $feed) { + $addon_slug = isset($feed["addon_slug"]) ? $feed["addon_slug"] : rgget("addon"); + $f_id = empty($form_id) ? $feed["form_id"] : $form_id; + if (empty($f_id)) { + $result = new WP_Error("missing_form_id", __("Missing form id", "gravityforms")); + break; + } + $result = GFAPI::add_feed($f_id, $feed["meta"], $addon_slug); + if (is_wp_error($result)) + break; + $feed_ids[] = $result; + } + if (is_wp_error($result)) { + $response = $this->get_error_response($result); + $status = $this->get_error_status($result); + } else { + $status = 201; + $response = $feed_ids; + + } + + $this->end($status, $response); + } + + //----- Forms ------ + + public function delete_forms($form_ids) { + + $this->authorize("gravityforms_delete_forms"); + + $count = 0; + if (is_array($form_ids)) { + foreach ($form_ids as $form_id) { + $result = GFAPI::delete_form($form_id); + if (is_wp_error($result)) + break; + $count++; + } + } else { + $result = GFAPI::delete_form($form_ids); + $count++; + } + + if (isset($result) && is_wp_error($result)) { + $response = $this->get_error_response($result); + $status = $this->get_error_status($result); + } else { + $status = 200; + $response = sprintf(__("Forms deleted successfully: %d", "gravityforms"), $count); + + } + + $this->end($status, $response); + } + + public function post_entries($data, $form_id = null) { + + $this->authorize("gravityforms_edit_entries"); + + $result = GFAPI::add_entries($data, $form_id); + + if (is_wp_error($result)) { + $response = $this->get_error_response($result); + $status = $this->get_error_status($result); + } else { + $status = 201; + $response = $result; + } + + $this->end($status, $response); + } + + public function put_entries($data, $entry_id = null) { + + $this->authorize("gravityforms_edit_entries"); + + $result = empty($entry_id) ? GFAPI::update_entries($data) : $result = GFAPI::update_entry($data, $entry_id);; + + if (is_wp_error($result)) { + $response = $this->get_error_response($result); + $status = $this->get_error_status($result); + } else { + $status = 200; + $response = empty($entry_id) ? __("Entries updated successfully", "gravityforms") : __("Entry updated successfully", "gravityforms"); + } + + $this->end($status, $response); + } + + public function post_forms($data) { + + $this->authorize("gravityforms_create_form"); + + $form_ids = GFAPI::add_forms($data); + + if (is_wp_error($form_ids) || count($form_ids) == 0) { + $response = $this->get_error_response($form_ids); + $status = $this->get_error_status($form_ids); + } else { + $status = 201; + $response = $form_ids; + } + + $this->end($status, $response); + } + + public function put_forms($data, $form_id = null) { + + $this->authorize("gravityforms_create_form"); + + if (empty($form_id)) + $result = GFAPI::update_forms($data); + else + $result = GFAPI::update_form($data, $form_id); + + if (is_wp_error($result)) { + $response = $this->get_error_response($result); + $status = $this->get_error_status($result); + } else { + $status = 200; + $response = empty($form_id) ? __("Forms updated successfully", "gravityforms") : __("Form updated successfully", "gravityforms"); + } + + $this->end($status, $response); + } + + public function delete_entries($entry_ids) { + + $this->authorize("gravityforms_delete_entries"); + + $count = 0; + if (is_array($entry_ids)) { + foreach ($entry_ids as $entry_id) { + $result = GFAPI::delete_entry($entry_id); + if (is_wp_error($result)) + break; + $count++; + } + } else { + $result = GFAPI::delete_entry($entry_ids); + $count++; + } + + if (isset($result) && is_wp_error($result)) { + $response = $this->get_error_response($result); + $status = $this->get_error_status($result); + } else { + $status = 200; + $response = sprintf(__("Entries deleted successfully: %d", "gravityforms"), $count); + } + + $this->end($status, $response); + } + + public function get_entries($entry_ids, $form_ids = null, $schema = "", $field_ids = array()) { + + $this->authorize("gravityforms_view_entries"); + $status = 200; + $response = array(); + $result = array(); + if ($entry_ids) { + + if (is_array($entry_ids)) { + foreach ($entry_ids as $entry_id) { + $result = GFAPI::get_entry($entry_id); + if (!is_wp_error($result)) { + $response[$entry_id] = $result; + if (!empty($field_ids) && (!empty($response[$entry_id]))) + $response[$entry_id] = $this->filter_entry_object($response[$entry_id], $field_ids); + } + } + } else { + $result = GFAPI::get_entry($entry_ids); + if (!is_wp_error($result)) { + $response = $result; + if (!empty($field_ids) && (!empty($response))) + $response = $this->filter_entry_object($response, $field_ids); + } + + } + + if ($schema == "mtd") + $response = self::mtd_transform_entry_data($response); + + } else { + + //sorting parameters + $sort_key = isset($_GET["sorting"]["key"]) && !empty($_GET["sorting"]["key"]) ? $_GET["sorting"]["key"] : "id"; + $sort_dir = isset($_GET["sorting"]["direction"]) && !empty($_GET["sorting"]["direction"]) ? $_GET["sorting"]["direction"] : "DESC"; + $sorting = array('key' => $sort_key, 'direction' => $sort_dir); + + //paging parameters + $page_size = isset($_GET["paging"]["page_size"]) ? intval($_GET["paging"]["page_size"]) : 10; + if (isset($_GET["paging"]["current_page"])) { + $current_page = intval($_GET["paging"]["current_page"]); + $offset = $page_size * ($current_page - 1); + } else { + $offset = isset($_GET["paging"]["offset"]) ? intval($_GET["paging"]["offset"]) : 0; + } + + $paging = array('offset' => $offset, 'page_size' => $page_size); + + $search = isset($_GET["search"]) ? $_GET["search"] : array(); + if (empty($form_ids)) + $form_ids = 0; // all forms + + $entry_count = GFAPI::count_entries($form_ids, $search); + + $result = $entry_count > 0 ? GFAPI::get_entries($form_ids, $search, $sorting, $paging) : array(); + + if (!is_wp_error($result)) { + $response = array("total_count" => $entry_count, "entries" => $result); + + if ($schema == "mtd") + $response = $this->mtd_transform_entries_data($response, $form_ids); + } + + } + + if (is_wp_error($result)) { + $response = $this->get_error_response($result); + $status = $this->get_error_status($result); + } + + $this->end($status, $response); + } + + public static function filter_entry_object($entry, $field_ids) { + + if (!is_array($field_ids)) + $field_ids = array($field_ids); + $new_entry = array(); + foreach ($entry as $key => $val) { + if (in_array($key, $field_ids) || (is_numeric($key) && in_array(intval($key), $field_ids))) + $new_entry[$key] = $val; + } + + return $new_entry; + } + + public function get_forms($form_ids = null, $schema = "") { + + $this->authorize("gravityforms_edit_forms"); + $status = 200; + $response = array(); + if (empty($form_ids)) { + $forms = RGFormsModel::get_forms(true); + foreach ($forms as $form) { + $form_id = $form->id; + $totals = GFFormsModel::get_form_counts($form_id); + $form_info = array( + "id" => $form_id, + "title" => $form->title, + "entries" => rgar($totals, "total") + ); + $response[$form_id] = $form_info; + } + if ($schema == "mtd") + $response = $this->mtd_transform_forms_data($response); + } else { + if (is_array($form_ids)) { + foreach ($form_ids as $form_id) { + $response[$form_id] = GFAPI::get_form($form_id); + } + } else { + $result = GFAPI::get_form($form_ids); + if (is_wp_error($result)) { + $response = $this->get_error_response($result); + $status = $this->get_error_status($result); + } elseif (!$result) { + $this->die_not_found(); + } else { + $response = $result; + } + + } + + } + + $this->end($status, $response); + } + + + // RESULTS + // todo: move to GFAPI or GFResults once stable + + public function get_results_cache_key($form_id, $fields, $search_criteria) { + + $key = $this->get_results_cache_key_prefix($form_id); + $key .= wp_hash(json_encode($fields) . json_encode($search_criteria)); + + return $key; + } + + public function get_results_cache_key_prefix($form_id) { + global $blog_id; + + $key = is_multisite() ? $blog_id . '-' : ""; + + $key .= sprintf("%s-cache-%s-", $this->_slug, $form_id); + + // The option_name column in the options table has a max length of 64 chars. + // Truncate the key if it's too long for column and allow space for the "tmp" prefix + $key = substr($key, 0, 60); + + return $key; + } + + public function update_entry_status($lead_id) { + $lead = RGFormsModel::get_lead($lead_id); + $form_id = $lead["form_id"]; + $form = GFFormsModel::get_form_meta($form_id); + $this->maybe_update_results_cache_meta($form); + } + + public function entry_updated($form, $lead_id) { + $this->maybe_update_results_cache_meta($form); + } + + public function entry_created($entry, $form) { + $this->maybe_update_results_cache_meta($form); + } + + public function after_save_form($form, $is_new) { + if ($is_new) + return; + $form_id = $form["id"]; + + // only need cache meta when a cache exists + if (false === $this->results_cache_exists($form_id)) + return; + + $fields = rgar($form, "fields"); + $current_fields_hash = wp_hash(json_encode($fields)); + + $cache_meta = $this->get_results_cache_meta($form_id); + $cached_fields_hash = rgar($cache_meta, "fields_hash"); + + if ($current_fields_hash !== $cached_fields_hash) { + // delete the meta for this form + $this->delete_results_cache_meta($form_id); + // delete all cached results for this form + $this->delete_cached_results($form_id); + } + } + + public function results_cache_exists($form_id) { + global $wpdb; + + $key = $this->get_results_cache_key_prefix($form_id); + + $key = "%" . like_escape($key) . "%"; + + $sql = $wpdb->prepare("SELECT count(option_id) FROM $wpdb->options WHERE option_name LIKE %s", $key); + + $result = $wpdb->get_var($sql); + + return $result > 0; + + } + + public function delete_cached_results($form_id) { + global $wpdb; + + $form = GFAPI::get_form($form_id); + if (!($form) || !is_array($form)) + return; + + $key = $this->get_results_cache_key_prefix($form_id); + + $key = "%" . like_escape($key) . "%"; + + $sql = $wpdb->prepare("DELETE FROM $wpdb->options WHERE option_name LIKE %s", $key); + + $result = $wpdb->query($sql); + + return $result; + } + + // When entries are added or updated the cache needs to be expired and rebuilt. + // This cache meta records the last updated time for each form and a hash of the fields array. + // Each time results are requested this value is checked to make sure the cache is still valid. + public function maybe_update_results_cache_meta($form) { + $form_id = $form["id"]; + + // only need to expire the cache when a cache already exists + if (false === $this->results_cache_exists($form_id)) + return; + + $this->update_results_cache_meta($form_id, rgar($form, "fields")); + } + + public function update_results_cache_meta($form_id, $fields, $expiry = null) { + + if (empty($expiry)) + $expiry = time(); + + $data = array( + "fields_hash" => wp_hash(json_encode($fields)), + "timestamp" => $expiry + ); + + $key = $this->get_results_cache_meta_key($form_id); + + $this->update_results_cache($key, $data); + + } + + public function delete_results_cache_meta($form_id) { + + $key = $this->get_results_cache_meta_key($form_id); + + delete_option($key); + + } + + public function get_results_cache_meta_key($form_id) { + global $blog_id; + + $key = is_multisite() ? $blog_id . '-' : ""; + $key .= "gfresults-cache-meta-form-" . $form_id; + + return $key; + } + + public function get_results_cache_meta($form_id) { + + $key = $this->get_results_cache_meta_key($form_id); + $cache_meta = get_option($key); + + return $cache_meta; + } + + public function update_results_cache($key, $data) { + + delete_option($key); + + $result = add_option($key, $data, '', 'no'); + + return $result; + } + + // Recursive wp_cron task to continue the calculation of results + public function results_cron($form, $fields, $search_criteria) { + + $form_id = $form["id"]; + $key = $this->get_results_cache_key($form_id, $fields, $search_criteria); + $key_tmp = "tmp" . $key; + $state = get_option($key_tmp, array()); + + if (!empty($state)) { + if (!class_exists("GFResults")) + require_once(GFCommon::get_base_path() . "/includes/addon/class-gf-results.php"); + $gf_results = new GFResults($this->_slug, array()); + $results = $gf_results->get_results_data($form, $fields, $search_criteria, $state); + if ("complete" == $results["status"]) { + if (isset($results["progress"])) + unset($results["progress"]); + $this->update_results_cache($key, $results); + if (false == empty($state)) + delete_option($key_tmp); + + } else { + $this->update_results_cache($key_tmp, $results); + + $data = get_option($key); + if ($data) { + $data["progress"] = $results["progress"]; + $this->update_results_cache($key, $data); + } + + $this->schedule_results_cron($form, $fields, $search_criteria); + } + } + } + + // Returns an array with the results for all the fields in the form. + // If the results can be calculated within the time allowed in GFResults then the results are returned and nothing is cached. + // If the calculation has not finished then a single recursive wp_cron task will be scheduled for immediate execution. + // While the cache is being built by the wp_cron task this function will return the expired cache results if available or the latest step in the cache build. + // Add-On-specific results are not included e.g. grade frequencies in the Quiz Add-On. + public function get_results($form_id) { + + $this->authorize("gravityforms_view_entries"); + + $s = rgget("s"); // search criteria + + $search_criteria = false === empty($s) && is_array($s) ? $s : array(); + + $form = GFAPI::get_form($form_id); + + if (!$form) + self::die_not_found(); + + // for the Web API return all fields + $fields = rgar($form, "fields"); + + $form_id = $form["id"]; + $key = $this->get_results_cache_key($form_id, $fields, $search_criteria); + $key_tmp = "tmp" . $key; + + $data = get_option($key, array()); + + $cache_meta = $this->get_results_cache_meta($form_id); + + // add the cache meta early so form editor updates can test for valid field hash + if (empty($cache_meta)) + $this->update_results_cache_meta($form_id, $fields, 0); + + $cache_expiry = rgar($cache_meta, "timestamp"); + $cache_timestamp = isset($data["timestamp"]) ? $data["timestamp"] : 0; + $cache_expired = $cache_expiry ? $cache_expiry > $cache_timestamp : false; + + // check for valid cached results first + if (!empty($data) && "complete" == rgar($data, "status") && !$cache_expired) { + $results = $data; + $status = 200; + if (isset($results["progress"])) + unset($results["progress"]); + } else { + + $state = get_option($key_tmp); + + if (empty($state) || ("complete" == rgar($data, "status") && $cache_expired)) { + if (!class_exists("GFResults")) + require_once(GFCommon::get_base_path() . "/includes/addon/class-gf-results.php"); + $gf_results = new GFResults($this->_slug, array()); + $max_execution_time = 5; + $results = $gf_results->get_results_data($form, $fields, $search_criteria, $state, $max_execution_time); + if ("complete" == $results["status"]) { + $status = 200; + if (false == empty($state)) + delete_option($key_tmp); + } else { + + if (false === empty($data) && "complete" == rgar($data, "status") && $cache_expired) { + $data["status"] = "expired"; + $data["progress"] = $results["progress"]; + $this->update_results_cache($key, $data); + } + + $this->update_results_cache($key_tmp, $results); + + $this->schedule_results_cron($form, $fields, $search_criteria); + + if ($data) + $results = $data; + + $status = 202; + } + } else { + + // The cron task is recursive, not periodic, so system restarts, script timeouts and memory issues can prevent the cron from restarting. + // Check timestamp and kick off the cron again if it appears to have stopped + $state_timestamp = rgar($state, "timestamp"); + $state_age = time() - $state_timestamp; + if ($state_age > 180 && !$this->results_cron_is_scheduled($form, $fields, $search_criteria)) { + $this->schedule_results_cron($form, $fields, $search_criteria); + } + + if (false === empty($data) && "expired" == rgar($data, "status")) + $results = $data; + else + $results = $state; + $status = 202; + } + } + + $fields = $results["field_data"]; + + // add choice labels to the results so the client doesn't need to cross-reference with the form object + $results["field_data"] = $this->results_data_add_labels($form, $fields); + + $this->end($status, $results); + } + + public function schedule_results_cron($form, $fields, $search_criteria, $delay_in_seconds = 10) { + // reduces problems with concurrency + wp_cache_delete('alloptions', 'options'); + + $args = array($form, $fields, $search_criteria); + + wp_schedule_single_event(time() + $delay_in_seconds, $this->get_results_cron_hook(), $args); + } + + public function results_cron_is_scheduled($form, $fields, $search_criteria) { + $args = array($form, $fields, $search_criteria); + + return wp_next_scheduled($this->get_results_cron_hook(), $args); + } + + public function get_results_cron_hook() { + return 'gravityforms_results_cron_' . $this->_slug; + } + + public function results_data_add_labels($form, $fields) { + + // replace the values/ids with text labels + foreach ($fields as $field_id => $choice_counts) { + $field = GFFormsModel::get_field($form, $field_id); + $type = GFFormsModel::get_input_type($field); + if (is_array($choice_counts)) { + $i = 0; + foreach ($choice_counts as $choice_value => $choice_count) { + if (class_exists("GFSurvey") && "likert" == $type && rgar($field, "gsurveyLikertEnableMultipleRows")) { + $row_text = GFSurvey::get_likert_row_text($field, $i++); + $counts_for_row = array(); + foreach ($choice_count as $col_val => $col_count) { + $text = GFSurvey::get_likert_column_text($field, $choice_value . ":" . $col_val); + $counts_for_row[$col_val] = array("text" => $text, "data" => $col_count); + } + $counts_for_row[$choice_value]["data"] = $counts_for_row; + $fields[$field_id][$choice_value] = array("text" => $row_text, "value" => "$choice_value", "count" => $counts_for_row); + + } else { + $text = GFFormsModel::get_choice_text($field, $choice_value); + $fields[$field_id][$choice_value] = array("text" => $text, "value" => "$choice_value", "count" => $choice_count); + } + + } + } + + } + + return $fields; + } + + // ----- end RESULTS + + + private function authenticate() { + $authenticated = false; + if (isset($_GET["api_key"])) { + if (rgget("api_key") == $this->_public_key) { + if (self::check_signature()) + $authenticated = true; + } + } + + if ($authenticated) + return true; + + $this->die_not_authorized(); + } + + private function check_signature() { + if (false === GFWEBAPI_REQUIRE_SIGNATURE) + return true; + + $expires = (int)rgget("expires"); + + $api_key = rgget("api_key"); + $path = strtolower(get_query_var(GFWEBAPI_ROUTE_VAR)); + $method = strtoupper($_SERVER['REQUEST_METHOD']); + + $signature = rgget("signature"); + + $string_to_check = sprintf("%s:%s:%s:%s", $api_key, $method, $path, $expires); + + $calculated_sig = $this->calculate_signature($string_to_check); + + if (time() >= $expires) + return false; + + $is_valid = $signature == $calculated_sig; + + return $is_valid; + } + + private function calculate_signature($string) { + $hash = hash_hmac("sha1", $string, $this->_private_key, true); + $sig = base64_encode($hash); + + return $sig; + } + + public static function end($status, $response) { + $output["status"] = $status; + $output["response"] = $response; + + // PHP > 5.3 + if (function_exists("header_remove")) + header_remove("X-Pingback"); + + + header('Content-Type: application/json; charset=' . get_option('blog_charset'), true); + $output_json = json_encode($output); + + echo $output_json; + die(); + } + + public function die_not_authorized() { + $this->end(401, __("Not authorized", "gravityforms")); + } + + public function die_permission_denied() { + $this->end(401, __("Permission denied", "gravityforms")); + } + + public function die_bad_request() { + $this->end(400, __("Bad request", "gravityforms")); + } + + public function die_not_found() { + $this->end(404, __("Not found", "gravityforms")); + } + + public function die_not_implemented() { + $this->end(501, __("Not implemented", "gravityforms")); + } + + public function die_error() { + $this->end(500, __("Internal Error", "gravityforms")); + } + + public function get_error_response($wp_error) { + $response["code"] = $wp_error->get_error_code(); + $response["message"] = $wp_error->get_error_message(); + $data = $wp_error->get_error_data(); + if ($data) + $output["data"] = $data; + + return $response; + } + + public function get_error_status($wp_error) { + $error_code = $wp_error->get_error_code(); + $mappings = array( + "not_found" => 404, + "not_allowed" => 401 + ); + $http_code = isset($mappings[$error_code]) ? $mappings[$error_code] : 400; + + return $http_code; + } + + public static function get_form_metas() { + $form_ids = array(); + $forms = RGFormsModel::get_forms(true); + foreach ($forms as $form) { + $form_ids[] = $form->id; + } + $form_metas = GFFormsModel::get_form_meta_by_id($form_ids); + + return $form_metas; + } + + public static function ajax_qrcode() { + require_once GFCommon::get_base_path() . "/includes/phpqrcode/phpqrcode.php"; + $settings = get_option("gravityformsaddon_gravityformswebapi_settings"); + if (empty($settings)) + die(); + + $data["site"] = site_url(); + $data["public_key"] = rgar($settings, "public_key"); + $data["private_key"] = rgar($settings, "private_key"); + + QRcode::png(json_encode($data), false, QR_ECLEVEL_L, 4, 1, false); + die(); + } + + /** + * Support for MonoTouch.Dialog + */ + // todo: support array of form ids + public function mtd_transform_entries_data($output, $form_id) { + $form = GFFormsModel::get_form_meta($form_id); + $form_element = array(); + $form_element["title"] = $form["title"]; + $form_element["type"] = "root"; + $form_element["id"] = "id-form-" . $form_id; + $form_element["count"] = rgar($output, "total_count"); + $entries = rgar($output, "entries"); + + $section["header"] = "Entries"; + $entry_elements = array(); + if (is_array($entries)) { + foreach ($entries as $entry) { + $entry_element["type"] = "root"; + $entry_element["title"] = $entry["id"] . ": " . $entry["date_created"]; + $entry_element["id"] = $entry["id"]; + $entry_element["url"] = GFWEBAPI_API_BASE_URL . "/entries/" . rgar($entry, "id") . "?schema=mtd"; + $entry_elements[] = $entry_element; + } + } + + $section["elements"] = $entry_elements; + $form_element["sections"][] = $section; + + return $form_element; + } + + public function mtd_transform_forms_data($forms) { + $data = array(); + $data["title"] = "Forms"; + $data["type"] = "root"; + $data["id"] = "forms"; + + foreach ($forms as $form) { + $element = array(); + $element["title"] = $form["title"]; + $element["type"] = "root"; + $element["id"] = "id-form-" . $form["id"]; + $element["url"] = GFWEBAPI_API_BASE_URL . "/forms/" . $form["id"] . "/entries.json?schema=mtd"; + $section = array(); + $section["elements"][] = $element; + $data["sections"][] = $section; + } + + return $data; + } + + public static function mtd_transform_entry_data($entry) { + $data = array(); + $root_element["type"] = "root"; + $root_element["title"] = $entry["id"] . ": " . $entry["date_created"]; + $root_element["id"] = "id-entry-" . $entry["id"]; + + $form_id = rgar($entry, "form_id"); + $form = RGFormsModel::get_form_meta($form_id); + $fields = $form["fields"]; + + foreach ($fields as $field) { + $field_data = array(); + $field_data["header"] = $field["label"]; + $elements = array(); + $value = RGFormsModel::get_lead_field_value($entry, $field); + + if (is_array($value) && isset($field["choices"])) { + $choices = rgar($field, "choices"); + + foreach ($choices as $choice) { + $found = false; + foreach ($value as $item) { + if ($item == rgar($choice, "value")) { + $found = true; + break; + } + } + $element = array(); + + $element["type"] = "checkbox"; + $element["caption"] = $choice["text"]; + $element["value"] = $found; + $elements[] = $element; + } + } else { + $element = array(); + $element["type"] = "string"; + $element["caption"] = GFFormsModel::get_choice_text($field, $value); + + $elements[] = $element; + } + $field_data["elements"] = $elements; + $data[] = $field_data; + } + $root_element["sections"] = $data; + + return $root_element; + } + + } + + new GFWebAPI(); +} diff --git a/src/wp-content/plugins/gravityforms/js.php b/src/wp-content/plugins/gravityforms/js.php new file mode 100644 index 0000000..a66c589 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js.php @@ -0,0 +1,906 @@ + + + + + \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/js/chosen.jquery.min.js b/src/wp-content/plugins/gravityforms/js/chosen.jquery.min.js new file mode 100644 index 0000000..1215390 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/chosen.jquery.min.js @@ -0,0 +1,10 @@ +// Chosen, a Select Box Enhancer for jQuery and Protoype +// by Patrick Filler for Harvest, http://getharvest.com +// +// Version 0.9.12 +// Full source at https://github.com/harvesthq/chosen +// Copyright (c) 2011 Harvest http://getharvest.com + +// MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +// This file is generated by `cake build`, do not edit it by hand. +(function(){var e;e=function(){function e(){this.options_index=0,this.parsed=[]}return e.prototype.add_node=function(e){return e.nodeName.toUpperCase()==="OPTGROUP"?this.add_group(e):this.add_option(e)},e.prototype.add_group=function(e){var t,n,r,i,s,o;t=this.parsed.length,this.parsed.push({array_index:t,group:!0,label:e.label,children:0,disabled:e.disabled}),s=e.childNodes,o=[];for(r=0,i=s.length;r"+e.html+"")},e.prototype.results_update_field=function(){return this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.result_single_selected=null,this.results_build()},e.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},e.prototype.results_search=function(e){return this.results_showing?this.winnow_results():this.results_show()},e.prototype.keyup_checker=function(e){var t,n;t=(n=e.which)!=null?n:e.keyCode,this.search_field_scale();switch(t){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:e.preventDefault();if(this.results_showing)return this.result_select(e);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},e.prototype.generate_field_id=function(){var e;return e=this.generate_random_id(),this.form_field.id=e,e},e.prototype.generate_random_char=function(){var e,t,n;return e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",n=Math.floor(Math.random()*e.length),t=e.substring(n,n+1)},e}(),t.AbstractChosen=e}.call(this),function(){var e,t,n,r,i={}.hasOwnProperty,s=function(e,t){function r(){this.constructor=e}for(var n in t)i.call(t,n)&&(e[n]=t[n]);return r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype,e};r=this,e=jQuery,e.fn.extend({chosen:function(n){var r,i,s;return s=navigator.userAgent.toLowerCase(),i=/(msie) ([\w.]+)/.exec(s)||[],r={name:i[1]||"",version:i[2]||"0"},r.name==="msie"&&(r.version==="6.0"||r.version==="7.0"&&document.documentMode===7)?this:this.each(function(r){var i;i=e(this);if(!i.hasClass("chzn-done"))return i.data("chosen",new t(this,n))})}}),t=function(t){function i(){return i.__super__.constructor.apply(this,arguments)}return s(i,t),i.prototype.setup=function(){return this.form_field_jq=e(this.form_field),this.current_value=this.form_field_jq.val(),this.is_rtl=this.form_field_jq.hasClass("chzn-rtl")},i.prototype.finish_setup=function(){return this.form_field_jq.addClass("chzn-done")},i.prototype.set_up_html=function(){var t,r,i,s,o,u;return this.container_id=this.form_field.id.length?this.form_field.id.replace(/[^\w]/g,"_"):this.generate_field_id(),this.container_id+="_chzn",t=["chzn-container"],t.push("chzn-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&t.push(this.form_field.className),this.is_rtl&&t.push("chzn-rtl"),this.f_width=this.form_field_jq.outerWidth(),i={id:this.container_id,"class":t.join(" "),style:"width: "+this.f_width+"px;",title:this.form_field.title},r=e("
        ",i),this.is_multiple?r.html('
          '):r.html(''+this.default_text+'
            '),this.form_field_jq.hide().after(r),this.container=e("#"+this.container_id),this.dropdown=this.container.find("div.chzn-drop").first(),s=this.container.height(),o=this.f_width-n(this.dropdown),this.dropdown.css({width:o+"px",top:s+"px"}),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chzn-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chzn-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chzn-search").first(),this.selected_item=this.container.find(".chzn-single").first(),u=o-n(this.search_container)-n(this.search_field),this.search_field.css({width:u+"px"})),this.results_build(),this.set_tab_index(),this.form_field_jq.trigger("liszt:ready",{chosen:this})},i.prototype.register_observers=function(){var e=this;return this.container.mousedown(function(t){return e.container_mousedown(t)}),this.container.mouseup(function(t){return e.container_mouseup(t)}),this.container.mouseenter(function(t){return e.mouse_enter(t)}),this.container.mouseleave(function(t){return e.mouse_leave(t)}),this.search_results.mouseup(function(t){return e.search_results_mouseup(t)}),this.search_results.mouseover(function(t){return e.search_results_mouseover(t)}),this.search_results.mouseout(function(t){return e.search_results_mouseout(t)}),this.form_field_jq.bind("liszt:updated",function(t){return e.results_update_field(t)}),this.form_field_jq.bind("liszt:activate",function(t){return e.activate_field(t)}),this.form_field_jq.bind("liszt:open",function(t){return e.container_mousedown(t)}),this.search_field.blur(function(t){return e.input_blur(t)}),this.search_field.keyup(function(t){return e.keyup_checker(t)}),this.search_field.keydown(function(t){return e.keydown_checker(t)}),this.search_field.focus(function(t){return e.input_focus(t)}),this.is_multiple?this.search_choices.click(function(t){return e.choices_click(t)}):this.container.click(function(e){return e.preventDefault()})},i.prototype.search_field_disabled=function(){this.is_disabled=this.form_field_jq[0].disabled;if(this.is_disabled)return this.container.addClass("chzn-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus",this.activate_action),this.close_field();this.container.removeClass("chzn-disabled"),this.search_field[0].disabled=!1;if(!this.is_multiple)return this.selected_item.bind("focus",this.activate_action)},i.prototype.container_mousedown=function(t){var n;if(!this.is_disabled)return n=t!=null?e(t.target).hasClass("search-choice-close"):!1,t&&t.type==="mousedown"&&!this.results_showing&&t.preventDefault(),!this.pending_destroy_click&&!n?(this.active_field?!this.is_multiple&&t&&(e(t.target)[0]===this.selected_item[0]||e(t.target).parents("a.chzn-single").length)&&(t.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),e(document).click(this.click_test_action),this.results_show()),this.activate_field()):this.pending_destroy_click=!1},i.prototype.container_mouseup=function(e){if(e.target.nodeName==="ABBR"&&!this.is_disabled)return this.results_reset(e)},i.prototype.blur_test=function(e){if(!this.active_field&&this.container.hasClass("chzn-container-active"))return this.close_field()},i.prototype.close_field=function(){return e(document).unbind("click",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},i.prototype.activate_field=function(){return this.container.addClass("chzn-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},i.prototype.test_active_click=function(t){return e(t.target).parents("#"+this.container_id).length?this.active_field=!0:this.close_field()},i.prototype.results_build=function(){var e,t,n,i,s;this.parsing=!0,this.results_data=r.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.find("li.search-choice").remove(),this.choices=0):this.is_multiple||(this.selected_item.addClass("chzn-default").find("span").text(this.default_text),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?this.container.addClass("chzn-container-single-nosearch"):this.container.removeClass("chzn-container-single-nosearch")),e="",s=this.results_data;for(n=0,i=s.length;n'+e("
            ").text(t.label).html()+"")},i.prototype.result_do_highlight=function(e){var t,n,r,i,s;if(e.length){this.result_clear_highlight(),this.result_highlight=e,this.result_highlight.addClass("highlighted"),r=parseInt(this.search_results.css("maxHeight"),10),s=this.search_results.scrollTop(),i=r+s,n=this.result_highlight.position().top+this.search_results.scrollTop(),t=n+this.result_highlight.outerHeight();if(t>=i)return this.search_results.scrollTop(t-r>0?t-r:0);if(n'+t.html+"":r='
          • '+t.html+'
          • ',this.search_container.before(r),i=e("#"+n).find("a").first(),i.click(function(e){return s.choice_destroy_link_click(e)}))},i.prototype.choice_destroy_link_click=function(t){return t.preventDefault(),this.is_disabled?t.stopPropagation:(this.pending_destroy_click=!0,this.choice_destroy(e(t.target)))},i.prototype.choice_destroy=function(e){if(this.result_deselect(e.attr("rel")))return this.choices-=1,this.show_search_field_default(),this.is_multiple&&this.choices>0&&this.search_field.val().length<1&&this.results_hide(),e.parents("li").first().remove(),this.search_field_scale()},i.prototype.results_reset=function(){this.form_field.options[0].selected=!0,this.selected_item.find("span").text(this.default_text),this.is_multiple||this.selected_item.addClass("chzn-default"),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change");if(this.active_field)return this.results_hide()},i.prototype.results_reset_cleanup=function(){return this.current_value=this.form_field_jq.val(),this.selected_item.find("abbr").remove()},i.prototype.result_select=function(e){var t,n,r,i;if(this.result_highlight)return t=this.result_highlight,n=t.attr("id"),this.result_clear_highlight(),this.is_multiple?this.result_deactivate(t):(this.search_results.find(".result-selected").removeClass("result-selected"),this.result_single_selected=t,this.selected_item.removeClass("chzn-default")),t.addClass("result-selected"),i=n.substr(n.lastIndexOf("_")+1),r=this.results_data[i],r.selected=!0,this.form_field.options[r.options_index].selected=!0,this.is_multiple?this.choice_build(r):(this.selected_item.find("span").first().text(r.text),this.allow_single_deselect&&this.single_deselect_control_build()),(!e.metaKey&&!e.ctrlKey||!this.is_multiple)&&this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field_jq.val()!==this.current_value)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[r.options_index].value}),this.current_value=this.form_field_jq.val(),this.search_field_scale()},i.prototype.result_activate=function(e){return e.addClass("active-result")},i.prototype.result_deactivate=function(e){return e.removeClass("active-result")},i.prototype.result_deselect=function(t){var n,r;return r=this.results_data[t],this.form_field.options[r.options_index].disabled?!1:(r.selected=!1,this.form_field.options[r.options_index].selected=!1,n=e("#"+this.container_id+"_o_"+t),n.removeClass("result-selected").addClass("active-result").show(),this.result_clear_highlight(),this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[r.options_index].value}),this.search_field_scale(),!0)},i.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&this.selected_item.find("abbr").length<1)return this.selected_item.find("span").first().after('')},i.prototype.winnow_results=function(){var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y;this.no_results_clear(),f=0,l=this.search_field.val()===this.default_text?"":e("
            ").text(e.trim(this.search_field.val())).html(),o=this.search_contains?"":"^",s=new RegExp(o+l.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),p=new RegExp(l.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),y=this.results_data;for(d=0,m=y.length;d=0||n.html.indexOf("[")===0)){i=n.html.replace(/\[|\]/g,"").split(" ");if(i.length)for(v=0,g=i.length;v"+n.html.substr(c+l.length),h=h.substr(0,c)+""+h.substr(c)):h=n.html,u.html(h),this.result_activate(u),n.group_array_index!=null&&e("#"+this.results_data[n.group_array_index].dom_id).css("display","list-item")):(this.result_highlight&&a===this.result_highlight.attr("id")&&this.result_clear_highlight(),this.result_deactivate(u))}}return f<1&&l.length?this.no_results(l):this.winnow_results_set_highlight()},i.prototype.winnow_results_clear=function(){var t,n,r,i,s;this.search_field.val(""),n=this.search_results.find("li"),s=[];for(r=0,i=n.length;r'+this.results_none_found+' ""'),n.find("span").first().html(t),this.search_results.append(n)},i.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},i.prototype.keydown_arrow=function(){var t,n;this.result_highlight?this.results_showing&&(n=this.result_highlight.nextAll("li.active-result").first(),n&&this.result_do_highlight(n)):(t=this.search_results.find("li.active-result").first(),t&&this.result_do_highlight(e(t)));if(!this.results_showing)return this.results_show()},i.prototype.keyup_arrow=function(){var e;if(!this.results_showing&&!this.is_multiple)return this.results_show();if(this.result_highlight)return e=this.result_highlight.prevAll("li.active-result"),e.length?this.result_do_highlight(e.first()):(this.choices>0&&this.results_hide(),this.result_clear_highlight())},i.prototype.keydown_backstroke=function(){var e;if(this.pending_backstroke)return this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke();e=this.search_container.siblings("li.search-choice").last();if(e.length&&!e.hasClass("search-choice-disabled"))return this.pending_backstroke=e,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")},i.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},i.prototype.keydown_checker=function(e){var t,n;t=(n=e.which)!=null?n:e.keyCode,this.search_field_scale(),t!==8&&this.pending_backstroke&&this.clear_backstroke();switch(t){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(e),this.mouse_on_container=!1;break;case 13:e.preventDefault();break;case 38:e.preventDefault(),this.keyup_arrow();break;case 40:this.keydown_arrow()}},i.prototype.search_field_scale=function(){var t,n,r,i,s,o,u,a,f;if(this.is_multiple){r=0,u=0,s="position:absolute; left: -1000px; top: -1000px; display:none;",o=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(a=0,f=o.length;a",{style:s}),n.text(this.search_field.val()),e("body").append(n),u=n.width()+25,n.remove(),u>this.f_width-10&&(u=this.f_width-10),this.search_field.css({width:u+"px"}),t=this.container.height(),this.dropdown.css({top:t+"px"})}},i.prototype.generate_random_id=function(){var t;t="sel"+this.generate_random_char()+this.generate_random_char()+this.generate_random_char();while(e("#"+t).length>0)t+=this.generate_random_char();return t},i}(AbstractChosen),r.Chosen=t,n=function(e){var t;return t=e.outerWidth()-e.width()},r.get_side_border_padding=n}.call(this); \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/js/conditional_logic.js b/src/wp-content/plugins/gravityforms/js/conditional_logic.js new file mode 100644 index 0000000..c5b8062 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/conditional_logic.js @@ -0,0 +1,330 @@ + +var __gf_timeout_handle; + +function gf_apply_rules(formId, fields, isInit){ + var rule_applied = 0; + for(var i=0; i < fields.length; i++){ + gf_apply_field_rule(formId, fields[i], isInit, function(){ + rule_applied++; + if(rule_applied == fields.length){ + jQuery(document).trigger('gform_post_conditional_logic', [formId, fields, isInit]); + if(window["gformCalculateTotalPrice"]) + window["gformCalculateTotalPrice"](formId); + } + }); + } +} + +function gf_check_field_rule(formId, fieldId, isInit, callback){ + + //if conditional logic is not specified for that field, it is supposed to be displayed + if(!window["gf_form_conditional_logic"] || !window["gf_form_conditional_logic"][formId] || !window["gf_form_conditional_logic"][formId]["logic"][fieldId]) + return "show"; + + var conditionalLogic = window["gf_form_conditional_logic"][formId]["logic"][fieldId]; + var action = gf_get_field_action(formId, conditionalLogic["section"]); + + //If section is hidden, always hide field. If section is displayed, see if field is supposed to be displayed or hidden + if(action != "hide") + action = gf_get_field_action(formId, conditionalLogic["field"]); + + return action; +} + +function gf_apply_field_rule(formId, fieldId, isInit, callback){ + + var action = gf_check_field_rule(formId, fieldId, isInit, callback); + + gf_do_field_action(formId, action, fieldId, isInit, callback); + + var conditionalLogic = window["gf_form_conditional_logic"][formId]["logic"][fieldId]; + //perform conditional logic for the next button + if(conditionalLogic["nextButton"]){ + action = gf_get_field_action(formId, conditionalLogic["nextButton"]); + gf_do_next_button_action(formId, action, fieldId, isInit); + } + +} + +function gf_get_field_action(formId, conditionalLogic){ + if(!conditionalLogic) + return "show"; + + var matches = 0; + for(var i = 0; i < conditionalLogic["rules"].length; i++){ + var rule = conditionalLogic["rules"][i]; + if(gf_is_match(formId, rule)) + matches++; + } + + var action; + if( (conditionalLogic["logicType"] == "all" && matches == conditionalLogic["rules"].length) || (conditionalLogic["logicType"] == "any" && matches > 0) ) + action = conditionalLogic["actionType"]; + else + action = conditionalLogic["actionType"] == "show" ? "hide" : "show"; + + return action; +} + +function gf_is_match(formId, rule){ + + var isMatch = false; + var inputs = jQuery("#input_" + formId + "_" + rule["fieldId"] + " input"); + var fieldValue; + if(inputs.length > 0){ + //handling checkboxes/radio + + for(var i=0; i< inputs.length; i++){ + fieldValue = gf_get_value(jQuery(inputs[i]).val()); + + //find specific checkbox/radio item. Skip if this is not the specific item and the operator is not one that targets a range of values (i.e. greater than and less than) + var isRangeOperator = jQuery.inArray(rule["operator"], ["<", ">", "contains", "starts_with", "ends_with"]) >= 0; + if(fieldValue != rule["value"] && !isRangeOperator) + continue; + + //blank value if item isn't checked + if(!jQuery(inputs[i]).is(":checked")) + fieldValue = ""; + + if(gf_matches_operation(fieldValue, rule["value"], rule["operator"])) + isMatch = true; + } + } + else{ + //handling all other fields (non-checkboxes) + var val = jQuery("#input_" + formId + "_" + rule["fieldId"]).val(); + + //transform regular value into array to support multi-select (which returns an array of selected items) + var values = (val instanceof Array) ? val : [val]; + + var matchCount = 0; + + var isCurrencyFormat = window['gf_global'] && gf_global.number_formats && gf_global.number_formats[formId] && gf_global.number_formats[formId][rule["fieldId"]] == 'currency'; + + for(var i=0; i < values.length; i++){ + fieldValue = gf_get_value(values[i]); + if(isCurrencyFormat){ + var decimalSeparator = gformGetDecimalSeparator('currency'); + fieldValue = gformCleanNumber( fieldValue, '', '', decimalSeparator); + if( ! fieldValue ) + fieldValue = 0; + fieldValue = fieldValue.toString(); + } + + if(gf_matches_operation(fieldValue, rule["value"], rule["operator"])){ + matchCount++; + } + } + //If operator is Is Not, none of the value can match + isMatch = rule["operator"] == "isnot" ? matchCount == values.length : matchCount > 0; + } + + return gform.applyFilters( 'gform_is_value_match', isMatch, formId, rule ); +} + +function gf_try_convert_float(text){ + var format = window["gf_number_format"] == "decimal_comma" ? "decimal_comma" : "decimal_dot"; + + if(gformIsNumeric(text, format)){ + var decimal_separator = format == "decimal_comma" ? "," : "."; + return gformCleanNumber(text, "", "", decimal_separator); + } + + return text; +} + +function gf_matches_operation(val1, val2, operation){ + val1 = val1 ? val1.toLowerCase() : ""; + val2 = val2 ? val2.toLowerCase() : ""; + + switch(operation){ + case "is" : + return val1 == val2; + break; + + case "isnot" : + return val1 != val2; + break; + + case ">" : + val1 = gf_try_convert_float(val1); + val2 = gf_try_convert_float(val2); + + return val1 > val2; + break; + + case "<" : + val1 = gf_try_convert_float(val1); + val2 = gf_try_convert_float(val2); + + return val1 < val2; + break; + + case "contains" : + return val1.indexOf(val2) >=0; + break; + + case "starts_with" : + return val1.indexOf(val2) ==0; + break; + + case "ends_with" : + var start = val1.length - val2.length; + if(start < 0) + return false; + + var tail = val1.substring(start); + return val2 == tail; + break; + } + return false; +} + +function gf_get_value(val){ + if(!val) + return ""; + + val = val.split("|"); + return val[0]; +} + +function gf_do_field_action(formId, action, fieldId, isInit, callback){ + var conditional_logic = window["gf_form_conditional_logic"][formId]; + var dependent_fields = conditional_logic["dependents"][fieldId]; + + for(var i=0; i < dependent_fields.length; i++){ + var targetId = fieldId == 0 ? "#gform_submit_button_" + formId : "#field_" + formId + "_" + dependent_fields[i]; + + //calling callback function on the last dependent field, to make sure it is only called once + do_callback = (i+1) == dependent_fields.length ? callback : null; + + gf_do_action(action, targetId, conditional_logic["animation"], conditional_logic["defaults"][dependent_fields[i]], isInit, do_callback); + } +} + +function gf_do_next_button_action(formId, action, fieldId, isInit){ + var conditional_logic = window["gf_form_conditional_logic"][formId]; + var targetId = "#gform_next_button_" + formId + "_" + fieldId; + + gf_do_action(action, targetId, conditional_logic["animation"], null, isInit); +} + +function gf_do_action(action, targetId, useAnimation, defaultValues, isInit, callback){ + if(action == "show"){ + if(useAnimation && !isInit){ + if(jQuery(targetId).length > 0) + jQuery(targetId).slideDown(callback); + else if(callback) + callback(); + + } + else{ + jQuery(targetId).show(); + if(callback) + callback(); + + } + } + else{ + //if field is not already hidden, reset its values to the default + var child = jQuery(targetId).children().first(); + + if(!gformIsHidden(child)){ + gf_reset_to_default(targetId, defaultValues); + } + + if(useAnimation && !isInit){ + if(jQuery(targetId).length > 0) + jQuery(targetId).slideUp(callback); + else if(callback) + callback(); + } + else{ + jQuery(targetId).hide(); + if(callback) + callback(); + } + } +} + +function gf_reset_to_default(targetId, defaultValue){ + + var dateFields = jQuery(targetId).find('.gfield_date_month input[type="text"], .gfield_date_day input[type="text"], .gfield_date_year input[type="text"], .gfield_date_dropdown_month select, .gfield_date_dropdown_day select, .gfield_date_dropdown_year select'); + var dateIndex = 0; + if(dateFields.length > 0){ + dateFields.each(function(){ + if(defaultValue){ + val = defaultValue.split(/[\.\/-]+/)[dateIndex]; + dateIndex++; + } + else{ + val = ""; + } + + if(jQuery(this).prop("tagName") == "SELECT") + val = parseInt(val); + + jQuery(this).val(val).trigger("change"); + + }); + + return; + } + + //cascading down conditional logic to children to suppport nested conditions + //text fields and drop downs + var target = jQuery(targetId).find('select, input[type="text"], input[type="number"], textarea'); + + var target_index = 0; + + target.each(function(){ + var val = ""; + + if(jQuery(this).is('select:not([multiple])')){ + val = jQuery(this).find('option').eq(0).val(); + } + + //get name of previous input field to see if it is the radio button which goes with the "Other" text box + //otherwise field is populated with input field name + var radio_button_name = jQuery(this).prev("input").attr("value"); + if(radio_button_name == "gf_other_choice"){ + val = jQuery(this).attr("value"); + } + else if(jQuery.isArray(defaultValue)){ + val = defaultValue[target_index]; + } + else if(jQuery.isPlainObject(defaultValue)){ + val = defaultValue[jQuery(this).attr("name")]; + } + else if(defaultValue){ + + val = defaultValue; + + } + + jQuery(this).val(val).trigger('change'); + target_index++; + }); + + //checkboxes and radio buttons + var elements = jQuery(targetId).find('input[type="radio"], input[type="checkbox"]'); + + elements.each(function(){ + + //is input currently checked? + var isChecked = jQuery(this).is(':checked') ? true : false; + + //does input need to be marked as checked or unchecked? + var doCheck = defaultValue ? jQuery.inArray(jQuery(this).attr('id'), defaultValue) > -1 : false; + + //if value changed, trigger click event + if(isChecked != doCheck){ + //setting input as checked or unchecked appropriately + jQuery(this).prop("checked", doCheck); + + //need to set the prop again after the click is triggered + jQuery(this).trigger('click').prop('checked', doCheck); + } + }); + +} \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/js/datepicker.js b/src/wp-content/plugins/gravityforms/js/datepicker.js new file mode 100644 index 0000000..7905de9 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/datepicker.js @@ -0,0 +1,35 @@ +jQuery(document).ready(gformInitDatepicker); + +function gformInitDatepicker(){ + jQuery('.datepicker').each( + function (){ + var element = jQuery(this); + var format = "mm/dd/yy"; + + if(element.hasClass("mdy")) + format = "mm/dd/yy"; + else if(element.hasClass("dmy")) + format = "dd/mm/yy"; + else if(element.hasClass("dmy_dash")) + format = "dd-mm-yy"; + else if(element.hasClass("dmy_dot")) + format = "dd.mm.yy"; + else if(element.hasClass("ymd_slash")) + format = "yy/mm/dd"; + else if(element.hasClass("ymd_dash")) + format = "yy-mm-dd"; + else if(element.hasClass("ymd_dot")) + format = "yy.mm.dd"; + + var image = ""; + var showOn = "focus"; + if(element.hasClass("datepicker_with_icon")){ + showOn = "both"; + image = jQuery('#gforms_calendar_icon_' + this.id).val(); + } + + element.datepicker({ yearRange: '-100:+20', showOn: showOn, buttonImage: image, buttonImageOnly: true, dateFormat: format, changeMonth: true, changeYear: true }); + } + ); +} + diff --git a/src/wp-content/plugins/gravityforms/js/floatmenu_init.js b/src/wp-content/plugins/gravityforms/js/floatmenu_init.js new file mode 100644 index 0000000..ec307f5 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/floatmenu_init.js @@ -0,0 +1,15 @@ +// change the menu position based on the scroll positon +window.onscroll = function() +{ + if( window.XMLHttpRequest ) { + + basePosition = jQuery('#gf_form_toolbar').offset().top; + + if (document.documentElement.scrollTop > basePosition || self.pageYOffset > basePosition) { + jQuery('#floatMenu').css('position','fixed'); + jQuery('#floatMenu').css('top', '40px'); + } else { + jQuery('#floatMenu').css('position','static'); + } + } +} \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/js/form_admin.js b/src/wp-content/plugins/gravityforms/js/form_admin.js new file mode 100644 index 0000000..a104b75 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/form_admin.js @@ -0,0 +1,1346 @@ + +/** +* Common JS functions for form settings and form editor pages. +*/ + +jQuery(document).ready(function($){ + + gaddon.init(); + + $(document).on('change', '.gfield_rule_value_dropdown', function(){ + SetRuleValueDropDown($(this)); + }); + + // init merge tag auto complete + if(typeof form != 'undefined') + new gfMergeTagsObj(form); + +}); + +function ToggleConditionalLogic(isInit, objectType){ + var speed = isInit ? "" : "slow"; + if(jQuery('#' + objectType + '_conditional_logic').is(":checked")){ + + var obj = GetConditionalObject(objectType); + + CreateConditionalLogic(objectType, obj); + + //Initializing object so it has the default options set + SetConditionalProperty(objectType, "actionType", jQuery("#" + objectType + "_action_type").val()); + SetConditionalProperty(objectType, "logicType", jQuery("#" + objectType + "_logic_type").val()); + SetRule(objectType, 0); + + jQuery('#' + objectType + '_conditional_logic_container').show(speed); + } + else{ + jQuery('#' + objectType + '_conditional_logic_container').hide(speed); + } + +} + +function GetConditionalObject(objectType){ + + var object = false; + + switch(objectType){ + case "page": + case "field": + object = GetSelectedField(); + break; + + case "next_button" : + var field = GetSelectedField(); + object = field["nextButton"]; + break; + + case "confirmation": + object = confirmation; + break; + + case "notification": + object = current_notification; + break; + + default: + object = typeof form != 'undefined' ? form.button : false; + break; + } + + object = gform.applyFilters( 'gform_conditional_object', object, objectType ) + + return object; +} + +function CreateConditionalLogic(objectType, obj){ + + if(!obj.conditionalLogic) + obj.conditionalLogic = new ConditionalLogic(); + + var hideSelected = obj.conditionalLogic.actionType == "hide" ? "selected='selected'" :""; + var showSelected = obj.conditionalLogic.actionType == "show" ? "selected='selected'" :""; + var allSelected = obj.conditionalLogic.logicType == "all" ? "selected='selected'" :""; + var anySelected = obj.conditionalLogic.logicType == "any" ? "selected='selected'" :""; + + var objText; + if(objectType == "field") + objText = gf_vars.thisFieldIf; + else if(objectType == "page") + objText = gf_vars.thisPage; + else if(objectType == "confirmation") + objText = gf_vars.thisConfirmation + else if(objectType == "notification") + objText = gf_vars.thisNotification + else + objText = gf_vars.thisFormButton; + + var descPieces = {}; + descPieces.actionType = ""; + descPieces.objectDescription = objText; + descPieces.logicType = ""; + descPieces.ofTheFollowingMatch = gf_vars.ofTheFollowingMatch; + + var descPiecesArr = makeArray( descPieces ); + + var str = descPiecesArr.join(' '); + var str = gform.applyFilters( 'gform_conditional_logic_description', str, descPieces, objectType, obj ); + var i, rule; + for(i=0; i < obj.conditionalLogic.rules.length; i++){ + rule = obj.conditionalLogic.rules[i]; + str += "
            "; + str += GetRuleFields(objectType, i, rule.fieldId); + str += GetRuleOperators(objectType, i, rule.fieldId, rule.operator); + str += GetRuleValues(objectType, i, rule.fieldId, rule.value); + str += ""; + if(obj.conditionalLogic.rules.length > 1 ) + str += ""; + + str += "
            "; + } + + jQuery("#" + objectType + "_conditional_logic_container").html(str); + + //initializing placeholder script + Placeholders.enable(); +} + +function GetRuleOperators( objectType, i, fieldId, selectedOperator ) { + var str, supportedOperators, operators, str, selected; + supportedOperators = {"is":"is","isnot":"isNot", ">":"greaterThan", "<":"lessThan", "contains":"contains", "starts_with":"startsWith", "ends_with":"endsWith"}; + str = ""; + return str; +} + +function GetOperatorsForMeta(supportedOperators, key){ + var operators = {}; + if(entry_meta[key] && entry_meta[key].filter && entry_meta[key].filter.operators ){ + + jQuery.each(supportedOperators,function(operator, stringKey){ + if(jQuery.inArray(operator, entry_meta[key].filter.operators) >= 0) + operators[operator] = stringKey; + }); + } else { + operators = supportedOperators; + } + return operators; +} + +function GetRuleFields( objectType, ruleIndex, selectedFieldId ) { + + var str = ""; + return str; +} + +function GetEntryMetaFields( selectedFieldId ) { + + var options = [], selected, label; + + if(typeof entry_meta == 'undefined') + return options; + + jQuery.each( entry_meta, function( key, meta ) { + + if(typeof meta.filter == 'undefined') + return; + + options.push( { + label: meta.label, + value: key, + isSelected: selectedFieldId == key ? "selected='selected'" : "" + } ); + + }); + + return options; +} + +function IsConditionalLogicField(field){ + var inputType = field.inputType ? field.inputType : field.type; + var supported_fields = ["checkbox", "radio", "select", "text", "website", "textarea", "email", "hidden", "number", "phone", "multiselect", "post_title", + "post_tags", "post_custom_field", "post_content", "post_excerpt"]; + + var index = jQuery.inArray(inputType, supported_fields); + var isConditionalLogicField = index >= 0 ? true : false; + isConditionalLogicField = gform.applyFilters( 'gform_is_conditional_logic_field', isConditionalLogicField, field ); + return isConditionalLogicField; +} + +function IsEntryMeta(key){ + + return typeof entry_meta != 'undefined' && typeof entry_meta[key] != 'undefined'; +} + +function GetRuleValues(objectType, ruleIndex, selectedFieldId, selectedValue, inputName){ + + if(!inputName) + inputName = false; + + var dropdown_id = inputName == false ? objectType + '_rule_value_' + ruleIndex : inputName; + + if(selectedFieldId == 0) + selectedFieldId = GetFirstRuleField(); + + if(selectedFieldId == 0) + return ""; + + var field = GetFieldById(selectedFieldId), + isEntryMeta = IsEntryMeta(selectedFieldId), + obj = GetConditionalObject(objectType), + rule = obj["conditionalLogic"]["rules"][ruleIndex], + operator = rule.operator, + str = ""; + + if(field && field["type"] == "post_category" && field["displayAllCategories"]){ + + var dropdown = jQuery('#' + dropdown_id + ".gfield_category_dropdown"); + + //don't load category drop down if it already exists (to avoid unecessary ajax requests) + if(dropdown.length > 0){ + + var options = dropdown.html(); + options = options.replace("value=\"" + selectedValue + "\"", "value=\"" + selectedValue + "\" selected=\"selected\""); + str = ""; + } + else{ + var placeholderName = inputName == false ? "gfield_ajax_placeholder_" + ruleIndex : inputName + "_placeholder"; + + //loading categories via AJAX + jQuery.post(ajaxurl,{ action:"gf_get_post_categories", + objectType: objectType, + ruleIndex: ruleIndex, + inputName: inputName, + selectedValue: selectedValue}, + function(dropdown_string){ + if(dropdown_string){ + jQuery('#' + placeholderName).replaceWith(dropdown_string.trim()); + + SetRuleProperty(objectType, ruleIndex, "value", jQuery("#" + dropdown_id).val()); + } + } + ); + + //will be replaced by real drop down during the ajax callback + str = ""; + } + } + else if(field && field.choices && jQuery.inArray(operator, ["is", "isnot"]) > -1){ + str = GetRuleValuesDropDown(field.choices, objectType, ruleIndex, selectedValue, inputName); + } + else if (isEntryMeta && entry_meta && entry_meta[selectedFieldId] && entry_meta[selectedFieldId].filter && typeof entry_meta[selectedFieldId].filter.choices != 'undefined') { + str = GetRuleValuesDropDown(entry_meta[selectedFieldId].filter.choices, objectType, ruleIndex, selectedValue, inputName); + } + else{ + selectedValue = selectedValue ? selectedValue.replace(/'/g, "'") : ""; + + //create a text field for fields that don't have choices (i.e text, textarea, number, email, etc...) + str = ""; + } + + str = gform.applyFilters( 'gform_conditional_logic_values_input', str, objectType, ruleIndex, selectedFieldId, selectedValue ) + + return str; +} + +function GetFirstRuleField(){ + for(var i=0; i"; + + var isAnySelected = false; + for(var i=0; i" + choices[i].text + ""; + } + + if(!isAnySelected && selectedValue && selectedValue != "") + str += ""; + + str += ""; + + return str; + +} + +function SetRuleProperty(objectType, ruleIndex, name, value){ + var obj = GetConditionalObject(objectType); + obj.conditionalLogic.rules[ruleIndex][name] = value; +} + +function GetFieldById(id){ + id = parseInt( id ); + for(var i=0; i'; + + this.init = function() { + this.spinner = jQuery(this.image); + jQuery(this.elem).after(this.spinner); + return this; + } + + this.destroy = function() { + jQuery(this.spinner).remove(); + } + + return this.init(); +} + +function InsertVariable(element_id, callback, variable) { + + if(!variable) + variable = jQuery('#' + element_id + '_variable_select').val(); + + var messageElement = jQuery("#" + element_id); + + if(document.selection) { + // Go the IE way + messageElement[0].focus(); + document.selection.createRange().text=variable; + } + else if(messageElement[0].selectionStart) { + // Go the Gecko way + obj = messageElement[0] + obj.value = obj.value.substr(0, obj.selectionStart) + variable + obj.value.substr(obj.selectionEnd, obj.value.length); + } + else { + messageElement.val(variable + messageElement.val()); + } + + var variableSelect = jQuery('#' + element_id + '_variable_select'); + if(variableSelect.length > 0) + variableSelect[0].selectedIndex = 0; + + if(callback && window[callback]){ + window[callback].call(null, element_id, variable); + } + +} + +function InsertEditorVariable( elementId, value ) { + + if( !value ) { + var select = jQuery("#" + elementId + "_variable_select"); + select[0].selectedIndex = 0; + value = select.val(); + } + + wpActiveEditor = elementId; + window.send_to_editor( value ); + +} + +function GetInputType(field){ + return field.inputType ? field.inputType : field.type; +} + +function HasPostField(){ + + for(var i=0; i 0){ + //use admin label + displayLabel = field.adminLabel; + } + else{ + //use regular label + displayLabel = field.label; + } + + if(input != null) { + return inputOnly ? input.label : displayLabel + ' (' + input.label + ')'; + } + else { + return displayLabel; + } + +} + +function DeleteNotification(notificationId) { + jQuery('#action_argument').val(notificationId); + jQuery('#action').val('delete'); + jQuery('#notification_list_form')[0].submit(); +} +function DuplicateNotification(notificationId) { + jQuery('#action_argument').val(notificationId); + jQuery('#action').val('duplicate'); + jQuery('#notification_list_form')[0].submit(); +} + +function DeleteConfirmation(confirmationId) { + jQuery('#action_argument').val(confirmationId); + jQuery('#action').val('delete'); + jQuery('#confirmation_list_form')[0].submit(); +} + +function DuplicateConfirmation(confirmationId) { + jQuery('#action_argument').val(confirmationId); + jQuery('#action').val('duplicate'); + jQuery('#confirmation_list_form')[0].submit(); +} + +function SetConfirmationConditionalLogic() { + confirmation['conditionalLogic'] = jQuery('#conditional_logic').val() ? jQuery.parseJSON(jQuery('#conditional_logic').val()) : new ConditionalLogic(); + +} + +function ToggleConfirmation() { + + var showElement, hideElement = ''; + var isRedirect = jQuery("#form_confirmation_redirect").is(":checked"); + var isPage = jQuery("#form_confirmation_show_page").is(":checked"); + + if(isRedirect){ + showElement = ".form_confirmation_redirect_container"; + hideElement = "#form_confirmation_message_container, .form_confirmation_page_container"; + ClearConfirmationSettings(['text', 'page']); + } + else if(isPage){ + showElement = ".form_confirmation_page_container"; + hideElement = "#form_confirmation_message_container, .form_confirmation_redirect_container"; + ClearConfirmationSettings(['text', 'redirect']); + } + else{ + showElement = "#form_confirmation_message_container"; + hideElement = ".form_confirmation_page_container, .form_confirmation_redirect_container"; + ClearConfirmationSettings(['page', 'redirect']); + } + + ToggleQueryString(); + TogglePageQueryString() + + jQuery(hideElement).hide(); + jQuery(showElement).show(); + +} + +function ToggleQueryString() { + if(jQuery('#form_redirect_use_querystring').is(":checked")){ + jQuery('#form_redirect_querystring_container').show(); + } + else{ + jQuery('#form_redirect_querystring_container').hide(); + jQuery("#form_redirect_querystring").val(''); + jQuery("#form_redirect_use_querystring").val(''); + } +} + +function TogglePageQueryString() { + if(jQuery('#form_page_use_querystring').is(":checked")){ + jQuery('#form_page_querystring_container').show(); + } + else{ + jQuery('#form_page_querystring_container').hide(); + jQuery("#form_page_querystring").val(''); + jQuery("#form_page_use_querystring").val(''); + } +} + +function ClearConfirmationSettings(type) { + + var types = jQuery.isArray(type) ? type : [type]; + + for(i in types) { + + if(!types.hasOwnProperty(i)) + continue; + + switch(types[i]) { + case 'text': + jQuery('#form_confirmation_message').val(''); + jQuery('#form_disable_autoformatting').prop('checked', false); + break; + case 'page': + jQuery('#form_confirmation_page').val(''); + jQuery('#form_page_querystring').val(''); + jQuery('#form_page_use_querystring').prop('checked', false); + break; + case 'redirect': + jQuery('#form_confirmation_url').val(''); + jQuery('#form_redirect_querystring').val(''); + jQuery('#form_redirect_use_querystring').prop('checked', false); + break; + } + } + +} + +function StashConditionalLogic() { + var string = JSON.stringify(confirmation['conditionalLogic']); + jQuery('#conditional_logic').val(string); +} + +function ConfirmationObj() { + this.id = false; + this.name = gf_vars.confirmationDefaultName; + this.type = 'message'; + this.message = gf_vars.confirmationDefaultMessage; + this.isDefault = 0; +} + +(function (gaddon, $, undefined) { + + gaddon.init = function () { + + var defaultVal, valueExists, value; + + f = window.form; + id = isSet(f) ? f.id : 0; + + }; + + gaddon.toggleFeedActive = function(img, addon_slug, feed_id){ + var is_active = img.src.indexOf("active1.png") >=0 ? 0 : 1; + img.src = img.src.replace("active1.png", "spinner.gif"); + img.src = img.src.replace("active0.png", "spinner.gif"); + + jQuery.post(ajaxurl, { + action: "gf_feed_is_active_" + addon_slug, + feed_id: feed_id, + is_active: is_active + }, + function(response){ + if(is_active){ + img.src = img.src.replace("spinner.gif", "active1.png"); + jQuery(img).attr('title',gf_vars.inactive).attr('alt', gf_vars.inactive); + } + else{ + img.src = img.src.replace("spinner.gif", "active0.png"); + jQuery(img).attr('title',gf_vars.active).attr('alt', gf_vars.active); + } + } + ); + + return true; + }; + + gaddon.deleteFeed = function (id) { + $("#single_action").val("delete"); + $("#single_action_argument").val(id); + $("#gform-settings").submit(); + } + + function isValidJson(str) { + try { + JSON.parse(str); + } catch (e) { + return false; + } + return true; + } + + function isSet($var) { + if (typeof $var != 'undefined') + return true + return false + } + + function rgar(array, name) { + if (typeof array[name] != 'undefined') + return array[name]; + return ''; + } + +}(window.gaddon = window.gaddon || {}, jQuery)); + +function Copy(variable){ + + if(!variable) + return variable; + else if(typeof variable != 'object') + return variable; + + variable = jQuery.isArray(variable) ? variable.slice() : jQuery.extend({}, variable); + + for(i in variable) { + variable[i] = Copy(variable[i]); + } + + return variable; +} + +var gfMergeTagsObj = function(form) { + + this.form = form; + + this.init = function() { + + var gfMergeTags = this; + + this.mergeTagList = jQuery('
              '); + this.mergeTagListHover = false; + + if(jQuery('.merge-tag-support').length <= 0) + return; + + jQuery( ".merge-tag-support" ) + // don't navigate away from the field on tab when selecting an item + .bind( "keydown", function( event ) { + if ( event.keyCode === jQuery.ui.keyCode.TAB && jQuery( this ).data( "autocomplete" ).menu.active ) { + event.preventDefault(); + } + }) + .each(function(){ + + var elem = jQuery(this); + var classStr = elem.is('input') ? 'input' : 'textarea'; + + elem.autocomplete({ + minLength: 1, + source: function( request, response ) { + + // delegate back to autocomplete, but extract the last term + var term = gfMergeTags.extractLast( request.term ); + + if(term.length < elem.autocomplete('option', 'minLength')) { + response( [] ); + return; + } + + var tags = jQuery.map( gfMergeTags.getAutoCompleteMergeTags(elem), function(item) { + return gfMergeTags.startsWith( item, term ) ? item : null; + }); + + response( tags ); + }, + focus: function() { + // prevent value inserted on focus + return false; + }, + select: function( event, ui ) { + var terms = gfMergeTags.split( this.value ); + + // remove the current input + terms.pop(); + + // add the selected item + terms.push( ui.item.value ); + + this.value = terms.join( " " ); + return false; + } + }); + + var positionClass = gfMergeTags.getClassProperty(this, 'position'); + var mergeTagIcon = jQuery(''); + + // add the target element to the merge tag icon data for reference later when determining where the selected merge tag should be inserted + mergeTagIcon.data('targetElement', elem.attr('id') ); + + // if "mt-manual_position" class prop is set, look for manual elem with correct class + if( gfMergeTags.getClassProperty( this, 'manual_position' ) ) { + var manualClass = '.mt-' + elem.attr('id'); + jQuery(manualClass).append( mergeTagIcon ); + } else { + elem.after( mergeTagIcon ); + } + + }); + + jQuery('.tooltip-merge-tag').tooltip({ + show: {delay:1250}, + content: function () { + return jQuery(this).prop('title'); + } + }); + + jQuery('.all-merge-tags a.open-list').click(function() { + + var trigger = jQuery(this); + + var input = gfMergeTags.getTargetElement( trigger ); + gfMergeTags.mergeTagList.html( gfMergeTags.getMergeTagListItems( input ) ); + gfMergeTags.mergeTagList.insertAfter( trigger ).show(); + + jQuery('ul#gf_merge_tag_list a').click(function(){ + + var value = jQuery(this).data('value'); + var input = gfMergeTags.getTargetElement( this ); + + // if input has "mt-wp_editor" class, use WP Editor insert function + if( gfMergeTags.isWpEditor( input ) ) { + InsertEditorVariable( input.attr('id'), value ); + } else { + InsertVariable( input.attr('id'), null, value ); + } + + // trigger the change event to fire any functions tied to this input's onchange + input.change(); + + gfMergeTags.mergeTagList.hide(); + + }); + + }); + + this.getTargetElement = function( elem ) { + var elem = jQuery( elem ); + return jQuery( '#' + elem.parents('span.all-merge-tags').data('targetElement') ); + } + + // hide merge tag list on off click + this.mergeTagList.hover(function(){ + gfMergeTags.mergeTagListHover = true; + }, function(){ + gfMergeTags.mergeTagListHover = false; + }); + + jQuery('body').mouseup(function(){ + if(!gfMergeTags.mergeTagListHover) + gfMergeTags.mergeTagList.hide(); + }); + + } + + this.split = function( val ) { + return val.split(' '); + } + + this.extractLast = function( term ) { + return this.split( term ).pop(); + } + + this.startsWith = function(string, value) { + return string.indexOf(value) === 0; + } + + this.getMergeTags = function(fields, elementId, hideAllFields, excludeFieldTypes, isPrepop, option) { + + if(typeof fields == 'undefined') + fields = []; + + if(typeof excludeFieldTypes == 'undefined') + excludeFieldTypes = []; + + var requiredFields = [], optionalFields = [], pricingFields = []; + var ungrouped = [], requiredGroup = [], optionalGroup = [], pricingGroup = [], otherGroup = [], customGroup = []; + + if(!hideAllFields) + ungrouped.push({ tag: '{all_fields}', 'label': this.getMergeTagLabel('{all_fields}') }); + + if(!isPrepop) { + + // group fields by required, optional and pricing + for(i in fields) { + + if(!fields.hasOwnProperty(i)) + continue; + + var field = fields[i]; + + if(field['displayOnly']) + continue; + + var inputType = GetInputType(field); + if(jQuery.inArray(inputType, excludeFieldTypes) != -1) + continue; + + if(field.isRequired) { + + switch(inputType) { + + case 'name': + + var requiredField = Copy(field); + + if(field['nameFormat'] == 'extended') { + + var prefix = GetInput(field, field.id + '.2'); + var suffix = GetInput(field, field.id + '.8'); + + var optionalField = Copy(field); + optionalField['inputs'] = [prefix, suffix]; + + // add optional name fields to optional list + optionalFields.push(optionalField); + + // remove option name fields from required list + delete requiredField.inputs[0]; + delete requiredField.inputs[3]; + } + + requiredFields.push(requiredField); + break; + + default: + requiredFields.push(field); + } + + } else { + + optionalFields.push(field); + + } + + if(IsPricingField(field.type)) { + pricingFields.push(field); + } + + } + + if(requiredFields.length > 0) { + for(i in requiredFields) { + if(! requiredFields.hasOwnProperty(i)) + continue; + + requiredGroup = requiredGroup.concat(this.getFieldMergeTags(requiredFields[i], option)); + } + } + + if(optionalFields.length > 0) { + for(i in optionalFields) { + + if(!optionalFields.hasOwnProperty(i)) + continue; + + optionalGroup = optionalGroup.concat(this.getFieldMergeTags(optionalFields[i], option)); + } + } + + if(pricingFields.length > 0) { + + if(!hideAllFields) + pricingGroup.push({ tag: '{pricing_fields}', 'label': this.getMergeTagLabel('{pricing_fields}') }); + + for(i in pricingFields) { + if(!pricingFields.hasOwnProperty(i)) + continue; + + pricingGroup.concat(this.getFieldMergeTags(pricingFields[i], option)); + } + + } + + } + + otherGroup.push( { tag: '{ip}', label: this.getMergeTagLabel('{ip}') }); + otherGroup.push( { tag: '{date_mdy}', label: this.getMergeTagLabel('{date_mdy}') }); + otherGroup.push( { tag: '{date_dmy}', label: this.getMergeTagLabel('{date_dmy}') }); + otherGroup.push( { tag: '{embed_post:ID}', label: this.getMergeTagLabel('{embed_post:ID}') }); + otherGroup.push( { tag: '{embed_post:post_title}', label: this.getMergeTagLabel('{embed_post:post_title}') }); + otherGroup.push( { tag: '{embed_url}', label: this.getMergeTagLabel('{embed_url}') }); + otherGroup.push( { tag: '{entry_id}', label: this.getMergeTagLabel('{entry_id}') }); + otherGroup.push( { tag: '{entry_url}', label: this.getMergeTagLabel('{entry_url}') }); + otherGroup.push( { tag: '{form_id}', label: this.getMergeTagLabel('{form_id}') }); + + otherGroup.push( { tag: '{form_title}', label: this.getMergeTagLabel('{form_title}') }); + + otherGroup.push( { tag: '{user_agent}', label: this.getMergeTagLabel('{user_agent}') }); + otherGroup.push( { tag: '{referer}', label: this.getMergeTagLabel('{referer}') }); + + if(HasPostField() && !isPrepop) { // TODO: consider adding support for passing form object or fields array + otherGroup.push( { tag: '{post_id}', label: this.getMergeTagLabel('{post_id}') }); + otherGroup.push( { tag: '{post_edit_url}', label: this.getMergeTagLabel('{post_edit_url}') }); + } + + otherGroup.push( { tag: '{user:display_name}', label: this.getMergeTagLabel('{user:display_name}') }); + otherGroup.push( { tag: '{user:user_email}', label: this.getMergeTagLabel('{user:user_email}') }); + otherGroup.push( { tag: '{user:user_login}', label: this.getMergeTagLabel('{user:user_login}') }); + + var customMergeTags = this.getCustomMergeTags(); + if( customMergeTags.tags.length > 0 ) { + for( i in customMergeTags.tags ) { + + if(! customMergeTags.tags.hasOwnProperty(i)) + continue; + + var customMergeTag = customMergeTags.tags[i]; + customGroup.push( { tag: customMergeTag.tag, label: customMergeTag.label } ); + } + } + + var mergeTags = { + ungrouped: { + label: this.getMergeGroupLabel('ungrouped'), + tags: ungrouped + }, + required: { + label: this.getMergeGroupLabel('required'), + tags: requiredGroup + }, + optional: { + label: this.getMergeGroupLabel('optional'), + tags: optionalGroup + }, + pricing: { + label: this.getMergeGroupLabel('pricing'), + tags: pricingGroup + }, + other: { + label: this.getMergeGroupLabel('other'), + tags: otherGroup + }, + custom: { + label: this.getMergeGroupLabel('custom'), + tags: customGroup + } + } + + mergeTags = gform.applyFilters('gform_merge_tags', mergeTags, elementId, hideAllFields, excludeFieldTypes, isPrepop, option); + + return mergeTags; + } + + this.getMergeTagLabel = function(tag) { + + for(groupName in gf_vars.mergeTags) { + + if(!gf_vars.mergeTags.hasOwnProperty(groupName)) + continue; + + var tags = gf_vars.mergeTags[groupName].tags; + for(i in tags) { + + if(!tags.hasOwnProperty(i)) + continue; + + if(tags[i].tag == tag) + return tags[i].label; + } + } + + return ''; + } + + this.getMergeGroupLabel = function(group) { + return gf_vars.mergeTags[group].label; + } + + this.getFieldMergeTags = function(field, option) { + + if(typeof option == 'undefined') + option = ''; + + var mergeTags = []; + var inputType = GetInputType(field); + var tagArgs = inputType == "list" ? ":" + option : ""; //option currently only supported by list field + var value = '', label = ''; + + if( typeof field['inputs'] != 'undefined' && jQuery.isArray(field['inputs']) ) { + + if(inputType == 'checkbox') { + label = GetLabel(field, field.id).replace("'", "\\'"); + value = "{" + label + ":" + field.id + tagArgs + "}"; + mergeTags.push( { tag: value, label: label } ); + } + + for(i in field.inputs) { + + if(!field.inputs.hasOwnProperty(i)) + continue; + + var input = field.inputs[i]; + if(inputType == "creditcard" && jQuery.inArray(input.id,[parseFloat(field.id + ".2"), parseFloat(field.id + ".3"), parseFloat(field.id + ".5")]) > -1) + continue; + label = GetLabel(field, input.id).replace("'", "\\'"); + value = "{" + label + ":" + input.id + tagArgs + "}"; + mergeTags.push( { tag: value, label: label } ); + } + + } + else { + label = GetLabel(field).replace("'", "\\'"); + value = "{" + label + ":" + field.id + tagArgs + "}"; + mergeTags.push( { tag: value, label: label } ); + } + + return mergeTags; + } + + this.getCustomMergeTags = function() { + for(groupName in gf_vars.mergeTags) { + if(!gf_vars.mergeTags.hasOwnProperty(groupName)) + continue; + + if(groupName == 'custom') + return gf_vars.mergeTags[groupName]; + } + return []; + } + + this.getAutoCompleteMergeTags = function(elem) { + + var fields = this.form.fields; + var elementId = elem.attr('id'); + var hideAllFields = this.getClassProperty(elem, 'hide_all_fields') == true; + var excludeFieldTypes = this.getClassProperty(elem, 'exclude'); + var option = this.getClassProperty(elem, 'option'); + var isPrepop = this.getClassProperty(elem, 'prepopulate'); + + if(isPrepop) { + hideAllFields = true; + } + var mergeTags = this.getMergeTags(fields, elementId, hideAllFields, excludeFieldTypes, isPrepop, option); + + var autoCompleteTags = []; + for(group in mergeTags) { + + if(! mergeTags.hasOwnProperty(group)) + continue; + + var tags = mergeTags[group].tags; + for(i in tags) { + + if(!tags.hasOwnProperty(i)) + continue; + + autoCompleteTags.push(tags[i].tag); + } + } + + return autoCompleteTags; + } + + this.getMergeTagListItems = function(elem) { + + var fields = this.form.fields; + var elementId = elem.attr('id'); + var hideAllFields = this.getClassProperty(elem, 'hide_all_fields') == true; + var excludeFieldTypes = this.getClassProperty(elem, 'exclude'); + var isPrepop = this.getClassProperty(elem, 'prepopulate'); + var option = this.getClassProperty(elem, 'option'); + + if(isPrepop) { + hideAllFields = true; + } + var mergeTags = this.getMergeTags(fields, elementId, hideAllFields, excludeFieldTypes, isPrepop, option); + var hasMultipleGroups = this.hasMultipleGroups(mergeTags); + var optionsHTML = ''; + + for(group in mergeTags) { + + if(! mergeTags.hasOwnProperty(group)) + continue; + + var label = mergeTags[group].label + var tags = mergeTags[group].tags; + + // skip groups without any tags + if(tags.length <= 0) + continue; + + // if group name provided + if(label && hasMultipleGroups) + optionsHTML += '
            • ' + label + '
            • '; + + for(i in tags) { + + if(!tags.hasOwnProperty(i)) + continue; + + var tag = tags[i]; + optionsHTML += '
            • ' + tag.label + '
            • '; + } + + } + + return optionsHTML; + } + + this.hasMultipleGroups = function(mergeTags) { + var count = 0; + for(group in mergeTags) { + + if(!mergeTags.hasOwnProperty(group)) + continue; + + if(mergeTags[group].tags.length > 0) + count++; + } + return count > 1; + } + + /** + * Merge Tag inputs support a system for setting various properties for the merge tags via classes. + * e.g. mt-{property}-{value} + * + * You can pass multiple values for a property like so: + * e.g. mt-{property}-{value1}-{value2}-{value3} + * + * Current classes: + * mt-hide_all_fields + * mt-exclude-{field_type} e.g. mt-exlude-paragraph + * mt-option-{option_value} e.g. mt-option-url + * mt-position-{position_value} e.g. mt-position-right + * + */ + this.getClassProperty = function(elem, property) { + + var elem = jQuery(elem); + var classStr = elem.attr('class'); + + if(!classStr) + return ''; + + var classes = classStr.split(' '); + + for(i in classes) { + + if(!classes.hasOwnProperty(i)) + continue; + + var pieces = classes[i].split('-'); + + // if this is not a merge tag class or not the property we are looking for, skip + if(pieces[0] != 'mt' || pieces[1] != property) + continue; + + // if more than one value passed, return all values + if(pieces.length > 3) { + delete pieces[0]; + delete pieces[1]; + return pieces; + } + // if just a property is passed, assume we are looking for boolean, return true + else if(pieces.length == 2){ + return true; + // in all other cases, return the value + } else { + return pieces[2]; + } + + } + + return ''; + } + + this.isWpEditor = function( mergeTagIcon ) { + var mergeTagIcon = jQuery( mergeTagIcon ); + return this.getClassProperty( mergeTagIcon, 'wp_editor' ) == true; + } + + this.init(); + +} + +var FeedConditionObj = function( args ) { + + this.strings = isSet( args.strings ) ? args.strings : {}; + this.logicObject = args.logicObject; + + this.init = function() { + + var fcobj = this; + + gform.addFilter( 'gform_conditional_object', 'FeedConditionConditionalObject' ); + gform.addFilter( 'gform_conditional_logic_description', 'FeedConditionConditionalDescription' ); + + jQuery(document).ready(function(){ + ToggleConditionalLogic( true, "feed_condition" ); + }); + + jQuery('input#feed_condition_conditional_logic').parents('form').on('submit', function(){ + jQuery('input#feed_condition_conditional_logic_object').val( JSON.stringify( fcobj.logicObject ) ); + }); + + } + + this.init(); + +} + +function FeedConditionConditionalObject( object, objectType ) { + + if( objectType != 'feed_condition' ) + return object; + + return feedCondition.logicObject; +} + +function FeedConditionConditionalDescription( description, descPieces, objectType, obj ) { + + if( objectType != 'feed_condition' ) + return description; + + descPieces.actionType = descPieces.actionType.replace('
              '); + height = h; + isResizable = typeof height != 'undefined' && height > 0; + operatorStrings = {"is":"is","isnot":"isNot", ">":"greaterThan", "<":"lessThan", "contains":"contains", "starts_with":"startsWith", "ends_with":"endsWith"}; + imagesURL = gf_vars.baseUrl + "/images"; + settings = s; + filters = initVars && initVars.filters ? initVars.filters : []; + mode = initVars && initVars.mode ? initVars.mode : "all"; + allowMultiple = typeof m == 'undefined' || m ? true : false ; + + setUpFilters(filters); + + } + + function setUpFilters(filters) { + var i; + if (typeof filters == 'undefined' || filters.length == 0){ + displayNoFiltersMessage(); + return; + } + + if(mode != "off") + $("#gform-field-filters").append(getFilterMode(mode)); + + for (i = 0; i < filters.length; i++) { + $("#gform-field-filters").append(getNewFilterRow()); + } + $(".gform-filter-field").each(function (i) { + var fieldId = filters[i].field; + jQuery(this).val(fieldId); + jQuery(this).change(); + }); + $(".gform-filter-operator").each(function (i) { + var operator = filters[i].operator; + jQuery(this).val(operator); + jQuery(this).change(); + }); + $(".gform-filter-value").each(function (i) { + var value = filters[i].value; + jQuery(this).val(value); + jQuery(this).change(); + }); + maybeMakeResizable() + } + + function getNewFilterRow() { + var str; + str = "
              "; + str += getFilterFields() + getFilterOperators() + getFilterValues() + getAddRemoveButtons(); + str += "
              "; + return str; + } + + function getFilterFields() { + var i, j, key, val, label, question, options, disabled = "", numRows, + select = []; + select.push(""); + select.push(""); + return select.join(''); + } + + gfFilterUI.changeField = function (fieldSelect) { + var filter = getFilter(fieldSelect.value) + if (filter) { + $(fieldSelect).siblings(".gform-filter-value").replaceWith(getFilterValues(filter)); + $(fieldSelect).siblings(".gform-filter-type").val(filter.type); + $(fieldSelect).siblings(".gform-filter-operator").replaceWith(getFilterOperators(filter)); + } + setDisabledFields(); + } + + function isFieldSelected (fieldId) { + fieldId = fieldId.toString(); + var selectedFields = []; + $('.gform-filter-field :selected').each(function (i, selected) { + selectedFields[i] = $(selected).val(); + }); + return $.inArray(fieldId, selectedFields) > -1 ? true : false; + } + + function getFilterOperators (filter) { + var i, operator, + str = ""; + return str; + } + + function getFilterValues (filter) { + var i, val, text, str, options = ""; + str = ""; + + if (filter) { + if (filter.values) { + for (i = 0; i < filter.values.length; i++) { + val = filter.values[i].value; + text = filter.values[i].text; + options += "".format(val, text); + } + str = "".format(options); + } + } + + return str; + } + + + function getFilter (key) { + if (!key) + return; + for (var i = 0; i < settings.length; i++) { + if (key == settings[i].key) + return settings[i]; + if (settings[i].group) { + for (var j = 0; j < settings[i].filters.length; j++) { + if (key == settings[i].filters[j].key) + return settings[i].filters[j]; + } + } + + } + } + + function getAddRemoveButtons () { + var str = ""; + if(!allowMultiple) + return str; + + str += "{1}".format(imagesURL, gf_vars.addFieldFilter, gf_vars.addFieldFilter); + str += "" + gf_vars.removeFieldFilter + ""; + return str; + } + + function maybeMakeResizable () { + if(!isResizable) + return; + + var $filterBox = $("#gform-field-filters"); + + var $filters = $(".gform-field-filter"); + + if ($filters.length <= 1) { + if ($($container).hasClass('ui-resizable')) + $container.resizable('destroy'); + return; + } + var makeResizable = ($filterBox.get(0).scrollHeight > $container.height()) || $container.height() >= height; + + if (makeResizable) { + $container + .css({'min-height': height + 'px' , 'border-bottom': '5px double #DDD'}) + .resizable({ + handles : 's', + minHeight: height + }); + $filterBox.css("min-height", height); + } else { + $container.css({'min-height': '', 'border-bottom': ''}); + } + } + + function displayNoFiltersMessage () { + var str = ""; + str += "
              " + gf_vars.addFieldFilter; + str += "{1}
              ".format(imagesURL, gf_vars.addFieldFilter, gf_vars.addFieldFilter); + $("#gform-field-filters").html(str); + if(isResizable){ + $container.css({'min-height': '', 'border-bottom': ''}); + $container.height(80); + $("#gform-field-filters").css("min-height", ''); + } + + } + + function setDisabledFields () { + $("select.gform-filter-field option").removeAttr("disabled"); + $("select.gform-filter-field").each(function (i) { + var filter = getFilter(this.value); + if (typeof(filter) != 'undefined' && filter.preventMultiple && isFieldSelected(this.value)) { + $("select.gform-filter-field option[value='" + this.value + "']:not(:selected)").attr('disabled', 'disabled'); + } + }); + + } + + function getFilterMode(mode){ + var html; + html = ''.format(selected("all", mode), gf_vars.all, selected("any", mode), gf_vars.any); + html = gf_vars.filterAndAny.format(html); + return html + } + + function selected(selected, current){ + return selected == current ? 'selected="selected"' : ""; + } + + function addFilterMode ($filterRow) { + + $filterRow.after(getFilterMode()); + } + + gfFilterUI.addNewFieldFilter = function (el) { + var $el, $filterRow; + $el = $(el); + if($el.is("img")) + $filterRow = $el.parent(); + else + $filterRow = $el; + + $filterRow.after(getNewFilterRow()); + $filterRow.next("div").find(".gform-filter-field").change(); + if ($(".gform-field-filter").length == 1) + addFilterMode($filterRow); + + maybeMakeResizable(); + } + + gfFilterUI.removeFieldFilter = function (img) { + $(img).parent().remove(); + if ($(".gform-field-filter").length == 0) + displayNoFiltersMessage(); + setDisabledFields(); + maybeMakeResizable(); + } + + String.prototype.format = function () { + var args = arguments; + return this.replace(/{(\d+)}/g, function (match, number) { + return typeof args[number] != 'undefined' + ? args[number] + : match + ; + }); + }; + +}(window.gfFilterUI = window.gfFilterUI || {}, jQuery)); \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/js/gravityforms.js b/src/wp-content/plugins/gravityforms/js/gravityforms.js new file mode 100644 index 0000000..f0c9cd8 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/gravityforms.js @@ -0,0 +1,1379 @@ +// "prop" method fix for previous versions of jQuery +var originalPropMethod = jQuery.fn.prop; + +jQuery.fn.prop = function() { + if(typeof originalPropMethod == 'undefined') { + return jQuery.fn.attr.apply(this, arguments); + } else { + return originalPropMethod.apply(this, arguments); + } +} + +//Formatting free form currency fields to currency +jQuery(document).ready(function(){ + jQuery(document).bind('gform_post_render', gformBindFormatPricingFields); +}); + +function gformBindFormatPricingFields(){ + jQuery(".ginput_amount, .ginput_donation_amount").bind("change", function(){ + gformFormatPricingField(this); + }); + + jQuery(".ginput_amount, .ginput_donation_amount").each(function(){ + gformFormatPricingField(this); + }); +} + + +//------------------------------------------------ +//---------- CURRENCY ---------------------------- +//------------------------------------------------ +function Currency(currency){ + this.currency = currency; + + this.toNumber = function(text){ + if(this.isNumeric(text)) + return parseFloat(text); + + return gformCleanNumber(text, this.currency["symbol_right"], this.currency["symbol_left"], this.currency["decimal_separator"]); + }; + + this.toMoney = function(number){ + if(!this.isNumeric(number)) + number = this.toNumber(number); + + if(number === false) + return ""; + + number = number + ""; + negative = ""; + if(number[0] == "-"){ + negative = "-"; + number = parseFloat(number.substr(1)); + } + money = this.numberFormat(number, this.currency["decimals"], this.currency["decimal_separator"], this.currency["thousand_separator"]); + + var symbol_left = this.currency["symbol_left"] ? this.currency["symbol_left"] + this.currency["symbol_padding"] : ""; + var symbol_right = this.currency["symbol_right"] ? this.currency["symbol_padding"] + this.currency["symbol_right"] : ""; + money = negative + this.htmlDecode(symbol_left) + money + this.htmlDecode(symbol_right); + return money; + }; + + this.numberFormat = function(number, decimals, dec_point, thousands_sep, padded){ + var padded = typeof padded == 'undefined'; + number = (number+'').replace(',', '').replace(' ', ''); + var n = !isFinite(+number) ? 0 : +number, + prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), + sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, dec = (typeof dec_point === 'undefined') ? '.' : dec_point, + s = '', + + toFixedFix = function (n, prec) { + var k = Math.pow(10, prec); + return '' + Math.round(n * k) / k; + }; + + if(decimals == '0') { + s = ('' + Math.round(n)).split('.'); + } else + if(decimals == -1) { + s = ('' + n).split('.'); + } else { + // Fix for IE parseFloat(0.55).toFixed(0) = 0; + s = toFixedFix(n, prec).split('.'); + } + + if (s[0].length > 3) { + s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep); + } + + if(padded) { + if ((s[1] || '').length < prec) { + s[1] = s[1] || ''; + s[1] += new Array(prec - s[1].length + 1).join('0'); + } + } + + return s.join(dec); + } + + this.isNumeric = function(number){ + return gformIsNumber(number); + }; + + this.htmlDecode = function(text) { + var c,m,d = text; + + // look for numerical entities " + var arr=d.match(/&#[0-9]{1,5};/g); + + // if no matches found in string then skip + if(arr!=null){ + for(var x=0;x= -32768 && c <= 65535){ + // decode every single match within string + d = d.replace(m, String.fromCharCode(c)); + }else{ + d = d.replace(m, ""); //invalid so replace with nada + } + } + } + return d; + }; +} + +function gformCleanNumber(text, symbol_right, symbol_left, decimal_separator){ + //converting to a string if a number as passed + text = text + " "; + + //Removing symbol in unicode format (i.e. ᅜ) + text = text.replace(/&.*?;/, "", text); + + //Removing symbol from text + text = text.replace(symbol_right, ""); + text = text.replace(symbol_left, ""); + + + //Removing all non-numeric characters + var clean_number = ""; + var is_negative = false; + for(var i=0; i= 0 && parseInt(digit) <= 9) || digit == decimal_separator ) + clean_number += digit; + else if(digit == '-') + is_negative = true; + } + + //Removing thousand separators but keeping decimal point + var float_number = ""; + + for(var i=0; i= '0' && char <= '9') + float_number += char; + else if(char == decimal_separator){ + float_number += "."; + } + } + + if(is_negative) + float_number = "-" + float_number; + + return gformIsNumber(float_number) ? parseFloat(float_number) : false; +} + +function gformGetDecimalSeparator(numberFormat){ + var s; + switch (numberFormat){ + case 'currency' : + var currency = new Currency(gf_global.gf_currency_config); + s = currency.currency["decimal_separator"]; + break; + case 'decimal_comma' : + s = ','; + break; + default : + s = "." + } + return s; +} + +function gformIsNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); +} + +function gformIsNumeric(value, number_format){ + + switch(number_format){ + case "decimal_dot" : + var r = new RegExp("^(-?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]+)?)$"); + return r.test(value); + break; + + case "decimal_comma" : + var r = new RegExp("^(-?[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9]+)?)$"); + return r.test(value); + break; + } + return false; +} + +//------------------------------------------------ +//---------- MULTI-PAGE -------------------------- +//------------------------------------------------ +function gformDeleteUploadedFile(formId, fieldId, deleteButton){ + var parent = jQuery("#field_" + formId + "_" + fieldId); + + var fileIndex = jQuery(deleteButton).parent().index(); + + parent.find(".ginput_preview").eq(fileIndex).remove(); + + //displaying single file upload field + parent.find("input[type=\"file\"]").removeClass("gform_hidden"); + + //displaying post image label + parent.find(".ginput_post_image_file").show(); + + //clearing post image meta fields + parent.find("input[type=\"text\"]").val(''); + + //removing file from uploaded meta + var files = jQuery.secureEvalJSON(jQuery('#gform_uploaded_files_' + formId).val()); + if(files){ + var inputName = "input_" + fieldId; + var $multfile = parent.find("#gform_multifile_upload_" + formId + "_" + fieldId ); + if( $multfile.length > 0 ) { + files[inputName].splice(fileIndex, 1); + var settings = $multfile.data('settings'); + var max = settings.gf_vars.max_files; + jQuery("#" + settings.gf_vars.message_id).html(''); + if(files[inputName].length < max) + gfMultiFileUploader.toggleDisabled(settings, false); + + } else { + files[inputName] = null; + } + + jQuery('#gform_uploaded_files_' + formId).val(jQuery.toJSON(files)); + } +} + + +//------------------------------------------------ +//---------- PRICE ------------------------------- +//------------------------------------------------ +var _gformPriceFields = new Array(); +var _anyProductSelected; + +function gformIsHidden(element){ + return element.parents('.gfield').not(".gfield_hidden_product").css("display") == "none"; +} + +function gformCalculateTotalPrice(formId){ + + if(!_gformPriceFields[formId]) + return; + + var price = 0; + + _anyProductSelected = false; //Will be used by gformCalculateProductPrice(). + for(var i=0; i<_gformPriceFields[formId].length; i++){ + price += gformCalculateProductPrice(formId, _gformPriceFields[formId][i]); + } + + //add shipping price if a product has been selected + if(_anyProductSelected){ + //shipping price + var shipping = gformGetShippingPrice(formId) + price += shipping; + } + + //gform_product_total filter. Allows uers to perform custom price calculation + if(window["gform_product_total"]) + price = window["gform_product_total"](formId, price); + + + price = gform.applyFilters('gform_product_total', price, formId); + + //updating total + var totalElement = jQuery(".ginput_total_" + formId); + if(totalElement.length > 0){ + totalElement.next().val(price); + totalElement.html(gformFormatMoney(price)); + } +} + +function gformGetShippingPrice(formId){ + var shippingField = jQuery(".gfield_shipping_" + formId + " input[type=\"hidden\"], .gfield_shipping_" + formId + " select, .gfield_shipping_" + formId + " input:checked"); + var shipping = 0; + if(shippingField.length == 1 && !gformIsHidden(shippingField)){ + if(shippingField.attr("type") && shippingField.attr("type").toLowerCase() == "hidden") + shipping = shippingField.val(); + else + shipping = gformGetPrice(shippingField.val()); + } + + return gformToNumber(shipping); +} + +function gformGetFieldId(element){ + var id = jQuery(element).attr("id"); + var pieces = id.split("_"); + if(pieces.length <=0) + return 0; + + var fieldId = pieces[pieces.length-1]; + return fieldId; + +} + +function gformCalculateProductPrice(formId, productFieldId){ + var price = gformGetBasePrice(formId, productFieldId); + + var suffix = "_" + formId + "_" + productFieldId; + + //Drop down auto-calculating labels + jQuery(".gfield_option" + suffix + ", .gfield_shipping_" + formId).find("select").each(function(){ + var selected_price = gformGetPrice(jQuery(this).val()); + var fieldId = gformGetFieldId(this); + jQuery(this).children("option").each(function(){ + var label = gformGetOptionLabel(this, jQuery(this).val(), selected_price, formId, fieldId); + jQuery(this).html(label); + }); + }); + + //Checkboxes labels with prices + jQuery(".gfield_option" + suffix).find(".gfield_checkbox").find("input").each(function(){ + var fieldId = gformGetFieldId(jQuery(this).parents(".gfield_checkbox")); + var element = jQuery(this).next(); + var label = gformGetOptionLabel(element, jQuery(this).val(), 0, formId, fieldId); + element.html(label); + }); + + //Radio button auto-calculating lables + jQuery(".gfield_option" + suffix + ", .gfield_shipping_" + formId).find(".gfield_radio").each(function(){ + var selected_price = 0; + var selected_value = jQuery(this).find("input:checked").val(); + var fieldId = gformGetFieldId(this); + if(selected_value) + selected_price = gformGetPrice(selected_value); + + jQuery(this).find("input").each(function(){ + var label_element = jQuery(this).next(); + var label = gformGetOptionLabel(label_element, jQuery(this).val(), selected_price, formId, fieldId); + label_element.html(label); + }); + }); + + jQuery(".gfield_option" + suffix).find("input:checked, select").each(function(){ + if(!gformIsHidden(jQuery(this))) + price += gformGetPrice(jQuery(this).val()); + }); + + var quantity = gformGetProductQuantity( formId, productFieldId ); + + //setting global variable if quantity is more than 0 (a product was selected). Will be used when calculating total + if(quantity > 0) + _anyProductSelected = true; + + price = price * quantity; + price = Math.round(price * 100) / 100; + + return price; +} + +function gformGetProductQuantity( formId, productFieldId ) { + + var quantity, + quantityInput = jQuery( '#ginput_quantity_' + formId + '_' + productFieldId); + + if( quantityInput.length > 0 ) { + + quantity = ! gformIsNumber( quantityInput.val() ) ? 0 : quantityInput.val(); + + } else { + + quantityElement = jQuery( '.gfield_quantity_' + formId + '_' + productFieldId); + quantity = 1; + + if( quantityElement.find( 'select' ).length > 0 ) { + quantity = quantityElement.find( 'select' ).val(); + } else if( quantityElement.find( 'input' ).length > 0 ) { + quantity = quantityElement.find( 'input' ).val(); + } + + if( ! gformIsNumber( quantity ) ) + quantity = 0; + + } + + quantity = parseFloat( quantity ); + + return quantity; +} + +function gformGetBasePrice(formId, productFieldId){ + + var suffix = "_" + formId + "_" + productFieldId; + var price = 0; + var productField = jQuery("#ginput_base_price" + suffix+ ", .gfield_donation" + suffix + " input[type=\"text\"], .gfield_product" + suffix + " .ginput_amount"); + if(productField.length > 0){ + price = productField.val(); + + //If field is hidden by conditional logic, don't count it for the total + if(gformIsHidden(productField)){ + price = 0; + } + } + else + { + productField = jQuery(".gfield_product" + suffix + " select, .gfield_product" + suffix + " input:checked, .gfield_donation" + suffix + " select, .gfield_donation" + suffix + " input:checked"); + var val = productField.val(); + if(val){ + val = val.split("|"); + price = val.length > 1 ? val[1] : 0; + } + + //If field is hidden by conditional logic, don't count it for the total + if(gformIsHidden(productField)) + price = 0; + + } + + var c = new Currency(gf_global.gf_currency_config); + price = c.toNumber(price); + return price === false ? 0 : price; +} + +function gformFormatMoney(text){ + if(!gf_global.gf_currency_config) + return text; + + var currency = new Currency(gf_global.gf_currency_config); + return currency.toMoney(text); +} + +function gformFormatPricingField(element){ + if(gf_global.gf_currency_config){ + var currency = new Currency(gf_global.gf_currency_config); + var price = currency.toMoney(jQuery(element).val()); + jQuery(element).val(price); + } +} + +function gformToNumber(text){ + var currency = new Currency(gf_global.gf_currency_config); + return currency.toNumber(text); +} + +function gformGetPriceDifference(currentPrice, newPrice){ + + //getting price difference + var diff = parseFloat(newPrice) - parseFloat(currentPrice); + price = gformFormatMoney(diff); + if(diff > 0) + price = "+" + price; + + return price; +} + +function gformGetOptionLabel(element, selected_value, current_price, form_id, field_id){ + element = jQuery(element); + var price = gformGetPrice(selected_value); + var current_diff = element.attr('price'); + var original_label = element.html().replace(//i, "").replace(current_diff, ""); + + var diff = gformGetPriceDifference(current_price, price); + diff = gformToNumber(diff) == 0 ? "" : " " + diff; + element.attr('price', diff); + + //don't add for drop down items (not supported) + var price_label = element[0].tagName.toLowerCase() == "option" ? " " + diff : "" + diff + ""; + var label = original_label + price_label; + + //calling hook to allow for custom option formatting + if(window["gform_format_option_label"]) + label = gform_format_option_label(label, original_label, price_label, current_price, price, form_id, field_id); + + return label; +} + +function gformGetProductIds(parent_class, element){ + var classes = jQuery(element).hasClass(parent_class) ? jQuery(element).attr("class").split(" ") : jQuery(element).parents("." + parent_class).attr("class").split(" "); + for(var i=0; i 1 && currency.toNumber(val[1]) !== false) + return currency.toNumber(val[1]); + + return 0; +} + +function gformRegisterPriceField(item){ + + if(!_gformPriceFields[item.formId]) + _gformPriceFields[item.formId] = new Array(); + + //ignore price fields that have already been registered + for(var i=0; i<_gformPriceFields[item.formId].length; i++) + if(_gformPriceFields[item.formId][i] == item.productFieldId) + return; + + //registering new price field + _gformPriceFields[item.formId].push(item.productFieldId); +} + +function gformInitPriceFields(){ + + jQuery(".gfield_price").each(function(){ + + var productIds = gformGetProductIds("gfield_price", this); + gformRegisterPriceField(productIds); + + jQuery(this).find("input[type=\"text\"], input[type=\"number\"], select").change(function(){ + + var productIds = gformGetProductIds("gfield_price", this); + if(productIds.formId == 0) + productIds = gformGetProductIds("gfield_shipping", this); + + jQuery(document).trigger('gform_price_change', [productIds, this]); + gformCalculateTotalPrice(productIds.formId); + }); + + jQuery(this).find("input[type=\"radio\"], input[type=\"checkbox\"]").click(function(){ + var productIds = gformGetProductIds("gfield_price", this); + if(productIds.formId == 0) + productIds = gformGetProductIds("gfield_shipping", this); + + jQuery(document).trigger('gform_price_change', [productIds, this]); + gformCalculateTotalPrice(productIds.formId); + }); + + }); + + for(formId in _gformPriceFields){ + + //needed when implementing for in loops + if(!_gformPriceFields.hasOwnProperty(formId)) + continue; + + gformCalculateTotalPrice(formId); + } + +} + + +//------------------------------------------- +//---------- PASSWORD ----------------------- +//------------------------------------------- +function gformShowPasswordStrength(fieldId){ + var password = jQuery("#" + fieldId).val(); + var confirm = jQuery("#" + fieldId + "_2").val(); + + var result = gformPasswordStrength(password, confirm); + + var text = window['gf_text']["password_" + result]; + + jQuery("#" + fieldId + "_strength").val(result); + jQuery("#" + fieldId + "_strength_indicator").removeClass("blank mismatch short good bad strong").addClass(result).html(text); +} + +// Password strength meter +function gformPasswordStrength(password1, password2) { + var shortPass = 1, badPass = 2, goodPass = 3, strongPass = 4, mismatch = 5, symbolSize = 0, natLog, score; + + if(password1.length <=0) + return "blank"; + + // password 1 != password 2 + if ( (password1 != password2) && password2.length > 0) + return "mismatch"; + + //password < 4 + if ( password1.length < 4 ) + return "short"; + + if ( password1.match(/[0-9]/) ) + symbolSize +=10; + if ( password1.match(/[a-z]/) ) + symbolSize +=26; + if ( password1.match(/[A-Z]/) ) + symbolSize +=26; + if ( password1.match(/[^a-zA-Z0-9]/) ) + symbolSize +=31; + + natLog = Math.log( Math.pow(symbolSize, password1.length) ); + score = natLog / Math.LN2; + + if (score < 40 ) + return "bad"; + + if (score < 56 ) + return "good"; + + return "strong"; + +} + +//---------------------------- +//------ LIST FIELD ---------- +//---------------------------- +var gfield_original_title = ""; +function gformAddListItem(element, max){ + + if(jQuery(element).hasClass("gfield_icon_disabled")) + return; + + var tr = jQuery(element).parent().parent(); + var clone = tr.clone(); + clone.find("input, select").val("").attr("tabindex", clone.find('input:last').attr("tabindex")); + tr.after(clone); + gformToggleIcons(tr.parent(), max); + gformAdjustClasses(tr.parent()); +} + +function gformDeleteListItem(element, max){ + var tr = jQuery(element).parent().parent(); + var parent = tr.parent(); + tr.remove(); + gformToggleIcons(parent, max); + gformAdjustClasses(parent); +} + +function gformAdjustClasses(table){ + var rows = table.children(); + for(var i=0; i 0 && rowCount >= max){ + gfield_original_title = table.find(".add_list_item:first").attr("title"); + table.find(".add_list_item").addClass("gfield_icon_disabled").attr("title", ""); + } + else{ + var addIcons = table.find(".add_list_item"); + addIcons.removeClass("gfield_icon_disabled"); + if(gfield_original_title) + addIcons.attr("title", gfield_original_title); + } +} + + +//----------------------------------- +//------ CREDIT CARD FIELD ---------- +//----------------------------------- +function gformMatchCard(id) { + + var cardType = gformFindCardType(jQuery('#' + id).val()); + var cardContainer = jQuery('#' + id).parents('.gfield').find('.gform_card_icon_container'); + + if(!cardType) { + + jQuery(cardContainer).find('.gform_card_icon').removeClass('gform_card_icon_selected gform_card_icon_inactive'); + + } else { + + jQuery(cardContainer).find('.gform_card_icon').removeClass('gform_card_icon_selected').addClass('gform_card_icon_inactive'); + jQuery(cardContainer).find('.gform_card_icon_' + cardType).removeClass('gform_card_icon_inactive').addClass('gform_card_icon_selected'); + } +} + +function gformFindCardType(value) { + + if(value.length < 4) + return false; + + var rules = window['gf_cc_rules']; + var validCardTypes = new Array(); + + for(type in rules) { + + //needed when implementing for in loops + if(!rules.hasOwnProperty(type)) + continue; + + + for(i in rules[type]) { + + if(!rules[type].hasOwnProperty(i)) + continue; + + if(rules[type][i].indexOf(value.substring(0, rules[type][i].length)) === 0) { + validCardTypes[validCardTypes.length] = type; + break; + } + + } + } + + return validCardTypes.length == 1 ? validCardTypes[0].toLowerCase() : false; +} + +function gformToggleCreditCard(){ + if(jQuery("#gform_payment_method_creditcard").is(":checked")) + jQuery(".gform_card_fields_container").slideDown(); + else + jQuery(".gform_card_fields_container").slideUp(); +} + + +//---------------------------------------- +//------ CHOSEN DROP DOWN FIELD ---------- +//---------------------------------------- + +function gformInitChosenFields(fieldList, noResultsText){ + return jQuery(fieldList).each(function(){ + + var element = jQuery(this); + + //only initialize once + if( element.is(":visible") && element.siblings(".chzn-container").length == 0 ){ + var options = gform.applyFilters( 'gform_chosen_options', { no_results_text: noResultsText }, element ); + element.chosen( options ); + } + + }); +} + +//---------------------------------------- +//--- CURRENCY FORMAT NUMBER FIELD ------- +//---------------------------------------- + +function gformInitCurrencyFormatFields(fieldList){ + jQuery(fieldList).each(function(){ + var $this = jQuery(this); + $this.val( gformFormatMoney( jQuery(this).val() ) ); + }).change( function( event ) { + jQuery(this).val( gformFormatMoney( jQuery(this).val() ) ); + }); +} + + + +//---------------------------------------- +//------ CALCULATION FUNCTIONS ----------- +//---------------------------------------- + +var GFCalc = function(formId, formulaFields){ + + this.patt = /{[^{]*?:(\d+(\.\d+)?)(:(.*?))?}/i; + this.exprPatt = /^[0-9 -/*\(\)]+$/i; + this.isCalculating = {}; + + this.init = function(formId, formulaFields) { + + var calc = this; + jQuery(document).bind("gform_post_conditional_logic", function(){ + for(var i=0; i 1 || input.prop('type') == 'checkbox' ) + input = input.filter(':checked'); + + var isVisible = window['gf_check_field_rule'] ? gf_check_field_rule( formId, fieldId, true, '' ) == 'show' : true; + + if( input.length > 0 && isVisible ) { + + var val = input.val(); + val = val.split( '|' ); + + if( val.length > 1 ) { + value = val[1]; + } else { + value = input.val(); + } + + } + + var numberFormat = gf_global.number_formats[formId][fieldId]; + if( ! numberFormat ) + numberFormat = gf_global.number_formats[formId][formulaField.field_id]; + + var decimalSeparator = gformGetDecimalSeparator(numberFormat); + + + value = gformCleanNumber( value, '', '', decimalSeparator ); + if( ! value ) + value = 0; + + expr = expr.replace( matches[i][0], value ); + } + + return expr; + } + + this.init(formId, formulaFields); + +} + +function gformFormatNumber(number, rounding, decimalSeparator, thousandSeparator){ + + if(typeof decimalSeparator == "undefined"){ + if(window['gf_global']){ + var currency = new Currency(gf_global.gf_currency_config); + decimalSeparator = currency.currency["decimal_separator"]; + } + else{ + decimalSeparator = "."; + } + } + + if(typeof thousandSeparator == "undefined"){ + if(window['gf_global']){ + var currency = new Currency(gf_global.gf_currency_config); + thousandSeparator = currency.currency["thousand_separator"]; + } + else{ + thousandSeparator = ","; + } + } + + var currency = new Currency(); + return currency.numberFormat(number, rounding, decimalSeparator, thousandSeparator, false) +} + +function gformToNumber(text) { + var currency = new Currency(gf_global.gf_currency_config); + return currency.toNumber(text); +} + +function getMatchGroups(expr, patt) { + + var matches = new Array(); + + while(patt.test(expr)) { + + var i = matches.length; + matches[i] = patt.exec(expr) + expr = expr.replace('' + matches[i][0], ''); + + } + + return matches; +} + + +//---------------------------------------- +//------ JAVASCRIPT HOOK FUNCTIONS ------- +//---------------------------------------- + +var gform = { + hooks: { action: {}, filter: {} }, + addAction: function( action, callable, priority, tag ) { + gform.addHook( 'action', action, callable, priority, tag ); + }, + addFilter: function( action, callable, priority, tag ) { + gform.addHook( 'filter', action, callable, priority, tag ); + }, + doAction: function( action ) { + gform.doHook( 'action', action, arguments ); + }, + applyFilters: function( action ) { + return gform.doHook( 'filter', action, arguments ); + }, + removeAction: function( action, tag ) { + gform.removeHook( 'action', action, tag ); + }, + removeFilter: function( action, priority, tag ) { + gform.removeHook( 'filter', action, priority, tag ); + }, + addHook: function( hookType, action, callable, priority, tag ) { + if ( undefined == gform.hooks[hookType][action] ) { + gform.hooks[hookType][action] = []; + } + var hooks = gform.hooks[hookType][action]; + if ( undefined == tag ) { + tag = action + '_' + hooks.length; + } + gform.hooks[hookType][action].push( { tag:tag, callable:callable, priority:priority } ); + }, + doHook: function( hookType, action, args ) { + + // splice args from object into array and remove first index which is the hook name + args = Array.prototype.slice.call(args, 1); + + if ( undefined != gform.hooks[hookType][action] ) { + var hooks = gform.hooks[hookType][action], hook; + //sort by priority + hooks.sort(function(a,b){return a["priority"]-b["priority"]}); + for( var i=0; i=0; i--) { + if ((undefined==tag||tag==hooks[i].tag) && (undefined==priority||priority==hooks[i].priority)){ + hooks.splice(i,1); + } + } + } + } +}; + + +//---------------------------------------- +//------ MULTIFILE UPLOAD FUNCTIONS ------ +//---------------------------------------- + +(function (gfMultiFileUploader, $) { + gfMultiFileUploader.uploaders = {}; + var strings = typeof gform_gravityforms != 'undefined' ? gform_gravityforms.strings : {}; + var imagesUrl = typeof gform_gravityforms != 'undefined' ? gform_gravityforms.vars.images_url : ""; + + $(document).ready(function () { + if((typeof adminpage !== 'undefined' && adminpage === 'toplevel_page_gf_edit_forms')|| typeof plupload == 'undefined'){ + $(".gform_button_select_files").prop("disabled", true); + } else if (typeof adminpage !== 'undefined'){ + $(".gform_fileupload_multifile").each(function(){ + setup(this); + }); + } else { + $(document).bind('gform_post_render', function(e, formID){ + + $("form#gform_" + formID + " .gform_fileupload_multifile").each(function(){ + setup(this); + }); + var $form = $("form#gform_" + formID); + if($form.length > 0){ + $form.submit(function(){ + var pendingUploads = false; + $.each(gfMultiFileUploader.uploaders, function(i, uploader){ + if(uploader.total.queued>0){ + pendingUploads = true; + return false; + } + }); + if(pendingUploads){ + alert(strings.currently_uploading); + window["gf_submitting_" + formID] = false; + return false; + } + }); + } + + }); + $(document).bind("gform_post_conditional_logic", function(e,formID){ + $.each(gfMultiFileUploader.uploaders, function(i, uploader){ + uploader.refresh(); + }); + }); + } + }); + + function setup(uploadElement){ + var settings = $(uploadElement).data('settings'); + + var uploader = new plupload.Uploader(settings); + formID = uploader.settings.multipart_params.form_id; + gfMultiFileUploader.uploaders[settings.container] = uploader; + var formID; + var uniqueID; + + uploader.bind('Init', function(up, params) { + if(!up.features.dragdrop) + $(".gform_drop_instructions").hide(); + var fieldID = up.settings.multipart_params.field_id; + var maxFiles = parseInt(up.settings.gf_vars.max_files); + var initFileCount = countFiles(fieldID); + if(maxFiles > 0 && initFileCount >= maxFiles){ + gfMultiFileUploader.toggleDisabled(up.settings, true); + } + + }); + + gfMultiFileUploader.toggleDisabled = function (settings, disabled){ + $("#" + settings.browse_button).prop("disabled", disabled); + } + + function addMessage(messagesID, message){ + $("#" + messagesID).prepend("
            • " + message + "
            • "); + } + + uploader.init(); + + uploader.bind('FilesAdded', function(up, files) { + var max = parseInt(up.settings.gf_vars.max_files), + fieldID = up.settings.multipart_params.field_id, + totalCount = countFiles(fieldID), + disallowed = up.settings.gf_vars.disallowed_extensions, + extension; + + if( max > 0 && totalCount >= max){ + $.each(files, function(i, file) { + up.removeFile(file); + return; + }) + return; + } + $.each(files, function(i, file) { + + extension = file.name.split('.').pop(); + + if($.inArray(extension, disallowed) > -1){ + addMessage(up.settings.gf_vars.message_id, file.name + " - " + strings.illegal_extension) + up.removeFile(file); + return; + } + + if ((file.status == plupload.FAILED) || (max > 0 && totalCount >= max)){ + up.removeFile(file); + return; + } + + var size = typeof file.size !== 'undefined' ? plupload.formatSize(file.size) : strings.in_progress; + var status = '
              ' + + file.name + + ' (' + size + ') ' + + '' + strings.cancel + '' + + '
              '; + $('#' + up.settings.filelist).prepend(status); + totalCount++; + + }); + + up.refresh(); // Reposition Flash + + var formElementID = "form#gform_" + formID; + var uidElementID = "input:hidden[name='gform_unique_id']"; + var uidSelector = formElementID + " " + uidElementID; + var $uid = $(uidSelector); + if($uid.length==0){ + $uid = $(uidElementID); + } + + uniqueID = $uid.val(); + if('' === uniqueID){ + uniqueID = generateUniqueID(); + $uid.val(uniqueID); + } + + if(max > 0 && totalCount >= max){ + addMessage(up.settings.gf_vars.message_id, strings.max_reached) + gfMultiFileUploader.toggleDisabled(up.settings, true); + } + + up.settings.multipart_params.gform_unique_id = uniqueID; + up.start(); + + }); + + uploader.bind('UploadProgress', function(up, file) { + var html = file.percent + "%"; + $('#' + file.id + " b").html(html); + }); + + uploader.bind('Error', function(up, err) { + if(err.code === plupload.FILE_EXTENSION_ERROR){ + addMessage(up.settings.gf_vars.message_id, err.file.name + " - " + strings.invalid_file_extension + " " + up.settings.filters[0].extensions); + } else if (err.code === plupload.FILE_SIZE_ERROR) { + addMessage(up.settings.gf_vars.message_id, err.file.name + " - " + strings.file_exceeds_limit); + } else { + var m = "
            • Error: " + err.code + + ", Message: " + err.message + + (err.file ? ", File: " + err.file.name : "") + + "
            • "; + + $("#" + up.settings.gf_vars.message_id).prepend(m); + } + up.removeFile(err.file); + + up.refresh(); // Reposition Flash + }); + + uploader.bind('FileUploaded', function(up, file, result) { + var response = $.secureEvalJSON(result.response); + if(response.status == "error"){ + $('#' + up.settings.filelist).prepend(response.error.message); + return; + } + + var html = '' + file.name + ''; + var formId = up.settings.multipart_params.form_id; + var fieldId = up.settings.multipart_params.field_id; + html = " " + + html; + + $('#' + file.id ).html(html); + + var fieldID = up.settings.multipart_params["field_id"]; + + if(file.percent == 100){ + var inputName = getInputName(fieldID), + tempFileName = uniqueID + "_" + inputName + "_" + file.target_name; + if(response.data.uploaded_filename === file.name) + addFile(fieldID, response.data); + else + addMessage(up.settings.gf_vars.message_id, strings.unknown_error) + + } + + }); + + + + function getAllFiles(){ + var selector = '#gform_uploaded_files_' + formID, + $uploadedFiles = $(selector), files; + files = $uploadedFiles.val(); + files = '' === files ? {} : $.parseJSON(files); + return files; + } + + function getFiles(fieldID){ + var allFiles = getAllFiles(); + var inputName = getInputName(fieldID); + + if(typeof allFiles[inputName] == 'undefined') + allFiles[inputName] = []; + return allFiles[inputName]; + } + + function countFiles(fieldID){ + var files = getFiles(fieldID); + return files.length; + } + + function addFile(fieldID, fileInfo){ + + var files = getFiles(fieldID); + + files.unshift(fileInfo); + setUploadedFiles(fieldID, files); + } + + function setUploadedFiles(fieldID, files){ + var allFiles = getAllFiles(); + var $uploadedFiles = $('#gform_uploaded_files_' + formID); + var inputName = getInputName(fieldID); + allFiles[inputName] = files; + $uploadedFiles.val($.toJSON(allFiles)); + } + + function getInputName(fieldID){ + return "input_" + fieldID; + } + + // fixes drag and drop in IE10 + $("#" + settings.drop_element).on({ + "dragenter": ignoreDrag, + "dragover": ignoreDrag + }); + + function ignoreDrag( e ) { + e.preventDefault(); + } + } + + + function generateUniqueID() { + return 'xxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8; + return v.toString(16); + }); + } + + +}(window.gfMultiFileUploader = window.gfMultiFileUploader || {}, jQuery)); + + + +//---------------------------------------- +//------ GENERAL FUNCTIONS ------- +//---------------------------------------- + +function gformInitSpinner( formId, spinnerUrl ) { + + if( typeof spinnerUrl == 'undefined' || ! spinnerUrl ) + spinnerUrl = gform.applyFilters( "gform_spinner_url", gf_global.spinnerUrl, formId ); + + jQuery( '#gform_' + formId ).submit( function(){ + if( jQuery( '#gform_ajax_spinner_' . formId ).length == 0 ) { + jQuery( '#gform_submit_button_' + formId + ', #gform_wrapper_' + formId + ' .gform_next_button, #gform_wrapper_' + formId + ' .gform_image_button') + .after( '' ); + } + } ); + +} diff --git a/src/wp-content/plugins/gravityforms/js/jquery.json-1.3.js b/src/wp-content/plugins/gravityforms/js/jquery.json-1.3.js new file mode 100644 index 0000000..f0beaac --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/jquery.json-1.3.js @@ -0,0 +1,160 @@ +/* + * jQuery JSON Plugin + * version: 1.0 (2008-04-17) + * + * This document is licensed as free software under the terms of the + * MIT License: http://www.opensource.org/licenses/mit-license.php + * + * Brantley Harris technically wrote this plugin, but it is based somewhat + * on the JSON.org website's http://www.json.org/json2.js, which proclaims: + * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that + * I uphold. I really just cleaned it up. + * + * It is also based heavily on MochiKit's serializeJSON, which is + * copywrited 2005 by Bob Ippolito. + */ + +(function($) { + function toIntegersAtLease(n) + // Format integers to have at least two digits. + { + return n < 10 ? '0' + n : n; + } + + Date.prototype.toJSON = function(date) + // Yes, it polutes the Date namespace, but we'll allow it here, as + // it's damned usefull. + { + return this.getUTCFullYear() + '-' + + toIntegersAtLease(this.getUTCMonth()) + '-' + + toIntegersAtLease(this.getUTCDate()); + }; + + var escapeable = /["\\\x00-\x1f\x7f-\x9f]/g; + var meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }; + + $.quoteString = function(string) + // Places quotes around a string, inteligently. + // If the string contains no control characters, no quote characters, and no + // backslash characters, then we can safely slap some quotes around it. + // Otherwise we must also replace the offending characters with safe escape + // sequences. + { + //if (escapeable.test(string)) + //{ + return '"' + string.replace(escapeable, function (a) + { + var c = meta[a]; + if (typeof c === 'string') { + return c; + } + c = a.charCodeAt(); + return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); + }) + '"'; + //} + //else{ + // string = string.replace('\n','\\n'); + //} + return '"' + string + '"'; + }; + + $.toJSON = function(o, compact) + { + var type = typeof(o); + + if (type == "undefined") + return "undefined"; + else if (type == "number" || type == "boolean") + return o + ""; + else if (o === null) + return "null"; + + // Is it a string? + if (type == "string") + { + var str = $.quoteString(o); + return str; + } + + // Does it have a .toJSON function? + if (type == "object" && typeof o.toJSON == "function") + return o.toJSON(compact); + + // Is it an array? + if (type != "function" && typeof(o.length) == "number") + { + var ret = []; + for (var i = 0; i < o.length; i++) { + ret.push( $.toJSON(o[i], compact) ); + } + if (compact) + return "[" + ret.join(",") + "]"; + else + return "[" + ret.join(", ") + "]"; + } + + // If it's a function, we have to warn somebody! + if (type == "function") { + throw new TypeError("Unable to convert object of type 'function' to json."); + } + + // It's probably an object, then. + var ret = []; + for (var k in o) { + var name; + type = typeof(k); + + if (type == "number") + name = '"' + k + '"'; + else if (type == "string") + name = $.quoteString(k); + else + continue; //skip non-string or number keys + + var val = $.toJSON(o[k], compact); + if (typeof(val) != "string") { + // skip non-serializable values + continue; + } + + if (compact) + ret.push(name + ":" + val); + else + ret.push(name + ": " + val); + } + return "{" + ret.join(", ") + "}"; + }; + + $.compactJSON = function(o) + { + return $.toJSON(o, true); + }; + + $.evalJSON = function(src) + // Evals JSON that we know to be safe. + { + return eval("(" + src + ")"); + }; + + $.secureEvalJSON = function(src) + // Evals JSON in a way that is *more* secure. + { + var filtered = src; + filtered = filtered.replace(/\\["\\\/bfnrtu]/g, '@'); + filtered = filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + filtered = filtered.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + + if (/^[\],:{}\s]*$/.test(filtered)) + return eval("(" + src + ")"); + else + throw new SyntaxError("Error parsing JSON, source is not valid."); + }; +})(jQuery); diff --git a/src/wp-content/plugins/gravityforms/js/jquery.maskedinput-1.3.1.min.js b/src/wp-content/plugins/gravityforms/js/jquery.maskedinput-1.3.1.min.js new file mode 100644 index 0000000..011b647 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/jquery.maskedinput-1.3.1.min.js @@ -0,0 +1,7 @@ +/* + Masked Input plugin for jQuery + Copyright (c) 2007-2013 Josh Bush (digitalbush.com) + Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license) + Version: 1.3.1 + */ +(function(e){function t(){var e=document.createElement("input"),t="onpaste";return e.setAttribute(t,""),"function"==typeof e[t]?"paste":"input"}var n,a=t()+".mask",r=navigator.userAgent,i=/iphone/i.test(r),o=/android/i.test(r);e.mask={definitions:{9:"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"},dataName:"rawMaskFn",placeholder:"_"},e.fn.extend({caret:function(e,t){var n;if(0!==this.length&&!this.is(":hidden"))return"number"==typeof e?(t="number"==typeof t?t:e,this.each(function(){this.setSelectionRange?this.setSelectionRange(e,t):this.createTextRange&&(n=this.createTextRange(),n.collapse(!0),n.moveEnd("character",t),n.moveStart("character",e),n.select())})):(this[0].setSelectionRange?(e=this[0].selectionStart,t=this[0].selectionEnd):document.selection&&document.selection.createRange&&(n=document.selection.createRange(),e=0-n.duplicate().moveStart("character",-1e5),t=e+n.text.length),{begin:e,end:t})},unmask:function(){return this.trigger("unmask")},mask:function(t,r){var c,l,s,u,f,h;return!t&&this.length>0?(c=e(this[0]),c.data(e.mask.dataName)()):(r=e.extend({placeholder:e.mask.placeholder,completed:null},r),l=e.mask.definitions,s=[],u=h=t.length,f=null,e.each(t.split(""),function(e,t){"?"==t?(h--,u=e):l[t]?(s.push(RegExp(l[t])),null===f&&(f=s.length-1)):s.push(null)}),this.trigger("unmask").each(function(){function c(e){for(;h>++e&&!s[e];);return e}function d(e){for(;--e>=0&&!s[e];);return e}function m(e,t){var n,a;if(!(0>e)){for(n=e,a=c(t);h>n;n++)if(s[n]){if(!(h>a&&s[n].test(R[a])))break;R[n]=R[a],R[a]=r.placeholder,a=c(a)}b(),x.caret(Math.max(f,e))}}function p(e){var t,n,a,i;for(t=e,n=r.placeholder;h>t;t++)if(s[t]){if(a=c(t),i=R[t],R[t]=n,!(h>a&&s[a].test(i)))break;n=i}}function g(e){var t,n,a,r=e.which;8===r||46===r||i&&127===r?(t=x.caret(),n=t.begin,a=t.end,0===a-n&&(n=46!==r?d(n):a=c(n-1),a=46===r?c(a):a),k(n,a),m(n,a-1),e.preventDefault()):27==r&&(x.val(S),x.caret(0,y()),e.preventDefault())}function v(t){var n,a,i,l=t.which,u=x.caret();t.ctrlKey||t.altKey||t.metaKey||32>l||l&&(0!==u.end-u.begin&&(k(u.begin,u.end),m(u.begin,u.end-1)),n=c(u.begin-1),h>n&&(a=String.fromCharCode(l),s[n].test(a)&&(p(n),R[n]=a,b(),i=c(n),o?setTimeout(e.proxy(e.fn.caret,x,i),0):x.caret(i),r.completed&&i>=h&&r.completed.call(x))),t.preventDefault())}function k(e,t){var n;for(n=e;t>n&&h>n;n++)s[n]&&(R[n]=r.placeholder)}function b(){x.val(R.join(""))}function y(e){var t,n,a=x.val(),i=-1;for(t=0,pos=0;h>t;t++)if(s[t]){for(R[t]=r.placeholder;pos++a.length)break}else R[t]===a.charAt(pos)&&t!==u&&(pos++,i=t);return e?b():u>i+1?(x.val(""),k(0,h)):(b(),x.val(x.val().substring(0,i+1))),u?t:f}var x=e(this),R=e.map(t.split(""),function(e){return"?"!=e?l[e]?r.placeholder:e:void 0}),S=x.val();x.data(e.mask.dataName,function(){return e.map(R,function(e,t){return s[t]&&e!=r.placeholder?e:null}).join("")}),x.attr("readonly")||x.one("unmask",function(){x.unbind(".mask").removeData(e.mask.dataName)}).bind("focus.mask",function(){clearTimeout(n);var e;S=x.val(),e=y(),n=setTimeout(function(){b(),e==t.length?x.caret(0,e):x.caret(e)},10)}).bind("blur.mask",function(){y(),x.val()!=S&&x.change()}).bind("keydown.mask",g).bind("keypress.mask",v).bind(a,function(){setTimeout(function(){var e=y(!0);x.caret(e),r.completed&&e==x.val().length&&r.completed.call(x)},0)}),y()}))}})})(jQuery); \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/js/jquery.placeholders.2.1.1.min.js b/src/wp-content/plugins/gravityforms/js/jquery.placeholders.2.1.1.min.js new file mode 100644 index 0000000..cf22897 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/jquery.placeholders.2.1.1.min.js @@ -0,0 +1,2 @@ +/* Placeholders.js v2.1.1 */ +(function(t){"use strict";function e(t,e,r){return t.addEventListener?t.addEventListener(e,r,!1):t.attachEvent?t.attachEvent("on"+e,r):void 0}function r(t,e){var r,n;for(r=0,n=t.length;n>r;r++)if(t[r]===e)return!0;return!1}function n(t,e){var r;t.createTextRange?(r=t.createTextRange(),r.move("character",e),r.select()):t.selectionStart&&(t.focus(),t.setSelectionRange(e,e))}function a(t,e){try{return t.type=e,!0}catch(r){return!1}}t.Placeholders={Utils:{addEventListener:e,inArray:r,moveCaret:n,changeType:a}}})(this),function(t){"use strict";function e(){}function r(t,e){var r,n,a=!!e&&t.value!==e,u=t.value===t.getAttribute(V);return(a||u)&&"true"===t.getAttribute(D)?(t.setAttribute(D,"false"),t.value=t.value.replace(t.getAttribute(V),""),t.className=t.className.replace(R,""),n=t.getAttribute(z),n&&(t.setAttribute("maxLength",n),t.removeAttribute(z)),r=t.getAttribute(I),r&&(t.type=r),!0):!1}function n(t){var e,r,n=t.getAttribute(V);return""===t.value&&n?(t.setAttribute(D,"true"),t.value=n,t.className+=" "+k,r=t.getAttribute(z),r||(t.setAttribute(z,t.maxLength),t.removeAttribute("maxLength")),e=t.getAttribute(I),e?t.type="text":"password"===t.type&&K.changeType(t,"text")&&t.setAttribute(I,"password"),!0):!1}function a(t,e){var r,n,a,u,i;if(t&&t.getAttribute(V))e(t);else for(r=t?t.getElementsByTagName("input"):p,n=t?t.getElementsByTagName("textarea"):h,i=0,u=r.length+n.length;u>i;i++)a=r.length>i?r[i]:n[i-r.length],e(a)}function u(t){a(t,r)}function i(t){a(t,n)}function l(t){return function(){b&&t.value===t.getAttribute(V)&&"true"===t.getAttribute(D)?K.moveCaret(t,0):r(t)}}function o(t){return function(){n(t)}}function c(t){return function(e){return m=t.value,"true"===t.getAttribute(D)&&m===t.getAttribute(V)&&K.inArray(C,e.keyCode)?(e.preventDefault&&e.preventDefault(),!1):void 0}}function s(t){return function(){r(t,m),""===t.value&&(t.blur(),K.moveCaret(t,0))}}function d(t){return function(){t===document.activeElement&&t.value===t.getAttribute(V)&&"true"===t.getAttribute(D)&&K.moveCaret(t,0)}}function g(t){return function(){u(t)}}function v(t){t.form&&(L=t.form,L.getAttribute(P)||(K.addEventListener(L,"submit",g(L)),L.setAttribute(P,"true"))),K.addEventListener(t,"focus",l(t)),K.addEventListener(t,"blur",o(t)),b&&(K.addEventListener(t,"keydown",c(t)),K.addEventListener(t,"keyup",s(t)),K.addEventListener(t,"click",d(t))),t.setAttribute(U,"true"),t.setAttribute(V,E),n(t)}var p,h,b,f,m,A,y,E,x,L,T,N,S,w=["text","search","url","tel","email","password","number","textarea"],C=[27,33,34,35,36,37,38,39,40,8,46],B="#ccc",k="placeholdersjs",R=RegExp("(?:^|\\s)"+k+"(?!\\S)"),V="data-placeholder-value",D="data-placeholder-active",I="data-placeholder-type",P="data-placeholder-submit",U="data-placeholder-bound",j="data-placeholder-focus",q="data-placeholder-live",z="data-placeholder-maxlength",F=document.createElement("input"),G=document.getElementsByTagName("head")[0],H=document.documentElement,J=t.Placeholders,K=J.Utils;if(J.nativeSupport=void 0!==F.placeholder,!J.nativeSupport){for(p=document.getElementsByTagName("input"),h=document.getElementsByTagName("textarea"),b="false"===H.getAttribute(j),f="false"!==H.getAttribute(q),A=document.createElement("style"),A.type="text/css",y=document.createTextNode("."+k+" { color:"+B+"; }"),A.styleSheet?A.styleSheet.cssText=y.nodeValue:A.appendChild(y),G.insertBefore(A,G.firstChild),S=0,N=p.length+h.length;N>S;S++)T=p.length>S?p[S]:h[S-p.length],E=T.attributes.placeholder,E&&(E=E.nodeValue,E&&K.inArray(w,T.type)&&v(T));x=setInterval(function(){for(S=0,N=p.length+h.length;N>S;S++)T=p.length>S?p[S]:h[S-p.length],E=T.attributes.placeholder,E&&(E=E.nodeValue,E&&K.inArray(w,T.type)&&(T.getAttribute(U)||v(T),(E!==T.getAttribute(V)||"password"===T.type&&!T.getAttribute(I))&&("password"===T.type&&!T.getAttribute(I)&&K.changeType(T,"text")&&T.setAttribute(I,"password"),T.value===T.getAttribute(V)&&(T.value=E),T.setAttribute(V,E))));f||clearInterval(x)},100)}J.disable=J.nativeSupport?e:u,J.enable=J.nativeSupport?e:i}(this); \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/js/jquery.textareaCounter.plugin.js b/src/wp-content/plugins/gravityforms/js/jquery.textareaCounter.plugin.js new file mode 100644 index 0000000..24836d5 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/jquery.textareaCounter.plugin.js @@ -0,0 +1,167 @@ +/* + * jQuery Textarea Characters Counter Plugin v 2.0 + * Examples and documentation at: http://roy-jin.appspot.com/jsp/textareaCounter.jsp + * Copyright (c) 2010 Roy Jin + * Version: 2.0 (11-JUN-2010) + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * Requires: jQuery v1.4.2 or later + */ +(function($){ + $.fn.textareaCount = function(options, fn) { + var defaults = { + maxCharacterSize: -1, + originalStyle: 'originalTextareaInfo', + warningStyle: 'warningTextareaInfo', + warningNumber: 20, + displayFormat: '#input characters | #words words' + }; + + var options = $.extend(defaults, options); + + var container = $(this); + + $("
               
              ").insertAfter(container); + + + //create charleft css + var charLeftCss = { + 'width' : container.width() + }; + + var charLeftInfo = getNextCharLeftInformation(container); + charLeftInfo.addClass(options.originalStyle); + //charLeftInfo.css(charLeftCss); + + + var numInput = 0; + var maxCharacters = options.maxCharacterSize; + var numLeft = 0; + var numWords = 0; + + container.bind('keyup', function(event){limitTextAreaByCharacterCount();}) + .bind('mouseover', function(event){setTimeout(function(){limitTextAreaByCharacterCount();}, 10);}) + .bind('paste', function(event){setTimeout(function(){limitTextAreaByCharacterCount();}, 10);}); + + limitTextAreaByCharacterCount(); + + function limitTextAreaByCharacterCount(){ + charLeftInfo.html(countByCharacters()); + + //function call back + if(typeof fn != 'undefined'){ + fn.call(this, getInfo()); + } + return true; + } + + function countByCharacters(){ + var content = container.val(); + var contentLength = content.length; + //Start Cut + if(options.maxCharacterSize > 0){ + //If copied content is already more than maxCharacterSize, chop it to maxCharacterSize. + if(contentLength >= options.maxCharacterSize) { + content = content.substring(0, options.maxCharacterSize); + } + + var newlineCount = getNewlineCount(content); + + // newlineCount new line character. For windows, it occupies 2 characters + var systemmaxCharacterSize = options.maxCharacterSize - newlineCount; + if (!isWin()){ + systemmaxCharacterSize = options.maxCharacterSize + } + if(contentLength > systemmaxCharacterSize){ + //avoid scroll bar moving + var originalScrollTopPosition = this.scrollTop; + container.val(content.substring(0, systemmaxCharacterSize)); + this.scrollTop = originalScrollTopPosition; + } + charLeftInfo.removeClass(options.warningStyle); + if(systemmaxCharacterSize - contentLength <= options.warningNumber){ + charLeftInfo.addClass(options.warningStyle); + } + + numInput = container.val().length + newlineCount; + if(!isWin()){ + numInput = container.val().length; + } + + numWords = countWord(getCleanedWordString(container.val())); + + numLeft = maxCharacters - numInput; + } else { + //normal count, no cut + var newlineCount = getNewlineCount(content); + numInput = container.val().length + newlineCount; + if(!isWin()){ + numInput = container.val().length; + } + numWords = countWord(getCleanedWordString(container.val())); + } + + return formatDisplayInfo(); + } + + function formatDisplayInfo(){ + var format = options.displayFormat; + format = format.replace('#input', numInput); + format = format.replace('#words', numWords); + //When maxCharacters <= 0, #max, #left cannot be substituted. + if(maxCharacters > 0){ + format = format.replace('#max', maxCharacters); + format = format.replace('#left', numLeft); + } + return format; + } + + function getInfo(){ + var info = { + input: numInput, + max: maxCharacters, + left: numLeft, + words: numWords + }; + return info; + } + + function getNextCharLeftInformation(container){ + return container.next('.charleft'); + } + + function isWin(){ + var strOS = navigator.appVersion; + if (strOS.toLowerCase().indexOf('win') != -1){ + return true; + } + return false; + } + + function getNewlineCount(content){ + var newlineCount = 0; + for(var i=0; i
              '); +}); \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/js/thickbox.css b/src/wp-content/plugins/gravityforms/js/thickbox.css new file mode 100644 index 0000000..43f9081 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/thickbox.css @@ -0,0 +1,162 @@ + +/* ----------------------------------------------------------------------------------------------------------------*/ +/* ---------->>> thickbox specific link and font settings <<<------------------------------------------------------*/ +/* ----------------------------------------------------------------------------------------------------------------*/ +#TB_window { + font: 12px "Lucida Grande", Verdana, Arial, sans-serif; + color: #333333; +} + +#TB_secondLine { + font: 10px "Lucida Grande", Verdana, Arial, sans-serif; + color:#666666; +} + +#TB_window a:link {color: #666666;} +#TB_window a:visited {color: #666666;} +#TB_window a:hover {color: #000;} +#TB_window a:active {color: #666666;} +#TB_window a:focus{color: #666666;} + +/* ----------------------------------------------------------------------------------------------------------------*/ +/* ---------->>> thickbox settings <<<-----------------------------------------------------------------------------*/ +/* ----------------------------------------------------------------------------------------------------------------*/ +#TB_overlay { + position: fixed; + z-index:100; + top: 0px; + left: 0px; + height:100%; + width:100%; +} + +.TB_overlayMacFFBGHack {background: url(macFFBgHack.png) repeat;} +.TB_overlayBG { + background-color:#000; + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)"; + filter:alpha(opacity=75); + -moz-opacity: 0.75; + opacity: 0.75; +} + +* html #TB_overlay { /* ie6 hack */ + position: absolute; + height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); +} + +#TB_window { + position: fixed; + background: #ffffff; + z-index: 102; + color:#000000; + visibility: hidden; + text-align:left; + top:50%; + left:50%; + border: 1px solid #555; + -moz-box-shadow: rgba(0,0,0,1) 0 4px 30px; + -webkit-box-shadow: rgba(0,0,0,1) 0 4px 30px; + -khtml-box-shadow: rgba(0,0,0,1) 0 4px 30px; + box-shadow: rgba(0,0,0,1) 0 4px 30px; +} + +* html #TB_window { /* ie6 hack */ +position: absolute; +margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); +} + +#TB_window img#TB_Image { + display:block; + margin: 15px 0 0 15px; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + border-top: 1px solid #666; + border-left: 1px solid #666; +} + +#TB_caption{ + height:25px; + padding:7px 30px 10px 25px; + float:left; +} + +#TB_closeWindow{ + height:25px; + padding:11px 25px 10px 0; + float:right; +} + +#TB_closeAjaxWindow{ + padding:6px 10px 0; + text-align:right; + float:right; +} + +#TB_ajaxWindowTitle{ + float:left; + padding:6px 10px 0; +} + +#TB_title{ + background-color:#e8e8e8; + height:27px; +} + +#TB_ajaxContent{ + clear:both; + padding:2px 15px 15px 15px; + overflow:auto; + text-align:left; + line-height:1.4em; +} + +#TB_ajaxContent.TB_modal{ + padding:15px; +} + +#TB_ajaxContent p{ + padding:5px 0px 5px 0px; +} + +#TB_load{ + position: fixed; + display:none; + z-index:103; + top: 50%; + left: 50%; + background-color: #E8E8E8; + border: 1px solid #555; + margin: -45px 0pt 0pt -125px; + padding: 40px 15px 15px; +} + +* html #TB_load { /* ie6 hack */ +position: absolute; +margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); +} + +#TB_HideSelect{ + z-index:99; + position:fixed; + top: 0; + left: 0; + background-color:#fff; + border:none; + filter:alpha(opacity=0); + -moz-opacity: 0; + opacity: 0; + height:100%; + width:100%; +} + +* html #TB_HideSelect { /* ie6 hack */ + position: absolute; + height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); +} + +#TB_iframeContent{ + clear:both; + border:none; + margin-bottom:-1px; + _margin-bottom:1px; +} diff --git a/src/wp-content/plugins/gravityforms/js/thickbox.js b/src/wp-content/plugins/gravityforms/js/thickbox.js new file mode 100644 index 0000000..f9ee1fe --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/thickbox.js @@ -0,0 +1,339 @@ +/* + * Thickbox 3.1 - One Box To Rule Them All. + * By Cody Lindley (http://www.codylindley.com) + * Copyright (c) 2007 cody lindley + * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php +*/ + +if ( typeof tb_pathToImage != 'string' ) { + var tb_pathToImage = thickboxL10n.loadingAnimation; +} +if ( typeof tb_closeImage != 'string' ) { + var tb_closeImage = thickboxL10n.closeImage; +} + +/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/ + +//on page load call tb_init +jQuery(document).ready(function(){ + tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox + imgLoader = new Image();// preload image + imgLoader.src = tb_pathToImage; +}); + +//add thickbox to href & area elements that have a class of .thickbox +function tb_init(domChunk){ + jQuery('body').on('click', domChunk, tb_click); +} + +function tb_click(){ + var t = this.title || this.name || null; + var a = this.href || this.alt; + var g = this.rel || false; + tb_show(t,a,g); + this.blur(); + return false; +} +var __inlineId = ""; +function tb_show(caption, url, imageGroup) {//function called when the user clicks on a thickbox link + + try { + if (typeof document.body.style.maxHeight === "undefined") {//if IE 6 + jQuery("body","html").css({height: "100%", width: "100%"}); + jQuery("html").css("overflow","hidden"); + if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6 + jQuery("body").append("
              "); + jQuery("#TB_overlay").click(tb_remove); + } + }else{//all others + if(document.getElementById("TB_overlay") === null){ + jQuery("body").append("
              "); + jQuery("#TB_overlay").click(tb_remove); + } + } + + if(tb_detectMacXFF()){ + jQuery("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash + }else{ + jQuery("#TB_overlay").addClass("TB_overlayBG");//use background and opacity + } + + if(caption===null){caption="";} + jQuery("body").append("
              ");//add loader to the page + jQuery('#TB_load').show();//show loader + + var baseURL; + if(url.indexOf("?")!==-1){ //ff there is a query string involved + baseURL = url.substr(0, url.indexOf("?")); + }else{ + baseURL = url; + } + + var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/; + var urlType = baseURL.toLowerCase().match(urlString); + + if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images + + TB_PrevCaption = ""; + TB_PrevURL = ""; + TB_PrevHTML = ""; + TB_NextCaption = ""; + TB_NextURL = ""; + TB_NextHTML = ""; + TB_imageCount = ""; + TB_FoundURL = false; + if(imageGroup){ + TB_TempArray = jQuery("a[rel="+imageGroup+"]").get(); + for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) { + var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString); + if (!(TB_TempArray[TB_Counter].href == url)) { + if (TB_FoundURL) { + TB_NextCaption = TB_TempArray[TB_Counter].title; + TB_NextURL = TB_TempArray[TB_Counter].href; + TB_NextHTML = "  "+thickboxL10n.next+""; + } else { + TB_PrevCaption = TB_TempArray[TB_Counter].title; + TB_PrevURL = TB_TempArray[TB_Counter].href; + TB_PrevHTML = "  "+thickboxL10n.prev+""; + } + } else { + TB_FoundURL = true; + TB_imageCount = thickboxL10n.image + ' ' + (TB_Counter + 1) + ' ' + thickboxL10n.of + ' ' + (TB_TempArray.length); + } + } + } + + imgPreloader = new Image(); + imgPreloader.onload = function(){ + imgPreloader.onload = null; + + // Resizing large images - orginal by Christian Montoya edited by me. + var pagesize = tb_getPageSize(); + var x = pagesize[0] - 150; + var y = pagesize[1] - 150; + var imageWidth = imgPreloader.width; + var imageHeight = imgPreloader.height; + if (imageWidth > x) { + imageHeight = imageHeight * (x / imageWidth); + imageWidth = x; + if (imageHeight > y) { + imageWidth = imageWidth * (y / imageHeight); + imageHeight = y; + } + } else if (imageHeight > y) { + imageWidth = imageWidth * (y / imageHeight); + imageHeight = y; + if (imageWidth > x) { + imageHeight = imageHeight * (x / imageWidth); + imageWidth = x; + } + } + // End Resizing + + TB_WIDTH = imageWidth + 30; + TB_HEIGHT = imageHeight + 60; + jQuery("#TB_window").append(""+caption+"" + "
              "+caption+"
              " + TB_imageCount + TB_PrevHTML + TB_NextHTML + "
              "); + + jQuery("#TB_closeWindowButton").click(tb_remove); + + if (!(TB_PrevHTML === "")) { + function goPrev(){ + if(jQuery(document).unbind("click",goPrev)){jQuery(document).unbind("click",goPrev);} + jQuery("#TB_window").remove(); + jQuery("body").append("
              "); + tb_show(TB_PrevCaption, TB_PrevURL, imageGroup); + return false; + } + jQuery("#TB_prev").click(goPrev); + } + + if (!(TB_NextHTML === "")) { + function goNext(){ + jQuery("#TB_window").remove(); + jQuery("body").append("
              "); + tb_show(TB_NextCaption, TB_NextURL, imageGroup); + return false; + } + jQuery("#TB_next").click(goNext); + + } + + jQuery(document).bind('keydown.thickbox', function(e){ + e.stopImmediatePropagation(); + + if ( e.which == 27 ){ // close + if ( ! jQuery(document).triggerHandler( 'wp_CloseOnEscape', [{ event: e, what: 'thickbox', cb: tb_remove }] ) ) + tb_remove(); + + } else if ( e.which == 190 ){ // display previous image + if(!(TB_NextHTML == "")){ + jQuery(document).unbind('thickbox'); + goNext(); + } + } else if ( e.which == 188 ){ // display next image + if(!(TB_PrevHTML == "")){ + jQuery(document).unbind('thickbox'); + goPrev(); + } + } + return false; + }); + + tb_position(); + jQuery("#TB_load").remove(); + jQuery("#TB_ImageOff").click(tb_remove); + jQuery("#TB_window").css({'visibility':'visible'}); //for safari using css instead of show + }; + + imgPreloader.src = url; + }else{//code to show html + + var queryString = url.replace(/^[^\?]+\??/,''); + var params = tb_parseQuery( queryString ); + __inlineId = params["inlineId"]; + + TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no paramaters were added to URL + TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no paramaters were added to URL + ajaxContentW = TB_WIDTH - 30; + ajaxContentH = TB_HEIGHT - 45; + + if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window + urlNoQuery = url.split('TB_'); + jQuery("#TB_iframeContent").remove(); + if(params['modal'] != "true"){//iframe no modal + jQuery("#TB_window").append("
              "+caption+"
              "); + }else{//iframe modal + jQuery("#TB_overlay").unbind(); + jQuery("#TB_window").append(""); + } + }else{// not an iframe, ajax + if(jQuery("#TB_window").css("visibility") != "visible"){ + if(params['modal'] != "true"){//ajax no modal + jQuery("#TB_window").append("
              "+caption+"
              "); + }else{//ajax modal + jQuery("#TB_overlay").unbind(); + jQuery("#TB_window").append("
              "); + } + }else{//this means the window is already up, we are just loading new content via ajax + jQuery("#TB_ajaxContent")[0].style.width = ajaxContentW +"px"; + jQuery("#TB_ajaxContent")[0].style.height = ajaxContentH +"px"; + jQuery("#TB_ajaxContent")[0].scrollTop = 0; + jQuery("#TB_ajaxWindowTitle").html(caption); + } + } + + jQuery("#TB_closeWindowButton").click(tb_remove); + + if(url.indexOf('TB_inline') != -1){ + jQuery("#TB_ajaxContent").append(jQuery('#' + params['inlineId']).children()); + jQuery("#TB_window").unload(function () { + + jQuery('#' + params['inlineId']).append( jQuery("#TB_ajaxContent").children() ); // move elements back when you're finished + }); + tb_position(); + jQuery("#TB_load").remove(); + jQuery("#TB_window").css({'visibility':'visible'}); + }else if(url.indexOf('TB_iframe') != -1){ + tb_position(); + if(jQuery.browser.safari){//safari needs help because it will not fire iframe onload + jQuery("#TB_load").remove(); + jQuery("#TB_window").css({'visibility':'visible'}); + } + }else{ + jQuery("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method + tb_position(); + jQuery("#TB_load").remove(); + tb_init("#TB_ajaxContent a.thickbox"); + jQuery("#TB_window").css({'visibility':'visible'}); + }); + } + + } + + if(!params['modal']){ + jQuery(document).bind('keyup.thickbox', function(e){ + + if ( e.which == 27 ){ // close + e.stopImmediatePropagation(); + if ( ! jQuery(document).triggerHandler( 'wp_CloseOnEscape', [{ event: e, what: 'thickbox', cb: tb_remove }] ) ) + tb_remove(); + + return false; + } + }); + } + + } catch(e) { + //nothing here + } +} + +//helper functions below +function tb_showIframe(){ + jQuery("#TB_load").remove(); + jQuery("#TB_window").css({'visibility':'visible'}); +} + +function tb_remove() { + jQuery("#TB_imageOff").unbind("click"); + jQuery("#TB_closeWindowButton").unbind("click"); + + jQuery("#TB_window").fadeOut("fast", + function(){ + + if(__inlineId){ + jQuery('#'+ __inlineId).append( jQuery("#TB_ajaxContent").children() ); // move elements back when you're finished + __inlineId = ""; + } + + jQuery('#TB_window,#TB_overlay,#TB_HideSelect').unbind().remove(); + + }); + + jQuery("#TB_load").remove(); + if (typeof document.body.style.maxHeight == "undefined") {//if IE 6 + jQuery("body","html").css({height: "auto", width: "auto"}); + jQuery("html").css("overflow",""); + } + jQuery(document).unbind('.thickbox'); + + return false; +} + +function tb_position() { +var isIE6 = typeof document.body.style.maxHeight === "undefined"; +jQuery("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'}); + if ( ! isIE6 ) { // take away IE6 + jQuery("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'}); + } +} + +function tb_parseQuery ( query ) { + var Params = {}; + if ( ! query ) {return Params;}// return empty object + var Pairs = query.split(/[;&]/); + for ( var i = 0; i < Pairs.length; i++ ) { + var KeyVal = Pairs[i].split('='); + if ( ! KeyVal || KeyVal.length != 2 ) {continue;} + var key = unescape( KeyVal[0] ); + var val = unescape( KeyVal[1] ); + val = val.replace(/\+/g, ' '); + Params[key] = val; + } + return Params; +} + +function tb_getPageSize(){ + var de = document.documentElement; + var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth; + var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight; + arrayPageSize = [w,h]; + return arrayPageSize; +} + +function tb_detectMacXFF() { + var userAgent = navigator.userAgent.toLowerCase(); + if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) { + return true; + } +} diff --git a/src/wp-content/plugins/gravityforms/js/tooltip_init.js b/src/wp-content/plugins/gravityforms/js/tooltip_init.js new file mode 100644 index 0000000..a12a350 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/js/tooltip_init.js @@ -0,0 +1,9 @@ +jQuery(document).ready(function() { + jQuery( ".gf_tooltip" ).tooltip({ + show: 500, + hide: 1000, + content: function () { + return jQuery(this).prop('title'); + } + }); +}); \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-cs_CZ.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-cs_CZ.mo new file mode 100644 index 0000000..0a56c82 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-cs_CZ.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-da_DK.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-da_DK.mo new file mode 100644 index 0000000..10d2e57 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-da_DK.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-de_DE.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-de_DE.mo new file mode 100644 index 0000000..7438b08 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-de_DE.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-es_ES.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-es_ES.mo new file mode 100644 index 0000000..cd73747 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-es_ES.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-fi.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-fi.mo new file mode 100644 index 0000000..79816d0 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-fi.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-fr_FR.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-fr_FR.mo new file mode 100644 index 0000000..1d3862c Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-fr_FR.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-hu_HU.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-hu_HU.mo new file mode 100644 index 0000000..a657011 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-hu_HU.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-it_IT.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-it_IT.mo new file mode 100644 index 0000000..bc679d5 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-it_IT.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-ka_GE.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-ka_GE.mo new file mode 100644 index 0000000..8325cae Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-ka_GE.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-nb_NO.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-nb_NO.mo new file mode 100644 index 0000000..dadbada Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-nb_NO.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-nl_NL.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-nl_NL.mo new file mode 100644 index 0000000..c00cdff Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-nl_NL.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-pt_BR.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-pt_BR.mo new file mode 100644 index 0000000..a9a42fa Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-pt_BR.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-ro_RO.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-ro_RO.mo new file mode 100644 index 0000000..e11cbf6 Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-ro_RO.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms-sv_SE.mo b/src/wp-content/plugins/gravityforms/languages/gravityforms-sv_SE.mo new file mode 100644 index 0000000..4b1a3fc Binary files /dev/null and b/src/wp-content/plugins/gravityforms/languages/gravityforms-sv_SE.mo differ diff --git a/src/wp-content/plugins/gravityforms/languages/gravityforms.pot b/src/wp-content/plugins/gravityforms/languages/gravityforms.pot new file mode 100644 index 0000000..3a4a0a0 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/languages/gravityforms.pot @@ -0,0 +1,8821 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Gravity Forms\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-30 16:10-0500\n" +"PO-Revision-Date: 2013-12-30 16:10-0500\n" +"Last-Translator: Dana Cobb \n" +"Language-Team: Rocketgenius \n" +"Language: en_US\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-KeywordsList: _e;__\n" +"X-Poedit-Basepath: .\n" +"X-Generator: Poedit 1.5.5\n" +"X-Poedit-SearchPath-0: ..\n" + +#: ../common.php:215 ../common.php:491 ../form_detail.php:2216 +msgid "Insert Merge Tag" +msgstr "" + +#: ../common.php:269 ../js.php:894 +msgid "All Submitted Fields" +msgstr "" + +#: ../common.php:338 +msgid "All Pricing Fields" +msgstr "" + +#: ../common.php:346 ../form_detail.php:2218 +msgid "Client IP Address" +msgstr "" + +#: ../common.php:347 ../common.php:348 ../common.php:2177 +#: ../form_detail.php:696 ../form_detail.php:1575 ../form_detail.php:2219 +#: ../form_detail.php:2220 ../js.php:504 ../js.php:894 +#: ../includes/addon/class-gf-payment-addon.php:1061 +msgid "Date" +msgstr "" + +#: ../common.php:349 ../form_detail.php:2221 +msgid "Embed Post/Page Id" +msgstr "" + +#: ../common.php:350 ../form_detail.php:2222 +msgid "Embed Post/Page Title" +msgstr "" + +#: ../common.php:351 ../form_detail.php:2223 +msgid "Embed URL" +msgstr "" + +#: ../common.php:352 ../entry_detail.php:332 ../export.php:701 +#: ../select_columns.php:92 +msgid "Entry Id" +msgstr "" + +#: ../common.php:353 +msgid "Entry URL" +msgstr "" + +#: ../common.php:354 +msgid "Form Id" +msgstr "" + +#: ../common.php:355 ../form_list.php:222 ../js.php:894 ../tooltips.php:28 +#: ../includes/addon/class-gf-feed-addon.php:682 +msgid "Form Title" +msgstr "" + +#: ../common.php:356 ../form_detail.php:2224 +msgid "HTTP User Agent" +msgstr "" + +#: ../common.php:357 ../form_detail.php:2225 +msgid "HTTP Referer URL" +msgstr "" + +#: ../common.php:360 ../export.php:709 +msgid "Post Id" +msgstr "" + +#: ../common.php:361 +msgid "Post Edit URL" +msgstr "" + +#: ../common.php:364 ../form_detail.php:2226 +msgid "User Display Name" +msgstr "" + +#: ../common.php:365 ../form_detail.php:2227 +msgid "User Email" +msgstr "" + +#: ../common.php:366 ../form_detail.php:2228 +msgid "User Login" +msgstr "" + +#: ../common.php:376 +msgid "Required form fields" +msgstr "" + +#: ../common.php:380 +msgid "Optional form fields" +msgstr "" + +#: ../common.php:384 +msgid "Pricing form fields" +msgstr "" + +#: ../common.php:388 ../common.php:4778 ../form_detail.php:1341 +#: ../form_detail.php:1343 +msgid "Other" +msgstr "" + +#: ../common.php:392 ../common.php:521 ../form_detail.php:244 +#: ../form_detail.php:1549 +msgid "Custom" +msgstr "" + +#: ../common.php:457 +msgid "Select image size" +msgstr "" + +#: ../common.php:458 +msgid "Thumbnail" +msgstr "" + +#: ../common.php:459 +msgid "Thumbnail - Left Aligned" +msgstr "" + +#: ../common.php:460 +msgid "Thumbnail - Centered" +msgstr "" + +#: ../common.php:461 +msgid "Thumbnail - Right Aligned" +msgstr "" + +#: ../common.php:463 ../form_detail.php:747 ../form_detail.php:1353 +#: ../form_detail.php:1752 +msgid "Medium" +msgstr "" + +#: ../common.php:464 +msgid "Medium - Left Aligned" +msgstr "" + +#: ../common.php:465 +msgid "Medium - Centered" +msgstr "" + +#: ../common.php:466 +msgid "Medium - Right Aligned" +msgstr "" + +#: ../common.php:468 ../form_detail.php:748 ../form_detail.php:1353 +#: ../form_detail.php:1753 +msgid "Large" +msgstr "" + +#: ../common.php:469 +msgid "Large - Left Aligned" +msgstr "" + +#: ../common.php:470 +msgid "Large - Centered" +msgstr "" + +#: ../common.php:471 +msgid "Large - Right Aligned" +msgstr "" + +#: ../common.php:473 +msgid "Full Size" +msgstr "" + +#: ../common.php:474 +msgid "Full Size - Left Aligned" +msgstr "" + +#: ../common.php:475 +msgid "Full Size - Centered" +msgstr "" + +#: ../common.php:476 +msgid "Full Size - Right Aligned" +msgstr "" + +#: ../common.php:492 +msgid "Allowable form fields" +msgstr "" + +#: ../common.php:1083 ../entry_detail.php:827 +msgid "Order" +msgstr "" + +#: ../common.php:1114 ../common.php:2221 ../entry_detail.php:902 +#: ../gravityforms.php:1234 ../js.php:606 +#: ../includes/addon/class-gf-payment-addon.php:875 +msgid "Total" +msgstr "" + +#: ../common.php:1131 ../common.php:2213 ../entry_detail.php:839 +msgid "Product" +msgstr "" + +#: ../common.php:1132 ../entry_detail.php:840 +msgid "Qty" +msgstr "" + +#: ../common.php:1133 ../entry_detail.php:841 +msgid "Unit Price" +msgstr "" + +#: ../common.php:1134 ../common.php:2842 ../entry_detail.php:842 +#: ../form_detail.php:522 ../form_detail.php:1320 ../js.php:583 ../js.php:642 +msgid "Price" +msgstr "" + +#: ../common.php:1186 +msgid "Total:" +msgstr "" + +#: ../common.php:1799 +#, php-format +msgid "" +"Gravity Forms require WordPress %s or greater. You must upgrade WordPress in " +"order to use Gravity Forms" +msgstr "" + +#: ../common.php:1890 +#, php-format +msgid "%s ago" +msgstr "" + +#: ../common.php:1892 ../common.php:1895 +#, php-format +msgid "%1$s at %2$s" +msgstr "" + +#: ../common.php:2072 ../common.php:2144 +#, php-format +msgid "%d of %d items shown. Edit field to view all" +msgstr "" + +#: ../common.php:2153 +msgid "Single Line Text" +msgstr "" + +#: ../common.php:2155 ../form_detail.php:687 +msgid "Paragraph Text" +msgstr "" + +#: ../common.php:2157 ../form_detail.php:496 ../form_detail.php:513 +#: ../form_detail.php:547 ../form_detail.php:561 ../form_detail.php:576 +#: ../form_detail.php:688 ../form_detail.php:715 ../form_detail.php:909 +msgid "Drop Down" +msgstr "" + +#: ../common.php:2159 ../form_detail.php:689 ../form_detail.php:716 +#: ../form_detail.php:912 +msgid "Multi Select" +msgstr "" + +#: ../common.php:2161 ../form_detail.php:575 ../form_detail.php:690 +#: ../js.php:489 +msgid "Number" +msgstr "" + +#: ../common.php:2163 ../form_detail.php:548 ../form_detail.php:691 +#: ../form_detail.php:717 ../form_detail.php:910 +msgid "Checkboxes" +msgstr "" + +#: ../common.php:2165 ../form_detail.php:497 ../form_detail.php:514 +#: ../form_detail.php:549 ../form_detail.php:563 ../form_detail.php:692 +#: ../form_detail.php:718 ../form_detail.php:911 +msgid "Radio Buttons" +msgstr "" + +#: ../common.php:2167 ../form_detail.php:499 ../form_detail.php:577 +#: ../form_detail.php:693 +msgid "Hidden" +msgstr "" + +#: ../common.php:2169 +msgid "HTML" +msgstr "" + +#: ../common.php:2171 ../js.php:377 +msgid "Section Break" +msgstr "" + +#: ../common.php:2173 ../form_display.php:2449 +msgid "Page Break" +msgstr "" + +#: ../common.php:2175 ../form_settings.php:1411 ../js.php:408 ../js.php:583 +#: ../notification.php:492 ../notification.php:1016 +#: ../includes/addon/class-gf-payment-addon.php:506 +#: ../includes/addon/class-gf-payment-addon.php:550 +msgid "Name" +msgstr "" + +#: ../common.php:2179 ../form_detail.php:697 ../js.php:509 +msgid "Time" +msgstr "" + +#: ../common.php:2181 ../form_detail.php:698 ../js.php:498 +msgid "Phone" +msgstr "" + +#: ../common.php:2183 ../js.php:463 +#: ../includes/addon/class-gf-payment-addon.php:802 +msgid "Address" +msgstr "" + +#: ../common.php:2185 ../form_detail.php:699 ../js.php:514 +msgid "Website" +msgstr "" + +#: ../common.php:2187 ../form_detail.php:700 ../js.php:482 +#: ../includes/addon/class-gf-payment-addon.php:801 +msgid "Email" +msgstr "" + +#: ../common.php:2189 ../js.php:520 +msgid "Password" +msgstr "" + +#: ../common.php:2191 ../form_detail.php:701 +msgid "File Upload" +msgstr "" + +#: ../common.php:2193 +msgid "CAPTCHA" +msgstr "" + +#: ../common.php:2195 ../form_detail.php:702 ../js.php:400 +msgid "List" +msgstr "" + +#: ../common.php:2197 ../js.php:470 +msgid "Credit Card" +msgstr "" + +#: ../common.php:2199 ../common.php:3111 ../common.php:4323 +#: ../form_detail.php:1021 ../form_list.php:390 ../form_list.php:408 +#: ../gravityforms.php:1232 ../widget.php:70 +msgid "Title" +msgstr "" + +#: ../common.php:2201 +msgid "Body" +msgstr "" + +#: ../common.php:2203 +msgid "Excerpt" +msgstr "" + +#: ../common.php:2205 +msgid "Tags" +msgstr "" + +#: ../common.php:2207 ../form_detail.php:921 +msgid "Category" +msgstr "" + +#: ../common.php:2209 ../form_detail.php:416 ../form_detail.php:609 +#: ../form_detail.php:646 ../form_settings.php:441 ../gravityforms.php:1353 +msgid "Image" +msgstr "" + +#: ../common.php:2211 +msgid "Custom Field" +msgstr "" + +#: ../common.php:2215 ../js.php:583 ../js.php:653 +msgid "Quantity" +msgstr "" + +#: ../common.php:2217 ../js.php:612 +msgid "Option" +msgstr "" + +#: ../common.php:2219 ../js.php:595 +msgid "Shipping" +msgstr "" + +#: ../common.php:2316 +msgid "Afghanistan" +msgstr "" + +#: ../common.php:2316 +msgid "Albania" +msgstr "" + +#: ../common.php:2316 +msgid "Algeria" +msgstr "" + +#: ../common.php:2316 +msgid "American Samoa" +msgstr "" + +#: ../common.php:2316 +msgid "Andorra" +msgstr "" + +#: ../common.php:2316 +msgid "Angola" +msgstr "" + +#: ../common.php:2316 +msgid "Antigua and Barbuda" +msgstr "" + +#: ../common.php:2316 +msgid "Argentina" +msgstr "" + +#: ../common.php:2316 +msgid "Armenia" +msgstr "" + +#: ../common.php:2316 ../form_detail.php:1335 +msgid "Australia" +msgstr "" + +#: ../common.php:2316 +msgid "Austria" +msgstr "" + +#: ../common.php:2316 +msgid "Azerbaijan" +msgstr "" + +#: ../common.php:2316 +msgid "Bahamas" +msgstr "" + +#: ../common.php:2316 +msgid "Bahrain" +msgstr "" + +#: ../common.php:2316 +msgid "Bangladesh" +msgstr "" + +#: ../common.php:2316 +msgid "Barbados" +msgstr "" + +#: ../common.php:2316 +msgid "Belarus" +msgstr "" + +#: ../common.php:2316 +msgid "Belgium" +msgstr "" + +#: ../common.php:2316 +msgid "Belize" +msgstr "" + +#: ../common.php:2316 +msgid "Benin" +msgstr "" + +#: ../common.php:2316 +msgid "Bermuda" +msgstr "" + +#: ../common.php:2316 +msgid "Bhutan" +msgstr "" + +#: ../common.php:2316 +msgid "Bolivia" +msgstr "" + +#: ../common.php:2316 +msgid "Bosnia and Herzegovina" +msgstr "" + +#: ../common.php:2316 +msgid "Botswana" +msgstr "" + +#: ../common.php:2316 +msgid "Brazil" +msgstr "" + +#: ../common.php:2316 +msgid "Brunei" +msgstr "" + +#: ../common.php:2316 +msgid "Bulgaria" +msgstr "" + +#: ../common.php:2316 +msgid "Burkina Faso" +msgstr "" + +#: ../common.php:2316 +msgid "Burundi" +msgstr "" + +#: ../common.php:2316 +msgid "Cambodia" +msgstr "" + +#: ../common.php:2316 +msgid "Cameroon" +msgstr "" + +#: ../common.php:2316 +msgid "Canada" +msgstr "" + +#: ../common.php:2316 +msgid "Cape Verde" +msgstr "" + +#: ../common.php:2316 +msgid "Cayman Islands" +msgstr "" + +#: ../common.php:2316 +msgid "Central African Republic" +msgstr "" + +#: ../common.php:2316 +msgid "Chad" +msgstr "" + +#: ../common.php:2316 +msgid "Chile" +msgstr "" + +#: ../common.php:2316 +msgid "China" +msgstr "" + +#: ../common.php:2316 +msgid "Colombia" +msgstr "" + +#: ../common.php:2316 +msgid "Comoros" +msgstr "" + +#: ../common.php:2316 +msgid "Congo, Democratic Republic of the" +msgstr "" + +#: ../common.php:2316 +msgid "Congo, Republic of the" +msgstr "" + +#: ../common.php:2316 +msgid "Costa Rica" +msgstr "" + +#: ../common.php:2316 +msgid "Côte d'Ivoire" +msgstr "" + +#: ../common.php:2316 +msgid "Croatia" +msgstr "" + +#: ../common.php:2316 +msgid "Cuba" +msgstr "" + +#: ../common.php:2316 +msgid "Cyprus" +msgstr "" + +#: ../common.php:2316 +msgid "Czech Republic" +msgstr "" + +#: ../common.php:2316 +msgid "Denmark" +msgstr "" + +#: ../common.php:2316 +msgid "Djibouti" +msgstr "" + +#: ../common.php:2316 +msgid "Dominica" +msgstr "" + +#: ../common.php:2316 +msgid "Dominican Republic" +msgstr "" + +#: ../common.php:2316 +msgid "East Timor" +msgstr "" + +#: ../common.php:2316 +msgid "Ecuador" +msgstr "" + +#: ../common.php:2316 +msgid "Egypt" +msgstr "" + +#: ../common.php:2316 +msgid "El Salvador" +msgstr "" + +#: ../common.php:2316 +msgid "Equatorial Guinea" +msgstr "" + +#: ../common.php:2316 +msgid "Eritrea" +msgstr "" + +#: ../common.php:2316 +msgid "Estonia" +msgstr "" + +#: ../common.php:2316 +msgid "Ethiopia" +msgstr "" + +#: ../common.php:2316 +msgid "Fiji" +msgstr "" + +#: ../common.php:2316 +msgid "Finland" +msgstr "" + +#: ../common.php:2316 +msgid "France" +msgstr "" + +#: ../common.php:2316 +msgid "Gabon" +msgstr "" + +#: ../common.php:2317 +msgid "Gambia" +msgstr "" + +#: ../common.php:2317 ../common.php:2538 ../common.php:2553 +msgid "Georgia" +msgstr "" + +#: ../common.php:2317 +msgid "Germany" +msgstr "" + +#: ../common.php:2317 +msgid "Ghana" +msgstr "" + +#: ../common.php:2317 +msgid "Greece" +msgstr "" + +#: ../common.php:2317 +msgid "Greenland" +msgstr "" + +#: ../common.php:2317 +msgid "Grenada" +msgstr "" + +#: ../common.php:2317 +msgid "Guam" +msgstr "" + +#: ../common.php:2317 +msgid "Guatemala" +msgstr "" + +#: ../common.php:2317 +msgid "Guinea" +msgstr "" + +#: ../common.php:2317 +msgid "Guinea-Bissau" +msgstr "" + +#: ../common.php:2317 +msgid "Guyana" +msgstr "" + +#: ../common.php:2317 +msgid "Haiti" +msgstr "" + +#: ../common.php:2317 +msgid "Honduras" +msgstr "" + +#: ../common.php:2317 +msgid "Hong Kong" +msgstr "" + +#: ../common.php:2317 +msgid "Hungary" +msgstr "" + +#: ../common.php:2317 +msgid "Iceland" +msgstr "" + +#: ../common.php:2317 +msgid "India" +msgstr "" + +#: ../common.php:2317 +msgid "Indonesia" +msgstr "" + +#: ../common.php:2317 +msgid "Iran" +msgstr "" + +#: ../common.php:2317 +msgid "Iraq" +msgstr "" + +#: ../common.php:2317 +msgid "Ireland" +msgstr "" + +#: ../common.php:2317 +msgid "Israel" +msgstr "" + +#: ../common.php:2317 +msgid "Italy" +msgstr "" + +#: ../common.php:2317 +msgid "Jamaica" +msgstr "" + +#: ../common.php:2317 +msgid "Japan" +msgstr "" + +#: ../common.php:2317 +msgid "Jordan" +msgstr "" + +#: ../common.php:2317 +msgid "Kazakhstan" +msgstr "" + +#: ../common.php:2317 +msgid "Kenya" +msgstr "" + +#: ../common.php:2317 +msgid "Kiribati" +msgstr "" + +#: ../common.php:2317 +msgid "North Korea" +msgstr "" + +#: ../common.php:2317 +msgid "South Korea" +msgstr "" + +#: ../common.php:2317 +msgid "Kosovo" +msgstr "" + +#: ../common.php:2317 +msgid "Kuwait" +msgstr "" + +#: ../common.php:2317 +msgid "Kyrgyzstan" +msgstr "" + +#: ../common.php:2317 +msgid "Laos" +msgstr "" + +#: ../common.php:2317 +msgid "Latvia" +msgstr "" + +#: ../common.php:2317 +msgid "Lebanon" +msgstr "" + +#: ../common.php:2317 +msgid "Lesotho" +msgstr "" + +#: ../common.php:2317 +msgid "Liberia" +msgstr "" + +#: ../common.php:2317 +msgid "Libya" +msgstr "" + +#: ../common.php:2317 +msgid "Liechtenstein" +msgstr "" + +#: ../common.php:2317 +msgid "Lithuania" +msgstr "" + +#: ../common.php:2317 +msgid "Luxembourg" +msgstr "" + +#: ../common.php:2317 +msgid "Macedonia" +msgstr "" + +#: ../common.php:2317 +msgid "Madagascar" +msgstr "" + +#: ../common.php:2317 +msgid "Malawi" +msgstr "" + +#: ../common.php:2317 +msgid "Malaysia" +msgstr "" + +#: ../common.php:2317 +msgid "Maldives" +msgstr "" + +#: ../common.php:2317 +msgid "Mali" +msgstr "" + +#: ../common.php:2317 +msgid "Malta" +msgstr "" + +#: ../common.php:2317 +msgid "Marshall Islands" +msgstr "" + +#: ../common.php:2317 +msgid "Mauritania" +msgstr "" + +#: ../common.php:2317 +msgid "Mauritius" +msgstr "" + +#: ../common.php:2317 +msgid "Mexico" +msgstr "" + +#: ../common.php:2317 +msgid "Micronesia" +msgstr "" + +#: ../common.php:2317 +msgid "Moldova" +msgstr "" + +#: ../common.php:2317 +msgid "Monaco" +msgstr "" + +#: ../common.php:2317 +msgid "Mongolia" +msgstr "" + +#: ../common.php:2317 +msgid "Montenegro" +msgstr "" + +#: ../common.php:2317 +msgid "Morocco" +msgstr "" + +#: ../common.php:2317 +msgid "Mozambique" +msgstr "" + +#: ../common.php:2317 +msgid "Myanmar" +msgstr "" + +#: ../common.php:2317 +msgid "Namibia" +msgstr "" + +#: ../common.php:2317 +msgid "Nauru" +msgstr "" + +#: ../common.php:2317 +msgid "Nepal" +msgstr "" + +#: ../common.php:2317 +msgid "Netherlands" +msgstr "" + +#: ../common.php:2317 +msgid "New Zealand" +msgstr "" + +#: ../common.php:2318 +msgid "Nicaragua" +msgstr "" + +#: ../common.php:2318 +msgid "Niger" +msgstr "" + +#: ../common.php:2318 +msgid "Nigeria" +msgstr "" + +#: ../common.php:2318 +msgid "Norway" +msgstr "" + +#: ../common.php:2318 +msgid "Northern Mariana Islands" +msgstr "" + +#: ../common.php:2318 +msgid "Oman" +msgstr "" + +#: ../common.php:2318 +msgid "Pakistan" +msgstr "" + +#: ../common.php:2318 +msgid "Palau" +msgstr "" + +#: ../common.php:2318 +msgid "Palestine" +msgstr "" + +#: ../common.php:2318 +msgid "Panama" +msgstr "" + +#: ../common.php:2318 +msgid "Papua New Guinea" +msgstr "" + +#: ../common.php:2318 +msgid "Paraguay" +msgstr "" + +#: ../common.php:2318 +msgid "Peru" +msgstr "" + +#: ../common.php:2318 +msgid "Philippines" +msgstr "" + +#: ../common.php:2318 +msgid "Poland" +msgstr "" + +#: ../common.php:2318 +msgid "Portugal" +msgstr "" + +#: ../common.php:2318 +msgid "Puerto Rico" +msgstr "" + +#: ../common.php:2318 +msgid "Qatar" +msgstr "" + +#: ../common.php:2318 +msgid "Romania" +msgstr "" + +#: ../common.php:2318 +msgid "Russia" +msgstr "" + +#: ../common.php:2318 +msgid "Rwanda" +msgstr "" + +#: ../common.php:2318 +msgid "Saint Kitts and Nevis" +msgstr "" + +#: ../common.php:2318 +msgid "Saint Lucia" +msgstr "" + +#: ../common.php:2318 +msgid "Saint Vincent and the Grenadines" +msgstr "" + +#: ../common.php:2318 +msgid "Samoa" +msgstr "" + +#: ../common.php:2318 +msgid "San Marino" +msgstr "" + +#: ../common.php:2318 +msgid "Sao Tome and Principe" +msgstr "" + +#: ../common.php:2318 +msgid "Saudi Arabia" +msgstr "" + +#: ../common.php:2318 +msgid "Senegal" +msgstr "" + +#: ../common.php:2318 +msgid "Serbia and Montenegro" +msgstr "" + +#: ../common.php:2318 +msgid "Seychelles" +msgstr "" + +#: ../common.php:2318 +msgid "Sierra Leone" +msgstr "" + +#: ../common.php:2318 +msgid "Singapore" +msgstr "" + +#: ../common.php:2318 +msgid "Slovakia" +msgstr "" + +#: ../common.php:2318 +msgid "Slovenia" +msgstr "" + +#: ../common.php:2318 +msgid "Solomon Islands" +msgstr "" + +#: ../common.php:2318 +msgid "Somalia" +msgstr "" + +#: ../common.php:2318 +msgid "South Africa" +msgstr "" + +#: ../common.php:2318 +msgid "Spain" +msgstr "" + +#: ../common.php:2318 +msgid "Sri Lanka" +msgstr "" + +#: ../common.php:2318 +msgid "Sudan" +msgstr "" + +#: ../common.php:2318 +msgid "Sudan, South" +msgstr "" + +#: ../common.php:2318 +msgid "Suriname" +msgstr "" + +#: ../common.php:2318 +msgid "Swaziland" +msgstr "" + +#: ../common.php:2318 +msgid "Sweden" +msgstr "" + +#: ../common.php:2318 +msgid "Switzerland" +msgstr "" + +#: ../common.php:2318 +msgid "Syria" +msgstr "" + +#: ../common.php:2318 +msgid "Taiwan" +msgstr "" + +#: ../common.php:2318 +msgid "Tajikistan" +msgstr "" + +#: ../common.php:2318 +msgid "Tanzania" +msgstr "" + +#: ../common.php:2318 +msgid "Thailand" +msgstr "" + +#: ../common.php:2318 +msgid "Togo" +msgstr "" + +#: ../common.php:2318 +msgid "Tonga" +msgstr "" + +#: ../common.php:2318 +msgid "Trinidad and Tobago" +msgstr "" + +#: ../common.php:2318 +msgid "Tunisia" +msgstr "" + +#: ../common.php:2318 +msgid "Turkey" +msgstr "" + +#: ../common.php:2318 +msgid "Turkmenistan" +msgstr "" + +#: ../common.php:2318 +msgid "Tuvalu" +msgstr "" + +#: ../common.php:2318 +msgid "Uganda" +msgstr "" + +#: ../common.php:2318 +msgid "Ukraine" +msgstr "" + +#: ../common.php:2318 +msgid "United Arab Emirates" +msgstr "" + +#: ../common.php:2318 +msgid "United Kingdom" +msgstr "" + +#: ../common.php:2319 ../common.php:4121 +msgid "United States" +msgstr "" + +#: ../common.php:2319 +msgid "Uruguay" +msgstr "" + +#: ../common.php:2319 +msgid "Uzbekistan" +msgstr "" + +#: ../common.php:2319 +msgid "Vanuatu" +msgstr "" + +#: ../common.php:2319 +msgid "Vatican City" +msgstr "" + +#: ../common.php:2319 +msgid "Venezuela" +msgstr "" + +#: ../common.php:2319 +msgid "Vietnam" +msgstr "" + +#: ../common.php:2319 +msgid "Virgin Islands, British" +msgstr "" + +#: ../common.php:2319 +msgid "Virgin Islands, U.S." +msgstr "" + +#: ../common.php:2319 +msgid "Yemen" +msgstr "" + +#: ../common.php:2319 +msgid "Zambia" +msgstr "" + +#: ../common.php:2319 +msgid "Zimbabwe" +msgstr "" + +#: ../common.php:2326 +msgid "AFGHANISTAN" +msgstr "" + +#: ../common.php:2327 +msgid "ALBANIA" +msgstr "" + +#: ../common.php:2328 +msgid "ALGERIA" +msgstr "" + +#: ../common.php:2329 +msgid "AMERICAN SAMOA" +msgstr "" + +#: ../common.php:2330 +msgid "ANDORRA" +msgstr "" + +#: ../common.php:2331 +msgid "ANGOLA" +msgstr "" + +#: ../common.php:2332 +msgid "ANTIGUA AND BARBUDA" +msgstr "" + +#: ../common.php:2333 +msgid "ARGENTINA" +msgstr "" + +#: ../common.php:2334 +msgid "ARMENIA" +msgstr "" + +#: ../common.php:2335 +msgid "AUSTRALIA" +msgstr "" + +#: ../common.php:2336 +msgid "AUSTRIA" +msgstr "" + +#: ../common.php:2337 +msgid "AZERBAIJAN" +msgstr "" + +#: ../common.php:2338 +msgid "BAHAMAS" +msgstr "" + +#: ../common.php:2339 +msgid "BAHRAIN" +msgstr "" + +#: ../common.php:2340 +msgid "BANGLADESH" +msgstr "" + +#: ../common.php:2341 +msgid "BARBADOS" +msgstr "" + +#: ../common.php:2342 +msgid "BELARUS" +msgstr "" + +#: ../common.php:2343 +msgid "BELGIUM" +msgstr "" + +#: ../common.php:2344 +msgid "BELIZE" +msgstr "" + +#: ../common.php:2345 +msgid "BENIN" +msgstr "" + +#: ../common.php:2346 +msgid "BERMUDA" +msgstr "" + +#: ../common.php:2347 +msgid "BHUTAN" +msgstr "" + +#: ../common.php:2348 +msgid "BOLIVIA" +msgstr "" + +#: ../common.php:2349 +msgid "BOSNIA AND HERZEGOVINA" +msgstr "" + +#: ../common.php:2350 +msgid "BOTSWANA" +msgstr "" + +#: ../common.php:2351 +msgid "BRAZIL" +msgstr "" + +#: ../common.php:2352 +msgid "BRUNEI" +msgstr "" + +#: ../common.php:2353 +msgid "BULGARIA" +msgstr "" + +#: ../common.php:2354 +msgid "BURKINA FASO" +msgstr "" + +#: ../common.php:2355 +msgid "BURUNDI" +msgstr "" + +#: ../common.php:2356 +msgid "CAMBODIA" +msgstr "" + +#: ../common.php:2357 +msgid "CAMEROON" +msgstr "" + +#: ../common.php:2358 +msgid "CANADA" +msgstr "" + +#: ../common.php:2359 +msgid "CAPE VERDE" +msgstr "" + +#: ../common.php:2360 +msgid "CAYMAN ISLANDS" +msgstr "" + +#: ../common.php:2361 +msgid "CENTRAL AFRICAN REPUBLIC" +msgstr "" + +#: ../common.php:2362 +msgid "CHAD" +msgstr "" + +#: ../common.php:2363 +msgid "CHILE" +msgstr "" + +#: ../common.php:2364 +msgid "CHINA" +msgstr "" + +#: ../common.php:2365 +msgid "COLOMBIA" +msgstr "" + +#: ../common.php:2366 +msgid "COMOROS" +msgstr "" + +#: ../common.php:2367 +msgid "CONGO, DEMOCRATIC REPUBLIC OF THE" +msgstr "" + +#: ../common.php:2368 +msgid "CONGO, REPUBLIC OF THE" +msgstr "" + +#: ../common.php:2369 +msgid "COSTA RICA" +msgstr "" + +#: ../common.php:2370 +msgid "C&OCIRC;TE D'IVOIRE" +msgstr "" + +#: ../common.php:2371 +msgid "CROATIA" +msgstr "" + +#: ../common.php:2372 +msgid "CUBA" +msgstr "" + +#: ../common.php:2373 +msgid "CYPRUS" +msgstr "" + +#: ../common.php:2374 +msgid "CZECH REPUBLIC" +msgstr "" + +#: ../common.php:2375 +msgid "DENMARK" +msgstr "" + +#: ../common.php:2376 +msgid "DJIBOUTI" +msgstr "" + +#: ../common.php:2377 +msgid "DOMINICA" +msgstr "" + +#: ../common.php:2378 +msgid "DOMINICAN REPUBLIC" +msgstr "" + +#: ../common.php:2379 +msgid "EAST TIMOR" +msgstr "" + +#: ../common.php:2380 +msgid "ECUADOR" +msgstr "" + +#: ../common.php:2381 +msgid "EGYPT" +msgstr "" + +#: ../common.php:2382 +msgid "EL SALVADOR" +msgstr "" + +#: ../common.php:2383 +msgid "EQUATORIAL GUINEA" +msgstr "" + +#: ../common.php:2384 +msgid "ERITREA" +msgstr "" + +#: ../common.php:2385 +msgid "ESTONIA" +msgstr "" + +#: ../common.php:2386 +msgid "ETHIOPIA" +msgstr "" + +#: ../common.php:2387 +msgid "FIJI" +msgstr "" + +#: ../common.php:2388 +msgid "FINLAND" +msgstr "" + +#: ../common.php:2389 +msgid "FRANCE" +msgstr "" + +#: ../common.php:2390 +msgid "GABON" +msgstr "" + +#: ../common.php:2391 +msgid "GAMBIA" +msgstr "" + +#: ../common.php:2392 +msgid "GEORGIA" +msgstr "" + +#: ../common.php:2393 +msgid "GERMANY" +msgstr "" + +#: ../common.php:2394 +msgid "GHANA" +msgstr "" + +#: ../common.php:2395 +msgid "GREECE" +msgstr "" + +#: ../common.php:2396 +msgid "GREENLAND" +msgstr "" + +#: ../common.php:2397 +msgid "GRENADA" +msgstr "" + +#: ../common.php:2398 +msgid "GUAM" +msgstr "" + +#: ../common.php:2399 +msgid "GUATEMALA" +msgstr "" + +#: ../common.php:2400 +msgid "GUINEA" +msgstr "" + +#: ../common.php:2401 +msgid "GUINEA-BISSAU" +msgstr "" + +#: ../common.php:2402 +msgid "GUYANA" +msgstr "" + +#: ../common.php:2403 +msgid "HAITI" +msgstr "" + +#: ../common.php:2404 +msgid "HONDURAS" +msgstr "" + +#: ../common.php:2405 +msgid "HONG KONG" +msgstr "" + +#: ../common.php:2406 +msgid "HUNGARY" +msgstr "" + +#: ../common.php:2407 +msgid "ICELAND" +msgstr "" + +#: ../common.php:2408 +msgid "INDIA" +msgstr "" + +#: ../common.php:2409 +msgid "INDONESIA" +msgstr "" + +#: ../common.php:2410 +msgid "IRAN" +msgstr "" + +#: ../common.php:2411 +msgid "IRAQ" +msgstr "" + +#: ../common.php:2412 +msgid "IRELAND" +msgstr "" + +#: ../common.php:2413 +msgid "ISRAEL" +msgstr "" + +#: ../common.php:2414 +msgid "ITALY" +msgstr "" + +#: ../common.php:2415 +msgid "JAMAICA" +msgstr "" + +#: ../common.php:2416 +msgid "JAPAN" +msgstr "" + +#: ../common.php:2417 +msgid "JORDAN" +msgstr "" + +#: ../common.php:2418 +msgid "KAZAKHSTAN" +msgstr "" + +#: ../common.php:2419 +msgid "KENYA" +msgstr "" + +#: ../common.php:2420 +msgid "KIRIBATI" +msgstr "" + +#: ../common.php:2421 +msgid "NORTH KOREA" +msgstr "" + +#: ../common.php:2422 +msgid "SOUTH KOREA" +msgstr "" + +#: ../common.php:2423 +msgid "KOSOVO" +msgstr "" + +#: ../common.php:2424 +msgid "KUWAIT" +msgstr "" + +#: ../common.php:2425 +msgid "KYRGYZSTAN" +msgstr "" + +#: ../common.php:2426 +msgid "LAOS" +msgstr "" + +#: ../common.php:2427 +msgid "LATVIA" +msgstr "" + +#: ../common.php:2428 +msgid "LEBANON" +msgstr "" + +#: ../common.php:2429 +msgid "LESOTHO" +msgstr "" + +#: ../common.php:2430 +msgid "LIBERIA" +msgstr "" + +#: ../common.php:2431 +msgid "LIBYA" +msgstr "" + +#: ../common.php:2432 +msgid "LIECHTENSTEIN" +msgstr "" + +#: ../common.php:2433 +msgid "LITHUANIA" +msgstr "" + +#: ../common.php:2434 +msgid "LUXEMBOURG" +msgstr "" + +#: ../common.php:2435 +msgid "MACEDONIA" +msgstr "" + +#: ../common.php:2436 +msgid "MADAGASCAR" +msgstr "" + +#: ../common.php:2437 +msgid "MALAWI" +msgstr "" + +#: ../common.php:2438 +msgid "MALAYSIA" +msgstr "" + +#: ../common.php:2439 +msgid "MALDIVES" +msgstr "" + +#: ../common.php:2440 +msgid "MALI" +msgstr "" + +#: ../common.php:2441 +msgid "MALTA" +msgstr "" + +#: ../common.php:2442 +msgid "MARSHALL ISLANDS" +msgstr "" + +#: ../common.php:2443 +msgid "MAURITANIA" +msgstr "" + +#: ../common.php:2444 +msgid "MAURITIUS" +msgstr "" + +#: ../common.php:2445 +msgid "MEXICO" +msgstr "" + +#: ../common.php:2446 +msgid "MICRONESIA" +msgstr "" + +#: ../common.php:2447 +msgid "MOLDOVA" +msgstr "" + +#: ../common.php:2448 +msgid "MONACO" +msgstr "" + +#: ../common.php:2449 +msgid "MONGOLIA" +msgstr "" + +#: ../common.php:2450 +msgid "MONTENEGRO" +msgstr "" + +#: ../common.php:2451 +msgid "MOROCCO" +msgstr "" + +#: ../common.php:2452 +msgid "MOZAMBIQUE" +msgstr "" + +#: ../common.php:2453 +msgid "MYANMAR" +msgstr "" + +#: ../common.php:2454 +msgid "NAMIBIA" +msgstr "" + +#: ../common.php:2455 +msgid "NAURU" +msgstr "" + +#: ../common.php:2456 +msgid "NEPAL" +msgstr "" + +#: ../common.php:2457 +msgid "NETHERLANDS" +msgstr "" + +#: ../common.php:2458 +msgid "NEW ZEALAND" +msgstr "" + +#: ../common.php:2459 +msgid "NICARAGUA" +msgstr "" + +#: ../common.php:2460 +msgid "NIGER" +msgstr "" + +#: ../common.php:2461 +msgid "NIGERIA" +msgstr "" + +#: ../common.php:2462 +msgid "NORTHERN MARIANA ISLANDS" +msgstr "" + +#: ../common.php:2463 +msgid "NORWAY" +msgstr "" + +#: ../common.php:2464 +msgid "OMAN" +msgstr "" + +#: ../common.php:2465 +msgid "PAKISTAN" +msgstr "" + +#: ../common.php:2466 +msgid "PALAU" +msgstr "" + +#: ../common.php:2467 +msgid "PALESTINE" +msgstr "" + +#: ../common.php:2468 +msgid "PANAMA" +msgstr "" + +#: ../common.php:2469 +msgid "PAPUA NEW GUINEA" +msgstr "" + +#: ../common.php:2470 +msgid "PARAGUAY" +msgstr "" + +#: ../common.php:2471 +msgid "PERU" +msgstr "" + +#: ../common.php:2472 +msgid "PHILIPPINES" +msgstr "" + +#: ../common.php:2473 +msgid "POLAND" +msgstr "" + +#: ../common.php:2474 +msgid "PORTUGAL" +msgstr "" + +#: ../common.php:2475 +msgid "PUERTO RICO" +msgstr "" + +#: ../common.php:2476 +msgid "QATAR" +msgstr "" + +#: ../common.php:2477 +msgid "ROMANIA" +msgstr "" + +#: ../common.php:2478 +msgid "RUSSIA" +msgstr "" + +#: ../common.php:2479 +msgid "RWANDA" +msgstr "" + +#: ../common.php:2480 +msgid "SAINT KITTS AND NEVIS" +msgstr "" + +#: ../common.php:2481 +msgid "SAINT LUCIA" +msgstr "" + +#: ../common.php:2482 +msgid "SAINT VINCENT AND THE GRENADINES" +msgstr "" + +#: ../common.php:2483 +msgid "SAMOA" +msgstr "" + +#: ../common.php:2484 +msgid "SAN MARINO" +msgstr "" + +#: ../common.php:2485 +msgid "SAO TOME AND PRINCIPE" +msgstr "" + +#: ../common.php:2486 +msgid "SAUDI ARABIA" +msgstr "" + +#: ../common.php:2487 +msgid "SENEGAL" +msgstr "" + +#: ../common.php:2488 +msgid "SERBIA AND MONTENEGRO" +msgstr "" + +#: ../common.php:2489 +msgid "SEYCHELLES" +msgstr "" + +#: ../common.php:2490 +msgid "SIERRA LEONE" +msgstr "" + +#: ../common.php:2491 +msgid "SINGAPORE" +msgstr "" + +#: ../common.php:2492 +msgid "SLOVAKIA" +msgstr "" + +#: ../common.php:2493 +msgid "SLOVENIA" +msgstr "" + +#: ../common.php:2494 +msgid "SOLOMON ISLANDS" +msgstr "" + +#: ../common.php:2495 +msgid "SOMALIA" +msgstr "" + +#: ../common.php:2496 +msgid "SOUTH AFRICA" +msgstr "" + +#: ../common.php:2497 +msgid "SPAIN" +msgstr "" + +#: ../common.php:2498 +msgid "SRI LANKA" +msgstr "" + +#: ../common.php:2499 +msgid "SUDAN" +msgstr "" + +#: ../common.php:2500 +msgid "SUDAN, SOUTH" +msgstr "" + +#: ../common.php:2501 +msgid "SURINAME" +msgstr "" + +#: ../common.php:2502 +msgid "SWAZILAND" +msgstr "" + +#: ../common.php:2503 +msgid "SWEDEN" +msgstr "" + +#: ../common.php:2504 +msgid "SWITZERLAND" +msgstr "" + +#: ../common.php:2505 +msgid "SYRIA" +msgstr "" + +#: ../common.php:2506 +msgid "TAIWAN" +msgstr "" + +#: ../common.php:2507 +msgid "TAJIKISTAN" +msgstr "" + +#: ../common.php:2508 +msgid "TANZANIA" +msgstr "" + +#: ../common.php:2509 +msgid "THAILAND" +msgstr "" + +#: ../common.php:2510 +msgid "TOGO" +msgstr "" + +#: ../common.php:2511 +msgid "TONGA" +msgstr "" + +#: ../common.php:2512 +msgid "TRINIDAD AND TOBAGO" +msgstr "" + +#: ../common.php:2513 +msgid "TUNISIA" +msgstr "" + +#: ../common.php:2514 +msgid "TURKEY" +msgstr "" + +#: ../common.php:2515 +msgid "TURKMENISTAN" +msgstr "" + +#: ../common.php:2516 +msgid "TUVALU" +msgstr "" + +#: ../common.php:2517 +msgid "UGANDA" +msgstr "" + +#: ../common.php:2518 +msgid "UKRAINE" +msgstr "" + +#: ../common.php:2519 +msgid "UNITED ARAB EMIRATES" +msgstr "" + +#: ../common.php:2520 +msgid "UNITED KINGDOM" +msgstr "" + +#: ../common.php:2521 +msgid "UNITED STATES" +msgstr "" + +#: ../common.php:2522 +msgid "URUGUAY" +msgstr "" + +#: ../common.php:2523 +msgid "UZBEKISTAN" +msgstr "" + +#: ../common.php:2524 +msgid "VANUATU" +msgstr "" + +#: ../common.php:2525 +msgid "VATICAN CITY" +msgstr "" + +#: ../common.php:2526 +msgid "VENEZUELA" +msgstr "" + +#: ../common.php:2527 +msgid "VIRGIN ISLANDS, BRITISH" +msgstr "" + +#: ../common.php:2528 +msgid "VIRGIN ISLANDS, U.S." +msgstr "" + +#: ../common.php:2529 +msgid "VIETNAM" +msgstr "" + +#: ../common.php:2530 +msgid "YEMEN" +msgstr "" + +#: ../common.php:2531 +msgid "ZAMBIA" +msgstr "" + +#: ../common.php:2532 +msgid "ZIMBABWE" +msgstr "" + +#: ../common.php:2538 ../common.php:2543 +msgid "Alabama" +msgstr "" + +#: ../common.php:2538 ../common.php:2544 +msgid "Alaska" +msgstr "" + +#: ../common.php:2538 ../common.php:2545 +msgid "Arizona" +msgstr "" + +#: ../common.php:2538 ../common.php:2546 +msgid "Arkansas" +msgstr "" + +#: ../common.php:2538 ../common.php:2547 +msgid "California" +msgstr "" + +#: ../common.php:2538 ../common.php:2548 +msgid "Colorado" +msgstr "" + +#: ../common.php:2538 ../common.php:2549 +msgid "Connecticut" +msgstr "" + +#: ../common.php:2538 ../common.php:2550 +msgid "Delaware" +msgstr "" + +#: ../common.php:2538 ../common.php:2551 +msgid "District of Columbia" +msgstr "" + +#: ../common.php:2538 ../common.php:2552 +msgid "Florida" +msgstr "" + +#: ../common.php:2538 ../common.php:2554 +msgid "Hawaii" +msgstr "" + +#: ../common.php:2538 ../common.php:2555 +msgid "Idaho" +msgstr "" + +#: ../common.php:2538 ../common.php:2556 +msgid "Illinois" +msgstr "" + +#: ../common.php:2538 ../common.php:2557 +msgid "Indiana" +msgstr "" + +#: ../common.php:2538 ../common.php:2558 +msgid "Iowa" +msgstr "" + +#: ../common.php:2538 ../common.php:2559 +msgid "Kansas" +msgstr "" + +#: ../common.php:2538 ../common.php:2560 +msgid "Kentucky" +msgstr "" + +#: ../common.php:2538 ../common.php:2561 +msgid "Louisiana" +msgstr "" + +#: ../common.php:2538 ../common.php:2562 +msgid "Maine" +msgstr "" + +#: ../common.php:2538 ../common.php:2563 +msgid "Maryland" +msgstr "" + +#: ../common.php:2538 ../common.php:2564 +msgid "Massachusetts" +msgstr "" + +#: ../common.php:2538 ../common.php:2565 +msgid "Michigan" +msgstr "" + +#: ../common.php:2538 ../common.php:2566 +msgid "Minnesota" +msgstr "" + +#: ../common.php:2538 ../common.php:2567 +msgid "Mississippi" +msgstr "" + +#: ../common.php:2538 ../common.php:2568 +msgid "Missouri" +msgstr "" + +#: ../common.php:2538 ../common.php:2569 +msgid "Montana" +msgstr "" + +#: ../common.php:2538 ../common.php:2570 +msgid "Nebraska" +msgstr "" + +#: ../common.php:2538 ../common.php:2571 +msgid "Nevada" +msgstr "" + +#: ../common.php:2538 ../common.php:2572 +msgid "New Hampshire" +msgstr "" + +#: ../common.php:2538 ../common.php:2573 +msgid "New Jersey" +msgstr "" + +#: ../common.php:2538 ../common.php:2574 +msgid "New Mexico" +msgstr "" + +#: ../common.php:2538 ../common.php:2575 +msgid "New York" +msgstr "" + +#: ../common.php:2538 ../common.php:2576 +msgid "North Carolina" +msgstr "" + +#: ../common.php:2538 ../common.php:2577 +msgid "North Dakota" +msgstr "" + +#: ../common.php:2538 ../common.php:2578 +msgid "Ohio" +msgstr "" + +#: ../common.php:2538 ../common.php:2579 +msgid "Oklahoma" +msgstr "" + +#: ../common.php:2538 ../common.php:2580 +msgid "Oregon" +msgstr "" + +#: ../common.php:2538 ../common.php:2581 +msgid "Pennsylvania" +msgstr "" + +#: ../common.php:2538 ../common.php:2582 +msgid "Rhode Island" +msgstr "" + +#: ../common.php:2538 ../common.php:2583 +msgid "South Carolina" +msgstr "" + +#: ../common.php:2538 ../common.php:2584 +msgid "South Dakota" +msgstr "" + +#: ../common.php:2538 ../common.php:2585 +msgid "Tennessee" +msgstr "" + +#: ../common.php:2538 ../common.php:2586 +msgid "Texas" +msgstr "" + +#: ../common.php:2538 ../common.php:2587 +msgid "Utah" +msgstr "" + +#: ../common.php:2538 ../common.php:2588 +msgid "Vermont" +msgstr "" + +#: ../common.php:2538 ../common.php:2589 +msgid "Virginia" +msgstr "" + +#: ../common.php:2538 ../common.php:2590 +msgid "Washington" +msgstr "" + +#: ../common.php:2538 ../common.php:2591 +msgid "West Virginia" +msgstr "" + +#: ../common.php:2538 ../common.php:2592 +msgid "Wisconsin" +msgstr "" + +#: ../common.php:2538 ../common.php:2593 +msgid "Wyoming" +msgstr "" + +#: ../common.php:2538 ../common.php:2594 +msgid "Armed Forces Americas" +msgstr "" + +#: ../common.php:2538 ../common.php:2595 +msgid "Armed Forces Europe" +msgstr "" + +#: ../common.php:2538 ../common.php:2596 +msgid "Armed Forces Pacific" +msgstr "" + +#: ../common.php:2606 +msgid "Alberta" +msgstr "" + +#: ../common.php:2606 +msgid "British Columbia" +msgstr "" + +#: ../common.php:2606 +msgid "Manitoba" +msgstr "" + +#: ../common.php:2606 +msgid "New Brunswick" +msgstr "" + +#: ../common.php:2606 +msgid "Newfoundland & Labrador" +msgstr "" + +#: ../common.php:2606 +msgid "Northwest Territories" +msgstr "" + +#: ../common.php:2606 +msgid "Nova Scotia" +msgstr "" + +#: ../common.php:2606 +msgid "Nunavut" +msgstr "" + +#: ../common.php:2606 +msgid "Ontario" +msgstr "" + +#: ../common.php:2606 +msgid "Prince Edward Island" +msgstr "" + +#: ../common.php:2606 +msgid "Quebec" +msgstr "" + +#: ../common.php:2606 +msgid "Saskatchewan" +msgstr "" + +#: ../common.php:2606 +msgid "Yukon" +msgstr "" + +#: ../common.php:2657 +#, php-format +msgid "Please enter a value between %s and %s." +msgstr "" + +#: ../common.php:2659 +#, php-format +msgid "Please enter a value greater than or equal to %s." +msgstr "" + +#: ../common.php:2661 +#, php-format +msgid "Please enter a value less than or equal to %s." +msgstr "" + +#: ../common.php:2663 +msgid "Please enter a valid number" +msgstr "" + +#: ../common.php:2701 ../common.php:3866 +#: ../includes/addon/class-gf-payment-addon.php:1047 +#: ../includes/addon/class-gf-payment-addon.php:1048 +msgid "Month" +msgstr "" + +#: ../common.php:2705 ../includes/addon/class-gf-payment-addon.php:1060 +#: ../includes/addon/class-gf-payment-addon.php:1061 +msgid "Day" +msgstr "" + +#: ../common.php:2711 ../common.php:3876 +msgid "Year" +msgstr "" + +#: ../common.php:2785 +msgid "Product fields are not editable" +msgstr "" + +#: ../common.php:2788 +msgid "Donations are not editable" +msgstr "" + +#: ../common.php:2827 ../common.php:2831 +msgid "Quantity:" +msgstr "" + +#: ../common.php:2910 ../common.php:2918 ../notification.php:547 +msgid "Enter Email" +msgstr "" + +#: ../common.php:2910 ../common.php:2918 +msgid "Confirm Email" +msgstr "" + +#: ../common.php:2943 +msgid "HTML Content" +msgstr "" + +#: ../common.php:2943 +msgid "" +"This is a content placeholder. HTML content is not displayed in the form " +"admin. Preview this form to view the content." +msgstr "" + +#: ../common.php:3012 ../js.php:885 +msgid "Phone format:" +msgstr "" + +#: ../common.php:3101 +msgid "delete" +msgstr "" + +#: ../common.php:3105 ../js.php:525 +msgid "File" +msgstr "" + +#: ../common.php:3114 ../common.php:4324 ../form_detail.php:1026 +msgid "Caption" +msgstr "" + +#: ../common.php:3117 ../common.php:4325 ../form_detail.php:1031 +#: ../form_detail.php:1488 +msgid "Description" +msgstr "" + +#: ../common.php:3127 +msgid "Click to select..." +msgstr "" + +#: ../common.php:3166 ../form_display.php:2087 +msgid "Strength indicator" +msgstr "" + +#: ../common.php:3173 +msgid "Enter Password" +msgstr "" + +#: ../common.php:3173 +msgid "Confirm Password" +msgstr "" + +#: ../common.php:3193 ../js.php:414 +msgid "Prefix" +msgstr "" + +#: ../common.php:3193 ../common.php:3202 ../js.php:414 ../js.php:420 +msgid "First" +msgstr "" + +#: ../common.php:3193 ../common.php:3202 ../js.php:414 ../js.php:420 +msgid "Last" +msgstr "" + +#: ../common.php:3193 ../js.php:414 +msgid "Suffix" +msgstr "" + +#: ../common.php:3226 ../common.php:4121 ../form_detail.php:1068 +#: ../includes/addon/class-gf-payment-addon.php:805 +msgid "State" +msgstr "" + +#: ../common.php:3227 +msgid "Zip Code" +msgstr "" + +#: ../common.php:3247 ../js.php:464 +msgid "Street Address" +msgstr "" + +#: ../common.php:3254 ../js.php:464 +msgid "Address Line 2" +msgstr "" + +#: ../common.php:3264 ../common.php:3280 ../js.php:464 +#: ../includes/addon/class-gf-payment-addon.php:804 +msgid "City" +msgstr "" + +#: ../common.php:3301 ../js.php:465 +#: ../includes/addon/class-gf-payment-addon.php:807 +msgid "Country" +msgstr "" + +#: ../common.php:3323 ../common.php:3365 ../common.php:3382 ../common.php:3396 +#: ../common.php:3449 +msgid "MM" +msgstr "" + +#: ../common.php:3324 ../common.php:3360 ../common.php:3387 ../common.php:3401 +msgid "DD" +msgstr "" + +#: ../common.php:3325 ../common.php:3370 ../common.php:3378 ../common.php:3406 +msgid "YYYY" +msgstr "" + +#: ../common.php:3447 +msgid "AM" +msgstr "" + +#: ../common.php:3447 +msgid "PM" +msgstr "" + +#: ../common.php:3449 +msgid "HH" +msgstr "" + +#: ../common.php:3482 +msgid "Allowed Files" +msgstr "" + +#: ../common.php:3502 +msgid "Drop files here or" +msgstr "" + +#: ../common.php:3523 +msgid "Download file" +msgstr "" + +#: ../common.php:3523 +msgid "Delete file" +msgstr "" + +#: ../common.php:3589 +msgid "To use the reCaptcha field you must first do the following:" +msgstr "" + +#: ../common.php:3589 +#, php-format +msgid "Sign up%s for a free reCAPTCHA account" +msgstr "" + +#: ../common.php:3589 +#, php-format +msgid "Enter your reCAPTCHA keys in the %ssettings page%s" +msgstr "" + +#: ../common.php:3679 +msgid "Only digits are allowed" +msgstr "" + +#: ../common.php:3680 ../js.php:472 +msgid "Card Number" +msgstr "" + +#: ../common.php:3696 ../js.php:473 +msgid "Expiration Date" +msgstr "" + +#: ../common.php:3707 ../js.php:474 +msgid "Security Code" +msgstr "" + +#: ../common.php:3712 +msgid "Cardholder Name" +msgstr "" + +#: ../common.php:3796 +msgid "Add another row" +msgstr "" + +#: ../common.php:3796 +msgid "Add a row" +msgstr "" + +#: ../common.php:3797 +msgid "Remove this row" +msgstr "" + +#: ../common.php:4120 ../form_detail.php:1302 +msgid "International" +msgstr "" + +#: ../common.php:4120 ../js.php:465 +msgid "ZIP / Postal Code" +msgstr "" + +#: ../common.php:4120 +msgid "State / Province / Region" +msgstr "" + +#: ../common.php:4121 +msgid "ZIP Code" +msgstr "" + +#: ../common.php:4122 +msgid "Canadian" +msgstr "" + +#: ../common.php:4122 ../form_detail.php:1072 +msgid "Postal Code" +msgstr "" + +#: ../common.php:4122 +msgid "Province" +msgstr "" + +#: ../common.php:4329 ../common.php:4347 ../entry_list.php:1039 +#: ../entry_list.php:1061 +msgid "Click to view" +msgstr "" + +#: ../common.php:4386 +msgid "Qty: " +msgstr "" + +#: ../common.php:4386 +msgid "Price: " +msgstr "" + +#: ../common.php:5208 ../form_list.php:274 ../form_list.php:330 +#: ../form_list.php:437 ../form_settings.php:893 ../form_settings.php:1479 +#: ../notification.php:399 ../notification.php:1073 +#: ../includes/addon/class-gf-feed-addon.php:1016 +msgid "Active" +msgstr "" + +#: ../common.php:5209 ../form_list.php:270 ../form_list.php:331 +#: ../form_list.php:437 ../form_settings.php:889 ../form_settings.php:1479 +#: ../notification.php:395 ../notification.php:1073 +#: ../includes/addon/class-gf-feed-addon.php:1016 +msgid "Inactive" +msgstr "" + +#: ../common.php:5210 ../common.php:5239 ../form_detail.php:1388 +#: ../select_columns.php:153 +msgid "Save" +msgstr "" + +#: ../common.php:5211 ../entry_detail.php:439 +msgid "Update" +msgstr "" + +#: ../common.php:5212 ../form_display.php:575 ../form_display.php:2328 +#: ../js.php:389 +msgid "Previous" +msgstr "" + +#: ../common.php:5213 +msgid "Select a format" +msgstr "" + +#: ../common.php:5214 +#, php-format +msgid "5 of %d items shown. Edit field to view all" +msgstr "" + +#: ../common.php:5215 +msgid "Enter a value" +msgstr "" + +#: ../common.php:5216 +msgid "Untitled Form" +msgstr "" + +#: ../common.php:5217 +msgid "" +"We would love to hear from you! Please fill out this form and we will get in " +"touch with you shortly." +msgstr "" + +#: ../common.php:5218 ../common.php:5247 ../form_detail.php:2368 +msgid "Thanks for contacting us! We will get in touch with you shortly." +msgstr "" + +#: ../common.php:5219 ../form_display.php:766 ../form_list.php:155 +msgid "Submit" +msgstr "" + +#: ../common.php:5220 ../notification.php:275 +msgid "Loading..." +msgstr "" + +#: ../common.php:5221 +msgid "this field if" +msgstr "" + +#: ../common.php:5222 +msgid "this page" +msgstr "" + +#: ../common.php:5223 +msgid "this form button" +msgstr "" + +#: ../common.php:5224 +msgid "Show" +msgstr "" + +#: ../common.php:5225 +msgid "Hide" +msgstr "" + +#: ../common.php:5226 ../entry_list.php:719 ../form_list.php:329 +msgid "All" +msgstr "" + +#: ../common.php:5227 ../includes/addon/class-gf-payment-addon.php:1244 +msgid "Any" +msgstr "" + +#: ../common.php:5228 +msgid "of the following match:" +msgstr "" + +#: ../common.php:5229 ../notification.php:155 ../notification.php:642 +#: ../includes/addon/class-gf-addon.php:1396 +msgid "is" +msgstr "" + +#: ../common.php:5230 ../notification.php:156 ../notification.php:643 +#: ../includes/addon/class-gf-addon.php:1400 +msgid "is not" +msgstr "" + +#: ../common.php:5231 ../notification.php:157 ../notification.php:644 +#: ../includes/addon/class-gf-addon.php:1404 +msgid "greater than" +msgstr "" + +#: ../common.php:5232 ../notification.php:158 ../notification.php:645 +#: ../includes/addon/class-gf-addon.php:1408 +msgid "less than" +msgstr "" + +#: ../common.php:5233 ../notification.php:159 ../notification.php:646 +#: ../includes/addon/class-gf-addon.php:1412 +msgid "contains" +msgstr "" + +#: ../common.php:5234 ../notification.php:160 ../notification.php:647 +#: ../includes/addon/class-gf-addon.php:1416 +msgid "starts with" +msgstr "" + +#: ../common.php:5235 ../notification.php:161 ../notification.php:648 +#: ../includes/addon/class-gf-addon.php:1420 +msgid "ends with" +msgstr "" + +#: ../common.php:5237 +msgid "Use this confirmation if" +msgstr "" + +#: ../common.php:5238 +msgid "Send this notification if" +msgstr "" + +#: ../common.php:5240 +msgid "Saving..." +msgstr "" + +#: ../common.php:5241 +msgid "Are you sure you wish to cancel these changes?" +msgstr "" + +#: ../common.php:5242 ../form_settings.php:1333 +msgid "There was an issue saving this confirmation." +msgstr "" + +#: ../common.php:5243 +msgid "Are you sure you wish to delete this confirmation?" +msgstr "" + +#: ../common.php:5244 ../form_settings.php:1353 +msgid "There was an issue deleting this confirmation." +msgstr "" + +#: ../common.php:5245 +msgid "" +"There are unsaved changes to the current confirmation. Would you like to " +"discard these changes?" +msgstr "" + +#: ../common.php:5246 +msgid "Untitled Confirmation" +msgstr "" + +#: ../common.php:5248 +msgid "Please select a page." +msgstr "" + +#: ../common.php:5249 +msgid "Please enter a URL." +msgstr "" + +#: ../common.php:5250 +msgid "Please enter a confirmation name." +msgstr "" + +#: ../common.php:5252 +msgid "" +"This form contains conditional logic dependent upon this field. Are you sure " +"you want to delete this field? 'OK' to delete, 'Cancel' to abort." +msgstr "" + +#: ../common.php:5253 +msgid "" +"This form contains conditional logic dependent upon this choice. Are you " +"sure you want to delete this choice? 'OK' to delete, 'Cancel' to abort." +msgstr "" + +#: ../common.php:5254 +msgid "" +"This form contains conditional logic dependent upon this choice. Are you " +"sure you want to modify this choice? 'OK' to delete, 'Cancel' to abort." +msgstr "" + +#: ../common.php:5256 +msgid "" +"
              Merge Tags
              Merge tags allow you to dynamically populate submitted " +"field values in your form content wherever this merge tag icon is present." +msgstr "" + +#: ../common.php:5264 +msgid "Add a condition" +msgstr "" + +#: ../common.php:5265 +msgid "Remove a condition" +msgstr "" + +#: ../common.php:5266 +msgid "Include results if {0} match:" +msgstr "" + +#: ../common.php:5385 +msgid "Any form field" +msgstr "" + +#: ../common.php:5483 +msgid "Entry ID" +msgstr "" + +#: ../common.php:5487 ../export.php:702 ../select_columns.php:93 +#: ../includes/addon/class-gf-feed-addon.php:679 +msgid "Entry Date" +msgstr "" + +#: ../common.php:5489 +msgid "yyyy-mm-dd" +msgstr "" + +#: ../common.php:5492 ../entry_list.php:721 +msgid "Starred" +msgstr "" + +#: ../common.php:5506 +msgid "IP Address" +msgstr "" + +#: ../common.php:5510 +msgid "Source URL" +msgstr "" + +#: ../common.php:5514 ../entry_detail.php:358 ../export.php:707 +#: ../select_columns.php:96 +msgid "Payment Status" +msgstr "" + +#: ../common.php:5536 ../entry_detail.php:362 ../export.php:706 +#: ../select_columns.php:99 +msgid "Payment Date" +msgstr "" + +#: ../common.php:5540 ../entry_detail.php:374 ../export.php:705 +#: ../select_columns.php:98 ../includes/addon/class-gf-payment-addon.php:616 +msgid "Payment Amount" +msgstr "" + +#: ../common.php:5544 +msgid "Transaction ID" +msgstr "" + +#: ../common.php:5548 ../entry_detail.php:340 ../select_columns.php:100 +msgid "User" +msgstr "" + +#: ../common.php:5623 +msgid "This type of file is not allowed. Must be one of the following: " +msgstr "" + +#: ../common.php:5624 +msgid "Delete this file" +msgstr "" + +#: ../common.php:5625 +msgid "in progress" +msgstr "" + +#: ../common.php:5626 +msgid "File exceeds size limit" +msgstr "" + +#: ../common.php:5627 +msgid "This type of file is not allowed." +msgstr "" + +#: ../common.php:5628 +msgid "Maximum number of files reached" +msgstr "" + +#: ../common.php:5629 +msgid "There was an problem while saving the file on the server" +msgstr "" + +#: ../common.php:5630 +msgid "Please wait for the uploading to complete" +msgstr "" + +#: ../common.php:5631 ../entry_detail.php:444 ../form_detail.php:1381 +#: ../form_detail.php:1389 ../gravityforms.php:1140 ../select_columns.php:154 +#: ../includes/locking/class-gf-locking.php:195 +msgid "Cancel" +msgstr "" + +#: ../common.php:5632 +msgid "Cancel this upload" +msgstr "" + +#: ../common.php:5633 +msgid "Cancelled" +msgstr "" + +#: ../currency.php:94 +msgid "Australian Dollar" +msgstr "" + +#: ../currency.php:95 +msgid "Brazilian Real" +msgstr "" + +#: ../currency.php:96 +msgid "Canadian Dollar" +msgstr "" + +#: ../currency.php:97 +msgid "Czech Koruna" +msgstr "" + +#: ../currency.php:98 +msgid "Danish Krone" +msgstr "" + +#: ../currency.php:99 +msgid "Euro" +msgstr "" + +#: ../currency.php:100 +msgid "Hong Kong Dollar" +msgstr "" + +#: ../currency.php:101 +msgid "Hungarian Forint" +msgstr "" + +#: ../currency.php:102 +msgid "Israeli New Sheqel" +msgstr "" + +#: ../currency.php:103 +msgid "Japanese Yen" +msgstr "" + +#: ../currency.php:104 +msgid "Malaysian Ringgit" +msgstr "" + +#: ../currency.php:105 +msgid "Mexican Peso" +msgstr "" + +#: ../currency.php:106 +msgid "Norwegian Krone" +msgstr "" + +#: ../currency.php:107 +msgid "New Zealand Dollar" +msgstr "" + +#: ../currency.php:108 +msgid "Philippine Peso" +msgstr "" + +#: ../currency.php:109 +msgid "Polish Zloty" +msgstr "" + +#: ../currency.php:110 +msgid "Pound Sterling" +msgstr "" + +#: ../currency.php:111 +msgid "Singapore Dollar" +msgstr "" + +#: ../currency.php:112 +msgid "Swedish Krona" +msgstr "" + +#: ../currency.php:113 +msgid "Swiss Franc" +msgstr "" + +#: ../currency.php:114 +msgid "Taiwan New Dollar" +msgstr "" + +#: ../currency.php:115 +msgid "Thai Baht" +msgstr "" + +#: ../currency.php:116 +msgid "U.S. Dollar" +msgstr "" + +#: ../entry_detail.php:86 +msgid "Oops! We couldn't find your entry. Please try again" +msgstr "" + +#: ../entry_detail.php:181 +msgid "" +"'Would you like to delete this file? \\'Cancel\\' to stop. \\'OK\\' to " +"delete'" +msgstr "" + +#: ../entry_detail.php:191 ../js.php:356 +msgid "Ajax error while deleting field." +msgstr "" + +#: ../entry_detail.php:245 ../entry_list.php:397 +msgid "You must select at least one type of notification to resend." +msgstr "" + +#: ../entry_detail.php:263 +msgid "Notifications were resent successfully." +msgstr "" + +#: ../entry_detail.php:306 +msgid "Entry #" +msgstr "" + +#: ../entry_detail.php:326 +msgid "Info" +msgstr "" + +#: ../entry_detail.php:333 +msgid "Submitted on" +msgstr "" + +#: ../entry_detail.php:335 ../export.php:711 ../select_columns.php:94 +#: ../includes/addon/class-gf-feed-addon.php:680 +msgid "User IP" +msgstr "" + +#: ../entry_detail.php:340 +msgid "View user profile" +msgstr "" + +#: ../entry_detail.php:346 +msgid "Embed Url" +msgstr "" + +#: ../entry_detail.php:352 +msgid "Edit Post" +msgstr "" + +#: ../entry_detail.php:352 +msgid "Click to edit post" +msgstr "" + +#: ../entry_detail.php:358 +msgid "Subscription Status" +msgstr "" + +#: ../entry_detail.php:362 +msgid "Start Date" +msgstr "" + +#: ../entry_detail.php:368 ../export.php:704 ../select_columns.php:97 +msgid "Transaction Id" +msgstr "" + +#: ../entry_detail.php:368 +msgid "Subscriber Id" +msgstr "" + +#: ../entry_detail.php:374 +msgid "Subscription Amount" +msgstr "" + +#: ../entry_detail.php:389 ../entry_list.php:755 ../entry_list.php:1168 +#: ../entry_list.php:1304 +msgid "Not Spam" +msgstr "" + +#: ../entry_detail.php:395 ../entry_detail.php:408 +msgid "" +"You are about to delete this entry. \\'Cancel\\' to stop, \\'OK\\' to delete." +msgstr "" + +#: ../entry_detail.php:395 ../entry_detail.php:408 ../entry_list.php:749 +#: ../entry_list.php:759 ../entry_list.php:1152 ../entry_list.php:1178 +#: ../entry_list.php:1298 ../entry_list.php:1308 +msgid "Delete Permanently" +msgstr "" + +#: ../entry_detail.php:403 ../entry_list.php:745 ../entry_list.php:1142 +#: ../entry_list.php:1294 ../form_list.php:345 ../form_list.php:459 +#: ../form_list.php:460 ../form_list.php:545 +msgid "Restore" +msgstr "" + +#: ../entry_detail.php:417 ../entry_list.php:1330 ../form_detail.php:2033 +msgid "Move to Trash" +msgstr "" + +#: ../entry_detail.php:423 +msgid "Mark as Spam" +msgstr "" + +#: ../entry_detail.php:439 ../form_list.php:449 ../form_settings.php:1487 +#: ../gravityforms.php:2205 ../notification.php:1080 +#: ../includes/addon/class-gf-feed-addon.php:532 +msgid "Edit" +msgstr "" + +#: ../entry_detail.php:457 ../form_settings.php:1262 ../notification.php:90 +#: ../notification.php:384 ../notification.php:388 +msgid "Notifications" +msgstr "" + +#: ../entry_detail.php:465 +msgid "" +"You cannot resend notifications for this entry because this form does not " +"currently have any notifications configured." +msgstr "" + +#: ../entry_detail.php:467 ../entry_list.php:811 +msgid "Configure Notifications" +msgstr "" + +#: ../entry_detail.php:483 ../entry_list.php:830 ../notification.php:539 +msgid "Send To" +msgstr "" + +#: ../entry_detail.php:489 ../entry_list.php:353 ../entry_list.php:770 +#: ../entry_list.php:835 ../entry_list.php:1319 +msgid "Resend Notifications" +msgstr "" + +#: ../entry_detail.php:491 ../entry_list.php:837 +msgid "Resending..." +msgstr "" + +#: ../entry_detail.php:505 ../entry_list.php:771 ../entry_list.php:872 +msgid "Print" +msgstr "" + +#: ../entry_detail.php:508 +msgid "include notes" +msgstr "" + +#: ../entry_detail.php:531 +msgid "Notes" +msgstr "" + +#: ../entry_detail.php:569 +msgid "Entry Updated." +msgstr "" + +#: ../entry_detail.php:581 +msgid "Details" +msgstr "" + +#: ../entry_detail.php:636 +msgid " Bulk action" +msgstr "" + +#: ../entry_detail.php:638 ../entry_list.php:740 ../entry_list.php:1289 +msgid " Bulk action " +msgstr "" + +#: ../entry_detail.php:639 ../form_detail.php:1390 ../form_settings.php:1489 +#: ../notification.php:1082 ../includes/addon/class-gf-feed-addon.php:501 +#: ../includes/addon/class-gf-feed-addon.php:533 +msgid "Delete" +msgstr "" + +#: ../entry_detail.php:642 ../entry_list.php:788 ../entry_list.php:1336 +#: ../form_list.php:356 ../form_list.php:556 +msgid "Apply" +msgstr "" + +#: ../entry_detail.php:689 +msgid "added on" +msgstr "" + +#: ../entry_detail.php:703 +msgid "Add Note" +msgstr "" + +#: ../entry_detail.php:710 +msgid "Also email this note to" +msgstr "" + +#: ../entry_detail.php:718 +msgid "Subject:" +msgstr "" + +#: ../entry_detail.php:745 ../print-entry.php:87 +msgid "Entry # " +msgstr "" + +#: ../entry_detail.php:751 +msgid "show empty fields" +msgstr "" + +#: ../entry_list.php:15 +#, php-format +msgid "You don't have any active forms. Let's go %screate one%s" +msgstr "" + +#: ../entry_list.php:78 +msgid "Entry deleted." +msgstr "" + +#: ../entry_list.php:88 +#, php-format +msgid "%d entries" +msgstr "" + +#: ../entry_list.php:88 +msgid "1 entry" +msgstr "" + +#: ../entry_list.php:93 +#, php-format +msgid "%s deleted." +msgstr "" + +#: ../entry_list.php:98 +#, php-format +msgid "%s moved to Trash." +msgstr "" + +#: ../entry_list.php:103 +#, php-format +msgid "%s restored from the Trash." +msgstr "" + +#: ../entry_list.php:108 +#, php-format +msgid "%s restored from the spam." +msgstr "" + +#: ../entry_list.php:113 +#, php-format +msgid "%s marked as spam." +msgstr "" + +#: ../entry_list.php:118 +#, php-format +msgid "%s marked as read." +msgstr "" + +#: ../entry_list.php:123 +#, php-format +msgid "%s marked as unread." +msgstr "" + +#: ../entry_list.php:128 +#, php-format +msgid "%s starred." +msgstr "" + +#: ../entry_list.php:133 +#, php-format +msgid "%s unstarred." +msgstr "" + +#: ../entry_list.php:191 +msgid "«" +msgstr "" + +#: ../entry_list.php:192 +msgid "»" +msgstr "" + +#: ../entry_list.php:290 +msgid "Ajax error while setting lead property" +msgstr "" + +#: ../entry_list.php:345 +msgid "Please select at least one entry." +msgstr "" + +#: ../entry_list.php:359 ../entry_list.php:1320 +msgid "Print Entries" +msgstr "" + +#: ../entry_list.php:422 +#, php-format +msgid "Notifications for %s were resent successfully." +msgstr "" + +#: ../entry_list.php:424 +msgid "entry" +msgstr "" + +#: ../entry_list.php:424 +msgid "entries" +msgstr "" + +#: ../entry_list.php:523 +#, php-format +msgid "All %s{0}%s entries on this page are selected." +msgstr "" + +#: ../entry_list.php:524 +#, php-format +msgid "Select all %s{0}%s entries." +msgstr "" + +#: ../entry_list.php:525 +#, php-format +msgid "All %s{0}%s entries have been selected." +msgstr "" + +#: ../entry_list.php:526 +msgid "Clear selection" +msgstr "" + +#: ../entry_list.php:611 +msgid "Entry List" +msgstr "" + +#: ../entry_list.php:706 ../form_list.php:392 ../form_list.php:410 +#: ../gravityforms.php:892 ../gravityforms.php:2237 +msgid "Entries" +msgstr "" + +#: ../entry_list.php:706 ../form_detail.php:136 ../form_settings.php:1209 +msgid "Form Name" +msgstr "" + +#: ../entry_list.php:720 ../gravityforms.php:1233 +msgid "Unread" +msgstr "" + +#: ../entry_list.php:725 ../entry_list.php:776 ../entry_list.php:1201 +#: ../entry_list.php:1324 +msgid "Spam" +msgstr "" + +#: ../entry_list.php:729 ../entry_list.php:782 ../entry_list.php:1211 +#: ../form_list.php:332 ../form_list.php:488 +msgid "Trash" +msgstr "" + +#: ../entry_list.php:732 +msgid "Search" +msgstr "" + +#: ../entry_list.php:738 ../entry_list.php:1287 ../form_list.php:341 +#: ../form_list.php:343 ../form_list.php:541 ../form_list.php:543 +msgid "Bulk action" +msgstr "" + +#: ../entry_list.php:766 ../entry_list.php:1315 +msgid "Mark as Read" +msgstr "" + +#: ../entry_list.php:767 ../entry_list.php:1316 +msgid "Mark as Unread" +msgstr "" + +#: ../entry_list.php:768 ../entry_list.php:1317 +msgid "Add Star" +msgstr "" + +#: ../entry_list.php:769 ../entry_list.php:1318 +msgid "Remove Star" +msgstr "" + +#: ../entry_list.php:792 +msgid "" +"WARNING! This operation cannot be undone. Empty trash? \\'Ok\\' to empty " +"trash. \\'Cancel\\' to abort." +msgstr "" + +#: ../entry_list.php:792 +msgid "" +"WARNING! This operation cannot be undone. Permanently delete all spam? \\'Ok" +"\\' to delete. \\'Cancel\\' to abort." +msgstr "" + +#: ../entry_list.php:793 +msgid "Empty Trash" +msgstr "" + +#: ../entry_list.php:793 +msgid "Delete All Spam" +msgstr "" + +#: ../entry_list.php:809 +msgid "" +"You cannot resend notifications for these entries because this form does not " +"currently have any notifications configured." +msgstr "" + +#: ../entry_list.php:816 +msgid "" +"Specify which notifications you would like to resend for the selected " +"entries." +msgstr "" + +#: ../entry_list.php:846 +msgid "Close Window" +msgstr "" + +#: ../entry_list.php:860 +msgid "Print all of the selected entries at once." +msgstr "" + +#: ../entry_list.php:864 +msgid "Include notes" +msgstr "" + +#: ../entry_list.php:869 +msgid "Add page break between entries" +msgstr "" + +#: ../entry_list.php:908 ../entry_list.php:931 +msgid "click to select columns to display" +msgstr "" + +#: ../entry_list.php:1049 +#, php-format +msgid "%d files" +msgstr "" + +#: ../entry_list.php:1137 ../entry_list.php:1163 ../entry_list.php:1190 +msgid "View this entry" +msgstr "" + +#: ../entry_list.php:1137 ../entry_list.php:1163 ../entry_list.php:1190 +#: ../includes/addon/class-gf-payment-addon.php:1237 +msgid "View" +msgstr "" + +#: ../entry_list.php:1142 +msgid "Restore this entry" +msgstr "" + +#: ../entry_list.php:1152 ../entry_list.php:1178 +msgid "Delete this entry permanently" +msgstr "" + +#: ../entry_list.php:1168 +msgid "Mark this entry as not spam" +msgstr "" + +#: ../entry_list.php:1194 +msgid "Mark read" +msgstr "" + +#: ../entry_list.php:1194 +msgid "Mark this entry as unread" +msgstr "" + +#: ../entry_list.php:1194 +msgid "Mark unread" +msgstr "" + +#: ../entry_list.php:1201 +msgid "Mark this entry as spam" +msgstr "" + +#: ../entry_list.php:1211 +msgid "Move this entry to the trash" +msgstr "" + +#: ../entry_list.php:1251 +msgid "" +"This form does not have any unread entries matching the search criteria." +msgstr "" + +#: ../entry_list.php:1251 +msgid "This form does not have any unread entries." +msgstr "" + +#: ../entry_list.php:1255 +msgid "" +"This form does not have any starred entries matching the search criteria." +msgstr "" + +#: ../entry_list.php:1255 +msgid "This form does not have any starred entries." +msgstr "" + +#: ../entry_list.php:1259 +msgid "This form does not have any spam." +msgstr "" + +#: ../entry_list.php:1264 +msgid "" +"This form does not have any entries in the trash matching the search " +"criteria." +msgstr "" + +#: ../entry_list.php:1264 +msgid "This form does not have any entries in the trash." +msgstr "" + +#: ../entry_list.php:1269 +msgid "This form does not have any entries matching the search criteria." +msgstr "" + +#: ../entry_list.php:1269 +msgid "This form does not have any entries yet." +msgstr "" + +#: ../entry_list.php:1482 +#, php-format +msgid "Displaying %s - %s of %s" +msgstr "" + +#: ../export.php:12 ../export.php:432 +msgid "Please select the fields to be exported" +msgstr "" + +#: ../export.php:35 +msgid "Please select the forms to be exported" +msgstr "" + +#: ../export.php:290 +msgid "" +"Forms could not be imported. Please make sure your XML export file is in the " +"correct format." +msgstr "" + +#: ../export.php:293 +msgid "" +"Forms could not be imported. Your XML export file is not compatible with " +"your current version of Gravity Forms." +msgstr "" + +#: ../export.php:297 +msgid "forms" +msgstr "" + +#: ../export.php:297 +msgid "form" +msgstr "" + +#: ../export.php:298 +msgid "Edit Form" +msgstr "" + +#: ../export.php:304 ../export.php:836 +msgid "Import Forms" +msgstr "" + +#: ../export.php:309 +msgid "" +"Select the Gravity Forms XML file you would like to import. When you click " +"the import button below, Gravity Forms will import the forms." +msgstr "" + +#: ../export.php:319 ../tooltips.php:128 +msgid "Select File" +msgstr "" + +#: ../export.php:324 +msgid "Import" +msgstr "" + +#: ../export.php:336 ../export.php:835 +msgid "Export Forms" +msgstr "" + +#: ../export.php:340 +msgid "" +"Select the forms you would like to export. When you click the download " +"button below, Gravity Forms will create an XML file for you to save to your " +"computer. Once you've saved the download file, you can use the Import tool " +"to import the forms." +msgstr "" + +#: ../export.php:346 +msgid "Select Forms" +msgstr "" + +#: ../export.php:366 ../export.php:503 +msgid "Download Export File" +msgstr "" + +#: ../export.php:377 ../export.php:514 ../export.php:834 +msgid "Export Entries" +msgstr "" + +#: ../export.php:401 +msgid "Ajax error while selecting a form" +msgstr "" + +#: ../export.php:417 +msgid "Deselect All" +msgstr "" + +#: ../export.php:417 +msgid "Select All" +msgstr "" + +#: ../export.php:426 +msgid "Export entries if {0} of the following match:" +msgstr "" + +#: ../export.php:441 +msgid "" +"Select a form below to export entries. Once you have selected a form you may " +"select the fields you would like to export and then define optional filters " +"for field values and the date range. When you click the download button " +"below, Gravity Forms will create a CSV file for you to save to your computer." +msgstr "" + +#: ../export.php:448 ../gravityforms.php:2102 +msgid "Select A Form" +msgstr "" + +#: ../export.php:452 +msgid "Select a form" +msgstr "" + +#: ../export.php:466 +msgid "Select Fields" +msgstr "" + +#: ../export.php:473 ../form_settings.php:1163 ../notification.php:797 +#: ../tooltips.php:88 ../tooltips.php:102 ../tooltips.php:125 +#: ../includes/addon/class-gf-payment-addon.php:645 +msgid "Conditional Logic" +msgstr "" + +#: ../export.php:482 +msgid "Select Date Range" +msgstr "" + +#: ../export.php:487 ../includes/addon/class-gf-results.php:237 +msgid "Start" +msgstr "" + +#: ../export.php:492 ../includes/addon/class-gf-results.php:245 +msgid "End" +msgstr "" + +#: ../export.php:495 +msgid "" +"Date Range is optional, if no date range is selected all entries will be " +"exported." +msgstr "" + +#: ../export.php:505 +msgid "Exporting entries. Please wait..." +msgstr "" + +#: ../export.php:700 +msgid "Created By (User Id)" +msgstr "" + +#: ../export.php:703 ../select_columns.php:95 +#: ../includes/addon/class-gf-feed-addon.php:681 +msgid "Source Url" +msgstr "" + +#: ../export.php:710 +msgid "User Agent" +msgstr "" + +#: ../form_detail.php:134 ../gravityforms.php:890 +msgid "New Form" +msgstr "" + +#: ../form_detail.php:136 ../gravityforms.php:2205 +msgid "Form Editor" +msgstr "" + +#: ../form_detail.php:146 ../form_detail.php:2052 ../form_settings.php:259 +msgid "There was an error while saving your form." +msgstr "" + +#: ../form_detail.php:147 ../form_detail.php:2053 ../form_settings.php:260 +#, php-format +msgid "Please %scontact our support team%s." +msgstr "" + +#: ../form_detail.php:155 +msgid "" +"The form title you have entered is already taken. Please enter a unique form " +"title." +msgstr "" + +#: ../form_detail.php:163 ../form_detail.php:2048 +msgid "Form updated successfully." +msgstr "" + +#: ../form_detail.php:189 +msgid "click to edit page options" +msgstr "" + +#: ../form_detail.php:195 +msgid "begin form" +msgstr "" + +#: ../form_detail.php:196 +msgid "START PAGING" +msgstr "" + +#: ../form_detail.php:197 +msgid "top of the first page" +msgstr "" + +#: ../form_detail.php:202 ../form_detail.php:398 ../form_detail.php:461 +msgid "Properties" +msgstr "" + +#: ../form_detail.php:203 ../form_detail.php:462 +msgid "Advanced" +msgstr "" + +#: ../form_detail.php:210 ../tooltips.php:94 +msgid "Progress Indicator" +msgstr "" + +#: ../form_detail.php:216 +msgid "Progress Bar" +msgstr "" + +#: ../form_detail.php:221 +msgid "Steps" +msgstr "" + +#: ../form_detail.php:226 ../form_detail.php:1459 +msgid "None" +msgstr "" + +#: ../form_detail.php:235 +msgid "Style" +msgstr "" + +#: ../form_detail.php:239 +msgid "Blue" +msgstr "" + +#: ../form_detail.php:240 +msgid "Gray" +msgstr "" + +#: ../form_detail.php:241 ../form_detail.php:1341 +msgid "Green" +msgstr "" + +#: ../form_detail.php:242 +msgid "Orange" +msgstr "" + +#: ../form_detail.php:243 ../form_detail.php:780 +msgid "Red" +msgstr "" + +#: ../form_detail.php:250 +msgid "Text Color" +msgstr "" + +#: ../form_detail.php:257 ../form_detail.php:765 +msgid "Background Color" +msgstr "" + +#: ../form_detail.php:264 ../tooltips.php:96 +msgid "Page Names" +msgstr "" + +#: ../form_detail.php:275 +msgid "Display completed progress bar on confirmation" +msgstr "" + +#: ../form_detail.php:283 +msgid "Completion Text" +msgstr "" + +#: ../form_detail.php:295 ../form_detail.php:1830 ../form_settings.php:398 +#: ../tooltips.php:84 +msgid "CSS Class Name" +msgstr "" + +#: ../form_detail.php:317 +msgid "" +"This form doesn't have any fields yet. Follow the steps below to get started." +msgstr "" + +#: ../form_detail.php:321 +msgid "Select A Field Type" +msgstr "" + +#: ../form_detail.php:322 +msgid "" +"Start by seleting a field type from the nifty floating panels on the right." +msgstr "" + +#: ../form_detail.php:325 +msgid "Start Over There" +msgstr "" + +#: ../form_detail.php:326 +msgid "Pick a field.. any field. Don't be shy." +msgstr "" + +#: ../form_detail.php:331 +msgid "Click to Add A Field" +msgstr "" + +#: ../form_detail.php:332 +msgid "" +"Once you've found the field type you want, click to add it to the form " +"editor here on the left side of your screen." +msgstr "" + +#: ../form_detail.php:335 +msgid "Now your new field magically appears over here." +msgstr "" + +#: ../form_detail.php:340 +msgid "Edit Field Options" +msgstr "" + +#: ../form_detail.php:341 +msgid "Click on the edit link to configure the various field options" +msgstr "" + +#: ../form_detail.php:344 +msgid "Preview your changes up here." +msgstr "" + +#: ../form_detail.php:345 +msgid "Edit the field options. Go ahead.. go crazy." +msgstr "" + +#: ../form_detail.php:346 +msgid "If you get stuck, mouseover the tool tips for a little help." +msgstr "" + +#: ../form_detail.php:351 +msgid "Drag to Arrange Fields" +msgstr "" + +#: ../form_detail.php:352 +msgid "Drag the fields to arrange them the way you prefer" +msgstr "" + +#: ../form_detail.php:355 +msgid "Grab here with your cursor." +msgstr "" + +#: ../form_detail.php:356 +msgid "Drag up or down to arrange your fields." +msgstr "" + +#: ../form_detail.php:361 +msgid "Save Your Form" +msgstr "" + +#: ../form_detail.php:362 +msgid "" +"Once you're happy with your form, remember to click on the "update " +"form" button to save all your hard work." +msgstr "" + +#: ../form_detail.php:365 +msgid "Save Your New Form" +msgstr "" + +#: ../form_detail.php:366 +msgid "You're done. That's it." +msgstr "" + +#: ../form_detail.php:385 +msgid "Edit Last Page" +msgstr "" + +#: ../form_detail.php:389 +msgid "end of last page" +msgstr "" + +#: ../form_detail.php:390 +msgid "END PAGING" +msgstr "" + +#: ../form_detail.php:391 +msgid "end of form" +msgstr "" + +#: ../form_detail.php:404 ../form_detail.php:634 +msgid "Previous Button" +msgstr "" + +#: ../form_detail.php:410 ../form_detail.php:603 ../form_detail.php:640 +msgid "Default" +msgstr "" + +#: ../form_detail.php:422 ../form_detail.php:615 ../form_detail.php:652 +msgid "Text:" +msgstr "" + +#: ../form_detail.php:429 ../form_detail.php:622 ../form_detail.php:659 +msgid "Image Path:" +msgstr "" + +#: ../form_detail.php:443 +msgid "You have successfully saved your form!" +msgstr "" + +#: ../form_detail.php:444 +msgid "What would you like to do next?" +msgstr "" + +#: ../form_detail.php:445 ../form_detail.php:2049 ../gravityforms.php:2254 +msgid "Preview this form" +msgstr "" + +#: ../form_detail.php:445 +msgid "Preview this Form" +msgstr "" + +#: ../form_detail.php:448 +msgid "Setup email notifications for this form" +msgstr "" + +#: ../form_detail.php:448 +msgid "Setup Email Notifications for this Form" +msgstr "" + +#: ../form_detail.php:451 +msgid "Continue editing this form" +msgstr "" + +#: ../form_detail.php:451 +msgid "Continue Editing this Form" +msgstr "" + +#: ../form_detail.php:453 +msgid "I am done. Take me back to form list" +msgstr "" + +#: ../form_detail.php:453 +msgid "Return to Form List" +msgstr "" + +#: ../form_detail.php:471 ../tooltips.php:42 ../tooltips.php:43 +msgid "Field Label" +msgstr "" + +#: ../form_detail.php:479 ../tooltips.php:117 +msgid "Product Field" +msgstr "" + +#: ../form_detail.php:491 ../form_detail.php:508 ../form_detail.php:543 +#: ../form_detail.php:557 ../form_detail.php:571 ../form_detail.php:681 +#: ../form_detail.php:710 ../form_detail.php:905 +msgid "Field Type" +msgstr "" + +#: ../form_detail.php:495 +msgid "Single Product" +msgstr "" + +#: ../form_detail.php:498 ../form_detail.php:562 +msgid "User Defined Price" +msgstr "" + +#: ../form_detail.php:500 +msgid "Calculation" +msgstr "" + +#: ../form_detail.php:512 +msgid "Single Method" +msgstr "" + +#: ../form_detail.php:533 +msgid "Disable quantity field" +msgstr "" + +#: ../form_detail.php:586 ../form_settings.php:1413 ../tooltips.php:114 +msgid "Content" +msgstr "" + +#: ../form_detail.php:598 +msgid "Next Button" +msgstr "" + +#: ../form_detail.php:672 +msgid "Disable default margins" +msgstr "" + +#: ../form_detail.php:685 ../form_detail.php:2001 ../tooltips.php:119 +msgid "Standard Fields" +msgstr "" + +#: ../form_detail.php:686 ../form_detail.php:714 +msgid "Single line text" +msgstr "" + +#: ../form_detail.php:695 ../form_detail.php:2002 ../tooltips.php:120 +msgid "Advanced Fields" +msgstr "" + +#: ../form_detail.php:729 ../form_settings.php:1412 +msgid "Type" +msgstr "" + +#: ../form_detail.php:733 +msgid "reCAPTCHA" +msgstr "" + +#: ../form_detail.php:734 +msgid "Really Simple CAPTCHA" +msgstr "" + +#: ../form_detail.php:735 +msgid "Math Challenge" +msgstr "" + +#: ../form_detail.php:743 ../form_detail.php:1353 +msgid "Size" +msgstr "" + +#: ../form_detail.php:746 ../form_detail.php:1353 ../form_detail.php:1751 +msgid "Small" +msgstr "" + +#: ../form_detail.php:756 +msgid "Font Color" +msgstr "" + +#: ../form_detail.php:776 +msgid "Theme" +msgstr "" + +#: ../form_detail.php:781 +msgid "White" +msgstr "" + +#: ../form_detail.php:782 +msgid "Black Glass" +msgstr "" + +#: ../form_detail.php:783 +msgid "Clean" +msgstr "" + +#: ../form_detail.php:791 ../tooltips.php:47 +msgid "Custom Field Name" +msgstr "" + +#: ../form_detail.php:797 +msgid "Existing" +msgstr "" + +#: ../form_detail.php:803 +msgid "New" +msgstr "" + +#: ../form_detail.php:809 +msgid "Select an existing custom field" +msgstr "" + +#: ../form_detail.php:826 ../tooltips.php:104 +msgid "Post Status" +msgstr "" + +#: ../form_detail.php:845 +msgid "Default Post Author" +msgstr "" + +#: ../form_detail.php:855 +msgid "Use logged in user as author" +msgstr "" + +#: ../form_detail.php:867 ../tooltips.php:106 +msgid "Post Format" +msgstr "" + +#: ../form_detail.php:893 ../js.php:369 ../tooltips.php:103 +#: ../tooltips.php:109 +msgid "Post Category" +msgstr "" + +#: ../form_detail.php:927 +msgid "All Categories" +msgstr "" + +#: ../form_detail.php:933 +msgid "Select Categories" +msgstr "" + +#: ../form_detail.php:956 +msgid "Display placeholder" +msgstr "" + +#: ../form_detail.php:962 +msgid "Placeholder Label" +msgstr "" + +#: ../form_detail.php:972 ../form_detail.php:989 ../form_detail.php:1003 +msgid "Create content template" +msgstr "" + +#: ../form_detail.php:1018 +msgid "Image Metadata" +msgstr "" + +#: ../form_detail.php:1041 ../tooltips.php:112 +msgid "Set as Featured Image" +msgstr "" + +#: ../form_detail.php:1053 ../tooltips.php:52 +msgid "Address Type" +msgstr "" + +#: ../form_detail.php:1081 +#, php-format +msgid "Default %s" +msgstr "" + +#: ../form_detail.php:1097 ../tooltips.php:55 +msgid "Default Country" +msgstr "" + +#: ../form_detail.php:1107 +msgid "Hide Country Field" +msgstr "" + +#: ../form_detail.php:1119 +#, php-format +msgid "Hide %s Field" +msgstr "" + +#: ../form_detail.php:1131 +msgid "Hide Address Line 2 Field" +msgstr "" + +#: ../form_detail.php:1141 +msgid "Name Format" +msgstr "" + +#: ../form_detail.php:1145 +msgid "Normal" +msgstr "" + +#: ../form_detail.php:1146 +msgid "Extended" +msgstr "" + +#: ../form_detail.php:1147 +msgid "Simple" +msgstr "" + +#: ../form_detail.php:1155 ../tooltips.php:51 +msgid "Date Input Type" +msgstr "" + +#: ../form_detail.php:1159 +msgid "Date Field" +msgstr "" + +#: ../form_detail.php:1160 +msgid "Date Picker" +msgstr "" + +#: ../form_detail.php:1161 +msgid "Date Drop Down" +msgstr "" + +#: ../form_detail.php:1167 +msgid "No Icon" +msgstr "" + +#: ../form_detail.php:1172 +msgid "Calendar Icon" +msgstr "" + +#: ../form_detail.php:1177 +msgid "Custom Icon" +msgstr "" + +#: ../form_detail.php:1182 +msgid "Image Path: " +msgstr "" + +#: ../form_detail.php:1185 +msgid "Preview this form to see your custom icon." +msgstr "" + +#: ../form_detail.php:1194 +msgid "Date Format" +msgstr "" + +#: ../form_detail.php:1212 +msgid "Allowed file extensions" +msgstr "" + +#: ../form_detail.php:1216 +msgid "Separated with commas (i.e. jpg, gif, png, pdf)" +msgstr "" + +#: ../form_detail.php:1224 ../tooltips.php:68 +msgid "Enable Multi-File Upload" +msgstr "" + +#: ../form_detail.php:1231 ../tooltips.php:69 +msgid "Maximum Number of Files" +msgstr "" + +#: ../form_detail.php:1245 ../tooltips.php:70 +msgid "Maximum File Size" +msgstr "" + +#: ../form_detail.php:1258 +msgid "Enable multiple columns" +msgstr "" + +#: ../form_detail.php:1270 ../tooltips.php:50 +msgid "Maximum Rows" +msgstr "" + +#: ../form_detail.php:1282 ../tooltips.php:66 +msgid "Time Format" +msgstr "" + +#: ../form_detail.php:1286 +msgid "12 hour" +msgstr "" + +#: ../form_detail.php:1287 +msgid "24 hour" +msgstr "" + +#: ../form_detail.php:1297 +msgid "Phone Format" +msgstr "" + +#: ../form_detail.php:1312 +msgid "show values" +msgstr "" + +#: ../form_detail.php:1315 +msgid "Choices" +msgstr "" + +#: ../form_detail.php:1320 +msgid "Label" +msgstr "" + +#: ../form_detail.php:1320 +msgid "Value" +msgstr "" + +#: ../form_detail.php:1324 +msgid "Bulk Add / Predefined Choices" +msgstr "" + +#: ../form_detail.php:1332 +msgid "Countries" +msgstr "" + +#: ../form_detail.php:1333 +msgid "U.S. States" +msgstr "" + +#: ../form_detail.php:1334 +msgid "Canadian Province/Territory" +msgstr "" + +#: ../form_detail.php:1335 +msgid "Continents" +msgstr "" + +#: ../form_detail.php:1335 +msgid "Africa" +msgstr "" + +#: ../form_detail.php:1335 +msgid "Antarctica" +msgstr "" + +#: ../form_detail.php:1335 +msgid "Asia" +msgstr "" + +#: ../form_detail.php:1335 +msgid "Europe" +msgstr "" + +#: ../form_detail.php:1335 +msgid "North America" +msgstr "" + +#: ../form_detail.php:1335 +msgid "South America" +msgstr "" + +#: ../form_detail.php:1336 +msgid "Gender" +msgstr "" + +#: ../form_detail.php:1336 +msgid "Male" +msgstr "" + +#: ../form_detail.php:1336 +msgid "Female" +msgstr "" + +#: ../form_detail.php:1336 ../form_detail.php:1337 ../form_detail.php:1339 +#: ../form_detail.php:1342 ../form_detail.php:1343 +msgid "Prefer Not to Answer" +msgstr "" + +#: ../form_detail.php:1337 +msgid "Age" +msgstr "" + +#: ../form_detail.php:1337 +msgid "Under 18" +msgstr "" + +#: ../form_detail.php:1337 +msgid "18-24" +msgstr "" + +#: ../form_detail.php:1337 +msgid "25-34" +msgstr "" + +#: ../form_detail.php:1337 +msgid "35-44" +msgstr "" + +#: ../form_detail.php:1337 +msgid "45-54" +msgstr "" + +#: ../form_detail.php:1337 +msgid "55-64" +msgstr "" + +#: ../form_detail.php:1337 +msgid "65 or Above" +msgstr "" + +#: ../form_detail.php:1338 +msgid "Marital Status" +msgstr "" + +#: ../form_detail.php:1338 +msgid "Single" +msgstr "" + +#: ../form_detail.php:1338 +msgid "Married" +msgstr "" + +#: ../form_detail.php:1338 +msgid "Divorced" +msgstr "" + +#: ../form_detail.php:1338 +msgid "Widowed" +msgstr "" + +#: ../form_detail.php:1339 +msgid "Employment" +msgstr "" + +#: ../form_detail.php:1339 +msgid "Employed Full-Time" +msgstr "" + +#: ../form_detail.php:1339 +msgid "Employed Part-Time" +msgstr "" + +#: ../form_detail.php:1339 +msgid "Self-employed" +msgstr "" + +#: ../form_detail.php:1339 +msgid "Not employed" +msgstr "" + +#: ../form_detail.php:1339 +msgid " but looking for work" +msgstr "" + +#: ../form_detail.php:1339 +msgid "Not employed and not looking for work" +msgstr "" + +#: ../form_detail.php:1339 +msgid "Homemaker" +msgstr "" + +#: ../form_detail.php:1339 +msgid "Retired" +msgstr "" + +#: ../form_detail.php:1339 +msgid "Student" +msgstr "" + +#: ../form_detail.php:1340 +msgid "Job Type" +msgstr "" + +#: ../form_detail.php:1340 +msgid "Full-Time" +msgstr "" + +#: ../form_detail.php:1340 +msgid "Part-Time" +msgstr "" + +#: ../form_detail.php:1340 +msgid "Per Diem" +msgstr "" + +#: ../form_detail.php:1340 +msgid "Employee" +msgstr "" + +#: ../form_detail.php:1340 +msgid "Temporary" +msgstr "" + +#: ../form_detail.php:1340 +msgid "Contract" +msgstr "" + +#: ../form_detail.php:1340 +msgid "Intern" +msgstr "" + +#: ../form_detail.php:1340 +msgid "Seasonal" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Industry" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Accounting/Finance" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Advertising/Public Relations" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Aerospace/Aviation" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Arts/Entertainment/Publishing" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Automotive" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Banking/Mortgage" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Business Development" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Business Opportunity" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Clerical/Administrative" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Construction/Facilities" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Consumer Goods" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Customer Service" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Education/Training" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Energy/Utilities" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Engineering" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Government/Military" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Healthcare" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Hospitality/Travel" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Human Resources" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Installation/Maintenance" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Insurance" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Internet" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Job Search Aids" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Law Enforcement/Security" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Legal" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Management/Executive" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Manufacturing/Operations" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Marketing" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Non-Profit/Volunteer" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Pharmaceutical/Biotech" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Professional Services" +msgstr "" + +#: ../form_detail.php:1341 +msgid "QA/Quality Control" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Real Estate" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Restaurant/Food Service" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Retail" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Sales" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Science/Research" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Skilled Labor" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Technology" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Telecommunications" +msgstr "" + +#: ../form_detail.php:1341 +msgid "Transportation/Logistics" +msgstr "" + +#: ../form_detail.php:1342 +msgid "Income" +msgstr "" + +#: ../form_detail.php:1342 +msgid "Under $20,000" +msgstr "" + +#: ../form_detail.php:1342 +msgid "$20,000 - $30,000" +msgstr "" + +#: ../form_detail.php:1342 +msgid "$30,000 - $40,000" +msgstr "" + +#: ../form_detail.php:1342 +msgid "$40,000 - $50,000" +msgstr "" + +#: ../form_detail.php:1342 +msgid "$50,000 - $75,000" +msgstr "" + +#: ../form_detail.php:1342 +msgid "$75,000 - $100,000" +msgstr "" + +#: ../form_detail.php:1342 +msgid "$100,000 - $150,000" +msgstr "" + +#: ../form_detail.php:1342 +msgid "$150,000 or more" +msgstr "" + +#: ../form_detail.php:1343 +msgid "Education" +msgstr "" + +#: ../form_detail.php:1343 +msgid "High School" +msgstr "" + +#: ../form_detail.php:1343 +msgid "Associate Degree" +msgstr "" + +#: ../form_detail.php:1343 +msgid "Bachelor's Degree" +msgstr "" + +#: ../form_detail.php:1343 +msgid "Graduate of Professional Degree" +msgstr "" + +#: ../form_detail.php:1343 +msgid "Some College" +msgstr "" + +#: ../form_detail.php:1344 +msgid "Days of the Week" +msgstr "" + +#: ../form_detail.php:1344 +msgid "Sunday" +msgstr "" + +#: ../form_detail.php:1344 +msgid "Monday" +msgstr "" + +#: ../form_detail.php:1344 +msgid "Tuesday" +msgstr "" + +#: ../form_detail.php:1344 +msgid "Wednesday" +msgstr "" + +#: ../form_detail.php:1344 +msgid "Thursday" +msgstr "" + +#: ../form_detail.php:1344 +msgid "Friday" +msgstr "" + +#: ../form_detail.php:1344 +msgid "Saturday" +msgstr "" + +#: ../form_detail.php:1345 +msgid "Months of the Year" +msgstr "" + +#: ../form_detail.php:1345 +msgid "January" +msgstr "" + +#: ../form_detail.php:1345 +msgid "February" +msgstr "" + +#: ../form_detail.php:1345 +msgid "March" +msgstr "" + +#: ../form_detail.php:1345 +msgid "April" +msgstr "" + +#: ../form_detail.php:1345 ../includes/addon/class-gf-payment-addon.php:1134 +msgid "May" +msgstr "" + +#: ../form_detail.php:1345 +msgid "June" +msgstr "" + +#: ../form_detail.php:1345 +msgid "July" +msgstr "" + +#: ../form_detail.php:1345 +msgid "August" +msgstr "" + +#: ../form_detail.php:1345 +msgid "September" +msgstr "" + +#: ../form_detail.php:1345 +msgid "October" +msgstr "" + +#: ../form_detail.php:1345 +msgid "November" +msgstr "" + +#: ../form_detail.php:1345 +msgid "December" +msgstr "" + +#: ../form_detail.php:1346 +msgid "How Often" +msgstr "" + +#: ../form_detail.php:1346 +msgid "Everyday" +msgstr "" + +#: ../form_detail.php:1346 +msgid "Once a week" +msgstr "" + +#: ../form_detail.php:1346 +msgid "2 to 3 times a week" +msgstr "" + +#: ../form_detail.php:1346 +msgid "Once a month" +msgstr "" + +#: ../form_detail.php:1346 +msgid " 2 to 3 times a month" +msgstr "" + +#: ../form_detail.php:1346 +msgid "Less than once a month" +msgstr "" + +#: ../form_detail.php:1347 +msgid "How Long" +msgstr "" + +#: ../form_detail.php:1347 +msgid "Less than a month" +msgstr "" + +#: ../form_detail.php:1347 +msgid "1-6 months" +msgstr "" + +#: ../form_detail.php:1347 +msgid "1-3 years" +msgstr "" + +#: ../form_detail.php:1347 +msgid "Over 3 Years" +msgstr "" + +#: ../form_detail.php:1347 +msgid "Never used" +msgstr "" + +#: ../form_detail.php:1348 +msgid "Satisfaction" +msgstr "" + +#: ../form_detail.php:1348 +msgid "Very Satisfied" +msgstr "" + +#: ../form_detail.php:1348 +msgid "Satisfied" +msgstr "" + +#: ../form_detail.php:1348 +msgid "Neutral" +msgstr "" + +#: ../form_detail.php:1348 +msgid "Unsatisfied" +msgstr "" + +#: ../form_detail.php:1348 +msgid "Very Unsatisfied" +msgstr "" + +#: ../form_detail.php:1349 +msgid "Importance" +msgstr "" + +#: ../form_detail.php:1349 +msgid "Very Important" +msgstr "" + +#: ../form_detail.php:1349 ../form_settings.php:985 +msgid "Important" +msgstr "" + +#: ../form_detail.php:1349 +msgid "Somewhat Important" +msgstr "" + +#: ../form_detail.php:1349 +msgid "Not Important" +msgstr "" + +#: ../form_detail.php:1350 +msgid "Agreement" +msgstr "" + +#: ../form_detail.php:1350 +msgid "Strongly Agree" +msgstr "" + +#: ../form_detail.php:1350 +msgid "Agree" +msgstr "" + +#: ../form_detail.php:1350 +msgid "Disagree" +msgstr "" + +#: ../form_detail.php:1350 +msgid "Strongly Disagree" +msgstr "" + +#: ../form_detail.php:1351 +msgid "Comparison" +msgstr "" + +#: ../form_detail.php:1351 +msgid "Much Better" +msgstr "" + +#: ../form_detail.php:1351 +msgid "Somewhat Better" +msgstr "" + +#: ../form_detail.php:1351 +msgid "About the Same" +msgstr "" + +#: ../form_detail.php:1351 +msgid "Somewhat Worse" +msgstr "" + +#: ../form_detail.php:1351 +msgid "Much Worse" +msgstr "" + +#: ../form_detail.php:1352 +msgid "Would You" +msgstr "" + +#: ../form_detail.php:1352 +msgid "Definitely" +msgstr "" + +#: ../form_detail.php:1352 +msgid "Probably" +msgstr "" + +#: ../form_detail.php:1352 +msgid "Not Sure" +msgstr "" + +#: ../form_detail.php:1352 +msgid "Probably Not" +msgstr "" + +#: ../form_detail.php:1352 +msgid "Definitely Not" +msgstr "" + +#: ../form_detail.php:1353 +msgid "Extra Small" +msgstr "" + +#: ../form_detail.php:1353 +msgid "Extra Large" +msgstr "" + +#: ../form_detail.php:1362 +msgid "" +"Select a category and customize the predefined choices or paste your own " +"list to bulk add choices." +msgstr "" + +#: ../form_detail.php:1380 +msgid "Insert Choices" +msgstr "" + +#: ../form_detail.php:1385 +msgid "Save as new custom choice" +msgstr "" + +#: ../form_detail.php:1387 +msgid "Save as" +msgstr "" + +#: ../form_detail.php:1387 +msgid "Enter name" +msgstr "" + +#: ../form_detail.php:1387 +msgid "enter name" +msgstr "" + +#: ../form_detail.php:1414 +msgid "Enable \"other\" choice" +msgstr "" + +#: ../form_detail.php:1427 +msgid "Enable Email Confirmation" +msgstr "" + +#: ../form_detail.php:1437 +msgid "Enable Password Strength" +msgstr "" + +#: ../form_detail.php:1448 +msgid "Enable enhanced user interface" +msgstr "" + +#: ../form_detail.php:1455 +msgid "Minimum Strength" +msgstr "" + +#: ../form_detail.php:1460 ../form_display.php:2087 +msgid "Short" +msgstr "" + +#: ../form_detail.php:1461 ../form_display.php:2087 +msgid "Bad" +msgstr "" + +#: ../form_detail.php:1462 ../form_display.php:2087 +msgid "Good" +msgstr "" + +#: ../form_detail.php:1463 ../form_display.php:2087 +msgid "Strong" +msgstr "" + +#: ../form_detail.php:1473 ../tooltips.php:62 +msgid "Number Format" +msgstr "" + +#: ../form_detail.php:1479 ../settings.php:215 ../tooltips.php:135 +msgid "Currency" +msgstr "" + +#: ../form_detail.php:1497 +msgid "Supported Credit Cards" +msgstr "" + +#: ../form_detail.php:1517 +msgid "Card Icon Style" +msgstr "" + +#: ../form_detail.php:1521 ../form_detail.php:1543 +msgid "Standard" +msgstr "" + +#: ../form_detail.php:1522 +msgid "3D" +msgstr "" + +#: ../form_detail.php:1532 ../tooltips.php:118 +msgid "Input Mask" +msgstr "" + +#: ../form_detail.php:1557 +msgid "Enter a custom mask" +msgstr "" + +#: ../form_detail.php:1558 +msgid "Custom Mask Instructions" +msgstr "" + +#: ../form_detail.php:1558 ../gravityforms.php:908 +msgid "Help" +msgstr "" + +#: ../form_detail.php:1563 +msgid "Usage" +msgstr "" + +#: ../form_detail.php:1565 +msgid "Use a '9' to indicate a numerical character." +msgstr "" + +#: ../form_detail.php:1566 +msgid "Use a lower case 'a' to indicate an alphabetical character." +msgstr "" + +#: ../form_detail.php:1567 +msgid "Use an asterick '*' to indicate any alphanumeric character." +msgstr "" + +#: ../form_detail.php:1568 +msgid "" +"Use a question mark '?' to indicate optional characters. Note: All characters after the question mark will be optional." +msgstr "" + +#: ../form_detail.php:1569 +msgid "" +"All other characters are literal values and will be displayed automatically." +msgstr "" + +#: ../form_detail.php:1572 +msgid "Examples" +msgstr "" + +#: ../form_detail.php:1576 ../form_detail.php:1581 ../form_detail.php:1586 +#: ../form_detail.php:1591 ../form_detail.php:1596 +msgid "Mask" +msgstr "" + +#: ../form_detail.php:1577 ../form_detail.php:1582 ../form_detail.php:1587 +#: ../form_detail.php:1592 ../form_detail.php:1597 +msgid "Valid Input" +msgstr "" + +#: ../form_detail.php:1580 +msgid "Social Security Number" +msgstr "" + +#: ../form_detail.php:1585 +msgid "Course Code" +msgstr "" + +#: ../form_detail.php:1590 +msgid "License Key" +msgstr "" + +#: ../form_detail.php:1595 +msgid "Zip Code w/ Optional Plus Four" +msgstr "" + +#: ../form_detail.php:1605 +msgid "Select a Mask" +msgstr "" + +#: ../form_detail.php:1624 ../tooltips.php:49 +msgid "Maximum Characters" +msgstr "" + +#: ../form_detail.php:1634 +msgid "Range" +msgstr "" + +#: ../form_detail.php:1640 +msgid "Min" +msgstr "" + +#: ../form_detail.php:1646 +msgid "Max" +msgstr "" + +#: ../form_detail.php:1662 ../tooltips.php:76 +msgid "Enable Calculation" +msgstr "" + +#: ../form_detail.php:1670 ../tooltips.php:77 +msgid "Formula" +msgstr "" + +#: ../form_detail.php:1683 +msgid "The formula appears to be valid." +msgstr "" + +#: ../form_detail.php:1683 +msgid "There appears to be a problem with the formula." +msgstr "" + +#: ../form_detail.php:1683 +msgid "Validate Formula" +msgstr "" + +#: ../form_detail.php:1686 ../tooltips.php:78 +msgid "Rounding" +msgstr "" + +#: ../form_detail.php:1710 +msgid "Rules" +msgstr "" + +#: ../form_detail.php:1713 +msgid "Required" +msgstr "" + +#: ../form_detail.php:1719 ../tooltips.php:74 +msgid "No Duplicates" +msgstr "" + +#: ../form_detail.php:1737 ../tooltips.php:79 +msgid "Admin Label" +msgstr "" + +#: ../form_detail.php:1747 ../tooltips.php:80 +msgid "Field Size" +msgstr "" + +#: ../form_detail.php:1761 ../form_detail.php:1771 ../tooltips.php:81 +msgid "Default Value" +msgstr "" + +#: ../form_detail.php:1781 ../tooltips.php:82 +msgid "Validation Message" +msgstr "" + +#: ../form_detail.php:1791 ../tooltips.php:64 +msgid "Credit Card Icon Style" +msgstr "" + +#: ../form_detail.php:1811 +msgid "Language" +msgstr "" + +#: ../form_detail.php:1815 +msgid "English" +msgstr "" + +#: ../form_detail.php:1816 +msgid "Dutch" +msgstr "" + +#: ../form_detail.php:1817 +msgid "French" +msgstr "" + +#: ../form_detail.php:1818 +msgid "German" +msgstr "" + +#: ../form_detail.php:1819 +msgid "Portuguese" +msgstr "" + +#: ../form_detail.php:1820 +msgid "Russian" +msgstr "" + +#: ../form_detail.php:1821 +msgid "Spanish" +msgstr "" + +#: ../form_detail.php:1822 +msgid "Turkish" +msgstr "" + +#: ../form_detail.php:1840 ../tooltips.php:35 +msgid "Add Icon URL" +msgstr "" + +#: ../form_detail.php:1850 ../tooltips.php:36 +msgid "Delete Icon URL" +msgstr "" + +#: ../form_detail.php:1859 +msgid "Enable Password Input" +msgstr "" + +#: ../form_detail.php:1866 ../tooltips.php:63 +msgid "Force SSL" +msgstr "" + +#: ../form_detail.php:1873 ../tooltips.php:85 +msgid "Visibility" +msgstr "" + +#: ../form_detail.php:1877 +msgid "Everyone" +msgstr "" + +#: ../form_detail.php:1882 +msgid "Admin Only" +msgstr "" + +#: ../form_detail.php:1891 +msgid "Allow field to be populated dynamically" +msgstr "" + +#: ../form_detail.php:1901 ../form_settings.php:488 +msgid "Enable Conditional Logic" +msgstr "" + +#: ../form_detail.php:1912 +msgid "Enable Page Conditional Logic" +msgstr "" + +#: ../form_detail.php:1924 +msgid "Enable Next Button Conditional Logic" +msgstr "" + +#: ../form_detail.php:2003 ../tooltips.php:121 +msgid "Post Fields" +msgstr "" + +#: ../form_detail.php:2007 ../tooltips.php:122 +msgid "Pricing Fields" +msgstr "" + +#: ../form_detail.php:2033 ../form_list.php:489 +msgid "Move this form to the trash" +msgstr "" + +#: ../form_detail.php:2033 +msgid "" +"Would you like to move this form to the trash? \\'Cancel\\' to stop. \\'OK" +"\\' to continue" +msgstr "" + +#: ../form_detail.php:2038 +msgid "Update Form" +msgstr "" + +#: ../form_detail.php:2038 +msgid "Save Form" +msgstr "" + +#: ../form_detail.php:2049 ../gravityforms.php:2252 +msgid "Preview" +msgstr "" + +#: ../form_detail.php:2348 ../forms_model.php:403 +msgid "Admin Notification" +msgstr "" + +#: ../form_detail.php:2351 +msgid "New submission from" +msgstr "" + +#: ../form_detail.php:2365 ../forms_model.php:3544 +msgid "Default Confirmation" +msgstr "" + +#: ../form_display.php:421 +msgid "Oops! We could not locate your form." +msgstr "" + +#: ../form_display.php:438 +msgid "Sorry. You must be logged in to view this form." +msgstr "" + +#: ../form_display.php:544 +msgid "There was a problem with your submission." +msgstr "" + +#: ../form_display.php:544 +msgid "Errors have been highlighted below." +msgstr "" + +#: ../form_display.php:575 ../form_display.php:2328 +msgid "Previous Page" +msgstr "" + +#: ../form_display.php:813 +msgid "This field is for validation purposes and should be left unchanged." +msgstr "" + +#: ../form_display.php:1095 ../form_display.php:1326 ../form_display.php:1463 +#: ../form_display.php:1479 ../includes/addon/class-gf-addon.php:1567 +msgid "This field is required." +msgstr "" + +#: ../form_display.php:1106 +msgid "This date has already been taken. Please select a new date." +msgstr "" + +#: ../form_display.php:1110 +msgid "" +"This field requires a unique entry and the values you entered have been " +"already been used." +msgstr "" + +#: ../form_display.php:1111 +#, php-format +msgid "This field requires a unique entry and '%s' has already been used" +msgstr "" + +#: ../form_display.php:1121 +msgid "Please enter a valid value." +msgstr "" + +#: ../form_display.php:1121 +msgid "Invalid selection. Please select one of the available choices." +msgstr "" + +#: ../form_display.php:1130 +msgid "Your passwords do not match." +msgstr "" + +#: ../form_display.php:1138 +msgid "" +"Your password does not meet the required strength.
              Hint: To make it " +"stronger, use upper and lower case letters, numbers and symbols like ! \" ? " +"$ % ^ & )." +msgstr "" + +#: ../form_display.php:1150 +msgid "This field is required. Please enter the first and last name." +msgstr "" + +#: ../form_display.php:1166 +msgid "This field is required. Please enter a complete address." +msgstr "" + +#: ../form_display.php:1179 +msgid "Please enter your credit card information." +msgstr "" + +#: ../form_display.php:1187 +msgid "Please enter your card's security code." +msgstr "" + +#: ../form_display.php:1191 +msgid "Invalid credit card number." +msgstr "" + +#: ../form_display.php:1195 +msgid "is not supported. Please enter one of the supported credit cards." +msgstr "" + +#: ../form_display.php:1203 +msgid "Please enter a valid email address." +msgstr "" + +#: ../form_display.php:1209 +msgid "Your emails do not match." +msgstr "" + +#: ../form_display.php:1223 +msgid "Please enter a valid amount." +msgstr "" + +#: ../form_display.php:1238 +msgid "Please enter a valid quantity. Quantity cannot contain decimals." +msgstr "" + +#: ../form_display.php:1287 +#, php-format +msgid "Please enter a valid date in the format (%s)." +msgstr "" + +#: ../form_display.php:1287 +msgid "Please enter a valid date." +msgstr "" + +#: ../form_display.php:1317 +msgid "Please enter a valid time." +msgstr "" + +#: ../form_display.php:1332 +msgid "Please enter a valid Website URL (i.e. http://www.gravityforms.com)." +msgstr "" + +#: ../form_display.php:1345 ../form_display.php:1380 +msgid "The CAPTCHA wasn't entered correctly. Go back and try it again." +msgstr "" + +#: ../form_display.php:1401 +msgid "The reCAPTCHA wasn't entered correctly. Go back and try it again." +msgstr "" + +#: ../form_display.php:1424 +#, php-format +msgid "File exceeds size limit. Maximum file size: %dMB" +msgstr "" + +#: ../form_display.php:1427 +#, php-format +msgid "There was an error while uploading the file. Error code: %d" +msgstr "" + +#: ../form_display.php:1445 ../includes/upload.php:60 +msgid "The uploaded file type is not allowed." +msgstr "" + +#: ../form_display.php:1449 ../includes/upload.php:63 +#, php-format +msgid "The uploaded file type is not allowed. Must be one of the following: %s" +msgstr "" + +#: ../form_display.php:1467 +msgid "Please enter a valid quantity" +msgstr "" + +#: ../form_display.php:2018 +msgid "No results matched" +msgstr "" + +#: ../form_display.php:2044 ../form_display.php:2585 ../gravityforms.php:1354 +msgid "of" +msgstr "" + +#: ../form_display.php:2044 +msgid "max characters" +msgstr "" + +#: ../form_display.php:2087 +msgid "Mismatch" +msgstr "" + +#: ../form_display.php:2325 ../js.php:387 +msgid "Next" +msgstr "" + +#: ../form_display.php:2325 +msgid "Next Page" +msgstr "" + +#: ../form_display.php:2421 +msgid "click to duplicate this field" +msgstr "" + +#: ../form_display.php:2424 +msgid "click to delete this field" +msgstr "" + +#: ../form_display.php:2427 +msgid "Field ID" +msgstr "" + +#: ../form_display.php:2427 +msgid "click to expand and edit the options for this field" +msgstr "" + +#: ../form_display.php:2450 +msgid "end of page" +msgstr "" + +#: ../form_display.php:2450 +msgid "PAGE BREAK" +msgstr "" + +#: ../form_display.php:2450 +msgid "top of new page" +msgstr "" + +#: ../form_display.php:2499 +msgid "" +"This page is unsecured. Do not enter a real credit card number. Use this " +"field only for testing purposes. " +msgstr "" + +#: ../form_display.php:2585 +msgid "Step" +msgstr "" + +#: ../form_display.php:2612 +msgid "Sorry. This form is no longer accepting new submissions." +msgstr "" + +#: ../form_display.php:2628 +msgid "This form is not yet available." +msgstr "" + +#: ../form_display.php:2630 +msgid "Sorry. This form is no longer available." +msgstr "" + +#: ../form_list.php:21 +msgid "Form moved to the trash." +msgstr "" + +#: ../form_list.php:27 +msgid "Form restored." +msgstr "" + +#: ../form_list.php:34 +msgid "Form deleted." +msgstr "" + +#: ../form_list.php:40 +msgid "Form duplicated." +msgstr "" + +#: ../form_list.php:132 +msgid "Create a New Form" +msgstr "" + +#: ../form_list.php:146 +msgid "Creating Form..." +msgstr "" + +#: ../form_list.php:178 +msgid "Saved! Redirecting..." +msgstr "" + +#: ../form_list.php:227 ../tooltips.php:29 +msgid "Form Description" +msgstr "" + +#: ../form_list.php:232 +msgid "Create Form" +msgstr "" + +#: ../form_list.php:287 +msgid "Ajax error while updating form" +msgstr "" + +#: ../form_list.php:301 +msgid "" +"WARNING: You are about to delete these forms and ALL entries associated with " +"them. " +msgstr "" + +#: ../form_list.php:301 ../form_list.php:305 ../form_settings.php:1489 +#: ../notification.php:1082 ../includes/addon/class-gf-feed-addon.php:533 +msgid "\\'Cancel\\' to stop, \\'OK\\' to delete." +msgstr "" + +#: ../form_list.php:303 +msgid "Are you sure you would like to reset the Views for the selected forms? " +msgstr "" + +#: ../form_list.php:303 +msgid "\\'Cancel\\' to stop, \\'OK\\' to reset." +msgstr "" + +#: ../form_list.php:305 +msgid "" +"WARNING: You are about to delete ALL entries associated with the selected " +"forms. " +msgstr "" + +#: ../form_list.php:315 ../gravityforms.php:885 ../gravityforms.php:888 +#: ../gravityforms.php:1219 +msgid "Forms" +msgstr "" + +#: ../form_list.php:316 ../form_settings.php:878 ../notification.php:388 +#: ../includes/addon/class-gf-feed-addon.php:321 +#: ../includes/addon/class-gf-feed-addon.php:400 +msgid "Add New" +msgstr "" + +#: ../form_list.php:346 ../form_list.php:466 ../form_list.php:467 +#: ../form_list.php:546 +msgid "Delete permanently" +msgstr "" + +#: ../form_list.php:348 ../form_list.php:548 +msgid "Mark as Active" +msgstr "" + +#: ../form_list.php:349 ../form_list.php:549 +msgid "Mark as Inactive" +msgstr "" + +#: ../form_list.php:350 ../form_list.php:550 +msgid "Reset Views" +msgstr "" + +#: ../form_list.php:351 ../form_list.php:551 +msgid "Permanently Delete Entries" +msgstr "" + +#: ../form_list.php:352 ../form_list.php:552 +msgid "Move to trash" +msgstr "" + +#: ../form_list.php:385 ../form_list.php:407 +msgid "Id" +msgstr "" + +#: ../form_list.php:391 ../form_list.php:409 +msgid "Views" +msgstr "" + +#: ../form_list.php:393 ../form_list.php:411 +msgid "Conversion" +msgstr "" + +#: ../form_list.php:469 +msgid "" +"WARNING: You are about to delete this form and ALL entries associated with " +"it. " +msgstr "" + +#: ../form_list.php:469 +msgid "\\\"Cancel\\\" to stop, \\\"OK\\\" to delete." +msgstr "" + +#: ../form_list.php:480 ../form_settings.php:1488 ../notification.php:1081 +msgid "Duplicate" +msgstr "" + +#: ../form_list.php:481 +msgid "Duplicate this form" +msgstr "" + +#: ../form_list.php:524 +msgid "There are no forms in the trash." +msgstr "" + +#: ../form_list.php:526 +#, php-format +msgid "You don't have any forms. Let's go %screate one%s!" +msgstr "" + +#: ../form_list.php:571 ../form_list.php:604 +msgid "There was an issue creating your form." +msgstr "" + +#: ../form_list.php:583 +msgid "Please enter a form title." +msgstr "" + +#: ../form_list.php:608 +msgid "Please enter a unique form title." +msgstr "" + +#: ../form_settings.php:93 ../form_settings.php:796 ../form_settings.php:1260 +#: ../gravityforms.php:2220 +msgid "Form Settings" +msgstr "" + +#: ../form_settings.php:270 +msgid "" +"The form title you have entered has already been used. Please enter a unique " +"form title." +msgstr "" + +#: ../form_settings.php:281 +msgid "Form settings updated successfully." +msgstr "" + +#: ../form_settings.php:313 +msgid "Form title" +msgstr "" + +#: ../form_settings.php:327 +msgid "Form description" +msgstr "" + +#: ../form_settings.php:338 +msgid "Top aligned" +msgstr "" + +#: ../form_settings.php:339 +msgid "Left aligned" +msgstr "" + +#: ../form_settings.php:340 +msgid "Right aligned" +msgstr "" + +#: ../form_settings.php:353 +msgid "Label placement" +msgstr "" + +#: ../form_settings.php:368 +msgid "Below inputs" +msgstr "" + +#: ../form_settings.php:369 +msgid "Above inputs" +msgstr "" + +#: ../form_settings.php:380 +msgid "Description placement" +msgstr "" + +#: ../form_settings.php:428 +msgid "Input type" +msgstr "" + +#: ../form_settings.php:434 ../form_settings.php:1075 +#: ../form_settings.php:1547 +msgid "Text" +msgstr "" + +#: ../form_settings.php:452 +msgid "Button text" +msgstr "" + +#: ../form_settings.php:466 +msgid "Button image path" +msgstr "" + +#: ../form_settings.php:484 +msgid "Button conditional logic" +msgstr "" + +#: ../form_settings.php:514 +msgid "total entries" +msgstr "" + +#: ../form_settings.php:515 +msgid "per day" +msgstr "" + +#: ../form_settings.php:516 +msgid "per week" +msgstr "" + +#: ../form_settings.php:517 +msgid "per month" +msgstr "" + +#: ../form_settings.php:518 +msgid "per year" +msgstr "" + +#: ../form_settings.php:528 +msgid "Limit number of entries" +msgstr "" + +#: ../form_settings.php:532 +msgid "Enable entry limit" +msgstr "" + +#: ../form_settings.php:542 +msgid "Number of Entries" +msgstr "" + +#: ../form_settings.php:561 +msgid "Entry Limit Reached Message" +msgstr "" + +#: ../form_settings.php:628 ../form_settings.php:632 +msgid "Schedule form" +msgstr "" + +#: ../form_settings.php:641 +msgid "Schedule Start Date/Time" +msgstr "" + +#: ../form_settings.php:666 +msgid "Schedule Form End Date/Time" +msgstr "" + +#: ../form_settings.php:691 +msgid "Form Pending Message" +msgstr "" + +#: ../form_settings.php:704 +msgid "Form Expired Message" +msgstr "" + +#: ../form_settings.php:720 +msgid "Anti-spam honeypot" +msgstr "" + +#: ../form_settings.php:724 +msgid "Enable anti-spam honeypot" +msgstr "" + +#: ../form_settings.php:736 +msgid "Animated transitions" +msgstr "" + +#: ../form_settings.php:740 +msgid "Enable animations" +msgstr "" + +#: ../form_settings.php:756 ../form_settings.php:760 ../tooltips.php:91 +msgid "Require user to be logged in" +msgstr "" + +#: ../form_settings.php:769 ../tooltips.php:92 +msgid "Require Login Message" +msgstr "" + +#: ../form_settings.php:785 +msgid "Form Basics" +msgstr "" + +#: ../form_settings.php:786 +msgid "Form Layout" +msgstr "" + +#: ../form_settings.php:787 +msgid "Form Button" +msgstr "" + +#: ../form_settings.php:788 +msgid "Restrictions" +msgstr "" + +#: ../form_settings.php:789 +msgid "Form Options" +msgstr "" + +#: ../form_settings.php:845 +msgid "Update Form Settings" +msgstr "" + +#: ../form_settings.php:873 ../form_settings.php:878 ../form_settings.php:966 +#: ../form_settings.php:1261 +msgid "Confirmations" +msgstr "" + +#: ../form_settings.php:904 +msgid "Ajax error while updating confirmation" +msgstr "" + +#: ../form_settings.php:985 +msgid "" +"Ensure that the conditional logic for this confirmation is different from " +"all the other confirmations for this form and then press save to create the " +"new confirmation." +msgstr "" + +#: ../form_settings.php:1021 +msgid "Save Confirmation" +msgstr "" + +#: ../form_settings.php:1064 +msgid "Confirmation Name" +msgstr "" + +#: ../form_settings.php:1071 +msgid "Confirmation Type" +msgstr "" + +#: ../form_settings.php:1081 ../form_settings.php:1113 +#: ../form_settings.php:1550 ../js.php:78 +msgid "Page" +msgstr "" + +#: ../form_settings.php:1087 ../form_settings.php:1553 +msgid "Redirect" +msgstr "" + +#: ../form_settings.php:1097 ../notification.php:754 +msgid "Message" +msgstr "" + +#: ../form_settings.php:1102 +msgid "Disable Auto-formatting" +msgstr "" + +#: ../form_settings.php:1115 +msgid "Select a page" +msgstr "" + +#: ../form_settings.php:1123 ../form_settings.php:1149 +msgid "Redirect Query String" +msgstr "" + +#: ../form_settings.php:1125 ../form_settings.php:1151 +msgid "Pass Field Data Via Query String" +msgstr "" + +#: ../form_settings.php:1128 ../form_settings.php:1154 +msgid "Sample: phone={Phone:1}&email={Email:2}" +msgstr "" + +#: ../form_settings.php:1138 +msgid "Redirect URL" +msgstr "" + +#: ../form_settings.php:1300 +msgid "You must specify a Confirmation Name." +msgstr "" + +#: ../form_settings.php:1307 +msgid "You must select a Confirmation Page." +msgstr "" + +#: ../form_settings.php:1313 +msgid "You must specify a Redirect URL." +msgstr "" + +#: ../form_settings.php:1331 +#, php-format +msgid "Confirmation saved successfully. %sBack to confirmations.%s" +msgstr "" + +#: ../form_settings.php:1351 +msgid "Confirmation deleted." +msgstr "" + +#: ../form_settings.php:1487 ../notification.php:1080 +msgid "Edit this item" +msgstr "" + +#: ../form_settings.php:1488 +msgid "Duplicate this confirmation" +msgstr "" + +#: ../form_settings.php:1489 +msgid "Delete this item" +msgstr "" + +#: ../form_settings.php:1489 +msgid "WARNING: You are about to delete this confirmation." +msgstr "" + +#: ../form_settings.php:1530 +msgid "This page does not exist." +msgstr "" + +#: ../forms_model.php:428 +msgid "User Notification" +msgstr "" + +#: ../forms_model.php:510 ../forms_model.php:522 +msgid "Notification not found" +msgstr "" + +#: ../forms_model.php:648 ../forms_model.php:1035 +msgid "You don't have adequate permission to delete entries." +msgstr "" + +#: ../forms_model.php:702 +msgid "You don't have adequate permission to delete forms." +msgstr "" + +#: ../forms_model.php:752 +msgid "You don't have adequate permission to create forms." +msgstr "" + +#: ../forms_model.php:1084 +msgid "You don't have adequate permission to delete notes." +msgstr "" + +#: ../forms_model.php:1123 +msgid "You don't have adequate permission to edit entries." +msgstr "" + +#: ../gravityforms.php:883 +msgid "Update Available" +msgstr "" + +#: ../gravityforms.php:899 ../gravityforms.php:1158 ../gravityforms.php:2220 +#: ../settings.php:420 ../includes/addon/class-gf-addon.php:1971 +msgid "Settings" +msgstr "" + +#: ../gravityforms.php:901 +msgid "Import/Export" +msgstr "" + +#: ../gravityforms.php:904 +msgid "Updates" +msgstr "" + +#: ../gravityforms.php:905 ../help.php:43 +msgid "Add-Ons" +msgstr "" + +#: ../gravityforms.php:969 +#, php-format +msgid "%1$s ‹ %2$s — WordPress" +msgstr "" + +#: ../gravityforms.php:1067 ../gravityforms.php:1082 +msgid "Add Gravity Form" +msgstr "" + +#: ../gravityforms.php:1082 +msgid "Add Form" +msgstr "" + +#: ../gravityforms.php:1094 +msgid "Please select a form" +msgstr "" + +#: ../gravityforms.php:1114 +msgid "Insert A Form" +msgstr "" + +#: ../gravityforms.php:1116 +msgid "Select a form below to add it to your post or page." +msgstr "" + +#: ../gravityforms.php:1121 ../widget.php:74 +msgid "Select a Form" +msgstr "" + +#: ../gravityforms.php:1131 +msgid "Can't find your form? Make sure it is active." +msgstr "" + +#: ../gravityforms.php:1134 ../widget.php:88 +msgid "Display form title" +msgstr "" + +#: ../gravityforms.php:1135 ../widget.php:89 +msgid "Display form description" +msgstr "" + +#: ../gravityforms.php:1136 ../widget.php:95 +msgid "Enable AJAX" +msgstr "" + +#: ../gravityforms.php:1139 +msgid "Insert Form" +msgstr "" + +#: ../gravityforms.php:1172 ../update.php:28 +msgid "There is a new version of Gravity Forms available." +msgstr "" + +#: ../gravityforms.php:1172 ../includes/addon/class-gf-auto-upgrade.php:54 +#: ../includes/addon/class-gf-auto-upgrade.php:138 +#, php-format +msgid "View version %s Details" +msgstr "" + +#: ../gravityforms.php:1174 +msgid "Please try again or contact us." +msgstr "" + +#: ../gravityforms.php:1246 ../gravityforms.php:1249 +msgid "View All Entries" +msgstr "" + +#: ../gravityforms.php:1248 +#, php-format +msgid "Last Entry: %s" +msgstr "" + +#: ../gravityforms.php:1260 +msgid "View All Forms" +msgstr "" + +#: ../gravityforms.php:1268 +#, php-format +msgid "You don't have any forms. Let's go %s create one %s!" +msgstr "" + +#: ../gravityforms.php:1298 +#, php-format +msgid "There is an update available for Gravity Forms. %sView Details%s %s" +msgstr "" + +#: ../gravityforms.php:1301 +msgid "Dismiss" +msgstr "" + +#: ../gravityforms.php:1351 +msgid "Next >" +msgstr "" + +#: ../gravityforms.php:1352 +msgid "< Prev" +msgstr "" + +#: ../gravityforms.php:1355 +msgid "Close" +msgstr "" + +#: ../gravityforms.php:1356 +msgid "" +"This feature requires inline frames. You have iframes disabled or your " +"browser does not support them." +msgstr "" + +#: ../gravityforms.php:1638 +msgid "Add-On browser is currently unavailable. Please try again later." +msgstr "" + +#: ../gravityforms.php:1813 +msgid "There was an error while resending the notifications." +msgstr "" + +#: ../gravityforms.php:1819 +msgid "" +"No notifications have been selected. Please select a notification to be sent." +msgstr "" + +#: ../gravityforms.php:1822 +msgid "The Send To email address provided is not valid." +msgstr "" + +#: ../gravityforms.php:2107 +msgid "Switch Form" +msgstr "" + +#: ../gravityforms.php:2207 +msgid "Edit this form" +msgstr "" + +#: ../gravityforms.php:2222 +msgid "Edit settings for this form" +msgstr "" + +#: ../gravityforms.php:2239 +msgid "View entries generated by this form" +msgstr "" + +#: ../help.php:12 +msgid "Gravity Forms Help" +msgstr "" + +#: ../help.php:17 +msgid "" +"IMPORTANT NOTICE: We do not provide support via e-mail. " +"Please open a " +"support ticket." +msgstr "" + +#: ../help.php:19 +msgid "" +"Please review the plugin documentation and frequently asked questions (FAQ) first. " +"If you still can't find the answer open a support ticket and we will be happy to " +"answer your questions and assist you with any problems. Please note:" +" If you have not purchased a license from us, you won't have access to " +"these help resources." +msgstr "" + +#: ../help.php:24 +msgid "Gravity Forms Documentation" +msgstr "" + +#: ../help.php:33 +msgid "Documentation (please select a topic)" +msgstr "" + +#: ../help.php:35 +msgid "Getting Started" +msgstr "" + +#: ../help.php:37 +msgid "Using Gravity Forms" +msgstr "" + +#: ../help.php:39 +msgid "Design and Layout" +msgstr "" + +#: ../help.php:41 +msgid "Developer Docs" +msgstr "" + +#: ../help.php:45 +msgid "How To" +msgstr "" + +#: ../help.php:50 ../help.php:77 ../help.php:104 +msgid "GO" +msgstr "" + +#: ../help.php:59 +msgid "Gravity Forms FAQ" +msgstr "" + +#: ../help.php:67 +msgid "FAQ (please select a topic)" +msgstr "" + +#: ../help.php:68 +msgid "Installation Questions" +msgstr "" + +#: ../help.php:69 +msgid "Formatting/Styling Questions" +msgstr "" + +#: ../help.php:70 +msgid "Notification Questions" +msgstr "" + +#: ../help.php:71 +msgid "General Questions" +msgstr "" + +#: ../help.php:87 +msgid "Gravity Forms Downloads" +msgstr "" + +#: ../help.php:88 +msgid "" +"Please Note: Only licensed Gravity Forms customers are " +"granted access to the downloads section." +msgstr "" + +#: ../help.php:96 +msgid "Downloads (please select a product)" +msgstr "" + +#: ../help.php:97 +msgid "Gravity Forms" +msgstr "" + +#: ../help.php:98 +msgid "Gravity Forms Add-Ons" +msgstr "" + +#: ../help.php:115 +msgid "Gravity Forms Tutorials & Resources" +msgstr "" + +#: ../help.php:116 +msgid "" +"Please note: The Gravity Forms support team does not " +"provide support for third party scripts, widgets, etc." +msgstr "" + +#: ../js.php:6 +msgid "Delete this custom choice list? 'OK' to delete, 'Cancel' to abort." +msgstr "" + +#: ../js.php:20 +msgid "Item has been deleted." +msgstr "" + +#: ../js.php:27 +msgid "Please enter name." +msgstr "" + +#: ../js.php:31 +msgid "This custom choice name is already in use. Please enter another name." +msgstr "" + +#: ../js.php:50 +msgid "Item has been saved." +msgstr "" + +#: ../js.php:61 ../js.php:223 +msgid "" +"To use conditional logic, please create a drop down, checkbox or radio " +"button field." +msgstr "" + +#: ../js.php:113 +msgid "Completed" +msgstr "" + +#: ../js.php:146 +msgid "Select a category" +msgstr "" + +#: ../js.php:159 +msgid "Parameter Name:" +msgstr "" + +#: ../js.php:188 +msgid "" +"This field is not associated with a product. Please add a Product Field to " +"the form." +msgstr "" + +#: ../js.php:206 +msgid "Deleted Field" +msgstr "" + +#: ../js.php:244 +msgid "Column 1" +msgstr "" + +#: ../js.php:244 +msgid "Column 2" +msgstr "" + +#: ../js.php:244 +msgid "Column 3" +msgstr "" + +#: ../js.php:260 +msgid "" +"The form title you have entered is already taken. Please enter a unique form " +"title" +msgstr "" + +#: ../js.php:266 +msgid "" +"Please enter a Title for this form. When adding the form to a page or post, " +"you will have the option to hide the title." +msgstr "" + +#: ../js.php:277 +msgid "" +"Your form currently has one ore more pages without any fields in it. Blank " +"pages are a result of Page Breaks that are positioned as the first or last " +"field in the form or right after to each other. Please adjust your Page " +"Breaks and try again." +msgstr "" + +#: ../js.php:285 +msgid "" +"Your form currently has a product field with a blank label. \\nPlease enter " +"a label for all product fields." +msgstr "" + +#: ../js.php:294 +msgid "" +"Your form currently has an option field without a product field.\\nYou must " +"add a product field to your form." +msgstr "" + +#: ../js.php:337 +msgid "Ajax error while saving form" +msgstr "" + +#: ../js.php:346 +msgid "" +"Warning! Deleting this field will also delete all entry data associated with " +"it. \\'Cancel\\' to stop. \\'OK\\' to delete" +msgstr "" + +#: ../js.php:393 +msgid "HTML Block" +msgstr "" + +#: ../js.php:427 ../js.php:440 ../js.php:452 ../js.php:672 +msgid "Untitled" +msgstr "" + +#: ../js.php:430 ../js.php:444 ../js.php:445 ../js.php:456 ../js.php:457 +msgid "First Choice" +msgstr "" + +#: ../js.php:430 ../js.php:444 ../js.php:445 ../js.php:456 ../js.php:457 +msgid "Second Choice" +msgstr "" + +#: ../js.php:430 ../js.php:444 ../js.php:445 ../js.php:456 ../js.php:457 +msgid "Third Choice" +msgstr "" + +#: ../js.php:465 +msgid "State / Province" +msgstr "" + +#: ../js.php:475 +msgid "Card Type" +msgstr "" + +#: ../js.php:476 +msgid "Cardholder\\'s Name" +msgstr "" + +#: ../js.php:530 +msgid "Hidden Field" +msgstr "" + +#: ../js.php:534 +msgid "Post Title" +msgstr "" + +#: ../js.php:538 +msgid "Post Body" +msgstr "" + +#: ../js.php:542 +msgid "Post Excerpt" +msgstr "" + +#: ../js.php:547 +msgid "Post Tags" +msgstr "" + +#: ../js.php:554 +msgid "Post Custom Field" +msgstr "" + +#: ../js.php:557 +msgid "Post Image" +msgstr "" + +#: ../js.php:565 +msgid "Captcha" +msgstr "" + +#: ../js.php:573 +msgid "Product Name" +msgstr "" + +#: ../js.php:618 +msgid "First Option" +msgstr "" + +#: ../js.php:618 +msgid "Second Option" +msgstr "" + +#: ../js.php:618 +msgid "Third Option" +msgstr "" + +#: ../js.php:629 +msgid "Donation" +msgstr "" + +#: ../js.php:703 +msgid "Only one reCAPTCHA field can be added to the form." +msgstr "" + +#: ../js.php:714 +msgid "Only one Shipping field can be added to the form" +msgstr "" + +#: ../js.php:721 +msgid "Only one Post Content field can be added to the form" +msgstr "" + +#: ../js.php:727 +msgid "Only one Post Title field can be added to the form" +msgstr "" + +#: ../js.php:733 +msgid "Only one Post Excerpt field can be added to the form" +msgstr "" + +#: ../js.php:739 +msgid "Only one credit card field can be added to the form" +msgstr "" + +#: ../js.php:746 +msgid "You must add a product field to the form first" +msgstr "" + +#: ../js.php:773 +msgid "Ajax error while adding field" +msgstr "" + +#: ../js.php:799 +msgid "Ajax error while duplicating field" +msgstr "" + +#: ../js.php:823 +msgid "Ajax error while changing input type" +msgstr "" + +#: ../js.php:894 +msgid "Select a field" +msgstr "" + +#: ../js.php:894 +msgid "User IP Address" +msgstr "" + +#: ../notification.php:83 +#, php-format +msgid "Notification saved successfully. %sBack to notifications.%s" +msgstr "" + +#: ../notification.php:86 +msgid "" +"Notification could not be updated. Please enter all required information " +"below." +msgstr "" + +#: ../notification.php:152 ../notification.php:639 +msgid "Send to" +msgstr "" + +#: ../notification.php:153 ../notification.php:640 +msgid "if" +msgstr "" + +#: ../notification.php:300 ../notification.php:929 +msgid "Enter value" +msgstr "" + +#: ../notification.php:364 +msgid "Save Notification" +msgstr "" + +#: ../notification.php:364 +msgid "Update Notification" +msgstr "" + +#: ../notification.php:410 +msgid "Ajax error while updating notification" +msgstr "" + +#: ../notification.php:448 +msgid "Notification deleted." +msgstr "" + +#: ../notification.php:450 +msgid "There was an issue deleting this notification." +msgstr "" + +#: ../notification.php:456 +msgid "Notification duplicates." +msgstr "" + +#: ../notification.php:458 +msgid "There was an issue duplicating this notification." +msgstr "" + +#: ../notification.php:503 +msgid "Form is submitted" +msgstr "" + +#: ../notification.php:509 +msgid "Event" +msgstr "" + +#: ../notification.php:552 +msgid "Select a Field" +msgstr "" + +#: ../notification.php:557 +msgid "Configure Routing" +msgstr "" + +#: ../notification.php:566 +msgid "Send to Email" +msgstr "" + +#: ../notification.php:574 +msgid "Please enter a valid email address" +msgstr "" + +#: ../notification.php:584 +msgid "Send to Field" +msgstr "" + +#: ../notification.php:590 +msgid "Select an email field" +msgstr "" + +#: ../notification.php:603 +msgid "" +"Your form does not have an email field. Add an email field to your form and " +"try again." +msgstr "" + +#: ../notification.php:621 +msgid "" +"To use notification routing, your form must have a field supported by " +"conditional logic." +msgstr "" + +#: ../notification.php:662 +msgid "" +"Please enter a valid email address for all highlighted routing rules above." +msgstr "" + +#: ../notification.php:677 ../tooltips.php:20 +msgid "From Name" +msgstr "" + +#: ../notification.php:690 +msgid "From Email" +msgstr "" + +#: ../notification.php:703 ../tooltips.php:21 +msgid "Reply To" +msgstr "" + +#: ../notification.php:716 +msgid "BCC" +msgstr "" + +#: ../notification.php:733 ../notification.php:1017 +msgid "Subject" +msgstr "" + +#: ../notification.php:740 +msgid "Please enter a subject for the notification email" +msgstr "" + +#: ../notification.php:770 +msgid "Please enter a message for the notification email" +msgstr "" + +#: ../notification.php:780 +msgid "Auto-formatting" +msgstr "" + +#: ../notification.php:787 +msgid "Disable auto-formatting" +msgstr "" + +#: ../notification.php:802 +msgid "Enable conditional logic" +msgstr "" + +#: ../notification.php:1081 +msgid "Duplicate this notification" +msgstr "" + +#: ../notification.php:1082 +msgid "Delete this notification" +msgstr "" + +#: ../notification.php:1082 +msgid "WARNING: You are about to delete this notification." +msgstr "" + +#: ../notification.php:1115 +#, php-format +msgid "This form doesn't have any notifications. Let's go %screate one%s." +msgstr "" + +#: ../preview.php:21 +msgid "You don't have adequate permission to preview forms." +msgstr "" + +#: ../preview.php:29 ../preview.php:62 +msgid "Form Preview" +msgstr "" + +#: ../preview.php:62 ../print-entry.php:102 +msgid "close window" +msgstr "" + +#: ../preview.php:64 +msgid "" +"Note: This is a simple form preview. This form may display differently when " +"added to your page based on inheritance from individual theme styles." +msgstr "" + +#: ../print-entry.php:21 +msgid "You don't have adequate permission to view entries." +msgstr "" + +#: ../print-entry.php:68 +msgid "Form Id and Lead Id are required parameters." +msgstr "" + +#: ../print-entry.php:102 +msgid "Print Preview" +msgstr "" + +#: ../select_columns.php:24 +msgid "Oops! We could not locate your form. Please try again." +msgstr "" + +#: ../select_columns.php:104 +msgid "" +"Drag & drop to order and select which columns are displayed in the entries " +"table." +msgstr "" + +#: ../select_columns.php:107 +msgid "Active Columns" +msgstr "" + +#: ../select_columns.php:122 +msgid "Inactive Columns" +msgstr "" + +#: ../settings.php:47 ../settings.php:86 ../settings.php:93 +msgid "Uninstall Gravity Forms" +msgstr "" + +#: ../settings.php:51 +msgid "You don't have adequate permission to uninstall Gravity Forms." +msgstr "" + +#: ../settings.php:78 +#, php-format +msgid "" +"Gravity Forms have been successfully uninstalled. It can be re-activated " +"from the %splugins page%s." +msgstr "" + +#: ../settings.php:89 +msgid "Warning" +msgstr "" + +#: ../settings.php:90 +msgid "This operation deletes ALL Gravity Forms data." +msgstr "" + +#: ../settings.php:90 +msgid "" +"If you continue, You will not be able to retrieve or restore your forms or " +"entries." +msgstr "" + +#: ../settings.php:93 +msgid "" +"Warning! ALL Gravity Forms data, including form entries will be deleted. " +"This cannot be undone. \\'OK\\' to delete, \\'Cancel\\' to stop" +msgstr "" + +#: ../settings.php:120 +msgid "You don't have adequate permission to edit settings." +msgstr "" + +#: ../settings.php:141 +msgid "Settings Updated" +msgstr "" + +#: ../settings.php:148 ../settings.php:152 +msgid "General Settings" +msgstr "" + +#: ../settings.php:155 +msgid "Support License Key" +msgstr "" + +#: ../settings.php:161 ../includes/addon/class-gf-addon.php:1598 +msgid "Validation Error" +msgstr "" + +#: ../settings.php:161 +msgid "" +"There was an error while validating your license key. Gravity Forms will " +"continue to work, but automatic upgrades will not be available. Please " +"contact support to resolve this issue." +msgstr "" + +#: ../settings.php:163 +msgid "Valid Key : Your license key has been successfully validated." +msgstr "" + +#: ../settings.php:165 +msgid "" +"Invalid or Expired Key : Please make sure you have entered the correct value " +"and that your key is not expired." +msgstr "" + +#: ../settings.php:170 +msgid "The license key is used for access to automatic upgrades and support." +msgstr "" + +#: ../settings.php:174 ../tooltips.php:130 +msgid "Output CSS" +msgstr "" + +#: ../settings.php:176 ../settings.php:184 ../settings.php:207 +msgid "Yes" +msgstr "" + +#: ../settings.php:177 ../settings.php:185 ../settings.php:208 +msgid "No" +msgstr "" + +#: ../settings.php:178 +msgid "" +"Set this to No if you would like to disable the plugin from outputting the " +"form CSS." +msgstr "" + +#: ../settings.php:182 ../tooltips.php:131 +msgid "Output HTML5" +msgstr "" + +#: ../settings.php:186 +msgid "" +"Set this to No if you would like to disable the plugin from outputting HTML5 " +"form fields." +msgstr "" + +#: ../settings.php:191 ../tooltips.php:132 +msgid "No-Conflict Mode" +msgstr "" + +#: ../settings.php:193 +msgid "On" +msgstr "" + +#: ../settings.php:194 +msgid "Off" +msgstr "" + +#: ../settings.php:195 +msgid "" +"Set this to ON to prevent extraneous scripts and styles from being printed " +"on Gravity Forms admin pages, reducing conflicts with other plugins and " +"themes." +msgstr "" + +#: ../settings.php:201 ../tooltips.php:136 +msgid "Akismet Integration" +msgstr "" + +#: ../settings.php:209 ../tooltips.php:136 +msgid "Protect your form entries from spam using Akismet." +msgstr "" + +#: ../settings.php:222 +msgid "Select a Currency" +msgstr "" + +#: ../settings.php:241 +msgid "reCAPTCHA Settings" +msgstr "" + +#: ../settings.php:243 +msgid "" +"Gravity Forms integrates with reCAPTCHA, a free CAPTCHA service that helps " +"to digitize books while protecting your forms from spam bots. " +msgstr "" + +#: ../settings.php:243 +msgid "Read more about reCAPTCHA" +msgstr "" + +#: ../settings.php:249 +msgid "reCAPTCHA Public Key" +msgstr "" + +#: ../settings.php:252 ../settings.php:259 +msgid "Required only if you decide to use the reCAPTCHA field." +msgstr "" + +#: ../settings.php:252 ../settings.php:259 +#, php-format +msgid "%sSign up%s for a free account to get the key." +msgstr "" + +#: ../settings.php:256 +msgid "reCAPTCHA Private Key" +msgstr "" + +#: ../settings.php:268 +msgid "Save Settings" +msgstr "" + +#: ../settings.php:292 +msgid "Installation Status" +msgstr "" + +#: ../settings.php:296 +msgid "PHP Version" +msgstr "" + +#: ../settings.php:310 +msgid "Gravity Forms requires PHP 5 or above." +msgstr "" + +#: ../settings.php:317 +msgid "MySQL Version" +msgstr "" + +#: ../settings.php:331 +msgid "Gravity Forms requires MySQL 5 or above." +msgstr "" + +#: ../settings.php:338 +msgid "WordPress Version" +msgstr "" + +#: ../settings.php:352 +#, php-format +msgid "" +"Gravity Forms requires WordPress v%s or greater. You must upgrade WordPress " +"in order to use this version of Gravity Forms." +msgstr "" + +#: ../settings.php:359 +msgid "Gravity Forms Version" +msgstr "" + +#: ../settings.php:371 +#, php-format +msgid "" +"New version %s available. Automatic upgrade available on the %splugins page%s" +msgstr "" + +#: ../settings.php:437 +msgid "Uninstall" +msgstr "" + +#: ../tooltips.php:16 +msgid "Send To Email Address" +msgstr "" + +#: ../tooltips.php:16 +msgid "Enter the email address you would like the notification email sent to." +msgstr "" + +#: ../tooltips.php:17 ../tooltips.php:38 +msgid "Disable Auto-Formatting" +msgstr "" + +#: ../tooltips.php:17 +msgid "" +"When enabled, auto-formatting will insert paragraph breaks automatically. " +"Disable auto-formatting when using HTML to create email notification content." +msgstr "" + +#: ../tooltips.php:18 +msgid "Routing" +msgstr "" + +#: ../tooltips.php:18 +msgid "" +"Allows notification to be sent to different email addresses depending on " +"values selected in the form." +msgstr "" + +#: ../tooltips.php:19 +msgid "From Email Address" +msgstr "" + +#: ../tooltips.php:19 +msgid "" +"Enter the email address you would like the notification email sent from, or " +"select the email from available email form fields." +msgstr "" + +#: ../tooltips.php:20 +msgid "" +"Enter the name you would like the notification email sent from, or select " +"the name from available name fields." +msgstr "" + +#: ../tooltips.php:21 +msgid "" +"Enter the email address you would like to be used as the reply to address " +"for the notification email." +msgstr "" + +#: ../tooltips.php:22 +msgid "Blind Carbon Copy Addresses" +msgstr "" + +#: ../tooltips.php:22 +msgid "" +"Enter a comma separated list of email addresses you would like to receive a " +"BCC of the notification email." +msgstr "" + +#: ../tooltips.php:23 +msgid "Limit Form Activity" +msgstr "" + +#: ../tooltips.php:23 +msgid "" +"Limit the number of entries a form can generate and/or schedule a time " +"period the form is active." +msgstr "" + +#: ../tooltips.php:24 +msgid "Limit Number of Entries" +msgstr "" + +#: ../tooltips.php:24 +msgid "" +"Enter a number in the input box below to limit the number of entries allowed " +"for this form. The form will become inactive when that number is reached." +msgstr "" + +#: ../tooltips.php:25 +msgid "Schedule Form" +msgstr "" + +#: ../tooltips.php:25 +msgid "Schedule a time period the form is active." +msgstr "" + +#: ../tooltips.php:26 +msgid "Enable Anti-spam honeypot" +msgstr "" + +#: ../tooltips.php:26 +msgid "" +"Enables the honeypot spam protection technique, which is an alternative to " +"the reCAPTCHA field." +msgstr "" + +#: ../tooltips.php:27 +msgid "Enable Animation" +msgstr "" + +#: ../tooltips.php:27 +msgid "" +"Check this option to enable a sliding animation when displaying/hiding " +"conditional logic fields." +msgstr "" + +#: ../tooltips.php:28 +msgid "Enter the title of your form." +msgstr "" + +#: ../tooltips.php:29 +msgid "" +"Enter a description for your form. This may be used for user instructions." +msgstr "" + +#: ../tooltips.php:30 +msgid "Form Label Placement" +msgstr "" + +#: ../tooltips.php:30 +msgid "" +"Select the label placement. Labels can be top aligned above a field, left " +"aligned to the left of a field, or right aligned to the left of a field." +msgstr "" + +#: ../tooltips.php:31 +msgid "Description Placement" +msgstr "" + +#: ../tooltips.php:31 +msgid "" +"Select the description placement. Descriptions can be placed above the " +"field inputs or below the field inputs." +msgstr "" + +#: ../tooltips.php:32 +msgid "Form Button Text" +msgstr "" + +#: ../tooltips.php:32 +msgid "Enter the text you would like to appear on the form submit button." +msgstr "" + +#: ../tooltips.php:33 +msgid "Form Button Image" +msgstr "" + +#: ../tooltips.php:33 +msgid "" +"Enter the path to an image you would like to use as the form submit button." +msgstr "" + +#: ../tooltips.php:34 +msgid "Form CSS Class Name" +msgstr "" + +#: ../tooltips.php:34 +msgid "" +"Enter the CSS class name you would like to use in order to override the " +"default styles for this form." +msgstr "" + +#: ../tooltips.php:35 +msgid "Enter the URL of a custom image to replace the default 'add item' icon." +msgstr "" + +#: ../tooltips.php:36 +msgid "" +"Enter the URL of a custom image to replace the default 'delete item' icon." +msgstr "" + +#: ../tooltips.php:37 +msgid "Confirmation Message Text" +msgstr "" + +#: ../tooltips.php:37 +msgid "" +"Enter the text you would like the user to see on the confirmation page of " +"this form." +msgstr "" + +#: ../tooltips.php:38 +msgid "" +"When enabled, auto-formatting will insert paragraph breaks automatically. " +"Disable auto-formatting when using HTML to create the confirmation content." +msgstr "" + +#: ../tooltips.php:39 +msgid "Redirect Form to Page" +msgstr "" + +#: ../tooltips.php:39 +msgid "" +"Select the page you would like the user to be redirected to after they have " +"submitted the form." +msgstr "" + +#: ../tooltips.php:40 +msgid "Redirect Form to URL" +msgstr "" + +#: ../tooltips.php:40 +msgid "" +"Enter the URL of the webpage you would like the user to be redirected to " +"after they have submitted the form." +msgstr "" + +#: ../tooltips.php:41 +msgid "Pass Data Via Query String" +msgstr "" + +#: ../tooltips.php:41 +msgid "" +"To pass field data to the confirmation page, build a Query String using the " +"'Insert Merge Tag' drop down. ..more info on querystrings »" +msgstr "" + +#: ../tooltips.php:42 +msgid "" +"Enter the label of the form field. This is the field title the user will " +"see when filling out the form." +msgstr "" + +#: ../tooltips.php:43 +msgid "" +"Enter the label for this HTML block. It will help you identify your HTML " +"blocks in the form editor, but it will not be displayed on the form." +msgstr "" + +#: ../tooltips.php:44 +msgid "Disable Default Margins" +msgstr "" + +#: ../tooltips.php:44 +msgid "" +"When enabled, margins are added to properly align the HTML content with " +"other form fields." +msgstr "" + +#: ../tooltips.php:45 +msgid "Recaptcha Theme" +msgstr "" + +#: ../tooltips.php:45 +msgid "" +"Select the visual theme for the reCAPTCHA field the available options to " +"better match your site design." +msgstr "" + +#: ../tooltips.php:46 +msgid "CAPTCHA Type" +msgstr "" + +#: ../tooltips.php:46 +msgid "Select the type of CAPTCHA you would like to use." +msgstr "" + +#: ../tooltips.php:47 +msgid "" +"Select the custom field name from available existing custom fields, or enter " +"a new custom field name." +msgstr "" + +#: ../tooltips.php:48 +msgid "Field type" +msgstr "" + +#: ../tooltips.php:48 +msgid "Select the type of field from the available form fields." +msgstr "" + +#: ../tooltips.php:49 +msgid "" +"Enter the maximum number of characters that this field is allowed to have." +msgstr "" + +#: ../tooltips.php:50 +msgid "Enter the maximum number of rows that users are allowed to add." +msgstr "" + +#: ../tooltips.php:51 +msgid "" +"Select the type of inputs you would like to use for the date field. Date " +"Picker will let users select a date from a calendar. Date Field will let " +"users free type the date." +msgstr "" + +#: ../tooltips.php:52 +msgid "Select the type of address you would like to use." +msgstr "" + +#: ../tooltips.php:53 +msgid "Default State" +msgstr "" + +#: ../tooltips.php:53 +msgid "" +"Select the state you would like to be selected by default when the form gets " +"displayed." +msgstr "" + +#: ../tooltips.php:54 +msgid "Default Province" +msgstr "" + +#: ../tooltips.php:54 +msgid "" +"Select the province you would like to be selected by default when the form " +"gets displayed." +msgstr "" + +#: ../tooltips.php:55 +msgid "" +"Select the country you would like to be selected by default when the form " +"gets displayed." +msgstr "" + +#: ../tooltips.php:56 +msgid "Hide Country" +msgstr "" + +#: ../tooltips.php:56 +msgid "" +"For addresses that only apply to one country, you can choose to not display " +"the country drop down. Entries will still be recorded with the selected " +"country." +msgstr "" + +#: ../tooltips.php:57 +msgid "Hide Address Line 2" +msgstr "" + +#: ../tooltips.php:57 +msgid "" +"Check this box to prevent the extra address input (Address Line 2) from " +"being displayed in the form." +msgstr "" + +#: ../tooltips.php:58 +msgid "Hide State Field" +msgstr "" + +#: ../tooltips.php:58 +msgid "" +"Check this box to prevent the State field from being displayed in the form." +msgstr "" + +#: ../tooltips.php:59 +msgid "Hide Province Field" +msgstr "" + +#: ../tooltips.php:59 +msgid "" +"Check this box to prevent Province field from being displayed in the form." +msgstr "" + +#: ../tooltips.php:60 +msgid "Hide State/Province/Region" +msgstr "" + +#: ../tooltips.php:60 +msgid "" +"Check this box to prevent the State/Province/Region from being displayed in " +"the form." +msgstr "" + +#: ../tooltips.php:61 +msgid "Field Name Format" +msgstr "" + +#: ../tooltips.php:61 +msgid "" +"Select the format you would like to use for the Name field. There are 3 " +"options, Normal which includes First and Last Name, Extended which adds " +"Prefix and Suffix, or Simple which is a single input field." +msgstr "" + +#: ../tooltips.php:62 +msgid "" +"Select the format of numbers that are allowed in this field. You have the " +"option to use a comma or a dot as the decimal separator." +msgstr "" + +#: ../tooltips.php:63 +msgid "" +"Check this box to prevent this field from being displayed in a non-secure " +"page (i.e. not https://). It will redirect the page to the same URL, but " +"starting with https:// instead. This option requires a properly configured " +"SSL certificate." +msgstr "" + +#: ../tooltips.php:64 +msgid "Select the style you would like to use for the credit card icons." +msgstr "" + +#: ../tooltips.php:65 +msgid "Field Date Format" +msgstr "" + +#: ../tooltips.php:65 +msgid "" +"Select the format you would like to use for the date input. Available " +"options are MM/DD/YYYY and DD/MM/YYYY." +msgstr "" + +#: ../tooltips.php:66 +msgid "" +"Select the format you would like to use for the time field. Available " +"options are 12 hour (i.e. 8:30 pm) and 24 hour (i.e. 20:30)." +msgstr "" + +#: ../tooltips.php:67 +msgid "Allowed File Extensions" +msgstr "" + +#: ../tooltips.php:67 +msgid "" +"Enter the allowed file extensions for file uploads. This will limit the " +"type of files a user may upload." +msgstr "" + +#: ../tooltips.php:68 +msgid "" +"Select this option to enable multiple files to be uploaded for this field." +msgstr "" + +#: ../tooltips.php:69 +msgid "" +"Specify the maximum number of files that can be uploaded using this field. " +"Leave blank for unlimited. Note that the actual number of files permitted " +"may be limited by this server's specifications and configuration." +msgstr "" + +#: ../tooltips.php:70 +msgid "" +"Specify the maximum file size in megabytes allowed for each of the files." +msgstr "" + +#: ../tooltips.php:71 +msgid "Phone Number Format" +msgstr "" + +#: ../tooltips.php:71 +msgid "" +"Select the format you would like to use for the phone input. Available " +"options are domestic US/CANADA style phone number and international long " +"format phone number." +msgstr "" + +#: ../tooltips.php:72 +msgid "Field Description" +msgstr "" + +#: ../tooltips.php:72 +msgid "" +"Enter the description for the form field. This will be displayed to the " +"user and provide some direction on how the field should be filled out or " +"selected." +msgstr "" + +#: ../tooltips.php:73 +msgid "Required Field" +msgstr "" + +#: ../tooltips.php:73 +msgid "" +"Select this option to make the form field required. A required field will " +"prevent the form from being submitted if it is not filled out or selected." +msgstr "" + +#: ../tooltips.php:74 +msgid "" +"Select this option to limit user input to unique values only. This will " +"require that a value entered in a field does not currently exist in the " +"entry database for that field." +msgstr "" + +#: ../tooltips.php:75 +msgid "Number Range" +msgstr "" + +#: ../tooltips.php:75 +msgid "" +"Enter the minimum and maximum values for this form field. This will require " +"that the value entered by the user must fall within this range." +msgstr "" + +#: ../tooltips.php:76 +msgid "" +"Enabling caculations will allow the value of this field to be dynamically " +"calculated based on a mathematical formula." +msgstr "" + +#: ../tooltips.php:77 +msgid "" +"Specify a mathematical formula. The result of this formula will be " +"dynamically populated as the value for this field." +msgstr "" + +#: ../tooltips.php:78 +msgid "Specify how many decimal places the number should be rounded to." +msgstr "" + +#: ../tooltips.php:79 +msgid "" +"Enter the admin label of the form field. Entering a value in this field " +"will override the Field Label when displayed in the Gravity Forms " +"administration tool." +msgstr "" + +#: ../tooltips.php:80 +msgid "" +"Select a form field size from the available options. This will set the width " +"of the field." +msgstr "" + +#: ../tooltips.php:81 +msgid "If you would like to pre-populate the value of a field, enter it here." +msgstr "" + +#: ../tooltips.php:82 +msgid "" +"If you would like to override the default error validation for a field, " +"enter it here. This message will be displayed if there is an error with " +"this field when the user submits the form." +msgstr "" + +#: ../tooltips.php:83 +msgid "reCaptcha Language" +msgstr "" + +#: ../tooltips.php:83 +msgid "" +"Select the language you would like to use for the reCAPTCHA display from the " +"available options." +msgstr "" + +#: ../tooltips.php:84 +msgid "" +"Enter the CSS class name you would like to use in order to override the " +"default styles for this field." +msgstr "" + +#: ../tooltips.php:85 +msgid "" +"Select the visibility for this field. Field visibility set to Everyone will " +"be visible by the user submitting the form. Form field visibility set to " +"Admin Only will only be visible within the Gravity Forms administration tool." +"

              Setting a field to Admin Only is useful for creating fields that " +"can be used to set a status or priority level on submitted entries." +msgstr "" + +#: ../tooltips.php:86 +msgid "Field Choices" +msgstr "" + +#: ../tooltips.php:86 +msgid "" +"Add Choices to this field. You can mark each choice as checked by default by " +"using the radio/checkbox fields on the left." +msgstr "" + +#: ../tooltips.php:87 +msgid "Enable Choice Values" +msgstr "" + +#: ../tooltips.php:87 +msgid "" +"Check this option to specify a value for each choice. Choice values are not " +"displayed to the user viewing the form, but are accessible to administrators " +"when viewing the entry." +msgstr "" + +#: ../tooltips.php:88 +msgid "" +"Create rules to dynamically display or hide this field based on values from " +"another field" +msgstr "" + +#: ../tooltips.php:89 +msgid "Enable Enhanced UI" +msgstr "" + +#: ../tooltips.php:89 +msgid "" +"By selecting this option, the Chosen jQuery script will be applied to this field, " +"enabling search capabilities to Drop Down fields and a more user-friendly " +"interface for Multi Select fields." +msgstr "" + +#: ../tooltips.php:90 +msgid "\"Other\" Choice" +msgstr "" + +#: ../tooltips.php:90 +msgid "" +"Check this option to add a text input as the final choice of your radio " +"button field. This allows the user to specify a value that is not a " +"predefined choice." +msgstr "" + +#: ../tooltips.php:91 +msgid "Check this option to require a user to be logged in to view this form" +msgstr "" + +#: ../tooltips.php:92 +msgid "" +"Enter a message to be displayed to users who are not logged in (shortcodes " +"and HTML are supported)" +msgstr "" + +#: ../tooltips.php:93 +msgid "Page Conditional Logic" +msgstr "" + +#: ../tooltips.php:93 +msgid "" +"Create rules to dynamically display or hide this page based on values from " +"another field" +msgstr "" + +#: ../tooltips.php:94 +msgid "" +"Select which type of visual progress indicator you would like to display. " +"Progress Bar, Steps or None" +msgstr "" + +#: ../tooltips.php:95 +msgid "Progress Bar Style" +msgstr "" + +#: ../tooltips.php:95 +msgid "" +"Select which progress bar style you would like to use. Select custom to " +"choose your own text and background color" +msgstr "" + +#: ../tooltips.php:96 +msgid "" +"Name each of the pages on your form. Page names are displayed with the " +"selected progress indicator" +msgstr "" + +#: ../tooltips.php:97 +msgid "Next Button Text" +msgstr "" + +#: ../tooltips.php:97 +msgid "Enter the text you would like to appear on the page next button" +msgstr "" + +#: ../tooltips.php:98 +msgid "Next Button Image" +msgstr "" + +#: ../tooltips.php:98 +msgid "" +"Enter the path to an image you would like to use as the page next button" +msgstr "" + +#: ../tooltips.php:99 +msgid "Previous Button Text" +msgstr "" + +#: ../tooltips.php:99 +msgid "Enter the text you would like to appear on the page previous button" +msgstr "" + +#: ../tooltips.php:100 +msgid "Previous Button Image" +msgstr "" + +#: ../tooltips.php:100 +msgid "" +"Enter the path to an image you would like to use as the page previous button" +msgstr "" + +#: ../tooltips.php:101 +msgid "Next Button Conditional Logic" +msgstr "" + +#: ../tooltips.php:101 +msgid "" +"Create rules to dynamically display or hide the page's Next Button based on " +"values from another field" +msgstr "" + +#: ../tooltips.php:102 +msgid "" +"Create rules to dynamically display or hide the submit button based on " +"values from another field" +msgstr "" + +#: ../tooltips.php:103 +msgid "" +"Select which categories are displayed. You can choose to display all of them " +"or select individual ones." +msgstr "" + +#: ../tooltips.php:104 +msgid "" +"Select the post status that will be used for the post that is created by the " +"form entry." +msgstr "" + +#: ../tooltips.php:105 +msgid "Post Author" +msgstr "" + +#: ../tooltips.php:105 +msgid "" +"Select the author that will be used for the post that is created by the form " +"entry." +msgstr "" + +#: ../tooltips.php:106 +msgid "" +"Select the post format that will be used for the post that is created by the " +"form entry." +msgstr "" + +#: ../tooltips.php:107 +msgid "Post Content Template" +msgstr "" + +#: ../tooltips.php:107 +msgid "" +"Check this option to format and insert merge tags into the Post Content." +msgstr "" + +#: ../tooltips.php:108 +msgid "Post Title Template" +msgstr "" + +#: ../tooltips.php:108 +msgid "Check this option to format and insert merge tags into the Post Title." +msgstr "" + +#: ../tooltips.php:109 +msgid "" +"Select the category that will be used for the post that is created by the " +"form entry." +msgstr "" + +#: ../tooltips.php:110 +msgid "Use Current User as Author" +msgstr "" + +#: ../tooltips.php:110 +msgid "" +"Selecting this option will set the post author to the WordPress user that " +"submitted the form." +msgstr "" + +#: ../tooltips.php:111 +msgid "Image Meta" +msgstr "" + +#: ../tooltips.php:111 +msgid "" +"Select one or more image metadata field to be displayed along with the image " +"upload field. They enable users to enter additional information about the " +"uploaded image." +msgstr "" + +#: ../tooltips.php:112 +msgid "Check this option to set this image as the post's Featured Image." +msgstr "" + +#: ../tooltips.php:113 +msgid "Incoming Field Data" +msgstr "" + +#: ../tooltips.php:113 +msgid "" +"Check this option to enable data to be passed to the form and pre-populate " +"this field dynamically. Data can be passed via Query Strings, Shortcode and/" +"or Hooks" +msgstr "" + +#: ../tooltips.php:114 +msgid "Enter the content (Text or HTML) to be displayed on the form." +msgstr "" + +#: ../tooltips.php:115 +msgid "Base Price" +msgstr "" + +#: ../tooltips.php:115 +msgid "Enter the base price for this product." +msgstr "" + +#: ../tooltips.php:116 +msgid "Disable Quantity" +msgstr "" + +#: ../tooltips.php:116 +msgid "" +"Disables the quantity field. A quantity of 1 will be assumed or you can add " +"a Quantity field to your form from the Pricing Fields." +msgstr "" + +#: ../tooltips.php:117 +msgid "Select which Product this field is tied to." +msgstr "" + +#: ../tooltips.php:118 +msgid "" +"Input masks provide a visual guide allowing users to more easily enter data " +"in a specific format such as dates and phone numbers." +msgstr "" + +#: ../tooltips.php:119 +msgid "Standard Fields provide basic form functionality." +msgstr "" + +#: ../tooltips.php:120 +msgid "" +"Advanced Fields are for specific uses. They enable advanced formatting of " +"regularly used fields such as Name, Email, Address, etc." +msgstr "" + +#: ../tooltips.php:121 +msgid "" +"Post Fields allow you to add fields to your form that create Post Drafts in " +"WordPress from the submitted data." +msgstr "" + +#: ../tooltips.php:122 +msgid "" +"Pricing fields allow you to add fields to your form that calculate pricing " +"for selling goods and services." +msgstr "" + +#: ../tooltips.php:123 +msgid "Export Selected Form" +msgstr "" + +#: ../tooltips.php:123 +msgid "" +"Select the form you would like to export entry data from. You may only " +"export data from one form at a time." +msgstr "" + +#: ../tooltips.php:124 +msgid "Export Selected Forms" +msgstr "" + +#: ../tooltips.php:124 +msgid "Select the forms you would like to export." +msgstr "" + +#: ../tooltips.php:125 +msgid "Filter the entries by adding conditions." +msgstr "" + +#: ../tooltips.php:126 +msgid "Export Selected Fields" +msgstr "" + +#: ../tooltips.php:126 +msgid "Select the fields you would like to include in the export." +msgstr "" + +#: ../tooltips.php:127 +msgid "Export Date Range" +msgstr "" + +#: ../tooltips.php:127 +msgid "" +"Select a date range. Setting a range will limit the export to entries " +"submitting during that date range. If no range is set, all entries will be " +"exported." +msgstr "" + +#: ../tooltips.php:128 +msgid "" +"Click the Choose File button to upload a Gravity Forms XML file from your " +"computer" +msgstr "" + +#: ../tooltips.php:129 +msgid "Settings License Key" +msgstr "" + +#: ../tooltips.php:129 +msgid "" +"Your Gravity Forms support license key is used to verify your support " +"package, enable automatic updates and receive support." +msgstr "" + +#: ../tooltips.php:130 +msgid "" +"Select yes or no to enable or disable CSS output. Setting this to no will " +"disable the standard Gravity Forms CSS from being included in your theme." +msgstr "" + +#: ../tooltips.php:131 +msgid "" +"Select yes or no to enable or disable HTML5 output. Setting this to no will " +"disable the standard Gravity Forms HTML5 form field output." +msgstr "" + +#: ../tooltips.php:132 +msgid "" +"Select On or Off to enable or disable no-conflict mode. Setting this to On " +"will prevent extraneous scripts and styles from being printed on Gravity " +"Forms admin pages, reducing conflicts with other plugins and themes." +msgstr "" + +#: ../tooltips.php:133 +msgid "reCaptcha Public Key" +msgstr "" + +#: ../tooltips.php:133 +msgid "" +"Enter your reCAPTCHA Public Key, if you do not have a key you can register " +"for one at the provided link. reCAPTCHA is a free service." +msgstr "" + +#: ../tooltips.php:134 +msgid "reCaptcha Private Key" +msgstr "" + +#: ../tooltips.php:134 +msgid "" +"Enter your reCAPTCHA Private Key, if you do not have a key you can register " +"for one at the provided link. reCAPTCHA is a free service." +msgstr "" + +#: ../tooltips.php:135 +msgid "" +"Please select the currency for your location. Currency is used for pricing " +"fields and price calculations." +msgstr "" + +#: ../tooltips.php:137 +msgid "Entries Conversion" +msgstr "" + +#: ../tooltips.php:137 +msgid "" +"Conversion is the percentage of form views that generated an entry. If a " +"form was viewed twice, and one entry was generated, the conversion will be " +"50%." +msgstr "" + +#: ../tooltips.php:138 +msgid "Tab Index Start Value" +msgstr "" + +#: ../tooltips.php:138 ../widget.php:99 +msgid "" +"If you have other forms on the page (i.e. Comments Form), specify a higher " +"tabindex start value so that your Gravity Form does not end up with the same " +"tabindices as your other forms. To disable the tabindex, enter 0 (zero)." +msgstr "" + +#: ../tooltips.php:139 +msgid "Override Notifications" +msgstr "" + +#: ../tooltips.php:139 +msgid "" +"Enter a comma separated list of email addresses you would like to receive " +"the selected notification emails." +msgstr "" + +#: ../tooltips.php:140 +msgid "Progress Bar Confirmation Display" +msgstr "" + +#: ../tooltips.php:140 +msgid "" +"Check this box if you would like the progress bar to display with the " +"confirmation text." +msgstr "" + +#: ../tooltips.php:141 +msgid "Progress Bar Completion Text" +msgstr "" + +#: ../tooltips.php:141 +msgid "Enter text to display at the top of the progress bar." +msgstr "" + +#: ../update.php:5 +msgid "You don't have permissions to view this page" +msgstr "" + +#: ../update.php:17 +msgid "Gravity Forms Updates" +msgstr "" + +#: ../update.php:32 +#, php-format +msgid "" +"

              You can update to the latest version automatically or download the update " +"and install it manually. %sUpdate Automatically%s %sDownload Update%s" +msgstr "" + +#: ../update.php:40 +msgid "" +"Register your copy of Gravity " +"Forms to receive access to automatic updates and support. Need a license " +"key? Purchase one now." +msgstr "" + +#: ../update.php:53 +msgid "Your version of Gravity Forms is up to date." +msgstr "" + +#: ../widget.php:17 +msgid "Gravity Forms Widget" +msgstr "" + +#: ../widget.php:18 +msgid "Form" +msgstr "" + +#: ../widget.php:67 +msgid "Contact Us" +msgstr "" + +#: ../widget.php:92 +msgid "advanced options" +msgstr "" + +#: ../widget.php:96 +msgid "Disable script output" +msgstr "" + +#: ../widget.php:97 +msgid "Tab Index Start" +msgstr "" + +#: ../includes/api.php:72 +#, php-format +msgid "Form with id: %s not found" +msgstr "" + +#: ../includes/api.php:116 ../includes/api.php:191 +msgid "Invalid form object" +msgstr "" + +#: ../includes/api.php:132 ../includes/webapi/webapi.php:653 +msgid "Missing form id" +msgstr "" + +#: ../includes/api.php:136 +msgid "Error updating form" +msgstr "" + +#: ../includes/api.php:139 +#, php-format +msgid "Form with id %s not found" +msgstr "" + +#: ../includes/api.php:145 +msgid "Error updating title" +msgstr "" + +#: ../includes/api.php:164 +msgid "Invalid form objects" +msgstr "" + +#: ../includes/api.php:194 +msgid "The form title is missing" +msgstr "" + +#: ../includes/api.php:228 +msgid "There was a problem while inserting the form" +msgstr "" + +#: ../includes/api.php:358 +#, php-format +msgid "Entry with id %s not found" +msgstr "" + +#: ../includes/api.php:431 +msgid "Missing entry id" +msgstr "" + +#: ../includes/api.php:436 +msgid "Entry not found" +msgstr "" + +#: ../includes/api.php:448 ../includes/api.php:589 +msgid "The form for this entry does not exist" +msgstr "" + +#: ../includes/api.php:498 +msgid "There was a problem while updating the entry properties" +msgstr "" + +#: ../includes/api.php:518 +msgid "" +"There was a problem while updating one of the input values for the entry" +msgstr "" + +#: ../includes/api.php:528 ../includes/api.php:560 +msgid "There was a problem while updating the field values" +msgstr "" + +#: ../includes/api.php:586 +msgid "The form id must be specified" +msgstr "" + +#: ../includes/api.php:622 +msgid "There was a problem while inserting the entry properties" +msgstr "" + +#: ../includes/api.php:640 +msgid "" +"There was a problem while inserting one of the input values for the entry" +msgstr "" + +#: ../includes/api.php:648 +msgid "There was a problem while inserting the field values" +msgstr "" + +#: ../includes/api.php:679 +#, php-format +msgid "Invalid entry id: %s" +msgstr "" + +#: ../includes/api.php:726 +msgid "Feed not found" +msgstr "" + +#: ../includes/api.php:756 +#, php-format +msgid "There was an an error while deleting feed id %s" +msgstr "" + +#: ../includes/api.php:759 ../includes/api.php:780 +#, php-format +msgid "Feed id %s not found" +msgstr "" + +#: ../includes/api.php:777 +#, php-format +msgid "There was an an error while updating feed id %s" +msgstr "" + +#: ../includes/api.php:808 +msgid "There was an an error while inserting a feed" +msgstr "" + +#: ../includes/upload.php:28 +msgid "Failed to upload file." +msgstr "" + +#: ../includes/upload.php:85 +msgid "Failed to open temp directory." +msgstr "" + +#: ../includes/upload.php:109 ../includes/upload.php:134 +msgid "Failed to open input stream." +msgstr "" + +#: ../includes/upload.php:116 ../includes/upload.php:140 +msgid "Failed to open output stream." +msgstr "" + +#: ../includes/upload.php:120 +msgid "Failed to move uploaded file." +msgstr "" + +#: ../includes/addon/class-gf-addon.php:896 +#, php-format +msgid "Field type '%s' has not been implemented" +msgstr "" + +#: ../includes/addon/class-gf-addon.php:1072 +msgid "Settings updated" +msgstr "" + +#: ../includes/addon/class-gf-addon.php:1077 +msgid "There was an error while saving your settings" +msgstr "" + +#: ../includes/addon/class-gf-addon.php:1354 +msgid "Update Settings" +msgstr "" + +#: ../includes/addon/class-gf-addon.php:2086 +msgid "Uninstall Add-On" +msgstr "" + +#: ../includes/addon/class-gf-addon.php:2087 +msgid "Warning! This operation deletes ALL settings." +msgstr "" + +#: ../includes/addon/class-gf-addon.php:2089 +msgid "Uninstall Add-On" +msgstr "" + +#: ../includes/addon/class-gf-addon.php:2089 +msgid "" +"Warning! ALL settings will be deleted. This cannot be undone. \\'OK\\' to " +"delete, \\'Cancel\\' to stop" +msgstr "" + +#: ../includes/addon/class-gf-addon.php:2124 +msgid "You don't have adequate permission to uninstall this addon: " +msgstr "" + +#: ../includes/addon/class-gf-addon.php:2208 +#: ../includes/addon/class-gf-auto-upgrade.php:47 +msgid "Gravity Forms " +msgstr "" + +#: ../includes/addon/class-gf-auto-upgrade.php:55 +#, php-format +msgid "" +"%sRegister%s your copy of Gravity Forms to receive access to automatic " +"upgrades and support. Need a license key? %sPurchase one now%s." +msgstr "" + +#: ../includes/addon/class-gf-auto-upgrade.php:159 +#, php-format +msgid "Oops!! Something went wrong.%sPlease try again or %scontact us%s." +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:326 +#: ../includes/addon/class-gf-feed-addon.php:400 +msgid "Feeds" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:352 +msgid "Feed Settings" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:436 +msgid "Feed updated successfully." +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:441 +msgid "" +"There was an error updating this feed. Please review all errors below and " +"try again." +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:532 +msgid "Edit this feed" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:533 +msgid "Delete this feed" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:533 +msgid "WARNING: You are about to delete this item." +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:577 +msgid "Enable Condition" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:596 +msgid "Process this feed if" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:612 +msgid "Field" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:630 +msgid "Form Field" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:697 +#: ../includes/addon/class-gf-feed-addon.php:701 +msgid "Full" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:705 +msgid "Selected" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:819 +msgid "Process " +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:932 +msgid "Checkbox" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:945 +msgid "feed" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:946 +msgid "feeds" +msgstr "" + +#: ../includes/addon/class-gf-feed-addon.php:960 +#, php-format +msgid "You don't have any feeds configured. Let's go %screate one%s" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:251 +#, php-format +msgid "Payment has been captured successfully. Amount: %s. Transaction Id: %s" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:255 +#, php-format +msgid "Payment failed to be captured. Reason: %s" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:272 +msgid "Initial payment" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:276 +#, php-format +msgid "%s has been captured successfully. Amount: %s. Transaction Id: %s" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:281 +#, php-format +msgid "Failed to capture %s. Reason: %s." +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:295 +#, php-format +msgid "Subscription successfully created. Subscription Id: %s." +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:301 +#, php-format +msgid "Subscription failed to be created. Reason: %s" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:442 +msgid "options: " +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:507 +#: ../includes/addon/class-gf-payment-addon.php:556 +msgid "Transaction Type" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:508 +msgid "Amount" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:515 +#: ../includes/addon/class-gf-payment-addon.php:562 +msgid "Subscription" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:518 +#: ../includes/addon/class-gf-payment-addon.php:561 +msgid "Products and Services" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:522 +msgid "Unsupported transaction type" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:529 +#: ../includes/addon/class-gf-payment-addon.php:776 +#: ../includes/addon/class-gf-payment-addon.php:784 +msgid "Form Total" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:560 +msgid "Select a transaction type" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:577 +msgid "Recurring Amount" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:584 +msgid "Billing Cycle" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:589 +msgid "Recurring Times" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:595 +msgid "Setup Fee" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:600 +msgid "Trial" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:625 +msgid "Other Settings" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:633 +msgid "Billing Information" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:639 +msgid "Options" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:699 +#: ../includes/addon/class-gf-payment-addon.php:734 +msgid "Enabled" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:745 +msgid "Enter an amount" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:792 +msgid "Sample Option" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:803 +msgid "Address 2" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:806 +msgid "Zip" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:824 +msgid "day(s)" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:825 +msgid "week(s)" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:826 +msgid "month(s)" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:827 +msgid "year(s)" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:836 +msgid "Select a product field" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:872 +msgid "Today" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:873 +msgid "Yesterday" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:874 +msgid "Last 30 Days" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:881 +#: ../includes/addon/class-gf-payment-addon.php:888 +#: ../includes/addon/class-gf-payment-addon.php:896 +#: ../includes/addon/class-gf-payment-addon.php:903 +msgid "subscriptions" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:882 +#: ../includes/addon/class-gf-payment-addon.php:889 +#: ../includes/addon/class-gf-payment-addon.php:897 +#: ../includes/addon/class-gf-payment-addon.php:904 +msgid "orders" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:912 +msgid "There aren't any transactions that match your criteria." +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1014 +#: ../includes/addon/class-gf-payment-addon.php:1015 +msgid "Revenue" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1015 +msgid "Orders" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1015 +msgid "Subscriptions" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1015 +msgid "Recurring Payments" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1015 +msgid "Refunds" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1034 +#: ../includes/addon/class-gf-payment-addon.php:1035 +msgid "Week" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1134 +msgid "Jan" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1134 +msgid "Feb" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1134 +msgid "Mar" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1134 +msgid "Apr" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1134 +msgid "Jun" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1134 +msgid "Jul" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1134 +msgid "Aug" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1134 +msgid "Sep" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1134 +msgid "Oct" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1134 +msgid "Nov" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1134 +msgid "Dec" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1232 +msgid "Daily" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1233 +msgid "Weekly" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1234 +msgid "Monthly" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1237 +msgid "

              View
              Select how you would like the sales data to be displayed." +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1253 +msgid "Payment Method" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1293 +msgid "" +"Warning! This Authorize.Net Subscription will be canceled. This cannot be " +"undone. 'OK' to cancel subscription, 'Cancel' to stop" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1295 +msgid "Canceled" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1296 +msgid "The subscription could not be canceled. Please try again later." +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1331 +msgid "Cancel Subscription" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1413 +msgid "sale" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1414 +msgid "sales" +msgstr "" + +#: ../includes/addon/class-gf-payment-addon.php:1428 +msgid "There hasn't been any sales in the specified date range." +msgstr "" + +#: ../includes/addon/class-gf-results.php:15 +msgid "Results Filters" +msgstr "" + +#: ../includes/addon/class-gf-results.php:64 +msgid "" +"Error retrieving results. If the problem persists, please contact support." +msgstr "" + +#: ../includes/addon/class-gf-results.php:97 +#: ../includes/addon/class-gf-results.php:126 +msgid "View results generated by this form" +msgstr "" + +#: ../includes/addon/class-gf-results.php:120 +#: ../includes/addon/class-gf-results.php:125 +msgid "Results" +msgstr "" + +#: ../includes/addon/class-gf-results.php:223 +#: ../includes/addon/class-gf-results.php:316 +msgid "Filters" +msgstr "" + +#: ../includes/addon/class-gf-results.php:232 +#: ../includes/addon/class-gf-results.php:315 +msgid "Date Range" +msgstr "" + +#: ../includes/addon/class-gf-results.php:304 +msgid "This form does not have any fields that can be used for results" +msgstr "" + +#: ../includes/addon/class-gf-results.php:313 +#: ../includes/addon/class-gf-results.php:583 +msgid "Total Score" +msgstr "" + +#: ../includes/addon/class-gf-results.php:313 +msgid "" +"Scores are weighted calculations. Items ranked higher are given a greater " +"score than items that are ranked lower. The total score for each item is the " +"sum of the weighted scores." +msgstr "" + +#: ../includes/addon/class-gf-results.php:314 +#: ../includes/addon/class-gf-results.php:586 +msgid "Aggregate Rank" +msgstr "" + +#: ../includes/addon/class-gf-results.php:314 +msgid "" +"The aggregate rank is the overall rank for all entries based on the weighted " +"scores for each item." +msgstr "" + +#: ../includes/addon/class-gf-results.php:315 +msgid "" +"Date Range is optional, if no date range is specified it will be ignored." +msgstr "" + +#: ../includes/addon/class-gf-results.php:316 +msgid "" +"Narrow the results by adding filters. Note that some field types support " +"more options than others." +msgstr "" + +#: ../includes/addon/class-gf-results.php:332 +msgid "No results." +msgstr "" + +#: ../includes/addon/class-gf-results.php:354 +msgid "" +"There was an error while processing the entries. Please contact support." +msgstr "" + +#: ../includes/addon/class-gf-results.php:368 +#, php-format +msgid "Entries processed: %1$d of %2$d" +msgstr "" + +#: ../includes/addon/class-gf-results.php:386 +msgid "No results" +msgstr "" + +#: ../includes/addon/class-gf-results.php:438 +#: ../includes/addon/class-gf-results.php:452 +msgid "No entries for this field" +msgstr "" + +#: ../includes/addon/class-gf-results.php:459 +msgid "Choice" +msgstr "" + +#: ../includes/addon/class-gf-results.php:459 +#: ../includes/addon/class-gf-results.php:488 +msgid "Frequency" +msgstr "" + +#: ../includes/addon/class-gf-results.php:569 +msgid "Average score: " +msgstr "" + +#: ../includes/addon/class-gf-results.php:580 +msgid "Item" +msgstr "" + +#: ../includes/addon/class-gf-results.php:614 +msgid "Latest values:" +msgstr "" + +#: ../includes/locking/class-gf-locking.php:193 +#, php-format +msgid "" +"This page is currently locked. Click on the \"Request Control\" button to " +"let %s know you'd like to take over." +msgstr "" + +#: ../includes/locking/class-gf-locking.php:194 +msgid "Accept" +msgstr "" + +#: ../includes/locking/class-gf-locking.php:196 +#, php-format +msgid "%s is currently editing" +msgstr "" + +#: ../includes/locking/class-gf-locking.php:197 +#, php-format +msgid "%s has taken over and is currently editing." +msgstr "" + +#: ../includes/locking/class-gf-locking.php:198 +#, php-format +msgid "%s has requested permission to take over control." +msgstr "" + +#: ../includes/locking/class-gf-locking.php:199 +#: ../includes/locking/class-gf-locking.php:272 +msgid "You now have control" +msgstr "" + +#: ../includes/locking/class-gf-locking.php:200 +msgid "Pending" +msgstr "" + +#: ../includes/locking/class-gf-locking.php:201 +msgid "No response" +msgstr "" + +#: ../includes/locking/class-gf-locking.php:202 +msgid "Request again" +msgstr "" + +#: ../includes/locking/class-gf-locking.php:203 +msgid "Error" +msgstr "" + +#: ../includes/locking/class-gf-locking.php:204 +msgid "Your request was rejected" +msgstr "" + +#: ../includes/locking/class-gf-locking.php:277 +#, php-format +msgid "%s has been notified of your request" +msgstr "" + +#: ../includes/locking/class-gf-locking.php:472 +msgid "Take Over" +msgstr "" + +#: ../includes/locking/class-gf-locking.php:473 +msgid "Request Control" +msgstr "" + +#: ../includes/locking/class-gf-locking.php:490 +msgid "Reject Request" +msgstr "" + +#: ../includes/locking/locking.php:16 +#, php-format +msgid "" +"This form is currently locked. Click on the \"Request Control\" button to " +"let %s know you'd like to take over." +msgstr "" + +#: ../includes/locking/locking.php:20 +#, php-format +msgid "%s has requested permission to take over control of this form." +msgstr "" + +#: ../includes/locking/locking.php:55 +#, php-format +msgid "" +"This entry is currently locked. Click on the \"Request Control\" button to " +"let %s know you'd like to take over." +msgstr "" + +#: ../includes/locking/locking.php:58 +#, php-format +msgid "%s has requested permission to take over control of this entry." +msgstr "" + +#: ../includes/locking/locking.php:98 +#, php-format +msgid "" +"These form settings are currently locked. Click on the \"Request Control\" " +"button to let %s know you'd like to take over." +msgstr "" + +#: ../includes/locking/locking.php:101 ../includes/locking/locking.php:138 +#, php-format +msgid "%s has requested permission to take over control of these settings." +msgstr "" + +#: ../includes/locking/locking.php:135 +#, php-format +msgid "" +"These settings are currently locked. Click on the \"Request Control\" button " +"to let %s know you'd like to take over." +msgstr "" + +#: ../includes/webapi/webapi.php:94 ../includes/webapi/webapi.php:155 +msgid "Gravity Forms API Settings" +msgstr "" + +#: ../includes/webapi/webapi.php:169 ../includes/webapi/webapi.php:184 +msgid "" +"The Gravity Forms API allows developers to interact with this install via a " +"JSON REST API." +msgstr "" + +#: ../includes/webapi/webapi.php:173 +msgid "Requirements check" +msgstr "" + +#: ../includes/webapi/webapi.php:188 +msgid "Enable access to the API" +msgstr "" + +#: ../includes/webapi/webapi.php:197 +msgid "Public API Key" +msgstr "" + +#: ../includes/webapi/webapi.php:205 +msgid "Private API Key" +msgstr "" + +#: ../includes/webapi/webapi.php:213 +msgid "QR Code" +msgstr "" + +#: ../includes/webapi/webapi.php:219 +msgid "Impersonate account" +msgstr "" + +#: ../includes/webapi/webapi.php:225 +msgid "Developer tools" +msgstr "" + +#: ../includes/webapi/webapi.php:242 +msgid "Show/hide QR Code" +msgstr "" + +#: ../includes/webapi/webapi.php:258 +msgid "Open developer tools" +msgstr "" + +#: ../includes/webapi/webapi.php:606 +#, php-format +msgid "Feeds deleted successfully: %d" +msgstr "" + +#: ../includes/webapi/webapi.php:637 +#, php-format +msgid "Feeds updated: %d" +msgstr "" + +#: ../includes/webapi/webapi.php:697 +#, php-format +msgid "Forms deleted successfully: %d" +msgstr "" + +#: ../includes/webapi/webapi.php:732 +msgid "Entries updated successfully" +msgstr "" + +#: ../includes/webapi/webapi.php:732 +msgid "Entry updated successfully" +msgstr "" + +#: ../includes/webapi/webapi.php:769 +msgid "Forms updated successfully" +msgstr "" + +#: ../includes/webapi/webapi.php:769 +msgid "Form updated successfully" +msgstr "" + +#: ../includes/webapi/webapi.php:797 +#, php-format +msgid "Entries deleted successfully: %d" +msgstr "" + +#: ../includes/webapi/webapi.php:1342 +msgid "Not authorized" +msgstr "" + +#: ../includes/webapi/webapi.php:1346 +msgid "Permission denied" +msgstr "" + +#: ../includes/webapi/webapi.php:1350 +msgid "Bad request" +msgstr "" + +#: ../includes/webapi/webapi.php:1354 +msgid "Not found" +msgstr "" + +#: ../includes/webapi/webapi.php:1358 +msgid "Not implemented" +msgstr "" + +#: ../includes/webapi/webapi.php:1362 +msgid "Internal Error" +msgstr "" diff --git a/src/wp-content/plugins/gravityforms/notification.php b/src/wp-content/plugins/gravityforms/notification.php new file mode 100644 index 0000000..e34d4c1 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/notification.php @@ -0,0 +1,1119 @@ + $notification){ + if($id == $notification_id){ + return $notification; + } + } + return array(); + } + + public static function notification_page() { + $form_id = rgget('id'); + $notification_id = rgget("nid"); + if(!rgblank($notification_id)) + self::notification_edit_page($form_id, $notification_id); + else + self::notification_list_page($form_id); + } + + public static function notification_edit_page($form_id, $notification_id) { + + if(!rgempty("gform_notification_id")) + $notification_id = rgpost("gform_notification_id"); + + $form = RGFormsModel::get_form_meta($form_id); + $notification = !$notification_id ? array() : self::get_notification($form, $notification_id); + + // added second condition to account for new notifications with errors as notification ID will + // be available in $_POST but the notification has not actually been saved yet + $is_new_notification = empty($notification_id) || empty($notification); + + $is_valid = true; + $is_update = false; + if(rgpost("save")){ + + check_admin_referer('gforms_save_notification', 'gforms_save_notification'); + + $is_update = true; + + if($is_new_notification){ + $notification_id = uniqid(); + $notification["id"] = $notification_id; + } + + $notification["name"] = rgpost("gform_notification_name"); + $notification["event"] = rgpost("gform_notification_event"); + $notification["to"] = rgpost("gform_notification_to_type") == "field" ? rgpost("gform_notification_to_field") : rgpost("gform_notification_to_email"); + $notification["toType"] = rgpost("gform_notification_to_type"); + $notification["bcc"] = rgpost("gform_notification_bcc"); + $notification["subject"] = rgpost("gform_notification_subject"); + $notification["message"] = rgpost("gform_notification_message"); + $notification["from"] = rgpost("gform_notification_from"); + $notification["fromName"] = rgpost("gform_notification_from_name"); + $notification["replyTo"] = rgpost("gform_notification_reply_to"); + $notification["routing"] = !rgempty("gform_routing_meta") ? GFCommon::json_decode(rgpost("gform_routing_meta"), true) : null; + $notification["conditionalLogic"] = !rgempty("gform_conditional_logic_meta") ? GFCommon::json_decode(rgpost("gform_conditional_logic_meta"), true) : null; + $notification["disableAutoformat"] = rgpost("gform_notification_disable_autoformat"); + + $notification = apply_filters( 'gform_pre_notification_save', apply_filters( "gform_pre_notification_save{$form['id']}", $notification, $form ), $form ); + + //validating input... + $is_valid = self::validate_notification(); + if($is_valid){ + //input valid, updating... + //emptying notification email if it is supposed to be disabled + if($_POST["gform_notification_to_type"] == "routing") + $notification["to"] = ""; + else + $notification["routing"] = null; + + $form["notifications"][$notification_id] = $notification; + RGFormsModel::save_form_notifications($form_id, $form['notifications']); + } + } + + if($is_update && $is_valid){ + GFCommon::add_message( sprintf( __('Notification saved successfully. %sBack to notifications.%s', 'gravityforms'), '', '') ); + } + else if($is_update && !$is_valid){ + GFCommon::add_error_message(__('Notification could not be updated. Please enter all required information below.', 'gravityforms')); + } + + // moved page header loading here so the admin messages can be set upon saving and available for the header to print out + GFFormSettings::page_header(__('Notifications', 'gravityforms')); + + $notification_ui_settings = self::get_notification_ui_settings($notification); + + ?> + + + + +
              + + + + + + + + +
              + +

              + '; + echo apply_filters("gform_save_notification_button", $notification_button); + ?> +

              +
              + + 0)); + ?> + +

              + + + prepare_items(); + ?> + +
              + + display(); ?> + + + + + + +
              + + +
              + + '; + $subsetting_close = ' + +
              +
              + '; + + $ui_settings = array(); + $form_id = rgget('id'); + $form = RGFormsModel::get_form_meta($form_id); + $form = apply_filters("gform_admin_pre_render_" . $form_id, apply_filters("gform_admin_pre_render", $form)); + $is_valid = empty(GFCommon::$errors); + + ob_start(); ?> + + + + + + + "/> + + + + + __("Form is submitted", "gravityforms"))); + $event_style = count($notification_events) == 1 ? "style='display:none'" : ""; + ?> + > + + + + + + + + + + + + + + + + + + value="email" onclick="jQuery('.notification_to_container').hide(); jQuery('#gform_notification_to_email_container').show('slow');"/> + +    + value="field" onclick="jQuery('.notification_to_container').hide(); jQuery('#gform_notification_to_field_container').show('slow');"/> + +    + value="routing" onclick="jQuery('.notification_to_container').hide(); jQuery('#gform_notification_to_routing_container').show('slow');"/> + + + + + + > + + + + + + + + + + + + + + + + > + + + + + + +

              + + + + + + + > + + +
              + +
              +

              +
              + +
              > + " onkeyup="SetRouting();"/> + + + + + + + 1 ){ ?> + remove this email routing + +
              + + + + + +
              + + + + + + + + + + + "/> + + + + + + + + + + "/> + + + + + + + + + + " class="fieldwidth-2" /> + + + + + + + + + + " class="fieldwidth-1" /> + + + + + + > + + + + + " /> + + + + + + + + > + + + + + + + + false, "editor_class" => "merge-tag-support mt-wp_editor mt-manual_position mt-position-right" ) ); + } + else{?> + + + + + + + + + + + + /> + + + + + + + + + + + /> + +
              + + + + +
              + +
              + + + + + + " . $field_label . ""; + } + } + return $str; + } + + private static function get_field_values($i, $form, $field_id, $selected_value, $max_field_length = 16){ + if(empty($field_id)) + $field_id = self::get_first_routing_field($form); + + if(empty($field_id)) + return ""; + + $field = RGFormsModel::get_field($form, $field_id); + $is_any_selected = false; + $str = ""; + + if (!$field) + return ""; + + if ($field["type"] == "post_category" && rgar($field, "displayAllCategories") == true) + { + $str .= wp_dropdown_categories(array("class"=>"gfield_routing_select gfield_category_dropdown gfield_routing_value_dropdown", "orderby"=> "name", "id"=> "routing_value_" . $i, "selected"=>$selected_value, "hierarchical"=>true, "hide_empty"=>0, "echo"=>false)); + } + elseif (rgar($field,"choices")) { + $str .= ""; + } + else + { + //create a text field for fields that don't have choices (i.e text, textarea, number, email, etc...) + $str = ""; + } + + return $str; + } + + public static function get_post_category_values(){ + + $id = "routing_value_" . rgpost("ruleIndex"); + $selected = rgempty("selectedValue") ? 0 : rgpost("selectedValue"); + + $dropdown = wp_dropdown_categories(array("class"=>"gfield_routing_select gfield_routing_value_dropdown gfield_category_dropdown", "orderby"=> "name", "id"=> $id, "selected"=>$selected, "hierarchical"=>true, "hide_empty"=>0, "echo"=>false)); + die($dropdown); + } + + /** + * Delete a form notification by ID. + * + * @param mixed $notification_id + * @param mixed $form_id Can pass a form ID or a form object + */ + public static function delete_notification($notification_id, $form_id) { + + if(!$form_id) + return false; + + $form = !is_array($form_id) ? RGFormsModel::get_form_meta($form_id) : $form_id; + unset($form['notifications'][$notification_id]); + + // clear Form cache so next retrieval of form meta will reflect deleted notification + RGFormsModel::flush_current_forms(); + + return RGFormsModel::save_form_notifications($form['id'], $form['notifications']); + } + + public static function duplicate_notification($notification_id, $form_id) { + + if(!$form_id) + return false; + + $form = !is_array($form_id) ? RGFormsModel::get_form_meta($form_id) : $form_id; + + $new_notification = $form['notifications'][$notification_id]; + $name = rgar($new_notification, "name"); + $new_id = uniqid(); + + $count = 2; + $new_name = $name . " - Copy 1"; + while(!self::is_unique_name($new_name, $form['notifications'])){ + $new_name = $name . " - Copy $count"; + $count++; + } + $new_notification["name"] = $new_name; + $new_notification["id"] = $new_id; + $form['notifications'][$new_id] = $new_notification; + + // clear Form cache so next retrieval of form meta will return duplicated notification + RGFormsModel::flush_current_forms(); + + return RGFormsModel::save_form_notifications($form['id'], $form['notifications']); + } + + public static function is_unique_name($name, $notifications){ + + foreach ($notifications as $notification){ + if(strtolower(rgar($notification, "name")) == strtolower($name)) + return false; + } + + return true; + } + +} + + + +class GFNotificationTable extends WP_List_Table { + + public $form; + + function __construct($form) { + + $this->form = $form; + + $this->_column_headers = array( + array( + 'cb' => '', + 'name' => __('Name', 'gravityforms'), + 'subject' => __('Subject', 'gravityforms') + ), + array(), + array() + ); + + parent::__construct(); + } + + function prepare_items() { + $this->items = $this->form['notifications']; + } + + function display() { + extract( $this->_args ); + ?> + + + + + print_column_headers(); ?> + + + + + + print_column_headers( false ); ?> + + + + > + + display_rows_or_placeholder(); ?> + + +
              + + '; + echo $this->single_row_columns( $item ); + echo ''; + } + + function column_default($item, $column) { + echo rgar($item, $column); + } + + function column_cb($item) { + $is_active = isset($item["isActive"]) ? $item["isActive"] : true; + ?> + <?php $is_active ? __(" title="" onclick="ToggleActive(this, ''); " /> + $item["id"])); + $actions = apply_filters('gform_notification_actions', array( + 'edit' => '' . __('Edit', 'gravityforms') . '', + 'duplicate' => '' . __('Duplicate', 'gravityforms') . '', + 'delete' => '' . __('Delete', 'gravityforms') . '' + )); + + if(isset($item['isDefault']) && $item['isDefault']) + unset($actions['delete']); + + ?> + + +
              + + $html) { + $divider = $key == $last_key ? '' : " | "; + ?> + + + + + +
              + + 0)) . "'>", ""); + } +} + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/preview.php b/src/wp-content/plugins/gravityforms/preview.php new file mode 100644 index 0000000..80122cf --- /dev/null +++ b/src/wp-content/plugins/gravityforms/preview.php @@ -0,0 +1,76 @@ + + +> + + + + <?php _e("Form Preview", "gravityforms") ?> + + + + + + + + + + + + + + + + +
              +
              +
              +
              +
              +
              +
              + +
              + + + \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/print-entry.php b/src/wp-content/plugins/gravityforms/print-entry.php new file mode 100644 index 0000000..36b1eb5 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/print-entry.php @@ -0,0 +1,133 @@ + "is_starred", "value" => (bool) $star ); + if(!is_null($read)) + $search_criteria["field_filters"][] = array("key" => "is_read", "value" => (bool) $read ); + + $search_field_id = rgget("field_id"); + $search_operator = rgget("operator"); + if(isset($_GET["field_id"]) && $_GET["field_id"] !== ''){ + $key = $search_field_id; + $val = rgget("s"); + $strpos_row_key = strpos($search_field_id, "|"); + if ($strpos_row_key !== false) { //multi-row + $key_array = explode("|", $search_field_id); + $key = $key_array[0]; + $val = $key_array[1] . ":" . $val; + } + $search_criteria["field_filters"][] = array( + "key" => $key, + "operator" => rgempty("operator", $_GET) ? "is" : rgget("operator"), + "value" => $val + ); + } + $lead_ids = GFFormsModel::search_lead_ids($form_id, $search_criteria); +} else { + $lead_ids = explode(',', $leads); +} + + +$page_break = rgget("page_break") ? 'print-page-break' : false; + +// sort lead IDs numerically +sort($lead_ids); + +if(empty($form_id) || empty($lead_ids)) + die(__("Form Id and Lead Id are required parameters.", "gravityforms")); + +$form = RGFormsModel::get_form_meta($form_id); + +?> + + + + + + + + + + + + Print Preview : + <?php echo $form["title"] ?> : + <?php echo count($lead_ids) > 1 ? __("Entry # ", "gravityforms") . $lead_ids[0] : 'Bulk Print' ?> + + + + + + + +
              +
              '; + + do_action("gform_print_entry_footer", $form, $lead); + } + + ?> +
              + + \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/recaptchalib.php b/src/wp-content/plugins/gravityforms/recaptchalib.php new file mode 100644 index 0000000..874eba4 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/recaptchalib.php @@ -0,0 +1,277 @@ + $value ) + $req .= $key . '=' . urlencode( stripslashes($value) ) . '&'; + + // Cut the last '&' + $req=substr($req,0,strlen($req)-1); + return $req; +} + + + +/** + * Submits an HTTP POST to a reCAPTCHA server + * @param string $host + * @param string $path + * @param array $data + * @param int port + * @return array response + */ +function _recaptcha_http_post($host, $path, $data, $port = 80) { + + $req = _recaptcha_qsencode ($data); + + $http_request = "POST $path HTTP/1.0\r\n"; + $http_request .= "Host: $host\r\n"; + $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; + $http_request .= "Content-Length: " . strlen($req) . "\r\n"; + $http_request .= "User-Agent: reCAPTCHA/PHP\r\n"; + $http_request .= "\r\n"; + $http_request .= $req; + + $response = ''; + if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { + die ('Could not open socket'); + } + + fwrite($fs, $http_request); + + while ( !feof($fs) ) + $response .= fgets($fs, 1160); // One TCP-IP packet + fclose($fs); + $response = explode("\r\n\r\n", $response, 2); + + return $response; +} + + + +/** + * Gets the challenge HTML (javascript and non-javascript version). + * This is called from the browser, and the resulting reCAPTCHA HTML widget + * is embedded within the HTML form it was called from. + * @param string $pubkey A public key for reCAPTCHA + * @param string $error The error given by reCAPTCHA (optional, default is null) + * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false) + + * @return string - The HTML to be embedded in the user's form. + */ +function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false, $lang='en') +{ + if ($pubkey == null || $pubkey == '') { + die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create"); + } + + if ($use_ssl) { + $server = RECAPTCHA_API_SECURE_SERVER; + } else { + $server = RECAPTCHA_API_SERVER; + } + + $errorpart = ""; + if ($error) { + $errorpart = "&error=" . $error; + } + return ' + + '; +} + + + + +/** + * A ReCaptchaResponse is returned from recaptcha_check_answer() + */ +class ReCaptchaResponse { + var $is_valid; + var $error; +} + + +/** + * Calls an HTTP POST function to verify if the user's guess was correct + * @param string $privkey + * @param string $remoteip + * @param string $challenge + * @param string $response + * @param array $extra_params an array of extra variables to post to the server + * @return ReCaptchaResponse + */ +function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array()) +{ + if ($privkey == null || $privkey == '') { + die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create"); + } + + if ($remoteip == null || $remoteip == '') { + die ("For security reasons, you must pass the remote ip to reCAPTCHA"); + } + + + + //discard spam submissions + if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) { + $recaptcha_response = new ReCaptchaResponse(); + $recaptcha_response->is_valid = false; + $recaptcha_response->error = 'incorrect-captcha-sol'; + return $recaptcha_response; + } + + $response = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify", + array ( + 'privatekey' => $privkey, + 'remoteip' => $remoteip, + 'challenge' => $challenge, + 'response' => $response + ) + $extra_params + ); + + $answers = explode ("\n", $response [1]); + $recaptcha_response = new ReCaptchaResponse(); + + if (trim ($answers [0]) == 'true') { + $recaptcha_response->is_valid = true; + } + else { + $recaptcha_response->is_valid = false; + $recaptcha_response->error = $answers [1]; + } + return $recaptcha_response; + +} + +/** + * gets a URL where the user can sign up for reCAPTCHA. If your application + * has a configuration page where you enter a key, you should provide a link + * using this function. + * @param string $domain The domain where the page is hosted + * @param string $appname The name of your application + */ +function recaptcha_get_signup_url ($domain = null, $appname = null) { + return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode (array ('domains' => $domain, 'app' => $appname)); +} + +function _recaptcha_aes_pad($val) { + $block_size = 16; + $numpad = $block_size - (strlen ($val) % $block_size); + return str_pad($val, strlen ($val) + $numpad, chr($numpad)); +} + +/* Mailhide related code */ + +function _recaptcha_aes_encrypt($val,$ky) { + if (! function_exists ("mcrypt_encrypt")) { + die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed."); + } + $mode=MCRYPT_MODE_CBC; + $enc=MCRYPT_RIJNDAEL_128; + $val=_recaptcha_aes_pad($val); + return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); +} + + +function _recaptcha_mailhide_urlbase64 ($x) { + return strtr(base64_encode ($x), '+/', '-_'); +} + +/* gets the reCAPTCHA Mailhide url for a given email, public key and private key */ +function recaptcha_mailhide_url($pubkey, $privkey, $email) { + if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) { + die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " . + "you can do so at http://www.google.com/recaptcha/mailhide/apikey"); + } + + + $ky = pack('H*', $privkey); + $cryptmail = _recaptcha_aes_encrypt ($email, $ky); + + return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail); +} + +/** + * gets the parts of the email to expose to the user. + * eg, given johndoe@example,com return ["john", "example.com"]. + * the email is then displayed as john...@example.com + */ +function _recaptcha_mailhide_email_parts ($email) { + $arr = preg_split("/@/", $email ); + + if (strlen ($arr[0]) <= 4) { + $arr[0] = substr ($arr[0], 0, 1); + } else if (strlen ($arr[0]) <= 6) { + $arr[0] = substr ($arr[0], 0, 3); + } else { + $arr[0] = substr ($arr[0], 0, 4); + } + return $arr; +} + +/** + * Gets html to display an email address given a public an private key. + * to get a key, go to: + * + * http://www.google.com/recaptcha/mailhide/apikey + */ +function recaptcha_mailhide_html($pubkey, $privkey, $email) { + $emailparts = _recaptcha_mailhide_email_parts ($email); + $url = recaptcha_mailhide_url ($pubkey, $privkey, $email); + + return htmlentities($emailparts[0]) . "...@" . htmlentities ($emailparts [1]); + +} + + +?> diff --git a/src/wp-content/plugins/gravityforms/select_columns.php b/src/wp-content/plugins/gravityforms/select_columns.php new file mode 100644 index 0000000..f15a3c4 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/select_columns.php @@ -0,0 +1,175 @@ + + + + + + + + + + + + "id" , "label" => __("Entry Id", "gravityforms"))); + array_push($form["fields"],array("id" => "date_created" , "label" => __("Entry Date", "gravityforms"))); + array_push($form["fields"],array("id" => "ip" , "label" => __("User IP", "gravityforms"))); + array_push($form["fields"],array("id" => "source_url" , "label" => __("Source Url", "gravityforms"))); + array_push($form["fields"],array("id" => "payment_status" , "label" => __("Payment Status", "gravityforms"))); + array_push($form["fields"],array("id" => "transaction_id" , "label" => __("Transaction Id", "gravityforms"))); + array_push($form["fields"],array("id" => "payment_amount" , "label" => __("Payment Amount", "gravityforms"))); + array_push($form["fields"],array("id" => "payment_date" , "label" => __("Payment Date", "gravityforms"))); + array_push($form["fields"],array("id" => "created_by" , "label" => __("User", "gravityforms"))); + + $form = self::get_selectable_entry_meta($form); + ?> +
              +
              +
              +
              +
                + $field_info){ + ?> +
              • + +
              +
              + +
              + +
              +
              +
                + +
              • ">
              • + +
              • ">
              • + +
              • ">
              • + +
              +
              +
              + +
              + " class="button-primary" onclick="SelectColumns();"/>  + " class="button" onclick="self.parent.tb_remove();"/> +
              + + + + + $key , "label" => $entry_meta[$key]['label'])); + } + return $form; + } + + + +} +GFSelectColumns::select_columns_page(); diff --git a/src/wp-content/plugins/gravityforms/settings.php b/src/wp-content/plugins/gravityforms/settings.php new file mode 100644 index 0000000..dcbf0a3 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/settings.php @@ -0,0 +1,512 @@ + '', + 'tab_label' => '', + 'handler' => false, + 'icon_path' => '' + ) ) ); + + } + + if( !isset( $tab_label ) || !$tab_label ) + $tab_label = $name; + + add_action("gform_settings_" . str_replace(" " , "_", $name), $handler); + self::$addon_pages[$name] = array("name" => $name, "tab_label" => $tab_label, "icon" => $icon_path); + } + + public static function settings_page() { + + $subview = self::get_subview(); + + switch($subview) { + case 'settings': + self::gravityforms_settings_page(); + break; + case 'uninstall': + self::settings_uninstall_page(); + break; + default: + self::page_header(__($subview, "gravityforms"), ""); + do_action("gform_settings_" . str_replace(" ", "_", $subview)); + self::page_footer(); + } + } + + public static function settings_uninstall_page(){ + self::page_header(__("Uninstall Gravity Forms", "gravityforms"), ""); + if(isset($_POST["uninstall"])){ + + if(!GFCommon::current_user_can_any("gravityforms_uninstall") || (function_exists("is_multisite") && is_multisite() && !is_super_admin())) + die(__("You don't have adequate permission to uninstall Gravity Forms.", "gravityforms")); + + //dropping all tables + RGFormsModel::drop_tables(); + + //removing options + delete_option("rg_form_version"); + delete_option("rg_gforms_key"); + delete_option("rg_gforms_disable_css"); + delete_option("rg_gforms_enable_html5"); + delete_option("rg_gforms_captcha_public_key"); + delete_option("rg_gforms_captcha_private_key"); + delete_option("rg_gforms_message"); + delete_option("gf_dismissed_upgrades"); + delete_option("rg_gforms_currency"); + delete_option("gform_api_count"); + delete_option("gform_email_count"); + + //removing gravity forms upload folder + GFCommon::delete_directory(RGFormsModel::get_upload_root()); + + //Deactivating plugin + $plugin = "gravityforms/gravityforms.php"; + deactivate_plugins($plugin); + update_option('recently_activated', array($plugin => time()) + (array)get_option('recently_activated')); + + ?> +
              ","")?>
              + + +
              + +

              +
              + +

              +
              + + '; + echo apply_filters("gform_uninstall_button", $uninstall_button); + ?> + +
              + +
              + + +
              + . +
              + +
              + +

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + '; + if(!rgempty("is_error", $version_info)) + $key_field .= " There was an error validating your key"; + else if($version_info["is_valid_key"]) + $key_field .= "  " . __("Valid Key : Your license key has been successfully validated.", "gravityforms") . ""; + else if (!empty($key)) + $key_field .= "  " . __("Invalid or Expired Key : Please make sure you have entered the correct value and that your key is not expired.", "gravityforms") . ""; + + echo apply_filters('gform_settings_key_field', $key_field); + ?> +
              + +
              + />    + />
              + +
              + id="gforms_enable_html5"/>    + />
              + +
              + id="gform_enable_noconflict"/>    + id="gform_disable_noconflict"/>
              + +
              + + id="gforms_enable_akismet"/>    + />
              + +
              + + + + +
              + +
              + +

              + +

              .

              + + + + + + + + + + + + + +
              + " />
              + ', ''); ?> +
              + " />
              + ', ''); ?> +
              + + +

              + '; + echo apply_filters("gform_settings_save_button", $save_button); + ?> +

              + +
              + + + + +
              + +

              + + + + + + + + + + + + + + + + + + + + + + +
              + + + ')){ + ?> + + + + + +
              + db_version();?> + + db_version(), '5.0.0', '>')){ + ?> + + + + + +
              + + + ')){ + ?> + + + + + +
              + + + =')){ + ?> + + ', ''); + } + ?> +
              + 'POST', 'timeout' => 3, 'body' => $body); + $options['headers'] = array( + 'Content-Type' => 'application/x-www-form-urlencoded; charset=' . get_option('blog_charset'), + 'Content-Length' => strlen($body), + 'User-Agent' => 'WordPress/' . get_bloginfo("version"), + 'Referer' => get_bloginfo("url") + ); + + $request_url = GRAVITY_MANAGER_URL . "/api.php?op=upgrade_message&key=" . GFCommon::get_key(); + $raw_response = wp_remote_request($request_url, $options); + + if ( is_wp_error( $raw_response ) || 200 != $raw_response['response']['code'] ) + $message = ""; + else + $message = $raw_response['body']; + + //validating that message is a valid Gravity Form message. If message is invalid, don't display anything + if(substr($message, 0, 10) != "") + $message = ""; + + echo $message; + + exit; + } + + public static function page_header($title = '', $message = ''){ + + // register admin styles + wp_register_style('gform_admin', GFCommon::get_base_url() . '/css/admin.css'); + wp_print_styles(array('jquery-ui-styles', 'gform_admin')); + + $current_tab = self::get_subview(); + + //build left side options, always have GF Settings first and Uninstall last, put add-ons in the middle + $setting_tabs = array("10" => array("name" => "settings", "label" => __("Settings", "gravityforms"))); + + if(!empty(self::$addon_pages)){ + + $sorted_addons = self::$addon_pages; + asort($sorted_addons); + + //add add-ons to menu + foreach( $sorted_addons as $sorted_addon ) { + $setting_tabs[] = array( + "name" => urlencode($sorted_addon["name"]) , + "label" => __(esc_html( $sorted_addon["tab_label"] ), "gravityforms") + ); + } + + } + + $setting_tabs[] = array("name" => "uninstall" , "label" => __("Uninstall", "gravityforms") ); + + $setting_tabs = apply_filters("gform_settings_menu", $setting_tabs); + ksort($setting_tabs, SORT_NUMERIC); + + // kind of boring having to pass the title, optionally get it from the settings tab + if(!$title) { + foreach($setting_tabs as $tab) { + if($tab['name'] == $current_tab) + $title = $tab['name']; + } + } + + ?> + +
              + + +

              + + +

              + +
              + + +
              +
              + + +
              +
              +
              + +
              + +
              + + + + \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/tooltips.php b/src/wp-content/plugins/gravityforms/tooltips.php new file mode 100644 index 0000000..afe5070 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/tooltips.php @@ -0,0 +1,166 @@ + "
              " . __("Send To Email Address", "gravityforms") . "
              " . __("Enter the email address you would like the notification email sent to.", "gravityforms"), + "notification_autoformat" => "
              " . __("Disable Auto-Formatting", "gravityforms") . "
              " . __("When enabled, auto-formatting will insert paragraph breaks automatically. Disable auto-formatting when using HTML to create email notification content.", "gravityforms"), + "notification_send_to_routing" => "
              " . __("Routing", "gravityforms") . "
              " . __("Allows notification to be sent to different email addresses depending on values selected in the form.", "gravityforms"), + "notification_from_email" => "
              " . __("From Email Address", "gravityforms") . "
              " . __("Enter the email address you would like the notification email sent from, or select the email from available email form fields.", "gravityforms"), + "notification_from_name" => "
              " . __("From Name", "gravityforms") . "
              " . __("Enter the name you would like the notification email sent from, or select the name from available name fields.", "gravityforms"), + "notification_reply_to" => "
              " . __("Reply To", "gravityforms") . "
              " . __("Enter the email address you would like to be used as the reply to address for the notification email.", "gravityforms"), + "notification_bcc" => "
              " . __("Blind Carbon Copy Addresses", "gravityforms") . "
              " . __("Enter a comma separated list of email addresses you would like to receive a BCC of the notification email.", "gravityforms"), + "form_activity" => "
              " . __("Limit Form Activity", "gravityforms") . "
              " . __("Limit the number of entries a form can generate and/or schedule a time period the form is active.", "gravityforms"), + "form_limit_entries" => "
              " . __("Limit Number of Entries", "gravityforms") . "
              " . __("Enter a number in the input box below to limit the number of entries allowed for this form. The form will become inactive when that number is reached.", "gravityforms"), + "form_schedule_form" => "
              " . __("Schedule Form", "gravityforms") . "
              " . __("Schedule a time period the form is active.", "gravityforms"), + "form_honeypot" => "
              " . __("Enable Anti-spam honeypot", "gravityforms") . "
              " . __("Enables the honeypot spam protection technique, which is an alternative to the reCAPTCHA field.", "gravityforms"), + "form_animation" => "
              " . __("Enable Animation", "gravityforms") . "
              " . __("Check this option to enable a sliding animation when displaying/hiding conditional logic fields.", "gravityforms"), + "form_title" => "
              " . __("Form Title", "gravityforms") . "
              " . __("Enter the title of your form.", "gravityforms"), + "form_description" => "
              " . __("Form Description", "gravityforms") . "
              " . __("Enter a description for your form. This may be used for user instructions.", "gravityforms"), + "form_label_placement" => "
              " . __("Form Label Placement", "gravityforms") . "
              " . __("Select the label placement. Labels can be top aligned above a field, left aligned to the left of a field, or right aligned to the left of a field.", "gravityforms"), + "form_description_placement" => "
              " . __("Description Placement", "gravityforms") . "
              " . __("Select the description placement. Descriptions can be placed above the field inputs or below the field inputs.", "gravityforms"), + "form_button_text" => "
              " . __("Form Button Text", "gravityforms") . "
              " . __("Enter the text you would like to appear on the form submit button.", "gravityforms"), + "form_button_image" => "
              " . __("Form Button Image", "gravityforms") . "
              " . __("Enter the path to an image you would like to use as the form submit button.", "gravityforms"), + "form_css_class" => "
              " . __("Form CSS Class Name", "gravityforms") . "
              " . __("Enter the CSS class name you would like to use in order to override the default styles for this form.", "gravityforms"), + "form_field_add_icon_url" => "
              " . __("Add Icon URL", "gravityforms") . "
              " . __("Enter the URL of a custom image to replace the default 'add item' icon.", "gravityforms"), + "form_field_delete_icon_url" => "
              " . __("Delete Icon URL", "gravityforms") . "
              " . __("Enter the URL of a custom image to replace the default 'delete item' icon.", "gravityforms"), + "form_confirmation_message" => "
              " . __("Confirmation Message Text", "gravityforms") . "
              " . __("Enter the text you would like the user to see on the confirmation page of this form.", "gravityforms"), + "form_confirmation_autoformat" => "
              " . __("Disable Auto-Formatting", "gravityforms") . "
              " . __("When enabled, auto-formatting will insert paragraph breaks automatically. Disable auto-formatting when using HTML to create the confirmation content.", "gravityforms"), + "form_redirect_to_webpage" => "
              " . __("Redirect Form to Page", "gravityforms") . "
              " . __("Select the page you would like the user to be redirected to after they have submitted the form.", "gravityforms"), + "form_redirect_to_url" => "
              " . __("Redirect Form to URL", "gravityforms") . "
              " . __("Enter the URL of the webpage you would like the user to be redirected to after they have submitted the form.", "gravityforms"), + "form_redirect_querystring" => "
              " . __("Pass Data Via Query String", "gravityforms") . "
              " . __("To pass field data to the confirmation page, build a Query String using the 'Insert Merge Tag' drop down. ..more info on querystrings »", "gravityforms"), + "form_field_label" => "
              " . __("Field Label", "gravityforms") . "
              " . __("Enter the label of the form field. This is the field title the user will see when filling out the form.", "gravityforms"), + "form_field_label_html" => "
              " . __("Field Label", "gravityforms") . "
              " . __("Enter the label for this HTML block. It will help you identify your HTML blocks in the form editor, but it will not be displayed on the form.", "gravityforms"), + "form_field_disable_margins" => "
              " . __("Disable Default Margins", "gravityforms") . "
              " . __("When enabled, margins are added to properly align the HTML content with other form fields.", "gravityforms"), + "form_field_recaptcha_theme" => "
              " . __("Recaptcha Theme", "gravityforms") . "
              " . __("Select the visual theme for the reCAPTCHA field the available options to better match your site design.", "gravityforms"), + "form_field_captcha_type" => "
              " . __("CAPTCHA Type", "gravityforms") . "
              " . __("Select the type of CAPTCHA you would like to use.", "gravityforms"), + "form_field_custom_field_name" => "
              " . __("Custom Field Name", "gravityforms") . "
              " . __("Select the custom field name from available existing custom fields, or enter a new custom field name.", "gravityforms"), + "form_field_type" => "
              " . __("Field type", "gravityforms") . "
              " . __("Select the type of field from the available form fields.", "gravityforms"), + "form_field_maxlength" => "
              " . __("Maximum Characters", "gravityforms") . "
              " . __("Enter the maximum number of characters that this field is allowed to have.", "gravityforms"), + "form_field_maxrows" => "
              " . __("Maximum Rows", "gravityforms") . "
              " . __("Enter the maximum number of rows that users are allowed to add.", "gravityforms"), + "form_field_date_input_type" => "
              " . __("Date Input Type", "gravityforms") . "
              " . __("Select the type of inputs you would like to use for the date field. Date Picker will let users select a date from a calendar. Date Field will let users free type the date.", "gravityforms"), + "form_field_address_type" => "
              " . __("Address Type", "gravityforms") . "
              " . __("Select the type of address you would like to use.", "gravityforms"), + "form_field_address_default_state_us" => "
              " . __("Default State", "gravityforms") . "
              " . __("Select the state you would like to be selected by default when the form gets displayed.", "gravityforms"), + "form_field_address_default_state_canadian" => "
              " . __("Default Province", "gravityforms") . "
              " . __("Select the province you would like to be selected by default when the form gets displayed.", "gravityforms"), + "form_field_address_default_country" => "
              " . __("Default Country", "gravityforms") . "
              " . __("Select the country you would like to be selected by default when the form gets displayed.", "gravityforms"), + "form_field_address_hide_country" => "
              " . __("Hide Country", "gravityforms") . "
              " . __("For addresses that only apply to one country, you can choose to not display the country drop down. Entries will still be recorded with the selected country.", "gravityforms"), + "form_field_address_hide_address2" => "
              " . __("Hide Address Line 2", "gravityforms") . "
              " . __("Check this box to prevent the extra address input (Address Line 2) from being displayed in the form.", "gravityforms"), + "form_field_address_hide_state_us" => "
              " . __("Hide State Field", "gravityforms") . "
              " . __("Check this box to prevent the State field from being displayed in the form.", "gravityforms"), + "form_field_address_hide_state_canadian" => "
              " . __("Hide Province Field", "gravityforms") . "
              " . __("Check this box to prevent Province field from being displayed in the form.", "gravityforms"), + "form_field_address_hide_state_international" => "
              " . __("Hide State/Province/Region", "gravityforms") . "
              " . __("Check this box to prevent the State/Province/Region from being displayed in the form.", "gravityforms"), + "form_field_name_format" => "
              " . __("Field Name Format", "gravityforms") . "
              " . __("Select the format you would like to use for the Name field. There are 3 options, Normal which includes First and Last Name, Extended which adds Prefix and Suffix, or Simple which is a single input field.", "gravityforms"), + "form_field_number_format" => "
              " . __("Number Format", "gravityforms") . "
              " . __("Select the format of numbers that are allowed in this field. You have the option to use a comma or a dot as the decimal separator.", "gravityforms"), + "form_field_force_ssl" => "
              " . __("Force SSL", "gravityforms") . "
              " . __("Check this box to prevent this field from being displayed in a non-secure page (i.e. not https://). It will redirect the page to the same URL, but starting with https:// instead. This option requires a properly configured SSL certificate.", "gravityforms"), + "form_field_card_style" => "
              " . __("Credit Card Icon Style", "gravityforms") . "
              " . __("Select the style you would like to use for the credit card icons.", "gravityforms"), + "form_field_date_format" => "
              " . __("Field Date Format", "gravityforms") . "
              " . __("Select the format you would like to use for the date input. Available options are MM/DD/YYYY and DD/MM/YYYY.", "gravityforms"), + "form_field_time_format" => "
              " . __("Time Format", "gravityforms") . "
              " . __("Select the format you would like to use for the time field. Available options are 12 hour (i.e. 8:30 pm) and 24 hour (i.e. 20:30).", "gravityforms"), + "form_field_fileupload_allowed_extensions" => "
              " . __("Allowed File Extensions", "gravityforms") . "
              " . __("Enter the allowed file extensions for file uploads. This will limit the type of files a user may upload.", "gravityforms"), + "form_field_multiple_files" => "
              " . __("Enable Multi-File Upload", "gravityforms") . "
              " . __("Select this option to enable multiple files to be uploaded for this field.", "gravityforms"), + "form_field_max_files" => "
              " . __("Maximum Number of Files", "gravityforms") . "
              " . __("Specify the maximum number of files that can be uploaded using this field. Leave blank for unlimited. Note that the actual number of files permitted may be limited by this server's specifications and configuration.", "gravityforms"), + "form_field_max_file_size" => "
              " . __("Maximum File Size", "gravityforms") . "
              " . __("Specify the maximum file size in megabytes allowed for each of the files.", "gravityforms"), + "form_field_phone_format" => "
              " . __("Phone Number Format", "gravityforms") . "
              " . __("Select the format you would like to use for the phone input. Available options are domestic US/CANADA style phone number and international long format phone number.", "gravityforms"), + "form_field_description" => "
              " . __("Field Description", "gravityforms") . "
              " . __("Enter the description for the form field. This will be displayed to the user and provide some direction on how the field should be filled out or selected.", "gravityforms"), + "form_field_required" => "
              " . __("Required Field", "gravityforms") . "
              " . __("Select this option to make the form field required. A required field will prevent the form from being submitted if it is not filled out or selected.", "gravityforms"), + "form_field_no_duplicate" => "
              " . __("No Duplicates", "gravityforms") . "
              " . __("Select this option to limit user input to unique values only. This will require that a value entered in a field does not currently exist in the entry database for that field.", "gravityforms"), + "form_field_number_range" => "
              " . __("Number Range", "gravityforms") . "
              " . __("Enter the minimum and maximum values for this form field. This will require that the value entered by the user must fall within this range.", "gravityforms"), + "form_field_enable_calculation" => "
              " . __("Enable Calculation", "gravityforms") . "
              " . __("Enabling caculations will allow the value of this field to be dynamically calculated based on a mathematical formula.", "gravityforms"), + "form_field_calculation_formula" => "
              " . __("Formula", "gravityforms") . "
              " . __("Specify a mathematical formula. The result of this formula will be dynamically populated as the value for this field.", "gravityforms"), + "form_field_calculation_rounding" => "
              " . __("Rounding", "gravityforms") . "
              " . __("Specify how many decimal places the number should be rounded to.", "gravityforms"), + "form_field_admin_label" => "
              " . __("Admin Label", "gravityforms") . "
              " . __("Enter the admin label of the form field. Entering a value in this field will override the Field Label when displayed in the Gravity Forms administration tool.", "gravityforms"), + "form_field_size" => "
              " . __("Field Size", "gravityforms") . "
              " . __("Select a form field size from the available options. This will set the width of the field.", "gravityforms"), + "form_field_default_value" => "
              " . __("Default Value", "gravityforms") . "
              " . __("If you would like to pre-populate the value of a field, enter it here.", "gravityforms"), + "form_field_validation_message" => "
              " . __("Validation Message", "gravityforms") . "
              " . __("If you would like to override the default error validation for a field, enter it here. This message will be displayed if there is an error with this field when the user submits the form.", "gravityforms"), + "form_field_recaptcha_language" => "
              " . __("reCaptcha Language", "gravityforms") . "
              " . __("Select the language you would like to use for the reCAPTCHA display from the available options.", "gravityforms"), + "form_field_css_class" => "
              " . __("CSS Class Name", "gravityforms") . "
              " . __("Enter the CSS class name you would like to use in order to override the default styles for this field.", "gravityforms"), + "form_field_visibility" => "
              " . __("Visibility", "gravityforms") . "
              " . __("Select the visibility for this field. Field visibility set to Everyone will be visible by the user submitting the form. Form field visibility set to Admin Only will only be visible within the Gravity Forms administration tool.

              Setting a field to Admin Only is useful for creating fields that can be used to set a status or priority level on submitted entries.", "gravityforms"), + "form_field_choices" => "
              " . __("Field Choices", "gravityforms") . "
              " . __("Add Choices to this field. You can mark each choice as checked by default by using the radio/checkbox fields on the left.", "gravityforms"), + "form_field_choice_values" => "
              " . __("Enable Choice Values", "gravityforms") . "
              " . __("Check this option to specify a value for each choice. Choice values are not displayed to the user viewing the form, but are accessible to administrators when viewing the entry.", "gravityforms"), + "form_field_conditional_logic" => "
              " . __("Conditional Logic", "gravityforms") . "
              " . __("Create rules to dynamically display or hide this field based on values from another field", "gravityforms"), + "form_field_enable_enhanced_ui" => "
              " . __("Enable Enhanced UI", "gravityforms") . "
              " . __("By selecting this option, the Chosen jQuery script will be applied to this field, enabling search capabilities to Drop Down fields and a more user-friendly interface for Multi Select fields.", "gravityforms"), + "form_field_other_choice" => "
              " . __("\"Other\" Choice", "gravityforms") . "
              " . __("Check this option to add a text input as the final choice of your radio button field. This allows the user to specify a value that is not a predefined choice.", "gravityforms"), + "form_require_login" => "
              " . __("Require user to be logged in", "gravityforms") . "
              " . __("Check this option to require a user to be logged in to view this form", "gravityforms"), + "form_require_login_message" => "
              " . __("Require Login Message", "gravityforms") . "
              " . __("Enter a message to be displayed to users who are not logged in (shortcodes and HTML are supported)", "gravityforms"), + "form_page_conditional_logic" => "
              " . __("Page Conditional Logic", "gravityforms") . "
              " . __("Create rules to dynamically display or hide this page based on values from another field", "gravityforms"), + "form_progress_indicator" => "
              " . __("Progress Indicator", "gravityforms") . "
              " . __("Select which type of visual progress indicator you would like to display. Progress Bar, Steps or None", "gravityforms"), + "form_percentage_style" => "
              " . __("Progress Bar Style", "gravityforms") . "
              " . __("Select which progress bar style you would like to use. Select custom to choose your own text and background color", "gravityforms"), + "form_page_names" => "
              " . __("Page Names", "gravityforms") . "
              " . __("Name each of the pages on your form. Page names are displayed with the selected progress indicator", "gravityforms"), + "next_button_text" => "
              " . __("Next Button Text", "gravityforms") . "
              " . __("Enter the text you would like to appear on the page next button", "gravityforms"), + "next_button_image" => "
              " . __("Next Button Image", "gravityforms") . "
              " . __("Enter the path to an image you would like to use as the page next button", "gravityforms"), + "previous_button_text" => "
              " . __("Previous Button Text", "gravityforms") . "
              " . __("Enter the text you would like to appear on the page previous button", "gravityforms"), + "previous_button_image" => "
              " . __("Previous Button Image", "gravityforms") . "
              " . __("Enter the path to an image you would like to use as the page previous button", "gravityforms"), + "form_nextbutton_conditional_logic" => "
              " . __("Next Button Conditional Logic", "gravityforms") . "
              " . __("Create rules to dynamically display or hide the page's Next Button based on values from another field", "gravityforms"), + "form_button_conditional_logic" => "
              " . __("Conditional Logic", "gravityforms") . "
              " . __("Create rules to dynamically display or hide the submit button based on values from another field", "gravityforms"), + "form_field_post_category_selection" => "
              " . __("Post Category", "gravityforms") . "
              " . __("Select which categories are displayed. You can choose to display all of them or select individual ones.", "gravityforms"), + "form_field_post_status" => "
              " . __("Post Status", "gravityforms") . "
              " . __("Select the post status that will be used for the post that is created by the form entry.", "gravityforms"), + "form_field_post_author" => "
              " . __("Post Author", "gravityforms") . "
              " . __("Select the author that will be used for the post that is created by the form entry.", "gravityforms"), + "form_field_post_format" => "
              " . __("Post Format", "gravityforms") . "
              " . __("Select the post format that will be used for the post that is created by the form entry.", "gravityforms"), + "form_field_post_content_template_enable" => "
              " . __("Post Content Template", "gravityforms") . "
              " . __("Check this option to format and insert merge tags into the Post Content.", "gravityforms"), + "form_field_post_title_template_enable" => "
              " . __("Post Title Template", "gravityforms") . "
              " . __("Check this option to format and insert merge tags into the Post Title.", "gravityforms"), + "form_field_post_category" => "
              " . __("Post Category", "gravityforms") . "
              " . __("Select the category that will be used for the post that is created by the form entry.", "gravityforms"), + "form_field_current_user_as_author" => "
              " . __("Use Current User as Author", "gravityforms") . "
              " . __("Selecting this option will set the post author to the WordPress user that submitted the form.", "gravityforms"), + "form_field_image_meta" => "
              " . __("Image Meta", "gravityforms") . "
              " . __("Select one or more image metadata field to be displayed along with the image upload field. They enable users to enter additional information about the uploaded image.", "gravityforms"), + "form_field_featured_image" => "
              " . __("Set as Featured Image", "gravityforms") . "
              " . __("Check this option to set this image as the post's Featured Image.", "gravityforms"), + "form_field_prepopulate" => "
              " . __("Incoming Field Data", "gravityforms") . "
              " . __("Check this option to enable data to be passed to the form and pre-populate this field dynamically. Data can be passed via Query Strings, Shortcode and/or Hooks", "gravityforms"), + "form_field_content" => "
              " . __("Content", "gravityforms") . "
              " . __("Enter the content (Text or HTML) to be displayed on the form.", "gravityforms"), + "form_field_base_price" => "
              " . __("Base Price", "gravityforms") . "
              " . __("Enter the base price for this product.", "gravityforms"), + "form_field_disable_quantity" => "
              " . __("Disable Quantity", "gravityforms") . "
              " . __("Disables the quantity field. A quantity of 1 will be assumed or you can add a Quantity field to your form from the Pricing Fields.", "gravityforms"), + "form_field_product" => "
              " . __("Product Field", "gravityforms") . "
              " . __("Select which Product this field is tied to.", "gravityforms"), + "form_field_mask" => "
              " . __("Input Mask", "gravityforms") . "
              " . __("Input masks provide a visual guide allowing users to more easily enter data in a specific format such as dates and phone numbers.", "gravityforms"), + "form_standard_fields" => "
              " . __("Standard Fields", "gravityforms") . "
              " . __("Standard Fields provide basic form functionality.", "gravityforms"), + "form_advanced_fields" => "
              " . __("Advanced Fields", "gravityforms") . "
              " . __("Advanced Fields are for specific uses. They enable advanced formatting of regularly used fields such as Name, Email, Address, etc.", "gravityforms"), + "form_post_fields" => "
              " . __("Post Fields", "gravityforms") . "
              " . __("Post Fields allow you to add fields to your form that create Post Drafts in WordPress from the submitted data.", "gravityforms"), + "form_pricing_fields" => "
              " . __("Pricing Fields", "gravityforms") . "
              " . __("Pricing fields allow you to add fields to your form that calculate pricing for selling goods and services.", "gravityforms"), + "export_select_form" => "
              " . __("Export Selected Form", "gravityforms") . "
              " . __("Select the form you would like to export entry data from. You may only export data from one form at a time.", "gravityforms"), + "export_select_forms" => "
              " . __("Export Selected Forms", "gravityforms") . "
              " . __("Select the forms you would like to export.", "gravityforms"), + "export_conditional_logic" => "
              " . __("Conditional Logic", "gravityforms") . "
              " . __("Filter the entries by adding conditions.", "gravityforms"), + "export_select_fields" => "
              " . __("Export Selected Fields", "gravityforms") . "
              " . __("Select the fields you would like to include in the export.", "gravityforms"), + "export_date_range" => "
              " . __("Export Date Range", "gravityforms") . "
              " . __("Select a date range. Setting a range will limit the export to entries submitting during that date range. If no range is set, all entries will be exported.", "gravityforms"), + "import_select_file" => "
              " . __("Select File", "gravityforms") . "
              " . __("Click the Choose File button to upload a Gravity Forms XML file from your computer", "gravityforms"), + "settings_license_key" => "
              " . __("Settings License Key", "gravityforms") . "
              " . __("Your Gravity Forms support license key is used to verify your support package, enable automatic updates and receive support.", "gravityforms"), + "settings_output_css" => "
              " . __("Output CSS", "gravityforms") . "
              " . __("Select yes or no to enable or disable CSS output. Setting this to no will disable the standard Gravity Forms CSS from being included in your theme.", "gravityforms"), + "settings_html5" => "
              " . __("Output HTML5", "gravityforms") . "
              " . __("Select yes or no to enable or disable HTML5 output. Setting this to no will disable the standard Gravity Forms HTML5 form field output.", "gravityforms"), + "settings_noconflict" => "
              " . __("No-Conflict Mode", "gravityforms") . "
              " . __("Select On or Off to enable or disable no-conflict mode. Setting this to On will prevent extraneous scripts and styles from being printed on Gravity Forms admin pages, reducing conflicts with other plugins and themes.", "gravityforms"), + "settings_recaptcha_public" => "
              " . __("reCaptcha Public Key", "gravityforms") . "
              " . __("Enter your reCAPTCHA Public Key, if you do not have a key you can register for one at the provided link. reCAPTCHA is a free service.", "gravityforms"), + "settings_recaptcha_private" => "
              " . __("reCaptcha Private Key", "gravityforms") . "
              " . __("Enter your reCAPTCHA Private Key, if you do not have a key you can register for one at the provided link. reCAPTCHA is a free service.", "gravityforms"), + "settings_currency" => "
              " . __("Currency", "gravityforms") . "
              " . __("Please select the currency for your location. Currency is used for pricing fields and price calculations.", "gravityforms"), + "settings_akismet" => "
              " . __("Akismet Integration", "gravityforms") . "
              " . __("Protect your form entries from spam using Akismet.", "gravityforms"), + "entries_conversion" => "
              " . __("Entries Conversion", "gravityforms") . "
              " . __("Conversion is the percentage of form views that generated an entry. If a form was viewed twice, and one entry was generated, the conversion will be 50%.", "gravityforms"), + "widget_tabindex" => "
              " . __("Tab Index Start Value", "gravityforms") . "
              " . __("If you have other forms on the page (i.e. Comments Form), specify a higher tabindex start value so that your Gravity Form does not end up with the same tabindices as your other forms. To disable the tabindex, enter 0 (zero).", "gravityforms"), + "notification_override_email" => "
              " . __("Override Notifications", "gravityforms") . "
              " . __("Enter a comma separated list of email addresses you would like to receive the selected notification emails.", "gravityforms"), + "form_percentage_confirmation_display" => "
              " . __("Progress Bar Confirmation Display", "gravityforms") . "
              " . __("Check this box if you would like the progress bar to display with the confirmation text.", "gravityforms"), + "percentage_confirmation_page_name" => "
              " . __("Progress Bar Completion Text", "gravityforms") . "
              " . __("Enter text to display at the top of the progress bar.", "gravityforms"), + +); + +function gform_tooltip($name, $css_class="", $return=false){ + global $__gf_tooltips; //declared as global to improve WPML performance + + $css_class = empty($css_class) ? "tooltip" : $css_class; + $__gf_tooltips = apply_filters("gform_tooltips", $__gf_tooltips); + + //AC: the $name parameter is a key when it has only one word. Maybe try to improve this later. + $parameter_is_key = count(explode(" ", $name)) == 1; + + $tooltip_text = $parameter_is_key ? rgar($__gf_tooltips, $name) : $name; + $tooltip_class = isset($__gf_tooltips[$name]) ? "tooltip_{$name}" : ""; + + if(empty($tooltip_text)) + return ""; + + $tooltip = ""; + + if($return) + return $tooltip; + else + echo $tooltip; +} \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/update.php b/src/wp-content/plugins/gravityforms/update.php new file mode 100644 index 0000000..8119995 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/update.php @@ -0,0 +1,79 @@ + + + " /> + +
              +

              + +
              + You can update to the latest version automatically or download the update and install it manually. %sUpdate Automatically%s %sDownload Update%s", "gravityforms"), "

              ", "", " ", ""); ?> +
              + +
              + Register your copy of Gravity Forms to receive access to automatic updates and support. Need a license key? Purchase one now.', 'gravityforms');?> +
              +
              "; + $changelog = RGForms::get_changelog(); + echo $changelog; + } + else{ + + ?> +
              + +
              + + + + +
              + \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/widget.php b/src/wp-content/plugins/gravityforms/widget.php new file mode 100644 index 0000000..dd87339 --- /dev/null +++ b/src/wp-content/plugins/gravityforms/widget.php @@ -0,0 +1,107 @@ +WP_Widget( 'gform_widget', __('Form', 'gravityforms'), + array( 'classname' => 'gform_widget', 'description' => $description ), + array( 'width' => 200, 'height' => 250, 'id_base' => 'gform_widget' ) + ); + } + + function widget( $args, $instance ) { + + extract( $args ); + echo $before_widget; + $title = apply_filters('widget_title', $instance['title'] ); + + if ( $title ) + echo $before_title . $title . $after_title; + + //setting tabindex based on configured value + if(is_numeric($instance['tabindex'])){ + add_filter("gform_tabindex_{$instance['form_id']}", create_function("", "return {$instance['tabindex']};")); + } + + //creating form + $form = RGFormsModel::get_form_meta($instance['form_id']); + + if(empty($instance["disable_scripts"]) && !is_admin()){ + RGForms::print_form_scripts($form, $instance["ajax"]); + } + + $form_markup = RGForms::get_form($instance['form_id'], $instance['showtitle'], $instance['showdescription'], false, null, $instance["ajax"]); + + //display form + echo $form_markup; + echo $after_widget; + } + + function update( $new_instance, $old_instance ) { + $instance = $old_instance; + $instance["title"] = strip_tags( $new_instance["title"] ); + $instance["form_id"] = $new_instance["form_id"]; + $instance["showtitle"] = $new_instance["showtitle"]; + $instance["ajax"] = $new_instance["ajax"]; + $instance["disable_scripts"] = $new_instance["disable_scripts"]; + $instance["showdescription"] = $new_instance["showdescription"]; + $instance["tabindex"] = $new_instance["tabindex"]; + + return $instance; + } + + function form( $instance ) { + + $instance = wp_parse_args( (array) $instance, array('title' => __("Contact Us", "gravityforms"), 'tabindex' => '1') ); + ?> +

              + + +

              +

              + + +

              +

              + value="1" />
              + value="1"/>
              +

              +

              + +

              + + + \ No newline at end of file diff --git a/src/wp-content/plugins/gravityforms/xml.php b/src/wp-content/plugins/gravityforms/xml.php new file mode 100644 index 0000000..b6280fb --- /dev/null +++ b/src/wp-content/plugins/gravityforms/xml.php @@ -0,0 +1,221 @@ +options = $options; + } + + private function indent($path){ + $depth = sizeof(explode("/", $path)) - 1; + $indent=""; + $indent = str_pad($indent, $depth, "\t"); + return "\r\n" . $indent; + } + + public function serialize($parent_node_name, $data, $path=""){ + $xml = ""; + if(empty($path)){ + $path = $parent_node_name; + $xml = ""; + } + + //if this element is marked as hidden, ignore it + $option = rgar($this->options, $path); + if(rgar($option,"is_hidden")) + return ""; + + $padding = $this->indent($path); + + //if the content is not an array, simply render the node + if(!is_array($data)){ + $option = rgar($this->options,$path); + return strlen($data) == 0 && !rgar($option, "allow_empty") ? "" : "$padding<$parent_node_name>" . $this->xml_value($parent_node_name, $data) . ""; + } + $is_associative = $this->is_assoc($data); + $is_empty = true; + + //opening parent node + $version = $path == $parent_node_name && isset($this->options["version"]) ? " version=\"" . $this->options["version"] . "\"" : ""; + $xml .= "{$padding}<{$parent_node_name}{$version}"; + + if($is_associative){ + //adding properties marked as attributes for associative arrays + foreach($data as $key => $obj){ + $child_path = "$path/$key"; + if($this->is_attribute($child_path)){ + $value = $this->xml_attribute($obj); + $option = rgar($this->options, $child_path); + if(strlen($value) > 0 || rgar($option, "allow_empty")){ + $xml .= " $key=\"$value\""; + $is_empty = false; + } + } + } + } + //closing element start tag + $xml .= ">"; + + //for a regular array, the child element (if not specified in the options) will be the singular vesion of the parent element(i.e.
              ...
              ...
              ) + $child_node_name = isset($this->options[$path]["array_tag"]) ? $this->options[$path]["array_tag"] : $this->to_singular($parent_node_name); + + //adding other properties as elements + foreach($data as $key => $obj){ + $node_name = $is_associative ? $key : $child_node_name; + $child_path = "$path/$node_name"; + if(!$this->is_attribute($child_path)){ + + $child_xml = $this->serialize($node_name, $obj, $child_path); + if(strlen($child_xml) > 0){ + $xml .= $child_xml; + $is_empty = false; + } + } + } + + //closing parent node + $xml .= "$padding"; + + return $is_empty ? "" : $xml; + } + + public function unserialize($xml_string){ + $xml_string = trim($xml_string); + + $xml_parser = xml_parser_create(); + $values = array(); + xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); + xml_parser_set_option($xml_parser, XML_OPTION_SKIP_WHITE, 1); + + xml_parse_into_struct($xml_parser, $xml_string, $values); + + $object = $this->unserialize_node($values, 0); + xml_parser_free($xml_parser); + + return $object; + } + + private function unserialize_node($values, $index){ + $current = isset($values[$index]) ? $values[$index] : false; + + //initializing current object + $obj = array(); + + //each attribute becomes a property of the object + if(isset($current["attributes"]) && is_array($current["attributes"])){ + foreach($current["attributes"] as $key => $attribute) + $obj[$key] = $attribute; + } + + //for nodes without children(i.e. contact us or ), simply return its content + if($current["type"] == "complete"){ + $val = isset($current["value"]) ? $current["value"] : ""; + return !empty($obj) ? $obj : $val; + } + + //get the current node's immediate children + $children = $this->get_children($values, $index); + + if(is_array($children)){ + //if all children have the same tag, add them as regular array items (not associative) + $is_identical_tags = $this->has_identical_tags($children); + $unserialize_as_array = $is_identical_tags + && isset($children[0]["tag"]) + && isset($this->options[$children[0]["tag"]]) + && $this->options[$children[0]["tag"]]["unserialize_as_array"]; + + //serialize every child and add it to the object (as a regular array item, or as an associative array entry) + foreach($children as $child){ + $child_obj = $this->unserialize_node($values, $child["index"]); + if($unserialize_as_array) + $obj[] = $child_obj; + else + $obj[$child["tag"]] = $child_obj; + } + } + return $obj; + } + + private function get_children($values, $parent_index){ + $level = isset($values[$parent_index]["level"]) ? $values[$parent_index]["level"] + 1 : false; + $nodes = array(); + for($i= $parent_index + 1, $count = sizeof($values); $i<$count; $i++){ + $current = $values[$i]; + + //If we have reached the close tag for the parent node, we are done. Return the current nodes. + if($current["level"] == $level -1 && $current["type"] == "close") + return $nodes; + else if($current["level"] == $level && ($current["type"] == "open" || $current["type"] == "complete")) + $nodes[] = array("tag" => $current["tag"], "index" => $i); //this is a child, add it to the list of nodes + + } + return $nodes; + } + + private function has_identical_tags($nodes){ + $tag = isset($nodes[0]["tag"]) ? $nodes[0]["tag"] : false; + foreach($nodes as $node){ + if($node["tag"] != $tag) + return false; + } + return true; + } + + private function is_attribute($path){ + $option = rgar($this->options, $path); + return rgar($option,"is_attribute"); + } + + private function xml_value($node_name, $value){ + if(strlen($value) == 0) + return ""; + + if($this->xml_is_cdata($node_name)) + return $this->xml_cdata($value); + else + return $this->xml_content($value); + } + + private function xml_attribute($value){ + return esc_attr($value); + } + + private function xml_cdata($value){ + return ""; + } + + private function xml_content($value){ + return $value; + } + + private function xml_is_cdata($node_name){ + return true; + } + + private function is_assoc($array){ + return is_array($array) && array_diff_key($array,array_keys(array_keys($array))); + } + + private function to_singular($str){ + + $last3 = strtolower(substr($str, strlen($str) - 3)); + $fourth = strtolower(substr($str, strlen($str) - 4, 1)); + + if( $last3 == "ies" && in_array($fourth, array("a","e","i","o","u") ) ){ + return substr($str, 0, strlen($str)-3) . "y"; + } + else{ + return substr($str, 0, strlen($str)-1); + } + } +} +if(!function_exists("rgar")){ +function rgar($array, $name){ + if(isset($array[$name])) + return $array[$name]; + + return ''; +} +} + +?> diff --git a/src/wp-content/plugins/index.php b/src/wp-content/plugins/index.php new file mode 100644 index 0000000..4e6c07c --- /dev/null +++ b/src/wp-content/plugins/index.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/lesshat/LICENSE b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/lesshat/LICENSE new file mode 100644 index 0000000..f45b78b --- /dev/null +++ b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/lesshat/LICENSE @@ -0,0 +1,44 @@ +MIT License + +Copyright (c) 2012 +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +BSD License + +Copyright (c) 2012 +All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Organization nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/lesshat/README.rdoc b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/lesshat/README.rdoc new file mode 100644 index 0000000..e482281 --- /dev/null +++ b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/lesshat/README.rdoc @@ -0,0 +1,26 @@ +=LESS HAT + +==Features + +All CSS3 properties which need to be prefixed + +Unlimited number of anything, shadows, gradients, gradient swatches. + +Configurable -turn off all other browsers and get just CSS3 which you want + +SVG gradient fallback for IE9 + +Prefix free - everywhere use only W3C syntax and Less Hat takes care of it + + +==About + +A supersonic bunch of smart LESS mixins. + +Homepage and examples: http://lesshat.com + +From creators of: http://csshat.com + +==License + +LESS Hat is dual-licensed under the BSD and MIT licenses, see LICENCE file above. diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/lesshat/lesshat.css b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/lesshat/lesshat.css new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/lesshat/lesshat.css @@ -0,0 +1 @@ + diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/lesshat/lesshat.less b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/lesshat/lesshat.less new file mode 100644 index 0000000..0443ac2 --- /dev/null +++ b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/lesshat/lesshat.less @@ -0,0 +1,2200 @@ +// LESS Hat 1.1.1 +// LESSHat.com +// From creators of CSSHat.com +// 2012 +// Petr Brzek & Jan Kuca + + +// @GlobalConfig + +// .animation + // .animation-delay + // .animation-direction + // .animation-duration + // .animation-fill-mode + // .animation-timing-function + // .animation-iteration-count + // .animation-name + // .animation-play-state + // .keyframes - in future +// .appearance +// .backface-visibility +// .background-clip +// .background-image +// .background-origin +// .background-size +// .border-radius + // .border-top-left-radius + // .border-top-right-radius + // .border-bottom-left-radius + // .border-bottom-right-radius +// .border-image +// .box-shadow +// .box-sizing +// .columns + // .column-count + // .column-gap + // .column-rule + // .column-width +// .font-face +// .gradient +// .opacity +// .perspective + // .perspective-origin +// .size +// .transform + // .transform-origin + // .transform-style + // .translate + // .translate3d + // .translateX + // .translateY + // .translateZ + // .scale + // .scale3d + // .scaleX + // .scaleY + // .scaleZ + // .rotate + // .rotate3d + // .rotateX + // .rotateY + // .rotateZ + // .skew + // .skewX + // .skewY +// .transition + // .transition-property + // .transition-duration + // .transition-timing-function + // .transition-delay +// .user-select +// DEPRECATED mixins + + +// @GlobalConfig + + // Config supported browsers for your project + + @w3c: true; // Unprefixed W3C syntax + @webkit: true; // Chrome 7+, Safari 5+, iOS5, Android + @moz: true; // Firefox 4+ + @opera: true; // Opera 10.5+ + @ms: true; // IE 10+ + + // Signals + + @webkitSignal: 1; + @mozSignal: 2; + @operaSignal: 3; + @msSignal: 4; + @w3cSignal: 5; + +// .animation + + .animation(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @processing: ~`(function(){ var arg = "@{arguments}".replace("[","").replace("]","") || "none"; if( !/^\w*([ X])/.test(arg) ) { arg = arg.replace(/,/g,"") } return arg; })()`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation: @processing;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-animation: @processing;} + .inception (@signal, @arguments) when (@signal = 3) { -o-animation: @processing;} + .inception (@signal, @arguments) when (@signal = 4) { -ms-animation: @processing;} + .inception (@signal, @arguments) when (@signal = 5) { animation: @processing;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .animation(nameAnimation 2s linear alternate anim 3s linear alternate ); } + + + // .animation-delay + + .animation-delay(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @processing: ~`(function(){ var arg = "@{arguments}" || "0"; arg = arg.replace("[","").replace("]",""); return arg; }())`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-delay: @processing;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-delay: @processing;} + .inception (@signal, @arguments) when (@signal = 3) { -o-animation-delay: @processing;} + .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-delay: @processing;} + .inception (@signal, @arguments) when (@signal = 5) { animation-delay: @processing;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .animation-delay(1s); } + // element{ .animation-delay(750ms, 2s, 3s); } // For multiple animation-direction + + + // .animation-direction + + .animation-direction(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @processing: ~`(function(){ var arg = "@{arguments}" || "normal"; arg = arg.replace("[","").replace("]",""); return arg; }())`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-direction: @processing;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-direction: @processing;} + .inception (@signal, @arguments) when (@signal = 3) { -o-animation-direction: @processing;} + .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-direction: @processing;} + .inception (@signal, @arguments) when (@signal = 5) { animation-direction: @processing;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .animation-direction(); } + // element{ .animation-direction(normal, alternate); } + + + // .animation-duration + + .animation-duration(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @processing: ~`(function(){ var arg = "@{arguments}" || "0"; arg = arg.replace("[","").replace("]",""); return arg; }())`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-duration: @processing;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-duration: @processing;} + .inception (@signal, @arguments) when (@signal = 3) { -o-animation-duration: @processing;} + .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-duration: @processing;} + .inception (@signal, @arguments) when (@signal = 5) { animation-duration: @processing;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .animation-duration(2s); } + + + // .animation-fill-mode + + .animation-fill-mode(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @processing: ~`(function(){ var arg = "@{arguments}" || "none"; arg = arg.replace("[","").replace("]",""); return arg; }())`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-fill-mode: @processing;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-fill-mode: @processing;} + .inception (@signal, @arguments) when (@signal = 3) { -o-animation-fill-mode: @processing;} + .inception (@signal, @arguments) when (@signal = 5) { animation-fill-mode: @processing;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .animation-fill-mode(forwards); } + + + // .animation-timing-function + + .animation-timing-function(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @processing: ~`(function(){ var arg = "@{arguments}" || "ease"; arg = arg.replace("[","").replace("]",""); return arg; }())`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-timing-function: @processing;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-timing-function: @processing;} + .inception (@signal, @arguments) when (@signal = 3) { -o-animation-timing-function: @processing;} + .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-timing-function: @processing;} + .inception (@signal, @arguments) when (@signal = 5) { animation-timing-function: @processing;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .animation-timing-function(ease-in-out); } + + + // .animation-iteration-count + + .animation-iteration-count(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @processing: ~`(function(){ var arg = "@{arguments}" || "0"; arg = arg.replace("[","").replace("]",""); return arg; }())`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-iteration-count: @processing;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-iteration-count: @processing;} + .inception (@signal, @arguments) when (@signal = 3) { -o-animation-iteration-count: @processing;} + .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-iteration-count: @processing;} + .inception (@signal, @arguments) when (@signal = 5) { animation-iteration-count: @processing;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .animation-iteration-count(3); } + + + // .animation-name + + .animation-name(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @processing: ~`(function(){ var arg = "@{arguments}" || "none"; arg = arg.replace("[","").replace("]",""); return arg; }())`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-name: @processing;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-name: @processing;} + .inception (@signal, @arguments) when (@signal = 3) { -o-animation-name: @processing;} + .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-name: @processing;} + .inception (@signal, @arguments) when (@signal = 5) { animation-name: @processing;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .animation-name(myReallyCoolAnimationName); } + + + // .animation-play-state + + .animation-play-state(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @processing: ~`(function(){ var arg = "@{arguments}" || "running"; arg = arg.replace("[","").replace("]",""); return arg; }())`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-play-state: @processing;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-play-state: @processing;} + .inception (@signal, @arguments) when (@signal = 3) { -o-animation-play-state: @processing;} + .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-play-state: @processing;} + .inception (@signal, @arguments) when (@signal = 5) { animation-play-state: @processing;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .animation-play-state(paused); } + + +// .appearance + + .appearance(@argument:none){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @argument) when (@signal = 1) { -webkit-appearance: @argument;} + .inception (@signal, @argument) when (@signal = 2) { -moz-appearance: @argument;} + .inception (@signal, @argument) when (@signal = 5) { appearance: @argument;} + .inception (@signal, @argument) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @argument); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .appearance(button); } + + +// .backface-visibility + + .backface-visibility(@argument:visible){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @argument) when (@signal = 1) { -webkit-backface-visibility: @argument;} + .inception (@signal, @argument) when (@signal = 2) { -moz-backface-visibility: @argument;} + .inception (@signal, @argument) when (@signal = 5) { backface-visibility: @argument;} + .inception (@signal, @argument) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @argument); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .backface-visibility(hidden); } + + +// .background-clip + + .background-clip(@arguments:border-box){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-background-clip: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-background-clip: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { background-clip: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .background-clip(padding-box); } + + +// .background-image + + .background-image(...){ + + // Local config for disabling properties + + @svg: true; // SVG gradient for IE9 + @mozLocal: true; // Firefox 4+ + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5+, Android + @operaLocal: true; // Opera 10.5+ + @w3cLocal: true; // Unprefixed W3C syntax + + @backgroundSVG: ~`(function(){function K(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c,d,e,f,g,h,i,j,k=0,l=0,m="",n=[];if(!a)return a;do c=a.charCodeAt(k++),d=a.charCodeAt(k++),e=a.charCodeAt(k++),j=c<<16|d<<8|e,f=j>>18&63,g=j>>12&63,h=j>>6&63,i=j&63,n[l++]=b.charAt(f)+b.charAt(g)+b.charAt(h)+b.charAt(i);while(k');if(f.test(d[q])&&!j.test(d[q])||l.test(d[q])||/180deg/.test(d[q])){var r=null;l.test(d[q])?r=l:/180deg/.test(d[q])?r=/180deg/:r=f,d[q]=d[q].replace(r,'')}else if(g.test(d[q])&&!k.test(d[q])||m.test(d[q])||/270deg/.test(d[q])){var r=null;m.test(d[q])?r=m:/270deg/.test(d[q])?r=/270deg/:r=g,d[q]=d[q].replace(r,'')}else if(h.test(d[q])&&!l.test(d[q])||j.test(d[q])||/[^\d]0deg/.test(d[q])){var r=null;j.test(d[q])?r=j:/0deg/.test(d[q])?r=/0deg/:r=h,d[q]=d[q].replace(r,'')}else if(i.test(d[q])&&!m.test(d[q])||k.test(d[q])||/90deg/.test(d[q])){var r=null;k.test(d[q])?r=k:/90deg/.test(d[q])?r=/90deg/:r=i,d[q]=d[q].replace(r,'')}else n.test(d[q])&&!o.test(d[q])?d[q]=d[q].replace(n,''):o.test(d[q])?d[q]=d[q].replace(o,''):c=!1}try{"".trim(),b=!0}catch(s){b=!1}b&&(d[q]=d[q].trim());if(/linear/.test(d[q])||/radial/.test(d[q])){d[q]=d[q].slice(0,-1),d[q]="url(data:image/svg+xml;base64--"+d[q]+')';var t=d.join("@@@"),u=t.match(/rgba?\(\d+,\s*\d+,\s*\d+,\s*(?:0|1|\.\d+|0\.\d+)\)\s*\d*%*/g)||0,v=t.match(/hsla?\(\d+,\s*\d+%,\s*\d+%,\s*(?:0|1|\.\d+|0\.\d+)\)\s*\d*%*/g)||0,w=[],x=[];for(var y=0;y').replace(/(rgba?\(\d+--\s*\d+--\s*\d+--\s*(0|1|\.\d+|0\.\d+)\))\s*(\d*.?\d*%)*/g,'').replace(/rgba/g,"rgb").replace(/(hsla?\(\d+--\s*\d+%--\s*\d+%--\s*(0|1|\.\d+|0\.\d+)\))\s*(\d*.?\d*%)*/g,'').replace(/hsla/g,"hsl").replace(/((?:aqua|black|blue|fuchsia|gray|grey|green|lime|maroon|navy|olive|purple|red|silver|teal|white|yellow))\s*(\d*%)*/g,'').replace(/\*\*\*/,"#grad-ucgg-generated");try{"".trim(),b=!0}catch(s){b=!1}b&&(C[E]=C[E].trim());if(/offset=""/g.test(C[E])){var F=C.length-2,G=Math.round(100/F)*D;console.log(G);var H='offset="'+G+'%"';C[E]=C[E].replace(/offset=""/,H),D++}}C=C.toString().replace(/,/g,"").replace(/--/g,",").replace(/(rgb?\(\d+,\s*\d+,\s*\d+),\s*(?:0|1|\.\d+|0\.\d+)\)/g,"$1)").replace(/(hsl?\(\d+,\s*\d+%,\s*\d+%),\s*(?:0|1|\.\d+|0\.\d+)\)/g,"$1)")}}/radial/.test(C)&&(/((ellipse).*(center)|(circle).*(center))/g.test(C)?C=C.replace(/<\/linearGradient>/g,"").replace(/radial-gradient[^<]+/g,'').replace(//g,''):C=!1);var I=null;try{C=C.split("@@@");var J=0;for(J;J/),I=K(I.join("")),C[J]=C[J].replace(/(<\?xml.*<\/svg>)/,I)}catch(s){}return c?C:C=!1,C?C.toString():C})()`; + @backgroundMoz: ~`(function(){var a,b,c,d,e,f,g,h,i,j,k;a="@{arguments}",c=null,d=a.split(/,(?=\s*(?:linear|radial))/g),e=d.length,k=/to\s*top/,j=/to\s*right/,h=/to\s*bottom/,i=/to\s*left/,b=/\d*deg/,f=0;while(f 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .background-origin(content-box); } + + +// .background-size + + .background-size(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + @processing: ~`(function(){ var arg = "@{arguments}".replace("[","").replace("]","") || "none"; if( !/^\w*%?([ X])/.test(arg) ) { arg = arg.replace(/,/g,"") } return arg; })()`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-background-size: @processing;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-background-size: @processing;} + .inception (@signal, @arguments) when (@signal = 5) { background-size: @processing;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .background-size(50% auto); } + + +// .border-radius + + .border-radius(@arguments:0) { + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-radius: @arguments; -webkit-background-clip: padding-box;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius: @arguments; -moz-background-clip: padding;} + .inception (@signal, @arguments) when (@signal = 5) { border-radius: @arguments; background-clip: padding-box; } + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .border-radius(10px); } // all corner rounded + // element{ .border-radius(~"10px / 20px"); } // NEED TO BE ESCAPED OR LESS DEVIDE IT! Horizontal and vertical rounded differently + // element{ .border-radius(0 10px 0 0); } // only top right corner rounded + + +// .border-top-left-radius + + .border-top-left-radius(@arguments:0) { + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-top-left-radius: @arguments; -webkit-background-clip: padding-box;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius-topleft: @arguments; -moz-background-clip: padding;} + .inception (@signal, @arguments) when (@signal = 5) { border-top-left-radius: @arguments; background-clip: padding-box; } + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .border-top-left-radius(10px); } + + +// .border-top-right-radius + + .border-top-right-radius(@arguments:0) { + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-top-right-radius: @arguments; -webkit-background-clip: padding-box;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius-topright: @arguments; -moz-background-clip: padding;} + .inception (@signal, @arguments) when (@signal = 5) { border-top-right-radius: @arguments; background-clip: padding-box; } + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .border-top-right-radius(10px); } + + +// .border-bottom-left-radius + + .border-bottom-left-radius(@arguments:0) { + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-bottom-left-radius: @arguments; -webkit-background-clip: padding-box;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius-bottomleft: @arguments; -moz-background-clip: padding;} + .inception (@signal, @arguments) when (@signal = 5) { border-bottom-left-radius: @arguments; background-clip: padding-box; } + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .border-bottom-left-radius(10px); } + + +// .border-bottom-right-radius + + .border-bottom-right-radius(@arguments:0) { + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-bottom-right-radius: @arguments; -webkit-background-clip: padding-box;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius-bottomright: @arguments; -moz-background-clip: padding;} + .inception (@signal, @arguments) when (@signal = 5) { border-bottom-right-radius: @arguments; background-clip: padding-box; } + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .border-bottom-right-radius(10px); } + + +// .border-image + + .border-image(@arguments:none){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-image: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-border-image: @arguments;} + .inception (@signal, @arguments) when (@signal = 3) { -o-border-image: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { border-image: @arguments; } + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .border-image(url(border.png) 30 30 round); } + + +// .box-shadow + + .box-shadow(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + @processing: ~`(function(){ var arg = "@{arguments}".replace("[","").replace("]","") || "none"; if( !/^#?\w*%?([ X])/.test(arg) ) { arg = arg.replace(/,(?=[^()]*\))/g,'--').replace(/,/g,"").replace(/--/g,','); } return arg; })()`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-box-shadow: @processing;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-box-shadow: @processing;} + .inception (@signal, @arguments) when (@signal = 5) { box-shadow: @processing;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + + //color: @arguments; + } + + // element{ .box-shadow(0 1px 10px rgba(20,20,20,0.5), 0 1px 10px rgba(20,20,20,0.5)); } + + +// .box-sizing + + .box-sizing(@arguments:content-box){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-box-sizing: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-box-sizing: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { box-sizing: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .box-sizing(border-box); } + + +// .columns + + .columns(@arguments:auto auto){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-columns: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-columns: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { columns: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .columns(100px 3); } + + +// .column-count + + .column-count(@arguments:auto){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-column-count: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-column-count: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { column-count: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .column-count(3); } + + +// .column-gap + + .column-gap(@arguments:normal){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-column-gap: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-column-gap: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { column-gap: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .column-gap(40px); } + + +// .column-rule + + .column-rule(@arguments:medium none black){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-column-rule: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-column-rule: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { column-rule: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .column-rule(3px outset #ff00ff); } + + +// .column-width + + .column-width(@arguments:auto){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-column-width: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-column-width: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { column-width: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .column-width(100px); } + + +// .font-face + + .font-face(@fontname, @fontfile) { + + font-family: "@{fontname}"; + src: url("@{fontfile}-webfont.eot"); + src: url("@{fontfile}-webfont.eot?#iefix") format("embedded-opentype"), + url("@{fontfile}-webfont.woff") format("woff"), + url("@{fontfile}-webfont.ttf") format("truetype"), + url("@{fontfile}-webfont.svg#@{fontname}") format("svg"); + font-weight: normal; + font-style: normal; + } + + // element{ .font-face(ZendaRegular, zenda-webfont); } + + +// .opacity + + .opacity(@arguments:1){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-opacity: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-opacity: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { opacity: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .opacity(.5); } + + +// .perspective + + .perspective(@arguments:none){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-perspective: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-perspective: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { perspective: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .perspective(350px); } + + +// .perspective-origin + + .perspective-origin(@arguments:50% 50%){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-perspective-origin: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-perspective-origin: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { perspective-origin: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .perspective-origin(top left); } + + +// .size + + .size(@square){ + width: @square; + height: @square; + } + + .size(@width, @height){ + width: @width; + height: @height; + } + + // element{ .size(10px); } // render width:10px; height:10px; + // element{ .size(10px, 20px); } // render width:10px; height: 20px; + + +// .transform + + .transform(@arguments:none, ...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: @arguments;} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: @arguments;} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { transform: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .transform(scale(.5) translate(10px, 20px)); } + + +// .transform-origin + + .transform-origin(@arguments:50% 50% 0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform-origin: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform-origin: @arguments;} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform-origin: @arguments;} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform-origin: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { transform-origin: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .transform-origin(20% 40%); } + + +// .transform-style + + .transform-style(@arguments:flat){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform-origin: @arguments;} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform-origin: @arguments;} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform-origin: @arguments;} + .inception (@signal, @arguments) when (@signal = 5) { transform-origin: @arguments;} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .transform-style(preserve-3d); } + + +// .translate + + .translate(@x:0, @y:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translate(@x, @y);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translate(@x, @y);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translate(@x, @y);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translate(@x, @y);} + .inception (@signal, @arguments) when (@signal = 5) { transform: translate(@x, @y);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .translate(100px); } + // element{ .translate(100px, 50px); } + + +// .translate3d + + .translate3d(@x:0, @y:0, @z:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translate3d(@x, @y, @z);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translate3d(@x, @y, @z);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translate3d(@x, @y, @z);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translate3d(@x, @y, @z);} + .inception (@signal, @arguments) when (@signal = 5) { transform: translate3d(@x, @y, @z);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .translate3d(10px, 20px, 30px); } + + +// .translateX + + .translateX(@x:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translateX(@x);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translateX(@x);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translateX(@x);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translateX(@x);} + .inception (@signal, @arguments) when (@signal = 5) { transform: translateX(@x);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .translateX(10px); } + + +// .translateY + + .translateY(@y:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translateY(@y);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translateY(@y);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translateY(@y);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translateY(@y);} + .inception (@signal, @arguments) when (@signal = 5) { transform: translateY(@y);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .translateY(15px); } + + +// .translateZ + + .translateZ(@z:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translateZ(@z);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translateZ(@z);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translateZ(@z);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translateZ(@z);} + .inception (@signal, @arguments) when (@signal = 5) { transform: translateZ(@z);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .translateZ(32px); } + + +// .scale + + .scale(@x:1){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scale(@x);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scale(@x);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scale(@x);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scale(@x);} + .inception (@signal, @arguments) when (@signal = 5) { transform: scale(@x);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + .scale(@x, @y){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scale(@x, @y);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scale(@x, @y);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scale(@x, @y);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scale(@x, @y);} + .inception (@signal, @arguments) when (@signal = 5) { transform: scale(@x, @y);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .scale(2); } + // element{ .scale(2, 1); } + + +// .scale3d + + .scale3d(@x:1, @y:1, @z:1){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scale3d(@x, @y, @z);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scale3d(@x, @y, @z);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scale3d(@x, @y, @z);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scale3d(@x, @y, @z);} + .inception (@signal, @arguments) when (@signal = 5) { transform: scale3d(@x, @y, @z);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .scale3d(1, 2, 1); } + + +// .scaleX + + .scaleX(@x:1){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scaleX(@x);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scaleX(@x);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scaleX(@x);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scaleX(@x);} + .inception (@signal, @arguments) when (@signal = 5) { transform: scaleX(@x);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .scaleX(1.5); } + + +// .scaleY + + .scaleY(@y:1){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scaleX(@y);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scaleX(@y);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scaleX(@y);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scaleX(@y);} + .inception (@signal, @arguments) when (@signal = 5) { transform: scaleX(@y);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .scaleX(1.5); } + + +// .scaleZ + + .scaleZ(@z:1){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scaleZ(@z);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scaleZ(@z);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scaleZ(@z);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scaleZ(@z);} + .inception (@signal, @arguments) when (@signal = 5) { transform: scaleZ(@z);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .scaleZ(2.7); } + + +// .rotate + + .rotate(@angle:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotate(@angle);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotate(@angle);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotate(@angle);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotate(@angle);} + .inception (@signal, @arguments) when (@signal = 5) { transform: rotate(@angle);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .rotate(45deg); } + + +// .rotate3d + + .rotate3d(@x:0, @y:0, @z: 0, @angle:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotate3d(@x, @y, @z, @angle);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotate3d(@x, @y, @z, @angle);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotate3d(@x, @y, @z, @angle);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotate3d(@x, @y, @z, @angle);} + .inception (@signal, @arguments) when (@signal = 5) { transform: rotate3d(@x, @y, @z, @angle);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .rotate3d(1, 2.0, 3.0, 10deg); } + + +// .rotateX + + .rotateX(@angle:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotateX(@angle);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotateX(@angle);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotateX(@angle);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotateX(@angle);} + .inception (@signal, @arguments) when (@signal = 5) { transform: rotateX(@angle);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .rotateX(63deg); } + + +// .rotateY + + .rotateY(@angle:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotateY(@angle);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotateY(@angle);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotateY(@angle);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotateY(@angle);} + .inception (@signal, @arguments) when (@signal = 5) { transform: rotateY(@angle);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .rotateY(24deg); } + + +// .rotateZ + + .rotateZ(@angle:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotateZ(@angle);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotateZ(@angle);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotateZ(@angle);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotateZ(@angle);} + .inception (@signal, @arguments) when (@signal = 5) { transform: rotateZ(@angle);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .rotateZ(280deg); } + + +// .skew + + .skew(@angle:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: skew(@angle);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: skew(@angle);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: skew(@angle);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: skew(@angle);} + .inception (@signal, @arguments) when (@signal = 5) { transform: skew(@angle);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .skew(20deg); } + + +// .skewX + + .skewX(@angle:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: skewX(@angle);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: skewX(@angle);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: skewX(@angle);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: skewX(@angle);} + .inception (@signal, @arguments) when (@signal = 5) { transform: skewX(@angle);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .skewX(24deg); } + + +// .skewY + + .skewY(@angle:0){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: skewY(@angle);} + .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: skewY(@angle);} + .inception (@signal, @arguments) when (@signal = 3) { -o-transform: skewY(@angle);} + .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: skewY(@angle);} + .inception (@signal, @arguments) when (@signal = 5) { transform: skewY(@angle);} + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .skewY(36deg); } + + +// .transition + + .transition(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @transitionWebkit: ~`(function(){var a,b,c,d,e,f,g;a="@{arguments}".split(","),c=["background-size","border-","box-shadow","column","transform"],d=c.length,e=a,f=!1,b=a.length;for(var h=0;h 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .transition(transform 3s linear); } + + +// .transition-property + + .transition-property(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @transitionWebkit: ~`(function(){var a,b,c,d,e,f,g;a="@{arguments}".split(","),c=["background-size","border-","box-shadow","column","transform"],d=c.length,e=a,f=!1,b=a.length;for(var h=0;h 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .transition-property(width, height); } + + +// .transition-duration + + .transition-duration(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @processing: ~`(function(){ var arg = "@{arguments}" || "0"; try{ var hasComma = arg.match(/,/g).length > 1 ? true : false; } catch (e) {} if (hasComma === true) arg = arg.replace(/,/g,""); arg = arg.replace("[","").replace("]",""); return arg; }())`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transition-duration: @processing; } + .inception (@signal, @arguments) when (@signal = 2) { -moz-transition-duration: @processing; } + .inception (@signal, @arguments) when (@signal = 3) { -o-transition-duration: @processing; } + .inception (@signal, @arguments) when (@signal = 5) { transition-duration: @processing; } + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .transition-duration(250ms); } + + +// .transition-timing-function + + .transition-timing-function(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @processing: ~`(function(){ var arg = "@{arguments}" || "ease"; arg = arg.replace("[","").replace("]",""); return arg; }())`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transition-timing-function: @processing; } + .inception (@signal, @arguments) when (@signal = 2) { -moz-transition-timing-function: @processing; } + .inception (@signal, @arguments) when (@signal = 3) { -o-transition-timing-function: @processing; } + .inception (@signal, @arguments) when (@signal = 5) { transition-timing-function: @processing; } + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .transition-timing-function(cubic-bezier(0,0,1,1)); } + + +// .transition-delay + + .transition-delay(...){ + + // Local config for disabling properties + + @w3cLocal: true; // Unprefixed W3C syntax + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @operaLocal: true; // Opera 10.5+ + @msLocal: true; // IE 10+ + + @processing: ~`(function(){ var arg = "@{arguments}" || "0"; arg = arg.replace("[","").replace("]",""); return arg; }())`; + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-transition-delay: @processing; } + .inception (@signal, @arguments) when (@signal = 2) { -moz-transition-delay: @processing; } + .inception (@signal, @arguments) when (@signal = 3) { -o-transition-delay: @processing; } + .inception (@signal, @arguments) when (@signal = 5) { transition-delay: @processing; } + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @operaSignal, @opera, @operaLocal); + // -- + .result(@arguments, @w3cSignal, @w3c, @w3cLocal); + } + + // element{ .transition-delay(2s); } + + +// .user-select + + .user-select(@arguments:auto){ + + // Local config for disabling properties + + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @mozLocal: true; // Firefox 4+ + @msLocal: true; // IE 10+ + + .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { + .inception (@signal, @arguments) when (@signal = 1) { -webkit-user-select: @arguments; } + .inception (@signal, @arguments) when (@signal = 2) { -moz-user-select: @arguments; } + .inception (@signal, @arguments) when (@signal = 4) { -ms-user-select: @arguments; } + .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; } + .inception(@signal, @arguments); + } + .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { } + + .result(@arguments, @webkitSignal, @webkit, @webkitLocal); + // -- this comment must be here because of LESS bug + .result(@arguments, @mozSignal, @moz, @mozLocal); + // -- + .result(@arguments, @msSignal, @ms, @msLocal); + } + + // element{ .user-select(text); } + + +// DEPRECATED mixins (must be supported because of old version of CSS Hat) + + // .gradient (renamed background-image) + + .gradient(...){ + + // Local config for disabling properties + + @svg: true; // SVG gradient for IE9 + @mozLocal: true; // Firefox 4+ + @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android + @operaLocal: true; // Opera 10.5+ + @w3cLocal: true; // Unprefixed W3C syntax + + @backgroundSVG: ~`(function(){function G(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c,d,e,f,g,h,i,j,k=0,l=0,m="",n=[];if(!a)return a;do c=a.charCodeAt(k++),d=a.charCodeAt(k++),e=a.charCodeAt(k++),j=c<<16|d<<8|e,f=j>>18&63,g=j>>12&63,h=j>>6&63,i=j&63,n[l++]=b.charAt(f)+b.charAt(g)+b.charAt(h)+b.charAt(i);while(k');if(f.test(d[q])&&!j.test(d[q])||l.test(d[q])||/180deg/.test(d[q])){var r=null;l.test(d[q])?r=l:/180deg/.test(d[q])?r=/180deg/:r=f,d[q]=d[q].replace(r,'')}else if(g.test(d[q])&&!k.test(d[q])||m.test(d[q])||/270deg/.test(d[q])){var r=null;m.test(d[q])?r=m:/270deg/.test(d[q])?r=/270deg/:r=g,d[q]=d[q].replace(r,'')}else if(h.test(d[q])&&!l.test(d[q])||j.test(d[q])||/[^\d]0deg/.test(d[q])){var r=null;j.test(d[q])?r=j:/0deg/.test(d[q])?r=/0deg/:r=h,d[q]=d[q].replace(r,'')}else if(i.test(d[q])&&!m.test(d[q])||k.test(d[q])||/90deg/.test(d[q])){var r=null;k.test(d[q])?r=k:/90deg/.test(d[q])?r=/90deg/:r=i,d[q]=d[q].replace(r,'')}else n.test(d[q])&&!o.test(d[q])?d[q]=d[q].replace(n,''):o.test(d[q])?d[q]=d[q].replace(o,''):c=!1}try{"".trim(),b=!0}catch(s){b=!1}b&&(d[q]=d[q].trim());if(/linear/.test(d[q])||/radial/.test(d[q])){d[q]=d[q].slice(0,-1),d[q]="url(data:image/svg+xml;base64--"+d[q]+')';var t=d.join("@@@"),u=t.match(/rgba?\(\d+,\s*\d+,\s*\d+,\s*(?:0|1|\.\d+|0\.\d+)\)\s*\d*%*/g)||0,v=t.match(/hsla?\(\d+,\s*\d+%,\s*\d+%,\s*(?:0|1|\.\d+|0\.\d+)\)\s*\d*%*/g)||0,w=[],x=[];for(var y=0;y').replace(/(rgba?\(\d+--\s*\d+--\s*\d+--\s*(0|1|\.\d+|0\.\d+)\))\s*(\d*%)*/g,'').replace(/rgba/g,"rgb").replace(/(hsla?\(\d+--\s*\d+%--\s*\d+%--\s*(0|1|\.\d+|0\.\d+)\))\s*(\d*%)*/g,'').replace(/hsla/g,"hsl").replace(/((?:aqua|black|blue|fuchsia|gray|grey|green|lime|maroon|navy|olive|purple|red|silver|teal|white|yellow))\s*(\d*%)*/g,'').replace(/\*\*\*/,"#grad-ucgg-generated");try{"".trim(),b=!0}catch(s){b=!1}b&&(C[D]=C[D].trim())}C=C.toString().replace(/,/g,"").replace(/--/g,",").replace(/(rgb?\(\d+,\s*\d+,\s*\d+),\s*(?:0|1|\.\d+|0\.\d+)\)/g,"$1)").replace(/(hsl?\(\d+,\s*\d+%,\s*\d+%),\s*(?:0|1|\.\d+|0\.\d+)\)/g,"$1)")}}/radial/.test(C)&&(/((ellipse).*(center)|(circle).*(center))/g.test(C)?C=C.replace(/<\/linearGradient>/g,"").replace(/radial-gradient[^<]+/g,'').replace(//g,''):C=!1);var E=null;try{C=C.split("@@@");var F=0;for(F;F/),E=G(E.join("")),C[F]=C[F].replace(/(<\?xml.*<\/svg>)/,E)}catch(s){}return c?C:C=!1,C?C.toString().replace(/\[/g,"").replace(/\]/g,""):C}())`; + @backgroundMoz: ~`(function(){var a,b,c,d,e,f,g,h,i,j,k;a="@{arguments}",c=null,d=a.split(/,(?=\s*(?:linear|radial))/g),e=d.length,k=/to\s*top/,j=/to\s*right/,h=/to\s*bottom/,i=/to\s*left/,b=/\d*deg/,f=0;while(f.left-side{float:left;width:70%}#onetRegenThumb>.left-side .datadisplay{margin:30px 0 40px 0;height:100px}#onetRegenThumb>.left-side .datadisplay .stats{float:left;width:20%;margin:0}#onetRegenThumb>.left-side .datadisplay .progress{float:right;width:75%;height:100%}#onetRegenThumb>.left-side .datadisplay .progress #progressbar{position:relative}#onetRegenThumb>.left-side .datadisplay .progress #progressbar .percent{text-align:center;position:absolute;top:0;line-height:27px;width:50px;left:50%;margin:0 0 0 -25px}#onetRegenThumb>.left-side .datadisplay .progress #progressbar .estimated{position:absolute;right:10px;top:0;line-height:27px}#onetRegenThumb>.left-side .datadisplay .progress #progressbar .remaining{position:absolute;top:0;line-height:27px;left:10px}#onetRegenThumb>.left-side .datadisplay #progresslog{overflow:auto;height:0}#onetRegenThumb>.left-side .datadisplay #progresslog .terminated{color:#f00;font-weight:bold}#onetRegenThumb>.left-side .datadisplay #progresslog .error{color:#f00;font-style:italic}#onetRegenThumb>.left-side .datadisplay.processing{height:auto}#onetRegenThumb>.left-side .datadisplay.processing .progress{display:block}#onetRegenThumb>.left-side .datadisplay.processing #progresslog{height:220px}#onetRegenThumb>.left-side .btnset{width:75%;float:right}#onetRegenThumb>.right-side{float:right;width:25%;padding:10px 10px 0 5px}#onetRegenThumb>.right-side #onetrt-customdim .lister{border-bottom:1px solid #ddd;-webkit-box-shadow:0 1px 0 #fff;-moz-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff}#onetRegenThumb>.right-side #onetrt-customdim .lister .custom-thumbnails li{position:relative}#onetRegenThumb>.right-side #onetrt-customdim .lister .custom-thumbnails li .opt{position:absolute;right:30px}#onetRegenThumb>.right-side #onetrt-customdim .editor div>label:first-child{width:60px;display:inline-block}#onetRegenThumb>.right-side #onetrt-customdim .editor div{margin-bottom:8px}#onetRegenThumb>.right-side #onetrt-customdim abbr.hint{cursor:help;font-style:italic}#onetRegenThumb>.right-side #onetrt-customdim p.head{font-size:110%}#onetRegenThumb>.right-side #onetrt-customdim .save{position:absolute;background:#f8f8f8;background:rgba(245,245,245,0.78);top:0;left:0;right:0;bottom:0;z-index:10;font-weight:bold;font-size:150%;text-align:center;line-height:100px;display:none}#onetRegenThumb>.right-side #onetrt-customdim.load .save{display:block}#onetRegenThumb .orte-box .hndle{cursor:default}#onetRegenThumb .orte-box .handlediv{display:none} \ No newline at end of file diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/main.less b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/main.less new file mode 100644 index 0000000..4957148 --- /dev/null +++ b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/css/main.less @@ -0,0 +1,137 @@ +@import url("lesshat/lesshat.less"); +/* Single, post editor */ +#onetrt-single { + +} + +/* Main UI */ +#onetRegenThumb { + & > .left-side { + float: left; + width: 70%; + + .datadisplay { + margin: 30px 0 40px 0; + height: 100px; + + .stats { + float: left; + width: 20%; + margin: 0; + } + .progress { + float: right; + width: 75%; + height: 100%; + //display:none; + #progressbar { + position: relative; + .percent { + text-align: center; + position: absolute; + top: 0; + line-height: 27px; + width: 50px; + left: 50%; + margin: 0 0 0 -25px; + } + .estimated { + position: absolute; + right: 10px; + top: 0; + line-height: 27px; + } + .remaining { + position: absolute; + top: 0; + line-height: 27px; + left: 10px; + } + } + } + + #progresslog { + overflow: auto; + height: 0px; + .terminated { + color: red; + font-weight: bold; + } + .error { + color: red; + font-style: italic; + } + } + &.processing { + height: auto; + & .progress { display: block; } + & #progresslog { height: 220px; } + } + } + + .btnset { + width: 75%; + float:right; + } + } + & > .right-side { + float: right; + width: 25%; + padding: 10px 10px 0 5px; + + #onetrt-customdim { + .lister { + border-bottom: 1px solid #DDD; + .box-shadow(~"0 1px 0 #fff"); + .custom-thumbnails li { + position: relative; + .opt { + position: absolute; + right: 30px; + } + } + } + .editor { + div > label:first-child { + width: 60px; + display: inline-block; + } + div { + margin-bottom: 8px; + } + } + abbr.hint { + cursor: help; + font-style: italic; + } + p.head { + font-size: 110%; + } + .save { + position: absolute; + background: #F8F8F8; + background: rgba(245, 245, 245, 0.78); + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 10; + font-weight: bold; + font-size: 150%; + text-align: center; + line-height: 100px; + display: none; + } + + &.load { + .save { display: block; } + } + } + + } + + .orte-box { + .hndle { cursor: default; } + .handlediv { display: none; } + } +} \ No newline at end of file diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/animated-overlay.gif b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/animated-overlay.gif new file mode 100644 index 0000000..d441f75 Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/animated-overlay.gif differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_flat_0_aaaaaa_40x100.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000..ff06b00 Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_flat_0_eeeeee_40x100.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_flat_0_eeeeee_40x100.png new file mode 100644 index 0000000..1df095b Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_flat_0_eeeeee_40x100.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_flat_55_ffffff_40x100.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_flat_55_ffffff_40x100.png new file mode 100644 index 0000000..44d7ab5 Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_flat_55_ffffff_40x100.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_flat_75_ffffff_40x100.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000..30a8bde Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_glass_65_ffffff_1x400.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..eee8031 Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png new file mode 100644 index 0000000..4652125 Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png new file mode 100644 index 0000000..3ddef0e Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png new file mode 100644 index 0000000..511c12b Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_0073ea_256x240.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_0073ea_256x240.png new file mode 100644 index 0000000..1fcab6d Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_0073ea_256x240.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_454545_256x240.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000..b6db1ac Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_454545_256x240.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_666666_256x240.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_666666_256x240.png new file mode 100644 index 0000000..76cecfc Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_666666_256x240.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_ff0084_256x240.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_ff0084_256x240.png new file mode 100644 index 0000000..439c7b7 Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_ff0084_256x240.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_ffffff_256x240.png b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000..4f624bb Binary files /dev/null and b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/images/ui-icons_ffffff_256x240.png differ diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/jquery-ui-1.10.3.custom.css b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/jquery-ui-1.10.3.custom.css new file mode 100644 index 0000000..d1ee6c6 --- /dev/null +++ b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/jquery-ui-1.10.3.custom.css @@ -0,0 +1,1177 @@ +/*! jQuery UI - v1.10.3 - 2013-10-01 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Helvetica%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=2px&bgColorHeader=dddddd&bgTextureHeader=highlight_soft&bgImgOpacityHeader=50&borderColorHeader=dddddd&fcHeader=444444&iconColorHeader=0073ea&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=dddddd&fcContent=444444&iconColorContent=ff0084&bgColorDefault=f6f6f6&bgTextureDefault=highlight_soft&bgImgOpacityDefault=100&borderColorDefault=dddddd&fcDefault=0073ea&iconColorDefault=666666&bgColorHover=0073ea&bgTextureHover=highlight_soft&bgImgOpacityHover=25&borderColorHover=0073ea&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=dddddd&fcActive=ff0084&iconColorActive=454545&bgColorHighlight=ffffff&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=cccccc&fcHighlight=444444&iconColorHighlight=0073ea&bgColorError=ffffff&bgTextureError=flat&bgImgOpacityError=55&borderColorError=ff0084&fcError=222222&iconColorError=ff0084&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0px +* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin-top: 2px; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ +} +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-noicons { + padding-left: .7em; +} +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month-year { + width: 100%; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 49%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-menu { + list-style: none; + padding: 2px; + margin: 0; + display: block; + outline: none; +} +.ui-menu .ui-menu { + margin-top: -3px; + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + width: 100%; + /* support: IE10, see #8844 */ + list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); +} +.ui-menu .ui-menu-divider { + margin: 5px -2px 5px -2px; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: 2px .4em; + line-height: 1.5; + min-height: 0; /* support: IE7 */ + font-weight: normal; +} +.ui-menu .ui-menu-item a.ui-state-focus, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} + +.ui-menu .ui-state-disabled { + font-weight: normal; + margin: .4em 0 .2em; + line-height: 1.5; +} +.ui-menu .ui-state-disabled a { + cursor: default; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item a { + position: relative; + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: .2em; + left: .2em; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + position: static; + float: right; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("images/animated-overlay.gif"); + height: 100%; + filter: alpha(opacity=25); + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* For IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to overide default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertical centre icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active a, +.ui-tabs .ui-tabs-nav li.ui-state-disabled a, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading a { + cursor: text; +} +.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Helvetica,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Helvetica,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #dddddd; + background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; + color: #444444; +} +.ui-widget-content a { + color: #444444; +} +.ui-widget-header { + border: 1px solid #dddddd; + background: #dddddd url(images/ui-bg_highlight-soft_50_dddddd_1x100.png) 50% 50% repeat-x; + color: #444444; + font-weight: bold; +} +.ui-widget-header a { + color: #444444; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #dddddd; + background: #f6f6f6 url(images/ui-bg_highlight-soft_100_f6f6f6_1x100.png) 50% 50% repeat-x; + font-weight: bold; + color: #0073ea; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #0073ea; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #0073ea; + background: #0073ea url(images/ui-bg_highlight-soft_25_0073ea_1x100.png) 50% 50% repeat-x; + font-weight: bold; + color: #ffffff; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited { + color: #ffffff; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #dddddd; + background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; + font-weight: bold; + color: #ff0084; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #ff0084; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #cccccc; + background: #ffffff url(images/ui-bg_flat_55_ffffff_40x100.png) 50% 50% repeat-x; + color: #444444; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #444444; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #ff0084; + background: #ffffff url(images/ui-bg_flat_55_ffffff_40x100.png) 50% 50% repeat-x; + color: #222222; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #222222; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #222222; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_ff0084_256x240.png); +} +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_0073ea_256x240.png); +} +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_666666_256x240.png); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url(images/ui-icons_ffffff_256x240.png); +} +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_454545_256x240.png); +} +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_0073ea_256x240.png); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_ff0084_256x240.png); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 2px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 2px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 2px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 2px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #eeeeee url(images/ui-bg_flat_0_eeeeee_40x100.png) 50% 50% repeat-x; + opacity: .8; + filter: Alpha(Opacity=80); +} +.ui-widget-shadow { + margin: -4px 0 0 -4px; + padding: 4px; + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .6; + filter: Alpha(Opacity=60); + border-radius: 0px; +} diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/jquery-ui-1.10.3.custom.min.css b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/jquery-ui-1.10.3.custom.min.css new file mode 100644 index 0000000..03fd67f --- /dev/null +++ b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/jquery-ui/flick/jquery-ui-1.10.3.custom.min.css @@ -0,0 +1,7 @@ +/*! jQuery UI - v1.10.3 - 2013-10-01 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Helvetica%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=2px&bgColorHeader=dddddd&bgTextureHeader=highlight_soft&bgImgOpacityHeader=50&borderColorHeader=dddddd&fcHeader=444444&iconColorHeader=0073ea&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=dddddd&fcContent=444444&iconColorContent=ff0084&bgColorDefault=f6f6f6&bgTextureDefault=highlight_soft&bgImgOpacityDefault=100&borderColorDefault=dddddd&fcDefault=0073ea&iconColorDefault=666666&bgColorHover=0073ea&bgTextureHover=highlight_soft&bgImgOpacityHover=25&borderColorHover=0073ea&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=dddddd&fcActive=ff0084&iconColorActive=454545&bgColorHighlight=ffffff&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=cccccc&fcHighlight=444444&iconColorHighlight=0073ea&bgColorError=ffffff&bgTextureError=flat&bgImgOpacityError=55&borderColorError=ff0084&fcError=222222&iconColorError=ff0084&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0px +* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ + +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:none}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:normal}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-menu .ui-state-disabled{font-weight:normal;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("images/animated-overlay.gif");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Helvetica,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Helvetica,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#444}.ui-widget-content a{color:#444}.ui-widget-header{border:1px solid #ddd;background:#ddd url(images/ui-bg_highlight-soft_50_dddddd_1x100.png) 50% 50% repeat-x;color:#444;font-weight:bold}.ui-widget-header a{color:#444}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ddd;background:#f6f6f6 url(images/ui-bg_highlight-soft_100_f6f6f6_1x100.png) 50% 50% repeat-x;font-weight:bold;color:#0073ea}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#0073ea;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #0073ea;background:#0073ea url(images/ui-bg_highlight-soft_25_0073ea_1x100.png) 50% 50% repeat-x;font-weight:bold;color:#fff}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#fff;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #ddd;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#ff0084}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#ff0084;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #ccc;background:#fff url(images/ui-bg_flat_55_ffffff_40x100.png) 50% 50% repeat-x;color:#444}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#444}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #ff0084;background:#fff url(images/ui-bg_flat_55_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#222}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#222}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_ff0084_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_0073ea_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_666666_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_ffffff_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_0073ea_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_ff0084_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:2px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:2px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:2px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:2px}.ui-widget-overlay{background:#eee url(images/ui-bg_flat_0_eeeeee_40x100.png) 50% 50% repeat-x;opacity:.8;filter:Alpha(Opacity=80)}.ui-widget-shadow{margin:-4px 0 0 -4px;padding:4px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.6;filter:Alpha(Opacity=60);border-radius:0} \ No newline at end of file diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/main.js b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/main.js new file mode 100644 index 0000000..31a6aa7 --- /dev/null +++ b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/main.js @@ -0,0 +1,275 @@ +jQuery(document).ready(function () { + var $ = jQuery, // jQuety alias + lockUnload = null, // Locked unload + + /** + * Run regenrating process + **/ + runProcess = function () { + // Ger base variables + var item_num = window.onetrt_taskdata.item_total, + task_id = window.onetrt_taskdata.task_id; + // Default variables + var startTime = new Date(), // Time of first request + lastAjaxTime = 0, // Time of last ajax request + doneItems = 0, // Done items + retry = 0, // Actual number of retries + maxRetry = 5, // Number of maximum retries in a row before the script terminates + asyncUpdThreshold = 4, // If sendRequest does not deliver update in n seconds the async status update will be performed + liveTimeCounter = 0, // This variable contains the actual number for live time meter + terminated = false; // Status of script + // DOM elements cache + var logElem = $("#progresslog"), // Log element + remainingElem = $("#progressbar .remaining span"), // Remaining elements number + estTimeElem = $("#progressbar .estimated span"), // Estimated time element + percentElem = $("#progressbar .percent"), // Percentage of elements done + progressbarElem = $("#progressbar .bar" ), // The progressbar itself + nonce = $("input[name='onetrt_nonce']").val(); // Nonce field to keep the ajax safe from arbitrary queries + // AJAX query holders + var actualAjaxWrap = null, // Variable for main ajax so it can be modified on flow. + actualAsyncUpd = null; // Variable for async status updater ajax query + + // Log a message + log = function (text,classes) { + if (typeof classes != "undefined" && classes.match(/terminated/i)) terminated = true; + logElem.prepend('
            • '+text+'
            • '); + } + + // Convert milisecs to "human" time + humanTime = function(seconds) { + if (typeof seconds === "undefined") return onetrt_optspage.time_infinity; + if (typeof seconds !== "number") seconds = parseInt(seconds); + if (seconds < 0) seconds = 0; + + var tryVal = Math.floor(seconds / 31536000); + if (tryVal > 1) return tryVal + onetrt_optspage.time_year; + + tryVal = Math.floor(seconds / 2592000); + if (tryVal > 1) return tryVal + onetrt_optspage.time_month; + + tryVal = Math.floor(seconds / 86400); + if (tryVal >= 1) return tryVal + onetrt_optspage.time_day; + + tryVal = Math.floor(seconds / 3600); + if (tryVal >= 1) return tryVal + onetrt_optspage.time_hour; + + tryVal = Math.floor(seconds / 60); + if (tryVal > 1) return tryVal + onetrt_optspage.time_min; + + return Math.floor(seconds) + onetrt_optspage.time_sec; + } + + // Get remaining time + getRemainingTime = function () { + var percent = (doneItems / item_num) * 100, + elapsed = ((new Date()).getTime() - startTime.getTime())/1000, + remaining = ((elapsed/doneItems) * (item_num-doneItems)); + if (remaining < 0) remaining = 0; + return {'percent':percent,'remaining':remaining}; + } + + /* + This function in disabled or the time being + // This function does nothing else than decreasing time in UI in each second so user will know that the scrtipt actually working. + makeTimeLive = function () { + var t = getRemainingTime(); + if (t.remaining > 0 && !terminated) estTimeElem.html( humanTime(t.remaining-liveTimeCounter) ); + liveTimeCounter++; + } + */ + + // Update the UI elements + updateProgress = function () { + var t = getRemainingTime(); + + estTimeElem.html( humanTime(t.remaining) ); + remainingElem.html(item_num-doneItems); + percentElem.html( Math.ceil(t.percent) + "%"); + progressbarElem.progressbar( "option", "value", t.percent ); + } + + // Do a request which will update images + sendRequest = function () { + if (terminated) return; // Do nothing if script is terminated + if (retry >= maxRetry) { + log(onetrt_optspage.error_terminated,"terminated"); + lockUnload = null; + } else if (item_num <= doneItems) { + log(onetrt_optspage.success_done,"done"); + lockUnload = null; + terminated = true; + if (window.succes_redir.succes_redir == "1") window.location.href = $("input[name='onetrt_success']").val(); + } else { + lastAjaxTime = (new Date()).getTime(); + + actualAjaxWrap = $.ajax(ajaxurl+"?action=onetrt&nonce="+nonce+"&task_id="+task_id,{ + cache: false, // turn off browser cache + dataType: "json", // Answer should be in JSON + type: "get", // Query type is get, not post + timeout: 60*1000, // Server side script will automatically terminate process in 60 seconds so do this script on client side. + + // Get those errors + error: function (a,type) { + // Sometimes the query fails because timeout or abort by the code itself which requires different handle + if (type == "timeout" || type == "abort") { + log(onetrt_optspage.error_intended,"error"); + } else { + log(onetrt_optspage.error_retrissue.replace(/\{retryNum\}/i,maxRetry-retry),"error"); + retry++; // increase retry counter + } + sendRequest(); // request retry + }, + + // Hell yeah, the request was completed, cool. + success: function (data,b,reguest) { resolveResponse(data,"main"); } + }); + } + } + + // Helper function to fetch actual status. + asyncStatusUpdate = function () { + if (terminated || lastAjaxTime < 1) return; // Do nothing if script is terminated + var atm = (new Date()).getTime(); + if (lastAjaxTime > atm - (asyncUpdThreshold*1000) ) return; + else { + lastAjaxTime = (new Date()).getTime(); // Update last ajax time to prevent async status update from run + + actualAsyncUpd = $.ajax(ajaxurl+"?action=onetrt&nonce="+nonce+"&task_id="+task_id+"&status_update=1",{ + cache: false, // turn off browser cache + dataType: "json", // Answer should be in JSON + type: "get", // Query type is get, not post + timeout: 60*1000, // Server side script will automatically terminate process in 60 seconds so do this script on client side. + + // This is not the best but because status update error is not cardinal issue keep it low profile. In short: Say nothing! + error: function (a,type) { }, + // Send response data to resolver. + success: function (data) { resolveResponse(data,"async"); } + }); + } + } + + // Resolve response data and update every single variable + resolveResponse = function (data,mode) { + if (terminated) return; + // Check if response if a timeout error. + if (typeof data === "string" && data.toLowerCase().match(/Maximum\ execution\ time/i)) { + + // Check if data code is missing which is similar to fatal error + } else if (typeof data.code === "undefined") { + log(onetrt_optspage.error_serverside,"terminated"); + // Check if + } else if (data.code != 200) { + log(onetrt_optspage.error_ecode.replace(/\{errorCode\}/,data.code),"terminated"); + } else { + // Clean rerty counter + if (retry > 0) log(onetrt_optspage.notice_issueresolved); + retry=0; // set retry to zero. + // Set "live time variable" to zero + liveTimeCounter=0; + + // Also, update client side task id + task_id = data.task_meta.id; + + if (mode == "main") { + // Output updated files + if (data.files_done.length > 0) { + var fileList = []; + for (var i=0;i"+data.files_done[i].name+"" ); + log( onetrt_optspage.success_thumbs_done.replace(/\{imageList\}/i,fileList.join(", ")) ); + } + + // Increase done item counter + doneItems = parseInt(data.task_meta.items_done); + // request next item + sendRequest(); + } else { + log(onetrt_optspage.success_update_itemsdone.replace(/\{fileNum\}/i,data.task_meta.items_done-doneItems)); + doneItems = parseInt(data.task_meta.items_done); + } + // Update progress + updateProgress(); + } + } + + // Initalize the stuff + // If there is basically no items + if (item_num < 1) { + alert(onetrt_optspage.error_noimage); + lockUnload = null; + $("#onetrt-cancel").trigger("click"); + // Otherwise let's get the party started + } else { + log(onetrt_optspage.notice_started); + sendRequest(); + setInterval(makeTimeLive,1000); + setInterval(asyncStatusUpdate,1000); + } + } + + /********************** + * Custom dim editor + **********************/ + customDim = function () { + var dim = $("#onetrt-customdim"); + var active = false; + + // Add actions to actual custom dimension editor elements + bind = function () { + if (dim.hasClass("appended")) return; + dim.find("a").click(function (e) { + execute(this.href); + return false; + }); + dim.find("form.editor").submit(function (e) { + execute(this.action, $(this).serialize() + "&" + (dim.find("input[name='save_thumb']").length > 0 ? "save_thumb=1" : "update_thumb=1") ); + return false; + }); + } + + // Execute panel update/post + execute = function (url,post) { + if (active == true) return; + active = true; + dim.addClass("load"); + $.post(url,post,function (data) { + drop = $(data); + dim.children(".inside").html(drop.find("#onetrt-customdim").children(".inside")); + dim.removeClass("load appended"); + active = false; + bind(); + }); + } + + bind(); + } + + // Init + customDim(); + + $("#progressbar .bar" ).progressbar({ value: 0 }); + $("#onetrt-start").click(function (e) { + e.preventDefault(); + $("#onetRegenThumb .datadisplay").addClass("processing"); + $(this).prop({disabled:"disabled"}); + $("#onetrt-reset").addClass("hidden"); + $("#onetrt-cancel").removeClass("hidden"); + lockUnload = true; + runProcess(); // Run regenrating process + }); + + // Prevent page from unload + $(window).on('beforeunload', function(){ + if (lockUnload == true) { + return onetrt_optspage.unload_confirm; + } + }); + + // Check if URL should be updated + if (window.onetrt_taskdata.update_url.length > 0 && window.onetrt_taskdata.task_id > 0) { + if (typeof window.history !== "undefined") + window.history.pushState(null, null, window.onetrt_taskdata.update_url); + } + + // Hide message box after a while + setTimeout(function () { $("#message.fade").fadeOut(300); }, 10000); +}); \ No newline at end of file diff --git a/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/post-actions.js b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/post-actions.js new file mode 100644 index 0000000..d20b481 --- /dev/null +++ b/src/wp-content/plugins/onet-regenerate-thumbnails/assets/js/post-actions.js @@ -0,0 +1,26 @@ +jQuery(document).ready(function () { + var $ = jQuery; // I don't want to waste space. + + // Script for bulk actions in listers. + if (onetrt_postaction.is_lister == "1" && onetrt_postaction.bulk_action == "1") { + jQuery('
              \n"; + endif; + + //if no saps - add table + if(empty($arrSaps)): + ?>settings->getSap($sapKey,$sectionKey); + + //draw sap end + if($sapKey != 0): ?> +
              + +
              " class=""> + +

              +
              +
              " class="divSap" > + + drawHrRow($setting); + break; + case UniteSettingsRev::TYPE_STATIC_TEXT: + $this->drawTextRow($setting); + break; + default: + $this->drawSettingRow($setting); + break; + } + endforeach; + endif; + ?> +
              + + "; + echo "
              \n"; //close last section div + endif; + + } + + + //----------------------------------------------------------------------------------------------- + // draw sections menu + public function drawSections($activeSection=0){ + if(!empty($this->arrSections)): + echo "
                "; + for($i=0;$iarrSections);$i++): + $class = ""; + if($activeSection == $i) $class="class='selected'"; + $text = $this->arrSections[$i]["text"]; + echo '
              • '.$text.'
              • '; + endfor; + echo "
              "; + endif; + + //call custom draw function: + if($this->customFunction_afterSections) call_user_func($this->customFunction_afterSections); + } + + /** + * + * draw settings function + * @param $drawForm draw the form yes / no + */ + public function draw($formID=null,$drawForm = false){ + if(empty($formID)) + UniteFunctionsRev::throwError("The form ID can't be empty. you must provide it"); + + $this->formID = $formID; + + ?> +
              + +
              + drawSettings() ?> +
              + drawSettings(); + + ?> +
              + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/inc_php/framework/settings_product_sidebar.class.php b/src/wp-content/plugins/revslider/inc_php/framework/settings_product_sidebar.class.php new file mode 100644 index 0000000..93505c9 --- /dev/null +++ b/src/wp-content/plugins/revslider/inc_php/framework/settings_product_sidebar.class.php @@ -0,0 +1,1017 @@ +defaultTextClass = self::INPUT_CLASS_SHORT; + } + + + /** + * + * set default text class + */ + public function setDefaultInputClass($defaultClass){ + $this->defaultTextClass = $defaultClass; + } + + + /** + * + * add buggon + */ + public function addButton($title,$id,$class = "button-secondary"){ + + $button = array( + "title"=>$title, + "id"=>$id, + "class"=>$class + ); + + $this->arrButtons[] = $button; + } + + + + /** + * + * set add class for the main div + */ + public function setAddClass($addClass){ + $this->addClass = $addClass; + } + + + //----------------------------------------------------------------------------------------------- + //draw text as input + protected function drawTextInput($setting) { + $disabled = ""; + $style=""; + if(isset($setting["style"])) + $style = "style='".$setting["style"]."'"; + if(isset($setting["disabled"])) + $disabled = 'disabled="disabled"'; + + $class = UniteFunctionsRev::getVal($setting, "class",$this->defaultTextClass); + + //modify class: + switch($class){ + case "normal": + case "regular": + $class = self::INPUT_CLASS_NORMAL; + break; + case "long": + $class = self::INPUT_CLASS_LONG; + break; + case "link": + $class = self::INPUT_CLASS_LINK; + break; + } + + if(!empty($class)) + $class = "class='$class'"; + + $attribs = UniteFunctionsRev::getVal($setting, "attribs"); + + ?> + id="" name="" value="" /> + defaultTextClass); + + //modify class: + switch($class){ + case "normal": + case "regular": + $class = self::INPUT_CLASS_NORMAL; + break; + case "long": + $class = self::INPUT_CLASS_LONG; + break; + case "link": + $class = self::INPUT_CLASS_LINK; + break; + } + + if(!empty($class)) + $class = "class='$class'"; + + $attribs = UniteFunctionsRev::getVal($setting, "attribs"); + $values = $setting["value"]; + if(!empty($values) && is_array($values)){ + foreach($values as $key => $value){ + ?> +
              + id="" name="[]" value="" /> " class="remove_multiple_text"> +
              + +
              + id="" name="[]" value="" /> " class="remove_multiple_text"> +
              + + +
              _TEMPLATE" style="display: none;"> +
              + id="##ID##" name="##NAME##[]" value="" /> +
              +
              + + + + " name="" value="" > + drawTextInput($setting); + break; + case UniteSettingsRev::TYPE_COLOR: + $this->drawColorPickerInput($setting); + break; + case UniteSettingsRev::TYPE_SELECT: + $this->drawSelectInput($setting); + break; + case UniteSettingsRev::TYPE_CHECKBOX: + $this->drawCheckboxInput($setting); + break; + case UniteSettingsRev::TYPE_RADIO: + $this->drawRadioInput($setting); + break; + case UniteSettingsRev::TYPE_TEXTAREA: + $this->drawTextAreaInput($setting); + break; + case UniteSettingsRev::TYPE_CUSTOM: + $this->drawCustom($setting); + break; + case UniteSettingsRev::TYPE_BUTTON: + $this->drawButtonSetting($setting); + break; + case UniteSettingsRev::TYPE_MULTIPLE_TEXT: + $this->drawMultipleText($setting); + break; + default: + throw new Exception("wrong setting type - ".$setting["type"]); + break; + } + } + + //----------------------------------------------------------------------------------------------- + //draw advanced order box + protected function drawOrderbox_advanced($setting){ + + $items = $setting["items"]; + if(!is_array($items)) + $this->throwError("Orderbox error - the items option must be array (items)"); + + //get arrItems modify items by saved value + + if(!empty($setting["value"]) && + getType($setting["value"]) == "array" && + count($setting["value"]) == count($items)): + + $savedItems = $setting["value"]; + + //make assoc array by id: + $arrAssoc = array(); + foreach($items as $item) + $arrAssoc[$item[0]] = $item[1]; + + foreach($savedItems as $item){ + $value = $item["id"]; + $text = $value; + if(isset($arrAssoc[$value])) + $text = $arrAssoc[$value]; + $arrItems[] = array($value,$text,$item["enabled"]); + } + else: + $arrItems = $items; + endif; + + ?> +
                "> + 1)?$arrItem[1]:$arrItem[0]; + $enabled = (count($arrItem)>2)?$arrItem[2]:true; + break; + default: + $this->throwError("Error in setting:".$setting.". unknown item type."); + break; + } + $checkboxClass = $enabled ? "div_checkbox_on" : "div_checkbox_off"; + + ?> +
              • +
                +
                +
                +
                +
              • + +
              + $value,"text"=>$text); + } + } //get arrItems only from original items + else{ + foreach($items as $value=>$text) + $arrItems[] = array("value"=>$value,"text"=>$text); + } + + + ?> +
                "> + +
              • +
                +
                +
              • + +
              + + " value="" > + + + + + $text): + $counter++; + $radioID = $id."_".$counter; + $checked = ""; + if($value == $setting["value"]) $checked = " checked"; + + $disabled = ""; + if($isDisabled == true) + $disabled = 'disabled="disabled"'; + + ?> +
              + " /> + +
              + +
              + + " class="inputCheckbox" name="" /> + arrControls[$setting["name"]])) $className = "control"; + $class = ""; + if($className != "") $class = "class='".$className."'"; + + $disabled = ""; + if(isset($setting["disabled"])) + $disabled = 'disabled="disabled"'; + + ?> + + + + +
            • _row" class="hrrow"> +
              +
            • + {$text}"; + + //set settings text width: + $textWidth = ""; + if(isset($setting["textWidth"])) $textWidth = 'width="'.$setting["textWidth"].'"'; + + $description = UniteFunctionsRev::getVal($setting, "description"); + $description = __($description,REVSLIDER_TEXTDOMAIN); + + $unit = UniteFunctionsRev::getVal($setting, "unit"); + $unit = __($unit,REVSLIDER_TEXTDOMAIN); + + $required = UniteFunctionsRev::getVal($setting, "required"); + + $addHtml = UniteFunctionsRev::getVal($setting, UniteSettingsRev::PARAM_ADDTEXT); + $addHtmlBefore = UniteFunctionsRev::getVal($setting, UniteSettingsRev::PARAM_ADDTEXT_BEFORE_ELEMENT); + + + //set if draw text or not. + $toDrawText = true; + if($setting["type"] == UniteSettingsRev::TYPE_BUTTON || $setting["type"] == UniteSettingsRev::TYPE_MULTIPLE_TEXT) + $toDrawText = false; + + $settingID = $setting["id"]; + $attribsText = UniteFunctionsRev::getVal($setting, "attrib_text"); + + $info = ($toDrawText == true && $description !== '') ? '
              i
              ' : ''; + + ?> +
            • > + + +
              >
              + + + +
              + + +
              + drawInputs($setting);?> +
              + +
              + + +
              *
              + + +
              + +
              +
            • + drawShadowTypes($setting['value']); + } + } + + /** + * + * insert settings into saps array + */ + private function groupSettingsIntoSaps(){ + $arrSections = $this->settings->getArrSections(); + $arrSaps = $arrSections[0]["arrSaps"]; + $arrSettings = $this->settings->getArrSettings(); + + //group settings by saps + foreach($arrSettings as $key=>$setting){ + + $sapID = $setting["sap"]; + + if(isset($arrSaps[$sapID]["settings"])) + $arrSaps[$sapID]["settings"][] = $setting; + else + $arrSaps[$sapID]["settings"] = array($setting); + } + return($arrSaps); + } + + /** + * + * draw buttons that defined earlier + */ + private function drawButtons(){ + foreach($this->arrButtons as $key=>$button){ + if($key>0) + echo ""; + echo UniteFunctionsRev::getHtmlLink("#", $button["title"],$button["id"],$button["class"]); + } + } + + /** + * + * draw some setting, can be setting array or name + */ + public function drawSetting($setting,$state = null){ + if(gettype($setting) == "string") + $setting = $this->settings->getSettingByName($setting); + + switch($state){ + case "hidden": + $setting["hidden"] = true; + break; + } + + switch($setting["type"]){ + case UniteSettingsRev::TYPE_HR: + $this->drawHrRow($setting); + break; + case UniteSettingsRev::TYPE_STATIC_TEXT: + $this->drawTextRow($setting); + break; + default: + $this->drawSettingRow($setting); + break; + } + } + + /** + * + * draw setting by bulk names + */ + public function drawSettingsByNames($arrSettingNames,$state=null){ + if(gettype($arrSettingNames) == "string") + $arrSettingNames = explode(",",$arrSettingNames); + + foreach($arrSettingNames as $name) + $this->drawSetting($name,$state); + } + + + /** + * + * draw all settings + */ + public function drawSettings(){ + $this->prepareToDraw(); + $this->drawHeaderIncludes(); + + + $arrSaps = $this->groupSettingsIntoSaps(); + + $class = "postbox unite-postbox"; + if(!empty($this->addClass)) + $class .= " ".$this->addClass; + + //draw wrapper + echo "
              "; + + //draw settings - advanced - with sections + foreach($arrSaps as $key=>$sap): + + //set accordion closed + $style = ""; + if($this->isAccordion == false){ + $h3Class = "class='no-accordion'"; + }else{ + $h3Class = ""; + if($key>0){ + $style = "style='display:none;'"; + $h3Class = "class='box_closed'"; + } + } + + $text = $sap["text"]; + $text = __($text,REVSLIDER_TEXTDOMAIN); + + ?> +
              +

              > + + isAccordion == true):?> +
              + + + +

              + +
              > +
                + drawSetting($setting); + } + + ?> +
              + + arrButtons)){ + ?> +
              +
              + drawButtons(); + ?> +
              +
              + + +
              +
              +
              + "; //wrapper close + } + + + //----------------------------------------------------------------------------------------------- + // draw sections menu + public function drawSections($activeSection=0){ + if(!empty($this->arrSections)): + echo "
                "; + for($i=0;$iarrSections);$i++): + $class = ""; + if($activeSection == $i) $class="class='selected'"; + $text = $this->arrSections[$i]["text"]; + echo '
              • '.$text.'
              • '; + endfor; + echo "
              "; + endif; + + //call custom draw function: + if($this->customFunction_afterSections) call_user_func($this->customFunction_afterSections); + } + + /** + * + * init accordion + */ + private function putAccordionInit(){ + ?> + + isAccordion = $activate; + } + + + /** + * + * draw settings function + */ + public function draw($formID=null){ + if(empty($formID)) + UniteFunctionsRev::throwError("You must provide formID to side settings."); + + $this->formID = $formID; + + if(!empty($formID)){ + ?> +
              + drawSettings() ?> +
              + drawSettings(); + + if($this->isAccordion == true) + $this->putAccordionInit(); + + } + + + /** + * + * draw shadow types function + */ + public function drawShadowTypes($current){ + ?> + + + +
              " style="display:none;"> + +
              example
              + +
              +

              +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              Font
              + +
              +
              +
              + +
              +
              + +
              +
              +
              +
              +
              +
              +
              +
              +
              +
              + +
              + +
              Background
              + + + +
              + +
              Border
              + + + + +
              + +
              + + +
              +
              +
              +
              +
              +
              +
              +
              +
               
              +
              +

              +
              + +
              +
              +
              + +
              " style="display:none;"> +

              "'; + _e(' or save the styles as a new class?',REVSLIDER_TEXTDOMAIN)?>

              +
              + +
              " style="display:none;"> +

              +
              + +

              +
              + + +
              " style="display:none;"> +
              +

              +
              + +
              +

              +
              + +
              +
              +
              + +
              " style="display:none;"> +

              +
              + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/inc_php/framework/wpml.class.php b/src/wp-content/plugins/revslider/inc_php/framework/wpml.class.php new file mode 100644 index 0000000..7829172 --- /dev/null +++ b/src/wp-content/plugins/revslider/inc_php/framework/wpml.class.php @@ -0,0 +1,183 @@ +get_active_languages(); + + $response = array(); + + if($getAllCode == true) + $response["all"] = __("All Languages",REVSLIDER_TEXTDOMAIN); + + foreach($arrLangs as $code=>$arrLang){ + $name = $arrLang["native_name"]; + $response[$code] = $name; + } + + return($response); + } + + /** + * + * get assoc array of lang codes + */ + public static function getArrLangCodes($getAllCode = true){ + + $arrCodes = array(); + + if($getAllCode == true) + $arrCodes["all"] = "all"; + + self::validateWpmlExists(); + $wpml = new SitePress(); + $arrLangs = $wpml->get_active_languages(); + foreach($arrLangs as $code=>$arr){ + $arrCodes[$code] = $code; + } + + return($arrCodes); + } + + + /** + * + * check if all languages exists in the given langs array + */ + public static function isAllLangsInArray($arrCodes){ + $arrAllCodes = self::getArrLangCodes(); + $diff = array_diff($arrAllCodes, $arrCodes); + return(empty($diff)); + } + + + /** + * + * get langs with flags menu list + * @param $props + */ + public static function getLangsWithFlagsHtmlList($props = "",$htmlBefore = ""){ + $arrLangs = self::getArrLanguages(); + if(!empty($props)) + $props = " ".$props; + + $html = ""."\n"; + $html .= $htmlBefore; + + foreach($arrLangs as $code=>$title){ + $urlIcon = self::getFlagUrl($code); + + $html .= "
            • "."\n"; + $html .= " $title"."\n"; + $html .= "
            • "."\n"; + } + + $html .= "
            "; + + + return($html); + } + + + /** + * get flag url + */ + public static function getFlagUrl($code){ + + self::validateWpmlExists(); + $wpml = new SitePress(); + + if(empty($code) || $code == "all") + $url = ICL_PLUGIN_URL . '/res/img/icon16.png'; + else + $url = $wpml->get_flag_url($code); + + //default: show all + if(empty($url)) + $url = ICL_PLUGIN_URL . '/res/img/icon16.png'; + + return($url); + } + + + /** + /* get language details by code + */ + private function getLangDetails($code){ + global $wpdb; + + $details = $wpdb->get_row("SELECT * FROM ".$wpdb->prefix."icl_languages WHERE code='$code'"); + + if(!empty($details)) + $details = (array)$details; + + return($details); + } + + + /** + * + * get language title by code + */ + public static function getLangTitle($code){ + + $langs = self::getArrLanguages(); + + if($code == "all") + return(__("All Languages", REVSLIDER_TEXTDOMAIN)); + + if(array_key_exists($code, $langs)) + return($langs[$code]); + + $details = self::getLangDetails($code); + if(!empty($details)) + return($details["english_name"]); + + return(""); + } + + + /** + * + * get current language + */ + public static function getCurrentLang(){ + self::validateWpmlExists(); + $wpml = new SitePress(); + + if(is_admin()) + $lang = $wpml->get_default_language(); + else + $lang = UniteFunctionsWPRev::getCurrentLangCode(); + + return($lang); + } + + } \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/inc_php/framework/zip.class.php b/src/wp-content/plugins/revslider/inc_php/framework/zip.class.php new file mode 100644 index 0000000..1fc4595 --- /dev/null +++ b/src/wp-content/plugins/revslider/inc_php/framework/zip.class.php @@ -0,0 +1,97 @@ +zip->addEmptyDir($rel_path); + + $files = scandir($path); + foreach($files as $file){ + if($file == "." || $file == ".." || $file == ".svn") + continue; + $filepath = $path."/".$file; + $this->addItem($basePath, $filepath); + } + } + else{ //file + if(!file_exists($path)) + throwError("filepath: '$path' don't exists, can't zip"); + + $this->zip->addFile($path,$rel_path); + } + } + + /** + * + * make zip archive + * if exists additional paths, add additional items to the zip + */ + public function makeZip($srcPath, $zipFilepath,$additionPaths = array()){ + + if(!is_dir($srcPath)) + throwError("The path: '$srcPath' don't exists, can't zip"); + + $this->zip = new ZipArchive; + $success = $this->zip->open($zipFilepath, ZipArchive::CREATE); + + if($success == false) + throwError("Can't create zip file: $zipFilepath"); + + $this->addItem($srcPath,$srcPath); + + if(gettype($additionPaths) != "array") + throwError("Wrong additional paths variable."); + + + //add additional paths + if(!empty($additionPaths)) + foreach($additionPaths as $path){ + if(!is_dir($path)) + throwError("Path: $path not found, can't zip"); + $this->addItem($path, $path); + } + + $this->zip->close(); + } + + /** + * + * Extract zip archive + */ + public function extract($src, $dest){ + $zip = new ZipArchive; + if ($zip->open($src)===true){ + $zip->extractTo($dest); + $zip->close(); + return true; + } + return false; + } + + + } + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/inc_php/index.php b/src/wp-content/plugins/revslider/inc_php/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/inc_php/revslider_globals.class.php b/src/wp-content/plugins/revslider/inc_php/revslider_globals.class.php new file mode 100644 index 0000000..74775a9 --- /dev/null +++ b/src/wp-content/plugins/revslider/inc_php/revslider_globals.class.php @@ -0,0 +1,43 @@ + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/inc_php/revslider_operations.class.php b/src/wp-content/plugins/revslider/inc_php/revslider_operations.class.php new file mode 100644 index 0000000..31bb561 --- /dev/null +++ b/src/wp-content/plugins/revslider/inc_php/revslider_operations.class.php @@ -0,0 +1,1146 @@ +getArrSlidersWithSlidesShort(RevSlider::SLIDER_TYPE_TEMPLATE); + $arrOutput = $arrOutput + $arrSlides; //union arrays + + $settings->addSelect("slide_template", $arrOutput, __("Choose Slide Template",REVSLIDER_TEXTDOMAIN),"default"); + + /* + $params = array("class"=>"textbox_small","description"=>"Overwrite the global excerpt words limit option for this post"); + $settings->addTextBox("revslider_excerpt_limit", "", "Excerpt Words Limit",$params); + $params = array("description"=>"The youtube ID, example: 9bZkp7q19f0"); + $settings->addTextBox("youtube_id", "", "Youtube ID", $params); + $params = array("description"=>"The youtube ID, example: 18554749"); + $settings->addTextBox("vimeo_id", "", "Vimeo ID",$params); + */ + + return($settings); + } + + + /** + * + * get names and titles of the wildcards + */ + public static function getWildcardsSettingNames(){ + $settings = $this->getWildcardsSettings(); + $arrNames = $settings->getArrSettingNamesAndTitles(); + return($arrNames); + } + + /** + * + * get wildcard values of the post + */ + public static function getPostWilcardValues($postID){ + $settings = RevOperations::getWildcardsSettings(); + $settings->updateValuesFromPostMeta($postID); + $arrValues = $settings->getArrValues(); + return($arrValues); + } + + + /** + * + * get button classes + */ + public function getButtonClasses(){ + + $arrButtons = array( + "red"=>"Red Button", + "green"=>"Green Button", + "blue"=>"Blue Button", + "orange"=>"Orange Button", + "darkgrey"=>"Darkgrey Button", + "lightgrey"=>"Lightgrey Button", + ); + + return($arrButtons); + } + + + /** + * + * get easing functions array + */ + public function getArrEasing(){ //true + + $arrEasing = array( + "Linear.easeNone" => "Linear.easeNone", + "Power0.easeIn" => "Power0.easeIn (linear)", + "Power0.easeInOut" => "Power0.easeInOut (linear)", + "Power0.easeOut" => "Power0.easeOut (linear)", + "Power1.easeIn" => "Power1.easeIn", + "Power1.easeInOut" => "Power1.easeInOut", + "Power1.easeOut" => "Power1.easeOut", + "Power2.easeIn" => "Power2.easeIn", + "Power2.easeInOut" => "Power2.easeInOut", + "Power2.easeOut" => "Power2.easeOut", + "Power3.easeIn" => "Power3.easeIn", + "Power3.easeInOut" => "Power3.easeInOut", + "Power3.easeOut" => "Power3.easeOut", + "Power4.easeIn" => "Power4.easeIn", + "Power4.easeInOut" => "Power4.easeInOut", + "Power4.easeOut" => "Power4.easeOut", + "Quad.easeIn" => "Quad.easeIn (same as Power1.easeIn)", + "Quad.easeInOut" => "Quad.easeInOut (same as Power1.easeInOut)", + "Quad.easeOut" => "Quad.easeOut (same as Power1.easeOut)", + "Cubic.easeIn" => "Cubic.easeIn (same as Power2.easeIn)", + "Cubic.easeInOut" => "Cubic.easeInOut (same as Power2.easeInOut)", + "Cubic.easeOut" => "Cubic.easeOut (same as Power2.easeOut)", + "Quart.easeIn" => "Quart.easeIn (same as Power3.easeIn)", + "Quart.easeInOut" => "Quart.easeInOut (same as Power3.easeInOut)", + "Quart.easeOut" => "Quart.easeOut (same as Power3.easeOut)", + "Quint.easeIn" => "Quint.easeIn (same as Power4.easeIn)", + "Quint.easeInOut" => "Quint.easeInOut (same as Power4.easeInOut)", + "Quint.easeOut" => "Quint.easeOut (same as Power4.easeOut)", + "Strong.easeIn" => "Strong.easeIn (same as Power4.easeIn)", + "Strong.easeInOut" => "Strong.easeInOut (same as Power4.easeInOut)", + "Strong.easeOut" => "Strong.easeOut (same as Power4.easeOut)", + "Back.easeIn" => "Back.easeIn", + "Back.easeInOut" => "Back.easeInOut", + "Back.easeOut" => "Back.easeOut", + "Bounce.easeIn" => "Bounce.easeIn", + "Bounce.easeInOut" => "Bounce.easeInOut", + "Bounce.easeOut" => "Bounce.easeOut", + "Circ.easeIn" => "Circ.easeIn", + "Circ.easeInOut" => "Circ.easeInOut", + "Circ.easeOut" => "Circ.easeOut", + "Elastic.easeIn" => "Elastic.easeIn", + "Elastic.easeInOut" => "Elastic.easeInOut", + "Elastic.easeOut" => "Elastic.easeOut", + "Expo.easeIn" => "Expo.easeIn", + "Expo.easeInOut" => "Expo.easeInOut", + "Expo.easeOut" => "Expo.easeOut", + "Sine.easeIn" => "Sine.easeIn", + "Sine.easeInOut" => "Sine.easeInOut", + "Sine.easeOut" => "Sine.easeOut", + "SlowMo.ease" => "SlowMo.ease", + //add old easings + "easeOutBack" => "easeOutBack", + "easeInQuad" => "easeInQuad", + "easeOutQuad" => "easeOutQuad", + "easeInOutQuad" => "easeInOutQuad", + "easeInCubic" => "easeInCubic", + "easeOutCubic" => "easeOutCubic", + "easeInOutCubic" => "easeInOutCubic", + "easeInQuart" => "easeInQuart", + "easeOutQuart" => "easeOutQuart", + "easeInOutQuart" => "easeInOutQuart", + "easeInQuint" => "easeInQuint", + "easeOutQuint" => "easeOutQuint", + "easeInOutQuint" => "easeInOutQuint", + "easeInSine" => "easeInSine", + "easeOutSine" => "easeOutSine", + "easeInOutSine" => "easeInOutSine", + "easeInExpo" => "easeInExpo", + "easeOutExpo" => "easeOutExpo", + "easeInOutExpo" => "easeInOutExpo", + "easeInCirc" => "easeInCirc", + "easeOutCirc" => "easeOutCirc", + "easeInOutCirc" => "easeInOutCirc", + "easeInElastic" => "easeInElastic", + "easeOutElastic" => "easeOutElastic", + "easeInOutElastic" => "easeInOutElastic", + "easeInBack" => "easeInBack", + "easeInOutBack" => "easeInOutBack", + "easeInBounce" => "easeInBounce", + "easeOutBounce" => "easeOutBounce", + "easeInOutBounce" => "easeInOutBounce" + ); + + return($arrEasing); + } + + /** + * + * get arr end easing + */ + public function getArrEndEasing(){ + $arrEasing = $this->getArrEasing(); + $arrEasing = array_merge(array("nothing" => "No Change"),$arrEasing); + + return($arrEasing); + } + + /** + * + * get transition array + */ + public function getArrTransition($premium = false){ + + $arrTransition = array( + "notselectable1"=>"RANDOM TRANSITIONS", + "random-static"=>"Random Flat", + "random-premium"=>"Random Premium", + "random"=>"Random Flat and Premium", + "notselectable2"=>"SLIDING TRANSITIONS", + "slideup"=>"Slide To Top", + "slidedown"=>"Slide To Bottom", + "slideright"=>"Slide To Right", + "slideleft"=>"Slide To Left", + "slidehorizontal"=>"Slide Horizontal (depending on Next/Previous)", + "slidevertical"=>"Slide Vertical (depending on Next/Previous)", + "boxslide"=>"Slide Boxes", + "slotslide-horizontal"=>"Slide Slots Horizontal", + "slotslide-vertical"=>"Slide Slots Vertical", + "notselectable3"=>"FADE TRANSITIONS", + "notransition"=>"No Transition", + "fade"=>"Fade", + "boxfade"=>"Fade Boxes", + "slotfade-horizontal"=>"Fade Slots Horizontal", + "slotfade-vertical"=>"Fade Slots Vertical", + "fadefromright"=>"Fade and Slide from Right", + "fadefromleft"=>"Fade and Slide from Left", + "fadefromtop"=>"Fade and Slide from Top", + "fadefrombottom"=>"Fade and Slide from Bottom", + "fadetoleftfadefromright"=>"Fade To Left and Fade From Right", + "fadetorightfadefromleft"=>"Fade To Right and Fade From Left", + "fadetotopfadefrombottom"=>"Fade To Top and Fade From Bottom", + "fadetobottomfadefromtop"=>"Fade To Bottom and Fade From Top", + "notselectable4"=>"PARALLAX TRANSITIONS", + "parallaxtoright"=>"Parallax to Right", + "parallaxtoleft"=>"Parallax to Left", + "parallaxtotop"=>"Parallax to Top", + "parallaxtobottom"=>"Parallax to Bottom", + "notselectable5"=>"ZOOM TRANSITIONS", + "scaledownfromright"=>"Zoom Out and Fade From Right", + "scaledownfromleft"=>"Zoom Out and Fade From Left", + "scaledownfromtop"=>"Zoom Out and Fade From Top", + "scaledownfrombottom"=>"Zoom Out and Fade From Bottom", + "zoomout"=>"ZoomOut", + "zoomin"=>"ZoomIn", + "slotzoom-horizontal"=>"Zoom Slots Horizontal", + "slotzoom-vertical"=>"Zoom Slots Vertical", + "notselectable6"=>"CURTAIN TRANSITIONS", + "curtain-1"=>"Curtain from Left", + "curtain-2"=>"Curtain from Right", + "curtain-3"=>"Curtain from Middle", + "notselectable7"=>"PREMIUM TRANSITIONS", + "3dcurtain-horizontal"=>"3D Curtain Horizontal", + "3dcurtain-vertical"=>"3D Curtain Vertical", + "cube"=>"Cube Vertical", + "cube-horizontal"=>"Cube Horizontal", + "incube"=>"In Cube Vertical", + "incube-horizontal"=>"In Cube Horizontal", + "turnoff"=>"TurnOff Horizontal", + "turnoff-vertical"=>"TurnOff Vertical", + "papercut"=>"Paper Cut", + "flyin"=>"Fly In" + ); + + + return($arrTransition); + } + + /** + * + * get random transition + */ + public static function getRandomTransition(){ + $arrTrans = self::getArrTransition(); + unset($arrTrans["random"]); + $trans = array_rand($arrTrans); + + return($trans); + } + + /** + * + * get default transition + */ + public static function getDefaultTransition(){ + $arrValues = self::getGeneralSettingsValues(); + return 'random'; + //return UniteFunctionsRev::getVal($arrValues, "slide_transition_default", "random"); + } + + /** + * + * get animations array + */ + public static function getArrAnimations($all = true){ + + $arrAnimations = array( + "tp-fade"=>"Fade", + "sft"=>"Short from Top", + "sfb"=>"Short from Bottom", + "sfr"=>"Short from Right", + "sfl"=>"Short from Left", + "lft"=>"Long from Top", + "lfb"=>"Long from Bottom", + "lfr"=>"Long from Right", + "lfl"=>"Long from Left", + "skewfromright"=>"Skew From Long Right", + "skewfromleft"=>"Skew From Long Left", + "skewfromleftshort"=>"Skew From Short Right", + "skewfromrightshort"=>"Skew From Short Left", + "randomrotate"=>"Random Rotate" + ); + + if($all){ + $custom = RevOperations::getCustomAnimations('customin'); + + $arrAnimations = array_merge($arrAnimations, $custom); + } + return($arrAnimations); + } + + /** + * + * get "end" animations array + */ + public static function getArrEndAnimations($all = true){ + $arrAnimations = array( + "auto"=>"Choose Automatic", + "fadeout"=>"Fade Out", + "stt"=>"Short to Top", + "stb"=>"Short to Bottom", + "stl"=>"Short to Left", + "str"=>"Short to Right", + "ltt"=>"Long to Top", + "ltb"=>"Long to Bottom", + "ltl"=>"Long to Left", + "ltr"=>"Long to Right", + "skewtoright"=>"Skew To Right", + "skewtoleft"=>"Skew To Left", + "skewtorightshort"=>"Skew To Right Short", + "skewtoleftshort"=>"Skew To Left Short", + "randomrotateout"=>"Random Rotate Out" + ); + + if($all){ + $custom = RevOperations::getCustomAnimations('customout'); + + $arrAnimations = array_merge($arrAnimations, $custom); + } + return($arrAnimations); + } + + /** + * + * insert custom animations + */ + public static function insertCustomAnim($anim){ + if(isset($anim['handle'])) { + $db = new UniteDBRev(); + + $arrInsert = array(); + $arrInsert["handle"] = $anim['handle']; + unset($anim['handle']); + + $arrInsert["params"] = stripslashes(json_encode(str_replace("'", '"', $anim))); + + $result = $db->insert(GlobalsRevSlider::$table_layer_anims, $arrInsert); + } + + $arrAnims['customin'] = RevOperations::getCustomAnimations(); + $arrAnims['customout'] = RevOperations::getCustomAnimations('customout'); + $arrAnims['customfull'] = RevOperations::getFullCustomAnimations(); + + return $arrAnims; + } + + /** + * + * insert custom animations + */ + public static function updateCustomAnim($anim){ + if(isset($anim['handle'])) { + $db = new UniteDBRev(); + $handle = $anim['handle']; + unset($anim['handle']); + + $arrUpdate = array(); + $arrUpdate['params'] = stripslashes(json_encode(str_replace("'", '"', $anim))); + + $result = $db->update(GlobalsRevSlider::$table_layer_anims, $arrUpdate, array('handle' => $handle)); + } + + $arrAnims['customin'] = RevOperations::getCustomAnimations(); + $arrAnims['customout'] = RevOperations::getCustomAnimations('customout'); + $arrAnims['customfull'] = RevOperations::getFullCustomAnimations(); + + return $arrAnims; + } + + /** + * + * delete custom animations + */ + public static function deleteCustomAnim($rawID){ + if(trim($rawID) != '') { + $db = new UniteDBRev(); + $id = str_replace(array('customin-', 'customout'), array('', ''), $rawID); + $db->delete(GlobalsRevSlider::$table_layer_anims, "id = '".mysql_real_escape_string($id)."'"); + } + + $arrAnims['customin'] = RevOperations::getCustomAnimations(); + $arrAnims['customout'] = RevOperations::getCustomAnimations('customout'); + $arrAnims['customfull'] = RevOperations::getFullCustomAnimations(); + + return $arrAnims; + } + + /** + * + * get custom animations + */ + public static function getCustomAnimations($pre = 'customin'){ + $db = new UniteDBRev(); + + $customAnimations = array(); + + $result = $db->fetch(GlobalsRevSlider::$table_layer_anims); + if(!empty($result)){ + foreach($result as $key => $value){ + $customAnimations[$pre.'-'.$value['id']] = $value['handle']; + } + } + + return $customAnimations; + } + + /** + * + * get full custom animations + */ + public static function getFullCustomAnimations(){ + $db = new UniteDBRev(); + + $customAnimations = array(); + + $result = $db->fetch(GlobalsRevSlider::$table_layer_anims); + if(!empty($result)){ + foreach($result as $key => $value){ + $customAnimations[$key]['id'] = $value['id']; + $customAnimations[$key]['handle'] = $value['handle']; + $customAnimations[$key]['params'] = json_decode(str_replace("'", '"', $value['params']), true); + } + } + + return $customAnimations; + } + + /** + * + * get animation params by handle + */ + public static function getCustomAnimationByHandle($handle){ + $db = new UniteDBRev(); + + $result = $db->fetch(GlobalsRevSlider::$table_layer_anims, "handle = '".$handle."'"); + if(!empty($result)) return json_decode(str_replace("'", '"', $result[0]['params']), true); + + return false; + } + + /** + * + * get animation params by id + */ + public static function getFullCustomAnimationByID($id){ + $db = new UniteDBRev(); + + $result = $db->fetch(GlobalsRevSlider::$table_layer_anims, "id = '".$id."'"); + + if(!empty($result)){ + $customAnimations = array(); + $customAnimations['id'] = $result[0]['id']; + $customAnimations['handle'] = $result[0]['handle']; + $customAnimations['params'] = json_decode(str_replace("'", '"', $result[0]['params']), true); + return $customAnimations; + } + + return false; + } + + /** + * + * parse animation params + */ + public static function parseCustomAnimationByArray($animArray){ + $retString = ''; + if(isset($animArray['movex']) && $animArray['movex'] !== '') $retString.= 'x:'.$animArray['movex'].';'; + if(isset($animArray['movey']) && $animArray['movey'] !== '') $retString.= 'y:'.$animArray['movey'].';'; + if(isset($animArray['movez']) && $animArray['movez'] !== '') $retString.= 'z:'.$animArray['movez'].';'; + + if(isset($animArray['rotationx']) && $animArray['rotationx'] !== '') $retString.= 'rotationX:'.$animArray['rotationx'].';'; + if(isset($animArray['rotationy']) && $animArray['rotationy'] !== '') $retString.= 'rotationY:'.$animArray['rotationy'].';'; + if(isset($animArray['rotationz']) && $animArray['rotationz'] !== '') $retString.= 'rotationZ:'.$animArray['rotationz'].';'; + + if(isset($animArray['scalex']) && $animArray['scalex'] !== ''){ + $retString.= 'scaleX:'; + $retString.= (intval($animArray['scalex']) == 0) ? 0 : $animArray['scalex'] / 100; + $retString.= ';'; + } + if(isset($animArray['scaley']) && $animArray['scaley'] !== ''){ + $retString.= 'scaleY:'; + $retString.= (intval($animArray['scaley']) == 0) ? 0 : $animArray['scaley'] / 100; + $retString.= ';'; + } + + if(isset($animArray['skewx']) && $animArray['skewx'] !== '') $retString.= 'skewX:'.$animArray['skewx'].';'; + if(isset($animArray['skewy']) && $animArray['skewy'] !== '') $retString.= 'skewY:'.$animArray['skewy'].';'; + + if(isset($animArray['captionopacity']) && $animArray['captionopacity'] !== ''){ + $retString.= 'opacity:'; + $retString.= (intval($animArray['captionopacity']) == 0) ? 0 : $animArray['captionopacity'] / 100; + $retString.= ';'; + } + + if(isset($animArray['captionperspective']) && $animArray['captionperspective'] !== '') $retString.= 'transformPerspective:'.$animArray['captionperspective'].';'; + + if(isset($animArray['originx']) && $animArray['originx'] !== '' && isset($animArray['originy']) && $animArray['originy'] !== ''){ + $retString.= "transformOrigin:".$animArray['originx'].'% '.$animArray['originy']."%;"; + } + + return $retString; + } + + /** + * + * parse css file and get the classes from there. + */ + public function getArrCaptionClasses($contentCSS){ + //parse css captions file + $parser = new UniteCssParserRev(); + $parser->initContent($contentCSS); + $arrCaptionClasses = $parser->getArrClasses(); + return($arrCaptionClasses); + } + + /** + * + * get all font family types + */ + public function getArrFontFamilys($slider){ + //Web Safe Fonts + $fonts = array( + //Serif Fonts + 'Georgia, serif', + '"Palatino Linotype", "Book Antiqua", Palatino, serif', + '"Times New Roman", Times, serif', + + //Sans-Serif Fonts + 'Arial, Helvetica, sans-serif', + '"Arial Black", Gadget, sans-serif', + '"Comic Sans MS", cursive, sans-serif', + 'Impact, Charcoal, sans-serif', + '"Lucida Sans Unicode", "Lucida Grande", sans-serif', + 'Tahoma, Geneva, sans-serif', + '"Trebuchet MS", Helvetica, sans-serif', + 'Verdana, Geneva, sans-serif', + + //Monospace Fonts + '"Courier New", Courier, monospace', + '"Lucida Console", Monaco, monospace' + ); + + if($slider->getParam("load_googlefont","false") == "true"){ + $font_custom = $slider->getParam("google_font",""); + if(!is_array($font_custom)) $font_custom = array($font_custom); //backwards compability + + if(is_array($font_custom)){ + foreach($font_custom as $key => $curFont){ + $font = $this->cleanFontStyle(stripslashes($curFont)); + if($font != false) + $font_custom[$key] = $font; + else + unset($font_custom[$key]); + } + $fonts = array_merge($font_custom, $fonts); + } + } + + return $fonts; + } + + + /** + * + * get font name in clean + */ + public function cleanFontStyle($font){ + $url = preg_match('/href=["\']?([^"\'>]+)["\']?/', $font, $match); + if(!isset($match[1])) return false; + $info = parse_url($match[1]); + + if(isset($info['query'])){ + $font = str_replace(array('family=', '+'), array('', ' '), $info['query']); + $font = explode(':', $font); + return (strpos($font['0'], ' ') !== false) ? '"'.$font['0'].'"' : $font['0']; + + } + + return false; + } + + /** + * + * get the select classes html for putting in the html by ajax + */ + private function getHtmlSelectCaptionClasses($contentCSS){ + $arrCaptions = $this->getArrCaptionClasses($contentCSS); + $htmlSelect = UniteFunctionsRev::getHTMLSelect($arrCaptions,"","id='layer_caption' name='layer_caption'",true); + return($htmlSelect); + } + + /** + * + * get contents of the css table + */ + public function getCaptionsContent(){ + $result = $this->db->fetch(GlobalsRevSlider::$table_css); + $contentCSS = UniteCssParserRev::parseDbArrayToCss($result); + return($contentCSS); + } + + + /** + * + * get contents of the css table + */ + public static function getCaptionsContentArray($handle = false){ + $db = new UniteDBRev(); + $result = $db->fetch(GlobalsRevSlider::$table_css); + $contentCSS = UniteCssParserRev::parseDbArrayToArray($result, $handle); + return($contentCSS); + } + + /** + * + * get contents of the static css file + */ + public static function getStaticCss(){ + $contentCSS = @file_get_contents(GlobalsRevSlider::$filepath_static_captions); + return($contentCSS); + } + + /** + * + * get contents of the static css file + */ + public static function updateStaticCss($content){ + $content = str_replace(array("\'", '\"', '\\\\'),array("'", '"', '\\'), trim($content)); + + UniteFunctionsRev::writeFile($content, GlobalsRevSlider::$filepath_static_captions); + $static = self::getStaticCss(); + + return $static; + } + + /** + * + * get contents of the static css file + */ + public function getDynamicCss(){ + $contentCSS = file_get_contents(GlobalsRevSlider::$filepath_dynamic_captions); + return($contentCSS); + } + + /** + * + * insert captions css file content + * @return new captions html select + */ + public function insertCaptionsContentData($content){ + if(isset($content['handle'])) { + $db = new UniteDBRev(); + + $handle = $content['handle']; + + $arrInsert = array(); + $arrInsert["handle"] = '.tp-caption.'.$handle; + $arrInsert["params"] = stripslashes(json_encode(str_replace("'", '"', $content['params']))); + $arrInsert["hover"] = stripslashes(json_encode(str_replace("'", '"', @$content['hover']))); + $arrInsert["settings"] = stripslashes(json_encode(str_replace("'", '"', @$content['settings']))); + + $result = $db->insert(GlobalsRevSlider::$table_css, $arrInsert); + } + + $this->updateDynamicCaptions(); + + //output captions array + $operations = new RevOperations(); + $cssContent = $operations->getCaptionsContent(); + $arrCaptions = $operations->getArrCaptionClasses($cssContent); + return($arrCaptions); + } + + /** + * + * update captions css file content + * @return new captions html select + */ + public function updateCaptionsContentData($content){ + if(isset($content['handle'])) { + $db = new UniteDBRev(); + + $handle = $content['handle']; + + $arrUpdate = array(); + $arrUpdate["params"] = stripslashes(json_encode(str_replace("'", '"', $content['params']))); + $arrUpdate["hover"] = stripslashes(json_encode(str_replace("'", '"', @$content['hover']))); + $arrUpdate["settings"] = stripslashes(json_encode(str_replace("'", '"', @$content['settings']))); + $result = $db->update(GlobalsRevSlider::$table_css, $arrUpdate, array('handle' => '.tp-caption.'.$handle)); + } + + $this->updateDynamicCaptions(); + + //output captions array + $operations = new RevOperations(); + $cssContent = $operations->getCaptionsContent(); + $arrCaptions = $operations->getArrCaptionClasses($cssContent); + return($arrCaptions); + } + + /** + * + * delete captions css file content + * @return new captions html select + */ + public function deleteCaptionsContentData($handle){ + $db = new UniteDBRev(); + + $db->delete(GlobalsRevSlider::$table_css,"handle='.tp-caption.".$handle."'"); + + $this->updateDynamicCaptions(); + + //output captions array + $operations = new RevOperations(); + $cssContent = $operations->getCaptionsContent(); + $arrCaptions = $operations->getArrCaptionClasses($cssContent); + return($arrCaptions); + } + + /** + * + * update dynamic-captions css file content + */ + public static function updateDynamicCaptions($full = false){ + if($full){ + $captions = array(); + $captions = RevOperations::getCaptionsContentArray(); + + $styles = UniteCssParserRev::parseArrayToCss($captions, "\n"); + //write styles into dynamic css + UniteFunctionsRev::writeFile($styles, GlobalsRevSlider::$filepath_dynamic_captions); + }else{ + //go through all sliders and check which classes are used, get all classes from DB and write them into the file + $slider = new RevSlider(); + $arrSliders = $slider->getArrSliders(); + + $classes = array(); + + //get used classes + if(!empty($arrSliders)){ + foreach($arrSliders as $slider){ + try{ + $slides = $slider->getSlides(); + + if(!empty($slides)){ + foreach($slides as $slide){ + $layers = $slide->getLayers(); + if(!empty($layers)){ + foreach($layers as $layer){ + if(isset($layer['style'])){ + if(!empty($layer['style'])) $classes[$layer['style']] = true; + } + } + } + } + } + + }catch(Exception $e){ + $errorMessage = "ERROR: ".$e->getMessage(); + } + } + } + + if(!empty($classes)){ + $captions = array(); + foreach($classes as $class => $val){ + $captionCheck = RevOperations::getCaptionsContentArray($class); + if(!empty($captionCheck)) $captions[] = $captionCheck; + } + + $styles = UniteCssParserRev::parseArrayToCss($captions, "\n"); + + //write styles into dynamic css + UniteFunctionsRev::writeFile($styles, GlobalsRevSlider::$filepath_dynamic_captions); + } + } + } + + + /** + * + * get contents of the css file + */ + public static function getCaptionsCssContentArray(){ + if(file_exists(GlobalsRevSlider::$filepath_captions)) + $contentCSS = file_get_contents(GlobalsRevSlider::$filepath_captions); + else if(file_exists(GlobalsRevSlider::$filepath_captions_original)) + $contentCSS = file_get_contents(GlobalsRevSlider::$filepath_captions_original); + else if(file_exists(GlobalsRevSlider::$filepath_backup.'captions.css')) + $contentCSS = file_get_contents(GlobalsRevSlider::$filepath_backup.'captions.css'); + else if(file_exists(GlobalsRevSlider::$filepath_backup.'captions-original.css')) + $contentCSS = file_get_contents(GlobalsRevSlider::$filepath_backup.'captions-original.css'); + else + UniteFunctionsRev::throwError("No captions.css found! This installation is incorrect, please make sure to reupload the Slider Revolution plugin and try again!"); + + $result = UniteCssParserRev::parseCssToArray($contentCSS); + + return($result); + } + + /** + * + * import contents of the css file + */ + public static function importCaptionsCssContentArray(){ + $db = new UniteDBRev(); + $css = self::getCaptionsCssContentArray(); + $static = array(); + if(is_array($css) && $css !== false && count($css) > 0){ + foreach($css as $class => $styles){ + //check if static style or dynamic style + $class = trim($class); + + if((strpos($class, ':hover') === false && strpos($class, ':') !== false) || //before, after + strpos($class," ") !== false || // .tp-caption.imageclass img or .tp-caption .imageclass or .tp-caption.imageclass .img + strpos($class,".tp-caption") === false || // everything that is not tp-caption + (strpos($class,".") === false || strpos($class,"#") !== false) || // no class -> #ID or img + strpos($class,">") !== false){ //.tp-caption>.imageclass or .tp-caption.imageclass>img or .tp-caption.imageclass .img + + $static[$class] = $styles; + continue; + } + + //is a dynamic style + if(strpos($class, ':hover') !== false){ + $class = trim(str_replace(':hover', '', $class)); + $arrInsert = array(); + $arrInsert["hover"] = json_encode($styles); + $arrInsert["settings"] = json_encode(array('hover' => 'true')); + }else{ + $arrInsert = array(); + $arrInsert["params"] = json_encode($styles); + } + //check if class exists + $result = $db->fetch(GlobalsRevSlider::$table_css, "handle = '".$class."'"); + + if(!empty($result)){ //update + $db->update(GlobalsRevSlider::$table_css, $arrInsert, array('handle' => $class)); + }else{ //insert + $arrInsert["handle"] = $class; + $db->insert(GlobalsRevSlider::$table_css, $arrInsert); + } + } + } + + if(!empty($static)){ //save static into static-captions.css + $css = UniteCssParserRev::parseStaticArrayToCss($static); + $static_cur = RevOperations::getStaticCss(); //get the open sans line! + $css = $static_cur."\n".$css; + self::updateStaticCss($css); + } + } + + /** + * + * move old captions.css and captions-original.css + */ + public static function moveOldCaptionsCss(){ + if(file_exists(GlobalsRevSlider::$filepath_captions_original)) + $success = @rename(GlobalsRevSlider::$filepath_captions_original, GlobalsRevSlider::$filepath_backup.'/captions-original.css'); + + if(file_exists(GlobalsRevSlider::$filepath_captions)) + $success = @rename(GlobalsRevSlider::$filepath_captions, GlobalsRevSlider::$filepath_backup.'/captions.css'); + } + + /** + * + * preview slider output + * if output object is null - create object + */ + public function previewOutput($sliderID,$output = null){ + + if($sliderID == "empty_output"){ + $this->loadingMessageOutput(); + exit(); + } + + if($output == null) + $output = new RevSliderOutput(); + + $slider = new RevSlider(); + $slider->initByID($sliderID); + $isWpmlExists = UniteWpmlRev::isWpmlExists(); + $useWpml = $slider->getParam("use_wpml","off"); + $wpmlActive = false; + if($isWpmlExists && $useWpml == "on"){ + $wpmlActive = true; + $arrLanguages = UniteWpmlRev::getArrLanguages(false); + + //set current lang to output + $currentLang = UniteFunctionsRev::getPostGetVariable("lang"); + + if(empty($currentLang)) + $currentLang = UniteWpmlRev::getCurrentLang(); + + if(empty($currentLang)) + $currentLang = $arrLanguages[0]; + + $output->setLang($currentLang); + + $selectLangChoose = UniteFunctionsRev::getHTMLSelect($arrLanguages,$currentLang,"id='select_langs'",true); + } + + + $output->setPreviewMode(); + + //put the output html + $urlPlugin = RevSliderAdmin::$url_plugin."rs-plugin/"; + $urlPreviewPattern = UniteBaseClassRev::$url_ajax_actions."&client_action=preview_slider&sliderid=".$sliderID."&lang=[lang]&nonce=[nonce]"; + $nonce = wp_create_nonce("revslider_actions"); + + $setBase = (is_ssl()) ? "https://" : "http://"; + + ?> + + + + + + + + + + + + + + + + +
            + : +
            + + + + + putSliderBase($sliderID); + ?> + + + +
            + loadingMessageOutput(); + exit(); + } + + $data = UniteFunctionsRev::jsonDecodeFromClientSide($data); + + $slideID = $data["slideid"]; + $slide = new RevSlide(); + $slide->initByID($slideID); + $sliderID = $slide->getSliderID(); + + $output = new RevSliderOutput(); + $output->setOneSlideMode($data); + + $this->previewOutput($sliderID,$output); + } + + + /** + * update general settings + */ + public function updateGeneralSettings($data){ + + $strSettings = serialize($data); + $params = new RevSliderParams(); + $params->updateFieldInDB("general", $strSettings); + } + + + /** + * + * get general settigns values. + */ + static function getGeneralSettingsValues(){ + + $params = new RevSliderParams(); + $strSettings = $params->getFieldFromDB("general"); + + $arrValues = array(); + if(!empty($strSettings)) + $arrValues = unserialize($strSettings); + + return($arrValues); + } + + /** + * update language filter in session + */ + public function updateLangFilter($data){ + $lang = UniteFunctionsRev::getVal($data, "lang"); + $sliderID = UniteFunctionsRev::getVal($data, "sliderid"); + + if(!isset($_SESSION)) + return(false); + $_SESSION["revslider_lang_filter"] = $lang; + return($sliderID); + } + + /** + * + * get lang filter value from session + */ + public function getLangFilterValue(){ + + if(!isset($_SESSION)) + return("all"); + + $langFitler = UniteFunctionsRev::getVal($_SESSION, "revslider_lang_filter","all"); + + return($langFitler); + } + + + /** + * + * modify custom slider params. This is instead custom settings difficulties. + */ + public function modifyCustomSliderParams($data){ + + $settigns = new UniteSettingsRev(); + + $arrNames = array("width","height", + "responsitive_w1","responsitive_sw1", + "responsitive_w2","responsitive_sw2", + "responsitive_w3","responsitive_sw3", + "responsitive_w4","responsitive_sw4", + "responsitive_w5","responsitive_sw5", + "responsitive_w6","responsitive_sw6"); + + $arrMain = $data["main"]; + foreach($arrNames as $name){ + if(array_key_exists($name, $arrMain)){ + $arrMain[$name] = $settigns->modifyValueByDatatype($arrMain[$name], UniteSettingsRev::DATATYPE_NUMBER); + } + } + + $arrMain["fullscreen_offset_container"] = $settigns->modifyValueByDatatype($arrMain["fullscreen_offset_container"], UniteSettingsRev::DATATYPE_STRING); + + //$arrMain["auto_height"] = $settigns->modifyValueByDatatype($arrMain["auto_height"], UniteSettingsRev::DATATYPE_STRING); + $data["main"] = $arrMain; + + return($data); + } + + + /** + * + * get post types with categories for client side. + */ + public static function getPostTypesWithCatsForClient(){ + $arrPostTypes = UniteFunctionsWPRev::getPostTypesWithCats(); + + $globalCounter = 0; + + $arrOutput = array(); + foreach($arrPostTypes as $postType => $arrTaxWithCats){ + + $arrCats = array(); + foreach($arrTaxWithCats as $tax){ + $taxName = $tax["name"]; + $taxTitle = $tax["title"]; + $globalCounter++; + $arrCats["option_disabled_".$globalCounter] = "---- ".$taxTitle." ----"; + foreach($tax["cats"] as $catID=>$catTitle){ + $arrCats[$taxName."_".$catID] = $catTitle; + } + }//loop tax + + $arrOutput[$postType] = $arrCats; + + }//loop types + + return($arrOutput); + } + + + /** + * + * get html font import + */ + public static function getCleanFontImport($font){ + $setBase = (is_ssl()) ? "https://" : "http://"; + + if(strpos($font, "href=") === false){ //fallback for old versions + return ''; //id="rev-google-font" + }else{ + $font = str_replace(array('http://', 'https://'), array($setBase, $setBase), $font); + return stripslashes($font); + } + } + + } + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/inc_php/revslider_output.class.php b/src/wp-content/plugins/revslider/inc_php/revslider_output.class.php new file mode 100644 index 0000000..dd38f95 --- /dev/null +++ b/src/wp-content/plugins/revslider/inc_php/revslider_output.class.php @@ -0,0 +1,1598 @@ +ID)) + $currentPageID = $post->ID; + } + + //do the filter by pages + if(array_search($currentPageID, $arrPutInPages) === false) + return(false); + } + } + + return(true); + } + + + /** + * + * put the rev slider slider on the html page. + * @param $data - mixed, can be ID ot Alias. + */ + public static function putSlider($sliderID,$putIn=""){ + + $isPutIn = self::isPutIn($putIn); + if($isPutIn == false) + return(false); + + //check if on mobile and if option hide on mobile is set + + $output = new RevSliderOutput(); + $output->putSliderBase($sliderID); + + $slider = $output->getSlider(); + return($slider); + } + + + /** + * + * set language + */ + public function setLang($lang){ + $this->sliderLang = $lang; + } + + /** + * + * set one slide mode for preview + */ + public function setOneSlideMode($data){ + $this->oneSlideMode = true; + $this->oneSlideData = $data; + } + + /** + * + * set preview mode + */ + public function setPreviewMode(){ + $this->previewMode = true; + } + + /** + * + * get the last slider after the output + */ + public function getSlider(){ + return($this->slider); + } + + /** + * + * get slide full width video data + */ + private function getSlideFullWidthVideoData(RevSlide $slide){ + + $response = array("found"=>false); + + //deal full width video: + $enableVideo = $slide->getParam("enable_video","false"); + if($enableVideo != "true") + return($response); + + $videoID = $slide->getParam("video_id",""); + $videoID = trim($videoID); + + if(empty($videoID)) + return($response); + + $response["found"] = true; + + $videoType = is_numeric($videoID)?"vimeo":"youtube"; + $videoAutoplay = $slide->getParam("video_autoplay"); + $videoCover = $slide->getParam("cover"); + $videoAutoplayOnlyFirstTime = $slide->getParam("autoplayonlyfirsttime"); + $previewimage = $slide->getParam("previewimage", ""); + $videoNextslide = $slide->getParam("video_nextslide"); + $mute = $slide->getParam("mute"); + + $response["type"] = $videoType; + $response["videoID"] = $videoID; + $response["autoplay"] = UniteFunctionsRev::strToBool($videoAutoplay); + $response["cover"] = UniteFunctionsRev::strToBool($videoCover); + $response["autoplayonlyfirsttime"] = UniteFunctionsRev::strToBool($videoAutoplayOnlyFirstTime); + $response["previewimage"] = UniteFunctionsRev::strToBool($previewimage); + $response["nextslide"] = UniteFunctionsRev::strToBool($videoNextslide); + $response["mute"] = UniteFunctionsRev::strToBool($mute); + + return($response); + } + + + /** + * + * put full width video layer + */ + private function putFullWidthVideoLayer($videoData){ + + if($videoData["found"] == false) + return(false); + + $autoplayonlyfirsttime = ""; + $autoplay = UniteFunctionsRev::boolToStr($videoData["autoplay"]); + if($autoplay == "true"){ + $autoplayonlyfirsttime = UniteFunctionsRev::boolToStr($videoData["autoplayonlyfirsttime"]); + $autoplayonlyfirsttime = ' data-autoplayonlyfirsttime="'. $autoplayonlyfirsttime.'"'; + } + $nextslide = UniteFunctionsRev::boolToStr($videoData["nextslide"]); + + $htmlParams = 'data-x="0" data-y="0" data-speed="500" data-start="10" data-easing="easeOutBack"'; + + if($videoData["previewimage"] != '') $htmlParams.= ' data-thumbimage="'.$videoData["previewimage"].'"'; + + $videoID = $videoData["videoID"]; + + $setBase = (is_ssl()) ? "https://" : "http://"; + + $mute = ($videoData['mute']) ? ' data-volume="mute"' : ''; + + if($videoData["type"] == "youtube"): //youtube + ?>
            >
            >
            oneSlideData["slideid"]; + + + $oneSlideParams = UniteFunctionsRev::getVal($this->oneSlideData, "params"); + $oneSlideLayers = UniteFunctionsRev::getVal($this->oneSlideData, "layers"); + + if(gettype($oneSlideParams) == "object") + $oneSlideParams = (array)$oneSlideParams; + + if(gettype($oneSlideLayers) == "object") + $oneSlideLayers = (array)$oneSlideLayers; + + if(!empty($oneSlideLayers)) + $oneSlideLayers = UniteFunctionsRev::convertStdClassToArray($oneSlideLayers); + + $newSlides = array(); + foreach($slides as $slide){ + $slideID = $slide->getID(); + + if($slideID == $oneSlideID){ + + if(!empty($oneSlideParams)) + $slide->setParams($oneSlideParams); + + if(!empty($oneSlideLayers)) + $slide->setLayers($oneSlideLayers); + + $newSlides[] = $slide; //add 2 slides + $newSlides[] = $slide; + } + } + + return($newSlides); + } + + + /** + * + * put the slider slides + */ + private function putSlides($doWrapFromTemplate){ + //go to template slider if post template + if($doWrapFromTemplate !== false) $this->slider->initByMixed($doWrapFromTemplate); //back to original Slider + + $sliderType = $this->slider->getParam("slider_type"); + + $publishedOnly = true; + if($this->previewMode == true && $this->oneSlideMode == true){ + $previewSlideID = UniteFunctionsRev::getVal($this->oneSlideData, "slideid"); + $previewSlide = new RevSlide(); + $previewSlide->initByID($previewSlideID); + $slides = array($previewSlide); + + }else{ + $slides = $this->slider->getSlidesForOutput($publishedOnly,$this->sliderLang); + } + + + $this->slidesNumIndex = $this->slider->getSlidesNumbersByIDs(true); + + if(empty($slides)): + ?> +
            + No slides found, please add some slides +
            + slider->initByMixed($this->slider->getParam("slider_template_id",false)); //back to template for JS + + $thumbWidth = $this->slider->getParam("thumb_width",100); + $thumbHeight = $this->slider->getParam("thumb_height",50); + + $slideWidth = $this->slider->getParam("width",900); + $slideHeight = $this->slider->getParam("height",300); + + $navigationType = $this->slider->getParam("navigaion_type","none"); + $isThumbsActive = ($navigationType == "thumb")?true:false; + + $lazyLoad = $this->slider->getParam("lazy_load","off"); + + //for one slide preview + if($this->oneSlideMode == true) + $slides = $this->filterOneSlide($slides); + + echo "
              "; + + $htmlFirstTransWrap = ""; + + $startWithSlide = $this->slider->getStartWithSlideSetting(); + + $firstTransActive = $this->slider->getParam("first_transition_active","false"); + if($firstTransActive == "true"){ + + $firstTransition = $this->slider->getParam("first_transition_type","fade"); + $htmlFirstTransWrap .= " data-fstransition=\"$firstTransition\""; + + $firstDuration = $this->slider->getParam("first_transition_duration","300"); + if(!empty($firstDuration) && is_numeric($firstDuration)) + $htmlFirstTransWrap .= " data-fsmasterspeed=\"$firstDuration\""; + + $firstSlotAmount = $this->slider->getParam("first_transition_slot_amount","7"); + if(!empty($firstSlotAmount) && is_numeric($firstSlotAmount)) + $htmlFirstTransWrap .= " data-fsslotamount=\"$firstSlotAmount\""; + + } + + foreach($slides as $index => $slide){ + $params = $slide->getParams(); + + //check if date is set + $date_from = $slide->getParam("date_from",""); + $date_to = $slide->getParam("date_to",""); + + if($date_from != ""){ + $date_from = strtotime($date_from); + if(time() < $date_from) continue; + } + + if($date_to != ""){ + $date_to = strtotime($date_to); + if(time() > $date_to) continue; + } + + $transition = $slide->getParam("slide_transition","random"); + //if($transition == "fade") $transition = "tp-fade"; + //$transitionPremium = $slide->getParam("slide_transition_premium","random"); + + //if(trim($transition) == '') + // $transition = $transitionPremium; + //else + // if(trim($transitionPremium) != '') $transition .= ','.$transitionPremium; + + + $slotAmount = $slide->getParam("slot_amount","7"); + + $isExternal = $slide->getParam("background_type","image"); + if($isExternal != "external"){ + $urlSlideImage = $slide->getImageUrl(); + + //get image alt + $imageFilename = $slide->getImageFilename(); + $info = pathinfo($imageFilename); + $alt = $info["filename"]; + }else{ + + $urlSlideImage = $slide->getParam("slide_bg_external",""); + + $info = ''; + $alt = ''; + } + + //get thumb url + $htmlThumb = ""; + if($isThumbsActive == true){ + $urlThumb = null; + + //check if post slider, if yes, get thumb from featured image + //if($this->slider->isSlidesFromPosts()) + // $urlThumb = ''; + + if(empty($urlThumb)){ + $urlThumb = $slide->getParam("slide_thumb",""); + } + + + + if(empty($urlThumb)){ //try to get resized thumb + $pathThumb = $slide->getImageFilepath(); + if(!empty($pathThumb)) + $urlThumb = UniteBaseClassRev::getImageUrl($pathThumb,$thumbWidth,$thumbHeight,true); + } + + //if not - put regular image: + if(empty($urlThumb)) + $urlThumb = $slide->getImageUrl(); + + $htmlThumb = 'data-thumb="'.$urlThumb.'" '; + } + + //get link + $htmlLink = ""; + $enableLink = $slide->getParam("enable_link","false"); + if($enableLink == "true"){ + $linkType = $slide->getParam("link_type","regular"); + switch($linkType){ + + //---- normal link + + default: + case "regular": + $link = $slide->getParam("link",""); + $linkOpenIn = $slide->getParam("link_open_in","same"); + $htmlTarget = ""; + if($linkOpenIn == "new") + $htmlTarget = ' data-target="_blank"'; + $htmlLink = "data-link=\"$link\" $htmlTarget "; + break; + + //---- link to slide + + case "slide": + $slideLink = UniteFunctionsRev::getVal($params, "slide_link"); + if(!empty($slideLink) && $slideLink != "nothing"){ + //get slide index from id + if(is_numeric($slideLink)) + $slideLink = UniteFunctionsRev::getVal($this->slidesNumIndex, $slideLink); + + if(!empty($slideLink)) + $htmlLink = "data-link=\"slide\" data-linktoslide=\"$slideLink\" "; + } + break; + } + + //set link position: + $linkPos = UniteFunctionsRev::getVal($params, "link_pos","front"); + if($linkPos == "back") + $htmlLink .= ' data-slideindex="back"'; + } + + //set delay + $htmlDelay = ""; + $delay = $slide->getParam("delay",""); + if(!empty($delay) && is_numeric($delay)) + $htmlDelay = "data-delay=\"$delay\" "; + + //get duration + $htmlDuration = ""; + $duration = $slide->getParam("transition_duration",""); + if(!empty($duration) && is_numeric($duration)) + $htmlDuration = "data-masterspeed=\"$duration\" "; + + //get rotation + $htmlRotation = ""; + $rotation = $slide->getParam("transition_rotation",""); + if(!empty($rotation)){ + $rotation = (int)$rotation; + if($rotation != 0){ + if($rotation > 720 && $rotation != 999) + $rotation = 720; + if($rotation < -720) + $rotation = -720; + } + $htmlRotation = "data-rotate=\"$rotation\" "; + } + + $fullWidthVideoData = $this->getSlideFullWidthVideoData($slide); + + //set full width centering. + /*$htmlImageCentering = ""; + $fullWidthCentering = $slide->getParam("fullwidth_centering","false"); + if($sliderType == "fullwidth" && $fullWidthCentering == "true") + $htmlImageCentering = ' data-fullwidthcentering="on"'; + */ + + //set first slide transition + $htmlFirstTrans = ""; + if($index == $startWithSlide){ + $htmlFirstTrans = $htmlFirstTransWrap; + }//first trans + + $htmlParams = $htmlDuration.$htmlLink.$htmlThumb.$htmlDelay.$htmlRotation.$htmlFirstTrans; + + $bgType = $slide->getParam("background_type","image"); + + $styleImage = ""; + $urlImageTransparent = UniteBaseClassRev::$url_plugin."images/transparent.png"; + + switch($bgType){ + case "trans": + $urlSlideImage = $urlImageTransparent; + break; + case "solid": + $urlSlideImage = $urlImageTransparent; + $slideBGColor = $slide->getParam("slide_bg_color","#d0d0d0"); + $styleImage = "style='background-color:".$slideBGColor."'"; + break; + } + + //additional params + $imageAddParams = ""; + if($lazyLoad == "on"){ + $imageAddParams .= "data-lazyload=\"$urlSlideImage\""; + $urlSlideImage = UniteBaseClassRev::$url_plugin."images/dummy.png"; + } + + //$imageAddParams .= $htmlImageCentering; + + //additional background params + $bgFit = $slide->getParam("bg_fit","cover"); + $bgFitX = intval($slide->getParam("bg_fit_x","100")); + $bgFitY = intval($slide->getParam("bg_fit_y","100")); + + $bgPosition = $slide->getParam("bg_position","center top"); + $bgPositionX = intval($slide->getParam("bg_position_x","0")); + $bgPositionY = intval($slide->getParam("bg_position_y","0")); + + $bgRepeat = $slide->getParam("bg_repeat","no-repeat"); + + if($bgPosition == 'percentage'){ + $imageAddParams .= ' data-bgposition="'.$bgPositionX.'% '.$bgPositionY.'%"'; + }else{ + $imageAddParams .= ' data-bgposition="'.$bgPosition.'"'; + } + + + + //check for kenburn & pan zoom + $kenburn_effect = $slide->getParam("kenburn_effect","off"); + //$kb_rotation_start = intval($slide->getParam("kb_rotation_start","0")); + //$kb_rotation_end = intval($slide->getParam("kb_rotation_end","0")); + $kb_duration = intval($slide->getParam("kb_duration",$this->slider->getParam("delay",9000))); + $kb_ease = $slide->getParam("kb_easing","Linear.easeNone"); + $kb_start_fit = $slide->getParam("kb_start_fit","100"); + $kb_end_fit =$slide->getParam("kb_end_fit","100"); + + $kb_pz = ''; + + if($kenburn_effect == "on" && ($bgType == 'image' || $bgType == 'external')){ + $kb_pz.= ' data-kenburns="on"'; + //$kb_pz.= ' data-rotationstart="'.$kb_rotation_start.'"'; + //$kb_pz.= ' data-rotationend="'.$kb_rotation_end.'"'; + $kb_pz.= ' data-duration="'.$kb_duration.'"'; + $kb_pz.= ' data-ease="'.$kb_ease.'"'; + $kb_pz.= ' data-bgfit="'.$kb_start_fit.'"'; + $kb_pz.= ' data-bgfitend="'.$kb_end_fit.'"'; + + $bgEndPosition = $slide->getParam("bg_end_position","center top"); + $bgEndPositionX = intval($slide->getParam("bg_end_position_x","0")); + $bgEndPositionY = intval($slide->getParam("bg_end_position_y","0")); + + if($bgEndPosition == 'percentage'){ + $kb_pz.= ' data-bgpositionend="'.$bgEndPositionX.'% '.$bgEndPositionY.'%"'; + }else{ + $kb_pz.= ' data-bgpositionend="'.$bgEndPosition.'"'; + } + + //set image original width and height + //$imgSize = @getimagesize($urlSlideImage); + //if(is_array($imgSize) && !empty($imgSize)){ + // $kb_pz.= ' data-owidth="'.$imgSize[0].'"'; + // $kb_pz.= ' data-oheight="'.$imgSize[1].'"'; + //} + + }else{ //only set if kenburner is off + + if($bgFit == 'percentage'){ + $imageAddParams .= ' data-bgfit="'.$bgFitX.'% '.$bgFitY.'%"'; + }else{ + $imageAddParams .= ' data-bgfit="'.$bgFit.'"'; + } + + $imageAddParams .= ' data-bgrepeat="'.$bgRepeat.'"'; + + } + + + //Html + echo " \n"; + echo "
            • \n"; + echo " \n"; + echo " \"".\n"; + echo " \n"; + //put video: + if($fullWidthVideoData["found"] == true) //backward compatability + $this->putFullWidthVideoLayer($fullWidthVideoData); + + $this->putCreativeLayer($slide); + + echo "
            • \n"; + + } //get foreach + + echo "
            \n"; + } + + + /** + * + * get html5 layer html from data + */ + private function getHtml5LayerHtml($data){ + $urlPoster = UniteFunctionsRev::getVal($data, "urlPoster"); + $urlMp4 = UniteFunctionsRev::getVal($data, "urlMp4"); + $urlWebm = UniteFunctionsRev::getVal($data, "urlWebm"); + $urlOgv = UniteFunctionsRev::getVal($data, "urlOgv"); + $width = UniteFunctionsRev::getVal($data, "width"); + $height = UniteFunctionsRev::getVal($data, "height"); + + $ids = UniteFunctionsRev::getVal($data, "attrID"); + $ids = UniteFunctionsRev::getVal($data, "attrID"); + $classes = UniteFunctionsRev::getVal($data, "attrClasses"); + $title = UniteFunctionsRev::getVal($data, "attrTitle"); + $rel = UniteFunctionsRev::getVal($data, "attrRel"); + $ids = ($ids != '') ? ' id="'.$ids.'"' : ''; + $classes = ($classes != '') ? ' '.$classes : ''; + $title = ($title != '') ? ' title="'.$title.'"' : ''; + $rel = ($rel != '') ? ' rel="'.$rel.'"' : ''; + + $fullwidth = UniteFunctionsRev::getVal($data, "fullwidth"); + $fullwidth = UniteFunctionsRev::strToBool($fullwidth); + + $videoloop = UniteFunctionsRev::getVal($data, "videoloop"); + $videoloop = UniteFunctionsRev::strToBool($videoloop); + + $controls = UniteFunctionsRev::getVal($data, "controls"); + $controls = UniteFunctionsRev::strToBool($controls); + + if($fullwidth == true){ + $width = "100%"; + $height = "100%"; + } + + $videoloop = ($videoloop == true) ? ' loop' : ''; + $controls = ($controls == true) ? '' : ' controls'; + + $htmlPoster = ""; + if(!empty($urlPoster)) + $htmlPoster = "poster='".$urlPoster."'"; + + $htmlMp4 = ""; + if(!empty($urlMp4)) + $htmlMp4 = ""; + + $htmlWebm = ""; + if(!empty($urlWebm)) + $htmlWebm = ""; + + $htmlOgv = ""; + if(!empty($urlOgv)) + $htmlOgv = ""; + + $html = "\n"; + + return($html); + } + + + /** + * + * put creative layer + */ + private function putCreativeLayer(RevSlide $slide){ + $layers = $slide->getLayers(); + $customAnimations = RevOperations::getCustomAnimations('customin'); //get all custom animations + $customEndAnimations = RevOperations::getCustomAnimations('customout'); //get all custom animations + $startAnimations = RevOperations::getArrAnimations(false); //only get the standard animations + $endAnimations = RevOperations::getArrEndAnimations(false); //only get the standard animations + + if(empty($layers)) + return(false); + + $zIndex = 2; + + foreach($layers as $layer): + + $type = UniteFunctionsRev::getVal($layer, "type","text"); + + //set if video full screen + $isFullWidthVideo = false; + if($type == "video"){ + $videoData = UniteFunctionsRev::getVal($layer, "video_data"); + if(!empty($videoData)){ + $videoData = (array)$videoData; + $isFullWidthVideo = UniteFunctionsRev::getVal($videoData, "fullwidth"); + $isFullWidthVideo = UniteFunctionsRev::strToBool($isFullWidthVideo); + }else + $videoData = array(); + } + + + $class = UniteFunctionsRev::getVal($layer, "style"); + $animation = UniteFunctionsRev::getVal($layer, "animation","tp-fade"); + if($animation == "fade") $animation = "tp-fade"; + + $customin = ''; + if(!array_key_exists($animation, $startAnimations) && array_key_exists($animation, $customAnimations)){ //if true, add custom animation + $customin.= 'data-customin="'; + $animArr = RevOperations::getCustomAnimationByHandle($customAnimations[$animation]); + if($animArr !== false) $customin.= RevOperations::parseCustomAnimationByArray($animArr); + $customin.= '"'; + $animation = 'customin'; + } + + if(strpos($animation, 'customin-') !== false || strpos($animation, 'customout-') !== false) $animation = "tp-fade"; + + //set output class: + $outputClass = "tp-caption ". trim($class); + $outputClass = trim($outputClass) . " "; + + $outputClass .= trim($animation); + + $left = UniteFunctionsRev::getVal($layer, "left",0); + $top = UniteFunctionsRev::getVal($layer, "top",0); + $speed = UniteFunctionsRev::getVal($layer, "speed",300); + $time = UniteFunctionsRev::getVal($layer, "time",0); + $easing = UniteFunctionsRev::getVal($layer, "easing","easeOutExpo"); + $randomRotate = UniteFunctionsRev::getVal($layer, "random_rotation","false"); + $randomRotate = UniteFunctionsRev::boolToStr($randomRotate); + + $text = UniteFunctionsRev::getVal($layer, "text"); + + $htmlVideoAutoplay = ""; + $htmlVideoAutoplayOnlyFirstTime = ""; + $htmlVideoNextSlide = ""; + $htmlVideoThumbnail = ""; + $htmlMute = ''; + $htmlCover = ''; + $htmlDotted = ''; + $htmlRatio = ''; + $htmlRewind = ''; + + $ids = UniteFunctionsRev::getVal($layer, "attrID"); + $classes = UniteFunctionsRev::getVal($layer, "attrClasses"); + $title = UniteFunctionsRev::getVal($layer, "attrTitle"); + $rel = UniteFunctionsRev::getVal($layer, "attrRel"); + + $ids = ($ids != '') ? ' id="'.$ids.'"' : ''; + $classes = ($classes != '') ? ' '.$classes : ''; + $title = ($title != '') ? ' title="'.$title.'"' : ''; + $rel = ($rel != '') ? ' rel="'.$rel.'"' : ''; + + //set html: + $html = ""; + switch($type){ + default: + case "text": + $html = $text; + $html = do_shortcode($html); + break; + case "image": + $alt = UniteFunctionsRev::getVal($layer, "alt"); + $urlImage = UniteFunctionsRev::getVal($layer, "image_url"); + + $additional = ""; + $scaleX = UniteFunctionsRev::getVal($layer, "scaleX"); + $scaleY = UniteFunctionsRev::getVal($layer, "scaleY"); + if($scaleX != '') $additional .= ' data-ww="'.$scaleX.'"'; + if($scaleY != '') $additional .= ' data-hh="'.$scaleY.'"'; + if(is_ssl()){ + $urlImage = str_replace("http://", "https://", $urlImage); + } + + $html = ''.$alt.''; + $imageLink = UniteFunctionsRev::getVal($layer, "link",""); + if(!empty($imageLink)){ + $openIn = UniteFunctionsRev::getVal($layer, "link_open_in","same"); + + $target = ""; + if($openIn == "new") + $target = ' target="_blank"'; + + $linkID = UniteFunctionsRev::getVal($layer, "link_id",""); + $linkClass = UniteFunctionsRev::getVal($layer, "link_class",""); + $linkTitle = UniteFunctionsRev::getVal($layer, "link_title",""); + $linkRel = UniteFunctionsRev::getVal($layer, "link_rel",""); + + $linkIDHtml = ""; + $linkClassHtml = ""; + $linkTitleHtml = ""; + $linkRelHtml = ""; + if(!empty($linkID)) + $linkIDHtml = ' id="'.$linkID.'"'; + + if(!empty($linkClass)) + $linkClassHtml = ' class="'.$linkClass.'"'; + + if(!empty($linkTitle)) + $linkTitleHtml = ' title="'.$linkTitle.'"'; + + if(!empty($linkRel)) + $linkRelHtml = ' rel="'.$linkRel.'"'; + + $html = ''.$html.''; + } + break; + case "video": + $videoType = trim(UniteFunctionsRev::getVal($layer, "video_type")); + $videoID = trim(UniteFunctionsRev::getVal($layer, "video_id")); + $videoWidth = trim(UniteFunctionsRev::getVal($layer, "video_width")); + $videoHeight = trim(UniteFunctionsRev::getVal($layer, "video_height")); + $videoArgs = trim(UniteFunctionsRev::getVal($layer, "video_args")); + + $rewind = UniteFunctionsRev::getVal($videoData, "forcerewind"); + $rewind = UniteFunctionsRev::strToBool($rewind); + $htmlRewind = ($rewind == true) ? ' data-forcerewind="on"' : ''; + + + if($isFullWidthVideo == true){ + $videoWidth = "100%"; + $videoHeight = "100%"; + } + + $setBase = (is_ssl()) ? "https://" : "http://"; + + switch($videoType){ + case "youtube": + if(empty($videoArgs)) + $videoArgs = GlobalsRevSlider::DEFAULT_YOUTUBE_ARGUMENTS; + + $videoArgs.=';origin='.$setBase.$_SERVER['SERVER_NAME'].';'; + $html = ""; + break; + case "vimeo": + if(empty($videoArgs)) + $videoArgs = GlobalsRevSlider::DEFAULT_VIMEO_ARGUMENTS; + $html = ""; + break; + case "html5": + $html = $this->getHtml5LayerHtml($videoData); + $cover = UniteFunctionsRev::getVal($videoData, "cover"); + $cover = UniteFunctionsRev::strToBool($cover); + if($cover == true){ + $htmlCover = ' data-forceCover="1"'; + $dotted = UniteFunctionsRev::getVal($videoData, "dotted"); + if($dotted !== 'none') + $htmlDotted = ' data-dottedoverlay="'.$dotted.'"'; + + $ratio = UniteFunctionsRev::getVal($videoData, "ratio"); + if(!empty($ratio)) + $htmlRatio = ' data-aspectratio="'.$ratio.'"'; + } + break; + default: + UniteFunctionsRev::throwError("wrong video type: $videoType"); + break; + } + + //set video autoplay, with backward compatability + if(array_key_exists("autoplay", $videoData)) + $videoAutoplay = UniteFunctionsRev::getVal($videoData, "autoplay"); + else //backword compatability + $videoAutoplay = UniteFunctionsRev::getVal($layer, "video_autoplay"); + + //set video autoplayonlyfirsttime, with backward compatability + if(array_key_exists("autoplayonlyfirsttime", $videoData)) + $videoAutoplayOnlyFirstTime = UniteFunctionsRev::getVal($videoData, "autoplayonlyfirsttime"); + else + $videoAutoplayOnlyFirstTime = ""; + + $videoAutoplay = UniteFunctionsRev::strToBool($videoAutoplay); + $videoAutoplayOnlyFirstTime = UniteFunctionsRev::strToBool($videoAutoplayOnlyFirstTime); + $mute = UniteFunctionsRev::getVal($videoData, "mute"); + $mute = UniteFunctionsRev::strToBool($mute); + $htmlMute = ($mute) ? ' data-volume="mute"' : ''; + + if($videoAutoplay == true) + $htmlVideoAutoplay = ' data-autoplay="true"'."\n"; + else + $htmlVideoAutoplay = ' data-autoplay="false"'."\n"; + + if($videoAutoplayOnlyFirstTime == true && $videoAutoplay == true) + $htmlVideoAutoplayOnlyFirstTime = ' data-autoplayonlyfirsttime="true"'."\n"; + else + $htmlVideoAutoplayOnlyFirstTime = ' data-autoplayonlyfirsttime="false"'."\n"; + + $videoNextSlide = UniteFunctionsRev::getVal($videoData, "nextslide"); + $videoNextSlide = UniteFunctionsRev::strToBool($videoNextSlide); + + if($videoNextSlide == true) + $htmlVideoNextSlide = ' data-nextslideatend="true"'."\n"; + + $videoThumbnail = @$videoData["previewimage"]; + + if(trim($videoThumbnail) !== '') $htmlVideoThumbnail = ' data-thumbimage="'.$videoThumbnail.'"'."\n"; + + break; + } + + //handle end transitions: + $endTime = trim(UniteFunctionsRev::getVal($layer, "endtime")); + $htmlEnd = ""; + $customout = ''; + if(!empty($endTime)){ + $htmlEnd = "data-end=\"$endTime\""."\n"; + } + $endSpeed = trim(UniteFunctionsRev::getVal($layer, "endspeed")); + if(!empty($endSpeed)) + $htmlEnd .= "data-endspeed=\"$endSpeed\""."\n"; + + $endEasing = trim(UniteFunctionsRev::getVal($layer, "endeasing")); + if(!empty($endSpeed) && $endEasing != "nothing") + $htmlEnd .= " data-endeasing=\"$endEasing\""."\n"; + + //add animation to class + $endAnimation = trim(UniteFunctionsRev::getVal($layer, "endanimation")); + if($endAnimation == "fade") $endAnimation = "tp-fade"; + + if(!array_key_exists($endAnimation, $endAnimations) && array_key_exists($endAnimation, $customEndAnimations)){ //if true, add custom animation + $customout = 'data-customout="'; + $animArr = RevOperations::getCustomAnimationByHandle($customEndAnimations[$endAnimation]); + if($animArr !== false) $customout.= RevOperations::parseCustomAnimationByArray($animArr); + $customout.= '"'; + $endAnimation = 'customout'; + } + + if(strpos($endAnimation, 'customin-') !== false || strpos($endAnimation, 'customout-') !== false) $endAnimation = ""; + + if(!empty($endAnimation) && $endAnimation != "auto") + $outputClass .= " ".$endAnimation; + + //slide link + $htmlLink = ""; + $slideLink = UniteFunctionsRev::getVal($layer, "link_slide"); + if(!empty($slideLink) && $slideLink != "nothing" && $slideLink != "scroll_under"){ + //get slide index from id + if(is_numeric($slideLink)) + $slideLink = UniteFunctionsRev::getVal($this->slidesNumIndex, $slideLink); + + if(!empty($slideLink)) + $htmlLink = "data-linktoslide=\"$slideLink\""."\n"; + } + + //scroll under the slider + if($slideLink == "scroll_under"){ + $outputClass .= " tp-scrollbelowslider"; + $scrollUnderOffset = UniteFunctionsRev::getVal($layer, "scrollunder_offset"); + if(!empty($scrollUnderOffset)) + $htmlLink .= "data-scrolloffset=\"".$scrollUnderOffset."\""."\n"; + } + + //hidden under resolution + $htmlHidden = ""; + $layerHidden = UniteFunctionsRev::getVal($layer, "hiddenunder"); + if($layerHidden == "true" || $layerHidden == "1") + $htmlHidden = ' data-captionhidden="on"'."\n"; + + $htmlParams = $htmlEnd.$htmlLink.$htmlVideoAutoplay.$htmlVideoAutoplayOnlyFirstTime.$htmlVideoNextSlide.$htmlVideoThumbnail.$htmlHidden.$htmlMute.$htmlCover.$htmlDotted.$htmlRatio.$htmlRewind; + + //set positioning options + + $alignHor = UniteFunctionsRev::getVal($layer,"align_hor","left"); + $alignVert = UniteFunctionsRev::getVal($layer, "align_vert","top"); + + $htmlPosX = ""; + $htmlPosY = ""; + switch($alignHor){ + default: + case "left": + $htmlPosX = "data-x=\"".$left."\""; + break; + case "center": + $htmlPosX = "data-x=\"center\" data-hoffset=\"".$left."\""; + break; + case "right": + $left = (int)$left*-1; + $htmlPosX = "data-x=\"right\" data-hoffset=\"".$left."\""; + break; + } + + switch($alignVert){ + default: + case "top": + $htmlPosY = "data-y=\"".$top."\" "; + break; + case "middle": + $htmlPosY = "data-y=\"center\" data-voffset=\"".$top."\""; + break; + case "bottom": + $top = (int)$top*-1; + $htmlPosY = "data-y=\"bottom\" data-voffset=\"".$top."\""; + break; + } + + //set corners + $htmlCorners = ""; + + if($type == "text"){ + $cornerLeft = UniteFunctionsRev::getVal($layer, "corner_left"); + $cornerRight = UniteFunctionsRev::getVal($layer, "corner_right"); + switch($cornerLeft){ + case "curved": + $htmlCorners .= "
            "; + break; + case "reverced": + $htmlCorners .= "
            "; + break; + } + + switch($cornerRight){ + case "curved": + $htmlCorners .= "
            "; + break; + case "reverced": + $htmlCorners .= "
            "; + break; + } + + //add resizeme class + $resizeme = UniteFunctionsRev::getVal($layer, "resizeme"); + if($resizeme == "true" || $resizeme == "1") + $outputClass .= ' tp-resizeme'; + + }//end text related layer + + //make some modifications for the full screen video + if($isFullWidthVideo == true){ + $htmlPosX = "data-x=\"0\""; + $htmlPosY = "data-y=\"0\""; + $outputClass .= " fullscreenvideo"; + } + + echo "\n \n"; + echo "
            "; + echo $html."\n"; + if($htmlCorners != ""){ + echo $htmlCorners."\n"; + } + echo "
            \n"; + $zIndex++; + endforeach; + } + + /** + * + * put slider javascript + */ + private function putJS(){ + + $params = $this->slider->getParams(); + $sliderType = $this->slider->getParam("slider_type"); + $optFullWidth = ($sliderType == "fullwidth")?"on":"off"; + + $optFullScreen = "off"; + if($sliderType == "fullscreen"){ + $optFullWidth = "off"; + $optFullScreen = "on"; + } + + $noConflict = $this->slider->getParam("jquery_noconflict","on"); + + //set thumb amount + $numSlides = $this->slider->getNumSlides(true); + $thumbAmount = (int)$this->slider->getParam("thumb_amount","5"); + if($thumbAmount > $numSlides) + $thumbAmount = $numSlides; + + + //get stop slider options + $stopSlider = $this->slider->getParam("stop_slider","off"); + $stopAfterLoops = $this->slider->getParam("stop_after_loops","0"); + $stopAtSlide = $this->slider->getParam("stop_at_slide","2"); + + if($stopSlider == "off"){ + $stopAfterLoops = "-1"; + $stopAtSlide = "-1"; + } + + // set hide navigation after + $hideThumbs = $this->slider->getParam("hide_thumbs","200"); + if(is_numeric($hideThumbs) == false) + $hideThumbs = "0"; + else{ + $hideThumbs = (int)$hideThumbs; + if($hideThumbs < 10) + $hideThumbs = 10; + } + + $alwaysOn = $this->slider->getParam("navigaion_always_on","false"); + if($alwaysOn == "true") + $hideThumbs = "0"; + + $sliderID = $this->slider->getID(); + + //treat hide slider at limit + $hideSliderAtLimit = $this->slider->getParam("hide_slider_under","0",RevSlider::VALIDATE_NUMERIC); + if(!empty($hideSliderAtLimit)) + $hideSliderAtLimit++; + + //this option is disabled in full width slider + if($sliderType == "fullwidth") + $hideSliderAtLimit = "0"; + + $hideCaptionAtLimit = $this->slider->getParam("hide_defined_layers_under","0",RevSlider::VALIDATE_NUMERIC);; + if(!empty($hideCaptionAtLimit)) + $hideCaptionAtLimit++; + + $hideAllCaptionAtLimit = $this->slider->getParam("hide_all_layers_under","0",RevSlider::VALIDATE_NUMERIC);; + if(!empty($hideAllCaptionAtLimit)) + $hideAllCaptionAtLimit++; + + //start_with_slide + $startWithSlide = $this->slider->getStartWithSlideSetting(); + + //modify navigation type (backward compatability) + $arrowsType = $this->slider->getParam("navigation_arrows","nexttobullets"); + switch($arrowsType){ + case "verticalcentered": + $arrowsType = "solo"; + break; + } + + //More Mobile Options + $hideThumbsOnMobile = $this->slider->getParam("hide_thumbs_on_mobile","off"); + + $hideBulletsOnMobile = $this->slider->getParam("hide_bullets_on_mobile","off"); + + $hideArrowsOnMobile = $this->slider->getParam("hide_arrows_on_mobile","off"); + + $hideThumbsUnderResolution = $this->slider->getParam("hide_thumbs_under_resolution","0",RevSlider::VALIDATE_NUMERIC); + + $videoJsPath = UniteBaseClassRev::$url_plugin."rs-plugin/videojs/"; + + ?> + + + + +
            +
            + : +
            +
            + + slider->getParam("width"); + $sliderHeight = (int)$this->slider->getParam("height"); + + $percent = $sliderHeight / $sliderWidth; + + $w1 = (int) $this->slider->getParam("responsitive_w1",0); + $w2 = (int) $this->slider->getParam("responsitive_w2",0); + $w3 = (int) $this->slider->getParam("responsitive_w3",0); + $w4 = (int) $this->slider->getParam("responsitive_w4",0); + $w5 = (int) $this->slider->getParam("responsitive_w5",0); + $w6 = (int) $this->slider->getParam("responsitive_w6",0); + + $sw1 = (int) $this->slider->getParam("responsitive_sw1",0); + $sw2 = (int) $this->slider->getParam("responsitive_sw2",0); + $sw3 = (int) $this->slider->getParam("responsitive_sw3",0); + $sw4 = (int) $this->slider->getParam("responsitive_sw4",0); + $sw5 = (int) $this->slider->getParam("responsitive_sw5",0); + $sw6 = (int) $this->slider->getParam("responsitive_sw6",0); + + $arrItems = array(); + + //add main item: + $arr = array(); + $arr["maxWidth"] = -1; + $arr["minWidth"] = $w1; + $arr["sliderWidth"] = $sliderWidth; + $arr["sliderHeight"] = $sliderHeight; + $arrItems[] = $arr; + + //add item 1: + if(empty($w1)) + return($arrItems); + + $arr = array(); + $arr["maxWidth"] = $w1-1; + $arr["minWidth"] = $w2; + $arr["sliderWidth"] = $sw1; + $arr["sliderHeight"] = floor($sw1 * $percent); + $arrItems[] = $arr; + + //add item 2: + if(empty($w2)) + return($arrItems); + + $arr["maxWidth"] = $w2-1; + $arr["minWidth"] = $w3; + $arr["sliderWidth"] = $sw2; + $arr["sliderHeight"] = floor($sw2 * $percent); + $arrItems[] = $arr; + + //add item 3: + if(empty($w3)) + return($arrItems); + + $arr["maxWidth"] = $w3-1; + $arr["minWidth"] = $w4; + $arr["sliderWidth"] = $sw3; + $arr["sliderHeight"] = floor($sw3 * $percent); + $arrItems[] = $arr; + + //add item 4: + if(empty($w4)) + return($arrItems); + + $arr["maxWidth"] = $w4-1; + $arr["minWidth"] = $w5; + $arr["sliderWidth"] = $sw4; + $arr["sliderHeight"] = floor($sw4 * $percent); + $arrItems[] = $arr; + + //add item 5: + if(empty($w5)) + return($arrItems); + + $arr["maxWidth"] = $w5-1; + $arr["minWidth"] = $w6; + $arr["sliderWidth"] = $sw5; + $arr["sliderHeight"] = floor($sw5 * $percent); + $arrItems[] = $arr; + + //add item 6: + if(empty($w6)) + return($arrItems); + + $arr["maxWidth"] = $w6-1; + $arr["minWidth"] = 0; + $arr["sliderWidth"] = $sw6; + $arr["sliderHeight"] = floor($sw6 * $percent); + $arrItems[] = $arr; + + return($arrItems); + } + + + /** + * + * put responsitive inline styles + */ + private function putResponsitiveStyles(){ + + $bannerWidth = $this->slider->getParam("width"); + $bannerHeight = $this->slider->getParam("height"); + + $arrItems = $this->getResponsitiveValues(); + + ?> + "; + } + + + /** + * + * modify slider settings for preview mode + */ + private function modifyPreviewModeSettings(){ + $params = $this->slider->getParams(); + $params["js_to_body"] = "false"; + + $this->slider->setParams($params); + } + + + /** + * + * put html slider on the html page. + * @param $data - mixed, can be ID ot Alias. + */ + + //TODO: settings google font, position, margin, background color, alt image text + + public function putSliderBase($sliderID){ + + try{ + self::$sliderSerial++; + + $this->slider = new RevSlider(); + $this->slider->initByMixed($sliderID); + + $doWrapFromTemplate = false; + + if($this->slider->isSlidesFromPosts() && $this->slider->getParam("slider_template_id",false) !== false){ //need to use general settings from the Template Slider + $this->slider->initByMixed($this->slider->getParam("slider_template_id",false)); + $doWrapFromTemplate = $sliderID; + } + + //modify settings for admin preview mode + if($this->previewMode == true) + $this->modifyPreviewModeSettings(); + + //set slider language + $isWpmlExists = UniteWpmlRev::isWpmlExists(); + $useWpml = $this->slider->getParam("use_wpml","off"); + if( $isWpmlExists && $useWpml == "on"){ + if($this->previewMode == false) + $this->sliderLang = UniteFunctionsWPRev::getCurrentLangCode(); + } + + //edit html before slider + $htmlBeforeSlider = ""; + if($this->slider->getParam("load_googlefont","false") == "true"){ + $googleFont = $this->slider->getParam("google_font"); + if(is_array($googleFont)){ + foreach($googleFont as $key => $font){ + $htmlBeforeSlider .= RevOperations::getCleanFontImport($font); + } + }else{ + $htmlBeforeSlider .= RevOperations::getCleanFontImport($googleFont); + } + + } + + //pub js to body handle + if($this->slider->getParam("js_to_body","false") == "true"){ + $urlIncludeJS = UniteBaseClassRev::$url_plugin."rs-plugin/js/jquery.themepunch.plugins.min.js?rev=". GlobalsRevSlider::SLIDER_REVISION; + $htmlBeforeSlider .= ""; + $urlIncludeJS = UniteBaseClassRev::$url_plugin."rs-plugin/js/jquery.themepunch.revolution.min.js?rev=". GlobalsRevSlider::SLIDER_REVISION; + $htmlBeforeSlider .= ""; + } + + //the initial id can be alias + $sliderID = $this->slider->getID(); + + $bannerWidth = $this->slider->getParam("width",null,RevSlider::VALIDATE_NUMERIC,"Slider Width"); + $bannerHeight = $this->slider->getParam("height",null,RevSlider::VALIDATE_NUMERIC,"Slider Height"); + + $sliderType = $this->slider->getParam("slider_type"); + + //set wrapper height + $wrapperHeigh = 0; + $wrapperHeigh += $this->slider->getParam("height"); + + //add thumb height + if($this->slider->getParam("navigaion_type") == "thumb"){ + $wrapperHeigh += $this->slider->getParam("thumb_height"); + } + + $this->sliderHtmlID = "rev_slider_".$sliderID."_".self::$sliderSerial; + $this->sliderHtmlID_wrapper = $this->sliderHtmlID."_wrapper"; + + $containerStyle = ""; + + $sliderPosition = $this->slider->getParam("position","center"); + + //set position: + if($sliderType != "fullscreen"){ + + switch($sliderPosition){ + case "center": + default: + $containerStyle .= "margin:0px auto;"; + break; + case "left": + $containerStyle .= "float:left;"; + break; + case "right": + $containerStyle .= "float:right;"; + break; + } + + } + + //add background color + $backgrondColor = trim($this->slider->getParam("background_color")); + if(!empty($backgrondColor)) + $containerStyle .= "background-color:$backgrondColor;"; + + //set padding + $containerStyle .= "padding:".$this->slider->getParam("padding","0")."px;"; + + //set margin: + if($sliderType != "fullscreen"){ + + if($sliderPosition != "center"){ + $containerStyle .= "margin-left:".$this->slider->getParam("margin_left","0")."px;"; + $containerStyle .= "margin-right:".$this->slider->getParam("margin_right","0")."px;"; + } + + $containerStyle .= "margin-top:".$this->slider->getParam("margin_top","0")."px;"; + $containerStyle .= "margin-bottom:".$this->slider->getParam("margin_bottom","0")."px;"; + } + + //set height and width: + $bannerStyle = "display:none;"; + + //add background image (to banner style) + $showBackgroundImage = $this->slider->getParam("show_background_image","false"); + if($showBackgroundImage == "true"){ + $backgroundImage = $this->slider->getParam("background_image"); + $backgroundFit = $this->slider->getParam("bg_fit", "cover"); + $backgroundRepeat = $this->slider->getParam("bg_repeat", "no-repeat"); + $backgroundPosition = $this->slider->getParam("bg_position", "center top"); + + if(!empty($backgroundImage)) + $bannerStyle .= "background-image:url($backgroundImage);background-repeat:".$backgroundRepeat.";background-fit:".$backgroundFit.";background-position:".$backgroundPosition.";"; + } + + //set wrapper and slider class: + $sliderWrapperClass = "rev_slider_wrapper"; + $sliderClass = "rev_slider"; + + $putResponsiveStyles = false; + + switch($sliderType){ + default: + case "fixed": + $bannerStyle .= "height:".$bannerHeight."px;width:".$bannerWidth."px;"; + $containerStyle .= "height:".$bannerHeight."px;width:".$bannerWidth."px;"; + break; + case "responsitive": + //$containerStyle .= "height:".$bannerHeight."px;"; + $putResponsiveStyles = true; + break; + case "fullwidth": + $sliderWrapperClass .= " fullwidthbanner-container"; + $sliderClass .= " fullwidthabanner"; + $bannerStyle .= "max-height:".$bannerHeight."px;height:".$bannerHeight.";"; + $containerStyle .= "max-height:".$bannerHeight."px;"; + break; + case "fullscreen": + //$containerStyle .= "height:".$bannerHeight."px;"; + $sliderWrapperClass .= " fullscreen-container"; + $sliderClass .= " fullscreenbanner"; + break; + } + + $htmlTimerBar = ""; + + $timerBar = $this->slider->getParam("show_timerbar","top"); + + if($timerBar == "true") + $timerBar = $this->slider->getParam("timebar_position","top"); + + switch($timerBar){ + case "top": + $htmlTimerBar = '
            '; + break; + case "bottom": + $htmlTimerBar = '
            '; + break; + } + + //check inner / outer border + $paddingType = $this->slider->getParam("padding_type","outter"); + if($paddingType == "inner") + $sliderWrapperClass .= " tp_inner_padding"; + + global $revSliderVersion; + + echo "\n"; + + if($putResponsiveStyles == true) + $this->putResponsitiveStyles(); + + echo $htmlBeforeSlider."\n"; + echo "
            sliderHtmlID_wrapper; + echo "\" "; + echo "class=\"". $sliderWrapperClass ."\""; + echo " style=\"". $containerStyle ."\">\n"; + + echo "
            sliderHtmlID; + echo "\" "; + echo "class=\"". $sliderClass ."\""; + echo " style=\"". $bannerStyle ."\">\n"; + + echo $this->putSlides($doWrapFromTemplate); + echo $htmlTimerBar; + echo "
            \n"; + echo "
            "; + + $this->putJS(); + echo ""; + + }catch(Exception $e){ + $message = $e->getMessage(); + $this->putErrorMessage($message); + } + + } + + + } + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/inc_php/revslider_params.class.php b/src/wp-content/plugins/revslider/inc_php/revslider_params.class.php new file mode 100644 index 0000000..3eeb159 --- /dev/null +++ b/src/wp-content/plugins/revslider/inc_php/revslider_params.class.php @@ -0,0 +1,60 @@ +db->fetch(GlobalsRevSlider::$table_settings); + if(empty($arr)){ //insert to db + $arrInsert = array(); + $arrInsert["general"] = ""; + $arrInsert["params"] = ""; + $arrInsert[$name] = $value; + + $this->db->insert(GlobalsRevSlider::$table_settings,$arrInsert); + }else{ //update db + $arrUpdate = array(); + $arrUpdate[$name] = $value; + + $id = $arr[0]["id"]; + $this->db->update(GlobalsRevSlider::$table_settings,$arrUpdate,array("id"=>$id)); + } + } + + + /** + * + * get field from db + */ + public function getFieldFromDB($name){ + + $arr = $this->db->fetch(GlobalsRevSlider::$table_settings); + + if(empty($arr)) + return(""); + + + $arr = $arr[0]; + + if(array_key_exists($name, $arr) == false) + UniteFunctionsRev::throwError("The settings db should cotnain field: $name"); + + $value = $arr[$name]; + return($value); + } + + + } + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/inc_php/revslider_settings_product.class.php b/src/wp-content/plugins/revslider/inc_php/revslider_settings_product.class.php new file mode 100644 index 0000000..06346f5 --- /dev/null +++ b/src/wp-content/plugins/revslider/inc_php/revslider_settings_product.class.php @@ -0,0 +1,345 @@ +getArrSettings(); + + foreach($arrSettings as $key=>$setting){ + $type = UniteFunctionsRev::getVal($setting, "type"); + if($type != UniteSettingsRev::TYPE_CUSTOM) + continue; + $customType = UniteFunctionsRev::getVal($setting, "custom_type"); + + switch($customType){ + case "slider_size": + $setting["width"] = UniteFunctionsRev::getVal($arrValues, "width",UniteFunctionsRev::getVal($setting,"width")); + $setting["height"] = UniteFunctionsRev::getVal($arrValues, "height",UniteFunctionsRev::getVal($setting,"height")); + $arrSettings[$key] = $setting; + break; + case "responsitive_settings": + $id = $setting["id"]; + $setting["w1"] = UniteFunctionsRev::getVal($arrValues, $id."_w1",UniteFunctionsRev::getVal($setting,"w1")); + $setting["w2"] = UniteFunctionsRev::getVal($arrValues, $id."_w2",UniteFunctionsRev::getVal($setting,"w2")); + $setting["w3"] = UniteFunctionsRev::getVal($arrValues, $id."_w3",UniteFunctionsRev::getVal($setting,"w3")); + $setting["w4"] = UniteFunctionsRev::getVal($arrValues, $id."_w4",UniteFunctionsRev::getVal($setting,"w4")); + $setting["w5"] = UniteFunctionsRev::getVal($arrValues, $id."_w5",UniteFunctionsRev::getVal($setting,"w5")); + $setting["w6"] = UniteFunctionsRev::getVal($arrValues, $id."_w6",UniteFunctionsRev::getVal($setting,"w6")); + + $setting["sw1"] = UniteFunctionsRev::getVal($arrValues, $id."_sw1",UniteFunctionsRev::getVal($setting,"sw1")); + $setting["sw2"] = UniteFunctionsRev::getVal($arrValues, $id."_sw2",UniteFunctionsRev::getVal($setting,"sw2")); + $setting["sw3"] = UniteFunctionsRev::getVal($arrValues, $id."_sw3",UniteFunctionsRev::getVal($setting,"sw3")); + $setting["sw4"] = UniteFunctionsRev::getVal($arrValues, $id."_sw4",UniteFunctionsRev::getVal($setting,"sw4")); + $setting["sw5"] = UniteFunctionsRev::getVal($arrValues, $id."_sw5",UniteFunctionsRev::getVal($setting,"sw5")); + $setting["sw6"] = UniteFunctionsRev::getVal($arrValues, $id."_sw6",UniteFunctionsRev::getVal($setting,"sw6")); + $arrSettings[$key] = $setting; + break; + } + } + + $settings->setArrSettings($arrSettings); + + //disable settings by slider type: + $sliderType = $settings->getSettingValue("slider_type"); + + switch($sliderType){ + case "fixed": + case "fullwidth": + case "fullscreen": + //hide responsive + $settingRes = $settings->getSettingByName("responsitive"); + $settingRes["disabled"] = true; + $settings->updateArrSettingByName("responsitive", $settingRes); + break; + } + + switch($sliderType){ + case "fixed": + case "responsitive": + case "fullscreen": + //hide autoheight + $settingRes = $settings->getSettingByName("auto_height"); + $settingRes["disabled"] = true; + $settings->updateArrSettingByName("auto_height", $settingRes); + + $settingRes = $settings->getSettingByName("force_full_width"); + $settingRes["disabled"] = true; + $settings->updateArrSettingByName("force_full_width", $settingRes); + break; + } + //change height to max height + $settingSize = $settings->getSettingByName("slider_size"); + $settingSize["slider_type"] = $sliderType; + $settings->updateArrSettingByName("slider_size", $settingSize); + + $settings = self::setCategoryByPostTypes($settings, $arrValues, $postTypesWithCats, "post_types", "post_category","post"); + + return($settings); + } + + + + /** + * + * draw responsitive settings value + */ + protected function drawResponsitiveSettings($setting){ + $id = $setting["id"]; + + $w1 = UniteFunctionsRev::getVal($setting, "w1"); + $w2 = UniteFunctionsRev::getVal($setting, "w2"); + $w3 = UniteFunctionsRev::getVal($setting, "w3"); + $w4 = UniteFunctionsRev::getVal($setting, "w4"); + $w5 = UniteFunctionsRev::getVal($setting, "w5"); + $w6 = UniteFunctionsRev::getVal($setting, "w6"); + + $sw1 = UniteFunctionsRev::getVal($setting, "sw1"); + $sw2 = UniteFunctionsRev::getVal($setting, "sw2"); + $sw3 = UniteFunctionsRev::getVal($setting, "sw3"); + $sw4 = UniteFunctionsRev::getVal($setting, "sw4"); + $sw5 = UniteFunctionsRev::getVal($setting, "sw5"); + $sw6 = UniteFunctionsRev::getVal($setting, "sw6"); + + $disabled = (UniteFunctionsRev::getVal($setting, "disabled") == true); + + $strDisabled = ""; + if($disabled == true) + $strDisabled = "disabled='disabled'"; + + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            + 1: + + value=""> + + 1: + + value=""> +
            + 2: + + value=""> + + 2: + + value=""> +
            + 3: + + value=""> + + 3: + + value=""> +
            + 4: + + value=""> + + 4: + + value=""> +
            + 5: + + value=""> + + 5: + + value=""> +
            + 6: + + value=""> + + 6: + + value=""> +
            + + + + + + + + + +
            + + + + + + + +
            + + drawSliderSize($setting); + break; + case "responsitive_settings": + $this->drawResponsitiveSettings($setting); + break; + default: + UniteFunctionsRev::throwError("No handler function for type: $customType"); + break; + } + } + + + /** + * + * get first category from categories list + */ + private static function getFirstCategory($cats){ + + foreach($cats as $key=>$value){ + if(strpos($key,"option_disabled") === false) + return($key); + } + return(""); + } + + + /** + * set category by post type, with specific name (can be regular or woocommerce) + */ + public static function setCategoryByPostTypes(UniteSettingsRev $settings,$arrValues, $postTypesWithCats,$nameType,$nameCat,$defaultType){ + + //update the categories list by the post types + $postTypes = UniteFunctionsRev::getVal($arrValues, $nameType ,$defaultType); + if(strpos($postTypes, ",") !== false) + $postTypes = explode(",",$postTypes); + else + $postTypes = array($postTypes); + + $arrCats = array(); + $globalCounter = 0; + + $arrCats = array(); + $isFirst = true; + foreach($postTypes as $postType){ + $cats = UniteFunctionsRev::getVal($postTypesWithCats, $postType,array()); + if($isFirst == true){ + $firstValue = self::getFirstCategory($cats); + $isFirst = false; + } + + $arrCats = array_merge($arrCats,$cats); + } + + $settingCategory = $settings->getSettingByName($nameCat); + $settingCategory["items"] = $arrCats; + $settings->updateArrSettingByName($nameCat, $settingCategory); + + //update value to first category + $value = $settings->getSettingValue($nameCat); + if(empty($value)){ + + $settings->updateSettingValue($nameCat, $firstValue); + } + + return($settings); + } + + + } + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/inc_php/revslider_slide.class.php b/src/wp-content/plugins/revslider/inc_php/revslider_slide.class.php new file mode 100644 index 0000000..d7752d8 --- /dev/null +++ b/src/wp-content/plugins/revslider/inc_php/revslider_slide.class.php @@ -0,0 +1,1204 @@ +id = $record["id"]; + $this->sliderID = $record["slider_id"]; + $this->slideOrder = $record["slide_order"]; + + $params = $record["params"]; + $params = (array)json_decode($params); + + $layers = $record["layers"]; + $layers = (array)json_decode($layers); + $layers = UniteFunctionsRev::convertStdClassToArray($layers); + + $imageID = UniteFunctionsRev::getVal($params, "image_id"); + + //get image url and thumb url + if(!empty($imageID)){ + $this->imageID = $imageID; + + $imageUrl = UniteFunctionsWPRev::getUrlAttachmentImage($imageID); + if(empty($imageUrl)) + $imageUrl = UniteFunctionsRev::getVal($params, "image"); + + $this->imageThumb = UniteFunctionsWPRev::getUrlAttachmentImage($imageID,UniteFunctionsWPRev::THUMB_MEDIUM); + + }else{ + $imageUrl = UniteFunctionsRev::getVal($params, "image"); + } + + if(is_ssl()){ + $imageUrl = str_replace("http://", "https://", $imageUrl); + } + + //dmp($imageUrl);exit(); + + //set image path, file and url + $this->imageUrl = $imageUrl; + + $this->imageFilepath = UniteFunctionsWPRev::getImagePathFromURL($this->imageUrl); + $realPath = UniteFunctionsWPRev::getPathContent().$this->imageFilepath; + + if(file_exists($realPath) == false || is_file($realPath) == false) + $this->imageFilepath = ""; + + $this->imageFilename = basename($this->imageUrl); + + $this->params = $params; + $this->arrLayers = $layers; + + } + + + /** + * + * init by another slide + */ + private function initBySlide(RevSlide $slide){ + + $this->id = "template"; + $this->templateID = $slide->getID(); + $this->sliderID = $slide->getSliderID(); + $this->slideOrder = $slide->getOrder(); + + $this->imageUrl = $slide->getImageUrl(); + $this->imageID = $slide->getImageID(); + $this->imageThumb = $slide->getThumbUrl(); + $this->imageFilepath = $slide->getImageFilepath(); + $this->imageFilename = $slide->getImageFilename(); + + $this->params = $slide->getParams(); + + $this->arrLayers = $slide->getLayers(); + + $this->arrChildren = $slide->getArrChildrenPure(); + } + + + + /** + * + * init slide by post data + */ + public function initByPostData($postData, RevSlide $slideTemplate, $sliderID){ + + $this->postData = $this->postData; + + $postID = $postData["ID"]; + + $arrWildcardsValues = RevOperations::getPostWilcardValues($postID); + $slideTemplateID = UniteFunctionsRev::getVal($arrWildcardsValues, "slide_template"); + + if(!empty($slideTemplateID) && is_numeric($slideTemplateID)){ + + //init by local template, if fail, init by global (slider) template + try{ + + $slideTemplateLocal = new RevSlide(); + $slideTemplateLocal->initByID($slideTemplateID); + $this->initBySlide($slideTemplateLocal); + } + catch(Exception $e){ + $this->initBySlide($slideTemplate); + } + + }else{ + //init by global template + $this->initBySlide($slideTemplate); + + } + + //set some slide params + $this->id = $postID; + $this->params["title"] = UniteFunctionsRev::getVal($postData, "post_title"); + + if($this->params['enable_link'] == "true" && $this->params['link_type'] == "regular"){ + $link = get_permalink($postID); + $this->params["link"] = str_replace("%link%", $link, $this->params["link"]); + $this->params["link"] = str_replace('-', '_REVSLIDER_', $this->params["link"]); + + //process meta tags: + $arrMatches = array(); + preg_match('/%meta:\w+%/', $this->params["link"], $arrMatches); + + foreach($arrMatches as $match){ + $meta = str_replace("%meta:", "", $match); + $meta = str_replace("%","",$meta); + $meta = str_replace('_REVSLIDER_', '-', $meta); + $metaValue = get_post_meta($postID,$meta,true); + $this->params["link"] = str_replace($match,$metaValue,$this->params["link"]); + } + + $this->params["link"] = str_replace('_REVSLIDER_','-',$this->params["link"]); + + } + + $status = $postData["post_status"]; + + if($status == "publish") + $this->params["state"] = "published"; + else + $this->params["state"] = "unpublished"; + + //set image + $thumbID = UniteFunctionsWPRev::getPostThumbID($postID); + + if(!empty($thumbID)) + $this->setImageByImageID($thumbID); + + //replace placeholders in layers: + $this->setLayersByPostData($postData, $sliderID); + } + + + /** + * + * replace layer placeholders by post data + */ + private function setLayersByPostData($postData,$sliderID){ + + $postID = $postData["ID"]; + + $title = UniteFunctionsRev::getVal($postData, "post_title"); + + $excerpt_limit = $this->getSliderParam($sliderID,"excerpt_limit",55,RevSlider::VALIDATE_NUMERIC); + $excerpt_limit = (int)$excerpt_limit; + $excerpt = UniteFunctionsWPRev::getExcerptById($postID, $excerpt_limit); + + $alias = UniteFunctionsRev::getVal($postData, "post_name"); + + $content = UniteFunctionsRev::getVal($postData, "post_content"); + + $link = get_permalink($postID); + + $postDate = UniteFunctionsRev::getVal($postData, "post_date_gmt"); + $postDate = UniteFunctionsWPRev::convertPostDate($postDate); + + $dateModified = UniteFunctionsRev::getVal($postData, "post_modified"); + $dateModified = UniteFunctionsWPRev::convertPostDate($dateModified); + + $authorID = UniteFunctionsRev::getVal($postData, "post_author"); + $authorName = UniteFunctionsWPRev::getUserDisplayName($authorID); + + $postCatsIDs = $postData["post_category"]; + $catlist = UniteFunctionsWPRev::getCategoriesHtmlList($postCatsIDs); + $taglist = UniteFunctionsWPRev::getTagsHtmlList($postID); + + $numComments = UniteFunctionsRev::getVal($postData, "comment_count"); + + foreach($this->arrLayers as $key=>$layer){ + + $text = UniteFunctionsRev::getVal($layer, "text"); + + $text = str_replace("%title%", $title, $text); + $text = str_replace("%excerpt%", $excerpt, $text); + $text = str_replace("%alias%", $alias, $text); + $text = str_replace("%content%", $content, $text); + $text = str_replace("%link%", $link, $text); + $text = str_replace("%date%", $postDate , $text); + $text = str_replace("%date_modified%", $dateModified , $text); + $text = str_replace("%author_name%", $authorName , $text); + $text = str_replace("%num_comments%", $numComments , $text); + $text = str_replace("%catlist%", $catlist , $text); + $text = str_replace("%taglist%", $taglist , $text); + + //process meta tags: + $arrMatches = array(); + $text = str_replace('-', '_REVSLIDER_', $text); + + preg_match('/%meta:\w+%/', $text, $arrMatches); + + foreach($arrMatches as $match){ + $meta = str_replace("%meta:", "", $match); + $meta = str_replace("%","",$meta); + $meta = str_replace('_REVSLIDER_', '-', $meta); + $metaValue = get_post_meta($postID,$meta,true); + + $text = str_replace($match,$metaValue,$text); + + } + $text = str_replace('_REVSLIDER_','-',$text); + + //replace event's template + if(UniteEmRev::isEventsExists()){ + $eventData = UniteEmRev::getEventPostData($postID); + if(!empty($eventData)){ + foreach($eventData as $eventKey=>$eventValue){ + $eventPlaceholder = "%event_".$eventKey."%"; + $text = str_replace($eventPlaceholder, $eventValue , $text); + } + } + } + + + //$text = str_replace("location", "maxim" , $text); + + $layer["text"] = $text; + $this->arrLayers[$key] = $layer; + } + + //$allMeta = get_post_meta($postID); + //dmp($allMeta);exit(); + } + + + /** + * + * init the slider by id + */ + public function initByID($slideid){ + UniteFunctionsRev::validateNumeric($slideid,"Slide ID"); + $slideid = $this->db->escape($slideid); + $record = $this->db->fetchSingle(GlobalsRevSlider::$table_slides,"id=$slideid"); + + $this->initByData($record); + } + + + /** + * + * set slide image by image id + */ + private function setImageByImageID($imageID){ + + $this->imageID = $imageID; + + $this->imageUrl = UniteFunctionsWPRev::getUrlAttachmentImage($imageID); + $this->imageThumb = UniteFunctionsWPRev::getUrlAttachmentImage($imageID,UniteFunctionsWPRev::THUMB_MEDIUM); + + if(empty($this->imageUrl)) + return(false); + + $this->params["background_type"] = "image"; + + if(is_ssl()){ + $this->imageUrl = str_replace("http://", "https://", $this->imageUrl); + } + + $this->imageFilepath = UniteFunctionsWPRev::getImagePathFromURL($this->imageUrl); + $realPath = UniteFunctionsWPRev::getPathContent().$this->imageFilepath; + + if(file_exists($realPath) == false || is_file($realPath) == false) + $this->imageFilepath = ""; + + $this->imageFilename = basename($this->imageUrl); + } + + /** + * + * set children array + */ + public function setArrChildren($arrChildren){ + $this->arrChildren = $arrChildren; + } + + + /** + * + * get children array + */ + public function getArrChildren(){ + + $this->validateInited(); + + if($this->arrChildren === null){ + $slider = new RevSlider(); + $slider->initByID($this->sliderID); + $this->arrChildren = $slider->getArrSlideChildren($this->id); + } + + return($this->arrChildren); + } + + /** + * + * return if the slide from post + */ + public function isFromPost(){ + return !empty($this->postData); + } + + + /** + * + * get post data + */ + public function getPostData(){ + return($this->postData); + } + + + /** + * + * get children array as is + */ + public function getArrChildrenPure(){ + return($this->arrChildren); + } + + /** + * + * return if the slide is parent slide + */ + public function isParent(){ + $parentID = $this->getParam("parentid",""); + return(!empty($parentID)); + } + + + /** + * + * get slide language + */ + public function getLang(){ + $lang = $this->getParam("lang","all"); + return($lang); + } + + /** + * + * return parent slide. If the slide is parent, return this slide. + */ + public function getParentSlide(){ + $parentID = $this->getParam("parentid",""); + if(empty($parentID)) + return($this); + + $parentSlide = new RevSlide(); + $parentSlide->initByID($parentID); + return($parentSlide); + } + + /** + * + * get array of children id's + */ + public function getArrChildrenIDs(){ + $arrChildren = $this->getArrChildren(); + $arrChildrenIDs = array(); + foreach($arrChildren as $child){ + $childID = $child->getID(); + $arrChildrenIDs[] = $childID; + } + + return($arrChildrenIDs); + } + + + /** + * + * get array of children array and languages, the first is current language. + */ + public function getArrChildrenLangs($includeParent = true){ + $this->validateInited(); + $slideID = $this->id; + + if($includeParent == true){ + $lang = $this->getParam("lang","all"); + $arrOutput = array(); + $arrOutput[] = array("slideid"=>$slideID,"lang"=>$lang,"isparent"=>true); + } + + $arrChildren = $this->getArrChildren(); + + foreach($arrChildren as $child){ + $childID = $child->getID(); + $childLang = $child->getParam("lang","all"); + $arrOutput[] = array("slideid"=>$childID,"lang"=>$childLang,"isparent"=>false); + } + + return($arrOutput); + } + + /** + * + * get children language codes (including current slide lang code) + */ + public function getArrChildLangCodes($includeParent = true){ + $arrLangsWithSlideID = $this->getArrChildrenLangs($includeParent); + $arrLangCodes = array(); + foreach($arrLangsWithSlideID as $item){ + $lang = $item["lang"]; + $arrLangCodes[$lang] = $lang; + } + + return($arrLangCodes); + } + + + /** + * + * get slide ID + */ + public function getID(){ + return($this->id); + } + + + /** + * + * get slide order + */ + public function getOrder(){ + $this->validateInited(); + return($this->slideOrder); + } + + + /** + * + * get layers in json format + */ + public function getLayers(){ + $this->validateInited(); + return($this->arrLayers); + } + + /** + * + * modify layer links for export + */ + public function getLayersForExport($useDummy = false){ + $this->validateInited(); + $arrLayersNew = array(); + foreach($this->arrLayers as $key=>$layer){ + $imageUrl = UniteFunctionsRev::getVal($layer, "image_url"); + if(!empty($imageUrl)) + $layer["image_url"] = UniteFunctionsWPRev::getImagePathFromURL($layer["image_url"]); + + $arrLayersNew[] = $layer; + } + + return($arrLayersNew); + } + + /** + * + * get params for export + */ + public function getParamsForExport(){ + $arrParams = $this->getParams(); + $urlImage = UniteFunctionsRev::getVal($arrParams, "image"); + if(!empty($urlImage)) + $arrParams["image"] = UniteFunctionsWPRev::getImagePathFromURL($urlImage); + + return($arrParams); + } + + + /** + * normalize layers text, and get layers + * + */ + public function getLayersNormalizeText(){ + $arrLayersNew = array(); + foreach ($this->arrLayers as $key=>$layer){ + $text = $layer["text"]; + $text = addslashes($text); + $layer["text"] = $text; + $arrLayersNew[] = $layer; + } + + return($arrLayersNew); + } + + + /** + * + * get slide params + */ + public function getParams(){ + $this->validateInited(); + return($this->params); + } + + + /** + * + * get parameter from params array. if no default, then the param is a must! + */ + function getParam($name,$default=null){ + + if($default === null){ + if(!array_key_exists($name, $this->params)) + UniteFunctionsRev::throwError("The param $name not found in slide params."); + $default = ""; + } + + return UniteFunctionsRev::getVal($this->params, $name,$default); + } + + + /** + * + * get image filename + */ + public function getImageFilename(){ + return($this->imageFilename); + } + + + /** + * + * get image filepath + */ + public function getImageFilepath(){ + return($this->imageFilepath); + } + + + /** + * + * get image url + */ + public function getImageUrl(){ + + return($this->imageUrl); + } + + + /** + * + * get image id + */ + public function getImageID(){ + return($this->imageID); + } + + /** + * + * get thumb url + */ + public function getThumbUrl(){ + $thumbUrl = $this->imageUrl; + if(!empty($this->imageThumb)) + $thumbUrl = $this->imageThumb; + + return($thumbUrl); + } + + + /** + * + * get the slider id + */ + public function getSliderID(){ + return($this->sliderID); + } + + /** + * + * get slider param + */ + private function getSliderParam($sliderID,$name,$default,$validate=null){ + + if(empty($this->slider)){ + $this->slider = new RevSlider(); + $this->slider->initByID($sliderID); + } + + $param = $this->slider->getParam($name,$default,$validate); + + return($param); + } + + + /** + * + * validate that the slider exists + */ + private function validateSliderExists($sliderID){ + $slider = new RevSlider(); + $slider->initByID($sliderID); + } + + /** + * + * validate that the slide is inited and the id exists. + */ + private function validateInited(){ + if(empty($this->id)) + UniteFunctionsRev::throwError("The slide is not inited!!!"); + } + + + /** + * + * create the slide (from image) + */ + public function createSlide($sliderID,$obj=""){ + + $imageID = null; + + if(is_array($obj)){ + $urlImage = UniteFunctionsRev::getVal($obj, "url"); + $imageID = UniteFunctionsRev::getVal($obj, "id"); + }else{ + $urlImage = $obj; + } + + //get max order + $slider = new RevSlider(); + $slider->initByID($sliderID); + $maxOrder = $slider->getMaxOrder(); + $order = $maxOrder+1; + + $params = array(); + if(!empty($urlImage)){ + $params["background_type"] = "image"; + $params["image"] = $urlImage; + if(!empty($imageID)) + $params["image_id"] = $imageID; + + }else{ //create transparent slide + + $params["background_type"] = "trans"; + } + + $jsonParams = json_encode($params); + + $arrInsert = array("params"=>$jsonParams, + "slider_id"=>$sliderID, + "slide_order"=>$order, + "layers"=>"" + ); + + $slideID = $this->db->insert(GlobalsRevSlider::$table_slides, $arrInsert); + + return($slideID); + } + + /** + * + * update slide image from data + */ + public function updateSlideImageFromData($data){ + + $sliderID = UniteFunctionsRev::getVal($data, "slider_id"); + $slider = new RevSlider(); + $slider->initByID($sliderID); + + $slideID = UniteFunctionsRev::getVal($data, "slide_id"); + $urlImage = UniteFunctionsRev::getVal($data, "url_image"); + UniteFunctionsRev::validateNotEmpty($urlImage); + $imageID = UniteFunctionsRev::getVal($data, "image_id"); + if($slider->isSlidesFromPosts()){ + + if(!empty($imageID)) + UniteFunctionsWPRev::updatePostThumbnail($slideID, $imageID); + + }else{ + $this->initByID($slideID); + + $arrUpdate = array(); + $arrUpdate["image"] = $urlImage; + $arrUpdate["image_id"] = $imageID; + + $this->updateParamsInDB($arrUpdate); + } + + return($urlImage); + } + + + + /** + * + * update slide parameters in db + */ + private function updateParamsInDB($arrUpdate = array()){ + $this->validateInited(); + $this->params = array_merge($this->params,$arrUpdate); + $jsonParams = json_encode($this->params); + + $arrDBUpdate = array("params"=>$jsonParams); + + $this->db->update(GlobalsRevSlider::$table_slides,$arrDBUpdate,array("id"=>$this->id)); + } + + + /** + * + * update current layers in db + */ + private function updateLayersInDB($arrLayers = null){ + $this->validateInited(); + + if($arrLayers === null) + $arrLayers = $this->arrLayers; + + $jsonLayers = json_encode($arrLayers); + $arrDBUpdate = array("layers"=>$jsonLayers); + + $this->db->update(GlobalsRevSlider::$table_slides,$arrDBUpdate,array("id"=>$this->id)); + } + + + /** + * + * update parent slideID + */ + public function updateParentSlideID($parentID){ + $arrUpdate = array(); + $arrUpdate["parentid"] = $parentID; + $this->updateParamsInDB($arrUpdate); + } + + + /** + * + * sort layers by order + */ + private function sortLayersByOrder($layer1,$layer2){ + $layer1 = (array)$layer1; + $layer2 = (array)$layer2; + + $order1 = UniteFunctionsRev::getVal($layer1, "order",1); + $order2 = UniteFunctionsRev::getVal($layer2, "order",2); + if($order1 == $order2) + return(0); + + return($order1 > $order2); + } + + + /** + * + * go through the layers and fix small bugs if exists + */ + private function normalizeLayers($arrLayers){ + + usort($arrLayers,array($this,"sortLayersByOrder")); + + $arrLayersNew = array(); + foreach ($arrLayers as $key=>$layer){ + + $layer = (array)$layer; + + //set type + $type = UniteFunctionsRev::getVal($layer, "type","text"); + $layer["type"] = $type; + + //normalize position: + $layer["left"] = round($layer["left"]); + $layer["top"] = round($layer["top"]); + + //unset order + unset($layer["order"]); + + //modify text + $layer["text"] = stripcslashes($layer["text"]); + + $arrLayersNew[] = $layer; + } + + return($arrLayersNew); + } + + + + /** + * + * normalize params + */ + private function normalizeParams($params){ + + $urlImage = UniteFunctionsRev::getVal($params, "image_url"); + + //init the id if absent + $params["image_id"] = UniteFunctionsRev::getVal($params, "image_id"); + + $params["image"] = $urlImage; + unset($params["image_url"]); + + if(isset($params["video_description"])) + $params["video_description"] = UniteFunctionsRev::normalizeTextareaContent($params["video_description"]); + + return($params); + } + + + /** + * + * update slide from data + * @param $data + */ + public function updateSlideFromData($data, $slideSettings){ + + $slideID = UniteFunctionsRev::getVal($data, "slideid"); + $this->initByID($slideID); + + //treat params + $params = UniteFunctionsRev::getVal($data, "params"); + $params = $this->normalizeParams($params); + + //modify the values according the settings + $params = $slideSettings->setStoredValues($params); + + //preserve old data that not included in the given data + $params = array_merge($this->params,$params); + + //treat layers + $layers = UniteFunctionsRev::getVal($data, "layers"); + + if(gettype($layers) == "string"){ + $layersStrip = stripslashes($layers); + $layersDecoded = json_decode($layersStrip); + if(empty($layersDecoded)) + $layersDecoded = json_decode($layers); + + $layers = UniteFunctionsRev::convertStdClassToArray($layersDecoded); + } + + if(empty($layers) || gettype($layers) != "array") + $layers = array(); + + $layers = $this->normalizeLayers($layers); + + $arrUpdate = array(); + $arrUpdate["layers"] = json_encode($layers); + $arrUpdate["params"] = json_encode($params); + + $this->db->update(GlobalsRevSlider::$table_slides,$arrUpdate,array("id"=>$this->id)); + + RevOperations::updateDynamicCaptions(); + } + + + + /** + * + * delete slide by slideid + */ + public function deleteSlide(){ + $this->validateInited(); + + $this->db->delete(GlobalsRevSlider::$table_slides,"id='".$this->id."'"); + } + + + /** + * + * delete slide children + */ + public function deleteChildren(){ + $this->validateInited(); + $arrChildren = $this->getArrChildren(); + foreach($arrChildren as $child) + $child->deleteSlide(); + } + + + /** + * + * delete slide from data + */ + public function deleteSlideFromData($data){ + + $sliderID = UniteFunctionsRev::getVal($data, "sliderID"); + $slider = new RevSlider(); + $slider->initByID($sliderID); + + $isPost = $slider->isSlidesFromPosts(); + + if($isPost == true){ //delete post + + $postID = UniteFunctionsRev::getVal($data, "slideID"); + UniteFunctionsWPRev::deletePost($postID); + + }else{ //delete slide + + $slideID = UniteFunctionsRev::getVal($data, "slideID"); + $this->initByID($slideID); + $this->deleteChildren(); + $this->deleteSlide(); + + } + + RevOperations::updateDynamicCaptions(); + + } + + + /** + * + * set params from client + */ + public function setParams($params){ + $params = $this->normalizeParams($params); + $this->params = $params; + } + + + /** + * + * set layers from client + */ + public function setLayers($layers){ + $layers = $this->normalizeLayers($layers); + $this->arrLayers = $layers; + } + + + /** + /* toggle slide state from data + */ + public function toggleSlideStatFromData($data){ + + $sliderID = UniteFunctionsRev::getVal($data, "slider_id"); + $slider = new RevSlider(); + $slider->initByID($sliderID); + + $slideID = UniteFunctionsRev::getVal($data, "slide_id"); + + if($slider->isSlidesFromPosts()){ + $postData = UniteFunctionsWPRev::getPost($slideID); + + $oldState = $postData["post_status"]; + $newState = ($oldState == UniteFunctionsWPRev::STATE_PUBLISHED)?UniteFunctionsWPRev::STATE_DRAFT:UniteFunctionsWPRev::STATE_PUBLISHED; + + //update the state in wp + UniteFunctionsWPRev::updatePostState($slideID, $newState); + + //return state: + $newState = ($newState == UniteFunctionsWPRev::STATE_PUBLISHED)?"published":"unpublished"; + + }else{ + $this->initByID($slideID); + + $state = $this->getParam("state","published"); + $newState = ($state == "published")?"unpublished":"published"; + + $arrUpdate = array(); + $arrUpdate["state"] = $newState; + + $this->updateParamsInDB($arrUpdate); + + } + + return($newState); + } + + + /** + * + * updatye slide language from data + */ + private function updateLangFromData($data){ + + $slideID = UniteFunctionsRev::getVal($data, "slideid"); + $this->initByID($slideID); + + $lang = UniteFunctionsRev::getVal($data, "lang"); + + $arrUpdate = array(); + $arrUpdate["lang"] = $lang; + $this->updateParamsInDB($arrUpdate); + + $response = array(); + $response["url_icon"] = UniteWpmlRev::getFlagUrl($lang); + $response["title"] = UniteWpmlRev::getLangTitle($lang); + $response["operation"] = "update"; + + return($response); + } + + + /** + * + * add language (add slide that connected to current slide) from data + */ + private function addLangFromData($data){ + $sliderID = UniteFunctionsRev::getVal($data, "sliderid"); + $slideID = UniteFunctionsRev::getVal($data, "slideid"); + $lang = UniteFunctionsRev::getVal($data, "lang"); + + //duplicate slide + $slider = new RevSlider(); + $slider->initByID($sliderID); + $newSlideID = $slider->duplicateSlide($slideID); + + //update new slide + $this->initByID($newSlideID); + + $arrUpdate = array(); + $arrUpdate["lang"] = $lang; + $arrUpdate["parentid"] = $slideID; + $this->updateParamsInDB($arrUpdate); + + $urlIcon = UniteWpmlRev::getFlagUrl($lang); + $title = UniteWpmlRev::getLangTitle($lang); + + $newSlide = new RevSlide(); + $newSlide->initByID($slideID); + $arrLangCodes = $newSlide->getArrChildLangCodes(); + $isAll = UniteWpmlRev::isAllLangsInArray($arrLangCodes); + + $html = "
          • + +
            +
          • "; + + $response = array(); + $response["operation"] = "add"; + $response["isAll"] = $isAll; + $response["html"] = $html; + + return($response); + } + + + /** + * + * delete slide from language menu data + */ + private function deleteSlideFromLangData($data){ + + $slideID = UniteFunctionsRev::getVal($data, "slideid"); + $this->initByID($slideID); + $this->deleteSlide(); + + $response = array(); + $response["operation"] = "delete"; + return($response); + } + + + /** + * + * add or update language from data + */ + public function doSlideLangOperation($data){ + + $operation = UniteFunctionsRev::getVal($data, "operation"); + switch($operation){ + case "add": + $response = $this->addLangFromData($data); + break; + case "delete": + $response = $this->deleteSlideFromLangData($data); + break; + case "update": + default: + $response = $this->updateLangFromData($data); + break; + } + + return($response); + } + + /** + * + * get thumb url + */ + public function getUrlImageThumb(){ + + //get image url by thumb + if(!empty($this->imageID)){ + $urlImage = UniteFunctionsWPRev::getUrlAttachmentImage($this->imageID, UniteFunctionsWPRev::THUMB_MEDIUM); + }else{ + //get from cache + if(!empty($this->imageFilepath)){ + $urlImage = UniteBaseClassRev::getImageUrl($this->imageFilepath,200,100,true); + } + else + $urlImage = $this->imageUrl; + } + + if(empty($urlImage)) + $urlImage = $this->imageUrl; + + return($urlImage); + } + + /** + * + * replace image url's among slide image and layer images + */ + public function replaceImageUrls($urlFrom, $urlTo){ + + $this->validateInited(); + + $urlImage = UniteFunctionsRev::getVal($this->params, "image"); + + if(strpos($urlImage, $urlFrom) !== false){ + $imageNew = str_replace($urlFrom, $urlTo, $urlImage); + $this->params["image"] = $imageNew; + $this->updateParamsInDB(); + } + + + // update image url in layers + $isUpdated = false; + foreach($this->arrLayers as $key=>$layer){ + $type = UniteFunctionsRev::getVal($layer, "type"); + if($type == "image"){ + $urlImage = UniteFunctionsRev::getVal($layer, "image_url"); + if(strpos($urlImage, $urlFrom) !== false){ + $newUrlImage = str_replace($urlFrom, $urlTo, $urlImage); + $this->arrLayers[$key]["image_url"] = $newUrlImage; + $isUpdated = true; + } + } + } + + if($isUpdated == true) + $this->updateLayersInDB(); + + } + + /** + * + * replace transition styles on all slides + */ + public function changeTransition($transition){ + $this->validateInited(); + + $this->params["slide_transition"] = $transition; + $this->updateParamsInDB(); + } + + /** + * + * replace transition duration on all slides + */ + public function changeTransitionDuration($transitionDuration){ + $this->validateInited(); + + $this->params["transition_duration"] = $transitionDuration; + $this->updateParamsInDB(); + } + + } + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/inc_php/revslider_slider.class.php b/src/wp-content/plugins/revslider/inc_php/revslider_slider.class.php new file mode 100644 index 0000000..196028d --- /dev/null +++ b/src/wp-content/plugins/revslider/inc_php/revslider_slider.class.php @@ -0,0 +1,1703 @@ +id)) + return(true); + + return(false); + } + + + /** + * + * validate that the slider is inited. if not - throw error + */ + private function validateInited(){ + if(empty($this->id)) + UniteFunctionsRev::throwError("The slider is not inited!"); + } + + /** + * + * init slider by db data + * + */ + public function initByDBData($arrData){ + + $this->id = $arrData["id"]; + $this->title = $arrData["title"]; + $this->alias = $arrData["alias"]; + + $params = $arrData["params"]; + $params = (array)json_decode($params); + + $this->arrParams = $params; + } + + + /** + * + * init the slider object by database id + */ + public function initByID($sliderID){ + UniteFunctionsRev::validateNumeric($sliderID,"Slider ID"); + $sliderID = $this->db->escape($sliderID); + + try{ + $sliderData = $this->db->fetchSingle(GlobalsRevSlider::$table_sliders,"id=$sliderID"); + }catch(Exception $e){ + UniteFunctionsRev::throwError("Slider with ID: $sliderID Not Found"); + } + + $this->initByDBData($sliderData); + } + + /** + * + * init slider by alias + */ + public function initByAlias($alias){ + $alias = $this->db->escape($alias); + + try{ + $where = "alias='$alias'"; + + $sliderData = $this->db->fetchSingle(GlobalsRevSlider::$table_sliders,$where); + + }catch(Exception $e){ + $arrAliases = $this->getAllSliderAliases(); + $strAliases = ""; + if(!empty($arrAliases)) + $strAliases = "'".implode("' or '", $arrAliases)."'"; + + $errorMessage = "Slider with alias $alias not found."; + if(!empty($strAliases)) + $errorMessage .= "

            Maybe you mean: ".$strAliases; + + UniteFunctionsRev::throwError($errorMessage); + } + + $this->initByDBData($sliderData); + } + + + /** + * + * init by id or alias + */ + public function initByMixed($mixed){ + if(is_numeric($mixed)) + $this->initByID($mixed); + else + $this->initByAlias($mixed); + } + + + /** + * + * get data functions + */ + public function getTitle(){ + return($this->title); + } + + public function getID(){ + return($this->id); + } + + public function getParams(){ + return($this->arrParams); + } + + /** + * + * set slider params + */ + public function setParams($arrParams){ + $this->arrParams = $arrParams; + } + + + /** + * + * get parameter from params array. if no default, then the param is a must! + */ + function getParam($name,$default=null,$validateType = null,$title=""){ + + if($default === null){ + if(!array_key_exists($name, $this->arrParams)) + UniteFunctionsRev::throwError("The param $name not found in slider params."); + + $default = ""; + } + + $value = UniteFunctionsRev::getVal($this->arrParams, $name,$default); + + //validation: + switch($validateType){ + case self::VALIDATE_NUMERIC: + case self::VALIDATE_EMPTY: + $paramTitle = !empty($title)?$title:$name; + if($value !== "0" && $value !== 0 && empty($value)) + UniteFunctionsRev::throwError("The param $paramTitle should not be empty."); + break; + case self::VALIDATE_NUMERIC: + $paramTitle = !empty($title)?$title:$name; + if(!is_numeric($value)) + UniteFunctionsRev::throwError("The param $paramTitle should be numeric. Now it's: $value"); + break; + case self::FORCE_NUMERIC: + if(!is_numeric($value)){ + $value = 0; + if(!empty($default)) + $value = $default; + } + break; + } + + return $value; + } + + public function getAlias(){ + return($this->alias); + } + + /** + * get combination of title (alias) + */ + public function getShowTitle(){ + $showTitle = $this->title." ($this->alias)"; + return($showTitle); + } + + /** + * + * get slider shortcode + */ + public function getShortcode(){ + $shortCode = "[rev_slider ".$this->alias."]"; + return($shortCode); + } + + + /** + * + * check if alias exists in DB + */ + private function isAliasExistsInDB($alias){ + $alias = $this->db->escape($alias); + + $where = "alias='$alias'"; + if(!empty($this->id)) + $where .= " and id != '".$this->id."'"; + + $response = $this->db->fetch(GlobalsRevSlider::$table_sliders,$where); + return(!empty($response)); + + } + + + /** + * + * validate settings for add + */ + private function validateInputSettings($title,$alias,$params){ + UniteFunctionsRev::validateNotEmpty($title,"title"); + UniteFunctionsRev::validateNotEmpty($alias,"alias"); + + if($this->isAliasExistsInDB($alias)) + UniteFunctionsRev::throwError("Some other slider with alias '$alias' already exists"); + + $sourceType = UniteFunctionsRev::getVal($params, "source_type"); + $tempaletID = UniteFunctionsRev::getVal($params, "slider_template_id"); + + if($sourceType == "posts" && empty($tempaletID)) + UniteFunctionsRev::throwError("The slider should have a template, please create a slider through 'Create New Slider Template' that will be a template to this slider."); + + } + + + + /** + * + * create / update slider from options + */ + private function createUpdateSliderFromOptions($options,$sliderID = null, $settingsMain, $settingsParams){ + + $arrMain = UniteFunctionsRev::getVal($options, "main"); + $params = UniteFunctionsRev::getVal($options, "params"); + $isTemplate = UniteFunctionsRev::getVal($options, "template"); + + if($isTemplate == "true") + $params['template'] = "true"; + else + $params['template'] = "false"; + + //trim all input data + $arrMain = UniteFunctionsRev::trimArrayItems($arrMain); + + //modify the data + $arrMain = $settingsMain->setStoredValues($arrMain); + + $params = UniteFunctionsRev::trimArrayItems($params); + $params = $settingsParams->setStoredValues($params); + + $params = array_merge($arrMain,$params); + + $title = UniteFunctionsRev::getVal($arrMain, "title"); + $alias = UniteFunctionsRev::getVal($arrMain, "alias"); + + if(!empty($sliderID)) + $this->initByID($sliderID); + + $this->validateInputSettings($title, $alias, $params); + + $jsonParams = json_encode($params); + + //insert slider to database + $arrData = array(); + $arrData["title"] = $title; + $arrData["alias"] = $alias; + $arrData["params"] = $jsonParams; + + if(empty($sliderID)){ //create slider + $sliderID = $this->db->insert(GlobalsRevSlider::$table_sliders,$arrData); + return($sliderID); + + }else{ //update slider + $this->initByID($sliderID); + + $sliderID = $this->db->update(GlobalsRevSlider::$table_sliders,$arrData,array("id"=>$sliderID)); + } + } + + + + /** + * + * delete slider from datatase + */ + private function deleteSlider(){ + + $this->validateInited(); + + //delete slider + $this->db->delete(GlobalsRevSlider::$table_sliders,"id=".$this->id); + + //delete slides + $this->deleteAllSlides(); + } + + /** + * + * delete all slides + */ + private function deleteAllSlides(){ + $this->validateInited(); + + $this->db->delete(GlobalsRevSlider::$table_slides,"slider_id=".$this->id); + } + + + /** + * + * get all slide children + */ + public function getArrSlideChildren($slideID){ + + $this->validateInited(); + $arrSlides = $this->getSlidesFromGallery(); + if(!isset($arrSlides[$slideID])) + UniteFunctionsRev::throwError("Slide with id: $slideID not found in the main slides of the slider. Maybe it's child slide."); + + $slide = $arrSlides[$slideID]; + $arrChildren = $slide->getArrChildren(); + + return($arrChildren); + } + + + + /** + * + * duplicate slider in datatase + */ + private function duplicateSlider(){ + + $this->validateInited(); + + //get slider number: + $response = $this->db->fetch(GlobalsRevSlider::$table_sliders); + $numSliders = count($response); + $newSliderSerial = $numSliders+1; + + $newSliderTitle = "Slider".$newSliderSerial; + $newSliderAlias = "slider".$newSliderSerial; + + //insert a new slider + $sqlSelect = "select ".GlobalsRevSlider::FIELDS_SLIDER." from ".GlobalsRevSlider::$table_sliders." where id=".$this->id.""; + $sqlInsert = "insert into ".GlobalsRevSlider::$table_sliders." (".GlobalsRevSlider::FIELDS_SLIDER.") ($sqlSelect)"; + + $this->db->runSql($sqlInsert); + $lastID = $this->db->getLastInsertID(); + UniteFunctionsRev::validateNotEmpty($lastID); + + //update the new slider with the title and the alias values + $arrUpdate = array(); + $arrUpdate["title"] = $newSliderTitle; + $arrUpdate["alias"] = $newSliderAlias; + + //update params + $params = $this->arrParams; + $params["title"] = $newSliderTitle; + $params["alias"] = $newSliderAlias; + $jsonParams = json_encode($params); + $arrUpdate["params"] = $jsonParams; + + $this->db->update(GlobalsRevSlider::$table_sliders, $arrUpdate, array("id"=>$lastID)); + + + //duplicate slides + $fields_slide = GlobalsRevSlider::FIELDS_SLIDE; + $fields_slide = str_replace("slider_id", $lastID, $fields_slide); + + $sqlSelect = "select ".$fields_slide." from ".GlobalsRevSlider::$table_slides." where slider_id=".$this->id; + $sqlInsert = "insert into ".GlobalsRevSlider::$table_slides." (".GlobalsRevSlider::FIELDS_SLIDE.") ($sqlSelect)"; + + $this->db->runSql($sqlInsert); + } + + + + /** + * + * duplicate slide + */ + public function duplicateSlide($slideID){ + $slide = new RevSlide(); + $slide->initByID($slideID); + $order = $slide->getOrder(); + $slides = $this->getSlidesFromGallery(); + $newOrder = $order+1; + $this->shiftOrder($newOrder); + + //do duplication + $sqlSelect = "select ".GlobalsRevSlider::FIELDS_SLIDE." from ".GlobalsRevSlider::$table_slides." where id=".$slideID; + $sqlInsert = "insert into ".GlobalsRevSlider::$table_slides." (".GlobalsRevSlider::FIELDS_SLIDE.") ($sqlSelect)"; + + $this->db->runSql($sqlInsert); + $lastID = $this->db->getLastInsertID(); + UniteFunctionsRev::validateNotEmpty($lastID); + + //update order + $arrUpdate = array("slide_order"=>$newOrder); + + $this->db->update(GlobalsRevSlider::$table_slides,$arrUpdate, array("id"=>$lastID)); + + return($lastID); + } + + + /** + * + * copy / move slide + */ + private function copyMoveSlide($slideID,$targetSliderID,$operation){ + + if($operation == "move"){ + + $targetSlider = new RevSlider(); + $targetSlider->initByID($targetSliderID); + $maxOrder = $targetSlider->getMaxOrder(); + $newOrder = $maxOrder+1; + $arrUpdate = array("slider_id"=>$targetSliderID,"slide_order"=>$newOrder); + + //update children + $arrChildren = $this->getArrSlideChildren($slideID); + foreach($arrChildren as $child){ + $childID = $child->getID(); + $this->db->update(GlobalsRevSlider::$table_slides,$arrUpdate,array("id"=>$childID)); + } + + $this->db->update(GlobalsRevSlider::$table_slides,$arrUpdate,array("id"=>$slideID)); + + }else{ //in place of copy + $newSlideID = $this->duplicateSlide($slideID); + $this->duplicateChildren($slideID, $newSlideID); + + $this->copyMoveSlide($newSlideID,$targetSliderID,"move"); + } + } + + + /** + * + * shift order of the slides from specific order + */ + private function shiftOrder($fromOrder){ + + $where = " slider_id=".$this->id." and slide_order >= $fromOrder"; + $sql = "update ".GlobalsRevSlider::$table_slides." set slide_order=(slide_order+1) where $where"; + $this->db->runSql($sql); + + } + + + /** + * + * create slider in database from options + */ + public function createSliderFromOptions($options,$settingsMain,$settingsParams){ + $sliderID = $this->createUpdateSliderFromOptions($options,null,$settingsMain,$settingsParams); + return($sliderID); + } + + + /** + * + * export slider from data, output a file for download + */ + public function exportSlider($useDummy = false){ + $export_zip = true; + if(function_exists("unzip_file") == false){ + if( UniteZipRev::isZipExists() == false) + $export_zip = false; + //UniteFunctionsRev::throwError("The ZipArchive php extension not exists, can't create the export file. Please turn it on in php ini."); + } + + if(!class_exists('ZipArchive')) $export_zip = false; + //if(!class_exists('ZipArchive')) UniteFunctionsRev::throwError("The ZipArchive php extension not exists, can't create the export file. Please turn it on in php ini."); + + if($export_zip){ + $zip = new ZipArchive; + $success = $zip->open(GlobalsRevSlider::$urlExportZip, ZipArchive::OVERWRITE); + + if($success == false) + throwError("Can't create zip file: ".GlobalsRevSlider::$urlExportZip); + + $this->validateInited(); + + $sliderParams = $this->getParamsForExport(); + $arrSlides = $this->getSlidesForExport($useDummy); + + $arrSliderExport = array("params"=>$sliderParams,"slides"=>$arrSlides); + + $strExport = serialize($arrSliderExport); + + //$strExportAnim = serialize(RevOperations::getFullCustomAnimations()); + + $exportname =(!empty($this->alias)) ? $this->alias.'.zip' : "slider_export.zip"; + + $usedCaptions = array(); + $usedAnimations = array(); + $usedImages = array(); + if(!empty($arrSlides) && count($arrSlides) > 0){ + foreach($arrSlides as $key => $slide){ + if(isset($slide['params']['image']) && $slide['params']['image'] != '') $usedImages[$slide['params']['image']] = true; //['params']['image'] background url + + if(isset($slide['layers']) && !empty($slide['layers']) && count($slide['layers']) > 0){ + foreach($slide['layers'] as $lKey => $layer){ + if(isset($layer['style']) && $layer['style'] != '') $usedCaptions[$layer['style']] = true; + if(isset($layer['animation']) && $layer['animation'] != '' && strpos($layer['animation'], 'customin') !== false) $usedAnimations[str_replace('customin-', '', $layer['animation'])] = true; + if(isset($layer['endanimation']) && $layer['endanimation'] != '' && strpos($layer['endanimation'], 'customout') !== false) $usedAnimations[str_replace('customout-', '', $layer['endanimation'])] = true; + if(isset($layer['image_url']) && $layer['image_url'] != '') $usedImages[$layer['image_url']] = true; //image_url if image caption + } + } + } + } + + $styles = ''; + if(!empty($usedCaptions)){ + $captions = array(); + foreach($usedCaptions as $class => $val){ + $captions[] = RevOperations::getCaptionsContentArray($class); + } + $styles = UniteCssParserRev::parseArrayToCss($captions, "\n"); + } + + $animations = ''; + if(!empty($usedAnimations)){ + $animation = array(); + foreach($usedAnimations as $anim => $val){ + $anima = RevOperations::getFullCustomAnimationByID($anim); + if($anima !== false) $animation[] = RevOperations::getFullCustomAnimationByID($anim); + + } + if(!empty($animation)) $animations = serialize($animation); + } + + //add images to zip + if(!empty($usedImages)){ + $upload_dir = UniteFunctionsWPRev::getPathUploads(); + + foreach($usedImages as $file => $val){ + if($useDummy == "true"){ //only use dummy images + + }else{ //use the real images + $zip->addFile($upload_dir.$file,'images/'.$file); + } + } + } + + $zip->addFromString("slider_export.txt", $strExport); //add slider settings + if(strlen(trim($animations)) > 0) $zip->addFromString("custom_animations.txt", $animations); //add custom animations + if(strlen(trim($styles)) > 0) $zip->addFromString("dynamic-captions.css", $styles); //add dynamic styles + + //$zip->addFromString("custom_animations.txt", $strExportAnim); //add custom animations + //$zip->addFile(GlobalsRevSlider::$filepath_dynamic_captions,'dynamic-captions.css'); //add dynamic styles + + $zip->addFile(GlobalsRevSlider::$filepath_static_captions,'static-captions.css'); //add static styles + $zip->close(); + + header("Content-type: application/zip"); + header("Content-Disposition: attachment; filename=".$exportname); + header("Pragma: no-cache"); + header("Expires: 0"); + readfile(GlobalsRevSlider::$urlExportZip); + + @unlink(GlobalsRevSlider::$urlExportZip); //delete file after sending it to user + }else{ //fallback, do old export + $this->validateInited(); + + $sliderParams = $this->getParamsForExport(); + $arrSlides = $this->getSlidesForExport(); + + $arrSliderExport = array("params"=>$sliderParams,"slides"=>$arrSlides); + + $strExport = serialize($arrSliderExport); + + if(!empty($this->alias)) + $filename = $this->alias.".txt"; + else + $filename = "slider_export.txt"; + + UniteFunctionsRev::downloadFile($strExport,$filename); + } + } + + + /** + * + * import slider from multipart form + */ + public function importSliderFromPost($updateAnim = true, $updateStatic = true){ + + try{ + + $sliderID = UniteFunctionsRev::getPostVariable("sliderid"); + $sliderExists = !empty($sliderID); + + if($sliderExists) + $this->initByID($sliderID); + + $filepath = $_FILES["import_file"]["tmp_name"]; + + if(file_exists($filepath) == false) + UniteFunctionsRev::throwError("Import file not found!!!"); + + //check if zip file or fallback to old, if zip, check if all files exist + if(!class_exists("ZipArchive")){ + $importZip = false; + }else{ + $zip = new ZipArchive; + $importZip = $zip->open($filepath, ZIPARCHIVE::CREATE); + } + if($importZip === true){ //true or integer. If integer, its not a correct zip file + + //check if files all exist in zip + $slider_export = $zip->getStream('slider_export.txt'); + $custom_animations = $zip->getStream('custom_animations.txt'); + $dynamic_captions = $zip->getStream('dynamic-captions.css'); + $static_captions = $zip->getStream('static-captions.css'); + + if(!$slider_export) UniteFunctionsRev::throwError("slider_export.txt does not exist!"); + //if(!$custom_animations) UniteFunctionsRev::throwError("custom_animations.txt does not exist!"); + //if(!$dynamic_captions) UniteFunctionsRev::throwError("dynamic-captions.css does not exist!"); + //if(!$static_captions) UniteFunctionsRev::throwError("static-captions.css does not exist!"); + + $content = ''; + $animations = ''; + $dynamic = ''; + $static = ''; + + while (!feof($slider_export)) $content .= fread($slider_export, 1024); + if($custom_animations){ while (!feof($custom_animations)) $animations .= fread($custom_animations, 1024); } + if($dynamic_captions){ while (!feof($dynamic_captions)) $dynamic .= fread($dynamic_captions, 1024); } + if($static_captions){ while (!feof($static_captions)) $static .= fread($static_captions, 1024); } + + fclose($slider_export); + if($custom_animations){ fclose($custom_animations); } + if($dynamic_captions){ fclose($dynamic_captions); } + if($static_captions){ fclose($static_captions); } + + //check for images! + + }else{ //check if fallback + //get content array + $content = @file_get_contents($filepath); + } + + if($importZip === true){ //we have a zip + $db = new UniteDBRev(); + + //update/insert custom animations + $animations = @unserialize($animations); + if(!empty($animations)){ + foreach($animations as $key => $animation){ //$animation['id'], $animation['handle'], $animation['params'] + $exist = $db->fetch(GlobalsRevSlider::$table_layer_anims, "handle = '".$animation['handle']."'"); + if(!empty($exist)){ //update the animation, get the ID + if($updateAnim == "true"){ //overwrite animation if exists + $arrUpdate = array(); + $arrUpdate['params'] = stripslashes(json_encode(str_replace("'", '"', $animation['params']))); + $db->update(GlobalsRevSlider::$table_layer_anims, $arrUpdate, array('handle' => $animation['handle'])); + + $id = $exist['0']['id']; + }else{ //insert with new handle + $arrInsert = array(); + $arrInsert["handle"] = 'copy_'.$animation['handle']; + $arrInsert["params"] = stripslashes(json_encode(str_replace("'", '"', $animation['params']))); + + $id = $db->insert(GlobalsRevSlider::$table_layer_anims, $arrInsert); + } + }else{ //insert the animation, get the ID + $arrInsert = array(); + $arrInsert["handle"] = $animation['handle']; + $arrInsert["params"] = stripslashes(json_encode(str_replace("'", '"', $animation['params']))); + + $id = $db->insert(GlobalsRevSlider::$table_layer_anims, $arrInsert); + } + + //and set the current customin-oldID and customout-oldID in slider params to new ID from $id + $content = str_replace(array('customin-'.$animation['id'], 'customout-'.$animation['id']), array('customin-'.$id, 'customout-'.$id), $content); + } + dmp(__("animations imported!",REVSLIDER_TEXTDOMAIN)); + }else{ + dmp(__("no custom animations found, if slider uses custom animations, the provided export may be broken...",REVSLIDER_TEXTDOMAIN)); + } + + //overwrite/append static-captions.css + if(!empty($static)){ + if($updateStatic == "true"){ //overwrite file + RevOperations::updateStaticCss($static); + }else{ //append + $static_cur = RevOperations::getStaticCss(); + $static = $static_cur."\n".$static; + RevOperations::updateStaticCss($static); + } + } + //overwrite/create dynamic-captions.css + //parse css to classes + $dynamicCss = UniteCssParserRev::parseCssToArray($dynamic); + + if(is_array($dynamicCss) && $dynamicCss !== false && count($dynamicCss) > 0){ + foreach($dynamicCss as $class => $styles){ + //check if static style or dynamic style + $class = trim($class); + + if((strpos($class, ':hover') === false && strpos($class, ':') !== false) || //before, after + strpos($class," ") !== false || // .tp-caption.imageclass img or .tp-caption .imageclass or .tp-caption.imageclass .img + strpos($class,".tp-caption") === false || // everything that is not tp-caption + (strpos($class,".") === false || strpos($class,"#") !== false) || // no class -> #ID or img + strpos($class,">") !== false){ //.tp-caption>.imageclass or .tp-caption.imageclass>img or .tp-caption.imageclass .img + continue; + } + + //is a dynamic style + if(strpos($class, ':hover') !== false){ + $class = trim(str_replace(':hover', '', $class)); + $arrInsert = array(); + $arrInsert["hover"] = json_encode($styles); + $arrInsert["settings"] = json_encode(array('hover' => 'true')); + }else{ + $arrInsert = array(); + $arrInsert["params"] = json_encode($styles); + } + //check if class exists + $result = $db->fetch(GlobalsRevSlider::$table_css, "handle = '".$class."'"); + + if(!empty($result)){ //update + $db->update(GlobalsRevSlider::$table_css, $arrInsert, array('handle' => $class)); + }else{ //insert + $arrInsert["handle"] = $class; + $db->insert(GlobalsRevSlider::$table_css, $arrInsert); + } + } + dmp(__("dynamic styles imported!",REVSLIDER_TEXTDOMAIN)); + }else{ + dmp(__("no dynamic styles found, if slider uses dynamic styles, the provided export may be broken...",REVSLIDER_TEXTDOMAIN)); + } + } + + $content = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $content); //clear errors in string + + $arrSlider = @unserialize($content); + if(empty($arrSlider)) + UniteFunctionsRev::throwError("Wrong export slider file format! This could be caused because the ZipArchive extension is not enabled."); + + //update slider params + $sliderParams = $arrSlider["params"]; + + if($sliderExists){ + $sliderParams["title"] = $this->arrParams["title"]; + $sliderParams["alias"] = $this->arrParams["alias"]; + $sliderParams["shortcode"] = $this->arrParams["shortcode"]; + } + + if(isset($sliderParams["background_image"])) + $sliderParams["background_image"] = UniteFunctionsWPRev::getImageUrlFromPath($sliderParams["background_image"]); + + $json_params = json_encode($sliderParams); + + //update slider or craete new + if($sliderExists){ + $arrUpdate = array("params"=>$json_params); + $this->db->update(GlobalsRevSlider::$table_sliders,$arrUpdate,array("id"=>$sliderID)); + } + else{ //new slider + $arrInsert = array(); + $arrInsert["params"] = $json_params; + $arrInsert["title"] = UniteFunctionsRev::getVal($sliderParams, "title","Slider1"); + $arrInsert["alias"] = UniteFunctionsRev::getVal($sliderParams, "alias","slider1"); + $sliderID = $this->db->insert(GlobalsRevSlider::$table_sliders,$arrInsert); + } + + //-------- Slides Handle ----------- + + //delete current slides + if($sliderExists) + $this->deleteAllSlides(); + + //create all slides + $arrSlides = $arrSlider["slides"]; + + $alreadyImported = array(); + + foreach($arrSlides as $slide){ + + $params = $slide["params"]; + $layers = $slide["layers"]; + + //convert params images: + if(isset($params["image"])){ + //import if exists in zip folder + if(trim($params["image"]) !== ''){ + if($importZip === true){ //we have a zip, check if exists + $image = $zip->getStream('images/'.$params["image"]); + if(!$image){ + echo $params["image"].' not found!
            '; + }else{ + if(!isset($alreadyImported['zip://'.$filepath."#".'images/'.$params["image"]])){ + $importImage = UniteFunctionsWPRev::import_media('zip://'.$filepath."#".'images/'.$params["image"], $sliderParams["alias"].'/'); + + if($importImage !== false){ + $alreadyImported['zip://'.$filepath."#".'images/'.$params["image"]] = $importImage['path']; + + $params["image"] = $importImage['path']; + } + }else{ + $params["image"] = $alreadyImported['zip://'.$filepath."#".'images/'.$params["image"]]; + } + } + } + } + $params["image"] = UniteFunctionsWPRev::getImageUrlFromPath($params["image"]); + } + + //convert layers images: + foreach($layers as $key=>$layer){ + if(isset($layer["image_url"])){ + //import if exists in zip folder + if(trim($layer["image_url"]) !== ''){ + if($importZip === true){ //we have a zip, check if exists + $image_url = $zip->getStream('images/'.$layer["image_url"]); + if(!$image_url){ + echo $layer["image_url"].' not found!
            '; + }else{ + if(!isset($alreadyImported['zip://'.$filepath."#".'images/'.$layer["image_url"]])){ + $importImage = UniteFunctionsWPRev::import_media('zip://'.$filepath."#".'images/'.$layer["image_url"], $sliderParams["alias"].'/'); + + if($importImage !== false){ + $alreadyImported['zip://'.$filepath."#".'images/'.$layer["image_url"]] = $importImage['path']; + + $layer["image_url"] = $importImage['path']; + } + }else{ + $layer["image_url"] = $alreadyImported['zip://'.$filepath."#".'images/'.$layer["image_url"]]; + } + } + } + } + $layer["image_url"] = UniteFunctionsWPRev::getImageUrlFromPath($layer["image_url"]); + $layers[$key] = $layer; + } + } + + //create new slide + $arrCreate = array(); + $arrCreate["slider_id"] = $sliderID; + $arrCreate["slide_order"] = $slide["slide_order"]; + $arrCreate["layers"] = json_encode($layers); + $arrCreate["params"] = json_encode($params); + + $this->db->insert(GlobalsRevSlider::$table_slides,$arrCreate); + } + + }catch(Exception $e){ + $errorMessage = $e->getMessage(); + return(array("success"=>false,"error"=>$errorMessage,"sliderID"=>$sliderID)); + } + + //update dynamic-captions.css + RevOperations::updateDynamicCaptions(); + + return(array("success"=>true,"sliderID"=>$sliderID)); + } + + + /** + * + * update slider from options + */ + public function updateSliderFromOptions($options,$settingsMain,$settingsParams){ + + $sliderID = UniteFunctionsRev::getVal($options, "sliderid"); + UniteFunctionsRev::validateNotEmpty($sliderID,"Slider ID"); + + $this->createUpdateSliderFromOptions($options,$sliderID,$settingsMain,$settingsParams); + } + + /** + * + * update some params in the slider + */ + private function updateParam($arrUpdate){ + $this->validateInited(); + + $this->arrParams = array_merge($this->arrParams,$arrUpdate); + $jsonParams = json_encode($this->arrParams); + $arrUpdateDB = array(); + $arrUpdateDB["params"] = $jsonParams; + + $this->db->update(GlobalsRevSlider::$table_sliders,$arrUpdateDB,array("id"=>$this->id)); + } + + + /** + * + * delete slider from input data + */ + public function deleteSliderFromData($data){ + $sliderID = UniteFunctionsRev::getVal($data, "sliderid"); + UniteFunctionsRev::validateNotEmpty($sliderID,"Slider ID"); + $this->initByID($sliderID); + + //check if template + $isTemplate = $this->getParam("template", "false"); + if($isTemplate == "true"){ + //check if template is used by other post sliders + $stillUsing = array(); + $arrSliders = $this->getArrSliders(); + if(!empty($arrSliders)){ + foreach($arrSliders as $slider){ + if($slider->isSlidesFromPosts() && $slider->getParam("slider_template_id",false) !== false){ + $stillUsing[] = $slider->getParam("title"); + } + } + } + if(!empty($stillUsing)) return $stillUsing; //if not empty, template is used by other sliders! Name which ones + } + + $this->deleteSlider(); + + return true; + } + + + /** + * + * delete slider from input data + */ + public function duplicateSliderFromData($data){ + $sliderID = UniteFunctionsRev::getVal($data, "sliderid"); + UniteFunctionsRev::validateNotEmpty($sliderID,"Slider ID"); + $this->initByID($sliderID); + $this->duplicateSlider(); + } + + + /** + * + * duplicate slide from input data + */ + public function duplicateSlideFromData($data){ + + //init the slider + $sliderID = UniteFunctionsRev::getVal($data, "sliderID"); + UniteFunctionsRev::validateNotEmpty($sliderID,"Slider ID"); + $this->initByID($sliderID); + + //get the slide id + $slideID = UniteFunctionsRev::getVal($data, "slideID"); + UniteFunctionsRev::validateNotEmpty($slideID,"Slide ID"); + $newSlideID = $this->duplicateSlide($slideID); + + $this->duplicateChildren($slideID, $newSlideID); + + return($sliderID); + } + + + /** + * + * duplicate slide children + * @param $slideID + */ + private function duplicateChildren($slideID,$newSlideID){ + + $arrChildren = $this->getArrSlideChildren($slideID); + + foreach($arrChildren as $childSlide){ + $childSlideID = $childSlide->getID(); + //duplicate + $duplicatedSlideID = $this->duplicateSlide($childSlideID); + + //update parent id + $duplicatedSlide = new RevSlide(); + $duplicatedSlide->initByID($duplicatedSlideID); + $duplicatedSlide->updateParentSlideID($newSlideID); + } + + } + + + /** + * + * copy / move slide from data + */ + public function copyMoveSlideFromData($data){ + + $sliderID = UniteFunctionsRev::getVal($data, "sliderID"); + UniteFunctionsRev::validateNotEmpty($sliderID,"Slider ID"); + $this->initByID($sliderID); + + $targetSliderID = UniteFunctionsRev::getVal($data, "targetSliderID"); + UniteFunctionsRev::validateNotEmpty($sliderID,"Target Slider ID"); + $this->initByID($sliderID); + + if($targetSliderID == $sliderID) + UniteFunctionsRev::throwError("The target slider can't be equal to the source slider"); + + $slideID = UniteFunctionsRev::getVal($data, "slideID"); + UniteFunctionsRev::validateNotEmpty($slideID,"Slide ID"); + + $operation = UniteFunctionsRev::getVal($data, "operation"); + + $this->copyMoveSlide($slideID,$targetSliderID,$operation); + + return($sliderID); + } + + + /** + * + * create a slide from input data + */ + public function createSlideFromData($data,$returnSlideID = false){ + + $sliderID = UniteFunctionsRev::getVal($data, "sliderid"); + $obj = UniteFunctionsRev::getVal($data, "obj"); + + UniteFunctionsRev::validateNotEmpty($sliderID,"Slider ID"); + $this->initByID($sliderID); + + if(is_array($obj)){ //multiple + foreach($obj as $item){ + $slide = new RevSlide(); + $slideID = $slide->createSlide($sliderID, $item); + } + + return(count($obj)); + + }else{ //signle + $urlImage = $obj; + $slide = new RevSlide(); + $slideID = $slide->createSlide($sliderID, $urlImage); + if($returnSlideID == true) + return($slideID); + else + return(1); //num slides -1 slide created + } + } + + /** + * + * update slides order from data + */ + public function updateSlidesOrderFromData($data){ + $sliderID = UniteFunctionsRev::getVal($data, "sliderID"); + $arrIDs = UniteFunctionsRev::getVal($data, "arrIDs"); + UniteFunctionsRev::validateNotEmpty($arrIDs,"slides"); + + $this->initByID($sliderID); + + $isFromPosts = $this->isSlidesFromPosts(); + + foreach($arrIDs as $index=>$slideID){ + + $order = $index+1; + + if($isFromPosts){ + UniteFunctionsWPRev::updatePostOrder($slideID, $order); + }else{ + + $arrUpdate = array("slide_order"=>$order); + $where = array("id"=>$slideID); + $this->db->update(GlobalsRevSlider::$table_slides,$arrUpdate,$where); + } + }//end foreach + + //update sortby + if($isFromPosts){ + $arrUpdate = array(); + $arrUpdate["post_sortby"] = UniteFunctionsWPRev::SORTBY_MENU_ORDER; + $this->updateParam($arrUpdate); + } + + } + + /** + * + * get the "main" and "settings" arrays, for dealing with the settings. + */ + public function getSettingsFields(){ + $this->validateInited(); + + $arrMain = array(); + $arrMain["title"] = $this->title; + $arrMain["alias"] = $this->alias; + + $arrRespose = array("main"=>$arrMain, + "params"=>$this->arrParams); + + return($arrRespose); + } + + + /** + * + * get slides from gallery + * force from gallery - get the slide from the gallery only + */ + public function getSlides($publishedOnly = false){ + + if($this->isSlidesFromPosts() == true){ //get slides from posts + + $arrSlides = $this->getSlidesFromPosts($publishedOnly); + + }else{ //get slides from gallery + $arrSlides = $this->getSlidesFromGallery($publishedOnly); + } + + return($arrSlides); + } + + + /** + * + * get slides from posts + */ + private function getSlidesFromPosts($publishedOnly = false){ + + $slideTemplates = $this->getSlideTemplates(); + $slideTemplates = UniteFunctionsRev::assocToArray($slideTemplates); + + if(count($slideTemplates) == 0) return array(); + + $sourceType = $this->getParam("source_type","gallery"); + switch($sourceType){ + case "posts": + $arrPosts = $this->getPostsFromCategoies($publishedOnly); + break; + case "specific_posts": + $arrPosts = $this->getPostsFromSpecificList(); + break; + default: + UniteFunctionsRev::throwError("getSlidesFromPosts error: This source type must be from posts."); + break; + } + + $arrSlides = array(); + + $templateKey = 0; + $numTemplates = count($slideTemplates); + + $slideTemplate = $slideTemplates[$templateKey]; + + foreach($arrPosts as $postData){ + //advance the templates + $templateKey++; + if($templateKey == $numTemplates) + $templateKey = 0; + + $slide = new RevSlide(); + $slide->initByPostData($postData, $slideTemplate, $this->id); + $arrSlides[] = $slide; + } + + $this->arrSlides = $arrSlides; + + return($arrSlides); + } + + + + /** + * + * get slide template + * currently it's the first slide in the slider gallery + */ + private function getSlideTemplates(){ + + $sliderTemplateID = $this->getParam("slider_template_id"); + if(empty($sliderTemplateID)) + UniteFunctionsRev::throwError("You must provide a template for the slider show."); + + $sliderTemplate = new RevSlider(); + $sliderTemplate->initByID($sliderTemplateID); + + if($sliderTemplate->isSlidesFromPosts()) + UniteFunctionsRev::throwError("The slider that is template must be from gallery"); + + $arrSlides = $sliderTemplate->getSlides(true); + + return($arrSlides); + } + + + + /** + * + * get slides of the current slider + */ + public function getSlidesFromGallery($publishedOnly = false){ + + $this->validateInited(); + + $arrSlides = array(); + $arrSlideRecords = $this->db->fetch(GlobalsRevSlider::$table_slides,"slider_id=".$this->id,"slide_order"); + + $arrChildren = array(); + + foreach ($arrSlideRecords as $record){ + $slide = new RevSlide(); + $slide->initByData($record); + + $slideID = $slide->getID(); + $arrIdsAssoc[$slideID] = true; + + if($publishedOnly == true){ + $state = $slide->getParam("state","published"); + if($state == "unpublished") + continue; + } + + $parentID = $slide->getParam("parentid",""); + if(!empty($parentID)){ + $lang = $slide->getParam("lang",""); + if(!isset($arrChildren[$parentID])) + $arrChildren[$parentID] = array(); + $arrChildren[$parentID][] = $slide; + continue; //skip adding to main list + } + + //init the children array + $slide->setArrChildren(array()); + + $arrSlides[$slideID] = $slide; + } + + //add children array to the parent slides + foreach($arrChildren as $parentID=>$arr){ + if(!isset($arrSlides[$parentID])) + continue; + $arrSlides[$parentID]->setArrChildren($arr); + } + + $this->arrSlides = $arrSlides; + + + return($arrSlides); + } + + /** + * + * get slide id and slide title from gallery + */ + public function getArrSlidesFromGalleryShort(){ + $arrSlides = $this->getSlidesFromGallery(); + + $arrOutput = array(); + $coutner = 0; + foreach($arrSlides as $slide){ + $slideID = $slide->getID(); + $outputName = "Slide $coutner"; + $title = $slide->getParam("title",""); + $coutner++; + + if(!empty($title)) + $outputName .= " - ($title)"; + + $arrOutput[$slideID] = $outputName; + } + + return($arrOutput); + } + + + /** + * + * get slides for output + * one level only without children + */ + public function getSlidesForOutput($publishedOnly = false, $lang = "all"){ + + $isSlidesFromPosts = $this->isSlidesFromPosts(); + + $arrParentSlides = $this->getSlides($publishedOnly); + + if($lang == "all" || $isSlidesFromPosts) + return($arrParentSlides); + + $arrSlides = array(); + foreach($arrParentSlides as $parentSlide){ + $parentLang = $parentSlide->getLang(); + if($parentLang == $lang) + $arrSlides[] = $parentSlide; + + $childAdded = false; + $arrChildren = $parentSlide->getArrChildren(); + foreach($arrChildren as $child){ + $childLang = $child->getLang(); + if($childLang == $lang){ + $arrSlides[] = $child; + $childAdded = true; + break; + } + } + + if($childAdded == false && $parentLang == "all") + $arrSlides[] = $parentSlide; + } + + return($arrSlides); + } + + + /** + * + * get array of slide names + */ + public function getArrSlideNames(){ + if(empty($this->arrSlides)) + $this->getSlidesFromGallery(); + + $arrSlideNames = array(); + + foreach($this->arrSlides as $number=>$slide){ + $slideID = $slide->getID(); + $filename = $slide->getImageFilename(); + $slideTitle = $slide->getParam("title","Slide"); + $slideName = $slideTitle; + if(!empty($filename)) + $slideName .= " ($filename)"; + + $arrChildrenIDs = $slide->getArrChildrenIDs(); + + $arrSlideNames[$slideID] = array("name"=>$slideName,"arrChildrenIDs"=>$arrChildrenIDs,"title"=>$slideTitle); + } + return($arrSlideNames); + } + + + /** + * + * get array of slides numbers by id's + */ + public function getSlidesNumbersByIDs($publishedOnly = false){ + + if(empty($this->arrSlides)) + $this->getSlides($publishedOnly); + + $arrSlideNumbers = array(); + + $counter = 0; + + if(empty($this->arrSlides)) return $arrSlideNumbers; + + foreach($this->arrSlides as $slide){ + $counter++; + $slideID = $slide->getID(); + $arrSlideNumbers[$slideID] = $counter; + } + return($arrSlideNumbers); + } + + + /** + * + * get slider params for export slider + */ + private function getParamsForExport(){ + $exportParams = $this->arrParams; + + //modify background image + $urlImage = UniteFunctionsRev::getVal($exportParams, "background_image"); + if(!empty($urlImage)) + $exportParams["background_image"] = $urlImage; + + return($exportParams); + } + + + /** + * + * get slides for export + */ + private function getSlidesForExport($useDummy = false){ + $arrSlides = $this->getSlidesFromGallery(); + $arrSlidesExport = array(); + foreach($arrSlides as $slide){ + $slideNew = array(); + $slideNew["params"] = $slide->getParamsForExport(); + $slideNew["slide_order"] = $slide->getOrder(); + $slideNew["layers"] = $slide->getLayersForExport($useDummy); + $arrSlidesExport[] = $slideNew; + } + + return($arrSlidesExport); + } + + + /** + * + * get slides number + */ + public function getNumSlides($publishedOnly = false){ + + if($this->arrSlides == null) + $this->getSlides($publishedOnly); + + $numSlides = count($this->arrSlides); + return($numSlides); + } + + + /** + * + * get sliders array - function don't belong to the object! + */ + public function getArrSliders($templates = false){ + $where = ""; + + $response = $this->db->fetch(GlobalsRevSlider::$table_sliders,$where,"id"); + + $arrSliders = array(); + foreach($response as $arrData){ + $slider = new RevSlider(); + $slider->initByDBData($arrData); + + if($templates){ + if($slider->getParam("template","false") == "false") continue; + }else{ + if($slider->getParam("template","false") == "true") continue; + } + + $arrSliders[] = $slider; + } + + return($arrSliders); + } + + + /** + * + * get aliasees array + */ + public function getAllSliderAliases(){ + $where = ""; + + $response = $this->db->fetch(GlobalsRevSlider::$table_sliders,$where,"id"); + + $arrAliases = array(); + foreach($response as $arrSlider){ + $arrAliases[] = $arrSlider["alias"]; + } + + return($arrAliases); + } + + + /** + * + * get array of slider id -> title + */ + public function getArrSlidersShort($exceptID = null,$filterType = self::SLIDER_TYPE_ALL){ + $arrSliders = ($filterType == self::SLIDER_TYPE_TEMPLATE) ? $this->getArrSliders(true) : $this->getArrSliders(); + $arrShort = array(); + foreach($arrSliders as $slider){ + $id = $slider->getID(); + $isFromPosts = $slider->isSlidesFromPosts(); + $isTemplate = $slider->getParam("template","false"); + + //filter by gallery only + if($filterType == self::SLIDER_TYPE_POSTS && $isFromPosts == false) + continue; + + if($filterType == self::SLIDER_TYPE_GALLERY && $isFromPosts == true) + continue; + + //filter by template type + if($filterType == self::SLIDER_TYPE_TEMPLATE && $isTemplate == "false") + continue; + + //filter by except + if(!empty($exceptID) && $exceptID == $id) + continue; + + $title = $slider->getTitle(); + $arrShort[$id] = $title; + } + return($arrShort); + } + + /** + * + * get array of sliders with slides, short, assoc. + */ + public function getArrSlidersWithSlidesShort($filterType = self::SLIDER_TYPE_ALL){ + $arrSliders = self::getArrSlidersShort(null, $filterType); + + $output = array(); + foreach($arrSliders as $sliderID=>$sliderName){ + $slider = new RevSlider(); + $slider->initByID($sliderID); + + $isFromPosts = $slider->isSlidesFromPosts(); + $isTemplate = $slider->getParam("template","false"); + + //filter by gallery only + if($filterType == self::SLIDER_TYPE_POSTS && $isFromPosts == false) + continue; + + if($filterType == self::SLIDER_TYPE_GALLERY && $isFromPosts == true) + continue; + + //filter by template type + if($filterType == self::SLIDER_TYPE_TEMPLATE && $isTemplate == "false") + continue; + + $sliderTitle = $slider->getTitle(); + $arrSlides = $slider->getArrSlidesFromGalleryShort(); + + foreach($arrSlides as $slideID=>$slideName){ + $output[$slideID] = $sliderName.", ".$slideName; + } + } + + return($output); + } + + + /** + * + * get max order + */ + public function getMaxOrder(){ + $this->validateInited(); + $maxOrder = 0; + $arrSlideRecords = $this->db->fetch(GlobalsRevSlider::$table_slides,"slider_id=".$this->id,"slide_order desc","","limit 1"); + if(empty($arrSlideRecords)) + return($maxOrder); + $maxOrder = $arrSlideRecords[0]["slide_order"]; + + return($maxOrder); + } + + /** + * + * get setting - start with slide + */ + public function getStartWithSlideSetting(){ + + $numSlides = $this->getNumSlides(); + + $startWithSlide = $this->getParam("start_with_slide","1"); + if(is_numeric($startWithSlide)){ + $startWithSlide = (int)$startWithSlide - 1; + if($startWithSlide < 0) + $startWithSlide = 0; + + if($startWithSlide >= $numSlides) + $startWithSlide = 0; + + }else + $startWithSlide = 0; + + return($startWithSlide); + } + + + /** + * + * return if the slides source is from posts + */ + public function isSlidesFromPosts(){ + $this->validateInited(); + $sourceType = $this->getParam("source_type","gallery"); + if($sourceType == "posts" || $sourceType == "specific_posts") + return(true); + + return(false); + } + + + /** + * + * get posts from categories (by the slider params). + */ + private function getPostsFromCategoies($publishedOnly = false){ + $this->validateInited(); + + $catIDs = $this->getParam("post_category"); + $data = UniteFunctionsWPRev::getCatAndTaxData($catIDs); + + $taxonomies = $data["tax"]; + $catIDs = $data["cats"]; + + $sortBy = $this->getParam("post_sortby",self::DEFAULT_POST_SORTBY); + $sortDir = $this->getParam("posts_sort_direction",self::DEFAULT_POST_SORTDIR); + $maxPosts = $this->getParam("max_slider_posts","30"); + if(empty($maxPosts) || !is_numeric($maxPosts)) + $maxPosts = -1; + + $postTypes = $this->getParam("post_types","any"); + + //set direction for custom order + if($sortBy == UniteFunctionsWPRev::SORTBY_MENU_ORDER) + $sortDir = UniteFunctionsWPRev::ORDER_DIRECTION_ASC; + + //Events integration + $arrAddition = array(); + if($publishedOnly == true) + $arrAddition["post_status"] = UniteFunctionsWPRev::STATE_PUBLISHED; + + if(UniteEmRev::isEventsExists()){ + + $filterType = $this->getParam("events_filter",UniteEmRev::DEFAULT_FILTER); + $arrAddition = UniteEmRev::getWPQuery($filterType, $sortBy); + } + + //dmp($arrAddition);exit(); + + $arrPosts = UniteFunctionsWPRev::getPostsByCategory($catIDs,$sortBy,$sortDir,$maxPosts,$postTypes,$taxonomies,$arrAddition); + + //dmp($arrPosts);exit(); + + return($arrPosts); + } + + + /** + * + * get posts from specific posts list + */ + private function getPostsFromSpecificList(){ + + $strPosts = $this->getParam("posts_list",""); + $arrPosts = UniteFunctionsWPRev::getPostsByIDs($strPosts); + + return($arrPosts); + } + + /** + * update sortby option + */ + public function updatePostsSortbyFromData($data){ + + $sliderID = UniteFunctionsRev::getVal($data, "sliderID"); + $sortBy = UniteFunctionsRev::getVal($data, "sortby"); + UniteFunctionsRev::validateNotEmpty($sortBy,"sortby"); + + $this->initByID($sliderID); + $arrUpdate = array(); + $arrUpdate["post_sortby"] = $sortBy; + + $this->updateParam($arrUpdate); + } + + /** + * + * replace image urls + */ + public function replaceImageUrlsFromData($data){ + + $sliderID = UniteFunctionsRev::getVal($data, "sliderid"); + $urlFrom = UniteFunctionsRev::getVal($data, "url_from"); + UniteFunctionsRev::validateNotEmpty($urlFrom,"url from"); + $urlTo = UniteFunctionsRev::getVal($data, "url_to"); + + $this->initByID($sliderID); + + $arrSildes = $this->getSlides(); + foreach($arrSildes as $slide){ + //$slide1 = new RevSlide(); + $slide->replaceImageUrls($urlFrom, $urlTo); + } + } + + public function resetSlideSettings($data){ + $sliderID = UniteFunctionsRev::getVal($data, "sliderid"); + + $this->initByID($sliderID); + + $arrSildes = $this->getSlides(); + foreach($arrSildes as $slide){ + + if(trim($data['reset_transitions']) != '') $slide->changeTransition($data['reset_transitions']); + if(intval($data['reset_transition_duration']) > 0) $slide->changeTransitionDuration($data['reset_transition_duration']); + + } + } + + } + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/inc_php/revslider_tinybox.class.php b/src/wp-content/plugins/revslider/inc_php/revslider_tinybox.class.php new file mode 100644 index 0000000..ce1d2d0 --- /dev/null +++ b/src/wp-content/plugins/revslider/inc_php/revslider_tinybox.class.php @@ -0,0 +1,52 @@ +getArrSliders(); + $shortcodes = ''; + if(!empty($sliders)){ + $first = true; + foreach($sliders as $slider){ + $shortcode = $slider->getParam('shortcode','false'); + if($shortcode != 'false'){ + if(!$first) $shortcodes .= ','; + + $shortcodes.="'".$shortcode."'"; + $first = false; + } + } + } + ?> + + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/inc_php/revslider_widget.class.php b/src/wp-content/plugins/revslider/inc_php/revslider_widget.class.php new file mode 100644 index 0000000..4a8838d --- /dev/null +++ b/src/wp-content/plugins/revslider/inc_php/revslider_widget.class.php @@ -0,0 +1,126 @@ + 'widget_revslider', 'description' => __('Displays a revolution slider on the page',REVSLIDER_TEXTDOMAIN) ); + parent::__construct('rev-slider-widget', __('Revolution Slider',REVSLIDER_TEXTDOMAIN), $widget_ops); + } + + /** + * + * the form + */ + public function form($instance) { + + $slider = new RevSlider(); + $arrSliders = $slider->getArrSlidersShort(); + + if(empty($arrSliders)) + echo __("No sliders found, Please create a slider",REVSLIDER_TEXTDOMAIN); + else{ + + $field = "rev_slider"; + $fieldPages = "rev_slider_pages"; + $fieldCheck = "rev_slider_homepage"; + $fieldTitle = "rev_slider_title"; + + $sliderID = UniteFunctionsRev::getVal($instance, $field); + $homepage = UniteFunctionsRev::getVal($instance, $fieldCheck); + $pagesValue = UniteFunctionsRev::getVal($instance, $fieldPages); + $title = UniteFunctionsRev::getVal($instance, $fieldTitle); + + $fieldID = $this->get_field_id( $field ); + $fieldName = $this->get_field_name( $field ); + + $select = UniteFunctionsRev::getHTMLSelect($arrSliders,$sliderID,'name="'.$fieldName.'" id="'.$fieldID.'"',true); + + $fieldID_check = $this->get_field_id( $fieldCheck ); + $fieldName_check = $this->get_field_name( $fieldCheck ); + $checked = ""; + if($homepage == "on") + $checked = "checked='checked'"; + + $fieldPages_ID = $this->get_field_id( $fieldPages ); + $fieldPages_Name = $this->get_field_name( $fieldPages ); + + $fieldTitle_ID = $this->get_field_id( $fieldTitle ); + $fieldTitle_Name = $this->get_field_name( $fieldTitle ); + + ?> + + + +

            + + : +
            + + + > +

            + + + +
            + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/index.php b/src/wp-content/plugins/revslider/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/js/admin.js b/src/wp-content/plugins/revslider/js/admin.js new file mode 100644 index 0000000..5dbe44d --- /dev/null +++ b/src/wp-content/plugins/revslider/js/admin.js @@ -0,0 +1,1213 @@ + +var UniteAdminRev = new function(){ + + var t = this; + + var errorMessageID = null; + var successMessageID = null; + var ajaxLoaderID = null; + var ajaxHideButtonID = null; + var g_multiple_text_key = []; + + //video dialog vars: + var lastVideoData = null; //last fetched data + var lastVideoCallback = null; //last callback from video dialog return + var colorPickerCallback = null; + + + + + + /** + * escape html, turn html to a string + */ + t.htmlspecialchars = function(string){ + return string + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + } + + /** + * Find absolute position on the screen of some element + */ + t.getAbsolutePos = function(obj){ + var curleft = curtop = 0; + if (obj.offsetParent) { + curleft = obj.offsetLeft; + curtop = obj.offsetTop; + while (obj = obj.offsetParent) { + curleft += obj.offsetLeft; + curtop += obj.offsetTop; + } + } + return[curleft,curtop]; + } + + + /** + * turn string value ("true", "false") to string + */ + t.strToBool = function(str){ + + if(str == undefined) + return(false); + + if(typeof(str) != "string") + return(false); + + str = str.toLowerCase(); + + var bool = (str == "true")?true:false; + return(bool); + } + + /** + * set callback on color picker movement + */ + t.setColorPickerCallback = function(callbackFunc){ + colorPickerCallback = callbackFunc; + } + + /** + * on color picker event. Pass the event further + */ + t.onColorPickerMoveEvent = function(event){ + + if(typeof colorPickerCallback == "function") + colorPickerCallback(event); + } + + + /** + * strip html tags + */ + t.stripTags = function(input, allowed) { + allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); // making sure the allowed arg is a string containing only tags in lowercase () + var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi, + commentsAndPhpTags = /|<\?(?:php)?[\s\S]*?\?>/gi; + return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) { + return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''; + }); + } + + /** + * change rgb & rgba to hex + */ + t.rgb2hex = function(rgb) { + if (rgb.search("rgb") == -1 || jQuery.trim(rgb) == '') return rgb; //ie6 + + function hex(x) { + return ("0" + parseInt(x).toString(16)).slice(-2); + } + + if(rgb.indexOf('-moz') > -1){ + var temp = rgb.split(' '); + delete temp[0]; + rgb = jQuery.trim(temp.join(' ')); + } + + if(rgb.split(')').length > 2){ + var hexReturn = ''; + var rgbArr = rgb.split(')'); + for(var i = 0; i < rgbArr.length - 1; i++){ + rgbArr[i] += ')'; + var temp = rgbArr[i].split(','); + if(temp.length == 4){ + rgb = temp[0]+','+temp[1]+','+temp[2]; + rgb += ')'; + }else{ + rgb = rgbArr[i]; + } + rgb = jQuery.trim(rgb); + + rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/); + + hexReturn += "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3])+" "; + } + + return hexReturn; + }else{ + var temp = rgb.split(','); + if(temp.length == 4){ + rgb = temp[0]+','+temp[1]+','+temp[2]; + rgb += ')'; + } + + rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/); + + return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]); + } + + + } + + /** + * get transparency value from 0 to 100 + */ + t.getTransparencyFromRgba = function(rgba, inPercent){ + var temp = rgba.split(','); + if(temp.length == 4){ + inPercent = (typeof inPercent !== 'undefined') ? inPercent : true; + return (inPercent) ? temp[3].replace(/[^\d.]/g, "") : temp[3].replace(/[^\d.]/g, "") * 100; + } + + return false; + } + + /** + * debug html on the top of the page (from the master view) + */ + t.debug = function(html){ + jQuery("#div_debug").show().html(html); + } + + /** + * output data to console + */ + t.trace = function(data,clear){ + if(clear && clear == true) + console.clear(); + console.log(data); + } + + /** + * show error message or call once custom handler function + */ + t.showErrorMessage = function(htmlError){ + if(errorMessageID !== null){ + jQuery("#"+errorMessageID).show().html(htmlError); + }else + jQuery("#error_message").show().html(htmlError); + + showAjaxButton(); + } + + /** + * hide error message + */ + var hideErrorMessage = function(){ + if(errorMessageID !== null){ + jQuery("#"+errorMessageID).hide(); + errorMessageID = null; + }else + jQuery("#error_message").hide(); + } + + + /** + * set error message id + */ + t.setErrorMessageID = function(id){ + errorMessageID = id; + } + + + + /** + * set success message id + */ + t.setSuccessMessageID = function(id){ + successMessageID = id; + } + + /** + * show success message + */ + var showSuccessMessage = function(htmlSuccess){ + var id = "#success_message"; + var delay = 2000; + if(successMessageID){ + id = "#"+successMessageID; + delay = 500; + } + + jQuery(id).show().html(htmlSuccess); + setTimeout("UniteAdminRev.hideSuccessMessage()",delay); + } + + + /** + * hide success message + */ + this.hideSuccessMessage = function(){ + + if(successMessageID){ + jQuery("#"+successMessageID).hide(); + successMessageID = null; //can be used only once. + } + else + jQuery("#success_message").slideUp("slow").fadeOut("slow"); + + showAjaxButton(); + } + + + /** + * set ajax loader id that will be shown, and hidden on ajax request + * this loader will be shown only once, and then need to be sent again. + */ + this.setAjaxLoaderID = function(id){ + ajaxLoaderID = id; + } + + /** + * show loader on ajax actions + */ + var showAjaxLoader = function(){ + if(ajaxLoaderID) + jQuery("#"+ajaxLoaderID).show(); + } + + /** + * hide and remove ajax loader. next time has to be set again before "ajaxRequest" function. + */ + var hideAjaxLoader = function(){ + if(ajaxLoaderID){ + jQuery("#"+ajaxLoaderID).hide(); + ajaxLoaderID = null; + } + } + + /** + * set button to hide / show on ajax operations. + */ + this.setAjaxHideButtonID = function(buttonID){ + ajaxHideButtonID = buttonID; + } + + /** + * if exist ajax button to hide, hide it. + */ + var hideAjaxButton = function(){ + if(ajaxHideButtonID){ + var doHide = ajaxHideButtonID.split(','); + if(doHide.length > 1){ + for(var i = 0; i < doHide.length; i++){ + jQuery("#"+doHide[i]).hide(); + } + }else{ + jQuery("#"+ajaxHideButtonID).hide(); + } + } + } + + /** + * if exist ajax button, show it, and remove the button id. + */ + var showAjaxButton = function(){ + if(ajaxHideButtonID){ + var doShow = ajaxHideButtonID.split(','); + if(doShow.length > 1){ + for(var i = 0; i < doShow.length; i++){ + jQuery("#"+doShow[i]).show(); + } + }else{ + jQuery("#"+ajaxHideButtonID).show(); + } + ajaxHideButtonID = null; + } + } + + + /** + * Ajax request function. call wp ajax, if error - print error message. + * if success, call "success function" + */ + t.ajaxRequest = function(action,data,successFunction){ + + var objData = { + action:g_uniteDirPlagin+"_ajax_action", + client_action:action, + nonce:g_revNonce, + data:data + } + + hideErrorMessage(); + showAjaxLoader(); + hideAjaxButton(); + + jQuery.ajax({ + type:"post", + url:ajaxurl, + dataType: 'json', + data:objData, + success:function(response){ + hideAjaxLoader(); + + if(!response){ + t.showErrorMessage("Empty ajax response!"); + return(false); + } + + if(response == -1){ + t.showErrorMessage("ajax error!!!"); + return(false); + } + + if(response == 0){ + t.showErrorMessage("ajax error, action: "+action+" not found"); + return(false); + } + + if(response.success == undefined){ + t.showErrorMessage("The 'success' param is a must!"); + return(false); + } + + if(response.success == false){ + t.showErrorMessage(response.message); + return(false); + } + + //success actions: + + //run a success event function + if(typeof successFunction == "function") + successFunction(response); + else{ + if(response.message) + showSuccessMessage(response.message); + } + + if(response.is_redirect) + location.href=response.redirect_url; + + }, + error:function(jqXHR, textStatus, errorThrown){ + hideAjaxLoader(); + + if(textStatus == "parsererror") + t.debug(jqXHR.responseText); + + t.showErrorMessage("Ajax Error!!! " + textStatus); + } + }); + + }//ajaxrequest + + + /** + * open new add image dialog + */ + var openNewImageDialog = function(title,onInsert,isMultiple){ + + if(isMultiple == undefined) + isMultiple = false; + + // Media Library params + var frame = wp.media({ + title : title, + multiple : isMultiple, + library : { type : 'image'}, + button : { text : 'Insert' } + }); + + // Runs on select + frame.on('select',function(){ + var objSettings = frame.state().get('selection').first().toJSON(); + + var selection = frame.state().get('selection'); + var arrImages = []; + + if(isMultiple == true){ //return image object when multiple + selection.map( function( attachment ) { + var objImage = attachment.toJSON(); + var obj = {}; + obj.url = objImage.url; + obj.id = objImage.id; + arrImages.push(obj); + }); + onInsert(arrImages); + }else{ //return image url and id - when single + onInsert(objSettings.url,objSettings.id); + } + + }); + + // Open ML + frame.open(); + } + + + /** + * open old add image dialog + */ + var openOldImageDialog = function(title,onInsert){ + var params = "type=image&post_id=0&TB_iframe=true"; + + params = encodeURI(params); + + tb_show(title,'media-upload.php?'+params); + + window.send_to_editor = function(html) { + tb_remove(); + var urlImage = jQuery(html).attr('src'); + if(!urlImage || urlImage == undefined || urlImage == "") + var urlImage = jQuery('img',html).attr('src'); + + onInsert(urlImage,""); //return empty id, it can be changed + } + } + + + t.openAddImageDialog = function(title,onInsert,isMultiple){ + + if(!title) + title = 'Select Image'; + + if(typeof wp != "undefined" && typeof wp.media != "undefined") + openNewImageDialog(title,onInsert,isMultiple); + else{ + openOldImageDialog(title,onInsert); + } + + } + + + /** + * load css file on the fly + * replace current item if exists + */ + t.loadCssFile = function(urlCssFile,replaceID){ + + var rand = Math.floor((Math.random()*100000)+1); + + urlCssFile += "?rand="+rand; + + if(replaceID) + jQuery("#"+replaceID).remove(); + + jQuery("head").append(""); + var css = jQuery("head").children(":last"); + css.attr({ + rel: "stylesheet", + type: "text/css", + href: urlCssFile + }); + + //replace current element + if(replaceID) + css.attr({id:replaceID}); + } + + + /** + * get show image url + */ + t.getUrlShowImage = function(imageUrl,width,height,exact){ + var filepath = imageUrl.replace(g_urlContent,""); + + //if not internal image - return normal image url + if(filepath == imageUrl) + return(imageUrl); + + var urlImage = g_urlAjaxShowImage+"&img="+filepath; + + if(width) + urlImage += "&w="+width; + + if(height) + urlImage += "&h="+height; + + if(exact && exact == true) + urlImage += "&t=exact"; + + return(urlImage); + } + + + /** + * set html to youtube dialog + * if empty data - clear the dialog + */ + var setYoutubeDialogHtml = function(data){ + + //if empty data - clear the dialog + if(!data){ + jQuery("#video_content").html(""); + return(false); + } + + var thumb = data.thumb_medium; + + var useURL = (jQuery.trim(jQuery('#input_video_preview').val()) != '') ? jQuery('#input_video_preview').val() : thumb.url; + + var html = '
            '+data.title+'
            '; + html += 'thumbnail'; + html += '
            '; + if(typeof data.desc_small != "undefined") html += data.desc_small; + html += '
            '; + + jQuery("#video_content").html(html); + } + + + /** + * pass youtube id or youtube url, and get the id + */ + var getYoutubeIDFromUrl = function(url){ + url = jQuery.trim(url); + + var video_id = url.split('v=')[1]; + if(video_id){ + var ampersandPosition = video_id.indexOf('&'); + if(ampersandPosition != -1) { + video_id = video_id.substring(0, ampersandPosition); + } + }else{ + video_id = url; + } + + return(video_id); + } + + + /** + * get vimeo id from url + */ + var getVimeoIDFromUrl = function(url){ + url = jQuery.trim(url); + + var video_id = url.replace(/[^0-9]+/g, ''); + video_id = jQuery.trim(video_id); + + return(video_id); + } + + + + /** + * youtube callback script, set and store youtube data, and add it to dialog + */ + t.onYoutubeCallback = function(obj){ + jQuery("#youtube_loader").hide(); + var desc_small_size = 200; + + //prepare data + var entry = obj.entry; + var data = {}; + data.id = jQuery("#youtube_id").val(); + data.id = jQuery.trim(data.id); + data.video_type = "youtube"; + data.title = entry.title.$t; + data.author = entry.author[0].name.$t; + data.link = entry.link[0].href; + data.description = entry.media$group.media$description.$t; + data.desc_small = data.description; + + if(data.description.length > desc_small_size) + data.desc_small = data.description.slice(0,desc_small_size)+"..."; + + var thumbnails = entry.media$group.media$thumbnail; + + data.thumb_small = {url:thumbnails[0].url,width:thumbnails[0].width,height:thumbnails[0].height}; + data.thumb_medium = {url:thumbnails[1].url,width:thumbnails[1].width,height:thumbnails[1].height}; + data.thumb_big = {url:thumbnails[2].url,width:thumbnails[2].width,height:thumbnails[2].height}; + + //set html in dialog + setYoutubeDialogHtml(data); + + //set the youtube arguments + var objArguments = jQuery("#input_video_arguments"); + if(objArguments.val() == "") + objArguments.val(objArguments.data("youtube")); + + //store last video data + lastVideoData = data; + + //show controls: + jQuery("#video_hidden_controls").show(); + } + + + /** + * vimeo callback script, set and store vimeo data, and add it to dialog + */ + t.onVimeoCallback = function(obj){ + jQuery("#vimeo_loader").hide(); + + var desc_small_size = 200; + obj = obj[0]; + + var data = {}; + data.video_type = "vimeo"; + data.id = obj.id; + data.id = jQuery.trim(data.id); + data.title = obj.title; + data.link = obj.url; + data.author = obj.user_name; + + data.description = obj.description; + if(data.description.length > desc_small_size) + data.desc_small = data.description.slice(0,desc_small_size)+"..."; + + data.thumb_large = {url:obj.thumbnail_large,width:640,height:360}; + data.thumb_medium = {url:obj.thumbnail_medium,width:200,height:150}; + data.thumb_small = {url:obj.thumbnail_small,width:100,height:75}; + + //set html in dialog + setYoutubeDialogHtml(data); + + //set the youtube arguments + var objArguments = jQuery("#input_video_arguments"); + objArguments.val(objArguments.data("vimeo")); + + //store last video data + lastVideoData = data; + + //show controls: + jQuery("#video_hidden_controls").show(); + } + + + /** + * show error message on the dialog + */ + t.videoDialogOnError = function(){ + //if ok, don't do nothing + if(jQuery("#video_hidden_controls").is(":visible")) + return(false); + + //if error - show message + jQuery("#youtube_loader").hide(); + var html = "
            Video Not Found!
            "; + jQuery("#video_content").html(html); + } + + + /** + * update video size enabled disabled according fullwidth properties + */ + var updateVideoSizeProps = function(){ + var isFullwidth = jQuery("#input_video_fullwidth").is(":checked"); + if(isFullwidth == true){ //disable + //jQuery("#video_size_wrapper").hide(); + jQuery("#input_video_width, #input_video_height, #input_video_height_lbl, #input_video_width_lbl").hide(); + + }else{ //enable + //jQuery("#video_size_wrapper").show(); + jQuery("#input_video_width, #input_video_height, #input_video_height_lbl, #input_video_width_lbl").show(); + jQuery("#input_video_cover").prop("checked",false); + } + + var isCover = jQuery("#input_video_cover").is(":checked"); + if(isCover == true){ //disable + jQuery("#input_video_ratio_lbl, #input_video_ratio, #input_video_dotted_overlay_lbl, #input_video_dotted_overlay").show(); + }else{ //enable + jQuery("#input_video_ratio_lbl, #input_video_ratio, #input_video_dotted_overlay_lbl, #input_video_dotted_overlay").hide(); + } + } + + /** + * open dialog for youtube or vimeo import , add / update + */ + t.openVideoDialog = function(callback,objCurrentVideoData){ + + lastVideoCallback = callback; + + var dialogVideo = jQuery("#dialog_video"); + + //set buttons: + var buttons = { + "Close":function(){ + dialogVideo.dialog("close"); + } + }; + + //clear the dialog content + setYoutubeDialogHtml(false); + + //enable fields: + jQuery("#video_type_chooser").show(); + jQuery("#youtube_id,#vimeo_id").prop("disabled","").removeClass("input-disabled"); + + //clear the fields + jQuery("#input_video_arguments").val(""); + jQuery("#input_video_autoplay").prop("checked",""); + jQuery("#showautoplayfirsttime").hide(); + jQuery("#input_video_autoplay_first_time").prop("checked",""); + jQuery("#input_video_nextslide").prop("checked",""); + jQuery("#input_video_force_rewind").prop("checked",""); + jQuery("#input_video_fullwidth").prop("checked",""); + jQuery("#input_video_loop").prop("checked",""); + jQuery("#input_video_control").prop("checked",""); + jQuery("#input_video_mute").prop("checked",""); + jQuery("#input_video_cover").prop("checked",""); + jQuery("#input_video_dotted_overlay option[value='none']").attr("selected",true); + jQuery("#input_video_ratio option[value='16:9']").attr("selected",true); + jQuery("#input_video_preview").val(""); + + jQuery("#youtube_id").val(""); + jQuery("#vimeo_id").val(""); + + jQuery("#video_hidden_controls").hide(); + + jQuery("#fullscreenvideofun").hide(); + + var buttonVideoAdd = jQuery("#button-video-add"); + buttonVideoAdd.text(buttonVideoAdd.data("textadd")); + + //open the dialog + dialogVideo.dialog({ + buttons:buttons, + minWidth:830, + minHeight:820, + modal:true, + dialogClass:"tpdialogs" + }); + + //if update dialog open: + if(objCurrentVideoData) + setVideoDialogUpdateMode(objCurrentVideoData); + + updateVideoSizeProps(); + } + + + /** + * prepare the dialog for video update + */ + var setVideoDialogUpdateMode = function(data){ + + data.id = jQuery.trim(data.id); + + jQuery("#video_type_chooser").hide(); + + //disable fields: + jQuery("#youtube_id,#vimeo_id").prop("disabled","disabled").addClass("input-disabled"); + + //set mode and video id + switch(data.video_type){ + case "youtube": + jQuery("#video-dialog-wrap").removeClass("html5select"); + jQuery("#video_radio_youtube").trigger("click"); + jQuery("#youtube_id").val(data.id); + jQuery("#fullscreenvideofun").hide(); + break; + case "vimeo": + jQuery("#video-dialog-wrap").removeClass("html5select"); + jQuery("#video_radio_vimeo").trigger("click"); + jQuery("#vimeo_id").val(data.id); + jQuery("#fullscreenvideofun").hide(); + break; + case "html5": + jQuery("#video-dialog-wrap").addClass("html5select"); + jQuery("#html5_url_poster").val(data.urlPoster); + jQuery("#html5_url_mp4").val(data.urlMp4); + jQuery("#html5_url_webm").val(data.urlWebm); + jQuery("#html5_url_ogv").val(data.urlOgv); + jQuery("#video_radio_html5").trigger("click"); + jQuery("#fullscreenvideofun").show(); + break; + } + + //set width and height: + jQuery("#input_video_width").val(data.width); + jQuery("#input_video_height").val(data.height); + jQuery("#input_video_arguments").val(data.args); + + jQuery("#input_video_preview").val(data.previewimage); + + if(data.autoplay && data.autoplay == true){ + jQuery("#input_video_autoplay").prop("checked","checked"); + jQuery("#showautoplayfirsttime").show(); + }else{ + jQuery("#input_video_autoplay").prop("checked",""); + jQuery("#showautoplayfirsttime").hide(); + } + + if(data.autoplayonlyfirsttime && data.autoplayonlyfirsttime == true) + jQuery("#input_video_autoplay_first_time").prop("checked","checked"); + else + jQuery("#input_video_autoplay_first_time").prop("checked",""); + + if(data.nextslide && data.nextslide == true) + jQuery("#input_video_nextslide").prop("checked","checked"); + else + jQuery("#input_video_nextslide").prop("checked",""); + + if(data.forcerewind && data.forcerewind == true) + jQuery("#input_video_force_rewind").prop("checked","checked"); + else + jQuery("#input_video_force_rewind").prop("checked",""); + + if(data.fullwidth && data.fullwidth == true) + jQuery("#input_video_fullwidth").prop("checked","checked"); + else + jQuery("#input_video_fullwidth").prop("checked",""); + + if(data.videoloop && data.videoloop == true) + jQuery("#input_video_loop").prop("checked","checked"); + else + jQuery("#input_video_loop").prop("checked",""); + + if(data.controls && data.controls == true) + jQuery("#input_video_control").prop("checked","checked"); + else + jQuery("#input_video_control").prop("checked",""); + + if(data.mute && data.mute == true) + jQuery("#input_video_mute").prop("checked","checked"); + else + jQuery("#input_video_mute").prop("checked",""); + + if(data.cover && data.cover == true) + jQuery("#input_video_cover").prop("checked","checked"); + else + jQuery("#input_video_cover").prop("checked",""); + + if(data.dotted){ + jQuery("#input_video_dotted_overlay option").each(function(){ + if(jQuery(this).val() == data.dotted) + jQuery(this).attr('selected', true); + }); + } + if(data.ratio){ + jQuery("#input_video_ratio option").each(function(){ + if(jQuery(this).val() == data.ratio) + jQuery(this).attr('selected', true); + }); + } + + //change button text: + var buttonVideoAdd = jQuery("#button-video-add"); + buttonVideoAdd.text(buttonVideoAdd.data("textupdate")); + + //search + switch(data.video_type){ + case "youtube": + jQuery("#button_youtube_search").trigger("click"); + break; + case "vimeo": + jQuery("#button_vimeo_search").trigger("click"); + break; + } + + //if(data.previewimage != '') jQuery("#video-thumbnail-preview").attr('src', data.previewimage); + } + + //add params from textboxes to object + var addTextboxParamsToObj = function(obj){ + obj.width = jQuery("#input_video_width").val(); + obj.height = jQuery("#input_video_height").val(); + obj.args = jQuery("#input_video_arguments").val(); + obj.previewimage = jQuery("#input_video_preview").val(); + obj.autoplay = jQuery("#input_video_autoplay").is(":checked"); + obj.autoplayonlyfirsttime = jQuery("#input_video_autoplay_first_time").is(":checked"); + obj.nextslide = jQuery("#input_video_nextslide").is(":checked"); + obj.forcerewind = jQuery("#input_video_force_rewind").is(":checked"); + obj.fullwidth = jQuery("#input_video_fullwidth").is(":checked"); + obj.videoloop = jQuery("#input_video_loop").is(":checked"); + obj.controls = jQuery("#input_video_control").is(":checked"); + obj.mute = jQuery("#input_video_mute").is(":checked"); + obj.cover = jQuery("#input_video_cover").is(":checked"); + obj.dotted = jQuery("#input_video_dotted_overlay option:selected").val(); + obj.ratio = jQuery("#input_video_ratio option:selected").val(); + return(obj); + } + + + /** + * init video dialog buttons + */ + var initVideoDialog = function(){ + + //set youtube radio checked: + jQuery("#video_radio_youtube").prop("checked",true); + + //set radio boxes: + jQuery("#video_radio_vimeo").click(function(){ + jQuery("#video_block_youtube").hide(); + jQuery("#video_block_html5").hide(); + jQuery("#video_hidden_controls").hide(); + //jQuery("#video_content").show(); + jQuery("#video_block_vimeo").show(); + jQuery("#preview-image-video-wrap").show(); + jQuery("#video-dialog-wrap").removeClass("html5select"); + jQuery("#fullscreenvideofun").hide(); + }); + + jQuery("#video_radio_youtube").click(function(){ + jQuery("#video_block_vimeo").hide(); + jQuery("#video_block_html5").hide(); + jQuery("#video_hidden_controls").hide(); + //jQuery("#video_content").show(); + jQuery("#video_block_youtube").show(); + jQuery("#preview-image-video-wrap").show(); + jQuery("#video-dialog-wrap").removeClass("html5select"); + jQuery("#fullscreenvideofun").hide(); + }); + + jQuery("#video_radio_html5").click(function(){ + jQuery("#video_block_vimeo").hide(); + jQuery("#video_block_youtube").hide(); + jQuery("#video_block_html5").show(); + jQuery("#video_content").hide(); + jQuery("#video_hidden_controls").show(); + jQuery("#preview-image-video-wrap").hide(); + jQuery("#video-dialog-wrap").addClass("html5select"); + jQuery("#fullscreenvideofun").show(); + }); + + + jQuery("#input_video_autoplay").click(function(){ + if(jQuery(this).is(":checked")){ + jQuery("#showautoplayfirsttime").show(); + }else{ + jQuery("#showautoplayfirsttime").hide(); + } + }); + + jQuery("#input_video_cover").click(function(){ + if(jQuery(this).is(":checked")){ + if(!jQuery('#input_video_fullwidth').is(":checked")) jQuery('#input_video_fullwidth').prop("checked",true); + } + updateVideoSizeProps(); + }); + + //set youtube search action + jQuery("#button_youtube_search").click(function(){ + + //init data + setYoutubeDialogHtml(false); + jQuery("#video_hidden_controls").hide(); + + jQuery("#youtube_loader").show(); + var youtubeID = jQuery("#youtube_id").val(); + youtubeID = jQuery.trim(youtubeID); + + youtubeID = getYoutubeIDFromUrl(youtubeID); + + var urlAPI = "https://gdata.youtube.com/feeds/api/videos/"+youtubeID+"?v=2&alt=json-in-script&callback=UniteAdminRev.onYoutubeCallback"; + + jQuery.getScript(urlAPI); + + jQuery("#video_content").show(); + + //handle not found: + setTimeout("UniteAdminRev.videoDialogOnError()",2000); + }); + + + //add the selected video to the callback function + jQuery("#button-video-add").click(function(){ + var html5Checked = jQuery("#video_radio_html5").prop("checked"); + + jQuery("#video_content").hide(); + + if(html5Checked){ //in case of html5 + var obj = {}; + obj.video_type = "html5"; + obj.urlPoster = jQuery("#html5_url_poster").val(); + obj.urlMp4 = jQuery("#html5_url_mp4").val(); + obj.urlWebm = jQuery("#html5_url_webm").val(); + obj.urlOgv = jQuery("#html5_url_ogv").val(); + obj.width = jQuery("#input_video_width").val(); + obj.height = jQuery("#input_video_height").val(); + + obj = addTextboxParamsToObj(obj); + + if(typeof lastVideoCallback == "function") + lastVideoCallback(obj); + + jQuery("#dialog_video").dialog("close"); + + }else{ //in case of vimeo and youtube + if(!lastVideoData) + return(false); + + lastVideoData = addTextboxParamsToObj(lastVideoData); + + if(typeof lastVideoCallback == "function") + lastVideoCallback(lastVideoData); + + jQuery("#dialog_video").dialog("close"); + } + + }); + + + //set vimeo search + jQuery("#button_vimeo_search").click(function(){ + //init data + setYoutubeDialogHtml(false); + jQuery("#video_hidden_controls").hide(); + + jQuery("#vimeo_loader").show(); + + jQuery("#video_content").show(); + + var vimeoID = jQuery("#vimeo_id").val(); + vimeoID = jQuery.trim(vimeoID); + vimeoID = getVimeoIDFromUrl(vimeoID); + + var urlAPI = 'http://www.vimeo.com/api/v2/video/' + vimeoID + '.json?callback=UniteAdminRev.onVimeoCallback'; + jQuery.getScript(urlAPI); + }); + + + jQuery("#input_video_fullwidth").click(updateVideoSizeProps); + + }//end initVideoDialog + + + /** + * init general settings dialog + */ + var initGeneralSettings = function(){ + + //button general settings - open dialog + jQuery("#button_general_settings").click(function(){ + + jQuery("#loader_general_settings").hide(); + + jQuery("#dialog_general_settings").dialog({ + minWidth:800, + minHeight:500, + modal:true, + dialogClass:"tpdialogs" + }); + + }); + + //button save general settings + jQuery("#button_save_general_settings").click(function(){ + var data = UniteSettingsRev.getSettingsObject("form_general_settings"); + jQuery("#loader_general_settings").show(); + UniteAdminRev.ajaxRequest("update_general_settings",data,function(response){ + jQuery("#loader_general_settings").hide(); + jQuery("#dialog_general_settings").dialog("close"); + }); + }); + + } + + + //run the init function + jQuery(document).ready(function(){ + initVideoDialog(); + + //init update dialog: + jQuery("#button_upload_plugin").click(function(){ + + jQuery("#dialog_update_plugin").dialog({ + minWidth:600, + minHeight:400, + modal:true, + dialogClass:"tpdialogs" + }); + + }); + + //update text operation + jQuery("#button_update_text").click(function(){ + UniteAdminRev.ajaxRequest("update_text","",function(response){ + alert(response.message); + }); + }); + + initGeneralSettings(); + + initSliderMultipleText(); + }); + + /** + * set multiple key values + */ + t.setMultipleTextKey = function(name, key){ + g_multiple_text_key[name] = key; + } + + /** + * set multiple key values + */ + t.getMultipleTextKey = function(name){ + return g_multiple_text_key[name]; + } + + var initSliderMultipleText = function(){ + + jQuery("body").on("click",".remove_multiple_text",function(){ //remove element + jQuery("#"+jQuery(this).data('remove')).remove(); + jQuery(this).parent().remove(); + }); + + jQuery(".multiple_text_add").click(function(){ //add element + + var handle = jQuery(this).data('name'); + var key = t.getMultipleTextKey(handle) + 1; + var template = jQuery('.'+handle+'_TEMPLATE').html(); + + template = template.replace(/##ID##/ig, handle+'_'+key).replace(/##NAME##/ig, handle); + jQuery('#'+handle+'_row .setting_input').append(template); + + t.setMultipleTextKey(handle, key); + }); + + } + + /** + * set multiple key values + */ + t.parseCssMultiAttribute = function(value){ + if(value == '') return false; + var raw = value.split(' '); + var retObj = []; + + switch(raw.length){ + case 1: + retObj[0] = raw[0]; + retObj[1] = raw[0]; + retObj[2] = raw[0]; + retObj[3] = raw[0]; + break; + case 2: + retObj[0] = raw[0]; + retObj[1] = raw[1]; + retObj[2] = raw[0]; + retObj[3] = raw[1]; + break; + case 3: + retObj[0] = raw[0]; + retObj[1] = raw[1]; + retObj[2] = raw[2]; + retObj[3] = raw[1]; + break; + case 4: + retObj[0] = raw[0]; + retObj[1] = raw[1]; + retObj[2] = raw[2]; + retObj[3] = raw[3]; + break; + case 0: + default: + return false; + break; + } + + return retObj; + } + + /** + * get rgb from hex values + */ + t.convertHexToRGB = function(hex) { + var hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16); + return [hex >> 16,(hex & 0x00FF00) >> 8,(hex & 0x0000FF)]; + } +} + + +//user functions: + +function trace(data,clear){ + UniteAdminRev.trace(data,clear); +} + +function debug(data){ + UniteAdminRev.debug(data); +} + diff --git a/src/wp-content/plugins/revslider/js/codemirror/codemirror.css b/src/wp-content/plugins/revslider/js/codemirror/codemirror.css new file mode 100644 index 0000000..82af6f0 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/codemirror.css @@ -0,0 +1,174 @@ +.CodeMirror { + line-height: 1em; + font-family: monospace; + + /* Necessary so the scrollbar can be absolutely positioned within the wrapper on Lion. */ + position: relative; + /* This prevents unwanted scrollbars from showing up on the body and wrapper in IE. */ + overflow: hidden; +} + +.CodeMirror-scroll { + overflow: auto; + height: 300px; + /* This is needed to prevent an IE[67] bug where the scrolled content + is visible outside of the scrolling box. */ + position: relative; + outline: none; +} + +/* Vertical scrollbar */ +.CodeMirror-scrollbar { + position: absolute; + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; + z-index: 5; +} +.CodeMirror-scrollbar-inner { + /* This needs to have a nonzero width in order for the scrollbar to appear + in Firefox and IE9. */ + width: 1px; +} +.CodeMirror-scrollbar.cm-sb-overlap { + /* Ensure that the scrollbar appears in Lion, and that it overlaps the content + rather than sitting to the right of it. */ + position: absolute; + z-index: 1; + float: none; + right: 0; + min-width: 12px; +} +.CodeMirror-scrollbar.cm-sb-nonoverlap { + min-width: 12px; +} +.CodeMirror-scrollbar.cm-sb-ie7 { + min-width: 18px; +} + +.CodeMirror-gutter { + position: absolute; left: 0; top: 0; + z-index: 10; + background-color: #f7f7f7; + border-right: 1px solid #eee; + min-width: 2em; + height: 100%; +} +.CodeMirror-gutter-text { + color: #aaa; + text-align: right; + padding: .4em .2em .4em .4em; + white-space: pre !important; + cursor: default; +} +.CodeMirror-lines { + padding: .4em; + white-space: pre; + cursor: text; +} + +.CodeMirror pre { + -moz-border-radius: 0; + -webkit-border-radius: 0; + -o-border-radius: 0; + border-radius: 0; + border-width: 0; margin: 0; padding: 0; background: transparent; + font-family: inherit; + font-size: inherit; + padding: 0; margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + overflow: visible; +} + +.CodeMirror-wrap pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} +.CodeMirror-wrap .CodeMirror-scroll { + overflow-x: hidden; +} + +.CodeMirror textarea { + outline: none !important; +} + +.CodeMirror pre.CodeMirror-cursor { + z-index: 10; + position: absolute; + visibility: hidden; + border-left: 1px solid black; + border-right: none; + width: 0; +} +.cm-keymap-fat-cursor pre.CodeMirror-cursor { + width: auto; + border: 0; + background: transparent; + background: rgba(0, 200, 0, .4); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#6600c800, endColorstr=#4c00c800); +} +/* Kludge to turn off filter in ie9+, which also accepts rgba */ +.cm-keymap-fat-cursor pre.CodeMirror-cursor:not(#nonsense_id) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} +.CodeMirror pre.CodeMirror-cursor.CodeMirror-overwrite {} +.CodeMirror-focused pre.CodeMirror-cursor { + visibility: visible; +} + +div.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused div.CodeMirror-selected { background: #d7d4f0; } + +.CodeMirror-searching { + background: #ffa; + background: rgba(255, 255, 0, .4); +} + +/* Default theme */ + +.cm-s-default span.cm-keyword {color: #708;} +.cm-s-default span.cm-atom {color: #219;} +.cm-s-default span.cm-number {color: #164;} +.cm-s-default span.cm-def {color: #00f;} +.cm-s-default span.cm-variable {color: black;} +.cm-s-default span.cm-variable-2 {color: #05a;} +.cm-s-default span.cm-variable-3 {color: #085;} +.cm-s-default span.cm-property {color: black;} +.cm-s-default span.cm-operator {color: black;} +.cm-s-default span.cm-comment {color: #a50;} +.cm-s-default span.cm-string {color: #a11;} +.cm-s-default span.cm-string-2 {color: #f50;} +.cm-s-default span.cm-meta {color: #555;} +.cm-s-default span.cm-error {color: #f00;} +.cm-s-default span.cm-qualifier {color: #555;} +.cm-s-default span.cm-builtin {color: #30a;} +.cm-s-default span.cm-bracket {color: #997;} +.cm-s-default span.cm-tag {color: #170;} +.cm-s-default span.cm-attribute {color: #00c;} +.cm-s-default span.cm-header {color: blue;} +.cm-s-default span.cm-quote {color: #090;} +.cm-s-default span.cm-hr {color: #999;} +.cm-s-default span.cm-link {color: #00c;} + +span.cm-header, span.cm-strong {font-weight: bold;} +span.cm-em {font-style: italic;} +span.cm-emstrong {font-style: italic; font-weight: bold;} +span.cm-link {text-decoration: underline;} + +span.cm-invalidchar {color: #f00;} + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} + +@media print { + + /* Hide the cursor when printing */ + .CodeMirror pre.CodeMirror-cursor { + visibility: hidden; + } + +} diff --git a/src/wp-content/plugins/revslider/js/codemirror/codemirror.js b/src/wp-content/plugins/revslider/js/codemirror/codemirror.js new file mode 100644 index 0000000..8bd5b4f --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/codemirror.js @@ -0,0 +1,3165 @@ +// CodeMirror version 2.35 +// +// All functions that need access to the editor's state live inside +// the CodeMirror function. Below that, at the bottom of the file, +// some utilities are defined. + +// CodeMirror is the only global var we claim +window.CodeMirror = (function() { + "use strict"; + // This is the function that produces an editor instance. Its + // closure is used to store the editor state. + function CodeMirror(place, givenOptions) { + // Determine effective options based on given values and defaults. + var options = {}, defaults = CodeMirror.defaults; + for (var opt in defaults) + if (defaults.hasOwnProperty(opt)) + options[opt] = (givenOptions && givenOptions.hasOwnProperty(opt) ? givenOptions : defaults)[opt]; + + var input = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em"); + input.setAttribute("wrap", "off"); input.setAttribute("autocorrect", "off"); input.setAttribute("autocapitalize", "off"); + // Wraps and hides input textarea + var inputDiv = elt("div", [input], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The empty scrollbar content, used solely for managing the scrollbar thumb. + var scrollbarInner = elt("div", null, "CodeMirror-scrollbar-inner"); + // The vertical scrollbar. Horizontal scrolling is handled by the scroller itself. + var scrollbar = elt("div", [scrollbarInner], "CodeMirror-scrollbar"); + // DIVs containing the selection and the actual code + var lineDiv = elt("div"), selectionDiv = elt("div", null, null, "position: relative; z-index: -1"); + // Blinky cursor, and element used to ensure cursor fits at the end of a line + var cursor = elt("pre", "\u00a0", "CodeMirror-cursor"), widthForcer = elt("pre", "\u00a0", "CodeMirror-cursor", "visibility: hidden"); + // Used to measure text size + var measure = elt("div", null, null, "position: absolute; width: 100%; height: 0px; overflow: hidden; visibility: hidden;"); + var lineSpace = elt("div", [measure, cursor, widthForcer, selectionDiv, lineDiv], null, "position: relative; z-index: 0"); + var gutterText = elt("div", null, "CodeMirror-gutter-text"), gutter = elt("div", [gutterText], "CodeMirror-gutter"); + // Moved around its parent to cover visible view + var mover = elt("div", [gutter, elt("div", [lineSpace], "CodeMirror-lines")], null, "position: relative"); + // Set to the height of the text, causes scrolling + var sizer = elt("div", [mover], null, "position: relative"); + // Provides scrolling + var scroller = elt("div", [sizer], "CodeMirror-scroll"); + scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + var wrapper = elt("div", [inputDiv, scrollbar, scroller], "CodeMirror" + (options.lineWrapping ? " CodeMirror-wrap" : "")); + if (place.appendChild) place.appendChild(wrapper); else place(wrapper); + + themeChanged(); keyMapChanged(); + // Needed to hide big blue blinking cursor on Mobile Safari + if (ios) input.style.width = "0px"; + if (!webkit) scroller.draggable = true; + lineSpace.style.outline = "none"; + if (options.tabindex != null) input.tabIndex = options.tabindex; + if (options.autofocus) focusInput(); + if (!options.gutter && !options.lineNumbers) gutter.style.display = "none"; + // Needed to handle Tab key in KHTML + if (khtml) inputDiv.style.height = "1px", inputDiv.style.position = "absolute"; + + // Check for OS X >= 10.7. This has transparent scrollbars, so the + // overlaying of one scrollbar with another won't work. This is a + // temporary hack to simply turn off the overlay scrollbar. See + // issue #727. + if (mac_geLion) { scrollbar.style.zIndex = -2; scrollbar.style.visibility = "hidden"; } + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + else if (ie_lt8) scrollbar.style.minWidth = "18px"; + + // Delayed object wrap timeouts, making sure only one is active. blinker holds an interval. + var poll = new Delayed(), highlight = new Delayed(), blinker; + + // mode holds a mode API object. doc is the tree of Line objects, + // frontier is the point up to which the content has been parsed, + // and history the undo history (instance of History constructor). + var mode, doc = new BranchChunk([new LeafChunk([new Line("")])]), frontier = 0, focused; + loadMode(); + // The selection. These are always maintained to point at valid + // positions. Inverted is used to remember that the user is + // selecting bottom-to-top. + var sel = {from: {line: 0, ch: 0}, to: {line: 0, ch: 0}, inverted: false}; + // Selection-related flags. shiftSelecting obviously tracks + // whether the user is holding shift. + var shiftSelecting, lastClick, lastDoubleClick, lastScrollTop = 0, draggingText, + overwrite = false, suppressEdits = false, pasteIncoming = false; + // Variables used by startOperation/endOperation to track what + // happened during the operation. + var updateInput, userSelChange, changes, textChanged, selectionChanged, + gutterDirty, callbacks; + // Current visible range (may be bigger than the view window). + var displayOffset = 0, showingFrom = 0, showingTo = 0, lastSizeC = 0; + // bracketHighlighted is used to remember that a bracket has been + // marked. + var bracketHighlighted; + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + var maxLine = getLine(0), updateMaxLine = false, maxLineChanged = true; + var pollingFast = false; // Ensures slowPoll doesn't cancel fastPoll + var goalColumn = null; + + // Initialize the content. + operation(function(){setValue(options.value || ""); updateInput = false;})(); + var history = new History(); + + // Register our event handlers. + connect(scroller, "mousedown", operation(onMouseDown)); + connect(scroller, "dblclick", operation(onDoubleClick)); + connect(lineSpace, "selectstart", e_preventDefault); + // Gecko browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for Gecko. + if (!gecko) connect(scroller, "contextmenu", onContextMenu); + connect(scroller, "scroll", onScrollMain); + connect(scrollbar, "scroll", onScrollBar); + connect(scrollbar, "mousedown", function() {if (focused) setTimeout(focusInput, 0);}); + var resizeHandler = connect(window, "resize", function() { + if (wrapper.parentNode) updateDisplay(true); + else resizeHandler(); + }, true); + connect(input, "keyup", operation(onKeyUp)); + connect(input, "input", fastPoll); + connect(input, "keydown", operation(onKeyDown)); + connect(input, "keypress", operation(onKeyPress)); + connect(input, "focus", onFocus); + connect(input, "blur", onBlur); + + function drag_(e) { + if (options.onDragEvent && options.onDragEvent(instance, addStop(e))) return; + e_stop(e); + } + if (options.dragDrop) { + connect(scroller, "dragstart", onDragStart); + connect(scroller, "dragenter", drag_); + connect(scroller, "dragover", drag_); + connect(scroller, "drop", operation(onDrop)); + } + connect(scroller, "paste", function(){focusInput(); fastPoll();}); + connect(input, "paste", function(){pasteIncoming = true; fastPoll();}); + connect(input, "cut", operation(function(){ + if (!options.readOnly) replaceSelection(""); + })); + + // Needed to handle Tab key in KHTML + if (khtml) connect(sizer, "mouseup", function() { + if (document.activeElement == input) input.blur(); + focusInput(); + }); + + // IE throws unspecified error in certain cases, when + // trying to access activeElement before onload + var hasFocus; try { hasFocus = (document.activeElement == input); } catch(e) { } + if (hasFocus || options.autofocus) setTimeout(onFocus, 20); + else onBlur(); + + function isLine(l) {return l >= 0 && l < doc.size;} + // The instance object that we'll return. Mostly calls out to + // local functions in the CodeMirror function. Some do some extra + // range checking and/or clipping. operation is used to wrap the + // call so that changes it makes are tracked, and the display is + // updated afterwards. + var instance = wrapper.CodeMirror = { + getValue: getValue, + setValue: operation(setValue), + getSelection: getSelection, + replaceSelection: operation(replaceSelection), + focus: function(){window.focus(); focusInput(); onFocus(); fastPoll();}, + setOption: function(option, value) { + var oldVal = options[option]; + options[option] = value; + if (option == "mode" || option == "indentUnit") loadMode(); + else if (option == "readOnly" && value == "nocursor") {onBlur(); input.blur();} + else if (option == "readOnly" && !value) {resetInput(true);} + else if (option == "theme") themeChanged(); + else if (option == "lineWrapping" && oldVal != value) operation(wrappingChanged)(); + else if (option == "tabSize") updateDisplay(true); + else if (option == "keyMap") keyMapChanged(); + else if (option == "tabindex") input.tabIndex = value; + if (option == "lineNumbers" || option == "gutter" || option == "firstLineNumber" || + option == "theme" || option == "lineNumberFormatter") { + gutterChanged(); + updateDisplay(true); + } + }, + getOption: function(option) {return options[option];}, + getMode: function() {return mode;}, + undo: operation(undo), + redo: operation(redo), + indentLine: operation(function(n, dir) { + if (typeof dir != "string") { + if (dir == null) dir = options.smartIndent ? "smart" : "prev"; + else dir = dir ? "add" : "subtract"; + } + if (isLine(n)) indentLine(n, dir); + }), + indentSelection: operation(indentSelected), + historySize: function() {return {undo: history.done.length, redo: history.undone.length};}, + clearHistory: function() {history = new History();}, + setHistory: function(histData) { + history = new History(); + history.done = histData.done; + history.undone = histData.undone; + }, + getHistory: function() { + function cp(arr) { + for (var i = 0, nw = [], nwelt; i < arr.length; ++i) { + nw.push(nwelt = []); + for (var j = 0, elt = arr[i]; j < elt.length; ++j) { + var old = [], cur = elt[j]; + nwelt.push({start: cur.start, added: cur.added, old: old}); + for (var k = 0; k < cur.old.length; ++k) old.push(hlText(cur.old[k])); + } + } + return nw; + } + return {done: cp(history.done), undone: cp(history.undone)}; + }, + matchBrackets: operation(function(){matchBrackets(true);}), + getTokenAt: operation(function(pos) { + pos = clipPos(pos); + return getLine(pos.line).getTokenAt(mode, getStateBefore(pos.line), options.tabSize, pos.ch); + }), + getStateAfter: function(line) { + line = clipLine(line == null ? doc.size - 1: line); + return getStateBefore(line + 1); + }, + cursorCoords: function(start, mode) { + if (start == null) start = sel.inverted; + return this.charCoords(start ? sel.from : sel.to, mode); + }, + charCoords: function(pos, mode) { + pos = clipPos(pos); + if (mode == "local") return localCoords(pos, false); + if (mode == "div") return localCoords(pos, true); + return pageCoords(pos); + }, + coordsChar: function(coords) { + var off = eltOffset(lineSpace); + return coordsChar(coords.x - off.left, coords.y - off.top); + }, + markText: operation(markText), + setBookmark: setBookmark, + findMarksAt: findMarksAt, + setMarker: operation(addGutterMarker), + clearMarker: operation(removeGutterMarker), + setLineClass: operation(setLineClass), + hideLine: operation(function(h) {return setLineHidden(h, true);}), + showLine: operation(function(h) {return setLineHidden(h, false);}), + onDeleteLine: function(line, f) { + if (typeof line == "number") { + if (!isLine(line)) return null; + line = getLine(line); + } + (line.handlers || (line.handlers = [])).push(f); + return line; + }, + lineInfo: lineInfo, + getViewport: function() { return {from: showingFrom, to: showingTo};}, + addWidget: function(pos, node, scroll, vert, horiz) { + pos = localCoords(clipPos(pos)); + var top = pos.yBot, left = pos.x; + node.style.position = "absolute"; + sizer.appendChild(node); + if (vert == "over") top = pos.y; + else if (vert == "near") { + var vspace = Math.max(scroller.offsetHeight, doc.height * textHeight()), + hspace = Math.max(sizer.clientWidth, lineSpace.clientWidth) - paddingLeft(); + if (pos.yBot + node.offsetHeight > vspace && pos.y > node.offsetHeight) + top = pos.y - node.offsetHeight; + if (left + node.offsetWidth > hspace) + left = hspace - node.offsetWidth; + } + node.style.top = (top + paddingTop()) + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") left = 0; + else if (horiz == "middle") left = (sizer.clientWidth - node.offsetWidth) / 2; + node.style.left = (left + paddingLeft()) + "px"; + } + if (scroll) + scrollIntoView(left, top, left + node.offsetWidth, top + node.offsetHeight); + }, + + lineCount: function() {return doc.size;}, + clipPos: clipPos, + getCursor: function(start) { + if (start == null) start = sel.inverted; + return copyPos(start ? sel.from : sel.to); + }, + somethingSelected: function() {return !posEq(sel.from, sel.to);}, + setCursor: operation(function(line, ch, user) { + if (ch == null && typeof line.line == "number") setCursor(line.line, line.ch, user); + else setCursor(line, ch, user); + }), + setSelection: operation(function(from, to, user) { + (user ? setSelectionUser : setSelection)(clipPos(from), clipPos(to || from)); + }), + getLine: function(line) {if (isLine(line)) return getLine(line).text;}, + getLineHandle: function(line) {if (isLine(line)) return getLine(line);}, + setLine: operation(function(line, text) { + if (isLine(line)) replaceRange(text, {line: line, ch: 0}, {line: line, ch: getLine(line).text.length}); + }), + removeLine: operation(function(line) { + if (isLine(line)) replaceRange("", {line: line, ch: 0}, clipPos({line: line+1, ch: 0})); + }), + replaceRange: operation(replaceRange), + getRange: function(from, to, lineSep) {return getRange(clipPos(from), clipPos(to), lineSep);}, + + triggerOnKeyDown: operation(onKeyDown), + execCommand: function(cmd) {return commands[cmd](instance);}, + // Stuff used by commands, probably not much use to outside code. + moveH: operation(moveH), + deleteH: operation(deleteH), + moveV: operation(moveV), + toggleOverwrite: function() { + if(overwrite){ + overwrite = false; + cursor.className = cursor.className.replace(" CodeMirror-overwrite", ""); + } else { + overwrite = true; + cursor.className += " CodeMirror-overwrite"; + } + }, + + posFromIndex: function(off) { + var lineNo = 0, ch; + doc.iter(0, doc.size, function(line) { + var sz = line.text.length + 1; + if (sz > off) { ch = off; return true; } + off -= sz; + ++lineNo; + }); + return clipPos({line: lineNo, ch: ch}); + }, + indexFromPos: function (coords) { + if (coords.line < 0 || coords.ch < 0) return 0; + var index = coords.ch; + doc.iter(0, coords.line, function (line) { + index += line.text.length + 1; + }); + return index; + }, + scrollTo: function(x, y) { + if (x != null) scroller.scrollLeft = x; + if (y != null) scrollbar.scrollTop = scroller.scrollTop = y; + updateDisplay([]); + }, + getScrollInfo: function() { + return {x: scroller.scrollLeft, y: scrollbar.scrollTop, + height: scrollbar.scrollHeight, width: scroller.scrollWidth}; + }, + setSize: function(width, height) { + function interpret(val) { + val = String(val); + return /^\d+$/.test(val) ? val + "px" : val; + } + if (width != null) wrapper.style.width = interpret(width); + if (height != null) scroller.style.height = interpret(height); + instance.refresh(); + }, + + operation: function(f){return operation(f)();}, + compoundChange: function(f){return compoundChange(f);}, + refresh: function(){ + updateDisplay(true, null, lastScrollTop); + if (scrollbar.scrollHeight > lastScrollTop) + scrollbar.scrollTop = lastScrollTop; + }, + getInputField: function(){return input;}, + getWrapperElement: function(){return wrapper;}, + getScrollerElement: function(){return scroller;}, + getGutterElement: function(){return gutter;} + }; + + function getLine(n) { return getLineAt(doc, n); } + function updateLineHeight(line, height) { + gutterDirty = true; + var diff = height - line.height; + for (var n = line; n; n = n.parent) n.height += diff; + } + + function lineContent(line, wrapAt) { + if (!line.styles) + line.highlight(mode, line.stateAfter = getStateBefore(lineNo(line)), options.tabSize); + return line.getContent(options.tabSize, wrapAt, options.lineWrapping); + } + + function setValue(code) { + var top = {line: 0, ch: 0}; + updateLines(top, {line: doc.size - 1, ch: getLine(doc.size-1).text.length}, + splitLines(code), top, top); + updateInput = true; + } + function getValue(lineSep) { + var text = []; + doc.iter(0, doc.size, function(line) { text.push(line.text); }); + return text.join(lineSep || "\n"); + } + + function onScrollBar(e) { + if (scrollbar.scrollTop != lastScrollTop) { + lastScrollTop = scroller.scrollTop = scrollbar.scrollTop; + updateDisplay([]); + } + } + + function onScrollMain(e) { + if (options.fixedGutter && gutter.style.left != scroller.scrollLeft + "px") + gutter.style.left = scroller.scrollLeft + "px"; + if (scroller.scrollTop != lastScrollTop) { + lastScrollTop = scroller.scrollTop; + if (scrollbar.scrollTop != lastScrollTop) + scrollbar.scrollTop = lastScrollTop; + updateDisplay([]); + } + if (options.onScroll) options.onScroll(instance); + } + + function onMouseDown(e) { + setShift(e_prop(e, "shiftKey")); + // Check whether this is a click in a widget + for (var n = e_target(e); n != wrapper; n = n.parentNode) + if (n.parentNode == sizer && n != mover) return; + + // See if this is a click in the gutter + for (var n = e_target(e); n != wrapper; n = n.parentNode) + if (n.parentNode == gutterText) { + if (options.onGutterClick) + options.onGutterClick(instance, indexOf(gutterText.childNodes, n) + showingFrom, e); + return e_preventDefault(e); + } + + var start = posFromMouse(e); + + switch (e_button(e)) { + case 3: + if (gecko) onContextMenu(e); + return; + case 2: + if (start) setCursor(start.line, start.ch, true); + setTimeout(focusInput, 20); + e_preventDefault(e); + return; + } + // For button 1, if it was clicked inside the editor + // (posFromMouse returning non-null), we have to adjust the + // selection. + if (!start) {if (e_target(e) == scroller) e_preventDefault(e); return;} + + if (!focused) onFocus(); + + var now = +new Date, type = "single"; + if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) { + type = "triple"; + e_preventDefault(e); + setTimeout(focusInput, 20); + selectLine(start.line); + } else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) { + type = "double"; + lastDoubleClick = {time: now, pos: start}; + e_preventDefault(e); + var word = findWordAt(start); + setSelectionUser(word.from, word.to); + } else { lastClick = {time: now, pos: start}; } + + function dragEnd(e2) { + if (webkit) scroller.draggable = false; + draggingText = false; + up(); drop(); + if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { + e_preventDefault(e2); + setCursor(start.line, start.ch, true); + focusInput(); + } + } + var last = start, going; + if (options.dragDrop && dragAndDrop && !options.readOnly && !posEq(sel.from, sel.to) && + !posLess(start, sel.from) && !posLess(sel.to, start) && type == "single") { + // Let the drag handler handle this. + if (webkit) scroller.draggable = true; + var up = connect(document, "mouseup", operation(dragEnd), true); + var drop = connect(scroller, "drop", operation(dragEnd), true); + draggingText = true; + // IE's approach to draggable + if (scroller.dragDrop) scroller.dragDrop(); + return; + } + e_preventDefault(e); + if (type == "single") setCursor(start.line, start.ch, true); + + var startstart = sel.from, startend = sel.to; + + function doSelect(cur) { + if (type == "single") { + setSelectionUser(start, cur); + } else if (type == "double") { + var word = findWordAt(cur); + if (posLess(cur, startstart)) setSelectionUser(word.from, startend); + else setSelectionUser(startstart, word.to); + } else if (type == "triple") { + if (posLess(cur, startstart)) setSelectionUser(startend, clipPos({line: cur.line, ch: 0})); + else setSelectionUser(startstart, clipPos({line: cur.line + 1, ch: 0})); + } + } + + function extend(e) { + var cur = posFromMouse(e, true); + if (cur && !posEq(cur, last)) { + if (!focused) onFocus(); + last = cur; + doSelect(cur); + updateInput = false; + var visible = visibleLines(); + if (cur.line >= visible.to || cur.line < visible.from) + going = setTimeout(operation(function(){extend(e);}), 150); + } + } + + function done(e) { + clearTimeout(going); + var cur = posFromMouse(e); + if (cur) doSelect(cur); + e_preventDefault(e); + focusInput(); + updateInput = true; + move(); up(); + } + var move = connect(document, "mousemove", operation(function(e) { + clearTimeout(going); + e_preventDefault(e); + if (!ie && !e_button(e)) done(e); + else extend(e); + }), true); + var up = connect(document, "mouseup", operation(done), true); + } + function onDoubleClick(e) { + for (var n = e_target(e); n != wrapper; n = n.parentNode) + if (n.parentNode == gutterText) return e_preventDefault(e); + e_preventDefault(e); + } + function onDrop(e) { + if (options.onDragEvent && options.onDragEvent(instance, addStop(e))) return; + e_preventDefault(e); + var pos = posFromMouse(e, true), files = e.dataTransfer.files; + if (!pos || options.readOnly) return; + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var loadFile = function(file, i) { + var reader = new FileReader; + reader.onload = function() { + text[i] = reader.result; + if (++read == n) { + pos = clipPos(pos); + operation(function() { + var end = replaceRange(text.join(""), pos, pos); + setSelectionUser(pos, end); + })(); + } + }; + reader.readAsText(file); + }; + for (var i = 0; i < n; ++i) loadFile(files[i], i); + } else { + // Don't do a replace if the drop happened inside of the selected text. + if (draggingText && !(posLess(pos, sel.from) || posLess(sel.to, pos))) return; + try { + var text = e.dataTransfer.getData("Text"); + if (text) { + compoundChange(function() { + var curFrom = sel.from, curTo = sel.to; + setSelectionUser(pos, pos); + if (draggingText) replaceRange("", curFrom, curTo); + replaceSelection(text); + focusInput(); + }); + } + } + catch(e){} + } + } + function onDragStart(e) { + var txt = getSelection(); + e.dataTransfer.setData("Text", txt); + + // Use dummy image instead of default browsers image. + if (e.dataTransfer.setDragImage) + e.dataTransfer.setDragImage(elt('img'), 0, 0); + } + + function doHandleBinding(bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) return false; + } + var prevShift = shiftSelecting; + try { + if (options.readOnly) suppressEdits = true; + if (dropShift) shiftSelecting = null; + bound(instance); + } catch(e) { + if (e != Pass) throw e; + return false; + } finally { + shiftSelecting = prevShift; + suppressEdits = false; + } + return true; + } + var maybeTransition; + function handleKeyBinding(e) { + // Handle auto keymap transitions + var startMap = getKeyMap(options.keyMap), next = startMap.auto; + clearTimeout(maybeTransition); + if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() { + if (getKeyMap(options.keyMap) == startMap) { + options.keyMap = (next.call ? next.call(null, instance) : next); + } + }, 50); + + var name = keyNames[e_prop(e, "keyCode")], handled = false; + var flipCtrlCmd = opera && mac; + if (name == null || e.altGraphKey) return false; + if (e_prop(e, "altKey")) name = "Alt-" + name; + if (e_prop(e, flipCtrlCmd ? "metaKey" : "ctrlKey")) name = "Ctrl-" + name; + if (e_prop(e, flipCtrlCmd ? "ctrlKey" : "metaKey")) name = "Cmd-" + name; + + var stopped = false; + function stop() { stopped = true; } + + if (e_prop(e, "shiftKey")) { + handled = lookupKey("Shift-" + name, options.extraKeys, options.keyMap, + function(b) {return doHandleBinding(b, true);}, stop) + || lookupKey(name, options.extraKeys, options.keyMap, function(b) { + if (typeof b == "string" && /^go[A-Z]/.test(b)) return doHandleBinding(b); + }, stop); + } else { + handled = lookupKey(name, options.extraKeys, options.keyMap, doHandleBinding, stop); + } + if (stopped) handled = false; + if (handled) { + e_preventDefault(e); + restartBlink(); + if (ie) { e.oldKeyCode = e.keyCode; e.keyCode = 0; } + } + return handled; + } + function handleCharBinding(e, ch) { + var handled = lookupKey("'" + ch + "'", options.extraKeys, + options.keyMap, function(b) { return doHandleBinding(b, true); }); + if (handled) { + e_preventDefault(e); + restartBlink(); + } + return handled; + } + + var lastStoppedKey = null; + function onKeyDown(e) { + if (!focused) onFocus(); + if (ie && e.keyCode == 27) { e.returnValue = false; } + if (pollingFast) { if (readInput()) pollingFast = false; } + if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return; + var code = e_prop(e, "keyCode"); + // IE does strange things with escape. + setShift(code == 16 || e_prop(e, "shiftKey")); + // First give onKeyEvent option a chance to handle this. + var handled = handleKeyBinding(e); + if (opera) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && e_prop(e, mac ? "metaKey" : "ctrlKey")) + replaceSelection(""); + } + } + function onKeyPress(e) { + if (pollingFast) readInput(); + if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return; + var keyCode = e_prop(e, "keyCode"), charCode = e_prop(e, "charCode"); + if (opera && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} + if (((opera && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(e)) return; + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + if (options.electricChars && mode.electricChars && options.smartIndent && !options.readOnly) { + if (mode.electricChars.indexOf(ch) > -1) + setTimeout(operation(function() {indentLine(sel.to.line, "smart");}), 75); + } + if (handleCharBinding(e, ch)) return; + fastPoll(); + } + function onKeyUp(e) { + if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return; + if (e_prop(e, "keyCode") == 16) shiftSelecting = null; + } + + function onFocus() { + if (options.readOnly == "nocursor") return; + if (!focused) { + if (options.onFocus) options.onFocus(instance); + focused = true; + if (scroller.className.search(/\bCodeMirror-focused\b/) == -1) + scroller.className += " CodeMirror-focused"; + } + slowPoll(); + restartBlink(); + } + function onBlur() { + if (focused) { + if (options.onBlur) options.onBlur(instance); + focused = false; + if (bracketHighlighted) + operation(function(){ + if (bracketHighlighted) { bracketHighlighted(); bracketHighlighted = null; } + })(); + scroller.className = scroller.className.replace(" CodeMirror-focused", ""); + } + clearInterval(blinker); + setTimeout(function() {if (!focused) shiftSelecting = null;}, 150); + } + + // Replace the range from from to to by the strings in newText. + // Afterwards, set the selection to selFrom, selTo. + function updateLines(from, to, newText, selFrom, selTo) { + if (suppressEdits) return; + var old = []; + doc.iter(from.line, to.line + 1, function(line) { + old.push(newHL(line.text, line.markedSpans)); + }); + if (history) { + history.addChange(from.line, newText.length, old); + while (history.done.length > options.undoDepth) history.done.shift(); + } + var lines = updateMarkedSpans(hlSpans(old[0]), hlSpans(lst(old)), from.ch, to.ch, newText); + updateLinesNoUndo(from, to, lines, selFrom, selTo); + } + function unredoHelper(from, to) { + if (!from.length) return; + var set = from.pop(), out = []; + for (var i = set.length - 1; i >= 0; i -= 1) { + var change = set[i]; + var replaced = [], end = change.start + change.added; + doc.iter(change.start, end, function(line) { replaced.push(newHL(line.text, line.markedSpans)); }); + out.push({start: change.start, added: change.old.length, old: replaced}); + var pos = {line: change.start + change.old.length - 1, + ch: editEnd(hlText(lst(replaced)), hlText(lst(change.old)))}; + updateLinesNoUndo({line: change.start, ch: 0}, {line: end - 1, ch: getLine(end-1).text.length}, + change.old, pos, pos); + } + updateInput = true; + to.push(out); + } + function undo() {unredoHelper(history.done, history.undone);} + function redo() {unredoHelper(history.undone, history.done);} + + function updateLinesNoUndo(from, to, lines, selFrom, selTo) { + if (suppressEdits) return; + var recomputeMaxLength = false, maxLineLength = maxLine.text.length; + if (!options.lineWrapping) + doc.iter(from.line, to.line + 1, function(line) { + if (!line.hidden && line.text.length == maxLineLength) {recomputeMaxLength = true; return true;} + }); + if (from.line != to.line || lines.length > 1) gutterDirty = true; + + var nlines = to.line - from.line, firstLine = getLine(from.line), lastLine = getLine(to.line); + var lastHL = lst(lines); + + // First adjust the line structure + if (from.ch == 0 && to.ch == 0 && hlText(lastHL) == "") { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = [], prevLine = null; + for (var i = 0, e = lines.length - 1; i < e; ++i) + added.push(new Line(hlText(lines[i]), hlSpans(lines[i]))); + lastLine.update(lastLine.text, hlSpans(lastHL)); + if (nlines) doc.remove(from.line, nlines, callbacks); + if (added.length) doc.insert(from.line, added); + } else if (firstLine == lastLine) { + if (lines.length == 1) { + firstLine.update(firstLine.text.slice(0, from.ch) + hlText(lines[0]) + firstLine.text.slice(to.ch), hlSpans(lines[0])); + } else { + for (var added = [], i = 1, e = lines.length - 1; i < e; ++i) + added.push(new Line(hlText(lines[i]), hlSpans(lines[i]))); + added.push(new Line(hlText(lastHL) + firstLine.text.slice(to.ch), hlSpans(lastHL))); + firstLine.update(firstLine.text.slice(0, from.ch) + hlText(lines[0]), hlSpans(lines[0])); + doc.insert(from.line + 1, added); + } + } else if (lines.length == 1) { + firstLine.update(firstLine.text.slice(0, from.ch) + hlText(lines[0]) + lastLine.text.slice(to.ch), hlSpans(lines[0])); + doc.remove(from.line + 1, nlines, callbacks); + } else { + var added = []; + firstLine.update(firstLine.text.slice(0, from.ch) + hlText(lines[0]), hlSpans(lines[0])); + lastLine.update(hlText(lastHL) + lastLine.text.slice(to.ch), hlSpans(lastHL)); + for (var i = 1, e = lines.length - 1; i < e; ++i) + added.push(new Line(hlText(lines[i]), hlSpans(lines[i]))); + if (nlines > 1) doc.remove(from.line + 1, nlines - 1, callbacks); + doc.insert(from.line + 1, added); + } + if (options.lineWrapping) { + var perLine = Math.max(5, scroller.clientWidth / charWidth() - 3); + doc.iter(from.line, from.line + lines.length, function(line) { + if (line.hidden) return; + var guess = Math.ceil(line.text.length / perLine) || 1; + if (guess != line.height) updateLineHeight(line, guess); + }); + } else { + doc.iter(from.line, from.line + lines.length, function(line) { + var l = line.text; + if (!line.hidden && l.length > maxLineLength) { + maxLine = line; maxLineLength = l.length; maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) updateMaxLine = true; + } + + // Adjust frontier, schedule worker + frontier = Math.min(frontier, from.line); + startWorker(400); + + var lendiff = lines.length - nlines - 1; + // Remember that these lines changed, for updating the display + changes.push({from: from.line, to: to.line + 1, diff: lendiff}); + if (options.onChange) { + // Normalize lines to contain only strings, since that's what + // the change event handler expects + for (var i = 0; i < lines.length; ++i) + if (typeof lines[i] != "string") lines[i] = lines[i].text; + var changeObj = {from: from, to: to, text: lines}; + if (textChanged) { + for (var cur = textChanged; cur.next; cur = cur.next) {} + cur.next = changeObj; + } else textChanged = changeObj; + } + + // Update the selection + function updateLine(n) {return n <= Math.min(to.line, to.line + lendiff) ? n : n + lendiff;} + setSelection(clipPos(selFrom), clipPos(selTo), + updateLine(sel.from.line), updateLine(sel.to.line)); + } + + function needsScrollbar() { + var realHeight = doc.height * textHeight() + 2 * paddingTop(); + return realHeight * .99 > scroller.offsetHeight ? realHeight : false; + } + + function updateVerticalScroll(scrollTop) { + var scrollHeight = needsScrollbar(); + scrollbar.style.display = scrollHeight ? "block" : "none"; + if (scrollHeight) { + scrollbarInner.style.height = sizer.style.minHeight = scrollHeight + "px"; + scrollbar.style.height = scroller.clientHeight + "px"; + if (scrollTop != null) { + scrollbar.scrollTop = scroller.scrollTop = scrollTop; + // 'Nudge' the scrollbar to work around a Webkit bug where, + // in some situations, we'd end up with a scrollbar that + // reported its scrollTop (and looked) as expected, but + // *behaved* as if it was still in a previous state (i.e. + // couldn't scroll up, even though it appeared to be at the + // bottom). + if (webkit) setTimeout(function() { + if (scrollbar.scrollTop != scrollTop) return; + scrollbar.scrollTop = scrollTop + (scrollTop ? -1 : 1); + scrollbar.scrollTop = scrollTop; + }, 0); + } + } else { + sizer.style.minHeight = ""; + } + // Position the mover div to align with the current virtual scroll position + mover.style.top = displayOffset * textHeight() + "px"; + } + + function computeMaxLength() { + maxLine = getLine(0); maxLineChanged = true; + var maxLineLength = maxLine.text.length; + doc.iter(1, doc.size, function(line) { + var l = line.text; + if (!line.hidden && l.length > maxLineLength) { + maxLineLength = l.length; maxLine = line; + } + }); + updateMaxLine = false; + } + + function replaceRange(code, from, to) { + from = clipPos(from); + if (!to) to = from; else to = clipPos(to); + code = splitLines(code); + function adjustPos(pos) { + if (posLess(pos, from)) return pos; + if (!posLess(to, pos)) return end; + var line = pos.line + code.length - (to.line - from.line) - 1; + var ch = pos.ch; + if (pos.line == to.line) + ch += lst(code).length - (to.ch - (to.line == from.line ? from.ch : 0)); + return {line: line, ch: ch}; + } + var end; + replaceRange1(code, from, to, function(end1) { + end = end1; + return {from: adjustPos(sel.from), to: adjustPos(sel.to)}; + }); + return end; + } + function replaceSelection(code, collapse) { + replaceRange1(splitLines(code), sel.from, sel.to, function(end) { + if (collapse == "end") return {from: end, to: end}; + else if (collapse == "start") return {from: sel.from, to: sel.from}; + else return {from: sel.from, to: end}; + }); + } + function replaceRange1(code, from, to, computeSel) { + var endch = code.length == 1 ? code[0].length + from.ch : lst(code).length; + var newSel = computeSel({line: from.line + code.length - 1, ch: endch}); + updateLines(from, to, code, newSel.from, newSel.to); + } + + function getRange(from, to, lineSep) { + var l1 = from.line, l2 = to.line; + if (l1 == l2) return getLine(l1).text.slice(from.ch, to.ch); + var code = [getLine(l1).text.slice(from.ch)]; + doc.iter(l1 + 1, l2, function(line) { code.push(line.text); }); + code.push(getLine(l2).text.slice(0, to.ch)); + return code.join(lineSep || "\n"); + } + function getSelection(lineSep) { + return getRange(sel.from, sel.to, lineSep); + } + + function slowPoll() { + if (pollingFast) return; + poll.set(options.pollInterval, function() { + readInput(); + if (focused) slowPoll(); + }); + } + function fastPoll() { + var missed = false; + pollingFast = true; + function p() { + var changed = readInput(); + if (!changed && !missed) {missed = true; poll.set(60, p);} + else {pollingFast = false; slowPoll();} + } + poll.set(20, p); + } + + // Previnput is a hack to work with IME. If we reset the textarea + // on every change, that breaks IME. So we look for changes + // compared to the previous content instead. (Modern browsers have + // events that indicate IME taking place, but these are not widely + // supported or compatible enough yet to rely on.) + var prevInput = ""; + function readInput() { + if (!focused || hasSelection(input) || options.readOnly) return false; + var text = input.value; + if (text == prevInput) return false; + if (!nestedOperation) startOperation(); + shiftSelecting = null; + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput[same] == text[same]) ++same; + if (same < prevInput.length) + sel.from = {line: sel.from.line, ch: sel.from.ch - (prevInput.length - same)}; + else if (overwrite && posEq(sel.from, sel.to) && !pasteIncoming) + sel.to = {line: sel.to.line, ch: Math.min(getLine(sel.to.line).text.length, sel.to.ch + (text.length - same))}; + replaceSelection(text.slice(same), "end"); + if (text.length > 1000) { input.value = prevInput = ""; } + else prevInput = text; + if (!nestedOperation) endOperation(); + pasteIncoming = false; + return true; + } + function resetInput(user) { + if (!posEq(sel.from, sel.to)) { + prevInput = ""; + input.value = getSelection(); + if (focused) selectInput(input); + } else if (user) prevInput = input.value = ""; + } + + function focusInput() { + if (options.readOnly != "nocursor") input.focus(); + } + + function scrollCursorIntoView() { + var coords = calculateCursorCoords(); + scrollIntoView(coords.x, coords.y, coords.x, coords.yBot); + if (!focused) return; + var box = sizer.getBoundingClientRect(), doScroll = null; + if (coords.y + box.top < 0) doScroll = true; + else if (coords.y + box.top + textHeight() > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; + if (doScroll != null) { + var hidden = cursor.style.display == "none"; + if (hidden) { + cursor.style.display = ""; + cursor.style.left = coords.x + "px"; + cursor.style.top = (coords.y - displayOffset) + "px"; + } + cursor.scrollIntoView(doScroll); + if (hidden) cursor.style.display = "none"; + } + } + function calculateCursorCoords() { + var cursor = localCoords(sel.inverted ? sel.from : sel.to); + var x = options.lineWrapping ? Math.min(cursor.x, lineSpace.offsetWidth) : cursor.x; + return {x: x, y: cursor.y, yBot: cursor.yBot}; + } + function scrollIntoView(x1, y1, x2, y2) { + var scrollPos = calculateScrollPos(x1, y1, x2, y2); + if (scrollPos.scrollLeft != null) {scroller.scrollLeft = scrollPos.scrollLeft;} + if (scrollPos.scrollTop != null) {scrollbar.scrollTop = scroller.scrollTop = scrollPos.scrollTop;} + } + function calculateScrollPos(x1, y1, x2, y2) { + var pl = paddingLeft(), pt = paddingTop(); + y1 += pt; y2 += pt; x1 += pl; x2 += pl; + var screen = scroller.clientHeight, screentop = scrollbar.scrollTop, result = {}; + var docBottom = needsScrollbar() || Infinity; + var atTop = y1 < pt + 10, atBottom = y2 + pt > docBottom - 10; + if (y1 < screentop) result.scrollTop = atTop ? 0 : Math.max(0, y1); + else if (y2 > screentop + screen) result.scrollTop = (atBottom ? docBottom : y2) - screen; + + var screenw = scroller.clientWidth, screenleft = scroller.scrollLeft; + var gutterw = options.fixedGutter ? gutter.clientWidth : 0; + var atLeft = x1 < gutterw + pl + 10; + if (x1 < screenleft + gutterw || atLeft) { + if (atLeft) x1 = 0; + result.scrollLeft = Math.max(0, x1 - 10 - gutterw); + } else if (x2 > screenw + screenleft - 3) { + result.scrollLeft = x2 + 10 - screenw; + } + return result; + } + + function visibleLines(scrollTop) { + var lh = textHeight(), top = (scrollTop != null ? scrollTop : scrollbar.scrollTop) - paddingTop(); + var fromHeight = Math.max(0, Math.floor(top / lh)); + var toHeight = Math.ceil((top + scroller.clientHeight) / lh); + return {from: lineAtHeight(doc, fromHeight), + to: lineAtHeight(doc, toHeight)}; + } + // Uses a set of changes plus the current scroll position to + // determine which DOM updates have to be made, and makes the + // updates. + function updateDisplay(changes, suppressCallback, scrollTop) { + if (!scroller.clientWidth) { + showingFrom = showingTo = displayOffset = 0; + return; + } + // Compute the new visible window + // If scrollTop is specified, use that to determine which lines + // to render instead of the current scrollbar position. + var visible = visibleLines(scrollTop); + // Bail out if the visible area is already rendered and nothing changed. + if (changes !== true && changes.length == 0 && visible.from > showingFrom && visible.to < showingTo) { + updateVerticalScroll(scrollTop); + return; + } + var from = Math.max(visible.from - 100, 0), to = Math.min(doc.size, visible.to + 100); + if (showingFrom < from && from - showingFrom < 20) from = showingFrom; + if (showingTo > to && showingTo - to < 20) to = Math.min(doc.size, showingTo); + + // Create a range of theoretically intact lines, and punch holes + // in that using the change info. + var intact = changes === true ? [] : + computeIntact([{from: showingFrom, to: showingTo, domStart: 0}], changes); + // Clip off the parts that won't be visible + var intactLines = 0; + for (var i = 0; i < intact.length; ++i) { + var range = intact[i]; + if (range.from < from) {range.domStart += (from - range.from); range.from = from;} + if (range.to > to) range.to = to; + if (range.from >= range.to) intact.splice(i--, 1); + else intactLines += range.to - range.from; + } + if (intactLines == to - from && from == showingFrom && to == showingTo) { + updateVerticalScroll(scrollTop); + return; + } + intact.sort(function(a, b) {return a.domStart - b.domStart;}); + + var th = textHeight(), gutterDisplay = gutter.style.display; + lineDiv.style.display = "none"; + patchDisplay(from, to, intact); + lineDiv.style.display = gutter.style.display = ""; + + var different = from != showingFrom || to != showingTo || lastSizeC != scroller.clientHeight + th; + // This is just a bogus formula that detects when the editor is + // resized or the font size changes. + if (different) lastSizeC = scroller.clientHeight + th; + if (from != showingFrom || to != showingTo && options.onViewportChange) + setTimeout(function(){ + if (options.onViewportChange) options.onViewportChange(instance, from, to); + }); + showingFrom = from; showingTo = to; + displayOffset = heightAtLine(doc, from); + startWorker(100); + + // Since this is all rather error prone, it is honoured with the + // only assertion in the whole file. + if (lineDiv.childNodes.length != showingTo - showingFrom) + throw new Error("BAD PATCH! " + JSON.stringify(intact) + " size=" + (showingTo - showingFrom) + + " nodes=" + lineDiv.childNodes.length); + + function checkHeights() { + var curNode = lineDiv.firstChild, heightChanged = false; + doc.iter(showingFrom, showingTo, function(line) { + // Work around bizarro IE7 bug where, sometimes, our curNode + // is magically replaced with a new node in the DOM, leaving + // us with a reference to an orphan (nextSibling-less) node. + if (!curNode) return; + if (!line.hidden) { + var height = Math.round(curNode.offsetHeight / th) || 1; + if (line.height != height) { + updateLineHeight(line, height); + gutterDirty = heightChanged = true; + } + } + curNode = curNode.nextSibling; + }); + return heightChanged; + } + + if (options.lineWrapping) checkHeights(); + + gutter.style.display = gutterDisplay; + if (different || gutterDirty) { + // If the gutter grew in size, re-check heights. If those changed, re-draw gutter. + updateGutter() && options.lineWrapping && checkHeights() && updateGutter(); + } + updateVerticalScroll(scrollTop); + updateSelection(); + if (!suppressCallback && options.onUpdate) options.onUpdate(instance); + return true; + } + + function computeIntact(intact, changes) { + for (var i = 0, l = changes.length || 0; i < l; ++i) { + var change = changes[i], intact2 = [], diff = change.diff || 0; + for (var j = 0, l2 = intact.length; j < l2; ++j) { + var range = intact[j]; + if (change.to <= range.from && change.diff) + intact2.push({from: range.from + diff, to: range.to + diff, + domStart: range.domStart}); + else if (change.to <= range.from || change.from >= range.to) + intact2.push(range); + else { + if (change.from > range.from) + intact2.push({from: range.from, to: change.from, domStart: range.domStart}); + if (change.to < range.to) + intact2.push({from: change.to + diff, to: range.to + diff, + domStart: range.domStart + (change.to - range.from)}); + } + } + intact = intact2; + } + return intact; + } + + function patchDisplay(from, to, intact) { + function killNode(node) { + var tmp = node.nextSibling; + node.parentNode.removeChild(node); + return tmp; + } + // The first pass removes the DOM nodes that aren't intact. + if (!intact.length) removeChildren(lineDiv); + else { + var domPos = 0, curNode = lineDiv.firstChild, n; + for (var i = 0; i < intact.length; ++i) { + var cur = intact[i]; + while (cur.domStart > domPos) {curNode = killNode(curNode); domPos++;} + for (var j = 0, e = cur.to - cur.from; j < e; ++j) {curNode = curNode.nextSibling; domPos++;} + } + while (curNode) curNode = killNode(curNode); + } + // This pass fills in the lines that actually changed. + var nextIntact = intact.shift(), curNode = lineDiv.firstChild, j = from; + doc.iter(from, to, function(line) { + if (nextIntact && nextIntact.to == j) nextIntact = intact.shift(); + if (!nextIntact || nextIntact.from > j) { + if (line.hidden) var lineElement = elt("pre"); + else { + var lineElement = lineContent(line); + if (line.className) lineElement.className = line.className; + // Kludge to make sure the styled element lies behind the selection (by z-index) + if (line.bgClassName) { + var pre = elt("pre", "\u00a0", line.bgClassName, "position: absolute; left: 0; right: 0; top: 0; bottom: 0; z-index: -2"); + lineElement = elt("div", [pre, lineElement], null, "position: relative"); + } + } + lineDiv.insertBefore(lineElement, curNode); + } else { + curNode = curNode.nextSibling; + } + ++j; + }); + } + + function updateGutter() { + if (!options.gutter && !options.lineNumbers) return; + var hText = mover.offsetHeight, hEditor = scroller.clientHeight; + gutter.style.height = (hText - hEditor < 2 ? hEditor : hText) + "px"; + var fragment = document.createDocumentFragment(), i = showingFrom, normalNode; + doc.iter(showingFrom, Math.max(showingTo, showingFrom + 1), function(line) { + if (line.hidden) { + fragment.appendChild(elt("pre")); + } else { + var marker = line.gutterMarker; + var text = options.lineNumbers ? options.lineNumberFormatter(i + options.firstLineNumber) : null; + if (marker && marker.text) + text = marker.text.replace("%N%", text != null ? text : ""); + else if (text == null) + text = "\u00a0"; + var markerElement = fragment.appendChild(elt("pre", null, marker && marker.style)); + markerElement.innerHTML = text; + for (var j = 1; j < line.height; ++j) { + markerElement.appendChild(elt("br")); + markerElement.appendChild(document.createTextNode("\u00a0")); + } + if (!marker) normalNode = i; + } + ++i; + }); + gutter.style.display = "none"; + removeChildrenAndAdd(gutterText, fragment); + // Make sure scrolling doesn't cause number gutter size to pop + if (normalNode != null && options.lineNumbers) { + var node = gutterText.childNodes[normalNode - showingFrom]; + var minwidth = String(doc.size).length, val = eltText(node.firstChild), pad = ""; + while (val.length + pad.length < minwidth) pad += "\u00a0"; + if (pad) node.insertBefore(document.createTextNode(pad), node.firstChild); + } + gutter.style.display = ""; + var resized = Math.abs((parseInt(lineSpace.style.marginLeft) || 0) - gutter.offsetWidth) > 2; + lineSpace.style.marginLeft = gutter.offsetWidth + "px"; + gutterDirty = false; + return resized; + } + function updateSelection() { + var collapsed = posEq(sel.from, sel.to); + var fromPos = localCoords(sel.from, true); + var toPos = collapsed ? fromPos : localCoords(sel.to, true); + var headPos = sel.inverted ? fromPos : toPos, th = textHeight(); + var wrapOff = eltOffset(wrapper), lineOff = eltOffset(lineDiv); + inputDiv.style.top = Math.max(0, Math.min(scroller.offsetHeight, headPos.y + lineOff.top - wrapOff.top)) + "px"; + inputDiv.style.left = Math.max(0, Math.min(scroller.offsetWidth, headPos.x + lineOff.left - wrapOff.left)) + "px"; + if (collapsed) { + cursor.style.top = headPos.y + "px"; + cursor.style.left = (options.lineWrapping ? Math.min(headPos.x, lineSpace.offsetWidth) : headPos.x) + "px"; + cursor.style.display = ""; + selectionDiv.style.display = "none"; + } else { + var sameLine = fromPos.y == toPos.y, fragment = document.createDocumentFragment(); + var clientWidth = lineSpace.clientWidth || lineSpace.offsetWidth; + var clientHeight = lineSpace.clientHeight || lineSpace.offsetHeight; + var add = function(left, top, right, height) { + var rstyle = quirksMode ? "width: " + (!right ? clientWidth : clientWidth - right - left) + "px" + : "right: " + right + "px"; + fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + + "px; top: " + top + "px; " + rstyle + "; height: " + height + "px")); + }; + if (sel.from.ch && fromPos.y >= 0) { + var right = sameLine ? clientWidth - toPos.x : 0; + add(fromPos.x, fromPos.y, right, th); + } + var middleStart = Math.max(0, fromPos.y + (sel.from.ch ? th : 0)); + var middleHeight = Math.min(toPos.y, clientHeight) - middleStart; + if (middleHeight > 0.2 * th) + add(0, middleStart, 0, middleHeight); + if ((!sameLine || !sel.from.ch) && toPos.y < clientHeight - .5 * th) + add(0, toPos.y, clientWidth - toPos.x, th); + removeChildrenAndAdd(selectionDiv, fragment); + cursor.style.display = "none"; + selectionDiv.style.display = ""; + } + } + + function setShift(val) { + if (val) shiftSelecting = shiftSelecting || (sel.inverted ? sel.to : sel.from); + else shiftSelecting = null; + } + function setSelectionUser(from, to) { + var sh = shiftSelecting && clipPos(shiftSelecting); + if (sh) { + if (posLess(sh, from)) from = sh; + else if (posLess(to, sh)) to = sh; + } + setSelection(from, to); + userSelChange = true; + } + // Update the selection. Last two args are only used by + // updateLines, since they have to be expressed in the line + // numbers before the update. + function setSelection(from, to, oldFrom, oldTo) { + goalColumn = null; + if (oldFrom == null) {oldFrom = sel.from.line; oldTo = sel.to.line;} + if (posEq(sel.from, from) && posEq(sel.to, to)) return; + if (posLess(to, from)) {var tmp = to; to = from; from = tmp;} + + // Skip over hidden lines. + if (from.line != oldFrom) { + var from1 = skipHidden(from, oldFrom, sel.from.ch); + // If there is no non-hidden line left, force visibility on current line + if (!from1) setLineHidden(from.line, false); + else from = from1; + } + if (to.line != oldTo) to = skipHidden(to, oldTo, sel.to.ch); + + if (posEq(from, to)) sel.inverted = false; + else if (posEq(from, sel.to)) sel.inverted = false; + else if (posEq(to, sel.from)) sel.inverted = true; + + if (options.autoClearEmptyLines && posEq(sel.from, sel.to)) { + var head = sel.inverted ? from : to; + if (head.line != sel.from.line && sel.from.line < doc.size) { + var oldLine = getLine(sel.from.line); + if (/^\s+$/.test(oldLine.text)) + setTimeout(operation(function() { + if (oldLine.parent && /^\s+$/.test(oldLine.text)) { + var no = lineNo(oldLine); + replaceRange("", {line: no, ch: 0}, {line: no, ch: oldLine.text.length}); + } + }, 10)); + } + } + + sel.from = from; sel.to = to; + selectionChanged = true; + } + function skipHidden(pos, oldLine, oldCh) { + function getNonHidden(dir) { + var lNo = pos.line + dir, end = dir == 1 ? doc.size : -1; + while (lNo != end) { + var line = getLine(lNo); + if (!line.hidden) { + var ch = pos.ch; + if (toEnd || ch > oldCh || ch > line.text.length) ch = line.text.length; + return {line: lNo, ch: ch}; + } + lNo += dir; + } + } + var line = getLine(pos.line); + var toEnd = pos.ch == line.text.length && pos.ch != oldCh; + if (!line.hidden) return pos; + if (pos.line >= oldLine) return getNonHidden(1) || getNonHidden(-1); + else return getNonHidden(-1) || getNonHidden(1); + } + function setCursor(line, ch, user) { + var pos = clipPos({line: line, ch: ch || 0}); + (user ? setSelectionUser : setSelection)(pos, pos); + } + + function clipLine(n) {return Math.max(0, Math.min(n, doc.size-1));} + function clipPos(pos) { + if (pos.line < 0) return {line: 0, ch: 0}; + if (pos.line >= doc.size) return {line: doc.size-1, ch: getLine(doc.size-1).text.length}; + var ch = pos.ch, linelen = getLine(pos.line).text.length; + if (ch == null || ch > linelen) return {line: pos.line, ch: linelen}; + else if (ch < 0) return {line: pos.line, ch: 0}; + else return pos; + } + + function findPosH(dir, unit) { + var end = sel.inverted ? sel.from : sel.to, line = end.line, ch = end.ch; + var lineObj = getLine(line); + function findNextLine() { + for (var l = line + dir, e = dir < 0 ? -1 : doc.size; l != e; l += dir) { + var lo = getLine(l); + if (!lo.hidden) { line = l; lineObj = lo; return true; } + } + } + function moveOnce(boundToLine) { + if (ch == (dir < 0 ? 0 : lineObj.text.length)) { + if (!boundToLine && findNextLine()) ch = dir < 0 ? lineObj.text.length : 0; + else return false; + } else ch += dir; + return true; + } + if (unit == "char") moveOnce(); + else if (unit == "column") moveOnce(true); + else if (unit == "word") { + var sawWord = false; + for (;;) { + if (dir < 0) if (!moveOnce()) break; + if (isWordChar(lineObj.text.charAt(ch))) sawWord = true; + else if (sawWord) {if (dir < 0) {dir = 1; moveOnce();} break;} + if (dir > 0) if (!moveOnce()) break; + } + } + return {line: line, ch: ch}; + } + function moveH(dir, unit) { + var pos = dir < 0 ? sel.from : sel.to; + if (shiftSelecting || posEq(sel.from, sel.to)) pos = findPosH(dir, unit); + setCursor(pos.line, pos.ch, true); + } + function deleteH(dir, unit) { + if (!posEq(sel.from, sel.to)) replaceRange("", sel.from, sel.to); + else if (dir < 0) replaceRange("", findPosH(dir, unit), sel.to); + else replaceRange("", sel.from, findPosH(dir, unit)); + userSelChange = true; + } + function moveV(dir, unit) { + var dist = 0, pos = localCoords(sel.inverted ? sel.from : sel.to, true); + if (goalColumn != null) pos.x = goalColumn; + if (unit == "page") { + var screen = Math.min(scroller.clientHeight, window.innerHeight || document.documentElement.clientHeight); + var target = coordsChar(pos.x, pos.y + screen * dir); + } else if (unit == "line") { + var th = textHeight(); + var target = coordsChar(pos.x, pos.y + .5 * th + dir * th); + } + if (unit == "page") scrollbar.scrollTop += localCoords(target, true).y - pos.y; + setCursor(target.line, target.ch, true); + goalColumn = pos.x; + } + + function findWordAt(pos) { + var line = getLine(pos.line).text; + var start = pos.ch, end = pos.ch; + if (line) { + if (pos.after === false || end == line.length) --start; else ++end; + var startChar = line.charAt(start); + var check = isWordChar(startChar) ? isWordChar : + /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} : + function(ch) {return !/\s/.test(ch) && isWordChar(ch);}; + while (start > 0 && check(line.charAt(start - 1))) --start; + while (end < line.length && check(line.charAt(end))) ++end; + } + return {from: {line: pos.line, ch: start}, to: {line: pos.line, ch: end}}; + } + function selectLine(line) { + setSelectionUser({line: line, ch: 0}, clipPos({line: line + 1, ch: 0})); + } + function indentSelected(mode) { + if (posEq(sel.from, sel.to)) return indentLine(sel.from.line, mode); + var e = sel.to.line - (sel.to.ch ? 0 : 1); + for (var i = sel.from.line; i <= e; ++i) indentLine(i, mode); + } + + function indentLine(n, how) { + if (!how) how = "add"; + if (how == "smart") { + if (!mode.indent) how = "prev"; + else var state = getStateBefore(n); + } + + var line = getLine(n), curSpace = line.indentation(options.tabSize), + curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (how == "smart") { + indentation = mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass) how = "prev"; + } + if (how == "prev") { + if (n) indentation = getLine(n-1).indentation(options.tabSize); + else indentation = 0; + } + else if (how == "add") indentation = curSpace + options.indentUnit; + else if (how == "subtract") indentation = curSpace - options.indentUnit; + indentation = Math.max(0, indentation); + var diff = indentation - curSpace; + + var indentString = "", pos = 0; + if (options.indentWithTabs) + for (var i = Math.floor(indentation / options.tabSize); i; --i) {pos += options.tabSize; indentString += "\t";} + if (pos < indentation) indentString += spaceStr(indentation - pos); + + if (indentString != curSpaceString) + replaceRange(indentString, {line: n, ch: 0}, {line: n, ch: curSpaceString.length}); + line.stateAfter = null; + } + + function loadMode() { + mode = CodeMirror.getMode(options, options.mode); + doc.iter(0, doc.size, function(line) { line.stateAfter = null; }); + frontier = 0; + startWorker(100); + } + function gutterChanged() { + var visible = options.gutter || options.lineNumbers; + gutter.style.display = visible ? "" : "none"; + if (visible) gutterDirty = true; + else lineDiv.parentNode.style.marginLeft = 0; + } + function wrappingChanged(from, to) { + if (options.lineWrapping) { + wrapper.className += " CodeMirror-wrap"; + var perLine = scroller.clientWidth / charWidth() - 3; + doc.iter(0, doc.size, function(line) { + if (line.hidden) return; + var guess = Math.ceil(line.text.length / perLine) || 1; + if (guess != 1) updateLineHeight(line, guess); + }); + lineSpace.style.minWidth = widthForcer.style.left = ""; + } else { + wrapper.className = wrapper.className.replace(" CodeMirror-wrap", ""); + computeMaxLength(); + doc.iter(0, doc.size, function(line) { + if (line.height != 1 && !line.hidden) updateLineHeight(line, 1); + }); + } + changes.push({from: 0, to: doc.size}); + } + function themeChanged() { + scroller.className = scroller.className.replace(/\s*cm-s-\S+/g, "") + + options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + } + function keyMapChanged() { + var style = keyMap[options.keyMap].style; + wrapper.className = wrapper.className.replace(/\s*cm-keymap-\S+/g, "") + + (style ? " cm-keymap-" + style : ""); + } + + function TextMarker(type, style) { this.lines = []; this.type = type; if (style) this.style = style; } + TextMarker.prototype.clear = operation(function() { + var min, max; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null) min = lineNo(line); + if (span.to != null) max = lineNo(line); + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + } + if (min != null) changes.push({from: min, to: max + 1}); + this.lines.length = 0; + this.explicitlyCleared = true; + }); + TextMarker.prototype.find = function() { + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null || span.to != null) { + var found = lineNo(line); + if (span.from != null) from = {line: found, ch: span.from}; + if (span.to != null) to = {line: found, ch: span.to}; + } + } + if (this.type == "bookmark") return from; + return from && {from: from, to: to}; + }; + + function markText(from, to, className, options) { + from = clipPos(from); to = clipPos(to); + var marker = new TextMarker("range", className); + if (options) for (var opt in options) if (options.hasOwnProperty(opt)) + marker[opt] = options[opt]; + var curLine = from.line; + doc.iter(curLine, to.line + 1, function(line) { + var span = {from: curLine == from.line ? from.ch : null, + to: curLine == to.line ? to.ch : null, + marker: marker}; + line.markedSpans = (line.markedSpans || []).concat([span]); + marker.lines.push(line); + ++curLine; + }); + changes.push({from: from.line, to: to.line + 1}); + return marker; + } + + function setBookmark(pos) { + pos = clipPos(pos); + var marker = new TextMarker("bookmark"), line = getLine(pos.line); + history.addChange(pos.line, 1, [newHL(line.text, line.markedSpans)], true); + var span = {from: pos.ch, to: pos.ch, marker: marker}; + line.markedSpans = (line.markedSpans || []).concat([span]); + marker.lines.push(line); + return marker; + } + + function findMarksAt(pos) { + pos = clipPos(pos); + var markers = [], spans = getLine(pos.line).markedSpans; + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + markers.push(span.marker); + } + return markers; + } + + function addGutterMarker(line, text, className) { + if (typeof line == "number") line = getLine(clipLine(line)); + line.gutterMarker = {text: text, style: className}; + gutterDirty = true; + return line; + } + function removeGutterMarker(line) { + if (typeof line == "number") line = getLine(clipLine(line)); + line.gutterMarker = null; + gutterDirty = true; + } + + function changeLine(handle, op) { + var no = handle, line = handle; + if (typeof handle == "number") line = getLine(clipLine(handle)); + else no = lineNo(handle); + if (no == null) return null; + if (op(line, no)) changes.push({from: no, to: no + 1}); + else return null; + return line; + } + function setLineClass(handle, className, bgClassName) { + return changeLine(handle, function(line) { + if (line.className != className || line.bgClassName != bgClassName) { + line.className = className; + line.bgClassName = bgClassName; + return true; + } + }); + } + function setLineHidden(handle, hidden) { + return changeLine(handle, function(line, no) { + if (line.hidden != hidden) { + line.hidden = hidden; + if (!options.lineWrapping) { + if (hidden && line.text.length == maxLine.text.length) { + updateMaxLine = true; + } else if (!hidden && line.text.length > maxLine.text.length) { + maxLine = line; updateMaxLine = false; + } + } + updateLineHeight(line, hidden ? 0 : 1); + var fline = sel.from.line, tline = sel.to.line; + if (hidden && (fline == no || tline == no)) { + var from = fline == no ? skipHidden({line: fline, ch: 0}, fline, 0) : sel.from; + var to = tline == no ? skipHidden({line: tline, ch: 0}, tline, 0) : sel.to; + // Can't hide the last visible line, we'd have no place to put the cursor + if (!to) return; + setSelection(from, to); + } + return (gutterDirty = true); + } + }); + } + + function lineInfo(line) { + if (typeof line == "number") { + if (!isLine(line)) return null; + var n = line; + line = getLine(line); + if (!line) return null; + } else { + var n = lineNo(line); + if (n == null) return null; + } + var marker = line.gutterMarker; + return {line: n, handle: line, text: line.text, markerText: marker && marker.text, + markerClass: marker && marker.style, lineClass: line.className, bgClass: line.bgClassName}; + } + + function measureLine(line, ch) { + if (ch == 0) return {top: 0, left: 0}; + var pre = lineContent(line, ch); + removeChildrenAndAdd(measure, pre); + var anchor = pre.anchor; + var top = anchor.offsetTop, left = anchor.offsetLeft; + // Older IEs report zero offsets for spans directly after a wrap + if (ie && top == 0 && left == 0) { + var backup = elt("span", "x"); + anchor.parentNode.insertBefore(backup, anchor.nextSibling); + top = backup.offsetTop; + } + return {top: top, left: left}; + } + function localCoords(pos, inLineWrap) { + var x, lh = textHeight(), y = lh * (heightAtLine(doc, pos.line) - (inLineWrap ? displayOffset : 0)); + if (pos.ch == 0) x = 0; + else { + var sp = measureLine(getLine(pos.line), pos.ch); + x = sp.left; + if (options.lineWrapping) y += Math.max(0, sp.top); + } + return {x: x, y: y, yBot: y + lh}; + } + // Coords must be lineSpace-local + function coordsChar(x, y) { + var th = textHeight(), cw = charWidth(), heightPos = displayOffset + Math.floor(y / th); + if (heightPos < 0) return {line: 0, ch: 0}; + var lineNo = lineAtHeight(doc, heightPos); + if (lineNo >= doc.size) return {line: doc.size - 1, ch: getLine(doc.size - 1).text.length}; + var lineObj = getLine(lineNo), text = lineObj.text; + var tw = options.lineWrapping, innerOff = tw ? heightPos - heightAtLine(doc, lineNo) : 0; + if (x <= 0 && innerOff == 0) return {line: lineNo, ch: 0}; + var wrongLine = false; + function getX(len) { + var sp = measureLine(lineObj, len); + if (tw) { + var off = Math.round(sp.top / th); + wrongLine = off != innerOff; + return Math.max(0, sp.left + (off - innerOff) * scroller.clientWidth); + } + return sp.left; + } + var from = 0, fromX = 0, to = text.length, toX; + // Guess a suitable upper bound for our search. + var estimated = Math.min(to, Math.ceil((x + innerOff * scroller.clientWidth * .9) / cw)); + for (;;) { + var estX = getX(estimated); + if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2)); + else {toX = estX; to = estimated; break;} + } + if (x > toX) return {line: lineNo, ch: to}; + // Try to guess a suitable lower bound as well. + estimated = Math.floor(to * 0.8); estX = getX(estimated); + if (estX < x) {from = estimated; fromX = estX;} + // Do a binary search between these bounds. + for (;;) { + if (to - from <= 1) { + var after = x - fromX < toX - x; + return {line: lineNo, ch: after ? from : to, after: after}; + } + var middle = Math.ceil((from + to) / 2), middleX = getX(middle); + if (middleX > x) {to = middle; toX = middleX; if (wrongLine) toX += 1000; } + else {from = middle; fromX = middleX;} + } + } + function pageCoords(pos) { + var local = localCoords(pos, true), off = eltOffset(lineSpace); + return {x: off.left + local.x, y: off.top + local.y, yBot: off.top + local.yBot}; + } + + var cachedHeight, cachedHeightFor, measurePre; + function textHeight() { + if (measurePre == null) { + measurePre = elt("pre"); + for (var i = 0; i < 49; ++i) { + measurePre.appendChild(document.createTextNode("x")); + measurePre.appendChild(elt("br")); + } + measurePre.appendChild(document.createTextNode("x")); + } + var offsetHeight = lineDiv.clientHeight; + if (offsetHeight == cachedHeightFor) return cachedHeight; + cachedHeightFor = offsetHeight; + removeChildrenAndAdd(measure, measurePre.cloneNode(true)); + cachedHeight = measure.firstChild.offsetHeight / 50 || 1; + removeChildren(measure); + return cachedHeight; + } + var cachedWidth, cachedWidthFor = 0; + function charWidth() { + if (scroller.clientWidth == cachedWidthFor) return cachedWidth; + cachedWidthFor = scroller.clientWidth; + var anchor = elt("span", "x"); + var pre = elt("pre", [anchor]); + removeChildrenAndAdd(measure, pre); + return (cachedWidth = anchor.offsetWidth || 10); + } + function paddingTop() {return lineSpace.offsetTop;} + function paddingLeft() {return lineSpace.offsetLeft;} + + function posFromMouse(e, liberal) { + var offW = eltOffset(scroller, true), x, y; + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX; y = e.clientY; } catch (e) { return null; } + // This is a mess of a heuristic to try and determine whether a + // scroll-bar was clicked or not, and to return null if one was + // (and !liberal). + if (!liberal && (x - offW.left > scroller.clientWidth || y - offW.top > scroller.clientHeight)) + return null; + var offL = eltOffset(lineSpace, true); + return coordsChar(x - offL.left, y - offL.top); + } + var detectingSelectAll; + function onContextMenu(e) { + var pos = posFromMouse(e), scrollPos = scrollbar.scrollTop; + if (!pos || opera) return; // Opera is difficult. + if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to)) + operation(setCursor)(pos.line, pos.ch); + + var oldCSS = input.style.cssText; + inputDiv.style.position = "absolute"; + input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + + "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: white; " + + "border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + focusInput(); + resetInput(true); + // Adds "Select all" to context menu in FF + if (posEq(sel.from, sel.to)) input.value = prevInput = " "; + + function rehide() { + inputDiv.style.position = "relative"; + input.style.cssText = oldCSS; + if (ie_lt9) scrollbar.scrollTop = scrollPos; + slowPoll(); + + // Try to detect the user choosing select-all + if (input.selectionStart != null) { + clearTimeout(detectingSelectAll); + var extval = input.value = " " + (posEq(sel.from, sel.to) ? "" : input.value), i = 0; + prevInput = " "; + input.selectionStart = 1; input.selectionEnd = extval.length; + detectingSelectAll = setTimeout(function poll(){ + if (prevInput == " " && input.selectionStart == 0) + operation(commands.selectAll)(instance); + else if (i++ < 10) detectingSelectAll = setTimeout(poll, 500); + else resetInput(); + }, 200); + } + } + + if (gecko) { + e_stop(e); + var mouseup = connect(window, "mouseup", function() { + mouseup(); + setTimeout(rehide, 20); + }, true); + } else { + setTimeout(rehide, 50); + } + } + + // Cursor-blinking + function restartBlink() { + clearInterval(blinker); + var on = true; + cursor.style.visibility = ""; + blinker = setInterval(function() { + cursor.style.visibility = (on = !on) ? "" : "hidden"; + }, options.cursorBlinkRate); + } + + var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"}; + function matchBrackets(autoclear) { + var head = sel.inverted ? sel.from : sel.to, line = getLine(head.line), pos = head.ch - 1; + var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)]; + if (!match) return; + var ch = match.charAt(0), forward = match.charAt(1) == ">", d = forward ? 1 : -1, st = line.styles; + for (var off = pos + 1, i = 0, e = st.length; i < e; i+=2) + if ((off -= st[i].length) <= 0) {var style = st[i+1]; break;} + + var stack = [line.text.charAt(pos)], re = /[(){}[\]]/; + function scan(line, from, to) { + if (!line.text) return; + var st = line.styles, pos = forward ? 0 : line.text.length - 1, cur; + for (var i = forward ? 0 : st.length - 2, e = forward ? st.length : -2; i != e; i += 2*d) { + var text = st[i]; + if (st[i+1] != style) {pos += d * text.length; continue;} + for (var j = forward ? 0 : text.length - 1, te = forward ? text.length : -1; j != te; j += d, pos+=d) { + if (pos >= from && pos < to && re.test(cur = text.charAt(j))) { + var match = matching[cur]; + if (match.charAt(1) == ">" == forward) stack.push(cur); + else if (stack.pop() != match.charAt(0)) return {pos: pos, match: false}; + else if (!stack.length) return {pos: pos, match: true}; + } + } + } + } + for (var i = head.line, e = forward ? Math.min(i + 100, doc.size) : Math.max(-1, i - 100); i != e; i+=d) { + var line = getLine(i), first = i == head.line; + var found = scan(line, first && forward ? pos + 1 : 0, first && !forward ? pos : line.text.length); + if (found) break; + } + if (!found) found = {pos: null, match: false}; + var style = found.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; + var one = markText({line: head.line, ch: pos}, {line: head.line, ch: pos+1}, style), + two = found.pos != null && markText({line: i, ch: found.pos}, {line: i, ch: found.pos + 1}, style); + var clear = operation(function(){one.clear(); two && two.clear();}); + if (autoclear) setTimeout(clear, 800); + else bracketHighlighted = clear; + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(n) { + var minindent, minline; + for (var search = n, lim = n - 40; search > lim; --search) { + if (search == 0) return 0; + var line = getLine(search-1); + if (line.stateAfter) return search; + var indented = line.indentation(options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline; + } + function getStateBefore(n) { + var pos = findStartLine(n), state = pos && getLine(pos-1).stateAfter; + if (!state) state = startState(mode); + else state = copyState(mode, state); + doc.iter(pos, n, function(line) { + line.process(mode, state, options.tabSize); + line.stateAfter = (pos == n - 1 || pos % 5 == 0) ? copyState(mode, state) : null; + }); + return state; + } + function highlightWorker() { + if (frontier >= showingTo) return; + var end = +new Date + options.workTime, state = copyState(mode, getStateBefore(frontier)); + var startFrontier = frontier; + doc.iter(frontier, showingTo, function(line) { + if (frontier >= showingFrom) { // Visible + line.highlight(mode, state, options.tabSize); + line.stateAfter = copyState(mode, state); + } else { + line.process(mode, state, options.tabSize); + line.stateAfter = frontier % 5 == 0 ? copyState(mode, state) : null; + } + ++frontier; + if (+new Date > end) { + startWorker(options.workDelay); + return true; + } + }); + if (showingTo > startFrontier && frontier >= showingFrom) + operation(function() {changes.push({from: startFrontier, to: frontier});})(); + } + function startWorker(time) { + if (frontier < showingTo) + highlight.set(time, highlightWorker); + } + + // Operations are used to wrap changes in such a way that each + // change won't have to update the cursor and display (which would + // be awkward, slow, and error-prone), but instead updates are + // batched and then all combined and executed at once. + function startOperation() { + updateInput = userSelChange = textChanged = null; + changes = []; selectionChanged = false; callbacks = []; + } + function endOperation() { + if (updateMaxLine) computeMaxLength(); + if (maxLineChanged && !options.lineWrapping) { + var cursorWidth = widthForcer.offsetWidth, left = measureLine(maxLine, maxLine.text.length).left; + if (!ie_lt8) { + widthForcer.style.left = left + "px"; + lineSpace.style.minWidth = (left + cursorWidth) + "px"; + } + maxLineChanged = false; + } + var newScrollPos, updated; + if (selectionChanged) { + var coords = calculateCursorCoords(); + newScrollPos = calculateScrollPos(coords.x, coords.y, coords.x, coords.yBot); + } + if (changes.length || newScrollPos && newScrollPos.scrollTop != null) + updated = updateDisplay(changes, true, newScrollPos && newScrollPos.scrollTop); + if (!updated) { + if (selectionChanged) updateSelection(); + if (gutterDirty) updateGutter(); + } + if (newScrollPos) scrollCursorIntoView(); + if (selectionChanged) restartBlink(); + + if (focused && (updateInput === true || (updateInput !== false && selectionChanged))) + resetInput(userSelChange); + + if (selectionChanged && options.matchBrackets) + setTimeout(operation(function() { + if (bracketHighlighted) {bracketHighlighted(); bracketHighlighted = null;} + if (posEq(sel.from, sel.to)) matchBrackets(false); + }), 20); + var sc = selectionChanged, cbs = callbacks; // these can be reset by callbacks + if (textChanged && options.onChange && instance) + options.onChange(instance, textChanged); + if (sc && options.onCursorActivity) + options.onCursorActivity(instance); + for (var i = 0; i < cbs.length; ++i) cbs[i](instance); + if (updated && options.onUpdate) options.onUpdate(instance); + } + var nestedOperation = 0; + function operation(f) { + return function() { + if (!nestedOperation++) startOperation(); + try {var result = f.apply(this, arguments);} + finally {if (!--nestedOperation) endOperation();} + return result; + }; + } + + function compoundChange(f) { + history.startCompound(); + try { return f(); } finally { history.endCompound(); } + } + + for (var ext in extensions) + if (extensions.propertyIsEnumerable(ext) && + !instance.propertyIsEnumerable(ext)) + instance[ext] = extensions[ext]; + for (var i = 0; i < initHooks.length; ++i) initHooks[i](instance); + return instance; + } // (end of function CodeMirror) + + // The default configuration options. + CodeMirror.defaults = { + value: "", + mode: null, + theme: "default", + indentUnit: 2, + indentWithTabs: false, + smartIndent: true, + tabSize: 4, + keyMap: "default", + extraKeys: null, + electricChars: true, + autoClearEmptyLines: false, + onKeyEvent: null, + onDragEvent: null, + lineWrapping: false, + lineNumbers: false, + gutter: false, + fixedGutter: false, + firstLineNumber: 1, + readOnly: false, + dragDrop: true, + onChange: null, + onCursorActivity: null, + onViewportChange: null, + onGutterClick: null, + onUpdate: null, + onFocus: null, onBlur: null, onScroll: null, + matchBrackets: false, + cursorBlinkRate: 530, + workTime: 100, + workDelay: 200, + pollInterval: 100, + undoDepth: 40, + tabindex: null, + autofocus: null, + lineNumberFormatter: function(integer) { return integer; } + }; + + var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent); + var mac = ios || /Mac/.test(navigator.platform); + var win = /Win/.test(navigator.platform); + + // Known modes, by name and by MIME + var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; + CodeMirror.defineMode = function(name, mode) { + if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; + if (arguments.length > 2) { + mode.dependencies = []; + for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]); + } + modes[name] = mode; + }; + CodeMirror.defineMIME = function(mime, spec) { + mimeModes[mime] = spec; + }; + CodeMirror.resolveMode = function(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) + spec = mimeModes[spec]; + else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) + return CodeMirror.resolveMode("application/xml"); + if (typeof spec == "string") return {name: spec}; + else return spec || {name: "null"}; + }; + CodeMirror.getMode = function(options, spec) { + var spec = CodeMirror.resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) return CodeMirror.getMode(options, "text/plain"); + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) if (exts.hasOwnProperty(prop)) modeObj[prop] = exts[prop]; + } + modeObj.name = spec.name; + return modeObj; + }; + CodeMirror.listModes = function() { + var list = []; + for (var m in modes) + if (modes.propertyIsEnumerable(m)) list.push(m); + return list; + }; + CodeMirror.listMIMEs = function() { + var list = []; + for (var m in mimeModes) + if (mimeModes.propertyIsEnumerable(m)) list.push({mime: m, mode: mimeModes[m]}); + return list; + }; + + var extensions = CodeMirror.extensions = {}; + CodeMirror.defineExtension = function(name, func) { + extensions[name] = func; + }; + + var initHooks = []; + CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; + + var modeExtensions = CodeMirror.modeExtensions = {}; + CodeMirror.extendMode = function(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + for (var prop in properties) if (properties.hasOwnProperty(prop)) + exts[prop] = properties[prop]; + }; + + var commands = CodeMirror.commands = { + selectAll: function(cm) {cm.setSelection({line: 0, ch: 0}, {line: cm.lineCount() - 1});}, + killLine: function(cm) { + var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to); + if (!sel && cm.getLine(from.line).length == from.ch) cm.replaceRange("", from, {line: from.line + 1, ch: 0}); + else cm.replaceRange("", from, sel ? to : {line: from.line}); + }, + deleteLine: function(cm) {var l = cm.getCursor().line; cm.replaceRange("", {line: l, ch: 0}, {line: l});}, + undo: function(cm) {cm.undo();}, + redo: function(cm) {cm.redo();}, + goDocStart: function(cm) {cm.setCursor(0, 0, true);}, + goDocEnd: function(cm) {cm.setSelection({line: cm.lineCount() - 1}, null, true);}, + goLineStart: function(cm) {cm.setCursor(cm.getCursor().line, 0, true);}, + goLineStartSmart: function(cm) { + var cur = cm.getCursor(); + var text = cm.getLine(cur.line), firstNonWS = Math.max(0, text.search(/\S/)); + cm.setCursor(cur.line, cur.ch <= firstNonWS && cur.ch ? 0 : firstNonWS, true); + }, + goLineEnd: function(cm) {cm.setSelection({line: cm.getCursor().line}, null, true);}, + goLineUp: function(cm) {cm.moveV(-1, "line");}, + goLineDown: function(cm) {cm.moveV(1, "line");}, + goPageUp: function(cm) {cm.moveV(-1, "page");}, + goPageDown: function(cm) {cm.moveV(1, "page");}, + goCharLeft: function(cm) {cm.moveH(-1, "char");}, + goCharRight: function(cm) {cm.moveH(1, "char");}, + goColumnLeft: function(cm) {cm.moveH(-1, "column");}, + goColumnRight: function(cm) {cm.moveH(1, "column");}, + goWordLeft: function(cm) {cm.moveH(-1, "word");}, + goWordRight: function(cm) {cm.moveH(1, "word");}, + delCharLeft: function(cm) {cm.deleteH(-1, "char");}, + delCharRight: function(cm) {cm.deleteH(1, "char");}, + delWordLeft: function(cm) {cm.deleteH(-1, "word");}, + delWordRight: function(cm) {cm.deleteH(1, "word");}, + indentAuto: function(cm) {cm.indentSelection("smart");}, + indentMore: function(cm) {cm.indentSelection("add");}, + indentLess: function(cm) {cm.indentSelection("subtract");}, + insertTab: function(cm) {cm.replaceSelection("\t", "end");}, + defaultTab: function(cm) { + if (cm.somethingSelected()) cm.indentSelection("add"); + else cm.replaceSelection("\t", "end"); + }, + transposeChars: function(cm) { + var cur = cm.getCursor(), line = cm.getLine(cur.line); + if (cur.ch > 0 && cur.ch < line.length - 1) + cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1), + {line: cur.line, ch: cur.ch - 1}, {line: cur.line, ch: cur.ch + 1}); + }, + newlineAndIndent: function(cm) { + cm.replaceSelection("\n", "end"); + cm.indentLine(cm.getCursor().line); + }, + toggleOverwrite: function(cm) {cm.toggleOverwrite();} + }; + + var keyMap = CodeMirror.keyMap = {}; + keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharRight", "Backspace": "delCharLeft", "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite" + }; + // Note that the save and find-related commands aren't defined by + // default. Unknown commands are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Alt-Up": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Down": "goDocEnd", + "Ctrl-Left": "goWordLeft", "Ctrl-Right": "goWordRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delWordLeft", "Ctrl-Delete": "delWordRight", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + fallthrough: "basic" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goWordLeft", + "Alt-Right": "goWordRight", "Cmd-Left": "goLineStart", "Cmd-Right": "goLineEnd", "Alt-Backspace": "delWordLeft", + "Ctrl-Alt-Backspace": "delWordRight", "Alt-Delete": "delWordRight", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", + fallthrough: ["basic", "emacsy"] + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageUp", "Shift-Ctrl-V": "goPageDown", "Ctrl-D": "delCharRight", "Ctrl-H": "delCharLeft", + "Alt-D": "delWordRight", "Alt-Backspace": "delWordLeft", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" + }; + + function getKeyMap(val) { + if (typeof val == "string") return keyMap[val]; + else return val; + } + function lookupKey(name, extraMap, map, handle, stop) { + function lookup(map) { + map = getKeyMap(map); + var found = map[name]; + if (found === false) { + if (stop) stop(); + return true; + } + if (found != null && handle(found)) return true; + if (map.nofallthrough) { + if (stop) stop(); + return true; + } + var fallthrough = map.fallthrough; + if (fallthrough == null) return false; + if (Object.prototype.toString.call(fallthrough) != "[object Array]") + return lookup(fallthrough); + for (var i = 0, e = fallthrough.length; i < e; ++i) { + if (lookup(fallthrough[i])) return true; + } + return false; + } + if (extraMap && lookup(extraMap)) return true; + return lookup(map); + } + function isModifierKey(event) { + var name = keyNames[e_prop(event, "keyCode")]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; + } + CodeMirror.isModifierKey = isModifierKey; + + CodeMirror.fromTextArea = function(textarea, options) { + if (!options) options = {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabindex) + options.tabindex = textarea.tabindex; + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = document.body; + // doc.activeElement occasionally throws on IE + try { hasFocus = document.activeElement; } catch(e) {} + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = instance.getValue();} + if (textarea.form) { + // Deplorable hack to make the submit method do the right thing. + var rmSubmit = connect(textarea.form, "submit", save, true); + if (typeof textarea.form.submit == "function") { + var realSubmit = textarea.form.submit; + textarea.form.submit = function wrappedSubmit() { + save(); + textarea.form.submit = realSubmit; + textarea.form.submit(); + textarea.form.submit = wrappedSubmit; + }; + } + } + + textarea.style.display = "none"; + var instance = CodeMirror(function(node) { + textarea.parentNode.insertBefore(node, textarea.nextSibling); + }, options); + instance.save = save; + instance.getTextArea = function() { return textarea; }; + instance.toTextArea = function() { + save(); + textarea.parentNode.removeChild(instance.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + rmSubmit(); + if (typeof textarea.form.submit == "function") + textarea.form.submit = realSubmit; + } + }; + return instance; + }; + + var gecko = /gecko\/\d{7}/i.test(navigator.userAgent); + var ie = /MSIE \d/.test(navigator.userAgent); + var ie_lt8 = /MSIE [1-7]\b/.test(navigator.userAgent); + var ie_lt9 = /MSIE [1-8]\b/.test(navigator.userAgent); + var quirksMode = ie && document.documentMode == 5; + var webkit = /WebKit\//.test(navigator.userAgent); + var chrome = /Chrome\//.test(navigator.userAgent); + var opera = /Opera\//.test(navigator.userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var khtml = /KHTML\//.test(navigator.userAgent); + var mac_geLion = /Mac OS X 10\D([7-9]|\d\d)\D/.test(navigator.userAgent); + + // Utility functions for working with state. Exported because modes + // sometimes need to do this. + function copyState(mode, state) { + if (state === true) return state; + if (mode.copyState) return mode.copyState(state); + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) val = val.concat([]); + nstate[n] = val; + } + return nstate; + } + CodeMirror.copyState = copyState; + function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; + } + CodeMirror.startState = startState; + CodeMirror.innerMode = function(mode, state) { + while (mode.innerMode) { + var info = mode.innerMode(state); + state = info.state; + mode = info.mode; + } + return info || {mode: mode, state: state}; + }; + + // The character stream used by a mode's parser. + function StringStream(string, tabSize) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + } + StringStream.prototype = { + eol: function() {return this.pos >= this.string.length;}, + sol: function() {return this.pos == 0;}, + peek: function() {return this.string.charAt(this.pos) || undefined;}, + next: function() { + if (this.pos < this.string.length) + return this.string.charAt(this.pos++); + }, + eat: function(match) { + var ch = this.string.charAt(this.pos); + if (typeof match == "string") var ok = ch == match; + else var ok = ch && (match.test ? match.test(ch) : match(ch)); + if (ok) {++this.pos; return ch;} + }, + eatWhile: function(match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start; + }, + eatSpace: function() { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; + return this.pos > start; + }, + skipToEnd: function() {this.pos = this.string.length;}, + skipTo: function(ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true;} + }, + backUp: function(n) {this.pos -= n;}, + column: function() {return countColumn(this.string, this.start, this.tabSize);}, + indentation: function() {return countColumn(this.string, null, this.tabSize);}, + match: function(pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; + if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) { + if (consume !== false) this.pos += pattern.length; + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) return null; + if (match && consume !== false) this.pos += match[0].length; + return match; + } + }, + current: function(){return this.string.slice(this.start, this.pos);} + }; + CodeMirror.StringStream = StringStream; + + function MarkedSpan(from, to, marker) { + this.from = from; this.to = to; this.marker = marker; + } + + function getMarkedSpanFor(spans, marker) { + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) return span; + } + } + + function removeMarkedSpan(spans, span) { + var r; + for (var i = 0; i < spans.length; ++i) + if (spans[i] != span) (r || (r = [])).push(spans[i]); + return r; + } + + function markedSpansBefore(old, startCh, endCh) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || marker.type == "bookmark" && span.from == startCh && span.from != endCh) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); + (nw || (nw = [])).push({from: span.from, + to: endsAfter ? null : span.to, + marker: marker}); + } + } + return nw; + } + + function markedSpansAfter(old, endCh) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || marker.type == "bookmark" && span.from == endCh) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); + (nw || (nw = [])).push({from: startsBefore ? null : span.from - endCh, + to: span.to == null ? null : span.to - endCh, + marker: marker}); + } + } + return nw; + } + + function updateMarkedSpans(oldFirst, oldLast, startCh, endCh, newText) { + if (!oldFirst && !oldLast) return newText; + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh); + var last = markedSpansAfter(oldLast, endCh); + + // Next, merge those two ends + var sameLine = newText.length == 1, offset = lst(newText).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) span.to = startCh; + else if (sameLine) span.to = found.to == null ? null : found.to + offset; + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i = 0; i < last.length; ++i) { + var span = last[i]; + if (span.to != null) span.to += offset; + if (span.from == null) { + var found = getMarkedSpanFor(first, span.marker); + if (!found) { + span.from = offset; + if (sameLine) (first || (first = [])).push(span); + } + } else { + span.from += offset; + if (sameLine) (first || (first = [])).push(span); + } + } + } + + var newMarkers = [newHL(newText[0], first)]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = newText.length - 2, gapMarkers; + if (gap > 0 && first) + for (var i = 0; i < first.length; ++i) + if (first[i].to == null) + (gapMarkers || (gapMarkers = [])).push({from: null, to: null, marker: first[i].marker}); + for (var i = 0; i < gap; ++i) + newMarkers.push(newHL(newText[i+1], gapMarkers)); + newMarkers.push(newHL(lst(newText), last)); + } + return newMarkers; + } + + // hl stands for history-line, a data structure that can be either a + // string (line without markers) or a {text, markedSpans} object. + function hlText(val) { return typeof val == "string" ? val : val.text; } + function hlSpans(val) { + if (typeof val == "string") return null; + var spans = val.markedSpans, out = null; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } + else if (out) out.push(spans[i]); + } + return !out ? spans : out.length ? out : null; + } + function newHL(text, spans) { return spans ? {text: text, markedSpans: spans} : text; } + + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) return; + for (var i = 0; i < spans.length; ++i) { + var lines = spans[i].marker.lines; + var ix = indexOf(lines, line); + lines.splice(ix, 1); + } + line.markedSpans = null; + } + + function attachMarkedSpans(line, spans) { + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + var marker = spans[i].marker.lines.push(line); + line.markedSpans = spans; + } + + // When measuring the position of the end of a line, different + // browsers require different approaches. If an empty span is added, + // many browsers report bogus offsets. Of those, some (Webkit, + // recent IE) will accept a space without moving the whole span to + // the next line when wrapping it, others work with a zero-width + // space. + var eolSpanContent = " "; + if (gecko || (ie && !ie_lt8)) eolSpanContent = "\u200b"; + else if (opera) eolSpanContent = ""; + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + function Line(text, markedSpans) { + this.text = text; + this.height = 1; + attachMarkedSpans(this, markedSpans); + } + Line.prototype = { + update: function(text, markedSpans) { + this.text = text; + this.stateAfter = this.styles = null; + detachMarkedSpans(this); + attachMarkedSpans(this, markedSpans); + }, + // Run the given mode's parser over a line, update the styles + // array, which contains alternating fragments of text and CSS + // classes. + highlight: function(mode, state, tabSize) { + var stream = new StringStream(this.text, tabSize), st = this.styles || (this.styles = []); + var pos = st.length = 0; + if (this.text == "" && mode.blankLine) mode.blankLine(state); + while (!stream.eol()) { + var style = mode.token(stream, state), substr = stream.current(); + stream.start = stream.pos; + if (pos && st[pos-1] == style) { + st[pos-2] += substr; + } else if (substr) { + st[pos++] = substr; st[pos++] = style; + } + // Give up when line is ridiculously long + if (stream.pos > 5000) { + st[pos++] = this.text.slice(stream.pos); st[pos++] = null; + break; + } + } + }, + process: function(mode, state, tabSize) { + var stream = new StringStream(this.text, tabSize); + if (this.text == "" && mode.blankLine) mode.blankLine(state); + while (!stream.eol() && stream.pos <= 5000) { + mode.token(stream, state); + stream.start = stream.pos; + } + }, + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(mode, state, tabSize, ch) { + var txt = this.text, stream = new StringStream(txt, tabSize); + while (stream.pos < ch && !stream.eol()) { + stream.start = stream.pos; + var style = mode.token(stream, state); + } + return {start: stream.start, + end: stream.pos, + string: stream.current(), + className: style || null, + state: state}; + }, + indentation: function(tabSize) {return countColumn(this.text, null, tabSize);}, + // Produces an HTML fragment for the line, taking selection, + // marking, and highlighting into account. + getContent: function(tabSize, wrapAt, compensateForWrapping) { + var first = true, col = 0, specials = /[\t\u0000-\u0019\u200b\u2028\u2029\uFEFF]/g; + var pre = elt("pre"); + function span_(html, text, style) { + if (!text) return; + // Work around a bug where, in some compat modes, IE ignores leading spaces + if (first && ie && text.charAt(0) == " ") text = "\u00a0" + text.slice(1); + first = false; + if (!specials.test(text)) { + col += text.length; + var content = document.createTextNode(text); + } else { + var content = document.createDocumentFragment(), pos = 0; + while (true) { + specials.lastIndex = pos; + var m = specials.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + content.appendChild(document.createTextNode(text.slice(pos, pos + skipped))); + col += skipped; + } + if (!m) break; + pos += skipped + 1; + if (m[0] == "\t") { + var tabWidth = tabSize - col % tabSize; + content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + col += tabWidth; + } else { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + m[0].charCodeAt(0).toString(16); + content.appendChild(token); + col += 1; + } + } + } + if (style) html.appendChild(elt("span", [content], style)); + else html.appendChild(content); + } + var span = span_; + if (wrapAt != null) { + var outPos = 0, anchor = pre.anchor = elt("span"); + span = function(html, text, style) { + var l = text.length; + if (wrapAt >= outPos && wrapAt < outPos + l) { + var cut = wrapAt - outPos; + if (cut) { + span_(html, text.slice(0, cut), style); + // See comment at the definition of spanAffectsWrapping + if (compensateForWrapping) { + var view = text.slice(cut - 1, cut + 1); + if (spanAffectsWrapping.test(view)) html.appendChild(elt("wbr")); + else if (!ie_lt8 && /\w\w/.test(view)) html.appendChild(document.createTextNode("\u200d")); + } + } + html.appendChild(anchor); + span_(anchor, opera ? text.slice(cut, cut + 1) : text.slice(cut), style); + if (opera) span_(html, text.slice(cut + 1), style); + wrapAt--; + outPos += l; + } else { + outPos += l; + span_(html, text, style); + if (outPos == wrapAt && outPos == len) { + setTextContent(anchor, eolSpanContent); + html.appendChild(anchor); + } + // Stop outputting HTML when gone sufficiently far beyond measure + else if (outPos > wrapAt + 10 && /\s/.test(text)) span = function(){}; + } + }; + } + + var st = this.styles, allText = this.text, marked = this.markedSpans; + var len = allText.length; + function styleToClass(style) { + if (!style) return null; + return "cm-" + style.replace(/ +/g, " cm-"); + } + if (!allText && wrapAt == null) { + span(pre, " "); + } else if (!marked || !marked.length) { + for (var i = 0, ch = 0; ch < len; i+=2) { + var str = st[i], style = st[i+1], l = str.length; + if (ch + l > len) str = str.slice(0, len - ch); + ch += l; + span(pre, str, styleToClass(style)); + } + } else { + marked.sort(function(a, b) { return a.from - b.from; }); + var pos = 0, i = 0, text = "", style, sg = 0; + var nextChange = marked[0].from || 0, marks = [], markpos = 0; + var advanceMarks = function() { + var m; + while (markpos < marked.length && + ((m = marked[markpos]).from == pos || m.from == null)) { + if (m.marker.type == "range") marks.push(m); + ++markpos; + } + nextChange = markpos < marked.length ? marked[markpos].from : Infinity; + for (var i = 0; i < marks.length; ++i) { + var to = marks[i].to; + if (to == null) to = Infinity; + if (to == pos) marks.splice(i--, 1); + else nextChange = Math.min(to, nextChange); + } + }; + var m = 0; + while (pos < len) { + if (nextChange == pos) advanceMarks(); + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + var appliedStyle = style; + for (var j = 0; j < marks.length; ++j) { + var mark = marks[j]; + appliedStyle = (appliedStyle ? appliedStyle + " " : "") + mark.marker.style; + if (mark.marker.endStyle && mark.to === Math.min(end, upto)) appliedStyle += " " + mark.marker.endStyle; + if (mark.marker.startStyle && mark.from === pos) appliedStyle += " " + mark.marker.startStyle; + } + span(pre, end > upto ? text.slice(0, upto - pos) : text, appliedStyle); + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} + pos = end; + } + text = st[i++]; style = styleToClass(st[i++]); + } + } + } + return pre; + }, + cleanUp: function() { + this.parent = null; + detachMarkedSpans(this); + } + }; + + // Data structure that holds the sequence of lines. + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + for (var i = 0, e = lines.length, height = 0; i < e; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + LeafChunk.prototype = { + chunkSize: function() { return this.lines.length; }, + remove: function(at, n, callbacks) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + line.cleanUp(); + if (line.handlers) + for (var j = 0; j < line.handlers.length; ++j) callbacks.push(line.handlers[j]); + } + this.lines.splice(at, n); + }, + collapse: function(lines) { + lines.splice.apply(lines, [lines.length, 0].concat(this.lines)); + }, + insertHeight: function(at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this; + }, + iterN: function(at, n, op) { + for (var e = at + n; at < e; ++at) + if (op(this.lines[at])) return true; + } + }; + function BranchChunk(children) { + this.children = children; + var size = 0, height = 0; + for (var i = 0, e = children.length; i < e; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + BranchChunk.prototype = { + chunkSize: function() { return this.size; }, + remove: function(at, n, callbacks) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.remove(at, rm, callbacks); + this.height -= oldHeight - child.height; + if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) break; + at = 0; + } else at -= sz; + } + if (this.size - n < 25) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + collapse: function(lines) { + for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines); + }, + insert: function(at, lines) { + var height = 0; + for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height; + this.insertHeight(at, lines, height); + }, + insertHeight: function(at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0, e = this.children.length; i < e; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertHeight(at, lines, height); + if (child.lines && child.lines.length > 50) { + while (child.lines.length > 50) { + var spilled = child.lines.splice(child.lines.length - 25, 25); + var newleaf = new LeafChunk(spilled); + child.height -= newleaf.height; + this.children.splice(i + 1, 0, newleaf); + newleaf.parent = this; + } + this.maybeSpill(); + } + break; + } + at -= sz; + } + }, + maybeSpill: function() { + if (this.children.length <= 10) return; + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10); + me.parent.maybeSpill(); + }, + iter: function(from, to, op) { this.iterN(from, to - from, op); }, + iterN: function(at, n, op) { + for (var i = 0, e = this.children.length; i < e; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) return true; + if ((n -= used) == 0) break; + at = 0; + } else at -= sz; + } + } + }; + + function getLineAt(chunk, n) { + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break; } + n -= sz; + } + } + return chunk.lines[n]; + } + function lineNo(line) { + if (line.parent == null) return null; + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0, e = chunk.children.length; ; ++i) { + if (chunk.children[i] == cur) break; + no += chunk.children[i].chunkSize(); + } + } + return no; + } + function lineAtHeight(chunk, h) { + var n = 0; + outer: do { + for (var i = 0, e = chunk.children.length; i < e; ++i) { + var child = chunk.children[i], ch = child.height; + if (h < ch) { chunk = child; continue outer; } + h -= ch; + n += child.chunkSize(); + } + return n; + } while (!chunk.lines); + for (var i = 0, e = chunk.lines.length; i < e; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) break; + h -= lh; + } + return n + i; + } + function heightAtLine(chunk, n) { + var h = 0; + outer: do { + for (var i = 0, e = chunk.children.length; i < e; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; continue outer; } + n -= sz; + h += child.height; + } + return h; + } while (!chunk.lines); + for (var i = 0; i < n; ++i) h += chunk.lines[i].height; + return h; + } + + // The history object 'chunks' changes that are made close together + // and at almost the same time into bigger undoable units. + function History() { + this.time = 0; + this.done = []; this.undone = []; + this.compound = 0; + this.closed = false; + } + History.prototype = { + addChange: function(start, added, old) { + this.undone.length = 0; + var time = +new Date, cur = lst(this.done), last = cur && lst(cur); + var dtime = time - this.time; + + if (cur && !this.closed && this.compound) { + cur.push({start: start, added: added, old: old}); + } else if (dtime > 400 || !last || this.closed || + last.start > start + old.length || last.start + last.added < start) { + this.done.push([{start: start, added: added, old: old}]); + this.closed = false; + } else { + var startBefore = Math.max(0, last.start - start), + endAfter = Math.max(0, (start + old.length) - (last.start + last.added)); + for (var i = startBefore; i > 0; --i) last.old.unshift(old[i - 1]); + for (var i = endAfter; i > 0; --i) last.old.push(old[old.length - i]); + if (startBefore) last.start = start; + last.added += added - (old.length - startBefore - endAfter); + } + this.time = time; + }, + startCompound: function() { + if (!this.compound++) this.closed = true; + }, + endCompound: function() { + if (!--this.compound) this.closed = true; + } + }; + + function stopMethod() {e_stop(this);} + // Ensure an event has a stop method. + function addStop(event) { + if (!event.stop) event.stop = stopMethod; + return event; + } + + function e_preventDefault(e) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + function e_stopPropagation(e) { + if (e.stopPropagation) e.stopPropagation(); + else e.cancelBubble = true; + } + function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);} + CodeMirror.e_stop = e_stop; + CodeMirror.e_preventDefault = e_preventDefault; + CodeMirror.e_stopPropagation = e_stopPropagation; + + function e_target(e) {return e.target || e.srcElement;} + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) b = 1; + else if (e.button & 2) b = 3; + else if (e.button & 4) b = 2; + } + if (mac && e.ctrlKey && b == 1) b = 3; + return b; + } + + // Allow 3rd-party code to override event properties by adding an override + // object to an event object. + function e_prop(e, prop) { + var overridden = e.override && e.override.hasOwnProperty(prop); + return overridden ? e.override[prop] : e[prop]; + } + + // Event handler registration. If disconnect is true, it'll return a + // function that unregisters the handler. + function connect(node, type, handler, disconnect) { + if (typeof node.addEventListener == "function") { + node.addEventListener(type, handler, false); + if (disconnect) return function() {node.removeEventListener(type, handler, false);}; + } else { + var wrapHandler = function(event) {handler(event || window.event);}; + node.attachEvent("on" + type, wrapHandler); + if (disconnect) return function() {node.detachEvent("on" + type, wrapHandler);}; + } + } + CodeMirror.connect = connect; + + function Delayed() {this.id = null;} + Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}}; + + var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; + + // Detect drag-and-drop + var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie_lt9) return false; + var div = elt('div'); + return "draggable" in div || "dragDrop" in div; + }(); + + // Feature-detect whether newlines in textareas are converted to \r\n + var lineSep = function () { + var te = elt("textarea"); + te.value = "foo\nbar"; + if (te.value.indexOf("\r") > -1) return "\r\n"; + return "\n"; + }(); + + // For a reason I have yet to figure out, some browsers disallow + // word wrapping between certain characters *only* if a new inline + // element is started between them. This makes it hard to reliably + // measure the position of things, since that requires inserting an + // extra span. This terribly fragile set of regexps matches the + // character combinations that suffer from this phenomenon on the + // various browsers. + var spanAffectsWrapping = /^$/; // Won't match any two-character string + if (gecko) spanAffectsWrapping = /$'/; + else if (safari) spanAffectsWrapping = /\-[^ \-?]|\?[^ !'\"\),.\-\/:;\?\]\}]/; + else if (chrome) spanAffectsWrapping = /\-[^ \-\.?]|\?[^ \-\.?\]\}:;!'\"\),\/]|[\.!\"#&%\)*+,:;=>\]|\}~][\(\{\[<]|\$'/; + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + function countColumn(string, end, tabSize) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) end = string.length; + } + for (var i = 0, n = 0; i < end; ++i) { + if (string.charAt(i) == "\t") n += tabSize - (n % tabSize); + else ++n; + } + return n; + } + + function eltOffset(node, screen) { + // Take the parts of bounding client rect that we are interested in so we are able to edit if need be, + // since the returned value cannot be changed externally (they are kept in sync as the element moves within the page) + try { var box = node.getBoundingClientRect(); box = { top: box.top, left: box.left }; } + catch(e) { box = {top: 0, left: 0}; } + if (!screen) { + // Get the toplevel scroll, working around browser differences. + if (window.pageYOffset == null) { + var t = document.documentElement || document.body.parentNode; + if (t.scrollTop == null) t = document.body; + box.top += t.scrollTop; box.left += t.scrollLeft; + } else { + box.top += window.pageYOffset; box.left += window.pageXOffset; + } + } + return box; + } + + function eltText(node) { + return node.textContent || node.innerText || node.nodeValue || ""; + } + + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) + spaceStrs.push(lst(spaceStrs) + " "); + return spaceStrs[n]; + } + + function lst(arr) { return arr[arr.length-1]; } + + function selectInput(node) { + if (ios) { // Mobile Safari apparently has a bug where select() is broken. + node.selectionStart = 0; + node.selectionEnd = node.value.length; + } else node.select(); + } + + // Operations on {line, ch} objects. + function posEq(a, b) {return a.line == b.line && a.ch == b.ch;} + function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);} + function copyPos(x) {return {line: x.line, ch: x.ch};} + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) e.className = className; + if (style) e.style.cssText = style; + if (typeof content == "string") setTextContent(e, content); + else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); + return e; + } + function removeChildren(e) { + e.innerHTML = ""; + return e; + } + function removeChildrenAndAdd(parent, e) { + removeChildren(parent).appendChild(e); + } + function setTextContent(e, str) { + if (ie_lt9) { + e.innerHTML = ""; + e.appendChild(document.createTextNode(str)); + } else e.textContent = str; + } + + // Used to position the cursor after an undo/redo by finding the + // last edited character. + function editEnd(from, to) { + if (!to) return 0; + if (!from) return to.length; + for (var i = from.length, j = to.length; i >= 0 && j >= 0; --i, --j) + if (from.charAt(i) != to.charAt(j)) break; + return j + 1; + } + + function indexOf(collection, elt) { + if (collection.indexOf) return collection.indexOf(elt); + for (var i = 0, e = collection.length; i < e; ++i) + if (collection[i] == elt) return i; + return -1; + } + function isWordChar(ch) { + return /\w/.test(ch) || ch.toUpperCase() != ch.toLowerCase() || /[\u4E00-\u9FA5]/.test(ch); + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) nl = string.length; + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result; + } : function(string){return string.split(/\r\n?|\n/);}; + CodeMirror.splitLines = splitLines; + + var hasSelection = window.getSelection ? function(te) { + try { return te.selectionStart != te.selectionEnd; } + catch(e) { return false; } + } : function(te) { + try {var range = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range || range.parentElement() != te) return false; + return range.compareEndPoints("StartToEnd", range) != 0; + }; + + CodeMirror.defineMode("null", function() { + return {token: function(stream) {stream.skipToEnd();}}; + }); + CodeMirror.defineMIME("text/plain", "null"); + + var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 91: "Mod", 92: "Mod", 93: "Mod", 109: "-", 107: "=", 127: "Delete", + 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63276: "PageUp", 63277: "PageDown", 63275: "End", 63273: "Home", + 63234: "Left", 63232: "Up", 63235: "Right", 63233: "Down", 63302: "Insert", 63272: "Delete"}; + CodeMirror.keyNames = keyNames; + (function() { + // Number keys + for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i); + // Alphabetic keys + for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); + // Function keys + for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; + })(); + + CodeMirror.version = "2.35"; + + return CodeMirror; +})(); diff --git a/src/wp-content/plugins/revslider/js/codemirror/css.js b/src/wp-content/plugins/revslider/js/codemirror/css.js new file mode 100644 index 0000000..d104729 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/css.js @@ -0,0 +1,448 @@ +CodeMirror.defineMode("css", function(config) { + var indentUnit = config.indentUnit, type; + + var atMediaTypes = keySet([ + "all", "aural", "braille", "handheld", "print", "projection", "screen", + "tty", "tv", "embossed" + ]); + + var atMediaFeatures = keySet([ + "width", "min-width", "max-width", "height", "min-height", "max-height", + "device-width", "min-device-width", "max-device-width", "device-height", + "min-device-height", "max-device-height", "aspect-ratio", + "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", + "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", + "max-color", "color-index", "min-color-index", "max-color-index", + "monochrome", "min-monochrome", "max-monochrome", "resolution", + "min-resolution", "max-resolution", "scan", "grid" + ]); + + var propertyKeywords = keySet([ + "align-content", "align-items", "align-self", "alignment-adjust", + "alignment-baseline", "anchor-point", "animation", "animation-delay", + "animation-direction", "animation-duration", "animation-iteration-count", + "animation-name", "animation-play-state", "animation-timing-function", + "appearance", "azimuth", "backface-visibility", "background", + "background-attachment", "background-clip", "background-color", + "background-image", "background-origin", "background-position", + "background-repeat", "background-size", "baseline-shift", "binding", + "bleed", "bookmark-label", "bookmark-level", "bookmark-state", + "bookmark-target", "border", "border-bottom", "border-bottom-color", + "border-bottom-left-radius", "border-bottom-right-radius", + "border-bottom-style", "border-bottom-width", "border-collapse", + "border-color", "border-image", "border-image-outset", + "border-image-repeat", "border-image-slice", "border-image-source", + "border-image-width", "border-left", "border-left-color", + "border-left-style", "border-left-width", "border-radius", "border-right", + "border-right-color", "border-right-style", "border-right-width", + "border-spacing", "border-style", "border-top", "border-top-color", + "border-top-left-radius", "border-top-right-radius", "border-top-style", + "border-top-width", "border-width", "bottom", "box-decoration-break", + "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", + "caption-side", "clear", "clip", "color", "color-profile", "column-count", + "column-fill", "column-gap", "column-rule", "column-rule-color", + "column-rule-style", "column-rule-width", "column-span", "column-width", + "columns", "content", "counter-increment", "counter-reset", "crop", "cue", + "cue-after", "cue-before", "cursor", "direction", "display", + "dominant-baseline", "drop-initial-after-adjust", + "drop-initial-after-align", "drop-initial-before-adjust", + "drop-initial-before-align", "drop-initial-size", "drop-initial-value", + "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", + "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", + "float", "float-offset", "font", "font-feature-settings", "font-family", + "font-kerning", "font-language-override", "font-size", "font-size-adjust", + "font-stretch", "font-style", "font-synthesis", "font-variant", + "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", + "font-variant-ligatures", "font-variant-numeric", "font-variant-position", + "font-weight", "grid-cell", "grid-column", "grid-column-align", + "grid-column-sizing", "grid-column-span", "grid-columns", "grid-flow", + "grid-row", "grid-row-align", "grid-row-sizing", "grid-row-span", + "grid-rows", "grid-template", "hanging-punctuation", "height", "hyphens", + "icon", "image-orientation", "image-rendering", "image-resolution", + "inline-box-align", "justify-content", "left", "letter-spacing", + "line-break", "line-height", "line-stacking", "line-stacking-ruby", + "line-stacking-shift", "line-stacking-strategy", "list-style", + "list-style-image", "list-style-position", "list-style-type", "margin", + "margin-bottom", "margin-left", "margin-right", "margin-top", + "marker-offset", "marks", "marquee-direction", "marquee-loop", + "marquee-play-count", "marquee-speed", "marquee-style", "max-height", + "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", + "nav-left", "nav-right", "nav-up", "opacity", "order", "orphans", "outline", + "outline-color", "outline-offset", "outline-style", "outline-width", + "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", + "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", + "page", "page-break-after", "page-break-before", "page-break-inside", + "page-policy", "pause", "pause-after", "pause-before", "perspective", + "perspective-origin", "pitch", "pitch-range", "play-during", "position", + "presentation-level", "punctuation-trim", "quotes", "rendering-intent", + "resize", "rest", "rest-after", "rest-before", "richness", "right", + "rotation", "rotation-point", "ruby-align", "ruby-overhang", + "ruby-position", "ruby-span", "size", "speak", "speak-as", "speak-header", + "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", + "tab-size", "table-layout", "target", "target-name", "target-new", + "target-position", "text-align", "text-align-last", "text-decoration", + "text-decoration-color", "text-decoration-line", "text-decoration-skip", + "text-decoration-style", "text-emphasis", "text-emphasis-color", + "text-emphasis-position", "text-emphasis-style", "text-height", + "text-indent", "text-justify", "text-outline", "text-shadow", + "text-space-collapse", "text-transform", "text-underline-position", + "text-wrap", "top", "transform", "transform-origin", "transform-style", + "transition", "transition-delay", "transition-duration", + "transition-property", "transition-timing-function", "unicode-bidi", + "vertical-align", "visibility", "voice-balance", "voice-duration", + "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", + "voice-volume", "volume", "white-space", "widows", "width", "word-break", + "word-spacing", "word-wrap", "z-index" + ]); + + var colorKeywords = keySet([ + "black", "silver", "gray", "white", "maroon", "red", "purple", "fuchsia", + "green", "lime", "olive", "yellow", "navy", "blue", "teal", "aqua" + ]); + + var valueKeywords = keySet([ + "above", "absolute", "activeborder", "activecaption", "afar", + "after-white-space", "ahead", "alias", "all", "all-scroll", "alternate", + "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", + "arabic-indic", "armenian", "asterisks", "auto", "avoid", "background", + "backwards", "baseline", "below", "bidi-override", "binary", "bengali", + "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", + "both", "bottom", "break-all", "break-word", "button", "button-bevel", + "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "cambodian", + "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", + "cell", "center", "checkbox", "circle", "cjk-earthly-branch", + "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", + "col-resize", "collapse", "compact", "condensed", "contain", "content", + "content-box", "context-menu", "continuous", "copy", "cover", "crop", + "cross", "crosshair", "currentcolor", "cursive", "dashed", "decimal", + "decimal-leading-zero", "default", "default-button", "destination-atop", + "destination-in", "destination-out", "destination-over", "devanagari", + "disc", "discard", "document", "dot-dash", "dot-dot-dash", "dotted", + "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", + "element", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", + "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", + "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", + "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", + "ethiopic-halehame-gez", "ethiopic-halehame-om-et", + "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", + "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", + "ethiopic-halehame-tig", "ew-resize", "expanded", "extra-condensed", + "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "footnotes", + "forwards", "from", "geometricPrecision", "georgian", "graytext", "groove", + "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hebrew", + "help", "hidden", "hide", "higher", "highlight", "highlighttext", + "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "icon", "ignore", + "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", + "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", + "inline-block", "inline-table", "inset", "inside", "intrinsic", "invert", + "italic", "justify", "kannada", "katakana", "katakana-iroha", "khmer", + "landscape", "lao", "large", "larger", "left", "level", "lighter", + "line-through", "linear", "lines", "list-item", "listbox", "listitem", + "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", + "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", + "lower-roman", "lowercase", "ltr", "malayalam", "match", + "media-controls-background", "media-current-time-display", + "media-fullscreen-button", "media-mute-button", "media-play-button", + "media-return-to-realtime-button", "media-rewind-button", + "media-seek-back-button", "media-seek-forward-button", "media-slider", + "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", + "media-volume-slider-container", "media-volume-sliderthumb", "medium", + "menu", "menulist", "menulist-button", "menulist-text", + "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", + "mix", "mongolian", "monospace", "move", "multiple", "myanmar", "n-resize", + "narrower", "navy", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", + "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", + "ns-resize", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote", + "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", + "outside", "overlay", "overline", "padding", "padding-box", "painted", + "paused", "persian", "plus-darker", "plus-lighter", "pointer", "portrait", + "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", + "radio", "read-only", "read-write", "read-write-plaintext-only", "relative", + "repeat", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", + "ridge", "right", "round", "row-resize", "rtl", "run-in", "running", + "s-resize", "sans-serif", "scroll", "scrollbar", "se-resize", "searchfield", + "searchfield-cancel-button", "searchfield-decoration", + "searchfield-results-button", "searchfield-results-decoration", + "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", + "single", "skip-white-space", "slide", "slider-horizontal", + "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", + "small", "small-caps", "small-caption", "smaller", "solid", "somali", + "source-atop", "source-in", "source-out", "source-over", "space", "square", + "square-button", "start", "static", "status-bar", "stretch", "stroke", + "sub", "subpixel-antialiased", "super", "sw-resize", "table", + "table-caption", "table-cell", "table-column", "table-column-group", + "table-footer-group", "table-header-group", "table-row", "table-row-group", + "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", + "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", + "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", + "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", + "transparent", "ultra-condensed", "ultra-expanded", "underline", "up", + "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", + "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", + "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", + "visibleStroke", "visual", "w-resize", "wait", "wave", "white", "wider", + "window", "windowframe", "windowtext", "x-large", "x-small", "xor", + "xx-large", "xx-small", "yellow" + ]); + + function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) keys[array[i]] = true; return keys; } + function ret(style, tp) {type = tp; return style;} + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("def", stream.current());} + else if (ch == "/" && stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + else if (ch == "<" && stream.eat("!")) { + state.tokenize = tokenSGMLComment; + return tokenSGMLComment(stream, state); + } + else if (ch == "=") ret(null, "compare"); + else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + else if (ch == "#") { + stream.eatWhile(/[\w\\\-]/); + return ret("atom", "hash"); + } + else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } + else if (ch === "-") { + if (/\d/.test(stream.peek())) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (stream.match(/^[^-]+-/)) { + return ret("meta", type); + } + } + else if (/[,+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } + else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { + return ret("qualifier", type); + } + else if (ch == ":") { + return ret("operator", ch); + } + else if (/[;{}\[\]\(\)]/.test(ch)) { + return ret(null, ch); + } + else { + stream.eatWhile(/[\w\\\-]/); + return ret("property", "variable"); + } + } + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + function tokenSGMLComment(stream, state) { + var dashes = 0, ch; + while ((ch = stream.next()) != null) { + if (dashes >= 2 && ch == ">") { + state.tokenize = tokenBase; + break; + } + dashes = (ch == "-") ? dashes + 1 : 0; + } + return ret("comment", "comment"); + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) + break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + + return { + startState: function(base) { + return {tokenize: tokenBase, + baseIndent: base || 0, + stack: []}; + }, + + token: function(stream, state) { + + // Use these terms when applicable (see http://www.xanthir.com/blog/b4E50) + // + // rule** or **ruleset: + // A selector + braces combo, or an at-rule. + // + // declaration block: + // A sequence of declarations. + // + // declaration: + // A property + colon + value combo. + // + // property value: + // The entire value of a property. + // + // component value: + // A single piece of a property value. Like the 5px in + // text-shadow: 0 0 5px blue;. Can also refer to things that are + // multiple terms, like the 1-4 terms that make up the background-size + // portion of the background shorthand. + // + // term: + // The basic unit of author-facing CSS, like a single number (5), + // dimension (5px), string ("foo"), or function. Officially defined + // by the CSS 2.1 grammar (look for the 'term' production) + // + // + // simple selector: + // A single atomic selector, like a type selector, an attr selector, a + // class selector, etc. + // + // compound selector: + // One or more simple selectors without a combinator. div.example is + // compound, div > .example is not. + // + // complex selector: + // One or more compound selectors chained with combinators. + // + // combinator: + // The parts of selectors that express relationships. There are four + // currently - the space (descendant combinator), the greater-than + // bracket (child combinator), the plus sign (next sibling combinator), + // and the tilda (following sibling combinator). + // + // sequence of selectors: + // One or more of the named type of selector chained with commas. + + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + + // Changing style returned based on context + var context = state.stack[state.stack.length-1]; + if (style == "property") { + if (context == "propertyValue"){ + if (valueKeywords[stream.current()]) { + style = "string-2"; + } else if (colorKeywords[stream.current()]) { + style = "keyword"; + } else { + style = "variable-2"; + } + } else if (context == "rule") { + if (!propertyKeywords[stream.current()]) { + style += " error"; + } + } else if (!context || context == "@media{") { + style = "tag"; + } else if (context == "@media") { + if (atMediaTypes[stream.current()]) { + style = "attribute"; // Known attribute + } else if (/^(only|not)$/i.test(stream.current())) { + style = "keyword"; + } else if (stream.current().toLowerCase() == "and") { + style = "error"; // "and" is only allowed in @mediaType + } else if (atMediaFeatures[stream.current()]) { + style = "error"; // Known property, should be in @mediaType( + } else { + // Unknown, expecting keyword or attribute, assuming attribute + style = "attribute error"; + } + } else if (context == "@mediaType") { + if (atMediaTypes[stream.current()]) { + style = "attribute"; + } else if (stream.current().toLowerCase() == "and") { + style = "operator"; + } else if (/^(only|not)$/i.test(stream.current())) { + style = "error"; // Only allowed in @media + } else if (atMediaFeatures[stream.current()]) { + style = "error"; // Known property, should be in parentheses + } else { + // Unknown attribute or property, but expecting property (preceded + // by "and"). Should be in parentheses + style = "error"; + } + } else if (context == "@mediaType(") { + if (propertyKeywords[stream.current()]) { + // do nothing, remains "property" + } else if (atMediaTypes[stream.current()]) { + style = "error"; // Known property, should be in parentheses + } else if (stream.current().toLowerCase() == "and") { + style = "operator"; + } else if (/^(only|not)$/i.test(stream.current())) { + style = "error"; // Only allowed in @media + } else { + style += " error"; + } + } else { + style = "error"; + } + } else if (style == "atom") { + if(!context || context == "@media{") { + style = "builtin"; + } else if (context == "propertyValue") { + if (!/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(stream.current())) { + style += " error"; + } + } else { + style = "error"; + } + } else if (context == "@media" && type == "{") { + style = "error"; + } + + // Push/pop context stack + if (type == "{") { + if (context == "@media" || context == "@mediaType") { + state.stack.pop(); + state.stack[state.stack.length-1] = "@media{"; + } + else state.stack.push("rule"); + } + else if (type == "}") { + state.stack.pop(); + if (context == "propertyValue") state.stack.pop(); + } + else if (type == "@media") state.stack.push("@media"); + else if (context == "@media" && /\b(keyword|attribute)\b/.test(style)) + state.stack.push("@mediaType"); + else if (context == "@mediaType" && stream.current() == ",") state.stack.pop(); + else if (context == "@mediaType" && type == "(") state.stack.push("@mediaType("); + else if (context == "@mediaType(" && type == ")") state.stack.pop(); + else if (context == "rule" && type == ":") state.stack.push("propertyValue"); + else if (context == "propertyValue" && type == ";") state.stack.pop(); + return style; + }, + + indent: function(state, textAfter) { + var n = state.stack.length; + if (/^\}/.test(textAfter)) + n -= state.stack[state.stack.length-1] == "propertyValue" ? 2 : 1; + return state.baseIndent + n * indentUnit; + }, + + electricChars: "}" + }; +}); + +CodeMirror.defineMIME("text/css", "css"); diff --git a/src/wp-content/plugins/revslider/js/codemirror/index.php b/src/wp-content/plugins/revslider/js/codemirror/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/closetag.js b/src/wp-content/plugins/revslider/js/codemirror/util/closetag.js new file mode 100644 index 0000000..5096678 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/closetag.js @@ -0,0 +1,164 @@ +/** + * Tag-closer extension for CodeMirror. + * + * This extension adds a "closeTag" utility function that can be used with key bindings to + * insert a matching end tag after the ">" character of a start tag has been typed. It can + * also complete " + * Contributed under the same license terms as CodeMirror. + */ +(function() { + /** Option that allows tag closing behavior to be toggled. Default is true. */ + CodeMirror.defaults['closeTagEnabled'] = true; + + /** Array of tag names to add indentation after the start tag for. Default is the list of block-level html tags. */ + CodeMirror.defaults['closeTagIndent'] = ['applet', 'blockquote', 'body', 'button', 'div', 'dl', 'fieldset', 'form', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'html', 'iframe', 'layer', 'legend', 'object', 'ol', 'p', 'select', 'table', 'ul']; + + /** Array of tag names where an end tag is forbidden. */ + CodeMirror.defaults['closeTagVoid'] = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr']; + + function innerState(cm, state) { + return CodeMirror.innerMode(cm.getMode(), state).state; + } + + + /** + * Call during key processing to close tags. Handles the key event if the tag is closed, otherwise throws CodeMirror.Pass. + * - cm: The editor instance. + * - ch: The character being processed. + * - indent: Optional. An array of tag names to indent when closing. Omit or pass true to use the default indentation tag list defined in the 'closeTagIndent' option. + * Pass false to disable indentation. Pass an array to override the default list of tag names. + * - vd: Optional. An array of tag names that should not be closed. Omit to use the default void (end tag forbidden) tag list defined in the 'closeTagVoid' option. Ignored in xml mode. + */ + CodeMirror.defineExtension("closeTag", function(cm, ch, indent, vd) { + if (!cm.getOption('closeTagEnabled')) { + throw CodeMirror.Pass; + } + + /* + * Relevant structure of token: + * + * htmlmixed + * className + * state + * htmlState + * type + * tagName + * context + * tagName + * mode + * + * xml + * className + * state + * tagName + * type + */ + + var pos = cm.getCursor(); + var tok = cm.getTokenAt(pos); + var state = innerState(cm, tok.state); + + if (state) { + + if (ch == '>') { + var type = state.type; + + if (tok.className == 'tag' && type == 'closeTag') { + throw CodeMirror.Pass; // Don't process the '>' at the end of an end-tag. + } + + cm.replaceSelection('>'); // Mode state won't update until we finish the tag. + pos = {line: pos.line, ch: pos.ch + 1}; + cm.setCursor(pos); + + tok = cm.getTokenAt(cm.getCursor()); + state = innerState(cm, tok.state); + if (!state) throw CodeMirror.Pass; + var type = state.type; + + if (tok.className == 'tag' && type != 'selfcloseTag') { + var tagName = state.tagName; + if (tagName.length > 0 && shouldClose(cm, vd, tagName)) { + insertEndTag(cm, indent, pos, tagName); + } + return; + } + + // Undo the '>' insert and allow cm to handle the key instead. + cm.setSelection({line: pos.line, ch: pos.ch - 1}, pos); + cm.replaceSelection(""); + + } else if (ch == '/') { + if (tok.className == 'tag' && tok.string == '<') { + var ctx = state.context, tagName = ctx ? ctx.tagName : ''; + if (tagName.length > 0) { + completeEndTag(cm, pos, tagName); + return; + } + } + } + + } + + throw CodeMirror.Pass; // Bubble if not handled + }); + + function insertEndTag(cm, indent, pos, tagName) { + if (shouldIndent(cm, indent, tagName)) { + cm.replaceSelection('\n\n', 'end'); + cm.indentLine(pos.line + 1); + cm.indentLine(pos.line + 2); + cm.setCursor({line: pos.line + 1, ch: cm.getLine(pos.line + 1).length}); + } else { + cm.replaceSelection(''); + cm.setCursor(pos); + } + } + + function shouldIndent(cm, indent, tagName) { + if (typeof indent == 'undefined' || indent == null || indent == true) { + indent = cm.getOption('closeTagIndent'); + } + if (!indent) { + indent = []; + } + return indexOf(indent, tagName.toLowerCase()) != -1; + } + + function shouldClose(cm, vd, tagName) { + if (cm.getOption('mode') == 'xml') { + return true; // always close xml tags + } + if (typeof vd == 'undefined' || vd == null) { + vd = cm.getOption('closeTagVoid'); + } + if (!vd) { + vd = []; + } + return indexOf(vd, tagName.toLowerCase()) == -1; + } + + // C&P from codemirror.js...would be nice if this were visible to utilities. + function indexOf(collection, elt) { + if (collection.indexOf) return collection.indexOf(elt); + for (var i = 0, e = collection.length; i < e; ++i) + if (collection[i] == elt) return i; + return -1; + } + + function completeEndTag(cm, pos, tagName) { + cm.replaceSelection('/' + tagName + '>'); + cm.setCursor({line: pos.line, ch: pos.ch + tagName.length + 2 }); + } + +})(); diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/dialog.css b/src/wp-content/plugins/revslider/js/codemirror/util/dialog.css new file mode 100644 index 0000000..3849476 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/dialog.css @@ -0,0 +1,27 @@ +.CodeMirror-dialog { + position: relative; +} + +.CodeMirror-dialog > div { + position: absolute; + top: 0; left: 0; right: 0; + background: white; + border-bottom: 1px solid #eee; + z-index: 15; + padding: .1em .8em; + overflow: hidden; + color: #333; +} + +.CodeMirror-dialog input { + border: none; + outline: none; + background: transparent; + width: 20em; + color: inherit; + font-family: monospace; +} + +.CodeMirror-dialog button { + font-size: 70%; +} \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/dialog.js b/src/wp-content/plugins/revslider/js/codemirror/util/dialog.js new file mode 100644 index 0000000..bcbe774 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/dialog.js @@ -0,0 +1,70 @@ +// Open simple dialogs on top of an editor. Relies on dialog.css. + +(function() { + function dialogDiv(cm, template) { + var wrap = cm.getWrapperElement(); + var dialog = wrap.insertBefore(document.createElement("div"), wrap.firstChild); + dialog.className = "CodeMirror-dialog"; + dialog.innerHTML = '
            ' + template + '
            '; + return dialog; + } + + CodeMirror.defineExtension("openDialog", function(template, callback) { + var dialog = dialogDiv(this, template); + var closed = false, me = this; + function close() { + if (closed) return; + closed = true; + dialog.parentNode.removeChild(dialog); + } + var inp = dialog.getElementsByTagName("input")[0], button; + if (inp) { + CodeMirror.connect(inp, "keydown", function(e) { + if (e.keyCode == 13 || e.keyCode == 27) { + CodeMirror.e_stop(e); + close(); + me.focus(); + if (e.keyCode == 13) callback(inp.value); + } + }); + inp.focus(); + CodeMirror.connect(inp, "blur", close); + } else if (button = dialog.getElementsByTagName("button")[0]) { + CodeMirror.connect(button, "click", function() { + close(); + me.focus(); + }); + button.focus(); + CodeMirror.connect(button, "blur", close); + } + return close; + }); + + CodeMirror.defineExtension("openConfirm", function(template, callbacks) { + var dialog = dialogDiv(this, template); + var buttons = dialog.getElementsByTagName("button"); + var closed = false, me = this, blurring = 1; + function close() { + if (closed) return; + closed = true; + dialog.parentNode.removeChild(dialog); + me.focus(); + } + buttons[0].focus(); + for (var i = 0; i < buttons.length; ++i) { + var b = buttons[i]; + (function(callback) { + CodeMirror.connect(b, "click", function(e) { + CodeMirror.e_preventDefault(e); + close(); + if (callback) callback(me); + }); + })(callbacks[i]); + CodeMirror.connect(b, "blur", function() { + --blurring; + setTimeout(function() { if (blurring <= 0) close(); }, 200); + }); + CodeMirror.connect(b, "focus", function() { ++blurring; }); + } + }); +})(); \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/foldcode.js b/src/wp-content/plugins/revslider/js/codemirror/util/foldcode.js new file mode 100644 index 0000000..3681867 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/foldcode.js @@ -0,0 +1,196 @@ +// the tagRangeFinder function is +// Copyright (C) 2011 by Daniel Glazman +// released under the MIT license (../../LICENSE) like the rest of CodeMirror +CodeMirror.tagRangeFinder = function(cm, line, hideEnd) { + var nameStartChar = "A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD"; + var nameChar = nameStartChar + "\-\:\.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040"; + var xmlNAMERegExp = new RegExp("^[" + nameStartChar + "][" + nameChar + "]*"); + + var lineText = cm.getLine(line); + var found = false; + var tag = null; + var pos = 0; + while (!found) { + pos = lineText.indexOf("<", pos); + if (-1 == pos) // no tag on line + return; + if (pos + 1 < lineText.length && lineText[pos + 1] == "/") { // closing tag + pos++; + continue; + } + // ok we weem to have a start tag + if (!lineText.substr(pos + 1).match(xmlNAMERegExp)) { // not a tag name... + pos++; + continue; + } + var gtPos = lineText.indexOf(">", pos + 1); + if (-1 == gtPos) { // end of start tag not in line + var l = line + 1; + var foundGt = false; + var lastLine = cm.lineCount(); + while (l < lastLine && !foundGt) { + var lt = cm.getLine(l); + var gt = lt.indexOf(">"); + if (-1 != gt) { // found a > + foundGt = true; + var slash = lt.lastIndexOf("/", gt); + if (-1 != slash && slash < gt) { + var str = lineText.substr(slash, gt - slash + 1); + if (!str.match( /\/\s*\>/ )) { // yep, that's the end of empty tag + if (hideEnd === true) l++; + return l; + } + } + } + l++; + } + found = true; + } + else { + var slashPos = lineText.lastIndexOf("/", gtPos); + if (-1 == slashPos) { // cannot be empty tag + found = true; + // don't continue + } + else { // empty tag? + // check if really empty tag + var str = lineText.substr(slashPos, gtPos - slashPos + 1); + if (!str.match( /\/\s*\>/ )) { // finally not empty + found = true; + // don't continue + } + } + } + if (found) { + var subLine = lineText.substr(pos + 1); + tag = subLine.match(xmlNAMERegExp); + if (tag) { + // we have an element name, wooohooo ! + tag = tag[0]; + // do we have the close tag on same line ??? + if (-1 != lineText.indexOf("", pos)) // yep + { + found = false; + } + // we don't, so we have a candidate... + } + else + found = false; + } + if (!found) + pos++; + } + + if (found) { + var startTag = "(\\<\\/" + tag + "\\>)|(\\<" + tag + "\\>)|(\\<" + tag + "\\s)|(\\<" + tag + "$)"; + var startTagRegExp = new RegExp(startTag, "g"); + var endTag = ""; + var depth = 1; + var l = line + 1; + var lastLine = cm.lineCount(); + while (l < lastLine) { + lineText = cm.getLine(l); + var match = lineText.match(startTagRegExp); + if (match) { + for (var i = 0; i < match.length; i++) { + if (match[i] == endTag) + depth--; + else + depth++; + if (!depth) { + if (hideEnd === true) l++; + return l; + } + } + } + l++; + } + return; + } +}; + +CodeMirror.braceRangeFinder = function(cm, line, hideEnd) { + var lineText = cm.getLine(line), at = lineText.length, startChar, tokenType; + for (;;) { + var found = lineText.lastIndexOf("{", at); + if (found < 0) break; + tokenType = cm.getTokenAt({line: line, ch: found}).className; + if (!/^(comment|string)/.test(tokenType)) { startChar = found; break; } + at = found - 1; + } + if (startChar == null || lineText.lastIndexOf("}") > startChar) return; + var count = 1, lastLine = cm.lineCount(), end; + outer: for (var i = line + 1; i < lastLine; ++i) { + var text = cm.getLine(i), pos = 0; + for (;;) { + var nextOpen = text.indexOf("{", pos), nextClose = text.indexOf("}", pos); + if (nextOpen < 0) nextOpen = text.length; + if (nextClose < 0) nextClose = text.length; + pos = Math.min(nextOpen, nextClose); + if (pos == text.length) break; + if (cm.getTokenAt({line: i, ch: pos + 1}).className == tokenType) { + if (pos == nextOpen) ++count; + else if (!--count) { end = i; break outer; } + } + ++pos; + } + } + if (end == null || end == line + 1) return; + if (hideEnd === true) end++; + return end; +}; + +CodeMirror.indentRangeFinder = function(cm, line) { + var tabSize = cm.getOption("tabSize"); + var myIndent = cm.getLineHandle(line).indentation(tabSize), last; + for (var i = line + 1, end = cm.lineCount(); i < end; ++i) { + var handle = cm.getLineHandle(i); + if (!/^\s*$/.test(handle.text)) { + if (handle.indentation(tabSize) <= myIndent) break; + last = i; + } + } + if (!last) return null; + return last + 1; +}; + +CodeMirror.newFoldFunction = function(rangeFinder, markText, hideEnd) { + var folded = []; + if (markText == null) markText = '
            %N%'; + + function isFolded(cm, n) { + for (var i = 0; i < folded.length; ++i) { + var start = cm.lineInfo(folded[i].start); + if (!start) folded.splice(i--, 1); + else if (start.line == n) return {pos: i, region: folded[i]}; + } + } + + function expand(cm, region) { + cm.clearMarker(region.start); + for (var i = 0; i < region.hidden.length; ++i) + cm.showLine(region.hidden[i]); + } + + return function(cm, line) { + cm.operation(function() { + var known = isFolded(cm, line); + if (known) { + folded.splice(known.pos, 1); + expand(cm, known.region); + } else { + var end = rangeFinder(cm, line, hideEnd); + if (end == null) return; + var hidden = []; + for (var i = line + 1; i < end; ++i) { + var handle = cm.hideLine(i); + if (handle) hidden.push(handle); + } + var first = cm.setMarker(line, markText); + var region = {start: first, hidden: hidden}; + cm.onDeleteLine(first, function() { expand(cm, region); }); + folded.push(region); + } + }); + }; +}; diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/formatting.js b/src/wp-content/plugins/revslider/js/codemirror/util/formatting.js new file mode 100644 index 0000000..e83b85c --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/formatting.js @@ -0,0 +1,193 @@ +// ============== Formatting extensions ============================ +(function() { + // Define extensions for a few modes + CodeMirror.extendMode("css", { + commentStart: "/*", + commentEnd: "*/", + wordWrapChars: [";", "\\{", "\\}"], + autoFormatLineBreaks: function (text) { + return text.replace(new RegExp("(;|\\{|\\})([^\r\n])", "g"), "$1\n$2"); + } + }); + + function jsNonBreakableBlocks(text) { + var nonBreakableRegexes = [/for\s*?\((.*?)\)/, + /\"(.*?)(\"|$)/, + /\'(.*?)(\'|$)/, + /\/\*(.*?)(\*\/|$)/, + /\/\/.*/]; + var nonBreakableBlocks = []; + for (var i = 0; i < nonBreakableRegexes.length; i++) { + var curPos = 0; + while (curPos < text.length) { + var m = text.substr(curPos).match(nonBreakableRegexes[i]); + if (m != null) { + nonBreakableBlocks.push({ + start: curPos + m.index, + end: curPos + m.index + m[0].length + }); + curPos += m.index + Math.max(1, m[0].length); + } + else { // No more matches + break; + } + } + } + nonBreakableBlocks.sort(function (a, b) { + return a.start - b.start; + }); + + return nonBreakableBlocks; + } + + CodeMirror.extendMode("javascript", { + commentStart: "/*", + commentEnd: "*/", + wordWrapChars: [";", "\\{", "\\}"], + + autoFormatLineBreaks: function (text) { + var curPos = 0; + var reLinesSplitter = /(;|\{|\})([^\r\n;])/g; + var nonBreakableBlocks = jsNonBreakableBlocks(text); + if (nonBreakableBlocks != null) { + var res = ""; + for (var i = 0; i < nonBreakableBlocks.length; i++) { + if (nonBreakableBlocks[i].start > curPos) { // Break lines till the block + res += text.substring(curPos, nonBreakableBlocks[i].start).replace(reLinesSplitter, "$1\n$2"); + curPos = nonBreakableBlocks[i].start; + } + if (nonBreakableBlocks[i].start <= curPos + && nonBreakableBlocks[i].end >= curPos) { // Skip non-breakable block + res += text.substring(curPos, nonBreakableBlocks[i].end); + curPos = nonBreakableBlocks[i].end; + } + } + if (curPos < text.length) + res += text.substr(curPos).replace(reLinesSplitter, "$1\n$2"); + return res; + } else { + return text.replace(reLinesSplitter, "$1\n$2"); + } + } + }); + + CodeMirror.extendMode("xml", { + commentStart: "", + wordWrapChars: [">"], + + autoFormatLineBreaks: function (text) { + var lines = text.split("\n"); + var reProcessedPortion = new RegExp("(^\\s*?<|^[^<]*?)(.+)(>\\s*?$|[^>]*?$)"); + var reOpenBrackets = new RegExp("<", "g"); + var reCloseBrackets = new RegExp("(>)([^\r\n])", "g"); + for (var i = 0; i < lines.length; i++) { + var mToProcess = lines[i].match(reProcessedPortion); + if (mToProcess != null && mToProcess.length > 3) { // The line starts with whitespaces and ends with whitespaces + lines[i] = mToProcess[1] + + mToProcess[2].replace(reOpenBrackets, "\n$&").replace(reCloseBrackets, "$1\n$2") + + mToProcess[3]; + continue; + } + } + return lines.join("\n"); + } + }); + + function localModeAt(cm, pos) { + return CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(pos).state).mode; + } + + function enumerateModesBetween(cm, line, start, end) { + var outer = cm.getMode(), text = cm.getLine(line); + if (end == null) end = text.length; + if (!outer.innerMode) return [{from: start, to: end, mode: outer}]; + var state = cm.getTokenAt({line: line, ch: start}).state; + var mode = CodeMirror.innerMode(outer, state).mode; + var found = [], stream = new CodeMirror.StringStream(text); + stream.pos = stream.start = start; + for (;;) { + outer.token(stream, state); + var curMode = CodeMirror.innerMode(outer, state).mode; + if (curMode != mode) { + var cut = stream.start; + // Crappy heuristic to deal with the fact that a change in + // mode can occur both at the end and the start of a token, + // and we don't know which it was. + if (mode.name == "xml" && text.charAt(stream.pos - 1) == ">") cut = stream.pos; + found.push({from: start, to: cut, mode: mode}); + start = cut; + mode = curMode; + } + if (stream.pos >= end) break; + stream.start = stream.pos; + } + if (start < end) found.push({from: start, to: end, mode: mode}); + return found; + } + + // Comment/uncomment the specified range + CodeMirror.defineExtension("commentRange", function (isComment, from, to) { + var curMode = localModeAt(this, from), cm = this; + this.operation(function() { + if (isComment) { // Comment range + cm.replaceRange(curMode.commentEnd, to); + cm.replaceRange(curMode.commentStart, from); + if (from.line == to.line && from.ch == to.ch) // An empty comment inserted - put cursor inside + cm.setCursor(from.line, from.ch + curMode.commentStart.length); + } else { // Uncomment range + var selText = cm.getRange(from, to); + var startIndex = selText.indexOf(curMode.commentStart); + var endIndex = selText.lastIndexOf(curMode.commentEnd); + if (startIndex > -1 && endIndex > -1 && endIndex > startIndex) { + // Take string till comment start + selText = selText.substr(0, startIndex) + // From comment start till comment end + + selText.substring(startIndex + curMode.commentStart.length, endIndex) + // From comment end till string end + + selText.substr(endIndex + curMode.commentEnd.length); + } + cm.replaceRange(selText, from, to); + } + }); + }); + + // Applies automatic mode-aware indentation to the specified range + CodeMirror.defineExtension("autoIndentRange", function (from, to) { + var cmInstance = this; + this.operation(function () { + for (var i = from.line; i <= to.line; i++) { + cmInstance.indentLine(i, "smart"); + } + }); + }); + + // Applies automatic formatting to the specified range + CodeMirror.defineExtension("autoFormatRange", function (from, to) { + var cm = this; + cm.operation(function () { + for (var cur = from.line, end = to.line; cur <= end; ++cur) { + var f = {line: cur, ch: cur == from.line ? from.ch : 0}; + var t = {line: cur, ch: cur == end ? to.ch : null}; + var modes = enumerateModesBetween(cm, cur, f.ch, t.ch), mangled = ""; + var text = cm.getRange(f, t); + for (var i = 0; i < modes.length; ++i) { + var part = modes.length > 1 ? text.slice(modes[i].from, modes[i].to) : text; + if (mangled) mangled += "\n"; + if (modes[i].mode.autoFormatLineBreaks) { + mangled += modes[i].mode.autoFormatLineBreaks(part); + } else mangled += text; + } + if (mangled != text) { + for (var count = 0, pos = mangled.indexOf("\n"); pos != -1; pos = mangled.indexOf("\n", pos + 1), ++count) {} + cm.replaceRange(mangled, f, t); + cur += count; + end += count; + } + } + for (var cur = from.line + 1; cur <= end; ++cur) + cm.indentLine(cur, "smart"); + cm.setSelection(from, cm.getCursor(false)); + }); + }); +})(); diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/index.php b/src/wp-content/plugins/revslider/js/codemirror/util/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/javascript-hint.js b/src/wp-content/plugins/revslider/js/codemirror/util/javascript-hint.js new file mode 100644 index 0000000..5fce1d9 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/javascript-hint.js @@ -0,0 +1,134 @@ +(function () { + function forEach(arr, f) { + for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]); + } + + function arrayContains(arr, item) { + if (!Array.prototype.indexOf) { + var i = arr.length; + while (i--) { + if (arr[i] === item) { + return true; + } + } + return false; + } + return arr.indexOf(item) != -1; + } + + function scriptHint(editor, keywords, getToken) { + // Find the token at the cursor + var cur = editor.getCursor(), token = getToken(editor, cur), tprop = token; + // If it's not a 'word-style' token, ignore the token. + if (!/^[\w$_]*$/.test(token.string)) { + token = tprop = {start: cur.ch, end: cur.ch, string: "", state: token.state, + className: token.string == "." ? "property" : null}; + } + // If it is a property, find out what it is a property of. + while (tprop.className == "property") { + tprop = getToken(editor, {line: cur.line, ch: tprop.start}); + if (tprop.string != ".") return; + tprop = getToken(editor, {line: cur.line, ch: tprop.start}); + if (tprop.string == ')') { + var level = 1; + do { + tprop = getToken(editor, {line: cur.line, ch: tprop.start}); + switch (tprop.string) { + case ')': level++; break; + case '(': level--; break; + default: break; + } + } while (level > 0); + tprop = getToken(editor, {line: cur.line, ch: tprop.start}); + if (tprop.className == 'variable') + tprop.className = 'function'; + else return; // no clue + } + if (!context) var context = []; + context.push(tprop); + } + return {list: getCompletions(token, context, keywords), + from: {line: cur.line, ch: token.start}, + to: {line: cur.line, ch: token.end}}; + } + + CodeMirror.javascriptHint = function(editor) { + return scriptHint(editor, javascriptKeywords, + function (e, cur) {return e.getTokenAt(cur);}); + }; + + function getCoffeeScriptToken(editor, cur) { + // This getToken, it is for coffeescript, imitates the behavior of + // getTokenAt method in javascript.js, that is, returning "property" + // type and treat "." as indepenent token. + var token = editor.getTokenAt(cur); + if (cur.ch == token.start + 1 && token.string.charAt(0) == '.') { + token.end = token.start; + token.string = '.'; + token.className = "property"; + } + else if (/^\.[\w$_]*$/.test(token.string)) { + token.className = "property"; + token.start++; + token.string = token.string.replace(/\./, ''); + } + return token; + } + + CodeMirror.coffeescriptHint = function(editor) { + return scriptHint(editor, coffeescriptKeywords, getCoffeeScriptToken); + }; + + var stringProps = ("charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight " + + "toUpperCase toLowerCase split concat match replace search").split(" "); + var arrayProps = ("length concat join splice push pop shift unshift slice reverse sort indexOf " + + "lastIndexOf every some filter forEach map reduce reduceRight ").split(" "); + var funcProps = "prototype apply call bind".split(" "); + var javascriptKeywords = ("break case catch continue debugger default delete do else false finally for function " + + "if in instanceof new null return switch throw true try typeof var void while with").split(" "); + var coffeescriptKeywords = ("and break catch class continue delete do else extends false finally for " + + "if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes").split(" "); + + function getCompletions(token, context, keywords) { + var found = [], start = token.string; + function maybeAdd(str) { + if (str.indexOf(start) == 0 && !arrayContains(found, str)) found.push(str); + } + function gatherCompletions(obj) { + if (typeof obj == "string") forEach(stringProps, maybeAdd); + else if (obj instanceof Array) forEach(arrayProps, maybeAdd); + else if (obj instanceof Function) forEach(funcProps, maybeAdd); + for (var name in obj) maybeAdd(name); + } + + if (context) { + // If this is a property, see if it belongs to some object we can + // find in the current environment. + var obj = context.pop(), base; + if (obj.className == "variable") + base = window[obj.string]; + else if (obj.className == "string") + base = ""; + else if (obj.className == "atom") + base = 1; + else if (obj.className == "function") { + if (window.jQuery != null && (obj.string == '$' || obj.string == 'jQuery') && + (typeof window.jQuery == 'function')) + base = window.jQuery(); + else if (window._ != null && (obj.string == '_') && (typeof window._ == 'function')) + base = window._(); + } + while (base != null && context.length) + base = base[context.pop().string]; + if (base != null) gatherCompletions(base); + } + else { + // If not, just look in the window object and any local scope + // (reading into JS mode internals to get at the local variables) + for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name); + gatherCompletions(window); + forEach(keywords, maybeAdd); + } + return found; + } +})(); diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/loadmode.js b/src/wp-content/plugins/revslider/js/codemirror/util/loadmode.js new file mode 100644 index 0000000..a6c56f7 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/loadmode.js @@ -0,0 +1,51 @@ +(function() { + if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js"; + + var loading = {}; + function splitCallback(cont, n) { + var countDown = n; + return function() { if (--countDown == 0) cont(); }; + } + function ensureDeps(mode, cont) { + var deps = CodeMirror.modes[mode].dependencies; + if (!deps) return cont(); + var missing = []; + for (var i = 0; i < deps.length; ++i) { + if (!CodeMirror.modes.hasOwnProperty(deps[i])) + missing.push(deps[i]); + } + if (!missing.length) return cont(); + var split = splitCallback(cont, missing.length); + for (var i = 0; i < missing.length; ++i) + CodeMirror.requireMode(missing[i], split); + } + + CodeMirror.requireMode = function(mode, cont) { + if (typeof mode != "string") mode = mode.name; + if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont); + if (loading.hasOwnProperty(mode)) return loading[mode].push(cont); + + var script = document.createElement("script"); + script.src = CodeMirror.modeURL.replace(/%N/g, mode); + var others = document.getElementsByTagName("script")[0]; + others.parentNode.insertBefore(script, others); + var list = loading[mode] = [cont]; + var count = 0, poll = setInterval(function() { + if (++count > 100) return clearInterval(poll); + if (CodeMirror.modes.hasOwnProperty(mode)) { + clearInterval(poll); + loading[mode] = null; + ensureDeps(mode, function() { + for (var i = 0; i < list.length; ++i) list[i](); + }); + } + }, 200); + }; + + CodeMirror.autoLoadMode = function(instance, mode) { + if (!CodeMirror.modes.hasOwnProperty(mode)) + CodeMirror.requireMode(mode, function() { + instance.setOption("mode", instance.getOption("mode")); + }); + }; +}()); diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/match-highlighter.js b/src/wp-content/plugins/revslider/js/codemirror/util/match-highlighter.js new file mode 100644 index 0000000..bc3dd4b --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/match-highlighter.js @@ -0,0 +1,44 @@ +// Define match-highlighter commands. Depends on searchcursor.js +// Use by attaching the following function call to the onCursorActivity event: + //myCodeMirror.matchHighlight(minChars); +// And including a special span.CodeMirror-matchhighlight css class (also optionally a separate one for .CodeMirror-focused -- see demo matchhighlighter.html) + +(function() { + var DEFAULT_MIN_CHARS = 2; + + function MatchHighlightState() { + this.marked = []; + } + function getMatchHighlightState(cm) { + return cm._matchHighlightState || (cm._matchHighlightState = new MatchHighlightState()); + } + + function clearMarks(cm) { + var state = getMatchHighlightState(cm); + for (var i = 0; i < state.marked.length; ++i) + state.marked[i].clear(); + state.marked = []; + } + + function markDocument(cm, className, minChars) { + clearMarks(cm); + minChars = (typeof minChars !== 'undefined' ? minChars : DEFAULT_MIN_CHARS); + if (cm.somethingSelected() && cm.getSelection().replace(/^\s+|\s+$/g, "").length >= minChars) { + var state = getMatchHighlightState(cm); + var query = cm.getSelection(); + cm.operation(function() { + if (cm.lineCount() < 2000) { // This is too expensive on big documents. + for (var cursor = cm.getSearchCursor(query); cursor.findNext();) { + //Only apply matchhighlight to the matches other than the one actually selected + if (!(cursor.from().line === cm.getCursor(true).line && cursor.from().ch === cm.getCursor(true).ch)) + state.marked.push(cm.markText(cursor.from(), cursor.to(), className)); + } + } + }); + } + } + + CodeMirror.defineExtension("matchHighlight", function(className, minChars) { + markDocument(this, className, minChars); + }); +})(); diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/multiplex.js b/src/wp-content/plugins/revslider/js/codemirror/util/multiplex.js new file mode 100644 index 0000000..874a16a --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/multiplex.js @@ -0,0 +1,77 @@ +CodeMirror.multiplexingMode = function(outer /*, others */) { + // Others should be {open, close, mode [, delimStyle]} objects + var others = Array.prototype.slice.call(arguments, 1); + var n_others = others.length; + + function indexOf(string, pattern, from) { + if (typeof pattern == "string") return string.indexOf(pattern, from); + var m = pattern.exec(from ? string.slice(from) : string); + return m ? m.index + from : -1; + } + + return { + startState: function() { + return { + outer: CodeMirror.startState(outer), + innerActive: null, + inner: null + }; + }, + + copyState: function(state) { + return { + outer: CodeMirror.copyState(outer, state.outer), + innerActive: state.innerActive, + inner: state.innerActive && CodeMirror.copyState(state.innerActive.mode, state.inner) + }; + }, + + token: function(stream, state) { + if (!state.innerActive) { + var cutOff = Infinity, oldContent = stream.string; + for (var i = 0; i < n_others; ++i) { + var other = others[i]; + var found = indexOf(oldContent, other.open, stream.pos); + if (found == stream.pos) { + stream.match(other.open); + state.innerActive = other; + state.inner = CodeMirror.startState(other.mode, outer.indent ? outer.indent(state.outer, "") : 0); + return other.delimStyle; + } else if (found != -1 && found < cutOff) { + cutOff = found; + } + } + if (cutOff != Infinity) stream.string = oldContent.slice(0, cutOff); + var outerToken = outer.token(stream, state.outer); + if (cutOff != Infinity) stream.string = oldContent; + return outerToken; + } else { + var curInner = state.innerActive, oldContent = stream.string; + var found = indexOf(oldContent, curInner.close, stream.pos); + if (found == stream.pos) { + stream.match(curInner.close); + state.innerActive = state.inner = null; + return curInner.delimStyle; + } + if (found > -1) stream.string = oldContent.slice(0, found); + var innerToken = curInner.mode.token(stream, state.inner); + if (found > -1) stream.string = oldContent; + var cur = stream.current(), found = cur.indexOf(curInner.close); + if (found > -1) stream.backUp(cur.length - found); + return innerToken; + } + }, + + indent: function(state, textAfter) { + var mode = state.innerActive ? state.innerActive.mode : outer; + if (!mode.indent) return CodeMirror.Pass; + return mode.indent(state.innerActive ? state.inner : state.outer, textAfter); + }, + + electricChars: outer.electricChars, + + innerMode: function(state) { + return state.inner ? {state: state.inner, mode: state.innerActive.mode} : {state: state.outer, mode: outer}; + } + }; +}; diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/overlay.js b/src/wp-content/plugins/revslider/js/codemirror/util/overlay.js new file mode 100644 index 0000000..59b5625 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/overlay.js @@ -0,0 +1,59 @@ +// Utility function that allows modes to be combined. The mode given +// as the base argument takes care of most of the normal mode +// functionality, but a second (typically simple) mode is used, which +// can override the style of text. Both modes get to parse all of the +// text, but when both assign a non-null style to a piece of code, the +// overlay wins, unless the combine argument was true, in which case +// the styles are combined. + +// overlayParser is the old, deprecated name +CodeMirror.overlayMode = CodeMirror.overlayParser = function(base, overlay, combine) { + return { + startState: function() { + return { + base: CodeMirror.startState(base), + overlay: CodeMirror.startState(overlay), + basePos: 0, baseCur: null, + overlayPos: 0, overlayCur: null + }; + }, + copyState: function(state) { + return { + base: CodeMirror.copyState(base, state.base), + overlay: CodeMirror.copyState(overlay, state.overlay), + basePos: state.basePos, baseCur: null, + overlayPos: state.overlayPos, overlayCur: null + }; + }, + + token: function(stream, state) { + if (stream.start == state.basePos) { + state.baseCur = base.token(stream, state.base); + state.basePos = stream.pos; + } + if (stream.start == state.overlayPos) { + stream.pos = stream.start; + state.overlayCur = overlay.token(stream, state.overlay); + state.overlayPos = stream.pos; + } + stream.pos = Math.min(state.basePos, state.overlayPos); + if (stream.eol()) state.basePos = state.overlayPos = 0; + + if (state.overlayCur == null) return state.baseCur; + if (state.baseCur != null && combine) return state.baseCur + " " + state.overlayCur; + else return state.overlayCur; + }, + + indent: base.indent && function(state, textAfter) { + return base.indent(state.base, textAfter); + }, + electricChars: base.electricChars, + + innerMode: function(state) { return {state: state.base, mode: base}; }, + + blankLine: function(state) { + if (base.blankLine) base.blankLine(state.base); + if (overlay.blankLine) overlay.blankLine(state.overlay); + } + }; +}; diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/pig-hint.js b/src/wp-content/plugins/revslider/js/codemirror/util/pig-hint.js new file mode 100644 index 0000000..416c0a1 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/pig-hint.js @@ -0,0 +1,123 @@ +(function () { + function forEach(arr, f) { + for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]); + } + + function arrayContains(arr, item) { + if (!Array.prototype.indexOf) { + var i = arr.length; + while (i--) { + if (arr[i] === item) { + return true; + } + } + return false; + } + return arr.indexOf(item) != -1; + } + + function scriptHint(editor, keywords, getToken) { + // Find the token at the cursor + var cur = editor.getCursor(), token = getToken(editor, cur), tprop = token; + // If it's not a 'word-style' token, ignore the token. + + if (!/^[\w$_]*$/.test(token.string)) { + token = tprop = {start: cur.ch, end: cur.ch, string: "", state: token.state, + className: token.string == ":" ? "pig-type" : null}; + } + + if (!context) var context = []; + context.push(tprop); + + var completionList = getCompletions(token, context); + completionList = completionList.sort(); + //prevent autocomplete for last word, instead show dropdown with one word + if(completionList.length == 1) { + completionList.push(" "); + } + + return {list: completionList, + from: {line: cur.line, ch: token.start}, + to: {line: cur.line, ch: token.end}}; + } + + CodeMirror.pigHint = function(editor) { + return scriptHint(editor, pigKeywordsU, function (e, cur) {return e.getTokenAt(cur);}); + }; + + function toTitleCase(str) { + return str.replace(/(?:^|\s)\w/g, function(match) { + return match.toUpperCase(); + }); + } + + var pigKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP " + + "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL " + + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE " + + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE " + + "NEQ MATCHES TRUE FALSE"; + var pigKeywordsU = pigKeywords.split(" "); + var pigKeywordsL = pigKeywords.toLowerCase().split(" "); + + var pigTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP"; + var pigTypesU = pigTypes.split(" "); + var pigTypesL = pigTypes.toLowerCase().split(" "); + + var pigBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL " + + "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS " + + "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG " + + "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN " + + "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER " + + "ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS " + + "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA " + + "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE " + + "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG " + + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER"; + var pigBuiltinsU = pigBuiltins.split(" ").join("() ").split(" "); + var pigBuiltinsL = pigBuiltins.toLowerCase().split(" ").join("() ").split(" "); + var pigBuiltinsC = ("BagSize BinStorage Bloom BuildBloom ConstantSize CubeDimensions DoubleAbs " + + "DoubleAvg DoubleBase DoubleMax DoubleMin DoubleRound DoubleSum FloatAbs FloatAvg FloatMax " + + "FloatMin FloatRound FloatSum GenericInvoker IntAbs IntAvg IntMax IntMin IntSum " + + "InvokeForDouble InvokeForFloat InvokeForInt InvokeForLong InvokeForString Invoker " + + "IsEmpty JsonLoader JsonMetadata JsonStorage LongAbs LongAvg LongMax LongMin LongSum MapSize " + + "MonitoredUDF Nondeterministic OutputSchema PigStorage PigStreaming StringConcat StringMax " + + "StringMin StringSize TextLoader TupleSize Utf8StorageConverter").split(" ").join("() ").split(" "); + + function getCompletions(token, context) { + var found = [], start = token.string; + function maybeAdd(str) { + if (str.indexOf(start) == 0 && !arrayContains(found, str)) found.push(str); + } + + function gatherCompletions(obj) { + if(obj == ":") { + forEach(pigTypesL, maybeAdd); + } + else { + forEach(pigBuiltinsU, maybeAdd); + forEach(pigBuiltinsL, maybeAdd); + forEach(pigBuiltinsC, maybeAdd); + forEach(pigTypesU, maybeAdd); + forEach(pigTypesL, maybeAdd); + forEach(pigKeywordsU, maybeAdd); + forEach(pigKeywordsL, maybeAdd); + } + } + + if (context) { + // If this is a property, see if it belongs to some object we can + // find in the current environment. + var obj = context.pop(), base; + + if (obj.className == "pig-word") + base = obj.string; + else if(obj.className == "pig-type") + base = ":" + obj.string; + + while (base != null && context.length) + base = base[context.pop().string]; + if (base != null) gatherCompletions(base); + } + return found; + } +})(); diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/runmode-standalone.js b/src/wp-content/plugins/revslider/js/codemirror/util/runmode-standalone.js new file mode 100644 index 0000000..481a46b --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/runmode-standalone.js @@ -0,0 +1,90 @@ +/* Just enough of CodeMirror to run runMode under node.js */ + +function splitLines(string){ return string.split(/\r?\n|\r/); }; + +function StringStream(string) { + this.pos = this.start = 0; + this.string = string; +} +StringStream.prototype = { + eol: function() {return this.pos >= this.string.length;}, + sol: function() {return this.pos == 0;}, + peek: function() {return this.string.charAt(this.pos) || null;}, + next: function() { + if (this.pos < this.string.length) + return this.string.charAt(this.pos++); + }, + eat: function(match) { + var ch = this.string.charAt(this.pos); + if (typeof match == "string") var ok = ch == match; + else var ok = ch && (match.test ? match.test(ch) : match(ch)); + if (ok) {++this.pos; return ch;} + }, + eatWhile: function(match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start; + }, + eatSpace: function() { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; + return this.pos > start; + }, + skipToEnd: function() {this.pos = this.string.length;}, + skipTo: function(ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true;} + }, + backUp: function(n) {this.pos -= n;}, + column: function() {return this.start;}, + indentation: function() {return 0;}, + match: function(pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + function cased(str) {return caseInsensitive ? str.toLowerCase() : str;} + if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) { + if (consume !== false) this.pos += pattern.length; + return true; + } + } + else { + var match = this.string.slice(this.pos).match(pattern); + if (match && consume !== false) this.pos += match[0].length; + return match; + } + }, + current: function(){return this.string.slice(this.start, this.pos);} +}; +exports.StringStream = StringStream; + +exports.startState = function(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; +}; + +var modes = exports.modes = {}, mimeModes = exports.mimeModes = {}; +exports.defineMode = function(name, mode) { modes[name] = mode; }; +exports.defineMIME = function(mime, spec) { mimeModes[mime] = spec; }; +exports.getMode = function(options, spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) + spec = mimeModes[spec]; + if (typeof spec == "string") + var mname = spec, config = {}; + else if (spec != null) + var mname = spec.name, config = spec; + var mfactory = modes[mname]; + if (!mfactory) throw new Error("Unknown mode: " + spec); + return mfactory(options, config || {}); +}; + +exports.runMode = function(string, modespec, callback) { + var mode = exports.getMode({indentUnit: 2}, modespec); + var lines = splitLines(string), state = exports.startState(mode); + for (var i = 0, e = lines.length; i < e; ++i) { + if (i) callback("\n"); + var stream = new exports.StringStream(lines[i]); + while (!stream.eol()) { + var style = mode.token(stream, state); + callback(stream.current(), style, i, stream.start); + stream.start = stream.pos; + } + } +}; diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/runmode.js b/src/wp-content/plugins/revslider/js/codemirror/util/runmode.js new file mode 100644 index 0000000..ea6cbdb --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/runmode.js @@ -0,0 +1,53 @@ +CodeMirror.runMode = function(string, modespec, callback, options) { + function esc(str) { + return str.replace(/[<&]/g, function(ch) { return ch == "<" ? "<" : "&"; }); + } + + var mode = CodeMirror.getMode(CodeMirror.defaults, modespec); + var isNode = callback.nodeType == 1; + var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize; + if (isNode) { + var node = callback, accum = [], col = 0; + callback = function(text, style) { + if (text == "\n") { + accum.push("
            "); + col = 0; + return; + } + var escaped = ""; + // HTML-escape and replace tabs + for (var pos = 0;;) { + var idx = text.indexOf("\t", pos); + if (idx == -1) { + escaped += esc(text.slice(pos)); + col += text.length - pos; + break; + } else { + col += idx - pos; + escaped += esc(text.slice(pos, idx)); + var size = tabSize - col % tabSize; + col += size; + for (var i = 0; i < size; ++i) escaped += " "; + pos = idx + 1; + } + } + + if (style) + accum.push("" + escaped + ""); + else + accum.push(escaped); + }; + } + var lines = CodeMirror.splitLines(string), state = CodeMirror.startState(mode); + for (var i = 0, e = lines.length; i < e; ++i) { + if (i) callback("\n"); + var stream = new CodeMirror.StringStream(lines[i]); + while (!stream.eol()) { + var style = mode.token(stream, state); + callback(stream.current(), style, i, stream.start); + stream.start = stream.pos; + } + } + if (isNode) + node.innerHTML = accum.join(""); +}; diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/search.js b/src/wp-content/plugins/revslider/js/codemirror/util/search.js new file mode 100644 index 0000000..6338c1f --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/search.js @@ -0,0 +1,118 @@ +// Define search commands. Depends on dialog.js or another +// implementation of the openDialog method. + +// Replace works a little oddly -- it will do the replace on the next +// Ctrl-G (or whatever is bound to findNext) press. You prevent a +// replace by making sure the match is no longer selected when hitting +// Ctrl-G. + +(function() { + function SearchState() { + this.posFrom = this.posTo = this.query = null; + this.marked = []; + } + function getSearchState(cm) { + return cm._searchState || (cm._searchState = new SearchState()); + } + function getSearchCursor(cm, query, pos) { + // Heuristic: if the query string is all lowercase, do a case insensitive search. + return cm.getSearchCursor(query, pos, typeof query == "string" && query == query.toLowerCase()); + } + function dialog(cm, text, shortText, f) { + if (cm.openDialog) cm.openDialog(text, f); + else f(prompt(shortText, "")); + } + function confirmDialog(cm, text, shortText, fs) { + if (cm.openConfirm) cm.openConfirm(text, fs); + else if (confirm(shortText)) fs[0](); + } + function parseQuery(query) { + var isRE = query.match(/^\/(.*)\/([a-z]*)$/); + return isRE ? new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i") : query; + } + var queryDialog = + 'Search: (Use /re/ syntax for regexp search)'; + function doSearch(cm, rev) { + var state = getSearchState(cm); + if (state.query) return findNext(cm, rev); + dialog(cm, queryDialog, "Search for:", function(query) { + cm.operation(function() { + if (!query || state.query) return; + state.query = parseQuery(query); + if (cm.lineCount() < 2000) { // This is too expensive on big documents. + for (var cursor = getSearchCursor(cm, state.query); cursor.findNext();) + state.marked.push(cm.markText(cursor.from(), cursor.to(), "CodeMirror-searching")); + } + state.posFrom = state.posTo = cm.getCursor(); + findNext(cm, rev); + }); + }); + } + function findNext(cm, rev) {cm.operation(function() { + var state = getSearchState(cm); + var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); + if (!cursor.find(rev)) { + cursor = getSearchCursor(cm, state.query, rev ? {line: cm.lineCount() - 1} : {line: 0, ch: 0}); + if (!cursor.find(rev)) return; + } + cm.setSelection(cursor.from(), cursor.to()); + state.posFrom = cursor.from(); state.posTo = cursor.to(); + });} + function clearSearch(cm) {cm.operation(function() { + var state = getSearchState(cm); + if (!state.query) return; + state.query = null; + for (var i = 0; i < state.marked.length; ++i) state.marked[i].clear(); + state.marked.length = 0; + });} + + var replaceQueryDialog = + 'Replace: (Use /re/ syntax for regexp search)'; + var replacementQueryDialog = 'With: '; + var doReplaceConfirm = "Replace? "; + function replace(cm, all) { + dialog(cm, replaceQueryDialog, "Replace:", function(query) { + if (!query) return; + query = parseQuery(query); + dialog(cm, replacementQueryDialog, "Replace with:", function(text) { + if (all) { + cm.compoundChange(function() { cm.operation(function() { + for (var cursor = getSearchCursor(cm, query); cursor.findNext();) { + if (typeof query != "string") { + var match = cm.getRange(cursor.from(), cursor.to()).match(query); + cursor.replace(text.replace(/\$(\d)/, function(w, i) {return match[i];})); + } else cursor.replace(text); + } + });}); + } else { + clearSearch(cm); + var cursor = getSearchCursor(cm, query, cm.getCursor()); + function advance() { + var start = cursor.from(), match; + if (!(match = cursor.findNext())) { + cursor = getSearchCursor(cm, query); + if (!(match = cursor.findNext()) || + (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return; + } + cm.setSelection(cursor.from(), cursor.to()); + confirmDialog(cm, doReplaceConfirm, "Replace?", + [function() {doReplace(match);}, advance]); + } + function doReplace(match) { + cursor.replace(typeof query == "string" ? text : + text.replace(/\$(\d)/, function(w, i) {return match[i];})); + advance(); + } + advance(); + } + }); + }); + } + + CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);}; + CodeMirror.commands.findNext = doSearch; + CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);}; + CodeMirror.commands.clearSearch = clearSearch; + CodeMirror.commands.replace = replace; + CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);}; +})(); diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/searchcursor.js b/src/wp-content/plugins/revslider/js/codemirror/util/searchcursor.js new file mode 100644 index 0000000..a41d538 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/searchcursor.js @@ -0,0 +1,119 @@ +(function(){ + function SearchCursor(cm, query, pos, caseFold) { + this.atOccurrence = false; this.cm = cm; + if (caseFold == null && typeof query == "string") caseFold = false; + + pos = pos ? cm.clipPos(pos) : {line: 0, ch: 0}; + this.pos = {from: pos, to: pos}; + + // The matches method is filled in based on the type of query. + // It takes a position and a direction, and returns an object + // describing the next occurrence of the query, or null if no + // more matches were found. + if (typeof query != "string") { // Regexp match + if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "ig" : "g"); + this.matches = function(reverse, pos) { + if (reverse) { + query.lastIndex = 0; + var line = cm.getLine(pos.line).slice(0, pos.ch), match = query.exec(line), start = 0; + while (match) { + start += match.index + 1; + line = line.slice(start); + query.lastIndex = 0; + var newmatch = query.exec(line); + if (newmatch) match = newmatch; + else break; + } + start--; + } else { + query.lastIndex = pos.ch; + var line = cm.getLine(pos.line), match = query.exec(line), + start = match && match.index; + } + if (match) + return {from: {line: pos.line, ch: start}, + to: {line: pos.line, ch: start + match[0].length}, + match: match}; + }; + } else { // String query + if (caseFold) query = query.toLowerCase(); + var fold = caseFold ? function(str){return str.toLowerCase();} : function(str){return str;}; + var target = query.split("\n"); + // Different methods for single-line and multi-line queries + if (target.length == 1) + this.matches = function(reverse, pos) { + var line = fold(cm.getLine(pos.line)), len = query.length, match; + if (reverse ? (pos.ch >= len && (match = line.lastIndexOf(query, pos.ch - len)) != -1) + : (match = line.indexOf(query, pos.ch)) != -1) + return {from: {line: pos.line, ch: match}, + to: {line: pos.line, ch: match + len}}; + }; + else + this.matches = function(reverse, pos) { + var ln = pos.line, idx = (reverse ? target.length - 1 : 0), match = target[idx], line = fold(cm.getLine(ln)); + var offsetA = (reverse ? line.indexOf(match) + match.length : line.lastIndexOf(match)); + if (reverse ? offsetA >= pos.ch || offsetA != match.length + : offsetA <= pos.ch || offsetA != line.length - match.length) + return; + for (;;) { + if (reverse ? !ln : ln == cm.lineCount() - 1) return; + line = fold(cm.getLine(ln += reverse ? -1 : 1)); + match = target[reverse ? --idx : ++idx]; + if (idx > 0 && idx < target.length - 1) { + if (line != match) return; + else continue; + } + var offsetB = (reverse ? line.lastIndexOf(match) : line.indexOf(match) + match.length); + if (reverse ? offsetB != line.length - match.length : offsetB != match.length) + return; + var start = {line: pos.line, ch: offsetA}, end = {line: ln, ch: offsetB}; + return {from: reverse ? end : start, to: reverse ? start : end}; + } + }; + } + } + + SearchCursor.prototype = { + findNext: function() {return this.find(false);}, + findPrevious: function() {return this.find(true);}, + + find: function(reverse) { + var self = this, pos = this.cm.clipPos(reverse ? this.pos.from : this.pos.to); + function savePosAndFail(line) { + var pos = {line: line, ch: 0}; + self.pos = {from: pos, to: pos}; + self.atOccurrence = false; + return false; + } + + for (;;) { + if (this.pos = this.matches(reverse, pos)) { + this.atOccurrence = true; + return this.pos.match || true; + } + if (reverse) { + if (!pos.line) return savePosAndFail(0); + pos = {line: pos.line-1, ch: this.cm.getLine(pos.line-1).length}; + } + else { + var maxLine = this.cm.lineCount(); + if (pos.line == maxLine - 1) return savePosAndFail(maxLine); + pos = {line: pos.line+1, ch: 0}; + } + } + }, + + from: function() {if (this.atOccurrence) return this.pos.from;}, + to: function() {if (this.atOccurrence) return this.pos.to;}, + + replace: function(newText) { + var self = this; + if (this.atOccurrence) + self.pos.to = this.cm.replaceRange(newText, self.pos.from, self.pos.to); + } + }; + + CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) { + return new SearchCursor(this, query, pos, caseFold); + }); +})(); diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/simple-hint.css b/src/wp-content/plugins/revslider/js/codemirror/util/simple-hint.css new file mode 100644 index 0000000..1872bde --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/simple-hint.css @@ -0,0 +1,16 @@ +.CodeMirror-completions { + position: absolute; + z-index: 10; + overflow: hidden; + -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); + -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); + box-shadow: 2px 3px 5px rgba(0,0,0,.2); +} +.CodeMirror-completions select { + background: #fafafa; + outline: none; + border: none; + padding: 0; + margin: 0; + font-family: monospace; +} diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/simple-hint.js b/src/wp-content/plugins/revslider/js/codemirror/util/simple-hint.js new file mode 100644 index 0000000..0c2532f --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/simple-hint.js @@ -0,0 +1,102 @@ +(function() { + CodeMirror.simpleHint = function(editor, getHints, givenOptions) { + // Determine effective options based on given values and defaults. + var options = {}, defaults = CodeMirror.simpleHint.defaults; + for (var opt in defaults) + if (defaults.hasOwnProperty(opt)) + options[opt] = (givenOptions && givenOptions.hasOwnProperty(opt) ? givenOptions : defaults)[opt]; + + function collectHints(previousToken) { + // We want a single cursor position. + if (editor.somethingSelected()) return; + + var tempToken = editor.getTokenAt(editor.getCursor()); + + // Don't show completions if token has changed and the option is set. + if (options.closeOnTokenChange && previousToken != null && + (tempToken.start != previousToken.start || tempToken.className != previousToken.className)) { + return; + } + + var result = getHints(editor); + if (!result || !result.list.length) return; + var completions = result.list; + function insert(str) { + editor.replaceRange(str, result.from, result.to); + } + // When there is only one completion, use it directly. + if (options.completeSingle && completions.length == 1) { + insert(completions[0]); + return true; + } + + // Build the select widget + var complete = document.createElement("div"); + complete.className = "CodeMirror-completions"; + var sel = complete.appendChild(document.createElement("select")); + // Opera doesn't move the selection when pressing up/down in a + // multi-select, but it does properly support the size property on + // single-selects, so no multi-select is necessary. + if (!window.opera) sel.multiple = true; + for (var i = 0; i < completions.length; ++i) { + var opt = sel.appendChild(document.createElement("option")); + opt.appendChild(document.createTextNode(completions[i])); + } + sel.firstChild.selected = true; + sel.size = Math.min(10, completions.length); + var pos = options.alignWithWord ? editor.charCoords(result.from) : editor.cursorCoords(); + complete.style.left = pos.x + "px"; + complete.style.top = pos.yBot + "px"; + document.body.appendChild(complete); + // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor. + var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth); + if(winW - pos.x < sel.clientWidth) + complete.style.left = (pos.x - sel.clientWidth) + "px"; + // Hack to hide the scrollbar. + if (completions.length <= 10) + complete.style.width = (sel.clientWidth - 1) + "px"; + + var done = false; + function close() { + if (done) return; + done = true; + complete.parentNode.removeChild(complete); + } + function pick() { + insert(completions[sel.selectedIndex]); + close(); + setTimeout(function(){editor.focus();}, 50); + } + CodeMirror.connect(sel, "blur", close); + CodeMirror.connect(sel, "keydown", function(event) { + var code = event.keyCode; + // Enter + if (code == 13) {CodeMirror.e_stop(event); pick();} + // Escape + else if (code == 27) {CodeMirror.e_stop(event); close(); editor.focus();} + else if (code != 38 && code != 40 && code != 33 && code != 34 && !CodeMirror.isModifierKey(event)) { + close(); editor.focus(); + // Pass the event to the CodeMirror instance so that it can handle things like backspace properly. + editor.triggerOnKeyDown(event); + // Don't show completions if the code is backspace and the option is set. + if (!options.closeOnBackspace || code != 8) { + setTimeout(function(){collectHints(tempToken);}, 50); + } + } + }); + CodeMirror.connect(sel, "dblclick", pick); + + sel.focus(); + // Opera sometimes ignores focusing a freshly created node + if (window.opera) setTimeout(function(){if (!done) sel.focus();}, 100); + return true; + } + return collectHints(); + }; + CodeMirror.simpleHint.defaults = { + closeOnBackspace: true, + closeOnTokenChange: false, + completeSingle: true, + alignWithWord: true + }; +})(); diff --git a/src/wp-content/plugins/revslider/js/codemirror/util/xml-hint.js b/src/wp-content/plugins/revslider/js/codemirror/util/xml-hint.js new file mode 100644 index 0000000..f478556 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/codemirror/util/xml-hint.js @@ -0,0 +1,137 @@ + +(function() { + + CodeMirror.xmlHints = []; + + CodeMirror.xmlHint = function(cm, simbol) { + + if(simbol.length > 0) { + var cursor = cm.getCursor(); + cm.replaceSelection(simbol); + cursor = {line: cursor.line, ch: cursor.ch + 1}; + cm.setCursor(cursor); + } + + // dirty hack for simple-hint to receive getHint event on space + var getTokenAt = editor.getTokenAt; + + editor.getTokenAt = function() { return 'disabled'; }; + CodeMirror.simpleHint(cm, getHint); + + editor.getTokenAt = getTokenAt; + }; + + var getHint = function(cm) { + + var cursor = cm.getCursor(); + + if (cursor.ch > 0) { + + var text = cm.getRange({line: 0, ch: 0}, cursor); + var typed = ''; + var simbol = ''; + for(var i = text.length - 1; i >= 0; i--) { + if(text[i] == ' ' || text[i] == '<') { + simbol = text[i]; + break; + } + else { + typed = text[i] + typed; + } + } + + text = text.slice(0, text.length - typed.length); + + var path = getActiveElement(cm, text) + simbol; + var hints = CodeMirror.xmlHints[path]; + + if(typeof hints === 'undefined') + hints = ['']; + else { + hints = hints.slice(0); + for (var i = hints.length - 1; i >= 0; i--) { + if(hints[i].indexOf(typed) != 0) + hints.splice(i, 1); + } + } + + return { + list: hints, + from: { line: cursor.line, ch: cursor.ch - typed.length }, + to: cursor + }; + }; + }; + + var getActiveElement = function(codeMirror, text) { + + var element = ''; + + if(text.length >= 0) { + + var regex = new RegExp('<([^!?][^\\s/>]*).*?>', 'g'); + + var matches = []; + var match; + while ((match = regex.exec(text)) != null) { + matches.push({ + tag: match[1], + selfclose: (match[0].slice(match[0].length - 2) === '/>') + }); + } + + for (var i = matches.length - 1, skip = 0; i >= 0; i--) { + + var item = matches[i]; + + if (item.tag[0] == '/') + { + skip++; + } + else if (item.selfclose == false) + { + if (skip > 0) + { + skip--; + } + else + { + element = '<' + item.tag + '>' + element; + } + } + } + + element += getOpenTag(text); + } + + return element; + }; + + var getOpenTag = function(text) { + + var open = text.lastIndexOf('<'); + var close = text.lastIndexOf('>'); + + if (close < open) + { + text = text.slice(open); + + if(text != '<') { + + var space = text.indexOf(' '); + if(space < 0) + space = text.indexOf('\t'); + if(space < 0) + space = text.indexOf('\n'); + + if (space < 0) + space = text.length; + + return text.slice(0, space); + } + } + + return ''; + }; + +})(); diff --git a/src/wp-content/plugins/revslider/js/css_editor.js b/src/wp-content/plugins/revslider/js/css_editor.js new file mode 100644 index 0000000..1ec666c --- /dev/null +++ b/src/wp-content/plugins/revslider/js/css_editor.js @@ -0,0 +1,1163 @@ +//ver 1.0 + +var UniteCssEditorRev = new function(){ + + var t = this; + var initCssStyles = []; + var cssPreClass = '.tp-caption'; + var cssCurrentEdit = ''; + var cssCurrentType = 'params'; + var curActiveStyles = new Object; + var curFullClass = new Object; + var cssExpertEditor = false; + var urlCssCaptions = null; + var isHoverActive = false; + var showExpertWarning = false; + var g_codemirrorCssExpert = null; + + //====================================================== + // Init Functions + //====================================================== + + /** + * set init css styles array + */ + t.setInitCssStyles = function(jsonClasses){ + initCssStyles = jQuery.parseJSON(jsonClasses); + } + + /** + * set captions url for refreshing when needed + */ + t.setCssCaptionsUrl = function(url){ + urlCssCaptions = url; + } + + /** + * init the css editor + */ + t.init = function(){ + initAccordion(); + initEditorElements(); + initEditorDialog(); + } + + /** + * init dialog actions + */ + var initEditorDialog = function(){ + + jQuery("#button_edit_css").click(function(){ + if(!UniteLayersRev.getLayerGeneralParamsStatus()) return false; //false if fields are disabled + if(jQuery.trim(jQuery('#layer_caption').val()).length == 0) return false; //check if classname is empty + + jQuery("#css_preview").attr('style', ''); //clear the preview + + jQuery("#css_editor_wrap").dialog({ + modal:true, + resizable:false, + title:'Currently editing: '+jQuery('#layer_caption').val(), + minWidth:700, + minHeight:500, + closeOnEscape:true, + open:function () { + jQuery(this).closest(".ui-dialog") + .find(".ui-button").each(function(i) { + var cl; + if (i==0) cl="revgray"; + if (i==1) cl="revgreen"; + if (i==2) cl="revred"; + if (i==3) cl="revred"; + jQuery(this).addClass(cl).addClass("button-primary").addClass("rev-uibuttons"); + }) + }, + buttons:{ + "Save/Change":function(){ + UniteAdminRev.setErrorMessageID("dialog_error_message"); + var data; + jQuery('#current-class-handle').text(cssCurrentEdit); + jQuery('input[name="css_save_as"]').val(cssCurrentEdit); + + //curActiveStyles update + setActiveStylesFromExample(); + updateCurFullClass(); + + jQuery("#dialog-change-css").dialog({ + modal: true, + buttons: { + 'Save as': function() { + jQuery("#dialog-change-css-save-as").dialog({ + modal: true, + buttons: { + 'Save as new': function(){ + var id = checkIfHandleExists(jQuery('input[name="css_save_as"]').val()); + var update = true; + if(id !== false){ + update = false; + if(confirm("Class already exists, overwrite?")){ + updateStylesInDb(jQuery('input[name="css_save_as"]').val(), id); + update = true; + } + }else{ + updateStylesInDb(jQuery('input[name="css_save_as"]').val(), false); + jQuery('#layer_caption').val(jQuery('input[name="css_save_as"]').val()); + UniteLayersRev.updateLayerFromFields(); + } + if(update){ + jQuery("#dialog-change-css").dialog("close"); + jQuery(this).dialog("close"); + jQuery("#css_editor_wrap").dialog("close"); + } + } + } + }); + }, + Save: function() { + var id = checkIfHandleExists(jQuery('input[name="layer_caption"]').val()); + if(id !== false){ + if(confirm("Really overwrite Class?")){ + updateStylesInDb(jQuery('input[name="layer_caption"]').val(), id); + jQuery(this).dialog("close"); + jQuery("#css_editor_wrap").dialog("close"); + } + }else{ + updateStylesInDb(jQuery('input[name="layer_caption"]').val(), false); + UniteLayersRev.updateLayerFromFields(); + jQuery(this).dialog("close"); + jQuery("#css_editor_wrap").dialog("close"); + } + } + } + }); + }, + "Cancel":function(){ + jQuery(this).dialog("close"); + }, + "Delete":function(){ + if(confirm("Really delete Class '"+jQuery('#layer_caption').val()+"'? This can't be undone!")){ + var id = checkIfHandleExists(jQuery('#layer_caption').val()); + if(id !== false){ + deleteStylesInDb(jQuery('#layer_caption').val(), id); + }else{ + alert("This class does not exist."); + } + + jQuery(this).dialog("close"); + jQuery("#css_editor_wrap").dialog("close"); + } + } + } + }); + + jQuery("#reset-background-color").click(function(){ + jQuery('input[name="css_background-color"]').val('transparent'); + jQuery('input[name="css_background-color"]').css('background-color', ''); + jQuery('input[name="css_background-color"]').css('color', '#000'); + t.setCssPreviewLive(); + }); + + jQuery("#reset-border-color").click(function(){ + jQuery('input[name="css_border-color-show"]').css('background-color', ''); + jQuery('input[name="css_border-color-show"]').css('color', '#000'); + jQuery('input[name="css_border-color-show"]').val(' '); + jQuery('input[name="css_border-color"]').val(' '); + t.setCssPreviewLive(); + }); + + resetTabsToIdle(); //reset tabs to idle + setFullClass(); //fill the object for editing + setActiveStyles(cssCurrentType); //we start with params + + resetNoviceFields(); //reset the novice fields + setNoviceFields(); //set novice fields from cssActiveStyles + + setCssPreview(); //fill the preview with styles + resetSubSlider(); //reset padding and corner sliders + + setHoverActive(); //check if cssFullClass has hover enabled + + t.setAccordion(); //fill depending on current active accordion + + cssCurrentEdit = jQuery('input[name="layer_caption"]').val(); + + jQuery('.css-edit-enable').hide(); + jQuery('#css_editor_allow').text(''); + + }); //edit css button click + } + + /** + * register events and functions + */ + var initEditorElements = function(){ + + jQuery("#change-type-idle").click(function(){ + jQuery('.css-edit-enable').hide(); + jQuery('#css_editor_allow').text(''); + + setActiveStylesFromExample(); //get Styles from example + updateCurFullClass(); //update curFullClass with curActiveStyles + + cssCurrentType = 'params'; + setActiveStyles(cssCurrentType); //fill curActiveStyles + + updateEditorFromActiveStyles(); + + jQuery(".change-type").removeClass('selected'); + jQuery(this).addClass('selected'); + }); + + jQuery("#change-type-hover").click(function(){ + jQuery('.css-edit-enable').show(); + jQuery('#css_editor_allow').text(':hover'); + + setActiveStylesFromExample(); //get Styles from example + updateCurFullClass(); //update curFullClass with curActiveStyles + + cssCurrentType = 'hover'; + setActiveStyles(cssCurrentType, true); //fill curActiveStyles + + updateEditorFromActiveStyles(); + + jQuery(".change-type").removeClass('selected'); + jQuery(this).addClass('selected'); + }); + + jQuery('.css_editor-disable-inputs').click(function(){ + if(confirm("Making changes to these settings will probably overwrite advanced settings. Continue?") == true) hideCssExpertWarning(); + }); + + jQuery("#font-size-slider").slider({ + range: "min", + min: 6, + max: 150, + slide: function(event, ui) { + jQuery('input[name="css_font-size"]').val(ui.value+'px'); + jQuery(this).children(".ui-slider-handle").text(ui.value+'px'); + t.setCssPreviewLive(); + } + }); + + jQuery("#line-height-slider").slider({ + range: "min", + min: 6, + max: 180, + slide: function(event, ui) { + jQuery('input[name="css_line-height"]').val(ui.value+'px'); + jQuery(this).children(".ui-slider-handle").text(ui.value+'px'); + t.setCssPreviewLive(); + } + }); + + jQuery("#font-weight-slider").slider({ + range: "min", + min: 100, + max: 900, + step: 100, + slide: function(event, ui) { + jQuery('input[name="css_font-weight"]').val(ui.value); + jQuery(this).children(".ui-slider-handle").text(ui.value); + t.setCssPreviewLive(); + } + }); + + jQuery("#border-width-slider").slider({ + range: "min", + min: 0, + max: 25, + slide: function(event, ui) { + jQuery('input[name="css_border-width"]').val(ui.value+'px'); + jQuery(this).children(".ui-slider-handle").text(ui.value+'px'); + t.setCssPreviewLive(); + } + }); + + jQuery("#background-transparency-slider").slider({ + range: "min", + min: 0, + max: 100, + slide: function(event, ui) { + jQuery('input[name="css_background-transparency"]').val(ui.value / 100); + jQuery(this).children(".ui-slider-handle").text(ui.value+'%'); + t.setCssPreviewLive(); + } + }); + + jQuery(".subslider").each(function() { + + var pslider = jQuery(this); + var psliderpa = pslider.parent().find('.sub-input'); + + psliderpa.on("focus",function() { + jQuery(".subslider").each(function() { + jQuery(this).css({visibility:"hidden"}); + jQuery(this).parent().removeClass("activated_padder") + }) + pslider.css({visibility:'visible'}); + psliderpa.parent().addClass("activated_padder"); + }); + + psliderpa.on("change",function() { + pslider.slider("value",psliderpa.val()); + pslider.children(".ui-slider-handle").text(psliderpa.val()+"px"); + }); + + pslider. slider({ + range: "min", + min: 0, + max: 150, + slide: function(event, ui) { + psliderpa.val(ui.value); + jQuery(this).children(".ui-slider-handle").text(ui.value+"px"); + t.setCssPreviewLive(); + } + }); + + // PREPARING THE SLIDER + pslider.slider("value",psliderpa.val()); + pslider.children(".ui-slider-handle").text(psliderpa.val()+"px"); + pslider.css({visibility:"hidden"}); + }); + + jQuery('.css_edit_novice').on('change', function() { + t.setCssPreviewLive(); + }); + + } + + /** + * init the accordion + */ + var initAccordion = function(){ + jQuery("#css-editor-accordion").accordion({ + heightStyle: "content", + activate: function(event, ui){ + t.setAccordion(); + } + }); + + } + + //====================================================== + // General Functions + //====================================================== + + /** + * check for hiding the expert warning + */ + jQuery('.css_editor-disable-inputs').click(function(){ + if(confirm("Making changes to these settings will probably overwrite advanced settings. Continue?") == true) hideCssExpertWarning(); + }); + + /** + * reset tab to idle state + */ + var resetTabsToIdle = function(){ + cssCurrentType = 'params'; + jQuery(".change-type").removeClass('selected'); + jQuery("#change-type-idle").addClass('selected'); + } + + /** + * fill temp class with init class if found + */ + var setFullClass = function(){ + curFullClass = new Object; + for(var key in initCssStyles){ + if(initCssStyles[key]['handle'] == cssPreClass+'.'+jQuery("#layer_caption").val()){ + curFullClass = jQuery.extend({},initCssStyles[key]); + break; + } + } + } + + /** + * set current active styles object + */ + var setActiveStyles = function(setToType, fallbackToIdle){ + curActiveStyles = new Object; + + if(typeof curFullClass[setToType] === 'object' && !jQuery.isEmptyObject(curFullClass[setToType])){ + curActiveStyles = curFullClass[setToType]; + }else if(typeof fallbackToIdle !== 'undefined'){ //fall back to idle if i.e. hover does not exist + curActiveStyles = curFullClass['params']; + } + checkBackgroundTransparency(); + }; + + /** + * fill curFullClass with curActiveStyles + */ + var updateCurFullClass = function(){ + curFullClass[cssCurrentType] = curActiveStyles; + }; + + /** + * show the expert warning, novice could overwrite expert + */ + var showCssExpertWarning = function(){ + jQuery('.css_editor-disable-inputs').show(); + } + + /** + * hide the expert warning, novice could overwrite expert + */ + var hideCssExpertWarning = function(){ + jQuery('.css_editor-disable-inputs').hide(); + showExpertWarning = false; + } + + /** + * reset the subslider (padding and corner sliders) + */ + var resetSubSlider = function(){ + jQuery(".subslider").each(function() { + + var pslider = jQuery(this); + var psliderpa = pslider.parent().find('.sub-input'); + + //PREPARING THE SLIDER + pslider.slider("value",psliderpa.val()); + pslider.children(".ui-slider-handle").text(psliderpa.val()+"px"); + pslider.css({visibility:"hidden"}); + }); + }; + + /** + * check if hover is enabled/disabled and set the novice param for it + */ + var setHoverActive = function(){ + isHoverActive = false; + jQuery('input[name="css_allow"]').attr('checked', false); + + if(typeof curFullClass['settings'] === 'object' && !jQuery.isEmptyObject(curFullClass['settings'])){ + if(typeof curFullClass['settings']['hover'] != 'undefined' && (curFullClass['settings']['hover'] == 'true' || curFullClass['settings']['hover'] === true)){ + isHoverActive = true; + jQuery('input[name="css_allow"]').attr('checked', true); + } + } + } + + /** + * check for background-transparency value + */ + var checkBackgroundTransparency = function(){ + if(!jQuery.isEmptyObject(curActiveStyles)){ + if('background-color' in curActiveStyles){ //check for transparency and put it into background-transparency + var transparency = UniteAdminRev.getTransparencyFromRgba(curActiveStyles['background-color']); + if(transparency !== false) + curActiveStyles['background-transparency'] = transparency; + else + delete curActiveStyles['background-transparency']; + } + } + }; + + /** + * set the accordion entrys + */ + t.setAccordion = function(){ + if(g_codemirrorCssExpert != null) g_codemirrorCssExpert.refresh(); + cssExpertEditor = (jQuery("#css-editor-accordion").accordion("option").active == 0) ? false : true; + if(cssExpertEditor) t.setCssStylesExpert(); + if(!cssExpertEditor) t.setCssStylesNovice(); + } + + /** + * creates the padding & corner in 1 line + */ + var filterCssPadCor = function(id){ + var retObj = []; + var i = 0; + var found = 0; + jQuery(id).each(function(){ + retObj[i] = jQuery(this).val(); + if(retObj[i] != '') found++; + i++; + }); + + switch(found){ + case 0: + return false; //empty, no entrys found + break; + case 1: + for(key in retObj){ + if(retObj[key] != '') return retObj[key]+'px'; + } + break; + case 2: + var checkVal = 0; + for(key in retObj){ + if(retObj[key] != '') checkVal+= parseInt(key); + } + + switch(checkVal){ + case 1: // 1 1 x x + return retObj[0]+'px '+retObj[1]+'px'; + break; + case 2: // 1 x 1 x + if(retObj[0] == retObj[2]) + return retObj[0]+'px 0'; + else + return retObj[0]+'px 0 '+retObj[2]+'px'; + break; + case 3: // 1 x x 1 || x 1 1 x + if(retObj[0] != '') + return retObj[0]+'px '+retObj[3]+'px'; + else + return retObj[2]+'px '+retObj[1]+'px'; + break; + case 4: // x 1 x 1 + if(retObj[1] == retObj[3]) + return '0 '+retObj[1]+'px '; + else + return '0 '+retObj[1]+'px 0 '+retObj[3]+'px'; + case 5: // x x 1 1 + return retObj[2]+'px '+retObj[3]+'px'; + default: + return false; + } + break; + case 3: + if(retObj[3] != ''){ + for(key in retObj){ + if(retObj[key] == '') retObj[key] = '0'; + } + } + return retObj[0]+'px '+retObj[1]+'px '+retObj[2]+'px'; + break; + case 4: + default: + return retObj[0]+'px '+retObj[1]+'px '+retObj[2]+'px '+retObj[3]+'px'; + break; + } + } + + /** + * reset all novice fields + */ + var resetNoviceFields = function(){ + jQuery('input[name="css_font-size"]').val(''); + jQuery('input[name="css_line-height"]').val(''); + jQuery('input[name="css_font-weight"]').val(''); + jQuery('input[name="css_font-family"]').val(''); + jQuery('input[name="css_font-style"]').attr('checked', false); + jQuery('input[name="css_color"]').css('background-color', ''); + jQuery('input[name="css_color"]').val(' '); + jQuery('input[name="css_background-transparency"]').val('1'); + jQuery('input[name="css_background-color"]').val('transparent'); + jQuery('input[name="css_background-color"]').css('background-color', ''); + jQuery('input[name="css_border-color"]').val(' '); + jQuery('input[name="css_border-color-show"]').val(' '); + jQuery('input[name="css_border-color-show"]').css('background-color', ''); + jQuery('input[name="css_border-width"]').val(''); + jQuery('select[name="css_border-style"]').val('none'); + jQuery('select[name="css_text-decoration"]').val('none'); + jQuery('input[name="css_padding[]"]').each(function(){jQuery(this).val('');}); + jQuery('input[name="css_border-radius[]"]').each(function(){jQuery(this).val('');}); + jQuery("#font-size-slider").slider("value", '8'); + jQuery("#font-size-slider").children(".ui-slider-handle").text('8px'); + jQuery("#line-height-slider").slider("value", '0'); + jQuery("#line-height-slider").children(".ui-slider-handle").text('10px'); + jQuery("#font-weight-slider").slider("value", '400'); + jQuery("#font-weight-slider").children(".ui-slider-handle").text('400'); + jQuery("#border-width-slider").slider("value", '0'); + jQuery("#border-width-slider").children(".ui-slider-handle").text('0px'); + jQuery("#background-transparency-slider").slider("value", '100'); + jQuery("#background-transparency-slider").children(".ui-slider-handle").text('100%'); + } + + /** + * set the novice fields + */ + var setNoviceFields = function(){ + showExpertWarning = false; + + if('font-size' in curActiveStyles){ + jQuery('input[name="css_font-size"]').val(curActiveStyles['font-size']); + jQuery("#font-size-slider").slider("value", curActiveStyles['font-size'].replace('px', '')); + jQuery("#font-size-slider").children(".ui-slider-handle").text(curActiveStyles['font-size']); + } + if('line-height' in curActiveStyles){ + jQuery('input[name="css_line-height"]').val(curActiveStyles['line-height']); + jQuery("#line-height-slider").slider("value", curActiveStyles['line-height'].replace('px', '')); + jQuery("#line-height-slider").children(".ui-slider-handle").text(curActiveStyles['line-height']); + } + if('font-weight' in curActiveStyles){ + jQuery('input[name="css_font-weight"]').val(curActiveStyles['font-weight']); + jQuery("#font-weight-slider").slider("value", curActiveStyles['font-weight']); + jQuery("#font-weight-slider").children(".ui-slider-handle").text(curActiveStyles['font-weight']); + } + if('border-width' in curActiveStyles){ + if(curActiveStyles['border-width'] !== 0){ + jQuery('input[name="css_border-width"]').val(curActiveStyles['border-width']); + + if(curActiveStyles['border-width'].split(' ').length > 1){ + var firstBorderWidth = curActiveStyles['border-width'].split(' ')[0]; + jQuery("#border-width-slider").slider("value", firstBorderWidth.replace('px', '')); + jQuery("#border-width-slider").children(".ui-slider-handle").text(firstBorderWidth); + + showExpertWarning = true; + }else{ + jQuery("#border-width-slider").slider("value", curActiveStyles['border-width'].replace('px', '')); + jQuery("#border-width-slider").children(".ui-slider-handle").text(curActiveStyles['border-width']); + } + + } + } + if('background-transparency' in curActiveStyles){ + if(curActiveStyles['border-width'] !== 0){ + jQuery('input[name="css_background-transparency"]').val(curActiveStyles['background-transparency']); + jQuery("#background-transparency-slider").slider("value", curActiveStyles['background-transparency'] * 100); + jQuery("#background-transparency-slider").children(".ui-slider-handle").text(Math.floor(curActiveStyles['background-transparency'] * 100) +'%'); + } + }else if('background-color' in curActiveStyles){ + var bgc_length = curActiveStyles['background-color'].split(','); + if(bgc_length.length == 4){ + var transparency = jQuery.trim(bgc_length[3].replace(')', '')); + curActiveStyles['background-transparency'] = transparency; + jQuery('input[name="css_background-transparency"]').val(transparency); + jQuery("#background-transparency-slider").slider("value", transparency * 100); + jQuery("#background-transparency-slider").children(".ui-slider-handle").text(Math.floor(transparency * 100) +'%'); + } + } + + if('font-family' in curActiveStyles) jQuery('input[name="css_font-family"]').val(curActiveStyles['font-family']); + if('color' in curActiveStyles) jQuery('input[name="css_color"]').val(UniteAdminRev.rgb2hex(curActiveStyles['color'])); + if('background-color' in curActiveStyles)jQuery('input[name="css_background-color"]').val(UniteAdminRev.rgb2hex(curActiveStyles['background-color'])); + + jQuery('input[name="css_font-style"]').attr('checked', false); + if('font-style' in curActiveStyles){ + if(curActiveStyles['font-style'] == 'italic') jQuery('input[name="css_font-style"]').attr('checked', true); + } + + if('text-decoration' in curActiveStyles){ + jQuery('select[name="css_text-decoration"]').val(curActiveStyles['text-decoration']); + } + + + if('border-color' in curActiveStyles){ + var borderColor = UniteAdminRev.rgb2hex(curActiveStyles['border-color']); + if(borderColor.split(' ').length > 1){ + var firstBorderColor = borderColor.split(' ')[0]; + jQuery('input[name="css_border-color"]').val(borderColor); + jQuery('input[name="css_border-color-show"]').val(firstBorderColor); + + showExpertWarning = true; + }else{ + jQuery('input[name="css_border-color"]').val(borderColor); + jQuery('input[name="css_border-color-show"]').val(borderColor); + } + } + + if('border-style' in curActiveStyles){ + if(curActiveStyles['border-style'].split(' ').length > 1){ + var firstBorderStyle = curActiveStyles['border-style'].split(' ')[0]; + jQuery('select[name="css_border-style"]').val(firstBorderStyle); + + showExpertWarning = true; + }else{ + jQuery('select[name="css_border-style"]').val(curActiveStyles['border-style']); + } + } + + jQuery('input[name="css_color"]').trigger('change'); + jQuery('input[name="css_background-color"]').trigger('change'); + jQuery('input[name="css_border-color-show"]').trigger('change'); + + if('padding' in curActiveStyles){ + + var paddings = UniteAdminRev.parseCssMultiAttribute(curActiveStyles['padding']); + + var i = 0; + jQuery('input[name="css_padding[]"]').each(function(){ + if(paddings !== false) + jQuery(this).val(paddings[i].replace('px', '')); + else + jQuery(this).val(''); + + i++; + }); + } + if('padding-top' in curActiveStyles) jQuery('input[name="css_padding[]"]:eq(0)').val(curActiveStyles['padding-top'].replace('px', '')); + if('padding-right' in curActiveStyles) jQuery('input[name="css_padding[]"]:eq(1)').val(curActiveStyles['padding-right'].replace('px', '')); + if('padding-bottom' in curActiveStyles) jQuery('input[name="css_padding[]"]:eq(2)').val(curActiveStyles['padding-bottom'].replace('px', '')); + if('padding-left' in curActiveStyles) jQuery('input[name="css_padding[]"]:eq(3)').val(curActiveStyles['padding-left'].replace('px', '')); + + + if('border-radius' in curActiveStyles){ + var corners = UniteAdminRev.parseCssMultiAttribute(curActiveStyles['border-radius']); + var i = 0; + jQuery('input[name="css_border-radius[]"]').each(function(){ + if(corners !== false) + jQuery(this).val(corners[i].replace('px', '')); + else + jQuery(this).val(''); + + i++; + }); + } + if('border-top-left-radius' in curActiveStyles) jQuery('input[name="css_border-radius[]"]:eq(0)').val(curActiveStyles['border-top-left-radius'].replace('px', '')); + if('border-top-right-radius' in curActiveStyles) jQuery('input[name="css_border-radius[]"]:eq(1)').val(curActiveStyles['border-top-right-radius'].replace('px', '')); + if('border-bottom-right-radius' in curActiveStyles) jQuery('input[name="css_border-radius[]"]:eq(2)').val(curActiveStyles['border-bottom-right-radius'].replace('px', '')); + if('border-bottom-left-radius' in curActiveStyles) jQuery('input[name="css_border-radius[]"]:eq(3)').val(curActiveStyles['border-bottom-left-radius'].replace('px', '')); + + if(showExpertWarning){ + showCssExpertWarning(); + }else{ + hideCssExpertWarning(); + } + } + + /** + * set the css example preview in dialog + */ + var setCssPreview = function(){ + jQuery('#css_preview').attr('styles', ''); //clear all styles from preview + + if(typeof curActiveStyles === 'object' && !jQuery.isEmptyObject(curActiveStyles)){ + for(var attr in curActiveStyles){ + if(attr == 'position') continue; //ignore position absolute + jQuery('#css_preview').css(attr, curActiveStyles[attr]); + } + } + } + + + /** + * set the css example preview in dialog on resize + */ + t.setCssPreviewLive = function(){ + if(cssExpertEditor){ + setStylesFromExpert(); + }else{ + //add novice styles + jQuery('#css_preview').attr('style', ''); + var borderColor = (jQuery('input[name="css_border-color"]').val() != ' ') ? jQuery('input[name="css_border-color"]').val() : ''; + jQuery('#css_preview').css('font-size', jQuery('input[name="css_font-size"]').val()); + jQuery('#css_preview').css('line-height', jQuery('input[name="css_line-height"]').val()); + jQuery('#css_preview').css('font-weight', jQuery('input[name="css_font-weight"]').val()); + jQuery('#css_preview').css('border-width', jQuery('input[name="css_border-width"]').val()); + jQuery('#css_preview').css('font-family', jQuery('input[name="css_font-family"]').val()); + jQuery('#css_preview').css('color', jQuery('input[name="css_color"]').val()); + jQuery('#css_preview').css('border-color', borderColor); + jQuery('#css_preview').css('border-style', jQuery('select[name="css_border-style"]').val()); + var italic = (jQuery('input[name="css_font-style"]').is(':checked')) ? 'italic' : ''; + jQuery('#css_preview').css('font-style', italic); + jQuery('#css_preview').css('text-decoration', jQuery('select[name="css_text-decoration"]').val()); + + if(jQuery('input[name="css_background-color"]').val() != 'transparent'){ + var rgb = UniteAdminRev.convertHexToRGB(jQuery('input[name="css_background-color"]').val()); + + var transparency = (jQuery('input[name="css_background-transparency"]').val() != '') ? transparency = jQuery('input[name="css_background-transparency"]').val() : 1; + jQuery('input[name="css_background-transparency"]').val(transparency); + jQuery('#css_preview').css('background-color', 'rgba('+rgb[0]+', '+rgb[1]+', '+rgb[2]+', '+transparency+')'); + }else{ + jQuery('#css_preview').css('background-color', jQuery('input[name="css_background-color"]').val()); + } + + var padding = ''; + jQuery('input[name="css_padding[]"]').each(function(){ + if(padding != '') padding += ' '; + padding += (jQuery(this).val() == '') ? '' : parseInt(jQuery(this).val())+'px'; + }); + jQuery('#css_preview').css('padding', padding); + + var corners = ''; + jQuery('input[name="css_border-radius[]"]').each(function(){ + if(corners != '') corners += ' '; + corners += (jQuery(this).val() == '') ? '' : parseInt(jQuery(this).val())+'px'; + }); + jQuery('#css_preview').css('border-radius', corners); + + isHoverActive = (jQuery('input[name="css_allow"]').is(':checked')) ? true : false; + + setPreviewFromExpert(); + return false; + } + + setActiveStylesFromExample(); + updateCurFullClass(); + } + + /** + * set styles from expert editor + */ + var setStylesFromExpert = function(){ + var cssData = g_codemirrorCssExpert.getValue(); + while(cssData.indexOf("/*") !== -1){ + if(cssData.indexOf("*/") === -1) return false; + var start = cssData.indexOf("/*"); + var end = cssData.indexOf("*/") + 2; + cssData = cssData.replace(cssData.substr(start, end - start), ''); + } + + //delete all before the } + if(cssData.indexOf('{') > -1){ + var temp = cssData.substr(0,cssData.indexOf('{')); + cssData = cssData.replace(temp, ''); + } + + //delete all after the } + if(cssData.indexOf('}') > -1){ + cssData = cssData.substr(0,cssData.indexOf('}')); + } + + cssData = cssData.replace(/{/g, '').replace(/}/g, '').replace(/ /g, '').replace(/\n/g, ''); + + jQuery('#css_preview').attr('style', cssData); + if(jQuery('#css_preview').css('position') == 'absolute') jQuery('#css_preview').css('position', ''); + + } + + /** + * create curActiveStyles object depending on novice/expert mode + */ + var setActiveStylesFromExample = function(){ + + curActiveStyles = new Object; + var rawStyles = jQuery('#css_preview').attr('style').split(';'); + + for(key in rawStyles){ + var temp = rawStyles[key].split(':'); + if(jQuery.trim(temp[0]) == '' || jQuery.trim(temp[1]) == '') continue; + if(temp[0].toLowerCase().indexOf("border") >= 0) continue; //all borders later + + curActiveStyles[jQuery.trim(temp[0])] = jQuery.trim(temp[1]); + } + + //handle borders + if(jQuery('#css_preview').css('borderTopLeftRadius') != '0px' || jQuery('#css_preview').css('borderTopRightRadius') != '0px' || jQuery('#css_preview').css('borderBottomRightRadius') != '0px' || jQuery('#css_preview').css('borderBottomLeftRadius') != '0px'){ + curActiveStyles['border-radius'] = Math.round(jQuery('#css_preview').css('borderTopLeftRadius').replace('px', ''))+'px '+Math.round(jQuery('#css_preview').css('borderTopRightRadius').replace('px', ''))+'px '+Math.round(jQuery('#css_preview').css('borderBottomRightRadius').replace('px', ''))+'px '+Math.round(jQuery('#css_preview').css('borderBottomLeftRadius').replace('px', ''))+'px'; + } + + if(jQuery('#css_preview').css('borderTopWidth') == jQuery('#css_preview').css('borderRightWidth') && + jQuery('#css_preview').css('borderTopWidth') == jQuery('#css_preview').css('borderBottomWidth') && + jQuery('#css_preview').css('borderTopWidth') == jQuery('#css_preview').css('borderLeftWidth')){ + curActiveStyles['border-width'] = jQuery('#css_preview').css('borderTopWidth'); + }else{ + curActiveStyles['border-width'] = jQuery('#css_preview').css('borderTopWidth')+' '+jQuery('#css_preview').css('borderRightWidth')+' '+jQuery('#css_preview').css('borderBottomWidth')+' '+jQuery('#css_preview').css('borderLeftWidth'); + } + + if(jQuery('#css_preview').css('borderTopColor') == jQuery('#css_preview').css('borderRightColor') && + jQuery('#css_preview').css('borderTopColor') == jQuery('#css_preview').css('borderBottomColor') && + jQuery('#css_preview').css('borderTopColor') == jQuery('#css_preview').css('borderLeftColor')){ + curActiveStyles['border-color'] = jQuery('#css_preview').css('borderTopColor'); + }else{ + curActiveStyles['border-color'] = jQuery('#css_preview').css('borderTopColor')+' '+jQuery('#css_preview').css('borderRightColor')+' '+jQuery('#css_preview').css('borderBottomColor')+' '+jQuery('#css_preview').css('borderLeftColor'); + } + + if(jQuery('#css_preview').css('borderTopStyle') == jQuery('#css_preview').css('borderBottomStyle') && + jQuery('#css_preview').css('borderTopStyle') == jQuery('#css_preview').css('borderLeftStyle') && + jQuery('#css_preview').css('borderTopStyle') == jQuery('#css_preview').css('borderRightStyle')){ + curActiveStyles['border-style'] = jQuery('#css_preview').css('borderTopStyle'); + }else{ + curActiveStyles['border-style'] = jQuery('#css_preview').css('borderTopStyle')+' '+jQuery('#css_preview').css('borderRightStyle')+' '+jQuery('#css_preview').css('borderBottomStyle')+' '+jQuery('#css_preview').css('borderLeftStyle'); + } + + } + + /** + * set the params from expert + */ + var setPreviewFromExpert = function(){ + if(typeof curActiveStyles !== 'object' || jQuery.isEmptyObject(curActiveStyles)) return false; + + for(var key in curActiveStyles){ + switch(key){ //all but default are values that exist in novice mode, ignore them + case 'position': + case 'padding-top': + case 'padding-right': + case 'padding-bottom': + case 'padding-left': + case 'border-top-left-radius': + case 'border-top-right-radius': + case 'border-bottom-right-radius': + case 'border-bottom-left-radius': + case 'font-size': + case 'line-height': + case 'font-weight': + case 'border-width': + case 'font-family': + case 'color': + case 'background-color': + case 'border-style': + case 'background-transparency': + case 'padding': + case 'border-radius': + case 'border-color': + case 'font-style': + case 'text-decoration': + break; + default: + jQuery('#css_preview').css(key, curActiveStyles[key]); + } + } + } + + + /** + * insert the styles into the expert editor + */ + t.setCssStylesExpert = function(ignoreExample){ + jQuery("#textarea_edit_expert").val(''); + + var cssData = "{\n"; + + if(typeof ignoreExample === 'undefined') updateActiveStylesWithNovice(); + + for(var attr in curActiveStyles){ + if(jQuery.trim(curActiveStyles[attr]) == '') continue; + if(attr == 'background-color' && curActiveStyles[attr] !== 'transparent'){ + if(curActiveStyles[attr].indexOf('rgb') == -1){ + var rgb = UniteAdminRev.convertHexToRGB(curActiveStyles[attr]); + cssData += ' '+attr+': rgb('+rgb[0]+', '+rgb[1]+', '+rgb[2]+')'+";\n"; + cssData += ' '+attr+': rgba('+rgb[0]+', '+rgb[1]+', '+rgb[2]+', '+curActiveStyles['background-transparency']+')'+";\n"; + }else{ + cssData += ' '+attr+': '+curActiveStyles[attr]+";\n"; + } + }else{ + if(attr == 'background-transparency') continue; + cssData += ' '+attr+': '+curActiveStyles[attr]+";\n"; + } + } + + cssData += "}"; + + if(g_codemirrorCssExpert != null){ + g_codemirrorCssExpert.setValue(cssData); + }else{ + jQuery("#textarea_edit_expert").val(cssData); + t.setCodeMirrorEditor(); + } + g_codemirrorCssExpert.refresh(); + } + + /** + * set temp object and call novice update + */ + t.setCssStylesNovice = function(ignoreExample){ + resetNoviceFields(); //reset the novice fields + + if(typeof ignoreExample === 'undefined') setActiveStylesFromExample()//set styles from example + + setNoviceFields(); //set novice fields from cssActiveStyles + + setCssPreview(); //fill the preview with styles + //t.setCssPreviewLive(); + } + + /** + * update the curActiveStyles from Novice fields + */ + var updateActiveStylesWithNovice = function(){ + //remove obsolete padding and corner! + delete curActiveStyles['padding-top']; + delete curActiveStyles['padding-right']; + delete curActiveStyles['padding-bottom']; + delete curActiveStyles['padding-left']; + delete curActiveStyles['border-top-left-radius']; + delete curActiveStyles['border-top-right-radius']; + delete curActiveStyles['border-bottom-right-radius']; + delete curActiveStyles['border-bottom-left-radius']; + + var borderColor = (jQuery('input[name="css_border-color"]').val() != ' ') ? jQuery('input[name="css_border-color"]').val() : null; + + curActiveStyles['font-size'] = jQuery('input[name="css_font-size"]').val(); + curActiveStyles['line-height'] = jQuery('input[name="css_line-height"]').val(); + curActiveStyles['font-weight'] = jQuery('input[name="css_font-weight"]').val(); + curActiveStyles['font-family'] = jQuery('input[name="css_font-family"]').val(); + curActiveStyles['color'] = jQuery('input[name="css_color"]').val(); + curActiveStyles['background-color'] = jQuery('input[name="css_background-color"]').val(); + curActiveStyles['background-transparency'] = jQuery('input[name="css_background-transparency"]').val(); + curActiveStyles['font-style'] = (jQuery('input[name="css_font-style"]').is(':checked')) ? 'italic' : ''; + curActiveStyles['text-decoration'] = jQuery('select[name="css_text-decoration"]').val(); + + if(curActiveStyles['font-style'] == '') delete curActiveStyles['font-style']; + + //don`t update if expert warning is shown + if(!showExpertWarning){ + curActiveStyles['border-width'] = jQuery('input[name="css_border-width"]').val(); + curActiveStyles['border-style'] = jQuery('select[name="css_border-style"]').val(); + curActiveStyles['border-radius'] = filterCssPadCor('input[name="css_border-radius[]"]'); + if(borderColor != null) + curActiveStyles['border-color'] = borderColor; + else + delete curActiveStyles['border-color']; + + } + + curActiveStyles['padding'] = filterCssPadCor('input[name="css_padding[]"]'); + + if(curActiveStyles['padding'] === false) delete curActiveStyles['padding']; + if(curActiveStyles['border-radius'] === false) delete curActiveStyles['border-radius']; + } + + /** + * set the expert/novice from curActiveStyles + */ + var updateEditorFromActiveStyles = function(){ + cssExpertEditor = (jQuery("#css-editor-accordion").accordion("option").active == 0) ? false : true; + if(cssExpertEditor) t.setCssStylesExpert(true); + if(!cssExpertEditor) t.setCssStylesNovice(true); + } + + /** + * delete class from db if exists + */ + var deleteStylesInDb = function(handle, id){ + UniteAdminRev.setErrorMessageID("dialog_error_message"); + + UniteAdminRev.ajaxRequest("delete_captions_css",handle,function(response){ + jQuery("#dialog_success_message").show().html(response.message); + + //update html select (got as "data" from response) + updateCaptionsInput(response.arrCaptions); + }); + + updateInitCssStyles(handle, id, true); + + jQuery('#layer_caption').val(''); + + curFullClass = new Object; + curActiveStyles = new Object; + cssCurrentEdit = ''; + + //refresh styles + setTimeout(function() { + if(urlCssCaptions) + UniteAdminRev.loadCssFile(urlCssCaptions,"rs-plugin-captions-css"); + },1000); + } + + /** + * update styles for class/create new class + */ + var updateStylesInDb = function(handle, id){ + + UniteAdminRev.setErrorMessageID("dialog_error_message"); + + var temp = new Object; + jQuery.each(curFullClass, function(i, val){ + var newObj = jQuery.extend(true, {}, val); + temp[i] = newObj; + }); + + temp['handle'] = handle; + temp['settings'] = new Object; + temp['settings']['hover'] = isHoverActive; + + + if(id === false){ //create new + //insert in database + UniteAdminRev.ajaxRequest("insert_captions_css",temp,function(response){ + jQuery("#dialog_success_message").show().html(response.message); + + //update html select (got as "data" from response) + updateCaptionsInput(response.arrCaptions); + }); + + }else{ //update existing + + //update to database + UniteAdminRev.ajaxRequest("update_captions_css",temp,function(response){ + jQuery("#dialog_success_message").show().html(response.message); + + //update html select (got as "data" from response) + updateCaptionsInput(response.arrCaptions); + }); + + } + updateInitCssStyles(handle, id); + + curFullClass = new Object; + curActiveStyles = new Object; + cssCurrentEdit = ''; + + //refresh styles + setTimeout(function() { + if(urlCssCaptions) + UniteAdminRev.loadCssFile(urlCssCaptions,"rs-plugin-captions-css"); + },1000); + + } + + + /** + * check if class exists and return index + */ + var checkIfHandleExists = function(handle){ + for(var key in initCssStyles){ + if(initCssStyles[key]['handle'] == cssPreClass+'.'+handle){ + return key; + } + } + return false; + } + + /** + * update the select html, set selected option, and update events. + */ + var updateCaptionsInput = function(arrCaptions){ + jQuery("#layer_caption").autocomplete("option","source",arrCaptions); + } + + /** + * update css object with new values + */ + var updateInitCssStyles = function(handle, id, doDelete){ + var key = false; + + for(var i in initCssStyles){ + if(initCssStyles[i]['handle'] == cssPreClass+'.'+handle){ + key = i; + break; + } + } + + if(typeof doDelete !== 'undefined'){ + delete initCssStyles[key]; + return true; + } + + if(key === false) key = initCssStyles.length; + + if(id === false){ + id = initCssStyles.length; + initCssStyles[key] = new Object; + initCssStyles[key]['id'] = id; + initCssStyles[key]['handle'] = cssPreClass+'.'+handle; + initCssStyles[key]['params'] = []; + initCssStyles[key]['hover'] = []; + initCssStyles[key]['settings'] = []; + } + + initCssStyles[key]['params'] = curFullClass['params']; + initCssStyles[key]['hover'] = curFullClass['hover']; + initCssStyles[key]['settings'] = new Object; + initCssStyles[key]['settings']['hover'] = isHoverActive; + + return initCssStyles[key]; + } + + + //====================================================== + // Codemirror Functions + //====================================================== + + /** + * set code mirror editor + */ + t.setCodeMirrorEditor = function(){ + g_codemirrorCssExpert = CodeMirror.fromTextArea(document.getElementById("textarea_edit_expert"), { + onChange: function(){ if(cssExpertEditor){ t.setCssPreviewLive(); }}, + lineNumbers: true + }); + + } + + //====================================================== + // End of Codemirror Functions + //====================================================== + +} \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/js/dropdownchecklist/index.php b/src/wp-content/plugins/revslider/js/dropdownchecklist/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/js/dropdownchecklist/ui.dropdownchecklist-1.4-min.js b/src/wp-content/plugins/revslider/js/dropdownchecklist/ui.dropdownchecklist-1.4-min.js new file mode 100644 index 0000000..168a4c1 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/dropdownchecklist/ui.dropdownchecklist-1.4-min.js @@ -0,0 +1 @@ +(function(a){a.widget("ui.dropdownchecklist",{version:function(){alert("DropDownCheckList v1.4")},_appendDropContainer:function(b){var d=a("
            ");d.addClass("ui-dropdownchecklist ui-dropdownchecklist-dropcontainer-wrapper");d.addClass("ui-widget");d.attr("id",b.attr("id")+"-ddw");d.css({position:"absolute",left:"-33000px",top:"-33000px"});var c=a("
            ");c.addClass("ui-dropdownchecklist-dropcontainer ui-widget-content");c.css("overflow-y","auto");d.append(c);d.insertAfter(b);d.isOpen=false;return d},_isDropDownKeyShortcut:function(c,b){return c.altKey&&(a.ui.keyCode.DOWN==b)},_isDropDownCloseKey:function(c,b){return(a.ui.keyCode.ESCAPE==b)||(a.ui.keyCode.ENTER==b)},_keyFocusChange:function(f,i,c){var g=a(":focusable");var d=g.index(f);if(d>=0){d+=i;if(c){var e=this.dropWrapper.find("input:not([disabled])");var b=g.index(e.get(0));var h=g.index(e.get(e.length-1));if(dh){d=b}}}g.get(d).focus()}},_handleKeyboard:function(d){var b=this;var c=(d.keyCode||d.which);if(!b.dropWrapper.isOpen&&b._isDropDownKeyShortcut(d,c)){d.stopImmediatePropagation();b._toggleDropContainer(true)}else{if(b.dropWrapper.isOpen&&b._isDropDownCloseKey(d,c)){d.stopImmediatePropagation();b._toggleDropContainer(false);b.controlSelector.focus()}else{if(b.dropWrapper.isOpen&&(d.target.type=="checkbox")&&((c==a.ui.keyCode.DOWN)||(c==a.ui.keyCode.UP))){d.stopImmediatePropagation();b._keyFocusChange(d.target,(c==a.ui.keyCode.DOWN)?1:-1,true)}else{if(b.dropWrapper.isOpen&&(c==a.ui.keyCode.TAB)){}}}}},_handleFocus:function(f,d,b){var c=this;if(b&&!c.dropWrapper.isOpen){f.stopImmediatePropagation();if(d){c.controlSelector.addClass("ui-state-hover");if(a.ui.dropdownchecklist.gLastOpened!=null){a.ui.dropdownchecklist.gLastOpened._toggleDropContainer(false)}}else{c.controlSelector.removeClass("ui-state-hover")}}else{if(!b&&!d){if(f!=null){f.stopImmediatePropagation()}c.controlSelector.removeClass("ui-state-hover");c._toggleDropContainer(false)}}},_cancelBlur:function(c){var b=this;if(b.blurringItem!=null){clearTimeout(b.blurringItem);b.blurringItem=null}},_appendControl:function(){var j=this,c=this.sourceSelect,k=this.options;var b=a("");b.addClass("ui-dropdownchecklist ui-dropdownchecklist-selector-wrapper ui-widget");b.css({display:"inline-block",cursor:"default",overflow:"hidden"});var f=c.attr("id");if((f==null)||(f=="")){f="ddcl-"+a.ui.dropdownchecklist.gIDCounter++}else{f="ddcl-"+f}b.attr("id",f);var h=a("");h.addClass("ui-dropdownchecklist-selector ui-state-default");h.css({display:"inline-block",overflow:"hidden","white-space":"nowrap"});var d=c.attr("tabIndex");if(d==null){d=0}else{d=parseInt(d);if(d<0){d=0}}h.attr("tabIndex",d);h.keyup(function(l){j._handleKeyboard(l)});h.focus(function(l){j._handleFocus(l,true,true)});h.blur(function(l){j._handleFocus(l,false,true)});b.append(h);if(k.icon!=null){var i=(k.icon.placement==null)?"left":k.icon.placement;var g=a("
            ");g.addClass("ui-icon");g.addClass((k.icon.toOpen!=null)?k.icon.toOpen:"ui-icon-triangle-1-e");g.css({"float":i});h.append(g)}var e=a("");e.addClass("ui-dropdownchecklist-text");e.css({display:"inline-block","white-space":"nowrap",overflow:"hidden"});h.append(e);b.hover(function(){if(!j.disabled){h.addClass("ui-state-hover")}},function(){if(!j.disabled){h.removeClass("ui-state-hover")}});b.click(function(l){if(!j.disabled){l.stopImmediatePropagation();j._toggleDropContainer(!j.dropWrapper.isOpen)}});b.insertAfter(c);a(window).resize(function(){if(!j.disabled&&j.dropWrapper.isOpen){j._toggleDropContainer(true)}});return b},_createDropItem:function(g,f,o,l,q,h,e,k){var m=this,c=this.options,d=this.sourceSelect,p=this.controlWrapper;var t=a("
            ");t.addClass("ui-dropdownchecklist-item");t.css({"white-space":"nowrap"});var r=h?' checked="checked"':"";var j=e?' class="inactive"':' class="active"';var b=p.attr("id");var n=b+"-i"+g;var s;if(m.isMultiple){s=a('')}else{s=a('')}s=s.attr("index",g).val(o);t.append(s);var i=a("
            ");e.addClass("ui-dropdownchecklist-group ui-widget-header");if(d){e.addClass("ui-state-disabled")}e.css({"white-space":"nowrap"});var c=a("");c.addClass("ui-dropdownchecklist-text");c.css({cursor:"default"});c.text(f);e.append(c);e.click(function(h){var g=a(this);h.stopImmediatePropagation();g.focus();b._cancelBlur()});e.focus(function(h){var g=a(this);h.stopImmediatePropagation()});return e},_createCloseItem:function(e){var b=this;var d=a("
            ");d.addClass("ui-state-default ui-dropdownchecklist-close ui-dropdownchecklist-item");d.css({"white-space":"nowrap","text-align":"right"});var c=a("");c.addClass("ui-dropdownchecklist-text");c.css({cursor:"default"});c.html(e);d.append(c);d.click(function(g){var f=a(this);g.stopImmediatePropagation();f.focus();b._toggleDropContainer(false)});d.hover(function(f){a(this).addClass("ui-state-hover")},function(f){a(this).removeClass("ui-state-hover")});d.focus(function(g){var f=a(this);g.stopImmediatePropagation()});return d},_appendItems:function(){var d=this,f=this.options,h=this.sourceSelect,g=this.dropWrapper;var b=g.find(".ui-dropdownchecklist-dropcontainer");h.children().each(function(j){var k=a(this);if(k.is("option")){d._appendOption(k,b,j,false,false)}else{if(k.is("optgroup")){var l=k.prop("disabled");var n=k.attr("label");if(n!=""){var m=d._createGroupItem(n,l);b.append(m)}d._appendOptions(k,b,j,true,l)}}});if(f.explicitClose!=null){var i=d._createCloseItem(f.explicitClose);b.append(i)}var c=b.outerWidth();var e=b.outerHeight();return{width:c,height:e}},_appendOptions:function(g,d,f,c,b){var e=this;g.children("option").each(function(h){var i=a(this);var j=(f+"."+h);e._appendOption(i,d,j,c,b)})},_appendOption:function(g,b,h,d,n){var m=this;var k=g.html();if((k!=null)&&(k!="")){var j=g.val();var i=g.attr("style");var f=g.prop("selected");var e=(n||g.prop("disabled"));var c=m.controlSelector.attr("tabindex");var l=m._createDropItem(h,c,j,k,i,f,e,d);b.append(l)}},_syncSelected:function(h){var i=this,l=this.options,b=this.sourceSelect,d=this.dropWrapper;var c=b.get(0).options;var g=d.find("input.active");if(l.firstItemChecksAll=="exclusive"){if((h==null)&&a(c[0]).prop("selected")){g.prop("checked",false);a(g[0]).prop("checked",true)}else{if((h!=null)&&(h.attr("index")==0)){var e=h.prop("checked");g.prop("checked",false);a(g[0]).prop("checked",e)}else{var f=true;var k=null;g.each(function(m){if(m>0){var n=a(this).prop("checked");if(!n){f=false}}else{k=a(this)}});if(k!=null){if(f){g.prop("checked",false)}k.prop("checked",f)}}}}else{if(l.firstItemChecksAll){if((h==null)&&a(c[0]).prop("selected")){g.prop("checked",true)}else{if((h!=null)&&(h.attr("index")==0)){g.prop("checked",h.prop("checked"))}else{var f=true;var k=null;g.each(function(m){if(m>0){var n=a(this).prop("checked");if(!n){f=false}}else{k=a(this)}});if(k!=null){k.prop("checked",f)}}}}}var j=0;g=d.find("input");g.each(function(n){var m=a(c[n+j]);var o=m.html();if((o==null)||(o=="")){j+=1;m=a(c[n+j])}m.prop("selected",a(this).prop("checked"))});i._updateControlText();if(h!=null){h.focus()}},_sourceSelectChangeHandler:function(c){var b=this,d=this.dropWrapper;d.find("input").val(b.sourceSelect.val());b._updateControlText()},_updateControlText:function(){var c=this,g=this.sourceSelect,d=this.options,f=this.controlWrapper;var h=g.find("option:first");var b=g.find("option");var i=c._formatText(b,d.firstItemChecksAll,h);var e=f.find(".ui-dropdownchecklist-text");e.html(i);e.attr("title",e.text())},_formatText:function(b,d,e){var f;if(a.isFunction(this.options.textFormatFunction)){try{f=this.options.textFormatFunction(b)}catch(c){alert("textFormatFunction failed: "+c)}}else{if(d&&(e!=null)&&e.prop("selected")){f=e.html()}else{f="";b.each(function(){if(a(this).prop("selected")){if(f!=""){f+=", "}var g=a(this).attr("style");var h=a("");h.html(a(this).html());if(g==null){f+=h.html()}else{h.attr("style",g);f+=a("").append(h).html()}}});if(f==""){f=(this.options.emptyText!=null)?this.options.emptyText:" "}}}return f},_toggleDropContainer:function(e){var c=this;var d=function(f){if((f!=null)&&f.dropWrapper.isOpen){f.dropWrapper.isOpen=false;a.ui.dropdownchecklist.gLastOpened=null;var h=f.options;f.dropWrapper.css({top:"-33000px",left:"-33000px"});var g=f.controlSelector;g.removeClass("ui-state-active");g.removeClass("ui-state-hover");var j=f.controlWrapper.find(".ui-icon");if(j.length>0){j.removeClass((h.icon.toClose!=null)?h.icon.toClose:"ui-icon-triangle-1-s");j.addClass((h.icon.toOpen!=null)?h.icon.toOpen:"ui-icon-triangle-1-e")}a(document).unbind("click",d);f.dropWrapper.find("input.active").prop("disabled",true);if(a.isFunction(h.onComplete)){try{h.onComplete.call(f,f.sourceSelect.get(0))}catch(i){alert("callback failed: "+i)}}}};var b=function(n){if(!n.dropWrapper.isOpen){n.dropWrapper.isOpen=true;a.ui.dropdownchecklist.gLastOpened=n;var g=n.options;if((g.positionHow==null)||(g.positionHow=="absolute")){n.dropWrapper.css({position:"absolute",top:n.controlWrapper.position().top+n.controlWrapper.outerHeight()+"px",left:n.controlWrapper.position().left+"px"})}else{if(g.positionHow=="relative"){n.dropWrapper.css({position:"relative",top:"0px",left:"0px"})}}var m=0;if(g.zIndex==null){var l=n.controlWrapper.parents().map(function(){var o=a(this).css("z-index");return isNaN(o)?0:o}).get();var i=Math.max.apply(Math,l);if(i>=0){m=i+1}}else{m=parseInt(g.zIndex)}if(m>0){n.dropWrapper.css({"z-index":m})}var j=n.controlSelector;j.addClass("ui-state-active");j.removeClass("ui-state-hover");var h=n.controlWrapper.find(".ui-icon");if(h.length>0){h.removeClass((g.icon.toOpen!=null)?g.icon.toOpen:"ui-icon-triangle-1-e");h.addClass((g.icon.toClose!=null)?g.icon.toClose:"ui-icon-triangle-1-s")}a(document).bind("click",function(o){d(n)});var f=n.dropWrapper.find("input.active");f.prop("disabled",false);var k=f.get(0);if(k!=null){k.focus()}}};if(e){d(a.ui.dropdownchecklist.gLastOpened);b(c)}else{d(c)}},_setSize:function(b){var m=this.options,f=this.dropWrapper,l=this.controlWrapper;var k=b.width;if(m.width!=null){k=parseInt(m.width)}else{if(m.minWidth!=null){var c=parseInt(m.minWidth);if(k0)&&(b.height>j))?j:b.height;var e=b.width"); + // the container is wrapped in a div + wrapper.addClass("ui-dropdownchecklist ui-dropdownchecklist-dropcontainer-wrapper"); + wrapper.addClass("ui-widget"); + // assign an id + wrapper.attr("id",controlItem.attr("id") + '-ddw'); + // initially positioned way off screen to prevent it from displaying + // NOTE absolute position to enable width/height calculation + wrapper.css({ position: 'absolute', left: "-33000px", top: "-33000px" }); + + var container = $("
            "); // the actual container + container.addClass("ui-dropdownchecklist-dropcontainer ui-widget-content"); + container.css("overflow-y", "auto"); + wrapper.append(container); + + // insert the dropdown after the master control to try to keep the tab order intact + // if you just add it to the end, tabbing out of the drop down takes focus off the page + // @todo 22Sept2010 - check if size calculation is thrown off if the parent of the + // selector is hidden. We may need to add it to the end of the document here, + // calculate the size, and then move it back into proper position??? + //$(document.body).append(wrapper); + wrapper.insertAfter(controlItem); + + // flag that tells if the drop container is shown or not + wrapper.isOpen = false; + return wrapper; + }, + // Look for browser standard 'open' on a closed selector + _isDropDownKeyShortcut: function(e,keycode) { + return e.altKey && ($.ui.keyCode.DOWN == keycode);// Alt + Down Arrow + }, + // Look for key that will tell us to close the open dropdown + _isDropDownCloseKey: function(e,keycode) { + return ($.ui.keyCode.ESCAPE == keycode) || ($.ui.keyCode.ENTER == keycode); + }, + // Handler to change the active focus based on a keystroke, moving some count of + // items from the element that has the current focus + _keyFocusChange: function(target,delta,limitToItems) { + // Find item with current focus + var focusables = $(":focusable"); + var index = focusables.index(target); + if ( index >= 0 ) { + index += delta; + if ( limitToItems ) { + // Bound change to list of input elements + var allCheckboxes = this.dropWrapper.find("input:not([disabled])"); + var firstIndex = focusables.index(allCheckboxes.get(0)); + var lastIndex = focusables.index(allCheckboxes.get(allCheckboxes.length-1)); + if ( index < firstIndex ) { + index = lastIndex; + } else if ( index > lastIndex ) { + index = firstIndex; + } + } + focusables.get(index).focus(); + } + }, + // Look for navigation, open, close (wired to keyup) + _handleKeyboard: function(e) { + var self = this; + var keyCode = (e.keyCode || e.which); + if (!self.dropWrapper.isOpen && self._isDropDownKeyShortcut(e, keyCode)) { + // Key command to open the dropdown + e.stopImmediatePropagation(); + self._toggleDropContainer(true); + } else if (self.dropWrapper.isOpen && self._isDropDownCloseKey(e, keyCode)) { + // Key command to close the dropdown (but we retain focus in the control) + e.stopImmediatePropagation(); + self._toggleDropContainer(false); + self.controlSelector.focus(); + } else if (self.dropWrapper.isOpen + && (e.target.type == 'checkbox') + && ((keyCode == $.ui.keyCode.DOWN) || (keyCode == $.ui.keyCode.UP)) ) { + // Up/Down to cycle throught the open items + e.stopImmediatePropagation(); + self._keyFocusChange(e.target, (keyCode == $.ui.keyCode.DOWN) ? 1 : -1, true); + } else if (self.dropWrapper.isOpen && (keyCode == $.ui.keyCode.TAB) ) { + // I wanted to adjust normal 'tab' processing here, but research indicates + // that TAB key processing is NOT a cancelable event. You have to use a timer + // hack to pull the focus back to where you want it after browser tab + // processing completes. Not going to work for us. + //e.stopImmediatePropagation(); + //self._keyFocusChange(e.target, (e.shiftKey) ? -1 : 1, true); + } + }, + // Look for change of focus + _handleFocus: function(e,focusIn,forDropdown) { + var self = this; + if (forDropdown && !self.dropWrapper.isOpen) { + // if the focus changes when the control is NOT open, mark it to show where the focus is/is not + e.stopImmediatePropagation(); + if (focusIn) { + self.controlSelector.addClass("ui-state-hover"); + if ($.ui.dropdownchecklist.gLastOpened != null) { + $.ui.dropdownchecklist.gLastOpened._toggleDropContainer( false ); + } + } else { + self.controlSelector.removeClass("ui-state-hover"); + } + } else if (!forDropdown && !focusIn) { + // The dropdown is open, and an item (NOT the dropdown) has just lost the focus. + // we really need a reliable method to see who has the focus as we process the blur, + // but that mechanism does not seem to exist. Instead we rely on a delay before + // posting the blur, with a focus event cancelling it before the delay expires. + if ( e != null ) { e.stopImmediatePropagation(); } + self.controlSelector.removeClass("ui-state-hover"); + self._toggleDropContainer( false ); + } + }, + // Clear the pending change of focus, which keeps us 'in' the control + _cancelBlur: function(e) { + var self = this; + if (self.blurringItem != null) { + clearTimeout(self.blurringItem); + self.blurringItem = null; + } + }, + // Creates the control that will replace the source select and appends it to the document + // The control resembles a regular select with single selection + _appendControl: function() { + var self = this, sourceSelect = this.sourceSelect, options = this.options; + + // the control is wrapped in a basic container + // inline-block at this level seems to give us better size control + var wrapper = $(""); + wrapper.addClass("ui-dropdownchecklist ui-dropdownchecklist-selector-wrapper ui-widget"); + wrapper.css( { display: "inline-block", cursor: "default", overflow: "hidden" } ); + + // assign an ID + var baseID = sourceSelect.attr("id"); + if ((baseID == null) || (baseID == "")) { + baseID = "ddcl-" + $.ui.dropdownchecklist.gIDCounter++; + } else { + baseID = "ddcl-" + baseID; + } + wrapper.attr("id",baseID); + + // the actual control which you can style + // inline-block needed to enable 'width' but has interesting problems cross browser + var control = $(""); + control.addClass("ui-dropdownchecklist-selector ui-state-default"); + control.css( { display: "inline-block", overflow: "hidden", 'white-space': 'nowrap'} ); + // Setting a tab index means we are interested in the tab sequence + var tabIndex = sourceSelect.attr("tabIndex"); + if ( tabIndex == null ) { + tabIndex = 0; + } else { + tabIndex = parseInt(tabIndex); + if ( tabIndex < 0 ) { + tabIndex = 0; + } + } + control.attr("tabIndex", tabIndex); + control.keyup(function(e) {self._handleKeyboard(e);}); + control.focus(function(e) {self._handleFocus(e,true,true);}); + control.blur(function(e) {self._handleFocus(e,false,true);}); + wrapper.append(control); + + // the optional icon (which is inherently a block) which we can float + if (options.icon != null) { + var iconPlacement = (options.icon.placement == null) ? "left" : options.icon.placement; + var anIcon = $("
            "); + anIcon.addClass("ui-icon"); + anIcon.addClass( (options.icon.toOpen != null) ? options.icon.toOpen : "ui-icon-triangle-1-e"); + anIcon.css({ 'float': iconPlacement }); + control.append(anIcon); + } + // the text container keeps the control text that is built from the selected (checked) items + // inline-block needed to prevent long text from wrapping to next line when icon is active + var textContainer = $(""); + textContainer.addClass("ui-dropdownchecklist-text"); + textContainer.css( { display: "inline-block", 'white-space': "nowrap", overflow: "hidden" } ); + control.append(textContainer); + + // add the hover styles to the control + wrapper.hover( + function() { + if (!self.disabled) { + control.addClass("ui-state-hover"); + } + } + , function() { + if (!self.disabled) { + control.removeClass("ui-state-hover"); + } + } + ); + // clicking on the control toggles the drop container + wrapper.click(function(event) { + if (!self.disabled) { + event.stopImmediatePropagation(); + self._toggleDropContainer( !self.dropWrapper.isOpen ); + } + }); + wrapper.insertAfter(sourceSelect); + + // Watch for a window resize and adjust the control if open + $(window).resize(function() { + if (!self.disabled && self.dropWrapper.isOpen) { + // Reopen yourself to get the position right + self._toggleDropContainer(true); + } + }); + return wrapper; + }, + // Creates a drop item that coresponds to an option element in the source select + _createDropItem: function(index, tabIndex, value, text, optCss, checked, disabled, indent) { + var self = this, options = this.options, sourceSelect = this.sourceSelect, controlWrapper = this.controlWrapper; + // the item contains a div that contains a checkbox input and a lable for the text + // the div + var item = $("
            "); + item.addClass("ui-dropdownchecklist-item"); + item.css({'white-space': "nowrap"}); + var checkedString = checked ? ' checked="checked"' : ''; + var classString = disabled ? ' class="inactive"' : ' class="active"'; + + // generated id must be a bit unique to keep from colliding + var idBase = controlWrapper.attr("id"); + var id = idBase + '-i' + index; + var checkBox; + + // all items start out disabled to keep them out of the tab order + if (self.isMultiple) { // the checkbox + checkBox = $(''); + } else { // the radiobutton + checkBox = $(''); + } + checkBox = checkBox.attr("index", index).val(value); + item.append(checkBox); + + // the text + var label = $("
            "); + group.addClass("ui-dropdownchecklist-group ui-widget-header"); + if (disabled) { + group.addClass("ui-state-disabled"); + } + group.css({'white-space': "nowrap"}); + + var label = $(""); + label.addClass("ui-dropdownchecklist-text"); + label.css( { cursor: "default" }); + label.text(text); + group.append(label); + + // anything interesting when you click the group??? + group.click(function(e) { + var aGroup= $(this); + e.stopImmediatePropagation(); + // retain the focus even if no action is taken + aGroup.focus(); + self._cancelBlur(); + }); + // do not let the focus wander around + group.focus(function(e) { + var aGroup = $(this); + e.stopImmediatePropagation(); + }); + return group; + }, + _createCloseItem: function(text) { + var self = this; + var closeItem = $("
            "); + closeItem.addClass("ui-state-default ui-dropdownchecklist-close ui-dropdownchecklist-item"); + closeItem.css({'white-space': 'nowrap', 'text-align': 'right'}); + + var label = $(""); + label.addClass("ui-dropdownchecklist-text"); + label.css( { cursor: "default" }); + label.html(text); + closeItem.append(label); + + // close the control on click + closeItem.click(function(e) { + var aGroup= $(this); + e.stopImmediatePropagation(); + // retain the focus even if no action is taken + aGroup.focus(); + self._toggleDropContainer( false ); + }); + closeItem.hover( + function(e) { $(this).addClass("ui-state-hover"); } + , function(e) { $(this).removeClass("ui-state-hover"); } + ); + // do not let the focus wander around + closeItem.focus(function(e) { + var aGroup = $(this); + e.stopImmediatePropagation(); + }); + return closeItem; + }, + // Creates the drop items and appends them to the drop container + // Also calculates the size needed by the drop container and returns it + _appendItems: function() { + var self = this, config = this.options, sourceSelect = this.sourceSelect, dropWrapper = this.dropWrapper; + var dropContainerDiv = dropWrapper.find(".ui-dropdownchecklist-dropcontainer"); + sourceSelect.children().each(function(index) { // when the select has groups + var opt = $(this); + if (opt.is("option")) { + self._appendOption(opt, dropContainerDiv, index, false, false); + } else if (opt.is("optgroup")) { + var disabled = opt.prop("disabled"); + var text = opt.attr("label"); + if (text != "") { + var group = self._createGroupItem(text,disabled); + dropContainerDiv.append(group); + } + self._appendOptions(opt, dropContainerDiv, index, true, disabled); + } + }); + if ( config.explicitClose != null ) { + var closeItem = self._createCloseItem(config.explicitClose); + dropContainerDiv.append(closeItem); + } + var divWidth = dropContainerDiv.outerWidth(); + var divHeight = dropContainerDiv.outerHeight(); + return { width: divWidth, height: divHeight }; + }, + _appendOptions: function(parent, container, parentIndex, indent, forceDisabled) { + var self = this; + parent.children("option").each(function(index) { + var option = $(this); + var childIndex = (parentIndex + "." + index); + self._appendOption(option, container, childIndex, indent, forceDisabled); + }); + }, + _appendOption: function(option, container, index, indent, forceDisabled) { + var self = this; + // Note that the browsers destroy any html structure within the OPTION + var text = option.html(); + if ( (text != null) && (text != '') ) { + var value = option.val(); + var optCss = option.attr('style'); + var selected = option.prop("selected"); + var disabled = (forceDisabled || option.prop("disabled")); + // Use the same tab index as the selector replacement + var tabIndex = self.controlSelector.attr("tabindex"); + var item = self._createDropItem(index, tabIndex, value, text, optCss, selected, disabled, indent); + container.append(item); + } + }, + // Synchronizes the items checked and the source select + // When firstItemChecksAll option is active also synchronizes the checked items + // senderCheckbox parameters is the checkbox input that generated the synchronization + _syncSelected: function(senderCheckbox) { + var self = this, options = this.options, sourceSelect = this.sourceSelect, dropWrapper = this.dropWrapper; + var selectOptions = sourceSelect.get(0).options; + var allCheckboxes = dropWrapper.find("input.active"); + if (options.firstItemChecksAll == 'exclusive') { + if ((senderCheckbox == null) && $(selectOptions[0]).prop("selected") ) { + // Initialization call with first item active + allCheckboxes.prop("checked", false); + $(allCheckboxes[0]).prop("checked", true); + } else if ((senderCheckbox != null) && (senderCheckbox.attr("index") == 0)) { + // Action on the first, so all other checkboxes NOT active + var firstIsActive = senderCheckbox.prop("checked"); + allCheckboxes.prop("checked", false); + $(allCheckboxes[0]).prop("checked", firstIsActive); + } else { + // check the first checkbox if all the other checkboxes are checked + var allChecked = true; + var firstCheckbox = null; + allCheckboxes.each(function(index) { + if (index > 0) { + var checked = $(this).prop("checked"); + if (!checked) { allChecked = false; } + } else { + firstCheckbox = $(this); + } + }); + if ( firstCheckbox != null ) { + if ( allChecked ) { + // when all are checked, only the first left checked + allCheckboxes.prop("checked", false); + } + firstCheckbox.prop("checked", allChecked ); + } + } + } else if (options.firstItemChecksAll) { + if ((senderCheckbox == null) && $(selectOptions[0]).prop("selected") ) { + // Initialization call with first item active so force all to be active + allCheckboxes.prop("checked", true); + } else if ((senderCheckbox != null) && (senderCheckbox.attr("index") == 0)) { + // Check all checkboxes if the first one is checked + allCheckboxes.prop("checked", senderCheckbox.prop("checked")); + } else { + // check the first checkbox if all the other checkboxes are checked + var allChecked = true; + var firstCheckbox = null; + allCheckboxes.each(function(index) { + if (index > 0) { + var checked = $(this).prop("checked"); + if (!checked) { allChecked = false; } + } else { + firstCheckbox = $(this); + } + }); + if ( firstCheckbox != null ) { + firstCheckbox.prop("checked", allChecked ); + } + } + } + // do the actual synch with the source select + var empties = 0; + allCheckboxes = dropWrapper.find("input"); + allCheckboxes.each(function(index) { + var anOption = $(selectOptions[index + empties]); + var optionText = anOption.html(); + if ( (optionText == null) || (optionText == '') ) { + empties += 1; + anOption = $(selectOptions[index + empties]); + } + anOption.prop("selected", $(this).prop("checked")); + }); + // update the text shown in the control + self._updateControlText(); + + // Ensure the focus stays pointing where the user is working + if ( senderCheckbox != null) { senderCheckbox.focus(); } + }, + _sourceSelectChangeHandler: function(event) { + var self = this, dropWrapper = this.dropWrapper; + dropWrapper.find("input").val(self.sourceSelect.val()); + + // update the text shown in the control + self._updateControlText(); + }, + // Updates the text shown in the control depending on the checked (selected) items + _updateControlText: function() { + var self = this, sourceSelect = this.sourceSelect, options = this.options, controlWrapper = this.controlWrapper; + var firstOption = sourceSelect.find("option:first"); + var selectOptions = sourceSelect.find("option"); + var text = self._formatText(selectOptions, options.firstItemChecksAll, firstOption); + var controlLabel = controlWrapper.find(".ui-dropdownchecklist-text"); + controlLabel.html(text); + // the attribute needs naked text, not html + controlLabel.attr("title", controlLabel.text()); + }, + // Formats the text that is shown in the control + _formatText: function(selectOptions, firstItemChecksAll, firstOption) { + var text; + if ( $.isFunction(this.options.textFormatFunction) ) { + // let the callback do the formatting, but do not allow it to fail + try { + text = this.options.textFormatFunction(selectOptions); + } catch(ex) { + alert( 'textFormatFunction failed: ' + ex ); + } + } else if (firstItemChecksAll && (firstOption != null) && firstOption.prop("selected")) { + // just set the text from the first item + text = firstOption.html(); + } else { + // concatenate the text from the checked items + text = ""; + selectOptions.each(function() { + if ($(this).prop("selected")) { + if ( text != "" ) { text += ", "; } + /* NOTE use of .html versus .text, which can screw up ampersands for IE */ + var optCss = $(this).attr('style'); + var tempspan = $(''); + tempspan.html( $(this).html() ); + if ( optCss == null ) { + text += tempspan.html(); + } else { + tempspan.attr('style',optCss); + text += $("").append(tempspan).html(); + } + } + }); + if ( text == "" ) { + text = (this.options.emptyText != null) ? this.options.emptyText : " "; + } + } + return text; + }, + // Shows and hides the drop container + _toggleDropContainer: function( makeOpen ) { + var self = this; + // hides the last shown drop container + var hide = function(instance) { + if ((instance != null) && instance.dropWrapper.isOpen ){ + instance.dropWrapper.isOpen = false; + $.ui.dropdownchecklist.gLastOpened = null; + + var config = instance.options; + instance.dropWrapper.css({ + top: "-33000px", + left: "-33000px" + }); + var aControl = instance.controlSelector; + aControl.removeClass("ui-state-active"); + aControl.removeClass("ui-state-hover"); + + var anIcon = instance.controlWrapper.find(".ui-icon"); + if ( anIcon.length > 0 ) { + anIcon.removeClass( (config.icon.toClose != null) ? config.icon.toClose : "ui-icon-triangle-1-s"); + anIcon.addClass( (config.icon.toOpen != null) ? config.icon.toOpen : "ui-icon-triangle-1-e"); + } + $(document).unbind("click", hide); + + // keep the items out of the tab order by disabling them + instance.dropWrapper.find("input.active").prop("disabled",true); + + // the following blur just does not fire??? because it is hidden??? because it does not have focus??? + //instance.sourceSelect.trigger("blur"); + //instance.sourceSelect.triggerHandler("blur"); + if($.isFunction(config.onComplete)) { try { + config.onComplete.call(instance,instance.sourceSelect.get(0)); + } catch(ex) { + alert( 'callback failed: ' + ex ); + }} + } + }; + // shows the given drop container instance + var show = function(instance) { + if ( !instance.dropWrapper.isOpen ) { + instance.dropWrapper.isOpen = true; + $.ui.dropdownchecklist.gLastOpened = instance; + + var config = instance.options; +/**** Issue127 (and the like) to correct positioning when parent element is relative + **** This positioning only worked with simple, non-relative parent position + instance.dropWrapper.css({ + top: instance.controlWrapper.offset().top + instance.controlWrapper.outerHeight() + "px", + left: instance.controlWrapper.offset().left + "px" + }); +****/ + if ((config.positionHow == null) || (config.positionHow == 'absolute')) { + /** Floats above subsequent content, but does NOT scroll */ + instance.dropWrapper.css({ + position: 'absolute' + , top: instance.controlWrapper.position().top + instance.controlWrapper.outerHeight() + "px" + , left: instance.controlWrapper.position().left + "px" + }); + } else if (config.positionHow == 'relative') { + /** Scrolls with the parent but does NOT float above subsequent content */ + instance.dropWrapper.css({ + position: 'relative' + , top: "0px" + , left: "0px" + }); + } + var zIndex = 0; + if (config.zIndex == null) { + var ancestorsZIndexes = instance.controlWrapper.parents().map( + function() { + var zIndex = $(this).css("z-index"); + return isNaN(zIndex) ? 0 : zIndex; } + ).get(); + var parentZIndex = Math.max.apply(Math, ancestorsZIndexes); + if ( parentZIndex >= 0) zIndex = parentZIndex+1; + } else { + /* Explicit set from the optins */ + zIndex = parseInt(config.zIndex); + } + if (zIndex > 0) { + instance.dropWrapper.css( { 'z-index': zIndex } ); + } + + var aControl = instance.controlSelector; + aControl.addClass("ui-state-active"); + aControl.removeClass("ui-state-hover"); + + var anIcon = instance.controlWrapper.find(".ui-icon"); + if ( anIcon.length > 0 ) { + anIcon.removeClass( (config.icon.toOpen != null) ? config.icon.toOpen : "ui-icon-triangle-1-e"); + anIcon.addClass( (config.icon.toClose != null) ? config.icon.toClose : "ui-icon-triangle-1-s"); + } + $(document).bind("click", function(e) {hide(instance);} ); + + // insert the items back into the tab order by enabling all active ones + var activeItems = instance.dropWrapper.find("input.active"); + activeItems.prop("disabled",false); + + // we want the focus on the first active input item + var firstActiveItem = activeItems.get(0); + if ( firstActiveItem != null ) { + firstActiveItem.focus(); + } + } + }; + if ( makeOpen ) { + hide($.ui.dropdownchecklist.gLastOpened); + show(self); + } else { + hide(self); + } + }, + // Set the size of the control and of the drop container + _setSize: function(dropCalculatedSize) { + var options = this.options, dropWrapper = this.dropWrapper, controlWrapper = this.controlWrapper; + + // use the width from config options if set, otherwise set the same width as the drop container + var controlWidth = dropCalculatedSize.width; + if (options.width != null) { + controlWidth = parseInt(options.width); + } else if (options.minWidth != null) { + var minWidth = parseInt(options.minWidth); + // if the width is too small (usually when there are no items) set a minimum width + if (controlWidth < minWidth) { + controlWidth = minWidth; + } + } + var control = this.controlSelector; + control.css({ width: controlWidth + "px" }); + + // if we size the text, then Firefox places icons to the right properly + // and we do not wrap on long lines + var controlText = control.find(".ui-dropdownchecklist-text"); + var controlIcon = control.find(".ui-icon"); + if ( controlIcon != null ) { + // Must be an inner/outer/border problem, but IE6 needs an extra bit of space, + // otherwise you can get text pushed down into a second line when icons are active + controlWidth -= (controlIcon.outerWidth() + 4); + controlText.css( { width: controlWidth + "px" } ); + } + // Account for padding, borders, etc + controlWidth = controlWrapper.outerWidth(); + + // the drop container height can be set from options + var maxDropHeight = (options.maxDropHeight != null) + ? parseInt(options.maxDropHeight) + : -1; + var dropHeight = ((maxDropHeight > 0) && (dropCalculatedSize.height > maxDropHeight)) + ? maxDropHeight + : dropCalculatedSize.height; + // ensure the drop container is not less than the control width (would be ugly) + var dropWidth = dropCalculatedSize.width < controlWidth ? controlWidth : dropCalculatedSize.width; + + $(dropWrapper).css({ + height: dropHeight + "px", + width: dropWidth + "px" + }); + dropWrapper.find(".ui-dropdownchecklist-dropcontainer").css({ + height: dropHeight + "px" + }); + }, + // Initializes the plugin + _init: function() { + var self = this, options = this.options; + if ( $.ui.dropdownchecklist.gIDCounter == null) { + $.ui.dropdownchecklist.gIDCounter = 1; + } + // item blurring relies on a cancelable timer + self.blurringItem = null; + + // sourceSelect is the select on which the plugin is applied + var sourceSelect = self.element; + self.initialDisplay = sourceSelect.css("display"); + sourceSelect.css("display", "none"); + self.initialMultiple = sourceSelect.prop("multiple"); + self.isMultiple = self.initialMultiple; + if (options.forceMultiple != null) { self.isMultiple = options.forceMultiple; } + sourceSelect.prop("multiple", true); + self.sourceSelect = sourceSelect; + + // append the control that resembles a single selection select + var controlWrapper = self._appendControl(); + self.controlWrapper = controlWrapper; + self.controlSelector = controlWrapper.find(".ui-dropdownchecklist-selector"); + + // create the drop container where the items are shown + var dropWrapper = self._appendDropContainer(controlWrapper); + self.dropWrapper = dropWrapper; + + // append the items from the source select element + var dropCalculatedSize = self._appendItems(); + + // updates the text shown in the control + self._updateControlText(controlWrapper, dropWrapper, sourceSelect); + + // set the sizes of control and drop container + self._setSize(dropCalculatedSize); + + // look for possible auto-check needed on first item + if ( options.firstItemChecksAll ) { + self._syncSelected(null); + } + // BGIFrame for IE6 + if (options.bgiframe && typeof self.dropWrapper.bgiframe == "function") { + self.dropWrapper.bgiframe(); + } + // listen for change events on the source select element + // ensure we avoid processing internally triggered changes + self.sourceSelect.change(function(event, eventName) { + if (eventName != 'ddcl_internal') { + self._sourceSelectChangeHandler(event); + } + }); + }, + // Refresh the disable and check state from the underlying control + _refreshOption: function(item,disabled,selected) { + var aParent = item.parent(); + // account for enabled/disabled + if ( disabled ) { + item.prop("disabled",true); + item.removeClass("active"); + item.addClass("inactive"); + aParent.addClass("ui-state-disabled"); + } else { + item.prop("disabled",false); + item.removeClass("inactive"); + item.addClass("active"); + aParent.removeClass("ui-state-disabled"); + } + // adjust the checkbox state + item.prop("checked",selected); + }, + _refreshGroup: function(group,disabled) { + if ( disabled ) { + group.addClass("ui-state-disabled"); + } else { + group.removeClass("ui-state-disabled"); + } + }, + // External command to explicitly close the dropdown + close: function() { + this._toggleDropContainer(false); + }, + // External command to refresh the ddcl from the underlying selector + refresh: function() { + var self = this, sourceSelect = this.sourceSelect, dropWrapper = this.dropWrapper; + + var allCheckBoxes = dropWrapper.find("input"); + var allGroups = dropWrapper.find(".ui-dropdownchecklist-group"); + + var groupCount = 0; + var optionCount = 0; + sourceSelect.children().each(function(index) { + var opt = $(this); + var disabled = opt.prop("disabled"); + if (opt.is("option")) { + var selected = opt.prop("selected"); + var anItem = $(allCheckBoxes[optionCount]); + self._refreshOption(anItem, disabled, selected); + optionCount += 1; + } else if (opt.is("optgroup")) { + var text = opt.attr("label"); + if (text != "") { + var aGroup = $(allGroups[groupCount]); + self._refreshGroup(aGroup, disabled); + groupCount += 1; + } + opt.children("option").each(function() { + var subopt = $(this); + var subdisabled = (disabled || subopt.prop("disabled")); + var selected = subopt.prop("selected"); + var subItem = $(allCheckBoxes[optionCount]); + self._refreshOption(subItem, subdisabled, selected ); + optionCount += 1; + }); + } + }); + // sync will handle firstItemChecksAll and updateControlText + self._syncSelected(null); + }, + // External command to enable the ddcl control + enable: function() { + this.controlSelector.removeClass("ui-state-disabled"); + this.disabled = false; + }, + // External command to disable the ddcl control + disable: function() { + this.controlSelector.addClass("ui-state-disabled"); + this.disabled = true; + }, + // External command to destroy all traces of the ddcl control + destroy: function() { + $.Widget.prototype.destroy.apply(this, arguments); + this.sourceSelect.css("display", this.initialDisplay); + this.sourceSelect.prop("multiple", this.initialMultiple); + this.controlWrapper.unbind().remove(); + this.dropWrapper.remove(); + } + }); + + $.extend($.ui.dropdownchecklist, { + defaults: { + width: null + , maxDropHeight: null + , firstItemChecksAll: false + , closeRadioOnClick: false + , minWidth: 50 + , positionHow: 'absolute' + , bgiframe: false + , explicitClose: null + } + }); + +})(jQuery); \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/js/dropdownchecklist/ui.dropdownchecklist.standalone.css b/src/wp-content/plugins/revslider/js/dropdownchecklist/ui.dropdownchecklist.standalone.css new file mode 100644 index 0000000..0346816 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/dropdownchecklist/ui.dropdownchecklist.standalone.css @@ -0,0 +1,49 @@ + +.ui-dropdownchecklist { + font-size: medium; + color: black; +} +.ui-dropdownchecklist-selector { + height: 20px; + border: 1px solid #ddd; + background: #fff; +} +.ui-state-hover, .ui-state-active { + border-color: #5794bf; +} +.ui-dropdownchecklist-dropcontainer { + background-color: #fff; + border: 1px solid #999; +} +.ui-dropdownchecklist-item { +} +.ui-state-hover { + background-color: #39f; +} +.ui-state-disabled label { + color: #ccc; +} +.ui-dropdownchecklist-group { + font-weight: bold; + font-style: italic; +} +.ui-dropdownchecklist-indent { + padding-left: 7px; +} +/* Font size of 0 on the -selector and an explicit medium on -text required to eliminate + descender problems within the containers and still have a valid size for the text */ +.ui-dropdownchecklist-selector-wrapper { + vertical-align: middle; + font-size: 0px; +} +.ui-dropdownchecklist-selector { + padding: 1px 2px 2px 2px; + font-size: 0px; +} +.ui-dropdownchecklist-text { + font-size: medium; + /* line-height: 20px; */ +} +.ui-dropdownchecklist-group { + padding: 1px 2px 2px 2px; +} diff --git a/src/wp-content/plugins/revslider/js/edit_layers.js b/src/wp-content/plugins/revslider/js/edit_layers.js new file mode 100644 index 0000000..4e88491 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/edit_layers.js @@ -0,0 +1,3990 @@ +//ver 3.2 + +var UniteLayersRev = new function(){ + + var initTop = 100; + var initLeft = 100; + var initSpeed = 300; + + var initTopVideo = 20; + var initLeftVideo = 20; + var g_startTime = 500; + var g_stepTime = 300; + var g_slideTime; + + var initText = "Caption Text"; + + //init system vars" + //init system vars + var t = this; + var initArrFontTypes = []; + var containerID = "#divLayers"; + var container; + var arrLayers = {}; + var id_counter = 0; + var initLayers = null; + var selectedLayerSerial = -1; + + var sortMode = "time"; //can be "depth" or "time" + var layerGeneralParamsStatus = false; + + //Layer Animations + var initLayerAnims = []; + var currentAnimationType = 'customin'; + + + /** + * set init layers object (from db) + */ + t.setInitLayersJson = function(jsonLayers){ + initLayers = jQuery.parseJSON(jsonLayers); + } + + /** + * set init layer animations (from db) + */ + t.setInitLayerAnim = function(jsonLayersAnims){ + initLayerAnims = jQuery.parseJSON(jsonLayersAnims); + } + + /** + * update init layer animations (from db) + */ + t.updateInitLayerAnim = function(layerAnims){ + initLayerAnims = []; + initLayerAnims = layerAnims; + } + + /** + * set init captions classes array (from the captions.css) + */ + t.setInitCaptionClasses = function(jsonClasses){ + initArrCaptionClasses = jQuery.parseJSON(jsonClasses); + } + + /** + * set init font family types array + */ + t.setInitFontTypes = function(jsonClasses){ + initArrFontTypes = jQuery.parseJSON(jsonClasses); + } + + + /** + * insert button by class and text + */ + t.insertButton = function(buttonClass,buttonText){ + if(selectedLayerSerial == -1) + return(false); + + var html = ""+buttonText+""; + + jQuery("#layer_caption").val(""); + jQuery("#layer_text").val(html); + t.updateLayerFromFields(); + + jQuery("#dialog_insert_button").dialog("close"); + } + + /** + * insert template to editor + */ + t.insertTemplate = function(text){ + //console.log(selectedLayerSerial); + if(selectedLayerSerial == -1) + return(false); + + jQuery("#layer_text").val(jQuery("#layer_text").val()+'%'+text+'%'); + t.updateLayerFromFields(); + + jQuery("#dialog_template_insert").dialog("close"); + } + + +//====================================================== +// Init Functions +//====================================================== + + /** + * init the layout + */ + t.init = function(slideTime){ + + if(jQuery().draggable == undefined || jQuery().autocomplete == undefined){ + jQuery("#jqueryui_error_message").show(); + } + + + g_slideTime = Number(slideTime); + + container = jQuery(containerID); + + //add all layers from init + if(initLayers){ + var len = initLayers.length; + if(len){ + for(var i=0;i1) { + var id = anim.split("-")[1]; + var params = new Object; + params = getCutCustomParams(id); + + var transx = params.movex; + var transy = params.movey; + var transz = params.movez; + var rotatex = params.rotationx; + var rotatey = params.rotationy; + var rotatez = params.rotationz; + var scalex = params.scalex/100; + var scaley = params.scaley/100; + var skewx = params.skewx; + var skewy =params.skewy; + var opac = params.captionopacity/100; + var tper = params.captionperspective; + //var tper = 600; + var originx = params.originx+"%"; + var originy = params.originy+"%"; + var origin = originx+" "+originy; + + nextcaption.data('newanim',TweenLite.fromTo(nextcaption,speed, + { scaleX:scalex, + scaleY:scaley, + rotationX:rotatex, + rotationY:rotatey, + rotationZ:rotatez, + x:transx, + y:transy, + z:transz+1, + skewX:skewx, + skewY:skewy, + left:calcx, + top:calcy, + opacity:opac, + transformPerspective:tper, + transformOrigin:origin, + visibility:'hidden'}, + + { + left:calcx, + top:calcy, + x:0, + y:0, + scaleX:1, + scaleY:1, + rotationX:0, + rotationY:0, + rotationZ:0, + skewX:0, + skewY:0, + z:1, + visibility:'visible', + opacity:1, + ease:easedata, + overwrite:"all", + onComplete:function() { + nextcaption.data('timera',setTimeout(function() { + if (!jQuery('#preview_looper').hasClass("deactivated") && jQuery('#preview_looper').data('loop')!=2) setOutAnimOfPreview(); + },500)); + } + })); + + } else { + + nextcaption.data('newanim',TweenLite.fromTo(nextcaption,speed, + { scale:sc, + rotation:ro, + rotationX:0, + rotationY:0, + rotationZ:0, + x:0, + y:0, + left:tlxx+'px', + top:tlyy+"px", + opacity:0, + z:1, + skewX:skwX, + skewY:0, + transformPerspective:600, + transformOrigin:"50% 50%", + visibility:'visible' + }, + + { left:calcx+'px', + top:calcy+"px", + scale:1, + skewX:0, + rotation:0, + z:1, + x:0, + y:0, + visibility:'visible', + opacity:1, + ease:easedata, + overwrite:"all", + onComplete:function() { + nextcaption.data('timera',setTimeout(function() { + if (!jQuery('#preview_looper').hasClass("deactivated") && jQuery('#preview_looper').data('loop')!=2) setOutAnimOfPreview(); + },500)); + } + })); + } + + } + + function getCutCustomParams(id) { + var params = new Object; + jQuery.each(initLayerAnims,function(i,curobj) { + if (parseInt(curobj.id,0) == parseInt(id,0)) params = curobj.params; + }) + return params; + } + + /****************************** + - PLAY OUT ANIMATION - + ********************************/ + + function setOutAnimOfPreview() { + + var nextcaption = jQuery('#preview_caption_animateme'); + var startanim = jQuery('#layer_animation'); + var startspeed = jQuery('#layer_speed'); + var startease = jQuery('#layer_easing'); + var endanim = jQuery('#layer_endanimation'); + var endspeed = jQuery('#layer_endspeed'); + var endease = jQuery('#layer_endeasing'); + + var anim = endanim.val(); + var speed = endspeed.val()/1000; + var easedata = endease.val(); + var xx = 198; + var yy = 82; + skwX = 0; + + if (anim == null) anim = "auto"; + + if ( anim==('fadeout') || + anim==('ltr') || + anim==('ltl') || + anim==('str') || + anim==('stl') || + anim==('ltt') || + anim==('ltb') || + anim==('stt') || + anim==('stb') || + anim==('skewtoright') || + anim==('skewtorightshort') || + anim==('skewtoleft') || + anim==('skewtoleftshort')) + { + + if (anim==('skewtoright') || anim==('skewtorightshort')) + skwX = 35 + + if (anim==('skewtoleft') || anim==('skewtoleftshort')) + skwX = -35 + + + + if (anim==('ltr') || anim==('skewtoright')) + xx=560; + else if (anim==('ltl') || anim==('skewtoleft')) + xx=-100; + else if (anim==('ltt')) + yy=-50; + else if (anim==('ltb')) + yy=250; + else if (anim==('str') || anim==('skewtorightshort')) { + xx=xx+50;oo=0; + } else if (anim==('stl') || anim==('skewtoleftshort')) { + xx=xx-50;oo=0; + } else if (anim==('stt')) { + yy=yy-50;oo=0; + } else if (anim==('stb')) { + yy=yy+50;oo=0; + } + + if (anim==('skewtorightshort')) + xx = 400; + + if (anim==('skewtoleftshort')) + xx = 0 + + nextcaption.data('newanim',TweenLite.to(nextcaption,speed, + { left:xx, + top:yy, + scale:1, + rotation:0, + skewX:skwX, + opacity:0, + z:2, + overwrite:"auto", + ease:easedata, + onComplete:function() { + nextcaption.data('timera',setTimeout(function() { + if (jQuery('#preview_looper').hasClass("deactivated")) jQuery('#preview_looper').data('loop',2); + setInAnimOfPreview(); + },500)); + } + })); + } else + + if (anim.split('custom').length>1) { + var id = anim.split("-")[1]; + var params = new Object; + params = getCutCustomParams(id); + + var transx = params.movex; + var transy = params.movey; + var transz = params.movez; + var rotatex = params.rotationx; + var rotatey = params.rotationy; + var rotatez = params.rotationz; + var scalex = params.scalex/100; + var scaley = params.scaley/100; + var skewx = params.skewx; + var skewy =params.skewy; + var opac = params.captionopacity/100; + var tper = params.captionperspective; + //var tper = 600; + var originx = params.originx+"%"; + var originy = params.originy+"%"; + var origin = originx+" "+originy; + + nextcaption.data('newanim',TweenLite.fromTo(nextcaption,speed, + { left:xx, + top:yy, + x:0, + y:0, + scaleX:1, + scaleY:1, + rotationX:0, + rotationY:0, + rotationZ:0, + skewX:0, + skewY:0, + transformPerspective:tper, + transformOrigin:origin, + z:1, + visibility:'visible', + opacity:1, + }, + + { + scaleX:scalex, + scaleY:scaley, + rotationX:rotatex, + rotationY:rotatey, + rotationZ:rotatez, + x:transx, + y:transy, + z:transz+1, + skewX:skewx, + skewY:skewy, + left:xx, + top:yy, + opacity:opac, + transformPerspective:tper, + transformOrigin:origin, + ease:easedata, + onComplete:function() { + nextcaption.data('timera',setTimeout(function() { + if (jQuery('#preview_looper').hasClass("deactivated")) jQuery('#preview_looper').data('loop',2); + setInAnimOfPreview(); + },500)); + } + })); + + } else { + nextcaption.data('newanim').reverse(); + nextcaption.data('timer',setTimeout(function() { + if (jQuery('#preview_looper').hasClass("deactivated")) jQuery('#preview_looper').data('loop',2); + setInAnimOfPreview(); + },(speed*1000)+1000)) + } + } + + + /** + * init the align table + */ + var initAlignTable = function(){ + jQuery("#align_table a").click(function(){ + var obj = jQuery(this); + if(jQuery("#align_table").hasClass("table_disabled")) + return(false); + if(obj.hasClass("selected")) + return(false); + + var alignHor = obj.data("hor"); + var alignVert = obj.data("vert"); + jQuery("#align_table a").removeClass("selected"); + obj.addClass("selected"); + + jQuery("#layer_align_hor").val(alignHor); + jQuery("#layer_align_vert").val(alignVert); + + var objLayerXText = jQuery("#layer_left_text"); + var objLayerYText = jQuery("#layer_top_text"); + + switch(alignHor){ + case "left": + objLayerXText.html(objLayerXText.data("textnormal")).css("width","auto"); + jQuery("#layer_left").val("10"); + break; + case "right": + objLayerXText.html(objLayerXText.data("textoffset")).css("width","42px"); + jQuery("#layer_left").val("10"); + break; + case "center": + objLayerXText.html(objLayerXText.data("textoffset")).css("width","42px"); + jQuery("#layer_left").val("0"); + break; + } + + switch(alignVert){ + case "top": + objLayerYText.html(objLayerYText.data("textnormal")).css("width","auto"); + jQuery("#layer_top").val("10"); + break; + case "bottom": + objLayerYText.html(objLayerYText.data("textoffset")).css("width","42px"); + jQuery("#layer_top").val("10"); + break; + case "middle": + objLayerYText.html(objLayerYText.data("textoffset")).css("width","42px"); + jQuery("#layer_top").val("0"); + break; + } + + t.updateLayerFromFields(); + + }); + + } + + + /** + * init general events + */ + var initMainEvents = function(){ + //unselect layers on container click + container.click(unselectLayers); + } + + + /** + * init events (update) for html properties change. + */ + var initHtmlFields = function(){ + + //show / hide slide link offset + jQuery("#layer_slide_link").change(function(){ + showHideOffsetRow(); + }); + + //set layers autocompolete + jQuery("#layer_caption").autocomplete({ + source: initArrCaptionClasses, + minLength:0, + close:t.updateLayerFromFields + }).data("ui-autocomplete")._renderItem = function(ul, item) { + var listItem = jQuery("
          • ") + .data("item.autocomplete", item) + .append("
            " + item.label + "") + .appendTo(ul); + + listItem.attr('original-title', item.value); + return listItem; + }; + + //open the list on right button + jQuery( "#layer_captions_down" ).click(function(event){ + event.stopPropagation(); + + jQuery("#css_editor_expert").hide(); + jQuery("#css_editor_wrap").hide(); + + //if opened - close autocomplete + if(jQuery('#layer_caption').data("is_open") == true) + jQuery( "#layer_caption" ).autocomplete("close"); + else //else open autocomplete + if(jQuery(this).hasClass("ui-state-active")) + jQuery( "#layer_caption" ).autocomplete( "search", "" ).data("ui-autocomplete")._renderItem = function(ul, item) { + var listItem = jQuery("
          • ") + .data("item.autocomplete", item) + .append("" + item.label + "") + .appendTo(ul); + + listItem.attr('original-title', item.value); + return listItem; + }; + }); + + //handle autocomplete close + jQuery('#layer_caption').bind('autocompleteopen', function() { + jQuery(this).data('is_open',true); + + //handle tooltip + jQuery('.ui-autocomplete li').tipsy({ + delayIn: 70, + html: true, + gravity:"w", + //trigger:"manual", + title: function(){ + setTimeout(function() { + jQuery('.tp-present-caption-small').parent().addClass("tp-present-wrapper-small"); + jQuery('.tp-present-caption-small').parent().parent().addClass("tp-present-wrapper-parent-small"); + },10) + return '
            example
            '; + } + }); + }); + + jQuery('#layer_caption').bind('autocompleteclose', function() { + jQuery(this).data('is_open',false); + }); + + //set layers autocompolete + jQuery( "#font_family" ).autocomplete({ + source: initArrFontTypes, + minLength:0, + close:t.updateLayerFromFields + }); + + //open the list on right button + jQuery("#font_family_down").click(function(event){ + event.stopPropagation(); + + //if opened - close autocomplete + if(jQuery('#font_family').data("is_open") == true) + jQuery( "#font_family" ).autocomplete("close"); + else //else open autocomplete + if(jQuery(this).hasClass("ui-state-active")) + jQuery( "#font_family" ).autocomplete( "search", "" ).data("ui-autocomplete"); + }); + + //handle autocomplete close + jQuery('#font_family').bind('autocompleteopen', function() { + jQuery(this).data('is_open',true); + }); + + jQuery('#font_family').bind('autocompleteclose', function() { + jQuery(this).data('is_open',false); + }); + + + jQuery("body").click(function(){ + jQuery( "#layer_caption" ).autocomplete("close"); + jQuery( "#font_family" ).autocomplete("close"); + }); + + //set events: + jQuery("#form_layers select").change(t.updateLayerFromFields); + jQuery("#layer_text").keyup(t.updateLayerFromFields); + var pressEnterFields = "#form_layers input, #form_layers textarea"; + jQuery(pressEnterFields).blur(t.updateLayerFromFields); + jQuery(pressEnterFields).keypress(function(event){ + if(event.keyCode == 13) + t.updateLayerFromFields(); + }); + + //end time validation + jQuery("#layer_endtime").blur(validateCurrentLayerTimes).keypress(function(event){ + if(event.keyCode == 13) + validateCurrentLayerTimes(); + }); + } + + + /** + * init buttons actions + */ + var initButtons = function(){ + + //set event buttons actions: + jQuery("#button_add_layer").click(function(){ + addLayerText(); + }); + + jQuery("#button_add_layer_image").click(function(){ + UniteAdminRev.openAddImageDialog("Select Layer Image",function(urlImage){ + addLayerImage(urlImage); + }); + }); + + // BUILD THE LAYER ANIMATION DIALOG + jQuery('#add_customanimation_in').click(function() { + if(!UniteLayersRev.getLayerGeneralParamsStatus()) return false; //false if fields are disabled + + currentAnimationType = 'customin'; + stopAnimationInPreview(); + initLayerAnimationDialog(); + setNewAnimObj(); + }); + + // BUILD THE LAYER ANIMATION DIALOG + jQuery('#add_customanimation_out').click(function() { + if(!UniteLayersRev.getLayerGeneralParamsStatus()) return false; //false if fields are disabled + + currentAnimationType = 'customout'; + + initLayerAnimationDialog(); + setNewAnimObj(); + }); + + //build the random animation button + jQuery('#set-random-animation').click(function(){ + jQuery('input[name="movex"]').val((Math.floor(Math.random() * 101) - 50) * 10); + jQuery('input[name="movey"]').val((Math.floor(Math.random() * 101) - 50) * 10); + jQuery('input[name="movez"]').val((Math.floor(Math.random() * 11) - 5) * 10); + + jQuery('input[name="rotationx"]').val((Math.floor(Math.random() * 101) - 50) * 10); + jQuery('input[name="rotationy"]').val((Math.floor(Math.random() * 101) - 50) * 10); + jQuery('input[name="rotationz"]').val((Math.floor(Math.random() * 101) - 50) * 10); + + jQuery('input[name="scalex"]').val((Math.floor(Math.random() * 31)) * 10); + jQuery('input[name="scaley"]').val((Math.floor(Math.random() * 31)) * 10); + + jQuery('input[name="skewx"]').val(Math.floor(Math.random() * 61)); + jQuery('input[name="skewy"]').val(Math.floor(Math.random() * 61)); + + jQuery('input[name="captionopacity"]').val(0); + jQuery('input[name="captionperspective"]').val(600); + + jQuery('input[name="originx"]').val((Math.floor(Math.random() * 41) - 20) * 10); + jQuery('input[name="originy"]').val((Math.floor(Math.random() * 41) - 20) * 10); + + jQuery("#caption-movex-slider").slider("value",jQuery('input[name="movex"]').val()); + jQuery("#caption-movey-slider").slider("value",jQuery('input[name="movey"]').val()); + jQuery("#caption-movez-slider").slider("value",jQuery('input[name="movez"]').val()); + jQuery("#caption-rotationx-slider").slider("value",jQuery('input[name="rotationx"]').val()); + jQuery("#caption-rotationy-slider").slider("value",jQuery('input[name="rotationy"]').val()); + jQuery("#caption-rotationz-slider").slider("value",jQuery('input[name="rotationz"]').val()); + jQuery("#caption-scalex-slider").slider("value",jQuery('input[name="scalex"]').val()); + jQuery("#caption-scaley-slider").slider("value",jQuery('input[name="scaley"]').val()); + jQuery("#caption-skewx-slider").slider("value",jQuery('input[name="skewx"]').val()); + jQuery("#caption-skewy-slider").slider("value",jQuery('input[name="skewy"]').val()); + jQuery("#caption-opacity-slider").slider("value",jQuery('input[name="captionopacity"]').val()); + jQuery("#caption-perspective-slider").slider("value",jQuery('input[name="captionperspective"]').val()); + jQuery("#caption-originx-slider").slider("value",jQuery('input[name="originx"]').val()); + jQuery("#caption-originy-slider").slider("value",jQuery('input[name="originy"]').val()); + + jQuery('input[name="captionspeed"]').val((Math.floor(Math.random() * 11) + 5) * 100); + + transition = jQuery('#caption-easing-demo option'); + var random = Math.floor(transition.length * (Math.random() % 1)); + + transition.attr('selected',false).eq(random).attr('selected',true); + }); + + //add youtube actions: + jQuery("#button_add_layer_video").click(function(){ + UniteAdminRev.openVideoDialog(function(videoData){ + addLayerVideo(videoData); + }); + }); + + //edit video actions + jQuery("#button_edit_video").click(function(){ + var objCurrentLayer = getCurrentLayer(); + var objVideoData = objCurrentLayer.video_data; + + //open video dialog + UniteAdminRev.openVideoDialog(function(videoData){ + //update video layer + var objLayer = getVideoObjLayer(videoData); + updateCurrentLayer(objLayer); + updateHtmlLayersFromObject(selectedLayerSerial); + updateLayerFormFields(selectedLayerSerial); + redrawLayerHtml(selectedLayerSerial); + }, + objVideoData); + + }); + + //change image source actions + jQuery("#button_change_image_source").click(function(){ + UniteAdminRev.openAddImageDialog("Select Layer Image",function(urlImage){ + var objData = {}; + objData.image_url = urlImage; + updateCurrentLayer(objData); + redrawLayerHtml(selectedLayerSerial); + }); + }); + + //delete layer actions: + jQuery("#button_delete_layer").click(function(){ + if(jQuery(this).hasClass("button-disabled")) + return(false); + + //delete selected layer + deleteCurrentLayer(); + }); + + //delete layer actions: + jQuery("#button_duplicate_layer").click(function(){ + if(jQuery(this).hasClass("button-disabled")) + return(false); + + //delete selected layer + duplicateCurrentLayer(); + }); + + //delete all layers actions: + jQuery("#button_delete_all").click(function(){ + if(confirm("Do you really want to delete all the layers?") == false) + return(true); + + if(jQuery(this).hasClass("button-disabled")) + return(false); + + deleteAllLayers(); + }); + + //insert button link - open the dialog + jQuery("#linkInsertButton").click(function(){ + if(jQuery(this).hasClass("disabled")) + return(false); + + var buttons = {"Cancel":function(){jQuery("#dialog_insert_button").dialog("close")}} + jQuery("#dialog_insert_button").dialog({ + buttons:buttons, + minWidth:500, + dialogClass:"tpdialogs", + modal:true}); + + }); + + //insert button link - open the dialog + jQuery("#linkInsertTemplate").click(function(){ + if(jQuery(this).hasClass("disabled")) + return(false); + + var buttons = {"Cancel":function(){jQuery("#dialog_template_insert").dialog("close")}} + jQuery("#dialog_template_insert").dialog({ + buttons:buttons, + minWidth:500, + dialogClass:"tpdialogs", + modal:true}); + + }); + + } + + +//====================================================== +// Init Function End +//====================================================== + + + /************************************** + - INIT LAYER ANIMATION DIALOG - + **************************************/ + function initLayerAnimationDialog() { + var curAnimHandle = (currentAnimationType == 'customin') ? jQuery('#layer_animation').val() : jQuery('#layer_endanimation').val(); + var curAnimText = (currentAnimationType == 'customin') ? jQuery('#layer_animation option:selected').text() : jQuery('#layer_endanimation option:selected').text(); + var isOriginal = (curAnimHandle.indexOf('custom') > -1) ? false : true; + + var layerEasing = (currentAnimationType == 'customin') ? jQuery('#layer_easing option:selected').val() : jQuery('#layer_endeasing option:selected').val(); + var layerSpeed = (currentAnimationType == 'customin') ? jQuery('#layer_speed').val() : jQuery('#layer_endspeed').val(); + + if(layerEasing == 'nothing') layerEasing = jQuery('#layer_easing option:selected').val(); + jQuery('#caption-easing-demo').val(layerEasing); + + if(parseInt(layerSpeed) == 0) layerSpeed = 600; + jQuery('input[name="captionspeed"]').val(layerSpeed); + + var cic = jQuery('#caption-inout-controll'); + cic.data('direction',0); + jQuery('#revshowmetheinanim').addClass("reviconinaction"); + jQuery('#revshowmetheoutanim').removeClass("reviconinaction"); + + //set the transition direction to out + if(currentAnimationType == 'customout') jQuery('#caption-inout-controll').click(); + + jQuery("#layeranimeditor_wrap").dialog({ + modal:true, + resizable:false, + title:'Layer Animation Editor', + minWidth:700, + minHeight:500, + closeOnEscape:true, + open:function () { + jQuery(this).closest(".ui-dialog") + .find(".ui-button").each(function(i) { + var cl; + if (i==0) cl="revgray"; + if (i==1) cl="revgreen"; + if (i==2) cl="revred"; + if (i==3) cl="revred"; + jQuery(this).addClass(cl).addClass("button-primary").addClass("rev-uibuttons"); + }) + }, + close:function() { + setInAnimOfPreview(); + }, + buttons:{ + "Save/Change":function(){ + var animObj = createNewAnimObj(); + + UniteAdminRev.setErrorMessageID("dialog_error_message"); + + jQuery('#current-layer-handle').text(curAnimText); + jQuery('input[name="layeranimation_save_as"]').val(curAnimText); + + jQuery("#dialog-change-layeranimation").dialog({ + modal: true, + buttons: { + 'Save as': function() { + jQuery("#dialog-change-layeranimation-save-as").dialog({ + modal: true, + buttons: { + 'Save as new': function(){ + var id = checkIfAnimExists(jQuery('input[name="layeranimation_save_as"]').val()); + var update = true; + if(id !== false){ + update = false; + if(confirm("Animation already exists, overwrite?")){ + updateAnimInDb(jQuery('input[name="layeranimation_save_as"]').val(), animObj, id); + update = true; + } + }else{ + updateAnimInDb(jQuery('input[name="layeranimation_save_as"]').val(), animObj, false); + } + if(update){ + jQuery("#dialog-change-layeranimation-save-as").dialog("close"); + jQuery("#dialog-change-layeranimation").dialog("close"); + jQuery(this).dialog("close"); + jQuery("#layeranimeditor_wrap").dialog("close"); + setInAnimOfPreview(); + } + } + } + }); + }, + Save: function() { + var id = checkIfAnimExists(jQuery('input[name="layeranimation_save_as"]').val()); + + if(id !== false){ + if(confirm("Really overwrite animation?")){ + updateAnimInDb(jQuery('input[name="layeranimation_save_as"]').val(), animObj, id); + jQuery(this).dialog("close"); + jQuery("#layeranimeditor_wrap").dialog("close"); + setInAnimOfPreview(); + } + }else{ + updateAnimInDb(jQuery('input[name="layeranimation_save_as"]').val(), animObj, false); + jQuery(this).dialog("close"); + jQuery("#layeranimeditor_wrap").dialog("close"); + setInAnimOfPreview(); + } + } + } + }); + }, + "Cancel":function(){ + jQuery(this).dialog("close"); + setInAnimOfPreview(); + }, + Delete: function() { + + if(isOriginal){ + alert("Default animations can't be deleted"); + }else{ + if(confirm('Really delete the animation "'+curAnimText+'"?')){ + deleteAnimInDb(curAnimHandle); + setInAnimOfPreview(); + jQuery("#layeranimeditor_wrap").dialog("close"); + } + } + } + } + }); + + jQuery("#caption-rotationx-slider").slider({ + range: "min", + min: -980, + max: 980, + step:10, + slide: function(event, ui) { + jQuery('input[name="rotationx"]').val(ui.value); + + } + }); + + jQuery("#caption-rotationy-slider").slider({ + range: "min", + min: -980, + max: 980, + step:10, + slide: function(event, ui) { + jQuery('input[name="rotationy"]').val(ui.value); + + } + }); + + jQuery("#caption-rotationz-slider").slider({ + range: "min", + min: -980, + max: 980, + step:10, + slide: function(event, ui) { + jQuery('input[name="rotationz"]').val(ui.value); + + } + }); + + jQuery("#caption-movex-slider").slider({ + range: "min", + min: -2000, + max: 2000, + step:10, + slide: function(event, ui) { + jQuery('input[name="movex"]').val(ui.value); + + } + }); + + jQuery("#caption-movey-slider").slider({ + range: "min", + min: -2000, + max: 2000, + step:10, + slide: function(event, ui) { + jQuery('input[name="movey"]').val(ui.value); + + } + }); + + jQuery("#caption-movez-slider").slider({ + range: "min", + min: -2000, + max: 2000, + step:10, + slide: function(event, ui) { + jQuery('input[name="movez"]').val(ui.value); + + } + }); + + jQuery("#caption-scalex-slider").slider({ + range: "min", + min: 0, + max: 800, + step:10, + slide: function(event, ui) { + jQuery('input[name="scalex"]').val(ui.value); + + } + }); + + jQuery("#caption-scaley-slider").slider({ + range: "min", + min: 0, + max: 800, + step:10, + slide: function(event, ui) { + jQuery('input[name="scaley"]').val(ui.value); + + } + }); + + jQuery("#caption-skewx-slider").slider({ + range: "min", + min: -180, + max: 180, + step:1, + slide: function(event, ui) { + jQuery('input[name="skewx"]').val(ui.value); + + } + }); + + jQuery("#caption-skewy-slider").slider({ + range: "min", + min: -180, + max: 180, + step:1, + slide: function(event, ui) { + jQuery('input[name="skewy"]').val(ui.value); + + } + }); + + jQuery("#caption-opacity-slider").slider({ + range: "min", + min: -0, + max: 100, + step:1, + slide: function(event, ui) { + jQuery('input[name="captionopacity"]').val(ui.value); + + } + }); + + jQuery("#caption-perspective-slider").slider({ + range: "min", + min: -3000, + max: 3000, + step:1, + slide: function(event, ui) { + jQuery('input[name="captionperspective"]').val(ui.value); + + } + }); + + jQuery("#caption-originx-slider").slider({ + range: "min", + min: -200, + max: 200, + step:10, + slide: function(event, ui) { + jQuery('input[name="originx"]').val(ui.value); + + } + }); + + jQuery("#caption-originy-slider").slider({ + range: "min", + min: -200, + max: 200, + step:10, + slide: function(event, ui) { + jQuery('input[name="originy"]').val(ui.value); + + } + }); + } + + /** + * get the values of custom animation dialog + */ + var createNewAnimObj = function(){ + var customAnim = new Object; + + customAnim['movex'] = jQuery('input[name="movex"]').val(); + customAnim['movey'] = jQuery('input[name="movey"]').val(); + customAnim['movez'] = jQuery('input[name="movez"]').val(); + customAnim['rotationx'] = jQuery('input[name="rotationx"]').val(); + customAnim['rotationy'] = jQuery('input[name="rotationy"]').val(); + customAnim['rotationz'] = jQuery('input[name="rotationz"]').val(); + customAnim['scalex'] = jQuery('input[name="scalex"]').val(); + customAnim['scaley'] = jQuery('input[name="scaley"]').val(); + customAnim['skewx'] = jQuery('input[name="skewx"]').val(); + customAnim['skewy'] = jQuery('input[name="skewy"]').val(); + customAnim['captionopacity'] = jQuery('input[name="captionopacity"]').val(); + customAnim['captionperspective'] = jQuery('input[name="captionperspective"]').val(); + customAnim['originx'] = jQuery('input[name="originx"]').val(); + customAnim['originy'] = jQuery('input[name="originy"]').val(); + + return customAnim; + } + + /** + * set the values of custom animation dialog + */ + var setNewAnimObj = function(){ + var customAnim = new Object; + + var selectedLayer = (currentAnimationType == 'customin') ? jQuery('#layer_animation').val() : jQuery('#layer_endanimation').val(); + + if(selectedLayer.indexOf('customin') > -1 || selectedLayer.indexOf('customout') > -1){ + selectedLayer = selectedLayer.replace('customin-', '').replace('customout-', ''); + + if(typeof initLayerAnims === 'object' && !jQuery.isEmptyObject(initLayerAnims)){ + for(var key in initLayerAnims){ + if(initLayerAnims[key]['id'] == selectedLayer){ + customAnim = initLayerAnims[key]['params']; + } + } + } + } + + if(!jQuery.isEmptyObject(customAnim)){ + jQuery('input[name="movex"]').val(customAnim['movex']); + jQuery('input[name="movey"]').val(customAnim['movey']); + jQuery('input[name="movez"]').val(customAnim['movez']); + jQuery('input[name="rotationx"]').val(customAnim['rotationx']); + jQuery('input[name="rotationy"]').val(customAnim['rotationy']); + jQuery('input[name="rotationz"]').val(customAnim['rotationz']); + jQuery('input[name="scalex"]').val(customAnim['scalex']); + jQuery('input[name="scaley"]').val(customAnim['scaley']); + jQuery('input[name="skewx"]').val(customAnim['skewx']); + jQuery('input[name="skewy"]').val(customAnim['skewy']); + jQuery('input[name="captionopacity"]').val(customAnim['captionopacity']); + jQuery('input[name="captionperspective"]').val(customAnim['captionperspective']); + jQuery('input[name="originx"]').val(customAnim['originx']); + jQuery('input[name="originy"]').val(customAnim['originy']); + }else{ + jQuery('input[name="movex"]').val(0); + jQuery('input[name="movey"]').val(0); + jQuery('input[name="movez"]').val(0); + jQuery('input[name="rotationx"]').val(0); + jQuery('input[name="rotationy"]').val(0); + jQuery('input[name="rotationz"]').val(0); + jQuery('input[name="scalex"]').val(100); + jQuery('input[name="scaley"]').val(100); + jQuery('input[name="skewx"]').val(0); + jQuery('input[name="skewy"]').val(0); + jQuery('input[name="captionopacity"]').val(0); + jQuery('input[name="captionperspective"]').val(600); + jQuery('input[name="originx"]').val(50); + jQuery('input[name="originy"]').val(50); + } + + jQuery("#caption-movex-slider").slider("value",jQuery('input[name="movex"]').val()); + jQuery("#caption-movey-slider").slider("value",jQuery('input[name="movey"]').val()); + jQuery("#caption-movez-slider").slider("value",jQuery('input[name="movez"]').val()); + jQuery("#caption-rotationx-slider").slider("value",jQuery('input[name="rotationx"]').val()); + jQuery("#caption-rotationy-slider").slider("value",jQuery('input[name="rotationy"]').val()); + jQuery("#caption-rotationz-slider").slider("value",jQuery('input[name="rotationz"]').val()); + jQuery("#caption-scalex-slider").slider("value",jQuery('input[name="scalex"]').val()); + jQuery("#caption-scaley-slider").slider("value",jQuery('input[name="scaley"]').val()); + jQuery("#caption-skewx-slider").slider("value",jQuery('input[name="skewx"]').val()); + jQuery("#caption-skewy-slider").slider("value",jQuery('input[name="skewy"]').val()); + jQuery("#caption-opacity-slider").slider("value",jQuery('input[name="captionopacity"]').val()); + jQuery("#caption-perspective-slider").slider("value",jQuery('input[name="captionperspective"]').val()); + jQuery("#caption-originx-slider").slider("value",jQuery('input[name="originx"]').val()); + jQuery("#caption-originy-slider").slider("value",jQuery('input[name="originy"]').val()); + } + + /** + * check if anim handle already exists + */ + var checkIfAnimExists = function(handle){ + if(typeof initLayerAnims === 'object' && !jQuery.isEmptyObject(initLayerAnims)){ + for(var key in initLayerAnims){ + if(initLayerAnims[key]['handle'] == handle) return initLayerAnims[key]['id']; + } + } + return false; + } + + /** + * update animation in database + */ + var deleteAnimInDb = function(handle){ + UniteAdminRev.setErrorMessageID("dialog_error_message"); + handle = jQuery.trim(handle); + if(handle != ''){ + var animSelect = (currentAnimationType == 'customin') ? jQuery('#layer_animation option') : jQuery('#layer_endanimation option'); + + UniteAdminRev.ajaxRequest("delete_custom_anim",handle,function(response){ + jQuery("#dialog_success_message").show().html(response.message); + + //update html select (got from response) + t.updateInitLayerAnim(response.customfull); + updateLayerAnimsInput(response.customin, 'customin'); + updateLayerAnimsInput(response.customout, 'customout'); + }); + } + } + + /** + * update animation in database + */ + var updateAnimInDb = function(handle, animObj, id){ + UniteAdminRev.setErrorMessageID("dialog_error_message"); + animObj['handle'] = handle; + + + if(id === false){ //create new + //insert in database + UniteAdminRev.ajaxRequest("insert_custom_anim",animObj,function(response){ + jQuery("#dialog_success_message").show().html(response.message); + + //update html select (got from response) + t.updateInitLayerAnim(response.customfull); + updateLayerAnimsInput(response.customin, 'customin'); + updateLayerAnimsInput(response.customout, 'customout'); + + selectLayerAnim(handle); + }); + + }else{ //update existing + + //update to database + UniteAdminRev.ajaxRequest("update_custom_anim",animObj,function(response){ + jQuery("#dialog_success_message").show().html(response.message); + + //update html select (got from response) + t.updateInitLayerAnim(response.customfull); + updateLayerAnimsInput(response.customin, 'customin'); + updateLayerAnimsInput(response.customout, 'customout'); + + selectLayerAnim(handle); + }); + } + } + + /** + * update the layer animation inputs + */ + var selectLayerAnim = function(handle){ + var animSelect = (currentAnimationType == 'customin') ? jQuery('#layer_animation option') : jQuery('#layer_endanimation option'); + animSelect.each(function(){ + if(jQuery(this).text() == handle) + jQuery(this).prop('selected', true); + else + jQuery(this).prop('selected', false); + }); + } + + /** + * update the layer animation inputs + */ + var updateLayerAnimsInput = function(customAnim, type){ + if(type == 'customin'){ + var animSelect = jQuery('#layer_animation'); + var animOption = jQuery('#layer_animation option'); + var current = jQuery('#layer_animation option:selected').val(); + }else{ + var animSelect = jQuery('#layer_endanimation'); + var animOption = jQuery('#layer_endanimation option'); + var current = jQuery('#layer_endanimation option:selected').val(); + } + + animOption.each(function(){ + if(jQuery(this).val().indexOf(type) > -1){ + jQuery(this).remove(); + } + }); + + if(typeof customAnim === 'object' && !jQuery.isEmptyObject(customAnim)){ + for(key in customAnim){ + animSelect.append(new Option(customAnim[key], key)); + } + } + animSelect.val(current); + } + + /** + * show / hide offset row accorging the slide link value + */ + var showHideOffsetRow = function(){ + var value = jQuery("#layer_slide_link").val(); + var offsetRow = jQuery("#layer_scrolloffset_row"); + + if(value == "scroll_under") + offsetRow.show(); + else + offsetRow.hide(); + } + + + /** + * do various form validations + */ + var doCurrentLayerValidations = function(){ + if(selectedLayerSerial == -1) + return(false); + + validateCurrentLayerTimes(); + } + + + /** + * validate times (start and end times) of the current layer + */ + var validateCurrentLayerTimes = function(){ + var currentLayer = getCurrentLayer(); + if(!currentLayer) + return(false); + + var startTime = currentLayer.time; + var endTime = jQuery("#layer_endtime").val(); + endTime = jQuery.trim(endTime); + + if(!endTime || endTime == ""){ + unmarkFieldError("#layer_endtime"); + return(false); + } + + startTime = Number(startTime); + endTime = Number(endTime); + + if(startTime >= endTime) + markFieldError("#layer_endtime","Must be greater then start time ("+startTime+")"); + else + unmarkFieldError("#layer_endtime"); + } + + /** + * mark some field as error field and give it a error title + */ + var markFieldError = function(field_selector,errorTitle){ + jQuery(field_selector).addClass("field_error"); + if(errorTitle) + jQuery(field_selector).prop("title",errorTitle); + } + + + /** + * unmark field error class and title + */ + var unmarkFieldError = function(field_selector){ + jQuery(field_selector).removeClass("field_error"); + jQuery(field_selector).prop("title",""); + } + + + /** + * get the first style from the styles list (from autocomplete) + */ + var getFirstStyle = function(){ + var arrClasses = jQuery( "#layer_caption" ).autocomplete("option","source"); + var firstStyle = ""; + + if(arrClasses == null || arrClasses.length == 0) + return(""); + + var firstStyle = arrClasses[0]; + + return(firstStyle); + } + + + /** + * clear layer html fields, and disable buttons + */ + var disableFormFields = function(){ + + //clear html form + jQuery("#form_layers")[0].reset(); + jQuery("#form_layers input, #form_layers select, #form_layers textarea").attr("disabled", "disabled").addClass("setting-disabled"); + + jQuery("#button_delete_layer").addClass("button-disabled"); + jQuery("#button_duplicate_layer").addClass("button-disabled"); + + jQuery("#form_layers label, #form_layers .setting_text, #form_layers .setting_unit").addClass("text-disabled"); + + jQuery("#layer_captions_down").removeClass("ui-state-active").addClass("ui-state-default"); + jQuery("#font_family_down").removeClass("ui-state-active").addClass("ui-state-default"); + + jQuery("#linkInsertButton").addClass("disabled"); + jQuery("#linkInsertTemplate").addClass("disabled"); + + jQuery("#align_table").addClass("table_disabled"); + + if(!jQuery('#preview_looper').hasClass("deactivated")) jQuery('#preview_looper').click(); + + layerGeneralParamsStatus = false; + } + + /** + * enable buttons and form fields. + */ + var enableFormFields = function(){ + jQuery("#form_layers input, #form_layers select, #form_layers textarea").removeAttr("disabled").removeClass("setting-disabled"); + + jQuery("#button_delete_layer").removeClass("button-disabled"); + jQuery("#button_duplicate_layer").removeClass("button-disabled"); + + jQuery("#form_layers label, #form_layers .setting_text, #form_layers .setting_unit").removeClass("text-disabled"); + + jQuery("#layer_captions_down").removeClass("ui-state-default").addClass("ui-state-active"); + jQuery("#font_family_down").removeClass("ui-state-default").addClass("ui-state-active"); + + jQuery("#linkInsertButton").removeClass("disabled"); + jQuery("#linkInsertTemplate").removeClass("disabled"); + + jQuery("#align_table").removeClass("table_disabled"); + + if(jQuery('#preview_looper').hasClass("deactivated")) jQuery('#preview_looper').click(); + + layerGeneralParamsStatus = true; + } + + + /** + * update z-index of the layers by order value + */ + var updateZIndexByOrder = function(){ + for(var key in arrLayers){ + var layer = arrLayers[key]; + if(layer.order !== undefined){ + var zindex = layer.order+1; + jQuery("#slide_layer_"+key).css("z-index",zindex); + } + }; + } + + /** + * get layers array + */ + t.getLayers = function(){ + if(selectedLayerSerial != -1) + t.updateLayerFromFields(); + + //update sizes in images + updateLayersImageSizes(); + + return(arrLayers); + } + + + /** + * update image sizes + */ + var updateLayersImageSizes = function(){ + + for (serial in arrLayers){ + var layer = arrLayers[serial]; + if(layer.type == "image"){ + var htmlLayer = getHtmlLayerFromSerial(serial); + var objUpdate = {}; + objUpdate.width = htmlLayer.width(); + objUpdate.height = htmlLayer.height(); + updateLayer(serial,objUpdate); + } + } + } + + + /** + * refresh layer events + */ + var refreshEvents = function(serial){ + var layer = getHtmlLayerFromSerial(serial); + + //update layer events. + layer.draggable({ + drag: onLayerDrag, //set ondrag event + grid: [1,1] //set the grid to 1 pixel + }); + + layer.click(function(event){ + setLayerSelected(serial); + event.stopPropagation(); + setInAnimOfPreview(); + }); + + } + + + /** + * get layer serial from id + */ + var getSerialFromID = function(layerID){ + var layerSerial = layerID.replace("slide_layer_",""); + return(layerSerial); + } + + /** + * get serial from sortID + */ + var getSerialFromSortID = function(sortID){ + var layerSerial = sortID.replace("layer_sort_",""); + return(layerSerial); + } + + /** + * get html layer from serial + */ + var getHtmlLayerFromSerial = function(serial){ + var htmlLayer = jQuery("#slide_layer_"+serial); + if(htmlLayer.length == 0) + UniteAdminRev.showErrorMessage("Html Layer with serial: "+serial+" not found!"); + + return(htmlLayer); + } + + /** + * get sort field element from serial + */ + var getHtmlSortItemFromSerial = function(serial){ + var htmlSortItem = jQuery("#layer_sort_"+serial); + if(htmlSortItem.length == 0){ + UniteAdminRev.showErrorMessage("Html sort field with serial: "+serial+" not found!"); + return(false); + } + + return(htmlSortItem); + } + + /** + * get layer object by id + */ + var getLayer = function(serial){ + var layer = arrLayers[serial]; + if(!layer) + UniteAdminRev.showErrorMessage("getLayer error, Layer with serial:"+serial+"not found"); + + //modify some data + layer.speed = Number(layer.speed); + layer.endspeed = Number(layer.endspeed); + + return layer; + } + + /** + * get current layer object + */ + var getCurrentLayer = function(){ + if(selectedLayerSerial == -1){ + UniteAdminRev.showErrorMessage("Selected layer not set"); + return(null); + } + + return getLayer(selectedLayerSerial); + } + + + /** + * set layer object to array + */ + var setLayer = function(layerID,layer){ + if(!arrLayers[layerID]){ + UniteAdminRev.showErrorMessage("setLayer error, Layer with ID:"+layerID+"not found"); + return(false); + } + arrLayers[layerID] = layer; + } + + + /** + * make layer html, with params from the object + */ + var makeLayerHtml = function(serial,objLayer){ + var type = "text"; + if(objLayer.type) + type = objLayer.type; + + var zIndex = Number(objLayer.order)+1; + + var style = "z-index:"+zIndex+";position:absolute;"; + if(type == "image") style += "line-height:0;"; + var html = '
            '; + + //add layer specific html + switch(type){ + case "image": + var addStyle = ''; + if(objLayer.scaleX != "") addStyle += "width: " + objLayer.scaleX + "px; "; + if(objLayer.scaleY != "") addStyle += "height: " + objLayer.scaleY + "px;"; + + html += ''+objLayer.alt+''; + break; + default: + case "text": + html += objLayer.text; + break; + case "video": + var styleVideo = "width:"+objLayer.video_width+"px;height:"+objLayer.video_height+"px;"; + if(typeof (objLayer.video_data) !== "undefined"){ + var useImage = (jQuery.trim(objLayer.video_data.previewimage) != '') ? objLayer.video_data.previewimage : objLayer.video_image_url; + }else{ + var useImage = objLayer.video_image_url; + } + switch(objLayer.video_type){ + case "youtube": + case "vimeo": + styleVideo += ";background-image:url("+useImage+");"; + break; + case "html5": + if(useImage !== undefined && useImage != "") + styleVideo += ";background-image:url("+useImage+");"; + break; + } + + html += "
            " + html += "
            " + objLayer.video_title + "
            "; + html += "
            "; + break; + } + + //add cross icon: + html += "
            "; + + html += '
            '; + return(html); + } + + + /** + * update layer by data object + */ + var updateLayer = function(serial,objData){ + var layer = getLayer(serial); + if(!layer) + return(false); + + for(key in objData){ + layer[key] = objData[key]; + } + + setLayer(serial,layer); + } + + + /** + * update current layer + */ + var updateCurrentLayer = function(objData){ + if(!arrLayers[selectedLayerSerial]){ + UniteAdminRev.showErrorMessage("error! the layer with serial: "+selectedLayerSerial+" don't exists"); + return(false); + } + + updateLayer(selectedLayerSerial,objData); + } + + + /** + * add image layer + */ + var addLayerImage = function(urlImage){ + + objLayer = { + style : "", + text : "Image " + (id_counter+1), + type : "image", + image_url : urlImage + }; + + addLayer(objLayer); + } + + + /** + * get video layer object from video data + */ + var getVideoObjLayer = function(videoData){ + + var objLayer = { + type:"video", + style : "", + video_type: videoData.video_type, + video_width:videoData.width, + video_height:videoData.height, + video_data:videoData + }; + + if(objLayer.video_type == "youtube" || objLayer.video_type == "vimeo"){ + objLayer.video_id = videoData.id; + objLayer.video_title = videoData.title; + objLayer.video_image_url = videoData.thumb_medium.url; + objLayer.video_args = videoData.args; + } + + //set sortbox text + switch(objLayer.video_type){ + case "youtube": + objLayer.text = "Youtube: " + videoData.title; + break; + case "vimeo": + objLayer.text = "Vimeo: " + videoData.title; + break; + case "html5": + objLayer.text = "Html5 Video"; + objLayer.video_title = objLayer.text; + objLayer.video_image_url = ""; + + if(videoData.urlPoster != "") + objLayer.video_image_url = videoData.urlPoster; + + break; + } + + return(objLayer); + } + + + /** + * add video layer + */ + var addLayerVideo = function(videoData){ + var objLayer = getVideoObjLayer(videoData); + addLayer(objLayer); + } + + + /** + * add text layer + */ + var addLayerText = function(){ + + var objLayer = { + text:initText + (id_counter+1), + type:"text" + }; + + addLayer(objLayer); + } + + + /** + * add layer + */ + var addLayer = function(objLayer,isInit){ + + if(!isInit) + var isInit = false; + + //set init fields (if not set): + if(objLayer.order == undefined) + objLayer.order = (id_counter); + objLayer.order = Number(objLayer.order); + + //set init position + if(objLayer.type == "video"){ + if(objLayer.left == undefined) + objLayer.left = initLeftVideo; + + if(objLayer.top == undefined) + objLayer.top = initTopVideo; + + objLayer = checkUpdateFullwidthVideo(objLayer); + + }else{ + if(objLayer.left == undefined) + objLayer.left = initLeft; + + if(objLayer.top == undefined) + objLayer.top = initTop; + } + + //set animation: + if(objLayer.animation == undefined) + objLayer.animation = jQuery("#layer_animation").val(); + + //set easing: + if(objLayer.easing == undefined) + objLayer.easing = jQuery("#layer_easing").val(); + + //set speed: + if(objLayer.speed == undefined) + objLayer.speed = initSpeed; + + if(objLayer.align_hor == undefined) + objLayer.align_hor = "left"; + + if(objLayer.align_vert == undefined) + objLayer.align_vert = "top"; + + //set animation: + if(objLayer.hiddenunder == undefined) + objLayer.hiddenunder = ""; + + if(objLayer.resizeme == undefined) + objLayer.resizeme = "true"; + + //set image link + if(objLayer.link == undefined) + objLayer.link = ""; + + //set image link open in + if(objLayer.link_open_in == undefined) + objLayer.link_open_in = "same"; + + //set slide link: + if(objLayer.link_slide == undefined) + objLayer.link_slide = "nothing"; + + //set scroll under offset + if(objLayer.scrollunder_offset == undefined) + objLayer.scrollunder_offset = ""; + + + //set style, if empty, add first style from the list + if(objLayer.style == undefined) + objLayer.style = jQuery("#layer_caption").val(); + + objLayer.style = jQuery.trim(objLayer.style); + if(isInit == false && objLayer.type == "text" && (!objLayer.style || objLayer.style == "") ){ + objLayer.style = getFirstStyle(); + } + + //add time + if(objLayer.time == undefined) + objLayer.time = getNextTime(); + + objLayer.time = Number(objLayer.time); //casting + + //end time: + if(objLayer.endtime == undefined) + objLayer.endtime = ""; + + if(objLayer.endspeed == undefined) + objLayer.endspeed = initSpeed; + + //set end animation: + if(objLayer.endanimation == undefined) + objLayer.endanimation = jQuery("#layer_endanimation").val(); + + //set end easing: + if(objLayer.endeasing == undefined) + objLayer.endeasing = jQuery("#layer_endeasing").val(); + + //set corners + if(objLayer.corner_left == undefined) + objLayer.corner_left = "nothing"; + + if(objLayer.corner_right == undefined) + objLayer.corner_right = "nothing"; + + if(objLayer.width == undefined) + objLayer.width = -1; + objLayer.width = Number(objLayer.width); + + if(objLayer.height == undefined) + objLayer.height = -1; + objLayer.height = Number(objLayer.height); + + //round position + objLayer.top = Math.round(objLayer.top); + objLayer.left = Math.round(objLayer.left); + + objLayer.serial = id_counter; + + arrLayers[id_counter] = objLayer; + + //add html + var htmlLayer = makeLayerHtml(id_counter,objLayer); + container.append(htmlLayer); + + var objHtmlLayer = getHtmlLayerFromSerial(id_counter); + + //update layer position + updateHtmlLayerPosition(isInit,objHtmlLayer,objLayer,objLayer.top,objLayer.left,objLayer.align_hor,objLayer.align_vert); + + //update corners + updateHtmlLayerCorners(objHtmlLayer,objLayer); + + //update cross position + updateCrossIconPosition(objHtmlLayer,objLayer); + + //add layer to sortbox + addToSortbox(id_counter,objLayer); + + //refresh draggables + refreshEvents(id_counter); + id_counter++; + + //enable "delete all" button, not event, but anyway :) + jQuery("#button_delete_all").removeClass("button-disabled"); + + //select the layer + if(isInit == false){ + setLayerSelected(objLayer.serial); + jQuery("#layer_text").focus(); + } + + } + + + + /** + * + * delete layer from layers object + */ + var deleteLayerFromObject = function(serial){ + + var arrLayersNew = {}; + var flagFound = false; + for (key in arrLayers){ + if(key != serial) + arrLayersNew[key] = arrLayers[key]; + else + flagFound = true; + } + + if(flagFound == false) + UniteAdminRev.showErrorMessage("Can't delete layer, serial: "+serial+" not found"); + + arrLayers = arrLayersNew; + } + + /** + * delete the layer from html. + */ + var deleteLayerFromHtml = function(serial){ + var htmlLayer = getHtmlLayerFromSerial(serial); + htmlLayer.remove(); + } + + + /** + * delete all representation of some layer + */ + var deleteLayer = function(serial){ + deleteLayerFromObject(serial); + deleteLayerFromHtml(serial); + deleteLayerFromSortbox(serial); + } + + /** + * + * call "deleteLayer" function with selected serial + */ + var deleteCurrentLayer = function(){ + if(selectedLayerSerial == -1) + return(false); + + deleteLayer(selectedLayerSerial); + + //set unselected + selectedLayerSerial = -1; + + //clear form and disable buttons + disableFormFields(); + } + + + /** + * duplicate layer, set it a little aside of the layer position + */ + var duplicateLayer = function(serial){ + var obj = arrLayers[serial]; + var obj2 = jQuery.extend(true, {}, obj); //duplicate object + obj2.left += 5; + obj2.top += 5; + obj2.order = undefined; + obj2.time = undefined; + + addLayer(obj2); + redrawSortbox(); + initDisallowCaptionsOnClick(); + } + + + /** + * call "duplicateLayer" function with selected serial + */ + var duplicateCurrentLayer = function(){ + if(selectedLayerSerial == -1) + return(false); + + duplicateLayer(selectedLayerSerial); + } + + + /** + * delete all layers + */ + var deleteAllLayers = function(){ + + arrLayers = {}; + container.html(""); + emptySortbox(); + selectedLayerSerial = -1; + + disableFormFields(); + jQuery("#button_delete_all").addClass("button-disabled"); + } + + /** + * update the corners + */ + var updateHtmlLayerCorners = function(htmlLayer,objLayer){ + + var ncch = htmlLayer.outerHeight(); + var bgcol = htmlLayer.css('backgroundColor'); + + switch(objLayer.corner_left){ + case "curved": + htmlLayer.append("
            "); + break; + case "reverced": + htmlLayer.append("
            "); + break; + } + + switch(objLayer.corner_right){ + case "curved": + htmlLayer.append("
            "); + break; + case "reverced": + htmlLayer.append("
            "); + break; + } + + + htmlLayer.find(".frontcorner").css({ + 'borderWidth':ncch+"px", + 'left':(0-ncch)+'px', + 'borderRight':'0px solid transparent', + 'borderTopColor':bgcol + }); + + htmlLayer.find(".frontcornertop").css({ + 'borderWidth':ncch+"px", + 'left':(0-ncch)+'px', + 'borderRight':'0px solid transparent', + 'borderBottomColor':bgcol + }); + + htmlLayer.find('.backcorner').css({ + 'borderWidth':ncch+"px", + 'right':(0-ncch)+'px', + 'borderLeft':'0px solid transparent', + 'borderBottomColor':bgcol + }); + + htmlLayer.find('.backcornertop').css({ + 'borderWidth':ncch+"px", + 'right':(0-ncch)+'px', + 'borderLeft':'0px solid transparent', + 'borderTopColor':bgcol + }); + + } + + /** + * update the position of html cross + */ + var updateCrossIconPosition = function(objHtmlLayer,objLayer){ + + var htmlCross = objHtmlLayer.find(".icon_cross"); + var crossWidth = htmlCross.width(); + var crossHeight = htmlCross.height(); + var totalWidth = objHtmlLayer.outerWidth(); + var totalHeight = objHtmlLayer.outerHeight(); + var crossHalfW = Math.round(crossWidth / 2); + var crossHalfH = Math.round(crossHeight / 2); + + var posx = 0; + var posy = 0; + switch(objLayer.align_hor){ + case "left": + posx = - crossHalfW; + break; + case "center": + posx = (totalWidth - crossWidth) / 2; + break; + case "right": + posx = totalWidth - crossHalfW; + break; + } + + switch(objLayer.align_vert){ + case "top": + posy = - crossHalfH; + break; + case "middle": + posy = (totalHeight - crossHeight) / 2; + break; + case "bottom": + posy = totalHeight - crossHalfH; + break; + } + + htmlCross.css({"left":posx+"px","top":posy+"px"}); + } + + + /** + * update html layer position + */ + var updateHtmlLayerPosition = function(isInit,htmlLayer,objLayer,top,left,align_hor,align_vert){ + + //update positions by align + var width = htmlLayer.width(); + var height = htmlLayer.height(); + + //get sizes from saved if on get + if(isInit == true && objLayer.type == "image"){ + if(objLayer.width != -1) + width = objLayer.width; + + if(objLayer.height != -1) + height = objLayer.height; + } + + var totalWidth = container.width(); + var totalHeight = container.height(); + + var objCss = {}; + + //handle horizontal + switch(align_hor){ + default: + case "left": + objCss["right"] = "auto"; + objCss["left"] = left+"px"; + break; + case "right": + objCss["left"] = "auto"; + objCss["right"] = left+"px"; + break; + case "center": + var realLeft = (totalWidth - width)/2; + realLeft = Math.round(realLeft) + left; + objCss["left"] = realLeft + "px"; + objCss["right"] = "auto"; + break; + } + + //handle vertical + switch(align_vert){ + default: + case "top": + objCss["bottom"] = "auto"; + objCss["top"] = top+"px"; + break; + case "middle": + var realTop = (totalHeight - height)/2; + realTop = Math.round(realTop)+top; + objCss["top"] = realTop + "px"; + objCss["bottom"] = "auto"; + break; + case "bottom": + objCss["top"] = "auto"; + objCss["bottom"] = top+"px"; + break; + } + + //objCss["top"] = top+"px"; + //objCss["top"] = top+"px"; + + htmlLayer.css(objCss); + } + + + /** + * check / update full width video position and size + */ + var checkUpdateFullwidthVideo = function(objLayer){ + + if(objLayer.type != "video") + return(objLayer); + + if(typeof (objLayer.video_data) !== "undefined"){ + if(objLayer.video_data && objLayer.video_data.fullwidth && objLayer.video_data.fullwidth == true){ + objLayer.top = 0; + objLayer.left = 0; + objLayer.align_hor = "left"; + objLayer.align_vert = "top"; + objLayer.video_width = container.width(); + objLayer.video_height = container.height(); + } + } + return(objLayer); + } + + + /** + * update html layers from object + */ + var updateHtmlLayersFromObject = function(serial){ + if(!serial) + serial = selectedLayerSerial + + var objLayer = getLayer(serial); + + if(!objLayer) + return(false); + + var htmlLayer = getHtmlLayerFromSerial(serial); + + //set class name + var className = "slide_layer ui-draggable tp-caption"; + if(serial == selectedLayerSerial) + className += " layer_selected"; + className += " "+objLayer.style; + htmlLayer.attr("class",className); + + + //set html + var type = "text"; + if(objLayer.type) + type = objLayer.type; + + //update layer by type: + switch(type){ + case "image": + break; + case "video": //update fullwidth position + objLayer = checkUpdateFullwidthVideo(objLayer); + break; + default: + case "text": + htmlLayer.html(objLayer.text); + updateHtmlLayerCorners(htmlLayer,objLayer); + htmlLayer.append("
            "); + break; + } + + //set position + updateHtmlLayerPosition(false,htmlLayer,objLayer,objLayer.top,objLayer.left,objLayer.align_hor,objLayer.align_vert); + + updateCrossIconPosition(htmlLayer,objLayer); + } + + + /** + * update layer from html fields + */ + t.updateLayerFromFields = function(){ + + if(selectedLayerSerial == -1){ + UniteAdminRev.showErrorMessage("No layer selected, can't update."); + return(false); + } + + var objUpdate = {}; + + objUpdate.style = jQuery("#layer_caption").val(); + objUpdate.text = jQuery("#layer_text").val(); + objUpdate.top = Number(jQuery("#layer_top").val()); + objUpdate.left = Number(jQuery("#layer_left").val()); + objUpdate.animation = jQuery("#layer_animation").val(); + objUpdate.speed = jQuery("#layer_speed").val(); + objUpdate.align_hor = jQuery("#layer_align_hor").val(); + objUpdate.align_vert = jQuery("#layer_align_vert").val(); + objUpdate.hiddenunder = jQuery("#layer_hidden").is(":checked"); + objUpdate.resizeme = jQuery("#layer_resizeme").is(":checked"); + objUpdate.easing = jQuery("#layer_easing").val(); + objUpdate.link_slide = jQuery("#layer_slide_link").val(); + objUpdate.scrollunder_offset = jQuery("#layer_scrolloffset").val(); + objUpdate.alt = jQuery("#layer_alt").val(); + objUpdate.scaleX = jQuery("#layer_scaleX").val(); + objUpdate.scaleY = jQuery("#layer_scaleY").val(); + objUpdate.scaleProportional = jQuery("#layer_proportional_scale").is(":checked"); + + objUpdate.attrID = jQuery("#layer_id").val(); + objUpdate.attrClasses = jQuery("#layer_classes").val(); + objUpdate.attrTitle = jQuery("#layer_title").val(); + objUpdate.attrRel = jQuery("#layer_rel").val(); + objUpdate.link = jQuery("#layer_image_link").val(); + objUpdate.link_open_in = jQuery("#layer_link_open_in").val(); + objUpdate.link_id = jQuery("#layer_link_id").val(); + objUpdate.link_class = jQuery("#layer_link_class").val(); + objUpdate.link_title = jQuery("#layer_link_title").val(); + objUpdate.link_rel = jQuery("#layer_link_rel").val(); + + + objUpdate.endtime = jQuery("#layer_endtime").val(); + objUpdate.endanimation = jQuery("#layer_endanimation").val(); + objUpdate.endspeed = jQuery("#layer_endspeed").val(); + objUpdate.endeasing = jQuery("#layer_endeasing").val(); + + objUpdate.corner_left = jQuery("#layer_cornerleft").val(); + objUpdate.corner_right = jQuery("#layer_cornerright").val(); + + //update object + updateCurrentLayer(objUpdate); + + //update html layers + updateHtmlLayersFromObject(); + + //update html sortbox + updateHtmlSortboxFromObject(); + + //update the timeline with the new data + updateCurrentLayerTimeline(); + + UniteCssEditorRev.setCssPreviewLive(); + + //event on element for href + initDisallowCaptionsOnClick(); + } + + + /** + * redraw some layer html + */ + var redrawLayerHtml = function(serial){ + + var objLayer = getLayer(serial); + var html = makeLayerHtml(serial,objLayer) + var htmlInner = jQuery(html).html(); + var htmlLayer = getHtmlLayerFromSerial(serial); + + htmlLayer.html(htmlInner); + } + + + /** + * update layer parameters from the object + */ + var updateLayerFormFields = function(serial){ + var objLayer = arrLayers[serial]; + + jQuery("#layer_caption").val(objLayer.style); + jQuery("#layer_text").val(objLayer.text); + jQuery("#layer_alt").val(objLayer.alt); + jQuery("#layer_scaleX").val(objLayer.scaleX); + jQuery("#layer_scaleY").val(objLayer.scaleY); + + if(objLayer.scaleProportional == "true" || objLayer.scaleProportional == true) + jQuery("#layer_proportional_scale").prop("checked",true); + else + jQuery("#layer_proportional_scale").prop("checked",false); + jQuery("#layer_top").val(objLayer.top); + jQuery("#layer_left").val(objLayer.left); + jQuery("#layer_animation").val(objLayer.animation); + + jQuery("#layer_easing").val(objLayer.easing); + jQuery("#layer_slide_link").val(objLayer.link_slide); + jQuery("#layer_scrolloffset").val(objLayer.scrollunder_offset); + + jQuery("#layer_speed").val(objLayer.speed); + jQuery("#layer_align_hor").val(objLayer.align_hor); + jQuery("#layer_align_vert").val(objLayer.align_vert); + + if(objLayer.hiddenunder == "true" || objLayer.hiddenunder == true) + jQuery("#layer_hidden").prop("checked",true); + else + jQuery("#layer_hidden").prop("checked",false); + + if(objLayer.resizeme == "true" || objLayer.resizeme == true) + jQuery("#layer_resizeme").prop("checked",true); + else + jQuery("#layer_resizeme").prop("checked",false); + + jQuery("#layer_image_link").val(objLayer.link); + jQuery("#layer_link_open_in").val(objLayer.link_open_in); + jQuery("#layer_link_id").val(objLayer.link_id); + jQuery("#layer_link_class").val(objLayer.link_class); + jQuery("#layer_link_title").val(objLayer.link_title); + jQuery("#layer_link_rel").val(objLayer.link_rel); + + + jQuery("#layer_endtime").val(objLayer.endtime); + jQuery("#layer_endanimation").val(objLayer.endanimation); + jQuery("#layer_endeasing").val(objLayer.endeasing); + jQuery("#layer_endspeed").val(objLayer.endspeed); + + //set advanced params + jQuery("#layer_cornerleft").val(objLayer.corner_left); + jQuery("#layer_cornerright").val(objLayer.corner_right); + + //set align table + var alignClass = "#linkalign_"+objLayer.align_hor+"_"+objLayer.align_vert; + jQuery("#align_table a").removeClass("selected"); + jQuery(alignClass).addClass("selected"); + + jQuery("#layer_id").val(objLayer.attrID); + jQuery("#layer_classes").val(objLayer.attrClasses); + jQuery("#layer_title").val(objLayer.attrTitle); + jQuery("#layer_rel").val(objLayer.attrRel); + + //show / hide go under slider offset row + showHideOffsetRow(); + } + + + /** + * unselect all html layers + */ + var unselectHtmlLayers = function(){ + jQuery(containerID + " .slide_layer").removeClass("layer_selected"); + } + + + /** + * set all layers unselected + */ + var unselectLayers = function(){ + unselectHtmlLayers(); + unselectSortboxItems(); + selectedLayerSerial = -1; + disableFormFields(); + hideLayerTimeline(); + + //reset elements + jQuery("#layer_alt_row").hide(); + jQuery("#layer_scale_title_row").hide(); + jQuery("#layer_scaleX_row").hide(); + jQuery("#layer_scaleY_row").hide(); + jQuery("#layer_proportional_scale_row").hide(); + jQuery("#button_edit_video_row").hide(); + jQuery("#button_change_image_source_row").hide(); + jQuery("#layer_text").css("height","80px"); + + jQuery("#layer_image_link_row").hide(); + jQuery("#layer_link_id_row").hide(); + jQuery("#layer_link_class_row").hide(); + jQuery("#layer_link_title_row").hide(); + jQuery("#layer_link_rel_row").hide(); + jQuery("#layer_link_open_in_row").hide(); + } + + + /** + * set layer selected representation + */ + var setLayerSelected = function(serial){ + + if(selectedLayerSerial == serial) + return(false); + + objLayer = getLayer(serial); + + var layer = getHtmlLayerFromSerial(serial); + + //unselect all other layers + unselectHtmlLayers(); + + //set selected class + layer.addClass("layer_selected"); + + setSortboxItemSelected(serial); + + //update selected serial var + selectedLayerSerial = serial; + + //update bottom fields + updateLayerFormFields(serial); + + //enable form fields + enableFormFields(); + + //do specific operations depends on type + switch(objLayer.type){ + case "video": //show edit video button + jQuery("#linkInsertButton").addClass("disabled"); + jQuery("#linkInsertTemplate").addClass("disabled"); + jQuery("#button_edit_video_row").show(); + + jQuery("#layer_text").css("height","25px"); + break; + case "image": + //disable the insert button + jQuery("#linkInsertButton").addClass("disabled"); + jQuery("#linkInsertTemplate").addClass("disabled"); + + //show / hide some elements + jQuery("#layer_alt_row").show(); + jQuery("#layer_scale_title_row").show(); + jQuery("#layer_scaleX_row").show(); + jQuery("#layer_scaleY_row").show(); + //initScaleImage(); + jQuery("#layer_proportional_scale_row").show(); + jQuery("#button_change_image_source_row").show(); + jQuery("#layer_text").css("height","25px"); + jQuery("#layer_image_link_row").show(); + jQuery("#layer_link_open_in_row").show(); + jQuery("#layer_link_id_row").show(); + jQuery("#layer_link_class_row").show(); + jQuery("#layer_link_title_row").show(); + jQuery("#layer_link_rel_row").show(); + break; + default: //set layer text to default height + jQuery("#layer_text").css("height","80px"); + break; + } + + //hide edit video button + if(objLayer.type != "video"){ + jQuery("#button_edit_video_row").hide(); + } + + //hide image layer related fields + if(objLayer.type != "image"){ + jQuery("#layer_alt_row").hide(); + jQuery("#layer_scale_title_row").hide(); + jQuery("#layer_scaleX_row").hide(); + jQuery("#layer_scaleY_row").hide(); + jQuery("#layer_proportional_scale_row").hide(); + jQuery("#layer_image_link_row").hide(); + jQuery("#layer_link_open_in_row").hide(); + jQuery("#button_change_image_source_row").hide(); + } + + //show/hide text related layers + if(objLayer.type == "text"){ + jQuery("#layer_cornerleft_row").show(); + jQuery("#layer_cornerright_row").show(); + jQuery("#layer_resizeme_row").show(); + }else{ + jQuery("#layer_cornerleft_row").hide(); + jQuery("#layer_cornerright_row").hide(); + jQuery("#layer_resizeme_row").hide(); + } + + + //hide autocomplete + jQuery( "#layer_caption" ).autocomplete("close"); + + //make layer form validations + doCurrentLayerValidations(); + + //update timeline of the layer + updateCurrentLayerTimeline(); + + //set focus to text editor + //jQuery("#layer_text").focus(); + } + + /** + * + * return if the layer is selected or not + */ + var isLayerSelected = function(serial){ + return(serial == selectedLayerSerial); + } + + /** + * hide in html and sortbox + */ + var hideLayer = function(serial,skipGlobalButton){ + var htmlLayer = jQuery("#slide_layer_"+serial); + htmlLayer.hide(); + setSortboxItemHidden(serial); + + if(skipGlobalButton != true){ + if(isAllLayersHidden()) + jQuery("#button_sort_visibility").addClass("e-disabled"); + } + } + + + /** + * show layer in html and sortbox + */ + var showLayer = function(serial,skipGlobalButton){ + var htmlLayer = jQuery("#slide_layer_"+serial); + htmlLayer.show(); + setSortboxItemVisible(serial); + + if(skipGlobalButton != true) + jQuery("#button_sort_visibility").removeClass("e-disabled"); + + } + + + /** + * show all layers + */ + var showAllLayers = function(){ + for (serial in arrLayers) + showLayer(serial,true); + } + + /** + * hide all layers + */ + var hideAllLayers = function(){ + for (serial in arrLayers) + hideLayer(serial,true); + } + + + /** + * get true / false if the layer is hidden + */ + var isLayerVisible = function(serial){ + var htmlLayer = jQuery("#slide_layer_"+serial); + var isVisible = htmlLayer.is(":visible"); + return(isVisible); + } + + /** + * get true / false if all layers hidden + */ + var isAllLayersHidden = function(){ + for(serial in arrLayers){ + if(isLayerVisible(serial) == true) + return(false); + } + + return(true); + } + + + /** + * get true / false if the layer can be moved + */ + var isLayerLocked = function(serial){ + var htmlLayer = jQuery("#slide_layer_"+serial); + var isLocked = htmlLayer.attr('aria-disabled'); + + if(typeof(isLocked) == 'undefined') + return false; + else + return (isLocked == 'false') ? false : true; + } + + + /** + * hide in html and sortbox + */ + var lockLayer = function(serial){ + setSortboxItemLocked(serial); + + var layer = getHtmlLayerFromSerial(serial); + layer.draggable('disable'); + } + + + /** + * show layer in html and sortbox + */ + var unlockLayer = function(serial){ + setSortboxItemUnlocked(serial); + + var layer = getHtmlLayerFromSerial(serial); + layer.draggable('enable'); + } + + + + +//====================================================== +// Sortbox Functions +//====================================================== + + /** + * init the sortbox + */ + var initSortbox = function(){ + + redrawSortbox(); + + //set the sortlist sortable + jQuery( "#sortlist" ).sortable({ + axis:'y', + update: function(){ + onSortboxSorted(); + } + }); + + //set input time events: + jQuery("#sortlist").delegate(".sortbox_time","keyup",function(event){ + if(event.keyCode == 13) + onSortboxTimeChange(jQuery(this)); + }); + + jQuery("#sortlist").delegate(".sortbox_time","blur",function(event){ + onSortboxTimeChange(jQuery(this)); + }); + + /* + //set input depth events: + jQuery("#sortlist").delegate(".sortbox_depth","keyup",function(event){ + if(event.keyCode == 13) + onSortboxDepthChange(jQuery(this)); + }); + + jQuery("#sortlist").delegate(".sortbox_depth","blur",function(event){ + onSortboxDepthChange(jQuery(this)); + }); + */ + + jQuery("#sortlist").delegate(".sortbox_depth","focus",function(event){ + jQuery(this).blur(); + }); + + //set click event + jQuery("#sortlist").delegate("li","mousedown",function(){ + var serial = getSerialFromSortID(this.id); + setLayerSelected(serial); + }); + + //sort type buttons events + jQuery(".button_sorttype").click(function(){ + var mode = this.id.replace("button_sort_",""); + changeSortmode(mode); + }); + + //on show / hide layer icon click - show / hide layer + jQuery("#sortlist").delegate(".sortbox_eye","mousedown",function(event){ + + var sortboxID = jQuery(this).parent().attr("id"); + var serial = getSerialFromSortID(sortboxID); + if(isLayerVisible(serial)) + hideLayer(serial); + else + showLayer(serial); + + //prevnt the layer from selecting + event.stopPropagation(); + }); + + //on show / hide layer icon click - show / hide layer + jQuery("#sortlist").delegate(".sortbox_lock","mousedown",function(event){ + + var sortboxID = jQuery(this).parent().attr("id"); + var serial = getSerialFromSortID(sortboxID); + if(isLayerLocked(serial)) + unlockLayer(serial); + else + lockLayer(serial); + + //prevent the layer from selecting + event.stopPropagation(); + }); + + + //show / hide all layers + jQuery("#button_sort_visibility").click(function(){ + var button = jQuery(this); + if(button.hasClass("e-disabled")){ //show all + button.removeClass("e-disabled"); + showAllLayers(); + }else{ //hide all + button.addClass("e-disabled"); + hideAllLayers(); + } + + }); + + } + + + /** + * set sortbox items selected + */ + var setSortboxItemSelected = function(serial){ + var sortItem = getHtmlSortItemFromSerial(serial); + unselectSortboxItems(); + + sortItem.removeClass("ui-state-default").addClass("ui-state-hover"); + } + + + /** + * set sortbox item hidden mode + */ + var setSortboxItemHidden = function(serial){ + var sortItem = getHtmlSortItemFromSerial(serial); + sortItem.addClass("sortitem-hidden"); + } + + /** + * set sortbox item visible mode + */ + var setSortboxItemVisible = function(serial){ + var sortItem = getHtmlSortItemFromSerial(serial); + sortItem.removeClass("sortitem-hidden"); + } + + /** + * set sortbox item locked mode + */ + var setSortboxItemLocked = function(serial){ + var sortItem = getHtmlSortItemFromSerial(serial); + sortItem.addClass("sortitem-locked"); + } + + /** + * set sortbox item unlocked mode + */ + var setSortboxItemUnlocked = function(serial){ + var sortItem = getHtmlSortItemFromSerial(serial); + sortItem.removeClass("sortitem-locked"); + } + + + /** + * + * change sortmode, display the changes + */ + var changeSortmode = function(mode){ + + if(mode != "depth" && mode != "time"){ + trace("wrong mode: "+mode); + } + if(sortMode == mode) + return(false); + + sortMode = mode; + + redrawSortbox(); + + //change to time mode + if(sortMode == "time"){ + + jQuery("#button_sort_time").removeClass("ui-state-hover").addClass("ui-state-active"); + jQuery("#button_sort_depth").removeClass("ui-state-active").addClass("ui-state-hover"); + + }else{ //change to depth mode + + jQuery("#button_sort_depth").removeClass("ui-state-hover").addClass("ui-state-active"); + jQuery("#button_sort_time").removeClass("ui-state-active").addClass("ui-state-hover"); + + updateOrderFromSortbox(); + } + } + + + /** + * + * add layer to sortbox + */ + var addToSortbox = function(serial,objLayer){ + + var isVisible = isLayerVisible(serial); + var classLI = ""; + if(isVisible == false) + classLI = " sortitem-hidden"; + + var sortboxText = getSortboxText(objLayer.text); + var depth = Number(objLayer.order)+1; + + var htmlSortbox = '
          • '; + htmlSortbox += '' + sortboxText + ''; + htmlSortbox += '
            '; + htmlSortbox += '
            '; + htmlSortbox += ''; + htmlSortbox += ''; + htmlSortbox += '
            '; + htmlSortbox += '
          • '; + + jQuery("#sortlist").append(htmlSortbox); + } + + + /** + * + * delete layer from sortbox + */ + var deleteLayerFromSortbox = function(serial){ + var sortboxLayer = getHtmlSortItemFromSerial(serial); + sortboxLayer.remove(); + } + + /** + * + * unselect all items in sortbox + */ + var unselectSortboxItems = function(){ + jQuery("#sortlist li").removeClass("ui-state-hover").addClass("ui-state-default"); + } + + + /** + * update layers order from sortbox elements + */ + var updateOrderFromSortbox = function(){ + + var arrSortLayers = jQuery( "#sortlist" ).sortable("toArray"); + + for(var i=0;i= orderToFree){ + obj.order = Number(obj.order)+1; + arrLayers[key] = obj; + } + } + } + + + /** + * get sortbox text from layer html + */ + var getSortboxText = function(text){ + sorboxTextSize = 50; + var textSortbox = UniteAdminRev.stripTags(text); + + //if no content - escape html + if(textSortbox.length < 2) + textSortbox = UniteAdminRev.htmlspecialchars(text); + + //short text + if(textSortbox.length > sorboxTextSize) + textSortbox = textSortbox.slice(0,sorboxTextSize)+"..."; + + return(textSortbox); + } + + /** + * + * redraw the sortbox + */ + var redrawSortbox = function(mode){ + + if(mode == undefined) + mode = sortMode; + + emptySortbox(); + + var layers_array = getLayersSorted(mode); + + if(layers_array.length == 0) + return(false); + + for(var i=0; i maxTime) + maxTime = layerTime; + } + + var outputTime; + if(maxTime == 0) + outputTime = g_startTime; + else + outputTime = Number(maxTime) + Number(g_stepTime); + + return(outputTime); + } + + + /** + * change time on the layer from the sortbox and reorder + */ + var onSortboxTimeChange = function(inputBox){ + + //update the time by inputbox: + var timeValue = inputBox.val(); + timeValue = Number(timeValue); + var sortLayerID = inputBox.parent().attr("id"); + var serial = getSerialFromSortID(sortLayerID); + var objUpdate = {time:timeValue}; + + updateLayer(serial,objUpdate); + + if(sortMode == "time") + redrawSortbox(); + + validateCurrentLayerTimes(); + } + + /** + * change time on the layer from the sortbox and reorder + */ + var onSortboxDepthChange = function(inputBox){ + + //update the time by inputbox: + var depthValue = inputBox.val(); + depthValue = Number(depthValue); + var order = depthValue-1; + + var sortLayerID = inputBox.parent().attr("id"); + var serial = getSerialFromSortID(sortLayerID); + var objUpdate = {order:order}; + + updateLayer(serial,objUpdate); + + redrawSortbox(); + + if(sortMode == "depth") + updateOrderFromSortbox(); + + } + + + /** + * order layers by time + * type can be [time] or [order] + */ + var getLayersSorted = function(type){ + + if(type == undefined) + type = "time"; + + //convert to array + var layers_array = []; + for(key in arrLayers){ + var obj = arrLayers[key]; + obj.serial = key; + layers_array.push(obj); + } + + if(layers_array.length == 0) + return(layers_array); + + //sort layers array + layers_array.sort(function(layer1,layer2){ + + switch(type){ + case "time": + + if(Number(layer1.time) == Number(layer2.time)){ + if(layer1.order == layer2.order) + return(0); + + if(layer1.order > layer2.order) + return(1); + + return(-1); + } + + if(Number(layer1.time) > Number(layer2.time)) + return(1); + break; + case "depth": + if(layer1.order == layer2.order) + return(0); + + if(layer1.order > layer2.order) + return(1); + break; + default: + trace("wrong sort type: "+type); + break; + } + + return(-1); + }); + + return(layers_array); + + } + + + + /** + * reditribute times between the layers sorted from small to big + */ + var redistributeTimes = function(){ + + //collect times to array: + var arrTimes = []; + for(key in arrLayers) + arrTimes.push(Number(arrLayers[key].time)); + + arrTimes.sort(function(a,b){return a-b}); //sort number + + var arrSortLayers = jQuery( "#sortlist" ).sortable("toArray"); + + for(var i=0;i (gWidth+1)){ + var errorWidth; + if(xStart >= gWidth){ + hideLayerTimeline(); + }else{ + errorWidth = gWidth - xStart; + showLayerTimeline(xStart,errorWidth,"error"); //show error timeline mode + } + } + else{ + showLayerTimeline(xStart,widthLast); + } + } + + + //====================================================== + // Scale Functions + //====================================================== + /** + * calculate image height/width + */ + + var scaleImage = function(){ + jQuery("#layer_scaleX").change(function(){ + if(jQuery("#layer_proportional_scale").is(":checked")) + scaleProportional(true); + else + scaleNormal(); + }); + + jQuery("#layer_scaleY").change(function(){ + if(jQuery("#layer_proportional_scale").is(":checked")) + scaleProportional(false); + else + scaleNormal(); + }); + + jQuery("#layer_proportional_scale").click(function(){ + if(jQuery(this).is(":checked")){ + scaleProportional(true); + }else{ + scaleNormal(); + } + }); + + + jQuery("#reset-scale").click(function(){ + resetImageDimensions(); + jQuery("#layer_proportional_scale").attr('checked', false); + jQuery("#layer_scaleX_text").html(jQuery("#layer_scaleX_text").data("textnormal")).css("width", "10px"); + jQuery("#layer_scaleX").val(""); + jQuery("#layer_scaleY").val(""); + + jQuery("#slide_layer_" + selectedLayerSerial + " img").css("width", ""); + jQuery("#slide_layer_" + selectedLayerSerial + " img").css("height", ""); + + t.updateLayerFromFields(); + }); + + } + + var scaleProportional = function(useX){ + var serial = selectedLayerSerial; + + resetImageDimensions(); + + var imgObj = new Image(); + imgObj.src = jQuery("#slide_layer_" + serial + " img").attr("src"); + + if(useX){ + var x = parseInt(jQuery("#layer_scaleX").val()); + if(isNaN(x)) x = imgObj.width; + var y = Math.round(100 / imgObj.width * x / 100 * imgObj.height, 0); + }else{ + var y = parseInt(jQuery("#layer_scaleY").val()); + if(isNaN(y)) y = imgObj.height; + var x = Math.round(100 / imgObj.height * y / 100 * imgObj.width, 0); + } + + jQuery("#slide_layer_" + serial + " img").css("width", x + "px"); + jQuery("#slide_layer_" + serial + " img").css("height", y + "px"); + + jQuery("#slide_layer_" + serial).css("width", jQuery("#slide_layer_" + serial + " img").width() + "px"); + jQuery("#slide_layer_" + serial).css("height", jQuery("#slide_layer_" + serial + " img").height() + "px"); + + jQuery("#slide_layer_" + serial + " img").css("width", "100%"); + jQuery("#slide_layer_" + serial + " img").css("height", "100%"); + + jQuery("#layer_scaleX").val(x); + jQuery("#layer_scaleY").val(y); + } + + var scaleNormal = function(){ + var serial = selectedLayerSerial; + + resetImageDimensions(); + + jQuery("#slide_layer_" + serial + " img").css("width", jQuery("#layer_scaleX").val() + "px"); + jQuery("#slide_layer_" + serial + " img").css("height", jQuery("#layer_scaleY").val() + "px"); + + jQuery("#slide_layer_" + serial).css("width", jQuery("#slide_layer_" + serial + " img").width() + "px"); + jQuery("#slide_layer_" + serial).css("height", jQuery("#slide_layer_" + serial + " img").height() + "px"); + + jQuery("#slide_layer_" + serial + " img").css("width", "100%"); + jQuery("#slide_layer_" + serial + " img").css("height", "100%"); + } + + var resetImageDimensions = function(){ + var imgObj = new Image(); + imgObj.src = jQuery("#slide_layer_" + selectedLayerSerial + " img").attr("src"); + + jQuery("#slide_layer_" + selectedLayerSerial).css("width", imgObj.width + "px"); + jQuery("#slide_layer_" + selectedLayerSerial).css("height", imgObj.height + "px"); + } + + //====================================================== + // Scale Functions End + //====================================================== + + t.getLayerGeneralParamsStatus = function(){ + return layerGeneralParamsStatus; + } + + //====================================================== + // Main Background Image Functions + //====================================================== + + var initBackgroundFunctions = function(){ + + jQuery('#slide_bg_fit').change(function(){ + if(jQuery(this).val() == 'percentage'){ + jQuery('input[name="bg_fit_x"]').show(); + jQuery('input[name="bg_fit_y"]').show(); + + jQuery('#divLayers').css('background-size', jQuery('input[name="bg_fit_x"]').val()+'% '+jQuery('input[name="bg_fit_y"]').val()+'%'); + }else{ + jQuery('input[name="bg_fit_x"]').hide(); + jQuery('input[name="bg_fit_y"]').hide(); + + jQuery('#divLayers').css('background-size', jQuery(this).val()); + } + }); + + jQuery('input[name="bg_fit_x"]').change(function(){ + jQuery('#divLayers').css('background-size', jQuery('input[name="bg_fit_x"]').val()+'% '+jQuery('input[name="bg_fit_y"]').val()+'%'); + }); + + jQuery('input[name="bg_fit_y"]').change(function(){ + jQuery('#divLayers').css('background-size', jQuery('input[name="bg_fit_x"]').val()+'% '+jQuery('input[name="bg_fit_y"]').val()+'%'); + }); + + jQuery('#slide_bg_position').change(function(){ + if(jQuery(this).val() == 'percentage'){ + jQuery('input[name="bg_position_x"]').show(); + jQuery('input[name="bg_position_y"]').show(); + + jQuery('#divLayers').css('background-position', jQuery('input[name="bg_fit_x"]').val()+'% '+jQuery('input[name="bg_fit_y"]').val()+'%'); + }else{ + jQuery('input[name="bg_position_x"]').hide(); + jQuery('input[name="bg_position_y"]').hide(); + + jQuery('#divLayers').css('background-position', jQuery(this).val()); + } + }); + + jQuery('input[name="bg_position_x"]').change(function(){ + jQuery('#divLayers').css('background-position', jQuery('input[name="bg_position_x"]').val()+'% '+jQuery('input[name="bg_position_y"]').val()+'%'); + }); + + jQuery('input[name="bg_position_y"]').change(function(){ + jQuery('#divLayers').css('background-position', jQuery('input[name="bg_position_x"]').val()+'% '+jQuery('input[name="bg_position_y"]').val()+'%'); + }); + + jQuery('#slide_bg_repeat').change(function(){ + jQuery('#divLayers').css('background-repeat', jQuery(this).val()); + }); + + jQuery('input[name="kenburn_effect"]').change(function(){ + if(jQuery(this).val() == "on"){ + jQuery('#kenburn_wrapper').show(); + jQuery('#bg-position-lbl').hide(); + jQuery('#bg-start-position-wrapper').children().appendTo(jQuery('#bg-start-position-wrapper-kb')); + jQuery('#bg-setting-wrap').hide(); + + jQuery('#divLayers').css('background-repeat', ''); + jQuery('#divLayers').css('background-position', ''); + jQuery('#divLayers').css('background-size', ''); + + jQuery('input[name="kb_start_fit"]').change(); + }else{ + jQuery('#kenburn_wrapper').hide(); + jQuery('#bg-position-lbl').show(); + jQuery('#bg-start-position-wrapper-kb').children().appendTo(jQuery('#bg-start-position-wrapper')); + jQuery('#bg-setting-wrap').show(); + + jQuery('#slide_bg_repeat').change(); + jQuery('#slide_bg_position').change(); + jQuery('#slide_bg_fit').change(); + } + }); + + + jQuery('#slide_bg_end_position').change(function(){ + if(jQuery(this).val() == 'percentage'){ + jQuery('input[name="bg_end_position_x"]').show(); + jQuery('input[name="bg_end_position_y"]').show(); + }else{ + jQuery('input[name="bg_end_position_x"]').hide(); + jQuery('input[name="bg_end_position_y"]').hide(); + } + }); + + + jQuery('input[name="kb_start_fit"]').change(function(){ + var fitVal = parseInt(jQuery(this).val()); + var limg = new Image(); + limg.onload = function() { + calculateKenBurnScales(fitVal, limg.width, limg.height, jQuery('#divLayers')); + } + + var urlImage = ''; + if(jQuery('#radio_back_image').is(':checked')) + urlImage = jQuery("#image_url").val(); + else if(jQuery('#radio_back_external').is(':checked')) + urlImage = jQuery("#slide_bg_external").val(); + + if(urlImage != ''){ + limg.src = urlImage; + } + + }); + + var calculateKenBurnScales = function(proc,owidth,oheight,opt) { + var ow = owidth; + var oh = oheight; + + var factor = (opt.width() /ow); + var nheight = oh * factor; + + var hfactor = (nheight / opt.height())*proc; + + jQuery('#divLayers').css('background-size', proc+"% "+hfactor+"%"); + } + + } + + //====================================================== + // Main Background Image Functions End + //====================================================== +} + + + + diff --git a/src/wp-content/plugins/revslider/js/farbtastic/farbtastic.css b/src/wp-content/plugins/revslider/js/farbtastic/farbtastic.css new file mode 100644 index 0000000..af4152c --- /dev/null +++ b/src/wp-content/plugins/revslider/js/farbtastic/farbtastic.css @@ -0,0 +1,58 @@ +/** + * Farbtastic Color Picker 1.2 + * © 2008 Steven Wittens + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +.farbtastic_wrapper{ + position:absolute; + left:1200px; + top:300px; +} + +.farbtastic { + position: relative; +} +.farbtastic * { + position: absolute; + cursor: crosshair; +} +.farbtastic, .farbtastic .wheel { + width: 195px; + height: 195px; +} +.farbtastic .color, .farbtastic .overlay { + top: 47px; + left: 47px; + width: 101px; + height: 101px; +} +.farbtastic .wheel { + background: url(wheel.png) no-repeat; + width: 195px; + height: 195px; +} +.farbtastic .overlay { + background: url(mask.png) no-repeat; +} +.farbtastic .marker { + width: 17px; + height: 17px; + margin: -8px 0 0 -8px; + overflow: hidden; + background: url(marker.png) no-repeat; +} + diff --git a/src/wp-content/plugins/revslider/js/farbtastic/farbtastic.js b/src/wp-content/plugins/revslider/js/farbtastic/farbtastic.js new file mode 100644 index 0000000..0653d92 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/farbtastic/farbtastic.js @@ -0,0 +1,348 @@ +/** + * Farbtastic Color Picker 1.2 + * © 2008 Steven Wittens + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +jQuery.fn.farbtastic = function (callback) { + $.farbtastic(this, callback); + return this; +}; + +jQuery.farbtastic = function (container, callback) { + var container = $(container).get(0); + return container.farbtastic || (container.farbtastic = new jQuery._farbtastic(container, callback)); +} + +jQuery._farbtastic = function (container, callback) { + // Store farbtastic object + var fb = this; + + // Insert markup + $(container).html('
            '); + var e = $('.farbtastic', container); + fb.wheel = $('.wheel', container).get(0); + // Dimensions + fb.radius = 84; + fb.square = 100; + fb.width = 194; + + // Fix background PNGs in IE6 + if (navigator.appVersion.match(/MSIE [0-6]\./)) { + $('*', e).each(function () { + if (this.currentStyle.backgroundImage != 'none') { + var image = this.currentStyle.backgroundImage; + image = this.currentStyle.backgroundImage.substring(5, image.length - 2); + $(this).css({ + 'backgroundImage': 'none', + 'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')" + }); + } + }); + } + + /** + * Link to the given element(s) or callback. + */ + fb.linkTo = function (callback) { + // Unbind previous nodes + if (typeof fb.callback == 'object') { + $(fb.callback).unbind('keyup', fb.updateValue); + } + + // Reset color + fb.color = null; + + // Bind callback or elements + if (typeof callback == 'function') { + fb.callback = callback; + } + else if (typeof callback == 'object' || typeof callback == 'string') { + fb.callback = $(callback); + fb.callback.bind('keyup', fb.updateValue); + if (fb.callback.get(0).value) { + fb.setColor(fb.callback.get(0).value); + } + } + return this; + } + fb.updateValue = function (event) { + if (this.value && this.value != fb.color) { + fb.setColor(this.value); + } + } + + /** + * Change color with HTML syntax #123456 + */ + fb.setColor = function (color) { + var unpack = fb.unpack(color); + if (fb.color != color && unpack) { + fb.color = color; + fb.rgb = unpack; + fb.hsl = fb.RGBToHSL(fb.rgb); + fb.updateDisplay(); + } + return this; + } + + /** + * Change color with HSL triplet [0..1, 0..1, 0..1] + */ + fb.setHSL = function (hsl) { + fb.hsl = hsl; + fb.rgb = fb.HSLToRGB(hsl); + fb.color = fb.pack(fb.rgb); + fb.updateDisplay(); + return this; + } + + ///////////////////////////////////////////////////// + + /** + * Retrieve the coordinates of the given event relative to the center + * of the widget. + */ + fb.widgetCoords = function (event) { + var x, y; + var el = event.target || event.srcElement; + var reference = fb.wheel; + + if (typeof event.offsetX != 'undefined') { + // Use offset coordinates and find common offsetParent + var pos = { x: event.offsetX, y: event.offsetY }; + + // Send the coordinates upwards through the offsetParent chain. + var e = el; + while (e) { + e.mouseX = pos.x; + e.mouseY = pos.y; + pos.x += e.offsetLeft; + pos.y += e.offsetTop; + e = e.offsetParent; + } + + // Look for the coordinates starting from the wheel widget. + var e = reference; + var offset = { x: 0, y: 0 } + while (e) { + if (typeof e.mouseX != 'undefined') { + x = e.mouseX - offset.x; + y = e.mouseY - offset.y; + break; + } + offset.x += e.offsetLeft; + offset.y += e.offsetTop; + e = e.offsetParent; + } + + // Reset stored coordinates + e = el; + while (e) { + e.mouseX = undefined; + e.mouseY = undefined; + e = e.offsetParent; + } + } + else { + // Use absolute coordinates + var pos = fb.absolutePosition(reference); + x = (event.pageX || 0*(event.clientX + $('html').get(0).scrollLeft)) - pos.x; + y = (event.pageY || 0*(event.clientY + $('html').get(0).scrollTop)) - pos.y; + } + // Subtract distance to middle + return { x: x - fb.width / 2, y: y - fb.width / 2 }; + } + + /** + * Mousedown handler + */ + fb.mousedown = function (event) { + // Capture mouse + if (!document.dragging) { + $(document).bind('mousemove', fb.mousemove).bind('mouseup', fb.mouseup); + document.dragging = true; + } + + // Check which area is being dragged + var pos = fb.widgetCoords(event); + fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square; + + // Process + fb.mousemove(event); + return false; + } + + /** + * Mousemove handler + */ + fb.mousemove = function (event) { + // Get coordinates relative to color picker center + var pos = fb.widgetCoords(event); + + // Set new HSL parameters + if (fb.circleDrag) { + var hue = Math.atan2(pos.x, -pos.y) / 6.28; + if (hue < 0) hue += 1; + fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]); + } + else { + var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5)); + var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5)); + fb.setHSL([fb.hsl[0], sat, lum]); + } + + UniteAdminRev.onColorPickerMoveEvent(); + + return false; + } + + /** + * Mouseup handler + */ + fb.mouseup = function () { + // Uncapture mouse + $(document).unbind('mousemove', fb.mousemove); + $(document).unbind('mouseup', fb.mouseup); + document.dragging = false; + } + + /** + * Update the markers and styles + */ + fb.updateDisplay = function () { + // Markers + var angle = fb.hsl[0] * 6.28; + $('.h-marker', e).css({ + left: Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px', + top: Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px' + }); + + $('.sl-marker', e).css({ + left: Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px', + top: Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px' + }); + + // Saturation/Luminance gradient + $('.color', e).css('backgroundColor', fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5]))); + + // Linked elements or callback + if (typeof fb.callback == 'object') { + // Set background/foreground color + $(fb.callback).css({ + backgroundColor: fb.color, + color: fb.hsl[2] > 0.5 ? '#000' : '#fff' + }); + + // Change linked value + $(fb.callback).each(function() { + if (this.value && this.value != fb.color) { + this.value = fb.color; + } + }); + } + else if (typeof fb.callback == 'function') { + fb.callback.call(fb, fb.color); + } + } + + /** + * Get absolute position of element + */ + fb.absolutePosition = function (el) { + var r = { x: el.offsetLeft, y: el.offsetTop }; + // Resolve relative to offsetParent + if (el.offsetParent) { + var tmp = fb.absolutePosition(el.offsetParent); + r.x += tmp.x; + r.y += tmp.y; + } + return r; + }; + + /* Various color utility functions */ + fb.pack = function (rgb) { + var r = Math.round(rgb[0] * 255); + var g = Math.round(rgb[1] * 255); + var b = Math.round(rgb[2] * 255); + return '#' + (r < 16 ? '0' : '') + r.toString(16) + + (g < 16 ? '0' : '') + g.toString(16) + + (b < 16 ? '0' : '') + b.toString(16); + } + + fb.unpack = function (color) { + if (color.length == 7) { + return [parseInt('0x' + color.substring(1, 3)) / 255, + parseInt('0x' + color.substring(3, 5)) / 255, + parseInt('0x' + color.substring(5, 7)) / 255]; + } + else if (color.length == 4) { + return [parseInt('0x' + color.substring(1, 2)) / 15, + parseInt('0x' + color.substring(2, 3)) / 15, + parseInt('0x' + color.substring(3, 4)) / 15]; + } + } + + fb.HSLToRGB = function (hsl) { + var m1, m2, r, g, b; + var h = hsl[0], s = hsl[1], l = hsl[2]; + m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s; + m1 = l * 2 - m2; + return [this.hueToRGB(m1, m2, h+0.33333), + this.hueToRGB(m1, m2, h), + this.hueToRGB(m1, m2, h-0.33333)]; + } + + fb.hueToRGB = function (m1, m2, h) { + h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h); + if (h * 6 < 1) return m1 + (m2 - m1) * h * 6; + if (h * 2 < 1) return m2; + if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6; + return m1; + } + + fb.RGBToHSL = function (rgb) { + var min, max, delta, h, s, l; + var r = rgb[0], g = rgb[1], b = rgb[2]; + min = Math.min(r, Math.min(g, b)); + max = Math.max(r, Math.max(g, b)); + delta = max - min; + l = (min + max) / 2; + s = 0; + if (l > 0 && l < 1) { + s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); + } + h = 0; + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += (2 + (b - r) / delta); + if (max == b && max != r) h += (4 + (r - g) / delta); + h /= 6; + } + return [h, s, l]; + } + + // Install mousedown handler (the others are set on the document on-demand) + $('*', e).mousedown(fb.mousedown); + + // Init color + fb.setColor('#000000'); + + // Set linked elements/callback + if (callback) { + fb.linkTo(callback); + } +} \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/js/farbtastic/index.php b/src/wp-content/plugins/revslider/js/farbtastic/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/js/farbtastic/marker.png b/src/wp-content/plugins/revslider/js/farbtastic/marker.png new file mode 100644 index 0000000..3929bbb Binary files /dev/null and b/src/wp-content/plugins/revslider/js/farbtastic/marker.png differ diff --git a/src/wp-content/plugins/revslider/js/farbtastic/mask.png b/src/wp-content/plugins/revslider/js/farbtastic/mask.png new file mode 100644 index 0000000..b0a4d40 Binary files /dev/null and b/src/wp-content/plugins/revslider/js/farbtastic/mask.png differ diff --git a/src/wp-content/plugins/revslider/js/farbtastic/my-farbtastic.js b/src/wp-content/plugins/revslider/js/farbtastic/my-farbtastic.js new file mode 100644 index 0000000..32dc1f6 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/farbtastic/my-farbtastic.js @@ -0,0 +1,348 @@ +/** + * Farbtastic Color Picker 1.2 + * © 2008 Steven Wittens + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +jQuery.fn.farbtastic = function (callback) { + jQuery.farbtastic(this, callback); + return this; +}; + +jQuery.farbtastic = function (container, callback) { + var container = jQuery(container).get(0); + return container.farbtastic || (container.farbtastic = new jQuery._farbtastic(container, callback)); +} + +jQuery._farbtastic = function (container, callback) { + // Store farbtastic object + var fb = this; + + // Insert markup + jQuery(container).html('
            '); + var e = jQuery('.farbtastic', container); + fb.wheel = jQuery('.wheel', container).get(0); + // Dimensions + fb.radius = 84; + fb.square = 100; + fb.width = 194; + + // Fix background PNGs in IE6 + if (navigator.appVersion.match(/MSIE [0-6]\./)) { + jQuery('*', e).each(function () { + if (this.currentStyle.backgroundImage != 'none') { + var image = this.currentStyle.backgroundImage; + image = this.currentStyle.backgroundImage.substring(5, image.length - 2); + jQuery(this).css({ + 'backgroundImage': 'none', + 'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')" + }); + } + }); + } + + /** + * Link to the given element(s) or callback. + */ + fb.linkTo = function (callback) { + // Unbind previous nodes + if (typeof fb.callback == 'object') { + jQuery(fb.callback).unbind('keyup', fb.updateValue); + } + + // Reset color + fb.color = null; + + // Bind callback or elements + if (typeof callback == 'function') { + fb.callback = callback; + } + else if (typeof callback == 'object' || typeof callback == 'string') { + fb.callback = jQuery(callback); + fb.callback.bind('keyup', fb.updateValue); + if (fb.callback.get(0).value) { + fb.setColor(fb.callback.get(0).value); + } + } + return this; + } + fb.updateValue = function (event) { + if (this.value && this.value != fb.color) { + fb.setColor(this.value); + } + } + + /** + * Change color with HTML syntax #123456 + */ + fb.setColor = function (color) { + var unpack = fb.unpack(color); + if (fb.color != color && unpack) { + fb.color = color; + fb.rgb = unpack; + fb.hsl = fb.RGBToHSL(fb.rgb); + fb.updateDisplay(); + } + return this; + } + + /** + * Change color with HSL triplet [0..1, 0..1, 0..1] + */ + fb.setHSL = function (hsl) { + fb.hsl = hsl; + fb.rgb = fb.HSLToRGB(hsl); + fb.color = fb.pack(fb.rgb); + fb.updateDisplay(); + return this; + } + + ///////////////////////////////////////////////////// + + /** + * Retrieve the coordinates of the given event relative to the center + * of the widget. + */ + fb.widgetCoords = function (event) { + var x, y; + var el = event.target || event.srcElement; + var reference = fb.wheel; + + if (typeof event.offsetX != 'undefined') { + // Use offset coordinates and find common offsetParent + var pos = { x: event.offsetX, y: event.offsetY }; + + // Send the coordinates upwards through the offsetParent chain. + var e = el; + while (e) { + e.mouseX = pos.x; + e.mouseY = pos.y; + pos.x += e.offsetLeft; + pos.y += e.offsetTop; + e = e.offsetParent; + } + + // Look for the coordinates starting from the wheel widget. + var e = reference; + var offset = { x: 0, y: 0 } + while (e) { + if (typeof e.mouseX != 'undefined') { + x = e.mouseX - offset.x; + y = e.mouseY - offset.y; + break; + } + offset.x += e.offsetLeft; + offset.y += e.offsetTop; + e = e.offsetParent; + } + + // Reset stored coordinates + e = el; + while (e) { + e.mouseX = undefined; + e.mouseY = undefined; + e = e.offsetParent; + } + } + else { + // Use absolute coordinates + var pos = fb.absolutePosition(reference); + x = (event.pageX || 0*(event.clientX + jQuery('html').get(0).scrollLeft)) - pos.x; + y = (event.pageY || 0*(event.clientY + jQuery('html').get(0).scrollTop)) - pos.y; + } + // Subtract distance to middle + return { x: x - fb.width / 2, y: y - fb.width / 2 }; + } + + /** + * Mousedown handler + */ + fb.mousedown = function (event) { + // Capture mouse + if (!document.dragging) { + jQuery(document).bind('mousemove', fb.mousemove).bind('mouseup', fb.mouseup); + document.dragging = true; + } + + // Check which area is being dragged + var pos = fb.widgetCoords(event); + fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square; + + // Process + fb.mousemove(event); + return false; + } + + /** + * Mousemove handler + */ + fb.mousemove = function (event) { + // Get coordinates relative to color picker center + var pos = fb.widgetCoords(event); + + // Set new HSL parameters + if (fb.circleDrag) { + var hue = Math.atan2(pos.x, -pos.y) / 6.28; + if (hue < 0) hue += 1; + fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]); + } + else { + var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5)); + var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5)); + fb.setHSL([fb.hsl[0], sat, lum]); + } + + UniteAdminRev.onColorPickerMoveEvent(event); + + return false; + } + + /** + * Mouseup handler + */ + fb.mouseup = function () { + // Uncapture mouse + jQuery(document).unbind('mousemove', fb.mousemove); + jQuery(document).unbind('mouseup', fb.mouseup); + document.dragging = false; + } + + /** + * Update the markers and styles + */ + fb.updateDisplay = function () { + // Markers + var angle = fb.hsl[0] * 6.28; + jQuery('.h-marker', e).css({ + left: Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px', + top: Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px' + }); + + jQuery('.sl-marker', e).css({ + left: Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px', + top: Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px' + }); + + // Saturation/Luminance gradient + jQuery('.color', e).css('backgroundColor', fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5]))); + + // Linked elements or callback + if (typeof fb.callback == 'object') { + // Set background/foreground color + jQuery(fb.callback).css({ + backgroundColor: fb.color, + color: fb.hsl[2] > 0.5 ? '#000' : '#fff' + }); + + // Change linked value + jQuery(fb.callback).each(function() { + if (this.value && this.value != fb.color) { + this.value = fb.color; + } + }); + } + else if (typeof fb.callback == 'function') { + fb.callback.call(fb, fb.color); + } + } + + /** + * Get absolute position of element + */ + fb.absolutePosition = function (el) { + var r = { x: el.offsetLeft, y: el.offsetTop }; + // Resolve relative to offsetParent + if (el.offsetParent) { + var tmp = fb.absolutePosition(el.offsetParent); + r.x += tmp.x; + r.y += tmp.y; + } + return r; + }; + + /* Various color utility functions */ + fb.pack = function (rgb) { + var r = Math.round(rgb[0] * 255); + var g = Math.round(rgb[1] * 255); + var b = Math.round(rgb[2] * 255); + return '#' + (r < 16 ? '0' : '') + r.toString(16) + + (g < 16 ? '0' : '') + g.toString(16) + + (b < 16 ? '0' : '') + b.toString(16); + } + + fb.unpack = function (color) { + if (color.length == 7) { + return [parseInt('0x' + color.substring(1, 3)) / 255, + parseInt('0x' + color.substring(3, 5)) / 255, + parseInt('0x' + color.substring(5, 7)) / 255]; + } + else if (color.length == 4) { + return [parseInt('0x' + color.substring(1, 2)) / 15, + parseInt('0x' + color.substring(2, 3)) / 15, + parseInt('0x' + color.substring(3, 4)) / 15]; + } + } + + fb.HSLToRGB = function (hsl) { + var m1, m2, r, g, b; + var h = hsl[0], s = hsl[1], l = hsl[2]; + m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s; + m1 = l * 2 - m2; + return [this.hueToRGB(m1, m2, h+0.33333), + this.hueToRGB(m1, m2, h), + this.hueToRGB(m1, m2, h-0.33333)]; + } + + fb.hueToRGB = function (m1, m2, h) { + h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h); + if (h * 6 < 1) return m1 + (m2 - m1) * h * 6; + if (h * 2 < 1) return m2; + if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6; + return m1; + } + + fb.RGBToHSL = function (rgb) { + var min, max, delta, h, s, l; + var r = rgb[0], g = rgb[1], b = rgb[2]; + min = Math.min(r, Math.min(g, b)); + max = Math.max(r, Math.max(g, b)); + delta = max - min; + l = (min + max) / 2; + s = 0; + if (l > 0 && l < 1) { + s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); + } + h = 0; + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += (2 + (b - r) / delta); + if (max == b && max != r) h += (4 + (r - g) / delta); + h /= 6; + } + return [h, s, l]; + } + + // Install mousedown handler (the others are set on the document on-demand) + jQuery('*', e).mousedown(fb.mousedown); + + // Init color + fb.setColor('#000000'); + + // Set linked elements/callback + if (callback) { + fb.linkTo(callback); + } +} \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/js/farbtastic/wheel.png b/src/wp-content/plugins/revslider/js/farbtastic/wheel.png new file mode 100644 index 0000000..97b343d Binary files /dev/null and b/src/wp-content/plugins/revslider/js/farbtastic/wheel.png differ diff --git a/src/wp-content/plugins/revslider/js/index.php b/src/wp-content/plugins/revslider/js/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/js/jquery.tipsy.js b/src/wp-content/plugins/revslider/js/jquery.tipsy.js new file mode 100644 index 0000000..6ca3eee --- /dev/null +++ b/src/wp-content/plugins/revslider/js/jquery.tipsy.js @@ -0,0 +1,198 @@ +// tipsy, facebook style tooltips for jquery +// version 1.0.0a +// (c) 2008-2010 jason frame [jason@onehackoranother.com] +// releated under the MIT license + +(function($) { + + function fixTitle($ele) { + if ($ele.attr('title') || typeof($ele.attr('original-title')) != 'string') { + $ele.attr('original-title', $ele.attr('title') || '').removeAttr('title'); + } + } + + function Tipsy(element, options) { + this.$element = $(element); + this.options = options; + this.enabled = true; + fixTitle(this.$element); + } + + Tipsy.prototype = { + show: function() { + var title = this.getTitle(); + if (title && this.enabled) { + var $tip = this.tip(); + + $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title); + $tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity + $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body); + + var pos = $.extend({}, this.$element.offset(), { + width: this.$element[0].offsetWidth, + height: this.$element[0].offsetHeight + }); + + var actualWidth = $tip[0].offsetWidth, actualHeight = $tip[0].offsetHeight; + var gravity = (typeof this.options.gravity == 'function') + ? this.options.gravity.call(this.$element[0]) + : this.options.gravity; + + var tp; + switch (gravity.charAt(0)) { + case 'n': + tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}; + break; + case 's': + tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}; + break; + case 'e': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset}; + break; + case 'w': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset}; + break; + } + + if (gravity.length == 2) { + if (gravity.charAt(1) == 'w') { + tp.left = pos.left + pos.width / 2 - 15; + } else { + tp.left = pos.left + pos.width / 2 - actualWidth + 15; + } + } + + $tip.css(tp).addClass('tipsy-' + gravity); + + if (this.options.fade) { + $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity}); + } else { + $tip.css({visibility: 'visible', opacity: this.options.opacity}); + } + } + }, + + hide: function() { + if (this.options.fade) { + this.tip().stop().fadeOut(function() { $(this).remove(); }); + } else { + this.tip().remove(); + } + }, + + getTitle: function() { + var title, $e = this.$element, o = this.options; + fixTitle($e); + var title, o = this.options; + if (typeof o.title == 'string') { + title = $e.attr(o.title == 'title' ? 'original-title' : o.title); + } else if (typeof o.title == 'function') { + title = o.title.call($e[0]); + } + title = ('' + title).replace(/(^\s*|\s*$)/, ""); + return title || o.fallback; + }, + + tip: function() { + if (!this.$tip) { + this.$tip = $('
            ').html('
            '); + } + return this.$tip; + }, + + validate: function() { + if (!this.$element[0].parentNode) { + this.hide(); + this.$element = null; + this.options = null; + } + }, + + enable: function() { this.enabled = true; }, + disable: function() { this.enabled = false; }, + toggleEnabled: function() { this.enabled = !this.enabled; } + }; + + $.fn.tipsy = function(options) { + + if (options === true) { + return this.data('tipsy'); + } else if (typeof options == 'string') { + return this.data('tipsy')[options](); + } + + options = $.extend({}, $.fn.tipsy.defaults, options); + + function get(ele) { + var tipsy = $.data(ele, 'tipsy'); + if (!tipsy) { + tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options)); + $.data(ele, 'tipsy', tipsy); + } + return tipsy; + } + + function enter() { + var tipsy = get(this); + tipsy.hoverState = 'in'; + if (options.delayIn == 0) { + tipsy.show(); + } else { + setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn); + } + }; + + function leave() { + var tipsy = get(this); + tipsy.hoverState = 'out'; + if (options.delayOut == 0) { + tipsy.hide(); + } else { + setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut); + } + }; + + if (!options.live) this.each(function() { get(this); }); + + if (options.trigger != 'manual') { + var binder = options.live ? 'live' : 'bind', + eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus', + eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'; + this[binder](eventIn, enter)[binder](eventOut, leave); + } + + return this; + + }; + + $.fn.tipsy.defaults = { + delayIn: 0, + delayOut: 0, + fade: false, + fallback: '', + gravity: 'n', + html: false, + live: false, + offset: 0, + opacity: 0.8, + title: 'title', + trigger: 'hover' + }; + + // Overwrite this method to provide options on a per-element basis. + // For example, you could store the gravity in a 'tipsy-gravity' attribute: + // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' }); + // (remember - do not modify 'options' in place!) + $.fn.tipsy.elementOptions = function(ele, options) { + return $.metadata ? $.extend({}, options, $(ele).metadata()) : options; + }; + + $.fn.tipsy.autoNS = function() { + return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n'; + }; + + $.fn.tipsy.autoWE = function() { + return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w'; + }; + +})(jQuery); diff --git a/src/wp-content/plugins/revslider/js/jui_old.js b/src/wp-content/plugins/revslider/js/jui_old.js new file mode 100644 index 0000000..ef9de72 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/jui_old.js @@ -0,0 +1,17 @@ + Volume in drive D is new disk + Volume Serial Number is 8F44-2151 + + Directory of d:\xampp\htdocs\dev\wordpress35\wp-content\plugins\revslider\js + +02/21/2013 12:13 PM . +02/21/2013 12:13 PM .. +02/18/2013 12:53 PM 15,813 admin.js +02/21/2013 12:11 PM codemirror +02/13/2013 02:18 PM 49,047 edit_layers.js +02/21/2013 12:11 PM farbtastic +05/10/2012 12:18 AM 7,587 jquery.tipsy.js +02/21/2013 12:13 PM 0 jui_old.js +02/14/2013 09:18 AM 15,176 rev_admin.js +11/04/2012 06:53 AM 5,743 settings.js + 6 File(s) 93,366 bytes + 4 Dir(s) 37,371,822,080 bytes free diff --git a/src/wp-content/plugins/revslider/js/rev_admin.js b/src/wp-content/plugins/revslider/js/rev_admin.js new file mode 100644 index 0000000..b9a5f8e --- /dev/null +++ b/src/wp-content/plugins/revslider/js/rev_admin.js @@ -0,0 +1,1455 @@ +var RevSliderAdmin = new function(){ + + var t = this; + var g_postTypesWithCats = null; + var isTemplate = false; + + /** + * init "slider" view functionality + */ + var initSaveSliderButton = function(ajaxAction){ + + jQuery("#button_save_slider").click(function(){ + + //collect data + var data = { + params: UniteSettingsRev.getSettingsObject("form_slider_params"), + main: UniteSettingsRev.getSettingsObject("form_slider_main"), + template: isTemplate + }; + + //add slider id to the data + if(ajaxAction == "update_slider"){ + data.sliderid = jQuery("#sliderid").val(); + + //some ajax beautifyer + UniteAdminRev.setAjaxLoaderID("loader_update"); + UniteAdminRev.setAjaxHideButtonID("button_save_slider"); + UniteAdminRev.setSuccessMessageID("update_slider_success"); + } + + UniteAdminRev.ajaxRequest(ajaxAction ,data); + }); + } + + + /** + * update shortcode from alias value. + */ + var updateShortcode = function(){ + var alias = jQuery("#alias").val(); + var shortcode = "[rev_slider "+alias+"]"; + if(alias == "") + shortcode = "-- wrong alias -- "; + jQuery("#shortcode").val(shortcode); + } + + /** + * change fields of the slider view + */ + var enableSliderViewResponsitiveFields = function(enableRes,enableAuto,enableFullScreen,textMode){ + jQuery('input[name="width"]').attr('disabled', false); + jQuery('input[name="height"]').attr('disabled', false); + + if(textMode == 'normal' || textMode == 'full'){ + //jQuery('input[name="width"]').attr('disabled', false); + //jQuery('input[name="height"]').attr('disabled', false); + jQuery('#layout-preshow').removeClass('lp-fullscreenalign'); + }else{ + //jQuery('input[name="width"]').attr('disabled', true); + //jQuery('input[name="height"]').attr('disabled', true); + } + + //enable / disable responsitive fields + if(enableRes){ + jQuery("#responsitive_row").removeClass("disabled"); + jQuery("#responsitive_row input").prop("disabled",""); + }else{ + jQuery("#responsitive_row").addClass("disabled"); + jQuery("#responsitive_row input").prop("disabled","disabled"); + } + + if(enableAuto){ + jQuery("#auto_height_row").removeClass("disabled"); + jQuery('#layout-preshow').removeClass('lp-fullscreenalign'); + }else{ + jQuery("#auto_height_row").addClass("disabled"); + } + + if(enableFullScreen){ + if(jQuery('input[name="full_screen_align_force"]:checked').val() == 'on') jQuery('#layout-preshow').addClass('lp-fullscreenalign'); + + jQuery("#full_screen_align_force_row").removeClass("disabled"); + jQuery("#fullscreen_offset_container_row").removeClass("disabled"); + + }else{ + jQuery("#full_screen_align_force_row").addClass("disabled"); + jQuery("#fullscreen_offset_container_row").addClass("disabled"); + } + + if(enableFullScreen || enableAuto){ + jQuery("#force_full_width_row").removeClass("disabled"); + }else{ + jQuery("#force_full_width_row").addClass("disabled"); + } + + var textWidth = jQuery("#cellWidth").data("text"+textMode); + var textHeight = jQuery("#cellHeight").data("text"+textMode); + + jQuery('#layout-preshow').removeClass('lp-fixed'); + jQuery('#layout-preshow').removeClass('lp-custom'); //responsitive + jQuery('#layout-preshow').removeClass('lp-autoresponsive'); //fullwidth + jQuery('#layout-preshow').removeClass('lp-fullscreen'); + + if(enableRes){ + jQuery('#layout-preshow').addClass('lp-custom'); + }else if(enableAuto){ + jQuery('#layout-preshow').addClass('lp-autoresponsive'); + }else if(enableFullScreen){ + jQuery('#layout-preshow').addClass('lp-fullscreen'); + }else{ + jQuery('#layout-preshow').addClass('lp-fixed'); + } + + jQuery("#cellWidth").html(textWidth); + jQuery("#cellHeight").html(textHeight); + } + + + /** + * init slider view custom controls fields. + */ + var initSliderViewCustomControls = function(){ + + //fixed + jQuery("#slider_type_1").click(function(){ + enableSliderViewResponsitiveFields(false,false,false,"normal"); + }); + + //responsitive + jQuery("#slider_type_2").click(function(){ + enableSliderViewResponsitiveFields(true,false,false,"normal"); + }); + + //full width + jQuery("#slider_type_3").click(function(){ + enableSliderViewResponsitiveFields(false,true,false,"full"); + }); + + //full screen + jQuery("#slider_type_4").click(function(){ + enableSliderViewResponsitiveFields(false,false,true,"screen"); + }); + + jQuery('input[name="full_screen_align_force"]').click(function(){ + if(jQuery(this).val() == 'on'){ + //jQuery('input[name="width"]').attr('disabled', true); + //jQuery('input[name="height"]').attr('disabled', true); + jQuery('#layout-preshow').addClass('lp-fullscreenalign'); + }else{ + //jQuery('input[name="width"]').attr('disabled', false); + //jQuery('input[name="height"]').attr('disabled', false); + jQuery('#layout-preshow').removeClass('lp-fullscreenalign'); + } + }); + + jQuery('input[name="auto_height"]').click(function(){ + if(jQuery(this).val() == "on") + jQuery('#layout-preshow').addClass('lp-autoheight'); + else + jQuery('#layout-preshow').removeClass('lp-autoheight'); + + }); + + jQuery('input[name="force_full_width"]').click(function(){ + if(jQuery(this).val() == "on") + jQuery('#layout-preshow').addClass('lp-fullwidth'); + else + jQuery('#layout-preshow').removeClass('lp-fullwidth'); + + }); + + jQuery('input[name="full_screen_align_force"]:checked').click(); + jQuery('input[name="auto_height"]:checked').click(); + jQuery('input[name="force_full_width"]:checked').click(); + + } + + + /** + * + * update category by post types + */ + var updateCatByPostTypes = function(typeSettingName,catSettingName){ + + jQuery("#"+typeSettingName).change(function(){ + var arrTypes = jQuery(this).val(); + + //replace the categories in multi select + jQuery("#"+catSettingName).empty(); + jQuery(arrTypes).each(function(index,postType){ + var objCats = g_postTypesWithCats[postType]; + + var flagFirst = true; + for(catIndex in objCats){ + var catTitle = objCats[catIndex]; + //add option to cats select + var opt = new Option(catTitle, catIndex); + + if(catIndex.indexOf("option_disabled") == 0) + jQuery(opt).prop("disabled","disabled"); + else{ + //select first option: + if(flagFirst == true){ + jQuery(opt).prop("selected","selected"); + flagFirst = false; + } + } + + jQuery("#"+catSettingName).append(opt); + + } + + }); + }); + } + + + /** + * init common functionality of the slider view. + */ + var initSliderViewCommon = function(){ + initShortcode(); + initSliderViewCustomControls(); + g_postTypesWithCats = jQuery.parseJSON(g_jsonTaxWithCats); + + + updateCatByPostTypes("post_types","post_category"); + + jQuery("input[name='source_type']").click(function(){ //check for post click + if(jQuery(this).val() == 'posts'){ //jQuery(this).val() == 'specific_posts' || + jQuery('.settings_panel_right').hide(); + jQuery('#toolbox_wrapper').hide(); + + //hide more elements + jQuery('#slider_type_row').hide(); + jQuery('#slider_type_row').prev().hide(); + jQuery('#fullscreen_offset_container_row').hide(); + jQuery('#full_screen_align_force_row').hide(); + jQuery('#slider_size_row').hide(); + jQuery('#auto_height_row').hide(); + jQuery('#force_full_width_row').hide(); + jQuery('#responsitive_row').hide(); + jQuery('#responsitive_row').next().hide(); + jQuery('#layout-preshow').hide(); + + }else{ + jQuery('.settings_panel_right').show(); + jQuery('#toolbox_wrapper').show(); + + //show more elements + jQuery('#slider_type_row').show(); + jQuery('#slider_type_row').prev().show(); + jQuery('#fullscreen_offset_container_row').show(); + jQuery('#full_screen_align_force_row').show(); + jQuery('#slider_size_row').show(); + jQuery('#auto_height_row').show(); + jQuery('#force_full_width_row').show(); + jQuery('#responsitive_row').show(); + jQuery('#responsitive_row').next().show(); + jQuery('#layout-preshow').show(); + } + }); + + if(jQuery("#source_type_1").is(':checked')){ + jQuery('.settings_panel_right').hide(); + jQuery('#toolbox_wrapper').hide(); + + //hide more elements + jQuery('#slider_type_row').hide(); + jQuery('#slider_type_row').prev().hide(); + jQuery('#fullscreen_offset_container_row').hide(); + jQuery('#full_screen_align_force_row').hide(); + jQuery('#slider_size_row').hide(); + jQuery('#auto_height_row').hide(); + jQuery('#force_full_width_row').hide(); + jQuery('#responsitive_row').hide(); + jQuery('#responsitive_row').next().hide(); + jQuery('#layout-preshow').hide(); + } + + jQuery(document).ready(function(){ + jQuery('input[name="slider_type"]:checked').click(); + }); + } + + + /** + * init "slider->add" view. + */ + this.initAddSliderView = function(){ + + initSliderViewCommon(); + + jQuery("#title").focus(); + initSaveSliderButton("create_slider"); + + enableSliderViewResponsitiveFields(false,false,false,"normal"); //show grid settings for fixed + + jQuery("#reset_slide_button_row").parent().parent().parent().hide(); + } + + /** + * init "slider->template" view. + */ + this.initSliderViewTemplate = function(){ + isTemplate = true; //set to true so every script knows that we currently are template + + jQuery('#source_type_3').click(); //set gallery + jQuery('#source_type_row').hide(); //hide all Source Types + jQuery('#source_type_row').prev().hide(); //hide the pre HR row + + jQuery('#shortcode_row').hide(); //hide the shortcode + //jQuery('#alias_row').hide(); //hide the alias + + jQuery('#create_slider_text').text('Create Template'); //change text to template + + } + + + /** + * init "slider->edit" view. + */ + this.initEditSliderView = function(){ + + initSliderViewCommon(); + + initSaveSliderButton("update_slider"); + + //delete slider action + jQuery("#button_delete_slider").click(function(){ + + if(confirm("Do you really want to delete '"+jQuery("#title").val()+"' ?") == false) + return(true); + + var data = {sliderid: jQuery("#sliderid").val()} + + UniteAdminRev.ajaxRequest("delete_slider" ,data); + }); + + + //api inputs functionality: + jQuery("#api_wrapper .api-input, #api_area").click(function(){ + jQuery(this).select().focus(); + }); + + //api button functions: + jQuery("#link_show_api").click(function(){ + jQuery("#api_wrapper").show(); + jQuery("#link_show_api").addClass("button-selected"); + + jQuery("#toolbox_wrapper").hide(); + jQuery("#link_show_toolbox").removeClass("button-selected"); + }); + + jQuery("#link_show_toolbox").click(function(){ + jQuery("#toolbox_wrapper").show(); + jQuery("#link_show_toolbox").addClass("button-selected"); + + jQuery("#api_wrapper").hide(); + jQuery("#link_show_api").removeClass("button-selected"); + }); + + + //export slider action + jQuery("#button_export_slider").click(function(){ + var sliderID = jQuery("#sliderid").val(); + var useDummy = jQuery('input[name="export_dummy_images"]').is(':checked'); + var urlAjaxExport = ajaxurl+"?action="+g_uniteDirPlagin+"_ajax_action&client_action=export_slider&dummy="+useDummy+"&nonce=" + g_revNonce; + urlAjaxExport += "&sliderid=" + sliderID; + location.href = urlAjaxExport; + }); + + //preview slider actions + jQuery("#button_preview_slider").click(function(){ + var sliderID = jQuery("#sliderid").val() + openPreviewSliderDialog(sliderID); + }); + + //replace url + jQuery("#button_replace_url").click(function(){ + if(confirm("Are you sure to replace the urls?") == false) + return(false); + + var data = { + sliderid: jQuery("#sliderid").val(), + url_from:jQuery("#replace_url_from").val(), + url_to:jQuery("#replace_url_to").val() + }; + + //some ajax beautifyer + UniteAdminRev.setAjaxLoaderID("loader_replace_url"); + UniteAdminRev.setAjaxHideButtonID("button_replace_url"); + UniteAdminRev.setSuccessMessageID("replace_url_success"); + + UniteAdminRev.ajaxRequest("replace_image_urls" ,data); + }); + + jQuery('input[name="slider_type"]').each(function(){ if(jQuery(this).is(':checked')) jQuery(this).click(); }); //show grid settings for choosen setting + + + jQuery('#reset_slide_button').click(function(){ + if(confirm("Set selected settings on all Slides of this Slider? (This will be saved immediately)") == false) + return(false); + + var data = { + sliderid: jQuery("#sliderid").val(), + reset_transitions:jQuery("#reset_transitions").val(), + reset_transition_duration:jQuery("#reset_transition_duration").val() + }; + + //some ajax beautifyer + //UniteAdminRev.setAjaxLoaderID("reset_slide_loader"); + UniteAdminRev.setAjaxHideButtonID("reset_slide_button"); + //UniteAdminRev.setSuccessMessageID("reset_slide_success"); + + UniteAdminRev.ajaxRequest("reset_slide_settings" ,data); + }); + + jQuery('#reset_transitions option')[0].checked = true; + jQuery('#reset_transition_duration').val(0); + } + + + /** + * init shortcode functionality in the slider new and slider edit views. + */ + var initShortcode = function(){ + + //select shortcode text when click on it. + jQuery("#shortcode").focus(function(){ + this.select(); + }); + jQuery("#shortcode").click(function(){ + this.select(); + }); + + //update shortcode + jQuery("#alias").change(function(){ + updateShortcode(); + }); + + jQuery("#alias").keyup(function(){ + updateShortcode(); + }); + } + + + /** + * update slides order + */ + var updateSlidesOrder = function(sliderID){ + var arrSlideHtmlIDs = jQuery( "#list_slides" ).sortable("toArray"); + + //get slide id's from html (li) id's + var arrIDs = []; + var orderCounter = 0; + jQuery(arrSlideHtmlIDs).each(function(index,value){ + var slideID = value.replace("slidelist_item_",""); + arrIDs.push(slideID); + + //update order visually + orderCounter++; + jQuery("#slidelist_item_"+slideID+" .order-text").text(orderCounter); + }); + + //save order + var data = {arrIDs:arrIDs,sliderID:sliderID}; + + jQuery("#saving_indicator").show(); + UniteAdminRev.ajaxRequest("update_slides_order" ,data,function(){ + jQuery("#saving_indicator").hide(); + }); + + jQuery("#select_sortby").val("menu_order"); + } + + + /** + * init "sliders list" view + */ + this.initSlidersListView = function(){ + + //import slide dialog + jQuery("#button_import_slider").click(function(){ + + jQuery("#dialog_import_slider").dialog({ + modal:true, + resizable:false, + width:600, + height:350, + closeOnEscape:true, + dialogClass:"tpdialogs", + buttons:{ + "Close":function(){ + jQuery(this).dialog("close"); + } + }, + }); //dialog end + + }); + + jQuery(".button_delete_slider").click(function(){ + + var sliderID = this.id.replace("button_delete_",""); + var sliderTitle = jQuery("#slider_title_"+sliderID).text(); + if(confirm("Do you really want to delete '"+sliderTitle+"' ?") == false) + return(false); + + UniteAdminRev.ajaxRequest("delete_slider" ,{sliderid:sliderID}); + }); + + //duplicate slider action + jQuery(".button_duplicate_slider").click(function(){ + var sliderID = this.id.replace("button_duplicate_",""); + UniteAdminRev.ajaxRequest("duplicate_slider" ,{sliderid:sliderID}); + }); + + //preview slider action + jQuery(".button_slider_preview").click(function(){ + + var sliderID = this.id.replace("button_preview_",""); + + openPreviewSliderDialog(sliderID); + }); + + //export slider action on slider overview + jQuery(".export_slider_overview").click(function(){ + + var sliderID = this.id.replace("export_slider_",""); + var useDummy = false;//jQuery('input[name="export_dummy_images"]').is(':checked'); + var urlAjaxExport = ajaxurl+"?action="+g_uniteDirPlagin+"_ajax_action&client_action=export_slider&dummy="+useDummy+"&nonce=" + g_revNonce; + urlAjaxExport += "&sliderid=" + sliderID; + location.href = urlAjaxExport; + }); + + } + + /** + * open preview slider dialog + */ + var openPreviewSliderDialog = function(sliderID){ + + jQuery("#dialog_preview_sliders").dialog({ + modal:true, + resizable:false, + minWidth:1100, + minHeight:500, + closeOnEscape:true, + dialogClass:"tpdialogs", + buttons:{ + "Close":function(){ + jQuery(this).dialog("close"); + } + }, + open:function(event,ui){ + var form1 = jQuery("#form_preview")[0]; + jQuery("#preview_sliderid").val(sliderID); + jQuery("#preview_slider_nonce").val(g_revNonce); + form1.action = g_urlAjaxActions; + form1.submit(); + }, + close:function(){ + var form1 = jQuery("#form_preview")[0]; + jQuery("#preview_sliderid").val("empty_output"); + form1.action = g_urlAjaxActions; + form1.submit(); + } + + }); + } + + /** + * get language array from the language list + */ + var getLangsFromLangList = function(objList){ + var arrLangs = []; + objList.find(".icon_slide_lang").each(function(){ + var lang = jQuery(this).data("lang"); + arrLangs.push(lang); + }); + + return(arrLangs); + } + + + /** + * filter langs float menu by the list of icons + * show only languages in the float menu that not exists in the icons list + * return number of available languages + */ + var filterFloatMenuByListIcons = function(objList,operation){ + var arrLangs = getLangsFromLangList(objList); + var numIcons = 0; + + jQuery("#langs_float_wrapper li.item_lang").each(function(){ + var objItem = jQuery(this); + var lang = objItem.data("lang"); + var found = jQuery.inArray(lang,arrLangs); + + if(operation != "add") + jQuery("#langs_float_wrapper li.operation_sap").hide(); + + if(jQuery.inArray(lang,arrLangs) == -1){ + numIcons++; + objItem.show(); + if(operation != "add") + jQuery("#langs_float_wrapper li.operation_sap").show(); + } + else + objItem.hide(); + }); + + return(numIcons); + } + + + /** + * + * init slides view posts related functions + */ + t.initSlidesListViewPosts = function(sliderID){ + + initSlideListGlobals(sliderID); + + //init sortby + jQuery("#select_sortby").change(function(){ + jQuery("#slides_top_loader").show(); + var data = {}; + data.sliderID = sliderID; + data.sortby = jQuery(this).val(); + UniteAdminRev.ajaxRequest("update_posts_sortby" ,data,function(){ + jQuery("#slides_top_loader").html("Updated, reloading page..."); + location.reload(true); + }); + }); + + // delete single slide + jQuery(".button_delete_slide").click(function(){ + var postID = jQuery(this).data("slideid"); + var data = {slideID:postID,sliderID:sliderID}; + + if(confirm(g_messageDeleteSlide) == false) + return(false); + + UniteAdminRev.ajaxRequest("delete_slide" ,data); + }); + + } + + + /** + * init slide list global functions + */ + var initSlideListGlobals = function(sliderID){ + + //set the slides sortable, init save order + jQuery("#list_slides").sortable({ + axis:"y", + handle:'.col-handle', + update:function(){updateSlidesOrder(sliderID)} + }); + + + //publish / unpublish item + jQuery("#list_slides .icon_state").click(function(){ + var objIcon = jQuery(this); + var objLoader = objIcon.siblings(".state_loader"); + var slideID = objIcon.data("slideid"); + var data = {slider_id:sliderID,slide_id:slideID}; + + objIcon.hide(); + objLoader.show(); + UniteAdminRev.ajaxRequest("toggle_slide_state" ,data,function(response){ + objIcon.show(); + objLoader.hide(); + var currentState = response.state; + + if(currentState == "published"){ + objIcon.removeClass("state_unpublished").addClass("state_published").prop("title","Unpublish Slide"); + }else{ + objIcon.removeClass("state_published").addClass("state_unpublished").prop("title","Publish Slide"); + } + + }); + }); + + //change image + jQuery(".col-image .slide_image").click(function(){ + var slideID = this.id.replace("slide_image_",""); + UniteAdminRev.openAddImageDialog(g_messageChangeImage,function(urlImage,imageID){ + var data = {slider_id:sliderID,slide_id:slideID,url_image:urlImage,image_id:imageID}; + UniteAdminRev.ajaxRequest("change_slide_image" ,data); + }); + }).tipsy({ + gravity:"s", + delayIn: 70 + }); + + } + + + /** + * init "slides list" view + */ + t.initSlidesListView = function(sliderID){ + + initSlideListGlobals(sliderID); + + //quick lang change by lang icon + jQuery("#list_slides").delegate(".icon_slide_lang, .icon_slide_lang_add","click",function(event){ + + event.stopPropagation() + var pos = UniteAdminRev.getAbsolutePos(this); + var posLeft = pos[0] - 135; + var posTop = pos[1] - 60; + + var objIcon = jQuery(this); + + var operation = objIcon.data("operation"); + var isParent = objIcon.data("isparent"); + + if(operation == "add") + jQuery("#langs_float_wrapper .item_operation").hide(); + else{ + jQuery("#langs_float_wrapper .item_operation").show(); + + if(isParent == true) + jQuery("#langs_float_wrapper .item_operation.operation_delete").hide(); + } + + var objList = objIcon.parents(".list_slide_icons"); + filterFloatMenuByListIcons(objList,operation); + + jQuery("#langs_float_wrapper").show().css({left:posLeft,top:posTop}); + jQuery("#langs_float_wrapper").data("iconid",this.id); + }); + + jQuery("body").click(function(){ + jQuery("#langs_float_wrapper").hide(); + }); + + //switch the language + jQuery("#slides_langs_float li a").click(function(){ + var obj = jQuery(this); + var lang = obj.data("lang"); + + var iconID = jQuery("#langs_float_wrapper").data("iconid"); + if(!iconID) + return(true); + + var objIcon = jQuery("#"+iconID); + var objList = objIcon.parents(".list_slide_icons"); + + //set operation + var operation = obj.data("operation"); + + if(operation == undefined || !operation) + operation = objIcon.data("operation"); + + if(operation == undefined || !operation) + operation = "update"; + + var currentLang = objIcon.data("lang"); + var slideID = objIcon.data("slideid"); + + if(currentLang == lang) + return(true); + + //show the loader + if(operation != "preview"){ + objIcon.siblings(".icon_lang_loader").show(); + objIcon.hide(); + } + + if(operation == "edit"){ + var urlSlide = g_patternViewSlide.replace("[slideid]",slideID); + location.href = urlSlide; + return(true); + } + + if(operation == "preview"){ + openPreviewSlideDialog(slideID,false); + return(true); + } + + var data = {sliderid:sliderID,slideid:slideID,lang:lang,operation:operation}; + UniteAdminRev.ajaxRequest("slide_lang_operation" ,data,function(response){ + + objIcon.siblings(".icon_lang_loader").hide(); + + //nandle after response + switch(response.operation){ + case "update": + objIcon.attr("src",response.url_icon); + objIcon.attr("title",response.title); + objIcon.data("lang",lang); + objIcon.show(); + break; + case "add": + objIcon.show(); + objIcon.parent().before(response.html); + + //hide the add icon if all langs included + if(response.isAll == true) + objList.find(".icon_slide_lang_add").hide(); + + break; + case "delete": + objIcon.parent().remove(); + //show the add icon + objList.find(".icon_slide_lang_add").show(); + + break; + } + + }); + + }); + + //new slide + jQuery("#button_new_slide, #button_new_slide_top").click(function(){ + var dialogTitle = jQuery("#button_new_slide").data("dialogtitle"); + + UniteAdminRev.openAddImageDialog(dialogTitle, function(obj){ + var data = {sliderid:sliderID,obj:obj}; + UniteAdminRev.ajaxRequest("add_slide" ,data); + },true); //allow multiple selection + + }); + + //new transparent slide + jQuery("#button_new_slide_transparent, #button_new_slide_transparent_top").click(function(){ + jQuery(this).hide(); + jQuery(".new_trans_slide_loader").show(); + var data = {sliderid:sliderID}; + UniteAdminRev.ajaxRequest("add_slide" ,data); + }); + + //duplicate slide + jQuery(".button_duplicate_slide").click(function(){ + var slideID = this.id.replace("button_duplicate_slide_",""); + var data = {slideID:slideID,sliderID:sliderID}; + UniteAdminRev.ajaxRequest("duplicate_slide" ,data); + }); + + //copy / move slides + jQuery(".button_copy_slide").click(function(){ + if(jQuery(this).hasClass("button-disabled")) + return(false); + + var dialogCopy = jQuery("#dialog_copy_move"); + + var textClose = dialogCopy.data("textclose"); + var textUpdate = dialogCopy.data("textupdate"); + var objButton = jQuery(this); + + var buttons = {}; + buttons[textUpdate] = function(){ + var slideID = objButton.attr("id").replace("button_copy_slide_",""); + var targetSliderID = jQuery("#selectSliders").val(); + var operation = "copy"; + if(jQuery("#radio_move").prop("checked") == "checked") + operation = "move"; + + var data = {slideID:slideID, + sliderID:sliderID, + targetSliderID:targetSliderID, + operation:operation}; + + var objLoader = objButton.siblings(".loader_copy"); + + objButton.hide(); + objLoader.show(); + + UniteAdminRev.ajaxRequest("copy_move_slide" ,data); + jQuery(this).dialog("close"); + }; + + jQuery("#dialog_copy_move").dialog({ + modal:true, + resizable:false, + width:400, + height:300, + closeOnEscape:true, + dialogClass:"tpdialogs", + buttons:buttons + }); //dialog end + + }); + + // delete single slide + jQuery(".button_delete_slide").click(function(){ + var slideID = jQuery(this).data("slideid"); + var data = {slideID:slideID,sliderID:sliderID}; + if(confirm("Delete this slide?") == false) + return(false); + + var objButton = jQuery(this); + var objLoader = objButton.siblings(".loader_delete"); + + objButton.hide(); + objLoader.show(); + + UniteAdminRev.ajaxRequest("delete_slide" ,data); + }); + + //preview slide from the slides list: + jQuery("#list_slides .icon_slide_preview").click(function(){ + var slideID = jQuery(this).data("slideid"); + openPreviewSlideDialog(slideID,false); + }); + + } + + t.saveEditSlide = function(slideID){ + var layers = UniteLayersRev.getLayers(); + + if(JSON && JSON.stringify) + layers = JSON.stringify(layers); + + var data = { + slideid:slideID, + params:UniteSettingsRev.getSettingsObject("form_slide_params"), + layers:layers + }; + + data.params.slide_bg_color = jQuery("#slide_bg_color").val(); + data.params.slide_bg_external = jQuery("#slide_bg_external").val(); + data.params.bg_fit = jQuery("#slide_bg_fit").val(); + data.params.bg_fit_x = jQuery("input[name='bg_fit_x']").val(); + data.params.bg_fit_y = jQuery("input[name='bg_fit_y']").val(); + data.params.bg_repeat = jQuery("#slide_bg_repeat").val(); + data.params.bg_position = jQuery("#slide_bg_position").val(); + data.params.bg_position_x = jQuery("input[name='bg_position_x']").val(); + data.params.bg_position_y = jQuery("input[name='bg_position_y']").val(); + + var slideBgSetting = getSlideBgSettings(); //get new background options + + if(typeof slideBgSetting === 'object' && !jQuery.isEmptyObject(slideBgSetting)){ //add new background options + for(key in slideBgSetting){ + data.params[key] = slideBgSetting[key]; + } + } + + //kenburns & pan zoom + data.params.kenburn_effect = jQuery("input[name='kenburn_effect']:checked").val(); + //data.params.kb_rotation_start = jQuery("input[name='kb_rotation_start']").val(); + //data.params.kb_rotation_end = jQuery("input[name='kb_rotation_end']").val(); + data.params.kb_start_fit = jQuery("input[name='kb_start_fit']").val(); + data.params.kb_end_fit = jQuery("input[name='kb_end_fit']").val(); + + data.params.bg_end_position = jQuery("select[name='bg_end_position']").val(); + data.params.kb_duration = jQuery("input[name='kb_duration']").val(); + data.params.kb_easing = jQuery("select[name='kb_easing']").val(); + + + + UniteAdminRev.setAjaxHideButtonID("button_save_slide,button_save_slide-tb"); + UniteAdminRev.setAjaxLoaderID("loader_update"); + UniteAdminRev.setSuccessMessageID("update_slide_success"); + UniteAdminRev.ajaxRequest("update_slide", data); + } + /** + * init "edit slide" view + */ + this.initEditSlideView = function(slideID,sliderID){ + + // TOGGLE SOME ACCORDION + jQuery('.tp-accordion').click(function() { + + var tpacc=jQuery(this); + if (tpacc.hasClass("tpa-closed")) { + tpacc.parent().parent().parent().find('.tp-closeifotheropen').each(function() { + jQuery(this).slideUp(300); + jQuery(this).parent().find('.tp-accordion').addClass("tpa-closed").addClass("box_closed").find('.postbox-arrow2').html("+"); + }) + + tpacc.parent().find('.toggled-content').slideDown(300); + tpacc.removeClass("tpa-closed").removeClass("box_closed"); + tpacc.find('.postbox-arrow2').html("-"); + } else { + tpacc.parent().find('.toggled-content').slideUp(300); + tpacc.addClass("tpa-closed").addClass("box_closed"); + tpacc.find('.postbox-arrow2').html("+"); + + } + }) + + // MAKE MAX WIDTH OF CONTAINERS. + jQuery('.mw960').each(function() { + var newmw = jQuery('#divLayers').width(); + if (newmw<960) newmw=960; + jQuery(this).css({maxWidth:newmw+"px"}); + }) + + // SORTING AND DEPTH SELECTOR + jQuery('#button_sort_depth').on('click',function() { + jQuery('.layer_sortbox').addClass("depthselected"); + jQuery('.layer_sortbox').removeClass("timeselected"); + }); + + jQuery('#button_sort_time').on('click',function() { + jQuery('.layer_sortbox').removeClass("depthselected"); + jQuery('.layer_sortbox').addClass("timeselected"); + + }); + + + //add slide top link + jQuery("#link_add_slide").click(function(){ + + var data = { + sliderid:sliderID + }; + jQuery("#loader_add_slide").show(); + UniteAdminRev.ajaxRequest("add_slide_fromslideview" ,data); + }); + + //save slide actions + jQuery("#button_save_slide").click(function(){ + t.saveEditSlide(slideID); + }); + + jQuery("#button_save_slide-tb").click(function(){ + t.saveEditSlide(slideID); + }); + + //change image actions + jQuery("#button_change_image").click(function(){ + + UniteAdminRev.openAddImageDialog("Select Slide Image",function(urlImage,imageID){ + if(imageID == undefined) + imageID = ""; + + //set visual image + jQuery("#divLayers").css("background-image","url("+urlImage+")"); + + //update setting input + jQuery("#image_url").val(urlImage); + jQuery("#image_id").val(imageID); + + jQuery("#radio_back_image").attr('checked', 'checked'); + jQuery("#radio_back_image").click(); + + if(jQuery('input[name="kenburn_effect"]:checked').val() == 'on'){ + jQuery('input[name="kb_start_fit"]').change(); + } + }); //dialog + }); //change image click. + + + // slide options hide / show + jQuery("#link_hide_options").click(function(){ + + if(jQuery("#slide_params_holder").is(":visible") == true){ + jQuery("#slide_params_holder").hide("slow"); + jQuery(this).text("Show Slide Options").addClass("link-selected"); + }else{ + jQuery("#slide_params_holder").show("slow"); + jQuery(this).text("Hide Slide Options").removeClass("link-selected"); + } + + }); + + + //preview slide actions - open preveiw dialog + jQuery("#button_preview_slide").click(function(){ + openPreviewSlideDialog(slideID,true); + }); + //preview slide actions - open preveiw dialog + jQuery("#button_preview_slide-tb").click(function(){ + openPreviewSlideDialog(slideID,true); + }); + + //init background options + jQuery("#radio_back_image, #radio_back_trans, #radio_back_solid, #radio_back_external").click(function(){ + var currentType = jQuery("#background_type").val(); + var bgType = jQuery(this).data("bgtype"); + + if(currentType == bgType) + return(true); + + //disable image button + if(bgType == "image") + jQuery("#button_change_image").removeClass("button-disabled"); + else + jQuery("#button_change_external").addClass("button-disabled"); + + if(bgType == "solid") + jQuery("#slide_bg_color").removeClass("disabled").prop("disabled",""); + else + jQuery("#slide_bg_color").addClass("disabled").prop("disabled","disabled"); + + if(bgType == "external"){ + jQuery("#slide_bg_external").removeClass("disabled").prop("disabled",""); + jQuery("#button_change_image").removeClass("button-disabled"); + }else{ + jQuery("#slide_bg_external").addClass("disabled").prop("disabled","disabled"); + jQuery("#button_change_external").addClass("button-disabled"); + } + + + jQuery("#background_type").val(bgType); + + setSlideBGByType(bgType); + + }); + + jQuery("#button_change_external").click(function(){ + var bgType = jQuery("#radio_back_external:checked").data("bgtype"); + + if(bgType == "external"){ + jQuery("#slide_bg_external").removeClass("disabled").prop("disabled",""); + jQuery("#button_change_image").removeClass("button-disabled"); + setSlideBGByType(bgType); + + + if(jQuery('input[name="kenburn_effect"]:checked').val() == 'on'){ + jQuery('input[name="kb_start_fit"]').change(); + } + } + }); + + + //on change bg color event + UniteAdminRev.setColorPickerCallback(function(){ + var bgType = jQuery("#background_type").val(); + if(bgType == "solid"){ + var bgColor = jQuery("#slide_bg_color").val(); + jQuery("#divLayers").css("background-color",bgColor); + } + + }); + + + //on change title event + jQuery("#title").on('input',function(e){ + jQuery(".slide_title").text(jQuery("#title").val()); + }); + + jQuery(".list_slide_links").sortable({ + update:function(){updateSlidesOrderEdit(sliderID)} + }); + + + /** + * update slides order in slide edit + */ + var updateSlidesOrderEdit = function(sliderID){ + var arrSlideHtmlIDs = jQuery( ".list_slide_links" ).sortable("toArray"); + + //get slide id's from html (li) id's + var arrIDs = []; + jQuery(arrSlideHtmlIDs).each(function(index,value){ + var slideID = value.replace("slidelist_item_",""); + arrIDs.push(slideID); + }); + + //save order + var data = {arrIDs:arrIDs,sliderID:sliderID}; + + jQuery("#loader_add_slide").show(); + UniteAdminRev.ajaxRequest("update_slides_order" ,data,function(){ + jQuery("#loader_add_slide").hide(); + }); + + } + + jQuery('.inputDatePicker').datepicker({ + dateFormat : 'dd-mm-yy 00:00' + }); + + + // delete single slide + jQuery("#button_delete_slide").click(function(){ + var data = {slideID:slideID,sliderID:sliderID}; + + if(confirm(g_messageDeleteSlide) == false) + return(false); + + UniteAdminRev.ajaxRequest("delete_slide" ,data); + }); + + + }//init slide view + + + /** + * open preview slide dialog + */ + var openPreviewSlideDialog = function(slideID,useParams){ + + if(useParams === undefined) + useParams = true; + + var iframePreview = jQuery("#frame_preview"); + var previewWidth = iframePreview.width() + 10; + var previewHeight = iframePreview.height() + 10; + var iframe = jQuery("#frame_preview"); + + jQuery("#dialog_preview").dialog({ + modal:true, + resizable:false, + minWidth:previewWidth, + minHeight:previewHeight, + closeOnEscape:true, + dialogClass:"tpdialogs", + buttons:{ + "Close":function(){ + jQuery(this).dialog("close"); + } + }, + open:function(event,ui){ + var form1 = jQuery("#form_preview_slide")[0]; + jQuery("#preview_slide_nonce").val(g_revNonce); + + var objData = { + slideid:slideID, + }; + + if(useParams == true){ + objData.params = UniteSettingsRev.getSettingsObject("form_slide_params"), + objData.params.slide_bg_color = jQuery("#slide_bg_color").val(); + objData.params.slide_bg_external = jQuery("#slide_bg_external").val(); + objData.params.bg_fit = jQuery("#slide_bg_fit").val(); + objData.params.bg_fit_x = jQuery("input[name='bg_fit_x']").val(); + objData.params.bg_fit_y = jQuery("input[name='bg_fit_y']").val(); + objData.params.bg_repeat = jQuery("#slide_bg_repeat").val(); + objData.params.bg_position = jQuery("#slide_bg_position").val(); + objData.params.bg_position_x = jQuery("input[name='bg_position_x']").val(); + objData.params.bg_position_y = jQuery("input[name='bg_position_y']").val(); + + //kenburns & pan zoom + objData.params.kenburn_effect = jQuery("input[name='kenburn_effect']:checked").val(); + //objData.params.kb_rotation_start = jQuery("input[name='kb_rotation_start']").val(); + //objData.params.kb_rotation_end = jQuery("input[name='kb_rotation_end']").val(); + objData.params.kb_start_fit = jQuery("input[name='kb_start_fit']").val(); + objData.params.kb_end_fit = jQuery("input[name='kb_end_fit']").val(); + + objData.params.bg_end_position = jQuery("select[name='bg_end_position']").val(); + objData.params.kb_duration = jQuery("input[name='kb_duration']").val(); + objData.params.kb_easing = jQuery("select[name='kb_easing']").val(); + + objData.layers = UniteLayersRev.getLayers() + } + + var jsonData = JSON.stringify(objData); + + jQuery("#preview_slide_data").val(jsonData); + form1.action = g_urlAjaxActions; + form1.client_action = "preview_slide"; + form1.submit(); + }, + close:function(){ //destroy the loaded preview + var form1 = jQuery("#form_preview_slide")[0]; + form1.action = g_urlAjaxActions; + jQuery("#preview_slide_data").val("empty_output"); + form1.submit(); + } + }); + + } + + + /** + * set slide background by type (image, solid, bg). + */ + var setSlideBGByType = function(bgType){ + switch(bgType){ + case "image": + var urlImage = jQuery("#image_url").val(); + jQuery("#divLayers").css("background-image","url('"+urlImage+"')"); + jQuery("#divLayers").css("background-color","transparent"); + jQuery("#divLayers").removeClass("trans_bg"); + if(jQuery('input[name="kenburn_effect"]:checked').val() == 'on'){ + jQuery('input[name="kb_start_fit"]').change(); + } + break; + case "trans": + jQuery("#divLayers").css("background-image","none"); + jQuery("#divLayers").css("background-color","transparent"); + jQuery("#divLayers").addClass("trans_bg"); + break; + case "solid": + jQuery("#divLayers").css("background-image","none"); + jQuery("#divLayers").removeClass("trans_bg"); + var bgColor = jQuery("#slide_bg_color").val(); + jQuery("#divLayers").css("background-color",bgColor); + break; + case "external": + var urlImage = jQuery("#slide_bg_external").val(); + jQuery("#divLayers").css("background-image","url('"+urlImage+"')"); + jQuery("#divLayers").css("background-color","transparent"); + jQuery("#divLayers").removeClass("trans_bg"); + if(jQuery('input[name="kenburn_effect"]:checked').val() == 'on'){ + jQuery('input[name="kb_start_fit"]').change(); + } + break; + } + + } + + var getSlideBgSettings = function(){ + var retParams = new Object; + + retParams['bg_fit'] = jQuery('#slide_bg_fit').val(); + if(retParams['bg_fit'] == 'percentage'){ + retParams['bg_fit_x'] = jQuery('input[name="bg_fit_x"]').val(); + retParams['bg_fit_y'] = jQuery('input[name="bg_fit_y"]').val(); + } + + retParams['bg_position'] = jQuery('#slide_bg_position').val(); + if(retParams['bg_position'] == 'percentage'){ + retParams['bg_position_x'] = jQuery('input[name="bg_position_x"]').val(); + retParams['bg_position_y'] = jQuery('input[name="bg_position_y"]').val(); + } + + retParams['bg_repeat'] = jQuery('#slide_bg_repeat').val(); + + return retParams; + } + + + /** + * global style part + */ + + var g_codemirrorCssDynamic = null; + var g_codemirrorCssStatic = null; + var staticStyles = null; + var urlStaticCssCaptions = null; + + /** + * set static captions url for refreshing when needed + */ + t.setStaticCssCaptionsUrl = function(url){ + urlStaticCssCaptions = url; + } + + /** + * get static captions url for refreshing when needed + */ + t.getUrlStaticCssCaptions = function(){ + return urlStaticCssCaptions; + } + + t.initGlobalStyles = function(){ + initGlobalCssAccordion(); + initGlobalCssEditor(); + } + + t.setCodeMirrorStaticEditor = function(){ + g_codemirrorCssStatic = CodeMirror.fromTextArea(document.getElementById("textarea_edit_static"), { lineNumbers: true }); + } + + t.setCodeMirrorDynamicEditor = function(){ + g_codemirrorCssDynamic = CodeMirror.fromTextArea(document.getElementById("textarea_show_dynamic_styles"), { + lineNumbers: true, + readOnly: true + }); + } + + var initGlobalCssAccordion = function(){ + jQuery("#css-static-accordion").accordion({ + heightStyle: "content", + activate: function(event, ui){ + if(g_codemirrorCssStatic != null) g_codemirrorCssStatic.refresh(); + if(g_codemirrorCssDynamic != null) g_codemirrorCssDynamic.refresh(); + } + }); + } + + var initGlobalCssEditor = function(){ + + jQuery('#button_edit_css_global').click(function(){ + //if(!UniteLayersRev.getLayerGeneralParamsStatus()) return false; //false if fields are disabled + + jQuery("#css-static-accordion").accordion({ active: 1 }); + + UniteAdminRev.ajaxRequest("get_static_css","",function(response){ + var cssData = response.data; + + if(g_codemirrorCssStatic != null) + g_codemirrorCssStatic.setValue(cssData); + else{ + jQuery("#textarea_edit_static").val(cssData); + setTimeout('RevSliderAdmin.setCodeMirrorStaticEditor()',500); + } + }); + + UniteAdminRev.ajaxRequest("get_dynamic_css","",function(response){ + var cssData = response.data; + + if(g_codemirrorCssDynamic != null) + g_codemirrorCssDynamic.setValue(cssData); + else{ + jQuery("#textarea_show_dynamic_styles").val(cssData); + setTimeout('RevSliderAdmin.setCodeMirrorDynamicEditor()',500); + } + }); + + jQuery("#css_static_editor_wrap").dialog({ + modal:true, + resizable:false, + title:'Global Styles Editor', + minWidth:700, + minHeight:500, + closeOnEscape:true, + open:function () { + jQuery(this).closest(".ui-dialog") + .find(".ui-button").each(function(i) { + var cl; + if (i==0) cl="revgray"; + if (i==1) cl="revgreen"; + if (i==2) cl="revred"; + jQuery(this).addClass(cl).addClass("button-primary").addClass("rev-uibuttons"); + }) + }, + buttons:{ + Save:function(){ + if(!confirm("Really update global styles?")){ + return false; + } + + UniteAdminRev.setErrorMessageID("dialog_error_message"); + var data; + if(g_codemirrorCssStatic != null) + data = g_codemirrorCssStatic.getValue(); + else + data = jQuery("#textarea_edit_static").val(); + + UniteAdminRev.ajaxRequest("update_static_css",data,function(response){ + jQuery("#dialog_success_message").show().html(response.message); + + if(g_codemirrorCssStatic != null) + g_codemirrorCssStatic.setValue(response.css); + else + jQuery("#textarea_edit_static").val(css); + + }); + + if(urlStaticCssCaptions) + setTimeout('UniteAdminRev.loadCssFile(RevSliderAdmin.getUrlStaticCssCaptions(),"rs-plugin-static-css");',1000); + + jQuery(this).dialog("close"); + }, + "Cancel":function(){ + jQuery(this).dialog("close"); + } + } + }); + }); + } + +} diff --git a/src/wp-content/plugins/revslider/js/settings.js b/src/wp-content/plugins/revslider/js/settings.js new file mode 100644 index 0000000..84363f4 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/settings.js @@ -0,0 +1,340 @@ + +var UniteSettingsRev = new function(){ + + var arrControls = {}; + var colorPicker; + + var t=this; + + this.getSettingsObject = function(formID){ + var obj = new Object(); + var form = document.getElementById(formID); + var name,value,type,flagUpdate; + + //enabling all form items connected to mx + var len = form.elements.length; + for(var i=0; i -1){ + name = name.replace('[]', ''); + if(typeof obj[name] !== 'object') obj[name] = []; + + obj[name][Object.keys(obj[name]).length] = value; + }else{ + obj[name] = value; + } + } + } + return(obj); + } + + /** + * on selects change - impiment the hide/show, enabled/disables functionality + */ + var onSettingChange = function(){ + + var controlValue = this.value.toLowerCase(); + var controlName = this.name; + + if(!arrControls[this.name]) return(false); + + jQuery(arrControls[this.name]).each(function(){ + + var childInput = document.getElementById(this.name); + var childRow = document.getElementById(this.name + "_row"); + var value = this.value.toLowerCase(); + var isChildRadio = (childInput && childInput.tagName == "SPAN" && jQuery(childInput).hasClass("radio_wrapper")); + + switch(this.type){ + case "enable": + case "disable": + + if(childInput){ //disable + if(this.type == "enable" && controlValue != this.value || this.type == "disable" && controlValue == this.value){ + childRow.className = "disabled"; + + if(childInput){ + childInput.disabled = true; + childInput.style.color = ""; + } + + if(isChildRadio) + jQuery(childInput).children("input").prop("disabled","disabled").addClass("disabled"); + } + else{ //enable + childRow.className = ""; + + if(childInput) + childInput.disabled = false; + + if(isChildRadio) + jQuery(childInput).children("input").prop("disabled","").removeClass("disabled"); + + //color the input again + if(jQuery(childInput).hasClass("inputColorPicker")) g_picker.linkTo(childInput); + } + + } + break; + case "show": + if(controlValue == this.value) jQuery(childRow).show(); + else jQuery(childRow).hide(); + break; + case "hide": + if(controlValue == this.value) jQuery(childRow).hide(); + else jQuery(childRow).show(); + break; + } + }); + } + + + /** + * combine controls to one object, and init control events. + */ + var initControls = function(){ + + //combine controls + for(key in g_settingsObj){ + var obj = g_settingsObj[key]; + + for(controlKey in obj.controls){ + arrControls[controlKey] = obj.controls[controlKey]; + } + } + + //init events + jQuery(".settings_wrapper select").change(onSettingChange); + jQuery(".settings_wrapper input[type='radio']").change(onSettingChange); + + } + + + //init color picker + var initColorPicker = function(){ + var colorPickerWrapper = jQuery('#divColorPicker'); + + colorPicker = jQuery.farbtastic('#divColorPicker'); + + jQuery(".inputColorPicker").focus(function(){ + colorPicker.linkTo(this); + colorPickerWrapper.show(); + var input = jQuery(this); + var offset = input.offset(); + + var offsetView = jQuery("#viewWrapper").offset(); + + colorPickerWrapper.css({ + "left":offset.left + input.width()+20-offsetView.left, + "top":offset.top - colorPickerWrapper.height() + 100-offsetView.top + }); + + if (jQuery(input.data('linkto'))) { + + var oldval = jQuery(this).val(); + jQuery(this).data('int',setInterval(function() { + if(input.val() != oldval){ + oldval = input.val(); + jQuery('#css_preview').css(input.data('linkto'), oldval); + jQuery('input[name="css_'+input.data('linkto')+'"]').val(oldval); + } + } ,200)); + } + + }).blur(function() { + clearInterval(jQuery(this).data('int')); + + }).click(function(){ + + return(false); //prevent body click + }).change(function(){ + colorPicker.linkTo(this); + colorPicker.setColor(jQuery(this).val()); + }); + + colorPickerWrapper.click(function(){ + return(false); //prevent body click + }); + + jQuery("body").click(function(){ + colorPickerWrapper.hide(); + }); + } + + /** + * close all accordion items + */ + var closeAllAccordionItems = function(formID){ + jQuery("#"+formID+" .unite-postbox .inside").slideUp("fast"); + jQuery("#"+formID+" .unite-postbox h3").addClass("box_closed"); + } + + /** + * init side settings accordion - started from php + */ + t.initAccordion = function(formID){ + var classClosed = "box_closed"; + jQuery("#"+formID+" .unite-postbox h3").click(function(){ + var handle = jQuery(this); + + //open + if(handle.hasClass(classClosed)){ + closeAllAccordionItems(formID); + handle.removeClass(classClosed).siblings(".inside").slideDown("fast"); + }else{ //close + handle.addClass(classClosed).siblings(".inside").slideUp("fast"); + } + + }); + } + + /** + * image search + */ + var initImageSearch = function(){ + + jQuery(".button-image-select").click(function(){ + var settingID = this.id.replace("_button",""); + UniteAdminRev.openAddImageDialog("Choose Image",function(urlImage){ + + //update input: + jQuery("#"+settingID).val(urlImage); + + //update preview image: + var urlShowImage = UniteAdminRev.getUrlShowImage(urlImage,100,70,true); + jQuery("#" + settingID + "_button_preview").html(""); + + }); + }); + + jQuery(".button-image-select-video").click(function(){ + UniteAdminRev.openAddImageDialog("Choose Image",function(urlImage){ + + //update input: + jQuery("#input_video_preview").val(urlImage); + + //update preview image: + var urlShowImage = UniteAdminRev.getUrlShowImage(urlImage,200,150,true); + jQuery("#video-thumbnail-preview").attr('src', urlShowImage); + + }); + }); + + jQuery(".button-image-remove-video").click(function(){ + jQuery("#input_video_preview").val(''); + + if(jQuery('#video_block_vimeo').css('display') != 'none') + jQuery("#button_vimeo_search").trigger("click"); + + if(jQuery('#video_block_youtube').css('display') != 'none') + jQuery("#button_youtube_search").trigger("click"); + + }); + + } + + + + /** + * init the settings function, set the tootips on sidebars. + */ + var init = function(){ + + //init tipsy + jQuery(".list_settings li .setting_text").tipsy({ + gravity:"e", + delayIn: 70 + }); + + jQuery(".tipsy_enabled_top").tipsy({ + gravity:"s", + delayIn: 70 + }); + + jQuery(".button-primary").tipsy({ + gravity:"s", + delayIn: 70 + }); + + //init controls + initControls(); + + initColorPicker(); + + initImageSearch(); + + //init checklist + jQuery(".settings_wrapper .input_checklist").each(function(){ + var select = jQuery(this); + var ominWidth = select.data("minwidth"); + + if (ominWidth==undefined) ominWidth="none" + + select.dropdownchecklist({ + zIndex:1000, + minWidth:ominWidth, + onItemClick: function(checkbox,selector) { + + for (var i=0;i<20;i++) + if (checkbox.val()=="notselectable"+i) { + //console.log(checkbox.val()); + checkbox.attr("checked",false); + } + + } + }); + + select.parent().find('input').each(function() { + var option = jQuery(this); + + for (var i=0;i<20;i++) + if (option.val()=="notselectable"+i) option.parent().addClass("dropdowntitleoption"); + }) + + }); + + } + + + + //call "constructor" + jQuery(document).ready(function(){ + init(); + }); + +} // UniteSettings class end + + diff --git a/src/wp-content/plugins/revslider/js/tbld.js b/src/wp-content/plugins/revslider/js/tbld.js new file mode 100644 index 0000000..4ea4a55 --- /dev/null +++ b/src/wp-content/plugins/revslider/js/tbld.js @@ -0,0 +1,29 @@ +(function() { + tinymce.create('tinymce.plugins.revslider', { + + init : function(ed, url) { + }, + createControl : function(n, cm) { + + if(n=='revslider'){ + var mlb = cm.createListBox('revslider', { + title : 'revslider', + onselect : function(v) { + if(tinyMCE.activeEditor.selection.getContent() == ''){ + tinyMCE.activeEditor.selection.setContent( v ) + } + } + }); + + for(var i in revslider_shortcodes) + mlb.add(revslider_shortcodes[i],revslider_shortcodes[i]); + + return mlb; + } + return null; + } + + + }); + tinymce.PluginManager.add('revslider', tinymce.plugins.revslider); +})(); \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/languages/index.php b/src/wp-content/plugins/revslider/languages/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/languages/revslider-de_DE.mo b/src/wp-content/plugins/revslider/languages/revslider-de_DE.mo new file mode 100644 index 0000000..f9e6aa6 Binary files /dev/null and b/src/wp-content/plugins/revslider/languages/revslider-de_DE.mo differ diff --git a/src/wp-content/plugins/revslider/languages/revslider-de_DE.po b/src/wp-content/plugins/revslider/languages/revslider-de_DE.po new file mode 100644 index 0000000..2af0a83 --- /dev/null +++ b/src/wp-content/plugins/revslider/languages/revslider-de_DE.po @@ -0,0 +1,3210 @@ +msgid "" +msgstr "" +"Project-Id-Version: Revolution Slider v4.1.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2013-12-19 13:28:34+0000\n" +"Last-Translator: admin \n" +"Language-Team: \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: CSL v1.x\n" +"X-Poedit-Language: German\n" +"X-Poedit-Country: GERMANY\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n" +"X-Poedit-Basepath: ../\n" +"X-Poedit-Bookmarks: \n" +"X-Poedit-SearchPath-0: .\n" +"X-Textdomain-Support: yes" + +#: inc_php/framework/settings_product_sidebar.class.php:474 +#@ revslider +msgid "text" +msgstr "text" + +#: inc_php/revslider_output.class.php:1221 +#@ revslider +msgid "Revolution Slider Error" +msgstr "Revolution Slider Fehler" + +#: inc_php/revslider_settings_product.class.php:118 +#: inc_php/revslider_settings_product.class.php:132 +#: inc_php/revslider_settings_product.class.php:146 +#: inc_php/revslider_settings_product.class.php:160 +#: inc_php/revslider_settings_product.class.php:174 +#: inc_php/revslider_settings_product.class.php:188 +#@ revslider +msgid "Screen Width" +msgstr "Fenster Breite" + +#: inc_php/revslider_settings_product.class.php:124 +#: inc_php/revslider_settings_product.class.php:138 +#: inc_php/revslider_settings_product.class.php:152 +#: inc_php/revslider_settings_product.class.php:166 +#: inc_php/revslider_settings_product.class.php:180 +#: inc_php/revslider_settings_product.class.php:194 +#@ revslider +msgid "Slider Width" +msgstr "Slider Breite" + +#: inc_php/revslider_settings_product.class.php:217 +#: inc_php/revslider_settings_product.class.php:220 +#: inc_php/revslider_settings_product.class.php:223 +#@ revslider +msgid "Grid Width:" +msgstr "Grid Breite:" + +#: inc_php/revslider_settings_product.class.php:218 +#: inc_php/revslider_settings_product.class.php:221 +#: inc_php/revslider_settings_product.class.php:224 +#@ revslider +msgid "Grid Height:" +msgstr "Grid Höhe:" + +#: inc_php/revslider_widget.class.php:8 +#@ revslider +msgid "Displays a revolution slider on the page" +msgstr "Zeige einen Revolution Slider auf der Seite" + +#: inc_php/revslider_widget.class.php:9 +#@ revslider +msgid "Revolution Slider" +msgstr "Revolution Slider" + +#: inc_php/revslider_widget.class.php:22 +#@ revslider +msgid "No sliders found, Please create a slider" +msgstr "Keine Slider gefunden. Bitte erstellen Sie einen Slider" + +#: revslider.php:102 +#@ revslider +msgid "If you want to use the PHP function \"putRevSlider\" in your code please make sure to check \" " +msgstr "Wenn Sie die PHP Funktion \"putRevSlider\" in Ihrem Code, bitte stellen Sie sicher \"" + +#: revslider.php:102 +#@ revslider +msgid " \" in the backend's \"General Settings\" (top right panel).

            Or add the current page to the \"" +msgstr "\" in Ihrem Backend unter \"Generelle Einstellungen\" zu aktivieren (oben rechts).

            Oder füge die derzeitige Seite zur \"" + +#: revslider.php:102 +#@ default +msgid "\" option box." +msgstr "" + +#: revslider.php:117 +#@ revslider +msgid "Revolution Slider Error:" +msgstr "Revolution Slider Fehler:" + +#: revslider_admin.php:322 +#@ revslider +msgid "importing slider setings and data..." +msgstr "importiere Slider Einstellungen und Daten..." + +#: revslider_admin.php:338 +#@ revslider +msgid "Go Back" +msgstr "Zurück" + +#: revslider_admin.php:341 +#@ revslider +msgid "Slider Import Success, redirecting..." +msgstr "Slider Import Erfolgreich. Sie werden weitergeleitet..." + +#: revslider_admin.php:399 +#@ revslider +msgid "The slider successfully created" +msgstr "Der Slider wurde erfolgreich erstellt" + +#: revslider_admin.php:411 +#@ revslider +msgid "Slider updated" +msgstr "Slider aktualisiert" + +#: revslider_admin.php:423 +#@ revslider +msgid "The slider deleted" +msgstr "Slider wurde gelöscht" + +#: revslider_admin.php:432 +#@ revslider +msgid "The duplicate successfully, refreshing page..." +msgstr "Duplizierung erfolgreich. Seite wird neu geladen..." + +#: revslider_admin.php:440 +#@ revslider +msgid "Slide Created" +msgstr "Slide Erstellt" + +#: revslider_admin.php:443 +#@ revslider +msgid "Slides Created" +msgstr "Slides Erstellt" + +#: revslider_admin.php:452 +#@ revslider +msgid "Slide Created, redirecting..." +msgstr "Slide Erstellt. Sie werden weitergeleitet..." + +#: revslider_admin.php:459 +#@ revslider +msgid "Slide updated" +msgstr "Slide aktualisiert" + +#: revslider_admin.php:466 +#@ revslider +msgid "Slide Deleted Successfully" +msgstr "Slide erfolgreich gelöscht" + +#: revslider_admin.php:476 +#@ revslider +msgid "Slide Duplicated Successfully" +msgstr "Slide erfolgreich dupliziert" + +#: revslider_admin.php:483 +#@ revslider +msgid "The operation successfully, refreshing page..." +msgstr "Die Operation war erfolgreich. Seite wird neu geladen" + +#: revslider_admin.php:524 +#@ revslider +msgid "Order updated successfully" +msgstr "Sortierung erfolgreich aktualisiert" + +#: revslider_admin.php:530 +#@ revslider +msgid "Slide Changed Successfully" +msgstr "Slide erfolgreich geändert" + +#: revslider_admin.php:557 +#@ revslider +msgid "General settings updated" +msgstr "Generelle Einstellungen aktualisiert" + +#: settings/general_settings.php:6 +#@ revslider +msgid "To Admin" +msgstr "Administrator" + +#: settings/general_settings.php:7 +#@ revslider +msgid "To Editor, Admin" +msgstr "Editor, Admin" + +#: settings/general_settings.php:8 +#@ revslider +msgid "Author, Editor, Admin" +msgstr "Author, Editor, Admin" + +#: settings/general_settings.php:9 +#@ revslider +msgid "View Plugin Permission" +msgstr "Zeige Plugin Rechte" + +#: settings/general_settings.php:11 +#@ revslider +msgid "The role of user that can view and edit the plugin" +msgstr "Die Rolle der Benutzer, die das Plugin benutzen können" + +#: settings/general_settings.php:14 +#: settings/general_settings.php:23 +#: settings/slider_settings.php:91 +#: settings/slider_settings.php:95 +#: settings/slider_settings.php:96 +#: settings/slider_settings_xml_lang.php:14 +#: views/templates/edit_layers.php:95 +#@ revslider +msgid "On" +msgstr "An" + +#: settings/general_settings.php:14 +#: settings/general_settings.php:23 +#: settings/slider_settings.php:91 +#: settings/slider_settings.php:95 +#: settings/slider_settings.php:96 +#: settings/slider_settings_xml_lang.php:15 +#: views/templates/edit_layers.php:95 +#@ revslider +msgid "Off" +msgstr "Aus" + +#: settings/general_settings.php:15 +#@ revslider +msgid "Include RevSlider libraries globally" +msgstr "Inkludiere RevSlider bibliotheken global" + +#: settings/general_settings.php:17 +#@ revslider +msgid "Add css and js includes only on all pages. Id turned to off they will added to pages where the rev_slider shortcode exists only. This will work only when the slider added by a shortcode." +msgstr "Füge CSS und JS allen Seiten ein. Wenn es aus ist, werden diese nur zu Seiten hinzugefügt, wo der rev_slider shortcode existiert. Dies wird nur funktionieren wenn der Slider per shortcode hinzugefügt wurde." + +#: settings/general_settings.php:19 +#@ revslider +msgid "Pages to include RevSlider libraries" +msgstr "Seiten in dem die RevSlider Bibliotheken hinzugefügt werden" + +#: settings/general_settings.php:20 +#@ revslider +msgid "Specify the page id's that the front end includes will be included in. Example: 2,3,5 also: homepage,3,4" +msgstr "Spezifiere die Seiten ID's in denen die Frontend Inkludieren eingebunden werden. Beispiel: 2,3,5 oder: homepage,3,4" + +#: settings/layer_settings.php:21 +#: settings/layer_settings.php:22 +#@ revslider +msgid "Layer Params" +msgstr "Ebenen Parameter" + +#: settings/layer_settings.php:21 +#: settings/layer_settings.php:22 +#@ revslider +msgid "layer_params" +msgstr "ebenen_parameter" + +#: settings/layer_settings.php:23 +#@ revslider +msgid "layer_caption" +msgstr "layer_caption" + +#: settings/layer_settings.php:23 +#@ revslider +msgid "caption_green" +msgstr "caption_green" + +#: settings/layer_settings.php:23 +#@ revslider +msgid "Style" +msgstr "Style" + +#: settings/layer_settings.php:31 +#@ revslider +msgid "Text / Html" +msgstr "Text / Html" + +#: settings/layer_settings.php:32 +#@ revslider +msgid "Image Link" +msgstr "Bild Link" + +#: settings/layer_settings.php:33 +#: settings/slide_settings.php:88 +#@ revslider +msgid "Same Window" +msgstr "Gleiches Fenster" + +#: settings/layer_settings.php:33 +#: settings/slide_settings.php:88 +#@ revslider +#@ default +msgid "New Window" +msgstr "Neues Fenster" + +#: settings/layer_settings.php:33 +#: settings/slide_settings.php:88 +#@ revslider +msgid "Link Open In" +msgstr "Link öffnen in" + +#: settings/layer_settings.php:37 +#: settings/layer_settings.php:80 +#: settings/layer_settings.php:85 +#: settings/slider_settings_xml_lang.php:89 +#@ revslider +msgid "ms" +msgstr "ms" + +#: settings/layer_settings.php:39 +#@ revslider +msgid "Hide Under Width" +msgstr "Unter Breite Verstecken" + +#: settings/layer_settings.php:56 +#@ revslider +msgid "OffsetX" +msgstr "OffsetX" + +#: settings/layer_settings.php:57 +#: settings/layer_settings.php:59 +#@ revslider +msgid "X" +msgstr "X" + +#: settings/layer_settings.php:61 +#@ revslider +msgid "OffsetY" +msgstr "OffsetY" + +#: settings/layer_settings.php:62 +#: settings/layer_settings.php:64 +#@ revslider +msgid "Y" +msgstr "Y" + +#: settings/layer_settings.php:69 +#@ revslider +msgid "Link To Slide" +msgstr "Link Zur Slide" + +#: settings/layer_settings.php:71 +#: settings/slider_settings_xml_lang.php:38 +#@ revslider +msgid "px" +msgstr "px" + +#: settings/layer_settings.php:72 +#@ revslider +msgid "Scroll Under Slider Offset" +msgstr "Scroll Unter Slider Offset" + +#: settings/layer_settings.php:76 +#@ revslider +msgid "Edit Video" +msgstr "Video Bearbeiten" + +#: settings/layer_settings.php:74 +#@ revslider +msgid "Change Image Source" +msgstr "Bild Quelle Ändern" + +#: settings/layer_settings.php:81 +#@ revslider +msgid "End Time" +msgstr "Endzeit" + +#: settings/layer_settings.php:82 +#@ revslider +msgid "End Speed" +msgstr "Endgeschwindigkeit" + +#: settings/layer_settings.php:83 +#@ revslider +msgid "End Animation" +msgstr "Endanimation" + +#: settings/layer_settings.php:88 +#@ revslider +msgid "No Corner" +msgstr "Keine Ecken" + +#: settings/layer_settings.php:89 +#@ revslider +msgid "Sharp" +msgstr "Scharf" + +#: settings/layer_settings.php:90 +#@ revslider +msgid "Sharp Reversed" +msgstr "Scharf Umgekehrt" + +#: settings/layer_settings.php:92 +#@ revslider +msgid "Left Corner" +msgstr "Link Ecke" + +#: settings/layer_settings.php:93 +#@ revslider +msgid "Right Corner" +msgstr "Rechte Ecke" + +#: settings/layer_settings.php:94 +#@ revslider +msgid "Responsive Through All Levels" +msgstr "Responsive Auf Allen Ebenen" + +#: settings/slide_settings.php:15 +#@ revslider +msgid "The title of the slide, will be shown in the slides list." +msgstr "Der Titel der Slide, wird auf der Slides Liste angezeigt" + +#: settings/slide_settings.php:16 +#@ revslider +msgid "Slide" +msgstr "Slide" + +#: settings/slide_settings.php:16 +#@ revslider +msgid "Slide Title" +msgstr "Slide Titel" + +#: settings/slide_settings.php:19 +#@ revslider +msgid "The state of the slide. The unpublished slide will be excluded from the slider." +msgstr "Der Status der Slide, eine unpublizierte Slide wird im Slider nicht angezeigt" + +#: settings/slide_settings.php:20 +#@ revslider +msgid "Published" +msgstr "Publiziert" + +#: settings/slide_settings.php:20 +#@ revslider +msgid "Unpublished" +msgstr "Unpubliziert" + +#: settings/slide_settings.php:20 +#@ revslider +msgid "State" +msgstr "Status" + +#: settings/slide_settings.php:42 +#@ revslider +msgid "The appearance transitions of this slide." +msgstr "Der generelle Übergang der Slide beim erscheinen" + +#: settings/slide_settings.php:43 +#@ revslider +msgid "Transitions" +msgstr "Übergang" + +#: settings/slide_settings.php:46 +#@ revslider +msgid "The number of slots or boxes the slide is divided into. If you use boxfade, over 7 slots can be juggy." +msgstr "Die Anzahl der Slots oder Boxen, in die die Slide geteilt wird. Wenn Sie boxfade benutzen, wählen Sie bitte nicht mehr als 7 Slots." + +#: settings/slide_settings.php:49 +#@ revslider +msgid "Slot Amount" +msgstr "Slot Anzahl" + +#: settings/slide_settings.php:52 +#@ revslider +msgid "Rotation (-720 -> 720, 999 = random) Only for Simple Transitions." +msgstr "Rotation (-720 -> 720, 999 = zufällig) Nur für einfache Übergänge." + +#: settings/slide_settings.php:55 +#: views/templates/edit_layers.php:475 +#@ revslider +msgid "Rotation" +msgstr "Rotation" + +#: settings/slide_settings.php:58 +#@ revslider +msgid "The duration of the transition (Default:300, min: 100 max 2000). " +msgstr "Die Dauer des Übergangs (Standard:300, mind.: 100, max.: 2000)." + +#: settings/slide_settings.php:61 +#@ revslider +msgid "Transition Duration" +msgstr "Übergangsdauer" + +#: settings/slide_settings.php:67 +#@ revslider +msgid "A new delay value for the Slide. If no delay defined per slide, the delay defined via Options (" +msgstr "Ein neuer Verzögerungswert für die Slide. Wenn kein Wert pro Slide definiert ist, wird der Wert definiert durch die Optionen (" + +#: settings/slide_settings.php:67 +#@ revslider +msgid "ms) will be used" +msgstr " ms) benutzt" + +#: settings/slide_settings.php:70 +#: settings/slider_settings_xml_lang.php:10 +#@ revslider +msgid "Delay" +msgstr "Verzögerung" + +#: settings/slide_settings.php:75 +#@ revslider +msgid "Enable Link" +msgstr "Link Aktivieren" + +#: settings/slide_settings.php:75 +#@ revslider +msgid "Enable" +msgstr "Aktivieren" + +#: settings/slide_settings.php:75 +#@ revslider +msgid "Disable" +msgstr "Deaktivieren" + +#: settings/slide_settings.php:80 +#@ revslider +msgid "Regular" +msgstr "Regulär" + +#: settings/slide_settings.php:80 +#@ revslider +msgid "To Slide" +msgstr "Zur Slide" + +#: settings/slide_settings.php:80 +#@ revslider +msgid "Link Type" +msgstr "Link Typ" + +#: settings/slide_settings.php:84 +#@ revslider +msgid "Slide Link" +msgstr "Slide Link" + +#: settings/slide_settings.php:87 +#@ revslider +msgid "The target of the slide link" +msgstr "Das Ziel der Slide Link" + +#: settings/slide_settings.php:92 +#@ revslider +msgid "-- Not Chosen --" +msgstr "-- Nichts Gewählt --" + +#: settings/slide_settings.php:93 +#@ revslider +msgid "-- Next Slide --" +msgstr "-- Nächste Slide --" + +#: settings/slide_settings.php:94 +#@ revslider +msgid "-- Previous Slide --" +msgstr "-- Vorige Slide --" + +#: settings/slide_settings.php:97 +#@ revslider +msgid "-- Scroll Below Slider --" +msgstr "-- Scrolle Unter Slider --" + +#: settings/slide_settings.php:120 +#@ revslider +msgid "Slide Thumbnail. If not set - it will be taken from the slide image." +msgstr "Slide Thumbnail. Wenn nicht gesetzt, wird es von dem gewählten Bild der Slide genommen" + +#: settings/slide_settings.php:121 +#@ revslider +msgid "Thumbnail" +msgstr "Thumbnail" + +#: settings/slide_settings.php:128 +#@ revslider +msgid "Background Type" +msgstr "Hintergrund Typ" + +#: settings/slider_settings.php:6 +#@ revslider +msgid "Slider Title" +msgstr "Slider Titel" + +#: settings/slider_settings.php:6 +#@ revslider +msgid "The title of the slider. Example: Slider1" +msgstr "Der Titel des Slider. Beispiel: Slider1" + +#: settings/slider_settings.php:7 +#@ revslider +msgid "Slider Alias" +msgstr "Slider Alias" + +#: settings/slider_settings.php:7 +#@ revslider +msgid "The alias that will be used for embedding the slider. Example: slider1" +msgstr "Der Alias der benutzt wird um den Slider einzubinden. Beispiel: slider1" + +#: settings/slider_settings.php:8 +#@ revslider +msgid "Slider Shortcode" +msgstr "Slider Shortcode" + +#: settings/slider_settings.php:74 +#@ revslider +msgid "Fixed" +msgstr "Fix" + +#: settings/slider_settings.php:75 +#@ revslider +msgid "Custom" +msgstr "Custom" + +#: settings/slider_settings.php:76 +#@ revslider +msgid "Auto Responsive" +msgstr "Auto Responsive" + +#: settings/slider_settings.php:77 +#@ revslider +msgid "Full Screen" +msgstr "Full Screen" + +#: settings/slider_settings.php:78 +#@ revslider +msgid "Slider Layout" +msgstr "Slider Layout" + +#: settings/slider_settings.php:99 +#@ revslider +msgid "Grid Settings" +msgstr "Grid Einstellungen" + +#: settings/slider_settings_xml_lang.php:2 +#: views/system/general_settings_dialog.php:10 +#@ revslider +msgid "General Settings" +msgstr "Generelle Einstellungen" + +#: settings/slider_settings_xml_lang.php:3 +#@ revslider +msgid "Position" +msgstr "Position" + +#: settings/slider_settings_xml_lang.php:4 +#@ revslider +msgid "Appearance" +msgstr "Aussehen" + +#: settings/slider_settings_xml_lang.php:5 +#@ revslider +msgid "Navigation" +msgstr "Navigation" + +#: settings/slider_settings_xml_lang.php:6 +#@ revslider +msgid "Thumbnails" +msgstr "Thumbnails" + +#: settings/slider_settings_xml_lang.php:7 +#@ revslider +msgid "Mobile Visibility" +msgstr "Mobile Sichtbarkeit" + +#: settings/slider_settings_xml_lang.php:8 +#@ revslider +msgid "Alternative First Slide" +msgstr "Alternative Erste Slide" + +#: settings/slider_settings_xml_lang.php:9 +#@ revslider +msgid "Troubleshooting" +msgstr "Fehlerbehandlung" + +#: settings/slider_settings_xml_lang.php:11 +#@ revslider +msgid "The time one slide stays on the screen in Milliseconds" +msgstr "Die Zeit die eine Slide auf dem Bildschirm zu sehen ist in Millisekunden" + +#: settings/slider_settings_xml_lang.php:12 +#@ revslider +msgid "Shuffle Mode" +msgstr "Shuffle Modus" + +#: settings/slider_settings_xml_lang.php:13 +#@ revslider +msgid "Turn Shuffle Mode on and off! Will be randomized only once at the start." +msgstr "Macht Shuffle Modus an oder aus! Slides werden bei jedem Ansehen des Sliders anders sortiert" + +#: settings/slider_settings_xml_lang.php:16 +#@ revslider +msgid "Lazy Load" +msgstr "Lazy Load" + +#: settings/slider_settings_xml_lang.php:17 +#@ revslider +msgid "The lazy load means that the images will be loaded by demand, it speeds the loading of the slider." +msgstr "Lazy Load bedeutet, das Bilder nur wenn benötigt geladen werden. Dies erhöht die schnelligkeit des Slider." + +#: settings/slider_settings_xml_lang.php:18 +#@ revslider +msgid "Load Google Font" +msgstr "Lade Google Schrift" + +#: settings/slider_settings_xml_lang.php:19 +#@ revslider +msgid "yes / no to load google font" +msgstr "ja / nein ob google schrift geladen werden soll" + +#: settings/slider_settings_xml_lang.php:20 +#@ revslider +msgid "Yes" +msgstr "Ja" + +#: settings/slider_settings_xml_lang.php:21 +#@ revslider +msgid "No" +msgstr "Nein" + +#: settings/slider_settings_xml_lang.php:22 +#@ revslider +msgid "Google Font" +msgstr "Google Schrift" + +#: settings/slider_settings_xml_lang.php:23 +#@ revslider +msgid "The google font family to load" +msgstr "Die google schrift familie die geladen werden soll" + +#: settings/slider_settings_xml_lang.php:25 +#@ revslider +msgid "Stop Slider" +msgstr "Slider Anhalten" + +#: settings/slider_settings_xml_lang.php:26 +#@ revslider +msgid "On / Off to stop slider after some amount of loops / slides" +msgstr "An / Aus um dem Slider nach einer bestimmten Anzahl an Durchgängen / Slides zu stoppen" + +#: settings/slider_settings_xml_lang.php:27 +#@ revslider +msgid "Stop After Loops" +msgstr "Anhalten Nach Durchgängen" + +#: settings/slider_settings_xml_lang.php:28 +#@ revslider +msgid "Stop the slider after certain amount of loops. 0 related to the first loop." +msgstr "Hält den Slider nach einer bestimmten Anzahl an Durchgängen an. 0 bedeutet bei dem ersten Durchgang." + +#: settings/slider_settings_xml_lang.php:29 +#@ revslider +msgid "Stop At Slide" +msgstr "Bei Slide Anhalten" + +#: settings/slider_settings_xml_lang.php:30 +#@ revslider +msgid "Stop the slider at the given slide" +msgstr "Halte den Slider bei einer bestimmten Slide an" + +#: settings/slider_settings_xml_lang.php:31 +#@ revslider +msgid "Position on the page" +msgstr "Position auf der Seite" + +#: settings/slider_settings_xml_lang.php:32 +#@ revslider +msgid "The position of the slider on the page, (float:left, float:right, margin:0px auto;)" +msgstr "Die Position des Sliders auf der Seite, (float: left, float:right, margin:0px auto;)" + +#: settings/slider_settings_xml_lang.php:33 +#@ revslider +msgid "Left" +msgstr "Links" + +#: settings/slider_settings_xml_lang.php:34 +#@ revslider +msgid "Center" +msgstr "Mitte" + +#: settings/slider_settings_xml_lang.php:35 +#@ revslider +msgid "Right" +msgstr "Rechts" + +#: settings/slider_settings_xml_lang.php:36 +#@ revslider +msgid "Margin Top" +msgstr "Abstand Oben" + +#: settings/slider_settings_xml_lang.php:37 +#@ revslider +msgid "The top margin of the slider wrapper div" +msgstr "Der obere Abstand des umliegenden div des Slider" + +#: settings/slider_settings_xml_lang.php:39 +#@ revslider +msgid "Margin Bottom" +msgstr "Abstand Unten" + +#: settings/slider_settings_xml_lang.php:40 +#@ revslider +msgid "The bottom margin of the slider wrapper div" +msgstr "Der untere Abstand des umliegenden Div des Sliders" + +#: settings/slider_settings_xml_lang.php:41 +#@ revslider +msgid "Margin Left" +msgstr "Abstand Links" + +#: settings/slider_settings_xml_lang.php:42 +#@ revslider +msgid "The left margin of the slider wrapper div" +msgstr "Der linke Abstand des umliegenden Div des Sliders" + +#: settings/slider_settings_xml_lang.php:43 +#@ revslider +msgid "Margin Right" +msgstr "Abstand Rechts" + +#: settings/slider_settings_xml_lang.php:44 +#@ revslider +msgid "The right margin of the slider wrapper div" +msgstr "Der rechte Abstand des umliegenden Div des Sliders" + +#: settings/slider_settings_xml_lang.php:45 +#@ revslider +msgid "Shadow Type" +msgstr "Schatten Typ" + +#: settings/slider_settings_xml_lang.php:46 +#@ revslider +msgid "The Shadow display underneath the banner. The shadow apply to fixed and responsive modes only, the full width slider don't have a shadow." +msgstr "Der Schatten der unter dem Banner angezeigt wird. Der Schatten kann unr zu Fix und Responsive Modi benutzt werden. Der Full Width Slider hat keinen Schatten." + +#: settings/slider_settings_xml_lang.php:47 +#@ revslider +msgid "No Shadow" +msgstr "Kein Schatten" + +#: settings/slider_settings_xml_lang.php:48 +#@ revslider +msgid "1" +msgstr "1" + +#: settings/slider_settings_xml_lang.php:49 +#@ revslider +msgid "2" +msgstr "2" + +#: settings/slider_settings_xml_lang.php:50 +#@ revslider +msgid "3" +msgstr "3" + +#: settings/slider_settings_xml_lang.php:51 +#@ revslider +msgid "Show Timer Line" +msgstr "Zeige Zeit Leiste" + +#: settings/slider_settings_xml_lang.php:52 +#@ revslider +msgid "Show the top running timer line" +msgstr "Zeige die Zeitleiste oben" + +#: settings/slider_settings_xml_lang.php:53 +#@ revslider +msgid "Top" +msgstr "Oben" + +#: settings/slider_settings_xml_lang.php:54 +#@ revslider +msgid "Bottom" +msgstr "Unten" + +#: settings/slider_settings_xml_lang.php:55 +#@ revslider +msgid "Hide" +msgstr "Verstecken" + +#: settings/slider_settings_xml_lang.php:56 +#@ revslider +msgid "Background color" +msgstr "Hintergrundfarbe" + +#: settings/slider_settings_xml_lang.php:57 +#@ revslider +msgid "Slider wrapper div background color, for transparent slider, leave empty." +msgstr "Hintergrundfarbe des Umliegenden Div des Slider, für transparente Slider, bitte leer lassen" + +#: settings/slider_settings_xml_lang.php:58 +#@ revslider +msgid "Padding (border)" +msgstr "Padding (Rand)" + +#: settings/slider_settings_xml_lang.php:59 +#@ revslider +msgid "The wrapper div padding, if it has value, then together with background color it it will make border around the slider." +msgstr "Der Innenabstand des umliegenden Div des Slider. Wenn ein Wert gesetzt ist, dann wird es mit der Hintergrundfarbe zusammen einen Rand um den Slider erstellen." + +#: settings/slider_settings_xml_lang.php:60 +#@ revslider +msgid "Show Background Image" +msgstr "Zeige Hintergrundfarbe" + +#: settings/slider_settings_xml_lang.php:61 +#@ revslider +msgid "yes / no to put background image to the main slider wrapper." +msgstr "ja / nein um das Hintergrundbild zum Hauptslider wrap hinzuzufügen" + +#: settings/slider_settings_xml_lang.php:62 +#@ revslider +msgid "Background Image Url" +msgstr "Hintergrundbild URL" + +#: settings/slider_settings_xml_lang.php:63 +#@ revslider +msgid "The background image that will be on the slider wrapper. Will be shown at slider preloading." +msgstr "Das Hintergrundbild des umliegenden container des Sliders. Wird angezeigt während der Slider geladen wird." + +#: settings/slider_settings_xml_lang.php:64 +#@ revslider +msgid "Touch Enabled" +msgstr "Berührung An" + +#: settings/slider_settings_xml_lang.php:65 +#@ revslider +msgid "Enable Swipe Function on touch devices" +msgstr "Swipe Funktion auf Tocuhgeräten aktivieren" + +#: settings/slider_settings_xml_lang.php:66 +#@ revslider +msgid "Stop On Hover" +msgstr "Stop bei Hover" + +#: settings/slider_settings_xml_lang.php:67 +#@ revslider +msgid "Stop the Timer when hovering the slider" +msgstr "Timer anhalten wenn beim Hover über dem Slider" + +#: settings/slider_settings_xml_lang.php:68 +#@ revslider +msgid "Navigation Type" +msgstr "Navigations Typ" + +#: settings/slider_settings_xml_lang.php:69 +#@ revslider +msgid "Display type of the navigation bar (Default:none" +msgstr "Anzeigetyp der Navigationsbar (Standard: keine" + +#: settings/slider_settings_xml_lang.php:70 +#@ revslider +msgid "None" +msgstr "Keine" + +#: settings/slider_settings_xml_lang.php:71 +#@ revslider +msgid "Bullet" +msgstr "Kugeln" + +#: settings/slider_settings_xml_lang.php:72 +#@ revslider +msgid "Thumb" +msgstr "Thumb" + +#: settings/slider_settings_xml_lang.php:73 +#@ revslider +msgid "Both" +msgstr "Beides" + +#: settings/slider_settings_xml_lang.php:74 +#@ revslider +msgid "Navigation Arrows" +msgstr "Navigationspfeile" + +#: settings/slider_settings_xml_lang.php:75 +#@ revslider +msgid "Display position of the Navigation Arrows (** By navigation Type Thumb arrows always centered or none visible)" +msgstr "Anzeigeposition der Navigationspfeile (** Der Navigationstyp Thumb ist immer zentriert oder nicht sichtbar" + +#: settings/slider_settings_xml_lang.php:76 +#@ revslider +msgid "With Bullets" +msgstr "Mit Kugeln" + +#: settings/slider_settings_xml_lang.php:77 +#@ revslider +msgid "Solo" +msgstr "Solo" + +#: settings/slider_settings_xml_lang.php:78 +#@ revslider +msgid "Navigation Style" +msgstr "Navigationsstil" + +#: settings/slider_settings_xml_lang.php:79 +#@ revslider +msgid "Look of the navigation bullets ** If you choose navbar, we recommend to choose Navigation Arrows to nexttobullets" +msgstr "Aussehen der Navigationskugeln ** Wenn Sie navbar wählen, empfehlen wir Ihnen Navigationspfeile zu nexttobullets zu wählen" + +#: settings/slider_settings_xml_lang.php:80 +#@ revslider +msgid "Round" +msgstr "Rund" + +#: settings/slider_settings_xml_lang.php:81 +#@ revslider +msgid "Navbar" +msgstr "Navbar" + +#: settings/slider_settings_xml_lang.php:82 +#@ revslider +msgid "Old Round" +msgstr "Alt Rund" + +#: settings/slider_settings_xml_lang.php:83 +#@ revslider +msgid "Old Square" +msgstr "Alt Eckig" + +#: settings/slider_settings_xml_lang.php:84 +#@ revslider +msgid "Old Navbar" +msgstr "Alte Navbar" + +#: settings/slider_settings_xml_lang.php:85 +#@ revslider +msgid "Always Show Navigation" +msgstr "Navigation immer anzeigen" + +#: settings/slider_settings_xml_lang.php:86 +#@ revslider +msgid "Always show the navigation and the thumbnails." +msgstr "Immer Navigation und Thumbnails anzeigen." + +#: settings/slider_settings_xml_lang.php:87 +#@ revslider +msgid "Hide Navitagion After" +msgstr "Verstecke Navigation Nach" + +#: settings/slider_settings_xml_lang.php:88 +#@ revslider +msgid "Time after that the Navigation and the Thumbs will be hidden(Default: 200 ms)" +msgstr "Zeit nach dem die Navigation und die Thumbs verschwinden (Standard: 200ms)" + +#: settings/slider_settings_xml_lang.php:90 +#@ revslider +msgid "Navigation Horizontal Align" +msgstr "Ausrichtung Navigation Horizontal " + +#: settings/slider_settings_xml_lang.php:91 +#@ revslider +msgid "Horizontal Align of Bullets / Thumbnails" +msgstr "Horizontale Ausrichtung der Kugeln /Thumbnails" + +#: settings/slider_settings_xml_lang.php:92 +#@ revslider +msgid "Navigation Vertical Align" +msgstr "Vertikale Ausrichtung der Navigation" + +#: settings/slider_settings_xml_lang.php:93 +#@ revslider +msgid "Vertical Align of Bullets / Thumbnails" +msgstr "Vertikales zentrieren der Kugeln / Thumbnails" + +#: settings/slider_settings_xml_lang.php:94 +#@ revslider +msgid "Navigation Horizontal Offset" +msgstr "Horizontaler Navigations Abstand" + +#: settings/slider_settings_xml_lang.php:95 +#@ revslider +msgid "Offset from current Horizontal position of Bullets / Thumbnails negative and positive direction" +msgstr "Abstand der derzeitigen Horizontalen Position der Kugeln / Thumbnails in negativer und positiver Richtung" + +#: settings/slider_settings_xml_lang.php:96 +#@ revslider +msgid "Navigation Vertical Offset" +msgstr "Vertikaler Abstand der Navigation" + +#: settings/slider_settings_xml_lang.php:97 +#@ revslider +msgid "Offset from current Vertical position of Bullets / Thumbnails negative and positive direction" +msgstr "Abstand der derzeitigen Vertikalen Position der Kugeln / Thumbnails in negativer und positiver Richtung" + +#: settings/slider_settings_xml_lang.php:98 +#@ revslider +msgid "Left Arrow Horizontal Align" +msgstr "Horizontale Ausrichtung des linken Pfeil" + +#: settings/slider_settings_xml_lang.php:99 +#@ revslider +msgid "Horizontal Align of left Arrow (only if arrow is not next to bullets)" +msgstr "Horizontale Ausrichtung des linken Pfeil (Nur wenn der Pfeil nicht an den Kugeln liegt)" + +#: settings/slider_settings_xml_lang.php:100 +#@ revslider +msgid "Left Arrow Vertical Align" +msgstr "Vertikale Ausrichtung des linken Pfeil" + +#: settings/slider_settings_xml_lang.php:101 +#@ revslider +msgid "Vertical Align of left Arrow (only if arrow is not next to bullets)" +msgstr "Vertikale Ausrichtung des linken Pfeil (Nur wenn der Pfeil nicht an den Kugeln liegt)" + +#: settings/slider_settings_xml_lang.php:102 +#@ revslider +msgid "Left Arrow Horizontal Offset" +msgstr "Horizontale Abstand des linken Pfeil" + +#: settings/slider_settings_xml_lang.php:103 +#@ revslider +msgid "Offset from current Horizontal position of of left Arrow negative and positive direction" +msgstr "Horizontaler Abstand des linken Pfeil. Negative und Positive Richtung" + +#: settings/slider_settings_xml_lang.php:104 +#@ revslider +msgid "Left Arrow Vertical Offset" +msgstr "Vertikaler Abstand des linken Pfeil" + +#: settings/slider_settings_xml_lang.php:105 +#@ revslider +msgid "Offset from current Vertical position of of left Arrow negative and positive direction" +msgstr "Vertikaler Abstand des linken Pfeil in negativer und positiver Richtung" + +#: settings/slider_settings_xml_lang.php:106 +#@ revslider +msgid "Right Arrow Horizontal Align" +msgstr "Horizontale Ausrichtung des rechten Pfeil" + +#: settings/slider_settings_xml_lang.php:107 +#@ revslider +msgid "Horizontal Align of right Arrow (only if arrow is not next to bullets)" +msgstr "Horizontale Ausrichtung des rechten Pfeil (Nur wenn der Pfeil nicht an den Kugeln liegt)" + +#: settings/slider_settings_xml_lang.php:108 +#@ revslider +msgid "Right Arrow Vertical Align" +msgstr "Vertikale Ausrichtung des rechten Pfeil" + +#: settings/slider_settings_xml_lang.php:109 +#@ revslider +msgid "Vertical Align of right Arrow (only if arrow is not next to bullets)" +msgstr "Vertikale Ausrichtung des rechten Pfeil (Nur wenn der Pfeil nicht an den Kugeln liegt)" + +#: settings/slider_settings_xml_lang.php:110 +#@ revslider +msgid "Right Arrow Horizontal Offset" +msgstr "Horizontale Abstand des rechten Pfeil" + +#: settings/slider_settings_xml_lang.php:111 +#@ revslider +msgid "Offset from current Horizontal position of of right Arrow negative and positive direction" +msgstr "Horizontaler Abstand des rechten Pfeil in negativer und positiver Richtung" + +#: settings/slider_settings_xml_lang.php:112 +#@ revslider +msgid "Right Arrow Vertical Offset" +msgstr "Vertikale Ausrichtung des rechten Pfeil" + +#: settings/slider_settings_xml_lang.php:113 +#@ revslider +msgid "Offset from current Vertical position of of right Arrow negative and positive direction" +msgstr "Vertikaler Abstand des rechten Pfeil in negativer und positiver Richtung" + +#: settings/slider_settings_xml_lang.php:114 +#@ revslider +msgid "Thumb Width" +msgstr "Thumb Breite" + +#: settings/slider_settings_xml_lang.php:115 +#@ revslider +msgid "The basic Width of one Thumbnail (only if thumb is selected)" +msgstr "Die Basis breite eines Thumbnails (Nur wenn thumbnails gewählt wurden)" + +#: settings/slider_settings_xml_lang.php:116 +#@ revslider +msgid "Thumb Height" +msgstr "Thumb Höhe" + +#: settings/slider_settings_xml_lang.php:117 +#@ revslider +msgid "the basic Height of one Thumbnail (only if thumb is selected)" +msgstr "die Basis Höhe eines Thumbnails (wenn thumb gewählt wurden)" + +#: settings/slider_settings_xml_lang.php:118 +#@ revslider +msgid "Thumb Amount" +msgstr "Thumb Anzahl" + +#: settings/slider_settings_xml_lang.php:119 +#@ revslider +msgid "the amount of the Thumbs visible same time (only if thumb is selected)" +msgstr "die Anzahl der sichtbaren Thumbs zur selben Zeit (nur wenn thumb gewählt wurde)" + +#: settings/slider_settings_xml_lang.php:120 +#@ revslider +msgid "Hide Slider Under Width" +msgstr "Verstecke Slider unter Breite" + +#: settings/slider_settings_xml_lang.php:121 +#@ revslider +msgid "Hide the slider under some slider width. Works only in Responsive Style. Not available for Fullwidth." +msgstr "Verstecke den Slider unter einer bestimmten Slider breite. Dies funktioniert nur in Responsivem Design. Nicht verfügbar in Fullwidth" + +#: settings/slider_settings_xml_lang.php:122 +#@ revslider +msgid "Hide Defined Layers Under Width" +msgstr "Verstecke Definierte Ebene Unter Breite" + +#: settings/slider_settings_xml_lang.php:123 +#@ revslider +msgid "Hide some defined layers in the layer properties under some slider width." +msgstr "Verstecke einige definierte Ebenen in der Ebenen Eigenschaft unter einer bestimmten Slider Breite" + +#: settings/slider_settings_xml_lang.php:124 +#@ revslider +msgid "Hide All Layers Under Width" +msgstr "Verstecke alle Ebenen unter bestimmter Breite" + +#: settings/slider_settings_xml_lang.php:125 +#@ revslider +msgid "Hide all layers under some slider width" +msgstr "Verstecke alle Ebenen unter bestimmter Slider Breite" + +#: settings/slider_settings_xml_lang.php:126 +#@ revslider +msgid "Start With Slide" +msgstr "Starte Mit Slide" + +#: settings/slider_settings_xml_lang.php:127 +#@ revslider +msgid "Change it if you want to start from a different slide then 1" +msgstr "Ändern Sie dies wenn Sie von einer anderen Slide als der ersten starten möchten" + +#: settings/slider_settings_xml_lang.php:128 +#@ revslider +msgid "First Transition Active" +msgstr "Erster Übergang Aktiv" + +#: settings/slider_settings_xml_lang.php:129 +#@ revslider +msgid "If active, it will overwrite the first slide transition. Use it when you want a special transition for the first slide only." +msgstr "Wenn Aktiv, überschreibt es den ersten Slide Übergang. Benutzen Sie dies wenn Sie einen speziellen Übergang nur für Ihre erste Slide wollen." + +#: settings/slider_settings_xml_lang.php:130 +#@ revslider +msgid "First Transition Type" +msgstr "Erster Übergangstyp" + +#: settings/slider_settings_xml_lang.php:131 +#@ revslider +msgid "First slide transition type" +msgstr "Erster Slide Übergangstyp" + +#: settings/slider_settings_xml_lang.php:132 +#@ revslider +msgid "Replace me!" +msgstr "Ersetze Mich!" + +#: settings/slider_settings_xml_lang.php:133 +#@ revslider +msgid "First Transition Duration" +msgstr "Erste Übergangsdauer" + +#: settings/slider_settings_xml_lang.php:134 +#@ revslider +msgid "First slide transition duration (Default:300, min: 100 max 2000)" +msgstr "Erster Slide Übergangdauer (Standard:300, min: 100 max 2000)" + +#: settings/slider_settings_xml_lang.php:135 +#@ revslider +msgid "First Transition Slot Amount" +msgstr "Erster Übergangs Slot Anzahl" + +#: settings/slider_settings_xml_lang.php:136 +#@ revslider +msgid "The number of slots or boxes the slide is divided into. If you use boxfade, over 7 slots can be juggy" +msgstr "Die Anzahl der Slots oder Boxen in der die Slide geteilt wird. Wenn Sie boxfade benutzen, bitte benutzen Sie nicht mehr als 7 Slots." + +#: settings/slider_settings_xml_lang.php:137 +#@ revslider +msgid "JQuery No Conflict Mode" +msgstr "jQuery No Conflict Modus" + +#: settings/slider_settings_xml_lang.php:138 +#@ revslider +msgid "Turns on / off jquery noconflict mode. You can play with this option when you have some javascript conflicts." +msgstr "Schaltet den jQuery noconflict Modus an /aus. Testen Sie dies, wenn sie javascript konflikt fehler erhalten." + +#: settings/slider_settings_xml_lang.php:139 +#@ revslider +msgid "Put JS Includes To Body" +msgstr "JS Inkludierungen in den Body einfügen" + +#: settings/slider_settings_xml_lang.php:140 +#@ revslider +msgid "Putting the js to body (in addition to head) is good for fixing some javascript conflicts of type: TypeError: tpj('#rev_slider_1_1').show().revolution is not a function" +msgstr "Das Hinzufügen des js in den Body (Zusätzlich zum Head) ist gut um einige JavaScript Fehler vom folgenden typ zu beheben: TypeError: tpj('#rev_slider_1_1').show().revolution is not a function" + +#: settings/slider_settings_xml_lang.php:141 +#@ revslider +msgid "True" +msgstr "Ja" + +#: settings/slider_settings_xml_lang.php:142 +#@ revslider +msgid "False" +msgstr "Nein" + +#: settings/slider_settings_xml_lang.php:143 +#@ revslider +msgid "Output Filters Protection" +msgstr "Filter Schutz Ausgeben" + +#: settings/slider_settings_xml_lang.php:144 +#@ revslider +msgid "Activate a protection against wordpress output filters that adds html blocks to the shortcode output like P and BR" +msgstr "Aktiviert einen Schutz gegen den WordPress Ausgabe Filter der HTML Blöcke automatisch zum shortcode hinzufügt wie P und BR" + +#: settings/slider_settings_xml_lang.php:145 +#@ revslider +msgid "By Compressing Output" +msgstr "Durch Komprimieren der Ausgabe" + +#: settings/slider_settings_xml_lang.php:146 +#@ revslider +msgid "By Echo Output" +msgstr "Durch echo der Ausgabe" + +#: inc_php/framework/functions_wordpress.class.php:891 +#: temp/functions_wordpress.class.php:703 +#: temp/functions_wordpress.class.php:706 +#: temp/functions_wordpress.class.php:713 +#, php-format +#@ revslider +msgid "View all posts in %s" +msgstr "Sehe alle Beiträge in %s" + +#: views/master_view.php:44 +#@ revslider +msgid "Update Plugin" +msgstr "Plugin Aktualisieren" + +#: views/system/general_settings_dialog.php:17 +#@ revslider +msgid "Update" +msgstr "Aktualisieren" + +#: views/system/general_settings_dialog.php:22 +#: views/templates/slider_edit.php:58 +#: views/templates/slider_new.php:49 +#: views/templates/slides.php:21 +#: views/templates/slides.php:41 +#: views/templates/slides.php:48 +#: views/templates/slides_gallery.php:21 +#: views/templates/slides_gallery.php:39 +#: views/templates/slides_gallery.php:45 +#: views/templates/slides_posts.php:1 +#@ revslider +msgid "Close" +msgstr "Schliessen" + +#: views/system/update_dialog.php:1 +#@ revslider +msgid "Update Slider Plugin" +msgstr "Slider Plugin Aktualisieren" + +#: views/system/update_dialog.php:1 +#@ revslider +msgid "Update Revolution Slider Plugin" +msgstr "Revolution Slider Plugin Aktualisieren" + +#: views/system/update_dialog.php:1 +#@ revslider +msgid "To update the slider please show the slider install package. The files will be overwriten." +msgstr "Um den Slider zu aktualisieren, benutzen Sie das Slider Installations Paket. Diese Dateien werden überschrieben" + +#: views/system/update_dialog.php:1 +#@ revslider +msgid "File example: revslider.zip" +msgstr "Datei Beispiel: revslider.zip" + +#: views/system/update_dialog.php:1 +#@ revslider +msgid "Choose the update file:" +msgstr "Wählen Sie die Aktualisierungsdatei." + +#: views/system/update_dialog.php:1 +#@ revslider +msgid "Update Slider" +msgstr "Slider Aktualisieren" + +#: views/system/video_dialog.php:9 +#@ revslider +msgid "Choose video type" +msgstr "Videotyp auswählen" + +#: views/system/video_dialog.php:12 +#@ revslider +msgid "Youtube" +msgstr "Youtube" + +#: views/system/video_dialog.php:15 +#@ revslider +msgid "Vimeo" +msgstr "Vimeo" + +#: views/system/video_dialog.php:18 +#@ revslider +msgid "HTML5" +msgstr "HTML5" + +#: views/system/video_dialog.php:37 +#@ revslider +msgid "Enter Vimeo ID or URL" +msgstr "Video ID oder URL eingeben" + +#: views/system/video_dialog.php:47 +#@ revslider +msgid "example: 30300114" +msgstr "beispiel: 30300114" + +#: views/system/video_dialog.php:57 +#@ revslider +msgid "Enter Youtube ID or URL" +msgstr "YOutube ID oder URL einfügen" + +#: views/system/video_dialog.php:67 +#: views/templates/sliders.php:54 +#@ revslider +msgid "example" +msgstr "beispiel" + +#: views/system/video_dialog.php:79 +#@ revslider +msgid "Poster Image Url" +msgstr "Beitrags Bild URL" + +#: views/system/video_dialog.php:82 +#: views/system/video_dialog.php:89 +#: views/system/video_dialog.php:96 +#: views/system/video_dialog.php:103 +#@ revslider +msgid "Example" +msgstr "Beispiel" + +#: views/system/video_dialog.php:86 +#@ revslider +msgid "Video MP4 Url" +msgstr "Video MP4 URL" + +#: views/system/video_dialog.php:93 +#@ revslider +msgid "Video WEBM Url" +msgstr "Video WEBM Url" + +#: views/system/video_dialog.php:100 +#@ revslider +msgid "Video OGV Url" +msgstr "Video OGV Url" + +#: settings/layer_settings.php:48 +#: settings/layer_settings.php:51 +#: views/system/video_dialog.php:126 +#@ revslider +msgid "Width" +msgstr "Breite" + +#: settings/layer_settings.php:52 +#: views/system/video_dialog.php:129 +#@ revslider +msgid "Height" +msgstr "Höhe" + +#: views/system/video_dialog.php:122 +#@ revslider +msgid "Full Width:" +msgstr "Volle Breite:" + +#: views/system/video_dialog.php:231 +#@ revslider +msgid "Arguments:" +msgstr "Argumente:" + +#: views/system/video_dialog.php:193 +#@ revslider +msgid "Next Slide On End:" +msgstr "Nächste Slide beim Ende:" + +#: views/system/video_dialog.php:243 +#@ revslider +msgid "Add This Video" +msgstr "Dieses Video Hinzufügen" + +#: views/system/video_dialog.php:243 +#@ revslider +msgid "Update Video" +msgstr "Video Aktualisieren" + +#: views/templates/edit_layers.php:16 +#@ revslider +msgid "Image BG" +msgstr "Bild HG" + +#: views/templates/edit_layers.php:212 +#@ revslider +msgid "Add Layer" +msgstr "Ebene Hinzufügen" + +#: views/templates/edit_layers.php:213 +#@ revslider +msgid "Add Layer: Image" +msgstr "Bild Ebene Hinzufügen" + +#: views/templates/edit_layers.php:214 +#@ revslider +msgid "Add Layer: Video" +msgstr "Vidoe Ebene Hinzufügen" + +#: views/templates/edit_layers.php:218 +#@ revslider +msgid "Delete Layer" +msgstr "Ebene Löschen" + +#: views/templates/edit_layers.php:219 +#@ revslider +msgid "Delete All Layers" +msgstr "Alle Ebenen Löschen" + +#: views/templates/edit_layers.php:215 +#@ revslider +msgid "Duplicate Layer" +msgstr "Ebene Duplizieren" + +#: views/templates/edit_layers.php:245 +#@ revslider +msgid "Layer General Parameters" +msgstr "Generelle Ebenen Parameter" + +#: views/templates/edit_layers.php:266 +#@ revslider +msgid "Align & Position" +msgstr "Ausrichtung & Position" + +#: views/templates/edit_layers.php:314 +#@ revslider +msgid "Layer Animation" +msgstr "Ebenen Animation" + +#: views/templates/edit_layers.php:337 +#@ revslider +msgid "Start Transition" +msgstr "Start Übergang" + +#: views/templates/edit_layers.php:353 +#@ revslider +msgid "End Transition (optional)" +msgstr "Endübergang (optional)" + +#: views/templates/edit_layers.php:599 +#@ revslider +msgid "Layer Links & Advanced Params" +msgstr "Ebenen Links & Weitere Parameter" + +#: views/templates/edit_layers.php:661 +#@ revslider +msgid "Layers Timing & Sorting" +msgstr "Ebenen Zeiten & Sortierung" + +#: views/templates/edit_layers.php:663 +#@ revslider +msgid "By Time" +msgstr "Bei Zeit" + +#: views/templates/edit_layers.php:664 +#@ revslider +msgid "By Depth" +msgstr "Bei Tiefe" + +#: views/slides.php:55 +#: views/templates/slide.php:30 +#: views/templates/slides_list.php:99 +#@ revslider +msgid "Edit Slide" +msgstr "Slide Bearbeiten" + +#: views/templates/slide.php:68 +#@ revslider +msgid "Add Slide" +msgstr "Slide Hinzufügen" + +#: views/templates/slide.php:116 +#@ revslider +msgid "General Slide Settings" +msgstr "Generelle Slide Einstellungen" + +#: views/templates/slide.php:137 +#@ revslider +msgid "Update Slide" +msgstr "Slide Aktualisieren" + +#: views/templates/slide.php:138 +#@ revslider +msgid "updating" +msgstr "aktualisiere" + +#: views/templates/slider_api.php:6 +#@ revslider +msgid "API Functions" +msgstr "API Funktionen" + +#: views/templates/slider_api.php:8 +#@ revslider +msgid "API Methods" +msgstr "API Methoden" + +#: views/templates/slider_api.php:10 +#@ revslider +msgid "Please copy / paste those functions into your functions js file" +msgstr "Bitte fügen sie diese Funktionen in Ihrer Funktions js Datei ein" + +#: views/templates/slider_api.php:14 +#@ revslider +msgid "Pause Slider" +msgstr "Slider Pausieren" + +#: views/templates/slider_api.php:18 +#@ revslider +msgid "Resume Slider" +msgstr "Slider Fortsetzen" + +#: views/templates/slider_api.php:22 +#@ revslider +msgid "Previous Slide" +msgstr "Voriger Slide" + +#: views/templates/slider_api.php:26 +#@ revslider +msgid "Next Slide" +msgstr "Nächster Slide" + +#: views/templates/slider_api.php:30 +#@ revslider +msgid "Go To Slide" +msgstr "Gehe Zu Slide" + +#: views/templates/slider_api.php:34 +#@ revslider +msgid "Get Num Slides" +msgstr "Anzahl der Slides erhalten" + +#: views/templates/slider_api.php:38 +#@ revslider +msgid "Get Current Slide Number" +msgstr "Derzeitige Slide Nummer erhalten" + +#: views/templates/slider_api.php:42 +#@ revslider +msgid "Get Last Playing Slide Number" +msgstr "Letzte gespielte Slide Nummer erhalten" + +#: views/templates/slider_api.php:46 +#@ revslider +msgid "External Scroll" +msgstr "Externes Scrollen" + +#: views/templates/slider_api.php:58 +#@ revslider +msgid "API Events" +msgstr "API Events" + +#: views/templates/slider_api.php:60 +#@ revslider +msgid "Copy and Paste the Below listed API Functions into your jQuery Functions for Revslider Event Listening" +msgstr "Kopieren und Fügen sie die unten stehenden API Funktionen in Ihre jQuery Funktionen für Revslider Eventlisteners eins" + +#: views/templates/slider_edit.php:15 +#@ revslider +msgid "Edit Slider" +msgstr "Slider Bearbeiten" + +#: views/templates/slider_edit.php:29 +#: views/templates/slider_new.php:24 +#@ revslider +msgid "Main Slider Settings" +msgstr "Haupt Slider Einstellungen" + +#: views/templates/slider_edit.php:55 +#@ revslider +msgid "updating..." +msgstr "aktualisiere..." + +#: views/templates/slider_edit.php:57 +#@ revslider +msgid "Delete Slider" +msgstr "Slider Löschen" + +#: views/templates/slider_edit.php:59 +#: views/templates/sliders_list.php:84 +#: views/templates/slides.php:8 +#: views/templates/slides_gallery.php:8 +#: views/templates/slides_posts.php:1 +#@ revslider +msgid "Edit Slides" +msgstr "Slides Bearbeiten" + +#: views/templates/slider_edit.php:60 +#@ revslider +msgid "Preview Slider" +msgstr "Slider Vorschau" + +#: views/templates/slider_new.php:12 +#@ revslider +msgid "New Slider" +msgstr "Neuer Slider" + +#: views/templates/slider_new.php:46 +#@ revslider +msgid "Create Slider" +msgstr "Sldier Erstellen" + +#: views/templates/slider_toolbox.php:3 +#@ revslider +msgid "Import / Export" +msgstr "Import / Export" + +#: views/templates/slider_toolbox.php:6 +#: views/templates/sliders.php:32 +#: views/templates/sliders.php:75 +#: views/templates/sliders.php:99 +#@ revslider +msgid "Import Slider" +msgstr "Slider Importieren" + +#: views/templates/slider_toolbox.php:33 +#@ revslider +msgid "Note, that when you importing slider, it delete all the current slider settings and slides, then replace it with the new ones" +msgstr "Beachten Sie: Wenn Sie einen Slider importieren, werden alle derzeitigen Slider Einstellungen und Slides gelöscht und mit den neuen erstetzt." + +#: views/templates/slider_toolbox.php:37 +#: views/templates/slider_toolbox.php:40 +#: views/templates/sliders_list.php:85 +#@ revslider +msgid "Export Slider" +msgstr "Slider Exportieren" + +#: views/templates/sliders.php:14 +#@ revslider +msgid "Revolution Sliders" +msgstr "Revolution Sliders" + +#: views/templates/sliders.php:19 +#@ revslider +msgid "Global Settings" +msgstr "Globale Einstellungen" + +#: views/templates/sliders.php:24 +#@ revslider +msgid "No Sliders Found" +msgstr "Keine Slider Gefunden" + +#: views/templates/sliders.php:31 +#@ revslider +msgid "Create New Slider" +msgstr "Neuen Slider Erstellen" + +#: views/templates/sliders.php:50 +#@ revslider +msgid "How To Use" +msgstr "Gebrauchsanleitung" + +#: views/templates/sliders.php:54 +#: views/templates/sliders.php:59 +#: views/templates/sliders.php:60 +#@ revslider +msgid "* From the" +msgstr "* Von dem" + +#: views/templates/sliders.php:54 +#@ revslider +msgid "theme html" +msgstr "theme html" + +#: views/templates/sliders.php:54 +#@ revslider +msgid "use" +msgstr "benutzen" + +#: views/templates/sliders.php:56 +#@ revslider +msgid "For show only on homepage use" +msgstr "Um es nur auf der Homepage anzuzeigen" + +#: views/templates/sliders.php:57 +#@ revslider +msgid "For show on certain pages use" +msgstr "Zum anzeigen auf bestimmten Seiten benutzen Sie" + +#: views/templates/sliders.php:59 +#@ revslider +msgid "widgets panel" +msgstr "widgets bereich" + +#: views/templates/sliders.php:59 +#@ revslider +msgid "drag the \"Revolution Slider\" widget to the desired sidebar" +msgstr "ziehen Sie das \"Revolution Slider\" widget in Ihre Wunschposition" + +#: views/templates/sliders.php:60 +#@ revslider +msgid "post editor" +msgstr "post editor" + +#: views/templates/sliders.php:60 +#@ revslider +msgid "insert the shortcode from the sliders table" +msgstr "shortcode von der sliders tabelle einfügen" + +#: views/templates/sliders.php:81 +#@ revslider +msgid "Choose the import file" +msgstr "Wählen Sie die Importdatei" + +#: settings/layer_settings.php:97 +#: views/templates/sliders_list.php:5 +#@ revslider +msgid "ID" +msgstr "ID" + +#: views/templates/sliders_list.php:6 +#@ revslider +msgid "Name" +msgstr "Name" + +#: views/templates/sliders_list.php:15 +#@ revslider +msgid "N. Slides" +msgstr "Nr. Slides" + +#: views/templates/sliders_list.php:16 +#@ revslider +msgid "Actions" +msgstr "Aktionen" + +#: views/templates/sliders_list.php:10 +#@ revslider +msgid "Shortcode" +msgstr "Shortcode" + +#: views/templates/slider_edit.php:60 +#: views/templates/sliders_list.php:88 +#@ revslider +msgid "Preview" +msgstr "Vorschau" + +#: views/templates/sliders_list.php:86 +#: views/templates/slides_list.php:124 +#: views/templates/slides_list_posts.php:1 +#@ revslider +msgid "Delete" +msgstr "Löschen" + +#: views/templates/sliders_list.php:87 +#: views/templates/slides_list.php:126 +#@ revslider +msgid "Duplicate" +msgstr "Duplizieren" + +#: views/templates/slides.php:16 +#: views/templates/slides.php:36 +#: views/templates/slides_gallery.php:16 +#: views/templates/slides_gallery.php:36 +#@ revslider +msgid "New Slide" +msgstr "Neue Slide" + +#: views/templates/slides.php:18 +#: views/templates/slides.php:38 +#: views/templates/slides_gallery.php:18 +#: views/templates/slides_gallery.php:37 +#@ revslider +msgid "New Transparent Slide" +msgstr "Neue Durchsichtige Slide" + +#: views/templates/slides.php:19 +#: views/templates/slides.php:39 +#: views/templates/slides_gallery.php:19 +#: views/templates/slides_gallery.php:38 +#@ revslider +msgid "Adding Slide..." +msgstr "Füge Slide hinzu..." + +#: views/templates/slides.php:36 +#: views/templates/slides_gallery.php:36 +#@ revslider +msgid "Select image or multiple images to add slide or slides" +msgstr "Wählen Sie ein Bild oder mehrere Bilder um diese als Slides anzulegen" + +#: views/templates/slide.php:140 +#: views/templates/slides.php:44 +#@ revslider +msgid "To Slider Settings" +msgstr "Zu Den Slider Einstellungen" + +#: views/templates/slides.php:48 +#: views/templates/slides_gallery.php:45 +#@ revslider +msgid "Do It!" +msgstr "Mach es!" + +#: views/templates/slides.php:48 +#: views/templates/slides_gallery.php:45 +#@ revslider +msgid "Copy / move slide" +msgstr "Slide Kopieren / Verschieben" + +#: inc_php/revslider_widget.class.php:58 +#: views/templates/slides.php:52 +#: views/templates/slides_gallery.php:49 +#@ revslider +msgid "Choose Slider" +msgstr "Slider Wählen" + +#: views/templates/slides.php:57 +#: views/templates/slides_gallery.php:54 +#@ revslider +msgid "Choose Operation" +msgstr "Operation Wählen" + +#: views/templates/slides.php:60 +#: views/templates/slides_gallery.php:57 +#@ revslider +msgid "Copy" +msgstr "Kopieren" + +#: views/templates/slides.php:63 +#: views/templates/slides_gallery.php:60 +#@ revslider +msgid "Move" +msgstr "Verschieben" + +#: views/templates/slides_list.php:4 +#: views/templates/slides_list_posts.php:1 +#@ revslider +msgid "Slides List" +msgstr "Slides Liste" + +#: views/templates/slides_list.php:5 +#: views/templates/slides_list_posts.php:1 +#@ revslider +msgid "Saving Order" +msgstr "Sortierung Speichern" + +#: views/templates/slides_list.php:9 +#: views/templates/slides_list_posts.php:1 +#@ revslider +msgid "No Slides Found" +msgstr "Keine Slides Gefunden" + +#: views/templates/slides_list.php:88 +#@ revslider +msgid "Unpublish Slide" +msgstr "Slide Verstecken" + +#: views/templates/slides_list.php:90 +#@ revslider +msgid "Publish Slide" +msgstr "Slide Anzeigen" + +#: views/templates/slides_list.php:125 +#@ revslider +msgid "Deleting Slide..." +msgstr "Lösche Slide..." + +#: views/templates/slides_list.php:129 +#@ revslider +msgid "Open copy / move dialog" +msgstr "Öffne Kopieren / Verschieben Dialog" + +#: views/templates/slides_list.php:136 +#@ revslider +msgid "Copy / Move" +msgstr "Kopieren / Verschieben" + +#: views/templates/slides_list.php:137 +#@ revslider +msgid "Working..." +msgstr "Arbeite..." + +#: inc_php/framework/em_integration.class.php:25 +#@ revslider +msgid "All Events" +msgstr "Alle Events" + +#: inc_php/framework/em_integration.class.php:26 +#@ revslider +msgid "Today" +msgstr "Heute" + +#: inc_php/framework/em_integration.class.php:27 +#@ revslider +msgid "Tomorrow" +msgstr "Morgen" + +#: inc_php/framework/em_integration.class.php:28 +#@ revslider +msgid "Future" +msgstr "Zukunft" + +#: inc_php/framework/em_integration.class.php:29 +#@ revslider +msgid "Past" +msgstr "Vergangenheit" + +#: inc_php/framework/em_integration.class.php:30 +#@ revslider +msgid "This Month" +msgstr "Diesen Monat" + +#: inc_php/framework/em_integration.class.php:31 +#@ revslider +msgid "Next Month" +msgstr "Nächster Monat" + +#: inc_php/framework/em_integration.class.php:156 +#@ revslider +msgid "Event Start Date" +msgstr "Event Start Datum" + +#: inc_php/framework/em_integration.class.php:157 +#@ revslider +msgid "Event End Date" +msgstr "Event End Datum" + +#: inc_php/framework/settings_product_sidebar.class.php:845 +#@ revslider +msgid "Style Editor" +msgstr "Style Editor" + +#: inc_php/framework/settings_product_sidebar.class.php:854 +#@ revslider +msgid "Simple Editor:" +msgstr "Einfacher Editor:" + +#: inc_php/framework/settings_product_sidebar.class.php:857 +#@ revslider +msgid "enable " +msgstr "an" + +#: inc_php/framework/settings_product_sidebar.class.php:861 +#@ revslider +msgid "Family:" +msgstr "Familie:" + +#: inc_php/framework/settings_product_sidebar.class.php:866 +#@ revslider +msgid "Size:" +msgstr "Größe:" + +#: inc_php/framework/settings_product_sidebar.class.php:873 +#: inc_php/framework/settings_product_sidebar.class.php:916 +#: inc_php/framework/settings_product_sidebar.class.php:930 +#@ revslider +msgid "Color:" +msgstr "Farbe:" + +#: inc_php/framework/settings_product_sidebar.class.php:876 +#@ revslider +msgid "Line-Height:" +msgstr "Zeilen-Höhe:" + +#: inc_php/framework/settings_product_sidebar.class.php:883 +#@ revslider +msgid "Padding:" +msgstr "Padding:" + +#: inc_php/framework/settings_product_sidebar.class.php:893 +#@ revslider +msgid "Weight:" +msgstr "Dicke:" + +#: inc_php/framework/settings_product_sidebar.class.php:900 +#: inc_php/framework/settings_product_sidebar.class.php:943 +#@ revslider +msgid "Style:" +msgstr "Stil:" + +#: inc_php/framework/settings_product_sidebar.class.php:901 +#@ revslider +msgid "italic" +msgstr "italic" + +#: inc_php/framework/settings_product_sidebar.class.php:903 +#@ revslider +msgid "Decoration:" +msgstr "Dekoration:" + +#: inc_php/framework/settings_product_sidebar.class.php:921 +#@ revslider +msgid "Transparency:" +msgstr "Transparenz:" + +#: inc_php/framework/settings_product_sidebar.class.php:936 +#@ revslider +msgid "Width:" +msgstr "Breite:" + +#: inc_php/framework/settings_product_sidebar.class.php:953 +#@ revslider +msgid "Radius:" +msgstr "Radius:" + +#: inc_php/framework/settings_product_sidebar.class.php:967 +#@ revslider +msgid "Advanced Editor:" +msgstr "Erweiterter Editor:" + +#: inc_php/framework/settings_product_sidebar.class.php:974 +#@ revslider +msgid "Save Styles" +msgstr "Styles Speichern" + +#: inc_php/framework/settings_product_sidebar.class.php:976 +#@ revslider +msgid "Overwrite the current selected class " +msgstr "Überschreibe die derzeit gewählte Klasse" + +#: inc_php/framework/settings_product_sidebar.class.php:978 +#@ revslider +msgid " or save the styles as a new class?" +msgstr "oder speichere die Styles als eine neue Klasse?" + +#: inc_php/framework/settings_product_sidebar.class.php:981 +#@ revslider +msgid "Save As" +msgstr "Speichern Unter" + +#: inc_php/framework/settings_product_sidebar.class.php:983 +#@ revslider +msgid "Save as class:" +msgstr "Speichern als Klasse:" + +#: inc_php/framework/settings_product_sidebar.class.php:998 +#@ revslider +msgid "Global Style Editor" +msgstr "Globaler Style Editor" + +#: inc_php/framework/settings_product_sidebar.class.php:1000 +#@ revslider +msgid "Dynamic Styles (Not Editable):" +msgstr "Dynamische Styles (Nicht Editiernar):" + +#: inc_php/framework/settings_product_sidebar.class.php:1004 +#: views/templates/slider_toolbox.php:24 +#: views/templates/sliders.php:93 +#@ revslider +msgid "Static Styles:" +msgstr "Statische Styles:" + +#: inc_php/framework/settings_product_sidebar.class.php:1011 +#@ revslider +msgid "Save Static Styles" +msgstr "Speicher Statische Styles" + +#: inc_php/framework/settings_product_sidebar.class.php:1012 +#@ revslider +msgid "Overwrite current static styles?" +msgstr "Überschreibe derzeitige Statische Styles?" + +#: inc_php/framework/wpml.class.php:38 +#: inc_php/framework/wpml.class.php:154 +#@ revslider +msgid "All Languages" +msgstr "Alle Sprachen" + +#: inc_php/revslider_operations.class.php:22 +#@ revslider +msgid "Choose Slide Template" +msgstr "Wählen Sie ein Slide Template" + +#: inc_php/revslider_operations.class.php:952 +#@ revslider +msgid "Choose language" +msgstr "Sprache Wählen" + +#: inc_php/revslider_operations.class.php:982 +#@ revslider +msgid "Loading Preview..." +msgstr "Lade Vorschau..." + +#: inc_php/revslider_slider.class.php:702 +#@ revslider +msgid "animations imported!" +msgstr "animationen importiert!" + +#: inc_php/revslider_slider.class.php:704 +#@ revslider +msgid "no custom animations found, if slider uses custom animations, the provided export may be broken..." +msgstr "keine erstellten animationen gefunden. Wenn der Slider eigens erstelle animationen benutzt, könnte der export beschädigt sein..." + +#: inc_php/revslider_slider.class.php:754 +#@ revslider +msgid "dynamic styles imported!" +msgstr "dynamische styles importiert!" + +#: inc_php/revslider_slider.class.php:756 +#@ revslider +msgid "no dynamic styles found, if slider uses dynamic styles, the provided export may be broken..." +msgstr "keine dynamischen styles gefunden. Wenn der slider dynamische styles benutzt, könnte der export beschädigt sein..." + +#: inc_php/revslider_widget.class.php:53 +#: settings/layer_settings.php:99 +#@ revslider +msgid "Title" +msgstr "Titel" + +#: inc_php/revslider_widget.class.php:61 +#@ revslider +msgid "Home Page Only" +msgstr "Nur auf Homepage" + +#: inc_php/revslider_widget.class.php:64 +#@ revslider +msgid "Pages: (example: 2,10)" +msgstr "Seiten: (beispiel: 2,10)" + +#: revslider_admin.php:464 +#@ revslider +msgid "Post Deleted Successfully" +msgstr "Beiträg Erfolgreich Gelöscht" + +#: revslider_admin.php:496 +#: revslider_admin.php:500 +#: revslider_admin.php:508 +#@ revslider +msgid "CSS saved succesfully!" +msgstr "CSS erfolgreich gespeichert!" + +#: revslider_admin.php:504 +#@ revslider +msgid "Style deleted succesfully!" +msgstr "Style erfolgreich gelöscht!" + +#: revslider_admin.php:512 +#: revslider_admin.php:516 +#: revslider_admin.php:520 +#@ revslider +msgid "Animation saved succesfully!" +msgstr "Animation erfolgreich gelöscht!" + +#: revslider_admin.php:553 +#@ revslider +msgid "All files successfully updated" +msgstr "Alle Dateien erfolgreich aktualisiert" + +#: revslider_admin.php:561 +#@ revslider +msgid "Sortby updated" +msgstr "Sortierung aktualisiert" + +#: revslider_admin.php:565 +#@ revslider +msgid "Image urls replaced" +msgstr "Bild URLs ersetzt" + +#: revslider_admin.php:569 +#@ revslider +msgid "Settings in all Slides changed" +msgstr "Einstellungen in allen Slides geändert" + +#: settings/general_settings.php:24 +#@ revslider +msgid "Put JS Includes To Footer" +msgstr "Füge JS in den Footer ein" + +#: settings/general_settings.php:26 +#@ revslider +msgid "Putting the js to footer (instead of the head) is good for fixing some javascript conflicts." +msgstr "Das JS in den Footer (anstatt des Heads) einzufügen ist gut um einige javascrip Konflikte zu lösen." + +#: settings/layer_settings.php:35 +#@ revslider +msgid "Start Animation" +msgstr "Start Animation" + +#: settings/layer_settings.php:36 +#@ revslider +msgid "Start Easing" +msgstr "Start Easing" + +#: settings/layer_settings.php:42 +#@ revslider +msgid "Link ID" +msgstr "Link ID" + +#: settings/layer_settings.php:43 +#@ revslider +msgid "Link Classes" +msgstr "Link Klassen" + +#: settings/layer_settings.php:44 +#@ revslider +msgid "Link Title" +msgstr "Link Titel" + +#: settings/layer_settings.php:45 +#@ revslider +msgid "Link Rel" +msgstr "Link Rel" + +#: settings/layer_settings.php:49 +#@ revslider +msgid "Width/Height" +msgstr "Breite/Höhe" + +#: settings/layer_settings.php:53 +#@ revslider +msgid "Scale Proportional" +msgstr "Proportional Skalieren" + +#: settings/layer_settings.php:84 +#@ revslider +msgid "End Easing" +msgstr "End Easing" + +#: settings/layer_settings.php:98 +#@ revslider +msgid "Classes" +msgstr "Klassen" + +#: settings/layer_settings.php:100 +#@ revslider +msgid "Rel" +msgstr "Rel" + +#: settings/slide_settings.php:28 +#@ revslider +msgid "The language of the slide (uses WPML plugin)." +msgstr "Die Sprach der slide (benutzt das WPML plugin)" + +#: settings/slide_settings.php:29 +#@ revslider +msgid "Language" +msgstr "Sprache" + +#: settings/slide_settings.php:33 +#@ revslider +msgid "If set, slide will be visible after the date is reached" +msgstr "Wenn gesetzt, wird die Slide sichtbar nachdem das Datum erreicht wurde" + +#: settings/slide_settings.php:34 +#@ revslider +msgid "Visible from" +msgstr "Sichtbar von" + +#: settings/slide_settings.php:36 +#@ revslider +msgid "If set, slide will be visible till the date is reached" +msgstr "Wenn gesetzt, wird die Slide sichtbar bis das Datum erreicht wurde" + +#: settings/slide_settings.php:37 +#@ revslider +msgid "Visible until" +msgstr "Sichtbar bis" + +#: settings/slide_settings.php:83 +#, php-format +#@ revslider +msgid "A link on the whole slide pic (use %link% or %meta:somemegatag% in template sliders to link to a post or some other meta)" +msgstr "Ein Link auf dem ganzzen Slide Bild (benutze %link% oder %meta:somemetatag% in Template Slider um zu einem Beitrag oder meta Attribute des Beitrags zu verlinken)" + +#: settings/slider_settings.php:12 +#: views/templates/sliders_list.php:42 +#@ revslider +msgid "Posts" +msgstr "Beiträge" + +#: settings/slider_settings.php:13 +#@ revslider +msgid "Specific Posts" +msgstr "Spezifischer Beitrag" + +#: settings/slider_settings.php:14 +#: views/templates/sliders_list.php:34 +#@ revslider +msgid "Gallery" +msgstr "Gallerie" + +#: settings/slider_settings.php:16 +#@ revslider +msgid "Source Type" +msgstr "Quelle" + +#: settings/slider_settings.php:23 +#@ revslider +msgid "Post Types" +msgstr "Beitrags Typen" + +#: settings/slider_settings.php:27 +#@ revslider +msgid "Post Categories" +msgstr "Beitrags Kategorien" + +#: settings/slider_settings.php:36 +#@ revslider +msgid "Filter Events By" +msgstr "Filter Events Durch" + +#: settings/slider_settings.php:44 +#@ revslider +msgid "Sort Posts By" +msgstr "Soritere Beiträge Durch" + +#: settings/slider_settings.php:48 +#@ revslider +msgid "Sort Direction" +msgstr "Sortierungsrichtung" + +#: settings/slider_settings.php:52 +#@ revslider +msgid "Max Posts Per Slider" +msgstr "Max Beiträge Pro Slider" + +#: settings/slider_settings.php:56 +#@ revslider +msgid "Limit The Excerpt To" +msgstr "Limitiere Den Auszug Auf" + +#: settings/slider_settings.php:63 +#@ revslider +msgid "Template Slider" +msgstr "Template Slider" + +#: settings/slider_settings.php:67 +#@ revslider +msgid "Type here the post IDs you want to use separated by coma. ex: 23,24,25" +msgstr "Geben Sie hier die post IDs ein getrennt durch ein Komma. Bsp.: 23,24,25" + +#: settings/slider_settings.php:68 +#@ revslider +msgid "Specific Posts List" +msgstr "Spezifische Beitragsliste" + +#: settings/slider_settings.php:81 +#@ revslider +msgid "Example: #header or .header, .footer, #somecontainer | The height of fullscreen slider will be decreased with the height of these Containers to fit perfect in the screen" +msgstr "Beispiel: #header oder .header, .footer, #somecontainer | Die Höhe des Fullscreen Slider wird verkleinert mit der Höhe dieser Container um perfekt ins Bild zu passen" + +#: settings/slider_settings.php:82 +#@ revslider +msgid "Offset Containers" +msgstr "Abstands Container" + +#: settings/slider_settings.php:87 +#@ revslider +msgid "Min. Fullscreen Height" +msgstr "Min. Fullscreen Höhe" + +#: settings/slider_settings.php:91 +#@ revslider +msgid "FullScreen Align" +msgstr "FullScreen Ausrichtung" + +#: settings/slider_settings.php:95 +#@ revslider +msgid "Unlimited Height" +msgstr "Unlimitierte Höhe" + +#: settings/slider_settings.php:96 +#@ revslider +msgid "Force Full Width" +msgstr "Erzwinge Full Width" + +#: settings/slider_settings.php:102 +#@ revslider +msgid "Responsive Sizes" +msgstr "Responsive Größen" + +#: settings/slider_settings_xml_lang.php:24 +#@ revslider +msgid "To add more google fonts please read this tutorial " +msgstr "Um mehr Google Schriften einzufügen lesen Sie bitte diese Anleitung " + +#: views/slides.php:54 +#: views/templates/slide.php:142 +#@ revslider +msgid "Delete Slide" +msgstr "Slide Löschen" + +#: views/slides.php:56 +#: views/templates/edit_layers.php:47 +#@ revslider +msgid "Preview Slide" +msgstr "Vorschau der Slide" + +#: views/slides.php:89 +#@ revslider +msgid "New Post" +msgstr "Neuer Beitrag" + +#: views/system/video_dialog.php:3 +#@ revslider +msgid "Add Video Layout" +msgstr "Video Layout Hinzufügen" + +#: views/system/video_dialog.php:116 +#@ revslider +msgid "Video Size" +msgstr "Video Größen" + +#: views/system/video_dialog.php:136 +#@ revslider +msgid "Cover:" +msgstr "Cover" + +#: views/system/video_dialog.php:142 +#@ revslider +msgid "Dotted Overlay:" +msgstr "Gepunktete Überlagerung" + +#: views/system/video_dialog.php:145 +#@ revslider +msgid "none" +msgstr "keine" + +#: views/system/video_dialog.php:146 +#@ revslider +msgid "2 x 2 Black" +msgstr "2 x 2 Schwarz" + +#: views/system/video_dialog.php:147 +#@ revslider +msgid "2 x 2 White" +msgstr "2 x 2 Weiss" + +#: views/system/video_dialog.php:148 +#@ revslider +msgid "3 x 3 Black" +msgstr "3 x 3 Schwarz" + +#: views/system/video_dialog.php:149 +#@ revslider +msgid "3 x 3 White" +msgstr "3 x 3 Weiss" + +#: views/system/video_dialog.php:153 +#@ revslider +msgid "Aspect Ratio:" +msgstr "Bildformat:" + +#: views/system/video_dialog.php:156 +#@ revslider +msgid "16:9" +msgstr "16:9" + +#: views/system/video_dialog.php:157 +#@ revslider +msgid "4:3" +msgstr "4:3" + +#: views/system/video_dialog.php:168 +#@ revslider +msgid "Video Settings" +msgstr "Video Einstellungen" + +#: views/system/video_dialog.php:174 +#@ revslider +msgid "Loop Video:" +msgstr "Video Wiederholen:" + +#: views/system/video_dialog.php:179 +#@ revslider +msgid "Autoplay:" +msgstr "Autostart:" + +#: views/system/video_dialog.php:185 +#@ revslider +msgid "Only 1st Time:" +msgstr "Nur beim 1. mal:" + +#: views/system/video_dialog.php:198 +#@ revslider +msgid "Force Rewind:" +msgstr "Rückspulen Erzwingen:" + +#: views/system/video_dialog.php:205 +#@ revslider +msgid "Hide Controls:" +msgstr "Verstecke Knöpfe:" + +#: views/system/video_dialog.php:210 +#@ revslider +msgid "Mute:" +msgstr "Stumm:" + +#: views/system/video_dialog.php:219 +#@ revslider +msgid "Preview Image" +msgstr "Bild Vorschau" + +#: views/system/video_dialog.php:222 +#@ revslider +msgid "Set" +msgstr "Setzen" + +#: views/system/video_dialog.php:223 +#@ revslider +msgid "Remove" +msgstr "Entfernen" + +#: views/templates/edit_layers.php:6 +#@ revslider +msgid "Slider Main Image / Background" +msgstr "Slider Haupt Bild / Hintergrund" + +#: views/templates/edit_layers.php:11 +#@ revslider +msgid "Background Source:" +msgstr "Hintergrundquelle:" + +#: views/templates/edit_layers.php:19 +#@ revslider +msgid "Change Image" +msgstr "Bild Ändern" + +#: views/templates/edit_layers.php:25 +#@ revslider +msgid "External URL" +msgstr "Externe URL" + +#: views/templates/edit_layers.php:29 +#@ revslider +msgid "Get External" +msgstr "Hole Externe Daten" + +#: views/templates/edit_layers.php:35 +#@ revslider +msgid "Transparent" +msgstr "Transparent" + +#: views/templates/edit_layers.php:40 +#@ revslider +msgid "Solid Colored" +msgstr "Solide Farbe" + +#: views/templates/edit_layers.php:56 +#@ revslider +msgid "Background Settings:" +msgstr "Hintergrund Einstellungen:" + +#: views/templates/edit_layers.php:57 +#@ revslider +msgid "Background Fit:" +msgstr "Hintergrund Fit:" + +#: views/templates/edit_layers.php:67 +#@ revslider +msgid "Background Repeat:" +msgstr "Background Wiederholung:" + +#: views/templates/edit_layers.php:74 +#@ revslider +msgid "Background Position:" +msgstr "Background Position:" + +#: views/templates/edit_layers.php:92 +#@ revslider +msgid "Ken Burns / Pan Zoom Settings:" +msgstr "Ken Burns / Pan Zoom Einstellungen:" + +#: views/templates/edit_layers.php:101 +#@ revslider +msgid "Background" +msgstr "Hintergrund" + +#: views/templates/edit_layers.php:112 +#@ revslider +msgid "Start Position:" +msgstr "Start Position:" + +#: views/templates/edit_layers.php:117 +#@ revslider +msgid "Start Fit: (in %)" +msgstr "Start Fit: (in %)" + +#: views/templates/edit_layers.php:120 +#@ revslider +msgid "Easing:" +msgstr "Easing:" + +#: views/templates/edit_layers.php:162 +#@ revslider +msgid "End Position:" +msgstr "End Position:" + +#: views/templates/edit_layers.php:179 +#@ revslider +msgid "End Fit: (in %)" +msgstr "End Fit: (in %)" + +#: views/templates/edit_layers.php:185 +#@ revslider +msgid "Duration (in ms):" +msgstr "Dauer (in ms):" + +#: views/templates/edit_layers.php:250 +#@ revslider +msgid "Layer Content" +msgstr "Ebenen Inhalt" + +#: views/templates/edit_layers.php:296 +#@ revslider +msgid "Image Scale (dimensions in pixel)" +msgstr "Bild Maßstab (dimensionen in Pixel)" + +#: views/templates/edit_layers.php:296 +#@ revslider +msgid "reset" +msgstr "reset" + +#: views/templates/edit_layers.php:321 +#@ revslider +msgid "Preview Transition (Star end Endtime is Ignored during Demo)" +msgstr "Vorschau des Übergangs (Start und Endzeit wird ignoriert in der Demo)" + +#: views/templates/edit_layers.php:345 +#: views/templates/edit_layers.php:361 +#@ revslider +msgid "Custom Animation" +msgstr "Eigene Animationen" + +#: views/templates/edit_layers.php:432 +#@ revslider +msgid "Transition Direction" +msgstr "Übergangsrichtung" + +#: views/templates/edit_layers.php:435 +#@ revslider +msgid "*Easing, Direction and Speed only for Preview" +msgstr "*Easing, Richtung und Geschwindigkeit nur für die Vorschau" + +#: views/templates/edit_layers.php:442 +#@ revslider +msgid "Layer Animation Settings Panel" +msgstr "Ebenen Animation Einstellunge Panel" + +#: views/templates/edit_layers.php:443 +#@ revslider +msgid "random" +msgstr "zufall" + +#: views/templates/edit_layers.php:450 +#@ revslider +msgid "Transition" +msgstr "Übergang" + +#: views/templates/edit_layers.php:453 +#: views/templates/edit_layers.php:477 +#: views/templates/edit_layers.php:508 +#: views/templates/edit_layers.php:519 +#: views/templates/edit_layers.php:560 +#@ revslider +msgid "X:" +msgstr "X:" + +#: views/templates/edit_layers.php:459 +#: views/templates/edit_layers.php:483 +#: views/templates/edit_layers.php:514 +#: views/templates/edit_layers.php:526 +#: views/templates/edit_layers.php:566 +#@ revslider +msgid "Y:" +msgstr "Y:" + +#: views/templates/edit_layers.php:465 +#: views/templates/edit_layers.php:489 +#@ revslider +msgid "Z:" +msgstr "Z:" + +#: views/templates/edit_layers.php:502 +#@ revslider +msgid "Scale" +msgstr "Maßstab" + +#: views/templates/edit_layers.php:503 +#@ revslider +msgid "Skew" +msgstr "Schiefe" + +#: views/templates/edit_layers.php:541 +#@ revslider +msgid "Opacity" +msgstr "Sichtbarkeit" + +#: views/templates/edit_layers.php:542 +#@ revslider +msgid "Perspective" +msgstr "Perspektive" + +#: views/templates/edit_layers.php:543 +#@ revslider +msgid "Origin" +msgstr "Beginn" + +#: views/templates/edit_layers.php:581 +#@ revslider +msgid "Overwrite the current selected Animation " +msgstr "Überschreibe die derzeit gewählte Animation" + +#: views/templates/edit_layers.php:583 +#@ revslider +msgid " or save as a new Animation?" +msgstr "oder speichere als neue Animation?" + +#: views/templates/edit_layers.php:588 +#@ revslider +msgid "Save as Animation:" +msgstr "Speicher als Animation:" + +#: views/templates/edit_layers.php:605 +#@ revslider +msgid "Links (optional)" +msgstr "Links (optional)" + +#: views/templates/edit_layers.php:616 +#@ revslider +msgid "Caption Sharp Corners (optional only with BG color)" +msgstr "Scharfe Ecken (optional, nur sichtbar wenn HG Farbe gesetzt)" + +#: views/templates/edit_layers.php:627 +#@ revslider +msgid "Advanced Responsive Settings" +msgstr "Erweiterete Responsive Einstellungen" + +#: views/templates/edit_layers.php:639 +#@ revslider +msgid "Attributes (optional)" +msgstr "Attribute (optional)" + +#: views/templates/edit_layers.php:699 +#@ revslider +msgid "Template Insertions" +msgstr "Template Elemente" + +#: views/templates/edit_layers.php:700 +#@ revslider +msgid "Post Replace Placeholders:" +msgstr "Beitrag Ersetzungs Platzhalter:" + +#: views/templates/edit_layers.php:702 +#@ revslider +msgid "Any custom meta tag" +msgstr "Irgen ein definierted meta tag" + +#: views/templates/edit_layers.php:703 +#@ revslider +msgid "Post Title" +msgstr "Beitrags Titel" + +#: views/templates/edit_layers.php:704 +#@ revslider +msgid "Post Excerpt" +msgstr "Beitrags Auszug" + +#: views/templates/edit_layers.php:705 +#@ revslider +msgid "Post Alias" +msgstr "Beitrags Alias" + +#: views/templates/edit_layers.php:706 +#@ revslider +msgid "Post content" +msgstr "Beitrags Inhalt" + +#: views/templates/edit_layers.php:707 +#@ revslider +msgid "The link to the post" +msgstr "Der Link zu dem Beitrag" + +#: views/templates/edit_layers.php:708 +#@ revslider +msgid "Date created" +msgstr "Erstellungsdatum" + +#: views/templates/edit_layers.php:709 +#@ revslider +msgid "Date modified" +msgstr "Modifizierungsdatum" + +#: views/templates/edit_layers.php:710 +#@ revslider +msgid "Author name" +msgstr "Autor Name" + +#: views/templates/edit_layers.php:711 +#@ revslider +msgid "Number of comments" +msgstr "Anzahl der Kommentare" + +#: views/templates/edit_layers.php:712 +#@ revslider +msgid "List of categories with links" +msgstr "Liste der Kategorien mit Links" + +#: views/templates/edit_layers.php:713 +#@ revslider +msgid "List of tags with links" +msgstr "Liste der Schlagworte mit Links" + +#: views/templates/edit_layers.php:719 +#@ revslider +msgid "Events Placeholders:" +msgstr "Event Platzhalter:" + +#: views/templates/edit_layers.php:721 +#@ revslider +msgid "Event start date" +msgstr "Event Startdatum" + +#: views/templates/edit_layers.php:722 +#@ revslider +msgid "Event end date" +msgstr "Event Enddatum" + +#: views/templates/edit_layers.php:723 +#@ revslider +msgid "Event start time" +msgstr "Event Startzeit" + +#: views/templates/edit_layers.php:724 +#@ revslider +msgid "Event end time" +msgstr "Event Endzeit" + +#: views/templates/edit_layers.php:725 +#@ revslider +msgid "Event ID" +msgstr "Event ID" + +#: views/templates/edit_layers.php:726 +#@ revslider +msgid "Event location name" +msgstr "Event Lokation Name" + +#: views/templates/edit_layers.php:727 +#@ revslider +msgid "Event location slug" +msgstr "Event Lokation slug" + +#: views/templates/edit_layers.php:728 +#@ revslider +msgid "Event location address" +msgstr "Event Lokation Adresse" + +#: views/templates/edit_layers.php:729 +#@ revslider +msgid "Event location town" +msgstr "Event Lokation Stadt" + +#: views/templates/edit_layers.php:730 +#@ revslider +msgid "Event location state" +msgstr "Event Lokation Bundesland" + +#: views/templates/edit_layers.php:731 +#@ revslider +msgid "Event location postcode" +msgstr "Event Lokation Postleitzahl" + +#: views/templates/edit_layers.php:732 +#@ revslider +msgid "Event location region" +msgstr "Event Location Region" + +#: views/templates/edit_layers.php:733 +#@ revslider +msgid "Event location country" +msgstr "Event Lokation Land" + +#: views/templates/slide.php:28 +#@ revslider +msgid "Edit Template Slide" +msgstr "Bearbeite Template Slide" + +#: views/templates/slide.php:35 +#: views/templates/slider_edit.php:20 +#: views/templates/slider_new.php:18 +#: views/templates/sliders.php:17 +#: views/templates/slides.php:10 +#: views/templates/slides_gallery.php:10 +#@ revslider +msgid "Help" +msgstr "Hilfe" + +#: views/templates/slide.php:83 +#@ revslider +msgid "Choose slide language" +msgstr "Wähle Slide Sprache" + +#: views/templates/slide.php:106 +#@ revslider +msgid "All the language related operations are from" +msgstr "Alle Sprach operationen sind von" + +#: views/templates/slide.php:106 +#@ revslider +msgid "slides view" +msgstr "slides ansicht" + +#: views/templates/slide.php:141 +#@ revslider +msgid "To Slide List" +msgstr "Zur Slide Liste" + +#: views/templates/slide.php:160 +#: views/templates/slides_gallery.php:73 +#@ revslider +msgid "Delete this slide?" +msgstr "Diese Slide löschen?" + +#: views/templates/slider_api.php:50 +#@ revslider +msgid "Redraw Slider" +msgstr "Slider Erneuern" + +#: views/templates/slider_edit.php:11 +#@ revslider +msgid "Edit Slider Template" +msgstr "Slider Template Bearbeiten" + +#: views/templates/slider_edit.php:36 +#@ revslider +msgid " Can be different based on Theme Style" +msgstr "Kann durch das Theme Stil anders sein" + +#: views/templates/slider_edit.php:54 +#@ revslider +msgid "Save Settings" +msgstr "Einstellungen Speichern" + +#: views/templates/slider_new.php:8 +#@ revslider +msgid "New Slider Template" +msgstr "Neues Slider Template" + +#: views/templates/slider_new.php:29 +#@ revslider +msgid "(Can be different based on Theme Style)" +msgstr "(Kann anders sein je nach Theme Stil)" + +#: views/templates/slider_toolbox.php:16 +#: views/templates/sliders.php:85 +#@ revslider +msgid "Note: custom styles will be updated if they exist!" +msgstr "Beachte: eigene styles werden aktualisiert wenn sie schon existieren!" + +#: views/templates/slider_toolbox.php:19 +#: views/templates/sliders.php:88 +#@ revslider +msgid "Custom Animations:" +msgstr "Eigene Animationen:" + +#: views/templates/slider_toolbox.php:20 +#: views/templates/slider_toolbox.php:25 +#: views/templates/sliders.php:89 +#: views/templates/sliders.php:94 +#@ revslider +msgid "overwrite" +msgstr "überschreiben" + +#: views/templates/slider_toolbox.php:21 +#: views/templates/slider_toolbox.php:26 +#: views/templates/sliders.php:90 +#: views/templates/sliders.php:95 +#@ revslider +msgid "append" +msgstr "anfügen" + +#: views/templates/slider_toolbox.php:40 +#@ revslider +msgid "Export with Dummy Images" +msgstr "Export mit Beispiel Bildern" + +#: views/templates/slider_toolbox.php:46 +#@ revslider +msgid "Replace Image Url's" +msgstr "Ersetze Bild URL's" + +#: views/templates/slider_toolbox.php:48 +#@ revslider +msgid "Replace all layer and background image url's. Example: http://localhost/ to http://yourwbsite.com/.
            Note, the replace is not reversible" +msgstr "Ersetze alle Ebenen und Hintergrund Bilder URL's. Beispiel: http://localhost/ zu http://yourwbsite.com/.
            Beachte: das ersetzen kann nicht rückgängig gemacht werden" + +#: views/templates/slider_toolbox.php:52 +#@ revslider +msgid "Replace From (example - http://localhost)" +msgstr "Ersetze von (Beispiel - http:://localhost)" + +#: views/templates/slider_toolbox.php:58 +#@ revslider +msgid "Replace To (example - http://yoursite.com)" +msgstr "Ersetze zu (Beispiel - http://yoursite.com)" + +#: views/templates/slider_toolbox.php:64 +#@ revslider +msgid "Replace" +msgstr "Ersetze" + +#: views/templates/slider_toolbox.php:65 +#@ revslider +msgid "Replacing..." +msgstr "Ersetze..." + +#: views/templates/sliders.php:36 +#@ revslider +msgid "Revolution Slider Templates" +msgstr "Revolution Slider Templates" + +#: views/templates/sliders.php:38 +#@ revslider +msgid "No Template Sliders Found" +msgstr "Keine Slider Templates gefunden" + +#: views/templates/sliders.php:47 +#@ revslider +msgid "Create New Template Slider" +msgstr "Erstelle Neuen Template Slider" + +#: views/templates/sliders.php:64 +#@ revslider +msgid "If you have some support issue:" +msgstr "Wenn Sie Support Fragen haben:" + +#: views/templates/sliders.php:65 +#@ revslider +msgid "- In case the Slider came bundled with your theme, please contact your theme author" +msgstr "- Im Falle das der Slider innerhalb Ihres Themes kam, kontaktieren Sie bitte Ihren Theme Autor" + +#: views/templates/sliders.php:66 +#@ revslider +msgid "- If the Slider has been purchased at CodeCanyon, visit" +msgstr "- Wenn der Slider auf CodeCanyon gekauft wurde, besuchen Sie" + +#: views/templates/sliders.php:66 +#@ revslider +msgid "Discussion Page" +msgstr "Diskussions Seite" + +#: views/templates/sliders_list.php:14 +#@ revslider +msgid "Source" +msgstr "Quelle" + +#: views/templates/sliders_list.php:83 +#@ revslider +msgid "Settings" +msgstr "Einstellungen" + +#: views/templates/slides_gallery.php:40 +#: views/templates/slides_posts.php:1 +#@ revslider +msgid "Slider Settings" +msgstr "Slider Einstellungen" + +#: views/templates/slides_gallery.php:70 +#: views/templates/slides_posts.php:1 +#@ revslider +msgid "Select Slide Image" +msgstr "Slied Bild Wählen" + +#: views/templates/slides_list_posts.php:1 +#@ revslider +msgid "Unpublish Post" +msgstr "Deaktiviere Beitrag" + +#: views/templates/slides_list_posts.php:1 +#@ revslider +msgid "Publish Post" +msgstr "Aktiviere Beitrag" + +#: views/templates/slides_list_posts.php:1 +#@ revslider +msgid "Edit Post" +msgstr "Beitrag Bearbeiten" + +#: views/templates/slides_posts.php:1 +#@ revslider +msgid "The slides are posts that taken from multiple sources." +msgstr "Die Slides sind Beiträge von mehreren Quellen" + +#: views/templates/slides_posts.php:1 +#@ revslider +msgid "Sort by" +msgstr "Sortiere nach" + +#: views/templates/slides_posts.php:1 +#@ revslider +msgid "Updating Sorting..." +msgstr "Aktualisiere Sortierung..." + +#: views/templates/slides_posts.php:1 +#@ revslider +msgid "Warning! Removing this entry will cause the original wordpress post to be deleted." +msgstr "Warnung! Die Entfernung dieses Beitrages löscht den Originalen Beitrag von WordPress." + diff --git a/src/wp-content/plugins/revslider/languages/revslider-en_GB.mo b/src/wp-content/plugins/revslider/languages/revslider-en_GB.mo new file mode 100644 index 0000000..dda705e Binary files /dev/null and b/src/wp-content/plugins/revslider/languages/revslider-en_GB.mo differ diff --git a/src/wp-content/plugins/revslider/languages/revslider-en_GB.po b/src/wp-content/plugins/revslider/languages/revslider-en_GB.po new file mode 100644 index 0000000..aa592eb --- /dev/null +++ b/src/wp-content/plugins/revslider/languages/revslider-en_GB.po @@ -0,0 +1,1662 @@ +msgid "" +msgstr "" +"Project-Id-Version: Revolution Slider v2.3.93\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2013-05-30 16:26:41+0000\n" +"Last-Translator: admin \n" +"Language-Team: \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: CSL v1.x\n" +"X-Poedit-Language: English\n" +"X-Poedit-Country: UNITED KINGDOM\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n" +"X-Poedit-Basepath: \n" +"X-Poedit-Bookmarks: \n" +"X-Poedit-SearchPath-0: .\n" +"X-Textdomain-Support: yes" + +#: inc_php/revslider_widget.class.php:8 +#@ default +msgid "Displays a revolution slider on the page" +msgstr "" + +#: inc_php/revslider_widget.class.php:9 +#@ default +msgid "Revolution Slider" +msgstr "" + +#: inc_php/revslider_widget.class.php:22 +#@ default +msgid "No sliders found, Please create a slider" +msgstr "" + +#: views/templates/sliders.php:10 +#@ revslider +msgid "Revolution Sliders" +msgstr "" + +#: views/templates/sliders.php:30 +#@ revslider +msgid "How To Use" +msgstr "" + +#: settings/slide_settings.php:44 +#: settings/slider_settings_xml_lang.php:10 +#@ revslider +msgid "Delay" +msgstr "" + +#: settings/slider_settings_xml_lang.php:11 +#@ revslider +msgid "The time one slide stays on the screen in Milliseconds" +msgstr "" + +#: settings/slider_settings_xml_lang.php:12 +#@ revslider +msgid "Touch Enabled" +msgstr "" + +#: settings/slider_settings_xml_lang.php:13 +#@ revslider +msgid "Enable Swipe Function on touch devices" +msgstr "" + +#: settings/slider_settings_xml_lang.php:16 +#@ revslider +msgid "Stop On Hover" +msgstr "" + +#: settings/slider_settings_xml_lang.php:17 +#@ revslider +msgid "Stop the Timer when hovering the slider" +msgstr "" + +#: settings/slider_settings_xml_lang.php:18 +#@ revslider +msgid "Shuffle Mode" +msgstr "" + +#: settings/slider_settings_xml_lang.php:19 +#@ revslider +msgid "Turn Shuffle Mode on and off! Will be randomized only once at the start." +msgstr "" + +#: settings/slider_settings_xml_lang.php:20 +#@ revslider +msgid "Load Google Font" +msgstr "" + +#: settings/slider_settings_xml_lang.php:21 +#@ revslider +msgid "yes / no to load google font" +msgstr "" + +#: settings/slider_settings_xml_lang.php:24 +#@ revslider +msgid "Google Font" +msgstr "" + +#: settings/slider_settings_xml_lang.php:25 +#@ revslider +msgid "The google font family to load" +msgstr "" + +#: settings/slider_settings_xml_lang.php:26 +#@ revslider +msgid "Stop Slider" +msgstr "" + +#: settings/slider_settings_xml_lang.php:27 +#@ revslider +msgid "On / Off to stop slider after some amount of loops / slides" +msgstr "" + +#: settings/slider_settings_xml_lang.php:28 +#@ revslider +msgid "Stop After Loops" +msgstr "" + +#: settings/slider_settings_xml_lang.php:29 +#@ revslider +msgid "Stop the slider after certain amount of loops. 0 related to the first loop." +msgstr "" + +#: settings/slider_settings_xml_lang.php:30 +#@ revslider +msgid "Stop At Slide" +msgstr "" + +#: settings/slider_settings_xml_lang.php:31 +#@ revslider +msgid "Stop the slider at the given slide" +msgstr "" + +#: settings/slider_settings_xml_lang.php:32 +#@ revslider +msgid "Position on the page" +msgstr "" + +#: settings/slider_settings_xml_lang.php:33 +#@ revslider +msgid "The position of the slider on the page, (float:left, float:right, margin:0px auto;)" +msgstr "" + +#: settings/slider_settings_xml_lang.php:37 +#@ revslider +msgid "Margin Top" +msgstr "" + +#: settings/slider_settings_xml_lang.php:38 +#@ revslider +msgid "The top margin of the slider wrapper div" +msgstr "" + +#: settings/slider_settings_xml_lang.php:39 +#@ revslider +msgid "px" +msgstr "" + +#: settings/slider_settings_xml_lang.php:40 +#@ revslider +msgid "Margin Bottom" +msgstr "" + +#: settings/slider_settings_xml_lang.php:41 +#@ revslider +msgid "The bottom margin of the slider wrapper div" +msgstr "" + +#: settings/slider_settings_xml_lang.php:42 +#@ revslider +msgid "Margin Left" +msgstr "" + +#: settings/slider_settings_xml_lang.php:43 +#@ revslider +msgid "The left margin of the slider wrapper div" +msgstr "" + +#: settings/slider_settings_xml_lang.php:44 +#@ revslider +msgid "Margin Right" +msgstr "" + +#: settings/slider_settings_xml_lang.php:45 +#@ revslider +msgid "The right margin of the slider wrapper div" +msgstr "" + +#: settings/slider_settings_xml_lang.php:46 +#@ revslider +msgid "Shadow Type" +msgstr "" + +#: settings/slider_settings_xml_lang.php:47 +#@ revslider +msgid "The Shadow display underneath the banner. The shadow apply to fixed and responsive modes only, the full width slider don't have a shadow." +msgstr "" + +#: settings/slider_settings_xml_lang.php:52 +#@ revslider +msgid "Show Timer Line" +msgstr "" + +#: settings/slider_settings_xml_lang.php:53 +#@ revslider +msgid "Show the top running timer line" +msgstr "" + +#: settings/slider_settings_xml_lang.php:56 +#@ revslider +msgid "Timer Line Position" +msgstr "" + +#: settings/slider_settings_xml_lang.php:57 +#@ revslider +msgid "Set the timer line position to top or bottom" +msgstr "" + +#: settings/slider_settings_xml_lang.php:60 +#@ revslider +msgid "Background color" +msgstr "" + +#: settings/slider_settings_xml_lang.php:61 +#@ revslider +msgid "Slider wrapper div background color, for transparent slider, leave empty." +msgstr "" + +#: settings/slider_settings_xml_lang.php:62 +#@ revslider +msgid "Padding (border)" +msgstr "" + +#: settings/slider_settings_xml_lang.php:63 +#@ revslider +msgid "The wrapper div padding, if it has value, then together with background color it it will make border around the slider." +msgstr "" + +#: settings/slider_settings_xml_lang.php:64 +#@ revslider +msgid "Show Background Image" +msgstr "" + +#: settings/slider_settings_xml_lang.php:65 +#@ revslider +msgid "yes / no to put background image to the main slider wrapper." +msgstr "" + +#: settings/slider_settings_xml_lang.php:66 +#@ revslider +msgid "Background Image Url" +msgstr "" + +#: settings/slider_settings_xml_lang.php:67 +#@ revslider +msgid "The background image that will be on the slider wrapper. Will be shown at slider preloading." +msgstr "" + +#: settings/slider_settings_xml_lang.php:68 +#@ revslider +msgid "Navigation Type" +msgstr "" + +#: settings/slider_settings_xml_lang.php:69 +#@ revslider +msgid "Display type of the navigation bar (Default:none" +msgstr "" + +#: settings/slider_settings_xml_lang.php:74 +#@ revslider +msgid "Navigation Arrows" +msgstr "" + +#: settings/slider_settings_xml_lang.php:75 +#@ revslider +msgid "Display position of the Navigation Arrows (** By navigation Type Thumb arrows always centered or none visible)" +msgstr "" + +#: settings/slider_settings_xml_lang.php:78 +#@ revslider +msgid "Navigation Style" +msgstr "" + +#: settings/slider_settings_xml_lang.php:79 +#@ revslider +msgid "Look of the navigation bullets ** If you choose navbar, we recommend to choose Navigation Arrows to nexttobullets" +msgstr "" + +#: settings/slider_settings_xml_lang.php:85 +#@ revslider +msgid "Always Show Navigation" +msgstr "" + +#: settings/slider_settings_xml_lang.php:86 +#@ revslider +msgid "Always show the navigation and the thumbnails." +msgstr "" + +#: settings/slider_settings_xml_lang.php:87 +#@ revslider +msgid "Hide Navitagion After" +msgstr "" + +#: settings/slider_settings_xml_lang.php:88 +#@ revslider +msgid "Time after that the Navigation and the Thumbs will be hidden(Default: 200 ms)" +msgstr "" + +#: settings/layer_settings.php:31 +#: settings/layer_settings.php:41 +#: settings/layer_settings.php:46 +#: settings/slider_settings_xml_lang.php:89 +#@ revslider +msgid "ms" +msgstr "" + +#: settings/slider_settings_xml_lang.php:90 +#@ revslider +msgid "Navigation Horizontal Align" +msgstr "" + +#: settings/slider_settings_xml_lang.php:91 +#@ revslider +msgid "Horizontal Align of Bullets / Thumbnails" +msgstr "" + +#: settings/slider_settings_xml_lang.php:92 +#@ revslider +msgid "Navigation Vertical Align" +msgstr "" + +#: settings/slider_settings_xml_lang.php:93 +#@ revslider +msgid "Vertical Align of Bullets / Thumbnails" +msgstr "" + +#: settings/slider_settings_xml_lang.php:94 +#@ revslider +msgid "Navigation Horizontal Offset" +msgstr "" + +#: settings/slider_settings_xml_lang.php:95 +#@ revslider +msgid "Offset from current Horizontal position of Bullets / Thumbnails negative and positive direction" +msgstr "" + +#: settings/slider_settings_xml_lang.php:96 +#@ revslider +msgid "Navigation Vertical Offset" +msgstr "" + +#: settings/slider_settings_xml_lang.php:97 +#@ revslider +msgid "Offset from current Vertical position of Bullets / Thumbnails negative and positive direction" +msgstr "" + +#: settings/slider_settings_xml_lang.php:98 +#@ revslider +msgid "Left Arrow Horizontal Align" +msgstr "" + +#: settings/slider_settings_xml_lang.php:99 +#@ revslider +msgid "Horizontal Align of left Arrow (only if arrow is not next to bullets)" +msgstr "" + +#: settings/slider_settings_xml_lang.php:100 +#@ revslider +msgid "Left Arrow Vertical Align" +msgstr "" + +#: settings/slider_settings_xml_lang.php:101 +#@ revslider +msgid "Vertical Align of left Arrow (only if arrow is not next to bullets)" +msgstr "" + +#: settings/slider_settings_xml_lang.php:102 +#@ revslider +msgid "Left Arrow Horizontal Offset" +msgstr "" + +#: settings/slider_settings_xml_lang.php:103 +#@ revslider +msgid "Offset from current Horizontal position of of left Arrow negative and positive direction" +msgstr "" + +#: settings/slider_settings_xml_lang.php:104 +#@ revslider +msgid "Left Arrow Vertical Offset" +msgstr "" + +#: settings/slider_settings_xml_lang.php:105 +#@ revslider +msgid "Offset from current Vertical position of of left Arrow negative and positive direction" +msgstr "" + +#: settings/slider_settings_xml_lang.php:106 +#@ revslider +msgid "Right Arrow Horizontal Align" +msgstr "" + +#: settings/slider_settings_xml_lang.php:107 +#@ revslider +msgid "Horizontal Align of right Arrow (only if arrow is not next to bullets)" +msgstr "" + +#: settings/slider_settings_xml_lang.php:108 +#@ revslider +msgid "Right Arrow Vertical Align" +msgstr "" + +#: settings/slider_settings_xml_lang.php:109 +#@ revslider +msgid "Vertical Align of right Arrow (only if arrow is not next to bullets)" +msgstr "" + +#: settings/slider_settings_xml_lang.php:110 +#@ revslider +msgid "Right Arrow Horizontal Offset" +msgstr "" + +#: settings/slider_settings_xml_lang.php:111 +#@ revslider +msgid "Offset from current Horizontal position of of right Arrow negative and positive direction" +msgstr "" + +#: settings/slider_settings_xml_lang.php:112 +#@ revslider +msgid "Right Arrow Vertical Offset" +msgstr "" + +#: settings/slider_settings_xml_lang.php:113 +#@ revslider +msgid "Offset from current Vertical position of of right Arrow negative and positive direction" +msgstr "" + +#: settings/slider_settings_xml_lang.php:114 +#@ revslider +msgid "Thumb Width" +msgstr "" + +#: settings/slider_settings_xml_lang.php:115 +#@ revslider +msgid "The basic Width of one Thumbnail (only if thumb is selected)" +msgstr "" + +#: settings/slider_settings_xml_lang.php:116 +#@ revslider +msgid "Thumb Height" +msgstr "" + +#: settings/slider_settings_xml_lang.php:117 +#@ revslider +msgid "the basic Height of one Thumbnail (only if thumb is selected)" +msgstr "" + +#: settings/slider_settings_xml_lang.php:118 +#@ revslider +msgid "Thumb Amount" +msgstr "" + +#: settings/slider_settings_xml_lang.php:119 +#@ revslider +msgid "the amount of the Thumbs visible same time (only if thumb is selected)" +msgstr "" + +#: settings/slider_settings_xml_lang.php:120 +#@ revslider +msgid "Hide Slider Under Width" +msgstr "" + +#: settings/slider_settings_xml_lang.php:121 +#@ revslider +msgid "Hide the slider under some slider width. Works only in Responsive Style. Not available for Fullwidth." +msgstr "" + +#: settings/slider_settings_xml_lang.php:122 +#@ revslider +msgid "Hide Defined Layers Under Width" +msgstr "" + +#: settings/slider_settings_xml_lang.php:123 +#@ revslider +msgid "Hide some defined layers in the layer properties under some slider width." +msgstr "" + +#: settings/slider_settings_xml_lang.php:124 +#@ revslider +msgid "Hide All Layers Under Width" +msgstr "" + +#: settings/slider_settings_xml_lang.php:125 +#@ revslider +msgid "Hide all layers under some slider width" +msgstr "" + +#: settings/slider_settings_xml_lang.php:126 +#@ revslider +msgid "Start With Slide" +msgstr "" + +#: settings/slider_settings_xml_lang.php:127 +#@ revslider +msgid "Change it if you want to start from a different slide then 1" +msgstr "" + +#: settings/slider_settings_xml_lang.php:128 +#@ revslider +msgid "First Transition Active" +msgstr "" + +#: settings/slider_settings_xml_lang.php:129 +#@ revslider +msgid "If active, it will overwrite the first slide transition. Use it when you want a special transition for the first slide only." +msgstr "" + +#: settings/slider_settings_xml_lang.php:130 +#@ revslider +msgid "First Transition Type" +msgstr "" + +#: settings/slider_settings_xml_lang.php:131 +#@ revslider +msgid "First slide transition type" +msgstr "" + +#: settings/slider_settings_xml_lang.php:133 +#@ revslider +msgid "First Transition Duration" +msgstr "" + +#: settings/slider_settings_xml_lang.php:134 +#@ revslider +msgid "First slide transition duration (Default:300, min: 100 max 2000)" +msgstr "" + +#: settings/slider_settings_xml_lang.php:135 +#@ revslider +msgid "First Transition Slot Amount" +msgstr "" + +#: settings/slider_settings_xml_lang.php:136 +#@ revslider +msgid "The number of slots or boxes the slide is divided into. If you use boxfade, over 7 slots can be juggy" +msgstr "" + +#: settings/slider_settings_xml_lang.php:137 +#@ revslider +msgid "JQuery No Conflict Mode" +msgstr "" + +#: settings/slider_settings_xml_lang.php:138 +#@ revslider +msgid "Turns on / off jquery noconflict mode. You can play with this option when you have some javascript conflicts." +msgstr "" + +#: settings/slider_settings_xml_lang.php:139 +#@ revslider +msgid "Put JS Includes To Body" +msgstr "" + +#: settings/slider_settings_xml_lang.php:140 +#@ revslider +msgid "Putting the js to body (in addition to head) is good for fixing some javascript conflicts of type: TypeError: tpj('#rev_slider_1_1').show().revolution is not a function" +msgstr "" + +#: settings/slider_settings_xml_lang.php:143 +#@ revslider +msgid "Output Filters Protection" +msgstr "" + +#: settings/slider_settings_xml_lang.php:144 +#@ revslider +msgid "Activate a protection against wordpress output filters that adds html blocks to the shortcode output like P and BR" +msgstr "" + +#: inc_php/settings_product_sidebar.class.php:381 +#@ revslider +msgid "text" +msgstr "" + +#: settings/slider_settings_xml_lang.php:14 +#@ revslider +msgid "On" +msgstr "" + +#: settings/slider_settings_xml_lang.php:15 +#@ revslider +msgid "Off" +msgstr "" + +#: settings/slider_settings_xml_lang.php:22 +#@ revslider +msgid "Yes" +msgstr "" + +#: settings/slider_settings_xml_lang.php:23 +#@ revslider +msgid "No" +msgstr "" + +#: settings/slider_settings_xml_lang.php:34 +#@ revslider +msgid "Left" +msgstr "" + +#: settings/slider_settings_xml_lang.php:35 +#@ revslider +msgid "Center" +msgstr "" + +#: settings/slider_settings_xml_lang.php:36 +#@ revslider +msgid "Right" +msgstr "" + +#: settings/slider_settings_xml_lang.php:48 +#@ revslider +msgid "No Shadow" +msgstr "" + +#: settings/slider_settings_xml_lang.php:49 +#@ revslider +msgid "1" +msgstr "" + +#: settings/slider_settings_xml_lang.php:50 +#@ revslider +msgid "2" +msgstr "" + +#: settings/slider_settings_xml_lang.php:51 +#@ revslider +msgid "3" +msgstr "" + +#: settings/slider_settings_xml_lang.php:54 +#@ revslider +msgid "Show" +msgstr "" + +#: settings/slider_settings_xml_lang.php:55 +#@ revslider +msgid "Hide" +msgstr "" + +#: settings/slider_settings_xml_lang.php:58 +#@ revslider +msgid "Top" +msgstr "" + +#: settings/slider_settings_xml_lang.php:59 +#@ revslider +msgid "Bottom" +msgstr "" + +#: settings/slider_settings_xml_lang.php:70 +#@ revslider +msgid "None" +msgstr "" + +#: settings/slider_settings_xml_lang.php:71 +#@ revslider +msgid "Bullet" +msgstr "" + +#: settings/slider_settings_xml_lang.php:72 +#@ revslider +msgid "Thumb" +msgstr "" + +#: settings/slider_settings_xml_lang.php:73 +#@ revslider +msgid "Both" +msgstr "" + +#: settings/slider_settings_xml_lang.php:76 +#@ revslider +msgid "With Bullets" +msgstr "" + +#: settings/slider_settings_xml_lang.php:77 +#@ revslider +msgid "Solo" +msgstr "" + +#: settings/slider_settings_xml_lang.php:80 +#@ revslider +msgid "Round" +msgstr "" + +#: settings/slider_settings_xml_lang.php:81 +#@ revslider +msgid "Navbar" +msgstr "" + +#: settings/slider_settings_xml_lang.php:82 +#@ revslider +msgid "Old Round" +msgstr "" + +#: settings/slider_settings_xml_lang.php:83 +#@ revslider +msgid "Old Square" +msgstr "" + +#: settings/slider_settings_xml_lang.php:84 +#@ revslider +msgid "Old Navbar" +msgstr "" + +#: settings/slider_settings_xml_lang.php:132 +#@ revslider +msgid "Replace me!" +msgstr "" + +#: settings/slider_settings_xml_lang.php:141 +#@ revslider +msgid "True" +msgstr "" + +#: settings/slider_settings_xml_lang.php:142 +#@ revslider +msgid "False" +msgstr "" + +#: settings/slider_settings_xml_lang.php:145 +#@ revslider +msgid "By Compressing Output" +msgstr "" + +#: settings/slider_settings_xml_lang.php:146 +#@ revslider +msgid "By Echo Output" +msgstr "" + +#: views/master_view.php:39 +#@ revslider +msgid "Update Plugin" +msgstr "" + +#: views/system/update_dialog.php:2 +#@ revslider +msgid "Update Slider Plugin" +msgstr "" + +#: views/system/update_dialog.php:3 +#@ revslider +msgid "Update Revolution Slider Plugin" +msgstr "" + +#: views/system/update_dialog.php:5 +#@ revslider +msgid "To update the slider please show the slider install package. The files will be overwriten." +msgstr "" + +#: views/system/update_dialog.php:6 +#@ default +msgid "File example: revslider.zip" +msgstr "" + +#: views/system/update_dialog.php:18 +#@ revslider +msgid "Choose the update file:" +msgstr "" + +#: views/system/update_dialog.php:22 +#: views/templates/slider_edit.php:17 +#@ revslider +msgid "Update Slider" +msgstr "" + +#: views/system/video_dialog.php:3 +#@ revslider +msgid "Add Youtube Layout" +msgstr "" + +#: views/system/video_dialog.php:11 +#@ revslider +msgid "Choose video type" +msgstr "" + +#: views/system/video_dialog.php:26 +#@ revslider +msgid "Enter Vimeo ID or URL" +msgstr "" + +#: views/system/video_dialog.php:36 +#@ revslider +msgid "example: 30300114" +msgstr "" + +#: views/templates/edit_layers.php:7 +#@ revslider +msgid "Image BG" +msgstr "" + +#: views/templates/edit_layers.php:13 +#@ revslider +msgid "Trapsparent BG" +msgstr "" + +#: views/templates/edit_layers.php:18 +#@ revslider +msgid "Solid BG" +msgstr "" + +#: views/templates/edit_layers.php:27 +#@ revslider +msgid "Add Layer" +msgstr "" + +#: views/templates/edit_layers.php:28 +#@ revslider +msgid "Add Layer: Image" +msgstr "" + +#: views/templates/edit_layers.php:29 +#@ revslider +msgid "Add Layer: Video" +msgstr "" + +#: views/templates/edit_layers.php:31 +#@ revslider +msgid "Delete Layer" +msgstr "" + +#: views/templates/edit_layers.php:32 +#@ revslider +msgid "Delete All Layers" +msgstr "" + +#: views/templates/edit_layers.php:34 +#@ default +msgid "Duplicate Layer" +msgstr "" + +#: settings/layer_settings.php:19 +#: settings/layer_settings.php:20 +#: views/templates/edit_layers.php:67 +#@ revslider +msgid "Layer Params" +msgstr "" + +#: views/templates/edit_layers.php:123 +#@ revslider +msgid "Layers Sorting" +msgstr "" + +#: views/templates/edit_layers.php:125 +#@ revslider +msgid "By Time" +msgstr "" + +#: views/templates/edit_layers.php:126 +#@ revslider +msgid "By Depth" +msgstr "" + +#: views/templates/slide.php:16 +#: views/templates/slides_list.php:65 +#@ revslider +msgid "Edit Slide" +msgstr "" + +#: views/templates/slide.php:17 +#@ revslider +msgid "Hide Slide Options" +msgstr "" + +#: views/templates/slide.php:30 +#@ revslider +msgid "Slide Image and Layers" +msgstr "" + +#: views/templates/slide.php:40 +#@ revslider +msgid "Update Slide" +msgstr "" + +#: views/templates/slide.php:41 +#@ revslider +msgid "updating" +msgstr "" + +#: views/templates/slide.php:44 +#: views/templates/slider_edit.php:24 +#: views/templates/slider_new.php:19 +#: views/templates/slides.php:17 +#@ revslider +msgid "Close" +msgstr "" + +#: views/templates/slider_api.php:7 +#@ revslider +msgid "API Methods" +msgstr "" + +#: views/templates/slider_api.php:8 +#@ revslider +msgid "Please copy / paste those functions into your functions js file" +msgstr "" + +#: views/templates/slider_api.php:12 +#@ revslider +msgid "Pause Slider" +msgstr "" + +#: views/templates/slider_api.php:16 +#@ revslider +msgid "Resume Slider" +msgstr "" + +#: views/templates/slider_api.php:20 +#@ revslider +msgid "Previous Slide" +msgstr "" + +#: views/templates/slider_api.php:24 +#@ revslider +msgid "Next Slide" +msgstr "" + +#: views/templates/slider_api.php:28 +#@ revslider +msgid "Go To Slide" +msgstr "" + +#: views/templates/slider_api.php:32 +#@ revslider +msgid "Get Num Slides" +msgstr "" + +#: views/templates/slider_api.php:36 +#@ revslider +msgid "Get Current Slide Number" +msgstr "" + +#: views/templates/slider_api.php:40 +#@ revslider +msgid "Get Last Playing Slide Number" +msgstr "" + +#: views/templates/slider_api.php:46 +#@ revslider +msgid "API Events" +msgstr "" + +#: views/templates/slider_api.php:47 +#@ revslider +msgid "Copy / Paste all the textarea content into functions js file, then use what you want" +msgstr "" + +#: views/templates/slider_edit.php:6 +#@ revslider +msgid "Edit Slider" +msgstr "" + +#: views/templates/slider_edit.php:18 +#@ revslider +msgid "updating..." +msgstr "" + +#: views/templates/slider_edit.php:22 +#@ revslider +msgid "Delete Slider" +msgstr "" + +#: views/templates/slider_edit.php:26 +#: views/templates/sliders_list.php:34 +#: views/templates/slides.php:3 +#@ revslider +msgid "Edit Slides" +msgstr "" + +#: views/templates/slider_edit.php:28 +#@ revslider +msgid "Preview Slider" +msgstr "" + +#: views/templates/slider_edit.php:32 +#@ revslider +msgid "Show API Functions" +msgstr "" + +#: views/templates/slider_edit.php:33 +#@ revslider +msgid "Show Export / Import" +msgstr "" + +#: views/templates/slider_new.php:5 +#@ revslider +msgid "New Slider" +msgstr "" + +#: views/templates/slider_new.php:15 +#@ revslider +msgid "Create Slider" +msgstr "" + +#: views/templates/slider_toolbox.php:4 +#@ revslider +msgid "Export / Import slider" +msgstr "" + +#: views/templates/slider_toolbox.php:5 +#@ revslider +msgid "Note, that when you importing slider, it delete all the current slider settings and slides, then replace it with the new ones" +msgstr "" + +#: views/templates/slider_toolbox.php:19 +#@ revslider +msgid "Choose the import file" +msgstr "" + +#: views/templates/sliders.php:15 +#@ revslider +msgid "No Sliders Found" +msgstr "" + +#: views/templates/sliders.php:24 +#@ revslider +msgid "Create New Slider" +msgstr "" + +#: views/templates/sliders.php:34 +#: views/templates/sliders.php:39 +#: views/templates/sliders.php:40 +#@ default +#@ revslider +msgid "* From the" +msgstr "" + +#: views/templates/sliders.php:34 +#@ revslider +msgid "theme html" +msgstr "" + +#: views/templates/sliders.php:34 +#@ revslider +msgid "use" +msgstr "" + +#: views/templates/sliders.php:34 +#@ revslider +msgid "example" +msgstr "" + +#: views/templates/sliders.php:36 +#@ revslider +msgid "For show only on homepage use" +msgstr "" + +#: views/templates/sliders.php:37 +#@ default +msgid "For show on certain pages use" +msgstr "" + +#: views/templates/sliders.php:39 +#@ revslider +msgid "widgets panel" +msgstr "" + +#: views/templates/sliders.php:39 +#@ revslider +msgid "drag the \"Revolution Slider\" widget to the desired sidebar" +msgstr "" + +#: views/templates/sliders.php:40 +#@ revslider +msgid "post editor" +msgstr "" + +#: views/templates/sliders.php:40 +#@ revslider +msgid "insert the shortcode from the sliders table" +msgstr "" + +#: views/templates/sliders.php:44 +#@ revslider +msgid "If you have some support issue, don't hesitate to" +msgstr "" + +#: views/templates/sliders.php:45 +#@ revslider +msgid "write here" +msgstr "" + +#: views/templates/sliders.php:46 +#@ revslider +msgid "The ThemePunch team will be happy to support you on any issue" +msgstr "" + +#: views/templates/sliders_list.php:5 +#@ revslider +msgid "ID" +msgstr "" + +#: views/templates/sliders_list.php:6 +#@ revslider +msgid "Name" +msgstr "" + +#: views/templates/sliders_list.php:7 +#@ revslider +msgid "N. Slides" +msgstr "" + +#: views/templates/sliders_list.php:8 +#@ revslider +msgid "Actions" +msgstr "" + +#: views/templates/sliders_list.php:9 +#@ revslider +msgid "Shortcode" +msgstr "" + +#: views/templates/sliders_list.php:10 +#: views/templates/sliders_list.php:42 +#@ revslider +msgid "Preview" +msgstr "" + +#: views/templates/sliders_list.php:36 +#: views/templates/slides_list.php:90 +#@ revslider +msgid "Delete" +msgstr "" + +#: views/templates/sliders_list.php:38 +#: views/templates/slides_list.php:91 +#@ revslider +msgid "Duplicate" +msgstr "" + +#: views/templates/slides.php:7 +#: views/templates/slides.php:15 +#@ revslider +msgid "New Slide" +msgstr "" + +#: views/templates/slides.php:20 +#@ revslider +msgid "To Slider Settings" +msgstr "" + +#: views/templates/slides_list.php:4 +#@ revslider +msgid "Slides List" +msgstr "" + +#: views/templates/slides_list.php:5 +#@ default +msgid "Saving Order" +msgstr "" + +#: views/templates/slides_list.php:9 +#@ revslider +msgid "No Slides Found" +msgstr "" + +#: views/templates/slides_list.php:54 +#@ revslider +msgid "Unpublish Slide" +msgstr "" + +#: views/templates/slides_list.php:56 +#@ revslider +msgid "Publish Slide" +msgstr "" + +#: inc_php/revslider_settings_product.class.php:102 +#: inc_php/revslider_settings_product.class.php:116 +#: inc_php/revslider_settings_product.class.php:130 +#: inc_php/revslider_settings_product.class.php:144 +#: inc_php/revslider_settings_product.class.php:158 +#: inc_php/revslider_settings_product.class.php:172 +#@ revslider +msgid "Screen Width" +msgstr "" + +#: inc_php/revslider_settings_product.class.php:108 +#: inc_php/revslider_settings_product.class.php:122 +#: inc_php/revslider_settings_product.class.php:136 +#: inc_php/revslider_settings_product.class.php:150 +#: inc_php/revslider_settings_product.class.php:164 +#: inc_php/revslider_settings_product.class.php:178 +#@ revslider +msgid "Slider Width" +msgstr "" + +#: settings/slider_settings.php:5 +#@ revslider +msgid "The title of the slider. Example: Slider1" +msgstr "" + +#: settings/slider_settings.php:6 +#@ revslider +msgid "The alias that will be used for embedding the slider. Example: slider1" +msgstr "" + +#: settings/slider_settings.php:7 +#@ revslider +msgid "Slider Shortcode" +msgstr "" + +#: settings/slider_settings.php:10 +#@ revslider +msgid "Fixed" +msgstr "" + +#: settings/slider_settings.php:11 +#@ revslider +msgid "Responsive" +msgstr "" + +#: settings/slider_settings.php:12 +#@ revslider +msgid "Full Width" +msgstr "" + +#: settings/slider_settings.php:12 +#@ revslider +msgid "Slider Type" +msgstr "" + +#: settings/slider_settings.php:15 +#@ revslider +msgid "Slider Size" +msgstr "" + +#: settings/slider_settings.php:18 +#@ default +msgid "Responsive Sizes" +msgstr "" + +#: revslider_admin.php:250 +#@ revslider +msgid "The slider successfully created" +msgstr "" + +#: revslider_admin.php:256 +#@ revslider +msgid "Slider updated" +msgstr "" + +#: revslider_admin.php:264 +#@ revslider +msgid "The slider deleted" +msgstr "" + +#: revslider_admin.php:272 +#@ revslider +msgid "The duplicate successfully, refreshing page..." +msgstr "" + +#: revslider_admin.php:281 +#@ revslider +msgid "Slide Created" +msgstr "" + +#: revslider_admin.php:286 +#@ revslider +msgid "Slide updated" +msgstr "" + +#: revslider_admin.php:292 +#@ revslider +msgid "Slide Deleted Successfully" +msgstr "" + +#: revslider_admin.php:298 +#@ revslider +msgid "Slide Duplicated Successfully" +msgstr "" + +#: revslider_admin.php:307 +#@ revslider +msgid "CSS file saved succesfully!" +msgstr "" + +#: revslider_admin.php:316 +#@ revslider +msgid "Order updated successfully" +msgstr "" + +#: revslider_admin.php:322 +#@ revslider +msgid "Slide Changed Successfully" +msgstr "" + +#: settings/slider_settings.php:5 +#@ revslider +msgid "Slider Title" +msgstr "" + +#: settings/slider_settings.php:6 +#@ revslider +msgid "Slider Alias" +msgstr "" + +#: settings/slider_settings_xml_lang.php:2 +#@ revslider +msgid "General Settings" +msgstr "" + +#: settings/slider_settings_xml_lang.php:3 +#@ revslider +msgid "Position" +msgstr "" + +#: settings/slider_settings_xml_lang.php:4 +#@ revslider +msgid "Appearance" +msgstr "" + +#: settings/slider_settings_xml_lang.php:5 +#@ revslider +msgid "Navigation" +msgstr "" + +#: settings/slider_settings_xml_lang.php:6 +#@ revslider +msgid "Thumbnails" +msgstr "" + +#: settings/slider_settings_xml_lang.php:7 +#@ revslider +msgid "Mobile Visibility" +msgstr "" + +#: settings/slider_settings_xml_lang.php:8 +#@ revslider +msgid "First Slide" +msgstr "" + +#: settings/slider_settings_xml_lang.php:9 +#@ revslider +msgid "Troubleshooting" +msgstr "" + +#: settings/layer_settings.php:19 +#: settings/layer_settings.php:20 +#@ revslider +#@ default +msgid "layer_params" +msgstr "" + +#: settings/layer_settings.php:21 +#@ default +msgid "layer_caption" +msgstr "" + +#: settings/layer_settings.php:21 +#@ default +msgid "caption_green" +msgstr "" + +#: settings/layer_settings.php:21 +#@ revslider +msgid "Style" +msgstr "" + +#: settings/layer_settings.php:25 +#@ revslider +msgid "Text / Html" +msgstr "" + +#: settings/layer_settings.php:26 +#@ revslider +msgid "Image Link" +msgstr "" + +#: settings/layer_settings.php:27 +#: settings/slide_settings.php:62 +#@ revslider +msgid "Same Window" +msgstr "" + +#: settings/layer_settings.php:27 +#: settings/slide_settings.php:62 +#@ revslider +#@ default +msgid "New Window" +msgstr "" + +#: settings/layer_settings.php:27 +#: settings/slide_settings.php:62 +#@ revslider +msgid "Link Open In" +msgstr "" + +#: settings/layer_settings.php:29 +#@ revslider +msgid "Animation" +msgstr "" + +#: settings/layer_settings.php:30 +#: settings/layer_settings.php:45 +#@ revslider +msgid "Easing" +msgstr "" + +#: settings/layer_settings.php:33 +#@ revslider +msgid "Hide Under Width" +msgstr "" + +#: settings/layer_settings.php:34 +#@ revslider +msgid "X" +msgstr "" + +#: settings/layer_settings.php:35 +#@ revslider +msgid "Y" +msgstr "" + +#: settings/layer_settings.php:36 +#: settings/slide_settings.php:96 +#@ revslider +msgid "Video Autoplay" +msgstr "" + +#: settings/layer_settings.php:37 +#@ revslider +msgid "Link To Slide" +msgstr "" + +#: settings/layer_settings.php:38 +#@ revslider +msgid "Edit Video" +msgstr "" + +#: settings/layer_settings.php:39 +#@ revslider +msgid "Change Image Source" +msgstr "" + +#: settings/layer_settings.php:42 +#@ revslider +msgid "End Time" +msgstr "" + +#: settings/layer_settings.php:43 +#@ revslider +msgid "End Speed" +msgstr "" + +#: settings/layer_settings.php:44 +#@ revslider +msgid "End Animation" +msgstr "" + +#: settings/slide_settings.php:11 +#@ revslider +msgid "The title of the slide, will be shown in the slides list." +msgstr "" + +#: settings/slide_settings.php:12 +#@ revslider +msgid "Slide" +msgstr "" + +#: settings/slide_settings.php:12 +#@ revslider +msgid "Slide Title" +msgstr "" + +#: settings/slide_settings.php:15 +#@ revslider +msgid "The state of the slide. The unpublished slide will be excluded from the slider." +msgstr "" + +#: settings/slide_settings.php:16 +#@ revslider +msgid "Published" +msgstr "" + +#: settings/slide_settings.php:16 +#@ revslider +msgid "Unpublished" +msgstr "" + +#: settings/slide_settings.php:16 +#@ revslider +msgid "State" +msgstr "" + +#: settings/slide_settings.php:19 +#@ revslider +msgid "The appearance transition of this slide." +msgstr "" + +#: settings/slide_settings.php:20 +#@ revslider +msgid "Transition" +msgstr "" + +#: settings/slide_settings.php:23 +#@ revslider +msgid "The number of slots or boxes the slide is divided into. If you use boxfade, over 7 slots can be juggy." +msgstr "" + +#: settings/slide_settings.php:26 +#@ revslider +msgid "Slot Amount" +msgstr "" + +#: settings/slide_settings.php:29 +#@ revslider +msgid "Rotation (-720 -> 720, 999 = random) Only for Simple Transitions." +msgstr "" + +#: settings/slide_settings.php:32 +#@ revslider +msgid "Rotation" +msgstr "" + +#: settings/slide_settings.php:35 +#@ revslider +msgid "The duration of the transition (Default:300, min: 100 max 2000). " +msgstr "" + +#: settings/slide_settings.php:38 +#@ revslider +msgid "Transition Duration" +msgstr "" + +#: settings/slide_settings.php:41 +#@ revslider +msgid "A new delay value for the Slide. If no delay defined per slide, the delay defined via Options (" +msgstr "" + +#: settings/slide_settings.php:41 +#@ revslider +msgid "ms) will be used" +msgstr "" + +#: settings/slide_settings.php:49 +#@ revslider +msgid "Enable Link" +msgstr "" + +#: settings/slide_settings.php:49 +#: settings/slide_settings.php:86 +#@ revslider +msgid "Enable" +msgstr "" + +#: settings/slide_settings.php:49 +#: settings/slide_settings.php:86 +#@ revslider +msgid "Disable" +msgstr "" + +#: settings/slide_settings.php:54 +#@ revslider +msgid "Regular" +msgstr "" + +#: settings/slide_settings.php:54 +#@ revslider +msgid "To Slide" +msgstr "" + +#: settings/slide_settings.php:54 +#@ revslider +msgid "Link Type" +msgstr "" + +#: settings/slide_settings.php:57 +#@ revslider +msgid "A link on the whole slide pic" +msgstr "" + +#: settings/slide_settings.php:58 +#@ revslider +msgid "Slide Link" +msgstr "" + +#: settings/slide_settings.php:61 +#@ revslider +msgid "The target of the slide link" +msgstr "" + +#: settings/slide_settings.php:65 +#@ revslider +msgid "-- Not Chosen --" +msgstr "" + +#: settings/slide_settings.php:65 +#@ revslider +msgid "-- Next Slide --" +msgstr "" + +#: settings/slide_settings.php:65 +#@ revslider +msgid "-- Previous Slide --" +msgstr "" + +#: settings/slide_settings.php:85 +#@ revslider +msgid "Put a full width video on the slide" +msgstr "" + +#: settings/slide_settings.php:86 +#@ revslider +msgid "Enable Full Width Video" +msgstr "" + +#: settings/slide_settings.php:89 +#@ revslider +msgid "The field can take Youtube ID (example: QohUdrgbD2k) or Vidmeo ID (example: 30300114)" +msgstr "" + +#: settings/slide_settings.php:91 +#@ revslider +msgid "Video ID" +msgstr "" + +#: settings/slide_settings.php:94 +#@ revslider +msgid "Enable video autoplay on enter slide" +msgstr "" + +#: settings/slide_settings.php:101 +#@ revslider +msgid "Slide Thumbnail. If not set - it will be taken from the slide image." +msgstr "" + +#: settings/slide_settings.php:102 +#@ revslider +msgid "Thumbnail" +msgstr "" + +#: settings/slide_settings.php:104 +#@ revslider +msgid "Apply to full width mode only. Centering vertically slide images." +msgstr "" + +#: settings/slide_settings.php:105 +#@ revslider +msgid "Full Width Centering" +msgstr "" + +#: settings/slide_settings.php:108 +#@ revslider +msgid "Background Type" +msgstr "" + +#: views/templates/slider_toolbox.php:9 +#@ revslider +msgid "Export Slider" +msgstr "" + diff --git a/src/wp-content/plugins/revslider/languages/revslider-hu_HU.mo b/src/wp-content/plugins/revslider/languages/revslider-hu_HU.mo new file mode 100644 index 0000000..a10c1a0 Binary files /dev/null and b/src/wp-content/plugins/revslider/languages/revslider-hu_HU.mo differ diff --git a/src/wp-content/plugins/revslider/languages/revslider-hu_HU.po b/src/wp-content/plugins/revslider/languages/revslider-hu_HU.po new file mode 100644 index 0000000..3f555d4 --- /dev/null +++ b/src/wp-content/plugins/revslider/languages/revslider-hu_HU.po @@ -0,0 +1,2049 @@ +msgid "" +msgstr "" +"Project-Id-Version: Revolution Slider v3.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2013-06-23 14:46:14+0000\n" +"Last-Translator: admin \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: CSL v1.x\n" +"X-Poedit-Language: Hungarian\n" +"X-Poedit-Country: HUNGARY\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n" +"X-Poedit-Basepath: ../\n" +"X-Poedit-Bookmarks: \n" +"X-Poedit-SearchPath-0: .\n" +"X-Textdomain-Support: yes" + +#: inc_php/revslider_settings_product.class.php:102 +#: inc_php/revslider_settings_product.class.php:116 +#: inc_php/revslider_settings_product.class.php:130 +#: inc_php/revslider_settings_product.class.php:144 +#: inc_php/revslider_settings_product.class.php:158 +#: inc_php/revslider_settings_product.class.php:172 +#@ revslider +msgid "Screen Width" +msgstr "Browser Szelesseg" + +#: inc_php/revslider_settings_product.class.php:108 +#: inc_php/revslider_settings_product.class.php:122 +#: inc_php/revslider_settings_product.class.php:136 +#: inc_php/revslider_settings_product.class.php:150 +#: inc_php/revslider_settings_product.class.php:164 +#: inc_php/revslider_settings_product.class.php:178 +#@ revslider +msgid "Slider Width" +msgstr "Slider szelesseg" + +#: inc_php/revslider_widget.class.php:8 +#@ default +msgid "Displays a revolution slider on the page" +msgstr "" + +#: inc_php/revslider_widget.class.php:9 +#@ default +msgid "Revolution Slider" +msgstr "" + +#: inc_php/revslider_widget.class.php:22 +#@ default +msgid "No sliders found, Please create a slider" +msgstr "" + +#: inc_php/framework/settings_product_sidebar.class.php:377 +#@ revslider +msgid "text" +msgstr "szöveg" + +#: revslider_admin.php:269 +#@ revslider +msgid "The slider successfully created" +msgstr "A Slider sikeresen elkeszitve" + +#: revslider_admin.php:275 +#@ revslider +msgid "Slider updated" +msgstr "Slider frissitve" + +#: revslider_admin.php:283 +#@ revslider +msgid "The slider deleted" +msgstr "A Slider sikeresen törölve" + +#: revslider_admin.php:291 +#@ revslider +msgid "The duplicate successfully, refreshing page..." +msgstr "A Duplikalas elkeszült, frissitem a kepernyot" + +#: revslider_admin.php:299 +#@ revslider +msgid "Slide Created" +msgstr "Slide letrehozva" + +#: revslider_admin.php:316 +#@ revslider +msgid "Slide updated" +msgstr "Slide frissitve" + +#: revslider_admin.php:322 +#@ revslider +msgid "Slide Deleted Successfully" +msgstr "Slide sikeresen törölve" + +#: revslider_admin.php:328 +#@ revslider +msgid "Slide Duplicated Successfully" +msgstr "Slide sikeresen duplikalva" + +#: revslider_admin.php:344 +#@ revslider +msgid "CSS file saved succesfully!" +msgstr "CSS File sikeresen mentve !" + +#: revslider_admin.php:353 +#@ revslider +msgid "Order updated successfully" +msgstr "Parancs sikeresen befejezve!" + +#: revslider_admin.php:359 +#@ revslider +msgid "Slide Changed Successfully" +msgstr "Slide Valtoazasok Sikeresen lezarva" + +#: settings/layer_settings.php:19 +#: settings/layer_settings.php:20 +#@ revslider +msgid "Layer Params" +msgstr "Layer Parameterek" + +#: settings/layer_settings.php:19 +#: settings/layer_settings.php:20 +#@ revslider +#@ default +msgid "layer_params" +msgstr "layer_params" + +#: settings/layer_settings.php:21 +#@ default +msgid "layer_caption" +msgstr "" + +#: settings/layer_settings.php:21 +#@ default +msgid "caption_green" +msgstr "" + +#: settings/layer_settings.php:21 +#@ revslider +msgid "Style" +msgstr "Stilus" + +#: settings/layer_settings.php:25 +#@ revslider +msgid "Text / Html" +msgstr "Szöveg / Html" + +#: settings/layer_settings.php:26 +#@ revslider +msgid "Image Link" +msgstr "Kep Link" + +#: settings/layer_settings.php:27 +#: settings/slide_settings.php:62 +#@ revslider +msgid "Same Window" +msgstr "Ugyanabban az ablakban" + +#: settings/layer_settings.php:27 +#: settings/slide_settings.php:62 +#@ revslider +#@ default +msgid "New Window" +msgstr "Uj Ablakban" + +#: settings/layer_settings.php:27 +#: settings/slide_settings.php:62 +#@ revslider +msgid "Link Open In" +msgstr "Link Töltese " + +#: settings/layer_settings.php:29 +#@ revslider +msgid "Animation" +msgstr "Animacio" + +#: settings/layer_settings.php:30 +#: settings/layer_settings.php:61 +#@ revslider +msgid "Easing" +msgstr "Easing" + +#: settings/layer_settings.php:31 +#: settings/layer_settings.php:57 +#: settings/layer_settings.php:62 +#: settings/slider_settings_xml_lang.php:88 +#@ revslider +msgid "ms" +msgstr "ms" + +#: settings/layer_settings.php:33 +#@ revslider +msgid "Hide Under Width" +msgstr "Adott szelesseg alatt rejteni" + +#: settings/layer_settings.php:37 +#: settings/layer_settings.php:39 +#@ revslider +msgid "X" +msgstr "X" + +#: settings/layer_settings.php:42 +#: settings/layer_settings.php:44 +#@ revslider +msgid "Y" +msgstr "Y" + +#: settings/layer_settings.php:49 +#@ revslider +msgid "Link To Slide" +msgstr "Link egy Slide-ra" + +#: settings/layer_settings.php:54 +#@ revslider +msgid "Edit Video" +msgstr "Video Szerkesztese" + +#: settings/layer_settings.php:55 +#@ revslider +msgid "Change Image Source" +msgstr "Kep forrasat cserelni" + +#: settings/layer_settings.php:58 +#@ revslider +msgid "End Time" +msgstr "Vege" + +#: settings/layer_settings.php:59 +#@ revslider +msgid "End Speed" +msgstr "Vege Sebesseg" + +#: settings/layer_settings.php:60 +#@ revslider +msgid "End Animation" +msgstr "Vege Animacio" + +#: settings/slide_settings.php:11 +#@ revslider +msgid "The title of the slide, will be shown in the slides list." +msgstr "A Slide cime, a slidek listajabn megjelenik" + +#: settings/slide_settings.php:12 +#@ revslider +msgid "Slide" +msgstr "Slide" + +#: settings/slide_settings.php:12 +#@ revslider +msgid "Slide Title" +msgstr "Slide Cime" + +#: settings/slide_settings.php:15 +#@ revslider +msgid "The state of the slide. The unpublished slide will be excluded from the slider." +msgstr "A SLide statusza. A nem publikalt slide nem lesz benne a frontenden lathato valtozatban." + +#: settings/slide_settings.php:16 +#@ revslider +msgid "Published" +msgstr "Publikalt" + +#: settings/slide_settings.php:16 +#@ revslider +msgid "Unpublished" +msgstr "Nem Publikalt (rejtett)" + +#: settings/slide_settings.php:16 +#@ revslider +msgid "State" +msgstr "Statusz" + +#: settings/slide_settings.php:23 +#@ revslider +msgid "The number of slots or boxes the slide is divided into. If you use boxfade, over 7 slots can be juggy." +msgstr "A savok szama amennyire a kep vagva van az atmenet ideje alatt. Boxfadenel 7 sav a max." + +#: settings/slide_settings.php:26 +#@ revslider +msgid "Slot Amount" +msgstr "Savok szama" + +#: settings/slide_settings.php:29 +#@ revslider +msgid "Rotation (-720 -> 720, 999 = random) Only for Simple Transitions." +msgstr "Forgatas (-720 -> 720, 999 = veletlenszeru) Csak a sima Atmeneteknel" + +#: settings/slide_settings.php:32 +#@ revslider +msgid "Rotation" +msgstr "Forgatas" + +#: settings/slide_settings.php:35 +#@ revslider +msgid "The duration of the transition (Default:300, min: 100 max 2000). " +msgstr "Az atmenet hossza tizedmasodpercben (Alap. 300, legkevesebb:100 es max 2000ms)" + +#: settings/slide_settings.php:38 +#@ revslider +msgid "Transition Duration" +msgstr "Atmenet hossza" + +#: settings/slide_settings.php:41 +#@ revslider +msgid "A new delay value for the Slide. If no delay defined per slide, the delay defined via Options (" +msgstr "Mennyi ideig lathato a slide ? Ha nincs beallitva, akkor a Globalis kesleltetes lesz hatekony.(" + +#: settings/slide_settings.php:41 +#@ revslider +msgid "ms) will be used" +msgstr "milliszekundum) lesz hasznalva" + +#: settings/slide_settings.php:44 +#: settings/slider_settings_xml_lang.php:10 +#@ revslider +msgid "Delay" +msgstr "Kesleltetes" + +#: settings/slide_settings.php:49 +#@ revslider +msgid "Enable Link" +msgstr "Link engedelyezve" + +#: settings/slide_settings.php:49 +#@ revslider +msgid "Enable" +msgstr "Engedelyezve" + +#: settings/slide_settings.php:49 +#@ revslider +msgid "Disable" +msgstr "Kikapcsolva" + +#: settings/slide_settings.php:54 +#@ revslider +msgid "Regular" +msgstr "Szabalyos" + +#: settings/slide_settings.php:54 +#@ revslider +msgid "To Slide" +msgstr "A Slidehoz" + +#: settings/slide_settings.php:54 +#@ revslider +msgid "Link Type" +msgstr "Link Tipusa" + +#: settings/slide_settings.php:57 +#@ revslider +msgid "A link on the whole slide pic" +msgstr "Egy Link az egesz slidera" + +#: settings/slide_settings.php:58 +#@ revslider +msgid "Slide Link" +msgstr "Slide Link" + +#: settings/slide_settings.php:61 +#@ revslider +msgid "The target of the slide link" +msgstr "A Link celja" + +#: settings/slide_settings.php:66 +#@ revslider +msgid "-- Not Chosen --" +msgstr "-- nincs kivalasztva --" + +#: settings/slide_settings.php:67 +#@ revslider +msgid "-- Next Slide --" +msgstr "-- Következö Slide --" + +#: settings/slide_settings.php:68 +#@ revslider +msgid "-- Previous Slide --" +msgstr "-- Elözö Slide --" + +#: settings/slide_settings.php:92 +#@ revslider +msgid "Slide Thumbnail. If not set - it will be taken from the slide image." +msgstr "Slide Thumbnail. Ha nincs kivalasztva, akkor az originalis kep miniatürje lesz hasznalva." + +#: settings/slide_settings.php:93 +#@ revslider +msgid "Thumbnail" +msgstr "Thumbnail" + +#: settings/slide_settings.php:95 +#@ revslider +msgid "Apply to full width mode only. Centering vertically slide images." +msgstr "Csak a Teljesz szelessegu Slideren hasznalva. Vertikalisan Közepre igazitas." + +#: settings/slide_settings.php:96 +#@ revslider +msgid "Full Width Centering" +msgstr "Teljes Szelessegen Közepre" + +#: settings/slide_settings.php:99 +#@ revslider +msgid "Background Type" +msgstr "Hatter Tipusa" + +#: settings/slider_settings.php:7 +#@ revslider +msgid "Slider Title" +msgstr "Slider Cime" + +#: settings/slider_settings.php:7 +#@ revslider +msgid "The title of the slider. Example: Slider1" +msgstr "A Cime a slidernek. Pl.: Slider1" + +#: settings/slider_settings.php:8 +#@ revslider +msgid "Slider Alias" +msgstr "Slider Alias" + +#: settings/slider_settings.php:8 +#@ revslider +msgid "The alias that will be used for embedding the slider. Example: slider1" +msgstr "Az Alias ami a Slider kesobbi beillesztesehez az oldalon szolgal. pl. slider1" + +#: settings/slider_settings.php:9 +#@ revslider +msgid "Slider Shortcode" +msgstr "Slider Shortcode" + +#: settings/slider_settings.php:14 +#@ revslider +msgid "Fixed" +msgstr "Rögzitett" + +#: settings/slider_settings_xml_lang.php:2 +#: views/system/general_settings_dialog.php:10 +#@ revslider +msgid "General Settings" +msgstr "Altalanos Beallitasok" + +#: settings/slider_settings_xml_lang.php:3 +#@ revslider +msgid "Position" +msgstr "Pozicio" + +#: settings/slider_settings_xml_lang.php:4 +#@ revslider +msgid "Appearance" +msgstr "Megjelenes" + +#: settings/slider_settings_xml_lang.php:5 +#@ revslider +msgid "Navigation" +msgstr "Navigacio" + +#: settings/slider_settings_xml_lang.php:6 +#@ revslider +msgid "Thumbnails" +msgstr "Thumbnailek" + +#: settings/slider_settings_xml_lang.php:7 +#@ revslider +msgid "Mobile Visibility" +msgstr "Mobile Lathatosag" + +#: settings/slider_settings_xml_lang.php:9 +#@ revslider +msgid "Troubleshooting" +msgstr "Hibakereses" + +#: settings/slider_settings_xml_lang.php:11 +#@ revslider +msgid "The time one slide stays on the screen in Milliseconds" +msgstr "A kesleltetes Milliszekundumban, amig a slideok a kepernyon lathatoak." + +#: settings/slider_settings_xml_lang.php:63 +#@ revslider +msgid "Touch Enabled" +msgstr "Erintes engedelyezve (touch)" + +#: settings/slider_settings_xml_lang.php:64 +#@ revslider +msgid "Enable Swipe Function on touch devices" +msgstr "A Mobile keszulekeken a slide valtasa \\\"swipe\\\" erintesre engedelyezve" + +#: settings/general_settings.php:14 +#: settings/slider_settings_xml_lang.php:14 +#@ revslider +msgid "On" +msgstr "Be" + +#: settings/general_settings.php:14 +#: settings/slider_settings_xml_lang.php:15 +#@ revslider +msgid "Off" +msgstr "Ki" + +#: settings/slider_settings_xml_lang.php:65 +#@ revslider +msgid "Stop On Hover" +msgstr "Stop ha Eger Fölötte van" + +#: settings/slider_settings_xml_lang.php:66 +#@ revslider +msgid "Stop the Timer when hovering the slider" +msgstr "Megallitja a visszaszamlalast, ha az eger a slide folott van" + +#: settings/slider_settings_xml_lang.php:12 +#@ revslider +msgid "Shuffle Mode" +msgstr "Veleltlenszerü Mod" + +#: settings/slider_settings_xml_lang.php:13 +#@ revslider +msgid "Turn Shuffle Mode on and off! Will be randomized only once at the start." +msgstr "Ki/Be kapcoslja a veletlenszeru sorrendjet a Slideoknak" + +#: settings/slider_settings_xml_lang.php:18 +#@ revslider +msgid "Load Google Font" +msgstr "Google Font Töltese" + +#: settings/slider_settings_xml_lang.php:19 +#@ revslider +msgid "yes / no to load google font" +msgstr "igen/nem a Google Font töltesere" + +#: settings/slider_settings_xml_lang.php:20 +#@ revslider +msgid "Yes" +msgstr "Igen" + +#: settings/slider_settings_xml_lang.php:21 +#@ revslider +msgid "No" +msgstr "Nem" + +#: settings/slider_settings_xml_lang.php:22 +#@ revslider +msgid "Google Font" +msgstr "Google Font" + +#: settings/slider_settings_xml_lang.php:23 +#@ revslider +msgid "The google font family to load" +msgstr "A Google Font Csalad töltese" + +#: settings/slider_settings_xml_lang.php:24 +#@ revslider +msgid "Stop Slider" +msgstr "Stop Slider" + +#: settings/slider_settings_xml_lang.php:25 +#@ revslider +msgid "On / Off to stop slider after some amount of loops / slides" +msgstr "Ki / Be kapcsolni, hogy a slide megalljon egy bizonyos slidenal, vagy kör utan" + +#: settings/slider_settings_xml_lang.php:26 +#@ revslider +msgid "Stop After Loops" +msgstr "Stop Körök szama utan" + +#: settings/slider_settings_xml_lang.php:27 +#@ revslider +msgid "Stop the slider after certain amount of loops. 0 related to the first loop." +msgstr "Megallitja a slidert, ha bizonyos szamu köröket elert. 0 az elso kört jelenti" + +#: settings/slider_settings_xml_lang.php:28 +#@ revslider +msgid "Stop At Slide" +msgstr "Stop Slidenal" + +#: settings/slider_settings_xml_lang.php:29 +#@ revslider +msgid "Stop the slider at the given slide" +msgstr "Megallitja a Slidert egy bizonyos Slidenal." + +#: settings/slider_settings_xml_lang.php:30 +#@ revslider +msgid "Position on the page" +msgstr "Pozicio az oldalon" + +#: settings/slider_settings_xml_lang.php:31 +#@ revslider +msgid "The position of the slider on the page, (float:left, float:right, margin:0px auto;)" +msgstr "A Slider pozicioja az oldalon. (float, margin stb.)" + +#: settings/slider_settings_xml_lang.php:32 +#@ revslider +msgid "Left" +msgstr "Bal" + +#: settings/slider_settings_xml_lang.php:33 +#@ revslider +msgid "Center" +msgstr "Közep" + +#: settings/slider_settings_xml_lang.php:34 +#@ revslider +msgid "Right" +msgstr "Jobb" + +#: settings/slider_settings_xml_lang.php:35 +#@ revslider +msgid "Margin Top" +msgstr "Margin Top" + +#: settings/slider_settings_xml_lang.php:36 +#@ revslider +msgid "The top margin of the slider wrapper div" +msgstr "A felso marginja a slidert korbezaro div-nek." + +#: settings/layer_settings.php:51 +#: settings/slider_settings_xml_lang.php:37 +#@ revslider +msgid "px" +msgstr "px" + +#: settings/slider_settings_xml_lang.php:38 +#@ revslider +msgid "Margin Bottom" +msgstr "Margin Bottom" + +#: settings/slider_settings_xml_lang.php:39 +#@ revslider +msgid "The bottom margin of the slider wrapper div" +msgstr "Az also marginja a slidert korbezaro div-nek." + +#: settings/slider_settings_xml_lang.php:40 +#@ revslider +msgid "Margin Left" +msgstr "Margin Left" + +#: settings/slider_settings_xml_lang.php:41 +#@ revslider +msgid "The left margin of the slider wrapper div" +msgstr "A bal marginja a slidert korbezaro div-nek." + +#: settings/slider_settings_xml_lang.php:42 +#@ revslider +msgid "Margin Right" +msgstr "Margin Right" + +#: settings/slider_settings_xml_lang.php:43 +#@ revslider +msgid "The right margin of the slider wrapper div" +msgstr "A jobb marginja a slidert korbezaro div-nek." + +#: settings/slider_settings_xml_lang.php:44 +#@ revslider +msgid "Shadow Type" +msgstr "Arnyek tipusa" + +#: settings/slider_settings_xml_lang.php:45 +#@ revslider +msgid "The Shadow display underneath the banner. The shadow apply to fixed and responsive modes only, the full width slider don't have a shadow." +msgstr "Melyik Arnyek legyen a slider alatt bekapcsolva. " + +#: settings/slider_settings_xml_lang.php:46 +#@ revslider +msgid "No Shadow" +msgstr "Nincs Arnyek" + +#: settings/slider_settings_xml_lang.php:47 +#@ revslider +msgid "1" +msgstr "1" + +#: settings/slider_settings_xml_lang.php:48 +#@ revslider +msgid "2" +msgstr "2" + +#: settings/slider_settings_xml_lang.php:49 +#@ revslider +msgid "3" +msgstr "3" + +#: settings/slider_settings_xml_lang.php:50 +#@ revslider +msgid "Show Timer Line" +msgstr "Visszaszamlalot mutatni" + +#: settings/slider_settings_xml_lang.php:51 +#@ revslider +msgid "Show the top running timer line" +msgstr "Mutatja a Visszaszamlalo vonalat (idovonal)" + +#: settings/slider_settings_xml_lang.php:54 +#@ revslider +msgid "Hide" +msgstr "Elrejt" + +#: settings/slider_settings_xml_lang.php:52 +#@ revslider +msgid "Top" +msgstr "Felül" + +#: settings/slider_settings_xml_lang.php:53 +#@ revslider +msgid "Bottom" +msgstr "Alul" + +#: settings/slider_settings_xml_lang.php:55 +#@ revslider +msgid "Background color" +msgstr "Hatterszin" + +#: settings/slider_settings_xml_lang.php:56 +#@ revslider +msgid "Slider wrapper div background color, for transparent slider, leave empty." +msgstr "A Slidert bezaro DIV hatterszine. Ha a slider transzparent lesz, akkor maradjon ures ez a mezo is." + +#: settings/slider_settings_xml_lang.php:57 +#@ revslider +msgid "Padding (border)" +msgstr "Padding ( Keret)" + +#: settings/slider_settings_xml_lang.php:58 +#@ revslider +msgid "The wrapper div padding, if it has value, then together with background color it it will make border around the slider." +msgstr "A Slidert bezaro Div paddingja. Ha ez allitva van, akkor a hatterszin lathato lesz, es az tunik egy keretnek a slider korul." + +#: settings/slider_settings_xml_lang.php:59 +#@ revslider +msgid "Show Background Image" +msgstr "Hatterkep" + +#: settings/slider_settings_xml_lang.php:60 +#@ revslider +msgid "yes / no to put background image to the main slider wrapper." +msgstr "igen / nem - engedelyezi a lathatosagat egy hatterkepnek a slider mogott ( slidert korbefoglalo divnek a hatterkepe)" + +#: settings/slider_settings_xml_lang.php:61 +#@ revslider +msgid "Background Image Url" +msgstr "Hatter Kep URL" + +#: settings/slider_settings_xml_lang.php:62 +#@ revslider +msgid "The background image that will be on the slider wrapper. Will be shown at slider preloading." +msgstr "A hatterkep ami a slider mogott lesz. Lathato amig a slider töltes alatt van, vagy ha a slideok transzparensek." + +#: settings/slider_settings_xml_lang.php:67 +#@ revslider +msgid "Navigation Type" +msgstr "Navigacio Tipusa" + +#: settings/slider_settings_xml_lang.php:68 +#@ revslider +msgid "Display type of the navigation bar (Default:none" +msgstr "Megjelenesi tipusa a navigacio savnak (alap:nincs" + +#: settings/slider_settings_xml_lang.php:69 +#@ revslider +msgid "None" +msgstr "Nincs" + +#: settings/slider_settings_xml_lang.php:70 +#@ revslider +msgid "Bullet" +msgstr "Bullet" + +#: settings/slider_settings_xml_lang.php:71 +#@ revslider +msgid "Thumb" +msgstr "Thumb" + +#: settings/slider_settings_xml_lang.php:72 +#@ revslider +msgid "Both" +msgstr "Mindkettö" + +#: settings/slider_settings_xml_lang.php:73 +#@ revslider +msgid "Navigation Arrows" +msgstr "Navigacios Nyilak" + +#: settings/slider_settings_xml_lang.php:74 +#@ revslider +msgid "Display position of the Navigation Arrows (** By navigation Type Thumb arrows always centered or none visible)" +msgstr "Megjelenesi pozicioja a Navigacios Nyilaknak (** ha a navigacio tipusa thumb , akkor a nyilak mindig kozepen vannak, vagy nem lathatoak)" + +#: settings/slider_settings_xml_lang.php:75 +#@ revslider +msgid "With Bullets" +msgstr "Bulletekkel" + +#: settings/slider_settings_xml_lang.php:76 +#@ revslider +msgid "Solo" +msgstr "Solo" + +#: settings/slider_settings_xml_lang.php:77 +#@ revslider +msgid "Navigation Style" +msgstr "Navigacios Stilus" + +#: settings/slider_settings_xml_lang.php:78 +#@ revslider +msgid "Look of the navigation bullets ** If you choose navbar, we recommend to choose Navigation Arrows to nexttobullets" +msgstr "A NAvigacios Bullet kinezete. ** ha navbar van vallasztva, akkor ajanljuk a Navigacios Nyilakat a \\\"nexttobullets\\\"-re valtani" + +#: settings/slider_settings_xml_lang.php:79 +#@ revslider +msgid "Round" +msgstr "Round" + +#: settings/slider_settings_xml_lang.php:80 +#@ revslider +msgid "Navbar" +msgstr "Navbar" + +#: settings/slider_settings_xml_lang.php:81 +#@ revslider +msgid "Old Round" +msgstr "Old Round" + +#: settings/slider_settings_xml_lang.php:82 +#@ revslider +msgid "Old Square" +msgstr "Old Square" + +#: settings/slider_settings_xml_lang.php:83 +#@ revslider +msgid "Old Navbar" +msgstr "Old Navbar" + +#: settings/slider_settings_xml_lang.php:84 +#@ revslider +msgid "Always Show Navigation" +msgstr "Mindig lathato a Navigacio" + +#: settings/slider_settings_xml_lang.php:85 +#@ revslider +msgid "Always show the navigation and the thumbnails." +msgstr "Mindig mutatja a navigaciot es a thumbnaileket." + +#: settings/slider_settings_xml_lang.php:86 +#@ revslider +msgid "Hide Navitagion After" +msgstr "A Navigacio Elrejtese ido utan" + +#: settings/slider_settings_xml_lang.php:87 +#@ revslider +msgid "Time after that the Navigation and the Thumbs will be hidden(Default: 200 ms)" +msgstr "Az ido milliszekundumban, mennyi ido utan legyen a navigacio elrejtve." + +#: settings/slider_settings_xml_lang.php:89 +#@ revslider +msgid "Navigation Horizontal Align" +msgstr "Navigacio Horizontalis igazitasa" + +#: settings/slider_settings_xml_lang.php:90 +#@ revslider +msgid "Horizontal Align of Bullets / Thumbnails" +msgstr "Horizontalis igazitasa a Bulletteknek es a Thumbnaileknek" + +#: settings/slider_settings_xml_lang.php:91 +#@ revslider +msgid "Navigation Vertical Align" +msgstr "Navigacio Vertikalis igazitasa" + +#: settings/slider_settings_xml_lang.php:92 +#@ revslider +msgid "Vertical Align of Bullets / Thumbnails" +msgstr "Vertikalis igazitasa a Bulletteknek es a Thumbnaileknek" + +#: settings/slider_settings_xml_lang.php:93 +#@ revslider +msgid "Navigation Horizontal Offset" +msgstr "Navigacio Horizontalis eltolasa" + +#: settings/slider_settings_xml_lang.php:94 +#@ revslider +msgid "Offset from current Horizontal position of Bullets / Thumbnails negative and positive direction" +msgstr "Navigacio Horizontalis eltolasa az igazitott ponthoz kepest (negativ es pozitiv szam)" + +#: settings/slider_settings_xml_lang.php:95 +#@ revslider +msgid "Navigation Vertical Offset" +msgstr "Navigacio Vertikalis eltolasa" + +#: settings/slider_settings_xml_lang.php:96 +#@ revslider +msgid "Offset from current Vertical position of Bullets / Thumbnails negative and positive direction" +msgstr "Navigacio Vertikalis eltolasa az igazitott ponthoz kepest (negativ es pozitiv szam)" + +#: settings/slider_settings_xml_lang.php:97 +#@ revslider +msgid "Left Arrow Horizontal Align" +msgstr "Bal Nyil Horizontalis igazitasa" + +#: settings/slider_settings_xml_lang.php:98 +#@ revslider +msgid "Horizontal Align of left Arrow (only if arrow is not next to bullets)" +msgstr "Bal nyil Horizontalis igazitasa" + +#: settings/slider_settings_xml_lang.php:99 +#@ revslider +msgid "Left Arrow Vertical Align" +msgstr "Bal Nyil Vertikalis igazitasa" + +#: settings/slider_settings_xml_lang.php:100 +#@ revslider +msgid "Vertical Align of left Arrow (only if arrow is not next to bullets)" +msgstr "Bal Nyil Vertikalis igazitasa" + +#: settings/slider_settings_xml_lang.php:101 +#@ revslider +msgid "Left Arrow Horizontal Offset" +msgstr "Bal Nyil Horizontalis Eltolasa" + +#: settings/slider_settings_xml_lang.php:102 +#@ revslider +msgid "Offset from current Horizontal position of of left Arrow negative and positive direction" +msgstr "Bal Nyil Horizontalis eltolasa az igazitott ponthoz kepest (negativ es pozitiv szam)" + +#: settings/slider_settings_xml_lang.php:103 +#@ revslider +msgid "Left Arrow Vertical Offset" +msgstr "Bal Nyil Vertikalis Eltolasa" + +#: settings/slider_settings_xml_lang.php:104 +#@ revslider +msgid "Offset from current Vertical position of of left Arrow negative and positive direction" +msgstr "Bal Nyil Vertikalis eltolasa az igazitott ponthoz kepest (negativ es pozitiv szam)" + +#: settings/slider_settings_xml_lang.php:105 +#@ revslider +msgid "Right Arrow Horizontal Align" +msgstr "Jobb Nyil Horizontalis igazitasa" + +#: settings/slider_settings_xml_lang.php:106 +#@ revslider +msgid "Horizontal Align of right Arrow (only if arrow is not next to bullets)" +msgstr "Jobb Nyil Horizontalis igazitasa" + +#: settings/slider_settings_xml_lang.php:107 +#@ revslider +msgid "Right Arrow Vertical Align" +msgstr "Jobb Nyil Vertikalis igazitasa" + +#: settings/slider_settings_xml_lang.php:108 +#@ revslider +msgid "Vertical Align of right Arrow (only if arrow is not next to bullets)" +msgstr "Jobb Nyil Vertikalis igazitasa" + +#: settings/slider_settings_xml_lang.php:109 +#@ revslider +msgid "Right Arrow Horizontal Offset" +msgstr "Jobb Nyil Horizontalis Eltolasa" + +#: settings/slider_settings_xml_lang.php:110 +#@ revslider +msgid "Offset from current Horizontal position of of right Arrow negative and positive direction" +msgstr "Jobb Nyil Horizontalis eltolasa az igazitott ponthoz kepest (negativ es pozitiv szam)" + +#: settings/slider_settings_xml_lang.php:111 +#@ revslider +msgid "Right Arrow Vertical Offset" +msgstr "Jobb Nyil Vertikalis Eltolasa" + +#: settings/slider_settings_xml_lang.php:112 +#@ revslider +msgid "Offset from current Vertical position of of right Arrow negative and positive direction" +msgstr "Jobb Nyil Vertikalis eltolasa az igazitott ponthoz kepest (negativ es pozitiv szam)" + +#: settings/slider_settings_xml_lang.php:113 +#@ revslider +msgid "Thumb Width" +msgstr "Thumb Szelessege" + +#: settings/slider_settings_xml_lang.php:114 +#@ revslider +msgid "The basic Width of one Thumbnail (only if thumb is selected)" +msgstr "Az alap szelessege a Thumboknak." + +#: settings/slider_settings_xml_lang.php:115 +#@ revslider +msgid "Thumb Height" +msgstr "Thumb Magassaga" + +#: settings/slider_settings_xml_lang.php:116 +#@ revslider +msgid "the basic Height of one Thumbnail (only if thumb is selected)" +msgstr "Az alap magassaga a Thumboknak" + +#: settings/slider_settings_xml_lang.php:117 +#@ revslider +msgid "Thumb Amount" +msgstr "Thumbok Szama" + +#: settings/slider_settings_xml_lang.php:118 +#@ revslider +msgid "the amount of the Thumbs visible same time (only if thumb is selected)" +msgstr "A lathato Thumbok szama egy idoben (tobbi szkrollozva lathato csak)" + +#: settings/slider_settings_xml_lang.php:119 +#@ revslider +msgid "Hide Slider Under Width" +msgstr "SLider elrejtese Szelesseg alatt" + +#: settings/slider_settings_xml_lang.php:120 +#@ revslider +msgid "Hide the slider under some slider width. Works only in Responsive Style. Not available for Fullwidth." +msgstr "Elrejti a Slidert, ha a browser szelessege a meghatarotozz pont ala kerul. (nem elerheto Fullwidth modban)" + +#: settings/slider_settings_xml_lang.php:121 +#@ revslider +msgid "Hide Defined Layers Under Width" +msgstr "Bizonyos Layerek elrejtese Szelesseg alatt" + +#: settings/slider_settings_xml_lang.php:122 +#@ revslider +msgid "Hide some defined layers in the layer properties under some slider width." +msgstr "Meghatarozott layerek elrejt, ha a browser szelessege megadott pont ala kerul." + +#: settings/slider_settings_xml_lang.php:123 +#@ revslider +msgid "Hide All Layers Under Width" +msgstr "Minden Layer elrejtese szelesseg alatt" + +#: settings/slider_settings_xml_lang.php:124 +#@ revslider +msgid "Hide all layers under some slider width" +msgstr "Elrejt minden layert ha a browser szleessege megadott pont ala kerul." + +#: settings/slider_settings_xml_lang.php:125 +#@ revslider +msgid "Start With Slide" +msgstr "Adot Slide-al kezdeni" + +#: settings/slider_settings_xml_lang.php:126 +#@ revslider +msgid "Change it if you want to start from a different slide then 1" +msgstr "Csereld ki, hogy az elso Slide mas Transitionnal kezdodjon" + +#: settings/slider_settings_xml_lang.php:127 +#@ revslider +msgid "First Transition Active" +msgstr "Elso Transition Aktiv" + +#: settings/slider_settings_xml_lang.php:128 +#@ revslider +msgid "If active, it will overwrite the first slide transition. Use it when you want a special transition for the first slide only." +msgstr "Ha Aktivalva van, akkor az elso Transition felulirodik az elso alkalommal." + +#: settings/slider_settings_xml_lang.php:129 +#@ revslider +msgid "First Transition Type" +msgstr "Elso Transition Tipus" + +#: settings/slider_settings_xml_lang.php:130 +#@ revslider +msgid "First slide transition type" +msgstr "Elso Slide Transition Tipus" + +#: settings/slider_settings_xml_lang.php:131 +#@ revslider +msgid "Replace me!" +msgstr "Cserelj Ki ! " + +#: settings/slider_settings_xml_lang.php:132 +#@ revslider +msgid "First Transition Duration" +msgstr "Elso Transition Hossza" + +#: settings/slider_settings_xml_lang.php:133 +#@ revslider +msgid "First slide transition duration (Default:300, min: 100 max 2000)" +msgstr "Elso Slide Transition Hossza (Alap: 300, min:100 max:2000)" + +#: settings/slider_settings_xml_lang.php:134 +#@ revslider +msgid "First Transition Slot Amount" +msgstr "Elso Transition \\\"Slot\\\" Szama" + +#: settings/slider_settings_xml_lang.php:135 +#@ revslider +msgid "The number of slots or boxes the slide is divided into. If you use boxfade, over 7 slots can be juggy" +msgstr "A Slotok Szama. Ennyi darabra vagodik a Slider. \\\"boxfade\\\" animacional több mint 7 bővítőhely lehet \\\"ugral\\\"" + +#: settings/slider_settings_xml_lang.php:136 +#@ revslider +msgid "JQuery No Conflict Mode" +msgstr "jQuery No Conflict Mod" + +#: settings/slider_settings_xml_lang.php:137 +#@ revslider +msgid "Turns on / off jquery noconflict mode. You can play with this option when you have some javascript conflicts." +msgstr "Be / kikapcsolja jquery noconflict módot. Probald ki ezt a lehetőséget, ha van valami javascript konfliktus az oldalon." + +#: settings/slider_settings_xml_lang.php:138 +#@ revslider +msgid "Put JS Includes To Body" +msgstr "JS Includokat a \\\"Body\\\" reszbe beagyazni" + +#: settings/slider_settings_xml_lang.php:139 +#@ revslider +msgid "Putting the js to body (in addition to head) is good for fixing some javascript conflicts of type: TypeError: tpj('#rev_slider_1_1').show().revolution is not a function" +msgstr "A \\\"TypeError: tpj('#rev_slider_1_1').show().revolution is not a function\\\" hibanal erdemes a JS Fileokat a Body reszbe tennie a Head helyett. " + +#: settings/slider_settings_xml_lang.php:140 +#@ revslider +msgid "True" +msgstr "Igaz" + +#: settings/slider_settings_xml_lang.php:141 +#@ revslider +msgid "False" +msgstr "Hamis" + +#: settings/slider_settings_xml_lang.php:142 +#@ revslider +msgid "Output Filters Protection" +msgstr "Kimeneti Szürök Vedelme" + +#: settings/slider_settings_xml_lang.php:143 +#@ revslider +msgid "Activate a protection against wordpress output filters that adds html blocks to the shortcode output like P and BR" +msgstr "Ez egy vedelem a Wordpress Szurok allen, ami a kiadott Tartalmat p es br tagokkal tolti" + +#: settings/slider_settings_xml_lang.php:144 +#@ revslider +msgid "By Compressing Output" +msgstr "By Compressing Output" + +#: settings/slider_settings_xml_lang.php:145 +#@ revslider +msgid "By Echo Output" +msgstr "By Echo Output" + +#: views/master_view.php:40 +#@ revslider +msgid "Update Plugin" +msgstr "Update Plugin" + +#: views/system/update_dialog.php:2 +#@ revslider +msgid "Update Slider Plugin" +msgstr "Update Slider Plugin" + +#: views/system/update_dialog.php:3 +#@ revslider +msgid "Update Revolution Slider Plugin" +msgstr "Update Revolution Slider Plugin" + +#: views/system/update_dialog.php:5 +#@ revslider +msgid "To update the slider please show the slider install package. The files will be overwriten." +msgstr "A sikeres Updatehez mutass ra az Install Csomagra. Az Fajlok felulirodank." + +#: views/system/update_dialog.php:6 +#@ default +msgid "File example: revslider.zip" +msgstr "" + +#: views/system/update_dialog.php:16 +#@ revslider +msgid "Choose the update file:" +msgstr "Valassz egy Update File-t:" + +#: views/system/update_dialog.php:20 +#: views/templates/slider_edit.php:27 +#@ revslider +msgid "Update Slider" +msgstr "Update Slider" + +#: views/system/video_dialog.php:3 +#@ revslider +msgid "Add Youtube Layout" +msgstr "YouTube Layout hozzafuzese" + +#: views/system/video_dialog.php:11 +#@ revslider +msgid "Choose video type" +msgstr "Valassz Video Tipust" + +#: views/system/video_dialog.php:29 +#@ revslider +msgid "Enter Vimeo ID or URL" +msgstr "Vimdeo ID vagy URL" + +#: views/system/video_dialog.php:39 +#@ revslider +msgid "example: 30300114" +msgstr "pl. 30300114" + +#: views/templates/edit_layers.php:10 +#@ revslider +msgid "Image BG" +msgstr "Kep Hatter" + +#: views/templates/edit_layers.php:21 +#@ revslider +msgid "Solid BG" +msgstr "Szinezett Hatter" + +#: views/templates/edit_layers.php:30 +#@ revslider +msgid "Add Layer" +msgstr "Uj Layer " + +#: views/templates/edit_layers.php:31 +#@ revslider +msgid "Add Layer: Image" +msgstr "Uj Image Layer" + +#: views/templates/edit_layers.php:32 +#@ revslider +msgid "Add Layer: Video" +msgstr "Uj Video Layer" + +#: views/templates/edit_layers.php:34 +#@ revslider +msgid "Delete Layer" +msgstr "Layer Törlese" + +#: views/templates/edit_layers.php:35 +#@ revslider +msgid "Delete All Layers" +msgstr "Összes Layer Törlese" + +#: views/templates/edit_layers.php:37 +#@ default +msgid "Duplicate Layer" +msgstr "" + +#: views/templates/edit_layers.php:183 +#@ revslider +msgid "By Time" +msgstr "Idörendben" + +#: views/templates/edit_layers.php:184 +#@ revslider +msgid "By Depth" +msgstr "Melysegben" + +#: views/templates/slide.php:18 +#: views/templates/slides_list.php:60 +#@ revslider +msgid "Edit Slide" +msgstr "Slide Edittalasa" + +#: views/templates/edit_layers.php:5 +#@ revslider +msgid "Slide Image and Layers" +msgstr "Slide Kep es Layerek" + +#: views/templates/slide.php:84 +#@ revslider +msgid "Update Slide" +msgstr "Update Slide" + +#: views/templates/slide.php:85 +#@ revslider +msgid "updating" +msgstr "Felüliras" + +#: views/system/general_settings_dialog.php:22 +#: views/templates/slide.php:88 +#: views/templates/slider_edit.php:34 +#: views/templates/slider_new.php:25 +#: views/templates/slides.php:20 +#: views/templates/slides.php:34 +#: views/templates/slides.php:41 +#@ revslider +#@ default +msgid "Close" +msgstr "Bezar" + +#: views/templates/slider_api.php:8 +#@ revslider +msgid "API Methods" +msgstr "API Methodok" + +#: views/templates/slider_api.php:10 +#@ revslider +msgid "Please copy / paste those functions into your functions js file" +msgstr "Masold be az igenyelt Funkciokat a JS File-ba" + +#: views/templates/slider_api.php:14 +#@ revslider +msgid "Pause Slider" +msgstr "Slider Szunet" + +#: views/templates/slider_api.php:18 +#@ revslider +msgid "Resume Slider" +msgstr "Slider ujrainditasa" + +#: views/templates/slider_api.php:22 +#@ revslider +msgid "Previous Slide" +msgstr "Elozo Slide" + +#: views/templates/slider_api.php:26 +#@ revslider +msgid "Next Slide" +msgstr "Kovetkezo Slide" + +#: views/templates/slider_api.php:30 +#@ revslider +msgid "Go To Slide" +msgstr "Ugorj a Slidehoz" + +#: views/templates/slider_api.php:34 +#@ revslider +msgid "Get Num Slides" +msgstr "Slide Szamanak Lekerese" + +#: views/templates/slider_api.php:38 +#@ revslider +msgid "Get Current Slide Number" +msgstr "Aktuali Slide Szamanak Lekerese" + +#: views/templates/slider_api.php:42 +#@ revslider +msgid "Get Last Playing Slide Number" +msgstr "Utolso Lejatszott Slid Szamanak Lekerese" + +#: views/templates/slider_api.php:54 +#@ revslider +msgid "API Events" +msgstr "API Eventek" + +#: views/templates/slider_edit.php:7 +#: views/templates/sliders_list.php:34 +#@ revslider +msgid "Edit Slider" +msgstr "Slider Editalasa" + +#: views/templates/slider_edit.php:28 +#@ revslider +msgid "updating..." +msgstr "feluliras...." + +#: views/templates/slider_edit.php:32 +#@ revslider +msgid "Delete Slider" +msgstr "Slider Törlese" + +#: views/templates/slider_edit.php:36 +#: views/templates/sliders_list.php:36 +#: views/templates/slides.php:6 +#@ revslider +msgid "Edit Slides" +msgstr "Slides Editalasa" + +#: views/templates/slider_edit.php:38 +#@ revslider +msgid "Preview Slider" +msgstr "Slider Megtekintese" + +#: views/templates/slider_new.php:7 +#@ revslider +msgid "New Slider" +msgstr "Uj Slider" + +#: views/templates/slider_new.php:21 +#@ revslider +msgid "Create Slider" +msgstr "Uj Slider" + +#: views/templates/slider_toolbox.php:18 +#@ revslider +msgid "Note, that when you importing slider, it delete all the current slider settings and slides, then replace it with the new ones" +msgstr "Figyelem, ha a Slidert importalod, minden aktualis beallitas az aktualis sliderhez el fog veszni." + +#: views/templates/slider_toolbox.php:25 +#: views/templates/slider_toolbox.php:28 +#@ revslider +msgid "Export Slider" +msgstr "Export Slider" + +#: views/templates/sliders.php:70 +#@ revslider +msgid "Choose the import file" +msgstr "Valaszz egy Import File-t" + +#: views/templates/sliders.php:11 +#@ revslider +msgid "Revolution Sliders" +msgstr "Revolution Sliderek" + +#: views/templates/sliders.php:21 +#@ revslider +msgid "No Sliders Found" +msgstr "Nincsenek Sliderek" + +#: views/templates/sliders.php:30 +#@ revslider +msgid "Create New Slider" +msgstr "Uj Slider" + +#: views/templates/sliders.php:38 +#@ revslider +msgid "How To Use" +msgstr "Hogyan kell hasznalni" + +#: views/templates/sliders.php:42 +#: views/templates/sliders.php:47 +#: views/templates/sliders.php:48 +#@ default +#@ revslider +msgid "* From the" +msgstr "* Honnan:" + +#: views/templates/sliders.php:42 +#@ revslider +msgid "theme html" +msgstr "Theme HTML" + +#: views/templates/sliders.php:42 +#@ revslider +msgid "use" +msgstr "hasznal" + +#: views/system/video_dialog.php:59 +#: views/templates/sliders.php:42 +#@ revslider +msgid "example" +msgstr "pelda" + +#: views/templates/sliders.php:44 +#@ revslider +msgid "For show only on homepage use" +msgstr "Csak a Homepage Hasznalatahoz" + +#: views/templates/sliders.php:45 +#@ default +msgid "For show on certain pages use" +msgstr "" + +#: views/templates/sliders.php:47 +#@ revslider +msgid "widgets panel" +msgstr "widgets panel" + +#: views/templates/sliders.php:47 +#@ revslider +msgid "drag the \"Revolution Slider\" widget to the desired sidebar" +msgstr "Mozgasd a \"Revolution Slider\" Wigetet a kivalasztott sidebarhoz" + +#: views/templates/sliders.php:48 +#@ revslider +msgid "post editor" +msgstr "Post Szerkeszto" + +#: views/templates/sliders.php:48 +#@ revslider +msgid "insert the shortcode from the sliders table" +msgstr "Fuzd be a Shortcodo-t a Sliderek Tablajabol" + +#: views/templates/sliders.php:52 +#@ revslider +msgid "If you have some support issue, don't hesitate to" +msgstr "Ha barmilyen problema felmerul, kerlek keress meg minket" + +#: views/templates/sliders.php:53 +#@ revslider +msgid "write here" +msgstr "irj ide" + +#: views/templates/sliders.php:54 +#@ revslider +msgid "The ThemePunch team will be happy to support you on any issue" +msgstr "A ThemePunch csapat szivesen segit neked barmilyen problemaddal." + +#: views/templates/sliders_list.php:5 +#@ revslider +msgid "ID" +msgstr "ID" + +#: views/templates/sliders_list.php:6 +#@ revslider +msgid "Name" +msgstr "Nev" + +#: views/templates/sliders_list.php:7 +#@ revslider +msgid "N. Slides" +msgstr "N. Slides" + +#: views/templates/sliders_list.php:8 +#@ revslider +msgid "Actions" +msgstr "Akciok" + +#: views/templates/sliders_list.php:9 +#@ revslider +msgid "Shortcode" +msgstr "ShortCode" + +#: views/templates/sliders_list.php:10 +#: views/templates/sliders_list.php:44 +#@ revslider +msgid "Preview" +msgstr "Elonezet" + +#: views/templates/sliders_list.php:38 +#: views/templates/slides_list.php:85 +#@ revslider +msgid "Delete" +msgstr "Törles" + +#: views/templates/sliders_list.php:40 +#: views/templates/slides_list.php:87 +#@ revslider +msgid "Duplicate" +msgstr "Duplikalas" + +#: views/templates/slides.php:15 +#: views/templates/slides.php:29 +#@ revslider +msgid "New Slide" +msgstr "Uj Slide" + +#: views/templates/slides.php:37 +#@ revslider +msgid "To Slider Settings" +msgstr "Slide Beallitasok" + +#: views/templates/slides_list.php:4 +#@ revslider +msgid "Slides List" +msgstr "Slide LIsta" + +#: views/templates/slides_list.php:5 +#@ default +msgid "Saving Order" +msgstr "" + +#: views/templates/slides_list.php:9 +#@ revslider +msgid "No Slides Found" +msgstr "Nincs meg Slide" + +#: views/templates/slides_list.php:49 +#@ revslider +msgid "Unpublish Slide" +msgstr "Slide Elrejtese" + +#: views/templates/slides_list.php:51 +#@ revslider +msgid "Publish Slide" +msgstr "Slide Mutatasa" + +#: inc_php/revslider_output.class.php:901 +#@ revslider +msgid "Revolution Slider Error" +msgstr "Revolution Slider Hiba" + +#: inc_php/revslider_settings_product.class.php:201 +#: inc_php/revslider_settings_product.class.php:204 +#: inc_php/revslider_settings_product.class.php:207 +#@ revslider +msgid "Grid Width:" +msgstr "Grid Szelessege" + +#: inc_php/revslider_settings_product.class.php:202 +#: inc_php/revslider_settings_product.class.php:205 +#: inc_php/revslider_settings_product.class.php:208 +#@ revslider +msgid "Grid Height:" +msgstr "Grid Magassaga:" + +#: revslider.php:97 +#@ revslider +msgid "If you want to use the PHP function \"putRevSlider\" in your code please make sure to check \" " +msgstr "" + +#: revslider.php:97 +#@ revslider +msgid " \" in the backend's \"General Settings\" (top right panel).

            Or add the current page to the \"" +msgstr "" + +#: revslider.php:97 +#@ default +msgid "\" option box." +msgstr "" + +#: revslider.php:112 +#@ revslider +msgid "Revolution Slider Error:" +msgstr "" + +#: revslider_admin.php:210 +#@ revslider +msgid "importing slider setings and data..." +msgstr "" + +#: revslider_admin.php:226 +#@ revslider +msgid "Go Back" +msgstr "" + +#: revslider_admin.php:229 +#@ revslider +msgid "Slider Import Success, redirecting..." +msgstr "" + +#: revslider_admin.php:302 +#@ revslider +msgid "Slides Created" +msgstr "" + +#: revslider_admin.php:311 +#@ revslider +msgid "Slide Created, redirecting..." +msgstr "" + +#: revslider_admin.php:335 +#@ revslider +msgid "The operation successfully, refreshing page..." +msgstr "" + +#: revslider_admin.php:382 +#@ default +msgid "General settings updated" +msgstr "" + +#: settings/general_settings.php:6 +#@ revslider +msgid "To Admin" +msgstr "" + +#: settings/general_settings.php:7 +#@ revslider +msgid "To Editor, Admin" +msgstr "" + +#: settings/general_settings.php:8 +#@ revslider +msgid "Author, Editor, Admin" +msgstr "" + +#: settings/general_settings.php:9 +#@ revslider +msgid "View Plugin Permission" +msgstr "" + +#: settings/general_settings.php:11 +#@ revslider +msgid "The role of user that can view and edit the plugin" +msgstr "" + +#: settings/general_settings.php:15 +#@ revslider +msgid "Include RevSlider libraries globally" +msgstr "" + +#: settings/general_settings.php:17 +#@ revslider +msgid "Add css and js includes only on all pages. Id turned to off they will added to pages where the rev_slider shortcode exists only. This will work only when the slider added by a shortcode." +msgstr "" + +#: settings/general_settings.php:19 +#@ revslider +msgid "Pages to include RevSlider libraries" +msgstr "" + +#: settings/general_settings.php:20 +#@ revslider +msgid "Specify the page id's that the front end includes will be included in. Example: 2,3,5 also: homepage,3,4" +msgstr "" + +#: settings/layer_settings.php:36 +#@ revslider +msgid "OffsetX" +msgstr "" + +#: settings/layer_settings.php:41 +#@ revslider +msgid "OffsetY" +msgstr "" + +#: settings/layer_settings.php:52 +#@ revslider +msgid "Scroll Under Slider Offset" +msgstr "" + +#: settings/layer_settings.php:65 +#@ revslider +msgid "No Corner" +msgstr "" + +#: settings/layer_settings.php:66 +#@ revslider +msgid "Sharp" +msgstr "" + +#: settings/layer_settings.php:67 +#@ revslider +msgid "Sharp Reversed" +msgstr "" + +#: settings/layer_settings.php:69 +#@ revslider +msgid "Left Corner" +msgstr "" + +#: settings/layer_settings.php:70 +#@ revslider +msgid "Right Corner" +msgstr "" + +#: settings/layer_settings.php:71 +#@ revslider +msgid "Responsive Through All Levels" +msgstr "" + +#: settings/slide_settings.php:19 +#@ revslider +msgid "The appearance transitions of this slide." +msgstr "" + +#: settings/slide_settings.php:20 +#@ revslider +msgid "Transitions" +msgstr "" + +#: settings/slide_settings.php:71 +#@ default +msgid "-- Scroll Below Slider --" +msgstr "" + +#: settings/slider_settings.php:15 +#@ revslider +msgid "Custom" +msgstr "" + +#: settings/slider_settings.php:16 +#@ revslider +msgid "Auto Responsive" +msgstr "" + +#: settings/slider_settings.php:17 +#@ revslider +msgid "Full Screen" +msgstr "" + +#: settings/slider_settings.php:18 +#@ revslider +msgid "Slider Layout" +msgstr "" + +#: settings/slider_settings.php:21 +#@ revslider +msgid "Example: #header | The height of fullscreen slider will be decreased with the height of the #header to fit perfect in the screen" +msgstr "" + +#: settings/slider_settings.php:22 +#@ revslider +msgid "Fullscreen Offset Container" +msgstr "" + +#: settings/slider_settings.php:27 +#@ revslider +msgid "Grid Settings" +msgstr "" + +#: settings/slider_settings.php:33 +#@ default +msgid "Custom Responsive Sizes" +msgstr "" + +#: settings/slider_settings_xml_lang.php:8 +#@ revslider +msgid "Alternative First Slide" +msgstr "" + +#: settings/slider_settings_xml_lang.php:16 +#@ revslider +msgid "Lazy Load" +msgstr "" + +#: settings/slider_settings_xml_lang.php:17 +#@ revslider +msgid "The lazy load means that the images will be loaded by demand, it speeds the loading of the slider." +msgstr "" + +#: temp/functions_wordpress.class.php:703 +#: temp/functions_wordpress.class.php:706 +#: temp/functions_wordpress.class.php:713 +#, php-format +#@ default +msgid "View all posts in %s" +msgstr "" + +#: views/system/general_settings_dialog.php:17 +#@ revslider +msgid "Update" +msgstr "" + +#: views/system/video_dialog.php:14 +#@ revslider +msgid "Youtube" +msgstr "" + +#: views/system/video_dialog.php:17 +#@ revslider +msgid "Vimeo" +msgstr "" + +#: views/system/video_dialog.php:20 +#@ revslider +msgid "HTML5" +msgstr "" + +#: views/system/video_dialog.php:49 +#@ revslider +msgid "Enter Youtube ID or URL" +msgstr "" + +#: views/system/video_dialog.php:71 +#@ default +msgid "Poster Image Url" +msgstr "" + +#: views/system/video_dialog.php:74 +#: views/system/video_dialog.php:81 +#: views/system/video_dialog.php:88 +#: views/system/video_dialog.php:95 +#@ revslider +msgid "Example" +msgstr "" + +#: views/system/video_dialog.php:78 +#@ default +msgid "Video MP4 Url" +msgstr "" + +#: views/system/video_dialog.php:85 +#@ default +msgid "Video WEBM Url" +msgstr "" + +#: views/system/video_dialog.php:92 +#@ default +msgid "Video OGV Url" +msgstr "" + +#: views/system/video_dialog.php:108 +#@ revslider +msgid "Width" +msgstr "" + +#: views/system/video_dialog.php:111 +#@ revslider +msgid "Height" +msgstr "" + +#: views/system/video_dialog.php:118 +#@ revslider +msgid "Full Width:" +msgstr "" + +#: views/system/video_dialog.php:128 +#@ revslider +msgid "Arguments:" +msgstr "" + +#: views/system/video_dialog.php:135 +#@ revslider +msgid "Autplay:" +msgstr "" + +#: views/system/video_dialog.php:141 +#@ revslider +msgid "Next Slide On End:" +msgstr "" + +#: views/system/video_dialog.php:151 +#@ revslider +msgid "Add This Video" +msgstr "" + +#: views/system/video_dialog.php:151 +#@ revslider +msgid "Update Video" +msgstr "" + +#: views/templates/edit_layers.php:16 +#@ revslider +msgid "Transparent BG" +msgstr "" + +#: views/templates/edit_layers.php:73 +#@ revslider +msgid "Layer General Parameters" +msgstr "" + +#: views/templates/edit_layers.php:82 +#@ revslider +msgid "Align & Position" +msgstr "" + +#: views/templates/edit_layers.php:122 +#@ revslider +msgid "Layer Animation" +msgstr "" + +#: views/templates/edit_layers.php:129 +#@ revslider +msgid "Start Transition" +msgstr "" + +#: views/templates/edit_layers.php:138 +#@ revslider +msgid "End Transition (optional)" +msgstr "" + +#: views/templates/edit_layers.php:157 +#@ revslider +msgid "Layer Links & Advanced Params" +msgstr "" + +#: views/templates/edit_layers.php:181 +#@ revslider +msgid "Layers Timing & Sorting" +msgstr "" + +#: views/templates/slide.php:48 +#@ revslider +msgid "Add Slide" +msgstr "" + +#: views/templates/slide.php:61 +#@ revslider +msgid "General Slide Settings" +msgstr "" + +#: views/templates/slider_api.php:6 +#@ revslider +msgid "API Functions" +msgstr "" + +#: views/templates/slider_api.php:46 +#@ revslider +msgid "External Scroll" +msgstr "" + +#: views/templates/slider_api.php:56 +#@ revslider +msgid "Copy and Paste the Below listed API Functions into your jQuery Functions for Revslider Event Listening" +msgstr "" + +#: views/templates/slider_edit.php:18 +#@ revslider +msgid "Main Slider Settings" +msgstr "" + +#: views/templates/slider_toolbox.php:3 +#@ revslider +msgid "Import / Export" +msgstr "" + +#: views/templates/slider_toolbox.php:6 +#: views/templates/sliders.php:32 +#: views/templates/sliders.php:63 +#@ revslider +msgid "Import Slider" +msgstr "" + +#: views/templates/sliders.php:16 +#@ revslider +msgid "Global Settings" +msgstr "" + +#: views/templates/slides.php:17 +#: views/templates/slides.php:31 +#@ revslider +msgid "New Transparent Slide" +msgstr "" + +#: views/templates/slides.php:18 +#: views/templates/slides.php:32 +#@ revslider +msgid "Adding Slide..." +msgstr "" + +#: views/templates/slides.php:29 +#@ revslider +msgid "Select image or multiple images to add slide or slides" +msgstr "" + +#: views/templates/slides.php:41 +#@ default +msgid "Do It!" +msgstr "" + +#: views/templates/slides.php:41 +#@ revslider +msgid "Copy / move slide" +msgstr "" + +#: views/templates/slides.php:45 +#@ revslider +msgid "Choose Slider" +msgstr "" + +#: views/templates/slides.php:50 +#@ default +msgid "Choose Operation" +msgstr "" + +#: views/templates/slides.php:53 +#@ revslider +msgid "Copy" +msgstr "" + +#: views/templates/slides.php:56 +#@ revslider +msgid "Move" +msgstr "" + +#: views/templates/slides_list.php:86 +#@ default +msgid "Deleting Slide..." +msgstr "" + +#: views/templates/slides_list.php:90 +#@ revslider +msgid "Open copy / move dialog" +msgstr "" + +#: views/templates/slides_list.php:97 +#@ revslider +msgid "Copy / Move" +msgstr "" + +#: views/templates/slides_list.php:98 +#@ default +msgid "Working..." +msgstr "" + +#: views/templates/slide.php:21 +#: views/templates/slider_edit.php:9 +#: views/templates/slider_new.php:9 +#: views/templates/sliders.php:14 +#: views/templates/slides.php:8 +#@ revslider +msgid "Help" +msgstr "" + diff --git a/src/wp-content/plugins/revslider/languages/revslider-ru_RU.mo b/src/wp-content/plugins/revslider/languages/revslider-ru_RU.mo new file mode 100644 index 0000000..cf4891b Binary files /dev/null and b/src/wp-content/plugins/revslider/languages/revslider-ru_RU.mo differ diff --git a/src/wp-content/plugins/revslider/languages/revslider-ru_RU.po b/src/wp-content/plugins/revslider/languages/revslider-ru_RU.po new file mode 100644 index 0000000..2ed9fc9 --- /dev/null +++ b/src/wp-content/plugins/revslider/languages/revslider-ru_RU.po @@ -0,0 +1,2040 @@ +msgid "" +msgstr "" +"Project-Id-Version: Revolution Slider v3.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2013-06-20 16:57:51+0000\n" +"Last-Translator: admin \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1;\n" +"X-Generator: CSL v1.x\n" +"X-Poedit-Language: Russian\n" +"X-Poedit-Country: RUSSIA\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n" +"X-Poedit-Basepath: ../\n" +"X-Poedit-Bookmarks: \n" +"X-Poedit-SearchPath-0: .\n" +"X-Textdomain-Support: yes" + +#: inc_php/revslider_widget.class.php:8 +#@ default +msgid "Displays a revolution slider on the page" +msgstr "" + +#: inc_php/revslider_widget.class.php:9 +#@ default +msgid "Revolution Slider" +msgstr "" + +#: inc_php/revslider_widget.class.php:22 +#@ default +msgid "No sliders found, Please create a slider" +msgstr "" + +#: views/templates/sliders.php:11 +#@ revslider +msgid "Revolution Sliders" +msgstr "Revolution Слайдеры" + +#: views/templates/sliders.php:37 +#@ revslider +msgid "How To Use" +msgstr "Как использовать" + +#: settings/slide_settings.php:44 +#: settings/slider_settings_xml_lang.php:10 +#@ revslider +msgid "Delay" +msgstr "Задержка" + +#: settings/slider_settings_xml_lang.php:11 +#@ revslider +msgid "The time one slide stays on the screen in Milliseconds" +msgstr "Время которое один слайд остается на экране в миллисекундах" + +#: settings/slider_settings_xml_lang.php:63 +#@ revslider +msgid "Touch Enabled" +msgstr "Режим нажатия пальца включен" + +#: settings/slider_settings_xml_lang.php:64 +#@ revslider +msgid "Enable Swipe Function on touch devices" +msgstr "Включить функцию Swipe на сенсорных устройствах" + +#: settings/slider_settings_xml_lang.php:65 +#@ revslider +msgid "Stop On Hover" +msgstr "Остановка на наведение мыши" + +#: settings/slider_settings_xml_lang.php:66 +#@ revslider +msgid "Stop the Timer when hovering the slider" +msgstr "Остановить таймер при наведении мыши на слайдер" + +#: settings/slider_settings_xml_lang.php:12 +#@ revslider +msgid "Shuffle Mode" +msgstr "Режим Перемешивания" + +#: settings/slider_settings_xml_lang.php:13 +#@ revslider +msgid "Turn Shuffle Mode on and off! Will be randomized only once at the start." +msgstr "Включить / выключать режим случайного воспроизведения. Будет рандомизирован только один раз в самом начале." + +#: settings/slider_settings_xml_lang.php:18 +#@ revslider +msgid "Load Google Font" +msgstr "Загрузить Google Font" + +#: settings/slider_settings_xml_lang.php:19 +#@ revslider +msgid "yes / no to load google font" +msgstr "Да / Нет загрузить Google Font" + +#: settings/slider_settings_xml_lang.php:22 +#@ revslider +msgid "Google Font" +msgstr "Google Font" + +#: settings/slider_settings_xml_lang.php:23 +#@ revslider +msgid "The google font family to load" +msgstr "Tип Google Font для загрузки" + +#: settings/slider_settings_xml_lang.php:24 +#@ revslider +msgid "Stop Slider" +msgstr "Остановка слайдера" + +#: settings/slider_settings_xml_lang.php:25 +#@ revslider +msgid "On / Off to stop slider after some amount of loops / slides" +msgstr "Вкл. / Выкл. остановку слайдера после нескольких пробегов." + +#: settings/slider_settings_xml_lang.php:26 +#@ revslider +msgid "Stop After Loops" +msgstr "Остановка после пробегов" + +#: settings/slider_settings_xml_lang.php:27 +#@ revslider +msgid "Stop the slider after certain amount of loops. 0 related to the first loop." +msgstr "Остановите слайдер после некотого количества пробегов. 0 для первого пробега." + +#: settings/slider_settings_xml_lang.php:28 +#@ revslider +msgid "Stop At Slide" +msgstr "Остановится на слайде" + +#: settings/slider_settings_xml_lang.php:29 +#@ revslider +msgid "Stop the slider at the given slide" +msgstr "Остановить слайдер на какомто слайде." + +#: settings/slider_settings_xml_lang.php:30 +#@ revslider +msgid "Position on the page" +msgstr "Позиция на странице" + +#: settings/slider_settings_xml_lang.php:31 +#@ revslider +msgid "The position of the slider on the page, (float:left, float:right, margin:0px auto;)" +msgstr "Позиция слайдера на странице, (float:left, float:right, margin:0px auto;)" + +#: settings/slider_settings_xml_lang.php:35 +#@ revslider +msgid "Margin Top" +msgstr "Верхний Margin" + +#: settings/slider_settings_xml_lang.php:36 +#@ revslider +msgid "The top margin of the slider wrapper div" +msgstr "Верхний margin обертывающиво Div слайдера" + +#: settings/layer_settings.php:51 +#: settings/slider_settings_xml_lang.php:37 +#@ revslider +msgid "px" +msgstr "px" + +#: settings/slider_settings_xml_lang.php:38 +#@ revslider +msgid "Margin Bottom" +msgstr "Нижний Margin" + +#: settings/slider_settings_xml_lang.php:39 +#@ revslider +msgid "The bottom margin of the slider wrapper div" +msgstr "Нижний margin обертывающиво Div слайдера" + +#: settings/slider_settings_xml_lang.php:40 +#@ revslider +msgid "Margin Left" +msgstr "Левый Margin" + +#: settings/slider_settings_xml_lang.php:41 +#@ revslider +msgid "The left margin of the slider wrapper div" +msgstr "Левый margin обертывающиво Div слайдера" + +#: settings/slider_settings_xml_lang.php:42 +#@ revslider +msgid "Margin Right" +msgstr "Правый Margin" + +#: settings/slider_settings_xml_lang.php:43 +#@ revslider +msgid "The right margin of the slider wrapper div" +msgstr "Правый margin обертывающиво Div слайдера" + +#: settings/slider_settings_xml_lang.php:44 +#@ revslider +msgid "Shadow Type" +msgstr "Тип тени" + +#: settings/slider_settings_xml_lang.php:45 +#@ revslider +msgid "The Shadow display underneath the banner. The shadow apply to fixed and responsive modes only, the full width slider don't have a shadow." +msgstr "Тип отображение теней под слайдером." + +#: settings/slider_settings_xml_lang.php:50 +#@ revslider +msgid "Show Timer Line" +msgstr "Показать полоску таймера" + +#: settings/slider_settings_xml_lang.php:51 +#@ revslider +msgid "Show the top running timer line" +msgstr "Показать верхнию или нижнию движещиюся полоску таймера" + +#: settings/slider_settings_xml_lang.php:55 +#@ revslider +msgid "Background color" +msgstr "Цвет Фона" + +#: settings/slider_settings_xml_lang.php:56 +#@ revslider +msgid "Slider wrapper div background color, for transparent slider, leave empty." +msgstr "Цвет фона слайдера. Для прозрачности оставить пустым." + +#: settings/slider_settings_xml_lang.php:57 +#@ revslider +msgid "Padding (border)" +msgstr "Padding (border)" + +#: settings/slider_settings_xml_lang.php:58 +#@ revslider +msgid "The wrapper div padding, if it has value, then together with background color it it will make border around the slider." +msgstr "Padding слайдера. Если имеется значение, то вместе с цветом фона создает border вокруг слайдера." + +#: settings/slider_settings_xml_lang.php:59 +#@ revslider +msgid "Show Background Image" +msgstr "Показать фоновое изображение" + +#: settings/slider_settings_xml_lang.php:60 +#@ revslider +msgid "yes / no to put background image to the main slider wrapper." +msgstr "Поставить фоновое изображение на слайдер." + +#: settings/slider_settings_xml_lang.php:61 +#@ revslider +msgid "Background Image Url" +msgstr "Адрес фонового изображения" + +#: settings/slider_settings_xml_lang.php:62 +#@ revslider +msgid "The background image that will be on the slider wrapper. Will be shown at slider preloading." +msgstr "Фоновое изображение, которое будет на слайдере. Будет показана на этапе предварительной загрузки" + +#: settings/slider_settings_xml_lang.php:67 +#@ revslider +msgid "Navigation Type" +msgstr "Тип навигации" + +#: settings/slider_settings_xml_lang.php:68 +#@ revslider +msgid "Display type of the navigation bar (Default:none" +msgstr "Выбераем тип навигационного региона" + +#: settings/slider_settings_xml_lang.php:73 +#@ revslider +msgid "Navigation Arrows" +msgstr "Навигационные стрекли" + +#: settings/slider_settings_xml_lang.php:74 +#@ revslider +msgid "Display position of the Navigation Arrows (** By navigation Type Thumb arrows always centered or none visible)" +msgstr "Показать положение стрелки (** Если выбран навигационный тип: Thumb навигационные стрелки всегда находится в центре или спрятанны)" + +#: settings/slider_settings_xml_lang.php:77 +#@ revslider +msgid "Navigation Style" +msgstr "Стиль навигации" + +#: settings/slider_settings_xml_lang.php:78 +#@ revslider +msgid "Look of the navigation bullets ** If you choose navbar, we recommend to choose Navigation Arrows to nexttobullets" +msgstr "Вид булетов. ** Если вы выбираете Navbar, мы рекомендуем выбирать стрелки возле булетов." + +#: settings/slider_settings_xml_lang.php:84 +#@ revslider +msgid "Always Show Navigation" +msgstr "Всегда показать навигацию" + +#: settings/slider_settings_xml_lang.php:85 +#@ revslider +msgid "Always show the navigation and the thumbnails." +msgstr "Всегда показывать навигацию и миниотюры" + +#: settings/slider_settings_xml_lang.php:86 +#@ revslider +msgid "Hide Navitagion After" +msgstr "Скрыть Навигацию После" + +#: settings/slider_settings_xml_lang.php:87 +#@ revslider +msgid "Time after that the Navigation and the Thumbs will be hidden(Default: 200 ms)" +msgstr "После этого времяни навигация и миниотюры будут скрыты (по умолчанию: 200 мс)" + +#: settings/layer_settings.php:31 +#: settings/layer_settings.php:57 +#: settings/layer_settings.php:62 +#: settings/slider_settings_xml_lang.php:88 +#@ revslider +msgid "ms" +msgstr "мс" + +#: settings/slider_settings_xml_lang.php:89 +#@ revslider +msgid "Navigation Horizontal Align" +msgstr "Выравнивание Нав. по горизонтали" + +#: settings/slider_settings_xml_lang.php:90 +#@ revslider +msgid "Horizontal Align of Bullets / Thumbnails" +msgstr "Выравнивание по горизонтали Булеты / Mиниотюры" + +#: settings/slider_settings_xml_lang.php:91 +#@ revslider +msgid "Navigation Vertical Align" +msgstr "Выравнивание Нав. по вертикали" + +#: settings/slider_settings_xml_lang.php:92 +#@ revslider +msgid "Vertical Align of Bullets / Thumbnails" +msgstr "Выравнивание по вертикали булетов / миниотюр" + +#: settings/slider_settings_xml_lang.php:93 +#@ revslider +msgid "Navigation Horizontal Offset" +msgstr "Смещение Нав. по горизонтали " + +#: settings/slider_settings_xml_lang.php:94 +#@ revslider +msgid "Offset from current Horizontal position of Bullets / Thumbnails negative and positive direction" +msgstr "Смещение по горизонтали от текущего положения Буллета / Миниатюры отрицательным и положительным направлением" + +#: settings/slider_settings_xml_lang.php:95 +#@ revslider +msgid "Navigation Vertical Offset" +msgstr "смещение Нав. по вертики" + +#: settings/slider_settings_xml_lang.php:96 +#@ revslider +msgid "Offset from current Vertical position of Bullets / Thumbnails negative and positive direction" +msgstr "Вертикальное смещение от текущей позиции Буллета / Миниатюры отрицательным и положительным направлением" + +#: settings/slider_settings_xml_lang.php:97 +#@ revslider +msgid "Left Arrow Horizontal Align" +msgstr "Выравнивание левой стрелки по горизонтали" + +#: settings/slider_settings_xml_lang.php:98 +#@ revslider +msgid "Horizontal Align of left Arrow (only if arrow is not next to bullets)" +msgstr "Выравнивание левой стрелки по горизонтали (Только если стрелка находится не рядом с буллетами)" + +#: settings/slider_settings_xml_lang.php:99 +#@ revslider +msgid "Left Arrow Vertical Align" +msgstr "Выравнивание левой стрелки по вертикали" + +#: settings/slider_settings_xml_lang.php:100 +#@ revslider +msgid "Vertical Align of left Arrow (only if arrow is not next to bullets)" +msgstr "Выравнивание левой стрелки по вертикали (Только если стрелка находится не рядом с буллетами)" + +#: settings/slider_settings_xml_lang.php:101 +#@ revslider +msgid "Left Arrow Horizontal Offset" +msgstr "Смещение левой стрелки по горизонтали" + +#: settings/slider_settings_xml_lang.php:102 +#@ revslider +msgid "Offset from current Horizontal position of of left Arrow negative and positive direction" +msgstr "Смещение по горизонтали от текущего положения левой стрелки отрицательного и положительного направления" + +#: settings/slider_settings_xml_lang.php:103 +#@ revslider +msgid "Left Arrow Vertical Offset" +msgstr "Смещение левой стрелки по вертикали" + +#: settings/slider_settings_xml_lang.php:104 +#@ revslider +msgid "Offset from current Vertical position of of left Arrow negative and positive direction" +msgstr "Смещение по вертикали от текущего положения левой стрелки отрицательного и положительного направления" + +#: settings/slider_settings_xml_lang.php:105 +#@ revslider +msgid "Right Arrow Horizontal Align" +msgstr "Выравнивание правой стрелки по горизонтали" + +#: settings/slider_settings_xml_lang.php:106 +#@ revslider +msgid "Horizontal Align of right Arrow (only if arrow is not next to bullets)" +msgstr "Выравнивание правой стрелки по горизонтали (Только если стрелка находится не рядом с буллетами)" + +#: settings/slider_settings_xml_lang.php:107 +#@ revslider +msgid "Right Arrow Vertical Align" +msgstr "Выравнивание правой стрелки по вертикали" + +#: settings/slider_settings_xml_lang.php:108 +#@ revslider +msgid "Vertical Align of right Arrow (only if arrow is not next to bullets)" +msgstr "Выравнивание правой стрелки по вертикали (Только если стрелка находится не рядом с буллетами)" + +#: settings/slider_settings_xml_lang.php:109 +#@ revslider +msgid "Right Arrow Horizontal Offset" +msgstr "Смещение правой стрелки по горизонтали" + +#: settings/slider_settings_xml_lang.php:110 +#@ revslider +msgid "Offset from current Horizontal position of of right Arrow negative and positive direction" +msgstr "Смещение по горизонтали от текущего положения правой стрелки отрицательного и положительного направления" + +#: settings/slider_settings_xml_lang.php:111 +#@ revslider +msgid "Right Arrow Vertical Offset" +msgstr "Смещение правой стрелки по вертикали" + +#: settings/slider_settings_xml_lang.php:112 +#@ revslider +msgid "Offset from current Vertical position of of right Arrow negative and positive direction" +msgstr "Смещение по вертикали от текущего положения правой стрелки отрицательного и положительного направления" + +#: settings/slider_settings_xml_lang.php:113 +#@ revslider +msgid "Thumb Width" +msgstr "Ширина миниотюр" + +#: settings/slider_settings_xml_lang.php:114 +#@ revslider +msgid "The basic Width of one Thumbnail (only if thumb is selected)" +msgstr "Базовая ширина одного thumbnail (только если выбран тип миниотюр)" + +#: settings/slider_settings_xml_lang.php:115 +#@ revslider +msgid "Thumb Height" +msgstr "Высота миниотюр" + +#: settings/slider_settings_xml_lang.php:116 +#@ revslider +msgid "the basic Height of one Thumbnail (only if thumb is selected)" +msgstr "Базовая высота одного thumbnail (только если выбран тип миниотюр)" + +#: settings/slider_settings_xml_lang.php:117 +#@ revslider +msgid "Thumb Amount" +msgstr "Количество миниотюр" + +#: settings/slider_settings_xml_lang.php:118 +#@ revslider +msgid "the amount of the Thumbs visible same time (only if thumb is selected)" +msgstr "Количество видимых thumbnails в то же время (только если выбран тип thumbnails)" + +#: settings/slider_settings_xml_lang.php:119 +#@ revslider +msgid "Hide Slider Under Width" +msgstr "Скрыть слайдер ниже ширины" + +#: settings/slider_settings_xml_lang.php:120 +#@ revslider +msgid "Hide the slider under some slider width. Works only in Responsive Style. Not available for Fullwidth." +msgstr "Скрыть слайдер под указанной шириной. Работает только при типе - отзывчевый . Не действителен для типа - полная ширина" + +#: settings/slider_settings_xml_lang.php:121 +#@ revslider +msgid "Hide Defined Layers Under Width" +msgstr "Скрыть указанные слои под шириной" + +#: settings/slider_settings_xml_lang.php:122 +#@ revslider +msgid "Hide some defined layers in the layer properties under some slider width." +msgstr "Скрыть отмеченные слои в свойствах слоя под опеределенной ширине слайдера." + +#: settings/slider_settings_xml_lang.php:123 +#@ revslider +msgid "Hide All Layers Under Width" +msgstr "Скрыть все слои под указанной шириной" + +#: settings/slider_settings_xml_lang.php:124 +#@ revslider +msgid "Hide all layers under some slider width" +msgstr "Скрыть все слои под указанной шириной" + +#: settings/slider_settings_xml_lang.php:125 +#@ revslider +msgid "Start With Slide" +msgstr "Начать со слайда" + +#: settings/slider_settings_xml_lang.php:126 +#@ revslider +msgid "Change it if you want to start from a different slide then 1" +msgstr "Укажите значение если хотите чтоб слайдер начанался не с первого слайда" + +#: settings/slider_settings_xml_lang.php:127 +#@ revslider +msgid "First Transition Active" +msgstr "Изменение первой transition" + +#: settings/slider_settings_xml_lang.php:128 +#@ revslider +msgid "If active, it will overwrite the first slide transition. Use it when you want a special transition for the first slide only." +msgstr "Если активно, то будет изменен transition первого слайда. Используйте ето, когда вы хотите специального transition только для первого слайда" + +#: settings/slider_settings_xml_lang.php:129 +#@ revslider +msgid "First Transition Type" +msgstr "Тип первого transition" + +#: settings/slider_settings_xml_lang.php:130 +#@ revslider +msgid "First slide transition type" +msgstr "Тип transition первого слайда" + +#: settings/slider_settings_xml_lang.php:132 +#@ revslider +msgid "First Transition Duration" +msgstr "Продолжительность первого transition" + +#: settings/slider_settings_xml_lang.php:133 +#@ revslider +msgid "First slide transition duration (Default:300, min: 100 max 2000)" +msgstr "Продолжительность первого transition между слайдами (по умолчанию: 300 мин: 100 Макс 2000)" + +#: settings/slider_settings_xml_lang.php:134 +#@ revslider +msgid "First Transition Slot Amount" +msgstr "Количество слотов первой transition" + +#: settings/slider_settings_xml_lang.php:135 +#@ revslider +msgid "The number of slots or boxes the slide is divided into. If you use boxfade, over 7 slots can be juggy" +msgstr "Количество слотов на которые разделен на слайд при transition. Если вы используете boxfade, более семи слотов может быть Juggy" + +#: settings/slider_settings_xml_lang.php:136 +#@ revslider +msgid "JQuery No Conflict Mode" +msgstr "JQuery No Conflict Mode" + +#: settings/slider_settings_xml_lang.php:137 +#@ revslider +msgid "Turns on / off jquery noconflict mode. You can play with this option when you have some javascript conflicts." +msgstr "Включение / выключение режима noconflict JQuery. Вы можете играть с этой опцией, когда у вас есть JavaScript конфликты." + +#: settings/slider_settings_xml_lang.php:138 +#@ revslider +msgid "Put JS Includes To Body" +msgstr "Вставить JS Includes в Body" + +#: settings/slider_settings_xml_lang.php:139 +#@ revslider +msgid "Putting the js to body (in addition to head) is good for fixing some javascript conflicts of type: TypeError: tpj('#rev_slider_1_1').show().revolution is not a function" +msgstr "Ввод JS к Body (в дополнение к head) хороша для фиксации некоторых JavaScript конфликты типа: Ошибка типа: TypeError: tpj('#rev_slider_1_1').show().revolution is not a function" + +#: settings/slider_settings_xml_lang.php:142 +#@ revslider +msgid "Output Filters Protection" +msgstr "Защита от Output Filters" + +#: settings/slider_settings_xml_lang.php:143 +#@ revslider +msgid "Activate a protection against wordpress output filters that adds html blocks to the shortcode output like P and BR" +msgstr "Включить защиту от выходных фильтров WordPress блоки HTML, который добавляет к shortcode вывода, как и P BR" + +#: inc_php/framework/settings_product_sidebar.class.php:377 +#@ revslider +msgid "text" +msgstr "Текст" + +#: settings/general_settings.php:14 +#: settings/slider_settings_xml_lang.php:14 +#@ revslider +msgid "On" +msgstr "Вкл." + +#: settings/general_settings.php:14 +#: settings/slider_settings_xml_lang.php:15 +#@ revslider +msgid "Off" +msgstr "Выкл." + +#: settings/slider_settings_xml_lang.php:20 +#@ revslider +msgid "Yes" +msgstr "Да" + +#: settings/slider_settings_xml_lang.php:21 +#@ revslider +msgid "No" +msgstr "Нет" + +#: settings/slider_settings_xml_lang.php:32 +#@ revslider +msgid "Left" +msgstr "Лево" + +#: settings/slider_settings_xml_lang.php:33 +#@ revslider +msgid "Center" +msgstr "Центр" + +#: settings/slider_settings_xml_lang.php:34 +#@ revslider +msgid "Right" +msgstr "Право" + +#: settings/slider_settings_xml_lang.php:46 +#@ revslider +msgid "No Shadow" +msgstr "Нет тени" + +#: settings/slider_settings_xml_lang.php:47 +#@ revslider +msgid "1" +msgstr "1" + +#: settings/slider_settings_xml_lang.php:48 +#@ revslider +msgid "2" +msgstr "2" + +#: settings/slider_settings_xml_lang.php:49 +#@ revslider +msgid "3" +msgstr "3" + +#: settings/slider_settings_xml_lang.php:54 +#@ revslider +msgid "Hide" +msgstr "Скрыть" + +#: settings/slider_settings_xml_lang.php:52 +#@ revslider +msgid "Top" +msgstr "Верх" + +#: settings/slider_settings_xml_lang.php:53 +#@ revslider +msgid "Bottom" +msgstr "Низ" + +#: settings/slider_settings_xml_lang.php:69 +#@ revslider +msgid "None" +msgstr "Отсутсвует" + +#: settings/slider_settings_xml_lang.php:70 +#@ revslider +msgid "Bullet" +msgstr "Булет" + +#: settings/slider_settings_xml_lang.php:71 +#@ revslider +msgid "Thumb" +msgstr "Thumb" + +#: settings/slider_settings_xml_lang.php:72 +#@ revslider +msgid "Both" +msgstr "Оба" + +#: settings/slider_settings_xml_lang.php:75 +#@ revslider +msgid "With Bullets" +msgstr "С булеттами" + +#: settings/slider_settings_xml_lang.php:76 +#@ revslider +msgid "Solo" +msgstr "Отдельные" + +#: settings/slider_settings_xml_lang.php:79 +#@ revslider +msgid "Round" +msgstr "Округленные" + +#: settings/slider_settings_xml_lang.php:80 +#@ revslider +msgid "Navbar" +msgstr "Navbar" + +#: settings/slider_settings_xml_lang.php:81 +#@ revslider +msgid "Old Round" +msgstr "Округленные старого типа" + +#: settings/slider_settings_xml_lang.php:82 +#@ revslider +msgid "Old Square" +msgstr "Квадратные старого типа" + +#: settings/slider_settings_xml_lang.php:83 +#@ revslider +msgid "Old Navbar" +msgstr "Navbar старого типа" + +#: settings/slider_settings_xml_lang.php:131 +#@ revslider +msgid "Replace me!" +msgstr "Поменяй меня!" + +#: settings/slider_settings_xml_lang.php:140 +#@ revslider +msgid "True" +msgstr "Да" + +#: settings/slider_settings_xml_lang.php:141 +#@ revslider +msgid "False" +msgstr "Нет" + +#: settings/slider_settings_xml_lang.php:144 +#@ revslider +msgid "By Compressing Output" +msgstr "Компресс вывода" + +#: settings/slider_settings_xml_lang.php:145 +#@ revslider +msgid "By Echo Output" +msgstr "выводя с помощью echo" + +#: views/master_view.php:40 +#@ revslider +msgid "Update Plugin" +msgstr "Обновить плагин" + +#: views/system/update_dialog.php:2 +#@ revslider +msgid "Update Slider Plugin" +msgstr "Обновить плагин слайдера" + +#: views/system/update_dialog.php:3 +#@ revslider +msgid "Update Revolution Slider Plugin" +msgstr "Обновить плагин Revolution Slider" + +#: views/system/update_dialog.php:5 +#@ revslider +msgid "To update the slider please show the slider install package. The files will be overwriten." +msgstr "Чтобы обновить слайдер пожалуйста выбрать упаковку установки. Файлы будут перезаписаны." + +#: views/system/update_dialog.php:6 +#@ default +msgid "File example: revslider.zip" +msgstr "" + +#: views/system/update_dialog.php:16 +#@ revslider +msgid "Choose the update file:" +msgstr "Выберите файл обновления:" + +#: views/system/update_dialog.php:20 +#: views/templates/slider_edit.php:21 +#@ revslider +msgid "Update Slider" +msgstr "Сохранить" + +#: views/system/video_dialog.php:3 +#@ revslider +msgid "Add Youtube Layout" +msgstr "Добавить макет Youtube" + +#: views/system/video_dialog.php:11 +#@ revslider +msgid "Choose video type" +msgstr "Выбор типа видео" + +#: views/system/video_dialog.php:29 +#@ revslider +msgid "Enter Vimeo ID or URL" +msgstr "Введите ID Vimeo или адресс" + +#: views/system/video_dialog.php:39 +#@ revslider +msgid "example: 30300114" +msgstr "пример: 30300114" + +#: views/templates/edit_layers.php:10 +#@ revslider +msgid "Image BG" +msgstr "фон изображения" + +#: views/templates/edit_layers.php:21 +#@ revslider +msgid "Solid BG" +msgstr "Цельный фон" + +#: views/templates/edit_layers.php:30 +#@ revslider +msgid "Add Layer" +msgstr "Добавить слой" + +#: views/templates/edit_layers.php:31 +#@ revslider +msgid "Add Layer: Image" +msgstr "Добавить слой: Изображение" + +#: views/templates/edit_layers.php:32 +#@ revslider +msgid "Add Layer: Video" +msgstr "Добавить слой: видео" + +#: views/templates/edit_layers.php:34 +#@ revslider +msgid "Delete Layer" +msgstr "Стереть слой" + +#: views/templates/edit_layers.php:35 +#@ revslider +msgid "Delete All Layers" +msgstr "Стереть все слои" + +#: views/templates/edit_layers.php:37 +#@ default +msgid "Duplicate Layer" +msgstr "" + +#: settings/layer_settings.php:19 +#: settings/layer_settings.php:20 +#@ revslider +msgid "Layer Params" +msgstr "Параметрй Слоев" + +#: views/templates/edit_layers.php:183 +#@ revslider +msgid "By Time" +msgstr "По времени" + +#: views/templates/edit_layers.php:184 +#@ revslider +msgid "By Depth" +msgstr "По глубине" + +#: views/templates/slide.php:16 +#: views/templates/slides_list.php:60 +#@ revslider +msgid "Edit Slide" +msgstr "Редактировать" + +#: views/templates/edit_layers.php:5 +#@ revslider +msgid "Slide Image and Layers" +msgstr "Изображение и слой слайда" + +#: views/templates/slide.php:77 +#@ revslider +msgid "Update Slide" +msgstr "Сохронить" + +#: views/templates/slide.php:78 +#@ revslider +msgid "updating" +msgstr "сохроняется" + +#: views/system/general_settings_dialog.php:22 +#: views/templates/slide.php:81 +#: views/templates/slider_edit.php:28 +#: views/templates/slider_new.php:19 +#: views/templates/slides.php:12 +#: views/templates/slides.php:26 +#: views/templates/slides.php:33 +#@ revslider +#@ default +msgid "Close" +msgstr "Закрыть" + +#: views/templates/slider_api.php:8 +#@ revslider +msgid "API Methods" +msgstr "Методы API" + +#: views/templates/slider_api.php:10 +#@ revslider +msgid "Please copy / paste those functions into your functions js file" +msgstr "Пожалуйста, копировaйте / вставте ети функции в ваш фаил JS." + +#: views/templates/slider_api.php:14 +#@ revslider +msgid "Pause Slider" +msgstr "Приостановить слайдер" + +#: views/templates/slider_api.php:18 +#@ revslider +msgid "Resume Slider" +msgstr "Продолжить слайдер" + +#: views/templates/slider_api.php:22 +#@ revslider +msgid "Previous Slide" +msgstr "Предидущий слайд" + +#: views/templates/slider_api.php:26 +#@ revslider +msgid "Next Slide" +msgstr "Следуещий слайд" + +#: views/templates/slider_api.php:30 +#@ revslider +msgid "Go To Slide" +msgstr "Перейти на слайд" + +#: views/templates/slider_api.php:34 +#@ revslider +msgid "Get Num Slides" +msgstr "Узнать количество слайдов" + +#: views/templates/slider_api.php:38 +#@ revslider +msgid "Get Current Slide Number" +msgstr "Узнать текуший номер слайда" + +#: views/templates/slider_api.php:42 +#@ revslider +msgid "Get Last Playing Slide Number" +msgstr "Узнать номер прошедшего слайда" + +#: views/templates/slider_api.php:54 +#@ revslider +msgid "API Events" +msgstr "События API" + +#: views/templates/slider_edit.php:5 +#: views/templates/sliders_list.php:34 +#@ revslider +msgid "Edit Slider" +msgstr "Редактировать слайдер" + +#: views/templates/slider_edit.php:22 +#@ revslider +msgid "updating..." +msgstr "сохроняется..." + +#: views/templates/slider_edit.php:26 +#@ revslider +msgid "Delete Slider" +msgstr "Удалить слайдер" + +#: views/templates/slider_edit.php:30 +#: views/templates/sliders_list.php:36 +#: views/templates/slides.php:3 +#@ revslider +msgid "Edit Slides" +msgstr "Редактировать слайды" + +#: views/templates/slider_edit.php:32 +#@ revslider +msgid "Preview Slider" +msgstr "Простмотр слайдера" + +#: views/templates/slider_new.php:5 +#@ revslider +msgid "New Slider" +msgstr "Новый слайдер" + +#: views/templates/slider_new.php:15 +#@ revslider +msgid "Create Slider" +msgstr "Создать слайдер" + +#: views/templates/slider_toolbox.php:18 +#@ revslider +msgid "Note, that when you importing slider, it delete all the current slider settings and slides, then replace it with the new ones" +msgstr "Отметим, что когда вы импортируете слайдер, это удалит все текущие настройки слайдера и слайды, а затем заменит его на новые" + +#: views/templates/sliders.php:69 +#@ revslider +msgid "Choose the import file" +msgstr "Выберите файл импорта" + +#: views/templates/sliders.php:20 +#@ revslider +msgid "No Sliders Found" +msgstr "слайдеры не найдены" + +#: views/templates/sliders.php:29 +#@ revslider +msgid "Create New Slider" +msgstr "Создать новый слайдер" + +#: views/templates/sliders.php:41 +#: views/templates/sliders.php:46 +#: views/templates/sliders.php:47 +#@ default +#@ revslider +msgid "* From the" +msgstr "* Из" + +#: views/templates/sliders.php:41 +#@ revslider +msgid "theme html" +msgstr "html темы" + +#: views/templates/sliders.php:41 +#@ revslider +msgid "use" +msgstr "изпользовать" + +#: views/system/video_dialog.php:59 +#: views/templates/sliders.php:41 +#@ revslider +msgid "example" +msgstr "пример" + +#: views/templates/sliders.php:43 +#@ revslider +msgid "For show only on homepage use" +msgstr "Для использования только на домашней странице" + +#: views/templates/sliders.php:44 +#@ default +msgid "For show on certain pages use" +msgstr "" + +#: views/templates/sliders.php:46 +#@ revslider +msgid "widgets panel" +msgstr "Панеле виджетов" + +#: views/templates/sliders.php:46 +#@ revslider +msgid "drag the \"Revolution Slider\" widget to the desired sidebar" +msgstr "Перетащите \"Revolution Slider \" виджет в боковое меню" + +#: views/templates/sliders.php:47 +#@ revslider +msgid "post editor" +msgstr "редактора записей" + +#: views/templates/sliders.php:47 +#@ revslider +msgid "insert the shortcode from the sliders table" +msgstr "Вставьте shortcode из таблицы слайдеров" + +#: views/templates/sliders.php:51 +#@ revslider +msgid "If you have some support issue, don't hesitate to" +msgstr "Если у вас есть вопрос, не стесняйтесь" + +#: views/templates/sliders.php:52 +#@ revslider +msgid "write here" +msgstr "написать сдесь" + +#: views/templates/sliders.php:53 +#@ revslider +msgid "The ThemePunch team will be happy to support you on any issue" +msgstr "Команда ThemePunch будете счастлива оказать вам техническую поддержку" + +#: views/templates/sliders_list.php:5 +#@ revslider +msgid "ID" +msgstr "ID" + +#: views/templates/sliders_list.php:6 +#@ revslider +msgid "Name" +msgstr "Название" + +#: views/templates/sliders_list.php:7 +#@ revslider +msgid "N. Slides" +msgstr "Колич. Слайдов" + +#: views/templates/sliders_list.php:8 +#@ revslider +msgid "Actions" +msgstr "Действиа" + +#: views/templates/sliders_list.php:9 +#@ revslider +msgid "Shortcode" +msgstr "Shortcode" + +#: views/templates/sliders_list.php:10 +#: views/templates/sliders_list.php:44 +#@ revslider +msgid "Preview" +msgstr "Просмотр" + +#: views/templates/sliders_list.php:38 +#: views/templates/slides_list.php:85 +#@ revslider +msgid "Delete" +msgstr "Удалить" + +#: views/templates/sliders_list.php:40 +#: views/templates/slides_list.php:87 +#@ revslider +msgid "Duplicate" +msgstr "Дублировать" + +#: views/templates/slides.php:7 +#: views/templates/slides.php:21 +#@ revslider +msgid "New Slide" +msgstr "Новый Слайд" + +#: views/templates/slides.php:29 +#@ revslider +msgid "To Slider Settings" +msgstr "Перейти к установкам слайдера" + +#: views/templates/slides_list.php:4 +#@ revslider +msgid "Slides List" +msgstr "Список слайдов" + +#: views/templates/slides_list.php:5 +#@ default +msgid "Saving Order" +msgstr "" + +#: views/templates/slides_list.php:9 +#@ revslider +msgid "No Slides Found" +msgstr "Слайды не найденны" + +#: views/templates/slides_list.php:49 +#@ revslider +msgid "Unpublish Slide" +msgstr "Отменить публикацию слайдов" + +#: views/templates/slides_list.php:51 +#@ revslider +msgid "Publish Slide" +msgstr "Публикация слайда" + +#: inc_php/revslider_settings_product.class.php:100 +#: inc_php/revslider_settings_product.class.php:114 +#: inc_php/revslider_settings_product.class.php:128 +#: inc_php/revslider_settings_product.class.php:142 +#: inc_php/revslider_settings_product.class.php:156 +#: inc_php/revslider_settings_product.class.php:170 +#@ revslider +msgid "Screen Width" +msgstr "Ширина экрана" + +#: inc_php/revslider_settings_product.class.php:106 +#: inc_php/revslider_settings_product.class.php:120 +#: inc_php/revslider_settings_product.class.php:134 +#: inc_php/revslider_settings_product.class.php:148 +#: inc_php/revslider_settings_product.class.php:162 +#: inc_php/revslider_settings_product.class.php:176 +#@ revslider +msgid "Slider Width" +msgstr "Ширина слайдера" + +#: settings/slider_settings.php:7 +#@ revslider +msgid "The title of the slider. Example: Slider1" +msgstr "Название слайдера. Пример: Slider1" + +#: settings/slider_settings.php:8 +#@ revslider +msgid "The alias that will be used for embedding the slider. Example: slider1" +msgstr "Это будет псевдонимом, используемым для встраивания слайдера. Пример: slider1" + +#: settings/slider_settings.php:9 +#@ revslider +msgid "Slider Shortcode" +msgstr "Shortcode слайдера" + +#: settings/slider_settings.php:14 +#@ revslider +msgid "Fixed" +msgstr "Неизминяемый" + +#: settings/slider_settings.php:7 +#@ revslider +msgid "Slider Title" +msgstr "Название слайдера" + +#: settings/slider_settings.php:8 +#@ revslider +msgid "Slider Alias" +msgstr "Псевдоним слайдера" + +#: settings/slider_settings_xml_lang.php:2 +#: views/system/general_settings_dialog.php:10 +#@ revslider +msgid "General Settings" +msgstr "Общие параметры" + +#: settings/slider_settings_xml_lang.php:3 +#@ revslider +msgid "Position" +msgstr "Позиция" + +#: settings/slider_settings_xml_lang.php:4 +#@ revslider +msgid "Appearance" +msgstr "Внешний вид" + +#: settings/slider_settings_xml_lang.php:5 +#@ revslider +msgid "Navigation" +msgstr "Навигация" + +#: settings/slider_settings_xml_lang.php:6 +#@ revslider +msgid "Thumbnails" +msgstr "Миниотюры" + +#: settings/slider_settings_xml_lang.php:7 +#@ revslider +msgid "Mobile Visibility" +msgstr "Мобильная видимость" + +#: settings/slider_settings_xml_lang.php:9 +#@ revslider +msgid "Troubleshooting" +msgstr "Устранение неисправностей" + +#: revslider_admin.php:269 +#@ revslider +msgid "The slider successfully created" +msgstr "Слайдер был успешно создан" + +#: revslider_admin.php:275 +#@ revslider +msgid "Slider updated" +msgstr "Слайдер обновился" + +#: revslider_admin.php:283 +#@ revslider +msgid "The slider deleted" +msgstr "Слайдер успешно стерся" + +#: revslider_admin.php:291 +#@ revslider +msgid "The duplicate successfully, refreshing page..." +msgstr "Дублированно успешно, рефрешим страницу..." + +#: revslider_admin.php:299 +#@ revslider +msgid "Slide Created" +msgstr "Слайдер создан" + +#: revslider_admin.php:316 +#@ revslider +msgid "Slide updated" +msgstr "Слайдер обновлен" + +#: revslider_admin.php:322 +#@ revslider +msgid "Slide Deleted Successfully" +msgstr "Слайд успешно удален" + +#: revslider_admin.php:328 +#@ revslider +msgid "Slide Duplicated Successfully" +msgstr "Слайд дублирован успешно" + +#: revslider_admin.php:344 +#@ revslider +msgid "CSS file saved succesfully!" +msgstr "CSS файл успешно сохранен!" + +#: revslider_admin.php:353 +#@ revslider +msgid "Order updated successfully" +msgstr "Порядок успешно сохранен" + +#: revslider_admin.php:359 +#@ revslider +msgid "Slide Changed Successfully" +msgstr "Слайд успешно изменен" + +#: views/templates/slider_toolbox.php:25 +#: views/templates/slider_toolbox.php:28 +#@ revslider +msgid "Export Slider" +msgstr "Экспорт слайдера" + +#: settings/layer_settings.php:19 +#: settings/layer_settings.php:20 +#@ revslider +#@ default +msgid "layer_params" +msgstr "" + +#: settings/layer_settings.php:21 +#@ default +msgid "layer_caption" +msgstr "" + +#: settings/layer_settings.php:21 +#@ default +msgid "caption_green" +msgstr "" + +#: settings/layer_settings.php:21 +#@ revslider +msgid "Style" +msgstr "" + +#: settings/layer_settings.php:25 +#@ revslider +msgid "Text / Html" +msgstr "" + +#: settings/layer_settings.php:26 +#@ revslider +msgid "Image Link" +msgstr "" + +#: settings/layer_settings.php:27 +#: settings/slide_settings.php:62 +#@ revslider +msgid "Same Window" +msgstr "" + +#: settings/layer_settings.php:27 +#: settings/slide_settings.php:62 +#@ revslider +#@ default +msgid "New Window" +msgstr "" + +#: settings/layer_settings.php:27 +#: settings/slide_settings.php:62 +#@ revslider +msgid "Link Open In" +msgstr "" + +#: settings/layer_settings.php:29 +#@ revslider +msgid "Animation" +msgstr "" + +#: settings/layer_settings.php:30 +#: settings/layer_settings.php:61 +#@ revslider +msgid "Easing" +msgstr "" + +#: settings/layer_settings.php:33 +#@ revslider +msgid "Hide Under Width" +msgstr "" + +#: settings/layer_settings.php:37 +#: settings/layer_settings.php:39 +#@ revslider +msgid "X" +msgstr "" + +#: settings/layer_settings.php:42 +#: settings/layer_settings.php:44 +#@ revslider +msgid "Y" +msgstr "" + +#: settings/layer_settings.php:49 +#@ revslider +msgid "Link To Slide" +msgstr "" + +#: settings/layer_settings.php:54 +#@ revslider +msgid "Edit Video" +msgstr "" + +#: settings/layer_settings.php:55 +#@ revslider +msgid "Change Image Source" +msgstr "" + +#: settings/layer_settings.php:58 +#@ revslider +msgid "End Time" +msgstr "" + +#: settings/layer_settings.php:59 +#@ revslider +msgid "End Speed" +msgstr "" + +#: settings/layer_settings.php:60 +#@ revslider +msgid "End Animation" +msgstr "" + +#: settings/slide_settings.php:11 +#@ revslider +msgid "The title of the slide, will be shown in the slides list." +msgstr "" + +#: settings/slide_settings.php:12 +#@ revslider +msgid "Slide" +msgstr "" + +#: settings/slide_settings.php:12 +#@ revslider +msgid "Slide Title" +msgstr "" + +#: settings/slide_settings.php:15 +#@ revslider +msgid "The state of the slide. The unpublished slide will be excluded from the slider." +msgstr "" + +#: settings/slide_settings.php:16 +#@ revslider +msgid "Published" +msgstr "" + +#: settings/slide_settings.php:16 +#@ revslider +msgid "Unpublished" +msgstr "" + +#: settings/slide_settings.php:16 +#@ revslider +msgid "State" +msgstr "" + +#: settings/slide_settings.php:23 +#@ revslider +msgid "The number of slots or boxes the slide is divided into. If you use boxfade, over 7 slots can be juggy." +msgstr "" + +#: settings/slide_settings.php:26 +#@ revslider +msgid "Slot Amount" +msgstr "" + +#: settings/slide_settings.php:29 +#@ revslider +msgid "Rotation (-720 -> 720, 999 = random) Only for Simple Transitions." +msgstr "" + +#: settings/slide_settings.php:32 +#@ revslider +msgid "Rotation" +msgstr "" + +#: settings/slide_settings.php:35 +#@ revslider +msgid "The duration of the transition (Default:300, min: 100 max 2000). " +msgstr "" + +#: settings/slide_settings.php:38 +#@ revslider +msgid "Transition Duration" +msgstr "" + +#: settings/slide_settings.php:41 +#@ revslider +msgid "A new delay value for the Slide. If no delay defined per slide, the delay defined via Options (" +msgstr "" + +#: settings/slide_settings.php:41 +#@ revslider +msgid "ms) will be used" +msgstr "" + +#: settings/slide_settings.php:49 +#@ revslider +msgid "Enable Link" +msgstr "" + +#: settings/slide_settings.php:49 +#@ revslider +msgid "Enable" +msgstr "" + +#: settings/slide_settings.php:49 +#@ revslider +msgid "Disable" +msgstr "" + +#: settings/slide_settings.php:54 +#@ revslider +msgid "Regular" +msgstr "" + +#: settings/slide_settings.php:54 +#@ revslider +msgid "To Slide" +msgstr "" + +#: settings/slide_settings.php:54 +#@ revslider +msgid "Link Type" +msgstr "" + +#: settings/slide_settings.php:57 +#@ revslider +msgid "A link on the whole slide pic" +msgstr "" + +#: settings/slide_settings.php:58 +#@ revslider +msgid "Slide Link" +msgstr "" + +#: settings/slide_settings.php:61 +#@ revslider +msgid "The target of the slide link" +msgstr "" + +#: settings/slide_settings.php:66 +#@ revslider +msgid "-- Not Chosen --" +msgstr "" + +#: settings/slide_settings.php:67 +#@ revslider +msgid "-- Next Slide --" +msgstr "" + +#: settings/slide_settings.php:68 +#@ revslider +msgid "-- Previous Slide --" +msgstr "" + +#: settings/slide_settings.php:92 +#@ revslider +msgid "Slide Thumbnail. If not set - it will be taken from the slide image." +msgstr "" + +#: settings/slide_settings.php:93 +#@ revslider +msgid "Thumbnail" +msgstr "" + +#: settings/slide_settings.php:95 +#@ revslider +msgid "Apply to full width mode only. Centering vertically slide images." +msgstr "" + +#: settings/slide_settings.php:96 +#@ revslider +msgid "Full Width Centering" +msgstr "" + +#: settings/slide_settings.php:99 +#@ revslider +msgid "Background Type" +msgstr "" + +#: inc_php/revslider_output.class.php:892 +#@ revslider +msgid "Revolution Slider Error" +msgstr "" + +#: inc_php/revslider_settings_product.class.php:199 +#: inc_php/revslider_settings_product.class.php:202 +#: inc_php/revslider_settings_product.class.php:205 +#@ revslider +msgid "Grid Width:" +msgstr "" + +#: inc_php/revslider_settings_product.class.php:200 +#: inc_php/revslider_settings_product.class.php:203 +#: inc_php/revslider_settings_product.class.php:206 +#@ revslider +msgid "Grid Height:" +msgstr "" + +#: revslider.php:97 +#@ revslider +msgid "If you want to use the PHP function \"putRevSlider\" in your code please make sure to check \" " +msgstr "" + +#: revslider.php:97 +#@ revslider +msgid " \" in the backend's \"General Settings\" (top right panel).

            Or add the current page to the \"" +msgstr "" + +#: revslider.php:97 +#@ default +msgid "\" option box." +msgstr "" + +#: revslider.php:112 +#@ revslider +msgid "Revolution Slider Error:" +msgstr "" + +#: revslider_admin.php:210 +#@ revslider +msgid "importing slider setings and data..." +msgstr "" + +#: revslider_admin.php:226 +#@ revslider +msgid "Go Back" +msgstr "" + +#: revslider_admin.php:229 +#@ revslider +msgid "Slider Import Success, redirecting..." +msgstr "" + +#: revslider_admin.php:302 +#@ revslider +msgid "Slides Created" +msgstr "" + +#: revslider_admin.php:311 +#@ revslider +msgid "Slide Created, redirecting..." +msgstr "" + +#: revslider_admin.php:335 +#@ revslider +msgid "The operation successfully, refreshing page..." +msgstr "" + +#: revslider_admin.php:382 +#@ default +msgid "General settings updated" +msgstr "" + +#: settings/general_settings.php:6 +#@ revslider +msgid "To Admin" +msgstr "" + +#: settings/general_settings.php:7 +#@ revslider +msgid "To Editor, Admin" +msgstr "" + +#: settings/general_settings.php:8 +#@ revslider +msgid "Author, Editor, Admin" +msgstr "" + +#: settings/general_settings.php:9 +#@ revslider +msgid "View Plugin Permission" +msgstr "" + +#: settings/general_settings.php:11 +#@ revslider +msgid "The role of user that can view and edit the plugin" +msgstr "" + +#: settings/general_settings.php:15 +#@ revslider +msgid "Include RevSlider libraries globally" +msgstr "" + +#: settings/general_settings.php:17 +#@ revslider +msgid "Add css and js includes only on all pages. Id turned to off they will added to pages where the rev_slider shortcode exists only. This will work only when the slider added by a shortcode." +msgstr "" + +#: settings/general_settings.php:19 +#@ revslider +msgid "Pages to include RevSlider libraries" +msgstr "" + +#: settings/general_settings.php:20 +#@ revslider +msgid "Specify the page id's that the front end includes will be included in. Example: 2,3,5 also: homepage,3,4" +msgstr "" + +#: settings/layer_settings.php:36 +#@ revslider +msgid "OffsetX" +msgstr "" + +#: settings/layer_settings.php:41 +#@ revslider +msgid "OffsetY" +msgstr "" + +#: settings/layer_settings.php:52 +#@ revslider +msgid "Scroll Under Slider Offset" +msgstr "" + +#: settings/layer_settings.php:65 +#@ revslider +msgid "No Corner" +msgstr "" + +#: settings/layer_settings.php:66 +#@ revslider +msgid "Sharp" +msgstr "" + +#: settings/layer_settings.php:67 +#@ revslider +msgid "Sharp Reversed" +msgstr "" + +#: settings/layer_settings.php:69 +#@ revslider +msgid "Left Corner" +msgstr "" + +#: settings/layer_settings.php:70 +#@ revslider +msgid "Right Corner" +msgstr "" + +#: settings/layer_settings.php:71 +#@ revslider +msgid "Responsive Through All Levels" +msgstr "" + +#: settings/slide_settings.php:19 +#@ revslider +msgid "The appearance transitions of this slide." +msgstr "" + +#: settings/slide_settings.php:20 +#@ revslider +msgid "Transitions" +msgstr "" + +#: settings/slide_settings.php:71 +#@ default +msgid "-- Scroll Below Slider --" +msgstr "" + +#: settings/slider_settings.php:15 +#@ revslider +msgid "Custom" +msgstr "" + +#: settings/slider_settings.php:16 +#@ revslider +msgid "Auto Responsive" +msgstr "" + +#: settings/slider_settings.php:17 +#@ revslider +msgid "Full Screen" +msgstr "" + +#: settings/slider_settings.php:18 +#@ revslider +msgid "Slider Layout" +msgstr "" + +#: settings/slider_settings.php:21 +#@ revslider +msgid "Example: #header | The height of fullscreen slider will be decreased with the height of the #header to fit perfect in the screen" +msgstr "" + +#: settings/slider_settings.php:22 +#@ revslider +msgid "Fullscreen Offset Container" +msgstr "" + +#: settings/slider_settings.php:27 +#@ revslider +msgid "Grid Settings" +msgstr "" + +#: settings/slider_settings.php:33 +#@ default +msgid "Custom Responsive Sizes" +msgstr "" + +#: settings/slider_settings_xml_lang.php:8 +#@ revslider +msgid "Alternative First Slide" +msgstr "" + +#: settings/slider_settings_xml_lang.php:16 +#@ revslider +msgid "Lazy Load" +msgstr "" + +#: settings/slider_settings_xml_lang.php:17 +#@ revslider +msgid "The lazy load means that the images will be loaded by demand, it speeds the loading of the slider." +msgstr "" + +#: temp/functions_wordpress.class.php:703 +#: temp/functions_wordpress.class.php:706 +#: temp/functions_wordpress.class.php:713 +#, php-format +#@ default +msgid "View all posts in %s" +msgstr "" + +#: views/system/general_settings_dialog.php:17 +#@ revslider +msgid "Update" +msgstr "" + +#: views/system/video_dialog.php:14 +#@ revslider +msgid "Youtube" +msgstr "" + +#: views/system/video_dialog.php:17 +#@ revslider +msgid "Vimeo" +msgstr "" + +#: views/system/video_dialog.php:20 +#@ revslider +msgid "HTML5" +msgstr "" + +#: views/system/video_dialog.php:49 +#@ revslider +msgid "Enter Youtube ID or URL" +msgstr "" + +#: views/system/video_dialog.php:71 +#@ default +msgid "Poster Image Url" +msgstr "" + +#: views/system/video_dialog.php:74 +#: views/system/video_dialog.php:81 +#: views/system/video_dialog.php:88 +#: views/system/video_dialog.php:95 +#@ revslider +msgid "Example" +msgstr "" + +#: views/system/video_dialog.php:78 +#@ default +msgid "Video MP4 Url" +msgstr "" + +#: views/system/video_dialog.php:85 +#@ default +msgid "Video WEBM Url" +msgstr "" + +#: views/system/video_dialog.php:92 +#@ default +msgid "Video OGV Url" +msgstr "" + +#: views/system/video_dialog.php:108 +#@ revslider +msgid "Width" +msgstr "" + +#: views/system/video_dialog.php:111 +#@ revslider +msgid "Height" +msgstr "" + +#: views/system/video_dialog.php:118 +#@ revslider +msgid "Full Width:" +msgstr "" + +#: views/system/video_dialog.php:128 +#@ revslider +msgid "Arguments:" +msgstr "" + +#: views/system/video_dialog.php:135 +#@ revslider +msgid "Autplay:" +msgstr "" + +#: views/system/video_dialog.php:141 +#@ revslider +msgid "Next Slide On End:" +msgstr "" + +#: views/system/video_dialog.php:151 +#@ revslider +msgid "Add This Video" +msgstr "" + +#: views/system/video_dialog.php:151 +#@ revslider +msgid "Update Video" +msgstr "" + +#: views/templates/edit_layers.php:16 +#@ revslider +msgid "Transparent BG" +msgstr "" + +#: views/templates/edit_layers.php:73 +#@ revslider +msgid "Layer General Parameters" +msgstr "" + +#: views/templates/edit_layers.php:82 +#@ revslider +msgid "Align & Position" +msgstr "" + +#: views/templates/edit_layers.php:122 +#@ revslider +msgid "Layer Animation" +msgstr "" + +#: views/templates/edit_layers.php:129 +#@ revslider +msgid "Start Transition" +msgstr "" + +#: views/templates/edit_layers.php:138 +#@ revslider +msgid "End Transition (optional)" +msgstr "" + +#: views/templates/edit_layers.php:157 +#@ revslider +msgid "Layer Links & Advanced Params" +msgstr "" + +#: views/templates/edit_layers.php:181 +#@ revslider +msgid "Layers Timing & Sorting" +msgstr "" + +#: views/templates/slide.php:41 +#@ revslider +msgid "Add Slide" +msgstr "" + +#: views/templates/slide.php:54 +#@ revslider +msgid "General Slide Settings" +msgstr "" + +#: views/templates/slider_api.php:6 +#@ revslider +msgid "API Functions" +msgstr "" + +#: views/templates/slider_api.php:46 +#@ revslider +msgid "External Scroll" +msgstr "" + +#: views/templates/slider_api.php:56 +#@ revslider +msgid "Copy and Paste the Below listed API Functions into your jQuery Functions for Revslider Event Listening" +msgstr "" + +#: views/templates/slider_edit.php:12 +#@ revslider +msgid "Main Slider Settings" +msgstr "" + +#: views/templates/slider_toolbox.php:3 +#@ revslider +msgid "Import / Export" +msgstr "" + +#: views/templates/slider_toolbox.php:6 +#: views/templates/sliders.php:31 +#: views/templates/sliders.php:62 +#@ revslider +msgid "Import Slider" +msgstr "" + +#: views/templates/sliders.php:14 +#@ revslider +msgid "Global Settings" +msgstr "" + +#: views/templates/slides.php:9 +#: views/templates/slides.php:23 +#@ revslider +msgid "New Transparent Slide" +msgstr "" + +#: views/templates/slides.php:10 +#: views/templates/slides.php:24 +#@ revslider +msgid "Adding Slide..." +msgstr "" + +#: views/templates/slides.php:21 +#@ revslider +msgid "Select image or multiple images to add slide or slides" +msgstr "" + +#: views/templates/slides.php:33 +#@ default +msgid "Do It!" +msgstr "" + +#: views/templates/slides.php:33 +#@ revslider +msgid "Copy / move slide" +msgstr "" + +#: views/templates/slides.php:37 +#@ revslider +msgid "Choose Slider" +msgstr "" + +#: views/templates/slides.php:42 +#@ default +msgid "Choose Operation" +msgstr "" + +#: views/templates/slides.php:45 +#@ revslider +msgid "Copy" +msgstr "" + +#: views/templates/slides.php:48 +#@ revslider +msgid "Move" +msgstr "" + +#: views/templates/slides_list.php:86 +#@ default +msgid "Deleting Slide..." +msgstr "" + +#: views/templates/slides_list.php:90 +#@ revslider +msgid "Open copy / move dialog" +msgstr "" + +#: views/templates/slides_list.php:97 +#@ revslider +msgid "Copy / Move" +msgstr "" + +#: views/templates/slides_list.php:98 +#@ default +msgid "Working..." +msgstr "" + diff --git a/src/wp-content/plugins/revslider/languages/temp/index.php b/src/wp-content/plugins/revslider/languages/temp/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/release_log.txt b/src/wp-content/plugins/revslider/release_log.txt new file mode 100644 index 0000000..8b030c2 --- /dev/null +++ b/src/wp-content/plugins/revslider/release_log.txt @@ -0,0 +1,642 @@ +version 4.1.4: + +- Feature: ID, Class, Title & Rel attribute for Links on images added +- Feature: Added files so that google does not index internal files + +- Change: German language files recreated +- Change: instead of a fatal error, the none existence of ZipArchive will now give a more gently message + + +version 4.1.3: + +- Change: Imported images through slider import create now also the thumbnails + +- Bug fix: stripslashes problem in global styles at slider imports fixed +- Bug fix: multisite import of slider now correctly imports images +- Bug fix: selecting thumbnails/video overlays now work on multisites + + +version 4.1.2: + +- Change: Deleting Posts inside a Post Slider will now trash instead of deleting them + +- Bug fix: Fixed a z-index issue where the-events-calendar set the jquery-ui-dialog overlay over the Slider Revolution Dialogs +- Bug Fix: Http / Https loading of API’S in the right format depending on the current URL +- Bug Fix: Issue solved with the HTML5 Video Sizing +- Bug Fix: YouTube Api does not work without the origin=http://yourdomain any more !! + - The slider adds this now automatically on every YouTube video. + NOTE: Please note that this only works on live servers and not local installations. + For example: autoplay will not work on local machines but on your live servers + + +version 4.1.1: + +- Feature: New API Method: rev redraw for Redrawing the current Slide in case, slider is included some animated container. +- Feature: New tab in Slider Settings: Reset Options. + - Reset all Transitions of this Slider to a choosen one + - Reset all Transition Durations of this Slider to a choosen one +- Feature: New Dropdown on Post/Pages for revslider Shortcodes (found in Visual mode of Editor) + +- Change: New button in Slide Edit mode to go back to Slide List of Slider + +- Bug fix: Remove of Aspect Ratio and Dotted Overlay if Cover was not choosen in HTML5 Videos +- Bug fix: Fixed a bug on import of Slider where custom arrows might break +- Bug fix: Fixed a bug for Missing static-captions.css +- Bug fix: Fixed FF and IE10 Animation issues +- Bug fix: Fixed Wrong calculated Center positions if Caption has CSS3 Animations associated + + +version 4.1: + +- Feature: Ken Burns Effect (align start/end) bg Fit (start/end), Speed and easing +- Feature: Min Height for Fullscreen Sliders +- Feature: Fullscreen HTML5 Videos with new functions +- Feature: Cover the whole HTML5 Videoscreen (no black borders) +- Feature: Dotted overlays on HTML5 Videos with cover & slide backgrounds +- Feature: Dotted Overlay on Background Images (global setting) +- Feature: Mute option on Videos +- Feature: Force Rewind of Videos on slideview + +- Change: Fallback to old export if zip extension is not installed on server + +- Bug fix: Post meta tag fix for plugin: Types - Complete Solution for Custom Fields and Types + + +version 4.0.6: + +- Bug fix: Force Fullwidth Offsets +- Bug fix: Added FF Protection for 3d Animated Elements +- Bug fix: Update GreenSock Engine with Protection for FF25 Animations +- Bug fix: IE8 HALO Effect Solved + + +version 4.0.5: + +- Feature: New Background-Image options in slider settings under Appearance Tab +- Feature: Usage of placeholder %link% and %meta:somemeta% for Slide Link in General Slide Settings + +- Change: Added fallback for dynamic-captions.css (if not writable, load captions.php instead) + +- Bug fix: Fixed a bug where no layers could be added to Slides +- Bug fix: Fixed a bug where Post Sliders do not show the correct thumbnails in navigation +- Bug fix: Fixed a few texts for better multilanguage support + +version 4.0.4: + +- Bug fix: inserted two missing functions + + +version 4.0.3: + +- Change: the option Responsive Through All Levels in layers is now checked as default +- Change: set default background-position of main slide image to center top + +- Bug fix: bug in interpreting the css fixed +- Bug fix: fixed a bug that occures on some video layers and that may brake the edit slide page +- Bug fix: fixed a bug with Post Sliders not being shown with the template Slider styles + + +version 4.0.2: + +- Bug fix: WPML was not working correctly, fixed "Wrong Request" bug + + +version 4.0.1: + +- Change: add revision to css/js files to prevent caching issues + + +version 4.0: + +- Introducing: New Live Style Editor (Simple and Advanced) +- Introducing: Custom Caption Creator +- Introducing: Live Caption Animation Viewer in Editor +- Introducing: Export Feature (with Images and Static/Dynamic Styles and with Custom Animations) +- Introducing: New Main Image Aligns, Repeating and Sizing (like center,center, repeat-x,y,no, cover and container and many more) +- Introducing: New Layout Viewer ( to see differences between, fullwidth, fullscreen, custom) + + +- Feature: Only Styles are loaded which used in Current Slides +- Feature: template slider for post slider added +- Feature: allow external images as slide backgrounds +- Feature: new options for videos +- Feature: many other new options added +- Feature: added relpace url's neer export / import slider +- Feature: new options for hiding thumbs/bullets/arrows on mobile +- Feature: new option force fill width in autoresponsive mode +- Feature: id, class, rel tag can be set for each element +- Feature: alt tag for images can be set +- Feature: layers can now be locked +- Feature: layer images can now be resized +- Feature: Added new Flat Transitions +- Feature: Added FullScreen and FullWidth Forcing in Boxed Themes +- Feature: Added Thumbnail for Videos +- Feature: Tooltip for Titles +- Feature: Shadow Prelayouts +- Feature: Move Tabs to Change Slide Order +- Feature: Published / Unpublished Slides also Date / Time Dependent +- Feature: Loop and Controlless HTML5 Videos +- Feature: Play Video only First Time, then Hold +- Feature: Linear Resizing of Thumbs +- Feature: Unlimited Containers for Offsetting Fullscreen Height + +- Change: Style of Backend in Flat Style +- Change: Much cleaner interface +- Change: Load Plugins and Revolution Slider splitter, dependent on Other Plugins +- Change: Jquery.themepunch.revolution.min.js loads now in the footer (Optional) +- Change: Main transitions are now listed in flat and premium transitions + +- Bug fix: many small/mayor bug fixes +- Bug fix: added error messages on some situations in slider by post view. +- Bug fix: fixed css bug that made the screens overlap with wordpress error messages +- Bug fix: fixed image positioning in edit layers js file +- Bug fix: fixed images url's output in https websites + +version 3.0.96 + +- bug fix: added validation to slider settings and slide settings. +- bug fix: added nonce check on ajax requests - improved security. + +version 3.0.95 + +- bug fix: fixed some bug in widget class +- bug fix: was problem to save slide with (") sign. Fixed it. + +version 3.0.94 + +- bug fix: fixed jquery ui css compatability + +version 3.0.93 + +- bug fix: fixed jquery ui compatability and FireFox Issues + +version 3.0.92 + +- feature: tooltips now have an i icon for better recognition +- feature: slide tabs can now be dragged, to change the order of them, in the slide edit interface +- feature: slide tabs have now the title as name for better identification +- feature: two new fields to publish/show slides only between a interval +- bug fix: grid list shows up correctly now on slider creation +- bug fix: change youtube dialog api url to https. It was not shown in https websites. + +version 3.0.91 + +- feature: added language filter for the slides. +- bug fix: get back the hide layer under width option. It was lost in the last update. +- bug fix: disabled the admin validation in the backend +- bug fix: normalized widget output +- bug fix: done some modifications for wordpress 3.6 + +version 3.0.9 + +-bug fix: fixed jquery ui conflict + +version 3.0.8 + +- bug fix: fullwidth Slider disorted Image has been fixed. + +version 3.0.7 + +- bug fix: made some modifications for wp3.6 + +version 3.0.6 + +- bug fix: get back the hide layer under width option. It was lost in the last update. +- feature: added language filter for the slides. +- bug fix: disabled the admin validation in the backend + +version 3.0.5 (28.06.2013) + +- bug fix: mixed the fullwidth video output with the normal video output so the output is now the same + +version 3.0.4 (26.06.2013) + +-bug fix: Video Does not Auto Start after 2nd Loop. +-bug fix: import slider buttons didn't worked when no slider created +-bug fix: removed validate admin permissions function from base_admin +-bug fix: fixed some color picker setting bug when the textbox was empty. + +version 3.0.3 (25.06.2013) + +- bug fix: fixed "include js globally" default value again +- bug fix: fixed strict mysql in inserting global settings. + +version 3.0.2 (25.06.2013) + +- cahnge: fullwidth Video goes in real Fullwidth also at FullWidth (AutoResponse Sliders) +- change: made option: add js and css includes globally default: on +- bug fix: fixed video dialog vimeo section + +version 3.0.1 (24.06.2013) + +-bug fix: fixed import slider button from slider view + +version 3.0 (24.06.2013) + +- feature: added option to include the client side js and css files only when the shortcode or widget exists. +- feature: added general settings dialog +- feature: make the menu role to be setup from the general settings dialog +- feature: made language strings that can be translated for various of languages. +- feature: Added Horizontal and Vertical Aligns (top,center,bottom, left,center,right) for Captions +- feature: Shadow now available also in fullwidth mode. +- improvement: make available to search by youtube and vimeo url and not only by id in the video dialog. +- change: added "edit slider" button in sliders view for avoid confusement. +- change: added background-size: cover to layers editor window for convering small size images. +- bug fix: removed stretching in slides view +- feature: added option to add new transparent slide in slides view +- feature: added option to add multiple slides from images in slides view +- optimization: begin using wordpress image thumbs in slide view. increase speed loading. +- feature: added option to copy / move slide to another slider +- feature: Added Lazy Loading function (see Example Lazy Load) +- feature: Navigation Position Anywhere also in FullWidht Mode, even outside the Container +- feature: Added HTML5 Video (videoJS) +- feature: Added video option to all videos: go to next slide on video end +- change: removed plugins js file, left only one js file include +- feature: Added FullScreen slider mode function +- bug fix: Fixed Transition issues with timing and layout. Fullwidth transitions are going to stay in box, and timed well +- bug fix: when only one slide exist, and randomrotate animation spped is larger then in animation it broke the caption. Fix is added now. +- feature: added Fullscreen Offset Container option fullScreenOffsetContainer:"#header" (i.e. the height of fullscreen slider will be decreased with the height of the #header to fit perfect in the screen !) +- feature: added multi select for the transitions +- feature: added quick links to slides from a slide view +- feature: added sharp corners option to the layers +- feature: added layer property: Responsive Through All Levels +- feature: added layer property: Scroll below slider, added to the slide link section +- feature: done import slider option to sliders view +- feature: jQuery 2.0 and 1.10 Support +- improvement: Changed Caption Animation from jQuery animation against CSS Animations. Imrpoved speed and techink. +- bug fix: Issues at resizing the containers, where captions moved out of the Container +- feature: done video arguments in the video dialog +- change: moved all the video properties to the video dialog +- change: redesigned slide view +- change: moved fullwidth video to slide dialog from slide settings. +- addition: added link to documentation from + +---------------------------------------------------------------------------------------- + + +************************************************ + +version 2.3.92 + +- bug fix: enabled preview of unpublished slide + +version 2.3.91 + +- bug fix: field image not found message removed. + +version 2.3.9 +- bug fix: more then one Slider on the same page influence the Caption Behaviour. Issue is fixed in this release. +- bug fix: safary browser on pc failure on a slider with links. + +version 2.3.8 + +- Added new Function: setting data-x and data-y at simple caption to "center" it will position in each resolution the content of that caption to vertical and/or horizontal to the center +- bug fix: Fullwidth Banner Horizontal Position Failure at aspect ration 1:1 to image ratio has been fixed. + +version 2.3.7 + +- bug fix: fixed IE10 Crash with some Transition + +version 2.3.6 + +- bug fix: fixed bug with the deeplink + +version 2.3.5 + +-feature: deeplink available. i.e. http:/themepunch.revslider.com/index.html#slide1 will link to slide 1. http:/themepunch.revslider.com/index.html#slide3 to slide 3 etc... http:/themepunch.revslider.com/index.html#slide999 will link always to the last slide. + +-bug fix: Loop,amount of loop, and stop at slide was not working well. Issue is fixed in this verison. + +version 2.3.4 + +-bug fix: fixed fullwidthcentering, changed to on + +version 2.3.3 + +- bug fix: craete a table if not created on every call, and not on activate only. +- feature: added "update slider" button to update the slider from zip file. + +version 2.3.2 + +- feature: added error message on backend that show problems in jquery ui + +version 2.3.1 +- bug fix: fixed new media dialog open chooser + +version 2.3 +- feature: added new media uploader of wp 3.5 +- feature: added first slide transition that can be various from the other transitions. +- feature: added startWithSlide option +- feature: added slide background color or transparent slide options +- change: changed option name in navigation type (verticalcentered to solo). +- feature: improved navigation and arrows align and offset options, added saparate options for each elemtn. +- feature: added slide title for better and logical viewing in the list. +- feature: added publish / unpublish slide feature +- feature: added "update image source" feature of the image layer. +- feature: added "preview slide" button from slides list +- bug fix: fade Animation in IE9 had a small rotation. Issue is fixed +- bug fix: AutoPlay Videos in 2nd Loop did not started automatically. Issue is fixed + + +version 2.2.4 +- Bug Fixed: IE9 Odd Rotation effect at animating the slides. Issue is resolved in this version +- Bug Fixed: IE8 Caption does not disappear at fadeout changed. IE8 Filter added again, some cases it can add an odd halo effect at animationg the png images. + +version 2.2.3 + +- bug fix: fixed charset collate in old wp. +- CSS Edit: visiblility:hidden for rev_slider_wrapper ul container, to hide elements at loading. + +version 2.2.2 + +- feature: Event like onbeforeswap, onafterswap and onloaded can be used now. + +version 2.2.1 + +-bug fix: added database table collation on create table. +-bug fix: FF 18 and YT Player issues has been solved. (Black Screen and Not Clickable button) + +version 2.2 +- Supporting jQuery 1.9.x now + +version 2.1.8 +- bug fix: fade effect in IE8 was not animated since ie8 needs static position instead of relative or absolute by fading +- feature: added new api features like revlastslide, revcurrentslide + + +version 2.1.7 +- bug fix: Loading of Content was visible during the Loading sequenze +- feature: added link position: front or back +- bug fix: the google font is loading from the backend if selected +- bug fix: fixed some multisite bugs, made it more compatability for the multisite. +- change: removed the php_resize feature +- change: made 100% compatible with wp multisite + +version 2.1.6 + +- updated the slider for multisite systems. Each blog can create exclusive sliders only. +- Bug Fixed: Link to _blank page crashed the Slider. +- PreLoading Images are not visible any more. + +version 2.1.5 + +- bug fix: fixed some bug with caption hidden under width option + +version 2.1.4 + +- feature: added full width centering for slide image +- bug fix: fixed some full width output bug +- protection: added css protection against ul margin +- protection: improved slider not found by alias error message. +- feature: added put slider on certain pages functionality +- feature: added "pages" field to the slider widget + +version 2.1.3 + +- bug fix: fixed some visual button css bug. + +version 2.1.2 + +- bug fix: fixed the bug with jquery ui autocomplete + +version 2.1.1 + +- bug fix: fixed new bugs with wordpress 3.5 compatability +- changed Style in Editor + +version 2.1 + +- change: changed backend jquery ui version to set the slider work with wordpress 3.5. +- feature: added slider hide under some width option +- feature: added selected captions / all caption hide under some width +- added new option for linktoslide per Main Slide also. data-link need to be set to "slide" and data-linktoslide should be set to the Order Nr. of Slide you want to link +- bug fix: fixed some preview slide issue with slashes +- bug fix: made a switch between old and new jquery ui libraries. The new will be loaded for wp version 3.5+ + +version 2.0.6 + +- bug fix: changes way that layers has been saved. added json stringify. +- addition: added "alt" text to all the images in the output, so the slider could be validated. + +version 2.0.5 + +- Bug Fix: Box Slide Failure +- Big Fix: Caption Out Failure + + +version 2.0.3 + +- feature: added show slider option for user roles (can be set in inc_php/revslider_globals.php) +- feature: added rel=0 to youtube video output. +- protection: added css protection against image margins +- change: return back the captions.css file. It was copied from captions-original.css before. + +version 2.0.2 + +- bug fix: changed the .caption to .tp-caption in slider output. + +version 2.0.1 + +- improvement: made captions.css copied on the fly from caption-original.css to avoid styles loss on update. + +version 2.0 reloaded + +- feature: added codemirror editor +- feature: added "link to slide" option +- protection: changed .caption to .tp-caption styles +- feature: added show / hide slide options for better slide layers editing +- feature: added "caption end" features +- feature: added show / hide layer and global show / hide button +- feature: added "timeline" that show the layer lifetime visually +- feature: added slide preview +- feature: added slider preview from the sliders list and slider view +- feature: added caption link to slide functionality +- feature: added video autoplay option for video captions +- protection: added protection agains output filters, 2 types of it by setting choice. +- change: removed the depth direct editing. The drag & drop is enought +- change: when duplicate layer, the layernow added to end of the sortbox list and not beneath the parent layer. +- feature: added version text to the backend and front end. + + +version 1.5.7 + +- protection: added protection aguenst wpautop filter (html p and br eclosure) +- protection: add video layer iframe protection against global css settings. +- bug fix: fixed not working api issue. Made the revapi variable global. + +version 1.5.6 + +- bug fix: changed the is_home() to is_front_page() function when choose the slider to be on home page only. +- protection: added validations for empty or not numeric slider width and slider height +- protection: added client side protection against double jquery include +- protection: added list-style-type:none in css + +version 1.5.5 + +-feature: added function - put on homepage only in widget area and php putRevSlider function +-feature: added transformZ(0) for Android and Google Chrome to use GPU for Animations. + +version 1.5.4 + +- feature: added function - put js to body - protection against jquery.js after js includes. + +version 1.5.3 + +- change: added some js protections. +- added some php protections + +version 1.5.2 + +- change: made the slider not found error more clear. + +version 1.5.1 + +- Workaround: Isotope CSS3 Transition Conflict solved via an add on in plugin.js +- bug fix: fixed back end caption z-index show +- feature: set accordion in slider settings. +- feature: added slider setting: "arrows always on" +- feature: added slider setting: "timer bar position" +- bug fix: if Container has no height, a start height will be defined vias jQuery to resolve the "slider not visible" issue +- bug fix: IE9 / IE8 FullScreen Link did not worked well. Issue is solved in this update. + +version 1.5 + +----- Front End + Back End +- feature: new animation library (transition.js) has been added +- feature: new transitions added - premium 3D transitions and Custom Transitions. +- feature: shuffle mode shuffle:"on/off" to randomize the list elements at start +- feature: API with function like next, prev, maxslide, pause,resume, show, event handling (event name : revolution.slide.changed data.slideIndex = new slide index) +- feature: added slide transition rotation to slide options. +- feature: added "randomrotate" caption transition +- feature: added slide link target - new or same window +- feature: added 2 more responsive layers (5,6) +- feature: Full Width video support for youtube and vimeo + +- bug fix: ul/li Lists can be added now in Captions +- bug fix: jQuery 1.72 and jQuery 1.8 Compatibility mode is stable now +- bug fix: IE8 Halo Errors has been repaired. (some animation with opacity has only two phase animation now, and some CPU Heavy animation is automatically replaced with simple animations instead in IE8) +- bug fix: if YouTube Player inserted in slide 1 and loadig time takes longer. +- bug fix: transition fade speed settings +- bug fix: fixed ie8 responsive layout + +----Back End Only +- feature: The layers are selected after add +- feature: Added export / import slider functionality + +- bug fix: When add text layer after image layer selected the class was empty. +- bug fix: When click "update video" button on vimeo video, the video could not be found +- bug fix: Video dialog was not searching on values with "space" on the begin or end, done trim. +- bug fix: When inserting button, the html layer style didn't updated right +- bug fix: Fixed some php notices on debug mode on. + + +version 1.4.1 + +- fixed some small bug with "stop slider" functionality + +version 1.4 + +- feature: added "duplicate slider" functionality +- feature: added "stop slider" functionality +- bug fix: fixed duplicate layer js bugs from the previous update +- Feature changed : slidehorizontal and slidevertical will always slide the items left/right or up/down depending on the Navigation direction has been pressed. (basic direction is always to the left and to the top) + +version 1.3.6 + +- feature: added "by depth" and "by time" layer sorting options +- feature: Done duplicate slide +- feature: Done duplicate layer +- change: removed unnessesary option: "full width centering". This options is now set by the slider type +- bug fix: the fullwidth option is not grayed any more +- bug fix: fix the backend sort layers bug (after deleting a layer) + +version 1.3.5 +-bug fix: jQuery Length error by removing slots from screen has been repaired. + +version 1.3.4 +-bug fix: With only One Slide the slider breaks. Bug solved. With only one Slide no Bullets and no Navigation Arrows are visible !! +-bug fix: Change time sortbox disabled clickable event. + +version 1.3.3 + +-feature: added links support to image layer + +version 1.3.2 +-bug fix: Fade transition keeps some trash in the memory +-bug fix: YouTube and Vimeo APIS only loads on Request + +version 1.3.1 +-bug fix: fixed the indexOf js bug + +version 1.3 + +-feature: Added transition duration option to slide options +-feature: Added background image option to slider options +-feature: Vimeo and Youtube API added. Slider Countdown is stopped during the Playback. +-bug fix: Improved js and css including, put it on another hook function. +-bug fix: Some transition could not be skipped as first Slide. Bug is fixed. + +version 1.2.2 + +-bug fix: in multisite tried to create "cache folder" on not existing upload path. + +version 1.2.1 + +-bug fix: fixed the image layer url + +version 1.2 + +- feature: added transitions - random / slidehorizontal / slidevertical +- bug fix: fixed url fetching in js from image import dialog +- bug fix: fixed css styles reload in backend + +version 1.1.5 + +- feature: shortcodes works within html captions +- bug fix: fixed all the image url's without php resizing. Now any image url's can be used, not only from the "wp-content" path. + +version 1.1.4 +- fix for Bootstraps : In case Bootstrap Theme is used, a img full-width:none !important overwrite bootstrap responsivity. + +version 1.1.3 +- fix wordpress content path init. Take from wp core instead hard coded wp-content + +version 1.1.2 +- workaoudn: JS Plugin resize the height of the Holder Container in case no default height has been set +- feature: Random Funktion has been added vor Slide Transitions +- bug fix: jQuery 1.8 Library works now fine + +version 1.1.1 + +- bug fix: added buffering to shortcode output, for avoid double slider output. + +version 1.1 + +-feature: added "insert button" dialog +-fixed some bugs in ie8 + +version 1.0.5 + +-bug fix: fixed responsitive slider type, added initial width and height. + +version 1.0.4 + +- feature: added option to turn on / off jquery noconflict mode + +version 1.0.3 - released 06/08/12 + +- bug fix: add "default value" in insert slide mysql statement. Sometimes it caused error. + +version 1.0.2 + +- bug fix: css Conflicht Fix, removed css Extension +- bug fix: fullwidth option was missing in the output, added this option. + +version 1.0.1 + +- bug fix: added update sortbox time on blur and not only on enter + +version 1.0 - 31.8.2012 + + first release + diff --git a/src/wp-content/plugins/revslider/revslider.php b/src/wp-content/plugins/revslider/revslider.php new file mode 100644 index 0000000..e3d400b --- /dev/null +++ b/src/wp-content/plugins/revslider/revslider.php @@ -0,0 +1,118 @@ +getParam("output_type",""); + switch($outputType){ + case "compress": + $content = str_replace("\n", "", $content); + $content = str_replace("\r", "", $content); + return($content); + break; + case "echo": + echo $content; //bypass the filters + break; + default: + return($content); + break; + } + }else + return($content); //normal output + + } + + add_shortcode( 'rev_slider', 'rev_slider_shortcode' ); + + //add tiny box dropdown menu + $tinybox = new RevSlider_TinyBox(); + + + + if(is_admin()){ //load admin part + require_once $currentFolder."/revslider_admin.php"; + + $productAdmin = new RevSliderAdmin($currentFile); + + }else{ //load front part + + /** + * + * put rev slider on the page. + * the data can be slider ID or slider alias. + */ + function putRevSlider($data,$putIn = ""){ + $operations = new RevOperations(); + $arrValues = $operations->getGeneralSettingsValues(); + $includesGlobally = UniteFunctionsRev::getVal($arrValues, "includes_globally","on"); + $strPutIn = UniteFunctionsRev::getVal($arrValues, "pages_for_includes"); + $isPutIn = RevSliderOutput::isPutIn($strPutIn,true); + + if($isPutIn == false && $includesGlobally == "off"){ + $output = new RevSliderOutput(); + $option1Name = "Include RevSlider libraries globally (all pages/posts)"; + $option2Name = "Pages to include RevSlider libraries"; + $output->putErrorMessage(__("If you want to use the PHP function \"putRevSlider\" in your code please make sure to check \" ",REVSLIDER_TEXTDOMAIN).$option1Name.__(" \" in the backend's \"General Settings\" (top right panel).

            Or add the current page to the \"",REVSLIDER_TEXTDOMAIN).$option2Name.__("\" option box.")); + return(false); + } + + RevSliderOutput::putSlider($data,$putIn); + } + + require_once $currentFolder."/revslider_front.php"; + $productFront = new RevSliderFront($currentFile); + } + + +}catch(Exception $e){ + $message = $e->getMessage(); + $trace = $e->getTraceAsString(); + echo _e("Revolution Slider Error:",REVSLIDER_TEXTDOMAIN)."".$message.""; +} diff --git a/src/wp-content/plugins/revslider/revslider_admin.php b/src/wp-content/plugins/revslider/revslider_admin.php new file mode 100644 index 0000000..5649e20 --- /dev/null +++ b/src/wp-content/plugins/revslider/revslider_admin.php @@ -0,0 +1,597 @@ +init(); + } + + + /** + * + * init all actions + */ + private function init(){ + + //$this->checkCopyCaptionsCSS(); + + //self::setDebugMode(); + + self::createDBTables(); + + //include general settings + self::requireSettings("general_settings"); + + //set role + $generalSettings = self::getSettings("general"); + $role = $generalSettings->getSettingValue("role",UniteBaseAdminClassRev::ROLE_ADMIN); + + self::setMenuRole($role); + + self::addMenuPage('Revolution Slider', "adminPages"); + + + $this->addSliderMetaBox('post'); + + //add common scripts there + //self::addAction(self::ACTION_ADMIN_INIT, "onAdminInit"); + + //ajax response to save slider options. + self::addActionAjax("ajax_action", "onAjaxAction"); + + } + + + /** + * + * add wildcards metabox variables to posts + */ + private function addSliderMetaBox($postTypes = null){ //null = all, post = only posts + try{ + $settings = RevOperations::getWildcardsSettings(); + + self::addMetaBox("Revolution Slider Options",$settings,array("RevSliderAdmin","customPostFieldsOutput"),$postTypes); + }catch(Exception $e){ + + } + } + + + /** + * custom output function + */ + public static function customPostFieldsOutput(UniteSettingsProductSidebarRev $output){ + + //$settings = $output->getArrSettingNames(); + + ?> +
              + drawSettingsByNames("slide_template"); + ?> +
            + captions-original.css to captions.css in plugins/revslider/rs-plugin/css folder. Please try to copy the file by hand or turn to support."); + } + + } + + + /** + * + * a must function. adds scripts on the page + * add all page scripts and styles here. + * pelase don't remove this function + * common scripts even if the plugin not load, use this function only if no choise. + */ + public static function onAddScripts(){ + self::addStyle("edit_layers","edit_layers"); + + //add google font + //$urlGoogleFont = "http://fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700"; + //self::addStyleAbsoluteUrl($urlGoogleFont,"google-font-pt-sans-narrow"); + + self::addScriptCommon("edit_layers","unite_layers"); + self::addScriptCommon("css_editor","unite_css_editor"); + self::addScript("rev_admin"); + + //include all media upload scripts + self::addMediaUploadIncludes(); + + //add rs css: + self::addStyle("settings","rs-plugin-settings","rs-plugin/css"); + //if(is_admin()){ + self::addDynamicStyle("captions","rs-plugin-captions","rs-plugin/css"); + /*}else{ + self::addStyle("dynamic-captions","rs-plugin-captions","rs-plugin/css"); + }*/ + self::addStyle("static-captions","rs-plugin-static","rs-plugin/css"); + + } + + + /** + * + * admin main page function. + */ + public static function adminPages(){ + + parent::adminPages(); + + //require styles by view + switch(self::$view){ + case self::VIEW_SLIDERS: + case self::VIEW_SLIDER: + case self::VIEW_SLIDER_TEMPLATE: + self::requireSettings("slider_settings"); + break; + case self::VIEW_SLIDES: + break; + case self::VIEW_SLIDE: + break; + } + + self::setMasterView("master_view"); + self::requireView(self::$view); + } + + + + /** + * + * craete tables + */ + public static function createTable($tableName){ + global $wpdb; + + $parseCssToDb = false; + + $checkIfTableExists = $wpdb->get_row("SELECT COUNT(*) AS exist + FROM information_schema.tables + WHERE table_schema = '".DB_NAME."' + AND table_name = '".self::$table_prefix.GlobalsRevSlider::TABLE_CSS_NAME."';"); + if($checkIfTableExists->exist > 0){ + //check if database is empty + $result = $wpdb->get_row("SELECT COUNT( DISTINCT id ) AS NumberOfEntrys FROM ".self::$table_prefix.GlobalsRevSlider::TABLE_CSS_NAME); + if($result->NumberOfEntrys == 0) $parseCssToDb = true; + } + + if($parseCssToDb){ + $revOperations = new RevOperations(); + $revOperations->importCaptionsCssContentArray(); + $revOperations->moveOldCaptionsCss(); + + $revOperations->updateDynamicCaptions(true); + } + + //if table exists - don't create it. + $tableRealName = self::$table_prefix.$tableName; + if(UniteFunctionsWPRev::isDBTableExists($tableRealName)) + return(false); + + $charset_collate = ''; + + if(method_exists($wpdb, "get_charset_collate")) + $charset_collate = $wpdb->get_charset_collate(); + else{ + if ( ! empty($wpdb->charset) ) + $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; + if ( ! empty($wpdb->collate) ) + $charset_collate .= " COLLATE $wpdb->collate"; + } + + switch($tableName){ + case GlobalsRevSlider::TABLE_SLIDERS_NAME: + $sql = "CREATE TABLE " .self::$table_prefix.$tableName ." ( + id int(9) NOT NULL AUTO_INCREMENT, + title tinytext NOT NULL, + alias tinytext, + params text NOT NULL, + PRIMARY KEY (id) + )$charset_collate;"; + break; + case GlobalsRevSlider::TABLE_SLIDES_NAME: + $sql = "CREATE TABLE " .self::$table_prefix.$tableName ." ( + id int(9) NOT NULL AUTO_INCREMENT, + slider_id int(9) NOT NULL, + slide_order int not NULL, + params text NOT NULL, + layers text NOT NULL, + PRIMARY KEY (id) + )$charset_collate;"; + break; + case GlobalsRevSlider::TABLE_SETTINGS_NAME: + $sql = "CREATE TABLE " .self::$table_prefix.$tableName ." ( + id int(9) NOT NULL AUTO_INCREMENT, + general TEXT NOT NULL, + params TEXT NOT NULL, + PRIMARY KEY (id) + )$charset_collate;"; + break; + case GlobalsRevSlider::TABLE_CSS_NAME: + $sql = "CREATE TABLE " .self::$table_prefix.$tableName ." ( + id int(9) NOT NULL AUTO_INCREMENT, + handle TEXT NOT NULL, + settings TEXT, + hover TEXT, + params TEXT NOT NULL, + PRIMARY KEY (id) + )$charset_collate;"; + $parseCssToDb = true; + break; + case GlobalsRevSlider::TABLE_LAYER_ANIMS_NAME: + $sql = "CREATE TABLE " .self::$table_prefix.$tableName ." ( + id int(9) NOT NULL AUTO_INCREMENT, + handle TEXT NOT NULL, + params TEXT NOT NULL, + PRIMARY KEY (id) + )$charset_collate;"; + break; + + default: + UniteFunctionsRev::throwError("table: $tableName not found"); + break; + } + + require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); + dbDelta($sql); + + + if($parseCssToDb){ + $revOperations = new RevOperations(); + $revOperations->importCaptionsCssContentArray(); + $revOperations->moveOldCaptionsCss(); + + $revOperations->updateDynamicCaptions(true); + } + + } + + /** + * + * import slideer handle (not ajax response) + */ + private static function importSliderHandle($viewBack = null, $updateAnim = true, $updateStatic = true){ + + dmp(__("importing slider setings and data...",REVSLIDER_TEXTDOMAIN)); + + $slider = new RevSlider(); + $response = $slider->importSliderFromPost($updateAnim, $updateStatic); + $sliderID = $response["sliderID"]; + + if(empty($viewBack)){ + $viewBack = self::getViewUrl(self::VIEW_SLIDER,"id=".$sliderID); + if(empty($sliderID)) + $viewBack = self::getViewUrl(self::VIEW_SLIDERS); + } + + //handle error + if($response["success"] == false){ + $message = $response["error"]; + dmp("Error: ".$message.""); + echo UniteFunctionsRev::getHtmlLink($viewBack, __("Go Back",REVSLIDER_TEXTDOMAIN)); + } + else{ //handle success, js redirect. + dmp(__("Slider Import Success, redirecting...",REVSLIDER_TEXTDOMAIN)); + echo ""; + } + exit(); + } + + + + /** + * + * onAjax action handler + */ + public static function onAjaxAction(){ + + $slider = new RevSlider(); + $slide = new RevSlide(); + $operations = new RevOperations(); + + $action = self::getPostGetVar("client_action"); + $data = self::getPostGetVar("data"); + $nonce = self::getPostGetVar("nonce"); + + try{ + + //verify the nonce + $isVerified = wp_verify_nonce($nonce, "revslider_actions"); + + if($isVerified == false) + UniteFunctionsRev::throwError("Wrong request"); + + switch($action){ + case "export_slider": + $sliderID = self::getGetVar("sliderid"); + $dummy = self::getGetVar("dummy"); + $slider->initByID($sliderID); + $slider->exportSlider($dummy); + break; + case "import_slider": + $updateAnim = self::getPostGetVar("update_animations"); + $updateStatic = self::getPostGetVar("update_static_captions"); + self::importSliderHandle(null, $updateAnim, $updateStatic); + break; + case "import_slider_slidersview": + $viewBack = self::getViewUrl(self::VIEW_SLIDERS); + $updateAnim = self::getPostGetVar("update_animations"); + $updateStatic = self::getPostGetVar("update_static_captions"); + self::importSliderHandle($viewBack, $updateAnim, $updateStatic); + break; + case "create_slider": + self::requireSettings("slider_settings"); + $settingsMain = self::getSettings("slider_main"); + $settingsParams = self::getSettings("slider_params"); + + $data = $operations->modifyCustomSliderParams($data); + + $newSliderID = $slider->createSliderFromOptions($data,$settingsMain,$settingsParams); + + self::ajaxResponseSuccessRedirect( + __("The slider successfully created",REVSLIDER_TEXTDOMAIN), + self::getViewUrl("sliders")); + + break; + case "update_slider": + self::requireSettings("slider_settings"); + $settingsMain = self::getSettings("slider_main"); + $settingsParams = self::getSettings("slider_params"); + + $data = $operations->modifyCustomSliderParams($data); + + $slider->updateSliderFromOptions($data,$settingsMain,$settingsParams); + self::ajaxResponseSuccess(__("Slider updated",REVSLIDER_TEXTDOMAIN)); + break; + + case "delete_slider": + + $isDeleted = $slider->deleteSliderFromData($data); + + if(is_array($isDeleted)){ + $isDeleted = implode(', ', $isDeleted); + self::ajaxResponseError("Template can't be deleted, it is still being used by the following Sliders: ".$isDeleted); + }else{ + self::ajaxResponseSuccessRedirect( + __("The slider deleted",REVSLIDER_TEXTDOMAIN), + self::getViewUrl(self::VIEW_SLIDERS)); + } + break; + case "duplicate_slider": + + $slider->duplicateSliderFromData($data); + + self::ajaxResponseSuccessRedirect( + __("The duplicate successfully, refreshing page...",REVSLIDER_TEXTDOMAIN), + self::getViewUrl(self::VIEW_SLIDERS)); + break; + case "add_slide": + $numSlides = $slider->createSlideFromData($data); + $sliderID = $data["sliderid"]; + + if($numSlides == 1){ + $responseText = __("Slide Created",REVSLIDER_TEXTDOMAIN); + } + else + $responseText = $numSlides . " ".__("Slides Created",REVSLIDER_TEXTDOMAIN); + + $urlRedirect = self::getViewUrl(self::VIEW_SLIDES,"id=$sliderID"); + self::ajaxResponseSuccessRedirect($responseText,$urlRedirect); + + break; + case "add_slide_fromslideview": + $slideID = $slider->createSlideFromData($data,true); + $urlRedirect = self::getViewUrl(self::VIEW_SLIDE,"id=$slideID"); + $responseText = __("Slide Created, redirecting...",REVSLIDER_TEXTDOMAIN); + self::ajaxResponseSuccessRedirect($responseText,$urlRedirect); + break; + case "update_slide": + require self::getSettingsFilePath("slide_settings"); + + $slide->updateSlideFromData($data,$slideSettings); + self::ajaxResponseSuccess(__("Slide updated",REVSLIDER_TEXTDOMAIN)); + break; + case "delete_slide": + $isPost = $slide->deleteSlideFromData($data); + if($isPost) + $message = __("Post Deleted Successfully",REVSLIDER_TEXTDOMAIN); + else + $message = __("Slide Deleted Successfully",REVSLIDER_TEXTDOMAIN); + + $sliderID = UniteFunctionsRev::getVal($data, "sliderID"); + self::ajaxResponseSuccessRedirect( + $message, self::getViewUrl(self::VIEW_SLIDES,"id=$sliderID")); + + break; + case "duplicate_slide": + $sliderID = $slider->duplicateSlideFromData($data); + self::ajaxResponseSuccessRedirect( + __("Slide Duplicated Successfully",REVSLIDER_TEXTDOMAIN), + self::getViewUrl(self::VIEW_SLIDES,"id=$sliderID")); + break; + case "copy_move_slide": + $sliderID = $slider->copyMoveSlideFromData($data); + + self::ajaxResponseSuccessRedirect( + __("The operation successfully, refreshing page...",REVSLIDER_TEXTDOMAIN), + self::getViewUrl(self::VIEW_SLIDES,"id=$sliderID")); + break; + case "get_static_css": + $contentCSS = $operations->getStaticCss(); + self::ajaxResponseData($contentCSS); + break; + case "get_dynamic_css": + $contentCSS = $operations->getDynamicCss(); + self::ajaxResponseData($contentCSS); + break; + case "insert_captions_css": + $arrCaptions = $operations->insertCaptionsContentData($data); + self::ajaxResponseSuccess(__("CSS saved succesfully!",REVSLIDER_TEXTDOMAIN),array("arrCaptions"=>$arrCaptions)); + break; + case "update_captions_css": + $arrCaptions = $operations->updateCaptionsContentData($data); + self::ajaxResponseSuccess(__("CSS saved succesfully!",REVSLIDER_TEXTDOMAIN),array("arrCaptions"=>$arrCaptions)); + break; + case "delete_captions_css": + $arrCaptions = $operations->deleteCaptionsContentData($data); + self::ajaxResponseSuccess(__("Style deleted succesfully!",REVSLIDER_TEXTDOMAIN),array("arrCaptions"=>$arrCaptions)); + break; + case "update_static_css": + $staticCss = $operations->updateStaticCss($data); + self::ajaxResponseSuccess(__("CSS saved succesfully!",REVSLIDER_TEXTDOMAIN),array("css"=>$staticCss)); + break; + case "insert_custom_anim": + $arrAnims = $operations->insertCustomAnim($data); //$arrCaptions = + self::ajaxResponseSuccess(__("Animation saved succesfully!",REVSLIDER_TEXTDOMAIN), $arrAnims); //,array("arrCaptions"=>$arrCaptions) + break; + case "update_custom_anim": + $arrAnims = $operations->updateCustomAnim($data); + self::ajaxResponseSuccess(__("Animation saved succesfully!",REVSLIDER_TEXTDOMAIN), $arrAnims); //,array("arrCaptions"=>$arrCaptions) + break; + case "delete_custom_anim": + $arrAnims = $operations->deleteCustomAnim($data); + self::ajaxResponseSuccess(__("Animation saved succesfully!",REVSLIDER_TEXTDOMAIN), $arrAnims); //,array("arrCaptions"=>$arrCaptions) + break; + case "update_slides_order": + $slider->updateSlidesOrderFromData($data); + self::ajaxResponseSuccess(__("Order updated successfully",REVSLIDER_TEXTDOMAIN)); + break; + case "change_slide_image": + $slide->updateSlideImageFromData($data); + $sliderID = UniteFunctionsRev::getVal($data, "slider_id"); + self::ajaxResponseSuccessRedirect( + __("Slide Changed Successfully",REVSLIDER_TEXTDOMAIN), + self::getViewUrl(self::VIEW_SLIDES,"id=$sliderID")); + break; + case "preview_slide": + $operations->putSlidePreviewByData($data); + break; + case "preview_slider": + $sliderID = UniteFunctionsRev::getPostGetVariable("sliderid"); + $operations->previewOutput($sliderID); + break; + case "toggle_slide_state": + $currentState = $slide->toggleSlideStatFromData($data); + self::ajaxResponseData(array("state"=>$currentState)); + break; + case "slide_lang_operation": + $responseData = $slide->doSlideLangOperation($data); + self::ajaxResponseData($responseData); + break; + case "update_plugin": + self::updatePlugin(self::DEFAULT_VIEW); + break; + case "update_text": + self::updateSettingsText(); + self::ajaxResponseSuccess(__("All files successfully updated",REVSLIDER_TEXTDOMAIN)); + break; + case "update_general_settings": + $operations->updateGeneralSettings($data); + self::ajaxResponseSuccess(__("General settings updated",REVSLIDER_TEXTDOMAIN)); + break; + case "update_posts_sortby": + $slider->updatePostsSortbyFromData($data); + self::ajaxResponseSuccess(__("Sortby updated",REVSLIDER_TEXTDOMAIN)); + break; + case "replace_image_urls": + $slider->replaceImageUrlsFromData($data); + self::ajaxResponseSuccess(__("Image urls replaced",REVSLIDER_TEXTDOMAIN)); + break; + case "reset_slide_settings": + $slider->resetSlideSettings($data); + self::ajaxResponseSuccess(__("Settings in all Slides changed",REVSLIDER_TEXTDOMAIN)); + break; + + default: + self::ajaxResponseError("wrong ajax action: $action "); + break; + } + + } + catch(Exception $e){ + + $message = $e->getMessage(); + if($action == "preview_slide" || $action == "preview_slider"){ + echo $message; + exit(); + } + + self::ajaxResponseError($message); + } + + //it's an ajax action, so exit + self::ajaxResponseError("No response output on $action action. please check with the developer."); + exit(); + } + + } + + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/revslider_front.php b/src/wp-content/plugins/revslider/revslider_front.php new file mode 100644 index 0000000..77012e2 --- /dev/null +++ b/src/wp-content/plugins/revslider/revslider_front.php @@ -0,0 +1,90 @@ +getGeneralSettingsValues(); + + $includesGlobally = UniteFunctionsRev::getVal($arrValues, "includes_globally","on"); + $includesFooter = UniteFunctionsRev::getVal($arrValues, "js_to_footer","off"); + $strPutIn = UniteFunctionsRev::getVal($arrValues, "pages_for_includes"); + $isPutIn = RevSliderOutput::isPutIn($strPutIn,true); + + //put the includes only on pages with active widget or shortcode + // if the put in match, then include them always (ignore this if) + if($isPutIn == false && $includesGlobally == "off"){ + $isWidgetActive = is_active_widget( false, false, "rev-slider-widget", true ); + $hasShortcode = UniteFunctionsWPRev::hasShortcode("rev_slider"); + + if($isWidgetActive == false && $hasShortcode == false) + return(false); + } + + self::addStyle("settings","rs-settings","rs-plugin/css"); + + //check if dynamic-captions.css exists. If not, include captions.php + if(file_exists(self::$path_plugin."rs-plugin/css/dynamic-captions.css") == false) + self::addDynamicStyle("captions","rs-plugin-captions","rs-plugin/css"); + else + self::addStyle("dynamic-captions","rs-captions","rs-plugin/css"); + + self::addStyle("static-captions","rs-plugin-static","rs-plugin/css"); + + $setBase = (is_ssl()) ? "https://" : "http://"; + + $url_jquery = $setBase."ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js?app=revolution"; + self::addScriptAbsoluteUrl($url_jquery, "jquery"); + + if($includesFooter == "off"){ + self::addScript("jquery.themepunch.plugins.min","rs-plugin/js",'themepunchtools'); + self::addScript("jquery.themepunch.revolution.min","rs-plugin/js"); + //self::addScriptWaitFor("jquery.themepunch.plugins.min","rs-plugin/js",'themepunchtools', array('jquery')); + //self::addScriptWaitFor("jquery.themepunch.revolution.min","rs-plugin/js", null, array('jquery')); + }else{ + //put javascript to footer + UniteBaseClassRev::addAction('wp_footer', 'putJavascript'); + } + } + + /** + * + * javascript output to footer + */ + public function putJavascript(){ + $urlPlugin = UniteBaseClassRev::$url_plugin."rs-plugin/"; + ?> + + + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_large_left.png b/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_large_left.png new file mode 100644 index 0000000..d0e0f42 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_large_left.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_large_right.png b/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_large_right.png new file mode 100644 index 0000000..c1c23e3 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_large_right.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_left.png b/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_left.png new file mode 100644 index 0000000..b71957f Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_left.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_left2.png b/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_left2.png new file mode 100644 index 0000000..b569448 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_left2.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_right.png b/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_right.png new file mode 100644 index 0000000..76f81f5 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_right.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_right2.png b/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_right2.png new file mode 100644 index 0000000..c6a2726 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/arrow_right2.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/arrowleft.png b/src/wp-content/plugins/revslider/rs-plugin/assets/arrowleft.png new file mode 100644 index 0000000..2e7daf8 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/arrowleft.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/arrowright.png b/src/wp-content/plugins/revslider/rs-plugin/assets/arrowright.png new file mode 100644 index 0000000..0702b88 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/arrowright.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/arrows.psd b/src/wp-content/plugins/revslider/rs-plugin/assets/arrows.psd new file mode 100644 index 0000000..ade2810 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/arrows.psd differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/black50.png b/src/wp-content/plugins/revslider/rs-plugin/assets/black50.png new file mode 100644 index 0000000..01e9141 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/black50.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/boxed_bgtile.png b/src/wp-content/plugins/revslider/rs-plugin/assets/boxed_bgtile.png new file mode 100644 index 0000000..7068133 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/boxed_bgtile.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/bullet.png b/src/wp-content/plugins/revslider/rs-plugin/assets/bullet.png new file mode 100644 index 0000000..1203f8a Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/bullet.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/bullet_boxed.png b/src/wp-content/plugins/revslider/rs-plugin/assets/bullet_boxed.png new file mode 100644 index 0000000..7e28118 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/bullet_boxed.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/bullets.png b/src/wp-content/plugins/revslider/rs-plugin/assets/bullets.png new file mode 100644 index 0000000..eca5977 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/bullets.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/bullets.psd b/src/wp-content/plugins/revslider/rs-plugin/assets/bullets.psd new file mode 100644 index 0000000..181523b Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/bullets.psd differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/bullets2.png b/src/wp-content/plugins/revslider/rs-plugin/assets/bullets2.png new file mode 100644 index 0000000..bf3c7f2 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/bullets2.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/coloredbg.png b/src/wp-content/plugins/revslider/rs-plugin/assets/coloredbg.png new file mode 100644 index 0000000..db75b7a Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/coloredbg.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/grain.png b/src/wp-content/plugins/revslider/rs-plugin/assets/grain.png new file mode 100644 index 0000000..d892efe Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/grain.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/gridtile.png b/src/wp-content/plugins/revslider/rs-plugin/assets/gridtile.png new file mode 100644 index 0000000..b07e396 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/gridtile.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/gridtile_3x3.png b/src/wp-content/plugins/revslider/rs-plugin/assets/gridtile_3x3.png new file mode 100644 index 0000000..6f2c31d Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/gridtile_3x3.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/gridtile_3x3_white.png b/src/wp-content/plugins/revslider/rs-plugin/assets/gridtile_3x3_white.png new file mode 100644 index 0000000..a8830fc Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/gridtile_3x3_white.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/gridtile_white.png b/src/wp-content/plugins/revslider/rs-plugin/assets/gridtile_white.png new file mode 100644 index 0000000..7f2599e Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/gridtile_white.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/index.php b/src/wp-content/plugins/revslider/rs-plugin/assets/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/large_left.png b/src/wp-content/plugins/revslider/rs-plugin/assets/large_left.png new file mode 100644 index 0000000..896d084 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/large_left.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/large_right.png b/src/wp-content/plugins/revslider/rs-plugin/assets/large_right.png new file mode 100644 index 0000000..43db6f6 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/large_right.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/loader.gif b/src/wp-content/plugins/revslider/rs-plugin/assets/loader.gif new file mode 100644 index 0000000..53dd589 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/loader.gif differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/loader2.gif b/src/wp-content/plugins/revslider/rs-plugin/assets/loader2.gif new file mode 100644 index 0000000..4ec1dda Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/loader2.gif differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/navigdots.png b/src/wp-content/plugins/revslider/rs-plugin/assets/navigdots.png new file mode 100644 index 0000000..3c0ea2f Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/navigdots.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/navigdots_bgtile.png b/src/wp-content/plugins/revslider/rs-plugin/assets/navigdots_bgtile.png new file mode 100644 index 0000000..84f1c28 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/navigdots_bgtile.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/shadow1.png b/src/wp-content/plugins/revslider/rs-plugin/assets/shadow1.png new file mode 100644 index 0000000..55293a1 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/shadow1.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/shadow2.png b/src/wp-content/plugins/revslider/rs-plugin/assets/shadow2.png new file mode 100644 index 0000000..8d0f298 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/shadow2.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/shadow3.png b/src/wp-content/plugins/revslider/rs-plugin/assets/shadow3.png new file mode 100644 index 0000000..2ceccf8 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/shadow3.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/small_arrows.psd b/src/wp-content/plugins/revslider/rs-plugin/assets/small_arrows.psd new file mode 100644 index 0000000..5a60813 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/small_arrows.psd differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/small_left.png b/src/wp-content/plugins/revslider/rs-plugin/assets/small_left.png new file mode 100644 index 0000000..0fb36a6 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/small_left.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/small_left_boxed.png b/src/wp-content/plugins/revslider/rs-plugin/assets/small_left_boxed.png new file mode 100644 index 0000000..59cd3bc Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/small_left_boxed.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/small_right.png b/src/wp-content/plugins/revslider/rs-plugin/assets/small_right.png new file mode 100644 index 0000000..b83563a Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/small_right.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/small_right_boxed.png b/src/wp-content/plugins/revslider/rs-plugin/assets/small_right_boxed.png new file mode 100644 index 0000000..d89a095 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/small_right_boxed.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/timer.png b/src/wp-content/plugins/revslider/rs-plugin/assets/timer.png new file mode 100644 index 0000000..8e2ee79 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/timer.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/timerdot.png b/src/wp-content/plugins/revslider/rs-plugin/assets/timerdot.png new file mode 100644 index 0000000..0174d3d Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/timerdot.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/transparent.jpg b/src/wp-content/plugins/revslider/rs-plugin/assets/transparent.jpg new file mode 100644 index 0000000..f0e511b Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/transparent.jpg differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/assets/white50.png b/src/wp-content/plugins/revslider/rs-plugin/assets/white50.png new file mode 100644 index 0000000..3242605 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/assets/white50.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/css/captions-original.css b/src/wp-content/plugins/revslider/rs-plugin/css/captions-original.css new file mode 100644 index 0000000..5e1fb54 --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/css/captions-original.css @@ -0,0 +1,650 @@ +.tp-caption.medium_grey { +position:absolute; +color:#fff; +text-shadow:0px 2px 5px rgba(0, 0, 0, 0.5); +font-weight:700; +font-size:20px; +line-height:20px; +font-family:Arial; +padding:2px 4px; +margin:0px; +border-width:0px; +border-style:none; +background-color:#888; +white-space:nowrap; +} + +.tp-caption.small_text { +position:absolute; +color:#fff; +text-shadow:0px 2px 5px rgba(0, 0, 0, 0.5); +font-weight:700; +font-size:14px; +line-height:20px; +font-family:Arial; +margin:0px; +border-width:0px; +border-style:none; +white-space:nowrap; +} + +.tp-caption.medium_text { +position:absolute; +color:#fff; +text-shadow:0px 2px 5px rgba(0, 0, 0, 0.5); +font-weight:700; +font-size:20px; +line-height:20px; +font-family:Arial; +margin:0px; +border-width:0px; +border-style:none; +white-space:nowrap; +} + +.tp-caption.large_text { +position:absolute; +color:#fff; +text-shadow:0px 2px 5px rgba(0, 0, 0, 0.5); +font-weight:700; +font-size:40px; +line-height:40px; +font-family:Arial; +margin:0px; +border-width:0px; +border-style:none; +white-space:nowrap; +} + +.tp-caption.very_large_text { +position:absolute; +color:#fff; +text-shadow:0px 2px 5px rgba(0, 0, 0, 0.5); +font-weight:700; +font-size:60px; +line-height:60px; +font-family:Arial; +margin:0px; +border-width:0px; +border-style:none; +white-space:nowrap; +letter-spacing:-2px; +} + +.tp-caption.very_big_white { +position:absolute; +color:#fff; +text-shadow:none; +font-weight:800; +font-size:60px; +line-height:60px; +font-family:Arial; +margin:0px; +border-width:0px; +border-style:none; +white-space:nowrap; +padding:0px 4px; +padding-top:1px; +background-color:#000; +} + +.tp-caption.very_big_black { +position:absolute; +color:#000; +text-shadow:none; +font-weight:700; +font-size:60px; +line-height:60px; +font-family:Arial; +margin:0px; +border-width:0px; +border-style:none; +white-space:nowrap; +padding:0px 4px; +padding-top:1px; +background-color:#fff; +} + +.tp-caption.modern_medium_fat { +position:absolute; +color:#000; +text-shadow:none; +font-weight:800; +font-size:24px; +line-height:20px; +font-family:"Open Sans", sans-serif; +margin:0px; +border-width:0px; +border-style:none; +white-space:nowrap; +} + +.tp-caption.modern_medium_fat_white { +position:absolute; +color:#fff; +text-shadow:none; +font-weight:800; +font-size:24px; +line-height:20px; +font-family:"Open Sans", sans-serif; +margin:0px; +border-width:0px; +border-style:none; +white-space:nowrap; +} + +.tp-caption.modern_medium_light { +position:absolute; +color:#000; +text-shadow:none; +font-weight:300; +font-size:24px; +line-height:20px; +font-family:"Open Sans", sans-serif; +margin:0px; +border-width:0px; +border-style:none; +white-space:nowrap; +} + +.tp-caption.modern_big_bluebg { +position:absolute; +color:#fff; +text-shadow:none; +font-weight:800; +font-size:30px; +line-height:36px; +font-family:"Open Sans", sans-serif; +padding:3px 10px; +margin:0px; +border-width:0px; +border-style:none; +background-color:#4e5b6c; +letter-spacing:0; +} + +.tp-caption.modern_big_redbg { +position:absolute; +color:#fff; +text-shadow:none; +font-weight:300; +font-size:30px; +line-height:36px; +font-family:"Open Sans", sans-serif; +padding:3px 10px; +padding-top:1px; +margin:0px; +border-width:0px; +border-style:none; +background-color:#de543e; +letter-spacing:0; +} + +.tp-caption.modern_small_text_dark { +position:absolute; +color:#555; +text-shadow:none; +font-size:14px; +line-height:22px; +font-family:Arial; +margin:0px; +border-width:0px; +border-style:none; +white-space:nowrap; +} + +.tp-caption.boxshadow { +-moz-box-shadow:0px 0px 20px rgba(0, 0, 0, 0.5); +-webkit-box-shadow:0px 0px 20px rgba(0, 0, 0, 0.5); +box-shadow:0px 0px 20px rgba(0, 0, 0, 0.5); +} + +.tp-caption.black { +color:#000; +text-shadow:none; +} + +.tp-caption.noshadow { +text-shadow:none; +} + +.tp-caption a { +color:#ff7302; +text-shadow:none; +-webkit-transition:all 0.2s ease-out; +-moz-transition:all 0.2s ease-out; +-o-transition:all 0.2s ease-out; +-ms-transition:all 0.2s ease-out; +} + +.tp-caption a:hover { +color:#ffa902; +} + +.tp-caption.thinheadline_dark { +position:absolute; +color:rgba(0,0,0,0.85); +text-shadow:none; +font-weight:300; +font-size:30px; +line-height:30px; +font-family:"Open Sans"; +background-color:transparent; +} + +.tp-caption.thintext_dark { +position:absolute; +color:rgba(0,0,0,0.85); +text-shadow:none; +font-weight:300; +font-size:16px; +line-height:26px; +font-family:"Open Sans"; +background-color:transparent; +} + +.tp-caption.largeblackbg { +position:absolute; +color:#fff; +text-shadow:none; +font-weight:300; +font-size:50px; +line-height:70px; +font-family:"Open Sans"; +background-color:#000; +padding:0px 20px; +-webkit-border-radius:0px; +-moz-border-radius:0px; +border-radius:0px; +} + +.tp-caption.largepinkbg { +position:absolute; +color:#fff; +text-shadow:none; +font-weight:300; +font-size:50px; +line-height:70px; +font-family:"Open Sans"; +background-color:#db4360; +padding:0px 20px; +-webkit-border-radius:0px; +-moz-border-radius:0px; +border-radius:0px; +} + +.tp-caption.largewhitebg { +position:absolute; +color:#000; +text-shadow:none; +font-weight:300; +font-size:50px; +line-height:70px; +font-family:"Open Sans"; +background-color:#fff; +padding:0px 20px; +-webkit-border-radius:0px; +-moz-border-radius:0px; +border-radius:0px; +} + +.tp-caption.largegreenbg { +position:absolute; +color:#fff; +text-shadow:none; +font-weight:300; +font-size:50px; +line-height:70px; +font-family:"Open Sans"; +background-color:#67ae73; +padding:0px 20px; +-webkit-border-radius:0px; +-moz-border-radius:0px; +border-radius:0px; +} + +.tp-caption.excerpt { +font-size:36px; +line-height:36px; +font-weight:700; +font-family:Arial; +color:#ffffff; +text-decoration:none; +background-color:rgba(0, 0, 0, 1); +text-shadow:none; +margin:0px; +letter-spacing:-1.5px; +padding:1px 4px 0px 4px; +width:150px; +white-space:normal !important; +height:auto; +border-width:0px; +border-color:rgb(255, 255, 255); +border-style:none; +} + +.tp-caption.large_bold_grey { +font-size:60px; +line-height:60px; +font-weight:800; +font-family:"Open Sans"; +color:rgb(102, 102, 102); +text-decoration:none; +background-color:transparent; +text-shadow:none; +margin:0px; +padding:1px 4px 0px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.medium_thin_grey { +font-size:34px; +line-height:30px; +font-weight:300; +font-family:"Open Sans"; +color:rgb(102, 102, 102); +text-decoration:none; +background-color:transparent; +padding:1px 4px 0px; +text-shadow:none; +margin:0px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.small_thin_grey { +font-size:18px; +line-height:26px; +font-weight:300; +font-family:"Open Sans"; +color:rgb(117, 117, 117); +text-decoration:none; +background-color:transparent; +padding:1px 4px 0px; +text-shadow:none; +margin:0px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.lightgrey_divider { +text-decoration:none; +background-color:rgba(235, 235, 235, 1); +width:370px; +height:3px; +background-position:initial initial; +background-repeat:initial initial; +border-width:0px; +border-color:rgb(34, 34, 34); +border-style:none; +} + +.tp-caption.large_bold_darkblue { +font-size:58px; +line-height:60px; +font-weight:800; +font-family:"Open Sans"; +color:rgb(52, 73, 94); +text-decoration:none; +background-color:transparent; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.medium_bg_darkblue { +font-size:20px; +line-height:20px; +font-weight:800; +font-family:"Open Sans"; +color:rgb(255, 255, 255); +text-decoration:none; +background-color:rgb(52, 73, 94); +padding:10px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.medium_bold_red { +font-size:24px; +line-height:30px; +font-weight:800; +font-family:"Open Sans"; +color:rgb(227, 58, 12); +text-decoration:none; +background-color:transparent; +padding:0px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.medium_light_red { +font-size:21px; +line-height:26px; +font-weight:300; +font-family:"Open Sans"; +color:rgb(227, 58, 12); +text-decoration:none; +background-color:transparent; +padding:0px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.medium_bg_red { +font-size:20px; +line-height:20px; +font-weight:800; +font-family:"Open Sans"; +color:rgb(255, 255, 255); +text-decoration:none; +background-color:rgb(227, 58, 12); +padding:10px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.medium_bold_orange { +font-size:24px; +line-height:30px; +font-weight:800; +font-family:"Open Sans"; +color:rgb(243, 156, 18); +text-decoration:none; +background-color:transparent; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.medium_bg_orange { +font-size:20px; +line-height:20px; +font-weight:800; +font-family:"Open Sans"; +color:rgb(255, 255, 255); +text-decoration:none; +background-color:rgb(243, 156, 18); +padding:10px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.grassfloor { +text-decoration:none; +background-color:rgba(160, 179, 151, 1); +width:4000px; +height:150px; +border-width:0px; +border-color:rgb(34, 34, 34); +border-style:none; +} + +.tp-caption.large_bold_white { +font-size:58px; +line-height:60px; +font-weight:800; +font-family:"Open Sans"; +color:rgb(255, 255, 255); +text-decoration:none; +background-color:transparent; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.medium_light_white { +font-size:30px; +line-height:36px; +font-weight:300; +font-family:"Open Sans"; +color:rgb(255, 255, 255); +text-decoration:none; +background-color:transparent; +padding:0px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.mediumlarge_light_white { +font-size:34px; +line-height:40px; +font-weight:300; +font-family:"Open Sans"; +color:rgb(255, 255, 255); +text-decoration:none; +background-color:transparent; +padding:0px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.mediumlarge_light_white_center { +font-size:34px; +line-height:40px; +font-weight:300; +font-family:"Open Sans"; +color:#ffffff; +text-decoration:none; +background-color:transparent; +padding:0px 0px 0px 0px; +text-align:center; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.medium_bg_asbestos { +font-size:20px; +line-height:20px; +font-weight:800; +font-family:"Open Sans"; +color:rgb(255, 255, 255); +text-decoration:none; +background-color:rgb(127, 140, 141); +padding:10px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.medium_light_black { +font-size:30px; +line-height:36px; +font-weight:300; +font-family:"Open Sans"; +color:rgb(0, 0, 0); +text-decoration:none; +background-color:transparent; +padding:0px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.large_bold_black { +font-size:58px; +line-height:60px; +font-weight:800; +font-family:"Open Sans"; +color:rgb(0, 0, 0); +text-decoration:none; +background-color:transparent; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.mediumlarge_light_darkblue { +font-size:34px; +line-height:40px; +font-weight:300; +font-family:"Open Sans"; +color:rgb(52, 73, 94); +text-decoration:none; +background-color:transparent; +padding:0px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.small_light_white { +font-size:17px; +line-height:28px; +font-weight:300; +font-family:"Open Sans"; +color:rgb(255, 255, 255); +text-decoration:none; +background-color:transparent; +padding:0px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.roundedimage { +border-width:0px; +border-color:rgb(34, 34, 34); +border-style:none; +} + +.tp-caption.large_bg_black { +font-size:40px; +line-height:40px; +font-weight:800; +font-family:"Open Sans"; +color:rgb(255, 255, 255); +text-decoration:none; +background-color:rgb(0, 0, 0); +padding:10px 20px 15px; +border-width:0px; +border-color:rgb(255, 214, 88); +border-style:none; +} + +.tp-caption.mediumwhitebg { +font-size:30px; +line-height:30px; +font-weight:300; +font-family:"Open Sans"; +color:rgb(0, 0, 0); +text-decoration:none; +background-color:rgb(255, 255, 255); +padding:5px 15px 10px; +text-shadow:none; +border-width:0px; +border-color:rgb(0, 0, 0); +border-style:none; +} \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/rs-plugin/css/captions.php b/src/wp-content/plugins/revslider/rs-plugin/css/captions.php new file mode 100644 index 0000000..775fedd --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/css/captions.php @@ -0,0 +1,21 @@ +fetch(GlobalsRevSlider::$table_css); + +echo UniteCssParserRev::parseDbArrayToCss($styles, "\n"); + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/rs-plugin/css/dynamic-captions.css b/src/wp-content/plugins/revslider/rs-plugin/css/dynamic-captions.css new file mode 100644 index 0000000..45c1f09 --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/css/dynamic-captions.css @@ -0,0 +1,23 @@ +.tp-caption.avada_block_black { +text-decoration:none; +background-color:rgb(0, 0, 0); +border-width:0px; +border-color:rgb(34, 34, 34); +border-style:none; +} + +.tp-caption.noshadow { +text-shadow:none; +} + +.tp-caption.portada_h1 { +text-decoration:none; +background-color:transparent; +font-family:"Roboto"; +font-transform:uppercase; +color:#ffffff; +border-width:0px; +border-color:rgb(34, 34, 34); +border-style:none; +} + diff --git a/src/wp-content/plugins/revslider/rs-plugin/css/index.php b/src/wp-content/plugins/revslider/rs-plugin/css/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/rs-plugin/css/settings.css b/src/wp-content/plugins/revslider/rs-plugin/css/settings.css new file mode 100644 index 0000000..d876402 --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/css/settings.css @@ -0,0 +1,708 @@ +/*----------------------------------------------------------------------------- + + - Revolution Slider 4.1 Captions - + + Screen Stylesheet + +version: 1.4.5 +date: 27/11/13 +author: themepunch +email: info@themepunch.com +website: http://www.themepunch.com +-----------------------------------------------------------------------------*/ + + +@font-face { + font-family: 'revicons'; + src: url('../font/revicons.eot?5510888'); + src: url('../font/revicons.eot?5510888#iefix') format('embedded-opentype'), + url('../font/revicons.woff?5510888') format('woff'), + url('../font/revicons.ttf?5510888') format('truetype'), + url('../font/revicons.svg?5510888#revicons') format('svg'); + font-weight: normal; + font-style: normal; +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'revicons'; + src: url('../font/revicons.svg?5510888#revicons') format('svg'); + } +} +*/ + + [class^="revicon-"]:before, [class*=" revicon-"]:before { + font-family: "revicons"; + font-style: normal; + font-weight: normal; + speak: none; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} + +.revicon-search-1:before { content: '\e802'; } /* '' */ +.revicon-pencil-1:before { content: '\e831'; } /* '' */ +.revicon-picture-1:before { content: '\e803'; } /* '' */ +.revicon-cancel:before { content: '\e80a'; } /* '' */ +.revicon-info-circled:before { content: '\e80f'; } /* '' */ +.revicon-trash:before { content: '\e801'; } /* '' */ +.revicon-left-dir:before { content: '\e817'; } /* '' */ +.revicon-right-dir:before { content: '\e818'; } /* '' */ +.revicon-down-open:before { content: '\e83b'; } /* '' */ +.revicon-left-open:before { content: '\e819'; } /* '' */ +.revicon-right-open:before { content: '\e81a'; } /* '' */ +.revicon-angle-left:before { content: '\e820'; } /* '' */ +.revicon-angle-right:before { content: '\e81d'; } /* '' */ +.revicon-left-big:before { content: '\e81f'; } /* '' */ +.revicon-right-big:before { content: '\e81e'; } /* '' */ +.revicon-magic:before { content: '\e807'; } /* '' */ +.revicon-picture:before { content: '\e800'; } /* '' */ +.revicon-export:before { content: '\e80b'; } /* '' */ +.revicon-cog:before { content: '\e832'; } /* '' */ +.revicon-login:before { content: '\e833'; } /* '' */ +.revicon-logout:before { content: '\e834'; } /* '' */ +.revicon-video:before { content: '\e805'; } /* '' */ +.revicon-arrow-combo:before { content: '\e827'; } /* '' */ +.revicon-left-open-1:before { content: '\e82a'; } /* '' */ +.revicon-right-open-1:before { content: '\e82b'; } /* '' */ +.revicon-left-open-mini:before { content: '\e822'; } /* '' */ +.revicon-right-open-mini:before { content: '\e823'; } /* '' */ +.revicon-left-open-big:before { content: '\e824'; } /* '' */ +.revicon-right-open-big:before { content: '\e825'; } /* '' */ +.revicon-left:before { content: '\e836'; } /* '' */ +.revicon-right:before { content: '\e826'; } /* '' */ +.revicon-ccw:before { content: '\e808'; } /* '' */ +.revicon-arrows-ccw:before { content: '\e806'; } /* '' */ +.revicon-palette:before { content: '\e829'; } /* '' */ +.revicon-list-add:before { content: '\e80c'; } /* '' */ +.revicon-doc:before { content: '\e809'; } /* '' */ +.revicon-left-open-outline:before { content: '\e82e'; } /* '' */ +.revicon-left-open-2:before { content: '\e82c'; } /* '' */ +.revicon-right-open-outline:before { content: '\e82f'; } /* '' */ +.revicon-right-open-2:before { content: '\e82d'; } /* '' */ +.revicon-equalizer:before { content: '\e83a'; } /* '' */ +.revicon-layers-alt:before { content: '\e804'; } /* '' */ +.revicon-popup:before { content: '\e828'; } /* '' */ + + +/********************************* + - SPECIAL TP CAPTIONS - +**********************************/ +.tp-caption .frontcorner { + width: 0; + height: 0; + border-left: 40px solid transparent; + border-right: 0px solid transparent; + border-top: 40px solid #00A8FF; + position: absolute;left:-40px;top:0px; + } + +.tp-caption .backcorner { + width: 0; + height: 0; + border-left: 0px solid transparent; + border-right: 40px solid transparent; + border-bottom: 40px solid #00A8FF; + position: absolute;right:0px;top:0px; + } + +.tp-caption .frontcornertop { + width: 0; + height: 0; + border-left: 40px solid transparent; + border-right: 0px solid transparent; + border-bottom: 40px solid #00A8FF; + position: absolute;left:-40px;top:0px; + } + +.tp-caption .backcornertop { + width: 0; + height: 0; + border-left: 0px solid transparent; + border-right: 40px solid transparent; + border-top: 40px solid #00A8FF; + position: absolute;right:0px;top:0px; + } + +/****************************** + - WRAPPER STYLES - +******************************/ + + + +.rev_slider_wrapper{ + position:relative; +} + +.rev_slider_wrapper >ul { + visibility:hidden; +} + +.rev_slider{ + position:relative; + overflow:visible; +} + + +.rev_slider img{ + max-width:none !important; + -moz-transition: none 0; + -webkit-transition: none 0; + -o-transition: none 0; + transition: none 0; + margin:0px; + padding:0px; + border-width:0px; + border:none; + visibility:visible !important; +} + +.rev_slider .no-slides-text{ + font-weight:bold; + text-align:center; + padding-top:80px; +} + +.rev_slider ul{ + margin:0px; + padding:0px; + list-style: none !important; + list-style-type: none; + background-position:0px 0px; +} + +.rev_slider ul li, +.rev_slider >ul >li, +.rev_slider >ul >li:before{ + + list-style:none !important; + position:absolute; + visibility:hidden; + margin:0px !important; + padding:0px !important; + overflow-x: visible; + overflow-y: visible; + list-style-type: none !important; + background-image:none; + background-position:0px 0px; + text-indent: 0em; +} + +.rev_slider .tp-caption, +.rev_slider .caption, { position:absolute; visibility: hidden; } + +.tp-simpleresponsive img { max-width:none;} + +/* ADDED FOR SLIDELINK MANAGEMENT */ +.tp-caption { z-index:1;} + + + +.tp_inner_padding { box-sizing:border-box; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + max-height:none !important; } + + +.tp-hide-revslider,.tp-caption.tp-hidden-caption { visibility:hidden !important; display:none !important;} + +.rev_slider embed, +.rev_slider iframe, +.rev_slider object, +.rev_slider video {max-width: none !important;} + +/****************************** + - WRAPPER STYLES END - +******************************/ + +/****************************** + - IE8 HACKS - +*******************************/ +.noFilterClass { + filter:none !important; +} +/****************************** + - IE8 HACKS ENDS - +*******************************/ + +/******************************** + - FULLSCREEN VIDEO - +*********************************/ +.caption.fullscreenvideo { left:0px; top:0px; position:absolute;width:100%;height:100%;} +.caption.fullscreenvideo iframe, +.caption.fullscreenvideo video { width:100% !important; height:100% !important; display: none} + +.tp-caption.fullscreenvideo { left:0px; top:0px; position:absolute;width:100%;height:100%;} +.tp-caption.fullscreenvideo iframe, +.tp-caption.fullscreenvideo iframe video { width:100% !important; height:100% !important; display: none;} + + +.fullscreenvideo .vjs-loading-spinner { visibility:none;display:none !important; width:0px;height:0px;} +.fullscreenvideo .vjs-control-bar.vjs-fade-out, +.fullscreenvideo .vjs-control-bar.vjs-fade-in, +.fullscreenvideo .vjs-control-bar.vjs-fade-out.vjs-lock-showing, +.fullscreenvideo .vjs-control-bar.vjs-fade-in.vjs-lock-showing { visibility: hidden !important; opacity: 0 !important;display:none !important;width:0px;height:0px;overflow: hidden;} + +.fullcoveredvideo.video-js, +.fullcoveredvideo video { background: transparent !important;} + +.fullcoveredvideo .vjs-poster { background-position: center center;background-size: cover;width:100%;height:100%;top:0px;left:0px;} + + +/******************************** + - FULLSCREEN VIDEO ENDS - +*********************************/ + + + +/******************************** + - DOTTED OVERLAYS - +*********************************/ +.tp-dottedoverlay { background-repeat:repeat;width:100%;height:100%;position:absolute;top:0px;left:0px;z-index:1;} +.tp-dottedoverlay.twoxtwo { background:url(../assets/gridtile.png)} +.tp-dottedoverlay.twoxtwowhite { background:url(../assets/gridtile_white.png)} +.tp-dottedoverlay.threexthree { background:url(../assets/gridtile_3x3.png)} +.tp-dottedoverlay.threexthreewhite { background:url(../assets/gridtile_3x3_white.png)} +/******************************** + - DOTTED OVERLAYS ENDS - +*********************************/ + + + +/********************************************** + - FULLSCREEN AND FULLWIDHT CONTAINERS - +**********************************************/ + +.fullscreen-container { + width:100%; + position:relative; + padding:0; +} + + + +.fullwidthbanner-container{ + width:100%; + position:relative; + padding:0; + overflow:hidden; +} + +.fullwidthbanner-container .fullwidthabanner{ + width:100%; + position:relative; +} + + +/**************************************************************** + + - SET THE ANIMATION EVEN MORE SMOOTHER ON ANDROID - + +******************************************************************/ + +.tp-simpleresponsive .slotholder *, +.tp-simpleresponsive img { /*-webkit-transform: translateZ(0); + -webkit-backface-visibility: hidden; + -webkit-perspective: 1000;*/ + } + + +/************************************************ + - SOME CAPTION MODIFICATION AT START - +*************************************************/ +.tp-simpleresponsive .caption, +.tp-simpleresponsive .tp-caption { + /*-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; -moz-opacity: 0; -khtml-opacity: 0; opacity: 0; */ + position:absolute; + -webkit-font-smoothing: antialiased !important; +} + + +/****************************** + - SHADOWS - +******************************/ +.tp-bannershadow { + position:absolute; + + margin-left:auto; + margin-right:auto; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + } + +.tp-bannershadow.tp-shadow1 { background:url(../assets/shadow1.png) no-repeat; background-size:100% 100%; width:890px; height:30px; bottom:-30px;} +.tp-bannershadow.tp-shadow2 { background:url(../assets/shadow2.png) no-repeat; background-size:100% 100%; width:890px; height:60px;bottom:-60px;} +.tp-bannershadow.tp-shadow3 { background:url(../assets/shadow3.png) no-repeat; background-size:100% 100%; width:890px; height:60px;bottom:-60px;} + + +/****************************** + - BUTTONS - +*******************************/ + +.tp-button{ + padding:6px 13px 5px; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + height:30px; + cursor:pointer; + color:#fff !important; text-shadow:0px 1px 1px rgba(0, 0, 0, 0.6) !important; font-size:15px; line-height:45px !important; + background:url(../images/gradient/g30.png) repeat-x top; font-family: arial, sans-serif; font-weight: bold; letter-spacing: -1px; + text-decoration:none; + } + +.tp-button.big { color:#fff; text-shadow:0px 1px 1px rgba(0, 0, 0, 0.6); font-weight:bold; padding:9px 20px; font-size:19px; line-height:57px !important; background:url(../images/gradient/g40.png) repeat-x top;} + + +.purchase:hover, +.tp-button:hover, +.tp-button.big:hover { background-position:bottom, 15px 11px;} + + + @media only screen and (min-width: 480px) and (max-width: 767px) { + .tp-button { padding:4px 8px 3px; line-height:25px !important; font-size:11px !important;font-weight:normal; } + a.tp-button { -webkit-transition: none; -moz-transition: none; -o-transition: none; -ms-transition: none; } + } + + @media only screen and (min-width: 0px) and (max-width: 479px) { + .tp-button { padding:2px 5px 2px; line-height:20px !important; font-size:10px !important;} + a.tp-button { -webkit-transition: none; -moz-transition: none; -o-transition: none; -ms-transition: none; } + } + + +/* BUTTON COLORS */ + +.tp-button.green, .tp-button:hover.green, +.purchase.green, .purchase:hover.green { background-color:#21a117; -webkit-box-shadow: 0px 3px 0px 0px #104d0b; -moz-box-shadow: 0px 3px 0px 0px #104d0b; box-shadow: 0px 3px 0px 0px #104d0b; } + + +.tp-button.blue, .tp-button:hover.blue, +.purchase.blue, .purchase:hover.blue { background-color:#1d78cb; -webkit-box-shadow: 0px 3px 0px 0px #0f3e68; -moz-box-shadow: 0px 3px 0px 0px #0f3e68; box-shadow: 0px 3px 0px 0px #0f3e68;} + + +.tp-button.red, .tp-button:hover.red, +.purchase.red, .purchase:hover.red { background-color:#cb1d1d; -webkit-box-shadow: 0px 3px 0px 0px #7c1212; -moz-box-shadow: 0px 3px 0px 0px #7c1212; box-shadow: 0px 3px 0px 0px #7c1212;} + +.tp-button.orange, .tp-button:hover.orange, +.purchase.orange, .purchase:hover.orange { background-color:#ff7700; -webkit-box-shadow: 0px 3px 0px 0px #a34c00; -moz-box-shadow: 0px 3px 0px 0px #a34c00; box-shadow: 0px 3px 0px 0px #a34c00;} + +.tp-button.darkgrey,.tp-button.grey, +.tp-button:hover.darkgrey,.tp-button:hover.grey, +.purchase.darkgrey, .purchase:hover.darkgrey { background-color:#555; -webkit-box-shadow: 0px 3px 0px 0px #222; -moz-box-shadow: 0px 3px 0px 0px #222; box-shadow: 0px 3px 0px 0px #222;} + +.tp-button.lightgrey, .tp-button:hover.lightgrey, +.purchase.lightgrey, .purchase:hover.lightgrey { background-color:#888; -webkit-box-shadow: 0px 3px 0px 0px #555; -moz-box-shadow: 0px 3px 0px 0px #555; box-shadow: 0px 3px 0px 0px #555;} + + + +/************************ + - NAVIGATION - +*************************/ + +/** BULLETS **/ + +.tpclear { clear:both;} + + +.tp-bullets { z-index:1000; position:absolute; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; + -webkit-transition: opacity 0.2s ease-out; -moz-transition: opacity 0.2s ease-out; -o-transition: opacity 0.2s ease-out; -ms-transition: opacity 0.2s ease-out; + -webkit-transform: translateZ(5px); + } +.tp-bullets.hidebullets { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + -moz-opacity: 0; + -khtml-opacity: 0; + opacity: 0; + } + + +.tp-bullets.simplebullets.navbar { border:1px solid #666; border-bottom:1px solid #444; background:url(../assets/boxed_bgtile.png); height:40px; padding:0px 10px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px ;} + +.tp-bullets.simplebullets.navbar-old { background:url(../assets/navigdots_bgtile.png); height:35px; padding:0px 10px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px ;} + + +.tp-bullets.simplebullets.round .bullet { cursor:pointer; position:relative; background:url(../assets/bullet.png) no-repeat top left; width:20px; height:20px; margin-right:0px; float:left; margin-top:0px; margin-left:3px;} +.tp-bullets.simplebullets.round .bullet.last { margin-right:3px;} + +.tp-bullets.simplebullets.round-old .bullet { cursor:pointer; position:relative; background:url(../assets/bullets.png) no-repeat bottom left; width:23px; height:23px; margin-right:0px; float:left; margin-top:0px;} +.tp-bullets.simplebullets.round-old .bullet.last { margin-right:0px;} + + +/** SQUARE BULLETS **/ +.tp-bullets.simplebullets.square .bullet { cursor:pointer; position:relative; background:url(../assets/bullets2.png) no-repeat bottom left; width:19px; height:19px; margin-right:0px; float:left; margin-top:0px;} +.tp-bullets.simplebullets.square .bullet.last { margin-right:0px;} + + +/** SQUARE BULLETS **/ +.tp-bullets.simplebullets.square-old .bullet { cursor:pointer; position:relative; background:url(../assets/bullets2.png) no-repeat bottom left; width:19px; height:19px; margin-right:0px; float:left; margin-top:0px;} +.tp-bullets.simplebullets.square-old .bullet.last { margin-right:0px;} + + +/** navbar NAVIGATION VERSION **/ +.tp-bullets.simplebullets.navbar .bullet { cursor:pointer; position:relative; background:url(../assets/bullet_boxed.png) no-repeat top left; width:18px; height:19px; margin-right:5px; float:left; margin-top:10px;} + +.tp-bullets.simplebullets.navbar .bullet.first { margin-left:0px !important;} +.tp-bullets.simplebullets.navbar .bullet.last { margin-right:0px !important;} + + + +/** navbar NAVIGATION VERSION **/ +.tp-bullets.simplebullets.navbar-old .bullet { cursor:pointer; position:relative; background:url(../assets/navigdots.png) no-repeat bottom left; width:15px; height:15px; margin-left:5px !important; margin-right:5px !important;float:left; margin-top:10px;} +.tp-bullets.simplebullets.navbar-old .bullet.first { margin-left:0px !important;} +.tp-bullets.simplebullets.navbar-old .bullet.last { margin-right:0px !important;} + + +.tp-bullets.simplebullets .bullet:hover, +.tp-bullets.simplebullets .bullet.selected { background-position:top left; } + +.tp-bullets.simplebullets.round .bullet:hover, +.tp-bullets.simplebullets.round .bullet.selected, +.tp-bullets.simplebullets.navbar .bullet:hover, +.tp-bullets.simplebullets.navbar .bullet.selected { background-position:bottom left; } + + + +/************************************* + - TP ARROWS - +**************************************/ +.tparrows { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; + -webkit-transition: opacity 0.2s ease-out; -moz-transition: opacity 0.2s ease-out; -o-transition: opacity 0.2s ease-out; -ms-transition: opacity 0.2s ease-out; + -webkit-transform: translateZ(5px); + + } +.tparrows.hidearrows { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + -moz-opacity: 0; + -khtml-opacity: 0; + opacity: 0; + } +.tp-leftarrow { z-index:100;cursor:pointer; position:relative; background:url(../assets/large_left.png) no-repeat top left; width:40px; height:40px; } +.tp-rightarrow { z-index:100;cursor:pointer; position:relative; background:url(../assets/large_right.png) no-repeat top left; width:40px; height:40px; } + + +.tp-leftarrow.round { z-index:100;cursor:pointer; position:relative; background:url(../assets/small_left.png) no-repeat top left; width:19px; height:14px; margin-right:0px; float:left; margin-top:0px; } +.tp-rightarrow.round { z-index:100;cursor:pointer; position:relative; background:url(../assets/small_right.png) no-repeat top left; width:19px; height:14px; margin-right:0px; float:left; margin-top:0px;} + + +.tp-leftarrow.round-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_left.png) no-repeat top left; width:26px; height:26px; margin-right:0px; float:left; margin-top:0px; } +.tp-rightarrow.round-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_right.png) no-repeat top left; width:26px; height:26px; margin-right:0px; float:left; margin-top:0px;} + + +.tp-leftarrow.navbar { z-index:100;cursor:pointer; position:relative; background:url(../assets/small_left_boxed.png) no-repeat top left; width:20px; height:15px; float:left; margin-right:6px; margin-top:12px;} +.tp-rightarrow.navbar { z-index:100;cursor:pointer; position:relative; background:url(../assets/small_right_boxed.png) no-repeat top left; width:20px; height:15px; float:left; margin-left:6px; margin-top:12px;} + + +.tp-leftarrow.navbar-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrowleft.png) no-repeat top left; width:9px; height:16px; float:left; margin-right:6px; margin-top:10px;} +.tp-rightarrow.navbar-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrowright.png) no-repeat top left; width:9px; height:16px; float:left; margin-left:6px; margin-top:10px;} + +.tp-leftarrow.navbar-old.thumbswitharrow { margin-right:10px; } +.tp-rightarrow.navbar-old.thumbswitharrow { margin-left:0px; } + +.tp-leftarrow.square { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_left2.png) no-repeat top left; width:12px; height:17px; float:left; margin-right:0px; margin-top:0px;} +.tp-rightarrow.square { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_right2.png) no-repeat top left; width:12px; height:17px; float:left; margin-left:0px; margin-top:0px;} + + +.tp-leftarrow.square-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_left2.png) no-repeat top left; width:12px; height:17px; float:left; margin-right:0px; margin-top:0px;} +.tp-rightarrow.square-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_right2.png) no-repeat top left; width:12px; height:17px; float:left; margin-left:0px; margin-top:0px;} + + +.tp-leftarrow.default { z-index:100;cursor:pointer; position:relative; background:url(../assets/large_left.png) no-repeat 0 0; width:40px; height:40px; + + } +.tp-rightarrow.default { z-index:100;cursor:pointer; position:relative; background:url(../assets/large_right.png) no-repeat 0 0; width:40px; height:40px; + + } + + + + +.tp-leftarrow:hover, +.tp-rightarrow:hover { background-position:bottom left; } + + + + + + +/**************************************************************************************************** + - TP THUMBS - +***************************************************************************************************** + + - tp-thumbs & tp-mask Width is the width of the basic Thumb Container (500px basic settings) + + - .bullet width & height is the dimension of a simple Thumbnail (basic 100px x 50px) + + *****************************************************************************************************/ + + +.tp-bullets.tp-thumbs { z-index:1000; position:absolute; padding:3px;background-color:#fff; + width:500px;height:50px; /* THE DIMENSIONS OF THE THUMB CONTAINER */ + margin-top:-50px; + vertical-align: top; + } +.tp-bullets.tp-thumbs img { vertical-align: top;} + + +.fullwidthbanner-container .tp-thumbs { padding:3px;} + +.tp-bullets.tp-thumbs .tp-mask { width:500px; height:50px; /* THE DIMENSIONS OF THE THUMB CONTAINER */ + overflow:hidden; position:relative;} + + +.tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer { width:5000px; position:absolute;} + +.tp-bullets.tp-thumbs .bullet { width:100px; height:50px; /* THE DIMENSION OF A SINGLE THUMB */ + cursor:pointer; overflow:hidden;background:none;margin:0;float:left; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + /*filter: alpha(opacity=50); */ + -moz-opacity: 0.5; + -khtml-opacity: 0.5; + opacity: 0.5; + + -webkit-transition: all 0.2s ease-out; -moz-transition: all 0.2s ease-out; -o-transition: all 0.2s ease-out; -ms-transition: all 0.2s ease-out; + } + + +.tp-bullets.tp-thumbs .bullet:hover, +.tp-bullets.tp-thumbs .bullet.selected { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; + } +.tp-thumbs img { width:100%; } + + + + +/************************************ + - TP BANNER TIMER - +*************************************/ +.tp-bannertimer { width:100%; height:10px; background:url(../assets/timer.png);position:absolute; z-index:200; top:0px;} +.tp-bannertimer.tp-bottom { top:auto; bottom:0px !important;height:5px;} + + + +/****************************** + - HTML5 VIDEO SETTINGS - +********************************/ + +.vjs-tech { margin-top:1px} + +.tp-caption .vjs-default-skin .vjs-big-play-button { left: 50%; +top: 50%; +margin-left: -20px; +margin-top: -20px; +width: 40px; +height: 40px; +border-radius: 5px; +-moz-border-radius: 5px; +-webkit-border-radius: 5px; +border: none; +box-shadow: none; +text-shadow: none; +line-height: 30px; +vertical-align: top; +padding: 0px; +} + +.tp-caption .vjs-default-skin .vjs-big-play-button:before { + position:absolute; + top:0px; left:0px; + line-height:40px; + text-shadow: none !important; + color:#fff; + font-size:18px; + +} + +.tp-caption .vjs-default-skin:hover .vjs-big-play-button, .vjs-default-skin .vjs-big-play-button:focus { + + box-shadow:none; + -webkit-box-shadow:none; + +} + + +/*************************************** + - RESPONSIVE SETTINGS - +****************************************/ + + + + +/********************************************* + + - BASIC SETTINGS FOR THE BANNER - + +***********************************************/ + + .tp-simpleresponsive img { + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -o-user-select: none; +} + +.tp-caption img { +background: transparent; +-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)"; +filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF); +zoom: 1; +} + + +.tp-simpleresponsive ul { + list-style:none; + padding:0; + margin:0; +} + +.tp-simpleresponsive >ul li{ + list-style:none; + position:absolute; + visibility:hidden; +} + +/* CAPTION SLIDELINK **/ +.caption.slidelink a div, +.tp-caption.slidelink a div { width:3000px; height:1500px; background:url(../assets/coloredbg.png) repeat;} + +.tp-loader { background:url(../assets/loader.gif) no-repeat 10px 10px; background-color:#fff; margin:-22px -22px; top:50%; left:50%; z-index:10000; position:absolute;width:44px;height:44px; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + } diff --git a/src/wp-content/plugins/revslider/rs-plugin/css/static-captions.css b/src/wp-content/plugins/revslider/rs-plugin/css/static-captions.css new file mode 100644 index 0000000..bd7267b --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/css/static-captions.css @@ -0,0 +1,132 @@ +.avada_huge_white_text{ + position: absolute; + color: #ffffff; + font-size: 130px; + line-height: 45px; + font-family: museoslab500regular; + text-shadow: 0px 2px 5px rgba(0, 0, 0, 1); + } + +.avada_huge_black_text{ + position: absolute; + color: #000000; + font-size: 130px; + line-height: 45px; + font-family: museoslab500regular; + } + +.avada_big_black_text{ + position: absolute; + color: #333333; + font-size: 42px; + line-height: 45px; + font-family: museoslab500regular; + } + +.avada_big_white_text{ + position: absolute; + color: #fff; + font-size: 42px; + line-height: 45px; + font-family: museoslab500regular; + } + +.avada_big_black_text_center{ + position: absolute; + color: #333333; + font-size: 38px; + line-height: 45px; + font-family: museoslab500regular; + text-align: center; + } + + +.avada_med_green_text{ + position: absolute; + color: #A0CE4E; + font-size: 24px; + line-height: 24px; + font-family: PTSansRegular, Arial, Helvetica, sans-serif; + } + + +.avada_small_gray_text{ + position: absolute; + color: #747474; + font-size: 13px; + line-height: 20px; + font-family: PTSansRegular, Arial, Helvetica, sans-serif; + } + +.avada_small_white_text{ + position: absolute; + color: #fff; + font-size: 13px; + line-height: 20px; + font-family: PTSansRegular, Arial, Helvetica, sans-serif; + text-shadow: 0px 2px 5px rgba(0, 0, 0, 0.5); + font-weight: 700; + + } + + +.avada_block_black{ + position: absolute; + color: #A0CE4E; + text-shadow: none; + font-size: 22px; + line-height: 34px; + padding: 0px 10px; + padding-top: 1px; + margin: 0px; + border-width: 0px; + border-style: none; + background-color:#000; + font-family: PTSansRegular, Arial, Helvetica, sans-serif; + } + +.avada_block_green{ + position: absolute; + color: #000; + text-shadow: none; + font-size: 22px; + line-height: 34px; + padding: 0px 10px; + padding-top: 1px; + margin: 0px; + border-width: 0px; + border-style: none; + background-color:#A0CE4E; + font-family: PTSansRegular, Arial, Helvetica, sans-serif; + } + +.avada_block_white{ + position: absolute; + color: #fff; + text-shadow: none; + font-size: 22px; + line-height: 34px; + padding: 0px 10px; + padding-top: 1px; + margin: 0px; + border-width: 0px; + border-style: none; + background-color:#000; + font-family: PTSansRegular, Arial, Helvetica, sans-serif; + } + + +.avada_block_white_trans{ + position: absolute; + color: #fff; + text-shadow: none; + font-size: 22px; + line-height: 34px; + padding: 0px 10px; + padding-top: 1px; + margin: 0px; + border-width: 0px; + border-style: none; + background-color:rgba(0, 0, 0, 0.6); + font-family: PTSansRegular, Arial, Helvetica, sans-serif; + } \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/rs-plugin/font/index.php b/src/wp-content/plugins/revslider/rs-plugin/font/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/rs-plugin/font/revicons.eot b/src/wp-content/plugins/revslider/rs-plugin/font/revicons.eot new file mode 100644 index 0000000..955dc3f Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/font/revicons.eot differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/font/revicons.svg b/src/wp-content/plugins/revslider/rs-plugin/font/revicons.svg new file mode 100644 index 0000000..2ec696b --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/font/revicons.svg @@ -0,0 +1,54 @@ + + + +Copyright (C) 2013 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/rs-plugin/font/revicons.ttf b/src/wp-content/plugins/revslider/rs-plugin/font/revicons.ttf new file mode 100644 index 0000000..4e8df98 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/font/revicons.ttf differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/font/revicons.woff b/src/wp-content/plugins/revslider/rs-plugin/font/revicons.woff new file mode 100644 index 0000000..6d3ea4d Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/font/revicons.woff differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/images/decor_inside.png b/src/wp-content/plugins/revslider/rs-plugin/images/decor_inside.png new file mode 100644 index 0000000..02f3321 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/images/decor_inside.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/images/decor_inside_white.png b/src/wp-content/plugins/revslider/rs-plugin/images/decor_inside_white.png new file mode 100644 index 0000000..a3679f1 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/images/decor_inside_white.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/images/decor_testimonial.png b/src/wp-content/plugins/revslider/rs-plugin/images/decor_testimonial.png new file mode 100644 index 0000000..949e564 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/images/decor_testimonial.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/images/gradient/g30.png b/src/wp-content/plugins/revslider/rs-plugin/images/gradient/g30.png new file mode 100644 index 0000000..48595b7 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/images/gradient/g30.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/images/gradient/g40.png b/src/wp-content/plugins/revslider/rs-plugin/images/gradient/g40.png new file mode 100644 index 0000000..d82af00 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/images/gradient/g40.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/images/gradient/index.php b/src/wp-content/plugins/revslider/rs-plugin/images/gradient/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/rs-plugin/images/index.php b/src/wp-content/plugins/revslider/rs-plugin/images/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/rs-plugin/index.php b/src/wp-content/plugins/revslider/rs-plugin/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/rs-plugin/js/index.php b/src/wp-content/plugins/revslider/rs-plugin/js/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/rs-plugin/js/jquery.themepunch.plugins.min.js b/src/wp-content/plugins/revslider/rs-plugin/js/jquery.themepunch.plugins.min.js new file mode 100644 index 0000000..7ee1224 --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/js/jquery.themepunch.plugins.min.js @@ -0,0 +1,51 @@ + + +/******************************************** + - THEMEPUNCH TOOLS Ver. 1.0 - + Last Update of Tools 09.10.2013 +*********************************************/ + +/*! Hammer.JS - v1.0.5 - 2013-04-07 + * http://eightmedia.github.com/hammer.js + * + * Copyright (c) 2013 Jorik Tangelder ; + * Licensed under the MIT license */ + +(function(t,e){"use strict";function n(){if(!i.READY){i.event.determineEventTypes();for(var t in i.gestures)i.gestures.hasOwnProperty(t)&&i.detection.register(i.gestures[t]);i.event.onTouch(i.DOCUMENT,i.EVENT_MOVE,i.detection.detect),i.event.onTouch(i.DOCUMENT,i.EVENT_END,i.detection.detect),i.READY=!0}}var i=function(t,e){return new i.Instance(t,e||{})};i.defaults={stop_browser_behavior:{userSelect:"none",touchAction:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},i.HAS_POINTEREVENTS=navigator.pointerEnabled||navigator.msPointerEnabled,i.HAS_TOUCHEVENTS="ontouchstart"in t,i.MOBILE_REGEX=/mobile|tablet|ip(ad|hone|od)|android/i,i.NO_MOUSEEVENTS=i.HAS_TOUCHEVENTS&&navigator.userAgent.match(i.MOBILE_REGEX),i.EVENT_TYPES={},i.DIRECTION_DOWN="down",i.DIRECTION_LEFT="left",i.DIRECTION_UP="up",i.DIRECTION_RIGHT="right",i.POINTER_MOUSE="mouse",i.POINTER_TOUCH="touch",i.POINTER_PEN="pen",i.EVENT_START="start",i.EVENT_MOVE="move",i.EVENT_END="end",i.DOCUMENT=document,i.plugins={},i.READY=!1,i.Instance=function(t,e){var r=this;return n(),this.element=t,this.enabled=!0,this.options=i.utils.extend(i.utils.extend({},i.defaults),e||{}),this.options.stop_browser_behavior&&i.utils.stopDefaultBrowserBehavior(this.element,this.options.stop_browser_behavior),i.event.onTouch(t,i.EVENT_START,function(t){r.enabled&&i.detection.startDetect(r,t)}),this},i.Instance.prototype={on:function(t,e){for(var n=t.split(" "),i=0;n.length>i;i++)this.element.addEventListener(n[i],e,!1);return this},off:function(t,e){for(var n=t.split(" "),i=0;n.length>i;i++)this.element.removeEventListener(n[i],e,!1);return this},trigger:function(t,e){var n=i.DOCUMENT.createEvent("Event");n.initEvent(t,!0,!0),n.gesture=e;var r=this.element;return i.utils.hasParent(e.target,r)&&(r=e.target),r.dispatchEvent(n),this},enable:function(t){return this.enabled=t,this}};var r=null,o=!1,s=!1;i.event={bindDom:function(t,e,n){for(var i=e.split(" "),r=0;i.length>r;r++)t.addEventListener(i[r],n,!1)},onTouch:function(t,e,n){var a=this;this.bindDom(t,i.EVENT_TYPES[e],function(c){var u=c.type.toLowerCase();if(!u.match(/mouse/)||!s){(u.match(/touch/)||u.match(/pointerdown/)||u.match(/mouse/)&&1===c.which)&&(o=!0),u.match(/touch|pointer/)&&(s=!0);var h=0;o&&(i.HAS_POINTEREVENTS&&e!=i.EVENT_END?h=i.PointerEvent.updatePointer(e,c):u.match(/touch/)?h=c.touches.length:s||(h=u.match(/up/)?0:1),h>0&&e==i.EVENT_END?e=i.EVENT_MOVE:h||(e=i.EVENT_END),h||null===r?r=c:c=r,n.call(i.detection,a.collectEventData(t,e,c)),i.HAS_POINTEREVENTS&&e==i.EVENT_END&&(h=i.PointerEvent.updatePointer(e,c))),h||(r=null,o=!1,s=!1,i.PointerEvent.reset())}})},determineEventTypes:function(){var t;t=i.HAS_POINTEREVENTS?i.PointerEvent.getEvents():i.NO_MOUSEEVENTS?["touchstart","touchmove","touchend touchcancel"]:["touchstart mousedown","touchmove mousemove","touchend touchcancel mouseup"],i.EVENT_TYPES[i.EVENT_START]=t[0],i.EVENT_TYPES[i.EVENT_MOVE]=t[1],i.EVENT_TYPES[i.EVENT_END]=t[2]},getTouchList:function(t){return i.HAS_POINTEREVENTS?i.PointerEvent.getTouchList():t.touches?t.touches:[{identifier:1,pageX:t.pageX,pageY:t.pageY,target:t.target}]},collectEventData:function(t,e,n){var r=this.getTouchList(n,e),o=i.POINTER_TOUCH;return(n.type.match(/mouse/)||i.PointerEvent.matchType(i.POINTER_MOUSE,n))&&(o=i.POINTER_MOUSE),{center:i.utils.getCenter(r),timeStamp:(new Date).getTime(),target:n.target,touches:r,eventType:e,pointerType:o,srcEvent:n,preventDefault:function(){this.srcEvent.preventManipulation&&this.srcEvent.preventManipulation(),this.srcEvent.preventDefault&&this.srcEvent.preventDefault()},stopPropagation:function(){this.srcEvent.stopPropagation()},stopDetect:function(){return i.detection.stopDetect()}}}},i.PointerEvent={pointers:{},getTouchList:function(){var t=this,e=[];return Object.keys(t.pointers).sort().forEach(function(n){e.push(t.pointers[n])}),e},updatePointer:function(t,e){return t==i.EVENT_END?this.pointers={}:(e.identifier=e.pointerId,this.pointers[e.pointerId]=e),Object.keys(this.pointers).length},matchType:function(t,e){if(!e.pointerType)return!1;var n={};return n[i.POINTER_MOUSE]=e.pointerType==e.MSPOINTER_TYPE_MOUSE||e.pointerType==i.POINTER_MOUSE,n[i.POINTER_TOUCH]=e.pointerType==e.MSPOINTER_TYPE_TOUCH||e.pointerType==i.POINTER_TOUCH,n[i.POINTER_PEN]=e.pointerType==e.MSPOINTER_TYPE_PEN||e.pointerType==i.POINTER_PEN,n[t]},getEvents:function(){return["pointerdown MSPointerDown","pointermove MSPointerMove","pointerup pointercancel MSPointerUp MSPointerCancel"]},reset:function(){this.pointers={}}},i.utils={extend:function(t,n,i){for(var r in n)t[r]!==e&&i||(t[r]=n[r]);return t},hasParent:function(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1},getCenter:function(t){for(var e=[],n=[],i=0,r=t.length;r>i;i++)e.push(t[i].pageX),n.push(t[i].pageY);return{pageX:(Math.min.apply(Math,e)+Math.max.apply(Math,e))/2,pageY:(Math.min.apply(Math,n)+Math.max.apply(Math,n))/2}},getVelocity:function(t,e,n){return{x:Math.abs(e/t)||0,y:Math.abs(n/t)||0}},getAngle:function(t,e){var n=e.pageY-t.pageY,i=e.pageX-t.pageX;return 180*Math.atan2(n,i)/Math.PI},getDirection:function(t,e){var n=Math.abs(t.pageX-e.pageX),r=Math.abs(t.pageY-e.pageY);return n>=r?t.pageX-e.pageX>0?i.DIRECTION_LEFT:i.DIRECTION_RIGHT:t.pageY-e.pageY>0?i.DIRECTION_UP:i.DIRECTION_DOWN},getDistance:function(t,e){var n=e.pageX-t.pageX,i=e.pageY-t.pageY;return Math.sqrt(n*n+i*i)},getScale:function(t,e){return t.length>=2&&e.length>=2?this.getDistance(e[0],e[1])/this.getDistance(t[0],t[1]):1},getRotation:function(t,e){return t.length>=2&&e.length>=2?this.getAngle(e[1],e[0])-this.getAngle(t[1],t[0]):0},isVertical:function(t){return t==i.DIRECTION_UP||t==i.DIRECTION_DOWN},stopDefaultBrowserBehavior:function(t,e){var n,i=["webkit","khtml","moz","ms","o",""];if(e&&t.style){for(var r=0;i.length>r;r++)for(var o in e)e.hasOwnProperty(o)&&(n=o,i[r]&&(n=i[r]+n.substring(0,1).toUpperCase()+n.substring(1)),t.style[n]=e[o]);"none"==e.userSelect&&(t.onselectstart=function(){return!1})}}},i.detection={gestures:[],current:null,previous:null,stopped:!1,startDetect:function(t,e){this.current||(this.stopped=!1,this.current={inst:t,startEvent:i.utils.extend({},e),lastEvent:!1,name:""},this.detect(e))},detect:function(t){if(this.current&&!this.stopped){t=this.extendEventData(t);for(var e=this.current.inst.options,n=0,r=this.gestures.length;r>n;n++){var o=this.gestures[n];if(!this.stopped&&e[o.name]!==!1&&o.handler.call(o,t,this.current.inst)===!1){this.stopDetect();break}}return this.current&&(this.current.lastEvent=t),t.eventType==i.EVENT_END&&!t.touches.length-1&&this.stopDetect(),t}},stopDetect:function(){this.previous=i.utils.extend({},this.current),this.current=null,this.stopped=!0},extendEventData:function(t){var e=this.current.startEvent;if(e&&(t.touches.length!=e.touches.length||t.touches===e.touches)){e.touches=[];for(var n=0,r=t.touches.length;r>n;n++)e.touches.push(i.utils.extend({},t.touches[n]))}var o=t.timeStamp-e.timeStamp,s=t.center.pageX-e.center.pageX,a=t.center.pageY-e.center.pageY,c=i.utils.getVelocity(o,s,a);return i.utils.extend(t,{deltaTime:o,deltaX:s,deltaY:a,velocityX:c.x,velocityY:c.y,distance:i.utils.getDistance(e.center,t.center),angle:i.utils.getAngle(e.center,t.center),direction:i.utils.getDirection(e.center,t.center),scale:i.utils.getScale(e.touches,t.touches),rotation:i.utils.getRotation(e.touches,t.touches),startEvent:e}),t},register:function(t){var n=t.defaults||{};return n[t.name]===e&&(n[t.name]=!0),i.utils.extend(i.defaults,n,!0),t.index=t.index||1e3,this.gestures.push(t),this.gestures.sort(function(t,e){return t.indexe.index?1:0}),this.gestures}},i.gestures=i.gestures||{},i.gestures.Hold={name:"hold",index:10,defaults:{hold_timeout:500,hold_threshold:1},timer:null,handler:function(t,e){switch(t.eventType){case i.EVENT_START:clearTimeout(this.timer),i.detection.current.name=this.name,this.timer=setTimeout(function(){"hold"==i.detection.current.name&&e.trigger("hold",t)},e.options.hold_timeout);break;case i.EVENT_MOVE:t.distance>e.options.hold_threshold&&clearTimeout(this.timer);break;case i.EVENT_END:clearTimeout(this.timer)}}},i.gestures.Tap={name:"tap",index:100,defaults:{tap_max_touchtime:250,tap_max_distance:10,tap_always:!0,doubletap_distance:20,doubletap_interval:300},handler:function(t,e){if(t.eventType==i.EVENT_END){var n=i.detection.previous,r=!1;if(t.deltaTime>e.options.tap_max_touchtime||t.distance>e.options.tap_max_distance)return;n&&"tap"==n.name&&t.timeStamp-n.lastEvent.timeStamp0&&t.touches.length>e.options.swipe_max_touches)return;(t.velocityX>e.options.swipe_velocity||t.velocityY>e.options.swipe_velocity)&&(e.trigger(this.name,t),e.trigger(this.name+t.direction,t))}}},i.gestures.Drag={name:"drag",index:50,defaults:{drag_min_distance:10,drag_max_touches:1,drag_block_horizontal:!1,drag_block_vertical:!1,drag_lock_to_axis:!1,drag_lock_min_distance:25},triggered:!1,handler:function(t,n){if(i.detection.current.name!=this.name&&this.triggered)return n.trigger(this.name+"end",t),this.triggered=!1,e;if(!(n.options.drag_max_touches>0&&t.touches.length>n.options.drag_max_touches))switch(t.eventType){case i.EVENT_START:this.triggered=!1;break;case i.EVENT_MOVE:if(t.distancet.deltaY?i.DIRECTION_UP:i.DIRECTION_DOWN:0>t.deltaX?i.DIRECTION_LEFT:i.DIRECTION_RIGHT),this.triggered||(n.trigger(this.name+"start",t),this.triggered=!0),n.trigger(this.name,t),n.trigger(this.name+t.direction,t),(n.options.drag_block_vertical&&i.utils.isVertical(t.direction)||n.options.drag_block_horizontal&&!i.utils.isVertical(t.direction))&&t.preventDefault();break;case i.EVENT_END:this.triggered&&n.trigger(this.name+"end",t),this.triggered=!1}}},i.gestures.Transform={name:"transform",index:45,defaults:{transform_min_scale:.01,transform_min_rotation:1,transform_always_block:!1},triggered:!1,handler:function(t,n){if(i.detection.current.name!=this.name&&this.triggered)return n.trigger(this.name+"end",t),this.triggered=!1,e;if(!(2>t.touches.length))switch(n.options.transform_always_block&&t.preventDefault(),t.eventType){case i.EVENT_START:this.triggered=!1;break;case i.EVENT_MOVE:var r=Math.abs(1-t.scale),o=Math.abs(t.rotation);if(n.options.transform_min_scale>r&&n.options.transform_min_rotation>o)return;i.detection.current.name=this.name,this.triggered||(n.trigger(this.name+"start",t),this.triggered=!0),n.trigger(this.name,t),o>n.options.transform_min_rotation&&n.trigger("rotate",t),r>n.options.transform_min_scale&&(n.trigger("pinch",t),n.trigger("pinch"+(1>t.scale?"in":"out"),t));break;case i.EVENT_END:this.triggered&&n.trigger(this.name+"end",t),this.triggered=!1}}},i.gestures.Touch={name:"touch",index:-1/0,defaults:{prevent_default:!1,prevent_mouseevents:!1},handler:function(t,n){return n.options.prevent_mouseevents&&t.pointerType==i.POINTER_MOUSE?(t.stopDetect(),e):(n.options.prevent_default&&t.preventDefault(),t.eventType==i.EVENT_START&&n.trigger(this.name,t),e)}},i.gestures.Release={name:"release",index:1/0,handler:function(t,e){t.eventType==i.EVENT_END&&e.trigger(this.name,t)}},"object"==typeof module&&"object"==typeof module.exports?module.exports=i:(t.Hammer=i,"function"==typeof t.define&&t.define.amd&&t.define("hammer",[],function(){return i}))})(this),function(t,e){"use strict";t!==e&&(Hammer.event.bindDom=function(n,i,r){t(n).on(i,function(t){var n=t.originalEvent||t;n.pageX===e&&(n.pageX=t.pageX,n.pageY=t.pageY),n.target||(n.target=t.target),n.which===e&&(n.which=n.button),n.preventDefault||(n.preventDefault=t.preventDefault),n.stopPropagation||(n.stopPropagation=t.stopPropagation),r.call(this,n)})},Hammer.Instance.prototype.on=function(e,n){return t(this.element).on(e,n)},Hammer.Instance.prototype.off=function(e,n){return t(this.element).off(e,n)},Hammer.Instance.prototype.trigger=function(e,n){var i=t(this.element);return i.has(n.target).length&&(i=t(n.target)),i.trigger({type:e,gesture:n})},t.fn.hammer=function(e){return this.each(function(){var n=t(this),i=n.data("hammer");i?i&&e&&Hammer.utils.extend(i.options,e):n.data("hammer",new Hammer(this,e||{}))})})}(window.jQuery||window.Zepto); + + + + +/*! + * VERSION: 1.11.2 + * DATE: 2013-11-20 + * UPDATES AND DOCS AT: http://www.greensock.com + * + * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +(function(t){"use strict";var e=t.GreenSockGlobals||t;if(!e.TweenLite){var i,s,r,n,a,o=function(t){var i,s=t.split("."),r=e;for(i=0;s.length>i;i++)r[s[i]]=r=r[s[i]]||{};return r},l=o("com.greensock"),h=1e-10,_=[].slice,u=function(){},m=function(){var t=Object.prototype.toString,e=t.call([]);return function(i){return i instanceof Array||"object"==typeof i&&!!i.push&&t.call(i)===e}}(),f={},p=function(i,s,r,n){this.sc=f[i]?f[i].sc:[],f[i]=this,this.gsClass=null,this.func=r;var a=[];this.check=function(l){for(var h,_,u,m,c=s.length,d=c;--c>-1;)(h=f[s[c]]||new p(s[c],[])).gsClass?(a[c]=h.gsClass,d--):l&&h.sc.push(this);if(0===d&&r)for(_=("com.greensock."+i).split("."),u=_.pop(),m=o(_.join("."))[u]=this.gsClass=r.apply(r,a),n&&(e[u]=m,"function"==typeof define&&define.amd?define((t.GreenSockAMDPath?t.GreenSockAMDPath+"/":"")+i.split(".").join("/"),[],function(){return m}):"undefined"!=typeof module&&module.exports&&(module.exports=m)),c=0;this.sc.length>c;c++)this.sc[c].check()},this.check(!0)},c=t._gsDefine=function(t,e,i,s){return new p(t,e,i,s)},d=l._class=function(t,e,i){return e=e||function(){},c(t,[],function(){return e},i),e};c.globals=e;var v=[0,0,1,1],g=[],T=d("easing.Ease",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?v.concat(e):v},!0),w=T.map={},P=T.register=function(t,e,i,s){for(var r,n,a,o,h=e.split(","),_=h.length,u=(i||"easeIn,easeOut,easeInOut").split(",");--_>-1;)for(n=h[_],r=s?d("easing."+n,null,!0):l.easing[n]||{},a=u.length;--a>-1;)o=u[a],w[n+"."+o]=w[o+n]=r[o]=t.getRatio?t:t[o]||new t};for(r=T.prototype,r._calcEnd=!1,r.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:.5>t?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:.5>t?s/2:1-s/2},i=["Linear","Quad","Cubic","Quart","Quint,Strong"],s=i.length;--s>-1;)r=i[s]+",Power"+s,P(new T(null,null,1,s),r,"easeOut",!0),P(new T(null,null,2,s),r,"easeIn"+(0===s?",easeNone":"")),P(new T(null,null,3,s),r,"easeInOut");w.linear=l.easing.Linear.easeIn,w.swing=l.easing.Quad.easeInOut;var y=d("events.EventDispatcher",function(t){this._listeners={},this._eventTarget=t||this});r=y.prototype,r.addEventListener=function(t,e,i,s,r){r=r||0;var o,l,h=this._listeners[t],_=0;for(null==h&&(this._listeners[t]=h=[]),l=h.length;--l>-1;)o=h[l],o.c===e&&o.s===i?h.splice(l,1):0===_&&r>o.pr&&(_=l+1);h.splice(_,0,{c:e,s:i,up:s,pr:r}),this!==n||a||n.wake()},r.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;--i>-1;)if(s[i].c===e)return s.splice(i,1),void 0},r.dispatchEvent=function(t){var e,i,s,r=this._listeners[t];if(r)for(e=r.length,i=this._eventTarget;--e>-1;)s=r[e],s.up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i)};var b=t.requestAnimationFrame,k=t.cancelAnimationFrame,A=Date.now||function(){return(new Date).getTime()},S=A();for(i=["ms","moz","webkit","o"],s=i.length;--s>-1&&!b;)b=t[i[s]+"RequestAnimationFrame"],k=t[i[s]+"CancelAnimationFrame"]||t[i[s]+"CancelRequestAnimationFrame"];d("Ticker",function(t,e){var i,s,r,o,l,h=this,_=A(),m=e!==!1&&b,f=function(t){S=A(),h.time=(S-_)/1e3;var e,n=h.time-l;(!i||n>0||t===!0)&&(h.frame++,l+=n+(n>=o?.004:o-n),e=!0),t!==!0&&(r=s(f)),e&&h.dispatchEvent("tick")};y.call(h),h.time=h.frame=0,h.tick=function(){f(!0)},h.sleep=function(){null!=r&&(m&&k?k(r):clearTimeout(r),s=u,r=null,h===n&&(a=!1))},h.wake=function(){null!==r&&h.sleep(),s=0===i?u:m&&b?b:function(t){return setTimeout(t,0|1e3*(l-h.time)+1)},h===n&&(a=!0),f(2)},h.fps=function(t){return arguments.length?(i=t,o=1/(i||60),l=this.time+o,h.wake(),void 0):i},h.useRAF=function(t){return arguments.length?(h.sleep(),m=t,h.fps(i),void 0):m},h.fps(t),setTimeout(function(){m&&(!r||5>h.frame)&&h.useRAF(!1)},1500)}),r=l.Ticker.prototype=new l.events.EventDispatcher,r.constructor=l.Ticker;var x=d("core.Animation",function(t,e){if(this.vars=e=e||{},this._duration=this._totalDuration=t||0,this._delay=Number(e.delay)||0,this._timeScale=1,this._active=e.immediateRender===!0,this.data=e.data,this._reversed=e.reversed===!0,Q){a||n.wake();var i=this.vars.useFrames?G:Q;i.add(this,i._time),this.vars.paused&&this.paused(!0)}});n=x.ticker=new l.Ticker,r=x.prototype,r._dirty=r._gc=r._initted=r._paused=!1,r._totalTime=r._time=0,r._rawPrevTime=-1,r._next=r._last=r._onUpdate=r._timeline=r.timeline=null,r._paused=!1;var C=function(){a&&A()-S>2e3&&n.wake(),setTimeout(C,2e3)};C(),r.play=function(t,e){return arguments.length&&this.seek(t,e),this.reversed(!1).paused(!1)},r.pause=function(t,e){return arguments.length&&this.seek(t,e),this.paused(!0)},r.resume=function(t,e){return arguments.length&&this.seek(t,e),this.paused(!1)},r.seek=function(t,e){return this.totalTime(Number(t),e!==!1)},r.restart=function(t,e){return this.reversed(!1).paused(!1).totalTime(t?-this._delay:0,e!==!1,!0)},r.reverse=function(t,e){return arguments.length&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},r.render=function(){},r.invalidate=function(){return this},r.isActive=function(){var t,e=this._timeline,i=this._startTime;return!e||!this._gc&&!this._paused&&e.isActive()&&(t=e.rawTime())>=i&&i+this.totalDuration()/this._timeScale>t},r._enabled=function(t,e){return a||n.wake(),this._gc=!t,this._active=this.isActive(),e!==!0&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},r._kill=function(){return this._enabled(!1,!1)},r.kill=function(t,e){return this._kill(t,e),this},r._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},r._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();--e>-1;)"{self}"===t[e]&&(i[e]=this);return i},r.eventCallback=function(t,e,i,s){if("on"===(t||"").substr(0,2)){var r=this.vars;if(1===arguments.length)return r[t];null==e?delete r[t]:(r[t]=e,r[t+"Params"]=m(i)&&-1!==i.join("").indexOf("{self}")?this._swapSelfInParams(i):i,r[t+"Scope"]=s),"onUpdate"===t&&(this._onUpdate=e)}return this},r.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},r.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&this._time>0&&this._timethis._duration?this._duration:t,e)):this._time},r.totalTime=function(t,e,i){if(a||n.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(0>t&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,r=this._timeline;if(t>s&&!i&&(t=s),this._startTime=(this._paused?this._pauseTime:r._time)-(this._reversed?s-t:t)/this._timeScale,r._dirty||this._uncache(!1),r._timeline)for(;r._timeline;)r._timeline._time!==(r._startTime+r._totalTime)/r._timeScale&&r.totalTime(r._totalTime,!0),r=r._timeline}this._gc&&this._enabled(!0,!1),(this._totalTime!==t||0===this._duration)&&this.render(t,e,!1)}return this},r.progress=r.totalProgress=function(t,e){return arguments.length?this.totalTime(this.duration()*t,e):this._time/this.duration()},r.startTime=function(t){return arguments.length?(t!==this._startTime&&(this._startTime=t,this.timeline&&this.timeline._sortChildren&&this.timeline.add(this,t-this._delay)),this):this._startTime},r.timeScale=function(t){if(!arguments.length)return this._timeScale;if(t=t||h,this._timeline&&this._timeline.smoothChildTiming){var e=this._pauseTime,i=e||0===e?e:this._timeline.totalTime();this._startTime=i-(i-this._startTime)*this._timeScale/t}return this._timeScale=t,this._uncache(!1)},r.reversed=function(t){return arguments.length?(t!=this._reversed&&(this._reversed=t,this.totalTime(this._totalTime,!0)),this):this._reversed},r.paused=function(t){if(!arguments.length)return this._paused;if(t!=this._paused&&this._timeline){a||t||n.wake();var e=this._timeline,i=e.rawTime(),s=i-this._pauseTime;!t&&e.smoothChildTiming&&(this._startTime+=s,this._uncache(!1)),this._pauseTime=t?i:null,this._paused=t,this._active=this.isActive(),!t&&0!==s&&this._initted&&this.duration()&&this.render(e.smoothChildTiming?this._totalTime:(i-this._startTime)/this._timeScale,!0,!0)}return this._gc&&!t&&this._enabled(!0,!1),this};var R=d("core.SimpleTimeline",function(t){x.call(this,0,t),this.autoRemoveChildren=this.smoothChildTiming=!0});r=R.prototype=new x,r.constructor=R,r.kill()._gc=!1,r._first=r._last=null,r._sortChildren=!1,r.add=r.insert=function(t,e){var i,s;if(t._startTime=Number(e||0)+t._delay,t._paused&&this!==t._timeline&&(t._pauseTime=t._startTime+(this.rawTime()-t._startTime)/t._timeScale),t.timeline&&t.timeline._remove(t,!0),t.timeline=t._timeline=this,t._gc&&t._enabled(!0,!0),i=this._last,this._sortChildren)for(s=t._startTime;i&&i._startTime>s;)i=i._prev;return i?(t._next=i._next,i._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=i,this._timeline&&this._uncache(!0),this},r._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t.timeline=null,t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),this._timeline&&this._uncache(!0)),this},r.render=function(t,e,i){var s,r=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;r;)s=r._next,(r._active||t>=r._startTime&&!r._paused)&&(r._reversed?r.render((r._dirty?r.totalDuration():r._totalDuration)-(t-r._startTime)*r._timeScale,e,i):r.render((t-r._startTime)*r._timeScale,e,i)),r=s},r.rawTime=function(){return a||n.wake(),this._totalTime};var D=d("TweenLite",function(e,i,s){if(x.call(this,i,s),this.render=D.prototype.render,null==e)throw"Cannot tween a null target.";this.target=e="string"!=typeof e?e:D.selector(e)||e;var r,n,a,o=e.jquery||e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType),l=this.vars.overwrite;if(this._overwrite=l=null==l?j[D.defaultOverwrite]:"number"==typeof l?l>>0:j[l],(o||e instanceof Array||e.push&&m(e))&&"number"!=typeof e[0])for(this._targets=a=_.call(e,0),this._propLookup=[],this._siblings=[],r=0;a.length>r;r++)n=a[r],n?"string"!=typeof n?n.length&&n!==t&&n[0]&&(n[0]===t||n[0].nodeType&&n[0].style&&!n.nodeType)?(a.splice(r--,1),this._targets=a=a.concat(_.call(n,0))):(this._siblings[r]=B(n,this,!1),1===l&&this._siblings[r].length>1&&q(n,this,null,1,this._siblings[r])):(n=a[r--]=D.selector(n),"string"==typeof n&&a.splice(r+1,1)):a.splice(r--,1);else this._propLookup={},this._siblings=B(e,this,!1),1===l&&this._siblings.length>1&&q(e,this,null,1,this._siblings);(this.vars.immediateRender||0===i&&0===this._delay&&this.vars.immediateRender!==!1)&&this.render(-this._delay,!1,!0)},!0),E=function(e){return e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType)},I=function(t,e){var i,s={};for(i in t)F[i]||i in e&&"x"!==i&&"y"!==i&&"width"!==i&&"height"!==i&&"className"!==i&&"border"!==i||!(!N[i]||N[i]&&N[i]._autoCSS)||(s[i]=t[i],delete t[i]);t.css=s};r=D.prototype=new x,r.constructor=D,r.kill()._gc=!1,r.ratio=0,r._firstPT=r._targets=r._overwrittenProps=r._startAt=null,r._notifyPluginsOfEnabled=!1,D.version="1.11.2",D.defaultEase=r._ease=new T(null,null,1,1),D.defaultOverwrite="auto",D.ticker=n,D.autoSleep=!0,D.selector=t.$||t.jQuery||function(e){return t.$?(D.selector=t.$,t.$(e)):t.document?t.document.getElementById("#"===e.charAt(0)?e.substr(1):e):e};var O=D._internals={isArray:m,isSelector:E},N=D._plugins={},L=D._tweenLookup={},U=0,F=O.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1},j={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,"true":1,"false":0},G=x._rootFramesTimeline=new R,Q=x._rootTimeline=new R;Q._startTime=n.time,G._startTime=n.frame,Q._active=G._active=!0,x._updateRoot=function(){if(Q.render((n.time-Q._startTime)*Q._timeScale,!1,!1),G.render((n.frame-G._startTime)*G._timeScale,!1,!1),!(n.frame%120)){var t,e,i;for(i in L){for(e=L[i].tweens,t=e.length;--t>-1;)e[t]._gc&&e.splice(t,1);0===e.length&&delete L[i]}if(i=Q._first,(!i||i._paused)&&D.autoSleep&&!G._first&&1===n._listeners.tick.length){for(;i&&i._paused;)i=i._next;i||n.sleep()}}},n.addEventListener("tick",x._updateRoot);var B=function(t,e,i){var s,r,n=t._gsTweenID;if(L[n||(t._gsTweenID=n="t"+U++)]||(L[n]={target:t,tweens:[]}),e&&(s=L[n].tweens,s[r=s.length]=e,i))for(;--r>-1;)s[r]===e&&s.splice(r,1);return L[n].tweens},q=function(t,e,i,s,r){var n,a,o,l;if(1===s||s>=4){for(l=r.length,n=0;l>n;n++)if((o=r[n])!==e)o._gc||o._enabled(!1,!1)&&(a=!0);else if(5===s)break;return a}var _,u=e._startTime+h,m=[],f=0,p=0===e._duration;for(n=r.length;--n>-1;)(o=r[n])===e||o._gc||o._paused||(o._timeline!==e._timeline?(_=_||$(e,0,p),0===$(o,_,p)&&(m[f++]=o)):u>=o._startTime&&o._startTime+o.totalDuration()/o._timeScale+h>u&&((p||!o._initted)&&2e-10>=u-o._startTime||(m[f++]=o)));for(n=f;--n>-1;)o=m[n],2===s&&o._kill(i,t)&&(a=!0),(2!==s||!o._firstPT&&o._initted)&&o._enabled(!1,!1)&&(a=!0);return a},$=function(t,e,i){for(var s=t._timeline,r=s._timeScale,n=t._startTime;s._timeline;){if(n+=s._startTime,r*=s._timeScale,s._paused)return-100;s=s._timeline}return n/=r,n>e?n-e:i&&n===e||!t._initted&&2*h>n-e?h:(n+=t.totalDuration()/t._timeScale/r)>e+h?0:n-e-h};r._init=function(){var t,e,i,s,r=this.vars,n=this._overwrittenProps,a=this._duration,o=r.immediateRender,l=r.ease;if(r.startAt){if(this._startAt&&this._startAt.render(-1,!0),r.startAt.overwrite=0,r.startAt.immediateRender=!0,this._startAt=D.to(this.target,0,r.startAt),o)if(this._time>0)this._startAt=null;else if(0!==a)return}else if(r.runBackwards&&0!==a)if(this._startAt)this._startAt.render(-1,!0),this._startAt=null;else{i={};for(s in r)F[s]&&"autoCSS"!==s||(i[s]=r[s]);if(i.overwrite=0,i.data="isFromStart",this._startAt=D.to(this.target,0,i),r.immediateRender){if(0===this._time)return}else this._startAt.render(-1,!0)}if(this._ease=l?l instanceof T?r.easeParams instanceof Array?l.config.apply(l,r.easeParams):l:"function"==typeof l?new T(l,r.easeParams):w[l]||D.defaultEase:D.defaultEase,this._easeType=this._ease._type,this._easePower=this._ease._power,this._firstPT=null,this._targets)for(t=this._targets.length;--t>-1;)this._initProps(this._targets[t],this._propLookup[t]={},this._siblings[t],n?n[t]:null)&&(e=!0);else e=this._initProps(this.target,this._propLookup,this._siblings,n);if(e&&D._onPluginEvent("_onInitAllProps",this),n&&(this._firstPT||"function"!=typeof this.target&&this._enabled(!1,!1)),r.runBackwards)for(i=this._firstPT;i;)i.s+=i.c,i.c=-i.c,i=i._next;this._onUpdate=r.onUpdate,this._initted=!0},r._initProps=function(e,i,s,r){var n,a,o,l,h,_;if(null==e)return!1;this.vars.css||e.style&&e!==t&&e.nodeType&&N.css&&this.vars.autoCSS!==!1&&I(this.vars,e);for(n in this.vars){if(_=this.vars[n],F[n])_&&(_ instanceof Array||_.push&&m(_))&&-1!==_.join("").indexOf("{self}")&&(this.vars[n]=_=this._swapSelfInParams(_,this));else if(N[n]&&(l=new N[n])._onInitTween(e,this.vars[n],this)){for(this._firstPT=h={_next:this._firstPT,t:l,p:"setRatio",s:0,c:1,f:!0,n:n,pg:!0,pr:l._priority},a=l._overwriteProps.length;--a>-1;)i[l._overwriteProps[a]]=this._firstPT;(l._priority||l._onInitAllProps)&&(o=!0),(l._onDisable||l._onEnable)&&(this._notifyPluginsOfEnabled=!0)}else this._firstPT=i[n]=h={_next:this._firstPT,t:e,p:n,f:"function"==typeof e[n],n:n,pg:!1,pr:0},h.s=h.f?e[n.indexOf("set")||"function"!=typeof e["get"+n.substr(3)]?n:"get"+n.substr(3)]():parseFloat(e[n]),h.c="string"==typeof _&&"="===_.charAt(1)?parseInt(_.charAt(0)+"1",10)*Number(_.substr(2)):Number(_)-h.s||0;h&&h._next&&(h._next._prev=h)}return r&&this._kill(r,e)?this._initProps(e,i,s,r):this._overwrite>1&&this._firstPT&&s.length>1&&q(e,this,i,this._overwrite,s)?(this._kill(i,e),this._initProps(e,i,s,r)):o},r.render=function(t,e,i){var s,r,n,a,o=this._time,l=this._duration;if(t>=l)this._totalTime=this._time=l,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(s=!0,r="onComplete"),0===l&&(a=this._rawPrevTime,(0===t||0>a||a===h)&&a!==t&&(i=!0,a>h&&(r="onReverseComplete")),this._rawPrevTime=a=!e||t?t:h);else if(1e-7>t)this._totalTime=this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0,(0!==o||0===l&&this._rawPrevTime>h)&&(r="onReverseComplete",s=this._reversed),0>t?(this._active=!1,0===l&&(this._rawPrevTime>=0&&(i=!0),this._rawPrevTime=a=!e||t?t:h)):this._initted||(i=!0);else if(this._totalTime=this._time=t,this._easeType){var _=t/l,u=this._easeType,m=this._easePower;(1===u||3===u&&_>=.5)&&(_=1-_),3===u&&(_*=2),1===m?_*=_:2===m?_*=_*_:3===m?_*=_*_*_:4===m&&(_*=_*_*_*_),this.ratio=1===u?1-_:2===u?_:.5>t/l?_/2:1-_/2}else this.ratio=this._ease.getRatio(t/l);if(this._time!==o||i){if(!this._initted){if(this._init(),!this._initted||this._gc)return;this._time&&!s?this.ratio=this._ease.getRatio(this._time/l):s&&this._ease._calcEnd&&(this.ratio=this._ease.getRatio(0===this._time?0:1))}for(this._active||!this._paused&&this._time!==o&&t>=0&&(this._active=!0),0===o&&(this._startAt&&(t>=0?this._startAt.render(t,e,i):r||(r="_dummyGS")),this.vars.onStart&&(0!==this._time||0===l)&&(e||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams||g))),n=this._firstPT;n;)n.f?n.t[n.p](n.c*this.ratio+n.s):n.t[n.p]=n.c*this.ratio+n.s,n=n._next;this._onUpdate&&(0>t&&this._startAt&&this._startTime&&this._startAt.render(t,e,i),e||i&&0===this._time&&0===o||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||g)),r&&(this._gc||(0>t&&this._startAt&&!this._onUpdate&&this._startTime&&this._startAt.render(t,e,i),s&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[r]&&this.vars[r].apply(this.vars[r+"Scope"]||this,this.vars[r+"Params"]||g),0===l&&this._rawPrevTime===h&&a!==h&&(this._rawPrevTime=0)))}},r._kill=function(t,e){if("all"===t&&(t=null),null==t&&(null==e||e===this.target))return this._enabled(!1,!1);e="string"!=typeof e?e||this._targets||this.target:D.selector(e)||e;var i,s,r,n,a,o,l,h;if((m(e)||E(e))&&"number"!=typeof e[0])for(i=e.length;--i>-1;)this._kill(t,e[i])&&(o=!0);else{if(this._targets){for(i=this._targets.length;--i>-1;)if(e===this._targets[i]){a=this._propLookup[i]||{},this._overwrittenProps=this._overwrittenProps||[],s=this._overwrittenProps[i]=t?this._overwrittenProps[i]||{}:"all";break}}else{if(e!==this.target)return!1;a=this._propLookup,s=this._overwrittenProps=t?this._overwrittenProps||{}:"all"}if(a){l=t||a,h=t!==s&&"all"!==s&&t!==a&&("object"!=typeof t||!t._tempKill);for(r in l)(n=a[r])&&(n.pg&&n.t._kill(l)&&(o=!0),n.pg&&0!==n.t._overwriteProps.length||(n._prev?n._prev._next=n._next:n===this._firstPT&&(this._firstPT=n._next),n._next&&(n._next._prev=n._prev),n._next=n._prev=null),delete a[r]),h&&(s[r]=1);!this._firstPT&&this._initted&&this._enabled(!1,!1)}}return o},r.invalidate=function(){return this._notifyPluginsOfEnabled&&D._onPluginEvent("_onDisable",this),this._firstPT=null,this._overwrittenProps=null,this._onUpdate=null,this._startAt=null,this._initted=this._active=this._notifyPluginsOfEnabled=!1,this._propLookup=this._targets?{}:[],this},r._enabled=function(t,e){if(a||n.wake(),t&&this._gc){var i,s=this._targets;if(s)for(i=s.length;--i>-1;)this._siblings[i]=B(s[i],this,!0);else this._siblings=B(this.target,this,!0)}return x.prototype._enabled.call(this,t,e),this._notifyPluginsOfEnabled&&this._firstPT?D._onPluginEvent(t?"_onEnable":"_onDisable",this):!1},D.to=function(t,e,i){return new D(t,e,i)},D.from=function(t,e,i){return i.runBackwards=!0,i.immediateRender=0!=i.immediateRender,new D(t,e,i)},D.fromTo=function(t,e,i,s){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,new D(t,e,s)},D.delayedCall=function(t,e,i,s,r){return new D(e,0,{delay:t,onComplete:e,onCompleteParams:i,onCompleteScope:s,onReverseComplete:e,onReverseCompleteParams:i,onReverseCompleteScope:s,immediateRender:!1,useFrames:r,overwrite:0})},D.set=function(t,e){return new D(t,0,e)},D.getTweensOf=function(t,e){if(null==t)return[];t="string"!=typeof t?t:D.selector(t)||t;var i,s,r,n;if((m(t)||E(t))&&"number"!=typeof t[0]){for(i=t.length,s=[];--i>-1;)s=s.concat(D.getTweensOf(t[i],e));for(i=s.length;--i>-1;)for(n=s[i],r=i;--r>-1;)n===s[r]&&s.splice(i,1)}else for(s=B(t).concat(),i=s.length;--i>-1;)(s[i]._gc||e&&!s[i].isActive())&&s.splice(i,1);return s},D.killTweensOf=D.killDelayedCallsTo=function(t,e,i){"object"==typeof e&&(i=e,e=!1);for(var s=D.getTweensOf(t,e),r=s.length;--r>-1;)s[r]._kill(i,t)};var M=d("plugins.TweenPlugin",function(t,e){this._overwriteProps=(t||"").split(","),this._propName=this._overwriteProps[0],this._priority=e||0,this._super=M.prototype},!0);if(r=M.prototype,M.version="1.10.1",M.API=2,r._firstPT=null,r._addTween=function(t,e,i,s,r,n){var a,o;return null!=s&&(a="number"==typeof s||"="!==s.charAt(1)?Number(s)-i:parseInt(s.charAt(0)+"1",10)*Number(s.substr(2)))?(this._firstPT=o={_next:this._firstPT,t:t,p:e,s:i,c:a,f:"function"==typeof t[e],n:r||e,r:n},o._next&&(o._next._prev=o),o):void 0},r.setRatio=function(t){for(var e,i=this._firstPT,s=1e-6;i;)e=i.c*t+i.s,i.r?e=0|e+(e>0?.5:-.5):s>e&&e>-s&&(e=0),i.f?i.t[i.p](e):i.t[i.p]=e,i=i._next},r._kill=function(t){var e,i=this._overwriteProps,s=this._firstPT;if(null!=t[this._propName])this._overwriteProps=[];else for(e=i.length;--e>-1;)null!=t[i[e]]&&i.splice(e,1);for(;s;)null!=t[s.n]&&(s._next&&(s._next._prev=s._prev),s._prev?(s._prev._next=s._next,s._prev=null):this._firstPT===s&&(this._firstPT=s._next)),s=s._next;return!1},r._roundProps=function(t,e){for(var i=this._firstPT;i;)(t[this._propName]||null!=i.n&&t[i.n.split(this._propName+"_").join("")])&&(i.r=e),i=i._next},D._onPluginEvent=function(t,e){var i,s,r,n,a,o=e._firstPT;if("_onInitAllProps"===t){for(;o;){for(a=o._next,s=r;s&&s.pr>o.pr;)s=s._next;(o._prev=s?s._prev:n)?o._prev._next=o:r=o,(o._next=s)?s._prev=o:n=o,o=a}o=e._firstPT=r}for(;o;)o.pg&&"function"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},M.activate=function(t){for(var e=t.length;--e>-1;)t[e].API===M.API&&(N[(new t[e])._propName]=t[e]);return!0},c.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw"illegal plugin definition.";var e,i=t.propName,s=t.priority||0,r=t.overwriteProps,n={init:"_onInitTween",set:"setRatio",kill:"_kill",round:"_roundProps",initAll:"_onInitAllProps"},a=d("plugins."+i.charAt(0).toUpperCase()+i.substr(1)+"Plugin",function(){M.call(this,i,s),this._overwriteProps=r||[]},t.global===!0),o=a.prototype=new M(i);o.constructor=a,a.API=t.API;for(e in n)"function"==typeof t[e]&&(o[n[e]]=t[e]);return a.version=t.version,M.activate([a]),a},i=t._gsQueue){for(s=0;i.length>s;s++)i[s]();for(r in f)f[r].func||t.console.log("GSAP encountered missing dependency: com.greensock."+r)}a=!1}})(window); +(window._gsQueue||(window._gsQueue=[])).push(function(){"use strict";window._gsDefine("easing.Back",["easing.Ease"],function(t){var e,i,s,r=window.GreenSockGlobals||window,n=r.com.greensock,a=2*Math.PI,o=Math.PI/2,h=n._class,l=function(e,i){var s=h("easing."+e,function(){},!0),r=s.prototype=new t;return r.constructor=s,r.getRatio=i,s},_=t.register||function(){},u=function(t,e,i,s){var r=h("easing."+t,{easeOut:new e,easeIn:new i,easeInOut:new s},!0);return _(r,t),r},c=function(t,e,i){this.t=t,this.v=e,i&&(this.next=i,i.prev=this,this.c=i.v-e,this.gap=i.t-t)},p=function(e,i){var s=h("easing."+e,function(t){this._p1=t||0===t?t:1.70158,this._p2=1.525*this._p1},!0),r=s.prototype=new t;return r.constructor=s,r.getRatio=i,r.config=function(t){return new s(t)},s},f=u("Back",p("BackOut",function(t){return(t-=1)*t*((this._p1+1)*t+this._p1)+1}),p("BackIn",function(t){return t*t*((this._p1+1)*t-this._p1)}),p("BackInOut",function(t){return 1>(t*=2)?.5*t*t*((this._p2+1)*t-this._p2):.5*((t-=2)*t*((this._p2+1)*t+this._p2)+2)})),m=h("easing.SlowMo",function(t,e,i){e=e||0===e?e:.7,null==t?t=.7:t>1&&(t=1),this._p=1!==t?e:0,this._p1=(1-t)/2,this._p2=t,this._p3=this._p1+this._p2,this._calcEnd=i===!0},!0),d=m.prototype=new t;return d.constructor=m,d.getRatio=function(t){var e=t+(.5-t)*this._p;return this._p1>t?this._calcEnd?1-(t=1-t/this._p1)*t:e-(t=1-t/this._p1)*t*t*t*e:t>this._p3?this._calcEnd?1-(t=(t-this._p3)/this._p1)*t:e+(t-e)*(t=(t-this._p3)/this._p1)*t*t*t:this._calcEnd?1:e},m.ease=new m(.7,.7),d.config=m.config=function(t,e,i){return new m(t,e,i)},e=h("easing.SteppedEase",function(t){t=t||1,this._p1=1/t,this._p2=t+1},!0),d=e.prototype=new t,d.constructor=e,d.getRatio=function(t){return 0>t?t=0:t>=1&&(t=.999999999),(this._p2*t>>0)*this._p1},d.config=e.config=function(t){return new e(t)},i=h("easing.RoughEase",function(e){e=e||{};for(var i,s,r,n,a,o,h=e.taper||"none",l=[],_=0,u=0|(e.points||20),p=u,f=e.randomize!==!1,m=e.clamp===!0,d=e.template instanceof t?e.template:null,g="number"==typeof e.strength?.4*e.strength:.4;--p>-1;)i=f?Math.random():1/u*p,s=d?d.getRatio(i):i,"none"===h?r=g:"out"===h?(n=1-i,r=n*n*g):"in"===h?r=i*i*g:.5>i?(n=2*i,r=.5*n*n*g):(n=2*(1-i),r=.5*n*n*g),f?s+=Math.random()*r-.5*r:p%2?s+=.5*r:s-=.5*r,m&&(s>1?s=1:0>s&&(s=0)),l[_++]={x:i,y:s};for(l.sort(function(t,e){return t.x-e.x}),o=new c(1,1,null),p=u;--p>-1;)a=l[p],o=new c(a.x,a.y,o);this._prev=new c(0,0,0!==o.t?o:o.next)},!0),d=i.prototype=new t,d.constructor=i,d.getRatio=function(t){var e=this._prev;if(t>e.t){for(;e.next&&t>=e.t;)e=e.next;e=e.prev}else for(;e.prev&&e.t>=t;)e=e.prev;return this._prev=e,e.v+(t-e.t)/e.gap*e.c},d.config=function(t){return new i(t)},i.ease=new i,u("Bounce",l("BounceOut",function(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),l("BounceIn",function(t){return 1/2.75>(t=1-t)?1-7.5625*t*t:2/2.75>t?1-(7.5625*(t-=1.5/2.75)*t+.75):2.5/2.75>t?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),l("BounceInOut",function(t){var e=.5>t;return t=e?1-2*t:2*t-1,t=1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5})),u("Circ",l("CircOut",function(t){return Math.sqrt(1-(t-=1)*t)}),l("CircIn",function(t){return-(Math.sqrt(1-t*t)-1)}),l("CircInOut",function(t){return 1>(t*=2)?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})),s=function(e,i,s){var r=h("easing."+e,function(t,e){this._p1=t||1,this._p2=e||s,this._p3=this._p2/a*(Math.asin(1/this._p1)||0)},!0),n=r.prototype=new t;return n.constructor=r,n.getRatio=i,n.config=function(t,e){return new r(t,e)},r},u("Elastic",s("ElasticOut",function(t){return this._p1*Math.pow(2,-10*t)*Math.sin((t-this._p3)*a/this._p2)+1},.3),s("ElasticIn",function(t){return-(this._p1*Math.pow(2,10*(t-=1))*Math.sin((t-this._p3)*a/this._p2))},.3),s("ElasticInOut",function(t){return 1>(t*=2)?-.5*this._p1*Math.pow(2,10*(t-=1))*Math.sin((t-this._p3)*a/this._p2):.5*this._p1*Math.pow(2,-10*(t-=1))*Math.sin((t-this._p3)*a/this._p2)+1},.45)),u("Expo",l("ExpoOut",function(t){return 1-Math.pow(2,-10*t)}),l("ExpoIn",function(t){return Math.pow(2,10*(t-1))-.001}),l("ExpoInOut",function(t){return 1>(t*=2)?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})),u("Sine",l("SineOut",function(t){return Math.sin(t*o)}),l("SineIn",function(t){return-Math.cos(t*o)+1}),l("SineInOut",function(t){return-.5*(Math.cos(Math.PI*t)-1)})),h("easing.EaseLookup",{find:function(e){return t.map[e]}},!0),_(r.SlowMo,"SlowMo","ease,"),_(i,"RoughEase","ease,"),_(e,"SteppedEase","ease,"),f},!0)}),window._gsDefine&&window._gsQueue.pop()(); +(window._gsQueue||(window._gsQueue=[])).push(function(){"use strict";window._gsDefine("plugins.CSSPlugin",["plugins.TweenPlugin","TweenLite"],function(t,e){var i,s,r,n,a=function(){t.call(this,"css"),this._overwriteProps.length=0,this.setRatio=a.prototype.setRatio},o={},l=a.prototype=new t("css");l.constructor=a,a.version="1.11.2",a.API=2,a.defaultTransformPerspective=0,l="px",a.suffixMap={top:l,right:l,bottom:l,left:l,width:l,height:l,fontSize:l,padding:l,margin:l,perspective:l};var h,u,_,p,f,c,d=/(?:\d|\-\d|\.\d|\-\.\d)+/g,m=/(?:\d|\-\d|\.\d|\-\.\d|\+=\d|\-=\d|\+=.\d|\-=\.\d)+/g,g=/(?:\+=|\-=|\-|\b)[\d\-\.]+[a-zA-Z0-9]*(?:%|\b)/gi,v=/[^\d\-\.]/g,y=/(?:\d|\-|\+|=|#|\.)*/g,T=/opacity *= *([^)]*)/,x=/opacity:([^;]*)/,w=/alpha\(opacity *=.+?\)/i,b=/^(rgb|hsl)/,P=/([A-Z])/g,S=/-([a-z])/gi,R=/(^(?:url\(\"|url\())|(?:(\"\))$|\)$)/gi,k=function(t,e){return e.toUpperCase()},C=/(?:Left|Right|Width)/i,A=/(M11|M12|M21|M22)=[\d\-\.e]+/gi,O=/progid\:DXImageTransform\.Microsoft\.Matrix\(.+?\)/i,D=/,(?=[^\)]*(?:\(|$))/gi,M=Math.PI/180,L=180/Math.PI,N={},X=document,F=X.createElement("div"),I=X.createElement("img"),E=a._internals={_specialProps:o},Y=navigator.userAgent,z=function(){var t,e=Y.indexOf("Android"),i=X.createElement("div");return _=-1!==Y.indexOf("Safari")&&-1===Y.indexOf("Chrome")&&(-1===e||Number(Y.substr(e+8,1))>3),f=_&&6>Number(Y.substr(Y.indexOf("Version/")+8,1)),p=-1!==Y.indexOf("Firefox"),/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(Y),c=parseFloat(RegExp.$1),i.innerHTML="a",t=i.getElementsByTagName("a")[0],t?/^0.55/.test(t.style.opacity):!1}(),U=function(t){return T.test("string"==typeof t?t:(t.currentStyle?t.currentStyle.filter:t.style.filter)||"")?parseFloat(RegExp.$1)/100:1},B=function(t){window.console&&console.log(t)},j="",V="",q=function(t,e){e=e||F;var i,s,r=e.style;if(void 0!==r[t])return t;for(t=t.charAt(0).toUpperCase()+t.substr(1),i=["O","Moz","ms","Ms","Webkit"],s=5;--s>-1&&void 0===r[i[s]+t];);return s>=0?(V=3===s?"ms":i[s],j="-"+V.toLowerCase()+"-",V+t):null},W=X.defaultView?X.defaultView.getComputedStyle:function(){},Q=a.getStyle=function(t,e,i,s,r){var n;return z||"opacity"!==e?(!s&&t.style[e]?n=t.style[e]:(i=i||W(t,null))?(t=i.getPropertyValue(e.replace(P,"-$1").toLowerCase()),n=t||i.length?t:i[e]):t.currentStyle&&(n=t.currentStyle[e]),null==r||n&&"none"!==n&&"auto"!==n&&"auto auto"!==n?n:r):U(t)},Z=function(t,e,i,s,r){if("px"===s||!s)return i;if("auto"===s||!i)return 0;var n,a=C.test(e),o=t,l=F.style,h=0>i;return h&&(i=-i),"%"===s&&-1!==e.indexOf("border")?n=i/100*(a?t.clientWidth:t.clientHeight):(l.cssText="border:0 solid red;position:"+Q(t,"position")+";line-height:0;","%"!==s&&o.appendChild?l[a?"borderLeftWidth":"borderTopWidth"]=i+s:(o=t.parentNode||X.body,l[a?"width":"height"]=i+s),o.appendChild(F),n=parseFloat(F[a?"offsetWidth":"offsetHeight"]),o.removeChild(F),0!==n||r||(n=Z(t,e,i,s,!0))),h?-n:n},H=function(t,e,i){if("absolute"!==Q(t,"position",i))return 0;var s="left"===e?"Left":"Top",r=Q(t,"margin"+s,i);return t["offset"+s]-(Z(t,e,parseFloat(r),r.replace(y,""))||0)},$=function(t,e){var i,s,r={};if(e=e||W(t,null))if(i=e.length)for(;--i>-1;)r[e[i].replace(S,k)]=e.getPropertyValue(e[i]);else for(i in e)r[i]=e[i];else if(e=t.currentStyle||t.style)for(i in e)"string"==typeof i&&void 0!==r[i]&&(r[i.replace(S,k)]=e[i]);return z||(r.opacity=U(t)),s=be(t,e,!1),r.rotation=s.rotation,r.skewX=s.skewX,r.scaleX=s.scaleX,r.scaleY=s.scaleY,r.x=s.x,r.y=s.y,we&&(r.z=s.z,r.rotationX=s.rotationX,r.rotationY=s.rotationY,r.scaleZ=s.scaleZ),r.filters&&delete r.filters,r},G=function(t,e,i,s,r){var n,a,o,l={},h=t.style;for(a in i)"cssText"!==a&&"length"!==a&&isNaN(a)&&(e[a]!==(n=i[a])||r&&r[a])&&-1===a.indexOf("Origin")&&("number"==typeof n||"string"==typeof n)&&(l[a]="auto"!==n||"left"!==a&&"top"!==a?""!==n&&"auto"!==n&&"none"!==n||"string"!=typeof e[a]||""===e[a].replace(v,"")?n:0:H(t,a),void 0!==h[a]&&(o=new _e(h,a,h[a],o)));if(s)for(a in s)"className"!==a&&(l[a]=s[a]);return{difs:l,firstMPT:o}},K={width:["Left","Right"],height:["Top","Bottom"]},J=["marginLeft","marginRight","marginTop","marginBottom"],te=function(t,e,i){var s=parseFloat("width"===e?t.offsetWidth:t.offsetHeight),r=K[e],n=r.length;for(i=i||W(t,null);--n>-1;)s-=parseFloat(Q(t,"padding"+r[n],i,!0))||0,s-=parseFloat(Q(t,"border"+r[n]+"Width",i,!0))||0;return s},ee=function(t,e){(null==t||""===t||"auto"===t||"auto auto"===t)&&(t="0 0");var i=t.split(" "),s=-1!==t.indexOf("left")?"0%":-1!==t.indexOf("right")?"100%":i[0],r=-1!==t.indexOf("top")?"0%":-1!==t.indexOf("bottom")?"100%":i[1];return null==r?r="0":"center"===r&&(r="50%"),("center"===s||isNaN(parseFloat(s))&&-1===(s+"").indexOf("="))&&(s="50%"),e&&(e.oxp=-1!==s.indexOf("%"),e.oyp=-1!==r.indexOf("%"),e.oxr="="===s.charAt(1),e.oyr="="===r.charAt(1),e.ox=parseFloat(s.replace(v,"")),e.oy=parseFloat(r.replace(v,""))),s+" "+r+(i.length>2?" "+i[2]:"")},ie=function(t,e){return"string"==typeof t&&"="===t.charAt(1)?parseInt(t.charAt(0)+"1",10)*parseFloat(t.substr(2)):parseFloat(t)-parseFloat(e)},se=function(t,e){return null==t?e:"string"==typeof t&&"="===t.charAt(1)?parseInt(t.charAt(0)+"1",10)*Number(t.substr(2))+e:parseFloat(t)},re=function(t,e,i,s){var r,n,a,o,l=1e-6;return null==t?o=e:"number"==typeof t?o=t:(r=360,n=t.split("_"),a=Number(n[0].replace(v,""))*(-1===t.indexOf("rad")?1:L)-("="===t.charAt(1)?0:e),n.length&&(s&&(s[i]=e+a),-1!==t.indexOf("short")&&(a%=r,a!==a%(r/2)&&(a=0>a?a+r:a-r)),-1!==t.indexOf("_cw")&&0>a?a=(a+9999999999*r)%r-(0|a/r)*r:-1!==t.indexOf("ccw")&&a>0&&(a=(a-9999999999*r)%r-(0|a/r)*r)),o=e+a),l>o&&o>-l&&(o=0),o},ne={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},ae=function(t,e,i){return t=0>t?t+1:t>1?t-1:t,0|255*(1>6*t?e+6*(i-e)*t:.5>t?i:2>3*t?e+6*(i-e)*(2/3-t):e)+.5},oe=function(t){var e,i,s,r,n,a;return t&&""!==t?"number"==typeof t?[t>>16,255&t>>8,255&t]:(","===t.charAt(t.length-1)&&(t=t.substr(0,t.length-1)),ne[t]?ne[t]:"#"===t.charAt(0)?(4===t.length&&(e=t.charAt(1),i=t.charAt(2),s=t.charAt(3),t="#"+e+e+i+i+s+s),t=parseInt(t.substr(1),16),[t>>16,255&t>>8,255&t]):"hsl"===t.substr(0,3)?(t=t.match(d),r=Number(t[0])%360/360,n=Number(t[1])/100,a=Number(t[2])/100,i=.5>=a?a*(n+1):a+n-a*n,e=2*a-i,t.length>3&&(t[3]=Number(t[3])),t[0]=ae(r+1/3,e,i),t[1]=ae(r,e,i),t[2]=ae(r-1/3,e,i),t):(t=t.match(d)||ne.transparent,t[0]=Number(t[0]),t[1]=Number(t[1]),t[2]=Number(t[2]),t.length>3&&(t[3]=Number(t[3])),t)):ne.black},le="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#.+?\\b";for(l in ne)le+="|"+l+"\\b";le=RegExp(le+")","gi");var he=function(t,e,i,s){if(null==t)return function(t){return t};var r,n=e?(t.match(le)||[""])[0]:"",a=t.split(n).join("").match(g)||[],o=t.substr(0,t.indexOf(a[0])),l=")"===t.charAt(t.length-1)?")":"",h=-1!==t.indexOf(" ")?" ":",",u=a.length,_=u>0?a[0].replace(d,""):"";return u?r=e?function(t){var e,p,f,c;if("number"==typeof t)t+=_;else if(s&&D.test(t)){for(c=t.replace(D,"|").split("|"),f=0;c.length>f;f++)c[f]=r(c[f]);return c.join(",")}if(e=(t.match(le)||[n])[0],p=t.split(e).join("").match(g)||[],f=p.length,u>f--)for(;u>++f;)p[f]=i?p[0|(f-1)/2]:a[f];return o+p.join(h)+h+e+l+(-1!==t.indexOf("inset")?" inset":"")}:function(t){var e,n,p;if("number"==typeof t)t+=_;else if(s&&D.test(t)){for(n=t.replace(D,"|").split("|"),p=0;n.length>p;p++)n[p]=r(n[p]);return n.join(",")}if(e=t.match(g)||[],p=e.length,u>p--)for(;u>++p;)e[p]=i?e[0|(p-1)/2]:a[p];return o+e.join(h)+l}:function(t){return t}},ue=function(t){return t=t.split(","),function(e,i,s,r,n,a,o){var l,h=(i+"").split(" ");for(o={},l=0;4>l;l++)o[t[l]]=h[l]=h[l]||h[(l-1)/2>>0];return r.parse(e,o,n,a)}},_e=(E._setPluginRatio=function(t){this.plugin.setRatio(t);for(var e,i,s,r,n=this.data,a=n.proxy,o=n.firstMPT,l=1e-6;o;)e=a[o.v],o.r?e=e>0?0|e+.5:0|e-.5:l>e&&e>-l&&(e=0),o.t[o.p]=e,o=o._next;if(n.autoRotate&&(n.autoRotate.rotation=a.rotation),1===t)for(o=n.firstMPT;o;){if(i=o.t,i.type){if(1===i.type){for(r=i.xs0+i.s+i.xs1,s=1;i.l>s;s++)r+=i["xn"+s]+i["xs"+(s+1)];i.e=r}}else i.e=i.s+i.xs0;o=o._next}},function(t,e,i,s,r){this.t=t,this.p=e,this.v=i,this.r=r,s&&(s._prev=this,this._next=s)}),pe=(E._parseToProxy=function(t,e,i,s,r,n){var a,o,l,h,u,_=s,p={},f={},c=i._transform,d=N;for(i._transform=null,N=e,s=u=i.parse(t,e,s,r),N=d,n&&(i._transform=c,_&&(_._prev=null,_._prev&&(_._prev._next=null)));s&&s!==_;){if(1>=s.type&&(o=s.p,f[o]=s.s+s.c,p[o]=s.s,n||(h=new _e(s,"s",o,h,s.r),s.c=0),1===s.type))for(a=s.l;--a>0;)l="xn"+a,o=s.p+"_"+l,f[o]=s.data[l],p[o]=s[l],n||(h=new _e(s,l,o,h,s.rxp[l]));s=s._next}return{proxy:p,end:f,firstMPT:h,pt:u}},E.CSSPropTween=function(t,e,s,r,a,o,l,h,u,_,p){this.t=t,this.p=e,this.s=s,this.c=r,this.n=l||e,t instanceof pe||n.push(this.n),this.r=h,this.type=o||0,u&&(this.pr=u,i=!0),this.b=void 0===_?s:_,this.e=void 0===p?s+r:p,a&&(this._next=a,a._prev=this)}),fe=a.parseComplex=function(t,e,i,s,r,n,a,o,l,u){i=i||n||"",a=new pe(t,e,0,0,a,u?2:1,null,!1,o,i,s),s+="";var _,p,f,c,g,v,y,T,x,w,P,S,R=i.split(", ").join(",").split(" "),k=s.split(", ").join(",").split(" "),C=R.length,A=h!==!1;for((-1!==s.indexOf(",")||-1!==i.indexOf(","))&&(R=R.join(" ").replace(D,", ").split(" "),k=k.join(" ").replace(D,", ").split(" "),C=R.length),C!==k.length&&(R=(n||"").split(" "),C=R.length),a.plugin=l,a.setRatio=u,_=0;C>_;_++)if(c=R[_],g=k[_],T=parseFloat(c),T||0===T)a.appendXtra("",T,ie(g,T),g.replace(m,""),A&&-1!==g.indexOf("px"),!0);else if(r&&("#"===c.charAt(0)||ne[c]||b.test(c)))S=","===g.charAt(g.length-1)?"),":")",c=oe(c),g=oe(g),x=c.length+g.length>6,x&&!z&&0===g[3]?(a["xs"+a.l]+=a.l?" transparent":"transparent",a.e=a.e.split(k[_]).join("transparent")):(z||(x=!1),a.appendXtra(x?"rgba(":"rgb(",c[0],g[0]-c[0],",",!0,!0).appendXtra("",c[1],g[1]-c[1],",",!0).appendXtra("",c[2],g[2]-c[2],x?",":S,!0),x&&(c=4>c.length?1:c[3],a.appendXtra("",c,(4>g.length?1:g[3])-c,S,!1)));else if(v=c.match(d)){if(y=g.match(m),!y||y.length!==v.length)return a;for(f=0,p=0;v.length>p;p++)P=v[p],w=c.indexOf(P,f),a.appendXtra(c.substr(f,w-f),Number(P),ie(y[p],P),"",A&&"px"===c.substr(w+P.length,2),0===p),f=w+P.length;a["xs"+a.l]+=c.substr(f)}else a["xs"+a.l]+=a.l?" "+c:c;if(-1!==s.indexOf("=")&&a.data){for(S=a.xs0+a.data.s,_=1;a.l>_;_++)S+=a["xs"+_]+a.data["xn"+_];a.e=S+a["xs"+_]}return a.l||(a.type=-1,a.xs0=a.e),a.xfirst||a},ce=9;for(l=pe.prototype,l.l=l.pr=0;--ce>0;)l["xn"+ce]=0,l["xs"+ce]="";l.xs0="",l._next=l._prev=l.xfirst=l.data=l.plugin=l.setRatio=l.rxp=null,l.appendXtra=function(t,e,i,s,r,n){var a=this,o=a.l;return a["xs"+o]+=n&&o?" "+t:t||"",i||0===o||a.plugin?(a.l++,a.type=a.setRatio?2:1,a["xs"+a.l]=s||"",o>0?(a.data["xn"+o]=e+i,a.rxp["xn"+o]=r,a["xn"+o]=e,a.plugin||(a.xfirst=new pe(a,"xn"+o,e,i,a.xfirst||a,0,a.n,r,a.pr),a.xfirst.xs0=0),a):(a.data={s:e+i},a.rxp={},a.s=e,a.c=i,a.r=r,a)):(a["xs"+o]+=e+(s||""),a)};var de=function(t,e){e=e||{},this.p=e.prefix?q(t)||t:t,o[t]=o[this.p]=this,this.format=e.formatter||he(e.defaultValue,e.color,e.collapsible,e.multi),e.parser&&(this.parse=e.parser),this.clrs=e.color,this.multi=e.multi,this.keyword=e.keyword,this.dflt=e.defaultValue,this.pr=e.priority||0},me=E._registerComplexSpecialProp=function(t,e,i){"object"!=typeof e&&(e={parser:i});var s,r,n=t.split(","),a=e.defaultValue;for(i=i||[a],s=0;n.length>s;s++)e.prefix=0===s&&e.prefix,e.defaultValue=i[s]||a,r=new de(n[s],e)},ge=function(t){if(!o[t]){var e=t.charAt(0).toUpperCase()+t.substr(1)+"Plugin";me(t,{parser:function(t,i,s,r,n,a,l){var h=(window.GreenSockGlobals||window).com.greensock.plugins[e];return h?(h._cssRegister(),o[s].parse(t,i,s,r,n,a,l)):(B("Error: "+e+" js file not loaded."),n)}})}};l=de.prototype,l.parseComplex=function(t,e,i,s,r,n){var a,o,l,h,u,_,p=this.keyword;if(this.multi&&(D.test(i)||D.test(e)?(o=e.replace(D,"|").split("|"),l=i.replace(D,"|").split("|")):p&&(o=[e],l=[i])),l){for(h=l.length>o.length?l.length:o.length,a=0;h>a;a++)e=o[a]=o[a]||this.dflt,i=l[a]=l[a]||this.dflt,p&&(u=e.indexOf(p),_=i.indexOf(p),u!==_&&(i=-1===_?l:o,i[a]+=" "+p));e=o.join(", "),i=l.join(", ")}return fe(t,this.p,e,i,this.clrs,this.dflt,s,this.pr,r,n)},l.parse=function(t,e,i,s,n,a){return this.parseComplex(t.style,this.format(Q(t,this.p,r,!1,this.dflt)),this.format(e),n,a)},a.registerSpecialProp=function(t,e,i){me(t,{parser:function(t,s,r,n,a,o){var l=new pe(t,r,0,0,a,2,r,!1,i);return l.plugin=o,l.setRatio=e(t,s,n._tween,r),l},priority:i})};var ve="scaleX,scaleY,scaleZ,x,y,z,skewX,rotation,rotationX,rotationY,perspective".split(","),ye=q("transform"),Te=j+"transform",xe=q("transformOrigin"),we=null!==q("perspective"),be=function(t,e,i,s){if(t._gsTransform&&i&&!s)return t._gsTransform;var r,n,o,l,h,u,_,p,f,c,d,m,g,v=i?t._gsTransform||{skewY:0}:{skewY:0},y=0>v.scaleX,T=2e-5,x=1e5,w=179.99,b=w*M,P=we?parseFloat(Q(t,xe,e,!1,"0 0 0").split(" ")[2])||v.zOrigin||0:0;for(ye?r=Q(t,Te,e,!0):t.currentStyle&&(r=t.currentStyle.filter.match(A),r=r&&4===r.length?[r[0].substr(4),Number(r[2].substr(4)),Number(r[1].substr(4)),r[3].substr(4),v.x||0,v.y||0].join(","):""),n=(r||"").match(/(?:\-|\b)[\d\-\.e]+\b/gi)||[],o=n.length;--o>-1;)l=Number(n[o]),n[o]=(h=l-(l|=0))?(0|h*x+(0>h?-.5:.5))/x+l:l;if(16===n.length){var S=n[8],R=n[9],k=n[10],C=n[12],O=n[13],D=n[14];if(v.zOrigin&&(D=-v.zOrigin,C=S*D-n[12],O=R*D-n[13],D=k*D+v.zOrigin-n[14]),!i||s||null==v.rotationX){var N,X,F,I,E,Y,z,U=n[0],B=n[1],j=n[2],V=n[3],q=n[4],W=n[5],Z=n[6],H=n[7],$=n[11],G=Math.atan2(Z,k),K=-b>G||G>b;v.rotationX=G*L,G&&(I=Math.cos(-G),E=Math.sin(-G),N=q*I+S*E,X=W*I+R*E,F=Z*I+k*E,S=q*-E+S*I,R=W*-E+R*I,k=Z*-E+k*I,$=H*-E+$*I,q=N,W=X,Z=F),G=Math.atan2(S,U),v.rotationY=G*L,G&&(Y=-b>G||G>b,I=Math.cos(-G),E=Math.sin(-G),N=U*I-S*E,X=B*I-R*E,F=j*I-k*E,R=B*E+R*I,k=j*E+k*I,$=V*E+$*I,U=N,B=X,j=F),G=Math.atan2(B,W),v.rotation=G*L,G&&(z=-b>G||G>b,I=Math.cos(-G),E=Math.sin(-G),U=U*I+q*E,X=B*I+W*E,W=B*-E+W*I,Z=j*-E+Z*I,B=X),z&&K?v.rotation=v.rotationX=0:z&&Y?v.rotation=v.rotationY=0:Y&&K&&(v.rotationY=v.rotationX=0),v.scaleX=(0|Math.sqrt(U*U+B*B)*x+.5)/x,v.scaleY=(0|Math.sqrt(W*W+R*R)*x+.5)/x,v.scaleZ=(0|Math.sqrt(Z*Z+k*k)*x+.5)/x,v.skewX=0,v.perspective=$?1/(0>$?-$:$):0,v.x=C,v.y=O,v.z=D}}else if(!(we&&!s&&n.length&&v.x===n[4]&&v.y===n[5]&&(v.rotationX||v.rotationY)||void 0!==v.x&&"none"===Q(t,"display",e))){var J=n.length>=6,te=J?n[0]:1,ee=n[1]||0,ie=n[2]||0,se=J?n[3]:1;v.x=n[4]||0,v.y=n[5]||0,u=Math.sqrt(te*te+ee*ee),_=Math.sqrt(se*se+ie*ie),p=te||ee?Math.atan2(ee,te)*L:v.rotation||0,f=ie||se?Math.atan2(ie,se)*L+p:v.skewX||0,c=u-Math.abs(v.scaleX||0),d=_-Math.abs(v.scaleY||0),Math.abs(f)>90&&270>Math.abs(f)&&(y?(u*=-1,f+=0>=p?180:-180,p+=0>=p?180:-180):(_*=-1,f+=0>=f?180:-180)),m=(p-v.rotation)%180,g=(f-v.skewX)%180,(void 0===v.skewX||c>T||-T>c||d>T||-T>d||m>-w&&w>m&&false|m*x||g>-w&&w>g&&false|g*x)&&(v.scaleX=u,v.scaleY=_,v.rotation=p,v.skewX=f),we&&(v.rotationX=v.rotationY=v.z=0,v.perspective=parseFloat(a.defaultTransformPerspective)||0,v.scaleZ=1)}v.zOrigin=P;for(o in v)T>v[o]&&v[o]>-T&&(v[o]=0);return i&&(t._gsTransform=v),v},Pe=function(t){var e,i,s=this.data,r=-s.rotation*M,n=r+s.skewX*M,a=1e5,o=(0|Math.cos(r)*s.scaleX*a)/a,l=(0|Math.sin(r)*s.scaleX*a)/a,h=(0|Math.sin(n)*-s.scaleY*a)/a,u=(0|Math.cos(n)*s.scaleY*a)/a,_=this.t.style,p=this.t.currentStyle;if(p){i=l,l=-h,h=-i,e=p.filter,_.filter="";var f,d,m=this.t.offsetWidth,g=this.t.offsetHeight,v="absolute"!==p.position,x="progid:DXImageTransform.Microsoft.Matrix(M11="+o+", M12="+l+", M21="+h+", M22="+u,w=s.x,b=s.y;if(null!=s.ox&&(f=(s.oxp?.01*m*s.ox:s.ox)-m/2,d=(s.oyp?.01*g*s.oy:s.oy)-g/2,w+=f-(f*o+d*l),b+=d-(f*h+d*u)),v?(f=m/2,d=g/2,x+=", Dx="+(f-(f*o+d*l)+w)+", Dy="+(d-(f*h+d*u)+b)+")"):x+=", sizingMethod='auto expand')",_.filter=-1!==e.indexOf("DXImageTransform.Microsoft.Matrix(")?e.replace(O,x):x+" "+e,(0===t||1===t)&&1===o&&0===l&&0===h&&1===u&&(v&&-1===x.indexOf("Dx=0, Dy=0")||T.test(e)&&100!==parseFloat(RegExp.$1)||-1===e.indexOf("gradient("&&e.indexOf("Alpha"))&&_.removeAttribute("filter")),!v){var P,S,R,k=8>c?1:-1;for(f=s.ieOffsetX||0,d=s.ieOffsetY||0,s.ieOffsetX=Math.round((m-((0>o?-o:o)*m+(0>l?-l:l)*g))/2+w),s.ieOffsetY=Math.round((g-((0>u?-u:u)*g+(0>h?-h:h)*m))/2+b),ce=0;4>ce;ce++)S=J[ce],P=p[S],i=-1!==P.indexOf("px")?parseFloat(P):Z(this.t,S,parseFloat(P),P.replace(y,""))||0,R=i!==s[S]?2>ce?-s.ieOffsetX:-s.ieOffsetY:2>ce?f-s.ieOffsetX:d-s.ieOffsetY,_[S]=(s[S]=Math.round(i-R*(0===ce||2===ce?1:k)))+"px"}}},Se=function(){var t,e,i,s,r,n,a,o,l,h,u,_,f,c,d,m,g,v,y,T,x,w,b,P,S,R,k=this.data,C=this.t.style,A=k.rotation*M,O=k.scaleX,D=k.scaleY,L=k.scaleZ,N=k.perspective;if(p&&(P=C.top?"top":C.bottom?"bottom":parseFloat(Q(this.t,"top",null,!1))?"bottom":"top",T=Q(this.t,P,null,!1),S=parseFloat(T)||0,R=T.substr((S+"").length)||"px",k._ffFix=!k._ffFix,C[P]=(k._ffFix?S+.05:S-.05)+R,S=1e-4,S>O&&O>-S&&(O=L=2e-5),S>D&&D>-S&&(D=L=2e-5)),A||k.skewX)v=Math.cos(A),y=Math.sin(A),t=v,r=y,k.skewX&&(A-=k.skewX*M,v=Math.cos(A),y=Math.sin(A)),e=-y,n=v;else{if(!(k.rotationY||k.rotationX||1!==L||N))return C[ye]="translate3d("+k.x+"px,"+k.y+"px,"+k.z+"px)"+(1!==O||1!==D?" scale("+O+","+D+")":""),void 0;t=n=1,e=r=0}u=1,i=s=a=o=l=h=_=f=c=0,d=N?-1/N:0,m=k.zOrigin,g=1e5,A=k.rotationY*M,A&&(v=Math.cos(A),y=Math.sin(A),l=u*-y,f=d*-y,i=t*y,a=r*y,u*=v,d*=v,t*=v,r*=v),A=k.rotationX*M,A&&(v=Math.cos(A),y=Math.sin(A),T=e*v+i*y,x=n*v+a*y,w=h*v+u*y,b=c*v+d*y,i=e*-y+i*v,a=n*-y+a*v,u=h*-y+u*v,d=c*-y+d*v,e=T,n=x,h=w,c=b),1!==L&&(i*=L,a*=L,u*=L,d*=L),1!==D&&(e*=D,n*=D,h*=D,c*=D),1!==O&&(t*=O,r*=O,l*=O,f*=O),m&&(_-=m,s=i*_,o=a*_,_=u*_+m),s=(T=(s+=k.x)-(s|=0))?(0|T*g+(0>T?-.5:.5))/g+s:s,o=(T=(o+=k.y)-(o|=0))?(0|T*g+(0>T?-.5:.5))/g+o:o,_=(T=(_+=k.z)-(_|=0))?(0|T*g+(0>T?-.5:.5))/g+_:_,C[ye]="matrix3d("+[(0|t*g)/g,(0|r*g)/g,(0|l*g)/g,(0|f*g)/g,(0|e*g)/g,(0|n*g)/g,(0|h*g)/g,(0|c*g)/g,(0|i*g)/g,(0|a*g)/g,(0|u*g)/g,(0|d*g)/g,s,o,_,N?1+-_/N:1].join(",")+")"},Re=function(){var t,e,i,s,r,n,a,o,l,h=this.data,u=this.t,_=u.style;p&&(t=_.top?"top":_.bottom?"bottom":parseFloat(Q(u,"top",null,!1))?"bottom":"top",e=Q(u,t,null,!1),i=parseFloat(e)||0,s=e.substr((i+"").length)||"px",h._ffFix=!h._ffFix,_[t]=(h._ffFix?i+.05:i-.05)+s),h.rotation||h.skewX?(r=h.rotation*M,n=r-h.skewX*M,a=1e5,o=h.scaleX*a,l=h.scaleY*a,_[ye]="matrix("+(0|Math.cos(r)*o)/a+","+(0|Math.sin(r)*o)/a+","+(0|Math.sin(n)*-l)/a+","+(0|Math.cos(n)*l)/a+","+h.x+","+h.y+")"):_[ye]="matrix("+h.scaleX+",0,0,"+h.scaleY+","+h.x+","+h.y+")"};me("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective,directionalRotation,parseTransform,force3D",{parser:function(t,e,i,s,n,a,o){if(s._transform)return n;var l,h,u,_,p,f,c,d=s._transform=be(t,r,!0,o.parseTransform),m=t.style,g=1e-6,v=ve.length,y=o,T={};if("string"==typeof y.transform&&ye)u=m.cssText,m[ye]=y.transform,m.display="block",l=be(t,null,!1),m.cssText=u;else if("object"==typeof y){if(l={scaleX:se(null!=y.scaleX?y.scaleX:y.scale,d.scaleX),scaleY:se(null!=y.scaleY?y.scaleY:y.scale,d.scaleY),scaleZ:se(null!=y.scaleZ?y.scaleZ:y.scale,d.scaleZ),x:se(y.x,d.x),y:se(y.y,d.y),z:se(y.z,d.z),perspective:se(y.transformPerspective,d.perspective)},c=y.directionalRotation,null!=c)if("object"==typeof c)for(u in c)y[u]=c[u];else y.rotation=c;l.rotation=re("rotation"in y?y.rotation:"shortRotation"in y?y.shortRotation+"_short":"rotationZ"in y?y.rotationZ:d.rotation,d.rotation,"rotation",T),we&&(l.rotationX=re("rotationX"in y?y.rotationX:"shortRotationX"in y?y.shortRotationX+"_short":d.rotationX||0,d.rotationX,"rotationX",T),l.rotationY=re("rotationY"in y?y.rotationY:"shortRotationY"in y?y.shortRotationY+"_short":d.rotationY||0,d.rotationY,"rotationY",T)),l.skewX=null==y.skewX?d.skewX:re(y.skewX,d.skewX),l.skewY=null==y.skewY?d.skewY:re(y.skewY,d.skewY),(h=l.skewY-d.skewY)&&(l.skewX+=h,l.rotation+=h)}for(null!=y.force3D&&(d.force3D=y.force3D,f=!0),p=d.force3D||d.z||d.rotationX||d.rotationY||l.z||l.rotationX||l.rotationY||l.perspective,p||null==y.scale||(l.scaleZ=1);--v>-1;)i=ve[v],_=l[i]-d[i],(_>g||-g>_||null!=N[i])&&(f=!0,n=new pe(d,i,d[i],_,n),i in T&&(n.e=T[i]),n.xs0=0,n.plugin=a,s._overwriteProps.push(n.n));return _=y.transformOrigin,(_||we&&p&&d.zOrigin)&&(ye?(f=!0,i=xe,_=(_||Q(t,i,r,!1,"50% 50%"))+"",n=new pe(m,i,0,0,n,-1,"transformOrigin"),n.b=m[i],n.plugin=a,we?(u=d.zOrigin,_=_.split(" "),d.zOrigin=(_.length>2&&(0===u||"0px"!==_[2])?parseFloat(_[2]):u)||0,n.xs0=n.e=m[i]=_[0]+" "+(_[1]||"50%")+" 0px",n=new pe(d,"zOrigin",0,0,n,-1,n.n),n.b=u,n.xs0=n.e=d.zOrigin):n.xs0=n.e=m[i]=_):ee(_+"",d)),f&&(s._transformType=p||3===this._transformType?3:2),n},prefix:!0}),me("boxShadow",{defaultValue:"0px 0px 0px 0px #999",prefix:!0,color:!0,multi:!0,keyword:"inset"}),me("borderRadius",{defaultValue:"0px",parser:function(t,e,i,n,a){e=this.format(e);var o,l,h,u,_,p,f,c,d,m,g,v,y,T,x,w,b=["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],P=t.style;for(d=parseFloat(t.offsetWidth),m=parseFloat(t.offsetHeight),o=e.split(" "),l=0;b.length>l;l++)this.p.indexOf("border")&&(b[l]=q(b[l])),_=u=Q(t,b[l],r,!1,"0px"),-1!==_.indexOf(" ")&&(u=_.split(" "),_=u[0],u=u[1]),p=h=o[l],f=parseFloat(_),v=_.substr((f+"").length),y="="===p.charAt(1),y?(c=parseInt(p.charAt(0)+"1",10),p=p.substr(2),c*=parseFloat(p),g=p.substr((c+"").length-(0>c?1:0))||""):(c=parseFloat(p),g=p.substr((c+"").length)),""===g&&(g=s[i]||v),g!==v&&(T=Z(t,"borderLeft",f,v),x=Z(t,"borderTop",f,v),"%"===g?(_=100*(T/d)+"%",u=100*(x/m)+"%"):"em"===g?(w=Z(t,"borderLeft",1,"em"),_=T/w+"em",u=x/w+"em"):(_=T+"px",u=x+"px"),y&&(p=parseFloat(_)+c+g,h=parseFloat(u)+c+g)),a=fe(P,b[l],_+" "+u,p+" "+h,!1,"0px",a);return a},prefix:!0,formatter:he("0px 0px 0px 0px",!1,!0)}),me("backgroundPosition",{defaultValue:"0 0",parser:function(t,e,i,s,n,a){var o,l,h,u,_,p,f="background-position",d=r||W(t,null),m=this.format((d?c?d.getPropertyValue(f+"-x")+" "+d.getPropertyValue(f+"-y"):d.getPropertyValue(f):t.currentStyle.backgroundPositionX+" "+t.currentStyle.backgroundPositionY)||"0 0"),g=this.format(e);if(-1!==m.indexOf("%")!=(-1!==g.indexOf("%"))&&(p=Q(t,"backgroundImage").replace(R,""),p&&"none"!==p)){for(o=m.split(" "),l=g.split(" "),I.setAttribute("src",p),h=2;--h>-1;)m=o[h],u=-1!==m.indexOf("%"),u!==(-1!==l[h].indexOf("%"))&&(_=0===h?t.offsetWidth-I.width:t.offsetHeight-I.height,o[h]=u?parseFloat(m)/100*_+"px":100*(parseFloat(m)/_)+"%");m=o.join(" ")}return this.parseComplex(t.style,m,g,n,a)},formatter:ee}),me("backgroundSize",{defaultValue:"0 0",formatter:ee}),me("perspective",{defaultValue:"0px",prefix:!0}),me("perspectiveOrigin",{defaultValue:"50% 50%",prefix:!0}),me("transformStyle",{prefix:!0}),me("backfaceVisibility",{prefix:!0}),me("userSelect",{prefix:!0}),me("margin",{parser:ue("marginTop,marginRight,marginBottom,marginLeft")}),me("padding",{parser:ue("paddingTop,paddingRight,paddingBottom,paddingLeft")}),me("clip",{defaultValue:"rect(0px,0px,0px,0px)",parser:function(t,e,i,s,n,a){var o,l,h;return 9>c?(l=t.currentStyle,h=8>c?" ":",",o="rect("+l.clipTop+h+l.clipRight+h+l.clipBottom+h+l.clipLeft+")",e=this.format(e).split(",").join(h)):(o=this.format(Q(t,this.p,r,!1,this.dflt)),e=this.format(e)),this.parseComplex(t.style,o,e,n,a)}}),me("textShadow",{defaultValue:"0px 0px 0px #999",color:!0,multi:!0}),me("autoRound,strictUnits",{parser:function(t,e,i,s,r){return r}}),me("border",{defaultValue:"0px solid #000",parser:function(t,e,i,s,n,a){return this.parseComplex(t.style,this.format(Q(t,"borderTopWidth",r,!1,"0px")+" "+Q(t,"borderTopStyle",r,!1,"solid")+" "+Q(t,"borderTopColor",r,!1,"#000")),this.format(e),n,a)},color:!0,formatter:function(t){var e=t.split(" ");return e[0]+" "+(e[1]||"solid")+" "+(t.match(le)||["#000"])[0]}}),me("float,cssFloat,styleFloat",{parser:function(t,e,i,s,r){var n=t.style,a="cssFloat"in n?"cssFloat":"styleFloat";return new pe(n,a,0,0,r,-1,i,!1,0,n[a],e)}});var ke=function(t){var e,i=this.t,s=i.filter||Q(this.data,"filter"),r=0|this.s+this.c*t;100===r&&(-1===s.indexOf("atrix(")&&-1===s.indexOf("radient(")&&-1===s.indexOf("oader(")?(i.removeAttribute("filter"),e=!Q(this.data,"filter")):(i.filter=s.replace(w,""),e=!0)),e||(this.xn1&&(i.filter=s=s||"alpha(opacity="+r+")"),-1===s.indexOf("opacity")?0===r&&this.xn1||(i.filter=s+" alpha(opacity="+r+")"):i.filter=s.replace(T,"opacity="+r))};me("opacity,alpha,autoAlpha",{defaultValue:"1",parser:function(t,e,i,s,n,a){var o=parseFloat(Q(t,"opacity",r,!1,"1")),l=t.style,h="autoAlpha"===i;return"string"==typeof e&&"="===e.charAt(1)&&(e=("-"===e.charAt(0)?-1:1)*parseFloat(e.substr(2))+o),h&&1===o&&"hidden"===Q(t,"visibility",r)&&0!==e&&(o=0),z?n=new pe(l,"opacity",o,e-o,n):(n=new pe(l,"opacity",100*o,100*(e-o),n),n.xn1=h?1:0,l.zoom=1,n.type=2,n.b="alpha(opacity="+n.s+")",n.e="alpha(opacity="+(n.s+n.c)+")",n.data=t,n.plugin=a,n.setRatio=ke),h&&(n=new pe(l,"visibility",0,0,n,-1,null,!1,0,0!==o?"inherit":"hidden",0===e?"hidden":"inherit"),n.xs0="inherit",s._overwriteProps.push(n.n),s._overwriteProps.push(i)),n}});var Ce=function(t,e){e&&(t.removeProperty?t.removeProperty(e.replace(P,"-$1").toLowerCase()):t.removeAttribute(e))},Ae=function(t){if(this.t._gsClassPT=this,1===t||0===t){this.t.className=0===t?this.b:this.e;for(var e=this.data,i=this.t.style;e;)e.v?i[e.p]=e.v:Ce(i,e.p),e=e._next;1===t&&this.t._gsClassPT===this&&(this.t._gsClassPT=null)}else this.t.className!==this.e&&(this.t.className=this.e)};me("className",{parser:function(t,e,s,n,a,o,l){var h,u,_,p,f,c=t.className,d=t.style.cssText;if(a=n._classNamePT=new pe(t,s,0,0,a,2),a.setRatio=Ae,a.pr=-11,i=!0,a.b=c,u=$(t,r),_=t._gsClassPT){for(p={},f=_.data;f;)p[f.p]=1,f=f._next;_.setRatio(1)}return t._gsClassPT=a,a.e="="!==e.charAt(1)?e:c.replace(RegExp("\\s*\\b"+e.substr(2)+"\\b"),"")+("+"===e.charAt(0)?" "+e.substr(2):""),n._tween._duration&&(t.className=a.e,h=G(t,u,$(t),l,p),t.className=c,a.data=h.firstMPT,t.style.cssText=d,a=a.xfirst=n.parse(t,h.difs,a,o)),a}});var Oe=function(t){if((1===t||0===t)&&this.data._totalTime===this.data._totalDuration&&"isFromStart"!==this.data.data){var e,i,s,r,n=this.t.style,a=o.transform.parse;if("all"===this.e)n.cssText="",r=!0;else for(e=this.e.split(","),s=e.length;--s>-1;)i=e[s],o[i]&&(o[i].parse===a?r=!0:i="transformOrigin"===i?xe:o[i].p),Ce(n,i);r&&(Ce(n,ye),this.t._gsTransform&&delete this.t._gsTransform)}};for(me("clearProps",{parser:function(t,e,s,r,n){return n=new pe(t,s,0,0,n,2),n.setRatio=Oe,n.e=e,n.pr=-10,n.data=r._tween,i=!0,n}}),l="bezier,throwProps,physicsProps,physics2D".split(","),ce=l.length;ce--;)ge(l[ce]);l=a.prototype,l._firstPT=null,l._onInitTween=function(t,e,o){if(!t.nodeType)return!1;this._target=t,this._tween=o,this._vars=e,h=e.autoRound,i=!1,s=e.suffixMap||a.suffixMap,r=W(t,""),n=this._overwriteProps;var l,p,c,d,m,g,v,y,T,w=t.style;if(u&&""===w.zIndex&&(l=Q(t,"zIndex",r),("auto"===l||""===l)&&(w.zIndex=0)),"string"==typeof e&&(d=w.cssText,l=$(t,r),w.cssText=d+";"+e,l=G(t,l,$(t)).difs,!z&&x.test(e)&&(l.opacity=parseFloat(RegExp.$1)),e=l,w.cssText=d),this._firstPT=p=this.parse(t,e,null),this._transformType){for(T=3===this._transformType,ye?_&&(u=!0,""===w.zIndex&&(v=Q(t,"zIndex",r),("auto"===v||""===v)&&(w.zIndex=0)),f&&(w.WebkitBackfaceVisibility=this._vars.WebkitBackfaceVisibility||(T?"visible":"hidden"))):w.zoom=1,c=p;c&&c._next;)c=c._next;y=new pe(t,"transform",0,0,null,2),this._linkCSSP(y,null,c),y.setRatio=T&&we?Se:ye?Re:Pe,y.data=this._transform||be(t,r,!0),n.pop()}if(i){for(;p;){for(g=p._next,c=d;c&&c.pr>p.pr;)c=c._next;(p._prev=c?c._prev:m)?p._prev._next=p:d=p,(p._next=c)?c._prev=p:m=p,p=g}this._firstPT=d}return!0},l.parse=function(t,e,i,n){var a,l,u,_,p,f,c,d,m,g,v=t.style;for(a in e)f=e[a],l=o[a],l?i=l.parse(t,f,a,this,i,n,e):(p=Q(t,a,r)+"",m="string"==typeof f,"color"===a||"fill"===a||"stroke"===a||-1!==a.indexOf("Color")||m&&b.test(f)?(m||(f=oe(f),f=(f.length>3?"rgba(":"rgb(")+f.join(",")+")"),i=fe(v,a,p,f,!0,"transparent",i,0,n)):!m||-1===f.indexOf(" ")&&-1===f.indexOf(",")?(u=parseFloat(p),c=u||0===u?p.substr((u+"").length):"",(""===p||"auto"===p)&&("width"===a||"height"===a?(u=te(t,a,r),c="px"):"left"===a||"top"===a?(u=H(t,a,r),c="px"):(u="opacity"!==a?0:1,c="")),g=m&&"="===f.charAt(1),g?(_=parseInt(f.charAt(0)+"1",10),f=f.substr(2),_*=parseFloat(f),d=f.replace(y,"")):(_=parseFloat(f),d=m?f.substr((_+"").length)||"":""),""===d&&(d=s[a]||c),f=_||0===_?(g?_+u:_)+d:e[a],c!==d&&""!==d&&(_||0===_)&&(u||0===u)&&(u=Z(t,a,u,c),"%"===d?(u/=Z(t,a,100,"%")/100,u>100&&(u=100),e.strictUnits!==!0&&(p=u+"%")):"em"===d?u/=Z(t,a,1,"em"):(_=Z(t,a,_,d),d="px"),g&&(_||0===_)&&(f=_+u+d)),g&&(_+=u),!u&&0!==u||!_&&0!==_?void 0!==v[a]&&(f||"NaN"!=f+""&&null!=f)?(i=new pe(v,a,_||u||0,0,i,-1,a,!1,0,p,f),i.xs0="none"!==f||"display"!==a&&-1===a.indexOf("Style")?f:p):B("invalid "+a+" tween value: "+e[a]):(i=new pe(v,a,u,_-u,i,0,a,h!==!1&&("px"===d||"zIndex"===a),0,p,f),i.xs0=d)):i=fe(v,a,p,f,!0,null,i,0,n)),n&&i&&!i.plugin&&(i.plugin=n);return i},l.setRatio=function(t){var e,i,s,r=this._firstPT,n=1e-6;if(1!==t||this._tween._time!==this._tween._duration&&0!==this._tween._time)if(t||this._tween._time!==this._tween._duration&&0!==this._tween._time||this._tween._rawPrevTime===-1e-6)for(;r;){if(e=r.c*t+r.s,r.r?e=e>0?0|e+.5:0|e-.5:n>e&&e>-n&&(e=0),r.type)if(1===r.type)if(s=r.l,2===s)r.t[r.p]=r.xs0+e+r.xs1+r.xn1+r.xs2;else if(3===s)r.t[r.p]=r.xs0+e+r.xs1+r.xn1+r.xs2+r.xn2+r.xs3;else if(4===s)r.t[r.p]=r.xs0+e+r.xs1+r.xn1+r.xs2+r.xn2+r.xs3+r.xn3+r.xs4;else if(5===s)r.t[r.p]=r.xs0+e+r.xs1+r.xn1+r.xs2+r.xn2+r.xs3+r.xn3+r.xs4+r.xn4+r.xs5;else{for(i=r.xs0+e+r.xs1,s=1;r.l>s;s++)i+=r["xn"+s]+r["xs"+(s+1)];r.t[r.p]=i}else-1===r.type?r.t[r.p]=r.xs0:r.setRatio&&r.setRatio(t);else r.t[r.p]=e+r.xs0;r=r._next}else for(;r;)2!==r.type?r.t[r.p]=r.b:r.setRatio(t),r=r._next;else for(;r;)2!==r.type?r.t[r.p]=r.e:r.setRatio(t),r=r._next},l._enableTransforms=function(t){this._transformType=t||3===this._transformType?3:2,this._transform=this._transform||be(this._target,r,!0)},l._linkCSSP=function(t,e,i,s){return t&&(e&&(e._prev=t),t._next&&(t._next._prev=t._prev),t._prev?t._prev._next=t._next:this._firstPT===t&&(this._firstPT=t._next,s=!0),i?i._next=t:s||null!==this._firstPT||(this._firstPT=t),t._next=e,t._prev=i),t},l._kill=function(e){var i,s,r,n=e;if(e.autoAlpha||e.alpha){n={};for(s in e)n[s]=e[s];n.opacity=1,n.autoAlpha&&(n.visibility=1)}return e.className&&(i=this._classNamePT)&&(r=i.xfirst,r&&r._prev?this._linkCSSP(r._prev,i._next,r._prev._prev):r===this._firstPT&&(this._firstPT=i._next),i._next&&this._linkCSSP(i._next,i._next._next,r._prev),this._classNamePT=null),t.prototype._kill.call(this,n)};var De=function(t,e,i){var s,r,n,a;if(t.slice)for(r=t.length;--r>-1;)De(t[r],e,i);else for(s=t.childNodes,r=s.length;--r>-1;)n=s[r],a=n.type,n.style&&(e.push($(n)),i&&i.push(n)),1!==a&&9!==a&&11!==a||!n.childNodes.length||De(n,e,i)};return a.cascadeTo=function(t,i,s){var r,n,a,o=e.to(t,i,s),l=[o],h=[],u=[],_=[],p=e._internals.reservedProps;for(t=o._targets||o.target,De(t,h,_),o.render(i,!0),De(t,u),o.render(0,!0),o._enabled(!0),r=_.length;--r>-1;)if(n=G(_[r],h[r],u[r]),n.firstMPT){n=n.difs;for(a in s)p[a]&&(n[a]=s[a]);l.push(e.to(_[r],i,n))}return l},t.activate([a]),a},!0)}),window._gsDefine&&window._gsQueue.pop()(); + +// WAIT FOR IMAGES +/* + * waitForImages 1.4 + * ----------------- + * Provides a callback when all images have loaded in your given selector. + * http://www.alexanderdickson.com/ + * + * + * Copyright (c) 2011 Alex Dickson + * Licensed under the MIT licenses. + * See website for more info. + * + */ + +(function(e,t){ + e.waitForImages={hasImageProperties:["backgroundImage","listStyleImage","borderImage","borderCornerImage"]};e.expr[":"].uncached=function(t){var n=document.createElement("img");n.src=t.src;return e(t).is('img[src!=""]')&&!n.complete};e.fn.waitForImages=function(t,n,r){if(e.isPlainObject(arguments[0])){n=t.each;r=t.waitForAll;t=t.finished}t=t||e.noop;n=n||e.noop;r=!!r;if(!e.isFunction(t)||!e.isFunction(n)){throw new TypeError("An invalid callback was supplied.")}return this.each(function(){var i=e(this),s=[];if(r){var o=e.waitForImages.hasImageProperties||[],u=/url\((['"]?)(.*?)\1\)/g;i.find("*").each(function(){var t=e(this);if(t.is("img:uncached")){s.push({src:t.attr("src"),element:t[0]})}e.each(o,function(e,n){var r=t.css(n);if(!r){return true}var i;while(i=u.exec(r)){s.push({src:i[2],element:t[0]})}})})}else{i.find("img:uncached").each(function(){s.push({src:this.src,element:this})})}var f=s.length,l=0;if(f==0){t.call(i[0])}e.each(s,function(r,s){var o=new Image;e(o).bind("load error",function(e){l++;n.call(s.element,l,f,e.type=="load");if(l==f){t.call(i[0]);return false}});o.src=s.src})})}; + e.fn.swipe=function(t){if(!this)return false;var n={fingers:1,threshold:75,swipe:null,swipeLeft:null,swipeRight:null,swipeUp:null,swipeDown:null,swipeStatus:null,click:null,triggerOnTouchEnd:true,allowPageScroll:"auto"};var r="left";var i="right";var s="up";var o="down";var u="none";var f="horizontal";var l="vertical";var c="auto";var h="start";var p="move";var d="end";var v="cancel";var m="ontouchstart"in window,g=m?"touchstart":"mousedown",y=m?"touchmove":"mousemove",b=m?"touchend":"mouseup",w="touchcancel";var E="start";if(t.allowPageScroll==undefined&&(t.swipe!=undefined||t.swipeStatus!=undefined))t.allowPageScroll=u;if(t)e.extend(n,t);return this.each(function(){function t(){var e=S();if(e<=45&&e>=0)return r;else if(e<=360&&e>=315)return r;else if(e>=135&&e<=225)return i;else if(e>45&&e<135)return o;else return s}function S(){var e=H.x-B.x;var t=B.y-H.y;var n=Math.atan2(t,e);var r=Math.round(n*180/Math.PI);if(r<0)r=360-Math.abs(r);return r}function x(){return Math.round(Math.sqrt(Math.pow(B.x-H.x,2)+Math.pow(B.y-H.y,2)))}function T(e,t){if(n.allowPageScroll==u){e.preventDefault()}else{var a=n.allowPageScroll==c;switch(t){case r:if(n.swipeLeft&&a||!a&&n.allowPageScroll!=f)e.preventDefault();break;case i:if(n.swipeRight&&a||!a&&n.allowPageScroll!=f)e.preventDefault();break;case s:if(n.swipeUp&&a||!a&&n.allowPageScroll!=l)e.preventDefault();break;case o:if(n.swipeDown&&a||!a&&n.allowPageScroll!=l)e.preventDefault();break}}}function N(e,t){if(n.swipeStatus)n.swipeStatus.call(_,e,t,direction||null,distance||0);if(t==v){if(n.click&&(P==1||!m)&&(isNaN(distance)||distance==0))n.click.call(_,e,e.target)}if(t==d){if(n.swipe){n.swipe.call(_,e,direction,distance)}switch(direction){case r:if(n.swipeLeft)n.swipeLeft.call(_,e,direction,distance);break;case i:if(n.swipeRight)n.swipeRight.call(_,e,direction,distance);break;case s:if(n.swipeUp)n.swipeUp.call(_,e,direction,distance);break;case o:if(n.swipeDown)n.swipeDown.call(_,e,direction,distance);break}}}function C(e){P=0;H.x=0;H.y=0;B.x=0;B.y=0;F.x=0;F.y=0}function L(e){e.preventDefault();distance=x();direction=t();if(n.triggerOnTouchEnd){E=d;if((P==n.fingers||!m)&&B.x!=0){if(distance>=n.threshold){N(e,E);C(e)}else{E=v;N(e,E);C(e)}}else{E=v;N(e,E);C(e)}}else if(E==p){E=v;N(e,E);C(e)}M.removeEventListener(y,A,false);M.removeEventListener(b,L,false)}function A(e){if(E==d||E==v)return;var r=m?e.touches[0]:e;B.x=r.pageX;B.y=r.pageY;direction=t();if(m){P=e.touches.length}E=p;T(e,direction);if(P==n.fingers||!m){distance=x();if(n.swipeStatus)N(e,E,direction,distance);if(!n.triggerOnTouchEnd){if(distance>=n.threshold){E=d;N(e,E);C(e)}}}else{E=v;N(e,E);C(e)}}function O(e){var t=m?e.touches[0]:e;E=h;if(m){P=e.touches.length}distance=0;direction=null;if(P==n.fingers||!m){H.x=B.x=t.pageX;H.y=B.y=t.pageY;if(n.swipeStatus)N(e,E)}else{C(e)}M.addEventListener(y,A,false);M.addEventListener(b,L,false)}var M=this;var _=e(this);var D=null;var P=0;var H={x:0,y:0};var B={x:0,y:0};var F={x:0,y:0};try{this.addEventListener(g,O,false);this.addEventListener(w,C)}catch(I){}})} +})(jQuery) diff --git a/src/wp-content/plugins/revslider/rs-plugin/js/jquery.themepunch.revolution.js b/src/wp-content/plugins/revslider/rs-plugin/js/jquery.themepunch.revolution.js new file mode 100644 index 0000000..5c5f2f9 --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/js/jquery.themepunch.revolution.js @@ -0,0 +1,4889 @@ + + +/************************************************************************** + * jquery.themepunch.revolution.js - jQuery Plugin for Revolution Slider + * @version: 4.1.2 (12.12.2013) + * @requires jQuery v1.7 or later (tested on 1.9) + * @author ThemePunch +**************************************************************************/ + + +(function(jQuery,undefined){ + + + //////////////////////////////////////// + // THE REVOLUTION PLUGIN STARTS HERE // + /////////////////////////////////////// + + jQuery.fn.extend({ + + // OUR PLUGIN HERE :) + revolution: function(options) { + + + + //////////////////////////////// + // SET DEFAULT VALUES OF ITEM // + //////////////////////////////// + jQuery.fn.revolution.defaults = { + delay:9000, + startheight:500, + startwidth:960, + fullScreenAlignForce:"off", + autoHeight:"off", + + hideThumbs:200, + + thumbWidth:100, // Thumb With and Height and Amount (only if navigation Tyope set to thumb !) + thumbHeight:50, + thumbAmount:3, + + navigationType:"bullet", // bullet, thumb, none + navigationArrows:"solo", // nextto, solo, none + + hideThumbsOnMobile:"off", + hideBulletsOnMobile:"off", + hideArrowsOnMobile:"off", + hideThumbsUnderResoluition:0, + + navigationStyle:"round", // round,square,navbar,round-old,square-old,navbar-old, or any from the list in the docu (choose between 50+ different item), + + navigationHAlign:"center", // Vertical Align top,center,bottom + navigationVAlign:"bottom", // Horizontal Align left,center,right + navigationHOffset:0, + navigationVOffset:20, + + soloArrowLeftHalign:"left", + soloArrowLeftValign:"center", + soloArrowLeftHOffset:20, + soloArrowLeftVOffset:0, + + soloArrowRightHalign:"right", + soloArrowRightValign:"center", + soloArrowRightHOffset:20, + soloArrowRightVOffset:0, + + keyboardNavigation:"on", + + touchenabled:"on", // Enable Swipe Function : on/off + onHoverStop:"on", // Stop Banner Timet at Hover on Slide on/off + + + stopAtSlide:-1, // Stop Timer if Slide "x" has been Reached. If stopAfterLoops set to 0, then it stops already in the first Loop at slide X which defined. -1 means do not stop at any slide. stopAfterLoops has no sinn in this case. + stopAfterLoops:-1, // Stop Timer if All slides has been played "x" times. IT will stop at THe slide which is defined via stopAtSlide:x, if set to -1 slide never stop automatic + + hideCaptionAtLimit:0, // It Defines if a caption should be shown under a Screen Resolution ( Basod on The Width of Browser) + hideAllCaptionAtLimit:0, // Hide all The Captions if Width of Browser is less then this value + hideSliderAtLimit:0, // Hide the whole slider, and stop also functions if Width of Browser is less than this value + + shadow:0, //0 = no Shadow, 1,2,3 = 3 Different Art of Shadows (No Shadow in Fullwidth Version !) + fullWidth:"off", // Turns On or Off the Fullwidth Image Centering in FullWidth Modus + fullScreen:"off", + minFullScreenHeight:0, // The Minimum FullScreen Height + fullScreenOffsetContainer:"", + dottedOverlay:"none", //twoxtwo, threexthree, twoxtwowhite, threexthreewhite + + forceFullWidth:"off" // Force The FullWidth + + }; + + options = jQuery.extend({}, jQuery.fn.revolution.defaults, options); + + + + + + return this.each(function() { + + var opt=options; + + if (opt.fullWidth!="on" && opt.fullScreen!="on") opt.autoHeight = "off"; + if (opt.fullScreen=="on") opt.autoHeight = "on"; + if (opt.fullWidth!="on" && opt.fullScreen!="on") forceFulWidth="off"; + + var container=jQuery(this); + + if (opt.fullWidth=="on" && opt.autoHeight=="off") + container.css({maxHeight:opt.startheight+"px"}); + + if (is_mobile() && opt.hideThumbsOnMobile=="on" && opt.navigationType=="thumb") + opt.navigationType = "none" + + if (is_mobile() && opt.hideBulletsOnMobile=="on" && opt.navigationType=="bullet") + opt.navigationType = "none" + + if (is_mobile() && opt.hideBulletsOnMobile=="on" && opt.navigationType=="both") + opt.navigationType = "none" + + if (is_mobile() && opt.hideArrowsOnMobile=="on") + opt.navigationArrows = "none" + + if (opt.forceFullWidth=="on") { + + var loff = container.parent().offset().left; + var mb = container.parent().css('marginBottom'); + var mt = container.parent().css('marginTop'); + if (mb==undefined) mb=0; + if (mt==undefined) mt=0; + + container.parent().wrap('
            '); + container.closest('.forcefullwidth_wrapper_tp_banner').append('
            '); + container.css({'backgroundColor':container.parent().css('backgroundColor'),'backgroundImage':container.parent().css('backgroundImage')}); + //container.parent().css({'position':'absolute','width':jQuery(window).width()}); + container.parent().css({'left':(0-loff)+"px",position:'absolute','width':jQuery(window).width()}); + opt.width=jQuery(window).width(); + } + + // HIDE THUMBS UNDER RESOLUTION + try{ + if (opt.hideThumbsUnderResolution>jQuery(window).width() && opt.hideThumbsUnderResolution!=0) { + container.parent().find('.tp-bullets.tp-thumbs').css({display:"none"}); + } else { + container.parent().find('.tp-bullets.tp-thumbs').css({display:"block"}); + } + } catch(e) {} + + if (!container.hasClass("revslider-initialised")) { + + container.addClass("revslider-initialised"); + if (container.attr('id')==undefined) container.attr('id',"revslider-"+Math.round(Math.random()*1000+5)); + + // CHECK IF FIREFOX 13 IS ON WAY.. IT HAS A STRANGE BUG, CSS ANIMATE SHOULD NOT BE USED + + + + opt.firefox13 = false; + opt.ie = !jQuery.support.opacity; + opt.ie9 = (document.documentMode == 9); + + + // CHECK THE jQUERY VERSION + var version = jQuery.fn.jquery.split('.'), + versionTop = parseFloat(version[0]), + versionMinor = parseFloat(version[1]), + versionIncrement = parseFloat(version[2] || '0'); + + if (versionTop==1 && versionMinor < 7) { + container.html('
            The Current Version of jQuery:'+version+'
            Please update your jQuery Version to min. 1.7 in Case you wish to use the Revolution Slider Plugin
            '); + } + + if (versionTop>1) opt.ie=false; + + + // Delegate .transition() calls to .animate() + // if the browser can't do CSS transitions. + if (!jQuery.support.transition) + jQuery.fn.transition = jQuery.fn.animate; + + // CATCH THE CONTAINER + + + // LOAD THE YOUTUBE API IF NECESSARY + + container.find('.caption').each(function() { jQuery(this).addClass('tp-caption')}); + + if (is_mobile()) { + container.find('.tp-caption').each(function() { + if (jQuery(this).data('autoplay')==true) + jQuery(this).data('autoplay',false); + // && jQuery(this).data('forcecover')!=1) + }) + } + + + var addedyt=0; + var addedvim=0; + var addedvid=0; + var httpprefix = "http"; + + if (location.protocol === 'https:') { + httpprefix = "https"; + } + container.find('.tp-caption iframe').each(function(i) { + try { + + if (jQuery(this).attr('src').indexOf('you')>0 && addedyt==0) { + addedyt=1; + var s = document.createElement("script"); + s.src = httpprefix+"://www.youtube.com/player_api"; /* Load Player API*/ + var before = document.getElementsByTagName("script")[0]; + var loadit = true; + jQuery('head').find('*').each(function(){ + if (jQuery(this).attr('src') == httpprefix+"://www.youtube.com/iframe_api") + loadit = false; + }); + if (loadit) + before.parentNode.insertBefore(s, before); + } + } catch(e) {} + }); + + + + // LOAD THE VIMEO API + container.find('.tp-caption iframe').each(function(i) { + try{ + if (jQuery(this).attr('src').indexOf('vim')>0 && addedvim==0) { + addedvim=1; + var f = document.createElement("script"); + f.src = httpprefix+"://a.vimeocdn.com/js/froogaloop2.min.js"; /* Load Player API*/ + var before = document.getElementsByTagName("script")[0]; + + var loadit = true; + jQuery('head').find('*').each(function(){ + if (jQuery(this).attr('src') == httpprefix+"://a.vimeocdn.com/js/froogaloop2.min.js") + loadit = false; + }); + if (loadit) + before.parentNode.insertBefore(f, before); + } + } catch(e) {} + }); + + + + + + // LOAD THE VIDEO.JS API IF NEEDED + container.find('.tp-caption video').each(function(i) { + try{ + if (jQuery(this).hasClass('video-js') && addedvid==0) { + addedvid=1; + var f = document.createElement("script"); + f.src = opt.videoJsPath+"video.js"; /* Load Player API*/ + var before = document.getElementsByTagName("script")[0]; + + var loadit = true; + jQuery('head').find('*').each(function(){ + if (jQuery(this).attr('src') == opt.videoJsPath+"video.js") + loadit = false; + }); + if (loadit) { + before.parentNode.insertBefore(f, before); + jQuery('head').append(''); + jQuery('head').append(''); + } + } + } catch(e) {} + }); + + // SHUFFLE MODE + if (opt.shuffle=="on") { + for (var u=0;uul:first-child >li').length;u++) { + var it = Math.round(Math.random()*container.find('>ul:first-child >li').length); + container.find('>ul:first-child >li:eq('+it+')').prependTo(container.find('>ul:first-child')); + } + } + + + // CREATE SOME DEFAULT OPTIONS FOR LATER + opt.slots=4; + opt.act=-1; + opt.next=0; + + // IF START SLIDE IS SET + if (opt.startWithSlide !=undefined) opt.next=opt.startWithSlide; + + // IF DEEPLINK HAS BEEN SET + var deeplink = getUrlVars("#")[0]; + if (deeplink.length<9) { + if (deeplink.split('slide').length>1) { + var dslide=parseInt(deeplink.split('slide')[1],0); + if (dslide<1) dslide=1; + if (dslide>container.find('>ul:first >li').length) dslide=container.find('>ul:first >li').length; + opt.next=dslide-1; + } + } + + + opt.origcd=opt.delay; + opt.firststart=1; + + // BASIC OFFSET POSITIONS OF THE BULLETS + if (opt.navigationHOffset==undefined) opt.navOffsetHorizontal=0; + if (opt.navigationVOffset==undefined) opt.navOffsetVertical=0; + + + container.append('
            '); + + // RESET THE TIMER + if (container.find('.tp-bannertimer').length==0) container.append(''); + var bt=container.find('.tp-bannertimer'); + if (bt.length>0) { + bt.css({'width':'0%'}); + }; + + + // WE NEED TO ADD A BASIC CLASS FOR SETTINGS.CSS + container.addClass("tp-simpleresponsive"); + opt.container=container; + + //if (container.height()==0) container.height(opt.startheight); + + // AMOUNT OF THE SLIDES + opt.slideamount = container.find('>ul:first >li').length; + + + // A BASIC GRID MUST BE DEFINED. IF NO DEFAULT GRID EXIST THAN WE NEED A DEFAULT VALUE, ACTUAL SIZE OF CONAINER + if (container.height()==0) container.height(opt.startheight); + if (opt.startwidth==undefined || opt.startwidth==0) opt.startwidth=container.width(); + if (opt.startheight==undefined || opt.startheight==0) opt.startheight=container.height(); + + // OPT WIDTH && HEIGHT SHOULD BE SET + opt.width=container.width(); + opt.height=container.height(); + + + // DEFAULT DEPENDECIES + opt.bw= opt.startwidth / container.width(); + opt.bh = opt.startheight / container.height(); + + // IF THE ITEM ALREADY IN A RESIZED FORM + if (opt.width!=opt.startwidth) { + + opt.height = Math.round(opt.startheight * (opt.width/opt.startwidth)); + + container.height(opt.height); + + } + + // LETS SEE IF THERE IS ANY SHADOW + if (opt.shadow!=0) { + container.parent().append('
            '); + var loff=0; + if (opt.forceFullWidth=="on") + loff = 0-opt.container.parent().offset().left; + container.parent().find('.tp-bannershadow').css({'width':opt.width,'left':loff}); + } + + + container.find('ul').css({'display':'none'}); + + var fliparent = container; + + // CHECK IF LAZY LOAD HAS BEEN ACTIVATED + if (opt.lazyLoad=="on") { + var fli = container.find('ul >li >img').first(); + if (fli.data('lazyload')!=undefined) fli.attr('src',fli.data('lazyload')); + fli.data('lazydone',1); + fliparent = fli.parent(); + } + + + // IF IMAGES HAS BEEN LOADED + fliparent.waitForImages(function() { + // PREPARE THE SLIDES + container.find('ul').css({'display':'block'}); + prepareSlides(container,opt); + + // CREATE BULLETS + if (opt.slideamount >1) createBullets(container,opt); + if (opt.slideamount >1) createThumbs(container,opt); + if (opt.slideamount >1) createArrows(container,opt); + if (opt.keyboardNavigation=="on") createKeyboard(container,opt); + + swipeAction(container,opt); + + if (opt.hideThumbs>0) hideThumbs(container,opt); + + + container.waitForImages(function() { + // START THE FIRST SLIDE + + container.find('.tp-loader').fadeOut(600); + setTimeout(function() { + + swapSlide(container,opt); + // START COUNTDOWN + if (opt.slideamount >1) countDown(container,opt); + container.trigger('revolution.slide.onloaded'); + },600); + + }); + }); + + + + // IF RESIZED, NEED TO STOP ACTUAL TRANSITION AND RESIZE ACTUAL IMAGES + jQuery(window).resize(function() { + if (jQuery('body').find(container)!=0) + if (opt.forceFullWidth=="on" ) { + + var loff = opt.container.closest('.forcefullwidth_wrapper_tp_banner').offset().left; + //opt.container.parent().css({'width':jQuery(window).width()}); + opt.container.parent().css({'left':(0-loff)+"px",'width':jQuery(window).width()}); + } + + if (container.outerWidth(true)!=opt.width) { + containerResized(container,opt); + } + }); + + // HIDE THUMBS UNDER SIZE... + try{ + if (opt.hideThumbsUnderResoluition!=0 && opt.navigationType=="thumb") { + if (opt.hideThumbsUnderResoluition>jQuery(window).width()) + jQuery('.tp-bullets').css({display:"none"}); + else + jQuery('.tp-bullets').css({display:"block"}); + } + } catch(e) {} + + + + // CHECK IF THE CAPTION IS A "SCROLL ME TO POSITION" CAPTION IS + //if (opt.fullScreen=="on") { + container.find('.tp-scrollbelowslider').on('click',function() { + var off=0; + try{ + off = jQuery('body').find(opt.fullScreenOffsetContainer).height(); + } catch(e) {} + try{ + off = off - jQuery(this).data('scrolloffset'); + } catch(e) {} + + jQuery('body,html').animate( + {scrollTop:(container.offset().top+(container.find('>ul >li').height())-off)+"px"},{duration:400}); + }); + //} + } + + }) + }, + + + // METHODE PAUSE + revscroll: function(oy) { + return this.each(function() { + var container=jQuery(this); + jQuery('body,html').animate( + {scrollTop:(container.offset().top+(container.find('>ul >li').height())-oy)+"px"},{duration:400}); + }) + }, + + // METHODE PAUSE + revredraw: function(oy) { + return this.each(function() { + var container=jQuery(this); + var bt = container.parent().find('.tp-bannertimer'); + var opt = bt.data('opt'); + containerResized(container,opt); + + }) + }, + + // METHODE PAUSE + revpause: function(options) { + + return this.each(function() { + var container=jQuery(this); + container.data('conthover',1); + container.data('conthover-changed',1); + container.trigger('revolution.slide.onpause'); + var bt = container.parent().find('.tp-bannertimer'); + bt.stop(); + + }) + + + }, + + // METHODE RESUME + revresume: function(options) { + return this.each(function() { + var container=jQuery(this); + container.data('conthover',0); + container.data('conthover-changed',1); + container.trigger('revolution.slide.onresume'); + var bt = container.parent().find('.tp-bannertimer'); + var opt = bt.data('opt'); + + bt.animate({'width':"100%"},{duration:((opt.delay-opt.cd)-100),queue:false, easing:"linear"}); + }) + + }, + + // METHODE NEXT + revnext: function(options) { + return this.each(function() { + // CATCH THE CONTAINER + var container=jQuery(this); + container.parent().find('.tp-rightarrow').click(); + + + }) + + }, + + // METHODE RESUME + revprev: function(options) { + return this.each(function() { + // CATCH THE CONTAINER + var container=jQuery(this); + container.parent().find('.tp-leftarrow').click(); + }) + + }, + + // METHODE LENGTH + revmaxslide: function(options) { + // CATCH THE CONTAINER + return jQuery(this).find('>ul:first-child >li').length; + }, + + + // METHODE CURRENT + revcurrentslide: function(options) { + // CATCH THE CONTAINER + var container=jQuery(this); + var bt = container.parent().find('.tp-bannertimer'); + var opt = bt.data('opt'); + return opt.act; + }, + + // METHODE CURRENT + revlastslide: function(options) { + // CATCH THE CONTAINER + var container=jQuery(this); + var bt = container.parent().find('.tp-bannertimer'); + var opt = bt.data('opt'); + return opt.lastslide; + }, + + + // METHODE JUMP TO SLIDE + revshowslide: function(slide) { + return this.each(function() { + // CATCH THE CONTAINER + var container=jQuery(this); + container.data('showus',slide); + container.parent().find('.tp-rightarrow').click(); + }) + + } + + +}) + + + /////////////////////////// + // GET THE URL PARAMETER // + /////////////////////////// + function getUrlVars(hashdivider) + { + var vars = [], hash; + var hashes = window.location.href.slice(window.location.href.indexOf(hashdivider) + 1).split('_'); + for(var i = 0; i < hashes.length; i++) + { + hashes[i] = hashes[i].replace('%3D',"="); + hash = hashes[i].split('='); + vars.push(hash[0]); + vars[hash[0]] = hash[1]; + } + return vars; + } + + ////////////////////////// + // CONTAINER RESIZED // + ///////////////////////// + function containerResized(container,opt) { + + // HIDE THUMBS UNDER SIZE... + try{ + if (opt.hideThumbsUnderResoluition!=0 && opt.navigationType=="thumb") { + if (opt.hideThumbsUnderResoluition>jQuery(window).width()) + jQuery('.tp-bullets').css({display:"none"}); + else + jQuery('.tp-bullets').css({display:"block"}); + } + } catch(e) {} + + + container.find('.defaultimg').each(function(i) { + setSize(jQuery(this),opt); + }); + + var loff=0; + if (opt.forceFullWidth=="on") + loff = 0-opt.container.parent().offset().left; + try{ + container.parent().find('.tp-bannershadow').css({'width':opt.width,'left':loff}); + } catch(e) {} + + var actsh = container.find('>ul >li:eq('+opt.act+') .slotholder'); + var nextsh = container.find('>ul >li:eq('+opt.next+') .slotholder'); + removeSlots(container,opt); + nextsh.find('.defaultimg').css({'opacity':0}); + actsh.find('.defaultimg').css({'opacity':1}); + + nextsh.find('.defaultimg').each(function() { + var dimg = jQuery(this); + if (dimg.data('kenburn')!=undefined) + dimg.data('kenburn').restart(); + }); + + var nextli = container.find('>ul >li:eq('+opt.next+')'); + + animateTheCaptions(nextli, opt,true); + restartBannerTimer(opt,container); + setBulPos(container,opt); + + } + + + ////////////////// + // IS MOBILE ?? // + ////////////////// + function is_mobile() { + var agents = ['android', 'webos', 'iphone', 'ipad', 'blackberry','Android', 'webos', ,'iPod', 'iPhone', 'iPad', 'Blackberry', 'BlackBerry']; + var ismobile=false; + for(i in agents) { + + if (navigator.userAgent.split(agents[i]).length>1) { + ismobile = true; + + } + } + return ismobile; + } + + /********************************* + - CHECK IF BROWSER IS IE - + ********************************/ + function isIE( version, comparison ){ + var $div = jQuery('
            ').appendTo(jQuery('body')); + $div.html(''); + var ieTest = $div.find('a').length; + $div.remove(); + return ieTest; + } + + //////////////////////////////// + // RESTART THE BANNER TIMER // + ////////////////////////////// + function restartBannerTimer(opt,container) { + opt.cd=0; + + if (opt.videoplaying !=true) { + var bt= container.find('.tp-bannertimer'); + if (bt.length>0) { + bt.stop(); + bt.css({'width':'0%'}); + bt.animate({'width':"100%"},{duration:(opt.delay-100),queue:false, easing:"linear"}); + } + clearTimeout(opt.thumbtimer); + + opt.thumbtimer = setTimeout(function() { + moveSelectedThumb(container); + setBulPos(container,opt); + },200); + } + } + + //////////////////////////////// + // RESTART THE BANNER TIMER // + ////////////////////////////// + function killBannerTimer(opt,container) { + opt.cd=0; + + var bt= container.find('.tp-bannertimer'); + if (bt.length>0) { + bt.stop(true,true); + bt.css({'width':'0%'}); + } + clearTimeout(opt.thumbtimer); + + } + + function callingNewSlide(opt,container) { + opt.cd=0; + swapSlide(container,opt); + // STOP TIMER AND RESCALE IT + var bt= container.find('.tp-bannertimer'); + if (bt.length>0) { + bt.stop(); + bt.css({'width':'0%'}); + + if (opt.videoplaying!=true) bt.animate({'width':"100%"},{duration:(opt.delay-100),queue:false, easing:"linear"}); + } + } + + + //////////////////////////////// + // - CREATE THE BULLETS - // + //////////////////////////////// + function createThumbs(container,opt) { + + var cap=container.parent(); + + if (opt.navigationType=="thumb" || opt.navsecond=="both") { + cap.append('
            '); + } + var bullets = cap.find('.tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer'); + var bup = bullets.parent(); + + bup.width(opt.thumbWidth*opt.thumbAmount); + bup.height(opt.thumbHeight); + bup.parent().width(opt.thumbWidth*opt.thumbAmount); + bup.parent().height(opt.thumbHeight); + + container.find('>ul:first >li').each(function(i) { + var li= container.find(">ul:first >li:eq("+i+")"); + if (li.data('thumb') !=undefined) + var src= li.data('thumb') + else + var src=li.find("img:first").attr('src'); + bullets.append('
            '); + var bullet= bullets.find('.bullet:first'); + }); + //bullets.append('
            '); + var minwidth=10; + + + // ADD THE BULLET CLICK FUNCTION HERE + bullets.find('.bullet').each(function(i) { + var bul = jQuery(this); + + if (i==opt.slideamount-1) bul.addClass('last'); + if (i==0) bul.addClass('first'); + bul.width(opt.thumbWidth); + bul.height(opt.thumbHeight); + + if (minwidthul:first >li').length; + + var thumbconwidth=bullets.parent().width(); + opt.thumbWidth = minwidth; + + + + //////////////////////// + // SLIDE TO POSITION // + //////////////////////// + if (thumbconwidthul:first >li').length; + var diff=(max- thumbconwidth)+15; + var steps = diff / thumbconwidth; + x=x-30; + //if (x<30) x=0; + //if (x>thumbconwidth-30) x=thumbconwidth; + + //ANIMATE TO POSITION + var pos=(0-((x)*steps)); + if (pos>0) pos =0; + if (pos<0-max+thumbconwidth) pos=0-max+thumbconwidth; + moveThumbSliderToPosition($this,pos,200); + }); + + bullets.parent().mousemove(function() { + + var $this=jQuery(this); + + //if (!$this.hasClass("over")) { + var offset = $this.offset(); + var x = jQuery('body').data('mousex')-offset.left; + var thumbconwidth=$this.width(); + var minwidth=$this.find('.bullet:first').outerWidth(true); + var max=minwidth*container.find('>ul:first >li').length-1; + var diff=(max- thumbconwidth)+15; + var steps = diff / thumbconwidth; + x=x-3; + if (x<6) x=0; + if (x+3>thumbconwidth-6) x=thumbconwidth; + + //ANIMATE TO POSITION + var pos=(0-((x)*steps)); + if (pos>0) pos =0; + if (pos<0-max+thumbconwidth) pos=0-max+thumbconwidth; + moveThumbSliderToPosition($this,pos,0); + //} else { + //$this.removeClass("over"); + //} + + }); + + bullets.parent().mouseleave(function() { + var $this=jQuery(this); + $this.removeClass("over"); + moveSelectedThumb(container); + }); + } + + + } + + + /////////////////////////////// + // SelectedThumbInPosition // + ////////////////////////////// + function moveSelectedThumb(container) { + + var bullets=container.parent().find('.tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer'); + var $this=bullets.parent(); + var offset = $this.offset(); + var minwidth=$this.find('.bullet:first').outerWidth(true); + + var x = $this.find('.bullet.selected').index() * minwidth; + var thumbconwidth=$this.width(); + var minwidth=$this.find('.bullet:first').outerWidth(true); + var max=minwidth*container.find('>ul:first >li').length; + var diff=(max- thumbconwidth); + var steps = diff / thumbconwidth; + + //ANIMATE TO POSITION + var pos=0-x; + + if (pos>0) pos =0; + if (pos<0-max+thumbconwidth) pos=0-max+thumbconwidth; + if (!$this.hasClass("over")) { + moveThumbSliderToPosition($this,pos,200); + } + } + + + //////////////////////////////////// + // MOVE THUMB SLIDER TO POSITION // + /////////////////////////////////// + function moveThumbSliderToPosition($this,pos,speed) { + //$this.stop(); + //$this.find('.tp-thumbcontainer').animate({'left':pos+'px'},{duration:speed,queue:false}); + TweenLite.to($this.find('.tp-thumbcontainer'),0.2,{left:pos,ease:Power3.easeOut,overwrite:"auto"}); + } + + + + //////////////////////////////// + // - CREATE THE BULLETS - // + //////////////////////////////// + function createBullets(container,opt) { + + if (opt.navigationType=="bullet" || opt.navigationType=="both") { + container.parent().append('
            '); + } + + + var bullets = container.parent().find('.tp-bullets'); + + container.find('>ul:first >li').each(function(i) { + var src=container.find(">ul:first >li:eq("+i+") img:first").attr('src'); + bullets.append('
            '); + var bullet= bullets.find('.bullet:first'); + + + }); + + // ADD THE BULLET CLICK FUNCTION HERE + bullets.find('.bullet').each(function(i) { + var bul = jQuery(this); + if (i==opt.slideamount-1) bul.addClass('last'); + if (i==0) bul.addClass('first'); + + bul.click(function() { + var sameslide = false; + if (opt.navigationArrows=="withbullet" || opt.navigationArrows=="nexttobullets") { + if (bul.index()-1 == opt.act) sameslide=true; + } else { + if (bul.index() == opt.act) sameslide=true; + } + + if (opt.transition==0 && !sameslide) { + + if (opt.navigationArrows=="withbullet" || opt.navigationArrows=="nexttobullets") { + opt.next = bul.index()-1; + } else { + opt.next = bul.index(); + } + + callingNewSlide(opt,container); + } + }); + + }); + + bullets.append('
            '); + + + + setBulPos(container,opt); + + + + + + } + + ////////////////////// + // CREATE ARROWS // + ///////////////////// + function createArrows(container,opt) { + + var bullets = container.find('.tp-bullets'); + + var hidden=""; + var arst= opt.navigationStyle; + if (opt.navigationArrows=="none") hidden="visibility:hidden;display:none"; + opt.soloArrowStyle = "default"; + + if (opt.navigationArrows!="none" && opt.navigationArrows!="nexttobullets") arst = opt.soloArrowStyle; + + container.parent().append('
            '); + container.parent().append('
            '); + + // THE LEFT / RIGHT BUTTON CLICK ! // + container.parent().find('.tp-rightarrow').click(function() { + + if (opt.transition==0) { + if (container.data('showus') !=undefined && container.data('showus') != -1) + opt.next = container.data('showus')-1; + else + opt.next = opt.next+1; + container.data('showus',-1); + if (opt.next >= opt.slideamount) opt.next=0; + if (opt.next<0) opt.next=0; + + if (opt.act !=opt.next) + callingNewSlide(opt,container); + } + }); + + container.parent().find('.tp-leftarrow').click(function() { + if (opt.transition==0) { + opt.next = opt.next-1; + opt.leftarrowpressed=1; + if (opt.next < 0) opt.next=opt.slideamount-1; + callingNewSlide(opt,container); + } + }); + + setBulPos(container,opt); + + } + + ////////////////////// + // CREATE ARROWS // + ///////////////////// + function createKeyboard(container,opt) { + + + // THE LEFT / RIGHT BUTTON CLICK ! // + jQuery(document).keydown(function(e){ + if (opt.transition==0 && e.keyCode == 39) { + if (container.data('showus') !=undefined && container.data('showus') != -1) + opt.next = container.data('showus')-1; + else + opt.next = opt.next+1; + container.data('showus',-1); + if (opt.next >= opt.slideamount) opt.next=0; + if (opt.next<0) opt.next=0; + + if (opt.act !=opt.next) + callingNewSlide(opt,container); + } + + if (opt.transition==0 && e.keyCode == 37) { + opt.next = opt.next-1; + opt.leftarrowpressed=1; + if (opt.next < 0) opt.next=opt.slideamount-1; + callingNewSlide(opt,container); + } + }); + + setBulPos(container,opt); + + } + + //////////////////////////// + // SET THE SWIPE FUNCTION // + //////////////////////////// + function swipeAction(container,opt) { + // TOUCH ENABLED SCROLL + + if (opt.touchenabled=="on") + container.swipe( {data:container, + swipeRight:function() + { + + if (opt.transition==0) { + opt.next = opt.next-1; + opt.leftarrowpressed=1; + if (opt.next < 0) opt.next=opt.slideamount-1; + callingNewSlide(opt,container); + } + }, + swipeLeft:function() + { + + if (opt.transition==0) { + opt.next = opt.next+1; + if (opt.next == opt.slideamount) opt.next=0; + callingNewSlide(opt,container); + } + }, + allowPageScroll:"auto"} ); + } + + + + + //////////////////////////////////////////////////////////////// + // SHOW AND HIDE THE THUMBS IF MOUE GOES OUT OF THE BANNER /// + ////////////////////////////////////////////////////////////// + function hideThumbs(container,opt) { + + var bullets = container.parent().find('.tp-bullets'); + var ca = container.parent().find('.tparrows'); + + if (bullets==null) { + container.append('
            '); + var bullets = container.parent().find('.tp-bullets'); + } + + if (ca==null) { + container.append('
            '); + var ca = container.parent().find('.tparrows'); + } + + + //var bp = (thumbs.parent().outerHeight(true) - opt.height)/2; + + // ADD THUMBNAIL IMAGES FOR THE BULLETS // + container.data('hidethumbs',opt.hideThumbs); + + bullets.addClass("hidebullets"); + ca.addClass("hidearrows"); + + bullets.hover(function() { + bullets.addClass("hovered"); + clearTimeout(container.data('hidethumbs')); + bullets.removeClass("hidebullets"); + ca.removeClass("hidearrows"); + }, + function() { + + bullets.removeClass("hovered"); + if (!container.hasClass("hovered") && !bullets.hasClass("hovered")) + container.data('hidethumbs', setTimeout(function() { + bullets.addClass("hidebullets"); + ca.addClass("hidearrows"); + },opt.hideThumbs)); + }); + + + ca.hover(function() { + bullets.addClass("hovered"); + clearTimeout(container.data('hidethumbs')); + bullets.removeClass("hidebullets"); + ca.removeClass("hidearrows"); + + }, + function() { + + bullets.removeClass("hovered"); + }); + + + + container.on('mouseenter', function() { + container.addClass("hovered"); + clearTimeout(container.data('hidethumbs')); + bullets.removeClass("hidebullets"); + ca.removeClass("hidearrows"); + }); + + container.on('mouseleave', function() { + container.removeClass("hovered"); + if (!container.hasClass("hovered") && !bullets.hasClass("hovered")) + container.data('hidethumbs', setTimeout(function() { + bullets.addClass("hidebullets"); + ca.addClass("hidearrows"); + },opt.hideThumbs)); + }); + + } + + + + + + + + ////////////////////////////// + // SET POSITION OF BULLETS // + ////////////////////////////// + function setBulPos(container,opt) { + var topcont=container.parent(); + var bullets=topcont.find('.tp-bullets'); + + if (opt.navigationType=="thumb") { + bullets.find('.thumb').each(function(i) { + var thumb = jQuery(this); + + thumb.css({'width':opt.thumbWidth * opt.bw+"px", 'height':opt.thumbHeight*opt.bh+"px"}); + + }) + var bup = bullets.find('.tp-mask'); + + bup.width(opt.thumbWidth*opt.thumbAmount * opt.bw); + bup.height(opt.thumbHeight * opt.bh); + bup.parent().width(opt.thumbWidth*opt.thumbAmount * opt.bw); + bup.parent().height(opt.thumbHeight * opt.bh); + } + + + var tl = topcont.find('.tp-leftarrow'); + var tr = topcont.find('.tp-rightarrow'); + + if (opt.navigationType=="thumb" && opt.navigationArrows=="nexttobullets") opt.navigationArrows="solo"; + // IM CASE WE HAVE NAVIGATION BULLETS TOGETHER WITH ARROWS + if (opt.navigationArrows=="nexttobullets") { + tl.prependTo(bullets).css({'float':'left'}); + tr.insertBefore(bullets.find('.tpclear')).css({'float':'left'}); + } + var loff=0; + if (opt.forceFullWidth=="on") + loff = 0-opt.container.parent().offset().left; + + if (opt.navigationArrows!="none" && opt.navigationArrows!="nexttobullets") { + + tl.css({'position':'absolute'}); + tr.css({'position':'absolute'}); + + + if (opt.soloArrowLeftValign=="center") tl.css({'top':'50%','marginTop':(opt.soloArrowLeftVOffset-Math.round(tl.innerHeight()/2))+"px"}); + if (opt.soloArrowLeftValign=="bottom") tl.css({'top':'auto','bottom':(0+opt.soloArrowLeftVOffset)+"px"}); + if (opt.soloArrowLeftValign=="top") tl.css({'bottom':'auto','top':(0+opt.soloArrowLeftVOffset)+"px"}); + if (opt.soloArrowLeftHalign=="center") tl.css({'left':'50%','marginLeft':(loff+opt.soloArrowLeftHOffset-Math.round(tl.innerWidth()/2))+"px"}); + if (opt.soloArrowLeftHalign=="left") tl.css({'left':(0+opt.soloArrowLeftHOffset+loff)+"px"}); + if (opt.soloArrowLeftHalign=="right") tl.css({'right':(0+opt.soloArrowLeftHOffset-loff)+"px"}); + + if (opt.soloArrowRightValign=="center") tr.css({'top':'50%','marginTop':(opt.soloArrowRightVOffset-Math.round(tr.innerHeight()/2))+"px"}); + if (opt.soloArrowRightValign=="bottom") tr.css({'top':'auto','bottom':(0+opt.soloArrowRightVOffset)+"px"}); + if (opt.soloArrowRightValign=="top") tr.css({'bottom':'auto','top':(0+opt.soloArrowRightVOffset)+"px"}); + if (opt.soloArrowRightHalign=="center") tr.css({'left':'50%','marginLeft':(loff+opt.soloArrowRightHOffset-Math.round(tr.innerWidth()/2))+"px"}); + if (opt.soloArrowRightHalign=="left") tr.css({'left':(0+opt.soloArrowRightHOffset+loff)+"px"}); + if (opt.soloArrowRightHalign=="right") tr.css({'right':(0+opt.soloArrowRightHOffset-loff)+"px"}); + + + if (tl.position()!=null) + tl.css({'top':Math.round(parseInt(tl.position().top,0))+"px"}); + + if (tr.position()!=null) + tr.css({'top':Math.round(parseInt(tr.position().top,0))+"px"}); + } + + if (opt.navigationArrows=="none") { + tl.css({'visibility':'hidden'}); + tr.css({'visibility':'hidden'}); + } + + // SET THE POSITIONS OF THE BULLETS // THUMBNAILS + + + if (opt.navigationVAlign=="center") bullets.css({'top':'50%','marginTop':(opt.navigationVOffset-Math.round(bullets.innerHeight()/2))+"px"}); + if (opt.navigationVAlign=="bottom") bullets.css({'bottom':(0+opt.navigationVOffset)+"px"}); + if (opt.navigationVAlign=="top") bullets.css({'top':(0+opt.navigationVOffset)+"px"}); + + + + if (opt.navigationHAlign=="center") bullets.css({'left':'50%','marginLeft':(loff+opt.navigationHOffset-Math.round(bullets.innerWidth()/2))+"px"}); + if (opt.navigationHAlign=="left") bullets.css({'left':(0+opt.navigationHOffset+loff)+"px"}); + if (opt.navigationHAlign=="right") bullets.css({'right':(0+opt.navigationHOffset-loff)+"px"}); + + + + } + + + + ////////////////////////////////////////////////////////// + // - SET THE IMAGE SIZE TO FIT INTO THE CONTIANER - // + //////////////////////////////////////////////////////// + function setSize(img,opt) { + + + opt.container.closest('.forcefullwidth_wrapper_tp_banner').find('.tp-fullwidth-forcer').css({'height':opt.container.height()}); + opt.container.closest('.rev_slider_wrapper').css({'height':opt.container.height()}); + + + opt.width=parseInt(opt.container.width(),0); + opt.height=parseInt(opt.container.height(),0); + + + + opt.bw= (opt.width / opt.startwidth); + opt.bh = (opt.height / opt.startheight); + + if (opt.bh>opt.bw) opt.bh=opt.bw; + if (opt.bh1) { opt.bw=1; opt.bh=1; } + if (opt.bw>1) {opt.bw=1; opt.bh=1; } + + + //opt.height= opt.startheight * opt.bh; + opt.height = Math.round(opt.startheight * (opt.width/opt.startwidth)); + + + + + + if (opt.height>opt.startheight && opt.autoHeight!="on") opt.height=opt.startheight; + + + + if (opt.fullScreen=="on") { + opt.height = opt.bw * opt.startheight; + var cow = opt.container.parent().width(); + var coh = jQuery(window).height(); + if (opt.fullScreenOffsetContainer!=undefined) { + try{ + var offcontainers = opt.fullScreenOffsetContainer.split(","); + jQuery.each(offcontainers,function(index,searchedcont) { + coh = coh - jQuery(searchedcont).outerHeight(true); + if (cohul:first').css({overflow:'hidden',width:'100%',height:'100%',maxHeight:container.parent().css('maxHeight')}); + if (opt.autoHeight=="on") { + container.find('>ul:first').css({overflow:'hidden',width:'100%',height:'100%',maxHeight:"none"}); + container.css({'maxHeight':'none'}); + container.parent().css({'maxHeight':'none'}); + } + + container.find('>ul:first >li').each(function(j) { + var li=jQuery(this); + + // MAKE LI OVERFLOW HIDDEN FOR FURTHER ISSUES + li.css({'width':'100%','height':'100%','overflow':'hidden'}); + + if (li.data('link')!=undefined) { + var link = li.data('link'); + var target="_self"; + var zindex=2; + if (li.data('slideindex')=="back") zindex=0; + + var linktoslide=li.data('linktoslide'); + if (li.data('target')!=undefined) target=li.data('target'); + + if (link=="slide") { + li.append(''); + } else { + linktoslide="no"; + li.append(''); + } + + } + }); + + // RESOLVE OVERFLOW HIDDEN OF MAIN CONTAINER + container.parent().css({'overflow':'visible'}); + + + container.find('>ul:first >li >img').each(function(j) { + + var img=jQuery(this); + + img.addClass('defaultimg'); + if (img.data('lazyload')!=undefined && img.data('lazydone') != 1) { + + } else { + setSize(img,opt); + } + + + + img.wrap('
            '); + + if (opt.dottedOverlay!="none" && opt.dottedOverlay!=undefined) + img.closest('.slotholder').append('
            '); + + var src=img.attr('src'); + var ll = img.data('lazyload'); + var bgfit = img.data('bgfit'); + var bgrepeat = img.data('bgrepeat'); + var bgposition = img.data('bgposition'); + + + if (bgfit==undefined) bgfit="cover"; + if (bgrepeat==undefined) bgrepeat="no-repeat"; + if (bgposition==undefined) bgposition="center center" + + + var pari = img.closest('.slotholder'); + img.replaceWith('
            '); + + if (isIE(8)) { + pari.find('.tp-bgimg').css({backgroundImage:"none",'background-image':'none'}); + pari.find('.tp-bgimg').append(''); + } + + + + + img.css({'opacity':0}); + img.data('li-id',j); + + }); + } + + + + + + /////////////////////// + // PREPARE THE SLIDE // + ////////////////////// + function prepareOneSlideSlot(slotholder,opt,visible,vorh) { + + + var sh=slotholder; + var img = sh.find('.defaultimg') + + var scalestart = sh.data('zoomstart'); + var rotatestart = sh.data('rotationstart'); + + if (img.data('currotate')!=undefined) + rotatestart = img.data('currotate'); + if (img.data('curscale')!=undefined) + scalestart = img.data('curscale'); + + + setSize(img,opt) + var src = img.data('src'); + var bgcolor=img.css('background-color'); + + var w = opt.width; + var h = opt.height; + if (opt.autoHeight=="on") + h = opt.container.height(); + + var fulloff = img.data("fxof"); + if (fulloff==undefined) fulloff=0; + + fullyoff=0; + + var off=0; + + var bgfit = img.data('bgfit'); + var bgrepeat = img.data('bgrepeat'); + var bgposition = img.data('bgposition'); + + if (bgfit==undefined) bgfit="cover"; + if (bgrepeat==undefined) bgrepeat="no-repeat"; + if (bgposition==undefined) bgposition="center center"; + + + + if (sh.data('kenburns')=="on") { + bgfit=scalestart; + if (bgfit.toString().length<4) + bgfit = calculateKenBurnScales(bgfit,sh,opt); + } + + if (isIE(8)) { + var imgsrc=src; + src=""; + } + + if (vorh == "horizontal") { + + if (!visible) var off=0-opt.slotw; + + for (var i=0;i'+ + '
            '+ + '
            '+ + '
            '); + if (scalestart!=undefined && rotatestart!=undefined) + TweenLite.set(sh.find('.slot').last(),{rotationZ:rotatestart}); + if (isIE(8)) { + sh.find('.slot ').last().find('.slotslide').append(''); + ieimgposition(sh,opt); + + } + } + } else { + + if (!visible) var off=0-opt.sloth; + + for (var i=0;i'+ + + '
            '+ + '
            '+ + + '
            '); + if (scalestart!=undefined && rotatestart!=undefined) + TweenLite.set(sh.find('.slot').last(),{rotationZ:rotatestart}); + if (isIE(8)) { + sh.find('.slot ').last().find('.slotslide').append(''); + ieimgposition(sh,opt); + } + } + } + + + + + } + + + + /////////////////////// + // PREPARE THE SLIDE // + ////////////////////// + function prepareOneSlideBox(slotholder,opt,visible) { + + var sh=slotholder; + var img = sh.find('.defaultimg'); + + var scalestart = sh.data('zoomstart'); + var rotatestart = sh.data('rotationstart'); + + if (img.data('currotate')!=undefined) + rotatestart = img.data('currotate'); + if (img.data('curscale')!=undefined) + scalestart = img.data('curscale')*100; + + + + + setSize(img,opt) + var src = img.data('src'); + var bgcolor=img.css('backgroundColor'); + + var w = opt.width; + var h = opt.height; + if (opt.autoHeight=="on") + h = opt.container.height(); + + var fulloff = img.data("fxof"); + if (fulloff==undefined) fulloff=0; + + fullyoff=0; + + + + var off=0; + + + if (isIE(8)) { + var imgsrc=src; + src=""; + } + + // SET THE MINIMAL SIZE OF A BOX + var basicsize = 0; + if (opt.sloth>opt.slotw) + basicsize=opt.sloth + else + basicsize=opt.slotw; + + + if (!visible) { + var off=0-basicsize; + } + + opt.slotw = basicsize; + opt.sloth = basicsize; + var x=0; + var y=0; + + var bgfit = img.data('bgfit'); + var bgrepeat = img.data('bgrepeat'); + var bgposition = img.data('bgposition'); + + if (bgfit==undefined) bgfit="cover"; + if (bgrepeat==undefined) bgrepeat="no-repeat"; + if (bgposition==undefined) bgposition="center center"; + + if (sh.data('kenburns')=="on") { + bgfit=scalestart; + if (bgfit.toString().length<4) + bgfit = calculateKenBurnScales(bgfit,sh,opt); + } + + for (var j=0;j'+ + + '
            '+ + + '
            '+ + '
            '); + y=y+basicsize; + + if (isIE(8)) { + + sh.find('.slot ').last().find('.slotslide').append(''); + ieimgposition(sh,opt); + } + + if (scalestart!=undefined && rotatestart!=undefined) + TweenLite.set(sh.find('.slot').last(),{rotationZ:rotatestart}); + } + x=x+basicsize; + } + } + + /*********************************************** + - MOVE IE8 IMAGE IN RIGHT POSITION - + ***********************************************/ + + function ieimgposition(nextsh,opt) { + + if (isIE(8)) { + var ie8img = nextsh.find('.ieeightfallbackimage'); + if (opt.startwidth/opt.startheight ul:first-child >li:eq('+opt.act+')'); + } catch(e) { + var actli=container.find('>ul:first-child >li:eq(1)'); + } + opt.lastslide=opt.act; + var nextli = container.find('>ul:first-child >li:eq('+opt.next+')'); + + var defimg= nextli.find('.defaultimg'); + + if (defimg.data('lazyload') !=undefined && defimg.data('lazyload') !="undefined" && defimg.data('lazydone') !=1 ) { + + defimg.css({backgroundImage:'url("'+nextli.find('.defaultimg').data('lazyload')+'")'}); + defimg.data('src',nextli.find('.defaultimg').data('lazyload')); + defimg.data('lazydone',1); + defimg.data('orgw',0); + nextli.data('loadeddone',1); + container.find('.tp-loader').css({'display':'block'}).transition({opacity:1,duration:300}); + var limg = new Image(); + limg.onload = function() { + setTimeout(function() { killBannerTimer(opt,container)},180); + + nextli.waitForImages(function() { + + defimg.data('lazydone',1); + nextli.data('owidth',limg.width); + nextli.data('oheight',limg.height); + nextli.find('.slotholder').data('owidth',limg.width); + nextli.find('.slotholder').data('oheight',limg.height); + + + setTimeout(function() {restartBannerTimer(opt,container)},190); + + setSize(defimg,opt); + setBulPos(container,opt); + + setSize(defimg,opt); + swapSlideProgress(container,opt); + container.find('.tp-loader').transition({opacity:0,duration:300}); + + setTimeout(function() { + container.find('.tp-loader').css({'display':'none'}); + + },2200) + }); + } + limg.src=nextli.find('.defaultimg').data('lazyload'); + + } else { + if (nextli.data('loadeddone')==undefined) { + var limg = new Image(); + limg.onload = function() { + nextli.data('loadeddone',1); + nextli.data('owidth',limg.width); + nextli.data('oheight',limg.height); + nextli.find('.slotholder').data('owidth',limg.width); + nextli.find('.slotholder').data('oheight',limg.height); + + + + nextli.waitForImages(function() { + + setSize(defimg,opt); + setBulPos(container,opt); + setSize(defimg,opt); + swapSlideProgress(container,opt); + }); + } + limg.src=nextli.find('.defaultimg').data('src'); + } else { + swapSlideProgress(container,opt); + } + } + } + + /****************************** + - SWAP SLIDE PROGRESS - + ********************************/ + /*!SWAP SLIDE*/ + function swapSlideProgress(container,opt) { + + + container.trigger('revolution.slide.onbeforeswap'); + + opt.transition = 1; + opt.videoplaying = false; + //konsole.log("VideoPlay set to False due swapSlideProgress"); + + try{ + var actli = container.find('>ul:first-child >li:eq('+opt.act+')'); + } catch(e) { + var actli=container.find('>ul:first-child >li:eq(1)'); + } + + opt.lastslide=opt.act; + + var nextli = container.find('>ul:first-child >li:eq('+opt.next+')'); + + + var actsh = actli.find('.slotholder'); + var nextsh = nextli.find('.slotholder'); + actli.css({'visibility':'visible'}); + nextli.css({'visibility':'visible'}); + + if (nextsh.data('kenburns')=="on") + stopKenBurn(container,opt); + + + if (opt.ie) { + if (comingtransition=="boxfade") comingtransition = "boxslide"; + if (comingtransition=="slotfade-vertical") comingtransition = "slotzoom-vertical"; + if (comingtransition=="slotfade-horizontal") comingtransition = "slotzoom-horizontal"; + } + + + // IF DELAY HAS BEEN SET VIA THE SLIDE, WE TAKE THE NEW VALUE, OTHER WAY THE OLD ONE... + if (nextli.data('delay')!=undefined) { + opt.cd=0; + opt.delay=nextli.data('delay'); + } else { + opt.delay=opt.origcd; + } + + // RESET POSITION AND FADES OF LI'S + actli.css({'left':'0px','top':'0px'}); + nextli.css({'left':'0px','top':'0px'}); + + + // IF THERE IS AN OTHER FIRST SLIDE START HAS BEED SELECTED + if (nextli.data('differentissplayed') =='prepared') { + nextli.data('differentissplayed','done'); + nextli.data('transition',nextli.data('savedtransition')); + nextli.data('slotamount',nextli.data('savedslotamount')); + nextli.data('masterspeed',nextli.data('savedmasterspeed')); + } + + + if (nextli.data('fstransition') != undefined && nextli.data('differentissplayed') !="done") { + nextli.data('savedtransition',nextli.data('transition')); + nextli.data('savedslotamount',nextli.data('slotamount')); + nextli.data('savedmasterspeed',nextli.data('masterspeed')); + + nextli.data('transition',nextli.data('fstransition')); + nextli.data('slotamount',nextli.data('fsslotamount')); + nextli.data('masterspeed',nextli.data('fsmasterspeed')); + + nextli.data('differentissplayed','prepared'); + } + + /////////////////////////////////////// + // TRANSITION CHOOSE - RANDOM EFFECTS// + /////////////////////////////////////// + var nexttrans = 0; + + + var transtext = nextli.data('transition').split(","); + var curtransid = nextli.data('nexttransid'); + if (curtransid == undefined) { + curtransid=0; + nextli.data('nexttransid',curtransid); + } else { + curtransid=curtransid+1; + if (curtransid==transtext.length) curtransid=0; + nextli.data('nexttransid',curtransid); + + } + + + + var comingtransition = transtext[curtransid]; + var specials = 0; + + /*if (opt.ffnn == undefined) opt.ffnn=0; + comingtransition=opt.ffnn; + opt.ffnn=opt.ffnn+1; + if (opt.ffnn>46) opt.ffnn=0;*/ + + + /* Transition Name , + Transition Code, + Transition Sub Code, + Max Slots, + MasterSpeed Delays, + Preparing Slots (box,slideh, slidev), + Call on nextsh (null = no, true/false for visibility first preparing), + Call on actsh (null = no, true/false for visibility first preparing), + */ + + if (comingtransition=="slidehorizontal") { + comingtransition = "slideleft" + if (opt.leftarrowpressed==1) + comingtransition = "slideright" + } + + if (comingtransition=="slidevertical") { + comingtransition = "slideup" + if (opt.leftarrowpressed==1) + comingtransition = "slidedown" + } + + + var transitionsArray = [ ['boxslide' , 0, 1, 10, 0,'box',false,null,0], + ['boxfade', 1, 0, 10, 0,'box',false,null,1], + ['slotslide-horizontal', 2, 0, 0, 200,'horizontal',true,false,2], + ['slotslide-vertical', 3, 0,0,200,'vertical',true,false,3], + ['curtain-1', 4, 3,0,0,'horizontal',true,true,4], + ['curtain-2', 5, 3,0,0,'horizontal',true,true,5], + ['curtain-3', 6, 3,25,0,'horizontal',true,true,6], + ['slotzoom-horizontal', 7, 0,0,400,'horizontal',true,true,7], + ['slotzoom-vertical', 8, 0,0,0,'vertical',true,true,8], + ['slotfade-horizontal', 9, 0,0,500,'horizontal',true,null,9], + ['slotfade-vertical', 10, 0,0 ,500,'vertical',true,null,10], + ['fade', 11, 0, 1 ,300,'horizontal',true,null,11], + ['slideleft', 12, 0,1,0,'horizontal',true,true,12], + ['slideup', 13, 0,1,0,'horizontal',true,true,13], + ['slidedown', 14, 0,1,0,'horizontal',true,true,14], + ['slideright', 15, 0,1,0,'horizontal',true,true,15], + ['papercut', 16, 0,0,600,'',null,null,16], + ['3dcurtain-horizontal', 17, 0,20,100,'vertical',false,true,17], + ['3dcurtain-vertical', 18, 0,10,100,'horizontal',false,true,18], + ['cubic', 19, 0,20,600,'horizontal',false,true,19], + ['cube',19,0,20,600,'horizontal',false,true,20], + ['flyin', 20, 0,4,600,'vertical',false,true,21], + ['turnoff', 21, 0,1,1600,'horizontal',false,true,22], + ['incube', 22, 0,20,600,'horizontal',false,true,23], + ['cubic-horizontal', 23, 0,20,500,'vertical',false,true,24], + ['cube-horizontal', 23, 0,20,500,'vertical',false,true,25], + ['incube-horizontal', 24, 0,20,500,'vertical',false,true,26], + ['turnoff-vertical', 25, 0,1,1600,'horizontal',false,true,27], + ['fadefromright', 12, 1,1,0,'horizontal',true,true,28], + ['fadefromleft', 15, 1,1,0,'horizontal',true,true,29], + ['fadefromtop', 14, 1,1,0,'horizontal',true,true,30], + ['fadefrombottom', 13, 1,1,0,'horizontal',true,true,31], + ['fadetoleftfadefromright', 12, 2,1,0,'horizontal',true,true,32], + ['fadetorightfadetoleft', 15, 2,1,0,'horizontal',true,true,33], + ['fadetobottomfadefromtop', 14, 2,1,0,'horizontal',true,true,34], + ['fadetotopfadefrombottom', 13, 2,1,0,'horizontal',true,true,35], + ['parallaxtoright', 12, 3,1,0,'horizontal',true,true,36], + ['parallaxtoleft', 15, 3,1,0,'horizontal',true,true,37], + ['parallaxtotop', 14, 3,1,0,'horizontal',true,true,38], + ['parallaxtobottom', 13, 3,1,0,'horizontal',true,true,39], + ['scaledownfromright', 12, 4,1,0,'horizontal',true,true,40], + ['scaledownfromleft', 15, 4,1,0,'horizontal',true,true,41], + ['scaledownfromtop', 14, 4,1,0,'horizontal',true,true,42], + ['scaledownfrombottom', 13, 4,1,0,'horizontal',true,true,43], + ['zoomout', 13, 5,1,0,'horizontal',true,true,44], + ['zoomin', 13, 6,1,0,'horizontal',true,true,45], + ['notransition',26,0,1,0,'horizontal',true,null,46] + ]; + + + var flatTransitions = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45]; + var premiumTransitions = [16,17,18,19,20,21,22,23,24,25,26,27] + + var nexttrans =0; + var specials = 1; + var STAindex = 0; + var indexcounter =0; + var STA = new Array; + + + // RANDOM TRANSITIONS + if (comingtransition == "random") { + comingtransition = Math.round(Math.random()*transitionsArray.length-1); + if (comingtransition>transitionsArray.length-1) comingtransition=transitionsArray.length-1; + } + + // RANDOM FLAT TRANSITIONS + if (comingtransition == "random-static") { + comingtransition = Math.round(Math.random()*flatTransitions.length-1); + if (comingtransition>flatTransitions.length-1) comingtransition=flatTransitions.length-1; + comingtransition = flatTransitions[comingtransition]; + } + + // RANDOM PREMIUM TRANSITIONS + if (comingtransition == "random-premium") { + comingtransition = Math.round(Math.random()*premiumTransitions.length-1); + if (comingtransition>premiumTransitions.length-1) comingtransition=premiumTransitions.length-1; + comingtransition = premiumTransitions[comingtransition]; + } + + findTransition(); + + // CHECK IF WE HAVE IE8 AND THAN FALL BACK ON FLAT TRANSITIONS + if (isIE(8) && nexttrans>15 && nexttrans<28) { + comingtransition = Math.round(Math.random()*flatTransitions.length-1); + if (comingtransition>flatTransitions.length-1) comingtransition=flatTransitions.length-1; + comingtransition = flatTransitions[comingtransition]; + indexcounter =0; + findTransition(); + } + + function findTransition() { + // FIND THE RIGHT TRANSITION PARAMETERS HERE + jQuery.each(transitionsArray,function(inde,trans) { + if (trans[0] == comingtransition || trans[8] == comingtransition) { + nexttrans = trans[1]; + specials = trans[2]; + STAindex = indexcounter; + } + indexcounter = indexcounter+1; + }) + } + + + + var direction=-1; + if (opt.leftarrowpressed==1 || opt.act>opt.next) direction=1; + + + + opt.leftarrowpressed=0; + + if (nexttrans>26) nexttrans = 26; + if (nexttrans<0) nexttrans = 0; + + + // DEFINE THE MASTERSPEED FOR THE SLIDE // + var masterspeed=300; + if (nextli.data('masterspeed')!=undefined && nextli.data('masterspeed')>99 && nextli.data('masterspeed')<4001) + masterspeed = nextli.data('masterspeed'); + + // PREPARED DEFAULT SETTINGS PER TRANSITION + STA = transitionsArray[STAindex]; + + + + + + ///////////////////////////////////////////// + // SET THE BULLETS SELECTED OR UNSELECTED // + ///////////////////////////////////////////// + + + container.parent().find(".bullet").each(function() { + var bul = jQuery(this); + bul.removeClass("selected"); + + if (opt.navigationArrows=="withbullet" || opt.navigationArrows=="nexttobullets") { + if (bul.index()-1 == opt.next) bul.addClass('selected'); + + } else { + + if (bul.index() == opt.next) bul.addClass('selected'); + + } + }); + + + + ////////////////////////////////////////////////////////////////// + // SET THE NEXT CAPTION AND REMOVE THE LAST CAPTION // + ////////////////////////////////////////////////////////////////// + + container.find('>li').each(function() { + var li = jQuery(this); + if (li.index!=opt.act && li.index!=opt.next) li.css({'z-index':16}); + }); + + actli.css({'z-index':18}); + nextli.css({'z-index':20}); + nextli.css({'opacity':0}); + + + /////////////////////////// + // ANIMATE THE CAPTIONS // + /////////////////////////// + + if (actli.index() != nextli.index() && opt.firststart!=1) { + removeTheCaptions(actli,opt); + + } + animateTheCaptions(nextli, opt); + + + + + ///////////////////////////////////////////// + // SET THE ACTUAL AMOUNT OF SLIDES !! // + // SET A RANDOM AMOUNT OF SLOTS // + /////////////////////////////////////////// + if (nextli.data('slotamount')==undefined || nextli.data('slotamount')<1) { + opt.slots=Math.round(Math.random()*12+4); + if (comingtransition=="boxslide") + opt.slots=Math.round(Math.random()*6+3); + else + if (comingtransition=="flyin") + opt.slots=Math.round(Math.random()*4+1); + } else { + opt.slots=nextli.data('slotamount'); + + } + + ///////////////////////////////////////////// + // SET THE ACTUAL AMOUNT OF SLIDES !! // + // SET A RANDOM AMOUNT OF SLOTS // + /////////////////////////////////////////// + if (nextli.data('rotate')==undefined) + opt.rotate = 0 + else + if (nextli.data('rotate')==999) + opt.rotate=Math.round(Math.random()*360); + else + opt.rotate=nextli.data('rotate'); + if (!jQuery.support.transition || opt.ie || opt.ie9) opt.rotate=0; + + + + ////////////////////////////// + // FIRST START // + ////////////////////////////// + + if (opt.firststart==1) { + actli.css({'opacity':0}); + opt.firststart=0; + } + + + // HERE COMES THE TRANSITION ENGINE + + // ADJUST MASTERSPEED + masterspeed = masterspeed + STA[4]; + + if ((nexttrans==4 || nexttrans==5 || nexttrans==6) && opt.slots<3 ) opt.slots=3; + + // ADJUST SLOTS + if (STA[3] != 0) opt.slots = Math.min(opt.slots,STA[3]); + if (nexttrans==9) opt.slots = opt.width/20; + if (nexttrans==10) opt.slots = opt.height/20; + + + + + // PREPAREONESLIDEBOX + if (STA[5] == "box") { + if (STA[7] !=null) prepareOneSlideBox(actsh,opt,STA[7]); + if (STA[6] !=null) prepareOneSlideBox(nextsh,opt,STA[6]); + } else + + if (STA[5] == "vertical" || STA[5] == "horizontal") { + if (STA[7] !=null) prepareOneSlideSlot(actsh,opt,STA[7],STA[5]); + if (STA[6] !=null) prepareOneSlideSlot(nextsh,opt,STA[6],STA[5]); + } + + // SHOW FIRST LI + if (nexttrans<12 || nexttrans>16) nextli.css({'opacity':1}); + + + ///////////////////////////////////// + // THE SLOTSLIDE - TRANSITION I. // + //////////////////////////////////// + if (nexttrans==0) { // BOXSLIDE + //SET DEFAULT IMG UNVISIBLE + nextsh.find('.defaultimg').css({'opacity':0}); + + // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT + + var maxz = Math.ceil(opt.height/opt.sloth); + var curz = 0; + nextsh.find('.slotslide').each(function(j) { + var ss=jQuery(this); + curz=curz+1; + if (curz==maxz) curz=0; + + TweenLite.fromTo(ss,(masterspeed)/600, + {opacity:0,top:(0-opt.sloth),left:(0-opt.slotw),rotation:opt.rotate}, + {opacity:1,transformPerspective:600,top:0,left:0,scale:1,rotation:0,delay:((j)*15 + (curz)*30)/1500, ease:Power2.easeOut,onComplete:function() { + if (j==(opt.slots*opt.slots)-1) { + letItFree(container,opt,nextsh,actsh,nextli,actli) + } + + }}); + }); + } + ///////////////////////////////////// + // THE SLOTSLIDE - TRANSITION I. // + //////////////////////////////////// + if (nexttrans==1) { + + + //SET DEFAULT IMG UNVISIBLE + nextsh.find('.defaultimg').css({'opacity':0}); + + // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT + + var maxtime; + + nextsh.find('.slotslide').each(function(j) { + var ss=jQuery(this); + + rand=Math.random()*masterspeed+300; + rand2=Math.random()*500+200; + + if (rand+rand2>maxtime) maxtime = rand2+rand2; + + + TweenLite.fromTo(ss,rand/1000, + {opacity:0,transformPerspective:600,rotation:opt.rotate}, + {opacity:1, ease:Power2.easeInOut,rotation:0,delay:rand2/1000}) + + + + }); + + setTimeout(function() { + letItFree(container,opt,nextsh,actsh,nextli,actli) + },masterspeed+300); + + } + + + ///////////////////////////////////// + // THE SLOTSLIDE - TRANSITION I. // + //////////////////////////////////// + if (nexttrans==2) { + + + //SET DEFAULT IMG UNVISIBLE + nextsh.find('.defaultimg').css({'opacity':0}); + + // ALL OLD SLOTS SHOULD BE SLIDED TO THE RIGHT + actsh.find('.slotslide').each(function() { + var ss=jQuery(this); + + TweenLite.to(ss,masterspeed/1000,{left:opt.slotw, rotation:(0-opt.rotate),onComplete:function() { + letItFree(container,opt,nextsh,actsh,nextli,actli) + + }}); + + }); + + // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT + nextsh.find('.slotslide').each(function() { + var ss=jQuery(this); + + TweenLite.fromTo(ss,masterspeed/1000, + {left:0-opt.slotw, rotation:opt.rotate,transformPerspective:600}, + {left:0, rotation:0,ease:Power2.easeOut,onComplete:function() { + letItFree(container,opt,nextsh,actsh,nextli,actli) + } + }); + + }); + } + + + + ///////////////////////////////////// + // THE SLOTSLIDE - TRANSITION I. // + //////////////////////////////////// + if (nexttrans==3) { + + + //SET DEFAULT IMG UNVISIBLE + nextsh.find('.defaultimg').css({'opacity':0}); + + // ALL OLD SLOTS SHOULD BE SLIDED TO THE RIGHT + actsh.find('.slotslide').each(function() { + var ss=jQuery(this); + TweenLite.to(ss,masterspeed/1000,{top:opt.sloth,rotation:opt.rotate,transformPerspective:600,onComplete:function() { + letItFree(container,opt,nextsh,actsh,nextli,actli) + }}); + + }); + + // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT + nextsh.find('.slotslide').each(function() { + var ss=jQuery(this); + + TweenLite.fromTo(ss,masterspeed/1000, + {top:0-opt.sloth,rotation:opt.rotate,transformPerspective:600}, + {top:0,rotation:0,ease:Power2.easeOut,onComplete:function() { + letItFree(container,opt,nextsh,actsh,nextli,actli) + }}); + + }); + } + + + + ///////////////////////////////////// + // THE SLOTSLIDE - TRANSITION I. // + //////////////////////////////////// + if (nexttrans==4 || nexttrans==5) { + + //SET DEFAULT IMG UNVISIBLE + + + + + nextsh.find('.defaultimg').css({'opacity':0}); + setTimeout(function() { + actsh.find('.defaultimg').css({opacity:0}); + },100); + + + + // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT + var cspeed = (masterspeed)/1000; + var ticker = cspeed; + + + + actsh.find('.slotslide').each(function(i) { + var ss=jQuery(this); + var del = (i*cspeed)/opt.slots; + if (nexttrans==5) del = ((opt.slots-i-1)*cspeed)/(opt.slots)/1.5; + TweenLite.to(ss,cspeed*3,{transformPerspective:600,top:0+opt.height,opacity:0.5,rotation:opt.rotate,ease:Power2.easeInOut,delay:del}); + }); + + // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT + nextsh.find('.slotslide').each(function(i) { + var ss=jQuery(this); + var del = (i*cspeed)/opt.slots; + if (nexttrans==5) del = ((opt.slots-i-1)*cspeed)/(opt.slots)/1.5; + TweenLite.fromTo(ss,cspeed*3, + {top:(0-opt.height),opacity:0.5,rotation:opt.rotate,transformPerspective:600}, + {top:0,opacity:1,rotation:0,ease:Power2.easeInOut,delay:del,onComplete:function() { + if (i==opt.slots-1) { + letItFree(container,opt,nextsh,actsh,nextli,actli) + } + }}); + + }); + + + } + + + + + ///////////////////////////////////// + // THE SLOTSLIDE - TRANSITION I. // + //////////////////////////////////// + if (nexttrans==6) { + + + if (opt.slots<2) opt.slots=2; + + //SET DEFAULT IMG UNVISIBLE + nextsh.find('.defaultimg').css({'opacity':0}); + setTimeout(function() { + actsh.find('.defaultimg').css({opacity:0}); + },100); + + actsh.find('.slotslide').each(function(i) { + var ss=jQuery(this); + + if (i
            '); + + actli.find('.tp-half-one').clone(true).appendTo(actli).addClass("tp-half-two"); + actli.find('.tp-half-two').removeClass('tp-half-one'); + + var oow = opt.width; + var ooh = opt.height; + if (opt.autoHeight=="on") + ooh = container.height(); + + + actli.find('.tp-half-one .defaultimg').wrap('
            ') + + actli.find('.tp-half-two .defaultimg').wrap('
            ') + + actli.find('.tp-half-two .defaultimg').css({position:'absolute',top:'-50%'}); + + actli.find('.tp-half-two .tp-caption').wrapAll('
            '); + + TweenLite.set(actli.find('.tp-half-two'), + {width:oow,height:ooh,overflow:'hidden',zIndex:15,position:'absolute',top:ooh/2,left:'0px',transformPerspective:600,transformOrigin:"center bottom"}); + + TweenLite.set(actli.find('.tp-half-one'), + {width:oow,height:ooh/2,overflow:'visible',zIndex:10,position:'absolute',top:'0px',left:'0px',transformPerspective:600,transformOrigin:"center top"}); + + + + // ANIMATE THE CUTS + var img=actli.find('.defaultimg'); + + + var ro1=Math.round(Math.random()*20-10); + var ro2=Math.round(Math.random()*20-10); + var ro3=Math.round(Math.random()*20-10); + var xof = Math.random()*0.4-0.2; + var yof = Math.random()*0.4-0.2; + var sc1=Math.random()*1+1; + var sc2=Math.random()*1+1; + + + TweenLite.fromTo(actli.find('.tp-half-one'),masterspeed/1000, + {width:oow,height:ooh/2,position:'absolute',top:'0px',left:'0px',transformPerspective:600,transformOrigin:"center top"}, + {scale:sc1,rotation:ro1,y:(0-ooh-ooh/4),ease:Power2.easeInOut}); + setTimeout(function() { + TweenLite.set(actli.find('.tp-half-one'),{overflow:'hidden'}); + },50); + TweenLite.fromTo(actli.find('.tp-half-one'),masterspeed/2000,{opacity:1,transformPerspective:600,transformOrigin:"center center"},{opacity:0,delay:masterspeed/2000}); + + TweenLite.fromTo(actli.find('.tp-half-two'),masterspeed/1000, + {width:oow,height:ooh,overflow:'hidden',position:'absolute',top:ooh/2,left:'0px',transformPerspective:600,transformOrigin:"center bottom"}, + {scale:sc2,rotation:ro2,y:ooh+ooh/4,ease:Power2.easeInOut}); + + TweenLite.fromTo(actli.find('.tp-half-two'),masterspeed/2000,{opacity:1,transformPerspective:600,transformOrigin:"center center"},{opacity:0,delay:masterspeed/2000}); + + if (actli.html()!=null) + TweenLite.fromTo(nextli,(masterspeed-200)/1000,{opacity:0,scale:0.8,x:opt.width*xof, y:ooh*yof,rotation:ro3,transformPerspective:600,transformOrigin:"center center"},{rotation:0,scale:1,x:0,y:0,opacity:1,ease:Power2.easeInOut}); + + nextsh.find('.defaultimg').css({'opacity':1}); + setTimeout(function() { + + + // CLEAN UP BEFORE WE START + actli.css({'position':'absolute','z-index':18}); + nextli.css({'position':'absolute','z-index':20}); + nextsh.find('.defaultimg').css({'opacity':1}); + actsh.find('.defaultimg').css({'opacity':0}); + if (actli.find('.tp-half-one').length>0) { + actli.find('.tp-half-one .defaultimg').unwrap(); + actli.find('.tp-half-one .slotholder').unwrap(); + + } + actli.find('.tp-half-two').remove(); + opt.transition = 0; + opt.act = opt.next; + + },masterspeed); + nextli.css({'opacity':1}); + + } + + //////////////////////////////////////// + // THE SLOTSLIDE - TRANSITION XVII. // + /////////////////////////////////////// + if (nexttrans==17) { // 3D CURTAIN HORIZONTAL + + + //SET DEFAULT IMG UNVISIBLE + nextsh.find('.defaultimg').css({'opacity':0}); + + // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT + + + nextsh.find('.slotslide').each(function(j) { + var ss=jQuery(this); + + TweenLite.fromTo(ss,(masterspeed)/800, + {opacity:0,rotationY:0,scale:0.9,rotationX:-110,transformPerspective:600,transformOrigin:"center center"}, + {opacity:1,top:0,left:0,scale:1,rotation:0,rotationX:0,rotationY:0,ease:Power3.easeOut,delay:j*0.06,onComplete:function() { + if (j==opt.slots-1) letItFree(container,opt,nextsh,actsh,nextli,actli) + }}); + + }); + } + + + + //////////////////////////////////////// + // THE SLOTSLIDE - TRANSITION XVIII. // + /////////////////////////////////////// + if (nexttrans==18) { // 3D CURTAIN VERTICAL + + + //SET DEFAULT IMG UNVISIBLE + nextsh.find('.defaultimg').css({'opacity':0}); + + + // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT + + nextsh.find('.slotslide').each(function(j) { + var ss=jQuery(this); + + TweenLite.fromTo(ss,(masterspeed)/500, + {opacity:0,rotationY:310,scale:0.9,rotationX:10,transformPerspective:600,transformOrigin:"center center"}, + {opacity:1,top:0,left:0,scale:1,rotation:0,rotationX:0,rotationY:0,ease:Power3.easeOut,delay:j*0.06,onComplete:function() { + if (j==opt.slots-1) + letItFree(container,opt,nextsh,actsh,nextli,actli) + }}); + + }); + + + + } + + + //////////////////////////////////////// + // THE SLOTSLIDE - TRANSITION XIX. // + /////////////////////////////////////// + + + if (nexttrans==19 || nexttrans==22) { // IN CUBE + + + //SET DEFAULT IMG UNVISIBLE + nextsh.find('.defaultimg').css({'opacity':0}); + setTimeout(function() { + actsh.find('.defaultimg').css({opacity:0}); + },100); + var chix=nextli.css('z-index'); + var chix2=actli.css('z-index'); + + var rot = 90; + var op = 1; + if (direction==1) rot = -90; + + if (nexttrans==19) { + var torig = "center center -"+opt.height/2; + op=0; + + } else { + var torig = "center center "+opt.height/2; + + } + + // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT + + //if (nexttrans==129) { + TweenLite.fromTo(nextsh,masterspeed/2000,{transformPerspective:600,z:0,x:0,rotationY:0},{rotationY:1,ease:Power1.easeInOut,z:-40}); + TweenLite.fromTo(nextsh,masterspeed/2000,{transformPerspective:600,z:-40,rotationY:1},{rotationY:0,z:0,ease:Power1.easeInOut,x:0,delay:3*(masterspeed/4000)}); + TweenLite.fromTo(actsh,masterspeed/2000,{transformPerspective:600,z:0,x:0,rotationY:0},{rotationY:1,x:0,ease:Power1.easeInOut,z:-40}); + TweenLite.fromTo(actsh,masterspeed/2000,{transformPerspective:600,z:-40,x:0,rotationY:1},{rotationY:0,z:0,x:0,ease:Power1.easeInOut,delay:3*(masterspeed/4000)}); + //} + + nextsh.find('.slotslide').each(function(j) { + var ss=jQuery(this); + + TweenLite.fromTo(ss,masterspeed/1000, + {left:0,rotationY:opt.rotate,opacity:op,top:0,scale:0.8,transformPerspective:600,transformOrigin:torig,rotationX:rot}, + {left:0,rotationY:0,opacity:1,top:0,z:0, scale:1,rotationX:0, delay:(j*50)/1000,ease:Power2.easeInOut,onComplete: function() { + + if (j==opt.slots-1) + letItFree(container,opt,nextsh,actsh,nextli,actli) + } + }); + TweenLite.to(ss,0.1,{opacity:1,delay:(j*50)/1000+masterspeed/3000}); + + }); + + actsh.find('.slotslide').each(function(j) { + var ss=jQuery(this); + var rot = -90; + if (direction==1) rot = 90; + + TweenLite.fromTo(ss,masterspeed/1000, + {opacity:1,rotationY:0,top:0,z:0,scale:1,transformPerspective:600,transformOrigin:torig, rotationX:0}, + {opacity:1,rotationY:opt.rotate,top:0, scale:0.8,rotationX:rot, delay:(j*50)/1000,ease:Power2.easeInOut,onComplete: function() { + + if (j==opt.slots-1) + letItFree(container,opt,nextsh,actsh,nextli,actli) + } + }); + TweenLite.to(ss,0.1,{opacity:0,delay:(j*50)/1000+(masterspeed/1000 - (masterspeed/10000))}); + + + }); + } + + + + + //////////////////////////////////////// + // THE SLOTSLIDE - TRANSITION XX. // + /////////////////////////////////////// + if (nexttrans==20 ) { // FLYIN + + + //SET DEFAULT IMG UNVISIBLE + nextsh.find('.defaultimg').css({'opacity':0}); + setTimeout(function() { + actsh.find('.defaultimg').css({opacity:0}); + },100); + var chix=nextli.css('z-index'); + var chix2=actli.css('z-index'); + + + if (direction==1) { + var ofx = -opt.width + var rot =70; + var torig = "left center -"+opt.height/2; + } else { + var ofx = opt.width; + var rot = -70; + var torig = "right center -"+opt.height/2; + } + + + nextsh.find('.slotslide').each(function(j) { + var ss=jQuery(this); + //ss.css({overflow:'visible'}); + TweenLite.fromTo(ss,masterspeed/1500, + {left:ofx,rotationX:40,z:-600, opacity:op,top:0,transformPerspective:600,transformOrigin:torig,rotationY:rot}, + {left:0, delay:(j*50)/1000,ease:Power2.easeInOut}); + + TweenLite.fromTo(ss,masterspeed/1000, + {rotationX:40,z:-600, opacity:op,top:0,scale:1,transformPerspective:600,transformOrigin:torig,rotationY:rot}, + {rotationX:0,opacity:1,top:0,z:0, scale:1,rotationY:0, delay:(j*50)/1000,ease:Power2.easeInOut,onComplete: function() { + + if (j==opt.slots-1) + letItFree(container,opt,nextsh,actsh,nextli,actli) + } + }); + TweenLite.to(ss,0.1,{opacity:1,delay:(j*50)/1000+masterspeed/2000}); + + }); + + + + actsh.find('.slotslide').each(function(j) { + var ss=jQuery(this); + //ss.css({overflow:'visible'}); + if (direction!=1) { + var ofx = -opt.width + var rot =70; + var torig = "left center -"+opt.height/2; + } else { + var ofx = opt.width; + var rot = -70; + var torig = "right center -"+opt.height/2; + } + TweenLite.fromTo(ss,masterspeed/1000, + {opacity:1,rotationX:0,top:0,z:0,scale:1,left:0, transformPerspective:600,transformOrigin:torig, rotationY:0}, + {opacity:1,rotationX:40,top:0, z:-600, left:ofx, scale:0.8,rotationY:rot, delay:(j*50)/1000,ease:Power2.easeInOut,onComplete: function() { + + if (j==opt.slots-1) + letItFree(container,opt,nextsh,actsh,nextli,actli) } + }); + TweenLite.to(ss,0.1,{opacity:0,delay:(j*50)/1000+(masterspeed/1000 - (masterspeed/10000))}); + + + }); + } + + + + + + + //////////////////////////////////////// + // THE SLOTSLIDE - TRANSITION XX. // + /////////////////////////////////////// + if (nexttrans==21 || nexttrans==25) { // TURNOFF + + + //SET DEFAULT IMG UNVISIBLE + nextsh.find('.defaultimg').css({'opacity':0}); + setTimeout(function() { + actsh.find('.defaultimg').css({opacity:0}); + },100); + var chix=nextli.css('z-index'); + var chix2=actli.css('z-index'); + + + if (direction==1) { + var ofx = -opt.width + var rot =110; + + if (nexttrans==25) { + var torig = "center top 0" + rot2 = -rot; + rot = opt.rotate; + } else { + var torig = "left center 0"; + rot2 = opt.rotate; + } + + } else { + var ofx = opt.width; + var rot = -110; + if (nexttrans==25) { + var torig = "center bottom 0" + rot2 = -rot; + rot = opt.rotate; + } else { + var torig = "right center 0"; + rot2 = opt.rotate; + } + } + + + nextsh.find('.slotslide').each(function(j) { + var ss=jQuery(this); + + + TweenLite.fromTo(ss,masterspeed/1500, + {left:0,rotationX:rot2,z:0, opacity:0,top:0,scale:1,transformPerspective:600,transformOrigin:torig,rotationY:rot}, + {left:0,rotationX:0,top:0,z:0, scale:1,rotationY:0, delay:(j*100)/1000+masterspeed/10000,ease:Power2.easeInOut,onComplete: function() { + + if (j==opt.slots-1) + letItFree(container,opt,nextsh,actsh,nextli,actli) + } + }); + TweenLite.to(ss,0.3,{opacity:1,delay:(j*100)/1000+(masterspeed*0.2)/2000+masterspeed/10000}); + + }); + + + + if (direction!=1) { + var ofx = -opt.width + var rot = 90; + + if (nexttrans==25) { + var torig = "center top 0" + rot2 = -rot; + rot = opt.rotate; + } else { + var torig = "left center 0"; + rot2 = opt.rotate; + } + + } else { + var ofx = opt.width; + var rot = -90; + if (nexttrans==25) { + var torig = "center bottom 0" + rot2 = -rot; + rot = opt.rotate; + } else { + var torig = "right center 0"; + rot2 = opt.rotate; + } + } + + actsh.find('.slotslide').each(function(j) { + var ss=jQuery(this); + + + TweenLite.fromTo(ss,masterspeed/3000, + {left:0,rotationX:0,z:0, opacity:1,top:0,scale:1,transformPerspective:600,transformOrigin:torig,rotationY:0}, + {left:0,rotationX:rot2,top:0,z:0, scale:1,rotationY:rot, delay:(j*100)/1000,ease:Power1.easeInOut}); + TweenLite.to(ss,0.2,{opacity:0,delay:(j*50)/1000+(masterspeed/3000 - (masterspeed/10000))}); + + + }); + } + + + + //////////////////////////////////////// + // THE SLOTSLIDE - TRANSITION XX. // + /////////////////////////////////////// + if (nexttrans==23 || nexttrans == 24) { // cube-horizontal - inboxhorizontal + + + //SET DEFAULT IMG UNVISIBLE + nextsh.find('.defaultimg').css({'opacity':0}); + setTimeout(function() { + actsh.find('.defaultimg').css({opacity:0}); + },100); + var chix=nextli.css('z-index'); + var chix2=actli.css('z-index'); + + var rot = -90; + if (direction==1) + rot = 90; + + var op = 1; + + + if (nexttrans==23) { + var torig = "center center -"+opt.width/2; + op=0; + + } else { + var torig = "center center "+opt.width/2; + + } + + + var opx=0; + + // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT + TweenLite.fromTo(nextsh,masterspeed/2000,{transformPerspective:600,z:0,x:0,rotationY:0},{rotationY:1,ease:Power1.easeInOut,z:-90}); + TweenLite.fromTo(nextsh,masterspeed/2000,{transformPerspective:600,z:-90,rotationY:1},{rotationY:0,z:0,ease:Power1.easeInOut,x:0,delay:3*(masterspeed/4000)}); + TweenLite.fromTo(actsh,masterspeed/2000,{transformPerspective:600,z:0,x:0,rotationY:0},{rotationY:1,x:0,ease:Power1.easeInOut,z:-90}); + TweenLite.fromTo(actsh,masterspeed/2000,{transformPerspective:600,z:-90,x:0,rotationY:1},{rotationY:0,z:0,x:0,ease:Power1.easeInOut,delay:3*(masterspeed/4000)}); + + nextsh.find('.slotslide').each(function(j) { + var ss=jQuery(this); + + TweenLite.fromTo(ss,masterspeed/1000, + {left:opx,rotationX:opt.rotate,opacity:op,top:0,scale:1,transformPerspective:600,transformOrigin:torig,rotationY:rot}, + {left:0,rotationX:0,opacity:1,top:0,z:0, scale:1,rotationY:0, delay:(j*50)/1000,ease:Power2.easeInOut,onComplete: function() { + + if (j==opt.slots-1) + letItFree(container,opt,nextsh,actsh,nextli,actli); + + } + }); + TweenLite.to(ss,0.1,{opacity:1,delay:(j*50)/1000+masterspeed/3000}); + + }); + + rot = 90; + if (direction==1) + rot = -90; + + + + + actsh.find('.slotslide').each(function(j) { + var ss=jQuery(this); + TweenLite.fromTo(ss,masterspeed/1000, + {left:0,opacity:1,rotationX:0,top:0,z:0,scale:1,transformPerspective:600,transformOrigin:torig, rotationY:0}, + {left:opx,opacity:1,rotationX:opt.rotate,top:0, scale:1,rotationY:rot, delay:(j*50)/1000,ease:Power2.easeInOut,onComplete: function() { + + if (j==opt.slots-1) + letItFree(container,opt,nextsh,actsh,nextli,actli) + + } + }); + TweenLite.to(ss,0.1,{opacity:0,delay:(j*50)/1000+(masterspeed/1000 - (masterspeed/10000))}); + + + }); + } + + + var data={}; + data.slideIndex=opt.next+1; + container.trigger('revolution.slide.onchange',data); + setTimeout(function() { container.trigger('revolution.slide.onafterswap'); },masterspeed); + container.trigger('revolution.slide.onvideostop'); + } + + + /****************************** + - STOP KEN BURN - + ********************************/ + function stopKenBurn(container,opt) { + try{ + var actli = container.find('>ul:first-child >li:eq('+opt.act+')'); + } catch(e) { + var actli=container.find('>ul:first-child >li:eq(1)'); + } + + opt.lastslide=opt.act; + + var nextli = container.find('>ul:first-child >li:eq('+opt.next+')'); + + + var actsh = actli.find('.slotholder'); + var nextsh = nextli.find('.slotholder'); + + nextsh.find('.defaultimg').each(function() { + var defimg = jQuery(this); + if (defimg.data('kenburn')!=undefined) + defimg.data('kenburn').restart(); + TweenLite.killTweensOf(defimg,false); + TweenLite.set(defimg,{scale:1,rotationZ:0}); + + defimg.data('bgposition',nextsh.data('bgposition')); + defimg.data('currotate',nextsh.data('rotationstart')); + defimg.data('curscale',nextsh.data('bgfit')); + + }); + /*actsh.find('.defaultimg').each(function() { + var defimg = jQuery(this); + TweenLite.killTweensOf(defimg,false); + TweenLite.set(defimg,{scale:1,rotationZ:0}); + if (defimg.data('oldbgposition')!=undefined) + defimg.data('bgposition',defimg.data('oldbgposition')); + + defimg.data('currotate',nextsh.data('rotationstart')); + defimg.data('curscale',nextsh.data('zoomstart')/100); + + });*/ + + } + + + /****************************** + - startKenBurn - + ********************************/ + function startKenBurn(container,opt) { + + try{ + var actli = container.find('>ul:first-child >li:eq('+opt.act+')'); + } catch(e) { + var actli=container.find('>ul:first-child >li:eq(1)'); + } + + opt.lastslide=opt.act; + + var nextli = container.find('>ul:first-child >li:eq('+opt.next+')'); + + + var actsh = actli.find('.slotholder'); + var nextsh = nextli.find('.slotholder'); + + var + bgps = nextsh.data('bgposition'), + bgpe = nextsh.data('bgpositionend'), + zos = nextsh.data('zoomstart')/100, + zoe = nextsh.data('zoomend')/100, + ros = nextsh.data('rotationstart'), + roe = nextsh.data('rotationend'), + bgfs = nextsh.data('bgfit'), + bgfe = nextsh.data('bgfitend'), + easeme = nextsh.data('easeme'), + dur = nextsh.data('duration')/1000; + + if (bgfs==undefined) bgfs=100; + if (bgfe==undefined) bgfe=100; + + bgfs = calculateKenBurnScales(bgfs,nextsh,opt); + bgfe = calculateKenBurnScales(bgfe,nextsh,opt); + + + if (zos==undefined) zos=1; + if (zoe==undefined) zoe=1; + if (ros==undefined) ros=0; + if (roe==undefined) roe=0; + + if (zos<1) zos=1; + if (zoe<1) zoe=1; + + + + nextsh.find('.defaultimg').each(function() { + var defimg = jQuery(this); + + defimg.data('kenburn',TweenLite.fromTo(defimg,dur,{transformPerspective:1200, backgroundSize:bgfs, z:0,backgroundPosition:bgps,rotationZ:ros},{yoyo:2,rotationZ:roe,ease:easeme,backgroundSize:bgfe,backgroundPosition:bgpe,onUpdate:function() { + defimg.data('bgposition',defimg.css('backgroundPosition')); + if (!isIE(8)) defimg.data('currotate',getRotationDegrees(defimg)); + if (!isIE(8)) defimg.data('curscale',defimg.css('backgroundSize')); + }}) + ); + + }) + } + + + /*********************************************** + - KEN BURN BACKGROUND FIT CALCULATOR - + ***********************************************/ + function calculateKenBurnScales(proc,sloth,opt) { + var ow = sloth.data('owidth'); + var oh = sloth.data('oheight'); + + var factor = (opt.container.width() /ow); + var nheight = oh * factor; + + var hfactor = (nheight / opt.container.height())*proc; + + + + return (proc+"% "+hfactor+"%"); + } + + + /****************************************************** + - CALCULATE CURRENT SCALE AND ROTATION - + *******************************************************/ + + function getMatrix(obj) { + var matrix = obj.css("-webkit-transform") || + obj.css("-moz-transform") || + obj.css("-ms-transform") || + obj.css("-o-transform") || + obj.css("transform"); + return matrix; + }; + + function parseMatrix(_str) { + return _str.replace(/^matrix(3d)?\((.*)\)$/,'$2').split(/, /); + } + + function getScaleDegrees(obj) { + var matrix = parseMatrix(getMatrix(obj)), + scale = 1; + + if(matrix[0] !== 'none') { + var a = matrix[0], + b = matrix[1], + d = 10; + scale = Math.round( Math.sqrt( a*a + b*b ) * d ) / d; + } + + return scale; + }; + + function getRotationDegrees(obj) { + var matrix = obj.css("-webkit-transform") || + obj.css("-moz-transform") || + obj.css("-ms-transform") || + obj.css("-o-transform") || + obj.css("transform"); + if(matrix !== 'none') { + var values = matrix.split('(')[1].split(')')[0].split(','); + var a = values[0]; + var b = values[1]; + var angle = Math.round(Math.atan2(b, a) * (180/Math.PI)); + } else { var angle = 0; } + return (angle < 0) ? angle +=360 : angle; + } + + /************************************** + - GIVE FREE THE TRANSITIOSN - + **************************************/ + function letItFree(container,opt,nextsh,actsh,nextli,actli) { + removeSlots(container,opt); + nextsh.find('.defaultimg').css({'opacity':1}); + if (nextli.index()!=actli.index()) actsh.find('.defaultimg').css({'opacity':0}); + opt.act=opt.next; + moveSelectedThumb(container); + if (nextsh.data('kenburns')=="on") + startKenBurn(container,opt); + } + + + ////////////////////////////////////////// + // CHANG THE YOUTUBE PLAYER STATE HERE // + //////////////////////////////////////// + function onPlayerStateChange(event) { + + var embedCode = event.target.getVideoEmbedCode(); + var ytcont = jQuery('#'+embedCode.split('id="')[1].split('"')[0]) + var container = ytcont.closest('.tp-simpleresponsive'); + var player = ytcont.parent().data('player'); + + if (event.data == YT.PlayerState.PLAYING) { + + var bt = container.find('.tp-bannertimer'); + var opt = bt.data('opt'); + bt.stop(); + + if (ytcont.closest('.tp-caption').data('volume')=="mute") + player.mute(); + + opt.videoplaying=true; + //konsole.log("VideoPlay set to True due onPlayerStateChange PLAYING"); + opt.videostartednow=1; + + } else { + + var bt = container.find('.tp-bannertimer'); + var opt = bt.data('opt'); + + if (event.data!=-1) { + if (opt.conthover==0) + bt.animate({'width':"100%"},{duration:((opt.delay-opt.cd)-100),queue:false, easing:"linear"}); + opt.videoplaying=false; + opt.videostoppednow=1; + + } + + } + if (event.data==0 && opt.nextslideatend==true) + opt.container.revnext(); + + + } + + + + //////////////////////// + // VIMEO ADD EVENT ///// + //////////////////////// + function addEvent(element, eventName, callback) { + + if (element.addEventListener) element.addEventListener(eventName, callback, false); + else + element.attachEvent(eventName, callback, false); + } + + + + ///////////////////////////////////// + // EVENT HANDLING FOR VIMEO VIDEOS // + ///////////////////////////////////// + + function vimeoready_auto(player_id,autoplay) { + + var froogaloop = $f(player_id); + var vimcont = jQuery('#'+player_id); + var container = vimcont.closest('.tp-simpleresponsive'); + + + froogaloop.addEvent('ready', function(data) { + if(autoplay) froogaloop.api('play'); + + froogaloop.addEvent('play', function(data) { + var bt = container.find('.tp-bannertimer'); + var opt = bt.data('opt'); + bt.stop(); + opt.videoplaying=true; + if (vimcont.closest('.tp-caption').data('volume')=="mute") + froogaloop.api('setVolume',"0"); + //konsole.log("VideoPlay set to True due vimeoready_auto PLAYING"); + }); + + froogaloop.addEvent('finish', function(data) { + var bt = container.find('.tp-bannertimer'); + var opt = bt.data('opt'); + if (opt.conthover==0) + bt.animate({'width':"100%"},{duration:((opt.delay-opt.cd)-100),queue:false, easing:"linear"}); + opt.videoplaying=false; + //konsole.log("VideoPlay set to False due vimeoready_auto FINISH"); + opt.videostartednow=1; + if (opt.nextslideatend==true) + opt.container.revnext(); + + }); + + froogaloop.addEvent('pause', function(data) { + var bt = container.find('.tp-bannertimer'); + var opt = bt.data('opt'); + if (opt.conthover==0) + bt.animate({'width':"100%"},{duration:((opt.delay-opt.cd)-100),queue:false, easing:"linear"}); + opt.videoplaying=false; + //konsole.log("VideoPlay set to False due vimeoready_auto PAUSE"); + opt.videostoppednow=1; + }); + }); + } + + + /////////////////////////////////////// + // EVENT HANDLING FOR VIDEO JS VIDEOS // + //////////////////////////////////////// + function html5vidready(myPlayer,player_id) { + + if (player_id==undefined) player_id = jQuery(myPlayer["b"]).attr('id'); + var player_cont = jQuery('#'+player_id); + var container = player_cont.closest('.tp-simpleresponsive'); + + myPlayer.on("play",function() { + + if (player_cont.closest('.tp-caption').data('volume')=="mute") + myPlayer.volume(0); + var bt = jQuery('body').find('.tp-bannertimer'); + var opt = bt.data('opt'); + bt.stop(); + try{ + opt.videoplaying=true; + } catch(e) {} + + + //konsole.log("VideoPlay set to True due html5vidready PLAYING"); + }); + + myPlayer.on("pause",function() { + var bt = container.find('.tp-bannertimer'); + var opt = bt.data('opt'); + if (opt.conthover==0) + bt.animate({'width':"100%"},{duration:((opt.delay-opt.cd)-100),queue:false, easing:"linear"}); + opt.videoplaying=false; + //konsole.log("VideoPlay set to False due html5vidready pause"); + opt.videostoppednow=1; + }); + + myPlayer.on("ended",function() { + var bt = container.find('.tp-bannertimer'); + var opt = bt.data('opt'); + if (opt.conthover==0) + bt.animate({'width':"100%"},{duration:((opt.delay-opt.cd)-100),queue:false, easing:"linear"}); + opt.videoplaying=false; + //konsole.log("VideoPlay set to False due html5vidready pause"); + opt.videostoppednow=1; + if (opt.nextslideatend==true) + opt.container.revnext(); + }); + + + myPlayer.on('loadedmetadata', function(data) { + + + + var videoWidth =0; + var videoHeight=0; + + for(var prop in this) { + try{ + if(this[prop].hasOwnProperty('videoWidth')) + videoWidth = this[prop].videoWidth; + + if(this[prop].hasOwnProperty('videoHeight')) + videoHeight = this[prop].videoHeight; + } catch(e) {} + } + + + var mediaAspect = videoWidth/videoHeight; + + + + + if (player_cont.data('mediaAspect') == undefined) player_cont.data('mediaAspect',mediaAspect); + if (player_cont.closest('.tp-caption').data('forcecover')==1) + updateHTML5Size(player_cont,container); + + }); + + } + ///////////////////////////////////// + // RESIZE HTML5VIDEO FOR FULLSCREEN// + ///////////////////////////////////// + function updateHTML5Size(pc,container) { + var windowW = container.width(); + var windowH = container.height(); + var mediaAspect = pc.data('mediaAspect'); + + var windowAspect = windowW/windowH; + pc.parent().find('.vjs-poster').css({width:"100%",height:"100%"}); + if (windowAspect < mediaAspect) { + // taller + pc + .width(windowH*mediaAspect) + .height(windowH); + pc + .css('top',0) + .css('left',-(windowH*mediaAspect-windowW)/2) + .css('height',windowH); + pc.find('.vjs-tech').css('width',windowH*mediaAspect); + + } else { + // wider + pc + .width(windowW) + .height(windowW/mediaAspect); + pc + .css('top',-(windowW/mediaAspect-windowH)/2) + .css('left',0) + .css('height',windowW/mediaAspect); + pc.find('.vjs-tech').css('width','100%'); + + } + + } + + + + + + //////////////////////// + // SHOW THE CAPTION // + /////////////////////// + function animateTheCaptions(nextli, opt,recalled) { + + var offsetx=0; + var offsety=0; + + nextli.find('.tp-caption').each(function(i) { + + + offsetx = opt.width/2 - (opt.startwidth*opt.bw)/2; + + + + var xbw = opt.bw; + var xbh = opt.bh; + + + if (opt.fullScreen=="on") + offsety = opt.height/2 - (opt.startheight*opt.bh)/2; + + if (opt.autoHeight=="on") + offsety = opt.container.height()/2 - (opt.startheight*opt.bh)/2;; + + if (offsety<0) offsety=0; + + var nextcaption=jQuery(this);//nextli.find('.tp-caption:eq('+i+')'); + + var handlecaption=0; + + // HIDE CAPTION IF RESOLUTION IS TOO LOW + if (opt.width0 || nextcaption.find('video').length>0) { + + if (nextcaption.data('autoplayonlyfirsttime') == true || nextcaption.data('autoplayonlyfirsttime')=="true" ) { + nextcaption.data('autoplay',true); + } + + nextcaption.find('iframe').each(function() { + var ifr=jQuery(this); + + + // START YOUTUBE HANDLING + opt.nextslideatend = nextcaption.data('nextslideatend'); + if (nextcaption.data('thumbimage')!=undefined && nextcaption.data('thumbimage').length>2 && nextcaption.data('autoplay')!=true && !recalled) { + nextcaption.find('.tp-thumb-image').remove(); + nextcaption.append('
            '); + } + + if (ifr.attr('src').toLowerCase().indexOf('youtube')>=0) { + + if (!ifr.hasClass("HasListener")) { + try { + ifr.attr('id',frameID); + + var player; + if (nextcaption.data('autoplay')==true) + player = new YT.Player(frameID, { + events: { + "onStateChange": onPlayerStateChange, + 'onReady': function(event) {event.target.playVideo()} + } + }); + else + player = new YT.Player(frameID, { + events: { + "onStateChange": onPlayerStateChange + } + }); + ifr.addClass("HasListener"); + + nextcaption.data('player',player); + + } catch(e) {} + } else { + if (nextcaption.data('autoplay')==true) { + var player=nextcaption.data('player'); + nextcaption.data('timerplay',setTimeout(function() { + if (nextcaption.data('forcerewind')=="on") + player.seekTo(0); + player.playVideo(); + },nextcaption.data('start'))); + } + } // END YOUTUBE HANDLING + + // PLAY VIDEO IF THUMBNAIL HAS BEEN CLICKED + nextcaption.find('.tp-thumb-image').click(function() { + TweenLite.to(jQuery(this),0.3,{opacity:0,ease:Power3.easeInOut,onComplete: function() { + nextcaption.find('.tp-thumb-image').remove(); + } + }) + var player=nextcaption.data('player'); + player.playVideo(); + }) + } else { + // START VIMEO HANDLING + if (ifr.attr('src').toLowerCase().indexOf('vimeo')>=0) { + + if (!ifr.hasClass("HasListener")) { + ifr.addClass("HasListener"); + ifr.attr('id',frameID); + var isrc = ifr.attr('src'); + var queryParameters = {}, queryString = isrc, + re = /([^&=]+)=([^&]*)/g, m; + // Creates a map with the query string parameters + while (m = re.exec(queryString)) { + queryParameters[decodeURIComponent(m[1])] = decodeURIComponent(m[2]); + } + + if (queryParameters['player_id']!=undefined) + isrc = isrc.replace(queryParameters['player_id'],frameID); + else + isrc=isrc+"&player_id="+frameID; + + try{ isrc = isrc.replace('api=0','api=1'); } catch(e) {} + + isrc=isrc+"&api=1"; + + ifr.attr('src',isrc); + var player = nextcaption.find('iframe')[0]; + + $f(player).addEvent('ready', function() {vimeoready_auto(frameID,nextcaption.data('autoplay'))}); + + } else { + if (nextcaption.data('autoplay')==true) { + + var ifr = nextcaption.find('iframe'); + var id = ifr.attr('id'); + var froogaloop = $f(id); + nextcaption.data('timerplay',setTimeout(function() { + if (nextcaption.data('forcerewind')=="on") + froogaloop.api("seekTo",0); + froogaloop.api("play"); + },nextcaption.data('start'))); + } + }// END HAS LISTENER HANDLING + + // PLAY VIDEO IF THUMBNAIL HAS BEEN CLICKED + nextcaption.find('.tp-thumb-image').click(function() { + TweenLite.to(jQuery(this),0.3,{opacity:0,ease:Power3.easeInOut,onComplete: function() { + nextcaption.find('.tp-thumb-image').remove(); + } + }) + var ifr = nextcaption.find('iframe'); + var id = ifr.attr('id'); + var froogaloop = $f(id); + froogaloop.api("play"); + }) + + + } // END OF VIMEO HANDLING + } // END OF CHOOSE BETWEEN YOUTUBE AND VIMEO + }); // END OF LOOP THROUGH IFRAMES + + // START OF VIDEO JS + if (nextcaption.find('video').length>0) { + + + nextcaption.find('video').each(function(i) { + var html5vid = jQuery(this).parent(); + + if (nextcaption.data('dottedoverlay')!="none" && nextcaption.data('dottedoverlay')!=undefined) + if (nextcaption.find('.tp-dottedoverlay').length!=1) + html5vid.append('
            '); + + var mediaaspect=16/9; + if (nextcaption.data('aspectratio')=="4:3") mediaaspect=4/3; + html5vid.data('mediaAspect',mediaaspect); + + + + if (html5vid.closest('.tp-caption').data('forcecover')==1) + updateHTML5Size(html5vid,opt.container); + + + + if (html5vid.hasClass("video-js")) { + opt.nextslideatend = nextcaption.data('nextslideatend'); + if (!html5vid.hasClass("HasListener")) { + html5vid.addClass("HasListener"); + var videoID = "videoid_"+Math.round(Math.random()*1000+1); + html5vid.attr('id',videoID); + + videojs(videoID).ready(function(){ + + html5vidready(this,videoID) + + }); + + } else { + videoID = html5vid.attr('id'); + } + + + html5vid.find('.vjs-poster').css({display:"block"}); + + if (nextcaption.data('autoplay')==true) { + + var bt=jQuery('body').find('#'+opt.container.attr('id')).find('.tp-bannertimer'); + setTimeout(function(){ + bt.stop(); + opt.videoplaying=true; + },200); + + //konsole.log("VideoPlay set to True due HTML5 VIDEO 1st/2nd load AutoPlay"); + + + videojs(videoID).ready(function(){ + var myPlayer = this; + try { + if (nextcaption.data('forcerewind')=="on") + myPlayer.currentTime(0); + } catch(e) { + + } + + html5vid.data('timerplay',setTimeout(function() { + if (nextcaption.data('forcerewind')=="on") + myPlayer.currentTime(0); + + if (html5vid.closest('.tp-caption').data('volume')=="mute") + myPlayer.volume(0); + + setTimeout(function() { + myPlayer.play(0); + html5vid.find('.vjs-poster').css({display:"none"}); + },50); + },10+nextcaption.data('start'))); + }); + } + + + if (html5vid.data('ww') == undefined) html5vid.data('ww',html5vid.width()); + if (html5vid.data('hh') == undefined) html5vid.data('hh',html5vid.height()); + + videojs(videoID).ready(function(){ + if (!nextcaption.hasClass("fullscreenvideo")) { + var myPlayer = videojs(videoID); + + try{ + myPlayer.width(html5vid.data('ww')*opt.bw); + myPlayer.height(html5vid.data('hh')*opt.bh); + } catch(e) {} + } + }); + + + + if (html5vid.closest('.tp-caption').data('forcecover')==1) { + updateHTML5Size(html5vid,opt.container); + html5vid.addClass("fullcoveredvideo"); + } + + + + } + + }); + } // END OF VIDEO JS FUNCTIONS + + // IF AUTOPLAY IS ON, WE NEED SOME STOP FUNCTION ON + if (nextcaption.data('autoplay')==true) { + var bt=jQuery('body').find('#'+opt.container.attr('id')).find('.tp-bannertimer'); + + setTimeout(function() { + bt.stop(); + opt.videoplaying=true; + + },200) + opt.videoplaying=true; + + if (nextcaption.data('autoplayonlyfirsttime') == true || nextcaption.data('autoplayonlyfirsttime')=="true" ) { + nextcaption.data('autoplay',false); + nextcaption.data('autoplayonlyfirsttime',false); + } + } + } + + + + + // NEW ENGINE + //if (nextcaption.hasClass("randomrotate") && (opt.ie || opt.ie9)) nextcaption.removeClass("randomrotate").addClass("sfb"); + // nextcaption.removeClass('noFilterClass'); + + + + var imw =0; + var imh = 0; + + if (nextcaption.find('img').length>0) { + var im = nextcaption.find('img'); + if (im.data('ww') == undefined) im.data('ww',im.width()); + if (im.data('hh') == undefined) im.data('hh',im.height()); + + var ww = im.data('ww'); + var hh = im.data('hh'); + + + im.width(ww*opt.bw); + im.height(hh*opt.bh); + imw = im.width(); + imh = im.height(); + } else { + + if (nextcaption.find('iframe').length>0 || nextcaption.find('.video-js').length>0) { + + var im = nextcaption.find('iframe'); + im.css({display:"block"}); + if (nextcaption.data('ww') == undefined) { + nextcaption.data('ww',im.width()); + } + if (nextcaption.data('hh') == undefined) nextcaption.data('hh',im.height()); + + var ww = nextcaption.data('ww'); + var hh = nextcaption.data('hh'); + + var nc =nextcaption; + if (nc.data('fsize') == undefined) nc.data('fsize',parseInt(nc.css('font-size'),0) || 0); + if (nc.data('pt') == undefined) nc.data('pt',parseInt(nc.css('paddingTop'),0) || 0); + if (nc.data('pb') == undefined) nc.data('pb',parseInt(nc.css('paddingBottom'),0) || 0); + if (nc.data('pl') == undefined) nc.data('pl',parseInt(nc.css('paddingLeft'),0) || 0); + if (nc.data('pr') == undefined) nc.data('pr',parseInt(nc.css('paddingRight'),0) || 0); + + if (nc.data('mt') == undefined) nc.data('mt',parseInt(nc.css('marginTop'),0) || 0); + if (nc.data('mb') == undefined) nc.data('mb',parseInt(nc.css('marginBottom'),0) || 0); + if (nc.data('ml') == undefined) nc.data('ml',parseInt(nc.css('marginLeft'),0) || 0); + if (nc.data('mr') == undefined) nc.data('mr',parseInt(nc.css('marginRight'),0) || 0); + + if (nc.data('bt') == undefined) nc.data('bt',parseInt(nc.css('borderTop'),0) || 0); + if (nc.data('bb') == undefined) nc.data('bb',parseInt(nc.css('borderBottom'),0) || 0); + if (nc.data('bl') == undefined) nc.data('bl',parseInt(nc.css('borderLeft'),0) || 0); + if (nc.data('br') == undefined) nc.data('br',parseInt(nc.css('borderRight'),0) || 0); + + if (nc.data('lh') == undefined) nc.data('lh',parseInt(nc.css('lineHeight'),0) || 0); + + var fvwidth=opt.width; + var fvheight=opt.height; + if (fvwidth>opt.startwidth) fvwidth=opt.startwidth; + if (fvheight>opt.startheight) fvheight=opt.startheight; + + + + if (!nextcaption.hasClass('fullscreenvideo')) + nextcaption.css({ + + 'font-size': (nc.data('fsize') * opt.bw)+"px", + + 'padding-top': (nc.data('pt') * opt.bh) + "px", + 'padding-bottom': (nc.data('pb') * opt.bh) + "px", + 'padding-left': (nc.data('pl') * opt.bw) + "px", + 'padding-right': (nc.data('pr') * opt.bw) + "px", + + 'margin-top': (nc.data('mt') * opt.bh) + "px", + 'margin-bottom': (nc.data('mb') * opt.bh) + "px", + 'margin-left': (nc.data('ml') * opt.bw) + "px", + 'margin-right': (nc.data('mr') * opt.bw) + "px", + + 'border-top': (nc.data('bt') * opt.bh) + "px", + 'border-bottom': (nc.data('bb') * opt.bh) + "px", + 'border-left': (nc.data('bl') * opt.bw) + "px", + 'border-right': (nc.data('br') * opt.bw) + "px", + + 'line-height': (nc.data('lh') * opt.bh) + "px", + 'height':(hh*opt.bh)+'px', + 'white-space':"nowrap" + }); + else { + offsetx=0; offsety=0; + nextcaption.data('x',0) + nextcaption.data('y',0) + + var ovhh = opt.height + if (opt.autoHeight=="on") + ovhh = opt.container.height() + nextcaption.css({ + + 'width':opt.width, + 'height':ovhh + }); + } + + + im.width(ww*opt.bw); + im.height(hh*opt.bh); + imw = im.width(); + imh = im.height(); + } else { + + + nextcaption.find('.tp-resizeme, .tp-resizeme *').each(function() { + calcCaptionResponsive(jQuery(this),opt); + }); + + if (nextcaption.hasClass("tp-resizeme")) { + nextcaption.find('*').each(function() { + calcCaptionResponsive(jQuery(this),opt); + }); + } + + calcCaptionResponsive(nextcaption,opt); + + imh=nextcaption.outerHeight(true); + imw=nextcaption.outerWidth(true); + + // NEXTCAPTION FRONTCORNER CHANGES + var ncch = nextcaption.outerHeight(); + var bgcol = nextcaption.css('backgroundColor'); + nextcaption.find('.frontcorner').css({ + 'borderWidth':ncch+"px", + 'left':(0-ncch)+'px', + 'borderRight':'0px solid transparent', + 'borderTopColor':bgcol + }); + + nextcaption.find('.frontcornertop').css({ + 'borderWidth':ncch+"px", + 'left':(0-ncch)+'px', + 'borderRight':'0px solid transparent', + 'borderBottomColor':bgcol + }); + + // NEXTCAPTION BACKCORNER CHANGES + nextcaption.find('.backcorner').css({ + 'borderWidth':ncch+"px", + 'right':(0-ncch)+'px', + 'borderLeft':'0px solid transparent', + 'borderBottomColor':bgcol + }); + + // NEXTCAPTION BACKCORNER CHANGES + nextcaption.find('.backcornertop').css({ + 'borderWidth':ncch+"px", + 'right':(0-ncch)+'px', + 'borderLeft':'0px solid transparent', + 'borderTopColor':bgcol + }); + + } + + + } + + if (opt.fullScreenAlignForce == "on") { + xbw = 1; + xbh = 1; + offsetx=0; + offsety=0; + } + + + + if (nextcaption.data('voffset')==undefined) nextcaption.data('voffset',0); + if (nextcaption.data('hoffset')==undefined) nextcaption.data('hoffset',0); + + var vofs= nextcaption.data('voffset')*xbw; + var hofs= nextcaption.data('hoffset')*xbw; + + var crw = opt.startwidth*xbw; + var crh = opt.startheight*xbw; + + if (opt.fullScreenAlignForce == "on") { + crw = opt.container.width(); + crh = opt.container.height(); + + } + + + + // CENTER THE CAPTION HORIZONTALLY + if (nextcaption.data('x')=="center" || nextcaption.data('xcenter')=='center') { + nextcaption.data('xcenter','center'); + nextcaption.data('x',(crw/2 - nextcaption.outerWidth(true)/2)/xbw+ hofs); + + } + + // ALIGN LEFT THE CAPTION HORIZONTALLY + if (nextcaption.data('x')=="left" || nextcaption.data('xleft')=='left') { + nextcaption.data('xleft','left'); + nextcaption.data('x',(0)/xbw+hofs); + + } + + // ALIGN RIGHT THE CAPTION HORIZONTALLY + if (nextcaption.data('x')=="right" || nextcaption.data('xright')=='right') { + nextcaption.data('xright','right'); + nextcaption.data('x',((crw - nextcaption.outerWidth(true))+hofs)/xbw); + //konsole.log("crw:"+crw+" width:"+nextcaption.outerWidth(true)+" xbw:"+xbw); + //konsole.log("x-pos:"+nextcaption.data('x')) + } + + + // CENTER THE CAPTION VERTICALLY + if (nextcaption.data('y')=="center" || nextcaption.data('ycenter')=='center') { + nextcaption.data('ycenter','center'); + nextcaption.data('y',(crh/2 - nextcaption.outerHeight(true)/2)/xbh + vofs); + + } + + // ALIGN TOP THE CAPTION VERTICALLY + if (nextcaption.data('y')=="top" || nextcaption.data('ytop')=='top') { + nextcaption.data('ytop','top'); + nextcaption.data('y',(0)/opt.bh+vofs); + + } + + // ALIGN BOTTOM THE CAPTION VERTICALLY + if (nextcaption.data('y')=="bottom" || nextcaption.data('ybottom')=='bottom') { + nextcaption.data('ybottom','bottom'); + nextcaption.data('y',((crh - nextcaption.outerHeight(true))+vofs)/xbw); + } + + + + // THE TRANSITIONS OF CAPTIONS + // MDELAY AND MSPEED + if (nextcaption.data('start') == undefined) nextcaption.data('start',1000); + + + + var easedata=nextcaption.data('easing'); + if (easedata==undefined) easedata="Power1.easeOut"; + + + + + var mdelay = nextcaption.data('start')/1000; + var mspeed = nextcaption.data('speed')/1000; + var calcx = (xbw*nextcaption.data('x')+offsetx); + var calcy = (opt.bh*nextcaption.data('y')+offsety); + + + + + if (opt.fullScreenAlignForce == "on") + calcy = nextcaption.data('y')+offsety; + + TweenLite.killTweensOf(nextcaption,false); + clearTimeout(nextcaption.data('reversetimer')); + + + var tlop = 0, + tlxx = calcx, tlyy = calcy, tlzz = 2, + tlsc = 1,tlro = 0, + sc=1,scX=1,scY= 1, + ro=0,roX=0,roY=0,roZ = 0, + skwX=0, skwY = 0, + opa = 0, + trorig = "center,center", + tper = 300, + repeatV = 0, + yoyoV = false, + repeatdelayV = 0; + + if (nextcaption.data('repeat')!=undefined) repeatV = nextcaption.data('repeat'); + if (nextcaption.data('yoyo')!=undefined) yoyoV = nextcaption.data('yoyo'); + if (nextcaption.data('repeatdelay')!=undefined) repeatdelayV = nextcaption.data('repeatdelay'); + + + if (nextcaption.hasClass("customin")) { + + var customarray = nextcaption.data('customin').split(';'); + jQuery.each(customarray,function(index,param) { + + param = param.split(":") + + var w = param[0], + v = param[1]; + + + if (w=="rotationX") roX = parseInt(v,0); + if (w=="rotationY") roY = parseInt(v,0); + if (w=="rotationZ") roZ = parseInt(v,0); + if (w=="scaleX") scX = parseFloat(v); + if (w=="scaleY") scY = parseFloat(v); + if (w=="opacity") opa = parseFloat(v); + if (w=="skewX") skwX = parseInt(v,0); + if (w=="skewY") skwY = parseInt(v,0); + if (w=="x") tlxx = calcx + parseInt(v,0); + if (w=="y") tlyy = calcy + parseInt(v,0); + if (w=="z") tlzz = parseInt(v,0); + if (w=="transformOrigin") trorig = v.toString(); + if (w=="transformPerspective") tper=parseInt(v,0); + + + }) + } + + + + if (nextcaption.hasClass("randomrotate")) { + + sc = Math.random()*3+1; + ro = Math.round(Math.random()*200-100); + tlxx = calcx + Math.round(Math.random()*200-100); + tlyy = calcy + Math.round(Math.random()*200-100); + } + + if (nextcaption.hasClass('lfr') || nextcaption.hasClass('skewfromright')) + tlxx = 15+opt.width; + + + + if (nextcaption.hasClass('lfl') || nextcaption.hasClass('skewfromleft')) + tlxx = -15-imw; + + if (nextcaption.hasClass('sfl') | nextcaption.hasClass('skewfromleftshort')) + tlxx = calcx-50; + + if (nextcaption.hasClass('sfr') | nextcaption.hasClass('skewfromrightshort')) + tlxx = calcx+50; + + + if (nextcaption.hasClass('lft')) + tlyy = -25 - imh; + + + if (nextcaption.hasClass('lfb')) + tlyy = 25 + opt.height; + + if (nextcaption.hasClass('sft')) + tlyy = calcy-50; + + if (nextcaption.hasClass('sfb')) + tlyy = calcy+50; + + if (nextcaption.hasClass('skewfromright') || nextcaption.hasClass('skewfromrightshort')) + skwX = -85 + + if (nextcaption.hasClass('skewfromleft') || nextcaption.hasClass('skewfromleftshort')) + skwX = 85 + + if (get_browser().toLowerCase()=="safari") { + roX=0;roY=0; + } + tlxx=Math.round(tlxx); + tlyy=Math.round(tlyy); + calcx=Math.round(calcx); + calcy=Math.round(calcy); + + + + // CHANGE to TweenMax. if Yoyo and Repeat is used. Dont forget to laod the Right Tools for it !! + if (nextcaption.hasClass("customin")) { + + nextcaption.data('anim',TweenLite.fromTo(nextcaption,mspeed, + { scaleX:scX, + scaleY:scY, + rotationX:roX, + rotationY:roY, + rotationZ:roZ, + x:0, + y:0, + left:tlxx, + top:tlyy, + z:tlzz, + opacity:opa, + transformPerspective:tper, + transformOrigin:trorig, + visibility:'hidden'}, + + { + left:calcx, + top:calcy, + scaleX:1, + scaleY:1, + rotationX:0, + rotationY:0, + rotationZ:0, + skewX:0, + skewY:0, + z:0, + x:0, + y:0, + visibility:'visible', + opacity:1, + delay:mdelay, + ease:easedata, + overwrite:"all", + + /*yoyo:yoyoV, + repeat:repeatV, + repeatDelay:repeatdelayV*/ + })); + + + } else { + + + nextcaption.data('anim',TweenLite.fromTo(nextcaption,mspeed, + { scale:sc, + rotationX:0, + rotationY:0, + skewY:0, + rotation:ro, + left:tlxx+'px', + top:tlyy+"px", + opacity:0, + z:0, + x:0, + y:0, + skewX:skwX, + transformPerspective:600, + visibility:'visible', + + }, + + { left:calcx+'px', + top:calcy+"px", + scale:1, + skewX:0, + rotation:0, + z:0, + visibility:'visible', + opacity:1, + delay:mdelay, + ease:easedata, + overwrite:"all", + yoyo:yoyoV, + repeat:repeatV, + repeatDelay:repeatdelayV, + + + })); + } + + + + + + nextcaption.data('killall',setTimeout(function() { + nextcaption.css({transform:"none",'-moz-transform':'none','-webkit-transform':'none'}); + },(mspeed*1000)+(mdelay*1000)+20)) + + + nextcaption.data('timer',setTimeout(function() { + if (nextcaption.hasClass("fullscreenvideo")) + nextcaption.css({'display':'block'}); + + },nextcaption.data('start'))); + + + // IF THERE IS ANY EXIT ANIM DEFINED + if (nextcaption.data('end')!=undefined) + endMoveCaption(nextcaption,opt,nextcaption.data('end')/1000); + + + } + + }) + + var bt=jQuery('body').find('#'+opt.container.attr('id')).find('.tp-bannertimer'); + bt.data('opt',opt); + } + + + function get_browser(){ + var N=navigator.appName, ua=navigator.userAgent, tem; + var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i); + if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1]; + M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?']; + return M[0]; + } + function get_browser_version(){ + var N=navigator.appName, ua=navigator.userAgent, tem; + var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i); + if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1]; + M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?']; + return M[1]; + } + + ///////////////////////////////////////////////////////////////// + // - CALCULATE THE RESPONSIVE SIZES OF THE CAPTIONS - // + ///////////////////////////////////////////////////////////////// + function calcCaptionResponsive(nc,opt) { + if (nc.data('fsize') == undefined) nc.data('fsize',parseInt(nc.css('font-size'),0) || 0); + if (nc.data('pt') == undefined) nc.data('pt',parseInt(nc.css('paddingTop'),0) || 0); + if (nc.data('pb') == undefined) nc.data('pb',parseInt(nc.css('paddingBottom'),0) || 0); + if (nc.data('pl') == undefined) nc.data('pl',parseInt(nc.css('paddingLeft'),0) || 0); + if (nc.data('pr') == undefined) nc.data('pr',parseInt(nc.css('paddingRight'),0) || 0); + + if (nc.data('mt') == undefined) nc.data('mt',parseInt(nc.css('marginTop'),0) || 0); + if (nc.data('mb') == undefined) nc.data('mb',parseInt(nc.css('marginBottom'),0) || 0); + if (nc.data('ml') == undefined) nc.data('ml',parseInt(nc.css('marginLeft'),0) || 0); + if (nc.data('mr') == undefined) nc.data('mr',parseInt(nc.css('marginRight'),0) || 0); + + if (nc.data('bt') == undefined) nc.data('bt',parseInt(nc.css('borderTopWidth'),0) || 0); + if (nc.data('bb') == undefined) nc.data('bb',parseInt(nc.css('borderBottomWidth'),0) || 0); + if (nc.data('bl') == undefined) nc.data('bl',parseInt(nc.css('borderLeftWidth'),0) || 0); + if (nc.data('br') == undefined) nc.data('br',parseInt(nc.css('borderRightWidth'),0) || 0); + + if (nc.data('lh') == undefined) nc.data('lh',parseInt(nc.css('lineHeight'),0) || 0); + if (nc.data('minwidth') == undefined) nc.data('minwidth',parseInt(nc.css('minWidth'),0) || 0); + if (nc.data('minheight') == undefined) nc.data('minheight',parseInt(nc.css('minHeight'),0) || 0); + if (nc.data('maxwidth') == undefined) nc.data('maxwidth',parseInt(nc.css('maxWidth'),0) || "none"); + if (nc.data('maxheight') == undefined) nc.data('maxheight',parseInt(nc.css('maxHeight'),0) || "none"); + + if (nc.data('wan') == undefined) nc.data('wan',nc.css("-webkit-transition")); + if (nc.data('moan') == undefined) nc.data('moan',nc.css("-moz-animation-transition")); + if (nc.data('man') == undefined) nc.data('man',nc.css("-ms-animation-transition")); + if (nc.data('ani') == undefined) nc.data('ani',nc.css("transition")); + + + nc.css("-webkit-transition", "none"); + nc.css("-moz-transition", "none"); + nc.css("-ms-transition", "none"); + nc.css("transition", "none"); + + TweenLite.set(nc,{ + fontSize: Math.round((nc.data('fsize') * opt.bw))+"px", + + paddingTop: Math.round((nc.data('pt') * opt.bh)) + "px", + paddingBottom: Math.round((nc.data('pb') * opt.bh)) + "px", + paddingLeft: Math.round((nc.data('pl') * opt.bw)) + "px", + paddingRight: Math.round((nc.data('pr') * opt.bw)) + "px", + + marginTop: (nc.data('mt') * opt.bh) + "px", + marginBottom: (nc.data('mb') * opt.bh) + "px", + marginLeft: (nc.data('ml') * opt.bw) + "px", + marginRight: (nc.data('mr') * opt.bw) + "px", + + borderTopWidth: Math.round((nc.data('bt') * opt.bh)) + "px", + borderBottomWidth: Math.round((nc.data('bb') * opt.bh)) + "px", + borderLeftWidth: Math.round((nc.data('bl') * opt.bw)) + "px", + borderRightWidth: Math.round((nc.data('br') * opt.bw)) + "px", + + lineHeight: Math.round((nc.data('lh') * opt.bh)) + "px", + whiteSpace:"nowrap", + minWidth:(nc.data('minwidth') * opt.bw) + "px", + minHeight:(nc.data('minheight') * opt.bh) + "px" + }); + setTimeout(function() { + nc.css("-webkit-transition", nc.data('wan')); + nc.css("-moz-transition", nc.data('moan')); + nc.css("-ms-transition", nc.data('man')); + nc.css("transition", nc.data('ani')); + + },30); + + //konsole.log(nc.data('maxwidth')+" "+nc.data('maxheight')); + if (nc.data('maxheight')!='none') + nc.css({'maxHeight':(nc.data('maxheight') * opt.bh) + "px"}); + + + if (nc.data('maxwidth')!='none') + nc.css({'maxWidth':(nc.data('maxwidth') * opt.bw) + "px"}); + } + + + ////////////////////////// + // REMOVE THE CAPTIONS // + ///////////////////////// + function removeTheCaptions(actli,opt) { + + + actli.find('.tp-caption').each(function(i) { + var nextcaption=jQuery(this); //actli.find('.tp-caption:eq('+i+')'); + + if (nextcaption.find('iframe').length>0) { + // VIMEO VIDEO PAUSE + try { + var ifr = nextcaption.find('iframe'); + var id = ifr.attr('id'); + var froogaloop = $f(id); + froogaloop.api("pause"); + clearTimeout(nextcaption.data('timerplay')); + } catch(e) {} + //YOU TUBE PAUSE + try { + var player=nextcaption.data('player'); + player.stopVideo(); + clearTimeout(nextcaption.data('timerplay')); + } catch(e) {} + } + + // IF HTML5 VIDEO IS EMBEDED + if (nextcaption.find('video').length>0) { + try{ + nextcaption.find('video').each(function(i) { + var html5vid = jQuery(this).parent(); + var videoID =html5vid.attr('id'); + clearTimeout(html5vid.data('timerplay')); + videojs(videoID).ready(function(){ + var myPlayer = this; + myPlayer.pause(); + }); + }) + }catch(e) {} + } // END OF VIDEO JS FUNCTIONS + try { + endMoveCaption(nextcaption,opt,0); + } catch(e) {} + + + + }); + } + + ////////////////////////// + // MOVE OUT THE CAPTIONS // + ///////////////////////// + function endMoveCaption(nextcaption,opt,mdelay) { + + + var mspeed=nextcaption.data('endspeed'); + if (mspeed==undefined) mspeed=nextcaption.data('speed'); + + mspeed = mspeed/1000; + + var easedata=nextcaption.data('endeasing'); + if (easedata==undefined) easedata=Power1.easeInOut; + + + + if (nextcaption.hasClass('ltr') || + nextcaption.hasClass('ltl') || + nextcaption.hasClass('str') || + nextcaption.hasClass('stl') || + nextcaption.hasClass('ltt') || + nextcaption.hasClass('ltb') || + nextcaption.hasClass('stt') || + nextcaption.hasClass('stb') || + nextcaption.hasClass('skewtoright') || + nextcaption.hasClass('skewtorightshort') || + nextcaption.hasClass('skewtoleft') || + nextcaption.hasClass('skewtoleftshort')) + { + + skwX = 0; + + if (nextcaption.hasClass('skewtoright') || nextcaption.hasClass('skewtorightshort')) + skwX = 35 + + if (nextcaption.hasClass('skewtoleft') || nextcaption.hasClass('skewtoleftshort')) + skwX = -35 + + var xx=0; + var yy=0; + + if (nextcaption.hasClass('ltr') || nextcaption.hasClass('skewtoright')) + xx=opt.width+60; + else if (nextcaption.hasClass('ltl') || nextcaption.hasClass('skewtoleft')) + xx=0-(opt.width+60); + else if (nextcaption.hasClass('ltt')) + yy=0-(opt.height+60); + else if (nextcaption.hasClass('ltb')) + yy=opt.height+60; + else if (nextcaption.hasClass('str') || nextcaption.hasClass('skewtorightshort')) { + xx=50;oo=0; + } else if (nextcaption.hasClass('stl') || nextcaption.hasClass('skewtoleftshort')) { + xx=-50;oo=0; + } else if (nextcaption.hasClass('stt')) { + yy=-50;oo=0; + } else if (nextcaption.hasClass('stb')) { + yy=50;oo=0; + } + + if (nextcaption.hasClass('skewtorightshort')) + xx = xx + 220; + + if (nextcaption.hasClass('skewtoleftshort')) + xx = xx -220 + + + nextcaption.data('outanim',TweenLite.to(nextcaption,mspeed, + { + x:xx, + y:yy, + scale:1, + rotation:0, + skewX:skwX, + opacity:0, + delay:mdelay, + z:0, + overwrite:"auto", + ease:easedata, + onStart:function() { + if (nextcaption.data('anim') !=undefined) + nextcaption.data('anim').pause(); + } + })); + + } + + else + + if ( nextcaption.hasClass("randomrotateout")) { + + nextcaption.data('outanim',TweenLite.to(nextcaption,mspeed, + { left:Math.random()*opt.width, + top:Math.random()*opt.height, + scale:Math.random()*2+0.3, + rotation:Math.random()*360-180, + z:0, + opacity:0, + delay:mdelay, + ease:easedata, + onStart:function() { + if (nextcaption.data('anim') !=undefined) + nextcaption.data('anim').pause(); + } + })); + + } + + else + + if (nextcaption.hasClass('fadeout')) { + + + + nextcaption.data('outanim',TweenLite.to(nextcaption,mspeed, + { opacity:0, + delay:mdelay, + ease:easedata, + onStart:function() { + if (nextcaption.data('anim') !=undefined) + nextcaption.data('anim').pause(); + }})); + + } + + else + + if (nextcaption.hasClass("customout")) { + var tlop = 0, + tlxx = 0, tlyy = 0, tlzz = 2, + tlsc = 1,tlro = 0, + sc=1,scX=1,scY= 1, + ro=0,roX=0,roY=0,roZ = 0, + skwX=0, skwY = 0, + opa = 0, + trorig = "center,center", + tper = 300; + + var customarray = nextcaption.data('customout').split(';'); + jQuery.each(customarray,function(index,param) { + //customarray.forEach(function(param) { + param = param.split(":") + + var w = param[0], + v = param[1]; + + + if (w=="rotationX") roX = parseInt(v,0); + if (w=="rotationY") roY = parseInt(v,0); + if (w=="rotationZ") roZ = parseInt(v,0); + if (w=="scaleX") scX = parseFloat(v); + if (w=="scaleY") scY = parseFloat(v); + if (w=="opacity") opa = parseFloat(v); + if (w=="skewX") skwX = parseInt(v,0); + if (w=="skewY") skwY = parseInt(v,0); + if (w=="x") tlxx = parseInt(v,0); + if (w=="y") tlyy = parseInt(v,0); + if (w=="z") tlzz = parseInt(v); + if (w=="transformOrigin") trorig = v; + if (w=="transformPerspective") tper=parseInt(v,0); + + + }) + + + + nextcaption.data('outanim',TweenLite.to(nextcaption,mspeed, + + + { + scaleX:scX, + scaleY:scY, + rotationX:roX, + rotationY:roY, + rotationZ:roZ, + x:tlxx, + y:tlyy, + z:tlzz, + opacity:opa, + delay:mdelay, + ease:easedata, + overwrite:"auto", + onStart:function() { + + if (nextcaption.data('anim') !=undefined) + nextcaption.data('anim').pause(); + TweenLite.set(nextcaption,{ + transformPerspective:tper, + transformOrigin:trorig, + overwrite:"auto" + }); + + }})); + } + + else { + //TweenLite.to(nextcaption,{delay:mdelay,overwrite:"auto"}); + clearTimeout(nextcaption.data('reversetimer')); + nextcaption.data('reversetimer',setTimeout(function() { + + nextcaption.data('anim').reverse() + },mdelay*1000)); + + } + } + + /////////////////////////// + // REMOVE THE LISTENERS // + /////////////////////////// + function removeAllListeners(container,opt) { + container.children().each(function() { + try{ jQuery(this).die('click'); } catch(e) {} + try{ jQuery(this).die('mouseenter');} catch(e) {} + try{ jQuery(this).die('mouseleave');} catch(e) {} + try{ jQuery(this).unbind('hover');} catch(e) {} + }) + try{ container.die('click','mouseenter','mouseleave');} catch(e) {} + clearInterval(opt.cdint); + container=null; + + + + } + + /////////////////////////// + // - COUNTDOWN - // + ///////////////////////// + function countDown(container,opt) { + opt.cd=0; + opt.loop=0; + if (opt.stopAfterLoops!=undefined && opt.stopAfterLoops>-1) + opt.looptogo=opt.stopAfterLoops; + else + opt.looptogo=9999999; + + if (opt.stopAtSlide!=undefined && opt.stopAtSlide>-1) + opt.lastslidetoshow=opt.stopAtSlide; + else + opt.lastslidetoshow=999; + + opt.stopLoop="off"; + + if (opt.looptogo==0) opt.stopLoop="on"; + + + + if (opt.slideamount >1 && !(opt.stopAfterLoops==0 && opt.stopAtSlide==1) ) { + var bt=container.find('.tp-bannertimer'); + if (bt.length>0) { + bt.css({'width':'0%'}); + + if (opt.videoplaying!=true) + bt.animate({'width':"100%"},{duration:(opt.delay-100),queue:false, easing:"linear"}); + + } + + bt.data('opt',opt); + + + opt.cdint=setInterval(function() { + + if (jQuery('body').find(container).length==0) removeAllListeners(container,opt); + if (container.data('conthover-changed') == 1) { + opt.conthover= container.data('conthover'); + container.data('conthover-changed',0); + } + + if (opt.conthover!=1 && opt.videoplaying!=true && opt.width>opt.hideSliderAtLimit) { + opt.cd=opt.cd+100; + } + + + if (opt.fullWidth!="on") + if (opt.width>opt.hideSliderAtLimit) + container.parent().removeClass("tp-hide-revslider") + else + container.parent().addClass("tp-hide-revslider") + // EVENT TRIGGERING IN CASE VIDEO HAS BEEN STARTED + if (opt.videostartednow==1) { + container.trigger('revolution.slide.onvideoplay'); + opt.videostartednow=0; + } + + // EVENT TRIGGERING IN CASE VIDEO HAS BEEN STOPPED + if (opt.videostoppednow==1) { + container.trigger('revolution.slide.onvideostop'); + opt.videostoppednow=0; + } + + + if (opt.cd>=opt.delay) { + opt.cd=0; + // SWAP TO NEXT BANNER + opt.act=opt.next; + opt.next=opt.next+1; + if (opt.next>container.find('>ul >li').length-1) { + opt.next=0; + opt.looptogo=opt.looptogo-1; + + if (opt.looptogo<=0) { + opt.stopLoop="on"; + + } + } + + // STOP TIMER IF NO LOOP NO MORE NEEDED. + + if (opt.stopLoop=="on" && opt.next==opt.lastslidetoshow-1) { + clearInterval(opt.cdint); + container.find('.tp-bannertimer').css({'visibility':'hidden'}); + container.trigger('revolution.slide.onstop'); + } + + // SWAP THE SLIDES + swapSlide(container,opt); + + + // Clear the Timer + if (bt.length>0) { + bt.css({'width':'0%'}); + if (opt.videoplaying!=true) + bt.animate({'width':"100%"},{duration:(opt.delay-100),queue:false, easing:"linear"}); + } + } + },100); + + + container.hover( + function() { + + if (opt.onHoverStop=="on") { + opt.conthover=1; + bt.stop(); + container.trigger('revolution.slide.onpause'); + var nextsh = container.find('>ul >li:eq('+opt.next+') .slotholder'); + nextsh.find('.defaultimg').each(function() { + var dimg = jQuery(this); + if (dimg.data('kenburn')!=undefined) + dimg.data('kenburn').pause(); + }); + } + }, + function() { + if (container.data('conthover')!=1) { + container.trigger('revolution.slide.onresume'); + opt.conthover=0; + if (opt.onHoverStop=="on" && opt.videoplaying!=true) { + bt.animate({'width':"100%"},{duration:((opt.delay-opt.cd)-100),queue:false, easing:"linear"}); + } + var nextsh = container.find('>ul >li:eq('+opt.next+') .slotholder'); + nextsh.find('.defaultimg').each(function() { + var dimg = jQuery(this); + if (dimg.data('kenburn')!=undefined) + dimg.data('kenburn').play(); + }); + } + }); + } + } + + + +})(jQuery); + + +// SOME ERROR MESSAGES IN CASE THE PLUGIN CAN NOT BE LOADED +function revslider_showDoubleJqueryError(sliderID) { + var errorMessage = "Revolution Slider Error: You have some jquery.js library include that comes after the revolution files js include."; + errorMessage += "
            This includes make eliminates the revolution slider libraries, and make it not work."; + errorMessage += "

            To fix it you can:
                1. In the Slider Settings -> Troubleshooting set option: Put JS Includes To Body option to true."; + errorMessage += "
                2. Find the double jquery.js include and remove it."; + errorMessage = "" + errorMessage + "" + jQuery(sliderID).show().html(errorMessage); +} + diff --git a/src/wp-content/plugins/revslider/rs-plugin/js/jquery.themepunch.revolution.min.js b/src/wp-content/plugins/revslider/rs-plugin/js/jquery.themepunch.revolution.min.js new file mode 100644 index 0000000..b4baa21 --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/js/jquery.themepunch.revolution.min.js @@ -0,0 +1,10 @@ + + +/************************************************************************** + * jquery.themepunch.revolution.js - jQuery Plugin for Revolution Slider + * @version: 4.1.2 (12.12.2013) + * @requires jQuery v1.7 or later (tested on 1.9) + * @author ThemePunch +**************************************************************************/ + +function revslider_showDoubleJqueryError(e){var t="Revolution Slider Error: You have some jquery.js library include that comes after the revolution files js include.";t+="
            This includes make eliminates the revolution slider libraries, and make it not work.";t+="

            To fix it you can:
                1. In the Slider Settings -> Troubleshooting set option: Put JS Includes To Body option to true.";t+="
                2. Find the double jquery.js include and remove it.";t=""+t+"";jQuery(e).show().html(t)}(function(e,t){function n(e){var t=[],n;var r=window.location.href.slice(window.location.href.indexOf(e)+1).split("_");for(var i=0;ie(window).width())e(".tp-bullets").css({display:"none"});else e(".tp-bullets").css({display:"block"})}}catch(i){}n.find(".defaultimg").each(function(t){b(e(this),r)});var s=0;if(r.forceFullWidth=="on")s=0-r.container.parent().offset().left;try{n.parent().find(".tp-bannershadow").css({width:r.width,left:s})}catch(i){}var o=n.find(">ul >li:eq("+r.act+") .slotholder");var a=n.find(">ul >li:eq("+r.next+") .slotholder");T(n,r);a.find(".defaultimg").css({opacity:0});o.find(".defaultimg").css({opacity:1});a.find(".defaultimg").each(function(){var n=e(this);if(n.data("kenburn")!=t)n.data("kenburn").restart()});var f=n.find(">ul >li:eq("+r.next+")");q(f,r,true);u(r,n);y(n,r)}function s(){var e=["android","webos","iphone","ipad","blackberry","Android","webos",,"iPod","iPhone","iPad","Blackberry","BlackBerry"];var t=false;for(i in e){if(navigator.userAgent.split(e[i]).length>1){t=true}}return t}function o(t,n){var r=e('
            ').appendTo(e("body"));r.html("");var i=r.find("a").length;r.remove();return i}function u(e,t){e.cd=0;if(e.videoplaying!=true){var n=t.find(".tp-bannertimer");if(n.length>0){n.stop();n.css({width:"0%"});n.animate({width:"100%"},{duration:e.delay-100,queue:false,easing:"linear"})}clearTimeout(e.thumbtimer);e.thumbtimer=setTimeout(function(){c(t);y(t,e)},200)}}function a(e,t){e.cd=0;var n=t.find(".tp-bannertimer");if(n.length>0){n.stop(true,true);n.css({width:"0%"})}clearTimeout(e.thumbtimer)}function f(e,t){e.cd=0;N(t,e);var n=t.find(".tp-bannertimer");if(n.length>0){n.stop();n.css({width:"0%"});if(e.videoplaying!=true)n.animate({width:"100%"},{duration:e.delay-100,queue:false,easing:"linear"})}}function l(n,r){var i=n.parent();if(r.navigationType=="thumb"||r.navsecond=="both"){i.append('
            ')}var s=i.find(".tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer");var o=s.parent();o.width(r.thumbWidth*r.thumbAmount);o.height(r.thumbHeight);o.parent().width(r.thumbWidth*r.thumbAmount);o.parent().height(r.thumbHeight);n.find(">ul:first >li").each(function(e){var i=n.find(">ul:first >li:eq("+e+")");if(i.data("thumb")!=t)var o=i.data("thumb");else var o=i.find("img:first").attr("src");s.append('
            ');var u=s.find(".bullet:first")});var u=10;s.find(".bullet").each(function(t){var i=e(this);if(t==r.slideamount-1)i.addClass("last");if(t==0)i.addClass("first");i.width(r.thumbWidth);i.height(r.thumbHeight);if(uul:first >li").length;var l=s.parent().width();r.thumbWidth=u;if(lul:first >li").length;var a=u-s+15;var f=a/s;i=i-30;var l=0-i*f;if(l>0)l=0;if(l<0-u+s)l=0-u+s;h(t,l,200)});s.parent().mousemove(function(){var t=e(this);var r=t.offset();var i=e("body").data("mousex")-r.left;var s=t.width();var o=t.find(".bullet:first").outerWidth(true);var u=o*n.find(">ul:first >li").length-1;var a=u-s+15;var f=a/s;i=i-3;if(i<6)i=0;if(i+3>s-6)i=s;var l=0-i*f;if(l>0)l=0;if(l<0-u+s)l=0-u+s;h(t,l,0)});s.parent().mouseleave(function(){var t=e(this);t.removeClass("over");c(n)})}}function c(e){var t=e.parent().find(".tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer");var n=t.parent();var r=n.offset();var i=n.find(".bullet:first").outerWidth(true);var s=n.find(".bullet.selected").index()*i;var o=n.width();var i=n.find(".bullet:first").outerWidth(true);var u=i*e.find(">ul:first >li").length;var a=u-o;var f=a/o;var l=0-s;if(l>0)l=0;if(l<0-u+o)l=0-u+o;if(!n.hasClass("over")){h(n,l,200)}}function h(e,t,n){TweenLite.to(e.find(".tp-thumbcontainer"),.2,{left:t,ease:Power3.easeOut,overwrite:"auto"})}function p(t,n){if(n.navigationType=="bullet"||n.navigationType=="both"){t.parent().append('
            ')}var r=t.parent().find(".tp-bullets");t.find(">ul:first >li").each(function(e){var n=t.find(">ul:first >li:eq("+e+") img:first").attr("src");r.append('
            ');var i=r.find(".bullet:first")});r.find(".bullet").each(function(r){var i=e(this);if(r==n.slideamount-1)i.addClass("last");if(r==0)i.addClass("first");i.click(function(){var e=false;if(n.navigationArrows=="withbullet"||n.navigationArrows=="nexttobullets"){if(i.index()-1==n.act)e=true}else{if(i.index()==n.act)e=true}if(n.transition==0&&!e){if(n.navigationArrows=="withbullet"||n.navigationArrows=="nexttobullets"){n.next=i.index()-1}else{n.next=i.index()}f(n,t)}})});r.append('
            ');y(t,n)}function d(e,n){var r=e.find(".tp-bullets");var i="";var s=n.navigationStyle;if(n.navigationArrows=="none")i="visibility:hidden;display:none";n.soloArrowStyle="default";if(n.navigationArrows!="none"&&n.navigationArrows!="nexttobullets")s=n.soloArrowStyle;e.parent().append('
            ');e.parent().append('
            ');e.parent().find(".tp-rightarrow").click(function(){if(n.transition==0){if(e.data("showus")!=t&&e.data("showus")!=-1)n.next=e.data("showus")-1;else n.next=n.next+1;e.data("showus",-1);if(n.next>=n.slideamount)n.next=0;if(n.next<0)n.next=0;if(n.act!=n.next)f(n,e)}});e.parent().find(".tp-leftarrow").click(function(){if(n.transition==0){n.next=n.next-1;n.leftarrowpressed=1;if(n.next<0)n.next=n.slideamount-1;f(n,e)}});y(e,n)}function v(n,r){e(document).keydown(function(e){if(r.transition==0&&e.keyCode==39){if(n.data("showus")!=t&&n.data("showus")!=-1)r.next=n.data("showus")-1;else r.next=r.next+1;n.data("showus",-1);if(r.next>=r.slideamount)r.next=0;if(r.next<0)r.next=0;if(r.act!=r.next)f(r,n)}if(r.transition==0&&e.keyCode==37){r.next=r.next-1;r.leftarrowpressed=1;if(r.next<0)r.next=r.slideamount-1;f(r,n)}});y(n,r)}function m(e,t){if(t.touchenabled=="on")e.swipe({data:e,swipeRight:function(){if(t.transition==0){t.next=t.next-1;t.leftarrowpressed=1;if(t.next<0)t.next=t.slideamount-1;f(t,e)}},swipeLeft:function(){if(t.transition==0){t.next=t.next+1;if(t.next==t.slideamount)t.next=0;f(t,e)}},allowPageScroll:"auto"})}function g(e,t){var n=e.parent().find(".tp-bullets");var r=e.parent().find(".tparrows");if(n==null){e.append('
            ');var n=e.parent().find(".tp-bullets")}if(r==null){e.append('
            ');var r=e.parent().find(".tparrows")}e.data("hidethumbs",t.hideThumbs);n.addClass("hidebullets");r.addClass("hidearrows");n.hover(function(){n.addClass("hovered");clearTimeout(e.data("hidethumbs"));n.removeClass("hidebullets");r.removeClass("hidearrows")},function(){n.removeClass("hovered");if(!e.hasClass("hovered")&&!n.hasClass("hovered"))e.data("hidethumbs",setTimeout(function(){n.addClass("hidebullets");r.addClass("hidearrows")},t.hideThumbs))});r.hover(function(){n.addClass("hovered");clearTimeout(e.data("hidethumbs"));n.removeClass("hidebullets");r.removeClass("hidearrows")},function(){n.removeClass("hovered")});e.on("mouseenter",function(){e.addClass("hovered");clearTimeout(e.data("hidethumbs"));n.removeClass("hidebullets");r.removeClass("hidearrows")});e.on("mouseleave",function(){e.removeClass("hovered");if(!e.hasClass("hovered")&&!n.hasClass("hovered"))e.data("hidethumbs",setTimeout(function(){n.addClass("hidebullets");r.addClass("hidearrows")},t.hideThumbs))})}function y(t,n){var r=t.parent();var i=r.find(".tp-bullets");if(n.navigationType=="thumb"){i.find(".thumb").each(function(t){var r=e(this);r.css({width:n.thumbWidth*n.bw+"px",height:n.thumbHeight*n.bh+"px"})});var s=i.find(".tp-mask");s.width(n.thumbWidth*n.thumbAmount*n.bw);s.height(n.thumbHeight*n.bh);s.parent().width(n.thumbWidth*n.thumbAmount*n.bw);s.parent().height(n.thumbHeight*n.bh)}var o=r.find(".tp-leftarrow");var u=r.find(".tp-rightarrow");if(n.navigationType=="thumb"&&n.navigationArrows=="nexttobullets")n.navigationArrows="solo";if(n.navigationArrows=="nexttobullets"){o.prependTo(i).css({"float":"left"});u.insertBefore(i.find(".tpclear")).css({"float":"left"})}var a=0;if(n.forceFullWidth=="on")a=0-n.container.parent().offset().left;if(n.navigationArrows!="none"&&n.navigationArrows!="nexttobullets"){o.css({position:"absolute"});u.css({position:"absolute"});if(n.soloArrowLeftValign=="center")o.css({top:"50%",marginTop:n.soloArrowLeftVOffset-Math.round(o.innerHeight()/2)+"px"});if(n.soloArrowLeftValign=="bottom")o.css({top:"auto",bottom:0+n.soloArrowLeftVOffset+"px"});if(n.soloArrowLeftValign=="top")o.css({bottom:"auto",top:0+n.soloArrowLeftVOffset+"px"});if(n.soloArrowLeftHalign=="center")o.css({left:"50%",marginLeft:a+n.soloArrowLeftHOffset-Math.round(o.innerWidth()/2)+"px"});if(n.soloArrowLeftHalign=="left")o.css({left:0+n.soloArrowLeftHOffset+a+"px"});if(n.soloArrowLeftHalign=="right")o.css({right:0+n.soloArrowLeftHOffset-a+"px"});if(n.soloArrowRightValign=="center")u.css({top:"50%",marginTop:n.soloArrowRightVOffset-Math.round(u.innerHeight()/2)+"px"});if(n.soloArrowRightValign=="bottom")u.css({top:"auto",bottom:0+n.soloArrowRightVOffset+"px"});if(n.soloArrowRightValign=="top")u.css({bottom:"auto",top:0+n.soloArrowRightVOffset+"px"});if(n.soloArrowRightHalign=="center")u.css({left:"50%",marginLeft:a+n.soloArrowRightHOffset-Math.round(u.innerWidth()/2)+"px"});if(n.soloArrowRightHalign=="left")u.css({left:0+n.soloArrowRightHOffset+a+"px"});if(n.soloArrowRightHalign=="right")u.css({right:0+n.soloArrowRightHOffset-a+"px"});if(o.position()!=null)o.css({top:Math.round(parseInt(o.position().top,0))+"px"});if(u.position()!=null)u.css({top:Math.round(parseInt(u.position().top,0))+"px"})}if(n.navigationArrows=="none"){o.css({visibility:"hidden"});u.css({visibility:"hidden"})}if(n.navigationVAlign=="center")i.css({top:"50%",marginTop:n.navigationVOffset-Math.round(i.innerHeight()/2)+"px"});if(n.navigationVAlign=="bottom")i.css({bottom:0+n.navigationVOffset+"px"});if(n.navigationVAlign=="top")i.css({top:0+n.navigationVOffset+"px"});if(n.navigationHAlign=="center")i.css({left:"50%",marginLeft:a+n.navigationHOffset-Math.round(i.innerWidth()/2)+"px"});if(n.navigationHAlign=="left")i.css({left:0+n.navigationHOffset+a+"px"});if(n.navigationHAlign=="right")i.css({right:0+n.navigationHOffset-a+"px"})}function b(n,r){r.container.closest(".forcefullwidth_wrapper_tp_banner").find(".tp-fullwidth-forcer").css({height:r.container.height()});r.container.closest(".rev_slider_wrapper").css({height:r.container.height()});r.width=parseInt(r.container.width(),0);r.height=parseInt(r.container.height(),0);r.bw=r.width/r.startwidth;r.bh=r.height/r.startheight;if(r.bh>r.bw)r.bh=r.bw;if(r.bh1){r.bw=1;r.bh=1}if(r.bw>1){r.bw=1;r.bh=1}r.height=Math.round(r.startheight*(r.width/r.startwidth));if(r.height>r.startheight&&r.autoHeight!="on")r.height=r.startheight;if(r.fullScreen=="on"){r.height=r.bw*r.startheight;var i=r.container.parent().width();var s=e(window).height();if(r.fullScreenOffsetContainer!=t){try{var o=r.fullScreenOffsetContainer.split(",");e.each(o,function(t,n){s=s-e(n).outerHeight(true);if(sul:first").css({overflow:"hidden",width:"100%",height:"100%",maxHeight:n.parent().css("maxHeight")});if(r.autoHeight=="on"){n.find(">ul:first").css({overflow:"hidden",width:"100%",height:"100%",maxHeight:"none"});n.css({maxHeight:"none"});n.parent().css({maxHeight:"none"})}n.find(">ul:first >li").each(function(n){var r=e(this);r.css({width:"100%",height:"100%",overflow:"hidden"});if(r.data("link")!=t){var i=r.data("link");var s="_self";var o=2;if(r.data("slideindex")=="back")o=0;var u=r.data("linktoslide");if(r.data("target")!=t)s=r.data("target");if(i=="slide"){r.append('')}else{u="no";r.append('')}}});n.parent().css({overflow:"visible"});n.find(">ul:first >li >img").each(function(n){var i=e(this);i.addClass("defaultimg");if(i.data("lazyload")!=t&&i.data("lazydone")!=1){}else{b(i,r)}i.wrap('
            ");if(r.dottedOverlay!="none"&&r.dottedOverlay!=t)i.closest(".slotholder").append('
            ');var s=i.attr("src");var u=i.data("lazyload");var a=i.data("bgfit");var f=i.data("bgrepeat");var l=i.data("bgposition");if(a==t)a="cover";if(f==t)f="no-repeat";if(l==t)l="center center";var c=i.closest(".slotholder");i.replaceWith('
            ');if(o(8)){c.find(".tp-bgimg").css({backgroundImage:"none","background-image":"none"});c.find(".tp-bgimg").append('')}i.css({opacity:0});i.data("li-id",n)})}function E(e,n,r,i){var s=e;var u=s.find(".defaultimg");var a=s.data("zoomstart");var f=s.data("rotationstart");if(u.data("currotate")!=t)f=u.data("currotate");if(u.data("curscale")!=t)a=u.data("curscale");b(u,n);var l=u.data("src");var c=u.css("background-color");var h=n.width;var p=n.height;if(n.autoHeight=="on")p=n.container.height();var d=u.data("fxof");if(d==t)d=0;fullyoff=0;var v=0;var m=u.data("bgfit");var g=u.data("bgrepeat");var y=u.data("bgposition");if(m==t)m="cover";if(g==t)g="no-repeat";if(y==t)y="center center";if(s.data("kenburns")=="on"){m=a;if(m.toString().length<4)m=A(m,s,n)}if(o(8)){var w=l;l=""}if(i=="horizontal"){if(!r)var v=0-n.slotw;for(var E=0;E'+'
            '+'
            '+"
            ");if(a!=t&&f!=t)TweenLite.set(s.find(".slot").last(),{rotationZ:f});if(o(8)){s.find(".slot ").last().find(".slotslide").append('');x(s,n)}}}else{if(!r)var v=0-n.sloth;for(var E=0;E'+'
            '+'
            '+"
            ");if(a!=t&&f!=t)TweenLite.set(s.find(".slot").last(),{rotationZ:f});if(o(8)){s.find(".slot ").last().find(".slotslide").append('');x(s,n)}}}}function S(e,n,r){var i=e;var s=i.find(".defaultimg");var u=i.data("zoomstart");var a=i.data("rotationstart");if(s.data("currotate")!=t)a=s.data("currotate");if(s.data("curscale")!=t)u=s.data("curscale")*100;b(s,n);var f=s.data("src");var l=s.css("backgroundColor");var c=n.width;var h=n.height;if(n.autoHeight=="on")h=n.container.height();var p=s.data("fxof");if(p==t)p=0;fullyoff=0;var d=0;if(o(8)){var v=f;f=""}var m=0;if(n.sloth>n.slotw)m=n.sloth;else m=n.slotw;if(!r){var d=0-m}n.slotw=m;n.sloth=m;var g=0;var y=0;var w=s.data("bgfit");var E=s.data("bgrepeat");var S=s.data("bgposition");if(w==t)w="cover";if(E==t)E="no-repeat";if(S==t)S="center center";if(i.data("kenburns")=="on"){w=u;if(w.toString().length<4)w=A(w,i,n)}for(var T=0;T'+'
            '+'
            '+"
            ");y=y+m;if(o(8)){i.find(".slot ").last().find(".slotslide").append('');x(i,n)}if(u!=t&&a!=t)TweenLite.set(i.find(".slot").last(),{rotationZ:a})}g=g+m}}function x(e,t){if(o(8)){var n=e.find(".ieeightfallbackimage");if(t.startwidth/t.startheightul:first-child >li:eq("+n.act+")")}catch(i){var r=e.find(">ul:first-child >li:eq(1)")}n.lastslide=n.act;var s=e.find(">ul:first-child >li:eq("+n.next+")");var o=s.find(".defaultimg");if(o.data("lazyload")!=t&&o.data("lazyload")!="undefined"&&o.data("lazydone")!=1){o.css({backgroundImage:'url("'+s.find(".defaultimg").data("lazyload")+'")'});o.data("src",s.find(".defaultimg").data("lazyload"));o.data("lazydone",1);o.data("orgw",0);s.data("loadeddone",1);e.find(".tp-loader").css({display:"block"}).transition({opacity:1,duration:300});var f=new Image;f.onload=function(){setTimeout(function(){a(n,e)},180);s.waitForImages(function(){o.data("lazydone",1);s.data("owidth",f.width);s.data("oheight",f.height);s.find(".slotholder").data("owidth",f.width);s.find(".slotholder").data("oheight",f.height);setTimeout(function(){u(n,e)},190);b(o,n);y(e,n);b(o,n);C(e,n);e.find(".tp-loader").transition({opacity:0,duration:300});setTimeout(function(){e.find(".tp-loader").css({display:"none"})},2200)})};f.src=s.find(".defaultimg").data("lazyload")}else{if(s.data("loadeddone")==t){var f=new Image;f.onload=function(){s.data("loadeddone",1);s.data("owidth",f.width);s.data("oheight",f.height);s.find(".slotholder").data("owidth",f.width);s.find(".slotholder").data("oheight",f.height);s.waitForImages(function(){b(o,n);y(e,n);b(o,n);C(e,n)})};f.src=s.find(".defaultimg").data("src")}else{C(e,n)}}}function C(n,r){function x(){e.each(v,function(e,t){if(t[0]==p||t[8]==p){l=t[1];d=t[2];y=b}b=b+1})}n.trigger("revolution.slide.onbeforeswap");r.transition=1;r.videoplaying=false;try{var i=n.find(">ul:first-child >li:eq("+r.act+")")}catch(s){var i=n.find(">ul:first-child >li:eq(1)")}r.lastslide=r.act;var u=n.find(">ul:first-child >li:eq("+r.next+")");var a=i.find(".slotholder");var f=u.find(".slotholder");i.css({visibility:"visible"});u.css({visibility:"visible"});if(f.data("kenburns")=="on")k(n,r);if(r.ie){if(p=="boxfade")p="boxslide";if(p=="slotfade-vertical")p="slotzoom-vertical";if(p=="slotfade-horizontal")p="slotzoom-horizontal"}if(u.data("delay")!=t){r.cd=0;r.delay=u.data("delay")}else{r.delay=r.origcd}i.css({left:"0px",top:"0px"});u.css({left:"0px",top:"0px"});if(u.data("differentissplayed")=="prepared"){u.data("differentissplayed","done");u.data("transition",u.data("savedtransition"));u.data("slotamount",u.data("savedslotamount"));u.data("masterspeed",u.data("savedmasterspeed"))}if(u.data("fstransition")!=t&&u.data("differentissplayed")!="done"){u.data("savedtransition",u.data("transition"));u.data("savedslotamount",u.data("slotamount"));u.data("savedmasterspeed",u.data("masterspeed"));u.data("transition",u.data("fstransition"));u.data("slotamount",u.data("fsslotamount"));u.data("masterspeed",u.data("fsmasterspeed"));u.data("differentissplayed","prepared")}var l=0;var c=u.data("transition").split(",");var h=u.data("nexttransid");if(h==t){h=0;u.data("nexttransid",h)}else{h=h+1;if(h==c.length)h=0;u.data("nexttransid",h)}var p=c[h];var d=0;if(p=="slidehorizontal"){p="slideleft";if(r.leftarrowpressed==1)p="slideright"}if(p=="slidevertical"){p="slideup";if(r.leftarrowpressed==1)p="slidedown"}var v=[["boxslide",0,1,10,0,"box",false,null,0],["boxfade",1,0,10,0,"box",false,null,1],["slotslide-horizontal",2,0,0,200,"horizontal",true,false,2],["slotslide-vertical",3,0,0,200,"vertical",true,false,3],["curtain-1",4,3,0,0,"horizontal",true,true,4],["curtain-2",5,3,0,0,"horizontal",true,true,5],["curtain-3",6,3,25,0,"horizontal",true,true,6],["slotzoom-horizontal",7,0,0,400,"horizontal",true,true,7],["slotzoom-vertical",8,0,0,0,"vertical",true,true,8],["slotfade-horizontal",9,0,0,500,"horizontal",true,null,9],["slotfade-vertical",10,0,0,500,"vertical",true,null,10],["fade",11,0,1,300,"horizontal",true,null,11],["slideleft",12,0,1,0,"horizontal",true,true,12],["slideup",13,0,1,0,"horizontal",true,true,13],["slidedown",14,0,1,0,"horizontal",true,true,14],["slideright",15,0,1,0,"horizontal",true,true,15],["papercut",16,0,0,600,"",null,null,16],["3dcurtain-horizontal",17,0,20,100,"vertical",false,true,17],["3dcurtain-vertical",18,0,10,100,"horizontal",false,true,18],["cubic",19,0,20,600,"horizontal",false,true,19],["cube",19,0,20,600,"horizontal",false,true,20],["flyin",20,0,4,600,"vertical",false,true,21],["turnoff",21,0,1,1600,"horizontal",false,true,22],["incube",22,0,20,600,"horizontal",false,true,23],["cubic-horizontal",23,0,20,500,"vertical",false,true,24],["cube-horizontal",23,0,20,500,"vertical",false,true,25],["incube-horizontal",24,0,20,500,"vertical",false,true,26],["turnoff-vertical",25,0,1,1600,"horizontal",false,true,27],["fadefromright",12,1,1,0,"horizontal",true,true,28],["fadefromleft",15,1,1,0,"horizontal",true,true,29],["fadefromtop",14,1,1,0,"horizontal",true,true,30],["fadefrombottom",13,1,1,0,"horizontal",true,true,31],["fadetoleftfadefromright",12,2,1,0,"horizontal",true,true,32],["fadetorightfadetoleft",15,2,1,0,"horizontal",true,true,33],["fadetobottomfadefromtop",14,2,1,0,"horizontal",true,true,34],["fadetotopfadefrombottom",13,2,1,0,"horizontal",true,true,35],["parallaxtoright",12,3,1,0,"horizontal",true,true,36],["parallaxtoleft",15,3,1,0,"horizontal",true,true,37],["parallaxtotop",14,3,1,0,"horizontal",true,true,38],["parallaxtobottom",13,3,1,0,"horizontal",true,true,39],["scaledownfromright",12,4,1,0,"horizontal",true,true,40],["scaledownfromleft",15,4,1,0,"horizontal",true,true,41],["scaledownfromtop",14,4,1,0,"horizontal",true,true,42],["scaledownfrombottom",13,4,1,0,"horizontal",true,true,43],["zoomout",13,5,1,0,"horizontal",true,true,44],["zoomin",13,6,1,0,"horizontal",true,true,45],["notransition",26,0,1,0,"horizontal",true,null,46]];var m=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45];var g=[16,17,18,19,20,21,22,23,24,25,26,27];var l=0;var d=1;var y=0;var b=0;var w=new Array;if(p=="random"){p=Math.round(Math.random()*v.length-1);if(p>v.length-1)p=v.length-1}if(p=="random-static"){p=Math.round(Math.random()*m.length-1);if(p>m.length-1)p=m.length-1;p=m[p]}if(p=="random-premium"){p=Math.round(Math.random()*g.length-1);if(p>g.length-1)p=g.length-1;p=g[p]}x();if(o(8)&&l>15&&l<28){p=Math.round(Math.random()*m.length-1);if(p>m.length-1)p=m.length-1;p=m[p];b=0;x()}var T=-1;if(r.leftarrowpressed==1||r.act>r.next)T=1;r.leftarrowpressed=0;if(l>26)l=26;if(l<0)l=0;var N=300;if(u.data("masterspeed")!=t&&u.data("masterspeed")>99&&u.data("masterspeed")<4001)N=u.data("masterspeed");w=v[y];n.parent().find(".bullet").each(function(){var t=e(this);t.removeClass("selected");if(r.navigationArrows=="withbullet"||r.navigationArrows=="nexttobullets"){if(t.index()-1==r.next)t.addClass("selected")}else{if(t.index()==r.next)t.addClass("selected")}});n.find(">li").each(function(){var t=e(this);if(t.index!=r.act&&t.index!=r.next)t.css({"z-index":16})});i.css({"z-index":18});u.css({"z-index":20});u.css({opacity:0});if(i.index()!=u.index()&&r.firststart!=1){W(i,r)}q(u,r);if(u.data("slotamount")==t||u.data("slotamount")<1){r.slots=Math.round(Math.random()*12+4);if(p=="boxslide")r.slots=Math.round(Math.random()*6+3);else if(p=="flyin")r.slots=Math.round(Math.random()*4+1)}else{r.slots=u.data("slotamount")}if(u.data("rotate")==t)r.rotate=0;else if(u.data("rotate")==999)r.rotate=Math.round(Math.random()*360);else r.rotate=u.data("rotate");if(!e.support.transition||r.ie||r.ie9)r.rotate=0;if(r.firststart==1){i.css({opacity:0});r.firststart=0}N=N+w[4];if((l==4||l==5||l==6)&&r.slots<3)r.slots=3;if(w[3]!=0)r.slots=Math.min(r.slots,w[3]);if(l==9)r.slots=r.width/20;if(l==10)r.slots=r.height/20;if(w[5]=="box"){if(w[7]!=null)S(a,r,w[7]);if(w[6]!=null)S(f,r,w[6])}else if(w[5]=="vertical"||w[5]=="horizontal"){if(w[7]!=null)E(a,r,w[7],w[5]);if(w[6]!=null)E(f,r,w[6],w[5])}if(l<12||l>16)u.css({opacity:1});if(l==0){f.find(".defaultimg").css({opacity:0});var C=Math.ceil(r.height/r.sloth);var L=0;f.find(".slotslide").each(function(t){var s=e(this);L=L+1;if(L==C)L=0;TweenLite.fromTo(s,N/600,{opacity:0,top:0-r.sloth,left:0-r.slotw,rotation:r.rotate},{opacity:1,transformPerspective:600,top:0,left:0,scale:1,rotation:0,delay:(t*15+L*30)/1500,ease:Power2.easeOut,onComplete:function(){if(t==r.slots*r.slots-1){P(n,r,f,a,u,i)}}})})}if(l==1){f.find(".defaultimg").css({opacity:0});var A;f.find(".slotslide").each(function(t){var n=e(this);rand=Math.random()*N+300;rand2=Math.random()*500+200;if(rand+rand2>A)A=rand2+rand2;TweenLite.fromTo(n,rand/1e3,{opacity:0,transformPerspective:600,rotation:r.rotate},{opacity:1,ease:Power2.easeInOut,rotation:0,delay:rand2/1e3})});setTimeout(function(){P(n,r,f,a,u,i)},N+300)}if(l==2){f.find(".defaultimg").css({opacity:0});a.find(".slotslide").each(function(){var t=e(this);TweenLite.to(t,N/1e3,{left:r.slotw,rotation:0-r.rotate,onComplete:function(){P(n,r,f,a,u,i)}})});f.find(".slotslide").each(function(){var t=e(this);TweenLite.fromTo(t,N/1e3,{left:0-r.slotw,rotation:r.rotate,transformPerspective:600},{left:0,rotation:0,ease:Power2.easeOut,onComplete:function(){P(n,r,f,a,u,i)}})})}if(l==3){f.find(".defaultimg").css({opacity:0});a.find(".slotslide").each(function(){var t=e(this);TweenLite.to(t,N/1e3,{top:r.sloth,rotation:r.rotate,transformPerspective:600,onComplete:function(){P(n,r,f,a,u,i)}})});f.find(".slotslide").each(function(){var t=e(this);TweenLite.fromTo(t,N/1e3,{top:0-r.sloth,rotation:r.rotate,transformPerspective:600},{top:0,rotation:0,ease:Power2.easeOut,onComplete:function(){P(n,r,f,a,u,i)}})})}if(l==4||l==5){f.find(".defaultimg").css({opacity:0});setTimeout(function(){a.find(".defaultimg").css({opacity:0})},100);var O=N/1e3;var M=O;a.find(".slotslide").each(function(t){var n=e(this);var i=t*O/r.slots;if(l==5)i=(r.slots-t-1)*O/r.slots/1.5;TweenLite.to(n,O*3,{transformPerspective:600,top:0+r.height,opacity:.5,rotation:r.rotate,ease:Power2.easeInOut,delay:i})});f.find(".slotslide").each(function(t){var s=e(this);var o=t*O/r.slots;if(l==5)o=(r.slots-t-1)*O/r.slots/1.5;TweenLite.fromTo(s,O*3,{top:0-r.height,opacity:.5,rotation:r.rotate,transformPerspective:600},{top:0,opacity:1,rotation:0,ease:Power2.easeInOut,delay:o,onComplete:function(){if(t==r.slots-1){P(n,r,f,a,u,i)}}})})}if(l==6){if(r.slots<2)r.slots=2;f.find(".defaultimg").css({opacity:0});setTimeout(function(){a.find(".defaultimg").css({opacity:0})},100);a.find(".slotslide").each(function(t){var n=e(this);if(t
            ');i.find(".tp-half-one").clone(true).appendTo(i).addClass("tp-half-two");i.find(".tp-half-two").removeClass("tp-half-one");var D=r.width;var H=r.height;if(r.autoHeight=="on")H=n.height();i.find(".tp-half-one .defaultimg").wrap('
            ');i.find(".tp-half-two .defaultimg").wrap('
            ');i.find(".tp-half-two .defaultimg").css({position:"absolute",top:"-50%"});i.find(".tp-half-two .tp-caption").wrapAll('
            ');TweenLite.set(i.find(".tp-half-two"),{width:D,height:H,overflow:"hidden",zIndex:15,position:"absolute",top:H/2,left:"0px",transformPerspective:600,transformOrigin:"center bottom"});TweenLite.set(i.find(".tp-half-one"),{width:D,height:H/2,overflow:"visible",zIndex:10,position:"absolute",top:"0px",left:"0px",transformPerspective:600,transformOrigin:"center top"});var K=i.find(".defaultimg");var Q=Math.round(Math.random()*20-10);var G=Math.round(Math.random()*20-10);var Y=Math.round(Math.random()*20-10);var Z=Math.random()*.4-.2;var et=Math.random()*.4-.2;var tt=Math.random()*1+1;var nt=Math.random()*1+1;TweenLite.fromTo(i.find(".tp-half-one"),N/1e3,{width:D,height:H/2,position:"absolute",top:"0px",left:"0px",transformPerspective:600,transformOrigin:"center top"},{scale:tt,rotation:Q,y:0-H-H/4,ease:Power2.easeInOut});setTimeout(function(){TweenLite.set(i.find(".tp-half-one"),{overflow:"hidden"})},50);TweenLite.fromTo(i.find(".tp-half-one"),N/2e3,{opacity:1,transformPerspective:600,transformOrigin:"center center"},{opacity:0,delay:N/2e3});TweenLite.fromTo(i.find(".tp-half-two"),N/1e3,{width:D,height:H,overflow:"hidden",position:"absolute",top:H/2,left:"0px",transformPerspective:600,transformOrigin:"center bottom"},{scale:nt,rotation:G,y:H+H/4,ease:Power2.easeInOut});TweenLite.fromTo(i.find(".tp-half-two"),N/2e3,{opacity:1,transformPerspective:600,transformOrigin:"center center"},{opacity:0,delay:N/2e3});if(i.html()!=null)TweenLite.fromTo(u,(N-200)/1e3,{opacity:0,scale:.8,x:r.width*Z,y:H*et,rotation:Y,transformPerspective:600,transformOrigin:"center center"},{rotation:0,scale:1,x:0,y:0,opacity:1,ease:Power2.easeInOut});f.find(".defaultimg").css({opacity:1});setTimeout(function(){i.css({position:"absolute","z-index":18});u.css({position:"absolute","z-index":20});f.find(".defaultimg").css({opacity:1});a.find(".defaultimg").css({opacity:0});if(i.find(".tp-half-one").length>0){i.find(".tp-half-one .defaultimg").unwrap();i.find(".tp-half-one .slotholder").unwrap()}i.find(".tp-half-two").remove();r.transition=0;r.act=r.next},N);u.css({opacity:1})}if(l==17){f.find(".defaultimg").css({opacity:0});f.find(".slotslide").each(function(t){var s=e(this);TweenLite.fromTo(s,N/800,{opacity:0,rotationY:0,scale:.9,rotationX:-110,transformPerspective:600,transformOrigin:"center center"},{opacity:1,top:0,left:0,scale:1,rotation:0,rotationX:0,rotationY:0,ease:Power3.easeOut,delay:t*.06,onComplete:function(){if(t==r.slots-1)P(n,r,f,a,u,i)}})})}if(l==18){f.find(".defaultimg").css({opacity:0});f.find(".slotslide").each(function(t){var s=e(this);TweenLite.fromTo(s,N/500,{opacity:0,rotationY:310,scale:.9,rotationX:10,transformPerspective:600,transformOrigin:"center center"},{opacity:1,top:0,left:0,scale:1,rotation:0,rotationX:0,rotationY:0,ease:Power3.easeOut,delay:t*.06,onComplete:function(){if(t==r.slots-1)P(n,r,f,a,u,i)}})})}if(l==19||l==22){f.find(".defaultimg").css({opacity:0});setTimeout(function(){a.find(".defaultimg").css({opacity:0})},100);var rt=u.css("z-index");var it=i.css("z-index");var st=90;var I=1;if(T==1)st=-90;if(l==19){var ot="center center -"+r.height/2;I=0}else{var ot="center center "+r.height/2}TweenLite.fromTo(f,N/2e3,{transformPerspective:600,z:0,x:0,rotationY:0},{rotationY:1,ease:Power1.easeInOut,z:-40});TweenLite.fromTo(f,N/2e3,{transformPerspective:600,z:-40,rotationY:1},{rotationY:0,z:0,ease:Power1.easeInOut,x:0,delay:3*(N/4e3)});TweenLite.fromTo(a,N/2e3,{transformPerspective:600,z:0,x:0,rotationY:0},{rotationY:1,x:0,ease:Power1.easeInOut,z:-40});TweenLite.fromTo(a,N/2e3,{transformPerspective:600,z:-40,x:0,rotationY:1},{rotationY:0,z:0,x:0,ease:Power1.easeInOut,delay:3*(N/4e3)});f.find(".slotslide").each(function(t){var s=e(this);TweenLite.fromTo(s,N/1e3,{left:0,rotationY:r.rotate,opacity:I,top:0,scale:.8,transformPerspective:600,transformOrigin:ot,rotationX:st},{left:0,rotationY:0,opacity:1,top:0,z:0,scale:1,rotationX:0,delay:t*50/1e3,ease:Power2.easeInOut,onComplete:function(){if(t==r.slots-1)P(n,r,f,a,u,i)}});TweenLite.to(s,.1,{opacity:1,delay:t*50/1e3+N/3e3})});a.find(".slotslide").each(function(t){var s=e(this);var o=-90;if(T==1)o=90;TweenLite.fromTo(s,N/1e3,{opacity:1,rotationY:0,top:0,z:0,scale:1,transformPerspective:600,transformOrigin:ot,rotationX:0},{opacity:1,rotationY:r.rotate,top:0,scale:.8,rotationX:o,delay:t*50/1e3,ease:Power2.easeInOut,onComplete:function(){if(t==r.slots-1)P(n,r,f,a,u,i)}});TweenLite.to(s,.1,{opacity:0,delay:t*50/1e3+(N/1e3-N/1e4)})})}if(l==20){f.find(".defaultimg").css({opacity:0});setTimeout(function(){a.find(".defaultimg").css({opacity:0})},100);var rt=u.css("z-index");var it=i.css("z-index");if(T==1){var ut=-r.width;var st=70;var ot="left center -"+r.height/2}else{var ut=r.width;var st=-70;var ot="right center -"+r.height/2}f.find(".slotslide").each(function(t){var s=e(this);TweenLite.fromTo(s,N/1500,{left:ut,rotationX:40,z:-600,opacity:I,top:0,transformPerspective:600,transformOrigin:ot,rotationY:st},{left:0,delay:t*50/1e3,ease:Power2.easeInOut});TweenLite.fromTo(s,N/1e3,{rotationX:40,z:-600,opacity:I,top:0,scale:1,transformPerspective:600,transformOrigin:ot,rotationY:st},{rotationX:0,opacity:1,top:0,z:0,scale:1,rotationY:0,delay:t*50/1e3,ease:Power2.easeInOut,onComplete:function(){if(t==r.slots-1)P(n,r,f,a,u,i)}});TweenLite.to(s,.1,{opacity:1,delay:t*50/1e3+N/2e3})});a.find(".slotslide").each(function(t){var s=e(this);if(T!=1){var o=-r.width;var l=70;var c="left center -"+r.height/2}else{var o=r.width;var l=-70;var c="right center -"+r.height/2}TweenLite.fromTo(s,N/1e3,{opacity:1,rotationX:0,top:0,z:0,scale:1,left:0,transformPerspective:600,transformOrigin:c,rotationY:0},{opacity:1,rotationX:40,top:0,z:-600,left:o,scale:.8,rotationY:l,delay:t*50/1e3,ease:Power2.easeInOut,onComplete:function(){if(t==r.slots-1)P(n,r,f,a,u,i)}});TweenLite.to(s,.1,{opacity:0,delay:t*50/1e3+(N/1e3-N/1e4)})})}if(l==21||l==25){f.find(".defaultimg").css({opacity:0});setTimeout(function(){a.find(".defaultimg").css({opacity:0})},100);var rt=u.css("z-index");var it=i.css("z-index");if(T==1){var ut=-r.width;var st=110;if(l==25){var ot="center top 0";rot2=-st;st=r.rotate}else{var ot="left center 0";rot2=r.rotate}}else{var ut=r.width;var st=-110;if(l==25){var ot="center bottom 0";rot2=-st;st=r.rotate}else{var ot="right center 0";rot2=r.rotate}}f.find(".slotslide").each(function(t){var s=e(this);TweenLite.fromTo(s,N/1500,{left:0,rotationX:rot2,z:0,opacity:0,top:0,scale:1,transformPerspective:600,transformOrigin:ot,rotationY:st},{left:0,rotationX:0,top:0,z:0,scale:1,rotationY:0,delay:t*100/1e3+N/1e4,ease:Power2.easeInOut,onComplete:function(){if(t==r.slots-1)P(n,r,f,a,u,i)}});TweenLite.to(s,.3,{opacity:1,delay:t*100/1e3+N*.2/2e3+N/1e4})});if(T!=1){var ut=-r.width;var st=90;if(l==25){var ot="center top 0";rot2=-st;st=r.rotate}else{var ot="left center 0";rot2=r.rotate}}else{var ut=r.width;var st=-90;if(l==25){var ot="center bottom 0";rot2=-st;st=r.rotate}else{var ot="right center 0";rot2=r.rotate}}a.find(".slotslide").each(function(t){var n=e(this);TweenLite.fromTo(n,N/3e3,{left:0,rotationX:0,z:0,opacity:1,top:0,scale:1,transformPerspective:600,transformOrigin:ot,rotationY:0},{left:0,rotationX:rot2,top:0,z:0,scale:1,rotationY:st,delay:t*100/1e3,ease:Power1.easeInOut});TweenLite.to(n,.2,{opacity:0,delay:t*50/1e3+(N/3e3-N/1e4)})})}if(l==23||l==24){f.find(".defaultimg").css({opacity:0});setTimeout(function(){a.find(".defaultimg").css({opacity:0})},100);var rt=u.css("z-index");var it=i.css("z-index");var st=-90;if(T==1)st=90;var I=1;if(l==23){var ot="center center -"+r.width/2;I=0}else{var ot="center center "+r.width/2}var at=0;TweenLite.fromTo(f,N/2e3,{transformPerspective:600,z:0,x:0,rotationY:0},{rotationY:1,ease:Power1.easeInOut,z:-90});TweenLite.fromTo(f,N/2e3,{transformPerspective:600,z:-90,rotationY:1},{rotationY:0,z:0,ease:Power1.easeInOut,x:0,delay:3*(N/4e3)});TweenLite.fromTo(a,N/2e3,{transformPerspective:600,z:0,x:0,rotationY:0},{rotationY:1,x:0,ease:Power1.easeInOut,z:-90});TweenLite.fromTo(a,N/2e3,{transformPerspective:600,z:-90,x:0,rotationY:1},{rotationY:0,z:0,x:0,ease:Power1.easeInOut,delay:3*(N/4e3)});f.find(".slotslide").each(function(t){var s=e(this);TweenLite.fromTo(s,N/1e3,{left:at,rotationX:r.rotate,opacity:I,top:0,scale:1,transformPerspective:600,transformOrigin:ot,rotationY:st},{left:0,rotationX:0,opacity:1,top:0,z:0,scale:1,rotationY:0,delay:t*50/1e3,ease:Power2.easeInOut,onComplete:function(){if(t==r.slots-1)P(n,r,f,a,u,i)}});TweenLite.to(s,.1,{opacity:1,delay:t*50/1e3+N/3e3})});st=90;if(T==1)st=-90;a.find(".slotslide").each(function(t){var s=e(this);TweenLite.fromTo(s,N/1e3,{left:0,opacity:1,rotationX:0,top:0,z:0,scale:1,transformPerspective:600,transformOrigin:ot,rotationY:0},{left:at,opacity:1,rotationX:r.rotate,top:0,scale:1,rotationY:st,delay:t*50/1e3,ease:Power2.easeInOut,onComplete:function(){if(t==r.slots-1)P(n,r,f,a,u,i)}});TweenLite.to(s,.1,{opacity:0,delay:t*50/1e3+(N/1e3-N/1e4)})})}var ft={};ft.slideIndex=r.next+1;n.trigger("revolution.slide.onchange",ft);setTimeout(function(){n.trigger("revolution.slide.onafterswap")},N);n.trigger("revolution.slide.onvideostop")}function k(n,r){try{var i=n.find(">ul:first-child >li:eq("+r.act+")")}catch(s){var i=n.find(">ul:first-child >li:eq(1)")}r.lastslide=r.act;var o=n.find(">ul:first-child >li:eq("+r.next+")");var u=i.find(".slotholder");var a=o.find(".slotholder");a.find(".defaultimg").each(function(){var n=e(this);if(n.data("kenburn")!=t)n.data("kenburn").restart();TweenLite.killTweensOf(n,false);TweenLite.set(n,{scale:1,rotationZ:0});n.data("bgposition",a.data("bgposition"));n.data("currotate",a.data("rotationstart"));n.data("curscale",a.data("bgfit"))})}function L(n,r){try{var i=n.find(">ul:first-child >li:eq("+r.act+")")}catch(s){var i=n.find(">ul:first-child >li:eq(1)")}r.lastslide=r.act;var u=n.find(">ul:first-child >li:eq("+r.next+")");var a=i.find(".slotholder");var f=u.find(".slotholder");var l=f.data("bgposition"),c=f.data("bgpositionend"),h=f.data("zoomstart")/100,p=f.data("zoomend")/100,d=f.data("rotationstart"),v=f.data("rotationend"),m=f.data("bgfit"),g=f.data("bgfitend"),y=f.data("easeme"),b=f.data("duration")/1e3;if(m==t)m=100;if(g==t)g=100;m=A(m,f,r);g=A(g,f,r);if(h==t)h=1;if(p==t)p=1;if(d==t)d=0;if(v==t)v=0;if(h<1)h=1;if(p<1)p=1;f.find(".defaultimg").each(function(){var t=e(this);t.data("kenburn",TweenLite.fromTo(t,b,{transformPerspective:1200,backgroundSize:m,z:0,backgroundPosition:l,rotationZ:d},{yoyo:2,rotationZ:v,ease:y,backgroundSize:g,backgroundPosition:c,onUpdate:function(){t.data("bgposition",t.css("backgroundPosition"));if(!o(8))t.data("currotate",D(t));if(!o(8))t.data("curscale",t.css("backgroundSize"))}}))})}function A(e,t,n){var r=t.data("owidth");var i=t.data("oheight");var s=n.container.width()/r;var o=i*s;var u=o/n.container.height()*e;return e+"% "+u+"%"}function O(e){var t=e.css("-webkit-transform")||e.css("-moz-transform")||e.css("-ms-transform")||e.css("-o-transform")||e.css("transform");return t}function M(e){return e.replace(/^matrix(3d)?\((.*)\)$/,"$2").split(/, /)}function _(e){var t=M(O(e)),n=1;if(t[0]!=="none"){var r=t[0],i=t[1],s=10;n=Math.round(Math.sqrt(r*r+i*i)*s)/s}return n}function D(e){var t=e.css("-webkit-transform")||e.css("-moz-transform")||e.css("-ms-transform")||e.css("-o-transform")||e.css("transform");if(t!=="none"){var n=t.split("(")[1].split(")")[0].split(",");var r=n[0];var i=n[1];var s=Math.round(Math.atan2(i,r)*(180/Math.PI))}else{var s=0}return s<0?s+=360:s}function P(e,t,n,r,i,s){T(e,t);n.find(".defaultimg").css({opacity:1});if(i.index()!=s.index())r.find(".defaultimg").css({opacity:0});t.act=t.next;c(e);if(n.data("kenburns")=="on")L(e,t)}function H(t){var n=t.target.getVideoEmbedCode();var r=e("#"+n.split('id="')[1].split('"')[0]);var i=r.closest(".tp-simpleresponsive");var s=r.parent().data("player");if(t.data==YT.PlayerState.PLAYING){var o=i.find(".tp-bannertimer");var u=o.data("opt");o.stop();if(r.closest(".tp-caption").data("volume")=="mute")s.mute();u.videoplaying=true;u.videostartednow=1}else{var o=i.find(".tp-bannertimer");var u=o.data("opt");if(t.data!=-1){if(u.conthover==0)o.animate({width:"100%"},{duration:u.delay-u.cd-100,queue:false,easing:"linear"});u.videoplaying=false;u.videostoppednow=1}}if(t.data==0&&u.nextslideatend==true)u.container.revnext()}function B(e,t,n){if(e.addEventListener)e.addEventListener(t,n,false);else e.attachEvent(t,n,false)}function j(t,n){var r=$f(t);var i=e("#"+t);var s=i.closest(".tp-simpleresponsive");r.addEvent("ready",function(e){if(n)r.api("play");r.addEvent("play",function(e){var t=s.find(".tp-bannertimer");var n=t.data("opt");t.stop();n.videoplaying=true;if(i.closest(".tp-caption").data("volume")=="mute")r.api("setVolume","0")});r.addEvent("finish",function(e){var t=s.find(".tp-bannertimer");var n=t.data("opt");if(n.conthover==0)t.animate({width:"100%"},{duration:n.delay-n.cd-100,queue:false,easing:"linear"});n.videoplaying=false;n.videostartednow=1;if(n.nextslideatend==true)n.container.revnext()});r.addEvent("pause",function(e){var t=s.find(".tp-bannertimer");var n=t.data("opt");if(n.conthover==0)t.animate({width:"100%"},{duration:n.delay-n.cd-100,queue:false,easing:"linear"});n.videoplaying=false;n.videostoppednow=1})})}function F(n,r){if(r==t)r=e(n["b"]).attr("id");var i=e("#"+r);var s=i.closest(".tp-simpleresponsive");n.on("play",function(){if(i.closest(".tp-caption").data("volume")=="mute")n.volume(0);var t=e("body").find(".tp-bannertimer");var r=t.data("opt");t.stop();try{r.videoplaying=true}catch(s){}});n.on("pause",function(){var e=s.find(".tp-bannertimer");var t=e.data("opt");if(t.conthover==0)e.animate({width:"100%"},{duration:t.delay-t.cd-100,queue:false,easing:"linear"});t.videoplaying=false;t.videostoppednow=1});n.on("ended",function(){var e=s.find(".tp-bannertimer");var t=e.data("opt");if(t.conthover==0)e.animate({width:"100%"},{duration:t.delay-t.cd-100,queue:false,easing:"linear"});t.videoplaying=false;t.videostoppednow=1;if(t.nextslideatend==true)t.container.revnext()});n.on("loadedmetadata",function(e){var n=0;var r=0;for(var o in this){try{if(this[o].hasOwnProperty("videoWidth"))n=this[o].videoWidth;if(this[o].hasOwnProperty("videoHeight"))r=this[o].videoHeight}catch(u){}}var a=n/r;if(i.data("mediaAspect")==t)i.data("mediaAspect",a);if(i.closest(".tp-caption").data("forcecover")==1)I(i,s)})}function I(e,t){var n=t.width();var r=t.height();var i=e.data("mediaAspect");var s=n/r;e.parent().find(".vjs-poster").css({width:"100%",height:"100%"});if(s0||f.find("video").length>0){if(f.data("autoplayonlyfirsttime")==true||f.data("autoplayonlyfirsttime")=="true"){f.data("autoplay",true)}f.find("iframe").each(function(){var n=e(this);r.nextslideatend=f.data("nextslideatend");if(f.data("thumbimage")!=t&&f.data("thumbimage").length>2&&f.data("autoplay")!=true&&!i){f.find(".tp-thumb-image").remove();f.append('
            ')}if(n.attr("src").toLowerCase().indexOf("youtube")>=0){if(!n.hasClass("HasListener")){try{n.attr("id",c);var s;if(f.data("autoplay")==true)s=new YT.Player(c,{events:{onStateChange:H,onReady:function(e){e.target.playVideo()}}});else s=new YT.Player(c,{events:{onStateChange:H}});n.addClass("HasListener");f.data("player",s)}catch(o){}}else{if(f.data("autoplay")==true){var s=f.data("player");f.data("timerplay",setTimeout(function(){if(f.data("forcerewind")=="on")s.seekTo(0);s.playVideo()},f.data("start")))}}f.find(".tp-thumb-image").click(function(){TweenLite.to(e(this),.3,{opacity:0,ease:Power3.easeInOut,onComplete:function(){f.find(".tp-thumb-image").remove()}});var t=f.data("player");t.playVideo()})}else{if(n.attr("src").toLowerCase().indexOf("vimeo")>=0){if(!n.hasClass("HasListener")){n.addClass("HasListener");n.attr("id",c);var u=n.attr("src");var a={},l=u,h=/([^&=]+)=([^&]*)/g,p;while(p=h.exec(l)){a[decodeURIComponent(p[1])]=decodeURIComponent(p[2])}if(a["player_id"]!=t)u=u.replace(a["player_id"],c);else u=u+"&player_id="+c;try{u=u.replace("api=0","api=1")}catch(o){}u=u+"&api=1";n.attr("src",u);var s=f.find("iframe")[0];$f(s).addEvent("ready",function(){j(c,f.data("autoplay"))})}else{if(f.data("autoplay")==true){var n=f.find("iframe");var d=n.attr("id");var v=$f(d);f.data("timerplay",setTimeout(function(){if(f.data("forcerewind")=="on")v.api("seekTo",0);v.api("play")},f.data("start")))}}f.find(".tp-thumb-image").click(function(){TweenLite.to(e(this),.3,{opacity:0,ease:Power3.easeInOut,onComplete:function(){f.find(".tp-thumb-image").remove()}});var t=f.find("iframe");var n=t.attr("id");var r=$f(n);r.api("play")})}}});if(f.find("video").length>0){f.find("video").each(function(n){var i=e(this).parent();if(f.data("dottedoverlay")!="none"&&f.data("dottedoverlay")!=t)if(f.find(".tp-dottedoverlay").length!=1)i.append('
            ');var s=16/9;if(f.data("aspectratio")=="4:3")s=4/3;i.data("mediaAspect",s);if(i.closest(".tp-caption").data("forcecover")==1)I(i,r.container);if(i.hasClass("video-js")){r.nextslideatend=f.data("nextslideatend");if(!i.hasClass("HasListener")){i.addClass("HasListener");var o="videoid_"+Math.round(Math.random()*1e3+1);i.attr("id",o);videojs(o).ready(function(){F(this,o)})}else{o=i.attr("id")}i.find(".vjs-poster").css({display:"block"});if(f.data("autoplay")==true){var u=e("body").find("#"+r.container.attr("id")).find(".tp-bannertimer");setTimeout(function(){u.stop();r.videoplaying=true},200);videojs(o).ready(function(){var e=this;try{if(f.data("forcerewind")=="on")e.currentTime(0)}catch(t){}i.data("timerplay",setTimeout(function(){if(f.data("forcerewind")=="on")e.currentTime(0);if(i.closest(".tp-caption").data("volume")=="mute")e.volume(0);setTimeout(function(){e.play(0);i.find(".vjs-poster").css({display:"none"})},50)},10+f.data("start")))})}if(i.data("ww")==t)i.data("ww",i.width());if(i.data("hh")==t)i.data("hh",i.height());videojs(o).ready(function(){if(!f.hasClass("fullscreenvideo")){var e=videojs(o);try{e.width(i.data("ww")*r.bw);e.height(i.data("hh")*r.bh)}catch(t){}}});if(i.closest(".tp-caption").data("forcecover")==1){I(i,r.container);i.addClass("fullcoveredvideo")}}})}if(f.data("autoplay")==true){var h=e("body").find("#"+r.container.attr("id")).find(".tp-bannertimer");setTimeout(function(){h.stop();r.videoplaying=true},200);r.videoplaying=true;if(f.data("autoplayonlyfirsttime")==true||f.data("autoplayonlyfirsttime")=="true"){f.data("autoplay",false);f.data("autoplayonlyfirsttime",false)}}}var p=0;var d=0;if(f.find("img").length>0){var v=f.find("img");if(v.data("ww")==t)v.data("ww",v.width());if(v.data("hh")==t)v.data("hh",v.height());var m=v.data("ww");var g=v.data("hh");v.width(m*r.bw);v.height(g*r.bh);p=v.width();d=v.height()}else{if(f.find("iframe").length>0||f.find(".video-js").length>0){var v=f.find("iframe");v.css({display:"block"});if(f.data("ww")==t){f.data("ww",v.width())}if(f.data("hh")==t)f.data("hh",v.height());var m=f.data("ww");var g=f.data("hh");var y=f;if(y.data("fsize")==t)y.data("fsize",parseInt(y.css("font-size"),0)||0);if(y.data("pt")==t)y.data("pt",parseInt(y.css("paddingTop"),0)||0);if(y.data("pb")==t)y.data("pb",parseInt(y.css("paddingBottom"),0)||0);if(y.data("pl")==t)y.data("pl",parseInt(y.css("paddingLeft"),0)||0);if(y.data("pr")==t)y.data("pr",parseInt(y.css("paddingRight"),0)||0);if(y.data("mt")==t)y.data("mt",parseInt(y.css("marginTop"),0)||0);if(y.data("mb")==t)y.data("mb",parseInt(y.css("marginBottom"),0)||0);if(y.data("ml")==t)y.data("ml",parseInt(y.css("marginLeft"),0)||0);if(y.data("mr")==t)y.data("mr",parseInt(y.css("marginRight"),0)||0);if(y.data("bt")==t)y.data("bt",parseInt(y.css("borderTop"),0)||0);if(y.data("bb")==t)y.data("bb",parseInt(y.css("borderBottom"),0)||0);if(y.data("bl")==t)y.data("bl",parseInt(y.css("borderLeft"),0)||0);if(y.data("br")==t)y.data("br",parseInt(y.css("borderRight"),0)||0);if(y.data("lh")==t)y.data("lh",parseInt(y.css("lineHeight"),0)||0);var b=r.width;var w=r.height;if(b>r.startwidth)b=r.startwidth;if(w>r.startheight)w=r.startheight;if(!f.hasClass("fullscreenvideo"))f.css({"font-size":y.data("fsize")*r.bw+"px","padding-top":y.data("pt")*r.bh+"px","padding-bottom":y.data("pb")*r.bh+"px","padding-left":y.data("pl")*r.bw+"px","padding-right":y.data("pr")*r.bw+"px","margin-top":y.data("mt")*r.bh+"px","margin-bottom":y.data("mb")*r.bh+"px","margin-left":y.data("ml")*r.bw+"px","margin-right":y.data("mr")*r.bw+"px","border-top":y.data("bt")*r.bh+"px","border-bottom":y.data("bb")*r.bh+"px","border-left":y.data("bl")*r.bw+"px","border-right":y.data("br")*r.bw+"px","line-height":y.data("lh")*r.bh+"px",height:g*r.bh+"px","white-space":"nowrap"});else{s=0;o=0;f.data("x",0);f.data("y",0);var E=r.height;if(r.autoHeight=="on")E=r.container.height();f.css({width:r.width,height:E})}v.width(m*r.bw);v.height(g*r.bh);p=v.width();d=v.height()}else{f.find(".tp-resizeme, .tp-resizeme *").each(function(){z(e(this),r)});if(f.hasClass("tp-resizeme")){f.find("*").each(function(){z(e(this),r)})}z(f,r);d=f.outerHeight(true);p=f.outerWidth(true);var S=f.outerHeight();var x=f.css("backgroundColor");f.find(".frontcorner").css({borderWidth:S+"px",left:0-S+"px",borderRight:"0px solid transparent",borderTopColor:x});f.find(".frontcornertop").css({borderWidth:S+"px",left:0-S+"px",borderRight:"0px solid transparent",borderBottomColor:x});f.find(".backcorner").css({borderWidth:S+"px",right:0-S+"px",borderLeft:"0px solid transparent",borderBottomColor:x});f.find(".backcornertop").css({borderWidth:S+"px",right:0-S+"px",borderLeft:"0px solid transparent",borderTopColor:x})}}if(r.fullScreenAlignForce=="on"){u=1;a=1;s=0;o=0}if(f.data("voffset")==t)f.data("voffset",0);if(f.data("hoffset")==t)f.data("hoffset",0);var T=f.data("voffset")*u;var N=f.data("hoffset")*u;var C=r.startwidth*u;var k=r.startheight*u;if(r.fullScreenAlignForce=="on"){C=r.container.width();k=r.container.height()}if(f.data("x")=="center"||f.data("xcenter")=="center"){f.data("xcenter","center");f.data("x",(C/2-f.outerWidth(true)/2)/u+N)}if(f.data("x")=="left"||f.data("xleft")=="left"){f.data("xleft","left");f.data("x",0/u+N)}if(f.data("x")=="right"||f.data("xright")=="right"){f.data("xright","right");f.data("x",(C-f.outerWidth(true)+N)/u)}if(f.data("y")=="center"||f.data("ycenter")=="center"){f.data("ycenter","center");f.data("y",(k/2-f.outerHeight(true)/2)/a+T)}if(f.data("y")=="top"||f.data("ytop")=="top"){f.data("ytop","top");f.data("y",0/r.bh+T)}if(f.data("y")=="bottom"||f.data("ybottom")=="bottom"){f.data("ybottom","bottom");f.data("y",(k-f.outerHeight(true)+T)/u)}if(f.data("start")==t)f.data("start",1e3);var L=f.data("easing");if(L==t)L="Power1.easeOut";var A=f.data("start")/1e3;var O=f.data("speed")/1e3;var M=u*f.data("x")+s;var _=r.bh*f.data("y")+o;if(r.fullScreenAlignForce=="on")_=f.data("y")+o;TweenLite.killTweensOf(f,false);clearTimeout(f.data("reversetimer"));var D=0,P=M,B=_,q=2,U=1,W=0,V=1,$=1,J=1,K=0,Q=0,G=0,Y=0,Z=0,et=0,tt=0,nt="center,center",rt=300,it=0,st=false,ot=0;if(f.data("repeat")!=t)it=f.data("repeat");if(f.data("yoyo")!=t)st=f.data("yoyo");if(f.data("repeatdelay")!=t)ot=f.data("repeatdelay");if(f.hasClass("customin")){var ut=f.data("customin").split(";");e.each(ut,function(e,t){t=t.split(":");var n=t[0],r=t[1];if(n=="rotationX")Q=parseInt(r,0);if(n=="rotationY")G=parseInt(r,0);if(n=="rotationZ")Y=parseInt(r,0);if(n=="scaleX")$=parseFloat(r);if(n=="scaleY")J=parseFloat(r);if(n=="opacity")tt=parseFloat(r);if(n=="skewX")Z=parseInt(r,0);if(n=="skewY")et=parseInt(r,0);if(n=="x")P=M+parseInt(r,0);if(n=="y")B=_+parseInt(r,0);if(n=="z")q=parseInt(r,0);if(n=="transformOrigin")nt=r.toString();if(n=="transformPerspective")rt=parseInt(r,0)})}if(f.hasClass("randomrotate")){V=Math.random()*3+1;K=Math.round(Math.random()*200-100);P=M+Math.round(Math.random()*200-100);B=_+Math.round(Math.random()*200-100)}if(f.hasClass("lfr")||f.hasClass("skewfromright"))P=15+r.width;if(f.hasClass("lfl")||f.hasClass("skewfromleft"))P=-15-p;if(f.hasClass("sfl")|f.hasClass("skewfromleftshort"))P=M-50;if(f.hasClass("sfr")|f.hasClass("skewfromrightshort"))P=M+50;if(f.hasClass("lft"))B=-25-d;if(f.hasClass("lfb"))B=25+r.height;if(f.hasClass("sft"))B=_-50;if(f.hasClass("sfb"))B=_+50;if(f.hasClass("skewfromright")||f.hasClass("skewfromrightshort"))Z=-85;if(f.hasClass("skewfromleft")||f.hasClass("skewfromleftshort"))Z=85;if(R().toLowerCase()=="safari"){Q=0;G=0}P=Math.round(P);B=Math.round(B);M=Math.round(M);_=Math.round(_);if(f.hasClass("customin")){f.data("anim",TweenLite.fromTo(f,O,{scaleX:$,scaleY:J,rotationX:Q,rotationY:G,rotationZ:Y,x:0,y:0,left:P,top:B,z:q,opacity:tt,transformPerspective:rt,transformOrigin:nt,visibility:"hidden"},{left:M,top:_,scaleX:1,scaleY:1,rotationX:0,rotationY:0,rotationZ:0,skewX:0,skewY:0,z:0,x:0,y:0,visibility:"visible",opacity:1,delay:A,ease:L,overwrite:"all"}))}else{f.data("anim",TweenLite.fromTo(f,O,{scale:V,rotationX:0,rotationY:0,skewY:0,rotation:K,left:P+"px",top:B+"px",opacity:0,z:0,x:0,y:0,skewX:Z,transformPerspective:600,visibility:"visible"},{left:M+"px",top:_+"px",scale:1,skewX:0,rotation:0,z:0,visibility:"visible",opacity:1,delay:A,ease:L,overwrite:"all",yoyo:st,repeat:it,repeatDelay:ot}))}f.data("killall",setTimeout(function(){f.css({transform:"none","-moz-transform":"none","-webkit-transform":"none"})},O*1e3+A*1e3+20));f.data("timer",setTimeout(function(){if(f.hasClass("fullscreenvideo"))f.css({display:"block"})},f.data("start")));if(f.data("end")!=t)X(f,r,f.data("end")/1e3)}});var u=e("body").find("#"+r.container.attr("id")).find(".tp-bannertimer");u.data("opt",r)}function R(){var e=navigator.appName,t=navigator.userAgent,n;var r=t.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);if(r&&(n=t.match(/version\/([\.\d]+)/i))!=null)r[2]=n[1];r=r?[r[1],r[2]]:[e,navigator.appVersion,"-?"];return r[0]}function U(){var e=navigator.appName,t=navigator.userAgent,n;var r=t.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);if(r&&(n=t.match(/version\/([\.\d]+)/i))!=null)r[2]=n[1];r=r?[r[1],r[2]]:[e,navigator.appVersion,"-?"];return r[1]}function z(e,n){if(e.data("fsize")==t)e.data("fsize",parseInt(e.css("font-size"),0)||0);if(e.data("pt")==t)e.data("pt",parseInt(e.css("paddingTop"),0)||0);if(e.data("pb")==t)e.data("pb",parseInt(e.css("paddingBottom"),0)||0);if(e.data("pl")==t)e.data("pl",parseInt(e.css("paddingLeft"),0)||0);if(e.data("pr")==t)e.data("pr",parseInt(e.css("paddingRight"),0)||0);if(e.data("mt")==t)e.data("mt",parseInt(e.css("marginTop"),0)||0);if(e.data("mb")==t)e.data("mb",parseInt(e.css("marginBottom"),0)||0);if(e.data("ml")==t)e.data("ml",parseInt(e.css("marginLeft"),0)||0);if(e.data("mr")==t)e.data("mr",parseInt(e.css("marginRight"),0)||0);if(e.data("bt")==t)e.data("bt",parseInt(e.css("borderTopWidth"),0)||0);if(e.data("bb")==t)e.data("bb",parseInt(e.css("borderBottomWidth"),0)||0);if(e.data("bl")==t)e.data("bl",parseInt(e.css("borderLeftWidth"),0)||0);if(e.data("br")==t)e.data("br",parseInt(e.css("borderRightWidth"),0)||0);if(e.data("lh")==t)e.data("lh",parseInt(e.css("lineHeight"),0)||0);if(e.data("minwidth")==t)e.data("minwidth",parseInt(e.css("minWidth"),0)||0);if(e.data("minheight")==t)e.data("minheight",parseInt(e.css("minHeight"),0)||0);if(e.data("maxwidth")==t)e.data("maxwidth",parseInt(e.css("maxWidth"),0)||"none");if(e.data("maxheight")==t)e.data("maxheight",parseInt(e.css("maxHeight"),0)||"none");if(e.data("wan")==t)e.data("wan",e.css("-webkit-transition"));if(e.data("moan")==t)e.data("moan",e.css("-moz-animation-transition"));if(e.data("man")==t)e.data("man",e.css("-ms-animation-transition"));if(e.data("ani")==t)e.data("ani",e.css("transition"));e.css("-webkit-transition","none");e.css("-moz-transition","none");e.css("-ms-transition","none");e.css("transition","none");TweenLite.set(e,{fontSize:Math.round(e.data("fsize")*n.bw)+"px",paddingTop:Math.round(e.data("pt")*n.bh)+"px",paddingBottom:Math.round(e.data("pb")*n.bh)+"px",paddingLeft:Math.round(e.data("pl")*n.bw)+"px",paddingRight:Math.round(e.data("pr")*n.bw)+"px",marginTop:e.data("mt")*n.bh+"px",marginBottom:e.data("mb")*n.bh+"px",marginLeft:e.data("ml")*n.bw+"px",marginRight:e.data("mr")*n.bw+"px",borderTopWidth:Math.round(e.data("bt")*n.bh)+"px",borderBottomWidth:Math.round(e.data("bb")*n.bh)+"px",borderLeftWidth:Math.round(e.data("bl")*n.bw)+"px",borderRightWidth:Math.round(e.data("br")*n.bw)+"px",lineHeight:Math.round(e.data("lh")*n.bh)+"px",whiteSpace:"nowrap",minWidth:e.data("minwidth")*n.bw+"px",minHeight:e.data("minheight")*n.bh+"px"});setTimeout(function(){e.css("-webkit-transition",e.data("wan"));e.css("-moz-transition",e.data("moan"));e.css("-ms-transition",e.data("man"));e.css("transition",e.data("ani"))},30);if(e.data("maxheight")!="none")e.css({maxHeight:e.data("maxheight")*n.bh+"px"});if(e.data("maxwidth")!="none")e.css({maxWidth:e.data("maxwidth")*n.bw+"px"})}function W(t,n){t.find(".tp-caption").each(function(t){var r=e(this);if(r.find("iframe").length>0){try{var i=r.find("iframe");var s=i.attr("id");var o=$f(s);o.api("pause");clearTimeout(r.data("timerplay"))}catch(u){}try{var a=r.data("player");a.stopVideo();clearTimeout(r.data("timerplay"))}catch(u){}}if(r.find("video").length>0){try{r.find("video").each(function(t){var n=e(this).parent();var r=n.attr("id");clearTimeout(n.data("timerplay"));videojs(r).ready(function(){var e=this;e.pause()})})}catch(u){}}try{X(r,n,0)}catch(u){}})}function X(n,r,i){var s=n.data("endspeed");if(s==t)s=n.data("speed");s=s/1e3;var o=n.data("endeasing");if(o==t)o=Power1.easeInOut;if(n.hasClass("ltr")||n.hasClass("ltl")||n.hasClass("str")||n.hasClass("stl")||n.hasClass("ltt")||n.hasClass("ltb")||n.hasClass("stt")||n.hasClass("stb")||n.hasClass("skewtoright")||n.hasClass("skewtorightshort")||n.hasClass("skewtoleft")||n.hasClass("skewtoleftshort")){S=0;if(n.hasClass("skewtoright")||n.hasClass("skewtorightshort"))S=35;if(n.hasClass("skewtoleft")||n.hasClass("skewtoleftshort"))S=-35;var u=0;var a=0;if(n.hasClass("ltr")||n.hasClass("skewtoright"))u=r.width+60;else if(n.hasClass("ltl")||n.hasClass("skewtoleft"))u=0-(r.width+60);else if(n.hasClass("ltt"))a=0-(r.height+60);else if(n.hasClass("ltb"))a=r.height+60;else if(n.hasClass("str")||n.hasClass("skewtorightshort")){u=50;oo=0}else if(n.hasClass("stl")||n.hasClass("skewtoleftshort")){u=-50;oo=0}else if(n.hasClass("stt")){a=-50;oo=0}else if(n.hasClass("stb")){a=50;oo=0}if(n.hasClass("skewtorightshort"))u=u+220;if(n.hasClass("skewtoleftshort"))u=u-220;n.data("outanim",TweenLite.to(n,s,{x:u,y:a,scale:1,rotation:0,skewX:S,opacity:0,delay:i,z:0,overwrite:"auto",ease:o,onStart:function(){if(n.data("anim")!=t)n.data("anim").pause()}}))}else if(n.hasClass("randomrotateout")){n.data("outanim",TweenLite.to(n,s,{left:Math.random()*r.width,top:Math.random()*r.height,scale:Math.random()*2+.3,rotation:Math.random()*360-180,z:0,opacity:0,delay:i,ease:o,onStart:function(){if(n.data("anim")!=t)n.data("anim").pause()}}))}else if(n.hasClass("fadeout")){n.data("outanim",TweenLite.to(n,s,{opacity:0,delay:i,ease:o,onStart:function(){if(n.data("anim")!=t)n.data("anim").pause()}}))}else if(n.hasClass("customout")){var f=0,l=0,c=0,h=2,p=1,d=0,v=1,m=1,g=1,y=0,b=0,w=0,E=0,S=0,x=0,T=0,N="center,center",C=300;var k=n.data("customout").split(";");e.each(k,function(e,t){t=t.split(":");var n=t[0],r=t[1];if(n=="rotationX")b=parseInt(r,0);if(n=="rotationY")w=parseInt(r,0);if(n=="rotationZ")E=parseInt(r,0);if(n=="scaleX")m=parseFloat(r);if(n=="scaleY")g=parseFloat(r);if(n=="opacity")T=parseFloat(r);if(n=="skewX")S=parseInt(r,0);if(n=="skewY")x=parseInt(r,0);if(n=="x")l=parseInt(r,0);if(n=="y")c=parseInt(r,0);if(n=="z")h=parseInt(r);if(n=="transformOrigin")N=r;if(n=="transformPerspective")C=parseInt(r,0)});n.data("outanim",TweenLite.to(n,s,{scaleX:m,scaleY:g,rotationX:b,rotationY:w,rotationZ:E,x:l,y:c,z:h,opacity:T,delay:i,ease:o,overwrite:"auto",onStart:function(){if(n.data("anim")!=t)n.data("anim").pause();TweenLite.set(n,{transformPerspective:C,transformOrigin:N,overwrite:"auto"})}}))}else{clearTimeout(n.data("reversetimer"));n.data("reversetimer",setTimeout(function(){n.data("anim").reverse()},i*1e3))}}function V(t,n){t.children().each(function(){try{e(this).die("click")}catch(t){}try{e(this).die("mouseenter")}catch(t){}try{e(this).die("mouseleave")}catch(t){}try{e(this).unbind("hover")}catch(t){}});try{t.die("click","mouseenter","mouseleave")}catch(r){}clearInterval(n.cdint);t=null}function $(n,r){r.cd=0;r.loop=0;if(r.stopAfterLoops!=t&&r.stopAfterLoops>-1)r.looptogo=r.stopAfterLoops;else r.looptogo=9999999;if(r.stopAtSlide!=t&&r.stopAtSlide>-1)r.lastslidetoshow=r.stopAtSlide;else r.lastslidetoshow=999;r.stopLoop="off";if(r.looptogo==0)r.stopLoop="on";if(r.slideamount>1&&!(r.stopAfterLoops==0&&r.stopAtSlide==1)){var i=n.find(".tp-bannertimer");if(i.length>0){i.css({width:"0%"});if(r.videoplaying!=true)i.animate({width:"100%"},{duration:r.delay-100,queue:false,easing:"linear"})}i.data("opt",r);r.cdint=setInterval(function(){if(e("body").find(n).length==0)V(n,r);if(n.data("conthover-changed")==1){r.conthover=n.data("conthover");n.data("conthover-changed",0)}if(r.conthover!=1&&r.videoplaying!=true&&r.width>r.hideSliderAtLimit){r.cd=r.cd+100}if(r.fullWidth!="on")if(r.width>r.hideSliderAtLimit)n.parent().removeClass("tp-hide-revslider");else n.parent().addClass("tp-hide-revslider");if(r.videostartednow==1){n.trigger("revolution.slide.onvideoplay");r.videostartednow=0}if(r.videostoppednow==1){n.trigger("revolution.slide.onvideostop");r.videostoppednow=0}if(r.cd>=r.delay){r.cd=0;r.act=r.next;r.next=r.next+1;if(r.next>n.find(">ul >li").length-1){r.next=0;r.looptogo=r.looptogo-1;if(r.looptogo<=0){r.stopLoop="on"}}if(r.stopLoop=="on"&&r.next==r.lastslidetoshow-1){clearInterval(r.cdint);n.find(".tp-bannertimer").css({visibility:"hidden"});n.trigger("revolution.slide.onstop")}N(n,r);if(i.length>0){i.css({width:"0%"});if(r.videoplaying!=true)i.animate({width:"100%"},{duration:r.delay-100,queue:false,easing:"linear"})}}},100);n.hover(function(){if(r.onHoverStop=="on"){r.conthover=1;i.stop();n.trigger("revolution.slide.onpause");var s=n.find(">ul >li:eq("+r.next+") .slotholder");s.find(".defaultimg").each(function(){var n=e(this);if(n.data("kenburn")!=t)n.data("kenburn").pause()})}},function(){if(n.data("conthover")!=1){n.trigger("revolution.slide.onresume");r.conthover=0;if(r.onHoverStop=="on"&&r.videoplaying!=true){i.animate({width:"100%"},{duration:r.delay-r.cd-100,queue:false,easing:"linear"})}var s=n.find(">ul >li:eq("+r.next+") .slotholder");s.find(".defaultimg").each(function(){var n=e(this);if(n.data("kenburn")!=t)n.data("kenburn").play()})}})}}e.fn.extend({revolution:function(i){e.fn.revolution.defaults={delay:9e3,startheight:500,startwidth:960,fullScreenAlignForce:"off",autoHeight:"off",hideThumbs:200,thumbWidth:100,thumbHeight:50,thumbAmount:3,navigationType:"bullet",navigationArrows:"solo",hideThumbsOnMobile:"off",hideBulletsOnMobile:"off",hideArrowsOnMobile:"off",hideThumbsUnderResoluition:0,navigationStyle:"round",navigationHAlign:"center",navigationVAlign:"bottom",navigationHOffset:0,navigationVOffset:20,soloArrowLeftHalign:"left",soloArrowLeftValign:"center",soloArrowLeftHOffset:20,soloArrowLeftVOffset:0,soloArrowRightHalign:"right",soloArrowRightValign:"center",soloArrowRightHOffset:20,soloArrowRightVOffset:0,keyboardNavigation:"on",touchenabled:"on",onHoverStop:"on",stopAtSlide:-1,stopAfterLoops:-1,hideCaptionAtLimit:0,hideAllCaptionAtLimit:0,hideSliderAtLimit:0,shadow:0,fullWidth:"off",fullScreen:"off",minFullScreenHeight:0,fullScreenOffsetContainer:"",dottedOverlay:"none",forceFullWidth:"off"};i=e.extend({},e.fn.revolution.defaults,i);return this.each(function(){var o=i;if(o.fullWidth!="on"&&o.fullScreen!="on")o.autoHeight="off";if(o.fullScreen=="on")o.autoHeight="on";if(o.fullWidth!="on"&&o.fullScreen!="on")forceFulWidth="off";var u=e(this);if(o.fullWidth=="on"&&o.autoHeight=="off")u.css({maxHeight:o.startheight+"px"});if(s()&&o.hideThumbsOnMobile=="on"&&o.navigationType=="thumb")o.navigationType="none";if(s()&&o.hideBulletsOnMobile=="on"&&o.navigationType=="bullet")o.navigationType="none";if(s()&&o.hideBulletsOnMobile=="on"&&o.navigationType=="both")o.navigationType="none";if(s()&&o.hideArrowsOnMobile=="on")o.navigationArrows="none";if(o.forceFullWidth=="on"){var a=u.parent().offset().left;var f=u.parent().css("marginBottom");var c=u.parent().css("marginTop");if(f==t)f=0;if(c==t)c=0;u.parent().wrap('
            ');u.closest(".forcefullwidth_wrapper_tp_banner").append('
            ');u.css({backgroundColor:u.parent().css("backgroundColor"),backgroundImage:u.parent().css("backgroundImage")});u.parent().css({left:0-a+"px",position:"absolute",width:e(window).width()});o.width=e(window).width()}try{if(o.hideThumbsUnderResolution>e(window).width()&&o.hideThumbsUnderResolution!=0){u.parent().find(".tp-bullets.tp-thumbs").css({display:"none"})}else{u.parent().find(".tp-bullets.tp-thumbs").css({display:"block"})}}catch(h){}if(!u.hasClass("revslider-initialised")){u.addClass("revslider-initialised");if(u.attr("id")==t)u.attr("id","revslider-"+Math.round(Math.random()*1e3+5));o.firefox13=false;o.ie=!e.support.opacity;o.ie9=document.documentMode==9;var y=e.fn.jquery.split("."),b=parseFloat(y[0]),E=parseFloat(y[1]),S=parseFloat(y[2]||"0");if(b==1&&E<7){u.html('
            The Current Version of jQuery:'+y+"
            Please update your jQuery Version to min. 1.7 in Case you wish to use the Revolution Slider Plugin
            ")}if(b>1)o.ie=false;if(!e.support.transition)e.fn.transition=e.fn.animate;u.find(".caption").each(function(){e(this).addClass("tp-caption")});if(s()){u.find(".tp-caption").each(function(){if(e(this).data("autoplay")==true)e(this).data("autoplay",false)})}var x=0;var T=0;var C=0;var k="http";if(location.protocol==="https:"){k="https"}u.find(".tp-caption iframe").each(function(t){try{if(e(this).attr("src").indexOf("you")>0&&x==0){x=1;var n=document.createElement("script");n.src=k+"://www.youtube.com/player_api";var r=document.getElementsByTagName("script")[0];var i=true;e("head").find("*").each(function(){if(e(this).attr("src")==k+"://www.youtube.com/iframe_api")i=false});if(i)r.parentNode.insertBefore(n,r)}}catch(s){}});u.find(".tp-caption iframe").each(function(t){try{if(e(this).attr("src").indexOf("vim")>0&&T==0){T=1;var n=document.createElement("script");n.src=k+"://a.vimeocdn.com/js/froogaloop2.min.js";var r=document.getElementsByTagName("script")[0];var i=true;e("head").find("*").each(function(){if(e(this).attr("src")==k+"://a.vimeocdn.com/js/froogaloop2.min.js")i=false});if(i)r.parentNode.insertBefore(n,r)}}catch(s){}});u.find(".tp-caption video").each(function(t){try{if(e(this).hasClass("video-js")&&C==0){C=1;var n=document.createElement("script");n.src=o.videoJsPath+"video.js";var r=document.getElementsByTagName("script")[0];var i=true;e("head").find("*").each(function(){if(e(this).attr("src")==o.videoJsPath+"video.js")i=false});if(i){r.parentNode.insertBefore(n,r);e("head").append('');e("head").append('')}}}catch(s){}});if(o.shuffle=="on"){for(var L=0;Lul:first-child >li").length;L++){var A=Math.round(Math.random()*u.find(">ul:first-child >li").length);u.find(">ul:first-child >li:eq("+A+")").prependTo(u.find(">ul:first-child"))}}o.slots=4;o.act=-1;o.next=0;if(o.startWithSlide!=t)o.next=o.startWithSlide;var O=n("#")[0];if(O.length<9){if(O.split("slide").length>1){var M=parseInt(O.split("slide")[1],0);if(M<1)M=1;if(M>u.find(">ul:first >li").length)M=u.find(">ul:first >li").length;o.next=M-1}}o.origcd=o.delay;o.firststart=1;if(o.navigationHOffset==t)o.navOffsetHorizontal=0;if(o.navigationVOffset==t)o.navOffsetVertical=0;u.append('
            ');if(u.find(".tp-bannertimer").length==0)u.append('');var _=u.find(".tp-bannertimer");if(_.length>0){_.css({width:"0%"})}u.addClass("tp-simpleresponsive");o.container=u;o.slideamount=u.find(">ul:first >li").length;if(u.height()==0)u.height(o.startheight);if(o.startwidth==t||o.startwidth==0)o.startwidth=u.width();if(o.startheight==t||o.startheight==0)o.startheight=u.height();o.width=u.width();o.height=u.height();o.bw=o.startwidth/u.width();o.bh=o.startheight/u.height();if(o.width!=o.startwidth){o.height=Math.round(o.startheight*(o.width/o.startwidth));u.height(o.height)}if(o.shadow!=0){u.parent().append('
            ');var a=0;if(o.forceFullWidth=="on")a=0-o.container.parent().offset().left;u.parent().find(".tp-bannershadow").css({width:o.width,left:a})}u.find("ul").css({display:"none"});var D=u;if(o.lazyLoad=="on"){var P=u.find("ul >li >img").first();if(P.data("lazyload")!=t)P.attr("src",P.data("lazyload"));P.data("lazydone",1);D=P.parent()}D.waitForImages(function(){u.find("ul").css({display:"block"});w(u,o);if(o.slideamount>1)p(u,o);if(o.slideamount>1)l(u,o);if(o.slideamount>1)d(u,o);if(o.keyboardNavigation=="on")v(u,o);m(u,o);if(o.hideThumbs>0)g(u,o);u.waitForImages(function(){u.find(".tp-loader").fadeOut(600);setTimeout(function(){N(u,o);if(o.slideamount>1)$(u,o);u.trigger("revolution.slide.onloaded")},600)})});e(window).resize(function(){if(e("body").find(u)!=0)if(o.forceFullWidth=="on"){var t=o.container.closest(".forcefullwidth_wrapper_tp_banner").offset().left;o.container.parent().css({left:0-t+"px",width:e(window).width()})}if(u.outerWidth(true)!=o.width){r(u,o)}});try{if(o.hideThumbsUnderResoluition!=0&&o.navigationType=="thumb"){if(o.hideThumbsUnderResoluition>e(window).width())e(".tp-bullets").css({display:"none"});else e(".tp-bullets").css({display:"block"})}}catch(h){}u.find(".tp-scrollbelowslider").on("click",function(){var t=0;try{t=e("body").find(o.fullScreenOffsetContainer).height()}catch(n){}try{t=t-e(this).data("scrolloffset")}catch(n){}e("body,html").animate({scrollTop:u.offset().top+u.find(">ul >li").height()-t+"px"},{duration:400})})}})},revscroll:function(t){return this.each(function(){var n=e(this);e("body,html").animate({scrollTop:n.offset().top+n.find(">ul >li").height()-t+"px"},{duration:400})})},revredraw:function(t){return this.each(function(){var t=e(this);var n=t.parent().find(".tp-bannertimer");var i=n.data("opt");r(t,i)})},revpause:function(t){return this.each(function(){var t=e(this);t.data("conthover",1);t.data("conthover-changed",1);t.trigger("revolution.slide.onpause");var n=t.parent().find(".tp-bannertimer");n.stop()})},revresume:function(t){return this.each(function(){var t=e(this);t.data("conthover",0);t.data("conthover-changed",1);t.trigger("revolution.slide.onresume");var n=t.parent().find(".tp-bannertimer");var r=n.data("opt");n.animate({width:"100%"},{duration:r.delay-r.cd-100,queue:false,easing:"linear"})})},revnext:function(t){return this.each(function(){var t=e(this);t.parent().find(".tp-rightarrow").click()})},revprev:function(t){return this.each(function(){var t=e(this);t.parent().find(".tp-leftarrow").click()})},revmaxslide:function(t){return e(this).find(">ul:first-child >li").length},revcurrentslide:function(t){var n=e(this);var r=n.parent().find(".tp-bannertimer");var i=r.data("opt");return i.act},revlastslide:function(t){var n=e(this);var r=n.parent().find(".tp-bannertimer");var i=r.data("opt");return i.lastslide},revshowslide:function(t){return this.each(function(){var n=e(this);n.data("showus",t);n.parent().find(".tp-rightarrow").click()})}});})(jQuery) \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/rs-plugin/videojs/demo.captions.vtt b/src/wp-content/plugins/revslider/rs-plugin/videojs/demo.captions.vtt new file mode 100644 index 0000000..e598be1 --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/videojs/demo.captions.vtt @@ -0,0 +1,41 @@ +WEBVTT + +00:00.700 --> 00:04.110 +Captions describe all relevant audio for the hearing impaired. +[ Heroic music playing for a seagull ] + +00:04.500 --> 00:05.000 +[ Splash!!! ] + +00:05.100 --> 00:06.000 +[ Sploosh!!! ] + +00:08.000 --> 00:09.225 +[ Splash...splash...splash splash splash ] + +00:10.525 --> 00:11.255 +[ Splash, Sploosh again ] + +00:13.500 --> 00:14.984 +Dolphin: eeeEEEEEeeee! + +00:14.984 --> 00:16.984 +Dolphin: Squawk! eeeEEE? + +00:25.000 --> 00:28.284 +[ A whole ton of splashes ] + +00:29.500 --> 00:31.000 +Mine. Mine. Mine. + +00:34.300 --> 00:36.000 +Shark: Chomp + +00:36.800 --> 00:37.900 +Shark: CHOMP!!! + +00:37.861 --> 00:41.193 +EEEEEEOOOOOOOOOOWHALENOISE + +00:42.593 --> 00:45.611 +[ BIG SPLASH ] \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/rs-plugin/videojs/font/index.php b/src/wp-content/plugins/revslider/rs-plugin/videojs/font/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/rs-plugin/videojs/font/vjs.eot b/src/wp-content/plugins/revslider/rs-plugin/videojs/font/vjs.eot new file mode 100644 index 0000000..1b8202a Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/videojs/font/vjs.eot differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/videojs/font/vjs.svg b/src/wp-content/plugins/revslider/rs-plugin/videojs/font/vjs.svg new file mode 100644 index 0000000..21a70a6 --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/videojs/font/vjs.svg @@ -0,0 +1,40 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/rs-plugin/videojs/font/vjs.ttf b/src/wp-content/plugins/revslider/rs-plugin/videojs/font/vjs.ttf new file mode 100644 index 0000000..a5ad468 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/videojs/font/vjs.ttf differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/videojs/font/vjs.woff b/src/wp-content/plugins/revslider/rs-plugin/videojs/font/vjs.woff new file mode 100644 index 0000000..375510e Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/videojs/font/vjs.woff differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/videojs/index.php b/src/wp-content/plugins/revslider/rs-plugin/videojs/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/rs-plugin/videojs/video-js.min.css b/src/wp-content/plugins/revslider/rs-plugin/videojs/video-js.min.css new file mode 100644 index 0000000..45d70a7 --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/videojs/video-js.min.css @@ -0,0 +1,4 @@ +/*! +Video.js Default Styles (http://videojs.com) +Version 4.0.3 +*/.video-js{background-color:#000;position:relative;padding:0;font-size:10px;vertical-align:middle}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}.video-js:-moz-full-screen{position:absolute}body.vjs-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0;width:100%!important;height:100%!important;_position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.vjs-poster{background-repeat:no-repeat;background-position:50% 50%;background-size:contain;cursor:pointer;height:100%;margin:0;padding:0;position:relative;width:100%}.vjs-poster img{display:block;margin:0 auto;max-height:100%;padding:0;width:100%}.video-js .vjs-text-track-display{text-align:center;position:absolute;bottom:4em;left:1em;right:1em;font-family:Arial,sans-serif}.video-js .vjs-text-track{display:none;font-size:1.4em;text-align:center;margin-bottom:.1em;background:#000;background:rgba(0,0,0,.5)}.video-js .vjs-subtitles{color:#fff}.video-js .vjs-captions{color:#fc6}.vjs-tt-cue{display:block}.vjs-fade-in{display:block!important;visibility:visible;opacity:1;-webkit-transition:visibility .1s,opacity .1s;-moz-transition:visibility .1s,opacity .1s;-ms-transition:visibility .1s,opacity .1s;-o-transition:visibility .1s,opacity .1s;transition:visibility .1s,opacity .1s}.vjs-fade-out{display:block!important;visibility:hidden;opacity:0;-webkit-transition:visibility 1.5s,opacity 1.5s;-moz-transition:visibility 1.5s,opacity 1.5s;-ms-transition:visibility 1.5s,opacity 1.5s;-o-transition:visibility 1.5s,opacity 1.5s;transition:visibility 1.5s,opacity 1.5s;-webkit-transition-delay:2s;-moz-transition-delay:2s;-ms-transition-delay:2s;-o-transition-delay:2s;transition-delay:2s}.vjs-default-skin .vjs-hidden{display:none}.vjs-lock-showing{display:block!important;opacity:1;visibility:visible}@font-face{font-family:VideoJS;src:url(font/vjs.eot);src:url(font/vjs.eot?#iefix) format('embedded-opentype'),url(font/vjs.woff) format('woff'),url(font/vjs.ttf) format('truetype');font-weight:400;font-style:normal}.vjs-default-skin{color:#ccc}.vjs-default-skin .vjs-slider{outline:0;position:relative;cursor:pointer;padding:0;background:#323232;background:rgba(100,100,100,.5)}.vjs-default-skin .vjs-slider:focus{background:#464646;background:rgba(100,100,100,.7);-webkit-box-shadow:0 0 2em rgba(255,255,255,1);-moz-box-shadow:0 0 2em rgba(255,255,255,1);box-shadow:0 0 2em rgba(255,255,255,1)}.vjs-default-skin .vjs-slider-handle{position:absolute;left:0;top:0}.vjs-default-skin .vjs-slider-handle:before{content:"\e009";font-family:VideoJS;font-size:1em;line-height:1;text-align:center;text-shadow:0 0 1em #fff;position:absolute;top:0;left:0;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}.vjs-default-skin .vjs-control-bar{display:none;position:absolute;bottom:0;left:0;right:0;padding:0;margin:0;height:3em;background-color:#000;background-color:rgba(7,40,50,.7);font-style:normal;font-weight:400;font-family:Arial,sans-serif}.vjs-default-skin .vjs-control{outline:0;position:relative;float:left;text-align:center;margin:0;padding:0;height:3em;width:4em}.vjs-default-skin .vjs-control:before{font-family:VideoJS;font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.5)}.vjs-default-skin .vjs-control:focus:before,.vjs-default-skin .vjs-control:hover:before{text-shadow:0 0 1em rgba(255,255,255,1)}.vjs-default-skin .vjs-control:focus{}.vjs-default-skin .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-default-skin .vjs-play-control{width:5em;cursor:pointer}.vjs-default-skin .vjs-play-control:before{content:"\e001"}.vjs-default-skin.vjs-playing .vjs-play-control:before{content:"\e002"}.vjs-default-skin .vjs-mute-control,.vjs-default-skin .vjs-volume-menu-button{cursor:pointer;float:right}.vjs-default-skin .vjs-mute-control:before,.vjs-default-skin .vjs-volume-menu-button:before{content:"\e006"}.vjs-default-skin .vjs-mute-control.vjs-vol-0:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-0:before{content:"\e003"}.vjs-default-skin .vjs-mute-control.vjs-vol-1:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-1:before{content:"\e004"}.vjs-default-skin .vjs-mute-control.vjs-vol-2:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-2:before{content:"\e005"}.vjs-default-skin .vjs-volume-control{width:5em;float:right}.vjs-default-skin .vjs-volume-bar{width:5em;height:.6em;margin:1.1em auto 0}.vjs-default-skin .vjs-volume-menu-button .vjs-menu-content{height:2.9em}.vjs-default-skin .vjs-volume-level{position:absolute;top:0;left:0;height:.5em;background:#66A8CC url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat}.vjs-default-skin .vjs-volume-bar .vjs-volume-handle{width:.5em;height:.5em}.vjs-default-skin .vjs-volume-handle:before{font-size:.9em;top:-.2em;left:-.2em;width:1em;height:1em}.vjs-default-skin .vjs-volume-menu-button .vjs-menu .vjs-menu-content{width:6em;left:-4em}.vjs-default-skin .vjs-progress-control{position:absolute;left:0;right:0;width:auto;font-size:.3em;height:1em;top:-1em;-webkit-transition:top .4s,height .4s,font-size .4s,-webkit-transform .4s;-moz-transition:top .4s,height .4s,font-size .4s,-moz-transform .4s;-o-transition:top .4s,height .4s,font-size .4s,-o-transform .4s;transition:top .4s,height .4s,font-size .4s,transform .4s}.vjs-default-skin:hover .vjs-progress-control{font-size:.9em;-webkit-transition:top .2s,height .2s,font-size .2s,-webkit-transform .2s;-moz-transition:top .2s,height .2s,font-size .2s,-moz-transform .2s;-o-transition:top .2s,height .2s,font-size .2s,-o-transform .2s;transition:top .2s,height .2s,font-size .2s,transform .2s}.vjs-default-skin .vjs-progress-holder{height:100%}.vjs-default-skin .vjs-progress-holder .vjs-play-progress,.vjs-default-skin .vjs-progress-holder .vjs-load-progress{position:absolute;display:block;height:100%;margin:0;padding:0;left:0;top:0}.vjs-default-skin .vjs-play-progress{background:#66A8CC url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat}.vjs-default-skin .vjs-load-progress{background:#646464;background:rgba(255,255,255,.4)}.vjs-default-skin .vjs-seek-handle{width:1.5em;height:100%}.vjs-default-skin .vjs-seek-handle:before{padding-top:.1em}.vjs-default-skin .vjs-time-controls{font-size:1em;line-height:3em}.vjs-default-skin .vjs-current-time{float:left}.vjs-default-skin .vjs-duration{float:left}.vjs-default-skin .vjs-remaining-time{display:none;float:left}.vjs-time-divider{float:left;line-height:3em}.vjs-default-skin .vjs-fullscreen-control{width:3.8em;cursor:pointer;float:right}.vjs-default-skin .vjs-fullscreen-control:before{content:"\e000"}.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control:before{content:"\e00b"}.vjs-default-skin .vjs-big-play-button{display:block;z-index:2;position:absolute;top:2em;left:2em;width:12em;height:8em;margin:0;text-align:center;vertical-align:middle;cursor:pointer;opacity:1;background-color:#282828;background-color:rgba(7,40,50,.7);border:.3em solid #323232;border-color:rgba(255,255,255,.25);-webkit-border-radius:25px;-moz-border-radius:25px;border-radius:25px;-webkit-box-shadow:0 0 1em rgba(255,255,255,.25);-moz-box-shadow:0 0 1em rgba(255,255,255,.25);box-shadow:0 0 1em rgba(255,255,255,.25);-webkit-transition:border .4s,-webkit-box-shadow .4s,-webkit-transform .4s;-moz-transition:border .4s,-moz-box-shadow .4s,-moz-transform .4s;-o-transition:border .4s,-o-box-shadow .4s,-o-transform .4s;transition:border .4s,box-shadow .4s,transform .4s}.vjs-default-skin:hover .vjs-big-play-button,.vjs-default-skin .vjs-big-play-button:focus{outline:0;border-color:#fff;border-color:rgba(255,255,255,1);background-color:#505050;background-color:rgba(50,50,50,.75);-webkit-box-shadow:0 0 3em #fff;-moz-box-shadow:0 0 3em #fff;box-shadow:0 0 3em #fff;-webkit-transition:border 0s,-webkit-box-shadow 0s,-webkit-transform 0s;-moz-transition:border 0s,-moz-box-shadow 0s,-moz-transform 0s;-o-transition:border 0s,-o-box-shadow 0s,-o-transform 0s;transition:border 0s,box-shadow 0s,transform 0s}.vjs-default-skin .vjs-big-play-button:before{content:"\e001";font-family:VideoJS;font-size:3em;line-height:2.66;text-shadow:.05em .05em .1em #000;text-align:center;position:absolute;left:0;width:100%;height:100%}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;font-size:5em;line-height:1;width:1em;height:1em;margin-left:-.5em;margin-top:-.5em;opacity:.75;-webkit-animation:spin 1.5s infinite linear;-moz-animation:spin 1.5s infinite linear;-o-animation:spin 1.5s infinite linear;animation:spin 1.5s infinite linear}.vjs-default-skin .vjs-loading-spinner:before{content:"\e00a";font-family:VideoJS;position:absolute;width:1em;height:1em;text-align:center;text-shadow:0 0 .1em #000}.vjs-default-skin .vjs-loading-spinner:after{content:"\e00a";font-family:VideoJS;position:absolute;width:1em;height:1em;text-align:center;-webkit-background-clip:text;-webkit-text-fill-color:transparent}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.vjs-default-skin .vjs-menu-button{float:right;cursor:pointer}.vjs-default-skin .vjs-menu{display:none;position:absolute;bottom:0;left:0;width:0;height:0;margin-bottom:3em;border-left:2em solid transparent;border-right:2em solid transparent;border-top:1.55em solid #000;border-top-color:rgba(7,40,50,.5)}.vjs-default-skin .vjs-menu-button .vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;position:absolute;width:10em;bottom:1.5em;max-height:15em;overflow:auto;left:-5em;background-color:#000;background-color:rgba(7,40,50,.7);-webkit-box-shadow:-20px -20px 0 rgba(255,255,255,.5);-moz-box-shadow:0 0 1em rgba(255,255,255,.5);box-shadow:-.2em -.2em .3em rgba(255,255,255,.2)}.vjs-default-skin .vjs-menu-button:hover .vjs-menu{display:block}.vjs-default-skin .vjs-menu-button ul li{list-style:none;margin:0;padding:.3em 0;line-height:1.4em;font-size:1.2em;font-weight:400;text-align:center;text-transform:lowercase}.vjs-default-skin .vjs-menu-button ul li.vjs-selected{background-color:#000}.vjs-default-skin .vjs-menu-button ul li:focus,.vjs-default-skin .vjs-menu-button ul li:hover,.vjs-default-skin .vjs-menu-button ul li.vjs-selected:focus,.vjs-default-skin .vjs-menu-button ul li.vjs-selected:hover{background-color:#fff;background-color:rgba(255,255,255,.75);color:#111;outline:0;-webkit-box-shadow:0 0 1em rgba(255,255,255,1);-moz-box-shadow:0 0 1em rgba(255,255,255,1);box-shadow:0 0 1em rgba(255,255,255,1)}.vjs-default-skin .vjs-menu-button ul li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em;font-weight:700;cursor:default}.vjs-default-skin .vjs-subtitles-button:before{content:"\e00c"}.vjs-default-skin .vjs-captions-button{font-size:1em}.vjs-default-skin .vjs-captions-button:before{content:"\e008";font-family:VideoJS;font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;text-shadow:none}.vjs-default-skin .vjs-captions-button:focus .vjs-control-content:before,.vjs-default-skin .vjs-captions-button:hover .vjs-control-content:before{-webkit-box-shadow:0 0 1em rgba(255,255,255,1);-moz-box-shadow:0 0 1em rgba(255,255,255,1);box-shadow:0 0 1em rgba(255,255,255,1)} \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/rs-plugin/videojs/video-js.png b/src/wp-content/plugins/revslider/rs-plugin/videojs/video-js.png new file mode 100644 index 0000000..d877829 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/videojs/video-js.png differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/videojs/video-js.swf b/src/wp-content/plugins/revslider/rs-plugin/videojs/video-js.swf new file mode 100644 index 0000000..61a6e34 Binary files /dev/null and b/src/wp-content/plugins/revslider/rs-plugin/videojs/video-js.swf differ diff --git a/src/wp-content/plugins/revslider/rs-plugin/videojs/video.js b/src/wp-content/plugins/revslider/rs-plugin/videojs/video.js new file mode 100644 index 0000000..663589e --- /dev/null +++ b/src/wp-content/plugins/revslider/rs-plugin/videojs/video.js @@ -0,0 +1,120 @@ +/*! Video.js v4.0.3 Copyright 2013 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE */ + (function() {var b=void 0,f=!0,h=null,l=!1;function m(){return function(){}}function p(a){return function(){return this[a]}}function r(a){return function(){return a}}var t;document.createElement("video");document.createElement("audio");function u(a,c,d){if("string"===typeof a){0===a.indexOf("#")&&(a=a.slice(1));if(u.La[a])return u.La[a];a=u.r(a)}if(!a||!a.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return a.player||new u.ea(a,c,d)}var v=u;window.xd=window.yd=u;u.Ob="4.0"; +u.xc="https:"==document.location.protocol?"https://":"http://";u.options={techOrder:["html5","flash"],html5:{},flash:{},width:300,height:150,defaultVolume:0,children:{mediaLoader:{},posterImage:{},textTrackDisplay:{},loadingSpinner:{},bigPlayButton:{},controlBar:{}}};"GENERATED_CDN_VSN"!==u.Ob&&(v.options.flash.swf=u.xc+"vjs.zencdn.net/"+u.Ob+"/video-js.swf");u.La={};u.ka=u.CoreObject=m(); +u.ka.extend=function(a){var c,d;a=a||{};c=a.init||a.g||this.prototype.init||this.prototype.g||m();d=function(){c.apply(this,arguments)};d.prototype=u.i.create(this.prototype);d.prototype.constructor=d;d.extend=u.ka.extend;d.create=u.ka.create;for(var e in a)a.hasOwnProperty(e)&&(d.prototype[e]=a[e]);return d};u.ka.create=function(){var a=u.i.create(this.prototype);this.apply(a,arguments);return a}; +u.d=function(a,c,d){var e=u.getData(a);e.z||(e.z={});e.z[c]||(e.z[c]=[]);d.u||(d.u=u.u++);e.z[c].push(d);e.S||(e.disabled=l,e.S=function(c){if(!e.disabled){c=u.fc(c);var d=e.z[c.type];if(d)for(var d=d.slice(0),k=0,q=d.length;ke?"0"+e:e)+":")+(10>d?"0"+d:d)};u.Gc=function(){document.body.focus();document.onselectstart=r(l)};u.ld=function(){document.onselectstart=r(f)}; +u.trim=function(a){return a.toString().replace(/^\s+/,"").replace(/\s+$/,"")};u.round=function(a,c){c||(c=0);return Math.round(a*Math.pow(10,c))/Math.pow(10,c)};u.rb=function(a,c){return{length:1,start:function(){return a},end:function(){return c}}}; +u.get=function(a,c,d){var e=0===a.indexOf("file:")||0===window.location.href.indexOf("file:")&&-1===a.indexOf("http");"undefined"===typeof XMLHttpRequest&&(window.XMLHttpRequest=function(){try{return new window.ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new window.ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(c){}try{return new window.ActiveXObject("Msxml2.XMLHTTP")}catch(d){}throw Error("This browser does not support XMLHttpRequest.");});var g=new XMLHttpRequest;try{g.open("GET",a)}catch(j){d(j)}g.onreadystatechange= +function(){4===g.readyState&&(200===g.status||e&&0===g.status?c(g.responseText):d&&d())};try{g.send()}catch(k){d&&d(k)}};u.dd=function(a){try{var c=window.localStorage||l;c&&(c.volume=a)}catch(d){22==d.code||1014==d.code?u.log("LocalStorage Full (VideoJS)",d):18==d.code?u.log("LocalStorage not allowed (VideoJS)",d):u.log("LocalStorage Error (VideoJS)",d)}};u.ic=function(a){a.match(/^https?:\/\//)||(a=u.e("div",{innerHTML:'x'}).firstChild.href);return a}; +u.log=function(){u.log.history=u.log.history||[];u.log.history.push(arguments);window.console&&window.console.log(Array.prototype.slice.call(arguments))};u.Oc=function(a){var c,d;a.getBoundingClientRect&&a.parentNode&&(c=a.getBoundingClientRect());if(!c)return{left:0,top:0};a=document.documentElement;d=document.body;return{left:c.left+(window.pageXOffset||d.scrollLeft)-(a.clientLeft||d.clientLeft||0),top:c.top+(window.pageYOffset||d.scrollTop)-(a.clientTop||d.clientTop||0)}}; +u.c=u.ka.extend({g:function(a,c,d){this.a=a;this.f=u.i.copy(this.f);c=this.options(c);this.L=c.id||(c.el&&c.el.id?c.el.id:a.id()+"_component_"+u.u++);this.Tc=c.name||h;this.b=c.el||this.e();this.D=[];this.pb={};this.R={};if((a=this.f)&&a.children){var e=this;u.i.qa(a.children,function(a,c){c!==l&&!c.loadEvent&&(e[a]=e.X(a,c))})}this.M(d)}});t=u.c.prototype; +t.C=function(){if(this.D)for(var a=this.D.length-1;0<=a;a--)this.D[a].C&&this.D[a].C();this.R=this.pb=this.D=h;this.t();this.b.parentNode&&this.b.parentNode.removeChild(this.b);u.rc(this.b);this.b=h};t.oc=p("a");t.options=function(a){return a===b?this.f:this.f=u.i.ec(this.f,a)};t.e=function(a,c){return u.e(a,c)};t.r=p("b");t.id=p("L");t.name=p("Tc");t.children=p("D"); +t.X=function(a,c){var d,e;"string"===typeof a?(e=a,c=c||{},d=c.componentClass||u.Y(e),c.name=e,d=new window.videojs[d](this.a||this,c)):d=a;this.D.push(d);"function"===typeof d.id&&(this.pb[d.id()]=d);(e=e||d.name&&d.name())&&(this.R[e]=d);"function"===typeof d.el&&d.el()&&(this.pa||this.b).appendChild(d.el());return d}; +t.removeChild=function(a){"string"===typeof a&&(a=this.R[a]);if(a&&this.D){for(var c=l,d=this.D.length-1;0<=d;d--)if(this.D[d]===a){c=f;this.D.splice(d,1);break}c&&(this.pb[a.id]=h,this.R[a.name]=h,(c=a.r())&&c.parentNode===(this.pa||this.b)&&(this.pa||this.b).removeChild(a.r()))}};t.P=r("");t.d=function(a,c){u.d(this.b,a,u.bind(this,c));return this};t.t=function(a,c){u.t(this.b,a,c);return this};t.Q=function(a,c){u.Q(this.b,a,u.bind(this,c));return this};t.k=function(a,c){u.k(this.b,a,c);return this}; +t.M=function(a){a&&(this.Z?a.call(this):(this.Oa===b&&(this.Oa=[]),this.Oa.push(a)));return this};t.Ra=function(){this.Z=f;var a=this.Oa;if(a&&0'+(this.na||"Need Text")+"
            ",ad:"button","aria-live":"polite",tabIndex:0},c);return u.c.prototype.e.call(this,a,c)};t.P=function(){return"vjs-control "+u.c.prototype.P.call(this)};t.n=m();t.Ja=function(){u.d(document,"keyup",u.bind(this,this.$))};t.$=function(a){if(32==a.which||13==a.which)a.preventDefault(),this.n()}; +t.Ia=function(){u.t(document,"keyup",u.bind(this,this.$))};u.J=u.c.extend({g:function(a,c){u.c.call(this,a,c);this.Fc=this.R[this.f.barName];this.handle=this.R[this.f.handleName];a.d(this.pc,u.bind(this,this.update));this.d("mousedown",this.Ka);this.d("touchstart",this.Ka);this.d("focus",this.Ja);this.d("blur",this.Ia);this.d("click",this.n);this.a.d("controlsvisible",u.bind(this,this.update));a.M(u.bind(this,this.update));this.K={}}});t=u.J.prototype; +t.e=function(a,c){c=c||{};c.className+=" vjs-slider";c=u.i.B({ad:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},c);return u.c.prototype.e.call(this,a,c)};t.Ka=function(a){a.preventDefault();u.Gc();this.K.move=u.bind(this,this.Fb);this.K.end=u.bind(this,this.Gb);u.d(document,"mousemove",this.K.move);u.d(document,"mouseup",this.K.end);u.d(document,"touchmove",this.K.move);u.d(document,"touchend",this.K.end);this.Fb(a)}; +t.Gb=function(){u.ld();u.t(document,"mousemove",this.K.move,l);u.t(document,"mouseup",this.K.end,l);u.t(document,"touchmove",this.K.move,l);u.t(document,"touchend",this.K.end,l);this.update()};t.update=function(){if(this.b){var a,c=this.wb(),d=this.handle,e=this.Fc;isNaN(c)&&(c=0);a=c;if(d){a=this.b.offsetWidth;var g=d.r().offsetWidth;a=g?g/a:0;c*=1-a;a=c+a/2;d.r().style.left=u.round(100*c,2)+"%"}e.r().style.width=u.round(100*a,2)+"%"}}; +function C(a,c){var d,e,g,j;d=a.b;e=u.Oc(d);j=g=d.offsetWidth;d=a.handle;if(a.f.md)return j=e.top,e=c.changedTouches?c.changedTouches[0].pageY:c.pageY,d&&(d=d.r().offsetHeight,j+=d/2,g-=d),Math.max(0,Math.min(1,(j-e+g)/g));g=e.left;e=c.changedTouches?c.changedTouches[0].pageX:c.pageX;d&&(d=d.r().offsetWidth,g+=d/2,j-=d);return Math.max(0,Math.min(1,(e-g)/j))}t.Ja=function(){u.d(document,"keyup",u.bind(this,this.$))}; +t.$=function(a){37==a.which?(a.preventDefault(),this.uc()):39==a.which&&(a.preventDefault(),this.vc())};t.Ia=function(){u.t(document,"keyup",u.bind(this,this.$))};t.n=function(a){a.stopImmediatePropagation();a.preventDefault()};u.fa=u.c.extend();u.fa.prototype.defaultValue=0;u.fa.prototype.e=function(a,c){c=c||{};c.className+=" vjs-slider-handle";c=u.i.B({innerHTML:''+this.defaultValue+""},c);return u.c.prototype.e.call(this,"div",c)};u.la=u.c.extend(); +function ba(a,c){a.X(c);c.d("click",u.bind(a,function(){this.Sa()}))}u.la.prototype.e=function(){var a=this.options().Ic||"ul";this.pa=u.e(a,{className:"vjs-menu-content"});a=u.c.prototype.e.call(this,"div",{append:this.pa,className:"vjs-menu"});a.appendChild(this.pa);u.d(a,"click",function(a){a.preventDefault();a.stopImmediatePropagation()});return a};u.I=u.o.extend({g:function(a,c){u.o.call(this,a,c);this.selected(c.selected)}}); +u.I.prototype.e=function(a,c){return u.o.prototype.e.call(this,"li",u.i.B({className:"vjs-menu-item",innerHTML:this.f.label},c))};u.I.prototype.n=function(){this.selected(f)};u.I.prototype.selected=function(a){a?(this.p("vjs-selected"),this.b.setAttribute("aria-selected",f)):(this.w("vjs-selected"),this.b.setAttribute("aria-selected",l))}; +u.ca=u.o.extend({g:function(a,c){u.o.call(this,a,c);this.sa=this.Ea();this.X(this.sa);this.G&&0===this.G.length&&this.v();this.d("keyup",this.$);this.b.setAttribute("aria-haspopup",f);this.b.setAttribute("role","button")}});t=u.ca.prototype;t.ma=l;t.Ea=function(){var a=new u.la(this.a);this.options().title&&a.r().appendChild(u.e("li",{className:"vjs-menu-title",innerHTML:u.Y(this.A),jd:-1}));if(this.G=this.qb())for(var c=0;cChrome or download the latest Adobe Flash Player.'}))}else a instanceof +Object?window.videojs[this.ua].canPlaySource(a)?this.src(a.src):this.src([a]):(this.s.src=a,this.Z?(J(this,"src",a),"auto"==this.f.preload&&this.load(),this.f.autoplay&&this.play()):this.M(function(){this.src(a)}));return this};t.load=function(){J(this,"load");return this};t.currentSrc=function(){return I(this,"currentSrc")||this.s.src||""};t.Ma=function(a){return a!==b?(J(this,"setPreload",a),this.f.preload=a,this):I(this,"preload")}; +t.autoplay=function(a){return a!==b?(J(this,"setAutoplay",a),this.f.autoplay=a,this):I(this,"autoplay")};t.loop=function(a){return a!==b?(J(this,"setLoop",a),this.f.loop=a,this):I(this,"loop")};t.poster=function(a){a!==b&&(this.qc=a);return this.qc};t.controls=function(a){a!==b&&this.Da!==a&&(this.Da=!!a,this.k("controlschange"));return this.Da};t.error=function(){return I(this,"error")};var M,N,O;O=document.createElement("div");N={}; +O.rd!==b?(N.sc="requestFullscreen",N.nb="exitFullscreen",N.tb="fullscreenchange",N.F="fullScreen"):(document.mozCancelFullScreen?(M="moz",N.F=M+"FullScreen"):(M="webkit",N.F=M+"IsFullScreen"),O[M+"RequestFullScreen"]&&(N.sc=M+"RequestFullScreen",N.nb=M+"CancelFullScreen"),N.tb=M+"fullscreenchange");document[N.nb]&&(u.Mb.Pa=N); +u.ba=u.c.extend({g:function(a,c){u.c.call(this,a,c);a.controls()||this.disable();a.Q("play",u.bind(this,function(){var a,c=u.bind(this,this.ha),g=u.bind(this,this.Fa);this.ha();"ontouchstart"in window||(this.a.d("mouseover",c),this.a.d("mouseout",g),this.a.d("pause",u.bind(this,this.nc)),this.a.d("play",u.bind(this,this.Sa)));a=l;this.a.d("touchstart",function(){a=f});this.a.d("touchmove",function(){a=l});this.a.d("touchend",u.bind(this,function(c){var e;a&&(e=this.r().className.search("fade-in"), +-1!==e?this.Fa():this.ha());a=l;this.a.paused()||c.preventDefault()}))}))}});u.ba.prototype.f={wd:"play",children:{playToggle:{},currentTimeDisplay:{},timeDivider:{},durationDisplay:{},remainingTimeDisplay:{},progressControl:{},fullscreenToggle:{},volumeControl:{},muteToggle:{}}};u.ba.prototype.e=function(){return u.e("div",{className:"vjs-control-bar"})};u.ba.prototype.ha=function(){u.c.prototype.ha.call(this);this.a.k("controlsvisible")}; +u.ba.prototype.Fa=function(){u.c.prototype.Fa.call(this);this.a.k("controlshidden")};u.Vb=u.o.extend({g:function(a,c){u.o.call(this,a,c);a.d("play",u.bind(this,this.Ib));a.d("pause",u.bind(this,this.Hb))}});t=u.Vb.prototype;t.na="Play";t.P=function(){return"vjs-play-control "+u.o.prototype.P.call(this)};t.n=function(){this.a.paused()?this.a.play():this.a.pause()};t.Ib=function(){u.w(this.b,"vjs-paused");u.p(this.b,"vjs-playing");this.b.children[0].children[0].innerHTML="Pause"}; +t.Hb=function(){u.w(this.b,"vjs-playing");u.p(this.b,"vjs-paused");this.b.children[0].children[0].innerHTML="Play"};u.Wa=u.c.extend({g:function(a,c){u.c.call(this,a,c);a.d("timeupdate",u.bind(this,this.xa))}}); +u.Wa.prototype.e=function(){var a=u.c.prototype.e.call(this,"div",{className:"vjs-current-time vjs-time-controls vjs-control"});this.content=u.e("div",{className:"vjs-current-time-display",innerHTML:'Current Time 0:00',"aria-live":"off"});a.appendChild(u.e("div").appendChild(this.content));return a}; +u.Wa.prototype.xa=function(){var a=this.a.Lb?this.a.s.currentTime:this.a.currentTime();this.content.innerHTML='Current Time '+u.Ga(a,this.a.duration())};u.Xa=u.c.extend({g:function(a,c){u.c.call(this,a,c);a.d("timeupdate",u.bind(this,this.xa))}}); +u.Xa.prototype.e=function(){var a=u.c.prototype.e.call(this,"div",{className:"vjs-duration vjs-time-controls vjs-control"});this.content=u.e("div",{className:"vjs-duration-display",innerHTML:'Duration Time 0:00',"aria-live":"off"});a.appendChild(u.e("div").appendChild(this.content));return a};u.Xa.prototype.xa=function(){this.a.duration()&&(this.content.innerHTML='Duration Time '+u.Ga(this.a.duration()))}; +u.Zb=u.c.extend({g:function(a,c){u.c.call(this,a,c)}});u.Zb.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-time-divider",innerHTML:"
            /
            "})};u.eb=u.c.extend({g:function(a,c){u.c.call(this,a,c);a.d("timeupdate",u.bind(this,this.xa))}}); +u.eb.prototype.e=function(){var a=u.c.prototype.e.call(this,"div",{className:"vjs-remaining-time vjs-time-controls vjs-control"});this.content=u.e("div",{className:"vjs-remaining-time-display",innerHTML:'Remaining Time -0:00',"aria-live":"off"});a.appendChild(u.e("div").appendChild(this.content));return a}; +u.eb.prototype.xa=function(){this.a.duration()&&this.a.duration()&&(this.content.innerHTML='Remaining Time -'+u.Ga(this.a.duration()-this.a.currentTime()))};u.za=u.o.extend({g:function(a,c){u.o.call(this,a,c)}});u.za.prototype.na="Fullscreen";u.za.prototype.P=function(){return"vjs-fullscreen-control "+u.o.prototype.P.call(this)}; +u.za.prototype.n=function(){this.a.F?(K(this.a),this.b.children[0].children[0].innerHTML="Fullscreen"):(this.a.Pa(),this.b.children[0].children[0].innerHTML="Non-Fullscreen")};u.cb=u.c.extend({g:function(a,c){u.c.call(this,a,c)}});u.cb.prototype.f={children:{seekBar:{}}};u.cb.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-progress-control vjs-control"})};u.Wb=u.J.extend({g:function(a,c){u.J.call(this,a,c);a.d("timeupdate",u.bind(this,this.wa));a.M(u.bind(this,this.wa))}}); +t=u.Wb.prototype;t.f={children:{loadProgressBar:{},playProgressBar:{},seekHandle:{}},barName:"playProgressBar",handleName:"seekHandle"};t.pc="timeupdate";t.e=function(){return u.J.prototype.e.call(this,"div",{className:"vjs-progress-holder","aria-label":"video progress bar"})};t.wa=function(){var a=this.a.Lb?this.a.s.currentTime:this.a.currentTime();this.b.setAttribute("aria-valuenow",u.round(100*this.wb(),2));this.b.setAttribute("aria-valuetext",u.Ga(a,this.a.duration()))}; +t.wb=function(){return this.a.currentTime()/this.a.duration()};t.Ka=function(a){u.J.prototype.Ka.call(this,a);this.a.Lb=f;this.nd=!this.a.paused();this.a.pause()};t.Fb=function(a){a=C(this,a)*this.a.duration();a==this.a.duration()&&(a-=0.1);this.a.currentTime(a)};t.Gb=function(a){u.J.prototype.Gb.call(this,a);this.a.Lb=l;this.nd&&this.a.play()};t.vc=function(){this.a.currentTime(this.a.currentTime()+5)};t.uc=function(){this.a.currentTime(this.a.currentTime()-5)}; +u.$a=u.c.extend({g:function(a,c){u.c.call(this,a,c);a.d("progress",u.bind(this,this.update))}});u.$a.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-load-progress",innerHTML:'Loaded: 0%'})};u.$a.prototype.update=function(){this.b.style&&(this.b.style.width=u.round(100*H(this.a),2)+"%")};u.Ub=u.c.extend({g:function(a,c){u.c.call(this,a,c)}}); +u.Ub.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-play-progress",innerHTML:'Progress: 0%'})};u.fb=u.fa.extend();u.fb.prototype.defaultValue="00:00";u.fb.prototype.e=function(){return u.fa.prototype.e.call(this,"div",{className:"vjs-seek-handle"})};u.ib=u.c.extend({g:function(a,c){u.c.call(this,a,c);a.h&&(a.h.j&&a.h.j.T===l)&&this.p("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.h.j&&a.h.j.T===l?this.p("vjs-hidden"):this.w("vjs-hidden")}))}}); +u.ib.prototype.f={children:{volumeBar:{}}};u.ib.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-volume-control vjs-control"})};u.hb=u.J.extend({g:function(a,c){u.J.call(this,a,c);a.d("volumechange",u.bind(this,this.wa));a.M(u.bind(this,this.wa));setTimeout(u.bind(this,this.update),0)}});t=u.hb.prototype;t.wa=function(){this.b.setAttribute("aria-valuenow",u.round(100*this.a.volume(),2));this.b.setAttribute("aria-valuetext",u.round(100*this.a.volume(),2)+"%")}; +t.f={children:{volumeLevel:{},volumeHandle:{}},barName:"volumeLevel",handleName:"volumeHandle"};t.pc="volumechange";t.e=function(){return u.J.prototype.e.call(this,"div",{className:"vjs-volume-bar","aria-label":"volume level"})};t.Fb=function(a){this.a.volume(C(this,a))};t.wb=function(){return this.a.muted()?0:this.a.volume()};t.vc=function(){this.a.volume(this.a.volume()+0.1)};t.uc=function(){this.a.volume(this.a.volume()-0.1)};u.$b=u.c.extend({g:function(a,c){u.c.call(this,a,c)}}); +u.$b.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-volume-level",innerHTML:''})};u.jb=u.fa.extend();u.jb.prototype.defaultValue="00:00";u.jb.prototype.e=function(){return u.fa.prototype.e.call(this,"div",{className:"vjs-volume-handle"})}; +u.da=u.o.extend({g:function(a,c){u.o.call(this,a,c);a.d("volumechange",u.bind(this,this.update));a.h&&(a.h.j&&a.h.j.T===l)&&this.p("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.h.j&&a.h.j.T===l?this.p("vjs-hidden"):this.w("vjs-hidden")}))}});u.da.prototype.e=function(){return u.o.prototype.e.call(this,"div",{className:"vjs-mute-control vjs-control",innerHTML:'
            Mute
            '})};u.da.prototype.n=function(){this.a.muted(this.a.muted()?l:f)}; +u.da.prototype.update=function(){var a=this.a.volume(),c=3;0===a||this.a.muted()?c=0:0.33>a?c=1:0.67>a&&(c=2);this.a.muted()?"Unmute"!=this.b.children[0].children[0].innerHTML&&(this.b.children[0].children[0].innerHTML="Unmute"):"Mute"!=this.b.children[0].children[0].innerHTML&&(this.b.children[0].children[0].innerHTML="Mute");for(a=0;4>a;a++)u.w(this.b,"vjs-vol-"+a);u.p(this.b,"vjs-vol-"+c)}; +u.Ba=u.ca.extend({g:function(a,c){u.ca.call(this,a,c);a.d("volumechange",u.bind(this,this.update));a.h&&(a.h.j&&a.h.j.T===l)&&this.p("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.h.j&&a.h.j.T===l?this.p("vjs-hidden"):this.w("vjs-hidden")}));this.p("vjs-menu-button")}});u.Ba.prototype.Ea=function(){var a=new u.la(this.a,{Ic:"div"}),c=new u.hb(this.a,u.i.B({md:f},this.f.zd));a.X(c);return a};u.Ba.prototype.n=function(){u.da.prototype.n.call(this);u.ca.prototype.n.call(this)}; +u.Ba.prototype.e=function(){return u.o.prototype.e.call(this,"div",{className:"vjs-volume-menu-button vjs-menu-button vjs-control",innerHTML:'
            Mute
            '})};u.Ba.prototype.update=u.da.prototype.update;u.bb=u.o.extend({g:function(a,c){u.o.call(this,a,c);(!a.poster()||!a.controls())&&this.v();a.d("play",u.bind(this,this.v))}}); +u.bb.prototype.e=function(){var a=u.e("div",{className:"vjs-poster",tabIndex:-1}),c=this.a.poster();c&&("backgroundSize"in a.style?a.style.backgroundImage='url("'+c+'")':a.appendChild(u.e("img",{src:c})));return a};u.bb.prototype.n=function(){this.a.play()}; +u.Tb=u.c.extend({g:function(a,c){u.c.call(this,a,c);a.d("canplay",u.bind(this,this.v));a.d("canplaythrough",u.bind(this,this.v));a.d("playing",u.bind(this,this.v));a.d("seeked",u.bind(this,this.v));a.d("seeking",u.bind(this,this.show));a.d("seeked",u.bind(this,this.v));a.d("error",u.bind(this,this.show));a.d("waiting",u.bind(this,this.show))}});u.Tb.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-loading-spinner"})}; +u.Ua=u.o.extend({g:function(a,c){u.o.call(this,a,c);a.controls()||this.v();a.d("play",u.bind(this,this.v))}});u.Ua.prototype.e=function(){return u.o.prototype.e.call(this,"div",{className:"vjs-big-play-button",innerHTML:"","aria-label":"play video"})};u.Ua.prototype.n=function(){this.a.play()};u.q=u.c.extend({g:function(a,c,d){u.c.call(this,a,c,d)}});u.q.prototype.n=u.Za?m():function(){this.a.controls()&&(this.a.paused()?this.a.play():this.a.pause())};u.q.prototype.j={T:f,hc:l,Kb:l,Nb:l}; +u.media={};u.media.Ta="play pause paused currentTime setCurrentTime duration buffered volume setVolume muted setMuted width height supportsFullScreen enterFullScreen src load currentSrc preload setPreload autoplay setAutoplay loop setLoop error networkState readyState seeking initialTime startOffsetTime played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks defaultPlaybackRate playbackRate mediaGroup controller controls defaultMuted".split(" "); +function da(){var a=u.media.Ta[i];return function(){throw Error('The "'+a+"\" method is not available on the playback technology's API");}}for(var i=u.media.Ta.length-1;0<=i;i--)u.q.prototype[u.media.Ta[i]]=da(); +u.m=u.q.extend({g:function(a,c,d){this.j.T=u.m.Hc();this.j.Sc=!u.Sb;this.j.hc=f;u.q.call(this,a,c,d);(c=c.source)&&this.b.currentSrc==c.src?a.k("loadstart"):c&&(this.b.src=c.src);a.M(function(){this.f.autoplay&&this.paused()&&(this.N.poster=h,this.play())});this.d("click",this.n);for(a=u.m.Ya.length-1;0<=a;a--)u.d(this.b,u.m.Ya[a],u.bind(this.a,this.Nc));this.Ra()}});t=u.m.prototype;t.C=function(){u.q.prototype.C.call(this)}; +t.e=function(){var a=this.a,c=a.N;if(!c||this.j.Sc===l)c?(a.r().removeChild(c),c=c.cloneNode(l)):c=u.e("video",{id:a.id()+"_html5_api",className:"vjs-tech"}),c.player=a,u.xb(c,a.r());for(var d=["autoplay","preload","loop","muted"],e=d.length-1;0<=e;e--){var g=d[e];a.f[g]!==h&&(c[g]=a.f[g])}return c};t.Nc=function(a){this.k(a);a.stopPropagation()};t.play=function(){this.b.play()};t.pause=function(){this.b.pause()};t.paused=function(){return this.b.paused};t.currentTime=function(){return this.b.currentTime}; +t.cd=function(a){try{this.b.currentTime=a}catch(c){u.log(c,"Video is not ready. (Video.js)")}};t.duration=function(){return this.b.duration||0};t.buffered=function(){return this.b.buffered};t.volume=function(){return this.b.volume};t.hd=function(a){this.b.volume=a};t.muted=function(){return this.b.muted};t.fd=function(a){this.b.muted=a};t.width=function(){return this.b.offsetWidth};t.height=function(){return this.b.offsetHeight}; +t.Qa=function(){return"function"==typeof this.b.webkitEnterFullScreen&&(/Android/.test(u.O)||!/Chrome|Mac OS X 10.5/.test(u.O))?f:l};t.src=function(a){this.b.src=a};t.load=function(){this.b.load()};t.currentSrc=function(){return this.b.currentSrc};t.Ma=function(){return this.b.Ma};t.gd=function(a){this.b.Ma=a};t.autoplay=function(){return this.b.autoplay};t.bd=function(a){this.b.autoplay=a};t.loop=function(){return this.b.loop};t.ed=function(a){this.b.loop=a};t.error=function(){return this.b.error}; +u.m.isSupported=function(){return!!document.createElement("video").canPlayType};u.m.mb=function(a){return!!document.createElement("video").canPlayType(a.type)};u.m.Hc=function(){var a=u.gb.volume;u.gb.volume=a/2+0.1;return a!==u.gb.volume};u.m.Ya="loadstart suspend abort error emptied stalled loadedmetadata loadeddata canplay canplaythrough playing waiting seeking seeked ended durationchange timeupdate progress play pause ratechange volumechange".split(" "); +u.Za&&3>u.yc&&(document.createElement("video").constructor.prototype.canPlayType=function(a){return a&&-1!=a.toLowerCase().indexOf("video/mp4")?"maybe":""}); +u.l=u.q.extend({g:function(a,c,d){u.q.call(this,a,c,d);d=c.source;var e=c.parentEl,g=this.b=u.e("div",{id:a.id()+"_temp_flash"}),j=a.id()+"_flash_api";a=a.f;var k=u.i.B({readyFunction:"videojs.Flash.onReady",eventProxyFunction:"videojs.Flash.onEvent",errorEventProxyFunction:"videojs.Flash.onError",autoplay:a.autoplay,preload:a.Ma,loop:a.loop,muted:a.muted},c.flashVars),q=u.i.B({wmode:"opaque",bgcolor:"#000000"},c.params),n=u.i.B({id:j,name:j,"class":"vjs-tech"},c.attributes);d&&(k.src=encodeURIComponent(u.ic(d.src))); +u.xb(g,e);c.startTime&&this.M(function(){this.load();this.play();this.currentTime(c.startTime)});if(c.iFrameMode===f&&!u.zc){var s=u.e("iframe",{id:j+"_iframe",name:j+"_iframe",className:"vjs-tech",scrolling:"no",marginWidth:0,marginHeight:0,frameBorder:0});k.readyFunction="ready";k.eventProxyFunction="events";k.errorEventProxyFunction="errors";u.d(s,"load",u.bind(this,function(){var a,d=s.contentWindow;a=s.contentDocument?s.contentDocument:s.contentWindow.document;a.write(u.l.jc(c.swf,k,q,n));d.player= +this.a;d.ready=u.bind(this.a,function(c){c=a.getElementById(c);var d=this.h;d.b=c;u.d(c,"click",d.bind(d.n));u.l.ob(d)});d.events=u.bind(this.a,function(a,c){this&&"flash"===this.ua&&this.k(c)});d.errors=u.bind(this.a,function(a,c){u.log("Flash Error",c)})}));g.parentNode.replaceChild(s,g)}else u.l.Mc(c.swf,g,k,q,n)}});t=u.l.prototype;t.C=function(){u.q.prototype.C.call(this)};t.play=function(){this.b.vjs_play()};t.pause=function(){this.b.vjs_pause()}; +t.src=function(a){a=u.ic(a);this.b.vjs_src(a);if(this.a.autoplay()){var c=this;setTimeout(function(){c.play()},0)}};t.load=function(){this.b.vjs_load()};t.poster=function(){this.b.vjs_getProperty("poster")};t.buffered=function(){return u.rb(0,this.b.vjs_getProperty("buffered"))};t.Qa=r(l);var P=u.l.prototype,Q="preload currentTime defaultPlaybackRate playbackRate autoplay loop mediaGroup controller controls volume muted defaultMuted".split(" "),R="error currentSrc networkState readyState seeking initialTime duration startOffsetTime paused played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks".split(" "); +function ea(){var a=Q[S],c=a.charAt(0).toUpperCase()+a.slice(1);P["set"+c]=function(c){return this.b.vjs_setProperty(a,c)}}function T(a){P[a]=function(){return this.b.vjs_getProperty(a)}}var S;for(S=0;S'});e=u.i.B({data:a,width:"100%",height:"100%"},e);u.i.qa(e,function(a,c){k+=a+'="'+c+'" '});return'"+j+""}; +u.Dc=u.c.extend({g:function(a,c,d){u.c.call(this,a,c,d);if(!a.f.sources||0===a.f.sources.length){c=0;for(d=a.f.techOrder;c");this.ga.push(c)}this.ja=2;this.k("loaded")}; +function X(a){var c=a.split(":");a=0;var d,e,g;3==c.length?(d=c[0],e=c[1],c=c[2]):(d=0,e=c[0],c=c[1]);c=c.split(/\s+/);c=c.splice(0,1)[0];c=c.split(/\.|,/);g=parseFloat(c[1]);c=c[0];a+=3600*parseFloat(d);a+=60*parseFloat(e);a+=parseFloat(c);g&&(a+=g/1E3);return a} +t.update=function(){if(0=this.Ha||this.Ha===b?s=this.ub!==b?this.ub:0:(g=f,s=this.Bb!==b?this.Bb:c.length-1);for(;;){n=c[s];if(n.ra<=a)e=Math.max(e,n.ra),n.Ca&&(n.Ca=l);else if(a'+a[d].text+"";this.b.innerHTML=c;this.k("cuechange")}}};t.reset=function(){this.Ha=0;this.Jb=this.a.duration();this.Bb=this.ub=0};u.Pb=u.U.extend();u.Pb.prototype.A="captions";u.Xb=u.U.extend();u.Xb.prototype.A="subtitles";u.Rb=u.U.extend();u.Rb.prototype.A="chapters"; +u.Yb=u.c.extend({g:function(a,c,d){u.c.call(this,a,c,d);if(a.f.tracks&&0=this.G.length&&this.v()}}); +u.V.prototype.qb=function(){var a=[],c;a.push(new u.ab(this.a,{kind:this.A}));for(var d=0;de.readyState()){this.sd=e;e.d("loaded",u.bind(this,this.Ea));return}g=e;break}a=this.sa=new u.la(this.a);a.b.appendChild(u.e("li",{className:"vjs-menu-title",innerHTML:u.Y(this.A),jd:-1}));if(g){e=g.ga;for(var k,c=0,d=e.length;caddSelect("role", + array(UniteBaseAdminClassRev::ROLE_ADMIN => __("To Admin",REVSLIDER_TEXTDOMAIN), + UniteBaseAdminClassRev::ROLE_EDITOR =>__("To Editor, Admin",REVSLIDER_TEXTDOMAIN), + UniteBaseAdminClassRev::ROLE_AUTHOR =>__("Author, Editor, Admin",REVSLIDER_TEXTDOMAIN)), + __("View Plugin Permission",REVSLIDER_TEXTDOMAIN), + UniteBaseAdminClassRev::ROLE_ADMIN, + array("description"=>__("The role of user that can view and edit the plugin",REVSLIDER_TEXTDOMAIN))); + + $generalSettings->addRadio("includes_globally", + array("on"=>__("On",REVSLIDER_TEXTDOMAIN),"off"=>__("Off",REVSLIDER_TEXTDOMAIN)), + __("Include RevSlider libraries globally",REVSLIDER_TEXTDOMAIN), + "on", + array("description"=>__("Add css and js includes only on all pages. Id turned to off they will added to pages where the rev_slider shortcode exists only. This will work only when the slider added by a shortcode.",REVSLIDER_TEXTDOMAIN))); + + $generalSettings->addTextBox("pages_for_includes", "",__("Pages to include RevSlider libraries",REVSLIDER_TEXTDOMAIN), + array("description"=>__("Specify the page id's that the front end includes will be included in. Example: 2,3,5 also: homepage,3,4",REVSLIDER_TEXTDOMAIN))); + + $generalSettings->addRadio("js_to_footer", + array("on"=>__("On",REVSLIDER_TEXTDOMAIN),"off"=>__("Off",REVSLIDER_TEXTDOMAIN)), + __("Put JS Includes To Footer",REVSLIDER_TEXTDOMAIN), + "off", + array("description"=>__("Putting the js to footer (instead of the head) is good for fixing some javascript conflicts.",REVSLIDER_TEXTDOMAIN))); + + //transition + /*$operations = new RevOperations(); + $arrTransitions = $operations->getArrTransition(); + $arrPremiumTransitions = $operations->getArrTransition(true); + + $arrTransitions = array_merge($arrTransitions, $arrPremiumTransitions); + $params = array("description"=>"
            ".__("The default appearance transitions of slides.",REVSLIDER_TEXTDOMAIN),"minwidth"=>"450px"); + $generalSettings->addRadio("slide_transition_default",$arrTransitions,__("Default Transition",REVSLIDER_TEXTDOMAIN),"random",$params); + */ + //-------------------------- + + //get stored values + $operations = new RevOperations(); + $arrValues = $operations->getGeneralSettingsValues(); + $generalSettings->setStoredValues($arrValues); + + self::storeSettings("general", $generalSettings); + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/settings/index.php b/src/wp-content/plugins/revslider/settings/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/settings/layer_settings.php b/src/wp-content/plugins/revslider/settings/layer_settings.php new file mode 100644 index 0000000..60944e6 --- /dev/null +++ b/src/wp-content/plugins/revslider/settings/layer_settings.php @@ -0,0 +1,108 @@ +getCaptionsContent(); + $arrAnimations = $operations->getArrAnimations(); + $arrEndAnimations = $operations->getArrEndAnimations(); + + $htmlButtonDown = '
            '; + $buttonEditStyles = UniteFunctionsRev::getHtmlLink("javascript:void(0)", "Edit Style","button_edit_css","button-primary revblue"); + $buttonEditStylesGlobal = UniteFunctionsRev::getHtmlLink("javascript:void(0)", "Edit Global Style","button_edit_css_global","button-primary revblue"); + + $arrEasing = $operations->getArrEasing(); + $arrEndEasing = $operations->getArrEndEasing(); + + $captionsAddonHtml = $htmlButtonDown.$buttonEditStyles.$buttonEditStylesGlobal; + + //set Layer settings + $layerSettings = new UniteSettingsAdvancedRev(); + $layerSettings->addSection(__("Layer Params",REVSLIDER_TEXTDOMAIN),__("layer_params",REVSLIDER_TEXTDOMAIN)); + $layerSettings->addSap(__("Layer Params",REVSLIDER_TEXTDOMAIN),__("layer_params", REVSLIDER_TEXTDOMAIN)); + $layerSettings->addTextBox(__("layer_caption", REVSLIDER_TEXTDOMAIN), __("caption_green",REVSLIDER_TEXTDOMAIN), __("Style",REVSLIDER_TEXTDOMAIN),array(UniteSettingsRev::PARAM_ADDTEXT=>$captionsAddonHtml,"class"=>"textbox-caption")); + + $addHtmlTextarea = ''; + if($sliderTemplate == "true"){ + $addHtmlTextarea .= UniteFunctionsRev::getHtmlLink("javascript:void(0)", "insert post template","linkInsertTemplate","disabled"); + } + $addHtmlTextarea .= UniteFunctionsRev::getHtmlLink("javascript:void(0)", "insert button","linkInsertButton","disabled"); + + $layerSettings->addTextArea("layer_text", "",__("Text / Html",REVSLIDER_TEXTDOMAIN),array("class"=>"area-layer-params",UniteSettingsRev::PARAM_ADDTEXT_BEFORE_ELEMENT=>$addHtmlTextarea)); + $layerSettings->addTextBox("layer_image_link", "",__("Image Link",REVSLIDER_TEXTDOMAIN),array("class"=>"text-sidebar-link","hidden"=>true)); + $layerSettings->addSelect("layer_link_open_in",array("same"=>__("Same Window",REVSLIDER_TEXTDOMAIN),"new"=>__("New Window",REVSLIDER_TEXTDOMAIN)),__("Link Open In",REVSLIDER_TEXTDOMAIN),"same",array("hidden"=>true)); + + $layerSettings->addSelect("layer_animation",$arrAnimations,__("Start Animation",REVSLIDER_TEXTDOMAIN),"fade"); + $layerSettings->addSelect("layer_easing", $arrEasing, __("Start Easing",REVSLIDER_TEXTDOMAIN),"Power3.easeInOut"); + $params = array("unit"=>__("ms",REVSLIDER_TEXTDOMAIN)); + $layerSettings->addTextBox("layer_speed", "","Start Speed",$params); + $layerSettings->addCheckbox("layer_hidden", false,__("Hide Under Width",REVSLIDER_TEXTDOMAIN)); + + $params = array("hidden"=>true); + $layerSettings->addTextBox("layer_link_id", "",__("Link ID",REVSLIDER_TEXTDOMAIN),$params); + $layerSettings->addTextBox("layer_link_class", "",__("Link Classes",REVSLIDER_TEXTDOMAIN),$params); + $layerSettings->addTextBox("layer_link_title", "",__("Link Title",REVSLIDER_TEXTDOMAIN),$params); + $layerSettings->addTextBox("layer_link_rel", "",__("Link Rel",REVSLIDER_TEXTDOMAIN),$params); + + //scale for img + $textScaleX = __("Width",REVSLIDER_TEXTDOMAIN); + $textScaleProportionalX = __("Width/Height",REVSLIDER_TEXTDOMAIN); + $params = array("attrib_text"=>"data-textproportional='".$textScaleProportionalX."' data-textnormal='".$textScaleX."'", "hidden"=>false); + $layerSettings->addTextBox("layer_scaleX", "",__("Width",REVSLIDER_TEXTDOMAIN),$params); + $layerSettings->addTextBox("layer_scaleY", "",__("Height",REVSLIDER_TEXTDOMAIN),array("hidden"=>false)); + $layerSettings->addCheckbox("layer_proportional_scale", false,__("Scale Proportional",REVSLIDER_TEXTDOMAIN),array("hidden"=>false)); + + //put left top + $textOffsetX = __("OffsetX",REVSLIDER_TEXTDOMAIN); + $textX = __("X",REVSLIDER_TEXTDOMAIN); + $params = array("attrib_text"=>"data-textoffset='".$textOffsetX."' data-textnormal='".$textX."'"); + $layerSettings->addTextBox("layer_left", "",__("X",REVSLIDER_TEXTDOMAIN),$params); + + $textOffsetY = __("OffsetY",REVSLIDER_TEXTDOMAIN); + $textY = __("Y",REVSLIDER_TEXTDOMAIN); + $params = array("attrib_text"=>"data-textoffset='".$textOffsetY."' data-textnormal='".$textY."'"); + $layerSettings->addTextBox("layer_top", "",__("Y",REVSLIDER_TEXTDOMAIN),$params); + + $layerSettings->addTextBox("layer_align_hor", "left","Hor Align",array("hidden"=>true)); + $layerSettings->addTextBox("layer_align_vert", "top","Vert Align",array("hidden"=>true)); + + $layerSettings->addSelect("layer_slide_link", $arrSlideLinkLayers, __("Link To Slide",REVSLIDER_TEXTDOMAIN),"nothing"); + + $params = array("unit"=>__("px",REVSLIDER_TEXTDOMAIN),"hidden"=>true); + $layerSettings->addTextBox("layer_scrolloffset", "0",__("Scroll Under Slider Offset",REVSLIDER_TEXTDOMAIN),$params); + + $layerSettings->addButton("button_change_image_source", __("Change Image Source",REVSLIDER_TEXTDOMAIN),array("hidden"=>true,"class"=>"button-primary revblue")); + $layerSettings->addTextBox("layer_alt", "","Alt Text",array("hidden"=>true, "class"=>"area-alt-params")); + $layerSettings->addButton("button_edit_video", __("Edit Video",REVSLIDER_TEXTDOMAIN),array("hidden"=>true,"class"=>"button-primary revblue")); + + + + $params = array("unit"=>__("ms",REVSLIDER_TEXTDOMAIN)); + $layerSettings->addTextBox("layer_endtime", "",__("End Time",REVSLIDER_TEXTDOMAIN),$params); + $layerSettings->addTextBox("layer_endspeed", "",__("End Speed",REVSLIDER_TEXTDOMAIN),$params); + $layerSettings->addSelect("layer_endanimation",$arrEndAnimations,__("End Animation",REVSLIDER_TEXTDOMAIN),"auto"); + $layerSettings->addSelect("layer_endeasing", $arrEndEasing, __("End Easing",REVSLIDER_TEXTDOMAIN),"nothing"); + $params = array("unit"=>__("ms",REVSLIDER_TEXTDOMAIN)); + + //advanced params + $arrCorners = array("nothing"=>__("No Corner",REVSLIDER_TEXTDOMAIN), + "curved"=>__("Sharp",REVSLIDER_TEXTDOMAIN), + "reverced"=>__("Sharp Reversed",REVSLIDER_TEXTDOMAIN)); + $params = array(); + $layerSettings->addSelect("layer_cornerleft", $arrCorners, __("Left Corner",REVSLIDER_TEXTDOMAIN),"nothing",$params); + $layerSettings->addSelect("layer_cornerright", $arrCorners, __("Right Corner",REVSLIDER_TEXTDOMAIN),"nothing",$params); + $layerSettings->addCheckbox("layer_resizeme", true,__("Responsive Through All Levels",REVSLIDER_TEXTDOMAIN),$params); + + $params = array(); + $layerSettings->addTextBox("layer_id", "",__("ID",REVSLIDER_TEXTDOMAIN),$params); + $layerSettings->addTextBox("layer_classes", "",__("Classes",REVSLIDER_TEXTDOMAIN),$params); + $layerSettings->addTextBox("layer_title", "",__("Title",REVSLIDER_TEXTDOMAIN),$params); + $layerSettings->addTextBox("layer_rel", "",__("Rel",REVSLIDER_TEXTDOMAIN),$params); + + + self::storeSettings("layer_settings",$layerSettings); + + //store settings of content css for editing on the client. + self::storeSettings("css_captions_content",$contentCSS); + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/settings/slide_settings.php b/src/wp-content/plugins/revslider/settings/slide_settings.php new file mode 100644 index 0000000..7df70f6 --- /dev/null +++ b/src/wp-content/plugins/revslider/settings/slide_settings.php @@ -0,0 +1,132 @@ +getArrTransition(); + $arrPremiumTransitions = $operations->getArrTransition(true); + $defaultTransition = $operations->getDefaultTransition(); + + $arrSlideNames = array(); + if(isset($slider) && $slider->isInited()) + $arrSlideNames = $slider->getArrSlideNames(); + + $slideSettings = new UniteSettingsAdvancedRev(); + + //title + $params = array("description"=>__("The title of the slide, will be shown in the slides list.",REVSLIDER_TEXTDOMAIN),"class"=>"medium"); + $slideSettings->addTextBox("title",__("Slide",REVSLIDER_TEXTDOMAIN),__("Slide Title",REVSLIDER_TEXTDOMAIN), $params); + + //state + $params = array("description"=>__("The state of the slide. The unpublished slide will be excluded from the slider.",REVSLIDER_TEXTDOMAIN)); + $slideSettings->addSelect("state",array("published"=>__("Published",REVSLIDER_TEXTDOMAIN),"unpublished"=>__("Unpublished",REVSLIDER_TEXTDOMAIN)),__("State",REVSLIDER_TEXTDOMAIN),"published",$params); + + if(isset($slider) && $slider->isInited()){ + $isWpmlExists = UniteWpmlRev::isWpmlExists(); + $useWpml = $slider->getParam("use_wpml","off"); + + if($isWpmlExists && $useWpml == "on"){ + $arrLangs = UniteWpmlRev::getArrLanguages(); + $params = array("description"=>__("The language of the slide (uses WPML plugin).",REVSLIDER_TEXTDOMAIN)); + $slideSettings->addSelect("lang",$arrLangs,__("Language",REVSLIDER_TEXTDOMAIN),"all",$params); + } + } + + $params = array("description"=>__("If set, slide will be visible after the date is reached",REVSLIDER_TEXTDOMAIN)); + $slideSettings->addDatePicker("date_from","",__("Visible from",REVSLIDER_TEXTDOMAIN), $params); + + $params = array("description"=>__("If set, slide will be visible till the date is reached",REVSLIDER_TEXTDOMAIN)); + $slideSettings->addDatePicker("date_to","",__("Visible until",REVSLIDER_TEXTDOMAIN), $params); + + $slideSettings->addHr(""); + + //transition + $params = array("description"=>__("The appearance transitions of this slide.",REVSLIDER_TEXTDOMAIN),"minwidth"=>"250px"); + $slideSettings->addChecklist("slide_transition",$arrTransitions,__("Transitions",REVSLIDER_TEXTDOMAIN),$defaultTransition,$params); + + //slot amount + $params = array("description"=>__("The number of slots or boxes the slide is divided into. If you use boxfade, over 7 slots can be juggy.",REVSLIDER_TEXTDOMAIN) + ,"class"=>"small","datatype"=>"number" + ); + $slideSettings->addTextBox("slot_amount","7",__("Slot Amount",REVSLIDER_TEXTDOMAIN), $params); + + //rotation: + $params = array("description"=>__("Rotation (-720 -> 720, 999 = random) Only for Simple Transitions.",REVSLIDER_TEXTDOMAIN) + ,"class"=>"small","datatype"=>"number" + ); + $slideSettings->addTextBox("transition_rotation","0",__("Rotation",REVSLIDER_TEXTDOMAIN), $params); + + //transition speed + $params = array("description"=>__("The duration of the transition (Default:300, min: 100 max 2000). ",REVSLIDER_TEXTDOMAIN) + ,"class"=>"small","datatype"=>"number" + ); + $slideSettings->addTextBox("transition_duration","300",__("Transition Duration",REVSLIDER_TEXTDOMAIN), $params); + + if(!isset($sliderDelay)) + $sliderDelay = 0; + + //delay + $params = array("description"=>__("A new delay value for the Slide. If no delay defined per slide, the delay defined via Options (",REVSLIDER_TEXTDOMAIN). $sliderDelay .__("ms) will be used",REVSLIDER_TEXTDOMAIN) + ,"class"=>"small","datatype"=>UniteSettingsRev::DATATYPE_NUMBEROREMTY + ); + $slideSettings->addTextBox("delay","",__("Delay",REVSLIDER_TEXTDOMAIN), $params); + + //----------------------- + + //enable link + $slideSettings->addSelect_boolean("enable_link", __("Enable Link",REVSLIDER_TEXTDOMAIN), false, __("Enable",REVSLIDER_TEXTDOMAIN),__("Disable",REVSLIDER_TEXTDOMAIN)); + + $slideSettings->startBulkControl("enable_link", UniteSettingsRev::CONTROL_TYPE_SHOW, "true"); + + //link type + $slideSettings->addRadio("link_type", array("regular"=>__("Regular",REVSLIDER_TEXTDOMAIN),"slide"=>__("To Slide",REVSLIDER_TEXTDOMAIN)), __("Link Type",REVSLIDER_TEXTDOMAIN),"regular"); + + //link + $params = array("description"=>__("A link on the whole slide pic (use %link% or %meta:somemegatag% in template sliders to link to a post or some other meta)",REVSLIDER_TEXTDOMAIN)); + $slideSettings->addTextBox("link","",__("Slide Link",REVSLIDER_TEXTDOMAIN), $params); + + //link target + $params = array("description"=>__("The target of the slide link",REVSLIDER_TEXTDOMAIN)); + $slideSettings->addSelect("link_open_in",array("same"=>__("Same Window",REVSLIDER_TEXTDOMAIN),"new"=>__("New Window")),__("Link Open In",REVSLIDER_TEXTDOMAIN),"same",$params); + + //num_slide_link + $arrSlideLink = array(); + $arrSlideLink["nothing"] = __("-- Not Chosen --",REVSLIDER_TEXTDOMAIN); + $arrSlideLink["next"] = __("-- Next Slide --",REVSLIDER_TEXTDOMAIN); + $arrSlideLink["prev"] = __("-- Previous Slide --",REVSLIDER_TEXTDOMAIN); + + $arrSlideLinkLayers = $arrSlideLink; + $arrSlideLinkLayers["scroll_under"] = __("-- Scroll Below Slider --",REVSLIDER_TEXTDOMAIN); + + foreach($arrSlideNames as $slideNameID=>$arr){ + $slideName = $arr["title"]; + $arrSlideLink[$slideNameID] = $slideName; + $arrSlideLinkLayers[$slideNameID] = $slideName; + } + + $slideSettings->addSelect("slide_link", $arrSlideLink, "Link To Slide","nothing"); + + $params = array("description"=>"The position of the link related to layers"); + $slideSettings->addRadio("link_pos", array("front"=>"Front","back"=>"Back"), "Link Position","front",$params); + + $slideSettings->addHr("link_sap"); + + $slideSettings->endBulkControl(); + + $slideSettings->addControl("link_type", "slide_link", UniteSettingsRev::CONTROL_TYPE_ENABLE, "slide"); + $slideSettings->addControl("link_type", "link", UniteSettingsRev::CONTROL_TYPE_DISABLE, "slide"); + $slideSettings->addControl("link_type", "link_open_in", UniteSettingsRev::CONTROL_TYPE_DISABLE, "slide"); + + //----------------------- + + $params = array("description"=>__("Slide Thumbnail. If not set - it will be taken from the slide image.",REVSLIDER_TEXTDOMAIN)); + $slideSettings->addImage("slide_thumb", "",__("Thumbnail",REVSLIDER_TEXTDOMAIN) , $params); + + //$params = array("description"=>__("Apply to full width mode only. Centering vertically slide images.",REVSLIDER_TEXTDOMAIN)); + //$slideSettings->addCheckbox("fullwidth_centering", false, __("Full Width Centering",REVSLIDER_TEXTDOMAIN), $params); + + + //add background type (hidden) + $slideSettings->addTextBox("background_type","image",__("Background Type",REVSLIDER_TEXTDOMAIN), array("hidden"=>true)); + //store settings + self::storeSettings("slide_settings",$slideSettings); + +?> diff --git a/src/wp-content/plugins/revslider/settings/slider_settings.php b/src/wp-content/plugins/revslider/settings/slider_settings.php new file mode 100644 index 0000000..2ebd54f --- /dev/null +++ b/src/wp-content/plugins/revslider/settings/slider_settings.php @@ -0,0 +1,124 @@ + addTextBox("title", "",__("Slider Title",REVSLIDER_TEXTDOMAIN),array("description"=>__("The title of the slider. Example: Slider1",REVSLIDER_TEXTDOMAIN),"required"=>"true")); + $sliderMainSettings->addTextBox("alias", "",__("Slider Alias",REVSLIDER_TEXTDOMAIN),array("description"=>__("The alias that will be used for embedding the slider. Example: slider1",REVSLIDER_TEXTDOMAIN),"required"=>"true")); + $sliderMainSettings->addTextBox("shortcode", "",__("Slider Shortcode",REVSLIDER_TEXTDOMAIN), array("readonly"=>true,"class"=>"code")); + $sliderMainSettings->addHr(); + + //source type + $arrSourceTypes = array("posts"=>__("Posts",REVSLIDER_TEXTDOMAIN), + "specific_posts"=>__("Specific Posts",REVSLIDER_TEXTDOMAIN), + "gallery"=>__("Gallery",REVSLIDER_TEXTDOMAIN)); + + $sliderMainSettings->addRadio("source_type",$arrSourceTypes,__("Source Type",REVSLIDER_TEXTDOMAIN), "gallery"); + + $sliderMainSettings->startBulkControl("source_type", UniteSettingsRev::CONTROL_TYPE_SHOW, "posts"); + + //post types + $arrPostTypes = UniteFunctionsWPRev::getPostTypesAssoc(array("post")); + $arrParams = array("args"=>"multiple size='5'"); + $sliderMainSettings->addSelect("post_types", $arrPostTypes, __("Post Types",REVSLIDER_TEXTDOMAIN),"post",$arrParams); + + //post categories + $arrParams = array("args"=>"multiple size='7'"); + $sliderMainSettings->addSelect("post_category", array(), __("Post Categories",REVSLIDER_TEXTDOMAIN),"",$arrParams); + + //sort by + $arrSortBy = UniteFunctionsWPRev::getArrSortBy(); + + //events integration + if(UniteEmRev::isEventsExists()){ + $arrEventsFilter = UniteEmRev::getArrFilterTypes(); + $sliderMainSettings->addHr(); + $sliderMainSettings->addSelect("events_filter", $arrEventsFilter, __("Filter Events By",REVSLIDER_TEXTDOMAIN),UniteEmRev::DEFAULT_FILTER); + $sliderMainSettings->addHr(); + + //add values to sortby array + $arrEMSortBy = UniteEmRev::getArrSortBy(); + $arrSortBy = $arrSortBy+$arrEMSortBy; + } + + $sliderMainSettings->addSelect("post_sortby", $arrSortBy, __("Sort Posts By",REVSLIDER_TEXTDOMAIN),RevSlider::DEFAULT_POST_SORTBY); + + //sort direction + $arrSortDir = UniteFunctionsWPRev::getArrSortDirection(); + $sliderMainSettings->addRadio("posts_sort_direction", $arrSortDir, __("Sort Direction",REVSLIDER_TEXTDOMAIN), RevSlider::DEFAULT_POST_SORTDIR); + + //max posts for slider + $arrParams = array("class"=>"small","unit"=>"posts"); + $sliderMainSettings->addTextBox("max_slider_posts", "30", __("Max Posts Per Slider",REVSLIDER_TEXTDOMAIN), $arrParams); + + //exerpt limit + $arrParams = array("class"=>"small","unit"=>"words"); + $sliderMainSettings->addTextBox("excerpt_limit", "55", __("Limit The Excerpt To",REVSLIDER_TEXTDOMAIN), $arrParams); + + //slider template + $sliderMainSettings->addhr(); + + $slider1 = new RevSlider(); + $arrSlidersTemplates = $slider1->getArrSlidersShort(null,RevSlider::SLIDER_TYPE_TEMPLATE); + $sliderMainSettings->addSelect("slider_template_id", $arrSlidersTemplates, __("Template Slider",REVSLIDER_TEXTDOMAIN),"",array()); + + $sliderMainSettings->endBulkControl(); + + $arrParams = array("description"=>__("Type here the post IDs you want to use separated by coma. ex: 23,24,25",REVSLIDER_TEXTDOMAIN)); + $sliderMainSettings->addTextBox("posts_list","",__("Specific Posts List",REVSLIDER_TEXTDOMAIN),$arrParams); + $sliderMainSettings->addControl("source_type", "posts_list", UniteSettingsRev::CONTROL_TYPE_SHOW, "specific_posts"); + + $sliderMainSettings->addHr(); + + //set slider type / texts + $sliderMainSettings->addRadio("slider_type", array("fixed"=>__("Fixed",REVSLIDER_TEXTDOMAIN), + "responsitive"=>__("Custom",REVSLIDER_TEXTDOMAIN), + "fullwidth"=>__("Auto Responsive",REVSLIDER_TEXTDOMAIN), + "fullscreen"=>__("Full Screen",REVSLIDER_TEXTDOMAIN) + ),__("Slider Layout",REVSLIDER_TEXTDOMAIN), + "fullwidth"); + + $arrParams = array("class"=>"medium","description"=>__("Example: #header or .header, .footer, #somecontainer | The height of fullscreen slider will be decreased with the height of these Containers to fit perfect in the screen",REVSLIDER_TEXTDOMAIN)); + $sliderMainSettings->addTextBox("fullscreen_offset_container", "",__("Offset Containers",REVSLIDER_TEXTDOMAIN), $arrParams); + + $sliderMainSettings->addControl("slider_type", "fullscreen_offset_container", UniteSettingsRev::CONTROL_TYPE_SHOW, "fullscreen"); + + $arrParams = array("description"=>__("",REVSLIDER_TEXTDOMAIN)); + $sliderMainSettings->addTextBox("fullscreen_min_height", "",__("Min. Fullscreen Height",REVSLIDER_TEXTDOMAIN), $arrParams); + + $sliderMainSettings->addControl("slider_type", "fullscreen_min_height", UniteSettingsRev::CONTROL_TYPE_SHOW, "fullscreen"); + + $sliderMainSettings->addRadio("full_screen_align_force", array("on"=>__("On",REVSLIDER_TEXTDOMAIN), "off"=>__("Off",REVSLIDER_TEXTDOMAIN)),__("FullScreen Align",REVSLIDER_TEXTDOMAIN),"off"); + + + + $sliderMainSettings->addRadio("auto_height", array("on"=>__("On",REVSLIDER_TEXTDOMAIN), "off"=>__("Off",REVSLIDER_TEXTDOMAIN)),__("Unlimited Height",REVSLIDER_TEXTDOMAIN),"off"); + $sliderMainSettings->addRadio("force_full_width", array("on"=>__("On",REVSLIDER_TEXTDOMAIN), "off"=>__("Off",REVSLIDER_TEXTDOMAIN)),__("Force Full Width",REVSLIDER_TEXTDOMAIN),"off"); + + $paramsSize = array("width"=>960,"height"=>350,"datatype"=>UniteSettingsRev::DATATYPE_NUMBER); + $sliderMainSettings->addCustom("slider_size", "slider_size","",__("Grid Settings",REVSLIDER_TEXTDOMAIN),$paramsSize); + + $paramsResponsitive = array("w1"=>940,"sw1"=>770,"w2"=>780,"sw2"=>500,"w3"=>510,"sw3"=>310,"datatype"=>UniteSettingsRev::DATATYPE_NUMBER); + $sliderMainSettings->addCustom("responsitive_settings", "responsitive","",__("Responsive Sizes",REVSLIDER_TEXTDOMAIN),$paramsResponsitive); + + $sliderMainSettings->addHr(); + + self::storeSettings("slider_main",$sliderMainSettings); + + //set "slider_params" settings. + $sliderParamsSettings = new UniteSettingsAdvancedRev(); + $sliderParamsSettings->loadXMLFile(self::$path_settings."/slider_settings.xml"); + + //update transition type setting. + $settingFirstType = $sliderParamsSettings->getSettingByName("first_transition_type"); + $operations = new RevOperations(); + $arrTransitions = $operations->getArrTransition(); + if(count($arrTransitions) == 0) $arrTransitions = $operations->getArrTransition(true); //get premium transitions + $settingFirstType["items"] = $arrTransitions; + $sliderParamsSettings->updateArrSettingByName("first_transition_type", $settingFirstType); + + //store params + self::storeSettings("slider_params",$sliderParamsSettings); + + ?> + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/settings/slider_settings.xml b/src/wp-content/plugins/revslider/settings/slider_settings.xml new file mode 100644 index 0000000..24105d0 --- /dev/null +++ b/src/wp-content/plugins/revslider/settings/slider_settings.xml @@ -0,0 +1 @@ +
            \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/settings/slider_settings_xml_lang.php b/src/wp-content/plugins/revslider/settings/slider_settings_xml_lang.php new file mode 100644 index 0000000..d4f4401 --- /dev/null +++ b/src/wp-content/plugins/revslider/settings/slider_settings_xml_lang.php @@ -0,0 +1,147 @@ + this tutorial ","revslider"); +_e("Stop Slider","revslider"); +_e("On / Off to stop slider after some amount of loops / slides","revslider"); +_e("Stop After Loops","revslider"); +_e("Stop the slider after certain amount of loops. 0 related to the first loop.","revslider"); +_e("Stop At Slide","revslider"); +_e("Stop the slider at the given slide","revslider"); +_e("Position on the page","revslider"); +_e("The position of the slider on the page, (float:left, float:right, margin:0px auto;)","revslider"); +_e("Left","revslider"); +_e("Center","revslider"); +_e("Right","revslider"); +_e("Margin Top","revslider"); +_e("The top margin of the slider wrapper div","revslider"); +_e("px","revslider"); +_e("Margin Bottom","revslider"); +_e("The bottom margin of the slider wrapper div","revslider"); +_e("Margin Left","revslider"); +_e("The left margin of the slider wrapper div","revslider"); +_e("Margin Right","revslider"); +_e("The right margin of the slider wrapper div","revslider"); +_e("Shadow Type","revslider"); +_e("The Shadow display underneath the banner. The shadow apply to fixed and responsive modes only, the full width slider don't have a shadow.","revslider"); +_e("No Shadow","revslider"); +_e("1","revslider"); +_e("2","revslider"); +_e("3","revslider"); +_e("Show Timer Line","revslider"); +_e("Show the top running timer line","revslider"); +_e("Top","revslider"); +_e("Bottom","revslider"); +_e("Hide","revslider"); +_e("Background color","revslider"); +_e("Slider wrapper div background color, for transparent slider, leave empty.","revslider"); +_e("Padding (border)","revslider"); +_e("The wrapper div padding, if it has value, then together with background color it it will make border around the slider.","revslider"); +_e("Show Background Image","revslider"); +_e("yes / no to put background image to the main slider wrapper.","revslider"); +_e("Background Image Url","revslider"); +_e("The background image that will be on the slider wrapper. Will be shown at slider preloading.","revslider"); +_e("Touch Enabled","revslider"); +_e("Enable Swipe Function on touch devices","revslider"); +_e("Stop On Hover","revslider"); +_e("Stop the Timer when hovering the slider","revslider"); +_e("Navigation Type","revslider"); +_e("Display type of the navigation bar (Default:none","revslider"); +_e("None","revslider"); +_e("Bullet","revslider"); +_e("Thumb","revslider"); +_e("Both","revslider"); +_e("Navigation Arrows","revslider"); +_e("Display position of the Navigation Arrows (** By navigation Type Thumb arrows always centered or none visible)","revslider"); +_e("With Bullets","revslider"); +_e("Solo","revslider"); +_e("Navigation Style","revslider"); +_e("Look of the navigation bullets ** If you choose navbar, we recommend to choose Navigation Arrows to nexttobullets","revslider"); +_e("Round","revslider"); +_e("Navbar","revslider"); +_e("Old Round","revslider"); +_e("Old Square","revslider"); +_e("Old Navbar","revslider"); +_e("Always Show Navigation","revslider"); +_e("Always show the navigation and the thumbnails.","revslider"); +_e("Hide Navitagion After","revslider"); +_e("Time after that the Navigation and the Thumbs will be hidden(Default: 200 ms)","revslider"); +_e("ms","revslider"); +_e("Navigation Horizontal Align","revslider"); +_e("Horizontal Align of Bullets / Thumbnails","revslider"); +_e("Navigation Vertical Align","revslider"); +_e("Vertical Align of Bullets / Thumbnails","revslider"); +_e("Navigation Horizontal Offset","revslider"); +_e("Offset from current Horizontal position of Bullets / Thumbnails negative and positive direction","revslider"); +_e("Navigation Vertical Offset","revslider"); +_e("Offset from current Vertical position of Bullets / Thumbnails negative and positive direction","revslider"); +_e("Left Arrow Horizontal Align","revslider"); +_e("Horizontal Align of left Arrow (only if arrow is not next to bullets)","revslider"); +_e("Left Arrow Vertical Align","revslider"); +_e("Vertical Align of left Arrow (only if arrow is not next to bullets)","revslider"); +_e("Left Arrow Horizontal Offset","revslider"); +_e("Offset from current Horizontal position of of left Arrow negative and positive direction","revslider"); +_e("Left Arrow Vertical Offset","revslider"); +_e("Offset from current Vertical position of of left Arrow negative and positive direction","revslider"); +_e("Right Arrow Horizontal Align","revslider"); +_e("Horizontal Align of right Arrow (only if arrow is not next to bullets)","revslider"); +_e("Right Arrow Vertical Align","revslider"); +_e("Vertical Align of right Arrow (only if arrow is not next to bullets)","revslider"); +_e("Right Arrow Horizontal Offset","revslider"); +_e("Offset from current Horizontal position of of right Arrow negative and positive direction","revslider"); +_e("Right Arrow Vertical Offset","revslider"); +_e("Offset from current Vertical position of of right Arrow negative and positive direction","revslider"); +_e("Thumb Width","revslider"); +_e("The basic Width of one Thumbnail (only if thumb is selected)","revslider"); +_e("Thumb Height","revslider"); +_e("the basic Height of one Thumbnail (only if thumb is selected)","revslider"); +_e("Thumb Amount","revslider"); +_e("the amount of the Thumbs visible same time (only if thumb is selected)","revslider"); +_e("Hide Slider Under Width","revslider"); +_e("Hide the slider under some slider width. Works only in Responsive Style. Not available for Fullwidth.","revslider"); +_e("Hide Defined Layers Under Width","revslider"); +_e("Hide some defined layers in the layer properties under some slider width.","revslider"); +_e("Hide All Layers Under Width","revslider"); +_e("Hide all layers under some slider width","revslider"); +_e("Start With Slide","revslider"); +_e("Change it if you want to start from a different slide then 1","revslider"); +_e("First Transition Active","revslider"); +_e("If active, it will overwrite the first slide transition. Use it when you want a special transition for the first slide only.","revslider"); +_e("First Transition Type","revslider"); +_e("First slide transition type","revslider"); +_e("Replace me!","revslider"); +_e("First Transition Duration","revslider"); +_e("First slide transition duration (Default:300, min: 100 max 2000)","revslider"); +_e("First Transition Slot Amount","revslider"); +_e("The number of slots or boxes the slide is divided into. If you use boxfade, over 7 slots can be juggy","revslider"); +_e("JQuery No Conflict Mode","revslider"); +_e("Turns on / off jquery noconflict mode. You can play with this option when you have some javascript conflicts.","revslider"); +_e("Put JS Includes To Body","revslider"); +_e("Putting the js to body (in addition to head) is good for fixing some javascript conflicts of type: TypeError: tpj('#rev_slider_1_1').show().revolution is not a function","revslider"); +_e("True","revslider"); +_e("False","revslider"); +_e("Output Filters Protection","revslider"); +_e("Activate a protection against wordpress output filters that adds html blocks to the shortcode output like P and BR","revslider"); +_e("By Compressing Output","revslider"); +_e("By Echo Output","revslider"); +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/temp/functions_wordpress.class.php b/src/wp-content/plugins/revslider/temp/functions_wordpress.class.php new file mode 100644 index 0000000..58e9d9b --- /dev/null +++ b/src/wp-content/plugins/revslider/temp/functions_wordpress.class.php @@ -0,0 +1,830 @@ +get_var($sql); + + if($table == $tableName) + return(true); + + return(false); + } + + + /** + * + * get wordpress base path + */ + public static function getPathBase(){ + return ABSPATH; + } + + /** + * + * get wp-content path + */ + public static function getPathUploads(){ + if(self::isMultisite()){ + if(!defined("BLOGUPLOADDIR")){ + $pathBase = self::getPathBase(); + $pathContent = $pathBase."wp-content/uploads/"; + }else + $pathContent = BLOGUPLOADDIR; + }else{ + $pathContent = WP_CONTENT_DIR; + if(!empty($pathContent)){ + $pathContent .= "/"; + } + else{ + $pathBase = self::getPathBase(); + $pathContent = $pathBase."wp-content/uploads/"; + } + } + + return($pathContent); + } + + /** + * + * get content url + */ + public static function getUrlUploads(){ + + if(self::isMultisite() == false){ //without multisite + $baseUrl = content_url()."/"; + } + else{ //for multisite + $arrUploadData = wp_upload_dir(); + $baseUrl = $arrUploadData["baseurl"]."/"; + } + + return($baseUrl); + + } + + /** + * + * register widget (must be class) + */ + public static function registerWidget($widgetName){ + add_action('widgets_init', create_function('', 'return register_widget("'.$widgetName.'");')); + } + + /** + * get image relative path from image url (from upload) + */ + public static function getImagePathFromURL($urlImage){ + + $baseUrl = self::getUrlUploads(); + $pathImage = str_replace($baseUrl, "", $urlImage); + + return($pathImage); + } + + /** + * get image real path phisical on disk from url + */ + public static function getImageRealPathFromUrl($urlImage){ + $filepath = self::getImagePathFromURL($urlImage); + $realPath = UniteFunctionsWPBiz::getPathUploads().$filepath; + return($realPath); + } + + + /** + * + * get image url from image path. + */ + public static function getImageUrlFromPath($pathImage){ + //protect from absolute url + $pathLower = strtolower($pathImage); + if(strpos($pathLower, "http://") !== false || strpos($pathLower, "www.") === 0) + return($pathImage); + + $urlImage = self::getUrlUploads().$pathImage; + return($urlImage); + } + + + /** + * + * get post categories list assoc - id / title + */ + public static function getCategoriesAssoc($taxonomy = "category"){ + + if(strpos($taxonomy,",") !== false){ + $arrTax = explode(",", $taxonomy); + $arrCats = array(); + foreach($arrTax as $tax){ + $cats = self::getCategoriesAssoc($tax); + $arrCats = array_merge($arrCats,$cats); + } + + return($arrCats); + } + + //$cats = get_terms("category"); + $args = array("taxonomy"=>$taxonomy); + $cats = get_categories($args); + + $arrCats = array(); + foreach($cats as $cat){ + $numItems = $cat->count; + $itemsName = "items"; + if($numItems == 1) + $itemsName = "item"; + + $title = $cat->name . " ($numItems $itemsName)"; + + $id = $cat->cat_ID; + $arrCats[$id] = $title; + } + return($arrCats); + } + + + /** + * + * return post type title from the post type + */ + public static function getPostTypeTitle($postType){ + + $objType = get_post_type_object($postType); + + if(empty($objType)) + return($postType); + + $title = $objType->labels->singular_name; + + return($title); + } + + + /** + * + * get post type taxomonies + */ + public static function getPostTypeTaxomonies($postType){ + $arrTaxonomies = get_object_taxonomies(array( 'post_type' => $postType ), 'objects'); + + $arrNames = array(); + foreach($arrTaxonomies as $key=>$objTax){ + $arrNames[$objTax->name] = $objTax->labels->name; + } + + return($arrNames); + } + + + /** + * + * get all the post types including custom ones + */ + public static function getPostTypesAssoc(){ + $arrBuiltIn = array( + "post"=>"post", + "page"=>"page", + ); + + $arrCustomTypes = get_post_types(array('_builtin' => false)); + + $arrPostTypes = array_merge($arrBuiltIn,$arrCustomTypes); + + //update label + foreach($arrPostTypes as $key=>$type){ + $arrPostTypes[$key] = self::getPostTypeTitle($type); + } + + return($arrPostTypes); + } + + + /** + * + * get the category data + */ + public static function getCategoryData($catID){ + $catData = get_category($catID); + if(empty($catData)) + return($catData); + + $catData = (array)$catData; + return($catData); + } + + + /** + * + * get posts by coma saparated posts + */ + public static function getPostsByIDs($strIDs){ + + if(is_string($strIDs)){ + $arr = explode(",",$strIDs); + } + + $query = array( + 'post_type'=>"any", + 'post__in' => $arr + ); + + $objQuery = new WP_Query($query); + + $arrPosts = $objQuery->posts; + + //dmp($query);dmp("num posts: ".count($arrPosts));exit(); + + foreach($arrPosts as $key=>$post){ + + if(method_exists($post, "to_array")) + $arrPosts[$key] = $post->to_array(); + else + $arrPosts[$key] = (array)$post; + } + + return($arrPosts); + } + + + /** + * + * get posts by some category + * could be multiple + */ + public static function getPostsByCategory($catID,$sortBy = self::SORTBY_ID,$direction = self::ORDER_DIRECTION_DESC,$numPosts=-1,$postTypes="any",$taxonomies="category",$arrAddition = array()){ + + //get post types + if(strpos($postTypes,",") !== false){ + $postTypes = explode(",", $postTypes); + if(array_search("any", $postTypes) !== false) + $postTypes = "any"; + } + + if(empty($postTypes)) + $postTypes = "any"; + + if(strpos($catID,",") !== false) + $catID = explode(",",$catID); + else + $catID = array($catID); + + $query = array( + 'order'=>$direction, + 'posts_per_page'=>$numPosts, + 'showposts'=>$numPosts, + 'post_type'=>$postTypes + ); + + //add sort by (could be by meta) + if(strpos($sortBy, "meta_num_") === 0){ + $metaKey = str_replace("meta_num_", "", $sortBy); + $query["orderby"] = "meta_value_num"; + $query["meta_key"] = $metaKey; + }else + if(strpos($sortBy, "meta_") === 0){ + $metaKey = str_replace("meta_", "", $sortBy); + $query["orderby"] = "meta_value"; + $query["meta_key"] = $metaKey; + }else + $query["orderby"] = $sortBy; + + + if(!empty($taxonomies)){ + + $taxQuery = array(); + + //add taxomonies to the query + if(strpos($taxonomies,",") !== false){ //multiple taxomonies + $taxonomies = explode(",",$taxonomies); + foreach($taxonomies as $taxomony){ + $taxArray = array( + 'taxonomy' => $taxomony, + 'field' => 'id', + 'terms' => $catID + ); + $taxQuery[] = $taxArray; + } + }else{ //single taxomony + $taxArray = array( + 'taxonomy' => $taxonomies, + 'field' => 'id', + 'terms' => $catID + ); + $taxQuery[] = $taxArray; + } + + $taxQuery['relation'] = 'OR'; + + $query['tax_query'] = $taxQuery; + } //if exists taxanomies + + + if(!empty($arrAddition)) + $query = array_merge($query, $arrAddition); + + $objQuery = new WP_Query($query); + + $arrPosts = $objQuery->posts; + + //dmp($query);dmp("num posts: ".count($arrPosts));exit(); + + foreach($arrPosts as $key=>$post){ + + if(method_exists($post, "to_array")) + $arrPosts[$key] = $post->to_array(); + else + $arrPosts[$key] = (array)$post; + } + + return($arrPosts); + } + + + /** + * + * get single post + */ + public static function getPost($postID){ + $post = get_post($postID); + if(empty($post)) + UniteFunctionsBiz::throwError("Post with id: $postID not found"); + + $arrPost = $post->to_array(); + return($arrPost); + } + + + /** + * + * update post state + */ + public static function updatePostState($postID,$state){ + $arrUpdate = array(); + $arrUpdate["ID"] = $postID; + $arrUpdate["post_status"] = $state; + + wp_update_post($arrUpdate); + } + + /** + * + * update post menu order + */ + public static function updatePostOrder($postID,$order){ + $arrUpdate = array(); + $arrUpdate["ID"] = $postID; + $arrUpdate["menu_order"] = $order; + + wp_update_post($arrUpdate); + } + + + /** + * + * get url of post thumbnail + */ + public static function getUrlPostImage($postID,$size = self::THUMB_FULL){ + + $post_thumbnail_id = get_post_thumbnail_id( $postID ); + if(empty($post_thumbnail_id)) + return(""); + + $arrImage = wp_get_attachment_image_src($post_thumbnail_id,$size); + if(empty($arrImage)) + return(""); + + $urlImage = $arrImage[0]; + return($urlImage); + } + + /** + * + * get post thumb id from post id + */ + public static function getPostThumbID($postID){ + $thumbID = get_post_thumbnail_id( $postID ); + return($thumbID); + } + + + /** + * + * get attachment image array by id and size + */ + public static function getAttachmentImage($thumbID,$size = self::THUMB_FULL){ + + $arrImage = wp_get_attachment_image_src($thumbID,$size); + if(empty($arrImage)) + return(false); + + $output = array(); + $output["url"] = UniteFunctionsBiz::getVal($arrImage, 0); + $output["width"] = UniteFunctionsBiz::getVal($arrImage, 1); + $output["height"] = UniteFunctionsBiz::getVal($arrImage, 2); + + return($output); + } + + + /** + * + * get attachment image url + */ + public static function getUrlAttachmentImage($thumbID,$size = self::THUMB_FULL){ + $arrImage = wp_get_attachment_image_src($thumbID,$size); + if(empty($arrImage)) + return(false); + $url = UniteFunctionsBiz::getVal($arrImage, 0); + return($url); + } + + + /** + * + * get link of edit slides by category id + */ + public static function getUrlSlidesEditByCatID($catID){ + + $url = self::$urlAdmin; + $url .= "edit.php?s&post_status=all&post_type=post&action=-1&m=0&cat={$catID}&paged=1&mode=list&action2=-1"; + + return($url); + } + + /** + * + * get edit post url + */ + public static function getUrlEditPost($postID){ + $url = self::$urlAdmin; + $url .= "post.php?post={$postID}&action=edit"; + + return($url); + } + + + /** + * + * get new post url + */ + public static function getUrlNewPost(){ + $url = self::$urlAdmin; + $url .= "post-new.php"; + return($url); + } + + + /** + * + * delete post + */ + public static function deletePost($postID){ + $success = wp_delete_post($postID,true); + if($success == false) + UniteFunctionsBiz::throwError("Could not delete post: $postID"); + } + + /** + * + * update post thumbnail + */ + public static function updatePostThumbnail($postID,$thumbID){ + set_post_thumbnail($postID, $thumbID); + } + + + /** + * + * get intro from content + */ + public static function getIntroFromContent($text){ + $intro = ""; + if(!empty($text)){ + $arrExtended = get_extended($text); + $intro = UniteFunctionsBiz::getVal($arrExtended, "main"); + + /* + if(strlen($text) != strlen($intro)) + $intro .= "..."; + */ + } + + return($intro); + } + + + /** + * + * get excerpt from post id + */ + public static function getExcerptById($postID, $limit=55){ + + $post = get_post($postID); + + $excerpt = $post->post_excerpt; + $excerpt = trim($excerpt); + + $excerpt = trim($excerpt); + if(empty($excerpt)) + $excerpt = $post->post_content; + + $excerpt = strip_tags($excerpt,"

            "); + + $excerpt = UniteFunctionsBiz::getTextIntro($excerpt, $limit); + + return $excerpt; + } + + + /** + * + * get user display name from user id + */ + public static function getUserDisplayName($userID){ + + $displayName = get_the_author_meta('display_name', $userID); + + return($displayName); + } + + + /** + * + * get categories by id's + */ + public static function getCategoriesByIDs($arrIDs){ + + if(empty($arrIDs)) + return(array()); + + $strIDs = implode(",", $arrIDs); + + $args = "include=$strIDs"; + + $arrCats = get_categories( $args ); + return($arrCats); + } + + + /** + * get categories list, copy the code from default wp functions + */ + public static function getCategoriesHtmlList($catIDs){ + global $wp_rewrite; + + //$catList = get_the_category_list( ",", "", $postID ); + + $categories = self::getCategoriesByIDs($catIDs); + + $rel = ( is_object( $wp_rewrite ) && $wp_rewrite->using_permalinks() ) ? 'rel="category tag"' : 'rel="category"'; + + $separator = ','; + $parents=''; + + $thelist = ''; + + $i = 0; + foreach ( $categories as $category ) { + if ( 0 < $i ) + $thelist .= $separator; + switch ( strtolower( $parents ) ) { + case 'multiple': + if ( $category->parent ) + $thelist .= get_category_parents( $category->parent, true, $separator ); + $thelist .= 'name ) ) . '" ' . $rel . '>' . $category->name.''; + break; + case 'single': + $thelist .= 'name ) ) . '" ' . $rel . '>'; + if ( $category->parent ) + $thelist .= get_category_parents( $category->parent, false, $separator ); + $thelist .= "$category->name"; + break; + case '': + default: + $thelist .= 'name ) ) . '" ' . $rel . '>' . $category->name.''; + } + ++$i; + } + + + return $thelist; + } + + + /** + * + * get post tags html list + */ + public static function getTagsHtmlList($postID){ + $tagList = get_the_tag_list("",",","",$postID); + return($tagList); + } + + /** + * + * convert date to the date format that the user chose. + */ + public static function convertPostDate($date){ + if(empty($date)) + return($date); + $date = date_i18n(get_option('date_format'), strtotime($date)); + return($date); + } + + /** + * + * get assoc list of the taxonomies + */ + public static function getTaxonomiesAssoc(){ + $arr = get_taxonomies(); + unset($arr["post_tag"]); + unset($arr["nav_menu"]); + unset($arr["link_category"]); + unset($arr["post_format"]); + + return($arr); + } + + + /** + * + * get post types array with taxomonies + */ + public static function getPostTypesWithTaxomonies(){ + $arrPostTypes = self::getPostTypesAssoc(); + + foreach($arrPostTypes as $postType=>$title){ + $arrTaxomonies = self::getPostTypeTaxomonies($postType); + $arrPostTypes[$postType] = $arrTaxomonies; + } + + return($arrPostTypes); + } + + + /** + * + * get array of post types with categories (the taxonomies is between). + * get only those taxomonies that have some categories in it. + */ + public static function getPostTypesWithCats(){ + $arrPostTypes = self::getPostTypesWithTaxomonies(); + + $arrPostTypesOutput = array(); + foreach($arrPostTypes as $name=>$arrTax){ + + $arrTaxOutput = array(); + foreach($arrTax as $taxName=>$taxTitle){ + $cats = self::getCategoriesAssoc($taxName); + if(!empty($cats)) + $arrTaxOutput[] = array( + "name"=>$taxName, + "title"=>$taxTitle, + "cats"=>$cats); + } + + $arrPostTypesOutput[$name] = $arrTaxOutput; + + } + + return($arrPostTypesOutput); + } + + + /** + * + * get array of all taxonomies with categories. + */ + public static function getTaxonomiesWithCats(){ + + $arrTax = self::getTaxonomiesAssoc(); + $arrTaxNew = array(); + foreach($arrTax as $key=>$value){ + $arrItem = array(); + $arrItem["name"] = $key; + $arrItem["title"] = $value; + $arrItem["cats"] = self::getCategoriesAssoc($key); + $arrTaxNew[$key] = $arrItem; + } + + return($arrTaxNew); + } + + + + } //end of the class + + + //init the static vars + UniteFunctionsWPBiz::initStaticVars(); + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/temp/index.php b/src/wp-content/plugins/revslider/temp/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/uninstall.php b/src/wp-content/plugins/revslider/uninstall.php new file mode 100644 index 0000000..c6c9b72 --- /dev/null +++ b/src/wp-content/plugins/revslider/uninstall.php @@ -0,0 +1,23 @@ +prefix . GlobalsRevSlider::TABLE_SLIDERS_NAME; +$tableSlides = $wpdb->prefix . GlobalsRevSlider::TABLE_SLIDES_NAME; +$tableSettings = $wpdb->prefix . GlobalsRevSlider::TABLE_SETTINGS_NAME; +$tableCss = $wpdb->prefix . GlobalsRevSlider::TABLE_CSS_NAME; +$tableAnims = $wpdb->prefix . GlobalsRevSlider::TABLE_LAYER_ANIMS_NAME; + +$wpdb->query( "DROP TABLE $tableSliders" ); +$wpdb->query( "DROP TABLE $tableSlides" ); +$wpdb->query( "DROP TABLE $tableSettings" ); +$wpdb->query( "DROP TABLE $tableCss" ); +$wpdb->query( "DROP TABLE $tableAnims" ); + + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/views/index.php b/src/wp-content/plugins/revslider/views/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/views/master_view.php b/src/wp-content/plugins/revslider/views/master_view.php new file mode 100644 index 0000000..fee55a9 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/master_view.php @@ -0,0 +1,55 @@ + + + + +
            + + + + + +
            + + + +
            + + + + + + + +
            © All rights reserved, Themepunch ver. + +
            + + + + Debug Functions (for developer use only): +

            + + Update Text + + + diff --git a/src/wp-content/plugins/revslider/views/slide.php b/src/wp-content/plugins/revslider/views/slide.php new file mode 100644 index 0000000..379a6ee --- /dev/null +++ b/src/wp-content/plugins/revslider/views/slide.php @@ -0,0 +1,177 @@ +initByID($slideID); + $slideParams = $slide->getParams(); + + //dmp($slideParams);exit(); + + $operations = new RevOperations(); + + //init slider object + $sliderID = $slide->getSliderID(); + $slider = new RevSlider(); + $slider->initByID($sliderID); + $sliderParams = $slider->getParams(); + + $arrSlideNames = $slider->getArrSlideNames(); + + //check if slider is template + $sliderTemplate = $slider->getParam("template","false"); + + //set slide delay + $sliderDelay = $slider->getParam("delay","9000"); + $slideDelay = $slide->getParam("delay",""); + if(empty($slideDelay)) + $slideDelay = $sliderDelay; + + require self::getSettingsFilePath("slide_settings"); + require self::getSettingsFilePath("layer_settings"); + + //add plugins.min.js + self::addScript("jquery.themepunch.plugins.min","rs-plugin/js"); + + $settingsLayerOutput = new UniteSettingsProductSidebarRev(); + $settingsSlideOutput = new UniteSettingsRevProductRev(); + + $arrLayers = $slide->getLayers(); + + $loadGoogleFont = $slider->getParam("load_googlefont","false"); + + //get settings objects + $settingsLayer = self::getSettings("layer_settings"); + $settingsSlide = self::getSettings("slide_settings"); + + $cssContent = self::getSettings("css_captions_content"); + $arrCaptionClasses = $operations->getArrCaptionClasses($cssContent); + $arrFontFamily = $operations->getArrFontFamilys($slider); + $arrCSS = $operations->getCaptionsContentArray(); + $arrButtonClasses = $operations->getButtonClasses(); + $urlCaptionsCSS = GlobalsRevSlider::$urlCaptionsCSS; + + $arrAnim = $operations->getFullCustomAnimations(); + + //set layer caption as first caption class + $firstCaption = !empty($arrCaptionClasses)?$arrCaptionClasses[0]:""; + $settingsLayer->updateSettingValue("layer_caption",$firstCaption); + + //set stored values from "slide params" + $settingsSlide->setStoredValues($slideParams); + + //init the settings output object + $settingsLayerOutput->init($settingsLayer); + $settingsSlideOutput->init($settingsSlide); + + //set various parameters needed for the page + $width = $sliderParams["width"]; + $height = $sliderParams["height"]; + $imageUrl = $slide->getImageUrl(); + $imageID = $slide->getImageID(); + + $imageFilename = $slide->getImageFilename(); + + $style = "width:".$width."px;height:".$height."px;"; + + //set iframe parameters + $iframeWidth = $width+60; + $iframeHeight = $height+50; + + $iframeStyle = "width:".$iframeWidth."px;height:".$iframeHeight."px;"; + + $closeUrl = self::getViewUrl(RevSliderAdmin::VIEW_SLIDES,"id=".$sliderID); + + $jsonLayers = UniteFunctionsRev::jsonEncodeForClientSide($arrLayers); + $jsonCaptions = UniteFunctionsRev::jsonEncodeForClientSide($arrCaptionClasses); + $jsonFontFamilys = UniteFunctionsRev::jsonEncodeForClientSide($arrFontFamily); + $arrCssStyles = UniteFunctionsRev::jsonEncodeForClientSide($arrCSS); + + $arrCustomAnim = UniteFunctionsRev::jsonEncodeForClientSide($arrAnim); + + //bg type params + $bgType = UniteFunctionsRev::getVal($slideParams, "background_type","image"); + $slideBGColor = UniteFunctionsRev::getVal($slideParams, "slide_bg_color","#E7E7E7"); + $divLayersClass = "slide_layers"; + $bgSolidPickerProps = 'class="inputColorPicker slide_bg_color disabled" disabled="disabled"'; + + $bgFit = UniteFunctionsRev::getVal($slideParams, "bg_fit","cover"); + $bgFitX = intval(UniteFunctionsRev::getVal($slideParams, "bg_fit_x","100")); + $bgFitY = intval(UniteFunctionsRev::getVal($slideParams, "bg_fit_y","100")); + + $bgPosition = UniteFunctionsRev::getVal($slideParams, "bg_position","center top"); + $bgPositionX = intval(UniteFunctionsRev::getVal($slideParams, "bg_position_x","0")); + $bgPositionY = intval(UniteFunctionsRev::getVal($slideParams, "bg_position_y","0")); + + $bgEndPosition = UniteFunctionsRev::getVal($slideParams, "bg_end_position","center top"); + $bgEndPositionX = intval(UniteFunctionsRev::getVal($slideParams, "bg_end_position_x","0")); + $bgEndPositionY = intval(UniteFunctionsRev::getVal($slideParams, "bg_end_position_y","0")); + + $kenburn_effect = UniteFunctionsRev::getVal($slideParams, "kenburn_effect","off"); + //$kb_rotation_start = UniteFunctionsRev::getVal($slideParams, "kb_rotation_start","0"); + //$kb_rotation_end = UniteFunctionsRev::getVal($slideParams, "kb_rotation_end","0"); + $kb_duration = UniteFunctionsRev::getVal($slideParams, "kb_duration", $sliderParams["delay"]); + $kb_easing = UniteFunctionsRev::getVal($slideParams, "kb_easing","Linear.easeNone"); + $kb_start_fit = UniteFunctionsRev::getVal($slideParams, "kb_start_fit","100"); + $kb_end_fit = UniteFunctionsRev::getVal($slideParams, "kb_end_fit","100"); + + $bgRepeat = UniteFunctionsRev::getVal($slideParams, "bg_repeat","no-repeat"); + + $slideBGExternal = UniteFunctionsRev::getVal($slideParams, "slide_bg_external",""); + + switch($bgType){ + case "trans": + $divLayersClass = "slide_layers trans_bg"; + break; + case "solid": + $style .= "background-color:".$slideBGColor.";"; + $bgSolidPickerProps = 'class="inputColorPicker slide_bg_color" style="background-color:'.$slideBGColor.'"'; + break; + case "image": + $style .= "background-image:url('".$imageUrl."');"; + if($bgFit == 'percentage'){ + $style .= "background-size: ".$bgFitX.'% '.$bgFitY.'%;'; + }else{ + $style .= "background-size: ".$bgFit.";"; + } + if($bgPosition == 'percentage'){ + $style .= "background-position: ".$bgPositionX.'% '.$bgPositionY.'%;'; + }else{ + $style .= "background-position: ".$bgPosition.";"; + } + $style .= "background-repeat: ".$bgRepeat.";"; + break; + case "external": + $style .= "background-image:url('".$slideBGExternal."');"; + if($bgFit == 'percentage'){ + $style .= "background-size: ".$bgFitX.'% '.$bgFitY.'%;'; + }else{ + $style .= "background-size: ".$bgFit.";"; + } + if($bgPosition == 'percentage'){ + $style .= "background-position: ".$bgPositionX.'% '.$bgPositionY.'%;'; + }else{ + $style .= "background-position: ".$bgPosition.";"; + } + $style .= "background-repeat: ".$bgRepeat.";"; + break; + } + + $slideTitle = $slide->getParam("title","Slide"); + $slideOrder = $slide->getOrder(); + + //treat multilanguage + $isWpmlExists = UniteWpmlRev::isWpmlExists(); + $useWpml = $slider->getParam("use_wpml","off"); + $wpmlActive = false; + if($isWpmlExists && $useWpml == "on"){ + $wpmlActive = true; + $parentSlide = $slide->getParentSlide(); + $arrChildLangs = $parentSlide->getArrChildrenLangs(); + } + + require self::getPathTemplate("slide"); +?> + diff --git a/src/wp-content/plugins/revslider/views/slider.php b/src/wp-content/plugins/revslider/views/slider.php new file mode 100644 index 0000000..3ebcb27 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/slider.php @@ -0,0 +1,71 @@ +initByID($sliderID); + + //get setting fields + $settingsFields = $slider->getSettingsFields(); + $arrFieldsMain = $settingsFields["main"]; + $arrFieldsParams = $settingsFields["params"]; + + //modify arrows type for backword compatability + $arrowsType = UniteFunctionsRev::getVal($arrFieldsParams, "navigation_arrows"); + switch($arrowsType){ + case "verticalcentered": + $arrFieldsParams["navigation_arrows"] = "solo"; + break; + } + + //set custom type params values: + $settingsMain = RevSliderSettingsProduct::setSettingsCustomValues($settingsMain, $arrFieldsParams, $postTypesWithCats); + + //set setting values from the slider + $settingsMain->setStoredValues($arrFieldsParams); + + $settingsParams->setStoredValues($arrFieldsParams); + + //update short code setting + $shortcode = $slider->getShortcode(); + $settingsMain->updateSettingValue("shortcode",$shortcode); + + $linksEditSlides = self::getViewUrl(RevSliderAdmin::VIEW_SLIDES,"id=$sliderID"); + + $settingsSliderParams->init($settingsParams); + $settingsSliderMain->init($settingsMain); + + $settingsSliderParams->isAccordion(true); + + require self::getPathTemplate("slider_edit"); + } + + else{ + //set custom type params values: + $settingsMain = RevSliderSettingsProduct::setSettingsCustomValues($settingsMain, array(), $postTypesWithCats); + + $settingsSliderParams->init($settingsParams); + $settingsSliderMain->init($settingsMain); + + $settingsSliderParams->isAccordion(true); + + require self::getPathTemplate("slider_new"); + } + +?> + + + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/views/slider_template.php b/src/wp-content/plugins/revslider/views/slider_template.php new file mode 100644 index 0000000..57e3341 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/slider_template.php @@ -0,0 +1,71 @@ +initByID($sliderID); + + //get setting fields + $settingsFields = $slider->getSettingsFields(); + $arrFieldsMain = $settingsFields["main"]; + $arrFieldsParams = $settingsFields["params"]; + + //modify arrows type for backword compatability + $arrowsType = UniteFunctionsRev::getVal($arrFieldsParams, "navigation_arrows"); + switch($arrowsType){ + case "verticalcentered": + $arrFieldsParams["navigation_arrows"] = "solo"; + break; + } + + //set custom type params values: + $settingsMain = RevSliderSettingsProduct::setSettingsCustomValues($settingsMain, $arrFieldsParams, $postTypesWithCats); + + //set setting values from the slider + $settingsMain->setStoredValues($arrFieldsParams); + + $settingsParams->setStoredValues($arrFieldsParams); + + //update short code setting + $shortcode = $slider->getShortcode(); + $settingsMain->updateSettingValue("shortcode",$shortcode); + + $linksEditSlides = self::getViewUrl(RevSliderAdmin::VIEW_SLIDES,"id=$sliderID"); + + $settingsSliderParams->init($settingsParams); + $settingsSliderMain->init($settingsMain); + + $settingsSliderParams->isAccordion(true); + + require self::getPathTemplate("slider_edit"); + } + + else{ + //set custom type params values: + $settingsMain = RevSliderSettingsProduct::setSettingsCustomValues($settingsMain, array(), $postTypesWithCats); + + $settingsSliderParams->init($settingsParams); + $settingsSliderMain->init($settingsMain); + + $settingsSliderParams->isAccordion(true); + + require self::getPathTemplate("slider_new"); + } + +?> + + + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/views/sliders.php b/src/wp-content/plugins/revslider/views/sliders.php new file mode 100644 index 0000000..97bdb13 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/sliders.php @@ -0,0 +1,14 @@ +getArrSliders(); + $arrSlidersTemplates = $slider->getArrSliders(true); + + $addNewLink = self::getViewUrl(RevSliderAdmin::VIEW_SLIDER); + $addNewTemplateLink = self::getViewUrl(RevSliderAdmin::VIEW_SLIDER_TEMPLATE); + + + require self::getPathTemplate("sliders"); +?> + + + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/views/slides.php b/src/wp-content/plugins/revslider/views/slides.php new file mode 100644 index 0000000..d1a3279 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/slides.php @@ -0,0 +1,101 @@ +initByID($sliderID); + $sliderParams = $slider->getParams(); + + $arrSliders = $slider->getArrSlidersShort($sliderID); + $selectSliders = UniteFunctionsRev::getHTMLSelect($arrSliders,"","id='selectSliders'",true); + + $numSliders = count($arrSliders); + + //set iframe parameters + $width = $sliderParams["width"]; + $height = $sliderParams["height"]; + + $iframeWidth = $width+60; + $iframeHeight = $height+50; + + $iframeStyle = "width:".$iframeWidth."px;height:".$iframeHeight."px;"; + + $arrSlides = $slider->getSlides(false); + + $numSlides = count($arrSlides); + + $linksSliderSettings = self::getViewUrl(RevSliderAdmin::VIEW_SLIDER,"id=$sliderID"); + + $patternViewSlide = self::getViewUrl("slide","id=[slideid]"); + + //treat in case of slides from gallery + if($slider->isSlidesFromPosts() == false){ + + $templateName = "slides_gallery"; + + //handle wpml + $isWpmlExists = UniteWpmlRev::isWpmlExists(); + $useWpml = $slider->getParam("use_wpml","off"); + + $wpmlActive = false; + if($isWpmlExists && $useWpml == "on"){ + $wpmlActive = true; + + //get langs floating menu + $urlIconDelete = self::$url_plugin."images/icon-trash.png"; + $urlIconEdit = self::$url_plugin."images/icon-edit.png"; + $urlIconPreview = self::$url_plugin."images/preview.png"; + + $textDelete = __("Delete Slide",REVSLIDER_TEXTDOMAIN); + $textEdit = __("Edit Slide",REVSLIDER_TEXTDOMAIN); + $textPreview = __("Preview Slide",REVSLIDER_TEXTDOMAIN); + + $htmlBefore = ""; + $htmlBefore .= "
          • "."\n"; + $htmlBefore .= " ".$textDelete."\n"; + $htmlBefore .= "
          • "."\n"; + + $htmlBefore .= "
          • "."\n"; + $htmlBefore .= " ".$textEdit."\n"; + $htmlBefore .= "
          • "."\n"; + + $htmlBefore .= "
          • "."\n"; + $htmlBefore .= " ".$textPreview."\n"; + $htmlBefore .= "
          • "."\n"; + + $htmlBefore .= "
          • "."\n"; + $htmlBefore .= "
            "."\n"; + $htmlBefore .= "
          • "."\n"; + + $langFloatMenu = UniteWpmlRev::getLangsWithFlagsHtmlList("id='slides_langs_float' class='slides_langs_float'",$htmlBefore); + } + + } + + else{ //slides from posts + + $templateName = "slides_posts"; + + $sourceType = $slider->getParam("source_type","posts"); + $showSortBy = ($sourceType == "posts")?true:false; + + //get button links + $urlNewPost = UniteFunctionsWPRev::getUrlNewPost(); + $linkNewPost = UniteFunctionsRev::getHtmlLink($urlNewPost, __("New Post",REVSLIDER_TEXTDOMAIN),"button_new_post","button-primary revblue",true); + + //get ordering + $arrSortBy = UniteFunctionsWPRev::getArrSortBy(); + $sortBy = $slider->getParam("post_sortby",RevSlider::DEFAULT_POST_SORTBY); + $selectSortBy = UniteFunctionsRev::getHTMLSelect($arrSortBy,$sortBy,"id='select_sortby'",true); + } + + + require self::getPathTemplate($templateName); + +?> + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/views/system/general_settings_dialog.php b/src/wp-content/plugins/revslider/views/system/general_settings_dialog.php new file mode 100644 index 0000000..5ad0af2 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/system/general_settings_dialog.php @@ -0,0 +1,25 @@ +init($generalSettings); + +?> + + +
            " style="display:none;"> + + draw("form_general_settings",true); + ?> +
            + + + + + + +
            diff --git a/src/wp-content/plugins/revslider/views/system/index.php b/src/wp-content/plugins/revslider/views/system/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/views/system/update_dialog.php b/src/wp-content/plugins/revslider/views/system/update_dialog.php new file mode 100644 index 0000000..dcedd65 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/system/update_dialog.php @@ -0,0 +1,2 @@ +
            " style="display:none;">
            :


            ">
            ">
            + diff --git a/src/wp-content/plugins/revslider/views/system/video_dialog.php b/src/wp-content/plugins/revslider/views/system/video_dialog.php new file mode 100644 index 0000000..ac5bdc0 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/system/video_dialog.php @@ -0,0 +1,252 @@ + + +
            " style="display:none"> + + + +
            +
            + +
            +
            + + + + + + + + +
            +
            + +
            +
            +
            + + +
            + + + + + + + + + +
            + +
            + : +
            + + +   + + + + +
            + : +
            + +
            + + + + +
            + + + + + +
            + + + +
            diff --git a/src/wp-content/plugins/revslider/views/templates/dialog_preview_slide.php b/src/wp-content/plugins/revslider/views/templates/dialog_preview_slide.php new file mode 100644 index 0000000..a5f6ce9 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/dialog_preview_slide.php @@ -0,0 +1,10 @@ + + + +
            + + + +
            diff --git a/src/wp-content/plugins/revslider/views/templates/dialog_preview_slider.php b/src/wp-content/plugins/revslider/views/templates/dialog_preview_slider.php new file mode 100644 index 0000000..2a52a49 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/dialog_preview_slider.php @@ -0,0 +1,9 @@ + + +
            + + + +
            diff --git a/src/wp-content/plugins/revslider/views/templates/edit_layers.php b/src/wp-content/plugins/revslider/views/templates/edit_layers.php new file mode 100644 index 0000000..e26462d --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/edit_layers.php @@ -0,0 +1,782 @@ + +
            + +
            +

            + - +

            +
            +
            +
            +

            + + + + > + + + + + + + > + + + + + + + > + + + + + > + + + + + + + +
            + + + + + +
            +
            +
            +
            +
            + +
            + +
            + +
            +
            +
            +
            + +
            +
            + +
            +
            + + + + +
            +
            + + +
            +
            +
            + +
            +
            +
            +
            +
            +
            +
            + + + +
            + +
            + + + +
            +
            +

            - + +

            +
            +
              +
            • + +
              +
            • + drawSettingsByNames("layer_caption"); + + //add css editor + $s->drawCssEditor(); + + //add global styles editor + $s->drawGlobalCssEditor(); + + $s->drawSettingsByNames("layer_text,button_edit_video,button_change_image_source,layer_alt"); + ?> +
            • + +
              +
            • +
            • + + + + + + + + + + + + + + + + +
              +
            • + + drawSettingsByNames("layer_left,layer_top"); + $s->drawSettingsByNames("layer_align_hor,layer_align_vert"); + ?> + + +
            • + +
              +
            • + drawSettingsByNames("layer_scaleX,layer_scaleY"); + $s->drawSettingsByNames("layer_proportional_scale"); + ?> + +
            +
            +
            +
            +
            + + +
            +
            +

            + + +

            +
            +
              + + +
            • + +
              +
            • +
              + +
              +
              LAYER EXAMPLE
              +
              + +
              ON
              +
              + +
              + + +
            • + +
              +
            • +
              +
              drawSettingsByNames("layer_animation"); + ?>
              + + +
              + drawSettingsByNames("layer_easing,layer_speed"); + ?> +
              + +
            • + +
              +
            • +
              +
              drawSettingsByNames("layer_endanimation"); + ?>
              + + +
              + drawSettingsByNames("layer_endeasing,layer_endspeed,layer_endtime"); + ?> + +
              + + +
            +
            +
            +
            +
            + + + + + + + + + + + + +
            +
            +

            + + +

            +
            + +
              +
            • + +
              +
            • + +
              +
            • + +
              +
            • + + +
            • + +
              +
            • + + + +
            • + +
              +
            • + drawSettingsByNames("layer_id,layer_classes,layer_title,layer_rel"); + ?> + +
            +
            +
            +
            +
            + +
            +
            + + + +
            +
            +

            + +
            +
            +
            +

            + +
            +
            +
            +
            0 ms
            +
            ms
            +
            + + +
            +
              +
              +
              +
              + +
              + +
              +
              + + + + + + + +
              +
              +
              + + diff --git a/src/wp-content/plugins/revslider/views/templates/index.php b/src/wp-content/plugins/revslider/views/templates/index.php new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/revslider/views/templates/slide.php b/src/wp-content/plugins/revslider/views/templates/slide.php new file mode 100644 index 0000000..a2c3faa --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/slide.php @@ -0,0 +1,167 @@ + + + getParam("google_font",""); + if(!empty($googleFont)){ + if(is_array($googleFont)){ + foreach($googleFont as $key => $font){ + echo RevOperations::getCleanFontImport($font); + } + }else{ + echo RevOperations::getCleanFontImport($googleFont); + } + } + } + + ?> + +
              +
              + +
              +
              +
              + , title: +
              + + + +
              + + +
              + +
              + +
              +
              + + 1):?> +
              +
              +
              + : + + . +
              +
              + + +
              + + + +
              +

              -

              +
              +
              + draw("form_slide_params",false); + ?> + + +
              +
              +
              + + + + + + + +
              + + + " class="button-primary revblue"> +
              + +
              + +
              + + + + +
              +
              +
              + +
              + +
              + + + + + diff --git a/src/wp-content/plugins/revslider/views/templates/slider_api.php b/src/wp-content/plugins/revslider/views/templates/slider_api.php new file mode 100644 index 0000000..329e080 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/slider_api.php @@ -0,0 +1,109 @@ + + +
              +

              +
              +
              :
              +
              +
              .
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              :
              :
              :
              :
              :
              :
              :
              :
              :
              :
              +
              +
              +
              +
              :
              +
              +
              .
              + +
              +
              + + diff --git a/src/wp-content/plugins/revslider/views/templates/slider_edit.php b/src/wp-content/plugins/revslider/views/templates/slider_edit.php new file mode 100644 index 0000000..c651b33 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/slider_edit.php @@ -0,0 +1,96 @@ + + +
              +
              + +
              +
              + +
              + +
              + + + + +
              + +
              + +
              + +
              +

              +
              + + + draw("form_slider_main",true)?> + +
              + Layout Example +
              +
              +
              BROWSER
              +
              +
              PAGE
              +
              +
              +
              SLIDER
              +
              +
              +
              CAPTIONS GRID
              +
              +
              +
              + +
              + + + + + + + + "> +
              + +
              +
              +
              + + + + +
              +
              + draw("form_slider_params",true); ?> +
              + +
              + +
              + +
              + + + + diff --git a/src/wp-content/plugins/revslider/views/templates/slider_new.php b/src/wp-content/plugins/revslider/views/templates/slider_new.php new file mode 100644 index 0000000..dec5188 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/slider_new.php @@ -0,0 +1,72 @@ +
              +
              +
              +
              + +
              + +
              + + + + + +
              +
              +
              +
              +

              +
              + draw("form_slider_main",true)?> + +
              + Layout Example +
              +
              +
              BROWSER
              +
              +
              PAGE
              +
              +
              +
              SLIDER
              +
              +
              +
              CAPTIONS GRID
              +
              +
              +
              + +
              + + + + +
              +
              +
              +
              + draw("form_slider_params",true); ?> +
              +
              +
              +
              + + + diff --git a/src/wp-content/plugins/revslider/views/templates/slider_toolbox.php b/src/wp-content/plugins/revslider/views/templates/slider_toolbox.php new file mode 100644 index 0000000..571495b --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/slider_toolbox.php @@ -0,0 +1,72 @@ + +
              +

              +
              + +
              :
              +
              + +
              + + + + "> + +

              +

              + + + + + + + + + + + +
              +
              + +
              +
              +
              .
              +
              +
              + +
              :
              +
              + +
              + + +
              +
              +
              +
              :
              +
              +
              Note, the replace is not reversible",REVSLIDER_TEXTDOMAIN)?>.
              + +
              + + : +
              + + +
              + + : +
              + + +
              + + + +
              + + +
              +
              + + diff --git a/src/wp-content/plugins/revslider/views/templates/sliders.php b/src/wp-content/plugins/revslider/views/templates/sliders.php new file mode 100644 index 0000000..0cce7d4 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/sliders.php @@ -0,0 +1,109 @@ +getAlias().'"'; + + $outputTemplates = false; +?> + +
              +
              + +
              +
              + +
              + + + + + +
              + + + +
              + + +

              + + +

              + + +
              + + +
              + + +
              +

              +
              +
              +

              :

              + +
                +
              • + : <?php putRevSlider( "alias" ) ?> : <?php putRevSlider() ?> +
                +    : <?php putRevSlider(,"homepage") ?> +
                   : <?php putRevSlider(,"2,10") ?> +
              • +
              • +
              • +
              + --------- +

              +
              +
              + Themepunch or the Slider Revolution +

              +
              + +

              + +
              + + +
              " class="dialog_import_slider" style="display:none"> +
              +
              + + + "> + : +
              + +

              +

              + + + + + + + + + + + +
              +

              + "> +
              + +
              + + + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/views/templates/sliders_list.php b/src/wp-content/plugins/revslider/views/templates/sliders_list.php new file mode 100644 index 0000000..f27a307 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/sliders_list.php @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + getID(); + $showTitle = $slider->getShowTitle(); + $title = $slider->getTitle(); + $alias = $slider->getAlias(); + $isFromPosts = $slider->isSlidesFromPosts(); + $strSource = __("Gallery",REVSLIDER_TEXTDOMAIN); + $preicon = "revicon-picture-1"; + + if($outputTemplates) $strSource = "Template"; + if ($strSource=="Template") $preicon ="templateicon"; + + $rowClass = ""; + if($isFromPosts == true){ + $strSource = __("Posts",REVSLIDER_TEXTDOMAIN); + $preicon ="revicon-doc"; + $rowClass = "class='row_alt'"; + } + + if($outputTemplates){ + $editLink = self::getViewUrl(RevSliderAdmin::VIEW_SLIDER_TEMPLATE,"id=$id"); + }else{ + $editLink = self::getViewUrl(RevSliderAdmin::VIEW_SLIDER,"id=$id"); + } + $editSlidesLink = self::getViewUrl(RevSliderAdmin::VIEW_SLIDES,"id=$id"); + + $showTitle = UniteFunctionsRev::getHtmlLink($editLink, $showTitle); + + $shortCode = $slider->getShortcode(); + $numSlides = $slider->getNumSlides(); + + + }catch(Exception $e){ + $errorMessage = "ERROR: ".$e->getMessage(); + $strSource = ""; + $numSlides = ""; + } + + ?> + > + + + + + + + + + + + + + +
              + + +
              + +
              ".$strSource?> + + + + "> + "> +
              ">
              +
              + + + + + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/views/templates/slides.php b/src/wp-content/plugins/revslider/views/templates/slides.php new file mode 100644 index 0000000..a899610 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/slides.php @@ -0,0 +1,80 @@ + +
              + +
              + +
              +
              +

              : getTitle()?>

              + + + +
              + +
              + = 5):?> + + + + + + + + + + + + + +
              +
              + +
              +
              + " href='javascript:void(0)' > + + + + + + + + + +
              + +
              " data-textupdate="" title="" style="display:none"> + +
              + + : + + +

              + + : + + + +     + + + +
              + + + + + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/views/templates/slides_gallery.php b/src/wp-content/plugins/revslider/views/templates/slides_gallery.php new file mode 100644 index 0000000..9b298ab --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/slides_gallery.php @@ -0,0 +1,79 @@ + +
              + +
              + +
              +
              +
              : getTitle()?>
              + + + +
              + +
              + = 5):?> + + + + + + + + + + + + + +
              +
              + +
              +
              + " href='javascript:void(0)' > + + + + + + +
              + +
              " data-textupdate="" title="" style="display:none"> + +
              + + : + + +

              + + : + + + +     + + + +
              + + + + + \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/views/templates/slides_list.php b/src/wp-content/plugins/revslider/views/templates/slides_list.php new file mode 100644 index 0000000..8a581ab --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/slides_list.php @@ -0,0 +1,171 @@ + +
              +

              + + ... +

              +
              + + + + +
                + + getParam("background_type","image"); + + $bgFit = $slide->getParam("bg_fit","cover"); + $bgFitX = intval($slide->getParam("bg_fit_x","100")); + $bgFitY = intval($slide->getParam("bg_fit_y","100")); + + $bgPosition = $slide->getParam("bg_position","center top"); + $bgPositionX = intval($slide->getParam("bg_position_x","0")); + $bgPositionY = intval($slide->getParam("bg_position_y","0")); + + $bgRepeat = $slide->getParam("bg_repeat","no-repeat"); + + $bgStyle = ' '; + if($bgFit == 'percentage'){ + $bgStyle .= "background-size: ".$bgFitX.'% '.$bgFitY.'%;'; + }else{ + $bgStyle .= "background-size: ".$bgFit.";"; + } + if($bgPosition == 'percentage'){ + $bgStyle .= "background-position: ".$bgPositionX.'% '.$bgPositionY.'%;'; + }else{ + $bgStyle .= "background-position: ".$bgPosition.";"; + } + $bgStyle .= "background-repeat: ".$bgRepeat.";"; + + + //set language flag url + $isWpmlExists = UniteWpmlRev::isWpmlExists(); + $useWpml = $slider->getParam("use_wpml","off"); + $showLangs = false; + if($isWpmlExists && $useWpml == "on"){ + $showLangs = true; + $arrChildLangs = $slide->getArrChildrenLangs(); + $arrSlideLangCodes = $slide->getArrChildLangCodes(); + + $addItemStyle = ""; + if(UniteWpmlRev::isAllLangsInArray($arrSlideLangCodes)) + $addItemStyle = "style='display:none'"; + } + + $imageFilepath = $slide->getImageFilepath(); + $urlImageForView = $slide->getThumbUrl(); + + $slideTitle = $slide->getParam("title","Slide"); + $title = $slideTitle; + $filename = $slide->getImageFilename(); + + $imageAlt = stripslashes($slideTitle); + if(empty($imageAlt)) + $imageAlt = "slide"; + + if($bgType == "image") + $title .= " (".$filename.")"; + + $slideid = $slide->getID(); + + $urlEditSlide = self::getViewUrl(RevSliderAdmin::VIEW_SLIDE,"id=$slideid"); + $linkEdit = UniteFunctionsRev::getHtmlLink($urlEditSlide, $title); + + $state = $slide->getParam("state","published"); + + ?> +
              • + + + + + +
                ">
                + +
                ">
                + + +
                + +
                + + +
                + +
                + + +
                + getParam("slide_bg_color","#d0d0d0"); + ?> +
                + +
                + +
                + + + + + + + + + + + +
                + +
                +
                +
                + +
                  + +
                • + + +
                • + +
                • +
                  >
                  + +
                • +
                + +
              • + +
              + +
              +
              \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/views/templates/slides_list_posts.php b/src/wp-content/plugins/revslider/views/templates/slides_list_posts.php new file mode 100644 index 0000000..41e5dd2 --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/slides_list_posts.php @@ -0,0 +1 @@ +

              ...

                $slide): $bgType = $slide->getParam("background_type","image"); $bgFit = $slide->getParam("bg_fit","cover"); $bgFitX = intval($slide->getParam("bg_fit_x","100")); $bgFitY = intval($slide->getParam("bg_fit_y","100")); $bgPosition = $slide->getParam("bg_position","center top"); $bgPositionX = intval($slide->getParam("bg_position_x","0")); $bgPositionY = intval($slide->getParam("bg_position_y","0")); $bgRepeat = $slide->getParam("bg_repeat","no-repeat"); $bgStyle = ' '; if($bgFit == 'percentage'){ $bgStyle .= "background-size: ".$bgFitX.'% '.$bgFitY.'%;'; }else{ $bgStyle .= "background-size: ".$bgFit.";"; } if($bgPosition == 'percentage'){ $bgStyle .= "background-position: ".$bgPositionX.'% '.$bgPositionY.'%;'; }else{ $bgStyle .= "background-position: ".$bgPosition.";"; } $bgStyle .= "background-repeat: ".$bgRepeat.";"; if($sortBy == UniteFunctionsWPRev::SORTBY_MENU_ORDER) $order = $slide->getOrder(); else $order = $index + 1; $urlImageForView = $slide->getUrlImageThumb(); $slideTitle = $slide->getParam("title","Slide"); $title = $slideTitle; $filename = $slide->getImageFilename(); $imageAlt = stripslashes($slideTitle); if(empty($imageAlt)) $imageAlt = "slide"; if($bgType == "image" && !empty($filename)) $title .= " (".$filename.")"; $postID = $slide->getID(); $urlEditSlide = UniteFunctionsWPRev::getUrlEditPost($postID); $linkEdit = UniteFunctionsRev::getHtmlLink($urlEditSlide, $title,"","",true); $state = $slide->getParam("state","published"); ?>
              • ">
                ">
                no image
              \ No newline at end of file diff --git a/src/wp-content/plugins/revslider/views/templates/slides_posts.php b/src/wp-content/plugins/revslider/views/templates/slides_posts.php new file mode 100644 index 0000000..8b79a6b --- /dev/null +++ b/src/wp-content/plugins/revslider/views/templates/slides_posts.php @@ -0,0 +1 @@ +
              : getTitle()?>
                :  
              \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/ajax.php b/src/wp-content/plugins/sitepress-multilingual-cms/ajax.php new file mode 100644 index 0000000..0302398 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/ajax.php @@ -0,0 +1,939 @@ + 1, + 'get_language_status_text' => 1, + 'get_original_comment' => 1, + 'get_browser_language' => 1 +); + +if(!isset($_icl_ajx_actions_no_nonce[$_REQUEST['icl_ajx_action']]) + && !wp_verify_nonce($_REQUEST['_icl_nonce'], $_REQUEST['icl_ajx_action'] . '_nonce')){ + die('Invalid nonce'); +} + +switch($_REQUEST['icl_ajx_action']){ + case 'health_check': + $iclsettings['ajx_health_checked'] = 1; + $this->save_settings($iclsettings); + break; + case 'set_active_languages': + $resp = array(); + $old_active_languages_count = count($this->get_active_languages()); + $lang_codes = explode(',',$_POST['langs']); + if($this->set_active_languages($lang_codes)){ + $resp[0] = 1; + $active_langs = $this->get_active_languages(); + $iclresponse =''; + $default_categories = $this->get_default_categories(); + $default_category_main = $wpdb->get_var("SELECT name FROM {$wpdb->terms} t JOIN {$wpdb->term_taxonomy} tx ON t.term_id=tx.term_id + WHERE term_taxonomy_id='{$default_categories[$this->get_default_language()]}' AND taxonomy='category'"); + $default_category_trid = $wpdb->get_var("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_id={$default_categories[$this->get_default_language()]} AND element_type='tax_category'"); + + foreach($active_langs as $lang){ + $is_default = ($this->get_default_language()==$lang['code']); + $iclresponse .= '
            • switch_locale($lang['code']); + $tr_cat = __('Uncategorized', 'sitepress'); + $this->switch_locale(); + if($tr_cat == 'Uncategorized') $tr_cat .= ' @' . $lang['code']; + }else{ + $tr_cat = $default_category_main . ' @' . $lang['code']; + } + $_POST['icl_trid'] = $default_category_trid; + $_POST['icl_tax_category_language'] = $lang['code']; + + $tmp = term_exists($tr_cat, 'category'); + if(!$tmp){ + $tmp = wp_insert_term($tr_cat, 'category'); + } + $default_categories[$lang['code']] = $tmp['term_taxonomy_id']; + } + } + $this->set_default_categories($default_categories) ; + + $resp[1] = $iclresponse; + // response 1 - blog got more than 2 languages; -1 blog reduced to 1 language; 0 - no change + if(count($lang_codes) > 1){ + if(empty($this->settings['setup_complete'])){ + $resp[2] = -2; //don't refresh the page and enable 'next' + }else{ + $resp[2] = 1; + } + }elseif($old_active_languages_count > 1 && count($lang_codes) < 2){ + if(!$this->settings['setup_complete']){ + $resp[2] = -3; //don't refresh the page and disable 'next' + }else{ + $resp[2] = -1; + } + }else{ + if(!$this->settings['setup_complete']){ + $resp[2] = -3; //don't refresh the page and disable 'next' + }else{ + $resp[2] = 0; + } + } + if(count($active_langs) > 1){ + $iclsettings['dont_show_help_admin_notice'] = true; + $this->save_settings($iclsettings); + } + }else{ + $resp[0] = 0; + } + + if(empty($iclsettings['setup_complete'])){ + $iclsettings['setup_wizard_step'] = 3; + $this->save_settings($iclsettings); + } + + echo join('|',$resp); + do_action('icl_update_active_languages'); + break; + case 'set_default_language': + $previous_default = $this->get_default_language(); + if($response = $this->set_default_language($_POST['lang'])){ + echo '1|'.$previous_default.'|'; + }else{ + echo'0||' ; + } + if(1 === $response){ + echo __('WordPress language file (.mo) is missing. Keeping existing display language.', 'sitepress'); + } + break; + case 'set_languages_order': + $iclsettings['languages_order'] = explode(';', $_POST['order']); + $this->save_settings($iclsettings); + echo json_encode(array('message' => __('Languages order updated', 'sitepress'))); + break; + case 'icl_tdo_options': + $iclsettings['translated_document_status'] = intval($_POST['icl_translated_document_status']); + $iclsettings['translated_document_page_url'] = $_POST['icl_translated_document_page_url']; + $this->save_settings($iclsettings); + echo '1|'; + break; + case 'icl_save_language_negotiation_type': + $iclsettings['language_negotiation_type'] = $_POST['icl_language_negotiation_type']; + if(!empty($_POST['language_domains'])){ + $iclsettings['language_domains'] = $_POST['language_domains']; + } + if($iclsettings['language_negotiation_type'] == 1){ + $iclsettings['urls']['directory_for_default_language'] = isset($_POST['use_directory']) ? intval($_POST['use_directory']) : 0; + if($iclsettings['urls']['directory_for_default_language']){ + $iclsettings['urls']['show_on_root'] = isset($_POST['use_directory']) ? $_POST['show_on_root'] : ''; + if($iclsettings['urls']['show_on_root'] == 'html_file'){ + $iclsettings['urls']['root_html_file_path'] = isset($_POST['root_html_file_path']) ? $_POST['root_html_file_path'] : ''; + }else{ + $iclsettings['urls']['hide_language_switchers'] = isset($_POST['hide_language_switchers']) ? $_POST['hide_language_switchers'] : 0; + } + } + } + $this->save_settings($iclsettings); + echo 1; + break; + case 'icl_save_language_switcher_options': + $_POST = stripslashes_deep( $_POST ); + if(isset($_POST['icl_language_switcher_sidebar'])){ + global $wp_registered_widgets, $wp_registered_sidebars; + $swidgets = wp_get_sidebars_widgets(); + if(empty($swidgets)){ + $sidebars = array_keys($wp_registered_sidebars); + foreach($sidebars as $sb){ + $swidgets[$sb] = array(); + } + } + foreach($swidgets as $k=>$v){ + $key = array_search('icl_lang_sel_widget',(array)$swidgets[$k]); + if(false !== $key && $k !== $_POST['icl_language_switcher_sidebar']){ + unset($swidgets[$k][$key]); + }elseif($k==$_POST['icl_language_switcher_sidebar'] && !in_array('icl_lang_sel_widget',$swidgets[$k])){ + $swidgets[$k] = array_reverse($swidgets[$k], false); + array_push($swidgets[$k],'icl_lang_sel_widget'); + $swidgets[$k] = array_reverse($swidgets[$k], false); + } + } + wp_set_sidebars_widgets($swidgets); + } + $iclsettings['icl_lso_link_empty'] = @intval($_POST['icl_lso_link_empty']); + $iclsettings['icl_lso_flags'] = isset($_POST['icl_lso_flags']) ? @intval($_POST['icl_lso_flags']) : 0; + $iclsettings['icl_lso_native_lang'] = @intval($_POST['icl_lso_native_lang']); + $iclsettings['icl_lso_display_lang'] = @intval($_POST['icl_lso_display_lang']); + + if(empty($this->settings['setup_complete'])){ + $iclsettings['setup_wizard_step'] = 3; + $iclsettings['setup_complete'] = 1; + + $active_languages = $this->get_active_languages(); + $default_language = $this->get_default_language(); + foreach($active_languages as $code=>$lng){ + if($code != $default_language){ + if($this->_validate_language_per_directory($code)){ + $iclsettings['language_negotiation_type'] = 1; + } + break; + } + } + + } + + if(isset($_POST['icl_lang_sel_config'])){ + $iclsettings['icl_lang_sel_config'] = $_POST['icl_lang_sel_config']; + } + + if(isset($_POST['icl_lang_sel_footer_config'])){ + $iclsettings['icl_lang_sel_footer_config'] = $_POST['icl_lang_sel_footer_config']; + } + + if (isset($_POST['icl_lang_sel_type'])) + $iclsettings['icl_lang_sel_type'] = $_POST['icl_lang_sel_type']; + if (isset($_POST['icl_lang_sel_stype'])) + $iclsettings['icl_lang_sel_stype'] = $_POST['icl_lang_sel_stype']; + + if($iclsettings['icl_lang_sel_type'] == 'list'){ + $iclsettings['icl_lang_sel_orientation'] = $_POST['icl_lang_sel_orientation']; + } + + if (isset($_POST['icl_lang_sel_footer'])) + $iclsettings['icl_lang_sel_footer'] = 1; + else $iclsettings['icl_lang_sel_footer'] = 0; + + if (isset($_POST['icl_post_availability'])) + $iclsettings['icl_post_availability'] = 1; + else $iclsettings['icl_post_availability'] = 0; + + if (isset($_POST['icl_post_availability_position'])) + $iclsettings['icl_post_availability_position'] = $_POST['icl_post_availability_position']; + + if (isset($_POST['icl_post_availability_text'])) + $iclsettings['icl_post_availability_text'] = $_POST['icl_post_availability_text']; + + $iclsettings['icl_widget_title_show'] = (isset($_POST['icl_widget_title_show'])) ? 1 : 0; + $iclsettings['icl_additional_css'] = $_POST['icl_additional_css']; + + $iclsettings['display_ls_in_menu'] = @intval($_POST['display_ls_in_menu']); + $iclsettings['menu_for_ls'] = @intval($_POST['menu_for_ls']); + + $iclsettings['icl_lang_sel_copy_parameters'] = join(', ', array_map('trim', explode(',', $_POST['copy_parameters']))); + + if(!$iclsettings['icl_lso_flags'] && !$iclsettings['icl_lso_native_lang'] && !$iclsettings['icl_lso_display_lang']){ + echo '0|'; + echo __('At least one of the language switcher style options needs to be checked', 'sitepress'); + }else{ + $this->save_settings($iclsettings); + echo 1; + } + break; + case 'icl_admin_language_options': + $iclsettings['admin_default_language'] = $_POST['icl_admin_default_language']; + $this->save_settings($iclsettings); + $this->icl_locale_cache->clear(); + echo 1; + break; + case 'icl_blog_posts': + $iclsettings['show_untranslated_blog_posts'] = $_POST['icl_untranslated_blog_posts']; + $this->save_settings($iclsettings); + echo 1; + break; + case 'icl_page_sync_options': + $iclsettings['sync_page_ordering'] = @intval($_POST['icl_sync_page_ordering']); + $iclsettings['sync_page_parent'] = @intval($_POST['icl_sync_page_parent']); + $iclsettings['sync_page_template'] = @intval($_POST['icl_sync_page_template']); + $iclsettings['sync_comment_status'] = @intval($_POST['icl_sync_comment_status']); + $iclsettings['sync_ping_status'] = @intval($_POST['icl_sync_ping_status']); + $iclsettings['sync_sticky_flag'] = @intval($_POST['icl_sync_sticky_flag']); + $iclsettings['sync_private_flag'] = @intval($_POST['icl_sync_private_flag']); + $iclsettings['sync_post_format'] = @intval($_POST['icl_sync_post_format']); + $iclsettings['sync_delete'] = @intval($_POST['icl_sync_delete']); + $iclsettings['sync_delete_tax'] = @intval($_POST['icl_sync_delete_tax']); + $iclsettings['sync_post_taxonomies'] = @intval($_POST['icl_sync_post_taxonomies']); + $iclsettings['sync_post_date'] = @intval($_POST['icl_sync_post_date']); + $iclsettings['sync_taxonomy_parents'] = @intval($_POST['icl_sync_taxonomy_parents']); + $iclsettings['sync_comments_on_duplicates'] = @intval($_POST['icl_sync_comments_on_duplicates']); + $this->save_settings($iclsettings); + echo 1; + break; + case 'language_domains': + $active_languages = $this->get_active_languages(); + $default_language = $this->get_default_language(); + $iclsettings = $this->get_settings(); + $language_domains = isset($iclsettings['language_domains']) ? $iclsettings['language_domains'] : false; + echo ''; + foreach($active_languages as $lang){ + $home = get_option('home'); + if($lang['code']!=$default_language){ + if(isset($language_domains[$lang['code']])){ + $sugested_url = $language_domains[$lang['code']]; + }else{ + $url_parts = parse_url($home); + $exp = explode('.' , $url_parts['host']); + if(count($exp) < 3){ + $sugested_url = $url_parts['scheme'] . '://' . $lang['code'] . '.' . $url_parts['host'] . @strval($url_parts['path']); + }else{ + array_shift($exp); + $sugested_url = $url_parts['scheme'] . '://' . $lang['code'] . '.' . join('.' , $exp) . @strval($url_parts['path']); + } + } + } + + echo ''; + echo ''; + if($lang['code']==$default_language){ + echo ''; + echo ''; + echo ''; + }else{ + echo ''; + echo ''; + } + echo ''; + } + echo '
              ' . $lang['display_name'] . '' . $home . '  
              '; + break; + case 'validate_language_domain': + if(false === strpos($_POST['url'],'?')){$url_glue='?';}else{$url_glue='&';} + $url = $_POST['url'] . $url_glue . '____icl_validate_domain=1'; + $client = new WP_Http(); + $response = $client->request($url, 'timeout=15'); + if(!is_wp_error($response) && ($response['response']['code']=='200') && ($response['body'] == '')){ + echo 1; + }else{ + echo 0; + } + break; + case 'send_translation_request': + + global $iclTranslationManagement, $current_user; + $post_ids = explode(',',$_POST['post_ids']); + $target_languages = explode('#', $_POST['target_languages']); + $target_translators = explode('#', $_POST['translators']); + $post_types = $_POST['icl_post_type']; + + get_currentuserinfo(); + $translator_id = isset($_POST['translator_id']) ? $_POST['translator_id'] : $current_user->ID; + foreach($post_ids as $post_id){ + + if(isset($_POST['tn_note_'.$post_id]) && trim($_POST['tn_note_'.$post_id])){ + update_post_meta($post_id, '_icl_translator_note', $_POST['tn_note_'.$post_id]); + } + foreach($target_languages as $to_lang){ + $from_lang = $wpdb->get_var($wpdb->prepare("SELECT language_code FROM {$wpdb->prefix}icl_translations WHERE element_id=%d AND element_type=%s", + $post_id, 'post_'.$post_types[$post_id])); + + foreach($target_languages as $index => $_lg){ + $translator[$_lg] = preg_replace('#-'.$_POST['service'].'$#', '', $target_translators[$index]) ; + } + + $data = array( + 'translate_from' => $from_lang, + 'translate_to' => array($to_lang=>1), + 'iclpost' => array($post_id), + 'service' => 'icanlocalize', + 'iclnonce' => wp_create_nonce('pro-translation-icl'), + 'translator' => $translator + ); + + $jd = $iclTranslationManagement->send_jobs($data); + $resp[] = array( + 'post_id' => $post_id, + 'status' => !empty($jd) + ); + } + /* + $resp[] = array( + 'post_id'=>$post_id, + 'status'=>$ICL_Pro_Translation->send_post($post_id, $target_languages, $translator_id) + ); + */ + } + echo json_encode($resp); + break; + case 'get_translator_status': + if(!$this->icl_account_configured()) break; + + $iclsettings = $this->get_settings(); + + if(isset($_POST['cache'])) { + $last_call = @intval($iclsettings['last_get_translator_status_call']); + if (time() - $last_call < 24 * 60 * 60) { + break; + } + } + + $iclsettings['last_get_translator_status_call'] = time(); + $this->get_icl_translator_status($iclsettings); + $this->save_settings($iclsettings); + + echo @json_encode($iclsettings['icl_lang_status']); + break; + + case 'get_language_status_text': + + if(!$this->icl_account_configured()) break; + + $iclsettings = $this->get_settings(); + + if(!isset($_POST['cache'])) { + $iclsettings = $this->get_settings(); + $this->get_icl_translator_status($iclsettings); + $this->save_settings($iclsettings); + } + + echo '1|' . intval($_POST['id']) . '|' . $this->get_language_status_text($_POST['from_lang'], $_POST['to_lang']); + break; + /* + case 'set_post_to_date': + $nid = (int) $_POST['post_id']; + $md5 = $wpdb->get_var("SELECT md5 FROM {$wpdb->prefix}icl_node WHERE nid={$nid}"); + $wpdb->query("UPDATE {$wpdb->prefix}icl_content_status SET md5 = '{$md5}' WHERE nid='{$nid}'"); + echo __('Needs update','sitepress'); + echo '|'; + echo __('Complete','sitepress'); + break; + */ + case 'icl_theme_localization_type': + $icl_tl_type = @intval($_POST['icl_theme_localization_type']); + $iclsettings['theme_localization_type'] = $icl_tl_type; + $iclsettings['theme_localization_load_textdomain'] = @intval($_POST['icl_theme_localization_load_td']); + $iclsettings['gettext_theme_domain_name'] = $_POST['textdomain_value']; + if($icl_tl_type==1){ + icl_st_scan_theme_files(); + }elseif($icl_tl_type==2){ + $parent_theme = get_template_directory(); + $child_theme = get_stylesheet_directory(); + $languages_folders = array(); + + if($found_folder = icl_tf_determine_mo_folder($parent_theme)){ + $languages_folders['parent'] = $found_folder; + } + if($parent_theme != $child_theme && $found_folder = icl_tf_determine_mo_folder($child_theme)){ + $languages_folders['child'] = $found_folder; + } + $iclsettings['theme_language_folders'] = $languages_folders; + + } + $this->save_settings($iclsettings); + echo '1|'.$icl_tl_type; + break; + + case 'icl_ct_user_pref': + $users = $wpdb->get_col("SELECT id FROM {$wpdb->users}"); + foreach($users as $uid){ + if(isset($_POST['icl_enable_comments_translation'][$uid])){ + update_user_meta($uid, 'icl_enable_comments_translation', 1); + }else{ + delete_user_meta($uid, 'icl_enable_comments_translation'); + } + if(isset($_POST['icl_enable_replies_translation'][$uid])){ + update_user_meta($uid, 'icl_enable_replies_translation', 1); + }else{ + delete_user_meta($uid, 'icl_enable_replies_translation'); + } + } + echo '1|'; + break; + case 'get_original_comment': + $comment_id = $_POST['comment_id']; + $trid = $this->get_element_trid($comment_id, 'comment'); + $res = $wpdb->get_row($wpdb->prepare("SELECT element_id, language_code FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND element_type='comment' AND element_id <> %d ", $trid, $comment_id)); + $original_cid = $res->element_id; + $comment = $wpdb->get_row("SELECT * FROM {$wpdb->comments} WHERE comment_ID={$original_cid}"); + $comment->language_code = $res->language_code; + if($res->language_code == $IclCommentsTranslation->user_language){ + $comment->translated_version = 1; + }else{ + $comment->translated_version = 0; + $comment->anchor_text = __('Back to translated version', 'sitepress'); + } + echo json_encode($comment); + break; + case 'dismiss_help': + $iclsettings['dont_show_help_admin_notice'] = true; + $this->save_settings($iclsettings); + break; + case 'dismiss_page_estimate_hint': + $iclsettings['dismiss_page_estimate_hint'] = !$this->settings['dismiss_page_estimate_hint']; + $this->save_settings($iclsettings); + break; + case 'toggle_pt_controls': + $iclsettings['hide_professional_translation_controls'] = $_POST['value']; + $this->save_settings($iclsettings); + break; + case 'dismiss_upgrade_notice': + $iclsettings['hide_upgrade_notice'] = implode('.', array_slice(explode('.', ICL_SITEPRESS_VERSION), 0, 3)); + $this->save_settings($iclsettings); + break; + case 'setup_got_to_step1': + $iclsettings['existing_content_language_verified'] = 0; + $iclsettings['setup_wizard_step'] = 1; + $wpdb->query("TRUNCATE TABLE {$wpdb->prefix}icl_translations"); + $wpdb->update($wpdb->prefix . 'icl_languages', array('active' => 0), array('active' => 1)); + $this->save_settings($iclsettings); + + break; + case 'setup_got_to_step2': + $iclsettings['setup_wizard_step'] = 2; + $this->save_settings($iclsettings); + break; + case 'toggle_show_translations': + $iclsettings = $this->get_settings(); + $iclsettings['show_translations_flag'] = @intval(!$iclsettings['show_translations_flag']); + $this->save_settings($iclsettings); + break; + case 'icl_messages': + $iclsettings = $this->get_settings(); + + if(!empty($this->settings['icl_disable_reminders'])) break; + + if(!empty($iclsettings['site_id']) && !empty($iclsettings['access_key']) && empty($iclsettings['icl_anonymous_user'])){ + $iclq = new ICanLocalizeQuery($iclsettings['site_id'], $iclsettings['access_key']); + + $output = ''; + + if (isset($_POST['refresh']) && $_POST['refresh'] == 1) { + $reminders = $iclq->get_reminders(true); + } else { + $reminders = $iclq->get_reminders(); + } + + $count = 0; + foreach($reminders as $r) { + $message = $r->message; + $message = str_replace('[', '<', $message); + $message = str_replace(']', '>', $message); + $url = $r->url; + $anchor_pos = strpos($url, '#'); + if ($anchor_pos !== false) { + $url = substr($url, 0, $anchor_pos); + } + + if(false !== strpos($url,'?')){ + $url_glue = '&'; + }else{ + $url_glue = '?accesskey='.$this->settings['access_key'] . '&compact=1'; + } + $output .= $message . ' - ' . $this->create_icl_popup_link(ICL_API_ENDPOINT. $url . $url_glue . '&message_id=' . $r->id. '&TB_iframe=true') . __('View', 'sitepress') . ''; + + if ($r->can_delete == '1') { + $on_click = 'dismiss_message(' . $r->id . ', \'' . wp_create_nonce('icl_delete_message_nonce') . '\');'; + + $output .= ' - Dismiss'; + } + $output .= '
              '; + + $count += 1; + if ($count > 5) { + break; + } + + } + + if ($output != '') { + $reminder_count = sizeof($reminders); + if ($reminder_count == 1){ + $reminder_text = __('Show 1 reminder', 'sitepress'); + } else { + $reminder_text = sprintf(__('Show %d reminders', 'sitepress'), $reminder_count); + } + $resp = array('messages'=>$reminder_count, 'reminder_text' => $reminder_text, 'output'=>$output); + } else { + $resp = array('messages'=>0); + } + }else{ + $resp = array('messages'=>0); + } + echo json_encode($resp); + break; + + case 'icl_delete_message': + $iclsettings = $this->get_settings(); + $iclq = new ICanLocalizeQuery($iclsettings['site_id'], $iclsettings['access_key']); + $iclq->delete_message($_POST['message_id']); + break; + case 'icl_show_reminders': + switch($_POST['state']){ + case 'show': + $iclsettings['icl_show_reminders'] = 1; + break; + case 'hide': + $iclsettings['icl_show_reminders'] = 0; + break; + case 'close': + $iclsettings['icl_disable_reminders'] = 1; + break; + default: // nothing + } + $iclsettings['icl_show_reminders'] = $_POST['state']=='show'?1:0; + $this->save_settings($iclsettings); + break; + + case 'icl_help_links': + $iclsettings = $this->get_settings(); + $iclq = new ICanLocalizeQuery($iclsettings['site_id'], $iclsettings['access_key']); + $links = $iclq->get_help_links(); + $lang = $iclsettings['admin_default_language']; + if (!isset($links['resources'][$lang])) { + $lang = 'en'; + } + + if (isset($links['resources'][$lang])) { + $output = '
                '; + foreach( $links['resources'][$lang]['resource'] as $resource) { + if (isset($resource['attr'])) { + $title = $resource['attr']['title']; + $url = $resource['attr']['url']; + $icon = $resource['attr']['icon']; + $icon_width = $resource['attr']['icon_width']; + $icon_height = $resource['attr']['icon_height']; + } else { + $title = $resource['title']; + $url = $resource['url']; + $icon = $resource['icon']; + $icon_width = $resource['icon_width']; + $icon_height = $resource['icon_height']; + } + $output .= '
              • '; + if ($icon) { + $output .= '' . $title . '
              • '; + + } + $output .= '
              '; + echo '1|' . $output; + } else { + echo '0|'; + } + break; + + case 'icl_show_sidebar': + $iclsettings['icl_sidebar_minimized'] = $_POST['state']=='hide'?1:0; + $this->save_settings($iclsettings); + break; + + case 'icl_promote_form': + $iclsettings['promote_wpml'] = @intval($_POST['icl_promote']); + $this->save_settings($iclsettings); + echo '1|'; + break; + + case 'save_translator_note': + update_post_meta($_POST['post_id'], '_icl_translator_note', $_POST['note']); + break; + case 'icl_st_track_strings': + foreach($_POST['icl_st'] as $k=>$v){ + $iclsettings['st'][$k] = $v; + } + $this->save_settings($iclsettings); + echo 1; + break; + case 'icl_st_more_options': + $iclsettings['st']['translated-users'] = !empty($_POST['users']) ? array_keys($_POST['users']) : array(); + $this->save_settings($iclsettings); + if(!empty($iclsettings['st']['translated-users'])){ + global $sitepress_settings; + $sitepress_settings['st']['translated-users'] = $iclsettings['st']['translated-users']; + icl_st_register_user_strings_all(); + } + echo 1; + break; + + case 'icl_st_ar_form': + // Auto register string settings. + $iclsettings['st']['icl_st_auto_reg'] = $_POST['icl_auto_reg_type']; + $this->save_settings($iclsettings); + echo 1; + break; + + case 'affiliate_info_check': + if( $this->icl_account_configured() + && ($iclq = new ICanLocalizeQuery($this->settings['site_id'], $this->settings['access_key'])) + && $iclq->test_affiliate_info($_POST['icl_affiliate_id'], $_POST['icl_affiliate_key'])){ + $error = array('error'=>0); + }else{ + $error = array('error'=>1); + } + echo json_encode($error); + break; + + case 'icl_hide_languages': + $iclsettings['hidden_languages'] = empty($_POST['icl_hidden_languages']) ? array() : $_POST['icl_hidden_languages']; + $this->settings['hidden_languages'] = array(); //reset current value + $active_languages = $this->get_active_languages(); + if(!empty($iclsettings['hidden_languages'])){ + if(1 == count($iclsettings['hidden_languages'])){ + $out = sprintf(__('%s is currently hidden to visitors.', 'sitepress'), + $active_languages[$iclsettings['hidden_languages'][0]]['display_name']); + }else{ + foreach($iclsettings['hidden_languages'] as $l){ + $_hlngs[] = $active_languages[$l]['display_name']; + } + $hlangs = join(', ', $_hlngs); + $out = sprintf(__('%s are currently hidden to visitors.', 'sitepress'), $hlangs); + } + $out .= ' ' . sprintf(__('You can enable its/their display for yourself, in your profile page.', 'sitepress'), + 'profile.php#wpml'); + } else { + $out = __('All languages are currently displayed.', 'sitepress'); + } + $this->save_settings($iclsettings); + echo '1|'.$out; + break; + + case 'icl_adjust_ids': + $iclsettings['auto_adjust_ids'] = @intval($_POST['icl_adjust_ids']); + $this->save_settings($iclsettings); + echo '1|'; + break; + + case 'icl_automatic_redirect': + $iclsettings['automatic_redirect'] = @intval($_POST['icl_automatic_redirect']); + $iclsettings['remember_language'] = @intval($_POST['icl_remember_language']); + $this->save_settings($iclsettings); + echo '1|'; + break; + + case 'icl_troubleshooting_more_options': + $iclsettings['troubleshooting_options'] = $_POST['troubleshooting_options']; + $this->save_settings($iclsettings); + echo '1|'; + break; + + + case 'reset_languages': + require_once(ICL_PLUGIN_PATH . '/inc/lang-data.php'); + + $active = $wpdb->get_col("SELECT code FROM {$wpdb->prefix}icl_languages WHERE active = 1"); + + mysql_query("TRUNCATE TABLE `{$wpdb->prefix}icl_languages`"); + mysql_query("TRUNCATE TABLE `{$wpdb->prefix}icl_languages_translations`"); + mysql_query("TRUNCATE TABLE `{$wpdb->prefix}icl_flags`"); + + foreach($langs_names as $key=>$val){ + if(strpos($key,'Norwegian Bokm')===0){ $key = 'Norwegian Bokmål'; $lang_codes[$key] = 'nb';} // exception for norwegian + $default_locale = isset($lang_locales[$lang_codes[$key]]) ? $lang_locales[$lang_codes[$key]] : ''; + @$wpdb->insert($wpdb->prefix . 'icl_languages', array('english_name'=>$key, 'code'=>$lang_codes[$key], 'major'=>$val['major'], 'active'=>0, 'default_locale'=>$default_locale)); + } + + //restore active + $wpdb->query("UPDATE {$wpdb->prefix}icl_languages SET active=1 WHERE code IN('".join("','",$active)."')"); + + foreach($langs_names as $lang=>$val){ + if(strpos($lang,'Norwegian Bokm')===0){ $lang = 'Norwegian Bokmål'; $lang_codes[$lang] = 'nb';} + foreach($val['tr'] as $k=>$display){ + if(strpos($k,'Norwegian Bokm')===0){ $k = 'Norwegian Bokmål';} + if(!trim($display)){$display = $lang;} + if(!($wpdb->get_var("SELECT id FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='{$lang_codes[$lang]}' AND display_language_code='{$lang_codes[$k]}'"))){ + $wpdb->insert($wpdb->prefix . 'icl_languages_translations', + array('language_code'=>$lang_codes[$lang], 'display_language_code'=>$lang_codes[$k], 'name'=>$display)); + } + } + } + $wpdb->update($wpdb->prefix.'icl_flags', array('from_template'=>0),null); + + $codes = $wpdb->get_col("SELECT code FROM {$wpdb->prefix}icl_languages"); + foreach($codes as $code){ + if(!$code || $wpdb->get_var("SELECT lang_code FROM {$wpdb->prefix}icl_flags WHERE lang_code='{$code}'")) continue; + if(!file_exists(ICL_PLUGIN_PATH.'/res/flags/'.$code.'.png')){ + $file = 'nil.png'; + }else{ + $file = $code.'.png'; + } + $wpdb->insert($wpdb->prefix.'icl_flags', array('lang_code'=>$code, 'flag'=>$file, 'from_template'=>0)); + } + + icl_cache_clear(); + break; + case 'icl_support_update_ticket': + if (isset($_POST['ticket'])) { + $temp = str_replace('icl_support_ticket_', '', $_POST['ticket']); + $temp = explode('_', $temp); + $id = (int)$temp[0]; + $num = (int)$temp[1]; + if ($id && $num) { + if (isset($iclsettings['icl_support']['tickets'][$id])) { + $iclsettings['icl_support']['tickets'][$id]['messages'] = $num; + $this->save_settings($iclsettings); + } + } + } + break; + case 'icl_custom_tax_sync_options': + if(!empty($_POST['icl_sync_tax'])){ + foreach($_POST['icl_sync_tax'] as $k=>$v){ + $iclsettings['taxonomies_sync_option'][$k] = $v; + if($v){ + $this->verify_taxonomy_translations($k); + } + } + $this->save_settings($iclsettings); + } + echo '1|'; + break; + case 'icl_custom_posts_sync_options': + + if(!empty($_POST['icl_sync_custom_posts'])){ + foreach($_POST['icl_sync_custom_posts'] as $k=>$v){ + $iclsettings['custom_posts_sync_option'][$k] = $v; + if($v){ + $this->verify_post_translations($k); + } + } + + if($this->settings['posts_slug_translation']['on']){ + if(isset($_POST['translate_slugs']) && !empty($_POST['translate_slugs'])){ + + foreach($_POST['translate_slugs'] as $type => $data){ + + if(empty($_POST['icl_sync_custom_posts'][$type])) continue; + + $iclsettings['posts_slug_translation']['types'][$type] = intval(!empty($data['on'])); + + if(empty($iclsettings['posts_slug_translation']['types'][$type])) continue; + + // assume it is already registered + $post_type_obj = get_post_type_object($type); + $slug = $post_type_obj->rewrite['slug']; + $string_id = $wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->prefix}icl_strings WHERE name = %s AND value = %s ", 'URL slug: ' . $slug, $slug)); + if(empty($string_id)){ + $string_id = icl_register_string('WordPress', 'URL slug: ' . $slug, $slug); + } + if($string_id){ + foreach($this->get_active_languages() as $lang){ + if($lang['code'] != $this->settings['st']['strings_language']){ + + // allow '/' in slugs + //$data['langs'][$lang['code']] = sanitize_title_with_dashes($data['langs'][$lang['code']]); + $data['langs'][$lang['code']] = join('/', array_map('sanitize_title_with_dashes', explode('/', $data['langs'][$lang['code']]))); + $data['langs'][$lang['code']] = urldecode($data['langs'][$lang['code']]); + icl_add_string_translation($string_id, $lang['code'], $data['langs'][$lang['code']] , ICL_STRING_TRANSLATION_COMPLETE); + } + } + icl_update_string_status($string_id); + } + } + } + } + + $this->save_settings($iclsettings); + } + echo '1|'; + break; + + case 'copy_from_original': + $post_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND language_code=%s", $_POST['trid'], $_POST['lang'])); + $post = get_post($post_id); + + $error = false; + $json = array(); + if(!empty($post)){ + if($_POST['editor_type'] == 'rich'){ + $json['body'] = htmlspecialchars_decode(wp_richedit_pre($post->post_content)); + }else{ + $json['body'] = htmlspecialchars_decode(wp_htmledit_pre($post->post_content)); + } + + }else{ + $json['error'] = __('Post not found', 'sitepress'); + } + do_action('icl_copy_from_original', $post_id); + echo json_encode($json); + break; + + case 'save_user_preferences': + $this->user_preferences = array_merge_recursive((array)$this->user_preferences, $_POST['user_preferences']); + $this->save_user_preferences(); + break; + + case 'wpml_cf_translation_preferences': + if (empty($_POST['custom_field'])) { + echo '' + . __('Error: No custom field', 'wpml') . ''; + die(); + } + $_POST['custom_field'] = @strval($_POST['custom_field']); + if (!isset($_POST['translate_action'])) { + echo '' + . __('Error: Please provide translation action', 'wpml') . ''; + die(); + } + $_POST['translate_action'] = @intval($_POST['translate_action']); + if (defined('WPML_TM_VERSION')) { + global $iclTranslationManagement; + if (!empty($iclTranslationManagement)) { + $iclTranslationManagement->settings['custom_fields_translation'][$_POST['custom_field']] = $_POST['translate_action']; + $iclTranslationManagement->save_settings(); + echo '' . __('Settings updated', 'wpml') . ''; + } else { + echo '' + . __('Error: WPML Translation Management plugin not initiated', 'wpml') + . ''; + } + } else { + echo '' + . __('Error: Please activate WPML Translation Management plugin', 'wpml') + . ''; + } + break; + + case 'icl_seo_options': + $iclsettings['seo']['head_langs'] = isset($_POST['icl_seo_head_langs']) ? intval($_POST['icl_seo_head_langs']) : 0; + $iclsettings['seo']['canonicalization_duplicates'] = isset($_POST['icl_seo_canonicalization_duplicates']) ? intval($_POST['icl_seo_canonicalization_duplicates']) : 0; + $this->save_settings($iclsettings); + echo '1|'; + break; + + case 'dismiss_object_cache_warning': + $iclsettings['dismiss_object_cache_warning'] = true; + $this->save_settings($iclsettings); + echo '1|'; + break; + + + case 'update_option': + $iclsettings[$_REQUEST['option']] = $_REQUEST['value']; + $this->save_settings($iclsettings); + break; + + case 'get_browser_language': + $http_accept_language = $_SERVER[ 'HTTP_ACCEPT_LANGUAGE' ]; + $accepted_languages = explode(';', $http_accept_language); + $default_accepted_language = $accepted_languages[0]; + $default_accepted_language_codes = explode(',', $default_accepted_language); + echo strtolower($default_accepted_language_codes[0]); + break; + + default: + do_action('icl_ajx_custom_call', $_REQUEST['icl_ajx_action'], $_REQUEST); +} + +if (!isset($_POST['unit-test'])) { + exit; +} diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/docs/slug-translation.txt b/src/wp-content/plugins/sitepress-multilingual-cms/docs/slug-translation.txt new file mode 100644 index 0000000..83a15ba --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/docs/slug-translation.txt @@ -0,0 +1,26 @@ +The code for the slug translation feature is located in the WPML String Translation plugin inc/slug-translation.php + + +1.How urls are being decoded + +In the rewrite rules array from WordPress, we expect that the rules that are relevant to the custom post for which we want to use the slug translation use the slug in the strings language. +If we have a site in which English is the default language and French is the translated language and a url like this: + +http://example.com/livre/french-livre + +In this example the slug is 'book' and the translated slug is 'livre'. + +The function WPML_Slug_Translation::rewrite_rules_filter filters the rewrite rules and replaces all ocurrences of 'book' with 'livre'. This way the url will resolve to the correct post type. + +2. How permalinks are generated + +On a translated page, a url of a post in the same language is being generated thanks to: +filter::filters_gettext_with_context + +This is responsible for changing slug used in the custom post registration (e.g. _x('book', 'Url slug', 'some-theme')) into the translated value (in this case 'livre'). +Beside this it's the normal WordPress process for generating a url. + +A special case is the one of displaying a url of a post in a different language than the current language. +In this case the function WPML_Slug_Translation::post_type_link_filter handles the filtering of the rewrite logic in WordPress. + +It temporarily replaces the post type slug from the version in the current language into the translation in the language of the post for which we need to get the url. \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/docs/theme-integration/readme.txt b/src/wp-content/plugins/sitepress-multilingual-cms/docs/theme-integration/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/docs/theme-integration/wpml-integration.php b/src/wp-content/plugins/sitepress-multilingual-cms/docs/theme-integration/wpml-integration.php new file mode 100644 index 0000000..300bdca --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/docs/theme-integration/wpml-integration.php @@ -0,0 +1,166 @@ +'.$l['translated_name'].''; + } + echo join(', ', $langs); + echo isset($after) ? $after : ''; + } + } +} + + +// LINKS TO SPECIFIC ELEMENTS +// USAGE +// args: $element_id, $element_type='post', $link_text='', $optional_parameters=array(), $anchor='', $echoit = true +function wpml_link_to_element($element_id, $element_type='post', $link_text='', $optional_parameters=array(), $anchor='', $echoit = true){ + if(!function_exists('icl_link_to_element')){ + switch($element_type){ + case 'post': + case 'page': + $ret = ''; + if($anchor){ + $ret .= $anchor; + }else{ + $ret .= get_the_title($element_id); + } + $ret .= ''; + break; + case 'tag': + case 'post_tag': + $tag = get_term_by('id', $element_id, 'tag', ARRAY_A); + $ret = '' . $tag->name . ''; + case 'category': + $ret = '' . get_the_category_by_ID($element_id) . ''; + default: $ret = ''; + } + if($echoit){ + echo $ret; + }else{ + return $ret; + } + }else{ + return icl_link_to_element($element_id, $element_type, $link_text, $optional_parameters, $anchor, $echoit); + } +} + +// Languages links to display in the footer +// +function wpml_languages_list($skip_missing=0, $div_id = "footer_language_list"){ + if(function_exists('icl_get_languages')){ + $languages = icl_get_languages('skip_missing='.intval($skip_missing)); + if(!empty($languages)){ + echo '
              '; + } + } +} + +function wpml_languages_selector(){ + do_action('icl_language_selector'); +} + +function wpml_t($context, $name, $original_value){ + if(function_exists('icl_t')){ + return icl_t($context, $name, $original_value); + }else{ + return $original_value; + } +} + +function wpml_register_string($context, $name, $value){ + if(function_exists('icl_register_string') && trim($value)){ + icl_register_string($context, $name, $value); + } +} + +function wpml_get_object_id($element_id, $element_type='post', $return_original_if_missing=false, $ulanguage_code=null){ + if(function_exists('icl_object_id')){ + return icl_object_id($element_id, $element_type, $return_original_if_missing, $ulanguage_code); + }else{ + return $element_id; + } +} + +function wpml_default_link($anchor){ + global $sitepress; + $qv = false; + + if(is_single()){ + $qv = 'p=' . get_the_ID(); + }elseif(is_page()){ + $qv = 'page_id=' . get_the_ID(); + }elseif(is_tag()){ + $tag = &get_term(intval( get_query_var('tag_id') ), 'post_tag', OBJECT, 'display'); + $qv = 'tag=' . $tag->slug; + }elseif(is_category()){ + $qv = 'cat=' . get_query_var('cat'); + }elseif(is_year()){ + $qv = 'year=' . get_query_var('year'); + }elseif(is_month()){ + $qv = 'm=' . get_query_var('year') . sprintf('%02d', get_query_var('monthnum')); + }elseif(is_day()){ + $qv = 'm=' . get_query_var('year') . sprintf('%02d', get_query_var('monthnum')) . sprintf('%02d', get_query_var('day')); + }elseif(is_search()){ + $qv = 's=' . get_query_var('s'); + }elseif(is_tax()){ + $qv = get_query_var('taxonomy') . '=' . get_query_var('term'); + } + + if(false !== strpos(wpml_get_home_url(),'?')){ + $url_glue = '&'; + }else{ + $url_glue = '?'; + } + + if($qv){ + $link = '' . esc_html($anchor) . ''; + }else{ + $link = ''; + } + + return $link; +} + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/absolute-links/absolute-links.class.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/absolute-links/absolute-links.class.php new file mode 100644 index 0000000..5c87bc5 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/absolute-links/absolute-links.class.php @@ -0,0 +1,386 @@ +init_query_vars(); + } + + function init_query_vars(){ + global $wp_post_types, $wp_taxonomies; + + //custom posts query vars + foreach($wp_post_types as $k=>$v){ + if(in_array($k, array('post','page'))){ + continue; + } + if($v->query_var){ + $this->custom_post_query_vars[$k] = $v->query_var; + } + } + //taxonomies query vars + foreach($wp_taxonomies as $k=>$v){ + if(in_array($k, array('category'))){ + continue; + } + if($k == 'post_tag' && !$v->query_var){ + $v->query_var = $tag_base = get_option('tag_base') ? $tag_base : 'tag'; + } + if($v->query_var){ + $this->taxonomies_query_vars[$k] = $v->query_var; + } + } + + } + + function _process_generic_text($text, &$alp_broken_links){ + global $wpdb, $wp_rewrite, $sitepress, $sitepress_settings; + + if(!isset($wp_rewrite)){ + require_once ABSPATH . WPINC . '/rewrite.php'; + $wp_rewrite = new WP_Rewrite(); + } + + $rewrite = $wp_rewrite->wp_rewrite_rules(); + + $home_url = $sitepress->language_url(empty($_POST['icl_post_language'])?false:$_POST['icl_post_language']); + + + if($sitepress_settings['language_negotiation_type']==3){ + $home_url = preg_replace("#\?lang=([a-z-]+)#i", '', $home_url); + } + $home_url = str_replace("?", "\?",$home_url); + + $int1 = preg_match_all('@]*)href="(('.rtrim($home_url,'/').')?/([^"^>^\[^\]]+))"([^>]*)>@i',$text,$alp_matches1); + $int2 = preg_match_all('@]*)href=\'(('.rtrim($home_url,'/').')?/([^\'^>^\[^\]]+))\'([^>]*)>@i',$text,$alp_matches2); + + for($i = 0; $i < 6; $i++){ + $alp_matches[$i] = array_merge((array)$alp_matches1[$i], (array)$alp_matches2[$i]); + } + + $sitepress_settings = $sitepress->get_settings(); + + if($int1 || $int2){ + $url_parts = parse_url(rtrim(get_option('home'),'/').'/'); + foreach($alp_matches[4] as $k=>$m){ + if(0===strpos($m,'wp-content')) continue; + + if($sitepress_settings['language_negotiation_type']==1){ + $m_orig = $m; + $exp = explode('/', $m, 2); + $lang = $exp[0]; + if($wpdb->get_var("SELECT code FROM {$wpdb->prefix}icl_languages WHERE code='{$lang}'")){ + $m = $exp[1]; + }else{ + $m = $m_orig; + unset($m_orig); + $lang = false; + } + } + + $pathinfo = ''; + $req_uri = '/' . $m; + $req_uri_array = explode('?', $req_uri); + $req_uri = $req_uri_array[0]; + $req_uri_params = ''; + if (isset($req_uri_array[1])) { + $req_uri_params = $req_uri_array[1]; + } + // separate anchor + $req_uri_array = explode('#', $req_uri); + $req_uri = $req_uri_array[0]; + $anchor = isset($req_uri_array[1]) ? $req_uri_array[1] : false; + $self = '/index.php'; + $home_path = parse_url(get_option('home')); + if ( isset($home_path['path']) ) + $home_path = $home_path['path']; + else + $home_path = ''; + $home_path = trim($home_path, '/'); + + $req_uri = str_replace($pathinfo, '', rawurldecode($req_uri)); + $req_uri = trim($req_uri, '/'); + $req_uri = preg_replace("|^$home_path|", '', $req_uri); + $req_uri = trim($req_uri, '/'); + $pathinfo = trim($pathinfo, '/'); + $pathinfo = preg_replace("|^$home_path|", '', $pathinfo); + $pathinfo = trim($pathinfo, '/'); + $self = trim($self, '/'); + $self = preg_replace("|^$home_path|", '', $self); + $self = trim($self, '/'); + + if ( ! empty($pathinfo) && !preg_match('|^.*' . $wp_rewrite->index . '$|', $pathinfo) ) { + $request = $pathinfo; + } else { + // If the request uri is the index, blank it out so that we don't try to match it against a rule. + if ( $req_uri == $wp_rewrite->index ) + $req_uri = ''; + $request = $req_uri; + } + + $this_request = $request; + + $request_match = $request; + + $perma_query_vars = array(); + + foreach ( (array) $rewrite as $match => $query) { + + // If the requesting file is the anchor of the match, prepend it + // to the path info. + if ((! empty($req_uri)) && (strpos($match, $req_uri) === 0) && ($req_uri != $request)) { + $request_match = $req_uri . '/' . $request; + } + + if (preg_match("!^$match!", $request_match, $matches) || + preg_match("!^$match!", urldecode($request_match), $matches)) { + // Got a match. + $matched_rule = $match; + + // Trim the query of everything up to the '?'. + $query = preg_replace("!^.+\?!", '', $query); + + // Substitute the substring matches into the query. + $query = addslashes(WP_MatchesMapRegex::apply($query, $matches)); + + $matched_query = $query; + + // Parse the query. + parse_str($query, $perma_query_vars); + + break; + } + } + + $post_name = $category_name = $tax_name = false; + + if(isset($perma_query_vars['pagename'])){ + $icl_post_lang = isset($_POST['icl_post_language']) ? $_POST['icl_post_language'] : $sitepress->get_current_language(); + $sitepress->switch_lang($icl_post_lang); + $page_by_path = get_page_by_path($perma_query_vars['pagename']); + $sitepress->switch_lang(); + + if(!empty($page_by_path->post_type)){ + $post_name = $perma_query_vars['pagename']; + $post_type = 'page'; + }else{ + $post_name = $perma_query_vars['pagename']; + $post_type = 'post'; + } + + }elseif(isset($perma_query_vars['name'])){ + $post_name = $perma_query_vars['name']; + $post_type = 'post'; + }elseif(isset($perma_query_vars['category_name'])){ + $category_name = $perma_query_vars['category_name']; + }elseif(isset($perma_query_vars['p'])){ // case or /archives/%post_id + $p = $perma_query_vars['p']; + list($post_type, $post_name) = $wpdb->get_row($wpdb->prepare( + "SELECT post_type, post_name FROM {$wpdb->posts} WHERE id=%d", $perma_query_vars['p']), ARRAY_N); + }else{ + foreach($this->custom_post_query_vars as $k=>$v){ + if(isset($perma_query_vars[$v])){ + $post_name = $perma_query_vars[$v]; + $post_type = $k; + $post_qv = $v; + break; + } + } + foreach($this->taxonomies_query_vars as $k=>$v){ + if(isset($perma_query_vars[$v])){ + $tax_name = $perma_query_vars[$v]; + $tax_type = $v; + break; + } + } + } + + if($post_name){ + + $icl_post_lang = isset($_POST['icl_post_language']) ? $_POST['icl_post_language'] : $sitepress->get_current_language(); + $sitepress->switch_lang($icl_post_lang); + $p = get_page_by_path($post_name, OBJECT, $post_type); + $sitepress->switch_lang(); + + if(empty($p)){ // fail safe + if($post_id = url_to_postid($home_path . '/' . $post_name)){ + $p = get_post($post_id); + } + } + + //$name = esc_sql($post_name); + //$post_type = isset($perma_query_vars['pagename']) ? 'page' : 'post'; + //$p = $wpdb->get_row("SELECT ID, post_type FROM {$wpdb->posts} WHERE post_name='{$name}' AND post_type ='{$post_type}'"); + + if($p){ + if($post_type=='page'){ + $qvid = 'page_id'; + }else{ + $qvid = 'p'; + } + if($sitepress_settings['language_negotiation_type']==1 && $lang){ + $langprefix = '/' . $lang; + }else{ + $langprefix = ''; + } + $perm_url = '('.rtrim($home_url,'/') . ')?' . $langprefix .'/'. str_replace('?', '\?', $m); + $regk = '@href=["\']('.$perm_url.')["\']@i'; + if ($anchor){ + $anchor = "#".$anchor; + } else { + $anchor = ""; + } + // check if this is an offsite url + if($p->post_type=='page' && $offsite_url = get_post_meta($p->ID, '_cms_nav_offsite_url', true)){ + $regv = 'href="'.$offsite_url.$anchor.'"'; + }else{ + $regv = 'href="' . '/' . ltrim($url_parts['path'],'/') . '?' . $qvid . '=' . $p->ID; + if ($req_uri_params != '') { + $regv .= '&' . $req_uri_params; + } + $regv .= $anchor.'"'; + } + $def_url[$regk] = $regv; + }else{ + $alp_broken_links[$alp_matches[2][$k]] = array(); + $name = esc_sql($post_name); + $p = $wpdb->get_results("SELECT ID, post_type FROM {$wpdb->posts} WHERE post_name LIKE '{$name}%' AND post_type IN('post','page')"); + if($p){ + foreach($p as $post_suggestion){ + if($post_suggestion->post_type=='page'){ + $qvid = 'page_id'; + }else{ + $qvid = 'p'; + } + $alp_broken_links[$alp_matches[2][$k]]['suggestions'][] = array( + 'absolute'=> '/' . ltrim($url_parts['path'],'/') . '?' . $qvid . '=' . $post_suggestion->ID, + 'perma'=> '/'. ltrim(str_replace(get_option('home'),'',get_permalink($post_suggestion->ID)),'/'), + ); + } + } + } + }elseif($category_name){ + if(false !== strpos($category_name, '/')){ + $splits = explode('/', $category_name); + $category_name = array_pop($splits); + $category_parent = array_pop($splits); + $category_parent_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->terms} WHERE slug=%s", $category_parent)); + $c = $wpdb->get_row($wpdb->prepare("SELECT t.term_id FROM {$wpdb->terms} t JOIN {$wpdb->term_taxonomy} x ON x.term_id=t.term_id AND x.taxonomy='category' AND x.parent=%d AND t.slug=%s", $category_parent_id, $category_name)); + }else{ + $c = $wpdb->get_row($wpdb->prepare("SELECT term_id FROM {$wpdb->terms} WHERE slug=%s", $category_name)); + } + if($c){ + /* not used ?? */ + if($sitepress_settings['language_negotiation_type']==1 && $lang){ + $langprefix = '/' . $lang; + }else{ + $langprefix = ''; + } + /* not used ?? */ + $perm_url = '('.rtrim($home_url,'/') . ')?' . $langprefix .'/'.$m; + $regk = '@href=[\'"]('.$perm_url.')[\'"]@i'; + $url_parts = parse_url(rtrim(get_option('home'),'/').'/'); + $regv = 'href="' . '/' . ltrim($url_parts['path'],'/') . '?cat_ID=' . $c->term_id.'"'; + $def_url[$regk] = $regv; + }else{ + $alp_broken_links[$alp_matches[2][$k]] = array(); + $c = $wpdb->get_results("SELECT term_id FROM {$wpdb->terms} WHERE slug LIKE '{$name}%'"); + if($c){ + foreach($c as $cat_suggestion){ + $alp_broken_links[$alp_matches[2][$k]]['suggestions'][] = array( + 'absolute'=>'?cat_ID=' . $cat_suggestion->term_id, + 'perma'=> '/'. ltrim(str_replace(get_option('home'),'',get_category_link($cat_suggestion->term_id)),'/') + ); + } + } + } + }elseif($tax_name){ + + if($sitepress_settings['language_negotiation_type']==1 && $lang){ + $langprefix = '/' . $lang; + }else{ + $langprefix = ''; + } + + $perm_url = '('.rtrim($home_url,'/') . ')?' . $langprefix .'/'.$m; + $regk = '@href=["\']('.$perm_url.')["\']@i'; + if ($anchor){ + $anchor = "#".$anchor; + } else { + $anchor = ""; + } + + $regv = 'href="' . '/' . ltrim($url_parts['path'],'/') . '?' . $tax_type . '=' . $tax_name.$anchor.'"'; + $def_url[$regk] = $regv; + + } + } + + if(!empty($def_url)){ + $text = preg_replace(array_keys($def_url),array_values($def_url),$text); + + } + + $tx_qvs = !empty($this->taxonomies_query_vars) && is_array($this->taxonomies_query_vars) ? '|' . join('|',$this->taxonomies_query_vars) : ''; + $post_qvs = !empty($this->custom_posts_query_vars) && is_array($this->custom_posts_query_vars) ? '|' . join('|',$this->custom_posts_query_vars) : ''; + $int = preg_match_all('@href=[\'"]('.rtrim(get_option('home'),'/').'/?\?(p|page_id'.$tx_qvs.$post_qvs.')=([0-9a-z-]+)(#.+)?)[\'"]@i',$text,$matches2); + if($int){ + $url_parts = parse_url(rtrim(get_option('home'),'/').'/'); + $text = preg_replace('@href=[\'"]('. rtrim(get_option('home'),'/') .'/?\?(p|page_id'.$tx_qvs.$post_qvs.')=([0-9a-z-]+)(#.+)?)[\'"]@i', 'href="'.'/' . ltrim($url_parts['path'],'/').'?$2=$3$4"', $text); + } + + + } + + return $text; + } + + + function process_string($st_id, $translation=true){ + global $wpdb; + if($st_id){ + if($translation){ + $string_value = $wpdb->get_var("SELECT value FROM {$wpdb->prefix}icl_string_translations WHERE id=" . $st_id); + }else{ + $string_value = $wpdb->get_var("SELECT value FROM {$wpdb->prefix}icl_strings WHERE id=" . $st_id); + } + $alp_broken_links = array(); + $string_value_up = $this->_process_generic_text($string_value, $alp_broken_links); + if($string_value_up != $string_value){ + if($translation){ + $wpdb->update($wpdb->prefix . 'icl_string_translations', array('value'=>$string_value_up), array('id'=>$st_id)); + }else{ + $wpdb->update($wpdb->prefix . 'icl_strings', array('value'=>$string_value_up), array('id'=>$st_id)); + } + } + } + } + + function process_post($post_id){ + global $wpdb, $wp_rewrite; + global $sitepress; + + + delete_post_meta($post_id,'_alp_broken_links'); + + $post = $wpdb->get_row("SELECT * FROM {$wpdb->posts} WHERE ID={$post_id}"); + $alp_broken_links = array(); + $post_content = $this->_process_generic_text($post->post_content, $alp_broken_links); + + if($post_content != $post->post_content){ + $wpdb->update($wpdb->posts, array('post_content'=>$post_content), array('ID'=>$post_id)); + } + + update_post_meta($post_id,'_alp_processed',time()); + if(!empty($alp_broken_links)){ + update_post_meta($post_id,'_alp_broken_links',$alp_broken_links); + } + } + +} diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/affiliate-info.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/affiliate-info.php new file mode 100644 index 0000000..72221a1 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/affiliate-info.php @@ -0,0 +1,15 @@ + diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/browser-redirect.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/browser-redirect.php new file mode 100644 index 0000000..f05a08f --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/browser-redirect.php @@ -0,0 +1,53 @@ +get_ls_languages($args); + $language_urls = array(); + foreach($languages as $language) { + $language_urls[$language['language_code']] = $language['url']; + } + // Cookie parameters + $http_host = $_SERVER['HTTP_HOST'] == 'localhost' ? '' : $_SERVER['HTTP_HOST']; + $cookie = array( + 'name' => '_icl_visitor_lang_js', + 'domain' => (defined('COOKIE_DOMAIN') && COOKIE_DOMAIN? COOKIE_DOMAIN : $http_host), + 'path' => (defined('COOKIEPATH') && COOKIEPATH ? COOKIEPATH : '/'), + 'expiration' => $sitepress_settings['remember_language'] + ); + + // Send params to javascript + $params = array( + 'pageLanguage' => defined('ICL_LANGUAGE_CODE')? ICL_LANGUAGE_CODE : get_bloginfo('language'), + 'languageUrls' => $language_urls, + 'cookie' => $cookie + ); + wp_localize_script('wpml-browser-redirect', 'wpml_browser_redirect_params', $params); + + + } + + +} + +add_action('init', array('WPML_Browser_Redirect', 'init')); + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/cache.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/cache.php new file mode 100644 index 0000000..445afd9 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/cache.php @@ -0,0 +1,115 @@ + $v){ + if(false !== strpos($k, $key . '#')){ + unset($icl_cache[$k]); + } + } + } + + update_option('_icl_cache', $icl_cache); + } +} + +define('ICL_DISABLE_CACHE', false); + +class icl_cache{ + + private $data; + + function __construct($name = "", $cache_to_option = false){ + $this->data = array(); + $this->name = $name; + $this->cache_to_option = $cache_to_option; + + if ($cache_to_option) { + $this->data = icl_cache_get($name.'_cache_class'); + if ($this->data == false){ + $this->data = array(); + } + } + } + + function get($key) { + if(ICL_DISABLE_CACHE){ + return null; + } + return isset($this->data[$key]) ? $this->data[$key] : false; + } + + function has_key($key){ + if(ICL_DISABLE_CACHE){ + return false; + } + return array_key_exists($key, (array)$this->data); + } + + function set($key, $value) { + if(ICL_DISABLE_CACHE){ + return; + } + $this->data[$key] = $value; + if ($this->cache_to_option) { + icl_cache_set($this->name.'_cache_class', $this->data); + } + } + + function clear() { + $this->data = array(); + if ($this->cache_to_option) { + icl_cache_clear($this->name.'_cache_class'); + } + } +} + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/comments-translation/functions.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/comments-translation/functions.php new file mode 100644 index 0000000..955119a --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/comments-translation/functions.php @@ -0,0 +1,1022 @@ +ID)){ + $this->enable_comments_translation = get_user_meta($current_user->data->ID,'icl_enable_comments_translation',true); + $this->enable_replies_translation = get_user_meta($current_user->data->ID,'icl_enable_replies_translation',true); + + $this->user_language = $sitepress->get_user_admin_language($current_user->data->ID); + if(!$this->user_language){ + $this->user_language = $sitepress_settings['admin_default_language']; + if($this->user_language == '_default_') $this->user_language = $sitepress->get_default_language(); + } + }else{ + $this->is_visitor = true; + $this->user_language = $sitepress->get_current_language(); + } + + /* google translate API is shutting down + if(defined('WP_ADMIN')){ + add_action('show_user_profile', array($this, 'show_user_options')); + add_action('personal_options_update', array($this, 'save_user_options')); + } + */ + + if(defined('WP_ADMIN') && $this->enable_comments_translation){ + add_action('admin_print_scripts', array($this,'js_scripts_setup')); + } + + add_action('manage_comments_nav', array($this,'use_comments_array_filter')); + + add_filter('comments_array', array($this,'comments_array_filter')); + + add_filter('comment_feed_join', array($this, 'comment_feed_join')); + add_filter('query', array($this, 'filter_queries')); + //add_filter('comment_feed_where', array($this, 'comment_feed_where')); + + add_action('delete_comment', array($this, 'delete_comment_actions')); + add_action('wp_set_comment_status', array($this, 'wp_set_comment_status_actions'), 1, 2); + if(isset($_POST['action']) && $_POST['action']=='editedcomment'){ + add_action('transition_comment_status', array($this, 'transition_comment_status_actions'), 1, 3); + } + + + if('comment.php' == $pagenow){ + $row = $wpdb->get_row(" + SELECT c.user_id, t.language_code + FROM {$wpdb->comments} c JOIN {$wpdb->prefix}icl_translations t ON c.comment_ID = t.element_id AND element_type='comment' + WHERE c.comment_ID=".intval($_GET['c']) + ); + $comment_author = $row->user_id; + $comment_lang = $row->language_code; + if($current_user->data->ID == $comment_author && $comment_lang == $this->user_language){ + add_action('admin_head', array($this, 'admin_head_actions')); + } + } + add_action('edit_comment', array($this, 'edit_comment_actions')); + + add_action('comment_form', array($this, 'comment_form_options')); + + //add_action('comment_post', array($this, 'comment_post')); + add_action('wp_insert_comment', array($this, 'wp_insert_comment'), 10, 2); + + if(defined('WP_ADMIN') && $this->enable_comments_translation){ + add_filter('comment_row_actions', array($this,'comment_row_actions'),1, 2); + } + + if(defined('WP_ADMIN')){ + add_filter('comment_text', array($this, 'comment_text_filter_admin')); + }else{ + add_filter('comment_text', array($this, 'comment_text_filter')); + } + + add_filter('xmlrpc_methods',array($this, 'add_custom_xmlrpc_methods')); + + add_filter('get_comments_number', array($this, 'get_comments_number_filter')); + + global $wpml_add_message_translation_callbacks; + $wpml_add_message_translation_callbacks['comment'][] = array($this, 'add_comment_translation'); + + + if(isset($_GET['retry_mtr'])){ + global $wpdb; + $nonce = wp_create_nonce('machine-translation-failed'.$_GET['retry_mtr']); + if($_GET['nonce']==$nonce){ + $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_ID=" . intval($_GET['retry_mtr'])); + $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translations WHERE element_type='comment' AND element_id=" . intval($_GET['retry_mtr'])); + if(defined('WP_ADMIN')){ + wp_redirect(rtrim(preg_replace('@retry_mtr=([0-9]+)&nonce=([0-9a-z]+)@','',$_SERVER['REQUEST_URI']),'?')); + }else{ + add_action('template_redirect', array($this, '__reload_page')); + } + } + } + + require_once ICL_PLUGIN_PATH . '/inc/cache.php'; + $this->icl_comment_count_cache = new icl_cache(); + + add_filter('views_edit-comments', array($this, 'pending_by_language')); + + } + + function pending_by_language($views){ + global $wpdb, $sitepress; + + if(isset($views['moderated'])){ + + preg_match('#([0-9]+)#', $views[ 'moderated' ], $matches); + if($matches[1] > 0){ + $results = $wpdb->get_results(" + SELECT tr.language_code, COUNT(tr.element_id) AS c + FROM {$wpdb->comments} c + JOIN {$wpdb->prefix}icl_translations tr ON tr.element_id = c.comment_ID + WHERE c.comment_approved = '0' AND tr.element_type = 'comment' + GROUP BY tr.language_code + HAVING c > 0 + "); + if(!empty($results)){ + foreach($results as $r){ + $_ldetails = $sitepress->get_language_details($r->language_code); + $lbreak[] = sprintf('%s(%d)', + $sitepress->get_current_language() == $r->language_code ? ' class="current"' : '', + admin_url('edit-comments.php?comment_status=moderated&lang=' . $r->language_code), + $_ldetails['display_name'], $r->c); + } + $views[ 'moderated' ] .= ' - ' . join(', ', $lbreak); + } + + } + + } + if(isset($views['spam'])){ + preg_match('#([0-9]+)#', $views[ 'spam' ], $matches); + if($matches[1] > 0){ + $results = $wpdb->get_results(" + SELECT tr.language_code, COUNT(tr.element_id) AS c + FROM {$wpdb->comments} c + JOIN {$wpdb->prefix}icl_translations tr ON tr.element_id = c.comment_ID + WHERE c.comment_approved = 'spam' AND tr.element_type = 'comment' + GROUP BY tr.language_code + HAVING c > 0 + "); + if(!empty($results)){ + foreach($results as $r){ + $_ldetails = $sitepress->get_language_details($r->language_code); + $lbreak[] = sprintf('%s(%d)', + $sitepress->get_current_language() == $r->language_code ? ' class="current"' : '', + admin_url('edit-comments.php?comment_status=spam&lang=' . $r->language_code), + $_ldetails['display_name'], $r->c); + } + $views[ 'spam' ] .= ' - ' . join(', ', $lbreak); + } + } + } + + return $views; + } + + function __reload_page(){ + wp_redirect(get_permalink()); + } + + function admin_head_actions(){ + add_meta_box('comment', __('Translate', 'sitepress'), array($this, 'comment_form_options'), 'comment', 'normal', 'high', 1); + } + + function js_scripts_setup(){ + global $pagenow, $sitepress; + if($pagenow == 'index.php' || $pagenow == 'edit-comments.php' || $pagenow == 'post.php'): + $user_lang_info = $sitepress->get_language_details($this->user_language); + ?> + + get_element_trid($comment->comment_ID, 'comment'); + $original_comment_language = $wpdb->get_row(" + SELECT t.language_code, lt.name + FROM {$wpdb->prefix}icl_translations t + JOIN {$wpdb->prefix}icl_languages_translations lt ON t.language_code = lt.language_code + WHERE trid={$ctrid} AND element_type='comment' AND element_id<>{$comment->comment_ID} + AND lt.display_language_code='".$sitepress->get_current_language()."' + "); + if(empty($original_comment_language)){ + return $actions; + } + ?> + +
              + user_language == $original_comment_language->language_code): ?> + + + name) ?> + +
              + + + + + + + + +
              +

              + + +

              + get_icl_translation_enabled() || !$sitepress->icl_account_configured()): ?> + professional translation.','sitepress'),'http://wpml.org/?page_id=1169'); ?> + +

              + + \*\/ ?> +
              + request($url); + if(!is_wp_error($response) && ($response['response']['code']=='200')){ + $translation = json_decode($response['body']); + $translation = $translation->responseData->translatedText; + }else{ + $ican_google_translation_request_fail_flag = 1; + $translation =''; + } + + return $translation; + */ + } + + + function delete_comment_actions($comment_id){ + global $sitepress; + $trid = $sitepress->get_element_trid($comment_id, 'comment'); + if($trid){ + $translations = $sitepress->get_element_translations($trid, 'comment'); + $sitepress->delete_element_translation($trid, 'comment'); + foreach($translations as $t){ + if(isset($t->element_id) && $t->element_id != $comment_id){ + wp_delete_comment($t->element_id); + } + } + } + } + + function wp_set_comment_status_actions($comment_id, $status){ + global $sitepress; + static $ids_processed = array(); // using this for avoiding the infinite loop + $trid = $sitepress->get_element_trid($comment_id, 'comment'); + if($trid){ + $translations = $sitepress->get_element_translations($trid, 'comment'); + foreach($translations as $t){ + if(isset($t->element_id) && $t->element_id != $comment_id && !in_array($t->element_id,$ids_processed)){ + wp_set_comment_status($t->element_id, $status); + $ids_processed[] = $t->element_id; + } + } + } + } + + function edit_comment_actions($comment_id){ + // we'll use this hook ONLY for updating comments - not for new comments + if($_POST['icl_translate_reply']){ + global $wpdb; + $res = $wpdb->get_row(" + SELECT MD5(c.comment_content)<> ms.md5 AND ms.md5 IS NOT NULL AS updated, ms.to_language + FROM {$wpdb->comments} c + JOIN {$wpdb->prefix}icl_message_status ms ON c.comment_ID + WHERE c.comment_ID = {$comment_id} AND ms.object_type='comment' + "); + if(isset($res->updated) && $res->updated){ + $this->send_comment_to_translation($comment_id, $res->to_language); + } + } + } + + function transition_comment_status_actions($new_status, $old_status, $comment){ + global $sitepress, $wpdb; + $comment_id = $comment->comment_ID; + static $ids_processed_tr = array(); // using this for avoiding the infinite loop + $trid = $sitepress->get_element_trid($comment_id, 'comment'); + if($trid){ + $translations = $sitepress->get_element_translations($trid, 'comment'); + foreach($translations as $t){ + if(isset($t->element_id) && $t->element_id != $comment_id && !in_array($t->element_id,$ids_processed_tr)){ + //wp_set_comment_status($t->element_id, $comment->comment_approved); + $wpdb->update($wpdb->comments, array('comment_approved'=>$comment->comment_approved), array('comment_id'=>$t->element_id)); + $ids_processed_tr[] = $t->element_id; + } + } + } + } + + function comment_form_options(){ + global $wpdb, $post, $userdata, $sitepress; + $user_lang_info = $sitepress->get_language_details($this->user_language); + + if(empty($post)){ //edit comment + global $comment; + $ctrid = $sitepress->get_element_trid($comment->comment_ID, 'comment'); + // original comment language + $comment_language = $wpdb->get_var("SELECT language_code FROM {$wpdb->prefix}icl_translations WHERE trid={$ctrid} AND element_type='comment' AND source_language_code IS NULL"); + $post_type = $wpdb->get_var("SELECT post_type FROM {$wpdb->posts} WHERE ID='" . intval($comment->comment_post_ID) . "'"); + $cur_lang = $wpdb->get_var("SELECT language_code FROM {$wpdb->prefix}icl_translations WHERE element_id='" . intval($comment->comment_post_ID) . "' AND element_type='post_{$post_type}'"); + }else{ // add new comment on front end + $cur_lang = $sitepress->get_current_language(); + $comment_language = $sitepress->get_current_language(); + } + + $page_lang_info = $wpdb->get_var(" + SELECT name + FROM {$wpdb->prefix}icl_languages_translations + WHERE language_code='".$cur_lang."' AND display_language_code='".$this->user_language."' + "); + + if($sitepress->have_icl_translator($this->user_language, $cur_lang)){ + $disabled = ''; + }else{ + $disabled = ' disabled="disabled"'; + } + ?> + + + + enable_replies_translation && $userdata->user_level > 7 && $user_lang_info['code'] != $cur_lang): ?> + + + comment_ID; + } + + if($this->is_visitor){ + // get comments in visitor's language + if(!empty($cids)){ + $comment_ids = $wpdb->get_col(" + SELECT element_id + FROM {$wpdb->prefix}icl_translations + WHERE element_type='comment' AND element_id IN(".join(',', $cids).") + AND language_code = '{$this->user_language}' + "); + foreach($comments as $k=>$c){ + if(!in_array($c->comment_ID , (array)$comment_ids)){ + unset($comments[$k]); + } + } + } + }elseif(!$this->enable_comments_translation){ + // show only original comments regardless of the user language + if(!empty($cids)){ + $comment_ids = $wpdb->get_col(" + SELECT element_id + FROM {$wpdb->prefix}icl_translations + WHERE element_type='comment' AND element_id IN(".join(',', $cids).") + AND source_language_code IS NULL + "); + } + foreach($comments as $k=>$c){ + if(!in_array($c->comment_ID , (array)$comment_ids)){ + unset($comments[$k]); + } + } + + + + //filter for this language + /* + if(!empty($cids)){ + $comment_ids = $wpdb->get_col(" + SELECT element_id + FROM {$wpdb->prefix}icl_translations + WHERE element_type='comment' AND element_id IN(".join(',', $cids).") + AND language_code='{$this->user_language}' + "); + } + + if($comments){ + $_trids = $wpdb->get_col("SELECT DISTINCT trid FROM {$wpdb->prefix}icl_translations WHERE element_type='comment' AND element_id IN(".join(",",$cids).")"); + $_ttrids = $wpdb->get_col("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_type='comment' AND trid IN(".join(",",$_trids).") AND language_code='{$this->user_language}'"); + $_utrids = array_diff($_trids, $_ttrids); + if(!empty($_utrids)){ + $_untranslated_elids = $wpdb->get_col("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type='comment' AND trid IN(".join(",",$_utrids).") AND source_language_code IS NULL"); + } + } + foreach($comments as $k=>$c){ + if(!in_array($c->comment_ID , (array)$comment_ids) && !in_array($c->comment_ID, (array)$_untranslated_elids)){ + unset($comments[$k]); + } + } + */ + + }else{ + foreach($comments as $c){ + $comment_ids[] = $c->comment_ID; + $comments_by_id[$c->comment_ID] = $c; + } + + $trids = $wpdb->get_col(" + SELECT DISTINCT trid + FROM {$wpdb->prefix}icl_translations + WHERE element_type='comment' AND element_id IN (".join(',',$comment_ids).") + "); + + // filter comments in the user's language + $translated_comments_trids = array(0); + if(!empty($trids)){ + $res = $wpdb->get_results(" + SELECT element_id, trid + FROM {$wpdb->prefix}icl_translations + WHERE element_type='comment' AND trid IN (".join(',',$trids).") AND language_code = '{$this->user_language}' + "); + foreach($res as $row){ + $comments_in_the_users_language[] = $row->element_id; + $translated_comments_trids[] = $row->trid; + } + } + $comments_not_translated_trids = array_diff($trids, $translated_comments_trids); + + if($comments_not_translated_trids){ + $comments_not_translated = $wpdb->get_col(" + SELECT element_id + FROM {$wpdb->prefix}icl_translations + WHERE element_type='comment' AND trid IN (".join(',',$comments_not_translated_trids).") AND language_code <> '{$this->user_language}' + "); + } + if(!empty($comments_not_translated)){ + $res = $wpdb->get_results(" + SELECT element_id, trid, language_code + FROM {$wpdb->prefix}icl_translations + WHERE element_type='comment' AND element_id IN (".join(',',$comments_not_translated).") + "); + + + $wp_comments_cols = array_keys($wpdb->get_row("SELECT * FROM {$wpdb->comments} LIMIT 1", ARRAY_A)); + + foreach($res as $original_comment){ + $comment_content = $comments_by_id[$original_comment->element_id]->comment_content; + $machine_translation = $this->machine_translate($original_comment->language_code, $this->user_language, $comment_content); + $comment_new = clone $comments_by_id[$original_comment->element_id]; + $comment_new->comment_content = $machine_translation; + + unset($comment_new->comment_ID); + $wpdb->insert($wpdb->comments, array_intersect_key((array)$comment_new, array_flip($wp_comments_cols))); + $new_comment_id = $wpdb->insert_id; + $sitepress->set_element_language_details($new_comment_id, 'comment', $original_comment->trid, $this->user_language); + $comment_new->comment_ID = $new_comment_id; + if($original_comment_parent = $comments_by_id[$original_comment->element_id]->comment_parent){ + // check for the comment parent in the user language + $cptrid = $sitepress->get_element_trid($original_comment_parent, 'comment'); + $comment_new->comment_parent = $wpdb->get_var("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid={$cptrid} AND element_type='comment' AND language_code='{$this->user_language}'"); + $wpdb->update($wpdb->comments, array('comment_parent'=>$comment_new->comment_parent), array('comment_ID'=>$new_comment_id)); + } + + if(!$machine_translation){ + $nonce = wp_create_nonce('machine-translation-failed'.$new_comment_id); + $comment_new->comment_content = '' . sprintf(__('Machine translation failed. retry','sitepress'), ' onclick="icl_retry_mtr(this)" id="icl_retry_mtr_'.$comment_new->comment_ID.'_'.$nonce.'" href="#"') . ''; + $wpdb->update($wpdb->comments, array('comment_content'=>$comment_new->comment_content), array('comment_ID'=>$new_comment_id)); + } + + $comments_in_the_users_language[] = $new_comment_id; + $comments[] = $comment_new; + } + + } + + //filter out comments in other languages than the user's + foreach((array)$comments as $k=>$c){ + if(!in_array($c->comment_ID , (array)$comments_in_the_users_language)){ + unset($comments[$k]); + } + } + + } + return array_values($comments); + } + + function use_comments_array_filter(){ + global $comments; + $comments = $this->comments_array_filter($comments); + } + + function comment_feed_join($join){ + global $wpdb, $sitepress; + $lang = $this->enable_comments_translation ? $this->user_language : $sitepress->get_current_language(); + $join .= " JOIN {$wpdb->prefix}icl_translations tc ON {$wpdb->comments}.comment_ID = tc.element_id AND tc.element_type='comment' AND tc.language_code='{$lang}'"; + return $join; + } + + function filter_queries($sql){ + global $pagenow, $wpdb; + static $_untranslated_elids; + if($pagenow == 'index.php'){ + if(preg_match('#SELECT \* FROM (.+)comments ORDER BY comment_date_gmt DESC LIMIT ([0-9]+), ([0-9]+)#i',$sql,$matches)){ + $res = mysql_query($sql); + while($row = mysql_fetch_object($res)){ + $comments[] = $row; + } + + if(!$this->enable_comments_translation && $comments){ + // show only original comments regardless of the user language + + foreach($comments as $c){ + $cids[] = $c->comment_ID; + } + $comment_ids = array(0); + if(!empty($cids)){ + $comment_ids = $wpdb->get_col(" + SELECT element_id + FROM {$wpdb->prefix}icl_translations + WHERE element_type='comment' AND element_id IN(".join(',', $cids).") + AND source_language_code IS NULL + "); + if(!empty($comment_ids)){ + $sql = "SELECT * FROM {$matches[1]}comments c + WHERE c.comment_ID IN (".join(',',$comment_ids).") + ORDER BY c.comment_date_gmt DESC LIMIT {$matches[2]}, {$matches[3]}"; + } + } + }else{ + $this->comments_array_filter($comments); + unset($comments); + $sql = " + SELECT * FROM {$matches[1]}comments c + LEFT JOIN {$matches[1]}icl_translations t ON t.element_id=c.comment_ID + WHERE + (t.element_type='comment' AND t.language_code='{$this->user_language}') + ORDER BY c.comment_date_gmt DESC LIMIT {$matches[2]}, {$matches[3]}"; + } + + } + }elseif( isset($_POST['action']) && $_POST['action']=='get-comments' && isset($_POST['mode']) && $_POST['mode']=='single'){ + global $sitepress; + if(preg_match('#SELECT \* FROM (.+)comments USE INDEX \(comment_date_gmt\) WHERE \( comment_approved = \'0\' OR comment_approved = \'1\' \) AND comment_post_ID = \'([0-9]+)\' ORDER BY comment_date_gmt ASC LIMIT ([0-9]+), ([0-9]+)#i',$sql,$matches)){ + $post_type = $wpdb->get_var("SELECT post_type FROM {$wpdb->posts} WHERE ID='{$_POST['post_ID']}'"); + $res = mysql_query("SELECT language_code FROM {$wpdb->prefix}icl_translations WHERE element_id={$_POST['post_ID']} AND element_type='post_{$post_type}'"); + $row = mysql_fetch_row($res); + $c_language = $row[0]; + + if($this->enable_comments_translation){ + $res = $wpdb->get_results(" + SELECT element_id, trid FROM {$wpdb->prefix}icl_translations t + JOIN {$wpdb->comments} c ON t.element_id = c.comment_ID AND comment_POST_ID = {$_POST['post_ID']} + WHERE t.element_type='comment' AND language_code='{$c_language}'"); + foreach($res as $r){ + $trids_orig[$r->trid] = $r->element_id; + } + $res = $wpdb->get_results(" + SELECT element_id, trid FROM {$wpdb->prefix}icl_translations t + JOIN {$wpdb->comments} c ON t.element_id = c.comment_ID AND comment_POST_ID = {$_POST['post_ID']} + WHERE t.element_type='comment' AND language_code='{$this->user_language}'"); + foreach($res as $r){ + $trids_tr[$r->trid] = $r->element_id; + } + + $wp_comments_cols = array_keys($wpdb->get_row("SELECT * FROM {$wpdb->comments} LIMIT 1", ARRAY_A)); + foreach($trids_orig as $o_trid=>$o_cid){ + if(!isset($trids_tr[$o_trid])){ + $original_comment = get_comment($trids_orig[$o_trid]); + $machine_translation = $this->machine_translate($c_language, $this->user_language, $original_comment->comment_content); + $comment_new = clone $original_comment; + $comment_new->comment_content = $machine_translation; + unset($comment_new->comment_ID); + $wpdb->insert($wpdb->comments, array_intersect_key((array)$comment_new, array_flip($wp_comments_cols))); + $new_comment_id = $wpdb->insert_id; + $sitepress->set_element_language_details($new_comment_id, 'comment', $o_trid, $this->user_language); + + if($original_comment->comment_parent){ + $cptrid = $sitepress->get_element_trid($original_comment->comment_parent, 'comment'); + $comment_new->comment_parent = $wpdb->get_var("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid={$cptrid} AND element_type='comment' AND language_code='{$this->user_language}'"); + $wpdb->update($wpdb->comments, array('comment_parent'=>$comment_new->comment_parent), array('comment_ID'=>$new_comment_id)); + } + + if(!$machine_translation){ + $nonce = wp_create_nonce('machine-translation-failed'.$new_comment_id); + $comment_new->comment_content = '' . sprintf(__('Machine translation failed. retry','sitepress'), ' onclick="icl_retry_mtr(this)" id="icl_retry_mtr_'.$comment_new->comment_ID.'_'.$nonce.'" href="#"') . ''; + $wpdb->update($wpdb->comments, array('comment_content'=>$comment_new->comment_content), array('comment_ID'=>$new_comment_id)); + } + + } + } + + $c_language = $this->user_language; + } + + $sql = " + SELECT * + FROM {$matches[1]}comments c USE INDEX (comment_date_gmt) + JOIN {$matches[1]}icl_translations t ON t.element_id=c.comment_ID + WHERE + t.element_type='comment' AND t.language_code='{$c_language}' AND + ( comment_approved = '0' OR comment_approved = '1' ) AND + comment_post_ID = '{$matches[2]}' + ORDER BY comment_date_gmt ASC + LIMIT {$matches[3]}, {$matches[4]}"; + } + } + return $sql; + } + + /* + function comment_feed_where($where){ + return $where; + } + */ + + function wp_insert_comment($comment_id, $comment_data){ + global $sitepress, $wpdb; + + if(isset($comment_data->comment_post_ID)){ + $comment_post_ID = $comment_data->comment_post_ID; + }elseif(isset($_POST['comment_post_ID'])){ + $comment_post_ID = $_POST['comment_post_ID']; + }else{ + return false; + } + + + $post_type = $wpdb->get_var($wpdb->prepare("SELECT post_type FROM {$wpdb->posts} WHERE ID=%d", $comment_post_ID)); + if(isset($_POST['icl_user_language'])){ + + if($_POST['icl_translate_reply']){ + $lang = $_POST['icl_user_language']; + // send the comment to translation + $this->send_comment_to_translation($comment_id, $wpdb->get_var($wpdb->prepare(" + SELECT language_code FROM {$wpdb->prefix}icl_translations + WHERE element_type='post_{$post_type}' AND element_id=%d", $comment_post_ID))); + }else{ + //$lang = $_POST['icl_comment_language']; + $lang = $wpdb->get_var($wpdb->prepare("SELECT language_code FROM {$wpdb->prefix}icl_translations WHERE element_type='post_{$post_type}' AND element_id=%d", $comment_post_ID)); + + // sync comment parent + // look for comment parent in original language and set for the comment that's been added + if(isset($_POST['comment_parent'])){ + $comment_parent = $_POST['comment_parent']; + }else{ + $comment_parent = $_POST['comment_ID']; + } + + if($comment_parent){ + $ctrid = (int)$sitepress->get_element_trid($comment_parent,'comment'); + $original_comment_parent = $wpdb->get_var(" + SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid={$ctrid} + AND element_type='comment' AND language_code='{$lang}'"); + $wpdb->update($wpdb->comments, array('comment_parent'=>$original_comment_parent), array('comment_ID'=>$comment_id)); + } + } + }else{ + $lang = $wpdb->get_var($wpdb->prepare("SELECT language_code FROM {$wpdb->prefix}icl_translations WHERE element_type='post_{$post_type}' AND element_id=%d", $comment_post_ID)); + if(!$lang){ + $lang = $this->user_language; // just in case + } + } + if(!$lang){ + $lang = $this->user_language; + } + $translation_id = $sitepress->set_element_language_details($comment_id, 'comment', null, $lang); + } + + function send_comment_to_translation($comment_id, $to_language){ + global $wpdb, $sitepress_settings, $sitepress; + + $iclq = new ICanLocalizeQuery($sitepress_settings['site_id'], $sitepress_settings['access_key']); + + $from_lang = $sitepress->get_language_details($this->user_language); + $to_lang = $sitepress->get_language_details($to_language); + $from_lang_server = ICL_Pro_Translation::server_languages_map($from_lang['english_name']); + $to_lang_server = ICL_Pro_Translation::server_languages_map($to_lang['english_name']); + $body = $wpdb->get_var("SELECT comment_content FROM {$wpdb->comments} WHERE comment_ID={$comment_id}"); + $rid = $iclq->cms_create_message($body, $from_lang_server, $to_lang_server); + if($rid > 0){ + // does this comment already exist in the messages status queue? + $msid = $wpdb->get_var("SELECT id FROM {$wpdb->prefix}icl_message_status WHERE object_type='comment' AND object_id={$comment_id}"); + if($msid){ + $wpdb->update($wpdb->prefix.'icl_message_status', + array('rid'=>$rid, 'md5' => md5($body), 'status' => MESSAGE_TRANSLATION_IN_PROGRESS), + array('id' => $msid) + ); + }else{ + $wpdb->insert($wpdb->prefix.'icl_message_status', array( + 'rid' => $rid, + 'object_id' => $comment_id, + 'from_language' => $this->user_language, + 'to_language' => $to_language, + 'md5' => md5($body), + 'object_type' => 'comment', + 'status' => MESSAGE_TRANSLATION_IN_PROGRESS + )); + } + } + } + + function add_comment_translation($object_id, $to_language, $translation){ + global $wpdb, $sitepress, $sitepress_settings; + + $original_comment = $wpdb->get_row(" + SELECT * + FROM {$wpdb->comments} WHERE comment_ID = {$object_id} + ", ARRAY_A); + $new_comment = $original_comment; + + //sync comment parent + if($original_comment['comment_parent']){ + $ctrid = (int)$sitepress->get_element_trid($original_comment['comment_parent'],'comment'); + $new_comment['comment_parent'] = (int) $wpdb->get_var(" + SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid={$ctrid} + AND element_type='comment' AND language_code='{$to_language}'"); + } + + $original_comment_id = $original_comment['comment_ID']; + unset($original_comment); + $new_comment['comment_content'] = $translation; + unset($new_comment['comment_ID']); + + //remove_action('wp_insert_comment', array($this, 'wp_insert_comment')); + + //check whether a translation for this comment in this language already exists + $trid = $sitepress->get_element_trid($original_comment_id, 'comment'); + + $existing_comment_id = $wpdb->get_var(" + SELECT element_id FROM {$wpdb->prefix}icl_translations + WHERE trid={$trid} AND element_type='comment' AND language_code='{$to_language}'"); + + if(!$existing_comment_id){ + remove_action('wp_insert_comment', array($this, 'wp_insert_comment')); + $new_id = wp_insert_comment($new_comment); + add_action('wp_insert_comment', array($this, 'wp_insert_comment'), 10, 2); + }else{ + $new_id = $new_comment['comment_ID'] = $existing_comment_id; + remove_action('transition_comment_status', array($this, 'transition_comment_status_actions')); + wp_update_comment($new_comment); + } + + $sitepress->set_element_language_details($new_id, 'comment', $trid, $to_language); + + return 1; //success + } + + function add_custom_xmlrpc_methods($methods){ + //$methods['icanlocalize.notify_comment_translation'] = array($this, 'add_comment_translation'); + return $methods; + } + + function comment_text_filter($comment_text){ + global $sitepress, $comment, $wp_query, $wpdb; + static $comment_ids, $comment_originals, $page_language, $translation_status; + + //if($this->enable_comments_translation && $this->user_language != $sitepress->get_current_language() ){ + if($this->enable_comments_translation){ + // run this block once + if(empty($comment_ids)){ + + $page_language = $wpdb->get_var(" + SELECT name + FROM {$wpdb->prefix}icl_languages_translations + WHERE language_code='".$sitepress->get_current_language()."' AND display_language_code='".$this->user_language."' + "); + + foreach($wp_query->comments as $c){ + $comment_ids[] = (int)$c->comment_ID; + } + $res = $wpdb->get_results(" + SELECT t.element_id, t.trid, ms.status + FROM {$wpdb->prefix}icl_translations t + LEFT JOIN {$wpdb->prefix}icl_message_status ms ON t.element_id=ms.object_id + WHERE t.element_id IN(".join(',',$comment_ids).") AND t.element_type='comment' AND t.language_code <> '".$sitepress->get_current_language()."' AND (ms.object_type='comment' OR ms.object_type IS NULL)"); + foreach($res as $row){ + $tridsmap[$row->trid] = $row->element_id; + if($row->status){ + $translation_status[$row->element_id] = $row->status; + } + + } + if(!empty($tridsmap)){ + $res = $wpdb->get_results(" + SELECT t.trid, c.comment_content + FROM {$wpdb->prefix}icl_translations t + JOIN {$wpdb->comments} c ON t.element_id = c.comment_ID + WHERE t.trid IN(".join(',',array_keys($tridsmap)).") AND t.element_type='comment' AND t.language_code='".$sitepress->get_current_language()."'"); + foreach($res as $row){ + $comment_originals[$tridsmap[$row->trid]] = $row->comment_content; + } + } + } + + $str = ''; + if(isset($comment_originals[$comment->comment_ID])){ + $str .= ''; + } + + if($translation_status[$comment->comment_ID] || isset($comment_originals[$comment->comment_ID])){ + $str .= '

              '; + } + if(isset($translation_status[$comment->comment_ID])){ + if($translation_status[$comment->comment_ID] == MESSAGE_TRANSLATION_IN_PROGRESS){ + $str .= '' . __('Translation in progress', 'sitepress' ) . ' '; + }elseif($translation_status[$comment->comment_ID] == MESSAGE_TRANSLATION_COMPLETE){ + $str .= '' . __('Translation complete', 'sitepress' ) . ' '; + } + } + if(isset($comment_originals[$comment->comment_ID])){ + $str .= ''. sprintf(__('Comment in %s', 'sitepress'),$page_language).''; + + } + if($translation_status[$comment->comment_ID] || isset($comment_originals[$comment->comment_ID])){ + $str .= '

              '; + } + + if($str){ + $comment_text .= $str; + } + } + return $comment_text; + } + + function comment_text_filter_admin($comment_text){ + global $comment, $comments, $wpdb; + static $comment_ids, $translation_status; + if(empty($comment_ids) && !empty($comments)){ + + foreach($comments as $c){ + $comment_ids[] = $c->comment_ID; + } + + $res = $wpdb->get_results(" + SELECT t.element_id, ms.status + FROM {$wpdb->prefix}icl_translations t + LEFT JOIN {$wpdb->prefix}icl_message_status ms ON t.element_id=ms.object_id + WHERE t.element_id IN(".join(',',$comment_ids).") AND t.element_type='comment' AND (ms.object_type='comment' OR ms.object_type IS NULL)"); + foreach($res as $row){ + $translation_status[$row->element_id] = $row->status ? $row->status : CMS_REQUEST_WAITING_FOR_PROJECT_CREATION; + } + } + + if(isset($translation_status[$comment->comment_ID])){ + if($translation_status[$comment->comment_ID] == MESSAGE_TRANSLATION_IN_PROGRESS){ + $str = '

              ' . __('Translation in progress', 'sitepress' ) . '

              '; + }elseif($translation_status[$comment->comment_ID] == MESSAGE_TRANSLATION_COMPLETE){ + $str = '

              ' . __('Translation complete', 'sitepress' ) . '

              '; + } + $comment_text .= $str; + } + + return $comment_text; + } + + function get_comments_number_filter($count){ + + global $wpdb, $post, $sitepress; + static $pre_load_done = false; + $post_type = $wpdb->get_var("SELECT post_type FROM {$wpdb->posts} WHERE ID='{$post->ID}'"); + $details = $sitepress->get_element_language_details($post->ID, 'post_' . $post_type); + if(empty($details)){ + return $count; + } + $post_lang = $details->language_code; + + if (!$pre_load_done && !ICL_DISABLE_CACHE) { + // search previous queries for a group of posts + foreach ($sitepress->queries as $query){ + $pos = strstr($query, 'post_id IN ('); + if ($pos !== FALSE) { + $group = substr($pos, 11); + $group = substr($group, 0, strpos($group, ')') + 1); + + $post_ids = explode(',', substr($group, 1, strlen($group) - 2)); + $counts = array(); + foreach($post_ids as $id) { + $counts[$id] = 0; + } + + $query = + "SELECT c.comment_post_ID FROM {$wpdb->comments} c + JOIN {$wpdb->prefix}icl_translations t ON c.comment_ID = t.element_id AND t.element_type='comment' + WHERE c.comment_post_ID IN {$group} AND c.comment_approved=1 AND t.language_code='{$post_lang}'" ; + $ret = $wpdb->get_results($query); + foreach($ret as $details){ + $counts[$details->comment_post_ID] = $counts[$details->comment_post_ID] + 1; + } + + foreach($counts as $id => $comment_count) { + $this->icl_comment_count_cache->set($id.$post_lang, $comment_count); + } + + break; + } + } + $pre_load_done = true; + } + + $comment_count = $this->icl_comment_count_cache->get($post->ID.$post_lang); + + if ($comment_count === false) { + $comment_count = $wpdb->get_var(" + SELECT COUNT(*) FROM {$wpdb->comments} c + JOIN {$wpdb->prefix}icl_translations t ON c.comment_ID = t.element_id AND t.element_type='comment' + WHERE c.comment_post_ID={$post->ID} AND c.comment_approved=1 AND t.language_code='{$post_lang}' + "); + $this->icl_comment_count_cache->set($post->ID.$post_lang, $comment_count); + } + return $comment_count; + } + +} + +$IclCommentsTranslation = new IclCommentsTranslation(); + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/comments-translation/google_languages_map.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/comments-translation/google_languages_map.php new file mode 100644 index 0000000..fab0ebe --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/comments-translation/google_languages_map.php @@ -0,0 +1,93 @@ +'af', + 'ALBANIAN'=>'sq', + 'AMHARIC'=>'am', + 'ARABIC'=>'ar', + 'ARMENIAN'=>'hy', + 'AZERBAIJANI'=>'az', + 'BASQUE'=>'eu', + 'BELARUSIAN'=>'be', + 'BENGALI'=>'bn', + 'BIHARI'=>'bh', + 'BULGARIAN'=>'bg', + 'BURMESE'=>'my', + 'CATALAN'=>'ca', + 'CHEROKEE'=>'chr', + 'CHINESE'=>'zh', + 'CHINESE_SIMPLIFIED'=>'zh-CN', + 'CHINESE_TRADITIONAL'=>'zh-TW', + 'CROATIAN'=>'hr', + 'CZECH'=>'cs', + 'DANISH'=>'da', + 'DHIVEHI'=>'dv', + 'DUTCH' => 'nl', + 'ENGLISH'=>'en', + 'ESPERANTO'=>'eo', + 'ESTONIAN'=>'et', + 'FILIPINO'=>'tl', + 'FINNISH'=>'fi', + 'FRENCH'=>'fr', + 'GALICIAN'=>'gl', + 'GEORGIAN'=>'ka', + 'GERMAN'=>'de', + 'GREEK'=>'el', + 'GUARANI'=>'gn', + 'GUJARATI'=>'gu', + 'HEBREW'=>'iw', + 'HINDI'=>'hi', + 'HUNGARIAN'=>'hu', + 'ICELANDIC'=>'is', + 'INDONESIAN'=>'id', + 'INUKTITUT'=>'iu', + 'ITALIAN'=>'it', + 'JAPANESE'=>'ja', + 'KANNADA'=>'kn', + 'KAZAKH'=>'kk', + 'KHMER'=>'km', + 'KOREAN'=>'ko', + 'KURDISH'=> 'ku', + 'KYRGYZ'=> 'ky', + 'LAOTHIAN'=> 'lo', + 'LATVIAN'=>'lv', + 'LITHUANIAN'=>'lt', + 'MACEDONIAN'=>'mk', + 'MALAY'=>'ms', + 'MALAYALAM'=>'ml', + 'MALTESE'=>'mt', + 'MARATHI'=>'mr', + 'MONGOLIAN'=>'mn', + 'NEPALI'=>'ne', + 'NORWEGIAN'=>'no', + 'ORIYA'=>'or', + 'PASHTO'=>'ps', + 'PERSIAN'=>'fa', + 'POLISH'=>'pl', + 'PORTUGUESE'=>'pt-PT', + 'PUNJABI'=>'pa', + 'ROMANIAN'=>'ro', + 'RUSSIAN'=>'ru', + 'SANSKRIT'=>'sa', + 'SERBIAN'=>'sr', + 'SINDHI'=>'sd', + 'SINHALESE'=>'si', + 'SLOVAK'=>'sk', + 'SLOVENIAN'=>'sl', + 'SPANISH'=>'es', + 'SWAHILI'=>'sw', + 'SWEDISH'=>'sv', + 'TAJIK'=>'tg', + 'TAMIL'=>'ta', + 'TAGALOG'=>'tl', + 'TELUGU'=>'te', + 'THAI'=>'th', + 'TIBETAN'=>'bo', + 'TURKISH'=>'tr', + 'UKRAINIAN'=>'uk', + 'URDU'=>'ur', + 'UZBEK'=>'uz', + 'UIGHUR'=>'ug', + 'VIETNAMESE'=>'vi', + 'UNKNOWN'=>'' +); +?> \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/constants.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/constants.php new file mode 100644 index 0000000..4ecb513 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/constants.php @@ -0,0 +1,58 @@ +blogid; + } + + if($blog_id){ + switch_to_blog($blog_id); + update_option('_wpml_inactive', true); + restore_current_blog(); + } + + if(isset($_REQUEST['submit'])){ + wp_redirect(network_admin_url('admin.php?page='.ICL_PLUGIN_FOLDER.'/menu/network.php&updated=true&action=deactivatewpml')); + exit(); + } + + +} + +function icl_network_activate_wpml($blog_id = false){ + + if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'activatewpml'){ + if (empty($_REQUEST['_wpnonce']) || $_REQUEST['_wpnonce'] != wp_create_nonce( 'activatewpml' ) ){ + return; + } + } + + if(empty($blog_id)){ + $blog_id = isset($_REQUEST['id']) ? $_REQUEST['id'] : $wpdb->blogid; + } + + if($blog_id){ + switch_to_blog($blog_id); + delete_option('_wpml_inactive'); + restore_current_blog(); + } + + wp_redirect(network_admin_url('admin.php?page='.ICL_PLUGIN_FOLDER.'/menu/network.php&updated=true&action=activatewpml')); + exit(); + + +} \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/functions-troubleshooting.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/functions-troubleshooting.php new file mode 100644 index 0000000..3db07b4 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/functions-troubleshooting.php @@ -0,0 +1,263 @@ +prefix)."%';"; + + $result= mysql_query($sql); + if( $result) + { + while( $row= mysql_fetch_row($result)) + { + //_icl_ts_mysqldump_table_structure($row[0]); + //_icl_ts_mysqldump_table_data($row[0]); + _icl_ts_backup_table($row[0], 0, $fp); + } + } + else + { + echo "/* no tables in $mysql_database */\n"; + } + mysql_free_result($result); + fclose ($fp); + + + if(file_exists($dump_tmp_file)){ + $data = file_get_contents($dump_tmp_file); + @unlink($dump_tmp_file); + }else{ + $data = ob_get_contents(); + ob_end_clean(); + } + + return $data ; +} + +if ( ! defined('ROWS_PER_SEGMENT') ) define('ROWS_PER_SEGMENT', 100); + +function _icl_ts_stow($query_line, $fp) { + if(! @fwrite($fp, $query_line,strlen($query_line))) + die(__('Error writing query:','sitepress') . ' ' . $query_line); +} + +function _icl_ts_backquote($a_name) { + if (!empty($a_name) && $a_name != '*') { + if (is_array($a_name)) { + $result = array(); + reset($a_name); + while(list($key, $val) = each($a_name)) + $result[$key] = '`' . $val . '`'; + return $result; + } else { + return '`' . $a_name . '`'; + } + } else { + return $a_name; + } +} + +function _icl_ts_backup_table($table, $segment = 'none', $fp) { + global $wpdb; + + $table_structure = $wpdb->get_results("DESCRIBE $table"); + if(($segment == 'none') || ($segment == 0)) { + _icl_ts_stow("\n\n", $fp); + _icl_ts_stow("DROP TABLE IF EXISTS " . _icl_ts_backquote($table) . ";\n", $fp); + // Table structure + _icl_ts_stow("\n\n", $fp); + $create_table = $wpdb->get_results("SHOW CREATE TABLE $table", ARRAY_N); + _icl_ts_stow($create_table[0][1] . ' ;', $fp); + _icl_ts_stow("\n\n", $fp); + } + + if(($segment == 'none') || ($segment >= 0)) { + $defs = array(); + $ints = array(); + foreach ($table_structure as $struct) { + if ( (0 === strpos($struct->Type, 'tinyint')) || + (0 === strpos(strtolower($struct->Type), 'smallint')) || + (0 === strpos(strtolower($struct->Type), 'mediumint')) || + (0 === strpos(strtolower($struct->Type), 'int')) || + (0 === strpos(strtolower($struct->Type), 'bigint')) ) { + $defs[strtolower($struct->Field)] = ( null === $struct->Default ) ? 'NULL' : $struct->Default; + $ints[strtolower($struct->Field)] = "1"; + } + } + + + // Batch by $row_inc + + if($segment == 'none') { + $row_start = 0; + $row_inc = ROWS_PER_SEGMENT; + } else { + $row_start = $segment * ROWS_PER_SEGMENT; + $row_inc = ROWS_PER_SEGMENT; + } + + do { + $table_data = $wpdb->get_results("SELECT * FROM $table LIMIT {$row_start}, {$row_inc}", ARRAY_A); + + $entries = 'INSERT INTO ' . _icl_ts_backquote($table) . ' VALUES ('; + // \x08\\x09, not required + $search = array("\x00", "\x0a", "\x0d", "\x1a"); + $replace = array('\0', '\n', '\r', '\Z'); + if($table_data) { + foreach ($table_data as $row) { + $values = array(); + foreach ($row as $key => $value) { + + if ($ints[strtolower($key)]) { + // make sure there are no blank spots in the insert syntax, + // yet try to avoid quotation marks around integers + $value = ( null === $value || '' === $value) ? $defs[strtolower($key)] : $value; + $values[] = ( '' === $value ) ? "''" : $value; + } else { + + if(is_null($value)){ + $values[] = 'NULL'; + }else{ + $values[] = "'" . str_replace($search, $replace, esc_sql($value)) . "'"; + + } + + } + } + + _icl_ts_stow(" \n" . $entries . implode(', ', $values) . ');', $fp); + } + $row_start += $row_inc; + } + } while((count($table_data) > 0) and ($segment=='none')); + } + + if(($segment == 'none') || ($segment < 0)) { + // Create footer/closing comment in SQL-file + _icl_ts_stow("\n", $fp); + } + } // end backup_table() + + + +function icl_reset_wpml($blog_id = false){ + global $wpdb; + + if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'resetwpml'){ + check_admin_referer( 'resetwpml' ); + } + + if(empty($blog_id)){ + $blog_id = isset($_POST['id']) ? $_POST['id'] : $wpdb->blogid; + } + + define('ICL_IS_WPML_RESET', true); + + if($blog_id || !function_exists('is_multisite') || !is_multisite()){ + + if(function_exists('is_multisite') && is_multisite()){ + switch_to_blog($blog_id); + } + + $icl_tables = array( + $wpdb->prefix . 'icl_languages', + $wpdb->prefix . 'icl_languages_translations', + $wpdb->prefix . 'icl_translations', + $wpdb->prefix . 'icl_translation_status', + $wpdb->prefix . 'icl_translate_job', + $wpdb->prefix . 'icl_translate', + $wpdb->prefix . 'icl_locale_map', + $wpdb->prefix . 'icl_flags', + $wpdb->prefix . 'icl_content_status', + $wpdb->prefix . 'icl_core_status', + $wpdb->prefix . 'icl_node', + $wpdb->prefix . 'icl_strings', + $wpdb->prefix . 'icl_string_translations', + $wpdb->prefix . 'icl_string_status', + $wpdb->prefix . 'icl_string_positions', + $wpdb->prefix . 'icl_message_status', + $wpdb->prefix . 'icl_reminders', + ); + + foreach($icl_tables as $icl_table){ + mysql_query("DROP TABLE IF EXISTS " . $icl_table); + } + + delete_option('icl_sitepress_settings'); + delete_option('icl_sitepress_version'); + delete_option('_icl_cache'); + delete_option('_icl_admin_option_names'); + delete_option('wp_icl_translators_cached'); + delete_option('WPLANG'); + + $wpmu_sitewide_plugins = (array) maybe_unserialize( get_site_option( 'active_sitewide_plugins' ) ); + if(!isset($wpmu_sitewide_plugins[ICL_PLUGIN_FOLDER.'/sitepress.php'])){ + deactivate_plugins(basename(ICL_PLUGIN_PATH) . '/sitepress.php'); + $ra = get_option('recently_activated'); + $ra[basename(ICL_PLUGIN_PATH) . '/sitepress.php'] = time(); + update_option('recently_activated', $ra); + }else{ + update_option('_wpml_inactive', true); + } + + + if(isset($_REQUEST['submit'])){ + wp_redirect(network_admin_url('admin.php?page='.ICL_PLUGIN_FOLDER.'/menu/network.php&updated=true&action=resetwpml')); + exit(); + } + + if(function_exists('is_multisite') && is_multisite()){ + restore_current_blog(); + } + + } +} + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/functions.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/functions.php new file mode 100644 index 0000000..27fc429 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/functions.php @@ -0,0 +1,160 @@ +' . __('Configure', 'sitepress') . ''; + } + return $links; +} + +if(defined('ICL_DEBUG_MODE') && ICL_DEBUG_MODE){ + add_action('admin_notices', '_icl_deprecated_icl_debug_mode'); +} + +function _icl_deprecated_icl_debug_mode(){ + echo '

              ICL_DEBUG_MODE no longer supported. Please use WP_DEBUG instead.

              '; +} + + + +function icl_js_escape($str){ + $str = esc_js($str); + $str = htmlspecialchars_decode($str); + return $str; +} + +function icl_nobreak($str){ + return preg_replace("# #", ' ', $str); +} + +function icl_strip_control_chars($string){ + // strip out control characters (all but LF, NL and TAB) + $string = preg_replace('/[\x00-\x08\x0B-\x0C\x0E-\x1F\x7F]/', '', $string); + return $string; +} + +function _icl_tax_has_objects_recursive($id, $term_id = -1, $rec = 0){ + // based on the case where two categories were one the parent of another + // eliminating the chance of infinite loops by letting this function calling itself too many times + // 100 is the default limit in most of teh php configuration + // + // this limit this function to work only with categories nested up to 60 levels + // should enough for most cases + if($rec > 60) return false; + + global $wpdb; + + if($term_id === -1){ + $term_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=%d", $id)); + } + + $children = $wpdb->get_results($wpdb->prepare(" + SELECT term_taxonomy_id, term_id, count FROM {$wpdb->term_taxonomy} WHERE parent = %d + ", $term_id)); + + $count = 0; + foreach($children as $ch){ + $count += $ch->count; + } + + if($count){ + return true; + }else{ + foreach($children as $ch){ + if(_icl_tax_has_objects_recursive($ch->term_taxonomy_id, $ch->term_id, $rec+1)){ + return true; + } + } + + } + return false; +} + +function icl_get_post_children_recursive($post, $type = 'page'){ + global $wpdb; + + $post = (array)$post; + + $children = $wpdb->get_col($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_type=%s AND post_parent IN (".join(',', $post).")", $type)); + + if(!empty($children)){ + $children = array_merge($children, icl_get_post_children_recursive($children)); + } + + return $children; + +} + +function icl_get_tax_children_recursive($id, $taxonomy = 'category'){ + global $wpdb; + + $id = (array)$id; + + $children = $wpdb->get_col($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} x WHERE x.taxonomy=%s AND parent IN (".join(',', $id).")", $taxonomy)); + + if(!empty($children)){ + $children = array_merge($children, icl_get_tax_children_recursive($children)); + } + + return $children; + +} + +function _icl_trash_restore_prompt(){ + global $sitepress; + if(isset($_GET['lang'])){ + $post = get_post(intval($_GET['post'])); + if(isset($post->post_status) && $post->post_status == 'trash'){ + $post_type_object = get_post_type_object( $post->post_type ); + $ret = '

              '; + $ret .= sprintf(__('This translation is currently in the trash. You need to either delete it permanently or restore it in order to continue.'), + get_delete_post_link($post->ID, '', true) , + wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&action=untrash', $post->ID ) ), 'untrash-' . $post->post_type . '_' . $post->ID) + ); + $ret .= '

              '; + wp_die($ret); + } + } +} + +function icl_pop_info($message, $icon='info', $args = array()){ + switch($icon){ + case 'info': + $icon = ICL_PLUGIN_URL . '/res/img/info.png'; + break; + case 'question': + $icon = ICL_PLUGIN_URL . '/res/img/question1.png'; + break; + } + + $defaults = array( + 'icon_size' => 16, + 'but_style' => array() + ); + extract($defaults); + extract($args, EXTR_OVERWRITE); + + ?> +
              + info +
              + x + +
              +
              + +
              +

              This is a development version of WPML, provided for evaluation purposes only. The code you are using did not go through any testing or QA. Do not use it in production sites.

              +

              To obtain production versions of WPML, visit: wpml.org.

              +
              + diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/language-canonical-redirects.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/language-canonical-redirects.php new file mode 100644 index 0000000..838a61c --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/language-canonical-redirects.php @@ -0,0 +1,18 @@ +posts)){ + global $wpdb; + $pid = get_query_var('p'); + $permalink = html_entity_decode(get_permalink($pid)); + if($permalink){ + wp_redirect($permalink, 301); + exit; + } + } +} +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/language-domains-preview.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/language-domains-preview.php new file mode 100644 index 0000000..b39823f --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/language-domains-preview.php @@ -0,0 +1,25 @@ +get_current_language() != $sitepress->get_default_language()){ + $post_id = $_GET['p']; + $lang = $sitepress->get_current_language(); + $default_home = get_option('home'); + $_GET['lang'] = $lang; + $redir = $default_home . '?' . http_build_query($_GET); + wp_redirect($redir); + exit; +} + +if(isset($_GET['preview']) && $sitepress_settings['language_negotiation_type'] == 2){ + add_filter('icl_current_language', 'icl_current_language_preview_hack_filter'); + function icl_current_language_preview_hack_filter($lang){ + if(isset($_GET['lang'])){ + $lang = esc_html($_GET['lang']); + } + return $lang; + } +} + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/misc-constants.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/misc-constants.php new file mode 100644 index 0000000..ed27801 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/misc-constants.php @@ -0,0 +1,3 @@ + diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/missing-php-functions.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/missing-php-functions.php new file mode 100644 index 0000000..4719086 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/missing-php-functions.php @@ -0,0 +1,153 @@ +decode($data) ); + } +} + +if(!function_exists('_cleanup_header_comment')){ + function _cleanup_header_comment($str) { + return trim(preg_replace("/\s*(?:\*\/|\?>).*/", '', $str)); + } +} + +/* remove this when we stop supporting WP versions below 3.0 */ +if(!function_exists('wp_get_mu_plugins')){ + function wp_get_mu_plugins() { + $mu_plugins = array(); + if ( !is_dir( WPMU_PLUGIN_DIR ) ) + return $mu_plugins; + if ( ! $dh = opendir( WPMU_PLUGIN_DIR ) ) + return $mu_plugins; + while ( ( $plugin = readdir( $dh ) ) !== false ) { + if ( substr( $plugin, -4 ) == '.php' ) + $mu_plugins[] = WPMU_PLUGIN_DIR . '/' . $plugin; + } + closedir( $dh ); + sort( $mu_plugins ); + + return $mu_plugins; + } +} + + +if(!function_exists('money_format')): +/* +That it is an implementation of the function money_format for the +platforms that do not it bear. + +The function accepts to same string of format accepts for the +original function of the PHP. + +(Sorry. my writing in English is very bad) + +The function is tested using PHP 5.1.4 in Windows XP +and Apache WebServer. +*/ +function money_format($format, $number) +{ + $regex = '/%((?:[\^!\-]|\+|\(|\=.)*)([0-9]+)?'. + '(?:#([0-9]+))?(?:\.([0-9]+))?([in%])/'; + if (setlocale(LC_MONETARY, 0) == 'C') { + setlocale(LC_MONETARY, ''); + } + $locale = localeconv(); + preg_match_all($regex, $format, $matches, PREG_SET_ORDER); + foreach ($matches as $fmatch) { + $value = floatval($number); + $flags = array( + 'fillchar' => preg_match('/\=(.)/', $fmatch[1], $match) ? + $match[1] : ' ', + 'nogroup' => preg_match('/\^/', $fmatch[1]) > 0, + 'usesignal' => preg_match('/\+|\(/', $fmatch[1], $match) ? + $match[0] : '+', + 'nosimbol' => preg_match('/\!/', $fmatch[1]) > 0, + 'isleft' => preg_match('/\-/', $fmatch[1]) > 0 + ); + $width = trim($fmatch[2]) ? (int)$fmatch[2] : 0; + $left = trim($fmatch[3]) ? (int)$fmatch[3] : 0; + $right = trim($fmatch[4]) ? (int)$fmatch[4] : $locale['int_frac_digits']; + $conversion = $fmatch[5]; + + $positive = true; + if ($value < 0) { + $positive = false; + $value *= -1; + } + $letter = $positive ? 'p' : 'n'; + + $prefix = $suffix = $cprefix = $csuffix = $signal = ''; + + $signal = $positive ? $locale['positive_sign'] : $locale['negative_sign']; + switch (true) { + case $locale["{$letter}_sign_posn"] == 1 && $flags['usesignal'] == '+': + $prefix = $signal; + break; + case $locale["{$letter}_sign_posn"] == 2 && $flags['usesignal'] == '+': + $suffix = $signal; + break; + case $locale["{$letter}_sign_posn"] == 3 && $flags['usesignal'] == '+': + $cprefix = $signal; + break; + case $locale["{$letter}_sign_posn"] == 4 && $flags['usesignal'] == '+': + $csuffix = $signal; + break; + case $flags['usesignal'] == '(': + case $locale["{$letter}_sign_posn"] == 0: + $prefix = '('; + $suffix = ')'; + break; + } + if (!$flags['nosimbol']) { + $currency = $cprefix . + ($conversion == 'i' ? $locale['int_curr_symbol'] : $locale['currency_symbol']) . + $csuffix; + } else { + $currency = ''; + } + $space = $locale["{$letter}_sep_by_space"] ? ' ' : ''; + + $value = number_format($value, $right, $locale['mon_decimal_point'], + $flags['nogroup'] ? '' : $locale['mon_thousands_sep']); + $value = @explode($locale['mon_decimal_point'], $value); + + $n = strlen($prefix) + strlen($currency) + strlen($value[0]); + if ($left > 0 && $left > $n) { + $value[0] = str_repeat($flags['fillchar'], $left - $n) . $value[0]; + } + $value = implode($locale['mon_decimal_point'], $value); + if ($locale["{$letter}_cs_precedes"]) { + $value = $prefix . $currency . $space . $value . $suffix; + } else { + $value = $prefix . $value . $space . $currency . $suffix; + } + if ($width > 0) { + $value = str_pad($value, $width, $flags['fillchar'], $flags['isleft'] ? + STR_PAD_RIGHT : STR_PAD_LEFT); + } + + $format = str_replace($fmatch[0], $value, $format); + } + return $format; +} +endif; + +if(!defined('E_DEPRECATED')){ define('E_DEPRECATED', 8192); } + +if(!function_exists('esc_textarea')): + + function esc_textarea( $text ) { + $safe_text = htmlspecialchars( $text, ENT_QUOTES ); + return apply_filters( 'esc_textarea', $safe_text, $text ); + } + +endif; +?> \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/supress-warnings-for-xmlrpc.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/supress-warnings-for-xmlrpc.php new file mode 100644 index 0000000..8b14a0d --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/supress-warnings-for-xmlrpc.php @@ -0,0 +1,11 @@ + diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/vars-php-multisite.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/vars-php-multisite.php new file mode 100644 index 0000000..6d5d960 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/hacks/vars-php-multisite.php @@ -0,0 +1,29 @@ +post_status != 'trash'){ + wp_redirect(get_edit_post_link($sitepress_settings['urls']['root_page'], 'no-display')); + exit; + } + } + + + if(isset($_GET['wpml_root_page']) && $_GET['wpml_root_page'] || (isset($_GET['post']) && $_GET['post'] == $sitepress_settings['urls']['root_page'])){ + remove_action('admin_head', array($sitepress,'post_edit_language_options')); + add_action('admin_head', 'wpml_home_url_language_box_setup'); + + // don't filter the permalink + // but filter permalink of others + remove_action('page_link', array($sitepress, 'permalink_filter'),1,2); + add_action('page_link', 'wpml_home_url_permalink_filter',1,2); + } + } + + add_action('save_post', 'wpml_home_url_save_post_actions', 0, 2); + } + + function wpml_home_url_permalink_filter($p, $pid){ + global $sitepress_settings, $sitepress; + + if(is_object($pid)){ + $pid = $pid->ID; + } + + if($sitepress_settings['urls']['root_page'] != $pid){ + + $p = $sitepress->permalink_filter($p, $pid); + + }else{ + + $p = home_url(); + + } + + return $p; + + } + + function wpml_home_url_exclude_root_page_from_menus($args){ + global $sitepress_settings; + + if(!empty($args['exclude'])){ + $args['exclude'] .= ','; + }else{ + $args['exclude'] = ''; + } + $args['exclude'] .= $sitepress_settings['urls']['root_page']; + + + return $args; + + } + + function wpml_home_url_exclude_root_page($excludes){ + global $sitepress_settings; + + $excludes[] = $sitepress_settings['urls']['root_page']; + + return $excludes; + + } + + function wpml_home_url_exclude_root_page2($args){ + global $sitepress_settings; + + $args['exclude'][] = $sitepress_settings['urls']['root_page']; + + return $args; + } + + function wpml_home_url_get_pages($pages){ + global $sitepress_settings; + + foreach($pages as $k => $page){ + if($page->ID == $sitepress_settings['urls']['root_page']){ + unset($pages[$k]); + $pages = array_values($pages); + break; + } + } + + return $pages; + } + + function wpml_home_url_language_box_setup(){ + add_meta_box('icl_div', __('Language', 'sitepress'), 'wpml_home_url_language_box', 'page', 'side', 'high'); + } + + function wpml_home_url_language_box($post){ + global $sitepress_settings; + + if(isset($_GET['wpml_root_page']) || (!empty($sitepress_settings['urls']['root_page']) && $post->ID == $sitepress_settings['urls']['root_page'])){ + _e("This page does not have a language since it's the site's root page."); + echo ''; + + } + } + + function wpml_home_url_save_post_actions($pidd, $post){ + global $sitepress_settings, $sitepress, $wpdb; + + if(isset($_POST['_wpml_root_page']) && $_POST['_wpml_root_page']){ + + if(isset($_POST['autosave']) || (isset($post->post_type) && $post->post_type == 'revision')) return; + + + $iclsettings['urls']['root_page'] = $post->ID; + $sitepress->save_settings($iclsettings); + + remove_action('save_post', array($sitepress,'save_post_actions'), 10, 2); + + if(!is_null($iclTranslationManagement)){ + remove_action('save_post', array($iclTranslationManagement, 'save_post_actions'), 11, 2); + } + + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translations WHERE element_type='post_page' AND element_id=%d", $post->ID)); + + } + + + } + + function wpml_home_url_setup_root_page(){ + global $sitepress, $sitepress_settings; + + remove_action('template_redirect', 'redirect_canonical'); + add_action('parse_query', 'wpml_home_url_parse_query'); + + remove_filter('posts_join', array($sitepress,'posts_join_filter'), 10, 2); + remove_filter('posts_where', array($sitepress,'posts_where_filter'), 10, 2); + + $rp = get_post($sitepress_settings['urls']['root_page']); + if($rp && $rp->post_status != 'trash'){ + $sitepress->ROOT_URL_PAGE_ID = $sitepress_settings['urls']['root_page']; + } + + } + + function wpml_home_url_parse_query($q){ + global $sitepress; + + $parts = parse_url(get_option('home')); + + if(!isset($parts['path'])) $parts['path'] = ''; + + if(trim($parts['path'], '/') != trim($_SERVER['REQUEST_URI'], '/') && $q->query_vars['page_id'] == get_option('page_on_front')){ + return $q; + } + + if(!empty($sitepress->ROOT_URL_PAGE_ID)){ + $q->query_vars['page_id'] = $sitepress->ROOT_URL_PAGE_ID; + $q->query['page_id'] = $sitepress->ROOT_URL_PAGE_ID; + $q->is_page = 1; + $q->queried_object = new WP_Post(get_post($sitepress->ROOT_URL_PAGE_ID)); + $q->queried_object_id = $sitepress->ROOT_URL_PAGE_ID; + } + + return $q; + } + + function wpml_home_url_redirect_home(){ + global $sitepress_settings; + + $queried_object = get_queried_object(); + $home = get_option( 'home' ); + $parts = parse_url( $home ); + + if(!isset($parts['path'])) $parts['path'] = ''; + + $request_url = $_SERVER[ 'REQUEST_URI' ]; + if($queried_object && $queried_object->ID == $sitepress_settings['urls']['root_page'] && trim($parts['path'], '/') != trim( $request_url, '/')){ + wp_redirect( $home, 301); + exit; + } + + } + + function wpml_home_url_ls_hide_check(){ + global $sitepress_settings, $sitepress; + + $hide = + $sitepress_settings['language_negotiation_type'] == 1 && + $sitepress_settings['urls']['directory_for_default_language'] && + $sitepress_settings['urls']['show_on_root'] == 'page' && + $sitepress_settings['urls']['hide_language_switchers'] && + isset($sitepress->ROOT_URL_PAGE_ID) && + $sitepress->ROOT_URL_PAGE_ID == $sitepress_settings['urls']['root_page']; + + return $hide; + + } \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/icl-admin-notifier.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/icl-admin-notifier.php new file mode 100644 index 0000000..bb605dc --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/icl-admin-notifier.php @@ -0,0 +1,181 @@ + $message, + 'type' => $type + ); + self::saveMessages( $messages ); + } + + private static function getMessages() + { + $messages = get_option( 'icl_admin_messages' ); + if ( !( isset( $messages ) && $messages != false ) ) + return array( 'messages' => array(), 'instant_messages' => array() ); + if ( !isset( $messages[ 'messages' ] ) || !isset( $messages[ 'instant_messages' ] ) ) { + $messages = array( 'messages' => array(), 'instant_messages' => array() ); + } + + return (array)$messages; + } + + private static function saveMessages( $messages ) + { + if ( isset( $messages ) ) { + update_option( 'icl_admin_messages', (array)$messages ); + } + } + + public static function addMessage( $id, $msg, $type = '', $hide = true, $message_fallback_when_hidden = false, $type_fallback_when_hidden = false, $group = false ) + { + if ( !isset( $id ) || $id == null ) + return; + + $messages = self::getMessages(); + + if ( !isset( $messages[ 'messages' ][ $id ] ) ) { + $messages[ 'messages' ][ $id ] = array( + 'text' => $msg, + 'type' => $type, + 'hide' => $hide, + 'text_fallback' => $message_fallback_when_hidden, + 'type_fallback' => $type_fallback_when_hidden, + 'group' => $group, + ); + self::saveMessages( $messages ); + } + } + + public static function hideMessage() + { + $message_id = isset( $_POST[ 'icl-admin-message-id' ] ) ? $_POST[ 'icl-admin-message-id' ] : ''; + $message_id = preg_replace( '/^icl-id-/', '', $message_id ); + if ( !isset( $message_id ) ) + exit; + + $fallback = self::removeMessage( $message_id ); + + if ( $fallback ) { + echo json_encode( $fallback ); + } + exit; + } + + public static function removeMessage( $message_id ) + { + if ( $message_id == null || !isset( $message_id ) ) + return false; + + $messages = self::getMessages(); + + if ( !isset( $messages[ 'messages' ][ $message_id ] ) ) + return false; + + $has_fallback = false; + if ( $messages[ 'messages' ][ $message_id ][ 'text_fallback' ] ) { + $messages[ 'messages' ][ $message_id ][ 'text' ] = $messages[ 'messages' ][ $message_id ][ 'text_fallback' ]; + //if ( $messages[ 'messages' ][ $message_id ][ 'type_fallback' ] ) { + $messages[ 'messages' ][ $message_id ][ 'type' ] = $messages[ 'messages' ][ $message_id ][ 'type_fallback' ]; + //} + $messages[ 'messages' ][ $message_id ][ 'text_fallback' ] = false; + $messages[ 'messages' ][ $message_id ][ 'type_fallback' ] = false; + $messages[ 'messages' ][ $message_id ][ 'hide' ] = false; + + $has_fallback = true; + } else { + unset( $messages[ 'messages' ][ $message_id ] ); + } + + self::saveMessages( $messages ); + + if ( $has_fallback ) + return $messages[ 'messages' ][ $message_id ]; + + return false; + } + + public static function displayMessages( $group = false ) + { + if ( current_user_can( 'manage_options' ) ) { + $messages = self::getMessages(); + + foreach ( $messages[ 'messages' ] as $id => $msg ) { + if ( !$group || (isset($msg[ 'group' ]) && $msg[ 'group' ] == $group )) { + self::displayMessage( $id, $msg[ 'text' ], $msg[ 'type' ], $msg[ 'hide' ] ); + } + } + foreach ( $messages[ 'instant_messages' ] as $msg ) { + self::displayInstantMessage( $msg[ 'text' ], $msg[ 'type' ] ); + } + // delete instant messages + $messages[ 'instant_messages' ] = array(); + self::saveMessages( $messages ); + } + } + + private static function displayMessage( $id, $message, $type = '', $hide = true ) + { + if ( $type != 'error' ) { + $type = $type ? 'icl-admin-message ' . $type : ''; + ?> +
              + +
              + ' . stripslashes( $message ); + if ( $hide ) { + echo ' ' . __( 'Dismiss', 'ICanLocalize' ) . ''; + } + echo '

              '; + ?> +
              + +
              + +
              + +
              + \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/import-xml.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/import-xml.php new file mode 100644 index 0000000..b079f6b --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/import-xml.php @@ -0,0 +1,39 @@ +get_active_languages(); + if (empty($langs)) { + return; + } + $default = $sitepress->get_default_language(); + + $out = '

              ' . __('Select Language', 'sitepress') . '<\/h2>

              '; + echo '
              '; + } + + function post_availability($content){ + $out = ''; + if(is_singular()){ + $languages = icl_get_languages('skip_missing=true'); + if(1 < count($languages)){ + //$out .= $this->settings['post_available_before'] ? $this->settings['post_available_before'] : ''; + foreach($languages as $l){ + if(!$l['active']) $langs[] = ''.$l['translated_name'].''; + } + $out .= join(', ', $langs); + //$out .= $this->settings['post_available_after'] ? $this->settings['post_available_after'] : ''; + if(!function_exists('icl_t')){ + function icl_t($c, $n, $str){return $str; } + } + $out = '

              ' . sprintf(icl_t('WPML', 'Text for alternative languages for posts', $this->settings['icl_post_availability_text']), $out) . '

              '; + } + } + + $out = apply_filters('icl_post_alternative_languages', $out); + + if ($this->settings['icl_post_availability_position'] == 'above'){ + $content = $out . $content; + }else{ + $content = $content . $out; + } + + return $content; + + } + + function language_selector_footer_style(){ + + $add = false; + foreach($this->footer_css_defaults as $key=>$d){ + if (isset($this->settings['icl_lang_sel_footer_config'][$key]) && $this->settings['icl_lang_sel_footer_config'][$key] != $d){ + $this->settings['icl_lang_sel_footer_config'][$key] . "\n"; + $add = true; + break; + } + } + if($add){ + echo "\n\n"; + } + } + + function language_selector_footer() { + + global $sitepress; + + if(function_exists('wpml_home_url_ls_hide_check') && wpml_home_url_ls_hide_check()){ + return; + } + + $languages = $this->footer_preview ? icl_get_languages('skip_missing=0') : $sitepress->get_ls_languages(); + + if(!empty($languages)){ + echo ' + '; + } + } + + function admin(){ + foreach($this->color_schemes as $key=>$val): ?> + widget_css_defaults as $k=>$v): ?> + + + + + +

              + + + + +

              + + + + +

            • + +
              + +

              +

              + +

              + + + color_schemes as $key=>$val): ?> + footer_css_defaults as $k=>$v): ?> + + + + +

              + settings['icl_lang_sel_footer'])) echo 'style="display:none;" '; ?>> + + + +

              + + +
              + +
              +

              +
                +
              • + +
              • +
              • + +
              • +
              • + +
              • +
              +
              + +
              +

              +

              + +

              +
              + + + + +widget_css_defaults = $this->widget_css_defaults; + $add = false; + foreach($this->widget_css_defaults as $key=>$d){ + if(isset($this->settings['icl_lang_sel_config'][$key]) && $this->settings['icl_lang_sel_config'][$key] != $d){ + $this->settings['icl_lang_sel_config'][$key] . "\n"; + $add = true; + break; + } + } + if($add){ + $list = ($this->settings['icl_lang_sel_type'] == 'list') ? true : false; + echo "\n\n"; + } + if (isset($this->settings['icl_additional_css']) && !empty($this->settings['icl_additional_css'])) { + echo "\r\n"; + } + } + + function wp_nav_menu_items_filter($items, $args){ + global $sitepress_settings, $sitepress; + + // menu can be passed as integger or object + if(isset($args->menu->term_id)) $args->menu = $args->menu->term_id; + + $abs_menu_id = icl_object_id($args->menu, 'nav_menu', false, $sitepress->get_default_language()); + + if($abs_menu_id == $sitepress_settings['menu_for_ls']){ + + $languages = $sitepress->get_ls_languages(); + + $items .= ''; + + } + + return $items; + } + +} // end class + + + + + +// language switcher functions + function language_selector_widget($args){ + global $sitepress, $sitepress_settings; + extract($args, EXTR_SKIP); + echo $before_widget; + if ($sitepress_settings['icl_widget_title_show']) { + echo $args['before_title']; + _e('Languages','sitepress'); + echo $args['after_title']; + } + $sitepress->language_selector(); + echo $after_widget; + } + + function icl_lang_sel_nav_ob_start(){ + if(is_feed()) return; + ob_start('icl_lang_sel_nav_prepend_css'); + } + + function icl_lang_sel_nav_ob_end(){ + $ob_handlers = ob_list_handlers(); + $active_handler = array_pop( $ob_handlers ); + if($active_handler == 'icl_lang_sel_nav_prepend_css'){ + ob_end_flush(); + } + } + + function icl_lang_sel_nav_prepend_css($buf){ + if(defined('ICL_DONT_LOAD_LANGUAGE_SELECTOR_CSS') && ICL_DONT_LOAD_LANGUAGE_SELECTOR_CSS){ + return $buf; + } + return preg_replace('##i','' . PHP_EOL . PHP_EOL . icl_lang_sel_nav_css(false), $buf); + } + + function icl_lang_sel_nav_css($show = true){ + if(defined('ICL_DONT_LOAD_LANGUAGE_SELECTOR_CSS') && ICL_DONT_LOAD_LANGUAGE_SELECTOR_CSS){ + return ''; + } + $link_tag = ''; + if(!$show && (!isset($_GET['page']) || $_GET['page'] != ICL_PLUGIN_FOLDER . '/menu/languages.php')){ + return $link_tag; + }else{ + echo $link_tag; + } + } + + + + +global $icl_language_switcher; +$icl_language_switcher = new SitePressLanguageSwitcher; \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/not-compatible-plugins.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/not-compatible-plugins.php new file mode 100644 index 0000000..791c7dc --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/not-compatible-plugins.php @@ -0,0 +1,75 @@ +
              • '; + echo __('WPML cannot be activated together with these older plugins:', 'sitepress'); + echo '
                  '; + foreach($icl_ncp_plugins as $incp){ + echo '
                • '.$incp.'
                • '; + } + echo '
                '; + echo __('WPML will be deactivated', 'sitepress'); + echo '
              '; + } +}else{ + $icl_sitepress_disabled = false; +} + + +if(isset($_GET['page']) && $_GET['page'] == ICL_PLUGIN_FOLDER . '/menu/troubleshooting.php' || isset($pagenow) && $pagenow=='index.php'){ + $icl_ncp_plugins2 = array( + 'wp-no-category-base/no-category-base.php' + ); + $active_plugins = get_option('active_plugins'); + $icl_ncp_plugins2 = array_intersect($icl_ncp_plugins2, $active_plugins); + if(!empty($icl_ncp_plugins2)){ + if(isset($_GET['page']) && $_GET['page'] == ICL_PLUGIN_FOLDER . '/menu/troubleshooting.php'){ + add_action('admin_notices', 'icl_incomp_plugins_warn2'); + function icl_incomp_plugins_warn2(){ + global $icl_ncp_plugins2; + echo '
              '; + echo __('These plugins are known to have compatibiliy issues with WPML:', 'sitepress'); + echo '
                '; + foreach($icl_ncp_plugins2 as $incp){ + echo '
              • '.$incp.'
              • '; + } + echo '
              '; + echo '
              '; + } + }else{ + add_action('icl_dashboard_widget_content_top', 'icl_incomp_plugins_warn_dashboard', 1, 0); + function icl_incomp_plugins_warn_dashboard(){ + echo '
              '; + printf (__('You are using plugins that are incompatible with WPML - see details.', 'sitepress'), admin_url('admin.php?page='.ICL_PLUGIN_FOLDER.'/menu/troubleshooting.php')); + echo '
              '; + + } + } + } +} + + diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/php-version-check.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/php-version-check.php new file mode 100644 index 0000000..3dcc207 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/php-version-check.php @@ -0,0 +1,58 @@ +
              • '; + echo __('WPML cannot be activated because your version of PHP is too old. To run correctly, you must have PHP5 installed.
                We recommend that you contact your hosting company and request them to switch you to PHP5.', 'sitepress'); + echo sprintf('
                PHP reports version %s - (show detailed phpinfo)',phpversion()); + echo '
              '; + echo '
              '; + echo '
              '; + } + + $active_plugins = get_option('active_plugins'); + $icl_sitepress_idx = array_search(ICL_PLUGIN_FOLDER . '/sitepress.php', $active_plugins); + if(false !== $icl_sitepress_idx){ + unset($active_plugins[$icl_sitepress_idx]); + update_option('active_plugins', $active_plugins); + unset($_GET['activate']); + $recently_activated = get_option('recently_activated'); + if(!isset($recently_activated[ICL_PLUGIN_FOLDER . '/sitepress.php'])){ + $recently_activated[ICL_PLUGIN_FOLDER . '/sitepress.php'] = time(); + update_option('recently_activated', $recently_activated); + } + } + define('PHP_VERSION_INCOMPATIBLE', true); + + function icl_php_version_warn_js(){ + ?> + + + \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/plugins-integration.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/plugins-integration.php new file mode 100644 index 0000000..3b8da04 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/plugins-integration.php @@ -0,0 +1,19 @@ +=')){ + if($sitepress_settings['language_negotiation_type'] == 2){ + require ICL_PLUGIN_PATH . '/inc/wpseo-sitemaps-filter.php'; + } + } + + +} + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/pointers.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/pointers.php new file mode 100644 index 0000000..02d9418 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/pointers.php @@ -0,0 +1,81 @@ + + + ' . __( 'New in WPML 2.6.0', 'sitepress') . ''; + $content .= '

              ' . __( 'WPML can automatically download translations for WordPress.', 'sitepress') . '

              '; + + ICL_WP_Pointers::print_js( __FUNCTION__, '#icl_adm_options', array( + 'content' => $content, + 'position' => array( 'edge' => 'left', 'align' => 'right' ), + ) ); + } + + +} + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/potx.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/potx.php new file mode 100644 index 0000000..f7aa664 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/potx.php @@ -0,0 +1,1580 @@ + 0 ? substr($file_path, $strip_prefix) : $file_path; + _potx_find_version_number($code, $file_name, $version_callback); + + // Extract raw PHP language tokens. + $raw_tokens = token_get_all($code); + unset($code); + + // Remove whitespace and possible HTML (the later in templates for example), + // count line numbers so we can include them in the output. + $_potx_tokens = array(); + $_potx_lookup = array(); + $token_number = 0; + $line_number = 1; + foreach ($raw_tokens as $token) { + if ((!is_array($token)) || (($token[0] != T_WHITESPACE) && ($token[0] != T_INLINE_HTML))) { + if (is_array($token)) { + $token[] = $line_number; + // Fill array for finding token offsets quickly. + $src_tokens = array( + '__', 'esc_attr__', 'esc_html__', '_e', 'esc_attr_e', 'esc_html_e', + '_x', 'esc_attr_x', 'esc_html_x', '_ex', + '_n', '_nx' + ); + if ($token[0] == T_STRING || ($token[0] == T_VARIABLE && in_array($token[1], $src_tokens))) { + if (!isset($_potx_lookup[$token[1]])) { + $_potx_lookup[$token[1]] = array(); + } + $_potx_lookup[$token[1]][] = $token_number; + } + } + $_potx_tokens[] = $token; + $token_number++; + } + // Collect line numbers. + if (is_array($token)) { + $line_number += count(explode("\n", $token[1])) - 1; + } + else { + $line_number += count(explode("\n", $token)) - 1; + } + } + unset($raw_tokens); + + // Drupal 7 onwards supports context on t(). + if(!empty($src_tokens)) + foreach($src_tokens as $tk){ + _potx_find_t_calls_with_context($file_name, $save_callback, $tk); + } + +} + +/** + * Creates complete file strings with _potx_store() + * + * @param $string_mode + * Strings to generate files for: POTX_STRING_RUNTIME or POTX_STRING_INSTALLER. + * @param $build_mode + * Storage mode used: single, multiple or core + * @param $force_name + * Forces a given file name to get used, if single mode is on, without extension + * @param $save_callback + * Callback used to save strings previously. + * @param $version_callback + * Callback used to save versions previously. + * @param $header_callback + * Callback to invoke to get the POT header. + * @param $template_export_langcode + * Language code if the template should have language dependent content + * (like plural formulas and language name) included. + * @param $translation_export_langcode + * Language code if translations should also be exported. + * @param $api_version + * Drupal API version to work with. + */ +function _potx_build_files($string_mode = POTX_STRING_RUNTIME, $build_mode = POTX_BUILD_SINGLE, $force_name = 'general', $save_callback = '_potx_save_string', $version_callback = '_potx_save_version', $header_callback = '_potx_get_header', $template_export_langcode = NULL, $translation_export_langcode = NULL, $api_version = POTX_API_6) { + global $_potx_store; + + // Get strings and versions by reference. + $strings = $save_callback(NULL, NULL, NULL, 0, $string_mode); + $versions = $version_callback(); + + // We might not have any string recorded in this string mode. + if (!is_array($strings)) { + return; + } + + foreach ($strings as $string => $string_info) { + foreach ($string_info as $context => $file_info) { + // Build a compact list of files this string occured in. + $occured = $file_list = array(); + // Look for strings appearing in multiple directories (ie. + // different subprojects). So we can include them in general.pot. + $last_location = dirname(array_shift(array_keys($file_info))); + $multiple_locations = FALSE; + foreach ($file_info as $file => $lines) { + $occured[] = "$file:". join(';', $lines); + if (isset($versions[$file])) { + $file_list[] = $versions[$file]; + } + if (dirname($file) != $last_location) { + $multiple_locations = TRUE; + } + $last_location = dirname($file); + } + + // Mark duplicate strings (both translated in the app and in the installer). + $comment = join(" ", $occured); + if (strpos($comment, '(dup)') !== FALSE) { + $comment = '(duplicate) '. str_replace('(dup)', '', $comment); + } + $output = "#: $comment\n"; + + if ($build_mode == POTX_BUILD_SINGLE) { + // File name forcing in single mode. + $file_name = $force_name; + } + elseif (strpos($comment, '.info')) { + // Store .info file strings either in general.pot or the module pot file, + // depending on the mode used. + $file_name = ($build_mode == POTX_BUILD_CORE ? 'general' : str_replace('.info', '.module', $file_name)); + } + elseif ($multiple_locations) { + // Else if occured more than once, store in general.pot. + $file_name = 'general'; + } + else { + // Fold multiple files in the same folder into one. + if (empty($last_location) || $last_location == '.') { + $file_name = 'root'; + } + else { + $file_name = str_replace('/', '-', $last_location); + } + } + + + if (strpos($string, "\0") !== FALSE) { + // Plural strings have a null byte delimited format. + list($singular, $plural) = explode("\0", $string); + $output .= "msgid \"$singular\"\n"; + $output .= "msgid_plural \"$plural\"\n"; + if (!empty($context)) { + $output .= "msgctxt \"$context\"\n"; + } + if (isset($translation_export_langcode)) { + $output .= _potx_translation_export($translation_export_langcode, $singular, $plural, $api_version); + } + else { + $output .= "msgstr[0] \"\"\n"; + $output .= "msgstr[1] \"\"\n"; + } + } + else { + // Simple strings. + $output .= "msgid \"$string\"\n"; + if (!empty($context)) { + $output .= "msgctxt \"$context\"\n"; + } + if (isset($translation_export_langcode)) { + $output .= _potx_translation_export($translation_export_langcode, $string, NULL, $api_version); + } + else { + $output .= "msgstr \"\"\n"; + } + } + $output .= "\n"; + + // Store the generated output in the given file storage. + if (!isset($_potx_store[$file_name])) { + $_potx_store[$file_name] = array( + 'header' => $header_callback($file_name, $template_export_langcode, $api_version), + 'sources' => $file_list, + 'strings' => $output, + 'count' => 1, + ); + } + else { + // Maintain a list of unique file names. + $_potx_store[$file_name]['sources'] = array_unique(array_merge($_potx_store[$file_name]['sources'], $file_list)); + $_potx_store[$file_name]['strings'] .= $output; + $_potx_store[$file_name]['count'] += 1; + } + } + } +} + +/** + * Export translations with a specific language. + * + * @param $translation_export_langcode + * Language code if translations should also be exported. + * @param $string + * String or singular version if $plural was provided. + * @param $plural + * Plural version of singular string. + * @param $api_version + * Drupal API version to work with. + */ +function _potx_translation_export($translation_export_langcode, $string, $plural = NULL, $api_version = POTX_API_6) { + include_once 'includes/locale.inc'; + + // Stip out slash escapes. + $string = stripcslashes($string); + + // Column and table name changed between versions. + $language_column = $api_version > POTX_API_5 ? 'language' : 'locale'; + $language_table = $api_version > POTX_API_5 ? 'languages' : 'locales_meta'; + + if (!isset($plural)) { + // Single string to look translation up for. + if ($translation = db_result(db_query("SELECT t.translation FROM {locales_source} s LEFT JOIN {locales_target} t ON t.lid = s.lid WHERE s.source = '%s' AND t.{$language_column} = '%s'", $string, $translation_export_langcode))) { + return 'msgstr '. _locale_export_string($translation); + } + return "msgstr \"\"\n"; + } + + else { + // String with plural variants. Fill up source string array first. + $plural = stripcslashes($plural); + $strings = array(); + $number_of_plurals = db_result(db_query('SELECT plurals FROM {'. $language_table ."} WHERE {$language_column} = '%s'", $translation_export_langcode)); + $plural_index = 0; + while ($plural_index < $number_of_plurals) { + if ($plural_index == 0) { + // Add the singular version. + $strings[] = $string; + } + elseif ($plural_index == 1) { + // Only add plural version if required. + $strings[] = $plural; + } + else { + // More plural versions only if required, with the lookup source + // string modified as imported into the database. + $strings[] = str_replace('@count', '@count['. $plural_index .']', $plural); + } + $plural_index++; + } + + $output = ''; + if (count($strings)) { + // Source string array was done, so export translations. + foreach ($strings as $index => $string) { + if ($translation = db_result(db_query("SELECT t.translation FROM {locales_source} s LEFT JOIN {locales_target} t ON t.lid = s.lid WHERE s.source = '%s' AND t.{$language_column} = '%s'", $string, $translation_export_langcode))) { + $output .= 'msgstr['. $index .'] '. _locale_export_string(_locale_export_remove_plural($translation)); + } + else { + $output .= "msgstr[". $index ."] \"\"\n"; + } + } + } + else { + // No plural information was recorded, so export empty placeholders. + $output .= "msgstr[0] \"\"\n"; + $output .= "msgstr[1] \"\"\n"; + } + return $output; + } +} + +/** + * Returns a header generated for a given file + * + * @param $file + * Name of POT file to generate header for + * @param $template_export_langcode + * Language code if the template should have language dependent content + * (like plural formulas and language name) included. + * @param $api_version + * Drupal API version to work with. + */ +function _potx_get_header($file, $template_export_langcode = NULL, $api_version = POTX_API_6) { + // We only have language to use if we should export with that langcode. + $language = NULL; + if (isset($template_export_langcode)) { + $language = db_fetch_object(db_query($api_version > POTX_API_5 ? "SELECT language, name, plurals, formula FROM {languages} WHERE language = '%s'" : "SELECT locale, name, plurals, formula FROM {locales_meta} WHERE locale = '%s'", $template_export_langcode)); + } + + $output = '# $'.'Id'.'$'."\n"; + $output .= "#\n"; + $output .= '# '. (isset($language) ? $language->name : 'LANGUAGE') .' translation of Drupal ('. $file .")\n"; + $output .= "# Copyright YEAR NAME \n"; + $output .= "# --VERSIONS--\n"; + $output .= "#\n"; + $output .= "#, fuzzy\n"; + $output .= "msgid \"\"\n"; + $output .= "msgstr \"\"\n"; + $output .= "\"Project-Id-Version: PROJECT VERSION\\n\"\n"; + $output .= '"POT-Creation-Date: '. date("Y-m-d H:iO") ."\\n\"\n"; + $output .= '"PO-Revision-Date: '. (isset($language) ? date("Y-m-d H:iO") : 'YYYY-mm-DD HH:MM+ZZZZ') ."\\n\"\n"; + $output .= "\"Last-Translator: NAME \\n\"\n"; + $output .= "\"Language-Team: ". (isset($language) ? $language->name : 'LANGUAGE') ." \\n\"\n"; + $output .= "\"MIME-Version: 1.0\\n\"\n"; + $output .= "\"Content-Type: text/plain; charset=utf-8\\n\"\n"; + $output .= "\"Content-Transfer-Encoding: 8bit\\n\"\n"; + if (isset($language->formula) && isset($language->plurals)) { + $output .= "\"Plural-Forms: nplurals=". $language->plurals ."; plural=". strtr($language->formula, array('$' => '')) .";\\n\"\n\n"; + } + else { + $output .= "\"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\\n\"\n\n"; + } + return $output; +} + +/** + * Write out generated files to the current folder. + * + * @param $http_filename + * File name for content-disposition header in case of usage + * over HTTP. If not given, files are written to the local filesystem. + * @param $content_disposition + * See RFC2183. 'inline' or 'attachment', with a default of + * 'inline'. Only used if $http_filename is set. + * @todo + * Look into whether multiple files can be output via HTTP. + */ +function _potx_write_files($http_filename = NULL, $content_disposition = 'inline') { + global $_potx_store; + + // Generate file lists and output files. + if (is_array($_potx_store)) { + foreach ($_potx_store as $file => $contents) { + // Build replacement for file listing. + if (count($contents['sources']) > 1) { + $filelist = "Generated from files:\n# " . join("\n# ", $contents['sources']); + } + elseif (count($contents['sources']) == 1) { + $filelist = "Generated from file: " . join('', $contents['sources']); + } + else { + $filelist = 'No version information was available in the source files.'; + } + $output = str_replace('--VERSIONS--', $filelist, $contents['header'] . $contents['strings']); + + if ($http_filename) { + // HTTP output. + header('Content-Type: text/plain; charset=utf-8'); + header('Content-Transfer-Encoding: 8bit'); + header("Content-Disposition: $content_disposition; filename=$http_filename"); + print $output; + return; + } + else { + // Local file output, flatten directory structure. + $file = str_replace('.', '-', preg_replace('![/]?([a-zA-Z_0-9]*/)*!', '', $file)) .'.pot'; + $fp = fopen($file, 'w'); + fwrite($fp, $output); + fclose($fp); + } + } + } +} + +/** + * Escape quotes in a strings depending on the surrounding + * quote type used. + * + * @param $str + * The strings to escape + */ +function _potx_format_quoted_string($str) { + $quo = substr($str, 0, 1); + $str = substr($str, 1, -1); + if ($quo == '"') { + $str = stripcslashes($str); + } + else { + $str = strtr($str, array("\\'" => "'", "\\\\" => "\\")); + } + return addcslashes($str, "\0..\37\\\""); +} + +/** + * Output a marker error with an extract of where the error was found. + * + * @param $file + * Name of file + * @param $line + * Line number of error + * @param $marker + * Function name with which the error was identified + * @param $ti + * Index on the token array + * @param $error + * Helpful error message for users. + * @param $docs_url + * Documentation reference. + */ +function _potx_marker_error($file, $line, $marker, $ti, $error, $docs_url = NULL) { + global $_potx_tokens; + + $tokens = ''; + $ti += 2; + $tc = count($_potx_tokens); + $par = 1; + while ((($tc - $ti) > 0) && $par) { + if (is_array($_potx_tokens[$ti])) { + $tokens .= $_potx_tokens[$ti][1]; + } + else { + $tokens .= $_potx_tokens[$ti]; + if ($_potx_tokens[$ti] == "(") { + $par++; + } + else if ($_potx_tokens[$ti] == ")") { + $par--; + } + } + $ti++; + } + potx_status('error', $error, $file, $line, $marker .'('. $tokens, $docs_url); +} + +/** + * Status notification function. + * + * @param $op + * Operation to perform or type of message text. + * - set: sets the reporting mode to $value + * use one of the POTX_STATUS_* constants as $value + * - get: returns the list of error messages recorded + * if $value is true, it also clears the internal message cache + * - error: sends an error message in $value with optional $file and $line + * - status: sends a status message in $value + * @param $value + * Value depending on $op. + * @param $file + * Name of file the error message is related to. + * @param $line + * Number of line the error message is related to. + * @param $excerpt + * Excerpt of the code in question, if available. + * @param $docs_url + * URL to the guidelines to follow to fix the problem. + */ +function potx_status($op, $value = NULL, $file = NULL, $line = NULL, $excerpt = NULL, $docs_url = NULL) { + static $mode = POTX_STATUS_CLI; + static $messages = array(); + + switch ($op) { + case 'set': + // Setting the reporting mode. + $mode = $value; + return; + + case 'get': + // Getting the errors. Optionally deleting the messages. + $errors = $messages; + if (!empty($value)) { + $messages = array(); + } + return $errors; + + case 'error': + case 'status': + + // Location information is required in 3 of the four possible reporting + // modes as part of the error message. The structured mode needs the + // file, line and excerpt info separately, not in the text. + $location_info = ''; + if (($mode != POTX_STATUS_STRUCTURED) && isset($file)) { + if (isset($line)) { + if (isset($excerpt)) { + $location_info = t('At %excerpt in %file on line %line.', array('%excerpt' => $excerpt, '%file' => $file, '%line' => $line)); + } + else { + $location_info = t('In %file on line %line.', array('%file' => $file, '%line' => $line)); + } + } + else { + if (isset($excerpt)) { + $location_info = t('At %excerpt in %file.', array('%excerpt' => $excerpt, '%file' => $file)); + } + else { + $location_info = t('In %file.', array('%file' => $file)); + } + } + } + + // Documentation helpers are provided as readable text in most modes. + $read_more = ''; + if (($mode != POTX_STATUS_STRUCTURED) && isset($docs_url)) { + $read_more = ($mode == POTX_STATUS_CLI) ? t('Read more at @url', array('@url' => $docs_url)) : t('Read more at @url', array('@url' => $docs_url)); + } + + // Error message or progress text to display. + switch ($mode) { + case POTX_STATUS_MESSAGE: + drupal_set_message(join(' ', array($value, $location_info, $read_more)), $op); + break; + case POTX_STATUS_CLI: + if(defined('STDERR') && defined('STDOUT')){ + fwrite($op == 'error' ? STDERR : STDOUT, join("\n", array($value, $location_info, $read_more)) ."\n\n"); + } + break; + case POTX_STATUS_SILENT: + if ($op == 'error') { + $messages[] = join(' ', array($value, $location_info, $read_more)); + } + break; + case POTX_STATUS_STRUCTURED: + if ($op == 'error') { + $messages[] = array($value, $file, $line, $excerpt, $docs_url); + } + break; + } + return; + } +} + +/** + * Detect all occurances of t()-like calls. + * + * These sequences are searched for: + * T_STRING("$function_name") + "(" + T_CONSTANT_ENCAPSED_STRING + ")" + * T_STRING("$function_name") + "(" + T_CONSTANT_ENCAPSED_STRING + "," + * + * @param $file + * Name of file parsed. + * @param $save_callback + * Callback function used to save strings. + * @param function_name + * The name of the function to look for (could be 't', '$t', 'st' + * or any other t-like function). + * @param $string_mode + * String mode to use: POTX_STRING_INSTALLER, POTX_STRING_RUNTIME or + * POTX_STRING_BOTH. + */ +function _potx_find_t_calls($file, $save_callback, $function_name = 't', $string_mode = POTX_STRING_RUNTIME) { + global $_potx_tokens, $_potx_lookup; + + // Lookup tokens by function name. + if (isset($_potx_lookup[$function_name])) { + foreach ($_potx_lookup[$function_name] as $ti) { + list($ctok, $par, $mid, $rig) = array($_potx_tokens[$ti], $_potx_tokens[$ti+1], $_potx_tokens[$ti+2], $_potx_tokens[$ti+3]); + list($type, $string, $line) = $ctok; + if ($par == "(") { + if (in_array($rig, array(")", ",")) + && (is_array($mid) && ($mid[0] == T_CONSTANT_ENCAPSED_STRING))) { + // This function is only used for context-less call types. + $save_callback(_potx_format_quoted_string($mid[1]), POTX_CONTEXT_NONE, $file, $line, $string_mode); + } + else { + // $function_name() found, but inside is something which is not a string literal. + _potx_marker_error($file, $line, $function_name, $ti, t('The first parameter to @function() should be a literal string. There should be no variables, concatenation, constants or other non-literal strings there.', array('@function' => $function_name)), 'http://drupal.org/node/322732'); + } + } + } + } +} + +/** + * Detect all occurances of t()-like calls from Drupal 7 (with context). + * + * These sequences are searched for: + * T_STRING("$function_name") + "(" + T_CONSTANT_ENCAPSED_STRING + ")" + * T_STRING("$function_name") + "(" + T_CONSTANT_ENCAPSED_STRING + "," + * and then an optional value for the replacements and an optional array + * for the options with an optional context key. + * + * @param $file + * Name of file parsed. + * @param $save_callback + * Callback function used to save strings. + * @param function_name + * The name of the function to look for (could be 't', '$t', 'st' + * or any other t-like function). Drupal 7 only supports context on t(). + * @param $string_mode + * String mode to use: POTX_STRING_INSTALLER, POTX_STRING_RUNTIME or + * POTX_STRING_BOTH. + */ +function _potx_find_t_calls_with_context($file, $save_callback, $function_name = '_e', $string_mode = POTX_STRING_RUNTIME) { + global $_potx_tokens, $_potx_lookup; + + // Lookup tokens by function name. + if (isset($_potx_lookup[$function_name])) { + foreach ($_potx_lookup[$function_name] as $ti) { + list($ctok, $par, $mid, $rig) = array($_potx_tokens[$ti], $_potx_tokens[$ti+1], $_potx_tokens[$ti+2], $_potx_tokens[$ti+3]); + list($type, $string, $line) = $ctok; + if ($par == "(") { + if (in_array($rig, array(")", ",")) + && (is_array($mid) && ($mid[0] == T_CONSTANT_ENCAPSED_STRING))) { + // By default, there is no context. + $domain = POTX_CONTEXT_NONE; + if ($rig == ',') { + // If there was a comma after the string, we need to look forward + // to try and find the context. + /*$context = _potx_find_context($ti, $ti + 4, $file, $function_name);*/ + + if($function_name == '_x' || $function_name == '_ex'){ + $domain_offset = 6; + $context_offset = 4; + $text = $mid[1]; + }elseif($function_name == '_n'){ + $domain_offset = 10; + $context_offset = false; + $text_plural = $_potx_tokens[$ti+4][1]; + }elseif($function_name == '_nx'){ + $domain_offset = 10; + $context_offset = 8; + $text_plural = $_potx_tokens[$ti+4][1]; + }else{ + $domain_offset = 4; + $context_offset = false; + $text = $mid[1]; + } + + if(!isset($_potx_tokens[$ti+$domain_offset][1])) return false; + + if(!preg_match('#^(\'|")(.+)#', $_potx_tokens[$ti+$domain_offset][1])){ + $constant_val = @constant($_potx_tokens[$ti+$domain_offset][1]); + if(!is_null($constant_val)){ + $domain = $constant_val; + }else{ + if(function_exists($_potx_tokens[$ti+$domain_offset][1])){ + $domain = @$_potx_tokens[$ti+$domain_offset][1](); + if(empty($domain)){ + return false; + } + }else{ + return false; + } + + } + }else{ + $domain = trim($_potx_tokens[$ti+$domain_offset][1],"\"' "); + } + + // exception for gettext calls with contexts + if(false !== $context_offset && isset($_potx_tokens[$ti+$context_offset])){ + if(!preg_match('#^(\'|")(.+)#', @$_potx_tokens[$ti+$context_offset][1])){ + $constant_val = @constant($_potx_tokens[$ti+$context_offset][1]); + if(!is_null($constant_val)){ + $context = $constant_val; + }else{ + if(function_exists(@$_potx_tokens[$ti+$context_offset][1])){ + $context = @$_potx_tokens[$ti+$context_offset][1](); + if(empty($context)){ + return false; + } + }else{ + return false; + } + } + }else{ + $context = trim($_potx_tokens[$ti+$context_offset][1],"\"' "); + } + + }else{ + $context = false; + } + + + + } + if ($domain !== POTX_CONTEXT_ERROR) { + // Only save if there was no error in context parsing. + $save_callback(_potx_format_quoted_string($mid[1]), $domain, @strval($context), $file, $line, $string_mode); + if(isset($text_plural)){ + $save_callback(_potx_format_quoted_string($text_plural), $domain, $context, $file, $line, $string_mode); + } + } + } + else { + // $function_name() found, but inside is something which is not a string literal. + _potx_marker_error($file, $line, $function_name, $ti, t('The first parameter to @function() should be a literal string. There should be no variables, concatenation, constants or other non-literal strings there.', array('@function' => $function_name)), 'http://drupal.org/node/322732'); + } + } + } + } +} + +/** + * Detect all occurances of watchdog() calls. Only from Drupal 6. + * + * These sequences are searched for: + * watchdog + "(" + T_CONSTANT_ENCAPSED_STRING + "," + + * T_CONSTANT_ENCAPSED_STRING + something + * + * @param $file + * Name of file parsed. + * @param $save_callback + * Callback function used to save strings. + */ +function _potx_find_watchdog_calls($file, $save_callback) { + global $_potx_tokens, $_potx_lookup; + + // Lookup tokens by function name. + if (isset($_potx_lookup['watchdog'])) { + foreach ($_potx_lookup['watchdog'] as $ti) { + list($ctok, $par, $mtype, $comma, $message, $rig) = array($_potx_tokens[$ti], $_potx_tokens[$ti+1], $_potx_tokens[$ti+2], $_potx_tokens[$ti+3], $_potx_tokens[$ti+4], $_potx_tokens[$ti+5]); + list($type, $string, $line) = $ctok; + if ($par == '(') { + // Both type and message should be a string literal. + if (in_array($rig, array(')', ',')) && $comma == ',' + && (is_array($mtype) && ($mtype[0] == T_CONSTANT_ENCAPSED_STRING)) + && (is_array($message) && ($message[0] == T_CONSTANT_ENCAPSED_STRING))) { + // Context is not supported on watchdog(). + $save_callback(_potx_format_quoted_string($mtype[1]), POTX_CONTEXT_NONE, $file, $line); + $save_callback(_potx_format_quoted_string($message[1]), POTX_CONTEXT_NONE, $file, $line); + } + else { + // watchdog() found, but inside is something which is not a string literal. + _potx_marker_error($file, $line, 'watchdog', $ti, t('The first two watchdog() parameters should be literal strings. There should be no variables, concatenation, constants or even a t() call there.'), 'http://drupal.org/node/323101'); + } + } + } + } +} + +/** + * Detect all occurances of format_plural calls. + * + * These sequences are searched for: + * T_STRING("format_plural") + "(" + ..anything (might be more tokens).. + + * "," + T_CONSTANT_ENCAPSED_STRING + + * "," + T_CONSTANT_ENCAPSED_STRING + parenthesis (or comma allowed from + * Drupal 6) + * + * @param $file + * Name of file parsed. + * @param $save_callback + * Callback function used to save strings. + * @param $api_version + * Drupal API version to work with. + */ +function _potx_find_format_plural_calls($file, $save_callback, $api_version = POTX_API_6) { + global $_potx_tokens, $_potx_lookup; + + if (isset($_potx_lookup['format_plural'])) { + foreach ($_potx_lookup['format_plural'] as $ti) { + list($ctok, $par1) = array($_potx_tokens[$ti], $_potx_tokens[$ti+1]); + list($type, $string, $line) = $ctok; + if ($par1 == "(") { + // Eat up everything that is used as the first parameter + $tn = $ti + 2; + $depth = 0; + while (!($_potx_tokens[$tn] == "," && $depth == 0)) { + if ($_potx_tokens[$tn] == "(") { + $depth++; + } + elseif ($_potx_tokens[$tn] == ")") { + $depth--; + } + $tn++; + } + // Get further parameters + list($comma1, $singular, $comma2, $plural, $par2) = array($_potx_tokens[$tn], $_potx_tokens[$tn+1], $_potx_tokens[$tn+2], $_potx_tokens[$tn+3], $_potx_tokens[$tn+4]); + if (($comma2 == ',') && ($par2 == ')' || ($par2 == ',' && $api_version > POTX_API_5)) && + (is_array($singular) && ($singular[0] == T_CONSTANT_ENCAPSED_STRING)) && + (is_array($plural) && ($plural[0] == T_CONSTANT_ENCAPSED_STRING))) { + // By default, there is no context. + $context = POTX_CONTEXT_NONE; + if ($par2 == ',' && $api_version > POTX_API_6) { + // If there was a comma after the plural, we need to look forward + // to try and find the context. + $context = _potx_find_context($ti, $tn + 5, $file, 'format_plural'); + } + if ($context !== POTX_CONTEXT_ERROR) { + // Only save if there was no error in context parsing. + $save_callback( + _potx_format_quoted_string($singular[1]) ."\0". _potx_format_quoted_string($plural[1]), + $context, + $file, + $line + ); + } + } + else { + // format_plural() found, but the parameters are not correct. + _potx_marker_error($file, $line, "format_plural", $ti, t('In format_plural(), the singular and plural strings should be literal strings. There should be no variables, concatenation, constants or even a t() call there.'), 'http://drupal.org/node/323072'); + } + } + } + } +} + +/** + * Detect permission names from the hook_perm() implementations. + * Note that this will get confused with a similar pattern in a comment, + * and with dynamic permissions, which need to be accounted for. + * + * @param $file + * Full path name of file parsed. + * @param $filebase + * Filenaname of file parsed. + * @param $save_callback + * Callback function used to save strings. + */ +function _potx_find_perm_hook($file, $filebase, $save_callback) { + global $_potx_tokens, $_potx_lookup; + + if (isset($_potx_lookup[$filebase .'_perm'])) { + // Special case for node module, because it uses dynamic permissions. + // Include the static permissions by hand. That's about all we can do here. + if ($filebase == 'node') { + $line = $_potx_tokens[$_potx_lookup['node_perm'][0]][2]; + // List from node.module 1.763 (checked in on 2006/12/29 at 21:25:36 by drumm) + $nodeperms = array('administer content types', 'administer nodes', 'access content', 'view revisions', 'revert revisions'); + foreach ($nodeperms as $item) { + // hook_perm() is only ever found on a Drupal system which does not + // support context. + $save_callback($item, POTX_CONTEXT_NONE, $file, $line); + } + } + else { + $count = 0; + foreach ($_potx_lookup[$filebase .'_perm'] as $ti) { + $tn = $ti; + while (is_array($_potx_tokens[$tn]) || $_potx_tokens[$tn] != '}') { + if (is_array($_potx_tokens[$tn]) && $_potx_tokens[$tn][0] == T_CONSTANT_ENCAPSED_STRING) { + // hook_perm() is only ever found on a Drupal system which does not + // support context. + $save_callback(_potx_format_quoted_string($_potx_tokens[$tn][1]), POTX_CONTEXT_NONE, $file, $_potx_tokens[$tn][2]); + $count++; + } + $tn++; + } + } + if (!$count) { + potx_status('error', t('%hook should have an array of literal string permission names.', array('%hook' => $filebase .'_perm()')), $file, NULL, NULL, 'http://drupal.org/node/323101'); + } + } + } +} + +/** + * Helper function to look up the token closing the current function. + * + * @param $here + * The token at the function name + */ +function _potx_find_end_of_function($here) { + global $_potx_tokens; + + // Seek to open brace. + while (is_array($_potx_tokens[$here]) || $_potx_tokens[$here] != '{') { + $here++; + } + $nesting = 1; + while ($nesting > 0) { + $here++; + if (!is_array($_potx_tokens[$here])) { + if ($_potx_tokens[$here] == '}') { + $nesting--; + } + if ($_potx_tokens[$here] == '{') { + $nesting++; + } + } + } + return $here; +} + +/** + * Helper to move past t() and format_plural() arguments in search of context. + * + * @param $here + * The token before the start of the arguments + */ +function _potx_skip_args($here) { + global $_potx_tokens; + + $nesting = 0; + // Go through to either the end of the function call or to a comma + // after the current position on the same nesting level. + while (!(($_potx_tokens[$here] == ',' && $nesting == 0) || + ($_potx_tokens[$here] == ')' && $nesting == -1))) { + $here++; + if (!is_array($_potx_tokens[$here])) { + if ($_potx_tokens[$here] == ')') { + $nesting--; + } + if ($_potx_tokens[$here] == '(') { + $nesting++; + } + } + } + // If we run out of nesting, it means we reached the end of the function call, + // so we skipped the arguments but did not find meat for looking at the + // specified context. + return ($nesting == 0 ? $here : FALSE); +} + +/** + * Helper to find the value for 'context' on t() and format_plural(). + * + * @param $tf + * Start position of the original function. + * @param $ti + * Start position where we should search from. + * @param $file + * Full path name of file parsed. + * @param function_name + * The name of the function to look for. Either 'format_plural' or 't' + * given that Drupal 7 only supports context on these. + */ +function _potx_find_context($tf, $ti, $file, $function_name) { + global $_potx_tokens; + + // Start from after the comma and skip the possible arguments for the function + // so we can look for the context. + if (($ti = _potx_skip_args($ti)) && ($_potx_tokens[$ti] == ',')) { + // Now we actually might have some definition for a context. The $options + // argument is coming up, which might have a key for context. + echo "TI:" . $ti."\n"; + list($com, $arr, $par) = array($_potx_tokens[$ti], $_potx_tokens[$ti+1], $_potx_tokens[$ti+2]); + if ($com == ',' && $arr[1] == 'array' && $par == '(') { + $nesting = 0; + $ti += 3; + // Go through to either the end of the array or to the key definition of + // context on the same nesting level. + while (!((is_array($_potx_tokens[$ti]) && (in_array($_potx_tokens[$ti][1], array('"context"', "'context'"))) && ($_potx_tokens[$ti][0] == T_CONSTANT_ENCAPSED_STRING) && ($nesting == 0)) || + ($_potx_tokens[$ti] == ')' && $nesting == -1))) { + $ti++; + if (!is_array($_potx_tokens[$ti])) { + if ($_potx_tokens[$ti] == ')') { + $nesting--; + } + if ($_potx_tokens[$ti] == '(') { + $nesting++; + } + } + } + if ($nesting == 0) { + // Found the 'context' key on the top level of the $options array. + list($arw, $str) = array($_potx_tokens[$ti+1], $_potx_tokens[$ti+2]); + if (is_array($arw) && $arw[1] == '=>' && is_array($str) && $str[0] == T_CONSTANT_ENCAPSED_STRING) { + return _potx_format_quoted_string($str[1]); + } + else { + list($type, $string, $line) = $_potx_tokens[$ti]; + // @todo: fix error reference. + _potx_marker_error($file, $line, $function_name, $tf, t('The context element in the options array argument to @function() should be a literal string. There should be no variables, concatenation, constants or other non-literal strings there.', array('@function' => $function_name)), 'http://drupal.org/node/322732'); + // Return with error. + return POTX_CONTEXT_ERROR; + } + } + else { + // Did not found 'context' key in $options array. + return POTX_CONTEXT_NONE; + } + } + } + + // After skipping args, we did not find a comma to look for $options. + return POTX_CONTEXT_NONE; +} + +/** + * List of menu item titles. Only from Drupal 6. + * + * @param $file + * Full path name of file parsed. + * @param $filebase + * Filenaname of file parsed. + * @param $save_callback + * Callback function used to save strings. + */ +function _potx_find_menu_hook($file, $filebase, $save_callback) { + global $_potx_tokens, $_potx_lookup; + + if (isset($_potx_lookup[$filebase .'_menu']) && is_array($_potx_lookup[$filebase .'_menu'])) { + // We have a menu hook in this file. + foreach ($_potx_lookup[$filebase .'_menu'] as $ti) { + $end = _potx_find_end_of_function($ti); + $tn = $ti; + while ($tn < $end) { + // Look through the code until the end of the function. + if ($_potx_tokens[$tn][0] == T_CONSTANT_ENCAPSED_STRING && in_array($_potx_tokens[$tn][1], array("'title'", '"title"', "'description'", '"description"')) && $_potx_tokens[$tn+1][0] == T_DOUBLE_ARROW) { + if ($_potx_tokens[$tn+2][0] == T_CONSTANT_ENCAPSED_STRING) { + // Menu items support no context. + $save_callback( + _potx_format_quoted_string($_potx_tokens[$tn+2][1]), + POTX_CONTEXT_NONE, + $file, + $_potx_tokens[$tn+2][2] + ); + $tn+=2; // Jump forward by 2. + } + else { + potx_status('error', t('Invalid menu %element definition found in %hook. Title and description keys of the menu array should be literal strings.', array('%element' => $_potx_tokens[$tn][1], '%hook' => $filebase .'_menu()')), $file, $_potx_tokens[$tn][2], NULL, 'http://drupal.org/node/323101'); + } + } + $tn++; + } + } + } +} + +/** + * Get languages names from Drupal's locale.inc. + * + * @param $file + * Full path name of file parsed + * @param $save_callback + * Callback function used to save strings. + * @param $api_version + * Drupal API version to work with. + */ +function _potx_find_language_names($file, $save_callback, $api_version = POTX_API_6) { + global $_potx_tokens, $_potx_lookup; + + foreach ($_potx_lookup[$api_version > POTX_API_5 ? '_locale_get_predefined_list' : '_locale_get_iso639_list'] as $ti) { + // Search for the definition of _locale_get_predefined_list(), not where it is called. + if ($_potx_tokens[$ti-1][0] == T_FUNCTION) { + break; + } + } + + $end = _potx_find_end_of_function($ti); + $ti += 7; // function name, (, ), {, return, array, ( + while ($ti < $end) { + while ($_potx_tokens[$ti][0] != T_ARRAY) { + if (!is_array($_potx_tokens[$ti]) && $_potx_tokens[$ti] == ';') { + // We passed the end of the list, break out to function level + // to prevent an infinite loop. + break 2; + } + $ti++; + } + $ti += 2; // array, ( + // Language names are context-less. + $save_callback(_potx_format_quoted_string($_potx_tokens[$ti][1]), POTX_CONTEXT_NONE, $file, $_potx_tokens[$ti][2]); + } +} + +/** + * Get the exact CVS version number from the file, so we can + * push that into the generated output. + * + * @param $code + * Complete source code of the file parsed. + * @param $file + * Name of the file parsed. + * @param $version_callback + * Callback used to save the version information. + */ +function _potx_find_version_number($code, $file, $version_callback) { + // Prevent CVS from replacing this pattern with actual info. + if (preg_match('!\\$I'.'d: ([^\\$]+) Exp \\$!', $code, $version_info)) { + $version_callback($version_info[1], $file); + } + else { + // Unknown version information. + $version_callback($file .': n/a', $file); + } +} + +/** + * Add date strings, which cannot be extracted otherwise. + * This is called for locale.module. + * + * @param $file + * Name of the file parsed. + * @param $save_callback + * Callback function used to save strings. + * @param $api_version + * Drupal API version to work with. + */ +function _potx_add_date_strings($file, $save_callback, $api_version = POTX_API_6) { + for ($i = 1; $i <= 12; $i++) { + $stamp = mktime(0, 0, 0, $i, 1, 1971); + if ($api_version > POTX_API_6) { + // From Drupal 7, long month names are saved with this context. + $save_callback(date("F", $stamp), 'Long month name', $file); + } + elseif ($api_version > POTX_API_5) { + // Drupal 6 uses a little hack. No context. + $save_callback('!long-month-name '. date("F", $stamp), POTX_CONTEXT_NONE, $file); + } + else { + // Older versions just accept the confusion, no context. + $save_callback(date("F", $stamp), POTX_CONTEXT_NONE, $file); + } + // Short month names lack a context anyway. + $save_callback(date("M", $stamp), POTX_CONTEXT_NONE, $file); + } + for ($i = 0; $i <= 7; $i++) { + $stamp = $i * 86400; + $save_callback(date("D", $stamp), POTX_CONTEXT_NONE, $file); + $save_callback(date("l", $stamp), POTX_CONTEXT_NONE, $file); + } + $save_callback('am', POTX_CONTEXT_NONE, $file); + $save_callback('pm', POTX_CONTEXT_NONE, $file); + $save_callback('AM', POTX_CONTEXT_NONE, $file); + $save_callback('PM', POTX_CONTEXT_NONE, $file); +} + +/** + * Add format_interval special strings, which cannot be + * extracted otherwise. This is called for common.inc + * + * @param $file + * Name of the file parsed. + * @param $save_callback + * Callback function used to save strings. + * @param $api_version + * Drupal API version to work with. + */ +function _potx_add_format_interval_strings($file, $save_callback, $api_version = POTX_API_6) { + $components = array( + '1 year' => '@count years', + '1 week' => '@count weeks', + '1 day' => '@count days', + '1 hour' => '@count hours', + '1 min' => '@count min', + '1 sec' => '@count sec' + ); + if ($api_version > POTX_API_6) { + // Month support added in Drupal 7. + $components['1 month'] = '@count months'; + } + + foreach ($components as $singular => $plural) { + // Intervals support no context. + $save_callback($singular ."\0". $plural, POTX_CONTEXT_NONE, $file); + } +} + +/** + * Add default theme region names, which cannot be extracted otherwise. + * These default names are defined in system.module + * + * @param $file + * Name of the file parsed. + * @param $save_callback + * Callback function used to save strings. + * @param $api_version + * Drupal API version to work with. + */ +function _potx_add_default_region_names($file, $save_callback, $api_version = POTX_API_6) { + $regions = array( + 'left' => 'Left sidebar', + 'right' => 'Right sidebar', + 'content' => 'Content', + 'header' => 'Header', + 'footer' => 'Footer', + ); + if ($api_version > POTX_API_6) { + // @todo: Update with final region list when D7 stabilizes. + $regions['highlight'] = 'Highlighted content'; + $regions['help'] = 'Help'; + $regions['page_top'] = 'Page top'; + } + foreach ($regions as $region) { + // Regions come with the default context. + $save_callback($region, POTX_CONTEXT_NONE, $file); + } +} + +/** + * Parse an .info file and add relevant strings to the list. + * + * @param $file_path + * Complete file path to load contents with. + * @param $file_name + * Stripped file name to use in outpout. + * @param $strings + * Current strings array + * @param $api_version + * Drupal API version to work with. + */ +function _potx_find_info_file_strings($file_path, $file_name, $save_callback, $api_version = POTX_API_6) { + $info = array(); + + if (file_exists($file_path)) { + $info = $api_version > POTX_API_5 ? drupal_parse_info_file($file_path) : parse_ini_file($file_path); + } + + // We need the name, description and package values. Others, + // like core and PHP compatibility, timestamps or versions + // are not to be translated. + foreach (array('name', 'description', 'package') as $key) { + if (isset($info[$key])) { + // No context support for .info file strings. + $save_callback($info[$key], POTX_CONTEXT_NONE, $file_name); + } + } + + // Add regions names from themes. + if (isset($info['regions']) && is_array($info['regions'])) { + foreach ($info['regions'] as $region => $region_name) { + // No context support for .info file strings. + $save_callback($region_name, POTX_CONTEXT_NONE, $file_name); + } + } +} + +/** + * Parse a JavaScript file for translatables. Only from Drupal 6. + * + * Extracts strings wrapped in Drupal.t() and Drupal.formatPlural() + * calls and inserts them into potx storage. + * + * Regex code lifted from _locale_parse_js_file(). + */ +function _potx_parse_js_file($code, $file, $save_callback) { + $js_string_regex = '(?:(?:\'(?:\\\\\'|[^\'])*\'|"(?:\\\\"|[^"])*")(?:\s*\+\s*)?)+'; + + // Match all calls to Drupal.t() in an array. + // Note: \s also matches newlines with the 's' modifier. + preg_match_all('~[^\w]Drupal\s*\.\s*t\s*\(\s*('. $js_string_regex .')\s*[,\)]~s', $code, $t_matches, PREG_SET_ORDER); + if (isset($t_matches) && count($t_matches)) { + foreach ($t_matches as $match) { + // Remove match from code to help us identify faulty Drupal.t() calls. + $code = str_replace($match[0], '', $code); + // @todo: figure out how to parse out context, once Drupal supports it. + $save_callback(_potx_parse_js_string($match[1]), POTX_CONTEXT_NONE, $file, 0); + } + } + + // Match all Drupal.formatPlural() calls in another array. + preg_match_all('~[^\w]Drupal\s*\.\s*formatPlural\s*\(\s*.+?\s*,\s*('. $js_string_regex .')\s*,\s*((?:(?:\'(?:\\\\\'|[^\'])*@count(?:\\\\\'|[^\'])*\'|"(?:\\\\"|[^"])*@count(?:\\\\"|[^"])*")(?:\s*\+\s*)?)+)\s*[,\)]~s', $code, $plural_matches, PREG_SET_ORDER); + if (isset($plural_matches) && count($plural_matches)) { + foreach ($plural_matches as $index => $match) { + // Remove match from code to help us identify faulty + // Drupal.formatPlural() calls later. + $code = str_replace($match[0], '', $code); + // @todo: figure out how to parse out context, once Drupal supports it. + $save_callback( + _potx_parse_js_string($match[1]) ."\0". _potx_parse_js_string($match[2]), + POTX_CONTEXT_NONE, + $file, + 0 + ); + } + } + + // Any remaining Drupal.t() or Drupal.formatPlural() calls are evil. This + // regex is not terribly accurate (ie. code wrapped inside will confuse + // the match), but we only need some unique part to identify the faulty calls. + preg_match_all('~[^\w]Drupal\s*\.\s*(t|formatPlural)\s*\([^)]+\)~s', $code, $faulty_matches, PREG_SET_ORDER); + if (isset($faulty_matches) && count($faulty_matches)) { + foreach ($faulty_matches as $index => $match) { + $message = ($match[1] == 't') ? t('Drupal.t() calls should have a single literal string as their first parameter.') : t('The singular and plural string parameters on Drupal.formatPlural() calls should be literal strings, plural containing a @count placeholder.'); + potx_status('error', $message, $file, NULL, $match[0], 'http://drupal.org/node/323109'); + } + } +} + +/** + * Clean up string found in JavaScript source code. Only from Drupal 6. + */ +function _potx_parse_js_string($string) { + return _potx_format_quoted_string(implode('', preg_split('~(? POTX_API_5) { + $extensions[] = 'js'; + } + $files = array(); + foreach ($extensions as $extension) { + $files_here = glob($path . $basename .'.'. $extension); + if (is_array($files_here)) { + $files = array_merge($files, $files_here); + } + if ($basename != '*') { + // Basename was specific, so look for things like basename.admin.inc as well. + // If the basnename was *, the above glob() already covered this case. + $files_here = glob($path . $basename .'.*.'. $extension); + if (is_array($files_here)) { + $files = array_merge($files, $files_here); + } + } + } + + // Grab subdirectories. + $dirs = glob($path .'*', GLOB_ONLYDIR); + if (is_array($dirs)) { + foreach ($dirs as $dir) { + if (!preg_match("!(^|.+/)(CVS|.svn|.git)$!", $dir)) { + $files = array_merge($files, _potx_explore_dir("$dir/", $basename)); + } + } + } + // Skip our own files, because we don't want to get strings from them + // to appear in the output, especially with the command line interface. + // TODO: fix this to be able to autogenerate templates for potx itself. + foreach ($files as $id => $file_name) { + if (preg_match('!(potx-cli.php|potx.php)$!', $file_name)) { + unset($files[$id]); + } + } + return $files; +} + +/** + * Default $version_callback used by the potx system. Saves values + * to a global array to reduce memory consumption problems when + * passing around big chunks of values. + * + * @param $value + * The ersion number value of $file. If NULL, the collected + * values are returned. + * @param $file + * Name of file where the version information was found. + */ +function _potx_save_version($value = NULL, $file = NULL) { + global $_potx_versions; + + if (isset($value)) { + $_potx_versions[$file] = $value; + } + else { + return $_potx_versions; + } +} + +/** + * Default $save_callback used by the potx system. Saves values + * to global arrays to reduce memory consumption problems when + * passing around big chunks of values. + * + * @param $value + * The string value. If NULL, the array of collected values + * are returned for the given $string_mode. + * @param $context + * From Drupal 7, separate contexts are supported. POTX_CONTEXT_NONE is + * the default, if the code does not specify a context otherwise. + * @param $file + * Name of file where the string was found. + * @param $line + * Line number where the string was found. + * @param $string_mode + * String mode: POTX_STRING_INSTALLER, POTX_STRING_RUNTIME + * or POTX_STRING_BOTH. + */ +function _potx_save_string($value = NULL, $context = NULL, $file = NULL, $line = 0, $string_mode = POTX_STRING_RUNTIME) { + global $_potx_strings, $_potx_install; + + if (isset($value)) { + switch ($string_mode) { + case POTX_STRING_BOTH: + // Mark installer strings as duplicates of runtime strings if + // the string was both recorded in the runtime and in the installer. + $_potx_install[$value][$context][$file][] = $line .' (dup)'; + // Break intentionally missing. + case POTX_STRING_RUNTIME: + // Mark runtime strings as duplicates of installer strings if + // the string was both recorded in the runtime and in the installer. + $_potx_strings[$value][$context][$file][] = $line . ($string_mode == POTX_STRING_BOTH ? ' (dup)' : ''); + break; + case POTX_STRING_INSTALLER: + $_potx_install[$value][$context][$file][] = $line; + break; + } + } + else { + return ($string_mode == POTX_STRING_RUNTIME ? $_potx_strings : $_potx_install); + } +} + +if (!function_exists('t')) { + // If invoked outside of Drupal, t() will not exist, but + // used to format the error message, so we provide a replacement. + function t($string, $args = array()) { + return strtr($string, $args); + } +} + +if (!function_exists('drupal_parse_info_file')) { + // If invoked outside of Drupal, drupal_parse_info_file() will not be available, + // but we need this function to properly parse Drupal 6/7 .info files. + // Directly copied from common.inc,v 1.704 2007/10/19 10:30:54 goba Exp. + function drupal_parse_info_file($filename) { + $info = array(); + + if (!file_exists($filename)) { + return $info; + } + + $data = file_get_contents($filename); + if (preg_match_all(' + @^\s* # Start at the beginning of a line, ignoring leading whitespace + ((?: + [^=;\[\]]| # Key names cannot contain equal signs, semi-colons or square brackets, + \[[^\[\]]*\] # unless they are balanced and not nested + )+?) + \s*=\s* # Key/value pairs are separated by equal signs (ignoring white-space) + (?: + ("(?:[^"]|(?<=\\\\)")*")| # Double-quoted string, which may contain slash-escaped quotes/slashes + (\'(?:[^\']|(?<=\\\\)\')*\')| # Single-quoted string, which may contain slash-escaped quotes/slashes + ([^\r\n]*?) # Non-quoted string + )\s*$ # Stop at the next end of a line, ignoring trailing whitespace + @msx', $data, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + // Fetch the key and value string + $i = 0; + foreach (array('key', 'value1', 'value2', 'value3') as $var) { + $$var = isset($match[++$i]) ? $match[$i] : ''; + } + $value = stripslashes(substr($value1, 1, -1)) . stripslashes(substr($value2, 1, -1)) . $value3; + + // Parse array syntax + $keys = preg_split('/\]?\[/', rtrim($key, ']')); + $last = array_pop($keys); + $parent = &$info; + + // Create nested arrays + foreach ($keys as $key) { + if ($key == '') { + $key = count($parent); + } + if (!isset($parent[$key]) || !is_array($parent[$key])) { + $parent[$key] = array(); + } + $parent = &$parent[$key]; + } + + // Handle PHP constants + if (defined($value)) { + $value = constant($value); + } + + // Insert actual value + if ($last == '') { + $last = count($parent); + } + $parent[$last] = $value; + } + } + + return $info; + } +} diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/quote.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/quote.php new file mode 100644 index 0000000..67981af --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/quote.php @@ -0,0 +1,38 @@ +save_settings(array('quote-get' => $saved)); + echo ''; + + /** + * Produce quote + */ +} else if (isset($data['submit-produce'])) { + $saved = $sitepress_settings['quote-get']; + if (empty($saved['from']) + || empty($saved['to']) + || empty($saved['content']) + ) { + die('data not valid'); + } + $word_count = 0; + $wc_description = array(); + foreach ($saved['content'] as $ID => $true) { + $wc_description[] = $saved['description'][$ID]['num'] . ' ' + . $saved['description'][$ID]['title'] . ' with ' + . $saved['description'][$ID]['words'] . ' words'; + $word_count += intval($saved['description'][$ID]['words']); + } + $wc_description = implode(', ', $wc_description); + + /** + * Create account + */ + if (!isset($sitepress_settings['site_id'])) { + $user = array(); + $user['create_account'] = 1; + $user['anon'] = 1; + $user['platform_kind'] = 2; + $user['cms_kind'] = 1; + $user['blogid'] = $wpdb->blogid ? $wpdb->blogid : 1; + $user['url'] = get_option('siteurl'); + $user['title'] = get_option('blogname'); + $user['description'] = $sitepress_settings['icl_site_description']; + $user['is_verified'] = 1; + $user['interview_translators'] = $sitepress_settings['interview_translators']; + $user['project_kind'] = $sitepress_settings['website_kind']; + $user['pickup_type'] = intval($sitepress_settings['translation_pickup_method']); + $user['ignore_languages'] = 1; + $user['word_count'] = $word_count; + $user['wc_description'] = $wc_description; + + if (defined('ICL_AFFILIATE_ID') && defined('ICL_AFFILIATE_KEY')) { + $user['affiliate_id'] = ICL_AFFILIATE_ID; + $user['affiliate_key'] = ICL_AFFILIATE_KEY; + } + $notifications = 0; + if ($sitepress_settings['icl_notify_complete']) { + $notifications += 1; + } + if ($sitepress_settings['alert_delay']) { + $notifications += 2; + } + $user['notifications'] = $notifications; + // prepare language pairs + $pay_per_use = $sitepress_settings['translator_choice'] == 1; + $language_pairs = array($saved['from'] => $saved['to']); + $lang_pairs = array(); + if (isset($language_pairs)) { + foreach ($language_pairs as $k => $v) { + $english_fr = $wpdb->get_var("SELECT english_name FROM {$wpdb->prefix}icl_languages WHERE code='{$k}' "); + foreach ($v as $k => $v) { + $incr++; + $english_to = $wpdb->get_var("SELECT english_name FROM {$wpdb->prefix}icl_languages WHERE code='{$k}' "); + $lang_pairs['from_language' . $incr] = ICL_Pro_Translation::server_languages_map($english_fr); + $lang_pairs['to_language' . $incr] = ICL_Pro_Translation::server_languages_map($english_to); + if ($pay_per_use) { + $lang_pairs['pay_per_use' . $incr] = 1; + } + } + } + } + require_once ICL_PLUGIN_PATH . '/lib/icl_api.php'; + $icl_query = new ICanLocalizeQuery(); + list($site_id, $access_key) = $icl_query->createAccount(array_merge($user, $lang_pairs)); + if (!$site_id){ + $user['pickup_type'] = ICL_PRO_TRANSLATION_PICKUP_POLLING; + list($site_id, $access_key) = $icl_query->createAccount(array_merge($user, $lang_pairs)); + } + if (!$site_id) { + if (!$access_key) { + // We will force the next try to be http. + update_option('_force_mp_post_http', 1); + } + $saved = $sitepress_settings['quote-get']; + $saved['step'] = 3; + $sitepress->save_settings(array('quote-get' => $saved)); + echo __('An unknown error has occurred when communicating with the ICanLocalize server. Please try again.', 'sitepress') . '

              '; + require_once ICL_PLUGIN_PATH . '/inc/quote/quote-get.php'; + exit; + } else { + if($user['pickup_type'] == ICL_PRO_TRANSLATION_PICKUP_POLLING){ + $iclsettings['translation_pickup_method'] = ICL_PRO_TRANSLATION_PICKUP_POLLING; + } + $iclsettings['site_id'] = $site_id; + $iclsettings['access_key'] = $access_key; + $iclsettings['icl_account_email'] = $user['email']; + $sitepress->get_icl_translator_status($iclsettings); + $sitepress->save_settings($iclsettings); + } + /** + * Update account + */ + } else { + $data = array(); + $data['word_count'] = $word_count; + $data['wc_description'] = $wc_description; + $data['site_id'] = $site_id = $sitepress_settings['site_id']; + $data['accesskey'] = $access_key = $sitepress_settings['access_key']; + $data['ignore_languages'] = 1; + require_once ICL_PLUGIN_PATH . '/lib/icl_api.php'; + $icl_query = new ICanLocalizeQuery(); + if ($icl_query->updateAccount($data) !== 0) { + $saved = $sitepress_settings['quote-get']; + $saved['step'] = 3; + $sitepress->save_settings(array('quote-get' => $saved)); + echo __('An unknown error has occurred when communicating with the ICanLocalize server. Please try again.', 'sitepress') . '

              '; + require_once ICL_PLUGIN_PATH . '/inc/quote/quote-get.php'; + exit; + } + } + + /** + * Set URL query + */ + $language_pairs = array($saved['from'] => $saved['to']); + $lang_pairs = array(); + $incr = 1; + $query = ''; + if (isset($language_pairs)) { + foreach ($language_pairs as $k => $v) { + $english_from = $wpdb->get_var("SELECT english_name FROM {$wpdb->prefix}icl_languages WHERE code='{$k}' "); + $query .= '&to_lang_num=' . count($v); + $query .= '&from_language_name=' . $english_from; + foreach ($v as $k => $v) { + $english_to = $wpdb->get_var("SELECT english_name FROM {$wpdb->prefix}icl_languages WHERE code='{$k}' "); + $query .= '&to_language_name_' . $incr . '=' . ICL_Pro_Translation::server_languages_map($english_to); + $incr++; + } + } + } + $url = ICL_API_ENDPOINT . '/websites/' . $site_id . '/quote?accesskey=' . $access_key . '&locale=' . $sitepress->get_default_language() . $query . '&compact=1'; + // Call reopen JS + echo ''; + exit; +} diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/quote/quote-get.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/quote/quote-get.php new file mode 100644 index 0000000..76398c4 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/quote/quote-get.php @@ -0,0 +1,303 @@ + + +get_active_languages(); + +?> + +

              +

              + +
              + + $lang) { + $selected = @is_array($saved['to']) && @in_array($code, $saved['to']) ? ' checked="checked"' : ''; + + ?> +

              + +

              +

              + +

              + $iclTranslationManagement + * @global $wpdb + * @param $saved + */ + function icl_quote_get_step_two($saved) { + global $sitepress, $iclTranslationManagement, $wpdb; + $iclTranslationManagement->init(); + $cf_settings = $iclTranslationManagement->settings['custom_fields_translation']; + $rows = array(); + $add = 0; + $types = get_post_types('', 'objects'); + foreach ($types as $name => $type) { + if (in_array($name, array('attachment', 'revision', 'nav_menu_item'))) { + continue; + } + $source_code = $saved['from'] == $sitepress->get_default_language() ? 'IS NULL' : "= '" . $saved['from'] . "'"; + $posts = $wpdb->get_results("SELECT p.ID, p.post_title, p.post_content + FROM {$wpdb->prefix}posts p + JOIN {$wpdb->prefix}icl_translations t + WHERE p.post_type = '" . $name . "' + AND t.element_type = 'post_" . $name . "' + AND t.element_id = p.ID + AND t.language_code = '" . $saved['from'] . "' + AND p.post_status = 'publish' + "); + $rows[$name]['ID'] = $name; + $rows[$name]['title'] = $type->label; + if (empty($posts)) { + $rows[$name]['words'] = 0; + $rows[$name]['num'] = 0; + continue; + } + $rows[$name]['words'] = 0; + foreach ($posts as $post) { + $meta_count = 0; + if (!empty($cf_settings)) { + foreach ($cf_settings as $meta_key => $translate) { + if ($translate == 2) { + $meta = get_post_meta($post->ID, $meta_key, true); + if (is_string($meta)) { + $meta_count += str_word_count(strip_tags( + $meta)); + } + } else { + unset($cf_settings[$meta_key]); + } + } + } + $add = $meta_count + str_word_count(strip_tags($post->post_title)) + str_word_count(strip_tags($post->post_content)); + $rows[$name]['words'] += $add; + } + $rows[$name]['num'] = count($posts); + } + +?> +

              +

              +
              To get the word count of specific documents, use the %sTranslation Dashboard%s.', + 'sitepress'), '', ''); ?> +

              + + + + + + + + + + + + $data) { + $selected = @is_array($saved['content']) && @array_key_exists($data['ID'], $saved['content']) ? ' checked="checked"' : ''; + + ?> + + + + + + + + +
              + /> + + + +
              +

              + + +

              + $true) { + $wc_description[] = $saved['description'][$ID]['num'] . ' ' + . $saved['description'][$ID]['title'] . ' with ' + . $saved['description'][$ID]['words'] . ' words'; + } + +?> +

              + +

              +
                +
              • ', $wc_description); ?>
              • +
              + +

              + + + +

              + + +
              +
              + + + save_settings(array('quote-get' => $saved)); + icl_quote_get_step_one($saved); + } else if ($data['step'] == 2) { + if (isset($data['next'])) { + $saved['from'] = $data['from']; + $saved['to'] = $data['to']; + } + $saved['step'] = 2; + $sitepress->save_settings(array('quote-get' => $saved)); + icl_quote_get_step_two($saved); + } else if ($data['step'] == 3) { + if (isset($data['next'])) { + $saved['content'] = $data['content']; + $saved['description'] = $data['description']; + } + $saved['step'] = 3; + $sitepress->save_settings(array('quote-get' => $saved)); + icl_quote_get_step_three($saved); + } + + ?> +
              +
              diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/sitepress-schema.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/sitepress-schema.php new file mode 100644 index 0000000..d4fabb3 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/sitepress-schema.php @@ -0,0 +1,446 @@ +has_cap( 'collation' ) ) { + if ( ! empty($wpdb->charset) ) + $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; + if ( ! empty($wpdb->collate) ) + $charset_collate .= " COLLATE $wpdb->collate"; + } + + try{ + + // languages table + $table_name = $wpdb->prefix.'icl_languages'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , + `code` VARCHAR( 7 ) NOT NULL , + `english_name` VARCHAR( 128 ) NOT NULL , + `major` TINYINT NOT NULL DEFAULT '0', + `active` TINYINT NOT NULL , + `default_locale` VARCHAR( 8 ), + `tag` VARCHAR( 8 ), + `encode_url` TINYINT( 1 ) NOT NULL DEFAULT 0, + UNIQUE KEY `code` (`code`), + UNIQUE KEY `english_name` (`english_name`) + ) {$charset_collate}"; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + + //$langs_names is defined in ICL_PLUGIN_PATH . '/inc/lang-data.php' + /** @var $langs_names array */ + /** @var $lang_codes array */ + foreach($langs_names as $key=>$val){ + if(strpos($key,'Norwegian Bokm')===0){ $key = 'Norwegian Bokmål'; $lang_codes[$key] = 'nb';} // exception for norwegian + $default_locale = isset($lang_locales[$lang_codes[$key]]) ? $lang_locales[$lang_codes[$key]] : ''; + $wpdb->insert($wpdb->prefix . 'icl_languages', + array( + 'english_name' => $key, + 'code' => $lang_codes[$key], + 'major' => $val['major'], + 'active' => 0, + 'default_locale'=> $default_locale, + 'tag' => str_replace ('_', '-', $default_locale) + ) + ); + } + } + + // languages translations table + $add_languages_translations = false; + $table_name = $wpdb->prefix.'icl_languages_translations'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , + `language_code` VARCHAR( 7 ) NOT NULL , + `display_language_code` VARCHAR( 7 ) NOT NULL , + `name` VARCHAR( 255 ) CHARACTER SET utf8 NOT NULL, + UNIQUE(`language_code`, `display_language_code`) + ) {$charset_collate}"; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + $add_languages_translations = true; + } + //else{ + // this table will not be trucated on upgrade starting with WPML 1.7.3 + // $add_languages_translations sticks to false; + //if(!defined('ICL_PRESERVE_LANGUAGES_TRANSLATIONS') || !ICL_PRESERVE_LANGUAGES_TRANSLATIONS){ + // mysql_query("TRUNCATE TABLE `{$table_name}`"); + // $add_languages_translations = true; + //} + //} + + if($add_languages_translations){ + foreach($langs_names as $lang=>$val){ + if(strpos($lang,'Norwegian Bokm')===0){ $lang = 'Norwegian Bokmål'; $lang_codes[$lang] = 'nb';} + foreach($val['tr'] as $k=>$display){ + if(strpos($k,'Norwegian Bokm')===0){ $k = 'Norwegian Bokmål';} + if(!trim($display)){ + $display = $lang; + } + if(!($wpdb->get_var("SELECT id FROM {$table_name} WHERE language_code='{$lang_codes[$lang]}' AND display_language_code='{$lang_codes[$k]}'"))){ + $wpdb->insert($wpdb->prefix . 'icl_languages_translations', array('language_code'=>$lang_codes[$lang], 'display_language_code'=>$lang_codes[$k], 'name'=>$display)); + } + } + } + } + + + // translations + $table_name = $wpdb->prefix.'icl_translations'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `translation_id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY , + `element_type` VARCHAR( 36 ) NOT NULL DEFAULT 'post_post', + `element_id` BIGINT NULL DEFAULT NULL , + `trid` BIGINT NOT NULL , + `language_code` VARCHAR( 7 ) NOT NULL, + `source_language_code` VARCHAR( 7 ), + UNIQUE KEY `el_type_id` (`element_type`,`element_id`), + UNIQUE KEY `trid_lang` (`trid`,`language_code`), + KEY `trid` (`trid`) + + ) {$charset_collate}"; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + } + + // translation_status table + $table_name = $wpdb->prefix.'icl_translation_status'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `rid` bigint(20) NOT NULL AUTO_INCREMENT, + `translation_id` bigint(20) NOT NULL, + `status` tinyint(4) NOT NULL, + `translator_id` bigint(20) NOT NULL, + `needs_update` tinyint(4) NOT NULL, + `md5` varchar(32) NOT NULL, + `translation_service` varchar(16) NOT NULL, + `translation_package` text NOT NULL, + `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + `links_fixed` tinyint(4) NOT NULL DEFAULT 0, + `_prevstate` longtext, + PRIMARY KEY (`rid`), + UNIQUE KEY `translation_id` (`translation_id`) + ) {$charset_collate} + "; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + } + + // translation jobs + $table_name = $wpdb->prefix.'icl_translate_job'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `job_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `rid` BIGINT UNSIGNED NOT NULL , + `translator_id` INT UNSIGNED NOT NULL , + `translated` TINYINT UNSIGNED NOT NULL DEFAULT 0, + `manager_id` INT UNSIGNED NOT NULL , + `revision` INT UNSIGNED NULL, + INDEX ( `rid` , `translator_id` ) + ) {$charset_collate} + "; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + } + + // translate table + $table_name = $wpdb->prefix.'icl_translate'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `tid` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `job_id` BIGINT UNSIGNED NOT NULL , + `content_id` BIGINT UNSIGNED NOT NULL , + `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , + `field_type` VARCHAR( 128 ) NOT NULL , + `field_format` VARCHAR( 16 ) NOT NULL , + `field_translate` TINYINT NOT NULL , + `field_data` TEXT NOT NULL , + `field_data_translated` TEXT NOT NULL , + `field_finished` TINYINT NOT NULL DEFAULT 0, + INDEX ( `job_id` ) + ) {$charset_collate} + "; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + } + + // languages locale file names + $table_name = $wpdb->prefix.'icl_locale_map'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `code` VARCHAR( 7 ) NOT NULL , + `locale` VARCHAR( 8 ) NOT NULL , + UNIQUE (`code` ,`locale`) + ) {$charset_collate}"; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + } + + // flags table + $table_name = $wpdb->prefix.'icl_flags'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , + `lang_code` VARCHAR( 10 ) NOT NULL , + `flag` VARCHAR( 32 ) NOT NULL , + `from_template` TINYINT NOT NULL DEFAULT '0', + UNIQUE (`lang_code`) + ) {$charset_collate}"; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + $codes = $wpdb->get_col("SELECT code FROM {$wpdb->prefix}icl_languages"); + foreach($codes as $code){ + if(!$code || $wpdb->get_var("SELECT lang_code FROM {$wpdb->prefix}icl_flags WHERE lang_code='{$code}'")) continue; + if(!file_exists(ICL_PLUGIN_PATH.'/res/flags/'.$code.'.png')){ + $file = 'nil.png'; + }else{ + $file = $code.'.png'; + } + $wpdb->insert($wpdb->prefix.'icl_flags', array('lang_code'=>$code, 'flag'=>$file, 'from_template'=>0)); + } + } + + /* general string translation */ + $table_name = $wpdb->prefix.'icl_strings'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `id` bigint(20) unsigned NOT NULL auto_increment, + `language` varchar(7) NOT NULL, + `context` varchar(160) NOT NULL, + `name` varchar(160) NOT NULL, + `value` text NOT NULL, + `status` TINYINT NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `context_name` (`context`,`name`), + KEY `language_context` (`language`, `context`) + ) {$charset_collate}"; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + } + + $table_name = $wpdb->prefix.'icl_string_translations'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `id` bigint(20) unsigned NOT NULL auto_increment, + `string_id` bigint(20) unsigned NOT NULL, + `language` varchar(10) NOT NULL, + `status` tinyint(4) NOT NULL, + `value` text NULL DEFAULT NULL, + `translator_id` bigint(20) unsigned DEFAULT NULL, + `translation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `string_language` (`string_id`,`language`) + ) {$charset_collate}"; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + } + + $table_name = $wpdb->prefix.'icl_string_status'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `rid` BIGINT NOT NULL , + `string_translation_id` BIGINT NOT NULL , + `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , + `md5` VARCHAR( 32 ) NOT NULL, + INDEX ( `string_translation_id` ) + ) {$charset_collate}"; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + } + + $table_name = $wpdb->prefix.'icl_string_positions'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `string_id` BIGINT NOT NULL , + `kind` TINYINT, + `position_in_page` VARCHAR( 255 ) NOT NULL, + INDEX ( `string_id` ) + ) {$charset_collate}"; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + } + + // message status table + $table_name = $wpdb->prefix.'icl_message_status'; + if(0 !== strcasecmp($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'"), $table_name)){ + $sql = " + CREATE TABLE IF NOT EXISTS `{$table_name}` ( + `id` bigint(20) unsigned NOT NULL auto_increment, + `rid` bigint(20) unsigned NOT NULL, + `object_id` bigint(20) unsigned NOT NULL, + `from_language` varchar(10) NOT NULL, + `to_language` varchar(10) NOT NULL, + `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP, + `md5` varchar(32) NOT NULL, + `object_type` varchar(64) NOT NULL, + `status` smallint(6) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `rid` (`rid`), + KEY `object_id` (`object_id`) + ) {$charset_collate}"; + $wpdb->query($sql); + if($e = mysql_error()) throw new Exception($e); + } + + /* string translation - start */ + $icl_translation_sql = " + CREATE TABLE IF NOT EXISTS {$wpdb->prefix}icl_core_status ( + `id` BIGINT NOT NULL auto_increment, + `rid` BIGINT NOT NULL, + `module` VARCHAR( 16 ) NOT NULL , + `origin` VARCHAR( 64 ) NOT NULL , + `target` VARCHAR( 64 ) NOT NULL , + `status` SMALLINT NOT NULL, + PRIMARY KEY ( `id` ) , + INDEX ( `rid` ) + ) {$charset_collate} + "; + $wpdb->query($icl_translation_sql); + if($e = mysql_error()) throw new Exception($e); + + $icl_translation_sql = " + CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}icl_content_status` ( + `rid` BIGINT NOT NULL , + `nid` BIGINT NOT NULL , + `timestamp` DATETIME NOT NULL , + `md5` VARCHAR( 32 ) NOT NULL , + PRIMARY KEY ( `rid` ) , + INDEX ( `nid` ) + ) {$charset_collate} + "; + $wpdb->query($icl_translation_sql); + if($e = mysql_error()) throw new Exception($e); + + + $icl_translation_sql = " + CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}icl_node` ( + `nid` BIGINT NOT NULL , + `md5` VARCHAR( 32 ) NOT NULL , + `links_fixed` TINYINT NOT NULL DEFAULT 0, + PRIMARY KEY ( `nid` ) + ) {$charset_collate} + "; + $wpdb->query($icl_translation_sql); + if($e = mysql_error()) throw new Exception($e); + + $icl_translation_sql = " + CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}icl_reminders` ( + `id` BIGINT NOT NULL , + `message` TEXT NOT NULL , + `url` TEXT NOT NULL , + `can_delete` TINYINT NOT NULL , + `show` TINYINT NOT NULL , + PRIMARY KEY ( `id` ) + ) {$charset_collate} + "; + $wpdb->query($icl_translation_sql); + if($e = mysql_error()) throw new Exception($e); + + } catch(Exception $e) { + trigger_error($e->getMessage(), E_USER_ERROR); + exit; + } + + if(get_option('icl_sitepress_version')){ + icl_plugin_upgrade(); + } + + // don't set the new version if a multi-step upgrade is in progress + if(!defined('ICL_MULTI_STEP_UPGRADE')){ + delete_option('icl_sitepress_version'); + add_option('icl_sitepress_version', ICL_SITEPRESS_VERSION, '', true); + } + + + $iclsettings = get_option('icl_sitepress_settings'); + if($iclsettings === false ){ + $short_v = implode('.', array_slice(explode('.', ICL_SITEPRESS_VERSION), 0, 3)); + $settings = array( + 'hide_upgrade_notice' => $short_v + ); + add_option('icl_sitepress_settings', $settings, '', true); + }else{ + // reset ajx_health_flag + $iclsettings['ajx_health_checked'] = 0; + update_option('icl_sitepress_settings',$iclsettings); + } + +} + +function icl_sitepress_deactivate(){ +} + +// Changed to use lowercased wpdb prefix. Some users have table name in uppercase. +// http://bugs.mysql.com/bug.php?id=39894 +if(isset($_GET['activate'])){ + if(!isset($wpdb)) global $wpdb; + $table_name = $wpdb->prefix.'icl_languages'; + if(strtolower($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'")) != strtolower($table_name)){ + add_action('admin_notices', 'icl_cant_create_table'); + function icl_cant_create_table(){ + echo '
              • '; + echo __('WPML cannot create the database tables! Make sure that your mysql user has the CREATE privilege', 'sitepress'); + echo '
              '; + $active_plugins = get_option('active_plugins'); + $icl_sitepress_idx = array_search(ICL_PLUGIN_FOLDER . '/sitepress.php', $active_plugins); + if(false !== $icl_sitepress_idx){ + unset($active_plugins[$icl_sitepress_idx]); + update_option('active_plugins', $active_plugins); + unset($_GET['activate']); + $recently_activated = get_option('recently_activated'); + if(!isset($recently_activated[ICL_PLUGIN_FOLDER.'/sitepress.php'])){ + $recently_activated[ICL_PLUGIN_FOLDER.'/sitepress.php'] = time(); + update_option('recently_activated', $recently_activated); + } + } + } + } +} + +/* +function icl_cant_be_activated(){ + echo '
              • '; + echo sprintf(__('WPML cannot be acctivated because: %s', 'sitepress'), $GLOBALS['_icl_activation_error']); + echo '
              '; + $active_plugins = get_option('active_plugins'); + $icl_sitepress_idx = array_search(ICL_PLUGIN_FOLDER . '/sitepress.php', $active_plugins); + if(false !== $icl_sitepress_idx){ + unset($active_plugins[$icl_sitepress_idx]); + update_option('active_plugins', $active_plugins); + unset($_GET['activate']); + $recently_activated = get_option('recently_activated'); + if(!isset($recently_activated[ICL_PLUGIN_FOLDER.'/sitepress.php'])){ + $recently_activated[ICL_PLUGIN_FOLDER.'/sitepress.php'] = time(); + update_option('recently_activated', $recently_activated); + } + } +} +*/ + diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/template-constants.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/template-constants.php new file mode 100644 index 0000000..ea0945c --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/template-constants.php @@ -0,0 +1,14 @@ +this_lang); +} +$language_details = $this->get_language_details(ICL_LANGUAGE_CODE); +if(!defined('ICL_LANGUAGE_NAME')){ + define('ICL_LANGUAGE_NAME', $language_details['display_name']); +} +if(!defined('ICL_LANGUAGE_NAME_EN')){ + define('ICL_LANGUAGE_NAME_EN', $language_details['english_name']); +} + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/template-functions.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/template-functions.php new file mode 100644 index 0000000..8839eee --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/template-functions.php @@ -0,0 +1,531 @@ +language_url($sitepress->get_current_language()); +} + +// args: +// skip_missing (0|1|true|false) +// orderby (id|code|name) +// order (asc|desc) +function icl_get_languages($a='') { + if ($a) { + parse_str($a, $args); + } else { + $args = ''; + } + global $sitepress; + $langs = $sitepress->get_ls_languages($args); + return $langs; +} + +function icl_disp_language($native_name, $translated_name, + $lang_native_hidden = false, $lang_translated_hidden = false) { + if (!$native_name && !$translated_name) { + $ret = ''; + } elseif ($native_name && $translated_name) { + $hidden1 = $hidden2 = $hidden3 = ''; + if ($lang_native_hidden) { + $hidden1 = 'style="display:none;"'; + } + if ($lang_translated_hidden) { + $hidden2 = 'style="display:none;"'; + } + if ($lang_native_hidden && $lang_translated_hidden) { + $hidden3 = 'style="display:none;"'; + } + + if ($native_name != $translated_name) { + $ret = '' . $native_name . + ' (' . $translated_name . + ')'; + } else { + $ret = '' . $native_name . ''; + } + } elseif ($native_name) { + $ret = $native_name; + } elseif ($translated_name) { + $ret = $translated_name; + } + + return $ret; +} + +function icl_link_to_element($element_id, $element_type='post', $link_text='', + $optional_parameters=array(), $anchor='', $echoit = true, + $return_original_if_missing = true) { + global $sitepress, $wpdb, $wp_post_types, $wp_taxonomies; + + if ($element_type == 'tag') + $element_type = 'post_tag'; + if ($element_type == 'page') + $element_type = 'post'; + + $post_types = array_keys((array) $wp_post_types); + $taxonomies = array_keys((array) $wp_taxonomies); + + if (in_array($element_type, $taxonomies)) { + $element_id = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id= %d AND taxonomy='{$element_type}'", + $element_id)); + } elseif (in_array($element_type, $post_types)) { + $element_type = 'post'; + } + + + if (!$element_id) + return ''; + + if (in_array($element_type, $taxonomies)) { + $icl_element_type = 'tax_' . $element_type; + } elseif (in_array($element_type, $post_types)) { + $icl_element_type = 'post_' . $wpdb->get_var("SELECT post_type FROM {$wpdb->posts} WHERE ID='{$element_id}'"); + } + + + $trid = $sitepress->get_element_trid($element_id, $icl_element_type); + $translations = $sitepress->get_element_translations($trid, + $icl_element_type); + + + // current language is ICL_LANGUAGE_CODE + if (isset($translations[ICL_LANGUAGE_CODE])) { + if ($element_type == 'post') { + $url = get_permalink($translations[ICL_LANGUAGE_CODE]->element_id); + $title = $translations[ICL_LANGUAGE_CODE]->post_title; + } elseif ($element_type == 'post_tag') { + list($term_id, $title) = $wpdb->get_row($wpdb->prepare("SELECT t.term_id, t.name FROM {$wpdb->term_taxonomy} tx JOIN {$wpdb->terms} t ON t.term_id = tx.term_id WHERE tx.term_taxonomy_id = %d AND tx.taxonomy='post_tag'", + $translations[ICL_LANGUAGE_CODE]->element_id), + ARRAY_N); + $url = get_tag_link($term_id); + $title = apply_filters('single_cat_title', $title); + } elseif ($element_type == 'category') { + list($term_id, $title) = $wpdb->get_row($wpdb->prepare("SELECT t.term_id, t.name FROM {$wpdb->term_taxonomy} tx JOIN {$wpdb->terms} t ON t.term_id = tx.term_id WHERE tx.term_taxonomy_id = %d AND tx.taxonomy='category'", + $translations[ICL_LANGUAGE_CODE]->element_id), + ARRAY_N); + $url = get_category_link($term_id); + $title = apply_filters('single_cat_title', $title); + } else { + list($term_id, $title) = $wpdb->get_row($wpdb->prepare("SELECT t.term_id, t.name FROM {$wpdb->term_taxonomy} tx JOIN {$wpdb->terms} t ON t.term_id = tx.term_id WHERE tx.term_taxonomy_id = %d AND tx.taxonomy='{$element_type}'", + $translations[ICL_LANGUAGE_CODE]->element_id), + ARRAY_N); + $url = get_term_link($term_id, $element_type); + $title = apply_filters('single_cat_title', $title); + } + } else { + if (!$return_original_if_missing) { + if ($echoit) { + echo ''; + } + return ''; + } + + if ($element_type == 'post') { + $url = get_permalink($element_id); + $title = get_the_title($element_id); + } elseif ($element_type == 'post_tag') { + $url = get_tag_link($element_id); + $my_tag = &get_term($element_id, 'post_tag', OBJECT, 'display'); + $title = apply_filters('single_tag_title', $my_tag->name); + } elseif ($element_type == 'category') { + $url = get_category_link($element_id); + $my_cat = &get_term($element_id, 'category', OBJECT, 'display'); + $title = apply_filters('single_cat_title', $my_cat->name); + } else { + $url = get_term_link((int) $element_id, $element_type); + $my_cat = &get_term($element_id, $element_type, OBJECT, 'display'); + $title = apply_filters('single_cat_title', $my_cat->name); + } + } + + if (!$url || is_wp_error($url)) + return ''; + + if (!empty($optional_parameters)) { + $url_glue = false === strpos($url, '?') ? '?' : '&'; + $url .= $url_glue . http_build_query($optional_parameters); + } + + if (isset($anchor) && $anchor) { + $url .= '#' . $anchor; + } + + $link = ''; + if (isset($link_text) && $link_text) { + $link .= $link_text; + } else { + $link .= $title; + } + $link .= ''; + + if ($echoit) { + echo $link; + } else { + return $link; + } +} + +function icl_object_id($element_id, $element_type='post', $return_original_if_missing=false, $ulanguage_code=null) { + global $sitepress, $wpdb, $wp_post_types, $wp_taxonomies; + + if ( is_null( $ulanguage_code ) ) { + $ulanguage_code = $sitepress->get_current_language(); + } + + // special case of any - we assume it's a post type + if($element_type == 'any' && $_dtype = $wpdb->get_var($wpdb->prepare("SELECT post_type FROM {$wpdb->posts} WHERE ID=%d", $element_id))){ + $element_type = $_dtype; + } + // + + static $fcache = array(); + $fcache_key = $element_id . '#' . $element_type . '#' . intval($return_original_if_missing) . '#' . $ulanguage_code; + if (isset($fcache[$fcache_key])) { + return $fcache[$fcache_key]; + } + + if ($element_id <= 0) { + return $element_id; + } + + $post_types = array_keys((array) $wp_post_types); + $taxonomies = array_keys((array) $wp_taxonomies); + $element_types = array_merge($post_types, $taxonomies); + $element_types[] = 'comment'; + + if (!in_array($element_type, $element_types)) { + trigger_error(sprintf(__('Invalid object kind: %s', 'sitepress'), $element_type), E_USER_NOTICE); + return null; + } elseif (!$element_id) { + trigger_error(__('Invalid object id', 'sitepress'), E_USER_NOTICE); + return null; + } + + if (in_array($element_type, $taxonomies)) { + $icl_element_id = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id= %d AND taxonomy='{$element_type}'", + $element_id)); + } else { + $icl_element_id = $element_id; + } + + if (in_array($element_type, $taxonomies)) { + $icl_element_type = 'tax_' . $element_type; + } elseif (in_array($element_type, $post_types)) { + $icl_element_type = 'post_' . $element_type; + } else { + $icl_element_type = $element_type; + } + + $trid = $sitepress->get_element_trid($icl_element_id, $icl_element_type); + $translations = $sitepress->get_element_translations($trid, $icl_element_type); + + if (isset($translations[$ulanguage_code]->element_id)) { + $ret_element_id = $translations[$ulanguage_code]->element_id; + if (in_array($element_type, $taxonomies)) { + $ret_element_id = $wpdb->get_var($wpdb->prepare("SELECT t.term_id FROM {$wpdb->term_taxonomy} tx JOIN {$wpdb->terms} t ON t.term_id = tx.term_id WHERE tx.term_taxonomy_id = %d AND tx.taxonomy='{$element_type}'", + $ret_element_id)); + } + } else { + $ret_element_id = $return_original_if_missing ? $element_id : null; + } + + $fcache[$fcache_key] = $ret_element_id; + + return $ret_element_id; +} + +function icl_get_default_language() { + global $sitepress; + return $sitepress->get_default_language(); +} + +function icl_tf_determine_mo_folder($folder, $rec = 0) { + global $sitepress; + + $dh = @opendir($folder); + $lfn = $sitepress->get_locale_file_names(); + + while ($file = readdir($dh)) { + if (0 === strpos($file, '.')) + continue; + if (is_file($folder . '/' . $file) && preg_match('#\.mo$#i', $file) && in_array(preg_replace('#\.mo$#i', + '', $file), $lfn)) { + return $folder; + } elseif (is_dir($folder . '/' . $file) && $rec < 5) { + if ($f = icl_tf_determine_mo_folder($folder . '/' . $file, $rec + 1)) { + return $f; + }; + } + } + + return false; +} + +function wpml_cf_translation_preferences($id, $custom_field = false, + $class = 'wpml', $ajax = false, $default_value = 'ignore', + $fieldset = false, $suppress_error = false) { + $output = ''; + if ($custom_field) { + $custom_field = @strval($custom_field); + } + $class = @strval($class); + if ($fieldset) { + $output .= ' +
              ' + . '' . __('Translation preferences', 'wpml') . ''; + } + $actions = array('ignore' => 0, 'copy' => 1, 'translate' => 2); + $action = isset($actions[@strval($default_value)]) ? $actions[@strval($default_value)] : 0; + global $iclTranslationManagement; + if ($custom_field) { + if (defined('WPML_TM_VERSION') && !empty($iclTranslationManagement)) { + if (isset($iclTranslationManagement->settings['custom_fields_translation'][$custom_field])) { + $action = intval($iclTranslationManagement->settings['custom_fields_translation'][$custom_field]); + } + $disabled = $xml_override = in_array($custom_field, (array)$iclTranslationManagement->settings['custom_fields_readonly_config']); + if ($disabled) { + $output .= '
              ' . __('The translation preference for this field are being controlled by a language configuration XML file. If you want to control it manually, remove the entry from the configuration file.', 'wpml') . '
              '; + } + } else if (!$suppress_error) { + $output .= '' + . __("To synchronize values for translations, you need to enable WPML's Translation Management module.", + 'wpml') + . ''; + $disabled = true; + } + } else if (!$suppress_error) { + $output .= '' + . __('Error: Something is wrong with field value. Translation preferences can not be set.', + 'wpml') + . ''; + $disabled = true; + } + $disabled = !empty($disabled) ? ' readonly="readonly" disabled="disabled"' : ''; + $output .= '
              ' + . __('Choose what to do when translating content with this field:', + 'wpml') + . '
              +  +
              +  +
              +  +
              '; + if ($custom_field && $ajax) { + $output .= ' +
              + +'; + } + if ($fieldset) { + $output .= ' +
              +'; + } + return $output; +} + +function wpml_cf_translation_preferences_store($id, $custom_field) { + if (defined('WPML_TM_VERSION')) { + if (empty($id) || empty($custom_field) + || !isset($_POST['wpml_cf_translation_preferences'][$id])) { + return false; + } + $custom_field = @strval($custom_field); + $action = @intval($_POST['wpml_cf_translation_preferences'][$id]); + global $iclTranslationManagement; + if (!empty($iclTranslationManagement)) { + $iclTranslationManagement->settings['custom_fields_translation'][$custom_field] = $action; + $iclTranslationManagement->save_settings(); + return true; + } else { + return false; + } + } + return false; +} + +/** + * wpml_get_copied_fields_for_post_edit + * + * return a list of fields that are marked for copying and the + * original post id that the fields should be copied from + * + * This should be used to popupate any custom field controls when + * a new translation is selected and the field is marked as "copy" (sync) + * + * @param array fields + */ + +function wpml_get_copied_fields_for_post_edit( $fields = array() ) { + global $sitepress, $wpdb, $sitepress_settings, $pagenow; + + $copied_cf = array('fields' => array()); + $translations = null; + + if (defined('WPML_TM_VERSION')) { + + if(($pagenow == 'post-new.php' || $pagenow == 'post.php')) { + if (isset($_GET['trid'])){ + $post_type = isset($_GET['post_type'])?$_GET['post_type']:'post'; + + $translations = $sitepress->get_element_translations($_GET['trid'], 'post_' . $post_type); + + $source_lang = isset($_GET['source_lang'])?$_GET['source_lang']:$sitepress->get_default_language(); + $lang_details = $sitepress->get_language_details($source_lang); + } else if (isset($_GET['post'])) { + $post_id = @intval($_GET['post']); + $post_type = $wpdb->get_var("SELECT post_type FROM {$wpdb->posts} WHERE ID='{$post_id}'"); + $trid = $sitepress->get_element_trid($post_id, 'post_' . $post_type); + $original_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE source_language_code IS NULL AND trid=%d", $trid)); + if ($original_id != $post_id) { + // Only return information if this is not the source language post. + $translations = $sitepress->get_element_translations($trid, 'post_' . $post_type); + $source_lang = $wpdb->get_var($wpdb->prepare("SELECT language_code FROM {$wpdb->prefix}icl_translations WHERE source_language_code IS NULL AND trid=%d", $trid)); + $lang_details = $sitepress->get_language_details($source_lang); + } + } + + if ($translations) { + $original_custom = get_post_custom($translations[$source_lang]->element_id); + + $copied_cf['original_post_id'] = $translations[$source_lang]->element_id; + $ccf_note = 'Notice'; + $copied_cf['copy_message'] = $ccf_note . sprintf(__('WPML will copy this field from %s when you save this post.', 'sitepress'), $lang_details['display_name']); + + foreach((array)$sitepress_settings['translation-management']['custom_fields_translation'] as $key=>$sync_opt){ + /* + * Added parameter $fields so except checking if field exist in DB, + * it can be checked if set in pre-defined fields. + * Noticed when testing checkbox field that does not save + * value to DB if not checked (omitted from list of copied fields). + * https://icanlocalize.basecamphq.com/projects/2461186-wpml/todo_items/169933388/comments + */ + if( $sync_opt == 1 + && ( isset($original_custom[$key]) || in_array( $key, $fields ) ) + ){ + $copied_cf['fields'][] = $key; + } + } + } + } + } + + return $copied_cf; + +} + +function wpml_get_language_information($post_id = null){ + global $sitepress; + + if(is_null($post_id)){ + $post_id = get_the_ID(); + } + if(empty($post_id)) return new WP_Error('missing_id', __('Missing post ID', 'sitepress')); + + $post = get_post($post_id); + if(empty($post)) return new WP_Error('missing_post', sprintf(__('No such post for ID = %d', 'sitepress'), $post_id)); + + + $language = $sitepress->get_language_for_element($post_id, 'post_' . $post->post_type); + $language_information = $sitepress->get_language_details($language); + + $info = array( + 'locale' => $sitepress->get_locale($language), + 'text_direction' => $sitepress->is_rtl($language), + 'display_name' => $sitepress->get_display_language_name($language, $sitepress->get_current_language()), + 'native_name' => $language_information['display_name'], + 'different_language' => $language != $sitepress->get_current_language() + + ); + + return $info; + +} + + +function wpml_custom_post_translation_options($type_id){ + global $sitepress, $sitepress_settings; + + $out = '
              ' . __('Translation', + 'sitepress') . '
              '; + + $type = get_post_type_object($type_id); + + $translated = $sitepress->is_translated_post_type($type_id); + if(defined('WPML_TM_VERSION')){ + $link = admin_url('admin.php?page=' . WPML_TM_FOLDER . '/menu/main.php&sm=mcsetup#icl_custom_posts_sync_options'); + $link2 = admin_url('admin.php?page=' . WPML_TM_FOLDER . '/menu/main.php&sm=mcsetup#icl_slug_translation'); + + }else{ + $link = admin_url('admin.php?page=' . ICL_PLUGIN_FOLDER . '/menu/translation-options.php#icl_custom_posts_sync_options'); + $link2 = admin_url('admin.php?page=' . ICL_PLUGIN_FOLDER . '/menu/translation-options.php#icl_slug_translation'); + } + + if($translated){ + + $out .= sprintf(__('%s is translated via WPML. %sClick here to change translation options.%s', 'sitepress'), + '' . $type->labels->singular_name . '', '', ''); + + if($type->rewrite['enabled']){ + + if($sitepress_settings['posts_slug_translation']['on']){ + if(empty($sitepress_settings['posts_slug_translation']['types'][$type_id])){ + $out .= '
              • ' . __('Slugs are currently not translated.', 'sitepress') . '
              '; + }else{ + $out .= '
              • ' . __('Slugs are currently translated. Click the link above to edit the translations.', 'sitepress') . '
              '; + } + }else{ + $out .= '
              • ' . sprintf(__('Slug translation is currently disabled in WPML. %sClick here to enable.%s', 'sitepress'), + '', '') . '
              '; + } + + } + + + }else{ + + $out .= sprintf(__('%s is not translated. %sClick here to make this post type translatable.%s', 'sitepress'), + '' . $type->labels->singular_name . '', '', ''); + + } + + $out .= '
              '; + + return $out; + +} \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/tools/gen-languages.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/tools/gen-languages.php new file mode 100644 index 0000000..75702de --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/tools/gen-languages.php @@ -0,0 +1,31 @@ +$v){ + if($k < 3) continue; + $lang_idxs[] = $v; + } + }else{ + foreach($data as $k=>$v){ + if($k < 2) continue; + if($k == 2){ + $langs_names[$lang_idxs[$idx-1]]['major'] = intval($v); + continue; + } + $langs_names[$lang_idxs[$idx-1]]['tr'][$lang_idxs[$k-3]] = $v; + } + } + $idx++; +} + +$fh = fopen(ICL_PLUGIN_PATH . '/res/languages.csv.php','w') or die('Can\'t open file'); +fwrite($fh,''); +?> \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/tools/sunrise.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/tools/sunrise.php new file mode 100644 index 0000000..0698bac --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/tools/sunrise.php @@ -0,0 +1,53 @@ +blogs} WHERE domain = '(.*)'#", $q, $matches)){ + + if(!$wpdb->get_row($q)){ + $icl_blogs = $wpdb->get_col("SELECT blog_id FROM {$wpdb->blogs}"); + foreach($icl_blogs as $blog_id){ + $prefix = $blog_id > 1 ? $table_prefix . $blog_id . '_' : $table_prefix; + $icl_settings = $wpdb->get_var("SELECT option_value FROM {$prefix}options WHERE option_name='icl_sitepress_settings'"); + if($icl_settings){ + $icl_settings = unserialize($icl_settings); + if($icl_settings && $icl_settings['language_negotiation_type'] == 2){ + if(in_array('http://' . $matches[1], $icl_settings['language_domains'])){ + $found_blog_id = $blog_id; + break; + } + } + } + } + + if($found_blog_id){ + $q = "SELECT * FROM {$wpdb->blogs} WHERE blog_id = '" . $found_blog_id ."'"; + } + } + + } + + $no_recursion = false; + + } + + + return $q; + } + // WPML Sunrise Script - END + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/translation-management/pro-translation.class.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/translation-management/pro-translation.class.php new file mode 100644 index 0000000..55c05ba --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/translation-management/pro-translation.class.php @@ -0,0 +1,2154 @@ +tmg =& $iclTranslationManagement; + + add_filter('xmlrpc_methods',array($this, 'custom_xmlrpc_methods')); + add_action('post_submitbox_start', array($this, 'post_submitbox_start')); + + add_action('icl_ajx_custom_call', array($this, 'ajax_calls'), 10, 2); + + add_action('icl_hourly_translation_pickup', array($this, 'poll_for_translations')); + + } + + function ajax_calls($call, $data){ + global $sitepress_settings, $sitepress; + switch($call){ + case 'set_pickup_mode': + $method = intval($data['icl_translation_pickup_method']); + $iclsettings['translation_pickup_method'] = $method; + $iclsettings['icl_disable_reminders'] = isset($_POST['icl_disable_reminders']) ? 1 : 0; + $iclsettings['icl_notify_complete'] = isset($_POST['icl_notify_complete']) ? 1 : 0; + + $sitepress->save_settings($iclsettings); + + if(!empty($sitepress_settings) && !empty($sitepress_settings['site_id']) && !empty($sitepress_settings['access_key'])){ + $data['site_id'] = $sitepress_settings['site_id']; + $data['accesskey'] = $sitepress_settings['access_key']; + $data['create_account'] = 0; + $data['pickup_type'] = $method; + $data['notifications'] = $iclsettings['icl_notify_complete']; + + $icl_query = new ICanLocalizeQuery(); + $res = $icl_query->updateAccount($data); + } + + if($method == ICL_PRO_TRANSLATION_PICKUP_XMLRPC){ + wp_clear_scheduled_hook('icl_hourly_translation_pickup'); + }else{ + wp_schedule_event(time(), 'hourly', 'icl_hourly_translation_pickup'); + } + + echo json_encode(array('message'=>'OK')); + break; + case 'pickup_translations': + if($sitepress_settings['translation_pickup_method']==ICL_PRO_TRANSLATION_PICKUP_POLLING){ + $fetched = $this->poll_for_translations(true); + echo json_encode(array('message'=>'OK', 'fetched'=> urlencode(' ' . sprintf(__('Fetched %d translations.', 'sitepress'), $fetched)))); + }else{ + echo json_encode(array('error'=>__('Manual pick up is disabled.', 'sitepress'))); + } + break; + } + } + + function send_post($post, $target_languages, $translator_id = 0){ + global $sitepress, $sitepress_settings, $wpdb, $iclTranslationManagement; + + // don't wait for init + if(empty($this->tmg->settings)){ + $iclTranslationManagement->init(); + } + + if(is_numeric($post)){ + $post = get_post($post); + } + $post_id = $post->ID; + + $err = false; + + if(!$post){ + return false; + } + + $orig_lang = $sitepress->get_language_for_element($post_id, 'post_' . $post->post_type); + $__ld = $sitepress->get_language_details($orig_lang); + $orig_lang_for_server = $this->server_languages_map($__ld['english_name']); + + if(empty($target_languages)) return false; + + // Make sure the previous request is complete. + // Only send if it needs update + foreach($target_languages as $target_lang){ + + if($target_lang == $orig_lang) continue; + + $translation = $this->tmg->get_element_translation($post_id, $target_lang, 'post_' . $post->post_type); + + if(empty($translation)){ // translated the first time + $tdata = array( + 'translate_from' => array($orig_lang), + 'translate_to' => array($target_lang=>1), + 'post' => array($post_id), + 'translator' => $translator_id, + 'service' => 'icanlocalize' + ); + $this->tmg->send_jobs($tdata); + $translation = $this->tmg->get_element_translation($post_id, $target_lang, 'post_' . $post->post_type); + } + + if($translation->needs_update || $translation->status == ICL_TM_NOT_TRANSLATED || $translation->status == ICL_TM_WAITING_FOR_TRANSLATOR){ + + $iclq = new ICanLocalizeQuery($sitepress_settings['site_id'], $sitepress_settings['access_key']); + if($post->post_type=='page'){ + $post_url = get_option('home') . '?page_id=' . ($post_id); + }else{ + $post_url = get_option('home') . '?p=' . ($post_id); + } + + $__ld = $sitepress->get_language_details($target_lang); + $target_for_server = $this->server_languages_map($__ld['english_name']); + + if (isset($post->external_type) && $post->external_type) { + + $data['url'] = htmlentities($post_url); + $data['target_languages'] = array($target_for_server); + + foreach ($post->string_data as $key => $value) { + $data['contents'][$key] = array( + 'translate' => 1, + 'data' => base64_encode($value), + 'format' => 'base64' + ); + } + + $data['contents']['original_id'] = array( + 'translate' => 0, + 'data' => $post->post_id, + ); + } else { + + // TAGS + // *************************************************************************** + foreach(wp_get_object_terms($post_id, 'post_tag') as $tag){ + $post_tags[$tag->term_taxonomy_id] = $tag->name; + } + + if(@is_array($post_tags)){ + //only send tags that don't have a translation + foreach($post_tags as $term_taxonomy_id=>$pc){ + $trid = $wpdb->get_var("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_id='{$term_taxonomy_id}' AND element_type='tax_post_tag'"); + foreach($target_languages as $lang){ + $not_translated = false; + if($trid != $wpdb->get_var("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE language_code='{$lang}' AND trid='{$trid}' AND element_id IS NOT NULL")){ + $not_translated = true; + break; + } + } + if($not_translated){ + $tags_to_translate[$term_taxonomy_id] = $pc; + } + } + sort($post_tags, SORT_STRING); + } + + // CATEGORIES + // *************************************************************************** + foreach(wp_get_object_terms($post_id, 'category') as $cat){ + $post_categories[$cat->term_taxonomy_id] = $cat->name; + } + + if(@is_array($post_categories)){ + //only send categories that don't have a translation + foreach($post_categories as $term_taxonomy_id=>$pc){ + $trid = $wpdb->get_var("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_id='{$term_taxonomy_id}' AND element_type='tax_category'"); + foreach($target_languages as $lang){ + $not_translated = false; + if($trid != $wpdb->get_var("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE language_code='{$lang}' AND trid='{$trid}' AND element_id IS NOT NULL")){ + $not_translated = true; + break; + } + } + if($not_translated){ + $categories_to_translate[$term_taxonomy_id] = $pc; + } + } + sort($post_categories, SORT_STRING); + } + + // CUSTOM TAXONOMIES + // *************************************************************************** + $taxonomies = $wpdb->get_col(" + SELECT DISTINCT tx.taxonomy + FROM {$wpdb->term_taxonomy} tx JOIN {$wpdb->term_relationships} tr ON tx.term_taxonomy_id = tr.term_taxonomy_id + WHERE tr.object_id = {$post_id} + "); + foreach($taxonomies as $t){ + if(@intval($sitepress_settings['taxonomies_sync_option'][$t]) == 1){ + $object_terms = $wpdb->get_results(" + SELECT x.term_taxonomy_id, t.name + FROM {$wpdb->terms} t + JOIN {$wpdb->term_taxonomy} x ON t.term_id=x.term_id + JOIN {$wpdb->term_relationships} r ON x.term_taxonomy_id = r.term_taxonomy_id + WHERE x.taxonomy = '{$t}' AND r.object_id = $post_id + "); + foreach($object_terms as $trm){ + $trid = $wpdb->get_var("SELECT trid FROM {$wpdb->prefix}icl_translations + WHERE element_id='{$trm->term_taxonomy_id}' AND element_type='tax_{$t}'"); + foreach($target_languages as $lang){ + $not_translated = false; + if($trid != $wpdb->get_var(" + SELECT trid FROM {$wpdb->prefix}icl_translations WHERE l.english_name='{$lang}' AND trid='{$trid}' AND element_id IS NOT NULL + ")){ + $not_translated = true; + break; + } + } + if($not_translated){ + $taxonomies_to_translate[$t][$trm->term_taxonomy_id] = $trm->name; + } + } + } + } + + + $data['url'] = htmlentities($post_url); + $data['contents']['title'] = array( + 'translate'=>1, + 'data'=>base64_encode(icl_strip_control_chars($post->post_title)), + 'format'=>'base64' + ); + if($sitepress_settings['translated_document_page_url'] == 'translate'){ + $data['contents']['URL'] = array( + 'translate'=>1, + 'data'=>base64_encode($post->post_name), + 'format'=>'base64' + ); + } + + if(!empty($post->post_excerpt)) + $data['contents']['excerpt'] = array( + 'translate'=>1, + 'data'=>base64_encode(icl_strip_control_chars($post->post_excerpt)), + 'format'=>'base64' + ); + $data['contents']['body'] = array( + 'translate'=>1, + 'data'=>base64_encode(icl_strip_control_chars($post->post_content)), + 'format'=>'base64' + ); + $data['contents']['original_id'] = array( + 'translate'=>0, + 'data'=>$post_id + ); + $data['target_languages'] = array($target_for_server); + + $custom_fields = array(); + foreach((array)$iclTranslationManagement->settings['custom_fields_translation'] as $cf => $op){ + if ($op == 2) { + $custom_fields[] = $cf; + } + } + + foreach($custom_fields as $cf){ + $custom_fields_value = get_post_meta($post_id, $cf, true); + if ($custom_fields_value != '') { + $data['contents']['field-'.$cf] = array( + 'translate' => 1, + 'data' => base64_encode($custom_fields_value), + 'format' => 'base64', + ); + $data['contents']['field-'.$cf.'-name'] = array( + 'translate' => 0, + 'data' => $cf, + ); + $data['contents']['field-'.$cf.'-type'] = array( + 'translate' => 0, + 'data' => 'custom_field', + ); + } + } + + + if(@is_array($categories_to_translate)){ + $data['contents']['categories'] = array( + 'translate'=>1, + 'data'=> implode(',', array_map(create_function('$e', 'return \'"\'.base64_encode($e).\'"\';'), $categories_to_translate)), + 'format'=>'csv_base64' + ); + $data['contents']['category_ids'] = array( + 'translate'=>0, + 'data'=> implode(',', array_keys($categories_to_translate)), + 'format'=>'' + ); + } + + if(@is_array($tags_to_translate)){ + $data['contents']['tags'] = array( + 'translate'=>1, + 'data'=> implode(',', array_map(create_function('$e', 'return \'"\'.base64_encode($e).\'"\';'), $tags_to_translate)), + 'format'=>'csv_base64' + ); + $data['contents']['tag_ids'] = array( + 'translate'=>0, + 'data'=> implode(',', array_keys($tags_to_translate)), + 'format'=>'' + ); + } + + if(@is_array($taxonomies_to_translate)){ + foreach($taxonomies_to_translate as $k=>$v){ + $data['contents'][$k] = array( + 'translate'=>1, + 'data'=> implode(',', array_map(create_function('$e', 'return \'"\'.base64_encode($e).\'"\';'), $v)), + 'format'=>'csv_base64' + ); + $data['contents'][$k.'_ids'] = array( + 'translate'=>0, + 'data'=> implode(',', array_keys($v)), + 'format'=>'' + ); + } + } + + if($post->post_status=='publish'){ + $permlink = $post_url; + }else{ + $permlink = false; + } + + $note = get_post_meta($post_id, '_icl_translator_note', true); + + // if this is an old request having a old request_id, include that + if($wpdb->prefix.'icl_content_status' == $wpdb->get_var("SHOW TABLES LIKE '{$wpdb->prefix}icl_content_status'")){ + $prev_rid = $wpdb->get_var($wpdb->prepare("SELECT MAX(rid) FROM {$wpdb->prefix}icl_content_status WHERE nid=%d", $post_id)); + if(!empty($prev_rid)){ + $data['previous_cms_request_id'] = $prev_rid; + } + } + } + + $data = apply_filters('icl_data_for_pro_translation', $data); + + $xml = $iclq->build_cms_request_xml($data, $orig_lang_for_server); + $cms_id = sprintf('%s_%d_%s_%s', $post->post_type, $post->ID, $orig_lang, $target_lang); + $args = array( + 'cms_id' => $cms_id, + 'xml' => $xml, + 'title' => $post->post_title, + 'to_languages' => array($target_for_server), + 'orig_language' => $orig_lang_for_server, + 'permlink' => isset($permlink) ? $permlink : false, + 'translator_id' => $translator_id, + 'note' => isset($note) ? $note : '', + ); + + $res = $iclq->send_request($args); + if($res > 0){ + $this->tmg->update_translation_status(array( + 'translation_id'=>$translation->translation_id, + 'status' => ICL_TM_IN_PROGRESS, + 'needs_update' => 0 + )); + }else{ + $_prevstate = $wpdb->get_var($wpdb->prepare("SELECT _prevstate FROM {$wpdb->prefix}icl_translation_status WHERE translation_id=%d", $translation->translation_id)); + if(!empty($_prevstate)){ + $_prevstate = unserialize($_prevstate); + $wpdb->update($wpdb->prefix . 'icl_translation_status', + array( + 'status' => $_prevstate['status'], + 'translator_id' => $_prevstate['translator_id'], + 'status' => $_prevstate['status'], + 'needs_update' => $_prevstate['needs_update'], + 'md5' => $_prevstate['md5'], + 'translation_service' => $_prevstate['translation_service'], + 'translation_package' => $_prevstate['translation_package'], + 'timestamp' => $_prevstate['timestamp'], + 'links_fixed' => $_prevstate['links_fixed'] + ), + array('translation_id'=>$translation->translation_id) + ); + }else{ + $wpdb->update($wpdb->prefix . 'icl_translation_status', + array('status'=>ICL_TM_NOT_TRANSLATED, 'needs_update'=>0), array('translation_id'=>$translation->translation_id)); + } + $err = true; + } + } // if needs translation + } // foreach target lang + return $err ? false : $res; //last $ret + } + + public static function server_languages_map($language_name, $server2plugin = false){ + if(is_array($language_name)){ + return array_map(array(__CLASS__, 'icl_server_languages_map'), $language_name); + } + $map = array( + 'Norwegian Bokmål' => 'Norwegian', + 'Portuguese, Brazil' => 'Portuguese', + 'Portuguese, Portugal' => 'Portugal Portuguese' + ); + if($server2plugin){ + $map = array_flip($map); + } + if(isset($map[$language_name])){ + return $map[$language_name]; + }else{ + return $language_name; + } + } + + function custom_xmlrpc_methods($methods){ + + $icl_methods['icanlocalize.update_status_by_cms_id'] = array($this, 'get_translated_document'); + + // for migration to 2.0.0 + $icl_methods['icanlocalize.set_translation_status'] = array($this,'_legacy_set_translation_status'); + + //$icl_methods['icanlocalize.set_translation_status'] = array($this,'get_translated_string'); // use for strings - old method + + //$icl_methods['icanlocalize.list_posts'] = array($this, '_list_posts'); + //$icl_methods['icanlocalize.translate_post'] = array($this, '_remote_control_translate_post'); + + $icl_methods['icanlocalize.test_xmlrpc'] = array($this, '_test_xmlrpc'); + $icl_methods['icanlocalize.cancel_translation_by_cms_id'] = array($this, '_xmlrpc_cancel_translation'); + + // for migration to 2.0.0 + $icl_methods['icanlocalize.cancel_translation'] = array($this, '_legacy_xmlrpc_cancel_translation'); + + $icl_methods['icanlocalize.notify_comment_translation'] = array($this, '_xmlrpc_add_message_translation'); + + + $methods = $methods + $icl_methods; + if(defined('XMLRPC_REQUEST') && XMLRPC_REQUEST){ + if (preg_match('#([^<]+)#i', $GLOBALS['HTTP_RAW_POST_DATA'], $matches)) { + $method = $matches[1]; + if(in_array($method, array_keys($icl_methods))){ + //error_reporting(E_NONE); + //ini_set('display_errors', '0'); + $old_error_handler = set_error_handler(array($this, "_translation_error_handler"),E_ERROR|E_USER_ERROR); + } + } + } + return $methods; + + } + + function _legacy_set_translation_status($args){ + global $sitepress_settings, $sitepress, $wpdb; + try{ + + $signature = $args[0]; + $site_id = $args[1]; + $request_id = $args[2]; + $original_language = $args[3]; + $language = $args[4]; + $status = $args[5]; + $message = $args[6]; + + if ($site_id != $sitepress_settings['site_id']) { + return 3; + } + + //check signature + $signature_chk = sha1($sitepress_settings['access_key'].$sitepress_settings['site_id'].$request_id.$language.$status.$message); + if($signature_chk != $signature){ + return 2; + } + + $lang_code = $sitepress->get_language_code($this->server_languages_map($language, true));//the 'reverse' language filter + $cms_request_info = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}icl_core_status WHERE rid={$request_id} AND target='{$lang_code}'"); + + if (empty($cms_request_info)){ + $this->_throw_exception_for_mysql_errors(); + return 4; + } + + if ($this->_legacy_process_translated_document($request_id, $language, $args)){ + $this->_throw_exception_for_mysql_errors(); + return 1; + } else { + $this->_throw_exception_for_mysql_errors(); + return 6; + } + + }catch(Exception $e) { + return $e->getMessage(); + } + + } + + function _legacy_process_translated_document($request_id, $language, $args){ + + global $sitepress_settings, $wpdb, $sitepress, $iclTranslationManagement; + $ret = false; + $iclq = new ICanLocalizeQuery($sitepress_settings['site_id'], $sitepress_settings['access_key']); + $post_type = $wpdb->get_var($wpdb->prepare("SELECT p.post_type FROM {$wpdb->posts} p JOIN {$wpdb->prefix}icl_content_status c ON p.ID = c.nid WHERE c.rid=%d", $request_id)); + $trid = $wpdb->get_var($wpdb->prepare(" + SELECT trid + FROM {$wpdb->prefix}icl_translations t + JOIN {$wpdb->prefix}icl_content_status c ON t.element_id = c.nid AND t.element_type='post_{$post_type}' AND c.rid=%d",$request_id)); + $translation = $iclq->cms_do_download($request_id, $language); + + if($translation){ + if (icl_is_string_translation($translation)){ + $ret = $this->get_translated_string($args); + } else { + // we need to create a cms_id for this + list($lang_from, $lang_to) = $wpdb->get_row($wpdb->prepare(" + SELECT origin, target FROM {$wpdb->prefix}icl_core_status WHERE rid=%d ORDER BY id DESC LIMIT 1 + ", $request_id), ARRAY_N); + $translation_id = $wpdb->get_var($wpdb->prepare(" + SELECT translation_id FROM {$wpdb->prefix}icl_translations WHERE trid=%d and language_code='%s' + ", $trid, $lang_to)); + + if(!$translation_id){ + $wpdb->insert($wpdb->prefix.'icl_translations', array( + 'element_type' => 'post_' . $post_type, + 'trid' => $trid, + 'language_code' => $lang_to, + 'source_language_code' => $lang_from + )); + $translation_id = $wpdb->insert_id; + } + + $original_post_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND source_language_code IS NULL", $trid)); + + $translation_package = $iclTranslationManagement->create_translation_package($original_post_id); + $md5 = $iclTranslationManagement->post_md5($original_post_id); + + + $translator_id = $wpdb->get_var($wpdb->prepare("SELECT post_author FROM {$wpdb->posts} WHERE ID=%d", $original_post_id)); + // add translation_status record + + list($rid, $update) = $iclTranslationManagement->update_translation_status(array( + 'translation_id' => $translation_id, + 'status' => 2, + 'translator_id' => $translator_id, + 'needs_update' => 0, + 'md5' => $md5, + 'translation_service' => 'icanlocalize', + 'translation_package' => serialize($translation_package) + )); + $job_ids[] = $iclTranslationManagement->add_translation_job($rid, $translator_id, $translation_package); + + + $ret = $this->add_translated_document($translation_id, $request_id); + + } + if($ret){ + $iclq->cms_update_request_status($request_id, CMS_TARGET_LANGUAGE_DONE, $language); + } + + } + return $ret; + } + + /* + * 0 - unknown error + * 1 - success + * 2 - signature mismatch + * 3 - website_id incorrect + * 4 - cms_id not found + * 5 - icl translation not enabled + * 6 - unknown error processing translation + */ + function get_translated_document($args){ + global $sitepress_settings, $sitepress, $wpdb; + try{ + + $signature = $args[0]; + $site_id = $args[1]; + $request_id = $args[2]; + $cms_id = $args[3]; + $status = $args[4]; + $message = $args[5]; + + + if ($site_id != $sitepress_settings['site_id']) { + return 3; + } + + //check signature + $signature_chk = sha1($sitepress_settings['access_key'].$sitepress_settings['site_id'].$cms_id.$status.$message); + if($signature_chk != $signature){ + return 2; + } + + // decode cms_id + $int = preg_match('#(.+)_([0-9]+)_([^_]+)_([^_]+)#', $cms_id, $matches); + + $_element_type = $matches[1]; + $_element_id = $matches[2]; + $_original_lang = $matches[3]; + $_lang = $matches[4]; + + $trid = $sitepress->get_element_trid($_element_id, 'post_'. $_element_type); + if(!$trid){ + return 4; + } + + $translation = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND language_code=%s", $trid, $_lang)); + + if (empty($translation)){ // if the translation was deleted re-create it + + $wpdb->insert($wpdb->prefix.'icl_translations', array( + 'element_type' => 'post_' . $_element_type, + 'trid' => $trid, + 'language_code' => $_lang, + 'source_language_code' => $_original_lang + )); + + $translation_id = $wpdb->insert_id; + + $md5 = $this->tmg->post_md5($_element_id); + + $translation_package = $this->tmg->create_translation_package($_element_id); + + $translator_id = 0; //TO FIX! + list($rid, $update) = $this->tmg->update_translation_status(array( + 'translation_id' => $translation_id, + 'status' => ICL_TM_IN_PROGRESS, + 'translator_id' => $translator_id, + 'needs_update' => 0, + 'md5' => $md5, + 'translation_service' => 'icanlocalize', + 'translation_package' => serialize($translation_package) + )); + $this->tmg->add_translation_job($rid, $translator_id, $translation_package); + + }else{ + + $translation_id = $translation->translation_id; + + // if the post is trashed set the element_id to null + if('trash' == $wpdb->get_var($wpdb->prepare("SELECT post_status FROM {$wpdb->posts} WHERE ID=%d", $translation->element_id))){ + $wpdb->query("UPDATE {$wpdb->prefix}icl_translations SET element_id = NULL WHERE translation_id={$translation->translation_id}"); + } + + } + + if ($this->add_translated_document($translation_id, $request_id) === true){ + $this->_throw_exception_for_mysql_errors(); + return 1; + } else { + $this->_throw_exception_for_mysql_errors(); + return 6; + } + + }catch(Exception $e) { + return $e->getMessage(); + } + } + + function add_translated_document($translation_id, $request_id){ + global $sitepress_settings, $wpdb, $sitepress; + + $iclq = new ICanLocalizeQuery($sitepress_settings['site_id'], $sitepress_settings['access_key']); + $tinfo = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translations WHERE translation_id=%d", $translation_id)); + $_lang = $sitepress->get_language_details($tinfo->language_code); + $translation = $iclq->cms_do_download($request_id, $this->server_languages_map($_lang['english_name'])); + + $translation = apply_filters('icl_data_from_pro_translation', $translation); + + $ret = false; + + if(!empty($translation)){ + $language_code = $wpdb->get_var($wpdb->prepare(" + SELECT language_code FROM {$wpdb->prefix}icl_translations WHERE translation_id=%d", $translation_id + )); + $parts = explode('_', $translation['original_id']); + if ($parts[0] == 'external') { + + // Translations are saved in the string table for 'external' types + + $id = array_pop($parts); + unset($parts[0]); + $type = implode('_', $parts); + + unset($translation['original_id']); + foreach($translation as $field => $value){ + if (function_exists('icl_st_is_registered_string')) { + $value = str_replace('�A;', "\n", $value); + $string_id = icl_st_is_registered_string($type, $id . '_' . $field); + if (!$string_id) { + icl_register_string($type, $id . '_' . $field, $value); + $string_id = icl_st_is_registered_string($type, $id . '_' . $field); + } + if ($string_id) { + icl_add_string_translation($string_id, $language_code, $value, ICL_STRING_TRANSLATION_COMPLETE); + } + } + } + $ret = true; + } else { + $ret = $this->save_post_translation($translation_id, $translation); + } + + if($ret){ + $lang_details = $sitepress->get_language_details($language_code); + $language_server = $this->server_languages_map($lang_details['english_name']); + $iclq->cms_update_request_status($request_id, CMS_TARGET_LANGUAGE_DONE, $language_server); + + $translations = $sitepress->get_element_translations($tinfo->trid, $tinfo->element_type); + + if(isset($translations[$tinfo->language_code])){ + $iclq->report_back_permalink($request_id, $language_server, $translations[$tinfo->language_code]); + } + + } + } + + return $ret; + } + + function save_post_translation($translation_id, $translation){ + global $wpdb, $sitepress_settings, $sitepress, $wp_taxonomies, $icl_adjust_id_url_filter_off; + $icl_adjust_id_url_filter_off = true; + + $taxonomies = array_diff(array_keys((array)$wp_taxonomies), array('post_tag','category')); + + $tinfo = $wpdb->get_row($wpdb->prepare(" + SELECT * FROM {$wpdb->prefix}icl_translations tr + JOIN {$wpdb->prefix}icl_translation_status ts ON ts.translation_id = tr.translation_id + WHERE tr.translation_id=%d", $translation_id)); + $lang_code = $tinfo->language_code; + $trid = $tinfo->trid; + + $original_post_details = $wpdb->get_row(" + SELECT p.post_author, p.post_type, p.post_status, p.comment_status, p.ping_status, p.post_parent, p.menu_order, p.post_date, t.language_code + FROM {$wpdb->prefix}icl_translations t + JOIN {$wpdb->posts} p ON t.element_id = p.ID AND CONCAT('post_',p.post_type) = t.element_type + WHERE trid='{$trid}' AND p.ID = '{$translation['original_id']}' + "); + + //is the original post a sticky post? + remove_filter('option_sticky_posts', array($sitepress,'option_sticky_posts')); // remove filter used to get language relevant stickies. get them all + $sticky_posts = get_option('sticky_posts'); + $is_original_sticky = $original_post_details->post_type=='post' && in_array($translation['original_id'], $sticky_posts); + + + $this->_content_fix_image_paths_in_body($translation); + $this->_content_fix_relative_link_paths_in_body($translation); + $this->_content_decode_shortcodes($translation); + + + // deal with tags + if(isset($translation['tags'])){ + $translated_tags = $translation['tags']; + $translated_tag_ids = explode(',', $translation['tag_ids']); + foreach($translated_tags as $k=>$v){ + $tag_trid = $wpdb->get_var("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_id='{$translated_tag_ids[$k]}' AND element_type='tax_post_tag'"); + + // before adding the new term make sure that another tag with the same name doesn't exist. If it does append @lang + // same term name exists in a different language? + $term_different_language = $wpdb->get_var(" + SELECT tm.term_id + FROM {$wpdb->term_taxonomy} tx + JOIN {$wpdb->terms} tm ON tx.term_id = tm.term_id + JOIN {$wpdb->prefix}icl_translations tr ON tx.term_taxonomy_id = tr.element_id + WHERE tm.name='".esc_sql($v)."' AND tr.element_type LIKE 'tax\\_%' AND tr.language_code <> '{$lang_code}' + "); + if($term_different_language){ + $v .= ' @'.$lang_code; + } + + //tag exists? (in the current language) + $etag = get_term_by('name', htmlspecialchars($v), 'post_tag'); + if(!$etag){ + $etag = get_term_by('name', htmlspecialchars($v) . ' @'.$lang_code, 'post_tag'); + } + if(!$etag){ + $tmp = wp_insert_term($v, 'post_tag'); + if(!is_wp_error($tmp) && isset($tmp['term_taxonomy_id'])){ + $wpdb->update($wpdb->prefix.'icl_translations', + array('language_code'=>$lang_code, 'trid'=>$tag_trid, 'source_language_code'=>$original_post_details->language_code), + array('element_type'=>'tax_post_tag','element_id'=>$tmp['term_taxonomy_id'])); + } + }else{ + $term_taxonomy_id = $etag->term_taxonomy_id; + // check whether we have an orphan translation - the same trid and language but a different element id + $__translation_id = $wpdb->get_var(" + SELECT translation_id FROM {$wpdb->prefix}icl_translations + WHERE trid = '{$tag_trid}' + AND language_code = '{$lang_code}' + AND element_id <> '{$term_taxonomy_id}' + "); + if($__translation_id){ + $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id={$__translation_id}"); + } + + $tag_translation_id = $wpdb->get_var("SELECT translation_id FROM {$wpdb->prefix}icl_translations WHERE element_id={$term_taxonomy_id} AND element_type='tax_post_tag'"); + if($tag_translation_id){ + $wpdb->update($wpdb->prefix.'icl_translations', + array('language_code'=>$lang_code, 'trid'=>$tag_trid, 'source_language_code'=>$original_post_details->language_code), + array('element_type'=>'tax_post_tag','translation_id'=>$tag_translation_id)); + }else{ + $wpdb->insert($wpdb->prefix.'icl_translations', + array('language_code'=>$lang_code, 'trid'=>$tag_trid, 'element_type'=>'tax_post_tag', 'element_id'=>$term_taxonomy_id, 'source_language_code'=>$original_post_details->language_code)); + } + } + } + } + + $original_post_tags = array(); + foreach(wp_get_object_terms($translation['original_id'] , 'post_tag') as $t){ + $original_post_tags[] = $t->term_taxonomy_id; + } + if($original_post_tags){ + $tag_trids = $wpdb->get_col("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_post_tag' AND element_id IN (".join(',',$original_post_tags).")"); + if(!empty($tag_trids)) + $tag_tr_tts = $wpdb->get_col("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_post_tag' AND language_code='{$lang_code}' AND trid IN (".join(',',$tag_trids).")"); + if(!empty($tag_tr_tts)) + $translated_tags = $wpdb->get_col("SELECT t.name FROM {$wpdb->terms} t JOIN {$wpdb->term_taxonomy} tx ON tx.term_id = t.term_id WHERE tx.taxonomy='post_tag' AND tx.term_taxonomy_id IN (".join(',',$tag_tr_tts).")"); + } + + // deal with categories + if(isset($translation['categories'])){ + $translated_cats = $translation['categories']; + $translated_cats_ids = explode(',', $translation['category_ids']); + foreach($translated_cats as $k=>$v){ + //$v = trim(str_replace('

              ', '', $v)); + $cat_trid = $wpdb->get_var("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_id='{$translated_cats_ids[$k]}' AND element_type='tax_category'"); + + // before adding the new term make sure that another tag with the same name doesn't exist. If it does append @lang + // same term name exists in a different language? + $term_different_language = $wpdb->get_var(" + SELECT tm.term_id + FROM {$wpdb->term_taxonomy} tx + JOIN {$wpdb->terms} tm ON tx.term_id = tm.term_id + JOIN {$wpdb->prefix}icl_translations tr ON tx.term_taxonomy_id = tr.element_id + WHERE tm.name='".esc_sql($v)."' AND tr.element_type LIKE 'tax\\_%' AND tr.language_code <> '{$lang_code}' + "); + if($term_different_language){ + $v .= ' @'.$lang_code; + } + + //cat exists? + $ecat = get_term_by('name', htmlspecialchars($v), 'category'); + if(!$ecat){ + $ecat = get_term_by('name', htmlspecialchars($v) . ' @'.$lang_code, 'category'); + } + + if(!$ecat){ + // get original category parent id + $original_category_parent_id = $wpdb->get_var($wpdb->prepare("SELECT parent FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=%d",$translated_cats_ids[$k])); + if($original_category_parent_id){ + $_op_tax_id = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy='category' AND term_id=%d",$original_category_parent_id)); + $_op_trid = $wpdb->get_var($wpdb->prepare("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_category' AND element_id=%d",$_op_tax_id)); + // get id of the translated category parent + $_tp_tax_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE language_code='{$lang_code}' AND trid=%d",$_op_trid)); + if($_tp_tax_id){ + $category_parent_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE taxonomy='category' AND term_taxonomy_id=%d",$_tp_tax_id)); + }else{ + $category_parent_id = 0; + } + }else{ + $category_parent_id = 0; + } + $tmp = wp_insert_term($v, 'category', array('parent'=>$category_parent_id)); + if(!is_wp_error($tmp) && isset($tmp['term_taxonomy_id'])){ + $wpdb->update($wpdb->prefix.'icl_translations', + array('language_code'=>$lang_code, 'trid'=>$cat_trid, 'source_language_code'=>$original_post_details->language_code), + array('element_type'=>'tax_category','element_id'=>$tmp['term_taxonomy_id'])); + + // if this is a parent category, make sure that nesting is correct for all translations + $orig_cat_tax_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND source_language_code IS NULL", $cat_trid)); + $orig_cat_term_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=%d AND taxonomy='category'",$orig_cat_tax_id)); + $orig_cat_children = $wpdb->get_col($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE parent=%d",$orig_cat_term_id)); + if(!empty($orig_cat_children)) foreach($orig_cat_children as $ch){ + $_tr_child = icl_object_id($ch, 'category', false, $lang_code); + if($_tr_child){ + $wpdb->update($wpdb->term_taxonomy, array('parent'=>$tmp['term_id']), array( + 'taxonomy'=>'category', 'term_id' => $_tr_child + )); + } + } + delete_option('category_children'); + } + }else{ + $term_taxonomy_id = $ecat->term_taxonomy_id; + // check whether we have an orphan translation - the same trid and language but a different element id + $__translation_id = $wpdb->get_var(" + SELECT translation_id FROM {$wpdb->prefix}icl_translations + WHERE trid = '{$cat_trid}' + AND language_code = '{$lang_code}' + AND element_id <> '{$term_taxonomy_id}' + "); + if($__translation_id){ + $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id={$__translation_id}"); + } + + $cat_translation_id = $wpdb->get_var("SELECT translation_id FROM {$wpdb->prefix}icl_translations WHERE element_id={$term_taxonomy_id} AND element_type='tax_category'"); + if($cat_translation_id){ + $wpdb->update($wpdb->prefix.'icl_translations', + array('language_code'=>$lang_code, 'trid'=>$cat_trid, 'source_language_code'=>$original_post_details->language_code), + array('element_type'=>'tax_category','translation_id'=>$cat_translation_id)); + }else{ + $wpdb->insert($wpdb->prefix.'icl_translations', + array('language_code'=>$lang_code, 'trid'=>$cat_trid, 'element_type'=>'tax_category', 'element_id'=>$term_taxonomy_id, 'source_language_code'=>$original_post_details->language_code)); + } + } + } + } + $original_post_cats = array(); + foreach(wp_get_object_terms($translation['original_id'] , 'category') as $t){ + $original_post_cats[] = $t->term_taxonomy_id; + } + if($original_post_cats){ + $cat_trids = $wpdb->get_col("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_category' AND element_id IN (".join(',',$original_post_cats).")"); + if(!empty($cat_trids)) + $cat_tr_tts = $wpdb->get_col("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_category' AND language_code='{$lang_code}' AND trid IN (".join(',',$cat_trids).")"); + if(!empty($cat_tr_tts)) + $translated_cats_ids = $wpdb->get_col("SELECT t.term_id FROM {$wpdb->terms} t JOIN {$wpdb->term_taxonomy} tx ON tx.term_id = t.term_id WHERE tx.taxonomy='category' AND tx.term_taxonomy_id IN (".join(',',$cat_tr_tts).")"); + } + + + // deal with custom taxonomies + if(!empty($sitepress_settings['taxonomies_sync_option'])){ + foreach($sitepress_settings['taxonomies_sync_option'] as $taxonomy=>$value){ + if($value == 1 && isset($translation[$taxonomy])){ + $translated_taxs[$taxonomy] = $translation[$taxonomy]; + $translated_tax_ids[$taxonomy] = explode(',', $translation[$taxonomy.'_ids']); + foreach($translated_taxs[$taxonomy] as $k=>$v){ + $tax_trid = $wpdb->get_var(" + SELECT trid FROM {$wpdb->prefix}icl_translations + WHERE element_id='{$translated_tax_ids[$taxonomy][$k]}' AND element_type='tax_{$taxonomy}'"); + // before adding the new term make sure that another tag with the same name doesn't exist. If it does append @lang + // same term name exists in a different language? + $term_different_language = $wpdb->get_var(" + SELECT tm.term_id + FROM {$wpdb->term_taxonomy} tx + JOIN {$wpdb->terms} tm ON tx.term_id = tm.term_id + JOIN {$wpdb->prefix}icl_translations tr ON tx.term_taxonomy_id = tr.element_id + WHERE tm.name='".esc_sql($v)."' AND tr.element_type LIKE 'tax\\_%' AND tr.language_code <> '{$lang_code}' + "); + if($term_different_language){ + $v .= ' @'.$lang_code; + } + + //tax exists? (in the current language) + $etag = get_term_by('name', htmlspecialchars($v), $taxonomy); + if(!$etag){ + $etag = get_term_by('name', htmlspecialchars($v) . ' @'.$lang_code, $taxonomy); + } + + if(!$etag){ + + // get original category parent id + $original_t_parent_id = $wpdb->get_var($wpdb->prepare("SELECT parent FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=%d",$translated_tax_ids[$taxonomy][$k])); + if($original_t_parent_id){ + $_op_tax_id = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy='category' AND term_id=%d",$original_t_parent_id)); + $_op_trid = $wpdb->get_var($wpdb->prepare("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_category' AND element_id=%d",$_op_tax_id)); + // get id of the translated category parent + $_tp_tax_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE language_code='{$lang_code}' AND trid=%d",$_op_trid)); + if($_tp_tax_id){ + $t_parent_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE taxonomy='category' AND term_taxonomy_id=%d",$_tp_tax_id)); + }else{ + $t_parent_id = 0; + } + }else{ + $t_parent_id = 0; + } + + $tmp = wp_insert_term($v, $taxonomy); + if(!is_wp_error($tmp) && isset($tmp['term_taxonomy_id'])){ + $wpdb->update($wpdb->prefix.'icl_translations', + array('language_code'=>$lang_code, 'trid'=>$tax_trid, 'source_language_code'=>$original_post_details->language_code), + array('element_type'=>'tax_'.$taxonomy,'element_id'=>$tmp['term_taxonomy_id'])); + + + // if this is a parent category, make sure that nesting is correct for all translations + $orig_tax_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND source_language_code IS NULL", $tax_trid)); + $orig_term_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=%d AND taxonomy='{$taxonomy}'", $orig_tax_id)); + $orig_tax_children = $wpdb->get_col($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE parent=%d", $orig_term_id)); + if(!empty($orig_tax_children)) foreach($orig_tax_children as $ch){ + $_tr_child = icl_object_id($ch, $taxonomy, false, $lang_code); + if($_tr_child){ + $wpdb->update($wpdb->term_taxonomy, array('parent'=>$tmp['term_id']), array( + 'taxonomy'=>$taxonomy, 'term_id' => $_tr_child + )); + } + } + delete_option($taxonomy . '_children'); + } + }else{ + $term_taxonomy_id = $etag->term_taxonomy_id; + // check whether we have an orphan translation - the same trid and language but a different element id + $__translation_id = $wpdb->get_var(" + SELECT translation_id FROM {$wpdb->prefix}icl_translations + WHERE trid = '{$tax_trid}' + AND language_code = '{$lang_code}' + AND element_id <> '{$term_taxonomy_id}' + "); + if($__translation_id){ + $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id={$__translation_id}"); + } + + $tax_translation_id = $wpdb->get_var(" + SELECT translation_id FROM {$wpdb->prefix}icl_translations + WHERE element_id={$term_taxonomy_id} AND element_type='tax_{$taxonomy}'"); + if($tax_translation_id){ + $wpdb->update($wpdb->prefix.'icl_translations', + array('language_code'=>$lang_code, 'trid'=>$tax_trid, 'source_language_code'=>$original_post_details->language_code), + array('element_type'=>'tax_'.$taxonomy,'translation_id'=>$tax_translation_id)); + }else{ + $wpdb->insert($wpdb->prefix.'icl_translations', + array('language_code'=>$lang_code, 'trid'=>$tax_trid, 'element_type'=>'tax_'.$taxonomy, + 'element_id'=>$term_taxonomy_id, 'source_language_code'=>$original_post_details->language_code)); + } + } + } + } + + $oterms = wp_get_object_terms($translation['original_id'] , $taxonomy); + if(!is_wp_error($oterms)){ + foreach($oterms as $t){ + $original_post_taxs[$taxonomy][] = $t->term_taxonomy_id; + } + } + + if(!empty($original_post_taxs[$taxonomy])){ + $tax_trids = $wpdb->get_col("SELECT trid FROM {$wpdb->prefix}icl_translations + WHERE element_type='tax_{$taxonomy}' AND element_id IN (".join(',',$original_post_taxs[$taxonomy]).")"); + if(!empty($tax_trids)){ + $tax_tr_tts = $wpdb->get_col("SELECT element_id FROM {$wpdb->prefix}icl_translations + WHERE element_type='tax_{$taxonomy}' AND language_code='{$lang_code}' AND trid IN (".join(',',$tax_trids).")"); + } + + if(!empty($tax_tr_tts)){ + if($wp_taxonomies[$taxonomy]->hierarchical){ + $translated_tax_ids[$taxonomy] = $wpdb->get_col("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id IN (".join(',',$tax_tr_tts).")"); + }else{ + $translated_taxs[$taxonomy] = $wpdb->get_col("SELECT t.name FROM {$wpdb->terms} t + JOIN {$wpdb->term_taxonomy} tx ON tx.term_id = t.term_id + WHERE tx.taxonomy='{$taxonomy}' AND tx.term_taxonomy_id IN (".join(',',$tax_tr_tts).")"); + } + } + } + } + } + + + + // handle the page parent and set it to the translated parent if we have one. + if($original_post_details->post_parent){ + $post_parent_trid = $wpdb->get_var("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_type='post_{$original_post_details->post_type}' AND element_id='{$original_post_details->post_parent}'"); + if($post_parent_trid){ + $parent_id = $wpdb->get_var("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type='post_{$original_post_details->post_type}' AND trid='{$post_parent_trid}' AND language_code='{$lang_code}'"); + } + } + + + // determine post id based on trid + $post_id = $tinfo->element_id; + + if($post_id){ + // see if the post really exists - make sure it wasn't deleted while the plugin was + if(!$wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE ID={$post_id}")){ + $is_update = false; + $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translations WHERE element_type='post_{$original_post_details->post_type}' AND element_id={$post_id}"); + }else{ + $is_update = true; + $postarr['ID'] = $_POST['post_ID'] = $post_id; + } + }else{ + $is_update = false; + } + $postarr['post_title'] = $translation['title']; + if($sitepress_settings['translated_document_page_url'] == 'translate' && isset($translation['URL'])){ + $postarr['post_name'] = $translation['URL']; + } + $postarr['post_content'] = $translation['body']; + if (isset($translation['excerpt']) && $translation['excerpt'] != "") { + $postarr['post_excerpt'] = $translation['excerpt']; + } + if(@is_array($translated_tags)){ + $postarr['tags_input'] = join(',',(array)$translated_tags); + } + if(@is_array($translated_taxs)){ + foreach($translated_taxs as $taxonomy=>$values){ + $postarr['tax_input'][$taxonomy] = join(',',(array)$values); + } + } + if(@is_array($translated_tax_ids)){ + $postarr['tax_input'] = $translated_tax_ids; + } + if(isset($translated_cats_ids)){ + $postarr['post_category'] = $translated_cats_ids; + } + $postarr['post_author'] = $original_post_details->post_author; + $postarr['post_type'] = $original_post_details->post_type; + if($sitepress_settings['sync_comment_status']){ + $postarr['comment_status'] = $original_post_details->comment_status; + } + if($sitepress_settings['sync_ping_status']){ + $postarr['ping_status'] = $original_post_details->ping_status; + } + if($sitepress_settings['sync_page_ordering']){ + $postarr['menu_order'] = $original_post_details->menu_order; + } + if($sitepress_settings['sync_private_flag'] && $original_post_details->post_status=='private'){ + $postarr['post_status'] = 'private'; + } + if(!$is_update){ + $postarr['post_status'] = !$sitepress_settings['translated_document_status'] ? 'draft' : $original_post_details->post_status; + } else { + // set post_status to the current post status. + $postarr['post_status'] = $wpdb->get_var("SELECT post_status FROM {$wpdb->prefix}posts WHERE ID = ".$post_id); + } + if($sitepress_settings['sync_post_date']){ + $postarr['post_date'] = $original_post_details->post_date; + } + + if(isset($parent_id) && $sitepress_settings['sync_page_parent']){ + $_POST['post_parent'] = $postarr['post_parent'] = $parent_id; + $_POST['parent_id'] = $postarr['parent_id'] = $parent_id; + } + + if($is_update){ + $postarr['post_name'] = $wpdb->get_var($wpdb->prepare("SELECT post_name FROM {$wpdb->posts} WHERE ID=%d", $post_id)); + } + + $_POST['trid'] = $trid; + $_POST['lang'] = $lang_code; + $_POST['skip_sitepress_actions'] = true; + + + global $wp_rewrite; + if(!isset($wp_rewrite)) $wp_rewrite = new WP_Rewrite(); + + kses_remove_filters(); + + $postarr = apply_filters('icl_pre_save_pro_translation', $postarr); + + $new_post_id = wp_insert_post($postarr); + + do_action('icl_pro_translation_saved', $new_post_id); + + // associate custom taxonomies by hand + if ( !empty($postarr['tax_input']) ) { + foreach ( $postarr['tax_input'] as $taxonomy => $tags ) { + if($wp_taxonomies[$taxonomy]->hierarchical){ + wp_set_post_terms( $new_post_id, $tags, $taxonomy ); + }else{ + wp_set_post_terms( $new_post_id, $translated_taxs[$taxonomy], $taxonomy ); + } + } + } + + // set stickiness + if($is_original_sticky && $sitepress_settings['sync_sticky_flag']){ + stick_post($new_post_id); + }else{ + if($original_post_details->post_type=='post' && $is_update){ + unstick_post($new_post_id); //just in case - if this is an update and the original post stckiness has changed since the post was sent to translation + } + } + + foreach((array)$sitepress_settings['translation-management']['custom_fields_translation'] as $cf => $op){ + if ($op == 1) { + $sitepress->_sync_custom_field($translation['original_id'], $new_post_id, $cf); + }elseif ($op == 2 && isset($translation['field-'.$cf])) { + $field_translation = $translation['field-'.$cf]; + $field_type = $translation['field-'.$cf.'-type']; + if ($field_type == 'custom_field') { + $field_translation = str_replace ( '�A;', "\n", $field_translation ); + // always decode html entities eg decode & to & + $field_translation = html_entity_decode($field_translation); + update_post_meta($new_post_id, $cf, $field_translation); + } + } + } + + + // set specific custom fields + $copied_custom_fields = array('_top_nav_excluded', '_cms_nav_minihome'); + foreach($copied_custom_fields as $ccf){ + $val = get_post_meta($translation['original_id'], $ccf, true); + update_post_meta($new_post_id, $ccf, $val); + } + + // sync _wp_page_template + if($sitepress_settings['sync_page_template']){ + $_wp_page_template = get_post_meta($translation['original_id'], '_wp_page_template', true); + update_post_meta($new_post_id, '_wp_page_template', $_wp_page_template); + } + + // sync post format + if ( $sitepress_settings[ 'sync_post_format' ] ) { + $_wp_post_format = get_post_format( $translation[ 'original_id' ] ); + set_post_format( $new_post_id, $_wp_post_format ); + } + + if(!$new_post_id){ + return false; + } + + if(!$is_update){ + $wpdb->update($wpdb->prefix.'icl_translations', array('element_id'=>$new_post_id), array('translation_id' => $translation_id)); + } + update_post_meta($new_post_id, '_icl_translation', 1); + + TranslationManagement::set_page_url($new_post_id); + + global $iclTranslationManagement; + + + $ts = array( + 'status'=>ICL_TM_COMPLETE, 'needs_update'=>0, + 'translation_id'=>$translation_id + ); + + $translator_id = $wpdb->get_var($wpdb->prepare("SELECT translator_id FROM {$wpdb->prefix}icl_translation_status WHERE translation_id=%d", $translation_id)); + if(!$translator_id){ + foreach($sitepress_settings['icl_lang_status'] as $lpair){ + if($lpair['from'] == $original_post_details->language_code && $lpair['to'] == $lang_code && isset($lpair['translators'][0]['id'])){ + $ts['translator_id'] = $lpair['translators'][0]['id']; + break; + } + } + } + + + // update translation status + $iclTranslationManagement->update_translation_status($ts); + + + + // add new translation job + + //$translation_package = $iclTranslationManagement->create_translation_package(get_post($translation['original_id'])); + //$job_id = $iclTranslationManagement->add_translation_job($tinfo->rid, $tinfo->translator_id, $translation_package); + $job_id = $iclTranslationManagement->get_translation_job_id($trid, $lang_code); + // save the translation + $iclTranslationManagement->mark_job_done($job_id); + $parts = explode('_', $translation['original_id']); + if ($parts[0] != 'external') { + $iclTranslationManagement->save_job_fields_from_post($job_id, get_post($new_post_id)); + + $this->_content_fix_links_to_translated_content($new_post_id, $lang_code, "post_{$original_post_details->post_type}"); + if(function_exists('icl_st_fix_links_in_strings')){ + icl_st_fix_links_in_strings($new_post_id); + } + + + // Now try to fix links in other translated content that may link to this post. + $sql = "SELECT + tr.element_id + FROM + {$wpdb->prefix}icl_translations tr + JOIN + {$wpdb->prefix}icl_translation_status ts + ON + tr.translation_id = ts.translation_id + WHERE + ts.links_fixed = 0 AND tr.element_type = 'post_{$original_post_details->post_type}' AND tr.language_code = '{$lang_code}' AND tr.element_id IS NOT NULL"; + $needs_fixing = $wpdb->get_results($sql); + foreach($needs_fixing as $id){ + if($id->element_id != $new_post_id){ // fix all except the new_post_id. We have already done this. + $this->_content_fix_links_to_translated_content($id->element_id, $lang_code, "post_{$original_post_details->post_type}"); + } + } + + // if this is a parent page then make sure it's children point to this. + $this->fix_translated_children($translation['original_id'], $new_post_id, $lang_code); + } + + do_action('icl_pro_translation_completed', $new_post_id); + + return true; + } + + // old style - for strings + function get_translated_string($args){ + global $sitepress_settings, $sitepress, $wpdb; + + try{ + + $signature = $args[0]; + $site_id = $args[1]; + $request_id = $args[2]; + $original_language = $args[3]; + $language = $args[4]; + $status = $args[5]; + $message = $args[6]; + + if ($site_id != $sitepress_settings['site_id']) { + return 3; + } + + //check signature + $signature_chk = sha1($sitepress_settings['access_key'].$sitepress_settings['site_id'].$request_id.$language.$status.$message); + if($signature_chk != $signature){ + return 2; + } + + $lang_code = $sitepress->get_language_code($this->server_languages_map($language, true));//the 'reverse' language filter + + $cms_request_info = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}icl_core_status WHERE rid={$request_id} AND target='{$lang_code}'"); + + if (empty($cms_request_info)){ + $this->_throw_exception_for_mysql_errors(); + return 4; + } + + //return $this->process_translated_string($request_id, $language); + + if ($this->process_translated_string($request_id, $language) === true){ + $this->_throw_exception_for_mysql_errors(); + return 1; + } else { + $this->_throw_exception_for_mysql_errors(); + return 6; + } + + }catch(Exception $e) { + return $e->getMessage(); + } + } + + // old style - for strings + function process_translated_string($request_id, $language){ + global $sitepress_settings, $wpdb, $sitepress; + $ret = false; + $iclq = new ICanLocalizeQuery($sitepress_settings['site_id'], $sitepress_settings['access_key']); + + $translation = $iclq->cms_do_download($request_id, $language); + + if($translation){ + $ret = icl_translation_add_string_translation($request_id, $translation, $sitepress->get_language_code($this->server_languages_map($language, true))); + if($ret){ + $iclq->cms_update_request_status($request_id, CMS_TARGET_LANGUAGE_DONE, $language); + } + } + + // if there aren't any other unfullfilled requests send a global 'done' + if(0 == $wpdb->get_var("SELECT COUNT(rid) FROM {$wpdb->prefix}icl_core_status WHERE rid='{$request_id}' AND status < ".CMS_TARGET_LANGUAGE_DONE)){ + $iclq->cms_update_request_status($request_id, CMS_REQUEST_DONE, false); + } + return $ret; + } + + function _content_fix_image_paths_in_body(&$translation) { + $body = $translation['body']; + $image_paths = $this->_content_get_image_paths($body); + + $source_path = get_permalink($translation['original_id']); + + foreach($image_paths as $path) { + + $src_path = $this->resolve_url($source_path, $path[2]); + if ($src_path != $path[2]) { + $search = $path[1] . $path[2] . $path[1]; + $replace = $path[1] . $src_path . $path[1]; + $new_link = str_replace($search, $replace, $path[0]); + + $body = str_replace($path[0], $new_link, $body); + + + } + + } + $translation['body'] = $body; + } + + /* + Decode any html encoding in shortcodes + http://codex.wordpress.org/Shortcode_API + */ + function _content_decode_shortcodes(&$translation) { + $body = $translation['body']; + + global $shortcode_tags; + if (isset($shortcode_tags)) { + $tagnames = array_keys($shortcode_tags); + $tagregexp = join( '|', array_map('preg_quote', $tagnames) ); + + $regexp = '/\[('.$tagregexp.')\b(.*?)\]/s'; + + if (preg_match_all($regexp, $body, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + $body = str_replace($match[0], '[' . $match[1] . html_entity_decode($match[2]) . ']', $body); + } + } + + } + + $translation['body'] = $body; + } + + /** + * get the paths to images in the body of the content + */ + + function _content_get_image_paths($body) { + + $regexp_links = array( + "//siU", + "/<script\ssrc\s*=\s*([\"\']??)([^\"]*)\".*>/siU", + "//siU", + ); + + $links = array(); + + foreach($regexp_links as $regexp) { + if (preg_match_all($regexp, $body, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + $links[] = $match; + } + } + } + + return $links; + } + + + /** + * Resolve a URL relative to a base path. This happens to work with POSIX + * filenames as well. This is based on RFC 2396 section 5.2. + */ + function resolve_url($base, $url) { + if (!strlen($base)) return $url; + // Step 2 + if (!strlen($url)) return $base; + // Step 3 + if (preg_match('!^[a-z]+:!i', $url)) return $url; + $base = parse_url($base); + if ($url{0} == "#") { + // Step 2 (fragment) + $base['fragment'] = substr($url, 1); + return $this->unparse_url($base); + } + unset($base['fragment']); + unset($base['query']); + if (substr($url, 0, 2) == "//") { + // Step 4 + return $this->unparse_url(array( + 'scheme'=>$base['scheme'], + 'path'=>$url, + )); + } else if ($url{0} == "/") { + // Step 5 + $base['path'] = $url; + } else { + // Step 6 + $path = explode('/', $base['path']); + $url_path = explode('/', $url); + // Step 6a: drop file from base + array_pop($path); + // Step 6b, 6c, 6e: append url while removing "." and ".." from + // the directory portion + $end = array_pop($url_path); + foreach ($url_path as $segment) { + if ($segment == '.') { + // skip + } else if ($segment == '..' && $path && $path[sizeof($path)-1] != '..') { + array_pop($path); + } else { + $path[] = $segment; + } + } + // Step 6d, 6f: remove "." and ".." from file portion + if ($end == '.') { + $path[] = ''; + } else if ($end == '..' && $path && $path[sizeof($path)-1] != '..') { + $path[sizeof($path)-1] = ''; + } else { + $path[] = $end; + } + // Step 6h + $base['path'] = join('/', $path); + + } + // Step 7 + return $this->unparse_url($base); + } + + function unparse_url($parsed){ + if (! is_array($parsed)) return false; + $uri = isset($parsed['scheme']) ? $parsed['scheme'].':'.((strtolower($parsed['scheme']) == 'mailto') ? '':'//'): ''; + $uri .= isset($parsed['user']) ? $parsed['user'].($parsed['pass']? ':'.$parsed['pass']:'').'@':''; + $uri .= isset($parsed['host']) ? $parsed['host'] : ''; + $uri .= isset($parsed['port']) ? ':'.$parsed['port'] : ''; + if(isset($parsed['path'])) + { + $uri .= (substr($parsed['path'],0,1) == '/')?$parsed['path']:'/'.$parsed['path']; + } + $uri .= isset($parsed['query']) ? '?'.$parsed['query'] : ''; + $uri .= isset($parsed['fragment']) ? '#'.$parsed['fragment'] : ''; + return $uri; + } + + function _content_fix_relative_link_paths_in_body(&$translation) { + $body = $translation['body']; + $link_paths = $this->_content_get_link_paths($body); + + $source_path = get_permalink($translation['original_id']); + + foreach($link_paths as $path) { + + if ($path[2][0] != "#"){ + $src_path = $this->resolve_url($source_path, $path[2]); + if ($src_path != $path[2]) { + $search = $path[1] . $path[2] . $path[1]; + $replace = $path[1] . $src_path . $path[1]; + $new_link = str_replace($search, $replace, $path[0]); + + $body = str_replace($path[0], $new_link, $body); + } + } + } + $translation['body'] = $body; + } + + function _content_get_link_paths($body) { + + $regexp_links = array( + /*"/(.*?)<\/a>/i",*/ + "/]*href\s*=\s*([\"\']??)([^\"^>]+)[\"\']??([^>]*)>/i", + ); + + $links = array(); + + foreach($regexp_links as $regexp) { + if (preg_match_all($regexp, $body, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + $links[] = $match; + } + } + } + return $links; + } + + public static function _content_make_links_sticky($element_id, $element_type='post', $string_translation = true) { + if(strpos($element_type, 'post') === 0){ + // only need to do it if sticky links is not enabled. + // create the object + require_once ICL_PLUGIN_PATH . '/inc/absolute-links/absolute-links.class.php'; + $icl_abs_links = new AbsoluteLinks; + $icl_abs_links->process_post($element_id); + }elseif($element_type=='string'){ + require_once ICL_PLUGIN_PATH . '/inc/absolute-links/absolute-links.class.php'; + $icl_abs_links = new AbsoluteLinks; // call just for strings + $icl_abs_links->process_string($element_id, $string_translation); + } + } + + function _content_fix_links_to_translated_content($element_id, $target_lang_code, $element_type='post'){ + global $wpdb, $sitepress, $sitepress_settings, $wp_taxonomies; + self::_content_make_links_sticky($element_id, $element_type); + + if(strpos($element_type, 'post') === 0){ + $post = $wpdb->get_row("SELECT * FROM {$wpdb->posts} WHERE ID={$element_id}"); + $body = $post->post_content; + }elseif($element_type=='string'){ + $body = $wpdb->get_var("SELECT value FROM {$wpdb->prefix}icl_string_translations WHERE id=" . $element_id); + } + $new_body = $body; + + $base_url_parts = parse_url(get_option('home')); + + $links = $this->_content_get_link_paths($body); + + $all_links_fixed = 1; + + $pass_on_qvars = array(); + $pass_on_fragments = array(); + + foreach($links as $link_idx => $link) { + $path = $link[2]; + $url_parts = parse_url($path); + + if(isset($url_parts['fragment'])){ + $pass_on_fragments[$link_idx] = $url_parts['fragment']; + } + + if((!isset($url_parts['host']) or $base_url_parts['host'] == $url_parts['host']) and + (!isset($url_parts['scheme']) or $base_url_parts['scheme'] == $url_parts['scheme']) and + isset($url_parts['query'])) { + $query_parts = explode('&', $url_parts['query']); + + foreach($query_parts as $query){ + // find p=id or cat=id or tag=id queries + list($key, $value) = explode('=', $query); + $translations = NULL; + $is_tax = false; + if($key == 'p'){ + $kind = 'post_' . $wpdb->get_var("SELECT post_type FROM {$wpdb->posts} WHERE ID='{$value}'"); + } else if($key == "page_id"){ + $kind = 'post_page'; + } else if($key == 'cat' || $key == 'cat_ID'){ + $kind = 'tax_category'; + $taxonomy = 'category'; + } else if($key == 'tag'){ + $is_tax = true; + $taxonomy = 'post_tag'; + $kind = 'tax_' . $taxonomy; + $value = $wpdb->get_var("SELECT term_taxonomy_id FROM {$wpdb->terms} t + JOIN {$wpdb->term_taxonomy} x ON t.term_id = x.term_id WHERE x.taxonomy='{$taxonomy}' AND t.slug='{$value}'"); + } else { + $found = false; + foreach($wp_taxonomies as $ktax => $tax){ + if($tax->query_var && $key == $tax->query_var){ + $found = true; + $is_tax = true; + $kind = 'tax_' . $ktax; + $value = $wpdb->get_var(" + SELECT term_taxonomy_id FROM {$wpdb->terms} t + JOIN {$wpdb->term_taxonomy} x ON t.term_id = x.term_id WHERE x.taxonomy='{$ktax}' AND t.slug='{$value}'"); + $taxonomy = $ktax; + } + } + if(!$found){ + $pass_on_qvars[$link_idx][] = $query; + continue; + } + } + + $link_id = (int)$value; + + if (!$link_id) { + continue; + } + + $trid = $sitepress->get_element_trid($link_id, $kind); + if(!$trid){ + continue; + } + if($trid !== NULL){ + $translations = $sitepress->get_element_translations($trid, $kind); + } + if(isset($translations[$target_lang_code]) && $translations[$target_lang_code]->element_id != null){ + + // use the new translated id in the link path. + + $translated_id = $translations[$target_lang_code]->element_id; + + if($is_tax){ + $translated_id = $wpdb->get_var("SELECT slug FROM {$wpdb->terms} t JOIN {$wpdb->term_taxonomy} x ON t.term_id=x.term_id WHERE x.term_taxonomy_id=$translated_id"); + } + + // if absolute links is not on turn into WP permalinks + if(empty($GLOBALS['WPML_Sticky_Links'])){ + //////// + if(preg_match('#^post_#', $kind)){ + $replace = get_permalink($translated_id); + }elseif(preg_match('#^tax_#', $kind)){ + if(is_numeric($translated_id)) $translated_id = intval($translated_id); + $replace = get_term_link($translated_id, $taxonomy); + } + $new_link = str_replace($link[2], $replace, $link[0]); + + $replace_link_arr[$link_idx] = array('from'=> $link[2], 'to'=>$replace); + }else{ + $replace = $key . '=' . $translated_id; + $new_link = str_replace($query, $replace, $link[0]); + + $replace_link_arr[$link_idx] = array('from'=> $query, 'to'=>$replace); + } + + // replace the link in the body. + // $new_body = str_replace($link[0], $new_link, $new_body); + $all_links_arr[$link_idx] = array('from'=> $link[0], 'to'=>$new_link); + // done in the next loop + + } else { + // translation not found for this. + $all_links_fixed = 0; + } + } + } + + } + + if(!empty($replace_link_arr)) + foreach($replace_link_arr as $link_idx => $rep){ + $rep_to = $rep['to']; + $fragment = ''; + + // if sticky links is not ON, fix query parameters and fragments + if(empty($GLOBALS['WPML_Sticky_Links'])){ + if(!empty($pass_on_fragments[$link_idx])){ + $fragment = '#' . $pass_on_fragments[$link_idx]; + } + if(!empty($pass_on_qvars[$link_idx])){ + $url_glue = (strpos($rep['to'], '?') === false) ? '?' : '&'; + $rep_to = $rep['to'] . $url_glue . join('&', $pass_on_qvars[$link_idx]); + } + } + + $all_links_arr[$link_idx]['to'] = str_replace($rep['to'], $rep_to . $fragment, $all_links_arr[$link_idx]['to']); + + } + + if(!empty($all_links_arr)) + foreach($all_links_arr as $link){ + $new_body = str_replace($link['from'], $link['to'], $new_body); + } + + if ($new_body != $body){ + + // save changes to the database. + if(strpos($element_type, 'post') === 0){ + $wpdb->update($wpdb->posts, array('post_content'=>$new_body), array('ID'=>$element_id)); + + // save the all links fixed status to the database. + $icl_element_type = 'post_' . $post->post_type; + $translation_id = $wpdb->get_var("SELECT translation_id FROM {$wpdb->prefix}icl_translations WHERE element_id={$element_id} AND element_type='{$icl_element_type}'"); + + $wpdb->query("UPDATE {$wpdb->prefix}icl_translation_status SET links_fixed='{$all_links_fixed}' WHERE translation_id={$translation_id}"); + + }elseif($element_type == 'string'){ + $wpdb->update($wpdb->prefix.'icl_string_translations', array('value'=>$new_body), array('id'=>$element_id)); + } + + } + + } + + function fix_translated_children($original_id, $translated_id, $lang_code){ + global $wpdb, $sitepress; + + // get the children of of original page. + $original_children = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_parent = {$original_id} AND post_type = 'page'"); + foreach($original_children as $original_child){ + // See if the child has a translation. + $trid = $sitepress->get_element_trid($original_child, 'post_page'); + if($trid){ + $translations = $sitepress->get_element_translations($trid, 'post_page'); + if (isset($translations[$lang_code]) && isset($translations[$lang_code]->element_id)){ + $current_parent = $wpdb->get_var("SELECT post_parent FROM {$wpdb->posts} WHERE ID = ".$translations[$lang_code]->element_id); + if ($current_parent != $translated_id){ + $wpdb->query("UPDATE {$wpdb->posts} SET post_parent={$translated_id} WHERE ID = ".$translations[$lang_code]->element_id); + } + } + } + } + } + + function fix_translated_parent($original_id, $translated_id, $lang_code){ + global $wpdb, $sitepress; + + $original_parent = $wpdb->get_var("SELECT post_parent FROM {$wpdb->posts} WHERE ID = {$original_id} AND post_type = 'page'"); + if ($original_parent){ + $trid = $sitepress->get_element_trid($original_parent, 'post_page'); + if($trid){ + $translations = $sitepress->get_element_translations($trid, 'post_page'); + if (isset($translations[$lang_code])){ + $current_parent = $wpdb->get_var("SELECT post_parent FROM {$wpdb->posts} WHERE ID = ".$translated_id); + if ($current_parent != $translations[$lang_code]->element_id){ + $wpdb->query("UPDATE {$wpdb->posts} SET post_parent={$translations[$lang_code]->element_id} WHERE ID = ".$translated_id); + } + } + } + } + } + + + function _throw_exception_for_mysql_errors(){ + global $EZSQL_ERROR, $sitepress_settings; + if(isset($sitepress_settings['troubleshooting_options']['raise_mysql_errors']) && $sitepress_settings['troubleshooting_options']['raise_mysql_errors']){ + if(!empty($EZSQL_ERROR)){ + foreach($EZSQL_ERROR as $k=>$v){ + $mysql_errors[] = $v['error_str'] . ' [' . $v['query'] . ']'; + } + throw new Exception(join("\n", $mysql_errors)); + } + } + } + + function _translation_error_handler($errno, $errstr, $errfile, $errline){ + switch($errno){ + case E_ERROR: + case E_USER_ERROR: + throw new Exception ($errstr . ' [code:e' . $errno . '] in '. $errfile . ':' . $errline); + case E_WARNING: + case E_USER_WARNING: + return true; + //throw new Exception ($errstr . ' [code:w' . $errno . '] in '. $errfile . ':' . $errline); + default: + return true; + } + + } + + function post_submitbox_start(){ + global $post, $iclTranslationManagement; + if(empty($post)|| !$post->ID){ + return; + } + + $translations = $iclTranslationManagement->get_element_translations($post->ID, 'post_' . $post->post_type); + $show_box = 'display:none'; + foreach($translations as $t){ + if($t->element_id == $post->ID){ + if(!empty($t->source_language_code)) return; + else continue; + } + if($t->status == ICL_TM_COMPLETE && !$t->needs_update){ + $show_box = ''; + break; + } + } + + echo '

              '; + echo ''; + echo '
              '; + echo '

              '; + } + + public static function estimate_word_count($data, $lang_code) { + $words = 0; + if(isset($data->post_title)){ + if(in_array($lang_code, self::$__asian_languages)){ + $words += strlen(strip_tags($data->post_title)) / 6; + } else { + $words += count(preg_split( + '/[\s\/]+/', $data->post_title, 0, PREG_SPLIT_NO_EMPTY)); + } + } + if(isset($data->post_content)){ + if(in_array($lang_code, self::$__asian_languages)){ + $words += strlen(strip_tags($data->post_content)) / 6; + } else { + $words += count(preg_split( + '/[\s\/]+/', strip_tags($data->post_content), 0, PREG_SPLIT_NO_EMPTY)); + } + } + return (int)$words; + } + + public static function estimate_custom_field_word_count($post_id, $lang_code) { + global $sitepress_settings; + $words = 0; + $custom_fields = array(); + foreach((array)$sitepress_settings['translation-management']['custom_fields_translation'] as $cf => $op){ + if ($op == 2) { + $custom_fields[] = $cf; + } + } + foreach($custom_fields as $cf){ + $custom_fields_value = get_post_meta($post_id, $cf, true); + if ($custom_fields_value != "" && is_scalar($custom_fields_value)) { + if(in_array($lang_code, self::$__asian_languages)){ + $words += strlen(strip_tags($custom_fields_value)) / 6; + } else { + $words += count(preg_split( + '/[\s\/]+/', strip_tags($custom_fields_value), 0, + PREG_SPLIT_NO_EMPTY)); + } + } + } + return (int)$words; + } + + public function get_translator_name($translator_id){ + global $sitepress_settings; + static $translators; + if(is_null($translators)){ + foreach($sitepress_settings['icl_lang_status'] as $lp){ + if(!empty($lp['translators'])){ + foreach($lp['translators'] as $tr){ + $translators[$tr['id']] = $tr['nickname']; + } + } + } + } + if(isset($translators[$translator_id])){ + return $translators[$translator_id]; + }else{ + return false; + } + } + + + function _xmlrpc_cancel_translation($args){ + global $sitepress_settings, $sitepress, $wpdb; + $signature = $args[0]; + $website_id = $args[1]; + $request_id = $args[2]; + $cms_id = $args[3]; + $checksum = $sitepress_settings['access_key'] . $sitepress_settings['site_id'] . $request_id . $cms_id; + + + + // decode cms_id + $int = preg_match('#(.+)_([0-9]+)_([^_]+)_([^_]+)#', $cms_id, $matches); + + $_element_type = $matches[1]; + $_element_id = $matches[2]; + $_original_lang = $matches[3]; + $_lang = $matches[4]; + + $trid = $sitepress->get_element_trid($_element_id, 'post_' . $_element_type); + + if (sha1 ( $checksum ) == $signature) { + $wid = $sitepress_settings['site_id']; + if ($website_id == $wid) { + $translation_entry = $wpdb->get_row("SELECT * + FROM {$wpdb->prefix}icl_translation_status s JOIN {$wpdb->prefix}icl_translations t ON t.translation_id = s.translation_id + WHERE t.trid={$trid} AND t.language_code='{$_lang}'"); + + if (empty($translation_entry)){ + return 4; // cms_request not found + } + $job_id = $wpdb->get_var($wpdb->prepare("SELECT job_id FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d AND revision IS NULL", $translation_entry->rid)); + if($job_id){ + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translate_job WHERE job_id=%d", $job_id)); + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translate WHERE job_id=%d", $job_id)); + $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translate_job SET revision = NULL WHERE rid=%d ORDER BY job_id DESC LIMIT 1", $translation_entry->rid)); + } + + if(!empty($translation_entry->_prevstate)){ + $_prevstate = unserialize($translation_entry->_prevstate); + $wpdb->update($wpdb->prefix . 'icl_translation_status', + array( + 'status' => $_prevstate['status'], + 'translator_id' => $_prevstate['translator_id'], + 'status' => $_prevstate['status'], + 'needs_update' => $_prevstate['needs_update'], + 'md5' => $_prevstate['md5'], + 'translation_service' => $_prevstate['translation_service'], + 'translation_package' => $_prevstate['translation_package'], + 'timestamp' => $_prevstate['timestamp'], + 'links_fixed' => $_prevstate['links_fixed'] + ), + array('translation_id'=>$translation_entry->translation_id) + ); + $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translation_status SET _prevstate = NULL WHERE translation_id=%d",$translation_entry->translation_id)); + }else{ + $wpdb->update($wpdb->prefix . 'icl_translation_status', array('status'=>ICL_TM_NOT_TRANSLATED, 'needs_update'=>0), array('translation_id'=>$translation_entry->translation_id)); + } + return 1; + } else { + return 3; // Website id incorrect + } + } else { + return 2; // Signature failed + } + + return 0; // Should not have got here - unknown error. + } + + + function _legacy_xmlrpc_cancel_translation($args){ + global $sitepress_settings, $sitepress, $wpdb; + $signature = $args[0]; + $website_id = $args[1]; + $request_id = $args[2]; + + $accesskey = $sitepress_settings['access_key']; + $checksum = $accesskey . $website_id . $request_id; + + $args['sid'] = sha1 ( $checksum ); + + if (sha1 ( $checksum ) == $signature) { + $wid = $sitepress_settings['site_id']; + if ($website_id == $wid) { + + $cms_request_info = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}icl_core_status WHERE rid={$request_id}"); + + if (empty($cms_request_info)){ + return 4; // cms_request not found + } + + // cms_request have been found. + // delete it + + $wpdb->query("DELETE FROM {$wpdb->prefix}icl_core_status WHERE rid={$request_id}"); + $wpdb->query("DELETE FROM {$wpdb->prefix}icl_content_status WHERE rid={$request_id}"); + + // find cms_id + $nid = $wpdb->get_var($wpdb->prepare("SELECT nid FROM {$wpdb->prefix}icl_content_status WHERE rid=%d", $request_id)); + + if($nid){ + $trid = $wpdb->get_var($wpdb->prepare(" + SELECT trid FROM {$wpdb->prefix}icl_translations + WHERE element_id=%d AND post_type LIKE 'post\_%'", $nid) + ); + + $translation = $wpdb->get_row($wpdb->prepare("SELECT translation_id FROM {$wpdb->prefix}icl_translations + WHERE trid=%d AND language_code=%s", $trid, $cms_request_info->target) + ); + $original_element_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND language_code=%s", + $translation->trid, $translation->source_language_code)); + $cms_id = sprintf('%s_%d_%s_%s', preg_replace('#^post_#','', $translation->element_type, $original_element_id, $translation->source_language_code, $translation->language_code)); } + + if($cms_id){ + $args[3] = $cms_id; + return $this->_xmlrpc_cancel_translation($args); + + } + return 1; + + } else { + return 3; // Website id incorrect + } + } else { + return 2; // Signature failed + } + + return 0; // Should not have got here - unknown error. + } + + + function _test_xmlrpc(){ return true; } + + function _xmlrpc_add_message_translation($args){ + global $wpdb, $sitepress, $sitepress_settings, $wpml_add_message_translation_callbacks; + $signature = $args[0]; + $site_id = $args[1]; + $rid = $args[2]; + $translation = $args[3]; + + $signature_check = md5($sitepress_settings['access_key'] . $sitepress_settings['site_id'] . $rid); + if($signature != $signature_check){ + return 0; // array('err_code'=>1, 'err_str'=> __('Signature mismatch','sitepress')); + } + + $res = $wpdb->get_row("SELECT to_language, object_id, object_type FROM {$wpdb->prefix}icl_message_status WHERE rid={$rid}"); + if(!$res){ + return 0; + } + + $to_language = $res->to_language; + $object_id = $res->object_id; + $object_type = $res->object_type; + + try{ + if(is_array($wpml_add_message_translation_callbacks[$object_type])){ + foreach($wpml_add_message_translation_callbacks[$object_type] as $callback){ + if ( !is_null($callback) ) { + call_user_func($callback, $object_id, $to_language, $translation); + } + } + } + $wpdb->update($wpdb->prefix.'icl_message_status', array('status'=>MESSAGE_TRANSLATION_COMPLETE), array('rid'=>$rid)); + }catch(Exception $e){ + return $e->getMessage().'[' . $e->getFile() . ':' . $e->getLine() . ']'; + } + return 1; + + } + + function get_jobs_in_progress(){ + global $wpdb; + $jip = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM {$wpdb->prefix}icl_translation_status WHERE status=%d AND translation_service='icanlocalize'", ICL_TM_IN_PROGRESS)); + return $jip; + } + + function get_strings_in_progress(){ + global $wpdb; + $sip = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM {$wpdb->prefix}icl_core_status WHERE status < %d", 3)); + return $sip; + } + + function poll_for_translations($force = false){ + global $sitepress_settings, $sitepress, $wpdb; + + if (!$force) { + // Limit to once per hour + $toffset = strtotime(current_time('mysql')) - @intval($sitepress_settings['last_picked_up']) - 3600; + if($toffset < 0 || $force){ + return 0; + } + } + + $iclq = new ICanLocalizeQuery($sitepress_settings['site_id'], $sitepress_settings['access_key']); + $pending = $iclq->cms_requests(); + + $fetched = 0; + if(!empty($pending)){ + foreach($pending as $doc){ + + if(empty($doc['cms_id'])){ // it's a string + $target = $wpdb->get_var($wpdb->prepare("SELECT target FROM {$wpdb->prefix}icl_core_status WHERE rid=%d", $doc['id'])); + $__ld = $sitepress->get_language_details($target); + $language = $this->server_languages_map($__ld['english_name']); + $ret = $this->process_translated_string($doc['id'], $language); + if($ret){ + $fetched++; + } + }else{ + + // decode cms_id + $int = preg_match('#(.+)_([0-9]+)_([^_]+)_([^_]+)#', $doc['cms_id'], $matches); + + $_element_type = $matches[1]; + $_element_id = $matches[2]; + $_original_lang = $matches[3]; + $_lang = $matches[4]; + + $trid = $sitepress->get_element_trid($_element_id, 'post_'. $_element_type); + $translation = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND language_code=%s", $trid, $_lang)); + + $ret = $this->add_translated_document($translation->translation_id, $doc['id']); + if($ret){ + $fetched++; + } + } + } + } + + $iclsettings['last_picked_up'] = strtotime(current_time('mysql')); + $sitepress->save_settings($iclsettings); + + return $fetched; + } + + function get_icl_manually_tranlations_box($wrap_class=""){ + global $sitepress_settings; + + if(isset($_GET['icl_pick_message'])){ + ?> +

              + get_jobs_in_progress() or $this->get_strings_in_progress(); + if($sitepress_settings['translation_pickup_method'] == ICL_PRO_TRANSLATION_PICKUP_POLLING) + { + $last_time_picked_up = !empty($sitepress_settings['last_picked_up']) ? date_i18n('Y, F jS @g:i a', $sitepress_settings['last_picked_up']) : __('never', 'sitepress'); + $toffset = strtotime(current_time('mysql')) - @intval($sitepress_settings['last_picked_up']) - 5 * 60; + if($toffset < 0){ + $gettdisabled = ' disabled="disabled" '; + $waittext = '

              ' . sprintf(__('You can check again in %s minutes.', 'sitepress'), '' . floor(abs($toffset)/60) . '') . '

              '; + }else{ + $waittext = ''; + $gettdisabled = ''; + } + + ?> + + +
              +

              +

              />

              + +

              +
              +
              + $tax){ + if($sitepress->is_translated_taxonomy($tax_key)){ + $this->taxonomy = $tax_key; + break; + } + } + + }else{ + + $this->taxonomy = $taxonomy; + + } + + $this->args = $args; + + $this->show_selector = isset($args['taxonomy_selector']) ? $args['taxonomy_selector'] : true; + $this->show_tax_sync = isset($args['taxonomy_sync']) ? $args['taxonomy_sync'] : true; + + + $this->taxonomy_obj = get_taxonomy($this->taxonomy); + + // filters + $this->status = isset($this->args['status']) ? $this->args['status'] : WPML_TT_TAXONOMIES_NOT_TRANSLATED; + + if(isset($this->args['languages']) && $this->args['languages']){ + foreach($sitepress->get_active_languages() as $language){ + if(in_array($language['code'], $args['languages'])){ + $selected_languages[$language['code']] = $language; + } + } + } + $_active_languages = $sitepress->get_active_languages(); + unset($_active_languages[$sitepress->get_current_language()]); + $this->selected_languages = !empty($selected_languages) ? $selected_languages : $_active_languages; + + if(defined('WPML_ST_FOLDER')){ + // get labels translations + + if($sitepress_settings['st']['strings_language'] != $sitepress->get_default_language()){ + + $singular_original = $wpdb->get_var($wpdb->prepare("SELECT s.value FROM {$wpdb->prefix}icl_strings s + JOIN {$wpdb->prefix}icl_string_translations t ON t.string_id = s.id + WHERE s.context='WordPress' AND t.value = %s AND s.name LIKE %s AND t.language=%s", + $this->taxonomy_obj->labels->singular_name, 'taxonomy singular name: %', $sitepress->get_admin_language())); + + $general_original = $wpdb->get_var($wpdb->prepare("SELECT s.value FROM {$wpdb->prefix}icl_strings s + JOIN {$wpdb->prefix}icl_string_translations t ON t.string_id = s.id + WHERE s.context='WordPress' AND t.value = %s AND s.name LIKE %s AND t.language=%s", + $this->taxonomy_obj->labels->name, 'taxonomy general name: %', $sitepress->get_admin_language())); + + } + + if(empty($singular_original)){ + $singular_original = $this->taxonomy_obj->labels->singular_name; + } + if(empty($general_original)){ + $general_original = $this->taxonomy_obj->labels->name; + } + + $this->taxonomy_obj->labels_translations[$sitepress_settings['st']['strings_language']]['singular'] = $singular_original; + $this->taxonomy_obj->labels_translations[$sitepress_settings['st']['strings_language']]['general'] = $general_original; + + + $languages_pool = array_diff(array_merge(array_keys($this->selected_languages), array($sitepress->get_default_language())), array($sitepress_settings['st']['strings_language'])); + + foreach($languages_pool as $language){ + + $singular = $wpdb->get_var($wpdb->prepare("SELECT t.value FROM {$wpdb->prefix}icl_string_translations t + JOIN {$wpdb->prefix}icl_strings s ON t.string_id = s.id + WHERE s.context='WordPress' and s.name=%s AND t.language=%s", 'taxonomy singular name: ' . $singular_original, $language)); + $general = $wpdb->get_var($wpdb->prepare("SELECT t.value FROM {$wpdb->prefix}icl_string_translations t + JOIN {$wpdb->prefix}icl_strings s ON t.string_id = s.id + WHERE s.context='WordPress' and s.name=%s AND t.language=%s", 'taxonomy general name: ' . $general_original, $language)); + $this->taxonomy_obj->labels_translations[$language]['singular'] = $singular ? $singular : ''; + $this->taxonomy_obj->labels_translations[$language]['general'] = $general ? $general : ''; + + } + + } + + // build list of exclusion based on filters + foreach($this->selected_languages as $language){ + $lcode_alias = str_replace('-', '', $language['code']); + $joins[] = " LEFT JOIN {$wpdb->prefix}icl_translations t{$lcode_alias} ON t{$lcode_alias}.trid = t.trid AND t{$lcode_alias}.language_code='{$language['code']}'"; + $selects[] = "t{$lcode_alias}.element_id AS element_id_{$lcode_alias}"; + } + $joins = join(' ', $joins); + $selects = join(', ', $selects); + if($this->status == WPML_TT_TAXONOMIES_NOT_TRANSLATED){ + $res = $wpdb->get_results($wpdb->prepare(" + SELECT t.element_id, {$selects} + FROM {$wpdb->prefix}icl_translations t + {$joins} + WHERE t.element_type = %s AND t.language_code = %s + ", 'tax_' . $this->taxonomy, $sitepress->get_default_language())); + + foreach($res as $row){ + $translations = 0; + foreach($row as $r){ + if($r > 0 ) $translations++; + } + if($translations == count($this->selected_languages) + 1){ + $excludes[] = $row->element_id; + } + } + + if(!empty($excludes)){ + $get_terms_args['exclude'] = $wpdb->get_col($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE taxonomy=%s AND term_taxonomy_id IN (" . join(',', $excludes) . ")", $this->taxonomy)); + } + + } + + + // get_terms args + $get_terms_args['hide_empty'] = false; + $get_terms_args['orderby'] = 'name'; + if(!empty($this->args['search'])){ + $get_terms_args['search'] = $this->args['search']; + $this->search = $args['search']; + } + + if(!empty($this->args['child_of'])){ + $get_terms_args['child_of'] = $this->args['child_of']; + $this->child_of = $get_terms_args['child_of']; + }else{ + $this->child_of = 0; + } + + $_terms = get_terms($this->taxonomy, $get_terms_args); + + // on search - force include parents + if(!empty($this->search)){ + if($_terms) foreach($_terms as $term){ + $in_results = false; + foreach($_terms as $term2){ + if($term2->term_id == $term->parent){ + $in_results = true; + break; + } + } + if(!$in_results){ + while($term->parent > 0){ + + $term = get_term($term->parent, $this->taxonomy); + $_terms[] = $term; + + } + } + } + + } + + $this->terms_count = count($_terms); + + + $_terms = $this->order_terms_by_hierarchy($_terms); + + $this->current_page = isset($this->args['page']) ? $this->args['page'] : 1; + $offset = ($this->current_page - 1) * WPML_TT_TERMS_PER_PAGE; + + $this->terms = array_slice($_terms, $offset, WPML_TT_TERMS_PER_PAGE); + + // prepend parents if needed + if(isset($this->terms[0])){ + while($this->terms[0]->parent > 0 && $this->terms[0]->parent != $this->child_of){ + + foreach($_terms as $term){ + if($term->term_id == $this->terms[0]->parent){ + $guide_parent = $term; + break; + } + } + if(!empty($guide_parent)){ + array_unshift($this->terms, $guide_parent); + } + } + } + + unset($_terms); + + if(is_wp_error($this->terms)){ + $this->error = sprintf(__('Unknown taxonomy: %s'), $this->taxonomy); + return false; + } + + if(empty($this->terms) || is_wp_error($this->terms)) return; + + // limit for pagination? + + // get term taxonomy ids + foreach($this->terms as $term){ + $tt_ids[] = $term->term_taxonomy_id; + } + + // get list of matching trids + $trids = $wpdb->get_col($wpdb->prepare("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_type = %s AND element_id IN (" . join(',', $tt_ids) . ")", 'tax_' . $this->taxonomy)); + + // get terms by trids + $res = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translations WHERE element_type = %s AND trid IN (" . join(',', $trids) . ")", 'tax_' . $this->taxonomy)); + foreach($res as $row){ + $terms_by_trid[$row->trid][$row->language_code] = $row->element_id; + } + + // get translations for each term + foreach($this->terms as $k => $term){ + foreach($terms_by_trid as $trid_group){ + if($trid_group[$sitepress->get_current_language()] == $term->term_taxonomy_id){ + foreach($trid_group as $language => $element){ + if($language != $sitepress->get_current_language()){ + $this->terms[$k]->translations[$language] = $wpdb->get_row($wpdb->prepare(" + SELECT t.term_id, t.name, t.slug, x.term_taxonomy_id, x.taxonomy, x.description, x.parent + FROM {$wpdb->term_taxonomy} x JOIN {$wpdb->terms} t ON t.term_id = x.term_id + WHERE x.term_taxonomy_id=%d AND x.taxonomy = %s", $element, $this->taxonomy)); + } + } + } + } + + } + + } + + function order_terms_by_hierarchy($terms){ + + $ordered_list = array(); + foreach($terms as $term){ + if($term->parent == $this->child_of){ + $term->level = 0; + $ordered_list[] = $term; + } + } + + + foreach($ordered_list as $parent){ + self::_insert_child_terms_in_list($terms, $ordered_list, $parent->term_id); + } + + return $ordered_list; + + } + + static function _insert_child_terms_in_list($terms, &$ordered_list, $parent, $level = 0){ + + $children = array(); + foreach($terms as $term){ + if($term->parent == $parent){ + $children[] = $term; + } + } + + // get index of parent + $parent_index = -1; + foreach($ordered_list as $k => $term){ + if($term->term_id == $parent){ + $parent_index = $k; + break; + } + } + + if($children && $parent_index >= 0){ + array_splice($ordered_list, $parent_index+1, 0, $children); + + foreach($children as $child){ + $child->level = $level + 1; + self::_insert_child_terms_in_list($terms, $ordered_list, $child->term_id, $level + 1); + } + } + + + + } + + + function render(){ + global $sitepress, $sitepress_settings; + + if(!empty($this->error)){ + + echo '
              ' . $this->error . '
              '; + + } + elseif(!$this->taxonomy_obj){ + + echo '
              ' . sprintf(__('Unknown taxonomy: %s', 'sitepress'), $this->taxonomy ) . '
              '; + + }else{ + + $active_languages = $sitepress->get_active_languages(); + + include ICL_PLUGIN_PATH . '/menu/taxonomy-translation-content.php'; + + } + + + } + + static function show_terms(){ + $taxonomy = isset($_POST['taxonomy']) ? $_POST['taxonomy'] : false; + + $args = array(); + if(!empty($_POST['language'])){ + $args['languages'] = array($_POST['language']); + } + $args['status'] = isset($_POST['status']) ? $_POST['status'] : WPML_TT_TAXONOMIES_ALL; + + $args['search'] = isset($_POST['search']) ? $_POST['search'] : ''; + + if(isset($_POST['page'])){ + $args['page'] = $_POST['page']; + } + + if(isset($_POST['parent'])){ + $args['parent'] = $_POST['parent']; + } + + if(isset($_POST['child_of']) && intval($_POST['child_of']) > 0){ + $args['child_of'] = $_POST['child_of']; + } + + $inst = new WPML_Taxonomy_Translation($taxonomy, $args); + + ob_start(); + $inst->render(); + $html = ob_get_contents(); + ob_end_clean(); + + echo json_encode(array('html' => $html)); + exit; + + + } + + public static function save_term_translation(){ + global $sitepress, $wpdb; + + $original_element = $_POST['translation_of']; + $taxonomy = $_POST['taxonomy']; + $language = $_POST['language']; + $trid = $sitepress->get_element_trid($original_element, 'tax_' . $taxonomy); + $translations = $sitepress->get_element_translations($trid, 'tax_' . $taxonomy); + + $_POST['icl_tax_' . $taxonomy . '_language'] = $language; + $_POST['icl_trid'] = $trid; + $_POST['icl_translation_of'] = $original_element; + + $errors = ''; + + $term_args = array( + 'name' => $_POST['name'], + 'slug' => $_POST['slug'], + 'description' => $_POST['description'] + ); + + $original_tax = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->term_taxonomy} WHERE taxonomy=%s AND term_taxonomy_id = %d", $_POST['taxonomy'], $original_element)); + + // hierarchy - parents + if(is_taxonomy_hierarchical($_POST['taxonomy'])){ + // fix hierarchy + if($original_tax->parent){ + $original_parent_translated = icl_object_id($original_tax->parent, $_POST['taxonomy'], false, $_POST['language']); + if($original_parent_translated){ + $term_args['parent'] = $original_parent_translated; + } + } + + } + + if(isset($translations[$language])){ + + $result = wp_update_term($translations[$language]->term_id, $taxonomy, $term_args); + + }else{ + + $result = wp_insert_term($_POST['name'], $taxonomy, $term_args); + + } + + if(is_wp_error($result)){ + foreach($result->errors as $ers){ + $errors .= join('
              ', $ers); + } + $errors .= '
              ' ; + }else{ + + // hiearchy - children + if(is_taxonomy_hierarchical($_POST['taxonomy'])){ + + // get children of original + $children = $wpdb->get_col($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE taxonomy=%s AND parent=%d", $_POST['taxonomy'], $original_element)); + + if($children) foreach($children as $child){ + $child_translated = icl_object_id($child, $_POST['taxonomy'], false, $_POST['language']); + if($child_translated){ + $wpdb->update($wpdb->term_taxonomy, array('parent' => $result['term_id']), array('taxonomy' => $_POST['taxonomy'], 'term_id' => $child_translated)); + } + } + + delete_option($_POST['taxonomy'] . '_children'); + + } + + + $term = get_term($result['term_id'], $_POST['taxonomy']); + + do_action('icl_save_term_translation', $original_tax, $result); + + } + + $html = ''; + + echo json_encode(array('html' => $html, 'slug' => isset($term) ? urldecode($term->slug) : '', 'errors' => $errors)); + exit; + + } + + public static function save_labels_translation(){ + + $errors = ''; + + if(empty($_POST['singular']) || empty($_POST['general'])){ + $errors .= __('Please fill in all fields!', 'sitepress') . '
              '; + } + + + $string_id = icl_register_string('WordPress', 'taxonomy singular name: ' . $_POST['singular_original'], $_POST['singular_original']); + icl_add_string_translation($string_id, $_POST['language'], $_POST['singular'], ICL_STRING_TRANSLATION_COMPLETE); + + $string_id = icl_register_string('WordPress', 'taxonomy general name: ' . $_POST['general_original'], $_POST['general_original']); + icl_add_string_translation($string_id, $_POST['language'], $_POST['general'], ICL_STRING_TRANSLATION_COMPLETE); + + $html = ''; + + echo json_encode(array('html' => $html, 'errors' => $errors)); + exit; + + + } + + public static function sync_taxonomies_in_content_preview(){ + global $wp_taxonomies; + + $html = $message = $errors = ''; + + + if(isset($wp_taxonomies[$_POST['taxonomy']])){ + $object_types = $wp_taxonomies[$_POST['taxonomy']]->object_type; + + foreach($object_types as $object_type){ + + $html .= self::render_assignment_status($object_type, $_POST['taxonomy'], $preview = true); + + } + + }else{ + $errors = sprintf(__('Invalid taxonomy %s', 'sitepress'), $_POST['taxonomy']); + } + + + echo json_encode(array('html' => $html, 'message'=> $message, 'errors' => $errors)); + exit; + + + } + + public static function sync_taxonomies_in_content(){ + global $wp_taxonomies; + + $html = $message = $errors = ''; + + if(isset($wp_taxonomies[$_POST['taxonomy']])){ + $html .= self::render_assignment_status($_POST['post'], $_POST['taxonomy'], $preview = false); + + }else{ + $errors .= sprintf(__('Invalid taxonomy %s', 'sitepress'), $_POST['taxonomy']); + } + + + echo json_encode(array('html' => $html, 'errors' => $errors)); + exit; + + + } + + + public static function render_assignment_status($object_type, $taxonomy, $preview = true){ + global $sitepress, $wp_post_types, $wp_taxonomies; + + $posts = get_posts(array('post_type' => $object_type, 'suppress_filters' => false)); + + foreach($posts as $post){ + + $terms = wp_get_post_terms($post->ID, $taxonomy); + + $term_ids = array(); + foreach($terms as $term){ + $term_ids[] = $term->term_id; + } + + $trid = $sitepress->get_element_trid($post->ID, 'post_' . $post->post_type); + $translations = $sitepress->get_element_translations($trid, 'post_' . $post->post_type, true, true); + + foreach($translations as $language => $translation){ + + if($language != $sitepress->get_default_language() && $translation->element_id){ + + $terms_of_translation = wp_get_post_terms($translation->element_id, $taxonomy); + + $translation_term_ids = array(); + foreach($terms_of_translation as $term){ + + $term_id_original = icl_object_id($term->term_id, $taxonomy, false, $sitepress->get_default_language()); + if(!$term_id_original || !in_array($term_id_original, $term_ids)){ + // remove term + + if($preview){ + $needs_sync = true; + break(3); + } + + $current_terms = wp_get_post_terms($translation->element_id, $taxonomy); + $updated_terms = array(); + foreach($current_terms as $cterm){ + if($cterm->term_id != $term->term_id){ + $updated_terms[] = is_taxonomy_hierarchical($taxonomy) ? $term->term_id : $term->term_name; + } + if(!$preview){ + wp_set_post_terms($translation->element_id, $updated_terms, $taxonomy); + } + + } + + + }else{ + $translation_term_ids[] = $term_id_original; + } + + } + + foreach($term_ids as $term_id){ + + if(!in_array($term_id, $translation_term_ids)){ + // add term + + if($preview){ + $needs_sync = true; + break(3); + } + + $term_id_translated = icl_object_id($term_id, $taxonomy, false, $language); + + if(!is_taxonomy_hierarchical($taxonomy)){ + $term_details = get_term($term_id_translated, $taxonomy); + $term_id_translated = $term_details->name; + } + if(!$preview){ + wp_set_post_terms($translation->element_id, $term_id_translated, $taxonomy, true); + } + + } + + } + + } + + + } + + + } + + $out = ''; + + + if($preview){ + + $out .= '
              '; + if(!empty($needs_sync)){ + $out .= '
              '; + $out .= ''; + $out .= ''; + $out .= sprintf(__('Some translated %s have different %s assignments.', 'sitepress'), + '' . strtolower($wp_post_types[$object_type]->labels->name) . '', + '' . strtolower($wp_taxonomies[$taxonomy]->labels->name) . ''); + $out .= ' ' . sprintf(__('Update %s for all translated %s', 'sitepress'), + '' . strtolower($wp_taxonomies[$taxonomy]->labels->name) . '', + '' . strtolower($wp_post_types[$object_type]->labels->name) . '') . '' . + ' loading'; + $out .= "
              "; + }else{ + $out .= sprintf(__('All %s have the same %s assignments.', 'sitepress'), + '' . strtolower($wp_taxonomies[$taxonomy]->labels->name) . '', + '' . strtolower($wp_post_types[$object_type]->labels->name) . ''); + } + $out .= "
              "; + + }else{ + + $out .= sprintf(__('Successfully updated %s for all translated %s.', 'sitepress'), $wp_taxonomies[$taxonomy]->labels->name, $wp_post_types[$object_type]->labels->name); + + } + + return $out; + + } + + public static function render_parent_taxonomies_dropdown($taxonomy, $child_of = 0){ + global $wpdb; + + $args = array( + 'name' => 'child_of', + 'selected' => $child_of, + 'hierarchical' => 1, + 'taxonomy' => $taxonomy, + 'show_option_none' => '--- ' . __('select parent', 'sitepress') . ' ---', + 'hide_empty' => 0, + ); + + $categories = get_categories($args); + $max_depth = 0; + + foreach($categories as $category){ + $this_depth = 0; + while($category->category_parent > 0){ + foreach($categories as $category2){ + if($category2->term_id == $category->category_parent){ + $category = $category2; + break; + } + } + $this_depth++; + } + if($this_depth > $max_depth){ + $max_depth = $this_depth; + } + } + + $args['depth'] = $max_depth; + + wp_dropdown_categories($args); + + + } + + + +} + + +add_action('wp_ajax_wpml_tt_show_terms', array('WPML_Taxonomy_Translation', 'show_terms')); + +add_action('wp_ajax_wpml_tt_save_term_translation', array('WPML_Taxonomy_Translation', 'save_term_translation')); +add_action('wp_ajax_wpml_tt_save_labels_translation', array('WPML_Taxonomy_Translation', 'save_labels_translation')); + +add_action('wp_ajax_wpml_tt_sync_taxonomies_in_content_preview', array('WPML_Taxonomy_Translation', 'sync_taxonomies_in_content_preview')); +add_action('wp_ajax_wpml_tt_sync_taxonomies_in_content', array('WPML_Taxonomy_Translation', 'sync_taxonomies_in_content')); diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/translation-management/tm-notification.class.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/translation-management/tm-notification.class.php new file mode 100644 index 0000000..b339798 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/translation-management/tm-notification.class.php @@ -0,0 +1,263 @@ +get_translation_job($job_id); + $translators = TranslationManagement::get_blog_translators(array('to'=>$job->language_code)); + $edit_url = apply_filters('icl_job_edit_url',admin_url('admin.php?page=' . WPML_TM_FOLDER . '/menu/translations-queue.php&job_id=' . $job_id),$job_id); + + foreach($translators as $t){ + + if($job->manager_id == $t->ID) continue; + + // get current user admin language + $user_language = $sitepress->get_user_admin_language($t->ID); + // override locale + $sitepress->switch_locale($user_language); + + $lang_from = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='%s' AND display_language_code='%s'", + $job->source_language_code, $user_language)); + $lang_to = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='%s' AND display_language_code='%s'", + $job->language_code, $user_language)); + + $post_link = $iclTranslationManagement->tm_post_permalink($job->original_doc_id); + if ($post_link != "") { + $post_link = sprintf(__("\nView the original document in %s here: %s\n", 'sitepress'), $lang_from, $post_link); + } + + $mail['to'] = $t->display_name . ' <' . $t->user_email . '>'; + //$mail['to'] = $t->user_email; + $mail['subject'] = sprintf(__('New translation job from %s', 'sitepress'), get_bloginfo('name')); + $mail['body'] = sprintf(__("New job available from %s to %s.\n%s\nStart editing: %s", 'sitepress'), + $lang_from, $lang_to, $post_link, $edit_url); + $mail['type'] = 'translator'; + + $this->send_mail($mail, $user_language); + + //restore locale + $sitepress->switch_locale(); + } + } + + function new_job_translator($job_id, $translator_id){ + global $iclTranslationManagement, $sitepress, $wpdb; + $job = $iclTranslationManagement->get_translation_job($job_id); + + if($job->manager_id == $job->translator_id) return; + + $edit_url = apply_filters('icl_job_edit_url',admin_url('admin.php?page=' . WPML_TM_FOLDER . '/menu/translations-queue.php&job_id=' . $job_id),$job_id); + + $user = new WP_User($translator_id); + + // get current user admin language + $user_language = $sitepress->get_user_admin_language($user->ID); + // override locale + $sitepress->switch_locale($user_language); + + $lang_from = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='%s' AND display_language_code='%s'", + $job->source_language_code, $user_language)); + $lang_to = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='%s' AND display_language_code='%s'", + $job->language_code, $user_language)); + + $post_link = $iclTranslationManagement->tm_post_permalink($job->original_doc_id); + if ($post_link != "") { + $post_link = sprintf(__("\nView the original document in %s here: %s\n", 'sitepress'), $lang_from, $post_link); + } + + $mail['to'] = $user->display_name . ' <' . $user->user_email . '>'; + //$mail['to'] = $user->user_email; + $mail['subject'] = sprintf(__('New translation job from %s', 'sitepress'), get_bloginfo('name')); + //exit; + + $mail['body'] = sprintf(__("Hi %s,", 'sitepress'), + $user->display_name); + + $mail['body'] .= "\n\n"; + $mail['body'] .= sprintf(__("You have been assigned to new translation job from %s to %s.\n%s\nStart editing: %s", 'sitepress'), + $lang_from, $lang_to, $post_link, $edit_url); + + $mail['type'] = 'translator'; + + $mail = apply_filters('WPML_new_job_notification', $mail, $job_id); + + $this->send_mail($mail, $user_language); + + //restore locale + $sitepress->switch_locale(); + } + + function work_complete($job_id, $update = false){ + global $iclTranslationManagement, $sitepress, $wpdb; + $job = $iclTranslationManagement->get_translation_job($job_id); + if($job->manager_id == $job->translator_id) return; + $manager = new WP_User($job->manager_id); + $translator = new WP_User($job->translator_id); + + // get current user admin language + $user_language = $sitepress->get_user_admin_language($manager->ID); + // override locale + $sitepress->switch_locale($user_language); + + $lang_from = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='%s' AND display_language_code='%s'", + $job->source_language_code, $user_language)); + $lang_to = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='%s' AND display_language_code='%s'", + $job->language_code, $user_language)); + + $tj_url = admin_url('admin.php?page=' . WPML_TM_FOLDER . '/menu/main.php&sm=jobs'); + $doc_url = get_edit_post_link($job->original_doc_id, 'not_display'); + + if($iclTranslationManagement->settings['notification']['completed'] == ICL_TM_NOTIFICATION_IMMEDIATELY){ + $mail['to'] = $manager->display_name . ' <' . $manager->user_email . '>'; + if($update){ + $mail['subject'] = sprintf(__('Translator has updated translation job for %s', 'sitepress'), get_bloginfo('name')); + $mail['body'] = sprintf(__("Translator (%s) has updated translation of job \"%s\" for %s to %s.\n%s\n\nView translation jobs: %s", 'sitepress'), + $translator->display_name, $job->original_doc_title, $lang_from, $lang_to, $doc_url, $tj_url); + }else{ + $mail['subject'] = sprintf(__('Translator has completed translation job for %s', 'sitepress'), get_bloginfo('name')); + $mail['body'] = sprintf(__("Translator (%s) has completed translation of job \"%s\" for %s to %s.\n%s\n\nView translation jobs: %s", 'sitepress'), + $translator->display_name, $job->original_doc_title, $lang_from, $lang_to, $doc_url, $tj_url); + } + $mail['type'] = 'admin'; + $this->send_mail($mail, $user_language); + } + + // restore locale + $sitepress->switch_locale(); + } + + function translator_resigned($translator_id, $job_id){ + global $iclTranslationManagement, $sitepress, $wpdb; + $job = $iclTranslationManagement->get_translation_job($job_id); + if($job->manager_id == $translator_id) return; + $translator = new WP_User($translator_id); + $manager = new WP_User($job->manager_id); + + $tj_url = admin_url('admin.php?page=' . WPML_TM_FOLDER . '/menu/main.php&sm=jobs'); + + // get current user admin language + $user_language = $sitepress->get_user_admin_language($manager->ID); + // override locale + $sitepress->switch_locale($user_language); + + $lang_from = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='%s' AND display_language_code='%s'", + $job->source_language_code, $user_language)); + $lang_to = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='%s' AND display_language_code='%s'", + $job->language_code, $user_language)); + + if($iclTranslationManagement->settings['notification']['resigned'] == ICL_TM_NOTIFICATION_IMMEDIATELY){ + $mail['to'] = $manager->display_name . ' <' . $manager->user_email . '>'; + $mail['subject'] = sprintf(__('Translator has resigned from job on %s', 'sitepress'), get_bloginfo('name')); + $original_doc_title = isset($job->original_doc_title) ? $job->original_doc_title : __("Deleted", "sitepress"); + $mail['body'] = sprintf(__('Translator %s has resigned from the translation job "%s" for %s to %s.%sView translation jobs: %s', 'sitepress'), + $translator->display_name, $original_doc_title, $lang_from, $lang_to, "\n", $tj_url); + $mail['type'] = 'admin'; + + $this->send_mail($mail, $user_language); + } + //restore locale + $sitepress->switch_locale(); + } + + function translator_removed($translator_id, $job_id){ + global $iclTranslationManagement, $sitepress, $wpdb; + $job = $iclTranslationManagement->get_translation_job($job_id); + if($job->manager_id == $translator_id) return; + $translator = new WP_User($translator_id); + $manager = new WP_User($job->manager_id); + + $user_language = $sitepress->get_user_admin_language($manager->ID); + + // override locale + $sitepress->switch_locale($user_language); + + $lang_from = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='%s' AND display_language_code='%s'", + $job->source_language_code, $user_language)); + $lang_to = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='%s' AND display_language_code='%s'", + $job->language_code, $user_language)); + + $mail['to'] = $translator->display_name . ' <' . $translator->user_email . '>'; + $mail['subject'] = sprintf(__('Removed from translation job on %s', 'sitepress'), get_bloginfo('name')); + $mail['body'] = sprintf(__('You have been removed from the translation job "%s" for %s to %s.', 'sitepress'), + $job->original_doc_title, $lang_from, $lang_to); + $mail['type'] = 'translator'; + + $this->send_mail($mail, $user_language); + + // restore locale + $sitepress->switch_locale(); + } + + function send_mail($mail, $language = false){ + global $sitepress; + static $cache = array(); + + if($language !== false); + // override locale + $sitepress->switch_locale($language); + + if ($mail != 'empty_queue') { + $cache[$mail['type']][$mail['to']][$mail['subject']]['body'][] = $mail['body']; + if (isset($mail['attachment'])) { + $cache[$mail['type']][$mail['to']][$mail['subject']]['attachment'][] = $mail['attachment']; + } + $this->_process_mail_queue = TRUE; + } else if (!empty($cache)) { + $tj_url = admin_url('admin.php?page=' . WPML_TM_FOLDER . '/menu/translations-queue.php'); + foreach ($cache as $type => $mail_to_send) { + foreach ($mail_to_send as $to => $subjects) { + $body_to_send = ''; + foreach ($subjects as $subject => $content) { + $body = $content['body']; + $body_to_send .= $body_to_send . "\n\n" . implode("\n\n\n\n", $body) . "\n\n\n\n"; + if($type == 'translator'){ + $footer = sprintf(__('You can view your other translation jobs here: %s', 'sitepress'), $tj_url) . "\n\n--\n" + . sprintf(__("This message was automatically sent by Translation Management running on %s. To stop receiving these notifications contact the system administrator at %s.\n\nThis email is not monitored for replies.", 'sitepress'), get_bloginfo('name'), get_option('home')); + } else { + $footer = "\n--\n" . sprintf(__("This message was automatically sent by Translation Management running on %s. To stop receiving these notifications, go to Notification Settings, or contact the system administrator at %s.\n\nThis email is not monitored for replies.", 'sitepress'), get_bloginfo('name'), get_option('home')); + } + $body_to_send .= $footer; + + if (isset($content['attachment'])) { + $attachments = $content['attachment']; + } else { + $attachments = array(); + } + + $body_to_send = apply_filters('WPML_new_job_notification_body', $body_to_send, $tj_url); + $attachments = apply_filters('WPML_new_job_notification_attachments', $attachments); + wp_mail($to, $subject, $body_to_send, '', $attachments); + } + } + } + $cache = array(); + $this->_process_mail_queue = FALSE; + } + + // restore locale + $sitepress->switch_locale(); + } + + function mail_queue($location = NULL) { + if ($this->_process_mail_queue) { + $this->send_mail('empty_queue'); + } + if (!is_null($location)) { + return $location; + } + } +} + +?> \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/translation-management/translation-management.class.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/translation-management/translation-management.class.php new file mode 100644 index 0000000..796fbcc --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/translation-management/translation-management.class.php @@ -0,0 +1,4716 @@ +0); + private $current_translator = array('ID'=>0); + public $messages = array(); + public $dashboard_select = array(); + public $settings; + public $admin_texts_to_translate = array(); + private $wpml_config_files = array(); + + function __construct(){ + add_action('init', array($this, 'init'), 15); + + if(isset($_GET['icl_tm_message'])){ + $this->messages[] = array( + 'type' => isset($_GET['icl_tm_message_type']) ? $_GET['icl_tm_message_type'] : 'updated', + 'text' => $_GET['icl_tm_message'] + ); + } + + add_action('save_post', array($this, 'save_post_actions'), 11, 2); // calling *after* the Sitepress actions + + add_action('delete_post', array($this, 'delete_post_actions'), 1, 1); // calling *before* the Sitepress actions + + add_action('edit_term', array($this, 'edit_term'),11, 2); // calling *after* the Sitepress actions + + add_action('icl_ajx_custom_call', array($this, 'ajax_calls'), 10, 2); + add_action('wp_ajax_show_post_content', array($this, '_show_post_content')); + + if(isset($_GET['sm']) && ($_GET['sm'] == 'dashboard' || $_GET['sm'] == 'jobs')){@session_start();} + elseif(isset($_GET['page']) && preg_match('@/menu/translations-queue\.php$@', $_GET['page'])){@session_start();} + add_filter('icl_additional_translators', array($this, 'icl_additional_translators'), 99, 3); + + add_filter('icl_translators_list', array(__CLASS__, 'icanlocalize_translators_list')); + + add_action('user_register', array($this, 'clear_cache')); + add_action('profile_update', array($this, 'clear_cache')); + add_action('delete_user', array($this, 'clear_cache')); + add_action('added_existing_user', array($this, 'clear_cache')); + add_action('remove_user_from_blog', array($this, 'clear_cache')); + + add_action('admin_print_scripts', array($this, '_inline_js_scripts')); + + add_action('wp_ajax_icl_tm_user_search', array($this, '_user_search')); + + add_action('wp_ajax_icl_tm_abort_translation', array($this, 'abort_translation')); + + + } + + function save_settings() + { + global $sitepress, $sitepress_settings; + + $iclsettings[ 'translation-management' ] = $this->settings; + $custom_posts_sync_option = isset( $sitepress_settings[ 'custom_posts_sync_option' ] ) ? $sitepress_settings[ 'custom_posts_sync_option' ] : false; + + if ( is_array( $custom_posts_sync_option ) ) { + foreach ( $custom_posts_sync_option as $k => $v ) { + $iclsettings[ 'custom_posts_sync_option' ][ $k ] = $v; + } + } + $sitepress->save_settings( $iclsettings ); + } + + function init(){ + + global $wpdb, $current_user, $sitepress_settings, $sitepress, $pagenow; + + $this->settings =& $sitepress_settings['translation-management']; + + //logic for syncing comments + if($sitepress->get_option('sync_comments_on_duplicates')){ + add_action('delete_comment', array($this, 'duplication_delete_comment')); + add_action('edit_comment', array($this, 'duplication_edit_comment')); + add_action('wp_set_comment_status', array($this, 'duplication_status_comment'), 10, 2); + add_action('wp_insert_comment', array($this, 'duplication_insert_comment'), 100); + } + + $this->initial_custom_field_translate_states(); + + // defaults + if(!isset($this->settings['notification']['new-job'])) $this->settings['notification']['new-job'] = ICL_TM_NOTIFICATION_IMMEDIATELY; + if(!isset($this->settings['notification']['completed'])) $this->settings['notification']['completed'] = ICL_TM_NOTIFICATION_IMMEDIATELY; + if(!isset($this->settings['notification']['resigned'])) $this->settings['notification']['resigned'] = ICL_TM_NOTIFICATION_IMMEDIATELY; + if(!isset($this->settings['notification']['dashboard'])) $this->settings['notification']['dashboard'] = true; + if(!isset($this->settings['notification']['purge-old'])) $this->settings['notification']['purge-old'] = 7; + + if(!isset($this->settings['custom_fields_translation'])) $this->settings['custom_fields_translation'] = array(); + if(!isset($this->settings['doc_translation_method'])) $this->settings['doc_translation_method'] = ICL_TM_TMETHOD_MANUAL; + + get_currentuserinfo(); + $user = false; + if(isset($current_user->ID)){ + $user = new WP_User($current_user->ID); + } + + if(!$user || empty($user->data)) return; + + $ct['translator_id'] = $current_user->ID; + $ct['display_name'] = isset($user->data->display_name) ? $user->data->display_name : $user->data->user_login; + $ct['user_login'] = $user->data->user_login; + $ct['language_pairs'] = get_user_meta($current_user->ID, $wpdb->prefix.'language_pairs', true); + if(empty($ct['language_pairs'])) $ct['language_pairs'] = array(); + + $this->current_translator = (object)$ct; + + $this->load_config_pre_process(); + $this->load_plugins_wpml_config(); + $this->load_theme_wpml_config(); + $this->parse_wpml_config_files(); + $this->load_config_post_process(); + + if(isset($_POST['icl_tm_action'])){ + $this->process_request($_POST['icl_tm_action'], $_POST); + }elseif(isset($_GET['icl_tm_action'])){ + $this->process_request($_GET['icl_tm_action'], $_GET); + } + + //$this->load_plugins_wpml_config(); + //$this->load_theme_wpml_config(); + + if($GLOBALS['pagenow']=='edit.php'){ // use standard WP admin notices + add_action('admin_notices', array($this, 'show_messages')); + }else{ // use custom WP admin notices + add_action('icl_tm_messages', array($this, 'show_messages')); + } + + if(isset($_GET['page']) && basename($_GET['page']) == 'translations-queue.php' && isset($_GET['job_id'])){ + add_filter('admin_head',array($this, '_show_tinyMCE')); + } + + + //if(!isset($this->settings['doc_translation_method'])){ + if(isset($this->settings['doc_translation_method']) && $this->settings['doc_translation_method'] < 0 ){ + if(isset($_GET['sm']) && $_GET['sm']=='mcsetup' && isset($_GET['src']) && $_GET['src']=='notice'){ + $this->settings['doc_translation_method'] = ICL_TM_TMETHOD_MANUAL; + $this->save_settings(); + }else{ + add_action('admin_notices', array($this, '_translation_method_notice')); + } + } + + if(defined('WPML_TM_VERSION') && isset($_GET['page']) && $_GET['page'] == WPML_TM_FOLDER. '/menu/main.php' && isset($_GET['sm']) && $_GET['sm'] == 'translators'){ + $iclsettings =& $sitepress_settings; + $sitepress->get_icl_translator_status($iclsettings); + $sitepress->save_settings($iclsettings); + } + + // default settings + if(empty($this->settings['doc_translation_method']) || !defined('WPML_TM_VERSION')){ + $this->settings['doc_translation_method'] = ICL_TM_TMETHOD_MANUAL; + } + } + + function initial_custom_field_translate_states() { + global $wpdb; + + $cf_keys_limit = 1000; // jic + $custom_keys = $wpdb->get_col( " + SELECT meta_key + FROM $wpdb->postmeta + GROUP BY meta_key + ORDER BY meta_key + LIMIT $cf_keys_limit" ); + + $changed = false; + + foreach($custom_keys as $cfield) { + if(empty($this->settings['custom_fields_translation'][$cfield]) || $this->settings['custom_fields_translation'][$cfield] == 0) { + // see if a plugin handles this field + $override = apply_filters('icl_cf_translate_state', 'nothing', $cfield); + switch($override) { + case 'nothing': + break; + + case 'ignore': + $changed = true; + $this->settings['custom_fields_translation'][$cfield] = 3; + break; + + case 'translate': + $changed = true; + $this->settings['custom_fields_translation'][$cfield] = 2; + break; + + case 'copy': + $changed = true; + $this->settings['custom_fields_translation'][$cfield] = 1; + break; + } + + } + } + if ($changed) { + $this->save_settings(); + } + } + + function _translation_method_notice(){ + echo '

              '.sprintf(__('New - side-by-site translation editor: try it | no thanks.', 'sitepress'), + admin_url('admin.php?page='.WPML_TM_FOLDER.'/menu/main.php&sm=mcsetup&src=notice')) . '

              '; + } + + function _show_tinyMCE() { + wp_print_scripts('editor'); + //add_filter('the_editor', array($this, 'editor_directionality'), 9999); + add_filter('tiny_mce_before_init', array($this, '_mce_set_direction'), 9999); + add_filter('mce_buttons', array($this, '_mce_remove_fullscreen'), 9999); + + if (version_compare($GLOBALS['wp_version'], '3.1.4', '<=') && function_exists('wp_tiny_mce')) + try{ + @wp_tiny_mce(); + } catch(Exception $e) { /*don't do anything with this */ } + } + + function _mce_remove_fullscreen($options){ + foreach($options as $k=>$v) if($v == 'fullscreen') unset($options[$k]); + return $options; + } + + function _inline_js_scripts(){ + // remove fullscreen mode + if(defined('WPML_TM_FOLDER') && isset($_GET['page']) && $_GET['page'] == WPML_TM_FOLDER . '/menu/translations-queue.php' && isset($_GET['job_id'])){ + ?> + + get_translation_job((int)$_GET['job_id'], false, true); + if (!empty($job)) { + $rtl_translation = in_array($job->language_code, array('ar','he','fa')); + if ($rtl_translation) { + $settings['directionality'] = 'rtl'; + } else { + $settings['directionality'] = 'ltr'; + } + } + return $settings; + } + + /* + function editor_directionality($tag) { + $job = $this->get_translation_job((int)$_GET['job_id'], false, true); + $rtl_translation = in_array($job->language_code, array('ar','he','fa')); + if ($rtl_translation) { + $dir = 'dir="rtl"'; + } else { + $dir = 'dir="ltr"'; + } + return str_replace(' 1); + } + $this->add_translator($data['user_id'], $data['lang_pairs']); + $_user = new WP_User($data['user_id']); + wp_redirect('admin.php?page='.WPML_TM_FOLDER.'/menu/main.php&sm=translators&icl_tm_message='.urlencode(sprintf(__('%s has been added as a translator for this site.','sitepress'),$_user->data->display_name)).'&icl_tm_message_type=updated'); + } + break; + case 'edit_translator': + if(wp_create_nonce('edit_translator') == $data['edit_translator_nonce']){ + $this->edit_translator($data['user_id'], isset($data['lang_pairs']) ? $data['lang_pairs'] : array()); + $_user = new WP_User($data['user_id']); + wp_redirect('admin.php?page='.WPML_TM_FOLDER.'/menu/main.php&sm=translators&icl_tm_message='.urlencode(sprintf(__('Language pairs for %s have been edited.','sitepress'),$_user->data->display_name)).'&icl_tm_message_type=updated'); + } + break; + case 'remove_translator': + if(wp_create_nonce('remove_translator') == $data['remove_translator_nonce']){ + $this->remove_translator($data['user_id']); + $_user = new WP_User($data['user_id']); + wp_redirect('admin.php?page='.WPML_TM_FOLDER.'/menu/main.php&sm=translators&icl_tm_message='.urlencode(sprintf(__('%s has been removed as a translator for this site.','sitepress'),$_user->data->display_name)).'&icl_tm_message_type=updated'); + } + break; + case 'edit': + $this->selected_translator['ID'] = intval($data['user_id']); + break; + case 'dashboard_filter': + $_SESSION['translation_dashboard_filter'] = $data['filter']; + wp_redirect('admin.php?page='.WPML_TM_FOLDER . '/menu/main.php&sm=dashboard'); + break; + case 'sort': + if(isset($data['sort_by'])) $_SESSION['translation_dashboard_filter']['sort_by'] = $data['sort_by']; + if(isset($data['sort_order'])) $_SESSION['translation_dashboard_filter']['sort_order'] = $data['sort_order']; + break; + case 'reset_filters': + unset($_SESSION['translation_dashboard_filter']); + break; + case 'send_jobs': + if(isset($data['iclnonce']) && wp_verify_nonce($data['iclnonce'], 'pro-translation-icl')){ + $this->send_jobs($data); + } + break; + case 'jobs_filter': + $_SESSION['translation_jobs_filter'] = $data['filter']; + wp_redirect('admin.php?page='.WPML_TM_FOLDER . '/menu/main.php&sm=jobs'); + break; + case 'ujobs_filter': + $_SESSION['translation_ujobs_filter'] = $data['filter']; + wp_redirect('admin.php?page='.WPML_TM_FOLDER . '/menu/translations-queue.php'); + break; + case 'save_translation': + if(!empty($data['resign'])){ + $this->resign_translator($data['job_id']); + wp_redirect(admin_url('admin.php?page='.WPML_TM_FOLDER.'/menu/translations-queue.php&resigned='.$data['job_id'])); + exit; + }else{ + $this->save_translation($data); + } + break; + case 'save_notification_settings': + $this->settings['notification'] = $data['notification']; + $this->save_settings(); + $this->messages[] = array( + 'type'=>'updated', + 'text' => __('Preferences saved.', 'sitepress') + ); + break; + case 'create_job': + global $current_user; + if(!isset($this->current_translator->ID) && isset($current_user->ID)){ + $this->current_translator->ID = $current_user->ID; + } + $data['translator'] = $this->current_translator->ID; + + $job_ids = $this->send_jobs($data); + wp_redirect('admin.php?page='.WPML_TM_FOLDER . '/menu/translations-queue.php&job_id=' . array_pop($job_ids)); + break; + case 'cancel_jobs': + $ret = $this->cancel_translation_request($data['icl_translation_id']); + $this->messages[] = array( + 'type'=>'updated', + 'text' => __('Translation requests cancelled.', 'sitepress') + ); + break; + } + } + + function ajax_calls($call, $data){ + global $wpdb, $sitepress, $sitepress_settings; + switch($call){ + /* + case 'save_dashboard_setting': + $iclsettings['dashboard'] = $sitepress_settings['dashboard']; + if(isset($data['setting']) && isset($data['value'])){ + $iclsettings['dashboard'][$data['setting']] = $data['value']; + $sitepress->save_settings($iclsettings); + } + break; + */ + case 'assign_translator': + + $_exp = explode('-', $data['translator_id']); + $service = isset($_exp[1]) ? $_exp[1] : 'local'; + $translator_id = $_exp[0]; + if($this->assign_translation_job($data['job_id'], $translator_id, $service)){ + if($service == 'icanlocalize'){ + $job = $this->get_translation_job($data['job_id']); + global $ICL_Pro_Translation; + $ICL_Pro_Translation->send_post($job->original_doc_id, array($job->language_code), $translator_id); + foreach($sitepress_settings['icl_lang_status'] as $lp){ + if($lp['from'] == $job->source_language_code && $lp['to'] == $job->language_code){ + $contract_id = $lp['contract_id']; + $lang_tr_id = $lp['id']; + break; + } + } + $translator_edit_link = $sitepress->create_icl_popup_link(ICL_API_ENDPOINT . '/websites/' . $sitepress_settings['site_id'] + . '/website_translation_offers/' . $lang_tr_id . '/website_translation_contracts/' + . $contract_id, array('title' => __('Chat with translator', 'sitepress'), 'unload_cb' => 'icl_thickbox_refresh')) + . esc_html(ICL_Pro_Translation::get_translator_name($translator_id)) . ' (ICanLocalize)'; + + }else{ + $translator_edit_link = '' . + esc_html($wpdb->get_var($wpdb->prepare("SELECT display_name FROM {$wpdb->users} WHERE ID=%d",$data['translator_id']))) . ''; + } + echo json_encode(array('error'=>0, 'message'=>$translator_edit_link, 'status'=>$this->status2text(ICL_TM_WAITING_FOR_TRANSLATOR), 'service'=>$service)); + }else{ + echo json_encode(array('error'=>1)); + } + break; + case 'icl_cf_translation': + if(!empty($data['cf'])){ + foreach($data['cf'] as $k=>$v){ + $cft[base64_decode($k)] = $v; + } + $this->settings['custom_fields_translation'] = $cft; + $this->save_settings(); + } + echo '1|'; + break; + case 'icl_doc_translation_method': + $this->settings['doc_translation_method'] = intval($data['t_method']); + $sitepress->save_settings(array('hide_how_to_translate' => empty($data['how_to_translate']))); + $this->save_settings(); + echo '1|'; + break; + case 'reset_duplication': + $this->reset_duplicate_flag($_POST['post_id']); + break; + case 'set_duplication': + $this->set_duplicate($_POST['post_id']); + break; + case 'make_duplicates': + $mdata['iclpost'] = array($data['post_id']); + $langs = explode(',', $data['langs']); + foreach($langs as $lang){ + $mdata['duplicate_to'][$lang] = 1; + } + $this->make_duplicates($mdata); + break; + } + } + + function show_messages(){ + if(!empty($this->messages)){ + foreach($this->messages as $m){ + echo '

              ' . $m['text'] . '

              '; + } + } + } + + /* TRANSLATORS */ + /* ******************************************************************************************** */ + function add_translator($user_id, $language_pairs){ + global $wpdb; + + $user = new WP_User($user_id); + $user->add_cap('translate'); + + $um = get_user_meta($user_id, $wpdb->prefix . 'language_pairs', true); + if(!empty($um)){ + foreach($um as $fr=>$to){ + if(isset($language_pairs[$fr])){ + $language_pairs[$fr] = array_merge($language_pairs[$fr], $to); + } + + } + } + + update_user_meta($user_id, $wpdb->prefix . 'language_pairs', $language_pairs); + $this->clear_cache(); + } + + function edit_translator($user_id, $language_pairs){ + global $wpdb; + $_user = new WP_User($user_id); + if(empty($language_pairs)){ + $this->remove_translator($user_id); + wp_redirect('admin.php?page='.WPML_TM_FOLDER.'/menu/main.php&sm=translators&icl_tm_message='. + urlencode(sprintf(__('%s has been removed as a translator for this site.','sitepress'),$_user->data->display_name)).'&icl_tm_message_type=updated'); exit; + } + else{ + if(!$_user->has_cap('translate')) $_user->add_cap('translate'); + update_user_meta($user_id, $wpdb->prefix . 'language_pairs', $language_pairs); + } + } + + function remove_translator($user_id){ + global $wpdb; + $user = new WP_User($user_id); + $user->remove_cap('translate'); + delete_user_meta($user_id, $wpdb->prefix . 'language_pairs'); + $this->clear_cache(); + } + + function is_translator($user_id, $args = array()){ + // $lang_from + // $lang_to + // $job_id + + //$default_args = array(); + //extract($default_args); + extract($args, EXTR_OVERWRITE); + + global $wpdb; + $user = new WP_User($user_id); + $is_translator = $user->has_cap('translate'); + + if(isset($lang_from) && isset($lang_to)){ + $um = get_user_meta($user_id, $wpdb->prefix . 'language_pairs', true); + $is_translator = $is_translator && isset($um[$lang_from]) && isset($um[$lang_from][$lang_to]) && $um[$lang_from][$lang_to]; + } + if(isset($job_id)){ + $translator_id = $wpdb->get_var($wpdb->prepare(" + SELECT j.translator_id + FROM {$wpdb->prefix}icl_translate_job j + JOIN {$wpdb->prefix}icl_translation_status s ON j.rid = s.rid + WHERE job_id = %d AND s.translation_service='local' + ", $job_id)); + + //$is_translator = $is_translator && ($translator_id == $user_id || ($translator_id === '0')); + $is_translator = $is_translator && (($translator_id == $user_id) || empty($translator_id)); + + } + + return $is_translator; + } + + function translator_exists($id, $from, $to, $type = 'local'){ + global $sitepress_settings; + $exists = false; + if($type == 'icanlocalize' && !empty($sitepress_settings['icl_lang_status'])){ + foreach($sitepress_settings['icl_lang_status'] as $lpair){ + if($lpair['from'] == $from && $lpair['to'] == $to){ + if(!empty($lpair['translators'])){ + foreach($lpair['translators'] as $t){ + if($t['id'] == $id){ + $exists = true; + break(2); + } + } + } + } + } + }elseif($type == 'local'){ + $exists = $this->is_translator($id, array('lang_from'=>$from, 'lang_to'=>$to)); + } + return $exists; + } + + function set_default_translator($id, $from, $to, $type = 'local'){ + global $sitepress, $sitepress_settings; + $iclsettings['default_translators'] = isset($sitepress_settings['default_translators']) ? $sitepress_settings['default_translators'] : array(); + $iclsettings['default_translators'][$from][$to] = array('id'=>$id, 'type'=>$type); + $sitepress->save_settings($iclsettings); + } + + function get_default_translator($from, $to){ + global $sitepress_settings; + if(isset($sitepress_settings['default_translators'][$from][$to])){ + $dt = $sitepress_settings['default_translators'][$from][$to]; + }else{ + $dt = array(); + } + return $dt; + } + + public static function get_blog_not_translators(){ + global $wpdb; + $cached_translators = get_option($wpdb->prefix . 'icl_non_translators_cached', array()); + if (!empty($cached_translators)) { + return $cached_translators; + } + $sql = "SELECT u.ID, u.user_login, u.display_name, m.meta_value AS caps + FROM {$wpdb->users} u JOIN {$wpdb->usermeta} m ON u.id=m.user_id AND m.meta_key = '{$wpdb->prefix}capabilities' ORDER BY u.display_name"; + $res = $wpdb->get_results($sql); + + $users = array(); + foreach($res as $row){ + $caps = @unserialize($row->caps); + if(!isset($caps['translate'])){ + $users[] = $row; + } + } + update_option($wpdb->prefix . 'icl_non_translators_cached', $users); + return $users; + } + + /** + * Implementation of 'icl_translators_list' hook + * + * @global object $sitepress + * @param array $array + * @return array + */ + public static function icanlocalize_translators_list() { + global $sitepress_settings, $sitepress; + + $lang_status = isset($sitepress_settings['icl_lang_status']) ? $sitepress_settings['icl_lang_status'] : array(); + if (0 != key($lang_status)){ + $buf[] = $lang_status; + $lang_status = $buf; + } + + $translators = array(); + foreach($lang_status as $lpair){ + foreach((array)$lpair['translators'] as $translator){ + $translators[$translator['id']]['name'] = $translator['nickname']; + $translators[$translator['id']]['langs'][$lpair['from']][] = $lpair['to']; + $translators[$translator['id']]['type'] = 'ICanLocalize'; + $translators[$translator['id']]['action'] = $sitepress->create_icl_popup_link(ICL_API_ENDPOINT . '/websites/' . $sitepress_settings['site_id'] + . '/website_translation_offers/' . $lpair['id'] . '/website_translation_contracts/' + . $translator['contract_id'], array('title' => __('Chat with translator', 'sitepress'), 'unload_cb' => 'icl_thickbox_refresh', 'ar'=>1)) . __('Chat with translator', 'sitepress') . ''; + } + } + + return $translators; + } + + public static function get_blog_translators($args = array()){ + global $wpdb; + $args_default = array('from'=>false, 'to'=>false); + extract($args_default); + extract($args, EXTR_OVERWRITE); + +// $sql = "SELECT u.ID, u.user_login, u.display_name, u.user_email, m.meta_value AS caps +// FROM {$wpdb->users} u JOIN {$wpdb->usermeta} m ON u.id=m.user_id AND m.meta_key LIKE '{$wpdb->prefix}capabilities' ORDER BY u.display_name"; +// $res = $wpdb->get_results($sql); + + $cached_translators = get_option($wpdb->prefix . 'icl_translators_cached', array()); + + if (empty($cached_translators)) { + $sql = "SELECT u.ID FROM {$wpdb->users} u JOIN {$wpdb->usermeta} m ON u.id=m.user_id AND m.meta_key = '{$wpdb->prefix}language_pairs' ORDER BY u.display_name"; + $res = $wpdb->get_results($sql); + update_option($wpdb->prefix . 'icl_translators_cached', $res); + } else { + $res = $cached_translators; + } + + $users = array(); + foreach($res as $row){ + $user = new WP_User($row->ID); +// $caps = @unserialize($row->caps); +// $row->language_pairs = (array)get_user_meta($row->ID, $wpdb->prefix.'language_pairs', true); + $user->language_pairs = (array)get_user_meta($row->ID, $wpdb->prefix.'language_pairs', true); +// if(!empty($from) && !empty($to) && (!isset($row->language_pairs[$from][$to]) || !$row->language_pairs[$from][$to])){ +// continue; +// } + if(!empty($from) && !empty($to) && (!isset($user->language_pairs[$from][$to]) || !$user->language_pairs[$from][$to])){ + continue; + } +// if(isset($caps['translate'])){ +// $users[] = $user; +// } + if($user->has_cap('translate')){ + $users[] = $user; + } + } + return $users; + } + + function get_selected_translator(){ + global $wpdb; + if($this->selected_translator['ID']){ + $user = new WP_User($this->selected_translator['ID']); + $this->selected_translator['display_name'] = $user->data->display_name; + $this->selected_translator['user_login'] = $user->data->user_login; + $this->selected_translator['language_pairs'] = get_user_meta($this->selected_translator['ID'], $wpdb->prefix.'language_pairs', true); + }else{ + $this->selected_translator['ID'] = 0; + } + return (object)$this->selected_translator; + } + + function get_current_translator(){ + return $this->current_translator; + } + + public function get_translator_edit_url($translator_id){ + $url = ''; + if(!empty($translator_id)){ + $url = 'admin.php?page='. WPML_TM_FOLDER .'/menu/main.php&sm=translators&icl_tm_action=edit&user_id='. $translator_id; + } + return $url; + } + + public function translators_dropdown($args = array()){ + global $sitepress_settings; + $args_default = array( + 'from'=>false, 'to'=>false, + 'name' => 'translator_id', + 'selected' => 0, + 'echo' => true, + 'services' => array('local'), + 'show_service' => true, + 'disabled' => false + ); + extract($args_default); + extract($args, EXTR_OVERWRITE); + + $translators = array(); + + /** @var $services TYPE_NAME */ + if(in_array('icanlocalize', $services)){ + if(empty($sitepress_settings['icl_lang_status'])) $sitepress_settings['icl_lang_status'] = array(); + foreach((array)$sitepress_settings['icl_lang_status'] as $langpair){ + if($from && $from != $langpair['from']) continue; + if($to && $to != $langpair['to']) continue; + + if(!empty($langpair['translators'])){ + if (1 < count($langpair['translators'])) { + $translators[] = (object) array( + 'ID' => '0-icanlocalize', + 'display_name' => __('First available', 'sitepress'), + 'service' => 'ICanLocalize' + ); + } + foreach($langpair['translators'] as $tr){ + if(!isset($_icl_translators[$tr['id']])){ + $translators[] = $_icl_translators[$tr['id']] = (object) array( + 'ID'=>$tr['id'].'-icanlocalize', + 'display_name'=>$tr['nickname'], + 'service' => 'ICanLocalize' + ); + } + } + } + } + } + + if(in_array('local', $services)){ + $translators[] = (object) array( + 'ID' => 0, + 'display_name' => __('First available', 'sitepress'), + ); + $translators = array_merge($translators, self::get_blog_translators(array('from'=>$from,'to'=>$to))); + } + $translators = apply_filters('wpml_tm_translators_list', $translators); + ?> + + get_var($wpdb->prepare(" + SELECT COUNT(rid) FROM {$wpdb->prefix}icl_translation_status WHERE translation_service=%s + ", $service)); + return $n; + } + + public function get_number_of_docs_pending($service = 'icanlocalize'){ + global $wpdb; + $n = $wpdb->get_var($wpdb->prepare(" + SELECT COUNT(rid) FROM {$wpdb->prefix}icl_translation_status WHERE translation_service=%s AND status < " . ICL_TM_COMPLETE . " + ", $service)); + return $n; + } + + + /* HOOKS */ + /* ******************************************************************************************** */ + function save_post_actions($post_id, $post, $force_set_status = false){ + global $wpdb, $sitepress, $current_user; + + // skip revisions + if($post->post_type == 'revision'){ + return; + } + // skip auto-drafts + if($post->post_status == 'auto-draft'){ + return; + } + // skip autosave + if(isset($_POST['autosave'])){ + return; + } + if(!empty($_POST['icl_trid'])){ + $trid = $sitepress->get_element_trid($post_id, 'post_'.$post->post_type); + } + + + // set trid and lang code if front-end translation creating + $trid = apply_filters('wpml_tm_save_post_trid_value', isset($trid)?$trid:'',$post_id); + $lang = apply_filters('wpml_tm_save_post_lang_value', isset($lang)?$lang:'',$post_id); + + // is this the original document? + $is_original = false; + if(!empty($trid)){ + $is_original = $wpdb->get_var($wpdb->prepare("SELECT source_language_code IS NULL FROM {$wpdb->prefix}icl_translations WHERE element_id=%d AND trid=%d", $post_id, $trid)); + } + + // when a manual translation is added/edited make sure to update translation tables + if(!empty($trid) && !$is_original){ + + if((!isset($lang) || !$lang) && isset($_POST['icl_post_language']) && !empty($_POST['icl_post_language'])){ + $lang = $_POST['icl_post_language']; + } + + $res = $wpdb->get_row($wpdb->prepare(" + SELECT element_id, language_code FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND source_language_code IS NULL + ", $trid)); + $original_post_id = $res->element_id; + $from_lang = $res->language_code; + $original_post = get_post($original_post_id); + $translation_id = $wpdb->get_var($wpdb->prepare(" + SELECT translation_id FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND language_code='%s' + ", $trid, $lang)); + $md5 = $this->post_md5($original_post); + + + get_currentuserinfo(); + $user_id = $current_user->ID; + + + if(!$this->is_translator($user_id, array('lang_from'=>$from_lang, 'lang_to'=>$lang))){ + $this->add_translator($user_id, array($from_lang=>array($lang=>1))); + } + + if($translation_id){ + $translation_package = $this->create_translation_package($original_post_id); + + list($rid, $update) = $this->update_translation_status(array( + 'translation_id' => $translation_id, + 'status' => isset($force_set_status) && $force_set_status > 0 ? $force_set_status : ICL_TM_COMPLETE, + 'translator_id' => $user_id, + 'needs_update' => 0, + 'md5' => $md5, + 'translation_service' => 'local', + 'translation_package' => serialize($translation_package) + )); + if(!$update){ + $job_id = $this->add_translation_job($rid, $user_id , $translation_package); + }else{ + $job_id = $wpdb->get_var($wpdb->prepare("SELECT MAX(job_id) FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d GROUP BY rid", $rid)); + } + + // saving the translation + $this->save_job_fields_from_post($job_id, $post); + } + } + + // if this is an original post - compute md5 hash and mark for update if neded + if(!empty($trid) && empty($_POST['icl_minor_edit'])){ + + $is_original = false; + $translations = $sitepress->get_element_translations($trid, 'post_' . $post->post_type); + + foreach($translations as $lang=>$translation){ + if($translation->original == 1 && $translation->element_id == $post_id){ + $is_original = true; + break; + } + } + + if($is_original){ + $md5 = $this->post_md5($post_id); + + foreach($translations as $lang=>$translation){ + if(!$translation->original){ + $emd5 = $wpdb->get_var($wpdb->prepare("SELECT md5 FROM {$wpdb->prefix}icl_translation_status WHERE translation_id = %d", $translation->translation_id)); + + if($md5 != $emd5){ + + $translation_package = $this->create_translation_package($post_id); + + list($rid, $update) = $this->update_translation_status( + array( + 'translation_id'=>$translation->translation_id, + 'needs_update'=>1, + 'md5'=>$md5, + 'translation_package' => serialize($translation_package) + ) + ); + + // update + + $translator_id = $wpdb->get_var($wpdb->prepare("SELECT translator_id + FROM {$wpdb->prefix}icl_translation_status WHERE translation_id = %d", $translation->translation_id)); + $job_id = $this->add_translation_job($rid, $translator_id, $translation_package); + + // updating a post that's being translated - update fields in icl_translate + if(false === $job_id){ + $job_id = $wpdb->get_var($wpdb->prepare("SELECT MAX(job_id) FROM {$wpdb->prefix}icl_translate_job WHERE rid = %d", $rid)); + if($job_id){ + $job = $this->get_translation_job($job_id); + + foreach($job->elements as $element){ + unset($field_data); + $_taxs_ids = false; + switch($element->field_type){ + case 'title': + $field_data = $this->encode_field_data($post->post_title, $element->field_format); + break; + case 'body': + $field_data = $this->encode_field_data($post->post_content, $element->field_format); + break; + case 'excerpt': + $field_data = $this->encode_field_data($post->post_excerpt, $element->field_format); + break; + case 'tags': + $terms = (array)get_the_terms( $post->ID , 'post_tag' ); + $_taxs = array(); + foreach($terms as $term){ + $_taxs[] = $term->name; + $_taxs_ids[] = $term->term_taxonomy_id; + } + $field_data = $this->encode_field_data($_taxs, $element->field_format); + break; + case 'categories': + $terms = get_the_terms( $post->ID , 'category' ); + $_taxs = array(); + foreach($terms as $term){ + $_taxs[] = $term->name; + $_taxs_ids[] = $term->term_taxonomy_id; + } + $field_data = $this->encode_field_data($_taxs, $element->field_format); + break; + + default: + if(false !== strpos($element->field_type, 'field-') && !empty($this->settings['custom_fields_translation'])){ + $cf_name = preg_replace('#^field-#', '', $element->field_type); + if(isset($this->settings['custom_fields_translation'][$cf_name])){ + $field_data = get_post_meta($post->ID, $cf_name, 1); + $field_data = $this->encode_field_data($field_data, $element->field_format); + } + }else{ + // taxonomies + if(taxonomy_exists($element->field_type)){ + $terms = get_the_terms( $post->ID , $element->field_type ); + $_taxs = array(); + foreach($terms as $term){ + $_taxs[] = $term->name; + $_taxs_ids[] = $term->term_taxonomy_id; + } + $field_data = $this->encode_field_data($_taxs, $element->field_format); + } + } + } + + if(isset($field_data) && $field_data != $element->field_data){ + + $wpdb->update($wpdb->prefix.'icl_translate', + array('field_data'=>$field_data), + array('tid'=>$element->tid) + ); + + if($_taxs_ids && $element->field_type == 'categories'){ + $wpdb->update($wpdb->prefix.'icl_translate', + array('field_data'=>join(',', $_taxs_ids)), + array('job_id'=>$job_id, 'field_type' => 'category_ids') + ); + } + + } + + } + + } + + } + + } + } + } + } + } + + // sync copies/duplicates + $duplicates = $this->get_duplicates($post_id); + foreach($duplicates as $lang => $_pid){ + $this->make_duplicate($post_id, $lang); + } + + } + + function delete_post_actions($post_id){ + global $wpdb; + $post_type = $wpdb->get_var("SELECT post_type FROM {$wpdb->posts} WHERE ID={$post_id}"); + if(!empty($post_type)){ + $translation_id = $wpdb->get_var($wpdb->prepare("SELECT translation_id FROM {$wpdb->prefix}icl_translations WHERE element_id=%d AND element_type=%s", $post_id, 'post_' . $post_type)); + if($translation_id){ + $rid = $wpdb->get_var($wpdb->prepare("SELECT rid FROM {$wpdb->prefix}icl_translation_status WHERE translation_id=%d", $translation_id)); + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translation_status WHERE translation_id=%d", $translation_id)); + if($rid){ + $jobs = $wpdb->get_col($wpdb->prepare("SELECT job_id FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d", $rid)); + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d", $rid)); + if(!empty($jobs)){ + $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translate WHERE job_id IN (".join(',', $jobs).")"); + } + } + } + } + } + + function edit_term($cat_id, $tt_id){ + global $wpdb, $sitepress; + + $el_type = $wpdb->get_var("SELECT taxonomy FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id={$tt_id}"); + + if(!$sitepress->is_translated_taxonomy($el_type)){ + return; + }; + + $icl_el_type = 'tax_' . $el_type; + + // has trid only when it's a translation of another tag + $trid = isset($_POST['icl_trid']) && (isset($_POST['icl_'.$icl_el_type.'_language'])) ? $_POST['icl_trid']:null; + // see if we have a "translation of" setting. + $src_language = false; + if (isset($_POST['icl_translation_of']) && $_POST['icl_translation_of']) { + $src_term_id = $_POST['icl_translation_of']; + if ($src_term_id != 'none') { + $res = $wpdb->get_row("SELECT trid, language_code + FROM {$wpdb->prefix}icl_translations WHERE element_id={$src_term_id} AND element_type='{$icl_el_type}'"); + $trid = $res->trid; + $src_language = $res->language_code; + } else { + $trid = null; + } + } + + if(isset($_POST['action']) && $_POST['action'] == 'inline-save-tax'){ + $trid = $sitepress->get_element_trid($tt_id, $icl_el_type); + } + + // update icl_translate if necessary + // get the terms translations + $element_translations = $sitepress->get_element_translations($trid, $icl_el_type); + $tr_ids = array(); + foreach($element_translations as $el_lang => $el_info){ + if($tt_id != $el_info->term_id){ + $tr_ids[] = $el_info->term_id; + } + } + + // does the term taxonomy we are currently editing have a record in the icl_translate? + $results = $wpdb->get_results( + "SELECT field_data, job_id FROM {$wpdb->prefix}icl_translate WHERE field_type = '{$el_type}_ids'" + ); + + if(!empty($results)){ + $job_ids = array(); // this will hold the job ids that contain our term under field_data + $job_ids2 = array(); // this will hold the job ids that contain our term under field_data_translated + foreach($results as $result){ + $r_ids = explode (',', $result->field_data); + // is the term found? + if(in_array ($tt_id, $r_ids)){ + $job_ids[] = $result->job_id; + // this is used further down to identify the correct term name to update + foreach($r_ids as $k => $v){ + if($v == $tt_id){ + $t_k[] = $k; + } + } + } + + // the name of the current category being edited could also be under field_data_translated + if(!empty($tr_ids)){ + foreach($tr_ids as $tr_id){ + // is the term found? + if(in_array ($tr_id, $r_ids)){ + $job_ids2[] = $result->job_id; + // this is used further down to identify the correct term name to update + foreach($r_ids as $k => $v){ + if($v == $tr_id){ + $t_k2[] = $k; + } + } + } + } + } + } + + // if we have job_ids to be updated proceed + if(!empty($job_ids)){ + $in = implode (',', $job_ids); + $field_type = ($el_type == 'category' ? 'categories' : $el_type); + //grab the term names + $results = $wpdb->get_results( + "SELECT tid, field_data, field_format FROM {$wpdb->prefix}icl_translate WHERE job_id IN ({$in}) AND field_type = '{$field_type}'" + ); + + $count = 0; + foreach($results as $result){ + // decode + $decoded_data = self::decode_field_data($result->field_data, $result->field_format); + // we may have multiple comma separated term names - pass the new term name to the correct one! + $decoded_data[$t_k[$count]] = $_POST['name']; + // encode + $encoded_data =$this->encode_field_data($decoded_data, $result->field_format); + // update + $wpdb->update($wpdb->prefix.'icl_translate', + array('field_data'=>$encoded_data), + array('tid'=>$result->tid) + ); + $count++; + } + + // update the translation status as "needs_update" + foreach($job_ids as $job_id){ + list($translator_id, $rid) = $wpdb->get_row($wpdb->prepare("SELECT translator_id, rid FROM {$wpdb->prefix}icl_translate_job WHERE job_id=%d", $job_id), ARRAY_N); + // update + $wpdb->update($wpdb->prefix.'icl_translation_status', + array('needs_update'=>1), + array('rid'=>$rid, 'translator_id'=>$translator_id) + ); + } + } + + // if we have job_ids2 to be updated proceed + if(!empty($job_ids2)){ + $in = implode (',', $job_ids2); + $field_type = ($el_type == 'category' ? 'categories' : $el_type); + //grab the term names + $results = $wpdb->get_results( + "SELECT tid, field_data_translated, field_format FROM {$wpdb->prefix}icl_translate WHERE job_id IN ({$in}) AND field_type = '{$field_type}'" + ); + + $count = 0; + foreach($results as $result){ + if(!empty($result->field_data_translated)){ + // decode + $decoded_data = self::decode_field_data($result->field_data_translated, $result->field_format); + // we may have multiple comma separated term names - pass the new term name to the correct one! + $decoded_data[$t_k2[$count]] = $_POST['name']; + // encode + $encoded_data =$this->encode_field_data($decoded_data, $result->field_format); + // update + $wpdb->update($wpdb->prefix.'icl_translate', + array('field_data_translated'=>$encoded_data), + array('tid'=>$result->tid) + ); + } + $count++; + } + } + } + } + + /* TRANSLATIONS */ + /* ******************************************************************************************** */ + /** + * calculate post md5 + * + * @param object|int $post + * @return string + * + * @todo full support for custom posts and custom taxonomies + */ + function post_md5($post){ + + if (isset($post->external_type) && $post->external_type) { + + $md5str = ''; + + foreach ($post->string_data as $key => $value) { + $md5str .= $key . $value; + } + + + } else { + + $post_tags = $post_categories = $custom_fields_values = array(); + + if(is_numeric($post)){ + $post = get_post($post); + } + + foreach(wp_get_object_terms($post->ID, 'post_tag') as $tag){ + $post_tags[] = $tag->name; + } + if(is_array($post_tags)){ + sort($post_tags, SORT_STRING); + } + foreach(wp_get_object_terms($post->ID, 'category') as $cat){ + $post_categories[] = $cat->name; + } + if(is_array($post_categories)){ + sort($post_categories, SORT_STRING); + } + + global $wpdb, $sitepress_settings; + // get custom taxonomies + $taxonomies = $wpdb->get_col(" + SELECT DISTINCT tx.taxonomy + FROM {$wpdb->term_taxonomy} tx JOIN {$wpdb->term_relationships} tr ON tx.term_taxonomy_id = tr.term_taxonomy_id + WHERE tr.object_id = {$post->ID} + "); + + sort($taxonomies, SORT_STRING); + foreach($taxonomies as $t){ + if(taxonomy_exists($t)){ + if(@intval($sitepress_settings['taxonomies_sync_option'][$t]) == 1){ + $taxs = array(); + foreach(wp_get_object_terms($post->ID, $t) as $trm){ + $taxs[] = $trm->name; + } + if($taxs){ + sort($taxs,SORT_STRING); + $all_taxs[] = '['.$t.']:'.join(',',$taxs); + } + } + } + } + + $custom_fields_values = array(); + if(is_array($this->settings['custom_fields_translation'])){ + foreach($this->settings['custom_fields_translation'] as $cf => $op){ + if ($op == 2 || $op == 1) { + $value = get_post_meta($post->ID, $cf, true); + if(!is_array($value)){ + $custom_fields_values[] = $value; + } + } + } + } + + $md5str = + $post->post_title . ';' . + $post->post_content . ';' . + join(',',$post_tags).';' . + join(',',$post_categories) . ';' . + join(',', $custom_fields_values); + + if(!empty($all_taxs)){ + $md5str .= ';' . join(';', $all_taxs); + } + + if($sitepress_settings['translated_document_page_url'] == 'translate'){ + $md5str .= $post->post_name . ';'; + } + + + } + + $md5 = md5($md5str); + + return $md5; + } + + /** + * get documents + * + * @param array $args + */ + function get_documents($args){ + + + $parent_id = false; + $parent_all = false; + $to_lang = false; + $from_lang = false; + + extract($args); + + global $wpdb, $wp_query, $sitepress; + + $t_el_types = array_keys($sitepress->get_translatable_documents()); + + // SELECT + $select = " p.ID AS post_id, p.post_title, p.post_content, p.post_type, p.post_status, p.post_date, t.trid, t.source_language_code <> '' AS is_translation"; + if($to_lang){ + $select .= ", iclts.status, iclts.needs_update"; + }else{ + foreach($sitepress->get_active_languages() as $lang){ + if($lang['code'] == $from_lang) continue; + $tbl_alias_suffix = str_replace('-','_',$lang['code']); + $select .= ", iclts_{$tbl_alias_suffix}.status AS status_{$tbl_alias_suffix}, iclts_{$tbl_alias_suffix}.needs_update AS needs_update_{$tbl_alias_suffix}"; + } + } + + // FROM + $from = " {$wpdb->posts} p"; + + // JOIN + $join = ""; + $join .= " LEFT JOIN {$wpdb->prefix}icl_translations t ON t.element_id=p.ID\n"; + if($to_lang){ + $tbl_alias_suffix = str_replace('-','_',$to_lang); + $join .= " LEFT JOIN {$wpdb->prefix}icl_translations iclt_{$tbl_alias_suffix} + ON iclt_{$tbl_alias_suffix}.trid=t.trid AND iclt_{$tbl_alias_suffix}.language_code='{$to_lang}'\n"; + $join .= " LEFT JOIN {$wpdb->prefix}icl_translation_status iclts ON iclts.translation_id=iclt_{$tbl_alias_suffix}.translation_id\n"; + }else{ + foreach($sitepress->get_active_languages() as $lang){ + if($lang['code'] == $from_lang) continue; + $tbl_alias_suffix = str_replace('-','_',$lang['code']); + $join .= " LEFT JOIN {$wpdb->prefix}icl_translations iclt_{$tbl_alias_suffix} + ON iclt_{$tbl_alias_suffix}.trid=t.trid AND iclt_{$tbl_alias_suffix}.language_code='{$lang['code']}'\n"; + $join .= " LEFT JOIN {$wpdb->prefix}icl_translation_status iclts_{$tbl_alias_suffix} + ON iclts_{$tbl_alias_suffix}.translation_id=iclt_{$tbl_alias_suffix}.translation_id\n"; + } + } + + + // WHERE + $where = " t.language_code = '{$from_lang}' AND p.post_status NOT IN ('trash', 'auto-draft') \n"; + if(!empty($type)){ + $where .= " AND p.post_type = '{$type}'"; + $where .= " AND t.element_type = 'post_{$type}'\n"; + }else{ + $where .= " AND p.post_type IN ('".join("','",$t_el_types)."')\n"; + foreach($t_el_types as $k=>$v){ + $t_el_types[$k] = 'post_' . $v; + } + $where .= " AND t.element_type IN ('".join("','",$t_el_types)."')\n"; + } + if(!empty($title)){ + $where .= " AND p.post_title LIKE '%".esc_sql($title)."%'\n"; + } + + if(!empty($status)){ + $where .= " AND p.post_status = '{$status}'\n"; + } + + if(isset($from_date)){ + $where .= " AND p.post_date > '{$from_date}'\n"; + } + + if(isset($to_date)){ + $where .= " AND p.post_date > '{$to_date}'\n"; + } + + if($tstatus){ + if($to_lang){ + if($tstatus == 'not'){ + $where .= " AND (iclts.status IS NULL OR iclts.status = ".ICL_TM_WAITING_FOR_TRANSLATOR." OR iclts.needs_update = 1)\n"; + }elseif($tstatus == 'need-update'){ + $where .= " AND iclts.needs_update = 1\n"; + }elseif($tstatus == 'in_progress'){ + $where .= " AND iclts.status = ".ICL_TM_IN_PROGRESS." AND iclts.needs_update = 0\n"; + }elseif($tstatus == 'complete'){ + $where .= " AND iclts.status = ".ICL_TM_COMPLETE." AND iclts.needs_update = 0\n"; + } + + }else{ + if($tstatus == 'not'){ + $where .= " AND ("; + $wheres = array(); + foreach($sitepress->get_active_languages() as $lang){ + if($lang['code'] == $from_lang) continue; + $tbl_alias_suffix = str_replace('-','_',$lang['code']); + $wheres[] = "iclts_{$tbl_alias_suffix}.status IS NULL OR iclts_{$tbl_alias_suffix}.status = ".ICL_TM_WAITING_FOR_TRANSLATOR." OR iclts_{$tbl_alias_suffix}.needs_update = 1\n"; + } + $where .= join(' OR ', $wheres) . ")"; + }elseif($tstatus == 'need-update'){ + $where .= " AND ("; + $wheres = array(); + foreach($sitepress->get_active_languages() as $lang){ + if($lang['code'] == $from_lang) continue; + $tbl_alias_suffix = str_replace('-','_',$lang['code']); + $wheres[] = "iclts_{$tbl_alias_suffix}.needs_update = 1\n"; + } + $where .= join(' OR ', $wheres) . ")"; + }elseif($tstatus == 'in_progress'){ + $where .= " AND ("; + $wheres = array(); + foreach($sitepress->get_active_languages() as $lang){ + if($lang['code'] == $from_lang) continue; + $tbl_alias_suffix = str_replace('-','_',$lang['code']); + $wheres[] = "iclts_{$tbl_alias_suffix}.status = ".ICL_TM_IN_PROGRESS."\n"; + } + $where .= join(' OR ', $wheres) . ")"; + }elseif($tstatus == 'complete'){ + foreach($sitepress->get_active_languages() as $lang){ + if($lang['code'] == $from_lang) continue; + $tbl_alias_suffix = str_replace('-','_',$lang['code']); + $where .= " AND iclts_{$tbl_alias_suffix}.status = ".ICL_TM_COMPLETE." AND iclts_{$tbl_alias_suffix}.needs_update = 0\n"; + } + } + } + } + + if(isset($parent_type) && $parent_type == 'page' && $parent_id > 0){ + if($parent_all){ + $children = icl_get_post_children_recursive($parent_id); + if(!$children) $children[] = -1; + $where .= ' AND p.ID IN (' . join(',', $children) . ')'; + }else{ + $where .= ' AND p.post_parent=' . intval($parent_id); + } + } + + if(isset($parent_type) && $parent_type == 'category' && $parent_id > 0){ + if($parent_all){ + $children = icl_get_tax_children_recursive($parent_id); + $children[] = $parent_id; + $join .= " JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id + JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id AND taxonomy = 'category' + JOIN {$wpdb->terms} tm ON tt.term_id = tm.term_id AND tm.term_id IN(" . join(',', $children) . ")"; + }else{ + $join .= " JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id + JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id AND taxonomy = 'category' + JOIN {$wpdb->terms} tm ON tt.term_id = tm.term_id AND tm.term_id = " . intval($parent_id); + } + } + + // ORDER + if($sort_by){ + $order = " $sort_by "; + }else{ + $order = " p.post_date DESC"; + } + if($sort_order){ + $order .= $sort_order; + }else{ + $order .= 'DESC'; + } + + + + // LIMIT + if(!isset($_GET['paged'])) $_GET['paged'] = 1; + $offset = ($_GET['paged']-1)*$limit_no; + $limit = " " . $offset . ',' . $limit_no; + + + $sql = " + SELECT SQL_CALC_FOUND_ROWS {$select} + FROM {$from} + {$join} + WHERE {$where} + ORDER BY {$order} + LIMIT {$limit} + "; + + $results = $wpdb->get_results($sql); + + $count = $wpdb->get_var("SELECT FOUND_ROWS()"); + + $wp_query->found_posts = $count; + $wp_query->query_vars['posts_per_page'] = $limit_no; + $wp_query->max_num_pages = ceil($wp_query->found_posts/$limit_no); + + // post process + foreach($results as $k=>$v){ + if($v->is_translation){ + $source_language = $wpdb->get_var($wpdb->prepare("SELECT language_code FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND source_language_code IS NULL", $v->trid)); + $_tmp = 'status_' . $source_language; + $v->$_tmp = ICL_TM_COMPLETE; + } + } + + return $results; + + } + + function get_element_translation($element_id, $language, $element_type='post_post'){ + global $wpdb, $sitepress; + $trid = $sitepress->get_element_trid($element_id, $element_type); + $translation = array(); + if($trid){ + $translation = $wpdb->get_row($wpdb->prepare(" + SELECT * + FROM {$wpdb->prefix}icl_translations tr + JOIN {$wpdb->prefix}icl_translation_status ts ON tr.translation_id = ts.translation_id + WHERE tr.trid=%s AND tr.language_code='%s' + ", $trid, $language)); + } + return $translation; + } + + function get_element_translations($element_id, $element_type='post_post', $service = false){ + global $wpdb, $sitepress; + $trid = $sitepress->get_element_trid($element_id, $element_type); + $translations = array(); + if($trid){ + $service = $service ? " AND translation_service = '$service'" : ''; + $translations = $wpdb->get_results($wpdb->prepare(" + SELECT * + FROM {$wpdb->prefix}icl_translations tr + JOIN {$wpdb->prefix}icl_translation_status ts ON tr.translation_id = ts.translation_id + WHERE tr.trid=%s {$service} + ", $trid)); + foreach($translations as $k=>$v){ + $translations[$v->language_code] = $v; + unset($translations[$k]); + } + } + return $translations; + } + + /** + * returns icon file name according to status code + * + * @param int $status + */ + public function status2img_filename($status, $needs_update = 0){ + if($needs_update){ + $img_file = 'needs-update.png'; + }else{ + switch($status){ + case ICL_TM_NOT_TRANSLATED: $img_file = 'not-translated.png'; break; + case ICL_TM_WAITING_FOR_TRANSLATOR: $img_file = 'in-progress.png'; break; + case ICL_TM_IN_PROGRESS: $img_file = 'in-progress.png'; break; + case ICL_TM_NEEDS_UPDATE: $img_file = 'needs-update.png'; break; + case ICL_TM_DUPLICATE: $img_file = 'copy.png'; break; + case ICL_TM_COMPLETE: $img_file = 'complete.png'; break; + default: $img_file = ''; + } + } + return $img_file; + } + + public function status2text($status){ + switch($status){ + case ICL_TM_NOT_TRANSLATED: $text = __('Not translated', 'sitepress'); break; + case ICL_TM_WAITING_FOR_TRANSLATOR: $text = __('Waiting for translator', 'sitepress'); break; + case ICL_TM_IN_PROGRESS: $text = __('In progress', 'sitepress'); break; + case ICL_TM_NEEDS_UPDATE: $text = __('Needs update', 'sitepress'); break; + case ICL_TM_DUPLICATE: $text = __('Duplicate', 'sitepress'); break; + case ICL_TM_COMPLETE: $text = __('Complete', 'sitepress'); break; + default: $text = ''; + } + return $text; + } + + public static function estimate_word_count($data, $lang_code){ + global $asian_languages; + + $words = 0; + if(isset($data->post_title)){ + if(in_array($lang_code, $asian_languages)){ + $words += strlen(strip_tags($data->post_title)) / 6; + } else { + $words += count(preg_split( + '/[\s\/]+/', $data->post_title, 0, PREG_SPLIT_NO_EMPTY)); + } + } + if(isset($data->post_content)){ + if(in_array($lang_code, $asian_languages)){ + $words += strlen(strip_tags($data->post_content)) / 6; + } else { + $words += count(preg_split( + '/[\s\/]+/', strip_tags($data->post_content), 0, PREG_SPLIT_NO_EMPTY)); + } + } + + return (int)$words; + + } + + public static function estimate_custom_field_word_count($post_id, $lang_code) { + global $asian_languages, $sitepress_settings; + + $words = 0; + + if(!empty($sitepress_settings['translation-management']['custom_fields_translation']) && is_array($sitepress_settings['translation-management']['custom_fields_translation'])){ + $custom_fields = array(); + foreach($sitepress_settings['translation-management']['custom_fields_translation'] as $cf => $op){ + if ($op == 2) { + $custom_fields[] = $cf; + } + } + foreach($custom_fields as $cf ){ + $custom_fields_value = get_post_meta($post_id, $cf, true); + if ($custom_fields_value != "" && is_scalar($custom_fields_value)) { // only support scalar values fo rnow + if(in_array($lang_code, $asian_languages)){ + $words += strlen(strip_tags($custom_fields_value)) / 6; + } else { + $words += count(preg_split( + '/[\s\/]+/', strip_tags($custom_fields_value), 0, + PREG_SPLIT_NO_EMPTY)); + } + } + } + } + + return (int)$words; + } + + public static function decode_field_data($data, $format){ + if($format == 'base64'){ + $data = base64_decode($data); + }elseif($format == 'csv_base64'){ + $exp = explode(',', $data); + foreach($exp as $k=>$e){ + $exp[$k] = base64_decode(trim($e,'"')); + } + $data = $exp; + } + return $data; + } + + public function encode_field_data($data, $format){ + if($format == 'base64'){ + $data = base64_encode($data); + }elseif($format == 'csv_base64'){ + $exp = $data; + foreach($exp as $k=>$e){ + $exp[$k] = '"' . base64_encode(trim($e)) . '"'; + } + $data = join(',', $exp); + } + return $data; + } + + /** + * create translation package + * + * @param object|int $post + * + * @return array + */ + function create_translation_package($post){ + global $sitepress, $sitepress_settings; + + $package = array(); + + + if(is_numeric($post)){ + $post = get_post($post); + } + + if (isset($post->external_type) && $post->external_type) { + + foreach ($post->string_data as $key => $value) { + $package['contents'][$key] = array( + 'translate' => 1, + 'data' => $this->encode_field_data($value, 'base64'), + 'format' => 'base64' + ); + } + + $package['contents']['original_id'] = array( + 'translate' => 0, + 'data' => $post->post_id, + ); + + + } else { + if($post->post_type=='page'){ + $package['url'] = htmlentities(get_option('home') . '?page_id=' . ($post->ID)); + }else{ + $package['url'] = htmlentities(get_option('home') . '?p=' . ($post->ID)); + } + + $package['contents']['title'] = array( + 'translate' => 1, + 'data' => $this->encode_field_data($post->post_title, 'base64'), + 'format' => 'base64' + ); + + if($sitepress_settings['translated_document_page_url'] == 'translate'){ + $package['contents']['URL'] = array( + 'translate' => 1, + 'data' => $this->encode_field_data($post->post_name, 'base64'), + 'format' => 'base64' + ); + } + + $package['contents']['body'] = array( + 'translate' => 1, + 'data' => $this->encode_field_data($post->post_content, 'base64'), + 'format' => 'base64' + ); + + if(!empty($post->post_excerpt)){ + $package['contents']['excerpt'] = array( + 'translate' => 1, + 'data' => base64_encode($post->post_excerpt), + 'format' => 'base64' + ); + } + + $package['contents']['original_id'] = array( + 'translate' => 0, + 'data' => $post->ID + ); + + if(!empty($this->settings['custom_fields_translation'])) + foreach($this->settings['custom_fields_translation'] as $cf => $op){ + if ($op == 2) { // translate + + /* */ + $custom_fields_value = get_post_meta($post->ID, $cf, true); + if ($custom_fields_value != '' && is_scalar($custom_fields_value)) { + $package['contents']['field-'.$cf] = array( + 'translate' => 1, + 'data' => $this->encode_field_data($custom_fields_value, 'base64'), + 'format' => 'base64' + ); + $package['contents']['field-'.$cf.'-name'] = array( + 'translate' => 0, + 'data' => $cf + ); + $package['contents']['field-'.$cf.'-type'] = array( + 'translate' => 0, + 'data' => 'custom_field' + ); + } + /* */ + /* + $post_custom = get_post_custom($post->ID); + if(isset($post_custom[$cf])){ + $package['contents']['field-'.$cf] = array( + 'translate' => 1, + 'data' => $this->encode_field_data(serialize($post_custom[$cf]), 'base64'), + 'format' => 'base64' + ); + $package['contents']['field-'.$cf.'-name'] = array( + 'translate' => 0, + 'data' => $cf + ); + $package['contents']['field-'.$cf.'-type'] = array( + 'translate' => 0, + 'data' => 'custom_field' + ); + } + */ + } + } + + foreach((array)$sitepress->get_translatable_taxonomies(true, $post->post_type) as $taxonomy){ + $terms = get_the_terms( $post->ID , $taxonomy ); + if(!empty($terms)){ + $_taxs = $_tax_ids = array(); + foreach($terms as $term){ + $_taxs[] = $term->name; + $_tax_ids[] = $term->term_taxonomy_id; + } + if($taxonomy == 'post_tag'){ + $tax_package_key = 'tags'; + $tax_id_package_key = 'tag_ids'; + } + elseif($taxonomy == 'category'){ + $tax_package_key = 'categories'; + $tax_id_package_key = 'category_ids'; + } + else{ + $tax_package_key = $taxonomy; + $tax_id_package_key = $taxonomy . '_ids'; + } + + $package['contents'][$tax_package_key] = array( + 'translate' => 1, + 'data' => $this->encode_field_data($_taxs,'csv_base64'), + 'format'=>'csv_base64' + ); + + $package['contents'][$tax_id_package_key] = array( + 'translate' => 0, + 'data' => join(',', $_tax_ids) + ); + } + } + } + return $package; + } + + /** + * add/update icl_translation_status record + * + * @param array $data + */ + function update_translation_status($data){ + global $wpdb; + if(!isset($data['translation_id'])) return; + $rid = $wpdb->get_var($wpdb->prepare("SELECT rid FROM {$wpdb->prefix}icl_translation_status WHERE translation_id=%d", $data['translation_id'])); + if($rid){ + + $wpdb->update($wpdb->prefix.'icl_translation_status', $data, array('rid'=>$rid)); + + $update = true; + }else{ + $wpdb->insert($wpdb->prefix.'icl_translation_status',$data); + $rid = $wpdb->insert_id; + $update = false; + } + + return array($rid, $update); + } + + function _get_post($post_id) { + if (is_string($post_id) && strcmp(substr($post_id, 0, strlen('external_')), 'external_')===0) { + $item = null; + return apply_filters('WPML_get_translatable_item', $item, $post_id); + } else { + return get_post($post_id); + } + } + /* TRANSLATION JOBS */ + /* ******************************************************************************************** */ + + function send_jobs($data){ + global $wpdb, $sitepress; + + if(!isset($data['tr_action']) && isset($data['translate_to'])){ //adapt new format + $data['tr_action'] = $data['translate_to']; + unset($data['translate_to']); + } + + // translate_from + // tr_action (translate_to) + // translator + // post + // service + // defaults + $data_default = array( + 'translate_from' => $sitepress->get_default_language() + ); + extract($data_default); + extract($data, EXTR_OVERWRITE); + + // no language selected ? + if(!isset($tr_action) || empty($tr_action)){ + $this->messages[] = array( + 'type'=>'error', + 'text' => __('Please select at least one language to translate into.', 'sitepress') + ); + $this->dashboard_select = $data; // prepopulate dashboard + return; + } + // no post selected ? + if(!isset($iclpost) || empty($iclpost)){ + $this->messages[] = array( + 'type'=>'error', + 'text' => __('Please select at least one document to translate.', 'sitepress') + ); + $this->dashboard_select = $data; // prepopulate dashboard + return; + } + + $selected_posts = $iclpost; + $selected_translators = isset($translator) ? $translator : array(); + $selected_languages = $tr_action; + $job_ids = array(); + + foreach($selected_posts as $post_id){ + $post = $this->_get_post($post_id); + $post_trid = $sitepress->get_element_trid($post->ID, 'post_' . $post->post_type); + $post_translations = $sitepress->get_element_translations($post_trid, 'post_' . $post->post_type); + $md5 = $this->post_md5($post); + + $translation_package = $this->create_translation_package($post); + + foreach($selected_languages as $lang => $action){ + + // making this a duplicate? + if($action == 2){ + // dont send documents that are in progress + $current_translation_status = $this->get_element_translation($post_id, $lang, 'post_' . $post->post_type); + if($current_translation_status && $current_translation_status->status == ICL_TM_IN_PROGRESS) continue; + + $job_ids[] = $this->make_duplicate($post_id, $lang); + }elseif($action == 1){ + + if(empty($post_translations[$lang])){ + $translation_id = $sitepress->set_element_language_details(null , 'post_' . $post->post_type, $post_trid, $lang, $translate_from); + }else{ + $translation_id = $post_translations[$lang]->translation_id; + } + + $current_translation_status = $this->get_element_translation($post_id, $lang, 'post_' . $post->post_type); + + // don't send documents that are in progress + // don't send documents that are already translated and don't need update + if(!empty($current_translation_status)){ + if($current_translation_status->status == ICL_TM_IN_PROGRESS) continue; + if($current_translation_status->status == ICL_TM_COMPLETE && !$current_translation_status->needs_update) continue; + } + + $_status = ICL_TM_WAITING_FOR_TRANSLATOR; + + $_exp = isset($selected_translators[$lang]) ? explode('-', $selected_translators[$lang]) : false; + if(!isset($service)){ + $translation_service = isset($_exp[1]) ? $_exp[1] : 'local'; + }else{ + $translation_service = $service; + } + $translator_id = $_exp[0]; + + // set as default translator + if($translator_id > 0){ + $this->set_default_translator($translator_id, $translate_from, $lang, $translation_service); + } + + // add translation_status record + $data = array( + 'translation_id' => $translation_id, + 'status' => $_status, + 'translator_id' => $translator_id, + 'needs_update' => 0, + 'md5' => $md5, + 'translation_service' => $translation_service, + 'translation_package' => serialize($translation_package) + ); + + $_prevstate = $wpdb->get_row($wpdb->prepare(" + SELECT status, translator_id, needs_update, md5, translation_service, translation_package, timestamp, links_fixed + FROM {$wpdb->prefix}icl_translation_status + WHERE translation_id = %d + ", $translation_id), ARRAY_A); + if(!empty($_prevstate)){ + $data['_prevstate'] = serialize($_prevstate); + } + + list($rid, $update) = $this->update_translation_status($data); + + $job_ids[] = $this->add_translation_job($rid, $translator_id, $translation_package); + if( $translation_service == 'icanlocalize' ){ + global $ICL_Pro_Translation; + $sent = $ICL_Pro_Translation->send_post($post, array($lang), $translator_id); + if(!$sent){ + $job_id = array_pop($job_ids); + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translate_job WHERE job_id=%d", $job_id)); + $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translate_job SET revision = NULL WHERE rid=%d ORDER BY job_id DESC LIMIT 1", $rid)); + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translate WHERE job_id=%d", $job_id)); + } + } + } // if / else is making a duplicate + } + + } + + $job_ids = array_unique($job_ids); + if(array(false) == $job_ids || empty($job_ids)){ + $this->messages[] = array( + 'type'=>'error', + 'text' => __('No documents were sent to translation. Make sure that translations are not currently in progress or already translated for the selected language(s).', 'sitepress') + ); + }elseif(in_array(false, $job_ids)){ + $this->messages[] = array( + 'type'=>'updated', + 'text' => __('Some documents were sent to translation.', 'sitepress') + ); + $this->messages[] = array( + 'type'=>'error', + 'text' => __('Some documents were not sent to translation. Make sure that translations are not currently in progress for the selected language(s).', 'sitepress') + ); + }else{ + $this->messages[] = array( + 'type'=>'updated', + 'text' => __('Selected document(s) sent to translation.', 'sitepress') + ); + } + + return $job_ids; + } + + /** + * Adds a translation job record in icl_translate_job + * + * @param mixed $rid + * @param mixed $translator_id + * @return bool|int + */ + function add_translation_job($rid, $translator_id, $translation_package){ + global $wpdb, $current_user; + get_currentuserinfo(); + if(!$current_user->ID){ + $manager_id = $wpdb->get_var($wpdb->prepare("SELECT manager_id FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d ORDER BY job_id DESC LIMIT 1", $rid)); + }else{ + $manager_id = $current_user->ID; + } + + $translation_status = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translation_status WHERE rid=%d", $rid)); + + // if we have a previous job_id for this rid mark it as the top (last) revision + list($prev_job_id, $prev_job_translated) = $wpdb->get_row($wpdb->prepare(" + SELECT job_id, translated FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d AND revision IS NULL + ", $rid), ARRAY_N); + if(!is_null($prev_job_id)){ + + // if previous job is not complete bail out + if(!$prev_job_translated){ + //trigger_error(sprintf(__('Translation is in progress for job: %s.', 'sitepress'), $prev_job_id), E_USER_NOTICE); + return false; + } + + $last_rev = $wpdb->get_var($wpdb->prepare(" + SELECT MAX(revision) AS rev FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d AND revision IS NOT NULL + ", $rid)); + $wpdb->update($wpdb->prefix . 'icl_translate_job', array('revision'=>$last_rev+1), array('job_id'=>$prev_job_id)); + + $prev_job = $this->get_translation_job($prev_job_id); + + $original_post = get_post($prev_job->original_doc_id); + foreach($prev_job->elements as $element){ + $prev_translation[$element->field_type] = $element->field_data_translated; + switch($element->field_type){ + case 'title': + if(self::decode_field_data($element->field_data, $element->field_format) == $original_post->post_title){ + //$unchanged[$element->field_type] = $element->field_data_translated; + $unchanged[$element->field_type] = true; + } + break; + case 'body': + if(self::decode_field_data($element->field_data, $element->field_format) == $original_post->post_content){ + //$unchanged[$element->field_type] = $element->field_data_translated; + $unchanged[$element->field_type] = true; + } + break; + case 'excerpt': + if(self::decode_field_data($element->field_data, $element->field_format) == $original_post->post_excerpt){ + //$unchanged[$element->field_type] = $element->field_data_translated; + $unchanged[$element->field_type] = true; + } + break; + case 'tags': + $terms = get_the_terms( $prev_job->original_doc_id, 'post_tag' ); + $_taxs = array(); + if ( $terms ) { + foreach ( $terms as $term ) { + $_taxs[ ] = $term->name; + } + } + if ( $element->field_data == $this->encode_field_data( $_taxs, $element->field_format ) ) { + //$unchanged['tags'] = $element->field_data_translated; + $unchanged[ 'tags' ] = true; + } + break; + case 'categories': + $terms = get_the_terms( $prev_job->original_doc_id, 'category' ); + $_taxs = array(); + if ( $terms ) { + foreach ( $terms as $term ) { + $_taxs[ ] = $term->name; + } + } + if ( $element->field_data == $this->encode_field_data( $_taxs, $element->field_format ) ) { + //$unchanged['categories'] = $element->field_data_translated; + $unchanged[ 'categories' ] = true; + } + break; + default: + if(false !== strpos($element->field_type, 'field-') && !empty($this->settings['custom_fields_translation'])){ + $cf_name = preg_replace('#^field-#', '', $element->field_type); + if(self::decode_field_data($element->field_data, $element->field_format) == get_post_meta($prev_job->original_doc_id, $cf_name, 1)){ + //$unchanged[$element->field_type] = $element->field_data_translated; + $unchanged[$element->field_type] = true; + } + }else{ + // taxonomies + if(taxonomy_exists($element->field_type)){ + $terms = get_the_terms( $prev_job->original_doc_id , $element->field_type ); + $_taxs = array(); + foreach($terms as $term){ + $_taxs[] = $term->name; + } + if($element->field_data == $this->encode_field_data($_taxs, $element->field_format)){ + //$unchanged[$element->field_type] = $field['data_translated']; + $unchanged[$element->field_type] = true; + } + } + } + } + } + } + + $wpdb->insert($wpdb->prefix . 'icl_translate_job', array( + 'rid' => $rid, + 'translator_id' => $translator_id, + 'translated' => 0, + 'manager_id' => $manager_id + )); + $job_id = $wpdb->insert_id; + + foreach($translation_package['contents'] as $field => $value){ + $job_translate = array( + 'job_id' => $job_id, + 'content_id' => 0, + 'field_type' => $field, + 'field_format' => isset($value['format'])?$value['format']:'', + 'field_translate' => $value['translate'], + 'field_data' => $value['data'], + 'field_data_translated' => isset($prev_translation[$field]) ? $prev_translation[$field] : '', + 'field_finished' => 0 + ); + if(isset($unchanged[$field])){ + $job_translate['field_finished'] = 1; + } + //$job_translate['field_data_translated'] = $unchanged[$field]; + + $wpdb->insert($wpdb->prefix . 'icl_translate', $job_translate); + } + + if($this->settings['doc_translation_method'] == ICL_TM_TMETHOD_EDITOR){ // only send notifications if the translation editor method is on + if(!defined('ICL_TM_DISABLE_ALL_NOTIFICATIONS') && $translation_status->translation_service=='local'){ + if($this->settings['notification']['new-job'] == ICL_TM_NOTIFICATION_IMMEDIATELY){ + require_once ICL_PLUGIN_PATH . '/inc/translation-management/tm-notification.class.php'; + if($job_id){ + $tn_notification = new TM_Notification(); + if(empty($translator_id)){ + $tn_notification->new_job_any($job_id); + }else{ + $tn_notification->new_job_translator($job_id, $translator_id); + } + } + } + } + } + + return $job_id; + + } + + function assign_translation_job($job_id, $translator_id, $service='local'){ + global $wpdb, $iclTranslationManagement; + + // make sure TM is running + if(empty($this->settings)){ + $iclTranslationManagement->init(); + } + + list($prev_translator_id, $rid) = $wpdb->get_row($wpdb->prepare("SELECT translator_id, rid FROM {$wpdb->prefix}icl_translate_job WHERE job_id=%d", $job_id), ARRAY_N); + + require_once ICL_PLUGIN_PATH . '/inc/translation-management/tm-notification.class.php'; + $tn_notification = new TM_Notification(); + if($this->settings['notification']['resigned'] == ICL_TM_NOTIFICATION_IMMEDIATELY){ + if(!empty($prev_translator_id) && $prev_translator_id != $translator_id){ + if($job_id){ + $tn_notification->translator_removed($prev_translator_id, $job_id); + } + } + } + + if($this->settings['notification']['new-job'] == ICL_TM_NOTIFICATION_IMMEDIATELY){ + if(empty($translator_id)){ + $tn_notification->new_job_any($job_id); + }else{ + $tn_notification->new_job_translator($job_id, $translator_id); + } + } + + $wpdb->update($wpdb->prefix.'icl_translation_status', + array('translator_id'=>$translator_id, 'status'=>ICL_TM_WAITING_FOR_TRANSLATOR, 'translation_service' => $service), + array('rid'=>$rid)); + $wpdb->update($wpdb->prefix.'icl_translate_job', array('translator_id'=>$translator_id), array('job_id'=>$job_id)); + return true; + } + + function get_translation_jobs($args = array()){ + global $wpdb, $sitepress, $wp_query; + + // defaults + $args_default = array( + 'translator_id' => 0, + 'status' => false, + 'include_unassigned' => false + ); + + extract($args_default); + extract($args, EXTR_OVERWRITE); + + $_exp = explode('-', $translator_id); + $service = isset($_exp[1]) ? $_exp[1] : 'local'; + $translator_id = $_exp[0]; + + $where = " s.status > " . ICL_TM_NOT_TRANSLATED; + if($status != ''){ + $where .= " AND s.status=" . intval($status); + } + if($status != ICL_TM_DUPLICATE){ + $where .= " AND s.status <> " . ICL_TM_DUPLICATE; + } + if(!empty($translator_id)){ + if($include_unassigned){ + $where .= " AND (j.translator_id=" . intval($translator_id) . " OR j.translator_id=0) "; + }else{ + $where .= " AND j.translator_id=" . intval($translator_id); + } + if(!empty($service)){ + $where .= " AND s.translation_service='{$service}'"; + } + + $language_pairs = get_user_meta($translator_id, $wpdb->prefix.'language_pairs', true); + } + + // HANDLE FROM + if(!empty($from)){ + $where .= PHP_EOL . " AND t.source_language_code='".esc_sql($from)."'"; + }else{ + // only if we filter by translator, make sure to use just the 'from' languages that apply + // in no translator_id, ommit condition and all will be pulled + if($translator_id){ + if(!empty($to)){ + // get 'from' languages corresdonding to $to (to $translator_id) + $froms = array(); + foreach($language_pairs as $fl => $tls){ + if(isset($tls[$to])) $froms[] = $fl; + } + if($froms){ + $where .= PHP_EOL . sprintf(" AND t.source_language_code IN(%s)", "'" . join("','", $froms) . "'"); + } + }else{ + // all to all case + // get all possible combinations for $translator_id + $from_languages = array_keys($language_pairs); + $wconds = array(); + foreach($from_languages as $fl){ + $to_languages = "'" . join("','", array_keys($language_pairs[$fl])) . "'"; + $wconds[] = sprintf(" (t.source_language_code='%s' AND t.language_code IN (%s)) ", $fl, $to_languages); + } + if(!empty($wconds)){ + $where .= PHP_EOL . ' AND ( ' . join (' OR ', $wconds) . ')'; + } + } + } + + } + + // HANDLE TO + if(!empty($to)){ + $where .= PHP_EOL . " AND t.language_code='".esc_sql($to)."'"; + }else{ + // only if we filter by translator, make sure to use just the 'from' languages that apply + // in no translator_id, ommit condition and all will be pulled + if($translator_id){ + if(!empty($from)){ + // get languages the user can translate into from $from + $tos = isset($language_pairs[$from]) ? array_keys($language_pairs[$from]) : array(); + if($tos){ + $where .= PHP_EOL . sprintf(" AND t.language_code IN(%s)", "'" . join("','", $tos) . "'"); + } + }else{ + // covered by 'all to all case' above + } + } + } + + // ORDER BY + if($include_unassigned){ + $orderby[] = 'j.translator_id DESC'; + } + $orderby[] = ' j.job_id DESC '; + $orderby = join(', ', $orderby); + + // LIMIT + if(!isset($_GET['paged'])) $_GET['paged'] = 1; + $offset = ($_GET['paged']-1)*$limit_no; + $limit = " " . $offset . ',' . $limit_no; + + $jobs = $wpdb->get_results( + "SELECT SQL_CALC_FOUND_ROWS + j.job_id, t.trid, t.language_code, t.source_language_code, + s.translation_id, s.status, s.needs_update, s.translator_id, u.display_name AS translator_name, s.translation_service + FROM {$wpdb->prefix}icl_translate_job j + JOIN {$wpdb->prefix}icl_translation_status s ON j.rid = s.rid + JOIN {$wpdb->prefix}icl_translations t ON s.translation_id = t.translation_id + LEFT JOIN {$wpdb->users} u ON s.translator_id = u.ID + WHERE {$where} AND revision IS NULL + ORDER BY {$orderby} + LIMIT {$limit} + " + ); + + + //echo '
              ';
              +        //print_r($wpdb->last_query);
              +        //echo '
              '; + + $count = $wpdb->get_var("SELECT FOUND_ROWS()"); + + $wp_query->found_posts = $count; + $wp_query->query_vars['posts_per_page'] = $limit_no; + $wp_query->max_num_pages = ceil($wp_query->found_posts/$limit_no); + + foreach($jobs as $k=>$row){ + //original + $post_id = $wpdb->get_var($wpdb->prepare(" + SELECT field_data + FROM {$wpdb->prefix}icl_translate + WHERE job_id=%d and field_type='original_id'", $row->job_id)); + + $parts = explode('_', $post_id); + if ($parts[0] == 'external') { + $jobs[$k]->original_doc_id = $post_id; + + $jobs[$k]->post_title = base64_decode($wpdb->get_var($wpdb->prepare(" + SELECT field_data + FROM {$wpdb->prefix}icl_translate + WHERE job_id=%d and field_type='name'", $row->job_id))); + if ($jobs[$k]->post_title == "") { + // try the title field. + $jobs[$k]->post_title = base64_decode($wpdb->get_var($wpdb->prepare(" + SELECT field_data + FROM {$wpdb->prefix}icl_translate + WHERE job_id=%d and field_type='title'", $row->job_id))); + } + + $jobs[$k]->edit_link = self::tm_post_link($post_id); + $ldf = $sitepress->get_language_details($row->source_language_code); + } else { + $doc = $wpdb->get_row($wpdb->prepare("SELECT ID, post_title, post_type FROM {$wpdb->posts} WHERE ID=%d", $post_id)); + if ($doc) { + $jobs[$k]->post_title = $doc->post_title; + $jobs[$k]->original_doc_id = $doc->ID; + $jobs[$k]->edit_link = get_edit_post_link($doc->ID); + $ldf = $sitepress->get_language_details($sitepress->get_element_language_details($post_id, 'post_' . $doc->post_type)->language_code); + } else { + $jobs[$k]->post_title = __("The original has been deleted!", "sitepress"); + $jobs[$k]->original_doc_id = 0; + $jobs[$k]->edit_link = ""; + $ldf['display_name'] = __("Deleted", "sitepress"); + } + } + $ldt = $sitepress->get_language_details($row->language_code); + $jobs[$k]->lang_text = $ldf['display_name'] . ' » ' . $ldt['display_name']; + if($row->translation_service=='icanlocalize'){ + $row->translator_name = ICL_Pro_Translation::get_translator_name($row->translator_id); + } + } + return $jobs; + + } + + function get_translation_job($job_id, $include_non_translatable_elements = false, $auto_assign = false, $revisions = 0){ + global $wpdb, $sitepress, $current_user; + get_currentuserinfo(); + $job = $wpdb->get_row($wpdb->prepare(" + SELECT + j.rid, j.translator_id, j.translated, j.manager_id, + s.status, s.needs_update, s.translation_service, + t.trid, t.language_code, t.source_language_code + FROM {$wpdb->prefix}icl_translate_job j + JOIN {$wpdb->prefix}icl_translation_status s ON j.rid = s.rid + JOIN {$wpdb->prefix}icl_translations t ON s.translation_id = t.translation_id + WHERE j.job_id = %d", $job_id)); + + $post_id = $wpdb->get_var($wpdb->prepare(" + SELECT field_data + FROM {$wpdb->prefix}icl_translate + WHERE job_id=%d and field_type='original_id'", $job_id)); + + $parts = explode('_', $post_id); + if ($parts[0] == 'external') { + $job->original_doc_id = $post_id; + $job->original_doc_title = base64_decode($wpdb->get_var($wpdb->prepare(" + SELECT field_data + FROM {$wpdb->prefix}icl_translate + WHERE job_id=%d and field_type='name'", $job_id))); + if ($job->original_doc_title == "") { + // try the title field. + $job->original_doc_title = base64_decode($wpdb->get_var($wpdb->prepare(" + SELECT field_data + FROM {$wpdb->prefix}icl_translate + WHERE job_id=%d and field_type='title'", $job_id))); + } + $job->original_post_type = $wpdb->get_var($wpdb->prepare(" + SELECT element_type + FROM {$wpdb->prefix}icl_translations + WHERE trid=%d AND language_code='%s'", + $job->trid, $job->source_language_code)); + } else { + + $original = $wpdb->get_row($wpdb->prepare(" + SELECT t.element_id, p.post_title, p.post_type + FROM {$wpdb->prefix}icl_translations t + JOIN {$wpdb->posts} p ON t.element_id = p.ID AND t.trid = %d + WHERE t.source_language_code IS NULL", $job->trid)); + + if($original){ + $job->original_doc_title = $original->post_title; + $job->original_doc_id = $original->element_id; + $job->original_post_type = $original->post_type; + } + } + + $_ld = $sitepress->get_language_details($job->source_language_code); + $job->from_language = $_ld['display_name']; + $_ld = $sitepress->get_language_details($job->language_code); + $job->to_language = $_ld['display_name']; + + if(!$include_non_translatable_elements){ + $jelq = ' AND field_translate = 1'; + }else{ + $jelq = ''; + } + $job->elements = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translate WHERE job_id = %d {$jelq} ORDER BY tid ASC", $job_id)); + if($job->translator_id == 0 || $job->status == ICL_TM_WAITING_FOR_TRANSLATOR){ + if($auto_assign){ + $wpdb->update($wpdb->prefix . 'icl_translate_job', array('translator_id' => $this->current_translator->translator_id), array('job_id'=>$job_id)); + $wpdb->update($wpdb->prefix . 'icl_translation_status', + array('translator_id' => $this->current_translator->translator_id, 'status' => ICL_TM_IN_PROGRESS), + array('rid'=>$job->rid) + ); + } + }elseif($job->translator_id != @intval($this->current_translator->translator_id) && !defined('XMLRPC_REQUEST') && $job->manager_id != $current_user->ID){ + static $erroronce = array(); + if(empty($erroronce[$job_id])){ + $this->messages[] = array( + 'type' => 'error', 'text' => sprintf(__("You can't translate this document. It's assigned to a different translator.
              Document: %s (ID = %d).", 'sitepress') , $job->original_doc_title, $job_id) + ); + $erroronce[$job_id] = true; + } + return false; + } + + //do we have a previous version + if($revisions > 0){ + $prev_version_job_id = $wpdb->get_var($wpdb->prepare(" + SELECT MAX(job_id) + FROM {$wpdb->prefix}icl_translate_job + WHERE rid=%d AND job_id < %d", $job->rid, $job_id)); + if($prev_version_job_id){ + $job->prev_version = $this->get_translation_job($prev_version_job_id, false, false, $revisions - 1); + } + + } + + // allow adding custom elements + $job->elements = apply_filters('icl_job_elements', $job->elements, $post_id, $job_id); + + return $job; + } + + function get_translation_job_id($trid, $language_code){ + global $wpdb, $sitepress; + + $job_id = $wpdb->get_var($wpdb->prepare(" + SELECT tj.job_id FROM {$wpdb->prefix}icl_translate_job tj + JOIN {$wpdb->prefix}icl_translation_status ts ON tj.rid = ts.rid + JOIN {$wpdb->prefix}icl_translations t ON ts.translation_id = t.translation_id + WHERE t.trid = %d AND t.language_code='%s' + ORDER BY tj.job_id DESC LIMIT 1 + ", $trid, $language_code)); + + return $job_id; + } + + function _save_translation_field($tid, $field){ + global $wpdb; + $update['field_data_translated'] = $this->encode_field_data($field['data'], $field['format']); + if(isset($field['finished']) && $field['finished']){ + $update['field_finished'] = 1; + } + $wpdb->update($wpdb->prefix . 'icl_translate', $update, array('tid'=>$tid)); + } + + + function save_translation($data){ + global $wpdb, $sitepress, $sitepress_settings, $ICL_Pro_Translation; + + $new_post_id = false; + $is_incomplete = false; + foreach($data['fields'] as $field){ + $this->_save_translation_field($field['tid'], $field); + if(!isset($field['finished']) || !$field['finished']){ + $is_incomplete = true; + } + } + + if(!empty($data['complete']) && !$is_incomplete){ + $wpdb->update($wpdb->prefix . 'icl_translate_job', array('translated'=>1), array('job_id'=>$data['job_id'])); + $rid = $wpdb->get_var($wpdb->prepare("SELECT rid FROM {$wpdb->prefix}icl_translate_job WHERE job_id=%d", $data['job_id'])); + $translation_id = $wpdb->get_var($wpdb->prepare("SELECT translation_id FROM {$wpdb->prefix}icl_translation_status WHERE rid=%d", $rid)); + $wpdb->update($wpdb->prefix . 'icl_translation_status', array('status'=>ICL_TM_COMPLETE, 'needs_update'=>0), array('rid'=>$rid)); + list($element_id, $trid) = $wpdb->get_row($wpdb->prepare("SELECT element_id, trid FROM {$wpdb->prefix}icl_translations WHERE translation_id=%d", $translation_id), ARRAY_N); + $job = $this->get_translation_job($data['job_id'], true); + + $parts = explode('_', $job->original_doc_id); + if ($parts[0] == 'external') { + + // Translations are saved in the string table for 'external' types + + $id = array_pop($parts); + unset($parts[0]); + $type = implode('_', $parts); + + foreach($job->elements as $field){ + if ($field->field_translate) { + if (function_exists('icl_st_is_registered_string')) { + $string_id = icl_st_is_registered_string($type, $id . '_' . $field->field_type); + if (!$string_id) { + icl_register_string($type, $id . '_' . $field->field_type, self::decode_field_data($field->field_data, $field->field_format)); + $string_id = icl_st_is_registered_string($type, $id . '_' . $field->field_type); + } + if ($string_id) { + icl_add_string_translation($string_id, $job->language_code, self::decode_field_data($field->field_data_translated, $field->field_format), ICL_STRING_TRANSLATION_COMPLETE); + } + } + } + } + + } else { + + if(!is_null($element_id)){ + $postarr['ID'] = $_POST['post_ID'] = $element_id; + } + + foreach($job->elements as $field){ + switch($field->field_type){ + case 'title': + $postarr['post_title'] = self::decode_field_data($field->field_data_translated, $field->field_format); + break; + case 'body': + $postarr['post_content'] = self::decode_field_data($field->field_data_translated, $field->field_format); + break; + case 'excerpt': + $postarr['post_excerpt'] = self::decode_field_data($field->field_data_translated, $field->field_format); + break; + case 'URL': + $postarr['post_name'] = self::decode_field_data($field->field_data_translated, $field->field_format); + break; + case 'tags': + $tags = self::decode_field_data($field->field_data_translated, $field->field_format); + $original_tags = self::decode_field_data($field->field_data, $field->field_format); + // create tags that don't exist + foreach($tags as $k=>$t){ + $thetag = $sitepress->get_term_by_name_and_lang($t, 'post_tag', $job->language_code); + $tags[$k] = $t; // Save $t as we may have added @.lang to it + if(empty($thetag)){ + $the_original_tag = $sitepress->get_term_by_name_and_lang($original_tags[$k], 'post_tag', $job->source_language_code); + $tmp = self::icl_insert_term($t, 'post_tag', array(), $job->language_code); + if(!is_wp_error($tmp) && isset($tmp['term_taxonomy_id'])){ + $sitepress->set_term_translation($the_original_tag, + $tmp['term_taxonomy_id'], + 'post_tag', + $job->language_code, + $job->source_language_code); + } + } + } + $postarr['tags_input'] = join(',', $tags); + $postarr['tax_input']['post_tag'] = $tags; + + break; + case 'categories': + $cats = self::decode_field_data($field->field_data_translated, $field->field_format); + $original_cats = self::decode_field_data($field->field_data, $field->field_format); + $missing_parents = array(); + + foreach($cats as $k=>$c){ + $parent_missing = false; + $thecat = $sitepress->get_term_by_name_and_lang($c, 'category', $job->language_code); + + $cat_id = 0; + + if(empty($thecat)){ + $the_original_cat = $sitepress->get_term_by_name_and_lang($original_cats[$k], 'category', $job->source_language_code); + if ($the_original_cat) { + $the_original_cat_parent = $wpdb->get_var("SELECT parent FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=".$the_original_cat->term_taxonomy_id); + } else { + $the_original_cat_parent = false; + } + if($the_original_cat_parent){ + $op_tr = icl_object_id($the_original_cat_parent, 'category', false, $job->language_code); + if (!$op_tr) { + // The parent is missing. Possibly because we haven't created a translation of it yet + $parent_missing = true; + } + }else{$op_tr = 0;} + + $tmp = self::icl_insert_term($c, 'category', array('parent'=>$op_tr), $job->language_code); + if(!is_wp_error($tmp) && isset($tmp['term_taxonomy_id'])){ + $sitepress->set_term_translation($the_original_cat, + $tmp['term_taxonomy_id'], + 'category', + $job->language_code, + $job->source_language_code); + $cat_id = $tmp['term_id']; + } + }else{ + $cat_id = $thecat->term_id; + } + + if($cat_id){ + $cat_ids[] = $cat_id; + } + + + if ($parent_missing) { + $missing_parents[$cat_id] = $the_original_cat_parent; + } + } + + + + // Double check missing parents as they might be available now. + foreach ($missing_parents as $cat_id => $the_original_cat_parent) { + $op_tr = icl_object_id($the_original_cat_parent, 'category', false, $job->language_code); + $cat_trid = $sitepress->get_element_trid($cat_id,'tax_category'); + + $buf_post = isset($_POST) ? $_POST: array(); + $_POST['icl_trid'] = $cat_trid; + $_POST['icl_translation_of'] = $wpdb->get_var($wpdb->prepare( + "SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_category' AND trid=%d AND source_language_code IS NULL", $cat_trid)); + $_POST['icl_tax_category_language'] = $job->language_code; + + wp_update_term($cat_id, 'category', array('parent' => $op_tr)); + + $_POST = $buf_post; + + $cat_tax_id = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy='category'", $cat_id)); + + $wpdb->update($wpdb->prefix.'icl_translations', + array('language_code'=>$job->language_code, 'trid'=>$cat_trid, 'source_language_code'=>$job->source_language_code), + array('element_type'=>'tax_category','element_id'=>$cat_tax_id)); + } + delete_option('category_children'); + $postarr['post_category'] = $cat_ids; + + break; + default: + if(in_array($field->field_type, $sitepress->get_translatable_taxonomies(false, $job->original_post_type))){ + $taxs = self::decode_field_data($field->field_data_translated, $field->field_format); + + $missing_parents = array(); + + + $original_taxs = self::decode_field_data($field->field_data, $field->field_format); + $taxonomy = $field->field_type; + + $taxonomy_obj = get_taxonomy($taxonomy); + // array = hierarchical, string = non-hierarchical. + + if($taxonomy_obj->hierarchical){ + $missing_parents = array(); + } + + $alltaxs = $tax_ids = array(); + foreach($taxs as $k=>$c){ + + if($taxonomy_obj->hierarchical){ + $parent_missing = false; + } + + $thetax = $sitepress->get_term_by_name_and_lang($c, $taxonomy, $job->language_code); + + $taxs[$k] = $c; // Save $c as we may have added @.lang to it + if(empty($thetax)){ + $the_original_tax = $sitepress->get_term_by_name_and_lang($original_taxs[$k], $taxonomy, $job->source_language_code); + if ($taxonomy_obj->hierarchical && $the_original_tax) { + $the_original_tax_parent = $wpdb->get_var("SELECT parent FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=".$the_original_tax->term_taxonomy_id); + } else { + $the_original_tax_parent = false; + } + + if($the_original_tax_parent){ + $op_tr = icl_object_id($the_original_tax_parent, $taxonomy, false, $job->language_code); + if (!$op_tr) { + // The parent is missing. Possibly because we haven't created a translation of it yet + $parent_missing = true; + } + }else{$op_tr = 0;} + + $tmp = self::icl_insert_term($c, $taxonomy, array('parent'=>$op_tr), $job->language_code); + if(isset($tmp['term_taxonomy_id'])){ + $sitepress->set_term_translation($the_original_tax, + $tmp['term_taxonomy_id'], + $taxonomy, + $job->language_code, + $job->source_language_code); + } + $tax_id = $tmp['term_id']; + + }else{ + $tax_id = $thetax->term_id; + } + + if ($taxonomy_obj->hierarchical && $parent_missing) { + $missing_parents[$tax_id] = $the_original_tax_parent; + } + + $tax_ids[] = $tax_id; + $alltaxs[] = $c; + } + + // Double check missing parents as they might be available now. + foreach ($missing_parents as $tax_id => $the_original_tax_parent) { + $op_tr = icl_object_id($the_original_tax_parent, $taxonomy, false, $job->language_code); + $tax_trid = $sitepress->get_element_trid($cat_id,'tax_' . $taxonomy); + + $buf_post = isset($_POST) ? $_POST: array(); + $_POST['icl_trid'] = $tax_trid; + $_POST['icl_translation_of'] = $wpdb->get_var($wpdb->prepare( + "SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type=%s AND trid=%d AND source_language_code IS NULL", 'tax_'.$taxonomy, $tax_trid)); + $_POST['icl_tax_' . $taxonomy . '_language'] = $job->language_code; + + wp_update_term($tax_id, $taxonomy, array('parent' => $op_tr)); + + $_POST = $buf_post; + + $tax_tax_id = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy=%s", $cat_id, $taxonomy)); + + $wpdb->update($wpdb->prefix.'icl_translations', + array('language_code'=>$job->language_code, 'trid'=>$tax_trid, 'source_language_code'=>$job->source_language_code), + array('element_type'=>'tax_' . $taxonomy,'element_id'=>$tax_tax_id)); + } + delete_option($taxonomy . '_children'); + + + if ($taxonomy_obj->hierarchical) { + $postarr['tax_input'][$taxonomy] = $tax_ids; + } else { + $postarr['tax_input'][$taxonomy] = $taxs; + } + } + } + } + + $original_post = get_post($job->original_doc_id); + + $postarr['post_author'] = $original_post->post_author; + $postarr['post_type'] = $original_post->post_type; + + if($sitepress_settings['sync_comment_status']){ + $postarr['comment_status'] = $original_post->comment_status; + } + if($sitepress_settings['sync_ping_status']){ + $postarr['ping_status'] = $original_post->ping_status; + } + if($sitepress_settings['sync_page_ordering']){ + $postarr['menu_order'] = $original_post->menu_order; + } + if($sitepress_settings['sync_private_flag'] && $original_post->post_status=='private'){ + $postarr['post_status'] = 'private'; + } + if($sitepress_settings['sync_post_date']){ + $postarr['post_date'] = $original_post->post_date; + } + + + if(is_null($element_id)){ + $postarr['post_status'] = !$sitepress_settings['translated_document_status'] ? 'draft' : $original_post->post_status; + } else { + // set post_status to the current post status. + $postarr['post_status'] = $wpdb->get_var("SELECT post_status FROM {$wpdb->prefix}posts WHERE ID = ".$element_id); + } + + if($original_post->post_parent){ + $post_parent_trid = $wpdb->get_var("SELECT trid FROM {$wpdb->prefix}icl_translations + WHERE element_type='post_{$original_post->post_type}' AND element_id='{$original_post->post_parent}'"); + if($post_parent_trid){ + $parent_id = $wpdb->get_var("SELECT element_id FROM {$wpdb->prefix}icl_translations + WHERE element_type='post_{$original_post->post_type}' AND trid='{$post_parent_trid}' AND language_code='{$job->language_code}'"); + } + } + + if(isset($parent_id) && $sitepress_settings['sync_page_parent']){ + $_POST['post_parent'] = $postarr['post_parent'] = $parent_id; + $_POST['parent_id'] = $postarr['parent_id'] = $parent_id; + } + + $_POST['trid'] = $trid; + $_POST['lang'] = $job->language_code; + $_POST['skip_sitepress_actions'] = true; + + $postarr = apply_filters('icl_pre_save_pro_translation', $postarr); + + if(isset($element_id)){ // it's an update so dont change the url + $postarr['post_name'] = $wpdb->get_var($wpdb->prepare("SELECT post_name FROM {$wpdb->posts} WHERE ID=%d", $element_id)); + } + + if(isset($element_id)){ // it's an update so dont change post date + $existing_post = get_post($element_id); + $postarr['post_date'] = $existing_post->post_date; + $postarr['post_date_gmt'] = $existing_post->post_date_gmt; + } + + $new_post_id = $this->icl_insert_post( $postarr, $job->language_code ); + + // set taxonomies for users with limited caps + if(!current_user_can('manage-categories') && !empty($postarr['tax_input'])){ + foreach($postarr['tax_input'] as $taxonomy => $terms){ + wp_set_post_terms( $new_post_id, $terms, $taxonomy, FALSE ); // true to append to existing tags | false to replace existing tags + } + } + + do_action('icl_pro_translation_saved', $new_post_id, $data['fields']); + + + // Allow identical slugs + $post_name = sanitize_title($postarr['post_title']); + $post_name_rewritten = $wpdb->get_var($wpdb->prepare("SELECT post_name FROM {$wpdb->posts} WHERE ID=%d", $new_post_id)); + + $post_name_base = $post_name; + + if($post_name != $post_name_rewritten){ + $incr = 1; + do{ + + $exists = $wpdb->get_var($wpdb->prepare(" + SELECT p.ID FROM {$wpdb->posts} p + JOIN {$wpdb->prefix}icl_translations t ON t.element_id = p.ID AND t.element_type=%s + WHERE p.ID <> %d AND t.language_code = %s AND p.post_name=%s + ", 'post_' . $postarr['post_type'], $new_post_id, $job->language_code, $post_name)); + + if($exists){ + $incr++; + }else{ + break; + } + $post_name = $post_name_base . '-' . $incr; + + }while($exists); + + $wpdb->update($wpdb->posts, array('post_name' => $post_name), array('ID' => $new_post_id)); + } + + + + + + $ICL_Pro_Translation->_content_fix_links_to_translated_content($new_post_id, $job->language_code); + + // update body translation with the links fixed + $new_post_content = $wpdb->get_var($wpdb->prepare("SELECT post_content FROM {$wpdb->posts} WHERE ID=%d", $new_post_id)); + foreach($job->elements as $jel){ + if($jel->field_type=='body'){ + $fields_data_translated = $this->encode_field_data($new_post_content, $jel->field_format); + break; + } + } + $wpdb->update($wpdb->prefix.'icl_translate', array('field_data_translated'=>$fields_data_translated), array('job_id'=>$data['job_id'], 'field_type'=>'body')); + + + // set stickiness + //is the original post a sticky post? + remove_filter('option_sticky_posts', array($sitepress,'option_sticky_posts')); // remove filter used to get language relevant stickies. get them all + $sticky_posts = get_option('sticky_posts'); + $is_original_sticky = $original_post->post_type=='post' && in_array($original_post->ID, $sticky_posts); + + if($is_original_sticky && $sitepress_settings['sync_sticky_flag']){ + stick_post($new_post_id); + }else{ + if($original_post->post_type=='post' && !is_null($element_id)){ + unstick_post($new_post_id); //just in case - if this is an update and the original post stckiness has changed since the post was sent to translation + } + } + + //sync plugins texts + foreach((array)$this->settings['custom_fields_translation'] as $cf => $op){ + if ($op == 1) { + update_post_meta($new_post_id, $cf, get_post_meta($original_post->ID,$cf,true)); + } + } + + // set specific custom fields + $copied_custom_fields = array('_top_nav_excluded', '_cms_nav_minihome'); + foreach($copied_custom_fields as $ccf){ + $val = get_post_meta($original_post->ID, $ccf, true); + update_post_meta($new_post_id, $ccf, $val); + } + + // sync _wp_page_template + if($sitepress_settings['sync_page_template']){ + $_wp_page_template = get_post_meta($original_post->ID, '_wp_page_template', true); + if(!empty($_wp_page_template)){ + update_post_meta($new_post_id, '_wp_page_template', $_wp_page_template); + } + } + + // sync post format + if ( $sitepress_settings[ 'sync_post_format' ] ) { + $_wp_post_format = get_post_format( $original_post->ID ); + set_post_format( $new_post_id, $_wp_post_format ); + } + + + // set the translated custom fields if we have any. + foreach((array)$this->settings['custom_fields_translation'] as $field_name => $val){ + if ($val == 2) { // should be translated + // find it in the translation + foreach($job->elements as $name => $eldata) { + if ($eldata->field_data == $field_name) { + if (preg_match("/field-(.*?)-name/", $eldata->field_type, $match)) { + $field_id = $match[1]; + foreach($job->elements as $k => $v){ + if($v->field_type=='field-'.$field_id){ + $field_translation = self::decode_field_data($v->field_data_translated, $v->field_format) ; + } + if($v->field_type=='field-'.$field_id.'-type'){ + $field_type = $v->field_data; + } + } + if (isset($field_type) && $field_type == 'custom_field') { + $field_translation = str_replace ( '�A;', "\n", $field_translation ); + // always decode html entities eg decode & to & + $field_translation = html_entity_decode($field_translation); + update_post_meta($new_post_id, $field_name, $field_translation); + } + } + } + } + } + } + $link = get_edit_post_link($new_post_id); + if ($link == '') { + // the current user can't edit so just include permalink + $link = get_permalink($new_post_id); + } + if(is_null($element_id)){ + $wpdb->update($wpdb->prefix.'icl_translations', array('element_id' => $new_post_id), array('translation_id' => $translation_id) ); + $user_message = __('Translation added: ', 'sitepress') . '' . $postarr['post_title'] . '.'; + }else{ + $user_message = __('Translation updated: ', 'sitepress') . '' . $postarr['post_title'] . '.'; + } + + // synchronize the page parent for translations + if ($trid && $sitepress_settings['sync_page_parent']) { + $translations = $sitepress->get_element_translations($trid, 'post_' . $postarr['post_type']); + + foreach ($translations as $target_lang => $target_details) { + if ($target_lang != $job->language_code) { + if ($target_details->element_id) { + $sitepress->fix_translated_parent($new_post_id, $target_details->element_id, $target_lang, $job->language_code); + // restore child-parent relationships + $children = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_parent={$target_details->element_id} AND post_type='page'"); + foreach ($children as $ch) { + $ch_trid = $sitepress->get_element_trid($ch, 'post_' . $postarr['post_type']); + $ch_translations = $sitepress->get_element_translations($ch_trid, 'post_' . $postarr['post_type']); + if (isset($ch_translations[$job->language_code])) { + $wpdb->update($wpdb->posts, array('post_parent' => $new_post_id), array('ID' => $ch_translations[$job->language_code]->element_id)); + } + } + } + } + } + } + + + } + + + $this->messages[] = array( + 'type'=>'updated', + 'text' => $user_message + ); + + + if($this->settings['notification']['completed'] != ICL_TM_NOTIFICATION_NONE){ + require_once ICL_PLUGIN_PATH . '/inc/translation-management/tm-notification.class.php'; + if($data['job_id']){ + $tn_notification = new TM_Notification(); + $tn_notification->work_complete($data['job_id'], !is_null($element_id)); + } + } + + self::set_page_url($new_post_id); + + // redirect to jobs list + wp_redirect(admin_url(sprintf('admin.php?page=%s&%s=%d', + WPML_TM_FOLDER . '/menu/translations-queue.php', is_null($element_id) ? 'added' : 'updated', is_null($element_id) ? $new_post_id : $element_id ))); + + }else{ + $this->messages[] = array('type'=>'updated', 'text' => __('Translation (incomplete) saved.', 'sitepress')); + } + + do_action('icl_pro_translation_completed', $new_post_id); + + } + + // returns a front end link to a post according to the user access + // hide_empty - if current user doesn't have access to the link don't show at all + public static function tm_post_link($post_id, $anchor = false, $hide_empty = false){ + global $current_user; + get_currentuserinfo(); + + $parts = explode('_', $post_id); + if ($parts[0] == 'external') { + + $link = ''; + return apply_filters('WPML_get_link', $link, $post_id, $anchor, $hide_empty); + } + + if(false === $anchor){ + $anchor = get_the_title($post_id); + } + + $opost = get_post($post_id); + if(!$opost || ($opost->post_status == 'draft' || $opost->post_status == 'private' || $opost->post_status == 'trash') && $opost->post_author != $current_user->data->ID){ + if($hide_empty){ + $elink = ''; + }else{ + $elink = sprintf('%s', $anchor); + } + }else{ + $elink = sprintf('%s', get_permalink($post_id), $anchor); + } + + return $elink; + + } + + public function tm_post_permalink($post_id){ + global $current_user; + get_currentuserinfo(); + + $parts = explode('_', $post_id); + if ($parts[0] == 'external') { + + return ''; + } + + $opost = get_post($post_id); + if(!$opost || ($opost->post_status == 'draft' || $opost->post_status == 'private' || $opost->post_status == 'trash') && $opost->post_author != $current_user->data->ID){ + $elink = ''; + }else{ + $elink = get_permalink($post_id); + } + + return $elink; + + } + + // + // when the translated post was created, we have the job_id and need to update the job + function save_job_fields_from_post($job_id, $post){ + global $wpdb, $sitepress; + $data['complete'] = 1; + $data['job_id'] = $job_id; + $job = $this->get_translation_job($job_id,1); + + if(is_array($job->elements)) + foreach($job->elements as $element){ + $field_data = ''; + switch($element->field_type){ + case 'title': + $field_data = $this->encode_field_data($post->post_title, $element->field_format); + break; + case 'body': + $field_data = $this->encode_field_data($post->post_content, $element->field_format); + break; + case 'excerpt': + $field_data = $this->encode_field_data($post->post_excerpt, $element->field_format); + break; + default: + if(false !== strpos($element->field_type, 'field-') && !empty($this->settings['custom_fields_translation'])){ + $cf_name = preg_replace('#^field-#', '', $element->field_type); + if(isset($this->settings['custom_fields_translation'][$cf_name])){ + if($this->settings['custom_fields_translation'][$cf_name] == 1){ //copy + $field_data = get_post_meta($original_post->ID, $cf_name, 1); + if(is_scalar($field_data)) + $field_data = $this->encode_field_data($field_data, $element->field_format); + else $field_data = ''; + }elseif($this->settings['custom_fields_translation'][$cf_name] == 2){ // translate + $field_data = get_post_meta($post->ID, $cf_name, 1); + if(is_scalar($field_data)) + $field_data = $this->encode_field_data($field_data, $element->field_format); + else $field_data = ''; + } + } + }else{ + if(in_array($element->field_type, $sitepress->get_translatable_taxonomies(true, $post->post_type))){ + $ids = array(); + foreach($job->elements as $je){ + if($je->field_type == $element->field_type .'_ids' ){ + $ids = explode(',', $je->field_data); + } + } + $translated_tax_names = array(); + foreach($ids as $id){ + $translated_tax_id = icl_object_id($id, $element->field_type,false,$job->language_code); + if($translated_tax_id){ + $translated_tax_names[] = $wpdb->get_var($wpdb->prepare(" + SELECT t.name FROM {$wpdb->terms} t JOIN {$wpdb->term_taxonomy} x ON t.term_id = x.term_id + WHERE x.term_taxonomy_id = %d + ", $translated_tax_id)); + } + } + $field_data = $this->encode_field_data($translated_tax_names, $element->field_format); + + } + } + } + $wpdb->update($wpdb->prefix.'icl_translate', + array('field_data_translated'=>$field_data, 'field_finished'=>1), + array('tid'=>$element->tid) + ); + + } + + $this->mark_job_done($job_id); + + } + + public static function determine_translated_taxonomies($elements, $taxonomy, $translated_language){ + global $sitepress, $wpdb; + $translated_elements = false; + foreach($elements as $k=>$element){ + $term = get_term_by('name', $element, $taxonomy); + if ($term) { + $trid = $sitepress->get_element_trid($term->term_taxonomy_id, 'tax_' . $taxonomy); + $translations = $sitepress->get_element_translations($trid, 'tax_' . $taxonomy); + if(isset($translations[$translated_language])){ + $translated_elements[$k] = $translations[$translated_language]->name; + }else{ + $translated_elements[$k] = ''; + } + } else { + $translated_elements[$k] = ''; + } + } + + return $translated_elements; + } + + function mark_job_done($job_id){ + global $wpdb; + $wpdb->update($wpdb->prefix.'icl_translate_job', array('translated'=>1), array('job_id'=>$job_id)); + $wpdb->update($wpdb->prefix.'icl_translate', array('field_finished'=>1), array('job_id'=>$job_id)); + } + + function resign_translator($job_id){ + global $wpdb; + list($translator_id, $rid) = $wpdb->get_row($wpdb->prepare("SELECT translator_id, rid FROM {$wpdb->prefix}icl_translate_job WHERE job_id=%d", $job_id), ARRAY_N); + + if(!empty($translator_id)){ + if($this->settings['notification']['resigned'] != ICL_TM_NOTIFICATION_NONE){ + require_once ICL_PLUGIN_PATH . '/inc/translation-management/tm-notification.class.php'; + if($job_id){ + $tn_notification = new TM_Notification(); + $tn_notification->translator_resigned($translator_id, $job_id); + } + } + } + + $wpdb->update($wpdb->prefix.'icl_translate_job', array('translator_id'=>0), array('job_id'=>$job_id)); + $wpdb->update($wpdb->prefix.'icl_translation_status', array('translator_id'=>0, 'status'=>ICL_TM_WAITING_FOR_TRANSLATOR), array('rid'=>$rid)); + } + + function remove_translation_job($job_id, $new_translation_status = ICL_TM_WAITING_FOR_TRANSLATOR, $new_translator_id = 0){ + global $wpdb; + + list($prev_translator_id, $rid) = $wpdb->get_row($wpdb->prepare("SELECT translator_id, rid FROM {$wpdb->prefix}icl_translate_job WHERE job_id=%d", $job_id), ARRAY_N); + + $wpdb->update($wpdb->prefix . 'icl_translate_job', array('translator_id' => $new_translator_id), array('job_id' => $job_id)); + $wpdb->update($wpdb->prefix . 'icl_translate', array('field_data_translated' => '', 'field_finished' => 0), array('job_id' => $job_id)); + + $error = false; + + if($rid){ + $wpdb->update($wpdb->prefix . 'icl_translation_status', array('status' => $new_translation_status, 'translator_id' => $new_translator_id), array('rid' => $rid)); + + if($this->settings['notification']['resigned'] == ICL_TM_NOTIFICATION_IMMEDIATELY && !empty($prev_translator_id)){ + require_once ICL_PLUGIN_PATH . '/inc/translation-management/tm-notification.class.php'; + $tn_notification = new TM_Notification(); + $tn_notification->translator_removed($prev_translator_id, $job_id); + $tn_notification->mail_queue(); + } + + }else{ + $error = sprintf(__('Translation entry not found for: %d', 'wpml-translation-management'), $job_id); + } + + } + + function abort_translation(){ + global $wpdb; + + $job_id = $_POST['job_id']; + $error = ''; + $message = ''; + + $error = $this->remove_translation_job($job_id, ICL_TM_WAITING_FOR_TRANSLATOR, 0); + if(!$error){ + $message = __('Job removed', 'wpml-translation-management'); + } + + echo json_encode(array('message' => $message, 'error' => $error)); + exit; + + } + + // $translation_id - int or array + function cancel_translation_request($translation_id){ + global $wpdb; + + if(is_array($translation_id)){ + foreach($translation_id as $id){ + $this->cancel_translation_request($id); + } + }else{ + + list($rid, $translator_id) = $wpdb->get_row($wpdb->prepare("SELECT rid, translator_id FROM {$wpdb->prefix}icl_translation_status WHERE translation_id=%d", $translation_id), ARRAY_N); + $job_id = $wpdb->get_var($wpdb->prepare("SELECT job_id FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d AND revision IS NULL ", $rid)); + + if($this->settings['notification']['resigned'] == ICL_TM_NOTIFICATION_IMMEDIATELY && !empty($translator_id)){ + require_once ICL_PLUGIN_PATH . '/inc/translation-management/tm-notification.class.php'; + $tn_notification = new TM_Notification(); + $tn_notification->translator_removed($translator_id, $job_id); + $tn_notification->mail_queue(); + } + + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translate_job WHERE job_id=%d", $job_id)); + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translate WHERE job_id=%d", $job_id)); + + $max_job_id = $wpdb->get_var($wpdb->prepare("SELECT MAX(job_id) FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d", $rid)); + if($max_job_id){ + $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translate_job SET revision = NULL WHERE job_id=%d", $max_job_id)); + $_prevstate = $wpdb->get_var($wpdb->prepare("SELECT _prevstate FROM {$wpdb->prefix}icl_translation_status WHERE translation_id = %d", $translation_id)); + if(!empty($_prevstate)){ + $_prevstate = unserialize($_prevstate); + $wpdb->update($wpdb->prefix . 'icl_translation_status', + array( + 'status' => $_prevstate['status'], + 'translator_id' => $_prevstate['translator_id'], + 'status' => $_prevstate['status'], + 'needs_update' => $_prevstate['needs_update'], + 'md5' => $_prevstate['md5'], + 'translation_service' => $_prevstate['translation_service'], + 'translation_package' => $_prevstate['translation_package'], + 'timestamp' => $_prevstate['timestamp'], + 'links_fixed' => $_prevstate['links_fixed'] + ), + array('translation_id'=>$translation_id) + ); + } + }else{ + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translation_status WHERE translation_id=%d", $translation_id)); + } + + // delete record from icl_translations if trid is null + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id=%d AND element_id IS NULL", $translation_id)); + + } + + } + + /* WPML CONFIG */ + /* ******************************************************************************************** */ + + function _parse_wpml_config($config){ + + global $sitepress, $sitepress_settings; + + // custom fields + if(!empty($config['wpml-config']['custom-fields'])){ + if(!is_numeric(key(current($config['wpml-config']['custom-fields'])))){ + $cf[0] = $config['wpml-config']['custom-fields']['custom-field']; + }else{ + $cf = $config['wpml-config']['custom-fields']['custom-field']; + } + foreach($cf as $c){ + if($c['attr']['action'] == 'translate'){ + $action = 2; + }elseif($c['attr']['action'] == 'copy'){ + $action = 1; + }else{ + $action = 0; + } + $this->settings['custom_fields_translation'][$c['value']] = $action; + if(is_array($this->settings['custom_fields_readonly_config']) && !in_array($c['value'], $this->settings['custom_fields_readonly_config'])){ + $this->settings['custom_fields_readonly_config'][] = $c['value']; + } + + } + } + + // custom types + + $cf = array(); + if(!empty($config['wpml-config']['custom-types'])){ + if(!is_numeric(key(current($config['wpml-config']['custom-types'])))){ + $cf[0] = $config['wpml-config']['custom-types']['custom-type']; + }else{ + $cf = $config['wpml-config']['custom-types']['custom-type']; + } + foreach($cf as $c){ + $translate = intval($c['attr']['translate']); + if($translate){ + $sitepress->verify_post_translations($c['value']); + } + $this->settings['custom_types_readonly_config'][$c['value']] = $translate; + $sitepress_settings['custom_posts_sync_option'][$c['value']] = $translate; + } + + add_filter('get_translatable_documents', array($this, '_override_get_translatable_documents')); + } + + // taxonomies + $cf = array(); + if(!empty($config['wpml-config']['taxonomies'])){ + if(!is_numeric(key(current($config['wpml-config']['taxonomies'])))){ + $cf[0] = $config['wpml-config']['taxonomies']['taxonomy']; + }else{ + $cf = $config['wpml-config']['taxonomies']['taxonomy']; + } + + foreach($cf as $c){ + + // did this exist before? + $empty_before = empty($this->settings['taxonomies_readonly_config'][$c['value']]); + + $translate = intval($c['attr']['translate']); + $this->settings['taxonomies_readonly_config'][$c['value']] = $translate; + $sitepress_settings['taxonomies_sync_option'][$c['value']] = $translate; + + // this has just changed. save. + if($translate == 1 && $empty_before){ + $sitepress->verify_taxonomy_translations($c['value']); + $this->save_settings(); + } + } + add_filter('get_translatable_taxonomies', array($this, '_override_get_translatable_taxonomies')); + } + + // taxonomies - check what's been removed + if(!empty($this->settings['taxonomies_readonly_config'])){ + $config_values = array(); + foreach($cf as $config_value){ + $config_values[$config_value['value']] = $config_value['attr']['translate']; + } + $do_save = false; + foreach($this->settings['taxonomies_readonly_config'] as $tconf => $tconf_val){ + if(empty($config_values[$tconf])){ + unset($this->settings['taxonomies_readonly_config'][$tconf]); + $do_save = true; + } + //else + // { + // if($config_values[$tconf] != $tconf_val){ + // $this->settings['taxonomies_readonly_config'][$tconf] = $config_values[$tconf]; + // $do_save = true; + // } + // } + } + if($do_save){ + $this->save_settings(); + } + } + + // admin texts + if(function_exists('icl_register_string')){ + $admin_texts = array(); + if(!empty($config['wpml-config']['admin-texts'])){ + + if( !is_numeric(key(@current($config['wpml-config']['admin-texts'])))){ + $admin_texts[0] = $config['wpml-config']['admin-texts']['key']; + }else{ + $admin_texts = $config['wpml-config']['admin-texts']['key']; + } + + foreach($admin_texts as $a){ + + if(isset($a['type'])) $type = $a['type']; + if(isset($a['atid'])) $atid = $a['atid']; + if(!isset($type)) $type = 'plugin'; + if(!isset($atid)) $atid = ''; + + $keys = array(); + if(!isset($a['key'])){ + $arr[$a['attr']['name']] = 1; + continue; + }elseif(!is_numeric(key($a['key']))){ + $keys[0] = $a['key']; + }else{ + $keys = $a['key']; + } + + foreach($keys as $key){ + if(isset($key['key'])){ + $arr[$a['attr']['name']][$key['attr']['name']] = $this->_read_admin_texts_recursive($key['key']); + }else{ + $arr[$a['attr']['name']][$key['attr']['name']] = 1; + } + } + } + + $this->admin_texts_to_translate = array_merge($this->admin_texts_to_translate, $arr); + $_icl_admin_option_names = get_option('_icl_admin_option_names'); + + foreach($arr as $key => $v){ + // http://forum.wpml.org/topic.php?id=4888&replies=7#post-23038 + // http://forum.wpml.org/topic.php?id=4615 + // http://forum.wpml.org/topic.php?id=4761 + + remove_filter('option_'.$key, 'icl_st_translate_admin_string'); // dont try to translate this one below + $value = get_option($key); + add_filter('option_'.$key, 'icl_st_translate_admin_string'); // put the filter back on + + $value = maybe_unserialize($value); + if(false === $value){ + + // wildcard? register all matching options in wp_options + global $wpdb; + $src = str_replace('*', '%', esc_sql($key)); + $matches = $wpdb->get_results("SELECT option_name, option_value FROM {$wpdb->options} WHERE option_name LIKE '{$src}'"); + foreach($matches as $match){ + icl_register_string('admin_texts_' . $type . '_' . $atid, $match->option_name , $match->option_value); + + $_icl_admin_option_names[$type][$atid][] = $match->option_name; + } + unset($arr[$key]); + + }if(is_scalar($value)){ + icl_register_string('admin_texts_' . $type . '_' . $atid, $key , $value); + }else{ + if(is_object($value)) $value = (array)$value; + if(!empty($value)){ + $this->_register_string_recursive($key, $value, $arr[$key], '', $type . '_' . $atid); + } + } + } + + //filter out obsolete entries + /* + $_as_changed = false; + foreach($_icl_admin_option_names[$type][$atid] as $k=>$csf){ + if(empty($arr[$csf])){ + unset($_icl_admin_option_names[$type][$atid][$k]); + } + } + */ + + + $_icl_admin_option_names[$type][$atid] = @array_merge_recursive((array)$_icl_admin_option_names[$type][$atid], $this->_array_keys_recursive($arr)); + + // avoid duplicates + /* + foreach($_icl_admin_option_names[$type][$atid] as $k => $v){ + if(is_array($v)){ + $_icl_admin_option_names[$type][$atid][$k] = array_unique($v); + } + } + */ + + $_icl_admin_option_names[$type][$atid] = __array_unique_recursive($_icl_admin_option_names[$type][$atid]); + // __array_unique_recursive is declared in the string translation plugin inc/functions.php + update_option('_icl_admin_option_names', $_icl_admin_option_names); + + } + } + + // language-switcher-settings + if(empty($sitepress_settings['language_selector_initialized']) || (isset($_GET['restore_ls_settings']) && $_GET['restore_ls_settings'] == 1)){ + if(!empty($config['wpml-config']['language-switcher-settings'])){ + + if(!is_numeric(key($config['wpml-config']['language-switcher-settings']['key']))){ + $cfgsettings[0] = $config['wpml-config']['language-switcher-settings']['key']; + }else{ + $cfgsettings = $config['wpml-config']['language-switcher-settings']['key']; + } + $iclsettings = $this->_read_settings_recursive($cfgsettings); + + $iclsettings['language_selector_initialized'] = 1; + + $sitepress->save_settings($iclsettings); + + if(!empty($sitepress_settings['setup_complete']) && !empty($_GET['page'])){ + wp_redirect(admin_url('admin.php?page='.$_GET['page'].'&icl_ls_reset=default#icl_save_language_switcher_options')); + } + } + } + + } + + function _array_keys_recursive($arr){ + $arr_rec_ret = array(); + foreach((array)$arr as $k=>$v){ + if(is_array($v)){ + $arr_rec_ret[$k] = $this->_array_keys_recursive($v); + }else{ + $arr_rec_ret[] = $k; + } + } + return $arr_rec_ret; + } + + function _read_admin_texts_recursive($keys){ + if(!is_numeric(key($keys))){ + $_keys = array($keys); + $keys = $_keys; + unset($_keys); + } + if($keys) { + foreach($keys as $key){ + if(isset($key['key'])){ + $arr[$key['attr']['name']] = $this->_read_admin_texts_recursive($key['key']); + }else{ + $arr[$key['attr']['name']] = 1; + } + } + } + return $arr; + } + + function _register_string_recursive($key, $value, $arr, $prefix = '', $suffix){ + if(is_scalar($value)){ + if(!empty($value) && $arr == 1){ + icl_register_string('admin_texts_' . $suffix, $prefix . $key , $value); + } + }else{ + if(!is_null($value)){ + foreach($value as $sub_key=>$sub_value){ + + $is_wildcard = false; + if(!isset($arr[$sub_key])){ //wildcard + foreach(array_keys($arr) as $arrkey){ + $arrkey = '/' . str_replace('*', '(.*)', $arrkey) . '/'; + if(preg_match($arrkey, $sub_key)){ + $is_wildcard = true; + $arr[$sub_key] = true; //placeholder + break; + }; + + } + } + + if(isset($arr[$sub_key]) || $is_wildcard){ + $this->_register_string_recursive($sub_key, $sub_value, $arr[$sub_key], $prefix . '[' . $key .']', $suffix); + } + + } + } + } + } + + function _read_settings_recursive($cfgsettings){ + foreach($cfgsettings as $s){ + if(isset($s['key'])){ + if(!is_numeric(key($s['key']))){ + $skey[0] = $s['key']; + }else{ + $skey = $s['key']; + } + $iclsettings[$s['attr']['name']] = $this->_read_settings_recursive($skey); + }else{ + $iclsettings[$s['attr']['name']] = $s['value']; + } + } + return $iclsettings; + } + + function render_option_writes($option_name, $option_value, $option_key=''){ + if(!defined('WPML_ST_FOLDER')) return; + static $option; + if(!$option_key){ + $option = maybe_unserialize(get_option($option_name)); + if(is_object($option)){ + $option = (array)$option; + } + } + + $option_names = get_option('_icl_admin_option_names'); + + // determine theme/plugin name (string context) + $es_context = ''; + if(!empty($option_names['theme'])){ + foreach((array)$option_names['theme'][basename(get_template_directory())] as $ops=>$val){ + + if(!empty($option_key)){ + $int = preg_match_all('#\[([^\]]+)\]#', $option_key, $matches); + if($int) $opname = $matches[1][0]; + }else{ + $opname = $option_name; + } + + if($ops == $opname){ + $es_context = 'admin_texts_theme_' . basename(get_template_directory()); + break; + } + } + + if(get_template_directory() != get_stylesheet_directory()){ + foreach((array)$option_names['theme'][basename(get_stylesheet_directory())] as $ops=>$val){ + + if(!empty($option_key)){ + $int = preg_match_all('#\[([^\]]+)\]#', $option_key, $matches); + if($int) $opname = $matches[1][0]; + }else{ + $opname = $option_name; + } + + if(is_scalar($ops) && $ops == $opname){ + $es_context = 'admin_texts_theme_' . get_stylesheet_directory(); + break; + } + } + } + } + + if(!empty($option_names['plugin'])){ + foreach((array)$option_names['plugin'] as $plugin => $options){ + foreach($options as $okey => $ops){ + if(is_scalar($ops) && $ops == $option_name){ + $es_context = 'admin_texts_plugin_' . $plugin; + break; + }elseif(is_array($ops) && is_array($option_value) && (array_values($ops) == array_values(array_keys($option_value)))){ + $es_context = 'admin_texts_plugin_' . $plugin; + } + } + } + + } + + + echo '
                '; + echo '
              • '; + + + if(is_scalar($option_value)){ + $int = preg_match_all('#\[([^\]]+)\]#', $option_key, $matches); + + if(count($matches[1]) > 1){ + $value = $option; + for($i = 1; $i < count($matches[1]); $i++){ + $value = $value[$matches[1][$i]]; + } + $value = $value[$option_name]; + $edit_link = ''; + }else{ + if(is_scalar($option)){ + $value = $option; + }elseif(isset($option[$option_name])){ + $value = $option[$option_name]; + }else{ + $value = ''; + } + + if(!$option_key){ + $edit_link = '[' . + __('translate', 'sitepress') . ']'; + }else{ + $edit_link = ''; + } + } + + if(false !== strpos($option_name, '*')){ + $value = '{{ ' . __('Multiple options', 'wpml-translation-management') . ' }}'; + }else{ + $value = esc_html($value); + if(strlen($value) > 200){ + $value = substr($value, 0, 200) . ' ...'; + } + } + echo '
              • ' . $option_name . ': ' . $value . ' ' . $edit_link . '
              • '; + }else{ + $edit_link = '[' . + __('translate', 'sitepress') . ']'; + echo '' . $option_name . ' ' . $edit_link; + foreach((array)$option_value as $key=>$value){ + $this->render_option_writes($key, $value, $option_key . '[' . $option_name . ']'); + } + } + echo ''; + echo '
              '; + } + + function _override_get_translatable_documents($types){ + global $wp_post_types; + foreach($types as $k=>$type){ + if(isset($this->settings['custom_types_readonly_config'][$k]) && !$this->settings['custom_types_readonly_config'][$k]){ + unset($types[$k]); + } + } + foreach($this->settings['custom_types_readonly_config'] as $cp=>$translate){ + if($translate && !isset($types[$cp]) && isset($wp_post_types[$cp])){ + $types[$cp] = $wp_post_types[$cp]; + } + } + return $types; + } + + function _override_get_translatable_taxonomies($taxs_obj_type){ + global $wp_taxonomies, $sitepress; + + $taxs = $taxs_obj_type['taxs']; + + $object_type = $taxs_obj_type['object_type']; + foreach($taxs as $k=>$tax){ + if(!$sitepress->is_translated_taxonomy($tax)){ + unset($taxs[$k]); + } + } + + foreach($this->settings['taxonomies_readonly_config'] as $tx=>$translate){ + if($translate && !in_array($tx, $taxs) && isset($wp_taxonomies[$tx]) && in_array($object_type, $wp_taxonomies[$tx]->object_type)){ + $taxs[] = $tx; + } + } + + $ret = array('taxs'=>$taxs, 'object_type'=>$taxs_obj_type['object_type']); + + return $ret; + } + + function load_plugins_wpml_config() + { + if ( is_multisite() ) { + // Get multi site plugins + $plugins = get_site_option( 'active_sitewide_plugins' ); + if ( !empty( $plugins ) ) { + foreach ( $plugins as $p => $dummy ) { + $config_file = WP_PLUGIN_DIR . '/' . dirname( $p ) . '/wpml-config.xml'; + if ( trim( dirname( $p ), '\/.' ) && file_exists( $config_file ) ) { + $this->wpml_config_files[ ] = $config_file; + } + } + } + } + + // Get single site or current blog active plugins + $plugins = get_option( 'active_plugins' ); + if ( !empty( $plugins ) ) { + foreach ( $plugins as $p ) { + $config_file = WP_PLUGIN_DIR . '/' . dirname( $p ) . '/wpml-config.xml'; + if ( trim( dirname( $p ), '\/.' ) && file_exists( $config_file ) ) { + $this->wpml_config_files[ ] = $config_file; + } + } + } + + // Get the must-use plugins + $mu_plugins = wp_get_mu_plugins(); + if ( !empty( $mu_plugins ) ) { + foreach ( $mu_plugins as $mup ) { + if ( rtrim( dirname( $mup ), '/' ) != WPMU_PLUGIN_DIR ) { + $config_file = dirname( $mup ) . '/wpml-config.xml'; + $this->wpml_config_files[ ] = $config_file; + } + } + } + } + + function load_theme_wpml_config(){ + if(get_template_directory() != get_stylesheet_directory()){ + $config_file = get_stylesheet_directory().'/wpml-config.xml'; + if(file_exists($config_file)){ + $this->wpml_config_files[] = $config_file; + } + } + + $config_file = get_template_directory().'/wpml-config.xml'; + if(file_exists($config_file)){ + $this->wpml_config_files[] = $config_file; + } + + + } + + function parse_wpml_config_files(){ + + if(!empty($this->wpml_config_files)){ + + $config_all['wpml-config'] = array( + 'custom-fields' => array(), + 'custom-types' => array(), + 'taxonomies' => array(), + 'admin-texts' => array(), + 'language-switcher-settings' => array() + ); + + foreach($this->wpml_config_files as $file){ + $config = icl_xml2array(file_get_contents($file)); + + if(isset($config['wpml-config'])){ + + //custom-fields + if(isset($config['wpml-config']['custom-fields'])){ + if(isset($config['wpml-config']['custom-fields']['custom-field']['value'])){ //single + $config_all['wpml-config']['custom-fields']['custom-field'][] = $config['wpml-config']['custom-fields']['custom-field']; + }else{ + foreach($config['wpml-config']['custom-fields']['custom-field'] as $cf){ + $config_all['wpml-config']['custom-fields']['custom-field'][] = $cf; + } + } + } + + //custom-types + if(isset($config['wpml-config']['custom-types'])){ + if(isset($config['wpml-config']['custom-types']['custom-type']['value'])){ //single + $config_all['wpml-config']['custom-types']['custom-type'][] = $config['wpml-config']['custom-types']['custom-type']; + }else{ + foreach($config['wpml-config']['custom-types']['custom-type'] as $cf){ + $config_all['wpml-config']['custom-types']['custom-type'][] = $cf; + } + } + } + + //taxonomies + if(isset($config['wpml-config']['taxonomies'])){ + if(isset($config['wpml-config']['taxonomies']['taxonomy']['value'])){ //single + $config_all['wpml-config']['taxonomies']['taxonomy'][] = $config['wpml-config']['taxonomies']['taxonomy']; + }else{ + foreach($config['wpml-config']['taxonomies']['taxonomy'] as $cf){ + $config_all['wpml-config']['taxonomies']['taxonomy'][] = $cf; + } + } + } + + //admin-texts + if(isset($config['wpml-config']['admin-texts'])){ + + $type = (dirname($file) == get_template_directory() || dirname($file) == get_stylesheet_directory()) ? 'theme' : 'plugin'; + $atid = basename(dirname($file)); + + if( !is_numeric(key(@current($config['wpml-config']['admin-texts'])))){ //single + $config['wpml-config']['admin-texts']['key']['type'] = $type; + $config['wpml-config']['admin-texts']['key']['atid'] = $atid; + $config_all['wpml-config']['admin-texts']['key'][] = $config['wpml-config']['admin-texts']['key']; + }else{ + foreach($config['wpml-config']['admin-texts']['key'] as $cf){ + $cf['type'] = $type; + $cf['atid'] = $atid; + $config_all['wpml-config']['admin-texts']['key'][] = $cf; + } + } + } + + //language-switcher-settings + if(isset($config['wpml-config']['language-switcher-settings'])){ + if(!is_numeric(key($config['wpml-config']['language-switcher-settings']['key']))){ //single + $config_all['wpml-config']['language-switcher-settings']['key'][] = $config['wpml-config']['language-switcher-settings']['key']; + }else{ + foreach($config['wpml-config']['language-switcher-settings']['key'] as $cf){ + $config_all['wpml-config']['language-switcher-settings']['key'][] = $cf; + } + } + } + } + } + + $config_all = apply_filters('icl_wpml_config_array', $config_all); + + $this->_parse_wpml_config($config_all); + } + } + + function load_config_pre_process(){ + $this->settings['__custom_types_readonly_config_prev'] = (isset($this->settings['custom_types_readonly_config']) && is_array($this->settings['custom_types_readonly_config'])) ? $this->settings['custom_types_readonly_config'] : array(); + $this->settings['custom_types_readonly_config'] = array(); + + $this->settings['__custom_fields_readonly_config_prev'] = (isset($this->settings['custom_fields_readonly_config']) && is_array($this->settings['custom_fields_readonly_config'])) ? $this->settings['custom_fields_readonly_config'] : array(); + $this->settings['custom_fields_readonly_config'] = array(); + + } + + function load_config_post_process(){ + $changed = false; + foreach($this->settings['__custom_types_readonly_config_prev'] as $pk=>$pv){ + if(!isset($this->settings['custom_types_readonly_config'][$pk]) || $this->settings['custom_types_readonly_config'][$pk] != $pv){ + $changed = true; + break; + } + } + foreach($this->settings['custom_types_readonly_config'] as $pk=>$pv){ + if(!isset($this->settings['__custom_types_readonly_config_prev'][$pk]) || $this->settings['__custom_types_readonly_config_prev'][$pk] != $pv){ + $changed = true; + break; + } + } + + foreach($this->settings['__custom_fields_readonly_config_prev'] as $cf){ + if(!in_array($cf, $this->settings['custom_fields_readonly_config'])){ + $changed = true; + break; + } + } + foreach($this->settings['custom_fields_readonly_config'] as $cf){ + if(!in_array($cf, $this->settings['__custom_fields_readonly_config_prev'])){ + $changed = true; + break; + } + } + + if($changed){ + $this->save_settings(); + } + + + } + + public static function icanlocalize_service_info($info = array()) { + global $sitepress; + $return = array(); + $return['name'] = 'ICanLocalize'; + $return['logo'] = ICL_PLUGIN_URL . '/res/img/web_logo_small.png'; + $return['setup_url'] = $sitepress->create_icl_popup_link('@select-translators;from_replace;to_replace@', array('ar' => 1), true); + $return['header'] = __('Looking for a quality translation service?', 'sitepress'); + $return['description'] = __('ICanLocalize, the makers of WPML, offers excellent
              human service done by expert translators, for only $0.09 per word.', 'sitepress'); + $info['icanlocalize'] = $return; + return $info; + } + + public function clear_cache() { + global $wpdb; + delete_option($wpdb->prefix . 'icl_translators_cached'); + delete_option($wpdb->prefix . 'icl_non_translators_cached'); + } + + // shows post content for visual mode (iframe) in translation editor + function _show_post_content(){ + global $tinymce_version; + if($id = @intval($_GET['post_id'])){ + $post = get_post($id); + if($post){ + if(@intval($_GET['rtl'])){ + $rtl = ' dir="rtl"'; + }else{ + $rtl = ''; + } + echo ''; + echo ''; + $csss = array( + '/' . WPINC . '/js/tinymce/themes/advanced/skins/wp_theme/content.css?ver='.$tinymce_version, + '/' . WPINC . '/js/tinymce/plugins/spellchecker/css/content.css?ver='.$tinymce_version, + '/' . WPINC . '/js/tinymce/plugins/wordpress/css/content.css?ver='.$tinymce_version + ); + foreach($csss as $css){ + echo '' . "\n"; + } + echo ''; + echo ''; + switch($_GET['field_type']){ + default: + if(0 === strpos($_GET['field_type'], 'field-')){ + echo get_post_meta($id, preg_replace('#^field-#', '', $_GET['field_type']), true); + }else{ + remove_filter('the_content', 'do_shortcode', 11); + echo apply_filters('the_content', $post->post_content); + } + } + echo ''; + echo ''; + exit; + }else{ + wp_die(__('Post not found!', 'sitepress')); + } + exit; + }else{ + wp_die(__('Post not found!', 'sitepress')); + } + } + + function _user_search(){ + $q = $_POST['q']; + + $non_translators = self::get_blog_not_translators(); + + $matched_users = array(); + foreach($non_translators as $t){ + if(false !== stripos($t->user_login, $q) || false !== stripos($t->display_name, $q)){ + $matched_users[] = $t; + } + if(count($matched_users) == 100) break; + } + + if(!empty($matched_users)){ + $cssheight = count($matched_users) > 10 ? '200' : 20*count($matched_users) + 5; + echo ''; + + }else{ + echo ' '; + _e('No matches', 'sitepress'); + echo ''; + } + + + exit; + + } + + function make_duplicates($data){ + foreach($data['iclpost'] as $master_post_id){ + foreach($data['duplicate_to'] as $lang => $one){ + $this->make_duplicate($master_post_id, $lang); + } + } + } + + function make_duplicate($master_post_id, $lang){ + static $done = array(); + + if(isset($done[$master_post_id][$lang])) return; + $done[$master_post_id][$lang] = true; + + global $sitepress, $sitepress_settings, $wpdb; + + do_action('icl_before_make_duplicate', $master_post_id, $lang); + + $master_post = get_post($master_post_id); + + $is_duplicated = false; + $trid = $sitepress->get_element_trid($master_post_id, 'post_' . $master_post->post_type); + if($trid){ + $translations = $sitepress->get_element_translations($trid, 'post_' . $master_post->post_type); + + if(isset($translations[$lang])){ + $postarr['ID'] = $translations[$lang]->element_id; + $is_duplicated = get_post_meta($translations[$lang]->element_id, '_icl_lang_duplicate_of', true); + } + + } + + // covers the case when deleting in bulk from all languages + // setting post_status to trash before wp_trash_post runs issues an WP error + $posts_to_delete_or_restore_in_bulk = false; + if(isset($_GET['action']) && ($_GET['action'] == 'trash' || $_GET['action'] == 'untrash') && isset($_GET['lang']) && $_GET['lang'] == 'all'){ + static $posts_to_delete_or_restore_in_bulk; + if(is_null($posts_to_delete_or_restore_in_bulk)){ + $posts_to_delete_or_restore_in_bulk = isset($_GET['post']) && is_array($_GET['post']) ? $_GET['post'] : false; + } + } + + $postarr['post_author'] = $master_post->post_author; + $postarr['post_date'] = $master_post->post_date; + $postarr['post_date_gmt'] = $master_post->post_date_gmt; + $postarr['post_content'] = $master_post->post_content; + $postarr['post_title'] = $master_post->post_title; + $postarr['post_excerpt'] = $master_post->post_excerpt; + + if(($sitepress_settings['sync_delete'] || $is_duplicated) && (!$posts_to_delete_or_restore_in_bulk || !in_array($postarr['ID'], $posts_to_delete_or_restore_in_bulk))){ + $postarr['post_status'] = $master_post->post_status; + } + $postarr['comment_status'] = $master_post->comment_status; + $postarr['ping_status'] = $master_post->ping_status; + $postarr['post_name'] = $master_post->post_name; + + if($master_post->post_parent){ + $parent = icl_object_id($master_post->post_parent, $master_post->post_type, false, $lang); + $postarr['post_parent'] = $parent; + } + + $postarr['menu_order'] = $master_post->menu_order; + $postarr['post_type'] = $master_post->post_type; + $postarr['post_mime_type'] = $master_post->post_mime_type; + + + $trid = $sitepress->get_element_trid($master_post->ID, 'post_' . $master_post->post_type); + + $_POST['icl_trid'] = $trid; + $_POST['icl_post_language'] = $lang; + $_POST['skip_sitepress_actions'] = true; + $_POST['post_type'] = $master_post->post_type; + + if(isset($postarr['ID'])){ + $id = wp_update_post($postarr); + }else{ + $id = $this->icl_insert_post($postarr, $lang); + } + + require_once ICL_PLUGIN_PATH . '/inc/cache.php'; + icl_cache_clear($postarr['post_type'].'s_per_language'); + + global $ICL_Pro_Translation; + $ICL_Pro_Translation->_content_fix_links_to_translated_content($id, $lang); + + if(!is_wp_error($id)){ + + $sitepress->set_element_language_details($id, 'post_' . $master_post->post_type, $trid, $lang); + + $this->save_post_actions($id, get_post($id), ICL_TM_DUPLICATE); + + $this->duplicate_fix_children($master_post_id, $lang); + + // dup comments + if($sitepress->get_option('sync_comments_on_duplicates')){ + $this->duplicate_comments($master_post_id, $lang); + } + + // make sure post name is copied + $wpdb->update($wpdb->posts, array('post_name'=>$master_post->post_name), array('ID'=>$id)); + + update_post_meta($id, '_icl_lang_duplicate_of', $master_post->ID); + + if($sitepress->get_option('sync_post_taxonomies')) { + $this->duplicate_taxonomies($master_post_id, $lang); + } + $this->duplicate_custom_fields($master_post_id, $lang); + + $ret = $id; + do_action('icl_make_duplicate', $master_post_id, $lang, $postarr, $id); + + }else{ + $ret = false; + } + + + + return $ret; + + } + + + function duplicate_taxonomies($master_post_id, $lang){ + global $wpdb, $sitepress; + + $post_type = get_post_field('post_type', $master_post_id) ; + + $taxonomies = get_object_taxonomies($post_type); + + $trid = $sitepress->get_element_trid($master_post_id, 'post_' . $post_type); + $duplicate_post_id = false; + if($trid){ + $translations = $sitepress->get_element_translations($trid, 'post_' . $post_type); + if(isset($translations[$lang])){ + $duplicate_post_id = $translations[$lang]->element_id; + }else{ + return false; // translation not found! + } + } + + remove_filter('get_terms_args', array($sitepress, 'get_terms_args_filter')); + remove_filter('get_term', array($sitepress,'get_term_adjust_id')); // AVOID filtering to current language + remove_filter('terms_clauses', array($sitepress,'terms_clauses')); + + foreach($taxonomies as $taxonomy){ + + $terms = wp_get_post_terms($master_post_id, $taxonomy); + usort($terms, create_function('$a,$b', 'return $a->term_taxonomy_id > $b->term_taxonomy_id;')); + + $is_translated_taxonomy = $sitepress->is_translated_taxonomy($taxonomy); + + $terms_array = array(); + + $is_taxonomy_hierarchical = is_taxonomy_hierarchical( $taxonomy ); + foreach($terms as $term){ + + if($is_translated_taxonomy){ + $tr_id = icl_object_id($term->term_id, $taxonomy, false, $lang); + + //If it has a parent + if($is_taxonomy_hierarchical && $term->parent) { + //Get its translation + $translated_parent = icl_object_id($term->parent, $taxonomy, false, $lang); + + //If translation does not exists, create one + if(!$translated_parent && $sitepress->get_option('sync_taxonomy_parents')) { + $parent_term = get_term($term->parent, $taxonomy); + $this->create_translated_term($lang, $taxonomy, $parent_term, true ); + } + } + + if($tr_id){ + // not using get_term - unfiltered get_term + $translated_term = $wpdb->get_row($wpdb->prepare(" + SELECT * FROM {$wpdb->terms} t JOIN {$wpdb->term_taxonomy} x ON x.term_id = t.term_id WHERE t.term_id = %d AND x.taxonomy = %s", $tr_id, $taxonomy)); + if( $is_taxonomy_hierarchical ){ + $terms_array[] = $translated_term->term_id; + }else{ + $terms_array[] = $translated_term->name; + } + $tt_id = $sitepress->get_element_trid( $translated_term->term_id, 'tax_' . $taxonomy ); + $sitepress->set_element_language_details( $translated_term->term_id, 'tax_' . $taxonomy, $tt_id, $lang, null, false ); + }else{ + + //Create translated term and it parents, if missing from translations + $translated_term = $this->create_translated_term( $lang, $taxonomy, $term, true ); + + if ( $translated_term ) { + if ( $is_taxonomy_hierarchical ) { + $terms_array[ ] = $translated_term->term_id; + } else { + $terms_array[ ] = $translated_term->name; + } + } + } + + }else{ + if( $is_taxonomy_hierarchical ){ + $terms_array[] = $term->term_id; + }else{ + $terms_array[] = $term->name; + } + } + + } + + if($duplicate_post_id) { + wp_set_post_terms($duplicate_post_id, $terms_array, $taxonomy); + + //Update terms count for terms removed from the duplicated post + $all_terms = get_terms($taxonomy); + $all_terms_array = false; + foreach($all_terms as $all_term) { + if(!in_array($all_term->term_id, $terms_array)) $all_terms_array[] = $all_term->term_id; + } + if($all_terms_array) { + wp_update_term_count($all_terms_array, $taxonomy, false); + } + } + + delete_option("{$taxonomy}_children"); + + } + + add_filter('terms_clauses', array($sitepress,'terms_clauses')); + add_filter('get_term', array($sitepress,'get_term_adjust_id')); // Add back the get_term_filter + add_filter('get_terms_args', array($sitepress, 'get_terms_args_filter')); + } + + function duplicate_custom_fields($master_post_id, $lang){ + global $wpdb, $sitepress; + + $post_type = get_post_field('post_type', $master_post_id) ; + + $trid = $sitepress->get_element_trid($master_post_id, 'post_' . $post_type); + if($trid){ + $translations = $sitepress->get_element_translations($trid, 'post_' . $post_type); + if(isset($translations[$lang])){ + $duplicate_post_id = $translations[$lang]->element_id; + }else{ + return false; // translation not found! + } + + } + + $exceptions = array('_wp_old_slug', '_edit_last', '_edit_lock', '_icl_translator_note', '_icl_lang_duplicate_of'); + + // low level copy + $custom_fields_master = $wpdb->get_col($wpdb->prepare("SELECT meta_key FROM {$wpdb->postmeta} WHERE post_id=%d", $master_post_id)); + $custom_fields_duplicate = $wpdb->get_col($wpdb->prepare("SELECT meta_key FROM {$wpdb->postmeta} WHERE post_id=%d", $duplicate_post_id)); + + $custom_fields_master = array_diff($custom_fields_master, $exceptions); + $custom_fields_duplicate = array_diff($custom_fields_duplicate, $exceptions); + + $remove = array_diff($custom_fields_duplicate, $custom_fields_master); + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->postmeta} WHERE post_id=%d AND meta_key IN ('" . join("','", $remove) . "')", $duplicate_post_id)); + + $add = array_diff($custom_fields_master, $custom_fields_duplicate); + foreach($add as $key){ + $wpdb->insert($wpdb->postmeta, array('post_id' => $duplicate_post_id, 'meta_key' => $key, 'meta_value' => + $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key=%s AND post_id=%d", $key, $master_post_id)))); + } + + $update = array_intersect($custom_fields_master, $custom_fields_duplicate); + + foreach($update as $key){ + $wpdb->update($wpdb->postmeta, + array('meta_value' => $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key=%s AND post_id=%d", $key, $master_post_id))), + array('post_id' => $duplicate_post_id, 'meta_key' => $key) + ); + } + + } + + function duplicate_fix_children($master_post_id, $lang){ + global $wpdb; + + $post_type = $wpdb->get_var($wpdb->prepare("SELECT post_type FROM {$wpdb->posts} WHERE ID=%d", $master_post_id)); + $master_children = $wpdb->get_col($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_parent=%d AND post_type != 'revision'", $master_post_id)); + $dup_parent = icl_object_id($master_post_id, $post_type, false, $lang); + + if($master_children){ + foreach($master_children as $master_child){ + $dup_child = icl_object_id($master_child, $post_type, false, $lang); + if($dup_child){ + $wpdb->update($wpdb->posts, array('post_parent' => $dup_parent), array('ID' => $dup_child)); + } + $this->duplicate_fix_children($master_child, $lang); + } + } + } + + function make_duplicates_all($master_post_id){ + global $sitepress; + + $master_post = get_post($master_post_id); + $language_details_original = $sitepress->get_element_language_details($master_post_id, 'post_' . $master_post->post_type); + + $data['iclpost'] = array($master_post_id); + foreach($sitepress->get_active_languages() as $lang => $details){ + if($lang != $language_details_original->language_code){ + $data['duplicate_to'][$lang] = 1; + } + } + + $this->make_duplicates($data); + } + + function reset_duplicate_flag($post_id){ + global $sitepress; + + $post = get_post($post_id); + + $trid = $sitepress->get_element_trid($post_id, 'post_' . $post->post_type); + $translations = $sitepress->get_element_translations($trid, 'post_' . $post->post_type); + + foreach($translations as $tr){ + if($tr->element_id == $post_id){ + $this->update_translation_status(array( + 'translation_id' => $tr->translation_id, + 'status' => ICL_TM_COMPLETE + )); + } + } + + delete_post_meta($post_id, '_icl_lang_duplicate_of'); + + + } + + function set_duplicate($post_id){ + global $sitepress; + // find original (source) and copy + $post = get_post($post_id); + $trid = $sitepress->get_element_trid($post_id, 'post_' . $post->post_type); + $translations = $sitepress->get_element_translations($trid, 'post_' . $post->post_type); + + foreach($translations as $lang => $tr){ + if($tr->original){ + $master_post_id = $tr->element_id; + }elseif($tr->element_id == $post_id){ + $this_language = $lang; + } + } + + $this->make_duplicate($master_post_id, $this_language); + + } + + function get_duplicates($master_post_id){ + global $wpdb, $sitepress; + + $duplicates = array(); + + $res = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} + WHERE meta_key='_icl_lang_duplicate_of' AND meta_value=%d", $master_post_id)); + + foreach($res as $post_id){ + + $post = get_post($post_id); + $language_details = $sitepress->get_element_language_details($post_id, 'post_' . $post->post_type); + + $duplicates[$language_details->language_code] = $post_id; + } + + return $duplicates; + + } + + function duplicate_comments($post_id, $master_post_id){ + global $wpdb, $sitepress; + + // delete existing comments + $current_comments = $wpdb->get_results($wpdb->prepare("SELECT comment_ID FROM {$wpdb->comments} WHERE comment_post_ID = %d", $post_id)); + foreach($current_comments as $id){ + wp_delete_comment($id); + } + + + $original_comments = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->comments} WHERE comment_post_id = %d", $master_post_id), ARRAY_A); + + $post_type = $wpdb->get_var($wpdb->prepare("SELECT post_type FROM {$wpdb->posts} WHERE ID=%d", $post_id)); + $language = $wpdb->get_var($wpdb->prepare("SELECT language_code FROM {$wpdb->prefix}icl_translations WHERE element_id=%d AND element_type=%s", $post_id, 'post_' . $post_type)); + + $wpdb->update($wpdb->posts, array('comment_count'=>count($original_comments)), array('ID'=>$post_id)); + + foreach($original_comments as $comment){ + + $original_comment_id = $comment['comment_ID']; + unset($comment['comment_ID']); + + $comment['comment_post_ID'] = $post_id; + $wpdb->insert($wpdb->comments, $comment); + $comment_id = $wpdb->insert_id; + + update_comment_meta($comment_id, '_icl_duplicate_of', $original_comment_id); + + // comment meta + $meta = $wpdb->get_results($wpdb->prepare("SELECT meta_key, meta_value FROM {$wpdb->commentmeta} WHERE comment_id=%d", $original_comment_id)); + foreach($meta as $key => $val){ + $wpdb->insert($wpdb->commentmeta, array( + 'comment_id' => $comment_id, + 'meta_key' => $key, + 'meta_value' => $val + )); + } + + $original_comment_tr = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translations WHERE element_id=%d AND element_type=%s", + $original_comment_id, 'comment')); + + $comment_translation = array( + 'element_type' => 'comment', + 'element_id' => $comment_id, + 'trid' => $original_comment_tr->trid, + 'language_code' => $language, + /*'source_language_code' => $original_comment_tr->language_code */ + ); + + + $comments_map[$original_comment_id] = array('trid' => $original_comment_tr->trid, 'comment' => $comment_id); + + $wpdb->insert($wpdb->prefix . 'icl_translations', $comment_translation); + + } + + // sync parents + foreach($original_comments as $comment){ + if($comment['comment_parent']){ + + $tr_comment_id = $comments_map[$comment['comment_ID']]['comment']; + $tr_parent = icl_object_id($comment['comment_parent'], 'comment', false, $language); + if($tr_parent){ + $wpdb->update($wpdb->comments, array('comment_parent' => $tr_parent), array('comment_ID' => $tr_comment_id)); + } + + } + } + + + } + + function duplication_delete_comment($comment_id){ + global $wpdb; + static $_avoid_8_loop; + + if(isset($_avoid_8_loop)) return; + $_avoid_8_loop = true; + + $original_comment = get_comment_meta($comment_id, '_icl_duplicate_of', true); + if($original_comment){ + $duplicates = $wpdb->get_col($wpdb->prepare("SELECT comment_id FROM {$wpdb->commentmeta} WHERE meta_key='_icl_duplicate_of' AND meta_value=%d", $original_comment)); + $duplicates = array($original_comment) + array_diff($duplicates, array($comment_id)); + foreach($duplicates as $dup){ + wp_delete_comment($dup); + } + }else{ + $duplicates = $wpdb->get_col($wpdb->prepare("SELECT comment_id FROM {$wpdb->commentmeta} WHERE meta_key='_icl_duplicate_of' AND meta_value=%d", $comment_id)); + if($duplicates){ + foreach($duplicates as $dup){ + wp_delete_comment($dup); + } + } + } + + unset($_avoid_8_loop); + } + + function duplication_edit_comment($comment_id){ + global $wpdb; + + $comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->comments} WHERE comment_ID=%d", $comment_id), ARRAY_A); + unset($comment['comment_ID'], $comment['comment_post_ID']); + + $comment_meta = $wpdb->get_results($wpdb->prepare("SELECT meta_key, meta_value FROM {$wpdb->commentmeta} WHERE comment_id=%d AND meta_key <> '_icl_duplicate_of'", $comment_id)); + + $original_comment = get_comment_meta($comment_id, '_icl_duplicate_of', true); + if($original_comment){ + $duplicates = $wpdb->get_col($wpdb->prepare("SELECT comment_id FROM {$wpdb->commentmeta} WHERE meta_key='_icl_duplicate_of' AND meta_value=%d", $original_comment)); + $duplicates = array($original_comment) + array_diff($duplicates, array($comment_id)); + }else{ + $duplicates = $wpdb->get_col($wpdb->prepare("SELECT comment_id FROM {$wpdb->commentmeta} WHERE meta_key='_icl_duplicate_of' AND meta_value=%d", $comment_id)); + } + + if(!empty($duplicates)){ + foreach($duplicates as $dup){ + + $wpdb->update($wpdb->comments, $comment, array('comment_ID' => $dup)); + + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->commentmeta} WHERE comment_id=%d AND meta_key <> '_icl_duplicate_of'", $dup)); + + if($comment_meta){ + foreach($comment_meta as $key => $value){ + update_comment_meta($dup, $meta_key, $meta_value); + } + } + + } + } + + + } + + function duplication_status_comment($comment_id, $comment_status){ + global $wpdb; + + static $_avoid_8_loop; + + if(isset($_avoid_8_loop)) return; + $_avoid_8_loop = true; + + + $original_comment = get_comment_meta($comment_id, '_icl_duplicate_of', true); + if($original_comment){ + $duplicates = $wpdb->get_col($wpdb->prepare("SELECT comment_id FROM {$wpdb->commentmeta} WHERE meta_key='_icl_duplicate_of' AND meta_value=%d", $original_comment)); + $duplicates = array($original_comment) + array_diff($duplicates, array($comment_id)); + }else{ + $duplicates = $wpdb->get_col($wpdb->prepare("SELECT comment_id FROM {$wpdb->commentmeta} WHERE meta_key='_icl_duplicate_of' AND meta_value=%d", $comment_id)); + } + + if(!empty($duplicates)){ + foreach($duplicates as $dup){ + wp_set_comment_status($t->element_id, $status); + } + } + + unset($_avoid_8_loop); + + + } + + function duplication_insert_comment($comment_id){ + global $wpdb, $sitepress; + + $comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->comments} WHERE comment_ID=%d", $comment_id), ARRAY_A); + + // loop duplicate posts, add new comment + $post_id = $comment['comment_post_ID']; + + // if this is a duplicate post + $duplicate_of = get_post_meta($post_id, '_icl_lang_duplicate_of', true); + if($duplicate_of){ + $post_duplicates = $this->get_duplicates($duplicate_of); + $_lang = $wpdb->get_var($wpdb->prepare("SELECT language_code FROM {$wpdb->prefix}icl_translations WHERE element_type='comment' AND element_id=%d", $comment_id)); + unset($post_duplicates[$_lang]); + $_post = get_post($duplicate_of); + $_orig_lang = $sitepress->get_language_for_element($duplicate_of, 'post_' . $_post->post_type); + $post_duplicates[$_orig_lang] = $duplicate_of; + }else{ + $post_duplicates = $this->get_duplicates($post_id); + } + + unset($comment['comment_ID'], $comment['comment_post_ID']); + + foreach($post_duplicates as $lang => $dup_id){ + $comment['comment_post_ID'] = $dup_id; + + if($comment['comment_parent']){ + $comment['comment_parent'] = icl_object_id($comment['comment_parent'], 'comment', false, $lang); + } + + + $wpdb->insert($wpdb->comments, $comment); + + $dup_comment_id = $wpdb->insert_id; + + update_comment_meta($dup_comment_id, '_icl_duplicate_of', $comment_id); + + // comment meta + $meta = $wpdb->get_results($wpdb->prepare("SELECT meta_key, meta_value FROM {$wpdb->commentmeta} WHERE comment_id=%d", $comment_id)); + foreach($meta as $key => $val){ + $wpdb->insert($wpdb->commentmeta, array( + 'comment_id' => $dup_comment_id, + 'meta_key' => $key, + 'meta_value' => $val + )); + } + + $original_comment_tr = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translations WHERE element_id=%d AND element_type=%s", + $comment_id, 'comment')); + + $comment_translation = array( + 'element_type' => 'comment', + 'element_id' => $dup_comment_id, + 'trid' => $original_comment_tr->trid, + 'language_code' => $lang, + /*'source_language_code' => $original_comment_tr->language_code */ + ); + + $wpdb->insert($wpdb->prefix . 'icl_translations', $comment_translation); + + } + + + } + + // set slug according to user preference + static function set_page_url($post_id){ + + global $sitepress, $sitepress_settings, $wpdb; + + if($sitepress_settings['translated_document_page_url'] == 'copy-encoded'){ + + $post = $wpdb->get_row($wpdb->prepare("SELECT post_type FROM {$wpdb->posts} WHERE ID=%d", $post_id)); + $translation_row = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translations WHERE element_id=%d AND element_type=%s", $post_id, 'post_' . $post->post_type)); + + $encode_url = $wpdb->get_var($wpdb->prepare("SELECT encode_url FROM {$wpdb->prefix}icl_languages WHERE code=%s", $translation_row->language_code)); + if($encode_url){ + + $trid = $sitepress->get_element_trid($post_id, 'post_' . $post->post_type); + $original_post_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND source_language_code IS NULL", $trid)); + $post_name_original = $wpdb->get_var($wpdb->prepare("SELECT post_name FROM {$wpdb->posts} WHERE ID = %d", $original_post_id)); + + $post_name_to_be = $post_name_original; + $taken = true; + $incr = 1; + do{ + $taken = $wpdb->get_var($wpdb->prepare(" + SELECT ID FROM {$wpdb->posts} p + JOIN {$wpdb->prefix}icl_translations t ON p.ID = t.element_id + WHERE ID <> %d AND t.element_type = %s AND t.language_code = %s AND p.post_name = %s + ", $post_id, 'post_' . $post->post_type, $translation_row->language_code, $post_name_to_be )); + if($taken){ + $incr++; + $post_name_to_be = $post_name_original . '-' . $incr; + }else{ + $taken = false; + } + }while($taken == true); + $wpdb->update($wpdb->posts, array('post_name' => $post_name_to_be), array('ID' => $post_id)); + + } + + } + + } + + private static function icl_insert_term($name, $taxonomy, $term_args, $target_lang) { + global $sitepress; + $new_term = wp_insert_term($name, $taxonomy, $term_args); + if($new_term && !is_wp_error($new_term)) { + $tt_id = $sitepress->get_element_trid( $new_term['term_taxonomy_id'], 'tax_' . $taxonomy ); + $sitepress->set_element_language_details( $new_term['term_taxonomy_id'], 'tax_' . $taxonomy, $tt_id, $target_lang ); + } + return $new_term; + } + + /** + * @param $lang + * @param $taxonomy + * @param $term + * @param $create_missing_parent + * + * @return bool|mixed + */ + public function create_translated_term( $lang, $taxonomy, $term, $create_missing_parent ) + { + //Avoid passing invalid arguments + if(!$lang || !$taxonomy || !$term || !is_object($term)) return false; + + //Store the last used term_id + static $term_id; + //Avoid infinite recursive calls + if(isset($term_id) && $term_id==$term->term_id) return; + + $term_id = $term->term_id; + + global $wpdb, $sitepress; + + //Temporary switch to the target language + $current_language = $sitepress->get_current_language(); + $sitepress->switch_lang( $lang ); + // hack setting language 1/2 + if ( isset( $_POST[ 'icl_translation_of' ] ) ) { + $buf1 = $_POST[ 'icl_translation_of' ]; + } + if ( isset( $_POST[ 'icl_tax_' . $taxonomy . '_language' ] ) ) { + $buf2 = $_POST[ 'icl_tax_' . $taxonomy . '_language' ]; + + } + $_POST[ 'icl_translation_of' ] = $term->term_taxonomy_id; + $_POST[ 'icl_tax_' . $taxonomy . '_language' ] = $lang; + + //Get the term translation + $new_term = icl_object_id($term->term_id, $taxonomy, false, $lang); + if ( is_wp_error( $new_term ) || empty( $new_term ) ) { + $term_args = array(); + + $translated_parent = false; + //Find the original term parent id + if($term->parent) { + //Get the parent id translation + $translated_parent = icl_object_id($term->parent, $taxonomy, false, $lang); + } + + if ( $translated_parent ) { + //If there is a translated parent, set it to the term's translation + $term_args[ 'parent' ] = $translated_parent; + } elseif($term->parent && $create_missing_parent) { + //If there is not a translated parent and we need to have it, create one (recursive call) + $parent_term = get_term($term->parent, $taxonomy); + $term_args['parent'] = $this->create_translated_term($lang, $taxonomy, $parent_term, $create_missing_parent); + } + + $new_term = self::icl_insert_term( $term->name, $taxonomy, $term_args, $lang ); + } else { + $term_language = $sitepress->get_element_language_details($new_term['term_id'], 'tax_' . $taxonomy); + if($term_language && $term_language->language_code != $lang) { + $sitepress->set_element_language_details($new_term['term_id'], 'tax_' . $taxonomy, $term_language->trid, $lang,null, false); + } + } + + // hack setting language 2/2 + $sitepress->switch_lang($current_language); + if ( isset( $buf1 ) ) { + $_POST[ 'icl_translation_of' ] = $buf1; + unset( $buf1 ); + } + if ( isset( $buf2 ) ) { + $_POST[ 'icl_tax_' . $taxonomy . '_language' ] = $buf2; + unset( $buf2 ); + } + + $translated_term = false; + if ( !is_wp_error( $new_term ) ) { + // not using get_term - unfiltered get_term + $translated_term = $wpdb->get_row( + $wpdb->prepare( " + SELECT * + FROM {$wpdb->terms} t + JOIN {$wpdb->term_taxonomy} x ON x.term_id = t.term_id + WHERE t.term_id = %d AND x.taxonomy = %s", + $new_term[ 'term_id' ], $taxonomy ) + ); + + return $translated_term; + } + + return $translated_term; + } + + /** + * @param $postarr + * + * @return int|WP_Error + */ + public function icl_insert_post( $postarr, $lang ) + { + //remove_action( 'transition_post_status', '_wp_auto_add_pages_to_menu' ); + global $sitepress; + $current_language = $sitepress->get_current_language(); + $sitepress->switch_lang($lang, false); + $new_post_id = wp_insert_post( $postarr ); + $sitepress->switch_lang($current_language, false); + //add_action( 'transition_post_status', '_wp_auto_add_pages_to_menu', 10, 3 ); + + return $new_post_id; + } +} diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/2.0.0/stepper.js b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/2.0.0/stepper.js new file mode 100644 index 0000000..e3f56bb --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/2.0.0/stepper.js @@ -0,0 +1,44 @@ + +jQuery(document).ready(function(){ + // iclStepper(jQuery('#icl-migrate-start').attr('href'), true); + jQuery('#icl-migrate-start').one('click', function(){ + iclStepper(jQuery(this).attr('href'), '&init=1', true); + return false; + }); +}); + +function iclStepper(href, addUrl, init) { + init = typeof(init) != 'undefined' ? true : false; + jQuery.ajax({ + type: "POST", + url: href+addUrl, + cache: false, + dataType: 'json', + success: function(data) { + if (data.stop == true) { + jQuery('#icl-migrate-progress .message').html('stopped'); + } else if (data.error == false) { + if (init == true) { + jQuery('#icl-migrate-start').fadeOut(function(){ + jQuery('#icl-migrate-progress').fadeIn().html(data.output).children('.message').html(data.message); + iclStepper(href, '&step='+data.step); + }); + // jQuery('#icl-migrate-progress').html(data.output).children('.message').html(data.message); + } else { + jQuery('#icl-migrate-progress .message').html(data.message); + jQuery('#icl-migrate-progress .progress').animate({ + width : data.barWidth+'%' + }, 100); + if (data.completed == true) { + jQuery('#icl-migrate').delay(3000).fadeOut(); + } else { + iclStepper(href, '&step='+data.step); + } + } + } else { + alert('error'); + jQuery('#icl-migrate-progress .message').html(data.error); + } + } + }); +} \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/2.0.0/stepper.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/2.0.0/stepper.php new file mode 100644 index 0000000..6416d5d --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/2.0.0/stepper.php @@ -0,0 +1,105 @@ + + */ + protected $_nextStep = NULL; + + /** + * Provide current step here + * @param int $step + */ + function __construct($step = 0) { + if (empty($step)) { + $step = 0; + } + $this->_step = intval($step); + } + + /** + * Register steps (function names) + */ + public function registerSteps() { + $args = func_get_args(); + $this->_steps = array_merge($this->_steps, $args); + } + + /** + * Returns current step + * @return int + */ + public function getStep() { + return $this->_step; + } + + /** + * Returns next step + * @return int + */ + public function getNextStep() { + return !is_null($this->_nextStep)? $this->_nextStep : $this->_step += 1; + } + + /** + * Sets current step + * @param int $num + */ + public function setStep($num) { + $this->_step = intval($num); + } + + /** + * Forcing next step + * @param int $num + */ + public function setNextStep($num) { + $this->_nextStep = intval($num); + } + + /** + * Calculates bar width + * @return int Should be used as percentage width (%) + */ + public function barWidth() { + return round(($this->_step*100)/count($this->_steps)); + } + + /** + * Calls current step's function + * @return mixed + */ + public function init() { + if ($this->_step !== 0 && isset($this->_steps[$this->_step]) + && is_callable($this->_steps[$this->_step])) { + return call_user_func_array($this->_steps[$this->_step], array($this->_step, $this)); + } + } + + /** + * Returns initial HTML formatted screen + * @param string $message Message to be displayed + * @return string + */ + public function render($message = '') { + $output = '
              +
              +
              +
              ' . $message . '
              '; + return $output; + } + +} \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.0.0.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.0.0.php new file mode 100644 index 0000000..a8ffb79 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.0.0.php @@ -0,0 +1,266 @@ + 0, 'offset' => 0)); + + switch($step) { + + case 1: + // if the tables are missing, call the plugin activation routine + $table_name = $wpdb->prefix.'icl_translation_status'; + if($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'") != $table_name){ + icl_sitepress_activate(); + } + + $wpdb->query("ALTER TABLE `{$wpdb->prefix}icl_translations` CHANGE `element_type` `element_type` VARCHAR( 32 ) NOT NULL DEFAULT 'post_post'"); + $wpdb->query("ALTER TABLE `{$wpdb->prefix}icl_translations` CHANGE `element_id` `element_id` BIGINT( 20 ) NULL DEFAULT NULL "); + + + // fix source_language_code + // all source documents must have null + $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translations SET source_language_code = NULL + WHERE element_type IN('".join("','", $types)."') AND source_language_code = '' AND language_code='%s'", $sitepress->get_default_language())); + // get translated documents with missing source language + $res = $wpdb->get_results($wpdb->prepare(" + SELECT translation_id, trid, language_code + FROM {$wpdb->prefix}icl_translations + WHERE (source_language_code = '' OR source_language_code IS NULL) + AND element_type IN('".join("','", $types)."') + AND language_code <> %s + ", $sitepress->get_default_language() + )); + foreach($res as $row){ + $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translations SET source_language_code = '%s' WHERE translation_id=%d", $sitepress->get_default_language(), $row->translation_id)); + } + + + + $temp_upgrade_data['step'] = 2; + update_option('icl_temp_upgrade_data', $temp_upgrade_data); + + return array('message' => __('Processing translations...', 'sitepress')); + break; + + case 2: + + $limit = 100; + $offset = $temp_upgrade_data['offset']; + $processing = FALSE; + + + //loop existing translations + $res = mysql_query("SELECT * FROM {$wpdb->prefix}icl_translations WHERE element_type IN('".join("','", $types)."') AND source_language_code IS NULL LIMIT " . $limit . " OFFSET " . $offset); + while($row = mysql_fetch_object($res)){ + $processing = TRUE; + // grab translations + $translations = $sitepress->get_element_translations($row->trid, $row->element_type); + + $md5 = 0; + $table_name = $wpdb->prefix.'icl_node'; + if($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'") == $table_name){ + list($md5, $links_fixed) = $wpdb->get_row($wpdb->prepare(" + SELECT md5, links_fixed FROM {$wpdb->prefix}icl_node + WHERE nid = %d + ", $row->element_id), ARRAY_N); + } + if(!$md5){ + $md5 = $TranslationManagement->post_md5($row->element_id); + } + + $translation_package = $TranslationManagement->create_translation_package($row->element_id); + + + foreach($translations as $lang => $t){ + if(!$t->original){ + + // determine service and status + $service = 'local'; + $status = 10; + $needs_update = 0; + + list($rid, $status, $current_md5) = $wpdb->get_row($wpdb->prepare(" + SELECT c.rid, n.status , c.md5 + FROM {$wpdb->prefix}icl_content_status c + JOIN {$wpdb->prefix}icl_core_status n ON c.rid = n.rid + WHERE c.nid = %d AND target = %s + ORDER BY rid DESC + LIMIT 1 + ", $row->element_id, $lang), ARRAY_N); + if($rid){ + if($current_md5 != $md5){ + $needs_update = 1; + } + if($status == 3){ + $status = 10; + }else{ + $status = 2; + } + $service = 'icanlocalize'; + + foreach($sitepress_settings['icl_lang_status'] as $lpair){ + if($lpair['from'] == $row->language_code && $lpair['to'] == $lang && isset($lpair['translators'][0]['id'])){ + $translator_id = $lpair['translators'][0]['id']; + break; + } + } + + }else{ + $status = 10; + $translator_id = $wpdb->get_var($wpdb->prepare("SELECT post_author FROM {$wpdb->posts} WHERE ID=%d", $t->element_id)); + $tlp = get_user_meta($translator_id, $wpdb->prefix.'language_pairs', true); + $tlp[$row->language_code][$lang] = 1; + $TranslationManagement->edit_translator($translator_id, $tlp); + } + + + // add translation_status record + list($newrid, $update) = $TranslationManagement->update_translation_status(array( + 'translation_id' => $t->translation_id, + 'status' => $status, + 'translator_id' => $translator_id, + 'needs_update' => $needs_update, + 'md5' => $md5, + 'translation_service' => $service, + 'translation_package' => serialize($translation_package), + 'links_fixed' => intval($links_fixed) + )); + + $job_id = $TranslationManagement->add_translation_job($newrid, $translator_id , $translation_package); + if($status == 10){ + $post = get_post($t->element_id); + $TranslationManagement->save_job_fields_from_post($job_id, $post); + } + } + } + } + if ($processing) { + update_option('icl_temp_upgrade_data', array('step' => 2, 'offset' => intval($offset+100))); + $stepper->setNextStep(2); + } else { + update_option('icl_temp_upgrade_data', array('step' => 3, 'offset' => 99999999999999999999)); + } + $message = $processing ? __('Processing translations...', 'sitepress') : __('Finalizing upgrade...', 'sitepress'); + return array('message' => $message); + break; + + + case 3: + // removing the plugins text table; importing data into a Sitepress setting + $results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}icl_plugins_texts"); + if(!empty($results)){ + foreach($results as $row){ + $cft[$row->attribute_name] = $row->translate + 1; + } + $iclsettings['translation-management']['custom_fields_translation'] = $cft; + $sitepress->save_settings($iclsettings); + + mysql_query("DROP TABLE {$wpdb->prefix}icl_plugins_texts"); + } + + $iclsettings['language_selector_initialized'] = 1; + + if(get_option('_force_mp_post_http')){ + $iclsettings['troubleshooting_options']['http_communication'] = intval(get_option('_force_mp_post_http')); + delete_option('_force_mp_post_http'); + } + + // set default translators + if (isset($sitepress_settings['icl_lang_status'])) { + foreach($sitepress_settings['icl_lang_status'] as $lpair){ + if(!empty($lpair['translators'])){ + $iclsettings['default_translators'][$lpair['from']][$lpair['to']] = array('id'=>$lpair['translators'][0]['id'], 'type'=>'icanlocalize'); + } + } + } + $sitepress->save_settings($iclsettings); + + $iclsettings['migrated_2_0_0'] = 1; + $sitepress->save_settings($iclsettings); + delete_option('icl_temp_upgrade_data'); + return array('message' => __('Done', 'sitepress'), 'completed' => 1); + break; + + default: + return array('error' => __('Missing step', 'sitepress'), 'stop' => 1); + } +} + +// $iclsettings defined in upgrade.php +if(empty($iclsettings['migrated_2_0_0'])){ + wp_enqueue_script('icl-stepper', ICL_PLUGIN_URL . '/inc/upgrade-functions/2.0.0/stepper.js', array('jquery')); + add_filter('admin_notices', 'icl_migrate_2_0_0'); + add_action('icl_ajx_custom_call', 'icl_ajx_upgrade_2_0_0', 1, 2); +} + + +function icl_migrate_2_0_0() { + $txt = get_option('icl_temp_upgrade_data', FALSE) ? __('Resume Upgrade Process', 'sitepress') : __('Run Upgrade Process', 'sitepress'); + echo '

              '.__('WPML requires database upgrade', 'sitepress').'

              ' + .'

              ' . __('This normally takes a few seconds, but may last up to several minutes of very large databases.', 'sitepress') . '

              ' + . '

              ' . $txt . '

              ' + . '
              '; +} + +function icl_ajx_upgrade_2_0_0($call, $request){ + if($call == 'wpml_upgrade_2_0_0'){ + $error = 0; + $completed = 0; + $stop = 0; + $message = __('Starting the upgrade process...', 'sitepress'); + include_once ICL_PLUGIN_PATH . '/inc/upgrade-functions/2.0.0/stepper.php'; + include_once ICL_PLUGIN_PATH . '/inc/upgrade-functions/upgrade-2.0.0.php'; + $temp_upgrade_data = get_option('icl_temp_upgrade_data', + array('step' => 0, 'offset' => 0)); + $step = isset($request['step']) ? $request['step'] : $temp_upgrade_data['step']; + $migration = new Icl_Stepper($step); + $migration->registerSteps( + 'icl_upgrade_2_0_0_steps', + 'icl_upgrade_2_0_0_steps', + 'icl_upgrade_2_0_0_steps'); + if (isset($request['init'])) { + echo json_encode(array( + 'error' => $error, + 'output' => $migration->render(), + 'step' => $migration->getNextStep(), + 'message' => __('Creating new tables...', 'sitepress'), + 'stop' => $stop, + )); + exit; + } + $data = $migration->init(); + @extract($data, EXTR_OVERWRITE); + echo json_encode(array( + 'error' => $error, + 'completed' => $completed, + 'message' => $message, + 'step' => $migration->getNextStep(), + 'barWidth' => $migration->barWidth(), + 'stop' => $stop, + )); + } +} + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.0.5.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.0.5.php new file mode 100644 index 0000000..2674c8b --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.0.5.php @@ -0,0 +1,9 @@ +update($wpdb->prefix . 'icl_languages', array('default_locale'=>'it_IT'), array('code'=>'it')); + + diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.2.2.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.2.2.php new file mode 100644 index 0000000..3b3df61 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.2.2.php @@ -0,0 +1,13 @@ +prefix . 'icl_translators_cached'); +delete_option($wpdb->prefix . 'icl_non_translators_cached'); + + + + + diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.3.0.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.3.0.php new file mode 100644 index 0000000..0fe7af7 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.3.0.php @@ -0,0 +1,32 @@ + $icl_rc_widget, + '_multiwidget' => 1 + ); + + } + update_option('widget_recent-comments', $rc_widgets); + delete_option('widget_recent_comments'); + +} +$wpdb->query("ALTER TABLE {$wpdb->prefix}icl_string_translations MODIFY COLUMN value TEXT NULL DEFAULT NULL"); + +$wpdb->query("ALTER TABLE {$wpdb->prefix}icl_string_translations ADD translator_id bigint(20) NULL DEFAULT NULL, ADD translation_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP"); + +// Disable the auto registration of strings if we are upgrading to 2.3.0 +$iclsettings = get_option('icl_sitepress_settings'); +$iclsettings['st']['icl_st_auto_reg'] = 'disable'; +update_option('icl_sitepress_settings', $iclsettings); + +// The icl_translators_cached format has change at some point. +// Let's clear the cache so it gets rebuilt. +delete_option($wpdb->prefix . 'icl_translators_cached'); +delete_option($wpdb->prefix . 'icl_non_translators_cached'); + diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.3.1.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.3.1.php new file mode 100644 index 0000000..8874dc3 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.3.1.php @@ -0,0 +1,20 @@ +prefix}icl_locale_map CHANGE locale VARCHAR(32) NOT NULL"; +$wpdb->query($sql); + + +$wpdb->query("DELETE m FROM {$wpdb->postmeta} m JOIN {$wpdb->posts} p ON p.ID = m.post_id WHERE m.meta_key='_alp_processed' AND p.post_type='nav_menu_item'"); + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.3.3.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.3.3.php new file mode 100644 index 0000000..e957699 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.3.3.php @@ -0,0 +1,2 @@ +roles); + update_option('icl_sitepress_settings', $iclsettings); + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.5.0.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.5.0.php new file mode 100644 index 0000000..3bfe023 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.5.0.php @@ -0,0 +1,13 @@ +prefix}icl_languages ADD COLUMN encode_url TINYINT(1) NOT NULL DEFAULT 0"; + $wpdb->query($sql); + + $encurls = array('ru', 'uk', 'zh-hans', 'zh-hant', 'ja', 'ko', 'vi', 'th', 'he', 'ar', 'el', 'fa'); + $sql = "UPDATE {$wpdb->prefix}icl_languages SET encode_url = 1 WHERE code IN ('" . join("','", $encurls) . "')"; + $wpdb->query($sql); \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.5.2.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.5.2.php new file mode 100644 index 0000000..cf7be6a --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.5.2.php @@ -0,0 +1,19 @@ +prefix}icl_flags SET flag = 'eo.png' WHERE lang_code = 'eo' AND flag = 'nil.png' "; + $wpdb->query($sql); + $sql = "UPDATE {$wpdb->prefix}icl_flags SET flag = 'qu.png' WHERE lang_code = 'qu' AND flag = 'nil.png' "; + $wpdb->query($sql); + $sql = "UPDATE {$wpdb->prefix}icl_flags SET flag = 'zu.png' WHERE lang_code = 'zu' AND flag = 'nil.png' "; + $wpdb->query($sql); + + $cols = $wpdb->get_results("SHOW COLUMNS FROM {$wpdb->prefix}icl_languages"); + if(empty($cols[6]) || $cols[6]->Field != 'encode_url'){ + $sql = "ALTER TABLE {$wpdb->prefix}icl_languages ADD COLUMN encode_url TINYINT(1) NOT NULL DEFAULT 0"; + $wpdb->query($sql); + + $encurls = array('ru', 'uk', 'zh-hans', 'zh-hant', 'ja', 'ko', 'vi', 'th', 'he', 'ar', 'el', 'fa'); + $sql = "UPDATE {$wpdb->prefix}icl_languages SET encode_url = 1 WHERE code IN ('" . join("','", $encurls) . "')"; + $wpdb->query($sql); + } + \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.6.0.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.6.0.php new file mode 100644 index 0000000..584be0b --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.6.0.php @@ -0,0 +1,7 @@ +prefix}icl_translations` CHANGE `element_type` `element_type` VARCHAR( 36 ) NOT NULL DEFAULT 'post_post'"; + $wpdb->query($sql); + + $iclsettings = get_option('icl_sitepress_settings'); + $iclsettings['seo']['head_langs'] = 1; + update_option('icl_sitepress_settings', $iclsettings); \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.6.2.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.6.2.php new file mode 100644 index 0000000..5bfc3bd --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.6.2.php @@ -0,0 +1,10 @@ +prefix}icl_strings` CHANGE `language` `language` VARCHAR( 7 ) NOT NULL"; + $wpdb->query($sql); + + $sql = "ALTER TABLE `{$wpdb->prefix}icl_locale_map` CHANGE `code` `code` VARCHAR( 7 ) NOT NULL"; + $wpdb->query($sql); + + $iclsettings = get_option('icl_sitepress_settings'); + $iclsettings['posts_slug_translation']['on'] = 0; + update_option('icl_sitepress_settings', $iclsettings); diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.7.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.7.php new file mode 100644 index 0000000..497223d --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.7.php @@ -0,0 +1,15 @@ +get_results("SHOW KEYS FROM `{$wpdb->prefix}icl_translations` WHERE `Column_name`='trid' AND `Key_name`<>'trid_lang'"); + if(empty($keys)){ + $sql = "ALTER TABLE `{$wpdb->prefix}icl_translations` ADD KEY `trid` (`trid`)"; + $wpdb->query($sql); + } + + $sql = "ALTER TABLE `{$wpdb->prefix}icl_languages` ADD tag VARCHAR(8)"; + $wpdb->query($sql); + $sql = "UPDATE `{$wpdb->prefix}icl_languages` SET tag = REPLACE(default_locale, '_', '-')"; + $wpdb->query($sql); + icl_cache_clear(); + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.9.3.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.9.3.php new file mode 100644 index 0000000..b9b4519 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.9.3.php @@ -0,0 +1,18 @@ +get_results("SELECT * FROM {$wpdb->prefix}icl_strings WHERE context = 'Widgets' AND name LIKE 'widget body - %'"); +foreach($widget_strings as $string){ + $wpdb->update($wpdb->prefix . 'icl_strings', array('name' => 'widget body - ' . md5($string->value)), array('id' => $string->id)); +} + +$widget_strings = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}icl_strings WHERE context = 'Widgets' AND name LIKE 'widget title - %'"); +foreach($widget_strings as $string){ + $wpdb->update($wpdb->prefix . 'icl_strings', array('name' => 'widget title - ' . md5($string->value)), array('id' => $string->id)); +} + + +// Add a new `language_context` index to icl_strings table +$sql = "ALTER TABLE `{$wpdb->prefix}icl_strings` ADD INDEX `language_context` ( `context` , `language` )"; +$wpdb->query($sql); + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.9.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.9.php new file mode 100644 index 0000000..caebcdc --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.9.php @@ -0,0 +1,26 @@ + 'ms', + 'english_name' => 'Malay', + 'major' => 0, + 'active' => 0, + 'default_locale'=> 'ms_MY', + 'tag' => 'ms-MY', + 'encode_url' => 0 + ); + + $wpdb->insert($wpdb->prefix . 'icl_languages', $ms); + + + $wpdb->insert($wpdb->prefix . 'icl_languages_translations', array('language_code' => 'ms', 'display_language_code' => 'en', 'name' => 'Malay')); + $wpdb->insert($wpdb->prefix . 'icl_languages_translations', array('language_code' => 'ms', 'display_language_code' => 'es', 'name' => 'Malayo')); + $wpdb->insert($wpdb->prefix . 'icl_languages_translations', array('language_code' => 'ms', 'display_language_code' => 'de', 'name' => 'Malay')); + $wpdb->insert($wpdb->prefix . 'icl_languages_translations', array('language_code' => 'ms', 'display_language_code' => 'fr', 'name' => 'Malay')); + $wpdb->insert($wpdb->prefix . 'icl_languages_translations', array('language_code' => 'ms', 'display_language_code' => 'ms', 'name' => 'Melayu')); + + $wpdb->insert($wpdb->prefix . 'icl_flags', array('lang_code' => 'ms', 'flag' => 'ms.png', 'from_template' => 0)); + + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade.php new file mode 100644 index 0000000..5364681 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade.php @@ -0,0 +1,149 @@ +update($wpdb->prefix.'icl_flags', array('flag'=>'ku.png'), array('lang_code'=>'ku')); + $wpdb->update($wpdb->prefix.'icl_languages_translations', array('name'=>'Magyar'), array('language_code'=>'hu', 'display_language_code'=>'hu')); + $wpdb->update($wpdb->prefix.'icl_languages_translations', array('name'=>'Hrvatski'), array('language_code'=>'hr', 'display_language_code'=>'hr')); + $wpdb->update($wpdb->prefix.'icl_languages_translations', array('name'=>'فارسی'), array('language_code'=>'fa', 'display_language_code'=>'fa')); + } + + if(get_option('icl_sitepress_version') && version_compare(get_option('icl_sitepress_version'), '1.7.3', '<')){ + $wpdb->update($wpdb->prefix.'icl_languages_translations', array('name'=>'پارسی'), array('language_code'=>'fa', 'display_language_code'=>'fa')); + } + + if(get_option('icl_sitepress_version') && version_compare(get_option('icl_sitepress_version'), '1.7.7', '<')){ + if(!isset($iclsettings['promote_wpml'])){ + $iclsettings['promote_wpml'] = 0; + update_option('icl_sitepress_settings',$iclsettings); + } + if(!isset($iclsettings['auto_adjust_ids'])){ + $iclsettings['auto_adjust_ids'] = 0; + update_option('icl_sitepress_settings',$iclsettings); + } + + mysql_query("UPDATE {$wpdb->prefix}icl_translations SET element_type='tax_post_tag' WHERE element_type='tag'"); + mysql_query("UPDATE {$wpdb->prefix}icl_translations SET element_type='tax_category' WHERE element_type='category'"); + } + + if(get_option('icl_sitepress_version') && version_compare(get_option('icl_sitepress_version'), '1.7.8', '<')){ + $res = $wpdb->get_results("SELECT ID, post_type FROM {$wpdb->posts}"); + foreach($res as $row){ + $post_types[$row->post_type][] = $row->ID; + } + foreach($post_types as $type=>$ids){ + if(!empty($ids)){ + mysql_query("UPDATE {$wpdb->prefix}icl_translations SET element_type='post_{$type}' WHERE element_type='post' AND element_id IN(".join(',',$ids).")"); + } + } + + // fix categories & tags in icl_translations + $res = mysql_query("SELECT term_taxonomy_id, taxonomy FROM {$wpdb->term_taxonomy}"); + while($row = mysql_fetch_object($res)) { + $icltr = $wpdb->get_row("SELECT translation_id, element_type FROM {$wpdb->prefix}icl_translations WHERE element_id='{$row->term_taxonomy_id}' AND element_type LIKE 'tax\\_%'"); + if('tax_' . $row->taxonomy != $icltr->element_type){ + $wpdb->update($wpdb->prefix . 'icl_translations', array('element_type'=>'tax_'.$row->taxonomy), array('translation_id'=>$icltr->translation_id)); + } + } + } + + if(get_option('icl_sitepress_version') && version_compare(get_option('icl_sitepress_version'), '2.0.0', '<')){ + include_once ICL_PLUGIN_PATH . '/inc/upgrade-functions/upgrade-2.0.0.php'; + + if(empty($iclsettings['migrated_2_0_0'])){ + define('ICL_MULTI_STEP_UPGRADE', true); + return; // GET OUT AND DO NOT SET THE NEW VERSION + } + } + + if(get_option('icl_sitepress_version') && version_compare(get_option('icl_sitepress_version'), '2.0.4', '<')){ + $sql = "ALTER TABLE {$wpdb->prefix}icl_translation_status ADD COLUMN `_prevstate` longtext"; + mysql_query($sql); + } + + icl_upgrade_version('2.0.5'); + + icl_upgrade_version('2.2.2'); + + icl_upgrade_version('2.3.0'); + + icl_upgrade_version('2.3.1'); + + icl_upgrade_version('2.3.3'); + + icl_upgrade_version('2.4.0'); + + icl_upgrade_version('2.5.0'); + + icl_upgrade_version('2.5.2'); + + icl_upgrade_version('2.6.0'); + + icl_upgrade_version('2.7'); + + icl_upgrade_version('2.9'); + + icl_upgrade_version('2.9.3'); + + if(version_compare(get_option('icl_sitepress_version'), ICL_SITEPRESS_VERSION, '<')){ + update_option('icl_sitepress_version', ICL_SITEPRESS_VERSION); + } + +} + +function icl_upgrade_version($version){ + global $wpdb, $sitepress_settings, $sitepress, $iclsettings; + + if(get_option('icl_sitepress_version') && version_compare(get_option('icl_sitepress_version'), $version, '<')){ + $upg_file = ICL_PLUGIN_PATH . '/inc/upgrade-functions/upgrade-' . $version . '.php'; + if(file_exists($upg_file) && is_readable($upg_file)){ + if(!defined('WPML_DOING_UPGRADE')){ + define('WPML_DOING_UPGRADE', true); + } + include_once $upg_file; + } + } +} + +function icl_plugin_too_old(){ + ?> +
              + diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/wp-login-filters.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/wp-login-filters.php new file mode 100644 index 0000000..d912164 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/wp-login-filters.php @@ -0,0 +1,22 @@ +get_current_language() != $sitepress->get_default_language()){ + $this_domain = $sitepress_settings['language_domains'][$sitepress->get_current_language()] . '/'; + $default_domain = $sitepress->language_url($sitepress->get_default_language()); + $redirect_to = str_replace($default_domain, $this_domain, $redirect_to); + } + + return $redirect_to; + } + +} +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/inc/wp-nav-menus/iclNavMenu.class.php b/src/wp-content/plugins/sitepress-multilingual-cms/inc/wp-nav-menus/iclNavMenu.class.php new file mode 100644 index 0000000..3b9cb2e --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/inc/wp-nav-menus/iclNavMenu.class.php @@ -0,0 +1,707 @@ +_set_menus_language(); + } + + $this->get_current_menu(); + + if(isset( $_POST['action']) && $_POST['action'] == 'menu-get-metabox'){ + $parts = parse_url($_SERVER['HTTP_REFERER']); + @parse_str($parts['query'], $query); + if(isset($query['lang'])){ + $sitepress->switch_lang($query['lang']); + } + } + + + if(isset($this->current_menu['language']) && $this->current_menu['language'] && $this->current_menu['language'] != $sitepress->get_default_language() && isset($_GET['menu']) && empty($_GET['lang'])){ + wp_redirect(admin_url(sprintf('nav-menus.php?menu=%d&lang=%s',$this->current_menu['id'], $this->current_menu['language']))); + } + + + + if(!empty($this->current_menu['language'])){ + $this->current_lang = $this->current_menu['language']; + //if($this->current_lang != $sitepress->get_default_language() && !isset($_GET['lang'])){ + // wp_redirect(admin_url('nav-menus.php').'?lang='.$this->current_lang); + //} + }elseif(isset($_REQUEST['lang'])){ + $this->current_lang = $_REQUEST['lang']; + }elseif($lang = $sitepress->get_language_cookie()){ + $this->current_lang = $lang; + }else{ + $this->current_lang = $sitepress->get_default_language(); + } + + if(isset($_POST['icl_wp_nav_menu_ajax'])){ + $this->ajax($_POST); + } + + // for theme locations that are not translated into the curent language + // reflect status in the theme location navigation switcher + add_action('admin_footer', array($this, '_set_custom_status_in_theme_location_switcher')); + + // filter menu by language when adjust ids is off + // not on ajax calls + if(!$sitepress_settings['auto_adjust_ids'] && !defined('DOING_AJAX')){ + add_filter('get_term', array($sitepress, 'get_term_adjust_id')); + } + + + // Setup Menus Sync + add_action('admin_menu', array($this, 'admin_menu_setup')); + if(isset($_GET['page']) && $_GET['page'] == ICL_PLUGIN_FOLDER . '/menu/menus-sync.php'){ + global $icl_menus_sync; + include_once ICL_PLUGIN_PATH . '/inc/wp-nav-menus/menus-sync.php'; + $icl_menus_sync = new ICLMenusSync; + } + + + + } + + + // Menus sync submenu + function admin_menu_setup(){ + $top_page = apply_filters('icl_menu_main_page', ICL_PLUGIN_FOLDER.'/menu/languages.php'); + add_submenu_page( $top_page, + __( 'WP Menus Sync', 'sitepress' ), __( 'WP Menus Sync', 'sitepress' ), + 'manage_options', ICL_PLUGIN_FOLDER . '/menu/menus-sync.php' ); + } + + + /** + * associates menus without language information with default language + * + */ + function _set_menus_language(){ + global $wpdb, $sitepress; + $translated_menus = $wpdb->get_col(" + SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_nav_menu' + "); + $translated_menus[] = 0; //dummy + $untranslated_menus = $wpdb->get_col(" + SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy='nav_menu' AND term_taxonomy_id NOT IN(".join(",",$translated_menus).") + "); + if(!empty($untranslated_menus)){ + foreach($untranslated_menus as $item){ + $sitepress->set_element_language_details($item, 'tax_nav_menu', null, $sitepress->get_default_language()); + } + } + + $translated_menu_items = $wpdb->get_col(" + SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type='post_nav_menu_item' AND element_id IS NOT NULL + "); + $translated_menu_items[] = 0; //dummy + $untranslated_menu_items = $wpdb->get_col(" + SELECT ID FROM {$wpdb->posts} WHERE post_type='nav_menu_item' AND ID NOT IN(".join(",", $translated_menu_items).") + "); + if(!empty($untranslated_menu_items)){ + foreach($untranslated_menu_items as $item){ + $sitepress->set_element_language_details($item, 'post_nav_menu_item', null, $sitepress->get_default_language()); + } + } + } + + function ajax($data){ + if($data['icl_wp_nav_menu_ajax'] == 'translation_of'){ + $trid = isset($data['trid']) ? $data['trid'] : false; + $this->_render_translation_of($data['lang'], $trid); + } + exit; + } + + function _get_menu_language($menu_id){ + global $sitepress, $wpdb; + $menu_tt_id = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy='nav_menu'",$menu_id)); + $lang = $sitepress->get_element_language_details($menu_tt_id, 'tax_nav_menu'); + return $lang; + } + + /** + * gets first menu in a specific language + * used to override nav_menu_recently_edited when a different language is selected + * @param $lang + * @return int + */ + function _get_first_menu($lang){ + global $wpdb; + $menu_tt_id = $wpdb->get_var("SELECT MIN(element_id) FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_nav_menu' AND language_code='".esc_sql($lang)."'"); + $menu_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=%d",$menu_tt_id)); + return (int) $menu_id; + } + + function get_current_menu(){ + global $sitepress; + $nav_menu_recently_edited = get_user_option( 'nav_menu_recently_edited' ); + $nav_menu_recently_edited_lang = $this->_get_menu_language($nav_menu_recently_edited); + if( !isset( $_REQUEST['menu'] ) && + isset($nav_menu_recently_edited_lang->language_code) && + $nav_menu_recently_edited_lang->language_code != $sitepress->get_current_language()){ + // if no menu is specified and the language is set override nav_menu_recently_edited + $nav_menu_selected_id = $this->_get_first_menu($sitepress->get_current_language()); + if($nav_menu_selected_id){ + update_user_option(get_current_user_id(), 'nav_menu_recently_edited', $nav_menu_selected_id); + }else{ + $_REQUEST['menu'] = 0; + } + + }elseif( !isset( $_REQUEST['menu'] ) && !isset($_GET['lang']) + && (empty($nav_menu_recently_edited_lang->language_code) || $nav_menu_recently_edited_lang->language_code != $sitepress->get_admin_language_cookie()) + && (empty($_POST['action']) || $_POST['action']!='update')){ + // if no menu is specified, no language is set, override nav_menu_recently_edited if its language is different than default + $nav_menu_selected_id = $this->_get_first_menu($sitepress->get_current_language()); + update_user_option(get_current_user_id(), 'nav_menu_recently_edited', $nav_menu_selected_id); + }elseif(isset( $_REQUEST['menu'] )){ + $nav_menu_selected_id = $_REQUEST['menu']; + }else{ + $nav_menu_selected_id = $nav_menu_recently_edited; + } + + $this->current_menu['id'] = $nav_menu_selected_id; + if($this->current_menu['id']){ + $this->_load_menu($this->current_menu['id']); + }else{ + $this->current_menu['trid'] = isset($_GET['trid']) ? intval($_GET['trid']) : null; + if(isset($_POST['icl_nav_menu_language'])){ + $this->current_menu['language'] = $_POST['icl_nav_menu_language']; + }elseif(isset($_GET['lang'])){ + $this->current_menu['language'] = $_GET['lang']; + }else{ + $this->current_menu['language'] = $sitepress->get_admin_language_cookie(); + } + $this->current_menu['translations'] = array(); + } + } + + function _load_menu($menu_id){ + global $sitepress, $wpdb; + + $menu_tt_id = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy='nav_menu'",$this->current_menu['id'])); + $this->current_menu['trid'] = $sitepress->get_element_trid($menu_tt_id, 'tax_nav_menu'); + + if($this->current_menu['trid']){ + $this->current_menu['translations'] = $sitepress->get_element_translations($this->current_menu['trid'], 'tax_nav_menu'); + }else{ + $this->current_menu['translations'] = array(); + } + + foreach($this->current_menu['translations'] as $tr){ + if($menu_tt_id == $tr->element_id){ + $this->current_menu['language'] = $tr->language_code; + } + } + } + + function wp_update_nav_menu($menu_id, $menu_data = null){ + global $sitepress, $wpdb; + if($menu_data){ + if(isset($_POST['icl_translation_of']) && $_POST['icl_translation_of']){ + $src_term_id = $_POST['icl_translation_of']; + if ($src_term_id != 'none') { + $trid = $sitepress->get_element_trid($_POST['icl_translation_of'], 'tax_nav_menu'); + } else { + $trid = null; + } + }else{ + $trid = isset($_POST['icl_nav_menu_trid']) ? intval($_POST['icl_nav_menu_trid']) : null; + } + $language_code = isset($_POST['icl_nav_menu_language']) ? $_POST['icl_nav_menu_language'] : $sitepress->get_default_language(); + $menu_id_tt = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy='nav_menu'",$menu_id)); + $sitepress->set_element_language_details($menu_id_tt, 'tax_nav_menu', $trid, $language_code); + } + $this->current_menu['id'] = $menu_id; + $this->_load_menu($this->current_menu['id']); + } + + function wp_delete_nav_menu($id){ + global $wpdb; + $menu_id_tt = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy='nav_menu'",$id)); + $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translations WHERE element_id='{$menu_id_tt}' AND element_type='tax_nav_menu' LIMIT 1"); + } + + function wp_update_nav_menu_item($menu_id, $menu_item_db_id, $args){ + // TBD + // TBD + global $sitepress; + + // deal with the case of auto-added pages + /* + if(isset($_POST['icl_post_language'])){ + $menu_language = $this->_get_menu_language($menu_id); + if($menu_language != $_POST['icl_post_language']){ + _wp_delete_post_menu_item($menu_id); + return; + } + } + */ + $trid = null; + $language_code = $this->current_lang; + $sitepress->set_element_language_details($menu_item_db_id, 'post_nav_menu_item', $trid, $language_code); + } + + function wp_delete_nav_menu_item($menu_item_id){ + global $wpdb; + $post = get_post($menu_item_id); + if(!empty($post->post_type) && $post->post_type == 'nav_menu_item'){ + $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translations WHERE element_id='{$menu_item_id}' AND element_type='post_nav_menu_item' LIMIT 1"); + } + } + + function nav_menu_language_controls(){ + global $sitepress, $wpdb; + if($this->current_menu['language'] != $sitepress->get_default_language()){ + $menus_wout_translation = $this->get_menus_without_translation($this->current_menu['language']); + } + if(isset($this->current_menu['translations'][$sitepress->get_default_language()])){ + $menus_wout_translation['0'] = (object)array( + 'element_id'=>$this->current_menu['translations'][$sitepress->get_default_language()]->element_id, + 'trid' =>'0', + 'name' =>$this->current_menu['translations'][$sitepress->get_default_language()]->name + ); + } + + $langsel = '
              '; + + // show translations links if this is not a new element + if($this->current_menu['id']){ + $langsel .= '
              '; + $langsel .= __('Translations:', 'sitepress'); + foreach($sitepress->get_active_languages() as $lang){ + if($lang['code'] == $this->current_menu['language']) continue; + if(isset($this->current_menu['translations'][$lang['code']])){ + $lang_suff = '&lang=' . $lang['code']; + $menu_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=%d",$this->current_menu['translations'][$lang['code']]->element_id)); + $tr_link = ''. + $lang['display_name'] . ' '. esc_attr(__('edit', 'sitepress')).
+                        ''; + }else{ + $tr_link = ''. + $lang['display_name'] . ' '. esc_attr(__('add', 'sitepress')).
+                        ''; + } + $trs[] = $tr_link ; + } + $langsel .= ' ' . join (', ', $trs); + $langsel .= '

              '; + $langsel .= ''; + + } + + // show languages dropdown + $langsel .= ''; + + // show 'translation of' if this element is not in the default language and there are untranslated elements + $langsel .= ''; + + if($this->current_menu['id'] && $this->current_menu['language'] != $sitepress->get_default_language() && !empty($menus_wout_translation)){ + $langsel .= ''; + } + $langsel .= ''; + + // add trid to form + if($this->current_menu['trid']){ + $langsel .= ''; + } + + $langsel .= ''; + ?> + + get_results(" + SELECT ts.element_id, ts.trid, t.name + FROM {$wpdb->prefix}icl_translations ts + JOIN {$wpdb->term_taxonomy} tx ON ts.element_id = tx.term_taxonomy_id + JOIN {$wpdb->terms} t ON tx.term_id = t.term_id + WHERE ts.element_type='tax_nav_menu' + AND ts.language_code='{$sitepress->get_default_language()}' + AND tx.taxonomy = 'nav_menu' + "); + $menus = array(); + foreach($res as $row){ + if(!$wpdb->get_var("SELECT translation_id FROM {$wpdb->prefix}icl_translations WHERE trid='{$row->trid}' AND language_code='{$lang}'")){ + $menus[$row->trid] = $row; + } + } + return $menus; + } + + function _render_translation_of($lang, $trid = false){ + global $sitepress; + $out = ''; + + if($sitepress->get_default_language() != $lang){ + $menus = $this->get_menus_without_translation($lang); + $out .= ''; + } + + echo $out; + } + + function get_menus_by_language(){ + global $wpdb, $sitepress; + $langs = array(); + $res = $wpdb->get_results(" + SELECT lt.name AS language_name, l.code AS lang, COUNT(ts.translation_id) AS c + FROM {$wpdb->prefix}icl_languages l + JOIN {$wpdb->prefix}icl_languages_translations lt ON lt.language_code = l.code + JOIN {$wpdb->prefix}icl_translations ts ON l.code = ts.language_code + WHERE lt.display_language_code='".$sitepress->get_admin_language()."' + AND l.active = 1 + AND ts.element_type = 'tax_nav_menu' + GROUP BY ts.language_code + ORDER BY major DESC, english_name ASC + "); + foreach($res as $row){ + $langs[$row->lang] = $row; + } + return $langs; + } + + function languages_menu($echo = true){ + global $sitepress; + $langs = $this->get_menus_by_language(); + + // include empty languages + foreach($sitepress->get_active_languages() as $lang){ + if(!isset($langs[$lang['code']])){ + $langs[$lang['code']] = new stdClass(); + $langs[$lang['code']]->language_name = $lang['display_name']; + $langs[$lang['code']]->lang = $lang['code']; + $langs[$lang['code']]->c = 0; + } + } + $url = admin_url('nav-menus.php'); + + foreach($langs as $l){ + $class = $l->lang == $this->current_lang ? ' class="current"' : ''; + $urlsuff = '?lang=' . $l->lang; + $ls[] = ''.esc_html($l->language_name).' ('.$l->c.')'; + } + $ls_string = '
              '; + $ls_string .= join(' | ', $ls); + $ls_string .= '
              '; + if($echo){ + echo $ls_string; + }else{ + return $ls_string; + } + } + + function get_terms_filter($terms, $taxonomies, $args){ + global $wpdb, $sitepress, $pagenow; + // deal with the case of not translated taxonomies + // we'll assume that it's called as just a single item + if(!$sitepress->is_translated_taxonomy($taxonomies[0]) && 'nav_menu' != $taxonomies[0]){ + return $terms; + } + + // special case for determining list of menus for updating auto-add option + if($taxonomies[0] == 'nav_menu' && $args['fields'] == 'ids' && $_POST['action'] == 'update' && $pagenow=='nav-menus.php'){ + return $terms; + } + + if(!empty($terms)){ + + foreach($taxonomies as $t){ + $txs[] = 'tax_' . $t; + } + $el_types = "'".join(',',$txs)."'"; + + // get all term_taxonomy_id's + $tt = array(); + foreach($terms as $t){ + if(is_object($t)){ + $tt[] = $t->term_taxonomy_id; + }else{ + if(is_numeric($t)){ + $tt[] = $t; + } + } + } + + // filter the ones in the current language + if(!empty($tt)){ + $ftt = $wpdb->get_col("SELECT element_id FROM {$wpdb->prefix}icl_translations + WHERE element_type IN ({$el_types}) AND element_id IN (".join(',',$tt).") AND language_code='{$this->current_lang}'"); + } + + foreach($terms as $k=>$v){ + if(isset($v->term_taxonomy_id) && !in_array($v->term_taxonomy_id, $ftt)){ + unset($terms[$k]); + } + } + } + return array_values($terms); + } + + // filter posts by language + function parse_query($q){ + global $sitepress; + // not filtering nav_menu_item + if($q->query_vars['post_type'] == 'nav_menu_item'){ + return $q; + } + + // also - not filtering custom posts that are not translated + if($sitepress->is_translated_post_type($q->query_vars['post_type'])){ + $q->query_vars['suppress_filters'] = 0; + } + + return $q; + } + + function theme_mod_nav_menu_locations($val){ + global $sitepress; + if($sitepress->get_default_language() != $this->current_lang){ + if(!empty($val)){ + foreach($val as $k=>$v){ + $val[$k] = icl_object_id($val[$k], 'nav_menu', true, $this->current_lang); + } + } + } + return $val; + } + + function pre_update_theme_mods_theme($val){ + global $sitepress; + if(isset($val['nav_menu_locations'])){ + foreach((array)$val['nav_menu_locations'] as $k=>$v){ + if(!$v && $this->current_lang != $sitepress->get_default_language()){ + $tl = get_theme_mod('nav_menu_locations'); + $val['nav_menu_locations'][$k] = $tl[$k]; + }else{ + $val['nav_menu_locations'][$k] = icl_object_id($val['nav_menu_locations'][$k], 'nav_menu',true, $sitepress->get_default_language()); + } + } + } + return $val; + } + + function option_nav_menu_options($val){ + global $wpdb, $sitepress; + // special case of getting menus with auto-add only in a specific language + $db = debug_backtrace(); + if(isset($db[4]) && $db[4]['function'] == '_wp_auto_add_pages_to_menu' && !empty($val['auto_add'])){ + $post_lang = isset($_POST['icl_post_language']) ? $_POST['icl_post_language'] : (isset($_POST['lang']) ? $_POST['lang'] : false); + + //$val['auto_add'] = false; + if($post_lang) { + $val['auto_add'] = $wpdb->get_col(" + SELECT element_id + FROM {$wpdb->prefix}icl_translations + WHERE element_type='tax_nav_menu' + AND element_id IN (".join(',',$val['auto_add']).") + AND language_code = '{$post_lang}'"); + } + } + + return $val; + } + + function wp_nav_menu_args_filter($args){ + global $sitepress; + + if ( ! $args['menu'] ){ + $locations = get_nav_menu_locations(); + if(isset( $args['theme_location'] ) && isset($locations[$args['theme_location']])){ + $args['menu'] = icl_object_id($locations[$args['theme_location']], 'nav_menu'); + } + }; + + if ( ! $args['menu'] ){ + remove_filter('theme_mod_nav_menu_locations', array($this, 'theme_mod_nav_menu_locations')); + $locations = get_nav_menu_locations(); + if(isset( $args['theme_location'] ) && isset($locations[$args['theme_location']])){ + $args['menu'] = icl_object_id($locations[$args['theme_location']], 'nav_menu'); + } + add_filter('theme_mod_nav_menu_locations', array($this, 'theme_mod_nav_menu_locations')); + } + + + if ( $args['menu'] ){ + $db = debug_backtrace(); + if($db[4]['function']=='widget'){ + if(is_integer($args['menu'])){ + $args['menu'] = wp_get_nav_menu_object( icl_object_id($args['menu'], 'nav_menu') ); + }elseif(!empty($args['menu']->term_id)){ + $args['menu'] = wp_get_nav_menu_object( icl_object_id($args['menu']->term_id, 'nav_menu') ); + } + } + } + + return $args; + } + + function wp_nav_menu_items_filter($items){ + $items = preg_replace( + '|
              +

              WPML notice: Upgrades to this version are only supported from versions %s and above. To upgrade from version %s, first, download 2.0.4, do the DB upgrade and then go to this version.", 'sitepress'), + '1.7.0', get_option('icl_sitepress_version'), ' href="http://downloads.wordpress.org/plugin/sitepress-multilingual-cms.2.0.4.zip"'); ?>

              +
              diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/menu/tag-menu.php b/src/wp-content/plugins/sitepress-multilingual-cms/menu/tag-menu.php new file mode 100644 index 0000000..adbe68d --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/menu/tag-menu.php @@ -0,0 +1,28 @@ +noscript_notice() ?> +add_language_selector_to_page($active_languages, + $selected_language, + empty($translations)?array():$translations, + $element_id, + 'tag'); + $sitepress->add_translation_of_selector_to_page($trid, + $selected_language, + $default_language, + $source_language, + $untranslated_ids, + $element_id, + 'tag'); + $sitepress->add_translate_options($trid, + $active_languages, + $selected_language, + empty($translations)?array():$translations, + 'tag'); + +?> + +
              + + + + diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/menu/taxonomy-menu.php b/src/wp-content/plugins/sitepress-multilingual-cms/menu/taxonomy-menu.php new file mode 100644 index 0000000..c66bfd4 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/menu/taxonomy-menu.php @@ -0,0 +1,28 @@ +noscript_notice() ?> +add_language_selector_to_page($active_languages, + $selected_language, + empty($translations)?array():$translations, + $element_id, + $icl_element_type); + $sitepress->add_translation_of_selector_to_page($trid, + $selected_language, + $default_language, + $source_language, + $untranslated_ids, + $element_id, + $icl_element_type); + $sitepress->add_translate_options($trid, + $active_languages, + $selected_language, + empty($translations)?array():$translations, + $icl_element_type); + +?> + + + + + + diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/menu/taxonomy-translation-content.php b/src/wp-content/plugins/sitepress-multilingual-cms/menu/taxonomy-translation-content.php new file mode 100644 index 0000000..a7dabae --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/menu/taxonomy-translation-content.php @@ -0,0 +1,296 @@ + + +
              + + + +show_selector ): ?> + + + +

              taxonomy_obj->labels->name ) ?>

              + +

              ' . $this->taxonomy_obj->labels->singular_name . '' ); ?>

              + +
              + +

              + +

              + + + +   + +   + selected_languages ) == 1 ) { + $the_language = current( $this->selected_languages ); + } + ?> + +   + + search ) ): ?> + <?php esc_attr_e( 'clear', 'sitepress' ) ?> + +   + + taxonomy, $this->child_of ) ?> + + + + + loading + +
              +

              + + +
              + +
              + + + + + get_display_language_name( $sitepress->get_default_language(), $sitepress->get_current_language() ); + ?> + + selected_languages as $language ): if ( $language[ 'code' ] != $sitepress->get_current_language() ): ?> + + + + + + terms ): ?> + terms as $term ): ?> + + + selected_languages as $language ): if ( $language[ 'code' ] != $sitepress->get_current_language() ): ?> + + + + + + + + + + +
              taxonomy_obj->labels->singular_name . ' (' . $current_language_name . ')'; ?>
              + level ) ); + echo $term->name + ?> + + + translations ) && !empty( $term->translations[ $language[ 'code' ] ] ) ? '' : ' lowlight'; ?> + + translations ) && !empty( $term->translations[ $language[ 'code' ] ] ) ): ?> + level ) ); ?> + the_category_name_filter( $term->translations[ $language[ 'code' ] ]->name ); ?> + + + + + + + +
              + + terms_count > WPML_TT_TERMS_PER_PAGE ): ?> +
              +
              + terms_count ) ?> + « + + + + + terms_count / WPML_TT_TERMS_PER_PAGE ) ?> + + + » +
              +
              + + +
              + + + + + + + + + + + +

              taxonomy_obj->labels->name ) ?>

              +

              ' . $this->taxonomy_obj->labels->singular_name . '' ); ?>

              + get_default_language() != $sitepress_settings[ 'st' ][ 'strings_language' ] ): + $strings_lang = $sitepress->get_language_details( $sitepress_settings[ 'st' ][ 'strings_language' ] ); + ?> +

              + + +

              + + + +
              + + + + + + taxonomy_obj->labels_translations as $language => $translations ): + if ( $language != $sitepress_settings[ 'st' ][ 'strings_language' ] ): + $language = $sitepress->get_language_details( $language ); ?> + + + + + + + + taxonomy_obj->labels_translations as $language => $translations ): + if ( $language != $sitepress_settings[ 'st' ][ 'strings_language' ] ): ?> + + + + +
              taxonomy_obj->labels->singular_name ?>
              taxonomy_obj->labels_translations[ $sitepress_settings[ 'st' ][ 'strings_language' ] ][ 'singular' ] . ' / ' . $this->taxonomy_obj->labels_translations[ $sitepress_settings[ 'st' ][ 'strings_language' ] ][ 'general' ] ?> + + + + + + + + + + + +
              + +
              + + + + +
              + + show_tax_sync ) ?> + + +
              + +
              + + +

              + taxonomy_obj->labels->name ) ?>"/> + loading +

              + +
              +
              + + +

              ' . $this->taxonomy_obj->labels->singular_name . '' ); ?>

              + + + + taxonomy ); ?> + +
              + + +
              \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/menu/taxonomy-translation.php b/src/wp-content/plugins/sitepress-multilingual-cms/menu/taxonomy-translation.php new file mode 100644 index 0000000..8b5a3eb --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/menu/taxonomy-translation.php @@ -0,0 +1,14 @@ + +
              +

              +

              + +
              + render(); + ?> + + + +
              diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/menu/theme-localization.php b/src/wp-content/plugins/sitepress-multilingual-cms/menu/theme-localization.php new file mode 100644 index 0000000..8deab5d --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/menu/theme-localization.php @@ -0,0 +1,197 @@ + count($sitepress->get_active_languages())){ + return; +} +$active_languages = $sitepress->get_active_languages(); +$locales = $sitepress->get_locale_file_names(); + +?> + +
              +

              +

              + +

              +

              +
              + +
                + +
              • + ' . $icl_st_note . ''; ?> +
              • +
              • +
                style="display:none"> + + +
                +
              • +
              +

              + + +

              + need help

                »

              +
              + + ') && isset($sitepress_settings['theme_localization_type']) && $sitepress_settings['theme_localization_type'] == 1) include WPML_ST_PATH . '/menu/auto-download-mo-config.php'; ?> + + 0):?> +
              +
              +

              +

              +
              + +
              + + + + + + + + + + + + get_option('translations'); + ?> + + + + + + + + + + + + + + + + + + + + + + +
               
              + .mo + + + + + + + + + + + + + + ' . __('not available', 'sitepress') . ''; + }else{ + + $update_available = array(); + foreach($wptranslations[$lang['code']] as $project => $info){ + + // filter only core( & admin) + if($project != 'admin' && $project != 'core') continue; + + if(!empty($info['available']) && (empty($info['installed']) || $info['installed'] != $info['available'])){ + $update_available[$project] = $info['available']; + } + } + if($update_available){ + + $vkeys = array(); + foreach($update_available as $project => $signature){ + $vkeys[] = $project.'|'.$signature; + } + $updates_versions[$lang['code']] = join(';', $vkeys); + + echo '' . __('Updates available', 'sitepress') . ''; + $wpl_disabled = false; + }else{ + echo '' . __('Up to date', 'sitepress') . ''; + } + + } + } + ?> +   + disabled="disabled" onclick="return false;"> + +
              + +
              +
              +

              + + +

              +
              + + + get_option('last_time_xml_check'))): ?> + get_option('last_time_xml_check_trigger') == 'wp-update'): ?> + Check now.', 'sitepress'), + date("F j, Y @H:i", $WPML_ST_MO_Downloader->get_option('last_time_xml_check')), ' id="icl_adm_update_check" href="#"'); ?> + + Check now.', 'sitepress'), + date("F j, Y @H:i", $WPML_ST_MO_Downloader->get_option('last_time_xml_check')), ' id="icl_adm_update_check" href="#"'); ?> + + + Check now.', 'sitepress'), ' id="icl_adm_update_check" href="#"'); ?> + + + +
              + +
              +
              + + + + + + + +
              diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/menu/translation-options.php b/src/wp-content/plugins/sitepress-multilingual-cms/menu/translation-options.php new file mode 100644 index 0000000..6b8f794 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/menu/translation-options.php @@ -0,0 +1,17 @@ +
              +

              +

              +
              + + + +
              + +
              + + +
              + + + +
              \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/menu/troubleshooting.php b/src/wp-content/plugins/sitepress-multilingual-cms/menu/troubleshooting.php new file mode 100644 index 0000000..4a0a19e --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/menu/troubleshooting.php @@ -0,0 +1,1148 @@ +term_taxonomy_id; +} + +if ( isset( $_GET[ 'debug_action' ] ) && $_GET[ 'nonce' ] == wp_create_nonce( $_GET[ 'debug_action' ] ) ) { + ob_end_clean(); + switch ( $_GET[ 'debug_action' ] ) { + case 'reset_pro_translation_configuration': + $sitepress_settings = get_option( 'icl_sitepress_settings' ); + + $sitepress_settings[ 'content_translation_languages_setup' ] = false; + $sitepress_settings[ 'content_translation_setup_complete' ] = false; + unset( $sitepress_settings[ 'content_translation_setup_wizard_step' ] ); + unset( $sitepress_settings[ 'site_id' ] ); + unset( $sitepress_settings[ 'access_key' ] ); + unset( $sitepress_settings[ 'translator_choice' ] ); + unset( $sitepress_settings[ 'icl_lang_status' ] ); + unset( $sitepress_settings[ 'icl_balance' ] ); + unset( $sitepress_settings[ 'icl_support_ticket_id' ] ); + unset( $sitepress_settings[ 'icl_current_session' ] ); + unset( $sitepress_settings[ 'last_get_translator_status_call' ] ); + unset( $sitepress_settings[ 'last_icl_reminder_fetch' ] ); + unset( $sitepress_settings[ 'icl_account_email' ] ); + unset( $sitepress_settings[ 'translators_management_info' ] ); + + update_option( 'icl_sitepress_settings', $sitepress_settings ); + + mysql_query( "TRUNCATE TABLE {$wpdb->prefix}icl_core_status" ); + mysql_query( "TRUNCATE TABLE {$wpdb->prefix}icl_content_status" ); + mysql_query( "TRUNCATE TABLE {$wpdb->prefix}icl_string_status" ); + mysql_query( "TRUNCATE TABLE {$wpdb->prefix}icl_node" ); + mysql_query( "TRUNCATE TABLE {$wpdb->prefix}icl_reminders" ); + + echo ""; + exit; + case 'ghost_clean': + + // clean the icl_translations table + $orphans = $wpdb->get_col( " + SELECT t.translation_id + FROM {$wpdb->prefix}icl_translations t + LEFT JOIN {$wpdb->posts} p ON t.element_id = p.ID + WHERE t.element_id IS NOT NULL AND t.element_type LIKE 'post\\_%' AND p.ID IS NULL + " ); + if ( !empty( $orphans ) ) { + $wpdb->query( "DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id IN (" . join( ',', $orphans ) . ")" ); + } + + $orphans = $wpdb->get_col( " + SELECT t.translation_id + FROM {$wpdb->prefix}icl_translations t + LEFT JOIN {$wpdb->comments} c ON t.element_id = c.comment_ID + WHERE t.element_type = 'comment' AND c.comment_ID IS NULL " ); + echo mysql_error(); + if ( !empty( $orphans ) ) { + $wpdb->query( "DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id IN (" . join( ',', $orphans ) . ")" ); + } + + $orphans = $wpdb->get_col( " + SELECT t.translation_id + FROM {$wpdb->prefix}icl_translations t + LEFT JOIN {$wpdb->term_taxonomy} p ON t.element_id = p.term_taxonomy_id + WHERE t.element_id IS NOT NULL AND t.element_type LIKE 'tax\\_%' AND p.term_taxonomy_id IS NULL" ); + if ( !empty( $orphans ) ) { + $wpdb->query( "DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id IN (" . join( ',', $orphans ) . ")" ); + } + + global $wp_taxonomies; + if ( is_array( $wp_taxonomies ) ) { + foreach ( $wp_taxonomies as $t => $v ) { + $orphans = $wpdb->get_col( " + SELECT t.translation_id + FROM {$wpdb->prefix}icl_translations t + LEFT JOIN {$wpdb->term_taxonomy} p + ON t.element_id = p.term_taxonomy_id + WHERE t.element_type = 'tax_{$t}' + AND p.taxonomy <> '{$t}' + " ); + if ( !empty( $orphans ) ) { + $wpdb->query( "DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id IN (" . join( ',', $orphans ) . ")" ); + } + } + } + + // remove ghost translations + // get unlinked rids + $rids = $wpdb->get_col( "SELECT rid FROM {$wpdb->prefix}icl_translation_status WHERE translation_id NOT IN (SELECT translation_id FROM {$wpdb->prefix}icl_translations)" ); + if ( $rids ) { + $jids = $wpdb->get_col( "SELECT job_id FROM {$wpdb->prefix}icl_translate_job WHERE rid IN (" . join( ',', $rids ) . ")" ); + if ( $jids ) { + $wpdb->query( "DELETE FROM {$wpdb->prefix}icl_translate WHERE job_id IN (" . join( ',', $jids ) . ")" ); + $wpdb->query( "DELETE FROM {$wpdb->prefix}icl_translate_job WHERE job_id IN (" . join( ',', $jids ) . ")" ); + $wpdb->query( "DELETE FROM {$wpdb->prefix}icl_translation_status WHERE rid IN (" . join( ',', $rids ) . ")" ); + } + } + + // remove any duplicates in icl_translations + $trs = $wpdb->get_results( "SELECT element_id, GROUP_CONCAT(translation_id) AS tids FROM {$wpdb->prefix}icl_translations + WHERE element_id > 0 AND element_type LIKE 'post\\_%' GROUP BY element_id" ); + foreach ( $trs as $r ) { + $exp = explode( ',', $r->tids ); + if ( count( $exp ) > 1 ) { + $maxtid = max( $exp ); + foreach ( $exp as $e ) { + if ( $e != $maxtid ) { + $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id=%d", $e ) ); + } + } + } + } + + + exit; + break; + case 'icl_sync_jobs': + + $iclq = new ICanLocalizeQuery( $sitepress_settings[ 'site_id' ], $sitepress_settings[ 'access_key' ] ); + $requests = $iclq->cms_requests_all(); + if ( !empty( $requests ) ) + foreach ( $requests as $request ) { + $source_language = ICL_Pro_Translation::server_languages_map( $request[ 'language_name' ], true ); + $target_language = ICL_Pro_Translation::server_languages_map( $request[ 'target' ][ 'language_name' ], true ); + + $source_language = $wpdb->get_var( $wpdb->prepare( "SELECT code FROM {$wpdb->prefix}icl_languages WHERE english_name=%s", $source_language ) ); + $target_language = $wpdb->get_var( $wpdb->prepare( "SELECT code FROM {$wpdb->prefix}icl_languages WHERE english_name=%s", $target_language ) ); + + // only handle old-style cms_id values + if ( !is_numeric( $request[ 'cms_id' ] ) ) + continue; + + $tr = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}icl_translations WHERE translation_id=%d", $request[ 'cms_id' ] ) ); + if ( empty( $tr ) ) { + $trs = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}icl_translation_status WHERE translation_id=%d", $request[ 'cms_id' ] ) ); + if ( !empty( $trs ) ) { + $tpack = unserialize( $trs->translation_package ); + $original_id = $tpack[ 'contents' ][ 'original_id' ][ 'data' ]; + list( $trid, $element_type ) = $wpdb->get_row( " + SELECT trid, element_type + FROM {$wpdb->prefix}icl_translations + WHERE element_id={$original_id} + AND element_type LIKE 'post\\_%' + ", ARRAY_N ); + if ( $trid ) { + $wpdb->query( "DELETE FROM {$wpdb->prefix}icl_translations WHERE trid={$trid} AND language_code='{$target_language}'" ); + $recover = array( + 'translation_id' => $request[ 'cms_id' ], + 'element_type' => $element_type, + //'element_id' => this is NULL + 'trid' => $trid, + 'language_code' => $target_language, + 'source_language_code' => $source_language + ); + $wpdb->insert( $wpdb->prefix . 'icl_translations', $recover ); + } + } + } + } + + // Do a check to see if the icl_translation_status is consistant. + // There was a problem with the cancel logic leaving it in a status where + // Translations couldn't be sent. + + global $iclTranslationManagement; + + $res = $wpdb->get_results( $wpdb->prepare( " + SELECT rid, status, needs_update, md5, translation_package + FROM {$wpdb->prefix}icl_translation_status" + ) ); + foreach ( $res as $row ) { + if ( $row->status == ICL_TM_NOT_TRANSLATED || $row->needs_update == 1 ) { + + $tpack = unserialize( $row->translation_package ); + $original_id = $tpack[ 'contents' ][ 'original_id' ][ 'data' ]; + + $post_md5 = $iclTranslationManagement->post_md5( $original_id ); + + if ( $post_md5 == $row->md5 ) { + // The md5 shouldn't be the same if it's not translated or needs update. + // Add a dummy md5 and mark it as needs_update. + $data = array( 'needs_update' => 1, 'md5' => 'XXXX' ); + $wpdb->update( $wpdb->prefix . 'icl_translation_status', $data, array( 'rid' => $row->rid ) ); + } + } + } + + exit; + //break; + case 'icl_cms_id_fix': + $iclq = new ICanLocalizeQuery( $sitepress_settings[ 'site_id' ], $sitepress_settings[ 'access_key' ] ); + + $p = $wpdb->get_row( "SELECT t.* FROM {$wpdb->prefix}icl_translations t JOIN {$wpdb->prefix}icl_translation_status s ON t.translation_id=s.translation_id + WHERE t.element_type LIKE 'post\\_%' AND t.source_language_code IS NOT NULL AND s.translation_service='icanlocalize' LIMIT {$_REQUEST['offset']}, 1" ); + if ( !empty( $p ) ) { + + $original_id = $wpdb->get_var( $wpdb->prepare( "SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND source_language_code IS NULL", $p->trid ) ); + if ( $p->element_type == 'post_page' ) { + $permalink = get_option( 'home' ) . '?page_id=' . $original_id; + } else { + $permalink = get_option( 'home' ) . '?p=' . $original_id; + } + $_lang_details = $sitepress->get_language_details( $p->source_language_code ); + $from_language = ICL_Pro_Translation::server_languages_map( $_lang_details[ 'english_name' ] ); + $_lang_details = $sitepress->get_language_details( $p->language_code ); + $to_language = ICL_Pro_Translation::server_languages_map( $_lang_details[ 'english_name' ] ); + $cms_id = sprintf( '%s_%d_%s_%s', preg_replace( '#^post_#', '', $p->element_type ), $original_id, $p->source_language_code, $p->language_code ); + + $ret = $iclq->update_cms_id( compact( 'permalink', 'from_language', 'to_language', 'cms_id' ) ); + + if ( $ret != $cms_id && $iclq->error() ) { + echo json_encode( array( 'errors' => 1, 'message' => $iclq->error(), 'cont' => 0 ) ); + } else { + echo json_encode( array( 'errors' => 0, 'message' => 'OK', 'cont' => 1 ) ); + } + + } else { + echo json_encode( array( 'errors' => 0, 'message' => __( 'Done', 'sitepress' ), 'cont' => 0 ) ); + } + + exit; + //break; + case 'icl_cleanup': + global $sitepress, $wpdb, $wp_post_types; + $post_types = array_keys( $wp_post_types ); + foreach ( $post_types as $pt ) { + $types[ ] = 'post_' . $pt; + } + /* + * Messed up on 2.0 upgrade + */ + // fix source_language_code + // all source documents must have null + $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->prefix}icl_translations SET source_language_code = NULL + WHERE element_type IN('" . join( "','", $types ) . "') AND source_language_code = '' AND language_code='%s'", $sitepress->get_default_language() ) ); + // get translated documents with missing source language + $res = $wpdb->get_results( $wpdb->prepare( " + SELECT translation_id, trid, language_code + FROM {$wpdb->prefix}icl_translations + WHERE (source_language_code = '' OR source_language_code IS NULL) + AND element_type IN('" . join( "','", $types ) . "') + AND language_code <> %s + ", $sitepress->get_default_language() + ) ); + foreach ( $res as $row ) { + $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->prefix}icl_translations SET source_language_code = '%s' WHERE translation_id=%d", $sitepress->get_default_language(), $row->translation_id ) ); + } + break; + case 'assign_translation_status_to_duplicates': + //ICL_TM_DUPLICATE + if(!class_exists('TranslationManagement')) break; + + global $sitepress, $iclTranslationManagement; + + $active_languages = $sitepress->get_active_languages(); + + $duplicated_posts_sql = "select meta_value from {$wpdb->postmeta} where meta_key='_icl_lang_duplicate_of' AND meta_value<>'' group by meta_value;"; + $duplicated_posts = $wpdb->get_results($duplicated_posts_sql); + + $updated_items = 0; + foreach ( $duplicated_posts as $duplicated_posts_row ) { + + //$duplicated_post_id = $duplicated_posts_row->post_id; + $original_post_id = $duplicated_posts_row->meta_value; + $element_type = 'post_' . get_post_type( $original_post_id ); + $trid = $sitepress->get_element_trid($original_post_id, $element_type); + + $element_language_details = $sitepress->get_element_translations($trid, $element_type ); + + $item_updated = false; + foreach ( $active_languages as $code => $active_language ) { + if ( !isset( $element_language_details[ $code ] ) ) { + continue; + } + + $element_translation = $element_language_details[ $code ]; + if ( !isset( $element_translation ) || $element_translation->original ) { + continue; + } + + $translation = $iclTranslationManagement->get_element_translation( $element_translation->element_id, $code, $element_type ); + if ( !$translation ) { + $_POST['icl_trid'] = $trid; + $_POST['icl_post_language'] = $code; + $translated_post = get_post( $element_translation->element_id ); + $iclTranslationManagement->save_post_actions( $element_translation->element_id, $translated_post, ICL_TM_DUPLICATE ); + unset($_POST['icl_post_language']); + unset($_POST['icl_trid']); + $item_updated = true; + } + } + + if ( $item_updated ) { + $updated_items++; + } + if ( $updated_items >= 20 ) { + break; + } + } + + echo json_encode( array( 'updated' => $updated_items )); + exit; + case 'sync_cancelled': + + $iclq = new ICanLocalizeQuery( $sitepress_settings[ 'site_id' ], $sitepress_settings[ 'access_key' ] ); + $requests = $iclq->cms_requests_all(); + + if ( $requests === false ) { + echo json_encode( array( 'errors' => 1, 'message' => 'Failed fetching jobs list from the server.' ) ); + exit; + } + + $cms_ids = array(); + if ( !empty( $requests ) ) + foreach ( $requests as $request ) { + $cms_ids[ ] = $request[ 'cms_id' ]; + } + + // get jobs that are in progress + $translations = $wpdb->get_results( " + SELECT t.element_id, t.element_type, t.language_code, t.source_language_code, t.trid, + s.rid, s._prevstate, s.translation_id + FROM {$wpdb->prefix}icl_translation_status s + JOIN {$wpdb->prefix}icl_translations t + ON t.translation_id = s.translation_id + WHERE s.translation_service='icanlocalize' + AND s.status = " . ICL_TM_IN_PROGRESS . " + " ); + + $job2delete = $rids2cancel = array(); + foreach ( $translations as $t ) { + $original_id = $wpdb->get_var( $wpdb->prepare( "SELECT element_id FROM {$wpdb->prefix}icl_translations + WHERE trid=%d AND source_language_code IS NULL", $t->trid ) ); + $cms_id = sprintf( '%s_%d_%s_%s', preg_replace( '#^post_#', '', $t->element_type ), $original_id, $t->source_language_code, $t->language_code ); + if ( !in_array( $cms_id, $cms_ids ) ) { + $_lang_details = $sitepress->get_language_details( $t->source_language_code ); + $lang_from = $_lang_details[ 'english_name' ]; + $_lang_details = $sitepress->get_language_details( $t->language_code ); + $lang_to = $_lang_details[ 'english_name' ]; + $jobs2delete[ ] = '' . get_the_title( $original_id ) . '' . sprintf( ' - from %s to %s', + $lang_from, $lang_to ); + $translations2cancel[ ] = $t; + } + } + + if ( !empty( $jobs2delete ) ) { + echo json_encode( array( + 'errors' => 0, + 'message' => '
              About to cancel these jobs:
              +
              • ' . join( '
              • ', $jobs2delete ) . '

              + OK  + Cancel

              +
              ', + 'data' => array( 't2c' => serialize( $translations2cancel ) ) + ) + ); + } else { + echo json_encode( array( 'errors' => 0, 'message' => 'Nothing to cancel.' ) ); + } + + exit; + case 'sync_cancelled_do_delete': + $translations = unserialize( stripslashes( $_POST[ 't2c' ] ) ); + if ( is_array( $translations ) ) + foreach ( $translations as $t ) { + $job_id = $wpdb->get_var( $wpdb->prepare( "SELECT job_id FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d AND revision IS NULL", $t->rid ) ); + if ( $job_id ) { + $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}icl_translate_job WHERE job_id=%d", $job_id ) ); + $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}icl_translate WHERE job_id=%d", $job_id ) ); + $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->prefix}icl_translate_job SET revision = NULL WHERE rid=%d ORDER BY job_id DESC LIMIT 1", $t->rid ) ); + } + + if ( !empty( $t->_prevstate ) ) { + $_prevstate = unserialize( $t->_prevstate ); + $wpdb->update( $wpdb->prefix . 'icl_translation_status', + array( + 'status' => $_prevstate[ 'status' ], + 'translator_id' => $_prevstate[ 'translator_id' ], + 'status' => $_prevstate[ 'status' ], + 'needs_update' => $_prevstate[ 'needs_update' ], + 'md5' => $_prevstate[ 'md5' ], + 'translation_service' => $_prevstate[ 'translation_service' ], + 'translation_package' => $_prevstate[ 'translation_package' ], + 'timestamp' => $_prevstate[ 'timestamp' ], + 'links_fixed' => $_prevstate[ 'links_fixed' ] + ), + array( 'translation_id' => $t->translation_id ) + ); + $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->prefix}icl_translation_status SET _prevstate = NULL WHERE translation_id=%d", $t->translation_id ) ); + } else { + $wpdb->update( $wpdb->prefix . 'icl_translation_status', array( 'status' => ICL_TM_NOT_TRANSLATED, 'needs_update' => 0 ), array( 'translation_id' => $t->translation_id ) ); + } + } + + echo json_encode( array( 'errors' => 0, 'message' => 'OK' ) ); + + exit; + case 'icl_ts_add_missing_language': + $ptypes = array_keys( $sitepress->get_translatable_documents() ); + $posts = $wpdb->get_results( "SELECT * FROM {$wpdb->posts} WHERE post_type IN ('" . join( "','", $ptypes ) . "')" ); + foreach ( $posts as $p ) { + $tid = $wpdb->get_var( $wpdb->prepare( " + SELECT translation_id FROM {$wpdb->prefix}icl_translations + WHERE element_type=%s AND element_id=%d + ", 'post_' . $p->post_type, $p->ID ) ); + if ( !$tid ) { + + if ( isset( $sitepress_settings[ 'urls' ][ 'root_page' ] ) && $sitepress_settings[ 'urls' ][ 'root_page' ] == $p->ID ) { + continue; + } + + $sitepress->set_element_language_details( $p->ID, 'post_' . $p->post_type, null, $sitepress->get_default_language() ); + } + } + $ttypes = array(); + foreach ( $ptypes as $ptype ) { + $ttypes = array_merge( $sitepress->get_translatable_taxonomies( true, $ptype ), $ttypes ); + } + $ttypes = array_unique( $ttypes ); + $taxs = $wpdb->get_results( "SELECT * FROM {$wpdb->term_taxonomy} WHERE taxonomy IN ('" . join( "','", $ttypes ) . "')" ); + foreach ( $taxs as $t ) { + $tid = $wpdb->get_var( $wpdb->prepare( " + SELECT translation_id FROM {$wpdb->prefix}icl_translations + WHERE element_type=%s AND element_id=%d + ", 'tax_' . $t->taxonomy, $t->term_taxonomy_id ) ); + if ( !$tid ) { + $sitepress->set_element_language_details( $t->term_taxonomy_id, + 'tax_' . $t->taxonomy, null, $sitepress->get_default_language() ); + } + } + + $cids = $wpdb->get_col( "SELECT c.comment_ID FROM {$wpdb->comments} c LEFT JOIN {$wpdb->prefix}icl_translations t ON t.element_id = c.comment_id AND t.element_type='comment' WHERE t.element_id IS NULL" ); + foreach ( $cids as $cid ) { + $sitepress->set_element_language_details( $cid, 'comment', null, $sitepress->get_default_language() ); + } + + exit; + case 'link_post_type': + $wpdb->update( $wpdb->prefix . 'icl_translations', array( 'element_type' => 'post_' . $_GET[ 'new_value' ] ), array( 'element_type' => 'post_' . $_GET[ 'old_value' ] ) ); + exit; + case 'link_taxonomy': + $wpdb->update( $wpdb->prefix . 'icl_translations', array( 'element_type' => 'tax_' . $_GET[ 'new_value' ] ), array( 'element_type' => 'tax_' . $_GET[ 'old_value' ] ) ); + exit; + case 'icl_fix_terms_count': + global $sitepress; + + remove_filter('get_terms_args', array($sitepress, 'get_terms_args_filter')); + remove_filter('get_term', array($sitepress,'get_term_adjust_id')); + remove_filter('terms_clauses', array($sitepress,'terms_clauses')); + foreach ( get_taxonomies( array(), 'names' ) as $taxonomy ) { + + $terms_objects = get_terms( $taxonomy, 'hide_empty=0' ); + if ( $terms_objects ) { + $term_taxonomy_ids = array_map( 'get_term_taxonomy_id_from_term_object', $terms_objects ); + wp_update_term_count( $term_taxonomy_ids, $taxonomy, true ); + } + + } + add_filter('terms_clauses', array($sitepress,'terms_clauses')); + add_filter('get_term', array($sitepress,'get_term_adjust_id')); + add_filter('get_terms_args', array($sitepress, 'get_terms_args_filter')); + exit; + } +} +/* DEBUG ACTION */ + +$icl_tables = array( + $wpdb->prefix . 'icl_languages', + $wpdb->prefix . 'icl_languages_translations', + $wpdb->prefix . 'icl_translations', + $wpdb->prefix . 'icl_translation_status', + $wpdb->prefix . 'icl_translate_job', + $wpdb->prefix . 'icl_translate', + $wpdb->prefix . 'icl_locale_map', + $wpdb->prefix . 'icl_flags', + $wpdb->prefix . 'icl_content_status', + $wpdb->prefix . 'icl_core_status', + $wpdb->prefix . 'icl_node', + $wpdb->prefix . 'icl_strings', + $wpdb->prefix . 'icl_string_translations', + $wpdb->prefix . 'icl_string_status', + $wpdb->prefix . 'icl_string_positions', + $wpdb->prefix . 'icl_message_status', + $wpdb->prefix . 'icl_reminders', +); + +if ( ( isset( $_POST[ 'icl_reset_allnonce' ] ) && $_POST[ 'icl_reset_allnonce' ] == wp_create_nonce( 'icl_reset_all' ) ) ) { + if ( $_POST[ 'icl-reset-all' ] == 'on' ) { + icl_reset_wpml(); + echo ''; + } +} + + +?> +
              +

              +

              + +

              + +

              + +'.$icl_table.' | '; +} +*/ +echo '' . __( 'WPML Settings', 'sitepress' ) . ''; + +/* +foreach($icl_tables as $icl_table){ + echo '

              '.$icl_table.'  

              '; + if(strtolower($wpdb->get_var("SHOW TABLES LIKE '{$icl_table}'")) != strtolower($icl_table)){ + echo '

              '.__('Not found!', 'sitepress').'

              '; + }else{ + $results = $wpdb->get_results("DESCRIBE {$icl_table}", ARRAY_A); + $keys = array_keys($results[0]); + ?> + + + + + + + + + + + + + + +
              + '; + $results = $wpdb->get_results("SELECT * FROM {$icl_table}", ARRAY_A); + echo ''; + echo ''; + } + +} + +function __custom_csv_escape($s){ + $s = """. str_replace('"','"',addslashes($s)) . """; + return $s; +} +*/ + +echo '

              ' . __( 'WPML settings', 'sitepress' ) . '

              '; +echo ''; + +?> + + +

              + + + +
              +

              + +
              + + +
              + + +

              + + +

              +
              +
              + +
              + +
              + +
              +

              + +

              + +

              +
              + +

              + +

              +
              + +

              +

              + + ', $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}icl_translations t JOIN {$wpdb->prefix}icl_translation_status s ON t.translation_id=s.translation_id WHERE t.element_type LIKE 'post\\_%' AND t.source_language_code IS NOT NULL AND s.translation_service='icanlocalize'" ) ) ?>
              + +

              + +

              +
              + +

              + + +

              +
              + +

              + + + +

              +
              + +

              + + + +

              +
              + +

              +

              +
              + +

              + +

              +
              +
              + + + get_translatable_documents(); + $res = $wpdb->get_col( "SELECT DISTINCT element_type FROM {$wpdb->prefix}icl_translations WHERE element_type LIKE 'post\\_%'" ); + echo ''; + + foreach ( $res as $row ) { + + $post_type = preg_replace( '#^post_#', '', $row ); + if ( $post_type == 'nav_menu_item' ) + continue; + + echo ''; + echo ''; + + if ( isset( $translatable_posts[ $post_type ] ) ) { + + echo ''; + + } else { + echo ''; + } + echo ''; + } + + echo '
              ' . $post_type . '' . __( 'linked to: ', 'sitepress' ) . $translatable_posts[ $post_type ]->labels->name . ''; + echo ''; + echo '
              '; + echo '
              '; + echo __( 'Note: if you edited the custom post declaration you may need to re-configure WPML to mark it as translatable.', 'sitepress' ); + + ?> +

              + +

              +
              +
              + + + $post_type ) { + $translatable_taxs = array_merge( $translatable_taxs, $sitepress->get_translatable_taxonomies( true, $name ) ); + } + $translatable_taxs = array_unique( $translatable_taxs ); + + $res = $wpdb->get_col( "SELECT DISTINCT element_type FROM {$wpdb->prefix}icl_translations WHERE element_type LIKE 'tax\\_%'" ); + echo ''; + + foreach ( $res as $row ) { + + $tax = preg_replace( '#^tax_#', '', $row ); + if ( $tax == 'link_category' || $tax == 'nav_menu' ) + continue; + + echo ''; + + echo ''; + + if ( in_array( $tax, $translatable_taxs ) ) { + + echo ''; + + } else { + echo ''; + } + echo ''; + } + + echo '
              ' . $tax . '' . __( 'linked to: ', 'sitepress' ) . $wp_taxonomies[ $tax ]->labels->name . ''; + echo ''; + echo '
              '; + echo '
              '; + echo __( 'Note: if you edited the custom taxonomy declaration you may need to re-configure WPML to mark it as translatable.', 'sitepress' ); + + ?> +

              + +
              + +
              + +
              +
              +

              + +
              +

              + + + +
              + +
              + +
              + +
              +

              + +
              + +
              + +
              +
              + + +

              + + blogid ? $wpdb->blogid : 1; + $user[ 'url' ] = get_option( 'siteurl' ); + $user[ 'title' ] = get_option( 'blogname' ); + $user[ 'description' ] = isset( $sitepress_settings[ 'icl_site_description' ] ) ? $sitepress_settings[ 'icl_site_description' ] : ''; + $user[ 'is_verified' ] = 1; + if ( defined( 'ICL_AFFILIATE_ID' ) && defined( 'ICL_AFFILIATE_KEY' ) ) { + $user[ 'affiliate_id' ] = ICL_AFFILIATE_ID; + $user[ 'affiliate_key' ] = ICL_AFFILIATE_KEY; + } + $user[ 'interview_translators' ] = $sitepress_settings[ 'interview_translators' ]; + $user[ 'project_kind' ] = 2; + $user[ 'pickup_type' ] = intval( $sitepress_settings[ 'translation_pickup_method' ] ); + $notifications = 0; + if ( !empty( $sitepress_settings[ 'icl_notify_complete' ] ) ) { + $notifications += 1; + } + if ( $sitepress_settings[ 'alert_delay' ] ) { + $notifications += 2; + } + $user[ 'notifications' ] = $notifications; + $user[ 'ignore_languages' ] = 0; + $user[ 'from_language1' ] = isset( $_GET[ 'lang_from' ] ) ? $_GET[ 'lang_from' ] : 'English'; + $user[ 'to_language1' ] = isset( $_GET[ 'lang_to' ] ) ? $_GET[ 'lang_to' ] : 'French'; + } + + define( 'ICL_DEB_SHOW_ICL_RAW_RESPONSE', true ); + $resp = $icl_query->createAccount( $user ); + echo ''; + + ?> + + + +
              +
              + + + +
              + +
              + + ' . __( 'Reset', 'sitepress' ) . ''; + ?> + + + +

              + + + + + + + + + + '; + wp_nonce_field( 'icl_reset_all', 'icl_reset_allnonce' ); + echo '

              ' . __( "All translations you have sent to ICanLocalize will be lost if you reset WPML's data. They cannot be recovered later.", 'sitepress' ) + . '

              '; + echo '

              '; + + echo ''; + echo ''; + ?> + + + +
              + + +
              \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/menu/upgrade_notice.php b/src/wp-content/plugins/sitepress-multilingual-cms/menu/upgrade_notice.php new file mode 100644 index 0000000..0eaff30 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/menu/upgrade_notice.php @@ -0,0 +1,43 @@ + __('translation controls on posts and pages lists', 'sitepress'), + '1.3.3' => __('huge speed improvements and the ability to prevent loading WPML\'s CSS and JS files', 'sitepress'), + '1.3.4' => __('you can configure the position and contents of the posts page in the top navigation', 'sitepress'), + '1.3.5' => __('many bugs fixed and an easy way to show your love for WPML', 'sitepress'), + '1.4.0' => __('simplified operation for basic usage and for getting professional translation', 'sitepress'), + '1.5.0' => __('theme compatibility packages, design for language switcher and language fall-back for posts', 'sitepress'), + '1.5.1' => __('bugs fixed and new support for Headspace2 SEO plugin', 'sitepress'), + '1.6.0' => __('WPML can now translate other plugins', 'sitepress'), + '1.7.0' => __('WPML adapts to any WordPress theme', 'sitepress'), + '1.7.1' => __('Home-page link automatically adjusts per language', 'sitepress'), + '1.7.2' => __('Bug fixes and stability improvements', 'sitepress'), + '1.7.3' => __('Added languages editing and translation for admin-texts','sitepress'), + '1.7.4' => __('Works with WordPress 3','sitepress'), + '1.7.6' => __('Works with WordPress 3','sitepress'), + '1.7.7' => __('Supports custom taxonomies and lots of bug fixes for tags and categories','sitepress'), + '1.7.8' => __('Supports custom post types','sitepress'), + '1.8.0' => __('Supports multilingual menus','sitepress'), + '1.8.1' => __('Multilingual menus bug fixes and improved translation interface','sitepress'), + '2.0.0' => __('New Translator role and full translation management workflow','sitepress') +); + +if(defined('WPML_ST_VERSION')){ + $upgrade_lines['2.6.0'] = sprintf(__('WPML can automatically download translations for WordPress. %sEnable now%s','sitepress'), + '', '' ); + + +} + +$short_v = implode('.', array_slice(explode('.', ICL_SITEPRESS_VERSION), 0, 3)); +if(!isset($upgrade_lines[$short_v])) return; + +?> +
              +
              +

              %s', 'sitepress'), $short_v, $upgrade_lines[$short_v]); ?>

              +

              +  |  + + +

              +
              diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/modules/cache-plugins-integration/cache-plugins-integration.php b/src/wp-content/plugins/sitepress-multilingual-cms/modules/cache-plugins-integration/cache-plugins-integration.php new file mode 100644 index 0000000..70acaf7 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/modules/cache-plugins-integration/cache-plugins-integration.php @@ -0,0 +1,154 @@ + 'WP_CPI_WP_Super_Cache' + ); + private $plugin_cp_class; // plugin compatibility package class name + private $settings; + + + function __construct(){ + + add_action('plugins_loaded', array($this, 'init'), 11); // lower priority - allow packages to load + + } + + function init(){ + global $sitepress_settings; + + $ap = get_option('active_plugins'); + $i = array_intersect($ap, array_keys(self::$wpml_cpi_plugins)); + if(!empty($i)){ + $this->plugin_cp_class = self::$wpml_cpi_plugins[array_pop($i)]; + + if(class_exists($this->plugin_cp_class) && method_exists($this->plugin_cp_class, 'clear_cache')){ + + $this->settings = $sitepress_settings['modules']['caching-plugins-integration']; + $this->validate_settings(); + + add_action('icl_page_overview_top', array($this, 'menu')); + wp_enqueue_script('wpml-cpi-scripts', ICL_PLUGIN_URL . '/modules/cache-plugins-integration/scripts.js', array(), ICL_SITEPRESS_VERSION); + + add_action('icl_ajx_custom_call', array($this, 'ajx_calls'), 1, 2); + + add_action('icl_st_add_string_translation', array($this, 'call_cache_clear')); + add_action('icl_st_unregister_string_multi', array($this, 'call_cache_clear')); + add_action('icl_st_unregister_string', array($this, 'call_cache_clear')); + + $ajx_request_exceptions = array( + 'ajx_health_checked', + 'save_language_pairs', + 'toggle_content_translation', + 'icl_admin_language_options', + 'icl_page_sync_options', + 'validate_language_domain', + 'get_translator_status', + 'get_language_status_text', + 'icl_save_theme_localization_type', + 'dismiss_help', + 'dismiss_page_estimate_hint', + 'dismiss_upgrade_notice', + 'dismiss_upgrade_notice', + 'dismiss_translate_help', + 'setup_got_to_step1', + 'setup_got_to_step2', + 'toggle_show_translations', + 'icl_show_reminders', + 'icl_show_sidebar', + ); + if( !isset($_REQUEST['icl_ajx_action']) || !in_array($_REQUEST['icl_ajx_action'], $ajx_request_exceptions)){ + add_action('icl_save_settings', array($this, 'icl_save_settings_cb'), 10, 1); + } + + // when a post is sent from the translation server + global $HTTP_RAW_POST_DATA; + $hrow = icl_xml2array($HTTP_RAW_POST_DATA); + if(isset($hrow['methodCall']['methodName']['value']) && $hrow['methodCall']['methodName']['value'] == 'icanlocalize.set_translation_status'){ + add_action('save_post', array($this, 'call_cache_clear')); + } + + } + } + + } + + function validate_settings(){ + $save_settings = false; + if(!isset($this->settings['automatic'])){ + $this->settings['automatic'] = 0; + $save_settings = true; + } + if(!isset($this->settings['dirty_cache'])){ + $this->settings['dirty_cache'] = 0; + $save_settings = true; + } + if($save_settings){ + $this->save_settings(); + } + } + + function save_settings(){ + global $sitepress; + $iclsettings['modules']['caching-plugins-integration'] = $this->settings; + remove_action('icl_save_settings', array($this, 'icl_save_settings_cb'), 10, 1); + $sitepress->save_settings($iclsettings); + add_action('icl_save_settings', array($this, 'icl_save_settings_cb'), 10, 1); + } + + function ajx_calls($call, $data){ + if($call == 'wpml_cpi_options'){ + $this->settings['automatic'] = intval($data['automatic']); + if($this->settings['automatic'] == 1){ + $this->settings['dirty_cache'] = 0; + } + $this->save_settings(); + }elseif($call == 'wpml_cpi_clear_cache'){ + $this->call_cache_clear(true); + } + } + + function menu(){ + echo '
              '; + echo '

              ' . sprintf(__('%s integration', 'sitepress'), str_replace('_', ' ', substr($this->plugin_cp_class, 7))) . '

              '; + echo '

              '; + _e('You are using a caching plugin. When you translate strings, the cache needs to be cleared in order for the translation to display.', 'sitepress'); + echo '

              '; + echo '
                '; + if($this->settings['automatic']) { $checked='checked="checked"'; } else { $checked=''; } + echo '
              • '; + if(!$this->settings['automatic']) { $checked='checked="checked"'; } else { $checked=''; } + echo '
              • '; + echo '
              '; + if(!$this->settings['automatic'] && $this->settings['dirty_cache']){ + echo '

              '; + } + echo '
              '; + } + + function icl_save_settings_cb($settings){ + if(!empty($settings)){ + $this->call_cache_clear(); + } + } + + function call_cache_clear($do_clear = false){ + if($this->settings['automatic'] || $do_clear){ + call_user_func(array($this->plugin_cp_class , 'clear_cache')); + $this->settings['dirty_cache'] = 0; + }else{ + $this->settings['dirty_cache'] = 1; + } + $this->save_settings(); + } + } + + $wpml_cpi = new WPMLCpi; + +endif; +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/modules/cache-plugins-integration/scripts.js b/src/wp-content/plugins/sitepress-multilingual-cms/modules/cache-plugins-integration/scripts.js new file mode 100644 index 0000000..da9564d --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/modules/cache-plugins-integration/scripts.js @@ -0,0 +1,25 @@ +jQuery(document).ready(function(){ + jQuery('#wpml_cpi_options :radio').change(function(){ + var thisr = jQuery(this); + jQuery.ajax({ + type: "POST", + url: icl_ajx_url, + data: "icl_ajx_action=wpml_cpi_options&automatic=" + thisr.val() + }); + + }); + + jQuery('#wpml_cpi_clear_cache').click(function(){ + var thisb = jQuery(this); + thisb.attr('style', 'background:url('+icl_ajxloaderimg_src+');background-repeat:no-repeat;').attr('disabled','disabled'); + jQuery.ajax({ + type:'POST', + url:icl_ajx_url, + data:'icl_ajx_action=wpml_cpi_clear_cache', + success: function(){ + thisb.fadeOut(); + } + }); + + }); +}); \ No newline at end of file diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/modules/disqus.php b/src/wp-content/plugins/sitepress-multilingual-cms/modules/disqus.php new file mode 100644 index 0000000..ba2382d --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/modules/disqus.php @@ -0,0 +1,158 @@ + 'ar', + 'bg' => 'bg', + 'bs' => '', // + 'ca' => 'ca', + 'cs' => 'cs', + 'cy' => 'cy', + 'da' => 'da', + 'de' => 'de_formal', + 'el' => 'el', + 'en' => 'en', + 'eo' => 'eo', + 'es' => 'es_ES', + 'et' => 'et', + 'eu' => 'eu', + 'fa' => 'fa', + 'fi' => 'fi', + 'fr' => 'fr', + 'ga' => '', // + 'he' => 'he', + 'hi' => '', + 'hr' => 'hr', + 'hu' => 'hu', + 'hy' => 'hy', + 'id' => 'id', + 'is' => 'id', + 'it' => 'it', + 'ja' => 'ja', + 'ko' => 'ko', + 'ku' => '', + 'la' => 'la', + 'lt' => 'lt', + 'lv' => 'lv', + 'mk' => 'mk', + 'mn' => '', // + 'mo' => '', //ro? + 'mt' => '', // + 'nb' => 'nb', + 'ne' => '', // + 'nl' => 'nl', + 'pa' => '', // + 'pl' => 'pl', + 'pt-br' => 'pt_BR', + 'pt-pt' => 'PT_EU', + 'qu' => '', // + 'ro' => 'ro', + 'ru' => 'ru', + 'sk' => 'sk', + 'sl' => 'sl', + 'so' => '', // + 'sq' => 'sq', + 'sr' => 'sr_CYRL', + 'sv' => 'sv_SE', + 'ta' => '', // + 'th' => 'th', + 'tr' => 'tr', + 'uk' => 'uk', + 'ur' => 'ur', + 'uz' => '', // + 'vi' => 'vi', + 'yi' => '', // + 'zh-hans' => 'zh', + 'zh-hant' => 'zh_AHNT', + 'zu' => 'af' + ); + + $map = apply_filters('wpml_disqus_language_map', $map); + + $lang = isset($map[$sitepress->get_current_language()]) ? $map[$sitepress->get_current_language()] : ''; + + return $lang; + } + +} + +$WPML_Disqus_Integration = new WPML_Disqus_Integration; + +?> diff --git a/src/wp-content/plugins/sitepress-multilingual-cms/modules/icl-translation/icl-reminder-popup.php b/src/wp-content/plugins/sitepress-multilingual-cms/modules/icl-translation/icl-reminder-popup.php new file mode 100644 index 0000000..2764435 --- /dev/null +++ b/src/wp-content/plugins/sitepress-multilingual-cms/modules/icl-translation/icl-reminder-popup.php @@ -0,0 +1,191 @@ +get_active_languages() as $lang){ + $lang_server[$lang['code']] = ICL_Pro_Translation::server_languages_map($lang['english_name']); + } + + + if(!$this->icl_account_configured()){ + $user['create_account'] = 1; + $user['anon'] = 1; + $user['platform_kind'] = 2; + $user['cms_kind'] = 1; + $user['blogid'] = $wpdb->blogid?$wpdb->blogid:1; + $user['url'] = get_option('siteurl'); + $user['title'] = get_option('blogname'); + $user['description'] = @strval($this->settings['icl_site_description']); + $user['is_verified'] = 1; + if(defined('ICL_AFFILIATE_ID') && defined('ICL_AFFILIATE_KEY')){ + $user['affiliate_id'] = ICL_AFFILIATE_ID; + $user['affiliate_key'] = ICL_AFFILIATE_KEY; + } + $user['interview_translators'] = $this->settings['interview_translators']; + $user['project_kind'] = 2; + $user['pickup_type'] = intval($this->settings['translation_pickup_method']); + $notifications = 0; + if ( !empty($this->settings['icl_notify_complete'])){ + $notifications += 1; + } + if ( $this->settings['alert_delay']){ + $notifications += 2; + } + $user['notifications'] = $notifications; + $user['ignore_languages'] = 0; + + $user['from_language1'] = $lang_server[$from_lang]; + $user['to_language1'] = $lang_server[$to_lang]; + + list($site_id, $access_key) = $icl_query->createAccount($user); + if($site_id && $access_key){ + $this->settings['site_id'] = $iclsettings['site_id'] = $site_id; + $this->settings['access_key'] = $iclsettings['access_key'] = $access_key; + $iclsettings['language_pairs'][$from_lang][$to_lang] = 1; + $this->save_settings($iclsettings); + }else{ + $user['pickup_type'] = ICL_PRO_TRANSLATION_PICKUP_POLLING; + list($site_id, $access_key) = $icl_query->createAccount($user); + if($site_id && $access_key){ + $this->settings['site_id'] = $iclsettings['site_id'] = $site_id; + $this->settings['access_key'] = $iclsettings['access_key'] = $access_key; + $iclsettings['language_pairs'][$from_lang][$to_lang] = 1; + $iclsettings['translation_pickup_method'] = ICL_PRO_TRANSLATION_PICKUP_POLLING; + $this->save_settings($iclsettings); + }else{ + printf(__('

              In order to enable ICanLocalize translation, your site needs to be on a public server (not localhost). Please contact us for support.

              Show debug information.

              ', 'sitepress'), + ' target="_blank" href="http://wpml.org/?page_id=5255"', + ' a href="admin.php?page='.ICL_PLUGIN_FOLDER.'/menu/troubleshooting.php&icl_action=icl-connection-test&data='.base64_encode(serialize($user)).'#icl-connection-test"'); + exit; + } + } + }else{ + + $iclsettings['language_pairs'] = $this->settings['language_pairs']; + $iclsettings['language_pairs'][$from_lang][$to_lang] = 1; + + // languages pair clean up + + foreach($iclsettings['language_pairs'][$from_lang] as $tol => $val){ + if(empty($lang_server[$tol])){ + unset($iclsettings['language_pairs'][$from_lang][$tol]); + } + } + $this->save_settings($iclsettings); + + // update account - add language pair + $incr = 0; + foreach($this->settings['language_pairs'] as $k=>$v){ + foreach($v as $k2=>$v2){ + $incr++; + $data['from_language'.$incr] = $lang_server[$k]; + $data['to_language'.$incr] = $lang_server[$k2]; + } + } + + $data['site_id'] = $this->settings['site_id']; + $data['accesskey'] = $this->settings['access_key']; + $data['create_account'] = 0; + + $icl_query->updateAccount($data); + + } + + $icl_query = new ICanLocalizeQuery($this->settings['site_id'], $this->settings['access_key']); + $website_details = $icl_query->get_website_details(); + + if(empty($website_details)){ + echo '

              '; + printf(__('There was a problem connecting to ICanLocalize. Please close this window and try again. If the problem persists please contact us.', 'sitepress'), + ' target="_blank" href="http://wpml.org/?page_id=5255"'); + echo '

              '; + exit; + } + + + + $translation_languages = $website_details['translation_languages']['translation_language']; + if(isset($translation_languages['attr'])){ + $buff = $translation_languages; + unset($translation_languages); + $translation_languages[0] = $buff; + unset($buff); + } + + foreach((array)$translation_languages as $lpair){ + if($lpair['attr']['from_language_name'] == $lang_server[$from_lang] && $lpair['attr']['to_language_name'] == $lang_server[$to_lang]){ + $lang_pair_id = $lpair['attr']['id']; + } + } + + $target = ICL_API_ENDPOINT . '/websites/' . $this->settings['site_id'] . '/website_translation_offers/'.$lang_pair_id.'?accesskey=' . $this->settings['access_key'] . '&compact=1'; + + } + + $support_mode = isset($_GET['support']) ? $_GET['support'] : ''; + + /* + if ($support_mode == '1') { + $iclq = new ICanLocalizeQuery($this->settings['support_site_id'], $this->settings['support_access_key']); + } else { + $iclq = new ICanLocalizeQuery($this->settings['site_id'], $this->settings['access_key']); + } + $session_id = $iclq->get_current_session(true, $support_mode == '1'); + */ + if(isset($this->settings['site_id']) && isset($this->settings['access_key'])){ + $iclq = new ICanLocalizeQuery($this->settings['site_id'], $this->settings['access_key']); + $session_id = $iclq->get_current_session(true, $support_mode == '1'); + }else{ + $session_id = ''; + } + + $admin_lang = $this->get_admin_language(); + + + if (isset($_GET['code'])) { + $add = '&code=' . urlencode($_GET['code']); + }else{ + $add = ''; + } + + if (strpos($target, '?') === false) { + $target .= '?'; + } else { + $target .= '&'; + } + $target .= "session=" . $session_id . "&lc=" . $admin_lang . $add; + + + $on_click = isset($_GET['message_id']) ? 'parent.dismiss_message(' . esc_js($_GET['message_id']) . ', \'' . wp_create_nonce('icl_delete_message_nonce') . '\');' : ''; + + $can_delete = isset($_GET['message_id']) ? $wpdb->get_var($wpd->prepare("SELECT can_delete FROM {$wpdb->prefix}icl_reminders WHERE id=%d", $_GET['message_id'])) == '1' : false; + + $image_path = ICL_PLUGIN_URL . '/res/img/web_logo_small.png'; + echo '
              '; + +?> + + + + +
              +
              + +'; + echo '\n"; + echo ''; + }else{ + _e('No records found', 'wpml-string-translation'); + } +} + +function icl_st_string_in_source($string_id){ + global $wpdb, $sitepress_settings; + // get positions + $files = $wpdb->get_col($wpdb->prepare("SELECT position_in_page + FROM {$wpdb->prefix}icl_string_positions + WHERE string_id = %d AND kind = %d", $string_id, ICL_STRING_TRANSLATION_STRING_TRACKING_TYPE_SOURCE)); + + if(!empty($files)){ + $string = $wpdb->get_row($wpdb->prepare("SELECT context, value FROM {$wpdb->prefix}icl_strings WHERE id=%d",$string_id)); + echo '
              '; + for($i = 0; $i < count($files); $i++){ + $c = $i+1; + $exp = explode('::', $files[$i]); + $line = $exp[1]; + echo ''.$c.'
              '; + } + echo '
              '; + echo '
              '; + for($i = 0; $i < count($files); $i++){ + $exp = explode('::', $files[$i]); + $file = $exp[0]; + if(!file_exists($file) || !is_readable($file)) continue; + $line = $exp[1]; + echo '
              0){ + echo 'style="display:none"'; + }else{ + $first_pos = $line; + } + echo '>'; + if($i == 0){ + echo ''; + } + echo '
              ' . $file . "
              \n"; + echo '
              ';        
              +            $content = file($file);
              +            echo '
                '; + $hl_color = !empty($sitepress_settings['st']['hl_color'])?$sitepress_settings['st']['hl_color']:'#FFFF00'; + foreach($content as $k=>$l){ + if($k == $line-1){ + $hl = ' style="background-color:'.$hl_color.';"'; + }else{ + $hl = ''; + } + echo '
              1. ' . htmlspecialchars($l) . ' 
              2. '; + } + echo '
              '; + echo '
              '; + echo '
              '; + } + echo '
              '; + }else{ + _e('No records found', 'wpml-string-translation'); + } +} + +function _icl_st_hide_random($str){ + $str = preg_replace('#^((.+)( - ))?([a-z0-9]{32})$#', '$2', $str); + return $str; +} + +function _icl_st_get_options_writes($path){ + static $found_writes = array(); + if(is_dir($path)){ + $dh = opendir($path); + while($file = readdir($dh)){ + if($file=="." || $file=="..") continue; + if(is_dir($path . '/' . $file)){ + _icl_st_get_options_writes($path . '/' . $file); + }elseif(preg_match('#(\.php|\.inc)$#i', $file)){ + $content = file_get_contents($path . '/' . $file); + $int = preg_match_all('#(add|update)_option\(([^,]+),([^)]+)\)#im', $content, $matches); + if($int){ + foreach($matches[2] as $m){ + $option_name = trim($m); + if(0 === strpos($option_name, '"') || 0 === strpos($option_name, "'")){ + $option_name = trim($option_name, "\"'"); + }elseif(false === strpos($option_name, '$')){ + if(false !== strpos($option_name, '::')){ + $cexp = explode('::', $option_name); + if (class_exists($cexp[0])){ + if (defined($cexp[0].'::'. $cexp[1])){ + $option_name = constant($cexp[0].'::'. $cexp[1]); + } + } + }else{ + if (defined( $option_name )){ + $option_name = constant($option_name); + } + } + }else{ + $option_name = false; + } + if($option_name){ + $found_writes[] = $option_name; + } + } + } + } + } + } + return $found_writes; +} + +function icl_st_scan_options_strings(){ + global $wpdb; + + $options = array(); + + // scan theme php file for update_option(), add_option() + $options_names = _icl_st_get_options_writes(ICL_STRING_TRANSLATION_TEMPLATE_DIRECTORY); + + + $options_names = array_merge($options_names, _icl_st_get_options_writes(ICL_STRING_TRANSLATION_STYLESHEET_DIRECTORY)); + $options_names = array_unique($options_names); + $options_names = array_map('mysql_real_escape_string', $options_names); + + if(!empty($options_names)){ + $res = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options WHERE option_name IN ('".join("','", $options_names)."')"); + foreach($res as $row){ + $options[$row->option_name] = maybe_unserialize($row->option_value); + // try unserializing twice - just in case (see Arras Theme) + $options[$row->option_name] = maybe_unserialize($options[$row->option_name]); + } + } + + + $_icl_admin_option_names = get_option('_icl_admin_option_names', array()); + + $_icl_admin_option_names = @array_merge_recursive($_icl_admin_option_names, $options_names); + $_icl_admin_option_names = __array_unique_recursive($_icl_admin_option_names); + + update_option('_icl_admin_option_names', $_icl_admin_option_names); + + return $options; +} + +function icl_st_render_option_writes($option_name, $option_value, $option_key=''){ + $has_translations = ''; + if(is_array($option_value) || is_object($option_value)){ + echo '

              - ' . $option_name . '

              '; + echo '
                '; + foreach($option_value as $key=>$value){ + echo '
              • '; + icl_st_render_option_writes($key, $value, $option_key . '[' . $option_name . ']'); + echo '
              • '; + } + echo '
              '; + }elseif(is_string($option_value) || is_numeric($option_value)){ + if(icl_st_is_registered_string('admin_texts_theme_' . get_option('template'), $option_key . $option_name)){ + $checked = ' checked="checked"'; + if(icl_st_string_has_translations('admin_texts_theme_' . get_option('template'), $option_key . $option_name)){ + $has_translations = ' class="icl_st_has_translations"'; + }else{ + $has_translations = ''; + } + }else{ + $checked = ''; + } + if(is_numeric($option_value)){ + $class = 'icl_st_numeric'; + }else{ + $class = 'icl_st_string'; + } + + global $iclTranslationManagement; + + $int = preg_match_all('#\[([^\]]+)\]#', $option_key.'['.$option_name.']', $matches); + $_v = $iclTranslationManagement->admin_texts_to_translate; + if($int){ + foreach($matches[1] as $m){ + if(isset($_v[$m])){ + $_v = $_v[$m]; + }else{ + $_v = 0; + break; + } + } + } + + if($_v){ + $disabled = ' disabled="disabled"'; + }else{ + $disabled = ''; + } + echo '
              '; + echo ''; + echo ''; + echo ''; + echo ''; + //echo '
              '; + echo '

              '; + } +} + +function icl_register_admin_options($array, $key=""){ + + foreach($array as $k=>$v){ + if(is_array($v)){ + icl_register_admin_options($v, $key . '['.$k.']'); + }else{ + if($v === ''){ + icl_unregister_string('admin_texts_theme_' . get_option('template'), $key . $k); + }else{ + icl_register_string('admin_texts_theme_' . get_option('template'), $key . $k, $v); + + $int = preg_match_all('#\[([^\]]+)\]#', $key, $matches); + $vals = array(); + if(count($matches[1]) > 0){ + + $vals[] = $k; + for($i = count($matches[1]) - 1; $i >= 0 ; $i--){ + $tmp = $vals; + unset($vals); + $vals[$matches[1][$i]] = $tmp; + } + + }else{ + + $vals[0] = $k; + } + + + $_icl_admin_option_names = get_option('_icl_admin_option_names'); + + + $_icl_admin_option_names['theme'][get_option('template')] = + array_merge_recursive((array)$_icl_admin_option_names['theme'][get_option('template')], $vals); + + $_icl_admin_option_names['theme'][get_option('template')] = __array_unique_recursive($_icl_admin_option_names['theme'][get_option('template')]); + + update_option('_icl_admin_option_names', $_icl_admin_option_names); + + } + } + } + + +} + +function __array_unique_recursive($array){ + $scalars = array(); + foreach($array as $key=>$value){ + if(is_scalar($value)){ + if(isset($scalars[$value])){ + unset($array[$key]); + }else{ + $scalars[$value] = true; + } + }elseif(is_array($value)){ + $array[$key] = __array_unique_recursive($value); + } + } + return $array; +} + +function _icl_st_filter_empty_options_out($array){ + $empty_found = false; + foreach($array as $k=>$v){ + if(is_array($v) && !empty($v)){ + list($array[$k], $empty_found) = _icl_st_filter_empty_options_out($v); + }else{ + if(empty($v)){ + unset($array[$k]); + $empty_found = true; + } + } + } + return array($array, $empty_found); +} + +function wpml_register_admin_strings($serialized_array){ + try{ + icl_register_admin_options(unserialize($serialized_array)); + }catch(Exception $e){ + trigger_error($e->getMessage(), E_USER_WARNING); + } +} + +add_action('plugins_loaded', 'icl_st_set_admin_options_filters', 10); +function icl_st_set_admin_options_filters(){ + static $option_names; + if(empty($option_names)) $option_names = get_option('_icl_admin_option_names'); + + if(!empty($option_names['theme']) && !empty($option_names['theme'][basename(ICL_STRING_TRANSLATION_TEMPLATE_DIRECTORY)])){ + foreach($option_names['theme'][basename(ICL_STRING_TRANSLATION_TEMPLATE_DIRECTORY)] as $option_key=>$option){ + if(is_array($option) || is_object($option)){ + add_filter('option_'.$option_key, 'icl_st_translate_admin_string'); + }else{ + add_filter('option_'.$option, 'icl_st_translate_admin_string'); + } + } + if(ICL_STRING_TRANSLATION_TEMPLATE_DIRECTORY != ICL_STRING_TRANSLATION_STYLESHEET_DIRECTORY && !empty($option_names['theme'][basename(ICL_STRING_TRANSLATION_STYLESHEET_DIRECTORY)])){ + foreach((array)$option_names['theme'][basename(ICL_STRING_TRANSLATION_STYLESHEET_DIRECTORY)] as $option_key=>$option){ + if(is_array($option) || is_object($option)){ + add_filter('option_'.$option_key, 'icl_st_translate_admin_string'); + }else{ + add_filter('option_'.$option, 'icl_st_translate_admin_string'); + } + } + } + } + if(!empty($option_names['plugin'])){ + foreach($option_names['plugin'] as $plugin => $options){ + foreach((array)$options as $option_key => $option){ + if(is_array($option) || is_object($option)){ + add_filter('option_'.$option_key, 'icl_st_translate_admin_string'); + }else{ + add_filter('option_'.$option, 'icl_st_translate_admin_string'); + } + } + } + } +} + +function icl_st_translate_admin_string($option_value, $key="", $name="", $rec_level = 0){ + + // determine option name + if(!$name){ + $ob = debug_backtrace(); + if(is_scalar($ob[2+$rec_level]['args'][0])){ + $name = preg_replace('@^option_@', '',$ob[2+$rec_level]['args'][0]); + } + + } + + // cache - phase 1 - check/get + static $__icl_st_cache; + if($rec_level == 0){ + if(isset($__icl_st_cache[$name])) { + //echo "FROM CACHE $name
              "; + return $__icl_st_cache[$name]; + } + + } + + // case of double-serialized options (See Arras theme) + $serialized = false; + if(is_serialized( $option_value )){ + $option_value = @unserialize($option_value); + $serialized = true; + } + + //if(is_object($option_value)){ + //$option_value = (array)$option_value; + //} + + if(is_array($option_value) || is_object($option_value)){ + foreach($option_value as $k=>$value){ + + $val = icl_st_translate_admin_string($value, $key . '[' . $name . ']' , $k, $rec_level+1); + + if(is_object($option_value)){ + $option_value->$k = $val; + }else{ + $option_value[$k] = $val; + } + } + + }else{ + static $option_names; + if(empty($option_names)) $option_names = get_option('_icl_admin_option_names'); + // determine theme/plugin name + + if(!empty($option_names['theme']) && !empty($option_names['theme'][basename(ICL_STRING_TRANSLATION_TEMPLATE_DIRECTORY)])){ + if(isset($option_names['theme'][basename(ICL_STRING_TRANSLATION_TEMPLATE_DIRECTORY)])) + foreach((array)$option_names['theme'][basename(ICL_STRING_TRANSLATION_TEMPLATE_DIRECTORY)] as $ops=>$val){ + if(!empty($key)){ + $int = preg_match_all('#\[([^\]]+)\]#', $key, $matches); + if($int) $opname = $matches[1][0]; + }else{ + $opname = $name; + } + + if($ops == $opname){ + $key_suff = 'theme_' . basename(ICL_STRING_TRANSLATION_TEMPLATE_DIRECTORY); + break; + } + } + + if(ICL_STRING_TRANSLATION_TEMPLATE_DIRECTORY != ICL_STRING_TRANSLATION_STYLESHEET_DIRECTORY){ + if(isset($option_names['theme'][basename(ICL_STRING_TRANSLATION_STYLESHEET_DIRECTORY)])) + foreach((array)$option_names['theme'][basename(ICL_STRING_TRANSLATION_STYLESHEET_DIRECTORY)] as $ops=>$val){ + + if(!empty($key)){ + $int = preg_match_all('#\[([^\]]+)\]#', $key, $matches); + if($int) $opname = $matches[1][0]; + }else{ + $opname = $name; + } + + if($ops == $opname){ + $key_suff = 'theme_' . ICL_STRING_TRANSLATION_STYLESHEET_DIRECTORY; + break; + } + } + } + } + + if(!empty($option_names['plugin'])){ + foreach((array)$option_names['plugin'] as $plugin => $options){ + foreach($options as $kops=>$ops){ + if(is_array($ops)){ + $arrkey = explode('][', trim($key, '[]')); + $_val = $options; + for($i=0; $iimport_from_file( $mo_file ); + foreach($mo->entries as $str=>$v){ + $str = str_replace("\n",'\n', $str); + $translations[$str] = $v->translations[0]; + } + return $translations; +} + +// fix links in existing strings according to the new translation added +function icl_st_fix_links_in_strings($post_id){ + static $runnonce = false; + if($runnonce){ + return; + } + $runonce = true; + + if(isset($_POST['autosave']) && $_POST['autosave']) return; + + if(isset($_POST['post_ID'])){ + $post_id = $_POST['post_ID']; + } + + global $wpdb, $sitepress; + $language = $wpdb->get_var($wpdb->prepare("SELECT language_code FROM {$wpdb->prefix}icl_translations WHERE element_type='post' AND element_id=%d", $post_id)); + if($language){ + if($sitepress->get_default_language()==$language){ + $strings = $wpdb->get_col($wpdb->prepare("SELECT id FROM {$wpdb->prefix}icl_strings WHERE language=%s",$language)); + }else{ + $strings = $wpdb->get_col($wpdb->prepare("SELECT id FROM {$wpdb->prefix}icl_string_translations WHERE language=%s",$language)); + } + + foreach($strings as $string_id){ + _icl_content_fix_links_to_translated_content($string_id, $language, 'string'); + } + + } +} + +function icl_translation_send_strings($string_ids, $target_languages) { + global $WPML_String_Translation; + + $errors = 0; + + + // send to each language + foreach($target_languages as $target=>$service){ + if($service == 'icanlocalize'){ + if( !_icl_translation_send_strings_icanlocalize($string_ids, $target, $service) ) $errors++; + }elseif($service == 'local'){ + if( ! _icl_translation_send_strings_local($string_ids, $target, $service) ) $errors++; + } + } + + if($errors == count($target_languages)){ + $WPML_String_Translation->add_message(__('No string was sent to translation.','wpml-string-translation'), 'error'); + }elseif($errors > 0){ + $WPML_String_Translation->add_message(__('Some strings were not sent to translation.','wpml-string-translation'), 'error'); + }else{ + if(count($string_ids) > 1){ + $WPML_String_Translation->add_message(__('All strings were sent to translation.','wpml-string-translation')); + }else{ + $WPML_String_Translation->add_message(__('The string was sent to translation.','wpml-string-translation')); + } + } +} + +function _icl_translation_send_strings_local($string_ids, $target) { + global $wpdb, $sitepress_settings; + static $site_translators; + $site_translators = TranslationManagement::get_blog_translators(); + + $mkey = $wpdb->prefix . 'strings_notification'; + $lkey = $wpdb->prefix . 'language_pairs'; + $slang =& $sitepress_settings['st']['strings_language']; + + foreach($string_ids as $string_id) { + $added = icl_add_string_translation($string_id, $target, NULL , ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR); + + if($added) + foreach($site_translators as $key=>$st){ + $ulangs = isset($st->$lkey) ? $st->$lkey : false; + if(!empty($ulangs) && !empty($ulangs[$slang][$target])){ + + $enot = isset($st->$mkey) ? $st->$mkey : false; + if(empty($enot[$sitepress_settings['st']['strings_language']][$target])){ + _icl_st_translator_notification($st, $sitepress_settings['st']['strings_language'], $target); + $enot[$sitepress_settings['st']['strings_language']][$target] = 1; + $site_translators[$key]->$mkey = $enot; + update_option($wpdb->prefix . 'icl_translators_cached', $site_translators); + //printf("Notify %d for %s -> %s
              ", $st->ID, $sitepress_settings['st']['strings_language'], $target); + }else{ + //printf("Already notified %d for %s -> %s
              ", $st->ID, $sitepress_settings['st']['strings_language'], $target); + } + + } + + } + } + + return 1; +} + +function _icl_st_translator_notification($user, $source, $target){ + global $wpdb, $sitepress; + + $_ldetails = $sitepress->get_language_details($source); + $source_en = $_ldetails['english_name']; + $_ldetails = $sitepress->get_language_details($target); + $target_en = $_ldetails['english_name']; + + $message = "You have been assigned to new translation job from %s to %s. + +Start editing: %s + +You can view your other translation jobs here: %s + + This message was automatically sent by Translation Management running on WPML. To stop receiving these notifications contact the system administrator at %s. + + This email is not monitored for replies. + + - The folks at ICanLocalize + 101 Convention Center Dr., Las Vegas, Nevada, 89109, USA +"; + + + $to = $user->user_email; + $subject = sprintf("You have been assigned to new translation job on %s.", get_bloginfo('name')); + $body = sprintf($message, + $source_en, $target_en, admin_url('admin.php?page='.WPML_ST_FOLDER.'/menu/string-translation.php'), + admin_url('admin.php?page='.WPML_TM_FOLDER.'/menu/translations-queue.php'), home_url()); + + wp_mail($to, $subject, $body); + + $meta = get_user_meta($user->ID, $wpdb->prefix . 'strings_notification', 1); + $meta[$source][$target] = 1; + update_user_meta($user->ID, $wpdb->prefix . 'strings_notification', $meta); +} + +function icl_st_reset_current_trasnslator_notifications(){ + global $sitepress, $wpdb; + $current_user = $sitepress->get_current_user(); + $mkey = $wpdb->prefix . 'strings_notification'; + if(!empty($current_user->$mkey)){ + update_user_meta($current_user->ID, $mkey, array()); + } +} + +function _icl_translation_send_strings_icanlocalize($string_ids, $target) { + global $wpdb, $sitepress, $sitepress_settings; + + if(!$sitepress_settings['st']['strings_language']) + $sitepress_settings['st']['strings_language'] = $sitepress->get_default_language(); + + $target_details = $sitepress->get_language_details($target); + + // get all the untranslated strings + $untranslated = array(); + foreach($string_ids as $st_id) { + $status = $wpdb->get_var($wpdb->prepare("SELECT status FROM {$wpdb->prefix}icl_string_translations WHERE string_id=%d and language=%s", $st_id, $target)); + if ($status != ICL_STRING_TRANSLATION_COMPLETE) { + $untranslated[] = $st_id; + } + } + + if (sizeof($untranslated) > 0) { + // Something to translate. + $target_for_server = array(ICL_Pro_Translation::server_languages_map($target_details['english_name'])); //filter some language names to match the names on the server + $data = array( + 'url'=>'', + 'target_languages' => $target_for_server, + ); + $string_values = array(); + foreach($untranslated as $st_id) { + + $string = $wpdb->get_row($wpdb->prepare("SELECT context, name, value FROM {$wpdb->prefix}icl_strings WHERE id=%d", $st_id)); + $string_values[$st_id] = $string->value; + $data['contents']['string-'.$st_id.'-context'] = array( + 'translate'=>0, + 'data'=>base64_encode(htmlspecialchars($string->context)), + 'format'=>'base64', + ); + $data['contents']['string-'.$st_id.'-name'] = array( + 'translate'=>0, + 'data'=>base64_encode(htmlspecialchars($string->name)), + 'format'=>'base64', + ); + $data['contents']['string-'.$st_id.'-value'] = array( + 'translate'=>1, + 'data'=>base64_encode(htmlspecialchars($string->value)), + 'format'=>'base64', + ); + + } + + $iclq = new ICanLocalizeQuery($sitepress_settings['site_id'], $sitepress_settings['access_key']); + + $orig_lang = $sitepress->get_language_details($sitepress_settings['st']['strings_language']); + $orig_lang_for_server = ICL_Pro_Translation::server_languages_map($orig_lang['english_name']); + + $timestamp = date('Y-m-d H:i:s'); + + $xml = $iclq->build_cms_request_xml($data, $orig_lang_for_server); + $args = array( + 'xml' => $xml, + 'title' => "String translations", + 'to_languages' => $target_for_server, + 'orig_language' => $orig_lang_for_server + + ); + + $res = $iclq->send_request($args); + + if($res > 0){ + foreach($string_values as $st_id => $value){ + $wpdb->insert($wpdb->prefix.'icl_string_status', + array('rid'=>$res, 'string_translation_id'=>$st_id, 'timestamp'=>$timestamp, 'md5'=>md5($value))); //insert rid + } + $wpdb->insert($wpdb->prefix.'icl_core_status', array('rid'=>$res, + 'origin'=>$orig_lang['code'], + 'target'=>$target, + 'status'=>CMS_REQUEST_WAITING_FOR_PROJECT_CREATION)); + return $res; + }else{ + return 0; + + } + } +} + +function icl_decode_translation_status_id($status){ + switch($status){ + case CMS_TARGET_LANGUAGE_CREATED: $st = __('Waiting for translator','wpml-string-translation');break; + case CMS_TARGET_LANGUAGE_ASSIGNED: $st = __('In progress','wpml-string-translation');break; + case CMS_TARGET_LANGUAGE_TRANSLATED: $st = __('Translation received','wpml-string-translation');break; + case CMS_TARGET_LANGUAGE_DONE: $st = __('Translation complete','wpml-string-translation');break; + case CMS_REQUEST_FAILED: $st = __('Request failed','wpml-string-translation');break; + default: $st = __('Not translated','wpml-string-translation'); + } + + return $st; +} + +function icl_translation_get_string_translation_status($string_id) { + global $wpdb; + $status = $wpdb->get_var($wpdb->prepare(" + SELECT + MIN(cs.status) + FROM + {$wpdb->prefix}icl_core_status cs + JOIN + {$wpdb->prefix}icl_string_status ss + ON + ss.rid = cs.rid + WHERE + ss.string_translation_id=%d + ", $string_id + )); + + if ($status === null){ + return ""; + } + + $status = icl_decode_translation_status_id($status); + + return $status; + +} + +function icl_translation_send_untranslated_strings($target_languages) { + global $wpdb; + $untranslated = $wpdb->get_col($wpdb->prepare("SELECT id FROM {$wpdb->prefix}icl_strings WHERE status <> %d", ICL_STRING_TRANSLATION_COMPLETE)); + + icl_translation_send_strings($untranslated, $target_languages); + +} + +function icl_is_string_translation($translation) { + // determine if the $translation data is for string translation. + + foreach($translation as $key => $value) { + if($key == 'body' or $key == 'title') { + return false; + } + if (preg_match("/string-.*?-value/", $key)){ + return true; + } + } + + // if we get here assume it's not a string. + return false; + +} + +function icl_translation_add_string_translation($rid, $translation, $lang_code){ + global $wpdb, $sitepress_settings, $sitepress; + foreach($translation as $key => $value) { + if (preg_match("/string-(.*?)-value/", $key, $match)){ + $string_id = $match[1]; + + $md5_when_sent = $wpdb->get_var($wpdb->prepare("SELECT md5 FROM {$wpdb->prefix}icl_string_status + WHERE string_translation_id=%d AND rid=%d", $string_id, $rid)); + $current_string_value = $wpdb->get_var($wpdb->prepare("SELECT value FROM {$wpdb->prefix}icl_strings WHERE id=%d", $string_id)); + if ($md5_when_sent == md5($current_string_value)) { + $status = ICL_STRING_TRANSLATION_COMPLETE; + } else { + $status = ICL_STRING_TRANSLATION_NEEDS_UPDATE; + } + $value = str_replace ( '�A;', "\n", $value ); + icl_add_string_translation($string_id, $lang_code, html_entity_decode($value), $status, 0); + } + } + + // update translation status + $wpdb->update($wpdb->prefix.'icl_core_status', array('status'=>CMS_TARGET_LANGUAGE_DONE), array('rid'=>$rid, 'target'=>$lang_code)); + + return true; +} + +function icl_st_get_pending_string_translations_stats(){ + global $wpdb, $sitepress, $sitepress_settings; + + $current_user = $sitepress->get_current_user(); + + $user_lang_pairs = get_user_meta($current_user->ID, $wpdb->prefix.'language_pairs', true); + + $stats = array(); + + if(!empty($user_lang_pairs[$sitepress_settings['st']['strings_language']])){ + $results = $wpdb->get_results($wpdb->prepare(" + SELECT COUNT(id) AS c, language + FROM {$wpdb->prefix}icl_string_translations + WHERE status=%d AND language IN ('".join("','", array_keys($user_lang_pairs[$sitepress_settings['st']['strings_language']]))."') + AND (translator_id IS NULL or translator_id > 0) + GROUP BY language + ORDER BY c DESC + ", + ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR + )); + + foreach($results as $r){ + $_stats[$r->language] = $r->c; + } + + foreach($user_lang_pairs[$sitepress_settings['st']['strings_language']] as $lang=>$one){ + $stats[$lang] = isset($_stats[$lang]) ? $_stats[$lang] : 0; + } + + } + + + return $stats; +} + +function icl_st_is_translator(){ + return current_user_can('translate') && !current_user_can('manage_options'); +} + +function icl_st_debug($str){ + trigger_error($str, E_USER_WARNING); +} diff --git a/src/wp-content/plugins/wpml-string-translation/inc/lang-map.csv b/src/wp-content/plugins/wpml-string-translation/inc/lang-map.csv new file mode 100644 index 0000000..6d64d56 --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/inc/lang-map.csv @@ -0,0 +1,105 @@ +an,an +ar,ar +az,az +az_TR,az-tr +bg_BG,bg +bn_BD,bn +bs_BA,bs +ca,ca +ckb,ckb +co,co +cs_CZ,cs +cy,cy +da_DK,da +de_DE,de +dv,dv +el,el +en_CA,en-ca +en_GB,en-gb +eo,eo +es_CL,es-cl +es_ES,es +es_PE,es-pe +es_VE,es-ve +et,et +eu,eu +fa_AF,fa-af +fa_IR,fa +fi,fi +fo,fo +fr_FR,fr +fy,fy +ga,ga +gd,gd +gl_ES,gl +gu,gu +haw_U,haw +he_IL,he +hi_IN,hi +hr,hr +hu_HU,hu +hy,hy +id_ID,id +is_IS,is +it_IT,it +ja,ja +jv_ID,jv +ka_GE,ka +kea,kea +kk,kk +kn,kn +ko_KR,ko +ku,ku +ky_KY,ky +la,la +li,li +lo,lo +lt,lt +lv,lv +me_ME,me +mg_MG,mg +mk_MK,mk +ml_IN,ml +mn,mn +mr,mr +ms_MY,ms +my_MM,mya +nb_NO,nb +ne_NP,ne +nl,nl +nl_BE,nl +nl_NL,nl +nn_NO,nn +os,os +pa_IN,pa +pl_PL,pl +pt_BR,pt-br +pt_PT,pt +ro_RO,ro +ru_RU,ru +ru_UA,ru-ua +sa_IN,sa-in +si_LK,si +sk_SK,sk +sl_SI,sl +so_SO,so +sq,sq +sr_RS,sr +srd,srd +su_ID,su +sv_SE,sv +sw,sw +ta_IN,ta +ta_LK,ta-lk +te,te +tg,tg +th,th +tl,tl +tr,tr +ug_CN,ug +uk,uk +ur,ur +uz_UZ,uz +vi,vi +zh_CN,zh-cn +zh_TW,zh-tw \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-string-translation/inc/slug-translation.php b/src/wp-content/plugins/wpml-string-translation/inc/slug-translation.php new file mode 100644 index 0000000..837b4cd --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/inc/slug-translation.php @@ -0,0 +1,282 @@ +get_var($wpdb->prepare("SELECT id FROM {$wpdb->prefix}icl_strings WHERE name=%s AND value = %s", 'URL slug: ' . $text, $text)); + if(empty($string_id)){ + icl_register_string('URL slugs - ' . $domain, 'URL slug: ' . $text, $text, false); + }else{ + $tr = $wpdb->get_var($wpdb->prepare("SELECT value FROM {$wpdb->prefix}icl_string_translations WHERE string_id=%d AND language = %s", $string_id, $sitepress->get_current_language())); + if(!empty($tr)){ + $translation = $tr; + } + } + } + return $translation; + } + */ + + static function rewrite_rules_filter($value){ + global $sitepress, $sitepress_settings, $wpdb; + + $strings_language = $sitepress_settings['st']['strings_language']; + + if($sitepress->get_current_language() != $strings_language){ + + $queryable_post_types = get_post_types( array('publicly_queryable' => true) ); + + foreach($queryable_post_types as $type){ + + if(!$sitepress->is_translated_post_type($type)) continue; + + $post_type_obj = get_post_type_object($type); + $slug = isset($post_type_obj->rewrite['slug']) ? trim($post_type_obj->rewrite['slug'],'/') : false; + + $slug_translation = $wpdb->get_var($wpdb->prepare(" + SELECT t.value + FROM {$wpdb->prefix}icl_string_translations t + JOIN {$wpdb->prefix}icl_strings s ON t.string_id = s.id + WHERE t.language = %s AND s.name = %s AND s.value = %s + ", $sitepress->get_current_language(), 'URL slug: ' . $slug, $slug)); + + $using_tags = false; + + /* case of slug using %tags% - PART 1 of 2 - START */ + if(preg_match('#%([^/]+)%#', $slug)){ + $slug = preg_replace('#%[^/]+%#', '.+?', $slug); + $using_tags = true; + } + if(preg_match('#%([^/]+)%#', $slug_translation)){ + $slug_translation = preg_replace('#%[^/]+%#', '.+?', $slug_translation); + $using_tags = true; + } + /* case of slug using %tags% - PART 1 of 2 - END */ + + $buff_value = array(); + foreach((array)$value as $k=>$v){ + + if($slug && $slug != $slug_translation){ + if(preg_match('#^[^/]*/?' . preg_quote($slug) . '/#', $k) && $slug != $slug_translation){ + $k = preg_replace('#^([^/]*)(/?)' . preg_quote($slug) . '/#', '$1$2' . $slug_translation . '/' , $k); + } + + } + $buff_value[$k] = $v; + } + + $value = $buff_value; + unset($buff_value); + + /* case of slug using %tags% - PART 2 of 2 - START */ + if($using_tags){ + if(preg_match('#\.\+\?#', $slug)){ + $slug = preg_replace('#\.\+\?#', '(.+?)', $slug); + } + if(preg_match('#\.\+\?#', $slug_translation)){ + $slug_translation = preg_replace('#\.\+\?#', '(.+?)', $slug_translation); + } + $buff_value = array(); + foreach($value as $k=>$v){ + + if($slug && $slug != $slug_translation){ + if(preg_match('#^[^/]*/?' . preg_quote($slug) . '/#', $k) && $slug != $slug_translation){ + $k = preg_replace('#^([^/]*)(/?)' . preg_quote($slug) . '/#', '$1$2' . $slug_translation . '/' , $k); + } + + } + $buff_value[$k] = $v; + } + + $value = $buff_value; + unset($buff_value); + } + /* case of slug using %tags% - PART 2 of 2 - END */ + + } + } + + return $value; + } + + static function get_translated_slug($slug, $language){ + global $wpdb, $sitepress_settings, $sitepress; + + static $cache = array(); + + if(empty($cache[$slug][$language.$sitepress->get_current_language()])){ + + if($sitepress_settings['st']['strings_language'] != $sitepress->get_current_language()){ + $slug = $wpdb->get_var(" + SELECT s.value + FROM {$wpdb->prefix}icl_strings s + JOIN {$wpdb->prefix}icl_string_translations t ON t.string_id = s.id + WHERE t.value='". esc_sql($slug)."' + AND t.language = '" . esc_sql($sitepress->get_current_language()) . "' + AND s.name LIKE 'URL slug:%' + AND s.language = '" . esc_sql($sitepress_settings['st']['strings_language']) . "' + "); + } + + if($language != $sitepress_settings['st']['strings_language']){ + $slug = $wpdb->get_var(" + SELECT t.value + FROM {$wpdb->prefix}icl_strings s + JOIN {$wpdb->prefix}icl_string_translations t ON t.string_id = s.id + WHERE s.value='". esc_sql($slug)."' + AND t.language = '" . esc_sql($language) . "' + AND s.name LIKE 'URL slug:%' + AND s.language = '" . esc_sql($sitepress_settings['st']['strings_language']) . "' + "); + } + + $cache[$slug][$language.$sitepress->get_current_language()] = $slug; + + } + + return $slug; + + } + + static function _icl_before_archive_url($post_type, $language){ + global $sitepress_settings, $sitepress; + if(!empty($sitepress_settings['posts_slug_translation']['types'][$post_type])){ + global $wp_post_types; + if($translated_slug = self::get_translated_slug($wp_post_types[$post_type]->rewrite['slug'], $language)){ + $wp_post_types[$post_type]->rewrite['slug_original'] = $wp_post_types[$post_type]->rewrite['slug']; + $wp_post_types[$post_type]->rewrite['slug'] = $translated_slug; + } + } + } + + static function _icl_after_archive_url($post_type, $language){ + // restore default lang slug + global $sitepress_settings, $sitepress; + if(!empty($sitepress_settings['posts_slug_translation']['types'][$post_type])){ + global $wp_post_types; + if(!empty($wp_post_types[$post_type]->rewrite['slug_original'])){ + $wp_post_types[$post_type]->rewrite['slug'] = $wp_post_types[$post_type]->rewrite['slug_original']; + unset($wp_post_types[$post_type]->rewrite['slug_original']); + } + } + } + + static function post_type_link_filter($post_link, $post, $leavename, $sample){ + global $wpdb, $sitepress, $sitepress_settings; + + static $no_recursion_flag; + + if(!empty($no_recursion_flag)) return $post_link; + + if(!$sitepress->is_translated_post_type($post->post_type)){ + return $post_link; + } + + // get element language + $ld = $sitepress->get_element_language_details($post->ID, 'post_' . $post->post_type); + + if(empty($ld)){ + return $post_link; + } + + static $cache; + + if(!isset($cache[$post->ID][$leavename . '#' . $sample])){ + + $strings_language = $sitepress_settings['st']['strings_language']; + + + // fix permalink when object is not in the current language + if($ld->language_code != $strings_language){ + + $post_type = get_post_type_object($post->post_type); + $slug_this = trim($post_type->rewrite['slug'], '/'); + + $slug_real = $wpdb->get_var(" + SELECT t.value + FROM {$wpdb->prefix}icl_strings s + JOIN {$wpdb->prefix}icl_string_translations t ON t.string_id = s.id + WHERE s.value='". esc_sql($slug_this)."' + AND s.language = '" . esc_sql($strings_language) . "' + AND s.name LIKE 'URL slug:%' + AND t.language = '" . esc_sql($ld->language_code) . "' + "); + + if(empty($slug_real)) return $post_link; + + + global $wp_rewrite; + + if(isset($wp_rewrite->extra_permastructs[$post->post_type])){ + $struct_original = $wp_rewrite->extra_permastructs[$post->post_type]['struct']; + + $lslash = false !== strpos($struct_original, '/' . $slug_this) ? '/' : ''; + //$wp_rewrite->extra_permastructs[$post->post_type]['struct'] = str_replace('/' . $slug_this, '/' . $slug_real, $struct_original); + $wp_rewrite->extra_permastructs[$post->post_type]['struct'] = preg_replace('@'. $lslash . $slug_this . '/@', $lslash.$slug_real.'/' , $struct_original); + $no_recursion_flag = true; + $post_link = get_post_permalink($post->ID, $leavename, $sample); + $no_recursion_flag = false; + $wp_rewrite->extra_permastructs[$post->post_type]['struct'] = $struct_original; + + }else{ + + // case of applying the page_link filter on default links + $post_link = preg_replace('@([\?&])'.$slug_this.'=@', '$1' . $slug_real . '=', $post_link); + + } + + $cache[$post->ID][$leavename . '#' . $sample] = $post_link; + + + } + + }else{ + + $post_link = $cache[$post->ID][$leavename . '#' . $sample]; + + } + + return $post_link; + } + + static function gui_save_options($action , $data){ + + switch($action){ + case 'icl_slug_translation': + global $sitepress; + $iclsettings['posts_slug_translation']['on'] = intval(!empty($_POST['icl_slug_translation_on'])); + $sitepress->save_settings($iclsettings); + echo '1|' . $iclsettings['posts_slug_translation']['on']; + break; + } + + } + +} \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-string-translation/inc/widget-text.php b/src/wp-content/plugins/wpml-string-translation/inc/widget-text.php new file mode 100644 index 0000000..fd3f1c4 --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/inc/widget-text.php @@ -0,0 +1,200 @@ +name == 'Text') { + // Convert if necessary + if ($widget->updated && isset($_POST['icl_convert'])) { + if (icl_widget_text_convert_to_multilingual($widget, $instance) === TRUE) { + _e('This widget is converted to multilingual', 'sitepress'); + } + return ''; + } + // Display form + if (!icl_widget_text_is_converted($widget)) { + icl_widget_text_language_selectbox(); + echo ''; + } else { + _e('This widget is converted to multilingual', 'sitepress'); + } + } +} + +function icl_widget_text_language_selectbox($language = 'multilingual', + $field_name = 'icl_language') { + global $sitepress; + $languages = $sitepress->get_active_languages(); + echo ''; +} + +function icl_widget_text_is_converted($widget) { + $widgets = get_option('widget_text_icl', array()); + foreach ($widgets as $icl_widget) { + if (isset($icl_widget['icl_converted_from']) + && $icl_widget['icl_converted_from'] == $widget->id) { + return TRUE; + } + } + return FALSE; +} + +function icl_widget_text_convert_to_multilingual($text_widget, $instance) { + global $wp_widget_factory; + $icl_widget = $wp_widget_factory->widgets['WP_Widget_Text_Icl']; + $number = $icl_widget->number + 1; + $icl_widget->_set($number); + $icl_widget->_register_one($number); + + // Get in which sidebar + $sidebars = wp_get_sidebars_widgets(); + if (!isset($_POST['sidebar']) || !isset($sidebars[$_POST['sidebar']])) { + _e('Converting to multilingual widget failed. No sidebar specified.', 'sitepress'); + return FALSE; + } + + // Add new instance + $icl_widgets_text = get_option('widget_text_icl', array()); + if (isset($icl_widgets_text[$icl_widget->number])) { + _e('Widget is already converted', 'sitepress'); + return FALSE; + } + unset($icl_widgets_text['_multiwidget']); + $_POST['icl_language'] = isset($_POST['icl_language']) ? $_POST['icl_language'] : 'multilingual'; + $icl_widgets_text[$icl_widget->number] = array( + 'icl_language' => $_POST['icl_language'], + 'icl_converted_from' => $text_widget->id, + 'title' => $instance['title'], + 'text' => $instance['text'], + 'filter' => isset($new_instance['filter']), + ); + $icl_widgets_text['_multiwidget'] = 1; + update_option('widget_text_icl', $icl_widgets_text); + + // Set in sidebar + $sidebars[$_POST['sidebar']][] = $icl_widget->id; + wp_set_sidebars_widgets($sidebars); + + // Register strings + if ($_POST['icl_language'] == 'multilingual') { + icl_register_string('Widgets', 'widget title', $instance['title']); + icl_register_string('Widgets', 'widget body - ' . $icl_widget->id, $instance['text']); + } + + // Refresh + echo ' + +'; + return TRUE; +} + +class WP_Widget_Text_Icl extends WP_Widget +{ + + function WP_Widget_Text_Icl() { + $widget_ops = array('classname' => 'widget_text_icl', 'description' => __('Multilingual arbitrary text or HTML', 'sitepress')); + $control_ops = array('width' => 400, 'height' => 350); + $this->WP_Widget('text_icl', __('Multilingual Text', 'sitepress'), $widget_ops, $control_ops); + } + + function widget($args, $instance) { + extract($args); + if ($instance['icl_language'] != 'multilingual' && $instance['icl_language'] != ICL_LANGUAGE_CODE) { + return ''; + } else if ($instance['icl_language'] == 'multilingual' && function_exists('icl_t')) { + // Get translations + $title = apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base); + remove_filter('widget_text', 'icl_sw_filters_widget_text'); + $text = apply_filters('widget_text', icl_t('Widgets', 'widget body - ' . $this->id, $instance['text']), $instance); + add_filter('widget_text', 'icl_sw_filters_widget_text'); + } else { + remove_filter('widget_title', 'icl_sw_filters_widget_title'); + remove_filter('widget_text', 'icl_sw_filters_widget_text'); + $title = apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base); + $text = apply_filters('widget_text', $instance['text'], $instance); + add_filter('widget_title', 'icl_sw_filters_widget_title'); + add_filter('widget_text', 'icl_sw_filters_widget_text'); + } + echo $before_widget; + if (!empty($title)) { + echo $before_title . $title . $after_title; + } + +?> +
              +get_row($wpdb->prepare("SELECT id, value, status FROM {$wpdb->prefix}icl_strings WHERE context=%s AND name=%s", 'Widgets', 'widget body - ' . $this->id)); + if ($string) { + icl_st_update_string_actions('Widgets', 'widget body - ' . $this->id, $old_instance['text'], $instance['text']); + } else { + icl_register_string('Widgets', 'widget body - ' . $this->id, $instance['text']); + } + } + $instance['icl_language'] = $new_instance['icl_language']; + return $instance; + } + + function form($instance) { + $instance = wp_parse_args((array) $instance, array( + 'title' => '', + 'text' => '', + 'icl_language' => 'multilingual', + 'icl_converted_from' => -1)); + $title = strip_tags($instance['title']); + $text = esc_textarea($instance['text']); + $language = $instance['icl_language']; + +?> +

              +

              + + + +

              /> 

              +get_field_name('icl_language')); + } + +} \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-string-translation/inc/wpml-string-shortcode.php b/src/wp-content/plugins/wpml-string-translation/inc/wpml-string-shortcode.php new file mode 100644 index 0000000..55a1394 --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/inc/wpml-string-shortcode.php @@ -0,0 +1,25 @@ +get_row($wpdb->prepare("SELECT id, value, status FROM {$wpdb->prefix}icl_strings WHERE context=%s AND name=%s", $atts['context'], $atts['name'])); + if(!$string){ + icl_register_string($atts['context'], $atts['name'], $value); + } + + return do_shortcode(icl_t($atts['context'], $atts['name'], $value)); +} diff --git a/src/wp-content/plugins/wpml-string-translation/inc/wpml-string-translation.class.php b/src/wp-content/plugins/wpml-string-translation/inc/wpml-string-translation.class.php new file mode 100644 index 0000000..3343f24 --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/inc/wpml-string-translation.class.php @@ -0,0 +1,591 @@ +plugin_localization(); + + // Check if WPML is active. If not display warning message and not load Sticky links + if ( !defined( 'ICL_SITEPRESS_VERSION' ) || ICL_PLUGIN_INACTIVE ) { + if ( !function_exists( 'is_multisite' ) || !is_multisite() ) { + add_action( 'admin_notices', array( $this, '_no_wpml_warning' ) ); + } + + return false; + } elseif ( version_compare( ICL_SITEPRESS_VERSION, '2.0.5', '<' ) ) { + add_action( 'admin_notices', array( $this, '_old_wpml_warning' ) ); + + return false; + } + + add_action( 'admin_menu', array( $this, 'menu' ) ); + + add_filter( 'plugin_action_links', array( $this, 'plugin_action_links' ), 10, 2 ); + + if ( is_admin() && isset( $_GET[ 'page' ] ) && ( $_GET[ 'page' ] == WPML_ST_FOLDER . '/menu/string-translation.php' || $_GET[ 'page' ] == ICL_PLUGIN_FOLDER . '/menu/theme-localization.php' ) ) { + wp_enqueue_script( 'colorpicker' ); + wp_enqueue_script( 'wpml-st-scripts', WPML_ST_URL . '/res/js/scripts.js', array(), WPML_ST_VERSION ); + wp_enqueue_style( 'wpml-st-styles', WPML_ST_URL . '/res/css/style.css', array(), WPML_ST_VERSION ); + } + + if ( isset( $sitepress_settings[ 'theme_localization_type' ] ) && $sitepress_settings[ 'theme_localization_type' ] == 1 ) { + add_action( 'icl_custom_localization_type', array( $this, 'localization_type_ui' ) ); + } + + add_action( 'wp_ajax_icl_tl_rescan', array( $this, 'tl_rescan' ) ); + add_action( 'wp_ajax_icl_tl_rescan_p', array( $this, 'tl_rescan_p' ) ); + add_action( 'wp_ajax_icl_st_pop_download', array( $this, 'plugin_po_file_download' ) ); + add_action( 'wp_ajax_icl_st_cancel_local_translation', array( $this, 'cancel_local_translation' ) ); + add_action( 'wp_ajax_icl_st_string_status', array( $this, 'icl_st_string_status' ) ); + + // add message to WPML dashboard widget + add_action( 'icl_dashboard_widget_content', array( $this, 'icl_dashboard_widget_content' ) ); + + return true; + } + + function plugin_localization() + { + load_plugin_textdomain( 'wpml-string-translation', false, WPML_ST_FOLDER . '/locale' ); + } + + static function _st_warnings() + { + if(!class_exists('ICL_AdminNotifier')) return; + + global $sitepress, $sitepress_settings; + if(!isset($sitepress)) return; + + if(!isset($sitepress_settings[ 'st' ][ 'strings_language' ] )) { + $sitepress_settings = $sitepress->get_settings(); + } + if(isset($sitepress_settings[ 'st' ][ 'strings_language' ] )) { + if ( $sitepress->get_default_language() != $sitepress_settings[ 'st' ][ 'strings_language' ] ) { + self::_st_default_language_warning(); + } elseif ( $sitepress_settings[ 'st' ][ 'strings_language' ] != 'en' ) { + self::_st_default_and_st_language_warning(); + } else { + ICL_AdminNotifier::removeMessage( '_st_default_and_st_language_warning' ); + ICL_AdminNotifier::removeMessage( '_st_default_language_warning' ); + } + } + } + + static function _st_default_language_warning() + { + ICL_AdminNotifier::removeMessage( '_st_default_and_st_language_warning' ); + static $called = false; + if ( !$called ) { + global $sitepress; + $languages = $sitepress->get_active_languages(); + $translation_languages = array(); + foreach ( $languages as $language ) { + if ( $language[ 'code' ] != 'en' ) { + $translation_languages[ ] = $language[ 'display_name' ]; + } + } + $last_translation_language = $translation_languages[ count( $translation_languages ) - 1 ]; + unset( $translation_languages[ count( $translation_languages ) - 1 ] ); + $translation_languages_list = is_Array( $translation_languages ) ? implode( ', ', $translation_languages ) : $translation_languages; + + $message = 'Because your default language is not English, you need to enter all strings in English and translate them to %s and %s.'; + $message .= ' '; + $message .= 'Read more'; + + $message = __( $message, 'Read more string-translation-default-language-not-english', 'wpml-string-translation' ); + $message = sprintf( $message, $translation_languages_list, $last_translation_language, 'http://wpml.org/faq/string-translation-default-language-not-english/' ); + + $fallback_message = _( 'How to translate strings when default language is not English' ); + $fallback_message = sprintf( $fallback_message, 'http://wpml.org/faq/string-translation-default-language-not-english/' ); + + ICL_AdminNotifier::addMessage( '_st_default_language_warning', $message, 'icl-admin-message-information', true, $fallback_message, false, 'string-translation' ); + $called = true; + } + } + + static function _st_default_and_st_language_warning() + { + global $sitepress, $sitepress_settings; + + if(!isset($sitepress_settings[ 'st' ][ 'strings_language' ] )) { + $sitepress_settings = $sitepress->get_settings(); + } + + if(isset($sitepress_settings[ 'st' ][ 'strings_language' ] )) { + ICL_AdminNotifier::removeMessage( '_st_default_language_warning' ); + static $called = false; + if ( !$called ) { + $st_language_code = $sitepress_settings[ 'st' ][ 'strings_language' ]; + $st_language = $sitepress->get_display_language_name($st_language_code, $sitepress->get_admin_language()); + + $st_page_url = admin_url('admin.php?page=wpml-string-translation/menu/string-translation.php'); + + $message = 'The strings language in your site is set to %s instead of English. '; + $message .= 'This means that all English texts that are hard-coded in PHP will appear when displaying content in %s.'; + $message .= ' '; + $message .= 'Read more | '; + $message .= 'Change strings language'; + + $message = __( $message, 'wpml-string-translation' ); + $message = sprintf( $message, $st_language, $st_language, 'http://wpml.org/faq/string-translation-default-language-not-english/', $st_page_url ); + + $fallback_message = _( 'How to translate strings when default language is not English' ); + $fallback_message = sprintf( $fallback_message, 'http://wpml.org/faq/string-translation-default-language-not-english/' ); + + ICL_AdminNotifier::addMessage( '_st_default_and_st_language_warning', $message, 'icl-admin-message-warning', true, $fallback_message, false, 'string-translation' ); + $called = true; + } + } + } + + function _no_wpml_warning() + { + ?> +

              WPML in order to work.', 'wpml-string-translation' ), + 'http://wpml.org/' ); ?>

              + +

              WPML versions prior 2.0.5.', 'wpml-string-translation' ), + 'http://wpml.org/' ); ?>

              + messages[ ] = array( 'type' => $type, 'text' => $text ); + } + + function show_messages() + { + if ( !empty( $this->messages ) ) { + foreach ( $this->messages as $m ) { + printf( '

              %s

              ', $m[ 'type' ], $m[ 'text' ] ); + } + } + } + + function ajax_calls( $call, $data ) + { + global $sitepress; + switch ( $call ) { + + case 'icl_st_save_translation': + $icl_st_complete = isset( $data[ 'icl_st_translation_complete' ] ) ? $data[ 'icl_st_translation_complete' ] : ICL_STRING_TRANSLATION_NOT_TRANSLATED; + if ( get_magic_quotes_gpc() ) { + $data = stripslashes_deep( $data ); + } + if ( icl_st_is_translator() ) { + $translator_id = get_current_user_id() > 0 ? get_current_user_id() : null; + } else { + $translator_id = null; + } + echo icl_add_string_translation( $data[ 'icl_st_string_id' ], $data[ 'icl_st_language' ], stripslashes( $data[ 'icl_st_translation' ] ), $icl_st_complete, $translator_id ); + echo '|'; + global $icl_st_string_translation_statuses; + + $ts = icl_update_string_status( $data[ 'icl_st_string_id' ] ); + + if ( icl_st_is_translator() ) { + $ts = icl_get_relative_translation_status( $data[ 'icl_st_string_id' ], $translator_id ); + } + + echo $icl_st_string_translation_statuses[ $ts ]; + break; + case 'icl_st_delete_strings': + $arr = explode( ',', $data[ 'value' ] ); + __icl_unregister_string_multi( $arr ); + break; + /* + case 'icl_st_send_strings': + $arr = explode(',',$data['strings']); + icl_translation_send_strings($arr, explode('#',$data['languages'])); + echo '1'; + break; + case 'icl_st_send_strings_all': + icl_translation_send_untranslated_strings(explode(',',$data['languages'])); + echo '1'; + break; + */ + // OBSOLETE? + case 'icl_st_option_writes_form': + if ( !empty( $data[ 'icl_admin_options' ] ) ) { + icl_register_admin_options( $data[ 'icl_admin_options' ] ); + echo '1|'; + } else { + echo '0' . __( 'No strings selected', 'wpml-string-translation' ); + } + break; + + // OBSOLETE? + case 'icl_st_ow_export': + // filter empty options out + do { + list( $data[ 'icl_admin_options' ], $empty_found ) = _icl_st_filter_empty_options_out( $data[ 'icl_admin_options' ] ); + } while ( $empty_found ); + + if ( !empty( $data[ 'icl_admin_options' ] ) ) { + + foreach ( $data[ 'icl_admin_options' ] as $k => $opt ) { + if ( !$opt ) { + unset( $data[ 'icl_admin_options' ][ $k ] ); + } + } + + $message = __( 'Include the following PHP in your code. functions.php would be a good place.', 'wpml-string-translation' ) + . ""; + } else { + $error = 1; + $message = __( 'Error: no strings selected', 'wpml-string-translation' ); + } + echo json_encode( array( 'error' => 0, 'message' => $message ) ); + break; + + + } + } + + function menu() + { + global $sitepress_settings, $wpdb; + + if ( ( !isset( $sitepress_settings[ 'existing_content_language_verified' ] ) || !$sitepress_settings[ 'existing_content_language_verified' ] ) ) { + return; + } + + if ( current_user_can( 'manage_options' ) ) { + $top_page = apply_filters( 'icl_menu_main_page', basename( ICL_PLUGIN_PATH ) . '/menu/languages.php' ); + if ( current_user_can( 'translate' ) ) { + $_cap = 'translate'; + } else { + $_cap = 'edit_others_pages'; + } + + add_submenu_page( $top_page, + __( 'String Translation', 'wpml-string-translation' ), __( 'String Translation', 'wpml-string-translation' ), + $_cap, WPML_ST_FOLDER . '/menu/string-translation.php' ); + } else { + $user_lang_pairs = get_user_meta( get_current_user_id(), $wpdb->prefix . 'language_pairs', true ); + if ( isset( $sitepress_settings[ 'st' ][ 'strings_language' ] ) && !empty( $user_lang_pairs[ $sitepress_settings[ 'st' ][ 'strings_language' ] ] ) ) { + add_menu_page( __( 'String Translation', 'wpml-string-translation' ), + __( 'String Translation', 'wpml-string-translation' ), 'translate', + WPML_ST_FOLDER . '/menu/string-translation.php', null, ICL_PLUGIN_URL . '/res/img/icon16.png' ); + } + + } + } + + function plugin_action_links( $links, $file ) + { + $this_plugin = basename( WPML_ST_PATH ) . '/plugin.php'; + if ( $file == $this_plugin ) { + $links[ ] = '' . + __( 'Configure', 'wpml-string-translation' ) . ''; + } + + return $links; + } + + function localization_type_ui() + { + global $sitepress_settings; + + $theme_localization_stats = get_theme_localization_stats(); + $plugin_localization_stats = get_plugin_localization_stats(); + + include WPML_ST_PATH . '/menu/theme-localization-ui.php'; + + } + + function tl_rescan() + { + global $wpdb, $sitepress_settings; + + $scan_stats = icl_st_scan_theme_files(); + + if ( isset( $_POST[ 'icl_load_mo' ] ) && $_POST[ 'icl_load_mo' ] ) { + $mo_files = icl_st_get_mo_files( TEMPLATEPATH ); + foreach ( (array)$mo_files as $m ) { + $i = preg_match( '#[-]?([a-z_]+)\.mo$#i', $m, $matches ); + if ( $i && $lang = $wpdb->get_var( "SELECT code FROM {$wpdb->prefix}icl_locale_map WHERE locale='" . $matches[ 1 ] . "'" ) ) { + $tr_pairs = icl_st_load_translations_from_mo( $m ); + foreach ( $tr_pairs as $original => $translation ) { + foreach ( $sitepress_settings[ 'st' ][ 'theme_localization_domains' ] as $tld ) { + $string_id = icl_get_string_id( $original, 'theme ' . $tld ); + if ( $string_id ) { + break; + } + } + if ( !$wpdb->get_var{"SELECT id FROM {$wpdb->prefix}icl_string_translations WHERE string_id={$string_id} AND language='{$lang}'"} ) { + icl_add_string_translation( $string_id, $lang, $translation, ICL_STRING_TRANSLATION_COMPLETE ); + } + } + } + } + } + + echo '1|' . $scan_stats; + exit; + + } + + function tl_rescan_p() + { + global $wpdb, $sitepress_settings; + + set_time_limit( 0 ); + if ( preg_replace( '#M$#', '', ini_get( 'memory_limit' ) ) < 128 ) + ini_set( 'memory_limit', '128M' ); + $plugins = array(); + if ( !empty( $_POST[ 'plugin' ] ) ) + foreach ( $_POST[ 'plugin' ] as $plugin ) { + $plugins[ ] = array( 'file' => $plugin, 'mu' => 0 ); // regular plugins + } + if ( !empty( $_POST[ 'mu-plugin' ] ) ) + foreach ( $_POST[ 'mu-plugin' ] as $plugin ) { + $plugins[ ] = array( 'file' => $plugin, 'mu' => 1 ); //mu plugins + } + $scan_stats = ''; + foreach ( $plugins as $p ) { + $plugin = $p[ 'file' ]; + + if ( false !== strpos( $plugin, '/' ) && !$p[ 'mu' ] ) { + $plugin = dirname( $plugin ); + } + if ( $p[ 'mu' ] ) { + $plugin_path = WPMU_PLUGIN_DIR . '/' . $plugin; + } else { + $plugin_path = WP_PLUGIN_DIR . '/' . $plugin; + } + + $scan_stats .= icl_st_scan_plugin_files( $plugin_path ); + + if ( $_POST[ 'icl_load_mo' ] && !$p[ 'mu' ] ) { + $mo_files = icl_st_get_mo_files( $plugin_path ); + foreach ( $mo_files as $m ) { + $i = preg_match( '#[-]([a-z_]+)\.mo$#i', $m, $matches ); + if ( $i && $lang = $wpdb->get_var( "SELECT code FROM {$wpdb->prefix}icl_locale_map WHERE locale='" . $matches[ 1 ] . "'" ) ) { + $tr_pairs = icl_st_load_translations_from_mo( $m ); + foreach ( $tr_pairs as $original => $translation ) { + $string_id = icl_get_string_id( $original, 'plugin ' . basename( $plugin_path ) ); + if ( !$wpdb->get_var( "SELECT id FROM {$wpdb->prefix}icl_string_translations WHERE string_id={$string_id} AND language='{$lang}'" ) ) { + icl_add_string_translation( $string_id, $lang, $translation, ICL_STRING_TRANSLATION_COMPLETE ); + } + } + } + } + } + + } + echo '1|' . $scan_stats; + exit; + } + + // Localization + + function icl_dashboard_widget_content() + { + global $wpdb; + ?> + +
              + + plugin_po_file_download( $file . '/' . $f, $recursion + 1 ); + } + } elseif ( preg_match( '#(\.php|\.inc)$#i', $file ) ) { + _potx_process_file( $file, 0, '__pos_scan_store_results', '_potx_save_version', POTX_API_7 ); + } + } + + if ( !$recursion ) { + $po = ""; + $po .= '# This file was generated by WPML' . PHP_EOL; + $po .= '# WPML is a WordPress plugin that can turn any WordPress site into a full featured multilingual content management system.' . PHP_EOL; + $po .= '# http://wpml.org' . PHP_EOL; + $po .= 'msgid ""' . PHP_EOL; + $po .= 'msgstr ""' . PHP_EOL; + $po .= '"Content-Type: text/plain; charset=utf-8\n"' . PHP_EOL; + $po .= '"Content-Transfer-Encoding: 8bit\n"' . PHP_EOL; + $po .= '"Project-Id-Version: \n"' . PHP_EOL; + $po .= '"POT-Creation-Date: \n"' . PHP_EOL; + $po .= '"PO-Revision-Date: \n"' . PHP_EOL; + $po .= '"Last-Translator: \n"' . PHP_EOL; + $po .= '"Language-Team: \n"' . PHP_EOL; + $po .= '"MIME-Version: 1.0\n"' . PHP_EOL; + + $po .= $__wpml_st_po_file_content; + + header( "Content-Type: application/force-download" ); + header( "Content-Type: application/octet-stream" ); + header( "Content-Type: application/download" ); + header( 'Content-Transfer-Encoding: binary' ); + header( "Content-Disposition: attachment; filename=\"" . basename( $file ) . ".po\"" ); + header( "Content-Length: " . strlen( $po ) ); + echo $po; + exit( 0 ); + } + + } + + function estimate_word_count( $string, $lang_code ) + { + $__asian_languages = array( 'ja', 'ko', 'zh-hans', 'zh-hant', 'mn', 'ne', 'hi', 'pa', 'ta', 'th' ); + $words = 0; + if ( in_array( $lang_code, $__asian_languages ) ) { + $words += strlen( strip_tags( $string ) ) / 6; + } else { + $words += count( explode( ' ', strip_tags( $string ) ) ); + } + + return (int)$words; + } + + function cancel_local_translation() + { + global $wpdb; + $id = $_POST[ 'id' ]; + $string_id = $wpdb->get_var( $wpdb->prepare( "SELECT string_id FROM {$wpdb->prefix}icl_string_translations WHERE id=%d", $id ) ); + $wpdb->update( $wpdb->prefix . 'icl_string_translations', array( 'status' => ICL_STRING_TRANSLATION_NOT_TRANSLATED ), array( 'id' => $id ) ); + icl_update_string_status( $string_id ); + echo json_encode( array( 'string_id' => $string_id ) ); + exit; + } + + function icl_st_string_status() + { + global $wpdb, $icl_st_string_translation_statuses; + $string_id = $_POST[ 'string_id' ]; + echo $icl_st_string_translation_statuses[ ( $wpdb->get_var( $wpdb->prepare( "SELECT status FROM {$wpdb->prefix}icl_strings WHERE id=%d", $string_id ) ) ) ]; + exit; + } + +} + +function __pos_scan_store_results( $string, $domain, $file, $line ) +{ + global $__wpml_st_po_file_content; + static $strings = array(); + + //avoid duplicates + if ( isset( $strings[ $domain ][ $string ] ) ) { + return false; + } + $strings[ $domain ][ $string ] = true; + + $file = @file( $file ); + if ( !empty( $file ) ) { + $__wpml_st_po_file_content .= PHP_EOL; + $__wpml_st_po_file_content .= '# ' . @trim( $file[ $line - 2 ] ) . PHP_EOL; + $__wpml_st_po_file_content .= '# ' . @trim( $file[ $line - 1 ] ) . PHP_EOL; + $__wpml_st_po_file_content .= '# ' . @trim( $file[ $line ] ) . PHP_EOL; + } + + //$__wpml_st_po_file_content .= 'msgid "'.str_replace('"', '\"', $string).'"' . PHP_EOL; + $__wpml_st_po_file_content .= PHP_EOL; + $__wpml_st_po_file_content .= 'msgid "' . $string . '"' . PHP_EOL; + $__wpml_st_po_file_content .= 'msgstr ""' . PHP_EOL; + +} \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-string-translation/license.txt b/src/wp-content/plugins/wpml-string-translation/license.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/license.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/src/wp-content/plugins/wpml-string-translation/locale/orig/wpml-string-translation.po b/src/wp-content/plugins/wpml-string-translation/locale/orig/wpml-string-translation.po new file mode 100644 index 0000000..41e9123 --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/locale/orig/wpml-string-translation.po @@ -0,0 +1,568 @@ +# This file was generated by WPML +# WPML is a WordPress plugin that can turn any WordPress site into a full featured multilingual content management system. +# http://wpml.org +msgid "" +msgstr "" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" + +msgid "Updated %s translation is available" +msgstr "" + +msgid "Review changes and update" +msgstr "" + +msgid "No updates found." +msgstr "" + +msgid "Failed downloading the language information file. Please go back and try a little later." +msgstr "" + +msgid "Error getting the translation file. Please go back and try again." +msgstr "" + +msgid "Translation complete" +msgstr "" + +msgid "Partial translation" +msgstr "" + +msgid "Translation needs update" +msgstr "" + +msgid "Not translated" +msgstr "" + +msgid "Waiting for translator" +msgstr "" + +msgid "Blog Title" +msgstr "" + +msgid "Tagline" +msgstr "" + +msgid "File upload error" +msgstr "" + +msgid "No string found" +msgstr "" + +msgid "Scanning theme folder: %s" +msgstr "" + +msgid "Opening folder: %s" +msgstr "" + +msgid "Scanning file: %s" +msgstr "" + +msgid "Skipping file: %s" +msgstr "" + +msgid "Done scanning files" +msgstr "" + +msgid "= Your theme was scanned for texts =" +msgstr "" + +msgid "The following files were processed:" +msgstr "" + +msgid "WPML found %s strings. They were added to the string translation table." +msgstr "" + +msgid "More details" +msgstr "" + +msgid "No strings found." +msgstr "" + +msgid "No string was sent to translation." +msgstr "" + +msgid "Some strings were not sent to translation." +msgstr "" + +msgid "All strings were sent to translation." +msgstr "" + +msgid "The string was sent to translation." +msgstr "" + +msgid "In progress" +msgstr "" + +msgid "Translation received" +msgstr "" + +msgid "Request failed" +msgstr "" + +msgid "No records found" +msgstr "" + +msgid "Convert to multilingual widget" +msgstr "" + +msgid "Multilingual arbitrary text or HTML" +msgstr "" + +msgid "Multilingual Text" +msgstr "" + +msgid "This widget is converted to multilingual" +msgstr "" + +msgid "Converting to multilingual widget failed. No sidebar specified." +msgstr "" + +msgid "Widget is already converted" +msgstr "" + +msgid "Title:" +msgstr "" + +msgid "Automatically add paragraphs" +msgstr "" + +msgid "WPML String Translation is enabled but not effective. It requires WPML in order to work." +msgstr "" + +msgid "WPML String Translation is enabled but not effective. It is not compatible with WPML versions prior 2.0.5." +msgstr "" + +msgid "No strings selected" +msgstr "" + +msgid "Include the following PHP in your code. functions.php would be a good place." +msgstr "" + +msgid "Error: no strings selected" +msgstr "" + +msgid "String Translation" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "String translation allows you to enter translation for texts such as the site's title, tagline, widgets and other text not contained in posts and pages." +msgstr "" + +msgid "There is 1 string that needs to be updated or translated. " +msgstr "" + +msgid "There are %s strings that need to be updated or translated. " +msgstr "" + +msgid "All strings are up to date." +msgstr "" + +msgid "Translate strings" +msgstr "" + +msgid "String translation" +msgstr "" + +msgid "Select how to get translations for WordPress core" +msgstr "" + +msgid "WPML will automatically download translations for WordPress" +msgstr "" + +msgid "I will download translations for WordPress and save .mo files in wp-includes/languages" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "No action performed. Please select the strings that you need to update or add." +msgstr "" + +msgid "Invalid language: %s" +msgstr "" + +msgid "This update includes %d new strings and %d updated strings. You can review the strings below. Then, go to the bottom of this page and click on the Proceed button." +msgstr "" + +msgid "Updated translations (%d)" +msgstr "" + +msgid "New translations (%d)" +msgstr "" + +msgid "Auto-download WordPress translations" +msgstr "" + +msgid "Success!" +msgstr "" + +msgid "Check other languages" +msgstr "" + +msgid "Missing version number for translation." +msgstr "" + +msgid "String" +msgstr "" + +msgid "Existing translation" +msgstr "" + +msgid "New translation" +msgstr "" + +msgid "Translation" +msgstr "" + +msgid "Add the new translations." +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "There is nothing to be updated or to be added." +msgstr "" + +msgid "Proceed" +msgstr "" + +msgid "The fields with cyan background are text fields and the fields with gray background are numeric." +msgstr "" + +msgid "Choose the fields you'd like to translate and click on the 'Apply' button. Then, use WPML's String translation to translate them." +msgstr "" + +msgid "The selected strings can now be translated using the string translation screen" +msgstr "" + +msgid "This table shows all the admin texts that WPML found." +msgstr "" + +msgid "Export selected strings as PHP code to be added to the theme code" +msgstr "" + +msgid "Close" +msgstr "" + +msgid "You have removed some of the texts that are translated already. The translations will be lost." +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "No options found. Make sure you saved your theme options at least once.
              Some themes only add these to the wp_options table after the user explicitly saves over the theme defaults" +msgstr "" + +msgid "These are the strings that we found in your .po file. Please carefully review them. Then, click on the 'add' or 'cancel' buttons at the %sbottom of this screen%s. You can exclude individual strings by clearing the check boxes next to them." +msgstr "" + +msgid "Name: %s" +msgstr "" + +msgid "Add selected strings" +msgstr "" + +msgid "Select which strings to display:" +msgstr "" + +msgid "All strings" +msgstr "" + +msgid "Pending %s translation (%d)" +msgstr "" + +msgid "Translation needed" +msgstr "" + +msgid "Select strings within context:" +msgstr "" + +msgid "All contexts" +msgstr "" + +msgid "Search for:" +msgstr "" + +msgid "Exact match" +msgstr "" + +msgid "Showing only strings that contain %s" +msgstr "" + +msgid "Context" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "View" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "No strings found" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "Waiting for a local translator." +msgstr "" + +msgid "Translated by %s on %s" +msgstr "" + +msgid "Translation is complete" +msgstr "" + +msgid "ICanLocalize " +msgstr "" + +msgid "Display %d results per page" +msgstr "" + +msgid "Displaying %s–%s of %s" +msgstr "" + +msgid "Strings per page:" +msgstr "" + +msgid "Display all results" +msgstr "" + +msgid "Delete selected strings" +msgstr "" + +msgid "Are you sure you want to delete these strings?\nTheir translations will be deleted too." +msgstr "" + +msgid "Translate to %s" +msgstr "" + +msgid "Estimated cost: %s USD" +msgstr "" + +msgid "Your balance with ICanLocalize is %s. Visit your %sICanLocalize finance%s page to deposit additional funds." +msgstr "" + +msgid "Click to toggle" +msgstr "" + +msgid "Track where string appear on the site" +msgstr "" + +msgid "WPML can keep track of where strings are used on the public pages. Activating this feature will enable the 'view in page' functionality and make translation easier." +msgstr "" + +msgid "Auto register strings for translation" +msgstr "" + +msgid "WPML can automatically register strings for translation. This allows you to translate user-generated content with minimal PHP code." +msgstr "" + +msgid "Disable auto-register strings" +msgstr "" + +msgid "Auto-register strings only when logged in as an administrator" +msgstr "" + +msgid "Auto-register strings always" +msgstr "" + +msgid "Original language of strings" +msgstr "" + +msgid "Choose the language in which the strings are written in." +msgstr "" + +msgid "Strings Language" +msgstr "" + +msgid "Save options and rescan strings" +msgstr "" + +msgid "Settings saved" +msgstr "" + +msgid "Import / export .po" +msgstr "" + +msgid "Import" +msgstr "" + +msgid ".po file:" +msgstr "" + +msgid "Also create translations according to the .po file" +msgstr "" + +msgid "Select what the strings are for:" +msgstr "" + +msgid "new" +msgstr "" + +msgid "select from existing" +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Please enter a context!" +msgstr "" + +msgid "Please select the .po file to upload!" +msgstr "" + +msgid "Export strings into .po/.pot file" +msgstr "" + +msgid "Select context:" +msgstr "" + +msgid "Also include translations" +msgstr "" + +msgid "More options" +msgstr "" + +msgid "none" +msgstr "" + +msgid "edit" +msgstr "" + +msgid "Translating users of types: %s" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Exit search" +msgstr "" + +msgid "view in source" +msgstr "" + +msgid "view in page" +msgstr "" + +msgid "Translation options" +msgstr "" + +msgid "Use translators from ICanLocalize" +msgstr "" + +msgid "Use local translators" +msgstr "" + +msgid "Manage translators" +msgstr "" + +msgid "Translate strings" +msgstr "" + +msgid "Track where strings appear on the site" +msgstr "" + +msgid "Performance considerations" +msgstr "" + +msgid "Highlight color for strings" +msgstr "" + +msgid "Translate texts in admin screens »" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Translation status" +msgstr "" + +msgid "Count" +msgstr "" + +msgid "no domain" +msgstr "" + +msgid "Fully translated" +msgstr "" + +msgid "View all the theme's texts" +msgstr "" + +msgid "View strings that need translation" +msgstr "" + +msgid "Not translated or needs update" +msgstr "" + +msgid "Total" +msgstr "" + +msgid "To translate your theme's texts, click on the button below. WPML will scan your theme for texts and let you enter translations." +msgstr "" + +msgid "Scan the theme for strings" +msgstr "" + +msgid "Plugin" +msgstr "" + +msgid "Active" +msgstr "" + +msgid "n/a" +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "MU" +msgstr "" + +msgid "No" +msgstr "" + +msgid "View all the plugin's texts" +msgstr "" + +msgid "Scan the selected plugins for strings" +msgstr "" + +msgid "Strings in the theme" +msgstr "" + +msgid "Re-scanning the plugins or the themes will reset the strings tracked in the code or the HTML source" +msgstr "" + +msgid "The following strings were found in your theme." +msgstr "" + +msgid "Load translations if found in the .mo files. (it will not override existing translations)" +msgstr "" + +msgid "Strings in the plugins" +msgstr "" + +msgid "create PO file" +msgstr "" + +msgid "Translate custom posts slugs (via WPML String Translation)." +msgstr "" + +msgid "Custom posts slug translation options" +msgstr "" diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-ar.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-ar.mo new file mode 100644 index 0000000..1127bb1 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-ar.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-de_DE.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-de_DE.mo new file mode 100644 index 0000000..387cfbd Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-de_DE.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-el.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-el.mo new file mode 100644 index 0000000..2f48504 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-el.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-es_ES.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-es_ES.mo new file mode 100644 index 0000000..df92587 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-es_ES.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-fr_FR.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-fr_FR.mo new file mode 100644 index 0000000..5479021 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-fr_FR.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-he_IL.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-he_IL.mo new file mode 100644 index 0000000..c85827a Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-he_IL.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-it_IT.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-it_IT.mo new file mode 100644 index 0000000..0e6782e Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-it_IT.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-ja.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-ja.mo new file mode 100644 index 0000000..c6d4c7e Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-ja.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-ko_KO.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-ko_KO.mo new file mode 100644 index 0000000..b192176 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-ko_KO.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-nl_NL.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-nl_NL.mo new file mode 100644 index 0000000..f0e5898 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-nl_NL.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-pl_PL.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-pl_PL.mo new file mode 100644 index 0000000..631044c Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-pl_PL.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-pt_BR.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-pt_BR.mo new file mode 100644 index 0000000..c811a96 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-pt_BR.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-pt_PT.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-pt_PT.mo new file mode 100644 index 0000000..df2e727 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-pt_PT.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-ru_RU.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-ru_RU.mo new file mode 100644 index 0000000..7f1b455 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-ru_RU.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-sv_SE.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-sv_SE.mo new file mode 100644 index 0000000..505a8a6 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-sv_SE.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-zh_CN.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-zh_CN.mo new file mode 100644 index 0000000..a7670b7 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-zh_CN.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-zh_TW.mo b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-zh_TW.mo new file mode 100644 index 0000000..a40317c Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/locale/wpml-string-translation-zh_TW.mo differ diff --git a/src/wp-content/plugins/wpml-string-translation/menu/_slug-translation-options.php b/src/wp-content/plugins/wpml-string-translation/menu/_slug-translation-options.php new file mode 100644 index 0000000..97dc358 --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/menu/_slug-translation-options.php @@ -0,0 +1,25 @@ +
              + +
              +

              +
              + +
              + +
              + +

              + +

              + +

              + + +

              +
              +
              + +
              diff --git a/src/wp-content/plugins/wpml-string-translation/menu/auto-download-mo-config.php b/src/wp-content/plugins/wpml-string-translation/menu/auto-download-mo-config.php new file mode 100644 index 0000000..52d4abe --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/menu/auto-download-mo-config.php @@ -0,0 +1,29 @@ +
              + +
              + +

              + + +
                +
              • + +
              • +
              • + +
              • +
              + +

              + + +

              + +
              + \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-string-translation/menu/auto-download-mo.php b/src/wp-content/plugins/wpml-string-translation/menu/auto-download-mo.php new file mode 100644 index 0000000..37bf0c1 --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/menu/auto-download-mo.php @@ -0,0 +1,208 @@ +get_active_languages(); +$version = isset($_GET['version']) ? $_GET['version'] : false; + +if(isset($_POST['action']) && $_POST['action']=='icl_admo_add_translations' && wp_verify_nonce($_POST['_wpnonce'], 'icl_adm_save_translations')){ + + $translations_add = array(); + if(!empty($_POST['add_new'])){ + $new_translations = unserialize(base64_decode($_POST['add_new'])); + foreach($new_translations as $tr){ + $translations_add[] = array( + 'string' => $tr['string'], + 'translation' => $tr['new'], + 'name' => $tr['name'] + ); + } + if(!empty($translations_add)){ + $user_messages[] = sprintf(_n('%d new translation was added.', '%d new translations were added.', count($translations_add), 'wpml-string-translation'), count($translations_add)); + } + } + if(!empty($_POST['selected'])){ + $translations_updated = 0; + foreach($_POST['selected'] as $idx => $v){ + if(!empty($v)){ + $translations_add[] = array( + 'string' => base64_decode($_POST['string'][$idx]), + 'translation' => base64_decode($_POST['translation'][$idx]), + 'name' => base64_decode($_POST['name'][$idx]) + ); + $translations_updated++; + } + } + if($translations_updated){ + $user_messages[] = sprintf(_n('%d translation was updated.', '%d translations were updated.', $translations_updated, 'wpml-string-translation'), $translations_updated); + + } + } + if($translations_add){ + $WPML_ST_MO_Downloader->save_translations($translations_add, $_POST['language'], $_POST['version']); + }else{ + $user_errors[] = __('No action performed. Please select the strings that you need to update or add.', 'wpml-string-translation'); + } + +} + +if(isset($active_languages[$language])){ + try{ + $WPML_ST_MO_Downloader->load_xml(); + $WPML_ST_MO_Downloader->get_translation_files(); + $version_projects = explode(';', $version); + $types = array(); + foreach($version_projects as $project){ + $exp = explode('|', $project); + $types[] = $exp[0]; + } + $translations = $WPML_ST_MO_Downloader->get_translations($language, array('types' => $types)); + + }catch(Exception $error){ + $user_errors[] = $error->getMessage(); + } +} + +?> + +
              +

              +

              + + + +

              + +

              + + + + +
              +

              +
              + +
              +

              +
              + + +
              + +

              + +
              + + +
              +
              + bottom of this page and click on the Proceed button.', 'wpml-string-translation'), + isset($translations['new']) ? count($translations['new']) : 0, + isset($translations['updated']) ? count($translations['updated']) : 0, + ' href="#adm-proceed"'); + ?> +
              + +
              + + + + + + +

              + + + + + + + + + + + + + + $translation): ?> + + + + + + + + + + + + + + + + + + +
              + + + + + + + + + +
              + + + + +

              + + + + + + + + + + $translation): ?> + + + + + + + + + + + + + +
              + +  
              + +

              + +

              + + + +

              +   + +

              + +
              + + +

              +

              + + + + +
              \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-string-translation/menu/string-translation-translate-options.php b/src/wp-content/plugins/wpml-string-translation/menu/string-translation-translate-options.php new file mode 100644 index 0000000..2a2c4c7 --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/menu/string-translation-translate-options.php @@ -0,0 +1,43 @@ + +
              +

              +

              + + +
              +

              +

              cyan background are text fields and the fields with gray background are numeric.', 'wpml-string-translation'),' class="icl_st_string"',' class="icl_st_numeric"'); ?>

              +

              String translation to translate them.", 'wpml-string-translation'),' href="admin.php?page='.WPML_ST_FOLDER.'/menu/string-translation.php&context=admin_texts_theme_'.get_option('template').'"'); ?>

              + +

              + + + + +

              +

              + +
              + + $option_value): ?> + +
              + + + +

              + + +

              + + + +
              +
              + +
              Some themes only add these to the wp_options table after the user explicitly saves over the theme defaults', 'wpml-string-translation') ?>
              + + +
              diff --git a/src/wp-content/plugins/wpml-string-translation/menu/string-translation.php b/src/wp-content/plugins/wpml-string-translation/menu/string-translation.php new file mode 100644 index 0000000..cf0a326 --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/menu/string-translation.php @@ -0,0 +1,816 @@ + count($sitepress->get_active_languages())*/){ + return; +} + +if(isset($_GET['trop']) && $_GET['trop'] > 0){ + include dirname(__FILE__) . '/string-translation-translate-options.php'; + return; +}elseif(isset($_GET['download_mo']) && $_GET['download_mo']){ + include dirname(__FILE__) . '/auto-download-mo.php'; + return; +} + +if(isset($_GET['status']) && preg_match("#".ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR."-(.+)#", $_GET['status'], $matches)){ + $status_filter = ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR; + $status_filter_lang = $matches[1]; +}else{ + $status_filter = isset($_GET['status']) ? intval($_GET['status']) : false; +} +$context_filter = isset($_GET['context']) ? $_GET['context'] : false; +$search_filter = isset($_GET['search']) ? esc_html($_GET['search']) : false; +$exact_match = isset($_GET['em']) ? $_GET['em'] == 1 : false; + +$icl_string_translations = icl_get_string_translations(); + +if(!empty($icl_string_translations)){ + $icl_strings_in_page = icl_get_strigs_tracked_in_pages($icl_string_translations); +} +$active_languages = $sitepress->get_active_languages(); +$icl_contexts = icl_st_get_contexts($status_filter); + +/* +if($status_filter != ICL_STRING_TRANSLATION_COMPLETE){ + $icl_contexts_translated = icl_st_get_contexts(ICL_STRING_TRANSLATION_COMPLETE); +}else{ + $icl_contexts_translated = $icl_contexts; +} +*/ +$icl_st_translation_enabled = $sitepress->icl_account_configured() && $sitepress->get_icl_translation_enabled(); + +$available_contexts = array(); +if(!empty($icl_contexts)){ + foreach($icl_contexts as $c){ + if($c) $available_contexts[] = $c->context; + } +} +if(!empty($sitepress_settings['st']['theme_localization_domains']) && is_array($sitepress_settings['st']['theme_localization_domains'])){ + foreach($sitepress_settings['st']['theme_localization_domains'] as $c){ + if($c) $available_contexts[] = 'theme ' . $c; + } +} + +$available_contexts = array_unique($available_contexts); + +function _icl_string_translation_rtl_div($language) { + if (in_array($language, array('ar','he','fa'))) { + echo ' dir="rtl" style="text-align:right;direction:rtl;"'; + } else { + echo ' dir="ltr" style="text-align:left;direction:ltr;"'; + } +} +function _icl_string_translation_rtl_textarea($language) { + if (in_array($language, array('ar','he','fa'))) { + echo ' dir="rtl" style="text-align:right;direction:rtl;width:100%"'; + } else { + echo ' dir="ltr" style="text-align:left;direction:ltr;width:100%"'; + } +} + +?> +
              + +

              +

              + + + + + +

              ', ''); ?>

              + +
              "> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              checked="checked" value="" /> + + + + + + + +
              + +
              + +

              +   +

              +
              + + + +

              + + + + +    + + + + + + +    + + + + + + + + + + + ' . htmlspecialchars($search_filter). '') ; ?> + + + + +

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $icl_string): ?> + + + + + + + + + + + +
              + + <?php _e('view in page', 'wpml-string-translation') ?> + + + <?php _e('view in page', 'wpml-string-translation') ?> + + +
              > + +
              +
              + +
              +
              +
              + + + prefix.'language_pairs', true); + if(empty($user_lang_pairs[$sitepress_settings['st']['strings_language']][$lang['code']])){ + continue; + } + } + $tr_complete_checked = ''; + } + + if(icl_st_is_translator()){ + + $icl_pro_status = $wpdb->get_var($wpdb->prepare(" + SELECT c.status FROM {$wpdb->prefix}icl_core_status c + JOIN {$wpdb->prefix}icl_string_status s ON s.rid = c.rid + WHERE s.string_translation_id = %d AND target=%s AND status = %d + ORDER BY s.id DESC LIMIT 1 + ", $icl_string['string_id'], $lang['code'], CMS_TARGET_LANGUAGE_ASSIGNED)); + + if( + isset($icl_string['translations'][$lang['code']]) && + ( + $icl_string['translations'][$lang['code']]['translator_id'] == get_current_user_id() || + ( + is_null($icl_string['translations'][$lang['code']]['translator_id']) && + $icl_string['translations'][$lang['code']]['status'] == ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR && + !$icl_pro_status + ) + ) + + ){ + $form_disabled = ''; + }else{ + $form_disabled = ' disabled="disabled" '; + } + + }else{ + $form_disabled = ''; + } + ?> + +
              + + + + + + + + + + + +
              + +
              + + + rows="" cols="40" name="icl_st_translation" id="icl_st_ta_"> +
              + '; + echo '' . __('Waiting for a local translator.', 'wpml-string-translation') . ' '; + echo '' + .__('Cancel', 'wpml-string-translation').''; + echo ''; + }else{ + if(isset($icl_string['translations'][$lang['code']]) && $icl_string['translations'][$lang['code']]['translator_id'] > 0){ + $_user = get_userdata($icl_string['translations'][$lang['code']]['translator_id']); + if(!empty($_user)){ + echo '
              '; + printf(__('Translated by %s on %s', 'wpml-string-translation'), $_user->display_name , $icl_string['translations'][$lang['code']]['translation_date']); + echo '
              '; + } + }else{ + $icl_pro_status = $wpdb->get_var($wpdb->prepare(" + SELECT c.status FROM {$wpdb->prefix}icl_core_status c + JOIN {$wpdb->prefix}icl_string_status s ON s.rid = c.rid + WHERE s.string_translation_id = %d AND target=%s AND status = %d + ORDER BY s.id DESC LIMIT 1 + ", $icl_string['string_id'], $lang['code'], CMS_TARGET_LANGUAGE_ASSIGNED)); + if(!empty($icl_pro_status)){ + echo '
              '; + echo "ICanLocalize: " . icl_decode_translation_status_id($icl_pro_status); + echo '
              '; + } + } + + } + ?> + + ]*)>#im',$icl_string['translations'][$lang['code']]['value'])):?> +
              + HTML preview + +   + type="submit" class="button-secondary action" value="" /> +
              +
              + + + +
              +
              + + ' . __('ICanLocalize ', 'wpml-string-translation').$icl_status . ''; + } + echo $icl_st_string_translation_statuses[$icl_string['status']].$icl_status; + ?> + + +
              + + found_posts > 10): ?> +
              + add_query_arg('paged', '%#%' ), + 'format' => '', + 'prev_text' => '«', + 'next_text' => '»', + 'total' => $wp_query->max_num_pages, + 'current' => isset($_GET['paged']) ? $_GET['paged'] : 1, + 'add_args' => isset($icl_translation_filter)?$icl_translation_filter:array() + )); + ?> + +
              + +
              + + +
              + + ' . __( 'Displaying %s–%s of %s', 'wpml-string-translation' ) . '%s', + number_format_i18n( ( $_GET['paged'] - 1 ) * $wp_query->query_vars['posts_per_page'] + 1 ), + number_format_i18n( min( $_GET['paged'] * $wp_query->query_vars['posts_per_page'], $wp_query->found_posts ) ), + number_format_i18n( $wp_query->found_posts ), + $page_links + ); echo $page_links_text; + ?> + + + + + +   + + +
              + +
              + + + + + + + + + + +
              + +
              + +
              + + + + + get_current_language()) { + $target_status[$lang['to']] = $lang['have_translators']; + $target_rate[$lang['to']] = $lang['max_rate']; + } + } + } + ?> + + + + + + + + + + + + + +
              +
                + get_active_languages()as $lang):?> + +
              • + + + +   + + + + + ') ?>) + +
              • + +
              + + +
              + + +
              +

              + create_icl_popup_link(ICL_API_ENDPOINT.'/finance/?wid=' . $sitepress_settings['site_id'], array('title'=>'ICanLocalize')), + '', + 'wpml-string-translation')?> +

              +
              + + + +
              + +
              +
              +
              + +
              +
              +
              +
              +
              +
              +

              + +

              +
              +

              +
              + + +
                +
              • + + +

                 »

                +
              • +
              • + + +
              • +
              +

              + + +

              +
              + +
              +
              + + +
              +
              +
              +
              +

              + +

              +
              +

              +
              + + +
                +
              • + +
              • +
              • + +
              • +
              • + +

                 »

                +
              • +
              +

              + + +

              +
              + +
              +
              + +
              +
              +
              +
              +

              + +

              +
              +

              +
              + + +
                +
              • + +
              • +
              +

              + +   +

              +
              + +
              +
              + +
              +
              + +
              +
              +
              +
              +
              +
              +

              + +

              +
              +
              +
              + +

              + + +

              +

              + + + +

              +

              + + + +    + + + + + + style="display:none"> + + + + + +

              + +

              + + + +

              + +
              + +
              +
              + +

              + + +

              +

              + + + +

              +

              + +
              +
              +
              +
              +
              + +
              +
              +
              +
              +
              +
              +

              + +

              +
              +
              + +
              + $details){ + if(in_array($role, $sitepress_settings['st']['translated-users'])){ + $tnames[] = translate_user_role($details['name'] ); + } + } + + $tustr = ''; + if(!empty($tnames)){ + $tustr .= join(', ' , array_map('translate_user_role', $tnames)); + }else{ + $tustr = __('none', 'wpml-string-translation'); + } + $tustr .= ''; + $tustr .= '  ' . __('edit', 'wpml-string-translation') . ''; + + ?> + + + + + +
              + +

              + + +

              + +
              + + + +
              +
              +
              + +
              +
              + +

              + + + + + + + + + +
              diff --git a/src/wp-content/plugins/wpml-string-translation/menu/theme-localization-ui.php b/src/wp-content/plugins/wpml-string-translation/menu/theme-localization-ui.php new file mode 100644 index 0000000..bfed938 --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/menu/theme-localization-ui.php @@ -0,0 +1,191 @@ + +

              + +
              +

              +
              + +
              + + +

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
               
              ' . __('no domain','wpml-string-translation') . ''; ?> + + + + +
                
              + +

              + + +
              + +

              + +

              + +

              + " /> + +

              +
              + +
              + +

              + 'MU :: ' . $pfile); + $mu_plugins_base[$pfile] = true; + } + $wpmu_sitewide_plugins = (array) maybe_unserialize( get_site_option( 'active_sitewide_plugins' ) ); + ?> +
              +
              + + + + + + + + + + + + + + + + + + + + + + + $plugin): ?> + + + + + + + + + + +
                
                
              + + + + + + + + + + + + + +
              +
              + +

              + +

              + + + +
              +
              + +

              + +

              +

              + " /> + +

              + + +
              + +
              \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-string-translation/plugin.php b/src/wp-content/plugins/wpml-string-translation/plugin.php new file mode 100644 index 0000000..19eab3c --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/plugin.php @@ -0,0 +1,21 @@ +Documentation. +Author: ICanLocalize +Author URI: http://wpml.org +Version: 2.0.1 +*/ + +if(defined('WPML_ST_VERSION')) return; + +define('WPML_ST_VERSION', '2.0.1'); +define('WPML_ST_PATH', dirname(__FILE__)); + +require WPML_ST_PATH . '/inc/constants.php'; +require WPML_ST_PATH . '/inc/wpml-string-translation.class.php'; +require WPML_ST_PATH . '/inc/widget-text.php'; + +$WPML_String_Translation = new WPML_String_Translation; +?> \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-string-translation/res/css/style.css b/src/wp-content/plugins/wpml-string-translation/res/css/style.css new file mode 100644 index 0000000..31886dc --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/res/css/style.css @@ -0,0 +1,150 @@ +.icl-st-original{ + /*padding:3px 3px 3px 0;*/ +} +.icl-st-inline{ + border:1px solid #ddd; + padding:1px; + clear:both; + display: none; + +} +.icl-st-table{ + width:100%; +} +.icl-st-table textarea{ + font-size: 10px; + padding:1px; + margin:0; + line-height:normal; +} + +.colthree{ + width:48%; + float:left; + padding-right:8px; +} +.colthree h4{ + margin-bottom:0; +} + +.meta_comment{ + font-style: italic; + color:#777; +} + +p.sub { + color:#444444; + font-family: Verdana; + font-size:12px; + margin:0 0 5px 0; +} +div.postbox div.inside { + margin:10px; + position:relative; +} + +#icl_show_source_top{ + position:fixed; + margin-left:-10px; +} +#icl_show_source_wrap{ + /*height:575px;*/ + /*width:805px;*/ + /*overflow:auto;*/ + /*margin-top:10px;*/ + +} +.icl_string_track_source pre{ + /*width:800px;*/ + /*height:575px;*/ + height:100%; + font-family:Arial; + background-color:#fefefe; + border:1px solid #eee; +} +.icl_string_track_source ol{ + line-height:10px; +} +.icl_string_track_source ol li{ + font-size:10px; + margin:0; + list-style-position: inside; + padding:0; + line-height:5px; +} +.icl_string_track_source .icl_string_track_filename{ + position:fixed; + /*top:663px;*/ + /*z-index: 999;*/ + font-size:10px; + margin:-25px 0 0 -5px; + color:#fff; + background-color: #222222; +} + +.icl_string_track_url{ + /*position:fixed;*/ + /*top:663px;*/ + /*z-index: 999;*/ + font-size:10px; + /*width:810px !important;*/ + height:16px; + overflow:hidden; + white-space:nowrap; + /*margin:0 0 -25px -5px;*/ + /*color:#000;*/ + /*background-color: #222222; */ +} + +#colorPickerDiv{ + background-color: #000; + color:#fff; + border:1px solid #000; +} + +#icl_st_option_writes ul.icl_st_option_writes{ + margin-left:20px; + +} + +.icl_st_admin_string{ + -moz-border-radius: 4px; + padding:2px; + float: left; + margin-bottom: 5px;; +} +.icl_st_numeric{ + background-color: #d5e8f9; + border: 1px solid #9bc8f0; +} +span.icl_st_numeric, span.icl_st_string{ + padding:2px; + -moz-border-radius: 4px; +} +.icl_st_string{ + background-color: #f3ece2; + border: 1px solid #c4a26f; +} + +.icl_stow_head{ + float:left; +} + +#icl_st_options_write_success{ + padding:4px; +} +a.icl_stow_toggler{ + text-decoration: none; +} + +#icl_st_ow_export_out{ + display: none; +} +#icl_st_ow_export_out textarea{ + width:100%; + height:200px; + font-size:10px; +} +#icl_st_ow_export_close{ + display: none; +} diff --git a/src/wp-content/plugins/wpml-string-translation/res/img/ajax-loader.gif b/src/wp-content/plugins/wpml-string-translation/res/img/ajax-loader.gif new file mode 100644 index 0000000..d0bce15 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/res/img/ajax-loader.gif differ diff --git a/src/wp-content/plugins/wpml-string-translation/res/img/icon_color_picker.png b/src/wp-content/plugins/wpml-string-translation/res/img/icon_color_picker.png new file mode 100644 index 0000000..9273bdd Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/res/img/icon_color_picker.png differ diff --git a/src/wp-content/plugins/wpml-string-translation/res/img/view-in-page.png b/src/wp-content/plugins/wpml-string-translation/res/img/view-in-page.png new file mode 100644 index 0000000..888d719 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/res/img/view-in-page.png differ diff --git a/src/wp-content/plugins/wpml-string-translation/res/img/view-in-source.png b/src/wp-content/plugins/wpml-string-translation/res/img/view-in-source.png new file mode 100644 index 0000000..91ce8e9 Binary files /dev/null and b/src/wp-content/plugins/wpml-string-translation/res/img/view-in-source.png differ diff --git a/src/wp-content/plugins/wpml-string-translation/res/js/scripts.js b/src/wp-content/plugins/wpml-string-translation/res/js/scripts.js new file mode 100644 index 0000000..9312658 --- /dev/null +++ b/src/wp-content/plugins/wpml-string-translation/res/js/scripts.js @@ -0,0 +1,588 @@ +jQuery(document).ready(function(){ + jQuery('a[href="#icl-st-toggle-translations"]').click(icl_st_toggler); + jQuery('.icl-st-inline textarea').focus(icl_st_monitor_ta); + jQuery('.icl-st-inline textarea').keyup(icl_st_monitor_ta_check_modifications); + jQuery(".icl_st_form").submit(icl_st_submit_translation); + jQuery('select[name="icl_st_filter_status"]').change(icl_st_filter_status); + jQuery('select[name="icl_st_filter_context"]').change(icl_st_filter_context); + jQuery('#icl_st_filter_search_sb').click(icl_st_filter_search); + jQuery('#icl_st_filter_search_remove').click(icl_st_filter_search_remove); + + jQuery('.check-column input').click(icl_st_select_all); + jQuery('#icl_st_delete_selected').click(icl_st_delete_selected); + //jQuery('#icl_st_send_need_translation').click(icl_st_send_need_translation); + //jQuery('#icl_st_do_send_strings').submit(icl_st_do_send_strings); + + jQuery('#icl_st_po_translations').click(function(){ + if(jQuery(this).attr('checked')){ + jQuery('#icl_st_po_language').removeAttr('disabled').fadeIn(); + }else{ + jQuery('#icl_st_po_language').attr('disabled','disabled').fadeOut(); + } + }); + jQuery('#icl_tm_languages :checkbox').click(icl_st_update_languages); + jQuery('.icl_st_row_cb, .check-column :checkbox').click(icl_st_update_checked_elements); + + jQuery('#icl_tm_languages select').change(icl_st_change_service); + + jQuery('.icl_htmlpreview_link').click(icl_st_show_html_preview); + jQuery('#icl_st_po_form').submit(icl_validate_po_upload); + jQuery('#icl_st_send_strings').submit(icl_st_send_strings); + + jQuery('.handlediv').click(function(){ + if(jQuery(this).parent().hasClass('closed')){ + jQuery(this).parent().removeClass('closed'); + }else{ + jQuery(this).parent().addClass('closed'); + } + }) + + jQuery('#icl_st_track_strings').submit(iclSaveForm); + + jQuery('#icl_st_ar_form').submit(iclSaveForm); + + jQuery('#icl_st_option_write_form').submit(icl_st_admin_options_form_submit); + jQuery('#icl_st_option_write_form').submit(iclSaveForm); + + + jQuery('.icl_stow_toggler').click(icl_st_admin_strings_toggle_strings); + + jQuery('#icl_st_ow_export').click(icl_st_ow_export_selected); + jQuery('#icl_st_ow_export_close').click(icl_st_ow_export_close); + + + + // Picker align + jQuery(".pick-show").click(function () { + var set = jQuery(this).offset(); + jQuery("#colorPickerDiv").css({"top":set.top-180,"left":set.left, "z-index":99}); + }); + + jQuery('#icl_tl_rescan').click(iclThemeLocalizationRescan); + jQuery('#icl_tl_rescan_p').submit(iclThemeLocalizationRescanP); + + jQuery(document).delegate('.wpml_st_pop_download', 'click', icl_st_pop_download); + + jQuery('#icl_st_more_options').submit(iclSaveForm); + jQuery('#icl_st_more_options').submit( + function(){ + + if(!jQuery('#icl_st_tusers label input:checked').length){ + + jQuery('#icl_st_tusers_list').html('-'); + + }else{ + + jQuery('#icl_st_tusers_list').html(jQuery('#icl_st_tusers label input:checked').next().map( + function(){ + return jQuery(this).html(); + }).get().join(', ')) + + } + + + } + ); + + icl_auto_download_mo.init(); + +}); + +function icl_st_toggler(){ + jQuery(".icl-st-inline").slideUp(); + var inl = jQuery(this).parent().next().next(); + if(inl.css('display') == 'none'){ + inl.slideDown(); + }else{ + inl.slideUp(); + } + icl_st_show_html_preview_close(); +} + +var icl_st_ta_cache = new Array(); +var icl_st_cb_cache = new Array(); +function icl_st_monitor_ta(){ + if(jQuery(this).attr('id') !== undefined){ + var id = jQuery(this).attr('id').replace(/^icl_st_ta_/,''); + if(icl_st_ta_cache[id] == undefined){ + icl_st_ta_cache[id] = jQuery(this).val(); + icl_st_cb_cache[id] = jQuery('#icl_st_cb_'+id).attr('checked'); + } + } +} + +function icl_st_monitor_ta_check_modifications(){ + if(jQuery(this).attr('id') !== undefined){ + var id = jQuery(this).attr('id').replace(/^icl_st_ta_/,''); + if(icl_st_ta_cache[id] != jQuery(this).val()){ + jQuery('#icl_st_cb_'+id).removeAttr('checked'); + }else{ + if(icl_st_cb_cache[id]){ + jQuery('#icl_st_cb_'+id).attr('checked','checked'); + } + } + } + icl_st_show_html_preview_close(); +} + +function icl_st_submit_translation(){ + var thisf = jQuery(this); + var postvars = thisf.serialize(); + postvars += '&icl_ajx_action=icl_st_save_translation'; + thisf.contents().find('textarea, input').attr('disabled','disabled'); + thisf.contents().find('.icl_ajx_loader').fadeIn(); + var string_id = thisf.find('input[name="icl_st_string_id"]').val(); + jQuery.post(icl_ajx_url, postvars, function(msg){ + thisf.contents().find('textarea, input').removeAttr('disabled'); + thisf.contents().find('.icl_ajx_loader').fadeOut(); + spl = msg.split('|'); + jQuery('#icl_st_string_status_'+string_id).html(spl[1]); + }) + return false; +} + +function icl_st_filter_status(){ + var qs = jQuery(this).val() != '' ? '&status=' + jQuery(this).val() : ''; + location.href=location.href.replace(/#(.*)$/,'').replace(/&paged=([0-9]+)/,'').replace(/&updated=true/,'').replace(/&status=([0-9a-z-]+)/g,'') + qs; +} + +function icl_st_filter_context(){ + var qs = jQuery(this).val() != '' ? '&context=' + jQuery(this).val() : ''; + location.href=location.href.replace(/#(.*)$/,'').replace(/&paged=([0-9]+)/,'').replace(/&updated=true/,'').replace(/&context=(.*)/g,'') + qs; +} + +function icl_st_filter_search(){ + var val = jQuery('#icl_st_filter_search').val(); + var exact_match = jQuery('#icl_st_filter_search_em').attr('checked'); + var qs = val != '' ? '&search=' + val : ''; + qs = qs.replace(/&em=1/g,''); + if(exact_match){ + qs += '&em=1'; + } + location.href=location.href.replace(/#(.*)$/,'').replace(/&paged=([0-9]+)/,'').replace(/&updated=true/,'').replace(/&search=(.*)/g,'') + qs; +} + +function icl_st_filter_search_remove(){ + location.href=location.href.replace(/#(.*)$/,'').replace(/&search=(.*)/g,'').replace(/&em=1/g,''); +} + +function icl_st_select_all(){ + if(jQuery(this).attr('checked')){ + jQuery('.icl_st_row_cb, .check-column input').attr('checked','checked'); + }else{ + jQuery('.icl_st_row_cb, .check-column input').removeAttr('checked'); + } +} + +function icl_st_delete_selected(){ + if(!jQuery('.icl_st_row_cb:checked').length || !confirm(jQuery(this).next().html())){ + return false; + } + var delids = []; + jQuery('.icl_st_row_cb:checked').each(function(){ + delids.push(jQuery(this).val()); + }); + if(delids){ + postvars = 'icl_ajx_action=icl_st_delete_strings&value='+delids.join(',')+'&_icl_nonce=' + jQuery('#_icl_nonce_dstr').val(); + jQuery.post(icl_ajx_url, postvars, function(){ + for(i=0; i < delids.length; i++){ + jQuery('.icl_st_row_cb[value="'+delids[i]+'"]').parent().parent().fadeOut('fast', function(){jQuery(this).remove()}); + } + }) + } + return false; +} + +function icl_st_send_strings(){ + if(!jQuery('.icl_st_row_cb:checked').length){ + return false; + } + var sendids = []; + jQuery('.icl_st_row_cb:checked').each(function(){ + sendids.push(jQuery(this).val()); + }); + + if(!sendids.length){ + return false; + } + jQuery('#icl_st_send_strings input[name="strings"]').val(sendids.join(',')); + + return true; +} + +/* +function icl_st_send_need_translation(){ + var trlangs = []; + jQuery('#icl-tr-opt input:checked').each(function(){trlangs.push(jQuery(this).val())}); + if(!trlangs.length){ + return false; + } + jQuery('#icl_st_review_strings input[name="strings"]').val('need'); + jQuery('#icl_st_review_strings input[name="langs"]').val(trlangs.join(',')); + document.getElementById('icl_st_review_strings').submit(); + return false; +} +*/ +/* +function icl_st_do_send_strings(){ + thisf = jQuery(this); + var buttons = thisf.contents().find('input:submit, input:button'); + if(jQuery('input[name="strings"]').val() == 'need'){ + var all = '_all'; + }else{ + var all = ''; + } + buttons.attr('disabled','disabled'); + jQuery('#icl_st_send_progress').fadeIn(); + postvars = 'icl_ajx_action=icl_st_send_strings'+all+'&' + thisf.serialize(); + jQuery.post(icl_ajx_url, postvars, function(msg){ + if(msg==1) buttons.removeAttr('disabled'); + jQuery('#icl_st_send_progress').fadeOut('fast', function(){location.href=location.href.replace(/#(.*)$/,'')}); + }); + return false; +} +*/ + +function icl_st_update_languages(){ + if(!jQuery('#icl_tm_languages input:checked').length){ + jQuery('#icl_send_strings').attr('disabled','disabled'); + }else{ + if(jQuery('.icl_st_row_cb:checked, .check-column input:checked').length){ + jQuery('#icl_send_strings').removeAttr('disabled'); + } + } + + var lang = jQuery(this).attr('name').replace(/translate_to\[(.+)\]/ , '$1'); + if(jQuery(this).attr('checked')==true){ + if(jQuery('#icl_st_service_'+lang).val() == 'icanlocalize'){ + icl_st_show_estimated_cost(lang); + } + }else{ + icl_st_hide_estimated_cost(lang); + } +} + +function icl_st_update_checked_elements(){ + + if(!jQuery('.icl_st_row_cb:checked, .check-column input:checked').length){ + jQuery('#icl_st_delete_selected, #icl_send_strings').attr('disabled','disabled'); + }else{ + jQuery('#icl_st_delete_selected').removeAttr('disabled'); + if(!jQuery('#icl-tr-opt').length || jQuery('#icl-tr-opt input:checked').length){ + jQuery('#icl_send_strings').removeAttr('disabled'); + } + } + jQuery('.icl_st_estimate_wrap:visible').each(function(){ + var lang = jQuery(this).attr('id').replace(/icl_st_estimate_(.+)_wrap/ , '$1'); + icl_st_show_estimated_cost(lang); + }) +} + +function icl_st_show_html_preview(){ + var parent = jQuery(this).parent(); + var textarea = parent.parent().prev().find('textarea[name="icl_st_translation"]'); + if(parent.find('.icl_html_preview').css('display')=='none'){ + parent.find('.icl_html_preview').html(textarea.val().replace(/(\n|\r)/g,'
              ')).slideDown(); + }else{ + parent.find('.icl_html_preview').slideUp(); + } + + return false; +} + +function icl_st_show_html_preview_close(){ + jQuery('.icl_html_preview').slideUp(); +} + +function icl_validate_po_upload(){ + cont = jQuery(this).contents(); + cont.find('.icl_error_text').hide(); + if(!jQuery('#icl_po_file').val()){ + cont.find('#icl_st_err_po').fadeIn(); + return false; + } + if(!cont.find('select[name="icl_st_i_context"]').val() && !cont.find('input[name="icl_st_i_context_new"]').val()){ + cont.find('#icl_st_err_domain').fadeIn(); + return false; + } + +} + +var icl_show_in_source_scroll_once = false; +jQuery(document).delegate('#icl_show_source_wrap', 'mouseover', function(){ + if(icl_show_in_source_scroll_once){ + icl_show_in_source(0, icl_show_in_source_scroll_once); + icl_show_in_source_scroll_once = false; + } +}) + +function icl_show_in_source(tabfile, line){ + + if(icl_show_in_source_scroll_once){ + if(line > 40){ + line = line - 10; + location.href=location.protocol+'//'+location.host+location.pathname+location.search+'#icl_source_line_'+tabfile+'_'+line; + } + }else{ + jQuery('.icl_string_track_source').fadeOut( + function(){ + jQuery('#icl_string_track_source_'+tabfile).fadeIn( + function(){ + + if(line > 40){ + line = line - 10; + location.href=location.protocol+'//'+location.host+location.pathname+location.search+'#icl_source_line_'+tabfile+'_'+line; + } + + /* + var divOffset = jQuery('#TB_ajaxContent').offset().top; + var pOffset = jQuery('#icl_source_line_'+tabfile+'_'+line).offset().top; + var pScroll = pOffset - divOffset - 90; + jQuery('#TB_ajaxContent').animate({scrollTop: '+=' + pScroll}, 1000); + */ + + } + ); + } + ); + } + return false; +} + +var cp = new ColorPicker(); +function pickColor(color) { + jQuery('#icl_st_hl_color').val(color).css('background-color',color); +} +cp.writeDiv(); + +function iclResizeIframe(){ + jQuery('#icl_string_track_frame_wrap iframe').attr('height',jQuery('#TB_ajaxContent').height()-20); + jQuery('#icl_string_track_frame_wrap iframe').attr('width',jQuery('#TB_ajaxContent').width()); +} + +function icl_st_admin_options_form_submit(frm,msg){ + if(jQuery('input:checkbox.icl_st_has_translations[checked!=true]').length){ + c = confirm(jQuery('#icl_st_options_write_confirm').html()); + if(c){ + iclHaltSave = false; + }else{ + iclHaltSave = true; + } + } + iclSaveForm_success_cb.push(function(){ + jQuery('#icl_st_options_write_success').fadeIn(); + }); +} + +function icl_st_admin_strings_toggle_strings(){ + var thisa = jQuery(this); + jQuery(this).parent().next().slideToggle(function(){ + if(thisa.html().charAt(0)=='+'){ + thisa.html(thisa.html().replace(/^\+/,'-')); + }else{ + thisa.html(thisa.html().replace(/^-/,'+')); + } + }); + return false; +} + +function icl_st_ow_export_selected(){ + jQuery('#icl_st_ow_export').attr('disabled','disabled'); + jQuery('#icl_st_option_writes .ajax_loader').fadeIn(); + jQuery.ajax({ + type: "POST", + dataType: 'json', + url: icl_ajx_url, + data: "icl_ajx_action=icl_st_ow_export&"+jQuery('#icl_st_option_write_form').serialize() + '&_icl_nonce=' + jQuery('#_icl_nonce_owe').val(), + success: function(res){ + jQuery('#icl_st_ow_export_out').html(res.message).slideDown(); + jQuery('#icl_st_option_writes .ajax_loader').fadeOut( + function(){ + jQuery('#icl_st_ow_export_close').fadeIn(); + } + ); + + } + }); +} + +function icl_st_ow_export_close(){ + jQuery('#icl_st_ow_export_out').slideUp(function(){jQuery('#icl_st_ow_export_close').fadeOut()}); + jQuery('#icl_st_ow_export').removeAttr('disabled'); +} + +function iclThemeLocalizationRescan(){ + var thisb = jQuery(this); + thisb.next().fadeIn(); + var data = "action=icl_tl_rescan"; + if(jQuery('#icl_load_mo_themes').attr('checked')){ + data += '&icl_load_mo=1'; + } + jQuery.ajax({ + type: "POST", + url: ajaxurl, + data: data, + success: function(msg){ + thisb.next().fadeOut(); + spl = msg.split('|'); + jQuery('#icl_tl_scan_stats').html(spl[1]).fadeIn(); + jQuery("#icl_strings_in_theme_wrap").load(location.href.replace(/#(.*)$/,'') + ' #icl_strings_in_theme'); + } + }); + return false; +} + +function iclThemeLocalizationRescanP(){ + var thisf = jQuery(this); + thisf.contents().find('.icl_ajx_loader_p').fadeIn(); + thisf.contents().find('input:submit').attr('disabled','disabled'); + + jQuery.ajax({ + type: "POST", + url: ajaxurl, + data: "action=icl_tl_rescan_p&"+thisf.serialize(), + success: function(msg){ + thisf.contents().find('.icl_ajx_loader_p').fadeOut(); + thisf.contents().find('input:submit').removeAttr('disabled'); + spl = msg.split('|'); + jQuery('#icl_tl_scan_stats_p').html(spl[1]).fadeIn(); + jQuery("#icl_strings_in_plugins_wrap").load(location.href.replace(/#(.*)$/,'') + ' #icl_strings_in_plugins'); + } + }); + return false; +} + +function icl_st_pop_download(){ + + location.href = ajaxurl + "?action=icl_st_pop_download&file="+jQuery(this).attr('href').substr(1) + + return false; +} + +function icl_st_selected_word_count(){ + word_count = 0; + jQuery('.icl_st_row_cb:checked').each(function(){ + string_id = jQuery(this).val(); + word_count += parseInt(jQuery('#icl_st_wc_'+string_id).val()) + }); + return word_count; +} + +function icl_st_show_estimated_cost(lang){ + var estimate = icl_st_selected_word_count() * jQuery('#icl_st_max_rate_'+lang).html(); + jQuery('#icl_st_estimate_'+lang).html(Math.round(estimate*100)/100); + jQuery('#icl_st_estimate_'+lang+'_wrap').show(); +} + +function icl_st_hide_estimated_cost(lang){ + jQuery('#icl_st_estimate_'+lang+'_wrap').hide(); +} + +function icl_st_change_service(){ + + var lang = jQuery(this).attr('name').replace(/service\[(.+)\]/ , '$1'); + if(jQuery(this).val()=='icanlocalize'){ + if(jQuery('#icl_st_translate_to_'+lang).attr('checked')){ + icl_st_show_estimated_cost(lang); + } + }else{ + icl_st_hide_estimated_cost(lang); + } + +} + +function icl_st_cancel_local_translation(ahref){ + var id = ahref.attr('href').replace(/#cancel-local-/g, ''); + var aparent = ahref.parent(); + aparent.html(icl_ajxloaderimg); + jQuery.ajax({ + type: "POST", + url: ajaxurl, + data: "action=icl_st_cancel_local_translation&id="+id, + dataType: 'json', + success: function(msg){ + aparent.fadeOut(); + string_id = msg.string_id; + jQuery.ajax({ + type:"POST", + url: ajaxurl, + data: "action=icl_st_string_status&string_id="+string_id, + success: function(msg){ + jQuery('#icl_st_string_status_'+string_id + ' span').html(msg); + } + }); + + } + }); + return false; +} + + +var icl_auto_download_mo = { + + init: function(){ + + icl_auto_download_mo.list_form_setup(); + + jQuery(document).delegate('#icl_auto_download_mo', 'submit', icl_auto_download_mo.save_preferences); + jQuery(document).delegate('#icl_adm_update_check', 'click', icl_auto_download_mo.updates_check); + + }, + + save_preferences: function(){ + var thisf = jQuery(this); + var data = thisf.serialize(); + thisf.find('input:last').after(icl_ajxloaderimg); + jQuery.ajax({ + type: "POST", + url: ajaxurl, + data: data, + dataType: 'json', + success: function(msg){ + if(msg.enabled){ + jQuery('#icl_adm_update_check').fadeIn(); + }else{ + jQuery('#icl_adm_update_check').fadeOut(); + } + thisf.find('input:last').next().hide(); + try{ + jQuery('#icl_adm_options').pointer('close'); + }catch(err){;} + + location.href = location.href.replace(/#(.+)$/, ''); + + } + }); + return false; + }, + + list_form_setup: function(){ + + jQuery(document).delegate('#icl_admo_list_table thead :checkbox', 'change', function(){ + if(jQuery(this).is(':checked')){ + jQuery('#icl_admo_list_table :checkbox').attr('checked', 'checked'); + }else{ + jQuery('#icl_admo_list_table :checkbox').removeAttr('checked'); + } + + }) + + }, + + updates_check: function(){ + jQuery('#icl_adm_updates').fadeIn().html(icl_ajxloaderimg); + jQuery.ajax({ + type: "POST", + url: ajaxurl, + data: {action: 'icl_adm_updates_check'}, + dataType: 'json', + success: function(msg){ + jQuery('#icl_adm_updates').html(msg.html); + } + }); + return false; + + } + + +} \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-translation-analytics/inc/constants.inc b/src/wp-content/plugins/wpml-translation-analytics/inc/constants.inc new file mode 100644 index 0000000..3f79108 --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-analytics/inc/constants.inc @@ -0,0 +1,9 @@ +plugin_localization(); + // If WPML not active, doesn't load the plugin + if(!$this->is_wpml_active()){ + return False; + } + + if(is_admin()){ + add_action('admin_menu', array($this,'menu')); + } + // add message to WPML dashboard widget + add_action('icl_dashboard_widget_content', + array($this, 'icl_dashboard_widget_content')); + } + + /** + * Menu item to appear under WPML menu. + */ + function menu(){ + $top_page = apply_filters('icl_menu_main_page', + basename(ICL_PLUGIN_PATH).'/menu/languages.php'); + add_submenu_page( + $top_page, + __('Translation Analytics','wpml-translation-analytics'), + __('Translation Analytics','wpml-translation-analytics'), + 'manage_options', WPML_TRANSLATION_ANALYTICS_FOLDER.'/menu/main.php' + ); + } + + /** + * The content to be displayed on the dashboard widget. + */ + function icl_dashboard_widget_content(){ + ?> +
              + + + +
              + + + messages[] = array('type'=>$type, 'text'=>$text); + } + + /** + * Displays the current plugin messages. + */ + function show_messages(){ + if(!empty($this->messages)){ + foreach($this->messages as $m){ + printf('

              %s

              ', + $m['type'], $m['text']); + } + } + } + + /** + * Create an account for the website. + * This is used in case the website project has not been set up yet. + */ + function create_account(){ + global $sitepress, $sitepress_settings, $wpdb; + + $user = array(); + $user['create_account'] = 1; + $user['anon'] = 1; + $user['platform_kind'] = 2; + $user['cms_kind'] = 1; + $user['blogid'] = $wpdb->blogid ? $wpdb->blogid : 1; + $user['url'] = get_option('home'); + $user['title'] = get_option('blogname'); + $user['description'] = isset($sitepress_settings['icl_site_description']) ? + $sitepress_settings['icl_site_description'] : ''; + $user['is_verified'] = 1; + $user['interview_translators'] = $sitepress_settings['interview_translators']; + $user['project_kind'] = isset($sitepress_settings['website_kind']) ? + $sitepress_settings['website_kind'] : 2; + $user['pickup_type'] = intval($sitepress_settings['translation_pickup_method']); + $user['ignore_languages'] = 1; + + if (defined('ICL_AFFILIATE_ID') && defined('ICL_AFFILIATE_KEY')) { + $user['affiliate_id'] = ICL_AFFILIATE_ID; + $user['affiliate_key'] = ICL_AFFILIATE_KEY; + } + $notifications = 0; + if (isset($sitepress_settings['icl_notify_complete'])) { + if ($sitepress_settings['icl_notify_complete']) { + $notifications += 1; + } + if ($sitepress_settings['alert_delay']) { + $notifications += 2; + } + } + $user['notifications'] = $notifications; + + require_once ICL_PLUGIN_PATH . '/lib/icl_api.php'; + $icl_query = new ICanLocalizeQuery(); + list($site_id, $access_key) = $icl_query->createAccount($user); + if (!$site_id){ + $user['pickup_type'] = ICL_PRO_TRANSLATION_PICKUP_POLLING; + list($site_id, $access_key) = $icl_query->createAccount($user); + } + if ($site_id) { + if($user['pickup_type'] == ICL_PRO_TRANSLATION_PICKUP_POLLING){ + $sitepress_settings['translation_pickup_method'] = + ICL_PRO_TRANSLATION_PICKUP_POLLING; + } + $sitepress_settings['site_id'] = $site_id; + $sitepress_settings['access_key'] = $access_key; + $sitepress_settings['icl_account_email'] = isset($user['email']) ? + $user['email'] : ''; + $sitepress->get_icl_translator_status($sitepress_settings); + $sitepress->save_settings($sitepress_settings); + } + } + + /** + * Displays a frame showing the translation analytics obtained from + * ICanLocalize. + */ + function show_translation_analytics_dashboard(){ + global $sitepress, $sitepress_settings; + + // Create a new account if needed + if (!isset($sitepress_settings['site_id'])) { + $this->create_account(); + } + + // Try sending first translation snapshot, if nothing was sent yet + $icl_settings = $sitepress->get_settings(); + if(!isset($icl_settings['snapshot_word_count'])){ + $this->send_translation_snapshots(); + } + + if (isset($sitepress_settings['site_id'])) { + $translation_analytics_link = ICL_API_ENDPOINT + . '/translation_analytics/overview?' + . 'accesskey=' . $sitepress_settings['access_key'] + . '&wid=' . $sitepress_settings['site_id'] + . '&project_id=' . $sitepress_settings['site_id'] + . '&project_type=Website' + . '&lc=' . $sitepress->get_locale($sitepress->get_admin_language()) + . '&from_cms=1'; + echo ""; + } else { + echo __('An unknown error has occurred when communicating with the ICanLocalize server. Please try again.', 'sitepress') .'

              '; + } + } + + /** + * Sends the translation snapshot to ICanLocalize. + * + * @param $array $params The parameters to be added when sending the snapshot + */ + function send_translation_snapshot_to_icl($params){ + global $sitepress, $sitepress_settings; + + $params['accesskey'] = $sitepress_settings['access_key']; + $params['website_id'] = $sitepress_settings['site_id']; + + require_once ICL_PLUGIN_PATH . '/lib/Snoopy.class.php'; + require_once ICL_PLUGIN_PATH . '/lib/xml2array.php'; + require_once ICL_PLUGIN_PATH . '/lib/icl_api.php'; + + $icl_query = new ICanLocalizeQuery(); + $request = ICL_API_ENDPOINT + . "/translation_snapshots/create_by_cms.xml"; + $response = $icl_query->_request($request, 'POST', $params); + + if (!$response){ + error_log( + 'Translation Analytics: Could not send translation snapshot:\n' + . $icl_query->error() + ); + } + } + + /** * Creates and sends translation snapshots. * + * Called by the scheduled cron event. + */ + function send_translation_snapshots(){ + require_once ICL_PLUGIN_PATH + . '/inc/translation-management/pro-translation.class.php'; + global $sitepress, $sitepress_settings; + + if (isset($sitepress_settings['site_id'])) { + $jobs = $this->get_translation_jobs(); + $total_word_count = $this->get_translation_word_count($jobs); + + // Do not send snapshots when nothing changed + $icl_settings = $sitepress->get_settings(); + if (isset($icl_settings['snapshot_word_count']) and + ($icl_settings['snapshot_word_count'] == $total_word_count)) { + return; + } else { + $icl_settings['snapshot_word_count'] = $total_word_count; + $sitepress->save_settings($icl_settings); + } + + $datetime = new DateTime(); + if(!empty($total_word_count['total'])){ + foreach ($total_word_count['total'] as $from => $to_list){ + foreach($to_list as $to => $value){ + // Convert language names to icanlocalize format + + $from_language_name = ICL_Pro_Translation::server_languages_map($from); + $to_language_name = ICL_Pro_Translation::server_languages_map($to); + + $params = array ( + 'date' => $datetime->format("Y-m-d\TH:i:s-P"), + 'from_language_name' => $from_language_name, + 'to_language_name' => $to_language_name, + 'words_to_translate' => $value, + 'translated_words' => $total_word_count['finished'][$from][$to], + ); + $this->send_translation_snapshot_to_icl($params); + } + }} + } + } + + /** + * Retrieves translations jobs from the database. + * + * @param string $service The service used on the translation jobs + * + * @return array The retrieved jobs + */ + function get_translation_jobs($service = 'local'){ + require_once ICL_PLUGIN_PATH . '/inc/translation-management/translation-management.class.php'; + + global $wpdb; + $where = " s.status > " . ICL_TM_NOT_TRANSLATED; + $where .= " AND s.status <> " . ICL_TM_DUPLICATE; + + // Getting translations for all services + //$where .= " AND s.translation_service='{$service}'"; + + $orderby = ' j.job_id DESC '; + + $jobs = $wpdb->get_results( + "SELECT j.job_id, t.trid, t.language_code, t.source_language_code, + l1.english_name AS language_name, l2.english_name AS source_language_name, + s.translation_id, s.status, s.translation_service + FROM {$wpdb->prefix}icl_translate_job j + JOIN {$wpdb->prefix}icl_translation_status s ON j.rid = s.rid + JOIN {$wpdb->prefix}icl_translations t ON s.translation_id = t.translation_id + JOIN {$wpdb->prefix}icl_languages l1 ON t.language_code = l1.code + JOIN {$wpdb->prefix}icl_languages l2 ON t.source_language_code = l2.code + WHERE {$where} AND revision IS NULL + ORDER BY {$orderby} + " + ); + + foreach($jobs as $job){ + $job->elements = $wpdb->get_results($wpdb->prepare( + "SELECT * FROM {$wpdb->prefix}icl_translate + WHERE job_id = $job->job_id AND field_translate = 1 + ORDER BY tid ASC" + )); + $job->original_post_type = $wpdb->get_var($wpdb->prepare(" + SELECT element_type + FROM {$wpdb->prefix}icl_translations + WHERE trid=%d AND language_code='%s'", + $job->trid, $job->source_language_code)); + } + return $jobs; + } + + /** + * Updates the number of words (total and finished). + * + * @param array $total_word_count The word count for each language pair + * @param string $from The language id of the original language + * @oaram string $to The language id of the translation language + * @param string $content The translation content + * @param boolean $finished Indicates if the content translation is done + * + * @param int The word count for the translation + */ + function update_word_count(&$total_word_count, $from, $to, $content, $finished){ + require_once ICL_PLUGIN_PATH . '/inc/wpml-api.php'; + $word_count = wpml_get_word_count($content); + $word_count = $word_count['count']; + $total_word_count['total'][$from][$to] += $word_count; + if($finished){ + $total_word_count['finished'][$from][$to] += $word_count; + } + return $word_count; + } + + /** + * Calculates the word count for each language pair according to the + * given jobs. + * + * @param array $jobs The $jobs used to count the number of words. + * + * @return array The word count, total and finished, for each language + * pair + */ + function get_translation_word_count($jobs){ + global $sitepress; + $total_word_count = array(); + + foreach($jobs as $job){ + $from = $job->source_language_name; + $to = $job->language_name; + + // Initializes language pair word count + if (!isset($total_word_count['total'][$from][$to])){ + $total_word_count['total'][$from][$to] = 0; + $total_word_count['finished'][$from][$to] = 0; + } + + foreach($job->elements as $element){ + $icl_tm_original_content = TranslationManagement::decode_field_data( + $element->field_data, $element->field_format); + $translatable_taxonomies = $sitepress->get_translatable_taxonomies( + false, $job->original_post_type); + + if($element->field_type=='tags' || $element->field_type=='categories' || + in_array($element->field_type, $translatable_taxonomies)){ + foreach($icl_tm_original_content as $k=>$c){ + $word_count = $this->update_word_count( + $total_word_count, $from, $to, + $icl_tm_original_content[$k], $element->field_finished + ); + //print $icl_tm_original_content[$k] . "($word_count words)
              "; + } + } else { + $word_count = $this->update_word_count($total_word_count, + $from, $to, $icl_tm_original_content, $element->field_finished); + //print $icl_tm_original_content . "($word_count words)
              "; + } + } + } + return $total_word_count; + } + + // Localization + function plugin_localization(){ + load_plugin_textdomain( 'wpml-translation-analytics', false, + WPML_TRANSLATION_ANALYTICS_FOLDER . '/locale'); + } + + /** + * Checks if WPML is active. If not display a warning message. + * Also checks if WPML is in a compatible version. + */ + function is_wpml_active(){ + if(!defined('ICL_SITEPRESS_VERSION') || ICL_PLUGIN_INACTIVE){ + if ( !function_exists('is_multisite') || !is_multisite() ) { + add_action('admin_notices', array($this, '_no_wpml_warning')); + } + return false; + } elseif(version_compare(ICL_SITEPRESS_VERSION, '2.0.5', '<')){ + add_action('admin_notices', array($this, '_old_wpml_warning')); + return false; + } + return true; + } + + /** + * Displays a warning in case WPML is not activated. + */ + function _no_wpml_warning(){ + ?> +

              + WPML in order to work.', + 'wpml-translation-analytics'), 'http://wpml.org/'); ?>

              + +

              + WPML versions prior 2.0.5.', + 'wpml-translation-analytics'), 'http://wpml.org/'); ?>

              + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/orig/translation-analytics.po b/src/wp-content/plugins/wpml-translation-analytics/locale/orig/translation-analytics.po new file mode 100644 index 0000000..290735a --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-analytics/locale/orig/translation-analytics.po @@ -0,0 +1,31 @@ +# This file was generated by WPML +# WPML is a WordPress plugin that can turn any WordPress site into a full featured multilingual content management system. +# http://wpml.org +msgid "" +msgstr "" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" + +msgid "Translation Analytics" +msgstr "" + +msgid "WPML Translation Analytics allows you to see the\r\n status of your translations and shows you warnings when\r\n completion time may not be met based on planned schedule\r\n versus actual progress." +msgstr "" + +msgid "View Translation Analytics" +msgstr "" + +msgid "An unknown error has occurred when communicating with the ICanLocalize server. Please try again." +msgstr "" + +msgid "WPML Translation Analytics is enabled but not effective.\r\n It requires WPML in order to work." +msgstr "" + +msgid "WPML Translation Management is enabled but not effective.\r\n It is not compatible with WPML versions prior 2.0.5." +msgstr "" diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-ar.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-ar.mo new file mode 100644 index 0000000..e1002f5 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-ar.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-de_DE.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-de_DE.mo new file mode 100644 index 0000000..de6e11e Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-de_DE.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-el.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-el.mo new file mode 100644 index 0000000..9ac2694 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-el.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-es_ES.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-es_ES.mo new file mode 100644 index 0000000..e21dc38 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-es_ES.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-fr_FR.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-fr_FR.mo new file mode 100644 index 0000000..3841fae Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-fr_FR.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-he_IL.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-he_IL.mo new file mode 100644 index 0000000..3ed24af Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-he_IL.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-it_IT.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-it_IT.mo new file mode 100644 index 0000000..06e9062 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-it_IT.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-ja.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-ja.mo new file mode 100644 index 0000000..7ed830e Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-ja.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-ko_KO.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-ko_KO.mo new file mode 100644 index 0000000..3090798 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-ko_KO.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-nl_NL.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-nl_NL.mo new file mode 100644 index 0000000..0c9a810 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-nl_NL.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-pl_PL.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-pl_PL.mo new file mode 100644 index 0000000..ba856bd Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-pl_PL.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-pt_BR.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-pt_BR.mo new file mode 100644 index 0000000..1c589b1 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-pt_BR.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-pt_PT.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-pt_PT.mo new file mode 100644 index 0000000..3afaeb2 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-pt_PT.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-ru_RU.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-ru_RU.mo new file mode 100644 index 0000000..ef5cbaa Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-ru_RU.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-sv_SE.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-sv_SE.mo new file mode 100644 index 0000000..fb82baa Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-sv_SE.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-zh_CN.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-zh_CN.mo new file mode 100644 index 0000000..a559cb8 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-zh_CN.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-zh_TW.mo b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-zh_TW.mo new file mode 100644 index 0000000..7bb4d5f Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-analytics/locale/translation-analytics-zh_TW.mo differ diff --git a/src/wp-content/plugins/wpml-translation-analytics/menu/main.php b/src/wp-content/plugins/wpml-translation-analytics/menu/main.php new file mode 100644 index 0000000..b9503e0 --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-analytics/menu/main.php @@ -0,0 +1,20 @@ + + + + + + + +
              +

              +

              + show_messages(); + $WPML_Translation_Analytics->show_translation_analytics_dashboard(); + ?> +
              + + diff --git a/src/wp-content/plugins/wpml-translation-analytics/plugin.php b/src/wp-content/plugins/wpml-translation-analytics/plugin.php new file mode 100644 index 0000000..8e60969 --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-analytics/plugin.php @@ -0,0 +1,25 @@ +Documentation. +Author: ICanLocalize +Author URI: http://wpml.org +Version: 1.0.1 +*/ +if(defined('WPML_TRANSLATION_ANALYTICS_VERSION')) return; + +define('WPML_TRANSLATION_ANALYTICS_VERSION', '1.0.1'); +define('WPML_TRANSLATION_ANALYTICS_PATH', dirname(__FILE__)); + +require WPML_TRANSLATION_ANALYTICS_PATH . '/inc/constants.inc'; +require WPML_TRANSLATION_ANALYTICS_PATH . '/inc/translation-analytics.class.php'; + +$WPML_Translation_Analytics = new WPML_Translation_Analytics(); + +register_activation_hook(WP_PLUGIN_DIR . '/' . WPML_TRANSLATION_ANALYTICS_FOLDER + . '/plugin.php', array($WPML_Translation_Analytics, 'plugin_activate')); +register_deactivation_hook(WP_PLUGIN_DIR . '/' . WPML_TRANSLATION_ANALYTICS_FOLDER + . '/plugin.php', array($WPML_Translation_Analytics, 'plugin_deactivate')); +?> diff --git a/src/wp-content/plugins/wpml-translation-management/inc/constants.php b/src/wp-content/plugins/wpml-translation-management/inc/constants.php new file mode 100644 index 0000000..f07de84 --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/inc/constants.php @@ -0,0 +1,8 @@ +plugin_localization(); + + // Check if WPML is active. If not display warning message and not load Sticky links + if(!defined('ICL_SITEPRESS_VERSION') || ICL_PLUGIN_INACTIVE){ + if ( !function_exists('is_multisite') || !is_multisite() ) { + add_action('admin_notices', array($this, '_no_wpml_warning')); + } + return false; + }elseif(version_compare(ICL_SITEPRESS_VERSION, '2.0.5', '<')){ + add_action('admin_notices', array($this, '_old_wpml_warning')); + return false; + } + + if(is_admin()){ + add_filter('icl_menu_main_page', array($this, '_icl_menu_main_page')); + add_action('icl_wpml_top_menu_added', array($this, '_icl_hook_top_menu')); + add_action('admin_menu', array($this,'menu')); + add_action('admin_menu', array($this,'menu_fix_order'), 999); // force 'Translations' at the end + + add_filter('plugin_action_links', array($this, 'plugin_action_links'), 10, 2); + + if(!defined('DOING_AJAX')){ + wp_enqueue_script('wpml-tm-scripts', WPML_TM_URL . '/res/js/scripts.js', array('jquery'), WPML_TM_VERSION); + wp_enqueue_style('wpml-tm-styles', WPML_TM_URL . '/res/css/style.css', array(), WPML_TM_VERSION); + wp_enqueue_style('wpml-tm-queue', WPML_TM_URL . '/res/css/translations-queue.css', array(), WPML_TM_VERSION); + } + + add_action( 'admin_print_footer_scripts', array($this, 'wp_tiny_mce_preload_dialogs'), 30 ); + + + add_action('icl_dashboard_widget_content_top', array($this, 'icl_dashboard_widget_content')); + + add_action('icl_post_languages_options_before', array($this, 'icl_post_languages_options_before')); + + // Add a nice warning message if the user tries to edit a post manually and it's actually in the process of being translated + global $pagenow; + if(($pagenow == 'post-new.php' || $pagenow == 'post.php') && (isset($_GET['trid']) || isset($_GET['post']) ) && isset($_GET['lang'])){ + add_action('admin_notices', array($this, '_warn_editing_icl_translation')); + } + + add_action('wp_ajax_dismiss_icl_side_by_site', array($this, 'dismiss_icl_side_by_site')); + add_action('wp_ajax_icl_tm_parent_filter', array($this, '_icl_tm_parent_filter')); + add_action('wp_ajax_icl_tm_toggle_promo', array($this, '_icl_tm_toggle_promo')); + + add_action('admin_footer', array($this, '_icl_nonce_for_ajx')); + } + + return true; + } + + function _no_wpml_warning(){ + ?> +

              WPML in order to work.', 'wpml-translation-management'), + 'http://wpml.org/'); ?>

              + +

              WPML versions prior 2.0.5.', 'wpml-translation-management'), + 'http://wpml.org/'); ?>

              + setup() && 1 < count($sitepress->get_active_languages())) { + + $current_translator = $iclTranslationManagement->get_current_translator(); + if(!empty($current_translator->language_pairs) || current_user_can('manage_options')){ + if(current_user_can('manage_options')){ + $top_page = apply_filters('icl_menu_main_page', basename(ICL_PLUGIN_PATH).'/menu/languages.php'); + add_submenu_page(basename(WPML_TM_PATH) . '/menu/main.php', + __('Translations','wpml-translation-management'), __('Translations','wpml-translation-management'), + 'manage_options', WPML_TM_FOLDER.'/menu/translations-queue.php'); + } else { + add_menu_page(__('Translation interface','wpml-translation-management'), + __('Translation interface','wpml-translation-management'), 'translate', + WPML_TM_FOLDER.'/menu/translations-queue.php',null, ICL_PLUGIN_URL . '/res/img/icon16.png'); + } + } + } + + } + + function menu_fix_order(){ + global $submenu; + + if(!isset($submenu[WPML_TM_FOLDER . '/menu/main.php'])) return; + + // Make sure 'Translations' stays at the end + $found = false; + foreach($submenu[WPML_TM_FOLDER . '/menu/main.php'] as $id => $sm){ + if($sm[2] == WPML_TM_FOLDER . '/menu/translations-queue.php'){ + $found = $sm; + unset($submenu[WPML_TM_FOLDER . '/menu/main.php'][$id]); + break; + } + } + if($found){ + $submenu[WPML_TM_FOLDER . '/menu/main.php'][] = $found; + } + } + + function _warn_editing_icl_translation(){ + global $wpdb, $sitepress, $iclTranslationManagement; + + $post_type = false; + if(isset($_GET['trid'])){ + $translation_id = $wpdb->get_var($wpdb->prepare(" + SELECT t.translation_id + FROM {$wpdb->prefix}icl_translations t + JOIN {$wpdb->prefix}icl_translation_status s ON t.translation_id = s.translation_id + WHERE t.trid=%d AND t.language_code=%s" + , $_GET['trid'], $_GET['lang'])); + }else{ + $post_type = $wpdb->get_var($wpdb->prepare("SELECT post_type FROM {$wpdb->posts} WHERE ID=%d", $_GET['post'])); + $translation_id = $wpdb->get_var($wpdb->prepare(" + SELECT translation_id FROM {$wpdb->prefix}icl_translations WHERE element_id=%d AND element_type=%s AND language_code='%s'" + , $_GET['post'], 'post_' . $post_type, $_GET['lang'])); + } + + if($translation_id){ + $translation_status = $wpdb->get_var($wpdb->prepare(" + SELECT status FROM {$wpdb->prefix}icl_translation_status WHERE translation_id=%d" + , $translation_id)); + if(!is_null($translation_status) && $translation_status > 0 && $translation_status != ICL_TM_DUPLICATE && $translation_status < ICL_TM_COMPLETE){ + echo '

              '. + sprintf(__('Warning: You are trying to edit a translation that is currently in the process of being added using WPML.' , 'wpml-translation-management')) . '

              '. + sprintf(__('Please refer to the Translation management dashboard for the exact status of this translation.' , 'wpml-translation-management'), + admin_url('admin.php?page='.WPML_TM_FOLDER.'/menu/main.php&')) . '

              '; + }else{ + $is_original = false; + if($post_type) { + $element_language_details = $sitepress->get_element_language_details($_GET['post'], 'post_' . $post_type); + $is_original = !$element_language_details->source_language_code; + } + if(!$is_original && $iclTranslationManagement->settings['doc_translation_method'] == ICL_TM_TMETHOD_EDITOR){ + ?> +
              +

              Warning: You are trying to edit a translation using the standard WordPress editor but your site is configured to use the WPML Translation Editor.' , 'wpml-translation-management')?>

              +
              + is_translated_post_type($post_type)) && $iclTranslationManagement->settings['doc_translation_method'] == ICL_TM_TMETHOD_EDITOR){ + ?> +
              +

              Warning: You are trying to add a translation using the standard WordPress editor but your site is configured to use the WPML Translation Editor.' , 'wpml-translation-management')?>

              +

              Translation management dashboard to send the original document to translation.' , 'wpml-translation-management'), admin_url('admin.php?page='.WPML_TM_FOLDER.'/menu/main.php')); ?> +

              +
              + settings['doc_translation_method'] = ICL_TM_TMETHOD_MANUAL; + $iclTranslationManagement->save_settings(); + exit; + } + + function icl_dashboard_widget_content(){ + global $wpdb, $ICL_Pro_Translation, $sitepress_settings, $sitepress, $current_user; + get_currentuserinfo(); + $docs_sent = 0; + $docs_completed = 0; + $docs_waiting = 0; + $docs_statuses = $wpdb->get_results($wpdb->prepare("SELECT status FROM {$wpdb->prefix}icl_translation_status WHERE status > %d", ICL_TM_NOT_TRANSLATED)); + foreach ($docs_statuses as $doc_status) { + $docs_sent += 1; + if ($doc_status->status == ICL_TM_COMPLETE) { + $docs_completed += 1; + } elseif ($doc_status->status == ICL_TM_WAITING_FOR_TRANSLATOR + || $doc_status->status == ICL_TM_IN_PROGRESS) { + $docs_waiting += 1; + } + } + include WPML_TM_PATH . '/menu/_icl_dashboard_widget.php'; + } + + function icl_post_languages_options_before(){ + global $sitepress_settings, $icl_meta_box_globals, $iclTranslationManagement, $sitepress, $post; + + // Get them from Sitepress::meta_box + extract($icl_meta_box_globals); + + /** @var $translations array coming from $icl_meta_box_globals */ + /** @var $active_languages array coming from $icl_meta_box_globals */ + /** @var $selected_language string coming from $icl_meta_box_globals */ + + $translations_count = count($translations) - 1; + + $language_count = count($active_languages) - 1; + + // get languages with translators + $languages_translated = $languages_not_translated = array(); + + if(!empty($sitepress_settings['icl_lang_status'])) + foreach($sitepress_settings['icl_lang_status'] as $k=>$language_pair){ + if(!is_numeric($k)) continue; + if($language_pair['from'] == $selected_language && !empty($language_pair['translators'])){ + $languages_translated[] = $language_pair['to']; + $lang_rates[$language_pair['to']] = $language_pair['max_rate']; + } + } + $languages_not_translated = array_diff(array_keys($active_languages), array_merge(array($selected_language), $languages_translated)); + + // get pro translations + $pro_translations = $iclTranslationManagement->get_element_translations($post->ID, 'post_'.$post->post_type); + + include WPML_TM_PATH . '/menu/_icl_post_menu.php'; + } + + function plugin_action_links($links, $file){ + $this_plugin = basename(WPML_TM_PATH) . '/plugin.php'; + if($file == $this_plugin) { + $links[] = '' . + __('Configure', 'wpml-translation-management') . ''; + } + return $links; + } + + // Localization + function plugin_localization(){ + load_plugin_textdomain( 'wpml-translation-management', false, WPML_TM_FOLDER . '/locale'); + } + + function wp_tiny_mce_preload_dialogs() { + // It's not clear why we need this function + // It was there to fix a javascript error with a plugin + // Can't remember which plugin. + // wp_tiny_mce_preload_dialogs is no longer available in WP 3.2 so we need to check for it. + + if (isset($_GET['page']) && $_GET['page'] == WPML_TM_FOLDER.'/menu/translations-queue.php' && function_exists('wp_tiny_mce_preload_dialogs')) { + wp_tiny_mce_preload_dialogs(); + } + } + + // + function _icl_tm_parent_filter(){ + global $sitepress; + $sitepress->switch_lang($_POST['lang']); + if($_POST['type'] == 'page'){ + $html = wp_dropdown_pages(array('echo'=>0, 'name'=>'filter[parent_id]', 'selected'=>$_POST['parent_id'])); + }elseif($_POST['type'] == 'category'){ + $html = wp_dropdown_categories(array('echo'=>0, 'orderby'=>'name', 'name'=>'filter[parent_id]', 'selected'=>$_POST['parent_id'])); + }else{ + $html = ''; + } + $sitepress->switch_lang(); + + $html .= "
                      "; + if(is_null($_POST['parent_all']) || $_POST['parent_all']) $checked = ' checked="checked"'; else $checked=""; + $html .= "'; + $html .= "
                      "; + if(empty($_POST['parent_all'])) $checked = ' checked="checked"'; else $checked=""; + $html .= "'; + + echo json_encode(array('html'=>$html)); + exit; + + } + + function _icl_tm_toggle_promo(){ + global $sitepress; + $iclsettings['dashboard']['hide_icl_promo'] = @intval($_POST['value']); + $sitepress->save_settings($iclsettings); + exit; + } + + function _icl_nonce_for_ajx(){ + wp_nonce_field('get_translator_status_nonce', '_icl_nonce_gts'); + } + +} diff --git a/src/wp-content/plugins/wpml-translation-management/license.txt b/src/wp-content/plugins/wpml-translation-management/license.txt new file mode 100644 index 0000000..d31195a --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/license.txt @@ -0,0 +1,281 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + diff --git a/src/wp-content/plugins/wpml-translation-management/locale/orig/wpml-translation-management.po b/src/wp-content/plugins/wpml-translation-management/locale/orig/wpml-translation-management.po new file mode 100644 index 0000000..1bfda0f --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/locale/orig/wpml-translation-management.po @@ -0,0 +1,709 @@ +# This file was generated by WPML +# WPML is a WordPress plugin that can turn any WordPress site into a full featured multilingual content management system. +# http://wpml.org +msgid "" +msgstr "" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" + +msgid "WPML Translation Management is enabled but not effective. It requires WPML in order to work." +msgstr "" + +msgid "WPML Translation Management is enabled but not effective. It is not compatible with WPML versions prior 2.0.5." +msgstr "" + +msgid "Translation Management" +msgstr "" + +msgid "Translations" +msgstr "" + +msgid "Translation interface" +msgstr "" + +msgid "Warning: You are trying to edit a translation that is currently in the process of being added using WPML." +msgstr "" + +msgid "Please refer to the Translation management dashboard for the exact status of this translation." +msgstr "" + +msgid "You should use Translation management dashboard to send the original document to translation." +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Show all items under this parent." +msgstr "" + +msgid "Show only items that are immediately under this parent." +msgstr "" + +msgid "Warning: You are trying to edit a translation using the standard WordPress editor but your site is configured to use the WPML Translation Editor." +msgstr "" + +msgid "Warning: You are trying to add a translation using the standard WordPress editor but your site is configured to use the WPML Translation Editor." +msgstr "" + +msgid "Translation management" +msgstr "" + +msgid "Translation Dashboard" +msgstr "" + +msgid "Translators" +msgstr "" + +msgid "Translation Jobs" +msgstr "" + +msgid "Multilingual Content Setup" +msgstr "" + +msgid "Translation Notifications" +msgstr "" + +msgid "Published" +msgstr "" + +msgid "Draft" +msgstr "" + +msgid "Pending Review" +msgstr "" + +msgid "Scheduled" +msgstr "" + +msgid "Private" +msgstr "" + +msgid "Get quote" +msgstr "" + +msgid "Add translators from ICanLocalize" +msgstr "" + +msgid "Contact ICanLocalize" +msgstr "" + +msgid "Hide this" +msgstr "" + +msgid "Need translators?" +msgstr "" + +msgid "Show documents in:" +msgstr "" + +msgid "Translation status:" +msgstr "" + +msgid "All documents" +msgstr "" + +msgid "Not translated or needs updating" +msgstr "" + +msgid "Needs updating" +msgstr "" + +msgid "Translation in progress" +msgstr "" + +msgid "Translation complete" +msgstr "" + +msgid "Filters:" +msgstr "" + +msgid "Parent:" +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "Date" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Edit note for the translators" +msgstr "" + +msgid "Add note for the translators" +msgstr "" + +msgid "Not translated" +msgstr "" + +msgid "Waiting for translator" +msgstr "" + +msgid "In progress" +msgstr "" + +msgid "Duplicate" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "needs update" +msgstr "" + +msgid "Show %d documents per page" +msgstr "" + +msgid "Word count estimate:" +msgstr "" + +msgid "%s words" +msgstr "" + +msgid "in %s document(s)" +msgstr "" + +msgid "show all" +msgstr "" + +msgid "Displaying %s–%s of %s" +msgstr "" + +msgid "Select which documents to display" +msgstr "" + +msgid "All languages" +msgstr "" + +msgid "Translated to:" +msgstr "" + +msgid "Status:" +msgstr "" + +msgid "Any" +msgstr "" + +msgid "Type:" +msgstr "" + +msgid "Title:" +msgstr "" + +msgid "Page" +msgstr "" + +msgid "Category" +msgstr "" + +msgid "Note for translators" +msgstr "" + +msgid "No documents found" +msgstr "" + +msgid "Note for the translators" +msgstr "" + +msgid "Clear" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Translation options" +msgstr "" + +msgid "Translate all" +msgstr "" + +msgid "Update none" +msgstr "" + +msgid "Duplicate all" +msgstr "" + +msgid "Translate by" +msgstr "" + +msgid "Manage translators" +msgstr "" + +msgid "Do not update" +msgstr "" + +msgid "Duplicate content" +msgstr "" + +msgid "Send documents" +msgstr "" + +msgid "ICanLocalize account status" +msgstr "" + +msgid "clear" +msgstr "" + +msgid "Any existing content (translations) will be overwritten when creating duplicates." +msgstr "" + +msgid "When duplicating content, please first duplicate parent pages to maintain the site's hierarchy." +msgstr "" + +msgid "All" +msgstr "" + +msgid "Chat with translator" +msgstr "" + +msgid "Filter by" +msgstr "" + +msgid "Translation jobs for:" +msgstr "" + +msgid "All translation jobs" +msgstr "" + +msgid "Content duplication" +msgstr "" + +msgid "From" +msgstr "" + +msgid "Any language" +msgstr "" + +msgid "To" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Job ID" +msgstr "" + +msgid "Language" +msgstr "" + +msgid "Translator" +msgstr "" + +msgid "No translation jobs found" +msgstr "" + +msgid " - (needs update)" +msgstr "" + +msgid "Send" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Cancel selected" +msgstr "" + +msgid "Are you sure you want to cancel these jobs?" +msgstr "" + +msgid "WARNING: %s job(s) are currently being translated." +msgstr "" + +msgid "Are you sure you want to abort this translation?" +msgstr "" + +msgid "Abort translation" +msgstr "" + +msgid "Same as the original document" +msgstr "" + +msgid "Choose if translations should be published when received. Note: If Publish is selected, the translation will only be published if the original node is published when the translation is received." +msgstr "" + +msgid "Auto-generate from title (default)" +msgstr "" + +msgid "Translate (this will include the slug in the translation and not create it automatically from the title)" +msgstr "" + +msgid "Copy from original language if translation language uses encoded URLs" +msgstr "" + +msgid "Send an email notification when translations complete" +msgstr "" + +msgid "How to translate posts and pages" +msgstr "" + +msgid "Create translations manually" +msgstr "" + +msgid "Use the translation editor" +msgstr "" + +msgid "Send to professional translation" +msgstr "" + +msgid "Show translation instructions in the list of pages" +msgstr "" + +msgid "Learn more about the different translation options" +msgstr "" + +msgid "Translated documents options" +msgstr "" + +msgid "Document status" +msgstr "" + +msgid "Page url" +msgstr "" + +msgid "Translation pickup mode" +msgstr "" + +msgid "How should the site receive completed translations from ICanLocalize?" +msgstr "" + +msgid "ICanLocalize will deliver translations automatically using XML-RPC" +msgstr "" + +msgid "Hide reminders" +msgstr "" + +msgid "The site will fetch translations manually" +msgstr "" + +msgid "WPML can read a configuration file that tells it what needs translation in themes and plugins. The file is named wpml-config.xml and it's placed in the root folder of the plugin or theme." +msgstr "" + +msgid "Learn more" +msgstr "" + +msgid "Custom fields translation" +msgstr "" + +msgid "No custom fields found. It is possible that they will only show up here after you add more posts after installing a new plugin." +msgstr "" + +msgid "Don't translate" +msgstr "" + +msgid "Copy from original to translation" +msgstr "" + +msgid "Translate" +msgstr "" + +msgid "Admin Strings to Translate" +msgstr "" + +msgid "Edit translatable strings" +msgstr "" + +msgid "Notify translator about new job:" +msgstr "" + +msgid "Notify immediately" +msgstr "" + +msgid "No notification" +msgstr "" + +msgid "Notify translator manager when job is completed:" +msgstr "" + +msgid "Daily notifications summary" +msgstr "" + +msgid "Notify translator when removed from job:" +msgstr "" + +msgid "Edit translator" +msgstr "" + +msgid "Add translator" +msgstr "" + +msgid "From language:" +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "To language:" +msgstr "" + +msgid "(only for strings)" +msgstr "" + +msgid "Select translation service" +msgstr "" + +msgid " (inactive)" +msgstr "" + +msgid "%s to %s" +msgstr "" + +msgid "Local" +msgstr "" + +msgid "Your own translators" +msgstr "" + +msgid "All WordPress users are already translators. To add more translators, first create accounts for them." +msgstr "" + +msgid "Select user." +msgstr "" + +msgid "To add translators, they must first have accounts in WordPress. Translators can have any editing privileges, including subscriber." +msgstr "" + +msgid "Editing language pairs for %s" +msgstr "" + +msgid "From %s" +msgstr "" + +msgid "to" +msgstr "" + +msgid "Update" +msgstr "" + +msgid "Add as translator" +msgstr "" + +msgid "search" +msgstr "" + +msgid "ICanLocalize" +msgstr "" + +msgid "No add translator interface available" +msgstr "" + +msgid "Current translators" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Languages" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Remove" +msgstr "" + +msgid "Language pairs" +msgstr "" + +msgid "edit languages" +msgstr "" + +msgid "You haven't added any translator accounts yet." +msgstr "" + +msgid "Translation editor" +msgstr "" + +msgid "You are translating %s from %s to %s." +msgstr "" + +msgid "Copy from %s" +msgstr "" + +msgid "Jobs queue" +msgstr "" + +msgid "Are you sure you want to resign from this job?" +msgstr "" + +msgid "Note for translator" +msgstr "" + +msgid "Click to toggle" +msgstr "" + +msgid "Translated content" +msgstr "" + +msgid "Translated field" +msgstr "" + +msgid "This translation is finished." +msgstr "" + +msgid "This field cannot be empty" +msgstr "" + +msgid "Original content" +msgstr "" + +msgid "HTML" +msgstr "" + +msgid "Visual" +msgstr "" + +msgid "Show Changes" +msgstr "" + +msgid "Translation of this document is complete" +msgstr "" + +msgid "Please review the document translation and fill in all the required fields." +msgstr "" + +msgid "Save translation" +msgstr "" + +msgid "Resign" +msgstr "" + +msgid "You've resigned from this job." +msgstr "" + +msgid "Translation updated: " +msgstr "" + +msgid "Translation added: " +msgstr "" + +msgid "Translations queue" +msgstr "" + +msgid "View original" +msgstr "" + +msgid "This job is assigned specifically to you." +msgstr "" + +msgid "No translation languages configured for this user." +msgstr "" + +msgid "Available to translate" +msgstr "" + +msgid "Bulk Actions" +msgstr "" + +msgid "edit" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "%d documents sent to translation.
              %d are complete, %d waiting for translation." +msgstr "" + +msgid "%s offers affordable professional translation via a streamlined process." +msgstr "" + +msgid "Your translators" +msgstr "" + +msgid "Translate content" +msgstr "" + +msgid "Need translation work?" +msgstr "" + +msgid "Get translators" +msgstr "" + +msgid "Content translation" +msgstr "" + +msgid "Add translators from ICanLocalize »" +msgstr "" + +msgid "Add your own translators »" +msgstr "" + +msgid "Translate contents »" +msgstr "" + +msgid "Update %s translation" +msgstr "" + +msgid "Translate to %s" +msgstr "" + +msgid "in progress" +msgstr "" + +msgid "up to date" +msgstr "" + +msgid "Select translators" +msgstr "" + +msgid "Get %s translators" +msgstr "" + +msgid "Cost: %s USD" +msgstr "" + +msgid "Send to translation" +msgstr "" + +msgid "Estimated cost: %s USD" +msgstr "" + +msgid "Cost estimate" +msgstr "" + +msgid "why estimated?" +msgstr "" + +msgid "About Our Translators" +msgstr "" + +msgid "hide" +msgstr "" + +msgid "show" +msgstr "" + +msgid "Professional translation" +msgstr "" + +msgid "Close" +msgstr "" + +msgid "Your changes to the note for the translators are not saved." +msgstr "" + +msgid "Note not saved yet" +msgstr "" + +msgid "ICanLocalize offers expert translators at competitive rates." +msgstr "" + +msgid "Failed sending to translation." +msgstr "" + +msgid "Sent to translation." +msgstr "" diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-ar.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-ar.mo new file mode 100644 index 0000000..6809c37 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-ar.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-de_DE.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-de_DE.mo new file mode 100644 index 0000000..59028f6 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-de_DE.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-el.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-el.mo new file mode 100644 index 0000000..2aaf504 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-el.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-es_ES.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-es_ES.mo new file mode 100644 index 0000000..94372ce Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-es_ES.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-fr_FR.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-fr_FR.mo new file mode 100644 index 0000000..73977cf Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-fr_FR.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-he_IL.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-he_IL.mo new file mode 100644 index 0000000..6ef3814 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-he_IL.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-it_IT.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-it_IT.mo new file mode 100644 index 0000000..ed15f3b Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-it_IT.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-ja.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-ja.mo new file mode 100644 index 0000000..9ed522f Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-ja.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-ko_KO.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-ko_KO.mo new file mode 100644 index 0000000..aa68c36 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-ko_KO.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-nl_NL.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-nl_NL.mo new file mode 100644 index 0000000..2759eff Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-nl_NL.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-pl_PL.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-pl_PL.mo new file mode 100644 index 0000000..b622d2c Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-pl_PL.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-pt_BR.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-pt_BR.mo new file mode 100644 index 0000000..1b40d78 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-pt_BR.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-pt_PT.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-pt_PT.mo new file mode 100644 index 0000000..747ef6b Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-pt_PT.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-ru_RU.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-ru_RU.mo new file mode 100644 index 0000000..8873cc0 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-ru_RU.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-sv_SE.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-sv_SE.mo new file mode 100644 index 0000000..c00e192 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-sv_SE.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-zh_CN.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-zh_CN.mo new file mode 100644 index 0000000..457606c Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-zh_CN.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-zh_TW.mo b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-zh_TW.mo new file mode 100644 index 0000000..deff12a Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/locale/wpml-translation-management-zh_TW.mo differ diff --git a/src/wp-content/plugins/wpml-translation-management/menu/_icl_dashboard_widget.php b/src/wp-content/plugins/wpml-translation-management/menu/_icl_dashboard_widget.php new file mode 100644 index 0000000..dd5e21b --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/menu/_icl_dashboard_widget.php @@ -0,0 +1,89 @@ + + +

              %d are complete, %d waiting for translation.', 'wpml-translation-management'), + $docs_sent, $docs_completed, $docs_waiting); ?>

              +

              + + +
              + +

              ICanLocalize') ?>

              + +

              + +

              + + + get_icl_manually_tranlations_box('icl_cyan_box'); + ?> + get_active_languages()) > 1): ?> +
              +
              + + \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-translation-management/menu/_icl_post_menu.php b/src/wp-content/plugins/wpml-translation-management/menu/_icl_post_menu.php new file mode 100644 index 0000000..292391f --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/menu/_icl_post_menu.php @@ -0,0 +1,134 @@ + +
              +
               
              + + + + +
              style="display:none;"> + $tr){ + $status = $iclTranslationManagement->get_element_translation($post->ID, $_tolang , 'post_' . $post->post_type); + if(isset($status->translator_id)) $tr['id'] = $status->translator_id; + if($iclTranslationManagement->translator_exists($tr['id'], $language_pair['from'], $_tolang, $tr['type'])){ + $icl_selected_translators[$_tolang] = $tr['type'] == 'local' ? $tr['id'] : $tr['id'] . '-' . $tr['type']; + } + } + } + + echo '
                '; + foreach($languages_translated as $lang){ + if(isset($pro_translations[$lang]) + && ($pro_translations[$lang]->status == ICL_TM_IN_PROGRESS || + ($pro_translations[$lang]->status == ICL_TM_COMPLETE && !$pro_translations[$lang]->needs_update))){ + $disabled = ' disabled="disabled"'; + }else{ + $disabled = ''; + } + echo '
              • '; + global $source_language; + $iclTranslationManagement->translators_dropdown(array( + 'from' => $source_language, + 'to' => $lang, + 'name' => 'translator['.$lang.']', + 'selected' => isset($icl_selected_translators[$lang]) ? $icl_selected_translators[$lang] : 0, + 'services' => array('icanlocalize'), + 'show_service' => false, + 'disabled' => $disabled + )); + + echo '
              • '; + } + echo '
              '; + } + if(!empty($languages_not_translated)){ + echo ''; + } + if(!empty($languages_translated)){ + $note = trim(get_post_meta($post->ID, '_icl_translator_note', true)); + } + ?> + +
              +

              +
              + + + +
              disabled="disabled" />
              + +
              +
              +
              + +
              0.00');?>
              + + + + ID ) ?> + +
              + + ID, $selected_language)) * 0.09); + ?> +
              +
              + (create_icl_popup_link('http://www.icanlocalize.com/destinations/go?name=cms-cost-estimate&iso='. + $sitepress->get_locale($sitepress->get_admin_language()).'&src='.get_option('home'), + array( + 'ar'=>1, + 'title'=>__('Cost estimate', 'wpml-translation-management'), + ) + ) + . __('why estimated?', 'wpml-translation-management');?>) +
              + +
              +

              create_icl_popup_link('http://www.icanlocalize.com/destinations/go?name=moreinfo-wp&iso='. + $sitepress->get_locale($sitepress->get_admin_language()).'&src='.get_option('home'), + array('title' => __('About Our Translators', 'wpml-translation-management'), 'ar' => 1)) ?>

              +

              +

              create_icl_popup_link('http://www.icanlocalize.com/destinations/go?name=wp-about-translators&iso='. + $sitepress->get_locale($sitepress->get_admin_language()).'&src='.get_option('home'), + array('title' => __('About Our Translators', 'wpml-translation-management'), 'ar' => 1)) ?>

              + + +
              + + + +
              + +
              + diff --git a/src/wp-content/plugins/wpml-translation-management/menu/main.php b/src/wp-content/plugins/wpml-translation-management/menu/main.php new file mode 100644 index 0000000..18af805 --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/menu/main.php @@ -0,0 +1,53 @@ +get_selected_translator(); +?> +
              +

              +

              + + + + + + + + + + + +
              + + + +
              + + +
              diff --git a/src/wp-content/plugins/wpml-translation-management/menu/sub/dashboard.php b/src/wp-content/plugins/wpml-translation-management/menu/sub/dashboard.php new file mode 100644 index 0000000..0cfa43b --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/menu/sub/dashboard.php @@ -0,0 +1,585 @@ + +get_current_language(); +} + +if(!isset($icl_translation_filter['to_lang'])){ + $icl_translation_filter['to_lang'] = isset($_GET['to_lang'])?$_GET['to_lang']:''; +} + +if($icl_translation_filter['to_lang'] == $icl_translation_filter['from_lang']){ + $icl_translation_filter['to_lang'] = false; +} + +if(!isset($icl_translation_filter['tstatus'])){ + $icl_translation_filter['tstatus'] = isset($_GET['tstatus'])?$_GET['tstatus']:'not'; +} + +if(!isset($icl_translation_filter['sort_by']) || !$icl_translation_filter['sort_by']){ $icl_translation_filter['sort_by'] = 'p.post_date';} +if(!isset($icl_translation_filter['sort_order']) || !$icl_translation_filter['sort_order']){ $icl_translation_filter['sort_order'] = 'DESC';} +$sort_order_next = $icl_translation_filter['sort_order'] == 'ASC' ? 'DESC' : 'ASC'; +$title_sort_link = 'admin.php?page='.WPML_TM_FOLDER.'/menu/main.php&sm=dashboard&icl_tm_action=sort&sort_by=p.post_title&sort_order='.$sort_order_next; +$date_sort_link = 'admin.php?page='.WPML_TM_FOLDER.'/menu/main.php&sm=dashboard&icl_tm_action=sort&sort_by=p.post_date&sort_order='.$sort_order_next; + +$icl_post_statuses = array( + 'publish' =>__('Published', 'wpml-translation-management'), + 'draft' =>__('Draft', 'wpml-translation-management'), + 'pending' =>__('Pending Review', 'wpml-translation-management'), + 'future' =>__('Scheduled', 'wpml-translation-management'), + 'private' =>__('Private', 'wpml-translation-management') +); + +// Get the document types that we can translate +$icl_post_types = $sitepress->get_translatable_documents(); +$icl_post_types = apply_filters('WPML_get_translatable_types', $icl_post_types); +foreach ($icl_post_types as $id => $type_info) { + if (is_string($type_info)) { + + // this is an external type returned by WPML_get_translatable_types + $new_type = new stdClass(); + $new_type->labels = new stdClass(); + $new_type->labels->singular_name = $type_info; + $new_type->labels->name = $type_info; + + $new_type->external_type = 1; + + $icl_post_types[$id] = $new_type; + } +} + +$icl_dashboard_settings = isset($sitepress_settings['dashboard']) ? $sitepress_settings['dashboard'] : array(); + +$icl_translation_filter['limit_no'] = isset($_GET['show_all']) && $_GET['show_all'] ? 10000 : ICL_TM_DOCS_PER_PAGE; +if(!isset($icl_translation_filter['parent_type'])) $icl_translation_filter['parent_type'] = 'any'; + + +// Get all the documents +$icl_documents = $iclTranslationManagement->get_documents($icl_translation_filter); + +// Get any documents from external sources. +foreach ($icl_post_types as $id => $type_info) { + if (isset($icl_translation_filter['type']) && $id == $icl_translation_filter['type'] + && isset($type_info->external_type) && $type_info->external_type) { + $icl_documents = apply_filters('WPML_get_translatable_items', $icl_documents, $id, $icl_translation_filter); + } +} + +$icl_translators = TranslationManagement::get_blog_translators(); + +$icl_selected_posts = array(); +$icl_selected_languages = array(); +$icl_selected_translators = array(); +if(!empty($iclTranslationManagement->dashboard_select)){ + $icl_selected_posts = $iclTranslationManagement->dashboard_select['post']; + $icl_selected_languages = $iclTranslationManagement->dashboard_select['translate_to']; + $icl_selected_translators = $iclTranslationManagement->dashboard_select['translator']; +} +if(isset($icl_translation_filter['icl_selected_posts'])){ + parse_str($icl_translation_filter['icl_selected_posts'], $icl_selected_posts); +} + +if(!empty($sitepress_settings['default_translators'][$icl_translation_filter['from_lang']])){ + foreach($sitepress_settings['default_translators'][$icl_translation_filter['from_lang']] as $_tolang => $tr){ + if($iclTranslationManagement->translator_exists($tr['id'], $icl_translation_filter['from_lang'], $_tolang, $tr['type'])){ + $icl_selected_translators[$_tolang] = $tr['type'] == 'local' ? $tr['id'] : $tr['id'] . '-' . $tr['type']; + } + } +} +foreach($sitepress->get_active_languages()as $lang){ + if(empty($icl_selected_translators[$lang['code']]) && !empty($sitepress_settings['icl_lang_status']) && is_array($sitepress_settings['icl_lang_status'])){ + foreach($sitepress_settings['icl_lang_status'] as $lpair){ + if($lpair['from']==$icl_translation_filter['from_lang'] && $lpair['to']==$lang['code'] && !empty($lpair['translators'])){ + $icl_selected_translators[$lang['code']] = $lpair['translators']['0']['id'] . '-icanlocalize'; + } + } + } +} + +if(!defined('ICL_DONT_PROMOTE') || !ICL_DONT_PROMOTE){ + + $icl_translation_services = apply_filters('icl_translation_services', array()); + $icl_translation_services = array_merge($icl_translation_services, TranslationManagement::icanlocalize_service_info()); + if (!empty($icl_translation_services)) { + $icls_output = ''; + + if(empty($icl_dashboard_settings['hide_icl_promo'])){ + $exp_hidden = ''; + $col_hidden = ' hidden'; + }else{ + $exp_hidden = ' hidden'; + $col_hidden = ''; + } + + $icls_output .= '
              '; + foreach ($icl_translation_services as $key => $service) { + $icls_output .= '
              '; + $icls_output .= ''; + $icls_output .= '

              ' . $service['header']. '

              '; + $icls_output .= '
              '. $service['description'] . '
              '; + $icls_output .= '
              '; + $icls_output .= '

              '; + $icls_output .= '' . __( 'Get quote', 'wpml-translation-management' ) . ''; + $icls_output .= '' . __( 'Add translators from ICanLocalize', 'wpml-translation-management' ) . ''; + $icls_output .= '

              '; + $icls_output .= ''; + } + $icls_output .= '
              '; + + $icls_output .= '' . __('Need translators?', 'wpml-translation-management') . ''; + + + } + +}else{ + $icls_output = ""; +} +?> + +
              + + + + + + + + + + + + + + + +
              + + +   + +   + +
              +
              +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + +  
              + +  
              + + + + + +   + +
              + + + +
              +

              +
              + + +
              + +
              +
              +
              + + + +
              + + + + + + + + + + + + + + + get_active_languages() as $lang): if($lang['code']==$icl_translation_filter['from_lang']) continue;?> + + + + + + + + + + + + + + + + + + get_active_languages() as $lang): if($lang['code']==$icl_translation_filter['from_lang']) continue;?> + + + + + + + + + + + + + + + + + class="alternate"> + + + + + + + + needs_update ? ICL_TM_NEEDS_UPDATE : intval($doc->status); ?> + + + get_active_languages() as $lang): if($lang['code']==$icl_translation_filter['from_lang']) continue;?> + $_prop_up)) $doc->$_prop_up = false; + if(!isset($doc->$_prop_st)) $doc->$_prop_st = ICL_TM_NOT_TRANSLATED; + + switch(intval($doc->$_prop_st)){ + case ICL_TM_NOT_TRANSLATED : $tst_title = esc_attr(__('Not translated','wpml-translation-management')); break; + case ICL_TM_WAITING_FOR_TRANSLATOR : $tst_title = esc_attr(__('Waiting for translator','wpml-translation-management')); break; + case ICL_TM_IN_PROGRESS : $tst_title = esc_attr(__('In progress','wpml-translation-management')); break; + case ICL_TM_DUPLICATE : $tst_title = esc_attr(__('Duplicate','wpml-translation-management')); break; + case ICL_TM_COMPLETE : $tst_title = esc_attr(__('Complete','wpml-translation-management')); break; + default: $tst_title = ''; + } + $docst = ($doc->$_prop_up && $icl_translation_filter['tstatus']=='not') ? ICL_TM_NEEDS_UPDATE : intval($doc->$_prop_st); + if($doc->$_prop_up){ + $tst_title .= ' - ' . esc_attr(__('needs update','wpml-translation-management')); + } + + ?> + + + + + + + + + +
              />  +   + + note + <?php echo $icl_translation_filter['to_lang'] ?> + + <?php echo $lang['code'] ?> +
              />  +   + + note + <?php echo $icl_translation_filter['to_lang'] ?> + + <?php echo $lang['code'] ?> +
              + post_id, $icl_selected_posts))) echo 'checked="checked"'?> /> + + post_id); ?> + post_id, $icl_translation_filter['from_lang']); + ?> + +   +
              + is_translation){ + $note = get_post_meta($doc->post_id, '_icl_translator_note', true); + if($note){ + $note_text = __('Edit note for the translators', 'wpml-translation-management'); + $note_icon = 'edit_translation.png'; + }else{ + $note_text = __('Add note for the translators', 'wpml-translation-management'); + $note_icon = 'add_translation.png'; + } + } + ?> + + + + + +
              + disabled="disabled" /> + + + + post_id) ?> +
              +
              +
              + post_type]->labels->singular_name != "" ? $icl_post_types[$doc->post_type]->labels->singular_name : $icl_post_types[$doc->post_type]->labels->name; ?> + + post_status])) echo $icl_post_statuses[$doc->post_status]; else echo $doc->post_status?> + <?php echo $_st ?> + + <?php echo $tst_title ?> +
              + + + ICL_TM_DOCS_PER_PAGE){ + echo '' . sprintf(__('Show %d documents per page', 'wpml-translation-management'), + ICL_TM_DOCS_PER_PAGE) . ''; + } + // pagination + $page_links = paginate_links( array( + 'base' => add_query_arg('paged', '%#%' ), + 'format' => '', + 'prev_text' => '«', + 'next_text' => '»', + 'total' => $wp_query->max_num_pages, + 'current' => $_GET['paged'], + 'add_args' => isset($icl_translation_filter)?$icl_translation_filter:array() + )); + + ?> + +
              +
              + 0')?> + '); ?> +
              + +
              + found_posts > ICL_TM_DOCS_PER_PAGE){ + echo '' . __('show all', 'wpml-translation-management') . ''; + } + ?> + ' . __( 'Displaying %s–%s of %s', 'wpml-translation-management' ) . '%s', + number_format_i18n( ( $_GET['paged'] - 1 ) * $wp_query->query_vars['posts_per_page'] + 1 ), + number_format_i18n( min( $_GET['paged'] * $wp_query->query_vars['posts_per_page'], $wp_query->found_posts ) ), + number_format_i18n( $wp_query->found_posts ), + $page_links + ); echo $page_links_text; ?> +
              + +
              + + + + + + + + + + + + + + +
              + + + + + + + + + + + get_active_languages()as $lang):?> + + + + + + + + + +
               
              + + translators_dropdown(array( + 'from' => $icl_translation_filter['from_lang'], + 'to' => $lang['code'], + 'name' => 'translator['.$lang['code'].']', + 'selected' => isset($icl_selected_translators[$lang['code']]) ? $icl_selected_translators[$lang['code']] : 0, + 'services' => array('local', 'icanlocalize') + )); + ?> +    | + + + + +
              +
              + + + disabled="disabled" />

              + +
              + +
              + +
              + get_icl_manually_tranlations_box('icl_cyan_box'); // shows only when translation polling is on and there are translations in progress ?> + +icl_account_configured() && $sitepress_settings['icl_html_status']): ?> +
              +

              + +
              + diff --git a/src/wp-content/plugins/wpml-translation-management/menu/sub/jobs.php b/src/wp-content/plugins/wpml-translation-management/menu/sub/jobs.php new file mode 100644 index 0000000..744dcf0 --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/menu/sub/jobs.php @@ -0,0 +1,205 @@ + +get_translation_jobs((array)$icl_translation_filter); +?> +
              + +
              + + + + + + + + + + + + +
              +   +   +   + +   + +
              +
              + +
              + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + status == ICL_TM_WAITING_FOR_TRANSLATOR || $job->status == ICL_TM_IN_PROGRESS) && $job->translation_service=='local'): ?> + + +   + + job_id; ?>original_doc_id, $job->post_title); ?>lang_text ?>status2text($job->status) ?> + needs_update) _e(' - (needs update)', 'wpml-translation-management'); ?> + + translator_id) && $job->status != ICL_TM_WAITING_FOR_TRANSLATOR): ?> + translation_service == 'icanlocalize'): ?> + source_language_code && $lp['to'] == $job->language_code){ + $contract_id = $lp['contract_id']; + $lang_tr_id = $lp['id']; + break; + } + } + if($contract_id && $lang_tr_id){ + echo $sitepress->create_icl_popup_link(ICL_API_ENDPOINT . '/websites/' . $sitepress_settings['site_id'] + . '/website_translation_offers/' . $lang_tr_id . '/website_translation_contracts/' + . $contract_id, array('title' => __('Chat with translator', 'wpml-translation-management'), 'unload_cb' => 'icl_thickbox_refresh')) . esc_html($job->translator_name) . ' (ICanLocalize)'; + } + ?> + + translator_name) ?> + + translation_service=='local' && $job->status == ICL_TM_IN_PROGRESS): ?> + + + + + + translators_dropdown( + array( + 'name'=>'icl_tj_translator_for_'.$job->job_id , + 'from'=>$job->source_language_code, + 'to'=>$job->language_code, + 'selected'=>@intval($job->translator_id), + 'services' => array('local', 'icanlocalize') + ) + ); + ?> + + +   + + + +
              + + +
              + + + + + +
              + + add_query_arg('paged', '%#%' ), + 'format' => '', + 'prev_text' => '«', + 'next_text' => '»', + 'total' => $wp_query->max_num_pages, + 'current' => $_GET['paged'], + 'add_args' => isset($icl_translation_filter)?$icl_translation_filter:array() + )); + ?> +
              + +
              ' . __( 'Displaying %s–%s of %s', 'wpml-translation-management' ) . '%s', + number_format_i18n( ( $_GET['paged'] - 1 ) * $wp_query->query_vars['posts_per_page'] + 1 ), + number_format_i18n( min( $_GET['paged'] * $wp_query->query_vars['posts_per_page'], $wp_query->found_posts ) ), + number_format_i18n( $wp_query->found_posts ), + $page_links + ); echo $page_links_text; ?> +
              + +
              + diff --git a/src/wp-content/plugins/wpml-translation-management/menu/sub/mcsetup.php b/src/wp-content/plugins/wpml-translation-management/menu/sub/mcsetup.php new file mode 100644 index 0000000..9338c74 --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/menu/sub/mcsetup.php @@ -0,0 +1,393 @@ + +get_col( " + SELECT meta_key + FROM $wpdb->postmeta + GROUP BY meta_key + ORDER BY meta_key + LIMIT $cf_keys_limit" ); + + $cf_keys_exceptions = array('_edit_last', '_edit_lock', '_wp_page_template', '_wp_attachment_metadata', '_icl_translator_note', '_alp_processed', + '_encloseme', '_pingme', '_wpml_media_duplicate', '_wpml_media_featured', '_wp_attached_file', '_thumbnail_id'); + // '_wp_attached_file' + + $cf_keys = array_diff($cf_keys, $cf_keys_exceptions); + + $cf_keys = array_unique(@array_merge($cf_keys, (array)$iclTranslationManagement->settings['custom_fields_readonly_config'])); + + if ( $cf_keys ) + natcasesort($cf_keys); + + $cf_settings = $iclTranslationManagement->settings['custom_fields_translation']; + $cf_settings_ro = (array)$iclTranslationManagement->settings['custom_fields_readonly_config']; + $doc_translation_method = intval($iclTranslationManagement->settings['doc_translation_method']); + + //show custom fields defiend in types and not used yet + if(function_exists('types_get_fields')){ + $types_cf = types_get_fields(array(), 'wpml' ); + foreach($types_cf as $key => $option){ + if ( !in_array($option['meta_key'], $cf_keys ) ){ + $cf_keys[] = $option['meta_key']; + $cf_settings[$option['meta_key']] = $option['wpml_action']; + } + } + } + +?> + + + +
              +
              +

              + +

              +

              + +

              +
              +
              + +
              + +
              +

              +
              + +
              + +
              + + +
                +
              • + +
              • +
              • + +
              • +
              • + +
              • +
              + +

              + +

              + +

              + +

              + +

              + + +

              + +
              +
              + +
              + + + +
              + +
              +

              +
              + +
              + +
              + + +
              +

              + +

              +
                +
              • + +
              • +
              • + +
              • +
              +

              + +

              +
              + +
              +

              + +

              +
                +
              • + +
              • +
              • + +
              • +
              • + +
              • +
              +
              + +
              +

              + + +

              +
              + +
              +
              + +
              + + + +
              + +
              +

              +
              + +
              + +
              + + +

              + +

              +

              + +

              + + +

              + +

              + + +

              + +

              + +

              + +

              +

              + + +

              + + get_icl_manually_tranlations_box(''); // shows only when translation polling is on and there are translations in progress ?> +
              + +
              + +
              + +
              + +
              +

              +
              + +
              + +
              + + + +

              + +

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + + + + + + + +
              + + + + + + + +
              "> + checked /> + "> + checked /> + "> + checked /> +
              + +

              + + +

              + + +
              + +
              + +
              + + + +admin_texts_to_translate) && function_exists('icl_register_string')): //available only with the String Translation plugin ?> +
              + +
              +

              +
              + +
              + + + + + + + + + + + + +
              + +
              + admin_texts_to_translate as $option_name=>$option_value): ?> + render_option_writes($option_name, $option_value); ?> + +
              +

              +
              + +
              + +
              + \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-translation-management/menu/sub/notifications.php b/src/wp-content/plugins/wpml-translation-management/menu/sub/notifications.php new file mode 100644 index 0000000..846a4b7 --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/menu/sub/notifications.php @@ -0,0 +1,90 @@ +settings['notification']; ?> + +
              + +

              +
                +
              • + checked="checked" /> + +
              • +
              • + checked="checked" /> + +
              • +
              + + + +

              +
                +
              • + checked="checked" /> + +
              • + +
              • + checked="checked" /> + +
              • +
              + +

              +
                +
              • + checked="checked" /> + +
              • + + checked="checked" /> + + + */ ?> +
              • + checked="checked" /> + +
              • +
              + + +checked="checked" /> + +*/ ?> + + +
                +
              • + +
              • +
              +*/ ?> + +

              + +

              + +
              \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-translation-management/menu/sub/translators.php b/src/wp-content/plugins/wpml-translation-management/menu/sub/translators.php new file mode 100644 index 0000000..e70b09f --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/menu/sub/translators.php @@ -0,0 +1,358 @@ + + + +

              + + +ID) { + + // Edit form + echo '

              '. __('Edit translator', 'wpml-translation-management') . '

              '; + echo '
              ' . "\r\n"; + echo icl_local_edit_translator_form('edit', $selected_translator) . "\r\n"; + echo '
              ' . "\r\n"; + +} else { + + // Services add translator form + + // Services hook + $services = apply_filters('icl_translation_services_button', array()); + if (!empty($services)) { + + // Toggle button + echo '' . "\r\n"; + // Toggle div start + $hidden = isset($_GET['service']) ? '' : ' class="hidden"'; + echo '
              '; + // Open form + echo '
              '; + + // 'From' and 'To' languages dropdowns + $languages = $sitepress->get_active_languages(); + $default_language = $sitepress->get_default_language(); + $from = '' . "\r\n"; + echo $to . '' . "\r\n"; + + // Services radio boxes + echo '

              ' . __('Select translation service', 'wpml-translation-management') . '

              ' . "\r\n"; + + foreach ($services as $service => $button) { + $selected = (isset($_GET['service']) && $_GET['service'] == $service) ? ' checked="checked"' : ''; + $title = array(); + echo '
              '; + if (isset($button['name'])) $title[] = ''; + if (isset($button['description'])) $title[] = $button['description']; + if (isset($button['more_link'])) $title[] = $button['more_link']; + echo implode(' - ', $title) . "\r\n"; + echo isset($button['content']) ? $button['content'] . "\r\n" : ''; + if (isset($button['setup_url'])) echo '' . "\r\n"; + echo '
              '; + } + echo '
              '; + echo '' . "\r\n"; + echo '
              ' . "\r\n"; + echo '
              ' . "\r\n"; + + } else { + _e('No add translator interface available', 'wpml-translation-management'); + } +} + + +// Translators lists + +// Local translators +$blog_users_nt = TranslationManagement::get_blog_not_translators(); +$blog_users_t = TranslationManagement::get_blog_translators(); + +$other_service_translators = TranslationManagement::icanlocalize_translators_list(); +?> + +

              + + + + + + + + + + + + + + + + + + + + + + ID == $bu->ID) { + $edit_link = 'profile.php'; + } else { + $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( esc_url( stripslashes( $_SERVER['REQUEST_URI'] ) ) ), "user-edit.php?user_id=$bu->ID" ) ); + } + $language_pairs = get_user_meta($bu->ID, $wpdb->prefix.'language_pairs', true); + ?> + > + + + + + + + + + > + + + + + + + + +
              + user_login; ?> +
              + + | + + +
              +
              + get_active_languages(); + if(defined('WPML_ST_VERSION') && isset($sitepress_settings['st']['strings_language']) && !isset($languages[$sitepress_settings['st']['strings_language']])){ + $langs[$sitepress_settings['st']['strings_language']] = $sitepress->get_language_details($sitepress_settings['st']['strings_language']); + $langs[$sitepress_settings['st']['strings_language']]['display_name'] .= ' ' . __('(only for strings)', 'wpml-translation-management'); + } + ?> +
                + $lp): ?> + $null){ + if(isset($langs[$to])){ + $tos[] = $langs[$to]['display_name']; + }else{ + $_lang = $sitepress->get_language_details($to); + $tos[] = '' . $_lang['display_name'] . __(' (inactive)', 'wpml-translation-management') . ''; + } + } + ?> +
              • + +
              +
              + Local + + +
              + +
              + +
              +
              + get_active_languages(); ?> +
                + $lp): ?> + +
              • + +
              +
              + + + +
              + +
              + + + + +' . $buttons['local']['content'] . '
              '; + return $buttons; +} + +/** + * Add/edit local translator form + * + * @global object $sitepress + * @param string $action add|edit + * @param object $selected_translator + * @return mixed + */ +function icl_local_edit_translator_form($action = 'add', $selected_translator = 0) { + + global $sitepress, $iclTranslationManagement, $sitepress_settings; + $blog_users_nt = TranslationManagement::get_blog_not_translators(); + $blog_users_t = TranslationManagement::get_blog_translators(); + + $output = ''; + $return['name'] = __('Local', 'wpml-translation-management'); + $return['description'] = __('Your own translators', 'wpml-translation-management'); + + if ($action == 'add' && empty($blog_users_nt)) { + $output .= '' . __('All WordPress users are already translators. To add more translators, first create accounts for them.', 'wpml-translation-management') . ''; + $return['content'] = $output; + return $return; + } + + $output .= '
              + ' . __('Select user.', 'wpml-translation-management') . ' +
              + ' + . wp_nonce_field($action . '_translator', $action . '_translator_nonce', true, false); + + if (!$selected_translator): + + $output .= ''; + $output .= ''; + $output .= ''; + + if(count($blog_users_nt) <= 10){ + $cssheight = 20*count($blog_users_nt) + 5; + $output .= ''; + } + + + $output .= '

              ' . __('To add translators, they must first have accounts in WordPress. Translators can have any editing privileges, including subscriber.') . '

              '; + else: + $output .= '' . sprintf(__('Editing language pairs for %s', 'wpml-translation-management'), + esc_html($selected_translator->display_name) . ' ('.$selected_translator->user_login.')') . ''; + $output .= ''; + endif; + + if ($selected_translator) { + + $output .= '
              + +
              get_active_languages(); + + if(defined('WPML_ST_VERSION') && isset($sitepress_settings['st']['strings_language']) && !isset($languages[$sitepress_settings['st']['strings_language']])){ + $languages[$sitepress_settings['st']['strings_language']] = $sitepress->get_language_details($sitepress_settings['st']['strings_language']); + $languages[$sitepress_settings['st']['strings_language']]['display_name'] .= ' ' . __('(only for strings)', 'wpml-translation-management'); + } + + foreach ($languages as $from_lang): + $output .= '
            • + +
              language_pairs[$from_lang['code']])): + $output .= ' style="display:block"'; + endif; + $output .= '> + ' . __('to', 'wpml-translation-management') . ' +
                '; + + foreach($sitepress->get_active_languages() as $to_lang): + if ($from_lang['code'] == $to_lang['code']) continue; + $output .= '
              • +   +
              • '; + endforeach; + $output .= '
              +
              +
            • '; + endforeach; + + $output .= ''; + $output .= ' +  '; + } + + $return['content'] = $output; + + return ($action == 'edit') ? $output : $return; +} +?> diff --git a/src/wp-content/plugins/wpml-translation-management/menu/translation-editor.php b/src/wp-content/plugins/wpml-translation-management/menu/translation-editor.php new file mode 100644 index 0000000..f2d74a5 --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/menu/translation-editor.php @@ -0,0 +1,314 @@ +get_translation_job((int)$_GET['job_id'], false, true, 1); // don't include not-translatable and auto-assign + +if(empty($job)){ + $job_checked = true; + include WPML_TM_PATH . '/menu/translations-queue.php'; + return; +} +$rtl_original = $sitepress->is_rtl($job->source_language_code); +$rtl_translation = $sitepress->is_rtl($job->language_code); +$rtl_original_attribute = $rtl_original ? ' dir="rtl"' : ' dir="ltr"'; +$rtl_translation_attribute = $rtl_translation ? ' dir="rtl"' : ' dir="ltr"'; + +require_once(ABSPATH . 'wp-admin/includes/image.php'); +require_once(ABSPATH . 'wp-admin/includes/file.php'); +require_once(ABSPATH . 'wp-admin/includes/media.php'); + +?> +
              +

              +

              + + + original_doc_id); + + if(!empty($opost) && ($opost->post_status == 'draft' || $opost->post_status == 'private') && $opost->post_author != $current_user->data->ID){ + $elink1 = ''; + $elink2 = ''; + }else{ + $elink1 = sprintf('', get_permalink($job->original_doc_id)); + $elink2 = ''; + } + + ?> +

              original_doc_id), $job->from_language, $job->to_language); ?>

              + + original_doc_id, '_icl_translator_note', true)): ?> +
              +
              + +
              + + +
              + + +
              + + elements as $element): ?> + + field_data)) continue; + $_iter = !isset($_iter) ? 1 : $_iter + 1; + if(!$element->field_finished){ + $icl_tm_all_finished = false; + } + ?> +
              +
              +
              +
              +
              +
              +
              + field_type, 'field-')){ + $element_field_type = apply_filters('icl_editor_cf_name', $element->field_type); + $element_field_style = 1; + $element_field_style = apply_filters('icl_editor_cf_style', $element_field_style, $element->field_type); + }else{ + $element_field_type = $element->field_type; + $element_field_style = false; + } + ?> +

              +
              + field_type, 'field-')){ + $icl_editor_cf_description = apply_filters('icl_editor_cf_description', '', $element->field_type); + if($icl_editor_cf_description !== null){ + echo '

              ' . $icl_editor_cf_description . '

              '; + } + } + ?> + + field_data, $element->field_format); + $icl_tm_translated_content = TranslationManagement::decode_field_data($element->field_data_translated, $element->field_format); + if($element->field_type=='tags' || $element->field_type=='categories'){ + $taxonomy = $element->field_type == 'tags' ? 'post_tag' : 'category'; + $icl_tm_translated_taxs[$element->field_type] = + TranslationManagement::determine_translated_taxonomies($icl_tm_original_content, $taxonomy, $job->language_code); + } + + $translatable_taxonomies = $sitepress->get_translatable_taxonomies(false, $job->original_post_type); + if(in_array($element->field_type, $translatable_taxonomies)){ + $taxonomy = $element->field_type; + $icl_tm_translated_taxs[$element->field_type] = + TranslationManagement::determine_translated_taxonomies($icl_tm_original_content, $taxonomy, $job->language_code); + }; + ?> +

              + to_language; ?> + + |  from_language)?> + +

              + + + field_type=='body'): ?> +
              + =')){ + $settings = array( + 'media_buttons' => false, + 'textarea_name' => 'fields['.$element->field_type.'][data]', + 'textarea_rows' => 20, + 'editor_css' => $rtl_translation ? ' ' : '' + ); + wp_editor($icl_tm_translated_content, 'fields['.$element->field_type.'][data]', $settings); + }else{ + the_editor($icl_tm_translated_content, 'fields['.$element->field_type.'][data]', false, false); + } + ?> +
              + + + field_format == 'csv_base64'): ?> + $c): ?> + field_type]) && !empty($icl_tm_translated_taxs[$element->field_type][$k]); + if((empty($icl_tm_translated_content[$k]) && $__is_translated) || ($__is_translated && ($icl_tm_translated_content[$k] != $icl_tm_translated_taxs[$element->field_type][$k]))){ + $icl_tm_translated_content[$k] = $icl_tm_translated_taxs[$element->field_type][$k]; + $icl_tm_f_translated = true; + }else{ + $icl_tm_f_translated = false; + } + ?> + + +
              + + + + + field_type, 'field-') && $element_field_style == 1): ?> + + + + field_type, 'field-') && $element_field_style == 2): + if(version_compare($wp_version, '3.3', '>=')){ + $settings = array( + 'media_buttons' => false, + 'textarea_name' => 'fields['.$element->field_type.'][data]', + 'textarea_rows' => 4 + ); + wp_editor($icl_tm_translated_content, 'fields['.$element->field_type.'][data]', $settings); + }else{ + ?> + + + + + + + +

              + +

              + +
              + + + +

              from_language; ?>

              + field_type=='tags' || $element->field_type=='categories' || in_array($element->field_type, $translatable_taxonomies)){ + + if($element->field_type=='tags'){ + $term_taxonomy = 'post_tag'; + }elseif($element->field_type=='categories'){ + $term_taxonomy = 'category'; + }else{ + $term_taxonomy = $element->field_type; + } + if(!empty($icl_tm_original_content)){ + $res = $wpdb->get_results($wpdb->prepare( + "SELECT t.name, x.description FROM {$wpdb->terms} t + JOIN {$wpdb->term_taxonomy} x ON x.term_id = t.term_id + WHERE description<>'' && x.taxonomy=%s + AND t.name IN ('".join("','", esc_sql($icl_tm_original_content))."')", + $term_taxonomy + )); + $term_descriptions = array(); + foreach($res as $row){ + $term_descriptions[$row->name] = $row->description; + } + } + } + + if($element->field_type=='body' || $element_field_style == 2){ + $icl_tm_original_content_html = esc_html($icl_tm_original_content); + $icl_tm_original_content = apply_filters('the_content', $icl_tm_original_content); + $icl_wysiwyg_height = $element->field_type == 'body' ? get_option('default_post_edit_rows', 20)*20 : 100; + ?> +
              + + +
              +
              + +
              + field_type=='body' || $element_field_style == 2): ?> +
              > + + + +
              +
              + field_format == 'csv_base64'): ?> + +
              > +
              + 10)); ?> +
              +
              + + +
              >
              + +
              + + + + + + field_finished && !empty($job->prev_version)): ?> + prev_version->elements as $pel){ + if($element->field_type == $pel->field_type){ + $prev_value = TranslationManagement::decode_field_data($pel->field_data, $pel->field_format); + } + } + if($element->field_format != 'csv_base64'){ + $diff = wp_text_diff( $prev_value, TranslationManagement::decode_field_data($element->field_data, $element->field_format) ); + } + if(!empty($diff)){ + ?> +

              +
              + +
              + + + +
              +
              +
              +
              +
              + +
              + +
              + + +
              +

              +   + + + +

              + +
              + +
              diff --git a/src/wp-content/plugins/wpml-translation-management/menu/translations-queue.php b/src/wp-content/plugins/wpml-translation-management/menu/translations-queue.php new file mode 100644 index 0000000..8eb1751 --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/menu/translations-queue.php @@ -0,0 +1,284 @@ + 0){ + include WPML_TM_PATH . '/menu/translation-editor.php'; + return; + } + if(!empty($_GET['resigned'])){ + $iclTranslationManagement->messages[] = array('type'=>'updated', 'text'=>__("You've resigned from this job.", 'wpml-translation-management')); + } + if(isset($_SESSION['translation_ujobs_filter'])){ + $icl_translation_filter = $_SESSION['translation_ujobs_filter']; + } + $current_translator = $iclTranslationManagement->get_current_translator(); + $icl_translation_filter['translator_id'] = $current_translator->translator_id; + $icl_translation_filter['include_unassigned'] = true; + + if(isset($_GET['updated'])){ + $user_message = __('Translation updated: ', 'wpml-translation-management') . TranslationManagement::tm_post_link(intval($_GET['updated'])); + $iclTranslationManagement->messages[] = array('type'=>'updated', 'text' => $user_message); + }elseif(isset($_GET['added'])){ + $user_message = __('Translation added: ', 'wpml-translation-management') . TranslationManagement::tm_post_link(intval($_GET['added'])); + $iclTranslationManagement->messages[] = array('type'=>'updated', 'text' => $user_message); + } + + if(!empty($current_translator->language_pairs)){ + $_langs_to = array(); + if(1 < count($current_translator->language_pairs)){ + foreach($current_translator->language_pairs as $lang=>$to){ + $langs_from[] = $sitepress->get_language_details($lang); + $_langs_to = array_merge((array)$_langs_to, array_keys($to)); + } + $_langs_to = array_unique($_langs_to); + }else{ + $_langs_to = array_keys(current($current_translator->language_pairs)); + $lang_from = $sitepress->get_language_details(key($current_translator->language_pairs)); + $icl_translation_filter['from'] = $lang_from['code']; + } + + if(1 < count($_langs_to)){ + foreach($_langs_to as $lang){ + $langs_to[] = $sitepress->get_language_details($lang); + } + }else{ + $lang_to = $sitepress->get_language_details(current($_langs_to)); + $icl_translation_filter['to'] = $lang_to['code']; + } + + $icl_translation_filter['limit_no'] = 20; + $translation_jobs = $iclTranslationManagement->get_translation_jobs((array)$icl_translation_filter); + } + +?> +
              +

              +

              + + language_pairs)): ?> +

              + + + + + language_pairs)): ?> +
              + + + + + + + + + + + + +
              +   +   + +   + +
              +
              + +
              + + + + 0): ?> +
              + + + add_query_arg('paged', '%#%' ), + 'format' => '', + 'prev_text' => '«', + 'next_text' => '»', + 'total' => $wp_query->max_num_pages, + 'current' => $_GET['paged'], + 'add_args' => isset($icl_translation_filter)?$icl_translation_filter:array() + )); + ?> +
              + +
              ' . __( 'Displaying %s–%s of %s', 'wpml-translation-management' ) . '%s', + number_format_i18n( ( $_GET['paged'] - 1 ) * $wp_query->query_vars['posts_per_page'] + 1 ), + number_format_i18n( min( $_GET['paged'] * $wp_query->query_vars['posts_per_page'], $wp_query->found_posts ) ), + number_format_i18n( $wp_query->found_posts ), + $page_links + ); echo $page_links_text; ?> +
              + + + 0): ?> +
              + + +
              + +
              + + + + + + 0): ?> + + + + + + + + + + + + + + + 0): ?> + + + + + + + + + + + + + + + + + + + + 0): ?> + + + + + + + + + + + + + +
                 
                 
              + + job_id; ?>post_title ); ?>lang_text ?> + original_doc_id) { ?> + + original_doc_id, __('View original', 'wpml-translation-management'), true);} ?> + translator_id && $job->status == ICL_TM_WAITING_FOR_TRANSLATOR): ?>
              !
              status2text($job->status); + if($job->needs_update) _e(' - (needs update)', 'wpml-translation-management'); + ?> + translator_id > 0 && ($job->status == ICL_TM_WAITING_FOR_TRANSLATOR || $job->status == ICL_TM_IN_PROGRESS)): ?> + + +   + +
              + +
              + +
              + +
              + + + 0): ?> +
              + + +
              + +
              + + + 0): ?> +
              + + + + + +
              + + + diff --git a/src/wp-content/plugins/wpml-translation-management/plugin.php b/src/wp-content/plugins/wpml-translation-management/plugin.php new file mode 100644 index 0000000..4fd0e03 --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/plugin.php @@ -0,0 +1,19 @@ +Documentation. +Author: ICanLocalize +Author URI: http://wpml.org +Version: 1.9.1 +*/ + +if(defined('WPML_TM_VERSION')) return; + +define('WPML_TM_VERSION', '1.9.1'); +define('WPML_TM_PATH', dirname(__FILE__)); + +require WPML_TM_PATH . '/inc/constants.php'; +require WPML_TM_PATH . '/inc/wpml-translation-management.class.php'; + +$WPML_Translation_Management = new WPML_Translation_Management; \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-translation-management/res/css/style.css b/src/wp-content/plugins/wpml-translation-management/res/css/style.css new file mode 100644 index 0000000..2a565be --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/res/css/style.css @@ -0,0 +1,214 @@ +.icl_tm_wrap{ + border: 1px solid #CCCCCC; + padding:10px; + background-color:#ffffff; +} + +#icl_tm_adduser{ + margin-top: 4px; +} +#icl_tm_adduser .icl_tm_lang_pairs{ + display: none; + padding:5px; +} + +#icl_tm_adduser .icl_tm_lang_pairs li ul li{ + display: inline; +} + +.icl_tm_lang_pairs_to{ + display: none; + background: #DFDFDF url(../../../../../wp-admin/images/gray-grad.png) repeat-x scroll left top; + -moz-border-radius: 4px; + padding: 4px; + margin-top: 1px; +} + +.icl_tm_no_to{ + display: none; + background-color: pink; + padding:5px; + -moz-border-radius: 4px; + margin-bottom: 5px; +} + +.nav-tab{ + background-color: #efefef; + color: #000; +} +.nav-tab:hover{ + background-color: #fff; +} +.nav-tab-active{ + font-weight: bold; + background-color: #fff; + border-bottom-color: #fff; +} + + +.icl_tm_wrap .form-table{ + border-collapse: separate; +} +.icl_tm_wrap .form-table td, .icl_tm_wrap .form-table th{ + border:none; + padding: 10px; +} + +.icl_tj_select_translator_controls{ + display: none; +} + +#icl_custom_posts_sync_options table td, +#icl_custom_tax_sync_options table td { + width: auto; + text-align: right; + white-space: nowrap; +} + +#icl_custom_posts_sync_options table td:first-child, +#icl_custom_tax_sync_options table td:first-child { + width: 100%; + white-space: normal; + text-align: left; +} + +#icl_custom_posts_sync_options table table { + background: #fff; + border: 1px solid #ededed; + margin: 0 0 10px; +} + +#icl_custom_posts_sync_options table table td { + border-color: transparent; +} + +/*#icl_custom_posts_sync_options{ + margin-right:2%; +}*/ + +.icl_tm_admin_options li ul{ + margin-left:20px; +} + +#local_translations_add_translator_toggle { + border: 1px solid #CCCCCC; + padding: 10px; +} + +.icl_tm_diff{ + display:none; + margin-bottom: 10px; +} + +.icl_tm_error{ + vertical-align:bottom; + font-size: 11px; + color:#ff0000; +} + +#icl_quick_src_users{ + width:150px; + border-color:red; +} +select.icl_tm_auto_suggest_dd{ + margin-left: -150px; + margin-top: 23px; + min-width: 150px; + position: absolute; +} +#icl_user_src_nf{ + font-size:90%; + font-style: italic; +} + + +.icl-translation-services { + position: relative; + text-align: center; + margin: 20px 0 0 0; + padding: 0 10px 0 0; +} + +.icl-translation-services.hidden { + display: none; +} + +.icl-translation-services .icl-translation-services-inner { + border: 1px solid #CFCFCF; + border-radius: 5px; + padding: 30px 50px; +} + +.icl-translation-services .icl-translation-services-logo { + margin-top: -49px; +} +.icl-translation-services .icl-translation-services-logo span { + display: inline-block; + background: #F9F9F9; + padding: 0 2px; +} + +.icl-translation-services .icl-translation-services-header { + color: #333; + font-size: 14px; + font-weight: bold; +} + +.icl-translation-services .icl-translation-desc { + margin-bottom: 10px; +} + +.icl-translation-services .icl-translation-buttons { + margin: -16px 0 0 0; + line-height: 30px; +} + +.icl-translation-services .icl-translation-buttons a { + margin: 0 8px; +} + +.icl-translation-services .icl-translation-buttons a.button-primary { + height: 30px; + line-height: 28px; +} +.icl-translation-services .icl-translation-buttons a.button-secondary { + font-weight: bold; +} +.icl-translation-services .icl-translation-buttons a.button-secondary span { + background: url('../img/icl-button-man-ico.png') center left no-repeat; + display: inline-block; + padding: 0 0 0 20px; +} + +.icl-translation-services .icl-translation-links { + margin: 20px 0 10px 0; + text-align: right; + line-height: 1.1; +} + +.icl-translation-services .icl-translation-links a { + display: inline-block; + margin: 0 0 0 10px; +} + +.icl-translation-services .icl-translation-links a:first-child { + border-right: 1px solid #BDBDBD; + padding-right: 10px; +} + +.icl-translation-services .icl-translation-links a.icl-mail-ico { + padding-left: 12px; + background: url('../img/icl-button-mail-ico.png') center left no-repeat; +} +.icl-translation-services .icl-translation-links a#icl_hide_promo { + padding-left: 15px; + background: url('../img/icl-button-close-ico.png') center left no-repeat; +} + +#icl_show_promo{float: right;} + +.wpml-section-cf-translation {} + + .wpml-section-cf-translation table td { + width: 25%; + } \ No newline at end of file diff --git a/src/wp-content/plugins/wpml-translation-management/res/css/translations-queue.css b/src/wp-content/plugins/wpml-translation-management/res/css/translations-queue.css new file mode 100644 index 0000000..e5db715 --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/res/css/translations-queue.css @@ -0,0 +1,122 @@ +.icl_tj_your_job{ + color:#f00; + width:14px; + cursor: help; + font-weight: bold; +} + +.icl-translation-editor p.updated{ + padding:4px; +} +.icl-translation-editor #dashboard-widgets-wrap .inside{ + padding-left:8px; + padding-right:8px; +} + +.icl-translation-editor #dashboard-widgets-wrap .inside p{ + margin-top:4px; + margin-bottom: 4px; +} + +.icl-translation-editor #dashboard-widgets-wrap .inside input[type=text]{ + width:99%; +} + +.icl-tj-original{ + background-color: #efefef; + color:#555; + border: 1px solid #ddd; + padding:4px; + -moz-border-radius: 6px; + margin-bottom:8px; + font-size: 90%; +} +.icl-tj-original .icl_multiple{ + padding: 4px; +} +.icl-tj-original .icl_single{ + padding:4px; +} + +.icl-tj-original textarea{ + width: 100%; + height:300px; +} + +.icl-tj-original-cf textarea{ + height:150px; +} + +.icl-tj-original .html{ + display: none; +} + +.icl-translation-editor .postbox-container .meta-box-sortables{min-height: 0;} + +.icl-translation-editor .postbox-container{ + width: 49%; +} +.icl-translation-editor .icl-tj-postbox-container-title, +.icl-translation-editor .icl-tj-postbox-container-body{ + width: 100%; +} + +.icl-translation-editor #editorcontainer textarea{ + width: 100%; + margin:0; + border:none; +} + +.icl_tm_orig_toggle{ + text-align: right; + margin-bottom: -1px; + padding-right: 8px; +} + +.icl_tm_toggle_visual, .icl_tm_toggle_html{ + text-decoration: none; + -moz-border-radius:3px 3px 0 0; + border-style:solid; + border-width:1px; + cursor:pointer; + float:right; + height:18px; + margin:5px 5px 0 0; + padding:4px 5px 2px; + background-color:#F6F6F6; + border-color:#DFDFDF; + color:#999999; +} + +.icl_tm_toggle_visual.active, .icl_tm_toggle_html.active, .icl_tm_toggle_visual:hover, .icl_tm_toggle_html:hover{ + background-color:#efefef; + border-bottom-color:#efefef; + color:#333333; +} + +input.icl_multiple{ + width:80% !important; +} + +.icl_tm_tf{ + float: right; + margin-top:8px; + font-size: 85%; + font-style: italic; +} + +#icl_tm_validation_error{ + margin-top: 6px; + display: none; +} + +.icl_tm_row_highlight{ + background-color: #FFC0CB; +} + + +#icl_dashboard_advanced_filters table{} +#icl_dashboard_advanced_filters table td{padding:1px;} + +#icl_tm_languages table, #icl_tm_languages td{border:none;} +#icl_tm_languages td{height:20px;vertical-align: middle;} diff --git a/src/wp-content/plugins/wpml-translation-management/res/img/icl-button-close-ico.png b/src/wp-content/plugins/wpml-translation-management/res/img/icl-button-close-ico.png new file mode 100644 index 0000000..2c43d4a Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/res/img/icl-button-close-ico.png differ diff --git a/src/wp-content/plugins/wpml-translation-management/res/img/icl-button-mail-ico.png b/src/wp-content/plugins/wpml-translation-management/res/img/icl-button-mail-ico.png new file mode 100644 index 0000000..b38e017 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/res/img/icl-button-mail-ico.png differ diff --git a/src/wp-content/plugins/wpml-translation-management/res/img/icl-button-man-ico.png b/src/wp-content/plugins/wpml-translation-management/res/img/icl-button-man-ico.png new file mode 100644 index 0000000..9cc3d2f Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/res/img/icl-button-man-ico.png differ diff --git a/src/wp-content/plugins/wpml-translation-management/res/img/icon.png b/src/wp-content/plugins/wpml-translation-management/res/img/icon.png new file mode 100644 index 0000000..46183e3 Binary files /dev/null and b/src/wp-content/plugins/wpml-translation-management/res/img/icon.png differ diff --git a/src/wp-content/plugins/wpml-translation-management/res/js/scripts.js b/src/wp-content/plugins/wpml-translation-management/res/js/scripts.js new file mode 100644 index 0000000..3156ebe --- /dev/null +++ b/src/wp-content/plugins/wpml-translation-management/res/js/scripts.js @@ -0,0 +1,858 @@ +jQuery(document).ready(function(){ + + jQuery('#icl_tm_selected_user').change(function(){ + if(jQuery(this).val()){ + jQuery('.icl_tm_lang_pairs').slideDown(); + }else{ + jQuery('.icl_tm_lang_pairs').slideUp(); + jQuery('#icl_tm_adduser .icl_tm_lang_pairs_to').hide(); + jQuery('#icl_tm_add_user_errors span').hide(); + } + + }); + + jQuery('#icl_tm_adduser .icl_tm_from_lang').change(function(){ + if(jQuery(this).attr('checked')){ + jQuery(this).parent().parent().find('.icl_tm_lang_pairs_to').slideDown(); + }else{ + jQuery(this).parent().parent().find('.icl_tm_lang_pairs_to').find(':checkbox').removeAttr('checked'); + jQuery(this).parent().parent().find('.icl_tm_lang_pairs_to').slideUp(); + } + }); + + jQuery('a[href="#hide-advanced-filters"]').click(function(){ + athis = jQuery(this); + icl_save_dashboard_setting('advanced_filters',0,function(f){ + jQuery('#icl_dashboard_advanced_filters').slideUp() + athis.hide(); + jQuery('a[href="#show-advanced-filters"]').show(); + }); + }) + + jQuery('a[href="#show-advanced-filters"]').click(function(){ + athis = jQuery(this); + icl_save_dashboard_setting('advanced_filters',1,function(f){ + jQuery('#icl_dashboard_advanced_filters').slideDown() + athis.hide(); + jQuery('a[href="#hide-advanced-filters"]').show(); + }); + }) + + /* word count estimate */ + + jQuery('#icl-tm-translation-dashboard td :checkbox').click(icl_tm_update_word_count_estimate); + jQuery('#icl-tm-translation-dashboard th :checkbox').click(icl_tm_select_all_documents); + jQuery('#icl_tm_languages :radio').change(icl_tm_enable_submit); + jQuery('#icl_tm_languages :radio').change(icl_tm_dup_warn); + + jQuery('#icl_tm_languages thead a').click(icl_tm_batch_selection); + + jQuery(document).delegate('.icl_tj_select_translator select', 'change', icl_tm_assign_translator); + + jQuery('#icl_tm_editor .handlediv').click(function(){ + if(jQuery(this).parent().hasClass('closed')){ + jQuery(this).parent().removeClass('closed'); + }else{ + jQuery(this).parent().addClass('closed'); + } + }) + + jQuery('.icl_tm_toggle_visual').click(function(){ + var inside = jQuery(this).closest('.inside'); + jQuery('.icl-tj-original .html', inside).hide(); + jQuery('.icl-tj-original .visual', inside).show(); + jQuery('.icl_tm_orig_toggle a', inside).removeClass('active'); + jQuery(this).addClass('active'); + return false; + }); + + jQuery('.icl_tm_toggle_html').click(function(){ + var inside = jQuery(this).closest('.inside'); + jQuery('.icl-tj-original .html', inside).show(); + jQuery('.icl-tj-original .visual', inside).hide(); + jQuery('.icl_tm_orig_toggle a', inside).removeClass('active'); + jQuery(this).addClass('active'); + return false; + }) + + jQuery('.icl_tm_finished').change(function(){ + jQuery(this).parent().parent().find('.icl_tm_error').hide(); + var field = jQuery(this).attr('name').replace(/finished/,'data'); + + if(field == 'fields[body][data]'){ + var datatemp = ''; + try{ + datatemp = tinyMCE.get('fields[body][data]').getContent(); + }catch(err){;} + var data = jQuery('*[name="'+field+'"]').val() + datatemp; + } + else if(jQuery(this).hasClass('icl_tmf_multiple')){ + var data = 1; + jQuery('[name*="'+field+'"]').each(function(){ + data = data * jQuery(this).val().length; + }); + }else{ + + var datatemp = ''; + try{ + datatemp = tinyMCE.get(field).getContent(); + }catch(err){;} + + var data = jQuery('[name="'+field+'"]*').val() + datatemp; + } + + + + + if(jQuery(this).attr('checked') && !data){ + jQuery(this).parent().parent().find('.icl_tm_error').show(); + jQuery(this).removeAttr('checked'); + } + }); + + jQuery('#icl_tm_editor .icl_tm_finished').change(icl_tm_update_complete_cb_status); + + jQuery('#icl_tm_editor').submit(function () { + var formnoerr = true; + var validation_error = jQuery('#icl_tm_validation_error'); + + validation_error.hide(); + + jQuery('.icl_tm_finished:checked').each(function () { + var field = jQuery(this).attr('name').replace(/finished/, 'data'); + + var current_input_field = jQuery('*[name="' + field + '"]'); + if (field == 'fields[body][data]' || current_input_field.hasClass('wp-editor-area')) { + var data = current_input_field.val() + tinyMCE.get(field).getContent(); + } else if (jQuery(this).hasClass('icl_tmf_multiple')) { + var data = 1; + jQuery('[name*="' + field + '"]').each(function () { + data = data * jQuery(this).val().length; + }); + } else { + var data = jQuery('[name="' + field + '"]*').val(); + } + + if (!data) { + validation_error.fadeIn(); + jQuery(this).removeAttr('checked'); + icl_tm_update_complete_cb_status(); + formnoerr = false; + } + }); + + return formnoerr; + }); + + if (jQuery('#radio-local').is(':checked')) { + jQuery('#local_translations_add_translator_toggle').slideDown(); + } + + var icl_tm_users_quick_search = { + + attach_listener : function (){ + var searchTimer; + + jQuery('#icl_quick_src_users').keydown( function(e){ + + jQuery('#icl_tm_selected_user').val(''); + jQuery('#icl_quick_src_users').css('border-color', '#ff0000'); + icl_add_translators_form_check_submit(); + + + var t = jQuery(this); + + if( 13 == e.which ) { + icl_tm_users_quick_search.update( t ); + return false; + } + + if( e.keyCode == 40 && jQuery('.icl_tm_auto_suggest_dd').length){ + + jQuery('.icl_tm_auto_suggest_dd').focus(); + + + }else if( e.which >= 32 && e.which <=127 || e.which == 8) { + + jQuery('#icl_user_src_nf').remove(); + + if( searchTimer ) clearTimeout(searchTimer); + + searchTimer = setTimeout(function(){ + icl_tm_users_quick_search.update( t ); + }, 400); + + } + + + + } ).attr('autocomplete','off'); + + icl_tm_users_quick_search.select_listener(); + + jQuery('#icl_quick_src_users').focus(function(){ + if(jQuery('.icl_tm_auto_suggest_dd').length){ + jQuery('.icl_tm_auto_suggest_dd').css('visibility', 'visible'); + } + }) + + + jQuery('#icl_quick_src_users').blur(function(){ + setTimeout(function(){ + if(jQuery('.icl_tm_auto_suggest_dd').length && !jQuery('select.icl_tm_auto_suggest_dd').is(':focus') ){ + jQuery('.icl_tm_auto_suggest_dd').css('visibility', 'hidden'); + } + }, 500); + }) + + + + }, + + update : function(input){ + + var panel, params, + minSearchLength = 2, + q = input.val(); + + panel = input.parent(); + + if( q.length < minSearchLength ){ + jQuery('select.icl_tm_auto_suggest_dd', panel).remove(); + return; + } + + params = { + 'action': 'icl_tm_user_search', + 'q': q + }; + + + jQuery('img.waiting', panel).show(); + jQuery('select.icl_tm_auto_suggest_dd', panel).remove(); + + jQuery.post( ajaxurl, params, function(response) { + icl_tm_users_quick_search.ajax_response(response, params, panel, input); + }); + + }, + + ajax_response : function (response, params, panel, input){ + + jQuery('#icl_user_src_nf').remove(); + input.after(response); + jQuery('img.waiting', panel).hide(); + + }, + + select_listener : function(){ + + /* + jQuery(document).delegate('.icl_tm_auto_suggest_dd option', 'click', function(){ + icl_tm_users_quick_search.select(jQuery(this).val()); + }); + */ + + jQuery(document).delegate('.icl_tm_auto_suggest_dd', 'change', function(){ + icl_tm_users_quick_search.select(jQuery(this).val()); + }); + + + jQuery(document).delegate('.icl_tm_auto_suggest_dd', 'keydown', function(e){ + if(e.which == 13){ + icl_tm_users_quick_search.select(jQuery(this).val()); + e.preventDefault(); + } + }); + + return; + /* + jQuery(document).delegate('.icl_tm_auto_suggest_dd', 'change', function(){ + + var spl = jQuery(this).val().split('|'); + jQuery('#icl_tm_selected_user').val(spl[0]); + spl.shift(); + jQuery('#icl_quick_src_users').val(spl.join('|')); + jQuery(this).remove(); + }) + */ + }, + + select : function(val){ + var spl = val.split('|'); + jQuery('#icl_tm_selected_user').val(spl[0]); + spl.shift(); + jQuery('#icl_quick_src_users').val(spl.join('|')).css('border-color', 'inherit'); + jQuery('.icl_tm_auto_suggest_dd').remove(); + icl_add_translators_form_check_submit(); + } + + } + + icl_tm_users_quick_search.attach_listener(); + + + icl_add_translators_form_check_submit(); + var icl_active_service = jQuery("input[name='services']:checked").val(); + + + jQuery('input[name=services]').change(function() { + if (jQuery('#radio-local').is(':checked')) { + jQuery('#local_translations_add_translator_toggle').slideDown(); + } else { + jQuery('#local_translations_add_translator_toggle').slideUp(); + } + icl_active_service = jQuery(this).val(); + icl_add_translators_form_check_submit(); + }); + + jQuery('#edit-from').change(function() { + icl_add_translators_form_check_submit(); + }); + + jQuery('#edit-to').change(function() { + icl_add_translators_form_check_submit(); + }); + + jQuery('#icl_add_translator_submit').click(function() { + var url = jQuery('#'+icl_active_service+'_setup_url').val(); + if (url !== undefined) { + url = url.replace(/from_replace/, jQuery('#edit-from').val()); + url = url.replace(/to_replace/, jQuery('#edit-to').val()); + icl_thickbox_reopen(url); + return false; + } + jQuery('#icl_tm_add_user_errors span').hide(); + if (jQuery('input[name=services]').val() == 'local' && jQuery('#icl_tm_selected_user').val() == 0){ + jQuery('#icl_tm_add_user_errors .icl_tm_no_to').show(); + return false; + } + }); + + jQuery('#icl_add_translator_form_toggle').click(function() { + jQuery('#icl_add_translator_form_wrapper').slideToggle(function(){ + if (jQuery('#icl_add_translator_form_wrapper').is(':hidden')) { + var caption = jQuery('#icl_add_translator_form_toggle').val().replace(/<>'); + } else { + var caption = jQuery('#icl_add_translator_form_toggle').val().replace(/>>/, '<<'); + } + jQuery('#icl_add_translator_form_toggle').val(caption); + }); + + return false; + }); + + jQuery('#icl_side_by_site a[href=#cancel]').click(function(){ + var thisa = jQuery(this); + jQuery.ajax({ + type: "POST", url: ajaxurl, data: 'action=dismiss_icl_side_by_site', + success: function(msg){ + thisa.parent().parent().fadeOut(); + } + }); + return false; + }); + + + if (typeof(icl_tb_init) != 'undefined') { + icl_tb_init('a.icl_thickbox'); + icl_tb_set_size('a.icl_thickbox'); + } + + var cache = '&cache=1'; + if (location.href.indexOf("main.php&sm=translators") != -1 || location.href.indexOf('/post.php') != -1 || location.href.indexOf('/edit.php') != -1) { + cache = ''; + } + jQuery.ajax({ + type: "POST", + url: icl_ajx_url, + dataType: 'json', + data: "icl_ajx_action=get_translator_status" + cache + '&_icl_nonce=' + jQuery('#_icl_nonce_gts').val(), + success: function(msg){ + if (cache == '') { + } + } + }); + + if(jQuery('#icl_tdo_options').length) + jQuery('#icl_tdo_options').submit(iclSaveForm); + + jQuery('.icl_tm_copy_link').click(function(){ + var type = jQuery(this).attr('id').replace(/^icl_tm_copy_link_/,''); + + field = 'fields['+type+'][data]'; + var original = ''; + + + if(0 == type.indexOf('field-')){ + type = type.replace(/ /g, '__20__'); + } + + if(type=='body' || (0 == type.indexOf('field-') && jQuery('#icl_tm_original_'+type)[0].tagName != 'SPAN')){ + + original = jQuery('#icl_tm_original_'+type).val() + + try{ + tinyMCE.get(field); // activate + + }catch(err){;} //backward compatibility + + if ( typeof tinyMCE != 'undefined' && ( ed = tinyMCE.activeEditor ) && !ed.isHidden() ) { + + if(tinyMCE.activeEditor.id != field){ + for(i in tinyMCE.editors){ + if(field == tinyMCE.editors[i].id){ + ed = tinyMCE.editors[i]; + } + } + } + + ed.focus(); + if (tinymce.isIE) + ed.selection.moveToBookmark(tinymce.EditorManager.activeEditor.windowManager.bookmark); + original = original.replace(/\n\n/g, '
              '); + ed.execCommand('mceInsertContent', false, original); + } else { + wpActiveEditor = field; + edInsertContent(edCanvas, original); + } + }else{ + type = type.replace(/ /g, '__20__'); + original = jQuery('#icl_tm_original_'+type).html(); + + if(jQuery('#icl_tm_editor input[name="'+field+'"]').length){ + jQuery('#icl_tm_editor input[name="'+field+'"]').val(original); + }else if(jQuery('#icl_tm_editor textarea[name="'+field+'"]').length){ + jQuery('#icl_tm_editor textarea[name="'+field+'"]').val(original); + } + /*jQuery('#icl_tm_editor *[name="'+field+'"]').val(original); */ + + } + jQuery(this).parent().fadeOut(); + return false; + }); + + // Translator notes - translation dashboard - start + jQuery('.icl_tn_link').click(function(){ + jQuery('.icl_post_note:visible').slideUp(); + thisl = jQuery(this); + spl = thisl.attr('id').split('_'); + doc_id = spl[3]; + if(jQuery('#icl_post_note_'+doc_id).css('display') != 'none'){ + jQuery('#icl_post_note_'+doc_id).slideUp(); + }else{ + jQuery('#icl_post_note_'+doc_id).slideDown(); + jQuery('#icl_post_note_'+doc_id+' textarea').focus(); + } + return false; + }); + + jQuery('.icl_post_note textarea').keyup(function(){ + if(jQuery.trim(jQuery(this).val())){ + jQuery('.icl_tn_clear').removeAttr('disabled'); + }else{ + jQuery('.icl_tn_clear').attr('disabled', 'disabled'); + } + }); + jQuery('.icl_tn_clear').click(function(){ + jQuery(this).closest('table').prev().val(''); + jQuery(this).attr('disabled','disabled'); + }) + jQuery('.icl_tn_save').click(function(){ + thisa = jQuery(this); + thisa.closest('table').find('input').attr('disabled','disabled'); + tn_post_id = thisa.closest('table').find('.icl_tn_post_id').val(); + jQuery.ajax({ + type: "POST", + url: icl_ajx_url, + data: "icl_ajx_action=save_translator_note¬e="+thisa.closest('table').prev().val()+'&post_id='+tn_post_id + '&_icl_nonce=' + jQuery('#_icl_nonce_stn_' + tn_post_id).val(), + success: function(msg){ + thisa.closest('table').find('input').removeAttr('disabled'); + thisa.closest('table').parent().slideUp(); + icon_url = jQuery('#icl_tn_link_'+tn_post_id+' img').attr('src'); + if(thisa.closest('table').prev().val()){ + jQuery('#icl_tn_link_'+tn_post_id+' img').attr('src', icon_url.replace(/add_translation\.png$/, 'edit_translation.png')); + }else{ + jQuery('#icl_tn_link_'+tn_post_id+' img').attr('src', icon_url.replace(/edit_translation\.png$/, 'add_translation.png')); + } + } + }); + + }); + // Translator notes - translation dashboard - end + + // MC Setup + jQuery('#icl_doc_translation_method').submit(iclSaveForm); + jQuery('#icl_page_sync_options').submit(iclSaveForm); + jQuery('form[name="icl_custom_tax_sync_options"]').submit(iclSaveForm); + jQuery('form[name="icl_custom_posts_sync_options"]').submit(iclSaveForm); + jQuery('form[name="icl_cf_translation"]').submit(iclSaveForm); + + if(jQuery.browser.msie){ // TODO: jQuery.browser.msie: version deprecated: 1.3, removed: 1.9 + jQuery('#icl_translation_pickup_mode').submit(icl_tm_set_pickup_method); + }else{ + jQuery(document).delegate('#icl_translation_pickup_mode', 'submit', icl_tm_set_pickup_method); + } + + jQuery(document).delegate('#icl_tm_get_translations', 'click', icl_tm_pickup_translations); + if(jQuery('#icl_sec_tic').length){ + icl_sec_tic_to = window.setTimeout(icl_sec_tic_decrement, 60000); + } + + jQuery('#icl-translation-jobs th :checkbox').change(iclTmSelectAllJobs); + jQuery('#icl-tm-jobs-cancel-but').click(iclTmCancelJobs); + jQuery('#icl-translation-jobs td :checkbox').change(iclTmUpdateJobsSelection); + + iclTmPopulateParentFilter(); + jQuery('#icl_parent_filter_control').change(iclTmPopulateParentFilter); + jQuery('form[name="translation-dashboard-filter"]').find('select[name="filter[from_lang]"]').change(iclTmPopulateParentFilter); + + jQuery('#icl_tm_jobs_dup_submit').click(function(){return confirm(jQuery(this).next().html());}) + + + jQuery('#icl_hide_promo').click(function(){ + jQuery.ajax({type:"POST", url:ajaxurl, data: 'action=icl_tm_toggle_promo&value=1', success: function(){ + jQuery('.icl-translation-services').slideUp(function(){jQuery('#icl_show_promo').fadeIn()}); + }}); + return false; + }) + jQuery('#icl_show_promo').click(function(){ + jQuery.ajax({type:"POST", url:ajaxurl, data: 'action=icl_tm_toggle_promo&value=0', success: function(){ + jQuery('#icl_show_promo').hide(); + jQuery('.icl-translation-services').slideDown() + }}); + return false; + }) + + + +}); + +function icl_save_dashboard_setting(setting, value, callback){ + jQuery('#icl_dashboard_ajax_working').fadeIn(); + jQuery.ajax({ + type: "POST", + url: icl_ajx_url, + data: 'icl_ajx_action=save_dashboard_setting&setting='+setting+'&value='+value+'_icl_nonce=' + jQuery('#_icl_nonce_sds').val(), + success: function(msg){ + jQuery('#icl_dashboard_ajax_working').fadeOut(); + callback(msg); + } + }); +} + +function icl_add_translators_form_check_submit() { + jQuery('#icl_add_translator_submit').attr('disabled', 'disabled'); + + if(jQuery('#edit-from').val() != 0 && jQuery('#edit-to').val() != 0 && jQuery('#edit-from').val() != jQuery('#edit-to').val()){ + if (jQuery('#radio-icanlocalize').is(':checked') || jQuery('#radio-local').is(':checked') && jQuery('#icl_tm_selected_user').val()) { + jQuery('#icl_add_translator_submit').removeAttr('disabled'); + } + } + +} + +function icl_tm_update_word_count_estimate(){ + icl_tm_enable_submit(); + var id = jQuery(this).val(); + var val = parseInt(jQuery('#icl-cw-'+id).html()); + var curval = parseInt(jQuery('#icl-tm-estimated-words-count').html()); + if(jQuery(this).attr('checked')){ + var newval = curval + val; + }else{ + var newval = curval - val; + } + jQuery('#icl-tm-estimated-words-count').html(newval); + icl_tm_update_doc_count(); +} + +function icl_tm_select_all_documents(){ + if(jQuery(this).attr('checked')){ + jQuery('#icl-tm-translation-dashboard :checkbox').attr('checked','checked'); + jQuery('#icl-tm-estimated-words-count').html(parseInt(jQuery('#icl-cw-total').html())); + }else{ + jQuery('#icl-tm-translation-dashboard :checkbox').removeAttr('checked'); + jQuery('#icl-tm-estimated-words-count').html('0'); + } + icl_tm_update_doc_count(); + icl_tm_enable_submit(); +} + +function icl_tm_update_doc_count(){ + dox = jQuery('#icl-tm-translation-dashboard td :checkbox:checked').length; + jQuery('#icl-tm-sel-doc-count').html(dox); + if(dox){ + jQuery('#icl-tm-doc-wrap').fadeIn(); + }else{ + jQuery('#icl-tm-doc-wrap').fadeOut(); + } +} + +function icl_tm_enable_submit(){ + var anyaction = false; + jQuery('#icl_tm_languages :radio:checked').each(function(){ + if(jQuery(this).val() > 0){ + anyaction = true; + return; + } + }); + + if( jQuery('#icl-tm-translation-dashboard td :checkbox:checked').length > 0 && anyaction){ + jQuery('#icl_tm_jobs_submit').removeAttr('disabled'); + }else{ + jQuery('#icl_tm_jobs_submit').attr('disabled','disabled'); + } +} + +function icl_tm_dup_warn(){ + dupsel = false; + jQuery('#icl_tm_languages :radio:checked').each(function(){ + if(jQuery(this).val() == 2){ + dupsel = true; + return; + } + }); + if(dupsel) jQuery('#icl_dup_ovr_warn').fadeIn(); + else jQuery('#icl_dup_ovr_warn').fadeOut(); +} + + +function icl_tm_assign_translator(){ + var thiss = jQuery(this); + var translator_id = thiss.val(); + var translation_controls = thiss.parent().parent().find('.icl_tj_select_translator_controls'); + var job_id = translation_controls.attr('id').replace(/^icl_tj_tc_/,''); + translation_controls.show(); + translation_controls.find('.icl_tj_cancel').click(function(){ + thiss.val(jQuery('#icl_tj_ov_'+job_id).val()); + translation_controls.hide() + }); + translation_controls.find('.icl_tj_ok').unbind('click').click(function(){icl_tm_assign_translator_request(job_id, translator_id, thiss)}); + +} + +function icl_tm_assign_translator_request(job_id, translator_id, select){ + var translation_controls = select.parent().parent().find('.icl_tj_select_translator_controls'); + select.attr('disabled', 'disabled'); + translation_controls.find('.icl_tj_cancel, .icl_tj_ok').attr('disabled', 'disabled'); + var tdwrp = select.parent().parent(); + jQuery.ajax({ + type: "POST", + url: icl_ajx_url, + dataType: 'json', + data: 'icl_ajx_action=assign_translator&job_id='+job_id+'&translator_id='+translator_id+'&_icl_nonce=' + jQuery('#_icl_nonce_at').val(), + success: function(msg){ + if(!msg.error){ + translation_controls.hide(); + if(msg.service == 'icanlocalize'){ + tdwrp.html(msg.message); + }else{ + jQuery('#icl_tj_ov_'+job_id).val(translator_id); + } + }else{ + // + } + select.removeAttr('disabled'); + translation_controls.find('.icl_tj_cancel, .icl_tj_ok').removeAttr('disabled'); + } + }); + + return false; +} + +function icl_tm_update_complete_cb_status(){ + if(jQuery('#icl_tm_editor .icl_tm_finished:checked').length == jQuery('#icl_tm_editor .icl_tm_finished').length){ + jQuery('#icl_tm_editor :checkbox[name=complete]').prop('disabled', false); + }else{ + jQuery('#icl_tm_editor :checkbox[name=complete]').prop('disabled', true); + } +} + +function icl_tm_set_pickup_method(e) { + e.preventDefault(); + + var $form = jQuery(this); + var $submitButton = $form.find(':submit'); + + $submitButton.prop('disabled', true); + var $ajaxLoader = jQuery(icl_ajxloaderimg).insertBefore($submitButton); + + jQuery.ajax({ + type: "POST", + url: icl_ajx_url, + dataType: 'json', + data: 'icl_ajx_action=set_pickup_mode&'+$form.serialize(), + success: function(msg){ + if ( !msg.error ){ + jQuery('#icl_tm_pickup_wrap').load(location.href+' #icl_tm_pickup_wrap', function(resp){ + jQuery(this).html(jQuery(resp).find('#icl_tm_pickup_wrap').html()); + } + ); + } + else { + alert(msg.error); + } + }, + complete: function() { + $ajaxLoader.remove(); + $submitButton.prop('disabled',false); + } + }); + + return false; +} + +function icl_tm_pickup_translations(){ + var thisb = jQuery(this); + thisb.attr('disabled', 'disabled').after(icl_ajxloaderimg); + jQuery.ajax({ + type: "POST", + url: icl_ajx_url, + dataType: 'json', + data: 'icl_ajx_action=pickup_translations&_icl_nonce='+jQuery('#_icl_nonce_pickt').val(), + success: function(msg){ + if(!msg.error){ + url_glue = (-1 == location.href.indexOf('?')) ? '?' : '&'; + jQuery('#icl_tm_pickup_wrap').load(location.href+url_glue+'icl_pick_message='+msg.fetched+' #icl_tm_pickup_wrap', function(resp){ + jQuery(this).html(jQuery(resp).find('#icl_tm_pickup_wrap').html()); + thisb.removeAttr('disabled').next().remove(); + }) + }else{ + alert(msg.error); + thisb.removeAttr('disabled').next().remove(); + } + + } + }); +} + + +function icl_sec_tic_decrement(){ + var curval = parseInt(jQuery('#icl_sec_tic').html()); + if(curval > 0){ + jQuery('#icl_sec_tic').html(curval - 1); + window.setTimeout(icl_sec_tic_decrement, 60000); + }else{ + jQuery('#icl_tm_get_translations').removeAttr('disabled'); + jQuery('#icl_tm_get_translations').next().fadeOut(); + } +} + +/* MC Setup */ + +function iclTmSelectAllJobs(){ + if(jQuery(this).attr('checked')){ + jQuery('#icl-translation-jobs :checkbox').attr('checked', 'checked'); + jQuery('#icl-tm-jobs-cancel-but').removeAttr('disabled'); + }else{ + jQuery('#icl-translation-jobs :checkbox').removeAttr('checked'); + jQuery('#icl-tm-jobs-cancel-but').attr('disabled', 'disabled'); + } +} + +function iclTmCancelJobs(){ + + var tm_prompt = jQuery('#icl-tm-jobs-cancel-msg').html(); + var in_progress = jQuery('tr.icl_tm_status_2 input:checkbox:checked').length; + + if(in_progress > 0){ + tm_prompt += "\n" + jQuery('#icl-tm-jobs-cancel-msg-2').html().replace(/%s/g, in_progress); + jQuery('tr.icl_tm_status_2 :checkbox:checked').parent().parent().addClass('icl_tm_row_highlight'); + } + + if(!confirm(tm_prompt)){ + jQuery('#icl-tm-jobs-form input[name=icl_tm_action]').val('jobs_filter'); + jQuery('tr.icl_tm_row_highlight').removeClass('icl_tm_row_highlight'); + return false; + } + jQuery('#icl-tm-jobs-form input[name=icl_tm_action]').val('cancel_jobs'); + + return true; +} + +function iclTmUpdateJobsSelection(){ + if(jQuery('#icl-translation-jobs :checkbox:checked').length > 0){ + jQuery('#icl-tm-jobs-cancel-but').removeAttr('disabled'); + + if(jQuery('#icl-translation-jobs td :checkbox:checked').length == jQuery('#icl-translation-jobs td :checkbox').length){ + jQuery('#icl-translation-jobs th :checkbox').attr('checked', 'checked'); + }else{ + jQuery('#icl-translation-jobs th :checkbox').removeAttr('checked'); + } + + }else{ + jQuery('#icl-tm-jobs-cancel-but').attr('disabled', 'disabled'); + } +} + +function iclTmPopulateParentFilter(){ + var val = jQuery('#icl_parent_filter_control').val(); + + jQuery('#icl_parent_filter_drop').html(icl_ajxloaderimg); + + if(val){ + jQuery.ajax({ + type: "POST", + url: ajaxurl, + dataType: 'json', + data: 'action=icl_tm_parent_filter&type='+val+'&lang=' + jQuery('form[name="translation-dashboard-filter"]').find('select[name="filter[from_lang]"]').val()+'&parent_id='+jQuery('#icl_tm_parent_id').val()+'&parent_all='+jQuery('#icl_tm_parent_all').val(), + success: function(msg){ + jQuery('#icl_parent_filter_drop').html(msg.html); + + //select page + jQuery('#filter[parent_id]').val(jQuery('#icl_tm_parent_id').val()); + } + }); + }else{ + jQuery('#icl_parent_filter_drop').html(''); + } +} + +function icl_tm_batch_selection(){ + + var action = jQuery(this).attr('href').substr(1); + var value = 0; + + if(action == 'translate-all'){ + value = 1; + }else if(action == 'update-none'){ + value = 0; + }else if(action == 'duplicate-all'){ + value = 2; + } + + jQuery('#icl_tm_languages tbody input:radio[value='+value+']').attr('checked', 'checked'); + + icl_tm_enable_submit(); + + return false; + +} + +function icl_abort_translation(input, job_id){ + + if(!confirm(jQuery('#icl-tm-jobs-cancel-msg-3').html())) return false; + + input.attr('disabled', 'disabled'); + input.after(icl_ajxloaderimg); + + jQuery.ajax({ + type: "POST", + url: ajaxurl, + dataType: 'json', + data: 'action=icl_tm_abort_translation&job_id='+job_id, + success: function(msg){ + if(!msg.error){ + input.val(msg.message); + window.location.href = window.location.href.replace(/#(.*)/, ''); + }else{ + alert(msg.error); + } + input.next().hide(); + } + }); + + + + +} \ No newline at end of file diff --git a/src/wp-content/themes/avada/.gitignore b/src/wp-content/themes/avada/.gitignore new file mode 100644 index 0000000..90ad747 --- /dev/null +++ b/src/wp-content/themes/avada/.gitignore @@ -0,0 +1,2 @@ +/admin/.DS_Store +.DS_Store \ No newline at end of file diff --git a/src/wp-content/themes/avada/0 - READ ME FIRST.rtf b/src/wp-content/themes/avada/0 - READ ME FIRST.rtf new file mode 100644 index 0000000..a3c6cb6 --- /dev/null +++ b/src/wp-content/themes/avada/0 - READ ME FIRST.rtf @@ -0,0 +1,43 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +{\fonttbl\f0\fswiss\fcharset0 ArialMT;} +{\colortbl;\red255\green255\blue255;\red26\green26\blue26;\red16\green60\blue192;} +\margl1440\margr1440\vieww15460\viewh16520\viewkind0 +\deftab720 +\pard\pardeftab720 + +\f0\fs26 \cf2 -------------------------------------------------------------------------------------------------\ +\pard\pardeftab720 + +\b \cf2 ALL PRODUCT SUPPORT AND DOCUMENTATION IS ONLINE +\b0 \ +-------------------------------------------------------------------------------------------------\ +\ +All support is handled on our forum. Users must register and verify\ +their\'a0purchase code\'a0to get support. Our documentation, video tutorials \ +and knowledgebase are also online. See the links below.\ +\ +\ +\pard\pardeftab720 +{\field{\*\fldinst{HYPERLINK "http://theme-fusion.com/support/"}}{\fldrslt +\b \cf3 \ul \ulc3 Click Here To Create A Forum Account}}\ +\ +\pard\pardeftab720 +{\field{\*\fldinst{HYPERLINK "http://theme-fusion.com/support/knowledgebase/"}}{\fldrslt +\b \cf3 \ul \ulc3 View Our KnowledgeBase}}\ +\ +\pard\pardeftab720 +{\field{\*\fldinst{HYPERLINK "http://theme-fusion.com/support/documentation/avada-documentation/"}}{\fldrslt +\b \cf3 \ul \ulc3 View Our Online Documentation}}\ +\pard\pardeftab720 + +\b \cf2 \ +\pard\pardeftab720 +{\field{\*\fldinst{HYPERLINK "http://theme-fusion.com/support/video-tutorials/avada-videos/"}}{\fldrslt \cf3 View Our Training Videos}} +\b0 \ +\pard\pardeftab720 + +\b \cf2 \ +\pard\pardeftab720 +{\field{\*\fldinst{HYPERLINK "http://theme-fusion.com/knowledgebase/forum-guidelines-policies/"}}{\fldrslt \cf3 View Our General Guidelines & Support Policy}} +\b0 \ +} \ No newline at end of file diff --git a/src/wp-content/themes/avada/100-width.php b/src/wp-content/themes/avada/100-width.php new file mode 100644 index 0000000..863236f --- /dev/null +++ b/src/wp-content/themes/avada/100-width.php @@ -0,0 +1,25 @@ + +
              + +
              > + + + +
              + +
              + +
              + + +
              + + + + +
              + +
              + \ No newline at end of file diff --git a/src/wp-content/themes/avada/404.php b/src/wp-content/themes/avada/404.php new file mode 100644 index 0000000..2709ef1 --- /dev/null +++ b/src/wp-content/themes/avada/404.php @@ -0,0 +1,37 @@ + +
              +
              +
              +
              +

              +
              +
              +
              +
              +
              + +
              +

              +

              +
              + +
              +
              +
              +
              +
              +
              + \ No newline at end of file diff --git a/src/wp-content/themes/avada/admin/assets/css/admin-style.css b/src/wp-content/themes/avada/admin/assets/css/admin-style.css new file mode 100644 index 0000000..9aae307 --- /dev/null +++ b/src/wp-content/themes/avada/admin/assets/css/admin-style.css @@ -0,0 +1,898 @@ +----------------------------------------------------------------------------------- +/* Admin styles +/*-----------------------------------------------------------------------------------*/ + +.updated, .error { + display:none!important +} /* disable the admin notices */ +#of_container { + margin: 15px; + width: 785px; + position:relative; + z-index: 0 +} +#of_container #header { + height: 70px; + background:#f1f1f1; + border: 1px solid #ccc; + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; + background-image: -ms-linear-gradient(top,#f9f9f9,#ececec); + background-image: -moz-linear-gradient(top,#f9f9f9,#ececec); + background-image: -o-linear-gradient(top,#f9f9f9,#ececec); + background-image: -webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec)); + background-image: -webkit-linear-gradient(top,#f9f9f9,#ececec); + background-image: linear-gradient(top,#f9f9f9,#ececec); + -moz-box-shadow: inset 0 1px 0 #fff; + -webkit-box-shadow: inset 0 1px 0 #fff; + box-shadow: inset 0 1px 0 #fff; +} +#of_container #header .logo { + float: left; + margin:10px 20px; +} +#of_container #header .docs { + float: left; + margin:28px 27px; + font-size: 14px; +} +#of_container #header .docs a { + text-decoration: none; +} +#of_container #header .link_sep { + padding: 0 10px; +} +#of_container #js-warning { + color: red; + float: left; + margin: 20px 10px; + width: 330px; +} +#of_container ul,#of_container ol {margin: 0;} +.js #of_container #js-warning { + display: none; + } + +#of_container #header .logo h3 { + display:inline-block; + font-style:normal; + padding-right:5px; + font-size:23px; + font-weight:normal; + margin-bottom:0; + margin-top:15px; +} +#of_container #header .logo span { + color:#888888; +} +#of_container #header .icon-option { + float: right; + height: 32px; + width: 32px; + background: url(../images/icon_option.png) no-repeat; + margin:20px 30px 0; +} + +#of_container #info_bar { + background: #f3f3f3; + border:solid #d8d8d8; + border-bottom:1px solid #D8D8D8; + border-width:0px 1px 1px 1px; + padding: 6px 20px 0px 6px; + height: 31px; + text-align: right; + -moz-box-shadow: inset 0 1px 0 #fcfcfc; + -webkit-box-shadow: inset 0 1px 0 #fcfcfc; + box-shadow: inset 0 1px 0 #fcfcfc; +} + +#of_container #expand_options{ +cursor: pointer; +display: block; +height: 22px; +width: 21px; +float: left; +font-size:0px; +text-indent: -9999px; +margin: 0 0 0 10px; +border: 1px solid #bbb; +-webkit-border-radius: 2px; +-moz-border-radius: 2px; +border-radius: 2px; +} +#of_container #info_bar .expand { background: url(../images/toggle_tabs.png) no-repeat -2px -1px; } +#of_container #info_bar .close { background: url(../images/toggle_tabs.png) no-repeat -2px -26px; } +#of_container #expand_options:hover { + cursor: pointer; + border-color: #888; +} +#of_container #main { + background-color: #f1f1f1; + border-left: 1px solid #d8d8d8; + border-right: 1px solid #d8d8d8; + border-bottom: 1px solid #d8d8d8; +} +#of_container #of-nav { + float: left; + position: relative; + z-index: 9999; + width: 160px; +} +#of_container #of-nav ul { + margin:0; +} +#of_container #of-nav li { + margin-bottom:0; + -moz-box-shadow: inset 0 1px 0 #f9f9f9; + -webkit-box-shadow: inset 0 1px 0 #f9f9f9; + box-shadow: inset 0 1px 0 #f9f9f9; + margin-right: 1px; + border-bottom: 1px solid #d8d8d8; +} + +#of_container #of-nav li.menu { + padding-top: 0; +} + +#of_container #of-nav li:last-child { + -moz-box-shadow: inset 0 1px 0 #f9f9f9, 0 1px 0 #f9f9f9; + -webkit-box-shadow: inset 0 1px 0 #f9f9f9, 0 1px 0 #f9f9f9; + box-shadow: inset 0 1px 0 #f9f9f9, 0 1px 0 #f9f9f9; +} + +#of_container #of-nav li.current { + margin-right: 0; +} + +#of_container #of-nav li a, #of_container #of-nav ul li a:link, #of-nav ul li a:visited { + display: block; + padding: 10px 10px 10px 40px; + background-repeat: no-repeat; + background-position: 13px 10px; + font-weight:bold; + font-size: 12px; + text-decoration: none; + color: #555; + opacity: 0.5; +} +#of_container #of-nav ul li.current a { + background-color: #fcfcfc; + color: #797979; + opacity: 1; +} + +#of_container #of-nav ul li a:hover { + color: #d54e21; + opacity: 1; +} + +/*menu icons - customize to your liking*/ +#of_container #of-nav li.header a{ background-image:url(../images/icon-header.png);} +#of_container #of-nav li.logo a{ background-image:url(../images/icon-logo.png);} +#of_container #of-nav li.menu a{ background-image:url(../images/icon-menu.png);} +#of_container #of-nav li.pagetitlebar a{ background-image:url(../images/icon-pagetitlebar.png);} +#of_container #of-nav li.slidingbar a{ background-image:url(../images/icon-slidingbar.png);} +#of_container #of-nav li.footer a{ background-image:url(../images/icon-footer.png);} +#of_container #of-nav li.background a{ background-image:url(../images/icon-background.png);} +#of_container #of-nav li.typography a{ background-image:url(../images/icon-typography.gif);} +#of_container #of-nav li.general a{ background-image:url(../images/icon-settings.png);} +#of_container #of-nav li.styling a{ background-image:url(../images/icon-paint.png);} +#of_container #of-nav li.blog a{ background-image:url(../images/icon-docs.png);} +#of_container #of-nav li.portfolio a{ background-image:url(../images/icon-portfolio.png);} +//#of_container #of-nav li.socialmedia a, #of_container #of-nav li.socialsharingoptions a{ background-image:url(../images/icon-social.png);} +#of_container #of-nav li.themefusionslider a{ background-image:url(../images/icon-slider.png);} +#of_container #of-nav li.backup a {background: url(../images/icon-backup.png) no-repeat;} +#of_container #of-nav li.lightbox a {background: url(../images/wrench16.png) no-repeat;} +#of_container #of-nav li.socialsharingbox a {background: url(../images/social_sharing.png) no-repeat;} +#of_container #of-nav li.slideshows a {background: url(../images/slideshows.png) no-repeat;} +#of_container #of-nav li.contact a {background: url(../images/contact.png) no-repeat;} +#of_container #of-nav li.extra a {background: url(../images/extra.png) no-repeat;} +#of_container #of-nav li.customcss a {background: url(../images/css.png) no-repeat;} +#of_container #of-nav li.upgrade a {background: url(../images/upgrade_icon.png) no-repeat;} +#of_container #of-nav li.elasticslider a {background: url(../images/elasticslider_icon.png) no-repeat;} +#of_container #of-nav li.socialmedia a {background: url(../images/social_links_icon.png) no-repeat;} +#of_container #of-nav li.sidebar a {background: url(../images/sidebar.png) no-repeat;} +#of_container #of-nav li.shortcodestyling a {background: url(../images/shortcode_styling.png) no-repeat;} +#of_container #of-nav li.woocommerce a {background: url(../images/woo_theme_options_icon.png) no-repeat;} + +#of_container #content { + float: left; + min-height: 500px; + width: 595px; + margin-left: -1px; + padding: 0 14px; + font-family: "Lucida Grande", Sans-serif; + background-color: #FCFCFC; + border-left: 1px solid #d8d8d8; + -moz-box-shadow: inset 0 1px 0 #fff; + -webkit-box-shadow: inset 0 1px 0 #fff; + box-shadow: inset 0 1px 0 #fff; +} +#of_container #content .section { + margin-bottom: 10px; + overflow: hidden; +} +#of_container #content .section h3.heading { + font-family:; + margin: 10px 0 10px 0; + padding: 7px 0px; + border-bottom: 1px solid #e7e7e7; + font-size: 14px; +} +#of_container #content .section .controls { + float: left; + width: 345px; + margin: 0 15px 0 0; +} +#of_container #content .section .explain { + float: left; + width: 225px; + padding: 0 10px 0 0; + font-size: 11px; + color: #999999; +} +#of_container #content .section-checkbox .controls { + width:25px +} + +#of_container #content .section-multicheck .controls input.checkbox { + margin-top:9px; +} + +#of_container #content .section-checkbox .explain { + max-width:93%; +} +#of_container #content .section-color .controls { + width:105px +} +#of_container #content .section-color .explain { + width:440px +} +#of_container #content .section-info h3.heading { + display:none; +} +#of_container #content .section-info .controls { + margin: 20px 0 0; + float:none; + width: auto; +} +#of_container #content .section-info .controls .of-info{ + padding: 15px 10px; + line-height: 1.5em; + font-size: 13px; + background-color: #E7E6E6; + border: 1px solid #D0D0D0; + color:#9D9D9D; +} + +#of_container #content .section-info .controls .of-info h3{ + text-transform: uppercase; + color:#9D9D9D; +} + +#of_container #content .section-info .controls .of-info ._icon { + height:16px; width:16px; + margin: 0 10px 0 0; + float: left; +} +#of_container #content .section-info .controls small { + font-size: 12px +} +#of_container #content .section-info h3.heading { + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; +} +#of_container #content .section-info .controls { + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; +} +#of_container .sorter {margin-right: -20px;} +#of_container .sorter ul { + background: #F9F9F9; + border: 1px dashed #E3E3E3; + min-height: 40px; + padding: 10px 10px 0; + width: 145px; + float: left; + margin: 0 15px 0 0; +} +#of_container .sorter ul h3 { + margin: 0 0 10px; + text-align: center; + color: #777; + text-transform: capitalize; +} +#of_container .sorter ul li { + border: 1px solid #DFDFDF; + cursor: move; + font-weight: bold; + margin-bottom:10px; + padding:0 10px; + height: 40px; + line-height: 40px; + background-color: #F1F1F1; + background-image: -ms-linear-gradient(top,#f9f9f9,#ececec); + background-image: -moz-linear-gradient(top,#f9f9f9,#ececec); + background-image: -o-linear-gradient(top,#f9f9f9,#ececec); + background-image: -webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec)); + background-image: -webkit-linear-gradient(top,#f9f9f9,#ececec); + background-image: linear-gradient(top,#f9f9f9,#ececec); + overflow: hidden; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: inset 0 1px 0 #fff; + -webkit-box-shadow: inset 0 1px 0 #fff; + box-shadow: inset 0 1px 0 #fff; + text-align:center; +} + + +#of_container #content .section-sorter li.placeholder { + background:#f9f9f9; + border-width:1px; + border-style:dashed; + height:40px;} + +#of_container #content .section-slider li.placeholder { + background:#f9f9f9; + border-width:1px; + border-style:dashed; + height:33px;} + + +#of_container textarea, #of_container input, #of_container select, #of_container button{ + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + border-style:solid; + border-width:1px; +} +#of_container .controls input, #of_container .controls select, #of_container .controls textarea { + margin-bottom: 9px !important; + background-color: #f1f1f1; + border: 1px solid; + border-color: #ccc #e6e6e6 #e6e6e6 #ccc; + width: 340px; + padding: 4px; + font-family: "Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, sans-serif; + font-size: 12px; +} +#of_container .controls input:hover, #of_container .controls textarea:hover { + background-color: #f9f9f9; +} + +#of_container .controls input:focus, #of_container .controls textarea:focus { + background-color: #fff; + border-color: #ccc #e6e6e6 #e6e6e6 #ccc; + outline:0; +} + +#of_container .controls .upload { + width: 340px; +} + + +#of_container .controls select { + height: 28px; + padding: 4px 5px; + width: 340px +} +#of_container .controls textarea { + width: 345px; +} +#of_container input[type=text] { + width: 340px; +} +#of_container input.checkbox { + width: 16px; + margin-top:3px; +} +#of_container input.of-radio { + width: 30px; +} +label.radio, label.multicheck { + position: relative; + bottom: 9px; +} +#of_container .controls .input-text-small { + width: 60px; + margin-right:10px +} +#of_container .meta-two { + margin-right:10px +} +#of_container .controls .of-color { + float:left; + width: 70px; + margin-left:5px; /* font-size:20px; height:34px;*/ +} +#of_container #content .section-typography .controls { + width:440px +} +#of_container #content .section-typography .explain { + width:130px +} +#of_container .controls .of-typography-size { + width:70px; + float:left +} +#of_container .controls .of-typography-unit { + width:60px; + float:left +} +#of_container .controls .of-typography-face { + width:145px; + float:left +} +#of_container .controls .of-typography-style { + width:95px; + float:left +} +#of_container .controls .of-radio-img-img { + border:3px solid #fff; + margin:0 5px 10px 0; + display:none; + cursor:pointer; + float:left; +} +#of_container .controls .of-radio-img-selected { + border:3px solid #ccc +} +#of_container .controls .of-radio-img-img:hover { + opacity:.8; +} + +#of_container .controls .of-radio-tile-img { + width:50px; + height:50px; + border:3px solid #f9f9f9; + margin:0 5px 10px 0; + display:none; + cursor:pointer; + float:left; +} +#of_container .controls .of-radio-tile-selected { + border:3px solid #ccc +} +#of_container .controls .of-radio-tile-img:hover { + opacity:.8; +} + +#of_container .controls .of-border-width { + width:70px; + float:left +} +#of_container .controls .of-border-style { + width:95px; + float:left +} +#of_container .group { + display:none; + padding-bottom:20px; +} +#of_container .group h2 { + display:none; + border-bottom:3px solid #e7e7e7 +} +#of_container .controls input:focus, #of_container select:focus, #of_container textarea:focus { + background:#fff; +} + +#of_container .accept { + background: #DBF6BE no-repeat 10px center; + border: solid #9BBF65; + border-width: 0px 1px 1px 1px; + color: #060; + font-weight: bold; + padding: 10px; + text-align: center; +} +#of_container .warning { + background: #ffeeee no-repeat 10px center; + ; + border: solid #dfbfbf; + border-width: 0px 1px 1px 1px; + color: #333; + font-weight: bold; + padding: 10px; + text-align: center; +} +#of_container .update_available { + background: #FFFEEB no-repeat 10px center; + border: solid #CCCCCC; + border-width: 0px 1px 1px 1px; + color: #333; + font-weight: bold; + padding: 10px; + text-align: center; +} +#of_container .of-save-popup { + position:absolute; + background:rgba(0, 0, 0, 0.5); + color:#fff; + font-size:24px; + text-align:center; + display:none; + -webkit-border-radius: 12px; + -moz-border-radius: 12px; + border-radius: 12px; +} + +#of_container .of-save-popup div{ + background-repeat: no-repeat; + background-position: 20px 50%; + padding:30px 30px 30px 60px; +} +#of_container .of-save-save { + background-image: url(../images/button_check.png); +} +#of_container .of-save-reset { + background-image: url(../images/sign_warning.png); +} +#of_container .of-save-fail { + background-image:url(../images/stop.png); +} + +#of_container .accept, +#of_container .warning, +#of_container .update_available, +#of_container .of-save-popup { + z-index: 9999; +} + +#of_container .upload_button_div { + margin-top:7px; + margin-bottom: 15px; +} + +#of_container .button { +border-width: 1px; +border-style: solid; +-moz-border-radius: 3px; +-khtml-border-radius: 3px; +-webkit-border-radius: 3px; +border-radius: 3px; +border-color: #dfdfdf; +background-color: #fff; +margin:4px 0 4px; +} + + +#of_container .button:hover,#of_container .button_hover { +border-color: #bbb; +color: #464646; +} + +#of_container .button_active { + background:#eee url(../../images/white-grad-active.png) repeat-x scroll left top; +} + +#of_container .image_reset_button, #of_container .mlu_remove_button { + margin-left:10px; + color:#ef521d; +} + +#of_container .image_reset_button:hover, #of_container .mlu_remove_button:hover { + color:red; +} + +#of_container .upload-error { + float:left; + color:#666; + font-size:10px; + font-weight:bold; + text-decoration:none; + text-shadow:1px 1px 0 #FFFFFF; + margin: 0 10px 0 0; + padding:3px 10px; + background:#FFDFEC; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +#of_container .reset-button { + font-family:Arial,Verdana,sans-serif; + float:left; + padding: 0 7px; + height: 23px; + line-height: 23px; + margin:0 ; + color: #ef521d; + border-color: #bbb; +} + +#of_container .reset-button:hover { color: #ef521d; border-color: #888} + +#of_container .slide_add_button { float:right; margin-top:10px; } + + +#of_container .save_bar { + background: #f3f3f3; + border:solid #ccc; + border-width:0px 1px 1px 1px; + padding: 10px 20px 0px 20px; + height: 35px; + text-align: right; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; + -moz-box-shadow: inset 0 1px 0 #fff; + -webkit-box-shadow: inset 0 1px 0 #fff; + box-shadow: inset 0 1px 0 #fff; +} + +#of_save { + font-family: Arial,Verdana,sans-serif; + padding: 0 7px; + height: 23px; + line-height: 23px; + border:1px solid #0a6d9b !important; + float:right; +} + +#of_save:hover { + border:1px solid #111 !important; +} + +#of_container .hide { + display:none +} +#of_container .ajax-loading-img-top { + margin: 5px 4px 0; + float:left +} +#of_container .ajax-loading-img-bottom { + margin: 5px 4px 0; +} +#of_container .ajax-reset-loading-img { + display: block; + margin-left: 100px; +} + +#of_container .screenshot { + max-width:340px; + margin-bottom:9px; +} + +#of_container .of-uploaded-image { + +} + +#of_container .of-option-image { + max-width:340px; + padding: 5px; + border:1px solid #e3e3e3; + background:#f7f7f7; + -moz-border-radius: 3px; + -khtml-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +#of_container .select_wrapper { +-moz-border-radius: 4px; +-webkit-border-radius: 4px; +border-radius: 4px; +font-family: "Lucida Grande","Lucida Sans Unicode",Arial,Verdana,sans-serif; +font-size: 12px; +background: #F1F1F1 url(../images/select.png) no-repeat right center; +border-color: #CCC #E6E6E6 #E6E6E6 #CCC;; +border-style: solid; +border-width: 1px; +float: left; +height: 26px; +width: 344px; +margin: 0; +margin-bottom: 9px !important; +width: 340px; +display: block; +color: #888; +position:relative; +} + +#of_container .select_wrapper:hover {background-color:#f9f9f9;} + +#of_container .mini .controls select, #of_container #content .section .mini .controls, #of_container .controls .typography-size, #of_container .controls .border-width,#of_container .controls .mini,#of_container .mini .controls input, #of_container #content .mini .controls {width: 70px;} +#of_container .controls .typography-face {width: 145px;} +#of_container .controls .typography-style, #of_container .controls .border-style {width: 95px;} +#of_container .controls .typography-size,#of_container .controls .typography-face,#of_container .controls .typography-style, #of_container .controls .border-width, #of_container .controls .border-style {margin-right:5px;} + +#of_container #content .mini .explain { + width:500px; +} +#of_container .of-notice { + background: #ffd1d1; + border:1px solid #DFDFDF; + -moz-border-radius:8px; + text-align: center; + margin-bottom: 15px +} + +#of_container .slider li { + width: 345px; + border: 1px solid #dfdfdf; + background:#f9f9f9; + overflow:hidden; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: inset 0 1px 0 #fff; + -webkit-box-shadow: inset 0 1px 0 #fff; + box-shadow: inset 0 1px 0 #fff; +} + +#of_container .slide_header { + cursor:move; + height:32px; + padding-left:10px; + padding-right:20px; + line-height:32px; + background-color: #F1F1F1; + margin: 1px 0 -1px 0; + border-bottom: 1px solid #dfdfdf; + background-image: -ms-linear-gradient(top,#f9f9f9,#ececec); + background-image: -moz-linear-gradient(top,#f9f9f9,#ececec); + background-image: -o-linear-gradient(top,#f9f9f9,#ececec); + background-image: -webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec)); + background-image: -webkit-linear-gradient(top,#f9f9f9,#ececec); + background-image: linear-gradient(top,#f9f9f9,#ececec); + overflow:hidden; + position: relative; +} + +#of_container .slide_body { + display:none; + padding:10px 10px 10px 11px; +} + + +#of_container .slider li input,#of_container .slider li textarea,#of_container .slider li .screenshot,#of_container .slider li .of-option-image { + width:311px; +} + +#of_container a.slide_edit_button, #of_container a.slide_delete_button { + text-indent:-9999px; + font-size:0; +} +#of_container a.slide_edit_button { + position: absolute; + right: 0; + top: 0; + width:32px; + height:32px; + background: url(../images/dropdown-arrow.png) no-repeat 9px -28px; +} + #of_container a:hover.slide_edit_button { + background: url(../images/dropdown-arrow.png) no-repeat 9px 11px;} + +#of_container a.slide_delete_button { + float: right; + margin: 0 0 0 7px; + width:16px; + height:16px; + background: url(../images/icon-delete.png) no-repeat +} + +#of_container .select_wrapper span { +height: 26px; +line-height: 26px; +z-index: 2; +padding-left: 6px; +position:absolute; +left:0; +} + +#of_container .select_wrapper .select { +cursor: pointer; +height: 28px; +margin: 0; +-moz-opacity: 0; +filter: alpha(opacity: 0); +opacity: 0; +padding: 0; +position: relative; +width: inherit; +z-index: 4; +} + +#of_backup { + margin: 40px 20px; + width: 600px; +} +#of_backup textarea { + margin-bottom: 9px !important; + background-color: #F1F1F1; + border: 1px solid; + width: 100%; + padding: 4px; + font-family: "Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, sans-serif; + font-size: 12px; + border-color: #CCC #E6E6E6 #E6E6E6 #CCC; +} + +#of_container #content .section-backup .controls { width: 80%} +#of_container #content .section-backup .explain { + display:none +} +#of_container #content .section-backup .backup-box { + margin: 0 0 20px; +} + +#of_container #content .section-backup .instructions { + margin: 0 0 10px; + color: #777; +} +#of_container #content .section-backup .button, #of_container #content .section-transfer .button { + margin: 0 25px 0 0; +} + +.temphide {display:none;} + +#content_length #excerpt, #portfolio_content_length #excerpt { height: auto !important; } +/*-------------------------------------------------------------------------------------------*/ +/* GENERAL STYLES */ +/*-------------------------------------------------------------------------------------------*/ + +/* http://sonspring.com/journal/clearing-floats */ + +html body * span.clear, html body * div.clear, html body * li.clear, html body * dd.clear { + background: none; + border: 0; + clear: both; + display: block; + float: none; + font-size: 0; + list-style: none; + margin: 0; + padding: 0; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0; +} + + +/*-------------------------------------------------------------------------------------------*/ +/* Tipsy +/*-------------------------------------------------------------------------------------------*/ +.tipsy { font-size: 10px; position: absolute; padding: 5px; z-index: 100000; } + .tipsy-inner { background-color: #000; color: #FFF; max-width: 200px; padding: 5px 8px 4px 8px; text-align: center; } + + /* Rounded corners */ + .tipsy-inner { border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; } + + /* Uncomment for shadow */ + /*.tipsy-inner { box-shadow: 0 0 5px #000000; -webkit-box-shadow: 0 0 5px #000000; -moz-box-shadow: 0 0 5px #000000; }*/ + + .tipsy-arrow { position: absolute; width: 0; height: 0; line-height: 0; border: 5px dashed #000; } + + /* Rules to colour arrows */ + .tipsy-arrow-n { border-bottom-color: #000; } + .tipsy-arrow-s { border-top-color: #000; } + .tipsy-arrow-e { border-left-color: #000; } + .tipsy-arrow-w { border-right-color: #000; } + + .tipsy-n .tipsy-arrow { top: 0px; left: 50%; margin-left: -5px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent; } + .tipsy-nw .tipsy-arrow { top: 0; left: 10px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent;} + .tipsy-ne .tipsy-arrow { top: 0; right: 10px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent;} + .tipsy-s .tipsy-arrow { bottom: 0; left: 50%; margin-left: -5px; border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; } + .tipsy-sw .tipsy-arrow { bottom: 0; left: 10px; border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; } + .tipsy-se .tipsy-arrow { bottom: 0; right: 10px; border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; } + .tipsy-e .tipsy-arrow { right: 0; top: 50%; margin-top: -5px; border-left-style: solid; border-right: none; border-top-color: transparent; border-bottom-color: transparent; } +.tipsy-w .tipsy-arrow { left: 0; top: 50%; margin-top: -5px; border-right-style: solid; border-left: none; border-top-color: transparent; border-bottom-color: transparent; } + +#section-bg_pattern .of-radio-img-img{width:30px; height:30px;} +#section-header_layout .of-radio-img-img{width:590px; border:3px solid #cccccc !important; margin-bottom:18px !important;} +#section-header_layout .of-radio-img-selected{border:3px solid #8b8b8b !important;} + +@media only screen and (-webkit-max-device-pixel-ratio: 0.95), only screen and (-o-max-device-pixel-ratio: 95/100), only screen and (max-resolution: 90dpi) { + #of_container { + width: 790px; + } +} + +/* Customization */ +#section-status_revslider .controls { display: none; } \ No newline at end of file diff --git a/src/wp-content/themes/avada/admin/assets/css/colorpicker.css b/src/wp-content/themes/avada/admin/assets/css/colorpicker.css new file mode 100644 index 0000000..8f66acc --- /dev/null +++ b/src/wp-content/themes/avada/admin/assets/css/colorpicker.css @@ -0,0 +1,177 @@ +.colorpicker { + width: 356px; + height: 176px; + overflow: hidden; + position: absolute; + background: url(../images/colorpicker/colorpicker_background.png); + font-family: Arial, Helvetica, sans-serif; + display: none; +} +.colorpicker_color { + width: 150px; + height: 150px; + left: 14px; + top: 13px; + position: absolute; + background: #f00; + overflow: hidden; + cursor: crosshair; +} +.colorpicker_color div { + position: absolute; + top: 0; + left: 0; + width: 150px; + height: 150px; + background: url(../images/colorpicker/colorpicker_overlay.png); +} +.colorpicker_color div div { + position: absolute; + top: 0; + left: 0; + width: 11px; + height: 11px; + overflow: hidden; + background: url(../images/colorpicker/colorpicker_select.gif); + margin: -5px 0 0 -5px; +} +.colorpicker_hue { + position: absolute; + top: 13px; + left: 171px; + width: 35px; + height: 150px; + cursor: n-resize; +} +.colorpicker_hue div { + position: absolute; + width: 35px; + height: 9px; + overflow: hidden; + background: url(../images/colorpicker/colorpicker_indic.gif) left top; + margin: -4px 0 0 0; + left: 0px; +} +.colorpicker_new_color { + position: absolute; + width: 60px; + height: 30px; + left: 213px; + top: 13px; + background: #f00; +} +.colorpicker_current_color { + position: absolute; + width: 60px; + height: 30px; + left: 283px; + top: 13px; + background: #f00; +} +.colorpicker input { + background-color: transparent; + border: 1px solid transparent; + position: absolute; + font-size: 10px; + font-family: Arial, Helvetica, sans-serif; + color: #898989; + top: 4px; + right: 11px; + text-align: right; + margin: 0; + padding: 0; + height: 12px; +} +.colorpicker_hex { + position: absolute; + width: 72px; + height: 22px; + background: url(../images/colorpicker/colorpicker_hex.png) top; + left: 212px; + top: 142px; +} +.colorpicker_hex input { + right: 6px; +} +.colorpicker_field { + height: 22px; + width: 62px; + background-position: top; + position: absolute; +} +.colorpicker_field span { + position: absolute; + width: 12px; + height: 22px; + overflow: hidden; + top: 0; + right: 0; + cursor: n-resize; +} +.colorpicker_rgb_r { + background-image: url(../images/colorpicker/colorpicker_rgb_r.png); + top: 52px; + left: 212px; +} +.colorpicker_rgb_g { + background-image: url(../images/colorpicker/colorpicker_rgb_g.png); + top: 82px; + left: 212px; +} +.colorpicker_rgb_b { + background-image: url(../images/colorpicker/colorpicker_rgb_b.png); + top: 112px; + left: 212px; +} +.colorpicker_hsb_h { + background-image: url(../images/colorpicker/colorpicker_hsb_h.png); + top: 52px; + left: 282px; +} +.colorpicker_hsb_s { + background-image: url(../images/colorpicker/colorpicker_hsb_s.png); + top: 82px; + left: 282px; +} +.colorpicker_hsb_b { + background-image: url(../images/colorpicker/colorpicker_hsb_b.png); + top: 112px; + left: 282px; +} +.colorpicker_submit { + position: absolute; + width: 22px; + height: 22px; + background: url(../images/colorpicker/colorpicker_submit.png) top; + left: 322px; + top: 142px; + overflow: hidden; +} +.colorpicker_focus { + background-position: center; +} +.colorpicker_hex.colorpicker_focus { + background-position: bottom; +} +.colorpicker_submit.colorpicker_focus { + background-position: bottom; +} +.colorpicker_slider { + background-position: bottom; +} + +.colorSelector { + position: relative; + width: 27px; + height: 27px; + background: url(../images/colorpicker/select.png); + float:left; +} +.colorSelector div { + position: absolute; + top: 4px; + left: 3px; + width: 21px; + height: 19px; + background: url(../images/colorpicker/select.png) center; +} \ No newline at end of file diff --git a/src/wp-content/themes/avada/admin/assets/images/1col.png b/src/wp-content/themes/avada/admin/assets/images/1col.png new file mode 100644 index 0000000..c6d958c Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/1col.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/2-col-portfolio.png b/src/wp-content/themes/avada/admin/assets/images/2-col-portfolio.png new file mode 100644 index 0000000..6ec75bc Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/2-col-portfolio.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/2cl.png b/src/wp-content/themes/avada/admin/assets/images/2cl.png new file mode 100644 index 0000000..267eeef Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/2cl.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/2cr.png b/src/wp-content/themes/avada/admin/assets/images/2cr.png new file mode 100644 index 0000000..1994a19 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/2cr.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/3-col-portfolio.png b/src/wp-content/themes/avada/admin/assets/images/3-col-portfolio.png new file mode 100644 index 0000000..1317db0 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/3-col-portfolio.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/3cm.png b/src/wp-content/themes/avada/admin/assets/images/3cm.png new file mode 100644 index 0000000..7734aa5 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/3cm.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/3cr.png b/src/wp-content/themes/avada/admin/assets/images/3cr.png new file mode 100644 index 0000000..4882ca2 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/3cr.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/4-col-portfolio.png b/src/wp-content/themes/avada/admin/assets/images/4-col-portfolio.png new file mode 100644 index 0000000..c8fa248 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/4-col-portfolio.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/accept.png b/src/wp-content/themes/avada/admin/assets/images/accept.png new file mode 100644 index 0000000..72a296e Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/accept.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/button_check.png b/src/wp-content/themes/avada/admin/assets/images/button_check.png new file mode 100644 index 0000000..aed2e62 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/button_check.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/blank.gif b/src/wp-content/themes/avada/admin/assets/images/colorpicker/blank.gif new file mode 100644 index 0000000..8368bae Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/blank.gif differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_background.png b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_background.png new file mode 100644 index 0000000..3cdcd40 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_background.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_hex.png b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_hex.png new file mode 100644 index 0000000..56f8e1e Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_hex.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_hsb_b.png b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_hsb_b.png new file mode 100644 index 0000000..51f9462 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_hsb_b.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_hsb_h.png b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_hsb_h.png new file mode 100644 index 0000000..7fc625d Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_hsb_h.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_hsb_s.png b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_hsb_s.png new file mode 100644 index 0000000..064fad0 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_hsb_s.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_indic.gif b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_indic.gif new file mode 100644 index 0000000..3dcfb3a Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_indic.gif differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_overlay.png b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_overlay.png new file mode 100644 index 0000000..7110cc3 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_overlay.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_rgb_b.png b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_rgb_b.png new file mode 100644 index 0000000..51f9462 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_rgb_b.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_rgb_g.png b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_rgb_g.png new file mode 100644 index 0000000..032f259 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_rgb_g.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_rgb_r.png b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_rgb_r.png new file mode 100644 index 0000000..e3a6f1b Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_rgb_r.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_select.gif b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_select.gif new file mode 100644 index 0000000..9e97cb7 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_select.gif differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_submit.png b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_submit.png new file mode 100644 index 0000000..463cd9c Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/colorpicker_submit.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/colorpicker/select.png b/src/wp-content/themes/avada/admin/assets/images/colorpicker/select.png new file mode 100644 index 0000000..47fe0cb Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/colorpicker/select.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/contact.png b/src/wp-content/themes/avada/admin/assets/images/contact.png new file mode 100644 index 0000000..9aee196 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/contact.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/css.png b/src/wp-content/themes/avada/admin/assets/images/css.png new file mode 100644 index 0000000..3218e65 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/css.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/dropdown-arrow.png b/src/wp-content/themes/avada/admin/assets/images/dropdown-arrow.png new file mode 100644 index 0000000..823b0f8 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/dropdown-arrow.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/elasticslider_icon.png b/src/wp-content/themes/avada/admin/assets/images/elasticslider_icon.png new file mode 100644 index 0000000..53519f0 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/elasticslider_icon.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/extra.png b/src/wp-content/themes/avada/admin/assets/images/extra.png new file mode 100644 index 0000000..67c7607 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/extra.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/favicon.ico b/src/wp-content/themes/avada/admin/assets/images/favicon.ico new file mode 100644 index 0000000..3243327 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/favicon.ico differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-add.png b/src/wp-content/themes/avada/admin/assets/images/icon-add.png new file mode 100644 index 0000000..35f8492 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-add.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-background.png b/src/wp-content/themes/avada/admin/assets/images/icon-background.png new file mode 100644 index 0000000..ac0e003 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-background.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-backup.png b/src/wp-content/themes/avada/admin/assets/images/icon-backup.png new file mode 100644 index 0000000..b2994e7 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-backup.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-delete.png b/src/wp-content/themes/avada/admin/assets/images/icon-delete.png new file mode 100644 index 0000000..8aba7f8 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-delete.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-docs.png b/src/wp-content/themes/avada/admin/assets/images/icon-docs.png new file mode 100644 index 0000000..c88f908 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-docs.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-edit.png b/src/wp-content/themes/avada/admin/assets/images/icon-edit.png new file mode 100644 index 0000000..f6abaec Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-edit.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-footer.png b/src/wp-content/themes/avada/admin/assets/images/icon-footer.png new file mode 100644 index 0000000..3f02fe7 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-footer.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-header.png b/src/wp-content/themes/avada/admin/assets/images/icon-header.png new file mode 100644 index 0000000..c937468 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-header.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-home.png b/src/wp-content/themes/avada/admin/assets/images/icon-home.png new file mode 100644 index 0000000..6977e24 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-home.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-info.png b/src/wp-content/themes/avada/admin/assets/images/icon-info.png new file mode 100644 index 0000000..394110f Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-info.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-logo.png b/src/wp-content/themes/avada/admin/assets/images/icon-logo.png new file mode 100644 index 0000000..d829f93 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-logo.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-menu.png b/src/wp-content/themes/avada/admin/assets/images/icon-menu.png new file mode 100644 index 0000000..3f96d6e Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-menu.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-notice.png b/src/wp-content/themes/avada/admin/assets/images/icon-notice.png new file mode 100644 index 0000000..514b78f Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-notice.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-pagetitlebar.png b/src/wp-content/themes/avada/admin/assets/images/icon-pagetitlebar.png new file mode 100644 index 0000000..c5773c0 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-pagetitlebar.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-paint.png b/src/wp-content/themes/avada/admin/assets/images/icon-paint.png new file mode 100644 index 0000000..cdbbba0 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-paint.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-portfolio.png b/src/wp-content/themes/avada/admin/assets/images/icon-portfolio.png new file mode 100644 index 0000000..4837b76 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-portfolio.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-settings.png b/src/wp-content/themes/avada/admin/assets/images/icon-settings.png new file mode 100644 index 0000000..29c1136 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-settings.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-slider.png b/src/wp-content/themes/avada/admin/assets/images/icon-slider.png new file mode 100644 index 0000000..a80d3a3 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-slider.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-slidingbar.png b/src/wp-content/themes/avada/admin/assets/images/icon-slidingbar.png new file mode 100644 index 0000000..ce59501 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-slidingbar.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-social.png b/src/wp-content/themes/avada/admin/assets/images/icon-social.png new file mode 100644 index 0000000..e2b1add Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-social.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-typography.gif b/src/wp-content/themes/avada/admin/assets/images/icon-typography.gif new file mode 100644 index 0000000..c09be15 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-typography.gif differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon-warn.png b/src/wp-content/themes/avada/admin/assets/images/icon-warn.png new file mode 100644 index 0000000..053ec37 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon-warn.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/icon_option.png b/src/wp-content/themes/avada/admin/assets/images/icon_option.png new file mode 100644 index 0000000..29ac2aa Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/icon_option.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/loading-bottom.gif b/src/wp-content/themes/avada/admin/assets/images/loading-bottom.gif new file mode 100644 index 0000000..f9d256c Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/loading-bottom.gif differ diff --git a/src/wp-content/themes/avada/admin/assets/images/select.png b/src/wp-content/themes/avada/admin/assets/images/select.png new file mode 100644 index 0000000..8477e24 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/select.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/shortcode_styling.png b/src/wp-content/themes/avada/admin/assets/images/shortcode_styling.png new file mode 100644 index 0000000..92425b8 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/shortcode_styling.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/sidebar.png b/src/wp-content/themes/avada/admin/assets/images/sidebar.png new file mode 100644 index 0000000..17b8ec4 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/sidebar.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/sign_warning.png b/src/wp-content/themes/avada/admin/assets/images/sign_warning.png new file mode 100644 index 0000000..426bd49 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/sign_warning.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/slideshows.png b/src/wp-content/themes/avada/admin/assets/images/slideshows.png new file mode 100644 index 0000000..32d587d Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/slideshows.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/social_links_icon.png b/src/wp-content/themes/avada/admin/assets/images/social_links_icon.png new file mode 100644 index 0000000..63f92e1 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/social_links_icon.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/social_sharing.png b/src/wp-content/themes/avada/admin/assets/images/social_sharing.png new file mode 100644 index 0000000..28b3177 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/social_sharing.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/stop.png b/src/wp-content/themes/avada/admin/assets/images/stop.png new file mode 100644 index 0000000..5bfcfb3 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/stop.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/toggle_tabs.png b/src/wp-content/themes/avada/admin/assets/images/toggle_tabs.png new file mode 100644 index 0000000..4c36f77 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/toggle_tabs.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/ui-bg_flat_0_aaaaaa_40x100.png b/src/wp-content/themes/avada/admin/assets/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000..a2e6bfc Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/upgrade_icon.png b/src/wp-content/themes/avada/admin/assets/images/upgrade_icon.png new file mode 100644 index 0000000..ef6c981 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/upgrade_icon.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/warning.png b/src/wp-content/themes/avada/admin/assets/images/warning.png new file mode 100644 index 0000000..1ce660d Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/warning.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/woo_theme_options_icon.png b/src/wp-content/themes/avada/admin/assets/images/woo_theme_options_icon.png new file mode 100644 index 0000000..b84fb3c Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/woo_theme_options_icon.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/wrench.png b/src/wp-content/themes/avada/admin/assets/images/wrench.png new file mode 100644 index 0000000..9e12153 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/wrench.png differ diff --git a/src/wp-content/themes/avada/admin/assets/images/wrench16.png b/src/wp-content/themes/avada/admin/assets/images/wrench16.png new file mode 100644 index 0000000..e112a29 Binary files /dev/null and b/src/wp-content/themes/avada/admin/assets/images/wrench16.png differ diff --git a/src/wp-content/themes/avada/admin/assets/js/ajaxupload.js b/src/wp-content/themes/avada/admin/assets/js/ajaxupload.js new file mode 100644 index 0000000..c42f13c --- /dev/null +++ b/src/wp-content/themes/avada/admin/assets/js/ajaxupload.js @@ -0,0 +1,606 @@ +/** + * AJAX Upload + * Project page - http://valums.com/ajax-upload/ + * Copyright (c) 2008 Andris Valums, http://valums.com + * Licensed under the MIT license (http://valums.com/mit-license/) + */ +(function(){ + +var d = document, w = window; + +/** + * Get element by id + */ +function get(element){ + if (typeof element == "string") + element = d.getElementById(element); + return element; +} + +/** + * Attaches event to a dom element + */ +function addEvent(el, type, fn){ + if (w.addEventListener){ + el.addEventListener(type, fn, false); + } else if (w.attachEvent){ + var f = function(){ + fn.call(el, w.event); + }; + el.attachEvent('on' + type, f) + } +} + + +/** + * Creates and returns element from html chunk + */ +var toElement = function(){ + var div = d.createElement('div'); + return function(html){ + div.innerHTML = html; + var el = div.childNodes[0]; + div.removeChild(el); + return el; + } +}(); + +function hasClass(ele,cls){ + return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)')); +} +function addClass(ele,cls) { + if (!hasClass(ele,cls)) ele.className += " "+cls; +} +function removeClass(ele,cls) { + var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)'); + ele.className=ele.className.replace(reg,' '); +} + +// getOffset function copied from jQuery lib (http://jquery.com/) +if (document.documentElement["getBoundingClientRect"]){ + // Get Offset using getBoundingClientRect + // http://ejohn.org/blog/getboundingclientrect-is-awesome/ + var getOffset = function(el){ + var box = el.getBoundingClientRect(), + doc = el.ownerDocument, + body = doc.body, + docElem = doc.documentElement, + + // for ie + clientTop = docElem.clientTop || body.clientTop || 0, + clientLeft = docElem.clientLeft || body.clientLeft || 0, + + // In Internet Explorer 7 getBoundingClientRect property is treated as physical, + // while others are logical. Make all logical, like in IE8. + + zoom = 1; + + if (body.getBoundingClientRect) { + var bound = body.getBoundingClientRect(); + zoom = (bound.right - bound.left)/body.clientWidth; + } + + if (zoom > 1){ + clientTop = 0; + clientLeft = 0; + } + + var top = box.top/zoom + (window.pageYOffset || docElem && docElem.scrollTop/zoom || body.scrollTop/zoom) - clientTop, + left = box.left/zoom + (window.pageXOffset|| docElem && docElem.scrollLeft/zoom || body.scrollLeft/zoom) - clientLeft; + + return { + top: top, + left: left + }; + } + +} else { + // Get offset adding all offsets + var getOffset = function(el){ + if (w.jQuery){ + return jQuery(el).offset(); + } + + var top = 0, left = 0; + do { + top += el.offsetTop || 0; + left += el.offsetLeft || 0; + } + while (el = el.offsetParent); + + return { + left: left, + top: top + }; + } +} + +function getBox(el){ + var left, right, top, bottom; + var offset = getOffset(el); + left = offset.left; + top = offset.top; + + right = left + el.offsetWidth; + bottom = top + el.offsetHeight; + + return { + left: left, + right: right, + top: top, + bottom: bottom + }; +} + +/** + * Crossbrowser mouse coordinates + */ +function getMouseCoords(e){ + // pageX/Y is not supported in IE + // http://www.quirksmode.org/dom/w3c_cssom.html + if (!e.pageX && e.clientX){ + // In Internet Explorer 7 some properties (mouse coordinates) are treated as physical, + // while others are logical (offset). + var zoom = 1; + var body = document.body; + + if (body.getBoundingClientRect) { + var bound = body.getBoundingClientRect(); + zoom = (bound.right - bound.left)/body.clientWidth; + } + + return { + x: e.clientX / zoom + d.body.scrollLeft + d.documentElement.scrollLeft, + y: e.clientY / zoom + d.body.scrollTop + d.documentElement.scrollTop + }; + } + + return { + x: e.pageX, + y: e.pageY + }; + +} +/** + * Function generates unique id + */ +var getUID = function(){ + var id = 0; + return function(){ + return 'ValumsAjaxUpload' + id++; + } +}(); + +function fileFromPath(file){ + return file.replace(/.*(\/|\\)/, ""); +} + +function getExt(file){ + return (/[.]/.exec(file)) ? /[^.]+$/.exec(file.toLowerCase()) : ''; +} + +/** + * Cross-browser way to get xhr object + */ +var getXhr = function(){ + var xhr; + + return function(){ + if (xhr) return xhr; + + if (typeof XMLHttpRequest !== 'undefined') { + xhr = new XMLHttpRequest(); + } else { + var v = [ + "Microsoft.XmlHttp", + "MSXML2.XmlHttp.5.0", + "MSXML2.XmlHttp.4.0", + "MSXML2.XmlHttp.3.0", + "MSXML2.XmlHttp.2.0" + ]; + + for (var i=0; i < v.length; i++){ + try { + xhr = new ActiveXObject(v[i]); + break; + } catch (e){} + } + } + + return xhr; + } +}(); + +// Please use AjaxUpload , Ajax_upload will be removed in the next version +Ajax_upload = AjaxUpload = function(button, options){ + if (button.jquery){ + // jquery object was passed + button = button[0]; + } else if (typeof button == "string" && /^#.*/.test(button)){ + button = button.slice(1); + } + button = get(button); + + this._input = null; + this._button = button; + this._disabled = false; + this._submitting = false; + // Variable changes to true if the button was clicked + // 3 seconds ago (requred to fix Safari on Mac error) + this._justClicked = false; + this._parentDialog = d.body; + + if (window.jQuery && jQuery.ui && jQuery.ui.dialog){ + var parentDialog = jQuery(this._button).parents('.ui-dialog'); + if (parentDialog.length){ + this._parentDialog = parentDialog[0]; + } + } + + this._settings = { + // Location of the server-side upload script + action: 'upload.php', + // File upload name + name: 'userfile', + // Additional data to send + data: {}, + // Submit file as soon as it's selected + autoSubmit: true, + // The type of data that you're expecting back from the server. + // Html and xml are detected automatically. + // Only useful when you are using json data as a response. + // Set to "json" in that case. + responseType: false, + // Location of the server-side script that fixes Safari + // hanging problem returning "Connection: close" header + closeConnection: '', + // Class applied to button when mouse is hovered + hoverClass: 'button_hover', + // When user selects a file, useful with autoSubmit disabled + onChange: function(file, extension){}, + // Callback to fire before file is uploaded + // You can return false to cancel upload + onSubmit: function(file, extension){}, + // Fired when file upload is completed + // WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE! + onComplete: function(file, response) {} + }; + + // Merge the users options with our defaults + for (var i in options) { + this._settings[i] = options[i]; + } + + this._createInput(); + this._rerouteClicks(); +} + +// assigning methods to our class +AjaxUpload.prototype = { + setData : function(data){ + this._settings.data = data; + }, + disable : function(){ + this._disabled = true; + }, + enable : function(){ + this._disabled = false; + }, + // removes instance + destroy : function(){ + if(this._input){ + if(this._input.parentNode){ + this._input.parentNode.removeChild(this._input); + } + this._input = null; + } + }, + /** + * Creates invisible file input above the button + */ + _createInput : function(){ + var self = this; + var input = d.createElement("input"); + input.setAttribute('type', 'file'); + input.setAttribute('name', this._settings.name); + var styles = { + 'position' : 'absolute' + ,'margin': '-5px 0 0 -175px' + ,'padding': 0 + ,'width': '220px' + ,'height': '30px' + ,'fontSize': '14px' + ,'opacity': 0 + ,'cursor': 'pointer' + ,'display' : 'none' + ,'zIndex' : 2147483583 //Max zIndex supported by Opera 9.0-9.2x + // Strange, I expected 2147483647 + // Doesn't work in IE :( + //,'direction' : 'ltr' + }; + for (var i in styles){ + input.style[i] = styles[i]; + } + + // Make sure that element opacity exists + // (IE uses filter instead) + if ( ! (input.style.opacity === "0")){ + input.style.filter = "alpha(opacity=0)"; + } + + this._parentDialog.appendChild(input); + + addEvent(input, 'change', function(){ + // get filename from input + var file = fileFromPath(this.value); + if(self._settings.onChange.call(self, file, getExt(file)) == false ){ + return; + } + // Submit form when value is changed + if (self._settings.autoSubmit){ + self.submit(); + } + }); + + // Fixing problem with Safari + // The problem is that if you leave input before the file select dialog opens + // it does not upload the file. + // As dialog opens slowly (it is a sheet dialog which takes some time to open) + // there is some time while you can leave the button. + // So we should not change display to none immediately + addEvent(input, 'click', function(){ + self.justClicked = true; + setTimeout(function(){ + // we will wait 3 seconds for dialog to open + self.justClicked = false; + }, 2500); + }); + + this._input = input; + }, + _rerouteClicks : function (){ + var self = this; + + // IE displays 'access denied' error when using this method + // other browsers just ignore click() + // addEvent(this._button, 'click', function(e){ + // self._input.click(); + // }); + + var box, dialogOffset = {top:0, left:0}, over = false; + + addEvent(self._button, 'mouseover', function(e){ + if (!self._input || over) return; + + over = true; + box = getBox(self._button); + + if (self._parentDialog != d.body){ + dialogOffset = getOffset(self._parentDialog); + } + }); + + + // We can't use mouseout on the button, + // because invisible input is over it + addEvent(document, 'mousemove', function(e){ + var input = self._input; + if (!input || !over) return; + + if (self._disabled){ + removeClass(self._button, self._settings.hoverClass); + input.style.display = 'none'; + return; + } + + var c = getMouseCoords(e); + + if ((c.x >= box.left) && (c.x <= box.right) && + (c.y >= box.top) && (c.y <= box.bottom)){ + + input.style.top = c.y - dialogOffset.top + 'px'; + input.style.left = c.x - dialogOffset.left + 'px'; + input.style.display = 'block'; + addClass(self._button, self._settings.hoverClass); + + } else { + // mouse left the button + over = false; + + var check = setInterval(function(){ + // if input was just clicked do not hide it + // to prevent safari bug + + if (self.justClicked){ + return; + } + + if ( !over ){ + input.style.display = 'none'; + } + + clearInterval(check); + + }, 25); + + + removeClass(self._button, self._settings.hoverClass); + } + }); + + }, + /** + * Creates iframe with unique name + */ + _createIframe : function(){ + // unique name + // We cannot use getTime, because it sometimes return + // same value in safari :( + var id = getUID(); + + // Remove ie6 "This page contains both secure and nonsecure items" prompt + // http://tinyurl.com/77w9wh + var iframe = toElement(' + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/resize.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/resize.html new file mode 100644 index 0000000..7badc2b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/resize.html @@ -0,0 +1,49 @@ + + + + + CodeMirror: Autoresize Demo + + + + + + + + +

              CodeMirror: Autoresize demo

              + +
              + +

              By setting a few CSS properties, and giving +the viewportMargin +a value of Infinity, CodeMirror can be made to +automatically resize to fit its content.

              + + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/runmode.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/runmode.html new file mode 100644 index 0000000..dba808b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/runmode.html @@ -0,0 +1,50 @@ + + + + + CodeMirror: Mode Runner Demo + + + + + + + +

              CodeMirror: Mode Runner Demo

              + +
              + +
              
              +
              +    
              +
              +    

              Running a CodeMirror mode outside of the editor. + The CodeMirror.runMode function, defined + in lib/runmode.js takes the following arguments:

              + +
              +
              text (string)
              +
              The document to run through the highlighter.
              +
              mode (mode spec)
              +
              The mode to use (must be loaded as normal).
              +
              output (function or DOM node)
              +
              If this is a function, it will be called for each token with + two arguments, the token's text and the token's style class (may + be null for unstyled tokens). If it is a DOM node, + the tokens will be converted to span elements as in + an editor, and inserted into the node + (through innerHTML).
              +
              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/search.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/search.html new file mode 100644 index 0000000..d721071 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/search.html @@ -0,0 +1,85 @@ + + + + + CodeMirror: Search/Replace Demo + + + + + + + + + + + + +

              CodeMirror: Search/Replace Demo

              + +
              + + + +

              Demonstration of primitive search/replace functionality. The + keybindings (which can be overridden by custom keymaps) are:

              +
              +
              Ctrl-F / Cmd-F
              Start searching
              +
              Ctrl-G / Cmd-G
              Find next
              +
              Shift-Ctrl-G / Shift-Cmd-G
              Find previous
              +
              Shift-Ctrl-F / Cmd-Option-F
              Replace
              +
              Shift-Ctrl-R / Shift-Cmd-Option-F
              Replace all
              +
              +

              Searching is enabled by + including addon/search/search.js + and addon/search/searchcursor.js. + For good-looking input dialogs, you also want to include + addon/dialog/dialog.js + and addon/dialog/dialog.css.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/spanaffectswrapping_shim.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/spanaffectswrapping_shim.html new file mode 100644 index 0000000..733db06 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/spanaffectswrapping_shim.html @@ -0,0 +1,73 @@ + + + + + CodeMirror: Automatically derive odd wrapping behavior for your browser + + + +

              CodeMirror: odd wrapping shim

              + +

              This is a hack to automatically derive + a spanAffectsWrapping regexp for a browser. See the + comments above that variable + in lib/codemirror.js + for some more details.

              + +
              +
              
              +
              +    
              +  
              +
              diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/tern.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/tern.html
              new file mode 100644
              index 0000000..bbc5e47
              --- /dev/null
              +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/tern.html
              @@ -0,0 +1,122 @@
              +
              +
              +  
              +    
              +    CodeMirror: Tern Demo
              +    
              +    
              +    
              +    
              +    
              +    
              +    
              +    
              +    
              +    
              +
              +    
              +    
              +    
              +    
              +    
              +    
              +    
              +    
              +    
              +    
              +
              +    
              +  
              +  
              +    

              CodeMirror: Tern Demo

              + +

              + +

              Demonstrates integration of Tern +and CodeMirror. The following keys are bound:

              + +
              +
              Ctrl-Space
              Autocomplete
              +
              Ctrl-I
              Find type at cursor
              +
              Alt-.
              Jump to definition (Alt-, to jump back)
              +
              Ctrl-Q
              Rename variable
              +
              + +

              Documentation is sparse for now. See the top of +the script for a rough API +overview.

              + + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/theme.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/theme.html new file mode 100644 index 0000000..62544be --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/theme.html @@ -0,0 +1,100 @@ + + + + + CodeMirror: Theme Demo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

              CodeMirror: Theme demo

              + +
              + +

              Select a theme: +

              + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/trailingspace.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/trailingspace.html new file mode 100644 index 0000000..ca74152 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/trailingspace.html @@ -0,0 +1,39 @@ + + + + + CodeMirror: Trailing Whitespace Demo + + + + + + + + +

              CodeMirror: Trailing Whitespace Demo

              + +
              + + + +

              Uses +the trailingspace +addon to highlight trailing whitespace.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/variableheight.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/variableheight.html new file mode 100644 index 0000000..b00f7e4 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/variableheight.html @@ -0,0 +1,52 @@ + + + + + CodeMirror: Variable Height Demo + + + + + + + + + +

              CodeMirror: Variable Height Demo

              + +
              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/vim.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/vim.html new file mode 100644 index 0000000..9b7a432 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/vim.html @@ -0,0 +1,65 @@ + + + + + CodeMirror: Vim bindings demo + + + + + + + + + + + + +

              CodeMirror: Vim bindings demo

              + +
              + +
              + +

              The vim keybindings are enabled by +including keymap/vim.js and setting +the keyMap option to "vim". Because +CodeMirror's internal API is quite different from Vim, they are only +a loose approximation of actual vim bindings, though.

              + + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/visibletabs.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/visibletabs.html new file mode 100644 index 0000000..109d1a6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/visibletabs.html @@ -0,0 +1,53 @@ + + + + + CodeMirror: Visible tabs demo + + + + + + + + +

              CodeMirror: Visible tabs demo

              + +
              + +

              Tabs inside the editor are spans with the +class cm-tab, and can be styled.

              + + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/widget.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/widget.html new file mode 100644 index 0000000..a3b27a9 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/widget.html @@ -0,0 +1,74 @@ + + + + + CodeMirror: Inline Widget Demo + + + + + + + + + +

              CodeMirror: Inline Widget Demo

              + +
              + +

              This demo runs JSHint over the code +in the editor (which is the script used on this page), and +inserts line widgets to +display the warnings that JSHint comes up with.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/xmlcomplete.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/xmlcomplete.html new file mode 100644 index 0000000..007893b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/demo/xmlcomplete.html @@ -0,0 +1,106 @@ + + + + + CodeMirror: XML Autocomplete Demo + + + + + + + + + + +

              CodeMirror: XML Autocomplete demo

              + +
              + +

              Press ctrl-space, or type a '<' character to + activate autocompletion. This demo defines a simple schema that + guides completion. The schema can be customized—see + the manual.

              + +

              Development of the xml-hint addon was kindly + sponsored + by www.xperiment.mobi.

              + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/baboon.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/baboon.png new file mode 100644 index 0000000..df8a67b Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/baboon.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/baboon_vector.svg b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/baboon_vector.svg new file mode 100644 index 0000000..dc1667a --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/baboon_vector.svg @@ -0,0 +1,153 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/compress.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/compress.html new file mode 100644 index 0000000..864f4f2 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/compress.html @@ -0,0 +1,214 @@ + + + + + CodeMirror: Compression Helper + + + + + +

              { } CodeMirror

              + +
              + +
              +/* Script compression
              +   helper */
              +
              +
              + +

              To optimize loading CodeMirror, especially when including a + bunch of different modes, it is recommended that you combine and + minify (and preferably also gzip) the scripts. This page makes + those first two steps very easy. Simply select the version and + scripts you need in the form below, and + click Compress to download the minified script + file.

              + +
              + +

              Version:

              + + + +

              + with UglifyJS +

              + +

              Custom code to add to the compressed file:

              +
              + + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/docs.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/docs.css new file mode 100644 index 0000000..170cd41 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/docs.css @@ -0,0 +1,167 @@ +body { + font-family: Droid Sans, Arial, sans-serif; + line-height: 1.5; + max-width: 64.3em; + margin: 3em auto; + padding: 0 1em; +} + +h1 { + letter-spacing: -3px; + font-size: 3.23em; + font-weight: bold; + margin: 0; +} + +h2 { + font-size: 1.23em; + font-weight: bold; + margin: .5em 0; + letter-spacing: -1px; +} + +h3 { + font-size: 1.1em; + font-weight: bold; + margin: .4em 0; +} + +pre { + background-color: #eee; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + border-radius: 6px; + padding: 1em; +} + +pre.code { + margin: 0 1em; +} + +.grey { + background-color: #eee; + border-radius: 6px; + margin-bottom: 1.65em; + margin-top: 0.825em; + padding: 0.825em 1.65em; + position: relative; +} + +img.logo { + position: absolute; + right: -1em; + bottom: 4px; + max-width: 23.6875em; /* Scale image down with text to prevent clipping */ +} + +.grey > pre { + background:none; + border-radius:0; + padding:0; + margin:0; + font-size:2.2em; + line-height:1.2em; +} + +a:link, a:visited, .quasilink { + color: #df0019; + cursor: pointer; + text-decoration: none; +} + +a:hover, .quasilink:hover { + color: #800004; +} + +h1 a:link, h1 a:visited, h1 a:hover { + color: black; +} + +ul { + margin: 0; + padding-left: 1.2em; +} + +a.download { + color: white; + background-color: #df0019; + width: 100%; + display: block; + text-align: center; + font-size: 1.23em; + font-weight: bold; + text-decoration: none; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + border-radius: 6px; + padding: .5em 0; + margin-bottom: 1em; +} + +a.download:hover { + background-color: #bb0010; +} + +.rel { + margin-bottom: 0; +} + +.rel-note { + color: #777; + font-size: .9em; + margin-top: .1em; +} + +.logo-braces { + color: #df0019; + position: relative; + top: -4px; +} + +.blk { + float: left; +} + +.left { + margin-right: 20.68em; + max-width: 37em; + padding-right: 6.53em; + padding-bottom: 1em; +} + +.left1 { + width: 15.24em; + padding-right: 6.45em; +} + +.left2 { + max-width: 15.24em; +} + +.right { + width: 20.68em; + margin-left: -20.68em; +} + +.leftbig { + width: 42.44em; + padding-right: 6.53em; +} + +.rightsmall { + width: 15.24em; +} + +.clear:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; +} +.clear { display: inline-block; } +/* start commented backslash hack \*/ +* html .clear { height: 1%; } +.clear { display: block; } +/* close commented backslash hack */ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/internals.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/internals.html new file mode 100644 index 0000000..4336ba4 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/internals.html @@ -0,0 +1,505 @@ + + + + + CodeMirror: Internals + + + + + + +

              { } CodeMirror

              + +
              + +
              +/* (Re-) Implementing A Syntax-
              +   Highlighting Editor in JavaScript */
              +
              +
              + +
              + +

              + Topic: JavaScript, code editor implementation
              + Author: Marijn Haverbeke
              + Date: March 2nd 2011 (updated November 13th 2011) +

              + +

              Caution: this text was written briefly after +version 2 was initially written. It no longer (even including the +update at the bottom) fully represents the current implementation. I'm +leaving it here as a historic document. For more up-to-date +information, look at the entries +tagged cm-internals +on my blog.

              + +

              This is a followup to +my Brutal Odyssey to the +Dark Side of the DOM Tree story. That one describes the +mind-bending process of implementing (what would become) CodeMirror 1. +This one describes the internals of CodeMirror 2, a complete rewrite +and rethink of the old code base. I wanted to give this piece another +Hunter Thompson copycat subtitle, but somehow that would be out of +place—the process this time around was one of straightforward +engineering, requiring no serious mind-bending whatsoever.

              + +

              So, what is wrong with CodeMirror 1? I'd estimate, by mailing list +activity and general search-engine presence, that it has been +integrated into about a thousand systems by now. The most prominent +one, since a few weeks, +being Google +code's project hosting. It works, and it's being used widely.

              + +

              Still, I did not start replacing it because I was bored. CodeMirror +1 was heavily reliant on designMode +or contentEditable (depending on the browser). Neither of +these are well specified (HTML5 tries +to specify +their basics), and, more importantly, they tend to be one of the more +obscure and buggy areas of browser functionality—CodeMirror, by using +this functionality in a non-typical way, was constantly running up +against browser bugs. WebKit wouldn't show an empty line at the end of +the document, and in some releases would suddenly get unbearably slow. +Firefox would show the cursor in the wrong place. Internet Explorer +would insist on linkifying everything that looked like a URL or email +address, a behaviour that can't be turned off. Some bugs I managed to +work around (which was often a frustrating, painful process), others, +such as the Firefox cursor placement, I gave up on, and had to tell +user after user that they were known problems, but not something I +could help.

              + +

              Also, there is the fact that designMode (which seemed +to be less buggy than contentEditable in Webkit and +Firefox, and was thus used by CodeMirror 1 in those browsers) requires +a frame. Frames are another tricky area. It takes some effort to +prevent getting tripped up by domain restrictions, they don't +initialize synchronously, behave strangely in response to the back +button, and, on several browsers, can't be moved around the DOM +without having them re-initialize. They did provide a very nice way to +namespace the library, though—CodeMirror 1 could freely pollute the +namespace inside the frame.

              + +

              Finally, working with an editable document means working with +selection in arbitrary DOM structures. Internet Explorer (8 and +before) has an utterly different (and awkward) selection API than all +of the other browsers, and even among the different implementations of +document.selection, details about how exactly a selection +is represented vary quite a bit. Add to that the fact that Opera's +selection support tended to be very buggy until recently, and you can +imagine why CodeMirror 1 contains 700 lines of selection-handling +code.

              + +

              And that brings us to the main issue with the CodeMirror 1 +code base: The proportion of browser-bug-workarounds to real +application code was getting dangerously high. By building on top of a +few dodgy features, I put the system in a vulnerable position—any +incompatibility and bugginess in these features, I had to paper over +with my own code. Not only did I have to do some serious stunt-work to +get it to work on older browsers (as detailed in the +previous story), things +also kept breaking in newly released versions, requiring me to come up +with new scary hacks in order to keep up. This was starting +to lose its appeal.

              + +

              General Approach

              + +

              What CodeMirror 2 does is try to sidestep most of the hairy hacks +that came up in version 1. I owe a lot to the +ACE editor for inspiration on how to +approach this.

              + +

              I absolutely did not want to be completely reliant on key events to +generate my input. Every JavaScript programmer knows that key event +information is horrible and incomplete. Some people (most awesomely +Mihai Bazon with Ymacs) have been able +to build more or less functioning editors by directly reading key +events, but it takes a lot of work (the kind of never-ending, fragile +work I described earlier), and will never be able to properly support +things like multi-keystoke international character +input. [see below for caveat]

              + +

              So what I do is focus a hidden textarea, and let the browser +believe that the user is typing into that. What we show to the user is +a DOM structure we built to represent his document. If this is updated +quickly enough, and shows some kind of believable cursor, it feels +like a real text-input control.

              + +

              Another big win is that this DOM representation does not have to +span the whole document. Some CodeMirror 1 users insisted that they +needed to put a 30 thousand line XML document into CodeMirror. Putting +all that into the DOM takes a while, especially since, for some +reason, an editable DOM tree is slower than a normal one on most +browsers. If we have full control over what we show, we must only +ensure that the visible part of the document has been added, and can +do the rest only when needed. (Fortunately, the onscroll +event works almost the same on all browsers, and lends itself well to +displaying things only as they are scrolled into view.)

              + +

              Input

              + +

              ACE uses its hidden textarea only as a text input shim, and does +all cursor movement and things like text deletion itself by directly +handling key events. CodeMirror's way is to let the browser do its +thing as much as possible, and not, for example, define its own set of +key bindings. One way to do this would have been to have the whole +document inside the hidden textarea, and after each key event update +the display DOM to reflect what's in that textarea.

              + +

              That'd be simple, but it is not realistic. For even medium-sized +document the editor would be constantly munging huge strings, and get +terribly slow. What CodeMirror 2 does is put the current selection, +along with an extra line on the top and on the bottom, into the +textarea.

              + +

              This means that the arrow keys (and their ctrl-variations), home, +end, etcetera, do not have to be handled specially. We just read the +cursor position in the textarea, and update our cursor to match it. +Also, copy and paste work pretty much for free, and people get their +native key bindings, without any special work on my part. For example, +I have emacs key bindings configured for Chrome and Firefox. There is +no way for a script to detect this. [no longer the case]

              + +

              Of course, since only a small part of the document sits in the +textarea, keys like page up and ctrl-end won't do the right thing. +CodeMirror is catching those events and handling them itself.

              + +

              Selection

              + +

              Getting and setting the selection range of a textarea in modern +browsers is trivial—you just use the selectionStart +and selectionEnd properties. On IE you have to do some +insane stuff with temporary ranges and compensating for the fact that +moving the selection by a 'character' will treat \r\n as a single +character, but even there it is possible to build functions that +reliably set and get the selection range.

              + +

              But consider this typical case: When I'm somewhere in my document, +press shift, and press the up arrow, something gets selected. Then, if +I, still holding shift, press the up arrow again, the top of my +selection is adjusted. The selection remembers where its head +and its anchor are, and moves the head when we shift-move. +This is a generally accepted property of selections, and done right by +every editing component built in the past twenty years.

              + +

              But not something that the browser selection APIs expose.

              + +

              Great. So when someone creates an 'upside-down' selection, the next +time CodeMirror has to update the textarea, it'll re-create the +selection as an 'upside-up' selection, with the anchor at the top, and +the next cursor motion will behave in an unexpected way—our second +up-arrow press in the example above will not do anything, since it is +interpreted in exactly the same way as the first.

              + +

              No problem. We'll just, ehm, detect that the selection is +upside-down (you can tell by the way it was created), and then, when +an upside-down selection is present, and a cursor-moving key is +pressed in combination with shift, we quickly collapse the selection +in the textarea to its start, allow the key to take effect, and then +combine its new head with its old anchor to get the real +selection.

              + +

              In short, scary hacks could not be avoided entirely in CodeMirror +2.

              + +

              And, the observant reader might ask, how do you even know that a +key combo is a cursor-moving combo, if you claim you support any +native key bindings? Well, we don't, but we can learn. The editor +keeps a set known cursor-movement combos (initialized to the +predictable defaults), and updates this set when it observes that +pressing a certain key had (only) the effect of moving the cursor. +This, of course, doesn't work if the first time the key is used was +for extending an inverted selection, but it works most of the +time.

              + +

              Intelligent Updating

              + +

              One thing that always comes up when you have a complicated internal +state that's reflected in some user-visible external representation +(in this case, the displayed code and the textarea's content) is +keeping the two in sync. The naive way is to just update the display +every time you change your state, but this is not only error prone +(you'll forget), it also easily leads to duplicate work on big, +composite operations. Then you start passing around flags indicating +whether the display should be updated in an attempt to be efficient +again and, well, at that point you might as well give up completely.

              + +

              I did go down that road, but then switched to a much simpler model: +simply keep track of all the things that have been changed during an +action, and then, only at the end, use this information to update the +user-visible display.

              + +

              CodeMirror uses a concept of operations, which start by +calling a specific set-up function that clears the state and end by +calling another function that reads this state and does the required +updating. Most event handlers, and all the user-visible methods that +change state are wrapped like this. There's a method +called operation that accepts a function, and returns +another function that wraps the given function as an operation.

              + +

              It's trivial to extend this (as CodeMirror does) to detect nesting, +and, when an operation is started inside an operation, simply +increment the nesting count, and only do the updating when this count +reaches zero again.

              + +

              If we have a set of changed ranges and know the currently shown +range, we can (with some awkward code to deal with the fact that +changes can add and remove lines, so we're dealing with a changing +coordinate system) construct a map of the ranges that were left +intact. We can then compare this map with the part of the document +that's currently visible (based on scroll offset and editor height) to +determine whether something needs to be updated.

              + +

              CodeMirror uses two update algorithms—a full refresh, where it just +discards the whole part of the DOM that contains the edited text and +rebuilds it, and a patch algorithm, where it uses the information +about changed and intact ranges to update only the out-of-date parts +of the DOM. When more than 30 percent (which is the current heuristic, +might change) of the lines need to be updated, the full refresh is +chosen (since it's faster to do than painstakingly finding and +updating all the changed lines), in the other case it does the +patching (so that, if you scroll a line or select another character, +the whole screen doesn't have to be +re-rendered). [the full-refresh +algorithm was dropped, it wasn't really faster than the patching +one]

              + +

              All updating uses innerHTML rather than direct DOM +manipulation, since that still seems to be by far the fastest way to +build documents. There's a per-line function that combines the +highlighting, marking, and +selection info for that line into a snippet of HTML. The patch updater +uses this to reset individual lines, the refresh updater builds an +HTML chunk for the whole visible document at once, and then uses a +single innerHTML update to do the refresh.

              + +

              Parsers can be Simple

              + +

              When I wrote CodeMirror 1, I +thought interruptable +parsers were a hugely scary and complicated thing, and I used a +bunch of heavyweight abstractions to keep this supposed complexity +under control: parsers +were iterators +that consumed input from another iterator, and used funny +closure-resetting tricks to copy and resume themselves.

              + +

              This made for a rather nice system, in that parsers formed strictly +separate modules, and could be composed in predictable ways. +Unfortunately, it was quite slow (stacking three or four iterators on +top of each other), and extremely intimidating to people not used to a +functional programming style.

              + +

              With a few small changes, however, we can keep all those +advantages, but simplify the API and make the whole thing less +indirect and inefficient. CodeMirror +2's mode API uses explicit state +objects, and makes the parser/tokenizer a function that simply takes a +state and a character stream abstraction, advances the stream one +token, and returns the way the token should be styled. This state may +be copied, optionally in a mode-defined way, in order to be able to +continue a parse at a given point. Even someone who's never touched a +lambda in his life can understand this approach. Additionally, far +fewer objects are allocated in the course of parsing now.

              + +

              The biggest speedup comes from the fact that the parsing no longer +has to touch the DOM though. In CodeMirror 1, on an older browser, you +could see the parser work its way through the document, +managing some twenty lines in each 50-millisecond time slice it got. It +was reading its input from the DOM, and updating the DOM as it went +along, which any experienced JavaScript programmer will immediately +spot as a recipe for slowness. In CodeMirror 2, the parser usually +finishes the whole document in a single 100-millisecond time slice—it +manages some 1500 lines during that time on Chrome. All it has to do +is munge strings, so there is no real reason for it to be slow +anymore.

              + +

              What Gives?

              + +

              Given all this, what can you expect from CodeMirror 2?

              + +
                + +
              • Small. the base library is +some 45k when minified +now, 17k when gzipped. It's smaller than +its own logo.
              • + +
              • Lightweight. CodeMirror 2 initializes very +quickly, and does almost no work when it is not focused. This means +you can treat it almost like a textarea, have multiple instances on a +page without trouble.
              • + +
              • Huge document support. Since highlighting is +really fast, and no DOM structure is being built for non-visible +content, you don't have to worry about locking up your browser when a +user enters a megabyte-sized document.
              • + +
              • Extended API. Some things kept coming up in the +mailing list, such as marking pieces of text or lines, which were +extremely hard to do with CodeMirror 1. The new version has proper +support for these built in.
              • + +
              • Tab support. Tabs inside editable documents were, +for some reason, a no-go. At least six different people announced they +were going to add tab support to CodeMirror 1, none survived (I mean, +none delivered a working version). CodeMirror 2 no longer removes tabs +from your document.
              • + +
              • Sane styling. iframe nodes aren't +really known for respecting document flow. Now that an editor instance +is a plain div element, it is much easier to size it to +fit the surrounding elements. You don't even have to make it scroll if +you do not want to.
              • + +
              + +

              On the downside, a CodeMirror 2 instance is not a native +editable component. Though it does its best to emulate such a +component as much as possible, there is functionality that browsers +just do not allow us to hook into. Doing select-all from the context +menu, for example, is not currently detected by CodeMirror.

              + +

              [Updates from November 13th 2011] Recently, I've made +some changes to the codebase that cause some of the text above to no +longer be current. I've left the text intact, but added markers at the +passages that are now inaccurate. The new situation is described +below.

              + +

              Content Representation

              + +

              The original implementation of CodeMirror 2 represented the +document as a flat array of line objects. This worked well—splicing +arrays will require the part of the array after the splice to be +moved, but this is basically just a simple memmove of a +bunch of pointers, so it is cheap even for huge documents.

              + +

              However, I recently added line wrapping and code folding (line +collapsing, basically). Once lines start taking up a non-constant +amount of vertical space, looking up a line by vertical position +(which is needed when someone clicks the document, and to determine +the visible part of the document during scrolling) can only be done +with a linear scan through the whole array, summing up line heights as +you go. Seeing how I've been going out of my way to make big documents +fast, this is not acceptable.

              + +

              The new representation is based on a B-tree. The leaves of the tree +contain arrays of line objects, with a fixed minimum and maximum size, +and the non-leaf nodes simply hold arrays of child nodes. Each node +stores both the amount of lines that live below them and the vertical +space taken up by these lines. This allows the tree to be indexed both +by line number and by vertical position, and all access has +logarithmic complexity in relation to the document size.

              + +

              I gave line objects and tree nodes parent pointers, to the node +above them. When a line has to update its height, it can simply walk +these pointers to the top of the tree, adding or subtracting the +difference in height from each node it encounters. The parent pointers +also make it cheaper (in complexity terms, the difference is probably +tiny in normal-sized documents) to find the current line number when +given a line object. In the old approach, the whole document array had +to be searched. Now, we can just walk up the tree and count the sizes +of the nodes coming before us at each level.

              + +

              I chose B-trees, not regular binary trees, mostly because they +allow for very fast bulk insertions and deletions. When there is a big +change to a document, it typically involves adding, deleting, or +replacing a chunk of subsequent lines. In a regular balanced tree, all +these inserts or deletes would have to be done separately, which could +be really expensive. In a B-tree, to insert a chunk, you just walk +down the tree once to find where it should go, insert them all in one +shot, and then break up the node if needed. This breaking up might +involve breaking up nodes further up, but only requires a single pass +back up the tree. For deletion, I'm somewhat lax in keeping things +balanced—I just collapse nodes into a leaf when their child count goes +below a given number. This means that there are some weird editing +patterns that may result in a seriously unbalanced tree, but even such +an unbalanced tree will perform well, unless you spend a day making +strangely repeating edits to a really big document.

              + +

              Keymaps

              + +

              Above, I claimed that directly catching key +events for things like cursor movement is impractical because it +requires some browser-specific kludges. I then proceeded to explain +some awful hacks that were needed to make it +possible for the selection changes to be detected through the +textarea. In fact, the second hack is about as bad as the first.

              + +

              On top of that, in the presence of user-configurable tab sizes and +collapsed and wrapped lines, lining up cursor movement in the textarea +with what's visible on the screen becomes a nightmare. Thus, I've +decided to move to a model where the textarea's selection is no longer +depended on.

              + +

              So I moved to a model where all cursor movement is handled by my +own code. This adds support for a goal column, proper interaction of +cursor movement with collapsed lines, and makes it possible for +vertical movement to move through wrapped lines properly, instead of +just treating them like non-wrapped lines.

              + +

              The key event handlers now translate the key event into a string, +something like Ctrl-Home or Shift-Cmd-R, and +use that string to look up an action to perform. To make keybinding +customizable, this lookup goes through +a table, using a scheme that +allows such tables to be chained together (for example, the default +Mac bindings fall through to a table named 'emacsy', which defines +basic Emacs-style bindings like Ctrl-F, and which is also +used by the custom Emacs bindings).

              + +

              A new +option extraKeys +allows ad-hoc keybindings to be defined in a much nicer way than what +was possible with the +old onKeyEvent +callback. You simply provide an object mapping key identifiers to +functions, instead of painstakingly looking at raw key events.

              + +

              Built-in commands map to strings, rather than functions, for +example "goLineUp" is the default action bound to the up +arrow key. This allows new keymaps to refer to them without +duplicating any code. New commands can be defined by assigning to +the CodeMirror.commands object, which maps such commands +to functions.

              + +

              The hidden textarea now only holds the current selection, with no +extra characters around it. This has a nice advantage: polling for +input becomes much, much faster. If there's a big selection, this text +does not have to be read from the textarea every time—when we poll, +just noticing that something is still selected is enough to tell us +that no new text was typed.

              + +

              The reason that cheap polling is important is that many browsers do +not fire useful events on IME (input method engine) input, which is +the thing where people inputting a language like Japanese or Chinese +use multiple keystrokes to create a character or sequence of +characters. Most modern browsers fire input when the +composing is finished, but many don't fire anything when the character +is updated during composition. So we poll, whenever the +editor is focused, to provide immediate updates of the display.

              + +
              + +
               
              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/manual.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/manual.html new file mode 100644 index 0000000..dc4100f --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/manual.html @@ -0,0 +1,2360 @@ + + + + + CodeMirror: User Manual + + + + + + + + + + + + + + + +

              { } CodeMirror

              + +
              + +
              +/* User manual and
              +   reference guide */
              +
              +
              + +
              + +

              Overview

              + +

              CodeMirror is a code-editor component that can be embedded in + Web pages. The core library provides only the editor + component, no accompanying buttons, auto-completion, or other IDE + functionality. It does provide a rich API on top of which such + functionality can be straightforwardly implemented. See + the addons included in the distribution, + and the list + of externally hosted addons, for reusable + implementations of extra features.

              + +

              CodeMirror works with language-specific modes. Modes are + JavaScript programs that help color (and optionally indent) text + written in a given language. The distribution comes with a number + of modes (see the mode/ + directory), and it isn't hard to write new + ones for other languages.

              + +

              Basic Usage

              + +

              The easiest way to use CodeMirror is to simply load the script + and style sheet found under lib/ in the distribution, + plus a mode script from one of the mode/ directories. + (See the compression helper for an + easy way to combine scripts.) For example:

              + +
              <script src="lib/codemirror.js"></script>
              +<link rel="stylesheet" href="../lib/codemirror.css">
              +<script src="mode/javascript/javascript.js"></script>
              + +

              Having done this, an editor instance can be created like + this:

              + +
              var myCodeMirror = CodeMirror(document.body);
              + +

              The editor will be appended to the document body, will start + empty, and will use the mode that we loaded. To have more control + over the new editor, a configuration object can be passed + to CodeMirror as a second + argument:

              + +
              var myCodeMirror = CodeMirror(document.body, {
              +  value: "function myScript(){return 100;}\n",
              +  mode:  "javascript"
              +});
              + +

              This will initialize the editor with a piece of code already in + it, and explicitly tell it to use the JavaScript mode (which is + useful when multiple modes are loaded). + See below for a full discussion of the + configuration options that CodeMirror accepts.

              + +

              In cases where you don't want to append the editor to an + element, and need more control over the way it is inserted, the + first argument to the CodeMirror function can also + be a function that, when given a DOM element, inserts it into the + document somewhere. This could be used to, for example, replace a + textarea with a real editor:

              + +
              var myCodeMirror = CodeMirror(function(elt) {
              +  myTextArea.parentNode.replaceChild(elt, myTextArea);
              +}, {value: myTextArea.value});
              + +

              However, for this use case, which is a common way to use + CodeMirror, the library provides a much more powerful + shortcut:

              + +
              var myCodeMirror = CodeMirror.fromTextArea(myTextArea);
              + +

              This will, among other things, ensure that the textarea's value + is updated with the editor's contents when the form (if it is part + of a form) is submitted. See the API + reference for a full description of this method.

              + +

              Configuration

              + +

              Both the CodeMirror + function and its fromTextArea method take as second + (optional) argument an object containing configuration options. + Any option not supplied like this will be taken + from CodeMirror.defaults, an + object containing the default options. You can update this object + to change the defaults on your page.

              + +

              Options are not checked in any way, so setting bogus option + values is bound to lead to odd errors.

              + +

              These are the supported options:

              + +
              +
              value: string|CodeMirror.Doc
              +
              The starting value of the editor. Can be a string, or + a document object.
              + +
              mode: string|object
              +
              The mode to use. When not given, this will default to the + first mode that was loaded. It may be a string, which either + simply names the mode or is + a MIME type + associated with the mode. Alternatively, it may be an object + containing configuration options for the mode, with + a name property that names the mode (for + example {name: "javascript", json: true}). The demo + pages for each mode contain information about what configuration + parameters the mode supports. You can ask CodeMirror which modes + and MIME types have been defined by inspecting + the CodeMirror.modes + and CodeMirror.mimeModes objects. The first maps + mode names to their constructors, and the second maps MIME types + to mode specs.
              + +
              theme: string
              +
              The theme to style the editor with. You must make sure the + CSS file defining the corresponding .cm-s-[name] + styles is loaded (see + the theme directory in the + distribution). The default is "default", for which + colors are included in codemirror.css. It is + possible to use multiple theming classes at once—for + example "foo bar" will assign both + the cm-s-foo and the cm-s-bar classes + to the editor.
              + +
              indentUnit: integer
              +
              How many spaces a block (whatever that means in the edited + language) should be indented. The default is 2.
              + +
              smartIndent: boolean
              +
              Whether to use the context-sensitive indentation that the + mode provides (or just indent the same as the line before). + Defaults to true.
              + +
              tabSize: integer
              +
              The width of a tab character. Defaults to 4.
              + +
              indentWithTabs: boolean
              +
              Whether, when indenting, the first N*tabSize + spaces should be replaced by N tabs. Default is false.
              + +
              electricChars: boolean
              +
              Configures whether the editor should re-indent the current + line when a character is typed that might change its proper + indentation (only works if the mode supports indentation). + Default is true.
              + +
              rtlMoveVisually: boolean
              +
              Determines whether horizontal cursor movement through + right-to-left (Arabic, Hebrew) text is visual (pressing the left + arrow moves the cursor left) or logical (pressing the left arrow + moves to the next lower index in the string, which is visually + right in right-to-left text). The default is false + on Windows, and true on other platforms.
              + +
              keyMap: string
              +
              Configures the keymap to use. The default + is "default", which is the only keymap defined + in codemirror.js itself. Extra keymaps are found in + the keymap directory. See + the section on keymaps for more + information.
              + +
              extraKeys: object
              +
              Can be used to specify extra keybindings for the editor, + alongside the ones defined + by keyMap. Should be + either null, or a valid keymap value.
              + +
              lineWrapping: boolean
              +
              Whether CodeMirror should scroll or wrap for long lines. + Defaults to false (scroll).
              + +
              lineNumbers: boolean
              +
              Whether to show line numbers to the left of the editor.
              + +
              firstLineNumber: integer
              +
              At which number to start counting lines. Default is 1.
              + +
              lineNumberFormatter: function(line: integer) → string
              +
              A function used to format line numbers. The function is + passed the line number, and should return a string that will be + shown in the gutter.
              + +
              gutters: array<string>
              +
              Can be used to add extra gutters (beyond or instead of the + line number gutter). Should be an array of CSS class names, each + of which defines a width (and optionally a + background), and which will be used to draw the background of + the gutters. May include + the CodeMirror-linenumbers class, in order to + explicitly set the position of the line number gutter (it will + default to be to the right of all other gutters). These class + names are the keys passed + to setGutterMarker.
              + +
              fixedGutter: boolean
              +
              Determines whether the gutter scrolls along with the content + horizontally (false) or whether it stays fixed during horizontal + scrolling (true, the default).
              + +
              coverGutterNextToScrollbar: boolean
              +
              When fixedGutter + is on, and there is a horizontal scrollbar, by default the + gutter will be visible to the left of this scrollbar. If this + option is set to true, it will be covered by an element with + class CodeMirror-gutter-filler.
              + +
              readOnly: boolean|string
              +
              This disables editing of the editor content by the user. If + the special value "nocursor" is given (instead of + simply true), focusing of the editor is also + disallowed.
              + +
              showCursorWhenSelecting: boolean
              +
              Whether the cursor should be drawn when a selection is + active. Defaults to false.
              + +
              undoDepth: integer
              +
              The maximum number of undo levels that the editor stores. + Defaults to 40.
              + +
              historyEventDelay: integer
              +
              The period of inactivity (in milliseconds) that will cause a + new history event to be started when typing or deleting. + Defaults to 500.
              + +
              tabindex: integer
              +
              The tab + index to assign to the editor. If not given, no tab index + will be assigned.
              + +
              autofocus: boolean
              +
              Can be used to make CodeMirror focus itself on + initialization. Defaults to off. + When fromTextArea is + used, and no explicit value is given for this option, it will be + set to true when either the source textarea is focused, or it + has an autofocus attribute and no other element is + focused.
              +
              + +

              Below this a few more specialized, low-level options are + listed. These are only useful in very specific situations, you + might want to skip them the first time you read this manual.

              + +
              +
              dragDrop: boolean
              +
              Controls whether drag-and-drop is enabled. On by default.
              + +
              onDragEvent: function(instance: CodeMirror, event: Event) → boolean
              +
              Deprecated! See these event + handlers for the current recommended approach.
              When given, + this will be called when the editor is handling + a dragenter, dragover, + or drop event. It will be passed the editor + instance and the event object as arguments. The callback can + choose to handle the event itself, in which case it should + return true to indicate that CodeMirror should not + do anything further.
              + +
              onKeyEvent: function(instance: CodeMirror, event: Event) → boolean
              +
              Deprecated! See these event + handlers for the current recommended approach.
              This + provides a rather low-level hook into CodeMirror's key handling. + If provided, this function will be called on + every keydown, keyup, + and keypress event that CodeMirror captures. It + will be passed two arguments, the editor instance and the key + event. This key event is pretty much the raw key event, except + that a stop() method is always added to it. You + could feed it to, for example, jQuery.Event to + further normalize it.
              This function can inspect the key + event, and handle it if it wants to. It may return true to tell + CodeMirror to ignore the event. Be wary that, on some browsers, + stopping a keydown does not stop + the keypress from firing, whereas on others it + does. If you respond to an event, you should probably inspect + its type property and only do something when it + is keydown (or keypress for actions + that need character data).
              + +
              cursorBlinkRate: number
              +
              Half-period in milliseconds used for cursor blinking. The default blink + rate is 530ms.
              + +
              cursorScrollMargin: number
              +
              How much extra space to always keep above and below the + cursor when approaching the top or bottom of the visible view in + a scrollable document. Default is 0.
              + +
              cursorHeight: number
              +
              Determines the height of the cursor. Default is 1, meaning + it spans the whole height of the line. For some fonts (and by + some tastes) a smaller height (for example 0.85), + which causes the cursor to not reach all the way to the bottom + of the line, looks better
              + +
              workTime, workDelay: number
              +
              Highlighting is done by a pseudo background-thread that will + work for workTime milliseconds, and then use + timeout to sleep for workDelay milliseconds. The + defaults are 200 and 300, you can change these options to make + the highlighting more or less aggressive.
              + +
              workDelay: number
              +
              See workTime.
              + +
              pollInterval: number
              +
              Indicates how quickly CodeMirror should poll its input + textarea for changes (when focused). Most input is captured by + events, but some things, like IME input on some browsers, don't + generate events that allow CodeMirror to properly detect it. + Thus, it polls. Default is 100 milliseconds.
              + +
              flattenSpans: boolean
              +
              By default, CodeMirror will combine adjacent tokens into a + single span if they have the same class. This will result in a + simpler DOM tree, and thus perform better. With some kinds of + styling (such as rounded corners), this will change the way the + document looks. You can set this option to false to disable this + behavior.
              + +
              maxHighlightLength: number
              +
              When highlighting long lines, in order to stay responsive, + the editor will give up and simply style the rest of the line as + plain text when it reaches a certain position. The default is + 10000. You can set this to Infinity to turn off + this behavior.
              + +
              viewportMargin: integer
              +
              Specifies the amount of lines that are rendered above and + below the part of the document that's currently scrolled into + view. This affects the amount of updates needed when scrolling, + and the amount of work that such an update does. You should + usually leave it at its default, 10. Can be set + to Infinity to make sure the whole document is + always rendered, and thus the browser's text search works on it. + This will have bad effects on performance of big + documents.
              +
              + +

              Events

              + +

              Various CodeMirror-related objects emit events, which allow + client code to react to various situations. Handlers for such + events can be registed with the on + and off methods on the objects + that the event fires on. To fire your own events, + use CodeMirror.signal(target, name, args...), + where target is a non-DOM-node object.

              + +

              An editor instance fires the following events. + The instance argument always refers to the editor + itself.

              + +
              +
              "change" (instance: CodeMirror, changeObj: object)
              +
              Fires every time the content of the editor is changed. + The changeObj is a {from, to, text, removed, + next} object containing information about the changes + that occurred as second argument. from + and to are the positions (in the pre-change + coordinate system) where the change started and ended (for + example, it might be {ch:0, line:18} if the + position is at the beginning of line #19). text is + an array of strings representing the text that replaced the + changed range (split by line). removed is the text + that used to be between from and to, + which is overwritten by this change. If multiple changes + happened during a single operation, the object will have + a next property pointing to another change object + (which may point to another, etc).
              + +
              "beforeChange" (instance: CodeMirror, changeObj: object)
              +
              This event is fired before a change is applied, and its + handler may choose to modify or cancel the change. + The changeObj object + has from, to, and text + properties, as with + the "change" event, but + never a next property, since this is fired for each + individual change, and not batched per operation. It also has + a cancel() method, which can be called to cancel + the change, and, if the change isn't coming + from an undo or redo event, an update(from, to, + text) method, which may be used to modify the change. + Undo or redo changes can't be modified, because they hold some + metainformation for restoring old marked ranges that is only + valid for that specific change. All three arguments + to update are optional, and can be left off to + leave the existing value for that field + intact. Note: you may not do anything from + a "beforeChange" handler that would cause changes + to the document or its visualization. Doing so will, since this + handler is called directly from the bowels of the CodeMirror + implementation, probably cause the editor to become + corrupted.
              + +
              "cursorActivity" (instance: CodeMirror)
              +
              Will be fired when the cursor or selection moves, or any + change is made to the editor content.
              + +
              "keyHandled" (instance: CodeMirror, name: string, event: Event)
              +
              Fired after a key is handled through a + keymap. name is the name of the handled key (for + example "Ctrl-X" or "'q'"), + and event is the DOM keydown + or keypress event.
              + +
              "inputRead" (instance: CodeMirror, changeObj: object)
              +
              Fired whenever new input is read from the hidden textarea + (typed or pasted by the user).
              + +
              "beforeSelectionChange" (instance: CodeMirror, selection: {head, anchor})
              +
              This event is fired before the selection is moved. Its + handler may modify the resulting selection head and anchor. + The selection parameter is an object + with head and anchor properties + holding {line, ch} objects, which the handler can + read and update. Handlers for this event have the same + restriction + as "beforeChange" + handlers — they should not do anything to directly update the + state of the editor.
              + +
              "viewportChange" (instance: CodeMirror, from: number, to: number)
              +
              Fires whenever the view port of + the editor changes (due to scrolling, editing, or any other + factor). The from and to arguments + give the new start and end of the viewport.
              + +
              "gutterClick" (instance: CodeMirror, line: integer, gutter: string, clickEvent: Event)
              +
              Fires when the editor gutter (the line-number area) is + clicked. Will pass the editor instance as first argument, the + (zero-based) number of the line that was clicked as second + argument, the CSS class of the gutter that was clicked as third + argument, and the raw mousedown event object as + fourth argument.
              + +
              "focus" (instance: CodeMirror)
              +
              Fires whenever the editor is focused.
              + +
              "blur" (instance: CodeMirror)
              +
              Fires whenever the editor is unfocused.
              + +
              "scroll" (instance: CodeMirror)
              +
              Fires when the editor is scrolled.
              + +
              "update" (instance: CodeMirror)
              +
              Will be fired whenever CodeMirror updates its DOM display.
              + +
              "renderLine" (instance: CodeMirror, line: LineHandle, element: Element)
              +
              Fired whenever a line is (re-)rendered to the DOM. Fired + right after the DOM element is built, before it is + added to the document. The handler may mess with the style of + the resulting element, or add event handlers, but + should not try to change the state of the editor.
              + +
              "mousedown", + "dblclick", "contextmenu", "keydown", "keypress", + "keyup", "dragstart", "dragenter", + "dragover", "drop" + (instance: CodeMirror, event: Event)
              +
              Fired when CodeMirror is handling a DOM event of this type. + You can preventDefault the event, or give it a + truthy codemirrorIgnore property, to signal that + CodeMirror should do no further handling.
              +
              + +

              Document objects (instances + of CodeMirror.Doc) emit the + following events:

              + +
              +
              "change" (doc: CodeMirror.Doc, changeObj: object)
              +
              Fired whenever a change occurs to the + document. changeObj has a similar type as the + object passed to the + editor's "change" + event, but it never has a next property, because + document change events are not batched (whereas editor change + events are).
              + +
              "beforeChange" (doc: CodeMirror.Doc, change: object)
              +
              See the description of the + same event on editor instances.
              + +
              "cursorActivity" (doc: CodeMirror.Doc)
              +
              Fired whenever the cursor or selection in this document + changes.
              + +
              "beforeSelectionChange" (doc: CodeMirror.Doc, selection: {head, anchor})
              +
              Equivalent to + the event by the same + name as fired on editor instances.
              +
              + +

              Line handles (as returned by, for + example, getLineHandle) + support these events:

              + +
              +
              "delete" ()
              +
              Will be fired when the line object is deleted. A line object + is associated with the start of the line. Mostly useful + when you need to find out when your gutter + markers on a given line are removed.
              +
              "change" (line: LineHandle, changeObj: object)
              +
              Fires when the line's text content is changed in any way + (but the line is not deleted outright). The change + object is similar to the one passed + to change event on the editor + object.
              +
              + +

              Marked range handles (CodeMirror.TextMarker), as returned + by markText + and setBookmark, emit the + following events:

              + +
              +
              "beforeCursorEnter" ()
              +
              Fired when the cursor enters the marked range. From this + event handler, the editor state may be inspected + but not modified, with the exception that the range on + which the event fires may be cleared.
              +
              "clear" (from: {line, ch}, to: {line, ch})
              +
              Fired when the range is cleared, either through cursor + movement in combination + with clearOnEnter + or through a call to its clear() method. Will only + be fired once per handle. Note that deleting the range through + text editing does not fire this event, because an undo action + might bring the range back into existence. from + and to give the part of the document that the range + spanned when it was cleared.
              +
              "hide" ()
              +
              Fired when the last part of the marker is removed from the + document by editing operations.
              +
              "unhide" ()
              +
              Fired when, after the marker was removed by editing, a undo + operation brought the marker back.
              +
              + +

              Line widgets (CodeMirror.LineWidget), returned + by addLineWidget, fire + these events:

              + +
              +
              "redraw" ()
              +
              Fired whenever the editor re-adds the widget to the DOM. + This will happen once right after the widget is added (if it is + scrolled into view), and then again whenever it is scrolled out + of view and back in again, or when changes to the editor options + or the line the widget is on require the widget to be + redrawn.
              +
              + +

              Keymaps

              + +

              Keymaps are ways to associate keys with functionality. A keymap + is an object mapping strings that identify the keys to functions + that implement their functionality.

              + +

              Keys are identified either by name or by character. + The CodeMirror.keyNames object defines names for + common keys and associates them with their key codes. Examples of + names defined here are Enter, F5, + and Q. These can be prefixed + with Shift-, Cmd-, Ctrl-, + and Alt- (in that order!) to specify a modifier. So + for example, Shift-Ctrl-Space would be a valid key + identifier.

              + +

              Common example: map the Tab key to insert spaces instead of a tab + character.

              + +
              +{
              +  Tab: function(cm) {
              +    var spaces = Array(cm.getOption("indentUnit") + 1).join(" ");
              +    cm.replaceSelection(spaces, "end", "+input");
              +  }
              +}
              + +

              Alternatively, a character can be specified directly by + surrounding it in single quotes, for example '$' + or 'q'. Due to limitations in the way browsers fire + key events, these may not be prefixed with modifiers.

              + +

              The CodeMirror.keyMap object associates keymaps + with names. User code and keymap definitions can assign extra + properties to this object. Anywhere where a keymap is expected, a + string can be given, which will be looked up in this object. It + also contains the "default" keymap holding the + default bindings.

              + +

              The values of properties in keymaps can be either functions of + a single argument (the CodeMirror instance), strings, or + false. Such strings refer to properties of the + CodeMirror.commands object, which defines a number of + common commands that are used by the default keybindings, and maps + them to functions. If the property is set to false, + CodeMirror leaves handling of the key up to the browser. A key + handler function may return CodeMirror.Pass to indicate + that it has decided not to handle the key, and other handlers (or + the default behavior) should be given a turn.

              + +

              Keys mapped to command names that start with the + characters "go" (which should be used for + cursor-movement actions) will be fired even when an + extra Shift modifier is present (i.e. "Up": + "goLineUp" matches both up and shift-up). This is used to + easily implement shift-selection.

              + +

              Keymaps can defer to each other by defining + a fallthrough property. This indicates that when a + key is not found in the map itself, one or more other maps should + be searched. It can hold either a single keymap or an array of + keymaps.

              + +

              When a keymap contains a nofallthrough property + set to true, keys matched against that map will be + ignored if they don't match any of the bindings in the map (no + further child maps will be tried). When + the disableInput property is set + to true, the default effect of inserting a character + will be suppressed when the keymap is active as the top-level + map.

              + +

              Customized Styling

              + +

              Up to a certain extent, CodeMirror's look can be changed by + modifying style sheet files. The style sheets supplied by modes + simply provide the colors for that mode, and can be adapted in a + very straightforward way. To style the editor itself, it is + possible to alter or override the styles defined + in codemirror.css.

              + +

              Some care must be taken there, since a lot of the rules in this + file are necessary to have CodeMirror function properly. Adjusting + colors should be safe, of course, and with some care a lot of + other things can be changed as well. The CSS classes defined in + this file serve the following roles:

              + +
              +
              CodeMirror
              +
              The outer element of the editor. This should be used for the + editor width, height, borders and positioning. Can also be used + to set styles that should hold for everything inside the editor + (such as font and font size), or to set a background.
              + +
              CodeMirror-scroll
              +
              Whether the editor scrolls (overflow: auto + + fixed height). By default, it does. Setting + the CodeMirror class to have height: + auto and giving this class overflow-x: auto; + overflow-y: hidden; will cause the editor + to resize to fit its + content.
              + +
              CodeMirror-focused
              +
              Whenever the editor is focused, the top element gets this + class. This is used to hide the cursor and give the selection a + different color when the editor is not focused.
              + +
              CodeMirror-gutters
              +
              This is the backdrop for all gutters. Use it to set the + default gutter background color, and optionally add a border on + the right of the gutters.
              + +
              CodeMirror-linenumbers
              +
              Use this for giving a background or width to the line number + gutter.
              + +
              CodeMirror-linenumber
              +
              Used to style the actual individual line numbers. These + won't be children of the CodeMirror-linenumbers + (plural) element, but rather will be absolutely positioned to + overlay it. Use this to set alignment and text properties for + the line numbers.
              + +
              CodeMirror-lines
              +
              The visible lines. This is where you specify vertical + padding for the editor content.
              + +
              CodeMirror-cursor
              +
              The cursor is a block element that is absolutely positioned. + You can make it look whichever way you want.
              + +
              CodeMirror-selected
              +
              The selection is represented by span elements + with this class.
              + +
              CodeMirror-matchingbracket, + CodeMirror-nonmatchingbracket
              +
              These are used to style matched (or unmatched) brackets.
              +
              + +

              If your page's style sheets do funky things to + all div or pre elements (you probably + shouldn't do that), you'll have to define rules to cancel these + effects out again for elements under the CodeMirror + class.

              + +

              Themes are also simply CSS files, which define colors for + various syntactic elements. See the files in + the theme directory.

              + +

              Programming API

              + +

              A lot of CodeMirror features are only available through its + API. Thus, you need to write code (or + use addons) if you want to expose them to + your users.

              + +

              Whenever points in the document are represented, the API uses + objects with line and ch properties. + Both are zero-based. CodeMirror makes sure to 'clip' any positions + passed by client code so that they fit inside the document, so you + shouldn't worry too much about sanitizing your coordinates. If you + give ch a value of null, or don't + specify it, it will be replaced with the length of the specified + line.

              + +

              Methods prefixed with doc. can, unless otherwise + specified, be called both on CodeMirror (editor) + instances and CodeMirror.Doc instances. Methods + prefixed with cm. are only available + on CodeMirror instances.

              + +

              Constructor

              + +

              Constructing an editor instance is done with + the CodeMirror(place: Element|fn(Element), + ?option: object) constructor. If the place + argument is a DOM element, the editor will be appended to it. If + it is a function, it will be called, and is expected to place the + editor into the document. options may be an element + mapping option names to values. The options + that it doesn't explicitly specify (or all options, if it is not + passed) will be taken + from CodeMirror.defaults.

              + +

              Note that the options object passed to the constructor will be + mutated when the instance's options + are changed, so you shouldn't share such + objects between instances.

              + +

              See CodeMirror.fromTextArea + for another way to construct an editor instance.

              + +

              Content manipulation methods

              + +
              +
              doc.getValue(?separator: string) → string
              +
              Get the current editor content. You can pass it an optional + argument to specify the string to be used to separate lines + (defaults to "\n").
              +
              doc.setValue(content: string)
              +
              Set the editor content.
              + +
              doc.getRange(from: {line, ch}, to: {line, ch}, ?separator: string) → string
              +
              Get the text between the given points in the editor, which + should be {line, ch} objects. An optional third + argument can be given to indicate the line separator string to + use (defaults to "\n").
              +
              doc.replaceRange(replacement: string, from: {line, ch}, to: {line, ch})
              +
              Replace the part of the document between from + and to with the given string. from + and to must be {line, ch} + objects. to can be left off to simply insert the + string at position from.
              + +
              doc.getLine(n: integer) → string
              +
              Get the content of line n.
              +
              doc.setLine(n: integer, text: string)
              +
              Set the content of line n.
              +
              doc.removeLine(n: integer)
              +
              Remove the given line from the document.
              + +
              doc.lineCount() → integer
              +
              Get the number of lines in the editor.
              +
              doc.firstLine() → integer
              +
              Get the first line of the editor. This will + usually be zero but for linked sub-views, + or documents instantiated with a non-zero + first line, it might return other values.
              +
              doc.lastLine() → integer
              +
              Get the last line of the editor. This will + usually be doc.lineCount() - 1, + but for linked sub-views, + it might return other values.
              + +
              doc.getLineHandle(num: integer) → LineHandle
              +
              Fetches the line handle for the given line number.
              +
              doc.getLineNumber(handle: LineHandle) → integer
              +
              Given a line handle, returns the current position of that + line (or null when it is no longer in the + document).
              +
              doc.eachLine(f: (line: LineHandle))
              +
              doc.eachLine(start: integer, end: integer, f: (line: LineHandle))
              +
              Iterate over the whole document, or if start + and end line numbers are given, the range + from start up to (not including) end, + and call f for each line, passing the line handle. + This is a faster way to visit a range of line handlers than + calling getLineHandle + for each of them. Note that line handles have + a text property containing the line's content (as a + string).
              + +
              doc.markClean()
              +
              Set the editor content as 'clean', a flag that it will + retain until it is edited, and which will be set again when such + an edit is undone again. Useful to track whether the content + needs to be saved. This function is deprecated in favor + of changeGeneration, + which allows multiple subsystems to track different notions of + cleanness without interfering.
              +
              doc.changeGeneration() → integer
              +
              Returns a number that can later be passed + to isClean to test whether + any edits were made (and not undone) in the meantime.
              +
              doc.isClean(?generation: integer) → boolean
              +
              Returns whether the document is currently clean — not + modified since initialization or the last call + to markClean if no + argument is passed, or since the matching call + to changeGeneration + if a generation value is given.
              +
              + +

              Cursor and selection methods

              + +
              +
              doc.getSelection() → string
              +
              Get the currently selected code.
              +
              doc.replaceSelection(replacement: string, ?collapse: string)
              +
              Replace the selection with the given string. By default, the + new selection will span the inserted text. The + optional collapse argument can be used to change + this—passing "start" or "end" will + collapse the selection to the start or end of the inserted + text.
              + +
              doc.getCursor(?start: string) → {line, ch}
              +
              start is a an optional string indicating which + end of the selection to return. It may + be "start", "end", "head" + (the side of the selection that moves when you press + shift+arrow), or "anchor" (the fixed side of the + selection). Omitting the argument is the same as + passing "head". A {line, ch} object + will be returned.
              +
              doc.somethingSelected() → boolean
              +
              Return true if any text is selected.
              +
              doc.setCursor(pos: {line, ch})
              +
              Set the cursor position. You can either pass a + single {line, ch} object, or the line and the + character as two separate parameters.
              +
              doc.setSelection(anchor: {line, ch}, head: {line, ch})
              +
              Set the selection range. anchor + and head should be {line, ch} + objects. head defaults to anchor when + not given.
              +
              doc.extendSelection(from: {line, ch}, ?to: {line, ch})
              +
              Similar + to setSelection, but + will, if shift is held or + the extending flag is set, move the + head of the selection while leaving the anchor at its current + place. pos2 is optional, and can be passed to + ensure a region (for example a word or paragraph) will end up + selected (in addition to whatever lies between that region and + the current anchor).
              +
              doc.setExtending(value: boolean)
              +
              Sets or clears the 'extending' flag, which acts similar to + the shift key, in that it will cause cursor movement and calls + to extendSelection + to leave the selection anchor in place.
              + +
              cm.hasFocus() → boolean
              +
              Tells you whether the editor currently has focus.
              + +
              cm.findPosH(start: {line, ch}, amount: integer, unit: string, visually: boolean) → {line, ch, ?hitSide: boolean}
              +
              Used to find the target position for horizontal cursor + motion. start is a {line, ch} + object, amount an integer (may be negative), + and unit one of the + string "char", "column", + or "word". Will return a position that is produced + by moving amount times the distance specified + by unit. When visually is true, motion + in right-to-left text will be visual rather than logical. When + the motion was clipped by hitting the end or start of the + document, the returned value will have a hitSide + property set to true.
              +
              cm.findPosV(start: {line, ch}, amount: integer, unit: string) → {line, ch, ?hitSide: boolean}
              +
              Similar to findPosH, + but used for vertical motion. unit may + be "line" or "page". The other + arguments and the returned value have the same interpretation as + they have in findPosH.
              +
              + +

              Configuration methods

              + +
              +
              cm.setOption(option: string, value: any)
              +
              Change the configuration of the editor. option + should the name of an option, + and value should be a valid value for that + option.
              +
              cm.getOption(option: string) → any
              +
              Retrieves the current value of the given option for this + editor instance.
              + +
              cm.addKeyMap(map: object, bottom: boolean)
              +
              Attach an additional keymap to the + editor. This is mostly useful for addons that need to register + some key handlers without trampling on + the extraKeys + option. Maps added in this way have a higher precedence than + the extraKeys + and keyMap options, + and between them, the maps added earlier have a lower precedence + than those added later, unless the bottom argument + was passed, in which case they end up below other keymaps added + with this method.
              +
              cm.removeKeyMap(map: object)
              +
              Disable a keymap added + with addKeyMap. Either + pass in the keymap object itself, or a string, which will be + compared against the name property of the active + keymaps.
              + +
              cm.addOverlay(mode: string|object, ?options: object)
              +
              Enable a highlighting overlay. This is a stateless mini-mode + that can be used to add extra highlighting. For example, + the search addon uses it to + highlight the term that's currently being + searched. mode can be a mode + spec or a mode object (an object with + a token method). + The options parameter is optional. If given, it + should be an object. Currently, only the opaque + option is recognized. This defaults to off, but can be given to + allow the overlay styling, when not null, to + override the styling of the base mode entirely, instead of the + two being applied together.
              +
              cm.removeOverlay(mode: string|object)
              +
              Pass this the exact value passed for the mode + parameter to addOverlay, + or a string that corresponds to the name propery of + that value, to remove an overlay again.
              + +
              cm.on(type: string, func: (...args))
              +
              Register an event handler for the given event type (a + string) on the editor instance. There is also + a CodeMirror.on(object, type, func) version + that allows registering of events on any object.
              +
              cm.off(type: string, func: (...args))
              +
              Remove an event handler on the editor instance. An + equivalent CodeMirror.off(object, type, + func) also exists.
              +
              + +

              Document management methods

              + +

              Each editor is associated with an instance + of CodeMirror.Doc, its document. A document + represents the editor content, plus a selection, an undo history, + and a mode. A document can only be + associated with a single editor at a time. You can create new + documents by calling the CodeMirror.Doc(text, mode, + firstLineNumber) constructor. The last two arguments are + optional and can be used to set a mode for the document and make + it start at a line number other than 0, respectively.

              + +
              +
              cm.getDoc() → Doc
              +
              Retrieve the currently active document from an editor.
              +
              doc.getEditor() → CodeMirror
              +
              Retrieve the editor associated with a document. May + return null.
              + +
              cm.swapDoc(doc: CodeMirror.Doc) → Doc
              +
              Attach a new document to the editor. Returns the old + document, which is now no longer associated with an editor.
              + +
              doc.copy(copyHistory: boolean) → Doc
              +
              Create an identical copy of the given doc. + When copyHistory is true, the history will also be + copied. Can not be called directly on an editor.
              + +
              doc.linkedDoc(options: object) → Doc
              +
              Create a new document that's linked to the target document. + Linked documents will stay in sync (changes to one are also + applied to the other) until unlinked. + These are the options that are supported: +
              +
              sharedHist: boolean
              +
              When turned on, the linked copy will share an undo + history with the original. Thus, something done in one of + the two can be undone in the other, and vice versa.
              +
              from: integer
              +
              to: integer
              +
              Can be given to make the new document a subview of the + original. Subviews only show a given range of lines. Note + that line coordinates inside the subview will be consistent + with those of the parent, so that for example a subview + starting at line 10 will refer to its first line as line 10, + not 0.
              +
              mode: string|object
              +
              By default, the new document inherits the mode of the + parent. This option can be set to + a mode spec to give it a + different mode.
              +
              +
              doc.unlinkDoc(doc: CodeMirror.Doc)
              +
              Break the link between two documents. After calling this, + changes will no longer propagate between the documents, and, if + they had a shared history, the history will become + separate.
              +
              doc.iterLinkedDocs(function: (doc: CodeMirror.Doc, sharedHist: boolean))
              +
              Will call the given function for all documents linked to the + target document. It will be passed two arguments, the linked document + and a boolean indicating whether that document shares history + with the target.
              +
              + +

              History-related methods

              + +
              +
              doc.undo()
              +
              Undo one edit (if any undo events are stored).
              +
              doc.redo()
              +
              Redo one undone edit.
              + +
              doc.historySize() → {undo: integer, redo: integer}
              +
              Returns an object with {undo, redo} properties, + both of which hold integers, indicating the amount of stored + undo and redo operations.
              +
              doc.clearHistory()
              +
              Clears the editor's undo history.
              +
              doc.getHistory() → object
              +
              Get a (JSON-serializeable) representation of the undo history.
              +
              doc.setHistory(history: object)
              +
              Replace the editor's undo history with the one provided, + which must be a value as returned + by getHistory. Note that + this will have entirely undefined results if the editor content + isn't also the same as it was when getHistory was + called.
              +
              + +

              Text-marking methods

              + +
              +
              doc.markText(from: {line, ch}, to: {line, ch}, ?options: object) → TextMarker
              +
              Can be used to mark a range of text with a specific CSS + class name. from and to should + be {line, ch} objects. The options + parameter is optional. When given, it should be an object that + may contain the following configuration options: +
              +
              className: string
              +
              Assigns a CSS class to the marked stretch of text.
              +
              inclusiveLeft: boolean
              +
              Determines whether + text inserted on the left of the marker will end up inside + or outside of it.
              +
              inclusiveRight: boolean
              +
              Like inclusiveLeft, + but for the right side.
              +
              atomic: boolean
              +
              Atomic ranges act as a single unit when cursor movement is + concerned—i.e. it is impossible to place the cursor inside of + them. In atomic ranges, inclusiveLeft + and inclusiveRight have a different meaning—they + will prevent the cursor from being placed respectively + directly before and directly after the range.
              +
              collapsed: boolean
              +
              Collapsed ranges do not show up in the display. Setting a + range to be collapsed will automatically make it atomic.
              +
              clearOnEnter: boolean
              +
              When enabled, will cause the mark to clear itself whenever + the cursor enters its range. This is mostly useful for + text-replacement widgets that need to 'snap open' when the + user tries to edit them. The + "clear" event + fired on the range handle can be used to be notified when this + happens.
              +
              replacedWith: Element
              +
              Use a given node to display this range. Implies both + collapsed and atomic. The given DOM node must be an + inline element (as opposed to a block element).
              +
              handleMouseEvents: boolean
              +
              When replacedWith is given, this determines + whether the editor will capture mouse and drag events + occurring in this widget. Default is false—the events will be + left alone for the default browser handler, or specific + handlers on the widget, to capture.
              +
              readOnly: boolean
              +
              A read-only span can, as long as it is not cleared, not be + modified except by + calling setValue to reset + the whole document. Note: adding a read-only span + currently clears the undo history of the editor, because + existing undo events being partially nullified by read-only + spans would corrupt the history (in the current + implementation).
              +
              addToHistory: boolean
              +
              When set to true (default is false), adding this marker + will create an event in the undo history that can be + individually undone (clearing the marker).
              +
              startStyle: string
              Can be used to specify + an extra CSS class to be applied to the leftmost span that + is part of the marker.
              +
              endStyle: string
              Equivalent + to startStyle, but for the rightmost span.
              +
              title: + string
              When given, will give the nodes created + for this span a HTML title attribute with the + given value.
              +
              shared: boolean
              When the + target document is linked to other + documents, you can set shared to true to make the + marker appear in all documents. By default, a marker appears + only in its target document.
              +
              + The method will return an object that represents the marker + (with constuctor CodeMirror.TextMarker), which + exposes three methods: + clear(), to remove the mark, + find(), which returns + a {from, to} object (both holding document + positions), indicating the current position of the marked range, + or undefined if the marker is no longer in the + document, and finally changed(), + which you can call if you've done something that might change + the size of the marker (for example changing the content of + a replacedWith + node), and want to cheaply update the display.
              + +
              doc.setBookmark(pos: {line, ch}, ?options: object) → TextMarker
              +
              Inserts a bookmark, a handle that follows the text around it + as it is being edited, at the given position. A bookmark has two + methods find() and clear(). The first + returns the current position of the bookmark, if it is still in + the document, and the second explicitly removes the bookmark. + The options argument is optional. If given, the following + properties are recognized: +
              +
              widget: Element
              Can be used to display a DOM + node at the current location of the bookmark (analogous to + the replacedWith + option to markText).
              +
              insertLeft: boolean
              By default, text typed + when the cursor is on top of the bookmark will end up to the + right of the bookmark. Set this option to true to make it go + to the left instead.
              +
              + +
              doc.findMarksAt(pos: {line, ch}) → array<TextMarker>
              +
              Returns an array of all the bookmarks and marked ranges + present at the given position.
              +
              doc.getAllMarks() → array<TextMarker>
              +
              Returns an array containing all marked ranges in the document.
              +
              + +

              Widget, gutter, and decoration methods

              + +
              +
              cm.setGutterMarker(line: integer|LineHandle, gutterID: string, value: Element) → LineHandle
              +
              Sets the gutter marker for the given gutter (identified by + its CSS class, see + the gutters option) + to the given value. Value can be either null, to + clear the marker, or a DOM element, to set it. The DOM element + will be shown in the specified gutter next to the specified + line.
              + +
              cm.clearGutter(gutterID: string)
              +
              Remove all gutter markers in + the gutter with the given ID.
              + +
              cm.addLineClass(line: integer|LineHandle, where: string, class: string) → LineHandle
              +
              Set a CSS class name for the given line. line + can be a number or a line handle. where determines + to which element this class should be applied, can can be one + of "text" (the text element, which lies in front of + the selection), "background" (a background element + that will be behind the selection), or "wrap" (the + wrapper node that wraps all of the line's elements, including + gutter elements). class should be the name of the + class to apply.
              + +
              cm.removeLineClass(line: integer|LineHandle, where: string, class: string) → LineHandle
              +
              Remove a CSS class from a line. line can be a + line handle or number. where should be one + of "text", "background", + or "wrap" + (see addLineClass). class + can be left off to remove all classes for the specified node, or + be a string to remove only a specific class.
              + +
              cm.lineInfo(line: integer|LineHandle) → object
              +
              Returns the line number, text content, and marker status of + the given line, which can be either a number or a line handle. + The returned object has the structure {line, handle, text, + gutterMarkers, textClass, bgClass, wrapClass, widgets}, + where gutterMarkers is an object mapping gutter IDs + to marker elements, and widgets is an array + of line widgets attached to this + line, and the various class properties refer to classes added + with addLineClass.
              + +
              cm.addWidget(pos: {line, ch}, node: Element, scrollIntoView: boolean)
              +
              Puts node, which should be an absolutely + positioned DOM node, into the editor, positioned right below the + given {line, ch} position. + When scrollIntoView is true, the editor will ensure + that the entire node is visible (if possible). To remove the + widget again, simply use DOM methods (move it somewhere else, or + call removeChild on its parent).
              + +
              cm.addLineWidget(line: integer|LineHandle, node: Element, ?options: object) → LineWidget
              +
              Adds a line widget, an element shown below a line, spanning + the whole of the editor's width, and moving the lines below it + downwards. line should be either an integer or a + line handle, and node should be a DOM node, which + will be displayed below the given line. options, + when given, should be an object that configures the behavior of + the widget. The following options are supported (all default to + false): +
              +
              coverGutter: boolean
              +
              Whether the widget should cover the gutter.
              +
              noHScroll: boolean
              +
              Whether the widget should stay fixed in the face of + horizontal scrolling.
              +
              above: boolean
              +
              Causes the widget to be placed above instead of below + the text of the line.
              +
              showIfHidden: boolean
              +
              When true, will cause the widget to be rendered even if + the line it is associated with is hidden.
              +
              handleMouseEvents: boolean
              +
              Determines whether the editor will capture mouse and + drag events occurring in this widget. Default is false—the + events will be left alone for the default browser handler, + or specific handlers on the widget, to capture.
              +
              insertAt: integer
              +
              By default, the widget is added below other widgets for + the line. This option can be used to place it at a different + position (zero for the top, N to put it after the Nth other + widget). Note that this only has effect once, when the + widget is created. +
              + Note that the widget node will become a descendant of nodes with + CodeMirror-specific CSS classes, and those classes might in some + cases affect it. This method returns an object that represents + the widget placement. It'll have a line property + pointing at the line handle that it is associated with, and the following methods: +
              +
              clear()
              Removes the widget.
              +
              changed()
              Call + this if you made some change to the widget's DOM node that + might affect its height. It'll force CodeMirror to update + the height of the line that contains the widget.
              +
              +
              +
              + +

              Sizing, scrolling and positioning methods

              + +
              +
              cm.setSize(width: number|string, height: number|string)
              +
              Programatically set the size of the editor (overriding the + applicable CSS + rules). width and height height + can be either numbers (interpreted as pixels) or CSS units + ("100%", for example). You can + pass null for either of them to indicate that that + dimension should not be changed.
              + +
              cm.scrollTo(x: number, y: number)
              +
              Scroll the editor to a given (pixel) position. Both + arguments may be left as null + or undefined to have no effect.
              +
              cm.getScrollInfo() → {left, top, width, height, clientWidth, clientHeight}
              +
              Get an {left, top, width, height, clientWidth, + clientHeight} object that represents the current scroll + position, the size of the scrollable area, and the size of the + visible area (minus scrollbars).
              +
              cm.scrollIntoView(pos: {line, ch}|{left, top, right, bottom}, ?margin: number)
              +
              Scrolls the given element into view. pos may be + either a {line, ch} position, referring to a given + character, null, to refer to the cursor, or + a {left, top, right, bottom} object, in + editor-local coordinates. The margin parameter is + optional. When given, it indicates the amount of pixels around + the given area that should be made visible as well.
              + +
              cm.cursorCoords(where: boolean|{line, ch}, mode: string) → {left, top, bottom}
              +
              Returns an {left, top, bottom} object + containing the coordinates of the cursor position. + If mode is "local", they will be + relative to the top-left corner of the editable document. If it + is "page" or not given, they are relative to the + top-left corner of the page. where can be a boolean + indicating whether you want the start (true) or the + end (false) of the selection, or, if a {line, + ch} object is given, it specifies the precise position at + which you want to measure.
              +
              cm.charCoords(pos: {line, ch}, ?mode: string) → {left, right, top, bottom}
              +
              Returns the position and dimensions of an arbitrary + character. pos should be a {line, ch} + object. This differs from cursorCoords in that + it'll give the size of the whole character, rather than just the + position that the cursor would have when it would sit at that + position.
              +
              cm.coordsChar(object: {left, top}, ?mode: string) → {line, ch}
              +
              Given an {left, top} object, returns + the {line, ch} position that corresponds to it. The + optional mode parameter determines relative to what + the coordinates are interpreted. It may + be "window", "page" (the default), + or "local".
              +
              cm.lineAtHeight(height: number, ?mode: string) → number
              +
              Computes the line at the given pixel + height. mode can be one of the same strings + that coordsChar + accepts.
              +
              cm.heightAtLine(line: number, ?mode: string) → number
              +
              Computes the height of the top of a line, in the coordinate + system specified by mode + (see coordsChar), which + defaults to "page". When a line below the bottom of + the document is specified, the returned value is the bottom of + the last line in the document.
              +
              cm.defaultTextHeight() → number
              +
              Returns the line height of the default font for the editor.
              +
              cm.defaultCharWidth() → number
              +
              Returns the pixel width of an 'x' in the default font for + the editor. (Note that for non-monospace fonts, this is mostly + useless, and even for monospace fonts, non-ascii characters + might have a different width).
              + +
              cm.getViewport() → {from: number, to: number}
              +
              Returns a {from, to} object indicating the + start (inclusive) and end (exclusive) of the currently rendered + part of the document. In big documents, when most content is + scrolled out of view, CodeMirror will only render the visible + part, and a margin around it. See also + the viewportChange + event.
              + +
              cm.refresh()
              +
              If your code does something to change the size of the editor + element (window resizes are already listened for), or unhides + it, you should probably follow up by calling this method to + ensure CodeMirror is still looking as intended.
              +
              + +

              Mode, state, and token-related methods

              + +

              When writing language-aware functionality, it can often be + useful to hook into the knowledge that the CodeMirror language + mode has. See the section on modes for a + more detailed description of how these work.

              + +
              +
              doc.getMode() → object
              +
              Gets the (outer) mode object for the editor. Note that this + is distinct from getOption("mode"), which gives you + the mode specification, rather than the resolved, instantiated + mode object.
              + +
              doc.getModeAt(pos: {line, ch}) → object
              +
              Gets the inner mode at a given position. This will return + the same as getMode for + simple modes, but will return an inner mode for nesting modes + (such as htmlmixed).
              + +
              cm.getTokenAt(pos: {line, ch}, ?precise: boolean) → object
              +
              Retrieves information about the token the current mode found + before the given position (a {line, ch} object). The + returned object has the following properties: +
              +
              start
              The character (on the given line) at which the token starts.
              +
              end
              The character at which the token ends.
              +
              string
              The token's string.
              +
              type
              The token type the mode assigned + to the token, such as "keyword" + or "comment" (may also be null).
              +
              state
              The mode's state at the end of this token.
              +
              + If precise is true, the token will be guaranteed to be accurate based on recent edits. If false or + not specified, the token will use cached state information, which will be faster but might not be accurate if + edits were recently made and highlighting has not yet completed. +
              + +
              cm.getTokenTypeAt(pos: {line, ch}) → string
              +
              This is a (much) cheaper version + of getTokenAt useful for + when you just need the type of the token at a given position, + and no other information. Will return null for + unstyled tokens, and a string, potentially containing multiple + space-separated style names, otherwise.
              + +
              cm.getHelper(pos: {line, ch}, type: string) → helper
              +
              Fetch appropriate helper for the given position. Helpers + provide a way to look up functionality appropriate for a mode. + The type argument provides the helper namespace + (see + also registerHelper), + in which the value will be looked up. The key that is used + depends on the mode active at the given + position. If the mode object contains a property with the same + name as the type argument, that is tried first. + Next, the mode's helperType, if any, is tried. And + finally, the mode's name.
              + +
              cm.getStateAfter(?line: integer, ?precise: boolean) → object
              +
              Returns the mode's parser state, if any, at the end of the + given line number. If no line number is given, the state at the + end of the document is returned. This can be useful for storing + parsing errors in the state, or getting other kinds of + contextual information for a line. precise is defined + as in getTokenAt().
              +
              + +

              Miscellaneous methods

              + +
              +
              cm.operation(func: () → any) → any
              +
              CodeMirror internally buffers changes and only updates its + DOM structure after it has finished performing some operation. + If you need to perform a lot of operations on a CodeMirror + instance, you can call this method with a function argument. It + will call the function, buffering up all changes, and only doing + the expensive update after the function returns. This can be a + lot faster. The return value from this method will be the return + value of your function.
              + +
              cm.indentLine(line: integer, ?dir: string|integer)
              +
              Adjust the indentation of the given line. The second + argument (which defaults to "smart") may be one of: +
              +
              "prev"
              +
              Base indentation on the indentation of the previous line.
              +
              "smart"
              +
              Use the mode's smart indentation if available, behave + like "prev" otherwise.
              +
              "add"
              +
              Increase the indentation of the line by + one indent unit.
              +
              "subtract"
              +
              Reduce the indentation of the line.
              +
              <integer>
              +
              Add (positive number) or reduce (negative number) the + indentation by the given amount of spaces.
              +
              + +
              cm.toggleOverwrite(?value: bool)
              +
              Switches between overwrite and normal insert mode (when not + given an argument), or sets the overwrite mode to a specific + state (when given an argument).
              + +
              doc.posFromIndex(index: integer) → {line, ch}
              +
              Calculates and returns a {line, ch} object for a + zero-based index who's value is relative to the start of the + editor's text. If the index is out of range of the text then + the returned object is clipped to start or end of the text + respectively.
              +
              doc.indexFromPos(object: {line, ch}) → integer
              +
              The reverse of posFromIndex.
              + +
              cm.focus()
              +
              Give the editor focus.
              + +
              cm.getInputField() → TextAreaElement
              +
              Returns the hidden textarea used to read input.
              +
              cm.getWrapperElement() → Element
              +
              Returns the DOM node that represents the editor, and + controls its size. Remove this from your tree to delete an + editor instance.
              +
              cm.getScrollerElement() → Element
              +
              Returns the DOM node that is responsible for the scrolling + of the editor.
              +
              cm.getGutterElement() → Element
              +
              Fetches the DOM node that contains the editor gutters.
              +
              + +

              Static properties

              +

              The CodeMirror object itself provides + several useful properties.

              + +
              +
              CodeMirror.version: string
              +
              It contains a string that indicates the version of the + library. This is a triple of + integers "major.minor.patch", + where patch is zero for releases, and something + else (usually one) for dev snapshots.
              + +
              CodeMirror.fromTextArea(textArea: TextAreaElement, ?config: object)
              +
              + The method provides another way to initialize an editor. It takes a + textarea DOM node as first argument and an optional configuration + object as second. It will replace the textarea with a CodeMirror + instance, and wire up the form of that textarea (if any) to make + sure the editor contents are put into the textarea when the form + is submitted. A CodeMirror instance created this way has three + additional methods: +
              +
              cm.save()
              +
              Copy the content of the editor into the textarea.
              + +
              cm.toTextArea()
              +
              Remove the editor, and restore the original textarea (with + the editor's current content).
              + +
              cm.getTextArea() → TextAreaElement
              +
              Returns the textarea that the instance was based on.
              +
              +
              + +
              CodeMirror.defaults: object
              +
              An object containing default values for + all options. You can assign to its + properties to modify defaults (though this won't affect editors + that have already been created).
              + +
              CodeMirror.defineExtension(name: string, value: any)
              +
              If you want to define extra methods in terms of the + CodeMirror API, it is possible to + use defineExtension. This will cause the given + value (usually a method) to be added to all CodeMirror instances + created from then on.
              + +
              CodeMirror.defineDocExtension(name: string, value: any)
              +
              Like defineExtension, + but the method will be added to the interface + for Doc objects instead.
              + +
              CodeMirror.defineOption(name: string, + default: any, updateFunc: function)
              +
              Similarly, defineOption can be used to define new options for + CodeMirror. The updateFunc will be called with the + editor instance and the new value when an editor is initialized, + and whenever the option is modified + through setOption.
              + +
              CodeMirror.defineInitHook(func: function)
              +
              If your extention just needs to run some + code whenever a CodeMirror instance is initialized, + use CodeMirror.defineInitHook. Give it a function as + its only argument, and from then on, that function will be called + (with the instance as argument) whenever a new CodeMirror instance + is initialized.
              + +
              CodeMirror.registerHelper(type: string, name: string, value: helper)
              +
              Registers a helper value with the given name in + the given namespace (type). This is used to define + functionality that may be looked up by mode. Will create (if it + doesn't already exist) a property on the CodeMirror + object for the given type, pointing to an object + that maps names to values. I.e. after + doing CodeMirror.registerHelper("hint", "foo", + myFoo), the value CodeMirror.hint.foo will + point to myFoo.
              + +
              CodeMirror.Pos(line: integer, ?ch: integer)
              +
              A constructor for the {line, ch} objects that + are used to represent positions in editor documents.
              + +
              CodeMirror.changeEnd(change: object) → {line, ch}
              +
              Utility function that computes an end position from a change + (an object with from, to, + and text properties, as passed to + various event handlers). The + returned position will be the end of the changed + range, after the change is applied.
              +
              + +

              Addons

              + +

              The addon directory in the distribution contains a + number of reusable components that implement extra editor + functionality. In brief, they are:

              + +
              +
              dialog/dialog.js
              +
              Provides a very simple way to query users for text input. + Adds an openDialog method to CodeMirror instances, + which can be called with an HTML fragment that provides the + prompt (should include an input tag), and a + callback function that is called when text has been entered. + Depends on addon/dialog/dialog.css.
              + +
              search/searchcursor.js
              +
              Adds the getSearchCursor(query, start, caseFold) → + cursor method to CodeMirror instances, which can be used + to implement search/replace functionality. query + can be a regular expression or a string (only strings will match + across lines—if they contain newlines). start + provides the starting position of the search. It can be + a {line, ch} object, or can be left off to default + to the start of the document. caseFold is only + relevant when matching a string. It will cause the search to be + case-insensitive. A search cursor has the following methods: +
              +
              findNext() → boolean
              +
              findPrevious() → boolean
              +
              Search forward or backward from the current position. + The return value indicates whether a match was found. If + matching a regular expression, the return value will be the + array returned by the match method, in case you + want to extract matched groups.
              +
              from() → {line, ch}
              +
              to() → {line, ch}
              +
              These are only valid when the last call + to findNext or findPrevious did + not return false. They will return {line, ch} + objects pointing at the start and end of the match.
              +
              replace(text: string)
              +
              Replaces the currently found match with the given text + and adjusts the cursor position to reflect the + replacement.
              +
              + + +
              Implements the search commands. CodeMirror has keys bound to + these by default, but will not do anything with them unless an + implementation is provided. Depends + on searchcursor.js, and will make use + of openDialog when + available to make prompting for search queries less ugly.
              + +
              edit/matchbrackets.js
              +
              Defines an option matchBrackets which, when set + to true, causes matching brackets to be highlighted whenever the + cursor is next to them. It also adds a + method matchBrackets that forces this to happen + once, and a method findMatchingBracket that can be + used to run the bracket-finding algorithm that this uses + internally.
              + +
              edit/closebrackets.js
              +
              Defines an option autoCloseBrackets that will + auto-close brackets and quotes when typed. By default, it'll + auto-close ()[]{}''"", but you can pass it a string + similar to that (containing pairs of matching characters), or an + object with pairs and + optionally explode properties to customize + it. explode should be a similar string that gives + the pairs of characters that, when enter is pressed between + them, should have the second character also moved to its own + line. Demo here.
              + +
              edit/matchtags.js
              +
              Defines an option matchTags that, when enabled, + will cause the tags around the cursor to be highlighted (using + the CodeMirror-matchingbrackets class). Also + defines + a command toMatchingTag, + which you can bind a key to in order to jump to the tag mathing + the one under the cursor. Depends on + the addon/fold/xml-fold.js + addon. Demo here.
              + +
              edit/trailingspace.js
              +
              Adds an option showTrailingSpace which, when + enabled, adds the CSS class cm-trailingspace to + stretches of whitespace at the end of lines. + The demo has a nice + squiggly underline style for this class.
              + +
              comment/comment.js
              +
              Addon for commenting and uncommenting code. Adds three + methods to CodeMirror instances: +
              +
              lineComment(from: {line, ch}, to: {line, ch}, ?options: object)
              +
              Set the lines in the given range to be line comments. Will + fall back to blockComment when no line comment + style is defined for the mode.
              +
              blockComment(from: {line, ch}, to: {line, ch}, ?options: object)
              +
              Wrap the code in the given range in a block comment. Will + fall back to lineComment when no block comment + style is defined for the mode.
              +
              uncomment(from: {line, ch}, to: {line, ch}, ?options: object) → boolean
              +
              Try to uncomment the given range. + Returns true if a comment range was found and + removed, false otherwise.
              +
              + The options object accepted by these methods may + have the following properties: +
              +
              blockCommentStart, blockCommentEnd, blockCommentLead, lineComment: string
              +
              Override the comment string + properties of the mode with custom comment strings.
              +
              padding: string
              +
              A string that will be inserted after opening and before + closing comment markers. Defaults to a single space.
              +
              commentBlankLines: boolean
              +
              Whether, when adding line comments, to also comment lines + that contain only whitespace.
              +
              indent: boolean
              +
              When adding line comments and this is turned on, it will + align the comment block to the current indentation of the + first line of the block.
              +
              fullLines: boolean
              +
              When block commenting, this controls whether the whole + lines are indented, or only the precise range that is given. + Defaults to true.
              +
              + The addon also defines + a toggleComment command, + which will try to uncomment the current selection, and if that + fails, line-comments it.
              + +
              fold/foldcode.js
              +
              Helps with code folding. Adds a foldCode method + to editor instances, which will try to do a code fold starting + at the given line, or unfold the fold that is already present. + The method takes as first argument the position that should be + folded (may be a line number or + a Pos), and as second optional + argument either a range-finder function, or an options object, + supporting the following properties: +
              +
              rangeFinder: fn(CodeMirror, Pos)
              +
              The function that is used to find foldable ranges. If this + is not directly passed, it will + call getHelper with + a "fold" type to find one that's appropriate for + the mode. There are files in + the addon/fold/ + directory providing CodeMirror.fold.brace, which + finds blocks in brace languages (JavaScript, C, Java, + etc), CodeMirror.fold.indent, for languages where + indentation determines block structure (Python, Haskell), + and CodeMirror.fold.xml, for XML-style + languages.
              +
              widget: string|Element
              +
              The widget to show for folded ranges. Can be either a + string, in which case it'll become a span with + class CodeMirror-foldmarker, or a DOM node.
              +
              scanUp: boolean
              +
              When true (default is false), the addon will try to find + foldable ranges on the lines above the current one if there + isn't an eligible one on the given line.
              +
              minFoldSize: integer
              +
              The minimum amount of lines that a fold should span to be + accepted. Defaults to 0, which also allows single-line + folds.
              +
              + See the demo for an + example.
              + +
              fold/foldgutter.js
              +
              Provides an option foldGutter, which can be + used to create a gutter with markers indicating the blocks that + can be folded. Create a gutter using + the gutters option, + giving it the class CodeMirror-foldgutter or + something else if you configure the addon to use a different + class, and this addon will show markers next to folded and + foldable blocks, and handle clicks in this gutter. The option + can be either set to true, or an object containing + the following optional option fields: +
              +
              gutter: string
              +
              The CSS class of the gutter. Defaults + to "CodeMirror-foldgutter". You will have to + style this yourself to give it a width (and possibly a + background).
              +
              indicatorOpen: string | Element
              +
              A CSS class or DOM element to be used as the marker for + open, foldable blocks. Defaults + to "CodeMirror-foldgutter-open".
              +
              indicatorFolded: string | Element
              +
              A CSS class or DOM element to be used as the marker for + folded blocks. Defaults to "CodeMirror-foldgutter-folded".
              +
              rangeFinder: fn(CodeMirror, Pos)
              +
              The range-finder function to use when determining whether + something can be folded. When not + given, getHelper will be + used to determine a default.
              +
              + Demo here.
              + +
              runmode/runmode.js
              +
              Can be used to run a CodeMirror mode over text without + actually opening an editor instance. + See the demo for an example. + There are alternate versions of the file avaible for + running stand-alone + (without including all of CodeMirror) and + for running under + node.js.
              + +
              mode/overlay.js
              +
              Mode combinator that can be used to extend a mode with an + 'overlay' — a secondary mode is run over the stream, along with + the base mode, and can color specific pieces of text without + interfering with the base mode. + Defines CodeMirror.overlayMode, which is used to + create such a mode. See this + demo for a detailed example.
              + +
              mode/multiplex.js
              +
              Mode combinator that can be used to easily 'multiplex' + between several modes. + Defines CodeMirror.multiplexingMode which, when + given as first argument a mode object, and as other arguments + any number of {open, close, mode [, delimStyle, innerStyle]} + objects, will return a mode object that starts parsing using the + mode passed as first argument, but will switch to another mode + as soon as it encounters a string that occurs in one of + the open fields of the passed objects. When in a + sub-mode, it will go back to the top mode again when + the close string is encountered. + Pass "\n" for open or close + if you want to switch on a blank line. +
              • When delimStyle is specified, it will be the token + style returned for the delimiter tokens.
              • +
              • When innerStyle is specified, it will be the token + style added for each inner mode token.
              + The outer mode will not see the content between the delimiters. + See this demo for an + example.
              + +
              hint/show-hint.js
              +
              Provides a framework for showing autocompletion hints. + Defines CodeMirror.showHint, which takes a + CodeMirror instance, a hinting function, and optionally an + options object, and pops up a widget that allows the user to + select a completion. Hinting functions are function that take an + editor instance and an optional options object, and return + a {list, from, to} object, where list + is an array of strings or objects (the completions), + and from and to give the start and end + of the token that is being completed as {line, ch} + objects. If no hinting function is given, the addon will try to + use getHelper with + the "hint" type to find one. When completions + aren't simple strings, they should be objects with the folowing + properties: +
              +
              text: string
              +
              The completion text. This is the only required + property.
              +
              displayText: string
              +
              The text that should be displayed in the menu.
              +
              className: string
              +
              A CSS class name to apply to the completion's line in the + menu.
              +
              render: fn(Element, self, data)
              +
              A method used to create the DOM structure for showing the + completion by appending it to its first argument.
              +
              hint: fn(CodeMirror, self, data)
              +
              A method used to actually apply the completion, instead of + the default behavior.
              +
              + The plugin understands the following options (the options object + will also be passed along to the hinting function, which may + understand additional options): +
              +
              async: boolean
              +
              When set to true, the hinting function's signature should + be (cm, callback, ?options), and the completion + interface will only be popped up when the hinting function + calls the callback, passing it the object holding the + completions.
              +
              completeSingle: boolean
              +
              Determines whether, when only a single completion is + available, it is completed without showing the dialog. + Defaults to true.
              +
              alignWithWord: boolean
              +
              Whether the pop-up should be horizontally aligned with the + start of the word (true, default), or with the cursor (false).
              +
              closeOnUnfocus: boolean
              +
              When enabled (which is the default), the pop-up will close + when the editor is unfocused.
              +
              customKeys: keymap
              +
              Allows you to provide a custom keymap of keys to be active + when the pop-up is active. The handlers will be called with an + extra argument, a handle to the completion menu, which + has moveFocus(n), setFocus(n), pick(), + and close() methods (see the source for details), + that can be used to change the focused element, pick the + current element or close the menu.
              +
              extraKeys: keymap
              +
              Like customKeys above, but the bindings will + be added to the set of default bindings, instead of replacing + them.
              +
              + The following events will be fired on the completions object + during completion: +
              +
              "shown" ()
              +
              Fired when the pop-up is shown.
              +
              "select" (completion, Element)
              +
              Fired when a completion is selected. Passed the completion + value (string or object) and the DOM node that represents it + in the menu.
              +
              "close" ()
              +
              Fired when the completion is finished.
              +
              + This addon depends styles + from addon/hint/show-hint.css. Check + out the demo for an + example.
              + +
              hint/javascript-hint.js
              +
              Defines a simple hinting function for JavaScript + (CodeMirror.hint.javascript) and CoffeeScript + (CodeMirror.hint.coffeescript) code. This will + simply use the JavaScript environment that the editor runs in as + a source of information about objects and their properties.
              + +
              hint/xml-hint.js
              +
              Defines CodeMirror.hint.xml, which produces + hints for XML tagnames, attribute names, and attribute values, + guided by a schemaInfo option (a property of the + second argument passed to the hinting function, or the third + argument passed to CodeMirror.showHint).
              The + schema info should be an object mapping tag names to information + about these tags, with optionally a "!top" property + containing a list of the names of valid top-level tags. The + values of the properties should be objects with optional + properties children (an array of valid child + element names, omit to simply allow all tags to appear) + and attrs (an object mapping attribute names + to null for free-form attributes, and an array of + valid values for restricted + attributes). Demo + here.
              + +
              hint/html-hint.js
              +
              Provides schema info to + the xml-hint addon for HTML + documents. Defines a schema + object CodeMirror.htmlSchema that you can pass to + as a schemaInfo option, and + a CodeMirror.hint.html hinting function that + automatically calls CodeMirror.hint.xml with this + schema data. See + the demo.
              + +
              hint/python-hint.js
              +
              A very simple hinting function for Python code. + Defines CodeMirror.hint.python.
              + +
              hint/anyword-hint.js
              +
              A very simple hinting function + (CodeMirror.hint.anyword) that simply looks for + words in the nearby code and completes to those. Takes two + optional options, word, a regular expression that + matches words (sequences of one or more character), + and range, which defines how many lines the addon + should scan when completing (defaults to 500).
              + +
              match-highlighter.js
              +
              Adds a highlightSelectionMatches option that + can be enabled to highlight all instances of a currently + selected word. Can be set either to true or to an object + containing the following options: minChars, for the + minimum amount of selected characters that triggers a highlight + (default 2), style, for the style to be used to + highlight the matches (default "matchhighlight", + which will correspond to CSS + class cm-matchhighlight), + and showToken which can be set to true + or to a regexp matching the characters that make up a word. When + enabled, it causes the current word to be highlighted when + nothing is selected (defaults to off). + Demo here.
              + +
              lint/lint.js
              +
              Defines an interface component for showing linting warnings, + with pluggable warning sources + (see json-lint.js + and javascript-lint.js + in the same directory). Defines a lint option that + can be set to a warning source (for + example CodeMirror.lint.javascript), or + to true, in which + case getHelper with + type "lint" is used to determined a validator + function. Depends on addon/lint/lint.css. A demo + can be found here.
              + +
              selection/mark-selection.js
              +
              Causes the selected text to be marked with the CSS class + CodeMirror-selectedtext when the styleSelectedText option + is enabled. Useful to change the colour of the selection (in addition to the background), + like in this demo.
              + +
              selection/active-line.js
              +
              Defines a styleActiveLine option that, when enabled, + gives the wrapper of the active line the class CodeMirror-activeline, + and adds a background with the class CodeMirror-activeline-background. + is enabled. See the demo.
              + +
              edit/closetag.js
              +
              Provides utility functions for adding automatic tag closing + to XML modes. See + the demo.
              + +
              mode/loadmode.js
              +
              Defines a CodeMirror.requireMode(modename, + callback) function that will try to load a given mode and + call the callback when it succeeded. You'll have to + set CodeMirror.modeURL to a string that mode paths + can be constructed from, for + example "mode/%N/%N.js"—the %N's will + be replaced with the mode name. Also + defines CodeMirror.autoLoadMode(instance, mode), + which will ensure the given mode is loaded and cause the given + editor instance to refresh its mode when the loading + succeeded. See the demo.
              + +
              edit/continuecomment.js
              +
              Adds an continueComments option, which can be + set to true to have the editor prefix new lines inside C-like + block comments with an asterisk when Enter is pressed. It can + also be set to a string in order to bind this functionality to a + specific key..
              + +
              display/placeholder.js
              +
              Adds a placeholder option that can be used to + make text appear in the editor when it is empty and not focused. + Also gives the editor a CodeMirror-empty CSS class + whenever it doesn't contain any text. + See the demo.
              + +
              merge/merge.js
              +
              Implements an interface for merging changes, using either a + 2-way or a 3-way view. The CodeMirror.MergeView + constructor takes arguments similar to + the CodeMirror + constructor, first a node to append the interface to, and then + an options object. Two extra optional options are + recognized, origLeft and origRight, + which may be strings that provide original versions of the + document, which will be shown to the left and right of the + editor in non-editable CodeMirror instances. The merge interface + will highlight changes between the editable document and the + original(s) (demo).
              +
              + +

              Writing CodeMirror Modes

              + +

              Modes typically consist of a single JavaScript file. This file + defines, in the simplest case, a lexer (tokenizer) for your + language—a function that takes a character stream as input, + advances it past a token, and returns a style for that token. More + advanced modes can also handle indentation for the language.

              + +

              The mode script should + call CodeMirror.defineMode to register itself with + CodeMirror. This function takes two arguments. The first should be + the name of the mode, for which you should use a lowercase string, + preferably one that is also the name of the files that define the + mode (i.e. "xml" is defined in xml.js). The + second argument should be a function that, given a CodeMirror + configuration object (the thing passed to + the CodeMirror function) and an optional mode + configuration object (as in + the mode option), returns + a mode object.

              + +

              Typically, you should use this second argument + to defineMode as your module scope function (modes + should not leak anything into the global scope!), i.e. write your + whole mode inside this function.

              + +

              The main responsibility of a mode script is parsing + the content of the editor. Depending on the language and the + amount of functionality desired, this can be done in really easy + or extremely complicated ways. Some parsers can be stateless, + meaning that they look at one element (token) of the code + at a time, with no memory of what came before. Most, however, will + need to remember something. This is done by using a state + object, which is an object that is always passed when + reading a token, and which can be mutated by the tokenizer.

              + +

              Modes that use a state must define + a startState method on their mode object. This is a + function of no arguments that produces a state object to be used + at the start of a document.

              + +

              The most important part of a mode object is + its token(stream, state) method. All modes must + define this method. It should read one token from the stream it is + given as an argument, optionally update its state, and return a + style string, or null for tokens that do not have to + be styled. For your styles, you are encouraged to use the + 'standard' names defined in the themes (without + the cm- prefix). If that fails, it is also possible + to come up with your own and write your own CSS theme file.

              + +

              The stream object that's passed + to token encapsulates a line of code (tokens may + never span lines) and our current position in that line. It has + the following API:

              + +
              +
              eol() → boolean
              +
              Returns true only if the stream is at the end of the + line.
              +
              sol() → boolean
              +
              Returns true only if the stream is at the start of the + line.
              + +
              peek() → string
              +
              Returns the next character in the stream without advancing + it. Will return an null at the end of the + line.
              +
              next() → string
              +
              Returns the next character in the stream and advances it. + Also returns null when no more characters are + available.
              + +
              eat(match: string|regexp|function(char: string) → boolean) → string
              +
              match can be a character, a regular expression, + or a function that takes a character and returns a boolean. If + the next character in the stream 'matches' the given argument, + it is consumed and returned. Otherwise, undefined + is returned.
              +
              eatWhile(match: string|regexp|function(char: string) → boolean) → boolean
              +
              Repeatedly calls eat with the given argument, + until it fails. Returns true if any characters were eaten.
              +
              eatSpace() → boolean
              +
              Shortcut for eatWhile when matching + white-space.
              +
              skipToEnd()
              +
              Moves the position to the end of the line.
              +
              skipTo(ch: string) → boolean
              +
              Skips to the next occurrence of the given character, if + found on the current line (doesn't advance the stream if the + character does not occur on the line). Returns true if the + character was found.
              +
              match(pattern: string, ?consume: boolean, ?caseFold: boolean) → boolean
              +
              match(pattern: regexp, ?consume: boolean) → array<string>
              +
              Act like a + multi-character eat—if consume is true + or not given—or a look-ahead that doesn't update the stream + position—if it is false. pattern can be either a + string or a regular expression starting with ^. + When it is a string, caseFold can be set to true to + make the match case-insensitive. When successfully matching a + regular expression, the returned value will be the array + returned by match, in case you need to extract + matched groups.
              + +
              backUp(n: integer)
              +
              Backs up the stream n characters. Backing it up + further than the start of the current token will cause things to + break, so be careful.
              +
              column() → integer
              +
              Returns the column (taking into account tabs) at which the + current token starts.
              +
              indentation() → integer
              +
              Tells you how far the current line has been indented, in + spaces. Corrects for tab characters.
              + +
              current() → string
              +
              Get the string between the start of the current token and + the current stream position.
              +
              + +

              By default, blank lines are simply skipped when + tokenizing a document. For languages that have significant blank + lines, you can define a blankLine(state) method on + your mode that will get called whenever a blank line is passed + over, so that it can update the parser state.

              + +

              Because state object are mutated, and CodeMirror + needs to keep valid versions of a state around so that it can + restart a parse at any line, copies must be made of state objects. + The default algorithm used is that a new state object is created, + which gets all the properties of the old object. Any properties + which hold arrays get a copy of these arrays (since arrays tend to + be used as mutable stacks). When this is not correct, for example + because a mode mutates non-array properties of its state object, a + mode object should define a copyState method, + which is given a state and should return a safe copy of that + state.

              + +

              If you want your mode to provide smart indentation + (through the indentLine + method and the indentAuto + and newlineAndIndent commands, to which keys can be + bound), you must define + an indent(state, textAfter) method on your mode + object.

              + +

              The indentation method should inspect the given state object, + and optionally the textAfter string, which contains + the text on the line that is being indented, and return an + integer, the amount of spaces to indent. It should usually take + the indentUnit + option into account. An indentation method may + return CodeMirror.Pass to indicate that it + could not come up with a precise indentation.

              + +

              To work well with + the commenting addon, a mode may + define lineComment (string that starts a line + comment), blockCommentStart, blockCommentEnd + (strings that start and end block comments), + and blockCommentLead (a string to put at the start of + continued lines in a block comment). All of these are + optional.

              + +

              Finally, a mode may define + an electricChars property, which should hold a string + containing all the characters that should trigger the behaviour + described for + the electricChars + option.

              + +

              So, to summarize, a mode must provide + a token method, and it may + provide startState, copyState, + and indent methods. For an example of a trivial mode, + see the diff mode, for a more + involved example, see the C-like + mode.

              + +

              Sometimes, it is useful for modes to nest—to have one + mode delegate work to another mode. An example of this kind of + mode is the mixed-mode HTML + mode. To implement such nesting, it is usually necessary to + create mode objects and copy states yourself. To create a mode + object, there are CodeMirror.getMode(options, + parserConfig), where the first argument is a configuration + object as passed to the mode constructor function, and the second + argument is a mode specification as in + the mode option. To copy a + state object, call CodeMirror.copyState(mode, state), + where mode is the mode that created the given + state.

              + +

              In a nested mode, it is recommended to add an + extra methods, innerMode which, given a state object, + returns a {state, mode} object with the inner mode + and its state for the current position. These are used by utility + scripts such as the tag closer to + get context information. Use the CodeMirror.innerMode + helper function to, starting from a mode and a state, recursively + walk down to the innermost mode and state.

              + +

              To make indentation work properly in a nested parser, it is + advisable to give the startState method of modes that + are intended to be nested an optional argument that provides the + base indentation for the block of code. The JavaScript and CSS + parser do this, for example, to allow JavaScript and CSS code + inside the mixed-mode HTML mode to be properly indented.

              + +

              It is possible, and encouraged, to associate your mode, or a + certain configuration of your mode, with + a MIME type. For + example, the JavaScript mode associates itself + with text/javascript, and its JSON variant + with application/json. To do this, + call CodeMirror.defineMIME(mime, modeSpec), + where modeSpec can be a string or object specifying a + mode, as in the mode + option.

              + +

              Sometimes, it is useful to add or override mode + object properties from external code. + The CodeMirror.extendMode can be used to add + properties to mode objects produced for a specific mode. Its first + argument is the name of the mode, its second an object that + specifies the properties that should be added. This is mostly + useful to add utilities that can later be looked + up through getMode.

              + +
              + +
               
              + + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/modes.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/modes.html new file mode 100644 index 0000000..82738f1 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/modes.html @@ -0,0 +1,100 @@ + + + + + CodeMirror: Mode list + + + + + +

              { } CodeMirror

              + +
              + +
              +/* Full list of
              +   modes */
              +
              +
              + +

              Every mode in the distribution. The list on the front-page leaves +out some of the more obscure ones.

              + + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/oldrelease.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/oldrelease.html new file mode 100644 index 0000000..c72dc8f --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/oldrelease.html @@ -0,0 +1,546 @@ + + + + + CodeMirror + + + + + + +

              { } CodeMirror

              + +
              + +
              +/* Old release
              +   history */
              +
              +
              + +

              20-11-2012: Version 3.0, release candidate 2:

              + +
                +
              • New mode: HTTP.
              • +
              • Improved handling of selection anchor position.
              • +
              • Improve IE performance on longer lines.
              • +
              • Reduce gutter glitches during horiz. scrolling.
              • +
              • Add addKeyMap and removeKeyMap methods.
              • +
              • Rewrite formatting and closetag add-ons.
              • +
              • Full list of patches.
              • +
              + +

              20-11-2012: Version 2.36:

              + + + +

              20-11-2012: Version 3.0, release candidate 1:

              + + + +

              22-10-2012: Version 2.35:

              + +
                +
              • New (sub) mode: TypeScript.
              • +
              • Don't overwrite (insert key) when pasting.
              • +
              • Fix several bugs in markText/undo interaction.
              • +
              • Better indentation of JavaScript code without semicolons.
              • +
              • Add defineInitHook function.
              • +
              • Full list of patches.
              • +
              + +

              22-10-2012: Version 3.0, beta 2:

              + +
                +
              • Fix page-based coordinate computation.
              • +
              • Fix firing of gutterClick event.
              • +
              • Add cursorHeight option.
              • +
              • Fix bi-directional text regression.
              • +
              • Add viewportMargin option.
              • +
              • Directly handle mousewheel events (again, hopefully better).
              • +
              • Make vertical cursor movement more robust (through widgets, big line gaps).
              • +
              • Add flattenSpans option.
              • +
              • Many optimizations. Poor responsiveness should be fixed.
              • +
              • Initialization in hidden state works again.
              • +
              • Full list of patches.
              • +
              + +

              19-09-2012: Version 2.34:

              + +
                +
              • New mode: Common Lisp.
              • +
              • Fix right-click select-all on most browsers.
              • +
              • Change the way highlighting happens:
                  Saves memory and CPU cycles.
                  compareStates is no longer needed.
                  onHighlightComplete no longer works.
              • +
              • Integrate mode (Markdown, XQuery, CSS, sTex) tests in central testsuite.
              • +
              • Add a CodeMirror.version property.
              • +
              • More robust handling of nested modes in formatting and closetag plug-ins.
              • +
              • Un/redo now preserves marked text and bookmarks.
              • +
              • Full list of patches.
              • +
              + +

              19-09-2012: Version 3.0, beta 1:

              + +
                +
              • Bi-directional text support.
              • +
              • More powerful gutter model.
              • +
              • Support for arbitrary text/widget height.
              • +
              • In-line widgets.
              • +
              • Generalized event handling.
              • +
              + +

              23-08-2012: Version 2.33:

              + +
                +
              • New mode: Sieve.
              • +
              • New getViewPort and onViewportChange API.
              • +
              • Configurable cursor blink rate.
              • +
              • Make binding a key to false disabling handling (again).
              • +
              • Show non-printing characters as red dots.
              • +
              • More tweaks to the scrolling model.
              • +
              • Expanded testsuite. Basic linter added.
              • +
              • Remove most uses of innerHTML. Remove CodeMirror.htmlEscape.
              • +
              • Full list of patches.
              • +
              + +

              23-07-2012: Version 2.32:

              + +

              Emergency fix for a bug where an editor with + line wrapping on IE will break when there is no + scrollbar.

              + +

              20-07-2012: Version 2.31:

              + + + +

              22-06-2012: Version 2.3:

              + +
                +
              • New scrollbar implementation. Should flicker less. Changes DOM structure of the editor.
              • +
              • New theme: vibrant-ink.
              • +
              • Many extensions to the VIM keymap (including text objects).
              • +
              • Add mode-multiplexing utility script.
              • +
              • Fix bug where right-click paste works in read-only mode.
              • +
              • Add a getScrollInfo method.
              • +
              • Lots of other fixes.
              • +
              + +

              23-05-2012: Version 2.25:

              + +
                +
              • New mode: Erlang.
              • +
              • Remove xmlpure mode (use xml.js).
              • +
              • Fix line-wrapping in Opera.
              • +
              • Fix X Windows middle-click paste in Chrome.
              • +
              • Fix bug that broke pasting of huge documents.
              • +
              • Fix backspace and tab key repeat in Opera.
              • +
              + +

              23-04-2012: Version 2.24:

              + +
                +
              • Drop support for Internet Explorer 6.
              • +
              • New + modes: Shell, Tiki + wiki, Pig Latin.
              • +
              • New themes: Ambiance, Blackboard.
              • +
              • More control over drag/drop + with dragDrop + and onDragEvent + options.
              • +
              • Make HTML mode a bit less pedantic.
              • +
              • Add compoundChange API method.
              • +
              • Several fixes in undo history and line hiding.
              • +
              • Remove (broken) support for catchall in key maps, + add nofallthrough boolean field instead.
              • +
              + +

              26-03-2012: Version 2.23:

              + +
                +
              • Change default binding for tab [more] + +
              • +
              • New modes: XQuery and VBScript.
              • +
              • Two new themes: lesser-dark and xq-dark.
              • +
              • Differentiate between background and text styles in setLineClass.
              • +
              • Fix drag-and-drop in IE9+.
              • +
              • Extend charCoords + and cursorCoords with a mode argument.
              • +
              • Add autofocus option.
              • +
              • Add findMarksAt method.
              • +
              + +

              27-02-2012: Version 2.22:

              + + + +

              27-01-2012: Version 2.21:

              + +
                +
              • Added LESS, MySQL, + Go, and Verilog modes.
              • +
              • Add smartIndent + option.
              • +
              • Support a cursor in readOnly-mode.
              • +
              • Support assigning multiple styles to a token.
              • +
              • Use a new approach to drawing the selection.
              • +
              • Add scrollTo method.
              • +
              • Allow undo/redo events to span non-adjacent lines.
              • +
              • Lots and lots of bugfixes.
              • +
              + +

              20-12-2011: Version 2.2:

              + + + +

              21-11-2011: Version 2.18:

              +

              Fixes TextMarker.clear, which is broken in 2.17.

              + +

              21-11-2011: Version 2.17:

              +
                +
              • Add support for line + wrapping and code + folding.
              • +
              • Add Github-style Markdown mode.
              • +
              • Add Monokai + and Rubyblue themes.
              • +
              • Add setBookmark method.
              • +
              • Move some of the demo code into reusable components + under lib/util.
              • +
              • Make screen-coord-finding code faster and more reliable.
              • +
              • Fix drag-and-drop in Firefox.
              • +
              • Improve support for IME.
              • +
              • Speed up content rendering.
              • +
              • Fix browser's built-in search in Webkit.
              • +
              • Make double- and triple-click work in IE.
              • +
              • Various fixes to modes.
              • +
              + +

              27-10-2011: Version 2.16:

              +
                +
              • Add Perl, Rust, TiddlyWiki, and Groovy modes.
              • +
              • Dragging text inside the editor now moves, rather than copies.
              • +
              • Add a coordsFromIndex method.
              • +
              • API change: setValue now no longer clears history. Use clearHistory for that.
              • +
              • API change: markText now + returns an object with clear and find + methods. Marked text is now more robust when edited.
              • +
              • Fix editing code with tabs in Internet Explorer.
              • +
              + +

              26-09-2011: Version 2.15:

              +

              Fix bug that snuck into 2.14: Clicking the + character that currently has the cursor didn't re-focus the + editor.

              + +

              26-09-2011: Version 2.14:

              + + + +

              23-08-2011: Version 2.13:

              + + +

              25-07-2011: Version 2.12:

              +
                +
              • Add a SPARQL mode.
              • +
              • Fix bug with cursor jumping around in an unfocused editor in IE.
              • +
              • Allow key and mouse events to bubble out of the editor. Ignore widget clicks.
              • +
              • Solve cursor flakiness after undo/redo.
              • +
              • Fix block-reindent ignoring the last few lines.
              • +
              • Fix parsing of multi-line attrs in XML mode.
              • +
              • Use innerHTML for HTML-escaping.
              • +
              • Some fixes to indentation in C-like mode.
              • +
              • Shrink horiz scrollbars when long lines removed.
              • +
              • Fix width feedback loop bug that caused the width of an inner DIV to shrink.
              • +
              + +

              04-07-2011: Version 2.11:

              +
                +
              • Add a Scheme mode.
              • +
              • Add a replace method to search cursors, for cursor-preserving replacements.
              • +
              • Make the C-like mode mode more customizable.
              • +
              • Update XML mode to spot mismatched tags.
              • +
              • Add getStateAfter API and compareState mode API methods for finer-grained mode magic.
              • +
              • Add a getScrollerElement API method to manipulate the scrolling DIV.
              • +
              • Fix drag-and-drop for Firefox.
              • +
              • Add a C# configuration for the C-like mode.
              • +
              • Add full-screen editing and mode-changing demos.
              • +
              + +

              07-06-2011: Version 2.1:

              +

              Add + a theme system + (demo). Note that this is not + backwards-compatible—you'll have to update your styles and + modes!

              + +

              07-06-2011: Version 2.02:

              +
                +
              • Add a Lua mode.
              • +
              • Fix reverse-searching for a regexp.
              • +
              • Empty lines can no longer break highlighting.
              • +
              • Rework scrolling model (the outer wrapper no longer does the scrolling).
              • +
              • Solve horizontal jittering on long lines.
              • +
              • Add runmode.js.
              • +
              • Immediately re-highlight text when typing.
              • +
              • Fix problem with 'sticking' horizontal scrollbar.
              • +
              + +

              26-05-2011: Version 2.01:

              +
                +
              • Add a Smalltalk mode.
              • +
              • Add a reStructuredText mode.
              • +
              • Add a Python mode.
              • +
              • Add a PL/SQL mode.
              • +
              • coordsChar now works
              • +
              • Fix a problem where onCursorActivity interfered with onChange.
              • +
              • Fix a number of scrolling and mouse-click-position glitches.
              • +
              • Pass information about the changed lines to onChange.
              • +
              • Support cmd-up/down on OS X.
              • +
              • Add triple-click line selection.
              • +
              • Don't handle shift when changing the selection through the API.
              • +
              • Support "nocursor" mode for readOnly option.
              • +
              • Add an onHighlightComplete option.
              • +
              • Fix the context menu for Firefox.
              • +
              + +

              28-03-2011: Version 2.0:

              +

              CodeMirror 2 is a complete rewrite that's + faster, smaller, simpler to use, and less dependent on browser + quirks. See this + and this + for more information.

              + +

              28-03-2011: Version 1.0:

              +
                +
              • Fix error when debug history overflows.
              • +
              • Refine handling of C# verbatim strings.
              • +
              • Fix some issues with JavaScript indentation.
              • +
              + +

              22-02-2011: Version 2.0 beta 2:

              +

              Somewhat more mature API, lots of bugs shaken out.

              + +

              17-02-2011: Version 0.94:

              +
                +
              • tabMode: "spaces" was modified slightly (now indents when something is selected).
              • +
              • Fixes a bug that would cause the selection code to break on some IE versions.
              • +
              • Disabling spell-check on WebKit browsers now works.
              • +
              + +

              08-02-2011: Version 2.0 beta 1:

              +

              CodeMirror 2 is a complete rewrite of + CodeMirror, no longer depending on an editable frame.

              + +

              19-01-2011: Version 0.93:

              +
                +
              • Added a Regular Expression parser.
              • +
              • Fixes to the PHP parser.
              • +
              • Support for regular expression in search/replace.
              • +
              • Add save method to instances created with fromTextArea.
              • +
              • Add support for MS T-SQL in the SQL parser.
              • +
              • Support use of CSS classes for highlighting brackets.
              • +
              • Fix yet another hang with line-numbering in hidden editors.
              • +
              + +

              17-12-2010: Version 0.92:

              +
                +
              • Make CodeMirror work in XHTML documents.
              • +
              • Fix bug in handling of backslashes in Python strings.
              • +
              • The styleNumbers option is now officially + supported and documented.
              • +
              • onLineNumberClick option added.
              • +
              • More consistent names onLoad and + onCursorActivity callbacks. Old names still work, but + are deprecated.
              • +
              • Add a Freemarker mode.
              • +
              + +

              11-11-2010: Version 0.91:

              +
                +
              • Adds support for Java.
              • +
              • Small additions to the PHP and SQL parsers.
              • +
              • Work around various Webkit issues.
              • +
              • Fix toTextArea to update the code in the textarea.
              • +
              • Add a noScriptCaching option (hack to ease development).
              • +
              • Make sub-modes of HTML mixed mode configurable.
              • +
              + +

              02-10-2010: Version 0.9:

              +
                +
              • Add support for searching backwards.
              • +
              • There are now parsers for Scheme, XQuery, and OmetaJS.
              • +
              • Makes height: "dynamic" more robust.
              • +
              • Fixes bug where paste did not work on OS X.
              • +
              • Add a enterMode and electricChars options to make indentation even more customizable.
              • +
              • Add firstLineNumber option.
              • +
              • Fix bad handling of @media rules by the CSS parser.
              • +
              • Take a new, more robust approach to working around the invisible-last-line bug in WebKit.
              • +
              + +

              22-07-2010: Version 0.8:

              +
                +
              • Add a cursorCoords method to find the screen + coordinates of the cursor.
              • +
              • A number of fixes and support for more syntax in the PHP parser.
              • +
              • Fix indentation problem with JSON-mode JS parser in Webkit.
              • +
              • Add a minification UI.
              • +
              • Support a height: dynamic mode, where the editor's + height will adjust to the size of its content.
              • +
              • Better support for IME input mode.
              • +
              • Fix JavaScript parser getting confused when seeing a no-argument + function call.
              • +
              • Have CSS parser see the difference between selectors and other + identifiers.
              • +
              • Fix scrolling bug when pasting in a horizontally-scrolled + editor.
              • +
              • Support toTextArea method in instances created with + fromTextArea.
              • +
              • Work around new Opera cursor bug that causes the cursor to jump + when pressing backspace at the end of a line.
              • +
              + +

              27-04-2010: Version + 0.67:

              +

              More consistent page-up/page-down behaviour + across browsers. Fix some issues with hidden editors looping forever + when line-numbers were enabled. Make PHP parser parse + "\\" correctly. Have jumpToLine work on + line handles, and add cursorLine function to fetch the + line handle where the cursor currently is. Add new + setStylesheet function to switch style-sheets in a + running editor.

              + +

              01-03-2010: Version + 0.66:

              +

              Adds removeLine method to API. + Introduces the PLSQL parser. + Marks XML errors by adding (rather than replacing) a CSS class, so + that they can be disabled by modifying their style. Fixes several + selection bugs, and a number of small glitches.

              + +

              12-11-2009: Version + 0.65:

              +

              Add support for having both line-wrapping and + line-numbers turned on, make paren-highlighting style customisable + (markParen and unmarkParen config + options), work around a selection bug that Opera + reintroduced in version 10.

              + +

              23-10-2009: Version + 0.64:

              +

              Solves some issues introduced by the + paste-handling changes from the previous release. Adds + setSpellcheck, setTextWrapping, + setIndentUnit, setUndoDepth, + setTabMode, and setLineNumbers to + customise a running editor. Introduces an SQL parser. Fixes a few small + problems in the Python + parser. And, as usual, add workarounds for various newly discovered + browser incompatibilities.

              + +

              31-08-2009: Version +0.63:

              +

              Overhaul of paste-handling (less fragile), fixes for several +serious IE8 issues (cursor jumping, end-of-document bugs) and a number +of small problems.

              + +

              30-05-2009: Version +0.62:

              +

              Introduces Python +and Lua parsers. Add +setParser (on-the-fly mode changing) and +clearHistory methods. Make parsing passes time-based +instead of lines-based (see the passTime option).

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/realworld.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/realworld.html new file mode 100644 index 0000000..d83554a --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/realworld.html @@ -0,0 +1,119 @@ + + + + + CodeMirror: Real-world uses + + + + + +

              { } CodeMirror

              + +
              + +
              +/* Real world uses,
              +   full list */
              +
              +
              + +

              Contact me if you'd like + your project to be added to this list.

              + + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/reporting.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/reporting.html new file mode 100644 index 0000000..a616512 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/reporting.html @@ -0,0 +1,60 @@ + + + + + CodeMirror: Reporting Bugs + + + + + + +

              { } CodeMirror

              + +
              + +
              +/* Reporting bugs
              +   effectively */
              +
              +
              + +
              + +

              So you found a problem in CodeMirror. By all means, report it! Bug +reports from users are the main drive behind improvements to +CodeMirror. But first, please read over these points:

              + +
                +
              1. CodeMirror is maintained by volunteers. They don't owe you + anything, so be polite. Reports with an indignant or belligerent + tone tend to be moved to the bottom of the pile.
              2. + +
              3. Include information about the browser in which the + problem occurred. Even if you tested several browsers, and + the problem occurred in all of them, mention this fact in the bug + report. Also include browser version numbers and the operating + system that you're on.
              4. + +
              5. Mention which release of CodeMirror you're using. Preferably, + try also with the current development snapshot, to ensure the + problem has not already been fixed.
              6. + +
              7. Mention very precisely what went wrong. "X is broken" is not a + good bug report. What did you expect to happen? What happened + instead? Describe the exact steps a maintainer has to take to make + the problem occur. We can not fix something that we can not + observe.
              8. + +
              9. If the problem can not be reproduced in any of the demos + included in the CodeMirror distribution, please provide an HTML + document that demonstrates the problem. The best way to do this is + to go to jsbin.com, enter + it there, press save, and include the resulting link in your bug + report.
              10. +
              + +
              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/upgrade_v2.2.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/upgrade_v2.2.html new file mode 100644 index 0000000..7e4d840 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/upgrade_v2.2.html @@ -0,0 +1,98 @@ + + + + + CodeMirror: Upgrading to v2.2 + + + + + +

              { } CodeMirror

              + +
              + +
              +/* Upgrading to
              +   v2.2 */
              +
              +
              + +
              + +

              There are a few things in the 2.2 release that require some care +when upgrading.

              + +

              No more default.css

              + +

              The default theme is now included +in codemirror.css, so +you do not have to included it separately anymore. (It was tiny, so +even if you're not using it, the extra data overhead is negligible.) + +

              Different key customization

              + +

              CodeMirror has moved to a system +where keymaps are used to +bind behavior to keys. This means custom +bindings are now possible.

              + +

              Three options that influenced key +behavior, tabMode, enterMode, +and smartHome, are no longer supported. Instead, you can +provide custom bindings to influence the way these keys act. This is +done through the +new extraKeys +option, which can hold an object mapping key names to functionality. A +simple example would be:

              + +
                extraKeys: {
              +    "Ctrl-S": function(instance) { saveText(instance.getValue()); },
              +    "Ctrl-/": "undo"
              +  }
              + +

              Keys can be mapped either to functions, which will be given the +editor instance as argument, or to strings, which are mapped through +functions through the CodeMirror.commands table, which +contains all the built-in editing commands, and can be inspected and +extended by external code.

              + +

              By default, the Home key is bound to +the "goLineStartSmart" command, which moves the cursor to +the first non-whitespace character on the line. You can set do this to +make it always go to the very start instead:

              + +
                extraKeys: {"Home": "goLineStart"}
              + +

              Similarly, Enter is bound +to "newlineAndIndent" by default. You can bind it to +something else to get different behavior. To disable special handling +completely and only get a newline character inserted, you can bind it +to false:

              + +
                extraKeys: {"Enter": false}
              + +

              The same works for Tab. If you don't want CodeMirror +to handle it, bind it to false. The default behaviour is +to indent the current line more ("indentMore" command), +and indent it less when shift is held ("indentLess"). +There are also "indentAuto" (smart indent) +and "insertTab" commands provided for alternate +behaviors. Or you can write your own handler function to do something +different altogether.

              + +

              Tabs

              + +

              Handling of tabs changed completely. The display width of tabs can +now be set with the tabSize option, and tabs can +be styled by setting CSS rules +for the cm-tab class.

              + +

              The default width for tabs is now 4, as opposed to the 8 that is +hard-wired into browsers. If you are relying on 8-space tabs, make +sure you explicitly set tabSize: 8 in your options.

              + +
              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/upgrade_v3.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/upgrade_v3.html new file mode 100644 index 0000000..7e8a6b6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/doc/upgrade_v3.html @@ -0,0 +1,227 @@ + + + + + CodeMirror: Upgrading to v3 + + + + + + + + + + + + + +

              { } CodeMirror

              + +
              + +
              +/* Upgrading to
              +   version 3 */
              +
              +
              + +
              + +

              Version 3 does not depart too much from 2.x API, and sites that use +CodeMirror in a very simple way might be able to upgrade without +trouble. But it does introduce a number of incompatibilities. Please +at least skim this text before upgrading.

              + +

              Note that version 3 drops full support for Internet +Explorer 7. The editor will mostly work on that browser, but +it'll be significantly glitchy.

              + +

              DOM structure

              + +

              This one is the most likely to cause problems. The internal +structure of the editor has changed quite a lot, mostly to implement a +new scrolling model.

              + +

              Editor height is now set on the outer wrapper element (CSS +class CodeMirror), not on the scroller element +(CodeMirror-scroll).

              + +

              Other nodes were moved, dropped, and added. If you have any code +that makes assumptions about the internal DOM structure of the editor, +you'll have to re-test it and probably update it to work with v3.

              + +

              See the styling section of the +manual for more information.

              + +

              Gutter model

              + +

              In CodeMirror 2.x, there was a single gutter, and line markers +created with setMarker would have to somehow coexist with +the line numbers (if present). Version 3 allows you to specify an +array of gutters, by class +name, +use setGutterMarker +to add or remove markers in individual gutters, and clear whole +gutters +with clearGutter. +Gutter markers are now specified as DOM nodes, rather than HTML +snippets.

              + +

              The gutters no longer horizontally scrolls along with the content. +The fixedGutter option was removed (since it is now the +only behavior).

              + +
              +<style>
              +  /* Define a gutter style */
              +  .note-gutter { width: 3em; background: cyan; }
              +</style>
              +<script>
              +  // Create an instance with two gutters -- line numbers and notes
              +  var cm = new CodeMirror(document.body, {
              +    gutters: ["note-gutter", "CodeMirror-linenumbers"],
              +    lineNumbers: true
              +  });
              +  // Add a note to line 0
              +  cm.setGutterMarker(0, "note-gutter", document.createTextNode("hi"));
              +</script>
              +
              + +

              Event handling

              + +

              Most of the onXYZ options have been removed. The same +effect is now obtained by calling +the on method with a string +identifying the event type. Multiple handlers can now be registered +(and individually unregistered) for an event, and objects such as line +handlers now also expose events. See the +full list here.

              + +

              (The onKeyEvent and onDragEvent options, +which act more as hooks than as event handlers, are still there in +their old form.)

              + +
              +cm.on("change", function(cm, change) {
              +  console.log("something changed! (" + change.origin + ")");
              +});
              +
              + +

              markText method arguments

              + +

              The markText method +(which has gained some interesting new features, such as creating +atomic and read-only spans, or replacing spans with widgets) no longer +takes the CSS class name as a separate argument, but makes it an +optional field in the options object instead.

              + +
              +// Style first ten lines, and forbid the cursor from entering them
              +cm.markText({line: 0, ch: 0}, {line: 10, ch: 0}, {
              +  className: "magic-text",
              +  inclusiveLeft: true,
              +  atomic: true
              +});
              +
              + +

              Line folding

              + +

              The interface for hiding lines has been +removed. markText can +now be used to do the same in a more flexible and powerful way.

              + +

              The folding script has been +updated to use the new interface, and should now be more robust.

              + +
              +// Fold a range, replacing it with the text "??"
              +var range = cm.markText({line: 4, ch: 2}, {line: 8, ch: 1}, {
              +  replacedWith: document.createTextNode("??"),
              +  // Auto-unfold when cursor moves into the range
              +  clearOnEnter: true
              +});
              +// Get notified when auto-unfolding
              +CodeMirror.on(range, "clear", function() {
              +  console.log("boom");
              +});
              +
              + +

              Line CSS classes

              + +

              The setLineClass method has been replaced +by addLineClass +and removeLineClass, +which allow more modular control over the classes attached to a line.

              + +
              +var marked = cm.addLineClass(10, "background", "highlighted-line");
              +setTimeout(function() {
              +  cm.removeLineClass(marked, "background", "highlighted-line");
              +});
              +
              + +

              Position properties

              + +

              All methods that take or return objects that represent screen +positions now use {left, top, bottom, right} properties +(not always all of them) instead of the {x, y, yBot} used +by some methods in v2.x.

              + +

              Affected methods +are cursorCoords, charCoords, coordsChar, +and getScrollInfo.

              + +

              Bracket matching no longer in core

              + +

              The matchBrackets +option is no longer defined in the core editor. +Load addon/edit/matchbrackets.js to enable it.

              + +

              Mode management

              + +

              The CodeMirror.listModes +and CodeMirror.listMIMEs functions, used for listing +defined modes, are gone. You are now encouraged to simply +inspect CodeMirror.modes (mapping mode names to mode +constructors) and CodeMirror.mimeModes (mapping MIME +strings to mode specs).

              + +

              New features

              + +

              Some more reasons to upgrade to version 3.

              + +
                +
              • Bi-directional text support. CodeMirror will now mostly do the + right thing when editing Arabic or Hebrew text.
              • +
              • Arbitrary line heights. Using fonts with different heights + inside the editor (whether off by one pixel or fifty) is now + supported and handled gracefully.
              • +
              • In-line widgets. See the demo + and the docs.
              • +
              • Defining custom options + with CodeMirror.defineOption.
              • +
              + +
              + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/index.html new file mode 100644 index 0000000..2f2ba05 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/index.html @@ -0,0 +1,480 @@ + + + + + CodeMirror + + + + + + +

              { } CodeMirror

              + +
              + +
              +/* In-browser code editing
              +   made bearable */
              +
              +
              + +
              + +

              CodeMirror is a JavaScript component that + provides a code editor in the browser. When a mode is available for + the language you are coding in, it will color your code, and + optionally help with indentation.

              + +

              A rich programming API and a CSS + theming system are available for customizing CodeMirror to fit your + application, and extending it with new functionality.

              + + + +

              Getting the code

              + +

              All of CodeMirror is released under a MIT-style license. To get it, you can download + the latest + release or the current development + snapshot as zip files. To create a custom minified script file, + you can use the compression API.

              + +

              We use git for version control. + The main repository can be fetched in this way:

              + +
              git clone http://marijnhaverbeke.nl/git/codemirror
              + +

              CodeMirror can also be found on GitHub at marijnh/CodeMirror. + If you plan to hack on the code and contribute patches, the best way + to do it is to create a GitHub fork, and send pull requests.

              + +

              Documentation

              + +

              The manual is your first stop for + learning how to use this library. It starts with a quick explanation + of how to use the editor, and then describes the API in detail.

              + +

              For those who want to learn more about the code, there is + a series of + posts on CodeMirror on my blog, and the + old overview of the editor + internals. + The source code + itself is, for the most part, also very readable.

              + +

              Support and bug reports

              + +

              Community discussion, questions, and informal bug reporting is + done on + the CodeMirror + Google group. There is a separate + group, CodeMirror-announce, + which is lower-volume, and is only used for major announcements—new + versions and such. These will be cross-posted to both groups, so you + don't need to subscribe to both.

              + +

              Though bug reports through e-mail are responded to, the preferred + way to report bugs is to use + the GitHub + issue tracker. Before reporting a + bug, read these pointers. Also, + the issue tracker is for bugs, not requests for help.

              + +

              When none of these seem fitting, you can + simply e-mail the maintainer + directly.

              + +

              Supported browsers

              + +

              The following desktop browsers are able to run CodeMirror:

              + +
                +
              • Firefox 3 or higher
              • +
              • Chrome, any version
              • +
              • Safari 5.2 or higher
              • +
              • Opera 9 or higher (with some key-handling problems on OS X)
              • +
              • Internet Explorer 8 or higher
                +
              • Internet Explorer 7 (standards mode) is usable, but buggy. It + has a z-index + bug that prevents CodeMirror from working properly.
              • +
              + +

              Note that CodeMirror is only supported in + standards mode. So not quirks mode, + but also not the quasi-standards mode that IE gives you + when you specify a transitional doctype. Simply using the + HTML5-style <!doctype html> is recommended. + +

              Mobile browsers mostly kind of work, but, because of limitations + and their fundamentally different UI assumptions, show a lot of + quirks that are hard to work around.

              + +

              Commercial support

              + +

              CodeMirror is developed and maintained by me, Marijn Haverbeke, + in my own time. If your company is getting value out of CodeMirror, + please consider purchasing a support contract.

              + +
                +
              • You'll be funding further work on CodeMirror.
              • +
              • You ensure that you get a quick response when you have a + problem, even when I am otherwise busy.
              • +
              + +

              CodeMirror support contracts exist in two + forms—basic at €100 per month, + and premium at €500 per + month. Contact me for further + information.

              + +
              + +
              + + Download the latest release + +

              Support CodeMirror

              + + + + + +

              Reading material

              + + + +

              Releases

              + +

              29-07-2013: Version 3.15:

              + + + +

              20-06-2013: Version 3.14:

              + + + +

              20-05-2013: Version 3.13:

              + + + +

              19-04-2013: Version 3.12:

              + + + +

              20-03-2013: Version 3.11:

              + + + +

              21-02-2013: Version 3.1:

              + + + + +

              25-01-2013: Version 3.02:

              + +

              Single-bugfix release. Fixes a problem that + prevents CodeMirror instances from being garbage-collected after + they become unused.

              + +

              21-01-2013: Version 3.01:

              + + + +

              21-01-2013: Version 2.38:

              + +

              Integrate some bugfixes, enhancements to the vim keymap, and new + modes + (D, Sass, APL) + from the v3 branch.

              + +

              20-12-2012: Version 2.37:

              + +
                +
              • New mode: SQL (will replace plsql and mysql modes).
              • +
              • Further work on the new VIM mode.
              • +
              • Fix Cmd/Ctrl keys on recent Operas on OS X.
              • +
              • Full list of patches.
              • +
              + +

              10-12-2012: Version 3.0:

              + +

              New major version. Only + partially backwards-compatible. See + the upgrading guide for more + information. Changes since release candidate 2:

              + +
                +
              • Rewritten VIM mode.
              • +
              • Fix a few minor scrolling and sizing issues.
              • +
              • Work around Safari segfault when dragging.
              • +
              • Full list of patches.
              • +
              + +

              Older releases...

              + +
              + +
               
              + +
              + + +
              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/keymap/emacs.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/keymap/emacs.js new file mode 100644 index 0000000..8727121 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/keymap/emacs.js @@ -0,0 +1,387 @@ +(function() { + "use strict"; + + var Pos = CodeMirror.Pos; + function posEq(a, b) { return a.line == b.line && a.ch == b.ch; } + + // Kill 'ring' + + var killRing = []; + function addToRing(str) { + killRing.push(str); + if (killRing.length > 50) killRing.shift(); + } + function growRingTop(str) { + if (!killRing.length) return addToRing(str); + killRing[killRing.length - 1] += str; + } + function getFromRing(n) { return killRing[killRing.length - (n ? Math.min(n, 1) : 1)] || ""; } + function popFromRing() { if (killRing.length > 1) killRing.pop(); return getFromRing(); } + + var lastKill = null; + + function kill(cm, from, to, mayGrow, text) { + if (text == null) text = cm.getRange(from, to); + + if (mayGrow && lastKill && lastKill.cm == cm && posEq(from, lastKill.pos) && cm.isClean(lastKill.gen)) + growRingTop(text); + else + addToRing(text); + cm.replaceRange("", from, to, "+delete"); + + if (mayGrow) lastKill = {cm: cm, pos: from, gen: cm.changeGeneration()}; + else lastKill = null; + } + + // Boundaries of various units + + function byChar(cm, pos, dir) { + return cm.findPosH(pos, dir, "char", true); + } + + function byWord(cm, pos, dir) { + return cm.findPosH(pos, dir, "word", true); + } + + function byLine(cm, pos, dir) { + return cm.findPosV(pos, dir, "line", cm.doc.sel.goalColumn); + } + + function byPage(cm, pos, dir) { + return cm.findPosV(pos, dir, "page", cm.doc.sel.goalColumn); + } + + function byParagraph(cm, pos, dir) { + var no = pos.line, line = cm.getLine(no); + var sawText = /\S/.test(dir < 0 ? line.slice(0, pos.ch) : line.slice(pos.ch)); + var fst = cm.firstLine(), lst = cm.lastLine(); + for (;;) { + no += dir; + if (no < fst || no > lst) + return cm.clipPos(Pos(no - dir, dir < 0 ? 0 : null)); + line = cm.getLine(no); + var hasText = /\S/.test(line); + if (hasText) sawText = true; + else if (sawText) return Pos(no, 0); + } + } + + function bySentence(cm, pos, dir) { + var line = pos.line, ch = pos.ch; + var text = cm.getLine(pos.line), sawWord = false; + for (;;) { + var next = text.charAt(ch + (dir < 0 ? -1 : 0)); + if (!next) { // End/beginning of line reached + if (line == (dir < 0 ? cm.firstLine() : cm.lastLine())) return Pos(line, ch); + text = cm.getLine(line + dir); + if (!/\S/.test(text)) return Pos(line, ch); + line += dir; + ch = dir < 0 ? text.length : 0; + continue; + } + if (sawWord && /[!?.]/.test(next)) return Pos(line, ch + (dir > 0 ? 1 : 0)); + if (!sawWord) sawWord = /\w/.test(next); + ch += dir; + } + } + + function byExpr(cm, pos, dir) { + var wrap; + if (cm.findMatchingBracket && (wrap = cm.findMatchingBracket(pos, true)) + && wrap.match && (wrap.forward ? 1 : -1) == dir) + return dir > 0 ? Pos(wrap.to.line, wrap.to.ch + 1) : wrap.to; + + for (var first = true;; first = false) { + var token = cm.getTokenAt(pos); + var after = Pos(pos.line, dir < 0 ? token.start : token.end); + if (first && dir > 0 && token.end == pos.ch || !/\w/.test(token.string)) { + var newPos = cm.findPosH(after, dir, "char"); + if (posEq(after, newPos)) return pos; + else pos = newPos; + } else { + return after; + } + } + } + + // Prefixes (only crudely supported) + + function getPrefix(cm, precise) { + var digits = cm.state.emacsPrefix; + if (!digits) return precise ? null : 1; + clearPrefix(cm); + return digits == "-" ? -1 : Number(digits); + } + + function repeated(cmd) { + var f = typeof cmd == "string" ? function(cm) { cm.execCommand(cmd); } : cmd; + return function(cm) { + var prefix = getPrefix(cm); + f(cm); + for (var i = 1; i < prefix; ++i) f(cm); + }; + } + + function findEnd(cm, by, dir) { + var pos = cm.getCursor(), prefix = getPrefix(cm); + if (prefix < 0) { dir = -dir; prefix = -prefix; } + for (var i = 0; i < prefix; ++i) { + var newPos = by(cm, pos, dir); + if (posEq(newPos, pos)) break; + pos = newPos; + } + return pos; + } + + function move(by, dir) { + var f = function(cm) { + cm.extendSelection(findEnd(cm, by, dir)); + }; + f.motion = true; + return f; + } + + function killTo(cm, by, dir) { + kill(cm, cm.getCursor(), findEnd(cm, by, dir), true); + } + + function addPrefix(cm, digit) { + if (cm.state.emacsPrefix) { + if (digit != "-") cm.state.emacsPrefix += digit; + return; + } + // Not active yet + cm.state.emacsPrefix = digit; + cm.on("keyHandled", maybeClearPrefix); + cm.on("inputRead", maybeDuplicateInput); + } + + var prefixPreservingKeys = {"Alt-G": true, "Ctrl-X": true, "Ctrl-Q": true, "Ctrl-U": true}; + + function maybeClearPrefix(cm, arg) { + if (!cm.state.emacsPrefixMap && !prefixPreservingKeys.hasOwnProperty(arg)) + clearPrefix(cm); + } + + function clearPrefix(cm) { + cm.state.emacsPrefix = null; + cm.off("keyHandled", maybeClearPrefix); + cm.off("inputRead", maybeDuplicateInput); + } + + function maybeDuplicateInput(cm, event) { + var dup = getPrefix(cm); + if (dup > 1 && event.origin == "+input") { + var one = event.text.join("\n"), txt = ""; + for (var i = 1; i < dup; ++i) txt += one; + cm.replaceSelection(txt, "end", "+input"); + } + } + + function addPrefixMap(cm) { + cm.state.emacsPrefixMap = true; + cm.addKeyMap(prefixMap); + cm.on("keyHandled", maybeRemovePrefixMap); + cm.on("inputRead", maybeRemovePrefixMap); + } + + function maybeRemovePrefixMap(cm, arg) { + if (typeof arg == "string" && (/^\d$/.test(arg) || arg == "Ctrl-U")) return; + cm.removeKeyMap(prefixMap); + cm.state.emacsPrefixMap = false; + cm.off("keyHandled", maybeRemovePrefixMap); + cm.off("inputRead", maybeRemovePrefixMap); + } + + // Utilities + + function setMark(cm) { + cm.setCursor(cm.getCursor()); + cm.setExtending(true); + cm.on("change", function() { cm.setExtending(false); }); + } + + function getInput(cm, msg, f) { + if (cm.openDialog) + cm.openDialog(msg + ": ", f, {bottom: true}); + else + f(prompt(msg, "")); + } + + function operateOnWord(cm, op) { + var start = cm.getCursor(), end = cm.findPosH(start, 1, "word"); + cm.replaceRange(op(cm.getRange(start, end)), start, end); + cm.setCursor(end); + } + + function toEnclosingExpr(cm) { + var pos = cm.getCursor(), line = pos.line, ch = pos.ch; + var stack = []; + while (line >= cm.firstLine()) { + var text = cm.getLine(line); + for (var i = ch == null ? text.length : ch; i > 0;) { + var ch = text.charAt(--i); + if (ch == ")") + stack.push("("); + else if (ch == "]") + stack.push("["); + else if (ch == "}") + stack.push("{"); + else if (/[\(\{\[]/.test(ch) && (!stack.length || stack.pop() != ch)) + return cm.extendSelection(Pos(line, i)); + } + --line; ch = null; + } + } + + // Actual keymap + + var keyMap = CodeMirror.keyMap.emacs = { + "Ctrl-W": function(cm) {kill(cm, cm.getCursor("start"), cm.getCursor("end"));}, + "Ctrl-K": repeated(function(cm) { + var start = cm.getCursor(), end = cm.clipPos(Pos(start.line)); + var text = cm.getRange(start, end); + if (!/\S/.test(text)) { + text += "\n"; + end = Pos(start.line + 1, 0); + } + kill(cm, start, end, true, text); + }), + "Alt-W": function(cm) { + addToRing(cm.getSelection()); + }, + "Ctrl-Y": function(cm) { + var start = cm.getCursor(); + cm.replaceRange(getFromRing(getPrefix(cm)), start, start, "paste"); + cm.setSelection(start, cm.getCursor()); + }, + "Alt-Y": function(cm) {cm.replaceSelection(popFromRing());}, + + "Ctrl-Space": setMark, "Ctrl-Shift-2": setMark, + + "Ctrl-F": move(byChar, 1), "Ctrl-B": move(byChar, -1), + "Right": move(byChar, 1), "Left": move(byChar, -1), + "Ctrl-D": function(cm) { killTo(cm, byChar, 1); }, + "Delete": function(cm) { killTo(cm, byChar, 1); }, + "Ctrl-H": function(cm) { killTo(cm, byChar, -1); }, + "Backspace": function(cm) { killTo(cm, byChar, -1); }, + + "Alt-F": move(byWord, 1), "Alt-B": move(byWord, -1), + "Alt-D": function(cm) { killTo(cm, byWord, 1); }, + "Alt-Backspace": function(cm) { killTo(cm, byWord, -1); }, + + "Ctrl-N": move(byLine, 1), "Ctrl-P": move(byLine, -1), + "Down": move(byLine, 1), "Up": move(byLine, -1), + "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "End": "goLineEnd", "Home": "goLineStart", + + "Alt-V": move(byPage, -1), "Ctrl-V": move(byPage, 1), + "PageUp": move(byPage, -1), "PageDown": move(byPage, 1), + + "Ctrl-Up": move(byParagraph, -1), "Ctrl-Down": move(byParagraph, 1), + + "Alt-A": move(bySentence, -1), "Alt-E": move(bySentence, 1), + "Alt-K": function(cm) { killTo(cm, bySentence, 1); }, + + "Ctrl-Alt-K": function(cm) { killTo(cm, byExpr, 1); }, + "Ctrl-Alt-Backspace": function(cm) { killTo(cm, byExpr, -1); }, + "Ctrl-Alt-F": move(byExpr, 1), "Ctrl-Alt-B": move(byExpr, -1), + + "Shift-Ctrl-Alt-2": function(cm) { + cm.setSelection(findEnd(cm, byExpr, 1), cm.getCursor()); + }, + "Ctrl-Alt-T": function(cm) { + var leftStart = byExpr(cm, cm.getCursor(), -1), leftEnd = byExpr(cm, leftStart, 1); + var rightEnd = byExpr(cm, leftEnd, 1), rightStart = byExpr(cm, rightEnd, -1); + cm.replaceRange(cm.getRange(rightStart, rightEnd) + cm.getRange(leftEnd, rightStart) + + cm.getRange(leftStart, leftEnd), leftStart, rightEnd); + }, + "Ctrl-Alt-U": repeated(toEnclosingExpr), + + "Alt-Space": function(cm) { + var pos = cm.getCursor(), from = pos.ch, to = pos.ch, text = cm.getLine(pos.line); + while (from && /\s/.test(text.charAt(from - 1))) --from; + while (to < text.length && /\s/.test(text.charAt(to))) ++to; + cm.replaceRange(" ", Pos(pos.line, from), Pos(pos.line, to)); + }, + "Ctrl-O": repeated(function(cm) { cm.replaceSelection("\n", "start"); }), + "Ctrl-T": repeated(function(cm) { + var pos = cm.getCursor(); + if (pos.ch < cm.getLine(pos.line).length) pos = Pos(pos.line, pos.ch + 1); + var from = cm.findPosH(pos, -2, "char"); + var range = cm.getRange(from, pos); + if (range.length != 2) return; + cm.setSelection(from, pos); + cm.replaceSelection(range.charAt(1) + range.charAt(0), "end"); + }), + + "Alt-C": repeated(function(cm) { + operateOnWord(cm, function(w) { + var letter = w.search(/\w/); + if (letter == -1) return w; + return w.slice(0, letter) + w.charAt(letter).toUpperCase() + w.slice(letter + 1).toLowerCase(); + }); + }), + "Alt-U": repeated(function(cm) { + operateOnWord(cm, function(w) { return w.toUpperCase(); }); + }), + "Alt-L": repeated(function(cm) { + operateOnWord(cm, function(w) { return w.toLowerCase(); }); + }), + + "Alt-;": "toggleComment", + + "Ctrl-/": repeated("undo"), "Shift-Ctrl--": repeated("undo"), + "Ctrl-Z": repeated("undo"), "Cmd-Z": repeated("undo"), + "Shift-Alt-,": "goDocStart", "Shift-Alt-.": "goDocEnd", + "Ctrl-S": "findNext", "Ctrl-R": "findPrev", "Ctrl-G": "clearSearch", "Shift-Alt-5": "replace", + "Alt-/": "autocomplete", + "Ctrl-J": "newlineAndIndent", "Enter": false, "Tab": "indentAuto", + + "Alt-G": function(cm) {cm.setOption("keyMap", "emacs-Alt-G");}, + "Ctrl-X": function(cm) {cm.setOption("keyMap", "emacs-Ctrl-X");}, + "Ctrl-Q": function(cm) {cm.setOption("keyMap", "emacs-Ctrl-Q");}, + "Ctrl-U": addPrefixMap + }; + + CodeMirror.keyMap["emacs-Ctrl-X"] = { + "Tab": function(cm) { + cm.indentSelection(getPrefix(cm, true) || cm.getOption("indentUnit")); + }, + "Ctrl-X": function(cm) { + cm.setSelection(cm.getCursor("head"), cm.getCursor("anchor")); + }, + + "Ctrl-S": "save", "Ctrl-W": "save", "S": "saveAll", "F": "open", "U": repeated("undo"), "K": "close", + "Delete": function(cm) { kill(cm, cm.getCursor(), sentenceEnd(cm, 1), true); }, + auto: "emacs", nofallthrough: true, disableInput: true + }; + + CodeMirror.keyMap["emacs-Alt-G"] = { + "G": function(cm) { + var prefix = getPrefix(cm, true); + if (prefix != null && prefix > 0) return cm.setCursor(prefix - 1); + + getInput(cm, "Goto line", function(str) { + var num; + if (str && !isNaN(num = Number(str)) && num == num|0 && num > 0) + cm.setCursor(num - 1); + }); + }, + auto: "emacs", nofallthrough: true, disableInput: true + }; + + CodeMirror.keyMap["emacs-Ctrl-Q"] = { + "Tab": repeated("insertTab"), + auto: "emacs", nofallthrough: true + }; + + var prefixMap = {"Ctrl-G": clearPrefix}; + function regPrefix(d) { + prefixMap[d] = function(cm) { addPrefix(cm, d); }; + keyMap["Ctrl-" + d] = function(cm) { addPrefix(cm, d); }; + prefixPreservingKeys["Ctrl-" + d] = true; + } + for (var i = 0; i < 10; ++i) regPrefix(String(i)); + regPrefix("-"); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/keymap/extra.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/keymap/extra.js new file mode 100644 index 0000000..18dd5a9 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/keymap/extra.js @@ -0,0 +1,43 @@ +// A number of additional default bindings that are too obscure to +// include in the core codemirror.js file. + +(function() { + "use strict"; + + var Pos = CodeMirror.Pos; + + function moveLines(cm, start, end, dist) { + if (!dist || start > end) return 0; + + var from = cm.clipPos(Pos(start, 0)), to = cm.clipPos(Pos(end)); + var text = cm.getRange(from, to); + + if (start <= cm.firstLine()) + cm.replaceRange("", from, Pos(to.line + 1, 0)); + else + cm.replaceRange("", Pos(from.line - 1), to); + var target = from.line + dist; + if (target <= cm.firstLine()) { + cm.replaceRange(text + "\n", Pos(target, 0)); + return cm.firstLine() - from.line; + } else { + var targetPos = cm.clipPos(Pos(target - 1)); + cm.replaceRange("\n" + text, targetPos); + return targetPos.line + 1 - from.line; + } + } + + function moveSelectedLines(cm, dist) { + var head = cm.getCursor("head"), anchor = cm.getCursor("anchor"); + cm.operation(function() { + var moved = moveLines(cm, Math.min(head.line, anchor.line), Math.max(head.line, anchor.line), dist); + cm.setSelection(Pos(anchor.line + moved, anchor.ch), Pos(head.line + moved, head.ch)); + }); + } + + CodeMirror.commands.moveLinesUp = function(cm) { moveSelectedLines(cm, -1); }; + CodeMirror.commands.moveLinesDown = function(cm) { moveSelectedLines(cm, 1); }; + + CodeMirror.keyMap["default"]["Alt-Up"] = "moveLinesUp"; + CodeMirror.keyMap["default"]["Alt-Down"] = "moveLinesDown"; +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/keymap/vim.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/keymap/vim.js new file mode 100644 index 0000000..8db2767 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/keymap/vim.js @@ -0,0 +1,3648 @@ +/** + * Supported keybindings: + * + * Motion: + * h, j, k, l + * gj, gk + * e, E, w, W, b, B, ge, gE + * f, F, t, T + * $, ^, 0, -, +, _ + * gg, G + * % + * ', ` + * + * Operator: + * d, y, c + * dd, yy, cc + * g~, g~g~ + * >, <, >>, << + * + * Operator-Motion: + * x, X, D, Y, C, ~ + * + * Action: + * a, i, s, A, I, S, o, O + * zz, z., z, zt, zb, z- + * J + * u, Ctrl-r + * m + * r + * + * Modes: + * ESC - leave insert mode, visual mode, and clear input state. + * Ctrl-[, Ctrl-c - same as ESC. + * + * Registers: unamed, -, a-z, A-Z, 0-9 + * (Does not respect the special case for number registers when delete + * operator is made with these commands: %, (, ), , /, ?, n, N, {, } ) + * TODO: Implement the remaining registers. + * Marks: a-z, A-Z, and 0-9 + * TODO: Implement the remaining special marks. They have more complex + * behavior. + * + * Code structure: + * 1. Default keymap + * 2. Variable declarations and short basic helpers + * 3. Instance (External API) implementation + * 4. Internal state tracking objects (input state, counter) implementation + * and instanstiation + * 5. Key handler (the main command dispatcher) implementation + * 6. Motion, operator, and action implementations + * 7. Helper functions for the key handler, motions, operators, and actions + * 8. Set up Vim to work as a keymap for CodeMirror. + */ + +(function() { + 'use strict'; + + var defaultKeymap = [ + // Key to key mapping. This goes first to make it possible to override + // existing mappings. + { keys: [''], type: 'keyToKey', toKeys: ['h'] }, + { keys: [''], type: 'keyToKey', toKeys: ['l'] }, + { keys: [''], type: 'keyToKey', toKeys: ['k'] }, + { keys: [''], type: 'keyToKey', toKeys: ['j'] }, + { keys: [''], type: 'keyToKey', toKeys: ['l'] }, + { keys: [''], type: 'keyToKey', toKeys: ['h'] }, + { keys: [''], type: 'keyToKey', toKeys: ['W'] }, + { keys: [''], type: 'keyToKey', toKeys: ['B'] }, + { keys: [''], type: 'keyToKey', toKeys: ['w'] }, + { keys: [''], type: 'keyToKey', toKeys: ['b'] }, + { keys: [''], type: 'keyToKey', toKeys: ['j'] }, + { keys: [''], type: 'keyToKey', toKeys: ['k'] }, + { keys: ['C-['], type: 'keyToKey', toKeys: [''] }, + { keys: [''], type: 'keyToKey', toKeys: [''] }, + { keys: ['s'], type: 'keyToKey', toKeys: ['c', 'l'] }, + { keys: ['S'], type: 'keyToKey', toKeys: ['c', 'c'] }, + { keys: [''], type: 'keyToKey', toKeys: ['0'] }, + { keys: [''], type: 'keyToKey', toKeys: ['$'] }, + { keys: [''], type: 'keyToKey', toKeys: [''] }, + { keys: [''], type: 'keyToKey', toKeys: [''] }, + // Motions + { keys: ['H'], type: 'motion', + motion: 'moveToTopLine', + motionArgs: { linewise: true, toJumplist: true }}, + { keys: ['M'], type: 'motion', + motion: 'moveToMiddleLine', + motionArgs: { linewise: true, toJumplist: true }}, + { keys: ['L'], type: 'motion', + motion: 'moveToBottomLine', + motionArgs: { linewise: true, toJumplist: true }}, + { keys: ['h'], type: 'motion', + motion: 'moveByCharacters', + motionArgs: { forward: false }}, + { keys: ['l'], type: 'motion', + motion: 'moveByCharacters', + motionArgs: { forward: true }}, + { keys: ['j'], type: 'motion', + motion: 'moveByLines', + motionArgs: { forward: true, linewise: true }}, + { keys: ['k'], type: 'motion', + motion: 'moveByLines', + motionArgs: { forward: false, linewise: true }}, + { keys: ['g','j'], type: 'motion', + motion: 'moveByDisplayLines', + motionArgs: { forward: true }}, + { keys: ['g','k'], type: 'motion', + motion: 'moveByDisplayLines', + motionArgs: { forward: false }}, + { keys: ['w'], type: 'motion', + motion: 'moveByWords', + motionArgs: { forward: true, wordEnd: false }}, + { keys: ['W'], type: 'motion', + motion: 'moveByWords', + motionArgs: { forward: true, wordEnd: false, bigWord: true }}, + { keys: ['e'], type: 'motion', + motion: 'moveByWords', + motionArgs: { forward: true, wordEnd: true, inclusive: true }}, + { keys: ['E'], type: 'motion', + motion: 'moveByWords', + motionArgs: { forward: true, wordEnd: true, bigWord: true, + inclusive: true }}, + { keys: ['b'], type: 'motion', + motion: 'moveByWords', + motionArgs: { forward: false, wordEnd: false }}, + { keys: ['B'], type: 'motion', + motion: 'moveByWords', + motionArgs: { forward: false, wordEnd: false, bigWord: true }}, + { keys: ['g', 'e'], type: 'motion', + motion: 'moveByWords', + motionArgs: { forward: false, wordEnd: true, inclusive: true }}, + { keys: ['g', 'E'], type: 'motion', + motion: 'moveByWords', + motionArgs: { forward: false, wordEnd: true, bigWord: true, + inclusive: true }}, + { keys: ['{'], type: 'motion', motion: 'moveByParagraph', + motionArgs: { forward: false, toJumplist: true }}, + { keys: ['}'], type: 'motion', motion: 'moveByParagraph', + motionArgs: { forward: true, toJumplist: true }}, + { keys: [''], type: 'motion', + motion: 'moveByPage', motionArgs: { forward: true }}, + { keys: [''], type: 'motion', + motion: 'moveByPage', motionArgs: { forward: false }}, + { keys: [''], type: 'motion', + motion: 'moveByScroll', + motionArgs: { forward: true, explicitRepeat: true }}, + { keys: [''], type: 'motion', + motion: 'moveByScroll', + motionArgs: { forward: false, explicitRepeat: true }}, + { keys: ['g', 'g'], type: 'motion', + motion: 'moveToLineOrEdgeOfDocument', + motionArgs: { forward: false, explicitRepeat: true, linewise: true, toJumplist: true }}, + { keys: ['G'], type: 'motion', + motion: 'moveToLineOrEdgeOfDocument', + motionArgs: { forward: true, explicitRepeat: true, linewise: true, toJumplist: true }}, + { keys: ['0'], type: 'motion', motion: 'moveToStartOfLine' }, + { keys: ['^'], type: 'motion', + motion: 'moveToFirstNonWhiteSpaceCharacter' }, + { keys: ['+'], type: 'motion', + motion: 'moveByLines', + motionArgs: { forward: true, toFirstChar:true }}, + { keys: ['-'], type: 'motion', + motion: 'moveByLines', + motionArgs: { forward: false, toFirstChar:true }}, + { keys: ['_'], type: 'motion', + motion: 'moveByLines', + motionArgs: { forward: true, toFirstChar:true, repeatOffset:-1 }}, + { keys: ['$'], type: 'motion', + motion: 'moveToEol', + motionArgs: { inclusive: true }}, + { keys: ['%'], type: 'motion', + motion: 'moveToMatchedSymbol', + motionArgs: { inclusive: true, toJumplist: true }}, + { keys: ['f', 'character'], type: 'motion', + motion: 'moveToCharacter', + motionArgs: { forward: true , inclusive: true }}, + { keys: ['F', 'character'], type: 'motion', + motion: 'moveToCharacter', + motionArgs: { forward: false }}, + { keys: ['t', 'character'], type: 'motion', + motion: 'moveTillCharacter', + motionArgs: { forward: true, inclusive: true }}, + { keys: ['T', 'character'], type: 'motion', + motion: 'moveTillCharacter', + motionArgs: { forward: false }}, + { keys: [';'], type: 'motion', motion: 'repeatLastCharacterSearch', + motionArgs: { forward: true }}, + { keys: [','], type: 'motion', motion: 'repeatLastCharacterSearch', + motionArgs: { forward: false }}, + { keys: ['\'', 'character'], type: 'motion', motion: 'goToMark', + motionArgs: {toJumplist: true}}, + { keys: ['`', 'character'], type: 'motion', motion: 'goToMark', + motionArgs: {toJumplist: true}}, + { keys: [']', '`'], type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true } }, + { keys: ['[', '`'], type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false } }, + { keys: [']', '\''], type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true, linewise: true } }, + { keys: ['[', '\''], type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false, linewise: true } }, + { keys: [']', 'character'], type: 'motion', + motion: 'moveToSymbol', + motionArgs: { forward: true, toJumplist: true}}, + { keys: ['[', 'character'], type: 'motion', + motion: 'moveToSymbol', + motionArgs: { forward: false, toJumplist: true}}, + { keys: ['|'], type: 'motion', + motion: 'moveToColumn', + motionArgs: { }}, + // Operators + { keys: ['d'], type: 'operator', operator: 'delete' }, + { keys: ['y'], type: 'operator', operator: 'yank' }, + { keys: ['c'], type: 'operator', operator: 'change' }, + { keys: ['>'], type: 'operator', operator: 'indent', + operatorArgs: { indentRight: true }}, + { keys: ['<'], type: 'operator', operator: 'indent', + operatorArgs: { indentRight: false }}, + { keys: ['g', '~'], type: 'operator', operator: 'swapcase' }, + { keys: ['n'], type: 'motion', motion: 'findNext', + motionArgs: { forward: true, toJumplist: true }}, + { keys: ['N'], type: 'motion', motion: 'findNext', + motionArgs: { forward: false, toJumplist: true }}, + // Operator-Motion dual commands + { keys: ['x'], type: 'operatorMotion', operator: 'delete', + motion: 'moveByCharacters', motionArgs: { forward: true }, + operatorMotionArgs: { visualLine: false }}, + { keys: ['X'], type: 'operatorMotion', operator: 'delete', + motion: 'moveByCharacters', motionArgs: { forward: false }, + operatorMotionArgs: { visualLine: true }}, + { keys: ['D'], type: 'operatorMotion', operator: 'delete', + motion: 'moveToEol', motionArgs: { inclusive: true }, + operatorMotionArgs: { visualLine: true }}, + { keys: ['Y'], type: 'operatorMotion', operator: 'yank', + motion: 'moveToEol', motionArgs: { inclusive: true }, + operatorMotionArgs: { visualLine: true }}, + { keys: ['C'], type: 'operatorMotion', + operator: 'change', + motion: 'moveToEol', motionArgs: { inclusive: true }, + operatorMotionArgs: { visualLine: true }}, + { keys: ['~'], type: 'operatorMotion', + operator: 'swapcase', operatorArgs: { shouldMoveCursor: true }, + motion: 'moveByCharacters', motionArgs: { forward: true }}, + // Actions + { keys: [''], type: 'action', action: 'jumpListWalk', + actionArgs: { forward: true }}, + { keys: [''], type: 'action', action: 'jumpListWalk', + actionArgs: { forward: false }}, + { keys: ['a'], type: 'action', action: 'enterInsertMode', isEdit: true, + actionArgs: { insertAt: 'charAfter' }}, + { keys: ['A'], type: 'action', action: 'enterInsertMode', isEdit: true, + actionArgs: { insertAt: 'eol' }}, + { keys: ['i'], type: 'action', action: 'enterInsertMode', isEdit: true, + actionArgs: { insertAt: 'inplace' }}, + { keys: ['I'], type: 'action', action: 'enterInsertMode', isEdit: true, + actionArgs: { insertAt: 'firstNonBlank' }}, + { keys: ['o'], type: 'action', action: 'newLineAndEnterInsertMode', + isEdit: true, interlaceInsertRepeat: true, + actionArgs: { after: true }}, + { keys: ['O'], type: 'action', action: 'newLineAndEnterInsertMode', + isEdit: true, interlaceInsertRepeat: true, + actionArgs: { after: false }}, + { keys: ['v'], type: 'action', action: 'toggleVisualMode' }, + { keys: ['V'], type: 'action', action: 'toggleVisualMode', + actionArgs: { linewise: true }}, + { keys: ['J'], type: 'action', action: 'joinLines', isEdit: true }, + { keys: ['p'], type: 'action', action: 'paste', isEdit: true, + actionArgs: { after: true, isEdit: true }}, + { keys: ['P'], type: 'action', action: 'paste', isEdit: true, + actionArgs: { after: false, isEdit: true }}, + { keys: ['r', 'character'], type: 'action', action: 'replace', isEdit: true }, + { keys: ['@', 'character'], type: 'action', action: 'replayMacro' }, + { keys: ['q', 'character'], type: 'action', action: 'enterMacroRecordMode' }, + // Handle Replace-mode as a special case of insert mode. + { keys: ['R'], type: 'action', action: 'enterInsertMode', isEdit: true, + actionArgs: { replace: true }}, + { keys: ['u'], type: 'action', action: 'undo' }, + { keys: [''], type: 'action', action: 'redo' }, + { keys: ['m', 'character'], type: 'action', action: 'setMark' }, + { keys: ['"', 'character'], type: 'action', action: 'setRegister' }, + { keys: ['z', 'z'], type: 'action', action: 'scrollToCursor', + actionArgs: { position: 'center' }}, + { keys: ['z', '.'], type: 'action', action: 'scrollToCursor', + actionArgs: { position: 'center' }, + motion: 'moveToFirstNonWhiteSpaceCharacter' }, + { keys: ['z', 't'], type: 'action', action: 'scrollToCursor', + actionArgs: { position: 'top' }}, + { keys: ['z', ''], type: 'action', action: 'scrollToCursor', + actionArgs: { position: 'top' }, + motion: 'moveToFirstNonWhiteSpaceCharacter' }, + { keys: ['z', '-'], type: 'action', action: 'scrollToCursor', + actionArgs: { position: 'bottom' }}, + { keys: ['z', 'b'], type: 'action', action: 'scrollToCursor', + actionArgs: { position: 'bottom' }, + motion: 'moveToFirstNonWhiteSpaceCharacter' }, + { keys: ['.'], type: 'action', action: 'repeatLastEdit' }, + { keys: [''], type: 'action', action: 'incrementNumberToken', + isEdit: true, + actionArgs: {increase: true, backtrack: false}}, + { keys: [''], type: 'action', action: 'incrementNumberToken', + isEdit: true, + actionArgs: {increase: false, backtrack: false}}, + // Text object motions + { keys: ['a', 'character'], type: 'motion', + motion: 'textObjectManipulation' }, + { keys: ['i', 'character'], type: 'motion', + motion: 'textObjectManipulation', + motionArgs: { textObjectInner: true }}, + // Search + { keys: ['/'], type: 'search', + searchArgs: { forward: true, querySrc: 'prompt', toJumplist: true }}, + { keys: ['?'], type: 'search', + searchArgs: { forward: false, querySrc: 'prompt', toJumplist: true }}, + { keys: ['*'], type: 'search', + searchArgs: { forward: true, querySrc: 'wordUnderCursor', toJumplist: true }}, + { keys: ['#'], type: 'search', + searchArgs: { forward: false, querySrc: 'wordUnderCursor', toJumplist: true }}, + // Ex command + { keys: [':'], type: 'ex' } + ]; + + var Vim = function() { + CodeMirror.defineOption('vimMode', false, function(cm, val) { + if (val) { + cm.setOption('keyMap', 'vim'); + cm.on('beforeSelectionChange', beforeSelectionChange); + maybeInitVimState(cm); + } else if (cm.state.vim) { + cm.setOption('keyMap', 'default'); + cm.off('beforeSelectionChange', beforeSelectionChange); + cm.state.vim = null; + } + }); + function beforeSelectionChange(cm, cur) { + var vim = cm.state.vim; + if (vim.insertMode || vim.exMode) return; + + var head = cur.head; + if (head.ch && head.ch == cm.doc.getLine(head.line).length) { + head.ch--; + } + } + + var numberRegex = /[\d]/; + var wordRegexp = [(/\w/), (/[^\w\s]/)], bigWordRegexp = [(/\S/)]; + function makeKeyRange(start, size) { + var keys = []; + for (var i = start; i < start + size; i++) { + keys.push(String.fromCharCode(i)); + } + return keys; + } + var upperCaseAlphabet = makeKeyRange(65, 26); + var lowerCaseAlphabet = makeKeyRange(97, 26); + var numbers = makeKeyRange(48, 10); + var specialSymbols = '~`!@#$%^&*()_-+=[{}]\\|/?.,<>:;"\''.split(''); + var specialKeys = ['Left', 'Right', 'Up', 'Down', 'Space', 'Backspace', + 'Esc', 'Home', 'End', 'PageUp', 'PageDown', 'Enter']; + var validMarks = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['<', '>']); + var validRegisters = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['-', '"']); + + function isLine(cm, line) { + return line >= cm.firstLine() && line <= cm.lastLine(); + } + function isLowerCase(k) { + return (/^[a-z]$/).test(k); + } + function isMatchableSymbol(k) { + return '()[]{}'.indexOf(k) != -1; + } + function isNumber(k) { + return numberRegex.test(k); + } + function isUpperCase(k) { + return (/^[A-Z]$/).test(k); + } + function isWhiteSpaceString(k) { + return (/^\s*$/).test(k); + } + function inArray(val, arr) { + for (var i = 0; i < arr.length; i++) { + if (arr[i] == val) { + return true; + } + } + return false; + } + + var createCircularJumpList = function() { + var size = 100; + var pointer = -1; + var head = 0; + var tail = 0; + var buffer = new Array(size); + function add(cm, oldCur, newCur) { + var current = pointer % size; + var curMark = buffer[current]; + function useNextSlot(cursor) { + var next = ++pointer % size; + var trashMark = buffer[next]; + if (trashMark) { + trashMark.clear(); + } + buffer[next] = cm.setBookmark(cursor); + } + if (curMark) { + var markPos = curMark.find(); + // avoid recording redundant cursor position + if (markPos && !cursorEqual(markPos, oldCur)) { + useNextSlot(oldCur); + } + } else { + useNextSlot(oldCur); + } + useNextSlot(newCur); + head = pointer; + tail = pointer - size + 1; + if (tail < 0) { + tail = 0; + } + } + function move(cm, offset) { + pointer += offset; + if (pointer > head) { + pointer = head; + } else if (pointer < tail) { + pointer = tail; + } + var mark = buffer[(size + pointer) % size]; + // skip marks that are temporarily removed from text buffer + if (mark && !mark.find()) { + var inc = offset > 0 ? 1 : -1; + var newCur; + var oldCur = cm.getCursor(); + do { + pointer += inc; + mark = buffer[(size + pointer) % size]; + // skip marks that are the same as current position + if (mark && + (newCur = mark.find()) && + !cursorEqual(oldCur, newCur)) { + break; + } + } while (pointer < head && pointer > tail); + } + return mark; + } + return { + cachedCursor: undefined, //used for # and * jumps + add: add, + move: move + }; + }; + + var createMacroState = function() { + return { + macroKeyBuffer: [], + latestRegister: undefined, + inReplay: false, + lastInsertModeChanges: { + changes: [], // Change list + expectCursorActivityForChange: false // Set to true on change, false on cursorActivity. + }, + enteredMacroMode: undefined, + isMacroPlaying: false, + toggle: function(cm, registerName) { + if (this.enteredMacroMode) { //onExit + this.enteredMacroMode(); // close dialog + this.enteredMacroMode = undefined; + } else { //onEnter + this.latestRegister = registerName; + this.enteredMacroMode = cm.openDialog( + '(recording)['+registerName+']', null, {bottom:true}); + } + } + }; + }; + + + function maybeInitVimState(cm) { + if (!cm.state.vim) { + // Store instance state in the CodeMirror object. + cm.state.vim = { + inputState: new InputState(), + // Vim's input state that triggered the last edit, used to repeat + // motions and operators with '.'. + lastEditInputState: undefined, + // Vim's action command before the last edit, used to repeat actions + // with '.' and insert mode repeat. + lastEditActionCommand: undefined, + // When using jk for navigation, if you move from a longer line to a + // shorter line, the cursor may clip to the end of the shorter line. + // If j is pressed again and cursor goes to the next line, the + // cursor should go back to its horizontal position on the longer + // line if it can. This is to keep track of the horizontal position. + lastHPos: -1, + // Doing the same with screen-position for gj/gk + lastHSPos: -1, + // The last motion command run. Cleared if a non-motion command gets + // executed in between. + lastMotion: null, + marks: {}, + insertMode: false, + // Repeat count for changes made in insert mode, triggered by key + // sequences like 3,i. Only exists when insertMode is true. + insertModeRepeat: undefined, + visualMode: false, + // If we are in visual line mode. No effect if visualMode is false. + visualLine: false + }; + } + return cm.state.vim; + } + var vimGlobalState; + function resetVimGlobalState() { + vimGlobalState = { + // The current search query. + searchQuery: null, + // Whether we are searching backwards. + searchIsReversed: false, + jumpList: createCircularJumpList(), + macroModeState: createMacroState(), + // Recording latest f, t, F or T motion command. + lastChararacterSearch: {increment:0, forward:true, selectedCharacter:''}, + registerController: new RegisterController({}) + }; + } + + var vimApi= { + buildKeyMap: function() { + // TODO: Convert keymap into dictionary format for fast lookup. + }, + // Testing hook, though it might be useful to expose the register + // controller anyways. + getRegisterController: function() { + return vimGlobalState.registerController; + }, + // Testing hook. + resetVimGlobalState_: resetVimGlobalState, + + // Testing hook. + getVimGlobalState_: function() { + return vimGlobalState; + }, + + // Testing hook. + maybeInitVimState_: maybeInitVimState, + + InsertModeKey: InsertModeKey, + map: function(lhs, rhs) { + // Add user defined key bindings. + exCommandDispatcher.map(lhs, rhs); + }, + defineEx: function(name, prefix, func){ + if (name.indexOf(prefix) !== 0) { + throw new Error('(Vim.defineEx) "'+prefix+'" is not a prefix of "'+name+'", command not registered'); + } + exCommands[name]=func; + exCommandDispatcher.commandMap_[prefix]={name:name, shortName:prefix, type:'api'}; + }, + // This is the outermost function called by CodeMirror, after keys have + // been mapped to their Vim equivalents. + handleKey: function(cm, key) { + var command; + var vim = maybeInitVimState(cm); + var macroModeState = vimGlobalState.macroModeState; + if (macroModeState.enteredMacroMode) { + if (key == 'q') { + actions.exitMacroRecordMode(); + vim.inputState = new InputState(); + return; + } + } + if (key == '') { + // Clear input state and get back to normal mode. + vim.inputState = new InputState(); + if (vim.visualMode) { + exitVisualMode(cm); + } + return; + } + // Enter visual mode when the mouse selects text. + if (!vim.visualMode && + !cursorEqual(cm.getCursor('head'), cm.getCursor('anchor'))) { + vim.visualMode = true; + vim.visualLine = false; + cm.on('mousedown', exitVisualMode); + } + if (key != '0' || (key == '0' && vim.inputState.getRepeat() === 0)) { + // Have to special case 0 since it's both a motion and a number. + command = commandDispatcher.matchCommand(key, defaultKeymap, vim); + } + if (!command) { + if (isNumber(key)) { + // Increment count unless count is 0 and key is 0. + vim.inputState.pushRepeatDigit(key); + } + return; + } + if (command.type == 'keyToKey') { + // TODO: prevent infinite recursion. + for (var i = 0; i < command.toKeys.length; i++) { + this.handleKey(cm, command.toKeys[i]); + } + } else { + if (macroModeState.enteredMacroMode) { + logKey(macroModeState, key); + } + commandDispatcher.processCommand(cm, vim, command); + } + } + }; + + // Represents the current input state. + function InputState() { + this.prefixRepeat = []; + this.motionRepeat = []; + + this.operator = null; + this.operatorArgs = null; + this.motion = null; + this.motionArgs = null; + this.keyBuffer = []; // For matching multi-key commands. + this.registerName = null; // Defaults to the unamed register. + } + InputState.prototype.pushRepeatDigit = function(n) { + if (!this.operator) { + this.prefixRepeat = this.prefixRepeat.concat(n); + } else { + this.motionRepeat = this.motionRepeat.concat(n); + } + }; + InputState.prototype.getRepeat = function() { + var repeat = 0; + if (this.prefixRepeat.length > 0 || this.motionRepeat.length > 0) { + repeat = 1; + if (this.prefixRepeat.length > 0) { + repeat *= parseInt(this.prefixRepeat.join(''), 10); + } + if (this.motionRepeat.length > 0) { + repeat *= parseInt(this.motionRepeat.join(''), 10); + } + } + return repeat; + }; + + /* + * Register stores information about copy and paste registers. Besides + * text, a register must store whether it is linewise (i.e., when it is + * pasted, should it insert itself into a new line, or should the text be + * inserted at the cursor position.) + */ + function Register(text, linewise) { + this.clear(); + if (text) { + this.set(text, linewise); + } + } + Register.prototype = { + set: function(text, linewise) { + this.text = text; + this.linewise = !!linewise; + }, + append: function(text, linewise) { + // if this register has ever been set to linewise, use linewise. + if (linewise || this.linewise) { + this.text += '\n' + text; + this.linewise = true; + } else { + this.text += text; + } + }, + clear: function() { + this.text = ''; + this.linewise = false; + }, + toString: function() { return this.text; } + }; + + /* + * vim registers allow you to keep many independent copy and paste buffers. + * See http://usevim.com/2012/04/13/registers/ for an introduction. + * + * RegisterController keeps the state of all the registers. An initial + * state may be passed in. The unnamed register '"' will always be + * overridden. + */ + function RegisterController(registers) { + this.registers = registers; + this.unamedRegister = registers['"'] = new Register(); + } + RegisterController.prototype = { + pushText: function(registerName, operator, text, linewise) { + if (linewise && text.charAt(0) == '\n') { + text = text.slice(1) + '\n'; + } + // Lowercase and uppercase registers refer to the same register. + // Uppercase just means append. + var register = this.isValidRegister(registerName) ? + this.getRegister(registerName) : null; + // if no register/an invalid register was specified, things go to the + // default registers + if (!register) { + switch (operator) { + case 'yank': + // The 0 register contains the text from the most recent yank. + this.registers['0'] = new Register(text, linewise); + break; + case 'delete': + case 'change': + if (text.indexOf('\n') == -1) { + // Delete less than 1 line. Update the small delete register. + this.registers['-'] = new Register(text, linewise); + } else { + // Shift down the contents of the numbered registers and put the + // deleted text into register 1. + this.shiftNumericRegisters_(); + this.registers['1'] = new Register(text, linewise); + } + break; + } + // Make sure the unnamed register is set to what just happened + this.unamedRegister.set(text, linewise); + return; + } + + // If we've gotten to this point, we've actually specified a register + var append = isUpperCase(registerName); + if (append) { + register.append(text, linewise); + // The unamed register always has the same value as the last used + // register. + this.unamedRegister.append(text, linewise); + } else { + register.set(text, linewise); + this.unamedRegister.set(text, linewise); + } + }, + setRegisterText: function(name, text, linewise) { + this.getRegister(name).set(text, linewise); + }, + // Gets the register named @name. If one of @name doesn't already exist, + // create it. If @name is invalid, return the unamedRegister. + getRegister: function(name) { + if (!this.isValidRegister(name)) { + return this.unamedRegister; + } + name = name.toLowerCase(); + if (!this.registers[name]) { + this.registers[name] = new Register(); + } + return this.registers[name]; + }, + isValidRegister: function(name) { + return name && inArray(name, validRegisters); + }, + shiftNumericRegisters_: function() { + for (var i = 9; i >= 2; i--) { + this.registers[i] = this.getRegister('' + (i - 1)); + } + } + }; + + var commandDispatcher = { + matchCommand: function(key, keyMap, vim) { + var inputState = vim.inputState; + var keys = inputState.keyBuffer.concat(key); + for (var i = 0; i < keyMap.length; i++) { + var command = keyMap[i]; + if (matchKeysPartial(keys, command.keys)) { + if (keys.length < command.keys.length) { + // Matches part of a multi-key command. Buffer and wait for next + // stroke. + inputState.keyBuffer.push(key); + return null; + } + if (inputState.operator && command.type == 'action') { + // Ignore matched action commands after an operator. Operators + // only operate on motions. This check is really for text + // objects since aW, a[ etcs conflicts with a. + continue; + } + // Matches whole comand. Return the command. + if (command.keys[keys.length - 1] == 'character') { + inputState.selectedCharacter = keys[keys.length - 1]; + if(inputState.selectedCharacter.length>1){ + switch(inputState.selectedCharacter){ + case '': + inputState.selectedCharacter='\n'; + break; + case '': + inputState.selectedCharacter=' '; + break; + default: + continue; + } + } + } + inputState.keyBuffer = []; + return command; + } + } + // Clear the buffer since there are no partial matches. + inputState.keyBuffer = []; + return null; + }, + processCommand: function(cm, vim, command) { + vim.inputState.repeatOverride = command.repeatOverride; + switch (command.type) { + case 'motion': + this.processMotion(cm, vim, command); + break; + case 'operator': + this.processOperator(cm, vim, command); + break; + case 'operatorMotion': + this.processOperatorMotion(cm, vim, command); + break; + case 'action': + this.processAction(cm, vim, command); + break; + case 'search': + this.processSearch(cm, vim, command); + break; + case 'ex': + case 'keyToEx': + this.processEx(cm, vim, command); + break; + default: + break; + } + }, + processMotion: function(cm, vim, command) { + vim.inputState.motion = command.motion; + vim.inputState.motionArgs = copyArgs(command.motionArgs); + this.evalInput(cm, vim); + }, + processOperator: function(cm, vim, command) { + var inputState = vim.inputState; + if (inputState.operator) { + if (inputState.operator == command.operator) { + // Typing an operator twice like 'dd' makes the operator operate + // linewise + inputState.motion = 'expandToLine'; + inputState.motionArgs = { linewise: true }; + this.evalInput(cm, vim); + return; + } else { + // 2 different operators in a row doesn't make sense. + vim.inputState = new InputState(); + } + } + inputState.operator = command.operator; + inputState.operatorArgs = copyArgs(command.operatorArgs); + if (vim.visualMode) { + // Operating on a selection in visual mode. We don't need a motion. + this.evalInput(cm, vim); + } + }, + processOperatorMotion: function(cm, vim, command) { + var visualMode = vim.visualMode; + var operatorMotionArgs = copyArgs(command.operatorMotionArgs); + if (operatorMotionArgs) { + // Operator motions may have special behavior in visual mode. + if (visualMode && operatorMotionArgs.visualLine) { + vim.visualLine = true; + } + } + this.processOperator(cm, vim, command); + if (!visualMode) { + this.processMotion(cm, vim, command); + } + }, + processAction: function(cm, vim, command) { + var inputState = vim.inputState; + var repeat = inputState.getRepeat(); + var repeatIsExplicit = !!repeat; + var actionArgs = copyArgs(command.actionArgs) || {}; + if (inputState.selectedCharacter) { + actionArgs.selectedCharacter = inputState.selectedCharacter; + } + // Actions may or may not have motions and operators. Do these first. + if (command.operator) { + this.processOperator(cm, vim, command); + } + if (command.motion) { + this.processMotion(cm, vim, command); + } + if (command.motion || command.operator) { + this.evalInput(cm, vim); + } + actionArgs.repeat = repeat || 1; + actionArgs.repeatIsExplicit = repeatIsExplicit; + actionArgs.registerName = inputState.registerName; + vim.inputState = new InputState(); + vim.lastMotion = null; + if (command.isEdit) { + this.recordLastEdit(vim, inputState, command); + } + actions[command.action](cm, actionArgs, vim); + }, + processSearch: function(cm, vim, command) { + if (!cm.getSearchCursor) { + // Search depends on SearchCursor. + return; + } + var forward = command.searchArgs.forward; + getSearchState(cm).setReversed(!forward); + var promptPrefix = (forward) ? '/' : '?'; + var originalQuery = getSearchState(cm).getQuery(); + var originalScrollPos = cm.getScrollInfo(); + function handleQuery(query, ignoreCase, smartCase) { + try { + updateSearchQuery(cm, query, ignoreCase, smartCase); + } catch (e) { + showConfirm(cm, 'Invalid regex: ' + query); + return; + } + commandDispatcher.processMotion(cm, vim, { + type: 'motion', + motion: 'findNext', + motionArgs: { forward: true, toJumplist: command.searchArgs.toJumplist } + }); + } + function onPromptClose(query) { + cm.scrollTo(originalScrollPos.left, originalScrollPos.top); + handleQuery(query, true /** ignoreCase */, true /** smartCase */); + } + function onPromptKeyUp(_e, query) { + var parsedQuery; + try { + parsedQuery = updateSearchQuery(cm, query, + true /** ignoreCase */, true /** smartCase */); + } catch (e) { + // Swallow bad regexes for incremental search. + } + if (parsedQuery) { + cm.scrollIntoView(findNext(cm, !forward, parsedQuery), 30); + } else { + clearSearchHighlight(cm); + cm.scrollTo(originalScrollPos.left, originalScrollPos.top); + } + } + function onPromptKeyDown(e, _query, close) { + var keyName = CodeMirror.keyName(e); + if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[') { + updateSearchQuery(cm, originalQuery); + clearSearchHighlight(cm); + cm.scrollTo(originalScrollPos.left, originalScrollPos.top); + + CodeMirror.e_stop(e); + close(); + cm.focus(); + } + } + switch (command.searchArgs.querySrc) { + case 'prompt': + showPrompt(cm, { + onClose: onPromptClose, + prefix: promptPrefix, + desc: searchPromptDesc, + onKeyUp: onPromptKeyUp, + onKeyDown: onPromptKeyDown + }); + break; + case 'wordUnderCursor': + var word = expandWordUnderCursor(cm, false /** inclusive */, + true /** forward */, false /** bigWord */, + true /** noSymbol */); + var isKeyword = true; + if (!word) { + word = expandWordUnderCursor(cm, false /** inclusive */, + true /** forward */, false /** bigWord */, + false /** noSymbol */); + isKeyword = false; + } + if (!word) { + return; + } + var query = cm.getLine(word.start.line).substring(word.start.ch, + word.end.ch); + if (isKeyword) { + query = '\\b' + query + '\\b'; + } else { + query = escapeRegex(query); + } + + // cachedCursor is used to save the old position of the cursor + // when * or # causes vim to seek for the nearest word and shift + // the cursor before entering the motion. + vimGlobalState.jumpList.cachedCursor = cm.getCursor(); + cm.setCursor(word.start); + + handleQuery(query, true /** ignoreCase */, false /** smartCase */); + break; + } + }, + processEx: function(cm, vim, command) { + function onPromptClose(input) { + // Give the prompt some time to close so that if processCommand shows + // an error, the elements don't overlap. + exCommandDispatcher.processCommand(cm, input); + } + function onPromptKeyDown(e, _input, close) { + var keyName = CodeMirror.keyName(e); + if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[') { + CodeMirror.e_stop(e); + close(); + cm.focus(); + } + } + if (command.type == 'keyToEx') { + // Handle user defined Ex to Ex mappings + exCommandDispatcher.processCommand(cm, command.exArgs.input); + } else { + if (vim.visualMode) { + showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\'<,\'>', + onKeyDown: onPromptKeyDown}); + } else { + showPrompt(cm, { onClose: onPromptClose, prefix: ':', + onKeyDown: onPromptKeyDown}); + } + } + }, + evalInput: function(cm, vim) { + // If the motion comand is set, execute both the operator and motion. + // Otherwise return. + var inputState = vim.inputState; + var motion = inputState.motion; + var motionArgs = inputState.motionArgs || {}; + var operator = inputState.operator; + var operatorArgs = inputState.operatorArgs || {}; + var registerName = inputState.registerName; + var selectionEnd = cm.getCursor('head'); + var selectionStart = cm.getCursor('anchor'); + // The difference between cur and selection cursors are that cur is + // being operated on and ignores that there is a selection. + var curStart = copyCursor(selectionEnd); + var curOriginal = copyCursor(curStart); + var curEnd; + var repeat; + if (operator) { + this.recordLastEdit(vim, inputState); + } + if (inputState.repeatOverride !== undefined) { + // If repeatOverride is specified, that takes precedence over the + // input state's repeat. Used by Ex mode and can be user defined. + repeat = inputState.repeatOverride; + } else { + repeat = inputState.getRepeat(); + } + if (repeat > 0 && motionArgs.explicitRepeat) { + motionArgs.repeatIsExplicit = true; + } else if (motionArgs.noRepeat || + (!motionArgs.explicitRepeat && repeat === 0)) { + repeat = 1; + motionArgs.repeatIsExplicit = false; + } + if (inputState.selectedCharacter) { + // If there is a character input, stick it in all of the arg arrays. + motionArgs.selectedCharacter = operatorArgs.selectedCharacter = + inputState.selectedCharacter; + } + motionArgs.repeat = repeat; + vim.inputState = new InputState(); + if (motion) { + var motionResult = motions[motion](cm, motionArgs, vim); + vim.lastMotion = motions[motion]; + if (!motionResult) { + return; + } + if (motionArgs.toJumplist) { + var jumpList = vimGlobalState.jumpList; + // if the current motion is # or *, use cachedCursor + var cachedCursor = jumpList.cachedCursor; + if (cachedCursor) { + recordJumpPosition(cm, cachedCursor, motionResult); + delete jumpList.cachedCursor; + } else { + recordJumpPosition(cm, curOriginal, motionResult); + } + } + if (motionResult instanceof Array) { + curStart = motionResult[0]; + curEnd = motionResult[1]; + } else { + curEnd = motionResult; + } + // TODO: Handle null returns from motion commands better. + if (!curEnd) { + curEnd = { ch: curStart.ch, line: curStart.line }; + } + if (vim.visualMode) { + // Check if the selection crossed over itself. Will need to shift + // the start point if that happened. + if (cursorIsBefore(selectionStart, selectionEnd) && + (cursorEqual(selectionStart, curEnd) || + cursorIsBefore(curEnd, selectionStart))) { + // The end of the selection has moved from after the start to + // before the start. We will shift the start right by 1. + selectionStart.ch += 1; + } else if (cursorIsBefore(selectionEnd, selectionStart) && + (cursorEqual(selectionStart, curEnd) || + cursorIsBefore(selectionStart, curEnd))) { + // The opposite happened. We will shift the start left by 1. + selectionStart.ch -= 1; + } + selectionEnd = curEnd; + if (vim.visualLine) { + if (cursorIsBefore(selectionStart, selectionEnd)) { + selectionStart.ch = 0; + selectionEnd.ch = lineLength(cm, selectionEnd.line); + } else { + selectionEnd.ch = 0; + selectionStart.ch = lineLength(cm, selectionStart.line); + } + } + cm.setSelection(selectionStart, selectionEnd); + updateMark(cm, vim, '<', + cursorIsBefore(selectionStart, selectionEnd) ? selectionStart + : selectionEnd); + updateMark(cm, vim, '>', + cursorIsBefore(selectionStart, selectionEnd) ? selectionEnd + : selectionStart); + } else if (!operator) { + curEnd = clipCursorToContent(cm, curEnd); + cm.setCursor(curEnd.line, curEnd.ch); + } + } + + if (operator) { + var inverted = false; + vim.lastMotion = null; + operatorArgs.repeat = repeat; // Indent in visual mode needs this. + if (vim.visualMode) { + curStart = selectionStart; + curEnd = selectionEnd; + motionArgs.inclusive = true; + } + // Swap start and end if motion was backward. + if (cursorIsBefore(curEnd, curStart)) { + var tmp = curStart; + curStart = curEnd; + curEnd = tmp; + inverted = true; + } + if (motionArgs.inclusive && !(vim.visualMode && inverted)) { + // Move the selection end one to the right to include the last + // character. + curEnd.ch++; + } + var linewise = motionArgs.linewise || + (vim.visualMode && vim.visualLine); + if (linewise) { + // Expand selection to entire line. + expandSelectionToLine(cm, curStart, curEnd); + } else if (motionArgs.forward) { + // Clip to trailing newlines only if the motion goes forward. + clipToLine(cm, curStart, curEnd); + } + operatorArgs.registerName = registerName; + // Keep track of linewise as it affects how paste and change behave. + operatorArgs.linewise = linewise; + operators[operator](cm, operatorArgs, vim, curStart, + curEnd, curOriginal); + if (vim.visualMode) { + exitVisualMode(cm); + } + } + }, + recordLastEdit: function(vim, inputState, actionCommand) { + var macroModeState = vimGlobalState.macroModeState; + if (macroModeState.inReplay) { return; } + vim.lastEditInputState = inputState; + vim.lastEditActionCommand = actionCommand; + macroModeState.lastInsertModeChanges.changes = []; + macroModeState.lastInsertModeChanges.expectCursorActivityForChange = false; + } + }; + + /** + * typedef {Object{line:number,ch:number}} Cursor An object containing the + * position of the cursor. + */ + // All of the functions below return Cursor objects. + var motions = { + moveToTopLine: function(cm, motionArgs) { + var line = getUserVisibleLines(cm).top + motionArgs.repeat -1; + return { line: line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(line)) }; + }, + moveToMiddleLine: function(cm) { + var range = getUserVisibleLines(cm); + var line = Math.floor((range.top + range.bottom) * 0.5); + return { line: line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(line)) }; + }, + moveToBottomLine: function(cm, motionArgs) { + var line = getUserVisibleLines(cm).bottom - motionArgs.repeat +1; + return { line: line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(line)) }; + }, + expandToLine: function(cm, motionArgs) { + // Expands forward to end of line, and then to next line if repeat is + // >1. Does not handle backward motion! + var cur = cm.getCursor(); + return { line: cur.line + motionArgs.repeat - 1, ch: Infinity }; + }, + findNext: function(cm, motionArgs) { + var state = getSearchState(cm); + var query = state.getQuery(); + if (!query) { + return; + } + var prev = !motionArgs.forward; + // If search is initiated with ? instead of /, negate direction. + prev = (state.isReversed()) ? !prev : prev; + highlightSearchMatches(cm, query); + return findNext(cm, prev/** prev */, query, motionArgs.repeat); + }, + goToMark: function(_cm, motionArgs, vim) { + var mark = vim.marks[motionArgs.selectedCharacter]; + if (mark) { + return mark.find(); + } + return null; + }, + jumpToMark: function(cm, motionArgs, vim) { + var best = cm.getCursor(); + for (var i = 0; i < motionArgs.repeat; i++) { + var cursor = best; + for (var key in vim.marks) { + if (!isLowerCase(key)) { + continue; + } + var mark = vim.marks[key].find(); + var isWrongDirection = (motionArgs.forward) ? + cursorIsBefore(mark, cursor) : cursorIsBefore(cursor, mark); + + if (isWrongDirection) { + continue; + } + if (motionArgs.linewise && (mark.line == cursor.line)) { + continue; + } + + var equal = cursorEqual(cursor, best); + var between = (motionArgs.forward) ? + cusrorIsBetween(cursor, mark, best) : + cusrorIsBetween(best, mark, cursor); + + if (equal || between) { + best = mark; + } + } + } + + if (motionArgs.linewise) { + // Vim places the cursor on the first non-whitespace character of + // the line if there is one, else it places the cursor at the end + // of the line, regardless of whether a mark was found. + best.ch = findFirstNonWhiteSpaceCharacter(cm.getLine(best.line)); + } + return best; + }, + moveByCharacters: function(cm, motionArgs) { + var cur = cm.getCursor(); + var repeat = motionArgs.repeat; + var ch = motionArgs.forward ? cur.ch + repeat : cur.ch - repeat; + return { line: cur.line, ch: ch }; + }, + moveByLines: function(cm, motionArgs, vim) { + var cur = cm.getCursor(); + var endCh = cur.ch; + // Depending what our last motion was, we may want to do different + // things. If our last motion was moving vertically, we want to + // preserve the HPos from our last horizontal move. If our last motion + // was going to the end of a line, moving vertically we should go to + // the end of the line, etc. + switch (vim.lastMotion) { + case this.moveByLines: + case this.moveByDisplayLines: + case this.moveByScroll: + case this.moveToColumn: + case this.moveToEol: + endCh = vim.lastHPos; + break; + default: + vim.lastHPos = endCh; + } + var repeat = motionArgs.repeat+(motionArgs.repeatOffset||0); + var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat; + var first = cm.firstLine(); + var last = cm.lastLine(); + // Vim cancels linewise motions that start on an edge and move beyond + // that edge. It does not cancel motions that do not start on an edge. + if ((line < first && cur.line == first) || + (line > last && cur.line == last)) { + return; + } + if(motionArgs.toFirstChar){ + endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line)); + vim.lastHPos = endCh; + } + vim.lastHSPos = cm.charCoords({line:line, ch:endCh},'div').left; + return { line: line, ch: endCh }; + }, + moveByDisplayLines: function(cm, motionArgs, vim) { + var cur = cm.getCursor(); + switch (vim.lastMotion) { + case this.moveByDisplayLines: + case this.moveByScroll: + case this.moveByLines: + case this.moveToColumn: + case this.moveToEol: + break; + default: + vim.lastHSPos = cm.charCoords(cur,'div').left; + } + var repeat = motionArgs.repeat; + var res=cm.findPosV(cur,(motionArgs.forward ? repeat : -repeat),'line',vim.lastHSPos); + if (res.hitSide) { + if (motionArgs.forward) { + var lastCharCoords = cm.charCoords(res, 'div'); + var goalCoords = { top: lastCharCoords.top + 8, left: vim.lastHSPos }; + var res = cm.coordsChar(goalCoords, 'div'); + } else { + var resCoords = cm.charCoords({ line: cm.firstLine(), ch: 0}, 'div'); + resCoords.left = vim.lastHSPos; + res = cm.coordsChar(resCoords, 'div'); + } + } + vim.lastHPos = res.ch; + return res; + }, + moveByPage: function(cm, motionArgs) { + // CodeMirror only exposes functions that move the cursor page down, so + // doing this bad hack to move the cursor and move it back. evalInput + // will move the cursor to where it should be in the end. + var curStart = cm.getCursor(); + var repeat = motionArgs.repeat; + cm.moveV((motionArgs.forward ? repeat : -repeat), 'page'); + var curEnd = cm.getCursor(); + cm.setCursor(curStart); + return curEnd; + }, + moveByParagraph: function(cm, motionArgs) { + var line = cm.getCursor().line; + var repeat = motionArgs.repeat; + var inc = motionArgs.forward ? 1 : -1; + for (var i = 0; i < repeat; i++) { + if ((!motionArgs.forward && line === cm.firstLine() ) || + (motionArgs.forward && line == cm.lastLine())) { + break; + } + line += inc; + while (line !== cm.firstLine() && line != cm.lastLine() && cm.getLine(line)) { + line += inc; + } + } + return { line: line, ch: 0 }; + }, + moveByScroll: function(cm, motionArgs, vim) { + var scrollbox = cm.getScrollInfo(); + var curEnd = null; + var repeat = motionArgs.repeat; + if (!repeat) { + repeat = scrollbox.clientHeight / (2 * cm.defaultTextHeight()); + } + var orig = cm.charCoords(cm.getCursor(), 'local'); + motionArgs.repeat = repeat; + var curEnd = motions.moveByDisplayLines(cm, motionArgs, vim); + if (!curEnd) { + return null; + } + var dest = cm.charCoords(curEnd, 'local'); + cm.scrollTo(null, scrollbox.top + dest.top - orig.top); + return curEnd; + }, + moveByWords: function(cm, motionArgs) { + return moveToWord(cm, motionArgs.repeat, !!motionArgs.forward, + !!motionArgs.wordEnd, !!motionArgs.bigWord); + }, + moveTillCharacter: function(cm, motionArgs) { + var repeat = motionArgs.repeat; + var curEnd = moveToCharacter(cm, repeat, motionArgs.forward, + motionArgs.selectedCharacter); + var increment = motionArgs.forward ? -1 : 1; + recordLastCharacterSearch(increment, motionArgs); + if(!curEnd)return cm.getCursor(); + curEnd.ch += increment; + return curEnd; + }, + moveToCharacter: function(cm, motionArgs) { + var repeat = motionArgs.repeat; + recordLastCharacterSearch(0, motionArgs); + return moveToCharacter(cm, repeat, motionArgs.forward, + motionArgs.selectedCharacter) || cm.getCursor(); + }, + moveToSymbol: function(cm, motionArgs) { + var repeat = motionArgs.repeat; + return findSymbol(cm, repeat, motionArgs.forward, + motionArgs.selectedCharacter) || cm.getCursor(); + }, + moveToColumn: function(cm, motionArgs, vim) { + var repeat = motionArgs.repeat; + // repeat is equivalent to which column we want to move to! + vim.lastHPos = repeat - 1; + vim.lastHSPos = cm.charCoords(cm.getCursor(),'div').left; + return moveToColumn(cm, repeat); + }, + moveToEol: function(cm, motionArgs, vim) { + var cur = cm.getCursor(); + vim.lastHPos = Infinity; + var retval={ line: cur.line + motionArgs.repeat - 1, ch: Infinity }; + var end=cm.clipPos(retval); + end.ch--; + vim.lastHSPos = cm.charCoords(end,'div').left; + return retval; + }, + moveToFirstNonWhiteSpaceCharacter: function(cm) { + // Go to the start of the line where the text begins, or the end for + // whitespace-only lines + var cursor = cm.getCursor(); + return { line: cursor.line, + ch: findFirstNonWhiteSpaceCharacter(cm.getLine(cursor.line)) }; + }, + moveToMatchedSymbol: function(cm) { + var cursor = cm.getCursor(); + var line = cursor.line; + var ch = cursor.ch; + var lineText = cm.getLine(line); + var symbol; + var startContext = cm.getTokenAt(cursor).type; + var startCtxLevel = getContextLevel(startContext); + do { + symbol = lineText.charAt(ch++); + if (symbol && isMatchableSymbol(symbol)) { + var endContext = cm.getTokenAt({line:line, ch:ch}).type; + var endCtxLevel = getContextLevel(endContext); + if (startCtxLevel >= endCtxLevel) { + break; + } + } + } while (symbol); + if (symbol) { + return findMatchedSymbol(cm, {line:line, ch:ch-1}, symbol); + } else { + return cursor; + } + }, + moveToStartOfLine: function(cm) { + var cursor = cm.getCursor(); + return { line: cursor.line, ch: 0 }; + }, + moveToLineOrEdgeOfDocument: function(cm, motionArgs) { + var lineNum = motionArgs.forward ? cm.lastLine() : cm.firstLine(); + if (motionArgs.repeatIsExplicit) { + lineNum = motionArgs.repeat - cm.getOption('firstLineNumber'); + } + return { line: lineNum, + ch: findFirstNonWhiteSpaceCharacter(cm.getLine(lineNum)) }; + }, + textObjectManipulation: function(cm, motionArgs) { + var character = motionArgs.selectedCharacter; + // Inclusive is the difference between a and i + // TODO: Instead of using the additional text object map to perform text + // object operations, merge the map into the defaultKeyMap and use + // motionArgs to define behavior. Define separate entries for 'aw', + // 'iw', 'a[', 'i[', etc. + var inclusive = !motionArgs.textObjectInner; + if (!textObjects[character]) { + // No text object defined for this, don't move. + return null; + } + var tmp = textObjects[character](cm, inclusive); + var start = tmp.start; + var end = tmp.end; + return [start, end]; + }, + repeatLastCharacterSearch: function(cm, motionArgs) { + var lastSearch = vimGlobalState.lastChararacterSearch; + var repeat = motionArgs.repeat; + var forward = motionArgs.forward === lastSearch.forward; + var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1); + cm.moveH(-increment, 'char'); + motionArgs.inclusive = forward ? true : false; + var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter); + if (!curEnd) { + cm.moveH(increment, 'char'); + return cm.getCursor(); + } + curEnd.ch += increment; + return curEnd; + } + }; + + var operators = { + change: function(cm, operatorArgs, _vim, curStart, curEnd) { + vimGlobalState.registerController.pushText( + operatorArgs.registerName, 'change', cm.getRange(curStart, curEnd), + operatorArgs.linewise); + if (operatorArgs.linewise) { + // Push the next line back down, if there is a next line. + var replacement = curEnd.line > cm.lastLine() ? '' : '\n'; + cm.replaceRange(replacement, curStart, curEnd); + cm.indentLine(curStart.line, 'smart'); + // null ch so setCursor moves to end of line. + curStart.ch = null; + } else { + // Exclude trailing whitespace if the range is not all whitespace. + var text = cm.getRange(curStart, curEnd); + if (!isWhiteSpaceString(text)) { + var match = (/\s+$/).exec(text); + if (match) { + curEnd = offsetCursor(curEnd, 0, - match[0].length); + } + } + cm.replaceRange('', curStart, curEnd); + } + actions.enterInsertMode(cm, {}, cm.state.vim); + cm.setCursor(curStart); + }, + // delete is a javascript keyword. + 'delete': function(cm, operatorArgs, _vim, curStart, curEnd) { + // If the ending line is past the last line, inclusive, instead of + // including the trailing \n, include the \n before the starting line + if (operatorArgs.linewise && + curEnd.line > cm.lastLine() && curStart.line > cm.firstLine()) { + curStart.line--; + curStart.ch = lineLength(cm, curStart.line); + } + vimGlobalState.registerController.pushText( + operatorArgs.registerName, 'delete', cm.getRange(curStart, curEnd), + operatorArgs.linewise); + cm.replaceRange('', curStart, curEnd); + if (operatorArgs.linewise) { + cm.setCursor(motions.moveToFirstNonWhiteSpaceCharacter(cm)); + } else { + cm.setCursor(curStart); + } + }, + indent: function(cm, operatorArgs, vim, curStart, curEnd) { + var startLine = curStart.line; + var endLine = curEnd.line; + // In visual mode, n> shifts the selection right n times, instead of + // shifting n lines right once. + var repeat = (vim.visualMode) ? operatorArgs.repeat : 1; + if (operatorArgs.linewise) { + // The only way to delete a newline is to delete until the start of + // the next line, so in linewise mode evalInput will include the next + // line. We don't want this in indent, so we go back a line. + endLine--; + } + for (var i = startLine; i <= endLine; i++) { + for (var j = 0; j < repeat; j++) { + cm.indentLine(i, operatorArgs.indentRight); + } + } + cm.setCursor(curStart); + cm.setCursor(motions.moveToFirstNonWhiteSpaceCharacter(cm)); + }, + swapcase: function(cm, operatorArgs, _vim, curStart, curEnd, curOriginal) { + var toSwap = cm.getRange(curStart, curEnd); + var swapped = ''; + for (var i = 0; i < toSwap.length; i++) { + var character = toSwap.charAt(i); + swapped += isUpperCase(character) ? character.toLowerCase() : + character.toUpperCase(); + } + cm.replaceRange(swapped, curStart, curEnd); + if (!operatorArgs.shouldMoveCursor) { + cm.setCursor(curOriginal); + } + }, + yank: function(cm, operatorArgs, _vim, curStart, curEnd, curOriginal) { + vimGlobalState.registerController.pushText( + operatorArgs.registerName, 'yank', + cm.getRange(curStart, curEnd), operatorArgs.linewise); + cm.setCursor(curOriginal); + } + }; + + var actions = { + jumpListWalk: function(cm, actionArgs, vim) { + if (vim.visualMode) { + return; + } + var repeat = actionArgs.repeat; + var forward = actionArgs.forward; + var jumpList = vimGlobalState.jumpList; + + var mark = jumpList.move(cm, forward ? repeat : -repeat); + var markPos = mark ? mark.find() : undefined; + markPos = markPos ? markPos : cm.getCursor(); + cm.setCursor(markPos); + }, + scrollToCursor: function(cm, actionArgs) { + var lineNum = cm.getCursor().line; + var charCoords = cm.charCoords({line: lineNum, ch: 0}, 'local'); + var height = cm.getScrollInfo().clientHeight; + var y = charCoords.top; + var lineHeight = charCoords.bottom - y; + switch (actionArgs.position) { + case 'center': y = y - (height / 2) + lineHeight; + break; + case 'bottom': y = y - height + lineHeight*1.4; + break; + case 'top': y = y + lineHeight*0.4; + break; + } + cm.scrollTo(null, y); + }, + replayMacro: function(cm, actionArgs) { + var registerName = actionArgs.selectedCharacter; + var repeat = actionArgs.repeat; + var macroModeState = vimGlobalState.macroModeState; + if (registerName == '@') { + registerName = macroModeState.latestRegister; + } + var keyBuffer = parseRegisterToKeyBuffer(macroModeState, registerName); + while(repeat--){ + executeMacroKeyBuffer(cm, macroModeState, keyBuffer); + } + }, + exitMacroRecordMode: function() { + var macroModeState = vimGlobalState.macroModeState; + macroModeState.toggle(); + parseKeyBufferToRegister(macroModeState.latestRegister, + macroModeState.macroKeyBuffer); + }, + enterMacroRecordMode: function(cm, actionArgs) { + var macroModeState = vimGlobalState.macroModeState; + var registerName = actionArgs.selectedCharacter; + macroModeState.toggle(cm, registerName); + emptyMacroKeyBuffer(macroModeState); + }, + enterInsertMode: function(cm, actionArgs, vim) { + if (cm.getOption('readOnly')) { return; } + vim.insertMode = true; + vim.insertModeRepeat = actionArgs && actionArgs.repeat || 1; + var insertAt = (actionArgs) ? actionArgs.insertAt : null; + if (insertAt == 'eol') { + var cursor = cm.getCursor(); + cursor = { line: cursor.line, ch: lineLength(cm, cursor.line) }; + cm.setCursor(cursor); + } else if (insertAt == 'charAfter') { + cm.setCursor(offsetCursor(cm.getCursor(), 0, 1)); + } else if (insertAt == 'firstNonBlank') { + cm.setCursor(motions.moveToFirstNonWhiteSpaceCharacter(cm)); + } + cm.setOption('keyMap', 'vim-insert'); + if (actionArgs && actionArgs.replace) { + // Handle Replace-mode as a special case of insert mode. + cm.toggleOverwrite(true); + cm.setOption('keyMap', 'vim-replace'); + } else { + cm.setOption('keyMap', 'vim-insert'); + } + if (!vimGlobalState.macroModeState.inReplay) { + // Only record if not replaying. + cm.on('change', onChange); + cm.on('cursorActivity', onCursorActivity); + CodeMirror.on(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown); + } + }, + toggleVisualMode: function(cm, actionArgs, vim) { + var repeat = actionArgs.repeat; + var curStart = cm.getCursor(); + var curEnd; + // TODO: The repeat should actually select number of characters/lines + // equal to the repeat times the size of the previous visual + // operation. + if (!vim.visualMode) { + cm.on('mousedown', exitVisualMode); + vim.visualMode = true; + vim.visualLine = !!actionArgs.linewise; + if (vim.visualLine) { + curStart.ch = 0; + curEnd = clipCursorToContent(cm, { + line: curStart.line + repeat - 1, + ch: lineLength(cm, curStart.line) + }, true /** includeLineBreak */); + } else { + curEnd = clipCursorToContent(cm, { + line: curStart.line, + ch: curStart.ch + repeat + }, true /** includeLineBreak */); + } + // Make the initial selection. + if (!actionArgs.repeatIsExplicit && !vim.visualLine) { + // This is a strange case. Here the implicit repeat is 1. The + // following commands lets the cursor hover over the 1 character + // selection. + cm.setCursor(curEnd); + cm.setSelection(curEnd, curStart); + } else { + cm.setSelection(curStart, curEnd); + } + } else { + curStart = cm.getCursor('anchor'); + curEnd = cm.getCursor('head'); + if (!vim.visualLine && actionArgs.linewise) { + // Shift-V pressed in characterwise visual mode. Switch to linewise + // visual mode instead of exiting visual mode. + vim.visualLine = true; + curStart.ch = cursorIsBefore(curStart, curEnd) ? 0 : + lineLength(cm, curStart.line); + curEnd.ch = cursorIsBefore(curStart, curEnd) ? + lineLength(cm, curEnd.line) : 0; + cm.setSelection(curStart, curEnd); + } else if (vim.visualLine && !actionArgs.linewise) { + // v pressed in linewise visual mode. Switch to characterwise visual + // mode instead of exiting visual mode. + vim.visualLine = false; + } else { + exitVisualMode(cm); + } + } + updateMark(cm, vim, '<', cursorIsBefore(curStart, curEnd) ? curStart + : curEnd); + updateMark(cm, vim, '>', cursorIsBefore(curStart, curEnd) ? curEnd + : curStart); + }, + joinLines: function(cm, actionArgs, vim) { + var curStart, curEnd; + if (vim.visualMode) { + curStart = cm.getCursor('anchor'); + curEnd = cm.getCursor('head'); + curEnd.ch = lineLength(cm, curEnd.line) - 1; + } else { + // Repeat is the number of lines to join. Minimum 2 lines. + var repeat = Math.max(actionArgs.repeat, 2); + curStart = cm.getCursor(); + curEnd = clipCursorToContent(cm, { line: curStart.line + repeat - 1, + ch: Infinity }); + } + var finalCh = 0; + cm.operation(function() { + for (var i = curStart.line; i < curEnd.line; i++) { + finalCh = lineLength(cm, curStart.line); + var tmp = { line: curStart.line + 1, + ch: lineLength(cm, curStart.line + 1) }; + var text = cm.getRange(curStart, tmp); + text = text.replace(/\n\s*/g, ' '); + cm.replaceRange(text, curStart, tmp); + } + var curFinalPos = { line: curStart.line, ch: finalCh }; + cm.setCursor(curFinalPos); + }); + }, + newLineAndEnterInsertMode: function(cm, actionArgs, vim) { + vim.insertMode = true; + var insertAt = cm.getCursor(); + if (insertAt.line === cm.firstLine() && !actionArgs.after) { + // Special case for inserting newline before start of document. + cm.replaceRange('\n', { line: cm.firstLine(), ch: 0 }); + cm.setCursor(cm.firstLine(), 0); + } else { + insertAt.line = (actionArgs.after) ? insertAt.line : + insertAt.line - 1; + insertAt.ch = lineLength(cm, insertAt.line); + cm.setCursor(insertAt); + var newlineFn = CodeMirror.commands.newlineAndIndentContinueComment || + CodeMirror.commands.newlineAndIndent; + newlineFn(cm); + } + this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim); + }, + paste: function(cm, actionArgs) { + var cur = cm.getCursor(); + var register = vimGlobalState.registerController.getRegister( + actionArgs.registerName); + if (!register.text) { + return; + } + for (var text = '', i = 0; i < actionArgs.repeat; i++) { + text += register.text; + } + var linewise = register.linewise; + if (linewise) { + if (actionArgs.after) { + // Move the newline at the end to the start instead, and paste just + // before the newline character of the line we are on right now. + text = '\n' + text.slice(0, text.length - 1); + cur.ch = lineLength(cm, cur.line); + } else { + cur.ch = 0; + } + } else { + cur.ch += actionArgs.after ? 1 : 0; + } + cm.replaceRange(text, cur); + // Now fine tune the cursor to where we want it. + var curPosFinal; + var idx; + if (linewise && actionArgs.after) { + curPosFinal = { line: cur.line + 1, + ch: findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1)) }; + } else if (linewise && !actionArgs.after) { + curPosFinal = { line: cur.line, + ch: findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line)) }; + } else if (!linewise && actionArgs.after) { + idx = cm.indexFromPos(cur); + curPosFinal = cm.posFromIndex(idx + text.length - 1); + } else { + idx = cm.indexFromPos(cur); + curPosFinal = cm.posFromIndex(idx + text.length); + } + cm.setCursor(curPosFinal); + }, + undo: function(cm, actionArgs) { + cm.operation(function() { + repeatFn(cm, CodeMirror.commands.undo, actionArgs.repeat)(); + cm.setCursor(cm.getCursor('anchor')); + }); + }, + redo: function(cm, actionArgs) { + repeatFn(cm, CodeMirror.commands.redo, actionArgs.repeat)(); + }, + setRegister: function(_cm, actionArgs, vim) { + vim.inputState.registerName = actionArgs.selectedCharacter; + }, + setMark: function(cm, actionArgs, vim) { + var markName = actionArgs.selectedCharacter; + updateMark(cm, vim, markName, cm.getCursor()); + }, + replace: function(cm, actionArgs, vim) { + var replaceWith = actionArgs.selectedCharacter; + var curStart = cm.getCursor(); + var replaceTo; + var curEnd; + if(vim.visualMode){ + curStart=cm.getCursor('start'); + curEnd=cm.getCursor('end'); + // workaround to catch the character under the cursor + // existing workaround doesn't cover actions + curEnd=cm.clipPos({line: curEnd.line, ch: curEnd.ch+1}); + }else{ + var line = cm.getLine(curStart.line); + replaceTo = curStart.ch + actionArgs.repeat; + if (replaceTo > line.length) { + replaceTo=line.length; + } + curEnd = { line: curStart.line, ch: replaceTo }; + } + if(replaceWith=='\n'){ + if(!vim.visualMode) cm.replaceRange('', curStart, curEnd); + // special case, where vim help says to replace by just one line-break + (CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent)(cm); + }else { + var replaceWithStr=cm.getRange(curStart, curEnd); + //replace all characters in range by selected, but keep linebreaks + replaceWithStr=replaceWithStr.replace(/[^\n]/g,replaceWith); + cm.replaceRange(replaceWithStr, curStart, curEnd); + if(vim.visualMode){ + cm.setCursor(curStart); + exitVisualMode(cm); + }else{ + cm.setCursor(offsetCursor(curEnd, 0, -1)); + } + } + }, + incrementNumberToken: function(cm, actionArgs) { + var cur = cm.getCursor(); + var lineStr = cm.getLine(cur.line); + var re = /-?\d+/g; + var match; + var start; + var end; + var numberStr; + var token; + while ((match = re.exec(lineStr)) !== null) { + token = match[0]; + start = match.index; + end = start + token.length; + if(cur.ch < end)break; + } + if(!actionArgs.backtrack && (end <= cur.ch))return; + if (token) { + var increment = actionArgs.increase ? 1 : -1; + var number = parseInt(token) + (increment * actionArgs.repeat); + var from = {ch:start, line:cur.line}; + var to = {ch:end, line:cur.line}; + numberStr = number.toString(); + cm.replaceRange(numberStr, from, to); + } else { + return; + } + cm.setCursor({line: cur.line, ch: start + numberStr.length - 1}); + }, + repeatLastEdit: function(cm, actionArgs, vim) { + var lastEditInputState = vim.lastEditInputState; + if (!lastEditInputState) { return; } + var repeat = actionArgs.repeat; + if (repeat && actionArgs.repeatIsExplicit) { + vim.lastEditInputState.repeatOverride = repeat; + } else { + repeat = vim.lastEditInputState.repeatOverride || repeat; + } + repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */); + } + }; + + var textObjects = { + // TODO: lots of possible exceptions that can be thrown here. Try da( + // outside of a () block. + // TODO: implement text objects for the reverse like }. Should just be + // an additional mapping after moving to the defaultKeyMap. + 'w': function(cm, inclusive) { + return expandWordUnderCursor(cm, inclusive, true /** forward */, + false /** bigWord */); + }, + 'W': function(cm, inclusive) { + return expandWordUnderCursor(cm, inclusive, + true /** forward */, true /** bigWord */); + }, + '{': function(cm, inclusive) { + return selectCompanionObject(cm, '}', inclusive); + }, + '(': function(cm, inclusive) { + return selectCompanionObject(cm, ')', inclusive); + }, + '[': function(cm, inclusive) { + return selectCompanionObject(cm, ']', inclusive); + }, + '\'': function(cm, inclusive) { + return findBeginningAndEnd(cm, "'", inclusive); + }, + '"': function(cm, inclusive) { + return findBeginningAndEnd(cm, '"', inclusive); + } + }; + + /* + * Below are miscellaneous utility functions used by vim.js + */ + + /** + * Clips cursor to ensure that line is within the buffer's range + * If includeLineBreak is true, then allow cur.ch == lineLength. + */ + function clipCursorToContent(cm, cur, includeLineBreak) { + var line = Math.min(Math.max(cm.firstLine(), cur.line), cm.lastLine() ); + var maxCh = lineLength(cm, line) - 1; + maxCh = (includeLineBreak) ? maxCh + 1 : maxCh; + var ch = Math.min(Math.max(0, cur.ch), maxCh); + return { line: line, ch: ch }; + } + function copyArgs(args) { + var ret = {}; + for (var prop in args) { + if (args.hasOwnProperty(prop)) { + ret[prop] = args[prop]; + } + } + return ret; + } + function offsetCursor(cur, offsetLine, offsetCh) { + return { line: cur.line + offsetLine, ch: cur.ch + offsetCh }; + } + function matchKeysPartial(pressed, mapped) { + for (var i = 0; i < pressed.length; i++) { + // 'character' means any character. For mark, register commads, etc. + if (pressed[i] != mapped[i] && mapped[i] != 'character') { + return false; + } + } + return true; + } + function repeatFn(cm, fn, repeat) { + return function() { + for (var i = 0; i < repeat; i++) { + fn(cm); + } + }; + } + function copyCursor(cur) { + return { line: cur.line, ch: cur.ch }; + } + function cursorEqual(cur1, cur2) { + return cur1.ch == cur2.ch && cur1.line == cur2.line; + } + function cursorIsBefore(cur1, cur2) { + if (cur1.line < cur2.line) { + return true; + } + if (cur1.line == cur2.line && cur1.ch < cur2.ch) { + return true; + } + return false; + } + function cusrorIsBetween(cur1, cur2, cur3) { + // returns true if cur2 is between cur1 and cur3. + var cur1before2 = cursorIsBefore(cur1, cur2); + var cur2before3 = cursorIsBefore(cur2, cur3); + return cur1before2 && cur2before3; + } + function lineLength(cm, lineNum) { + return cm.getLine(lineNum).length; + } + function reverse(s){ + return s.split('').reverse().join(''); + } + function trim(s) { + if (s.trim) { + return s.trim(); + } + return s.replace(/^\s+|\s+$/g, ''); + } + function escapeRegex(s) { + return s.replace(/([.?*+$\[\]\/\\(){}|\-])/g, '\\$1'); + } + + function exitVisualMode(cm) { + cm.off('mousedown', exitVisualMode); + var vim = cm.state.vim; + vim.visualMode = false; + vim.visualLine = false; + var selectionStart = cm.getCursor('anchor'); + var selectionEnd = cm.getCursor('head'); + if (!cursorEqual(selectionStart, selectionEnd)) { + // Clear the selection and set the cursor only if the selection has not + // already been cleared. Otherwise we risk moving the cursor somewhere + // it's not supposed to be. + cm.setCursor(clipCursorToContent(cm, selectionEnd)); + } + } + + // Remove any trailing newlines from the selection. For + // example, with the caret at the start of the last word on the line, + // 'dw' should word, but not the newline, while 'w' should advance the + // caret to the first character of the next line. + function clipToLine(cm, curStart, curEnd) { + var selection = cm.getRange(curStart, curEnd); + // Only clip if the selection ends with trailing newline + whitespace + if (/\n\s*$/.test(selection)) { + var lines = selection.split('\n'); + // We know this is all whitepsace. + lines.pop(); + + // Cases: + // 1. Last word is an empty line - do not clip the trailing '\n' + // 2. Last word is not an empty line - clip the trailing '\n' + var line; + // Find the line containing the last word, and clip all whitespace up + // to it. + for (var line = lines.pop(); lines.length > 0 && line && isWhiteSpaceString(line); line = lines.pop()) { + curEnd.line--; + curEnd.ch = 0; + } + // If the last word is not an empty line, clip an additional newline + if (line) { + curEnd.line--; + curEnd.ch = lineLength(cm, curEnd.line); + } else { + curEnd.ch = 0; + } + } + } + + // Expand the selection to line ends. + function expandSelectionToLine(_cm, curStart, curEnd) { + curStart.ch = 0; + curEnd.ch = 0; + curEnd.line++; + } + + function findFirstNonWhiteSpaceCharacter(text) { + if (!text) { + return 0; + } + var firstNonWS = text.search(/\S/); + return firstNonWS == -1 ? text.length : firstNonWS; + } + + function expandWordUnderCursor(cm, inclusive, _forward, bigWord, noSymbol) { + var cur = cm.getCursor(); + var line = cm.getLine(cur.line); + var idx = cur.ch; + + // Seek to first word or non-whitespace character, depending on if + // noSymbol is true. + var textAfterIdx = line.substring(idx); + var firstMatchedChar; + if (noSymbol) { + firstMatchedChar = textAfterIdx.search(/\w/); + } else { + firstMatchedChar = textAfterIdx.search(/\S/); + } + if (firstMatchedChar == -1) { + return null; + } + idx += firstMatchedChar; + textAfterIdx = line.substring(idx); + var textBeforeIdx = line.substring(0, idx); + + var matchRegex; + // Greedy matchers for the "word" we are trying to expand. + if (bigWord) { + matchRegex = /^\S+/; + } else { + if ((/\w/).test(line.charAt(idx))) { + matchRegex = /^\w+/; + } else { + matchRegex = /^[^\w\s]+/; + } + } + + var wordAfterRegex = matchRegex.exec(textAfterIdx); + var wordStart = idx; + var wordEnd = idx + wordAfterRegex[0].length; + // TODO: Find a better way to do this. It will be slow on very long lines. + var revTextBeforeIdx = reverse(textBeforeIdx); + var wordBeforeRegex = matchRegex.exec(revTextBeforeIdx); + if (wordBeforeRegex) { + wordStart -= wordBeforeRegex[0].length; + } + + if (inclusive) { + // If present, trim all whitespace after word. + // Otherwise, trim all whitespace before word. + var textAfterWordEnd = line.substring(wordEnd); + var whitespacesAfterWord = textAfterWordEnd.match(/^\s*/)[0].length; + if (whitespacesAfterWord > 0) { + wordEnd += whitespacesAfterWord; + } else { + var revTrim = revTextBeforeIdx.length - wordStart; + var textBeforeWordStart = revTextBeforeIdx.substring(revTrim); + var whitespacesBeforeWord = textBeforeWordStart.match(/^\s*/)[0].length; + wordStart -= whitespacesBeforeWord; + } + } + + return { start: { line: cur.line, ch: wordStart }, + end: { line: cur.line, ch: wordEnd }}; + } + + function recordJumpPosition(cm, oldCur, newCur) { + if(!cursorEqual(oldCur, newCur)) { + vimGlobalState.jumpList.add(cm, oldCur, newCur); + } + } + + function recordLastCharacterSearch(increment, args) { + vimGlobalState.lastChararacterSearch.increment = increment; + vimGlobalState.lastChararacterSearch.forward = args.forward; + vimGlobalState.lastChararacterSearch.selectedCharacter = args.selectedCharacter; + } + + var symbolToMode = { + '(': 'bracket', ')': 'bracket', '{': 'bracket', '}': 'bracket', + '[': 'section', ']': 'section', + '*': 'comment', '/': 'comment', + 'm': 'method', 'M': 'method', + '#': 'preprocess' + }; + var findSymbolModes = { + bracket: { + isComplete: function(state) { + if (state.nextCh === state.symb) { + state.depth++; + if(state.depth >= 1)return true; + } else if (state.nextCh === state.reverseSymb) { + state.depth--; + } + return false; + } + }, + section: { + init: function(state) { + state.curMoveThrough = true; + state.symb = (state.forward ? ']' : '[') === state.symb ? '{' : '}'; + }, + isComplete: function(state) { + return state.index === 0 && state.nextCh === state.symb; + } + }, + comment: { + isComplete: function(state) { + var found = state.lastCh === '*' && state.nextCh === '/'; + state.lastCh = state.nextCh; + return found; + } + }, + // TODO: The original Vim implementation only operates on level 1 and 2. + // The current implementation doesn't check for code block level and + // therefore it operates on any levels. + method: { + init: function(state) { + state.symb = (state.symb === 'm' ? '{' : '}'); + state.reverseSymb = state.symb === '{' ? '}' : '{'; + }, + isComplete: function(state) { + if(state.nextCh === state.symb)return true; + return false; + } + }, + preprocess: { + init: function(state) { + state.index = 0; + }, + isComplete: function(state) { + if (state.nextCh === '#') { + var token = state.lineText.match(/#(\w+)/)[1]; + if (token === 'endif') { + if (state.forward && state.depth === 0) { + return true; + } + state.depth++; + } else if (token === 'if') { + if (!state.forward && state.depth === 0) { + return true; + } + state.depth--; + } + if(token === 'else' && state.depth === 0)return true; + } + return false; + } + } + }; + function findSymbol(cm, repeat, forward, symb) { + var cur = cm.getCursor(); + var increment = forward ? 1 : -1; + var endLine = forward ? cm.lineCount() : -1; + var curCh = cur.ch; + var line = cur.line; + var lineText = cm.getLine(line); + var state = { + lineText: lineText, + nextCh: lineText.charAt(curCh), + lastCh: null, + index: curCh, + symb: symb, + reverseSymb: (forward ? { ')': '(', '}': '{' } : { '(': ')', '{': '}' })[symb], + forward: forward, + depth: 0, + curMoveThrough: false + }; + var mode = symbolToMode[symb]; + if(!mode)return cur; + var init = findSymbolModes[mode].init; + var isComplete = findSymbolModes[mode].isComplete; + if(init)init(state); + while (line !== endLine && repeat) { + state.index += increment; + state.nextCh = state.lineText.charAt(state.index); + if (!state.nextCh) { + line += increment; + state.lineText = cm.getLine(line) || ''; + if (increment > 0) { + state.index = 0; + } else { + var lineLen = state.lineText.length; + state.index = (lineLen > 0) ? (lineLen-1) : 0; + } + state.nextCh = state.lineText.charAt(state.index); + } + if (isComplete(state)) { + cur.line = line; + cur.ch = state.index; + repeat--; + } + } + if (state.nextCh || state.curMoveThrough) { + return { line: line, ch: state.index }; + } + return cur; + } + + /* + * Returns the boundaries of the next word. If the cursor in the middle of + * the word, then returns the boundaries of the current word, starting at + * the cursor. If the cursor is at the start/end of a word, and we are going + * forward/backward, respectively, find the boundaries of the next word. + * + * @param {CodeMirror} cm CodeMirror object. + * @param {Cursor} cur The cursor position. + * @param {boolean} forward True to search forward. False to search + * backward. + * @param {boolean} bigWord True if punctuation count as part of the word. + * False if only [a-zA-Z0-9] characters count as part of the word. + * @param {boolean} emptyLineIsWord True if empty lines should be treated + * as words. + * @return {Object{from:number, to:number, line: number}} The boundaries of + * the word, or null if there are no more words. + */ + function findWord(cm, cur, forward, bigWord, emptyLineIsWord) { + var lineNum = cur.line; + var pos = cur.ch; + var line = cm.getLine(lineNum); + var dir = forward ? 1 : -1; + var regexps = bigWord ? bigWordRegexp : wordRegexp; + + if (emptyLineIsWord && line == '') { + lineNum += dir; + line = cm.getLine(lineNum); + if (!isLine(cm, lineNum)) { + return null; + } + pos = (forward) ? 0 : line.length; + } + + while (true) { + if (emptyLineIsWord && line == '') { + return { from: 0, to: 0, line: lineNum }; + } + var stop = (dir > 0) ? line.length : -1; + var wordStart = stop, wordEnd = stop; + // Find bounds of next word. + while (pos != stop) { + var foundWord = false; + for (var i = 0; i < regexps.length && !foundWord; ++i) { + if (regexps[i].test(line.charAt(pos))) { + wordStart = pos; + // Advance to end of word. + while (pos != stop && regexps[i].test(line.charAt(pos))) { + pos += dir; + } + wordEnd = pos; + foundWord = wordStart != wordEnd; + if (wordStart == cur.ch && lineNum == cur.line && + wordEnd == wordStart + dir) { + // We started at the end of a word. Find the next one. + continue; + } else { + return { + from: Math.min(wordStart, wordEnd + 1), + to: Math.max(wordStart, wordEnd), + line: lineNum }; + } + } + } + if (!foundWord) { + pos += dir; + } + } + // Advance to next/prev line. + lineNum += dir; + if (!isLine(cm, lineNum)) { + return null; + } + line = cm.getLine(lineNum); + pos = (dir > 0) ? 0 : line.length; + } + // Should never get here. + throw new Error('The impossible happened.'); + } + + /** + * @param {CodeMirror} cm CodeMirror object. + * @param {int} repeat Number of words to move past. + * @param {boolean} forward True to search forward. False to search + * backward. + * @param {boolean} wordEnd True to move to end of word. False to move to + * beginning of word. + * @param {boolean} bigWord True if punctuation count as part of the word. + * False if only alphabet characters count as part of the word. + * @return {Cursor} The position the cursor should move to. + */ + function moveToWord(cm, repeat, forward, wordEnd, bigWord) { + var cur = cm.getCursor(); + var curStart = copyCursor(cur); + var words = []; + if (forward && !wordEnd || !forward && wordEnd) { + repeat++; + } + // For 'e', empty lines are not considered words, go figure. + var emptyLineIsWord = !(forward && wordEnd); + for (var i = 0; i < repeat; i++) { + var word = findWord(cm, cur, forward, bigWord, emptyLineIsWord); + if (!word) { + var eodCh = lineLength(cm, cm.lastLine()); + words.push(forward + ? {line: cm.lastLine(), from: eodCh, to: eodCh} + : {line: 0, from: 0, to: 0}); + break; + } + words.push(word); + cur = {line: word.line, ch: forward ? (word.to - 1) : word.from}; + } + var shortCircuit = words.length != repeat; + var firstWord = words[0]; + var lastWord = words.pop(); + if (forward && !wordEnd) { + // w + if (!shortCircuit && (firstWord.from != curStart.ch || firstWord.line != curStart.line)) { + // We did not start in the middle of a word. Discard the extra word at the end. + lastWord = words.pop(); + } + return {line: lastWord.line, ch: lastWord.from}; + } else if (forward && wordEnd) { + return {line: lastWord.line, ch: lastWord.to - 1}; + } else if (!forward && wordEnd) { + // ge + if (!shortCircuit && (firstWord.to != curStart.ch || firstWord.line != curStart.line)) { + // We did not start in the middle of a word. Discard the extra word at the end. + lastWord = words.pop(); + } + return {line: lastWord.line, ch: lastWord.to}; + } else { + // b + return {line: lastWord.line, ch: lastWord.from}; + } + } + + function moveToCharacter(cm, repeat, forward, character) { + var cur = cm.getCursor(); + var start = cur.ch; + var idx; + for (var i = 0; i < repeat; i ++) { + var line = cm.getLine(cur.line); + idx = charIdxInLine(start, line, character, forward, true); + if (idx == -1) { + return null; + } + start = idx; + } + return { line: cm.getCursor().line, ch: idx }; + } + + function moveToColumn(cm, repeat) { + // repeat is always >= 1, so repeat - 1 always corresponds + // to the column we want to go to. + var line = cm.getCursor().line; + return clipCursorToContent(cm, { line: line, ch: repeat - 1 }); + } + + function updateMark(cm, vim, markName, pos) { + if (!inArray(markName, validMarks)) { + return; + } + if (vim.marks[markName]) { + vim.marks[markName].clear(); + } + vim.marks[markName] = cm.setBookmark(pos); + } + + function charIdxInLine(start, line, character, forward, includeChar) { + // Search for char in line. + // motion_options: {forward, includeChar} + // If includeChar = true, include it too. + // If forward = true, search forward, else search backwards. + // If char is not found on this line, do nothing + var idx; + if (forward) { + idx = line.indexOf(character, start + 1); + if (idx != -1 && !includeChar) { + idx -= 1; + } + } else { + idx = line.lastIndexOf(character, start - 1); + if (idx != -1 && !includeChar) { + idx += 1; + } + } + return idx; + } + + function getContextLevel(ctx) { + return (ctx === 'string' || ctx === 'comment') ? 1 : 0; + } + + function findMatchedSymbol(cm, cur, symb) { + var line = cur.line; + var ch = cur.ch; + symb = symb ? symb : cm.getLine(line).charAt(ch); + + var symbContext = cm.getTokenAt({line:line, ch:ch+1}).type; + var symbCtxLevel = getContextLevel(symbContext); + + var reverseSymb = ({ + '(': ')', ')': '(', + '[': ']', ']': '[', + '{': '}', '}': '{'})[symb]; + + // Couldn't find a matching symbol, abort + if (!reverseSymb) { + return cur; + } + + // set our increment to move forward (+1) or backwards (-1) + // depending on which bracket we're matching + var increment = ({'(': 1, '{': 1, '[': 1})[symb] || -1; + var endLine = increment === 1 ? cm.lineCount() : -1; + var depth = 1, nextCh = symb, index = ch, lineText = cm.getLine(line); + // Simple search for closing paren--just count openings and closings till + // we find our match + // TODO: use info from CodeMirror to ignore closing brackets in comments + // and quotes, etc. + while (line !== endLine && depth > 0) { + index += increment; + nextCh = lineText.charAt(index); + if (!nextCh) { + line += increment; + lineText = cm.getLine(line) || ''; + if (increment > 0) { + index = 0; + } else { + var lineLen = lineText.length; + index = (lineLen > 0) ? (lineLen-1) : 0; + } + nextCh = lineText.charAt(index); + } + var revSymbContext = cm.getTokenAt({line:line, ch:index+1}).type; + var revSymbCtxLevel = getContextLevel(revSymbContext); + if (symbCtxLevel >= revSymbCtxLevel) { + if (nextCh === symb) { + depth++; + } else if (nextCh === reverseSymb) { + depth--; + } + } + } + + if (nextCh) { + return { line: line, ch: index }; + } + return cur; + } + + function selectCompanionObject(cm, revSymb, inclusive) { + var cur = cm.getCursor(); + + var end = findMatchedSymbol(cm, cur, revSymb); + var start = findMatchedSymbol(cm, end); + start.ch += inclusive ? 1 : 0; + end.ch += inclusive ? 0 : 1; + + return { start: start, end: end }; + } + + // Takes in a symbol and a cursor and tries to simulate text objects that + // have identical opening and closing symbols + // TODO support across multiple lines + function findBeginningAndEnd(cm, symb, inclusive) { + var cur = cm.getCursor(); + var line = cm.getLine(cur.line); + var chars = line.split(''); + var start, end, i, len; + var firstIndex = chars.indexOf(symb); + + // the decision tree is to always look backwards for the beginning first, + // but if the cursor is in front of the first instance of the symb, + // then move the cursor forward + if (cur.ch < firstIndex) { + cur.ch = firstIndex; + // Why is this line even here??? + // cm.setCursor(cur.line, firstIndex+1); + } + // otherwise if the cursor is currently on the closing symbol + else if (firstIndex < cur.ch && chars[cur.ch] == symb) { + end = cur.ch; // assign end to the current cursor + --cur.ch; // make sure to look backwards + } + + // if we're currently on the symbol, we've got a start + if (chars[cur.ch] == symb && !end) { + start = cur.ch + 1; // assign start to ahead of the cursor + } else { + // go backwards to find the start + for (i = cur.ch; i > -1 && !start; i--) { + if (chars[i] == symb) { + start = i + 1; + } + } + } + + // look forwards for the end symbol + if (start && !end) { + for (i = start, len = chars.length; i < len && !end; i++) { + if (chars[i] == symb) { + end = i; + } + } + } + + // nothing found + if (!start || !end) { + return { start: cur, end: cur }; + } + + // include the symbols + if (inclusive) { + --start; ++end; + } + + return { + start: { line: cur.line, ch: start }, + end: { line: cur.line, ch: end } + }; + } + + // Search functions + function SearchState() {} + SearchState.prototype = { + getQuery: function() { + return vimGlobalState.query; + }, + setQuery: function(query) { + vimGlobalState.query = query; + }, + getOverlay: function() { + return this.searchOverlay; + }, + setOverlay: function(overlay) { + this.searchOverlay = overlay; + }, + isReversed: function() { + return vimGlobalState.isReversed; + }, + setReversed: function(reversed) { + vimGlobalState.isReversed = reversed; + } + }; + function getSearchState(cm) { + var vim = cm.state.vim; + return vim.searchState_ || (vim.searchState_ = new SearchState()); + } + function dialog(cm, template, shortText, onClose, options) { + if (cm.openDialog) { + cm.openDialog(template, onClose, { bottom: true, value: options.value, + onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp }); + } + else { + onClose(prompt(shortText, '')); + } + } + + function findUnescapedSlashes(str) { + var escapeNextChar = false; + var slashes = []; + for (var i = 0; i < str.length; i++) { + var c = str.charAt(i); + if (!escapeNextChar && c == '/') { + slashes.push(i); + } + escapeNextChar = (c == '\\'); + } + return slashes; + } + /** + * Extract the regular expression from the query and return a Regexp object. + * Returns null if the query is blank. + * If ignoreCase is passed in, the Regexp object will have the 'i' flag set. + * If smartCase is passed in, and the query contains upper case letters, + * then ignoreCase is overridden, and the 'i' flag will not be set. + * If the query contains the /i in the flag part of the regular expression, + * then both ignoreCase and smartCase are ignored, and 'i' will be passed + * through to the Regex object. + */ + function parseQuery(query, ignoreCase, smartCase) { + // Check if the query is already a regex. + if (query instanceof RegExp) { return query; } + // First try to extract regex + flags from the input. If no flags found, + // extract just the regex. IE does not accept flags directly defined in + // the regex string in the form /regex/flags + var slashes = findUnescapedSlashes(query); + var regexPart; + var forceIgnoreCase; + if (!slashes.length) { + // Query looks like 'regexp' + regexPart = query; + } else { + // Query looks like 'regexp/...' + regexPart = query.substring(0, slashes[0]); + var flagsPart = query.substring(slashes[0]); + forceIgnoreCase = (flagsPart.indexOf('i') != -1); + } + if (!regexPart) { + return null; + } + if (smartCase) { + ignoreCase = (/^[^A-Z]*$/).test(regexPart); + } + var regexp = new RegExp(regexPart, + (ignoreCase || forceIgnoreCase) ? 'i' : undefined); + return regexp; + } + function showConfirm(cm, text) { + if (cm.openConfirm) { + cm.openConfirm('' + text + + ' ', function() {}, + {bottom: true}); + } else { + alert(text); + } + } + function makePrompt(prefix, desc) { + var raw = ''; + if (prefix) { + raw += '' + prefix + ''; + } + raw += ' ' + + ''; + if (desc) { + raw += ''; + raw += desc; + raw += ''; + } + return raw; + } + var searchPromptDesc = '(Javascript regexp)'; + function showPrompt(cm, options) { + var shortText = (options.prefix || '') + ' ' + (options.desc || ''); + var prompt = makePrompt(options.prefix, options.desc); + dialog(cm, prompt, shortText, options.onClose, options); + } + function regexEqual(r1, r2) { + if (r1 instanceof RegExp && r2 instanceof RegExp) { + var props = ['global', 'multiline', 'ignoreCase', 'source']; + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + if (r1[prop] !== r2[prop]) { + return false; + } + } + return true; + } + return false; + } + // Returns true if the query is valid. + function updateSearchQuery(cm, rawQuery, ignoreCase, smartCase) { + if (!rawQuery) { + return; + } + var state = getSearchState(cm); + var query = parseQuery(rawQuery, !!ignoreCase, !!smartCase); + if (!query) { + return; + } + highlightSearchMatches(cm, query); + if (regexEqual(query, state.getQuery())) { + return query; + } + state.setQuery(query); + return query; + } + function searchOverlay(query) { + if (query.source.charAt(0) == '^') { + var matchSol = true; + } + return { + token: function(stream) { + if (matchSol && !stream.sol()) { + stream.skipToEnd(); + return; + } + var match = stream.match(query, false); + if (match) { + if (match[0].length == 0) { + // Matched empty string, skip to next. + stream.next(); + return 'searching'; + } + if (!stream.sol()) { + // Backtrack 1 to match \b + stream.backUp(1); + if (!query.exec(stream.next() + match[0])) { + stream.next(); + return null; + } + } + stream.match(query); + return 'searching'; + } + while (!stream.eol()) { + stream.next(); + if (stream.match(query, false)) break; + } + }, + query: query + }; + } + function highlightSearchMatches(cm, query) { + var overlay = getSearchState(cm).getOverlay(); + if (!overlay || query != overlay.query) { + if (overlay) { + cm.removeOverlay(overlay); + } + overlay = searchOverlay(query); + cm.addOverlay(overlay); + getSearchState(cm).setOverlay(overlay); + } + } + function findNext(cm, prev, query, repeat) { + if (repeat === undefined) { repeat = 1; } + return cm.operation(function() { + var pos = cm.getCursor(); + var cursor = cm.getSearchCursor(query, pos); + for (var i = 0; i < repeat; i++) { + var found = cursor.find(prev); + if (i == 0 && found && cursorEqual(cursor.from(), pos)) { found = cursor.find(prev); } + if (!found) { + // SearchCursor may have returned null because it hit EOF, wrap + // around and try again. + cursor = cm.getSearchCursor(query, + (prev) ? { line: cm.lastLine() } : {line: cm.firstLine(), ch: 0} ); + if (!cursor.find(prev)) { + return; + } + } + } + return cursor.from(); + }); + } + function clearSearchHighlight(cm) { + cm.removeOverlay(getSearchState(cm).getOverlay()); + getSearchState(cm).setOverlay(null); + } + /** + * Check if pos is in the specified range, INCLUSIVE. + * Range can be specified with 1 or 2 arguments. + * If the first range argument is an array, treat it as an array of line + * numbers. Match pos against any of the lines. + * If the first range argument is a number, + * if there is only 1 range argument, check if pos has the same line + * number + * if there are 2 range arguments, then check if pos is in between the two + * range arguments. + */ + function isInRange(pos, start, end) { + if (typeof pos != 'number') { + // Assume it is a cursor position. Get the line number. + pos = pos.line; + } + if (start instanceof Array) { + return inArray(pos, start); + } else { + if (end) { + return (pos >= start && pos <= end); + } else { + return pos == start; + } + } + } + function getUserVisibleLines(cm) { + var scrollInfo = cm.getScrollInfo(); + var occludeToleranceTop = 6; + var occludeToleranceBottom = 10; + var from = cm.coordsChar({left:0, top: occludeToleranceTop + scrollInfo.top}, 'local'); + var bottomY = scrollInfo.clientHeight - occludeToleranceBottom + scrollInfo.top; + var to = cm.coordsChar({left:0, top: bottomY}, 'local'); + return {top: from.line, bottom: to.line}; + } + + // Ex command handling + // Care must be taken when adding to the default Ex command map. For any + // pair of commands that have a shared prefix, at least one of their + // shortNames must not match the prefix of the other command. + var defaultExCommandMap = [ + { name: 'map', type: 'builtIn' }, + { name: 'write', shortName: 'w', type: 'builtIn' }, + { name: 'undo', shortName: 'u', type: 'builtIn' }, + { name: 'redo', shortName: 'red', type: 'builtIn' }, + { name: 'sort', shortName: 'sor', type: 'builtIn'}, + { name: 'substitute', shortName: 's', type: 'builtIn'}, + { name: 'nohlsearch', shortName: 'noh', type: 'builtIn'}, + { name: 'delmarks', shortName: 'delm', type: 'builtin'} + ]; + Vim.ExCommandDispatcher = function() { + this.buildCommandMap_(); + }; + Vim.ExCommandDispatcher.prototype = { + processCommand: function(cm, input) { + var vim = cm.state.vim; + if (vim.visualMode) { + exitVisualMode(cm); + } + var inputStream = new CodeMirror.StringStream(input); + var params = {}; + params.input = input; + try { + this.parseInput_(cm, inputStream, params); + } catch(e) { + showConfirm(cm, e); + return; + } + var commandName; + if (!params.commandName) { + // If only a line range is defined, move to the line. + if (params.line !== undefined) { + commandName = 'move'; + } + } else { + var command = this.matchCommand_(params.commandName); + if (command) { + commandName = command.name; + this.parseCommandArgs_(inputStream, params, command); + if (command.type == 'exToKey') { + // Handle Ex to Key mapping. + for (var i = 0; i < command.toKeys.length; i++) { + CodeMirror.Vim.handleKey(cm, command.toKeys[i]); + } + return; + } else if (command.type == 'exToEx') { + // Handle Ex to Ex mapping. + this.processCommand(cm, command.toInput); + return; + } + } + } + if (!commandName) { + showConfirm(cm, 'Not an editor command ":' + input + '"'); + return; + } + try { + exCommands[commandName](cm, params); + } catch(e) { + showConfirm(cm, e); + } + }, + parseInput_: function(cm, inputStream, result) { + inputStream.eatWhile(':'); + // Parse range. + if (inputStream.eat('%')) { + result.line = cm.firstLine(); + result.lineEnd = cm.lastLine(); + } else { + result.line = this.parseLineSpec_(cm, inputStream); + if (result.line !== undefined && inputStream.eat(',')) { + result.lineEnd = this.parseLineSpec_(cm, inputStream); + } + } + + // Parse command name. + var commandMatch = inputStream.match(/^(\w+)/); + if (commandMatch) { + result.commandName = commandMatch[1]; + } else { + result.commandName = inputStream.match(/.*/)[0]; + } + + return result; + }, + parseLineSpec_: function(cm, inputStream) { + var numberMatch = inputStream.match(/^(\d+)/); + if (numberMatch) { + return parseInt(numberMatch[1], 10) - 1; + } + switch (inputStream.next()) { + case '.': + return cm.getCursor().line; + case '$': + return cm.lastLine(); + case '\'': + var mark = cm.state.vim.marks[inputStream.next()]; + if (mark && mark.find()) { + return mark.find().line; + } + throw new Error('Mark not set'); + default: + inputStream.backUp(1); + return undefined; + } + }, + parseCommandArgs_: function(inputStream, params, command) { + if (inputStream.eol()) { + return; + } + params.argString = inputStream.match(/.*/)[0]; + // Parse command-line arguments + var delim = command.argDelimiter || /\s+/; + var args = trim(params.argString).split(delim); + if (args.length && args[0]) { + params.args = args; + } + }, + matchCommand_: function(commandName) { + // Return the command in the command map that matches the shortest + // prefix of the passed in command name. The match is guaranteed to be + // unambiguous if the defaultExCommandMap's shortNames are set up + // correctly. (see @code{defaultExCommandMap}). + for (var i = commandName.length; i > 0; i--) { + var prefix = commandName.substring(0, i); + if (this.commandMap_[prefix]) { + var command = this.commandMap_[prefix]; + if (command.name.indexOf(commandName) === 0) { + return command; + } + } + } + return null; + }, + buildCommandMap_: function() { + this.commandMap_ = {}; + for (var i = 0; i < defaultExCommandMap.length; i++) { + var command = defaultExCommandMap[i]; + var key = command.shortName || command.name; + this.commandMap_[key] = command; + } + }, + map: function(lhs, rhs) { + if (lhs != ':' && lhs.charAt(0) == ':') { + var commandName = lhs.substring(1); + if (rhs != ':' && rhs.charAt(0) == ':') { + // Ex to Ex mapping + this.commandMap_[commandName] = { + name: commandName, + type: 'exToEx', + toInput: rhs.substring(1) + }; + } else { + // Ex to key mapping + this.commandMap_[commandName] = { + name: commandName, + type: 'exToKey', + toKeys: parseKeyString(rhs) + }; + } + } else { + if (rhs != ':' && rhs.charAt(0) == ':') { + // Key to Ex mapping. + defaultKeymap.unshift({ + keys: parseKeyString(lhs), + type: 'keyToEx', + exArgs: { input: rhs.substring(1) }}); + } else { + // Key to key mapping + defaultKeymap.unshift({ + keys: parseKeyString(lhs), + type: 'keyToKey', + toKeys: parseKeyString(rhs) + }); + } + } + } + }; + + // Converts a key string sequence of the form abd into Vim's + // keymap representation. + function parseKeyString(str) { + var key, match; + var keys = []; + while (str) { + match = (/<\w+-.+?>|<\w+>|./).exec(str); + if(match === null)break; + key = match[0]; + str = str.substring(match.index + key.length); + keys.push(key); + } + return keys; + } + + var exCommands = { + map: function(cm, params) { + var mapArgs = params.args; + if (!mapArgs || mapArgs.length < 2) { + if (cm) { + showConfirm(cm, 'Invalid mapping: ' + params.input); + } + return; + } + exCommandDispatcher.map(mapArgs[0], mapArgs[1], cm); + }, + move: function(cm, params) { + commandDispatcher.processCommand(cm, cm.state.vim, { + type: 'motion', + motion: 'moveToLineOrEdgeOfDocument', + motionArgs: { forward: false, explicitRepeat: true, + linewise: true }, + repeatOverride: params.line+1}); + }, + sort: function(cm, params) { + var reverse, ignoreCase, unique, number; + function parseArgs() { + if (params.argString) { + var args = new CodeMirror.StringStream(params.argString); + if (args.eat('!')) { reverse = true; } + if (args.eol()) { return; } + if (!args.eatSpace()) { throw new Error('invalid arguments ' + args.match(/.*/)[0]); } + var opts = args.match(/[a-z]+/); + if (opts) { + opts = opts[0]; + ignoreCase = opts.indexOf('i') != -1; + unique = opts.indexOf('u') != -1; + var decimal = opts.indexOf('d') != -1 && 1; + var hex = opts.indexOf('x') != -1 && 1; + var octal = opts.indexOf('o') != -1 && 1; + if (decimal + hex + octal > 1) { throw new Error('invalid arguments'); } + number = decimal && 'decimal' || hex && 'hex' || octal && 'octal'; + } + if (args.eatSpace() && args.match(/\/.*\//)) { throw new Error('patterns not supported'); } + } + } + parseArgs(); + var lineStart = params.line || cm.firstLine(); + var lineEnd = params.lineEnd || params.line || cm.lastLine(); + if (lineStart == lineEnd) { return; } + var curStart = { line: lineStart, ch: 0 }; + var curEnd = { line: lineEnd, ch: lineLength(cm, lineEnd) }; + var text = cm.getRange(curStart, curEnd).split('\n'); + var numberRegex = (number == 'decimal') ? /(-?)([\d]+)/ : + (number == 'hex') ? /(-?)(?:0x)?([0-9a-f]+)/i : + (number == 'octal') ? /([0-7]+)/ : null; + var radix = (number == 'decimal') ? 10 : (number == 'hex') ? 16 : (number == 'octal') ? 8 : null; + var numPart = [], textPart = []; + if (number) { + for (var i = 0; i < text.length; i++) { + if (numberRegex.exec(text[i])) { + numPart.push(text[i]); + } else { + textPart.push(text[i]); + } + } + } else { + textPart = text; + } + function compareFn(a, b) { + if (reverse) { var tmp; tmp = a; a = b; b = tmp; } + if (ignoreCase) { a = a.toLowerCase(); b = b.toLowerCase(); } + var anum = number && numberRegex.exec(a); + var bnum = number && numberRegex.exec(b); + if (!anum) { return a < b ? -1 : 1; } + anum = parseInt((anum[1] + anum[2]).toLowerCase(), radix); + bnum = parseInt((bnum[1] + bnum[2]).toLowerCase(), radix); + return anum - bnum; + } + numPart.sort(compareFn); + textPart.sort(compareFn); + text = (!reverse) ? textPart.concat(numPart) : numPart.concat(textPart); + if (unique) { // Remove duplicate lines + var textOld = text; + var lastLine; + text = []; + for (var i = 0; i < textOld.length; i++) { + if (textOld[i] != lastLine) { + text.push(textOld[i]); + } + lastLine = textOld[i]; + } + } + cm.replaceRange(text.join('\n'), curStart, curEnd); + }, + substitute: function(cm, params) { + if (!cm.getSearchCursor) { + throw new Error('Search feature not available. Requires searchcursor.js or ' + + 'any other getSearchCursor implementation.'); + } + var argString = params.argString; + var slashes = findUnescapedSlashes(argString); + if (slashes[0] !== 0) { + showConfirm(cm, 'Substitutions should be of the form ' + + ':s/pattern/replace/'); + return; + } + var regexPart = argString.substring(slashes[0] + 1, slashes[1]); + var replacePart = ''; + var flagsPart; + var count; + var confirm = false; // Whether to confirm each replace. + if (slashes[1]) { + replacePart = argString.substring(slashes[1] + 1, slashes[2]); + } + if (slashes[2]) { + // After the 3rd slash, we can have flags followed by a space followed + // by count. + var trailing = argString.substring(slashes[2] + 1).split(' '); + flagsPart = trailing[0]; + count = parseInt(trailing[1]); + } + if (flagsPart) { + if (flagsPart.indexOf('c') != -1) { + confirm = true; + flagsPart.replace('c', ''); + } + regexPart = regexPart + '/' + flagsPart; + } + if (regexPart) { + // If regex part is empty, then use the previous query. Otherwise use + // the regex part as the new query. + try { + updateSearchQuery(cm, regexPart, true /** ignoreCase */, + true /** smartCase */); + } catch (e) { + showConfirm(cm, 'Invalid regex: ' + regexPart); + return; + } + } + var state = getSearchState(cm); + var query = state.getQuery(); + var lineStart = (params.line !== undefined) ? params.line : cm.getCursor().line; + var lineEnd = params.lineEnd || lineStart; + if (count) { + lineStart = lineEnd; + lineEnd = lineStart + count - 1; + } + var startPos = clipCursorToContent(cm, { line: lineStart, ch: 0 }); + var cursor = cm.getSearchCursor(query, startPos); + doReplace(cm, confirm, lineStart, lineEnd, cursor, query, replacePart); + }, + redo: CodeMirror.commands.redo, + undo: CodeMirror.commands.undo, + write: function(cm) { + if (CodeMirror.commands.save) { + // If a save command is defined, call it. + CodeMirror.commands.save(cm); + } else { + // Saves to text area if no save command is defined. + cm.save(); + } + }, + nohlsearch: function(cm) { + clearSearchHighlight(cm); + }, + delmarks: function(cm, params) { + if (!params.argString || !params.argString.trim()) { + showConfirm(cm, 'Argument required'); + return; + } + + var state = cm.state.vim; + var stream = new CodeMirror.StringStream(params.argString.trim()); + while (!stream.eol()) { + stream.eatSpace(); + + // Record the streams position at the beginning of the loop for use + // in error messages. + var count = stream.pos; + + if (!stream.match(/[a-zA-Z]/, false)) { + showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count)); + return; + } + + var sym = stream.next(); + // Check if this symbol is part of a range + if (stream.match('-', true)) { + // This symbol is part of a range. + + // The range must terminate at an alphabetic character. + if (!stream.match(/[a-zA-Z]/, false)) { + showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count)); + return; + } + + var startMark = sym; + var finishMark = stream.next(); + // The range must terminate at an alphabetic character which + // shares the same case as the start of the range. + if (isLowerCase(startMark) && isLowerCase(finishMark) || + isUpperCase(startMark) && isUpperCase(finishMark)) { + var start = startMark.charCodeAt(0); + var finish = finishMark.charCodeAt(0); + if (start >= finish) { + showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count)); + return; + } + + // Because marks are always ASCII values, and we have + // determined that they are the same case, we can use + // their char codes to iterate through the defined range. + for (var j = 0; j <= finish - start; j++) { + var mark = String.fromCharCode(start + j); + delete state.marks[mark]; + } + } else { + showConfirm(cm, 'Invalid argument: ' + startMark + '-'); + return; + } + } else { + // This symbol is a valid mark, and is not part of a range. + delete state.marks[sym]; + } + } + } + }; + + var exCommandDispatcher = new Vim.ExCommandDispatcher(); + + /** + * @param {CodeMirror} cm CodeMirror instance we are in. + * @param {boolean} confirm Whether to confirm each replace. + * @param {Cursor} lineStart Line to start replacing from. + * @param {Cursor} lineEnd Line to stop replacing at. + * @param {RegExp} query Query for performing matches with. + * @param {string} replaceWith Text to replace matches with. May contain $1, + * $2, etc for replacing captured groups using Javascript replace. + */ + function doReplace(cm, confirm, lineStart, lineEnd, searchCursor, query, + replaceWith) { + // Set up all the functions. + cm.state.vim.exMode = true; + var done = false; + var lastPos = searchCursor.from(); + function replaceAll() { + cm.operation(function() { + while (!done) { + replace(); + next(); + } + stop(); + }); + } + function replace() { + var text = cm.getRange(searchCursor.from(), searchCursor.to()); + var newText = text.replace(query, replaceWith); + searchCursor.replace(newText); + } + function next() { + var found = searchCursor.findNext(); + if (!found) { + done = true; + } else if (isInRange(searchCursor.from(), lineStart, lineEnd)) { + cm.scrollIntoView(searchCursor.from(), 30); + cm.setSelection(searchCursor.from(), searchCursor.to()); + lastPos = searchCursor.from(); + done = false; + } else { + done = true; + } + } + function stop(close) { + if (close) { close(); } + cm.focus(); + if (lastPos) { + cm.setCursor(lastPos); + var vim = cm.state.vim; + vim.exMode = false; + vim.lastHPos = vim.lastHSPos = lastPos.ch; + } + } + function onPromptKeyDown(e, _value, close) { + // Swallow all keys. + CodeMirror.e_stop(e); + var keyName = CodeMirror.keyName(e); + switch (keyName) { + case 'Y': + replace(); next(); break; + case 'N': + next(); break; + case 'A': + cm.operation(replaceAll); break; + case 'L': + replace(); + // fall through and exit. + case 'Q': + case 'Esc': + case 'Ctrl-C': + case 'Ctrl-[': + stop(close); + break; + } + if (done) { stop(close); } + } + + // Actually do replace. + next(); + if (done) { + throw new Error('No matches for ' + query.source); + } + if (!confirm) { + replaceAll(); + return; + } + showPrompt(cm, { + prefix: 'replace with ' + replaceWith + ' (y/n/a/q/l)', + onKeyDown: onPromptKeyDown + }); + } + + // Register Vim with CodeMirror + function buildVimKeyMap() { + /** + * Handle the raw key event from CodeMirror. Translate the + * Shift + key modifier to the resulting letter, while preserving other + * modifers. + */ + // TODO: Figure out a way to catch capslock. + function cmKeyToVimKey(key, modifier) { + var vimKey = key; + if (isUpperCase(vimKey)) { + // Convert to lower case if shift is not the modifier since the key + // we get from CodeMirror is always upper case. + if (modifier == 'Shift') { + modifier = null; + } + else { + vimKey = vimKey.toLowerCase(); + } + } + if (modifier) { + // Vim will parse modifier+key combination as a single key. + vimKey = modifier.charAt(0) + '-' + vimKey; + } + var specialKey = ({Enter:'CR',Backspace:'BS',Delete:'Del'})[vimKey]; + vimKey = specialKey ? specialKey : vimKey; + vimKey = vimKey.length > 1 ? '<'+ vimKey + '>' : vimKey; + return vimKey; + } + + // Closure to bind CodeMirror, key, modifier. + function keyMapper(vimKey) { + return function(cm) { + CodeMirror.Vim.handleKey(cm, vimKey); + }; + } + + var cmToVimKeymap = { + 'nofallthrough': true, + 'disableInput': true, + 'style': 'fat-cursor' + }; + function bindKeys(keys, modifier) { + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!modifier && inArray(key, specialSymbols)) { + // Wrap special symbols with '' because that's how CodeMirror binds + // them. + key = "'" + key + "'"; + } + var vimKey = cmKeyToVimKey(keys[i], modifier); + var cmKey = modifier ? modifier + '-' + key : key; + cmToVimKeymap[cmKey] = keyMapper(vimKey); + } + } + bindKeys(upperCaseAlphabet); + bindKeys(upperCaseAlphabet, 'Shift'); + bindKeys(upperCaseAlphabet, 'Ctrl'); + bindKeys(specialSymbols); + bindKeys(specialSymbols, 'Ctrl'); + bindKeys(numbers); + bindKeys(numbers, 'Ctrl'); + bindKeys(specialKeys); + bindKeys(specialKeys, 'Ctrl'); + return cmToVimKeymap; + } + CodeMirror.keyMap.vim = buildVimKeyMap(); + + function exitInsertMode(cm) { + var vim = cm.state.vim; + var inReplay = vimGlobalState.macroModeState.inReplay; + if (!inReplay) { + cm.off('change', onChange); + cm.off('cursorActivity', onCursorActivity); + CodeMirror.off(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown); + } + if (!inReplay && vim.insertModeRepeat > 1) { + // Perform insert mode repeat for commands like 3,a and 3,o. + repeatLastEdit(cm, vim, vim.insertModeRepeat - 1, + true /** repeatForInsert */); + vim.lastEditInputState.repeatOverride = vim.insertModeRepeat; + } + delete vim.insertModeRepeat; + cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1, true); + vim.insertMode = false; + cm.setOption('keyMap', 'vim'); + cm.toggleOverwrite(false); // exit replace mode if we were in it. + } + + CodeMirror.keyMap['vim-insert'] = { + // TODO: override navigation keys so that Esc will cancel automatic + // indentation from o, O, i_ + 'Esc': exitInsertMode, + 'Ctrl-[': exitInsertMode, + 'Ctrl-C': exitInsertMode, + 'Ctrl-N': 'autocomplete', + 'Ctrl-P': 'autocomplete', + 'Enter': function(cm) { + var fn = CodeMirror.commands.newlineAndIndentContinueComment || + CodeMirror.commands.newlineAndIndent; + fn(cm); + }, + fallthrough: ['default'] + }; + + CodeMirror.keyMap['vim-replace'] = { + 'Backspace': 'goCharLeft', + fallthrough: ['vim-insert'] + }; + + function parseRegisterToKeyBuffer(macroModeState, registerName) { + var match, key; + var register = vimGlobalState.registerController.getRegister(registerName); + var text = register.toString(); + var macroKeyBuffer = macroModeState.macroKeyBuffer; + emptyMacroKeyBuffer(macroModeState); + do { + match = (/<\w+-.+?>|<\w+>|./).exec(text); + if(match === null)break; + key = match[0]; + text = text.substring(match.index + key.length); + macroKeyBuffer.push(key); + } while (text); + return macroKeyBuffer; + } + + function parseKeyBufferToRegister(registerName, keyBuffer) { + var text = keyBuffer.join(''); + vimGlobalState.registerController.setRegisterText(registerName, text); + } + + function emptyMacroKeyBuffer(macroModeState) { + if(macroModeState.isMacroPlaying)return; + var macroKeyBuffer = macroModeState.macroKeyBuffer; + macroKeyBuffer.length = 0; + } + + function executeMacroKeyBuffer(cm, macroModeState, keyBuffer) { + macroModeState.isMacroPlaying = true; + for (var i = 0, len = keyBuffer.length; i < len; i++) { + CodeMirror.Vim.handleKey(cm, keyBuffer[i]); + }; + macroModeState.isMacroPlaying = false; + } + + function logKey(macroModeState, key) { + if(macroModeState.isMacroPlaying)return; + var macroKeyBuffer = macroModeState.macroKeyBuffer; + macroKeyBuffer.push(key); + } + + /** + * Listens for changes made in insert mode. + * Should only be active in insert mode. + */ + function onChange(_cm, changeObj) { + var macroModeState = vimGlobalState.macroModeState; + var lastChange = macroModeState.lastInsertModeChanges; + while (changeObj) { + lastChange.expectCursorActivityForChange = true; + if (changeObj.origin == '+input' || changeObj.origin == 'paste' + || changeObj.origin === undefined /* only in testing */) { + var text = changeObj.text.join('\n'); + lastChange.changes.push(text); + } + // Change objects may be chained with next. + changeObj = changeObj.next; + } + } + + /** + * Listens for any kind of cursor activity on CodeMirror. + * - For tracking cursor activity in insert mode. + * - Should only be active in insert mode. + */ + function onCursorActivity() { + var macroModeState = vimGlobalState.macroModeState; + var lastChange = macroModeState.lastInsertModeChanges; + if (lastChange.expectCursorActivityForChange) { + lastChange.expectCursorActivityForChange = false; + } else { + // Cursor moved outside the context of an edit. Reset the change. + lastChange.changes = []; + } + } + + /** Wrapper for special keys pressed in insert mode */ + function InsertModeKey(keyName) { + this.keyName = keyName; + } + + /** + * Handles raw key down events from the text area. + * - Should only be active in insert mode. + * - For recording deletes in insert mode. + */ + function onKeyEventTargetKeyDown(e) { + var macroModeState = vimGlobalState.macroModeState; + var lastChange = macroModeState.lastInsertModeChanges; + var keyName = CodeMirror.keyName(e); + function onKeyFound() { + lastChange.changes.push(new InsertModeKey(keyName)); + return true; + } + if (keyName.indexOf('Delete') != -1 || keyName.indexOf('Backspace') != -1) { + CodeMirror.lookupKey(keyName, ['vim-insert'], onKeyFound); + } + } + + /** + * Repeats the last edit, which includes exactly 1 command and at most 1 + * insert. Operator and motion commands are read from lastEditInputState, + * while action commands are read from lastEditActionCommand. + * + * If repeatForInsert is true, then the function was called by + * exitInsertMode to repeat the insert mode changes the user just made. The + * corresponding enterInsertMode call was made with a count. + */ + function repeatLastEdit(cm, vim, repeat, repeatForInsert) { + var macroModeState = vimGlobalState.macroModeState; + macroModeState.inReplay = true; + var isAction = !!vim.lastEditActionCommand; + var cachedInputState = vim.inputState; + function repeatCommand() { + if (isAction) { + commandDispatcher.processAction(cm, vim, vim.lastEditActionCommand); + } else { + commandDispatcher.evalInput(cm, vim); + } + } + function repeatInsert(repeat) { + if (macroModeState.lastInsertModeChanges.changes.length > 0) { + // For some reason, repeat cw in desktop VIM will does not repeat + // insert mode changes. Will conform to that behavior. + repeat = !vim.lastEditActionCommand ? 1 : repeat; + repeatLastInsertModeChanges(cm, repeat, macroModeState); + } + } + vim.inputState = vim.lastEditInputState; + if (isAction && vim.lastEditActionCommand.interlaceInsertRepeat) { + // o and O repeat have to be interlaced with insert repeats so that the + // insertions appear on separate lines instead of the last line. + for (var i = 0; i < repeat; i++) { + repeatCommand(); + repeatInsert(1); + } + } else { + if (!repeatForInsert) { + // Hack to get the cursor to end up at the right place. If I is + // repeated in insert mode repeat, cursor will be 1 insert + // change set left of where it should be. + repeatCommand(); + } + repeatInsert(repeat); + } + vim.inputState = cachedInputState; + if (vim.insertMode && !repeatForInsert) { + // Don't exit insert mode twice. If repeatForInsert is set, then we + // were called by an exitInsertMode call lower on the stack. + exitInsertMode(cm); + } + macroModeState.inReplay = false; + }; + + function repeatLastInsertModeChanges(cm, repeat, macroModeState) { + var lastChange = macroModeState.lastInsertModeChanges; + function keyHandler(binding) { + if (typeof binding == 'string') { + CodeMirror.commands[binding](cm); + } else { + binding(cm); + } + return true; + } + for (var i = 0; i < repeat; i++) { + for (var j = 0; j < lastChange.changes.length; j++) { + var change = lastChange.changes[j]; + if (change instanceof InsertModeKey) { + CodeMirror.lookupKey(change.keyName, ['vim-insert'], keyHandler); + } else { + var cur = cm.getCursor(); + cm.replaceRange(change, cur, cur); + } + } + } + } + + resetVimGlobalState(); + return vimApi; + }; + // Initialize Vim and make it available as an API. + CodeMirror.Vim = Vim(); +} +)(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/lib/codemirror.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/lib/codemirror.css new file mode 100644 index 0000000..584eecb --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/lib/codemirror.css @@ -0,0 +1,258 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; +} +.CodeMirror-scroll { + /* Set scrolling behaviour here */ + overflow: auto; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; +} + +/* CURSOR */ + +.CodeMirror div.CodeMirror-cursor { + border-left: 1px solid black; + z-index: 3; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor { + width: auto; + border: 0; + background: #7e7; + z-index: 1; +} +/* Can style cursor different in overwrite (non-insert) mode */ +.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {} + +.cm-tab { display: inline-block; } + +/* DEFAULT THEME */ + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable {color: black;} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3 {color: #085;} +.cm-s-default .cm-property {color: black;} +.cm-s-default .cm-operator {color: black;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-error {color: #f00;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} + +.cm-invalidchar {color: #f00;} + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + line-height: 1; + position: relative; + overflow: hidden; + background: white; + color: black; +} + +.CodeMirror-scroll { + /* 30px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -30px; margin-right: -30px; + padding-bottom: 30px; padding-right: 30px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; +} +.CodeMirror-sizer { + position: relative; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actuall scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + padding-bottom: 30px; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + padding-bottom: 30px; + margin-bottom: -32px; + display: inline-block; + /* Hack to make IE7 behave */ + *zoom:1; + *display:inline; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} + +.CodeMirror-lines { + cursor: text; +} +.CodeMirror pre { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; +} +.CodeMirror-wrap pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} +.CodeMirror-code pre { + border-right: 30px solid transparent; + width: -webkit-fit-content; + width: -moz-fit-content; + width: fit-content; +} +.CodeMirror-wrap .CodeMirror-code pre { + border-right: none; + width: auto; +} +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + overflow: auto; +} + +.CodeMirror-widget { +} + +.CodeMirror-wrap .CodeMirror-scroll { + overflow-x: hidden; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; height: 0px; + overflow: hidden; + visibility: hidden; +} +.CodeMirror-measure pre { position: static; } + +.CodeMirror div.CodeMirror-cursor { + position: absolute; + visibility: hidden; + border-right: none; + width: 0; +} +.CodeMirror-focused div.CodeMirror-cursor { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } + +.cm-searching { + background: #ffa; + background: rgba(255, 255, 0, .4); +} + +/* IE7 hack to prevent it from returning funny offsetTops on the spans */ +.CodeMirror span { *vertical-align: text-bottom; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursor { + visibility: hidden; + } +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/lib/codemirror.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/lib/codemirror.js new file mode 100644 index 0000000..1d0d996 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/lib/codemirror.js @@ -0,0 +1,5799 @@ +// CodeMirror version 3.15 +// +// CodeMirror is the only global var we claim +window.CodeMirror = (function() { + "use strict"; + + // BROWSER SNIFFING + + // Crude, but necessary to handle a number of hard-to-feature-detect + // bugs and behavior differences. + var gecko = /gecko\/\d/i.test(navigator.userAgent); + var ie = /MSIE \d/.test(navigator.userAgent); + var ie_lt8 = ie && (document.documentMode == null || document.documentMode < 8); + var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9); + var webkit = /WebKit\//.test(navigator.userAgent); + var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent); + var chrome = /Chrome\//.test(navigator.userAgent); + var opera = /Opera\//.test(navigator.userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var khtml = /KHTML\//.test(navigator.userAgent); + var mac_geLion = /Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent); + var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent); + var phantom = /PhantomJS/.test(navigator.userAgent); + + var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent); + // This is woefully incomplete. Suggestions for alternative methods welcome. + var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent); + var mac = ios || /Mac/.test(navigator.platform); + var windows = /windows/i.test(navigator.platform); + + var opera_version = opera && navigator.userAgent.match(/Version\/(\d*\.\d*)/); + if (opera_version) opera_version = Number(opera_version[1]); + if (opera_version && opera_version >= 15) { opera = false; webkit = true; } + // Some browsers use the wrong event properties to signal cmd/ctrl on OS X + var flipCtrlCmd = mac && (qtwebkit || opera && (opera_version == null || opera_version < 12.11)); + var captureMiddleClick = gecko || (ie && !ie_lt9); + + // Optimize some code when these features are not used + var sawReadOnlySpans = false, sawCollapsedSpans = false; + + // CONSTRUCTOR + + function CodeMirror(place, options) { + if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); + + this.options = options = options || {}; + // Determine effective options based on given values and defaults. + for (var opt in defaults) if (!options.hasOwnProperty(opt) && defaults.hasOwnProperty(opt)) + options[opt] = defaults[opt]; + setGuttersForLineNumbers(options); + + var docStart = typeof options.value == "string" ? 0 : options.value.first; + var display = this.display = makeDisplay(place, docStart); + display.wrapper.CodeMirror = this; + updateGutters(this); + if (options.autofocus && !mobile) focusInput(this); + + this.state = {keyMaps: [], + overlays: [], + modeGen: 0, + overwrite: false, focused: false, + suppressEdits: false, pasteIncoming: false, + draggingText: false, + highlight: new Delayed()}; + + themeChanged(this); + if (options.lineWrapping) + this.display.wrapper.className += " CodeMirror-wrap"; + + var doc = options.value; + if (typeof doc == "string") doc = new Doc(options.value, options.mode); + operation(this, attachDoc)(this, doc); + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie) setTimeout(bind(resetInput, this, true), 20); + + registerEventHandlers(this); + // IE throws unspecified error in certain cases, when + // trying to access activeElement before onload + var hasFocus; try { hasFocus = (document.activeElement == display.input); } catch(e) { } + if (hasFocus || (options.autofocus && !mobile)) setTimeout(bind(onFocus, this), 20); + else onBlur(this); + + operation(this, function() { + for (var opt in optionHandlers) + if (optionHandlers.propertyIsEnumerable(opt)) + optionHandlers[opt](this, options[opt], Init); + for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); + })(); + } + + // DISPLAY CONSTRUCTOR + + function makeDisplay(place, docStart) { + var d = {}; + + var input = d.input = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none; font-size: 4px;"); + if (webkit) input.style.width = "1000px"; + else input.setAttribute("wrap", "off"); + // if border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) input.style.border = "1px solid black"; + input.setAttribute("autocorrect", "off"); input.setAttribute("autocapitalize", "off"); input.setAttribute("spellcheck", "false"); + + // Wraps and hides input textarea + d.inputDiv = elt("div", [input], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The actual fake scrollbars. + d.scrollbarH = elt("div", [elt("div", null, null, "height: 1px")], "CodeMirror-hscrollbar"); + d.scrollbarV = elt("div", [elt("div", null, null, "width: 1px")], "CodeMirror-vscrollbar"); + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); + // DIVs containing the selection and the actual code + d.lineDiv = elt("div", null, "CodeMirror-code"); + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + // Blinky cursor, and element used to ensure cursor fits at the end of a line + d.cursor = elt("div", "\u00a0", "CodeMirror-cursor"); + // Secondary cursor, shown when on a 'jump' in bi-directional text + d.otherCursor = elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"); + // Used to measure text size + d.measure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = elt("div", [d.measure, d.selectionDiv, d.lineDiv, d.cursor, d.otherCursor], + null, "position: relative; outline: none"); + // Moved around its parent to cover visible view + d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); + // Set to the height of the text, causes scrolling + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + // D is needed because behavior of elts with overflow: auto and padding is inconsistent across browsers + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerCutOff + "px; width: 1px;"); + // Will contain the gutters, if any + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Provides scrolling + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.inputDiv, d.scrollbarH, d.scrollbarV, + d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + // Work around IE7 z-index bug + if (ie_lt8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } + if (place.appendChild) place.appendChild(d.wrapper); else place(d.wrapper); + + // Needed to hide big blue blinking cursor on Mobile Safari + if (ios) input.style.width = "0px"; + if (!webkit) d.scroller.draggable = true; + // Needed to handle Tab key in KHTML + if (khtml) { d.inputDiv.style.height = "1px"; d.inputDiv.style.position = "absolute"; } + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + else if (ie_lt8) d.scrollbarH.style.minWidth = d.scrollbarV.style.minWidth = "18px"; + + // Current visible range (may be bigger than the view window). + d.viewOffset = d.lastSizeC = 0; + d.showingFrom = d.showingTo = docStart; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // See readInput and resetInput + d.prevInput = ""; + // Set to true when a non-horizontal-scrolling widget is added. As + // an optimization, widget aligning is skipped when d is false. + d.alignWidgets = false; + // Flag that indicates whether we currently expect input to appear + // (after some event like 'keypress' or 'input') and are polling + // intensively. + d.pollingFast = false; + // Self-resetting timeout for the poller + d.poll = new Delayed(); + + d.cachedCharWidth = d.cachedTextHeight = null; + d.measureLineCache = []; + d.measureLineCachePos = 0; + + // Tracks when resetInput has punted to just putting a short + // string instead of the (large) selection. + d.inaccurateSelection = false; + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null; + d.maxLineLength = 0; + d.maxLineChanged = false; + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; + + return d; + } + + // STATE UPDATES + + // Used to get the editor into a consistent state again when options change. + + function loadMode(cm) { + cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); + cm.doc.iter(function(line) { + if (line.stateAfter) line.stateAfter = null; + if (line.styles) line.styles = null; + }); + cm.doc.frontier = cm.doc.first; + startWorker(cm, 100); + cm.state.modeGen++; + if (cm.curOp) regChange(cm); + } + + function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + cm.display.wrapper.className += " CodeMirror-wrap"; + cm.display.sizer.style.minWidth = ""; + } else { + cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-wrap", ""); + computeMaxLength(cm); + } + estimateLineHeights(cm); + regChange(cm); + clearCaches(cm); + setTimeout(function(){updateScrollbars(cm);}, 100); + } + + function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); + return function(line) { + if (lineIsHidden(cm.doc, line)) + return 0; + else if (wrapping) + return (Math.ceil(line.text.length / perLine) || 1) * th; + else + return th; + }; + } + + function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm); + doc.iter(function(line) { + var estHeight = est(line); + if (estHeight != line.height) updateLineHeight(line, estHeight); + }); + } + + function keyMapChanged(cm) { + var map = keyMap[cm.options.keyMap], style = map.style; + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-keymap-\S+/g, "") + + (style ? " cm-keymap-" + style : ""); + cm.state.disableInput = map.disableInput; + } + + function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); + } + + function guttersChanged(cm) { + updateGutters(cm); + regChange(cm); + setTimeout(function(){alignHorizontally(cm);}, 20); + } + + function updateGutters(cm) { + var gutters = cm.display.gutters, specs = cm.options.gutters; + removeChildren(gutters); + for (var i = 0; i < specs.length; ++i) { + var gutterClass = specs[i]; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); + if (gutterClass == "CodeMirror-linenumbers") { + cm.display.lineGutter = gElt; + gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = i ? "" : "none"; + } + + function lineLength(doc, line) { + if (line.height == 0) return 0; + var len = line.text.length, merged, cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(); + cur = getLine(doc, found.from.line); + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found = merged.find(); + len -= cur.text.length - found.from.ch; + cur = getLine(doc, found.to.line); + len += cur.text.length - found.to.ch; + } + return len; + } + + function computeMaxLength(cm) { + var d = cm.display, doc = cm.doc; + d.maxLine = getLine(doc, doc.first); + d.maxLineLength = lineLength(doc, d.maxLine); + d.maxLineChanged = true; + doc.iter(function(line) { + var len = lineLength(doc, line); + if (len > d.maxLineLength) { + d.maxLineLength = len; + d.maxLine = line; + } + }); + } + + // Make sure the gutters options contains the element + // "CodeMirror-linenumbers" when the lineNumbers option is true. + function setGuttersForLineNumbers(options) { + var found = false; + for (var i = 0; i < options.gutters.length; ++i) { + if (options.gutters[i] == "CodeMirror-linenumbers") { + if (options.lineNumbers) found = true; + else options.gutters.splice(i--, 1); + } + } + if (!found && options.lineNumbers) + options.gutters.push("CodeMirror-linenumbers"); + } + + // SCROLLBARS + + // Re-synchronize the fake scrollbars with the actual size of the + // content. Optionally force a scrollTop. + function updateScrollbars(cm) { + var d = cm.display, docHeight = cm.doc.height; + var totalHeight = docHeight + paddingVert(d); + d.sizer.style.minHeight = d.heightForcer.style.top = totalHeight + "px"; + d.gutters.style.height = Math.max(totalHeight, d.scroller.clientHeight - scrollerCutOff) + "px"; + var scrollHeight = Math.max(totalHeight, d.scroller.scrollHeight); + var needsH = d.scroller.scrollWidth > (d.scroller.clientWidth + 1); + var needsV = scrollHeight > (d.scroller.clientHeight + 1); + if (needsV) { + d.scrollbarV.style.display = "block"; + d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + "px" : "0"; + d.scrollbarV.firstChild.style.height = + (scrollHeight - d.scroller.clientHeight + d.scrollbarV.clientHeight) + "px"; + } else d.scrollbarV.style.display = ""; + if (needsH) { + d.scrollbarH.style.display = "block"; + d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + "px" : "0"; + d.scrollbarH.firstChild.style.width = + (d.scroller.scrollWidth - d.scroller.clientWidth + d.scrollbarH.clientWidth) + "px"; + } else d.scrollbarH.style.display = ""; + if (needsH && needsV) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + "px"; + } else d.scrollbarFiller.style.display = ""; + if (needsH && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block"; + d.gutterFiller.style.height = scrollbarWidth(d.measure) + "px"; + d.gutterFiller.style.width = d.gutters.offsetWidth + "px"; + } else d.gutterFiller.style.display = ""; + + if (mac_geLion && scrollbarWidth(d.measure) === 0) + d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = mac_geMountainLion ? "18px" : "12px"; + } + + function visibleLines(display, doc, viewPort) { + var top = display.scroller.scrollTop, height = display.wrapper.clientHeight; + if (typeof viewPort == "number") top = viewPort; + else if (viewPort) {top = viewPort.top; height = viewPort.bottom - viewPort.top;} + top = Math.floor(top - paddingTop(display)); + var bottom = Math.ceil(top + height); + return {from: lineAtHeight(doc, top), to: lineAtHeight(doc, bottom)}; + } + + // LINE NUMBERS + + function alignHorizontally(cm) { + var display = cm.display; + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; + var gutterW = display.gutters.offsetWidth, l = comp + "px"; + for (var n = display.lineDiv.firstChild; n; n = n.nextSibling) if (n.alignable) { + for (var i = 0, a = n.alignable; i < a.length; ++i) a[i].style.left = l; + } + if (cm.options.fixedGutter) + display.gutters.style.left = (comp + gutterW) + "px"; + } + + function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) return false; + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding); + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + return true; + } + return false; + } + + function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)); + } + function compensateForHScroll(display) { + return getRect(display.scroller).left - getRect(display.sizer).left; + } + + // DISPLAY DRAWING + + function updateDisplay(cm, changes, viewPort, forced) { + var oldFrom = cm.display.showingFrom, oldTo = cm.display.showingTo, updated; + var visible = visibleLines(cm.display, cm.doc, viewPort); + for (;;) { + if (!updateDisplayInner(cm, changes, visible, forced)) break; + forced = false; + updated = true; + updateSelection(cm); + updateScrollbars(cm); + + // Clip forced viewport to actual scrollable area + if (viewPort) + viewPort = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, + typeof viewPort == "number" ? viewPort : viewPort.top); + visible = visibleLines(cm.display, cm.doc, viewPort); + if (visible.from >= cm.display.showingFrom && visible.to <= cm.display.showingTo) + break; + changes = []; + } + + if (updated) { + signalLater(cm, "update", cm); + if (cm.display.showingFrom != oldFrom || cm.display.showingTo != oldTo) + signalLater(cm, "viewportChange", cm, cm.display.showingFrom, cm.display.showingTo); + } + return updated; + } + + // Uses a set of changes plus the current scroll position to + // determine which DOM updates have to be made, and makes the + // updates. + function updateDisplayInner(cm, changes, visible, forced) { + var display = cm.display, doc = cm.doc; + if (!display.wrapper.clientWidth) { + display.showingFrom = display.showingTo = doc.first; + display.viewOffset = 0; + return; + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!forced && changes.length == 0 && + visible.from > display.showingFrom && visible.to < display.showingTo) + return; + + if (maybeUpdateLineNumberWidth(cm)) + changes = [{from: doc.first, to: doc.first + doc.size}]; + var gutterW = display.sizer.style.marginLeft = display.gutters.offsetWidth + "px"; + display.scrollbarH.style.left = cm.options.fixedGutter ? gutterW : "0"; + + // Used to determine which lines need their line numbers updated + var positionsChangedFrom = Infinity; + if (cm.options.lineNumbers) + for (var i = 0; i < changes.length; ++i) + if (changes[i].diff) { positionsChangedFrom = changes[i].from; break; } + + var end = doc.first + doc.size; + var from = Math.max(visible.from - cm.options.viewportMargin, doc.first); + var to = Math.min(end, visible.to + cm.options.viewportMargin); + if (display.showingFrom < from && from - display.showingFrom < 20) from = Math.max(doc.first, display.showingFrom); + if (display.showingTo > to && display.showingTo - to < 20) to = Math.min(end, display.showingTo); + if (sawCollapsedSpans) { + from = lineNo(visualLine(doc, getLine(doc, from))); + while (to < end && lineIsHidden(doc, getLine(doc, to))) ++to; + } + + // Create a range of theoretically intact lines, and punch holes + // in that using the change info. + var intact = [{from: Math.max(display.showingFrom, doc.first), + to: Math.min(display.showingTo, end)}]; + if (intact[0].from >= intact[0].to) intact = []; + else intact = computeIntact(intact, changes); + // When merged lines are present, we might have to reduce the + // intact ranges because changes in continued fragments of the + // intact lines do require the lines to be redrawn. + if (sawCollapsedSpans) + for (var i = 0; i < intact.length; ++i) { + var range = intact[i], merged; + while (merged = collapsedSpanAtEnd(getLine(doc, range.to - 1))) { + var newTo = merged.find().from.line; + if (newTo > range.from) range.to = newTo; + else { intact.splice(i--, 1); break; } + } + } + + // Clip off the parts that won't be visible + var intactLines = 0; + for (var i = 0; i < intact.length; ++i) { + var range = intact[i]; + if (range.from < from) range.from = from; + if (range.to > to) range.to = to; + if (range.from >= range.to) intact.splice(i--, 1); + else intactLines += range.to - range.from; + } + if (!forced && intactLines == to - from && from == display.showingFrom && to == display.showingTo) { + updateViewOffset(cm); + return; + } + intact.sort(function(a, b) {return a.from - b.from;}); + + // Avoid crashing on IE's "unspecified error" when in iframes + try { + var focused = document.activeElement; + } catch(e) {} + if (intactLines < (to - from) * .7) display.lineDiv.style.display = "none"; + patchDisplay(cm, from, to, intact, positionsChangedFrom); + display.lineDiv.style.display = ""; + if (focused && document.activeElement != focused && focused.offsetHeight) focused.focus(); + + var different = from != display.showingFrom || to != display.showingTo || + display.lastSizeC != display.wrapper.clientHeight; + // This is just a bogus formula that detects when the editor is + // resized or the font size changes. + if (different) { + display.lastSizeC = display.wrapper.clientHeight; + startWorker(cm, 400); + } + display.showingFrom = from; display.showingTo = to; + + updateHeightsInViewport(cm); + updateViewOffset(cm); + + return true; + } + + function updateHeightsInViewport(cm) { + var display = cm.display; + var prevBottom = display.lineDiv.offsetTop; + for (var node = display.lineDiv.firstChild, height; node; node = node.nextSibling) if (node.lineObj) { + if (ie_lt8) { + var bot = node.offsetTop + node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = getRect(node); + height = box.bottom - box.top; + } + var diff = node.lineObj.height - height; + if (height < 2) height = textHeight(display); + if (diff > .001 || diff < -.001) { + updateLineHeight(node.lineObj, height); + var widgets = node.lineObj.widgets; + if (widgets) for (var i = 0; i < widgets.length; ++i) + widgets[i].height = widgets[i].node.offsetHeight; + } + } + } + + function updateViewOffset(cm) { + var off = cm.display.viewOffset = heightAtLine(cm, getLine(cm.doc, cm.display.showingFrom)); + // Position the mover div to align with the current virtual scroll position + cm.display.mover.style.top = off + "px"; + } + + function computeIntact(intact, changes) { + for (var i = 0, l = changes.length || 0; i < l; ++i) { + var change = changes[i], intact2 = [], diff = change.diff || 0; + for (var j = 0, l2 = intact.length; j < l2; ++j) { + var range = intact[j]; + if (change.to <= range.from && change.diff) { + intact2.push({from: range.from + diff, to: range.to + diff}); + } else if (change.to <= range.from || change.from >= range.to) { + intact2.push(range); + } else { + if (change.from > range.from) + intact2.push({from: range.from, to: change.from}); + if (change.to < range.to) + intact2.push({from: change.to + diff, to: range.to + diff}); + } + } + intact = intact2; + } + return intact; + } + + function getDimensions(cm) { + var d = cm.display, left = {}, width = {}; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + left[cm.options.gutters[i]] = n.offsetLeft; + width[cm.options.gutters[i]] = n.offsetWidth; + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth}; + } + + function patchDisplay(cm, from, to, intact, updateNumbersFrom) { + var dims = getDimensions(cm); + var display = cm.display, lineNumbers = cm.options.lineNumbers; + if (!intact.length && (!webkit || !cm.display.currentWheelTarget)) + removeChildren(display.lineDiv); + var container = display.lineDiv, cur = container.firstChild; + + function rm(node) { + var next = node.nextSibling; + if (webkit && mac && cm.display.currentWheelTarget == node) { + node.style.display = "none"; + node.lineObj = null; + } else { + node.parentNode.removeChild(node); + } + return next; + } + + var nextIntact = intact.shift(), lineN = from; + cm.doc.iter(from, to, function(line) { + if (nextIntact && nextIntact.to == lineN) nextIntact = intact.shift(); + if (lineIsHidden(cm.doc, line)) { + if (line.height != 0) updateLineHeight(line, 0); + if (line.widgets && cur.previousSibling) for (var i = 0; i < line.widgets.length; ++i) { + var w = line.widgets[i]; + if (w.showIfHidden) { + var prev = cur.previousSibling; + if (/pre/i.test(prev.nodeName)) { + var wrap = elt("div", null, null, "position: relative"); + prev.parentNode.replaceChild(wrap, prev); + wrap.appendChild(prev); + prev = wrap; + } + var wnode = prev.appendChild(elt("div", [w.node], "CodeMirror-linewidget")); + if (!w.handleMouseEvents) wnode.ignoreEvents = true; + positionLineWidget(w, wnode, prev, dims); + } + } + } else if (nextIntact && nextIntact.from <= lineN && nextIntact.to > lineN) { + // This line is intact. Skip to the actual node. Update its + // line number if needed. + while (cur.lineObj != line) cur = rm(cur); + if (lineNumbers && updateNumbersFrom <= lineN && cur.lineNumber) + setTextContent(cur.lineNumber, lineNumberFor(cm.options, lineN)); + cur = cur.nextSibling; + } else { + // For lines with widgets, make an attempt to find and reuse + // the existing element, so that widgets aren't needlessly + // removed and re-inserted into the dom + if (line.widgets) for (var j = 0, search = cur, reuse; search && j < 20; ++j, search = search.nextSibling) + if (search.lineObj == line && /div/i.test(search.nodeName)) { reuse = search; break; } + // This line needs to be generated. + var lineNode = buildLineElement(cm, line, lineN, dims, reuse); + if (lineNode != reuse) { + container.insertBefore(lineNode, cur); + } else { + while (cur != reuse) cur = rm(cur); + cur = cur.nextSibling; + } + + lineNode.lineObj = line; + } + ++lineN; + }); + while (cur) cur = rm(cur); + } + + function buildLineElement(cm, line, lineNo, dims, reuse) { + var lineElement = lineContent(cm, line); + var markers = line.gutterMarkers, display = cm.display, wrap; + + if (!cm.options.lineNumbers && !markers && !line.bgClass && !line.wrapClass && !line.widgets) + return lineElement; + + // Lines with gutter elements, widgets or a background class need + // to be wrapped again, and have the extra elements added to the + // wrapper div + + if (reuse) { + reuse.alignable = null; + var isOk = true, widgetsSeen = 0, insertBefore = null; + for (var n = reuse.firstChild, next; n; n = next) { + next = n.nextSibling; + if (!/\bCodeMirror-linewidget\b/.test(n.className)) { + reuse.removeChild(n); + } else { + for (var i = 0; i < line.widgets.length; ++i) { + var widget = line.widgets[i]; + if (widget.node == n.firstChild) { + if (!widget.above && !insertBefore) insertBefore = n; + positionLineWidget(widget, n, reuse, dims); + ++widgetsSeen; + break; + } + } + if (i == line.widgets.length) { isOk = false; break; } + } + } + reuse.insertBefore(lineElement, insertBefore); + if (isOk && widgetsSeen == line.widgets.length) { + wrap = reuse; + reuse.className = line.wrapClass || ""; + } + } + if (!wrap) { + wrap = elt("div", null, line.wrapClass, "position: relative"); + wrap.appendChild(lineElement); + } + // Kludge to make sure the styled element lies behind the selection (by z-index) + if (line.bgClass) + wrap.insertBefore(elt("div", null, line.bgClass + " CodeMirror-linebackground"), wrap.firstChild); + if (cm.options.lineNumbers || markers) { + var gutterWrap = wrap.insertBefore(elt("div", null, null, "position: absolute; left: " + + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"), + wrap.firstChild); + if (cm.options.fixedGutter) (wrap.alignable || (wrap.alignable = [])).push(gutterWrap); + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + wrap.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineNo), + "CodeMirror-linenumber CodeMirror-gutter-elt", + "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + + display.lineNumInnerWidth + "px")); + if (markers) + for (var k = 0; k < cm.options.gutters.length; ++k) { + var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; + if (found) + gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); + } + } + if (ie_lt8) wrap.style.zIndex = 2; + if (line.widgets && wrap != reuse) for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); + if (!widget.handleMouseEvents) node.ignoreEvents = true; + positionLineWidget(widget, node, wrap, dims); + if (widget.above) + wrap.insertBefore(node, cm.options.lineNumbers && line.height != 0 ? gutterWrap : lineElement); + else + wrap.appendChild(node); + signalLater(widget, "redraw"); + } + return wrap; + } + + function positionLineWidget(widget, node, wrap, dims) { + if (widget.noHScroll) { + (wrap.alignable || (wrap.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; + } + } + + // SELECTION / CURSOR + + function updateSelection(cm) { + var display = cm.display; + var collapsed = posEq(cm.doc.sel.from, cm.doc.sel.to); + if (collapsed || cm.options.showCursorWhenSelecting) + updateSelectionCursor(cm); + else + display.cursor.style.display = display.otherCursor.style.display = "none"; + if (!collapsed) + updateSelectionRange(cm); + else + display.selectionDiv.style.display = "none"; + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, cm.doc.sel.head, "div"); + var wrapOff = getRect(display.wrapper), lineOff = getRect(display.lineDiv); + display.inputDiv.style.top = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)) + "px"; + display.inputDiv.style.left = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)) + "px"; + } + } + + // No selection, plain cursor + function updateSelectionCursor(cm) { + var display = cm.display, pos = cursorCoords(cm, cm.doc.sel.head, "div"); + display.cursor.style.left = pos.left + "px"; + display.cursor.style.top = pos.top + "px"; + display.cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + display.cursor.style.display = ""; + + if (pos.other) { + display.otherCursor.style.display = ""; + display.otherCursor.style.left = pos.other.left + "px"; + display.otherCursor.style.top = pos.other.top + "px"; + display.otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } else { display.otherCursor.style.display = "none"; } + } + + // Highlight selection + function updateSelectionRange(cm) { + var display = cm.display, doc = cm.doc, sel = cm.doc.sel; + var fragment = document.createDocumentFragment(); + var clientWidth = display.lineSpace.offsetWidth, pl = paddingLeft(cm.display); + + function add(left, top, width, bottom) { + if (top < 0) top = 0; + fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + + "px; top: " + top + "px; width: " + (width == null ? clientWidth - left : width) + + "px; height: " + (bottom - top) + "px")); + } + + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length; + var start, end; + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias); + } + + iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { + var leftPos = coords(from, "left"), rightPos, left, right; + if (from == to) { + rightPos = leftPos; + left = right = leftPos.left; + } else { + rightPos = coords(to - 1, "right"); + if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } + left = leftPos.left; + right = rightPos.right; + } + if (fromArg == null && from == 0) left = pl; + if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part + add(left, leftPos.top, null, leftPos.bottom); + left = pl; + if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); + } + if (toArg == null && to == lineLen) right = clientWidth; + if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) + start = leftPos; + if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) + end = rightPos; + if (left < pl + 1) left = pl; + add(left, rightPos.top, right - left, rightPos.bottom); + }); + return {start: start, end: end}; + } + + if (sel.from.line == sel.to.line) { + drawForLine(sel.from.line, sel.from.ch, sel.to.ch); + } else { + var fromLine = getLine(doc, sel.from.line), toLine = getLine(doc, sel.to.line); + var singleVLine = visualLine(doc, fromLine) == visualLine(doc, toLine); + var leftEnd = drawForLine(sel.from.line, sel.from.ch, singleVLine ? fromLine.text.length : null).end; + var rightStart = drawForLine(sel.to.line, singleVLine ? 0 : null, sel.to.ch).start; + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); + add(pl, rightStart.top, rightStart.left, rightStart.bottom); + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); + } + } + if (leftEnd.bottom < rightStart.top) + add(pl, leftEnd.bottom, null, rightStart.top); + } + + removeChildrenAndAdd(display.selectionDiv, fragment); + display.selectionDiv.style.display = ""; + } + + // Cursor-blinking + function restartBlink(cm) { + if (!cm.state.focused) return; + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursor.style.visibility = display.otherCursor.style.visibility = ""; + display.blinker = setInterval(function() { + display.cursor.style.visibility = display.otherCursor.style.visibility = (on = !on) ? "" : "hidden"; + }, cm.options.cursorBlinkRate); + } + + // HIGHLIGHT WORKER + + function startWorker(cm, time) { + if (cm.doc.mode.startState && cm.doc.frontier < cm.display.showingTo) + cm.state.highlight.set(time, bind(highlightWorker, cm)); + } + + function highlightWorker(cm) { + var doc = cm.doc; + if (doc.frontier < doc.first) doc.frontier = doc.first; + if (doc.frontier >= cm.display.showingTo) return; + var end = +new Date + cm.options.workTime; + var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); + var changed = [], prevChange; + doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.showingTo + 500), function(line) { + if (doc.frontier >= cm.display.showingFrom) { // Visible + var oldStyles = line.styles; + line.styles = highlightLine(cm, line, state); + var ischange = !oldStyles || oldStyles.length != line.styles.length; + for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; + if (ischange) { + if (prevChange && prevChange.end == doc.frontier) prevChange.end++; + else changed.push(prevChange = {start: doc.frontier, end: doc.frontier + 1}); + } + line.stateAfter = copyState(doc.mode, state); + } else { + processLine(cm, line, state); + line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; + } + ++doc.frontier; + if (+new Date > end) { + startWorker(cm, cm.options.workDelay); + return true; + } + }); + if (changed.length) + operation(cm, function() { + for (var i = 0; i < changed.length; ++i) + regChange(this, changed[i].start, changed[i].end); + })(); + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(cm, n, precise) { + var minindent, minline, doc = cm.doc; + for (var search = n, lim = n - 100; search > lim; --search) { + if (search <= doc.first) return doc.first; + var line = getLine(doc, search - 1); + if (line.stateAfter && (!precise || search <= doc.frontier)) return search; + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline; + } + + function getStateBefore(cm, n, precise) { + var doc = cm.doc, display = cm.display; + if (!doc.mode.startState) return true; + var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; + if (!state) state = startState(doc.mode); + else state = copyState(doc.mode, state); + doc.iter(pos, n, function(line) { + processLine(cm, line, state); + var save = pos == n - 1 || pos % 5 == 0 || pos >= display.showingFrom && pos < display.showingTo; + line.stateAfter = save ? copyState(doc.mode, state) : null; + ++pos; + }); + return state; + } + + // POSITION MEASUREMENT + + function paddingTop(display) {return display.lineSpace.offsetTop;} + function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} + function paddingLeft(display) { + var e = removeChildrenAndAdd(display.measure, elt("pre", null, null, "text-align: left")).appendChild(elt("span", "x")); + return e.offsetLeft; + } + + function measureChar(cm, line, ch, data, bias) { + var dir = -1; + data = data || measureLine(cm, line); + + for (var pos = ch;; pos += dir) { + var r = data[pos]; + if (r) break; + if (dir < 0 && pos == 0) dir = 1; + } + bias = pos > ch ? "left" : pos < ch ? "right" : bias; + if (bias == "left" && r.leftSide) r = r.leftSide; + else if (bias == "right" && r.rightSide) r = r.rightSide; + return {left: pos < ch ? r.right : r.left, + right: pos > ch ? r.left : r.right, + top: r.top, + bottom: r.bottom}; + } + + function findCachedMeasurement(cm, line) { + var cache = cm.display.measureLineCache; + for (var i = 0; i < cache.length; ++i) { + var memo = cache[i]; + if (memo.text == line.text && memo.markedSpans == line.markedSpans && + cm.display.scroller.clientWidth == memo.width && + memo.classes == line.textClass + "|" + line.bgClass + "|" + line.wrapClass) + return memo; + } + } + + function clearCachedMeasurement(cm, line) { + var exists = findCachedMeasurement(cm, line); + if (exists) exists.text = exists.measure = exists.markedSpans = null; + } + + function measureLine(cm, line) { + // First look in the cache + var cached = findCachedMeasurement(cm, line); + if (cached) return cached.measure; + + // Failing that, recompute and store result in cache + var measure = measureLineInner(cm, line); + var cache = cm.display.measureLineCache; + var memo = {text: line.text, width: cm.display.scroller.clientWidth, + markedSpans: line.markedSpans, measure: measure, + classes: line.textClass + "|" + line.bgClass + "|" + line.wrapClass}; + if (cache.length == 16) cache[++cm.display.measureLineCachePos % 16] = memo; + else cache.push(memo); + return measure; + } + + function measureLineInner(cm, line) { + var display = cm.display, measure = emptyArray(line.text.length); + var pre = lineContent(cm, line, measure, true); + + // IE does not cache element positions of inline elements between + // calls to getBoundingClientRect. This makes the loop below, + // which gathers the positions of all the characters on the line, + // do an amount of layout work quadratic to the number of + // characters. When line wrapping is off, we try to improve things + // by first subdividing the line into a bunch of inline blocks, so + // that IE can reuse most of the layout information from caches + // for those blocks. This does interfere with line wrapping, so it + // doesn't work when wrapping is on, but in that case the + // situation is slightly better, since IE does cache line-wrapping + // information and only recomputes per-line. + if (ie && !ie_lt8 && !cm.options.lineWrapping && pre.childNodes.length > 100) { + var fragment = document.createDocumentFragment(); + var chunk = 10, n = pre.childNodes.length; + for (var i = 0, chunks = Math.ceil(n / chunk); i < chunks; ++i) { + var wrap = elt("div", null, null, "display: inline-block"); + for (var j = 0; j < chunk && n; ++j) { + wrap.appendChild(pre.firstChild); + --n; + } + fragment.appendChild(wrap); + } + pre.appendChild(fragment); + } + + removeChildrenAndAdd(display.measure, pre); + + var outer = getRect(display.lineDiv); + var vranges = [], data = emptyArray(line.text.length), maxBot = pre.offsetHeight; + // Work around an IE7/8 bug where it will sometimes have randomly + // replaced our pre with a clone at this point. + if (ie_lt9 && display.measure.first != pre) + removeChildrenAndAdd(display.measure, pre); + + function measureRect(rect) { + var top = rect.top - outer.top, bot = rect.bottom - outer.top; + if (bot > maxBot) bot = maxBot; + if (top < 0) top = 0; + for (var i = vranges.length - 2; i >= 0; i -= 2) { + var rtop = vranges[i], rbot = vranges[i+1]; + if (rtop > bot || rbot < top) continue; + if (rtop <= top && rbot >= bot || + top <= rtop && bot >= rbot || + Math.min(bot, rbot) - Math.max(top, rtop) >= (bot - top) >> 1) { + vranges[i] = Math.min(top, rtop); + vranges[i+1] = Math.max(bot, rbot); + break; + } + } + if (i < 0) { i = vranges.length; vranges.push(top, bot); } + return {left: rect.left - outer.left, + right: rect.right - outer.left, + top: i, bottom: null}; + } + function finishRect(rect) { + rect.bottom = vranges[rect.top+1]; + rect.top = vranges[rect.top]; + } + + for (var i = 0, cur; i < measure.length; ++i) if (cur = measure[i]) { + var node = cur, rect = null; + // A widget might wrap, needs special care + if (/\bCodeMirror-widget\b/.test(cur.className) && cur.getClientRects) { + if (cur.firstChild.nodeType == 1) node = cur.firstChild; + var rects = node.getClientRects(); + if (rects.length > 1) { + rect = data[i] = measureRect(rects[0]); + rect.rightSide = measureRect(rects[rects.length - 1]); + } + } + if (!rect) rect = data[i] = measureRect(getRect(node)); + if (cur.measureRight) rect.right = getRect(cur.measureRight).left; + if (cur.leftSide) rect.leftSide = measureRect(getRect(cur.leftSide)); + } + for (var i = 0, cur; i < data.length; ++i) if (cur = data[i]) { + finishRect(cur); + if (cur.leftSide) finishRect(cur.leftSide); + if (cur.rightSide) finishRect(cur.rightSide); + } + return data; + } + + function measureLineWidth(cm, line) { + var hasBadSpan = false; + if (line.markedSpans) for (var i = 0; i < line.markedSpans; ++i) { + var sp = line.markedSpans[i]; + if (sp.collapsed && (sp.to == null || sp.to == line.text.length)) hasBadSpan = true; + } + var cached = !hasBadSpan && findCachedMeasurement(cm, line); + if (cached) return measureChar(cm, line, line.text.length, cached.measure, "right").right; + + var pre = lineContent(cm, line, null, true); + var end = pre.appendChild(zeroWidthElement(cm.display.measure)); + removeChildrenAndAdd(cm.display.measure, pre); + return getRect(end).right - getRect(cm.display.lineDiv).left; + } + + function clearCaches(cm) { + cm.display.measureLineCache.length = cm.display.measureLineCachePos = 0; + cm.display.cachedCharWidth = cm.display.cachedTextHeight = null; + if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; + cm.display.lineNumChars = null; + } + + function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } + function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } + + // Context is one of "line", "div" (display.lineDiv), "local"/null (editor), or "page" + function intoCoordSystem(cm, lineObj, rect, context) { + if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { + var size = widgetHeight(lineObj.widgets[i]); + rect.top += size; rect.bottom += size; + } + if (context == "line") return rect; + if (!context) context = "local"; + var yOff = heightAtLine(cm, lineObj); + if (context == "local") yOff += paddingTop(cm.display); + else yOff -= cm.display.viewOffset; + if (context == "page" || context == "window") { + var lOff = getRect(cm.display.lineSpace); + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); + rect.left += xOff; rect.right += xOff; + } + rect.top += yOff; rect.bottom += yOff; + return rect; + } + + // Context may be "window", "page", "div", or "local"/null + // Result is in "div" coords + function fromCoordSystem(cm, coords, context) { + if (context == "div") return coords; + var left = coords.left, top = coords.top; + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX(); + top -= pageScrollY(); + } else if (context == "local" || !context) { + var localBox = getRect(cm.display.sizer); + left += localBox.left; + top += localBox.top; + } + + var lineSpaceBox = getRect(cm.display.lineSpace); + return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; + } + + function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) lineObj = getLine(cm.doc, pos.line); + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, null, bias), context); + } + + function cursorCoords(cm, pos, context, lineObj, measurement) { + lineObj = lineObj || getLine(cm.doc, pos.line); + if (!measurement) measurement = measureLine(cm, lineObj); + function get(ch, right) { + var m = measureChar(cm, lineObj, ch, measurement, right ? "right" : "left"); + if (right) m.left = m.right; else m.right = m.left; + return intoCoordSystem(cm, lineObj, m, context); + } + function getBidi(ch, partPos) { + var part = order[partPos], right = part.level % 2; + if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { + part = order[--partPos]; + ch = bidiRight(part) - (part.level % 2 ? 0 : 1); + right = true; + } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { + part = order[++partPos]; + ch = bidiLeft(part) - part.level % 2; + right = false; + } + if (right && ch == part.to && ch > part.from) return get(ch - 1); + return get(ch, right); + } + var order = getOrder(lineObj), ch = pos.ch; + if (!order) return get(ch); + var partPos = getBidiPartAt(order, ch); + var val = getBidi(ch, partPos); + if (bidiOther != null) val.other = getBidi(ch, bidiOther); + return val; + } + + function PosWithInfo(line, ch, outside, xRel) { + var pos = new Pos(line, ch); + pos.xRel = xRel; + if (outside) pos.outside = true; + return pos; + } + + // Coords must be lineSpace-local + function coordsChar(cm, x, y) { + var doc = cm.doc; + y += cm.display.viewOffset; + if (y < 0) return PosWithInfo(doc.first, 0, true, -1); + var lineNo = lineAtHeight(doc, y), last = doc.first + doc.size - 1; + if (lineNo > last) + return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); + if (x < 0) x = 0; + + for (;;) { + var lineObj = getLine(doc, lineNo); + var found = coordsCharInner(cm, lineObj, lineNo, x, y); + var merged = collapsedSpanAtEnd(lineObj); + var mergedPos = merged && merged.find(); + if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) + lineNo = mergedPos.to.line; + else + return found; + } + } + + function coordsCharInner(cm, lineObj, lineNo, x, y) { + var innerOff = y - heightAtLine(cm, lineObj); + var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; + var measurement = measureLine(cm, lineObj); + + function getX(ch) { + var sp = cursorCoords(cm, Pos(lineNo, ch), "line", + lineObj, measurement); + wrongLine = true; + if (innerOff > sp.bottom) return sp.left - adjust; + else if (innerOff < sp.top) return sp.left + adjust; + else wrongLine = false; + return sp.left; + } + + var bidi = getOrder(lineObj), dist = lineObj.text.length; + var from = lineLeft(lineObj), to = lineRight(lineObj); + var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; + + if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); + // Do a binary search between these bounds. + for (;;) { + if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { + var ch = x < fromX || x - fromX <= toX - x ? from : to; + var xDiff = x - (ch == from ? fromX : toX); + while (isExtendingChar.test(lineObj.text.charAt(ch))) ++ch; + var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside, + xDiff < 0 ? -1 : xDiff ? 1 : 0); + return pos; + } + var step = Math.ceil(dist / 2), middle = from + step; + if (bidi) { + middle = from; + for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); + } + var middleX = getX(middle); + if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} + else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} + } + } + + var measureText; + function textHeight(display) { + if (display.cachedTextHeight != null) return display.cachedTextHeight; + if (measureText == null) { + measureText = elt("pre"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) display.cachedTextHeight = height; + removeChildren(display.measure); + return height || 1; + } + + function charWidth(display) { + if (display.cachedCharWidth != null) return display.cachedCharWidth; + var anchor = elt("span", "x"); + var pre = elt("pre", [anchor]); + removeChildrenAndAdd(display.measure, pre); + var width = anchor.offsetWidth; + if (width > 2) display.cachedCharWidth = width; + return width || 10; + } + + // OPERATIONS + + // Operations are used to wrap changes in such a way that each + // change won't have to update the cursor and display (which would + // be awkward, slow, and error-prone), but instead updates are + // batched and then all combined and executed at once. + + var nextOpId = 0; + function startOperation(cm) { + cm.curOp = { + // An array of ranges of lines that have to be updated. See + // updateDisplay. + changes: [], + forceUpdate: false, + updateInput: null, + userSelChange: null, + textChanged: null, + selectionChanged: false, + cursorActivity: false, + updateMaxLine: false, + updateScrollPos: false, + id: ++nextOpId + }; + if (!delayedCallbackDepth++) delayedCallbacks = []; + } + + function endOperation(cm) { + var op = cm.curOp, doc = cm.doc, display = cm.display; + cm.curOp = null; + + if (op.updateMaxLine) computeMaxLength(cm); + if (display.maxLineChanged && !cm.options.lineWrapping && display.maxLine) { + var width = measureLineWidth(cm, display.maxLine); + display.sizer.style.minWidth = Math.max(0, width + 3 + scrollerCutOff) + "px"; + display.maxLineChanged = false; + var maxScrollLeft = Math.max(0, display.sizer.offsetLeft + display.sizer.offsetWidth - display.scroller.clientWidth); + if (maxScrollLeft < doc.scrollLeft && !op.updateScrollPos) + setScrollLeft(cm, Math.min(display.scroller.scrollLeft, maxScrollLeft), true); + } + var newScrollPos, updated; + if (op.updateScrollPos) { + newScrollPos = op.updateScrollPos; + } else if (op.selectionChanged && display.scroller.clientHeight) { // don't rescroll if not visible + var coords = cursorCoords(cm, doc.sel.head); + newScrollPos = calculateScrollPos(cm, coords.left, coords.top, coords.left, coords.bottom); + } + if (op.changes.length || op.forceUpdate || newScrollPos && newScrollPos.scrollTop != null) { + updated = updateDisplay(cm, op.changes, newScrollPos && newScrollPos.scrollTop, op.forceUpdate); + if (cm.display.scroller.offsetHeight) cm.doc.scrollTop = cm.display.scroller.scrollTop; + } + if (!updated && op.selectionChanged) updateSelection(cm); + if (op.updateScrollPos) { + display.scroller.scrollTop = display.scrollbarV.scrollTop = doc.scrollTop = newScrollPos.scrollTop; + display.scroller.scrollLeft = display.scrollbarH.scrollLeft = doc.scrollLeft = newScrollPos.scrollLeft; + alignHorizontally(cm); + if (op.scrollToPos) + scrollPosIntoView(cm, clipPos(cm.doc, op.scrollToPos), op.scrollToPosMargin); + } else if (newScrollPos) { + scrollCursorIntoView(cm); + } + if (op.selectionChanged) restartBlink(cm); + + if (cm.state.focused && op.updateInput) + resetInput(cm, op.userSelChange); + + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; + if (hidden) for (var i = 0; i < hidden.length; ++i) + if (!hidden[i].lines.length) signal(hidden[i], "hide"); + if (unhidden) for (var i = 0; i < unhidden.length; ++i) + if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); + + var delayed; + if (!--delayedCallbackDepth) { + delayed = delayedCallbacks; + delayedCallbacks = null; + } + if (op.textChanged) + signal(cm, "change", cm, op.textChanged); + if (op.cursorActivity) signal(cm, "cursorActivity", cm); + if (delayed) for (var i = 0; i < delayed.length; ++i) delayed[i](); + } + + // Wraps a function in an operation. Returns the wrapped function. + function operation(cm1, f) { + return function() { + var cm = cm1 || this, withOp = !cm.curOp; + if (withOp) startOperation(cm); + try { var result = f.apply(cm, arguments); } + finally { if (withOp) endOperation(cm); } + return result; + }; + } + function docOperation(f) { + return function() { + var withOp = this.cm && !this.cm.curOp, result; + if (withOp) startOperation(this.cm); + try { result = f.apply(this, arguments); } + finally { if (withOp) endOperation(this.cm); } + return result; + }; + } + function runInOp(cm, f) { + var withOp = !cm.curOp, result; + if (withOp) startOperation(cm); + try { result = f(); } + finally { if (withOp) endOperation(cm); } + return result; + } + + function regChange(cm, from, to, lendiff) { + if (from == null) from = cm.doc.first; + if (to == null) to = cm.doc.first + cm.doc.size; + cm.curOp.changes.push({from: from, to: to, diff: lendiff}); + } + + // INPUT HANDLING + + function slowPoll(cm) { + if (cm.display.pollingFast) return; + cm.display.poll.set(cm.options.pollInterval, function() { + readInput(cm); + if (cm.state.focused) slowPoll(cm); + }); + } + + function fastPoll(cm) { + var missed = false; + cm.display.pollingFast = true; + function p() { + var changed = readInput(cm); + if (!changed && !missed) {missed = true; cm.display.poll.set(60, p);} + else {cm.display.pollingFast = false; slowPoll(cm);} + } + cm.display.poll.set(20, p); + } + + // prevInput is a hack to work with IME. If we reset the textarea + // on every change, that breaks IME. So we look for changes + // compared to the previous content instead. (Modern browsers have + // events that indicate IME taking place, but these are not widely + // supported or compatible enough yet to rely on.) + function readInput(cm) { + var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc, sel = doc.sel; + if (!cm.state.focused || hasSelection(input) || isReadOnly(cm) || cm.state.disableInput) return false; + var text = input.value; + if (text == prevInput && posEq(sel.from, sel.to)) return false; + if (ie && !ie_lt9 && cm.display.inputHasSelection === text) { + resetInput(cm, true); + return false; + } + + var withOp = !cm.curOp; + if (withOp) startOperation(cm); + sel.shift = false; + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; + var from = sel.from, to = sel.to; + if (same < prevInput.length) + from = Pos(from.line, from.ch - (prevInput.length - same)); + else if (cm.state.overwrite && posEq(from, to) && !cm.state.pasteIncoming) + to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + (text.length - same))); + + var updateInput = cm.curOp.updateInput; + var changeEvent = {from: from, to: to, text: splitLines(text.slice(same)), + origin: cm.state.pasteIncoming ? "paste" : "+input"}; + makeChange(cm.doc, changeEvent, "end"); + cm.curOp.updateInput = updateInput; + signalLater(cm, "inputRead", cm, changeEvent); + + if (text.length > 1000 || text.indexOf("\n") > -1) input.value = cm.display.prevInput = ""; + else cm.display.prevInput = text; + if (withOp) endOperation(cm); + cm.state.pasteIncoming = false; + return true; + } + + function resetInput(cm, user) { + var minimal, selected, doc = cm.doc; + if (!posEq(doc.sel.from, doc.sel.to)) { + cm.display.prevInput = ""; + minimal = hasCopyEvent && + (doc.sel.to.line - doc.sel.from.line > 100 || (selected = cm.getSelection()).length > 1000); + var content = minimal ? "-" : selected || cm.getSelection(); + cm.display.input.value = content; + if (cm.state.focused) selectInput(cm.display.input); + if (ie && !ie_lt9) cm.display.inputHasSelection = content; + } else if (user) { + cm.display.prevInput = cm.display.input.value = ""; + if (ie && !ie_lt9) cm.display.inputHasSelection = null; + } + cm.display.inaccurateSelection = minimal; + } + + function focusInput(cm) { + if (cm.options.readOnly != "nocursor" && (!mobile || document.activeElement != cm.display.input)) + cm.display.input.focus(); + } + + function isReadOnly(cm) { + return cm.options.readOnly || cm.doc.cantEdit; + } + + // EVENT HANDLERS + + function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + if (ie) + on(d.scroller, "dblclick", operation(cm, function(e) { + if (signalDOMEvent(cm, e)) return; + var pos = posFromMouse(cm, e); + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; + e_preventDefault(e); + var word = findWordAt(getLine(cm.doc, pos.line).text, pos); + extendSelection(cm.doc, word.from, word.to); + })); + else + on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); + on(d.lineSpace, "selectstart", function(e) { + if (!eventInWidget(d, e)) e_preventDefault(e); + }); + // Gecko browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for Gecko. + if (!captureMiddleClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); + + on(d.scroller, "scroll", function() { + if (d.scroller.clientHeight) { + setScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + } + }); + on(d.scrollbarV, "scroll", function() { + if (d.scroller.clientHeight) setScrollTop(cm, d.scrollbarV.scrollTop); + }); + on(d.scrollbarH, "scroll", function() { + if (d.scroller.clientHeight) setScrollLeft(cm, d.scrollbarH.scrollLeft); + }); + + on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); + on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); + + function reFocus() { if (cm.state.focused) setTimeout(bind(focusInput, cm), 0); } + on(d.scrollbarH, "mousedown", reFocus); + on(d.scrollbarV, "mousedown", reFocus); + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); + + var resizeTimer; + function onResize() { + if (resizeTimer == null) resizeTimer = setTimeout(function() { + resizeTimer = null; + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = knownScrollbarWidth = null; + clearCaches(cm); + runInOp(cm, bind(regChange, cm)); + }, 100); + } + on(window, "resize", onResize); + // Above handler holds on to the editor and its data structures. + // Here we poll to unregister it when the editor is no longer in + // the document, so that it can be garbage-collected. + function unregister() { + for (var p = d.wrapper.parentNode; p && p != document.body; p = p.parentNode) {} + if (p) setTimeout(unregister, 5000); + else off(window, "resize", onResize); + } + setTimeout(unregister, 5000); + + on(d.input, "keyup", operation(cm, function(e) { + if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return; + if (e.keyCode == 16) cm.doc.sel.shift = false; + })); + on(d.input, "input", bind(fastPoll, cm)); + on(d.input, "keydown", operation(cm, onKeyDown)); + on(d.input, "keypress", operation(cm, onKeyPress)); + on(d.input, "focus", bind(onFocus, cm)); + on(d.input, "blur", bind(onBlur, cm)); + + function drag_(e) { + if (signalDOMEvent(cm, e) || cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e))) return; + e_stop(e); + } + if (cm.options.dragDrop) { + on(d.scroller, "dragstart", function(e){onDragStart(cm, e);}); + on(d.scroller, "dragenter", drag_); + on(d.scroller, "dragover", drag_); + on(d.scroller, "drop", operation(cm, onDrop)); + } + on(d.scroller, "paste", function(e){ + if (eventInWidget(d, e)) return; + focusInput(cm); + fastPoll(cm); + }); + on(d.input, "paste", function() { + cm.state.pasteIncoming = true; + fastPoll(cm); + }); + + function prepareCopy() { + if (d.inaccurateSelection) { + d.prevInput = ""; + d.inaccurateSelection = false; + d.input.value = cm.getSelection(); + selectInput(d.input); + } + } + on(d.input, "cut", prepareCopy); + on(d.input, "copy", prepareCopy); + + // Needed to handle Tab key in KHTML + if (khtml) on(d.sizer, "mouseup", function() { + if (document.activeElement == d.input) d.input.blur(); + focusInput(cm); + }); + } + + function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || n.ignoreEvents || n.parentNode == display.sizer && n != display.mover) return true; + } + } + + function posFromMouse(cm, e, liberal) { + var display = cm.display; + if (!liberal) { + var target = e_target(e); + if (target == display.scrollbarH || target == display.scrollbarH.firstChild || + target == display.scrollbarV || target == display.scrollbarV.firstChild || + target == display.scrollbarFiller || target == display.gutterFiller) return null; + } + var x, y, space = getRect(display.lineSpace); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX; y = e.clientY; } catch (e) { return null; } + return coordsChar(cm, x - space.left, y - space.top); + } + + var lastClick, lastDoubleClick; + function onMouseDown(e) { + if (signalDOMEvent(this, e)) return; + var cm = this, display = cm.display, doc = cm.doc, sel = doc.sel; + sel.shift = e.shiftKey; + + if (eventInWidget(display, e)) { + if (!webkit) { + display.scroller.draggable = false; + setTimeout(function(){display.scroller.draggable = true;}, 100); + } + return; + } + if (clickInGutter(cm, e)) return; + var start = posFromMouse(cm, e); + + switch (e_button(e)) { + case 3: + if (captureMiddleClick) onContextMenu.call(cm, cm, e); + return; + case 2: + if (start) extendSelection(cm.doc, start); + setTimeout(bind(focusInput, cm), 20); + e_preventDefault(e); + return; + } + // For button 1, if it was clicked inside the editor + // (posFromMouse returning non-null), we have to adjust the + // selection. + if (!start) {if (e_target(e) == display.scroller) e_preventDefault(e); return;} + + if (!cm.state.focused) onFocus(cm); + + var now = +new Date, type = "single"; + if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) { + type = "triple"; + e_preventDefault(e); + setTimeout(bind(focusInput, cm), 20); + selectLine(cm, start.line); + } else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) { + type = "double"; + lastDoubleClick = {time: now, pos: start}; + e_preventDefault(e); + var word = findWordAt(getLine(doc, start.line).text, start); + extendSelection(cm.doc, word.from, word.to); + } else { lastClick = {time: now, pos: start}; } + + var last = start; + if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && !posEq(sel.from, sel.to) && + !posLess(start, sel.from) && !posLess(sel.to, start) && type == "single") { + var dragEnd = operation(cm, function(e2) { + if (webkit) display.scroller.draggable = false; + cm.state.draggingText = false; + off(document, "mouseup", dragEnd); + off(display.scroller, "drop", dragEnd); + if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { + e_preventDefault(e2); + extendSelection(cm.doc, start); + focusInput(cm); + } + }); + // Let the drag handler handle this. + if (webkit) display.scroller.draggable = true; + cm.state.draggingText = dragEnd; + // IE's approach to draggable + if (display.scroller.dragDrop) display.scroller.dragDrop(); + on(document, "mouseup", dragEnd); + on(display.scroller, "drop", dragEnd); + return; + } + e_preventDefault(e); + if (type == "single") extendSelection(cm.doc, clipPos(doc, start)); + + var startstart = sel.from, startend = sel.to, lastPos = start; + + function doSelect(cur) { + if (posEq(lastPos, cur)) return; + lastPos = cur; + + if (type == "single") { + extendSelection(cm.doc, clipPos(doc, start), cur); + return; + } + + startstart = clipPos(doc, startstart); + startend = clipPos(doc, startend); + if (type == "double") { + var word = findWordAt(getLine(doc, cur.line).text, cur); + if (posLess(cur, startstart)) extendSelection(cm.doc, word.from, startend); + else extendSelection(cm.doc, startstart, word.to); + } else if (type == "triple") { + if (posLess(cur, startstart)) extendSelection(cm.doc, startend, clipPos(doc, Pos(cur.line, 0))); + else extendSelection(cm.doc, startstart, clipPos(doc, Pos(cur.line + 1, 0))); + } + } + + var editorSize = getRect(display.wrapper); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true); + if (!cur) return; + if (!posEq(cur, last)) { + if (!cm.state.focused) onFocus(cm); + last = cur; + doSelect(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) + setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) setTimeout(operation(cm, function() { + if (counter != curCount) return; + display.scroller.scrollTop += outside; + extend(e); + }), 50); + } + } + + function done(e) { + counter = Infinity; + e_preventDefault(e); + focusInput(cm); + off(document, "mousemove", move); + off(document, "mouseup", up); + } + + var move = operation(cm, function(e) { + if (!ie && !e_button(e)) done(e); + else extend(e); + }); + var up = operation(cm, done); + on(document, "mousemove", move); + on(document, "mouseup", up); + } + + function clickInGutter(cm, e) { + var display = cm.display; + try { var mX = e.clientX, mY = e.clientY; } + catch(e) { return false; } + + if (mX >= Math.floor(getRect(display.gutters).right)) return false; + e_preventDefault(e); + if (!hasHandler(cm, "gutterClick")) return true; + + var lineBox = getRect(display.lineDiv); + if (mY > lineBox.bottom) return true; + mY -= lineBox.top - display.viewOffset; + + for (var i = 0; i < cm.options.gutters.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && getRect(g).right >= mX) { + var line = lineAtHeight(cm.doc, mY); + var gutter = cm.options.gutters[i]; + signalLater(cm, "gutterClick", cm, line, gutter, e); + break; + } + } + return true; + } + + // Kludge to work around strange IE behavior where it'll sometimes + // re-fire a series of drag-related events right after the drop (#1551) + var lastDrop = 0; + + function onDrop(e) { + var cm = this; + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e) || (cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e)))) + return; + e_preventDefault(e); + if (ie) lastDrop = +new Date; + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; + if (!pos || isReadOnly(cm)) return; + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var loadFile = function(file, i) { + var reader = new FileReader; + reader.onload = function() { + text[i] = reader.result; + if (++read == n) { + pos = clipPos(cm.doc, pos); + makeChange(cm.doc, {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}, "around"); + } + }; + reader.readAsText(file); + }; + for (var i = 0; i < n; ++i) loadFile(files[i], i); + } else { + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && !(posLess(pos, cm.doc.sel.from) || posLess(cm.doc.sel.to, pos))) { + cm.state.draggingText(e); + // Ensure the editor is re-focused + setTimeout(bind(focusInput, cm), 20); + return; + } + try { + var text = e.dataTransfer.getData("Text"); + if (text) { + var curFrom = cm.doc.sel.from, curTo = cm.doc.sel.to; + setSelection(cm.doc, pos, pos); + if (cm.state.draggingText) replaceRange(cm.doc, "", curFrom, curTo, "paste"); + cm.replaceSelection(text, null, "paste"); + focusInput(cm); + onFocus(cm); + } + } + catch(e){} + } + } + + function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; + + var txt = cm.getSelection(); + e.dataTransfer.setData("Text", txt); + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); + if (opera) { + img.width = img.height = 1; + cm.display.wrapper.appendChild(img); + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop; + } + e.dataTransfer.setDragImage(img, 0, 0); + if (opera) img.parentNode.removeChild(img); + } + } + + function setScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) return; + cm.doc.scrollTop = val; + if (!gecko) updateDisplay(cm, [], val); + if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; + if (cm.display.scrollbarV.scrollTop != val) cm.display.scrollbarV.scrollTop = val; + if (gecko) updateDisplay(cm, []); + startWorker(cm, 100); + } + function setScrollLeft(cm, val, isScroller) { + if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; + val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); + cm.doc.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; + if (cm.display.scrollbarH.scrollLeft != val) cm.display.scrollbarH.scrollLeft = val; + } + + // Since the delta values reported on mouse wheel events are + // unstandardized between browsers and even browser versions, and + // generally horribly unpredictable, this code starts by measuring + // the scroll effect that the first few mouse wheel events have, + // and, from that, detects the way it can convert deltas to pixel + // offsets afterwards. + // + // The reason we want to know the amount a wheel event will scroll + // is that it gives us a chance to update the display before the + // actual scrolling happens, reducing flickering. + + var wheelSamples = 0, wheelPixelsPerUnit = null; + // Fill in a browser-detected starting value on browsers where we + // know one. These don't have to be accurate -- the result of them + // being wrong would just be a slight flicker on the first wheel + // scroll (if it is large enough). + if (ie) wheelPixelsPerUnit = -.53; + else if (gecko) wheelPixelsPerUnit = 15; + else if (chrome) wheelPixelsPerUnit = -.7; + else if (safari) wheelPixelsPerUnit = -1/3; + + function onScrollWheel(cm, e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; + else if (dy == null) dy = e.wheelDelta; + + var display = cm.display, scroll = display.scroller; + // Quit if there's nothing to scroll here + if (!(dx && scroll.scrollWidth > scroll.clientWidth || + dy && scroll.scrollHeight > scroll.clientHeight)) return; + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + for (var cur = e.target; cur != scroll; cur = cur.parentNode) { + if (cur.lineObj) { + cm.display.currentWheelTarget = cur; + break; + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !opera && wheelPixelsPerUnit != null) { + if (dy) + setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); + setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); + e_preventDefault(e); + display.wheelStartX = null; // Abort measurement, if in progress + return; + } + + if (dy && wheelPixelsPerUnit != null) { + var pixels = dy * wheelPixelsPerUnit; + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; + if (pixels < 0) top = Math.max(0, top + pixels - 50); + else bot = Math.min(cm.doc.height, bot + pixels + 50); + updateDisplay(cm, [], {top: top, bottom: bot}); + } + + if (wheelSamples < 20) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; + display.wheelDX = dx; display.wheelDY = dy; + setTimeout(function() { + if (display.wheelStartX == null) return; + var movedX = scroll.scrollLeft - display.wheelStartX; + var movedY = scroll.scrollTop - display.wheelStartY; + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX); + display.wheelStartX = display.wheelStartY = null; + if (!sample) return; + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + display.wheelDX += dx; display.wheelDY += dy; + } + } + } + + function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) return false; + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + if (cm.display.pollingFast && readInput(cm)) cm.display.pollingFast = false; + var doc = cm.doc, prevShift = doc.sel.shift, done = false; + try { + if (isReadOnly(cm)) cm.state.suppressEdits = true; + if (dropShift) doc.sel.shift = false; + done = bound(cm) != Pass; + } finally { + doc.sel.shift = prevShift; + cm.state.suppressEdits = false; + } + return done; + } + + function allKeyMaps(cm) { + var maps = cm.state.keyMaps.slice(0); + if (cm.options.extraKeys) maps.push(cm.options.extraKeys); + maps.push(cm.options.keyMap); + return maps; + } + + var maybeTransition; + function handleKeyBinding(cm, e) { + // Handle auto keymap transitions + var startMap = getKeyMap(cm.options.keyMap), next = startMap.auto; + clearTimeout(maybeTransition); + if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() { + if (getKeyMap(cm.options.keyMap) == startMap) { + cm.options.keyMap = (next.call ? next.call(null, cm) : next); + keyMapChanged(cm); + } + }, 50); + + var name = keyName(e, true), handled = false; + if (!name) return false; + var keymaps = allKeyMaps(cm); + + if (e.shiftKey) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + handled = lookupKey("Shift-" + name, keymaps, function(b) {return doHandleBinding(cm, b, true);}) + || lookupKey(name, keymaps, function(b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) + return doHandleBinding(cm, b); + }); + } else { + handled = lookupKey(name, keymaps, function(b) { return doHandleBinding(cm, b); }); + } + + if (handled) { + e_preventDefault(e); + restartBlink(cm); + if (ie_lt9) { e.oldKeyCode = e.keyCode; e.keyCode = 0; } + signalLater(cm, "keyHandled", cm, name, e); + } + return handled; + } + + function handleCharBinding(cm, e, ch) { + var handled = lookupKey("'" + ch + "'", allKeyMaps(cm), + function(b) { return doHandleBinding(cm, b, true); }); + if (handled) { + e_preventDefault(e); + restartBlink(cm); + signalLater(cm, "keyHandled", cm, "'" + ch + "'", e); + } + return handled; + } + + var lastStoppedKey = null; + function onKeyDown(e) { + var cm = this; + if (!cm.state.focused) onFocus(cm); + if (ie && e.keyCode == 27) { e.returnValue = false; } + if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return; + var code = e.keyCode; + // IE does strange things with escape. + cm.doc.sel.shift = code == 16 || e.shiftKey; + // First give onKeyEvent option a chance to handle this. + var handled = handleKeyBinding(cm, e); + if (opera) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + cm.replaceSelection(""); + } + } + + function onKeyPress(e) { + var cm = this; + if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return; + var keyCode = e.keyCode, charCode = e.charCode; + if (opera && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} + if (((opera && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return; + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + if (this.options.electricChars && this.doc.mode.electricChars && + this.options.smartIndent && !isReadOnly(this) && + this.doc.mode.electricChars.indexOf(ch) > -1) + setTimeout(operation(cm, function() {indentLine(cm, cm.doc.sel.to.line, "smart");}), 75); + if (handleCharBinding(cm, e, ch)) return; + if (ie && !ie_lt9) cm.display.inputHasSelection = null; + fastPoll(cm); + } + + function onFocus(cm) { + if (cm.options.readOnly == "nocursor") return; + if (!cm.state.focused) { + signal(cm, "focus", cm); + cm.state.focused = true; + if (cm.display.wrapper.className.search(/\bCodeMirror-focused\b/) == -1) + cm.display.wrapper.className += " CodeMirror-focused"; + resetInput(cm, true); + } + slowPoll(cm); + restartBlink(cm); + } + function onBlur(cm) { + if (cm.state.focused) { + signal(cm, "blur", cm); + cm.state.focused = false; + cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-focused", ""); + } + clearInterval(cm.display.blinker); + setTimeout(function() {if (!cm.state.focused) cm.doc.sel.shift = false;}, 150); + } + + var detectingSelectAll; + function onContextMenu(cm, e) { + if (signalDOMEvent(cm, e, "contextmenu")) return; + var display = cm.display, sel = cm.doc.sel; + if (eventInWidget(display, e)) return; + + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; + if (!pos || opera) return; // Opera is difficult. + if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to)) + operation(cm, setSelection)(cm.doc, pos, pos); + + var oldCSS = display.input.style.cssText; + display.inputDiv.style.position = "absolute"; + display.input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + + "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: white; outline: none;" + + "border-width: 0; outline: none; overflow: hidden; opacity: .05; -ms-opacity: .05; filter: alpha(opacity=5);"; + focusInput(cm); + resetInput(cm, true); + // Adds "Select all" to context menu in FF + if (posEq(sel.from, sel.to)) display.input.value = display.prevInput = " "; + + function prepareSelectAllHack() { + if (display.input.selectionStart != null) { + var extval = display.input.value = " " + (posEq(sel.from, sel.to) ? "" : display.input.value); + display.prevInput = " "; + display.input.selectionStart = 1; display.input.selectionEnd = extval.length; + } + } + function rehide() { + display.inputDiv.style.position = "relative"; + display.input.style.cssText = oldCSS; + if (ie_lt9) display.scrollbarV.scrollTop = display.scroller.scrollTop = scrollPos; + slowPoll(cm); + + // Try to detect the user choosing select-all + if (display.input.selectionStart != null) { + if (!ie || ie_lt9) prepareSelectAllHack(); + clearTimeout(detectingSelectAll); + var i = 0, poll = function(){ + if (display.prevInput == " " && display.input.selectionStart == 0) + operation(cm, commands.selectAll)(cm); + else if (i++ < 10) detectingSelectAll = setTimeout(poll, 500); + else resetInput(cm); + }; + detectingSelectAll = setTimeout(poll, 200); + } + } + + if (ie && !ie_lt9) prepareSelectAllHack(); + if (captureMiddleClick) { + e_stop(e); + var mouseup = function() { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }; + on(window, "mouseup", mouseup); + } else { + setTimeout(rehide, 50); + } + } + + // UPDATING + + var changeEnd = CodeMirror.changeEnd = function(change) { + if (!change.text) return change.to; + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); + }; + + // Make sure a position will be valid after the given change. + function clipPostChange(doc, change, pos) { + if (!posLess(change.from, pos)) return clipPos(doc, pos); + var diff = (change.text.length - 1) - (change.to.line - change.from.line); + if (pos.line > change.to.line + diff) { + var preLine = pos.line - diff, lastLine = doc.first + doc.size - 1; + if (preLine > lastLine) return Pos(lastLine, getLine(doc, lastLine).text.length); + return clipToLen(pos, getLine(doc, preLine).text.length); + } + if (pos.line == change.to.line + diff) + return clipToLen(pos, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0) + + getLine(doc, change.to.line).text.length - change.to.ch); + var inside = pos.line - change.from.line; + return clipToLen(pos, change.text[inside].length + (inside ? 0 : change.from.ch)); + } + + // Hint can be null|"end"|"start"|"around"|{anchor,head} + function computeSelAfterChange(doc, change, hint) { + if (hint && typeof hint == "object") // Assumed to be {anchor, head} object + return {anchor: clipPostChange(doc, change, hint.anchor), + head: clipPostChange(doc, change, hint.head)}; + + if (hint == "start") return {anchor: change.from, head: change.from}; + + var end = changeEnd(change); + if (hint == "around") return {anchor: change.from, head: end}; + if (hint == "end") return {anchor: end, head: end}; + + // hint is null, leave the selection alone as much as possible + var adjustPos = function(pos) { + if (posLess(pos, change.from)) return pos; + if (!posLess(change.to, pos)) return end; + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; + if (pos.line == change.to.line) ch += end.ch - change.to.ch; + return Pos(line, ch); + }; + return {anchor: adjustPos(doc.sel.anchor), head: adjustPos(doc.sel.head)}; + } + + function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function() { this.canceled = true; } + }; + if (update) obj.update = function(from, to, text, origin) { + if (from) this.from = clipPos(doc, from); + if (to) this.to = clipPos(doc, to); + if (text) this.text = text; + if (origin !== undefined) this.origin = origin; + }; + signal(doc, "beforeChange", doc, obj); + if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); + + if (obj.canceled) return null; + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; + } + + // Replace the range from from to to by the strings in replacement. + // change is a {from, to, text [, origin]} object + function makeChange(doc, change, selUpdate, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, selUpdate, ignoreReadOnly); + if (doc.cm.state.suppressEdits) return; + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true); + if (!change) return; + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); + if (split) { + for (var i = split.length - 1; i >= 1; --i) + makeChangeNoReadonly(doc, {from: split[i].from, to: split[i].to, text: [""]}); + if (split.length) + makeChangeNoReadonly(doc, {from: split[0].from, to: split[0].to, text: change.text}, selUpdate); + } else { + makeChangeNoReadonly(doc, change, selUpdate); + } + } + + function makeChangeNoReadonly(doc, change, selUpdate) { + var selAfter = computeSelAfterChange(doc, change, selUpdate); + addToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); + var rebased = []; + + linkedDocs(doc, function(doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); + }); + } + + function makeChangeFromHistory(doc, type) { + if (doc.cm && doc.cm.state.suppressEdits) return; + + var hist = doc.history; + var event = (type == "undo" ? hist.done : hist.undone).pop(); + if (!event) return; + + var anti = {changes: [], anchorBefore: event.anchorAfter, headBefore: event.headAfter, + anchorAfter: event.anchorBefore, headAfter: event.headBefore, + generation: hist.generation}; + (type == "undo" ? hist.undone : hist.done).push(anti); + hist.generation = event.generation || ++hist.maxGeneration; + + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); + + for (var i = event.changes.length - 1; i >= 0; --i) { + var change = event.changes[i]; + change.origin = type; + if (filter && !filterChange(doc, change, false)) { + (type == "undo" ? hist.done : hist.undone).length = 0; + return; + } + + anti.changes.push(historyChangeFromChange(doc, change)); + + var after = i ? computeSelAfterChange(doc, change, null) + : {anchor: event.anchorBefore, head: event.headBefore}; + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); + var rebased = []; + + linkedDocs(doc, function(doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); + }); + } + } + + function shiftDoc(doc, distance) { + function shiftPos(pos) {return Pos(pos.line + distance, pos.ch);} + doc.first += distance; + if (doc.cm) regChange(doc.cm, doc.first, doc.first, distance); + doc.sel.head = shiftPos(doc.sel.head); doc.sel.anchor = shiftPos(doc.sel.anchor); + doc.sel.from = shiftPos(doc.sel.from); doc.sel.to = shiftPos(doc.sel.to); + } + + function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); + return; + } + if (change.from.line > doc.lastLine()) return; + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line); + shiftDoc(doc, shift); + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin}; + } + var last = doc.lastLine(); + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin}; + } + + change.removed = getBetween(doc, change.from, change.to); + + if (!selAfter) selAfter = computeSelAfterChange(doc, change, null); + if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans, selAfter); + else updateDoc(doc, change, spans, selAfter); + } + + function makeChangeSingleDocInEditor(cm, change, spans, selAfter) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to; + + var recomputeMaxLength = false, checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(doc, getLine(doc, from.line))); + doc.iter(checkWidthStart, to.line + 1, function(line) { + if (line == display.maxLine) { + recomputeMaxLength = true; + return true; + } + }); + } + + if (!posLess(doc.sel.head, change.from) && !posLess(change.to, doc.sel.head)) + cm.curOp.cursorActivity = true; + + updateDoc(doc, change, spans, selAfter, estimateHeight(cm)); + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function(line) { + var len = lineLength(doc, line); + if (len > display.maxLineLength) { + display.maxLine = line; + display.maxLineLength = len; + display.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) cm.curOp.updateMaxLine = true; + } + + // Adjust frontier, schedule worker + doc.frontier = Math.min(doc.frontier, from.line); + startWorker(cm, 400); + + var lendiff = change.text.length - (to.line - from.line) - 1; + // Remember that these lines changed, for updating the display + regChange(cm, from.line, to.line + 1, lendiff); + + if (hasHandler(cm, "change")) { + var changeObj = {from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin}; + if (cm.curOp.textChanged) { + for (var cur = cm.curOp.textChanged; cur.next; cur = cur.next) {} + cur.next = changeObj; + } else cm.curOp.textChanged = changeObj; + } + } + + function replaceRange(doc, code, from, to, origin) { + if (!to) to = from; + if (posLess(to, from)) { var tmp = to; to = from; from = tmp; } + if (typeof code == "string") code = splitLines(code); + makeChange(doc, {from: from, to: to, text: code, origin: origin}, null); + } + + // POSITION OBJECT + + function Pos(line, ch) { + if (!(this instanceof Pos)) return new Pos(line, ch); + this.line = line; this.ch = ch; + } + CodeMirror.Pos = Pos; + + function posEq(a, b) {return a.line == b.line && a.ch == b.ch;} + function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);} + function copyPos(x) {return Pos(x.line, x.ch);} + + // SELECTION + + function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} + function clipPos(doc, pos) { + if (pos.line < doc.first) return Pos(doc.first, 0); + var last = doc.first + doc.size - 1; + if (pos.line > last) return Pos(last, getLine(doc, last).text.length); + return clipToLen(pos, getLine(doc, pos.line).text.length); + } + function clipToLen(pos, linelen) { + var ch = pos.ch; + if (ch == null || ch > linelen) return Pos(pos.line, linelen); + else if (ch < 0) return Pos(pos.line, 0); + else return pos; + } + function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} + + // If shift is held, this will move the selection anchor. Otherwise, + // it'll set the whole selection. + function extendSelection(doc, pos, other, bias) { + if (doc.sel.shift || doc.sel.extend) { + var anchor = doc.sel.anchor; + if (other) { + var posBefore = posLess(pos, anchor); + if (posBefore != posLess(other, anchor)) { + anchor = pos; + pos = other; + } else if (posBefore != posLess(pos, other)) { + pos = other; + } + } + setSelection(doc, anchor, pos, bias); + } else { + setSelection(doc, pos, other || pos, bias); + } + if (doc.cm) doc.cm.curOp.userSelChange = true; + } + + function filterSelectionChange(doc, anchor, head) { + var obj = {anchor: anchor, head: head}; + signal(doc, "beforeSelectionChange", doc, obj); + if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); + obj.anchor = clipPos(doc, obj.anchor); obj.head = clipPos(doc, obj.head); + return obj; + } + + // Update the selection. Last two args are only used by + // updateDoc, since they have to be expressed in the line + // numbers before the update. + function setSelection(doc, anchor, head, bias, checkAtomic) { + if (!checkAtomic && hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) { + var filtered = filterSelectionChange(doc, anchor, head); + head = filtered.head; + anchor = filtered.anchor; + } + + var sel = doc.sel; + sel.goalColumn = null; + // Skip over atomic spans. + if (checkAtomic || !posEq(anchor, sel.anchor)) + anchor = skipAtomic(doc, anchor, bias, checkAtomic != "push"); + if (checkAtomic || !posEq(head, sel.head)) + head = skipAtomic(doc, head, bias, checkAtomic != "push"); + + if (posEq(sel.anchor, anchor) && posEq(sel.head, head)) return; + + sel.anchor = anchor; sel.head = head; + var inv = posLess(head, anchor); + sel.from = inv ? head : anchor; + sel.to = inv ? anchor : head; + + if (doc.cm) + doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = + doc.cm.curOp.cursorActivity = true; + + signalLater(doc, "cursorActivity", doc); + } + + function reCheckSelection(cm) { + setSelection(cm.doc, cm.doc.sel.from, cm.doc.sel.to, null, "push"); + } + + function skipAtomic(doc, pos, bias, mayClear) { + var flipped = false, curPos = pos; + var dir = bias || 1; + doc.cantEdit = false; + search: for (;;) { + var line = getLine(doc, curPos.line); + if (line.markedSpans) { + for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker; + if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) && + (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter"); + if (m.explicitlyCleared) { + if (!line.markedSpans) break; + else {--i; continue;} + } + } + if (!m.atomic) continue; + var newPos = m.find()[dir < 0 ? "from" : "to"]; + if (posEq(newPos, curPos)) { + newPos.ch += dir; + if (newPos.ch < 0) { + if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1)); + else newPos = null; + } else if (newPos.ch > line.text.length) { + if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0); + else newPos = null; + } + if (!newPos) { + if (flipped) { + // Driven in a corner -- no valid cursor position found at all + // -- try again *with* clearing, if we didn't already + if (!mayClear) return skipAtomic(doc, pos, bias, true); + // Otherwise, turn off editing until further notice, and return the start of the doc + doc.cantEdit = true; + return Pos(doc.first, 0); + } + flipped = true; newPos = pos; dir = -dir; + } + } + curPos = newPos; + continue search; + } + } + } + return curPos; + } + } + + // SCROLLING + + function scrollCursorIntoView(cm) { + var coords = scrollPosIntoView(cm, cm.doc.sel.head, cm.options.cursorScrollMargin); + if (!cm.state.focused) return; + var display = cm.display, box = getRect(display.sizer), doScroll = null; + if (coords.top + box.top < 0) doScroll = true; + else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; + if (doScroll != null && !phantom) { + var hidden = display.cursor.style.display == "none"; + if (hidden) { + display.cursor.style.display = ""; + display.cursor.style.left = coords.left + "px"; + display.cursor.style.top = (coords.top - display.viewOffset) + "px"; + } + display.cursor.scrollIntoView(doScroll); + if (hidden) display.cursor.style.display = "none"; + } + } + + function scrollPosIntoView(cm, pos, margin) { + if (margin == null) margin = 0; + for (;;) { + var changed = false, coords = cursorCoords(cm, pos); + var scrollPos = calculateScrollPos(cm, coords.left, coords.top - margin, coords.left, coords.bottom + margin); + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; + if (scrollPos.scrollTop != null) { + setScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; + } + if (!changed) return coords; + } + } + + function scrollIntoView(cm, x1, y1, x2, y2) { + var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); + if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); + if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); + } + + function calculateScrollPos(cm, x1, y1, x2, y2) { + var display = cm.display, snapMargin = textHeight(cm.display); + if (y1 < 0) y1 = 0; + var screen = display.scroller.clientHeight - scrollerCutOff, screentop = display.scroller.scrollTop, result = {}; + var docBottom = cm.doc.height + paddingVert(display); + var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; + if (y1 < screentop) { + result.scrollTop = atTop ? 0 : y1; + } else if (y2 > screentop + screen) { + var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); + if (newTop != screentop) result.scrollTop = newTop; + } + + var screenw = display.scroller.clientWidth - scrollerCutOff, screenleft = display.scroller.scrollLeft; + x1 += display.gutters.offsetWidth; x2 += display.gutters.offsetWidth; + var gutterw = display.gutters.offsetWidth; + var atLeft = x1 < gutterw + 10; + if (x1 < screenleft + gutterw || atLeft) { + if (atLeft) x1 = 0; + result.scrollLeft = Math.max(0, x1 - 10 - gutterw); + } else if (x2 > screenw + screenleft - 3) { + result.scrollLeft = x2 + 10 - screenw; + } + return result; + } + + function updateScrollPos(cm, left, top) { + cm.curOp.updateScrollPos = {scrollLeft: left == null ? cm.doc.scrollLeft : left, + scrollTop: top == null ? cm.doc.scrollTop : top}; + } + + function addToScrollPos(cm, left, top) { + var pos = cm.curOp.updateScrollPos || (cm.curOp.updateScrollPos = {scrollLeft: cm.doc.scrollLeft, scrollTop: cm.doc.scrollTop}); + var scroll = cm.display.scroller; + pos.scrollTop = Math.max(0, Math.min(scroll.scrollHeight - scroll.clientHeight, pos.scrollTop + top)); + pos.scrollLeft = Math.max(0, Math.min(scroll.scrollWidth - scroll.clientWidth, pos.scrollLeft + left)); + } + + // API UTILITIES + + function indentLine(cm, n, how, aggressive) { + var doc = cm.doc; + if (how == null) how = "add"; + if (how == "smart") { + if (!cm.doc.mode.indent) how = "prev"; + else var state = getStateBefore(cm, n); + } + + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); + var curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (how == "smart") { + indentation = cm.doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass) { + if (!aggressive) return; + how = "prev"; + } + } + if (how == "prev") { + if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); + else indentation = 0; + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit; + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit; + } else if (typeof how == "number") { + indentation = curSpace + how; + } + indentation = Math.max(0, indentation); + + var indentString = "", pos = 0; + if (cm.options.indentWithTabs) + for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} + if (pos < indentation) indentString += spaceStr(indentation - pos); + + if (indentString != curSpaceString) + replaceRange(cm.doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); + line.stateAfter = null; + } + + function changeLine(cm, handle, op) { + var no = handle, line = handle, doc = cm.doc; + if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); + else no = lineNo(handle); + if (no == null) return null; + if (op(line, no)) regChange(cm, no, no + 1); + else return null; + return line; + } + + function findPosH(doc, pos, dir, unit, visually) { + var line = pos.line, ch = pos.ch, origDir = dir; + var lineObj = getLine(doc, line); + var possible = true; + function findNextLine() { + var l = line + dir; + if (l < doc.first || l >= doc.first + doc.size) return (possible = false); + line = l; + return lineObj = getLine(doc, l); + } + function moveOnce(boundToLine) { + var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); + if (next == null) { + if (!boundToLine && findNextLine()) { + if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); + else ch = dir < 0 ? lineObj.text.length : 0; + } else return (possible = false); + } else ch = next; + return true; + } + + if (unit == "char") moveOnce(); + else if (unit == "column") moveOnce(true); + else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group"; + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) break; + var cur = lineObj.text.charAt(ch) || "\n"; + var type = isWordChar(cur) ? "w" + : !group ? null + : /\s/.test(cur) ? null + : "p"; + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce();} + break; + } + if (type) sawType = type; + if (dir > 0 && !moveOnce(!first)) break; + } + } + var result = skipAtomic(doc, Pos(line, ch), origDir, true); + if (!possible) result.hitSide = true; + return result; + } + + function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y; + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + for (;;) { + var target = coordsChar(cm, x, y); + if (!target.outside) break; + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } + y += dir * 5; + } + return target; + } + + function findWordAt(line, pos) { + var start = pos.ch, end = pos.ch; + if (line) { + if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; + var startChar = line.charAt(start); + var check = isWordChar(startChar) ? isWordChar + : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} + : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; + while (start > 0 && check(line.charAt(start - 1))) --start; + while (end < line.length && check(line.charAt(end))) ++end; + } + return {from: Pos(pos.line, start), to: Pos(pos.line, end)}; + } + + function selectLine(cm, line) { + extendSelection(cm.doc, Pos(line, 0), clipPos(cm.doc, Pos(line + 1, 0))); + } + + // PROTOTYPE + + // The publicly visible API. Note that operation(null, f) means + // 'wrap f in an operation, performed on its `this` parameter' + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){window.focus(); focusInput(this); onFocus(this); fastPoll(this);}, + + setOption: function(option, value) { + var options = this.options, old = options[option]; + if (options[option] == value && option != "mode") return; + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) + operation(this, optionHandlers[option])(this, value, old); + }, + + getOption: function(option) {return this.options[option];}, + getDoc: function() {return this.doc;}, + + addKeyMap: function(map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](map); + }, + removeKeyMap: function(map) { + var maps = this.state.keyMaps; + for (var i = 0; i < maps.length; ++i) + if (maps[i] == map || (typeof maps[i] != "string" && maps[i].name == map)) { + maps.splice(i, 1); + return true; + } + }, + + addOverlay: operation(null, function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); + if (mode.startState) throw new Error("Overlays may not be stateful."); + this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque}); + this.state.modeGen++; + regChange(this); + }), + removeOverlay: operation(null, function(spec) { + var overlays = this.state.overlays; + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec; + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1); + this.state.modeGen++; + regChange(this); + return; + } + } + }), + + indentLine: operation(null, function(n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; + else dir = dir ? "add" : "subtract"; + } + if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); + }), + indentSelection: operation(null, function(how) { + var sel = this.doc.sel; + if (posEq(sel.from, sel.to)) return indentLine(this, sel.from.line, how); + var e = sel.to.line - (sel.to.ch ? 0 : 1); + for (var i = sel.from.line; i <= e; ++i) indentLine(this, i, how); + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos, precise) { + var doc = this.doc; + pos = clipPos(doc, pos); + var state = getStateBefore(this, pos.line, precise), mode = this.doc.mode; + var line = getLine(doc, pos.line); + var stream = new StringStream(line.text, this.options.tabSize); + while (stream.pos < pos.ch && !stream.eol()) { + stream.start = stream.pos; + var style = mode.token(stream, state); + } + return {start: stream.start, + end: stream.pos, + string: stream.current(), + className: style || null, // Deprecated, use 'type' instead + type: style || null, + state: state}; + }, + + getTokenTypeAt: function(pos) { + pos = clipPos(this.doc, pos); + var styles = getLineStyles(this, getLine(this.doc, pos.line)); + var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; + if (ch == 0) return styles[2]; + for (;;) { + var mid = (before + after) >> 1; + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; + else if (styles[mid * 2 + 1] < ch) before = mid + 1; + else return styles[mid * 2 + 2]; + } + }, + + getModeAt: function(pos) { + var mode = this.doc.mode; + if (!mode.innerMode) return mode; + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; + }, + + getHelper: function(pos, type) { + if (!helpers.hasOwnProperty(type)) return; + var help = helpers[type], mode = this.getModeAt(pos); + return mode[type] && help[mode[type]] || + mode.helperType && help[mode.helperType] || + help[mode.name]; + }, + + getStateAfter: function(line, precise) { + var doc = this.doc; + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); + return getStateBefore(this, line + 1, precise); + }, + + cursorCoords: function(start, mode) { + var pos, sel = this.doc.sel; + if (start == null) pos = sel.head; + else if (typeof start == "object") pos = clipPos(this.doc, start); + else pos = start ? sel.from : sel.to; + return cursorCoords(this, pos, mode || "page"); + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page"); + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page"); + return coordsChar(this, coords.left, coords.top); + }, + + lineAtHeight: function(height, mode) { + height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; + return lineAtHeight(this.doc, height + this.display.viewOffset); + }, + heightAtLine: function(line, mode) { + var end = false, last = this.doc.first + this.doc.size - 1; + if (line < this.doc.first) line = this.doc.first; + else if (line > last) { line = last; end = true; } + var lineObj = getLine(this.doc, line); + return intoCoordSystem(this, getLine(this.doc, line), {top: 0, left: 0}, mode || "page").top + + (end ? lineObj.height : 0); + }, + + defaultTextHeight: function() { return textHeight(this.display); }, + defaultCharWidth: function() { return charWidth(this.display); }, + + setGutterMarker: operation(null, function(line, gutterID, value) { + return changeLine(this, line, function(line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) line.gutterMarkers = null; + return true; + }); + }), + + clearGutter: operation(null, function(gutterID) { + var cm = this, doc = cm.doc, i = doc.first; + doc.iter(function(line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + line.gutterMarkers[gutterID] = null; + regChange(cm, i, i + 1); + if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; + } + ++i; + }); + }), + + addLineClass: operation(null, function(handle, where, cls) { + return changeLine(this, handle, function(line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass"; + if (!line[prop]) line[prop] = cls; + else if (new RegExp("(?:^|\\s)" + cls + "(?:$|\\s)").test(line[prop])) return false; + else line[prop] += " " + cls; + return true; + }); + }), + + removeLineClass: operation(null, function(handle, where, cls) { + return changeLine(this, handle, function(line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) return false; + else if (cls == null) line[prop] = null; + else { + var found = cur.match(new RegExp("(?:^|\\s+)" + cls + "(?:$|\\s+)")); + if (!found) return false; + var end = found.index + found[0].length; + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; + } + return true; + }); + }), + + addLineWidget: operation(null, function(handle, node, options) { + return addLineWidget(this, handle, node, options); + }), + + removeLineWidget: function(widget) { widget.clear(); }, + + lineInfo: function(line) { + if (typeof line == "number") { + if (!isLine(this.doc, line)) return null; + var n = line; + line = getLine(this.doc, line); + if (!line) return null; + } else { + var n = lineNo(line); + if (n == null) return null; + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets}; + }, + + getViewport: function() { return {from: this.display.showingFrom, to: this.display.showingTo};}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.doc, pos)); + var top = pos.bottom, left = pos.left; + node.style.position = "absolute"; + display.sizer.appendChild(node); + if (vert == "over") { + top = pos.top; + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + top = pos.top - node.offsetHeight; + else if (pos.bottom + node.offsetHeight <= vspace) + top = pos.bottom; + if (left + node.offsetWidth > hspace) + left = hspace - node.offsetWidth; + } + node.style.top = top + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") left = 0; + else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; + node.style.left = left + "px"; + } + if (scroll) + scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); + }, + + triggerOnKeyDown: operation(null, onKeyDown), + + execCommand: function(cmd) {return commands[cmd](this);}, + + findPosH: function(from, amount, unit, visually) { + var dir = 1; + if (amount < 0) { dir = -1; amount = -amount; } + for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { + cur = findPosH(this.doc, cur, dir, unit, visually); + if (cur.hitSide) break; + } + return cur; + }, + + moveH: operation(null, function(dir, unit) { + var sel = this.doc.sel, pos; + if (sel.shift || sel.extend || posEq(sel.from, sel.to)) + pos = findPosH(this.doc, sel.head, dir, unit, this.options.rtlMoveVisually); + else + pos = dir < 0 ? sel.from : sel.to; + extendSelection(this.doc, pos, pos, dir); + }), + + deleteH: operation(null, function(dir, unit) { + var sel = this.doc.sel; + if (!posEq(sel.from, sel.to)) replaceRange(this.doc, "", sel.from, sel.to, "+delete"); + else replaceRange(this.doc, "", sel.from, findPosH(this.doc, sel.head, dir, unit, false), "+delete"); + this.curOp.userSelChange = true; + }), + + findPosV: function(from, amount, unit, goalColumn) { + var dir = 1, x = goalColumn; + if (amount < 0) { dir = -1; amount = -amount; } + for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { + var coords = cursorCoords(this, cur, "div"); + if (x == null) x = coords.left; + else coords.left = x; + cur = findPosV(this, coords, dir, unit); + if (cur.hitSide) break; + } + return cur; + }, + + moveV: operation(null, function(dir, unit) { + var sel = this.doc.sel; + var pos = cursorCoords(this, sel.head, "div"); + if (sel.goalColumn != null) pos.left = sel.goalColumn; + var target = findPosV(this, pos, dir, unit); + + if (unit == "page") addToScrollPos(this, 0, charCoords(this, target, "div").top - pos.top); + extendSelection(this.doc, target, target, dir); + sel.goalColumn = pos.left; + }), + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) return; + if (this.state.overwrite = !this.state.overwrite) + this.display.cursor.className += " CodeMirror-overwrite"; + else + this.display.cursor.className = this.display.cursor.className.replace(" CodeMirror-overwrite", ""); + }, + hasFocus: function() { return this.state.focused; }, + + scrollTo: operation(null, function(x, y) { + updateScrollPos(this, x, y); + }), + getScrollInfo: function() { + var scroller = this.display.scroller, co = scrollerCutOff; + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - co, width: scroller.scrollWidth - co, + clientHeight: scroller.clientHeight - co, clientWidth: scroller.clientWidth - co}; + }, + + scrollIntoView: operation(null, function(pos, margin) { + if (typeof pos == "number") pos = Pos(pos, 0); + if (!margin) margin = 0; + var coords = pos; + + if (!pos || pos.line != null) { + this.curOp.scrollToPos = pos ? clipPos(this.doc, pos) : this.doc.sel.head; + this.curOp.scrollToPosMargin = margin; + coords = cursorCoords(this, this.curOp.scrollToPos); + } + var sPos = calculateScrollPos(this, coords.left, coords.top - margin, coords.right, coords.bottom + margin); + updateScrollPos(this, sPos.scrollLeft, sPos.scrollTop); + }), + + setSize: operation(null, function(width, height) { + function interpret(val) { + return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; + } + if (width != null) this.display.wrapper.style.width = interpret(width); + if (height != null) this.display.wrapper.style.height = interpret(height); + if (this.options.lineWrapping) + this.display.measureLineCache.length = this.display.measureLineCachePos = 0; + this.curOp.forceUpdate = true; + }), + + operation: function(f){return runInOp(this, f);}, + + refresh: operation(null, function() { + clearCaches(this); + updateScrollPos(this, this.doc.scrollLeft, this.doc.scrollTop); + regChange(this); + }), + + swapDoc: operation(null, function(doc) { + var old = this.doc; + old.cm = null; + attachDoc(this, doc); + clearCaches(this); + resetInput(this, true); + updateScrollPos(this, doc.scrollLeft, doc.scrollTop); + return old; + }), + + getInputField: function(){return this.display.input;}, + getWrapperElement: function(){return this.display.wrapper;}, + getScrollerElement: function(){return this.display.scroller;}, + getGutterElement: function(){return this.display.gutters;} + }; + eventMixin(CodeMirror); + + // OPTION DEFAULTS + + var optionHandlers = CodeMirror.optionHandlers = {}; + + // The default configuration options. + var defaults = CodeMirror.defaults = {}; + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) optionHandlers[name] = + notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; + } + + var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function(cm, val) { + cm.setValue(val); + }, true); + option("mode", null, function(cm, val) { + cm.doc.modeOption = val; + loadMode(cm); + }, true); + + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function(cm) { + loadMode(cm); + clearCaches(cm); + regChange(cm); + }, true); + option("electricChars", true); + option("rtlMoveVisually", !windows); + + option("theme", "default", function(cm) { + themeChanged(cm); + guttersChanged(cm); + }, true); + option("keyMap", "default", keyMapChanged); + option("extraKeys", null); + + option("onKeyEvent", null); + option("onDragEvent", null); + + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("fixedGutter", true, function(cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; + cm.refresh(); + }, true); + option("coverGutterNextToScrollbar", false, updateScrollbars, true); + option("lineNumbers", false, function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("firstLineNumber", 1, guttersChanged, true); + option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); + option("showCursorWhenSelecting", false, updateSelection, true); + + option("readOnly", false, function(cm, val) { + if (val == "nocursor") {onBlur(cm); cm.display.input.blur();} + else if (!val) resetInput(cm, true); + }); + option("dragDrop", true); + + option("cursorBlinkRate", 530); + option("cursorScrollMargin", 0); + option("cursorHeight", 1); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true); + option("pollInterval", 100); + option("undoDepth", 40, function(cm, val){cm.doc.history.undoDepth = val;}); + option("historyEventDelay", 500); + option("viewportMargin", 10, function(cm){cm.refresh();}, true); + option("maxHighlightLength", 10000, function(cm){loadMode(cm); cm.refresh();}, true); + option("moveInputWithCursor", true, function(cm, val) { + if (!val) cm.display.inputDiv.style.top = cm.display.inputDiv.style.left = 0; + }); + + option("tabindex", null, function(cm, val) { + cm.display.input.tabIndex = val || ""; + }); + option("autofocus", null); + + // MODE DEFINITION AND QUERYING + + // Known modes, by name and by MIME + var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; + + CodeMirror.defineMode = function(name, mode) { + if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; + if (arguments.length > 2) { + mode.dependencies = []; + for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]); + } + modes[name] = mode; + }; + + CodeMirror.defineMIME = function(mime, spec) { + mimeModes[mime] = spec; + }; + + CodeMirror.resolveMode = function(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name]; + spec = createObj(found, spec); + spec.name = found.name; + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return CodeMirror.resolveMode("application/xml"); + } + if (typeof spec == "string") return {name: spec}; + else return spec || {name: "null"}; + }; + + CodeMirror.getMode = function(options, spec) { + var spec = CodeMirror.resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) return CodeMirror.getMode(options, "text/plain"); + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) continue; + if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + + return modeObj; + }; + + CodeMirror.defineMode("null", function() { + return {token: function(stream) {stream.skipToEnd();}}; + }); + CodeMirror.defineMIME("text/plain", "null"); + + var modeExtensions = CodeMirror.modeExtensions = {}; + CodeMirror.extendMode = function(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + copyObj(properties, exts); + }; + + // EXTENSIONS + + CodeMirror.defineExtension = function(name, func) { + CodeMirror.prototype[name] = func; + }; + CodeMirror.defineDocExtension = function(name, func) { + Doc.prototype[name] = func; + }; + CodeMirror.defineOption = option; + + var initHooks = []; + CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; + + var helpers = CodeMirror.helpers = {}; + CodeMirror.registerHelper = function(type, name, value) { + if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {}; + helpers[type][name] = value; + }; + + // UTILITIES + + CodeMirror.isWordChar = isWordChar; + + // MODE STATE HANDLING + + // Utility functions for working with state. Exported because modes + // sometimes need to do this. + function copyState(mode, state) { + if (state === true) return state; + if (mode.copyState) return mode.copyState(state); + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) val = val.concat([]); + nstate[n] = val; + } + return nstate; + } + CodeMirror.copyState = copyState; + + function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; + } + CodeMirror.startState = startState; + + CodeMirror.innerMode = function(mode, state) { + while (mode.innerMode) { + var info = mode.innerMode(state); + if (!info || info.mode == mode) break; + state = info.state; + mode = info.mode; + } + return info || {mode: mode, state: state}; + }; + + // STANDARD COMMANDS + + var commands = CodeMirror.commands = { + selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()));}, + killLine: function(cm) { + var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to); + if (!sel && cm.getLine(from.line).length == from.ch) + cm.replaceRange("", from, Pos(from.line + 1, 0), "+delete"); + else cm.replaceRange("", from, sel ? to : Pos(from.line), "+delete"); + }, + deleteLine: function(cm) { + var l = cm.getCursor().line; + cm.replaceRange("", Pos(l, 0), Pos(l), "+delete"); + }, + delLineLeft: function(cm) { + var cur = cm.getCursor(); + cm.replaceRange("", Pos(cur.line, 0), cur, "+delete"); + }, + undo: function(cm) {cm.undo();}, + redo: function(cm) {cm.redo();}, + goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, + goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, + goLineStart: function(cm) { + cm.extendSelection(lineStart(cm, cm.getCursor().line)); + }, + goLineStartSmart: function(cm) { + var cur = cm.getCursor(), start = lineStart(cm, cur.line); + var line = cm.getLineHandle(start.line); + var order = getOrder(line); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(0, line.text.search(/\S/)); + var inWS = cur.line == start.line && cur.ch <= firstNonWS && cur.ch; + cm.extendSelection(Pos(start.line, inWS ? 0 : firstNonWS)); + } else cm.extendSelection(start); + }, + goLineEnd: function(cm) { + cm.extendSelection(lineEnd(cm, cm.getCursor().line)); + }, + goLineRight: function(cm) { + var top = cm.charCoords(cm.getCursor(), "div").top + 5; + cm.extendSelection(cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")); + }, + goLineLeft: function(cm) { + var top = cm.charCoords(cm.getCursor(), "div").top + 5; + cm.extendSelection(cm.coordsChar({left: 0, top: top}, "div")); + }, + goLineUp: function(cm) {cm.moveV(-1, "line");}, + goLineDown: function(cm) {cm.moveV(1, "line");}, + goPageUp: function(cm) {cm.moveV(-1, "page");}, + goPageDown: function(cm) {cm.moveV(1, "page");}, + goCharLeft: function(cm) {cm.moveH(-1, "char");}, + goCharRight: function(cm) {cm.moveH(1, "char");}, + goColumnLeft: function(cm) {cm.moveH(-1, "column");}, + goColumnRight: function(cm) {cm.moveH(1, "column");}, + goWordLeft: function(cm) {cm.moveH(-1, "word");}, + goGroupRight: function(cm) {cm.moveH(1, "group");}, + goGroupLeft: function(cm) {cm.moveH(-1, "group");}, + goWordRight: function(cm) {cm.moveH(1, "word");}, + delCharBefore: function(cm) {cm.deleteH(-1, "char");}, + delCharAfter: function(cm) {cm.deleteH(1, "char");}, + delWordBefore: function(cm) {cm.deleteH(-1, "word");}, + delWordAfter: function(cm) {cm.deleteH(1, "word");}, + delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, + delGroupAfter: function(cm) {cm.deleteH(1, "group");}, + indentAuto: function(cm) {cm.indentSelection("smart");}, + indentMore: function(cm) {cm.indentSelection("add");}, + indentLess: function(cm) {cm.indentSelection("subtract");}, + insertTab: function(cm) {cm.replaceSelection("\t", "end", "+input");}, + defaultTab: function(cm) { + if (cm.somethingSelected()) cm.indentSelection("add"); + else cm.replaceSelection("\t", "end", "+input"); + }, + transposeChars: function(cm) { + var cur = cm.getCursor(), line = cm.getLine(cur.line); + if (cur.ch > 0 && cur.ch < line.length - 1) + cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1), + Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1)); + }, + newlineAndIndent: function(cm) { + operation(cm, function() { + cm.replaceSelection("\n", "end", "+input"); + cm.indentLine(cm.getCursor().line, null, true); + })(); + }, + toggleOverwrite: function(cm) {cm.toggleOverwrite();} + }; + + // STANDARD KEYMAPS + + var keyMap = CodeMirror.keyMap = {}; + keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite" + }; + // Note that the save and find-related commands aren't defined by + // default. Unknown commands are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Alt-Up": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Down": "goDocEnd", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + fallthrough: "basic" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineStart", "Cmd-Right": "goLineEnd", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delLineLeft", + fallthrough: ["basic", "emacsy"] + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", + "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" + }; + + // KEYMAP DISPATCH + + function getKeyMap(val) { + if (typeof val == "string") return keyMap[val]; + else return val; + } + + function lookupKey(name, maps, handle) { + function lookup(map) { + map = getKeyMap(map); + var found = map[name]; + if (found === false) return "stop"; + if (found != null && handle(found)) return true; + if (map.nofallthrough) return "stop"; + + var fallthrough = map.fallthrough; + if (fallthrough == null) return false; + if (Object.prototype.toString.call(fallthrough) != "[object Array]") + return lookup(fallthrough); + for (var i = 0, e = fallthrough.length; i < e; ++i) { + var done = lookup(fallthrough[i]); + if (done) return done; + } + return false; + } + + for (var i = 0; i < maps.length; ++i) { + var done = lookup(maps[i]); + if (done) return done != "stop"; + } + } + function isModifierKey(event) { + var name = keyNames[event.keyCode]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; + } + function keyName(event, noShift) { + if (opera && event.keyCode == 34 && event["char"]) return false; + var name = keyNames[event.keyCode]; + if (name == null || event.altGraphKey) return false; + if (event.altKey) name = "Alt-" + name; + if (flipCtrlCmd ? event.metaKey : event.ctrlKey) name = "Ctrl-" + name; + if (flipCtrlCmd ? event.ctrlKey : event.metaKey) name = "Cmd-" + name; + if (!noShift && event.shiftKey) name = "Shift-" + name; + return name; + } + CodeMirror.lookupKey = lookupKey; + CodeMirror.isModifierKey = isModifierKey; + CodeMirror.keyName = keyName; + + // FROMTEXTAREA + + CodeMirror.fromTextArea = function(textarea, options) { + if (!options) options = {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabindex) + options.tabindex = textarea.tabindex; + if (!options.placeholder && textarea.placeholder) + options.placeholder = textarea.placeholder; + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = document.body; + // doc.activeElement occasionally throws on IE + try { hasFocus = document.activeElement; } catch(e) {} + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = cm.getValue();} + if (textarea.form) { + on(textarea.form, "submit", save); + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form, realSubmit = form.submit; + try { + var wrappedSubmit = form.submit = function() { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch(e) {} + } + } + + textarea.style.display = "none"; + var cm = CodeMirror(function(node) { + textarea.parentNode.insertBefore(node, textarea.nextSibling); + }, options); + cm.save = save; + cm.getTextArea = function() { return textarea; }; + cm.toTextArea = function() { + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (typeof textarea.form.submit == "function") + textarea.form.submit = realSubmit; + } + }; + return cm; + }; + + // STRING STREAM + + // Fed to the mode parsers, provides helper functions to make + // parsers more succinct. + + // The character stream used by a mode's parser. + function StringStream(string, tabSize) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + } + + StringStream.prototype = { + eol: function() {return this.pos >= this.string.length;}, + sol: function() {return this.pos == 0;}, + peek: function() {return this.string.charAt(this.pos) || undefined;}, + next: function() { + if (this.pos < this.string.length) + return this.string.charAt(this.pos++); + }, + eat: function(match) { + var ch = this.string.charAt(this.pos); + if (typeof match == "string") var ok = ch == match; + else var ok = ch && (match.test ? match.test(ch) : match(ch)); + if (ok) {++this.pos; return ch;} + }, + eatWhile: function(match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start; + }, + eatSpace: function() { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; + return this.pos > start; + }, + skipToEnd: function() {this.pos = this.string.length;}, + skipTo: function(ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true;} + }, + backUp: function(n) {this.pos -= n;}, + column: function() { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue; + }, + indentation: function() {return countColumn(this.string, null, this.tabSize);}, + match: function(pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) this.pos += pattern.length; + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) return null; + if (match && consume !== false) this.pos += match[0].length; + return match; + } + }, + current: function(){return this.string.slice(this.start, this.pos);} + }; + CodeMirror.StringStream = StringStream; + + // TEXTMARKERS + + function TextMarker(doc, type) { + this.lines = []; + this.type = type; + this.doc = doc; + } + CodeMirror.TextMarker = TextMarker; + eventMixin(TextMarker); + + TextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + var cm = this.doc.cm, withOp = cm && !cm.curOp; + if (withOp) startOperation(cm); + if (hasHandler(this, "clear")) { + var found = this.find(); + if (found) signalLater(this, "clear", found.from, found.to); + } + var min = null, max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.to != null) max = lineNo(line); + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from != null) + min = lineNo(line); + else if (this.collapsed && !lineIsHidden(this.doc, line) && cm) + updateLineHeight(line, textHeight(cm.display)); + } + if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { + var visual = visualLine(cm.doc, this.lines[i]), len = lineLength(cm.doc, visual); + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual; + cm.display.maxLineLength = len; + cm.display.maxLineChanged = true; + } + } + + if (min != null && cm) regChange(cm, min, max + 1); + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false; + if (cm) reCheckSelection(cm); + } + if (withOp) endOperation(cm); + }; + + TextMarker.prototype.find = function() { + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null || span.to != null) { + var found = lineNo(line); + if (span.from != null) from = Pos(found, span.from); + if (span.to != null) to = Pos(found, span.to); + } + } + if (this.type == "bookmark") return from; + return from && {from: from, to: to}; + }; + + TextMarker.prototype.changed = function() { + var pos = this.find(), cm = this.doc.cm; + if (!pos || !cm) return; + var line = getLine(this.doc, pos.from.line); + clearCachedMeasurement(cm, line); + if (pos.from.line >= cm.display.showingFrom && pos.from.line < cm.display.showingTo) { + for (var node = cm.display.lineDiv.firstChild; node; node = node.nextSibling) if (node.lineObj == line) { + if (node.offsetHeight != line.height) updateLineHeight(line, node.offsetHeight); + break; + } + runInOp(cm, function() { + cm.curOp.selectionChanged = cm.curOp.forceUpdate = cm.curOp.updateMaxLine = true; + }); + } + }; + + TextMarker.prototype.attachLine = function(line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); + } + this.lines.push(line); + }; + TextMarker.prototype.detachLine = function(line) { + this.lines.splice(indexOf(this.lines, line), 1); + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); + } + }; + + function markText(doc, from, to, options, type) { + if (options && options.shared) return markTextShared(doc, from, to, options, type); + if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); + + var marker = new TextMarker(doc, type); + if (type == "range" && !posLess(from, to)) return marker; + if (options) copyObj(options, marker); + if (marker.replacedWith) { + marker.collapsed = true; + marker.replacedWith = elt("span", [marker.replacedWith], "CodeMirror-widget"); + if (!options.handleMouseEvents) marker.replacedWith.ignoreEvents = true; + } + if (marker.collapsed) sawCollapsedSpans = true; + + if (marker.addToHistory) + addToHistory(doc, {from: from, to: to, origin: "markText"}, + {head: doc.sel.head, anchor: doc.sel.anchor}, NaN); + + var curLine = from.line, size = 0, collapsedAtStart, collapsedAtEnd, cm = doc.cm, updateMaxLine; + doc.iter(curLine, to.line + 1, function(line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(doc, line) == cm.display.maxLine) + updateMaxLine = true; + var span = {from: null, to: null, marker: marker}; + size += line.text.length; + if (curLine == from.line) {span.from = from.ch; size -= from.ch;} + if (curLine == to.line) {span.to = to.ch; size -= line.text.length - to.ch;} + if (marker.collapsed) { + if (curLine == to.line) collapsedAtEnd = collapsedSpanAt(line, to.ch); + if (curLine == from.line) collapsedAtStart = collapsedSpanAt(line, from.ch); + else updateLineHeight(line, 0); + } + addMarkedSpan(line, span); + ++curLine; + }); + if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { + if (lineIsHidden(doc, line)) updateLineHeight(line, 0); + }); + + if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); + + if (marker.readOnly) { + sawReadOnlySpans = true; + if (doc.history.done.length || doc.history.undone.length) + doc.clearHistory(); + } + if (marker.collapsed) { + if (collapsedAtStart != collapsedAtEnd) + throw new Error("Inserting collapsed marker overlapping an existing one"); + marker.size = size; + marker.atomic = true; + } + if (cm) { + if (updateMaxLine) cm.curOp.updateMaxLine = true; + if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.collapsed) + regChange(cm, from.line, to.line + 1); + if (marker.atomic) reCheckSelection(cm); + } + return marker; + } + + // SHARED TEXTMARKERS + + function SharedTextMarker(markers, primary) { + this.markers = markers; + this.primary = primary; + for (var i = 0, me = this; i < markers.length; ++i) { + markers[i].parent = this; + on(markers[i], "clear", function(){me.clear();}); + } + } + CodeMirror.SharedTextMarker = SharedTextMarker; + eventMixin(SharedTextMarker); + + SharedTextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + this.explicitlyCleared = true; + for (var i = 0; i < this.markers.length; ++i) + this.markers[i].clear(); + signalLater(this, "clear"); + }; + SharedTextMarker.prototype.find = function() { + return this.primary.find(); + }; + + function markTextShared(doc, from, to, options, type) { + options = copyObj(options); + options.shared = false; + var markers = [markText(doc, from, to, options, type)], primary = markers[0]; + var widget = options.replacedWith; + linkedDocs(doc, function(doc) { + if (widget) options.replacedWith = widget.cloneNode(true); + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); + for (var i = 0; i < doc.linked.length; ++i) + if (doc.linked[i].isParent) return; + primary = lst(markers); + }); + return new SharedTextMarker(markers, primary); + } + + // TEXTMARKER SPANS + + function getMarkedSpanFor(spans, marker) { + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) return span; + } + } + function removeMarkedSpan(spans, span) { + for (var r, i = 0; i < spans.length; ++i) + if (spans[i] != span) (r || (r = [])).push(spans[i]); + return r; + } + function addMarkedSpan(line, span) { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + span.marker.attachLine(line); + } + + function markedSpansBefore(old, startCh, isInsert) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || marker.type == "bookmark" && span.from == startCh && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); + (nw || (nw = [])).push({from: span.from, + to: endsAfter ? null : span.to, + marker: marker}); + } + } + return nw; + } + + function markedSpansAfter(old, endCh, isInsert) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || marker.type == "bookmark" && span.from == endCh && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); + (nw || (nw = [])).push({from: startsBefore ? null : span.from - endCh, + to: span.to == null ? null : span.to - endCh, + marker: marker}); + } + } + return nw; + } + + function stretchSpansOverChange(doc, change) { + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; + if (!oldFirst && !oldLast) return null; + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = posEq(change.from, change.to); + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert); + var last = markedSpansAfter(oldLast, endCh, isInsert); + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) span.to = startCh; + else if (sameLine) span.to = found.to == null ? null : found.to + offset; + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i = 0; i < last.length; ++i) { + var span = last[i]; + if (span.to != null) span.to += offset; + if (span.from == null) { + var found = getMarkedSpanFor(first, span.marker); + if (!found) { + span.from = offset; + if (sameLine) (first || (first = [])).push(span); + } + } else { + span.from += offset; + if (sameLine) (first || (first = [])).push(span); + } + } + } + if (sameLine && first) { + // Make sure we didn't create any zero-length spans + for (var i = 0; i < first.length; ++i) + if (first[i].from != null && first[i].from == first[i].to && first[i].marker.type != "bookmark") + first.splice(i--, 1); + if (!first.length) first = null; + } + + var newMarkers = [first]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers; + if (gap > 0 && first) + for (var i = 0; i < first.length; ++i) + if (first[i].to == null) + (gapMarkers || (gapMarkers = [])).push({from: null, to: null, marker: first[i].marker}); + for (var i = 0; i < gap; ++i) + newMarkers.push(gapMarkers); + newMarkers.push(last); + } + return newMarkers; + } + + function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change); + var stretched = stretchSpansOverChange(doc, change); + if (!old) return stretched; + if (!stretched) return old; + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i]; + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j]; + for (var k = 0; k < oldCur.length; ++k) + if (oldCur[k].marker == span.marker) continue spans; + oldCur.push(span); + } + } else if (stretchCur) { + old[i] = stretchCur; + } + } + return old; + } + + function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function(line) { + if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + (markers || (markers = [])).push(mark); + } + }); + if (!markers) return null; + var parts = [{from: from, to: to}]; + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (posLess(p.to, m.from) || posLess(m.to, p.from)) continue; + var newParts = [j, 1]; + if (posLess(p.from, m.from) || !mk.inclusiveLeft && posEq(p.from, m.from)) + newParts.push({from: p.from, to: m.from}); + if (posLess(m.to, p.to) || !mk.inclusiveRight && posEq(p.to, m.to)) + newParts.push({from: m.to, to: p.to}); + parts.splice.apply(parts, newParts); + j += newParts.length - 1; + } + } + return parts; + } + + function collapsedSpanAt(line, ch) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) continue; + if ((sp.from == null || sp.from < ch) && + (sp.to == null || sp.to > ch) && + (!found || found.width < sp.marker.width)) + found = sp.marker; + } + return found; + } + function collapsedSpanAtStart(line) { return collapsedSpanAt(line, -1); } + function collapsedSpanAtEnd(line) { return collapsedSpanAt(line, line.text.length + 1); } + + function visualLine(doc, line) { + var merged; + while (merged = collapsedSpanAtStart(line)) + line = getLine(doc, merged.find().from.line); + return line; + } + + function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) continue; + if (sp.from == null) return true; + if (sp.marker.replacedWith) continue; + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + return true; + } + } + function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find().to, endLine = getLine(doc, end.line); + return lineIsHiddenInner(doc, endLine, getMarkedSpanFor(endLine.markedSpans, span.marker)); + } + if (span.marker.inclusiveRight && span.to == line.text.length) + return true; + for (var sp, i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && !sp.marker.replacedWith && sp.from == span.to && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) return true; + } + } + + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.detachLine(line); + line.markedSpans = null; + } + + function attachMarkedSpans(line, spans) { + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.attachLine(line); + line.markedSpans = spans; + } + + // LINE WIDGETS + + var LineWidget = CodeMirror.LineWidget = function(cm, node, options) { + if (options) for (var opt in options) if (options.hasOwnProperty(opt)) + this[opt] = options[opt]; + this.cm = cm; + this.node = node; + }; + eventMixin(LineWidget); + function widgetOperation(f) { + return function() { + var withOp = !this.cm.curOp; + if (withOp) startOperation(this.cm); + try {var result = f.apply(this, arguments);} + finally {if (withOp) endOperation(this.cm);} + return result; + }; + } + LineWidget.prototype.clear = widgetOperation(function() { + var ws = this.line.widgets, no = lineNo(this.line); + if (no == null || !ws) return; + for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); + if (!ws.length) this.line.widgets = null; + var aboveVisible = heightAtLine(this.cm, this.line) < this.cm.doc.scrollTop; + updateLineHeight(this.line, Math.max(0, this.line.height - widgetHeight(this))); + if (aboveVisible) addToScrollPos(this.cm, 0, -this.height); + regChange(this.cm, no, no + 1); + }); + LineWidget.prototype.changed = widgetOperation(function() { + var oldH = this.height; + this.height = null; + var diff = widgetHeight(this) - oldH; + if (!diff) return; + updateLineHeight(this.line, this.line.height + diff); + var no = lineNo(this.line); + regChange(this.cm, no, no + 1); + }); + + function widgetHeight(widget) { + if (widget.height != null) return widget.height; + if (!widget.node.parentNode || widget.node.parentNode.nodeType != 1) + removeChildrenAndAdd(widget.cm.display.measure, elt("div", [widget.node], null, "position: relative")); + return widget.height = widget.node.offsetHeight; + } + + function addLineWidget(cm, handle, node, options) { + var widget = new LineWidget(cm, node, options); + if (widget.noHScroll) cm.display.alignWidgets = true; + changeLine(cm, handle, function(line) { + var widgets = line.widgets || (line.widgets = []); + if (widget.insertAt == null) widgets.push(widget); + else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); + widget.line = line; + if (!lineIsHidden(cm.doc, line) || widget.showIfHidden) { + var aboveVisible = heightAtLine(cm, line) < cm.doc.scrollTop; + updateLineHeight(line, line.height + widgetHeight(widget)); + if (aboveVisible) addToScrollPos(cm, 0, widget.height); + } + return true; + }); + return widget; + } + + // LINE DATA STRUCTURE + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { + this.text = text; + attachMarkedSpans(this, markedSpans); + this.height = estimateHeight ? estimateHeight(this) : 1; + }; + eventMixin(Line); + + function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text; + if (line.stateAfter) line.stateAfter = null; + if (line.styles) line.styles = null; + if (line.order != null) line.order = null; + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + var estHeight = estimateHeight ? estimateHeight(line) : 1; + if (estHeight != line.height) updateLineHeight(line, estHeight); + } + + function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); + } + + // Run the given mode's parser over a line, update the styles + // array, which contains alternating fragments of text and CSS + // classes. + function runMode(cm, text, mode, state, f) { + var flattenSpans = mode.flattenSpans; + if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; + var curStart = 0, curStyle = null; + var stream = new StringStream(text, cm.options.tabSize), style; + if (text == "" && mode.blankLine) mode.blankLine(state); + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false; + // Webkit seems to refuse to render text nodes longer than 57444 characters + stream.pos = Math.min(text.length, stream.start + 50000); + style = null; + } else { + style = mode.token(stream, state); + } + if (!flattenSpans || curStyle != style) { + if (curStart < stream.start) f(stream.start, curStyle); + curStart = stream.start; curStyle = style; + } + stream.start = stream.pos; + } + if (curStart < stream.pos) f(stream.pos, curStyle); + } + + function highlightLine(cm, line, state) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen]; + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, state, function(end, style) {st.push(end, style);}); + + // Run overlays, adjust style array. + for (var o = 0; o < cm.state.overlays.length; ++o) { + var overlay = cm.state.overlays[o], i = 1, at = 0; + runMode(cm, line.text, overlay.mode, true, function(end, style) { + var start = i; + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i]; + if (i_end > end) + st.splice(i, 1, end, st[i+1], i_end); + i += 2; + at = Math.min(end, i_end); + } + if (!style) return; + if (overlay.opaque) { + st.splice(start, i - start, end, style); + i = start + 2; + } else { + for (; start < i; start += 2) { + var cur = st[start+1]; + st[start+1] = cur ? cur + " " + style : style; + } + } + }); + } + + return st; + } + + function getLineStyles(cm, line) { + if (!line.styles || line.styles[0] != cm.state.modeGen) + line.styles = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line))); + return line.styles; + } + + // Lightweight form of highlight -- proceed over this line and + // update state, but don't save a style array. + function processLine(cm, line, state) { + var mode = cm.doc.mode; + var stream = new StringStream(line.text, cm.options.tabSize); + if (line.text == "" && mode.blankLine) mode.blankLine(state); + while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) { + mode.token(stream, state); + stream.start = stream.pos; + } + } + + var styleToClassCache = {}; + function styleToClass(style) { + if (!style) return null; + return styleToClassCache[style] || + (styleToClassCache[style] = "cm-" + style.replace(/ +/g, " cm-")); + } + + function lineContent(cm, realLine, measure, copyWidgets) { + var merged, line = realLine, empty = true; + while (merged = collapsedSpanAtStart(line)) + line = getLine(cm.doc, merged.find().from.line); + + var builder = {pre: elt("pre"), col: 0, pos: 0, + measure: null, measuredSomething: false, cm: cm, + copyWidgets: copyWidgets}; + if (line.textClass) builder.pre.className = line.textClass; + + do { + if (line.text) empty = false; + builder.measure = line == realLine && measure; + builder.pos = 0; + builder.addToken = builder.measure ? buildTokenMeasure : buildToken; + if ((ie || webkit) && cm.getOption("lineWrapping")) + builder.addToken = buildTokenSplitSpaces(builder.addToken); + var next = insertLineContent(line, builder, getLineStyles(cm, line)); + if (measure && line == realLine && !builder.measuredSomething) { + measure[0] = builder.pre.appendChild(zeroWidthElement(cm.display.measure)); + builder.measuredSomething = true; + } + if (next) line = getLine(cm.doc, next.to.line); + } while (next); + + if (measure && !builder.measuredSomething && !measure[0]) + measure[0] = builder.pre.appendChild(empty ? elt("span", "\u00a0") : zeroWidthElement(cm.display.measure)); + if (!builder.pre.firstChild && !lineIsHidden(cm.doc, realLine)) + builder.pre.appendChild(document.createTextNode("\u00a0")); + + var order; + // Work around problem with the reported dimensions of single-char + // direction spans on IE (issue #1129). See also the comment in + // cursorCoords. + if (measure && ie && (order = getOrder(line))) { + var l = order.length - 1; + if (order[l].from == order[l].to) --l; + var last = order[l], prev = order[l - 1]; + if (last.from + 1 == last.to && prev && last.level < prev.level) { + var span = measure[builder.pos - 1]; + if (span) span.parentNode.insertBefore(span.measureRight = zeroWidthElement(cm.display.measure), + span.nextSibling); + } + } + + signal(cm, "renderLine", cm, realLine, builder.pre); + return builder.pre; + } + + var tokenSpecialChars = /[\t\u0000-\u0019\u00ad\u200b\u2028\u2029\uFEFF]/g; + function buildToken(builder, text, style, startStyle, endStyle, title) { + if (!text) return; + if (!tokenSpecialChars.test(text)) { + builder.col += text.length; + var content = document.createTextNode(text); + } else { + var content = document.createDocumentFragment(), pos = 0; + while (true) { + tokenSpecialChars.lastIndex = pos; + var m = tokenSpecialChars.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + content.appendChild(document.createTextNode(text.slice(pos, pos + skipped))); + builder.col += skipped; + } + if (!m) break; + pos += skipped + 1; + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; + content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + builder.col += tabWidth; + } else { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + m[0].charCodeAt(0).toString(16); + content.appendChild(token); + builder.col += 1; + } + } + } + if (style || startStyle || endStyle || builder.measure) { + var fullStyle = style || ""; + if (startStyle) fullStyle += startStyle; + if (endStyle) fullStyle += endStyle; + var token = elt("span", [content], fullStyle); + if (title) token.title = title; + return builder.pre.appendChild(token); + } + builder.pre.appendChild(content); + } + + function buildTokenMeasure(builder, text, style, startStyle, endStyle) { + var wrapping = builder.cm.options.lineWrapping; + for (var i = 0; i < text.length; ++i) { + var ch = text.charAt(i), start = i == 0; + if (ch >= "\ud800" && ch < "\udbff" && i < text.length - 1) { + ch = text.slice(i, i + 2); + ++i; + } else if (i && wrapping && spanAffectsWrapping(text, i)) { + builder.pre.appendChild(elt("wbr")); + } + var old = builder.measure[builder.pos]; + var span = builder.measure[builder.pos] = + buildToken(builder, ch, style, + start && startStyle, i == text.length - 1 && endStyle); + if (old) span.leftSide = old.leftSide || old; + // In IE single-space nodes wrap differently than spaces + // embedded in larger text nodes, except when set to + // white-space: normal (issue #1268). + if (ie && wrapping && ch == " " && i && !/\s/.test(text.charAt(i - 1)) && + i < text.length - 1 && !/\s/.test(text.charAt(i + 1))) + span.style.whiteSpace = "normal"; + builder.pos += ch.length; + } + if (text.length) builder.measuredSomething = true; + } + + function buildTokenSplitSpaces(inner) { + function split(old) { + var out = " "; + for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0"; + out += " "; + return out; + } + return function(builder, text, style, startStyle, endStyle, title) { + return inner(builder, text.replace(/ {3,}/, split), style, startStyle, endStyle, title); + }; + } + + function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.replacedWith; + if (widget) { + if (builder.copyWidgets) widget = widget.cloneNode(true); + builder.pre.appendChild(widget); + if (builder.measure) { + if (size) { + builder.measure[builder.pos] = widget; + } else { + var elt = builder.measure[builder.pos] = zeroWidthElement(builder.cm.display.measure); + if (marker.type != "bookmark" || marker.insertLeft) + builder.pre.insertBefore(elt, widget); + else + builder.pre.appendChild(elt); + } + builder.measuredSomething = true; + } + } + builder.pos += size; + } + + // Outputs a number of spans to make up a line, taking highlighting + // and marked text into account. + function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, allText = line.text, at = 0; + if (!spans) { + for (var i = 1; i < styles.length; i+=2) + builder.addToken(builder, allText.slice(at, at = styles[i]), styleToClass(styles[i+1])); + return; + } + + var len = allText.length, pos = 0, i = 1, text = "", style; + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = title = ""; + collapsed = null; nextChange = Infinity; + var foundBookmark = null; + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker; + if (sp.from <= pos && (sp.to == null || sp.to > pos)) { + if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } + if (m.className) spanStyle += " " + m.className; + if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; + if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle; + if (m.title && !title) title = m.title; + if (m.collapsed && (!collapsed || collapsed.marker.size < m.size)) + collapsed = sp; + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + if (m.type == "bookmark" && sp.from == pos && m.replacedWith) foundBookmark = m; + } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len : collapsed.to) - pos, + collapsed.marker, collapsed.from == null); + if (collapsed.to == null) return collapsed.marker.find(); + } + if (foundBookmark && !collapsed) buildCollapsedSpan(builder, 0, foundBookmark); + } + if (pos >= len) break; + + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title); + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} + pos = end; + spanStartStyle = ""; + } + text = allText.slice(at, at = styles[i++]); + style = styleToClass(styles[i++]); + } + } + } + + // DOCUMENT DATA STRUCTURE + + function updateDoc(doc, change, markedSpans, selAfter, estimateHeight) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null;} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight); + signalLater(line, "change", line, change); + } + + var from = change.from, to = change.to, text = change.text; + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; + + // First adjust the line structure + if (from.ch == 0 && to.ch == 0 && lastText == "") { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + for (var i = 0, e = text.length - 1, added = []; i < e; ++i) + added.push(new Line(text[i], spansFor(i), estimateHeight)); + update(lastLine, lastLine.text, lastSpans); + if (nlines) doc.remove(from.line, nlines); + if (added.length) doc.insert(from.line, added); + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); + } else { + for (var added = [], i = 1, e = text.length - 1; i < e; ++i) + added.push(new Line(text[i], spansFor(i), estimateHeight)); + added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + doc.insert(from.line + 1, added); + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); + doc.remove(from.line + 1, nlines); + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); + for (var i = 1, e = text.length - 1, added = []; i < e; ++i) + added.push(new Line(text[i], spansFor(i), estimateHeight)); + if (nlines > 1) doc.remove(from.line + 1, nlines - 1); + doc.insert(from.line + 1, added); + } + + signalLater(doc, "change", doc, change); + setSelection(doc, selAfter.anchor, selAfter.head, null, true); + } + + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + for (var i = 0, e = lines.length, height = 0; i < e; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + + LeafChunk.prototype = { + chunkSize: function() { return this.lines.length; }, + removeInner: function(at, n) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + cleanUpLine(line); + signalLater(line, "delete"); + } + this.lines.splice(at, n); + }, + collapse: function(lines) { + lines.splice.apply(lines, [lines.length, 0].concat(this.lines)); + }, + insertInner: function(at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this; + }, + iterN: function(at, n, op) { + for (var e = at + n; at < e; ++at) + if (op(this.lines[at])) return true; + } + }; + + function BranchChunk(children) { + this.children = children; + var size = 0, height = 0; + for (var i = 0, e = children.length; i < e; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + + BranchChunk.prototype = { + chunkSize: function() { return this.size; }, + removeInner: function(at, n) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.removeInner(at, rm); + this.height -= oldHeight - child.height; + if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) break; + at = 0; + } else at -= sz; + } + if (this.size - n < 25) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + collapse: function(lines) { + for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines); + }, + insertInner: function(at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0, e = this.children.length; i < e; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertInner(at, lines, height); + if (child.lines && child.lines.length > 50) { + while (child.lines.length > 50) { + var spilled = child.lines.splice(child.lines.length - 25, 25); + var newleaf = new LeafChunk(spilled); + child.height -= newleaf.height; + this.children.splice(i + 1, 0, newleaf); + newleaf.parent = this; + } + this.maybeSpill(); + } + break; + } + at -= sz; + } + }, + maybeSpill: function() { + if (this.children.length <= 10) return; + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10); + me.parent.maybeSpill(); + }, + iterN: function(at, n, op) { + for (var i = 0, e = this.children.length; i < e; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) return true; + if ((n -= used) == 0) break; + at = 0; + } else at -= sz; + } + } + }; + + var nextDocId = 0; + var Doc = CodeMirror.Doc = function(text, mode, firstLine) { + if (!(this instanceof Doc)) return new Doc(text, mode, firstLine); + if (firstLine == null) firstLine = 0; + + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); + this.first = firstLine; + this.scrollTop = this.scrollLeft = 0; + this.cantEdit = false; + this.history = makeHistory(); + this.cleanGeneration = 1; + this.frontier = firstLine; + var start = Pos(firstLine, 0); + this.sel = {from: start, to: start, head: start, anchor: start, shift: false, extend: false, goalColumn: null}; + this.id = ++nextDocId; + this.modeOption = mode; + + if (typeof text == "string") text = splitLines(text); + updateDoc(this, {from: start, to: start, text: text}, null, {head: start, anchor: start}); + }; + + Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + iter: function(from, to, op) { + if (op) this.iterN(from - this.first, to - from, op); + else this.iterN(this.first, this.first + this.size, from); + }, + + insert: function(at, lines) { + var height = 0; + for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height; + this.insertInner(at - this.first, lines, height); + }, + remove: function(at, n) { this.removeInner(at - this.first, n); }, + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size); + if (lineSep === false) return lines; + return lines.join(lineSep || "\n"); + }, + setValue: function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1; + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: splitLines(code), origin: "setValue"}, + {head: top, anchor: top}, true); + }, + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from); + to = to ? clipPos(this, to) : from; + replaceRange(this, code, from, to, origin); + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); + if (lineSep === false) return lines; + return lines.join(lineSep || "\n"); + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, + setLine: function(line, text) { + if (isLine(this, line)) + replaceRange(this, text, Pos(line, 0), clipPos(this, Pos(line))); + }, + removeLine: function(line) { + if (line) replaceRange(this, "", clipPos(this, Pos(line - 1)), clipPos(this, Pos(line))); + else replaceRange(this, "", Pos(0, 0), clipPos(this, Pos(1, 0))); + }, + + getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, + getLineNumber: function(line) {return lineNo(line);}, + + getLineHandleVisualStart: function(line) { + if (typeof line == "number") line = getLine(this, line); + return visualLine(this, line); + }, + + lineCount: function() {return this.size;}, + firstLine: function() {return this.first;}, + lastLine: function() {return this.first + this.size - 1;}, + + clipPos: function(pos) {return clipPos(this, pos);}, + + getCursor: function(start) { + var sel = this.sel, pos; + if (start == null || start == "head") pos = sel.head; + else if (start == "anchor") pos = sel.anchor; + else if (start == "end" || start === false) pos = sel.to; + else pos = sel.from; + return copyPos(pos); + }, + somethingSelected: function() {return !posEq(this.sel.head, this.sel.anchor);}, + + setCursor: docOperation(function(line, ch, extend) { + var pos = clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line); + if (extend) extendSelection(this, pos); + else setSelection(this, pos, pos); + }), + setSelection: docOperation(function(anchor, head) { + setSelection(this, clipPos(this, anchor), clipPos(this, head || anchor)); + }), + extendSelection: docOperation(function(from, to) { + extendSelection(this, clipPos(this, from), to && clipPos(this, to)); + }), + + getSelection: function(lineSep) {return this.getRange(this.sel.from, this.sel.to, lineSep);}, + replaceSelection: function(code, collapse, origin) { + makeChange(this, {from: this.sel.from, to: this.sel.to, text: splitLines(code), origin: origin}, collapse || "around"); + }, + undo: docOperation(function() {makeChangeFromHistory(this, "undo");}), + redo: docOperation(function() {makeChangeFromHistory(this, "redo");}), + + setExtending: function(val) {this.sel.extend = val;}, + + historySize: function() { + var hist = this.history; + return {undo: hist.done.length, redo: hist.undone.length}; + }, + clearHistory: function() {this.history = makeHistory(this.history.maxGeneration);}, + + markClean: function() { + this.cleanGeneration = this.changeGeneration(); + }, + changeGeneration: function() { + this.history.lastOp = this.history.lastOrigin = null; + return this.history.generation; + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration); + }, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)}; + }, + setHistory: function(histData) { + var hist = this.history = makeHistory(this.history.maxGeneration); + hist.done = histData.done.slice(0); + hist.undone = histData.undone.slice(0); + }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, "range"); + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft}; + pos = clipPos(this, pos); + return markText(this, pos, pos, realOpts, "bookmark"); + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos); + var markers = [], spans = getLine(this, pos.line).markedSpans; + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + markers.push(span.marker.parent || span.marker); + } + return markers; + }, + getAllMarks: function() { + var markers = []; + this.iter(function(line) { + var sps = line.markedSpans; + if (sps) for (var i = 0; i < sps.length; ++i) + if (sps[i].from != null) markers.push(sps[i].marker); + }); + return markers; + }, + + posFromIndex: function(off) { + var ch, lineNo = this.first; + this.iter(function(line) { + var sz = line.text.length + 1; + if (sz > off) { ch = off; return true; } + off -= sz; + ++lineNo; + }); + return clipPos(this, Pos(lineNo, ch)); + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords); + var index = coords.ch; + if (coords.line < this.first || coords.ch < 0) return 0; + this.iter(this.first, coords.line, function (line) { + index += line.text.length + 1; + }); + return index; + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first); + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; + doc.sel = {from: this.sel.from, to: this.sel.to, head: this.sel.head, anchor: this.sel.anchor, + shift: this.sel.shift, extend: false, goalColumn: this.sel.goalColumn}; + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth; + doc.setHistory(this.getHistory()); + } + return doc; + }, + + linkedDoc: function(options) { + if (!options) options = {}; + var from = this.first, to = this.first + this.size; + if (options.from != null && options.from > from) from = options.from; + if (options.to != null && options.to < to) to = options.to; + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from); + if (options.sharedHist) copy.history = this.history; + (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; + return copy; + }, + unlinkDoc: function(other) { + if (other instanceof CodeMirror) other = other.doc; + if (this.linked) for (var i = 0; i < this.linked.length; ++i) { + var link = this.linked[i]; + if (link.doc != other) continue; + this.linked.splice(i, 1); + other.unlinkDoc(this); + break; + } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id]; + linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); + other.history = makeHistory(); + other.history.done = copyHistoryArray(this.history.done, splitIds); + other.history.undone = copyHistoryArray(this.history.undone, splitIds); + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f);}, + + getMode: function() {return this.mode;}, + getEditor: function() {return this.cm;} + }); + + Doc.prototype.eachLine = Doc.prototype.iter; + + // The Doc methods that should be available on CodeMirror instances + var dontDelegate = "iter insert remove copy getEditor".split(" "); + for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + CodeMirror.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments);}; + })(Doc.prototype[prop]); + + eventMixin(Doc); + + function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i]; + if (rel.doc == skip) continue; + var shared = sharedHist && rel.sharedHist; + if (sharedHistOnly && !shared) continue; + f(rel.doc, shared); + propagate(rel.doc, doc, shared); + } + } + propagate(doc, null, true); + } + + function attachDoc(cm, doc) { + if (doc.cm) throw new Error("This document is already in use."); + cm.doc = doc; + doc.cm = cm; + estimateLineHeights(cm); + loadMode(cm); + if (!cm.options.lineWrapping) computeMaxLength(cm); + cm.options.mode = doc.modeOption; + regChange(cm); + } + + // LINE UTILITIES + + function getLine(chunk, n) { + n -= chunk.first; + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break; } + n -= sz; + } + } + return chunk.lines[n]; + } + + function getBetween(doc, start, end) { + var out = [], n = start.line; + doc.iter(start.line, end.line + 1, function(line) { + var text = line.text; + if (n == end.line) text = text.slice(0, end.ch); + if (n == start.line) text = text.slice(start.ch); + out.push(text); + ++n; + }); + return out; + } + function getLines(doc, from, to) { + var out = []; + doc.iter(from, to, function(line) { out.push(line.text); }); + return out; + } + + function updateLineHeight(line, height) { + var diff = height - line.height; + for (var n = line; n; n = n.parent) n.height += diff; + } + + function lineNo(line) { + if (line.parent == null) return null; + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) break; + no += chunk.children[i].chunkSize(); + } + } + return no + cur.first; + } + + function lineAtHeight(chunk, h) { + var n = chunk.first; + outer: do { + for (var i = 0, e = chunk.children.length; i < e; ++i) { + var child = chunk.children[i], ch = child.height; + if (h < ch) { chunk = child; continue outer; } + h -= ch; + n += child.chunkSize(); + } + return n; + } while (!chunk.lines); + for (var i = 0, e = chunk.lines.length; i < e; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) break; + h -= lh; + } + return n + i; + } + + function heightAtLine(cm, lineObj) { + lineObj = visualLine(cm.doc, lineObj); + + var h = 0, chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) break; + else h += line.height; + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i = 0; i < p.children.length; ++i) { + var cur = p.children[i]; + if (cur == chunk) break; + else h += cur.height; + } + } + return h; + } + + function getOrder(line) { + var order = line.order; + if (order == null) order = line.order = bidiOrdering(line.text); + return order; + } + + // HISTORY + + function makeHistory(startGen) { + return { + // Arrays of history events. Doing something adds an event to + // done and clears undo. Undoing moves events from done to + // undone, redoing moves them in the other direction. + done: [], undone: [], undoDepth: Infinity, + // Used to track when changes can be merged into a single undo + // event + lastTime: 0, lastOp: null, lastOrigin: null, + // Used by the isClean() method + generation: startGen || 1, maxGeneration: startGen || 1 + }; + } + + function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0; + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { + if (line.markedSpans) + (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; + ++n; + }); + } + + function historyChangeFromChange(doc, change) { + var from = { line: change.from.line, ch: change.from.ch }; + var histChange = {from: from, to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); + return histChange; + } + + function addToHistory(doc, change, selAfter, opId) { + var hist = doc.history; + hist.undone.length = 0; + var time = +new Date, cur = lst(hist.done); + + if (cur && + (hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && doc.cm && hist.lastTime > time - doc.cm.options.historyEventDelay) || + change.origin.charAt(0) == "*"))) { + // Merge this change into the last event + var last = lst(cur.changes); + if (posEq(change.from, change.to) && posEq(change.from, last.to)) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change); + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)); + } + cur.anchorAfter = selAfter.anchor; cur.headAfter = selAfter.head; + } else { + // Can not be merged, start a new event. + cur = {changes: [historyChangeFromChange(doc, change)], + generation: hist.generation, + anchorBefore: doc.sel.anchor, headBefore: doc.sel.head, + anchorAfter: selAfter.anchor, headAfter: selAfter.head}; + hist.done.push(cur); + hist.generation = ++hist.maxGeneration; + while (hist.done.length > hist.undoDepth) + hist.done.shift(); + } + hist.lastTime = time; + hist.lastOp = opId; + hist.lastOrigin = change.origin; + } + + function removeClearedSpans(spans) { + if (!spans) return null; + for (var i = 0, out; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } + else if (out) out.push(spans[i]); + } + return !out ? spans : out.length ? out : null; + } + + function getOldSpans(doc, change) { + var found = change["spans_" + doc.id]; + if (!found) return null; + for (var i = 0, nw = []; i < change.text.length; ++i) + nw.push(removeClearedSpans(found[i])); + return nw; + } + + // Used both to provide a JSON-safe object in .getHistory, and, when + // detaching a document, to split the history in two + function copyHistoryArray(events, newGroup) { + for (var i = 0, copy = []; i < events.length; ++i) { + var event = events[i], changes = event.changes, newChanges = []; + copy.push({changes: newChanges, anchorBefore: event.anchorBefore, headBefore: event.headBefore, + anchorAfter: event.anchorAfter, headAfter: event.headAfter}); + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m; + newChanges.push({from: change.from, to: change.to, text: change.text}); + if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop]; + delete change[prop]; + } + } + } + } + return copy; + } + + // Rebasing/resetting history to deal with externally-sourced changes + + function rebaseHistSel(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff; + } else if (from < pos.line) { + pos.line = from; + pos.ch = 0; + } + } + + // Tries to rebase an array of history events given a change in the + // document. If the change touches the same lines as the event, the + // event, and everything 'behind' it, is discarded. If the change is + // before the event, the event's positions are updated. Uses a + // copy-on-write scheme for the positions, to avoid having to + // reallocate them all on every rebase, but also avoid problems with + // shared position objects being unsafely updated. + function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true; + for (var j = 0; j < sub.changes.length; ++j) { + var cur = sub.changes[j]; + if (!sub.copied) { cur.from = copyPos(cur.from); cur.to = copyPos(cur.to); } + if (to < cur.from.line) { + cur.from.line += diff; + cur.to.line += diff; + } else if (from <= cur.to.line) { + ok = false; + break; + } + } + if (!sub.copied) { + sub.anchorBefore = copyPos(sub.anchorBefore); sub.headBefore = copyPos(sub.headBefore); + sub.anchorAfter = copyPos(sub.anchorAfter); sub.readAfter = copyPos(sub.headAfter); + sub.copied = true; + } + if (!ok) { + array.splice(0, i + 1); + i = 0; + } else { + rebaseHistSel(sub.anchorBefore); rebaseHistSel(sub.headBefore); + rebaseHistSel(sub.anchorAfter); rebaseHistSel(sub.headAfter); + } + } + } + + function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; + rebaseHistArray(hist.done, from, to, diff); + rebaseHistArray(hist.undone, from, to, diff); + } + + // EVENT OPERATORS + + function stopMethod() {e_stop(this);} + // Ensure an event has a stop method. + function addStop(event) { + if (!event.stop) event.stop = stopMethod; + return event; + } + + function e_preventDefault(e) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + function e_stopPropagation(e) { + if (e.stopPropagation) e.stopPropagation(); + else e.cancelBubble = true; + } + function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; + } + function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);} + CodeMirror.e_stop = e_stop; + CodeMirror.e_preventDefault = e_preventDefault; + CodeMirror.e_stopPropagation = e_stopPropagation; + + function e_target(e) {return e.target || e.srcElement;} + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) b = 1; + else if (e.button & 2) b = 3; + else if (e.button & 4) b = 2; + } + if (mac && e.ctrlKey && b == 1) b = 3; + return b; + } + + // EVENT HANDLING + + function on(emitter, type, f) { + if (emitter.addEventListener) + emitter.addEventListener(type, f, false); + else if (emitter.attachEvent) + emitter.attachEvent("on" + type, f); + else { + var map = emitter._handlers || (emitter._handlers = {}); + var arr = map[type] || (map[type] = []); + arr.push(f); + } + } + + function off(emitter, type, f) { + if (emitter.removeEventListener) + emitter.removeEventListener(type, f, false); + else if (emitter.detachEvent) + emitter.detachEvent("on" + type, f); + else { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + for (var i = 0; i < arr.length; ++i) + if (arr[i] == f) { arr.splice(i, 1); break; } + } + } + + function signal(emitter, type /*, values...*/) { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args); + } + + var delayedCallbacks, delayedCallbackDepth = 0; + function signalLater(emitter, type /*, values...*/) { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + var args = Array.prototype.slice.call(arguments, 2); + if (!delayedCallbacks) { + ++delayedCallbackDepth; + delayedCallbacks = []; + setTimeout(fireDelayed, 0); + } + function bnd(f) {return function(){f.apply(null, args);};}; + for (var i = 0; i < arr.length; ++i) + delayedCallbacks.push(bnd(arr[i])); + } + + function signalDOMEvent(cm, e, override) { + signal(cm, override || e.type, cm, e); + return e_defaultPrevented(e) || e.codemirrorIgnore; + } + + function fireDelayed() { + --delayedCallbackDepth; + var delayed = delayedCallbacks; + delayedCallbacks = null; + for (var i = 0; i < delayed.length; ++i) delayed[i](); + } + + function hasHandler(emitter, type) { + var arr = emitter._handlers && emitter._handlers[type]; + return arr && arr.length > 0; + } + + CodeMirror.on = on; CodeMirror.off = off; CodeMirror.signal = signal; + + function eventMixin(ctor) { + ctor.prototype.on = function(type, f) {on(this, type, f);}; + ctor.prototype.off = function(type, f) {off(this, type, f);}; + } + + // MISC UTILITIES + + // Number of pixels added to scroller and sizer to hide scrollbar + var scrollerCutOff = 30; + + // Returned or thrown by various protocols to signal 'I'm not + // handling this'. + var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; + + function Delayed() {this.id = null;} + Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}}; + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + function countColumn(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) end = string.length; + } + for (var i = startIndex || 0, n = startValue || 0; i < end; ++i) { + if (string.charAt(i) == "\t") n += tabSize - (n % tabSize); + else ++n; + } + return n; + } + CodeMirror.countColumn = countColumn; + + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) + spaceStrs.push(lst(spaceStrs) + " "); + return spaceStrs[n]; + } + + function lst(arr) { return arr[arr.length-1]; } + + function selectInput(node) { + if (ios) { // Mobile Safari apparently has a bug where select() is broken. + node.selectionStart = 0; + node.selectionEnd = node.value.length; + } else { + // Suppress mysterious IE10 errors + try { node.select(); } + catch(_e) {} + } + } + + function indexOf(collection, elt) { + if (collection.indexOf) return collection.indexOf(elt); + for (var i = 0, e = collection.length; i < e; ++i) + if (collection[i] == elt) return i; + return -1; + } + + function createObj(base, props) { + function Obj() {} + Obj.prototype = base; + var inst = new Obj(); + if (props) copyObj(props, inst); + return inst; + } + + function copyObj(obj, target) { + if (!target) target = {}; + for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop]; + return target; + } + + function emptyArray(size) { + for (var a = [], i = 0; i < size; ++i) a.push(undefined); + return a; + } + + function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function(){return f.apply(null, args);}; + } + + var nonASCIISingleCaseWordChar = /[\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; + function isWordChar(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); + } + + function isEmpty(obj) { + for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; + return true; + } + + var isExtendingChar = /[\u0300-\u036F\u0483-\u0487\u0488-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\uA66F\uA670-\uA672\uA674-\uA67D\uA69F\udc00-\udfff]/; + + // DOM UTILITIES + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) e.className = className; + if (style) e.style.cssText = style; + if (typeof content == "string") setTextContent(e, content); + else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); + return e; + } + + function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + e.removeChild(e.firstChild); + return e; + } + + function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e); + } + + function setTextContent(e, str) { + if (ie_lt9) { + e.innerHTML = ""; + e.appendChild(document.createTextNode(str)); + } else e.textContent = str; + } + + function getRect(node) { + return node.getBoundingClientRect(); + } + CodeMirror.replaceGetRect = function(f) { getRect = f; }; + + // FEATURE DETECTION + + // Detect drag-and-drop + var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie_lt9) return false; + var div = elt('div'); + return "draggable" in div || "dragDrop" in div; + }(); + + // For a reason I have yet to figure out, some browsers disallow + // word wrapping between certain characters *only* if a new inline + // element is started between them. This makes it hard to reliably + // measure the position of things, since that requires inserting an + // extra span. This terribly fragile set of tests matches the + // character combinations that suffer from this phenomenon on the + // various browsers. + function spanAffectsWrapping() { return false; } + if (gecko) // Only for "$'" + spanAffectsWrapping = function(str, i) { + return str.charCodeAt(i - 1) == 36 && str.charCodeAt(i) == 39; + }; + else if (safari && !/Version\/([6-9]|\d\d)\b/.test(navigator.userAgent)) + spanAffectsWrapping = function(str, i) { + return /\-[^ \-?]|\?[^ !\'\"\),.\-\/:;\?\]\}]/.test(str.slice(i - 1, i + 1)); + }; + else if (webkit && !/Chrome\/(?:29|[3-9]\d|\d\d\d)\./.test(navigator.userAgent)) + spanAffectsWrapping = function(str, i) { + if (i > 1 && str.charCodeAt(i - 1) == 45) { + if (/\w/.test(str.charAt(i - 2)) && /[^\-?\.]/.test(str.charAt(i))) return true; + if (i > 2 && /[\d\.,]/.test(str.charAt(i - 2)) && /[\d\.,]/.test(str.charAt(i))) return false; + } + return /[~!#%&*)=+}\]|\"\.>,:;][({[<]|-[^\-?\.\u2010-\u201f\u2026]|\?[\w~`@#$%\^&*(_=+{[|><]|…[\w~`@#$%\^&*(_=+{[><]/.test(str.slice(i - 1, i + 1)); + }; + + var knownScrollbarWidth; + function scrollbarWidth(measure) { + if (knownScrollbarWidth != null) return knownScrollbarWidth; + var test = elt("div", null, null, "width: 50px; height: 50px; overflow-x: scroll"); + removeChildrenAndAdd(measure, test); + if (test.offsetWidth) + knownScrollbarWidth = test.offsetHeight - test.clientHeight; + return knownScrollbarWidth || 0; + } + + var zwspSupported; + function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) + zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !ie_lt8; + } + if (zwspSupported) return elt("span", "\u200b"); + else return elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) nl = string.length; + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result; + } : function(string){return string.split(/\r\n?|\n/);}; + CodeMirror.splitLines = splitLines; + + var hasSelection = window.getSelection ? function(te) { + try { return te.selectionStart != te.selectionEnd; } + catch(e) { return false; } + } : function(te) { + try {var range = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range || range.parentElement() != te) return false; + return range.compareEndPoints("StartToEnd", range) != 0; + }; + + var hasCopyEvent = (function() { + var e = elt("div"); + if ("oncopy" in e) return true; + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == 'function'; + })(); + + // KEY NAMING + + var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 91: "Mod", 92: "Mod", 93: "Mod", 109: "-", 107: "=", 127: "Delete", + 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63276: "PageUp", 63277: "PageDown", 63275: "End", 63273: "Home", + 63234: "Left", 63232: "Up", 63235: "Right", 63233: "Down", 63302: "Insert", 63272: "Delete"}; + CodeMirror.keyNames = keyNames; + (function() { + // Number keys + for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i); + // Alphabetic keys + for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); + // Function keys + for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; + })(); + + // BIDI HELPERS + + function iterateBidiSections(order, from, to, f) { + if (!order) return f(from, to, "ltr"); + var found = false; + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); + found = true; + } + } + if (!found) f(from, to, "ltr"); + } + + function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } + function bidiRight(part) { return part.level % 2 ? part.from : part.to; } + + function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } + function lineRight(line) { + var order = getOrder(line); + if (!order) return line.text.length; + return bidiRight(lst(order)); + } + + function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLine(cm.doc, line); + if (visual != line) lineN = lineNo(visual); + var order = getOrder(visual); + var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); + return Pos(lineN, ch); + } + function lineEnd(cm, lineN) { + var merged, line; + while (merged = collapsedSpanAtEnd(line = getLine(cm.doc, lineN))) + lineN = merged.find().to.line; + var order = getOrder(line); + var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); + return Pos(lineN, ch); + } + + function compareBidiLevel(order, a, b) { + var linedir = order[0].level; + if (a == linedir) return true; + if (b == linedir) return false; + return a < b; + } + var bidiOther; + function getBidiPartAt(order, pos) { + for (var i = 0, found; i < order.length; ++i) { + var cur = order[i]; + if (cur.from < pos && cur.to > pos) { bidiOther = null; return i; } + if (cur.from == pos || cur.to == pos) { + if (found == null) { + found = i; + } else if (compareBidiLevel(order, cur.level, order[found].level)) { + bidiOther = found; + return i; + } else { + bidiOther = i; + return found; + } + } + } + bidiOther = null; + return found; + } + + function moveInLine(line, pos, dir, byUnit) { + if (!byUnit) return pos + dir; + do pos += dir; + while (pos > 0 && isExtendingChar.test(line.text.charAt(pos))); + return pos; + } + + // This is somewhat involved. It is needed in order to move + // 'visually' through bi-directional text -- i.e., pressing left + // should make the cursor go left, even when in RTL text. The + // tricky part is the 'jumps', where RTL and LTR text touch each + // other. This often requires the cursor offset to move more than + // one unit, in order to visually move one unit. + function moveVisually(line, start, dir, byUnit) { + var bidi = getOrder(line); + if (!bidi) return moveLogically(line, start, dir, byUnit); + var pos = getBidiPartAt(bidi, start), part = bidi[pos]; + var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); + + for (;;) { + if (target > part.from && target < part.to) return target; + if (target == part.from || target == part.to) { + if (getBidiPartAt(bidi, target) == pos) return target; + part = bidi[pos += dir]; + return (dir > 0) == part.level % 2 ? part.to : part.from; + } else { + part = bidi[pos += dir]; + if (!part) return null; + if ((dir > 0) == part.level % 2) + target = moveInLine(line, part.to, -1, byUnit); + else + target = moveInLine(line, part.from, 1, byUnit); + } + } + } + + function moveLogically(line, start, dir, byUnit) { + var target = start + dir; + if (byUnit) while (target > 0 && isExtendingChar.test(line.text.charAt(target))) target += dir; + return target < 0 || target > line.text.length ? null : target; + } + + // Bidirectional ordering algorithm + // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm + // that this (partially) implements. + + // One-char codes used for character types: + // L (L): Left-to-Right + // R (R): Right-to-Left + // r (AL): Right-to-Left Arabic + // 1 (EN): European Number + // + (ES): European Number Separator + // % (ET): European Number Terminator + // n (AN): Arabic Number + // , (CS): Common Number Separator + // m (NSM): Non-Spacing Mark + // b (BN): Boundary Neutral + // s (B): Paragraph Separator + // t (S): Segment Separator + // w (WS): Whitespace + // N (ON): Other Neutrals + + // Returns null if characters are ordered as they appear + // (left-to-right), or an array of sections ({from, to, level} + // objects) in the order in which they occur visually. + var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL"; + // Character types for codepoints 0x600 to 0x6ff + var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmmrrrrrrrrrrrrrrrrrr"; + function charType(code) { + if (code <= 0xff) return lowTypes.charAt(code); + else if (0x590 <= code && code <= 0x5f4) return "R"; + else if (0x600 <= code && code <= 0x6ff) return arabicTypes.charAt(code - 0x600); + else if (0x700 <= code && code <= 0x8ac) return "r"; + else return "L"; + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; + // Browsers seem to always treat the boundaries of block elements as being L. + var outerType = "L"; + + return function(str) { + if (!bidiRE.test(str)) return false; + var len = str.length, types = []; + for (var i = 0, type; i < len; ++i) + types.push(type = charType(str.charCodeAt(i))); + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i = 0, prev = outerType; i < len; ++i) { + var type = types[i]; + if (type == "m") types[i] = prev; + else prev = type; + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i = 0, cur = outerType; i < len; ++i) { + var type = types[i]; + if (type == "1" && cur == "r") types[i] = "n"; + else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i = 1, prev = types[0]; i < len - 1; ++i) { + var type = types[i]; + if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; + else if (type == "," && prev == types[i+1] && + (prev == "1" || prev == "n")) types[i] = prev; + prev = type; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i = 0; i < len; ++i) { + var type = types[i]; + if (type == ",") types[i] = "N"; + else if (type == "%") { + for (var end = i + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i && types[i-1] == "!") || (end < len - 1 && types[end] == "1") ? "1" : "N"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i = 0, cur = outerType; i < len; ++i) { + var type = types[i]; + if (cur == "L" && type == "1") types[i] = "L"; + else if (isStrong.test(type)) cur = type; + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i = 0; i < len; ++i) { + if (isNeutral.test(types[i])) { + for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} + var before = (i ? types[i-1] : outerType) == "L"; + var after = (end < len - 1 ? types[end] : outerType) == "L"; + var replace = before || after ? "L" : "R"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m; + for (var i = 0; i < len;) { + if (countsAsLeft.test(types[i])) { + var start = i; + for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} + order.push({from: start, to: i, level: 0}); + } else { + var pos = i, at = order.length; + for (++i; i < len && types[i] != "L"; ++i) {} + for (var j = pos; j < i;) { + if (countsAsNum.test(types[j])) { + if (pos < j) order.splice(at, 0, {from: pos, to: j, level: 1}); + var nstart = j; + for (++j; j < i && countsAsNum.test(types[j]); ++j) {} + order.splice(at, 0, {from: nstart, to: j, level: 2}); + pos = j; + } else ++j; + } + if (pos < i) order.splice(at, 0, {from: pos, to: i, level: 1}); + } + } + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift({from: 0, to: m[0].length, level: 0}); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push({from: len - m[0].length, to: len, level: 0}); + } + if (order[0].level != lst(order).level) + order.push({from: len, to: len, level: order[0].level}); + + return order; + }; + })(); + + // THE END + + CodeMirror.version = "3.15.0"; + + return CodeMirror; +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/apl/apl.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/apl/apl.js new file mode 100644 index 0000000..5c23af8 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/apl/apl.js @@ -0,0 +1,160 @@ +CodeMirror.defineMode("apl", function() { + var builtInOps = { + ".": "innerProduct", + "\\": "scan", + "/": "reduce", + "⌿": "reduce1Axis", + "⍀": "scan1Axis", + "¨": "each", + "⍣": "power" + }; + var builtInFuncs = { + "+": ["conjugate", "add"], + "−": ["negate", "subtract"], + "×": ["signOf", "multiply"], + "÷": ["reciprocal", "divide"], + "⌈": ["ceiling", "greaterOf"], + "⌊": ["floor", "lesserOf"], + "∣": ["absolute", "residue"], + "⍳": ["indexGenerate", "indexOf"], + "?": ["roll", "deal"], + "⋆": ["exponentiate", "toThePowerOf"], + "⍟": ["naturalLog", "logToTheBase"], + "○": ["piTimes", "circularFuncs"], + "!": ["factorial", "binomial"], + "⌹": ["matrixInverse", "matrixDivide"], + "<": [null, "lessThan"], + "≤": [null, "lessThanOrEqual"], + "=": [null, "equals"], + ">": [null, "greaterThan"], + "≥": [null, "greaterThanOrEqual"], + "≠": [null, "notEqual"], + "≡": ["depth", "match"], + "≢": [null, "notMatch"], + "∈": ["enlist", "membership"], + "⍷": [null, "find"], + "∪": ["unique", "union"], + "∩": [null, "intersection"], + "∼": ["not", "without"], + "∨": [null, "or"], + "∧": [null, "and"], + "⍱": [null, "nor"], + "⍲": [null, "nand"], + "⍴": ["shapeOf", "reshape"], + ",": ["ravel", "catenate"], + "⍪": [null, "firstAxisCatenate"], + "⌽": ["reverse", "rotate"], + "⊖": ["axis1Reverse", "axis1Rotate"], + "⍉": ["transpose", null], + "↑": ["first", "take"], + "↓": [null, "drop"], + "⊂": ["enclose", "partitionWithAxis"], + "⊃": ["diclose", "pick"], + "⌷": [null, "index"], + "⍋": ["gradeUp", null], + "⍒": ["gradeDown", null], + "⊤": ["encode", null], + "⊥": ["decode", null], + "⍕": ["format", "formatByExample"], + "⍎": ["execute", null], + "⊣": ["stop", "left"], + "⊢": ["pass", "right"] + }; + + var isOperator = /[\.\/⌿⍀¨⍣]/; + var isNiladic = /⍬/; + var isFunction = /[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/; + var isArrow = /←/; + var isComment = /[⍝#].*$/; + + var stringEater = function(type) { + var prev; + prev = false; + return function(c) { + prev = c; + if (c === type) { + return prev === "\\"; + } + return true; + }; + }; + return { + startState: function() { + return { + prev: false, + func: false, + op: false, + string: false, + escape: false + }; + }, + token: function(stream, state) { + var ch, funcName, word; + if (stream.eatSpace()) { + return null; + } + ch = stream.next(); + if (ch === '"' || ch === "'") { + stream.eatWhile(stringEater(ch)); + stream.next(); + state.prev = true; + return "string"; + } + if (/[\[{\(]/.test(ch)) { + state.prev = false; + return null; + } + if (/[\]}\)]/.test(ch)) { + state.prev = true; + return null; + } + if (isNiladic.test(ch)) { + state.prev = false; + return "niladic"; + } + if (/[¯\d]/.test(ch)) { + if (state.func) { + state.func = false; + state.prev = false; + } else { + state.prev = true; + } + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (isOperator.test(ch)) { + return "operator apl-" + builtInOps[ch]; + } + if (isArrow.test(ch)) { + return "apl-arrow"; + } + if (isFunction.test(ch)) { + funcName = "apl-"; + if (builtInFuncs[ch] != null) { + if (state.prev) { + funcName += builtInFuncs[ch][1]; + } else { + funcName += builtInFuncs[ch][0]; + } + } + state.func = true; + state.prev = false; + return "function " + funcName; + } + if (isComment.test(ch)) { + stream.skipToEnd(); + return "comment"; + } + if (ch === "∘" && stream.peek() === ".") { + stream.next(); + return "function jot-dot"; + } + stream.eatWhile(/[\w\$_]/); + word = stream.current(); + state.prev = true; + return "keyword"; + } + }; +}); + +CodeMirror.defineMIME("text/apl", "apl"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/apl/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/apl/index.html new file mode 100644 index 0000000..119ff17 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/apl/index.html @@ -0,0 +1,61 @@ + + + + + CodeMirror: APL mode + + + + + + + + +

              CodeMirror: APL mode

              + +
              + + + +

              Simple mode that tries to handle APL as well as it can.

              +

              It attempts to label functions/operators based upon + monadic/dyadic usage (but this is far from fully fleshed out). + This means there are meaningful classnames so hover states can + have popups etc.

              + +

              MIME types defined: text/apl (APL code)

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/asterisk/asterisk.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/asterisk/asterisk.js new file mode 100644 index 0000000..60b689d --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/asterisk/asterisk.js @@ -0,0 +1,183 @@ +/* + * ===================================================================================== + * + * Filename: mode/asterisk/asterisk.js + * + * Description: CodeMirror mode for Asterisk dialplan + * + * Created: 05/17/2012 09:20:25 PM + * Revision: none + * + * Author: Stas Kobzar (stas@modulis.ca), + * Company: Modulis.ca Inc. + * + * ===================================================================================== + */ + +CodeMirror.defineMode("asterisk", function() { + var atoms = ["exten", "same", "include","ignorepat","switch"], + dpcmd = ["#include","#exec"], + apps = [ + "addqueuemember","adsiprog","aelsub","agentlogin","agentmonitoroutgoing","agi", + "alarmreceiver","amd","answer","authenticate","background","backgrounddetect", + "bridge","busy","callcompletioncancel","callcompletionrequest","celgenuserevent", + "changemonitor","chanisavail","channelredirect","chanspy","clearhash","confbridge", + "congestion","continuewhile","controlplayback","dahdiacceptr2call","dahdibarge", + "dahdiras","dahdiscan","dahdisendcallreroutingfacility","dahdisendkeypadfacility", + "datetime","dbdel","dbdeltree","deadagi","dial","dictate","directory","disa", + "dumpchan","eagi","echo","endwhile","exec","execif","execiftime","exitwhile","extenspy", + "externalivr","festival","flash","followme","forkcdr","getcpeid","gosub","gosubif", + "goto","gotoif","gotoiftime","hangup","iax2provision","ices","importvar","incomplete", + "ivrdemo","jabberjoin","jabberleave","jabbersend","jabbersendgroup","jabberstatus", + "jack","log","macro","macroexclusive","macroexit","macroif","mailboxexists","meetme", + "meetmeadmin","meetmechanneladmin","meetmecount","milliwatt","minivmaccmess","minivmdelete", + "minivmgreet","minivmmwi","minivmnotify","minivmrecord","mixmonitor","monitor","morsecode", + "mp3player","mset","musiconhold","nbscat","nocdr","noop","odbc","odbc","odbcfinish", + "originate","ospauth","ospfinish","osplookup","ospnext","page","park","parkandannounce", + "parkedcall","pausemonitor","pausequeuemember","pickup","pickupchan","playback","playtones", + "privacymanager","proceeding","progress","queue","queuelog","raiseexception","read","readexten", + "readfile","receivefax","receivefax","receivefax","record","removequeuemember", + "resetcdr","retrydial","return","ringing","sayalpha","saycountedadj","saycountednoun", + "saycountpl","saydigits","saynumber","sayphonetic","sayunixtime","senddtmf","sendfax", + "sendfax","sendfax","sendimage","sendtext","sendurl","set","setamaflags", + "setcallerpres","setmusiconhold","sipaddheader","sipdtmfmode","sipremoveheader","skel", + "slastation","slatrunk","sms","softhangup","speechactivategrammar","speechbackground", + "speechcreate","speechdeactivategrammar","speechdestroy","speechloadgrammar","speechprocessingsound", + "speechstart","speechunloadgrammar","stackpop","startmusiconhold","stopmixmonitor","stopmonitor", + "stopmusiconhold","stopplaytones","system","testclient","testserver","transfer","tryexec", + "trysystem","unpausemonitor","unpausequeuemember","userevent","verbose","vmauthenticate", + "vmsayname","voicemail","voicemailmain","wait","waitexten","waitfornoise","waitforring", + "waitforsilence","waitmusiconhold","waituntil","while","zapateller" + ]; + + function basicToken(stream,state){ + var cur = ''; + var ch = ''; + ch = stream.next(); + // comment + if(ch == ";") { + stream.skipToEnd(); + return "comment"; + } + // context + if(ch == '[') { + stream.skipTo(']'); + stream.eat(']'); + return "header"; + } + // string + if(ch == '"') { + stream.skipTo('"'); + return "string"; + } + if(ch == "'") { + stream.skipTo("'"); + return "string-2"; + } + // dialplan commands + if(ch == '#') { + stream.eatWhile(/\w/); + cur = stream.current(); + if(dpcmd.indexOf(cur) !== -1) { + stream.skipToEnd(); + return "strong"; + } + } + // application args + if(ch == '$'){ + var ch1 = stream.peek(); + if(ch1 == '{'){ + stream.skipTo('}'); + stream.eat('}'); + return "variable-3"; + } + } + // extension + stream.eatWhile(/\w/); + cur = stream.current(); + if(atoms.indexOf(cur) !== -1) { + state.extenStart = true; + switch(cur) { + case 'same': state.extenSame = true; break; + case 'include': + case 'switch': + case 'ignorepat': + state.extenInclude = true;break; + default:break; + } + return "atom"; + } + } + + return { + startState: function() { + return { + extenStart: false, + extenSame: false, + extenInclude: false, + extenExten: false, + extenPriority: false, + extenApplication: false + }; + }, + token: function(stream, state) { + + var cur = ''; + var ch = ''; + if(stream.eatSpace()) return null; + // extension started + if(state.extenStart){ + stream.eatWhile(/[^\s]/); + cur = stream.current(); + if(/^=>?$/.test(cur)){ + state.extenExten = true; + state.extenStart = false; + return "strong"; + } else { + state.extenStart = false; + stream.skipToEnd(); + return "error"; + } + } else if(state.extenExten) { + // set exten and priority + state.extenExten = false; + state.extenPriority = true; + stream.eatWhile(/[^,]/); + if(state.extenInclude) { + stream.skipToEnd(); + state.extenPriority = false; + state.extenInclude = false; + } + if(state.extenSame) { + state.extenPriority = false; + state.extenSame = false; + state.extenApplication = true; + } + return "tag"; + } else if(state.extenPriority) { + state.extenPriority = false; + state.extenApplication = true; + ch = stream.next(); // get comma + if(state.extenSame) return null; + stream.eatWhile(/[^,]/); + return "number"; + } else if(state.extenApplication) { + stream.eatWhile(/,/); + cur = stream.current(); + if(cur === ',') return null; + stream.eatWhile(/\w/); + cur = stream.current().toLowerCase(); + state.extenApplication = false; + if(apps.indexOf(cur) !== -1){ + return "def strong"; + } + } else{ + return basicToken(stream,state); + } + + return null; + } + }; +}); + +CodeMirror.defineMIME("text/x-asterisk", "asterisk"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/asterisk/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/asterisk/index.html new file mode 100644 index 0000000..0a796a0 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/asterisk/index.html @@ -0,0 +1,142 @@ + + + + + CodeMirror: Asterisk dialplan mode + + + + + + + +

              CodeMirror: Asterisk dialplan mode

              +
              + + +

              MIME types defined: text/x-asterisk.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clike/clike.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clike/clike.js new file mode 100644 index 0000000..f6626cd --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clike/clike.js @@ -0,0 +1,362 @@ +CodeMirror.defineMode("clike", function(config, parserConfig) { + var indentUnit = config.indentUnit, + statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, + dontAlignCalls = parserConfig.dontAlignCalls, + keywords = parserConfig.keywords || {}, + builtin = parserConfig.builtin || {}, + blockKeywords = parserConfig.blockKeywords || {}, + atoms = parserConfig.atoms || {}, + hooks = parserConfig.hooks || {}, + multiLineStrings = parserConfig.multiLineStrings; + var isOperatorChar = /[+\-*&%=<>!?|\/]/; + + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "keyword"; + } + if (builtin.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "builtin"; + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + var indent = state.indented; + if (state.context && state.context.type == "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement") popContext(state); + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement")) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; + var closing = firstChar == ctx.type; + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); + else if (ctx.align && (!dontAlignCalls || ctx.type != ")")) return ctx.column + (closing ? 0 : 1); + else if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit; + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + fold: "brace" + }; +}); + +(function() { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var cKeywords = "auto if break int case long char register continue return default short do sizeof " + + "double static else struct entry switch extern typedef float union for unsigned " + + "goto while enum void const signed volatile"; + + function cppHook(stream, state) { + if (!state.startOfLine) return false; + for (;;) { + if (stream.skipTo("\\")) { + stream.next(); + if (stream.eol()) { + state.tokenize = cppHook; + break; + } + } else { + stream.skipToEnd(); + state.tokenize = null; + break; + } + } + return "meta"; + } + + // C#-style strings where "" escapes a quote. + function tokenAtString(stream, state) { + var next; + while ((next = stream.next()) != null) { + if (next == '"' && !stream.eat('"')) { + state.tokenize = null; + break; + } + } + return "string"; + } + + function mimes(ms, mode) { + for (var i = 0; i < ms.length; ++i) CodeMirror.defineMIME(ms[i], mode); + } + + mimes(["text/x-csrc", "text/x-c", "text/x-chdr"], { + name: "clike", + keywords: words(cKeywords), + blockKeywords: words("case do else for if switch while struct"), + atoms: words("null"), + hooks: {"#": cppHook} + }); + mimes(["text/x-c++src", "text/x-c++hdr"], { + name: "clike", + keywords: words(cKeywords + " asm dynamic_cast namespace reinterpret_cast try bool explicit new " + + "static_cast typeid catch operator template typename class friend private " + + "this using const_cast inline public throw virtual delete mutable protected " + + "wchar_t"), + blockKeywords: words("catch class do else finally for if struct switch try while"), + atoms: words("true false null"), + hooks: {"#": cppHook} + }); + CodeMirror.defineMIME("text/x-java", { + name: "clike", + keywords: words("abstract assert boolean break byte case catch char class const continue default " + + "do double else enum extends final finally float for goto if implements import " + + "instanceof int interface long native new package private protected public " + + "return short static strictfp super switch synchronized this throw throws transient " + + "try void volatile while"), + blockKeywords: words("catch class do else finally for if switch try while"), + atoms: words("true false null"), + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + } + }); + CodeMirror.defineMIME("text/x-csharp", { + name: "clike", + keywords: words("abstract as base break case catch checked class const continue" + + " default delegate do else enum event explicit extern finally fixed for" + + " foreach goto if implicit in interface internal is lock namespace new" + + " operator out override params private protected public readonly ref return sealed" + + " sizeof stackalloc static struct switch this throw try typeof unchecked" + + " unsafe using virtual void volatile while add alias ascending descending dynamic from get" + + " global group into join let orderby partial remove select set value var yield"), + blockKeywords: words("catch class do else finally for foreach if struct switch try while"), + builtin: words("Boolean Byte Char DateTime DateTimeOffset Decimal Double" + + " Guid Int16 Int32 Int64 Object SByte Single String TimeSpan UInt16 UInt32" + + " UInt64 bool byte char decimal double short int long object" + + " sbyte float string ushort uint ulong"), + atoms: words("true false null"), + hooks: { + "@": function(stream, state) { + if (stream.eat('"')) { + state.tokenize = tokenAtString; + return tokenAtString(stream, state); + } + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + } + }); + CodeMirror.defineMIME("text/x-scala", { + name: "clike", + keywords: words( + + /* scala */ + "abstract case catch class def do else extends false final finally for forSome if " + + "implicit import lazy match new null object override package private protected return " + + "sealed super this throw trait try trye type val var while with yield _ : = => <- <: " + + "<% >: # @ " + + + /* package scala */ + "assert assume require print println printf readLine readBoolean readByte readShort " + + "readChar readInt readLong readFloat readDouble " + + + "AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either " + + "Enumeration Equiv Error Exception Fractional Function IndexedSeq Integral Iterable " + + "Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering " + + "Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder " + + "StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector :: #:: " + + + /* package java.lang */ + "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" + + + ), + blockKeywords: words("catch class do else finally for forSome if match switch try while"), + atoms: words("true false null"), + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + } + }); + mimes(["x-shader/x-vertex", "x-shader/x-fragment"], { + name: "clike", + keywords: words("float int bool void " + + "vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 " + + "mat2 mat3 mat4 " + + "sampler1D sampler2D sampler3D samplerCube " + + "sampler1DShadow sampler2DShadow" + + "const attribute uniform varying " + + "break continue discard return " + + "for while do if else struct " + + "in out inout"), + blockKeywords: words("for while do if else struct"), + builtin: words("radians degrees sin cos tan asin acos atan " + + "pow exp log exp2 sqrt inversesqrt " + + "abs sign floor ceil fract mod min max clamp mix step smootstep " + + "length distance dot cross normalize ftransform faceforward " + + "reflect refract matrixCompMult " + + "lessThan lessThanEqual greaterThan greaterThanEqual " + + "equal notEqual any all not " + + "texture1D texture1DProj texture1DLod texture1DProjLod " + + "texture2D texture2DProj texture2DLod texture2DProjLod " + + "texture3D texture3DProj texture3DLod texture3DProjLod " + + "textureCube textureCubeLod " + + "shadow1D shadow2D shadow1DProj shadow2DProj " + + "shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod " + + "dFdx dFdy fwidth " + + "noise1 noise2 noise3 noise4"), + atoms: words("true false " + + "gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex " + + "gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 " + + "gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 " + + "gl_FogCoord " + + "gl_Position gl_PointSize gl_ClipVertex " + + "gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor " + + "gl_TexCoord gl_FogFragCoord " + + "gl_FragCoord gl_FrontFacing " + + "gl_FragColor gl_FragData gl_FragDepth " + + "gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix " + + "gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse " + + "gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse " + + "gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose " + + "gl_ProjectionMatrixInverseTranspose " + + "gl_ModelViewProjectionMatrixInverseTranspose " + + "gl_TextureMatrixInverseTranspose " + + "gl_NormalScale gl_DepthRange gl_ClipPlane " + + "gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel " + + "gl_FrontLightModelProduct gl_BackLightModelProduct " + + "gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ " + + "gl_FogParameters " + + "gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords " + + "gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats " + + "gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits " + + "gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits " + + "gl_MaxDrawBuffers"), + hooks: {"#": cppHook} + }); +}()); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clike/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clike/index.html new file mode 100644 index 0000000..5f90394 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clike/index.html @@ -0,0 +1,103 @@ + + + + + CodeMirror: C-like mode + + + + + + + + +

              CodeMirror: C-like mode

              + +
              + + + +

              Simple mode that tries to handle C-like languages as well as it + can. Takes two configuration parameters: keywords, an + object whose property names are the keywords in the language, + and useCPP, which determines whether C preprocessor + directives are recognized.

              + +

              MIME types defined: text/x-csrc + (C code), text/x-c++src (C++ + code), text/x-java (Java + code), text/x-csharp (C#).

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clike/scala.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clike/scala.html new file mode 100644 index 0000000..f3c7eea --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clike/scala.html @@ -0,0 +1,767 @@ + + + + + CodeMirror: C-like mode + + + + + + + + + +
              + +
              + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clojure/clojure.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clojure/clojure.js new file mode 100644 index 0000000..ee22a12 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clojure/clojure.js @@ -0,0 +1,224 @@ +/** + * Author: Hans Engel + * Branched from CodeMirror's Scheme mode (by Koh Zi Han, based on implementation by Koh Zi Chun) + */ +CodeMirror.defineMode("clojure", function () { + var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", CHARACTER = "string-2", + ATOM = "atom", NUMBER = "number", BRACKET = "bracket", KEYWORD = "keyword"; + var INDENT_WORD_SKIP = 2; + + function makeKeywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var atoms = makeKeywords("true false nil"); + + var keywords = makeKeywords( + "defn defn- def def- defonce defmulti defmethod defmacro defstruct deftype defprotocol defrecord defproject deftest slice defalias defhinted defmacro- defn-memo defnk defnk defonce- defunbound defunbound- defvar defvar- let letfn do case cond condp for loop recur when when-not when-let when-first if if-let if-not . .. -> ->> doto and or dosync doseq dotimes dorun doall load import unimport ns in-ns refer try catch finally throw with-open with-local-vars binding gen-class gen-and-load-class gen-and-save-class handler-case handle"); + + var builtins = makeKeywords( + "* *' *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *compiler-options* *data-readers* *e *err* *file* *flush-on-newline* *fn-loader* *in* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *unchecked-math* *use-context-classloader* *verbose-defrecords* *warn-on-reflection* + +' - -' -> ->> ->ArrayChunk ->Vec ->VecNode ->VecSeq -cache-protocol-fn -reset-methods .. / < <= = == > >= EMPTY-NODE accessor aclone add-classpath add-watch agent agent-error agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint biginteger binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* bound? butlast byte byte-array bytes case cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec dec' decimal? declare default-data-readers definline definterface defmacro defmethod defmulti defn defn- defonce defprotocol defrecord defstruct deftype delay delay? deliver denominator deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq error-handler error-mode eval even? every-pred every? ex-data ex-info extend extend-protocol extend-type extenders extends? false? ffirst file-seq filter filterv find find-keyword find-ns find-protocol-impl find-protocol-method find-var first flatten float float-array float? floats flush fn fn? fnext fnil for force format frequencies future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator group-by hash hash-combine hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc inc' init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt keep keep-indexed key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map-indexed map? mapcat mapv max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod munge name namespace namespace-munge neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext nthrest num number? numerator object-array odd? or parents partial partition partition-all partition-by pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-dup print-method print-simple print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int rand-nth range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string realized? reduce reduce-kv reductions ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure reify release-pending-sends rem remove remove-all-methods remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest restart-agent resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off seq seq? seque sequence sequential? set set-error-handler! set-error-mode! set-validator! set? short short-array shorts shuffle shutdown-agents slurp some some-fn sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-symbol? spit split-at split-with str string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync take take-last take-nth take-while test the-ns thread-bound? time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-add-int unchecked-byte unchecked-char unchecked-dec unchecked-dec-int unchecked-divide-int unchecked-double unchecked-float unchecked-inc unchecked-inc-int unchecked-int unchecked-long unchecked-multiply unchecked-multiply-int unchecked-negate unchecked-negate-int unchecked-remainder-int unchecked-short unchecked-subtract unchecked-subtract-int underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector-of vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision with-redefs with-redefs-fn xml-seq zero? zipmap *default-data-reader-fn* as-> cond-> cond->> reduced reduced? send-via set-agent-send-executor! set-agent-send-off-executor! some-> some->>"); + + var indentKeys = makeKeywords( + // Built-ins + "ns fn def defn defmethod bound-fn if if-not case condp when while when-not when-first do future comment doto locking proxy with-open with-precision reify deftype defrecord defprotocol extend extend-protocol extend-type try catch " + + + // Binding forms + "let letfn binding loop for doseq dotimes when-let if-let " + + + // Data structures + "defstruct struct-map assoc " + + + // clojure.test + "testing deftest " + + + // contrib + "handler-case handle dotrace deftrace"); + + var tests = { + digit: /\d/, + digit_or_colon: /[\d:]/, + hex: /[0-9a-f]/i, + sign: /[+-]/, + exponent: /e/i, + keyword_char: /[^\s\(\[\;\)\]]/, + symbol: /[\w*+!\-\._?:\/]/ + }; + + function stateStack(indent, type, prev) { // represents a state stack object + this.indent = indent; + this.type = type; + this.prev = prev; + } + + function pushStack(state, indent, type) { + state.indentStack = new stateStack(indent, type, state.indentStack); + } + + function popStack(state) { + state.indentStack = state.indentStack.prev; + } + + function isNumber(ch, stream){ + // hex + if ( ch === '0' && stream.eat(/x/i) ) { + stream.eatWhile(tests.hex); + return true; + } + + // leading sign + if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) { + stream.eat(tests.sign); + ch = stream.next(); + } + + if ( tests.digit.test(ch) ) { + stream.eat(ch); + stream.eatWhile(tests.digit); + + if ( '.' == stream.peek() ) { + stream.eat('.'); + stream.eatWhile(tests.digit); + } + + if ( stream.eat(tests.exponent) ) { + stream.eat(tests.sign); + stream.eatWhile(tests.digit); + } + + return true; + } + + return false; + } + + // Eat character that starts after backslash \ + function eatCharacter(stream) { + var first = stream.next(); + // Read special literals: backspace, newline, space, return. + // Just read all lowercase letters. + if (first.match(/[a-z]/) && stream.match(/[a-z]+/, true)) { + return; + } + // Read unicode character: \u1000 \uA0a1 + if (first === "u") { + stream.match(/[0-9a-z]{4}/i, true); + } + } + + return { + startState: function () { + return { + indentStack: null, + indentation: 0, + mode: false + }; + }, + + token: function (stream, state) { + if (state.indentStack == null && stream.sol()) { + // update indentation, but only if indentStack is empty + state.indentation = stream.indentation(); + } + + // skip spaces + if (stream.eatSpace()) { + return null; + } + var returnType = null; + + switch(state.mode){ + case "string": // multi-line string parsing mode + var next, escaped = false; + while ((next = stream.next()) != null) { + if (next == "\"" && !escaped) { + + state.mode = false; + break; + } + escaped = !escaped && next == "\\"; + } + returnType = STRING; // continue on in string mode + break; + default: // default parsing mode + var ch = stream.next(); + + if (ch == "\"") { + state.mode = "string"; + returnType = STRING; + } else if (ch == "\\") { + eatCharacter(stream); + returnType = CHARACTER; + } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) { + returnType = ATOM; + } else if (ch == ";") { // comment + stream.skipToEnd(); // rest of the line is a comment + returnType = COMMENT; + } else if (isNumber(ch,stream)){ + returnType = NUMBER; + } else if (ch == "(" || ch == "[" || ch == "{" ) { + var keyWord = '', indentTemp = stream.column(), letter; + /** + Either + (indent-word .. + (non-indent-word .. + (;something else, bracket, etc. + */ + + if (ch == "(") while ((letter = stream.eat(tests.keyword_char)) != null) { + keyWord += letter; + } + + if (keyWord.length > 0 && (indentKeys.propertyIsEnumerable(keyWord) || + /^(?:def|with)/.test(keyWord))) { // indent-word + pushStack(state, indentTemp + INDENT_WORD_SKIP, ch); + } else { // non-indent word + // we continue eating the spaces + stream.eatSpace(); + if (stream.eol() || stream.peek() == ";") { + // nothing significant after + // we restart indentation 1 space after + pushStack(state, indentTemp + 1, ch); + } else { + pushStack(state, indentTemp + stream.current().length, ch); // else we match + } + } + stream.backUp(stream.current().length - 1); // undo all the eating + + returnType = BRACKET; + } else if (ch == ")" || ch == "]" || ch == "}") { + returnType = BRACKET; + if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : (ch == "]" ? "[" :"{"))) { + popStack(state); + } + } else if ( ch == ":" ) { + stream.eatWhile(tests.symbol); + return ATOM; + } else { + stream.eatWhile(tests.symbol); + + if (keywords && keywords.propertyIsEnumerable(stream.current())) { + returnType = KEYWORD; + } else if (builtins && builtins.propertyIsEnumerable(stream.current())) { + returnType = BUILTIN; + } else if (atoms && atoms.propertyIsEnumerable(stream.current())) { + returnType = ATOM; + } else returnType = null; + } + } + + return returnType; + }, + + indent: function (state) { + if (state.indentStack == null) return state.indentation; + return state.indentStack.indent; + }, + + lineComment: ";;" + }; +}); + +CodeMirror.defineMIME("text/x-clojure", "clojure"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clojure/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clojure/index.html new file mode 100644 index 0000000..bfe6fc9 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/clojure/index.html @@ -0,0 +1,76 @@ + + + + + CodeMirror: Clojure mode + + + + + + + +

              CodeMirror: Clojure mode

              +
              + + +

              MIME types defined: text/x-clojure.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/cobol/cobol.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/cobol/cobol.js new file mode 100644 index 0000000..d92491d --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/cobol/cobol.js @@ -0,0 +1,240 @@ +/** + * Author: Gautam Mehta + * Branched from CodeMirror's Scheme mode + */ +CodeMirror.defineMode("cobol", function () { + var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", + ATOM = "atom", NUMBER = "number", KEYWORD = "keyword", MODTAG = "header", + COBOLLINENUM = "def", PERIOD = "link"; + function makeKeywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var atoms = makeKeywords("TRUE FALSE ZEROES ZEROS ZERO SPACES SPACE LOW-VALUE LOW-VALUES "); + var keywords = makeKeywords( + "ACCEPT ACCESS ACQUIRE ADD ADDRESS " + + "ADVANCING AFTER ALIAS ALL ALPHABET " + + "ALPHABETIC ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED " + + "ALSO ALTER ALTERNATE AND ANY " + + "ARE AREA AREAS ARITHMETIC ASCENDING " + + "ASSIGN AT ATTRIBUTE AUTHOR AUTO " + + "AUTO-SKIP AUTOMATIC B-AND B-EXOR B-LESS " + + "B-NOT B-OR BACKGROUND-COLOR BACKGROUND-COLOUR BEEP " + + "BEFORE BELL BINARY BIT BITS " + + "BLANK BLINK BLOCK BOOLEAN BOTTOM " + + "BY CALL CANCEL CD CF " + + "CH CHARACTER CHARACTERS CLASS CLOCK-UNITS " + + "CLOSE COBOL CODE CODE-SET COL " + + "COLLATING COLUMN COMMA COMMIT COMMITMENT " + + "COMMON COMMUNICATION COMP COMP-0 COMP-1 " + + "COMP-2 COMP-3 COMP-4 COMP-5 COMP-6 " + + "COMP-7 COMP-8 COMP-9 COMPUTATIONAL COMPUTATIONAL-0 " + + "COMPUTATIONAL-1 COMPUTATIONAL-2 COMPUTATIONAL-3 COMPUTATIONAL-4 COMPUTATIONAL-5 " + + "COMPUTATIONAL-6 COMPUTATIONAL-7 COMPUTATIONAL-8 COMPUTATIONAL-9 COMPUTE " + + "CONFIGURATION CONNECT CONSOLE CONTAINED CONTAINS " + + "CONTENT CONTINUE CONTROL CONTROL-AREA CONTROLS " + + "CONVERTING COPY CORR CORRESPONDING COUNT " + + "CRT CRT-UNDER CURRENCY CURRENT CURSOR " + + "DATA DATE DATE-COMPILED DATE-WRITTEN DAY " + + "DAY-OF-WEEK DB DB-ACCESS-CONTROL-KEY DB-DATA-NAME DB-EXCEPTION " + + "DB-FORMAT-NAME DB-RECORD-NAME DB-SET-NAME DB-STATUS DBCS " + + "DBCS-EDITED DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE " + + "DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING " + + "DECIMAL-POINT DECLARATIVES DEFAULT DELETE DELIMITED " + + "DELIMITER DEPENDING DESCENDING DESCRIBED DESTINATION " + + "DETAIL DISABLE DISCONNECT DISPLAY DISPLAY-1 " + + "DISPLAY-2 DISPLAY-3 DISPLAY-4 DISPLAY-5 DISPLAY-6 " + + "DISPLAY-7 DISPLAY-8 DISPLAY-9 DIVIDE DIVISION " + + "DOWN DROP DUPLICATE DUPLICATES DYNAMIC " + + "EBCDIC EGI EJECT ELSE EMI " + + "EMPTY EMPTY-CHECK ENABLE END END. END-ACCEPT END-ACCEPT. " + + "END-ADD END-CALL END-COMPUTE END-DELETE END-DISPLAY " + + "END-DIVIDE END-EVALUATE END-IF END-INVOKE END-MULTIPLY " + + "END-OF-PAGE END-PERFORM END-READ END-RECEIVE END-RETURN " + + "END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT " + + "END-UNSTRING END-WRITE END-XML ENTER ENTRY " + + "ENVIRONMENT EOP EQUAL EQUALS ERASE " + + "ERROR ESI EVALUATE EVERY EXCEEDS " + + "EXCEPTION EXCLUSIVE EXIT EXTEND EXTERNAL " + + "EXTERNALLY-DESCRIBED-KEY FD FETCH FILE FILE-CONTROL " + + "FILE-STREAM FILES FILLER FINAL FIND " + + "FINISH FIRST FOOTING FOR FOREGROUND-COLOR " + + "FOREGROUND-COLOUR FORMAT FREE FROM FULL " + + "FUNCTION GENERATE GET GIVING GLOBAL " + + "GO GOBACK GREATER GROUP HEADING " + + "HIGH-VALUE HIGH-VALUES HIGHLIGHT I-O I-O-CONTROL " + + "ID IDENTIFICATION IF IN INDEX " + + "INDEX-1 INDEX-2 INDEX-3 INDEX-4 INDEX-5 " + + "INDEX-6 INDEX-7 INDEX-8 INDEX-9 INDEXED " + + "INDIC INDICATE INDICATOR INDICATORS INITIAL " + + "INITIALIZE INITIATE INPUT INPUT-OUTPUT INSPECT " + + "INSTALLATION INTO INVALID INVOKE IS " + + "JUST JUSTIFIED KANJI KEEP KEY " + + "LABEL LAST LD LEADING LEFT " + + "LEFT-JUSTIFY LENGTH LENGTH-CHECK LESS LIBRARY " + + "LIKE LIMIT LIMITS LINAGE LINAGE-COUNTER " + + "LINE LINE-COUNTER LINES LINKAGE LOCAL-STORAGE " + + "LOCALE LOCALLY LOCK " + + "MEMBER MEMORY MERGE MESSAGE METACLASS " + + "MODE MODIFIED MODIFY MODULES MOVE " + + "MULTIPLE MULTIPLY NATIONAL NATIVE NEGATIVE " + + "NEXT NO NO-ECHO NONE NOT " + + "NULL NULL-KEY-MAP NULL-MAP NULLS NUMBER " + + "NUMERIC NUMERIC-EDITED OBJECT OBJECT-COMPUTER OCCURS " + + "OF OFF OMITTED ON ONLY " + + "OPEN OPTIONAL OR ORDER ORGANIZATION " + + "OTHER OUTPUT OVERFLOW OWNER PACKED-DECIMAL " + + "PADDING PAGE PAGE-COUNTER PARSE PERFORM " + + "PF PH PIC PICTURE PLUS " + + "POINTER POSITION POSITIVE PREFIX PRESENT " + + "PRINTING PRIOR PROCEDURE PROCEDURE-POINTER PROCEDURES " + + "PROCEED PROCESS PROCESSING PROGRAM PROGRAM-ID " + + "PROMPT PROTECTED PURGE QUEUE QUOTE " + + "QUOTES RANDOM RD READ READY " + + "REALM RECEIVE RECONNECT RECORD RECORD-NAME " + + "RECORDS RECURSIVE REDEFINES REEL REFERENCE " + + "REFERENCE-MONITOR REFERENCES RELATION RELATIVE RELEASE " + + "REMAINDER REMOVAL RENAMES REPEATED REPLACE " + + "REPLACING REPORT REPORTING REPORTS REPOSITORY " + + "REQUIRED RERUN RESERVE RESET RETAINING " + + "RETRIEVAL RETURN RETURN-CODE RETURNING REVERSE-VIDEO " + + "REVERSED REWIND REWRITE RF RH " + + "RIGHT RIGHT-JUSTIFY ROLLBACK ROLLING ROUNDED " + + "RUN SAME SCREEN SD SEARCH " + + "SECTION SECURE SECURITY SEGMENT SEGMENT-LIMIT " + + "SELECT SEND SENTENCE SEPARATE SEQUENCE " + + "SEQUENTIAL SET SHARED SIGN SIZE " + + "SKIP1 SKIP2 SKIP3 SORT SORT-MERGE " + + "SORT-RETURN SOURCE SOURCE-COMPUTER SPACE-FILL " + + "SPECIAL-NAMES STANDARD STANDARD-1 STANDARD-2 " + + "START STARTING STATUS STOP STORE " + + "STRING SUB-QUEUE-1 SUB-QUEUE-2 SUB-QUEUE-3 SUB-SCHEMA " + + "SUBFILE SUBSTITUTE SUBTRACT SUM SUPPRESS " + + "SYMBOLIC SYNC SYNCHRONIZED SYSIN SYSOUT " + + "TABLE TALLYING TAPE TENANT TERMINAL " + + "TERMINATE TEST TEXT THAN THEN " + + "THROUGH THRU TIME TIMES TITLE " + + "TO TOP TRAILING TRAILING-SIGN TRANSACTION " + + "TYPE TYPEDEF UNDERLINE UNEQUAL UNIT " + + "UNSTRING UNTIL UP UPDATE UPON " + + "USAGE USAGE-MODE USE USING VALID " + + "VALIDATE VALUE VALUES VARYING VLR " + + "WAIT WHEN WHEN-COMPILED WITH WITHIN " + + "WORDS WORKING-STORAGE WRITE XML XML-CODE " + + "XML-EVENT XML-NTEXT XML-TEXT ZERO ZERO-FILL " ); + + var builtins = makeKeywords("- * ** / + < <= = > >= "); + var tests = { + digit: /\d/, + digit_or_colon: /[\d:]/, + hex: /[0-9a-f]/i, + sign: /[+-]/, + exponent: /e/i, + keyword_char: /[^\s\(\[\;\)\]]/, + symbol: /[\w*+\-]/ + }; + function isNumber(ch, stream){ + // hex + if ( ch === '0' && stream.eat(/x/i) ) { + stream.eatWhile(tests.hex); + return true; + } + // leading sign + if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) { + stream.eat(tests.sign); + ch = stream.next(); + } + if ( tests.digit.test(ch) ) { + stream.eat(ch); + stream.eatWhile(tests.digit); + if ( '.' == stream.peek()) { + stream.eat('.'); + stream.eatWhile(tests.digit); + } + if ( stream.eat(tests.exponent) ) { + stream.eat(tests.sign); + stream.eatWhile(tests.digit); + } + return true; + } + return false; + } + return { + startState: function () { + return { + indentStack: null, + indentation: 0, + mode: false + }; + }, + token: function (stream, state) { + if (state.indentStack == null && stream.sol()) { + // update indentation, but only if indentStack is empty + state.indentation = 6 ; //stream.indentation(); + } + // skip spaces + if (stream.eatSpace()) { + return null; + } + var returnType = null; + switch(state.mode){ + case "string": // multi-line string parsing mode + var next = false; + while ((next = stream.next()) != null) { + if (next == "\"" || next == "\'") { + state.mode = false; + break; + } + } + returnType = STRING; // continue on in string mode + break; + default: // default parsing mode + var ch = stream.next(); + var col = stream.column(); + if (col >= 0 && col <= 5) { + returnType = COBOLLINENUM; + } else if (col >= 72 && col <= 79) { + stream.skipToEnd(); + returnType = MODTAG; + } else if (ch == "*" && col == 6) { // comment + stream.skipToEnd(); // rest of the line is a comment + returnType = COMMENT; + } else if (ch == "\"" || ch == "\'") { + state.mode = "string"; + returnType = STRING; + } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) { + returnType = ATOM; + } else if (ch == ".") { + returnType = PERIOD; + } else if (isNumber(ch,stream)){ + returnType = NUMBER; + } else { + if (stream.current().match(tests.symbol)) { + while (col < 71) { + if (stream.eat(tests.symbol) === undefined) { + break; + } else { + col++; + } + } + } + if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { + returnType = KEYWORD; + } else if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) { + returnType = BUILTIN; + } else if (atoms && atoms.propertyIsEnumerable(stream.current().toUpperCase())) { + returnType = ATOM; + } else returnType = null; + } + } + return returnType; + }, + indent: function (state) { + if (state.indentStack == null) return state.indentation; + return state.indentStack.indent; + } + }; +}); + +CodeMirror.defineMIME("text/x-cobol", "cobol"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/cobol/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/cobol/index.html new file mode 100644 index 0000000..71cc2fa --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/cobol/index.html @@ -0,0 +1,195 @@ + + + + + CodeMirror: COBOL mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

              Select Theme Select Font Size + + + + +

              + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/coffeescript/LICENSE b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/coffeescript/LICENSE new file mode 100644 index 0000000..977e284 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/coffeescript/LICENSE @@ -0,0 +1,22 @@ +The MIT License + +Copyright (c) 2011 Jeff Pickhardt +Modified from the Python CodeMirror mode, Copyright (c) 2010 Timothy Farrell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/coffeescript/coffeescript.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/coffeescript/coffeescript.js new file mode 100644 index 0000000..4f54b0c --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/coffeescript/coffeescript.js @@ -0,0 +1,348 @@ +/** + * Link to the project's GitHub page: + * https://github.com/pickhardt/coffeescript-codemirror-mode + */ +CodeMirror.defineMode('coffeescript', function(conf) { + var ERRORCLASS = 'error'; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var singleOperators = new RegExp("^[\\+\\-\\*/%&|\\^~<>!\?]"); + var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\},:`=;\\.]'); + var doubleOperators = new RegExp("^((\->)|(\=>)|(\\+\\+)|(\\+\\=)|(\\-\\-)|(\\-\\=)|(\\*\\*)|(\\*\\=)|(\\/\\/)|(\\/\\=)|(==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//))"); + var doubleDelimiters = new RegExp("^((\\.\\.)|(\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); + var tripleDelimiters = new RegExp("^((\\.\\.\\.)|(//=)|(>>=)|(<<=)|(\\*\\*=))"); + var identifiers = new RegExp("^[_A-Za-z$][_A-Za-z$0-9]*"); + var properties = new RegExp("^(@|this\.)[_A-Za-z$][_A-Za-z$0-9]*"); + + var wordOperators = wordRegexp(['and', 'or', 'not', + 'is', 'isnt', 'in', + 'instanceof', 'typeof']); + var indentKeywords = ['for', 'while', 'loop', 'if', 'unless', 'else', + 'switch', 'try', 'catch', 'finally', 'class']; + var commonKeywords = ['break', 'by', 'continue', 'debugger', 'delete', + 'do', 'in', 'of', 'new', 'return', 'then', + 'this', 'throw', 'when', 'until']; + + var keywords = wordRegexp(indentKeywords.concat(commonKeywords)); + + indentKeywords = wordRegexp(indentKeywords); + + + var stringPrefixes = new RegExp("^('{3}|\"{3}|['\"])"); + var regexPrefixes = new RegExp("^(/{3}|/)"); + var commonConstants = ['Infinity', 'NaN', 'undefined', 'null', 'true', 'false', 'on', 'off', 'yes', 'no']; + var constants = wordRegexp(commonConstants); + + // Tokenizers + function tokenBase(stream, state) { + // Handle scope changes + if (stream.sol()) { + var scopeOffset = state.scopes[0].offset; + if (stream.eatSpace()) { + var lineOffset = stream.indentation(); + if (lineOffset > scopeOffset) { + return 'indent'; + } else if (lineOffset < scopeOffset) { + return 'dedent'; + } + return null; + } else { + if (scopeOffset > 0) { + dedent(stream, state); + } + } + } + if (stream.eatSpace()) { + return null; + } + + var ch = stream.peek(); + + // Handle docco title comment (single line) + if (stream.match("####")) { + stream.skipToEnd(); + return 'comment'; + } + + // Handle multi line comments + if (stream.match("###")) { + state.tokenize = longComment; + return state.tokenize(stream, state); + } + + // Single line comment + if (ch === '#') { + stream.skipToEnd(); + return 'comment'; + } + + // Handle number literals + if (stream.match(/^-?[0-9\.]/, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) { + floatLiteral = true; + } + if (stream.match(/^-?\d+\.\d*/)) { + floatLiteral = true; + } + if (stream.match(/^-?\.\d+/)) { + floatLiteral = true; + } + + if (floatLiteral) { + // prevent from getting extra . on 1.. + if (stream.peek() == "."){ + stream.backUp(1); + } + return 'number'; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^-?0x[0-9a-f]+/i)) { + intLiteral = true; + } + // Decimal + if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) { + intLiteral = true; + } + // Zero by itself with no other piece of number. + if (stream.match(/^-?0(?![\dx])/i)) { + intLiteral = true; + } + if (intLiteral) { + return 'number'; + } + } + + // Handle strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenFactory(stream.current(), 'string'); + return state.tokenize(stream, state); + } + // Handle regex literals + if (stream.match(regexPrefixes)) { + if (stream.current() != '/' || stream.match(/^.*\//, false)) { // prevent highlight of division + state.tokenize = tokenFactory(stream.current(), 'string-2'); + return state.tokenize(stream, state); + } else { + stream.backUp(1); + } + } + + // Handle operators and delimiters + if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) { + return 'punctuation'; + } + if (stream.match(doubleOperators) + || stream.match(singleOperators) + || stream.match(wordOperators)) { + return 'operator'; + } + if (stream.match(singleDelimiters)) { + return 'punctuation'; + } + + if (stream.match(constants)) { + return 'atom'; + } + + if (stream.match(keywords)) { + return 'keyword'; + } + + if (stream.match(identifiers)) { + return 'variable'; + } + + if (stream.match(properties)) { + return 'property'; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenFactory(delimiter, outclass) { + var singleline = delimiter.length == 1; + return function(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"\/\\]/); + if (stream.eat('\\')) { + stream.next(); + if (singleline && stream.eol()) { + return outclass; + } + } else if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return outclass; + } else { + stream.eat(/['"\/]/); + } + } + if (singleline) { + if (conf.mode.singleLineStringErrors) { + outclass = ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return outclass; + }; + } + + function longComment(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^#]/); + if (stream.match("###")) { + state.tokenize = tokenBase; + break; + } + stream.eatWhile("#"); + } + return "comment"; + } + + function indent(stream, state, type) { + type = type || 'coffee'; + var indentUnit = 0; + if (type === 'coffee') { + for (var i = 0; i < state.scopes.length; i++) { + if (state.scopes[i].type === 'coffee') { + indentUnit = state.scopes[i].offset + conf.indentUnit; + break; + } + } + } else { + indentUnit = stream.column() + stream.current().length; + } + state.scopes.unshift({ + offset: indentUnit, + type: type + }); + } + + function dedent(stream, state) { + if (state.scopes.length == 1) return; + if (state.scopes[0].type === 'coffee') { + var _indent = stream.indentation(); + var _indent_index = -1; + for (var i = 0; i < state.scopes.length; ++i) { + if (_indent === state.scopes[i].offset) { + _indent_index = i; + break; + } + } + if (_indent_index === -1) { + return true; + } + while (state.scopes[0].offset !== _indent) { + state.scopes.shift(); + } + return false; + } else { + state.scopes.shift(); + return false; + } + } + + function tokenLexer(stream, state) { + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle '.' connected identifiers + if (current === '.') { + style = state.tokenize(stream, state); + current = stream.current(); + if (style === 'variable') { + return 'variable'; + } else { + return ERRORCLASS; + } + } + + // Handle scope changes. + if (current === 'return') { + state.dedent += 1; + } + if (((current === '->' || current === '=>') && + !state.lambda && + state.scopes[0].type == 'coffee' && + stream.peek() === '') + || style === 'indent') { + indent(stream, state); + } + var delimiter_index = '[({'.indexOf(current); + if (delimiter_index !== -1) { + indent(stream, state, '])}'.slice(delimiter_index, delimiter_index+1)); + } + if (indentKeywords.exec(current)){ + indent(stream, state); + } + if (current == 'then'){ + dedent(stream, state); + } + + + if (style === 'dedent') { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + delimiter_index = '])}'.indexOf(current); + if (delimiter_index !== -1) { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + if (state.dedent > 0 && stream.eol() && state.scopes[0].type == 'coffee') { + if (state.scopes.length > 1) state.scopes.shift(); + state.dedent -= 1; + } + + return style; + } + + var external = { + startState: function(basecolumn) { + return { + tokenize: tokenBase, + scopes: [{offset:basecolumn || 0, type:'coffee'}], + lastToken: null, + lambda: false, + dedent: 0 + }; + }, + + token: function(stream, state) { + var style = tokenLexer(stream, state); + + state.lastToken = {style:style, content: stream.current()}; + + if (stream.eol() && stream.lambda) { + state.lambda = false; + } + + return style; + }, + + indent: function(state) { + if (state.tokenize != tokenBase) { + return 0; + } + + return state.scopes[0].offset; + }, + + lineComment: "#", + fold: "indent" + }; + return external; +}); + +CodeMirror.defineMIME('text/x-coffeescript', 'coffeescript'); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/coffeescript/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/coffeescript/index.html new file mode 100644 index 0000000..ee72b8d --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/coffeescript/index.html @@ -0,0 +1,728 @@ + + + + + CodeMirror: CoffeeScript mode + + + + + + + +

              CodeMirror: CoffeeScript mode

              +
              + + +

              MIME types defined: text/x-coffeescript.

              + +

              The CoffeeScript mode was written by Jeff Pickhardt (license).

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/commonlisp/commonlisp.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/commonlisp/commonlisp.js new file mode 100644 index 0000000..8fa08c8 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/commonlisp/commonlisp.js @@ -0,0 +1,105 @@ +CodeMirror.defineMode("commonlisp", function (config) { + var assumeBody = /^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/; + var numLiteral = /^(?:[+\-]?(?:\d+|\d*\.\d+)(?:[efd][+\-]?\d+)?|[+\-]?\d+(?:\/[+\-]?\d+)?|#b[+\-]?[01]+|#o[+\-]?[0-7]+|#x[+\-]?[\da-f]+)/; + var symbol = /[^\s'`,@()\[\]";]/; + var type; + + function readSym(stream) { + var ch; + while (ch = stream.next()) { + if (ch == "\\") stream.next(); + else if (!symbol.test(ch)) { stream.backUp(1); break; } + } + return stream.current(); + } + + function base(stream, state) { + if (stream.eatSpace()) {type = "ws"; return null;} + if (stream.match(numLiteral)) return "number"; + var ch = stream.next(); + if (ch == "\\") ch = stream.next(); + + if (ch == '"') return (state.tokenize = inString)(stream, state); + else if (ch == "(") { type = "open"; return "bracket"; } + else if (ch == ")" || ch == "]") { type = "close"; return "bracket"; } + else if (ch == ";") { stream.skipToEnd(); type = "ws"; return "comment"; } + else if (/['`,@]/.test(ch)) return null; + else if (ch == "|") { + if (stream.skipTo("|")) { stream.next(); return "symbol"; } + else { stream.skipToEnd(); return "error"; } + } else if (ch == "#") { + var ch = stream.next(); + if (ch == "[") { type = "open"; return "bracket"; } + else if (/[+\-=\.']/.test(ch)) return null; + else if (/\d/.test(ch) && stream.match(/^\d*#/)) return null; + else if (ch == "|") return (state.tokenize = inComment)(stream, state); + else if (ch == ":") { readSym(stream); return "meta"; } + else return "error"; + } else { + var name = readSym(stream); + if (name == ".") return null; + type = "symbol"; + if (name == "nil" || name == "t") return "atom"; + if (name.charAt(0) == ":") return "keyword"; + if (name.charAt(0) == "&") return "variable-2"; + return "variable"; + } + } + + function inString(stream, state) { + var escaped = false, next; + while (next = stream.next()) { + if (next == '"' && !escaped) { state.tokenize = base; break; } + escaped = !escaped && next == "\\"; + } + return "string"; + } + + function inComment(stream, state) { + var next, last; + while (next = stream.next()) { + if (next == "#" && last == "|") { state.tokenize = base; break; } + last = next; + } + type = "ws"; + return "comment"; + } + + return { + startState: function () { + return {ctx: {prev: null, start: 0, indentTo: 0}, tokenize: base}; + }, + + token: function (stream, state) { + if (stream.sol() && typeof state.ctx.indentTo != "number") + state.ctx.indentTo = state.ctx.start + 1; + + type = null; + var style = state.tokenize(stream, state); + if (type != "ws") { + if (state.ctx.indentTo == null) { + if (type == "symbol" && assumeBody.test(stream.current())) + state.ctx.indentTo = state.ctx.start + config.indentUnit; + else + state.ctx.indentTo = "next"; + } else if (state.ctx.indentTo == "next") { + state.ctx.indentTo = stream.column(); + } + } + if (type == "open") state.ctx = {prev: state.ctx, start: stream.column(), indentTo: null}; + else if (type == "close") state.ctx = state.ctx.prev || state.ctx; + return style; + }, + + indent: function (state, _textAfter) { + var i = state.ctx.indentTo; + return typeof i == "number" ? i : state.ctx.start + 1; + }, + + lineComment: ";;", + blockCommentStart: "#|", + blockCommentEnd: "|#" + }; +}); + +CodeMirror.defineMIME("text/x-common-lisp", "commonlisp"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/commonlisp/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/commonlisp/index.html new file mode 100644 index 0000000..f9766a8 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/commonlisp/index.html @@ -0,0 +1,165 @@ + + + + + CodeMirror: Common Lisp mode + + + + + + + +

              CodeMirror: Common Lisp mode

              +
              + + +

              MIME types defined: text/x-common-lisp.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/css.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/css.js new file mode 100644 index 0000000..bdcd500 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/css.js @@ -0,0 +1,623 @@ +CodeMirror.defineMode("css", function(config) { + return CodeMirror.getMode(config, "text/css"); +}); + +CodeMirror.defineMode("css-base", function(config, parserConfig) { + "use strict"; + + var indentUnit = config.indentUnit, + hooks = parserConfig.hooks || {}, + atMediaTypes = parserConfig.atMediaTypes || {}, + atMediaFeatures = parserConfig.atMediaFeatures || {}, + propertyKeywords = parserConfig.propertyKeywords || {}, + colorKeywords = parserConfig.colorKeywords || {}, + valueKeywords = parserConfig.valueKeywords || {}, + allowNested = !!parserConfig.allowNested, + type = null; + + function ret(style, tp) { type = tp; return style; } + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + // result[0] is style and result[1] is type + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("def", stream.current());} + else if (ch == "=") ret(null, "compare"); + else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + else if (ch == "#") { + stream.eatWhile(/[\w\\\-]/); + return ret("atom", "hash"); + } + else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } + else if (ch === "-") { + if (/\d/.test(stream.peek())) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (stream.match(/^[^-]+-/)) { + return ret("meta", "meta"); + } + } + else if (/[,+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } + else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { + return ret("qualifier", "qualifier"); + } + else if (ch == ":") { + return ret("operator", ch); + } + else if (/[;{}\[\]\(\)]/.test(ch)) { + return ret(null, ch); + } + else if (ch == "u" && stream.match("rl(")) { + stream.backUp(1); + state.tokenize = tokenParenthesized; + return ret("property", "variable"); + } + else { + stream.eatWhile(/[\w\\\-]/); + return ret("property", "variable"); + } + } + + function tokenString(quote, nonInclusive) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) + break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) { + if (nonInclusive) stream.backUp(1); + state.tokenize = tokenBase; + } + return ret("string", "string"); + }; + } + + function tokenParenthesized(stream, state) { + stream.next(); // Must be '(' + if (!stream.match(/\s*[\"\']/, false)) + state.tokenize = tokenString(")", true); + else + state.tokenize = tokenBase; + return ret(null, "("); + } + + return { + startState: function(base) { + return {tokenize: tokenBase, + baseIndent: base || 0, + stack: [], + lastToken: null}; + }, + + token: function(stream, state) { + + // Use these terms when applicable (see http://www.xanthir.com/blog/b4E50) + // + // rule** or **ruleset: + // A selector + braces combo, or an at-rule. + // + // declaration block: + // A sequence of declarations. + // + // declaration: + // A property + colon + value combo. + // + // property value: + // The entire value of a property. + // + // component value: + // A single piece of a property value. Like the 5px in + // text-shadow: 0 0 5px blue;. Can also refer to things that are + // multiple terms, like the 1-4 terms that make up the background-size + // portion of the background shorthand. + // + // term: + // The basic unit of author-facing CSS, like a single number (5), + // dimension (5px), string ("foo"), or function. Officially defined + // by the CSS 2.1 grammar (look for the 'term' production) + // + // + // simple selector: + // A single atomic selector, like a type selector, an attr selector, a + // class selector, etc. + // + // compound selector: + // One or more simple selectors without a combinator. div.example is + // compound, div > .example is not. + // + // complex selector: + // One or more compound selectors chained with combinators. + // + // combinator: + // The parts of selectors that express relationships. There are four + // currently - the space (descendant combinator), the greater-than + // bracket (child combinator), the plus sign (next sibling combinator), + // and the tilda (following sibling combinator). + // + // sequence of selectors: + // One or more of the named type of selector chained with commas. + + state.tokenize = state.tokenize || tokenBase; + if (state.tokenize == tokenBase && stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (style && typeof style != "string") style = ret(style[0], style[1]); + + // Changing style returned based on context + var context = state.stack[state.stack.length-1]; + if (style == "variable") { + if (type == "variable-definition") state.stack.push("propertyValue"); + return state.lastToken = "variable-2"; + } else if (style == "property") { + var word = stream.current().toLowerCase(); + if (context == "propertyValue") { + if (valueKeywords.hasOwnProperty(word)) { + style = "string-2"; + } else if (colorKeywords.hasOwnProperty(word)) { + style = "keyword"; + } else { + style = "variable-2"; + } + } else if (context == "rule") { + if (!propertyKeywords.hasOwnProperty(word)) { + style += " error"; + } + } else if (context == "block") { + // if a value is present in both property, value, or color, the order + // of preference is property -> color -> value + if (propertyKeywords.hasOwnProperty(word)) { + style = "property"; + } else if (colorKeywords.hasOwnProperty(word)) { + style = "keyword"; + } else if (valueKeywords.hasOwnProperty(word)) { + style = "string-2"; + } else { + style = "tag"; + } + } else if (!context || context == "@media{") { + style = "tag"; + } else if (context == "@media") { + if (atMediaTypes[stream.current()]) { + style = "attribute"; // Known attribute + } else if (/^(only|not)$/.test(word)) { + style = "keyword"; + } else if (word == "and") { + style = "error"; // "and" is only allowed in @mediaType + } else if (atMediaFeatures.hasOwnProperty(word)) { + style = "error"; // Known property, should be in @mediaType( + } else { + // Unknown, expecting keyword or attribute, assuming attribute + style = "attribute error"; + } + } else if (context == "@mediaType") { + if (atMediaTypes.hasOwnProperty(word)) { + style = "attribute"; + } else if (word == "and") { + style = "operator"; + } else if (/^(only|not)$/.test(word)) { + style = "error"; // Only allowed in @media + } else { + // Unknown attribute or property, but expecting property (preceded + // by "and"). Should be in parentheses + style = "error"; + } + } else if (context == "@mediaType(") { + if (propertyKeywords.hasOwnProperty(word)) { + // do nothing, remains "property" + } else if (atMediaTypes.hasOwnProperty(word)) { + style = "error"; // Known property, should be in parentheses + } else if (word == "and") { + style = "operator"; + } else if (/^(only|not)$/.test(word)) { + style = "error"; // Only allowed in @media + } else { + style += " error"; + } + } else if (context == "@import") { + style = "tag"; + } else { + style = "error"; + } + } else if (style == "atom") { + if(!context || context == "@media{" || context == "block") { + style = "builtin"; + } else if (context == "propertyValue") { + if (!/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(stream.current())) { + style += " error"; + } + } else { + style = "error"; + } + } else if (context == "@media" && type == "{") { + style = "error"; + } + + // Push/pop context stack + if (type == "{") { + if (context == "@media" || context == "@mediaType") { + state.stack[state.stack.length-1] = "@media{"; + } + else { + var newContext = allowNested ? "block" : "rule"; + state.stack.push(newContext); + } + } + else if (type == "}") { + if (context == "interpolation") style = "operator"; + state.stack.pop(); + if (context == "propertyValue") state.stack.pop(); + } + else if (type == "interpolation") state.stack.push("interpolation"); + else if (type == "@media") state.stack.push("@media"); + else if (type == "@import") state.stack.push("@import"); + else if (context == "@media" && /\b(keyword|attribute)\b/.test(style)) + state.stack[state.stack.length-1] = "@mediaType"; + else if (context == "@mediaType" && stream.current() == ",") + state.stack[state.stack.length-1] = "@media"; + else if (type == "(") { + if (context == "@media" || context == "@mediaType") { + // Make sure @mediaType is used to avoid error on { + state.stack[state.stack.length-1] = "@mediaType"; + state.stack.push("@mediaType("); + } + } + else if (type == ")") { + if (context == "propertyValue" && state.stack[state.stack.length-2] == "@mediaType(") { + // In @mediaType( without closing ; after propertyValue + state.stack.pop(); + state.stack.pop(); + } + else if (context == "@mediaType(") { + state.stack.pop(); + } + } + else if (type == ":" && state.lastToken == "property") state.stack.push("propertyValue"); + else if (context == "propertyValue" && type == ";") state.stack.pop(); + else if (context == "@import" && type == ";") state.stack.pop(); + + return state.lastToken = style; + }, + + indent: function(state, textAfter) { + var n = state.stack.length; + if (/^\}/.test(textAfter)) + n -= state.stack[n-1] == "propertyValue" ? 2 : 1; + return state.baseIndent + n * indentUnit; + }, + + electricChars: "}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + fold: "brace" + }; +}); + +(function() { + function keySet(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) { + keys[array[i]] = true; + } + return keys; + } + + var atMediaTypes = keySet([ + "all", "aural", "braille", "handheld", "print", "projection", "screen", + "tty", "tv", "embossed" + ]); + + var atMediaFeatures = keySet([ + "width", "min-width", "max-width", "height", "min-height", "max-height", + "device-width", "min-device-width", "max-device-width", "device-height", + "min-device-height", "max-device-height", "aspect-ratio", + "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", + "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", + "max-color", "color-index", "min-color-index", "max-color-index", + "monochrome", "min-monochrome", "max-monochrome", "resolution", + "min-resolution", "max-resolution", "scan", "grid" + ]); + + var propertyKeywords = keySet([ + "align-content", "align-items", "align-self", "alignment-adjust", + "alignment-baseline", "anchor-point", "animation", "animation-delay", + "animation-direction", "animation-duration", "animation-iteration-count", + "animation-name", "animation-play-state", "animation-timing-function", + "appearance", "azimuth", "backface-visibility", "background", + "background-attachment", "background-clip", "background-color", + "background-image", "background-origin", "background-position", + "background-repeat", "background-size", "baseline-shift", "binding", + "bleed", "bookmark-label", "bookmark-level", "bookmark-state", + "bookmark-target", "border", "border-bottom", "border-bottom-color", + "border-bottom-left-radius", "border-bottom-right-radius", + "border-bottom-style", "border-bottom-width", "border-collapse", + "border-color", "border-image", "border-image-outset", + "border-image-repeat", "border-image-slice", "border-image-source", + "border-image-width", "border-left", "border-left-color", + "border-left-style", "border-left-width", "border-radius", "border-right", + "border-right-color", "border-right-style", "border-right-width", + "border-spacing", "border-style", "border-top", "border-top-color", + "border-top-left-radius", "border-top-right-radius", "border-top-style", + "border-top-width", "border-width", "bottom", "box-decoration-break", + "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", + "caption-side", "clear", "clip", "color", "color-profile", "column-count", + "column-fill", "column-gap", "column-rule", "column-rule-color", + "column-rule-style", "column-rule-width", "column-span", "column-width", + "columns", "content", "counter-increment", "counter-reset", "crop", "cue", + "cue-after", "cue-before", "cursor", "direction", "display", + "dominant-baseline", "drop-initial-after-adjust", + "drop-initial-after-align", "drop-initial-before-adjust", + "drop-initial-before-align", "drop-initial-size", "drop-initial-value", + "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", + "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", + "float", "float-offset", "font", "font-feature-settings", "font-family", + "font-kerning", "font-language-override", "font-size", "font-size-adjust", + "font-stretch", "font-style", "font-synthesis", "font-variant", + "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", + "font-variant-ligatures", "font-variant-numeric", "font-variant-position", + "font-weight", "grid-cell", "grid-column", "grid-column-align", + "grid-column-sizing", "grid-column-span", "grid-columns", "grid-flow", + "grid-row", "grid-row-align", "grid-row-sizing", "grid-row-span", + "grid-rows", "grid-template", "hanging-punctuation", "height", "hyphens", + "icon", "image-orientation", "image-rendering", "image-resolution", + "inline-box-align", "justify-content", "left", "letter-spacing", + "line-break", "line-height", "line-stacking", "line-stacking-ruby", + "line-stacking-shift", "line-stacking-strategy", "list-style", + "list-style-image", "list-style-position", "list-style-type", "margin", + "margin-bottom", "margin-left", "margin-right", "margin-top", + "marker-offset", "marks", "marquee-direction", "marquee-loop", + "marquee-play-count", "marquee-speed", "marquee-style", "max-height", + "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", + "nav-left", "nav-right", "nav-up", "opacity", "order", "orphans", "outline", + "outline-color", "outline-offset", "outline-style", "outline-width", + "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", + "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", + "page", "page-break-after", "page-break-before", "page-break-inside", + "page-policy", "pause", "pause-after", "pause-before", "perspective", + "perspective-origin", "pitch", "pitch-range", "play-during", "position", + "presentation-level", "punctuation-trim", "quotes", "rendering-intent", + "resize", "rest", "rest-after", "rest-before", "richness", "right", + "rotation", "rotation-point", "ruby-align", "ruby-overhang", + "ruby-position", "ruby-span", "size", "speak", "speak-as", "speak-header", + "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", + "tab-size", "table-layout", "target", "target-name", "target-new", + "target-position", "text-align", "text-align-last", "text-decoration", + "text-decoration-color", "text-decoration-line", "text-decoration-skip", + "text-decoration-style", "text-emphasis", "text-emphasis-color", + "text-emphasis-position", "text-emphasis-style", "text-height", + "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", + "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", + "text-wrap", "top", "transform", "transform-origin", "transform-style", + "transition", "transition-delay", "transition-duration", + "transition-property", "transition-timing-function", "unicode-bidi", + "vertical-align", "visibility", "voice-balance", "voice-duration", + "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", + "voice-volume", "volume", "white-space", "widows", "width", "word-break", + "word-spacing", "word-wrap", "z-index", "zoom", + // SVG-specific + "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", + "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", + "color-interpolation", "color-interpolation-filters", "color-profile", + "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", + "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", + "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", + "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", + "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", + "glyph-orientation-vertical", "kerning", "text-anchor", "writing-mode" + ]); + + var colorKeywords = keySet([ + "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", + "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", + "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", + "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", + "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", + "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", + "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", + "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", + "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", + "gold", "goldenrod", "gray", "green", "greenyellow", "honeydew", + "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", + "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", + "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", + "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", + "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", + "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", + "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", + "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", + "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", + "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", + "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", + "purple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", + "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", + "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", + "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", + "whitesmoke", "yellow", "yellowgreen" + ]); + + var valueKeywords = keySet([ + "above", "absolute", "activeborder", "activecaption", "afar", + "after-white-space", "ahead", "alias", "all", "all-scroll", "alternate", + "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", + "arabic-indic", "armenian", "asterisks", "auto", "avoid", "background", + "backwards", "baseline", "below", "bidi-override", "binary", "bengali", + "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", + "both", "bottom", "break-all", "break-word", "button", "button-bevel", + "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "cambodian", + "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", + "cell", "center", "checkbox", "circle", "cjk-earthly-branch", + "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", + "col-resize", "collapse", "compact", "condensed", "contain", "content", + "content-box", "context-menu", "continuous", "copy", "cover", "crop", + "cross", "crosshair", "currentcolor", "cursive", "dashed", "decimal", + "decimal-leading-zero", "default", "default-button", "destination-atop", + "destination-in", "destination-out", "destination-over", "devanagari", + "disc", "discard", "document", "dot-dash", "dot-dot-dash", "dotted", + "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", + "element", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", + "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", + "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", + "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", + "ethiopic-halehame-gez", "ethiopic-halehame-om-et", + "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", + "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", + "ethiopic-halehame-tig", "ew-resize", "expanded", "extra-condensed", + "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "footnotes", + "forwards", "from", "geometricPrecision", "georgian", "graytext", "groove", + "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hebrew", + "help", "hidden", "hide", "higher", "highlight", "highlighttext", + "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "icon", "ignore", + "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", + "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", + "inline-block", "inline-table", "inset", "inside", "intrinsic", "invert", + "italic", "justify", "kannada", "katakana", "katakana-iroha", "khmer", + "landscape", "lao", "large", "larger", "left", "level", "lighter", + "line-through", "linear", "lines", "list-item", "listbox", "listitem", + "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", + "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", + "lower-roman", "lowercase", "ltr", "malayalam", "match", + "media-controls-background", "media-current-time-display", + "media-fullscreen-button", "media-mute-button", "media-play-button", + "media-return-to-realtime-button", "media-rewind-button", + "media-seek-back-button", "media-seek-forward-button", "media-slider", + "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", + "media-volume-slider-container", "media-volume-sliderthumb", "medium", + "menu", "menulist", "menulist-button", "menulist-text", + "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", + "mix", "mongolian", "monospace", "move", "multiple", "myanmar", "n-resize", + "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", + "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", + "ns-resize", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote", + "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", + "outside", "overlay", "overline", "padding", "padding-box", "painted", + "paused", "persian", "plus-darker", "plus-lighter", "pointer", "portrait", + "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", + "radio", "read-only", "read-write", "read-write-plaintext-only", "relative", + "repeat", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", + "ridge", "right", "round", "row-resize", "rtl", "run-in", "running", + "s-resize", "sans-serif", "scroll", "scrollbar", "se-resize", "searchfield", + "searchfield-cancel-button", "searchfield-decoration", + "searchfield-results-button", "searchfield-results-decoration", + "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", + "single", "skip-white-space", "slide", "slider-horizontal", + "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", + "small", "small-caps", "small-caption", "smaller", "solid", "somali", + "source-atop", "source-in", "source-out", "source-over", "space", "square", + "square-button", "start", "static", "status-bar", "stretch", "stroke", + "sub", "subpixel-antialiased", "super", "sw-resize", "table", + "table-caption", "table-cell", "table-column", "table-column-group", + "table-footer-group", "table-header-group", "table-row", "table-row-group", + "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", + "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", + "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", + "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", + "transparent", "ultra-condensed", "ultra-expanded", "underline", "up", + "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", + "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", + "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", + "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", + "window", "windowframe", "windowtext", "x-large", "x-small", "xor", + "xx-large", "xx-small" + ]); + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return ["comment", "comment"]; + } + + CodeMirror.defineMIME("text/css", { + atMediaTypes: atMediaTypes, + atMediaFeatures: atMediaFeatures, + propertyKeywords: propertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + hooks: { + "<": function(stream, state) { + function tokenSGMLComment(stream, state) { + var dashes = 0, ch; + while ((ch = stream.next()) != null) { + if (dashes >= 2 && ch == ">") { + state.tokenize = null; + break; + } + dashes = (ch == "-") ? dashes + 1 : 0; + } + return ["comment", "comment"]; + } + if (stream.eat("!")) { + state.tokenize = tokenSGMLComment; + return tokenSGMLComment(stream, state); + } + }, + "/": function(stream, state) { + if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + return false; + } + }, + name: "css-base" + }); + + CodeMirror.defineMIME("text/x-scss", { + atMediaTypes: atMediaTypes, + atMediaFeatures: atMediaFeatures, + propertyKeywords: propertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + allowNested: true, + hooks: { + "$": function(stream) { + stream.match(/^[\w-]+/); + if (stream.peek() == ":") { + return ["variable", "variable-definition"]; + } + return ["variable", "variable"]; + }, + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + "#": function(stream) { + if (stream.eat("{")) { + return ["operator", "interpolation"]; + } else { + stream.eatWhile(/[\w\\\-]/); + return ["atom", "hash"]; + } + } + }, + name: "css-base" + }); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/index.html new file mode 100644 index 0000000..ae2c3bf --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/index.html @@ -0,0 +1,58 @@ + + + + + CodeMirror: CSS mode + + + + + + + +

              CodeMirror: CSS mode

              +
              + + +

              MIME types defined: text/css.

              + +

              Parsing/Highlighting Tests: normal, verbose.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/scss.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/scss.html new file mode 100644 index 0000000..b90cbe8 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/scss.html @@ -0,0 +1,145 @@ + + + + + CodeMirror: SCSS mode + + + + + + + +

              CodeMirror: SCSS mode

              +
              + + +

              MIME types defined: text/scss.

              + +

              Parsing/Highlighting Tests: normal, verbose.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/scss_test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/scss_test.js new file mode 100644 index 0000000..3644f63 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/scss_test.js @@ -0,0 +1,80 @@ +(function() { + var mode = CodeMirror.getMode({tabSize: 4}, "text/x-scss"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "scss"); } + + MT('url_with_quotation', + "[tag foo] { [property background][operator :][string-2 url]([string test.jpg]) }"); + + MT('url_with_double_quotes', + "[tag foo] { [property background][operator :][string-2 url]([string \"test.jpg\"]) }"); + + MT('url_with_single_quotes', + "[tag foo] { [property background][operator :][string-2 url]([string \'test.jpg\']) }"); + + MT('string', + "[def @import] [string \"compass/css3\"]"); + + MT('important_keyword', + "[tag foo] { [property background][operator :][string-2 url]([string \'test.jpg\']) [keyword !important] }"); + + MT('variable', + "[variable-2 $blue][operator :][atom #333]"); + + MT('variable_as_attribute', + "[tag foo] { [property color][operator :][variable-2 $blue] }"); + + MT('numbers', + "[tag foo] { [property padding][operator :][number 10px] [number 10] [number 10em] [number 8in] }"); + + MT('number_percentage', + "[tag foo] { [property width][operator :][number 80%] }"); + + MT('selector', + "[builtin #hello][qualifier .world]{}"); + + MT('singleline_comment', + "[comment // this is a comment]"); + + MT('multiline_comment', + "[comment /*foobar*/]"); + + MT('attribute_with_hyphen', + "[tag foo] { [property font-size][operator :][number 10px] }"); + + MT('string_after_attribute', + "[tag foo] { [property content][operator :][string \"::\"] }"); + + MT('directives', + "[def @include] [qualifier .mixin]"); + + MT('basic_structure', + "[tag p] { [property background][operator :][keyword red]; }"); + + MT('nested_structure', + "[tag p] { [tag a] { [property color][operator :][keyword red]; } }"); + + MT('mixin', + "[def @mixin] [tag table-base] {}"); + + MT('number_without_semicolon', + "[tag p] {[property width][operator :][number 12]}", + "[tag a] {[property color][operator :][keyword red];}"); + + MT('atom_in_nested_block', + "[tag p] { [tag a] { [property color][operator :][atom #000]; } }"); + + MT('interpolation_in_property', + "[tag foo] { [operator #{][variable-2 $hello][operator }:][number 2]; }"); + + MT('interpolation_in_selector', + "[tag foo][operator #{][variable-2 $hello][operator }] { [property color][operator :][atom #000]; }"); + + MT('interpolation_error', + "[tag foo][operator #{][error foo][operator }] { [property color][operator :][atom #000]; }"); + + MT("divide_operator", + "[tag foo] { [property width][operator :][number 4] [operator /] [number 2] }"); + + MT('nested_structure_with_id_selector', + "[tag p] { [builtin #hello] { [property color][operator :][keyword red]; } }"); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/test.js new file mode 100644 index 0000000..13fc04c --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/css/test.js @@ -0,0 +1,126 @@ +(function() { + var mode = CodeMirror.getMode({tabSize: 4}, "css"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + // Requires at least one media query + MT("atMediaEmpty", + "[def @media] [error {] }"); + + MT("atMediaMultiple", + "[def @media] [keyword not] [attribute screen] [operator and] ([property color]), [keyword not] [attribute print] [operator and] ([property color]) { }"); + + MT("atMediaCheckStack", + "[def @media] [attribute screen] { } [tag foo] { }"); + + MT("atMediaCheckStack", + "[def @media] [attribute screen] ([property color]) { } [tag foo] { }"); + + MT("atMediaPropertyOnly", + "[def @media] ([property color]) { } [tag foo] { }"); + + MT("atMediaCheckStackInvalidAttribute", + "[def @media] [attribute&error foobarhello] { [tag foo] { } }"); + + MT("atMediaCheckStackInvalidAttribute", + "[def @media] [attribute&error foobarhello] { } [tag foo] { }"); + + // Error, because "and" is only allowed immediately preceding a media expression + MT("atMediaInvalidAttribute", + "[def @media] [attribute&error foobarhello] { }"); + + // Error, because "and" is only allowed immediately preceding a media expression + MT("atMediaInvalidAnd", + "[def @media] [error and] [attribute screen] { }"); + + // Error, because "not" is only allowed as the first item in each media query + MT("atMediaInvalidNot", + "[def @media] [attribute screen] [error not] ([error not]) { }"); + + // Error, because "only" is only allowed as the first item in each media query + MT("atMediaInvalidOnly", + "[def @media] [attribute screen] [error only] ([error only]) { }"); + + // Error, because "foobarhello" is neither a known type or property, but + // property was expected (after "and"), and it should be in parenthese. + MT("atMediaUnknownType", + "[def @media] [attribute screen] [operator and] [error foobarhello] { }"); + + // Error, because "color" is not a known type, but is a known property, and + // should be in parentheses. + MT("atMediaInvalidType", + "[def @media] [attribute screen] [operator and] [error color] { }"); + + // Error, because "print" is not a known property, but is a known type, + // and should not be in parenthese. + MT("atMediaInvalidProperty", + "[def @media] [attribute screen] [operator and] ([error print]) { }"); + + // Soft error, because "foobarhello" is not a known property or type. + MT("atMediaUnknownProperty", + "[def @media] [attribute screen] [operator and] ([property&error foobarhello]) { }"); + + // Make sure nesting works with media queries + MT("atMediaMaxWidthNested", + "[def @media] [attribute screen] [operator and] ([property max-width][operator :] [number 25px]) { [tag foo] { } }"); + + MT("tagSelector", + "[tag foo] { }"); + + MT("classSelector", + "[qualifier .foo-bar_hello] { }"); + + MT("idSelector", + "[builtin #foo] { [error #foo] }"); + + MT("tagSelectorUnclosed", + "[tag foo] { [property margin][operator :] [number 0] } [tag bar] { }"); + + MT("tagStringNoQuotes", + "[tag foo] { [property font-family][operator :] [variable-2 hello] [variable-2 world]; }"); + + MT("tagStringDouble", + "[tag foo] { [property font-family][operator :] [string \"hello world\"]; }"); + + MT("tagStringSingle", + "[tag foo] { [property font-family][operator :] [string 'hello world']; }"); + + MT("tagColorKeyword", + "[tag foo] {" + + "[property color][operator :] [keyword black];" + + "[property color][operator :] [keyword navy];" + + "[property color][operator :] [keyword yellow];" + + "}"); + + MT("tagColorHex3", + "[tag foo] { [property background][operator :] [atom #fff]; }"); + + MT("tagColorHex6", + "[tag foo] { [property background][operator :] [atom #ffffff]; }"); + + MT("tagColorHex4", + "[tag foo] { [property background][operator :] [atom&error #ffff]; }"); + + MT("tagColorHexInvalid", + "[tag foo] { [property background][operator :] [atom&error #ffg]; }"); + + MT("tagNegativeNumber", + "[tag foo] { [property margin][operator :] [number -5px]; }"); + + MT("tagPositiveNumber", + "[tag foo] { [property padding][operator :] [number 5px]; }"); + + MT("tagVendor", + "[tag foo] { [meta -foo-][property box-sizing][operator :] [meta -foo-][string-2 border-box]; }"); + + MT("tagBogusProperty", + "[tag foo] { [property&error barhelloworld][operator :] [number 0]; }"); + + MT("tagTwoProperties", + "[tag foo] { [property margin][operator :] [number 0]; [property padding][operator :] [number 0]; }"); + + MT("tagTwoPropertiesURL", + "[tag foo] { [property background][operator :] [string-2 url]([string //example.com/foo.png]); [property padding][operator :] [number 0]; }"); + + MT("commentSGML", + "[comment ]"); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/d/d.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/d/d.js new file mode 100644 index 0000000..ab345f1 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/d/d.js @@ -0,0 +1,205 @@ +CodeMirror.defineMode("d", function(config, parserConfig) { + var indentUnit = config.indentUnit, + statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, + keywords = parserConfig.keywords || {}, + builtin = parserConfig.builtin || {}, + blockKeywords = parserConfig.blockKeywords || {}, + atoms = parserConfig.atoms || {}, + hooks = parserConfig.hooks || {}, + multiLineStrings = parserConfig.multiLineStrings; + var isOperatorChar = /[+\-*&%=<>!?|\/]/; + + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == '"' || ch == "'" || ch == "`") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("+")) { + state.tokenize = tokenComment; + return tokenNestedComment(stream, state); + } + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "keyword"; + } + if (builtin.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "builtin"; + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenNestedComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "+"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + var indent = state.indented; + if (state.context && state.context.type == "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement") popContext(state); + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement")) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; + var closing = firstChar == ctx.type; + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); + else if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}" + }; +}); + +(function() { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var blockKeywords = "body catch class do else enum for foreach foreach_reverse if in interface mixin " + + "out scope struct switch try union unittest version while with"; + + CodeMirror.defineMIME("text/x-d", { + name: "d", + keywords: words("abstract alias align asm assert auto break case cast cdouble cent cfloat const continue " + + "debug default delegate delete deprecated export extern final finally function goto immutable " + + "import inout invariant is lazy macro module new nothrow override package pragma private " + + "protected public pure ref return shared short static super synchronized template this " + + "throw typedef typeid typeof volatile __FILE__ __LINE__ __gshared __traits __vector __parameters " + + blockKeywords), + blockKeywords: words(blockKeywords), + builtin: words("bool byte char creal dchar double float idouble ifloat int ireal long real short ubyte " + + "ucent uint ulong ushort wchar wstring void size_t sizediff_t"), + atoms: words("exit failure success true false null"), + hooks: { + "@": function(stream, _state) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + } + }); +}()); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/d/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/d/index.html new file mode 100644 index 0000000..1333272 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/d/index.html @@ -0,0 +1,262 @@ + + + + + CodeMirror: D mode + + + + + + + + +

              CodeMirror: D mode

              + +
              + + + +

              Simple mode that handle D-Syntax (DLang Homepage).

              + +

              MIME types defined: text/x-d + .

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/diff/diff.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/diff/diff.js new file mode 100644 index 0000000..9a0d90e --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/diff/diff.js @@ -0,0 +1,32 @@ +CodeMirror.defineMode("diff", function() { + + var TOKEN_NAMES = { + '+': 'positive', + '-': 'negative', + '@': 'meta' + }; + + return { + token: function(stream) { + var tw_pos = stream.string.search(/[\t ]+?$/); + + if (!stream.sol() || tw_pos === 0) { + stream.skipToEnd(); + return ("error " + ( + TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); + } + + var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); + + if (tw_pos === -1) { + stream.skipToEnd(); + } else { + stream.pos = tw_pos; + } + + return token_name; + } + }; +}); + +CodeMirror.defineMIME("text/x-diff", "diff"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/diff/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/diff/index.html new file mode 100644 index 0000000..5560252 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/diff/index.html @@ -0,0 +1,105 @@ + + + + + CodeMirror: Diff mode + + + + + + + +

              CodeMirror: Diff mode

              +
              + + +

              MIME types defined: text/x-diff.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ecl/ecl.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ecl/ecl.js new file mode 100644 index 0000000..7601b18 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ecl/ecl.js @@ -0,0 +1,192 @@ +CodeMirror.defineMode("ecl", function(config) { + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + function metaHook(stream, state) { + if (!state.startOfLine) return false; + stream.skipToEnd(); + return "meta"; + } + + var indentUnit = config.indentUnit; + var keyword = words("abs acos allnodes ascii asin asstring atan atan2 ave case choose choosen choosesets clustersize combine correlation cos cosh count covariance cron dataset dedup define denormalize distribute distributed distribution ebcdic enth error evaluate event eventextra eventname exists exp failcode failmessage fetch fromunicode getisvalid global graph group hash hash32 hash64 hashcrc hashmd5 having if index intformat isvalid iterate join keyunicode length library limit ln local log loop map matched matchlength matchposition matchtext matchunicode max merge mergejoin min nolocal nonempty normalize parse pipe power preload process project pull random range rank ranked realformat recordof regexfind regexreplace regroup rejected rollup round roundup row rowdiff sample set sin sinh sizeof soapcall sort sorted sqrt stepped stored sum table tan tanh thisnode topn tounicode transfer trim truncate typeof ungroup unicodeorder variance which workunit xmldecode xmlencode xmltext xmlunicode"); + var variable = words("apply assert build buildindex evaluate fail keydiff keypatch loadxml nothor notify output parallel sequential soapcall wait"); + var variable_2 = words("__compressed__ all and any as atmost before beginc++ best between case const counter csv descend encrypt end endc++ endmacro except exclusive expire export extend false few first flat from full function group header heading hole ifblock import in interface joined keep keyed last left limit load local locale lookup macro many maxcount maxlength min skew module named nocase noroot noscan nosort not of only opt or outer overwrite packed partition penalty physicallength pipe quote record relationship repeat return right scan self separator service shared skew skip sql store terminator thor threshold token transform trim true type unicodeorder unsorted validate virtual whole wild within xml xpath"); + var variable_3 = words("ascii big_endian boolean data decimal ebcdic integer pattern qstring real record rule set of string token udecimal unicode unsigned varstring varunicode"); + var builtin = words("checkpoint deprecated failcode failmessage failure global independent onwarning persist priority recovery stored success wait when"); + var blockKeywords = words("catch class do else finally for if switch try while"); + var atoms = words("true false null"); + var hooks = {"#": metaHook}; + var multiLineStrings; + var isOperatorChar = /[+\-*&%=<>!?|\/]/; + + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var cur = stream.current().toLowerCase(); + if (keyword.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "keyword"; + } else if (variable.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "variable"; + } else if (variable_2.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "variable-2"; + } else if (variable_3.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "variable-3"; + } else if (builtin.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "builtin"; + } else { //Data types are of from KEYWORD## + var i = cur.length - 1; + while(i >= 0 && (!isNaN(cur[i]) || cur[i] == '_')) + --i; + + if (i > 0) { + var cur2 = cur.substr(0, i + 1); + if (variable_3.propertyIsEnumerable(cur2)) { + if (blockKeywords.propertyIsEnumerable(cur2)) curPunc = "newstatement"; + return "variable-3"; + } + } + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return null; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = tokenBase; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + return state.context = new Context(state.indented, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return 0; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; + var closing = firstChar == ctx.type; + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : indentUnit); + else if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}" + }; +}); + +CodeMirror.defineMIME("text/x-ecl", "ecl"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ecl/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ecl/index.html new file mode 100644 index 0000000..0ba88c3 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ecl/index.html @@ -0,0 +1,39 @@ + + + + CodeMirror: ECL mode + + + + + + + +

              CodeMirror: ECL mode

              +
              + + +

              Based on CodeMirror's clike mode. For more information see HPCC Systems web site.

              +

              MIME types defined: text/x-ecl.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/erlang/erlang.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/erlang/erlang.js new file mode 100644 index 0000000..79e0434 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/erlang/erlang.js @@ -0,0 +1,464 @@ +// block; "begin", "case", "fun", "if", "receive", "try": closed by "end" +// block internal; "after", "catch", "of" +// guard; "when", closed by "->" +// "->" opens a clause, closed by ";" or "." +// "<<" opens a binary, closed by ">>" +// "," appears in arglists, lists, tuples and terminates lines of code +// "." resets indentation to 0 +// obsolete; "cond", "let", "query" + +CodeMirror.defineMIME("text/x-erlang", "erlang"); + +CodeMirror.defineMode("erlang", function(cmCfg) { + + function rval(state,stream,type) { + // distinguish between "." as terminator and record field operator + if (type == "record") { + state.context = "record"; + }else{ + state.context = false; + } + + // remember last significant bit on last line for indenting + if (type != "whitespace" && type != "comment") { + state.lastToken = stream.current(); + } + // erlang -> CodeMirror tag + switch (type) { + case "atom": return "atom"; + case "attribute": return "attribute"; + case "builtin": return "builtin"; + case "comment": return "comment"; + case "fun": return "meta"; + case "function": return "tag"; + case "guard": return "property"; + case "keyword": return "keyword"; + case "macro": return "variable-2"; + case "number": return "number"; + case "operator": return "operator"; + case "record": return "bracket"; + case "string": return "string"; + case "type": return "def"; + case "variable": return "variable"; + case "error": return "error"; + case "separator": return null; + case "open_paren": return null; + case "close_paren": return null; + default: return null; + } + } + + var typeWords = [ + "-type", "-spec", "-export_type", "-opaque"]; + + var keywordWords = [ + "after","begin","catch","case","cond","end","fun","if", + "let","of","query","receive","try","when"]; + + var separatorWords = [ + "->",";",":",".",","]; + + var operatorWords = [ + "and","andalso","band","bnot","bor","bsl","bsr","bxor", + "div","not","or","orelse","rem","xor"]; + + var symbolWords = [ + "+","-","*","/",">",">=","<","=<","=:=","==","=/=","/=","||","<-"]; + + var openParenWords = [ + "<<","(","[","{"]; + + var closeParenWords = [ + "}","]",")",">>"]; + + var guardWords = [ + "is_atom","is_binary","is_bitstring","is_boolean","is_float", + "is_function","is_integer","is_list","is_number","is_pid", + "is_port","is_record","is_reference","is_tuple", + "atom","binary","bitstring","boolean","function","integer","list", + "number","pid","port","record","reference","tuple"]; + + var bifWords = [ + "abs","adler32","adler32_combine","alive","apply","atom_to_binary", + "atom_to_list","binary_to_atom","binary_to_existing_atom", + "binary_to_list","binary_to_term","bit_size","bitstring_to_list", + "byte_size","check_process_code","contact_binary","crc32", + "crc32_combine","date","decode_packet","delete_module", + "disconnect_node","element","erase","exit","float","float_to_list", + "garbage_collect","get","get_keys","group_leader","halt","hd", + "integer_to_list","internal_bif","iolist_size","iolist_to_binary", + "is_alive","is_atom","is_binary","is_bitstring","is_boolean", + "is_float","is_function","is_integer","is_list","is_number","is_pid", + "is_port","is_process_alive","is_record","is_reference","is_tuple", + "length","link","list_to_atom","list_to_binary","list_to_bitstring", + "list_to_existing_atom","list_to_float","list_to_integer", + "list_to_pid","list_to_tuple","load_module","make_ref","module_loaded", + "monitor_node","node","node_link","node_unlink","nodes","notalive", + "now","open_port","pid_to_list","port_close","port_command", + "port_connect","port_control","pre_loaded","process_flag", + "process_info","processes","purge_module","put","register", + "registered","round","self","setelement","size","spawn","spawn_link", + "spawn_monitor","spawn_opt","split_binary","statistics", + "term_to_binary","time","throw","tl","trunc","tuple_size", + "tuple_to_list","unlink","unregister","whereis"]; + + // ignored for indenting purposes + var ignoreWords = [ + ",", ":", "catch", "after", "of", "cond", "let", "query"]; + + + var smallRE = /[a-z_]/; + var largeRE = /[A-Z_]/; + var digitRE = /[0-9]/; + var octitRE = /[0-7]/; + var anumRE = /[a-z_A-Z0-9]/; + var symbolRE = /[\+\-\*\/<>=\|:]/; + var openParenRE = /[<\(\[\{]/; + var closeParenRE = /[>\)\]\}]/; + var sepRE = /[\->\.,:;]/; + + function isMember(element,list) { + return (-1 < list.indexOf(element)); + } + + function isPrev(stream,string) { + var start = stream.start; + var len = string.length; + if (len <= start) { + var word = stream.string.slice(start-len,start); + return word == string; + }else{ + return false; + } + } + + function tokenize(stream, state) { + if (stream.eatSpace()) { + return rval(state,stream,"whitespace"); + } + + // attributes and type specs + if ((peekToken(state).token == "" || peekToken(state).token == ".") && + stream.peek() == '-') { + stream.next(); + if (stream.eat(smallRE) && stream.eatWhile(anumRE)) { + if (isMember(stream.current(),typeWords)) { + return rval(state,stream,"type"); + }else{ + return rval(state,stream,"attribute"); + } + } + stream.backUp(1); + } + + var ch = stream.next(); + + // comment + if (ch == '%') { + stream.skipToEnd(); + return rval(state,stream,"comment"); + } + + // macro + if (ch == '?') { + stream.eatWhile(anumRE); + return rval(state,stream,"macro"); + } + + // record + if ( ch == "#") { + stream.eatWhile(anumRE); + return rval(state,stream,"record"); + } + + // char + if ( ch == "$") { + if (stream.next() == "\\") { + if (!stream.eatWhile(octitRE)) { + stream.next(); + } + } + return rval(state,stream,"string"); + } + + // quoted atom + if (ch == '\'') { + if (singleQuote(stream)) { + return rval(state,stream,"atom"); + }else{ + return rval(state,stream,"error"); + } + } + + // string + if (ch == '"') { + if (doubleQuote(stream)) { + return rval(state,stream,"string"); + }else{ + return rval(state,stream,"error"); + } + } + + // variable + if (largeRE.test(ch)) { + stream.eatWhile(anumRE); + return rval(state,stream,"variable"); + } + + // atom/keyword/BIF/function + if (smallRE.test(ch)) { + stream.eatWhile(anumRE); + + if (stream.peek() == "/") { + stream.next(); + if (stream.eatWhile(digitRE)) { + return rval(state,stream,"fun"); // f/0 style fun + }else{ + stream.backUp(1); + return rval(state,stream,"atom"); + } + } + + var w = stream.current(); + + if (isMember(w,keywordWords)) { + pushToken(state,stream); + return rval(state,stream,"keyword"); + } + if (stream.peek() == "(") { + // 'put' and 'erlang:put' are bifs, 'foo:put' is not + if (isMember(w,bifWords) && + (!isPrev(stream,":") || isPrev(stream,"erlang:"))) { + return rval(state,stream,"builtin"); + }else{ + return rval(state,stream,"function"); + } + } + if (isMember(w,guardWords)) { + return rval(state,stream,"guard"); + } + if (isMember(w,operatorWords)) { + return rval(state,stream,"operator"); + } + if (stream.peek() == ":") { + if (w == "erlang") { + return rval(state,stream,"builtin"); + } else { + return rval(state,stream,"function"); + } + } + return rval(state,stream,"atom"); + } + + // number + if (digitRE.test(ch)) { + stream.eatWhile(digitRE); + if (stream.eat('#')) { + stream.eatWhile(digitRE); // 16#10 style integer + } else { + if (stream.eat('.')) { // float + stream.eatWhile(digitRE); + } + if (stream.eat(/[eE]/)) { + stream.eat(/[-+]/); // float with exponent + stream.eatWhile(digitRE); + } + } + return rval(state,stream,"number"); // normal integer + } + + // open parens + if (nongreedy(stream,openParenRE,openParenWords)) { + pushToken(state,stream); + return rval(state,stream,"open_paren"); + } + + // close parens + if (nongreedy(stream,closeParenRE,closeParenWords)) { + pushToken(state,stream); + return rval(state,stream,"close_paren"); + } + + // separators + if (greedy(stream,sepRE,separatorWords)) { + // distinguish between "." as terminator and record field operator + if (state.context == false) { + pushToken(state,stream); + } + return rval(state,stream,"separator"); + } + + // operators + if (greedy(stream,symbolRE,symbolWords)) { + return rval(state,stream,"operator"); + } + + return rval(state,stream,null); + } + + function nongreedy(stream,re,words) { + if (stream.current().length == 1 && re.test(stream.current())) { + stream.backUp(1); + while (re.test(stream.peek())) { + stream.next(); + if (isMember(stream.current(),words)) { + return true; + } + } + stream.backUp(stream.current().length-1); + } + return false; + } + + function greedy(stream,re,words) { + if (stream.current().length == 1 && re.test(stream.current())) { + while (re.test(stream.peek())) { + stream.next(); + } + while (0 < stream.current().length) { + if (isMember(stream.current(),words)) { + return true; + }else{ + stream.backUp(1); + } + } + stream.next(); + } + return false; + } + + function doubleQuote(stream) { + return quote(stream, '"', '\\'); + } + + function singleQuote(stream) { + return quote(stream,'\'','\\'); + } + + function quote(stream,quoteChar,escapeChar) { + while (!stream.eol()) { + var ch = stream.next(); + if (ch == quoteChar) { + return true; + }else if (ch == escapeChar) { + stream.next(); + } + } + return false; + } + + function Token(stream) { + this.token = stream ? stream.current() : ""; + this.column = stream ? stream.column() : 0; + this.indent = stream ? stream.indentation() : 0; + } + + function myIndent(state,textAfter) { + var indent = cmCfg.indentUnit; + var outdentWords = ["after","catch"]; + var token = (peekToken(state)).token; + var wordAfter = takewhile(textAfter,/[^a-z]/); + + if (isMember(token,openParenWords)) { + return (peekToken(state)).column+token.length; + }else if (token == "." || token == ""){ + return 0; + }else if (token == "->") { + if (wordAfter == "end") { + return peekToken(state,2).column; + }else if (peekToken(state,2).token == "fun") { + return peekToken(state,2).column+indent; + }else{ + return (peekToken(state)).indent+indent; + } + }else if (isMember(wordAfter,outdentWords)) { + return (peekToken(state)).indent; + }else{ + return (peekToken(state)).column+indent; + } + } + + function takewhile(str,re) { + var m = str.match(re); + return m ? str.slice(0,m.index) : str; + } + + function popToken(state) { + return state.tokenStack.pop(); + } + + function peekToken(state,depth) { + var len = state.tokenStack.length; + var dep = (depth ? depth : 1); + if (len < dep) { + return new Token; + }else{ + return state.tokenStack[len-dep]; + } + } + + function pushToken(state,stream) { + var token = stream.current(); + var prev_token = peekToken(state).token; + if (isMember(token,ignoreWords)) { + return false; + }else if (drop_both(prev_token,token)) { + popToken(state); + return false; + }else if (drop_first(prev_token,token)) { + popToken(state); + return pushToken(state,stream); + }else{ + state.tokenStack.push(new Token(stream)); + return true; + } + } + + function drop_first(open, close) { + switch (open+" "+close) { + case "when ->": return true; + case "-> end": return true; + case "-> .": return true; + case ". .": return true; + default: return false; + } + } + + function drop_both(open, close) { + switch (open+" "+close) { + case "( )": return true; + case "[ ]": return true; + case "{ }": return true; + case "<< >>": return true; + case "begin end": return true; + case "case end": return true; + case "fun end": return true; + case "if end": return true; + case "receive end": return true; + case "try end": return true; + case "-> ;": return true; + default: return false; + } + } + + return { + startState: + function() { + return {tokenStack: [], + context: false, + lastToken: null}; + }, + + token: + function(stream, state) { + return tokenize(stream, state); + }, + + indent: + function(state, textAfter) { + return myIndent(state,textAfter); + }, + + lineComment: "%" + }; +}); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/erlang/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/erlang/index.html new file mode 100644 index 0000000..fd21521 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/erlang/index.html @@ -0,0 +1,64 @@ + + + + + CodeMirror: Erlang mode + + + + + + + + + +

              CodeMirror: Erlang mode

              + +
              + + + +

              MIME types defined: text/x-erlang.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gas/gas.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gas/gas.js new file mode 100644 index 0000000..a6e6892 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gas/gas.js @@ -0,0 +1,330 @@ +CodeMirror.defineMode("gas", function(_config, parserConfig) { + 'use strict'; + + // If an architecture is specified, its initialization function may + // populate this array with custom parsing functions which will be + // tried in the event that the standard functions do not find a match. + var custom = []; + + // The symbol used to start a line comment changes based on the target + // architecture. + // If no architecture is pased in "parserConfig" then only multiline + // comments will have syntax support. + var lineCommentStartSymbol = ""; + + // These directives are architecture independent. + // Machine specific directives should go in their respective + // architecture initialization function. + // Reference: + // http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops + var directives = { + ".abort" : "builtin", + ".align" : "builtin", + ".altmacro" : "builtin", + ".ascii" : "builtin", + ".asciz" : "builtin", + ".balign" : "builtin", + ".balignw" : "builtin", + ".balignl" : "builtin", + ".bundle_align_mode" : "builtin", + ".bundle_lock" : "builtin", + ".bundle_unlock" : "builtin", + ".byte" : "builtin", + ".cfi_startproc" : "builtin", + ".comm" : "builtin", + ".data" : "builtin", + ".def" : "builtin", + ".desc" : "builtin", + ".dim" : "builtin", + ".double" : "builtin", + ".eject" : "builtin", + ".else" : "builtin", + ".elseif" : "builtin", + ".end" : "builtin", + ".endef" : "builtin", + ".endfunc" : "builtin", + ".endif" : "builtin", + ".equ" : "builtin", + ".equiv" : "builtin", + ".eqv" : "builtin", + ".err" : "builtin", + ".error" : "builtin", + ".exitm" : "builtin", + ".extern" : "builtin", + ".fail" : "builtin", + ".file" : "builtin", + ".fill" : "builtin", + ".float" : "builtin", + ".func" : "builtin", + ".global" : "builtin", + ".gnu_attribute" : "builtin", + ".hidden" : "builtin", + ".hword" : "builtin", + ".ident" : "builtin", + ".if" : "builtin", + ".incbin" : "builtin", + ".include" : "builtin", + ".int" : "builtin", + ".internal" : "builtin", + ".irp" : "builtin", + ".irpc" : "builtin", + ".lcomm" : "builtin", + ".lflags" : "builtin", + ".line" : "builtin", + ".linkonce" : "builtin", + ".list" : "builtin", + ".ln" : "builtin", + ".loc" : "builtin", + ".loc_mark_labels" : "builtin", + ".local" : "builtin", + ".long" : "builtin", + ".macro" : "builtin", + ".mri" : "builtin", + ".noaltmacro" : "builtin", + ".nolist" : "builtin", + ".octa" : "builtin", + ".offset" : "builtin", + ".org" : "builtin", + ".p2align" : "builtin", + ".popsection" : "builtin", + ".previous" : "builtin", + ".print" : "builtin", + ".protected" : "builtin", + ".psize" : "builtin", + ".purgem" : "builtin", + ".pushsection" : "builtin", + ".quad" : "builtin", + ".reloc" : "builtin", + ".rept" : "builtin", + ".sbttl" : "builtin", + ".scl" : "builtin", + ".section" : "builtin", + ".set" : "builtin", + ".short" : "builtin", + ".single" : "builtin", + ".size" : "builtin", + ".skip" : "builtin", + ".sleb128" : "builtin", + ".space" : "builtin", + ".stab" : "builtin", + ".string" : "builtin", + ".struct" : "builtin", + ".subsection" : "builtin", + ".symver" : "builtin", + ".tag" : "builtin", + ".text" : "builtin", + ".title" : "builtin", + ".type" : "builtin", + ".uleb128" : "builtin", + ".val" : "builtin", + ".version" : "builtin", + ".vtable_entry" : "builtin", + ".vtable_inherit" : "builtin", + ".warning" : "builtin", + ".weak" : "builtin", + ".weakref" : "builtin", + ".word" : "builtin" + }; + + var registers = {}; + + function x86(_parserConfig) { + lineCommentStartSymbol = "#"; + + registers.ax = "variable"; + registers.eax = "variable-2"; + registers.rax = "variable-3"; + + registers.bx = "variable"; + registers.ebx = "variable-2"; + registers.rbx = "variable-3"; + + registers.cx = "variable"; + registers.ecx = "variable-2"; + registers.rcx = "variable-3"; + + registers.dx = "variable"; + registers.edx = "variable-2"; + registers.rdx = "variable-3"; + + registers.si = "variable"; + registers.esi = "variable-2"; + registers.rsi = "variable-3"; + + registers.di = "variable"; + registers.edi = "variable-2"; + registers.rdi = "variable-3"; + + registers.sp = "variable"; + registers.esp = "variable-2"; + registers.rsp = "variable-3"; + + registers.bp = "variable"; + registers.ebp = "variable-2"; + registers.rbp = "variable-3"; + + registers.ip = "variable"; + registers.eip = "variable-2"; + registers.rip = "variable-3"; + + registers.cs = "keyword"; + registers.ds = "keyword"; + registers.ss = "keyword"; + registers.es = "keyword"; + registers.fs = "keyword"; + registers.gs = "keyword"; + } + + function armv6(_parserConfig) { + // Reference: + // http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf + // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf + lineCommentStartSymbol = "@"; + directives.syntax = "builtin"; + + registers.r0 = "variable"; + registers.r1 = "variable"; + registers.r2 = "variable"; + registers.r3 = "variable"; + registers.r4 = "variable"; + registers.r5 = "variable"; + registers.r6 = "variable"; + registers.r7 = "variable"; + registers.r8 = "variable"; + registers.r9 = "variable"; + registers.r10 = "variable"; + registers.r11 = "variable"; + registers.r12 = "variable"; + + registers.sp = "variable-2"; + registers.lr = "variable-2"; + registers.pc = "variable-2"; + registers.r13 = registers.sp; + registers.r14 = registers.lr; + registers.r15 = registers.pc; + + custom.push(function(ch, stream) { + if (ch === '#') { + stream.eatWhile(/\w/); + return "number"; + } + }); + } + + var arch = parserConfig.architecture.toLowerCase(); + if (arch === "x86") { + x86(parserConfig); + } else if (arch === "arm" || arch === "armv6") { + armv6(parserConfig); + } + + function nextUntilUnescaped(stream, end) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (next === end && !escaped) { + return false; + } + escaped = !escaped && next === "\\"; + } + return escaped; + } + + function clikeComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (ch === "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch === "*"); + } + return "comment"; + } + + return { + startState: function() { + return { + tokenize: null + }; + }, + + token: function(stream, state) { + if (state.tokenize) { + return state.tokenize(stream, state); + } + + if (stream.eatSpace()) { + return null; + } + + var style, cur, ch = stream.next(); + + if (ch === "/") { + if (stream.eat("*")) { + state.tokenize = clikeComment; + return clikeComment(stream, state); + } + } + + if (ch === lineCommentStartSymbol) { + stream.skipToEnd(); + return "comment"; + } + + if (ch === '"') { + nextUntilUnescaped(stream, '"'); + return "string"; + } + + if (ch === '.') { + stream.eatWhile(/\w/); + cur = stream.current().toLowerCase(); + style = directives[cur]; + return style || null; + } + + if (ch === '=') { + stream.eatWhile(/\w/); + return "tag"; + } + + if (ch === '{') { + return "braket"; + } + + if (ch === '}') { + return "braket"; + } + + if (/\d/.test(ch)) { + if (ch === "0" && stream.eat("x")) { + stream.eatWhile(/[0-9a-fA-F]/); + return "number"; + } + stream.eatWhile(/\d/); + return "number"; + } + + if (/\w/.test(ch)) { + stream.eatWhile(/\w/); + if (stream.eat(":")) { + return 'tag'; + } + cur = stream.current().toLowerCase(); + style = registers[cur]; + return style || null; + } + + for (var i = 0; i < custom.length; i++) { + style = custom[i](ch, stream, state); + if (style) { + return style; + } + } + }, + + lineComment: lineCommentStartSymbol, + blockCommentStart: "/*", + blockCommentEnd: "*/" + }; +}); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gas/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gas/index.html new file mode 100644 index 0000000..7684bc1 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gas/index.html @@ -0,0 +1,57 @@ + + + + + CodeMirror: Gas mode + + + + + + + +

              CodeMirror: Gas mode

              + +
              + +
              + + + +

              Handles AT&T assembler syntax (more specifically this handles + the GNU Assembler (gas) syntax.) + It takes a single optional configuration parameter: + architecture, which can be one of "ARM", + "ARMv6" or "x86". + Including the parameter adds syntax for the registers and special + directives for the supplied architecture. + +

              MIME types defined: text/x-gas

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gfm/gfm.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gfm/gfm.js new file mode 100644 index 0000000..1179b53 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gfm/gfm.js @@ -0,0 +1,96 @@ +CodeMirror.defineMode("gfm", function(config) { + var codeDepth = 0; + function blankLine(state) { + state.code = false; + return null; + } + var gfmOverlay = { + startState: function() { + return { + code: false, + codeBlock: false, + ateSpace: false + }; + }, + copyState: function(s) { + return { + code: s.code, + codeBlock: s.codeBlock, + ateSpace: s.ateSpace + }; + }, + token: function(stream, state) { + // Hack to prevent formatting override inside code blocks (block and inline) + if (state.codeBlock) { + if (stream.match(/^```/)) { + state.codeBlock = false; + return null; + } + stream.skipToEnd(); + return null; + } + if (stream.sol()) { + state.code = false; + } + if (stream.sol() && stream.match(/^```/)) { + stream.skipToEnd(); + state.codeBlock = true; + return null; + } + // If this block is changed, it may need to be updated in Markdown mode + if (stream.peek() === '`') { + stream.next(); + var before = stream.pos; + stream.eatWhile('`'); + var difference = 1 + stream.pos - before; + if (!state.code) { + codeDepth = difference; + state.code = true; + } else { + if (difference === codeDepth) { // Must be exact + state.code = false; + } + } + return null; + } else if (state.code) { + stream.next(); + return null; + } + // Check if space. If so, links can be formatted later on + if (stream.eatSpace()) { + state.ateSpace = true; + return null; + } + if (stream.sol() || state.ateSpace) { + state.ateSpace = false; + if(stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/)) { + // User/Project@SHA + // User@SHA + // SHA + return "link"; + } else if (stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/)) { + // User/Project#Num + // User#Num + // #Num + return "link"; + } + } + if (stream.match(/^((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i)) { + // URLs + // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls + // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine + return "link"; + } + stream.next(); + return null; + }, + blankLine: blankLine + }; + CodeMirror.defineMIME("gfmBase", { + name: "markdown", + underscoresBreakWords: false, + taskLists: true, + fencedCodeBlocks: true + }); + return CodeMirror.overlayMode(CodeMirror.getMode(config, "gfmBase"), gfmOverlay); +}, "markdown"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gfm/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gfm/index.html new file mode 100644 index 0000000..826a96d --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gfm/index.html @@ -0,0 +1,74 @@ + + + + + CodeMirror: GFM mode + + + + + + + + + + + + + + + + + +

              CodeMirror: GFM mode

              + +
              + + + +

              Optionally depends on other modes for properly highlighted code blocks.

              + +

              Parsing/Highlighting Tests: normal, verbose.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gfm/test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gfm/test.js new file mode 100644 index 0000000..3ccaec5 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/gfm/test.js @@ -0,0 +1,112 @@ +(function() { + var mode = CodeMirror.getMode({tabSize: 4}, "gfm"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("emInWordAsterisk", + "foo[em *bar*]hello"); + + MT("emInWordUnderscore", + "foo_bar_hello"); + + MT("emStrongUnderscore", + "[strong __][em&strong _foo__][em _] bar"); + + MT("fencedCodeBlocks", + "[comment ```]", + "[comment foo]", + "", + "[comment ```]", + "bar"); + + MT("fencedCodeBlockModeSwitching", + "[comment ```javascript]", + "[variable foo]", + "", + "[comment ```]", + "bar"); + + MT("taskListAsterisk", + "[variable-2 * []] foo]", // Invalid; must have space or x between [] + "[variable-2 * [ ]]bar]", // Invalid; must have space after ] + "[variable-2 * [x]]hello]", // Invalid; must have space after ] + "[variable-2 * ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links + " [variable-3 * ][property [x]]][variable-3 foo]"); // Valid; can be nested + + MT("taskListPlus", + "[variable-2 + []] foo]", // Invalid; must have space or x between [] + "[variable-2 + [ ]]bar]", // Invalid; must have space after ] + "[variable-2 + [x]]hello]", // Invalid; must have space after ] + "[variable-2 + ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links + " [variable-3 + ][property [x]]][variable-3 foo]"); // Valid; can be nested + + MT("taskListDash", + "[variable-2 - []] foo]", // Invalid; must have space or x between [] + "[variable-2 - [ ]]bar]", // Invalid; must have space after ] + "[variable-2 - [x]]hello]", // Invalid; must have space after ] + "[variable-2 - ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links + " [variable-3 - ][property [x]]][variable-3 foo]"); // Valid; can be nested + + MT("taskListNumber", + "[variable-2 1. []] foo]", // Invalid; must have space or x between [] + "[variable-2 2. [ ]]bar]", // Invalid; must have space after ] + "[variable-2 3. [x]]hello]", // Invalid; must have space after ] + "[variable-2 4. ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links + " [variable-3 1. ][property [x]]][variable-3 foo]"); // Valid; can be nested + + MT("SHA", + "foo [link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] bar"); + + MT("shortSHA", + "foo [link be6a8cc] bar"); + + MT("tooShortSHA", + "foo be6a8c bar"); + + MT("longSHA", + "foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd22 bar"); + + MT("badSHA", + "foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cg2 bar"); + + MT("userSHA", + "foo [link bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] hello"); + + MT("userProjectSHA", + "foo [link bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] world"); + + MT("num", + "foo [link #1] bar"); + + MT("badNum", + "foo #1bar hello"); + + MT("userNum", + "foo [link bar#1] hello"); + + MT("userProjectNum", + "foo [link bar/hello#1] world"); + + MT("vanillaLink", + "foo [link http://www.example.com/] bar"); + + MT("vanillaLinkPunctuation", + "foo [link http://www.example.com/]. bar"); + + MT("vanillaLinkExtension", + "foo [link http://www.example.com/index.html] bar"); + + MT("notALink", + "[comment ```css]", + "[tag foo] {[property color][operator :][keyword black];}", + "[comment ```][link http://www.example.com/]"); + + MT("notALink", + "[comment ``foo `bar` http://www.example.com/``] hello"); + + MT("notALink", + "[comment `foo]", + "[link http://www.example.com/]", + "[comment `foo]", + "", + "[link http://www.example.com/]"); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/go/go.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/go/go.js new file mode 100644 index 0000000..6a458a6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/go/go.js @@ -0,0 +1,168 @@ +CodeMirror.defineMode("go", function(config) { + var indentUnit = config.indentUnit; + + var keywords = { + "break":true, "case":true, "chan":true, "const":true, "continue":true, + "default":true, "defer":true, "else":true, "fallthrough":true, "for":true, + "func":true, "go":true, "goto":true, "if":true, "import":true, + "interface":true, "map":true, "package":true, "range":true, "return":true, + "select":true, "struct":true, "switch":true, "type":true, "var":true, + "bool":true, "byte":true, "complex64":true, "complex128":true, + "float32":true, "float64":true, "int8":true, "int16":true, "int32":true, + "int64":true, "string":true, "uint8":true, "uint16":true, "uint32":true, + "uint64":true, "int":true, "uint":true, "uintptr":true + }; + + var atoms = { + "true":true, "false":true, "iota":true, "nil":true, "append":true, + "cap":true, "close":true, "complex":true, "copy":true, "imag":true, + "len":true, "make":true, "new":true, "panic":true, "print":true, + "println":true, "real":true, "recover":true + }; + + var isOperatorChar = /[+\-*&^%:=<>!|\/]/; + + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'" || ch == "`") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\d\.]/.test(ch)) { + if (ch == ".") { + stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); + } else if (ch == "0") { + stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); + } else { + stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); + } + return "number"; + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) { + if (cur == "case" || cur == "default") curPunc = "case"; + return "keyword"; + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || quote == "`")) + state.tokenize = tokenBase; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + return state.context = new Context(state.indented, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + if (ctx.type == "case") ctx.type = "}"; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "case") ctx.type = "case"; + else if (curPunc == "}" && ctx.type == "}") ctx = popContext(state); + else if (curPunc == ctx.type) popContext(state); + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return 0; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "case" && /^(?:case|default)\b/.test(textAfter)) { + state.context.type = "}"; + return ctx.indented; + } + var closing = firstChar == ctx.type; + if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}:", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//" + }; +}); + +CodeMirror.defineMIME("text/x-go", "go"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/go/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/go/index.html new file mode 100644 index 0000000..8a6aafc --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/go/index.html @@ -0,0 +1,74 @@ + + + + + CodeMirror: Go mode + + + + + + + + + +

              CodeMirror: Go mode

              + +
              + + + +

              MIME type: text/x-go

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/groovy/groovy.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/groovy/groovy.js new file mode 100644 index 0000000..6800e0a --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/groovy/groovy.js @@ -0,0 +1,211 @@ +CodeMirror.defineMode("groovy", function(config) { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var keywords = words( + "abstract as assert boolean break byte case catch char class const continue def default " + + "do double else enum extends final finally float for goto if implements import in " + + "instanceof int interface long native new package private protected public return " + + "short static strictfp super switch synchronized threadsafe throw throws transient " + + "try void volatile while"); + var blockKeywords = words("catch class do else finally for if switch try while enum interface def"); + var atoms = words("null true false this"); + + var curPunc; + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + return startString(ch, stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + if (stream.eat(/eE/)) { stream.eat(/\+\-/); stream.eatWhile(/\d/); } + return "number"; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize.push(tokenComment); + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + if (expectExpression(state.lastToken)) { + return startString(ch, stream, state); + } + } + if (ch == "-" && stream.eat(">")) { + curPunc = "->"; + return null; + } + if (/[+\-*&%=<>!?|\/~]/.test(ch)) { + stream.eatWhile(/[+\-*&%=<>|~]/); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + if (ch == "@") { stream.eatWhile(/[\w\$_\.]/); return "meta"; } + if (state.lastToken == ".") return "property"; + if (stream.eat(":")) { curPunc = "proplabel"; return "property"; } + var cur = stream.current(); + if (atoms.propertyIsEnumerable(cur)) { return "atom"; } + if (keywords.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "keyword"; + } + return "variable"; + } + tokenBase.isBase = true; + + function startString(quote, stream, state) { + var tripleQuoted = false; + if (quote != "/" && stream.eat(quote)) { + if (stream.eat(quote)) tripleQuoted = true; + else return "string"; + } + function t(stream, state) { + var escaped = false, next, end = !tripleQuoted; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) { + if (!tripleQuoted) { break; } + if (stream.match(quote + quote)) { end = true; break; } + } + if (quote == '"' && next == "$" && !escaped && stream.eat("{")) { + state.tokenize.push(tokenBaseUntilBrace()); + return "string"; + } + escaped = !escaped && next == "\\"; + } + if (end) state.tokenize.pop(); + return "string"; + } + state.tokenize.push(t); + return t(stream, state); + } + + function tokenBaseUntilBrace() { + var depth = 1; + function t(stream, state) { + if (stream.peek() == "}") { + depth--; + if (depth == 0) { + state.tokenize.pop(); + return state.tokenize[state.tokenize.length-1](stream, state); + } + } else if (stream.peek() == "{") { + depth++; + } + return tokenBase(stream, state); + } + t.isBase = true; + return t; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize.pop(); + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function expectExpression(last) { + return !last || last == "operator" || last == "->" || /[\.\[\{\(,;:]/.test(last) || + last == "newstatement" || last == "keyword" || last == "proplabel"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + return state.context = new Context(state.indented, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: [tokenBase], + context: new Context((basecolumn || 0) - config.indentUnit, 0, "top", false), + indented: 0, + startOfLine: true, + lastToken: null + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + // Automatic semicolon insertion + if (ctx.type == "statement" && !expectExpression(state.lastToken)) { + popContext(state); ctx = state.context; + } + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = state.tokenize[state.tokenize.length-1](stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); + // Handle indentation for {x -> \n ... } + else if (curPunc == "->" && ctx.type == "statement" && ctx.prev.type == "}") { + popContext(state); + state.context.align = false; + } + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + state.lastToken = curPunc || style; + return style; + }, + + indent: function(state, textAfter) { + if (!state.tokenize[state.tokenize.length-1].isBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), ctx = state.context; + if (ctx.type == "statement" && !expectExpression(state.lastToken)) ctx = ctx.prev; + var closing = firstChar == ctx.type; + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : config.indentUnit); + else if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : config.indentUnit); + }, + + electricChars: "{}", + fold: "brace" + }; +}); + +CodeMirror.defineMIME("text/x-groovy", "groovy"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/groovy/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/groovy/index.html new file mode 100644 index 0000000..3d39595 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/groovy/index.html @@ -0,0 +1,73 @@ + + + + + CodeMirror: Groovy mode + + + + + + + + +

              CodeMirror: Groovy mode

              + +
              + + + +

              MIME types defined: text/x-groovy

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haml/haml.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haml/haml.js new file mode 100644 index 0000000..793308f --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haml/haml.js @@ -0,0 +1,153 @@ +(function() { + "use strict"; + + // full haml mode. This handled embeded ruby and html fragments too + CodeMirror.defineMode("haml", function(config) { + var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); + var rubyMode = CodeMirror.getMode(config, "ruby"); + + function rubyInQuote(endQuote) { + return function(stream, state) { + var ch = stream.peek(); + if (ch == endQuote && state.rubyState.tokenize.length == 1) { + // step out of ruby context as it seems to complete processing all the braces + stream.next(); + state.tokenize = html; + return "closeAttributeTag"; + } else { + return ruby(stream, state); + } + }; + } + + function ruby(stream, state) { + if (stream.match("-#")) { + stream.skipToEnd(); + return "comment"; + } + return rubyMode.token(stream, state.rubyState); + } + + function html(stream, state) { + var ch = stream.peek(); + + // handle haml declarations. All declarations that cant be handled here + // will be passed to html mode + if (state.previousToken.style == "comment" ) { + if (state.indented > state.previousToken.indented) { + stream.skipToEnd(); + return "commentLine"; + } + } + + if (state.startOfLine) { + if (ch == "!" && stream.match("!!")) { + stream.skipToEnd(); + return "tag"; + } else if (stream.match(/^%[\w:#\.]+=/)) { + state.tokenize = ruby; + return "hamlTag"; + } else if (stream.match(/^%[\w:]+/)) { + return "hamlTag"; + } else if (ch == "/" ) { + stream.skipToEnd(); + return "comment"; + } + } + + if (state.startOfLine || state.previousToken.style == "hamlTag") { + if ( ch == "#" || ch == ".") { + stream.match(/[\w-#\.]*/); + return "hamlAttribute"; + } + } + + // donot handle --> as valid ruby, make it HTML close comment instead + if (state.startOfLine && !stream.match("-->", false) && (ch == "=" || ch == "-" )) { + state.tokenize = ruby; + return null; + } + + if (state.previousToken.style == "hamlTag" || + state.previousToken.style == "closeAttributeTag" || + state.previousToken.style == "hamlAttribute") { + if (ch == "(") { + state.tokenize = rubyInQuote(")"); + return null; + } else if (ch == "{") { + state.tokenize = rubyInQuote("}"); + return null; + } + } + + return htmlMode.token(stream, state.htmlState); + } + + return { + // default to html mode + startState: function() { + var htmlState = htmlMode.startState(); + var rubyState = rubyMode.startState(); + return { + htmlState: htmlState, + rubyState: rubyState, + indented: 0, + previousToken: { style: null, indented: 0}, + tokenize: html + }; + }, + + copyState: function(state) { + return { + htmlState : CodeMirror.copyState(htmlMode, state.htmlState), + rubyState: CodeMirror.copyState(rubyMode, state.rubyState), + indented: state.indented, + previousToken: state.previousToken, + tokenize: state.tokenize + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + state.startOfLine = false; + // dont record comment line as we only want to measure comment line with + // the opening comment block + if (style && style != "commentLine") { + state.previousToken = { style: style, indented: state.indented }; + } + // if current state is ruby and the previous token is not `,` reset the + // tokenize to html + if (stream.eol() && state.tokenize == ruby) { + stream.backUp(1); + var ch = stream.peek(); + stream.next(); + if (ch && ch != ",") { + state.tokenize = html; + } + } + // reprocess some of the specific style tag when finish setting previousToken + if (style == "hamlTag") { + style = "tag"; + } else if (style == "commentLine") { + style = "comment"; + } else if (style == "hamlAttribute") { + style = "attribute"; + } else if (style == "closeAttributeTag") { + style = null; + } + return style; + }, + + indent: function(state) { + return state.indented; + } + }; + }, "htmlmixed", "ruby"); + + CodeMirror.defineMIME("text/x-haml", "haml"); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haml/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haml/index.html new file mode 100644 index 0000000..7da378f --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haml/index.html @@ -0,0 +1,67 @@ + + + + + CodeMirror: HAML mode + + + + + + + + + + + +

              CodeMirror: HAML mode

              +
              + + +

              MIME types defined: text/x-haml.

              + +

              Parsing/Highlighting Tests: normal, verbose.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haml/test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haml/test.js new file mode 100644 index 0000000..b7178d4 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haml/test.js @@ -0,0 +1,94 @@ +(function() { + var mode = CodeMirror.getMode({tabSize: 4}, "haml"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + // Requires at least one media query + MT("elementName", + "[tag %h1] Hey There"); + + MT("oneElementPerLine", + "[tag %h1] Hey There %h2"); + + MT("idSelector", + "[tag %h1][attribute #test] Hey There"); + + MT("classSelector", + "[tag %h1][attribute .hello] Hey There"); + + MT("docType", + "[tag !!! XML]"); + + MT("comment", + "[comment / Hello WORLD]"); + + MT("notComment", + "[tag %h1] This is not a / comment "); + + MT("attributes", + "[tag %a]([variable title][operator =][string \"test\"]){[atom :title] [operator =>] [string \"test\"]}"); + + MT("htmlCode", + "[tag

              ]Title[tag

              ]"); + + MT("rubyBlock", + "[operator =][variable-2 @item]"); + + MT("selectorRubyBlock", + "[tag %a.selector=] [variable-2 @item]"); + + MT("nestedRubyBlock", + "[tag %a]", + " [operator =][variable puts] [string \"test\"]"); + + MT("multilinePlaintext", + "[tag %p]", + " Hello,", + " World"); + + MT("multilineRuby", + "[tag %p]", + " [comment -# this is a comment]", + " [comment and this is a comment too]", + " Date/Time", + " [operator -] [variable now] [operator =] [tag DateTime][operator .][variable now]", + " [tag %strong=] [variable now]", + " [operator -] [keyword if] [variable now] [operator >] [tag DateTime][operator .][variable parse]([string \"December 31, 2006\"])", + " [operator =][string \"Happy\"]", + " [operator =][string \"Belated\"]", + " [operator =][string \"Birthday\"]"); + + MT("multilineComment", + "[comment /]", + " [comment Multiline]", + " [comment Comment]"); + + MT("hamlComment", + "[comment -# this is a comment]"); + + MT("multilineHamlComment", + "[comment -# this is a comment]", + " [comment and this is a comment too]"); + + MT("multilineHTMLComment", + "[comment ]"); + + MT("hamlAfterRubyTag", + "[attribute .block]", + " [tag %strong=] [variable now]", + " [attribute .test]", + " [operator =][variable now]", + " [attribute .right]"); + + MT("stretchedRuby", + "[operator =] [variable puts] [string \"Hello\"],", + " [string \"World\"]"); + + MT("interpolationInHashAttribute", + //"[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test"); + "[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test"); + + MT("interpolationInHTMLAttribute", + "[tag %div]([variable title][operator =][string \"#{][variable test][string }_#{][variable ting]()[string }\"]) Test"); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haskell/haskell.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haskell/haskell.js new file mode 100644 index 0000000..b18d5ce --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haskell/haskell.js @@ -0,0 +1,246 @@ +CodeMirror.defineMode("haskell", function() { + + function switchState(source, setState, f) { + setState(f); + return f(source, setState); + } + + // These should all be Unicode extended, as per the Haskell 2010 report + var smallRE = /[a-z_]/; + var largeRE = /[A-Z]/; + var digitRE = /[0-9]/; + var hexitRE = /[0-9A-Fa-f]/; + var octitRE = /[0-7]/; + var idRE = /[a-z_A-Z0-9']/; + var symbolRE = /[-!#$%&*+.\/<=>?@\\^|~:]/; + var specialRE = /[(),;[\]`{}]/; + var whiteCharRE = /[ \t\v\f]/; // newlines are handled in tokenizer + + function normal(source, setState) { + if (source.eatWhile(whiteCharRE)) { + return null; + } + + var ch = source.next(); + if (specialRE.test(ch)) { + if (ch == '{' && source.eat('-')) { + var t = "comment"; + if (source.eat('#')) { + t = "meta"; + } + return switchState(source, setState, ncomment(t, 1)); + } + return null; + } + + if (ch == '\'') { + if (source.eat('\\')) { + source.next(); // should handle other escapes here + } + else { + source.next(); + } + if (source.eat('\'')) { + return "string"; + } + return "error"; + } + + if (ch == '"') { + return switchState(source, setState, stringLiteral); + } + + if (largeRE.test(ch)) { + source.eatWhile(idRE); + if (source.eat('.')) { + return "qualifier"; + } + return "variable-2"; + } + + if (smallRE.test(ch)) { + source.eatWhile(idRE); + return "variable"; + } + + if (digitRE.test(ch)) { + if (ch == '0') { + if (source.eat(/[xX]/)) { + source.eatWhile(hexitRE); // should require at least 1 + return "integer"; + } + if (source.eat(/[oO]/)) { + source.eatWhile(octitRE); // should require at least 1 + return "number"; + } + } + source.eatWhile(digitRE); + var t = "number"; + if (source.eat('.')) { + t = "number"; + source.eatWhile(digitRE); // should require at least 1 + } + if (source.eat(/[eE]/)) { + t = "number"; + source.eat(/[-+]/); + source.eatWhile(digitRE); // should require at least 1 + } + return t; + } + + if (symbolRE.test(ch)) { + if (ch == '-' && source.eat(/-/)) { + source.eatWhile(/-/); + if (!source.eat(symbolRE)) { + source.skipToEnd(); + return "comment"; + } + } + var t = "variable"; + if (ch == ':') { + t = "variable-2"; + } + source.eatWhile(symbolRE); + return t; + } + + return "error"; + } + + function ncomment(type, nest) { + if (nest == 0) { + return normal; + } + return function(source, setState) { + var currNest = nest; + while (!source.eol()) { + var ch = source.next(); + if (ch == '{' && source.eat('-')) { + ++currNest; + } + else if (ch == '-' && source.eat('}')) { + --currNest; + if (currNest == 0) { + setState(normal); + return type; + } + } + } + setState(ncomment(type, currNest)); + return type; + }; + } + + function stringLiteral(source, setState) { + while (!source.eol()) { + var ch = source.next(); + if (ch == '"') { + setState(normal); + return "string"; + } + if (ch == '\\') { + if (source.eol() || source.eat(whiteCharRE)) { + setState(stringGap); + return "string"; + } + if (source.eat('&')) { + } + else { + source.next(); // should handle other escapes here + } + } + } + setState(normal); + return "error"; + } + + function stringGap(source, setState) { + if (source.eat('\\')) { + return switchState(source, setState, stringLiteral); + } + source.next(); + setState(normal); + return "error"; + } + + + var wellKnownWords = (function() { + var wkw = {}; + function setType(t) { + return function () { + for (var i = 0; i < arguments.length; i++) + wkw[arguments[i]] = t; + }; + } + + setType("keyword")( + "case", "class", "data", "default", "deriving", "do", "else", "foreign", + "if", "import", "in", "infix", "infixl", "infixr", "instance", "let", + "module", "newtype", "of", "then", "type", "where", "_"); + + setType("keyword")( + "\.\.", ":", "::", "=", "\\", "\"", "<-", "->", "@", "~", "=>"); + + setType("builtin")( + "!!", "$!", "$", "&&", "+", "++", "-", ".", "/", "/=", "<", "<=", "=<<", + "==", ">", ">=", ">>", ">>=", "^", "^^", "||", "*", "**"); + + setType("builtin")( + "Bool", "Bounded", "Char", "Double", "EQ", "Either", "Enum", "Eq", + "False", "FilePath", "Float", "Floating", "Fractional", "Functor", "GT", + "IO", "IOError", "Int", "Integer", "Integral", "Just", "LT", "Left", + "Maybe", "Monad", "Nothing", "Num", "Ord", "Ordering", "Rational", "Read", + "ReadS", "Real", "RealFloat", "RealFrac", "Right", "Show", "ShowS", + "String", "True"); + + setType("builtin")( + "abs", "acos", "acosh", "all", "and", "any", "appendFile", "asTypeOf", + "asin", "asinh", "atan", "atan2", "atanh", "break", "catch", "ceiling", + "compare", "concat", "concatMap", "const", "cos", "cosh", "curry", + "cycle", "decodeFloat", "div", "divMod", "drop", "dropWhile", "either", + "elem", "encodeFloat", "enumFrom", "enumFromThen", "enumFromThenTo", + "enumFromTo", "error", "even", "exp", "exponent", "fail", "filter", + "flip", "floatDigits", "floatRadix", "floatRange", "floor", "fmap", + "foldl", "foldl1", "foldr", "foldr1", "fromEnum", "fromInteger", + "fromIntegral", "fromRational", "fst", "gcd", "getChar", "getContents", + "getLine", "head", "id", "init", "interact", "ioError", "isDenormalized", + "isIEEE", "isInfinite", "isNaN", "isNegativeZero", "iterate", "last", + "lcm", "length", "lex", "lines", "log", "logBase", "lookup", "map", + "mapM", "mapM_", "max", "maxBound", "maximum", "maybe", "min", "minBound", + "minimum", "mod", "negate", "not", "notElem", "null", "odd", "or", + "otherwise", "pi", "pred", "print", "product", "properFraction", + "putChar", "putStr", "putStrLn", "quot", "quotRem", "read", "readFile", + "readIO", "readList", "readLn", "readParen", "reads", "readsPrec", + "realToFrac", "recip", "rem", "repeat", "replicate", "return", "reverse", + "round", "scaleFloat", "scanl", "scanl1", "scanr", "scanr1", "seq", + "sequence", "sequence_", "show", "showChar", "showList", "showParen", + "showString", "shows", "showsPrec", "significand", "signum", "sin", + "sinh", "snd", "span", "splitAt", "sqrt", "subtract", "succ", "sum", + "tail", "take", "takeWhile", "tan", "tanh", "toEnum", "toInteger", + "toRational", "truncate", "uncurry", "undefined", "unlines", "until", + "unwords", "unzip", "unzip3", "userError", "words", "writeFile", "zip", + "zip3", "zipWith", "zipWith3"); + + return wkw; + })(); + + + + return { + startState: function () { return { f: normal }; }, + copyState: function (s) { return { f: s.f }; }, + + token: function(stream, state) { + var t = state.f(stream, function(s) { state.f = s; }); + var w = stream.current(); + return (w in wellKnownWords) ? wellKnownWords[w] : t; + }, + + blockCommentStart: "{-", + blockCommentEnd: "-}", + lineComment: "--" + }; + +}); + +CodeMirror.defineMIME("text/x-haskell", "haskell"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haskell/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haskell/index.html new file mode 100644 index 0000000..56307b8 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haskell/index.html @@ -0,0 +1,62 @@ + + + + + CodeMirror: Haskell mode + + + + + + + + + +

              CodeMirror: Haskell mode

              + +
              + + + +

              MIME types defined: text/x-haskell.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haxe/haxe.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haxe/haxe.js new file mode 100644 index 0000000..28f9b00 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haxe/haxe.js @@ -0,0 +1,429 @@ +CodeMirror.defineMode("haxe", function(config, parserConfig) { + var indentUnit = config.indentUnit; + + // Tokenizer + + var keywords = function(){ + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); + var operator = kw("operator"), atom = {type: "atom", style: "atom"}, attribute = {type:"attribute", style: "attribute"}; + var type = kw("typedef"); + return { + "if": A, "while": A, "else": B, "do": B, "try": B, + "return": C, "break": C, "continue": C, "new": C, "throw": C, + "var": kw("var"), "inline":attribute, "static": attribute, "using":kw("import"), + "public": attribute, "private": attribute, "cast": kw("cast"), "import": kw("import"), "macro": kw("macro"), + "function": kw("function"), "catch": kw("catch"), "untyped": kw("untyped"), "callback": kw("cb"), + "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), + "in": operator, "never": kw("property_access"), "trace":kw("trace"), + "class": type, "enum":type, "interface":type, "typedef":type, "extends":type, "implements":type, "dynamic":type, + "true": atom, "false": atom, "null": atom + }; + }(); + + var isOperatorChar = /[+\-*&%=<>!?|]/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + function nextUntilUnescaped(stream, end) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (next == end && !escaped) + return false; + escaped = !escaped && next == "\\"; + } + return escaped; + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; content = cont; + return style; + } + + function haxeTokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") + return chain(stream, state, haxeTokenString(ch)); + else if (/[\[\]{}\(\),;\:\.]/.test(ch)) + return ret(ch); + else if (ch == "0" && stream.eat(/x/i)) { + stream.eatWhile(/[\da-f]/i); + return ret("number", "number"); + } + else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) { + stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); + return ret("number", "number"); + } + else if (state.reAllowed && (ch == "~" && stream.eat(/\//))) { + nextUntilUnescaped(stream, "/"); + stream.eatWhile(/[gimsu]/); + return ret("regexp", "string-2"); + } + else if (ch == "/") { + if (stream.eat("*")) { + return chain(stream, state, haxeTokenComment); + } + else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } + else { + stream.eatWhile(isOperatorChar); + return ret("operator", null, stream.current()); + } + } + else if (ch == "#") { + stream.skipToEnd(); + return ret("conditional", "meta"); + } + else if (ch == "@") { + stream.eat(/:/); + stream.eatWhile(/[\w_]/); + return ret ("metadata", "meta"); + } + else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return ret("operator", null, stream.current()); + } + else { + var word; + if(/[A-Z]/.test(ch)) + { + stream.eatWhile(/[\w_<>]/); + word = stream.current(); + return ret("type", "variable-3", word); + } + else + { + stream.eatWhile(/[\w_]/); + var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; + return (known && state.kwAllowed) ? ret(known.type, known.style, word) : + ret("variable", "variable", word); + } + } + } + + function haxeTokenString(quote) { + return function(stream, state) { + if (!nextUntilUnescaped(stream, quote)) + state.tokenize = haxeTokenBase; + return ret("string", "string"); + }; + } + + function haxeTokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = haxeTokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + // Parser + + var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true}; + + function HaxeLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + + function inScope(state, varname) { + for (var v = state.localVars; v; v = v.next) + if (v.name == varname) return true; + } + + function parseHaxe(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; + + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = true; + + while(true) { + var combinator = cc.length ? cc.pop() : statement; + if (combinator(type, content)) { + while(cc.length && cc[cc.length - 1].lex) + cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + if (type == "variable" && imported(state, content)) return "variable-3"; + return style; + } + } + } + + function imported(state, typename) + { + if (/[a-z]/.test(typename.charAt(0))) + return false; + var len = state.importedtypes.length; + for (var i = 0; i= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function register(varname) { + var state = cx.state; + if (state.context) { + cx.marked = "def"; + for (var v = state.localVars; v; v = v.next) + if (v.name == varname) return; + state.localVars = {name: varname, next: state.localVars}; + } + } + + // Combinators + + var defaultVars = {name: "this", next: null}; + function pushcontext() { + if (!cx.state.context) cx.state.localVars = defaultVars; + cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; + } + function popcontext() { + cx.state.localVars = cx.state.context.vars; + cx.state.context = cx.state.context.prev; + } + function pushlex(type, info) { + var result = function() { + var state = cx.state; + state.lexical = new HaxeLexical(state.indented, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") + state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + + function expect(wanted) { + return function(type) { + if (type == wanted) return cont(); + else if (wanted == ";") return pass(); + else return cont(arguments.callee); + }; + } + + function statement(type) { + if (type == "@") return cont(metadef); + if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "{") return cont(pushlex("}"), pushcontext, block, poplex, popcontext); + if (type == ";") return cont(); + if (type == "attribute") return cont(maybeattribute); + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"), + poplex, statement, poplex); + if (type == "variable") return cont(pushlex("stat"), maybelabel); + if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), + block, poplex, poplex); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), + statement, poplex, popcontext); + if (type == "import") return cont(importdef, expect(";")); + if (type == "typedef") return cont(typedef); + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function expression(type) { + if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator); + if (type == "function") return cont(functiondef); + if (type == "keyword c") return cont(maybeexpression); + if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeoperator); + if (type == "operator") return cont(expression); + if (type == "[") return cont(pushlex("]"), commasep(expression, "]"), poplex, maybeoperator); + if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeoperator); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + + function maybeoperator(type, value) { + if (type == "operator" && /\+\+|--/.test(value)) return cont(maybeoperator); + if (type == "operator" || type == ":") return cont(expression); + if (type == ";") return; + if (type == "(") return cont(pushlex(")"), commasep(expression, ")"), poplex, maybeoperator); + if (type == ".") return cont(property, maybeoperator); + if (type == "[") return cont(pushlex("]"), expression, expect("]"), poplex, maybeoperator); + } + + function maybeattribute(type) { + if (type == "attribute") return cont(maybeattribute); + if (type == "function") return cont(functiondef); + if (type == "var") return cont(vardef1); + } + + function metadef(type) { + if(type == ":") return cont(metadef); + if(type == "variable") return cont(metadef); + if(type == "(") return cont(pushlex(")"), comasep(metaargs, ")"), poplex, statement); + } + function metaargs(type) { + if(type == "variable") return cont(); + } + + function importdef (type, value) { + if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } + else if(type == "variable" || type == "property" || type == ".") return cont(importdef); + } + + function typedef (type, value) + { + if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } + } + + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperator, expect(";"), poplex); + } + function property(type) { + if (type == "variable") {cx.marked = "property"; return cont();} + } + function objprop(type) { + if (type == "variable") cx.marked = "property"; + if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expression); + } + function commasep(what, end) { + function proceed(type) { + if (type == ",") return cont(what, proceed); + if (type == end) return cont(); + return cont(expect(end)); + } + return function(type) { + if (type == end) return cont(); + else return pass(what, proceed); + }; + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function vardef1(type, value) { + if (type == "variable"){register(value); return cont(typeuse, vardef2);} + return cont(); + } + function vardef2(type, value) { + if (value == "=") return cont(expression, vardef2); + if (type == ",") return cont(vardef1); + } + function forspec1(type, value) { + if (type == "variable") { + register(value); + } + return cont(pushlex(")"), pushcontext, forin, expression, poplex, statement, popcontext); + } + function forin(_type, value) { + if (value == "in") return cont(); + } + function functiondef(type, value) { + if (type == "variable") {register(value); return cont(functiondef);} + if (value == "new") return cont(functiondef); + if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, typeuse, statement, popcontext); + } + function typeuse(type) { + if(type == ":") return cont(typestring); + } + function typestring(type) { + if(type == "type") return cont(); + if(type == "variable") return cont(); + if(type == "{") return cont(pushlex("}"), commasep(typeprop, "}"), poplex); + } + function typeprop(type) { + if(type == "variable") return cont(typeuse); + } + function funarg(type, value) { + if (type == "variable") {register(value); return cont(typeuse);} + } + + // Interface + + return { + startState: function(basecolumn) { + var defaulttypes = ["Int", "Float", "String", "Void", "Std", "Bool", "Dynamic", "Array"]; + return { + tokenize: haxeTokenBase, + reAllowed: true, + kwAllowed: true, + cc: [], + lexical: new HaxeLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + importedtypes: defaulttypes, + context: parserConfig.localVars && {vars: parserConfig.localVars}, + indented: 0 + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = false; + state.indented = stream.indentation(); + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.reAllowed = !!(type == "operator" || type == "keyword c" || type.match(/^[\[{}\(,;:]$/)); + state.kwAllowed = type != '.'; + return parseHaxe(state, style, type, content, stream); + }, + + indent: function(state, textAfter) { + if (state.tokenize != haxeTokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; + if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; + var type = lexical.type, closing = firstChar == type; + if (type == "vardef") return lexical.indented + 4; + else if (type == "form" && firstChar == "{") return lexical.indented; + else if (type == "stat" || type == "form") return lexical.indented + indentUnit; + else if (lexical.info == "switch" && !closing) + return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); + else if (lexical.align) return lexical.column + (closing ? 0 : 1); + else return lexical.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}" + }; +}); + +CodeMirror.defineMIME("text/x-haxe", "haxe"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haxe/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haxe/index.html new file mode 100644 index 0000000..1125741 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/haxe/index.html @@ -0,0 +1,90 @@ + + + + + CodeMirror: Haxe mode + + + + + + + +

              CodeMirror: Haxe mode

              + +
              + + + +

              MIME types defined: text/x-haxe.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/htmlembedded/htmlembedded.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/htmlembedded/htmlembedded.js new file mode 100644 index 0000000..ff6dfd2 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/htmlembedded/htmlembedded.js @@ -0,0 +1,73 @@ +CodeMirror.defineMode("htmlembedded", function(config, parserConfig) { + + //config settings + var scriptStartRegex = parserConfig.scriptStartRegex || /^<%/i, + scriptEndRegex = parserConfig.scriptEndRegex || /^%>/i; + + //inner modes + var scriptingMode, htmlMixedMode; + + //tokenizer when in html mode + function htmlDispatch(stream, state) { + if (stream.match(scriptStartRegex, false)) { + state.token=scriptingDispatch; + return scriptingMode.token(stream, state.scriptState); + } + else + return htmlMixedMode.token(stream, state.htmlState); + } + + //tokenizer when in scripting mode + function scriptingDispatch(stream, state) { + if (stream.match(scriptEndRegex, false)) { + state.token=htmlDispatch; + return htmlMixedMode.token(stream, state.htmlState); + } + else + return scriptingMode.token(stream, state.scriptState); + } + + + return { + startState: function() { + scriptingMode = scriptingMode || CodeMirror.getMode(config, parserConfig.scriptingModeSpec); + htmlMixedMode = htmlMixedMode || CodeMirror.getMode(config, "htmlmixed"); + return { + token : parserConfig.startOpen ? scriptingDispatch : htmlDispatch, + htmlState : CodeMirror.startState(htmlMixedMode), + scriptState : CodeMirror.startState(scriptingMode) + }; + }, + + token: function(stream, state) { + return state.token(stream, state); + }, + + indent: function(state, textAfter) { + if (state.token == htmlDispatch) + return htmlMixedMode.indent(state.htmlState, textAfter); + else if (scriptingMode.indent) + return scriptingMode.indent(state.scriptState, textAfter); + }, + + copyState: function(state) { + return { + token : state.token, + htmlState : CodeMirror.copyState(htmlMixedMode, state.htmlState), + scriptState : CodeMirror.copyState(scriptingMode, state.scriptState) + }; + }, + + electricChars: "/{}:", + + innerMode: function(state) { + if (state.token == scriptingDispatch) return {state: state.scriptState, mode: scriptingMode}; + else return {state: state.htmlState, mode: htmlMixedMode}; + } + }; +}, "htmlmixed"); + +CodeMirror.defineMIME("application/x-ejs", { name: "htmlembedded", scriptingModeSpec:"javascript"}); +CodeMirror.defineMIME("application/x-aspx", { name: "htmlembedded", scriptingModeSpec:"text/x-csharp"}); +CodeMirror.defineMIME("application/x-jsp", { name: "htmlembedded", scriptingModeSpec:"text/x-java"}); +CodeMirror.defineMIME("application/x-erb", { name: "htmlembedded", scriptingModeSpec:"ruby"}); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/htmlembedded/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/htmlembedded/index.html new file mode 100644 index 0000000..5a37dd6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/htmlembedded/index.html @@ -0,0 +1,49 @@ + + + + + CodeMirror: Html Embedded Scripts mode + + + + + + + + + + + +

              CodeMirror: Html Embedded Scripts mode

              + +
              + + + +

              Mode for html embedded scripts like JSP and ASP.NET. Depends on HtmlMixed which in turn depends on + JavaScript, CSS and XML.
              Other dependancies include those of the scriping language chosen.

              + +

              MIME types defined: application/x-aspx (ASP.NET), + application/x-ejs (Embedded Javascript), application/x-jsp (JavaServer Pages)

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/htmlmixed/htmlmixed.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/htmlmixed/htmlmixed.js new file mode 100644 index 0000000..ec0c21d --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/htmlmixed/htmlmixed.js @@ -0,0 +1,104 @@ +CodeMirror.defineMode("htmlmixed", function(config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, {name: "xml", htmlMode: true}); + var cssMode = CodeMirror.getMode(config, "css"); + + var scriptTypes = [], scriptTypesConf = parserConfig && parserConfig.scriptTypes; + scriptTypes.push({matches: /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i, + mode: CodeMirror.getMode(config, "javascript")}); + if (scriptTypesConf) for (var i = 0; i < scriptTypesConf.length; ++i) { + var conf = scriptTypesConf[i]; + scriptTypes.push({matches: conf.matches, mode: conf.mode && CodeMirror.getMode(config, conf.mode)}); + } + scriptTypes.push({matches: /./, + mode: CodeMirror.getMode(config, "text/plain")}); + + function html(stream, state) { + var tagName = state.htmlState.tagName; + var style = htmlMode.token(stream, state.htmlState); + if (tagName == "script" && /\btag\b/.test(style) && stream.current() == ">") { + // Script block: mode to change to depends on type attribute + var scriptType = stream.string.slice(Math.max(0, stream.pos - 100), stream.pos).match(/\btype\s*=\s*("[^"]+"|'[^']+'|\S+)[^<]*$/i); + scriptType = scriptType ? scriptType[1] : ""; + if (scriptType && /[\"\']/.test(scriptType.charAt(0))) scriptType = scriptType.slice(1, scriptType.length - 1); + for (var i = 0; i < scriptTypes.length; ++i) { + var tp = scriptTypes[i]; + if (typeof tp.matches == "string" ? scriptType == tp.matches : tp.matches.test(scriptType)) { + if (tp.mode) { + state.token = script; + state.localMode = tp.mode; + state.localState = tp.mode.startState && tp.mode.startState(htmlMode.indent(state.htmlState, "")); + } + break; + } + } + } else if (tagName == "style" && /\btag\b/.test(style) && stream.current() == ">") { + state.token = css; + state.localMode = cssMode; + state.localState = cssMode.startState(htmlMode.indent(state.htmlState, "")); + } + return style; + } + function maybeBackup(stream, pat, style) { + var cur = stream.current(); + var close = cur.search(pat), m; + if (close > -1) stream.backUp(cur.length - close); + else if (m = cur.match(/<\/?$/)) { + stream.backUp(cur.length); + if (!stream.match(pat, false)) stream.match(cur[0]); + } + return style; + } + function script(stream, state) { + if (stream.match(/^<\/\s*script\s*>/i, false)) { + state.token = html; + state.localState = state.localMode = null; + return html(stream, state); + } + return maybeBackup(stream, /<\/\s*script\s*>/, + state.localMode.token(stream, state.localState)); + } + function css(stream, state) { + if (stream.match(/^<\/\s*style\s*>/i, false)) { + state.token = html; + state.localState = state.localMode = null; + return html(stream, state); + } + return maybeBackup(stream, /<\/\s*style\s*>/, + cssMode.token(stream, state.localState)); + } + + return { + startState: function() { + var state = htmlMode.startState(); + return {token: html, localMode: null, localState: null, htmlState: state}; + }, + + copyState: function(state) { + if (state.localState) + var local = CodeMirror.copyState(state.localMode, state.localState); + return {token: state.token, localMode: state.localMode, localState: local, + htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; + }, + + token: function(stream, state) { + return state.token(stream, state); + }, + + indent: function(state, textAfter) { + if (!state.localMode || /^\s*<\//.test(textAfter)) + return htmlMode.indent(state.htmlState, textAfter); + else if (state.localMode.indent) + return state.localMode.indent(state.localState, textAfter); + else + return CodeMirror.Pass; + }, + + electricChars: "/{}:", + + innerMode: function(state) { + return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode}; + } + }; +}, "xml", "javascript", "css"); + +CodeMirror.defineMIME("text/html", "htmlmixed"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/htmlmixed/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/htmlmixed/index.html new file mode 100644 index 0000000..c56559e --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/htmlmixed/index.html @@ -0,0 +1,73 @@ + + + + + CodeMirror: HTML mixed mode + + + + + + + + + + + +

              CodeMirror: HTML mixed mode

              +
              + + +

              The HTML mixed mode depends on the XML, JavaScript, and CSS modes.

              + +

              It takes an optional mode configuration + option, scriptTypes, which can be used to add custom + behavior for specific <script type="..."> tags. If + given, it should hold an array of {matches, mode} + objects, where matches is a string or regexp that + matches the script type, and mode is + either null, for script types that should stay in + HTML mode, or a mode + spec corresponding to the mode that should be used for the + script.

              + +

              MIME types defined: text/html + (redefined, only takes effect if you load this parser after the + XML parser).

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/http/http.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/http/http.js new file mode 100644 index 0000000..5a51636 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/http/http.js @@ -0,0 +1,98 @@ +CodeMirror.defineMode("http", function() { + function failFirstLine(stream, state) { + stream.skipToEnd(); + state.cur = header; + return "error"; + } + + function start(stream, state) { + if (stream.match(/^HTTP\/\d\.\d/)) { + state.cur = responseStatusCode; + return "keyword"; + } else if (stream.match(/^[A-Z]+/) && /[ \t]/.test(stream.peek())) { + state.cur = requestPath; + return "keyword"; + } else { + return failFirstLine(stream, state); + } + } + + function responseStatusCode(stream, state) { + var code = stream.match(/^\d+/); + if (!code) return failFirstLine(stream, state); + + state.cur = responseStatusText; + var status = Number(code[0]); + if (status >= 100 && status < 200) { + return "positive informational"; + } else if (status >= 200 && status < 300) { + return "positive success"; + } else if (status >= 300 && status < 400) { + return "positive redirect"; + } else if (status >= 400 && status < 500) { + return "negative client-error"; + } else if (status >= 500 && status < 600) { + return "negative server-error"; + } else { + return "error"; + } + } + + function responseStatusText(stream, state) { + stream.skipToEnd(); + state.cur = header; + return null; + } + + function requestPath(stream, state) { + stream.eatWhile(/\S/); + state.cur = requestProtocol; + return "string-2"; + } + + function requestProtocol(stream, state) { + if (stream.match(/^HTTP\/\d\.\d$/)) { + state.cur = header; + return "keyword"; + } else { + return failFirstLine(stream, state); + } + } + + function header(stream) { + if (stream.sol() && !stream.eat(/[ \t]/)) { + if (stream.match(/^.*?:/)) { + return "atom"; + } else { + stream.skipToEnd(); + return "error"; + } + } else { + stream.skipToEnd(); + return "string"; + } + } + + function body(stream) { + stream.skipToEnd(); + return null; + } + + return { + token: function(stream, state) { + var cur = state.cur; + if (cur != header && cur != body && stream.eatSpace()) return null; + return cur(stream, state); + }, + + blankLine: function(state) { + state.cur = body; + }, + + startState: function() { + return {cur: start}; + } + }; +}); + +CodeMirror.defineMIME("message/http", "http"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/http/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/http/index.html new file mode 100644 index 0000000..124eb84 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/http/index.html @@ -0,0 +1,32 @@ + + + + + CodeMirror: HTTP mode + + + + + + + +

              CodeMirror: HTTP mode

              + +
              + + + +

              MIME types defined: message/http.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/jade/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/jade/index.html new file mode 100644 index 0000000..0e68ba8 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/jade/index.html @@ -0,0 +1,54 @@ + + + + + CodeMirror: Jade Templating Mode + + + + + + + +

              CodeMirror: Jade Templating Mode

              +
              + +

              The Jade Templating Mode

              +

              Created by Drew Bratcher. Managed as part of an Adobe Brackets extension at https://github.com/dbratcher/brackets-jade.

              +

              MIME type defined: text/x-jade.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/jade/jade.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/jade/jade.js new file mode 100644 index 0000000..61abb27 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/jade/jade.js @@ -0,0 +1,90 @@ +CodeMirror.defineMode("jade", function () { + var symbol_regex1 = /^(?:~|!|%|\^|\*|\+|=|\\|:|;|,|\/|\?|&|<|>|\|)/; + var open_paren_regex = /^(\(|\[)/; + var close_paren_regex = /^(\)|\])/; + var keyword_regex1 = /^(if|else|return|var|function|include|doctype|each)/; + var keyword_regex2 = /^(#|{|}|\.)/; + var keyword_regex3 = /^(in)/; + var html_regex1 = /^(html|head|title|meta|link|script|body|br|div|input|span|a|img)/; + var html_regex2 = /^(h1|h2|h3|h4|h5|p|strong|em)/; + return { + startState: function () { + return { + inString: false, + stringType: "", + beforeTag: true, + justMatchedKeyword: false, + afterParen: false + }; + }, + token: function (stream, state) { + //check for state changes + if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) { + state.stringType = stream.peek(); + stream.next(); // Skip quote + state.inString = true; // Update state + } + + //return state + if (state.inString) { + if (stream.skipTo(state.stringType)) { // Quote found on this line + stream.next(); // Skip quote + state.inString = false; // Clear flag + } else { + stream.skipToEnd(); // Rest of line is string + } + state.justMatchedKeyword = false; + return "string"; // Token style + } else if (stream.sol() && stream.eatSpace()) { + if (stream.match(keyword_regex1)) { + state.justMatchedKeyword = true; + stream.eatSpace(); + return "keyword"; + } + if (stream.match(html_regex1) || stream.match(html_regex2)) { + state.justMatchedKeyword = true; + return "variable"; + } + } else if (stream.sol() && stream.match(keyword_regex1)) { + state.justMatchedKeyword = true; + stream.eatSpace(); + return "keyword"; + } else if (stream.sol() && (stream.match(html_regex1) || stream.match(html_regex2))) { + state.justMatchedKeyword = true; + return "variable"; + } else if (stream.eatSpace()) { + state.justMatchedKeyword = false; + if (stream.match(keyword_regex3) && stream.eatSpace()) { + state.justMatchedKeyword = true; + return "keyword"; + } + } else if (stream.match(symbol_regex1)) { + state.justMatchedKeyword = false; + return "atom"; + } else if (stream.match(open_paren_regex)) { + state.afterParen = true; + state.justMatchedKeyword = true; + return "def"; + } else if (stream.match(close_paren_regex)) { + state.afterParen = false; + state.justMatchedKeyword = true; + return "def"; + } else if (stream.match(keyword_regex2)) { + state.justMatchedKeyword = true; + return "keyword"; + } else if (stream.eatSpace()) { + state.justMatchedKeyword = false; + } else { + stream.next(); + if (state.justMatchedKeyword) { + return "property"; + } else if (state.afterParen) { + return "property"; + } + } + return null; + } + }; +}); + +CodeMirror.defineMIME('text/x-jade', 'jade'); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/javascript/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/javascript/index.html new file mode 100644 index 0000000..db063b7 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/javascript/index.html @@ -0,0 +1,94 @@ + + + + + CodeMirror: JavaScript mode + + + + + + + + + + +

              CodeMirror: JavaScript mode

              + +
              + + + +

              + JavaScript mode supports a two configuration + options: +

                +
              • json which will set the mode to expect JSON + data rather than a JavaScript program.
              • +
              • typescript which will activate additional + syntax highlighting and some other things for TypeScript code + (demo).
              • +
              • statementIndent which (given a number) will + determine the amount of indentation to use for statements + continued on a new line.
              • +
              +

              + +

              MIME types defined: text/javascript, application/json, text/typescript, application/typescript.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/javascript/javascript.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/javascript/javascript.js new file mode 100644 index 0000000..0be9b79 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/javascript/javascript.js @@ -0,0 +1,479 @@ +// TODO actually recognize syntax of TypeScript constructs + +CodeMirror.defineMode("javascript", function(config, parserConfig) { + var indentUnit = config.indentUnit; + var statementIndent = parserConfig.statementIndent; + var jsonMode = parserConfig.json; + var isTS = parserConfig.typescript; + + // Tokenizer + + var keywords = function(){ + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); + var operator = kw("operator"), atom = {type: "atom", style: "atom"}; + + var jsKeywords = { + "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, + "return": C, "break": C, "continue": C, "new": C, "delete": C, "throw": C, + "var": kw("var"), "const": kw("var"), "let": kw("var"), + "function": kw("function"), "catch": kw("catch"), + "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), + "in": operator, "typeof": operator, "instanceof": operator, + "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, + "this": kw("this") + }; + + // Extend the 'normal' keywords with the TypeScript language extensions + if (isTS) { + var type = {type: "variable", style: "variable-3"}; + var tsKeywords = { + // object-like things + "interface": kw("interface"), + "class": kw("class"), + "extends": kw("extends"), + "constructor": kw("constructor"), + + // scope modifiers + "public": kw("public"), + "private": kw("private"), + "protected": kw("protected"), + "static": kw("static"), + + "super": kw("super"), + + // types + "string": type, "number": type, "bool": type, "any": type + }; + + for (var attr in tsKeywords) { + jsKeywords[attr] = tsKeywords[attr]; + } + } + + return jsKeywords; + }(); + + var isOperatorChar = /[+\-*&%=<>!?|~^]/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + function nextUntilUnescaped(stream, end) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (next == end && !escaped) + return false; + escaped = !escaped && next == "\\"; + } + return escaped; + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; content = cont; + return style; + } + + function jsTokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") + return chain(stream, state, jsTokenString(ch)); + else if (/[\[\]{}\(\),;\:\.]/.test(ch)) + return ret(ch); + else if (ch == "0" && stream.eat(/x/i)) { + stream.eatWhile(/[\da-f]/i); + return ret("number", "number"); + } + else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) { + stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); + return ret("number", "number"); + } + else if (ch == "/") { + if (stream.eat("*")) { + return chain(stream, state, jsTokenComment); + } + else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } + else if (state.lastType == "operator" || state.lastType == "keyword c" || + /^[\[{}\(,;:]$/.test(state.lastType)) { + nextUntilUnescaped(stream, "/"); + stream.eatWhile(/[gimy]/); // 'y' is "sticky" option in Mozilla + return ret("regexp", "string-2"); + } + else { + stream.eatWhile(isOperatorChar); + return ret("operator", null, stream.current()); + } + } + else if (ch == "#") { + stream.skipToEnd(); + return ret("error", "error"); + } + else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return ret("operator", null, stream.current()); + } + else { + stream.eatWhile(/[\w\$_]/); + var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; + return (known && state.lastType != ".") ? ret(known.type, known.style, word) : + ret("variable", "variable", word); + } + } + + function jsTokenString(quote) { + return function(stream, state) { + if (!nextUntilUnescaped(stream, quote)) + state.tokenize = jsTokenBase; + return ret("string", "string"); + }; + } + + function jsTokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = jsTokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + // Parser + + var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true}; + + function JSLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + + function inScope(state, varname) { + for (var v = state.localVars; v; v = v.next) + if (v.name == varname) return true; + } + + function parseJS(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; + + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = true; + + while(true) { + var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; + if (combinator(type, content)) { + while(cc.length && cc[cc.length - 1].lex) + cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + return style; + } + } + } + + // Combinator utils + + var cx = {state: null, column: null, marked: null, cc: null}; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function register(varname) { + function inList(list) { + for (var v = list; v; v = v.next) + if (v.name == varname) return true; + return false; + } + var state = cx.state; + if (state.context) { + cx.marked = "def"; + if (inList(state.localVars)) return; + state.localVars = {name: varname, next: state.localVars}; + } else { + if (inList(state.globalVars)) return; + state.globalVars = {name: varname, next: state.globalVars}; + } + } + + // Combinators + + var defaultVars = {name: "this", next: {name: "arguments"}}; + function pushcontext() { + cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; + cx.state.localVars = defaultVars; + } + function popcontext() { + cx.state.localVars = cx.state.context.vars; + cx.state.context = cx.state.context.prev; + } + function pushlex(type, info) { + var result = function() { + var state = cx.state, indent = state.indented; + if (state.lexical.type == "stat") indent = state.lexical.indented; + state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") + state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + + function expect(wanted) { + return function(type) { + if (type == wanted) return cont(); + else if (wanted == ";") return pass(); + else return cont(arguments.callee); + }; + } + + function statement(type) { + if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "{") return cont(pushlex("}"), block, poplex); + if (type == ";") return cont(); + if (type == "if") return cont(pushlex("form"), expression, statement, poplex, maybeelse); + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"), + poplex, statement, poplex); + if (type == "variable") return cont(pushlex("stat"), maybelabel); + if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), + block, poplex, poplex); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), + statement, poplex, popcontext); + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function expression(type) { + return expressionInner(type, false); + } + function expressionNoComma(type) { + return expressionInner(type, true); + } + function expressionInner(type, noComma) { + var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; + if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); + if (type == "function") return cont(functiondef); + if (type == "keyword c") return cont(noComma ? maybeexpressionNoComma : maybeexpression); + if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); + if (type == "operator") return cont(noComma ? expressionNoComma : expression); + if (type == "[") return cont(pushlex("]"), commasep(expressionNoComma, "]"), poplex, maybeop); + if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeop); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + function maybeexpressionNoComma(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expressionNoComma); + } + + function maybeoperatorComma(type, value) { + if (type == ",") return cont(expression); + return maybeoperatorNoComma(type, value, false); + } + function maybeoperatorNoComma(type, value, noComma) { + var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; + var expr = noComma == false ? expression : expressionNoComma; + if (type == "operator") { + if (/\+\+|--/.test(value)) return cont(me); + if (value == "?") return cont(expression, expect(":"), expr); + return cont(expr); + } + if (type == ";") return; + if (type == "(") return cont(pushlex(")", "call"), commasep(expressionNoComma, ")"), poplex, me); + if (type == ".") return cont(property, me); + if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); + } + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperatorComma, expect(";"), poplex); + } + function property(type) { + if (type == "variable") {cx.marked = "property"; return cont();} + } + function objprop(type, value) { + if (type == "variable") { + cx.marked = "property"; + if (value == "get" || value == "set") return cont(getterSetter); + } else if (type == "number" || type == "string") { + cx.marked = type + " property"; + } + if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expressionNoComma); + } + function getterSetter(type) { + if (type == ":") return cont(expression); + if (type != "variable") return cont(expect(":"), expression); + cx.marked = "property"; + return cont(functiondef); + } + function commasep(what, end) { + function proceed(type) { + if (type == ",") { + var lex = cx.state.lexical; + if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; + return cont(what, proceed); + } + if (type == end) return cont(); + return cont(expect(end)); + } + return function(type) { + if (type == end) return cont(); + else return pass(what, proceed); + }; + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function maybetype(type) { + if (type == ":") return cont(typedef); + return pass(); + } + function typedef(type) { + if (type == "variable"){cx.marked = "variable-3"; return cont();} + return pass(); + } + function vardef1(type, value) { + if (type == "variable") { + register(value); + return isTS ? cont(maybetype, vardef2) : cont(vardef2); + } + return pass(); + } + function vardef2(type, value) { + if (value == "=") return cont(expressionNoComma, vardef2); + if (type == ",") return cont(vardef1); + } + function maybeelse(type, value) { + if (type == "keyword b" && value == "else") return cont(pushlex("form"), statement, poplex); + } + function forspec1(type) { + if (type == "var") return cont(vardef1, expect(";"), forspec2); + if (type == ";") return cont(forspec2); + if (type == "variable") return cont(formaybein); + return pass(expression, expect(";"), forspec2); + } + function formaybein(_type, value) { + if (value == "in") return cont(expression); + return cont(maybeoperatorComma, forspec2); + } + function forspec2(type, value) { + if (type == ";") return cont(forspec3); + if (value == "in") return cont(expression); + return pass(expression, expect(";"), forspec3); + } + function forspec3(type) { + if (type != ")") cont(expression); + } + function functiondef(type, value) { + if (type == "variable") {register(value); return cont(functiondef);} + if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, statement, popcontext); + } + function funarg(type, value) { + if (type == "variable") {register(value); return isTS ? cont(maybetype) : cont();} + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: jsTokenBase, + lastType: null, + cc: [], + lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + globalVars: parserConfig.globalVars, + context: parserConfig.localVars && {vars: parserConfig.localVars}, + indented: 0 + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = false; + state.indented = stream.indentation(); + } + if (state.tokenize != jsTokenComment && stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; + return parseJS(state, style, type, content, stream); + }, + + indent: function(state, textAfter) { + if (state.tokenize == jsTokenComment) return CodeMirror.Pass; + if (state.tokenize != jsTokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; + // Kludge to prevent 'maybelse' from blocking lexical scope pops + for (var i = state.cc.length - 1; i >= 0; --i) { + var c = state.cc[i]; + if (c == poplex) lexical = lexical.prev; + else if (c != maybeelse || /^else\b/.test(textAfter)) break; + } + if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; + if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") + lexical = lexical.prev; + var type = lexical.type, closing = firstChar == type; + + if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? 4 : 0); + else if (type == "form" && firstChar == "{") return lexical.indented; + else if (type == "form") return lexical.indented + indentUnit; + else if (type == "stat") + return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? statementIndent || indentUnit : 0); + else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) + return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); + else if (lexical.align) return lexical.column + (closing ? 0 : 1); + else return lexical.indented + (closing ? 0 : indentUnit); + }, + + electricChars: ":{}", + blockCommentStart: jsonMode ? null : "/*", + blockCommentEnd: jsonMode ? null : "*/", + lineComment: jsonMode ? null : "//", + fold: "brace", + + helperType: jsonMode ? "json" : "javascript", + jsonMode: jsonMode + }; +}); + +CodeMirror.defineMIME("text/javascript", "javascript"); +CodeMirror.defineMIME("text/ecmascript", "javascript"); +CodeMirror.defineMIME("application/javascript", "javascript"); +CodeMirror.defineMIME("application/ecmascript", "javascript"); +CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); +CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); +CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); +CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/javascript/test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/javascript/test.js new file mode 100644 index 0000000..a2af527 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/javascript/test.js @@ -0,0 +1,10 @@ +(function() { + var mode = CodeMirror.getMode({indentUnit: 2}, "javascript"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("locals", + "[keyword function] [variable foo]([def a], [def b]) { [keyword var] [def c] = [number 10]; [keyword return] [variable-2 a] + [variable-2 c] + [variable d]; }"); + + MT("comma-and-binop", + "[keyword function](){ [keyword var] [def x] = [number 1] + [number 2], [def y]; }"); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/javascript/typescript.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/javascript/typescript.html new file mode 100644 index 0000000..58315e7 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/javascript/typescript.html @@ -0,0 +1,48 @@ + + + + + CodeMirror: TypeScript mode + + + + + + + +

              CodeMirror: TypeScript mode

              + +
              + + + +

              This is a specialization of the JavaScript mode.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/jinja2/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/jinja2/index.html new file mode 100644 index 0000000..7cd1da2 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/jinja2/index.html @@ -0,0 +1,38 @@ + + + + + CodeMirror: Jinja2 mode + + + + + + + +

              CodeMirror: Jinja2 mode

              +
              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/jinja2/jinja2.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/jinja2/jinja2.js new file mode 100644 index 0000000..16b06c4 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/jinja2/jinja2.js @@ -0,0 +1,42 @@ +CodeMirror.defineMode("jinja2", function() { + var keywords = ["block", "endblock", "for", "endfor", "in", "true", "false", + "loop", "none", "self", "super", "if", "as", "not", "and", + "else", "import", "with", "without", "context"]; + keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b"); + + function tokenBase (stream, state) { + var ch = stream.next(); + if (ch == "{") { + if (ch = stream.eat(/\{|%|#/)) { + stream.eat("-"); + state.tokenize = inTag(ch); + return "tag"; + } + } + } + function inTag (close) { + if (close == "{") { + close = "}"; + } + return function (stream, state) { + var ch = stream.next(); + if ((ch == close || (ch == "-" && stream.eat(close))) + && stream.eat("}")) { + state.tokenize = tokenBase; + return "tag"; + } + if (stream.match(keywords)) { + return "keyword"; + } + return close == "#" ? "comment" : "string"; + }; + } + return { + startState: function () { + return {tokenize: tokenBase}; + }, + token: function (stream, state) { + return state.tokenize(stream, state); + } + }; +}); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/less/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/less/index.html new file mode 100644 index 0000000..78c1e53 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/less/index.html @@ -0,0 +1,741 @@ + + + + + CodeMirror: LESS mode + + + + + + + + + +

              CodeMirror: LESS mode

              +
              + + +

              MIME types defined: text/x-less, text/css (if not previously defined).

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/less/less.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/less/less.js new file mode 100644 index 0000000..09f510e --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/less/less.js @@ -0,0 +1,258 @@ +/* + LESS mode - http://www.lesscss.org/ + Ported to CodeMirror by Peter Kroon + Report bugs/issues here: https://github.com/marijnh/CodeMirror/issues GitHub: @peterkroon +*/ + +CodeMirror.defineMode("less", function(config) { + var indentUnit = config.indentUnit, type; + function ret(style, tp) {type = tp; return style;} + + var selectors = /(^\:root$|^\:nth\-child$|^\:nth\-last\-child$|^\:nth\-of\-type$|^\:nth\-last\-of\-type$|^\:first\-child$|^\:last\-child$|^\:first\-of\-type$|^\:last\-of\-type$|^\:only\-child$|^\:only\-of\-type$|^\:empty$|^\:link|^\:visited$|^\:active$|^\:hover$|^\:focus$|^\:target$|^\:lang$|^\:enabled^\:disabled$|^\:checked$|^\:first\-line$|^\:first\-letter$|^\:before$|^\:after$|^\:not$|^\:required$|^\:invalid$)/; + + function tokenBase(stream, state) { + var ch = stream.next(); + + if (ch == "@") {stream.eatWhile(/[\w\-]/); return ret("meta", stream.current());} + else if (ch == "/" && stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + else if (ch == "<" && stream.eat("!")) { + state.tokenize = tokenSGMLComment; + return tokenSGMLComment(stream, state); + } + else if (ch == "=") ret(null, "compare"); + else if (ch == "|" && stream.eat("=")) return ret(null, "compare"); + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + else if (ch == "/") { // e.g.: .png will not be parsed as a class + if(stream.eat("/")){ + state.tokenize = tokenSComment; + return tokenSComment(stream, state); + }else{ + if(type == "string" || type == "(")return ret("string", "string"); + if(state.stack[state.stack.length-1] != undefined)return ret(null, ch); + stream.eatWhile(/[\a-zA-Z0-9\-_.\s]/); + if( /\/|\)|#/.test(stream.peek() || (stream.eatSpace() && stream.peek() == ")")) || stream.eol() )return ret("string", "string"); // let url(/images/logo.png) without quotes return as string + } + } + else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } + else if (/[,+<>*\/]/.test(ch)) { + if(stream.peek() == "=" || type == "a")return ret("string", "string"); + return ret(null, "select-op"); + } + else if (/[;{}:\[\]()~\|]/.test(ch)) { + if(ch == ":"){ + stream.eatWhile(/[a-z\\\-]/); + if( selectors.test(stream.current()) ){ + return ret("tag", "tag"); + }else if(stream.peek() == ":"){//::-webkit-search-decoration + stream.next(); + stream.eatWhile(/[a-z\\\-]/); + if(stream.current().match(/\:\:\-(o|ms|moz|webkit)\-/))return ret("string", "string"); + if( selectors.test(stream.current().substring(1)) )return ret("tag", "tag"); + return ret(null, ch); + }else{ + return ret(null, ch); + } + }else if(ch == "~"){ + if(type == "r")return ret("string", "string"); + }else{ + return ret(null, ch); + } + } + else if (ch == ".") { + if(type == "(" || type == "string")return ret("string", "string"); // allow url(../image.png) + stream.eatWhile(/[\a-zA-Z0-9\-_]/); + if(stream.peek() == " ")stream.eatSpace(); + if(stream.peek() == ")")return ret("number", "unit");//rgba(0,0,0,.25); + return ret("tag", "tag"); + } + else if (ch == "#") { + //we don't eat white-space, we want the hex color and or id only + stream.eatWhile(/[A-Za-z0-9]/); + //check if there is a proper hex color length e.g. #eee || #eeeEEE + if(stream.current().length == 4 || stream.current().length == 7){ + if(stream.current().match(/[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}/,false) != null){//is there a valid hex color value present in the current stream + //when not a valid hex value, parse as id + if(stream.current().substring(1) != stream.current().match(/[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}/,false))return ret("atom", "tag"); + //eat white-space + stream.eatSpace(); + //when hex value declaration doesn't end with [;,] but is does with a slash/cc comment treat it as an id, just like the other hex values that don't end with[;,] + if( /[\/<>.(){!$%^&*_\-\\?=+\|#'~`]/.test(stream.peek()) )return ret("atom", "tag"); + //#time { color: #aaa } + else if(stream.peek() == "}" )return ret("number", "unit"); + //we have a valid hex color value, parse as id whenever an element/class is defined after the hex(id) value e.g. #eee aaa || #eee .aaa + else if( /[a-zA-Z\\]/.test(stream.peek()) )return ret("atom", "tag"); + //when a hex value is on the end of a line, parse as id + else if(stream.eol())return ret("atom", "tag"); + //default + else return ret("number", "unit"); + }else{//when not a valid hexvalue in the current stream e.g. #footer + stream.eatWhile(/[\w\\\-]/); + return ret("atom", "tag"); + } + }else{//when not a valid hexvalue length + stream.eatWhile(/[\w\\\-]/); + return ret("atom", "tag"); + } + } + else if (ch == "&") { + stream.eatWhile(/[\w\-]/); + return ret(null, ch); + } + else { + stream.eatWhile(/[\w\\\-_%.{]/); + if(type == "string"){ + return ret("string", "string"); + }else if(stream.current().match(/(^http$|^https$)/) != null){ + stream.eatWhile(/[\w\\\-_%.{:\/]/); + return ret("string", "string"); + }else if(stream.peek() == "<" || stream.peek() == ">"){ + return ret("tag", "tag"); + }else if( /\(/.test(stream.peek()) ){ + return ret(null, ch); + }else if (stream.peek() == "/" && state.stack[state.stack.length-1] != undefined){ // url(dir/center/image.png) + return ret("string", "string"); + }else if( stream.current().match(/\-\d|\-.\d/) ){ // match e.g.: -5px -0.4 etc... only colorize the minus sign + //commment out these 2 comment if you want the minus sign to be parsed as null -500px + //stream.backUp(stream.current().length-1); + //return ret(null, ch); //console.log( stream.current() ); + return ret("number", "unit"); + }else if( /\/|[\s\)]/.test(stream.peek() || stream.eol() || (stream.eatSpace() && stream.peek() == "/")) && stream.current().indexOf(".") !== -1){ + if(stream.current().substring(stream.current().length-1,stream.current().length) == "{"){ + stream.backUp(1); + return ret("tag", "tag"); + }//end if + stream.eatSpace(); + if( /[{<>.a-zA-Z\/]/.test(stream.peek()) || stream.eol() )return ret("tag", "tag"); // e.g. button.icon-plus + return ret("string", "string"); // let url(/images/logo.png) without quotes return as string + }else if( stream.eol() || stream.peek() == "[" || stream.peek() == "#" || type == "tag" ){ + if(stream.current().substring(stream.current().length-1,stream.current().length) == "{")stream.backUp(1); + return ret("tag", "tag"); + }else if(type == "compare" || type == "a" || type == "("){ + return ret("string", "string"); + }else if(type == "|" || stream.current() == "-" || type == "["){ + return ret(null, ch); + }else if(stream.peek() == ":") { + stream.next(); + var t_v = stream.peek() == ":" ? true : false; + if(!t_v){ + var old_pos = stream.pos; + var sc = stream.current().length; + stream.eatWhile(/[a-z\\\-]/); + var new_pos = stream.pos; + if(stream.current().substring(sc-1).match(selectors) != null){ + stream.backUp(new_pos-(old_pos-1)); + return ret("tag", "tag"); + } else stream.backUp(new_pos-(old_pos-1)); + }else{ + stream.backUp(1); + } + if(t_v)return ret("tag", "tag"); else return ret("variable", "variable"); + }else{ + return ret("variable", "variable"); + } + } + } + + function tokenSComment(stream, state) { // SComment = Slash comment + stream.skipToEnd(); + state.tokenize = tokenBase; + return ret("comment", "comment"); + } + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + function tokenSGMLComment(stream, state) { + var dashes = 0, ch; + while ((ch = stream.next()) != null) { + if (dashes >= 2 && ch == ">") { + state.tokenize = tokenBase; + break; + } + dashes = (ch == "-") ? dashes + 1 : 0; + } + return ret("comment", "comment"); + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) + break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + + return { + startState: function(base) { + return {tokenize: tokenBase, + baseIndent: base || 0, + stack: []}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + + var context = state.stack[state.stack.length-1]; + if (type == "hash" && context == "rule") style = "atom"; + else if (style == "variable") { + if (context == "rule") style = null; //"tag" + else if (!context || context == "@media{") { + style = stream.current() == "when" ? "variable" : + /[\s,|\s\)|\s]/.test(stream.peek()) ? "tag" : type; + } + } + + if (context == "rule" && /^[\{\};]$/.test(type)) + state.stack.pop(); + if (type == "{") { + if (context == "@media") state.stack[state.stack.length-1] = "@media{"; + else state.stack.push("{"); + } + else if (type == "}") state.stack.pop(); + else if (type == "@media") state.stack.push("@media"); + else if (context == "{" && type != "comment") state.stack.push("rule"); + return style; + }, + + indent: function(state, textAfter) { + var n = state.stack.length; + if (/^\}/.test(textAfter)) + n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1; + return state.baseIndent + n * indentUnit; + }, + + electricChars: "}" + }; +}); + +CodeMirror.defineMIME("text/x-less", "less"); +if (!CodeMirror.mimeModes.hasOwnProperty("text/css")) + CodeMirror.defineMIME("text/css", "less"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/livescript/LICENSE b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/livescript/LICENSE new file mode 100644 index 0000000..a675c40 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/livescript/LICENSE @@ -0,0 +1,23 @@ +The MIT License + +Copyright (c) 2013 Kenneth Bentley +Modified from the CoffeeScript CodeMirror mode, Copyright (c) 2011 Jeff Pickhardt +Modified from the Python CodeMirror mode, Copyright (c) 2010 Timothy Farrell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/livescript/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/livescript/index.html new file mode 100644 index 0000000..3054e35 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/livescript/index.html @@ -0,0 +1,446 @@ + + + + CodeMirror: LiveScript mode + + + + + + + + +

              CodeMirror: LiveScript mode

              +
              + + +

              MIME types defined: text/x-livescript.

              + +

              The LiveScript mode was written by Kenneth Bentley (license).

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/livescript/livescript.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/livescript/livescript.js new file mode 100644 index 0000000..c000324 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/livescript/livescript.js @@ -0,0 +1,267 @@ +/** + * Link to the project's GitHub page: + * https://github.com/duralog/CodeMirror + */ +(function() { + CodeMirror.defineMode('livescript', function(){ + var tokenBase, external; + tokenBase = function(stream, state){ + var next_rule, nr, i$, len$, r, m; + if (next_rule = state.next || 'start') { + state.next = state.next; + if (Array.isArray(nr = Rules[next_rule])) { + for (i$ = 0, len$ = nr.length; i$ < len$; ++i$) { + r = nr[i$]; + if (r.regex && (m = stream.match(r.regex))) { + state.next = r.next; + return r.token; + } + } + stream.next(); + return 'error'; + } + if (stream.match(r = Rules[next_rule])) { + if (r.regex && stream.match(r.regex)) { + state.next = r.next; + return r.token; + } else { + stream.next(); + return 'error'; + } + } + } + stream.next(); + return 'error'; + }; + external = { + startState: function(){ + return { + next: 'start', + lastToken: null + }; + }, + token: function(stream, state){ + var style; + style = tokenBase(stream, state); + state.lastToken = { + style: style, + indent: stream.indentation(), + content: stream.current() + }; + return style.replace(/\./g, ' '); + }, + indent: function(state){ + var indentation; + indentation = state.lastToken.indent; + if (state.lastToken.content.match(indenter)) { + indentation += 2; + } + return indentation; + } + }; + return external; + }); + + var identifier = '(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*'; + var indenter = RegExp('(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*' + identifier + ')?))\\s*$'); + var keywordend = '(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))'; + var stringfill = { + token: 'string', + regex: '.+' + }; + var Rules = { + start: [ + { + token: 'comment.doc', + regex: '/\\*', + next: 'comment' + }, { + token: 'comment', + regex: '#.*' + }, { + token: 'keyword', + regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend + }, { + token: 'constant.language', + regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend + }, { + token: 'invalid.illegal', + regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend + }, { + token: 'language.support.class', + regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend + }, { + token: 'language.support.function', + regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend + }, { + token: 'variable.language', + regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend + }, { + token: 'identifier', + regex: identifier + '\\s*:(?![:=])' + }, { + token: 'variable', + regex: identifier + }, { + token: 'keyword.operator', + regex: '(?:\\.{3}|\\s+\\?)' + }, { + token: 'keyword.variable', + regex: '(?:@+|::|\\.\\.)', + next: 'key' + }, { + token: 'keyword.operator', + regex: '\\.\\s*', + next: 'key' + }, { + token: 'string', + regex: '\\\\\\S[^\\s,;)}\\]]*' + }, { + token: 'string.doc', + regex: '\'\'\'', + next: 'qdoc' + }, { + token: 'string.doc', + regex: '"""', + next: 'qqdoc' + }, { + token: 'string', + regex: '\'', + next: 'qstring' + }, { + token: 'string', + regex: '"', + next: 'qqstring' + }, { + token: 'string', + regex: '`', + next: 'js' + }, { + token: 'string', + regex: '<\\[', + next: 'words' + }, { + token: 'string.regex', + regex: '//', + next: 'heregex' + }, { + token: 'string.regex', + regex: '\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}', + next: 'key' + }, { + token: 'constant.numeric', + regex: '(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)' + }, { + token: 'lparen', + regex: '[({[]' + }, { + token: 'rparen', + regex: '[)}\\]]', + next: 'key' + }, { + token: 'keyword.operator', + regex: '\\S+' + }, { + token: 'text', + regex: '\\s+' + } + ], + heregex: [ + { + token: 'string.regex', + regex: '.*?//[gimy$?]{0,4}', + next: 'start' + }, { + token: 'string.regex', + regex: '\\s*#{' + }, { + token: 'comment.regex', + regex: '\\s+(?:#.*)?' + }, { + token: 'string.regex', + regex: '\\S+' + } + ], + key: [ + { + token: 'keyword.operator', + regex: '[.?@!]+' + }, { + token: 'identifier', + regex: identifier, + next: 'start' + }, { + token: 'text', + regex: '.', + next: 'start' + } + ], + comment: [ + { + token: 'comment.doc', + regex: '.*?\\*/', + next: 'start' + }, { + token: 'comment.doc', + regex: '.+' + } + ], + qdoc: [ + { + token: 'string', + regex: ".*?'''", + next: 'key' + }, stringfill + ], + qqdoc: [ + { + token: 'string', + regex: '.*?"""', + next: 'key' + }, stringfill + ], + qstring: [ + { + token: 'string', + regex: '[^\\\\\']*(?:\\\\.[^\\\\\']*)*\'', + next: 'key' + }, stringfill + ], + qqstring: [ + { + token: 'string', + regex: '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"', + next: 'key' + }, stringfill + ], + js: [ + { + token: 'string', + regex: '[^\\\\`]*(?:\\\\.[^\\\\`]*)*`', + next: 'key' + }, stringfill + ], + words: [ + { + token: 'string', + regex: '.*?\\]>', + next: 'key' + }, stringfill + ] + }; + for (var idx in Rules) { + var r = Rules[idx]; + if (Array.isArray(r)) { + for (var i = 0, len = r.length; i < len; ++i) { + var rr = r[i]; + if (rr.regex) { + Rules[idx][i].regex = new RegExp('^' + rr.regex); + } + } + } else if (r.regex) { + Rules[idx].regex = new RegExp('^' + r.regex); + } + } +})(); + +CodeMirror.defineMIME('text/x-livescript', 'livescript'); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/livescript/livescript.ls b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/livescript/livescript.ls new file mode 100644 index 0000000..0652423 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/livescript/livescript.ls @@ -0,0 +1,266 @@ +/** + * Link to the project's GitHub page: + * https://github.com/duralog/CodeMirror + */ +CodeMirror.defineMode 'livescript', (conf) -> + tokenBase = (stream, state) -> + #indent = + if next_rule = state.next or \start + state.next = state.next + if Array.isArray nr = Rules[next_rule] + for r in nr + if r.regex and m = stream.match r.regex + state.next = r.next + return r.token + stream.next! + return \error + if stream.match r = Rules[next_rule] + if r.regex and stream.match r.regex + state.next = r.next + return r.token + else + stream.next! + return \error + stream.next! + return 'error' + external = { + startState: (basecolumn) -> + { + next: \start + lastToken: null + } + token: (stream, state) -> + style = tokenBase stream, state #tokenLexer stream, state + state.lastToken = { + style: style + indent: stream.indentation! + content: stream.current! + } + style.replace /\./g, ' ' + indent: (state, textAfter) -> + # XXX this won't work with backcalls + indentation = state.lastToken.indent + if state.lastToken.content.match indenter then indentation += 2 + return indentation + } + external + +### Highlight Rules +# taken from mode-ls.ls + +indenter = // (? + : [({[=:] + | [-~]> + | \b (?: e(?:lse|xport) | d(?:o|efault) | t(?:ry|hen) | finally | + import (?:\s* all)? | const | var | + let | new | catch (?:\s* #identifier)? ) + ) \s* $ // + +identifier = /(?![\d\s])[$\w\xAA-\uFFDC](?:(?!\s)[$\w\xAA-\uFFDC]|-[A-Za-z])*/$ +keywordend = /(?![$\w]|-[A-Za-z]|\s*:(?![:=]))/$ +stringfill = token: \string, regex: '.+' + +Rules = + start: + * token: \comment.doc + regex: '/\\*' + next : \comment + + * token: \comment + regex: '#.*' + + * token: \keyword + regex: //(? + :t(?:h(?:is|row|en)|ry|ypeof!?) + |c(?:on(?:tinue|st)|a(?:se|tch)|lass) + |i(?:n(?:stanceof)?|mp(?:ort(?:\s+all)?|lements)|[fs]) + |d(?:e(?:fault|lete|bugger)|o) + |f(?:or(?:\s+own)?|inally|unction) + |s(?:uper|witch) + |e(?:lse|x(?:tends|port)|val) + |a(?:nd|rguments) + |n(?:ew|ot) + |un(?:less|til) + |w(?:hile|ith) + |o[fr]|return|break|let|var|loop + )//$ + keywordend + + * token: \constant.language + regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend + + * token: \invalid.illegal + regex: '(? + :p(?:ackage|r(?:ivate|otected)|ublic) + |i(?:mplements|nterface) + |enum|static|yield + )' + keywordend + + * token: \language.support.class + regex: '(? + :R(?:e(?:gExp|ferenceError)|angeError) + |S(?:tring|yntaxError) + |E(?:rror|valError) + |Array|Boolean|Date|Function|Number|Object|TypeError|URIError + )' + keywordend + + * token: \language.support.function + regex: '(? + :is(?:NaN|Finite) + |parse(?:Int|Float) + |Math|JSON + |(?:en|de)codeURI(?:Component)? + )' + keywordend + + * token: \variable.language + regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend + + * token: \identifier + regex: identifier + /\s*:(?![:=])/$ + + * token: \variable + regex: identifier + + * token: \keyword.operator + regex: /(?:\.{3}|\s+\?)/$ + + * token: \keyword.variable + regex: /(?:@+|::|\.\.)/$ + next : \key + + * token: \keyword.operator + regex: /\.\s*/$ + next : \key + + * token: \string + regex: /\\\S[^\s,;)}\]]*/$ + + * token: \string.doc + regex: \''' + next : \qdoc + + * token: \string.doc + regex: \""" + next : \qqdoc + + * token: \string + regex: \' + next : \qstring + + * token: \string + regex: \" + next : \qqstring + + * token: \string + regex: \` + next : \js + + * token: \string + regex: '<\\[' + next : \words + + * token: \string.regex + regex: \// + next : \heregex + + * token: \string.regex + regex: // + /(?: [^ [ / \n \\ ]* + (?: (?: \\. + | \[ [^\]\n\\]* (?:\\.[^\]\n\\]*)* \] + ) [^ [ / \n \\ ]* + )* + )/ [gimy$]{0,4} + //$ + next : \key + + * token: \constant.numeric + regex: '(?:0x[\\da-fA-F][\\da-fA-F_]* + |(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]* + |(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*) + (?:e[+-]?\\d[\\d_]*)?[\\w$]*)' + + * token: \lparen + regex: '[({[]' + + * token: \rparen + regex: '[)}\\]]' + next : \key + + * token: \keyword.operator + regex: \\\S+ + + * token: \text + regex: \\\s+ + + heregex: + * token: \string.regex + regex: '.*?//[gimy$?]{0,4}' + next : \start + * token: \string.regex + regex: '\\s*#{' + * token: \comment.regex + regex: '\\s+(?:#.*)?' + * token: \string.regex + regex: '\\S+' + + key: + * token: \keyword.operator + regex: '[.?@!]+' + * token: \identifier + regex: identifier + next : \start + * token: \text + regex: '.' + next : \start + + comment: + * token: \comment.doc + regex: '.*?\\*/' + next : \start + * token: \comment.doc + regex: '.+' + + qdoc: + token: \string + regex: ".*?'''" + next : \key + stringfill + + qqdoc: + token: \string + regex: '.*?"""' + next : \key + stringfill + + qstring: + token: \string + regex: /[^\\']*(?:\\.[^\\']*)*'/$ + next : \key + stringfill + + qqstring: + token: \string + regex: /[^\\"]*(?:\\.[^\\"]*)*"/$ + next : \key + stringfill + + js: + token: \string + regex: /[^\\`]*(?:\\.[^\\`]*)*`/$ + next : \key + stringfill + + words: + token: \string + regex: '.*?\\]>' + next : \key + stringfill + +# for optimization, precompile the regexps +for idx, r of Rules + if Array.isArray r + for rr, i in r + if rr.regex then Rules[idx][i].regex = new RegExp '^'+rr.regex + else if r.regex then Rules[idx].regex = new RegExp '^'+r.regex + +CodeMirror.defineMIME 'text/x-livescript', 'livescript' diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/lua/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/lua/index.html new file mode 100644 index 0000000..a0a42d9 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/lua/index.html @@ -0,0 +1,74 @@ + + + + + CodeMirror: Lua mode + + + + + + + + + +

              CodeMirror: Lua mode

              +
              + + +

              Loosely based on Franciszek + Wawrzak's CodeMirror + 1 mode. One configuration parameter is + supported, specials, to which you can provide an + array of strings to have those identifiers highlighted with + the lua-special style.

              +

              MIME types defined: text/x-lua.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/lua/lua.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/lua/lua.js new file mode 100644 index 0000000..b8deaa2 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/lua/lua.js @@ -0,0 +1,144 @@ +// LUA mode. Ported to CodeMirror 2 from Franciszek Wawrzak's +// CodeMirror 1 mode. +// highlights keywords, strings, comments (no leveling supported! ("[==[")), tokens, basic indenting + +CodeMirror.defineMode("lua", function(config, parserConfig) { + var indentUnit = config.indentUnit; + + function prefixRE(words) { + return new RegExp("^(?:" + words.join("|") + ")", "i"); + } + function wordRE(words) { + return new RegExp("^(?:" + words.join("|") + ")$", "i"); + } + var specials = wordRE(parserConfig.specials || []); + + // long list of standard functions from lua manual + var builtins = wordRE([ + "_G","_VERSION","assert","collectgarbage","dofile","error","getfenv","getmetatable","ipairs","load", + "loadfile","loadstring","module","next","pairs","pcall","print","rawequal","rawget","rawset","require", + "select","setfenv","setmetatable","tonumber","tostring","type","unpack","xpcall", + + "coroutine.create","coroutine.resume","coroutine.running","coroutine.status","coroutine.wrap","coroutine.yield", + + "debug.debug","debug.getfenv","debug.gethook","debug.getinfo","debug.getlocal","debug.getmetatable", + "debug.getregistry","debug.getupvalue","debug.setfenv","debug.sethook","debug.setlocal","debug.setmetatable", + "debug.setupvalue","debug.traceback", + + "close","flush","lines","read","seek","setvbuf","write", + + "io.close","io.flush","io.input","io.lines","io.open","io.output","io.popen","io.read","io.stderr","io.stdin", + "io.stdout","io.tmpfile","io.type","io.write", + + "math.abs","math.acos","math.asin","math.atan","math.atan2","math.ceil","math.cos","math.cosh","math.deg", + "math.exp","math.floor","math.fmod","math.frexp","math.huge","math.ldexp","math.log","math.log10","math.max", + "math.min","math.modf","math.pi","math.pow","math.rad","math.random","math.randomseed","math.sin","math.sinh", + "math.sqrt","math.tan","math.tanh", + + "os.clock","os.date","os.difftime","os.execute","os.exit","os.getenv","os.remove","os.rename","os.setlocale", + "os.time","os.tmpname", + + "package.cpath","package.loaded","package.loaders","package.loadlib","package.path","package.preload", + "package.seeall", + + "string.byte","string.char","string.dump","string.find","string.format","string.gmatch","string.gsub", + "string.len","string.lower","string.match","string.rep","string.reverse","string.sub","string.upper", + + "table.concat","table.insert","table.maxn","table.remove","table.sort" + ]); + var keywords = wordRE(["and","break","elseif","false","nil","not","or","return", + "true","function", "end", "if", "then", "else", "do", + "while", "repeat", "until", "for", "in", "local" ]); + + var indentTokens = wordRE(["function", "if","repeat","do", "\\(", "{"]); + var dedentTokens = wordRE(["end", "until", "\\)", "}"]); + var dedentPartial = prefixRE(["end", "until", "\\)", "}", "else", "elseif"]); + + function readBracket(stream) { + var level = 0; + while (stream.eat("=")) ++level; + stream.eat("["); + return level; + } + + function normal(stream, state) { + var ch = stream.next(); + if (ch == "-" && stream.eat("-")) { + if (stream.eat("[") && stream.eat("[")) + return (state.cur = bracketed(readBracket(stream), "comment"))(stream, state); + stream.skipToEnd(); + return "comment"; + } + if (ch == "\"" || ch == "'") + return (state.cur = string(ch))(stream, state); + if (ch == "[" && /[\[=]/.test(stream.peek())) + return (state.cur = bracketed(readBracket(stream), "string"))(stream, state); + if (/\d/.test(ch)) { + stream.eatWhile(/[\w.%]/); + return "number"; + } + if (/[\w_]/.test(ch)) { + stream.eatWhile(/[\w\\\-_.]/); + return "variable"; + } + return null; + } + + function bracketed(level, style) { + return function(stream, state) { + var curlev = null, ch; + while ((ch = stream.next()) != null) { + if (curlev == null) {if (ch == "]") curlev = 0;} + else if (ch == "=") ++curlev; + else if (ch == "]" && curlev == level) { state.cur = normal; break; } + else curlev = null; + } + return style; + }; + } + + function string(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) state.cur = normal; + return "string"; + }; + } + + return { + startState: function(basecol) { + return {basecol: basecol || 0, indentDepth: 0, cur: normal}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = state.cur(stream, state); + var word = stream.current(); + if (style == "variable") { + if (keywords.test(word)) style = "keyword"; + else if (builtins.test(word)) style = "builtin"; + else if (specials.test(word)) style = "variable-2"; + } + if ((style != "comment") && (style != "string")){ + if (indentTokens.test(word)) ++state.indentDepth; + else if (dedentTokens.test(word)) --state.indentDepth; + } + return style; + }, + + indent: function(state, textAfter) { + var closing = dedentPartial.test(textAfter); + return state.basecol + indentUnit * (state.indentDepth - (closing ? 1 : 0)); + }, + + lineComment: "--", + blockCommentStart: "--[[", + blockCommentEnd: "]]" + }; +}); + +CodeMirror.defineMIME("text/x-lua", "lua"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/markdown/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/markdown/index.html new file mode 100644 index 0000000..bb785b1 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/markdown/index.html @@ -0,0 +1,349 @@ + + + + + CodeMirror: Markdown mode + + + + + + + + + +

              CodeMirror: Markdown mode

              + + +
              + + + +

              Optionally depends on the XML mode for properly highlighted inline XML blocks.

              + +

              MIME types defined: text/x-markdown.

              + +

              Parsing/Highlighting Tests: normal, verbose.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/markdown/markdown.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/markdown/markdown.js new file mode 100644 index 0000000..bf1750d --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/markdown/markdown.js @@ -0,0 +1,551 @@ +CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) { + + var htmlFound = CodeMirror.modes.hasOwnProperty("xml"); + var htmlMode = CodeMirror.getMode(cmCfg, htmlFound ? {name: "xml", htmlMode: true} : "text/plain"); + var aliases = { + html: "htmlmixed", + js: "javascript", + json: "application/json", + c: "text/x-csrc", + "c++": "text/x-c++src", + java: "text/x-java", + csharp: "text/x-csharp", + "c#": "text/x-csharp", + scala: "text/x-scala" + }; + + var getMode = (function () { + var i, modes = {}, mimes = {}, mime; + + var list = []; + for (var m in CodeMirror.modes) + if (CodeMirror.modes.propertyIsEnumerable(m)) list.push(m); + for (i = 0; i < list.length; i++) { + modes[list[i]] = list[i]; + } + var mimesList = []; + for (var m in CodeMirror.mimeModes) + if (CodeMirror.mimeModes.propertyIsEnumerable(m)) + mimesList.push({mime: m, mode: CodeMirror.mimeModes[m]}); + for (i = 0; i < mimesList.length; i++) { + mime = mimesList[i].mime; + mimes[mime] = mimesList[i].mime; + } + + for (var a in aliases) { + if (aliases[a] in modes || aliases[a] in mimes) + modes[a] = aliases[a]; + } + + return function (lang) { + return modes[lang] ? CodeMirror.getMode(cmCfg, modes[lang]) : null; + }; + }()); + + // Should underscores in words open/close em/strong? + if (modeCfg.underscoresBreakWords === undefined) + modeCfg.underscoresBreakWords = true; + + // Turn on fenced code blocks? ("```" to start/end) + if (modeCfg.fencedCodeBlocks === undefined) modeCfg.fencedCodeBlocks = false; + + // Turn on task lists? ("- [ ] " and "- [x] ") + if (modeCfg.taskLists === undefined) modeCfg.taskLists = false; + + var codeDepth = 0; + + var header = 'header' + , code = 'comment' + , quote1 = 'atom' + , quote2 = 'number' + , list1 = 'variable-2' + , list2 = 'variable-3' + , list3 = 'keyword' + , hr = 'hr' + , image = 'tag' + , linkinline = 'link' + , linkemail = 'link' + , linktext = 'link' + , linkhref = 'string' + , em = 'em' + , strong = 'strong'; + + var hrRE = /^([*\-=_])(?:\s*\1){2,}\s*$/ + , ulRE = /^[*\-+]\s+/ + , olRE = /^[0-9]+\.\s+/ + , taskListRE = /^\[(x| )\](?=\s)/ // Must follow ulRE or olRE + , headerRE = /^(?:\={1,}|-{1,})$/ + , textRE = /^[^!\[\]*_\\<>` "'(]+/; + + function switchInline(stream, state, f) { + state.f = state.inline = f; + return f(stream, state); + } + + function switchBlock(stream, state, f) { + state.f = state.block = f; + return f(stream, state); + } + + + // Blocks + + function blankLine(state) { + // Reset linkTitle state + state.linkTitle = false; + // Reset EM state + state.em = false; + // Reset STRONG state + state.strong = false; + // Reset state.quote + state.quote = 0; + if (!htmlFound && state.f == htmlBlock) { + state.f = inlineNormal; + state.block = blockNormal; + } + // Reset state.trailingSpace + state.trailingSpace = 0; + state.trailingSpaceNewLine = false; + // Mark this line as blank + state.thisLineHasContent = false; + return null; + } + + function blockNormal(stream, state) { + + var prevLineIsList = (state.list !== false); + if (state.list !== false && state.indentationDiff >= 0) { // Continued list + if (state.indentationDiff < 4) { // Only adjust indentation if *not* a code block + state.indentation -= state.indentationDiff; + } + state.list = null; + } else if (state.list !== false && state.indentation > 0) { + state.list = null; + state.listDepth = Math.floor(state.indentation / 4); + } else if (state.list !== false) { // No longer a list + state.list = false; + state.listDepth = 0; + } + + if (state.indentationDiff >= 4) { + state.indentation -= 4; + stream.skipToEnd(); + return code; + } else if (stream.eatSpace()) { + return null; + } else if (stream.peek() === '#' || (state.prevLineHasContent && stream.match(headerRE)) ) { + state.header = true; + } else if (stream.eat('>')) { + state.indentation++; + state.quote = 1; + stream.eatSpace(); + while (stream.eat('>')) { + stream.eatSpace(); + state.quote++; + } + } else if (stream.peek() === '[') { + return switchInline(stream, state, footnoteLink); + } else if (stream.match(hrRE, true)) { + return hr; + } else if ((!state.prevLineHasContent || prevLineIsList) && (stream.match(ulRE, true) || stream.match(olRE, true))) { + state.indentation += 4; + state.list = true; + state.listDepth++; + if (modeCfg.taskLists && stream.match(taskListRE, false)) { + state.taskList = true; + } + } else if (modeCfg.fencedCodeBlocks && stream.match(/^```([\w+#]*)/, true)) { + // try switching mode + state.localMode = getMode(RegExp.$1); + if (state.localMode) state.localState = state.localMode.startState(); + switchBlock(stream, state, local); + return code; + } + + return switchInline(stream, state, state.inline); + } + + function htmlBlock(stream, state) { + var style = htmlMode.token(stream, state.htmlState); + if (htmlFound && style === 'tag' && state.htmlState.type !== 'openTag' && !state.htmlState.context) { + state.f = inlineNormal; + state.block = blockNormal; + } + if (state.md_inside && stream.current().indexOf(">")!=-1) { + state.f = inlineNormal; + state.block = blockNormal; + state.htmlState.context = undefined; + } + return style; + } + + function local(stream, state) { + if (stream.sol() && stream.match(/^```/, true)) { + state.localMode = state.localState = null; + state.f = inlineNormal; + state.block = blockNormal; + return code; + } else if (state.localMode) { + return state.localMode.token(stream, state.localState); + } else { + stream.skipToEnd(); + return code; + } + } + + // Inline + function getType(state) { + var styles = []; + + if (state.taskOpen) { return "meta"; } + if (state.taskClosed) { return "property"; } + + if (state.strong) { styles.push(strong); } + if (state.em) { styles.push(em); } + + if (state.linkText) { styles.push(linktext); } + + if (state.code) { styles.push(code); } + + if (state.header) { styles.push(header); } + if (state.quote) { styles.push(state.quote % 2 ? quote1 : quote2); } + if (state.list !== false) { + var listMod = (state.listDepth - 1) % 3; + if (!listMod) { + styles.push(list1); + } else if (listMod === 1) { + styles.push(list2); + } else { + styles.push(list3); + } + } + + if (state.trailingSpaceNewLine) { + styles.push("trailing-space-new-line"); + } else if (state.trailingSpace) { + styles.push("trailing-space-" + (state.trailingSpace % 2 ? "a" : "b")); + } + + return styles.length ? styles.join(' ') : null; + } + + function handleText(stream, state) { + if (stream.match(textRE, true)) { + return getType(state); + } + return undefined; + } + + function inlineNormal(stream, state) { + var style = state.text(stream, state); + if (typeof style !== 'undefined') + return style; + + if (state.list) { // List marker (*, +, -, 1., etc) + state.list = null; + return getType(state); + } + + if (state.taskList) { + var taskOpen = stream.match(taskListRE, true)[1] !== "x"; + if (taskOpen) state.taskOpen = true; + else state.taskClosed = true; + state.taskList = false; + return getType(state); + } + + state.taskOpen = false; + state.taskClosed = false; + + var ch = stream.next(); + + if (ch === '\\') { + stream.next(); + return getType(state); + } + + // Matches link titles present on next line + if (state.linkTitle) { + state.linkTitle = false; + var matchCh = ch; + if (ch === '(') { + matchCh = ')'; + } + matchCh = (matchCh+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); + var regex = '^\\s*(?:[^' + matchCh + '\\\\]+|\\\\\\\\|\\\\.)' + matchCh; + if (stream.match(new RegExp(regex), true)) { + return linkhref; + } + } + + // If this block is changed, it may need to be updated in GFM mode + if (ch === '`') { + var t = getType(state); + var before = stream.pos; + stream.eatWhile('`'); + var difference = 1 + stream.pos - before; + if (!state.code) { + codeDepth = difference; + state.code = true; + return getType(state); + } else { + if (difference === codeDepth) { // Must be exact + state.code = false; + return t; + } + return getType(state); + } + } else if (state.code) { + return getType(state); + } + + if (ch === '!' && stream.match(/\[[^\]]*\] ?(?:\(|\[)/, false)) { + stream.match(/\[[^\]]*\]/); + state.inline = state.f = linkHref; + return image; + } + + if (ch === '[' && stream.match(/.*\](\(| ?\[)/, false)) { + state.linkText = true; + return getType(state); + } + + if (ch === ']' && state.linkText) { + var type = getType(state); + state.linkText = false; + state.inline = state.f = linkHref; + return type; + } + + if (ch === '<' && stream.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/, false)) { + return switchInline(stream, state, inlineElement(linkinline, '>')); + } + + if (ch === '<' && stream.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/, false)) { + return switchInline(stream, state, inlineElement(linkemail, '>')); + } + + if (ch === '<' && stream.match(/^\w/, false)) { + if (stream.string.indexOf(">")!=-1) { + var atts = stream.string.substring(1,stream.string.indexOf(">")); + if (/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(atts)) { + state.md_inside = true; + } + } + stream.backUp(1); + return switchBlock(stream, state, htmlBlock); + } + + if (ch === '<' && stream.match(/^\/\w*?>/)) { + state.md_inside = false; + return "tag"; + } + + var ignoreUnderscore = false; + if (!modeCfg.underscoresBreakWords) { + if (ch === '_' && stream.peek() !== '_' && stream.match(/(\w)/, false)) { + var prevPos = stream.pos - 2; + if (prevPos >= 0) { + var prevCh = stream.string.charAt(prevPos); + if (prevCh !== '_' && prevCh.match(/(\w)/, false)) { + ignoreUnderscore = true; + } + } + } + } + var t = getType(state); + if (ch === '*' || (ch === '_' && !ignoreUnderscore)) { + if (state.strong === ch && stream.eat(ch)) { // Remove STRONG + state.strong = false; + return t; + } else if (!state.strong && stream.eat(ch)) { // Add STRONG + state.strong = ch; + return getType(state); + } else if (state.em === ch) { // Remove EM + state.em = false; + return t; + } else if (!state.em) { // Add EM + state.em = ch; + return getType(state); + } + } else if (ch === ' ') { + if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces + if (stream.peek() === ' ') { // Surrounded by spaces, ignore + return getType(state); + } else { // Not surrounded by spaces, back up pointer + stream.backUp(1); + } + } + } + + if (ch === ' ') { + if (stream.match(/ +$/, false)) { + state.trailingSpace++; + } else if (state.trailingSpace) { + state.trailingSpaceNewLine = true; + } + } + + return getType(state); + } + + function linkHref(stream, state) { + // Check if space, and return NULL if so (to avoid marking the space) + if(stream.eatSpace()){ + return null; + } + var ch = stream.next(); + if (ch === '(' || ch === '[') { + return switchInline(stream, state, inlineElement(linkhref, ch === '(' ? ')' : ']')); + } + return 'error'; + } + + function footnoteLink(stream, state) { + if (stream.match(/^[^\]]*\]:/, true)) { + state.f = footnoteUrl; + return linktext; + } + return switchInline(stream, state, inlineNormal); + } + + function footnoteUrl(stream, state) { + // Check if space, and return NULL if so (to avoid marking the space) + if(stream.eatSpace()){ + return null; + } + // Match URL + stream.match(/^[^\s]+/, true); + // Check for link title + if (stream.peek() === undefined) { // End of line, set flag to check next line + state.linkTitle = true; + } else { // More content on line, check if link title + stream.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/, true); + } + state.f = state.inline = inlineNormal; + return linkhref; + } + + var savedInlineRE = []; + function inlineRE(endChar) { + if (!savedInlineRE[endChar]) { + // Escape endChar for RegExp (taken from http://stackoverflow.com/a/494122/526741) + endChar = (endChar+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); + // Match any non-endChar, escaped character, as well as the closing + // endChar. + savedInlineRE[endChar] = new RegExp('^(?:[^\\\\]|\\\\.)*?(' + endChar + ')'); + } + return savedInlineRE[endChar]; + } + + function inlineElement(type, endChar, next) { + next = next || inlineNormal; + return function(stream, state) { + stream.match(inlineRE(endChar)); + state.inline = state.f = next; + return type; + }; + } + + return { + startState: function() { + return { + f: blockNormal, + + prevLineHasContent: false, + thisLineHasContent: false, + + block: blockNormal, + htmlState: CodeMirror.startState(htmlMode), + indentation: 0, + + inline: inlineNormal, + text: handleText, + + linkText: false, + linkTitle: false, + em: false, + strong: false, + header: false, + taskList: false, + list: false, + listDepth: 0, + quote: 0, + trailingSpace: 0, + trailingSpaceNewLine: false + }; + }, + + copyState: function(s) { + return { + f: s.f, + + prevLineHasContent: s.prevLineHasContent, + thisLineHasContent: s.thisLineHasContent, + + block: s.block, + htmlState: CodeMirror.copyState(htmlMode, s.htmlState), + indentation: s.indentation, + + localMode: s.localMode, + localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null, + + inline: s.inline, + text: s.text, + linkTitle: s.linkTitle, + em: s.em, + strong: s.strong, + header: s.header, + taskList: s.taskList, + list: s.list, + listDepth: s.listDepth, + quote: s.quote, + trailingSpace: s.trailingSpace, + trailingSpaceNewLine: s.trailingSpaceNewLine, + md_inside: s.md_inside + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (stream.match(/^\s*$/, true)) { + state.prevLineHasContent = false; + return blankLine(state); + } else { + state.prevLineHasContent = state.thisLineHasContent; + state.thisLineHasContent = true; + } + + // Reset state.header + state.header = false; + + // Reset state.taskList + state.taskList = false; + + // Reset state.code + state.code = false; + + // Reset state.trailingSpace + state.trailingSpace = 0; + state.trailingSpaceNewLine = false; + + state.f = state.block; + var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, ' ').length; + var difference = Math.floor((indentation - state.indentation) / 4) * 4; + if (difference > 4) difference = 4; + var adjustedIndentation = state.indentation + difference; + state.indentationDiff = adjustedIndentation - state.indentation; + state.indentation = adjustedIndentation; + if (indentation > 0) return null; + } + return state.f(stream, state); + }, + + blankLine: blankLine, + + getType: getType + }; + +}, "xml"); + +CodeMirror.defineMIME("text/x-markdown", "markdown"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/markdown/test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/markdown/test.js new file mode 100644 index 0000000..f167917 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/markdown/test.js @@ -0,0 +1,656 @@ +(function() { + var mode = CodeMirror.getMode({tabSize: 4}, "markdown"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("plainText", + "foo"); + + // Don't style single trailing space + MT("trailingSpace1", + "foo "); + + // Two or more trailing spaces should be styled with line break character + MT("trailingSpace2", + "foo[trailing-space-a ][trailing-space-new-line ]"); + + MT("trailingSpace3", + "foo[trailing-space-a ][trailing-space-b ][trailing-space-new-line ]"); + + MT("trailingSpace4", + "foo[trailing-space-a ][trailing-space-b ][trailing-space-a ][trailing-space-new-line ]"); + + // Code blocks using 4 spaces (regardless of CodeMirror.tabSize value) + MT("codeBlocksUsing4Spaces", + " [comment foo]"); + + // Code blocks using 4 spaces with internal indentation + MT("codeBlocksUsing4SpacesIndentation", + " [comment bar]", + " [comment hello]", + " [comment world]", + " [comment foo]", + "bar"); + + // Code blocks using 4 spaces with internal indentation + MT("codeBlocksUsing4SpacesIndentation", + " foo", + " [comment bar]", + " [comment hello]", + " [comment world]"); + + // Code blocks using 1 tab (regardless of CodeMirror.indentWithTabs value) + MT("codeBlocksUsing1Tab", + "\t[comment foo]"); + + // Inline code using backticks + MT("inlineCodeUsingBackticks", + "foo [comment `bar`]"); + + // Block code using single backtick (shouldn't work) + MT("blockCodeSingleBacktick", + "[comment `]", + "foo", + "[comment `]"); + + // Unclosed backticks + // Instead of simply marking as CODE, it would be nice to have an + // incomplete flag for CODE, that is styled slightly different. + MT("unclosedBackticks", + "foo [comment `bar]"); + + // Per documentation: "To include a literal backtick character within a + // code span, you can use multiple backticks as the opening and closing + // delimiters" + MT("doubleBackticks", + "[comment ``foo ` bar``]"); + + // Tests based on Dingus + // http://daringfireball.net/projects/markdown/dingus + // + // Multiple backticks within an inline code block + MT("consecutiveBackticks", + "[comment `foo```bar`]"); + + // Multiple backticks within an inline code block with a second code block + MT("consecutiveBackticks", + "[comment `foo```bar`] hello [comment `world`]"); + + // Unclosed with several different groups of backticks + MT("unclosedBackticks", + "[comment ``foo ``` bar` hello]"); + + // Closed with several different groups of backticks + MT("closedBackticks", + "[comment ``foo ``` bar` hello``] world"); + + // atx headers + // http://daringfireball.net/projects/markdown/syntax#header + + MT("atxH1", + "[header # foo]"); + + MT("atxH2", + "[header ## foo]"); + + MT("atxH3", + "[header ### foo]"); + + MT("atxH4", + "[header #### foo]"); + + MT("atxH5", + "[header ##### foo]"); + + MT("atxH6", + "[header ###### foo]"); + + // H6 - 7x '#' should still be H6, per Dingus + // http://daringfireball.net/projects/markdown/dingus + MT("atxH6NotH7", + "[header ####### foo]"); + + // Setext headers - H1, H2 + // Per documentation, "Any number of underlining =’s or -’s will work." + // http://daringfireball.net/projects/markdown/syntax#header + // Ideally, the text would be marked as `header` as well, but this is + // not really feasible at the moment. So, instead, we're testing against + // what works today, to avoid any regressions. + // + // Check if single underlining = works + MT("setextH1", + "foo", + "[header =]"); + + // Check if 3+ ='s work + MT("setextH1", + "foo", + "[header ===]"); + + // Check if single underlining - works + MT("setextH2", + "foo", + "[header -]"); + + // Check if 3+ -'s work + MT("setextH2", + "foo", + "[header ---]"); + + // Single-line blockquote with trailing space + MT("blockquoteSpace", + "[atom > foo]"); + + // Single-line blockquote + MT("blockquoteNoSpace", + "[atom >foo]"); + + // No blank line before blockquote + MT("blockquoteNoBlankLine", + "foo", + "[atom > bar]"); + + // Nested blockquote + MT("blockquoteSpace", + "[atom > foo]", + "[number > > foo]", + "[atom > > > foo]"); + + // Single-line blockquote followed by normal paragraph + MT("blockquoteThenParagraph", + "[atom >foo]", + "", + "bar"); + + // Multi-line blockquote (lazy mode) + MT("multiBlockquoteLazy", + "[atom >foo]", + "[atom bar]"); + + // Multi-line blockquote followed by normal paragraph (lazy mode) + MT("multiBlockquoteLazyThenParagraph", + "[atom >foo]", + "[atom bar]", + "", + "hello"); + + // Multi-line blockquote (non-lazy mode) + MT("multiBlockquote", + "[atom >foo]", + "[atom >bar]"); + + // Multi-line blockquote followed by normal paragraph (non-lazy mode) + MT("multiBlockquoteThenParagraph", + "[atom >foo]", + "[atom >bar]", + "", + "hello"); + + // Check list types + + MT("listAsterisk", + "foo", + "bar", + "", + "[variable-2 * foo]", + "[variable-2 * bar]"); + + MT("listPlus", + "foo", + "bar", + "", + "[variable-2 + foo]", + "[variable-2 + bar]"); + + MT("listDash", + "foo", + "bar", + "", + "[variable-2 - foo]", + "[variable-2 - bar]"); + + MT("listNumber", + "foo", + "bar", + "", + "[variable-2 1. foo]", + "[variable-2 2. bar]"); + + // Lists require a preceding blank line (per Dingus) + MT("listBogus", + "foo", + "1. bar", + "2. hello"); + + // Formatting in lists (*) + MT("listAsteriskFormatting", + "[variable-2 * ][variable-2&em *foo*][variable-2 bar]", + "[variable-2 * ][variable-2&strong **foo**][variable-2 bar]", + "[variable-2 * ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", + "[variable-2 * ][variable-2&comment `foo`][variable-2 bar]"); + + // Formatting in lists (+) + MT("listPlusFormatting", + "[variable-2 + ][variable-2&em *foo*][variable-2 bar]", + "[variable-2 + ][variable-2&strong **foo**][variable-2 bar]", + "[variable-2 + ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", + "[variable-2 + ][variable-2&comment `foo`][variable-2 bar]"); + + // Formatting in lists (-) + MT("listDashFormatting", + "[variable-2 - ][variable-2&em *foo*][variable-2 bar]", + "[variable-2 - ][variable-2&strong **foo**][variable-2 bar]", + "[variable-2 - ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", + "[variable-2 - ][variable-2&comment `foo`][variable-2 bar]"); + + // Formatting in lists (1.) + MT("listNumberFormatting", + "[variable-2 1. ][variable-2&em *foo*][variable-2 bar]", + "[variable-2 2. ][variable-2&strong **foo**][variable-2 bar]", + "[variable-2 3. ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", + "[variable-2 4. ][variable-2&comment `foo`][variable-2 bar]"); + + // Paragraph lists + MT("listParagraph", + "[variable-2 * foo]", + "", + "[variable-2 * bar]"); + + // Multi-paragraph lists + // + // 4 spaces + MT("listMultiParagraph", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + " [variable-2 hello]"); + + // 4 spaces, extra blank lines (should still be list, per Dingus) + MT("listMultiParagraphExtra", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + "", + " [variable-2 hello]"); + + // 4 spaces, plus 1 space (should still be list, per Dingus) + MT("listMultiParagraphExtraSpace", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + " [variable-2 hello]", + "", + " [variable-2 world]"); + + // 1 tab + MT("listTab", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + "\t[variable-2 hello]"); + + // No indent + MT("listNoIndent", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + "hello"); + + // Blockquote + MT("blockquote", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + " [variable-2&atom > hello]"); + + // Code block + MT("blockquoteCode", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + " [comment > hello]", + "", + " [variable-2 world]"); + + // Code block followed by text + MT("blockquoteCodeText", + "[variable-2 * foo]", + "", + " [variable-2 bar]", + "", + " [comment hello]", + "", + " [variable-2 world]"); + + // Nested list + + MT("listAsteriskNested", + "[variable-2 * foo]", + "", + " [variable-3 * bar]"); + + MT("listPlusNested", + "[variable-2 + foo]", + "", + " [variable-3 + bar]"); + + MT("listDashNested", + "[variable-2 - foo]", + "", + " [variable-3 - bar]"); + + MT("listNumberNested", + "[variable-2 1. foo]", + "", + " [variable-3 2. bar]"); + + MT("listMixed", + "[variable-2 * foo]", + "", + " [variable-3 + bar]", + "", + " [keyword - hello]", + "", + " [variable-2 1. world]"); + + MT("listBlockquote", + "[variable-2 * foo]", + "", + " [variable-3 + bar]", + "", + " [atom&variable-3 > hello]"); + + MT("listCode", + "[variable-2 * foo]", + "", + " [variable-3 + bar]", + "", + " [comment hello]"); + + // Code with internal indentation + MT("listCodeIndentation", + "[variable-2 * foo]", + "", + " [comment bar]", + " [comment hello]", + " [comment world]", + " [comment foo]", + " [variable-2 bar]"); + + // List nesting edge cases + MT("listNested", + "[variable-2 * foo]", + "", + " [variable-3 * bar]", + "", + " [variable-2 hello]" + ); + MT("listNested", + "[variable-2 * foo]", + "", + " [variable-3 * bar]", + "", + " [variable-3 * foo]" + ); + + // Code followed by text + MT("listCodeText", + "[variable-2 * foo]", + "", + " [comment bar]", + "", + "hello"); + + // Following tests directly from official Markdown documentation + // http://daringfireball.net/projects/markdown/syntax#hr + + MT("hrSpace", + "[hr * * *]"); + + MT("hr", + "[hr ***]"); + + MT("hrLong", + "[hr *****]"); + + MT("hrSpaceDash", + "[hr - - -]"); + + MT("hrDashLong", + "[hr ---------------------------------------]"); + + // Inline link with title + MT("linkTitle", + "[link [[foo]]][string (http://example.com/ \"bar\")] hello"); + + // Inline link without title + MT("linkNoTitle", + "[link [[foo]]][string (http://example.com/)] bar"); + + // Inline link with image + MT("linkImage", + "[link [[][tag ![[foo]]][string (http://example.com/)][link ]]][string (http://example.com/)] bar"); + + // Inline link with Em + MT("linkEm", + "[link [[][link&em *foo*][link ]]][string (http://example.com/)] bar"); + + // Inline link with Strong + MT("linkStrong", + "[link [[][link&strong **foo**][link ]]][string (http://example.com/)] bar"); + + // Inline link with EmStrong + MT("linkEmStrong", + "[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string (http://example.com/)] bar"); + + // Image with title + MT("imageTitle", + "[tag ![[foo]]][string (http://example.com/ \"bar\")] hello"); + + // Image without title + MT("imageNoTitle", + "[tag ![[foo]]][string (http://example.com/)] bar"); + + // Image with asterisks + MT("imageAsterisks", + "[tag ![[*foo*]]][string (http://example.com/)] bar"); + + // Not a link. Should be normal text due to square brackets being used + // regularly in text, especially in quoted material, and no space is allowed + // between square brackets and parentheses (per Dingus). + MT("notALink", + "[[foo]] (bar)"); + + // Reference-style links + MT("linkReference", + "[link [[foo]]][string [[bar]]] hello"); + + // Reference-style links with Em + MT("linkReferenceEm", + "[link [[][link&em *foo*][link ]]][string [[bar]]] hello"); + + // Reference-style links with Strong + MT("linkReferenceStrong", + "[link [[][link&strong **foo**][link ]]][string [[bar]]] hello"); + + // Reference-style links with EmStrong + MT("linkReferenceEmStrong", + "[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string [[bar]]] hello"); + + // Reference-style links with optional space separator (per docuentation) + // "You can optionally use a space to separate the sets of brackets" + MT("linkReferenceSpace", + "[link [[foo]]] [string [[bar]]] hello"); + + // Should only allow a single space ("...use *a* space...") + MT("linkReferenceDoubleSpace", + "[[foo]] [[bar]] hello"); + + // Reference-style links with implicit link name + MT("linkImplicit", + "[link [[foo]]][string [[]]] hello"); + + // @todo It would be nice if, at some point, the document was actually + // checked to see if the referenced link exists + + // Link label, for reference-style links (taken from documentation) + + MT("labelNoTitle", + "[link [[foo]]:] [string http://example.com/]"); + + MT("labelIndented", + " [link [[foo]]:] [string http://example.com/]"); + + MT("labelSpaceTitle", + "[link [[foo bar]]:] [string http://example.com/ \"hello\"]"); + + MT("labelDoubleTitle", + "[link [[foo bar]]:] [string http://example.com/ \"hello\"] \"world\""); + + MT("labelTitleDoubleQuotes", + "[link [[foo]]:] [string http://example.com/ \"bar\"]"); + + MT("labelTitleSingleQuotes", + "[link [[foo]]:] [string http://example.com/ 'bar']"); + + MT("labelTitleParenthese", + "[link [[foo]]:] [string http://example.com/ (bar)]"); + + MT("labelTitleInvalid", + "[link [[foo]]:] [string http://example.com/] bar"); + + MT("labelLinkAngleBrackets", + "[link [[foo]]:] [string \"bar\"]"); + + MT("labelTitleNextDoubleQuotes", + "[link [[foo]]:] [string http://example.com/]", + "[string \"bar\"] hello"); + + MT("labelTitleNextSingleQuotes", + "[link [[foo]]:] [string http://example.com/]", + "[string 'bar'] hello"); + + MT("labelTitleNextParenthese", + "[link [[foo]]:] [string http://example.com/]", + "[string (bar)] hello"); + + MT("labelTitleNextMixed", + "[link [[foo]]:] [string http://example.com/]", + "(bar\" hello"); + + MT("linkWeb", + "[link ] foo"); + + MT("linkWebDouble", + "[link ] foo [link ]"); + + MT("linkEmail", + "[link ] foo"); + + MT("linkEmailDouble", + "[link ] foo [link ]"); + + MT("emAsterisk", + "[em *foo*] bar"); + + MT("emUnderscore", + "[em _foo_] bar"); + + MT("emInWordAsterisk", + "foo[em *bar*]hello"); + + MT("emInWordUnderscore", + "foo[em _bar_]hello"); + + // Per documentation: "...surround an * or _ with spaces, it’ll be + // treated as a literal asterisk or underscore." + + MT("emEscapedBySpaceIn", + "foo [em _bar _ hello_] world"); + + MT("emEscapedBySpaceOut", + "foo _ bar[em _hello_]world"); + + // Unclosed emphasis characters + // Instead of simply marking as EM / STRONG, it would be nice to have an + // incomplete flag for EM and STRONG, that is styled slightly different. + MT("emIncompleteAsterisk", + "foo [em *bar]"); + + MT("emIncompleteUnderscore", + "foo [em _bar]"); + + MT("strongAsterisk", + "[strong **foo**] bar"); + + MT("strongUnderscore", + "[strong __foo__] bar"); + + MT("emStrongAsterisk", + "[em *foo][em&strong **bar*][strong hello**] world"); + + MT("emStrongUnderscore", + "[em _foo][em&strong __bar_][strong hello__] world"); + + // "...same character must be used to open and close an emphasis span."" + MT("emStrongMixed", + "[em _foo][em&strong **bar*hello__ world]"); + + MT("emStrongMixed", + "[em *foo][em&strong __bar_hello** world]"); + + // These characters should be escaped: + // \ backslash + // ` backtick + // * asterisk + // _ underscore + // {} curly braces + // [] square brackets + // () parentheses + // # hash mark + // + plus sign + // - minus sign (hyphen) + // . dot + // ! exclamation mark + + MT("escapeBacktick", + "foo \\`bar\\`"); + + MT("doubleEscapeBacktick", + "foo \\\\[comment `bar\\\\`]"); + + MT("escapeAsterisk", + "foo \\*bar\\*"); + + MT("doubleEscapeAsterisk", + "foo \\\\[em *bar\\\\*]"); + + MT("escapeUnderscore", + "foo \\_bar\\_"); + + MT("doubleEscapeUnderscore", + "foo \\\\[em _bar\\\\_]"); + + MT("escapeHash", + "\\# foo"); + + MT("doubleEscapeHash", + "\\\\# foo"); + + + // Tests to make sure GFM-specific things aren't getting through + + MT("taskList", + "[variable-2 * [ ]] bar]"); + + MT("fencedCodeBlocks", + "[comment ```]", + "foo", + "[comment ```]"); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/meta.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/meta.js new file mode 100644 index 0000000..8e8c8f5 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/meta.js @@ -0,0 +1,81 @@ +CodeMirror.modeInfo = [ + {name: 'APL', mime: 'text/apl', mode: 'apl'}, + {name: 'Asterisk', mime: 'text/x-asterisk', mode: 'asterisk'}, + {name: 'C', mime: 'text/x-csrc', mode: 'clike'}, + {name: 'C++', mime: 'text/x-c++src', mode: 'clike'}, + {name: 'Cobol', mime: 'text/x-cobol', mode: 'cobol'}, + {name: 'Java', mime: 'text/x-java', mode: 'clike'}, + {name: 'C#', mime: 'text/x-csharp', mode: 'clike'}, + {name: 'Scala', mime: 'text/x-scala', mode: 'clike'}, + {name: 'Clojure', mime: 'text/x-clojure', mode: 'clojure'}, + {name: 'CoffeeScript', mime: 'text/x-coffeescript', mode: 'coffeescript'}, + {name: 'Common Lisp', mime: 'text/x-common-lisp', mode: 'commonlisp'}, + {name: 'CSS', mime: 'text/css', mode: 'css'}, + {name: 'D', mime: 'text/x-d', mode: 'd'}, + {name: 'diff', mime: 'text/x-diff', mode: 'diff'}, + {name: 'ECL', mime: 'text/x-ecl', mode: 'ecl'}, + {name: 'Erlang', mime: 'text/x-erlang', mode: 'erlang'}, + {name: 'Gas', mime: 'text/x-gas', mode: 'gas'}, + {name: 'GitHub Flavored Markdown', mime: 'text/x-gfm', mode: 'gfm'}, + {name: 'GO', mime: 'text/x-go', mode: 'go'}, + {name: 'Groovy', mime: 'text/x-groovy', mode: 'groovy'}, + {name: 'Haskell', mime: 'text/x-haskell', mode: 'haskell'}, + {name: 'Haxe', mime: 'text/x-haxe', mode: 'haxe'}, + {name: 'ASP.NET', mime: 'application/x-aspx', mode: 'htmlembedded'}, + {name: 'Embedded Javascript', mime: 'application/x-ejs', mode: 'htmlembedded'}, + {name: 'JavaServer Pages', mime: 'application/x-jsp', mode: 'htmlembedded'}, + {name: 'HTML', mime: 'text/html', mode: 'htmlmixed'}, + {name: 'HTTP', mime: 'message/http', mode: 'http'}, + {name: 'Jade', mime: 'text/x-jade', mode: 'jade'}, + {name: 'JavaScript', mime: 'text/javascript', mode: 'javascript'}, + {name: 'JSON', mime: 'application/x-json', mode: 'javascript'}, + {name: 'JSON', mime: 'application/json', mode: 'javascript'}, + {name: 'TypeScript', mime: 'application/typescript', mode: 'javascript'}, + {name: 'Jinja2', mime: 'jinja2', mode: 'jinja2'}, + {name: 'LESS', mime: 'text/x-less', mode: 'less'}, + {name: 'LiveScript', mime: 'text/x-livescript', mode: 'livescript'}, + {name: 'Lua', mime: 'text/x-lua', mode: 'lua'}, + {name: 'Markdown (GitHub-flavour)', mime: 'text/x-markdown', mode: 'markdown'}, + {name: 'mIRC', mime: 'text/mirc', mode: 'mirc'}, + {name: 'Nginx', mime: 'text/x-nginx-conf', mode: 'nginx'}, + {name: 'NTriples', mime: 'text/n-triples', mode: 'ntriples'}, + {name: 'OCaml', mime: 'text/x-ocaml', mode: 'ocaml'}, + {name: 'Pascal', mime: 'text/x-pascal', mode: 'pascal'}, + {name: 'Perl', mime: 'text/x-perl', mode: 'perl'}, + {name: 'PHP', mime: 'text/x-php', mode: 'php'}, + {name: 'PHP(HTML)', mime: 'application/x-httpd-php', mode: 'php'}, + {name: 'Pig', mime: 'text/x-pig', mode: 'pig'}, + {name: 'Plain Text', mime: 'text/plain', mode: 'null'}, + {name: 'Properties files', mime: 'text/x-properties', mode: 'clike'}, + {name: 'Python', mime: 'text/x-python', mode: 'python'}, + {name: 'Cython', mime: 'text/x-cython', mode: 'python'}, + {name: 'R', mime: 'text/x-rsrc', mode: 'r'}, + {name: 'reStructuredText', mime: 'text/x-rst', mode: 'rst'}, + {name: 'Ruby', mime: 'text/x-ruby', mode: 'ruby'}, + {name: 'Rust', mime: 'text/x-rustsrc', mode: 'rust'}, + {name: 'Sass', mime: 'text/x-sass', mode: 'sass'}, + {name: 'Scheme', mime: 'text/x-scheme', mode: 'scheme'}, + {name: 'SCSS', mime: 'text/x-scss', mode: 'css'}, + {name: 'Shell', mime: 'text/x-sh', mode: 'shell'}, + {name: 'Sieve', mime: 'application/sieve', mode: 'sieve'}, + {name: 'Smalltalk', mime: 'text/x-stsrc', mode: 'smalltalk'}, + {name: 'Smarty', mime: 'text/x-smarty', mode: 'smarty'}, + {name: 'SmartyMixed', mime: 'text/x-smarty', mode: 'smartymixed'}, + {name: 'SPARQL', mime: 'application/x-sparql-query', mode: 'sparql'}, + {name: 'SQL', mime: 'text/x-sql', mode: 'sql'}, + {name: 'MariaDB', mime: 'text/x-mariadb', mode: 'sql'}, + {name: 'sTeX', mime: 'text/x-stex', mode: 'stex'}, + {name: 'LaTeX', mime: 'text/x-latex', mode: 'stex'}, + {name: 'Tcl', mime: 'text/x-tcl', mode: 'tcl'}, + {name: 'TiddlyWiki ', mime: 'text/x-tiddlywiki', mode: 'tiddlywiki'}, + {name: 'Tiki wiki', mime: 'text/tiki', mode: 'tiki'}, + {name: 'VB.NET', mime: 'text/x-vb', mode: 'vb'}, + {name: 'VBScript', mime: 'text/vbscript', mode: 'vbscript'}, + {name: 'Velocity', mime: 'text/velocity', mode: 'velocity'}, + {name: 'Verilog', mime: 'text/x-verilog', mode: 'verilog'}, + {name: 'XML', mime: 'application/xml', mode: 'xml'}, + {name: 'HTML', mime: 'text/html', mode: 'xml'}, + {name: 'XQuery', mime: 'application/xquery', mode: 'xquery'}, + {name: 'YAML', mime: 'text/x-yaml', mode: 'yaml'}, + {name: 'Z80', mime: 'text/x-z80', mode: 'z80'} +]; diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/mirc/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/mirc/index.html new file mode 100644 index 0000000..0ff5ec9 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/mirc/index.html @@ -0,0 +1,149 @@ + + + + + CodeMirror: mIRC mode + + + + + + + + +

              CodeMirror: mIRC mode

              +
              + + +

              MIME types defined: text/mirc.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/mirc/mirc.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/mirc/mirc.js new file mode 100644 index 0000000..fc88bc5 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/mirc/mirc.js @@ -0,0 +1,177 @@ +//mIRC mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara +CodeMirror.defineMIME("text/mirc", "mirc"); +CodeMirror.defineMode("mirc", function() { + function parseWords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var specials = parseWords("$! $$ $& $? $+ $abook $abs $active $activecid " + + "$activewid $address $addtok $agent $agentname $agentstat $agentver " + + "$alias $and $anick $ansi2mirc $aop $appactive $appstate $asc $asctime " + + "$asin $atan $avoice $away $awaymsg $awaytime $banmask $base $bfind " + + "$binoff $biton $bnick $bvar $bytes $calc $cb $cd $ceil $chan $chanmodes " + + "$chantypes $chat $chr $cid $clevel $click $cmdbox $cmdline $cnick $color " + + "$com $comcall $comchan $comerr $compact $compress $comval $cos $count " + + "$cr $crc $creq $crlf $ctime $ctimer $ctrlenter $date $day $daylight " + + "$dbuh $dbuw $dccignore $dccport $dde $ddename $debug $decode $decompress " + + "$deltok $devent $dialog $did $didreg $didtok $didwm $disk $dlevel $dll " + + "$dllcall $dname $dns $duration $ebeeps $editbox $emailaddr $encode $error " + + "$eval $event $exist $feof $ferr $fgetc $file $filename $filtered $finddir " + + "$finddirn $findfile $findfilen $findtok $fline $floor $fopen $fread $fserve " + + "$fulladdress $fulldate $fullname $fullscreen $get $getdir $getdot $gettok $gmt " + + "$group $halted $hash $height $hfind $hget $highlight $hnick $hotline " + + "$hotlinepos $ial $ialchan $ibl $idle $iel $ifmatch $ignore $iif $iil " + + "$inelipse $ini $inmidi $inpaste $inpoly $input $inrect $inroundrect " + + "$insong $instok $int $inwave $ip $isalias $isbit $isdde $isdir $isfile " + + "$isid $islower $istok $isupper $keychar $keyrpt $keyval $knick $lactive " + + "$lactivecid $lactivewid $left $len $level $lf $line $lines $link $lock " + + "$lock $locked $log $logstamp $logstampfmt $longfn $longip $lower $ltimer " + + "$maddress $mask $matchkey $matchtok $md5 $me $menu $menubar $menucontext " + + "$menutype $mid $middir $mircdir $mircexe $mircini $mklogfn $mnick $mode " + + "$modefirst $modelast $modespl $mouse $msfile $network $newnick $nick $nofile " + + "$nopath $noqt $not $notags $notify $null $numeric $numok $oline $onpoly " + + "$opnick $or $ord $os $passivedcc $pic $play $pnick $port $portable $portfree " + + "$pos $prefix $prop $protect $puttok $qt $query $rand $r $rawmsg $read $readomo " + + "$readn $regex $regml $regsub $regsubex $remove $remtok $replace $replacex " + + "$reptok $result $rgb $right $round $scid $scon $script $scriptdir $scriptline " + + "$sdir $send $server $serverip $sfile $sha1 $shortfn $show $signal $sin " + + "$site $sline $snick $snicks $snotify $sock $sockbr $sockerr $sockname " + + "$sorttok $sound $sqrt $ssl $sreq $sslready $status $strip $str $stripped " + + "$syle $submenu $switchbar $tan $target $ticks $time $timer $timestamp " + + "$timestampfmt $timezone $tip $titlebar $toolbar $treebar $trust $ulevel " + + "$ulist $upper $uptime $url $usermode $v1 $v2 $var $vcmd $vcmdstat $vcmdver " + + "$version $vnick $vol $wid $width $wildsite $wildtok $window $wrap $xor"); + var keywords = parseWords("abook ajinvite alias aline ame amsg anick aop auser autojoin avoice " + + "away background ban bcopy beep bread break breplace bset btrunc bunset bwrite " + + "channel clear clearall cline clipboard close cnick color comclose comopen " + + "comreg continue copy creq ctcpreply ctcps dcc dccserver dde ddeserver " + + "debug dec describe dialog did didtok disable disconnect dlevel dline dll " + + "dns dqwindow drawcopy drawdot drawfill drawline drawpic drawrect drawreplace " + + "drawrot drawsave drawscroll drawtext ebeeps echo editbox emailaddr enable " + + "events exit fclose filter findtext finger firewall flash flist flood flush " + + "flushini font fopen fseek fsend fserve fullname fwrite ghide gload gmove " + + "gopts goto gplay gpoint gqreq groups gshow gsize gstop gtalk gunload hadd " + + "halt haltdef hdec hdel help hfree hinc hload hmake hop hsave ial ialclear " + + "ialmark identd if ignore iline inc invite iuser join kick linesep links list " + + "load loadbuf localinfo log mdi me menubar mkdir mnick mode msg nick noop notice " + + "notify omsg onotice part partall pdcc perform play playctrl pop protect pvoice " + + "qme qmsg query queryn quit raw reload remini remote remove rename renwin " + + "reseterror resetidle return rlevel rline rmdir run ruser save savebuf saveini " + + "say scid scon server set showmirc signam sline sockaccept sockclose socklist " + + "socklisten sockmark sockopen sockpause sockread sockrename sockudp sockwrite " + + "sound speak splay sreq strip switchbar timer timestamp titlebar tnick tokenize " + + "toolbar topic tray treebar ulist unload unset unsetall updatenl url uwho " + + "var vcadd vcmd vcrem vol while whois window winhelp write writeint if isalnum " + + "isalpha isaop isavoice isban ischan ishop isignore isin isincs isletter islower " + + "isnotify isnum ison isop isprotect isreg isupper isvoice iswm iswmcs " + + "elseif else goto menu nicklist status title icon size option text edit " + + "button check radio box scroll list combo link tab item"); + var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); + var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + function tokenBase(stream, state) { + var beforeParams = state.beforeParams; + state.beforeParams = false; + var ch = stream.next(); + if (/[\[\]{}\(\),\.]/.test(ch)) { + if (ch == "(" && beforeParams) state.inParams = true; + else if (ch == ")") state.inParams = false; + return null; + } + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + else if (ch == "\\") { + stream.eat("\\"); + stream.eat(/./); + return "number"; + } + else if (ch == "/" && stream.eat("*")) { + return chain(stream, state, tokenComment); + } + else if (ch == ";" && stream.match(/ *\( *\(/)) { + return chain(stream, state, tokenUnparsed); + } + else if (ch == ";" && !state.inParams) { + stream.skipToEnd(); + return "comment"; + } + else if (ch == '"') { + stream.eat(/"/); + return "keyword"; + } + else if (ch == "$") { + stream.eatWhile(/[$_a-z0-9A-Z\.:]/); + if (specials && specials.propertyIsEnumerable(stream.current().toLowerCase())) { + return "keyword"; + } + else { + state.beforeParams = true; + return "builtin"; + } + } + else if (ch == "%") { + stream.eatWhile(/[^,^\s^\(^\)]/); + state.beforeParams = true; + return "string"; + } + else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + else { + stream.eatWhile(/[\w\$_{}]/); + var word = stream.current().toLowerCase(); + if (keywords && keywords.propertyIsEnumerable(word)) + return "keyword"; + if (functions && functions.propertyIsEnumerable(word)) { + state.beforeParams = true; + return "keyword"; + } + return null; + } + } + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + function tokenUnparsed(stream, state) { + var maybeEnd = 0, ch; + while (ch = stream.next()) { + if (ch == ";" && maybeEnd == 2) { + state.tokenize = tokenBase; + break; + } + if (ch == ")") + maybeEnd++; + else if (ch != " ") + maybeEnd = 0; + } + return "meta"; + } + return { + startState: function() { + return { + tokenize: tokenBase, + beforeParams: false, + inParams: false + }; + }, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + } + }; +}); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/nginx/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/nginx/index.html new file mode 100644 index 0000000..97d2a72 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/nginx/index.html @@ -0,0 +1,167 @@ + + + + CodeMirror: NGINX mode + + + + + + + + + + +

              CodeMirror: NGINX mode

              +
              + + +

              MIME types defined: text/nginx.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/nginx/nginx.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/nginx/nginx.js new file mode 100644 index 0000000..c98c8a1 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/nginx/nginx.js @@ -0,0 +1,163 @@ +CodeMirror.defineMode("nginx", function(config) { + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var keywords = words( + /* ngxDirectiveControl */ "break return rewrite set" + + /* ngxDirective */ " accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_types aio alias allow ancient_browser ancient_browser_value auth_basic auth_basic_user_file auth_http auth_http_header auth_http_timeout autoindex autoindex_exact_size autoindex_localtime charset charset_types client_body_buffer_size client_body_in_file_only client_body_in_single_buffer client_body_temp_path client_body_timeout client_header_buffer_size client_header_timeout client_max_body_size connection_pool_size create_full_put_path daemon dav_access dav_methods debug_connection debug_points default_type degradation degrade deny devpoll_changes devpoll_events directio directio_alignment empty_gif env epoll_events error_log eventport_events expires fastcgi_bind fastcgi_buffer_size fastcgi_buffers fastcgi_busy_buffers_size fastcgi_cache fastcgi_cache_key fastcgi_cache_methods fastcgi_cache_min_uses fastcgi_cache_path fastcgi_cache_use_stale fastcgi_cache_valid fastcgi_catch_stderr fastcgi_connect_timeout fastcgi_hide_header fastcgi_ignore_client_abort fastcgi_ignore_headers fastcgi_index fastcgi_intercept_errors fastcgi_max_temp_file_size fastcgi_next_upstream fastcgi_param fastcgi_pass_header fastcgi_pass_request_body fastcgi_pass_request_headers fastcgi_read_timeout fastcgi_send_lowat fastcgi_send_timeout fastcgi_split_path_info fastcgi_store fastcgi_store_access fastcgi_temp_file_write_size fastcgi_temp_path fastcgi_upstream_fail_timeout fastcgi_upstream_max_fails flv geoip_city geoip_country google_perftools_profiles gzip gzip_buffers gzip_comp_level gzip_disable gzip_hash gzip_http_version gzip_min_length gzip_no_buffer gzip_proxied gzip_static gzip_types gzip_vary gzip_window if_modified_since ignore_invalid_headers image_filter image_filter_buffer image_filter_jpeg_quality image_filter_transparency imap_auth imap_capabilities imap_client_buffer index ip_hash keepalive_requests keepalive_timeout kqueue_changes kqueue_events large_client_header_buffers limit_conn limit_conn_log_level limit_rate limit_rate_after limit_req limit_req_log_level limit_req_zone limit_zone lingering_time lingering_timeout lock_file log_format log_not_found log_subrequest map_hash_bucket_size map_hash_max_size master_process memcached_bind memcached_buffer_size memcached_connect_timeout memcached_next_upstream memcached_read_timeout memcached_send_timeout memcached_upstream_fail_timeout memcached_upstream_max_fails merge_slashes min_delete_depth modern_browser modern_browser_value msie_padding msie_refresh multi_accept open_file_cache open_file_cache_errors open_file_cache_events open_file_cache_min_uses open_file_cache_valid open_log_file_cache output_buffers override_charset perl perl_modules perl_require perl_set pid pop3_auth pop3_capabilities port_in_redirect postpone_gzipping postpone_output protocol proxy proxy_bind proxy_buffer proxy_buffer_size proxy_buffering proxy_buffers proxy_busy_buffers_size proxy_cache proxy_cache_key proxy_cache_methods proxy_cache_min_uses proxy_cache_path proxy_cache_use_stale proxy_cache_valid proxy_connect_timeout proxy_headers_hash_bucket_size proxy_headers_hash_max_size proxy_hide_header proxy_ignore_client_abort proxy_ignore_headers proxy_intercept_errors proxy_max_temp_file_size proxy_method proxy_next_upstream proxy_pass_error_message proxy_pass_header proxy_pass_request_body proxy_pass_request_headers proxy_read_timeout proxy_redirect proxy_send_lowat proxy_send_timeout proxy_set_body proxy_set_header proxy_ssl_session_reuse proxy_store proxy_store_access proxy_temp_file_write_size proxy_temp_path proxy_timeout proxy_upstream_fail_timeout proxy_upstream_max_fails random_index read_ahead real_ip_header recursive_error_pages request_pool_size reset_timedout_connection resolver resolver_timeout rewrite_log rtsig_overflow_events rtsig_overflow_test rtsig_overflow_threshold rtsig_signo satisfy secure_link_secret send_lowat send_timeout sendfile sendfile_max_chunk server_name_in_redirect server_names_hash_bucket_size server_names_hash_max_size server_tokens set_real_ip_from smtp_auth smtp_capabilities smtp_client_buffer smtp_greeting_delay so_keepalive source_charset ssi ssi_ignore_recycled_buffers ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length ssl ssl_certificate ssl_certificate_key ssl_ciphers ssl_client_certificate ssl_crl ssl_dhparam ssl_engine ssl_prefer_server_ciphers ssl_protocols ssl_session_cache ssl_session_timeout ssl_verify_client ssl_verify_depth starttls stub_status sub_filter sub_filter_once sub_filter_types tcp_nodelay tcp_nopush thread_stack_size timeout timer_resolution types_hash_bucket_size types_hash_max_size underscores_in_headers uninitialized_variable_warn use user userid userid_domain userid_expires userid_mark userid_name userid_p3p userid_path userid_service valid_referers variables_hash_bucket_size variables_hash_max_size worker_connections worker_cpu_affinity worker_priority worker_processes worker_rlimit_core worker_rlimit_nofile worker_rlimit_sigpending worker_threads working_directory xclient xml_entities xslt_stylesheet xslt_typesdrew@li229-23" + ); + + var keywords_block = words( + /* ngxDirectiveBlock */ "http mail events server types location upstream charset_map limit_except if geo map" + ); + + var keywords_important = words( + /* ngxDirectiveImportant */ "include root server server_name listen internal proxy_pass memcached_pass fastcgi_pass try_files" + ); + + var indentUnit = config.indentUnit, type; + function ret(style, tp) {type = tp; return style;} + + function tokenBase(stream, state) { + + + stream.eatWhile(/[\w\$_]/); + + var cur = stream.current(); + + + if (keywords.propertyIsEnumerable(cur)) { + return "keyword"; + } + else if (keywords_block.propertyIsEnumerable(cur)) { + return "variable-2"; + } + else if (keywords_important.propertyIsEnumerable(cur)) { + return "string-2"; + } + /**/ + + var ch = stream.next(); + if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("meta", stream.current());} + else if (ch == "/" && stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + else if (ch == "<" && stream.eat("!")) { + state.tokenize = tokenSGMLComment; + return tokenSGMLComment(stream, state); + } + else if (ch == "=") ret(null, "compare"); + else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + else if (ch == "#") { + stream.skipToEnd(); + return ret("comment", "comment"); + } + else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } + else if (/[,.+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } + else if (/[;{}:\[\]]/.test(ch)) { + return ret(null, ch); + } + else { + stream.eatWhile(/[\w\\\-]/); + return ret("variable", "variable"); + } + } + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + function tokenSGMLComment(stream, state) { + var dashes = 0, ch; + while ((ch = stream.next()) != null) { + if (dashes >= 2 && ch == ">") { + state.tokenize = tokenBase; + break; + } + dashes = (ch == "-") ? dashes + 1 : 0; + } + return ret("comment", "comment"); + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) + break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + + return { + startState: function(base) { + return {tokenize: tokenBase, + baseIndent: base || 0, + stack: []}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + type = null; + var style = state.tokenize(stream, state); + + var context = state.stack[state.stack.length-1]; + if (type == "hash" && context == "rule") style = "atom"; + else if (style == "variable") { + if (context == "rule") style = "number"; + else if (!context || context == "@media{") style = "tag"; + } + + if (context == "rule" && /^[\{\};]$/.test(type)) + state.stack.pop(); + if (type == "{") { + if (context == "@media") state.stack[state.stack.length-1] = "@media{"; + else state.stack.push("{"); + } + else if (type == "}") state.stack.pop(); + else if (type == "@media") state.stack.push("@media"); + else if (context == "{" && type != "comment") state.stack.push("rule"); + return style; + }, + + indent: function(state, textAfter) { + var n = state.stack.length; + if (/^\}/.test(textAfter)) + n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1; + return state.baseIndent + n * indentUnit; + }, + + electricChars: "}" + }; +}); + +CodeMirror.defineMIME("text/nginx", "text/x-nginx-conf"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ntriples/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ntriples/index.html new file mode 100644 index 0000000..052a53d --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ntriples/index.html @@ -0,0 +1,33 @@ + + + + + CodeMirror: NTriples mode + + + + + + + +

              CodeMirror: NTriples mode

              +
              + +
              + + +

              MIME types defined: text/n-triples.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ntriples/ntriples.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ntriples/ntriples.js new file mode 100644 index 0000000..ed0cee3 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ntriples/ntriples.js @@ -0,0 +1,170 @@ +/********************************************************** +* This script provides syntax highlighting support for +* the Ntriples format. +* Ntriples format specification: +* http://www.w3.org/TR/rdf-testcases/#ntriples +***********************************************************/ + +/* + The following expression defines the defined ASF grammar transitions. + + pre_subject -> + { + ( writing_subject_uri | writing_bnode_uri ) + -> pre_predicate + -> writing_predicate_uri + -> pre_object + -> writing_object_uri | writing_object_bnode | + ( + writing_object_literal + -> writing_literal_lang | writing_literal_type + ) + -> post_object + -> BEGIN + } otherwise { + -> ERROR + } +*/ +CodeMirror.defineMode("ntriples", function() { + + var Location = { + PRE_SUBJECT : 0, + WRITING_SUB_URI : 1, + WRITING_BNODE_URI : 2, + PRE_PRED : 3, + WRITING_PRED_URI : 4, + PRE_OBJ : 5, + WRITING_OBJ_URI : 6, + WRITING_OBJ_BNODE : 7, + WRITING_OBJ_LITERAL : 8, + WRITING_LIT_LANG : 9, + WRITING_LIT_TYPE : 10, + POST_OBJ : 11, + ERROR : 12 + }; + function transitState(currState, c) { + var currLocation = currState.location; + var ret; + + // Opening. + if (currLocation == Location.PRE_SUBJECT && c == '<') ret = Location.WRITING_SUB_URI; + else if(currLocation == Location.PRE_SUBJECT && c == '_') ret = Location.WRITING_BNODE_URI; + else if(currLocation == Location.PRE_PRED && c == '<') ret = Location.WRITING_PRED_URI; + else if(currLocation == Location.PRE_OBJ && c == '<') ret = Location.WRITING_OBJ_URI; + else if(currLocation == Location.PRE_OBJ && c == '_') ret = Location.WRITING_OBJ_BNODE; + else if(currLocation == Location.PRE_OBJ && c == '"') ret = Location.WRITING_OBJ_LITERAL; + + // Closing. + else if(currLocation == Location.WRITING_SUB_URI && c == '>') ret = Location.PRE_PRED; + else if(currLocation == Location.WRITING_BNODE_URI && c == ' ') ret = Location.PRE_PRED; + else if(currLocation == Location.WRITING_PRED_URI && c == '>') ret = Location.PRE_OBJ; + else if(currLocation == Location.WRITING_OBJ_URI && c == '>') ret = Location.POST_OBJ; + else if(currLocation == Location.WRITING_OBJ_BNODE && c == ' ') ret = Location.POST_OBJ; + else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '"') ret = Location.POST_OBJ; + else if(currLocation == Location.WRITING_LIT_LANG && c == ' ') ret = Location.POST_OBJ; + else if(currLocation == Location.WRITING_LIT_TYPE && c == '>') ret = Location.POST_OBJ; + + // Closing typed and language literal. + else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '@') ret = Location.WRITING_LIT_LANG; + else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '^') ret = Location.WRITING_LIT_TYPE; + + // Spaces. + else if( c == ' ' && + ( + currLocation == Location.PRE_SUBJECT || + currLocation == Location.PRE_PRED || + currLocation == Location.PRE_OBJ || + currLocation == Location.POST_OBJ + ) + ) ret = currLocation; + + // Reset. + else if(currLocation == Location.POST_OBJ && c == '.') ret = Location.PRE_SUBJECT; + + // Error + else ret = Location.ERROR; + + currState.location=ret; + } + + return { + startState: function() { + return { + location : Location.PRE_SUBJECT, + uris : [], + anchors : [], + bnodes : [], + langs : [], + types : [] + }; + }, + token: function(stream, state) { + var ch = stream.next(); + if(ch == '<') { + transitState(state, ch); + var parsedURI = ''; + stream.eatWhile( function(c) { if( c != '#' && c != '>' ) { parsedURI += c; return true; } return false;} ); + state.uris.push(parsedURI); + if( stream.match('#', false) ) return 'variable'; + stream.next(); + transitState(state, '>'); + return 'variable'; + } + if(ch == '#') { + var parsedAnchor = ''; + stream.eatWhile(function(c) { if(c != '>' && c != ' ') { parsedAnchor+= c; return true; } return false;}); + state.anchors.push(parsedAnchor); + return 'variable-2'; + } + if(ch == '>') { + transitState(state, '>'); + return 'variable'; + } + if(ch == '_') { + transitState(state, ch); + var parsedBNode = ''; + stream.eatWhile(function(c) { if( c != ' ' ) { parsedBNode += c; return true; } return false;}); + state.bnodes.push(parsedBNode); + stream.next(); + transitState(state, ' '); + return 'builtin'; + } + if(ch == '"') { + transitState(state, ch); + stream.eatWhile( function(c) { return c != '"'; } ); + stream.next(); + if( stream.peek() != '@' && stream.peek() != '^' ) { + transitState(state, '"'); + } + return 'string'; + } + if( ch == '@' ) { + transitState(state, '@'); + var parsedLang = ''; + stream.eatWhile(function(c) { if( c != ' ' ) { parsedLang += c; return true; } return false;}); + state.langs.push(parsedLang); + stream.next(); + transitState(state, ' '); + return 'string-2'; + } + if( ch == '^' ) { + stream.next(); + transitState(state, '^'); + var parsedType = ''; + stream.eatWhile(function(c) { if( c != '>' ) { parsedType += c; return true; } return false;} ); + state.types.push(parsedType); + stream.next(); + transitState(state, '>'); + return 'variable'; + } + if( ch == ' ' ) { + transitState(state, ch); + } + if( ch == '.' ) { + transitState(state, ch); + } + } + }; +}); + +CodeMirror.defineMIME("text/n-triples", "ntriples"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ocaml/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ocaml/index.html new file mode 100644 index 0000000..c10a84f --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ocaml/index.html @@ -0,0 +1,131 @@ + + +CodeMirror: OCaml mode + + + + + + + + + + +

              CodeMirror: OCaml mode

              + + + + + +

              MIME types defined: text/x-ocaml.

              diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ocaml/ocaml.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ocaml/ocaml.js new file mode 100644 index 0000000..32cbc0b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ocaml/ocaml.js @@ -0,0 +1,116 @@ +CodeMirror.defineMode('ocaml', function() { + + var words = { + 'true': 'atom', + 'false': 'atom', + 'let': 'keyword', + 'rec': 'keyword', + 'in': 'keyword', + 'of': 'keyword', + 'and': 'keyword', + 'succ': 'keyword', + 'if': 'keyword', + 'then': 'keyword', + 'else': 'keyword', + 'for': 'keyword', + 'to': 'keyword', + 'while': 'keyword', + 'do': 'keyword', + 'done': 'keyword', + 'fun': 'keyword', + 'function': 'keyword', + 'val': 'keyword', + 'type': 'keyword', + 'mutable': 'keyword', + 'match': 'keyword', + 'with': 'keyword', + 'try': 'keyword', + 'raise': 'keyword', + 'begin': 'keyword', + 'end': 'keyword', + 'open': 'builtin', + 'trace': 'builtin', + 'ignore': 'builtin', + 'exit': 'builtin', + 'print_string': 'builtin', + 'print_endline': 'builtin' + }; + + function tokenBase(stream, state) { + var ch = stream.next(); + + if (ch === '"') { + state.tokenize = tokenString; + return state.tokenize(stream, state); + } + if (ch === '(') { + if (stream.eat('*')) { + state.commentLevel++; + state.tokenize = tokenComment; + return state.tokenize(stream, state); + } + } + if (ch === '~') { + stream.eatWhile(/\w/); + return 'variable-2'; + } + if (ch === '`') { + stream.eatWhile(/\w/); + return 'quote'; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\d]/); + if (stream.eat('.')) { + stream.eatWhile(/[\d]/); + } + return 'number'; + } + if ( /[+\-*&%=<>!?|]/.test(ch)) { + return 'operator'; + } + stream.eatWhile(/\w/); + var cur = stream.current(); + return words[cur] || 'variable'; + } + + function tokenString(stream, state) { + var next, end = false, escaped = false; + while ((next = stream.next()) != null) { + if (next === '"' && !escaped) { + end = true; + break; + } + escaped = !escaped && next === '\\'; + } + if (end && !escaped) { + state.tokenize = tokenBase; + } + return 'string'; + }; + + function tokenComment(stream, state) { + var prev, next; + while(state.commentLevel > 0 && (next = stream.next()) != null) { + if (prev === '(' && next === '*') state.commentLevel++; + if (prev === '*' && next === ')') state.commentLevel--; + prev = next; + } + if (state.commentLevel <= 0) { + state.tokenize = tokenBase; + } + return 'comment'; + } + + return { + startState: function() {return {tokenize: tokenBase, commentLevel: 0};}, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + }, + + blockCommentStart: "(*", + blockCommentEnd: "*)" + }; +}); + +CodeMirror.defineMIME('text/x-ocaml', 'ocaml'); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pascal/LICENSE b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pascal/LICENSE new file mode 100644 index 0000000..8e3747e --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pascal/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2011 souceLair + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pascal/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pascal/index.html new file mode 100644 index 0000000..b3016af --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pascal/index.html @@ -0,0 +1,48 @@ + + + + + CodeMirror: Pascal mode + + + + + + + +

              CodeMirror: Pascal mode

              + +
              + + + +

              MIME types defined: text/x-pascal.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pascal/pascal.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pascal/pascal.js new file mode 100644 index 0000000..09d9b06 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pascal/pascal.js @@ -0,0 +1,94 @@ +CodeMirror.defineMode("pascal", function() { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var keywords = words("and array begin case const div do downto else end file for forward integer " + + "boolean char function goto if in label mod nil not of or packed procedure " + + "program record repeat set string then to type until var while with"); + var atoms = {"null": true}; + + var isOperatorChar = /[+\-*&%=<>!?|\/]/; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == "#" && state.startOfLine) { + stream.skipToEnd(); + return "meta"; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (ch == "(" && stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) return "keyword"; + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !escaped) state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == ")" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + // Interface + + return { + startState: function() { + return {tokenize: null}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + return style; + }, + + electricChars: "{}" + }; +}); + +CodeMirror.defineMIME("text/x-pascal", "pascal"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/perl/LICENSE b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/perl/LICENSE new file mode 100644 index 0000000..96f4115 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/perl/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2011 by Sabaca under the MIT license. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/perl/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/perl/index.html new file mode 100644 index 0000000..13c7af6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/perl/index.html @@ -0,0 +1,62 @@ + + + + + CodeMirror: Perl mode + + + + + + + +

              CodeMirror: Perl mode

              + +
              + + + +

              MIME types defined: text/x-perl.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/perl/perl.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/perl/perl.js new file mode 100644 index 0000000..5954b1a --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/perl/perl.js @@ -0,0 +1,816 @@ +// CodeMirror2 mode/perl/perl.js (text/x-perl) beta 0.10 (2011-11-08) +// This is a part of CodeMirror from https://github.com/sabaca/CodeMirror_mode_perl (mail@sabaca.com) +CodeMirror.defineMode("perl",function(){ + // http://perldoc.perl.org + var PERL={ // null - magic touch + // 1 - keyword + // 2 - def + // 3 - atom + // 4 - operator + // 5 - variable-2 (predefined) + // [x,y] - x=1,2,3; y=must be defined if x{...} + // PERL operators + '->' : 4, + '++' : 4, + '--' : 4, + '**' : 4, + // ! ~ \ and unary + and - + '=~' : 4, + '!~' : 4, + '*' : 4, + '/' : 4, + '%' : 4, + 'x' : 4, + '+' : 4, + '-' : 4, + '.' : 4, + '<<' : 4, + '>>' : 4, + // named unary operators + '<' : 4, + '>' : 4, + '<=' : 4, + '>=' : 4, + 'lt' : 4, + 'gt' : 4, + 'le' : 4, + 'ge' : 4, + '==' : 4, + '!=' : 4, + '<=>' : 4, + 'eq' : 4, + 'ne' : 4, + 'cmp' : 4, + '~~' : 4, + '&' : 4, + '|' : 4, + '^' : 4, + '&&' : 4, + '||' : 4, + '//' : 4, + '..' : 4, + '...' : 4, + '?' : 4, + ':' : 4, + '=' : 4, + '+=' : 4, + '-=' : 4, + '*=' : 4, // etc. ??? + ',' : 4, + '=>' : 4, + '::' : 4, + // list operators (rightward) + 'not' : 4, + 'and' : 4, + 'or' : 4, + 'xor' : 4, + // PERL predefined variables (I know, what this is a paranoid idea, but may be needed for people, who learn PERL, and for me as well, ...and may be for you?;) + 'BEGIN' : [5,1], + 'END' : [5,1], + 'PRINT' : [5,1], + 'PRINTF' : [5,1], + 'GETC' : [5,1], + 'READ' : [5,1], + 'READLINE' : [5,1], + 'DESTROY' : [5,1], + 'TIE' : [5,1], + 'TIEHANDLE' : [5,1], + 'UNTIE' : [5,1], + 'STDIN' : 5, + 'STDIN_TOP' : 5, + 'STDOUT' : 5, + 'STDOUT_TOP' : 5, + 'STDERR' : 5, + 'STDERR_TOP' : 5, + '$ARG' : 5, + '$_' : 5, + '@ARG' : 5, + '@_' : 5, + '$LIST_SEPARATOR' : 5, + '$"' : 5, + '$PROCESS_ID' : 5, + '$PID' : 5, + '$$' : 5, + '$REAL_GROUP_ID' : 5, + '$GID' : 5, + '$(' : 5, + '$EFFECTIVE_GROUP_ID' : 5, + '$EGID' : 5, + '$)' : 5, + '$PROGRAM_NAME' : 5, + '$0' : 5, + '$SUBSCRIPT_SEPARATOR' : 5, + '$SUBSEP' : 5, + '$;' : 5, + '$REAL_USER_ID' : 5, + '$UID' : 5, + '$<' : 5, + '$EFFECTIVE_USER_ID' : 5, + '$EUID' : 5, + '$>' : 5, + '$a' : 5, + '$b' : 5, + '$COMPILING' : 5, + '$^C' : 5, + '$DEBUGGING' : 5, + '$^D' : 5, + '${^ENCODING}' : 5, + '$ENV' : 5, + '%ENV' : 5, + '$SYSTEM_FD_MAX' : 5, + '$^F' : 5, + '@F' : 5, + '${^GLOBAL_PHASE}' : 5, + '$^H' : 5, + '%^H' : 5, + '@INC' : 5, + '%INC' : 5, + '$INPLACE_EDIT' : 5, + '$^I' : 5, + '$^M' : 5, + '$OSNAME' : 5, + '$^O' : 5, + '${^OPEN}' : 5, + '$PERLDB' : 5, + '$^P' : 5, + '$SIG' : 5, + '%SIG' : 5, + '$BASETIME' : 5, + '$^T' : 5, + '${^TAINT}' : 5, + '${^UNICODE}' : 5, + '${^UTF8CACHE}' : 5, + '${^UTF8LOCALE}' : 5, + '$PERL_VERSION' : 5, + '$^V' : 5, + '${^WIN32_SLOPPY_STAT}' : 5, + '$EXECUTABLE_NAME' : 5, + '$^X' : 5, + '$1' : 5, // - regexp $1, $2... + '$MATCH' : 5, + '$&' : 5, + '${^MATCH}' : 5, + '$PREMATCH' : 5, + '$`' : 5, + '${^PREMATCH}' : 5, + '$POSTMATCH' : 5, + "$'" : 5, + '${^POSTMATCH}' : 5, + '$LAST_PAREN_MATCH' : 5, + '$+' : 5, + '$LAST_SUBMATCH_RESULT' : 5, + '$^N' : 5, + '@LAST_MATCH_END' : 5, + '@+' : 5, + '%LAST_PAREN_MATCH' : 5, + '%+' : 5, + '@LAST_MATCH_START' : 5, + '@-' : 5, + '%LAST_MATCH_START' : 5, + '%-' : 5, + '$LAST_REGEXP_CODE_RESULT' : 5, + '$^R' : 5, + '${^RE_DEBUG_FLAGS}' : 5, + '${^RE_TRIE_MAXBUF}' : 5, + '$ARGV' : 5, + '@ARGV' : 5, + 'ARGV' : 5, + 'ARGVOUT' : 5, + '$OUTPUT_FIELD_SEPARATOR' : 5, + '$OFS' : 5, + '$,' : 5, + '$INPUT_LINE_NUMBER' : 5, + '$NR' : 5, + '$.' : 5, + '$INPUT_RECORD_SEPARATOR' : 5, + '$RS' : 5, + '$/' : 5, + '$OUTPUT_RECORD_SEPARATOR' : 5, + '$ORS' : 5, + '$\\' : 5, + '$OUTPUT_AUTOFLUSH' : 5, + '$|' : 5, + '$ACCUMULATOR' : 5, + '$^A' : 5, + '$FORMAT_FORMFEED' : 5, + '$^L' : 5, + '$FORMAT_PAGE_NUMBER' : 5, + '$%' : 5, + '$FORMAT_LINES_LEFT' : 5, + '$-' : 5, + '$FORMAT_LINE_BREAK_CHARACTERS' : 5, + '$:' : 5, + '$FORMAT_LINES_PER_PAGE' : 5, + '$=' : 5, + '$FORMAT_TOP_NAME' : 5, + '$^' : 5, + '$FORMAT_NAME' : 5, + '$~' : 5, + '${^CHILD_ERROR_NATIVE}' : 5, + '$EXTENDED_OS_ERROR' : 5, + '$^E' : 5, + '$EXCEPTIONS_BEING_CAUGHT' : 5, + '$^S' : 5, + '$WARNING' : 5, + '$^W' : 5, + '${^WARNING_BITS}' : 5, + '$OS_ERROR' : 5, + '$ERRNO' : 5, + '$!' : 5, + '%OS_ERROR' : 5, + '%ERRNO' : 5, + '%!' : 5, + '$CHILD_ERROR' : 5, + '$?' : 5, + '$EVAL_ERROR' : 5, + '$@' : 5, + '$OFMT' : 5, + '$#' : 5, + '$*' : 5, + '$ARRAY_BASE' : 5, + '$[' : 5, + '$OLD_PERL_VERSION' : 5, + '$]' : 5, + // PERL blocks + 'if' :[1,1], + elsif :[1,1], + 'else' :[1,1], + 'while' :[1,1], + unless :[1,1], + 'for' :[1,1], + foreach :[1,1], + // PERL functions + 'abs' :1, // - absolute value function + accept :1, // - accept an incoming socket connect + alarm :1, // - schedule a SIGALRM + 'atan2' :1, // - arctangent of Y/X in the range -PI to PI + bind :1, // - binds an address to a socket + binmode :1, // - prepare binary files for I/O + bless :1, // - create an object + bootstrap :1, // + 'break' :1, // - break out of a "given" block + caller :1, // - get context of the current subroutine call + chdir :1, // - change your current working directory + chmod :1, // - changes the permissions on a list of files + chomp :1, // - remove a trailing record separator from a string + chop :1, // - remove the last character from a string + chown :1, // - change the owership on a list of files + chr :1, // - get character this number represents + chroot :1, // - make directory new root for path lookups + close :1, // - close file (or pipe or socket) handle + closedir :1, // - close directory handle + connect :1, // - connect to a remote socket + 'continue' :[1,1], // - optional trailing block in a while or foreach + 'cos' :1, // - cosine function + crypt :1, // - one-way passwd-style encryption + dbmclose :1, // - breaks binding on a tied dbm file + dbmopen :1, // - create binding on a tied dbm file + 'default' :1, // + defined :1, // - test whether a value, variable, or function is defined + 'delete' :1, // - deletes a value from a hash + die :1, // - raise an exception or bail out + 'do' :1, // - turn a BLOCK into a TERM + dump :1, // - create an immediate core dump + each :1, // - retrieve the next key/value pair from a hash + endgrent :1, // - be done using group file + endhostent :1, // - be done using hosts file + endnetent :1, // - be done using networks file + endprotoent :1, // - be done using protocols file + endpwent :1, // - be done using passwd file + endservent :1, // - be done using services file + eof :1, // - test a filehandle for its end + 'eval' :1, // - catch exceptions or compile and run code + 'exec' :1, // - abandon this program to run another + exists :1, // - test whether a hash key is present + exit :1, // - terminate this program + 'exp' :1, // - raise I to a power + fcntl :1, // - file control system call + fileno :1, // - return file descriptor from filehandle + flock :1, // - lock an entire file with an advisory lock + fork :1, // - create a new process just like this one + format :1, // - declare a picture format with use by the write() function + formline :1, // - internal function used for formats + getc :1, // - get the next character from the filehandle + getgrent :1, // - get next group record + getgrgid :1, // - get group record given group user ID + getgrnam :1, // - get group record given group name + gethostbyaddr :1, // - get host record given its address + gethostbyname :1, // - get host record given name + gethostent :1, // - get next hosts record + getlogin :1, // - return who logged in at this tty + getnetbyaddr :1, // - get network record given its address + getnetbyname :1, // - get networks record given name + getnetent :1, // - get next networks record + getpeername :1, // - find the other end of a socket connection + getpgrp :1, // - get process group + getppid :1, // - get parent process ID + getpriority :1, // - get current nice value + getprotobyname :1, // - get protocol record given name + getprotobynumber :1, // - get protocol record numeric protocol + getprotoent :1, // - get next protocols record + getpwent :1, // - get next passwd record + getpwnam :1, // - get passwd record given user login name + getpwuid :1, // - get passwd record given user ID + getservbyname :1, // - get services record given its name + getservbyport :1, // - get services record given numeric port + getservent :1, // - get next services record + getsockname :1, // - retrieve the sockaddr for a given socket + getsockopt :1, // - get socket options on a given socket + given :1, // + glob :1, // - expand filenames using wildcards + gmtime :1, // - convert UNIX time into record or string using Greenwich time + 'goto' :1, // - create spaghetti code + grep :1, // - locate elements in a list test true against a given criterion + hex :1, // - convert a string to a hexadecimal number + 'import' :1, // - patch a module's namespace into your own + index :1, // - find a substring within a string + 'int' :1, // - get the integer portion of a number + ioctl :1, // - system-dependent device control system call + 'join' :1, // - join a list into a string using a separator + keys :1, // - retrieve list of indices from a hash + kill :1, // - send a signal to a process or process group + last :1, // - exit a block prematurely + lc :1, // - return lower-case version of a string + lcfirst :1, // - return a string with just the next letter in lower case + length :1, // - return the number of bytes in a string + 'link' :1, // - create a hard link in the filesytem + listen :1, // - register your socket as a server + local : 2, // - create a temporary value for a global variable (dynamic scoping) + localtime :1, // - convert UNIX time into record or string using local time + lock :1, // - get a thread lock on a variable, subroutine, or method + 'log' :1, // - retrieve the natural logarithm for a number + lstat :1, // - stat a symbolic link + m :null, // - match a string with a regular expression pattern + map :1, // - apply a change to a list to get back a new list with the changes + mkdir :1, // - create a directory + msgctl :1, // - SysV IPC message control operations + msgget :1, // - get SysV IPC message queue + msgrcv :1, // - receive a SysV IPC message from a message queue + msgsnd :1, // - send a SysV IPC message to a message queue + my : 2, // - declare and assign a local variable (lexical scoping) + 'new' :1, // + next :1, // - iterate a block prematurely + no :1, // - unimport some module symbols or semantics at compile time + oct :1, // - convert a string to an octal number + open :1, // - open a file, pipe, or descriptor + opendir :1, // - open a directory + ord :1, // - find a character's numeric representation + our : 2, // - declare and assign a package variable (lexical scoping) + pack :1, // - convert a list into a binary representation + 'package' :1, // - declare a separate global namespace + pipe :1, // - open a pair of connected filehandles + pop :1, // - remove the last element from an array and return it + pos :1, // - find or set the offset for the last/next m//g search + print :1, // - output a list to a filehandle + printf :1, // - output a formatted list to a filehandle + prototype :1, // - get the prototype (if any) of a subroutine + push :1, // - append one or more elements to an array + q :null, // - singly quote a string + qq :null, // - doubly quote a string + qr :null, // - Compile pattern + quotemeta :null, // - quote regular expression magic characters + qw :null, // - quote a list of words + qx :null, // - backquote quote a string + rand :1, // - retrieve the next pseudorandom number + read :1, // - fixed-length buffered input from a filehandle + readdir :1, // - get a directory from a directory handle + readline :1, // - fetch a record from a file + readlink :1, // - determine where a symbolic link is pointing + readpipe :1, // - execute a system command and collect standard output + recv :1, // - receive a message over a Socket + redo :1, // - start this loop iteration over again + ref :1, // - find out the type of thing being referenced + rename :1, // - change a filename + require :1, // - load in external functions from a library at runtime + reset :1, // - clear all variables of a given name + 'return' :1, // - get out of a function early + reverse :1, // - flip a string or a list + rewinddir :1, // - reset directory handle + rindex :1, // - right-to-left substring search + rmdir :1, // - remove a directory + s :null, // - replace a pattern with a string + say :1, // - print with newline + scalar :1, // - force a scalar context + seek :1, // - reposition file pointer for random-access I/O + seekdir :1, // - reposition directory pointer + select :1, // - reset default output or do I/O multiplexing + semctl :1, // - SysV semaphore control operations + semget :1, // - get set of SysV semaphores + semop :1, // - SysV semaphore operations + send :1, // - send a message over a socket + setgrent :1, // - prepare group file for use + sethostent :1, // - prepare hosts file for use + setnetent :1, // - prepare networks file for use + setpgrp :1, // - set the process group of a process + setpriority :1, // - set a process's nice value + setprotoent :1, // - prepare protocols file for use + setpwent :1, // - prepare passwd file for use + setservent :1, // - prepare services file for use + setsockopt :1, // - set some socket options + shift :1, // - remove the first element of an array, and return it + shmctl :1, // - SysV shared memory operations + shmget :1, // - get SysV shared memory segment identifier + shmread :1, // - read SysV shared memory + shmwrite :1, // - write SysV shared memory + shutdown :1, // - close down just half of a socket connection + 'sin' :1, // - return the sine of a number + sleep :1, // - block for some number of seconds + socket :1, // - create a socket + socketpair :1, // - create a pair of sockets + 'sort' :1, // - sort a list of values + splice :1, // - add or remove elements anywhere in an array + 'split' :1, // - split up a string using a regexp delimiter + sprintf :1, // - formatted print into a string + 'sqrt' :1, // - square root function + srand :1, // - seed the random number generator + stat :1, // - get a file's status information + state :1, // - declare and assign a state variable (persistent lexical scoping) + study :1, // - optimize input data for repeated searches + 'sub' :1, // - declare a subroutine, possibly anonymously + 'substr' :1, // - get or alter a portion of a stirng + symlink :1, // - create a symbolic link to a file + syscall :1, // - execute an arbitrary system call + sysopen :1, // - open a file, pipe, or descriptor + sysread :1, // - fixed-length unbuffered input from a filehandle + sysseek :1, // - position I/O pointer on handle used with sysread and syswrite + system :1, // - run a separate program + syswrite :1, // - fixed-length unbuffered output to a filehandle + tell :1, // - get current seekpointer on a filehandle + telldir :1, // - get current seekpointer on a directory handle + tie :1, // - bind a variable to an object class + tied :1, // - get a reference to the object underlying a tied variable + time :1, // - return number of seconds since 1970 + times :1, // - return elapsed time for self and child processes + tr :null, // - transliterate a string + truncate :1, // - shorten a file + uc :1, // - return upper-case version of a string + ucfirst :1, // - return a string with just the next letter in upper case + umask :1, // - set file creation mode mask + undef :1, // - remove a variable or function definition + unlink :1, // - remove one link to a file + unpack :1, // - convert binary structure into normal perl variables + unshift :1, // - prepend more elements to the beginning of a list + untie :1, // - break a tie binding to a variable + use :1, // - load in a module at compile time + utime :1, // - set a file's last access and modify times + values :1, // - return a list of the values in a hash + vec :1, // - test or set particular bits in a string + wait :1, // - wait for any child process to die + waitpid :1, // - wait for a particular child process to die + wantarray :1, // - get void vs scalar vs list context of current subroutine call + warn :1, // - print debugging info + when :1, // + write :1, // - print a picture record + y :null}; // - transliterate a string + + var RXstyle="string-2"; + var RXmodifiers=/[goseximacplud]/; // NOTE: "m", "s", "y" and "tr" need to correct real modifiers for each regexp type + + function tokenChain(stream,state,chain,style,tail){ // NOTE: chain.length > 2 is not working now (it's for s[...][...]geos;) + state.chain=null; // 12 3tail + state.style=null; + state.tail=null; + state.tokenize=function(stream,state){ + var e=false,c,i=0; + while(c=stream.next()){ + if(c===chain[i]&&!e){ + if(chain[++i]!==undefined){ + state.chain=chain[i]; + state.style=style; + state.tail=tail;} + else if(tail) + stream.eatWhile(tail); + state.tokenize=tokenPerl; + return style;} + e=!e&&c=="\\";} + return style;}; + return state.tokenize(stream,state);} + + function tokenSOMETHING(stream,state,string){ + state.tokenize=function(stream,state){ + if(stream.string==string) + state.tokenize=tokenPerl; + stream.skipToEnd(); + return "string";}; + return state.tokenize(stream,state);} + + function tokenPerl(stream,state){ + if(stream.eatSpace()) + return null; + if(state.chain) + return tokenChain(stream,state,state.chain,state.style,state.tail); + if(stream.match(/^\-?[\d\.]/,false)) + if(stream.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/)) + return 'number'; + if(stream.match(/^<<(?=\w)/)){ // NOTE: <"],RXstyle,RXmodifiers);} + if(/[\^'"!~\/]/.test(c)){ + stream.eatSuffix(1); + return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} + else if(c=="q"){ + c=stream.look(1); + if(c=="("){ + stream.eatSuffix(2); + return tokenChain(stream,state,[")"],"string");} + if(c=="["){ + stream.eatSuffix(2); + return tokenChain(stream,state,["]"],"string");} + if(c=="{"){ +stream.eatSuffix(2); + return tokenChain(stream,state,["}"],"string");} + if(c=="<"){ + stream.eatSuffix(2); + return tokenChain(stream,state,[">"],"string");} + if(/[\^'"!~\/]/.test(c)){ + stream.eatSuffix(1); + return tokenChain(stream,state,[stream.eat(c)],"string");}} + else if(c=="w"){ + c=stream.look(1); + if(c=="("){ + stream.eatSuffix(2); + return tokenChain(stream,state,[")"],"bracket");} + if(c=="["){ + stream.eatSuffix(2); + return tokenChain(stream,state,["]"],"bracket");} + if(c=="{"){ + stream.eatSuffix(2); + return tokenChain(stream,state,["}"],"bracket");} + if(c=="<"){ + stream.eatSuffix(2); + return tokenChain(stream,state,[">"],"bracket");} + if(/[\^'"!~\/]/.test(c)){ + stream.eatSuffix(1); + return tokenChain(stream,state,[stream.eat(c)],"bracket");}} + else if(c=="r"){ + c=stream.look(1); + if(c=="("){ + stream.eatSuffix(2); + return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} + if(c=="["){ + stream.eatSuffix(2); + return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} + if(c=="{"){ + stream.eatSuffix(2); + return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} + if(c=="<"){ + stream.eatSuffix(2); + return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);} + if(/[\^'"!~\/]/.test(c)){ + stream.eatSuffix(1); + return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} + else if(/[\^'"!~\/(\[{<]/.test(c)){ + if(c=="("){ + stream.eatSuffix(1); + return tokenChain(stream,state,[")"],"string");} + if(c=="["){ + stream.eatSuffix(1); + return tokenChain(stream,state,["]"],"string");} + if(c=="{"){ + stream.eatSuffix(1); + return tokenChain(stream,state,["}"],"string");} + if(c=="<"){ + stream.eatSuffix(1); + return tokenChain(stream,state,[">"],"string");} + if(/[\^'"!~\/]/.test(c)){ + return tokenChain(stream,state,[stream.eat(c)],"string");}}}} + if(ch=="m"){ + var c=stream.look(-2); + if(!(c&&/\w/.test(c))){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(/[\^'"!~\/]/.test(c)){ + return tokenChain(stream,state,[c],RXstyle,RXmodifiers);} + if(c=="("){ + return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} + if(c=="["){ + return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} + if(c=="{"){ + return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} + if(c=="<"){ + return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}}}} + if(ch=="s"){ + var c=/[\/>\]})\w]/.test(stream.look(-2)); + if(!c){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(c=="[") + return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); + if(c=="{") + return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); + if(c=="<") + return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); + if(c=="(") + return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); + return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} + if(ch=="y"){ + var c=/[\/>\]})\w]/.test(stream.look(-2)); + if(!c){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(c=="[") + return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); + if(c=="{") + return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); + if(c=="<") + return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); + if(c=="(") + return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); + return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} + if(ch=="t"){ + var c=/[\/>\]})\w]/.test(stream.look(-2)); + if(!c){ + c=stream.eat("r");if(c){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(c=="[") + return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); + if(c=="{") + return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); + if(c=="<") + return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); + if(c=="(") + return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); + return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}} + if(ch=="`"){ + return tokenChain(stream,state,[ch],"variable-2");} + if(ch=="/"){ + if(!/~\s*$/.test(stream.prefix())) + return "operator"; + else + return tokenChain(stream,state,[ch],RXstyle,RXmodifiers);} + if(ch=="$"){ + var p=stream.pos; + if(stream.eatWhile(/\d/)||stream.eat("{")&&stream.eatWhile(/\d/)&&stream.eat("}")) + return "variable-2"; + else + stream.pos=p;} + if(/[$@%]/.test(ch)){ + var p=stream.pos; + if(stream.eat("^")&&stream.eat(/[A-Z]/)||!/[@$%&]/.test(stream.look(-2))&&stream.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){ + var c=stream.current(); + if(PERL[c]) + return "variable-2";} + stream.pos=p;} + if(/[$@%&]/.test(ch)){ + if(stream.eatWhile(/[\w$\[\]]/)||stream.eat("{")&&stream.eatWhile(/[\w$\[\]]/)&&stream.eat("}")){ + var c=stream.current(); + if(PERL[c]) + return "variable-2"; + else + return "variable";}} + if(ch=="#"){ + if(stream.look(-2)!="$"){ + stream.skipToEnd(); + return "comment";}} + if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(ch)){ + var p=stream.pos; + stream.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/); + if(PERL[stream.current()]) + return "operator"; + else + stream.pos=p;} + if(ch=="_"){ + if(stream.pos==1){ + if(stream.suffix(6)=="_END__"){ + return tokenChain(stream,state,['\0'],"comment");} + else if(stream.suffix(7)=="_DATA__"){ + return tokenChain(stream,state,['\0'],"variable-2");} + else if(stream.suffix(7)=="_C__"){ + return tokenChain(stream,state,['\0'],"string");}}} + if(/\w/.test(ch)){ + var p=stream.pos; + if(stream.look(-2)=="{"&&(stream.look(0)=="}"||stream.eatWhile(/\w/)&&stream.look(0)=="}")) + return "string"; + else + stream.pos=p;} + if(/[A-Z]/.test(ch)){ + var l=stream.look(-2); + var p=stream.pos; + stream.eatWhile(/[A-Z_]/); + if(/[\da-z]/.test(stream.look(0))){ + stream.pos=p;} + else{ + var c=PERL[stream.current()]; + if(!c) + return "meta"; + if(c[1]) + c=c[0]; + if(l!=":"){ + if(c==1) + return "keyword"; + else if(c==2) + return "def"; + else if(c==3) + return "atom"; + else if(c==4) + return "operator"; + else if(c==5) + return "variable-2"; + else + return "meta";} + else + return "meta";}} + if(/[a-zA-Z_]/.test(ch)){ + var l=stream.look(-2); + stream.eatWhile(/\w/); + var c=PERL[stream.current()]; + if(!c) + return "meta"; + if(c[1]) + c=c[0]; + if(l!=":"){ + if(c==1) + return "keyword"; + else if(c==2) + return "def"; + else if(c==3) + return "atom"; + else if(c==4) + return "operator"; + else if(c==5) + return "variable-2"; + else + return "meta";} + else + return "meta";} + return null;} + + return{ + startState:function(){ + return{ + tokenize:tokenPerl, + chain:null, + style:null, + tail:null};}, + token:function(stream,state){ + return (state.tokenize||tokenPerl)(stream,state);}, + electricChars:"{}"};}); + +CodeMirror.defineMIME("text/x-perl", "perl"); + +// it's like "peek", but need for look-ahead or look-behind if index < 0 +CodeMirror.StringStream.prototype.look=function(c){ + return this.string.charAt(this.pos+(c||0));}; + +// return a part of prefix of current stream from current position +CodeMirror.StringStream.prototype.prefix=function(c){ + if(c){ + var x=this.pos-c; + return this.string.substr((x>=0?x:0),c);} + else{ + return this.string.substr(0,this.pos-1);}}; + +// return a part of suffix of current stream from current position +CodeMirror.StringStream.prototype.suffix=function(c){ + var y=this.string.length; + var x=y-this.pos+1; + return this.string.substr(this.pos,(c&&c=(y=this.string.length-1)) + this.pos=y; + else + this.pos=x;}; diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/php/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/php/index.html new file mode 100644 index 0000000..3d4c336 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/php/index.html @@ -0,0 +1,51 @@ + + + + + CodeMirror: PHP mode + + + + + + + + + + + + + +

              CodeMirror: PHP mode

              + +
              + + + +

              Simple HTML/PHP mode based on + the C-like mode. Depends on XML, + JavaScript, CSS, HTMLMixed, and C-like modes.

              + +

              MIME types defined: application/x-httpd-php (HTML with PHP code), text/x-php (plain, non-wrapped PHP code).

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/php/php.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/php/php.js new file mode 100644 index 0000000..fa0db5b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/php/php.js @@ -0,0 +1,132 @@ +(function() { + function keywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + function heredoc(delim) { + return function(stream, state) { + if (stream.match(delim)) state.tokenize = null; + else stream.skipToEnd(); + return "string"; + }; + } + var phpConfig = { + name: "clike", + keywords: keywords("abstract and array as break case catch class clone const continue declare default " + + "do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final " + + "for foreach function global goto if implements interface instanceof namespace " + + "new or private protected public static switch throw trait try use var while xor " + + "die echo empty exit eval include include_once isset list require require_once return " + + "print unset __halt_compiler self static parent"), + blockKeywords: keywords("catch do else elseif for foreach if switch try while"), + atoms: keywords("true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__"), + builtin: keywords("func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport echo print global static exit array empty eval isset unset die include require include_once require_once"), + multiLineStrings: true, + hooks: { + "$": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "variable-2"; + }, + "<": function(stream, state) { + if (stream.match(/<", false)) stream.next(); + return "comment"; + }, + "/": function(stream) { + if (stream.eat("/")) { + while (!stream.eol() && !stream.match("?>", false)) stream.next(); + return "comment"; + } + return false; + } + } + }; + + CodeMirror.defineMode("php", function(config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, "text/html"); + var phpMode = CodeMirror.getMode(config, phpConfig); + + function dispatch(stream, state) { + var isPHP = state.curMode == phpMode; + if (stream.sol() && state.pending != '"') state.pending = null; + if (!isPHP) { + if (stream.match(/^<\?\w*/)) { + state.curMode = phpMode; + state.curState = state.php; + return "meta"; + } + if (state.pending == '"') { + while (!stream.eol() && stream.next() != '"') {} + var style = "string"; + } else if (state.pending && stream.pos < state.pending.end) { + stream.pos = state.pending.end; + var style = state.pending.style; + } else { + var style = htmlMode.token(stream, state.curState); + } + state.pending = null; + var cur = stream.current(), openPHP = cur.search(/<\?/); + if (openPHP != -1) { + if (style == "string" && /\"$/.test(cur) && !/\?>/.test(cur)) state.pending = '"'; + else state.pending = {end: stream.pos, style: style}; + stream.backUp(cur.length - openPHP); + } + return style; + } else if (isPHP && state.php.tokenize == null && stream.match("?>")) { + state.curMode = htmlMode; + state.curState = state.html; + return "meta"; + } else { + return phpMode.token(stream, state.curState); + } + } + + return { + startState: function() { + var html = CodeMirror.startState(htmlMode), php = CodeMirror.startState(phpMode); + return {html: html, + php: php, + curMode: parserConfig.startOpen ? phpMode : htmlMode, + curState: parserConfig.startOpen ? php : html, + pending: null}; + }, + + copyState: function(state) { + var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html), + php = state.php, phpNew = CodeMirror.copyState(phpMode, php), cur; + if (state.curMode == htmlMode) cur = htmlNew; + else cur = phpNew; + return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur, + pending: state.pending}; + }, + + token: dispatch, + + indent: function(state, textAfter) { + if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) || + (state.curMode == phpMode && /^\?>/.test(textAfter))) + return htmlMode.indent(state.html, textAfter); + return state.curMode.indent(state.curState, textAfter); + }, + + electricChars: "/{}:", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + + innerMode: function(state) { return {state: state.curState, mode: state.curMode}; } + }; + }, "htmlmixed", "clike"); + + CodeMirror.defineMIME("application/x-httpd-php", "php"); + CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true}); + CodeMirror.defineMIME("text/x-php", phpConfig); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pig/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pig/index.html new file mode 100644 index 0000000..1b0c602 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pig/index.html @@ -0,0 +1,42 @@ + + + + + CodeMirror: Pig Latin mode + + + + + + + +

              CodeMirror: Pig Latin mode

              + +
              + + + +

              + Simple mode that handles Pig Latin language. +

              + +

              MIME type defined: text/x-pig + (PIG code) + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pig/pig.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pig/pig.js new file mode 100644 index 0000000..c2f611a --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/pig/pig.js @@ -0,0 +1,171 @@ +/* + * Pig Latin Mode for CodeMirror 2 + * @author Prasanth Jayachandran + * @link https://github.com/prasanthj/pig-codemirror-2 + * This implementation is adapted from PL/SQL mode in CodeMirror 2. + */ +CodeMirror.defineMode("pig", function(_config, parserConfig) { + var keywords = parserConfig.keywords, + builtins = parserConfig.builtins, + types = parserConfig.types, + multiLineStrings = parserConfig.multiLineStrings; + + var isOperatorChar = /[*+\-%<>=&?:\/!|]/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + var type; + function ret(tp, style) { + type = tp; + return style; + } + + function tokenComment(stream, state) { + var isEnd = false; + var ch; + while(ch = stream.next()) { + if(ch == "/" && isEnd) { + state.tokenize = tokenBase; + break; + } + isEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while((next = stream.next()) != null) { + if (next == quote && !escaped) { + end = true; break; + } + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = tokenBase; + return ret("string", "error"); + }; + } + + function tokenBase(stream, state) { + var ch = stream.next(); + + // is a start of string? + if (ch == '"' || ch == "'") + return chain(stream, state, tokenString(ch)); + // is it one of the special chars + else if(/[\[\]{}\(\),;\.]/.test(ch)) + return ret(ch); + // is it a number? + else if(/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return ret("number", "number"); + } + // multi line comment or operator + else if (ch == "/") { + if (stream.eat("*")) { + return chain(stream, state, tokenComment); + } + else { + stream.eatWhile(isOperatorChar); + return ret("operator", "operator"); + } + } + // single line comment or operator + else if (ch=="-") { + if(stream.eat("-")){ + stream.skipToEnd(); + return ret("comment", "comment"); + } + else { + stream.eatWhile(isOperatorChar); + return ret("operator", "operator"); + } + } + // is it an operator + else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return ret("operator", "operator"); + } + else { + // get the while word + stream.eatWhile(/[\w\$_]/); + // is it one of the listed keywords? + if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { + if (stream.eat(")") || stream.eat(".")) { + //keywords can be used as variables like flatten(group), group.$0 etc.. + } + else { + return ("keyword", "keyword"); + } + } + // is it one of the builtin functions? + if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) + { + return ("keyword", "variable-2"); + } + // is it one of the listed types? + if (types && types.propertyIsEnumerable(stream.current().toUpperCase())) + return ("keyword", "variable-3"); + // default is a 'variable' + return ret("variable", "pig-word"); + } + } + + // Interface + return { + startState: function() { + return { + tokenize: tokenBase, + startOfLine: true + }; + }, + + token: function(stream, state) { + if(stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + return style; + } + }; +}); + +(function() { + function keywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + // builtin funcs taken from trunk revision 1303237 + var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL " + + "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS " + + "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG " + + "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN " + + "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER " + + "ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS " + + "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA " + + "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE " + + "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG " + + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER "; + + // taken from QueryLexer.g + var pKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP " + + "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL " + + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE " + + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE " + + "NEQ MATCHES TRUE FALSE "; + + // data types + var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP "; + + CodeMirror.defineMIME("text/x-pig", { + name: "pig", + builtins: keywords(pBuiltins), + keywords: keywords(pKeywords), + types: keywords(pTypes) + }); +}()); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/properties/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/properties/index.html new file mode 100644 index 0000000..e21e02a --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/properties/index.html @@ -0,0 +1,41 @@ + + + + + CodeMirror: Properties files mode + + + + + + + +

              CodeMirror: Properties files mode

              +
              + + +

              MIME types defined: text/x-properties, + text/x-ini.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/properties/properties.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/properties/properties.js new file mode 100644 index 0000000..d3a13c7 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/properties/properties.js @@ -0,0 +1,63 @@ +CodeMirror.defineMode("properties", function() { + return { + token: function(stream, state) { + var sol = stream.sol() || state.afterSection; + var eol = stream.eol(); + + state.afterSection = false; + + if (sol) { + if (state.nextMultiline) { + state.inMultiline = true; + state.nextMultiline = false; + } else { + state.position = "def"; + } + } + + if (eol && ! state.nextMultiline) { + state.inMultiline = false; + state.position = "def"; + } + + if (sol) { + while(stream.eatSpace()); + } + + var ch = stream.next(); + + if (sol && (ch === "#" || ch === "!" || ch === ";")) { + state.position = "comment"; + stream.skipToEnd(); + return "comment"; + } else if (sol && ch === "[") { + state.afterSection = true; + stream.skipTo("]"); stream.eat("]"); + return "header"; + } else if (ch === "=" || ch === ":") { + state.position = "quote"; + return null; + } else if (ch === "\\" && state.position === "quote") { + if (stream.next() !== "u") { // u = Unicode sequence \u1234 + // Multiline value + state.nextMultiline = true; + } + } + + return state.position; + }, + + startState: function() { + return { + position : "def", // Current position, "def", "quote" or "comment" + nextMultiline : false, // Is the next line multiline value + inMultiline : false, // Is the current line a multiline value + afterSection : false // Did we just open a section + }; + } + + }; +}); + +CodeMirror.defineMIME("text/x-properties", "properties"); +CodeMirror.defineMIME("text/x-ini", "properties"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/python/LICENSE.txt b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/python/LICENSE.txt new file mode 100644 index 0000000..918866b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/python/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2010 Timothy Farrell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/python/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/python/index.html new file mode 100644 index 0000000..1229a8b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/python/index.html @@ -0,0 +1,175 @@ + + + + + CodeMirror: Python mode + + + + + + + + +

              CodeMirror: Python mode

              +

              Python mode

              +
              + + +

              Cython mode

              + +
              + + +

              Configuration Options for Python mode:

              +
                +
              • version - 2/3 - The version of Python to recognize. Default is 2.
              • +
              • singleLineStringErrors - true/false - If you have a single-line string that is not terminated at the end of the line, this will show subsequent lines as errors if true, otherwise it will consider the newline as the end of the string. Default is false.
              • +
              +

              Advanced Configuration Options:

              +

              Usefull for superset of python syntax like Enthought enaml, IPython magics and questionmark help

              +
                +
              • singleOperators - RegEx - Regular Expression for single operator matching, default :
                ^[\\+\\-\\*/%&|\\^~<>!]
              • +
              • singleDelimiters - RegEx - Regular Expression for single delimiter matching, default :
                ^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]
              • +
              • doubleOperators - RegEx - Regular Expression for double operators matching, default :
                ^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))
              • +
              • doubleDelimiters - RegEx - Regular Expressoin for double delimiters matching, default :
                ^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))
              • +
              • tripleDelimiters - RegEx - Regular Expression for triple delimiters matching, default :
                ^((//=)|(>>=)|(<<=)|(\\*\\*=))
              • +
              • identifiers - RegEx - Regular Expression for identifier, default :
                ^[_A-Za-z][_A-Za-z0-9]*
              • +
              • extra_keywords - list of string - List of extra words ton consider as keywords
              • +
              • extra_builtins - list of string - List of extra words ton consider as builtins
              • +
              + + +

              MIME types defined: text/x-python and text/x-cython.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/python/python.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/python/python.js new file mode 100644 index 0000000..4fe4d28 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/python/python.js @@ -0,0 +1,358 @@ +CodeMirror.defineMode("python", function(conf, parserConf) { + var ERRORCLASS = 'error'; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var singleOperators = parserConf.singleOperators || new RegExp("^[\\+\\-\\*/%&|\\^~<>!]"); + var singleDelimiters = parserConf.singleDelimiters || new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]'); + var doubleOperators = parserConf.doubleOperators || new RegExp("^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"); + var doubleDelimiters = parserConf.doubleDelimiters || new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); + var tripleDelimiters = parserConf.tripleDelimiters || new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"); + var identifiers = parserConf.identifiers|| new RegExp("^[_A-Za-z][_A-Za-z0-9]*"); + + var wordOperators = wordRegexp(['and', 'or', 'not', 'is', 'in']); + var commonkeywords = ['as', 'assert', 'break', 'class', 'continue', + 'def', 'del', 'elif', 'else', 'except', 'finally', + 'for', 'from', 'global', 'if', 'import', + 'lambda', 'pass', 'raise', 'return', + 'try', 'while', 'with', 'yield']; + var commonBuiltins = ['abs', 'all', 'any', 'bin', 'bool', 'bytearray', 'callable', 'chr', + 'classmethod', 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', + 'enumerate', 'eval', 'filter', 'float', 'format', 'frozenset', + 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', + 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', + 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', + 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range', + 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', + 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', + 'type', 'vars', 'zip', '__import__', 'NotImplemented', + 'Ellipsis', '__debug__']; + var py2 = {'builtins': ['apply', 'basestring', 'buffer', 'cmp', 'coerce', 'execfile', + 'file', 'intern', 'long', 'raw_input', 'reduce', 'reload', + 'unichr', 'unicode', 'xrange', 'False', 'True', 'None'], + 'keywords': ['exec', 'print']}; + var py3 = {'builtins': ['ascii', 'bytes', 'exec', 'print'], + 'keywords': ['nonlocal', 'False', 'True', 'None']}; + + if(parserConf.extra_keywords != undefined){ + commonkeywords = commonkeywords.concat(parserConf.extra_keywords); + } + if(parserConf.extra_builtins != undefined){ + commonBuiltins = commonBuiltins.concat(parserConf.extra_builtins); + } + if (!!parserConf.version && parseInt(parserConf.version, 10) === 3) { + commonkeywords = commonkeywords.concat(py3.keywords); + commonBuiltins = commonBuiltins.concat(py3.builtins); + var stringPrefixes = new RegExp("^(([rb]|(br))?('{3}|\"{3}|['\"]))", "i"); + } else { + commonkeywords = commonkeywords.concat(py2.keywords); + commonBuiltins = commonBuiltins.concat(py2.builtins); + var stringPrefixes = new RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i"); + } + var keywords = wordRegexp(commonkeywords); + var builtins = wordRegexp(commonBuiltins); + + var indentInfo = null; + + // tokenizers + function tokenBase(stream, state) { + // Handle scope changes + if (stream.sol()) { + var scopeOffset = state.scopes[0].offset; + if (stream.eatSpace()) { + var lineOffset = stream.indentation(); + if (lineOffset > scopeOffset) { + indentInfo = 'indent'; + } else if (lineOffset < scopeOffset) { + indentInfo = 'dedent'; + } + return null; + } else { + if (scopeOffset > 0) { + dedent(stream, state); + } + } + } + if (stream.eatSpace()) { + return null; + } + + var ch = stream.peek(); + + // Handle Comments + if (ch === '#') { + stream.skipToEnd(); + return 'comment'; + } + + // Handle Number Literals + if (stream.match(/^[0-9\.]/, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^\d*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } + if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } + if (stream.match(/^\.\d+/)) { floatLiteral = true; } + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return 'number'; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^0x[0-9a-f]+/i)) { intLiteral = true; } + // Binary + if (stream.match(/^0b[01]+/i)) { intLiteral = true; } + // Octal + if (stream.match(/^0o[0-7]+/i)) { intLiteral = true; } + // Decimal + if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return 'number'; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + // Handle operators and Delimiters + if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) { + return null; + } + if (stream.match(doubleOperators) + || stream.match(singleOperators) + || stream.match(wordOperators)) { + return 'operator'; + } + if (stream.match(singleDelimiters)) { + return null; + } + + if (stream.match(keywords)) { + return 'keyword'; + } + + if (stream.match(builtins)) { + return 'builtin'; + } + + if (stream.match(identifiers)) { + return 'variable'; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenStringFactory(delimiter) { + while ('rub'.indexOf(delimiter.charAt(0).toLowerCase()) >= 0) { + delimiter = delimiter.substr(1); + } + var singleline = delimiter.length == 1; + var OUTCLASS = 'string'; + + function tokenString(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"\\]/); + if (stream.eat('\\')) { + stream.next(); + if (singleline && stream.eol()) { + return OUTCLASS; + } + } else if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) { + return ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return OUTCLASS; + } + tokenString.isString = true; + return tokenString; + } + + function indent(stream, state, type) { + type = type || 'py'; + var indentUnit = 0; + if (type === 'py') { + if (state.scopes[0].type !== 'py') { + state.scopes[0].offset = stream.indentation(); + return; + } + for (var i = 0; i < state.scopes.length; ++i) { + if (state.scopes[i].type === 'py') { + indentUnit = state.scopes[i].offset + conf.indentUnit; + break; + } + } + } else { + indentUnit = stream.column() + stream.current().length; + } + state.scopes.unshift({ + offset: indentUnit, + type: type + }); + } + + function dedent(stream, state, type) { + type = type || 'py'; + if (state.scopes.length == 1) return; + if (state.scopes[0].type === 'py') { + var _indent = stream.indentation(); + var _indent_index = -1; + for (var i = 0; i < state.scopes.length; ++i) { + if (_indent === state.scopes[i].offset) { + _indent_index = i; + break; + } + } + if (_indent_index === -1) { + return true; + } + while (state.scopes[0].offset !== _indent) { + state.scopes.shift(); + } + return false; + } else { + if (type === 'py') { + state.scopes[0].offset = stream.indentation(); + return false; + } else { + if (state.scopes[0].type != type) { + return true; + } + state.scopes.shift(); + return false; + } + } + } + + function tokenLexer(stream, state) { + indentInfo = null; + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle '.' connected identifiers + if (current === '.') { + style = stream.match(identifiers, false) ? null : ERRORCLASS; + if (style === null && state.lastToken === 'meta') { + // Apply 'meta' style to '.' connected identifiers when + // appropriate. + style = 'meta'; + } + return style; + } + + // Handle decorators + if (current === '@') { + return stream.match(identifiers, false) ? 'meta' : ERRORCLASS; + } + + if ((style === 'variable' || style === 'builtin') + && state.lastToken === 'meta') { + style = 'meta'; + } + + // Handle scope changes. + if (current === 'pass' || current === 'return') { + state.dedent += 1; + } + if (current === 'lambda') state.lambda = true; + if ((current === ':' && !state.lambda && state.scopes[0].type == 'py') + || indentInfo === 'indent') { + indent(stream, state); + } + var delimiter_index = '[({'.indexOf(current); + if (delimiter_index !== -1) { + indent(stream, state, '])}'.slice(delimiter_index, delimiter_index+1)); + } + if (indentInfo === 'dedent') { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + delimiter_index = '])}'.indexOf(current); + if (delimiter_index !== -1) { + if (dedent(stream, state, current)) { + return ERRORCLASS; + } + } + if (state.dedent > 0 && stream.eol() && state.scopes[0].type == 'py') { + if (state.scopes.length > 1) state.scopes.shift(); + state.dedent -= 1; + } + + return style; + } + + var external = { + startState: function(basecolumn) { + return { + tokenize: tokenBase, + scopes: [{offset:basecolumn || 0, type:'py'}], + lastToken: null, + lambda: false, + dedent: 0 + }; + }, + + token: function(stream, state) { + var style = tokenLexer(stream, state); + + state.lastToken = style; + + if (stream.eol() && state.lambda) { + state.lambda = false; + } + + return style; + }, + + indent: function(state) { + if (state.tokenize != tokenBase) { + return state.tokenize.isString ? CodeMirror.Pass : 0; + } + + return state.scopes[0].offset; + }, + + lineComment: "#", + fold: "indent" + }; + return external; +}); + +CodeMirror.defineMIME("text/x-python", "python"); + +var words = function(str){return str.split(' ');}; + + +CodeMirror.defineMIME("text/x-cython", { + name: "python", + extra_keywords: words("by cdef cimport cpdef ctypedef enum except"+ + "extern gil include nogil property public"+ + "readonly struct union DEF IF ELIF ELSE") +}); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/q/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/q/index.html new file mode 100644 index 0000000..303ec1d --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/q/index.html @@ -0,0 +1,131 @@ + + + + + CodeMirror: Q mode + + + + + + + + +

              CodeMirror: Q mode

              + +
              + + + +

              MIME type defined: text/x-q.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/q/q.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/q/q.js new file mode 100644 index 0000000..56017e3 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/q/q.js @@ -0,0 +1,124 @@ +CodeMirror.defineMode("q",function(config){ + var indentUnit=config.indentUnit, + curPunc, + keywords=buildRE(["abs","acos","aj","aj0","all","and","any","asc","asin","asof","atan","attr","avg","avgs","bin","by","ceiling","cols","cor","cos","count","cov","cross","csv","cut","delete","deltas","desc","dev","differ","distinct","div","do","each","ej","enlist","eval","except","exec","exit","exp","fby","fills","first","fkeys","flip","floor","from","get","getenv","group","gtime","hclose","hcount","hdel","hopen","hsym","iasc","idesc","if","ij","in","insert","inter","inv","key","keys","last","like","list","lj","load","log","lower","lsq","ltime","ltrim","mavg","max","maxs","mcount","md5","mdev","med","meta","min","mins","mmax","mmin","mmu","mod","msum","neg","next","not","null","or","over","parse","peach","pj","plist","prd","prds","prev","prior","rand","rank","ratios","raze","read0","read1","reciprocal","reverse","rload","rotate","rsave","rtrim","save","scan","select","set","setenv","show","signum","sin","sqrt","ss","ssr","string","sublist","sum","sums","sv","system","tables","tan","til","trim","txf","type","uj","ungroup","union","update","upper","upsert","value","var","view","views","vs","wavg","where","where","while","within","wj","wj1","wsum","xasc","xbar","xcol","xcols","xdesc","xexp","xgroup","xkey","xlog","xprev","xrank"]), + E=/[|/&^!+:\\\-*%$=~#;@><,?_\'\"\[\(\]\)\s{}]/; + function buildRE(w){return new RegExp("^("+w.join("|")+")$");} + function tokenBase(stream,state){ + var sol=stream.sol(),c=stream.next(); + curPunc=null; + if(sol) + if(c=="/") + return(state.tokenize=tokenLineComment)(stream,state); + else if(c=="\\"){ + if(stream.eol()||/\s/.test(stream.peek())) + return stream.skipToEnd(),/^\\\s*$/.test(stream.current())?(state.tokenize=tokenCommentToEOF)(stream, state):state.tokenize=tokenBase,"comment"; + else + return state.tokenize=tokenBase,"builtin"; + } + if(/\s/.test(c)) + return stream.peek()=="/"?(stream.skipToEnd(),"comment"):"whitespace"; + if(c=='"') + return(state.tokenize=tokenString)(stream,state); + if(c=='`') + return stream.eatWhile(/[A-Z|a-z|\d|_|:|\/|\.]/),"symbol"; + if(("."==c&&/\d/.test(stream.peek()))||/\d/.test(c)){ + var t=null; + stream.backUp(1); + if(stream.match(/^\d{4}\.\d{2}(m|\.\d{2}([D|T](\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)?)?)/) + || stream.match(/^\d+D(\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)/) + || stream.match(/^\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?/) + || stream.match(/^\d+[ptuv]{1}/)) + t="temporal"; + else if(stream.match(/^0[NwW]{1}/) + || stream.match(/^0x[\d|a-f|A-F]*/) + || stream.match(/^[0|1]+[b]{1}/) + || stream.match(/^\d+[chijn]{1}/) + || stream.match(/-?\d*(\.\d*)?(e[+\-]?\d+)?(e|f)?/)) + t="number"; + return(t&&(!(c=stream.peek())||E.test(c)))?t:(stream.next(),"error"); + } + if(/[A-Z|a-z]|\./.test(c)) + return stream.eatWhile(/[A-Z|a-z|\.|_|\d]/),keywords.test(stream.current())?"keyword":"variable"; + if(/[|/&^!+:\\\-*%$=~#;@><\.,?_\']/.test(c)) + return null; + if(/[{}\(\[\]\)]/.test(c)) + return null; + return"error"; + } + function tokenLineComment(stream,state){ + return stream.skipToEnd(),/\/\s*$/.test(stream.current())?(state.tokenize=tokenBlockComment)(stream,state):(state.tokenize=tokenBase),"comment"; + } + function tokenBlockComment(stream,state){ + var f=stream.sol()&&stream.peek()=="\\"; + stream.skipToEnd(); + if(f&&/^\\\s*$/.test(stream.current())) + state.tokenize=tokenBase; + return"comment"; + } + function tokenCommentToEOF(stream){return stream.skipToEnd(),"comment";} + function tokenString(stream,state){ + var escaped=false,next,end=false; + while((next=stream.next())){ + if(next=="\""&&!escaped){end=true;break;} + escaped=!escaped&&next=="\\"; + } + if(end)state.tokenize=tokenBase; + return"string"; + } + function pushContext(state,type,col){state.context={prev:state.context,indent:state.indent,col:col,type:type};} + function popContext(state){state.indent=state.context.indent;state.context=state.context.prev;} + return{ + startState:function(){ + return{tokenize:tokenBase, + context:null, + indent:0, + col:0}; + }, + token:function(stream,state){ + if(stream.sol()){ + if(state.context&&state.context.align==null) + state.context.align=false; + state.indent=stream.indentation(); + } + //if (stream.eatSpace()) return null; + var style=state.tokenize(stream,state); + if(style!="comment"&&state.context&&state.context.align==null&&state.context.type!="pattern"){ + state.context.align=true; + } + if(curPunc=="(")pushContext(state,")",stream.column()); + else if(curPunc=="[")pushContext(state,"]",stream.column()); + else if(curPunc=="{")pushContext(state,"}",stream.column()); + else if(/[\]\}\)]/.test(curPunc)){ + while(state.context&&state.context.type=="pattern")popContext(state); + if(state.context&&curPunc==state.context.type)popContext(state); + } + else if(curPunc=="."&&state.context&&state.context.type=="pattern")popContext(state); + else if(/atom|string|variable/.test(style)&&state.context){ + if(/[\}\]]/.test(state.context.type)) + pushContext(state,"pattern",stream.column()); + else if(state.context.type=="pattern"&&!state.context.align){ + state.context.align=true; + state.context.col=stream.column(); + } + } + return style; + }, + indent:function(state,textAfter){ + var firstChar=textAfter&&textAfter.charAt(0); + var context=state.context; + if(/[\]\}]/.test(firstChar)) + while (context&&context.type=="pattern")context=context.prev; + var closing=context&&firstChar==context.type; + if(!context) + return 0; + else if(context.type=="pattern") + return context.col; + else if(context.align) + return context.col+(closing?0:1); + else + return context.indent+(closing?0:indentUnit); + } + }; +}); +CodeMirror.defineMIME("text/x-q","q"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/r/LICENSE b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/r/LICENSE new file mode 100644 index 0000000..2510ae1 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/r/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) 2011, Ubalo, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Ubalo, Inc nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL UBALO, INC BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/r/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/r/index.html new file mode 100644 index 0000000..1281955 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/r/index.html @@ -0,0 +1,74 @@ + + + + + CodeMirror: R mode + + + + + + + +

              CodeMirror: R mode

              +
              + + +

              MIME types defined: text/x-rsrc.

              + +

              Development of the CodeMirror R mode was kindly sponsored + by Ubalo, who hold + the license.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/r/r.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/r/r.js new file mode 100644 index 0000000..6410efb --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/r/r.js @@ -0,0 +1,141 @@ +CodeMirror.defineMode("r", function(config) { + function wordObj(str) { + var words = str.split(" "), res = {}; + for (var i = 0; i < words.length; ++i) res[words[i]] = true; + return res; + } + var atoms = wordObj("NULL NA Inf NaN NA_integer_ NA_real_ NA_complex_ NA_character_"); + var builtins = wordObj("list quote bquote eval return call parse deparse"); + var keywords = wordObj("if else repeat while function for in next break"); + var blockkeywords = wordObj("if else repeat while function for"); + var opChars = /[+\-*\/^<>=!&|~$:]/; + var curPunc; + + function tokenBase(stream, state) { + curPunc = null; + var ch = stream.next(); + if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } else if (ch == "0" && stream.eat("x")) { + stream.eatWhile(/[\da-f]/i); + return "number"; + } else if (ch == "." && stream.eat(/\d/)) { + stream.match(/\d*(?:e[+\-]?\d+)?/); + return "number"; + } else if (/\d/.test(ch)) { + stream.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/); + return "number"; + } else if (ch == "'" || ch == '"') { + state.tokenize = tokenString(ch); + return "string"; + } else if (ch == "." && stream.match(/.[.\d]+/)) { + return "keyword"; + } else if (/[\w\.]/.test(ch) && ch != "_") { + stream.eatWhile(/[\w\.]/); + var word = stream.current(); + if (atoms.propertyIsEnumerable(word)) return "atom"; + if (keywords.propertyIsEnumerable(word)) { + if (blockkeywords.propertyIsEnumerable(word)) curPunc = "block"; + return "keyword"; + } + if (builtins.propertyIsEnumerable(word)) return "builtin"; + return "variable"; + } else if (ch == "%") { + if (stream.skipTo("%")) stream.next(); + return "variable-2"; + } else if (ch == "<" && stream.eat("-")) { + return "arrow"; + } else if (ch == "=" && state.ctx.argList) { + return "arg-is"; + } else if (opChars.test(ch)) { + if (ch == "$") return "dollar"; + stream.eatWhile(opChars); + return "operator"; + } else if (/[\(\){}\[\];]/.test(ch)) { + curPunc = ch; + if (ch == ";") return "semi"; + return null; + } else { + return null; + } + } + + function tokenString(quote) { + return function(stream, state) { + if (stream.eat("\\")) { + var ch = stream.next(); + if (ch == "x") stream.match(/^[a-f0-9]{2}/i); + else if ((ch == "u" || ch == "U") && stream.eat("{") && stream.skipTo("}")) stream.next(); + else if (ch == "u") stream.match(/^[a-f0-9]{4}/i); + else if (ch == "U") stream.match(/^[a-f0-9]{8}/i); + else if (/[0-7]/.test(ch)) stream.match(/^[0-7]{1,2}/); + return "string-2"; + } else { + var next; + while ((next = stream.next()) != null) { + if (next == quote) { state.tokenize = tokenBase; break; } + if (next == "\\") { stream.backUp(1); break; } + } + return "string"; + } + }; + } + + function push(state, type, stream) { + state.ctx = {type: type, + indent: state.indent, + align: null, + column: stream.column(), + prev: state.ctx}; + } + function pop(state) { + state.indent = state.ctx.indent; + state.ctx = state.ctx.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, + ctx: {type: "top", + indent: -config.indentUnit, + align: false}, + indent: 0, + afterIdent: false}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.ctx.align == null) state.ctx.align = false; + state.indent = stream.indentation(); + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (style != "comment" && state.ctx.align == null) state.ctx.align = true; + + var ctype = state.ctx.type; + if ((curPunc == ";" || curPunc == "{" || curPunc == "}") && ctype == "block") pop(state); + if (curPunc == "{") push(state, "}", stream); + else if (curPunc == "(") { + push(state, ")", stream); + if (state.afterIdent) state.ctx.argList = true; + } + else if (curPunc == "[") push(state, "]", stream); + else if (curPunc == "block") push(state, "block", stream); + else if (curPunc == ctype) pop(state); + state.afterIdent = style == "variable" || style == "keyword"; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), ctx = state.ctx, + closing = firstChar == ctx.type; + if (ctx.type == "block") return ctx.indent + (firstChar == "{" ? 0 : config.indentUnit); + else if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indent + (closing ? 0 : config.indentUnit); + } + }; +}); + +CodeMirror.defineMIME("text/x-rsrc", "r"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/changes/changes.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/changes/changes.js new file mode 100644 index 0000000..14a08d9 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/changes/changes.js @@ -0,0 +1,19 @@ +CodeMirror.defineMode("changes", function() { + var headerSeperator = /^-+$/; + var headerLine = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ?\d{1,2} \d{2}:\d{2}(:\d{2})? [A-Z]{3,4} \d{4} - /; + var simpleEmail = /^[\w+.-]+@[\w.-]+/; + + return { + token: function(stream) { + if (stream.sol()) { + if (stream.match(headerSeperator)) { return 'tag'; } + if (stream.match(headerLine)) { return 'tag'; } + } + if (stream.match(simpleEmail)) { return 'string'; } + stream.next(); + return null; + } + }; +}); + +CodeMirror.defineMIME("text/x-rpm-changes", "changes"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/changes/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/changes/index.html new file mode 100644 index 0000000..e0e2d87 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/changes/index.html @@ -0,0 +1,53 @@ + + + + + CodeMirror: RPM changes mode + + + + + + + +

              CodeMirror: RPM changes mode

              + +
              + + +

              MIME types defined: text/x-rpm-changes.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/spec/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/spec/index.html new file mode 100644 index 0000000..8be98b6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/spec/index.html @@ -0,0 +1,99 @@ + + + + + CodeMirror: RPM spec mode + + + + + + + + +

              CodeMirror: RPM spec mode

              + +
              + + +

              MIME types defined: text/x-rpm-spec.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/spec/spec.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/spec/spec.css new file mode 100644 index 0000000..d0a5d43 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/spec/spec.css @@ -0,0 +1,5 @@ +.cm-s-default span.cm-preamble {color: #b26818; font-weight: bold;} +.cm-s-default span.cm-macro {color: #b218b2;} +.cm-s-default span.cm-section {color: green; font-weight: bold;} +.cm-s-default span.cm-script {color: red;} +.cm-s-default span.cm-issue {color: yellow;} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/spec/spec.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/spec/spec.js new file mode 100644 index 0000000..9f339c2 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rpm/spec/spec.js @@ -0,0 +1,66 @@ +// Quick and dirty spec file highlighting + +CodeMirror.defineMode("spec", function() { + var arch = /^(i386|i586|i686|x86_64|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/; + + var preamble = /^(Name|Version|Release|License|Summary|Url|Group|Source|BuildArch|BuildRequires|BuildRoot|AutoReqProv|Provides|Requires(\(\w+\))?|Obsoletes|Conflicts|Recommends|Source\d*|Patch\d*|ExclusiveArch|NoSource|Supplements):/; + var section = /^%(debug_package|package|description|prep|build|install|files|clean|changelog|preun|postun|pre|post|triggerin|triggerun|pretrans|posttrans|verifyscript|check|triggerpostun|triggerprein|trigger)/; + var control_flow_complex = /^%(ifnarch|ifarch|if)/; // rpm control flow macros + var control_flow_simple = /^%(else|endif)/; // rpm control flow macros + var operators = /^(\!|\?|\<\=|\<|\>\=|\>|\=\=|\&\&|\|\|)/; // operators in control flow macros + + return { + startState: function () { + return { + controlFlow: false, + macroParameters: false, + section: false + }; + }, + token: function (stream, state) { + var ch = stream.peek(); + if (ch == "#") { stream.skipToEnd(); return "comment"; } + + if (stream.sol()) { + if (stream.match(preamble)) { return "preamble"; } + if (stream.match(section)) { return "section"; } + } + + if (stream.match(/^\$\w+/)) { return "def"; } // Variables like '$RPM_BUILD_ROOT' + if (stream.match(/^\$\{\w+\}/)) { return "def"; } // Variables like '${RPM_BUILD_ROOT}' + + if (stream.match(control_flow_simple)) { return "keyword"; } + if (stream.match(control_flow_complex)) { + state.controlFlow = true; + return "keyword"; + } + if (state.controlFlow) { + if (stream.match(operators)) { return "operator"; } + if (stream.match(/^(\d+)/)) { return "number"; } + if (stream.eol()) { state.controlFlow = false; } + } + + if (stream.match(arch)) { return "number"; } + + // Macros like '%make_install' or '%attr(0775,root,root)' + if (stream.match(/^%[\w]+/)) { + if (stream.match(/^\(/)) { state.macroParameters = true; } + return "macro"; + } + if (state.macroParameters) { + if (stream.match(/^\d+/)) { return "number";} + if (stream.match(/^\)/)) { + state.macroParameters = false; + return "macro"; + } + } + if (stream.match(/^%\{\??[\w \-]+\}/)) { return "macro"; } // Macros like '%{defined fedora}' + + //TODO: Include bash script sub-parser (CodeMirror supports that) + stream.next(); + return null; + } + }; +}); + +CodeMirror.defineMIME("text/x-rpm-spec", "spec"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rst/LICENSE.txt b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rst/LICENSE.txt new file mode 100644 index 0000000..c40984a --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rst/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2013 Hasan Karahan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rst/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rst/index.html new file mode 100644 index 0000000..b3ab64b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rst/index.html @@ -0,0 +1,524 @@ + + + + + CodeMirror: reStructuredText mode + + + + + + + +

              CodeMirror: reStructuredText mode

              + +
              + + +

              + The python mode will be used for highlighting blocks + containing Python/IPython terminal sessions: blocks starting with + >>> (for Python) or In [num]: (for + IPython). + + Further, the stex mode will be used for highlighting + blocks containing LaTex code. +

              + +

              MIME types defined: text/x-rst.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rst/rst.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rst/rst.js new file mode 100644 index 0000000..508896d --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rst/rst.js @@ -0,0 +1,561 @@ +CodeMirror.defineMode('rst-base', function (config) { + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function format(string) { + var args = Array.prototype.slice.call(arguments, 1); + return string.replace(/{(\d+)}/g, function (match, n) { + return typeof args[n] != 'undefined' ? args[n] : match; + }); + } + + function AssertException(message) { + this.message = message; + } + + AssertException.prototype.toString = function () { + return 'AssertException: ' + this.message; + }; + + function assert(expression, message) { + if (!expression) throw new AssertException(message); + return expression; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + var mode_python = CodeMirror.getMode(config, 'python'); + var mode_stex = CodeMirror.getMode(config, 'stex'); + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + var SEPA = "\\s+"; + var TAIL = "(?:\\s*|\\W|$)", + rx_TAIL = new RegExp(format('^{0}', TAIL)); + + var NAME = + "(?:[^\\W\\d_](?:[\\w!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)", + rx_NAME = new RegExp(format('^{0}', NAME)); + var NAME_WWS = + "(?:[^\\W\\d_](?:[\\w\\s!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)"; + var REF_NAME = format('(?:{0}|`{1}`)', NAME, NAME_WWS); + + var TEXT1 = "(?:[^\\s\\|](?:[^\\|]*[^\\s\\|])?)"; + var TEXT2 = "(?:[^\\`]+)", + rx_TEXT2 = new RegExp(format('^{0}', TEXT2)); + + var rx_section = new RegExp( + "^([!'#$%&\"()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~])\\1{3,}\\s*$"); + var rx_explicit = new RegExp( + format('^\\.\\.{0}', SEPA)); + var rx_link = new RegExp( + format('^_{0}:{1}|^__:{1}', REF_NAME, TAIL)); + var rx_directive = new RegExp( + format('^{0}::{1}', REF_NAME, TAIL)); + var rx_substitution = new RegExp( + format('^\\|{0}\\|{1}{2}::{3}', TEXT1, SEPA, REF_NAME, TAIL)); + var rx_footnote = new RegExp( + format('^\\[(?:\\d+|#{0}?|\\*)]{1}', REF_NAME, TAIL)); + var rx_citation = new RegExp( + format('^\\[{0}\\]{1}', REF_NAME, TAIL)); + + var rx_substitution_ref = new RegExp( + format('^\\|{0}\\|', TEXT1)); + var rx_footnote_ref = new RegExp( + format('^\\[(?:\\d+|#{0}?|\\*)]_', REF_NAME)); + var rx_citation_ref = new RegExp( + format('^\\[{0}\\]_', REF_NAME)); + var rx_link_ref1 = new RegExp( + format('^{0}__?', REF_NAME)); + var rx_link_ref2 = new RegExp( + format('^`{0}`_', TEXT2)); + + var rx_role_pre = new RegExp( + format('^:{0}:`{1}`{2}', NAME, TEXT2, TAIL)); + var rx_role_suf = new RegExp( + format('^`{1}`:{0}:{2}', NAME, TEXT2, TAIL)); + var rx_role = new RegExp( + format('^:{0}:{1}', NAME, TAIL)); + + var rx_directive_name = new RegExp(format('^{0}', REF_NAME)); + var rx_directive_tail = new RegExp(format('^::{0}', TAIL)); + var rx_substitution_text = new RegExp(format('^\\|{0}\\|', TEXT1)); + var rx_substitution_sepa = new RegExp(format('^{0}', SEPA)); + var rx_substitution_name = new RegExp(format('^{0}', REF_NAME)); + var rx_substitution_tail = new RegExp(format('^::{0}', TAIL)); + var rx_link_head = new RegExp("^_"); + var rx_link_name = new RegExp(format('^{0}|_', REF_NAME)); + var rx_link_tail = new RegExp(format('^:{0}', TAIL)); + + var rx_verbatim = new RegExp('^::\\s*$'); + var rx_examples = new RegExp('^\\s+(?:>>>|In \\[\\d+\\]:)\\s'); + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_normal(stream, state) { + var token = null; + + if (stream.sol() && stream.match(rx_examples, false)) { + change(state, to_mode, { + mode: mode_python, local: mode_python.startState() + }); + } else if (stream.sol() && stream.match(rx_explicit)) { + change(state, to_explicit); + token = 'meta'; + } else if (stream.sol() && stream.match(rx_section)) { + change(state, to_normal); + token = 'header'; + } else if (phase(state) == rx_role_pre || + stream.match(rx_role_pre, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_role_pre, 1)); + assert(stream.match(/^:/)); + token = 'meta'; + break; + case 1: + change(state, to_normal, context(rx_role_pre, 2)); + assert(stream.match(rx_NAME)); + token = 'keyword'; + + if (stream.current().match(/^(?:math|latex)/)) { + state.tmp = { + mode: mode_stex, local: mode_stex.startState() + }; + } + break; + case 2: + change(state, to_normal, context(rx_role_pre, 3)); + assert(stream.match(/^:`/)); + token = 'meta'; + break; + case 3: + if (state.tmp) { + if (stream.peek() == '`') { + change(state, to_normal, context(rx_role_pre, 4)); + state.tmp = undefined; + break; + } + + token = state.tmp.mode.token(stream, state.tmp.local); + break; + } + + change(state, to_normal, context(rx_role_pre, 4)); + assert(stream.match(rx_TEXT2)); + token = 'string'; + break; + case 4: + change(state, to_normal, context(rx_role_pre, 5)); + assert(stream.match(/^`/)); + token = 'meta'; + break; + case 5: + change(state, to_normal, context(rx_role_pre, 6)); + assert(stream.match(rx_TAIL)); + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (phase(state) == rx_role_suf || + stream.match(rx_role_suf, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_role_suf, 1)); + assert(stream.match(/^`/)); + token = 'meta'; + break; + case 1: + change(state, to_normal, context(rx_role_suf, 2)); + assert(stream.match(rx_TEXT2)); + token = 'string'; + break; + case 2: + change(state, to_normal, context(rx_role_suf, 3)); + assert(stream.match(/^`:/)); + token = 'meta'; + break; + case 3: + change(state, to_normal, context(rx_role_suf, 4)); + assert(stream.match(rx_NAME)); + token = 'keyword'; + break; + case 4: + change(state, to_normal, context(rx_role_suf, 5)); + assert(stream.match(/^:/)); + token = 'meta'; + break; + case 5: + change(state, to_normal, context(rx_role_suf, 6)); + assert(stream.match(rx_TAIL)); + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (phase(state) == rx_role || stream.match(rx_role, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_role, 1)); + assert(stream.match(/^:/)); + token = 'meta'; + break; + case 1: + change(state, to_normal, context(rx_role, 2)); + assert(stream.match(rx_NAME)); + token = 'keyword'; + break; + case 2: + change(state, to_normal, context(rx_role, 3)); + assert(stream.match(/^:/)); + token = 'meta'; + break; + case 3: + change(state, to_normal, context(rx_role, 4)); + assert(stream.match(rx_TAIL)); + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (phase(state) == rx_substitution_ref || + stream.match(rx_substitution_ref, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_substitution_ref, 1)); + assert(stream.match(rx_substitution_text)); + token = 'variable-2'; + break; + case 1: + change(state, to_normal, context(rx_substitution_ref, 2)); + if (stream.match(/^_?_?/)) token = 'link'; + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (stream.match(rx_footnote_ref)) { + change(state, to_normal); + token = 'quote'; + } else if (stream.match(rx_citation_ref)) { + change(state, to_normal); + token = 'quote'; + } else if (stream.match(rx_link_ref1)) { + change(state, to_normal); + if (!stream.peek() || stream.peek().match(/^\W$/)) { + token = 'link'; + } + } else if (phase(state) == rx_link_ref2 || + stream.match(rx_link_ref2, false)) { + + switch (stage(state)) { + case 0: + if (!stream.peek() || stream.peek().match(/^\W$/)) { + change(state, to_normal, context(rx_link_ref2, 1)); + } else { + stream.match(rx_link_ref2); + } + break; + case 1: + change(state, to_normal, context(rx_link_ref2, 2)); + assert(stream.match(/^`/)); + token = 'link'; + break; + case 2: + change(state, to_normal, context(rx_link_ref2, 3)); + assert(stream.match(rx_TEXT2)); + break; + case 3: + change(state, to_normal, context(rx_link_ref2, 4)); + assert(stream.match(/^`_/)); + token = 'link'; + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (stream.match(rx_verbatim)) { + change(state, to_verbatim); + } + + else { + if (stream.next()) change(state, to_normal); + } + + return token; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_explicit(stream, state) { + var token = null; + + if (phase(state) == rx_substitution || + stream.match(rx_substitution, false)) { + + switch (stage(state)) { + case 0: + change(state, to_explicit, context(rx_substitution, 1)); + assert(stream.match(rx_substitution_text)); + token = 'variable-2'; + break; + case 1: + change(state, to_explicit, context(rx_substitution, 2)); + assert(stream.match(rx_substitution_sepa)); + break; + case 2: + change(state, to_explicit, context(rx_substitution, 3)); + assert(stream.match(rx_substitution_name)); + token = 'keyword'; + break; + case 3: + change(state, to_explicit, context(rx_substitution, 4)); + assert(stream.match(rx_substitution_tail)); + token = 'meta'; + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (phase(state) == rx_directive || + stream.match(rx_directive, false)) { + + switch (stage(state)) { + case 0: + change(state, to_explicit, context(rx_directive, 1)); + assert(stream.match(rx_directive_name)); + token = 'keyword'; + + if (stream.current().match(/^(?:math|latex)/)) + state.tmp_stex = true; + else if (stream.current().match(/^python/)) + state.tmp_py = true; + break; + case 1: + change(state, to_explicit, context(rx_directive, 2)); + assert(stream.match(rx_directive_tail)); + token = 'meta'; + break; + default: + if (stream.match(/^latex\s*$/) || state.tmp_stex) { + state.tmp_stex = undefined; + change(state, to_mode, { + mode: mode_stex, local: mode_stex.startState() + }); + } else if (stream.match(/^python\s*$/) || state.tmp_py) { + state.tmp_py = undefined; + change(state, to_mode, { + mode: mode_python, local: mode_python.startState() + }); + } + + else { + change(state, to_normal); + assert(stream.current() == ''); + } + } + } else if (phase(state) == rx_link || stream.match(rx_link, false)) { + + switch (stage(state)) { + case 0: + change(state, to_explicit, context(rx_link, 1)); + assert(stream.match(rx_link_head)); + assert(stream.match(rx_link_name)); + token = 'link'; + break; + case 1: + change(state, to_explicit, context(rx_link, 2)); + assert(stream.match(rx_link_tail)); + token = 'meta'; + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (stream.match(rx_footnote)) { + change(state, to_normal); + token = 'quote'; + } else if (stream.match(rx_citation)) { + change(state, to_normal); + token = 'quote'; + } + + else { + stream.eatSpace(); + if (stream.eol()) { + change(state, to_normal); + } else { + stream.skipToEnd(); + change(state, to_comment); + token = 'comment'; + } + } + + return token; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_comment(stream, state) { + return as_block(stream, state, 'comment'); + } + + function to_verbatim(stream, state) { + return as_block(stream, state, 'meta'); + } + + function as_block(stream, state, token) { + if (stream.eol() || stream.eatSpace()) { + stream.skipToEnd(); + return token; + } else { + change(state, to_normal); + return null; + } + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_mode(stream, state) { + + if (state.ctx.mode && state.ctx.local) { + + if (stream.sol()) { + if (!stream.eatSpace()) change(state, to_normal); + return null; + } + + try { + return state.ctx.mode.token(stream, state.ctx.local); + } catch (ex) { + change(state, to_normal); + return null; + } + } + + change(state, to_normal); + return null; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function context(phase, stage, mode, local) { + return {phase: phase, stage: stage, mode: mode, local: local}; + } + + function change(state, tok, ctx) { + state.tok = tok; + state.ctx = ctx || {}; + } + + function stage(state) { + return state.ctx.stage || 0; + } + + function phase(state) { + return state.ctx.phase; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + return { + startState: function () { + return {tok: to_normal, ctx: context(undefined, 0)}; + }, + + copyState: function (state) { + return {tok: state.tok, ctx: state.ctx}; + }, + + innerMode: function (state) { + return state.tmp ? {state: state.tmp.local, mode: state.tmp.mode} + : state.ctx ? {state: state.ctx.local, mode: state.ctx.mode} + : null; + }, + + token: function (stream, state) { + return state.tok(stream, state); + } + }; +}, 'python', 'stex'); + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +CodeMirror.defineMode('rst', function (config, options) { + + var rx_strong = /^\*\*[^\*\s](?:[^\*]*[^\*\s])?\*\*/; + var rx_emphasis = /^\*[^\*\s](?:[^\*]*[^\*\s])?\*/; + var rx_literal = /^``[^`\s](?:[^`]*[^`\s])``/; + + var rx_number = /^(?:[\d]+(?:[\.,]\d+)*)/; + var rx_positive = /^(?:\s\+[\d]+(?:[\.,]\d+)*)/; + var rx_negative = /^(?:\s\-[\d]+(?:[\.,]\d+)*)/; + + var rx_uri_protocol = "[Hh][Tt][Tt][Pp][Ss]?://"; + var rx_uri_domain = "(?:[\\d\\w.-]+)\\.(?:\\w{2,6})"; + var rx_uri_path = "(?:/[\\d\\w\\#\\%\\&\\-\\.\\,\\/\\:\\=\\?\\~]+)*"; + var rx_uri = new RegExp("^" + + rx_uri_protocol + rx_uri_domain + rx_uri_path + ); + + var overlay = { + token: function (stream) { + + if (stream.match(rx_strong) && stream.match (/\W+|$/, false)) + return 'strong'; + if (stream.match(rx_emphasis) && stream.match (/\W+|$/, false)) + return 'em'; + if (stream.match(rx_literal) && stream.match (/\W+|$/, false)) + return 'string-2'; + if (stream.match(rx_number)) + return 'number'; + if (stream.match(rx_positive)) + return 'positive'; + if (stream.match(rx_negative)) + return 'negative'; + if (stream.match(rx_uri)) + return 'link'; + + while (stream.next() != null) { + if (stream.match(rx_strong, false)) break; + if (stream.match(rx_emphasis, false)) break; + if (stream.match(rx_literal, false)) break; + if (stream.match(rx_number, false)) break; + if (stream.match(rx_positive, false)) break; + if (stream.match(rx_negative, false)) break; + if (stream.match(rx_uri, false)) break; + } + + return null; + } + }; + + var mode = CodeMirror.getMode( + config, options.backdrop || 'rst-base' + ); + + return CodeMirror.overlayMode(mode, overlay, true); // combine +}, 'python', 'stex'); + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +CodeMirror.defineMIME('text/x-rst', 'rst'); + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ruby/LICENSE b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ruby/LICENSE new file mode 100644 index 0000000..ac09fc4 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ruby/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) 2011, Ubalo, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Ubalo, Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL UBALO, INC BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ruby/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ruby/index.html new file mode 100644 index 0000000..64cfe5e --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ruby/index.html @@ -0,0 +1,173 @@ + + + + + CodeMirror: Ruby mode + + + + + + + + +

              CodeMirror: Ruby mode

              +
              + + +

              MIME types defined: text/x-ruby.

              + +

              Development of the CodeMirror Ruby mode was kindly sponsored + by Ubalo, who hold + the license.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ruby/ruby.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ruby/ruby.js new file mode 100644 index 0000000..96cdd5f --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/ruby/ruby.js @@ -0,0 +1,247 @@ +CodeMirror.defineMode("ruby", function(config) { + function wordObj(words) { + var o = {}; + for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; + return o; + } + var keywords = wordObj([ + "alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else", + "elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or", + "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless", + "until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc", + "caller", "lambda", "proc", "public", "protected", "private", "require", "load", + "require_relative", "extend", "autoload", "__END__", "__FILE__", "__LINE__", "__dir__" + ]); + var indentWords = wordObj(["def", "class", "case", "for", "while", "do", "module", "then", + "catch", "loop", "proc", "begin"]); + var dedentWords = wordObj(["end", "until"]); + var matching = {"[": "]", "{": "}", "(": ")"}; + var curPunc; + + function chain(newtok, stream, state) { + state.tokenize.push(newtok); + return newtok(stream, state); + } + + function tokenBase(stream, state) { + curPunc = null; + if (stream.sol() && stream.match("=begin") && stream.eol()) { + state.tokenize.push(readBlockComment); + return "comment"; + } + if (stream.eatSpace()) return null; + var ch = stream.next(), m; + if (ch == "`" || ch == "'" || ch == '"') { + return chain(readQuoted(ch, "string", ch == '"' || ch == "`"), stream, state); + } else if (ch == "/" && !stream.eol() && stream.peek() != " ") { + return chain(readQuoted(ch, "string-2", true), stream, state); + } else if (ch == "%") { + var style = "string", embed = true; + if (stream.eat("s")) style = "atom"; + else if (stream.eat(/[WQ]/)) style = "string"; + else if (stream.eat(/[r]/)) style = "string-2"; + else if (stream.eat(/[wxq]/)) { style = "string"; embed = false; } + var delim = stream.eat(/[^\w\s]/); + if (!delim) return "operator"; + if (matching.propertyIsEnumerable(delim)) delim = matching[delim]; + return chain(readQuoted(delim, style, embed, true), stream, state); + } else if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } else if (ch == "<" && (m = stream.match(/^<-?[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/))) { + return chain(readHereDoc(m[1]), stream, state); + } else if (ch == "0") { + if (stream.eat("x")) stream.eatWhile(/[\da-fA-F]/); + else if (stream.eat("b")) stream.eatWhile(/[01]/); + else stream.eatWhile(/[0-7]/); + return "number"; + } else if (/\d/.test(ch)) { + stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/); + return "number"; + } else if (ch == "?") { + while (stream.match(/^\\[CM]-/)) {} + if (stream.eat("\\")) stream.eatWhile(/\w/); + else stream.next(); + return "string"; + } else if (ch == ":") { + if (stream.eat("'")) return chain(readQuoted("'", "atom", false), stream, state); + if (stream.eat('"')) return chain(readQuoted('"', "atom", true), stream, state); + + // :> :>> :< :<< are valid symbols + if (stream.eat(/[\<\>]/)) { + stream.eat(/[\<\>]/); + return "atom"; + } + + // :+ :- :/ :* :| :& :! are valid symbols + if (stream.eat(/[\+\-\*\/\&\|\:\!]/)) { + return "atom"; + } + + // Symbols can't start by a digit + if (stream.eat(/[a-zA-Z$@_]/)) { + stream.eatWhile(/[\w]/); + // Only one ? ! = is allowed and only as the last character + stream.eat(/[\?\!\=]/); + return "atom"; + } + return "operator"; + } else if (ch == "@" && stream.match(/^@?[a-zA-Z_]/)) { + stream.eat("@"); + stream.eatWhile(/[\w]/); + return "variable-2"; + } else if (ch == "$") { + if (stream.eat(/[a-zA-Z_]/)) { + stream.eatWhile(/[\w]/); + } else if (stream.eat(/\d/)) { + stream.eat(/\d/); + } else { + stream.next(); // Must be a special global like $: or $! + } + return "variable-3"; + } else if (/[a-zA-Z_]/.test(ch)) { + stream.eatWhile(/[\w]/); + stream.eat(/[\?\!]/); + if (stream.eat(":")) return "atom"; + return "ident"; + } else if (ch == "|" && (state.varList || state.lastTok == "{" || state.lastTok == "do")) { + curPunc = "|"; + return null; + } else if (/[\(\)\[\]{}\\;]/.test(ch)) { + curPunc = ch; + return null; + } else if (ch == "-" && stream.eat(">")) { + return "arrow"; + } else if (/[=+\-\/*:\.^%<>~|]/.test(ch)) { + stream.eatWhile(/[=+\-\/*:\.^%<>~|]/); + return "operator"; + } else { + return null; + } + } + + function tokenBaseUntilBrace() { + var depth = 1; + return function(stream, state) { + if (stream.peek() == "}") { + depth--; + if (depth == 0) { + state.tokenize.pop(); + return state.tokenize[state.tokenize.length-1](stream, state); + } + } else if (stream.peek() == "{") { + depth++; + } + return tokenBase(stream, state); + }; + } + function tokenBaseOnce() { + var alreadyCalled = false; + return function(stream, state) { + if (alreadyCalled) { + state.tokenize.pop(); + return state.tokenize[state.tokenize.length-1](stream, state); + } + alreadyCalled = true; + return tokenBase(stream, state); + }; + } + function readQuoted(quote, style, embed, unescaped) { + return function(stream, state) { + var escaped = false, ch; + + if (state.context.type === 'read-quoted-paused') { + state.context = state.context.prev; + stream.eat("}"); + } + + while ((ch = stream.next()) != null) { + if (ch == quote && (unescaped || !escaped)) { + state.tokenize.pop(); + break; + } + if (embed && ch == "#" && !escaped) { + if (stream.eat("{")) { + if (quote == "}") { + state.context = {prev: state.context, type: 'read-quoted-paused'}; + } + state.tokenize.push(tokenBaseUntilBrace()); + break; + } else if (/[@\$]/.test(stream.peek())) { + state.tokenize.push(tokenBaseOnce()); + break; + } + } + escaped = !escaped && ch == "\\"; + } + return style; + }; + } + function readHereDoc(phrase) { + return function(stream, state) { + if (stream.match(phrase)) state.tokenize.pop(); + else stream.skipToEnd(); + return "string"; + }; + } + function readBlockComment(stream, state) { + if (stream.sol() && stream.match("=end") && stream.eol()) + state.tokenize.pop(); + stream.skipToEnd(); + return "comment"; + } + + return { + startState: function() { + return {tokenize: [tokenBase], + indented: 0, + context: {type: "top", indented: -config.indentUnit}, + continuedLine: false, + lastTok: null, + varList: false}; + }, + + token: function(stream, state) { + if (stream.sol()) state.indented = stream.indentation(); + var style = state.tokenize[state.tokenize.length-1](stream, state), kwtype; + if (style == "ident") { + var word = stream.current(); + style = keywords.propertyIsEnumerable(stream.current()) ? "keyword" + : /^[A-Z]/.test(word) ? "tag" + : (state.lastTok == "def" || state.lastTok == "class" || state.varList) ? "def" + : "variable"; + if (indentWords.propertyIsEnumerable(word)) kwtype = "indent"; + else if (dedentWords.propertyIsEnumerable(word)) kwtype = "dedent"; + else if ((word == "if" || word == "unless") && stream.column() == stream.indentation()) + kwtype = "indent"; + } + if (curPunc || (style && style != "comment")) state.lastTok = word || curPunc || style; + if (curPunc == "|") state.varList = !state.varList; + + if (kwtype == "indent" || /[\(\[\{]/.test(curPunc)) + state.context = {prev: state.context, type: curPunc || style, indented: state.indented}; + else if ((kwtype == "dedent" || /[\)\]\}]/.test(curPunc)) && state.context.prev) + state.context = state.context.prev; + + if (stream.eol()) + state.continuedLine = (curPunc == "\\" || style == "operator"); + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize[state.tokenize.length-1] != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0); + var ct = state.context; + var closing = ct.type == matching[firstChar] || + ct.type == "keyword" && /^(?:end|until|else|elsif|when|rescue)\b/.test(textAfter); + return ct.indented + (closing ? 0 : config.indentUnit) + + (state.continuedLine ? config.indentUnit : 0); + }, + + electricChars: "}de", // enD and rescuE + lineComment: "#" + }; +}); + +CodeMirror.defineMIME("text/x-ruby", "ruby"); + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rust/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rust/index.html new file mode 100644 index 0000000..a6d47fe --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rust/index.html @@ -0,0 +1,48 @@ + + + + + CodeMirror: Rust mode + + + + + + + +

              CodeMirror: Rust mode

              + +
              + + + +

              MIME types defined: text/x-rustsrc.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rust/rust.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rust/rust.js new file mode 100644 index 0000000..c7530b6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/rust/rust.js @@ -0,0 +1,436 @@ +CodeMirror.defineMode("rust", function() { + var indentUnit = 4, altIndentUnit = 2; + var valKeywords = { + "if": "if-style", "while": "if-style", "else": "else-style", + "do": "else-style", "ret": "else-style", "fail": "else-style", + "break": "atom", "cont": "atom", "const": "let", "resource": "fn", + "let": "let", "fn": "fn", "for": "for", "alt": "alt", "iface": "iface", + "impl": "impl", "type": "type", "enum": "enum", "mod": "mod", + "as": "op", "true": "atom", "false": "atom", "assert": "op", "check": "op", + "claim": "op", "native": "ignore", "unsafe": "ignore", "import": "else-style", + "export": "else-style", "copy": "op", "log": "op", "log_err": "op", + "use": "op", "bind": "op", "self": "atom" + }; + var typeKeywords = function() { + var keywords = {"fn": "fn", "block": "fn", "obj": "obj"}; + var atoms = "bool uint int i8 i16 i32 i64 u8 u16 u32 u64 float f32 f64 str char".split(" "); + for (var i = 0, e = atoms.length; i < e; ++i) keywords[atoms[i]] = "atom"; + return keywords; + }(); + var operatorChar = /[+\-*&%=<>!?|\.@]/; + + // Tokenizer + + // Used as scratch variable to communicate multiple values without + // consing up tons of objects. + var tcat, content; + function r(tc, style) { + tcat = tc; + return style; + } + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"') { + state.tokenize = tokenString; + return state.tokenize(stream, state); + } + if (ch == "'") { + tcat = "atom"; + if (stream.eat("\\")) { + if (stream.skipTo("'")) { stream.next(); return "string"; } + else { return "error"; } + } else { + stream.next(); + return stream.eat("'") ? "string" : "error"; + } + } + if (ch == "/") { + if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } + if (stream.eat("*")) { + state.tokenize = tokenComment(1); + return state.tokenize(stream, state); + } + } + if (ch == "#") { + if (stream.eat("[")) { tcat = "open-attr"; return null; } + stream.eatWhile(/\w/); + return r("macro", "meta"); + } + if (ch == ":" && stream.match(":<")) { + return r("op", null); + } + if (ch.match(/\d/) || (ch == "." && stream.eat(/\d/))) { + var flp = false; + if (!stream.match(/^x[\da-f]+/i) && !stream.match(/^b[01]+/)) { + stream.eatWhile(/\d/); + if (stream.eat(".")) { flp = true; stream.eatWhile(/\d/); } + if (stream.match(/^e[+\-]?\d+/i)) { flp = true; } + } + if (flp) stream.match(/^f(?:32|64)/); + else stream.match(/^[ui](?:8|16|32|64)/); + return r("atom", "number"); + } + if (ch.match(/[()\[\]{}:;,]/)) return r(ch, null); + if (ch == "-" && stream.eat(">")) return r("->", null); + if (ch.match(operatorChar)) { + stream.eatWhile(operatorChar); + return r("op", null); + } + stream.eatWhile(/\w/); + content = stream.current(); + if (stream.match(/^::\w/)) { + stream.backUp(1); + return r("prefix", "variable-2"); + } + if (state.keywords.propertyIsEnumerable(content)) + return r(state.keywords[content], content.match(/true|false/) ? "atom" : "keyword"); + return r("name", "variable"); + } + + function tokenString(stream, state) { + var ch, escaped = false; + while (ch = stream.next()) { + if (ch == '"' && !escaped) { + state.tokenize = tokenBase; + return r("atom", "string"); + } + escaped = !escaped && ch == "\\"; + } + // Hack to not confuse the parser when a string is split in + // pieces. + return r("op", "string"); + } + + function tokenComment(depth) { + return function(stream, state) { + var lastCh = null, ch; + while (ch = stream.next()) { + if (ch == "/" && lastCh == "*") { + if (depth == 1) { + state.tokenize = tokenBase; + break; + } else { + state.tokenize = tokenComment(depth - 1); + return state.tokenize(stream, state); + } + } + if (ch == "*" && lastCh == "/") { + state.tokenize = tokenComment(depth + 1); + return state.tokenize(stream, state); + } + lastCh = ch; + } + return "comment"; + }; + } + + // Parser + + var cx = {state: null, stream: null, marked: null, cc: null}; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + + function pushlex(type, info) { + var result = function() { + var state = cx.state; + state.lexical = {indented: state.indented, column: cx.stream.column(), + type: type, prev: state.lexical, info: info}; + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") + state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + function typecx() { cx.state.keywords = typeKeywords; } + function valcx() { cx.state.keywords = valKeywords; } + poplex.lex = typecx.lex = valcx.lex = true; + + function commasep(comb, end) { + function more(type) { + if (type == ",") return cont(comb, more); + if (type == end) return cont(); + return cont(more); + } + return function(type) { + if (type == end) return cont(); + return pass(comb, more); + }; + } + + function stat_of(comb, tag) { + return cont(pushlex("stat", tag), comb, poplex, block); + } + function block(type) { + if (type == "}") return cont(); + if (type == "let") return stat_of(letdef1, "let"); + if (type == "fn") return stat_of(fndef); + if (type == "type") return cont(pushlex("stat"), tydef, endstatement, poplex, block); + if (type == "enum") return stat_of(enumdef); + if (type == "mod") return stat_of(mod); + if (type == "iface") return stat_of(iface); + if (type == "impl") return stat_of(impl); + if (type == "open-attr") return cont(pushlex("]"), commasep(expression, "]"), poplex); + if (type == "ignore" || type.match(/[\]\);,]/)) return cont(block); + return pass(pushlex("stat"), expression, poplex, endstatement, block); + } + function endstatement(type) { + if (type == ";") return cont(); + return pass(); + } + function expression(type) { + if (type == "atom" || type == "name") return cont(maybeop); + if (type == "{") return cont(pushlex("}"), exprbrace, poplex); + if (type.match(/[\[\(]/)) return matchBrackets(type, expression); + if (type.match(/[\]\)\};,]/)) return pass(); + if (type == "if-style") return cont(expression, expression); + if (type == "else-style" || type == "op") return cont(expression); + if (type == "for") return cont(pattern, maybetype, inop, expression, expression); + if (type == "alt") return cont(expression, altbody); + if (type == "fn") return cont(fndef); + if (type == "macro") return cont(macro); + return cont(); + } + function maybeop(type) { + if (content == ".") return cont(maybeprop); + if (content == "::<"){return cont(typarams, maybeop);} + if (type == "op" || content == ":") return cont(expression); + if (type == "(" || type == "[") return matchBrackets(type, expression); + return pass(); + } + function maybeprop() { + if (content.match(/^\w+$/)) {cx.marked = "variable"; return cont(maybeop);} + return pass(expression); + } + function exprbrace(type) { + if (type == "op") { + if (content == "|") return cont(blockvars, poplex, pushlex("}", "block"), block); + if (content == "||") return cont(poplex, pushlex("}", "block"), block); + } + if (content == "mutable" || (content.match(/^\w+$/) && cx.stream.peek() == ":" + && !cx.stream.match("::", false))) + return pass(record_of(expression)); + return pass(block); + } + function record_of(comb) { + function ro(type) { + if (content == "mutable" || content == "with") {cx.marked = "keyword"; return cont(ro);} + if (content.match(/^\w*$/)) {cx.marked = "variable"; return cont(ro);} + if (type == ":") return cont(comb, ro); + if (type == "}") return cont(); + return cont(ro); + } + return ro; + } + function blockvars(type) { + if (type == "name") {cx.marked = "def"; return cont(blockvars);} + if (type == "op" && content == "|") return cont(); + return cont(blockvars); + } + + function letdef1(type) { + if (type.match(/[\]\)\};]/)) return cont(); + if (content == "=") return cont(expression, letdef2); + if (type == ",") return cont(letdef1); + return pass(pattern, maybetype, letdef1); + } + function letdef2(type) { + if (type.match(/[\]\)\};,]/)) return pass(letdef1); + else return pass(expression, letdef2); + } + function maybetype(type) { + if (type == ":") return cont(typecx, rtype, valcx); + return pass(); + } + function inop(type) { + if (type == "name" && content == "in") {cx.marked = "keyword"; return cont();} + return pass(); + } + function fndef(type) { + if (content == "@" || content == "~") {cx.marked = "keyword"; return cont(fndef);} + if (type == "name") {cx.marked = "def"; return cont(fndef);} + if (content == "<") return cont(typarams, fndef); + if (type == "{") return pass(expression); + if (type == "(") return cont(pushlex(")"), commasep(argdef, ")"), poplex, fndef); + if (type == "->") return cont(typecx, rtype, valcx, fndef); + if (type == ";") return cont(); + return cont(fndef); + } + function tydef(type) { + if (type == "name") {cx.marked = "def"; return cont(tydef);} + if (content == "<") return cont(typarams, tydef); + if (content == "=") return cont(typecx, rtype, valcx); + return cont(tydef); + } + function enumdef(type) { + if (type == "name") {cx.marked = "def"; return cont(enumdef);} + if (content == "<") return cont(typarams, enumdef); + if (content == "=") return cont(typecx, rtype, valcx, endstatement); + if (type == "{") return cont(pushlex("}"), typecx, enumblock, valcx, poplex); + return cont(enumdef); + } + function enumblock(type) { + if (type == "}") return cont(); + if (type == "(") return cont(pushlex(")"), commasep(rtype, ")"), poplex, enumblock); + if (content.match(/^\w+$/)) cx.marked = "def"; + return cont(enumblock); + } + function mod(type) { + if (type == "name") {cx.marked = "def"; return cont(mod);} + if (type == "{") return cont(pushlex("}"), block, poplex); + return pass(); + } + function iface(type) { + if (type == "name") {cx.marked = "def"; return cont(iface);} + if (content == "<") return cont(typarams, iface); + if (type == "{") return cont(pushlex("}"), block, poplex); + return pass(); + } + function impl(type) { + if (content == "<") return cont(typarams, impl); + if (content == "of" || content == "for") {cx.marked = "keyword"; return cont(rtype, impl);} + if (type == "name") {cx.marked = "def"; return cont(impl);} + if (type == "{") return cont(pushlex("}"), block, poplex); + return pass(); + } + function typarams() { + if (content == ">") return cont(); + if (content == ",") return cont(typarams); + if (content == ":") return cont(rtype, typarams); + return pass(rtype, typarams); + } + function argdef(type) { + if (type == "name") {cx.marked = "def"; return cont(argdef);} + if (type == ":") return cont(typecx, rtype, valcx); + return pass(); + } + function rtype(type) { + if (type == "name") {cx.marked = "variable-3"; return cont(rtypemaybeparam); } + if (content == "mutable") {cx.marked = "keyword"; return cont(rtype);} + if (type == "atom") return cont(rtypemaybeparam); + if (type == "op" || type == "obj") return cont(rtype); + if (type == "fn") return cont(fntype); + if (type == "{") return cont(pushlex("{"), record_of(rtype), poplex); + return matchBrackets(type, rtype); + } + function rtypemaybeparam() { + if (content == "<") return cont(typarams); + return pass(); + } + function fntype(type) { + if (type == "(") return cont(pushlex("("), commasep(rtype, ")"), poplex, fntype); + if (type == "->") return cont(rtype); + return pass(); + } + function pattern(type) { + if (type == "name") {cx.marked = "def"; return cont(patternmaybeop);} + if (type == "atom") return cont(patternmaybeop); + if (type == "op") return cont(pattern); + if (type.match(/[\]\)\};,]/)) return pass(); + return matchBrackets(type, pattern); + } + function patternmaybeop(type) { + if (type == "op" && content == ".") return cont(); + if (content == "to") {cx.marked = "keyword"; return cont(pattern);} + else return pass(); + } + function altbody(type) { + if (type == "{") return cont(pushlex("}", "alt"), altblock1, poplex); + return pass(); + } + function altblock1(type) { + if (type == "}") return cont(); + if (type == "|") return cont(altblock1); + if (content == "when") {cx.marked = "keyword"; return cont(expression, altblock2);} + if (type.match(/[\]\);,]/)) return cont(altblock1); + return pass(pattern, altblock2); + } + function altblock2(type) { + if (type == "{") return cont(pushlex("}", "alt"), block, poplex, altblock1); + else return pass(altblock1); + } + + function macro(type) { + if (type.match(/[\[\(\{]/)) return matchBrackets(type, expression); + return pass(); + } + function matchBrackets(type, comb) { + if (type == "[") return cont(pushlex("]"), commasep(comb, "]"), poplex); + if (type == "(") return cont(pushlex(")"), commasep(comb, ")"), poplex); + if (type == "{") return cont(pushlex("}"), commasep(comb, "}"), poplex); + return cont(); + } + + function parse(state, stream, style) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; + + while (true) { + var combinator = cc.length ? cc.pop() : block; + if (combinator(tcat)) { + while(cc.length && cc[cc.length - 1].lex) + cc.pop()(); + return cx.marked || style; + } + } + } + + return { + startState: function() { + return { + tokenize: tokenBase, + cc: [], + lexical: {indented: -indentUnit, column: 0, type: "top", align: false}, + keywords: valKeywords, + indented: 0 + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = false; + state.indented = stream.indentation(); + } + if (stream.eatSpace()) return null; + tcat = content = null; + var style = state.tokenize(stream, state); + if (style == "comment") return style; + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = true; + if (tcat == "prefix") return style; + if (!content) content = stream.current(); + return parse(state, stream, style); + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, + type = lexical.type, closing = firstChar == type; + if (type == "stat") return lexical.indented + indentUnit; + if (lexical.align) return lexical.column + (closing ? 0 : 1); + return lexical.indented + (closing ? 0 : (lexical.info == "alt" ? altIndentUnit : indentUnit)); + }, + + electricChars: "{}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + fold: "brace" + }; +}); + +CodeMirror.defineMIME("text/x-rustsrc", "rust"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sass/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sass/index.html new file mode 100644 index 0000000..3af7bff --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sass/index.html @@ -0,0 +1,54 @@ + + + + + CodeMirror: Sass mode + + + + + + + + +

              CodeMirror: Sass mode

              +
              + + +

              MIME types defined: text/x-sass.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sass/sass.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sass/sass.js new file mode 100644 index 0000000..9c9a0da --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sass/sass.js @@ -0,0 +1,330 @@ +CodeMirror.defineMode("sass", function(config) { + var tokenRegexp = function(words){ + return new RegExp("^" + words.join("|")); + }; + + var keywords = ["true", "false", "null", "auto"]; + var keywordsRegexp = new RegExp("^" + keywords.join("|")); + + var operators = ["\\(", "\\)", "=", ">", "<", "==", ">=", "<=", "\\+", "-", "\\!=", "/", "\\*", "%", "and", "or", "not"]; + var opRegexp = tokenRegexp(operators); + + var pseudoElementsRegexp = /^::?[\w\-]+/; + + var urlTokens = function(stream, state){ + var ch = stream.peek(); + + if (ch === ")"){ + stream.next(); + state.tokenizer = tokenBase; + return "operator"; + }else if (ch === "("){ + stream.next(); + stream.eatSpace(); + + return "operator"; + }else if (ch === "'" || ch === '"'){ + state.tokenizer = buildStringTokenizer(stream.next()); + return "string"; + }else{ + state.tokenizer = buildStringTokenizer(")", false); + return "string"; + } + }; + var multilineComment = function(stream, state) { + if (stream.skipTo("*/")){ + stream.next(); + stream.next(); + state.tokenizer = tokenBase; + }else { + stream.next(); + } + + return "comment"; + }; + + var buildStringTokenizer = function(quote, greedy){ + if(greedy == null){ greedy = true; } + + function stringTokenizer(stream, state){ + var nextChar = stream.next(); + var peekChar = stream.peek(); + var previousChar = stream.string.charAt(stream.pos-2); + + var endingString = ((nextChar !== "\\" && peekChar === quote) || (nextChar === quote && previousChar !== "\\")); + + /* + console.log("previousChar: " + previousChar); + console.log("nextChar: " + nextChar); + console.log("peekChar: " + peekChar); + console.log("ending: " + endingString); + */ + + if (endingString){ + if (nextChar !== quote && greedy) { stream.next(); } + state.tokenizer = tokenBase; + return "string"; + }else if (nextChar === "#" && peekChar === "{"){ + state.tokenizer = buildInterpolationTokenizer(stringTokenizer); + stream.next(); + return "operator"; + }else { + return "string"; + } + } + + return stringTokenizer; + }; + + var buildInterpolationTokenizer = function(currentTokenizer){ + return function(stream, state){ + if (stream.peek() === "}"){ + stream.next(); + state.tokenizer = currentTokenizer; + return "operator"; + }else{ + return tokenBase(stream, state); + } + }; + }; + + var indent = function(state){ + if (state.indentCount == 0){ + state.indentCount++; + var lastScopeOffset = state.scopes[0].offset; + var currentOffset = lastScopeOffset + config.indentUnit; + state.scopes.unshift({ offset:currentOffset }); + } + }; + + var dedent = function(state){ + if (state.scopes.length == 1) { return; } + + state.scopes.shift(); + }; + + var tokenBase = function(stream, state) { + var ch = stream.peek(); + + // Single line Comment + if (stream.match('//')) { + stream.skipToEnd(); + return "comment"; + } + + // Multiline Comment + if (stream.match('/*')){ + state.tokenizer = multilineComment; + return state.tokenizer(stream, state); + } + + // Interpolation + if (stream.match('#{')){ + state.tokenizer = buildInterpolationTokenizer(tokenBase); + return "operator"; + } + + if (ch === "."){ + stream.next(); + + // Match class selectors + if (stream.match(/^[\w-]+/)){ + indent(state); + return "atom"; + }else if (stream.peek() === "#"){ + indent(state); + return "atom"; + }else{ + return "operator"; + } + } + + if (ch === "#"){ + stream.next(); + + // Hex numbers + if (stream.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)){ + return "number"; + } + + // ID selectors + if (stream.match(/^[\w-]+/)){ + indent(state); + return "atom"; + } + + if (stream.peek() === "#"){ + indent(state); + return "atom"; + } + } + + // Numbers + if (stream.match(/^-?[0-9\.]+/)){ + return "number"; + } + + // Units + if (stream.match(/^(px|em|in)\b/)){ + return "unit"; + } + + if (stream.match(keywordsRegexp)){ + return "keyword"; + } + + if (stream.match(/^url/) && stream.peek() === "("){ + state.tokenizer = urlTokens; + return "atom"; + } + + // Variables + if (ch === "$"){ + stream.next(); + stream.eatWhile(/[\w-]/); + + if (stream.peek() === ":"){ + stream.next(); + return "variable-2"; + }else{ + return "variable-3"; + } + } + + if (ch === "!"){ + stream.next(); + + if (stream.match(/^[\w]+/)){ + return "keyword"; + } + + return "operator"; + } + + if (ch === "="){ + stream.next(); + + // Match shortcut mixin definition + if (stream.match(/^[\w-]+/)){ + indent(state); + return "meta"; + }else { + return "operator"; + } + } + + if (ch === "+"){ + stream.next(); + + // Match shortcut mixin definition + if (stream.match(/^[\w-]+/)){ + return "variable-3"; + }else { + return "operator"; + } + } + + // Indent Directives + if (stream.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)){ + indent(state); + return "meta"; + } + + // Other Directives + if (ch === "@"){ + stream.next(); + stream.eatWhile(/[\w-]/); + return "meta"; + } + + // Strings + if (ch === '"' || ch === "'"){ + stream.next(); + state.tokenizer = buildStringTokenizer(ch); + return "string"; + } + + // Pseudo element selectors + if (ch == ':' && stream.match(pseudoElementsRegexp)){ + return "keyword"; + } + + // atoms + if (stream.eatWhile(/[\w-&]/)){ + // matches a property definition + if (stream.peek() === ":" && !stream.match(pseudoElementsRegexp, false)) + return "property"; + else + return "atom"; + } + + if (stream.match(opRegexp)){ + return "operator"; + } + + // If we haven't returned by now, we move 1 character + // and return an error + stream.next(); + return null; + }; + + var tokenLexer = function(stream, state) { + if (stream.sol()){ + state.indentCount = 0; + } + var style = state.tokenizer(stream, state); + var current = stream.current(); + + if (current === "@return"){ + dedent(state); + } + + if (style === "atom"){ + indent(state); + } + + if (style !== null){ + var startOfToken = stream.pos - current.length; + var withCurrentIndent = startOfToken + (config.indentUnit * state.indentCount); + + var newScopes = []; + + for (var i = 0; i < state.scopes.length; i++){ + var scope = state.scopes[i]; + + if (scope.offset <= withCurrentIndent){ + newScopes.push(scope); + } + } + + state.scopes = newScopes; + } + + + return style; + }; + + return { + startState: function() { + return { + tokenizer: tokenBase, + scopes: [{offset: 0, type: 'sass'}], + definedVars: [], + definedMixins: [] + }; + }, + token: function(stream, state) { + var style = tokenLexer(stream, state); + + state.lastToken = { style: style, content: stream.current() }; + + return style; + }, + + indent: function(state) { + return state.scopes[0].offset; + } + }; +}); + +CodeMirror.defineMIME("text/x-sass", "sass"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/scheme/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/scheme/index.html new file mode 100644 index 0000000..5936a02 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/scheme/index.html @@ -0,0 +1,65 @@ + + + + + CodeMirror: Scheme mode + + + + + + + +

              CodeMirror: Scheme mode

              +
              + + +

              MIME types defined: text/x-scheme.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/scheme/scheme.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/scheme/scheme.js new file mode 100644 index 0000000..c5990ae --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/scheme/scheme.js @@ -0,0 +1,232 @@ +/** + * Author: Koh Zi Han, based on implementation by Koh Zi Chun + */ +CodeMirror.defineMode("scheme", function () { + var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", + ATOM = "atom", NUMBER = "number", BRACKET = "bracket"; + var INDENT_WORD_SKIP = 2; + + function makeKeywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var keywords = makeKeywords("λ case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"); + var indentKeys = makeKeywords("define let letrec let* lambda"); + + function stateStack(indent, type, prev) { // represents a state stack object + this.indent = indent; + this.type = type; + this.prev = prev; + } + + function pushStack(state, indent, type) { + state.indentStack = new stateStack(indent, type, state.indentStack); + } + + function popStack(state) { + state.indentStack = state.indentStack.prev; + } + + var binaryMatcher = new RegExp(/^(?:[-+]i|[-+][01]+#*(?:\/[01]+#*)?i|[-+]?[01]+#*(?:\/[01]+#*)?@[-+]?[01]+#*(?:\/[01]+#*)?|[-+]?[01]+#*(?:\/[01]+#*)?[-+](?:[01]+#*(?:\/[01]+#*)?)?i|[-+]?[01]+#*(?:\/[01]+#*)?)(?=[()\s;"]|$)/i); + var octalMatcher = new RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?)(?=[()\s;"]|$)/i); + var hexMatcher = new RegExp(/^(?:[-+]i|[-+][\da-f]+#*(?:\/[\da-f]+#*)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?@[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?[-+](?:[\da-f]+#*(?:\/[\da-f]+#*)?)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?)(?=[()\s;"]|$)/i); + var decimalMatcher = new RegExp(/^(?:[-+]i|[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)i|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)@[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)?i|(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*))(?=[()\s;"]|$)/i); + + function isBinaryNumber (stream) { + return stream.match(binaryMatcher); + } + + function isOctalNumber (stream) { + return stream.match(octalMatcher); + } + + function isDecimalNumber (stream, backup) { + if (backup === true) { + stream.backUp(1); + } + return stream.match(decimalMatcher); + } + + function isHexNumber (stream) { + return stream.match(hexMatcher); + } + + return { + startState: function () { + return { + indentStack: null, + indentation: 0, + mode: false, + sExprComment: false + }; + }, + + token: function (stream, state) { + if (state.indentStack == null && stream.sol()) { + // update indentation, but only if indentStack is empty + state.indentation = stream.indentation(); + } + + // skip spaces + if (stream.eatSpace()) { + return null; + } + var returnType = null; + + switch(state.mode){ + case "string": // multi-line string parsing mode + var next, escaped = false; + while ((next = stream.next()) != null) { + if (next == "\"" && !escaped) { + + state.mode = false; + break; + } + escaped = !escaped && next == "\\"; + } + returnType = STRING; // continue on in scheme-string mode + break; + case "comment": // comment parsing mode + var next, maybeEnd = false; + while ((next = stream.next()) != null) { + if (next == "#" && maybeEnd) { + + state.mode = false; + break; + } + maybeEnd = (next == "|"); + } + returnType = COMMENT; + break; + case "s-expr-comment": // s-expr commenting mode + state.mode = false; + if(stream.peek() == "(" || stream.peek() == "["){ + // actually start scheme s-expr commenting mode + state.sExprComment = 0; + }else{ + // if not we just comment the entire of the next token + stream.eatWhile(/[^/s]/); // eat non spaces + returnType = COMMENT; + break; + } + default: // default parsing mode + var ch = stream.next(); + + if (ch == "\"") { + state.mode = "string"; + returnType = STRING; + + } else if (ch == "'") { + returnType = ATOM; + } else if (ch == '#') { + if (stream.eat("|")) { // Multi-line comment + state.mode = "comment"; // toggle to comment mode + returnType = COMMENT; + } else if (stream.eat(/[tf]/i)) { // #t/#f (atom) + returnType = ATOM; + } else if (stream.eat(';')) { // S-Expr comment + state.mode = "s-expr-comment"; + returnType = COMMENT; + } else { + var numTest = null, hasExactness = false, hasRadix = true; + if (stream.eat(/[ei]/i)) { + hasExactness = true; + } else { + stream.backUp(1); // must be radix specifier + } + if (stream.match(/^#b/i)) { + numTest = isBinaryNumber; + } else if (stream.match(/^#o/i)) { + numTest = isOctalNumber; + } else if (stream.match(/^#x/i)) { + numTest = isHexNumber; + } else if (stream.match(/^#d/i)) { + numTest = isDecimalNumber; + } else if (stream.match(/^[-+0-9.]/, false)) { + hasRadix = false; + numTest = isDecimalNumber; + // re-consume the intial # if all matches failed + } else if (!hasExactness) { + stream.eat('#'); + } + if (numTest != null) { + if (hasRadix && !hasExactness) { + // consume optional exactness after radix + stream.match(/^#[ei]/i); + } + if (numTest(stream)) + returnType = NUMBER; + } + } + } else if (/^[-+0-9.]/.test(ch) && isDecimalNumber(stream, true)) { // match non-prefixed number, must be decimal + returnType = NUMBER; + } else if (ch == ";") { // comment + stream.skipToEnd(); // rest of the line is a comment + returnType = COMMENT; + } else if (ch == "(" || ch == "[") { + var keyWord = ''; var indentTemp = stream.column(), letter; + /** + Either + (indent-word .. + (non-indent-word .. + (;something else, bracket, etc. + */ + + while ((letter = stream.eat(/[^\s\(\[\;\)\]]/)) != null) { + keyWord += letter; + } + + if (keyWord.length > 0 && indentKeys.propertyIsEnumerable(keyWord)) { // indent-word + + pushStack(state, indentTemp + INDENT_WORD_SKIP, ch); + } else { // non-indent word + // we continue eating the spaces + stream.eatSpace(); + if (stream.eol() || stream.peek() == ";") { + // nothing significant after + // we restart indentation 1 space after + pushStack(state, indentTemp + 1, ch); + } else { + pushStack(state, indentTemp + stream.current().length, ch); // else we match + } + } + stream.backUp(stream.current().length - 1); // undo all the eating + + if(typeof state.sExprComment == "number") state.sExprComment++; + + returnType = BRACKET; + } else if (ch == ")" || ch == "]") { + returnType = BRACKET; + if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : "[")) { + popStack(state); + + if(typeof state.sExprComment == "number"){ + if(--state.sExprComment == 0){ + returnType = COMMENT; // final closing bracket + state.sExprComment = false; // turn off s-expr commenting mode + } + } + } + } else { + stream.eatWhile(/[\w\$_\-!$%&*+\.\/:<=>?@\^~]/); + + if (keywords && keywords.propertyIsEnumerable(stream.current())) { + returnType = BUILTIN; + } else returnType = "variable"; + } + } + return (typeof state.sExprComment == "number") ? COMMENT : returnType; + }, + + indent: function (state) { + if (state.indentStack == null) return state.indentation; + return state.indentStack.indent; + }, + + lineComment: ";;" + }; +}); + +CodeMirror.defineMIME("text/x-scheme", "scheme"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/shell/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/shell/index.html new file mode 100644 index 0000000..9a2ef7c --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/shell/index.html @@ -0,0 +1,51 @@ + + +CodeMirror: Shell mode + + + + + + + + + + +

              CodeMirror: Shell mode

              + + + + + +

              MIME types defined: text/x-sh.

              diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/shell/shell.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/shell/shell.js new file mode 100644 index 0000000..abfd214 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/shell/shell.js @@ -0,0 +1,118 @@ +CodeMirror.defineMode('shell', function() { + + var words = {}; + function define(style, string) { + var split = string.split(' '); + for(var i = 0; i < split.length; i++) { + words[split[i]] = style; + } + }; + + // Atoms + define('atom', 'true false'); + + // Keywords + define('keyword', 'if then do else elif while until for in esac fi fin ' + + 'fil done exit set unset export function'); + + // Commands + define('builtin', 'ab awk bash beep cat cc cd chown chmod chroot clear cp ' + + 'curl cut diff echo find gawk gcc get git grep kill killall ln ls make ' + + 'mkdir openssl mv nc node npm ping ps restart rm rmdir sed service sh ' + + 'shopt shred source sort sleep ssh start stop su sudo tee telnet top ' + + 'touch vi vim wall wc wget who write yes zsh'); + + function tokenBase(stream, state) { + + var sol = stream.sol(); + var ch = stream.next(); + + if (ch === '\'' || ch === '"' || ch === '`') { + state.tokens.unshift(tokenString(ch)); + return tokenize(stream, state); + } + if (ch === '#') { + if (sol && stream.eat('!')) { + stream.skipToEnd(); + return 'meta'; // 'comment'? + } + stream.skipToEnd(); + return 'comment'; + } + if (ch === '$') { + state.tokens.unshift(tokenDollar); + return tokenize(stream, state); + } + if (ch === '+' || ch === '=') { + return 'operator'; + } + if (ch === '-') { + stream.eat('-'); + stream.eatWhile(/\w/); + return 'attribute'; + } + if (/\d/.test(ch)) { + stream.eatWhile(/\d/); + if(!/\w/.test(stream.peek())) { + return 'number'; + } + } + stream.eatWhile(/[\w-]/); + var cur = stream.current(); + if (stream.peek() === '=' && /\w+/.test(cur)) return 'def'; + return words.hasOwnProperty(cur) ? words[cur] : null; + } + + function tokenString(quote) { + return function(stream, state) { + var next, end = false, escaped = false; + while ((next = stream.next()) != null) { + if (next === quote && !escaped) { + end = true; + break; + } + if (next === '$' && !escaped && quote !== '\'') { + escaped = true; + stream.backUp(1); + state.tokens.unshift(tokenDollar); + break; + } + escaped = !escaped && next === '\\'; + } + if (end || !escaped) { + state.tokens.shift(); + } + return (quote === '`' || quote === ')' ? 'quote' : 'string'); + }; + }; + + var tokenDollar = function(stream, state) { + if (state.tokens.length > 1) stream.eat('$'); + var ch = stream.next(), hungry = /\w/; + if (ch === '{') hungry = /[^}]/; + if (ch === '(') { + state.tokens[0] = tokenString(')'); + return tokenize(stream, state); + } + if (!/\d/.test(ch)) { + stream.eatWhile(hungry); + stream.eat('}'); + } + state.tokens.shift(); + return 'def'; + }; + + function tokenize(stream, state) { + return (state.tokens[0] || tokenBase) (stream, state); + }; + + return { + startState: function() {return {tokens:[]};}, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return tokenize(stream, state); + } + }; +}); + +CodeMirror.defineMIME('text/x-sh', 'shell'); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sieve/LICENSE b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sieve/LICENSE new file mode 100644 index 0000000..8a74612 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sieve/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2012 Thomas Schmid + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sieve/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sieve/index.html new file mode 100644 index 0000000..8b54981 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sieve/index.html @@ -0,0 +1,81 @@ + + + + + CodeMirror: Sieve (RFC5228) mode + + + + + + + +

              CodeMirror: Sieve (RFC5228) mode

              +
              + + +

              MIME types defined: application/sieve.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sieve/sieve.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sieve/sieve.js new file mode 100644 index 0000000..8ca2a4c --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sieve/sieve.js @@ -0,0 +1,183 @@ +/* + * See LICENSE in this directory for the license under which this code + * is released. + */ + +CodeMirror.defineMode("sieve", function(config) { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var keywords = words("if elsif else stop require"); + var atoms = words("true false not"); + var indentUnit = config.indentUnit; + + function tokenBase(stream, state) { + + var ch = stream.next(); + if (ch == "/" && stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + + if (ch === '#') { + stream.skipToEnd(); + return "comment"; + } + + if (ch == "\"") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + + if (ch == "(") { + state._indent.push("("); + // add virtual angel wings so that editor behaves... + // ...more sane incase of broken brackets + state._indent.push("{"); + return null; + } + + if (ch === "{") { + state._indent.push("{"); + return null; + } + + if (ch == ")") { + state._indent.pop(); + state._indent.pop(); + } + + if (ch === "}") { + state._indent.pop(); + return null; + } + + if (ch == ",") + return null; + + if (ch == ";") + return null; + + + if (/[{}\(\),;]/.test(ch)) + return null; + + // 1*DIGIT "K" / "M" / "G" + if (/\d/.test(ch)) { + stream.eatWhile(/[\d]/); + stream.eat(/[KkMmGg]/); + return "number"; + } + + // ":" (ALPHA / "_") *(ALPHA / DIGIT / "_") + if (ch == ":") { + stream.eatWhile(/[a-zA-Z_]/); + stream.eatWhile(/[a-zA-Z0-9_]/); + + return "operator"; + } + + stream.eatWhile(/\w/); + var cur = stream.current(); + + // "text:" *(SP / HTAB) (hash-comment / CRLF) + // *(multiline-literal / multiline-dotstart) + // "." CRLF + if ((cur == "text") && stream.eat(":")) + { + state.tokenize = tokenMultiLineString; + return "string"; + } + + if (keywords.propertyIsEnumerable(cur)) + return "keyword"; + + if (atoms.propertyIsEnumerable(cur)) + return "atom"; + + return null; + } + + function tokenMultiLineString(stream, state) + { + state._multiLineString = true; + // the first line is special it may contain a comment + if (!stream.sol()) { + stream.eatSpace(); + + if (stream.peek() == "#") { + stream.skipToEnd(); + return "comment"; + } + + stream.skipToEnd(); + return "string"; + } + + if ((stream.next() == ".") && (stream.eol())) + { + state._multiLineString = false; + state.tokenize = tokenBase; + } + + return "string"; + } + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) + break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return "string"; + }; + } + + return { + startState: function(base) { + return {tokenize: tokenBase, + baseIndent: base || 0, + _indent: []}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) + return null; + + return (state.tokenize || tokenBase)(stream, state);; + }, + + indent: function(state, _textAfter) { + var length = state._indent.length; + if (_textAfter && (_textAfter[0] == "}")) + length--; + + if (length <0) + length = 0; + + return length * indentUnit; + }, + + electricChars: "}" + }; +}); + +CodeMirror.defineMIME("application/sieve", "sieve"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smalltalk/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smalltalk/index.html new file mode 100644 index 0000000..b7aebdb --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smalltalk/index.html @@ -0,0 +1,57 @@ + + + + + CodeMirror: Smalltalk mode + + + + + + + + +

              CodeMirror: Smalltalk mode

              + +
              + + + +

              Simple Smalltalk mode.

              + +

              MIME types defined: text/x-stsrc.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smalltalk/smalltalk.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smalltalk/smalltalk.js new file mode 100644 index 0000000..f2d4cb3 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smalltalk/smalltalk.js @@ -0,0 +1,151 @@ +CodeMirror.defineMode('smalltalk', function(config) { + + var specialChars = /[+\-\/\\*~<>=@%|&?!.,:;^]/; + var keywords = /true|false|nil|self|super|thisContext/; + + var Context = function(tokenizer, parent) { + this.next = tokenizer; + this.parent = parent; + }; + + var Token = function(name, context, eos) { + this.name = name; + this.context = context; + this.eos = eos; + }; + + var State = function() { + this.context = new Context(next, null); + this.expectVariable = true; + this.indentation = 0; + this.userIndentationDelta = 0; + }; + + State.prototype.userIndent = function(indentation) { + this.userIndentationDelta = indentation > 0 ? (indentation / config.indentUnit - this.indentation) : 0; + }; + + var next = function(stream, context, state) { + var token = new Token(null, context, false); + var aChar = stream.next(); + + if (aChar === '"') { + token = nextComment(stream, new Context(nextComment, context)); + + } else if (aChar === '\'') { + token = nextString(stream, new Context(nextString, context)); + + } else if (aChar === '#') { + if (stream.peek() === '\'') { + stream.next(); + token = nextSymbol(stream, new Context(nextSymbol, context)); + } else { + stream.eatWhile(/[^ .\[\]()]/); + token.name = 'string-2'; + } + + } else if (aChar === '$') { + if (stream.next() === '<') { + stream.eatWhile(/[^ >]/); + stream.next(); + } + token.name = 'string-2'; + + } else if (aChar === '|' && state.expectVariable) { + token.context = new Context(nextTemporaries, context); + + } else if (/[\[\]{}()]/.test(aChar)) { + token.name = 'bracket'; + token.eos = /[\[{(]/.test(aChar); + + if (aChar === '[') { + state.indentation++; + } else if (aChar === ']') { + state.indentation = Math.max(0, state.indentation - 1); + } + + } else if (specialChars.test(aChar)) { + stream.eatWhile(specialChars); + token.name = 'operator'; + token.eos = aChar !== ';'; // ; cascaded message expression + + } else if (/\d/.test(aChar)) { + stream.eatWhile(/[\w\d]/); + token.name = 'number'; + + } else if (/[\w_]/.test(aChar)) { + stream.eatWhile(/[\w\d_]/); + token.name = state.expectVariable ? (keywords.test(stream.current()) ? 'keyword' : 'variable') : null; + + } else { + token.eos = state.expectVariable; + } + + return token; + }; + + var nextComment = function(stream, context) { + stream.eatWhile(/[^"]/); + return new Token('comment', stream.eat('"') ? context.parent : context, true); + }; + + var nextString = function(stream, context) { + stream.eatWhile(/[^']/); + return new Token('string', stream.eat('\'') ? context.parent : context, false); + }; + + var nextSymbol = function(stream, context) { + stream.eatWhile(/[^']/); + return new Token('string-2', stream.eat('\'') ? context.parent : context, false); + }; + + var nextTemporaries = function(stream, context) { + var token = new Token(null, context, false); + var aChar = stream.next(); + + if (aChar === '|') { + token.context = context.parent; + token.eos = true; + + } else { + stream.eatWhile(/[^|]/); + token.name = 'variable'; + } + + return token; + }; + + return { + startState: function() { + return new State; + }, + + token: function(stream, state) { + state.userIndent(stream.indentation()); + + if (stream.eatSpace()) { + return null; + } + + var token = state.context.next(stream, state.context, state); + state.context = token.context; + state.expectVariable = token.eos; + + return token.name; + }, + + blankLine: function(state) { + state.userIndent(0); + }, + + indent: function(state, textAfter) { + var i = state.context.next === next && textAfter && textAfter.charAt(0) === ']' ? -1 : state.userIndentationDelta; + return (state.indentation + i) * config.indentUnit; + }, + + electricChars: ']' + }; + +}); + +CodeMirror.defineMIME('text/x-stsrc', {name: 'smalltalk'}); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smarty/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smarty/index.html new file mode 100644 index 0000000..9e41733 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smarty/index.html @@ -0,0 +1,126 @@ + + + + + CodeMirror: Smarty mode + + + + + + + +

              CodeMirror: Smarty mode

              + +

              Default settings (Smarty 2, { and } delimiters)

              +
              + + + +
              + +

              Smarty 2, custom delimiters

              +
              + + + +
              + +

              Smarty 3

              + + + + + + +

              A plain text/Smarty version 2 or 3 mode, which allows for custom delimiter tags.

              + +

              MIME types defined: text/x-smarty

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smarty/smarty.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smarty/smarty.js new file mode 100644 index 0000000..826c2b9 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smarty/smarty.js @@ -0,0 +1,205 @@ +/** + * Smarty 2 and 3 mode. + */ +CodeMirror.defineMode("smarty", function(config) { + "use strict"; + + // our default settings; check to see if they're overridden + var settings = { + rightDelimiter: '}', + leftDelimiter: '{', + smartyVersion: 2 // for backward compatibility + }; + if (config.hasOwnProperty("leftDelimiter")) { + settings.leftDelimiter = config.leftDelimiter; + } + if (config.hasOwnProperty("rightDelimiter")) { + settings.rightDelimiter = config.rightDelimiter; + } + if (config.hasOwnProperty("smartyVersion") && config.smartyVersion === 3) { + settings.smartyVersion = 3; + } + + var keyFunctions = ["debug", "extends", "function", "include", "literal"]; + var last; + var regs = { + operatorChars: /[+\-*&%=<>!?]/, + validIdentifier: /[a-zA-Z0-9_]/, + stringChar: /['"]/ + }; + + var helpers = { + cont: function(style, lastType) { + last = lastType; + return style; + }, + chain: function(stream, state, parser) { + state.tokenize = parser; + return parser(stream, state); + } + }; + + + // our various parsers + var parsers = { + + // the main tokenizer + tokenizer: function(stream, state) { + if (stream.match(settings.leftDelimiter, true)) { + if (stream.eat("*")) { + return helpers.chain(stream, state, parsers.inBlock("comment", "*" + settings.rightDelimiter)); + } else { + // Smarty 3 allows { and } surrounded by whitespace to NOT slip into Smarty mode + state.depth++; + var isEol = stream.eol(); + var isFollowedByWhitespace = /\s/.test(stream.peek()); + if (settings.smartyVersion === 3 && settings.leftDelimiter === "{" && (isEol || isFollowedByWhitespace)) { + state.depth--; + return null; + } else { + state.tokenize = parsers.smarty; + last = "startTag"; + return "tag"; + } + } + } else { + stream.next(); + return null; + } + }, + + // parsing Smarty content + smarty: function(stream, state) { + if (stream.match(settings.rightDelimiter, true)) { + if (settings.smartyVersion === 3) { + state.depth--; + if (state.depth <= 0) { + state.tokenize = parsers.tokenizer; + } + } else { + state.tokenize = parsers.tokenizer; + } + return helpers.cont("tag", null); + } + + if (stream.match(settings.leftDelimiter, true)) { + state.depth++; + return helpers.cont("tag", "startTag"); + } + + var ch = stream.next(); + if (ch == "$") { + stream.eatWhile(regs.validIdentifier); + return helpers.cont("variable-2", "variable"); + } else if (ch == "|") { + return helpers.cont("operator", "pipe"); + } else if (ch == ".") { + return helpers.cont("operator", "property"); + } else if (regs.stringChar.test(ch)) { + state.tokenize = parsers.inAttribute(ch); + return helpers.cont("string", "string"); + } else if (regs.operatorChars.test(ch)) { + stream.eatWhile(regs.operatorChars); + return helpers.cont("operator", "operator"); + } else if (ch == "[" || ch == "]") { + return helpers.cont("bracket", "bracket"); + } else if (ch == "(" || ch == ")") { + return helpers.cont("bracket", "operator"); + } else if (/\d/.test(ch)) { + stream.eatWhile(/\d/); + return helpers.cont("number", "number"); + } else { + + if (state.last == "variable") { + if (ch == "@") { + stream.eatWhile(regs.validIdentifier); + return helpers.cont("property", "property"); + } else if (ch == "|") { + stream.eatWhile(regs.validIdentifier); + return helpers.cont("qualifier", "modifier"); + } + } else if (state.last == "pipe") { + stream.eatWhile(regs.validIdentifier); + return helpers.cont("qualifier", "modifier"); + } else if (state.last == "whitespace") { + stream.eatWhile(regs.validIdentifier); + return helpers.cont("attribute", "modifier"); + } if (state.last == "property") { + stream.eatWhile(regs.validIdentifier); + return helpers.cont("property", null); + } else if (/\s/.test(ch)) { + last = "whitespace"; + return null; + } + + var str = ""; + if (ch != "/") { + str += ch; + } + var c = null; + while (c = stream.eat(regs.validIdentifier)) { + str += c; + } + for (var i=0, j=keyFunctions.length; i + + + + CodeMirror: Smarty mixed mode + + + + + + + + + + + + + + + +

              CodeMirror: Smarty mixed mode

              +
              + + + +

              The Smarty mixed mode depends on the Smarty and HTML mixed modes. HTML + mixed mode itself depends on XML, JavaScript, and CSS modes.

              + +

              It takes the same options, as Smarty and HTML mixed modes.

              + +

              MIME types defined: text/x-smarty.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smartymixed/smartymixed.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smartymixed/smartymixed.js new file mode 100644 index 0000000..c5d0088 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/smartymixed/smartymixed.js @@ -0,0 +1,170 @@ +/** +* @file smartymixed.js +* @brief Smarty Mixed Codemirror mode (Smarty + Mixed HTML) +* @author Ruslan Osmanov +* @version 3.0 +* @date 05.07.2013 +*/ +CodeMirror.defineMode("smartymixed", function(config) { + var settings, regs, helpers, parsers, + htmlMixedMode = CodeMirror.getMode(config, "htmlmixed"), + smartyMode = CodeMirror.getMode(config, "smarty"), + + settings = { + rightDelimiter: '}', + leftDelimiter: '{' + }; + + if (config.hasOwnProperty("leftDelimiter")) { + settings.leftDelimiter = config.leftDelimiter; + } + if (config.hasOwnProperty("rightDelimiter")) { + settings.rightDelimiter = config.rightDelimiter; + } + + regs = { + smartyComment: new RegExp("^" + settings.leftDelimiter + "\\*"), + literalOpen: new RegExp(settings.leftDelimiter + "literal" + settings.rightDelimiter), + literalClose: new RegExp(settings.leftDelimiter + "\/literal" + settings.rightDelimiter), + hasLeftDelimeter: new RegExp(".*" + settings.leftDelimiter), + htmlHasLeftDelimeter: new RegExp("[^<>]*" + settings.leftDelimiter) + }; + + helpers = { + chain: function(stream, state, parser) { + state.tokenize = parser; + return parser(stream, state); + }, + + cleanChain: function(stream, state, parser) { + state.tokenize = null; + state.localState = null; + state.localMode = null; + return (typeof parser == "string") ? (parser ? parser : null) : parser(stream, state); + }, + + maybeBackup: function(stream, pat, style) { + var cur = stream.current(); + var close = cur.search(pat), + m; + if (close > - 1) stream.backUp(cur.length - close); + else if (m = cur.match(/<\/?$/)) { + stream.backUp(cur.length); + if (!stream.match(pat, false)) stream.match(cur[0]); + } + return style; + } + }; + + parsers = { + html: function(stream, state) { + if (!state.inLiteral && stream.match(regs.htmlHasLeftDelimeter, false)) { + state.tokenize = parsers.smarty; + state.localMode = smartyMode; + state.localState = smartyMode.startState(htmlMixedMode.indent(state.htmlMixedState, "")); + return helpers.maybeBackup(stream, settings.leftDelimiter, smartyMode.token(stream, state.localState)); + } + return htmlMixedMode.token(stream, state.htmlMixedState); + }, + + smarty: function(stream, state) { + if (stream.match(settings.leftDelimiter, false)) { + if (stream.match(regs.smartyComment, false)) { + return helpers.chain(stream, state, parsers.inBlock("comment", "*" + settings.rightDelimiter)); + } + } else if (stream.match(settings.rightDelimiter, false)) { + stream.eat(settings.rightDelimiter); + state.tokenize = parsers.html; + state.localMode = htmlMixedMode; + state.localState = state.htmlMixedState; + return "tag"; + } + + return helpers.maybeBackup(stream, settings.rightDelimiter, smartyMode.token(stream, state.localState)); + }, + + inBlock: function(style, terminator) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + helpers.cleanChain(stream, state, ""); + break; + } + stream.next(); + } + return style; + }; + } + }; + + return { + startState: function() { + var state = htmlMixedMode.startState(); + return { + token: parsers.html, + localMode: null, + localState: null, + htmlMixedState: state, + tokenize: null, + inLiteral: false + }; + }, + + copyState: function(state) { + var local = null, tok = (state.tokenize || state.token); + if (state.localState) { + local = CodeMirror.copyState((tok != parsers.html ? smartyMode : htmlMixedMode), state.localState); + } + return { + token: state.token, + tokenize: state.tokenize, + localMode: state.localMode, + localState: local, + htmlMixedState: CodeMirror.copyState(htmlMixedMode, state.htmlMixedState), + inLiteral: state.inLiteral + }; + }, + + token: function(stream, state) { + if (stream.match(settings.leftDelimiter, false)) { + if (!state.inLiteral && stream.match(regs.literalOpen, true)) { + state.inLiteral = true; + return "keyword"; + } else if (state.inLiteral && stream.match(regs.literalClose, true)) { + state.inLiteral = false; + return "keyword"; + } + } + if (state.inLiteral && state.localState != state.htmlMixedState) { + state.tokenize = parsers.html; + state.localMode = htmlMixedMode; + state.localState = state.htmlMixedState; + } + + var style = (state.tokenize || state.token)(stream, state); + return style; + }, + + indent: function(state, textAfter) { + if (state.localMode == smartyMode + || (state.inLiteral && !state.localMode) + || regs.hasLeftDelimeter.test(textAfter)) { + return CodeMirror.Pass; + } + return htmlMixedMode.indent(state.htmlMixedState, textAfter); + }, + + electricChars: "/{}:", + + innerMode: function(state) { + return { + state: state.localState || state.htmlMixedState, + mode: state.localMode || htmlMixedMode + }; + } + }; +}, +"htmlmixed"); + +CodeMirror.defineMIME("text/x-smarty", "smartymixed"); +// vim: et ts=2 sts=2 sw=2 diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sparql/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sparql/index.html new file mode 100644 index 0000000..e743387 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sparql/index.html @@ -0,0 +1,42 @@ + + + + + CodeMirror: SPARQL mode + + + + + + + + +

              CodeMirror: SPARQL mode

              +
              + + +

              MIME types defined: application/x-sparql-query.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sparql/sparql.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sparql/sparql.js new file mode 100644 index 0000000..0329057 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sparql/sparql.js @@ -0,0 +1,145 @@ +CodeMirror.defineMode("sparql", function(config) { + var indentUnit = config.indentUnit; + var curPunc; + + function wordRegexp(words) { + return new RegExp("^(?:" + words.join("|") + ")$", "i"); + } + var ops = wordRegexp(["str", "lang", "langmatches", "datatype", "bound", "sameterm", "isiri", "isuri", + "isblank", "isliteral", "a"]); + var keywords = wordRegexp(["base", "prefix", "select", "distinct", "reduced", "construct", "describe", + "ask", "from", "named", "where", "order", "limit", "offset", "filter", "optional", + "graph", "by", "asc", "desc", "as", "having", "undef", "values", "group", + "minus", "in", "not", "service", "silent", "using", "insert", "delete", "union", + "data", "copy", "to", "move", "add", "create", "drop", "clear", "load"]); + var operatorChars = /[*+\-<>=&|]/; + + function tokenBase(stream, state) { + var ch = stream.next(); + curPunc = null; + if (ch == "$" || ch == "?") { + stream.match(/^[\w\d]*/); + return "variable-2"; + } + else if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { + stream.match(/^[^\s\u00a0>]*>?/); + return "atom"; + } + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenLiteral(ch); + return state.tokenize(stream, state); + } + else if (/[{}\(\),\.;\[\]]/.test(ch)) { + curPunc = ch; + return null; + } + else if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + else if (operatorChars.test(ch)) { + stream.eatWhile(operatorChars); + return null; + } + else if (ch == ":") { + stream.eatWhile(/[\w\d\._\-]/); + return "atom"; + } + else { + stream.eatWhile(/[_\w\d]/); + if (stream.eat(":")) { + stream.eatWhile(/[\w\d_\-]/); + return "atom"; + } + var word = stream.current(); + if (ops.test(word)) + return null; + else if (keywords.test(word)) + return "keyword"; + else + return "variable"; + } + } + + function tokenLiteral(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && ch == "\\"; + } + return "string"; + }; + } + + function pushContext(state, type, col) { + state.context = {prev: state.context, indent: state.indent, col: col, type: type}; + } + function popContext(state) { + state.indent = state.context.indent; + state.context = state.context.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, + context: null, + indent: 0, + col: 0}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.context && state.context.align == null) state.context.align = false; + state.indent = stream.indentation(); + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + + if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { + state.context.align = true; + } + + if (curPunc == "(") pushContext(state, ")", stream.column()); + else if (curPunc == "[") pushContext(state, "]", stream.column()); + else if (curPunc == "{") pushContext(state, "}", stream.column()); + else if (/[\]\}\)]/.test(curPunc)) { + while (state.context && state.context.type == "pattern") popContext(state); + if (state.context && curPunc == state.context.type) popContext(state); + } + else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); + else if (/atom|string|variable/.test(style) && state.context) { + if (/[\}\]]/.test(state.context.type)) + pushContext(state, "pattern", stream.column()); + else if (state.context.type == "pattern" && !state.context.align) { + state.context.align = true; + state.context.col = stream.column(); + } + } + + return style; + }, + + indent: function(state, textAfter) { + var firstChar = textAfter && textAfter.charAt(0); + var context = state.context; + if (/[\]\}]/.test(firstChar)) + while (context && context.type == "pattern") context = context.prev; + + var closing = context && firstChar == context.type; + if (!context) + return 0; + else if (context.type == "pattern") + return context.col; + else if (context.align) + return context.col + (closing ? 0 : 1); + else + return context.indent + (closing ? 0 : indentUnit); + } + }; +}); + +CodeMirror.defineMIME("application/x-sparql-query", "sparql"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sql/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sql/index.html new file mode 100644 index 0000000..acf60b8 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sql/index.html @@ -0,0 +1,68 @@ + + + + + SQL Mode for CodeMirror + + + + + + + + +

              SQL Mode for CodeMirror

              +
              + +
              +

              MIME types defined: + text/x-sql, + text/x-mysql, + text/x-mariadb, + text/x-cassandra, + text/x-plsql. +

              +

              + Tests: + normal, + verbose. +

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sql/sql.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sql/sql.js new file mode 100644 index 0000000..9016cc7 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/sql/sql.js @@ -0,0 +1,349 @@ +CodeMirror.defineMode("sql", function(config, parserConfig) { + "use strict"; + + var client = parserConfig.client || {}, + atoms = parserConfig.atoms || {"false": true, "true": true, "null": true}, + builtin = parserConfig.builtin || {}, + keywords = parserConfig.keywords || {}, + operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^]/, + support = parserConfig.support || {}, + hooks = parserConfig.hooks || {}, + dateSQL = parserConfig.dateSQL || {"date" : true, "time" : true, "timestamp" : true}; + + function tokenBase(stream, state) { + var ch = stream.next(); + + // call hooks from the mime type + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + + if (support.hexNumber == true && + ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) + || (ch == "x" || ch == "X") && stream.match(/^'[0-9a-fA-F]+'/))) { + // hex + // ref: http://dev.mysql.com/doc/refman/5.5/en/hexadecimal-literals.html + return "number"; + } else if (support.binaryNumber == true && + (((ch == "b" || ch == "B") && stream.match(/^'[01]+'/)) + || (ch == "0" && stream.match(/^b[01]+/)))) { + // bitstring + // ref: http://dev.mysql.com/doc/refman/5.5/en/bit-field-literals.html + return "number"; + } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { + // numbers + // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html + stream.match(/^[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/); + support.decimallessFloat == true && stream.eat('.'); + return "number"; + } else if (ch == "?" && (stream.eatSpace() || stream.eol() || stream.eat(";"))) { + // placeholders + return "variable-3"; + } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { + // strings + // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html + state.tokenize = tokenLiteral(ch); + return state.tokenize(stream, state); + } else if ((((support.nCharCast == true && (ch == "n" || ch == "N")) + || (support.charsetCast == true && ch == "_" && stream.match(/[a-z][a-z0-9]*/i))) + && (stream.peek() == "'" || stream.peek() == '"'))) { + // charset casting: _utf8'str', N'str', n'str' + // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html + return "keyword"; + } else if (/^[\(\),\;\[\]]/.test(ch)) { + // no highlightning + return null; + } else if (support.commentSlashSlash && ch == "/" && stream.eat("/")) { + // 1-line comment + stream.skipToEnd(); + return "comment"; + } else if ((support.commentHash && ch == "#") + || (ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) { + // 1-line comments + // ref: https://kb.askmonty.org/en/comment-syntax/ + stream.skipToEnd(); + return "comment"; + } else if (ch == "/" && stream.eat("*")) { + // multi-line comments + // ref: https://kb.askmonty.org/en/comment-syntax/ + state.tokenize = tokenComment; + return state.tokenize(stream, state); + } else if (ch == ".") { + // .1 for 0.1 + if (support.zerolessFloat == true && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i)) { + return "number"; + } + // .table_name (ODBC) + // // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html + if (support.ODBCdotTable == true && stream.match(/^[a-zA-Z_]+/)) { + return "variable-2"; + } + } else if (operatorChars.test(ch)) { + // operators + stream.eatWhile(operatorChars); + return null; + } else if (ch == '{' && + (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/))) { + // dates (weird ODBC syntax) + // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html + return "number"; + } else { + stream.eatWhile(/^[_\w\d]/); + var word = stream.current().toLowerCase(); + // dates (standard SQL syntax) + // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html + if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) + return "number"; + if (atoms.hasOwnProperty(word)) return "atom"; + if (builtin.hasOwnProperty(word)) return "builtin"; + if (keywords.hasOwnProperty(word)) return "keyword"; + if (client.hasOwnProperty(word)) return "string-2"; + return null; + } + } + + // 'string', with char specified in quote escaped by '\' + function tokenLiteral(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && ch == "\\"; + } + return "string"; + }; + } + function tokenComment(stream, state) { + while (true) { + if (stream.skipTo("*")) { + stream.next(); + if (stream.eat("/")) { + state.tokenize = tokenBase; + break; + } + } else { + stream.skipToEnd(); + break; + } + } + return "comment"; + } + + function pushContext(stream, state, type) { + state.context = { + prev: state.context, + indent: stream.indentation(), + col: stream.column(), + type: type + }; + } + + function popContext(state) { + state.indent = state.context.indent; + state.context = state.context.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, context: null}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.context && state.context.align == null) + state.context.align = false; + } + if (stream.eatSpace()) return null; + + var style = state.tokenize(stream, state); + if (style == "comment") return style; + + if (state.context && state.context.align == null) + state.context.align = true; + + var tok = stream.current(); + if (tok == "(") + pushContext(stream, state, ")"); + else if (tok == "[") + pushContext(stream, state, "]"); + else if (state.context && state.context.type == tok) + popContext(state); + return style; + }, + + indent: function(state, textAfter) { + var cx = state.context; + if (!cx) return CodeMirror.Pass; + if (cx.align) return cx.col + (textAfter.charAt(0) == cx.type ? 0 : 1); + else return cx.indent + config.indentUnit; + } + }; +}); + +(function() { + "use strict"; + + // `identifier` + function hookIdentifier(stream) { + // MySQL/MariaDB identifiers + // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html + var ch; + while ((ch = stream.next()) != null) { + if (ch == "`" && !stream.eat("`")) return "variable-2"; + } + return null; + } + + // variable token + function hookVar(stream) { + // variables + // @@prefix.varName @varName + // varName can be quoted with ` or ' or " + // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html + if (stream.eat("@")) { + stream.match(/^session\./); + stream.match(/^local\./); + stream.match(/^global\./); + } + + if (stream.eat("'")) { + stream.match(/^.*'/); + return "variable-2"; + } else if (stream.eat('"')) { + stream.match(/^.*"/); + return "variable-2"; + } else if (stream.eat("`")) { + stream.match(/^.*`/); + return "variable-2"; + } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) { + return "variable-2"; + } + return null; + }; + + // short client keyword token + function hookClient(stream) { + // \N means NULL + // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html + if (stream.eat("N")) { + return "atom"; + } + // \g, etc + // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html + return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; + } + + // these keywords are used by all SQL dialects (however, a mode can still overwrite it) + var sqlKeywords = "alter and as asc between by count create delete desc distinct drop from having in insert into is join like not on or order select set table union update values where "; + + // turn a space-separated list into an array + function set(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + // A generic SQL Mode. It's not a standard, it just try to support what is generally supported + CodeMirror.defineMIME("text/x-sql", { + name: "sql", + keywords: set(sqlKeywords + "begin"), + builtin: set("bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") + }); + + CodeMirror.defineMIME("text/x-mysql", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general global grant grants group groupby_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), + builtin: set("bool boolean bit blob decimal double enum float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=&|^]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), + hooks: { + "@": hookVar, + "`": hookIdentifier, + "\\": hookClient + } + }); + + CodeMirror.defineMIME("text/x-mariadb", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated global grant grants group groupby_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), + builtin: set("bool boolean bit blob decimal double enum float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=&|^]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), + hooks: { + "@": hookVar, + "`": hookIdentifier, + "\\": hookClient + } + }); + + // the query language used by Apache Cassandra is called CQL, but this mime type + // is called Cassandra to avoid confusion with Contextual Query Language + CodeMirror.defineMIME("text/x-cassandra", { + name: "sql", + client: { }, + keywords: set("use select from using consistency where limit first reversed first and in insert into values using consistency ttl update set delete truncate begin batch apply create keyspace with columnfamily primary key index on drop alter type add any one quorum all local_quorum each_quorum"), + builtin: set("ascii bigint blob boolean counter decimal double float int text timestamp uuid varchar varint"), + atoms: set("false true"), + operatorChars: /^[<>=]/, + dateSQL: { }, + support: set("commentSlashSlash decimallessFloat"), + hooks: { } + }); + + // this is based on Peter Raganitsch's 'plsql' mode + CodeMirror.defineMIME("text/x-plsql", { + name: "sql", + client: set("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"), + keywords: set("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"), + functions: set("abs acos add_months ascii asin atan atan2 average bfilename ceil chartorowid chr concat convert cos cosh count decode deref dual dump dup_val_on_index empty error exp false floor found glb greatest hextoraw initcap instr instrb isopen last_day least lenght lenghtb ln lower lpad ltrim lub make_ref max min mod months_between new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null nvl others power rawtohex reftohex round rowcount rowidtochar rpad rtrim sign sin sinh soundex sqlcode sqlerrm sqrt stddev substr substrb sum sysdate tan tanh to_char to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid upper user userenv variance vsize"), + builtin: set("bfile blob character clob dec float int integer mlslabel natural naturaln nchar nclob number numeric nvarchar2 real rowtype signtype smallint string varchar varchar2"), + operatorChars: /^[*+\-%<>!=~]/, + dateSQL: set("date time timestamp"), + support: set("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber") + }); +}()); + +/* + How Properties of Mime Types are used by SQL Mode + ================================================= + + keywords: + A list of keywords you want to be highlighted. + functions: + A list of function names you want to be highlighted. + builtin: + A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword"). + operatorChars: + All characters that must be handled as operators. + client: + Commands parsed and executed by the client (not the server). + support: + A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. + * ODBCdotTable: .tableName + * zerolessFloat: .1 + * doubleQuote + * nCharCast: N'string' + * charsetCast: _utf8'string' + * commentHash: use # char for comments + * commentSlashSlash: use // for comments + * commentSpaceRequired: require a space after -- for comments + atoms: + Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others: + UNKNOWN, INFINITY, UNDERFLOW, NaN... + dateSQL: + Used for date/time SQL standard syntax, because not all DBMS's support same temporal types. +*/ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/stex/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/stex/index.html new file mode 100644 index 0000000..2dafe69 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/stex/index.html @@ -0,0 +1,98 @@ + + + + + CodeMirror: sTeX mode + + + + + + + +

              CodeMirror: sTeX mode

              +
              + + +

              MIME types defined: text/x-stex.

              + +

              Parsing/Highlighting Tests: normal, verbose.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/stex/stex.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/stex/stex.js new file mode 100644 index 0000000..ca04c24 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/stex/stex.js @@ -0,0 +1,246 @@ +/* + * Author: Constantin Jucovschi (c.jucovschi@jacobs-university.de) + * Licence: MIT + */ + +CodeMirror.defineMode("stex", function() { + "use strict"; + + function pushCommand(state, command) { + state.cmdState.push(command); + } + + function peekCommand(state) { + if (state.cmdState.length > 0) { + return state.cmdState[state.cmdState.length - 1]; + } else { + return null; + } + } + + function popCommand(state) { + var plug = state.cmdState.pop(); + if (plug) { + plug.closeBracket(); + } + } + + // returns the non-default plugin closest to the end of the list + function getMostPowerful(state) { + var context = state.cmdState; + for (var i = context.length - 1; i >= 0; i--) { + var plug = context[i]; + if (plug.name == "DEFAULT") { + continue; + } + return plug; + } + return { styleIdentifier: function() { return null; } }; + } + + function addPluginPattern(pluginName, cmdStyle, styles) { + return function () { + this.name = pluginName; + this.bracketNo = 0; + this.style = cmdStyle; + this.styles = styles; + this.argument = null; // \begin and \end have arguments that follow. These are stored in the plugin + + this.styleIdentifier = function() { + return this.styles[this.bracketNo - 1] || null; + }; + this.openBracket = function() { + this.bracketNo++; + return "bracket"; + }; + this.closeBracket = function() {}; + }; + } + + var plugins = {}; + + plugins["importmodule"] = addPluginPattern("importmodule", "tag", ["string", "builtin"]); + plugins["documentclass"] = addPluginPattern("documentclass", "tag", ["", "atom"]); + plugins["usepackage"] = addPluginPattern("usepackage", "tag", ["atom"]); + plugins["begin"] = addPluginPattern("begin", "tag", ["atom"]); + plugins["end"] = addPluginPattern("end", "tag", ["atom"]); + + plugins["DEFAULT"] = function () { + this.name = "DEFAULT"; + this.style = "tag"; + + this.styleIdentifier = this.openBracket = this.closeBracket = function() {}; + }; + + function setState(state, f) { + state.f = f; + } + + // called when in a normal (no environment) context + function normal(source, state) { + var plug; + // Do we look like '\command' ? If so, attempt to apply the plugin 'command' + if (source.match(/^\\[a-zA-Z@]+/)) { + var cmdName = source.current().slice(1); + plug = plugins[cmdName] || plugins["DEFAULT"]; + plug = new plug(); + pushCommand(state, plug); + setState(state, beginParams); + return plug.style; + } + + // escape characters + if (source.match(/^\\[$&%#{}_]/)) { + return "tag"; + } + + // white space control characters + if (source.match(/^\\[,;!\/\\]/)) { + return "tag"; + } + + // find if we're starting various math modes + if (source.match("\\[")) { + setState(state, function(source, state){ return inMathMode(source, state, "\\]"); }); + return "keyword"; + } + if (source.match("$$")) { + setState(state, function(source, state){ return inMathMode(source, state, "$$"); }); + return "keyword"; + } + if (source.match("$")) { + setState(state, function(source, state){ return inMathMode(source, state, "$"); }); + return "keyword"; + } + + var ch = source.next(); + if (ch == "%") { + // special case: % at end of its own line; stay in same state + if (!source.eol()) { + setState(state, inCComment); + } + return "comment"; + } + else if (ch == '}' || ch == ']') { + plug = peekCommand(state); + if (plug) { + plug.closeBracket(ch); + setState(state, beginParams); + } else { + return "error"; + } + return "bracket"; + } else if (ch == '{' || ch == '[') { + plug = plugins["DEFAULT"]; + plug = new plug(); + pushCommand(state, plug); + return "bracket"; + } + else if (/\d/.test(ch)) { + source.eatWhile(/[\w.%]/); + return "atom"; + } + else { + source.eatWhile(/[\w\-_]/); + plug = getMostPowerful(state); + if (plug.name == 'begin') { + plug.argument = source.current(); + } + return plug.styleIdentifier(); + } + } + + function inCComment(source, state) { + source.skipToEnd(); + setState(state, normal); + return "comment"; + } + + function inMathMode(source, state, endModeSeq) { + if (source.eatSpace()) { + return null; + } + if (source.match(endModeSeq)) { + setState(state, normal); + return "keyword"; + } + if (source.match(/^\\[a-zA-Z@]+/)) { + return "tag"; + } + if (source.match(/^[a-zA-Z]+/)) { + return "variable-2"; + } + // escape characters + if (source.match(/^\\[$&%#{}_]/)) { + return "tag"; + } + // white space control characters + if (source.match(/^\\[,;!\/]/)) { + return "tag"; + } + // special math-mode characters + if (source.match(/^[\^_&]/)) { + return "tag"; + } + // non-special characters + if (source.match(/^[+\-<>|=,\/@!*:;'"`~#?]/)) { + return null; + } + if (source.match(/^(\d+\.\d*|\d*\.\d+|\d+)/)) { + return "number"; + } + var ch = source.next(); + if (ch == "{" || ch == "}" || ch == "[" || ch == "]" || ch == "(" || ch == ")") { + return "bracket"; + } + + // eat comments here, because inCComment returns us to normal state! + if (ch == "%") { + if (!source.eol()) { + source.skipToEnd(); + } + return "comment"; + } + return "error"; + } + + function beginParams(source, state) { + var ch = source.peek(), lastPlug; + if (ch == '{' || ch == '[') { + lastPlug = peekCommand(state); + lastPlug.openBracket(ch); + source.eat(ch); + setState(state, normal); + return "bracket"; + } + if (/[ \t\r]/.test(ch)) { + source.eat(ch); + return null; + } + setState(state, normal); + popCommand(state); + + return normal(source, state); + } + + return { + startState: function() { + return { + cmdState: [], + f: normal + }; + }, + copyState: function(s) { + return { + cmdState: s.cmdState.slice(), + f: s.f + }; + }, + token: function(stream, state) { + return state.f(stream, state); + } + }; +}); + +CodeMirror.defineMIME("text/x-stex", "stex"); +CodeMirror.defineMIME("text/x-latex", "stex"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/stex/test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/stex/test.js new file mode 100644 index 0000000..ab629e8 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/stex/test.js @@ -0,0 +1,120 @@ +(function() { + var mode = CodeMirror.getMode({tabSize: 4}, "stex"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("word", + "foo"); + + MT("twoWords", + "foo bar"); + + MT("beginEndDocument", + "[tag \\begin][bracket {][atom document][bracket }]", + "[tag \\end][bracket {][atom document][bracket }]"); + + MT("beginEndEquation", + "[tag \\begin][bracket {][atom equation][bracket }]", + " E=mc^2", + "[tag \\end][bracket {][atom equation][bracket }]"); + + MT("beginModule", + "[tag \\begin][bracket {][atom module][bracket }[[]]]"); + + MT("beginModuleId", + "[tag \\begin][bracket {][atom module][bracket }[[]id=bbt-size[bracket ]]]"); + + MT("importModule", + "[tag \\importmodule][bracket [[][string b-b-t][bracket ]]{][builtin b-b-t][bracket }]"); + + MT("importModulePath", + "[tag \\importmodule][bracket [[][tag \\KWARCslides][bracket {][string dmath/en/cardinality][bracket }]]{][builtin card][bracket }]"); + + MT("psForPDF", + "[tag \\PSforPDF][bracket [[][atom 1][bracket ]]{]#1[bracket }]"); + + MT("comment", + "[comment % foo]"); + + MT("tagComment", + "[tag \\item][comment % bar]"); + + MT("commentTag", + " [comment % \\item]"); + + MT("commentLineBreak", + "[comment %]", + "foo"); + + MT("tagErrorCurly", + "[tag \\begin][error }][bracket {]"); + + MT("tagErrorSquare", + "[tag \\item][error ]]][bracket {]"); + + MT("commentCurly", + "[comment % }]"); + + MT("tagHash", + "the [tag \\#] key"); + + MT("tagNumber", + "a [tag \\$][atom 5] stetson"); + + MT("tagPercent", + "[atom 100][tag \\%] beef"); + + MT("tagAmpersand", + "L [tag \\&] N"); + + MT("tagUnderscore", + "foo[tag \\_]bar"); + + MT("tagBracketOpen", + "[tag \\emph][bracket {][tag \\{][bracket }]"); + + MT("tagBracketClose", + "[tag \\emph][bracket {][tag \\}][bracket }]"); + + MT("tagLetterNumber", + "section [tag \\S][atom 1]"); + + MT("textTagNumber", + "para [tag \\P][atom 2]"); + + MT("thinspace", + "x[tag \\,]y"); + + MT("thickspace", + "x[tag \\;]y"); + + MT("negativeThinspace", + "x[tag \\!]y"); + + MT("periodNotSentence", + "J.\\ L.\\ is"); + + MT("periodSentence", + "X[tag \\@]. The"); + + MT("italicCorrection", + "[bracket {][tag \\em] If[tag \\/][bracket }] I"); + + MT("tagBracket", + "[tag \\newcommand][bracket {][tag \\pop][bracket }]"); + + MT("inlineMathTagFollowedByNumber", + "[keyword $][tag \\pi][number 2][keyword $]"); + + MT("inlineMath", + "[keyword $][number 3][variable-2 x][tag ^][number 2.45]-[tag \\sqrt][bracket {][tag \\$\\alpha][bracket }] = [number 2][keyword $] other text"); + + MT("displayMath", + "More [keyword $$]\t[variable-2 S][tag ^][variable-2 n][tag \\sum] [variable-2 i][keyword $$] other text"); + + MT("mathWithComment", + "[keyword $][variable-2 x] [comment % $]", + "[variable-2 y][keyword $] other text"); + + MT("lineBreakArgument", + "[tag \\\\][bracket [[][atom 1cm][bracket ]]]"); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tcl/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tcl/index.html new file mode 100644 index 0000000..e2e42a0 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tcl/index.html @@ -0,0 +1,129 @@ + + + + + CodeMirror: Tcl mode + + + + + + + +

              CodeMirror: Tcl mode

              +
              + + +

              MIME types defined: text/x-tcl.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tcl/tcl.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tcl/tcl.js new file mode 100644 index 0000000..ed2c697 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tcl/tcl.js @@ -0,0 +1,131 @@ +//tcl mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara +CodeMirror.defineMode("tcl", function() { + function parseWords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var keywords = parseWords("Tcl safe after append array auto_execok auto_import auto_load " + + "auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror " + + "binary break catch cd close concat continue dde eof encoding error " + + "eval exec exit expr fblocked fconfigure fcopy file fileevent filename " + + "filename flush for foreach format gets glob global history http if " + + "incr info interp join lappend lindex linsert list llength load lrange " + + "lreplace lsearch lset lsort memory msgcat namespace open package parray " + + "pid pkg::create pkg_mkIndex proc puts pwd re_syntax read regex regexp " + + "registry regsub rename resource return scan seek set socket source split " + + "string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord " + + "tcl_wordBreakAfter tcl_startOfPreviousWord tcl_wordBreakBefore tcltest " + + "tclvars tell time trace unknown unset update uplevel upvar variable " + + "vwait"); + var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); + var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + function tokenBase(stream, state) { + var beforeParams = state.beforeParams; + state.beforeParams = false; + var ch = stream.next(); + if ((ch == '"' || ch == "'") && state.inParams) + return chain(stream, state, tokenString(ch)); + else if (/[\[\]{}\(\),;\.]/.test(ch)) { + if (ch == "(" && beforeParams) state.inParams = true; + else if (ch == ")") state.inParams = false; + return null; + } + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + else if (ch == "#" && stream.eat("*")) { + return chain(stream, state, tokenComment); + } + else if (ch == "#" && stream.match(/ *\[ *\[/)) { + return chain(stream, state, tokenUnparsed); + } + else if (ch == "#" && stream.eat("#")) { + stream.skipToEnd(); + return "comment"; + } + else if (ch == '"') { + stream.skipTo(/"/); + return "comment"; + } + else if (ch == "$") { + stream.eatWhile(/[$_a-z0-9A-Z\.{:]/); + stream.eatWhile(/}/); + state.beforeParams = true; + return "builtin"; + } + else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "comment"; + } + else { + stream.eatWhile(/[\w\$_{}]/); + var word = stream.current().toLowerCase(); + if (keywords && keywords.propertyIsEnumerable(word)) + return "keyword"; + if (functions && functions.propertyIsEnumerable(word)) { + state.beforeParams = true; + return "keyword"; + } + return null; + } + } + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) { + end = true; + break; + } + escaped = !escaped && next == "\\"; + } + if (end) state.tokenize = tokenBase; + return "string"; + }; + } + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "#" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + function tokenUnparsed(stream, state) { + var maybeEnd = 0, ch; + while (ch = stream.next()) { + if (ch == "#" && maybeEnd == 2) { + state.tokenize = tokenBase; + break; + } + if (ch == "]") + maybeEnd++; + else if (ch != " ") + maybeEnd = 0; + } + return "meta"; + } + return { + startState: function() { + return { + tokenize: tokenBase, + beforeParams: false, + inParams: false + }; + }, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + } + }; +}); +CodeMirror.defineMIME("text/x-tcl", "tcl"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiddlywiki/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiddlywiki/index.html new file mode 100644 index 0000000..848f33a --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiddlywiki/index.html @@ -0,0 +1,142 @@ + + + + + CodeMirror: TiddlyWiki mode + + + + + + + + + +

              CodeMirror: TiddlyWiki mode

              + +
              + + + +

              TiddlyWiki mode supports a single configuration.

              + +

              MIME types defined: text/x-tiddlywiki.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiddlywiki/tiddlywiki.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiddlywiki/tiddlywiki.css new file mode 100644 index 0000000..9a69b63 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiddlywiki/tiddlywiki.css @@ -0,0 +1,14 @@ +span.cm-underlined { + text-decoration: underline; +} +span.cm-strikethrough { + text-decoration: line-through; +} +span.cm-brace { + color: #170; + font-weight: bold; +} +span.cm-table { + color: blue; + font-weight: bold; +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiddlywiki/tiddlywiki.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiddlywiki/tiddlywiki.js new file mode 100644 index 0000000..24a2478 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiddlywiki/tiddlywiki.js @@ -0,0 +1,353 @@ +/*** + |''Name''|tiddlywiki.js| + |''Description''|Enables TiddlyWikiy syntax highlighting using CodeMirror| + |''Author''|PMario| + |''Version''|0.1.7| + |''Status''|''stable''| + |''Source''|[[GitHub|https://github.com/pmario/CodeMirror2/blob/tw-syntax/mode/tiddlywiki]]| + |''Documentation''|http://codemirror.tiddlyspace.com/| + |''License''|[[MIT License|http://www.opensource.org/licenses/mit-license.php]]| + |''CoreVersion''|2.5.0| + |''Requires''|codemirror.js| + |''Keywords''|syntax highlighting color code mirror codemirror| + ! Info + CoreVersion parameter is needed for TiddlyWiki only! +***/ +//{{{ +CodeMirror.defineMode("tiddlywiki", function () { + // Tokenizer + var textwords = {}; + + var keywords = function () { + function kw(type) { + return { type: type, style: "macro"}; + } + return { + "allTags": kw('allTags'), "closeAll": kw('closeAll'), "list": kw('list'), + "newJournal": kw('newJournal'), "newTiddler": kw('newTiddler'), + "permaview": kw('permaview'), "saveChanges": kw('saveChanges'), + "search": kw('search'), "slider": kw('slider'), "tabs": kw('tabs'), + "tag": kw('tag'), "tagging": kw('tagging'), "tags": kw('tags'), + "tiddler": kw('tiddler'), "timeline": kw('timeline'), + "today": kw('today'), "version": kw('version'), "option": kw('option'), + + "with": kw('with'), + "filter": kw('filter') + }; + }(); + + var isSpaceName = /[\w_\-]/i, + reHR = /^\-\-\-\-+$/, //
              + reWikiCommentStart = /^\/\*\*\*$/, // /*** + reWikiCommentStop = /^\*\*\*\/$/, // ***/ + reBlockQuote = /^<<<$/, + + reJsCodeStart = /^\/\/\{\{\{$/, // //{{{ js block start + reJsCodeStop = /^\/\/\}\}\}$/, // //}}} js stop + reXmlCodeStart = /^$/, // xml block start + reXmlCodeStop = /^$/, // xml stop + + reCodeBlockStart = /^\{\{\{$/, // {{{ TW text div block start + reCodeBlockStop = /^\}\}\}$/, // }}} TW text stop + + reUntilCodeStop = /.*?\}\}\}/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + + function ret(tp, style, cont) { + type = tp; + content = cont; + return style; + } + + function jsTokenBase(stream, state) { + var sol = stream.sol(), ch; + + state.block = false; // indicates the start of a code block. + + ch = stream.peek(); // don't eat, to make matching simpler + + // check start of blocks + if (sol && /[<\/\*{}\-]/.test(ch)) { + if (stream.match(reCodeBlockStart)) { + state.block = true; + return chain(stream, state, twTokenCode); + } + if (stream.match(reBlockQuote)) { + return ret('quote', 'quote'); + } + if (stream.match(reWikiCommentStart) || stream.match(reWikiCommentStop)) { + return ret('code', 'comment'); + } + if (stream.match(reJsCodeStart) || stream.match(reJsCodeStop) || stream.match(reXmlCodeStart) || stream.match(reXmlCodeStop)) { + return ret('code', 'comment'); + } + if (stream.match(reHR)) { + return ret('hr', 'hr'); + } + } // sol + ch = stream.next(); + + if (sol && /[\/\*!#;:>|]/.test(ch)) { + if (ch == "!") { // tw header + stream.skipToEnd(); + return ret("header", "header"); + } + if (ch == "*") { // tw list + stream.eatWhile('*'); + return ret("list", "comment"); + } + if (ch == "#") { // tw numbered list + stream.eatWhile('#'); + return ret("list", "comment"); + } + if (ch == ";") { // definition list, term + stream.eatWhile(';'); + return ret("list", "comment"); + } + if (ch == ":") { // definition list, description + stream.eatWhile(':'); + return ret("list", "comment"); + } + if (ch == ">") { // single line quote + stream.eatWhile(">"); + return ret("quote", "quote"); + } + if (ch == '|') { + return ret('table', 'header'); + } + } + + if (ch == '{' && stream.match(/\{\{/)) { + return chain(stream, state, twTokenCode); + } + + // rudimentary html:// file:// link matching. TW knows much more ... + if (/[hf]/i.test(ch)) { + if (/[ti]/i.test(stream.peek()) && stream.match(/\b(ttps?|tp|ile):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i)) { + return ret("link", "link"); + } + } + // just a little string indicator, don't want to have the whole string covered + if (ch == '"') { + return ret('string', 'string'); + } + if (ch == '~') { // _no_ CamelCase indicator should be bold + return ret('text', 'brace'); + } + if (/[\[\]]/.test(ch)) { // check for [[..]] + if (stream.peek() == ch) { + stream.next(); + return ret('brace', 'brace'); + } + } + if (ch == "@") { // check for space link. TODO fix @@...@@ highlighting + stream.eatWhile(isSpaceName); + return ret("link", "link"); + } + if (/\d/.test(ch)) { // numbers + stream.eatWhile(/\d/); + return ret("number", "number"); + } + if (ch == "/") { // tw invisible comment + if (stream.eat("%")) { + return chain(stream, state, twTokenComment); + } + else if (stream.eat("/")) { // + return chain(stream, state, twTokenEm); + } + } + if (ch == "_") { // tw underline + if (stream.eat("_")) { + return chain(stream, state, twTokenUnderline); + } + } + // strikethrough and mdash handling + if (ch == "-") { + if (stream.eat("-")) { + // if strikethrough looks ugly, change CSS. + if (stream.peek() != ' ') + return chain(stream, state, twTokenStrike); + // mdash + if (stream.peek() == ' ') + return ret('text', 'brace'); + } + } + if (ch == "'") { // tw bold + if (stream.eat("'")) { + return chain(stream, state, twTokenStrong); + } + } + if (ch == "<") { // tw macro + if (stream.eat("<")) { + return chain(stream, state, twTokenMacro); + } + } + else { + return ret(ch); + } + + // core macro handling + stream.eatWhile(/[\w\$_]/); + var word = stream.current(), + known = textwords.propertyIsEnumerable(word) && textwords[word]; + + return known ? ret(known.type, known.style, word) : ret("text", null, word); + + } // jsTokenBase() + + // tw invisible comment + function twTokenComment(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = jsTokenBase; + break; + } + maybeEnd = (ch == "%"); + } + return ret("comment", "comment"); + } + + // tw strong / bold + function twTokenStrong(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "'" && maybeEnd) { + state.tokenize = jsTokenBase; + break; + } + maybeEnd = (ch == "'"); + } + return ret("text", "strong"); + } + + // tw code + function twTokenCode(stream, state) { + var ch, sb = state.block; + + if (sb && stream.current()) { + return ret("code", "comment"); + } + + if (!sb && stream.match(reUntilCodeStop)) { + state.tokenize = jsTokenBase; + return ret("code", "comment"); + } + + if (sb && stream.sol() && stream.match(reCodeBlockStop)) { + state.tokenize = jsTokenBase; + return ret("code", "comment"); + } + + ch = stream.next(); + return (sb) ? ret("code", "comment") : ret("code", "comment"); + } + + // tw em / italic + function twTokenEm(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = jsTokenBase; + break; + } + maybeEnd = (ch == "/"); + } + return ret("text", "em"); + } + + // tw underlined text + function twTokenUnderline(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "_" && maybeEnd) { + state.tokenize = jsTokenBase; + break; + } + maybeEnd = (ch == "_"); + } + return ret("text", "underlined"); + } + + // tw strike through text looks ugly + // change CSS if needed + function twTokenStrike(stream, state) { + var maybeEnd = false, ch; + + while (ch = stream.next()) { + if (ch == "-" && maybeEnd) { + state.tokenize = jsTokenBase; + break; + } + maybeEnd = (ch == "-"); + } + return ret("text", "strikethrough"); + } + + // macro + function twTokenMacro(stream, state) { + var ch, word, known; + + if (stream.current() == '<<') { + return ret('brace', 'macro'); + } + + ch = stream.next(); + if (!ch) { + state.tokenize = jsTokenBase; + return ret(ch); + } + if (ch == ">") { + if (stream.peek() == '>') { + stream.next(); + state.tokenize = jsTokenBase; + return ret("brace", "macro"); + } + } + + stream.eatWhile(/[\w\$_]/); + word = stream.current(); + known = keywords.propertyIsEnumerable(word) && keywords[word]; + + if (known) { + return ret(known.type, known.style, word); + } + else { + return ret("macro", null, word); + } + } + + // Interface + return { + startState: function () { + return { + tokenize: jsTokenBase, + indented: 0, + level: 0 + }; + }, + + token: function (stream, state) { + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + return style; + }, + + electricChars: "" + }; +}); + +CodeMirror.defineMIME("text/x-tiddlywiki", "tiddlywiki"); +//}}} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiki/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiki/index.html new file mode 100644 index 0000000..7b85a44 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiki/index.html @@ -0,0 +1,81 @@ + + + + CodeMirror: Tiki wiki mode + + + + + + + + +

              CodeMirror: Tiki wiki mode

              + +
              + + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiki/tiki.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiki/tiki.css new file mode 100644 index 0000000..0dbc3ea --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiki/tiki.css @@ -0,0 +1,26 @@ +.cm-tw-syntaxerror { + color: #FFF; + background-color: #900; +} + +.cm-tw-deleted { + text-decoration: line-through; +} + +.cm-tw-header5 { + font-weight: bold; +} +.cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ + padding-left: 10px; +} + +.cm-tw-box { + border-top-width: 0px ! important; + border-style: solid; + border-width: 1px; + border-color: inherit; +} + +.cm-tw-underline { + text-decoration: underline; +} \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiki/tiki.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiki/tiki.js new file mode 100644 index 0000000..e789163 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/tiki/tiki.js @@ -0,0 +1,308 @@ +CodeMirror.defineMode('tiki', function(config) { + function inBlock(style, terminator, returnTokenizer) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = inText; + break; + } + stream.next(); + } + + if (returnTokenizer) state.tokenize = returnTokenizer; + + return style; + }; + } + + function inLine(style) { + return function(stream, state) { + while(!stream.eol()) { + stream.next(); + } + state.tokenize = inText; + return style; + }; + } + + function inText(stream, state) { + function chain(parser) { + state.tokenize = parser; + return parser(stream, state); + } + + var sol = stream.sol(); + var ch = stream.next(); + + //non start of line + switch (ch) { //switch is generally much faster than if, so it is used here + case "{": //plugin + stream.eat("/"); + stream.eatSpace(); + var tagName = ""; + var c; + while ((c = stream.eat(/[^\s\u00a0=\"\'\/?(}]/))) tagName += c; + state.tokenize = inPlugin; + return "tag"; + break; + case "_": //bold + if (stream.eat("_")) { + return chain(inBlock("strong", "__", inText)); + } + break; + case "'": //italics + if (stream.eat("'")) { + // Italic text + return chain(inBlock("em", "''", inText)); + } + break; + case "(":// Wiki Link + if (stream.eat("(")) { + return chain(inBlock("variable-2", "))", inText)); + } + break; + case "[":// Weblink + return chain(inBlock("variable-3", "]", inText)); + break; + case "|": //table + if (stream.eat("|")) { + return chain(inBlock("comment", "||")); + } + break; + case "-": + if (stream.eat("=")) {//titleBar + return chain(inBlock("header string", "=-", inText)); + } else if (stream.eat("-")) {//deleted + return chain(inBlock("error tw-deleted", "--", inText)); + } + break; + case "=": //underline + if (stream.match("==")) { + return chain(inBlock("tw-underline", "===", inText)); + } + break; + case ":": + if (stream.eat(":")) { + return chain(inBlock("comment", "::")); + } + break; + case "^": //box + return chain(inBlock("tw-box", "^")); + break; + case "~": //np + if (stream.match("np~")) { + return chain(inBlock("meta", "~/np~")); + } + break; + } + + //start of line types + if (sol) { + switch (ch) { + case "!": //header at start of line + if (stream.match('!!!!!')) { + return chain(inLine("header string")); + } else if (stream.match('!!!!')) { + return chain(inLine("header string")); + } else if (stream.match('!!!')) { + return chain(inLine("header string")); + } else if (stream.match('!!')) { + return chain(inLine("header string")); + } else { + return chain(inLine("header string")); + } + break; + case "*": //unordered list line item, or
            • at start of line + case "#": //ordered list line item, or
            • at start of line + case "+": //ordered list line item, or
            • at start of line + return chain(inLine("tw-listitem bracket")); + break; + } + } + + //stream.eatWhile(/[&{]/); was eating up plugins, turned off to act less like html and more like tiki + return null; + } + + var indentUnit = config.indentUnit; + + // Return variables for tokenizers + var pluginName, type; + function inPlugin(stream, state) { + var ch = stream.next(); + var peek = stream.peek(); + + if (ch == "}") { + state.tokenize = inText; + //type = ch == ")" ? "endPlugin" : "selfclosePlugin"; inPlugin + return "tag"; + } else if (ch == "(" || ch == ")") { + return "bracket"; + } else if (ch == "=") { + type = "equals"; + + if (peek == ">") { + ch = stream.next(); + peek = stream.peek(); + } + + //here we detect values directly after equal character with no quotes + if (!/[\'\"]/.test(peek)) { + state.tokenize = inAttributeNoQuote(); + } + //end detect values + + return "operator"; + } else if (/[\'\"]/.test(ch)) { + state.tokenize = inAttribute(ch); + return state.tokenize(stream, state); + } else { + stream.eatWhile(/[^\s\u00a0=\"\'\/?]/); + return "keyword"; + } + } + + function inAttribute(quote) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.next() == quote) { + state.tokenize = inPlugin; + break; + } + } + return "string"; + }; + } + + function inAttributeNoQuote() { + return function(stream, state) { + while (!stream.eol()) { + var ch = stream.next(); + var peek = stream.peek(); + if (ch == " " || ch == "," || /[ )}]/.test(peek)) { + state.tokenize = inPlugin; + break; + } + } + return "string"; +}; + } + +var curState, setStyle; +function pass() { + for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]); +} + +function cont() { + pass.apply(null, arguments); + return true; +} + +function pushContext(pluginName, startOfLine) { + var noIndent = curState.context && curState.context.noIndent; + curState.context = { + prev: curState.context, + pluginName: pluginName, + indent: curState.indented, + startOfLine: startOfLine, + noIndent: noIndent + }; +} + +function popContext() { + if (curState.context) curState.context = curState.context.prev; +} + +function element(type) { + if (type == "openPlugin") {curState.pluginName = pluginName; return cont(attributes, endplugin(curState.startOfLine));} + else if (type == "closePlugin") { + var err = false; + if (curState.context) { + err = curState.context.pluginName != pluginName; + popContext(); + } else { + err = true; + } + if (err) setStyle = "error"; + return cont(endcloseplugin(err)); + } + else if (type == "string") { + if (!curState.context || curState.context.name != "!cdata") pushContext("!cdata"); + if (curState.tokenize == inText) popContext(); + return cont(); + } + else return cont(); +} + +function endplugin(startOfLine) { + return function(type) { + if ( + type == "selfclosePlugin" || + type == "endPlugin" + ) + return cont(); + if (type == "endPlugin") {pushContext(curState.pluginName, startOfLine); return cont();} + return cont(); + }; +} + +function endcloseplugin(err) { + return function(type) { + if (err) setStyle = "error"; + if (type == "endPlugin") return cont(); + return pass(); + }; +} + +function attributes(type) { + if (type == "keyword") {setStyle = "attribute"; return cont(attributes);} + if (type == "equals") return cont(attvalue, attributes); + return pass(); +} +function attvalue(type) { + if (type == "keyword") {setStyle = "string"; return cont();} + if (type == "string") return cont(attvaluemaybe); + return pass(); +} +function attvaluemaybe(type) { + if (type == "string") return cont(attvaluemaybe); + else return pass(); +} +return { + startState: function() { + return {tokenize: inText, cc: [], indented: 0, startOfLine: true, pluginName: null, context: null}; + }, + token: function(stream, state) { + if (stream.sol()) { + state.startOfLine = true; + state.indented = stream.indentation(); + } + if (stream.eatSpace()) return null; + + setStyle = type = pluginName = null; + var style = state.tokenize(stream, state); + if ((style || type) && style != "comment") { + curState = state; + while (true) { + var comb = state.cc.pop() || element; + if (comb(type || style)) break; + } + } + state.startOfLine = false; + return setStyle || style; + }, + indent: function(state, textAfter) { + var context = state.context; + if (context && context.noIndent) return 0; + if (context && /^{\//.test(textAfter)) + context = context.prev; + while (context && !context.startOfLine) + context = context.prev; + if (context) return context.indent + indentUnit; + else return 0; + }, + electricChars: "/" + }; +}); + +CodeMirror.defineMIME("text/tiki", "tiki"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/turtle/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/turtle/index.html new file mode 100644 index 0000000..5e56e57 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/turtle/index.html @@ -0,0 +1,39 @@ + + + + + CodeMirror: Turtle mode + + + + + + + +

              CodeMirror: Turtle mode

              +
              + + +

              MIME types defined: text/turtle.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/turtle/turtle.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/turtle/turtle.js new file mode 100644 index 0000000..e118bfb --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/turtle/turtle.js @@ -0,0 +1,145 @@ +CodeMirror.defineMode("turtle", function(config) { + var indentUnit = config.indentUnit; + var curPunc; + + function wordRegexp(words) { + return new RegExp("^(?:" + words.join("|") + ")$", "i"); + } + var ops = wordRegexp([]); + var keywords = wordRegexp(["@prefix", "@base", "a"]); + var operatorChars = /[*+\-<>=&|]/; + + function tokenBase(stream, state) { + var ch = stream.next(); + curPunc = null; + if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { + stream.match(/^[^\s\u00a0>]*>?/); + return "atom"; + } + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenLiteral(ch); + return state.tokenize(stream, state); + } + else if (/[{}\(\),\.;\[\]]/.test(ch)) { + curPunc = ch; + return null; + } + else if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + else if (operatorChars.test(ch)) { + stream.eatWhile(operatorChars); + return null; + } + else if (ch == ":") { + return "operator"; + } else { + stream.eatWhile(/[_\w\d]/); + if(stream.peek() == ":") { + return "variable-3"; + } else { + var word = stream.current(); + + if(keywords.test(word)) { + return "meta"; + } + + if(ch >= "A" && ch <= "Z") { + return "comment"; + } else { + return "keyword"; + } + } + var word = stream.current(); + if (ops.test(word)) + return null; + else if (keywords.test(word)) + return "meta"; + else + return "variable"; + } + } + + function tokenLiteral(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && ch == "\\"; + } + return "string"; + }; + } + + function pushContext(state, type, col) { + state.context = {prev: state.context, indent: state.indent, col: col, type: type}; + } + function popContext(state) { + state.indent = state.context.indent; + state.context = state.context.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, + context: null, + indent: 0, + col: 0}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.context && state.context.align == null) state.context.align = false; + state.indent = stream.indentation(); + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + + if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { + state.context.align = true; + } + + if (curPunc == "(") pushContext(state, ")", stream.column()); + else if (curPunc == "[") pushContext(state, "]", stream.column()); + else if (curPunc == "{") pushContext(state, "}", stream.column()); + else if (/[\]\}\)]/.test(curPunc)) { + while (state.context && state.context.type == "pattern") popContext(state); + if (state.context && curPunc == state.context.type) popContext(state); + } + else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); + else if (/atom|string|variable/.test(style) && state.context) { + if (/[\}\]]/.test(state.context.type)) + pushContext(state, "pattern", stream.column()); + else if (state.context.type == "pattern" && !state.context.align) { + state.context.align = true; + state.context.col = stream.column(); + } + } + + return style; + }, + + indent: function(state, textAfter) { + var firstChar = textAfter && textAfter.charAt(0); + var context = state.context; + if (/[\]\}]/.test(firstChar)) + while (context && context.type == "pattern") context = context.prev; + + var closing = context && firstChar == context.type; + if (!context) + return 0; + else if (context.type == "pattern") + return context.col; + else if (context.align) + return context.col + (closing ? 0 : 1); + else + return context.indent + (closing ? 0 : indentUnit); + } + }; +}); + +CodeMirror.defineMIME("text/turtle", "turtle"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vb/LICENSE.txt b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vb/LICENSE.txt new file mode 100644 index 0000000..6083970 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vb/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2012 Codility Limited, 107 Cheapside, London EC2V 6DN, UK + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vb/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vb/index.html new file mode 100644 index 0000000..74dd5e8 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vb/index.html @@ -0,0 +1,88 @@ + + + + CodeMirror: VB.NET mode + + + + + + + + + +

              CodeMirror: VB.NET mode

              + + + +
              + +
              +
              
              +  

              MIME type defined: text/x-vb.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vb/vb.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vb/vb.js new file mode 100644 index 0000000..27b2271 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vb/vb.js @@ -0,0 +1,259 @@ +CodeMirror.defineMode("vb", function(conf, parserConf) { + var ERRORCLASS = 'error'; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); + } + + var singleOperators = new RegExp("^[\\+\\-\\*/%&\\\\|\\^~<>!]"); + var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]'); + var doubleOperators = new RegExp("^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"); + var doubleDelimiters = new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); + var tripleDelimiters = new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"); + var identifiers = new RegExp("^[_A-Za-z][_A-Za-z0-9]*"); + + var openingKeywords = ['class','module', 'sub','enum','select','while','if','function', 'get','set','property', 'try']; + var middleKeywords = ['else','elseif','case', 'catch']; + var endKeywords = ['next','loop']; + + var wordOperators = wordRegexp(['and', 'or', 'not', 'xor', 'in']); + var commonkeywords = ['as', 'dim', 'break', 'continue','optional', 'then', 'until', + 'goto', 'byval','byref','new','handles','property', 'return', + 'const','private', 'protected', 'friend', 'public', 'shared', 'static', 'true','false']; + var commontypes = ['integer','string','double','decimal','boolean','short','char', 'float','single']; + + var keywords = wordRegexp(commonkeywords); + var types = wordRegexp(commontypes); + var stringPrefixes = '"'; + + var opening = wordRegexp(openingKeywords); + var middle = wordRegexp(middleKeywords); + var closing = wordRegexp(endKeywords); + var doubleClosing = wordRegexp(['end']); + var doOpening = wordRegexp(['do']); + + var indentInfo = null; + + + + + function indent(_stream, state) { + state.currentIndent++; + } + + function dedent(_stream, state) { + state.currentIndent--; + } + // tokenizers + function tokenBase(stream, state) { + if (stream.eatSpace()) { + return null; + } + + var ch = stream.peek(); + + // Handle Comments + if (ch === "'") { + stream.skipToEnd(); + return 'comment'; + } + + + // Handle Number Literals + if (stream.match(/^((&H)|(&O))?[0-9\.a-f]/i, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^\d*\.\d+F?/i)) { floatLiteral = true; } + else if (stream.match(/^\d+\.\d*F?/)) { floatLiteral = true; } + else if (stream.match(/^\.\d+F?/)) { floatLiteral = true; } + + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return 'number'; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } + // Octal + else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } + // Decimal + else if (stream.match(/^[1-9]\d*F?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return 'number'; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + // Handle operators and Delimiters + if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) { + return null; + } + if (stream.match(doubleOperators) + || stream.match(singleOperators) + || stream.match(wordOperators)) { + return 'operator'; + } + if (stream.match(singleDelimiters)) { + return null; + } + if (stream.match(doOpening)) { + indent(stream,state); + state.doInCurrentLine = true; + return 'keyword'; + } + if (stream.match(opening)) { + if (! state.doInCurrentLine) + indent(stream,state); + else + state.doInCurrentLine = false; + return 'keyword'; + } + if (stream.match(middle)) { + return 'keyword'; + } + + if (stream.match(doubleClosing)) { + dedent(stream,state); + dedent(stream,state); + return 'keyword'; + } + if (stream.match(closing)) { + dedent(stream,state); + return 'keyword'; + } + + if (stream.match(types)) { + return 'keyword'; + } + + if (stream.match(keywords)) { + return 'keyword'; + } + + if (stream.match(identifiers)) { + return 'variable'; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenStringFactory(delimiter) { + var singleline = delimiter.length == 1; + var OUTCLASS = 'string'; + + return function(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"]/); + if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) { + return ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return OUTCLASS; + }; + } + + + function tokenLexer(stream, state) { + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle '.' connected identifiers + if (current === '.') { + style = state.tokenize(stream, state); + current = stream.current(); + if (style === 'variable') { + return 'variable'; + } else { + return ERRORCLASS; + } + } + + + var delimiter_index = '[({'.indexOf(current); + if (delimiter_index !== -1) { + indent(stream, state ); + } + if (indentInfo === 'dedent') { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + delimiter_index = '])}'.indexOf(current); + if (delimiter_index !== -1) { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + + return style; + } + + var external = { + electricChars:"dDpPtTfFeE ", + startState: function() { + return { + tokenize: tokenBase, + lastToken: null, + currentIndent: 0, + nextLineIndent: 0, + doInCurrentLine: false + + + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + state.currentIndent += state.nextLineIndent; + state.nextLineIndent = 0; + state.doInCurrentLine = 0; + } + var style = tokenLexer(stream, state); + + state.lastToken = {style:style, content: stream.current()}; + + + + return style; + }, + + indent: function(state, textAfter) { + var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; + if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); + if(state.currentIndent < 0) return 0; + return state.currentIndent * conf.indentUnit; + } + + }; + return external; +}); + +CodeMirror.defineMIME("text/x-vb", "vb"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vbscript/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vbscript/index.html new file mode 100644 index 0000000..9ae4667 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vbscript/index.html @@ -0,0 +1,43 @@ + + + + + CodeMirror: VBScript mode + + + + + + + +

              CodeMirror: VBScript mode

              + +
              + + + +

              MIME types defined: text/vbscript.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vbscript/vbscript.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vbscript/vbscript.js new file mode 100644 index 0000000..0a97fb6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/vbscript/vbscript.js @@ -0,0 +1,334 @@ +/* +For extra ASP classic objects, initialize CodeMirror instance with this option: + isASP: true + +E.G.: + var editor = CodeMirror.fromTextArea(document.getElementById("code"), { + lineNumbers: true, + isASP: true + }); +*/ +CodeMirror.defineMode("vbscript", function(conf, parserConf) { + var ERRORCLASS = 'error'; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); + } + + var singleOperators = new RegExp("^[\\+\\-\\*/&\\\\\\^<>=]"); + var doubleOperators = new RegExp("^((<>)|(<=)|(>=))"); + var singleDelimiters = new RegExp('^[\\.,]'); + var brakets = new RegExp('^[\\(\\)]'); + var identifiers = new RegExp("^[A-Za-z][_A-Za-z0-9]*"); + + var openingKeywords = ['class','sub','select','while','if','function', 'property', 'with', 'for']; + var middleKeywords = ['else','elseif','case']; + var endKeywords = ['next','loop','wend']; + + var wordOperators = wordRegexp(['and', 'or', 'not', 'xor', 'is', 'mod', 'eqv', 'imp']); + var commonkeywords = ['dim', 'redim', 'then', 'until', 'randomize', + 'byval','byref','new','property', 'exit', 'in', + 'const','private', 'public', + 'get','set','let', 'stop', 'on error resume next', 'on error goto 0', 'option explicit', 'call', 'me']; + + //This list was from: http://msdn.microsoft.com/en-us/library/f8tbc79x(v=vs.84).aspx + var atomWords = ['true', 'false', 'nothing', 'empty', 'null']; + //This list was from: http://msdn.microsoft.com/en-us/library/3ca8tfek(v=vs.84).aspx + var builtinFuncsWords = ['abs', 'array', 'asc', 'atn', 'cbool', 'cbyte', 'ccur', 'cdate', 'cdbl', 'chr', 'cint', 'clng', 'cos', 'csng', 'cstr', 'date', 'dateadd', 'datediff', 'datepart', + 'dateserial', 'datevalue', 'day', 'escape', 'eval', 'execute', 'exp', 'filter', 'formatcurrency', 'formatdatetime', 'formatnumber', 'formatpercent', 'getlocale', 'getobject', + 'getref', 'hex', 'hour', 'inputbox', 'instr', 'instrrev', 'int', 'fix', 'isarray', 'isdate', 'isempty', 'isnull', 'isnumeric', 'isobject', 'join', 'lbound', 'lcase', 'left', + 'len', 'loadpicture', 'log', 'ltrim', 'rtrim', 'trim', 'maths', 'mid', 'minute', 'month', 'monthname', 'msgbox', 'now', 'oct', 'replace', 'rgb', 'right', 'rnd', 'round', + 'scriptengine', 'scriptenginebuildversion', 'scriptenginemajorversion', 'scriptengineminorversion', 'second', 'setlocale', 'sgn', 'sin', 'space', 'split', 'sqr', 'strcomp', + 'string', 'strreverse', 'tan', 'time', 'timer', 'timeserial', 'timevalue', 'typename', 'ubound', 'ucase', 'unescape', 'vartype', 'weekday', 'weekdayname', 'year']; + + //This list was from: http://msdn.microsoft.com/en-us/library/ydz4cfk3(v=vs.84).aspx + var builtinConsts = ['vbBlack', 'vbRed', 'vbGreen', 'vbYellow', 'vbBlue', 'vbMagenta', 'vbCyan', 'vbWhite', 'vbBinaryCompare', 'vbTextCompare', + 'vbSunday', 'vbMonday', 'vbTuesday', 'vbWednesday', 'vbThursday', 'vbFriday', 'vbSaturday', 'vbUseSystemDayOfWeek', 'vbFirstJan1', 'vbFirstFourDays', 'vbFirstFullWeek', + 'vbGeneralDate', 'vbLongDate', 'vbShortDate', 'vbLongTime', 'vbShortTime', 'vbObjectError', + 'vbOKOnly', 'vbOKCancel', 'vbAbortRetryIgnore', 'vbYesNoCancel', 'vbYesNo', 'vbRetryCancel', 'vbCritical', 'vbQuestion', 'vbExclamation', 'vbInformation', 'vbDefaultButton1', 'vbDefaultButton2', + 'vbDefaultButton3', 'vbDefaultButton4', 'vbApplicationModal', 'vbSystemModal', 'vbOK', 'vbCancel', 'vbAbort', 'vbRetry', 'vbIgnore', 'vbYes', 'vbNo', + 'vbCr', 'VbCrLf', 'vbFormFeed', 'vbLf', 'vbNewLine', 'vbNullChar', 'vbNullString', 'vbTab', 'vbVerticalTab', 'vbUseDefault', 'vbTrue', 'vbFalse', + 'vbEmpty', 'vbNull', 'vbInteger', 'vbLong', 'vbSingle', 'vbDouble', 'vbCurrency', 'vbDate', 'vbString', 'vbObject', 'vbError', 'vbBoolean', 'vbVariant', 'vbDataObject', 'vbDecimal', 'vbByte', 'vbArray']; + //This list was from: http://msdn.microsoft.com/en-us/library/hkc375ea(v=vs.84).aspx + var builtinObjsWords = ['WScript', 'err', 'debug', 'RegExp']; + var knownProperties = ['description', 'firstindex', 'global', 'helpcontext', 'helpfile', 'ignorecase', 'length', 'number', 'pattern', 'source', 'value', 'count']; + var knownMethods = ['clear', 'execute', 'raise', 'replace', 'test', 'write', 'writeline', 'close', 'open', 'state', 'eof', 'update', 'addnew', 'end', 'createobject', 'quit']; + + var aspBuiltinObjsWords = ['server', 'response', 'request', 'session', 'application']; + var aspKnownProperties = ['buffer', 'cachecontrol', 'charset', 'contenttype', 'expires', 'expiresabsolute', 'isclientconnected', 'pics', 'status', //response + 'clientcertificate', 'cookies', 'form', 'querystring', 'servervariables', 'totalbytes', //request + 'contents', 'staticobjects', //application + 'codepage', 'lcid', 'sessionid', 'timeout', //session + 'scripttimeout']; //server + var aspKnownMethods = ['addheader', 'appendtolog', 'binarywrite', 'end', 'flush', 'redirect', //response + 'binaryread', //request + 'remove', 'removeall', 'lock', 'unlock', //application + 'abandon', //session + 'getlasterror', 'htmlencode', 'mappath', 'transfer', 'urlencode']; //server + + var knownWords = knownMethods.concat(knownProperties); + + builtinObjsWords = builtinObjsWords.concat(builtinConsts); + + if (conf.isASP){ + builtinObjsWords = builtinObjsWords.concat(aspBuiltinObjsWords); + knownWords = knownWords.concat(aspKnownMethods, aspKnownProperties); + }; + + var keywords = wordRegexp(commonkeywords); + var atoms = wordRegexp(atomWords); + var builtinFuncs = wordRegexp(builtinFuncsWords); + var builtinObjs = wordRegexp(builtinObjsWords); + var known = wordRegexp(knownWords); + var stringPrefixes = '"'; + + var opening = wordRegexp(openingKeywords); + var middle = wordRegexp(middleKeywords); + var closing = wordRegexp(endKeywords); + var doubleClosing = wordRegexp(['end']); + var doOpening = wordRegexp(['do']); + var noIndentWords = wordRegexp(['on error resume next', 'exit']); + var comment = wordRegexp(['rem']); + + + function indent(_stream, state) { + state.currentIndent++; + } + + function dedent(_stream, state) { + state.currentIndent--; + } + // tokenizers + function tokenBase(stream, state) { + if (stream.eatSpace()) { + return 'space'; + //return null; + } + + var ch = stream.peek(); + + // Handle Comments + if (ch === "'") { + stream.skipToEnd(); + return 'comment'; + } + if (stream.match(comment)){ + stream.skipToEnd(); + return 'comment'; + } + + + // Handle Number Literals + if (stream.match(/^((&H)|(&O))?[0-9\.]/i, false) && !stream.match(/^((&H)|(&O))?[0-9\.]+[a-z_]/i, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^\d*\.\d+/i)) { floatLiteral = true; } + else if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } + else if (stream.match(/^\.\d+/)) { floatLiteral = true; } + + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return 'number'; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } + // Octal + else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } + // Decimal + else if (stream.match(/^[1-9]\d*F?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return 'number'; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + // Handle operators and Delimiters + if (stream.match(doubleOperators) + || stream.match(singleOperators) + || stream.match(wordOperators)) { + return 'operator'; + } + if (stream.match(singleDelimiters)) { + return null; + } + + if (stream.match(brakets)) { + return "bracket"; + } + + if (stream.match(noIndentWords)) { + state.doInCurrentLine = true; + + return 'keyword'; + } + + if (stream.match(doOpening)) { + indent(stream,state); + state.doInCurrentLine = true; + + return 'keyword'; + } + if (stream.match(opening)) { + if (! state.doInCurrentLine) + indent(stream,state); + else + state.doInCurrentLine = false; + + return 'keyword'; + } + if (stream.match(middle)) { + return 'keyword'; + } + + + if (stream.match(doubleClosing)) { + dedent(stream,state); + dedent(stream,state); + + return 'keyword'; + } + if (stream.match(closing)) { + if (! state.doInCurrentLine) + dedent(stream,state); + else + state.doInCurrentLine = false; + + return 'keyword'; + } + + if (stream.match(keywords)) { + return 'keyword'; + } + + if (stream.match(atoms)) { + return 'atom'; + } + + if (stream.match(known)) { + return 'variable-2'; + } + + if (stream.match(builtinFuncs)) { + return 'builtin'; + } + + if (stream.match(builtinObjs)){ + return 'variable-2'; + } + + if (stream.match(identifiers)) { + return 'variable'; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenStringFactory(delimiter) { + var singleline = delimiter.length == 1; + var OUTCLASS = 'string'; + + return function(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"]/); + if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) { + return ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return OUTCLASS; + }; + } + + + function tokenLexer(stream, state) { + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle '.' connected identifiers + if (current === '.') { + style = state.tokenize(stream, state); + + current = stream.current(); + if (style.substr(0, 8) === 'variable' || style==='builtin' || style==='keyword'){//|| knownWords.indexOf(current.substring(1)) > -1) { + if (style === 'builtin' || style === 'keyword') style='variable'; + if (knownWords.indexOf(current.substr(1)) > -1) style='variable-2'; + + return style; + } else { + return ERRORCLASS; + } + } + + return style; + } + + var external = { + electricChars:"dDpPtTfFeE ", + startState: function() { + return { + tokenize: tokenBase, + lastToken: null, + currentIndent: 0, + nextLineIndent: 0, + doInCurrentLine: false, + ignoreKeyword: false + + + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + state.currentIndent += state.nextLineIndent; + state.nextLineIndent = 0; + state.doInCurrentLine = 0; + } + var style = tokenLexer(stream, state); + + state.lastToken = {style:style, content: stream.current()}; + + if (style==='space') style=null; + + return style; + }, + + indent: function(state, textAfter) { + var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; + if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); + if(state.currentIndent < 0) return 0; + return state.currentIndent * conf.indentUnit; + } + + }; + return external; +}); + +CodeMirror.defineMIME("text/vbscript", "vbscript"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/velocity/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/velocity/index.html new file mode 100644 index 0000000..fb59cb5 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/velocity/index.html @@ -0,0 +1,103 @@ + + + + + CodeMirror: Velocity mode + + + + + + + + +

              CodeMirror: Velocity mode

              +
              + + +

              MIME types defined: text/velocity.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/velocity/velocity.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/velocity/velocity.js new file mode 100644 index 0000000..43a97ba --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/velocity/velocity.js @@ -0,0 +1,144 @@ +CodeMirror.defineMode("velocity", function() { + function parseWords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var keywords = parseWords("#end #else #break #stop #[[ #]] " + + "#{end} #{else} #{break} #{stop}"); + var functions = parseWords("#if #elseif #foreach #set #include #parse #macro #define #evaluate " + + "#{if} #{elseif} #{foreach} #{set} #{include} #{parse} #{macro} #{define} #{evaluate}"); + var specials = parseWords("$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent $velocityCount"); + var isOperatorChar = /[+\-*&%=<>!?:\/|]/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + function tokenBase(stream, state) { + var beforeParams = state.beforeParams; + state.beforeParams = false; + var ch = stream.next(); + // start of string? + if ((ch == '"' || ch == "'") && state.inParams) + return chain(stream, state, tokenString(ch)); + // is it one of the special signs []{}().,;? Seperator? + else if (/[\[\]{}\(\),;\.]/.test(ch)) { + if (ch == "(" && beforeParams) state.inParams = true; + else if (ch == ")") state.inParams = false; + return null; + } + // start of a number value? + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + // multi line comment? + else if (ch == "#" && stream.eat("*")) { + return chain(stream, state, tokenComment); + } + // unparsed content? + else if (ch == "#" && stream.match(/ *\[ *\[/)) { + return chain(stream, state, tokenUnparsed); + } + // single line comment? + else if (ch == "#" && stream.eat("#")) { + stream.skipToEnd(); + return "comment"; + } + // variable? + else if (ch == "$") { + stream.eatWhile(/[\w\d\$_\.{}]/); + // is it one of the specials? + if (specials && specials.propertyIsEnumerable(stream.current().toLowerCase())) { + return "keyword"; + } + else { + state.beforeParams = true; + return "builtin"; + } + } + // is it a operator? + else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + else { + // get the whole word + stream.eatWhile(/[\w\$_{}]/); + var word = stream.current().toLowerCase(); + // is it one of the listed keywords? + if (keywords && keywords.propertyIsEnumerable(word)) + return "keyword"; + // is it one of the listed functions? + if (functions && functions.propertyIsEnumerable(word) || + stream.current().match(/^#[a-z0-9_]+ *$/i) && stream.peek()=="(") { + state.beforeParams = true; + return "keyword"; + } + // default: just a "word" + return null; + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) { + end = true; + break; + } + escaped = !escaped && next == "\\"; + } + if (end) state.tokenize = tokenBase; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "#" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenUnparsed(stream, state) { + var maybeEnd = 0, ch; + while (ch = stream.next()) { + if (ch == "#" && maybeEnd == 2) { + state.tokenize = tokenBase; + break; + } + if (ch == "]") + maybeEnd++; + else if (ch != " ") + maybeEnd = 0; + } + return "meta"; + } + // Interface + + return { + startState: function() { + return { + tokenize: tokenBase, + beforeParams: false, + inParams: false + }; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + } + }; +}); + +CodeMirror.defineMIME("text/velocity", "velocity"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/verilog/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/verilog/index.html new file mode 100644 index 0000000..f7c88c6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/verilog/index.html @@ -0,0 +1,121 @@ + + + + + CodeMirror: Verilog mode + + + + + + + +

              CodeMirror: Verilog mode

              + +
              + + + +

              Simple mode that tries to handle Verilog-like languages as well as it + can. Takes one configuration parameters: keywords, an + object whose property names are the keywords in the language.

              + +

              MIME types defined: text/x-verilog (Verilog code).

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/verilog/verilog.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/verilog/verilog.js new file mode 100644 index 0000000..708de23 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/verilog/verilog.js @@ -0,0 +1,182 @@ +CodeMirror.defineMode("verilog", function(config, parserConfig) { + var indentUnit = config.indentUnit, + keywords = parserConfig.keywords || {}, + blockKeywords = parserConfig.blockKeywords || {}, + atoms = parserConfig.atoms || {}, + hooks = parserConfig.hooks || {}, + multiLineStrings = parserConfig.multiLineStrings; + var isOperatorChar = /[&|~> + + + + CodeMirror: XML mode + + + + + + + +

              CodeMirror: XML mode

              +
              + +

              The XML mode supports two configuration parameters:

              +
              +
              htmlMode (boolean)
              +
              This switches the mode to parse HTML instead of XML. This + means attributes do not have to be quoted, and some elements + (such as br) do not require a closing tag.
              +
              alignCDATA (boolean)
              +
              Setting this to true will force the opening tag of CDATA + blocks to not be indented.
              +
              + +

              MIME types defined: application/xml, text/html.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xml/xml.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xml/xml.js new file mode 100644 index 0000000..84f34a2 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xml/xml.js @@ -0,0 +1,341 @@ +CodeMirror.defineMode("xml", function(config, parserConfig) { + var indentUnit = config.indentUnit; + var multilineTagIndentFactor = parserConfig.multilineTagIndentFactor || 1; + var multilineTagIndentPastTag = parserConfig.multilineTagIndentPastTag || true; + + var Kludges = parserConfig.htmlMode ? { + autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, + 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, + 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, + 'track': true, 'wbr': true}, + implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, + 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, + 'th': true, 'tr': true}, + contextGrabbers: { + 'dd': {'dd': true, 'dt': true}, + 'dt': {'dd': true, 'dt': true}, + 'li': {'li': true}, + 'option': {'option': true, 'optgroup': true}, + 'optgroup': {'optgroup': true}, + 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, + 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, + 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, + 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, + 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, + 'rp': {'rp': true, 'rt': true}, + 'rt': {'rp': true, 'rt': true}, + 'tbody': {'tbody': true, 'tfoot': true}, + 'td': {'td': true, 'th': true}, + 'tfoot': {'tbody': true}, + 'th': {'td': true, 'th': true}, + 'thead': {'tbody': true, 'tfoot': true}, + 'tr': {'tr': true} + }, + doNotIndent: {"pre": true}, + allowUnquoted: true, + allowMissing: true + } : { + autoSelfClosers: {}, + implicitlyClosed: {}, + contextGrabbers: {}, + doNotIndent: {}, + allowUnquoted: false, + allowMissing: false + }; + var alignCDATA = parserConfig.alignCDATA; + + // Return variables for tokenizers + var tagName, type; + + function inText(stream, state) { + function chain(parser) { + state.tokenize = parser; + return parser(stream, state); + } + + var ch = stream.next(); + if (ch == "<") { + if (stream.eat("!")) { + if (stream.eat("[")) { + if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); + else return null; + } else if (stream.match("--")) { + return chain(inBlock("comment", "-->")); + } else if (stream.match("DOCTYPE", true, true)) { + stream.eatWhile(/[\w\._\-]/); + return chain(doctype(1)); + } else { + return null; + } + } else if (stream.eat("?")) { + stream.eatWhile(/[\w\._\-]/); + state.tokenize = inBlock("meta", "?>"); + return "meta"; + } else { + var isClose = stream.eat("/"); + tagName = ""; + var c; + while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c; + if (!tagName) return "error"; + type = isClose ? "closeTag" : "openTag"; + state.tokenize = inTag; + return "tag"; + } + } else if (ch == "&") { + var ok; + if (stream.eat("#")) { + if (stream.eat("x")) { + ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); + } else { + ok = stream.eatWhile(/[\d]/) && stream.eat(";"); + } + } else { + ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); + } + return ok ? "atom" : "error"; + } else { + stream.eatWhile(/[^&<]/); + return null; + } + } + + function inTag(stream, state) { + var ch = stream.next(); + if (ch == ">" || (ch == "/" && stream.eat(">"))) { + state.tokenize = inText; + type = ch == ">" ? "endTag" : "selfcloseTag"; + return "tag"; + } else if (ch == "=") { + type = "equals"; + return null; + } else if (ch == "<") { + return "error"; + } else if (/[\'\"]/.test(ch)) { + state.tokenize = inAttribute(ch); + state.stringStartCol = stream.column(); + return state.tokenize(stream, state); + } else { + stream.eatWhile(/[^\s\u00a0=<>\"\']/); + return "word"; + } + } + + function inAttribute(quote) { + var closure = function(stream, state) { + while (!stream.eol()) { + if (stream.next() == quote) { + state.tokenize = inTag; + break; + } + } + return "string"; + }; + closure.isInAttribute = true; + return closure; + } + + function inBlock(style, terminator) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = inText; + break; + } + stream.next(); + } + return style; + }; + } + function doctype(depth) { + return function(stream, state) { + var ch; + while ((ch = stream.next()) != null) { + if (ch == "<") { + state.tokenize = doctype(depth + 1); + return state.tokenize(stream, state); + } else if (ch == ">") { + if (depth == 1) { + state.tokenize = inText; + break; + } else { + state.tokenize = doctype(depth - 1); + return state.tokenize(stream, state); + } + } + } + return "meta"; + }; + } + + var curState, curStream, setStyle; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + + function pushContext(tagName, startOfLine) { + var noIndent = Kludges.doNotIndent.hasOwnProperty(tagName) || (curState.context && curState.context.noIndent); + curState.context = { + prev: curState.context, + tagName: tagName, + indent: curState.indented, + startOfLine: startOfLine, + noIndent: noIndent + }; + } + function popContext() { + if (curState.context) curState.context = curState.context.prev; + } + + function element(type) { + if (type == "openTag") { + curState.tagName = tagName; + curState.tagStart = curStream.column(); + return cont(attributes, endtag(curState.startOfLine)); + } else if (type == "closeTag") { + var err = false; + if (curState.context) { + if (curState.context.tagName != tagName) { + if (Kludges.implicitlyClosed.hasOwnProperty(curState.context.tagName.toLowerCase())) { + popContext(); + } + err = !curState.context || curState.context.tagName != tagName; + } + } else { + err = true; + } + if (err) setStyle = "error"; + return cont(endclosetag(err)); + } + return cont(); + } + function endtag(startOfLine) { + return function(type) { + var tagName = curState.tagName; + curState.tagName = curState.tagStart = null; + if (type == "selfcloseTag" || + (type == "endTag" && Kludges.autoSelfClosers.hasOwnProperty(tagName.toLowerCase()))) { + maybePopContext(tagName.toLowerCase()); + return cont(); + } + if (type == "endTag") { + maybePopContext(tagName.toLowerCase()); + pushContext(tagName, startOfLine); + return cont(); + } + return cont(); + }; + } + function endclosetag(err) { + return function(type) { + if (err) setStyle = "error"; + if (type == "endTag") { popContext(); return cont(); } + setStyle = "error"; + return cont(arguments.callee); + }; + } + function maybePopContext(nextTagName) { + var parentTagName; + while (true) { + if (!curState.context) { + return; + } + parentTagName = curState.context.tagName.toLowerCase(); + if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName) || + !Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) { + return; + } + popContext(); + } + } + + function attributes(type) { + if (type == "word") {setStyle = "attribute"; return cont(attribute, attributes);} + if (type == "endTag" || type == "selfcloseTag") return pass(); + setStyle = "error"; + return cont(attributes); + } + function attribute(type) { + if (type == "equals") return cont(attvalue, attributes); + if (!Kludges.allowMissing) setStyle = "error"; + else if (type == "word") setStyle = "attribute"; + return (type == "endTag" || type == "selfcloseTag") ? pass() : cont(); + } + function attvalue(type) { + if (type == "string") return cont(attvaluemaybe); + if (type == "word" && Kludges.allowUnquoted) {setStyle = "string"; return cont();} + setStyle = "error"; + return (type == "endTag" || type == "selfCloseTag") ? pass() : cont(); + } + function attvaluemaybe(type) { + if (type == "string") return cont(attvaluemaybe); + else return pass(); + } + + return { + startState: function() { + return {tokenize: inText, cc: [], indented: 0, startOfLine: true, tagName: null, tagStart: null, context: null}; + }, + + token: function(stream, state) { + if (!state.tagName && stream.sol()) { + state.startOfLine = true; + state.indented = stream.indentation(); + } + if (stream.eatSpace()) return null; + + setStyle = type = tagName = null; + var style = state.tokenize(stream, state); + state.type = type; + if ((style || type) && style != "comment") { + curState = state; curStream = stream; + while (true) { + var comb = state.cc.pop() || element; + if (comb(type || style)) break; + } + } + state.startOfLine = false; + return setStyle || style; + }, + + indent: function(state, textAfter, fullLine) { + var context = state.context; + // Indent multi-line strings (e.g. css). + if (state.tokenize.isInAttribute) { + return state.stringStartCol + 1; + } + if ((state.tokenize != inTag && state.tokenize != inText) || + context && context.noIndent) + return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; + // Indent the starts of attribute names. + if (state.tagName) { + if (multilineTagIndentPastTag) + return state.tagStart + state.tagName.length + 2; + else + return state.tagStart + indentUnit * multilineTagIndentFactor; + } + if (alignCDATA && /", + + configuration: parserConfig.htmlMode ? "html" : "xml", + helperType: parserConfig.htmlMode ? "html" : "xml" + }; +}); + +CodeMirror.defineMIME("text/xml", "xml"); +CodeMirror.defineMIME("application/xml", "xml"); +if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) + CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xquery/LICENSE b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xquery/LICENSE new file mode 100644 index 0000000..2a2d47b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xquery/LICENSE @@ -0,0 +1,20 @@ +Copyright (C) 2011 by MarkLogic Corporation +Author: Mike Brevoort + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xquery/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xquery/index.html new file mode 100644 index 0000000..27acb89 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xquery/index.html @@ -0,0 +1,221 @@ + + + + + + CodeMirror: XQuery mode + + + + + + + + +

              CodeMirror: XQuery mode

              + +
              + +
              + + + +

              MIME types defined: application/xquery.

              + +

              Development of the CodeMirror XQuery mode was sponsored by + MarkLogic and developed by + Mike Brevoort. +

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xquery/test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xquery/test.js new file mode 100644 index 0000000..41719dd --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xquery/test.js @@ -0,0 +1,64 @@ +// Don't take these too seriously -- the expected results appear to be +// based on the results of actual runs without any serious manual +// verification. If a change you made causes them to fail, the test is +// as likely to wrong as the code. + +(function() { + var mode = CodeMirror.getMode({tabSize: 4}, "xquery"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("eviltest", + "[keyword xquery] [keyword version] [variable "1][keyword .][atom 0][keyword -][variable ml"][def&variable ;] [comment (: this is : a \"comment\" :)]", + " [keyword let] [variable $let] [keyword :=] [variable <x] [variable attr][keyword =][variable "value">"test"<func>][def&variable ;function]() [variable $var] {[keyword function]()} {[variable $var]}[variable <][keyword /][variable func><][keyword /][variable x>]", + " [keyword let] [variable $joe][keyword :=][atom 1]", + " [keyword return] [keyword element] [variable element] {", + " [keyword attribute] [variable attribute] { [atom 1] },", + " [keyword element] [variable test] { [variable 'a'] }, [keyword attribute] [variable foo] { [variable "bar"] },", + " [def&variable fn:doc]()[[ [variable foo][keyword /][variable @bar] [keyword eq] [variable $let] ]],", + " [keyword //][variable x] } [comment (: a more 'evil' test :)]", + " [comment (: Modified Blakeley example (: with nested comment :) ... :)]", + " [keyword declare] [keyword private] [keyword function] [def&variable local:declare]() {()}[variable ;]", + " [keyword declare] [keyword private] [keyword function] [def&variable local:private]() {()}[variable ;]", + " [keyword declare] [keyword private] [keyword function] [def&variable local:function]() {()}[variable ;]", + " [keyword declare] [keyword private] [keyword function] [def&variable local:local]() {()}[variable ;]", + " [keyword let] [variable $let] [keyword :=] [variable <let>let] [variable $let] [keyword :=] [variable "let"<][keyword /let][variable >]", + " [keyword return] [keyword element] [variable element] {", + " [keyword attribute] [variable attribute] { [keyword try] { [def&variable xdmp:version]() } [keyword catch]([variable $e]) { [def&variable xdmp:log]([variable $e]) } },", + " [keyword attribute] [variable fn:doc] { [variable "bar"] [variable castable] [keyword as] [atom xs:string] },", + " [keyword element] [variable text] { [keyword text] { [variable "text"] } },", + " [def&variable fn:doc]()[[ [qualifier child::][variable eq][keyword /]([variable @bar] [keyword |] [qualifier attribute::][variable attribute]) [keyword eq] [variable $let] ]],", + " [keyword //][variable fn:doc]", + " }"); + + MT("testEmptySequenceKeyword", + "[string \"foo\"] [keyword instance] [keyword of] [keyword empty-sequence]()"); + + MT("testMultiAttr", + "[tag

              ][variable hello] [variable world][tag

              ]"); + + MT("test namespaced variable", + "[keyword declare] [keyword namespace] [variable e] [keyword =] [string \"http://example.com/ANamespace\"][variable ;declare] [keyword variable] [variable $e:exampleComThisVarIsNotRecognized] [keyword as] [keyword element]([keyword *]) [variable external;]"); + + MT("test EQName variable", + "[keyword declare] [keyword variable] [variable $\"http://www.example.com/ns/my\":var] [keyword :=] [atom 12][variable ;]", + "[tag ]{[variable $\"http://www.example.com/ns/my\":var]}[tag ]"); + + MT("test EQName function", + "[keyword declare] [keyword function] [def&variable \"http://www.example.com/ns/my\":fn] ([variable $a] [keyword as] [atom xs:integer]) [keyword as] [atom xs:integer] {", + " [variable $a] [keyword +] [atom 2]", + "}[variable ;]", + "[tag ]{[def&variable \"http://www.example.com/ns/my\":fn]([atom 12])}[tag ]"); + + MT("test EQName function with single quotes", + "[keyword declare] [keyword function] [def&variable 'http://www.example.com/ns/my':fn] ([variable $a] [keyword as] [atom xs:integer]) [keyword as] [atom xs:integer] {", + " [variable $a] [keyword +] [atom 2]", + "}[variable ;]", + "[tag ]{[def&variable 'http://www.example.com/ns/my':fn]([atom 12])}[tag ]"); + + MT("testProcessingInstructions", + "[def&variable data]([comment&meta ]) [keyword instance] [keyword of] [atom xs:string]"); + + MT("testQuoteEscapeDouble", + "[keyword let] [variable $rootfolder] [keyword :=] [string \"c:\\builds\\winnt\\HEAD\\qa\\scripts\\\"]", + "[keyword let] [variable $keysfolder] [keyword :=] [def&variable concat]([variable $rootfolder], [string \"keys\\\"])"); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xquery/xquery.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xquery/xquery.js new file mode 100644 index 0000000..95decc1 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/xquery/xquery.js @@ -0,0 +1,450 @@ +/* +Copyright (C) 2011 by MarkLogic Corporation +Author: Mike Brevoort + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +CodeMirror.defineMode("xquery", function() { + + // The keywords object is set to the result of this self executing + // function. Each keyword is a property of the keywords object whose + // value is {type: atype, style: astyle} + var keywords = function(){ + // conveinence functions used to build keywords object + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a") + , B = kw("keyword b") + , C = kw("keyword c") + , operator = kw("operator") + , atom = {type: "atom", style: "atom"} + , punctuation = {type: "punctuation", style: null} + , qualifier = {type: "axis_specifier", style: "qualifier"}; + + // kwObj is what is return from this function at the end + var kwObj = { + 'if': A, 'switch': A, 'while': A, 'for': A, + 'else': B, 'then': B, 'try': B, 'finally': B, 'catch': B, + 'element': C, 'attribute': C, 'let': C, 'implements': C, 'import': C, 'module': C, 'namespace': C, + 'return': C, 'super': C, 'this': C, 'throws': C, 'where': C, 'private': C, + ',': punctuation, + 'null': atom, 'fn:false()': atom, 'fn:true()': atom + }; + + // a list of 'basic' keywords. For each add a property to kwObj with the value of + // {type: basic[i], style: "keyword"} e.g. 'after' --> {type: "after", style: "keyword"} + var basic = ['after','ancestor','ancestor-or-self','and','as','ascending','assert','attribute','before', + 'by','case','cast','child','comment','declare','default','define','descendant','descendant-or-self', + 'descending','document','document-node','element','else','eq','every','except','external','following', + 'following-sibling','follows','for','function','if','import','in','instance','intersect','item', + 'let','module','namespace','node','node','of','only','or','order','parent','precedes','preceding', + 'preceding-sibling','processing-instruction','ref','return','returns','satisfies','schema','schema-element', + 'self','some','sortby','stable','text','then','to','treat','typeswitch','union','variable','version','where', + 'xquery', 'empty-sequence']; + for(var i=0, l=basic.length; i < l; i++) { kwObj[basic[i]] = kw(basic[i]);}; + + // a list of types. For each add a property to kwObj with the value of + // {type: "atom", style: "atom"} + var types = ['xs:string', 'xs:float', 'xs:decimal', 'xs:double', 'xs:integer', 'xs:boolean', 'xs:date', 'xs:dateTime', + 'xs:time', 'xs:duration', 'xs:dayTimeDuration', 'xs:time', 'xs:yearMonthDuration', 'numeric', 'xs:hexBinary', + 'xs:base64Binary', 'xs:anyURI', 'xs:QName', 'xs:byte','xs:boolean','xs:anyURI','xf:yearMonthDuration']; + for(var i=0, l=types.length; i < l; i++) { kwObj[types[i]] = atom;}; + + // each operator will add a property to kwObj with value of {type: "operator", style: "keyword"} + var operators = ['eq', 'ne', 'lt', 'le', 'gt', 'ge', ':=', '=', '>', '>=', '<', '<=', '.', '|', '?', 'and', 'or', 'div', 'idiv', 'mod', '*', '/', '+', '-']; + for(var i=0, l=operators.length; i < l; i++) { kwObj[operators[i]] = operator;}; + + // each axis_specifiers will add a property to kwObj with value of {type: "axis_specifier", style: "qualifier"} + var axis_specifiers = ["self::", "attribute::", "child::", "descendant::", "descendant-or-self::", "parent::", + "ancestor::", "ancestor-or-self::", "following::", "preceding::", "following-sibling::", "preceding-sibling::"]; + for(var i=0, l=axis_specifiers.length; i < l; i++) { kwObj[axis_specifiers[i]] = qualifier; }; + + return kwObj; + }(); + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + + function ret(tp, style, cont) { + type = tp; content = cont; + return style; + } + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + // the primary mode tokenizer + function tokenBase(stream, state) { + var ch = stream.next(), + mightBeFunction = false, + isEQName = isEQNameAhead(stream); + + // an XML tag (if not in some sub, chained tokenizer) + if (ch == "<") { + if(stream.match("!--", true)) + return chain(stream, state, tokenXMLComment); + + if(stream.match("![CDATA", false)) { + state.tokenize = tokenCDATA; + return ret("tag", "tag"); + } + + if(stream.match("?", false)) { + return chain(stream, state, tokenPreProcessing); + } + + var isclose = stream.eat("/"); + stream.eatSpace(); + var tagName = "", c; + while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c; + + return chain(stream, state, tokenTag(tagName, isclose)); + } + // start code block + else if(ch == "{") { + pushStateStack(state,{ type: "codeblock"}); + return ret("", null); + } + // end code block + else if(ch == "}") { + popStateStack(state); + return ret("", null); + } + // if we're in an XML block + else if(isInXmlBlock(state)) { + if(ch == ">") + return ret("tag", "tag"); + else if(ch == "/" && stream.eat(">")) { + popStateStack(state); + return ret("tag", "tag"); + } + else + return ret("word", "variable"); + } + // if a number + else if (/\d/.test(ch)) { + stream.match(/^\d*(?:\.\d*)?(?:E[+\-]?\d+)?/); + return ret("number", "atom"); + } + // comment start + else if (ch === "(" && stream.eat(":")) { + pushStateStack(state, { type: "comment"}); + return chain(stream, state, tokenComment); + } + // quoted string + else if ( !isEQName && (ch === '"' || ch === "'")) + return chain(stream, state, tokenString(ch)); + // variable + else if(ch === "$") { + return chain(stream, state, tokenVariable); + } + // assignment + else if(ch ===":" && stream.eat("=")) { + return ret("operator", "keyword"); + } + // open paren + else if(ch === "(") { + pushStateStack(state, { type: "paren"}); + return ret("", null); + } + // close paren + else if(ch === ")") { + popStateStack(state); + return ret("", null); + } + // open paren + else if(ch === "[") { + pushStateStack(state, { type: "bracket"}); + return ret("", null); + } + // close paren + else if(ch === "]") { + popStateStack(state); + return ret("", null); + } + else { + var known = keywords.propertyIsEnumerable(ch) && keywords[ch]; + + // if there's a EQName ahead, consume the rest of the string portion, it's likely a function + if(isEQName && ch === '\"') while(stream.next() !== '"'){} + if(isEQName && ch === '\'') while(stream.next() !== '\''){} + + // gobble up a word if the character is not known + if(!known) stream.eatWhile(/[\w\$_-]/); + + // gobble a colon in the case that is a lib func type call fn:doc + var foundColon = stream.eat(":"); + + // if there's not a second colon, gobble another word. Otherwise, it's probably an axis specifier + // which should get matched as a keyword + if(!stream.eat(":") && foundColon) { + stream.eatWhile(/[\w\$_-]/); + } + // if the next non whitespace character is an open paren, this is probably a function (if not a keyword of other sort) + if(stream.match(/^[ \t]*\(/, false)) { + mightBeFunction = true; + } + // is the word a keyword? + var word = stream.current(); + known = keywords.propertyIsEnumerable(word) && keywords[word]; + + // if we think it's a function call but not yet known, + // set style to variable for now for lack of something better + if(mightBeFunction && !known) known = {type: "function_call", style: "variable def"}; + + // if the previous word was element, attribute, axis specifier, this word should be the name of that + if(isInXmlConstructor(state)) { + popStateStack(state); + return ret("word", "variable", word); + } + // as previously checked, if the word is element,attribute, axis specifier, call it an "xmlconstructor" and + // push the stack so we know to look for it on the next word + if(word == "element" || word == "attribute" || known.type == "axis_specifier") pushStateStack(state, {type: "xmlconstructor"}); + + // if the word is known, return the details of that else just call this a generic 'word' + return known ? ret(known.type, known.style, word) : + ret("word", "variable", word); + } + } + + // handle comments, including nested + function tokenComment(stream, state) { + var maybeEnd = false, maybeNested = false, nestedCount = 0, ch; + while (ch = stream.next()) { + if (ch == ")" && maybeEnd) { + if(nestedCount > 0) + nestedCount--; + else { + popStateStack(state); + break; + } + } + else if(ch == ":" && maybeNested) { + nestedCount++; + } + maybeEnd = (ch == ":"); + maybeNested = (ch == "("); + } + + return ret("comment", "comment"); + } + + // tokenizer for string literals + // optionally pass a tokenizer function to set state.tokenize back to when finished + function tokenString(quote, f) { + return function(stream, state) { + var ch; + + if(isInString(state) && stream.current() == quote) { + popStateStack(state); + if(f) state.tokenize = f; + return ret("string", "string"); + } + + pushStateStack(state, { type: "string", name: quote, tokenize: tokenString(quote, f) }); + + // if we're in a string and in an XML block, allow an embedded code block + if(stream.match("{", false) && isInXmlAttributeBlock(state)) { + state.tokenize = tokenBase; + return ret("string", "string"); + } + + + while (ch = stream.next()) { + if (ch == quote) { + popStateStack(state); + if(f) state.tokenize = f; + break; + } + else { + // if we're in a string and in an XML block, allow an embedded code block in an attribute + if(stream.match("{", false) && isInXmlAttributeBlock(state)) { + state.tokenize = tokenBase; + return ret("string", "string"); + } + + } + } + + return ret("string", "string"); + }; + } + + // tokenizer for variables + function tokenVariable(stream, state) { + var isVariableChar = /[\w\$_-]/; + + // a variable may start with a quoted EQName so if the next character is quote, consume to the next quote + if(stream.eat("\"")) { + while(stream.next() !== '\"'){}; + stream.eat(":"); + } else { + stream.eatWhile(isVariableChar); + if(!stream.match(":=", false)) stream.eat(":"); + } + stream.eatWhile(isVariableChar); + state.tokenize = tokenBase; + return ret("variable", "variable"); + } + + // tokenizer for XML tags + function tokenTag(name, isclose) { + return function(stream, state) { + stream.eatSpace(); + if(isclose && stream.eat(">")) { + popStateStack(state); + state.tokenize = tokenBase; + return ret("tag", "tag"); + } + // self closing tag without attributes? + if(!stream.eat("/")) + pushStateStack(state, { type: "tag", name: name, tokenize: tokenBase}); + if(!stream.eat(">")) { + state.tokenize = tokenAttribute; + return ret("tag", "tag"); + } + else { + state.tokenize = tokenBase; + } + return ret("tag", "tag"); + }; + } + + // tokenizer for XML attributes + function tokenAttribute(stream, state) { + var ch = stream.next(); + + if(ch == "/" && stream.eat(">")) { + if(isInXmlAttributeBlock(state)) popStateStack(state); + if(isInXmlBlock(state)) popStateStack(state); + return ret("tag", "tag"); + } + if(ch == ">") { + if(isInXmlAttributeBlock(state)) popStateStack(state); + return ret("tag", "tag"); + } + if(ch == "=") + return ret("", null); + // quoted string + if (ch == '"' || ch == "'") + return chain(stream, state, tokenString(ch, tokenAttribute)); + + if(!isInXmlAttributeBlock(state)) + pushStateStack(state, { type: "attribute", name: name, tokenize: tokenAttribute}); + + stream.eat(/[a-zA-Z_:]/); + stream.eatWhile(/[-a-zA-Z0-9_:.]/); + stream.eatSpace(); + + // the case where the attribute has not value and the tag was closed + if(stream.match(">", false) || stream.match("/", false)) { + popStateStack(state); + state.tokenize = tokenBase; + } + + return ret("attribute", "attribute"); + } + + // handle comments, including nested + function tokenXMLComment(stream, state) { + var ch; + while (ch = stream.next()) { + if (ch == "-" && stream.match("->", true)) { + state.tokenize = tokenBase; + return ret("comment", "comment"); + } + } + } + + + // handle CDATA + function tokenCDATA(stream, state) { + var ch; + while (ch = stream.next()) { + if (ch == "]" && stream.match("]", true)) { + state.tokenize = tokenBase; + return ret("comment", "comment"); + } + } + } + + // handle preprocessing instructions + function tokenPreProcessing(stream, state) { + var ch; + while (ch = stream.next()) { + if (ch == "?" && stream.match(">", true)) { + state.tokenize = tokenBase; + return ret("comment", "comment meta"); + } + } + } + + + // functions to test the current context of the state + function isInXmlBlock(state) { return isIn(state, "tag"); } + function isInXmlAttributeBlock(state) { return isIn(state, "attribute"); } + function isInXmlConstructor(state) { return isIn(state, "xmlconstructor"); } + function isInString(state) { return isIn(state, "string"); } + + function isEQNameAhead(stream) { + // assume we've already eaten a quote (") + if(stream.current() === '"') + return stream.match(/^[^\"]+\"\:/, false); + else if(stream.current() === '\'') + return stream.match(/^[^\"]+\'\:/, false); + else + return false; + } + + function isIn(state, type) { + return (state.stack.length && state.stack[state.stack.length - 1].type == type); + } + + function pushStateStack(state, newState) { + state.stack.push(newState); + } + + function popStateStack(state) { + state.stack.pop(); + var reinstateTokenize = state.stack.length && state.stack[state.stack.length-1].tokenize; + state.tokenize = reinstateTokenize || tokenBase; + } + + // the interface for the mode API + return { + startState: function() { + return { + tokenize: tokenBase, + cc: [], + stack: [] + }; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + return style; + } + }; + +}); + +CodeMirror.defineMIME("application/xquery", "xquery"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/yaml/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/yaml/index.html new file mode 100644 index 0000000..65e1ea7 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/yaml/index.html @@ -0,0 +1,68 @@ + + + + + CodeMirror: YAML mode + + + + + + + +

              CodeMirror: YAML mode

              +
              + + +

              MIME types defined: text/x-yaml.

              + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/yaml/yaml.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/yaml/yaml.js new file mode 100644 index 0000000..7a095b3 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/yaml/yaml.js @@ -0,0 +1,97 @@ +CodeMirror.defineMode("yaml", function() { + + var cons = ['true', 'false', 'on', 'off', 'yes', 'no']; + var keywordRegex = new RegExp("\\b(("+cons.join(")|(")+"))$", 'i'); + + return { + token: function(stream, state) { + var ch = stream.peek(); + var esc = state.escaped; + state.escaped = false; + /* comments */ + if (ch == "#" && (stream.pos == 0 || /\s/.test(stream.string.charAt(stream.pos - 1)))) { + stream.skipToEnd(); return "comment"; + } + if (state.literal && stream.indentation() > state.keyCol) { + stream.skipToEnd(); return "string"; + } else if (state.literal) { state.literal = false; } + if (stream.sol()) { + state.keyCol = 0; + state.pair = false; + state.pairStart = false; + /* document start */ + if(stream.match(/---/)) { return "def"; } + /* document end */ + if (stream.match(/\.\.\./)) { return "def"; } + /* array list item */ + if (stream.match(/\s*-\s+/)) { return 'meta'; } + } + /* pairs (associative arrays) -> key */ + if (!state.pair && stream.match(/^\s*([a-z0-9\._-])+(?=\s*:)/i)) { + state.pair = true; + state.keyCol = stream.indentation(); + return "atom"; + } + if (state.pair && stream.match(/^:\s*/)) { state.pairStart = true; return 'meta'; } + + /* inline pairs/lists */ + if (stream.match(/^(\{|\}|\[|\])/)) { + if (ch == '{') + state.inlinePairs++; + else if (ch == '}') + state.inlinePairs--; + else if (ch == '[') + state.inlineList++; + else + state.inlineList--; + return 'meta'; + } + + /* list seperator */ + if (state.inlineList > 0 && !esc && ch == ',') { + stream.next(); + return 'meta'; + } + /* pairs seperator */ + if (state.inlinePairs > 0 && !esc && ch == ',') { + state.keyCol = 0; + state.pair = false; + state.pairStart = false; + stream.next(); + return 'meta'; + } + + /* start of value of a pair */ + if (state.pairStart) { + /* block literals */ + if (stream.match(/^\s*(\||\>)\s*/)) { state.literal = true; return 'meta'; }; + /* references */ + if (stream.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) { return 'variable-2'; } + /* numbers */ + if (state.inlinePairs == 0 && stream.match(/^\s*-?[0-9\.\,]+\s?$/)) { return 'number'; } + if (state.inlinePairs > 0 && stream.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) { return 'number'; } + /* keywords */ + if (stream.match(keywordRegex)) { return 'keyword'; } + } + + /* nothing found, continue */ + state.pairStart = false; + state.escaped = (ch == '\\'); + stream.next(); + return null; + }, + startState: function() { + return { + pair: false, + pairStart: false, + keyCol: 0, + inlinePairs: 0, + inlineList: 0, + literal: false, + escaped: false + }; + } + }; +}); + +CodeMirror.defineMIME("text/x-yaml", "yaml"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/z80/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/z80/index.html new file mode 100644 index 0000000..133c870 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/z80/index.html @@ -0,0 +1,39 @@ + + + + + CodeMirror: Z80 assembly mode + + + + + + + +

              CodeMirror: Z80 assembly mode

              + +
              + + + +

              MIME type defined: text/x-z80.

              + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/z80/z80.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/z80/z80.js new file mode 100644 index 0000000..ff43d32 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/mode/z80/z80.js @@ -0,0 +1,85 @@ +CodeMirror.defineMode('z80', function() { + var keywords1 = /^(exx?|(ld|cp|in)([di]r?)?|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|rst|[de]i|halt|im|ot[di]r|out[di]?)\b/i; + var keywords2 = /^(call|j[pr]|ret[in]?)\b/i; + var keywords3 = /^b_?(call|jump)\b/i; + var variables1 = /^(af?|bc?|c|de?|e|hl?|l|i[xy]?|r|sp)\b/i; + var variables2 = /^(n?[zc]|p[oe]?|m)\b/i; + var errors = /^([hl][xy]|i[xy][hl]|slia|sll)\b/i; + var numbers = /^([\da-f]+h|[0-7]+o|[01]+b|\d+)\b/i; + + return { + startState: function() { + return {context: 0}; + }, + token: function(stream, state) { + if (!stream.column()) + state.context = 0; + + if (stream.eatSpace()) + return null; + + var w; + + if (stream.eatWhile(/\w/)) { + w = stream.current(); + + if (stream.indentation()) { + if (state.context == 1 && variables1.test(w)) + return 'variable-2'; + + if (state.context == 2 && variables2.test(w)) + return 'variable-3'; + + if (keywords1.test(w)) { + state.context = 1; + return 'keyword'; + } else if (keywords2.test(w)) { + state.context = 2; + return 'keyword'; + } else if (keywords3.test(w)) { + state.context = 3; + return 'keyword'; + } + + if (errors.test(w)) + return 'error'; + } else if (numbers.test(w)) { + return 'number'; + } else { + return null; + } + } else if (stream.eat(';')) { + stream.skipToEnd(); + return 'comment'; + } else if (stream.eat('"')) { + while (w = stream.next()) { + if (w == '"') + break; + + if (w == '\\') + stream.next(); + } + return 'string'; + } else if (stream.eat('\'')) { + if (stream.match(/\\?.'/)) + return 'number'; + } else if (stream.eat('.') || stream.sol() && stream.eat('#')) { + state.context = 4; + + if (stream.eatWhile(/\w/)) + return 'def'; + } else if (stream.eat('$')) { + if (stream.eatWhile(/[\da-f]/i)) + return 'number'; + } else if (stream.eat('%')) { + if (stream.eatWhile(/[01]/)) + return 'number'; + } else { + stream.next(); + } + return null; + } + }; +}); + +CodeMirror.defineMIME("text/x-z80", "z80"); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/package.json b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/package.json new file mode 100644 index 0000000..7fc9070 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/package.json @@ -0,0 +1,19 @@ +{ + "name": "codemirror", + "version":"3.15.0", + "main": "lib/codemirror.js", + "description": "In-browser code editing made bearable", + "licenses": [{"type": "MIT", + "url": "http://codemirror.net/LICENSE"}], + "directories": {"lib": "./lib"}, + "scripts": {"test": "node ./test/run.js"}, + "devDependencies": {"node-static": "0.6.0"}, + "bugs": "http://github.com/marijnh/CodeMirror/issues", + "keywords": ["JavaScript", "CodeMirror", "Editor"], + "homepage": "http://codemirror.net", + "maintainers":[{"name": "Marijn Haverbeke", + "email": "marijnh@gmail.com", + "web": "http://marijnhaverbeke.nl"}], + "repository": {"type": "git", + "url": "http://marijnhaverbeke.nl/git/codemirror"} +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/comment_test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/comment_test.js new file mode 100644 index 0000000..7ab3127 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/comment_test.js @@ -0,0 +1,51 @@ +namespace = "comment_"; + +(function() { + function test(name, mode, run, before, after) { + return testCM(name, function(cm) { + run(cm); + eq(cm.getValue(), after); + }, {value: before, mode: mode}); + } + + var simpleProg = "function foo() {\n return bar;\n}"; + + test("block", "javascript", function(cm) { + cm.blockComment(Pos(0, 3), Pos(3, 0), {blockCommentLead: " *"}); + }, simpleProg + "\n", "/* function foo() {\n * return bar;\n * }\n */"); + + test("blockToggle", "javascript", function(cm) { + cm.blockComment(Pos(0, 3), Pos(2, 0), {blockCommentLead: " *"}); + cm.uncomment(Pos(0, 3), Pos(2, 0), {blockCommentLead: " *"}); + }, simpleProg, simpleProg); + + test("line", "javascript", function(cm) { + cm.lineComment(Pos(1, 1), Pos(1, 1)); + }, simpleProg, "function foo() {\n// return bar;\n}"); + + test("lineToggle", "javascript", function(cm) { + cm.lineComment(Pos(0, 0), Pos(2, 1)); + cm.uncomment(Pos(0, 0), Pos(2, 1)); + }, simpleProg, simpleProg); + + test("fallbackToBlock", "css", function(cm) { + cm.lineComment(Pos(0, 0), Pos(2, 1)); + }, "html {\n border: none;\n}", "/* html {\n border: none;\n} */"); + + test("fallbackToLine", "ruby", function(cm) { + cm.blockComment(Pos(0, 0), Pos(1)); + }, "def blah()\n return hah\n", "# def blah()\n# return hah\n"); + + test("commentRange", "javascript", function(cm) { + cm.blockComment(Pos(1, 2), Pos(1, 13), {fullLines: false}); + }, simpleProg, "function foo() {\n /*return bar;*/\n}"); + + test("indented", "javascript", function(cm) { + cm.lineComment(Pos(1, 0), Pos(2), {indent: true}); + }, simpleProg, "function foo() {\n // return bar;\n // }"); + + test("singleEmptyLine", "javascript", function(cm) { + cm.setCursor(1); + cm.execCommand("toggleComment"); + }, "a;\n\nb;", "a;\n// \nb;"); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/doc_test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/doc_test.js new file mode 100644 index 0000000..3e04e15 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/doc_test.js @@ -0,0 +1,329 @@ +(function() { + // A minilanguage for instantiating linked CodeMirror instances and Docs + function instantiateSpec(spec, place, opts) { + var names = {}, pos = 0, l = spec.length, editors = []; + while (spec) { + var m = spec.match(/^(\w+)(\*?)(?:='([^\']*)'|<(~?)(\w+)(?:\/(\d+)-(\d+))?)\s*/); + var name = m[1], isDoc = m[2], cur; + if (m[3]) { + cur = isDoc ? CodeMirror.Doc(m[3]) : CodeMirror(place, clone(opts, {value: m[3]})); + } else { + var other = m[5]; + if (!names.hasOwnProperty(other)) { + names[other] = editors.length; + editors.push(CodeMirror(place, opts)); + } + var doc = editors[names[other]].linkedDoc({ + sharedHist: !m[4], + from: m[6] ? Number(m[6]) : null, + to: m[7] ? Number(m[7]) : null + }); + cur = isDoc ? doc : CodeMirror(place, clone(opts, {value: doc})); + } + names[name] = editors.length; + editors.push(cur); + spec = spec.slice(m[0].length); + } + return editors; + } + + function clone(obj, props) { + if (!obj) return; + clone.prototype = obj; + var inst = new clone(); + if (props) for (var n in props) if (props.hasOwnProperty(n)) + inst[n] = props[n]; + return inst; + } + + function eqAll(val) { + var end = arguments.length, msg = null; + if (typeof arguments[end-1] == "string") + msg = arguments[--end]; + if (i == end) throw new Error("No editors provided to eqAll"); + for (var i = 1; i < end; ++i) + eq(arguments[i].getValue(), val, msg) + } + + function testDoc(name, spec, run, opts, expectFail) { + if (!opts) opts = {}; + + return test("doc_" + name, function() { + var place = document.getElementById("testground"); + var editors = instantiateSpec(spec, place, opts); + var successful = false; + + try { + run.apply(null, editors); + successful = true; + } finally { + if ((debug && !successful) || verbose) { + place.style.visibility = "visible"; + } else { + for (var i = 0; i < editors.length; ++i) + if (editors[i] instanceof CodeMirror) + place.removeChild(editors[i].getWrapperElement()); + } + } + }, expectFail); + } + + var ie_lt8 = /MSIE [1-7]\b/.test(navigator.userAgent); + + function testBasic(a, b) { + eqAll("x", a, b); + a.setValue("hey"); + eqAll("hey", a, b); + b.setValue("wow"); + eqAll("wow", a, b); + a.replaceRange("u\nv\nw", Pos(0, 3)); + b.replaceRange("i", Pos(0, 4)); + b.replaceRange("j", Pos(2, 1)); + eqAll("wowui\nv\nwj", a, b); + } + + testDoc("basic", "A='x' B 0, "not at left"); + is(pos.top > 0, "not at top"); + }); + + testDoc("copyDoc", "A='u'", function(a) { + var copy = a.getDoc().copy(true); + a.setValue("foo"); + copy.setValue("bar"); + var old = a.swapDoc(copy); + eq(a.getValue(), "bar"); + a.undo(); + eq(a.getValue(), "u"); + a.swapDoc(old); + eq(a.getValue(), "foo"); + eq(old.historySize().undo, 1); + eq(old.copy(false).historySize().undo, 0); + }); + + testDoc("docKeepsMode", "A='1+1'", function(a) { + var other = CodeMirror.Doc("hi", "text/x-markdown"); + a.setOption("mode", "text/javascript"); + var old = a.swapDoc(other); + eq(a.getOption("mode"), "text/x-markdown"); + eq(a.getMode().name, "markdown"); + a.swapDoc(old); + eq(a.getOption("mode"), "text/javascript"); + eq(a.getMode().name, "javascript"); + }); + + testDoc("subview", "A='1\n2\n3\n4\n5' B<~A/1-3", function(a, b) { + eq(b.getValue(), "2\n3"); + eq(b.firstLine(), 1); + b.setCursor(Pos(4)); + eqPos(b.getCursor(), Pos(2, 1)); + a.replaceRange("-1\n0\n", Pos(0, 0)); + eq(b.firstLine(), 3); + eqPos(b.getCursor(), Pos(4, 1)); + a.undo(); + eqPos(b.getCursor(), Pos(2, 1)); + b.replaceRange("oyoy\n", Pos(2, 0)); + eq(a.getValue(), "1\n2\noyoy\n3\n4\n5"); + b.undo(); + eq(a.getValue(), "1\n2\n3\n4\n5"); + }); + + testDoc("subviewEditOnBoundary", "A='11\n22\n33\n44\n55' B<~A/1-4", function(a, b) { + a.replaceRange("x\nyy\nz", Pos(0, 1), Pos(2, 1)); + eq(b.firstLine(), 2); + eq(b.lineCount(), 2); + eq(b.getValue(), "z3\n44"); + a.replaceRange("q\nrr\ns", Pos(3, 1), Pos(4, 1)); + eq(b.firstLine(), 2); + eq(b.getValue(), "z3\n4q"); + eq(a.getValue(), "1x\nyy\nz3\n4q\nrr\ns5"); + a.execCommand("selectAll"); + a.replaceSelection("!"); + eqAll("!", a, b); + }); + + + testDoc("sharedMarker", "A='ab\ncd\nef\ngh' B 500){ + totalTime = 0; + delay = 50; + } + setTimeout(function(){step(i + 1);}, delay); + } else { // Quit tests + running = false; + return null; + } + } + step(0); +} + +function label(str, msg) { + if (msg) return str + " (" + msg + ")"; + return str; +} +function eq(a, b, msg) { + if (a != b) throw new Failure(label(a + " != " + b, msg)); +} +function eqPos(a, b, msg) { + function str(p) { return "{line:" + p.line + ",ch:" + p.ch + "}"; } + if (a == b) return; + if (a == null) throw new Failure(label("comparing null to " + str(b), msg)); + if (b == null) throw new Failure(label("comparing " + str(a) + " to null", msg)); + if (a.line != b.line || a.ch != b.ch) throw new Failure(label(str(a) + " != " + str(b), msg)); +} +function is(a, msg) { + if (!a) throw new Failure(label("assertion failed", msg)); +} + +function countTests() { + if (!debug) return tests.length; + var sum = 0; + for (var i = 0; i < tests.length; ++i) { + var name = tests[i].name; + if (indexOf(debug, name) != -1 || + indexOf(debug, name.split("_")[0] + "_*") != -1) + ++sum; + } + return sum; +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/emacs_test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/emacs_test.js new file mode 100644 index 0000000..ab18241 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/emacs_test.js @@ -0,0 +1,135 @@ +(function() { + "use strict"; + + var Pos = CodeMirror.Pos; + namespace = "emacs_"; + + var eventCache = {}; + function fakeEvent(keyName) { + var event = eventCache[key]; + if (event) return event; + + var ctrl, shift, alt; + var key = keyName.replace(/\w+-/g, function(type) { + if (type == "Ctrl-") ctrl = true; + else if (type == "Alt-") alt = true; + else if (type == "Shift-") shift = true; + return ""; + }); + var code; + for (var c in CodeMirror.keyNames) + if (CodeMirror.keyNames[c] == key) { code = c; break; } + if (c == null) throw new Error("Unknown key: " + key); + + return eventCache[keyName] = { + type: "keydown", keyCode: code, ctrlKey: ctrl, shiftKey: shift, altKey: alt, + preventDefault: function(){}, stopPropagation: function(){} + }; + } + + function sim(name, start /*, actions... */) { + var keys = Array.prototype.slice.call(arguments, 2); + testCM(name, function(cm) { + for (var i = 0; i < keys.length; ++i) { + var cur = keys[i]; + if (cur instanceof Pos) cm.setCursor(cur); + else if (cur.call) cur(cm); + else cm.triggerOnKeyDown(fakeEvent(cur)); + } + }, {keyMap: "emacs", value: start, mode: "javascript"}); + } + + function at(line, ch) { return function(cm) { eqPos(cm.getCursor(), Pos(line, ch)); }; } + function txt(str) { return function(cm) { eq(cm.getValue(), str); }; } + + sim("motionHSimple", "abc", "Ctrl-F", "Ctrl-F", "Ctrl-B", at(0, 1)); + sim("motionHMulti", "abcde", + "Ctrl-4", "Ctrl-F", at(0, 4), "Ctrl--", "Ctrl-2", "Ctrl-F", at(0, 2), + "Ctrl-5", "Ctrl-B", at(0, 0)); + + sim("motionHWord", "abc. def ghi", + "Alt-F", at(0, 3), "Alt-F", at(0, 8), + "Ctrl-B", "Alt-B", at(0, 5), "Alt-B", at(0, 0)); + sim("motionHWordMulti", "abc. def ghi ", + "Ctrl-3", "Alt-F", at(0, 12), "Ctrl-2", "Alt-B", at(0, 5), + "Ctrl--", "Alt-B", at(0, 8)); + + sim("motionVSimple", "a\nb\nc\n", "Ctrl-N", "Ctrl-N", "Ctrl-P", at(1, 0)); + sim("motionVMulti", "a\nb\nc\nd\ne\n", + "Ctrl-2", "Ctrl-N", at(2, 0), "Ctrl-F", "Ctrl--", "Ctrl-N", at(1, 1), + "Ctrl--", "Ctrl-3", "Ctrl-P", at(4, 1)); + + sim("killYank", "abc\ndef\nghi", + "Ctrl-F", "Ctrl-Space", "Ctrl-N", "Ctrl-N", "Ctrl-W", "Ctrl-E", "Ctrl-Y", + txt("ahibc\ndef\ng")); + sim("killRing", "abcdef", + "Ctrl-Space", "Ctrl-F", "Ctrl-W", "Ctrl-Space", "Ctrl-F", "Ctrl-W", + "Ctrl-Y", "Alt-Y", + txt("acdef")); + sim("copyYank", "abcd", + "Ctrl-Space", "Ctrl-E", "Alt-W", "Ctrl-Y", + txt("abcdabcd")); + + sim("killLineSimple", "foo\nbar", "Ctrl-F", "Ctrl-K", txt("f\nbar")); + sim("killLineEmptyLine", "foo\n \nbar", "Ctrl-N", "Ctrl-K", txt("foo\nbar")); + sim("killLineMulti", "foo\nbar\nbaz", + "Ctrl-F", "Ctrl-F", "Ctrl-K", "Ctrl-K", "Ctrl-K", "Ctrl-A", "Ctrl-Y", + txt("o\nbarfo\nbaz")); + + sim("moveByParagraph", "abc\ndef\n\n\nhij\nklm\n\n", + "Ctrl-F", "Ctrl-Down", at(2, 0), "Ctrl-Down", at(6, 0), + "Ctrl-N", "Ctrl-Up", at(3, 0), "Ctrl-Up", at(0, 0), + Pos(1, 2), "Ctrl-Down", at(2, 0), Pos(4, 2), "Ctrl-Up", at(3, 0)); + sim("moveByParagraphMulti", "abc\n\ndef\n\nhij\n\nklm", + "Ctrl-U", "2", "Ctrl-Down", at(3, 0), + "Shift-Alt-.", "Ctrl-3", "Ctrl-Up", at(1, 0)); + + sim("moveBySentence", "sentence one! sentence\ntwo\n\nparagraph two", + "Alt-E", at(0, 13), "Alt-E", at(1, 3), "Ctrl-F", "Alt-A", at(0, 13)); + + sim("moveByExpr", "function foo(a, b) {}", + "Ctrl-Alt-F", at(0, 8), "Ctrl-Alt-F", at(0, 12), "Ctrl-Alt-F", at(0, 18), + "Ctrl-Alt-B", at(0, 12), "Ctrl-Alt-B", at(0, 9)); + sim("moveByExprMulti", "foo bar baz bug", + "Ctrl-2", "Ctrl-Alt-F", at(0, 7), + "Ctrl--", "Ctrl-Alt-F", at(0, 4), + "Ctrl--", "Ctrl-2", "Ctrl-Alt-B", at(0, 11)); + sim("delExpr", "var x = [\n a,\n b\n c\n];", + Pos(0, 8), "Ctrl-Alt-K", txt("var x = ;"), "Ctrl-/", + Pos(4, 1), "Ctrl-Alt-Backspace", txt("var x = ;")); + sim("delExprMulti", "foo bar baz", + "Ctrl-2", "Ctrl-Alt-K", txt(" baz"), + "Ctrl-/", "Ctrl-E", "Ctrl-2", "Ctrl-Alt-Backspace", txt("foo ")); + + sim("justOneSpace", "hi bye ", + Pos(0, 4), "Alt-Space", txt("hi bye "), + Pos(0, 4), "Alt-Space", txt("hi b ye "), + "Ctrl-A", "Alt-Space", "Ctrl-E", "Alt-Space", txt(" hi b ye ")); + + sim("openLine", "foo bar", "Alt-F", "Ctrl-O", txt("foo\n bar")) + + sim("transposeChar", "abcd\n\ne", + "Ctrl-F", "Ctrl-T", "Ctrl-T", txt("bcad\n\ne"), at(0, 3), + "Ctrl-F", "Ctrl-T", "Ctrl-T", "Ctrl-T", txt("bcda\n\ne"), at(0, 4), + "Ctrl-F", "Ctrl-T", txt("bcd\na\ne"), at(1, 1)); + + sim("manipWordCase", "foo BAR bAZ", + "Alt-C", "Alt-L", "Alt-U", txt("Foo bar BAZ"), + "Ctrl-A", "Alt-U", "Alt-L", "Alt-C", txt("FOO bar Baz")); + sim("manipWordCaseMulti", "foo Bar bAz", + "Ctrl-2", "Alt-U", txt("FOO BAR bAz"), + "Ctrl-A", "Ctrl-3", "Alt-C", txt("Foo Bar Baz")); + + sim("upExpr", "foo {\n bar[];\n baz(blah);\n}", + Pos(2, 7), "Ctrl-Alt-U", at(2, 5), "Ctrl-Alt-U", at(0, 4)); + sim("transposeExpr", "do foo[bar] dah", + Pos(0, 6), "Ctrl-Alt-T", txt("do [bar]foo dah")); + + testCM("save", function(cm) { + var saved = false; + CodeMirror.commands.save = function(cm) { saved = cm.getValue(); }; + cm.triggerOnKeyDown(fakeEvent("Ctrl-X")); + cm.triggerOnKeyDown(fakeEvent("Ctrl-S")); + is(saved, "hi"); + }, {value: "hi", keyMap: "emacs"}); +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/index.html b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/index.html new file mode 100644 index 0000000..5ead383 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/index.html @@ -0,0 +1,196 @@ + + + + + CodeMirror: Test Suite + + + + + + + + + + + + + + + + + + +

              CodeMirror: Test Suite

              + +

              A limited set of programmatic sanity tests for CodeMirror.

              + +
              +
              Ran 0 of 0 tests
              +
              +

              Please enable JavaScript...

              +
              + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/lint/acorn.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/lint/acorn.js new file mode 100644 index 0000000..6323b1f --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/lint/acorn.js @@ -0,0 +1,1593 @@ +// Acorn is a tiny, fast JavaScript parser written in JavaScript. +// +// Acorn was written by Marijn Haverbeke and released under an MIT +// license. The Unicode regexps (for identifiers and whitespace) were +// taken from [Esprima](http://esprima.org) by Ariya Hidayat. +// +// Git repositories for Acorn are available at +// +// http://marijnhaverbeke.nl/git/acorn +// https://github.com/marijnh/acorn.git +// +// Please use the [github bug tracker][ghbt] to report issues. +// +// [ghbt]: https://github.com/marijnh/acorn/issues + +(function(exports) { + "use strict"; + + exports.version = "0.0.1"; + + // The main exported interface (under `window.acorn` when in the + // browser) is a `parse` function that takes a code string and + // returns an abstract syntax tree as specified by [Mozilla parser + // API][api], with the caveat that the SpiderMonkey-specific syntax + // (`let`, `yield`, inline XML, etc) is not recognized. + // + // [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API + + var options, input, inputLen, sourceFile; + + exports.parse = function(inpt, opts) { + input = String(inpt); inputLen = input.length; + options = opts || {}; + for (var opt in defaultOptions) if (!options.hasOwnProperty(opt)) + options[opt] = defaultOptions[opt]; + sourceFile = options.sourceFile || null; + return parseTopLevel(options.program); + }; + + // A second optional argument can be given to further configure + // the parser process. These options are recognized: + + var defaultOptions = exports.defaultOptions = { + // `ecmaVersion` indicates the ECMAScript version to parse. Must + // be either 3 or 5. This + // influences support for strict mode, the set of reserved words, and + // support for getters and setter. + ecmaVersion: 5, + // Turn on `strictSemicolons` to prevent the parser from doing + // automatic semicolon insertion. + strictSemicolons: false, + // When `allowTrailingCommas` is false, the parser will not allow + // trailing commas in array and object literals. + allowTrailingCommas: true, + // By default, reserved words are not enforced. Enable + // `forbidReserved` to enforce them. + forbidReserved: false, + // When `trackComments` is turned on, the parser will attach + // `commentsBefore` and `commentsAfter` properties to AST nodes + // holding arrays of strings. A single comment may appear in both + // a `commentsBefore` and `commentsAfter` array (of the nodes + // after and before it), but never twice in the before (or after) + // array of different nodes. + trackComments: false, + // When `locations` is on, `loc` properties holding objects with + // `start` and `end` properties in `{line, column}` form (with + // line being 1-based and column 0-based) will be attached to the + // nodes. + locations: false, + // Nodes have their start and end characters offsets recorded in + // `start` and `end` properties (directly on the node, rather than + // the `loc` object, which holds line/column data. To also add a + // [semi-standardized][range] `range` property holding a `[start, + // end]` array with the same numbers, set the `ranges` option to + // `true`. + // + // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678 + ranges: false, + // It is possible to parse multiple files into a single AST by + // passing the tree produced by parsing the first file as + // `program` option in subsequent parses. This will add the + // toplevel forms of the parsed file to the `Program` (top) node + // of an existing parse tree. + program: null, + // When `location` is on, you can pass this to record the source + // file in every node's `loc` object. + sourceFile: null + }; + + // The `getLineInfo` function is mostly useful when the + // `locations` option is off (for performance reasons) and you + // want to find the line/column position for a given character + // offset. `input` should be the code string that the offset refers + // into. + + var getLineInfo = exports.getLineInfo = function(input, offset) { + for (var line = 1, cur = 0;;) { + lineBreak.lastIndex = cur; + var match = lineBreak.exec(input); + if (match && match.index < offset) { + ++line; + cur = match.index + match[0].length; + } else break; + } + return {line: line, column: offset - cur}; + }; + + // Acorn is organized as a tokenizer and a recursive-descent parser. + // Both use (closure-)global variables to keep their state and + // communicate. We already saw the `options`, `input`, and + // `inputLen` variables above (set in `parse`). + + // The current position of the tokenizer in the input. + + var tokPos; + + // The start and end offsets of the current token. + + var tokStart, tokEnd; + + // When `options.locations` is true, these hold objects + // containing the tokens start and end line/column pairs. + + var tokStartLoc, tokEndLoc; + + // The type and value of the current token. Token types are objects, + // named by variables against which they can be compared, and + // holding properties that describe them (indicating, for example, + // the precedence of an infix operator, and the original name of a + // keyword token). The kind of value that's held in `tokVal` depends + // on the type of the token. For literals, it is the literal value, + // for operators, the operator name, and so on. + + var tokType, tokVal; + + // These are used to hold arrays of comments when + // `options.trackComments` is true. + + var tokCommentsBefore, tokCommentsAfter; + + // Interal state for the tokenizer. To distinguish between division + // operators and regular expressions, it remembers whether the last + // token was one that is allowed to be followed by an expression. + // (If it is, a slash is probably a regexp, if it isn't it's a + // division operator. See the `parseStatement` function for a + // caveat.) + + var tokRegexpAllowed, tokComments; + + // When `options.locations` is true, these are used to keep + // track of the current line, and know when a new line has been + // entered. See the `curLineLoc` function. + + var tokCurLine, tokLineStart, tokLineStartNext; + + // These store the position of the previous token, which is useful + // when finishing a node and assigning its `end` position. + + var lastStart, lastEnd, lastEndLoc; + + // This is the parser's state. `inFunction` is used to reject + // `return` statements outside of functions, `labels` to verify that + // `break` and `continue` have somewhere to jump to, and `strict` + // indicates whether strict mode is on. + + var inFunction, labels, strict; + + // This function is used to raise exceptions on parse errors. It + // takes either a `{line, column}` object or an offset integer (into + // the current `input`) as `pos` argument. It attaches the position + // to the end of the error message, and then raises a `SyntaxError` + // with that message. + + function raise(pos, message) { + if (typeof pos == "number") pos = getLineInfo(input, pos); + message += " (" + pos.line + ":" + pos.column + ")"; + throw new SyntaxError(message); + } + + // ## Token types + + // The assignment of fine-grained, information-carrying type objects + // allows the tokenizer to store the information it has about a + // token in a way that is very cheap for the parser to look up. + + // All token type variables start with an underscore, to make them + // easy to recognize. + + // These are the general types. The `type` property is only used to + // make them recognizeable when debugging. + + var _num = {type: "num"}, _regexp = {type: "regexp"}, _string = {type: "string"}; + var _name = {type: "name"}, _eof = {type: "eof"}; + + // Keyword tokens. The `keyword` property (also used in keyword-like + // operators) indicates that the token originated from an + // identifier-like word, which is used when parsing property names. + // + // The `beforeExpr` property is used to disambiguate between regular + // expressions and divisions. It is set on all token types that can + // be followed by an expression (thus, a slash after them would be a + // regular expression). + // + // `isLoop` marks a keyword as starting a loop, which is important + // to know when parsing a label, in order to allow or disallow + // continue jumps to that label. + + var _break = {keyword: "break"}, _case = {keyword: "case", beforeExpr: true}, _catch = {keyword: "catch"}; + var _continue = {keyword: "continue"}, _debugger = {keyword: "debugger"}, _default = {keyword: "default"}; + var _do = {keyword: "do", isLoop: true}, _else = {keyword: "else", beforeExpr: true}; + var _finally = {keyword: "finally"}, _for = {keyword: "for", isLoop: true}, _function = {keyword: "function"}; + var _if = {keyword: "if"}, _return = {keyword: "return", beforeExpr: true}, _switch = {keyword: "switch"}; + var _throw = {keyword: "throw", beforeExpr: true}, _try = {keyword: "try"}, _var = {keyword: "var"}; + var _while = {keyword: "while", isLoop: true}, _with = {keyword: "with"}, _new = {keyword: "new", beforeExpr: true}; + var _this = {keyword: "this"}; + + // The keywords that denote values. + + var _null = {keyword: "null", atomValue: null}, _true = {keyword: "true", atomValue: true}; + var _false = {keyword: "false", atomValue: false}; + + // Some keywords are treated as regular operators. `in` sometimes + // (when parsing `for`) needs to be tested against specifically, so + // we assign a variable name to it for quick comparing. + + var _in = {keyword: "in", binop: 7, beforeExpr: true}; + + // Map keyword names to token types. + + var keywordTypes = {"break": _break, "case": _case, "catch": _catch, + "continue": _continue, "debugger": _debugger, "default": _default, + "do": _do, "else": _else, "finally": _finally, "for": _for, + "function": _function, "if": _if, "return": _return, "switch": _switch, + "throw": _throw, "try": _try, "var": _var, "while": _while, "with": _with, + "null": _null, "true": _true, "false": _false, "new": _new, "in": _in, + "instanceof": {keyword: "instanceof", binop: 7}, "this": _this, + "typeof": {keyword: "typeof", prefix: true}, + "void": {keyword: "void", prefix: true}, + "delete": {keyword: "delete", prefix: true}}; + + // Punctuation token types. Again, the `type` property is purely for debugging. + + var _bracketL = {type: "[", beforeExpr: true}, _bracketR = {type: "]"}, _braceL = {type: "{", beforeExpr: true}; + var _braceR = {type: "}"}, _parenL = {type: "(", beforeExpr: true}, _parenR = {type: ")"}; + var _comma = {type: ",", beforeExpr: true}, _semi = {type: ";", beforeExpr: true}; + var _colon = {type: ":", beforeExpr: true}, _dot = {type: "."}, _question = {type: "?", beforeExpr: true}; + + // Operators. These carry several kinds of properties to help the + // parser use them properly (the presence of these properties is + // what categorizes them as operators). + // + // `binop`, when present, specifies that this operator is a binary + // operator, and will refer to its precedence. + // + // `prefix` and `postfix` mark the operator as a prefix or postfix + // unary operator. `isUpdate` specifies that the node produced by + // the operator should be of type UpdateExpression rather than + // simply UnaryExpression (`++` and `--`). + // + // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as + // binary operators with a very low precedence, that should result + // in AssignmentExpression nodes. + + var _slash = {binop: 10, beforeExpr: true}, _eq = {isAssign: true, beforeExpr: true}; + var _assign = {isAssign: true, beforeExpr: true}, _plusmin = {binop: 9, prefix: true, beforeExpr: true}; + var _incdec = {postfix: true, prefix: true, isUpdate: true}, _prefix = {prefix: true, beforeExpr: true}; + var _bin1 = {binop: 1, beforeExpr: true}, _bin2 = {binop: 2, beforeExpr: true}; + var _bin3 = {binop: 3, beforeExpr: true}, _bin4 = {binop: 4, beforeExpr: true}; + var _bin5 = {binop: 5, beforeExpr: true}, _bin6 = {binop: 6, beforeExpr: true}; + var _bin7 = {binop: 7, beforeExpr: true}, _bin8 = {binop: 8, beforeExpr: true}; + var _bin10 = {binop: 10, beforeExpr: true}; + + // This is a trick taken from Esprima. It turns out that, on + // non-Chrome browsers, to check whether a string is in a set, a + // predicate containing a big ugly `switch` statement is faster than + // a regular expression, and on Chrome the two are about on par. + // This function uses `eval` (non-lexical) to produce such a + // predicate from a space-separated string of words. + // + // It starts by sorting the words by length. + + function makePredicate(words) { + words = words.split(" "); + var f = "", cats = []; + out: for (var i = 0; i < words.length; ++i) { + for (var j = 0; j < cats.length; ++j) + if (cats[j][0].length == words[i].length) { + cats[j].push(words[i]); + continue out; + } + cats.push([words[i]]); + } + function compareTo(arr) { + if (arr.length == 1) return f += "return str === " + JSON.stringify(arr[0]) + ";"; + f += "switch(str){"; + for (var i = 0; i < arr.length; ++i) f += "case " + JSON.stringify(arr[i]) + ":"; + f += "return true}return false;"; + } + + // When there are more than three length categories, an outer + // switch first dispatches on the lengths, to save on comparisons. + + if (cats.length > 3) { + cats.sort(function(a, b) {return b.length - a.length;}); + f += "switch(str.length){"; + for (var i = 0; i < cats.length; ++i) { + var cat = cats[i]; + f += "case " + cat[0].length + ":"; + compareTo(cat); + } + f += "}"; + + // Otherwise, simply generate a flat `switch` statement. + + } else { + compareTo(words); + } + return new Function("str", f); + } + + // The ECMAScript 3 reserved word list. + + var isReservedWord3 = makePredicate("abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile"); + + // ECMAScript 5 reserved words. + + var isReservedWord5 = makePredicate("class enum extends super const export import"); + + // The additional reserved words in strict mode. + + var isStrictReservedWord = makePredicate("implements interface let package private protected public static yield"); + + // The forbidden variable names in strict mode. + + var isStrictBadIdWord = makePredicate("eval arguments"); + + // And the keywords. + + var isKeyword = makePredicate("break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this"); + + // ## Character categories + + // Big ugly regular expressions that match characters in the + // whitespace, identifier, and identifier-start categories. These + // are only applied when a character is found to actually have a + // code point above 128. + + var nonASCIIwhitespace = /[\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]/; + var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; + var nonASCIIidentifierChars = "\u0371-\u0374\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u0620-\u0649\u0672-\u06d3\u06e7-\u06e8\u06fb-\u06fc\u0730-\u074a\u0800-\u0814\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0840-\u0857\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962-\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09d7\u09df-\u09e0\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2-\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5f-\u0b60\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62-\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2-\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d46-\u0d48\u0d57\u0d62-\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e34-\u0e3a\u0e40-\u0e45\u0e50-\u0e59\u0eb4-\u0eb9\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f41-\u0f47\u0f71-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1029\u1040-\u1049\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u170e-\u1710\u1720-\u1730\u1740-\u1750\u1772\u1773\u1780-\u17b2\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1920-\u192b\u1930-\u193b\u1951-\u196d\u19b0-\u19c0\u19c8-\u19c9\u19d0-\u19d9\u1a00-\u1a15\u1a20-\u1a53\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b46-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1bb0-\u1bb9\u1be6-\u1bf3\u1c00-\u1c22\u1c40-\u1c49\u1c5b-\u1c7d\u1cd0-\u1cd2\u1d00-\u1dbe\u1e01-\u1f15\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2d81-\u2d96\u2de0-\u2dff\u3021-\u3028\u3099\u309a\ua640-\ua66d\ua674-\ua67d\ua69f\ua6f0-\ua6f1\ua7f8-\ua800\ua806\ua80b\ua823-\ua827\ua880-\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8f3-\ua8f7\ua900-\ua909\ua926-\ua92d\ua930-\ua945\ua980-\ua983\ua9b3-\ua9c0\uaa00-\uaa27\uaa40-\uaa41\uaa4c-\uaa4d\uaa50-\uaa59\uaa7b\uaae0-\uaae9\uaaf2-\uaaf3\uabc0-\uabe1\uabec\uabed\uabf0-\uabf9\ufb20-\ufb28\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; + var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); + var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); + + // Whether a single character denotes a newline. + + var newline = /[\n\r\u2028\u2029]/; + + // Matches a whole line break (where CRLF is considered a single + // line break). Used to count lines. + + var lineBreak = /\r\n|[\n\r\u2028\u2029]/g; + + // Test whether a given character code starts an identifier. + + function isIdentifierStart(code) { + if (code < 65) return code === 36; + if (code < 91) return true; + if (code < 97) return code === 95; + if (code < 123)return true; + return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)); + } + + // Test whether a given character is part of an identifier. + + function isIdentifierChar(code) { + if (code < 48) return code === 36; + if (code < 58) return true; + if (code < 65) return false; + if (code < 91) return true; + if (code < 97) return code === 95; + if (code < 123)return true; + return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)); + } + + // ## Tokenizer + + // These are used when `options.locations` is on, in order to track + // the current line number and start of line offset, in order to set + // `tokStartLoc` and `tokEndLoc`. + + function nextLineStart() { + lineBreak.lastIndex = tokLineStart; + var match = lineBreak.exec(input); + return match ? match.index + match[0].length : input.length + 1; + } + + function curLineLoc() { + while (tokLineStartNext <= tokPos) { + ++tokCurLine; + tokLineStart = tokLineStartNext; + tokLineStartNext = nextLineStart(); + } + return {line: tokCurLine, column: tokPos - tokLineStart}; + } + + // Reset the token state. Used at the start of a parse. + + function initTokenState() { + tokCurLine = 1; + tokPos = tokLineStart = 0; + tokLineStartNext = nextLineStart(); + tokRegexpAllowed = true; + tokComments = null; + skipSpace(); + } + + // Called at the end of every token. Sets `tokEnd`, `tokVal`, + // `tokCommentsAfter`, and `tokRegexpAllowed`, and skips the space + // after the token, so that the next one's `tokStart` will point at + // the right position. + + function finishToken(type, val) { + tokEnd = tokPos; + if (options.locations) tokEndLoc = curLineLoc(); + tokType = type; + skipSpace(); + tokVal = val; + tokCommentsAfter = tokComments; + tokRegexpAllowed = type.beforeExpr; + } + + function skipBlockComment() { + var end = input.indexOf("*/", tokPos += 2); + if (end === -1) raise(tokPos - 2, "Unterminated comment"); + if (options.trackComments) + (tokComments || (tokComments = [])).push(input.slice(tokPos, end)); + tokPos = end + 2; + } + + function skipLineComment() { + var start = tokPos; + var ch = input.charCodeAt(tokPos+=2); + while (tokPos < inputLen && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8329) { + ++tokPos; + ch = input.charCodeAt(tokPos); + } + (tokComments || (tokComments = [])).push(input.slice(start, tokPos)); + } + + // Called at the start of the parse and after every token. Skips + // whitespace and comments, and, if `options.trackComments` is on, + // will store all skipped comments in `tokComments`. + + function skipSpace() { + tokComments = null; + while (tokPos < inputLen) { + var ch = input.charCodeAt(tokPos); + if (ch === 47) { // '/' + var next = input.charCodeAt(tokPos+1); + if (next === 42) { // '*' + skipBlockComment(); + } else if (next === 47) { // '/' + skipLineComment(); + } else break; + } else if (ch < 14 && ch > 8) { + ++tokPos; + } else if (ch === 32 || ch === 160) { // ' ', '\xa0' + ++tokPos; + } else if (ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) { + ++tokPos; + } else { + break; + } + } + } + + // ### Token reading + + // This is the function that is called to fetch the next token. It + // is somewhat obscure, because it works in character codes rather + // than characters, and because operator parsing has been inlined + // into it. + // + // All in the name of speed. + // + // The `forceRegexp` parameter is used in the one case where the + // `tokRegexpAllowed` trick does not work. See `parseStatement`. + + function readToken(forceRegexp) { + tokStart = tokPos; + if (options.locations) tokStartLoc = curLineLoc(); + tokCommentsBefore = tokComments; + if (forceRegexp) return readRegexp(); + if (tokPos >= inputLen) return finishToken(_eof); + + var code = input.charCodeAt(tokPos); + // Identifier or keyword. '\uXXXX' sequences are allowed in + // identifiers, so '\' also dispatches to that. + if (isIdentifierStart(code) || code === 92 /* '\' */) return readWord(); + var next = input.charCodeAt(tokPos+1); + + switch(code) { + // The interpretation of a dot depends on whether it is followed + // by a digit. + case 46: // '.' + if (next >= 48 && next <= 57) return readNumber(String.fromCharCode(code)); + ++tokPos; + return finishToken(_dot); + + // Punctuation tokens. + case 40: ++tokPos; return finishToken(_parenL); + case 41: ++tokPos; return finishToken(_parenR); + case 59: ++tokPos; return finishToken(_semi); + case 44: ++tokPos; return finishToken(_comma); + case 91: ++tokPos; return finishToken(_bracketL); + case 93: ++tokPos; return finishToken(_bracketR); + case 123: ++tokPos; return finishToken(_braceL); + case 125: ++tokPos; return finishToken(_braceR); + case 58: ++tokPos; return finishToken(_colon); + case 63: ++tokPos; return finishToken(_question); + + // '0x' is a hexadecimal number. + case 48: // '0' + if (next === 120 || next === 88) return readHexNumber(); + // Anything else beginning with a digit is an integer, octal + // number, or float. + case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9 + return readNumber(String.fromCharCode(code)); + + // Quotes produce strings. + case 34: case 39: // '"', "'" + return readString(code); + + // Operators are parsed inline in tiny state machines. '=' (61) is + // often referred to. `finishOp` simply skips the amount of + // characters it is given as second argument, and returns a token + // of the type given by its first argument. + + case 47: // '/' + if (tokRegexpAllowed) {++tokPos; return readRegexp();} + if (next === 61) return finishOp(_assign, 2); + return finishOp(_slash, 1); + + case 37: case 42: // '%*' + if (next === 61) return finishOp(_assign, 2); + return finishOp(_bin10, 1); + + case 124: case 38: // '|&' + if (next === code) return finishOp(code === 124 ? _bin1 : _bin2, 2); + if (next === 61) return finishOp(_assign, 2); + return finishOp(code === 124 ? _bin3 : _bin5, 1); + + case 94: // '^' + if (next === 61) return finishOp(_assign, 2); + return finishOp(_bin4, 1); + + case 43: case 45: // '+-' + if (next === code) return finishOp(_incdec, 2); + if (next === 61) return finishOp(_assign, 2); + return finishOp(_plusmin, 1); + + case 60: case 62: // '<>' + var size = 1; + if (next === code) { + size = code === 62 && input.charCodeAt(tokPos+2) === 62 ? 3 : 2; + if (input.charCodeAt(tokPos + size) === 61) return finishOp(_assign, size + 1); + return finishOp(_bin8, size); + } + if (next === 61) + size = input.charCodeAt(tokPos+2) === 61 ? 3 : 2; + return finishOp(_bin7, size); + + case 61: case 33: // '=!' + if (next === 61) return finishOp(_bin6, input.charCodeAt(tokPos+2) === 61 ? 3 : 2); + return finishOp(code === 61 ? _eq : _prefix, 1); + + case 126: // '~' + return finishOp(_prefix, 1); + } + + // If we are here, we either found a non-ASCII identifier + // character, or something that's entirely disallowed. + var ch = String.fromCharCode(code); + if (ch === "\\" || nonASCIIidentifierStart.test(ch)) return readWord(); + raise(tokPos, "Unexpected character '" + ch + "'"); + } + + function finishOp(type, size) { + var str = input.slice(tokPos, tokPos + size); + tokPos += size; + finishToken(type, str); + } + + // Parse a regular expression. Some context-awareness is necessary, + // since a '/' inside a '[]' set does not end the expression. + + function readRegexp() { + var content = "", escaped, inClass, start = tokPos; + for (;;) { + if (tokPos >= inputLen) raise(start, "Unterminated regular expression"); + var ch = input.charAt(tokPos); + if (newline.test(ch)) raise(start, "Unterminated regular expression"); + if (!escaped) { + if (ch === "[") inClass = true; + else if (ch === "]" && inClass) inClass = false; + else if (ch === "/" && !inClass) break; + escaped = ch === "\\"; + } else escaped = false; + ++tokPos; + } + var content = input.slice(start, tokPos); + ++tokPos; + // Need to use `readWord1` because '\uXXXX' sequences are allowed + // here (don't ask). + var mods = readWord1(); + if (mods && !/^[gmsiy]*$/.test(mods)) raise(start, "Invalid regexp flag"); + return finishToken(_regexp, new RegExp(content, mods)); + } + + // Read an integer in the given radix. Return null if zero digits + // were read, the integer value otherwise. When `len` is given, this + // will return `null` unless the integer has exactly `len` digits. + + function readInt(radix, len) { + var start = tokPos, total = 0; + for (;;) { + var code = input.charCodeAt(tokPos), val; + if (code >= 97) val = code - 97 + 10; // a + else if (code >= 65) val = code - 65 + 10; // A + else if (code >= 48 && code <= 57) val = code - 48; // 0-9 + else val = Infinity; + if (val >= radix) break; + ++tokPos; + total = total * radix + val; + } + if (tokPos === start || len != null && tokPos - start !== len) return null; + + return total; + } + + function readHexNumber() { + tokPos += 2; // 0x + var val = readInt(16); + if (val == null) raise(tokStart + 2, "Expected hexadecimal number"); + if (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, "Identifier directly after number"); + return finishToken(_num, val); + } + + // Read an integer, octal integer, or floating-point number. + + function readNumber(ch) { + var start = tokPos, isFloat = ch === "."; + if (!isFloat && readInt(10) == null) raise(start, "Invalid number"); + if (isFloat || input.charAt(tokPos) === ".") { + var next = input.charAt(++tokPos); + if (next === "-" || next === "+") ++tokPos; + if (readInt(10) === null && ch === ".") raise(start, "Invalid number"); + isFloat = true; + } + if (/e/i.test(input.charAt(tokPos))) { + var next = input.charAt(++tokPos); + if (next === "-" || next === "+") ++tokPos; + if (readInt(10) === null) raise(start, "Invalid number") + isFloat = true; + } + if (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, "Identifier directly after number"); + + var str = input.slice(start, tokPos), val; + if (isFloat) val = parseFloat(str); + else if (ch !== "0" || str.length === 1) val = parseInt(str, 10); + else if (/[89]/.test(str) || strict) raise(start, "Invalid number"); + else val = parseInt(str, 8); + return finishToken(_num, val); + } + + // Read a string value, interpreting backslash-escapes. + + function readString(quote) { + tokPos++; + var str = []; + for (;;) { + if (tokPos >= inputLen) raise(tokStart, "Unterminated string constant"); + var ch = input.charCodeAt(tokPos); + if (ch === quote) { + ++tokPos; + return finishToken(_string, String.fromCharCode.apply(null, str)); + } + if (ch === 92) { // '\' + ch = input.charCodeAt(++tokPos); + var octal = /^[0-7]+/.exec(input.slice(tokPos, tokPos + 3)); + if (octal) octal = octal[0]; + while (octal && parseInt(octal, 8) > 255) octal = octal.slice(0, octal.length - 1); + if (octal === "0") octal = null; + ++tokPos; + if (octal) { + if (strict) raise(tokPos - 2, "Octal literal in strict mode"); + str.push(parseInt(octal, 8)); + tokPos += octal.length - 1; + } else { + switch (ch) { + case 110: str.push(10); break; // 'n' -> '\n' + case 114: str.push(13); break; // 'r' -> '\r' + case 120: str.push(readHexChar(2)); break; // 'x' + case 117: str.push(readHexChar(4)); break; // 'u' + case 85: str.push(readHexChar(8)); break; // 'U' + case 116: str.push(9); break; // 't' -> '\t' + case 98: str.push(8); break; // 'b' -> '\b' + case 118: str.push(11); break; // 'v' -> '\u000b' + case 102: str.push(12); break; // 'f' -> '\f' + case 48: str.push(0); break; // 0 -> '\0' + case 13: if (input.charCodeAt(tokPos) === 10) ++tokPos; // '\r\n' + case 10: break; // ' \n' + default: str.push(ch); break; + } + } + } else { + if (ch === 13 || ch === 10 || ch === 8232 || ch === 8329) raise(tokStart, "Unterminated string constant"); + if (ch !== 92) str.push(ch); // '\' + ++tokPos; + } + } + } + + // Used to read character escape sequences ('\x', '\u', '\U'). + + function readHexChar(len) { + var n = readInt(16, len); + if (n === null) raise(tokStart, "Bad character escape sequence"); + return n; + } + + // Used to signal to callers of `readWord1` whether the word + // contained any escape sequences. This is needed because words with + // escape sequences must not be interpreted as keywords. + + var containsEsc; + + // Read an identifier, and return it as a string. Sets `containsEsc` + // to whether the word contained a '\u' escape. + // + // Only builds up the word character-by-character when it actually + // containeds an escape, as a micro-optimization. + + function readWord1() { + containsEsc = false; + var word, first = true, start = tokPos; + for (;;) { + var ch = input.charCodeAt(tokPos); + if (isIdentifierChar(ch)) { + if (containsEsc) word += input.charAt(tokPos); + ++tokPos; + } else if (ch === 92) { // "\" + if (!containsEsc) word = input.slice(start, tokPos); + containsEsc = true; + if (input.charCodeAt(++tokPos) != 117) // "u" + raise(tokPos, "Expecting Unicode escape sequence \\uXXXX"); + ++tokPos; + var esc = readHexChar(4); + var escStr = String.fromCharCode(esc); + if (!escStr) raise(tokPos - 1, "Invalid Unicode escape"); + if (!(first ? isIdentifierStart(esc) : isIdentifierChar(esc))) + raise(tokPos - 4, "Invalid Unicode escape"); + word += escStr; + } else { + break; + } + first = false; + } + return containsEsc ? word : input.slice(start, tokPos); + } + + // Read an identifier or keyword token. Will check for reserved + // words when necessary. + + function readWord() { + var word = readWord1(); + var type = _name; + if (!containsEsc) { + if (isKeyword(word)) type = keywordTypes[word]; + else if (options.forbidReserved && + (options.ecmaVersion === 3 ? isReservedWord3 : isReservedWord5)(word) || + strict && isStrictReservedWord(word)) + raise(tokStart, "The keyword '" + word + "' is reserved"); + } + return finishToken(type, word); + } + + // ## Parser + + // A recursive descent parser operates by defining functions for all + // syntactic elements, and recursively calling those, each function + // advancing the input stream and returning an AST node. Precedence + // of constructs (for example, the fact that `!x[1]` means `!(x[1])` + // instead of `(!x)[1]` is handled by the fact that the parser + // function that parses unary prefix operators is called first, and + // in turn calls the function that parses `[]` subscripts — that + // way, it'll receive the node for `x[1]` already parsed, and wraps + // *that* in the unary operator node. + // + // Acorn uses an [operator precedence parser][opp] to handle binary + // operator precedence, because it is much more compact than using + // the technique outlined above, which uses different, nesting + // functions to specify precedence, for all of the ten binary + // precedence levels that JavaScript defines. + // + // [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser + + // ### Parser utilities + + // Continue to the next token. + + function next() { + lastStart = tokStart; + lastEnd = tokEnd; + lastEndLoc = tokEndLoc; + readToken(); + } + + // Enter strict mode. Re-reads the next token to please pedantic + // tests ("use strict"; 010; -- should fail). + + function setStrict(strct) { + strict = strct; + tokPos = lastEnd; + skipSpace(); + readToken(); + } + + // Start an AST node, attaching a start offset and optionally a + // `commentsBefore` property to it. + + function startNode() { + var node = {type: null, start: tokStart, end: null}; + if (options.trackComments && tokCommentsBefore) { + node.commentsBefore = tokCommentsBefore; + tokCommentsBefore = null; + } + if (options.locations) + node.loc = {start: tokStartLoc, end: null, source: sourceFile}; + if (options.ranges) + node.range = [tokStart, 0]; + return node; + } + + // Start a node whose start offset/comments information should be + // based on the start of another node. For example, a binary + // operator node is only started after its left-hand side has + // already been parsed. + + function startNodeFrom(other) { + var node = {type: null, start: other.start}; + if (other.commentsBefore) { + node.commentsBefore = other.commentsBefore; + other.commentsBefore = null; + } + if (options.locations) + node.loc = {start: other.loc.start, end: null, source: other.loc.source}; + if (options.ranges) + node.range = [other.range[0], 0]; + + return node; + } + + // Finish an AST node, adding `type`, `end`, and `commentsAfter` + // properties. + // + // We keep track of the last node that we finished, in order + // 'bubble' `commentsAfter` properties up to the biggest node. I.e. + // in '`1 + 1 // foo', the comment should be attached to the binary + // operator node, not the second literal node. + + var lastFinishedNode; + + function finishNode(node, type) { + node.type = type; + node.end = lastEnd; + if (options.trackComments) { + if (tokCommentsAfter) { + node.commentsAfter = tokCommentsAfter; + tokCommentsAfter = null; + } else if (lastFinishedNode && lastFinishedNode.end === lastEnd) { + node.commentsAfter = lastFinishedNode.commentsAfter; + lastFinishedNode.commentsAfter = null; + } + lastFinishedNode = node; + } + if (options.locations) + node.loc.end = lastEndLoc; + if (options.ranges) + node.range[1] = lastEnd; + return node; + } + + // Test whether a statement node is the string literal `"use strict"`. + + function isUseStrict(stmt) { + return options.ecmaVersion >= 5 && stmt.type === "ExpressionStatement" && + stmt.expression.type === "Literal" && stmt.expression.value === "use strict"; + } + + // Predicate that tests whether the next token is of the given + // type, and if yes, consumes it as a side effect. + + function eat(type) { + if (tokType === type) { + next(); + return true; + } + } + + // Test whether a semicolon can be inserted at the current position. + + function canInsertSemicolon() { + return !options.strictSemicolons && + (tokType === _eof || tokType === _braceR || newline.test(input.slice(lastEnd, tokStart))); + } + + // Consume a semicolon, or, failing that, see if we are allowed to + // pretend that there is a semicolon at this position. + + function semicolon() { + if (!eat(_semi) && !canInsertSemicolon()) unexpected(); + } + + // Expect a token of a given type. If found, consume it, otherwise, + // raise an unexpected token error. + + function expect(type) { + if (tokType === type) next(); + else unexpected(); + } + + // Raise an unexpected token error. + + function unexpected() { + raise(tokStart, "Unexpected token"); + } + + // Verify that a node is an lval — something that can be assigned + // to. + + function checkLVal(expr) { + if (expr.type !== "Identifier" && expr.type !== "MemberExpression") + raise(expr.start, "Assigning to rvalue"); + if (strict && expr.type === "Identifier" && isStrictBadIdWord(expr.name)) + raise(expr.start, "Assigning to " + expr.name + " in strict mode"); + } + + // ### Statement parsing + + // Parse a program. Initializes the parser, reads any number of + // statements, and wraps them in a Program node. Optionally takes a + // `program` argument. If present, the statements will be appended + // to its body instead of creating a new node. + + function parseTopLevel(program) { + initTokenState(); + lastStart = lastEnd = tokPos; + if (options.locations) lastEndLoc = curLineLoc(); + inFunction = strict = null; + labels = []; + readToken(); + + var node = program || startNode(), first = true; + if (!program) node.body = []; + while (tokType !== _eof) { + var stmt = parseStatement(); + node.body.push(stmt); + if (first && isUseStrict(stmt)) setStrict(true); + first = false; + } + return finishNode(node, "Program"); + }; + + var loopLabel = {kind: "loop"}, switchLabel = {kind: "switch"}; + + // Parse a single statement. + // + // If expecting a statement and finding a slash operator, parse a + // regular expression literal. This is to handle cases like + // `if (foo) /blah/.exec(foo);`, where looking at the previous token + // does not help. + + function parseStatement() { + if (tokType === _slash) + readToken(true); + + var starttype = tokType, node = startNode(); + + // Most types of statements are recognized by the keyword they + // start with. Many are trivial to parse, some require a bit of + // complexity. + + switch (starttype) { + case _break: case _continue: + next(); + var isBreak = starttype === _break; + if (eat(_semi) || canInsertSemicolon()) node.label = null; + else if (tokType !== _name) unexpected(); + else { + node.label = parseIdent(); + semicolon(); + } + + // Verify that there is an actual destination to break or + // continue to. + for (var i = 0; i < labels.length; ++i) { + var lab = labels[i]; + if (node.label == null || lab.name === node.label.name) { + if (lab.kind != null && (isBreak || lab.kind === "loop")) break; + if (node.label && isBreak) break; + } + } + if (i === labels.length) raise(node.start, "Unsyntactic " + starttype.keyword); + return finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement"); + + case _debugger: + next(); + return finishNode(node, "DebuggerStatement"); + + case _do: + next(); + labels.push(loopLabel); + node.body = parseStatement(); + labels.pop(); + expect(_while); + node.test = parseParenExpression(); + semicolon(); + return finishNode(node, "DoWhileStatement"); + + // Disambiguating between a `for` and a `for`/`in` loop is + // non-trivial. Basically, we have to parse the init `var` + // statement or expression, disallowing the `in` operator (see + // the second parameter to `parseExpression`), and then check + // whether the next token is `in`. When there is no init part + // (semicolon immediately after the opening parenthesis), it is + // a regular `for` loop. + + case _for: + next(); + labels.push(loopLabel); + expect(_parenL); + if (tokType === _semi) return parseFor(node, null); + if (tokType === _var) { + var init = startNode(); + next(); + parseVar(init, true); + if (init.declarations.length === 1 && eat(_in)) + return parseForIn(node, init); + return parseFor(node, init); + } + var init = parseExpression(false, true); + if (eat(_in)) {checkLVal(init); return parseForIn(node, init);} + return parseFor(node, init); + + case _function: + next(); + return parseFunction(node, true); + + case _if: + next(); + node.test = parseParenExpression(); + node.consequent = parseStatement(); + node.alternate = eat(_else) ? parseStatement() : null; + return finishNode(node, "IfStatement"); + + case _return: + if (!inFunction) raise(tokStart, "'return' outside of function"); + next(); + + // In `return` (and `break`/`continue`), the keywords with + // optional arguments, we eagerly look for a semicolon or the + // possibility to insert one. + + if (eat(_semi) || canInsertSemicolon()) node.argument = null; + else { node.argument = parseExpression(); semicolon(); } + return finishNode(node, "ReturnStatement"); + + case _switch: + next(); + node.discriminant = parseParenExpression(); + node.cases = []; + expect(_braceL); + labels.push(switchLabel); + + // Statements under must be grouped (by label) in SwitchCase + // nodes. `cur` is used to keep the node that we are currently + // adding statements to. + + for (var cur, sawDefault; tokType != _braceR;) { + if (tokType === _case || tokType === _default) { + var isCase = tokType === _case; + if (cur) finishNode(cur, "SwitchCase"); + node.cases.push(cur = startNode()); + cur.consequent = []; + next(); + if (isCase) cur.test = parseExpression(); + else { + if (sawDefault) raise(lastStart, "Multiple default clauses"); sawDefault = true; + cur.test = null; + } + expect(_colon); + } else { + if (!cur) unexpected(); + cur.consequent.push(parseStatement()); + } + } + if (cur) finishNode(cur, "SwitchCase"); + next(); // Closing brace + labels.pop(); + return finishNode(node, "SwitchStatement"); + + case _throw: + next(); + if (newline.test(input.slice(lastEnd, tokStart))) + raise(lastEnd, "Illegal newline after throw"); + node.argument = parseExpression(); + return finishNode(node, "ThrowStatement"); + + case _try: + next(); + node.block = parseBlock(); + node.handlers = []; + while (tokType === _catch) { + var clause = startNode(); + next(); + expect(_parenL); + clause.param = parseIdent(); + if (strict && isStrictBadIdWord(clause.param.name)) + raise(clause.param.start, "Binding " + clause.param.name + " in strict mode"); + expect(_parenR); + clause.guard = null; + clause.body = parseBlock(); + node.handlers.push(finishNode(clause, "CatchClause")); + } + node.finalizer = eat(_finally) ? parseBlock() : null; + if (!node.handlers.length && !node.finalizer) + raise(node.start, "Missing catch or finally clause"); + return finishNode(node, "TryStatement"); + + case _var: + next(); + node = parseVar(node); + semicolon(); + return node; + + case _while: + next(); + node.test = parseParenExpression(); + labels.push(loopLabel); + node.body = parseStatement(); + labels.pop(); + return finishNode(node, "WhileStatement"); + + case _with: + if (strict) raise(tokStart, "'with' in strict mode"); + next(); + node.object = parseParenExpression(); + node.body = parseStatement(); + return finishNode(node, "WithStatement"); + + case _braceL: + return parseBlock(); + + case _semi: + next(); + return finishNode(node, "EmptyStatement"); + + // If the statement does not start with a statement keyword or a + // brace, it's an ExpressionStatement or LabeledStatement. We + // simply start parsing an expression, and afterwards, if the + // next token is a colon and the expression was a simple + // Identifier node, we switch to interpreting it as a label. + + default: + var maybeName = tokVal, expr = parseExpression(); + if (starttype === _name && expr.type === "Identifier" && eat(_colon)) { + for (var i = 0; i < labels.length; ++i) + if (labels[i].name === maybeName) raise(expr.start, "Label '" + maybeName + "' is already declared"); + var kind = tokType.isLoop ? "loop" : tokType === _switch ? "switch" : null; + labels.push({name: maybeName, kind: kind}); + node.body = parseStatement(); + node.label = expr; + return finishNode(node, "LabeledStatement"); + } else { + node.expression = expr; + semicolon(); + return finishNode(node, "ExpressionStatement"); + } + } + } + + // Used for constructs like `switch` and `if` that insist on + // parentheses around their expression. + + function parseParenExpression() { + expect(_parenL); + var val = parseExpression(); + expect(_parenR); + return val; + } + + // Parse a semicolon-enclosed block of statements, handling `"use + // strict"` declarations when `allowStrict` is true (used for + // function bodies). + + function parseBlock(allowStrict) { + var node = startNode(), first = true, strict = false, oldStrict; + node.body = []; + expect(_braceL); + while (!eat(_braceR)) { + var stmt = parseStatement(); + node.body.push(stmt); + if (first && isUseStrict(stmt)) { + oldStrict = strict; + setStrict(strict = true); + } + first = false + } + if (strict && !oldStrict) setStrict(false); + return finishNode(node, "BlockStatement"); + } + + // Parse a regular `for` loop. The disambiguation code in + // `parseStatement` will already have parsed the init statement or + // expression. + + function parseFor(node, init) { + node.init = init; + expect(_semi); + node.test = tokType === _semi ? null : parseExpression(); + expect(_semi); + node.update = tokType === _parenR ? null : parseExpression(); + expect(_parenR); + node.body = parseStatement(); + labels.pop(); + return finishNode(node, "ForStatement"); + } + + // Parse a `for`/`in` loop. + + function parseForIn(node, init) { + node.left = init; + node.right = parseExpression(); + expect(_parenR); + node.body = parseStatement(); + labels.pop(); + return finishNode(node, "ForInStatement"); + } + + // Parse a list of variable declarations. + + function parseVar(node, noIn) { + node.declarations = []; + node.kind = "var"; + for (;;) { + var decl = startNode(); + decl.id = parseIdent(); + if (strict && isStrictBadIdWord(decl.id.name)) + raise(decl.id.start, "Binding " + decl.id.name + " in strict mode"); + decl.init = eat(_eq) ? parseExpression(true, noIn) : null; + node.declarations.push(finishNode(decl, "VariableDeclarator")); + if (!eat(_comma)) break; + } + return finishNode(node, "VariableDeclaration"); + } + + // ### Expression parsing + + // These nest, from the most general expression type at the top to + // 'atomic', nondivisible expression types at the bottom. Most of + // the functions will simply let the function(s) below them parse, + // and, *if* the syntactic construct they handle is present, wrap + // the AST node that the inner parser gave them in another node. + + // Parse a full expression. The arguments are used to forbid comma + // sequences (in argument lists, array literals, or object literals) + // or the `in` operator (in for loops initalization expressions). + + function parseExpression(noComma, noIn) { + var expr = parseMaybeAssign(noIn); + if (!noComma && tokType === _comma) { + var node = startNodeFrom(expr); + node.expressions = [expr]; + while (eat(_comma)) node.expressions.push(parseMaybeAssign(noIn)); + return finishNode(node, "SequenceExpression"); + } + return expr; + } + + // Parse an assignment expression. This includes applications of + // operators like `+=`. + + function parseMaybeAssign(noIn) { + var left = parseMaybeConditional(noIn); + if (tokType.isAssign) { + var node = startNodeFrom(left); + node.operator = tokVal; + node.left = left; + next(); + node.right = parseMaybeAssign(noIn); + checkLVal(left); + return finishNode(node, "AssignmentExpression"); + } + return left; + } + + // Parse a ternary conditional (`?:`) operator. + + function parseMaybeConditional(noIn) { + var expr = parseExprOps(noIn); + if (eat(_question)) { + var node = startNodeFrom(expr); + node.test = expr; + node.consequent = parseExpression(true); + expect(_colon); + node.alternate = parseExpression(true, noIn); + return finishNode(node, "ConditionalExpression"); + } + return expr; + } + + // Start the precedence parser. + + function parseExprOps(noIn) { + return parseExprOp(parseMaybeUnary(noIn), -1, noIn); + } + + // Parse binary operators with the operator precedence parsing + // algorithm. `left` is the left-hand side of the operator. + // `minPrec` provides context that allows the function to stop and + // defer further parser to one of its callers when it encounters an + // operator that has a lower precedence than the set it is parsing. + + function parseExprOp(left, minPrec, noIn) { + var prec = tokType.binop; + if (prec != null && (!noIn || tokType !== _in)) { + if (prec > minPrec) { + var node = startNodeFrom(left); + node.left = left; + node.operator = tokVal; + next(); + node.right = parseExprOp(parseMaybeUnary(noIn), prec, noIn); + var node = finishNode(node, /&&|\|\|/.test(node.operator) ? "LogicalExpression" : "BinaryExpression"); + return parseExprOp(node, minPrec, noIn); + } + } + return left; + } + + // Parse unary operators, both prefix and postfix. + + function parseMaybeUnary(noIn) { + if (tokType.prefix) { + var node = startNode(), update = tokType.isUpdate; + node.operator = tokVal; + node.prefix = true; + next(); + node.argument = parseMaybeUnary(noIn); + if (update) checkLVal(node.argument); + else if (strict && node.operator === "delete" && + node.argument.type === "Identifier") + raise(node.start, "Deleting local variable in strict mode"); + return finishNode(node, update ? "UpdateExpression" : "UnaryExpression"); + } + var expr = parseExprSubscripts(); + while (tokType.postfix && !canInsertSemicolon()) { + var node = startNodeFrom(expr); + node.operator = tokVal; + node.prefix = false; + node.argument = expr; + checkLVal(expr); + next(); + expr = finishNode(node, "UpdateExpression"); + } + return expr; + } + + // Parse call, dot, and `[]`-subscript expressions. + + function parseExprSubscripts() { + return parseSubscripts(parseExprAtom()); + } + + function parseSubscripts(base, noCalls) { + if (eat(_dot)) { + var node = startNodeFrom(base); + node.object = base; + node.property = parseIdent(true); + node.computed = false; + return parseSubscripts(finishNode(node, "MemberExpression"), noCalls); + } else if (eat(_bracketL)) { + var node = startNodeFrom(base); + node.object = base; + node.property = parseExpression(); + node.computed = true; + expect(_bracketR); + return parseSubscripts(finishNode(node, "MemberExpression"), noCalls); + } else if (!noCalls && eat(_parenL)) { + var node = startNodeFrom(base); + node.callee = base; + node.arguments = parseExprList(_parenR, false); + return parseSubscripts(finishNode(node, "CallExpression"), noCalls); + } else return base; + } + + // Parse an atomic expression — either a single token that is an + // expression, an expression started by a keyword like `function` or + // `new`, or an expression wrapped in punctuation like `()`, `[]`, + // or `{}`. + + function parseExprAtom() { + switch (tokType) { + case _this: + var node = startNode(); + next(); + return finishNode(node, "ThisExpression"); + case _name: + return parseIdent(); + case _num: case _string: case _regexp: + var node = startNode(); + node.value = tokVal; + node.raw = input.slice(tokStart, tokEnd); + next(); + return finishNode(node, "Literal"); + + case _null: case _true: case _false: + var node = startNode(); + node.value = tokType.atomValue; + next(); + return finishNode(node, "Literal"); + + case _parenL: + next(); + var val = parseExpression(); + expect(_parenR); + return val; + + case _bracketL: + var node = startNode(); + next(); + node.elements = parseExprList(_bracketR, true, true); + return finishNode(node, "ArrayExpression"); + + case _braceL: + return parseObj(); + + case _function: + var node = startNode(); + next(); + return parseFunction(node, false); + + case _new: + return parseNew(); + + default: + unexpected(); + } + } + + // New's precedence is slightly tricky. It must allow its argument + // to be a `[]` or dot subscript expression, but not a call — at + // least, not without wrapping it in parentheses. Thus, it uses the + + function parseNew() { + var node = startNode(); + next(); + node.callee = parseSubscripts(parseExprAtom(false), true); + if (eat(_parenL)) node.arguments = parseExprList(_parenR, false); + else node.arguments = []; + return finishNode(node, "NewExpression"); + } + + // Parse an object literal. + + function parseObj() { + var node = startNode(), first = true, sawGetSet = false; + node.properties = []; + next(); + while (!eat(_braceR)) { + if (!first) { + expect(_comma); + if (options.allowTrailingCommas && eat(_braceR)) break; + } else first = false; + + var prop = {key: parsePropertyName()}, isGetSet = false, kind; + if (eat(_colon)) { + prop.value = parseExpression(true); + kind = prop.kind = "init"; + } else if (options.ecmaVersion >= 5 && prop.key.type === "Identifier" && + (prop.key.name === "get" || prop.key.name === "set")) { + isGetSet = sawGetSet = true; + kind = prop.kind = prop.key.name; + prop.key = parsePropertyName(); + if (!tokType === _parenL) unexpected(); + prop.value = parseFunction(startNode(), false); + } else unexpected(); + + // getters and setters are not allowed to clash — either with + // each other or with an init property — and in strict mode, + // init properties are also not allowed to be repeated. + + if (prop.key.type === "Identifier" && (strict || sawGetSet)) { + for (var i = 0; i < node.properties.length; ++i) { + var other = node.properties[i]; + if (other.key.name === prop.key.name) { + var conflict = kind == other.kind || isGetSet && other.kind === "init" || + kind === "init" && (other.kind === "get" || other.kind === "set"); + if (conflict && !strict && kind === "init" && other.kind === "init") conflict = false; + if (conflict) raise(prop.key.start, "Redefinition of property"); + } + } + } + node.properties.push(prop); + } + return finishNode(node, "ObjectExpression"); + } + + function parsePropertyName() { + if (tokType === _num || tokType === _string) return parseExprAtom(); + return parseIdent(true); + } + + // Parse a function declaration or literal (depending on the + // `isStatement` parameter). + + function parseFunction(node, isStatement) { + if (tokType === _name) node.id = parseIdent(); + else if (isStatement) unexpected(); + else node.id = null; + node.params = []; + var first = true; + expect(_parenL); + while (!eat(_parenR)) { + if (!first) expect(_comma); else first = false; + node.params.push(parseIdent()); + } + + // Start a new scope with regard to labels and the `inFunction` + // flag (restore them to their old value afterwards). + var oldInFunc = inFunction, oldLabels = labels; + inFunction = true; labels = []; + node.body = parseBlock(true); + inFunction = oldInFunc; labels = oldLabels; + + // If this is a strict mode function, verify that argument names + // are not repeated, and it does not try to bind the words `eval` + // or `arguments`. + if (strict || node.body.body.length && isUseStrict(node.body.body[0])) { + for (var i = node.id ? -1 : 0; i < node.params.length; ++i) { + var id = i < 0 ? node.id : node.params[i]; + if (isStrictReservedWord(id.name) || isStrictBadIdWord(id.name)) + raise(id.start, "Defining '" + id.name + "' in strict mode"); + if (i >= 0) for (var j = 0; j < i; ++j) if (id.name === node.params[j].name) + raise(id.start, "Argument name clash in strict mode"); + } + } + + return finishNode(node, isStatement ? "FunctionDeclaration" : "FunctionExpression"); + } + + // Parses a comma-separated list of expressions, and returns them as + // an array. `close` is the token type that ends the list, and + // `allowEmpty` can be turned on to allow subsequent commas with + // nothing in between them to be parsed as `null` (which is needed + // for array literals). + + function parseExprList(close, allowTrailingComma, allowEmpty) { + var elts = [], first = true; + while (!eat(close)) { + if (!first) { + expect(_comma); + if (allowTrailingComma && options.allowTrailingCommas && eat(close)) break; + } else first = false; + + if (allowEmpty && tokType === _comma) elts.push(null); + else elts.push(parseExpression(true)); + } + return elts; + } + + // Parse the next token as an identifier. If `liberal` is true (used + // when parsing properties), it will also convert keywords into + // identifiers. + + function parseIdent(liberal) { + var node = startNode(); + node.name = tokType === _name ? tokVal : (liberal && !options.forbidReserved && tokType.keyword) || unexpected(); + next(); + return finishNode(node, "Identifier"); + } + +})(typeof exports === "undefined" ? (window.acorn = {}) : exports); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/lint/lint.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/lint/lint.js new file mode 100644 index 0000000..4fc577f --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/lint/lint.js @@ -0,0 +1,112 @@ +/* + Simple linter, based on the Acorn [1] parser module + + All of the existing linters either cramp my style or have huge + dependencies (Closure). So here's a very simple, non-invasive one + that only spots + + - missing semicolons and trailing commas + - variables or properties that are reserved words + - assigning to a variable you didn't declare + + [1]: https://github.com/marijnh/acorn/ +*/ + +var fs = require("fs"), acorn = require("./acorn.js"), walk = require("./walk.js"); + +var scopePasser = walk.make({ + ScopeBody: function(node, prev, c) { c(node, node.scope); } +}); + +function checkFile(fileName) { + var file = fs.readFileSync(fileName, "utf8"), notAllowed; + if (notAllowed = file.match(/[\x00-\x08\x0b\x0c\x0e-\x19\uFEFF\t]|[ \t]\n/)) { + var msg; + if (notAllowed[0] == "\t") msg = "Found tab character"; + else if (notAllowed[0].indexOf("\n") > -1) msg = "Trailing whitespace"; + else msg = "Undesirable character " + notAllowed[0].charCodeAt(0); + var info = acorn.getLineInfo(file, notAllowed.index); + fail(msg + " at line " + info.line + ", column " + info.column, {source: fileName}); + } + + try { + var parsed = acorn.parse(file, { + locations: true, + ecmaVersion: 3, + strictSemicolons: true, + allowTrailingCommas: false, + forbidReserved: true, + sourceFile: fileName + }); + } catch (e) { + fail(e.message, {source: fileName}); + return; + } + + var scopes = []; + + walk.simple(parsed, { + ScopeBody: function(node, scope) { + node.scope = scope; + scopes.push(scope); + } + }, walk.scopeVisitor, {vars: Object.create(null)}); + + var ignoredGlobals = Object.create(null); + + function inScope(name, scope) { + for (var cur = scope; cur; cur = cur.prev) + if (name in cur.vars) return true; + } + function checkLHS(node, scope) { + if (node.type == "Identifier" && !(node.name in ignoredGlobals) && + !inScope(node.name, scope)) { + ignoredGlobals[node.name] = true; + fail("Assignment to global variable", node.loc); + } + } + + walk.simple(parsed, { + UpdateExpression: function(node, scope) {checkLHS(node.argument, scope);}, + AssignmentExpression: function(node, scope) {checkLHS(node.left, scope);}, + Identifier: function(node, scope) { + // Mark used identifiers + for (var cur = scope; cur; cur = cur.prev) + if (node.name in cur.vars) { + cur.vars[node.name].used = true; + return; + } + }, + FunctionExpression: function(node) { + if (node.id) fail("Named function expression", node.loc); + } + }, scopePasser); + + for (var i = 0; i < scopes.length; ++i) { + var scope = scopes[i]; + for (var name in scope.vars) { + var info = scope.vars[name]; + if (!info.used && info.type != "catch clause" && info.type != "function name" && name.charAt(0) != "_") + fail("Unused " + info.type + " " + name, info.node.loc); + } + } +} + +var failed = false; +function fail(msg, pos) { + if (pos.start) msg += " (" + pos.start.line + ":" + pos.start.column + ")"; + console.log(pos.source + ": " + msg); + failed = true; +} + +function checkDir(dir) { + fs.readdirSync(dir).forEach(function(file) { + var fname = dir + "/" + file; + if (/\.js$/.test(file)) checkFile(fname); + else if (file != "dep" && fs.lstatSync(fname).isDirectory()) checkDir(fname); + }); +} + +exports.checkDir = checkDir; +exports.checkFile = checkFile; +exports.success = function() { return !failed; }; diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/lint/parse-js.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/lint/parse-js.js new file mode 100644 index 0000000..c165a27 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/lint/parse-js.js @@ -0,0 +1,1372 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + + This version is suitable for Node.js. With minimal changes (the + exports stuff) it should work on any JS platform. + + This file contains the tokenizer/parser. It is a port to JavaScript + of parse-js [1], a JavaScript parser library written in Common Lisp + by Marijn Haverbeke. Thank you Marijn! + + [1] http://marijn.haverbeke.nl/parse-js/ + + Exported functions: + + - tokenizer(code) -- returns a function. Call the returned + function to fetch the next token. + + - parse(code) -- returns an AST of the given JavaScript code. + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2010 (c) Mihai Bazon + Based on parse-js (http://marijn.haverbeke.nl/parse-js/). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above + copyright notice, this list of conditions and the following + disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials + provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + ***********************************************************************/ + +/* -----[ Tokenizer (constants) ]----- */ + +var KEYWORDS = array_to_hash([ + "break", + "case", + "catch", + "const", + "continue", + "debugger", + "default", + "delete", + "do", + "else", + "finally", + "for", + "function", + "if", + "in", + "instanceof", + "new", + "return", + "switch", + "throw", + "try", + "typeof", + "var", + "void", + "while", + "with" +]); + +var RESERVED_WORDS = array_to_hash([ + "abstract", + "boolean", + "byte", + "char", + "class", + "double", + "enum", + "export", + "extends", + "final", + "float", + "goto", + "implements", + "import", + "int", + "interface", + "long", + "native", + "package", + "private", + "protected", + "public", + "short", + "static", + "super", + "synchronized", + "throws", + "transient", + "volatile" +]); + +var KEYWORDS_BEFORE_EXPRESSION = array_to_hash([ + "return", + "new", + "delete", + "throw", + "else", + "case" +]); + +var KEYWORDS_ATOM = array_to_hash([ + "false", + "null", + "true", + "undefined" +]); + +var OPERATOR_CHARS = array_to_hash(characters("+-*&%=<>!?|~^")); + +var RE_HEX_NUMBER = /^0x[0-9a-f]+$/i; +var RE_OCT_NUMBER = /^0[0-7]+$/; +var RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i; + +var OPERATORS = array_to_hash([ + "in", + "instanceof", + "typeof", + "new", + "void", + "delete", + "++", + "--", + "+", + "-", + "!", + "~", + "&", + "|", + "^", + "*", + "/", + "%", + ">>", + "<<", + ">>>", + "<", + ">", + "<=", + ">=", + "==", + "===", + "!=", + "!==", + "?", + "=", + "+=", + "-=", + "/=", + "*=", + "%=", + ">>=", + "<<=", + ">>>=", + "|=", + "^=", + "&=", + "&&", + "||" +]); + +var WHITESPACE_CHARS = array_to_hash(characters(" \u00a0\n\r\t\f\u000b\u200b\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000")); + +var PUNC_BEFORE_EXPRESSION = array_to_hash(characters("[{(,.;:")); + +var PUNC_CHARS = array_to_hash(characters("[]{}(),;:")); + +var REGEXP_MODIFIERS = array_to_hash(characters("gmsiy")); + +/* -----[ Tokenizer ]----- */ + +var UNICODE = { // Unicode 6.1 + letter: new RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"), + combining_mark: new RegExp("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E4-\\u08FE\\u0900-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C01-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C82\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D02\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1DC0-\\u1DE6\\u1DFC-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA674-\\uA67D\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]"), + connector_punctuation: new RegExp("[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]"), + digit: new RegExp("[\\u0030-\\u0039\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]") +}; + +function is_letter(ch) { + return UNICODE.letter.test(ch); +}; + +function is_digit(ch) { + ch = ch.charCodeAt(0); + return ch >= 48 && ch <= 57; +}; + +function is_unicode_digit(ch) { + return UNICODE.digit.test(ch); +} + +function is_alphanumeric_char(ch) { + return is_digit(ch) || is_letter(ch); +}; + +function is_unicode_combining_mark(ch) { + return UNICODE.combining_mark.test(ch); +}; + +function is_unicode_connector_punctuation(ch) { + return UNICODE.connector_punctuation.test(ch); +}; + +function is_identifier_start(ch) { + return ch == "$" || ch == "_" || is_letter(ch); +}; + +function is_identifier_char(ch) { + return is_identifier_start(ch) + || is_unicode_combining_mark(ch) + || is_unicode_digit(ch) + || is_unicode_connector_punctuation(ch) + || ch == "\u200c" // zero-width non-joiner + || ch == "\u200d" // zero-width joiner (in my ECMA-262 PDF, this is also 200c) + ; +}; + +function parse_js_number(num) { + if (RE_HEX_NUMBER.test(num)) { + return parseInt(num.substr(2), 16); + } else if (RE_OCT_NUMBER.test(num)) { + return parseInt(num.substr(1), 8); + } else if (RE_DEC_NUMBER.test(num)) { + return parseFloat(num); + } +}; + +function JS_Parse_Error(message, line, col, pos) { + this.message = message; + this.line = line + 1; + this.col = col + 1; + this.pos = pos + 1; + this.stack = new Error().stack; +}; + +JS_Parse_Error.prototype.toString = function() { + return this.message + " (line: " + this.line + ", col: " + this.col + ", pos: " + this.pos + ")" + "\n\n" + this.stack; +}; + +function js_error(message, line, col, pos) { + throw new JS_Parse_Error(message, line, col, pos); +}; + +function is_token(token, type, val) { + return token.type == type && (val == null || token.value == val); +}; + +var EX_EOF = {}; + +function tokenizer($TEXT) { + + var S = { + text : $TEXT.replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/^\uFEFF/, ''), + pos : 0, + tokpos : 0, + line : 0, + tokline : 0, + col : 0, + tokcol : 0, + newline_before : false, + regex_allowed : false, + comments_before : [] + }; + + function peek() { return S.text.charAt(S.pos); }; + + function next(signal_eof, in_string) { + var ch = S.text.charAt(S.pos++); + if (signal_eof && !ch) + throw EX_EOF; + if (ch == "\n") { + S.newline_before = S.newline_before || !in_string; + ++S.line; + S.col = 0; + } else { + ++S.col; + } + return ch; + }; + + function eof() { + return !S.peek(); + }; + + function find(what, signal_eof) { + var pos = S.text.indexOf(what, S.pos); + if (signal_eof && pos == -1) throw EX_EOF; + return pos; + }; + + function start_token() { + S.tokline = S.line; + S.tokcol = S.col; + S.tokpos = S.pos; + }; + + function token(type, value, is_comment) { + S.regex_allowed = ((type == "operator" && !HOP(UNARY_POSTFIX, value)) || + (type == "keyword" && HOP(KEYWORDS_BEFORE_EXPRESSION, value)) || + (type == "punc" && HOP(PUNC_BEFORE_EXPRESSION, value))); + var ret = { + type : type, + value : value, + line : S.tokline, + col : S.tokcol, + pos : S.tokpos, + endpos : S.pos, + nlb : S.newline_before + }; + if (!is_comment) { + ret.comments_before = S.comments_before; + S.comments_before = []; + // make note of any newlines in the comments that came before + for (var i = 0, len = ret.comments_before.length; i < len; i++) { + ret.nlb = ret.nlb || ret.comments_before[i].nlb; + } + } + S.newline_before = false; + return ret; + }; + + function skip_whitespace() { + while (HOP(WHITESPACE_CHARS, peek())) + next(); + }; + + function read_while(pred) { + var ret = "", ch = peek(), i = 0; + while (ch && pred(ch, i++)) { + ret += next(); + ch = peek(); + } + return ret; + }; + + function parse_error(err) { + js_error(err, S.tokline, S.tokcol, S.tokpos); + }; + + function read_num(prefix) { + var has_e = false, after_e = false, has_x = false, has_dot = prefix == "."; + var num = read_while(function(ch, i){ + if (ch == "x" || ch == "X") { + if (has_x) return false; + return has_x = true; + } + if (!has_x && (ch == "E" || ch == "e")) { + if (has_e) return false; + return has_e = after_e = true; + } + if (ch == "-") { + if (after_e || (i == 0 && !prefix)) return true; + return false; + } + if (ch == "+") return after_e; + after_e = false; + if (ch == ".") { + if (!has_dot && !has_x && !has_e) + return has_dot = true; + return false; + } + return is_alphanumeric_char(ch); + }); + if (prefix) + num = prefix + num; + var valid = parse_js_number(num); + if (!isNaN(valid)) { + return token("num", valid); + } else { + parse_error("Invalid syntax: " + num); + } + }; + + function read_escaped_char(in_string) { + var ch = next(true, in_string); + switch (ch) { + case "n" : return "\n"; + case "r" : return "\r"; + case "t" : return "\t"; + case "b" : return "\b"; + case "v" : return "\u000b"; + case "f" : return "\f"; + case "0" : return "\0"; + case "x" : return String.fromCharCode(hex_bytes(2)); + case "u" : return String.fromCharCode(hex_bytes(4)); + case "\n": return ""; + default : return ch; + } + }; + + function hex_bytes(n) { + var num = 0; + for (; n > 0; --n) { + var digit = parseInt(next(true), 16); + if (isNaN(digit)) + parse_error("Invalid hex-character pattern in string"); + num = (num << 4) | digit; + } + return num; + }; + + function read_string() { + return with_eof_error("Unterminated string constant", function(){ + var quote = next(), ret = ""; + for (;;) { + var ch = next(true); + if (ch == "\\") { + // read OctalEscapeSequence (XXX: deprecated if "strict mode") + // https://github.com/mishoo/UglifyJS/issues/178 + var octal_len = 0, first = null; + ch = read_while(function(ch){ + if (ch >= "0" && ch <= "7") { + if (!first) { + first = ch; + return ++octal_len; + } + else if (first <= "3" && octal_len <= 2) return ++octal_len; + else if (first >= "4" && octal_len <= 1) return ++octal_len; + } + return false; + }); + if (octal_len > 0) ch = String.fromCharCode(parseInt(ch, 8)); + else ch = read_escaped_char(true); + } + else if (ch == quote) break; + ret += ch; + } + return token("string", ret); + }); + }; + + function read_line_comment() { + next(); + var i = find("\n"), ret; + if (i == -1) { + ret = S.text.substr(S.pos); + S.pos = S.text.length; + } else { + ret = S.text.substring(S.pos, i); + S.pos = i; + } + return token("comment1", ret, true); + }; + + function read_multiline_comment() { + next(); + return with_eof_error("Unterminated multiline comment", function(){ + var i = find("*/", true), + text = S.text.substring(S.pos, i); + S.pos = i + 2; + S.line += text.split("\n").length - 1; + S.newline_before = S.newline_before || text.indexOf("\n") >= 0; + + // https://github.com/mishoo/UglifyJS/issues/#issue/100 + if (/^@cc_on/i.test(text)) { + warn("WARNING: at line " + S.line); + warn("*** Found \"conditional comment\": " + text); + warn("*** UglifyJS DISCARDS ALL COMMENTS. This means your code might no longer work properly in Internet Explorer."); + } + + return token("comment2", text, true); + }); + }; + + function read_name() { + var backslash = false, name = "", ch, escaped = false, hex; + while ((ch = peek()) != null) { + if (!backslash) { + if (ch == "\\") escaped = backslash = true, next(); + else if (is_identifier_char(ch)) name += next(); + else break; + } + else { + if (ch != "u") parse_error("Expecting UnicodeEscapeSequence -- uXXXX"); + ch = read_escaped_char(); + if (!is_identifier_char(ch)) parse_error("Unicode char: " + ch.charCodeAt(0) + " is not valid in identifier"); + name += ch; + backslash = false; + } + } + if (HOP(KEYWORDS, name) && escaped) { + hex = name.charCodeAt(0).toString(16).toUpperCase(); + name = "\\u" + "0000".substr(hex.length) + hex + name.slice(1); + } + return name; + }; + + function read_regexp(regexp) { + return with_eof_error("Unterminated regular expression", function(){ + var prev_backslash = false, ch, in_class = false; + while ((ch = next(true))) if (prev_backslash) { + regexp += "\\" + ch; + prev_backslash = false; + } else if (ch == "[") { + in_class = true; + regexp += ch; + } else if (ch == "]" && in_class) { + in_class = false; + regexp += ch; + } else if (ch == "/" && !in_class) { + break; + } else if (ch == "\\") { + prev_backslash = true; + } else { + regexp += ch; + } + var mods = read_name(); + return token("regexp", [ regexp, mods ]); + }); + }; + + function read_operator(prefix) { + function grow(op) { + if (!peek()) return op; + var bigger = op + peek(); + if (HOP(OPERATORS, bigger)) { + next(); + return grow(bigger); + } else { + return op; + } + }; + return token("operator", grow(prefix || next())); + }; + + function handle_slash() { + next(); + var regex_allowed = S.regex_allowed; + switch (peek()) { + case "/": + S.comments_before.push(read_line_comment()); + S.regex_allowed = regex_allowed; + return next_token(); + case "*": + S.comments_before.push(read_multiline_comment()); + S.regex_allowed = regex_allowed; + return next_token(); + } + return S.regex_allowed ? read_regexp("") : read_operator("/"); + }; + + function handle_dot() { + next(); + return is_digit(peek()) + ? read_num(".") + : token("punc", "."); + }; + + function read_word() { + var word = read_name(); + return !HOP(KEYWORDS, word) + ? token("name", word) + : HOP(OPERATORS, word) + ? token("operator", word) + : HOP(KEYWORDS_ATOM, word) + ? token("atom", word) + : token("keyword", word); + }; + + function with_eof_error(eof_error, cont) { + try { + return cont(); + } catch(ex) { + if (ex === EX_EOF) parse_error(eof_error); + else throw ex; + } + }; + + function next_token(force_regexp) { + if (force_regexp != null) + return read_regexp(force_regexp); + skip_whitespace(); + start_token(); + var ch = peek(); + if (!ch) return token("eof"); + if (is_digit(ch)) return read_num(); + if (ch == '"' || ch == "'") return read_string(); + if (HOP(PUNC_CHARS, ch)) return token("punc", next()); + if (ch == ".") return handle_dot(); + if (ch == "/") return handle_slash(); + if (HOP(OPERATOR_CHARS, ch)) return read_operator(); + if (ch == "\\" || is_identifier_start(ch)) return read_word(); + parse_error("Unexpected character '" + ch + "'"); + }; + + next_token.context = function(nc) { + if (nc) S = nc; + return S; + }; + + return next_token; + +}; + +/* -----[ Parser (constants) ]----- */ + +var UNARY_PREFIX = array_to_hash([ + "typeof", + "void", + "delete", + "--", + "++", + "!", + "~", + "-", + "+" +]); + +var UNARY_POSTFIX = array_to_hash([ "--", "++" ]); + +var ASSIGNMENT = (function(a, ret, i){ + while (i < a.length) { + ret[a[i]] = a[i].substr(0, a[i].length - 1); + i++; + } + return ret; +})( + ["+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&="], + { "=": true }, + 0 +); + +var PRECEDENCE = (function(a, ret){ + for (var i = 0, n = 1; i < a.length; ++i, ++n) { + var b = a[i]; + for (var j = 0; j < b.length; ++j) { + ret[b[j]] = n; + } + } + return ret; +})( + [ + ["||"], + ["&&"], + ["|"], + ["^"], + ["&"], + ["==", "===", "!=", "!=="], + ["<", ">", "<=", ">=", "in", "instanceof"], + [">>", "<<", ">>>"], + ["+", "-"], + ["*", "/", "%"] + ], + {} +); + +var STATEMENTS_WITH_LABELS = array_to_hash([ "for", "do", "while", "switch" ]); + +var ATOMIC_START_TOKEN = array_to_hash([ "atom", "num", "string", "regexp", "name" ]); + +/* -----[ Parser ]----- */ + +function NodeWithToken(str, start, end) { + this.name = str; + this.start = start; + this.end = end; +}; + +NodeWithToken.prototype.toString = function() { return this.name; }; + +function parse($TEXT, exigent_mode, embed_tokens) { + + var S = { + input : typeof $TEXT == "string" ? tokenizer($TEXT, true) : $TEXT, + token : null, + prev : null, + peeked : null, + in_function : 0, + in_directives : true, + in_loop : 0, + labels : [] + }; + + S.token = next(); + + function is(type, value) { + return is_token(S.token, type, value); + }; + + function peek() { return S.peeked || (S.peeked = S.input()); }; + + function next() { + S.prev = S.token; + if (S.peeked) { + S.token = S.peeked; + S.peeked = null; + } else { + S.token = S.input(); + } + S.in_directives = S.in_directives && ( + S.token.type == "string" || is("punc", ";") + ); + return S.token; + }; + + function prev() { + return S.prev; + }; + + function croak(msg, line, col, pos) { + var ctx = S.input.context(); + js_error(msg, + line != null ? line : ctx.tokline, + col != null ? col : ctx.tokcol, + pos != null ? pos : ctx.tokpos); + }; + + function token_error(token, msg) { + croak(msg, token.line, token.col); + }; + + function unexpected(token) { + if (token == null) + token = S.token; + token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")"); + }; + + function expect_token(type, val) { + if (is(type, val)) { + return next(); + } + token_error(S.token, "Unexpected token " + S.token.type + ", expected " + type); + }; + + function expect(punc) { return expect_token("punc", punc); }; + + function can_insert_semicolon() { + return !exigent_mode && ( + S.token.nlb || is("eof") || is("punc", "}") + ); + }; + + function semicolon() { + if (is("punc", ";")) next(); + else if (!can_insert_semicolon()) unexpected(); + }; + + function as() { + return slice(arguments); + }; + + function parenthesised() { + expect("("); + var ex = expression(); + expect(")"); + return ex; + }; + + function add_tokens(str, start, end) { + return str instanceof NodeWithToken ? str : new NodeWithToken(str, start, end); + }; + + function maybe_embed_tokens(parser) { + if (embed_tokens) return function() { + var start = S.token; + var ast = parser.apply(this, arguments); + ast[0] = add_tokens(ast[0], start, prev()); + return ast; + }; + else return parser; + }; + + var statement = maybe_embed_tokens(function() { + if (is("operator", "/") || is("operator", "/=")) { + S.peeked = null; + S.token = S.input(S.token.value.substr(1)); // force regexp + } + switch (S.token.type) { + case "string": + var dir = S.in_directives, stat = simple_statement(); + if (dir && stat[1][0] == "string" && !is("punc", ",")) + return as("directive", stat[1][1]); + return stat; + case "num": + case "regexp": + case "operator": + case "atom": + return simple_statement(); + + case "name": + return is_token(peek(), "punc", ":") + ? labeled_statement(prog1(S.token.value, next, next)) + : simple_statement(); + + case "punc": + switch (S.token.value) { + case "{": + return as("block", block_()); + case "[": + case "(": + return simple_statement(); + case ";": + next(); + return as("block"); + default: + unexpected(); + } + + case "keyword": + switch (prog1(S.token.value, next)) { + case "break": + return break_cont("break"); + + case "continue": + return break_cont("continue"); + + case "debugger": + semicolon(); + return as("debugger"); + + case "do": + return (function(body){ + expect_token("keyword", "while"); + return as("do", prog1(parenthesised, semicolon), body); + })(in_loop(statement)); + + case "for": + return for_(); + + case "function": + return function_(true); + + case "if": + return if_(); + + case "return": + if (S.in_function == 0) + croak("'return' outside of function"); + return as("return", + is("punc", ";") + ? (next(), null) + : can_insert_semicolon() + ? null + : prog1(expression, semicolon)); + + case "switch": + return as("switch", parenthesised(), switch_block_()); + + case "throw": + if (S.token.nlb) + croak("Illegal newline after 'throw'"); + return as("throw", prog1(expression, semicolon)); + + case "try": + return try_(); + + case "var": + return prog1(var_, semicolon); + + case "const": + return prog1(const_, semicolon); + + case "while": + return as("while", parenthesised(), in_loop(statement)); + + case "with": + return as("with", parenthesised(), statement()); + + default: + unexpected(); + } + } + }); + + function labeled_statement(label) { + S.labels.push(label); + var start = S.token, stat = statement(); + if (exigent_mode && !HOP(STATEMENTS_WITH_LABELS, stat[0])) + unexpected(start); + S.labels.pop(); + return as("label", label, stat); + }; + + function simple_statement() { + return as("stat", prog1(expression, semicolon)); + }; + + function break_cont(type) { + var name; + if (!can_insert_semicolon()) { + name = is("name") ? S.token.value : null; + } + if (name != null) { + next(); + if (!member(name, S.labels)) + croak("Label " + name + " without matching loop or statement"); + } + else if (S.in_loop == 0) + croak(type + " not inside a loop or switch"); + semicolon(); + return as(type, name); + }; + + function for_() { + expect("("); + var init = null; + if (!is("punc", ";")) { + init = is("keyword", "var") + ? (next(), var_(true)) + : expression(true, true); + if (is("operator", "in")) { + if (init[0] == "var" && init[1].length > 1) + croak("Only one variable declaration allowed in for..in loop"); + return for_in(init); + } + } + return regular_for(init); + }; + + function regular_for(init) { + expect(";"); + var test = is("punc", ";") ? null : expression(); + expect(";"); + var step = is("punc", ")") ? null : expression(); + expect(")"); + return as("for", init, test, step, in_loop(statement)); + }; + + function for_in(init) { + var lhs = init[0] == "var" ? as("name", init[1][0]) : init; + next(); + var obj = expression(); + expect(")"); + return as("for-in", init, lhs, obj, in_loop(statement)); + }; + + var function_ = function(in_statement) { + var name = is("name") ? prog1(S.token.value, next) : null; + if (in_statement && !name) + unexpected(); + expect("("); + return as(in_statement ? "defun" : "function", + name, + // arguments + (function(first, a){ + while (!is("punc", ")")) { + if (first) first = false; else expect(","); + if (!is("name")) unexpected(); + a.push(S.token.value); + next(); + } + next(); + return a; + })(true, []), + // body + (function(){ + ++S.in_function; + var loop = S.in_loop; + S.in_directives = true; + S.in_loop = 0; + var a = block_(); + --S.in_function; + S.in_loop = loop; + return a; + })()); + }; + + function if_() { + var cond = parenthesised(), body = statement(), belse; + if (is("keyword", "else")) { + next(); + belse = statement(); + } + return as("if", cond, body, belse); + }; + + function block_() { + expect("{"); + var a = []; + while (!is("punc", "}")) { + if (is("eof")) unexpected(); + a.push(statement()); + } + next(); + return a; + }; + + var switch_block_ = curry(in_loop, function(){ + expect("{"); + var a = [], cur = null; + while (!is("punc", "}")) { + if (is("eof")) unexpected(); + if (is("keyword", "case")) { + next(); + cur = []; + a.push([ expression(), cur ]); + expect(":"); + } + else if (is("keyword", "default")) { + next(); + expect(":"); + cur = []; + a.push([ null, cur ]); + } + else { + if (!cur) unexpected(); + cur.push(statement()); + } + } + next(); + return a; + }); + + function try_() { + var body = block_(), bcatch, bfinally; + if (is("keyword", "catch")) { + next(); + expect("("); + if (!is("name")) + croak("Name expected"); + var name = S.token.value; + next(); + expect(")"); + bcatch = [ name, block_() ]; + } + if (is("keyword", "finally")) { + next(); + bfinally = block_(); + } + if (!bcatch && !bfinally) + croak("Missing catch/finally blocks"); + return as("try", body, bcatch, bfinally); + }; + + function vardefs(no_in) { + var a = []; + for (;;) { + if (!is("name")) + unexpected(); + var name = S.token.value; + next(); + if (is("operator", "=")) { + next(); + a.push([ name, expression(false, no_in) ]); + } else { + a.push([ name ]); + } + if (!is("punc", ",")) + break; + next(); + } + return a; + }; + + function var_(no_in) { + return as("var", vardefs(no_in)); + }; + + function const_() { + return as("const", vardefs()); + }; + + function new_() { + var newexp = expr_atom(false), args; + if (is("punc", "(")) { + next(); + args = expr_list(")"); + } else { + args = []; + } + return subscripts(as("new", newexp, args), true); + }; + + var expr_atom = maybe_embed_tokens(function(allow_calls) { + if (is("operator", "new")) { + next(); + return new_(); + } + if (is("punc")) { + switch (S.token.value) { + case "(": + next(); + return subscripts(prog1(expression, curry(expect, ")")), allow_calls); + case "[": + next(); + return subscripts(array_(), allow_calls); + case "{": + next(); + return subscripts(object_(), allow_calls); + } + unexpected(); + } + if (is("keyword", "function")) { + next(); + return subscripts(function_(false), allow_calls); + } + if (HOP(ATOMIC_START_TOKEN, S.token.type)) { + var atom = S.token.type == "regexp" + ? as("regexp", S.token.value[0], S.token.value[1]) + : as(S.token.type, S.token.value); + return subscripts(prog1(atom, next), allow_calls); + } + unexpected(); + }); + + function expr_list(closing, allow_trailing_comma, allow_empty) { + var first = true, a = []; + while (!is("punc", closing)) { + if (first) first = false; else expect(","); + if (allow_trailing_comma && is("punc", closing)) break; + if (is("punc", ",") && allow_empty) { + a.push([ "atom", "undefined" ]); + } else { + a.push(expression(false)); + } + } + next(); + return a; + }; + + function array_() { + return as("array", expr_list("]", !exigent_mode, true)); + }; + + function object_() { + var first = true, a = []; + while (!is("punc", "}")) { + if (first) first = false; else expect(","); + if (!exigent_mode && is("punc", "}")) + // allow trailing comma + break; + var type = S.token.type; + var name = as_property_name(); + if (type == "name" && (name == "get" || name == "set") && !is("punc", ":")) { + a.push([ as_name(), function_(false), name ]); + } else { + expect(":"); + a.push([ name, expression(false) ]); + } + // FIXME [!!] Line not in original parse-js, + // added to be able to warn about unquoted + // keyword properties + a[a.length - 1].type = type; + } + next(); + return as("object", a); + }; + + function as_property_name() { + switch (S.token.type) { + case "num": + case "string": + return prog1(S.token.value, next); + } + return as_name(); + }; + + function as_name() { + switch (S.token.type) { + case "name": + case "operator": + case "keyword": + case "atom": + return prog1(S.token.value, next); + default: + unexpected(); + } + }; + + function subscripts(expr, allow_calls) { + if (is("punc", ".")) { + next(); + return subscripts(as("dot", expr, as_name()), allow_calls); + } + if (is("punc", "[")) { + next(); + return subscripts(as("sub", expr, prog1(expression, curry(expect, "]"))), allow_calls); + } + if (allow_calls && is("punc", "(")) { + next(); + return subscripts(as("call", expr, expr_list(")")), true); + } + return expr; + }; + + function maybe_unary(allow_calls) { + if (is("operator") && HOP(UNARY_PREFIX, S.token.value)) { + return make_unary("unary-prefix", + prog1(S.token.value, next), + maybe_unary(allow_calls)); + } + var val = expr_atom(allow_calls); + while (is("operator") && HOP(UNARY_POSTFIX, S.token.value) && !S.token.nlb) { + val = make_unary("unary-postfix", S.token.value, val); + next(); + } + return val; + }; + + function make_unary(tag, op, expr) { + if ((op == "++" || op == "--") && !is_assignable(expr)) + croak("Invalid use of " + op + " operator"); + return as(tag, op, expr); + }; + + function expr_op(left, min_prec, no_in) { + var op = is("operator") ? S.token.value : null; + if (op && op == "in" && no_in) op = null; + var prec = op != null ? PRECEDENCE[op] : null; + if (prec != null && prec > min_prec) { + next(); + var right = expr_op(maybe_unary(true), prec, no_in); + return expr_op(as("binary", op, left, right), min_prec, no_in); + } + return left; + }; + + function expr_ops(no_in) { + return expr_op(maybe_unary(true), 0, no_in); + }; + + function maybe_conditional(no_in) { + var expr = expr_ops(no_in); + if (is("operator", "?")) { + next(); + var yes = expression(false); + expect(":"); + return as("conditional", expr, yes, expression(false, no_in)); + } + return expr; + }; + + function is_assignable(expr) { + if (!exigent_mode) return true; + switch (expr[0]+"") { + case "dot": + case "sub": + case "new": + case "call": + return true; + case "name": + return expr[1] != "this"; + } + }; + + function maybe_assign(no_in) { + var left = maybe_conditional(no_in), val = S.token.value; + if (is("operator") && HOP(ASSIGNMENT, val)) { + if (is_assignable(left)) { + next(); + return as("assign", ASSIGNMENT[val], left, maybe_assign(no_in)); + } + croak("Invalid assignment"); + } + return left; + }; + + var expression = maybe_embed_tokens(function(commas, no_in) { + if (arguments.length == 0) + commas = true; + var expr = maybe_assign(no_in); + if (commas && is("punc", ",")) { + next(); + return as("seq", expr, expression(true, no_in)); + } + return expr; + }); + + function in_loop(cont) { + try { + ++S.in_loop; + return cont(); + } finally { + --S.in_loop; + } + }; + + return as("toplevel", (function(a){ + while (!is("eof")) + a.push(statement()); + return a; + })([])); + +}; + +/* -----[ Utilities ]----- */ + +function curry(f) { + var args = slice(arguments, 1); + return function() { return f.apply(this, args.concat(slice(arguments))); }; +}; + +function prog1(ret) { + if (ret instanceof Function) + ret = ret(); + for (var i = 1, n = arguments.length; --n > 0; ++i) + arguments[i](); + return ret; +}; + +function array_to_hash(a) { + var ret = {}; + for (var i = 0; i < a.length; ++i) + ret[a[i]] = true; + return ret; +}; + +function slice(a, start) { + return Array.prototype.slice.call(a, start || 0); +}; + +function characters(str) { + return str.split(""); +}; + +function member(name, array) { + for (var i = array.length; --i >= 0;) + if (array[i] == name) + return true; + return false; +}; + +function HOP(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +}; + +var warn = function() {}; + +/* -----[ Exports ]----- */ + +exports.tokenizer = tokenizer; +exports.parse = parse; +exports.slice = slice; +exports.curry = curry; +exports.member = member; +exports.array_to_hash = array_to_hash; +exports.PRECEDENCE = PRECEDENCE; +exports.KEYWORDS_ATOM = KEYWORDS_ATOM; +exports.RESERVED_WORDS = RESERVED_WORDS; +exports.KEYWORDS = KEYWORDS; +exports.ATOMIC_START_TOKEN = ATOMIC_START_TOKEN; +exports.OPERATORS = OPERATORS; +exports.is_alphanumeric_char = is_alphanumeric_char; +exports.is_identifier_start = is_identifier_start; +exports.is_identifier_char = is_identifier_char; +exports.set_logger = function(logger) { + warn = logger; +}; + +// Local variables: +// js-indent-level: 8 +// End: diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/lint/walk.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/lint/walk.js new file mode 100644 index 0000000..97321ac --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/lint/walk.js @@ -0,0 +1,216 @@ +// AST walker module for Mozilla Parser API compatible trees + +(function(exports) { + "use strict"; + + // A simple walk is one where you simply specify callbacks to be + // called on specific nodes. The last two arguments are optional. A + // simple use would be + // + // walk.simple(myTree, { + // Expression: function(node) { ... } + // }); + // + // to do something with all expressions. All Parser API node types + // can be used to identify node types, as well as Expression, + // Statement, and ScopeBody, which denote categories of nodes. + // + // The base argument can be used to pass a custom (recursive) + // walker, and state can be used to give this walked an initial + // state. + exports.simple = function(node, visitors, base, state) { + if (!base) base = exports; + function c(node, st, override) { + var type = override || node.type, found = visitors[type]; + if (found) found(node, st); + base[type](node, st, c); + } + c(node, state); + }; + + // A recursive walk is one where your functions override the default + // walkers. They can modify and replace the state parameter that's + // threaded through the walk, and can opt how and whether to walk + // their child nodes (by calling their third argument on these + // nodes). + exports.recursive = function(node, state, funcs, base) { + var visitor = exports.make(funcs, base); + function c(node, st, override) { + visitor[override || node.type](node, st, c); + } + c(node, state); + }; + + // Used to create a custom walker. Will fill in all missing node + // type properties with the defaults. + exports.make = function(funcs, base) { + if (!base) base = exports; + var visitor = {}; + for (var type in base) + visitor[type] = funcs.hasOwnProperty(type) ? funcs[type] : base[type]; + return visitor; + }; + + function skipThrough(node, st, c) { c(node, st); } + function ignore(node, st, c) {} + + // Node walkers. + + exports.Program = exports.BlockStatement = function(node, st, c) { + for (var i = 0; i < node.body.length; ++i) + c(node.body[i], st, "Statement"); + }; + exports.Statement = skipThrough; + exports.EmptyStatement = ignore; + exports.ExpressionStatement = function(node, st, c) { + c(node.expression, st, "Expression"); + }; + exports.IfStatement = function(node, st, c) { + c(node.test, st, "Expression"); + c(node.consequent, st, "Statement"); + if (node.alternate) c(node.alternate, st, "Statement"); + }; + exports.LabeledStatement = function(node, st, c) { + c(node.body, st, "Statement"); + }; + exports.BreakStatement = exports.ContinueStatement = ignore; + exports.WithStatement = function(node, st, c) { + c(node.object, st, "Expression"); + c(node.body, st, "Statement"); + }; + exports.SwitchStatement = function(node, st, c) { + c(node.discriminant, st, "Expression"); + for (var i = 0; i < node.cases.length; ++i) { + var cs = node.cases[i]; + if (cs.test) c(cs.test, st, "Expression"); + for (var j = 0; j < cs.consequent.length; ++j) + c(cs.consequent[j], st, "Statement"); + } + }; + exports.ReturnStatement = function(node, st, c) { + if (node.argument) c(node.argument, st, "Expression"); + }; + exports.ThrowStatement = function(node, st, c) { + c(node.argument, st, "Expression"); + }; + exports.TryStatement = function(node, st, c) { + c(node.block, st, "Statement"); + for (var i = 0; i < node.handlers.length; ++i) + c(node.handlers[i].body, st, "ScopeBody"); + if (node.finalizer) c(node.finalizer, st, "Statement"); + }; + exports.WhileStatement = function(node, st, c) { + c(node.test, st, "Expression"); + c(node.body, st, "Statement"); + }; + exports.DoWhileStatement = exports.WhileStatement; + exports.ForStatement = function(node, st, c) { + if (node.init) c(node.init, st, "ForInit"); + if (node.test) c(node.test, st, "Expression"); + if (node.update) c(node.update, st, "Expression"); + c(node.body, st, "Statement"); + }; + exports.ForInStatement = function(node, st, c) { + c(node.left, st, "ForInit"); + c(node.right, st, "Expression"); + c(node.body, st, "Statement"); + }; + exports.ForInit = function(node, st, c) { + if (node.type == "VariableDeclaration") c(node, st); + else c(node, st, "Expression"); + }; + exports.DebuggerStatement = ignore; + + exports.FunctionDeclaration = function(node, st, c) { + c(node, st, "Function"); + }; + exports.VariableDeclaration = function(node, st, c) { + for (var i = 0; i < node.declarations.length; ++i) { + var decl = node.declarations[i]; + if (decl.init) c(decl.init, st, "Expression"); + } + }; + + exports.Function = function(node, st, c) { + c(node.body, st, "ScopeBody"); + }; + exports.ScopeBody = function(node, st, c) { + c(node, st, "Statement"); + }; + + exports.Expression = skipThrough; + exports.ThisExpression = ignore; + exports.ArrayExpression = function(node, st, c) { + for (var i = 0; i < node.elements.length; ++i) { + var elt = node.elements[i]; + if (elt) c(elt, st, "Expression"); + } + }; + exports.ObjectExpression = function(node, st, c) { + for (var i = 0; i < node.properties.length; ++i) + c(node.properties[i].value, st, "Expression"); + }; + exports.FunctionExpression = exports.FunctionDeclaration; + exports.SequenceExpression = function(node, st, c) { + for (var i = 0; i < node.expressions.length; ++i) + c(node.expressions[i], st, "Expression"); + }; + exports.UnaryExpression = exports.UpdateExpression = function(node, st, c) { + c(node.argument, st, "Expression"); + }; + exports.BinaryExpression = exports.AssignmentExpression = exports.LogicalExpression = function(node, st, c) { + c(node.left, st, "Expression"); + c(node.right, st, "Expression"); + }; + exports.ConditionalExpression = function(node, st, c) { + c(node.test, st, "Expression"); + c(node.consequent, st, "Expression"); + c(node.alternate, st, "Expression"); + }; + exports.NewExpression = exports.CallExpression = function(node, st, c) { + c(node.callee, st, "Expression"); + if (node.arguments) for (var i = 0; i < node.arguments.length; ++i) + c(node.arguments[i], st, "Expression"); + }; + exports.MemberExpression = function(node, st, c) { + c(node.object, st, "Expression"); + if (node.computed) c(node.property, st, "Expression"); + }; + exports.Identifier = exports.Literal = ignore; + + // A custom walker that keeps track of the scope chain and the + // variables defined in it. + function makeScope(prev) { + return {vars: Object.create(null), prev: prev}; + } + exports.scopeVisitor = exports.make({ + Function: function(node, scope, c) { + var inner = makeScope(scope); + for (var i = 0; i < node.params.length; ++i) + inner.vars[node.params[i].name] = {type: "argument", node: node.params[i]}; + if (node.id) { + var decl = node.type == "FunctionDeclaration"; + (decl ? scope : inner).vars[node.id.name] = + {type: decl ? "function" : "function name", node: node.id}; + } + c(node.body, inner, "ScopeBody"); + }, + TryStatement: function(node, scope, c) { + c(node.block, scope, "Statement"); + for (var i = 0; i < node.handlers.length; ++i) { + var handler = node.handlers[i], inner = makeScope(scope); + inner.vars[handler.param.name] = {type: "catch clause", node: handler.param}; + c(handler.body, inner, "ScopeBody"); + } + if (node.finalizer) c(node.finalizer, scope, "Statement"); + }, + VariableDeclaration: function(node, scope, c) { + for (var i = 0; i < node.declarations.length; ++i) { + var decl = node.declarations[i]; + scope.vars[decl.id.name] = {type: "var", node: decl.id}; + if (decl.init) c(decl.init, scope, "Expression"); + } + } + }); + +})(typeof exports == "undefined" ? acorn.walk = {} : exports); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/mode_test.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/mode_test.css new file mode 100644 index 0000000..1ac6673 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/mode_test.css @@ -0,0 +1,10 @@ +.mt-output .mt-token { + border: 1px solid #ddd; + white-space: pre; + font-family: "Consolas", monospace; + text-align: center; +} + +.mt-output .mt-style { + font-size: x-small; +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/mode_test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/mode_test.js new file mode 100644 index 0000000..1439cab --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/mode_test.js @@ -0,0 +1,192 @@ +/** + * Helper to test CodeMirror highlighting modes. It pretty prints output of the + * highlighter and can check against expected styles. + * + * Mode tests are registered by calling test.mode(testName, mode, + * tokens), where mode is a mode object as returned by + * CodeMirror.getMode, and tokens is an array of lines that make up + * the test. + * + * These lines are strings, in which styled stretches of code are + * enclosed in brackets `[]`, and prefixed by their style. For + * example, `[keyword if]`. Brackets in the code itself must be + * duplicated to prevent them from being interpreted as token + * boundaries. For example `a[[i]]` for `a[i]`. If a token has + * multiple styles, the styles must be separated by ampersands, for + * example `[tag&error ]`. + * + * See the test.js files in the css, markdown, gfm, and stex mode + * directories for examples. + */ +(function() { + function findSingle(str, pos, ch) { + for (;;) { + var found = str.indexOf(ch, pos); + if (found == -1) return null; + if (str.charAt(found + 1) != ch) return found; + pos = found + 2; + } + } + + var styleName = /[\w&-_]+/g; + function parseTokens(strs) { + var tokens = [], plain = ""; + for (var i = 0; i < strs.length; ++i) { + if (i) plain += "\n"; + var str = strs[i], pos = 0; + while (pos < str.length) { + var style = null, text; + if (str.charAt(pos) == "[" && str.charAt(pos+1) != "[") { + styleName.lastIndex = pos + 1; + var m = styleName.exec(str); + style = m[0].replace(/&/g, " "); + var textStart = pos + style.length + 2; + var end = findSingle(str, textStart, "]"); + if (end == null) throw new Error("Unterminated token at " + pos + " in '" + str + "'" + style); + text = str.slice(textStart, end); + pos = end + 1; + } else { + var end = findSingle(str, pos, "["); + if (end == null) end = str.length; + text = str.slice(pos, end); + pos = end; + } + text = text.replace(/\[\[|\]\]/g, function(s) {return s.charAt(0);}); + tokens.push(style, text); + plain += text; + } + } + return {tokens: tokens, plain: plain}; + } + + test.mode = function(name, mode, tokens, modeName) { + var data = parseTokens(tokens); + return test((modeName || mode.name) + "_" + name, function() { + return compare(data.plain, data.tokens, mode); + }); + }; + + function compare(text, expected, mode) { + + var expectedOutput = []; + for (var i = 0; i < expected.length; i += 2) { + var sty = expected[i]; + if (sty && sty.indexOf(" ")) sty = sty.split(' ').sort().join(' '); + expectedOutput.push(sty, expected[i + 1]); + } + + var observedOutput = highlight(text, mode); + + var pass, passStyle = ""; + pass = highlightOutputsEqual(expectedOutput, observedOutput); + passStyle = pass ? 'mt-pass' : 'mt-fail'; + + var s = ''; + if (pass) { + s += '
              '; + s += '
              ' + text.replace('&', '&').replace('<', '<') + '
              '; + s += '
              '; + s += prettyPrintOutputTable(observedOutput); + s += '
              '; + s += '
              '; + return s; + } else { + s += '
              '; + s += '
              ' + text.replace('&', '&').replace('<', '<') + '
              '; + s += '
              '; + s += 'expected:'; + s += prettyPrintOutputTable(expectedOutput); + s += 'observed:'; + s += prettyPrintOutputTable(observedOutput); + s += '
              '; + s += '
              '; + throw s; + } + } + + /** + * Emulation of CodeMirror's internal highlight routine for testing. Multi-line + * input is supported. + * + * @param string to highlight + * + * @param mode the mode that will do the actual highlighting + * + * @return array of [style, token] pairs + */ + function highlight(string, mode) { + var state = mode.startState() + + var lines = string.replace(/\r\n/g,'\n').split('\n'); + var st = [], pos = 0; + for (var i = 0; i < lines.length; ++i) { + var line = lines[i], newLine = true; + var stream = new CodeMirror.StringStream(line); + if (line == "" && mode.blankLine) mode.blankLine(state); + /* Start copied code from CodeMirror.highlight */ + while (!stream.eol()) { + var style = mode.token(stream, state), substr = stream.current(); + if (style && style.indexOf(" ") > -1) style = style.split(' ').sort().join(' '); + + stream.start = stream.pos; + if (pos && st[pos-2] == style && !newLine) { + st[pos-1] += substr; + } else if (substr) { + st[pos++] = style; st[pos++] = substr; + } + // Give up when line is ridiculously long + if (stream.pos > 5000) { + st[pos++] = null; st[pos++] = this.text.slice(stream.pos); + break; + } + newLine = false; + } + } + + return st; + } + + /** + * Compare two arrays of output from highlight. + * + * @param o1 array of [style, token] pairs + * + * @param o2 array of [style, token] pairs + * + * @return boolean; true iff outputs equal + */ + function highlightOutputsEqual(o1, o2) { + if (o1.length != o2.length) return false; + for (var i = 0; i < o1.length; ++i) + if (o1[i] != o2[i]) return false; + return true; + } + + /** + * Print tokens and corresponding styles in a table. Spaces in the token are + * replaced with 'interpunct' dots (·). + * + * @param output array of [style, token] pairs + * + * @return html string + */ + function prettyPrintOutputTable(output) { + var s = ''; + s += ''; + for (var i = 0; i < output.length; i += 2) { + var style = output[i], val = output[i+1]; + s += + ''; + } + s += ''; + for (var i = 0; i < output.length; i += 2) { + s += ''; + } + s += '
              ' + + '' + + val.replace(/ /g,'\xb7').replace('&', '&').replace('<', '<') + + '' + + '
              ' + (output[i] || null) + '
              '; + return s; + } +})(); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/phantom_driver.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/phantom_driver.js new file mode 100644 index 0000000..dbad08d --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/phantom_driver.js @@ -0,0 +1,31 @@ +var page = require('webpage').create(); + +page.open("http://localhost:3000/test/index.html", function (status) { + if (status != "success") { + console.log("page couldn't be loaded successfully"); + phantom.exit(1); + } + waitFor(function () { + return page.evaluate(function () { + var output = document.getElementById('status'); + if (!output) { return false; } + return (/^(\d+ failures?|all passed)/i).test(output.innerText); + }); + }, function () { + var failed = page.evaluate(function () { return window.failed; }); + var output = page.evaluate(function () { + return document.getElementById('output').innerText + "\n" + + document.getElementById('status').innerText; + }); + console.log(output); + phantom.exit(failed > 0 ? 1 : 0); + }); +}); + +function waitFor (test, cb) { + if (test()) { + cb(); + } else { + setTimeout(function () { waitFor(test, cb); }, 250); + } +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/run.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/run.js new file mode 100644 index 0000000..52221be --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/run.js @@ -0,0 +1,34 @@ +#!/usr/bin/env node + +var lint = require("./lint/lint"); + +lint.checkDir("mode"); +lint.checkDir("lib"); +lint.checkDir("addon"); +lint.checkDir("keymap"); + +var ok = lint.success(); + +var files = new (require('node-static').Server)('.'); + +var server = require('http').createServer(function (req, res) { + req.addListener('end', function () { + files.serve(req, res); + }); +}).addListener('error', function (err) { + throw err; +}).listen(3000, function () { + var child_process = require('child_process'); + child_process.exec("which phantomjs", function (err) { + if (err) { + console.error("PhantomJS is not installed. Download from http://phantomjs.org"); + process.exit(1); + } + var cmd = 'phantomjs test/phantom_driver.js'; + child_process.exec(cmd, function (err, stdout) { + server.close(); + console.log(stdout); + process.exit(err || !ok ? 1 : 0); + }); + }); +}); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/test.js new file mode 100644 index 0000000..67b25d0 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/test.js @@ -0,0 +1,1511 @@ +var Pos = CodeMirror.Pos; + +function forEach(arr, f) { + for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]); +} + +function addDoc(cm, width, height) { + var content = [], line = ""; + for (var i = 0; i < width; ++i) line += "x"; + for (var i = 0; i < height; ++i) content.push(line); + cm.setValue(content.join("\n")); +} + +function byClassName(elt, cls) { + if (elt.getElementsByClassName) return elt.getElementsByClassName(cls); + var found = [], re = new RegExp("\\b" + cls + "\\b"); + function search(elt) { + if (elt.nodeType == 3) return; + if (re.test(elt.className)) found.push(elt); + for (var i = 0, e = elt.childNodes.length; i < e; ++i) + search(elt.childNodes[i]); + } + search(elt); + return found; +} + +var ie_lt8 = /MSIE [1-7]\b/.test(navigator.userAgent); +var mac = /Mac/.test(navigator.platform); +var phantom = /PhantomJS/.test(navigator.userAgent); +var opera = /Opera\/\./.test(navigator.userAgent); +var opera_version = opera && navigator.userAgent.match(/Version\/(\d+\.\d+)/); +if (opera_version) opera_version = Number(opera_version); +var opera_lt10 = opera && (!opera_version || opera_version < 10); + +namespace = "core_"; + +test("core_fromTextArea", function() { + var te = document.getElementById("code"); + te.value = "CONTENT"; + var cm = CodeMirror.fromTextArea(te); + is(!te.offsetHeight); + eq(cm.getValue(), "CONTENT"); + cm.setValue("foo\nbar"); + eq(cm.getValue(), "foo\nbar"); + cm.save(); + is(/^foo\r?\nbar$/.test(te.value)); + cm.setValue("xxx"); + cm.toTextArea(); + is(te.offsetHeight); + eq(te.value, "xxx"); +}); + +testCM("getRange", function(cm) { + eq(cm.getLine(0), "1234"); + eq(cm.getLine(1), "5678"); + eq(cm.getLine(2), null); + eq(cm.getLine(-1), null); + eq(cm.getRange(Pos(0, 0), Pos(0, 3)), "123"); + eq(cm.getRange(Pos(0, -1), Pos(0, 200)), "1234"); + eq(cm.getRange(Pos(0, 2), Pos(1, 2)), "34\n56"); + eq(cm.getRange(Pos(1, 2), Pos(100, 0)), "78"); +}, {value: "1234\n5678"}); + +testCM("replaceRange", function(cm) { + eq(cm.getValue(), ""); + cm.replaceRange("foo\n", Pos(0, 0)); + eq(cm.getValue(), "foo\n"); + cm.replaceRange("a\nb", Pos(0, 1)); + eq(cm.getValue(), "fa\nboo\n"); + eq(cm.lineCount(), 3); + cm.replaceRange("xyzzy", Pos(0, 0), Pos(1, 1)); + eq(cm.getValue(), "xyzzyoo\n"); + cm.replaceRange("abc", Pos(0, 0), Pos(10, 0)); + eq(cm.getValue(), "abc"); + eq(cm.lineCount(), 1); +}); + +testCM("selection", function(cm) { + cm.setSelection(Pos(0, 4), Pos(2, 2)); + is(cm.somethingSelected()); + eq(cm.getSelection(), "11\n222222\n33"); + eqPos(cm.getCursor(false), Pos(2, 2)); + eqPos(cm.getCursor(true), Pos(0, 4)); + cm.setSelection(Pos(1, 0)); + is(!cm.somethingSelected()); + eq(cm.getSelection(), ""); + eqPos(cm.getCursor(true), Pos(1, 0)); + cm.replaceSelection("abc"); + eq(cm.getSelection(), "abc"); + eq(cm.getValue(), "111111\nabc222222\n333333"); + cm.replaceSelection("def", "end"); + eq(cm.getSelection(), ""); + eqPos(cm.getCursor(true), Pos(1, 3)); + cm.setCursor(Pos(2, 1)); + eqPos(cm.getCursor(true), Pos(2, 1)); + cm.setCursor(1, 2); + eqPos(cm.getCursor(true), Pos(1, 2)); +}, {value: "111111\n222222\n333333"}); + +testCM("extendSelection", function(cm) { + cm.setExtending(true); + addDoc(cm, 10, 10); + cm.setSelection(Pos(3, 5)); + eqPos(cm.getCursor("head"), Pos(3, 5)); + eqPos(cm.getCursor("anchor"), Pos(3, 5)); + cm.setSelection(Pos(2, 5), Pos(5, 5)); + eqPos(cm.getCursor("head"), Pos(5, 5)); + eqPos(cm.getCursor("anchor"), Pos(2, 5)); + eqPos(cm.getCursor("start"), Pos(2, 5)); + eqPos(cm.getCursor("end"), Pos(5, 5)); + cm.setSelection(Pos(5, 5), Pos(2, 5)); + eqPos(cm.getCursor("head"), Pos(2, 5)); + eqPos(cm.getCursor("anchor"), Pos(5, 5)); + eqPos(cm.getCursor("start"), Pos(2, 5)); + eqPos(cm.getCursor("end"), Pos(5, 5)); + cm.extendSelection(Pos(3, 2)); + eqPos(cm.getCursor("head"), Pos(3, 2)); + eqPos(cm.getCursor("anchor"), Pos(5, 5)); + cm.extendSelection(Pos(6, 2)); + eqPos(cm.getCursor("head"), Pos(6, 2)); + eqPos(cm.getCursor("anchor"), Pos(5, 5)); + cm.extendSelection(Pos(6, 3), Pos(6, 4)); + eqPos(cm.getCursor("head"), Pos(6, 4)); + eqPos(cm.getCursor("anchor"), Pos(5, 5)); + cm.extendSelection(Pos(0, 3), Pos(0, 4)); + eqPos(cm.getCursor("head"), Pos(0, 3)); + eqPos(cm.getCursor("anchor"), Pos(5, 5)); + cm.extendSelection(Pos(4, 5), Pos(6, 5)); + eqPos(cm.getCursor("head"), Pos(6, 5)); + eqPos(cm.getCursor("anchor"), Pos(4, 5)); + cm.setExtending(false); + cm.extendSelection(Pos(0, 3), Pos(0, 4)); + eqPos(cm.getCursor("head"), Pos(0, 4)); + eqPos(cm.getCursor("anchor"), Pos(0, 3)); +}); + +testCM("lines", function(cm) { + eq(cm.getLine(0), "111111"); + eq(cm.getLine(1), "222222"); + eq(cm.getLine(-1), null); + cm.removeLine(1); + cm.setLine(1, "abc"); + eq(cm.getValue(), "111111\nabc"); +}, {value: "111111\n222222\n333333"}); + +testCM("indent", function(cm) { + cm.indentLine(1); + eq(cm.getLine(1), " blah();"); + cm.setOption("indentUnit", 8); + cm.indentLine(1); + eq(cm.getLine(1), "\tblah();"); + cm.setOption("indentUnit", 10); + cm.setOption("tabSize", 4); + cm.indentLine(1); + eq(cm.getLine(1), "\t\t blah();"); +}, {value: "if (x) {\nblah();\n}", indentUnit: 3, indentWithTabs: true, tabSize: 8}); + +testCM("indentByNumber", function(cm) { + cm.indentLine(0, 2); + eq(cm.getLine(0), " foo"); + cm.indentLine(0, -200); + eq(cm.getLine(0), "foo"); + cm.setSelection(Pos(0, 0), Pos(1, 2)); + cm.indentSelection(3); + eq(cm.getValue(), " foo\n bar\nbaz"); +}, {value: "foo\nbar\nbaz"}); + +test("core_defaults", function() { + var defsCopy = {}, defs = CodeMirror.defaults; + for (var opt in defs) defsCopy[opt] = defs[opt]; + defs.indentUnit = 5; + defs.value = "uu"; + defs.enterMode = "keep"; + defs.tabindex = 55; + var place = document.getElementById("testground"), cm = CodeMirror(place); + try { + eq(cm.getOption("indentUnit"), 5); + cm.setOption("indentUnit", 10); + eq(defs.indentUnit, 5); + eq(cm.getValue(), "uu"); + eq(cm.getOption("enterMode"), "keep"); + eq(cm.getInputField().tabIndex, 55); + } + finally { + for (var opt in defsCopy) defs[opt] = defsCopy[opt]; + place.removeChild(cm.getWrapperElement()); + } +}); + +testCM("lineInfo", function(cm) { + eq(cm.lineInfo(-1), null); + var mark = document.createElement("span"); + var lh = cm.setGutterMarker(1, "FOO", mark); + var info = cm.lineInfo(1); + eq(info.text, "222222"); + eq(info.gutterMarkers.FOO, mark); + eq(info.line, 1); + eq(cm.lineInfo(2).gutterMarkers, null); + cm.setGutterMarker(lh, "FOO", null); + eq(cm.lineInfo(1).gutterMarkers, null); + cm.setGutterMarker(1, "FOO", mark); + cm.setGutterMarker(0, "FOO", mark); + cm.clearGutter("FOO"); + eq(cm.lineInfo(0).gutterMarkers, null); + eq(cm.lineInfo(1).gutterMarkers, null); +}, {value: "111111\n222222\n333333"}); + +testCM("coords", function(cm) { + cm.setSize(null, 100); + addDoc(cm, 32, 200); + var top = cm.charCoords(Pos(0, 0)); + var bot = cm.charCoords(Pos(200, 30)); + is(top.left < bot.left); + is(top.top < bot.top); + is(top.top < top.bottom); + cm.scrollTo(null, 100); + var top2 = cm.charCoords(Pos(0, 0)); + is(top.top > top2.top); + eq(top.left, top2.left); +}); + +testCM("coordsChar", function(cm) { + addDoc(cm, 35, 70); + for (var i = 0; i < 2; ++i) { + var sys = i ? "local" : "page"; + for (var ch = 0; ch <= 35; ch += 5) { + for (var line = 0; line < 70; line += 5) { + cm.setCursor(line, ch); + var coords = cm.charCoords(Pos(line, ch), sys); + var pos = cm.coordsChar({left: coords.left + 1, top: coords.top + 1}, sys); + eqPos(pos, Pos(line, ch)); + } + } + } +}, {lineNumbers: true}); + +testCM("posFromIndex", function(cm) { + cm.setValue( + "This function should\n" + + "convert a zero based index\n" + + "to line and ch." + ); + + var examples = [ + { index: -1, line: 0, ch: 0 }, // <- Tests clipping + { index: 0, line: 0, ch: 0 }, + { index: 10, line: 0, ch: 10 }, + { index: 39, line: 1, ch: 18 }, + { index: 55, line: 2, ch: 7 }, + { index: 63, line: 2, ch: 15 }, + { index: 64, line: 2, ch: 15 } // <- Tests clipping + ]; + + for (var i = 0; i < examples.length; i++) { + var example = examples[i]; + var pos = cm.posFromIndex(example.index); + eq(pos.line, example.line); + eq(pos.ch, example.ch); + if (example.index >= 0 && example.index < 64) + eq(cm.indexFromPos(pos), example.index); + } +}); + +testCM("undo", function(cm) { + cm.setLine(0, "def"); + eq(cm.historySize().undo, 1); + cm.undo(); + eq(cm.getValue(), "abc"); + eq(cm.historySize().undo, 0); + eq(cm.historySize().redo, 1); + cm.redo(); + eq(cm.getValue(), "def"); + eq(cm.historySize().undo, 1); + eq(cm.historySize().redo, 0); + cm.setValue("1\n\n\n2"); + cm.clearHistory(); + eq(cm.historySize().undo, 0); + for (var i = 0; i < 20; ++i) { + cm.replaceRange("a", Pos(0, 0)); + cm.replaceRange("b", Pos(3, 0)); + } + eq(cm.historySize().undo, 40); + for (var i = 0; i < 40; ++i) + cm.undo(); + eq(cm.historySize().redo, 40); + eq(cm.getValue(), "1\n\n\n2"); +}, {value: "abc"}); + +testCM("undoDepth", function(cm) { + cm.replaceRange("d", Pos(0)); + cm.replaceRange("e", Pos(0)); + cm.replaceRange("f", Pos(0)); + cm.undo(); cm.undo(); cm.undo(); + eq(cm.getValue(), "abcd"); +}, {value: "abc", undoDepth: 2}); + +testCM("undoDoesntClearValue", function(cm) { + cm.undo(); + eq(cm.getValue(), "x"); +}, {value: "x"}); + +testCM("undoMultiLine", function(cm) { + cm.operation(function() { + cm.replaceRange("x", Pos(0, 0)); + cm.replaceRange("y", Pos(1, 0)); + }); + cm.undo(); + eq(cm.getValue(), "abc\ndef\nghi"); + cm.operation(function() { + cm.replaceRange("y", Pos(1, 0)); + cm.replaceRange("x", Pos(0, 0)); + }); + cm.undo(); + eq(cm.getValue(), "abc\ndef\nghi"); + cm.operation(function() { + cm.replaceRange("y", Pos(2, 0)); + cm.replaceRange("x", Pos(1, 0)); + cm.replaceRange("z", Pos(2, 0)); + }); + cm.undo(); + eq(cm.getValue(), "abc\ndef\nghi", 3); +}, {value: "abc\ndef\nghi"}); + +testCM("undoComposite", function(cm) { + cm.replaceRange("y", Pos(1)); + cm.operation(function() { + cm.replaceRange("x", Pos(0)); + cm.replaceRange("z", Pos(2)); + }); + eq(cm.getValue(), "ax\nby\ncz\n"); + cm.undo(); + eq(cm.getValue(), "a\nby\nc\n"); + cm.undo(); + eq(cm.getValue(), "a\nb\nc\n"); + cm.redo(); cm.redo(); + eq(cm.getValue(), "ax\nby\ncz\n"); +}, {value: "a\nb\nc\n"}); + +testCM("undoSelection", function(cm) { + cm.setSelection(Pos(0, 2), Pos(0, 4)); + cm.replaceSelection(""); + cm.setCursor(Pos(1, 0)); + cm.undo(); + eqPos(cm.getCursor(true), Pos(0, 2)); + eqPos(cm.getCursor(false), Pos(0, 4)); + cm.setCursor(Pos(1, 0)); + cm.redo(); + eqPos(cm.getCursor(true), Pos(0, 2)); + eqPos(cm.getCursor(false), Pos(0, 2)); +}, {value: "abcdefgh\n"}); + +testCM("markTextSingleLine", function(cm) { + forEach([{a: 0, b: 1, c: "", f: 2, t: 5}, + {a: 0, b: 4, c: "", f: 0, t: 2}, + {a: 1, b: 2, c: "x", f: 3, t: 6}, + {a: 4, b: 5, c: "", f: 3, t: 5}, + {a: 4, b: 5, c: "xx", f: 3, t: 7}, + {a: 2, b: 5, c: "", f: 2, t: 3}, + {a: 2, b: 5, c: "abcd", f: 6, t: 7}, + {a: 2, b: 6, c: "x", f: null, t: null}, + {a: 3, b: 6, c: "", f: null, t: null}, + {a: 0, b: 9, c: "hallo", f: null, t: null}, + {a: 4, b: 6, c: "x", f: 3, t: 4}, + {a: 4, b: 8, c: "", f: 3, t: 4}, + {a: 6, b: 6, c: "a", f: 3, t: 6}, + {a: 8, b: 9, c: "", f: 3, t: 6}], function(test) { + cm.setValue("1234567890"); + var r = cm.markText(Pos(0, 3), Pos(0, 6), {className: "foo"}); + cm.replaceRange(test.c, Pos(0, test.a), Pos(0, test.b)); + var f = r.find(); + eq(f && f.from.ch, test.f); eq(f && f.to.ch, test.t); + }); +}); + +testCM("markTextMultiLine", function(cm) { + function p(v) { return v && Pos(v[0], v[1]); } + forEach([{a: [0, 0], b: [0, 5], c: "", f: [0, 0], t: [2, 5]}, + {a: [0, 0], b: [0, 5], c: "foo\n", f: [1, 0], t: [3, 5]}, + {a: [0, 1], b: [0, 10], c: "", f: [0, 1], t: [2, 5]}, + {a: [0, 5], b: [0, 6], c: "x", f: [0, 6], t: [2, 5]}, + {a: [0, 0], b: [1, 0], c: "", f: [0, 0], t: [1, 5]}, + {a: [0, 6], b: [2, 4], c: "", f: [0, 5], t: [0, 7]}, + {a: [0, 6], b: [2, 4], c: "aa", f: [0, 5], t: [0, 9]}, + {a: [1, 2], b: [1, 8], c: "", f: [0, 5], t: [2, 5]}, + {a: [0, 5], b: [2, 5], c: "xx", f: null, t: null}, + {a: [0, 0], b: [2, 10], c: "x", f: null, t: null}, + {a: [1, 5], b: [2, 5], c: "", f: [0, 5], t: [1, 5]}, + {a: [2, 0], b: [2, 3], c: "", f: [0, 5], t: [2, 2]}, + {a: [2, 5], b: [3, 0], c: "a\nb", f: [0, 5], t: [2, 5]}, + {a: [2, 3], b: [3, 0], c: "x", f: [0, 5], t: [2, 3]}, + {a: [1, 1], b: [1, 9], c: "1\n2\n3", f: [0, 5], t: [4, 5]}], function(test) { + cm.setValue("aaaaaaaaaa\nbbbbbbbbbb\ncccccccccc\ndddddddd\n"); + var r = cm.markText(Pos(0, 5), Pos(2, 5), + {className: "CodeMirror-matchingbracket"}); + cm.replaceRange(test.c, p(test.a), p(test.b)); + var f = r.find(); + eqPos(f && f.from, p(test.f)); eqPos(f && f.to, p(test.t)); + }); +}); + +testCM("markTextUndo", function(cm) { + var marker1, marker2, bookmark; + marker1 = cm.markText(Pos(0, 1), Pos(0, 3), + {className: "CodeMirror-matchingbracket"}); + marker2 = cm.markText(Pos(0, 0), Pos(2, 1), + {className: "CodeMirror-matchingbracket"}); + bookmark = cm.setBookmark(Pos(1, 5)); + cm.operation(function(){ + cm.replaceRange("foo", Pos(0, 2)); + cm.replaceRange("bar\nbaz\nbug\n", Pos(2, 0), Pos(3, 0)); + }); + var v1 = cm.getValue(); + cm.setValue(""); + eq(marker1.find(), null); eq(marker2.find(), null); eq(bookmark.find(), null); + cm.undo(); + eqPos(bookmark.find(), Pos(1, 5), "still there"); + cm.undo(); + var m1Pos = marker1.find(), m2Pos = marker2.find(); + eqPos(m1Pos.from, Pos(0, 1)); eqPos(m1Pos.to, Pos(0, 3)); + eqPos(m2Pos.from, Pos(0, 0)); eqPos(m2Pos.to, Pos(2, 1)); + eqPos(bookmark.find(), Pos(1, 5)); + cm.redo(); cm.redo(); + eq(bookmark.find(), null); + cm.undo(); + eqPos(bookmark.find(), Pos(1, 5)); + eq(cm.getValue(), v1); +}, {value: "1234\n56789\n00\n"}); + +testCM("markTextStayGone", function(cm) { + var m1 = cm.markText(Pos(0, 0), Pos(0, 1)); + cm.replaceRange("hi", Pos(0, 2)); + m1.clear(); + cm.undo(); + eq(m1.find(), null); +}, {value: "hello"}); + +testCM("undoPreservesNewMarks", function(cm) { + cm.markText(Pos(0, 3), Pos(0, 4)); + cm.markText(Pos(1, 1), Pos(1, 3)); + cm.replaceRange("", Pos(0, 3), Pos(3, 1)); + var mBefore = cm.markText(Pos(0, 0), Pos(0, 1)); + var mAfter = cm.markText(Pos(0, 5), Pos(0, 6)); + var mAround = cm.markText(Pos(0, 2), Pos(0, 4)); + cm.undo(); + eqPos(mBefore.find().from, Pos(0, 0)); + eqPos(mBefore.find().to, Pos(0, 1)); + eqPos(mAfter.find().from, Pos(3, 3)); + eqPos(mAfter.find().to, Pos(3, 4)); + eqPos(mAround.find().from, Pos(0, 2)); + eqPos(mAround.find().to, Pos(3, 2)); + var found = cm.findMarksAt(Pos(2, 2)); + eq(found.length, 1); + eq(found[0], mAround); +}, {value: "aaaa\nbbbb\ncccc\ndddd"}); + +testCM("markClearBetween", function(cm) { + cm.setValue("aaa\nbbb\nccc\nddd\n"); + cm.markText(Pos(0, 0), Pos(2)); + cm.replaceRange("aaa\nbbb\nccc", Pos(0, 0), Pos(2)); + eq(cm.findMarksAt(Pos(1, 1)).length, 0); +}); + +testCM("deleteSpanCollapsedInclusiveLeft", function(cm) { + var from = Pos(1, 0), to = Pos(1, 1); + var m = cm.markText(from, to, {collapsed: true, inclusiveLeft: true}); + // Delete collapsed span. + cm.replaceRange("", from, to); +}, {value: "abc\nX\ndef"}); + +testCM("bookmark", function(cm) { + function p(v) { return v && Pos(v[0], v[1]); } + forEach([{a: [1, 0], b: [1, 1], c: "", d: [1, 4]}, + {a: [1, 1], b: [1, 1], c: "xx", d: [1, 7]}, + {a: [1, 4], b: [1, 5], c: "ab", d: [1, 6]}, + {a: [1, 4], b: [1, 6], c: "", d: null}, + {a: [1, 5], b: [1, 6], c: "abc", d: [1, 5]}, + {a: [1, 6], b: [1, 8], c: "", d: [1, 5]}, + {a: [1, 4], b: [1, 4], c: "\n\n", d: [3, 1]}, + {bm: [1, 9], a: [1, 1], b: [1, 1], c: "\n", d: [2, 8]}], function(test) { + cm.setValue("1234567890\n1234567890\n1234567890"); + var b = cm.setBookmark(p(test.bm) || Pos(1, 5)); + cm.replaceRange(test.c, p(test.a), p(test.b)); + eqPos(b.find(), p(test.d)); + }); +}); + +testCM("bookmarkInsertLeft", function(cm) { + var br = cm.setBookmark(Pos(0, 2), {insertLeft: false}); + var bl = cm.setBookmark(Pos(0, 2), {insertLeft: true}); + cm.setCursor(Pos(0, 2)); + cm.replaceSelection("hi"); + eqPos(br.find(), Pos(0, 2)); + eqPos(bl.find(), Pos(0, 4)); + cm.replaceRange("", Pos(0, 4), Pos(0, 5)); + cm.replaceRange("", Pos(0, 2), Pos(0, 4)); + cm.replaceRange("", Pos(0, 1), Pos(0, 2)); + // Verify that deleting next to bookmarks doesn't kill them + eqPos(br.find(), Pos(0, 1)); + eqPos(bl.find(), Pos(0, 1)); +}, {value: "abcdef"}); + +testCM("bookmarkCursor", function(cm) { + var pos01 = cm.cursorCoords(Pos(0, 1)), pos11 = cm.cursorCoords(Pos(1, 1)), + pos20 = cm.cursorCoords(Pos(2, 0)), pos30 = cm.cursorCoords(Pos(3, 0)), + pos41 = cm.cursorCoords(Pos(4, 1)); + cm.setBookmark(Pos(0, 1), {widget: document.createTextNode("←"), insertLeft: true}); + cm.setBookmark(Pos(2, 0), {widget: document.createTextNode("←"), insertLeft: true}); + cm.setBookmark(Pos(1, 1), {widget: document.createTextNode("→")}); + cm.setBookmark(Pos(3, 0), {widget: document.createTextNode("→")}); + var new01 = cm.cursorCoords(Pos(0, 1)), new11 = cm.cursorCoords(Pos(1, 1)), + new20 = cm.cursorCoords(Pos(2, 0)), new30 = cm.cursorCoords(Pos(3, 0)); + is(new01.left == pos01.left && new01.top == pos01.top, "at left, middle of line"); + is(new11.left > pos11.left && new11.top == pos11.top, "at right, middle of line"); + is(new20.left == pos20.left && new20.top == pos20.top, "at left, empty line"); + is(new30.left > pos30.left && new30.top == pos30.top, "at right, empty line"); + cm.setBookmark(Pos(4, 0), {widget: document.createTextNode("→")}); + is(cm.cursorCoords(Pos(4, 1)).left > pos41.left, "single-char bug"); +}, {value: "foo\nbar\n\n\nx\ny"}); + +testCM("getAllMarks", function(cm) { + addDoc(cm, 10, 10); + var m1 = cm.setBookmark(Pos(0, 2)); + var m2 = cm.markText(Pos(0, 2), Pos(3, 2)); + var m3 = cm.markText(Pos(1, 2), Pos(1, 8)); + var m4 = cm.markText(Pos(8, 0), Pos(9, 0)); + eq(cm.getAllMarks().length, 4); + m1.clear(); + m3.clear(); + eq(cm.getAllMarks().length, 2); +}); + +testCM("bug577", function(cm) { + cm.setValue("a\nb"); + cm.clearHistory(); + cm.setValue("fooooo"); + cm.undo(); +}); + +testCM("scrollSnap", function(cm) { + cm.setSize(100, 100); + addDoc(cm, 200, 200); + cm.setCursor(Pos(100, 180)); + var info = cm.getScrollInfo(); + is(info.left > 0 && info.top > 0); + cm.setCursor(Pos(0, 0)); + info = cm.getScrollInfo(); + is(info.left == 0 && info.top == 0, "scrolled clean to top"); + cm.setCursor(Pos(100, 180)); + cm.setCursor(Pos(199, 0)); + info = cm.getScrollInfo(); + is(info.left == 0 && info.top + 2 > info.height - cm.getScrollerElement().clientHeight, "scrolled clean to bottom"); +}); + +testCM("scrollIntoView", function(cm) { + if (phantom) return; + var outer = cm.getWrapperElement().getBoundingClientRect(); + function test(line, ch) { + var pos = Pos(line, ch); + cm.scrollIntoView(pos); + var box = cm.charCoords(pos, "window"); + is(box.left >= outer.left && box.right <= outer.right && + box.top >= outer.top && box.bottom <= outer.bottom); + } + addDoc(cm, 200, 200); + test(199, 199); + test(0, 0); + test(100, 100); + test(199, 0); + test(0, 199); + test(100, 100); +}); + +testCM("selectionPos", function(cm) { + if (phantom) return; + cm.setSize(100, 100); + addDoc(cm, 200, 100); + cm.setSelection(Pos(1, 100), Pos(98, 100)); + var lineWidth = cm.charCoords(Pos(0, 200), "local").left; + var lineHeight = (cm.charCoords(Pos(99)).top - cm.charCoords(Pos(0)).top) / 100; + cm.scrollTo(0, 0); + var selElt = byClassName(cm.getWrapperElement(), "CodeMirror-selected"); + var outer = cm.getWrapperElement().getBoundingClientRect(); + var sawMiddle, sawTop, sawBottom; + for (var i = 0, e = selElt.length; i < e; ++i) { + var box = selElt[i].getBoundingClientRect(); + var atLeft = box.left - outer.left < 30; + var width = box.right - box.left; + var atRight = box.right - outer.left > .8 * lineWidth; + if (atLeft && atRight) { + sawMiddle = true; + is(box.bottom - box.top > 90 * lineHeight, "middle high"); + is(width > .9 * lineWidth, "middle wide"); + } else { + is(width > .4 * lineWidth, "top/bot wide enough"); + is(width < .6 * lineWidth, "top/bot slim enough"); + if (atLeft) { + sawBottom = true; + is(box.top - outer.top > 96 * lineHeight, "bot below"); + } else if (atRight) { + sawTop = true; + is(box.top - outer.top < 2.1 * lineHeight, "top above"); + } + } + } + is(sawTop && sawBottom && sawMiddle, "all parts"); +}, null); + +testCM("restoreHistory", function(cm) { + cm.setValue("abc\ndef"); + cm.setLine(1, "hello"); + cm.setLine(0, "goop"); + cm.undo(); + var storedVal = cm.getValue(), storedHist = cm.getHistory(); + if (window.JSON) storedHist = JSON.parse(JSON.stringify(storedHist)); + eq(storedVal, "abc\nhello"); + cm.setValue(""); + cm.clearHistory(); + eq(cm.historySize().undo, 0); + cm.setValue(storedVal); + cm.setHistory(storedHist); + cm.redo(); + eq(cm.getValue(), "goop\nhello"); + cm.undo(); cm.undo(); + eq(cm.getValue(), "abc\ndef"); +}); + +testCM("doubleScrollbar", function(cm) { + var dummy = document.body.appendChild(document.createElement("p")); + dummy.style.cssText = "height: 50px; overflow: scroll; width: 50px"; + var scrollbarWidth = dummy.offsetWidth + 1 - dummy.clientWidth; + document.body.removeChild(dummy); + if (scrollbarWidth < 2) return; + cm.setSize(null, 100); + addDoc(cm, 1, 300); + var wrap = cm.getWrapperElement(); + is(wrap.offsetWidth - byClassName(wrap, "CodeMirror-lines")[0].offsetWidth <= scrollbarWidth * 1.5); +}); + +testCM("weirdLinebreaks", function(cm) { + cm.setValue("foo\nbar\rbaz\r\nquux\n\rplop"); + is(cm.getValue(), "foo\nbar\nbaz\nquux\n\nplop"); + is(cm.lineCount(), 6); + cm.setValue("\n\n"); + is(cm.lineCount(), 3); +}); + +testCM("setSize", function(cm) { + cm.setSize(100, 100); + var wrap = cm.getWrapperElement(); + is(wrap.offsetWidth, 100); + is(wrap.offsetHeight, 100); + cm.setSize("100%", "3em"); + is(wrap.style.width, "100%"); + is(wrap.style.height, "3em"); + cm.setSize(null, 40); + is(wrap.style.width, "100%"); + is(wrap.style.height, "40px"); +}); + +function foldLines(cm, start, end, autoClear) { + return cm.markText(Pos(start, 0), Pos(end - 1), { + inclusiveLeft: true, + inclusiveRight: true, + collapsed: true, + clearOnEnter: autoClear + }); +} + +testCM("collapsedLines", function(cm) { + addDoc(cm, 4, 10); + var range = foldLines(cm, 4, 5), cleared = 0; + CodeMirror.on(range, "clear", function() {cleared++;}); + cm.setCursor(Pos(3, 0)); + CodeMirror.commands.goLineDown(cm); + eqPos(cm.getCursor(), Pos(5, 0)); + cm.setLine(3, "abcdefg"); + cm.setCursor(Pos(3, 6)); + CodeMirror.commands.goLineDown(cm); + eqPos(cm.getCursor(), Pos(5, 4)); + cm.setLine(3, "ab"); + cm.setCursor(Pos(3, 2)); + CodeMirror.commands.goLineDown(cm); + eqPos(cm.getCursor(), Pos(5, 2)); + cm.operation(function() {range.clear(); range.clear();}); + eq(cleared, 1); +}); + +testCM("collapsedRangeCoordsChar", function(cm) { + var pos_1_3 = cm.charCoords(Pos(1, 3)); + pos_1_3.left += 2; pos_1_3.top += 2; + var opts = {collapsed: true, inclusiveLeft: true, inclusiveRight: true}; + var m1 = cm.markText(Pos(0, 0), Pos(2, 0), opts); + eqPos(cm.coordsChar(pos_1_3), Pos(3, 3)); + m1.clear(); + var m1 = cm.markText(Pos(0, 0), Pos(1, 1), opts); + var m2 = cm.markText(Pos(1, 1), Pos(2, 0), opts); + eqPos(cm.coordsChar(pos_1_3), Pos(3, 3)); + m1.clear(); m2.clear(); + var m1 = cm.markText(Pos(0, 0), Pos(1, 6), opts); + eqPos(cm.coordsChar(pos_1_3), Pos(3, 3)); +}, {value: "123456\nabcdef\nghijkl\nmnopqr\n"}); + +testCM("hiddenLinesAutoUnfold", function(cm) { + var range = foldLines(cm, 1, 3, true), cleared = 0; + CodeMirror.on(range, "clear", function() {cleared++;}); + cm.setCursor(Pos(3, 0)); + eq(cleared, 0); + cm.execCommand("goCharLeft"); + eq(cleared, 1); + range = foldLines(cm, 1, 3, true); + CodeMirror.on(range, "clear", function() {cleared++;}); + eqPos(cm.getCursor(), Pos(3, 0)); + cm.setCursor(Pos(0, 3)); + cm.execCommand("goCharRight"); + eq(cleared, 2); +}, {value: "abc\ndef\nghi\njkl"}); + +testCM("hiddenLinesSelectAll", function(cm) { // Issue #484 + addDoc(cm, 4, 20); + foldLines(cm, 0, 10); + foldLines(cm, 11, 20); + CodeMirror.commands.selectAll(cm); + eqPos(cm.getCursor(true), Pos(10, 0)); + eqPos(cm.getCursor(false), Pos(10, 4)); +}); + + +testCM("everythingFolded", function(cm) { + addDoc(cm, 2, 2); + function enterPress() { + cm.triggerOnKeyDown({type: "keydown", keyCode: 13, preventDefault: function(){}, stopPropagation: function(){}}); + } + var fold = foldLines(cm, 0, 2); + enterPress(); + eq(cm.getValue(), "xx\nxx"); + fold.clear(); + fold = foldLines(cm, 0, 2, true); + eq(fold.find(), null); + enterPress(); + eq(cm.getValue(), "\nxx\nxx"); +}); + +testCM("structuredFold", function(cm) { + if (phantom) return; + addDoc(cm, 4, 8); + var range = cm.markText(Pos(1, 2), Pos(6, 2), { + replacedWith: document.createTextNode("Q") + }); + cm.setCursor(0, 3); + CodeMirror.commands.goLineDown(cm); + eqPos(cm.getCursor(), Pos(6, 2)); + CodeMirror.commands.goCharLeft(cm); + eqPos(cm.getCursor(), Pos(1, 2)); + CodeMirror.commands.delCharAfter(cm); + eq(cm.getValue(), "xxxx\nxxxx\nxxxx"); + addDoc(cm, 4, 8); + range = cm.markText(Pos(1, 2), Pos(6, 2), { + replacedWith: document.createTextNode("M"), + clearOnEnter: true + }); + var cleared = 0; + CodeMirror.on(range, "clear", function(){++cleared;}); + cm.setCursor(0, 3); + CodeMirror.commands.goLineDown(cm); + eqPos(cm.getCursor(), Pos(6, 2)); + CodeMirror.commands.goCharLeft(cm); + eqPos(cm.getCursor(), Pos(6, 1)); + eq(cleared, 1); + range.clear(); + eq(cleared, 1); + range = cm.markText(Pos(1, 2), Pos(6, 2), { + replacedWith: document.createTextNode("Q"), + clearOnEnter: true + }); + range.clear(); + cm.setCursor(1, 2); + CodeMirror.commands.goCharRight(cm); + eqPos(cm.getCursor(), Pos(1, 3)); + range = cm.markText(Pos(2, 0), Pos(4, 4), { + replacedWith: document.createTextNode("M") + }); + cm.setCursor(1, 0); + CodeMirror.commands.goLineDown(cm); + eqPos(cm.getCursor(), Pos(2, 0)); +}, null); + +testCM("nestedFold", function(cm) { + addDoc(cm, 10, 3); + function fold(ll, cl, lr, cr) { + return cm.markText(Pos(ll, cl), Pos(lr, cr), {collapsed: true}); + } + var inner1 = fold(0, 6, 1, 3), inner2 = fold(0, 2, 1, 8), outer = fold(0, 1, 2, 3), inner0 = fold(0, 5, 0, 6); + cm.setCursor(0, 1); + CodeMirror.commands.goCharRight(cm); + eqPos(cm.getCursor(), Pos(2, 3)); + inner0.clear(); + CodeMirror.commands.goCharLeft(cm); + eqPos(cm.getCursor(), Pos(0, 1)); + outer.clear(); + CodeMirror.commands.goCharRight(cm); + eqPos(cm.getCursor(), Pos(0, 2)); + CodeMirror.commands.goCharRight(cm); + eqPos(cm.getCursor(), Pos(1, 8)); + inner2.clear(); + CodeMirror.commands.goCharLeft(cm); + eqPos(cm.getCursor(), Pos(1, 7)); + cm.setCursor(0, 5); + CodeMirror.commands.goCharRight(cm); + eqPos(cm.getCursor(), Pos(0, 6)); + CodeMirror.commands.goCharRight(cm); + eqPos(cm.getCursor(), Pos(1, 3)); +}); + +testCM("badNestedFold", function(cm) { + addDoc(cm, 4, 4); + cm.markText(Pos(0, 2), Pos(3, 2), {collapsed: true}); + var caught; + try {cm.markText(Pos(0, 1), Pos(0, 3), {collapsed: true});} + catch(e) {caught = e;} + is(caught instanceof Error, "no error"); + is(/overlap/i.test(caught.message), "wrong error"); +}); + +testCM("wrappingInlineWidget", function(cm) { + cm.setSize("11em"); + var w = document.createElement("span"); + w.style.color = "red"; + w.innerHTML = "one two three four"; + cm.markText(Pos(0, 6), Pos(0, 9), {replacedWith: w}); + var cur0 = cm.cursorCoords(Pos(0, 0)), cur1 = cm.cursorCoords(Pos(0, 10)); + is(cur0.top < cur1.top); + is(cur0.bottom < cur1.bottom); + var curL = cm.cursorCoords(Pos(0, 6)), curR = cm.cursorCoords(Pos(0, 9)); + eq(curL.top, cur0.top); + eq(curL.bottom, cur0.bottom); + eq(curR.top, cur1.top); + eq(curR.bottom, cur1.bottom); + cm.replaceRange("", Pos(0, 9), Pos(0)); + curR = cm.cursorCoords(Pos(0, 9)); + eq(curR.top, cur1.top); + eq(curR.bottom, cur1.bottom); +}, {value: "1 2 3 xxx 4", lineWrapping: true}); + +testCM("changedInlineWidget", function(cm) { + cm.setSize("10em"); + var w = document.createElement("span"); + w.innerHTML = "x"; + var m = cm.markText(Pos(0, 4), Pos(0, 5), {replacedWith: w}); + w.innerHTML = "and now the widget is really really long all of a sudden and a scrollbar is needed"; + m.changed(); + var hScroll = byClassName(cm.getWrapperElement(), "CodeMirror-hscrollbar")[0]; + is(hScroll.scrollWidth > hScroll.clientWidth); +}, {value: "hello there"}); + +testCM("inlineWidget", function(cm) { + var w = cm.setBookmark(Pos(0, 2), {widget: document.createTextNode("uu")}); + cm.setCursor(0, 2); + CodeMirror.commands.goLineDown(cm); + eqPos(cm.getCursor(), Pos(1, 4)); + cm.setCursor(0, 2); + cm.replaceSelection("hi"); + eqPos(w.find(), Pos(0, 2)); + cm.setCursor(0, 1); + cm.replaceSelection("ay"); + eqPos(w.find(), Pos(0, 4)); + eq(cm.getLine(0), "uayuhiuu"); +}, {value: "uuuu\nuuuuuu"}); + +testCM("wrappingAndResizing", function(cm) { + cm.setSize(null, "auto"); + cm.setOption("lineWrapping", true); + var wrap = cm.getWrapperElement(), h0 = wrap.offsetHeight; + var doc = "xxx xxx xxx xxx xxx"; + cm.setValue(doc); + for (var step = 10, w = cm.charCoords(Pos(0, 18), "div").right;; w += step) { + cm.setSize(w); + if (wrap.offsetHeight <= h0 * (opera_lt10 ? 1.2 : 1.5)) { + if (step == 10) { w -= 10; step = 1; } + else break; + } + } + // Ensure that putting the cursor at the end of the maximally long + // line doesn't cause wrapping to happen. + cm.setCursor(Pos(0, doc.length)); + eq(wrap.offsetHeight, h0); + cm.replaceSelection("x"); + is(wrap.offsetHeight > h0, "wrapping happens"); + // Now add a max-height and, in a document consisting of + // almost-wrapped lines, go over it so that a scrollbar appears. + cm.setValue(doc + "\n" + doc + "\n"); + cm.getScrollerElement().style.maxHeight = "100px"; + cm.replaceRange("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n!\n", Pos(2, 0)); + forEach([Pos(0, doc.length), Pos(0, doc.length - 1), + Pos(0, 0), Pos(1, doc.length), Pos(1, doc.length - 1)], + function(pos) { + var coords = cm.charCoords(pos); + eqPos(pos, cm.coordsChar({left: coords.left + 2, top: coords.top + 5})); + }); +}, null, ie_lt8); + +testCM("measureEndOfLine", function(cm) { + cm.setSize(null, "auto"); + var inner = byClassName(cm.getWrapperElement(), "CodeMirror-lines")[0].firstChild; + var lh = inner.offsetHeight; + for (var step = 10, w = cm.charCoords(Pos(0, 7), "div").right;; w += step) { + cm.setSize(w); + if (inner.offsetHeight < 2.5 * lh) { + if (step == 10) { w -= 10; step = 1; } + else break; + } + } + cm.setValue(cm.getValue() + "\n\n"); + var endPos = cm.charCoords(Pos(0, 18), "local"); + is(endPos.top > lh * .8, "not at top"); + is(endPos.left > w - 20, "not at right"); + endPos = cm.charCoords(Pos(0, 18)); + eqPos(cm.coordsChar({left: endPos.left, top: endPos.top + 5}), Pos(0, 18)); +}, {mode: "text/html", value: "", lineWrapping: true}, ie_lt8 || opera_lt10); + +testCM("scrollVerticallyAndHorizontally", function(cm) { + cm.setSize(100, 100); + addDoc(cm, 40, 40); + cm.setCursor(39); + var wrap = cm.getWrapperElement(), bar = byClassName(wrap, "CodeMirror-vscrollbar")[0]; + is(bar.offsetHeight < wrap.offsetHeight, "vertical scrollbar limited by horizontal one"); + var cursorBox = byClassName(wrap, "CodeMirror-cursor")[0].getBoundingClientRect(); + var editorBox = wrap.getBoundingClientRect(); + is(cursorBox.bottom < editorBox.top + cm.getScrollerElement().clientHeight, + "bottom line visible"); +}, {lineNumbers: true}); + +testCM("moveVstuck", function(cm) { + var lines = byClassName(cm.getWrapperElement(), "CodeMirror-lines")[0].firstChild, h0 = lines.offsetHeight; + var val = "fooooooooooooooooooooooooo baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar\n"; + cm.setValue(val); + for (var w = cm.charCoords(Pos(0, 26), "div").right * 2.8;; w += 5) { + cm.setSize(w); + if (lines.offsetHeight <= 3.5 * h0) break; + } + cm.setCursor(Pos(0, val.length - 1)); + cm.moveV(-1, "line"); + eqPos(cm.getCursor(), Pos(0, 26)); +}, {lineWrapping: true}, ie_lt8 || opera_lt10); + +testCM("clickTab", function(cm) { + var p0 = cm.charCoords(Pos(0, 0)); + eqPos(cm.coordsChar({left: p0.left + 5, top: p0.top + 5}), Pos(0, 0)); + eqPos(cm.coordsChar({left: p0.right - 5, top: p0.top + 5}), Pos(0, 1)); +}, {value: "\t\n\n", lineWrapping: true, tabSize: 8}); + +testCM("verticalScroll", function(cm) { + cm.setSize(100, 200); + cm.setValue("foo\nbar\nbaz\n"); + var sc = cm.getScrollerElement(), baseWidth = sc.scrollWidth; + cm.setLine(0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah"); + is(sc.scrollWidth > baseWidth, "scrollbar present"); + cm.setLine(0, "foo"); + if (!phantom) eq(sc.scrollWidth, baseWidth, "scrollbar gone"); + cm.setLine(0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah"); + cm.setLine(1, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbh"); + is(sc.scrollWidth > baseWidth, "present again"); + var curWidth = sc.scrollWidth; + cm.setLine(0, "foo"); + is(sc.scrollWidth < curWidth, "scrollbar smaller"); + is(sc.scrollWidth > baseWidth, "but still present"); +}); + +testCM("extraKeys", function(cm) { + var outcome; + function fakeKey(expected, code, props) { + if (typeof code == "string") code = code.charCodeAt(0); + var e = {type: "keydown", keyCode: code, preventDefault: function(){}, stopPropagation: function(){}}; + if (props) for (var n in props) e[n] = props[n]; + outcome = null; + cm.triggerOnKeyDown(e); + eq(outcome, expected); + } + CodeMirror.commands.testCommand = function() {outcome = "tc";}; + CodeMirror.commands.goTestCommand = function() {outcome = "gtc";}; + cm.setOption("extraKeys", {"Shift-X": function() {outcome = "sx";}, + "X": function() {outcome = "x";}, + "Ctrl-Alt-U": function() {outcome = "cau";}, + "End": "testCommand", + "Home": "goTestCommand", + "Tab": false}); + fakeKey(null, "U"); + fakeKey("cau", "U", {ctrlKey: true, altKey: true}); + fakeKey(null, "U", {shiftKey: true, ctrlKey: true, altKey: true}); + fakeKey("x", "X"); + fakeKey("sx", "X", {shiftKey: true}); + fakeKey("tc", 35); + fakeKey(null, 35, {shiftKey: true}); + fakeKey("gtc", 36); + fakeKey("gtc", 36, {shiftKey: true}); + fakeKey(null, 9); +}, null, window.opera && mac); + +testCM("wordMovementCommands", function(cm) { + cm.execCommand("goWordLeft"); + eqPos(cm.getCursor(), Pos(0, 0)); + cm.execCommand("goWordRight"); cm.execCommand("goWordRight"); + eqPos(cm.getCursor(), Pos(0, 7)); + cm.execCommand("goWordLeft"); + eqPos(cm.getCursor(), Pos(0, 5)); + cm.execCommand("goWordRight"); cm.execCommand("goWordRight"); + eqPos(cm.getCursor(), Pos(0, 12)); + cm.execCommand("goWordLeft"); + eqPos(cm.getCursor(), Pos(0, 9)); + cm.execCommand("goWordRight"); cm.execCommand("goWordRight"); cm.execCommand("goWordRight"); + eqPos(cm.getCursor(), Pos(0, 24)); + cm.execCommand("goWordRight"); cm.execCommand("goWordRight"); + eqPos(cm.getCursor(), Pos(1, 9)); + cm.execCommand("goWordRight"); + eqPos(cm.getCursor(), Pos(1, 13)); + cm.execCommand("goWordRight"); cm.execCommand("goWordRight"); + eqPos(cm.getCursor(), Pos(2, 0)); +}, {value: "this is (the) firstline.\na foo12\u00e9\u00f8\u00d7bar\n"}); + +testCM("groupMovementCommands", function(cm) { + cm.execCommand("goGroupLeft"); + eqPos(cm.getCursor(), Pos(0, 0)); + cm.execCommand("goGroupRight"); + eqPos(cm.getCursor(), Pos(0, 4)); + cm.execCommand("goGroupRight"); + eqPos(cm.getCursor(), Pos(0, 7)); + cm.execCommand("goGroupRight"); + eqPos(cm.getCursor(), Pos(0, 10)); + cm.execCommand("goGroupLeft"); + eqPos(cm.getCursor(), Pos(0, 7)); + cm.execCommand("goGroupRight"); cm.execCommand("goGroupRight"); cm.execCommand("goGroupRight"); + eqPos(cm.getCursor(), Pos(0, 15)); + cm.setCursor(Pos(0, 17)); + cm.execCommand("goGroupLeft"); + eqPos(cm.getCursor(), Pos(0, 16)); + cm.execCommand("goGroupLeft"); + eqPos(cm.getCursor(), Pos(0, 14)); + cm.execCommand("goGroupRight"); cm.execCommand("goGroupRight"); + eqPos(cm.getCursor(), Pos(0, 20)); + cm.execCommand("goGroupRight"); + eqPos(cm.getCursor(), Pos(1, 5)); + cm.execCommand("goGroupLeft"); cm.execCommand("goGroupLeft"); + eqPos(cm.getCursor(), Pos(1, 0)); + cm.execCommand("goGroupLeft"); + eqPos(cm.getCursor(), Pos(0, 16)); +}, {value: "booo ba---quux. ffff\n abc d"}); + +testCM("charMovementCommands", function(cm) { + cm.execCommand("goCharLeft"); cm.execCommand("goColumnLeft"); + eqPos(cm.getCursor(), Pos(0, 0)); + cm.execCommand("goCharRight"); cm.execCommand("goCharRight"); + eqPos(cm.getCursor(), Pos(0, 2)); + cm.setCursor(Pos(1, 0)); + cm.execCommand("goColumnLeft"); + eqPos(cm.getCursor(), Pos(1, 0)); + cm.execCommand("goCharLeft"); + eqPos(cm.getCursor(), Pos(0, 5)); + cm.execCommand("goColumnRight"); + eqPos(cm.getCursor(), Pos(0, 5)); + cm.execCommand("goCharRight"); + eqPos(cm.getCursor(), Pos(1, 0)); + cm.execCommand("goLineEnd"); + eqPos(cm.getCursor(), Pos(1, 5)); + cm.execCommand("goLineStartSmart"); + eqPos(cm.getCursor(), Pos(1, 1)); + cm.execCommand("goLineStartSmart"); + eqPos(cm.getCursor(), Pos(1, 0)); + cm.setCursor(Pos(2, 0)); + cm.execCommand("goCharRight"); cm.execCommand("goColumnRight"); + eqPos(cm.getCursor(), Pos(2, 0)); +}, {value: "line1\n ine2\n"}); + +testCM("verticalMovementCommands", function(cm) { + cm.execCommand("goLineUp"); + eqPos(cm.getCursor(), Pos(0, 0)); + cm.execCommand("goLineDown"); + if (!phantom) // This fails in PhantomJS, though not in a real Webkit + eqPos(cm.getCursor(), Pos(1, 0)); + cm.setCursor(Pos(1, 12)); + cm.execCommand("goLineDown"); + eqPos(cm.getCursor(), Pos(2, 5)); + cm.execCommand("goLineDown"); + eqPos(cm.getCursor(), Pos(3, 0)); + cm.execCommand("goLineUp"); + eqPos(cm.getCursor(), Pos(2, 5)); + cm.execCommand("goLineUp"); + eqPos(cm.getCursor(), Pos(1, 12)); + cm.execCommand("goPageDown"); + eqPos(cm.getCursor(), Pos(5, 0)); + cm.execCommand("goPageDown"); cm.execCommand("goLineDown"); + eqPos(cm.getCursor(), Pos(5, 0)); + cm.execCommand("goPageUp"); + eqPos(cm.getCursor(), Pos(0, 0)); +}, {value: "line1\nlong long line2\nline3\n\nline5\n"}); + +testCM("verticalMovementCommandsWrapping", function(cm) { + cm.setSize(120); + cm.setCursor(Pos(0, 5)); + cm.execCommand("goLineDown"); + eq(cm.getCursor().line, 0); + is(cm.getCursor().ch > 5, "moved beyond wrap"); + for (var i = 0; ; ++i) { + is(i < 20, "no endless loop"); + cm.execCommand("goLineDown"); + var cur = cm.getCursor(); + if (cur.line == 1) eq(cur.ch, 5); + if (cur.line == 2) { eq(cur.ch, 1); break; } + } +}, {value: "a very long line that wraps around somehow so that we can test cursor movement\nshortone\nk", + lineWrapping: true}); + +testCM("rtlMovement", function(cm) { + forEach(["خحج", "خحabcخحج", "abخحخحجcd", "abخde", "abخح2342خ1حج", "خ1ح2خح3حxج", + "خحcd", "1خحcd", "abcdeح1ج", "خمرحبها مها!", "foobarر", + ""], function(line) { + var inv = line.charAt(0) == "خ"; + cm.setValue(line + "\n"); cm.execCommand(inv ? "goLineEnd" : "goLineStart"); + var cursor = byClassName(cm.getWrapperElement(), "CodeMirror-cursor")[0]; + var prevX = cursor.offsetLeft, prevY = cursor.offsetTop; + for (var i = 0; i <= line.length; ++i) { + cm.execCommand("goCharRight"); + if (i == line.length) is(cursor.offsetTop > prevY, "next line"); + else is(cursor.offsetLeft > prevX, "moved right"); + prevX = cursor.offsetLeft; prevY = cursor.offsetTop; + } + cm.setCursor(0, 0); cm.execCommand(inv ? "goLineStart" : "goLineEnd"); + prevX = cursor.offsetLeft; + for (var i = 0; i < line.length; ++i) { + cm.execCommand("goCharLeft"); + is(cursor.offsetLeft < prevX, "moved left"); + prevX = cursor.offsetLeft; + } + }); +}, {rtlMoveVisually: true}); + +// Verify that updating a line clears its bidi ordering +testCM("bidiUpdate", function(cm) { + cm.setCursor(Pos(0, 2)); + cm.replaceSelection("خحج", "start"); + cm.execCommand("goCharRight"); + eqPos(cm.getCursor(), Pos(0, 4)); +}, {value: "abcd\n"}); + +testCM("movebyTextUnit", function(cm) { + cm.setValue("בְּרֵאשִ\ńéée\n"); + cm.execCommand("goLineEnd"); + for (var i = 0; i < 4; ++i) cm.execCommand("goCharRight"); + eqPos(cm.getCursor(), Pos(0, 0)); + cm.execCommand("goCharRight"); + eqPos(cm.getCursor(), Pos(1, 0)); + cm.execCommand("goCharRight"); + cm.execCommand("goCharRight"); + eqPos(cm.getCursor(), Pos(1, 3)); + cm.execCommand("goCharRight"); + cm.execCommand("goCharRight"); + eqPos(cm.getCursor(), Pos(1, 6)); +}); + +testCM("lineChangeEvents", function(cm) { + addDoc(cm, 3, 5); + var log = [], want = ["ch 0", "ch 1", "del 2", "ch 0", "ch 0", "del 1", "del 3", "del 4"]; + for (var i = 0; i < 5; ++i) { + CodeMirror.on(cm.getLineHandle(i), "delete", function(i) { + return function() {log.push("del " + i);}; + }(i)); + CodeMirror.on(cm.getLineHandle(i), "change", function(i) { + return function() {log.push("ch " + i);}; + }(i)); + } + cm.replaceRange("x", Pos(0, 1)); + cm.replaceRange("xy", Pos(1, 1), Pos(2)); + cm.replaceRange("foo\nbar", Pos(0, 1)); + cm.replaceRange("", Pos(0, 0), Pos(cm.lineCount())); + eq(log.length, want.length, "same length"); + for (var i = 0; i < log.length; ++i) + eq(log[i], want[i]); +}); + +testCM("scrollEntirelyToRight", function(cm) { + if (phantom) return; + addDoc(cm, 500, 2); + cm.setCursor(Pos(0, 500)); + var wrap = cm.getWrapperElement(), cur = byClassName(wrap, "CodeMirror-cursor")[0]; + is(wrap.getBoundingClientRect().right > cur.getBoundingClientRect().left); +}); + +testCM("lineWidgets", function(cm) { + addDoc(cm, 500, 3); + var last = cm.charCoords(Pos(2, 0)); + var node = document.createElement("div"); + node.innerHTML = "hi"; + var widget = cm.addLineWidget(1, node); + is(last.top < cm.charCoords(Pos(2, 0)).top, "took up space"); + cm.setCursor(Pos(1, 1)); + cm.execCommand("goLineDown"); + eqPos(cm.getCursor(), Pos(2, 1)); + cm.execCommand("goLineUp"); + eqPos(cm.getCursor(), Pos(1, 1)); +}); + +testCM("lineWidgetFocus", function(cm) { + var place = document.getElementById("testground"); + place.className = "offscreen"; + try { + addDoc(cm, 500, 10); + var node = document.createElement("input"); + var widget = cm.addLineWidget(1, node); + node.focus(); + eq(document.activeElement, node); + cm.replaceRange("new stuff", Pos(1, 0)); + eq(document.activeElement, node); + } finally { + place.className = ""; + } +}); + +testCM("getLineNumber", function(cm) { + addDoc(cm, 2, 20); + var h1 = cm.getLineHandle(1); + eq(cm.getLineNumber(h1), 1); + cm.replaceRange("hi\nbye\n", Pos(0, 0)); + eq(cm.getLineNumber(h1), 3); + cm.setValue(""); + eq(cm.getLineNumber(h1), null); +}); + +testCM("jumpTheGap", function(cm) { + var longLine = "abcdef ghiklmnop qrstuvw xyz "; + longLine += longLine; longLine += longLine; longLine += longLine; + cm.setLine(2, longLine); + cm.setSize("200px", null); + cm.getWrapperElement().style.lineHeight = 2; + cm.refresh(); + cm.setCursor(Pos(0, 1)); + cm.execCommand("goLineDown"); + eqPos(cm.getCursor(), Pos(1, 1)); + cm.execCommand("goLineDown"); + eqPos(cm.getCursor(), Pos(2, 1)); + cm.execCommand("goLineDown"); + eq(cm.getCursor().line, 2); + is(cm.getCursor().ch > 1); + cm.execCommand("goLineUp"); + eqPos(cm.getCursor(), Pos(2, 1)); + cm.execCommand("goLineUp"); + eqPos(cm.getCursor(), Pos(1, 1)); + var node = document.createElement("div"); + node.innerHTML = "hi"; node.style.height = "30px"; + cm.addLineWidget(0, node); + cm.addLineWidget(1, node.cloneNode(true), {above: true}); + cm.setCursor(Pos(0, 2)); + cm.execCommand("goLineDown"); + eqPos(cm.getCursor(), Pos(1, 2)); + cm.execCommand("goLineUp"); + eqPos(cm.getCursor(), Pos(0, 2)); +}, {lineWrapping: true, value: "abc\ndef\nghi\njkl\n"}); + +testCM("addLineClass", function(cm) { + function cls(line, text, bg, wrap) { + var i = cm.lineInfo(line); + eq(i.textClass, text); + eq(i.bgClass, bg); + eq(i.wrapClass, wrap); + } + cm.addLineClass(0, "text", "foo"); + cm.addLineClass(0, "text", "bar"); + cm.addLineClass(1, "background", "baz"); + cm.addLineClass(1, "wrap", "foo"); + cls(0, "foo bar", null, null); + cls(1, null, "baz", "foo"); + var lines = cm.display.lineDiv; + eq(byClassName(lines, "foo").length, 2); + eq(byClassName(lines, "bar").length, 1); + eq(byClassName(lines, "baz").length, 1); + cm.removeLineClass(0, "text", "foo"); + cls(0, "bar", null, null); + cm.removeLineClass(0, "text", "foo"); + cls(0, "bar", null, null); + cm.removeLineClass(0, "text", "bar"); + cls(0, null, null, null); + cm.addLineClass(1, "wrap", "quux"); + cls(1, null, "baz", "foo quux"); + cm.removeLineClass(1, "wrap"); + cls(1, null, "baz", null); +}, {value: "hohoho\n"}); + +testCM("atomicMarker", function(cm) { + addDoc(cm, 10, 10); + function atom(ll, cl, lr, cr, li, ri) { + return cm.markText(Pos(ll, cl), Pos(lr, cr), + {atomic: true, inclusiveLeft: li, inclusiveRight: ri}); + } + var m = atom(0, 1, 0, 5); + cm.setCursor(Pos(0, 1)); + cm.execCommand("goCharRight"); + eqPos(cm.getCursor(), Pos(0, 5)); + cm.execCommand("goCharLeft"); + eqPos(cm.getCursor(), Pos(0, 1)); + m.clear(); + m = atom(0, 0, 0, 5, true); + eqPos(cm.getCursor(), Pos(0, 5), "pushed out"); + cm.execCommand("goCharLeft"); + eqPos(cm.getCursor(), Pos(0, 5)); + m.clear(); + m = atom(8, 4, 9, 10, false, true); + cm.setCursor(Pos(9, 8)); + eqPos(cm.getCursor(), Pos(8, 4), "set"); + cm.execCommand("goCharRight"); + eqPos(cm.getCursor(), Pos(8, 4), "char right"); + cm.execCommand("goLineDown"); + eqPos(cm.getCursor(), Pos(8, 4), "line down"); + cm.execCommand("goCharLeft"); + eqPos(cm.getCursor(), Pos(8, 3)); + m.clear(); + m = atom(1, 1, 3, 8); + cm.setCursor(Pos(2, 0)); + eqPos(cm.getCursor(), Pos(3, 8)); + cm.execCommand("goCharLeft"); + eqPos(cm.getCursor(), Pos(1, 1)); + cm.execCommand("goCharRight"); + eqPos(cm.getCursor(), Pos(3, 8)); + cm.execCommand("goLineUp"); + eqPos(cm.getCursor(), Pos(1, 1)); + cm.execCommand("goLineDown"); + eqPos(cm.getCursor(), Pos(3, 8)); + cm.execCommand("delCharBefore"); + eq(cm.getValue().length, 80, "del chunk"); + m = atom(3, 0, 5, 5); + cm.setCursor(Pos(3, 0)); + cm.execCommand("delWordAfter"); + eq(cm.getValue().length, 53, "del chunk"); +}); + +testCM("readOnlyMarker", function(cm) { + function mark(ll, cl, lr, cr, at) { + return cm.markText(Pos(ll, cl), Pos(lr, cr), + {readOnly: true, atomic: at}); + } + var m = mark(0, 1, 0, 4); + cm.setCursor(Pos(0, 2)); + cm.replaceSelection("hi", "end"); + eqPos(cm.getCursor(), Pos(0, 2)); + eq(cm.getLine(0), "abcde"); + cm.execCommand("selectAll"); + cm.replaceSelection("oops"); + eq(cm.getValue(), "oopsbcd"); + cm.undo(); + eqPos(m.find().from, Pos(0, 1)); + eqPos(m.find().to, Pos(0, 4)); + m.clear(); + cm.setCursor(Pos(0, 2)); + cm.replaceSelection("hi"); + eq(cm.getLine(0), "abhicde"); + eqPos(cm.getCursor(), Pos(0, 4)); + m = mark(0, 2, 2, 2, true); + cm.setSelection(Pos(1, 1), Pos(2, 4)); + cm.replaceSelection("t", "end"); + eqPos(cm.getCursor(), Pos(2, 3)); + eq(cm.getLine(2), "klto"); + cm.execCommand("goCharLeft"); + cm.execCommand("goCharLeft"); + eqPos(cm.getCursor(), Pos(0, 2)); + cm.setSelection(Pos(0, 1), Pos(0, 3)); + cm.replaceSelection("xx"); + eqPos(cm.getCursor(), Pos(0, 3)); + eq(cm.getLine(0), "axxhicde"); +}, {value: "abcde\nfghij\nklmno\n"}); + +testCM("dirtyBit", function(cm) { + eq(cm.isClean(), true); + cm.replaceSelection("boo"); + eq(cm.isClean(), false); + cm.undo(); + eq(cm.isClean(), true); + cm.replaceSelection("boo"); + cm.replaceSelection("baz"); + cm.undo(); + eq(cm.isClean(), false); + cm.markClean(); + eq(cm.isClean(), true); + cm.undo(); + eq(cm.isClean(), false); + cm.redo(); + eq(cm.isClean(), true); +}); + +testCM("addKeyMap", function(cm) { + function sendKey(code) { + cm.triggerOnKeyDown({type: "keydown", keyCode: code, + preventDefault: function(){}, stopPropagation: function(){}}); + } + + sendKey(39); + eqPos(cm.getCursor(), Pos(0, 1)); + var test = 0; + var map1 = {Right: function() { ++test; }}, map2 = {Right: function() { test += 10; }} + cm.addKeyMap(map1); + sendKey(39); + eqPos(cm.getCursor(), Pos(0, 1)); + eq(test, 1); + cm.addKeyMap(map2, true); + sendKey(39); + eq(test, 2); + cm.removeKeyMap(map1); + sendKey(39); + eq(test, 12); + cm.removeKeyMap(map2); + sendKey(39); + eq(test, 12); + eqPos(cm.getCursor(), Pos(0, 2)); + cm.addKeyMap({Right: function() { test = 55; }, name: "mymap"}); + sendKey(39); + eq(test, 55); + cm.removeKeyMap("mymap"); + sendKey(39); + eqPos(cm.getCursor(), Pos(0, 3)); +}, {value: "abc"}); + +testCM("findPosH", function(cm) { + forEach([{from: Pos(0, 0), to: Pos(0, 1), by: 1}, + {from: Pos(0, 0), to: Pos(0, 0), by: -1, hitSide: true}, + {from: Pos(0, 0), to: Pos(0, 4), by: 1, unit: "word"}, + {from: Pos(0, 0), to: Pos(0, 8), by: 2, unit: "word"}, + {from: Pos(0, 0), to: Pos(2, 0), by: 20, unit: "word", hitSide: true}, + {from: Pos(0, 7), to: Pos(0, 5), by: -1, unit: "word"}, + {from: Pos(0, 4), to: Pos(0, 8), by: 1, unit: "word"}, + {from: Pos(1, 0), to: Pos(1, 18), by: 3, unit: "word"}, + {from: Pos(1, 22), to: Pos(1, 5), by: -3, unit: "word"}, + {from: Pos(1, 15), to: Pos(1, 10), by: -5}, + {from: Pos(1, 15), to: Pos(1, 10), by: -5, unit: "column"}, + {from: Pos(1, 15), to: Pos(1, 0), by: -50, unit: "column", hitSide: true}, + {from: Pos(1, 15), to: Pos(1, 24), by: 50, unit: "column", hitSide: true}, + {from: Pos(1, 15), to: Pos(2, 0), by: 50, hitSide: true}], function(t) { + var r = cm.findPosH(t.from, t.by, t.unit || "char"); + eqPos(r, t.to); + eq(!!r.hitSide, !!t.hitSide); + }); +}, {value: "line one\nline two.something.other\n"}); + +testCM("beforeChange", function(cm) { + cm.on("beforeChange", function(cm, change) { + var text = []; + for (var i = 0; i < change.text.length; ++i) + text.push(change.text[i].replace(/\s/g, "_")); + change.update(null, null, text); + }); + cm.setValue("hello, i am a\nnew document\n"); + eq(cm.getValue(), "hello,_i_am_a\nnew_document\n"); + CodeMirror.on(cm.getDoc(), "beforeChange", function(doc, change) { + if (change.from.line == 0) change.cancel(); + }); + cm.setValue("oops"); // Canceled + eq(cm.getValue(), "hello,_i_am_a\nnew_document\n"); + cm.replaceRange("hey hey hey", Pos(1, 0), Pos(2, 0)); + eq(cm.getValue(), "hello,_i_am_a\nhey_hey_hey"); +}, {value: "abcdefghijk"}); + +testCM("beforeChangeUndo", function(cm) { + cm.setLine(0, "hi"); + cm.setLine(0, "bye"); + eq(cm.historySize().undo, 2); + cm.on("beforeChange", function(cm, change) { + is(!change.update); + change.cancel(); + }); + cm.undo(); + eq(cm.historySize().undo, 0); + eq(cm.getValue(), "bye\ntwo"); +}, {value: "one\ntwo"}); + +testCM("beforeSelectionChange", function(cm) { + function notAtEnd(cm, pos) { + var len = cm.getLine(pos.line).length; + if (!len || pos.ch == len) return Pos(pos.line, pos.ch - 1); + return pos; + } + cm.on("beforeSelectionChange", function(cm, sel) { + sel.head = notAtEnd(cm, sel.head); + sel.anchor = notAtEnd(cm, sel.anchor); + }); + + addDoc(cm, 10, 10); + cm.execCommand("goLineEnd"); + eqPos(cm.getCursor(), Pos(0, 9)); + cm.execCommand("selectAll"); + eqPos(cm.getCursor("start"), Pos(0, 0)); + eqPos(cm.getCursor("end"), Pos(9, 9)); +}); + +testCM("change_removedText", function(cm) { + cm.setValue("abc\ndef"); + + var removedText; + cm.on("change", function(cm, change) { + removedText = [change.removed, change.next && change.next.removed]; + }); + + cm.operation(function() { + cm.replaceRange("xyz", Pos(0, 0), Pos(1,1)); + cm.replaceRange("123", Pos(0,0)); + }); + + eq(removedText[0].join("\n"), "abc\nd"); + eq(removedText[1].join("\n"), ""); + + cm.undo(); + eq(removedText[0].join("\n"), "123"); + eq(removedText[1].join("\n"), "xyz"); + + cm.redo(); + eq(removedText[0].join("\n"), "abc\nd"); + eq(removedText[1].join("\n"), ""); +}); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/vim_test.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/vim_test.js new file mode 100644 index 0000000..ec0fae0 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/test/vim_test.js @@ -0,0 +1,2356 @@ +var code = '' + +' wOrd1 (#%\n' + +' word3] \n' + +'aopop pop 0 1 2 3 4\n' + +' (a) [b] {c} \n' + +'int getchar(void) {\n' + +' static char buf[BUFSIZ];\n' + +' static char *bufp = buf;\n' + +' if (n == 0) { /* buffer is empty */\n' + +' n = read(0, buf, sizeof buf);\n' + +' bufp = buf;\n' + +' }\n' + +'\n' + +' return (--n >= 0) ? (unsigned char) *bufp++ : EOF;\n' + +' \n' + +'}\n'; + +var lines = (function() { + lineText = code.split('\n'); + var ret = []; + for (var i = 0; i < lineText.length; i++) { + ret[i] = { + line: i, + length: lineText[i].length, + lineText: lineText[i], + textStart: /^\s*/.exec(lineText[i])[0].length + }; + } + return ret; +})(); +var endOfDocument = makeCursor(lines.length - 1, + lines[lines.length - 1].length); +var wordLine = lines[0]; +var bigWordLine = lines[1]; +var charLine = lines[2]; +var bracesLine = lines[3]; +var seekBraceLine = lines[4]; + +var word1 = { + start: { line: wordLine.line, ch: 1 }, + end: { line: wordLine.line, ch: 5 } +}; +var word2 = { + start: { line: wordLine.line, ch: word1.end.ch + 2 }, + end: { line: wordLine.line, ch: word1.end.ch + 4 } +}; +var word3 = { + start: { line: bigWordLine.line, ch: 1 }, + end: { line: bigWordLine.line, ch: 5 } +}; +var bigWord1 = word1; +var bigWord2 = word2; +var bigWord3 = { + start: { line: bigWordLine.line, ch: 1 }, + end: { line: bigWordLine.line, ch: 7 } +}; +var bigWord4 = { + start: { line: bigWordLine.line, ch: bigWord1.end.ch + 3 }, + end: { line: bigWordLine.line, ch: bigWord1.end.ch + 7 } +}; + +var oChars = [ { line: charLine.line, ch: 1 }, + { line: charLine.line, ch: 3 }, + { line: charLine.line, ch: 7 } ]; +var pChars = [ { line: charLine.line, ch: 2 }, + { line: charLine.line, ch: 4 }, + { line: charLine.line, ch: 6 }, + { line: charLine.line, ch: 8 } ]; +var numChars = [ { line: charLine.line, ch: 10 }, + { line: charLine.line, ch: 12 }, + { line: charLine.line, ch: 14 }, + { line: charLine.line, ch: 16 }, + { line: charLine.line, ch: 18 }]; +var parens1 = { + start: { line: bracesLine.line, ch: 1 }, + end: { line: bracesLine.line, ch: 3 } +}; +var squares1 = { + start: { line: bracesLine.line, ch: 5 }, + end: { line: bracesLine.line, ch: 7 } +}; +var curlys1 = { + start: { line: bracesLine.line, ch: 9 }, + end: { line: bracesLine.line, ch: 11 } +}; +var seekOutside = { + start: { line: seekBraceLine.line, ch: 1 }, + end: { line: seekBraceLine.line, ch: 16 } +}; +var seekInside = { + start: { line: seekBraceLine.line, ch: 14 }, + end: { line: seekBraceLine.line, ch: 11 } +}; + +function copyCursor(cur) { + return { ch: cur.ch, line: cur.line }; +} + +function testVim(name, run, opts, expectedFail) { + var vimOpts = { + lineNumbers: true, + vimMode: true, + showCursorWhenSelecting: true, + value: code + }; + for (var prop in opts) { + if (opts.hasOwnProperty(prop)) { + vimOpts[prop] = opts[prop]; + } + } + return test('vim_' + name, function() { + var place = document.getElementById("testground"); + var cm = CodeMirror(place, vimOpts); + var vim = CodeMirror.Vim.maybeInitVimState_(cm); + + function doKeysFn(cm) { + return function(args) { + if (args instanceof Array) { + arguments = args; + } + for (var i = 0; i < arguments.length; i++) { + CodeMirror.Vim.handleKey(cm, arguments[i]); + } + } + } + function doInsertModeKeysFn(cm) { + return function(args) { + if (args instanceof Array) { arguments = args; } + function executeHandler(handler) { + if (typeof handler == 'string') { + CodeMirror.commands[handler](cm); + } else { + handler(cm); + } + return true; + } + for (var i = 0; i < arguments.length; i++) { + var key = arguments[i]; + // Find key in keymap and handle. + var handled = CodeMirror.lookupKey(key, ['vim-insert'], executeHandler); + // Record for insert mode. + if (handled === true && cm.state.vim.insertMode && arguments[i] != 'Esc') { + var lastChange = CodeMirror.Vim.getVimGlobalState_().macroModeState.lastInsertModeChanges; + if (lastChange) { + lastChange.changes.push(new CodeMirror.Vim.InsertModeKey(key)); + } + } + } + } + } + function doExFn(cm) { + return function(command) { + cm.openDialog = helpers.fakeOpenDialog(command); + helpers.doKeys(':'); + } + } + function assertCursorAtFn(cm) { + return function(line, ch) { + var pos; + if (ch == null && typeof line.line == 'number') { + pos = line; + } else { + pos = makeCursor(line, ch); + } + eqPos(pos, cm.getCursor()); + } + } + function fakeOpenDialog(result) { + return function(text, callback) { + return callback(result); + } + } + var helpers = { + doKeys: doKeysFn(cm), + // Warning: Only emulates keymap events, not character insertions. Use + // replaceRange to simulate character insertions. + // Keys are in CodeMirror format, NOT vim format. + doInsertModeKeys: doInsertModeKeysFn(cm), + doEx: doExFn(cm), + assertCursorAt: assertCursorAtFn(cm), + fakeOpenDialog: fakeOpenDialog, + getRegisterController: function() { + return CodeMirror.Vim.getRegisterController(); + } + } + CodeMirror.Vim.resetVimGlobalState_(); + var successful = false; + try { + run(cm, vim, helpers); + successful = true; + } finally { + if ((debug && !successful) || verbose) { + place.style.visibility = "visible"; + } else { + place.removeChild(cm.getWrapperElement()); + } + } + }, expectedFail); +}; +testVim('qq@q', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('q', 'q', 'l', 'l', 'q'); + helpers.assertCursorAt(0,2); + helpers.doKeys('@', 'q'); + helpers.assertCursorAt(0,4); +}, { value: ' '}); +testVim('@@', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('q', 'q', 'l', 'l', 'q'); + helpers.assertCursorAt(0,2); + helpers.doKeys('@', 'q'); + helpers.assertCursorAt(0,4); + helpers.doKeys('@', '@'); + helpers.assertCursorAt(0,6); +}, { value: ' '}); +var jumplistScene = ''+ + 'word\n'+ + '(word)\n'+ + '{word\n'+ + 'word.\n'+ + '\n'+ + 'word search\n'+ + '}word\n'+ + 'word\n'+ + 'word\n'; +function testJumplist(name, keys, endPos, startPos, dialog) { + endPos = makeCursor(endPos[0], endPos[1]); + startPos = makeCursor(startPos[0], startPos[1]); + testVim(name, function(cm, vim, helpers) { + CodeMirror.Vim.resetVimGlobalState_(); + if(dialog)cm.openDialog = helpers.fakeOpenDialog('word'); + cm.setCursor(startPos); + helpers.doKeys.apply(null, keys); + helpers.assertCursorAt(endPos); + }, {value: jumplistScene}); +}; +testJumplist('jumplist_H', ['H', ''], [5,2], [5,2]); +testJumplist('jumplist_M', ['M', ''], [2,2], [2,2]); +testJumplist('jumplist_L', ['L', ''], [2,2], [2,2]); +testJumplist('jumplist_[[', ['[', '[', ''], [5,2], [5,2]); +testJumplist('jumplist_]]', [']', ']', ''], [2,2], [2,2]); +testJumplist('jumplist_G', ['G', ''], [5,2], [5,2]); +testJumplist('jumplist_gg', ['g', 'g', ''], [5,2], [5,2]); +testJumplist('jumplist_%', ['%', ''], [1,5], [1,5]); +testJumplist('jumplist_{', ['{', ''], [1,5], [1,5]); +testJumplist('jumplist_}', ['}', ''], [1,5], [1,5]); +testJumplist('jumplist_\'', ['m', 'a', 'h', '\'', 'a', 'h', ''], [1,5], [1,5]); +testJumplist('jumplist_`', ['m', 'a', 'h', '`', 'a', 'h', ''], [1,5], [1,5]); +testJumplist('jumplist_*_cachedCursor', ['*', ''], [1,3], [1,3]); +testJumplist('jumplist_#_cachedCursor', ['#', ''], [1,3], [1,3]); +testJumplist('jumplist_n', ['#', 'n', ''], [1,1], [2,3]); +testJumplist('jumplist_N', ['#', 'N', ''], [1,1], [2,3]); +testJumplist('jumplist_repeat_', ['*', '*', '*', '3', ''], [2,3], [2,3]); +testJumplist('jumplist_repeat_', ['*', '*', '*', '3', '', '2', ''], [5,0], [2,3]); +testJumplist('jumplist_repeated_motion', ['3', '*', ''], [2,3], [2,3]); +testJumplist('jumplist_/', ['/', ''], [2,3], [2,3], 'dialog'); +testJumplist('jumplist_?', ['?', ''], [2,3], [2,3], 'dialog'); +testJumplist('jumplist_skip_delted_mark', + ['*', 'n', 'n', 'k', 'd', 'k', '', '', ''], + [0,2], [0,2]); +testJumplist('jumplist_skip_delted_mark', + ['*', 'n', 'n', 'k', 'd', 'k', '', '', ''], + [1,0], [0,2]); +/** + * @param name Name of the test + * @param keys An array of keys or a string with a single key to simulate. + * @param endPos The expected end position of the cursor. + * @param startPos The position the cursor should start at, defaults to 0, 0. + */ +function testMotion(name, keys, endPos, startPos) { + testVim(name, function(cm, vim, helpers) { + if (!startPos) { + startPos = { line: 0, ch: 0 }; + } + cm.setCursor(startPos); + helpers.doKeys(keys); + helpers.assertCursorAt(endPos); + }); +}; + +function makeCursor(line, ch) { + return { line: line, ch: ch }; +}; + +function offsetCursor(cur, offsetLine, offsetCh) { + return { line: cur.line + offsetLine, ch: cur.ch + offsetCh }; +}; + +// Motion tests +testMotion('|', '|', makeCursor(0, 0), makeCursor(0,4)); +testMotion('|_repeat', ['3', '|'], makeCursor(0, 2), makeCursor(0,4)); +testMotion('h', 'h', makeCursor(0, 0), word1.start); +testMotion('h_repeat', ['3', 'h'], offsetCursor(word1.end, 0, -3), word1.end); +testMotion('l', 'l', makeCursor(0, 1)); +testMotion('l_repeat', ['2', 'l'], makeCursor(0, 2)); +testMotion('j', 'j', offsetCursor(word1.end, 1, 0), word1.end); +testMotion('j_repeat', ['2', 'j'], offsetCursor(word1.end, 2, 0), word1.end); +testMotion('j_repeat_clip', ['1000', 'j'], endOfDocument); +testMotion('k', 'k', offsetCursor(word3.end, -1, 0), word3.end); +testMotion('k_repeat', ['2', 'k'], makeCursor(0, 4), makeCursor(2, 4)); +testMotion('k_repeat_clip', ['1000', 'k'], makeCursor(0, 4), makeCursor(2, 4)); +testMotion('w', 'w', word1.start); +testMotion('w_multiple_newlines_no_space', 'w', makeCursor(12, 2), makeCursor(11, 2)); +testMotion('w_multiple_newlines_with_space', 'w', makeCursor(14, 0), makeCursor(12, 51)); +testMotion('w_repeat', ['2', 'w'], word2.start); +testMotion('w_wrap', ['w'], word3.start, word2.start); +testMotion('w_endOfDocument', 'w', endOfDocument, endOfDocument); +testMotion('w_start_to_end', ['1000', 'w'], endOfDocument, makeCursor(0, 0)); +testMotion('W', 'W', bigWord1.start); +testMotion('W_repeat', ['2', 'W'], bigWord3.start, bigWord1.start); +testMotion('e', 'e', word1.end); +testMotion('e_repeat', ['2', 'e'], word2.end); +testMotion('e_wrap', 'e', word3.end, word2.end); +testMotion('e_endOfDocument', 'e', endOfDocument, endOfDocument); +testMotion('e_start_to_end', ['1000', 'e'], endOfDocument, makeCursor(0, 0)); +testMotion('b', 'b', word3.start, word3.end); +testMotion('b_repeat', ['2', 'b'], word2.start, word3.end); +testMotion('b_wrap', 'b', word2.start, word3.start); +testMotion('b_startOfDocument', 'b', makeCursor(0, 0), makeCursor(0, 0)); +testMotion('b_end_to_start', ['1000', 'b'], makeCursor(0, 0), endOfDocument); +testMotion('ge', ['g', 'e'], word2.end, word3.end); +testMotion('ge_repeat', ['2', 'g', 'e'], word1.end, word3.start); +testMotion('ge_wrap', ['g', 'e'], word2.end, word3.start); +testMotion('ge_startOfDocument', ['g', 'e'], makeCursor(0, 0), + makeCursor(0, 0)); +testMotion('ge_end_to_start', ['1000', 'g', 'e'], makeCursor(0, 0), endOfDocument); +testMotion('gg', ['g', 'g'], makeCursor(lines[0].line, lines[0].textStart), + makeCursor(3, 1)); +testMotion('gg_repeat', ['3', 'g', 'g'], + makeCursor(lines[2].line, lines[2].textStart)); +testMotion('G', 'G', + makeCursor(lines[lines.length - 1].line, lines[lines.length - 1].textStart), + makeCursor(3, 1)); +testMotion('G_repeat', ['3', 'G'], makeCursor(lines[2].line, + lines[2].textStart)); +// TODO: Make the test code long enough to test Ctrl-F and Ctrl-B. +testMotion('0', '0', makeCursor(0, 0), makeCursor(0, 8)); +testMotion('^', '^', makeCursor(0, lines[0].textStart), makeCursor(0, 8)); +testMotion('+', '+', makeCursor(1, lines[1].textStart), makeCursor(0, 8)); +testMotion('-', '-', makeCursor(0, lines[0].textStart), makeCursor(1, 4)); +testMotion('_', ['6','_'], makeCursor(5, lines[5].textStart), makeCursor(0, 8)); +testMotion('$', '$', makeCursor(0, lines[0].length - 1), makeCursor(0, 1)); +testMotion('$_repeat', ['2', '$'], makeCursor(1, lines[1].length - 1), + makeCursor(0, 3)); +testMotion('f', ['f', 'p'], pChars[0], makeCursor(charLine.line, 0)); +testMotion('f_repeat', ['2', 'f', 'p'], pChars[2], pChars[0]); +testMotion('f_num', ['f', '2'], numChars[2], makeCursor(charLine.line, 0)); +testMotion('t', ['t','p'], offsetCursor(pChars[0], 0, -1), + makeCursor(charLine.line, 0)); +testMotion('t_repeat', ['2', 't', 'p'], offsetCursor(pChars[2], 0, -1), + pChars[0]); +testMotion('F', ['F', 'p'], pChars[0], pChars[1]); +testMotion('F_repeat', ['2', 'F', 'p'], pChars[0], pChars[2]); +testMotion('T', ['T', 'p'], offsetCursor(pChars[0], 0, 1), pChars[1]); +testMotion('T_repeat', ['2', 'T', 'p'], offsetCursor(pChars[0], 0, 1), pChars[2]); +testMotion('%_parens', ['%'], parens1.end, parens1.start); +testMotion('%_squares', ['%'], squares1.end, squares1.start); +testMotion('%_braces', ['%'], curlys1.end, curlys1.start); +testMotion('%_seek_outside', ['%'], seekOutside.end, seekOutside.start); +testMotion('%_seek_inside', ['%'], seekInside.end, seekInside.start); +testVim('%_seek_skip', function(cm, vim, helpers) { + cm.setCursor(0,0); + helpers.doKeys(['%']); + helpers.assertCursorAt(0,9); +}, {value:'01234"("()'}); +testVim('%_skip_string', function(cm, vim, helpers) { + cm.setCursor(0,0); + helpers.doKeys(['%']); + helpers.assertCursorAt(0,4); + cm.setCursor(0,2); + helpers.doKeys(['%']); + helpers.assertCursorAt(0,0); +}, {value:'(")")'}); +(')') +testVim('%_skip_comment', function(cm, vim, helpers) { + cm.setCursor(0,0); + helpers.doKeys(['%']); + helpers.assertCursorAt(0,6); + cm.setCursor(0,3); + helpers.doKeys(['%']); + helpers.assertCursorAt(0,0); +}, {value:'(/*)*/)'}); +// Make sure that moving down after going to the end of a line always leaves you +// at the end of a line, but preserves the offset in other cases +testVim('Changing lines after Eol operation', function(cm, vim, helpers) { + cm.setCursor(0,0); + helpers.doKeys(['$']); + helpers.doKeys(['j']); + // After moving to Eol and then down, we should be at Eol of line 2 + helpers.assertCursorAt({ line: 1, ch: lines[1].length - 1 }); + helpers.doKeys(['j']); + // After moving down, we should be at Eol of line 3 + helpers.assertCursorAt({ line: 2, ch: lines[2].length - 1 }); + helpers.doKeys(['h']); + helpers.doKeys(['j']); + // After moving back one space and then down, since line 4 is shorter than line 2, we should + // be at Eol of line 2 - 1 + helpers.assertCursorAt({ line: 3, ch: lines[3].length - 1 }); + helpers.doKeys(['j']); + helpers.doKeys(['j']); + // After moving down again, since line 3 has enough characters, we should be back to the + // same place we were at on line 1 + helpers.assertCursorAt({ line: 5, ch: lines[2].length - 2 }); +}); +//making sure gj and gk recover from clipping +testVim('gj_gk_clipping', function(cm,vim,helpers){ + cm.setCursor(0, 1); + helpers.doKeys('g','j','g','j'); + helpers.assertCursorAt(2, 1); + helpers.doKeys('g','k','g','k'); + helpers.assertCursorAt(0, 1); +},{value: 'line 1\n\nline 2'}); +//testing a mix of j/k and gj/gk +testVim('j_k_and_gj_gk', function(cm,vim,helpers){ + cm.setSize(120); + cm.setCursor(0, 0); + //go to the last character on the first line + helpers.doKeys('$'); + //move up/down on the column within the wrapped line + //side-effect: cursor is not locked to eol anymore + helpers.doKeys('g','k'); + var cur=cm.getCursor(); + eq(cur.line,0); + is((cur.ch<176),'gk didn\'t move cursor back (1)'); + helpers.doKeys('g','j'); + helpers.assertCursorAt(0, 176); + //should move to character 177 on line 2 (j/k preserve character index within line) + helpers.doKeys('j'); + //due to different line wrapping, the cursor can be on a different screen-x now + //gj and gk preserve screen-x on movement, much like moveV + helpers.doKeys('3','g','k'); + cur=cm.getCursor(); + eq(cur.line,1); + is((cur.ch<176),'gk didn\'t move cursor back (2)'); + helpers.doKeys('g','j','2','g','j'); + //should return to the same character-index + helpers.doKeys('k'); + helpers.assertCursorAt(0, 176); +},{ lineWrapping:true, value: 'This line is intentially long to test movement of gj and gk over wrapped lines. I will start on the end of this line, then make a step up and back to set the origin for j and k.\nThis line is supposed to be even longer than the previous. I will jump here and make another wiggle with gj and gk, before I jump back to the line above. Both wiggles should not change my cursor\'s target character but both j/k and gj/gk change each other\'s reference position.'}); +testVim('gj_gk', function(cm, vim, helpers) { + if (phantom) return; + cm.setSize(120); + // Test top of document edge case. + cm.setCursor(0, 4); + helpers.doKeys('g', 'j'); + helpers.doKeys('10', 'g', 'k'); + helpers.assertCursorAt(0, 4); + + // Test moving down preserves column position. + helpers.doKeys('g', 'j'); + var pos1 = cm.getCursor(); + var expectedPos2 = { line: 0, ch: (pos1.ch - 4) * 2 + 4}; + helpers.doKeys('g', 'j'); + helpers.assertCursorAt(expectedPos2); + + // Move to the last character + cm.setCursor(0, 0); + // Move left to reset HSPos + helpers.doKeys('h'); + // Test bottom of document edge case. + helpers.doKeys('100', 'g', 'j'); + var endingPos = cm.getCursor(); + is(endingPos != 0, 'gj should not be on wrapped line 0'); + var topLeftCharCoords = cm.charCoords(makeCursor(0, 0)); + var endingCharCoords = cm.charCoords(endingPos); + is(topLeftCharCoords.left == endingCharCoords.left, 'gj should end up on column 0'); +},{ lineNumbers: false, lineWrapping:true, value: 'Thislineisintentiallylongtotestmovementofgjandgkoverwrappedlines.' }); +testVim('}', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('}'); + helpers.assertCursorAt(1, 0); + cm.setCursor(0, 0); + helpers.doKeys('2', '}'); + helpers.assertCursorAt(4, 0); + cm.setCursor(0, 0); + helpers.doKeys('6', '}'); + helpers.assertCursorAt(5, 0); +}, { value: 'a\n\nb\nc\n\nd' }); +testVim('{', function(cm, vim, helpers) { + cm.setCursor(5, 0); + helpers.doKeys('{'); + helpers.assertCursorAt(4, 0); + cm.setCursor(5, 0); + helpers.doKeys('2', '{'); + helpers.assertCursorAt(1, 0); + cm.setCursor(5, 0); + helpers.doKeys('6', '{'); + helpers.assertCursorAt(0, 0); +}, { value: 'a\n\nb\nc\n\nd' }); + +// Operator tests +testVim('dl', function(cm, vim, helpers) { + var curStart = makeCursor(0, 0); + cm.setCursor(curStart); + helpers.doKeys('d', 'l'); + eq('word1 ', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq(' ', register.text); + is(!register.linewise); + eqPos(curStart, cm.getCursor()); +}, { value: ' word1 ' }); +testVim('dl_eol', function(cm, vim, helpers) { + cm.setCursor(0, 6); + helpers.doKeys('d', 'l'); + eq(' word1', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq(' ', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 5); +}, { value: ' word1 ' }); +testVim('dl_repeat', function(cm, vim, helpers) { + var curStart = makeCursor(0, 0); + cm.setCursor(curStart); + helpers.doKeys('2', 'd', 'l'); + eq('ord1 ', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq(' w', register.text); + is(!register.linewise); + eqPos(curStart, cm.getCursor()); +}, { value: ' word1 ' }); +testVim('dh', function(cm, vim, helpers) { + var curStart = makeCursor(0, 3); + cm.setCursor(curStart); + helpers.doKeys('d', 'h'); + eq(' wrd1 ', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('o', register.text); + is(!register.linewise); + eqPos(offsetCursor(curStart, 0 , -1), cm.getCursor()); +}, { value: ' word1 ' }); +testVim('dj', function(cm, vim, helpers) { + var curStart = makeCursor(0, 3); + cm.setCursor(curStart); + helpers.doKeys('d', 'j'); + eq(' word3', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq(' word1\nword2\n', register.text); + is(register.linewise); + helpers.assertCursorAt(0, 1); +}, { value: ' word1\nword2\n word3' }); +testVim('dj_end_of_document', function(cm, vim, helpers) { + var curStart = makeCursor(0, 3); + cm.setCursor(curStart); + helpers.doKeys('d', 'j'); + eq(' word1 ', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 3); +}, { value: ' word1 ' }); +testVim('dk', function(cm, vim, helpers) { + var curStart = makeCursor(1, 3); + cm.setCursor(curStart); + helpers.doKeys('d', 'k'); + eq(' word3', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq(' word1\nword2\n', register.text); + is(register.linewise); + helpers.assertCursorAt(0, 1); +}, { value: ' word1\nword2\n word3' }); +testVim('dk_start_of_document', function(cm, vim, helpers) { + var curStart = makeCursor(0, 3); + cm.setCursor(curStart); + helpers.doKeys('d', 'k'); + eq(' word1 ', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 3); +}, { value: ' word1 ' }); +testVim('dw_space', function(cm, vim, helpers) { + var curStart = makeCursor(0, 0); + cm.setCursor(curStart); + helpers.doKeys('d', 'w'); + eq('word1 ', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq(' ', register.text); + is(!register.linewise); + eqPos(curStart, cm.getCursor()); +}, { value: ' word1 ' }); +testVim('dw_word', function(cm, vim, helpers) { + var curStart = makeCursor(0, 1); + cm.setCursor(curStart); + helpers.doKeys('d', 'w'); + eq(' word2', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('word1 ', register.text); + is(!register.linewise); + eqPos(curStart, cm.getCursor()); +}, { value: ' word1 word2' }); +testVim('dw_only_word', function(cm, vim, helpers) { + // Test that if there is only 1 word left, dw deletes till the end of the + // line. + cm.setCursor(0, 1); + helpers.doKeys('d', 'w'); + eq(' ', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('word1 ', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 0); +}, { value: ' word1 ' }); +testVim('dw_eol', function(cm, vim, helpers) { + // Assert that dw does not delete the newline if last word to delete is at end + // of line. + cm.setCursor(0, 1); + helpers.doKeys('d', 'w'); + eq(' \nword2', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('word1', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 0); +}, { value: ' word1\nword2' }); +testVim('dw_eol_with_multiple_newlines', function(cm, vim, helpers) { + // Assert that dw does not delete the newline if last word to delete is at end + // of line and it is followed by multiple newlines. + cm.setCursor(0, 1); + helpers.doKeys('d', 'w'); + eq(' \n\nword2', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('word1', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 0); +}, { value: ' word1\n\nword2' }); +testVim('dw_empty_line_followed_by_whitespace', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('d', 'w'); + eq(' \nword', cm.getValue()); +}, { value: '\n \nword' }); +testVim('dw_empty_line_followed_by_word', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('d', 'w'); + eq('word', cm.getValue()); +}, { value: '\nword' }); +testVim('dw_empty_line_followed_by_empty_line', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('d', 'w'); + eq('\n', cm.getValue()); +}, { value: '\n\n' }); +testVim('dw_whitespace_followed_by_whitespace', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('d', 'w'); + eq('\n \n', cm.getValue()); +}, { value: ' \n \n' }); +testVim('dw_whitespace_followed_by_empty_line', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('d', 'w'); + eq('\n\n', cm.getValue()); +}, { value: ' \n\n' }); +testVim('dw_word_whitespace_word', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('d', 'w'); + eq('\n \nword2', cm.getValue()); +}, { value: 'word1\n \nword2'}) +testVim('dw_end_of_document', function(cm, vim, helpers) { + cm.setCursor(1, 2); + helpers.doKeys('d', 'w'); + eq('\nab', cm.getValue()); +}, { value: '\nabc' }); +testVim('dw_repeat', function(cm, vim, helpers) { + // Assert that dw does delete newline if it should go to the next line, and + // that repeat works properly. + cm.setCursor(0, 1); + helpers.doKeys('d', '2', 'w'); + eq(' ', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('word1\nword2', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 0); +}, { value: ' word1\nword2' }); +testVim('de_word_start_and_empty_lines', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('d', 'e'); + eq('\n\n', cm.getValue()); +}, { value: 'word\n\n' }); +testVim('de_word_end_and_empty_lines', function(cm, vim, helpers) { + cm.setCursor(0, 3); + helpers.doKeys('d', 'e'); + eq('wor', cm.getValue()); +}, { value: 'word\n\n\n' }); +testVim('de_whitespace_and_empty_lines', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('d', 'e'); + eq('', cm.getValue()); +}, { value: ' \n\n\n' }); +testVim('de_end_of_document', function(cm, vim, helpers) { + cm.setCursor(1, 2); + helpers.doKeys('d', 'e'); + eq('\nab', cm.getValue()); +}, { value: '\nabc' }); +testVim('db_empty_lines', function(cm, vim, helpers) { + cm.setCursor(2, 0); + helpers.doKeys('d', 'b'); + eq('\n\n', cm.getValue()); +}, { value: '\n\n\n' }); +testVim('db_word_start_and_empty_lines', function(cm, vim, helpers) { + cm.setCursor(2, 0); + helpers.doKeys('d', 'b'); + eq('\nword', cm.getValue()); +}, { value: '\n\nword' }); +testVim('db_word_end_and_empty_lines', function(cm, vim, helpers) { + cm.setCursor(2, 3); + helpers.doKeys('d', 'b'); + eq('\n\nd', cm.getValue()); +}, { value: '\n\nword' }); +testVim('db_whitespace_and_empty_lines', function(cm, vim, helpers) { + cm.setCursor(2, 0); + helpers.doKeys('d', 'b'); + eq('', cm.getValue()); +}, { value: '\n \n' }); +testVim('db_start_of_document', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('d', 'b'); + eq('abc\n', cm.getValue()); +}, { value: 'abc\n' }); +testVim('dge_empty_lines', function(cm, vim, helpers) { + cm.setCursor(1, 0); + helpers.doKeys('d', 'g', 'e'); + // Note: In real VIM the result should be '', but it's not quite consistent, + // since 2 newlines are deleted. But in the similar case of word\n\n, only + // 1 newline is deleted. We'll diverge from VIM's behavior since it's much + // easier this way. + eq('\n', cm.getValue()); +}, { value: '\n\n' }); +testVim('dge_word_and_empty_lines', function(cm, vim, helpers) { + cm.setCursor(1, 0); + helpers.doKeys('d', 'g', 'e'); + eq('wor\n', cm.getValue()); +}, { value: 'word\n\n'}); +testVim('dge_whitespace_and_empty_lines', function(cm, vim, helpers) { + cm.setCursor(2, 0); + helpers.doKeys('d', 'g', 'e'); + eq('', cm.getValue()); +}, { value: '\n \n' }); +testVim('dge_start_of_document', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('d', 'g', 'e'); + eq('bc\n', cm.getValue()); +}, { value: 'abc\n' }); +testVim('d_inclusive', function(cm, vim, helpers) { + // Assert that when inclusive is set, the character the cursor is on gets + // deleted too. + var curStart = makeCursor(0, 1); + cm.setCursor(curStart); + helpers.doKeys('d', 'e'); + eq(' ', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('word1', register.text); + is(!register.linewise); + eqPos(curStart, cm.getCursor()); +}, { value: ' word1 ' }); +testVim('d_reverse', function(cm, vim, helpers) { + // Test that deleting in reverse works. + cm.setCursor(1, 0); + helpers.doKeys('d', 'b'); + eq(' word2 ', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('word1\n', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 1); +}, { value: ' word1\nword2 ' }); +testVim('dd', function(cm, vim, helpers) { + cm.setCursor(0, 3); + var expectedBuffer = cm.getRange({ line: 0, ch: 0 }, + { line: 1, ch: 0 }); + var expectedLineCount = cm.lineCount() - 1; + helpers.doKeys('d', 'd'); + eq(expectedLineCount, cm.lineCount()); + var register = helpers.getRegisterController().getRegister(); + eq(expectedBuffer, register.text); + is(register.linewise); + helpers.assertCursorAt(0, lines[1].textStart); +}); +testVim('dd_prefix_repeat', function(cm, vim, helpers) { + cm.setCursor(0, 3); + var expectedBuffer = cm.getRange({ line: 0, ch: 0 }, + { line: 2, ch: 0 }); + var expectedLineCount = cm.lineCount() - 2; + helpers.doKeys('2', 'd', 'd'); + eq(expectedLineCount, cm.lineCount()); + var register = helpers.getRegisterController().getRegister(); + eq(expectedBuffer, register.text); + is(register.linewise); + helpers.assertCursorAt(0, lines[2].textStart); +}); +testVim('dd_motion_repeat', function(cm, vim, helpers) { + cm.setCursor(0, 3); + var expectedBuffer = cm.getRange({ line: 0, ch: 0 }, + { line: 2, ch: 0 }); + var expectedLineCount = cm.lineCount() - 2; + helpers.doKeys('d', '2', 'd'); + eq(expectedLineCount, cm.lineCount()); + var register = helpers.getRegisterController().getRegister(); + eq(expectedBuffer, register.text); + is(register.linewise); + helpers.assertCursorAt(0, lines[2].textStart); +}); +testVim('dd_multiply_repeat', function(cm, vim, helpers) { + cm.setCursor(0, 3); + var expectedBuffer = cm.getRange({ line: 0, ch: 0 }, + { line: 6, ch: 0 }); + var expectedLineCount = cm.lineCount() - 6; + helpers.doKeys('2', 'd', '3', 'd'); + eq(expectedLineCount, cm.lineCount()); + var register = helpers.getRegisterController().getRegister(); + eq(expectedBuffer, register.text); + is(register.linewise); + helpers.assertCursorAt(0, lines[6].textStart); +}); +testVim('dd_lastline', function(cm, vim, helpers) { + cm.setCursor(cm.lineCount(), 0); + var expectedLineCount = cm.lineCount() - 1; + helpers.doKeys('d', 'd'); + eq(expectedLineCount, cm.lineCount()); + helpers.assertCursorAt(cm.lineCount() - 1, 0); +}); +// Yank commands should behave the exact same as d commands, expect that nothing +// gets deleted. +testVim('yw_repeat', function(cm, vim, helpers) { + // Assert that yw does yank newline if it should go to the next line, and + // that repeat works properly. + var curStart = makeCursor(0, 1); + cm.setCursor(curStart); + helpers.doKeys('y', '2', 'w'); + eq(' word1\nword2', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('word1\nword2', register.text); + is(!register.linewise); + eqPos(curStart, cm.getCursor()); +}, { value: ' word1\nword2' }); +testVim('yy_multiply_repeat', function(cm, vim, helpers) { + var curStart = makeCursor(0, 3); + cm.setCursor(curStart); + var expectedBuffer = cm.getRange({ line: 0, ch: 0 }, + { line: 6, ch: 0 }); + var expectedLineCount = cm.lineCount(); + helpers.doKeys('2', 'y', '3', 'y'); + eq(expectedLineCount, cm.lineCount()); + var register = helpers.getRegisterController().getRegister(); + eq(expectedBuffer, register.text); + is(register.linewise); + eqPos(curStart, cm.getCursor()); +}); +// Change commands behave like d commands except that it also enters insert +// mode. In addition, when the change is linewise, an additional newline is +// inserted so that insert mode starts on that line. +testVim('cw', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('c', '2', 'w'); + eq(' word3', cm.getValue()); + helpers.assertCursorAt(0, 0); +}, { value: 'word1 word2 word3'}); +testVim('cw_repeat', function(cm, vim, helpers) { + // Assert that cw does delete newline if it should go to the next line, and + // that repeat works properly. + var curStart = makeCursor(0, 1); + cm.setCursor(curStart); + helpers.doKeys('c', '2', 'w'); + eq(' ', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('word1\nword2', register.text); + is(!register.linewise); + eqPos(curStart, cm.getCursor()); + eq('vim-insert', cm.getOption('keyMap')); +}, { value: ' word1\nword2' }); +testVim('cc_multiply_repeat', function(cm, vim, helpers) { + cm.setCursor(0, 3); + var expectedBuffer = cm.getRange({ line: 0, ch: 0 }, + { line: 6, ch: 0 }); + var expectedLineCount = cm.lineCount() - 5; + helpers.doKeys('2', 'c', '3', 'c'); + eq(expectedLineCount, cm.lineCount()); + var register = helpers.getRegisterController().getRegister(); + eq(expectedBuffer, register.text); + is(register.linewise); + eq('vim-insert', cm.getOption('keyMap')); +}); +testVim('cc_append', function(cm, vim, helpers) { + var expectedLineCount = cm.lineCount(); + cm.setCursor(cm.lastLine(), 0); + helpers.doKeys('c', 'c'); + eq(expectedLineCount, cm.lineCount()); +}); +// Swapcase commands edit in place and do not modify registers. +testVim('g~w_repeat', function(cm, vim, helpers) { + // Assert that dw does delete newline if it should go to the next line, and + // that repeat works properly. + var curStart = makeCursor(0, 1); + cm.setCursor(curStart); + helpers.doKeys('g', '~', '2', 'w'); + eq(' WORD1\nWORD2', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('', register.text); + is(!register.linewise); + eqPos(curStart, cm.getCursor()); +}, { value: ' word1\nword2' }); +testVim('g~g~', function(cm, vim, helpers) { + var curStart = makeCursor(0, 3); + cm.setCursor(curStart); + var expectedLineCount = cm.lineCount(); + var expectedValue = cm.getValue().toUpperCase(); + helpers.doKeys('2', 'g', '~', '3', 'g', '~'); + eq(expectedValue, cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('', register.text); + is(!register.linewise); + eqPos(curStart, cm.getCursor()); +}, { value: ' word1\nword2\nword3\nword4\nword5\nword6' }); +testVim('>{motion}', function(cm, vim, helpers) { + cm.setCursor(1, 3); + var expectedLineCount = cm.lineCount(); + var expectedValue = ' word1\n word2\nword3 '; + helpers.doKeys('>', 'k'); + eq(expectedValue, cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 3); +}, { value: ' word1\nword2\nword3 ', indentUnit: 2 }); +testVim('>>', function(cm, vim, helpers) { + cm.setCursor(0, 3); + var expectedLineCount = cm.lineCount(); + var expectedValue = ' word1\n word2\nword3 '; + helpers.doKeys('2', '>', '>'); + eq(expectedValue, cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 3); +}, { value: ' word1\nword2\nword3 ', indentUnit: 2 }); +testVim('<{motion}', function(cm, vim, helpers) { + cm.setCursor(1, 3); + var expectedLineCount = cm.lineCount(); + var expectedValue = ' word1\nword2\nword3 '; + helpers.doKeys('<', 'k'); + eq(expectedValue, cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 1); +}, { value: ' word1\n word2\nword3 ', indentUnit: 2 }); +testVim('<<', function(cm, vim, helpers) { + cm.setCursor(0, 3); + var expectedLineCount = cm.lineCount(); + var expectedValue = ' word1\nword2\nword3 '; + helpers.doKeys('2', '<', '<'); + eq(expectedValue, cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 1); +}, { value: ' word1\n word2\nword3 ', indentUnit: 2 }); + +// Edit tests +function testEdit(name, before, pos, edit, after) { + return testVim(name, function(cm, vim, helpers) { + cm.setCursor(0, before.search(pos)); + helpers.doKeys.apply(this, edit.split('')); + eq(after, cm.getValue()); + }, {value: before}); +} + +// These Delete tests effectively cover word-wise Change, Visual & Yank. +// Tabs are used as differentiated whitespace to catch edge cases. +// Normal word: +testEdit('diw_mid_spc', 'foo \tbAr\t baz', /A/, 'diw', 'foo \t\t baz'); +testEdit('daw_mid_spc', 'foo \tbAr\t baz', /A/, 'daw', 'foo \tbaz'); +testEdit('diw_mid_punct', 'foo \tbAr.\t baz', /A/, 'diw', 'foo \t.\t baz'); +testEdit('daw_mid_punct', 'foo \tbAr.\t baz', /A/, 'daw', 'foo.\t baz'); +testEdit('diw_mid_punct2', 'foo \t,bAr.\t baz', /A/, 'diw', 'foo \t,.\t baz'); +testEdit('daw_mid_punct2', 'foo \t,bAr.\t baz', /A/, 'daw', 'foo \t,.\t baz'); +testEdit('diw_start_spc', 'bAr \tbaz', /A/, 'diw', ' \tbaz'); +testEdit('daw_start_spc', 'bAr \tbaz', /A/, 'daw', 'baz'); +testEdit('diw_start_punct', 'bAr. \tbaz', /A/, 'diw', '. \tbaz'); +testEdit('daw_start_punct', 'bAr. \tbaz', /A/, 'daw', '. \tbaz'); +testEdit('diw_end_spc', 'foo \tbAr', /A/, 'diw', 'foo \t'); +testEdit('daw_end_spc', 'foo \tbAr', /A/, 'daw', 'foo'); +testEdit('diw_end_punct', 'foo \tbAr.', /A/, 'diw', 'foo \t.'); +testEdit('daw_end_punct', 'foo \tbAr.', /A/, 'daw', 'foo.'); +// Big word: +testEdit('diW_mid_spc', 'foo \tbAr\t baz', /A/, 'diW', 'foo \t\t baz'); +testEdit('daW_mid_spc', 'foo \tbAr\t baz', /A/, 'daW', 'foo \tbaz'); +testEdit('diW_mid_punct', 'foo \tbAr.\t baz', /A/, 'diW', 'foo \t\t baz'); +testEdit('daW_mid_punct', 'foo \tbAr.\t baz', /A/, 'daW', 'foo \tbaz'); +testEdit('diW_mid_punct2', 'foo \t,bAr.\t baz', /A/, 'diW', 'foo \t\t baz'); +testEdit('daW_mid_punct2', 'foo \t,bAr.\t baz', /A/, 'daW', 'foo \tbaz'); +testEdit('diW_start_spc', 'bAr\t baz', /A/, 'diW', '\t baz'); +testEdit('daW_start_spc', 'bAr\t baz', /A/, 'daW', 'baz'); +testEdit('diW_start_punct', 'bAr.\t baz', /A/, 'diW', '\t baz'); +testEdit('daW_start_punct', 'bAr.\t baz', /A/, 'daW', 'baz'); +testEdit('diW_end_spc', 'foo \tbAr', /A/, 'diW', 'foo \t'); +testEdit('daW_end_spc', 'foo \tbAr', /A/, 'daW', 'foo'); +testEdit('diW_end_punct', 'foo \tbAr.', /A/, 'diW', 'foo \t'); +testEdit('daW_end_punct', 'foo \tbAr.', /A/, 'daW', 'foo'); + +// Operator-motion tests +testVim('D', function(cm, vim, helpers) { + cm.setCursor(0, 3); + helpers.doKeys('D'); + eq(' wo\nword2\n word3', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('rd1', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 2); +}, { value: ' word1\nword2\n word3' }); +testVim('C', function(cm, vim, helpers) { + var curStart = makeCursor(0, 3); + cm.setCursor(curStart); + helpers.doKeys('C'); + eq(' wo\nword2\n word3', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('rd1', register.text); + is(!register.linewise); + eqPos(curStart, cm.getCursor()); + eq('vim-insert', cm.getOption('keyMap')); +}, { value: ' word1\nword2\n word3' }); +testVim('Y', function(cm, vim, helpers) { + var curStart = makeCursor(0, 3); + cm.setCursor(curStart); + helpers.doKeys('Y'); + eq(' word1\nword2\n word3', cm.getValue()); + var register = helpers.getRegisterController().getRegister(); + eq('rd1', register.text); + is(!register.linewise); + helpers.assertCursorAt(0, 3); +}, { value: ' word1\nword2\n word3' }); +testVim('~', function(cm, vim, helpers) { + helpers.doKeys('3', '~'); + eq('ABCdefg', cm.getValue()); + helpers.assertCursorAt(0, 3); +}, { value: 'abcdefg' }); + +// Action tests +testVim('ctrl-a', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys(''); + eq('-9', cm.getValue()); + helpers.assertCursorAt(0, 1); + helpers.doKeys('2',''); + eq('-7', cm.getValue()); +}, {value: '-10'}); +testVim('ctrl-x', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys(''); + eq('-1', cm.getValue()); + helpers.assertCursorAt(0, 1); + helpers.doKeys('2',''); + eq('-3', cm.getValue()); +}, {value: '0'}); +testVim('/ search forward', function(cm, vim, helpers) { + ['', ''].forEach(function(key) { + cm.setCursor(0, 0); + helpers.doKeys(key); + helpers.assertCursorAt(0, 5); + helpers.doKeys('l'); + helpers.doKeys(key); + helpers.assertCursorAt(0, 10); + cm.setCursor(0, 11); + helpers.doKeys(key); + helpers.assertCursorAt(0, 11); + }); +}, {value: '__jmp1 jmp2 jmp'}); +testVim('a', function(cm, vim, helpers) { + cm.setCursor(0, 1); + helpers.doKeys('a'); + helpers.assertCursorAt(0, 2); + eq('vim-insert', cm.getOption('keyMap')); +}); +testVim('a_eol', function(cm, vim, helpers) { + cm.setCursor(0, lines[0].length - 1); + helpers.doKeys('a'); + helpers.assertCursorAt(0, lines[0].length); + eq('vim-insert', cm.getOption('keyMap')); +}); +testVim('i', function(cm, vim, helpers) { + cm.setCursor(0, 1); + helpers.doKeys('i'); + helpers.assertCursorAt(0, 1); + eq('vim-insert', cm.getOption('keyMap')); +}); +testVim('i_repeat', function(cm, vim, helpers) { + helpers.doKeys('3', 'i'); + cm.replaceRange('test', cm.getCursor()); + helpers.doInsertModeKeys('Esc'); + eq('testtesttest', cm.getValue()); + helpers.assertCursorAt(0, 11); +}, { value: '' }); +testVim('i_repeat_delete', function(cm, vim, helpers) { + cm.setCursor(0, 4); + helpers.doKeys('2', 'i'); + cm.replaceRange('z', cm.getCursor()); + helpers.doInsertModeKeys('Backspace', 'Backspace', 'Esc'); + eq('abe', cm.getValue()); + helpers.assertCursorAt(0, 1); +}, { value: 'abcde' }); +testVim('A', function(cm, vim, helpers) { + helpers.doKeys('A'); + helpers.assertCursorAt(0, lines[0].length); + eq('vim-insert', cm.getOption('keyMap')); +}); +testVim('I', function(cm, vim, helpers) { + cm.setCursor(0, 4); + helpers.doKeys('I'); + helpers.assertCursorAt(0, lines[0].textStart); + eq('vim-insert', cm.getOption('keyMap')); +}); +testVim('I_repeat', function(cm, vim, helpers) { + cm.setCursor(0, 1); + helpers.doKeys('3', 'I'); + cm.replaceRange('test', cm.getCursor()); + helpers.doInsertModeKeys('Esc'); + eq('testtesttestblah', cm.getValue()); + helpers.assertCursorAt(0, 11); +}, { value: 'blah' }); +testVim('o', function(cm, vim, helpers) { + cm.setCursor(0, 4); + helpers.doKeys('o'); + eq('word1\n\nword2', cm.getValue()); + helpers.assertCursorAt(1, 0); + eq('vim-insert', cm.getOption('keyMap')); +}, { value: 'word1\nword2' }); +testVim('o_repeat', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('3', 'o'); + cm.replaceRange('test', cm.getCursor()); + helpers.doInsertModeKeys('Esc'); + eq('\ntest\ntest\ntest', cm.getValue()); + helpers.assertCursorAt(3, 3); +}, { value: '' }); +testVim('O', function(cm, vim, helpers) { + cm.setCursor(0, 4); + helpers.doKeys('O'); + eq('\nword1\nword2', cm.getValue()); + helpers.assertCursorAt(0, 0); + eq('vim-insert', cm.getOption('keyMap')); +}, { value: 'word1\nword2' }); +testVim('J', function(cm, vim, helpers) { + cm.setCursor(0, 4); + helpers.doKeys('J'); + var expectedValue = 'word1 word2\nword3\n word4'; + eq(expectedValue, cm.getValue()); + helpers.assertCursorAt(0, expectedValue.indexOf('word2') - 1); +}, { value: 'word1 \n word2\nword3\n word4' }); +testVim('J_repeat', function(cm, vim, helpers) { + cm.setCursor(0, 4); + helpers.doKeys('3', 'J'); + var expectedValue = 'word1 word2 word3\n word4'; + eq(expectedValue, cm.getValue()); + helpers.assertCursorAt(0, expectedValue.indexOf('word3') - 1); +}, { value: 'word1 \n word2\nword3\n word4' }); +testVim('p', function(cm, vim, helpers) { + cm.setCursor(0, 1); + helpers.getRegisterController().pushText('"', 'yank', 'abc\ndef', false); + helpers.doKeys('p'); + eq('__abc\ndef_', cm.getValue()); + helpers.assertCursorAt(1, 2); +}, { value: '___' }); +testVim('p_register', function(cm, vim, helpers) { + cm.setCursor(0, 1); + helpers.getRegisterController().getRegister('a').set('abc\ndef', false); + helpers.doKeys('"', 'a', 'p'); + eq('__abc\ndef_', cm.getValue()); + helpers.assertCursorAt(1, 2); +}, { value: '___' }); +testVim('p_wrong_register', function(cm, vim, helpers) { + cm.setCursor(0, 1); + helpers.getRegisterController().getRegister('a').set('abc\ndef', false); + helpers.doKeys('p'); + eq('___', cm.getValue()); + helpers.assertCursorAt(0, 1); +}, { value: '___' }); +testVim('p_line', function(cm, vim, helpers) { + cm.setCursor(0, 1); + helpers.getRegisterController().pushText('"', 'yank', ' a\nd\n', true); + helpers.doKeys('2', 'p'); + eq('___\n a\nd\n a\nd', cm.getValue()); + helpers.assertCursorAt(1, 2); +}, { value: '___' }); +testVim('P', function(cm, vim, helpers) { + cm.setCursor(0, 1); + helpers.getRegisterController().pushText('"', 'yank', 'abc\ndef', false); + helpers.doKeys('P'); + eq('_abc\ndef__', cm.getValue()); + helpers.assertCursorAt(1, 3); +}, { value: '___' }); +testVim('P_line', function(cm, vim, helpers) { + cm.setCursor(0, 1); + helpers.getRegisterController().pushText('"', 'yank', ' a\nd\n', true); + helpers.doKeys('2', 'P'); + eq(' a\nd\n a\nd\n___', cm.getValue()); + helpers.assertCursorAt(0, 2); +}, { value: '___' }); +testVim('r', function(cm, vim, helpers) { + cm.setCursor(0, 1); + helpers.doKeys('3', 'r', 'u'); + eq('wuuuet\nanother', cm.getValue(),'3r failed'); + helpers.assertCursorAt(0, 3); + cm.setCursor(0, 4); + helpers.doKeys('v', 'j', 'h', 'r', ''); + eq('wuuu \n her', cm.getValue(),'Replacing selection by space-characters failed'); +}, { value: 'wordet\nanother' }); +testVim('R', function(cm, vim, helpers) { + cm.setCursor(0, 1); + helpers.doKeys('R'); + helpers.assertCursorAt(0, 1); + eq('vim-replace', cm.getOption('keyMap')); + is(cm.state.overwrite, 'Setting overwrite state failed'); +}); +testVim('mark', function(cm, vim, helpers) { + cm.setCursor(2, 2); + helpers.doKeys('m', 't'); + cm.setCursor(0, 0); + helpers.doKeys('\'', 't'); + helpers.assertCursorAt(2, 2); + cm.setCursor(0, 0); + helpers.doKeys('`', 't'); + helpers.assertCursorAt(2, 2); +}); +testVim('jumpToMark_next', function(cm, vim, helpers) { + cm.setCursor(2, 2); + helpers.doKeys('m', 't'); + cm.setCursor(0, 0); + helpers.doKeys(']', '`'); + helpers.assertCursorAt(2, 2); + cm.setCursor(0, 0); + helpers.doKeys(']', '\''); + helpers.assertCursorAt(2, 0); +}); +testVim('jumpToMark_next_repeat', function(cm, vim, helpers) { + cm.setCursor(2, 2); + helpers.doKeys('m', 'a'); + cm.setCursor(3, 2); + helpers.doKeys('m', 'b'); + cm.setCursor(4, 2); + helpers.doKeys('m', 'c'); + cm.setCursor(0, 0); + helpers.doKeys('2', ']', '`'); + helpers.assertCursorAt(3, 2); + cm.setCursor(0, 0); + helpers.doKeys('2', ']', '\''); + helpers.assertCursorAt(3, 1); +}); +testVim('jumpToMark_next_sameline', function(cm, vim, helpers) { + cm.setCursor(2, 0); + helpers.doKeys('m', 'a'); + cm.setCursor(2, 4); + helpers.doKeys('m', 'b'); + cm.setCursor(2, 2); + helpers.doKeys(']', '`'); + helpers.assertCursorAt(2, 4); +}); +testVim('jumpToMark_next_onlyprev', function(cm, vim, helpers) { + cm.setCursor(2, 0); + helpers.doKeys('m', 'a'); + cm.setCursor(4, 0); + helpers.doKeys(']', '`'); + helpers.assertCursorAt(4, 0); +}); +testVim('jumpToMark_next_nomark', function(cm, vim, helpers) { + cm.setCursor(2, 2); + helpers.doKeys(']', '`'); + helpers.assertCursorAt(2, 2); + helpers.doKeys(']', '\''); + helpers.assertCursorAt(2, 0); +}); +testVim('jumpToMark_next_linewise_over', function(cm, vim, helpers) { + cm.setCursor(2, 2); + helpers.doKeys('m', 'a'); + cm.setCursor(3, 4); + helpers.doKeys('m', 'b'); + cm.setCursor(2, 1); + helpers.doKeys(']', '\''); + helpers.assertCursorAt(3, 1); +}); +testVim('jumpToMark_next_action', function(cm, vim, helpers) { + cm.setCursor(2, 2); + helpers.doKeys('m', 't'); + cm.setCursor(0, 0); + helpers.doKeys('d', ']', '`'); + helpers.assertCursorAt(0, 0); + var actual = cm.getLine(0); + var expected = 'pop pop 0 1 2 3 4'; + eq(actual, expected, "Deleting while jumping to the next mark failed."); +}); +testVim('jumpToMark_next_line_action', function(cm, vim, helpers) { + cm.setCursor(2, 2); + helpers.doKeys('m', 't'); + cm.setCursor(0, 0); + helpers.doKeys('d', ']', '\''); + helpers.assertCursorAt(0, 1); + var actual = cm.getLine(0); + var expected = ' (a) [b] {c} ' + eq(actual, expected, "Deleting while jumping to the next mark line failed."); +}); +testVim('jumpToMark_prev', function(cm, vim, helpers) { + cm.setCursor(2, 2); + helpers.doKeys('m', 't'); + cm.setCursor(4, 0); + helpers.doKeys('[', '`'); + helpers.assertCursorAt(2, 2); + cm.setCursor(4, 0); + helpers.doKeys('[', '\''); + helpers.assertCursorAt(2, 0); +}); +testVim('jumpToMark_prev_repeat', function(cm, vim, helpers) { + cm.setCursor(2, 2); + helpers.doKeys('m', 'a'); + cm.setCursor(3, 2); + helpers.doKeys('m', 'b'); + cm.setCursor(4, 2); + helpers.doKeys('m', 'c'); + cm.setCursor(5, 0); + helpers.doKeys('2', '[', '`'); + helpers.assertCursorAt(3, 2); + cm.setCursor(5, 0); + helpers.doKeys('2', '[', '\''); + helpers.assertCursorAt(3, 1); +}); +testVim('jumpToMark_prev_sameline', function(cm, vim, helpers) { + cm.setCursor(2, 0); + helpers.doKeys('m', 'a'); + cm.setCursor(2, 4); + helpers.doKeys('m', 'b'); + cm.setCursor(2, 2); + helpers.doKeys('[', '`'); + helpers.assertCursorAt(2, 0); +}); +testVim('jumpToMark_prev_onlynext', function(cm, vim, helpers) { + cm.setCursor(4, 4); + helpers.doKeys('m', 'a'); + cm.setCursor(2, 0); + helpers.doKeys('[', '`'); + helpers.assertCursorAt(2, 0); +}); +testVim('jumpToMark_prev_nomark', function(cm, vim, helpers) { + cm.setCursor(2, 2); + helpers.doKeys('[', '`'); + helpers.assertCursorAt(2, 2); + helpers.doKeys('[', '\''); + helpers.assertCursorAt(2, 0); +}); +testVim('jumpToMark_prev_linewise_over', function(cm, vim, helpers) { + cm.setCursor(2, 2); + helpers.doKeys('m', 'a'); + cm.setCursor(3, 4); + helpers.doKeys('m', 'b'); + cm.setCursor(3, 6); + helpers.doKeys('[', '\''); + helpers.assertCursorAt(2, 0); +}); +testVim('delmark_single', function(cm, vim, helpers) { + cm.setCursor(1, 2); + helpers.doKeys('m', 't'); + helpers.doEx('delmarks t'); + cm.setCursor(0, 0); + helpers.doKeys('`', 't'); + helpers.assertCursorAt(0, 0); +}); +testVim('delmark_range', function(cm, vim, helpers) { + cm.setCursor(1, 2); + helpers.doKeys('m', 'a'); + cm.setCursor(2, 2); + helpers.doKeys('m', 'b'); + cm.setCursor(3, 2); + helpers.doKeys('m', 'c'); + cm.setCursor(4, 2); + helpers.doKeys('m', 'd'); + cm.setCursor(5, 2); + helpers.doKeys('m', 'e'); + helpers.doEx('delmarks b-d'); + cm.setCursor(0, 0); + helpers.doKeys('`', 'a'); + helpers.assertCursorAt(1, 2); + helpers.doKeys('`', 'b'); + helpers.assertCursorAt(1, 2); + helpers.doKeys('`', 'c'); + helpers.assertCursorAt(1, 2); + helpers.doKeys('`', 'd'); + helpers.assertCursorAt(1, 2); + helpers.doKeys('`', 'e'); + helpers.assertCursorAt(5, 2); +}); +testVim('delmark_multi', function(cm, vim, helpers) { + cm.setCursor(1, 2); + helpers.doKeys('m', 'a'); + cm.setCursor(2, 2); + helpers.doKeys('m', 'b'); + cm.setCursor(3, 2); + helpers.doKeys('m', 'c'); + cm.setCursor(4, 2); + helpers.doKeys('m', 'd'); + cm.setCursor(5, 2); + helpers.doKeys('m', 'e'); + helpers.doEx('delmarks bcd'); + cm.setCursor(0, 0); + helpers.doKeys('`', 'a'); + helpers.assertCursorAt(1, 2); + helpers.doKeys('`', 'b'); + helpers.assertCursorAt(1, 2); + helpers.doKeys('`', 'c'); + helpers.assertCursorAt(1, 2); + helpers.doKeys('`', 'd'); + helpers.assertCursorAt(1, 2); + helpers.doKeys('`', 'e'); + helpers.assertCursorAt(5, 2); +}); +testVim('delmark_multi_space', function(cm, vim, helpers) { + cm.setCursor(1, 2); + helpers.doKeys('m', 'a'); + cm.setCursor(2, 2); + helpers.doKeys('m', 'b'); + cm.setCursor(3, 2); + helpers.doKeys('m', 'c'); + cm.setCursor(4, 2); + helpers.doKeys('m', 'd'); + cm.setCursor(5, 2); + helpers.doKeys('m', 'e'); + helpers.doEx('delmarks b c d'); + cm.setCursor(0, 0); + helpers.doKeys('`', 'a'); + helpers.assertCursorAt(1, 2); + helpers.doKeys('`', 'b'); + helpers.assertCursorAt(1, 2); + helpers.doKeys('`', 'c'); + helpers.assertCursorAt(1, 2); + helpers.doKeys('`', 'd'); + helpers.assertCursorAt(1, 2); + helpers.doKeys('`', 'e'); + helpers.assertCursorAt(5, 2); +}); +testVim('delmark_all', function(cm, vim, helpers) { + cm.setCursor(1, 2); + helpers.doKeys('m', 'a'); + cm.setCursor(2, 2); + helpers.doKeys('m', 'b'); + cm.setCursor(3, 2); + helpers.doKeys('m', 'c'); + cm.setCursor(4, 2); + helpers.doKeys('m', 'd'); + cm.setCursor(5, 2); + helpers.doKeys('m', 'e'); + helpers.doEx('delmarks a b-de'); + cm.setCursor(0, 0); + helpers.doKeys('`', 'a'); + helpers.assertCursorAt(0, 0); + helpers.doKeys('`', 'b'); + helpers.assertCursorAt(0, 0); + helpers.doKeys('`', 'c'); + helpers.assertCursorAt(0, 0); + helpers.doKeys('`', 'd'); + helpers.assertCursorAt(0, 0); + helpers.doKeys('`', 'e'); + helpers.assertCursorAt(0, 0); +}); +testVim('visual', function(cm, vim, helpers) { + helpers.doKeys('l', 'v', 'l', 'l'); + helpers.assertCursorAt(0, 3); + eqPos(makeCursor(0, 1), cm.getCursor('anchor')); + helpers.doKeys('d'); + eq('15', cm.getValue()); +}, { value: '12345' }); +testVim('visual_line', function(cm, vim, helpers) { + helpers.doKeys('l', 'V', 'l', 'j', 'j', 'd'); + eq(' 4\n 5', cm.getValue()); +}, { value: ' 1\n 2\n 3\n 4\n 5' }); +testVim('visual_marks', function(cm, vim, helpers) { + helpers.doKeys('l', 'v', 'l', 'l', 'v'); + // Test visual mode marks + cm.setCursor(0, 0); + helpers.doKeys('\'', '<'); + helpers.assertCursorAt(0, 1); + helpers.doKeys('\'', '>'); + helpers.assertCursorAt(0, 3); +}); +testVim('visual_join', function(cm, vim, helpers) { + helpers.doKeys('l', 'V', 'l', 'j', 'j', 'J'); + eq(' 1 2 3\n 4\n 5', cm.getValue()); +}, { value: ' 1\n 2\n 3\n 4\n 5' }); +testVim('visual_blank', function(cm, vim, helpers) { + helpers.doKeys('v', 'k'); + eq(vim.visualMode, true); +}, { value: '\n' }); +testVim('/ and n/N', function(cm, vim, helpers) { + cm.openDialog = helpers.fakeOpenDialog('match'); + helpers.doKeys('/'); + helpers.assertCursorAt(0, 11); + helpers.doKeys('n'); + helpers.assertCursorAt(1, 6); + helpers.doKeys('N'); + helpers.assertCursorAt(0, 11); + + cm.setCursor(0, 0); + helpers.doKeys('2', '/'); + helpers.assertCursorAt(1, 6); +}, { value: 'match nope match \n nope Match' }); +testVim('/_case', function(cm, vim, helpers) { + cm.openDialog = helpers.fakeOpenDialog('Match'); + helpers.doKeys('/'); + helpers.assertCursorAt(1, 6); +}, { value: 'match nope match \n nope Match' }); +testVim('/_nongreedy', function(cm, vim, helpers) { + cm.openDialog = helpers.fakeOpenDialog('aa'); + helpers.doKeys('/'); + helpers.assertCursorAt(0, 4); + helpers.doKeys('n'); + helpers.assertCursorAt(1, 3); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 0); +}, { value: 'aaa aa \n a aa'}); +testVim('?_nongreedy', function(cm, vim, helpers) { + cm.openDialog = helpers.fakeOpenDialog('aa'); + helpers.doKeys('?'); + helpers.assertCursorAt(1, 3); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 4); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 0); +}, { value: 'aaa aa \n a aa'}); +testVim('/_greedy', function(cm, vim, helpers) { + cm.openDialog = helpers.fakeOpenDialog('a+'); + helpers.doKeys('/'); + helpers.assertCursorAt(0, 4); + helpers.doKeys('n'); + helpers.assertCursorAt(1, 1); + helpers.doKeys('n'); + helpers.assertCursorAt(1, 3); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 0); +}, { value: 'aaa aa \n a aa'}); +testVim('?_greedy', function(cm, vim, helpers) { + cm.openDialog = helpers.fakeOpenDialog('a+'); + helpers.doKeys('?'); + helpers.assertCursorAt(1, 3); + helpers.doKeys('n'); + helpers.assertCursorAt(1, 1); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 4); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 0); +}, { value: 'aaa aa \n a aa'}); +testVim('/_greedy_0_or_more', function(cm, vim, helpers) { + cm.openDialog = helpers.fakeOpenDialog('a*'); + helpers.doKeys('/'); + helpers.assertCursorAt(0, 3); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 4); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 5); + helpers.doKeys('n'); + helpers.assertCursorAt(1, 0); + helpers.doKeys('n'); + helpers.assertCursorAt(1, 1); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 0); +}, { value: 'aaa aa\n aa'}); +testVim('?_greedy_0_or_more', function(cm, vim, helpers) { + cm.openDialog = helpers.fakeOpenDialog('a*'); + helpers.doKeys('?'); + helpers.assertCursorAt(1, 1); + helpers.doKeys('n'); + helpers.assertCursorAt(1, 0); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 5); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 4); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 3); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 0); +}, { value: 'aaa aa\n aa'}); +testVim('? and n/N', function(cm, vim, helpers) { + cm.openDialog = helpers.fakeOpenDialog('match'); + helpers.doKeys('?'); + helpers.assertCursorAt(1, 6); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 11); + helpers.doKeys('N'); + helpers.assertCursorAt(1, 6); + + cm.setCursor(0, 0); + helpers.doKeys('2', '?'); + helpers.assertCursorAt(0, 11); +}, { value: 'match nope match \n nope Match' }); +testVim('*', function(cm, vim, helpers) { + cm.setCursor(0, 9); + helpers.doKeys('*'); + helpers.assertCursorAt(0, 22); + + cm.setCursor(0, 9); + helpers.doKeys('2', '*'); + helpers.assertCursorAt(1, 8); +}, { value: 'nomatch match nomatch match \nnomatch Match' }); +testVim('*_no_word', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('*'); + helpers.assertCursorAt(0, 0); +}, { value: ' \n match \n' }); +testVim('*_symbol', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('*'); + helpers.assertCursorAt(1, 0); +}, { value: ' /}\n/} match \n' }); +testVim('#', function(cm, vim, helpers) { + cm.setCursor(0, 9); + helpers.doKeys('#'); + helpers.assertCursorAt(1, 8); + + cm.setCursor(0, 9); + helpers.doKeys('2', '#'); + helpers.assertCursorAt(0, 22); +}, { value: 'nomatch match nomatch match \nnomatch Match' }); +testVim('*_seek', function(cm, vim, helpers) { + // Should skip over space and symbols. + cm.setCursor(0, 3); + helpers.doKeys('*'); + helpers.assertCursorAt(0, 22); +}, { value: ' := match nomatch match \nnomatch Match' }); +testVim('#', function(cm, vim, helpers) { + // Should skip over space and symbols. + cm.setCursor(0, 3); + helpers.doKeys('#'); + helpers.assertCursorAt(1, 8); +}, { value: ' := match nomatch match \nnomatch Match' }); +testVim('.', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('2', 'd', 'w'); + helpers.doKeys('.'); + eq('5 6', cm.getValue()); +}, { value: '1 2 3 4 5 6'}); +testVim('._repeat', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('2', 'd', 'w'); + helpers.doKeys('3', '.'); + eq('6', cm.getValue()); +}, { value: '1 2 3 4 5 6'}); +testVim('._insert', function(cm, vim, helpers) { + helpers.doKeys('i'); + cm.replaceRange('test', cm.getCursor()); + helpers.doInsertModeKeys('Esc'); + helpers.doKeys('.'); + eq('testestt', cm.getValue()); + helpers.assertCursorAt(0, 6); +}, { value: ''}); +testVim('._insert_repeat', function(cm, vim, helpers) { + helpers.doKeys('i'); + cm.replaceRange('test', cm.getCursor()); + cm.setCursor(0, 4); + helpers.doInsertModeKeys('Esc'); + helpers.doKeys('2', '.'); + eq('testesttestt', cm.getValue()); + helpers.assertCursorAt(0, 10); +}, { value: ''}); +testVim('._repeat_insert', function(cm, vim, helpers) { + helpers.doKeys('3', 'i'); + cm.replaceRange('te', cm.getCursor()); + cm.setCursor(0, 2); + helpers.doInsertModeKeys('Esc'); + helpers.doKeys('.'); + eq('tetettetetee', cm.getValue()); + helpers.assertCursorAt(0, 10); +}, { value: ''}); +testVim('._insert_o', function(cm, vim, helpers) { + helpers.doKeys('o'); + cm.replaceRange('z', cm.getCursor()); + cm.setCursor(1, 1); + helpers.doInsertModeKeys('Esc'); + helpers.doKeys('.'); + eq('\nz\nz', cm.getValue()); + helpers.assertCursorAt(2, 0); +}, { value: ''}); +testVim('._insert_o_repeat', function(cm, vim, helpers) { + helpers.doKeys('o'); + cm.replaceRange('z', cm.getCursor()); + helpers.doInsertModeKeys('Esc'); + cm.setCursor(1, 0); + helpers.doKeys('2', '.'); + eq('\nz\nz\nz', cm.getValue()); + helpers.assertCursorAt(3, 0); +}, { value: ''}); +testVim('._insert_o_indent', function(cm, vim, helpers) { + helpers.doKeys('o'); + cm.replaceRange('z', cm.getCursor()); + helpers.doInsertModeKeys('Esc'); + cm.setCursor(1, 2); + helpers.doKeys('.'); + eq('{\n z\n z', cm.getValue()); + helpers.assertCursorAt(2, 2); +}, { value: '{'}); +testVim('._insert_cw', function(cm, vim, helpers) { + helpers.doKeys('c', 'w'); + cm.replaceRange('test', cm.getCursor()); + helpers.doInsertModeKeys('Esc'); + cm.setCursor(0, 3); + helpers.doKeys('2', 'l'); + helpers.doKeys('.'); + eq('test test word3', cm.getValue()); + helpers.assertCursorAt(0, 8); +}, { value: 'word1 word2 word3' }); +testVim('._insert_cw_repeat', function(cm, vim, helpers) { + // For some reason, repeat cw in desktop VIM will does not repeat insert mode + // changes. Will conform to that behavior. + helpers.doKeys('c', 'w'); + cm.replaceRange('test', cm.getCursor()); + helpers.doInsertModeKeys('Esc'); + cm.setCursor(0, 4); + helpers.doKeys('l'); + helpers.doKeys('2', '.'); + eq('test test', cm.getValue()); + helpers.assertCursorAt(0, 8); +}, { value: 'word1 word2 word3' }); +testVim('._delete', function(cm, vim, helpers) { + cm.setCursor(0, 5); + helpers.doKeys('i'); + helpers.doInsertModeKeys('Backspace', 'Esc'); + helpers.doKeys('.'); + eq('zace', cm.getValue()); + helpers.assertCursorAt(0, 1); +}, { value: 'zabcde'}); +testVim('._delete_repeat', function(cm, vim, helpers) { + cm.setCursor(0, 6); + helpers.doKeys('i'); + helpers.doInsertModeKeys('Backspace', 'Esc'); + helpers.doKeys('2', '.'); + eq('zzce', cm.getValue()); + helpers.assertCursorAt(0, 1); +}, { value: 'zzabcde'}); +testVim('f;', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('f', 'x'); + helpers.doKeys(';'); + helpers.doKeys('2', ';'); + eq(9, cm.getCursor().ch); +}, { value: '01x3xx678x'}); +testVim('F;', function(cm, vim, helpers) { + cm.setCursor(0, 8); + helpers.doKeys('F', 'x'); + helpers.doKeys(';'); + helpers.doKeys('2', ';'); + eq(2, cm.getCursor().ch); +}, { value: '01x3xx6x8x'}); +testVim('t;', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('t', 'x'); + helpers.doKeys(';'); + helpers.doKeys('2', ';'); + eq(8, cm.getCursor().ch); +}, { value: '01x3xx678x'}); +testVim('T;', function(cm, vim, helpers) { + cm.setCursor(0, 9); + helpers.doKeys('T', 'x'); + helpers.doKeys(';'); + helpers.doKeys('2', ';'); + eq(2, cm.getCursor().ch); +}, { value: '0xx3xx678x'}); +testVim('f,', function(cm, vim, helpers) { + cm.setCursor(0, 6); + helpers.doKeys('f', 'x'); + helpers.doKeys(','); + helpers.doKeys('2', ','); + eq(2, cm.getCursor().ch); +}, { value: '01x3xx678x'}); +testVim('F,', function(cm, vim, helpers) { + cm.setCursor(0, 3); + helpers.doKeys('F', 'x'); + helpers.doKeys(','); + helpers.doKeys('2', ','); + eq(9, cm.getCursor().ch); +}, { value: '01x3xx678x'}); +testVim('t,', function(cm, vim, helpers) { + cm.setCursor(0, 6); + helpers.doKeys('t', 'x'); + helpers.doKeys(','); + helpers.doKeys('2', ','); + eq(3, cm.getCursor().ch); +}, { value: '01x3xx678x'}); +testVim('T,', function(cm, vim, helpers) { + cm.setCursor(0, 4); + helpers.doKeys('T', 'x'); + helpers.doKeys(','); + helpers.doKeys('2', ','); + eq(8, cm.getCursor().ch); +}, { value: '01x3xx67xx'}); +testVim('fd,;', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('f', '4'); + cm.setCursor(0, 0); + helpers.doKeys('d', ';'); + eq('56789', cm.getValue()); + helpers.doKeys('u'); + cm.setCursor(0, 9); + helpers.doKeys('d', ','); + eq('01239', cm.getValue()); +}, { value: '0123456789'}); +testVim('Fd,;', function(cm, vim, helpers) { + cm.setCursor(0, 9); + helpers.doKeys('F', '4'); + cm.setCursor(0, 9); + helpers.doKeys('d', ';'); + eq('01239', cm.getValue()); + helpers.doKeys('u'); + cm.setCursor(0, 0); + helpers.doKeys('d', ','); + eq('56789', cm.getValue()); +}, { value: '0123456789'}); +testVim('td,;', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('t', '4'); + cm.setCursor(0, 0); + helpers.doKeys('d', ';'); + eq('456789', cm.getValue()); + helpers.doKeys('u'); + cm.setCursor(0, 9); + helpers.doKeys('d', ','); + eq('012349', cm.getValue()); +}, { value: '0123456789'}); +testVim('Td,;', function(cm, vim, helpers) { + cm.setCursor(0, 9); + helpers.doKeys('T', '4'); + cm.setCursor(0, 9); + helpers.doKeys('d', ';'); + eq('012349', cm.getValue()); + helpers.doKeys('u'); + cm.setCursor(0, 0); + helpers.doKeys('d', ','); + eq('456789', cm.getValue()); +}, { value: '0123456789'}); +testVim('fc,;', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('f', '4'); + cm.setCursor(0, 0); + helpers.doKeys('c', ';', 'Esc'); + eq('56789', cm.getValue()); + helpers.doKeys('u'); + cm.setCursor(0, 9); + helpers.doKeys('c', ','); + eq('01239', cm.getValue()); +}, { value: '0123456789'}); +testVim('Fc,;', function(cm, vim, helpers) { + cm.setCursor(0, 9); + helpers.doKeys('F', '4'); + cm.setCursor(0, 9); + helpers.doKeys('c', ';', 'Esc'); + eq('01239', cm.getValue()); + helpers.doKeys('u'); + cm.setCursor(0, 0); + helpers.doKeys('c', ','); + eq('56789', cm.getValue()); +}, { value: '0123456789'}); +testVim('tc,;', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('t', '4'); + cm.setCursor(0, 0); + helpers.doKeys('c', ';', 'Esc'); + eq('456789', cm.getValue()); + helpers.doKeys('u'); + cm.setCursor(0, 9); + helpers.doKeys('c', ','); + eq('012349', cm.getValue()); +}, { value: '0123456789'}); +testVim('Tc,;', function(cm, vim, helpers) { + cm.setCursor(0, 9); + helpers.doKeys('T', '4'); + cm.setCursor(0, 9); + helpers.doKeys('c', ';', 'Esc'); + eq('012349', cm.getValue()); + helpers.doKeys('u'); + cm.setCursor(0, 0); + helpers.doKeys('c', ','); + eq('456789', cm.getValue()); +}, { value: '0123456789'}); +testVim('fy,;', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('f', '4'); + cm.setCursor(0, 0); + helpers.doKeys('y', ';', 'P'); + eq('012340123456789', cm.getValue()); + helpers.doKeys('u'); + cm.setCursor(0, 9); + helpers.doKeys('y', ',', 'P'); + eq('012345678456789', cm.getValue()); +}, { value: '0123456789'}); +testVim('Fy,;', function(cm, vim, helpers) { + cm.setCursor(0, 9); + helpers.doKeys('F', '4'); + cm.setCursor(0, 9); + helpers.doKeys('y', ';', 'p'); + eq('012345678945678', cm.getValue()); + helpers.doKeys('u'); + cm.setCursor(0, 0); + helpers.doKeys('y', ',', 'P'); + eq('012340123456789', cm.getValue()); +}, { value: '0123456789'}); +testVim('ty,;', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('t', '4'); + cm.setCursor(0, 0); + helpers.doKeys('y', ';', 'P'); + eq('01230123456789', cm.getValue()); + helpers.doKeys('u'); + cm.setCursor(0, 9); + helpers.doKeys('y', ',', 'p'); + eq('01234567895678', cm.getValue()); +}, { value: '0123456789'}); +testVim('Ty,;', function(cm, vim, helpers) { + cm.setCursor(0, 9); + helpers.doKeys('T', '4'); + cm.setCursor(0, 9); + helpers.doKeys('y', ';', 'p'); + eq('01234567895678', cm.getValue()); + helpers.doKeys('u'); + cm.setCursor(0, 0); + helpers.doKeys('y', ',', 'P'); + eq('01230123456789', cm.getValue()); +}, { value: '0123456789'}); +testVim('HML', function(cm, vim, helpers) { + var lines = 35; + var textHeight = cm.defaultTextHeight(); + cm.setSize(600, lines*textHeight); + cm.setCursor(120, 0); + helpers.doKeys('H'); + helpers.assertCursorAt(86, 2); + helpers.doKeys('L'); + helpers.assertCursorAt(120, 4); + helpers.doKeys('M'); + helpers.assertCursorAt(103,4); +}, { value: (function(){ + var lines = new Array(100); + var upper = ' xx\n'; + var lower = ' xx\n'; + upper = lines.join(upper); + lower = lines.join(lower); + return upper + lower; +})()}); + +var zVals = ['zb','zz','zt','z-','z.','z'].map(function(e, idx){ + var lineNum = 250; + var lines = 35; + testVim(e, function(cm, vim, helpers) { + var k1 = e[0]; + var k2 = e.substring(1); + var textHeight = cm.defaultTextHeight(); + cm.setSize(600, lines*textHeight); + cm.setCursor(lineNum, 0); + helpers.doKeys(k1, k2); + zVals[idx] = cm.getScrollInfo().top; + }, { value: (function(){ + return new Array(500).join('\n'); + })()}); +}); +testVim('zb', function(cm, vim, helpers){ + eq(zVals[2], zVals[5]); +}); + +var squareBracketMotionSandbox = ''+ + '({\n'+//0 + ' ({\n'+//11 + ' /*comment {\n'+//2 + ' */(\n'+//3 + '#else \n'+//4 + ' /* )\n'+//5 + '#if }\n'+//6 + ' )}*/\n'+//7 + ')}\n'+//8 + '{}\n'+//9 + '#else {{\n'+//10 + '{}\n'+//11 + '}\n'+//12 + '{\n'+//13 + '#endif\n'+//14 + '}\n'+//15 + '}\n'+//16 + '#else';//17 +testVim('[[, ]]', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys(']', ']'); + helpers.assertCursorAt(9,0); + helpers.doKeys('2', ']', ']'); + helpers.assertCursorAt(13,0); + helpers.doKeys(']', ']'); + helpers.assertCursorAt(17,0); + helpers.doKeys('[', '['); + helpers.assertCursorAt(13,0); + helpers.doKeys('2', '[', '['); + helpers.assertCursorAt(9,0); + helpers.doKeys('[', '['); + helpers.assertCursorAt(0,0); +}, { value: squareBracketMotionSandbox}); +testVim('[], ][', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys(']', '['); + helpers.assertCursorAt(12,0); + helpers.doKeys('2', ']', '['); + helpers.assertCursorAt(16,0); + helpers.doKeys(']', '['); + helpers.assertCursorAt(17,0); + helpers.doKeys('[', ']'); + helpers.assertCursorAt(16,0); + helpers.doKeys('2', '[', ']'); + helpers.assertCursorAt(12,0); + helpers.doKeys('[', ']'); + helpers.assertCursorAt(0,0); +}, { value: squareBracketMotionSandbox}); +testVim('[{, ]}', function(cm, vim, helpers) { + cm.setCursor(4, 10); + helpers.doKeys('[', '{'); + helpers.assertCursorAt(2,12); + helpers.doKeys('2', '[', '{'); + helpers.assertCursorAt(0,1); + cm.setCursor(4, 10); + helpers.doKeys(']', '}'); + helpers.assertCursorAt(6,11); + helpers.doKeys('2', ']', '}'); + helpers.assertCursorAt(8,1); + cm.setCursor(0,1); + helpers.doKeys(']', '}'); + helpers.assertCursorAt(8,1); + helpers.doKeys('[', '{'); + helpers.assertCursorAt(0,1); +}, { value: squareBracketMotionSandbox}); +testVim('[(, ])', function(cm, vim, helpers) { + cm.setCursor(4, 10); + helpers.doKeys('[', '('); + helpers.assertCursorAt(3,14); + helpers.doKeys('2', '[', '('); + helpers.assertCursorAt(0,0); + cm.setCursor(4, 10); + helpers.doKeys(']', ')'); + helpers.assertCursorAt(5,11); + helpers.doKeys('2', ']', ')'); + helpers.assertCursorAt(8,0); + helpers.doKeys('[', '('); + helpers.assertCursorAt(0,0); + helpers.doKeys(']', ')'); + helpers.assertCursorAt(8,0); +}, { value: squareBracketMotionSandbox}); +testVim('[*, ]*, [/, ]/', function(cm, vim, helpers) { + ['*', '/'].forEach(function(key){ + cm.setCursor(7, 0); + helpers.doKeys('2', '[', key); + helpers.assertCursorAt(2,2); + helpers.doKeys('2', ']', key); + helpers.assertCursorAt(7,5); + }); +}, { value: squareBracketMotionSandbox}); +testVim('[#, ]#', function(cm, vim, helpers) { + cm.setCursor(10, 3); + helpers.doKeys('2', '[', '#'); + helpers.assertCursorAt(4,0); + helpers.doKeys('5', ']', '#'); + helpers.assertCursorAt(17,0); + cm.setCursor(10, 3); + helpers.doKeys(']', '#'); + helpers.assertCursorAt(14,0); +}, { value: squareBracketMotionSandbox}); +testVim('[m, ]m, [M, ]M', function(cm, vim, helpers) { + cm.setCursor(11, 0); + helpers.doKeys('[', 'm'); + helpers.assertCursorAt(10,7); + helpers.doKeys('4', '[', 'm'); + helpers.assertCursorAt(1,3); + helpers.doKeys('5', ']', 'm'); + helpers.assertCursorAt(11,0); + helpers.doKeys('[', 'M'); + helpers.assertCursorAt(9,1); + helpers.doKeys('3', ']', 'M'); + helpers.assertCursorAt(15,0); + helpers.doKeys('5', '[', 'M'); + helpers.assertCursorAt(7,3); +}, { value: squareBracketMotionSandbox}); + +// Ex mode tests +testVim('ex_go_to_line', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doEx('4'); + helpers.assertCursorAt(3, 0); +}, { value: 'a\nb\nc\nd\ne\n'}); +testVim('ex_write', function(cm, vim, helpers) { + var tmp = CodeMirror.commands.save; + var written; + var actualCm; + CodeMirror.commands.save = function(cm) { + written = true; + actualCm = cm; + }; + // Test that w, wr, wri ... write all trigger :write. + var command = 'write'; + for (var i = 1; i < command.length; i++) { + written = false; + actualCm = null; + helpers.doEx(command.substring(0, i)); + eq(written, true); + eq(actualCm, cm); + } + CodeMirror.commands.save = tmp; +}); +testVim('ex_sort', function(cm, vim, helpers) { + helpers.doEx('sort'); + eq('Z\na\nb\nc\nd', cm.getValue()); +}, { value: 'b\nZ\nd\nc\na'}); +testVim('ex_sort_reverse', function(cm, vim, helpers) { + helpers.doEx('sort!'); + eq('d\nc\nb\na', cm.getValue()); +}, { value: 'b\nd\nc\na'}); +testVim('ex_sort_range', function(cm, vim, helpers) { + helpers.doEx('2,3sort'); + eq('b\nc\nd\na', cm.getValue()); +}, { value: 'b\nd\nc\na'}); +testVim('ex_sort_oneline', function(cm, vim, helpers) { + helpers.doEx('2sort'); + // Expect no change. + eq('b\nd\nc\na', cm.getValue()); +}, { value: 'b\nd\nc\na'}); +testVim('ex_sort_ignoreCase', function(cm, vim, helpers) { + helpers.doEx('sort i'); + eq('a\nb\nc\nd\nZ', cm.getValue()); +}, { value: 'b\nZ\nd\nc\na'}); +testVim('ex_sort_unique', function(cm, vim, helpers) { + helpers.doEx('sort u'); + eq('Z\na\nb\nc\nd', cm.getValue()); +}, { value: 'b\nZ\na\na\nd\na\nc\na'}); +testVim('ex_sort_decimal', function(cm, vim, helpers) { + helpers.doEx('sort d'); + eq('d3\n s5\n6\n.9', cm.getValue()); +}, { value: '6\nd3\n s5\n.9'}); +testVim('ex_sort_decimal_negative', function(cm, vim, helpers) { + helpers.doEx('sort d'); + eq('z-9\nd3\n s5\n6\n.9', cm.getValue()); +}, { value: '6\nd3\n s5\n.9\nz-9'}); +testVim('ex_sort_decimal_reverse', function(cm, vim, helpers) { + helpers.doEx('sort! d'); + eq('.9\n6\n s5\nd3', cm.getValue()); +}, { value: '6\nd3\n s5\n.9'}); +testVim('ex_sort_hex', function(cm, vim, helpers) { + helpers.doEx('sort x'); + eq(' s5\n6\n.9\n&0xB\nd3', cm.getValue()); +}, { value: '6\nd3\n s5\n&0xB\n.9'}); +testVim('ex_sort_octal', function(cm, vim, helpers) { + helpers.doEx('sort o'); + eq('.8\n.9\nd3\n s5\n6', cm.getValue()); +}, { value: '6\nd3\n s5\n.9\n.8'}); +testVim('ex_sort_decimal_mixed', function(cm, vim, helpers) { + helpers.doEx('sort d'); + eq('y\nz\nc1\nb2\na3', cm.getValue()); +}, { value: 'a3\nz\nc1\ny\nb2'}); +testVim('ex_sort_decimal_mixed_reverse', function(cm, vim, helpers) { + helpers.doEx('sort! d'); + eq('a3\nb2\nc1\nz\ny', cm.getValue()); +}, { value: 'a3\nz\nc1\ny\nb2'}); +testVim('ex_substitute_same_line', function(cm, vim, helpers) { + cm.setCursor(1, 0); + helpers.doEx('s/one/two'); + eq('one one\n two two', cm.getValue()); +}, { value: 'one one\n one one'}); +testVim('ex_substitute_global', function(cm, vim, helpers) { + cm.setCursor(1, 0); + helpers.doEx('%s/one/two'); + eq('two two\n two two', cm.getValue()); +}, { value: 'one one\n one one'}); +testVim('ex_substitute_input_range', function(cm, vim, helpers) { + cm.setCursor(1, 0); + helpers.doEx('1,3s/\\d/0'); + eq('0\n0\n0\n4', cm.getValue()); +}, { value: '1\n2\n3\n4' }); +testVim('ex_substitute_visual_range', function(cm, vim, helpers) { + cm.setCursor(1, 0); + // Set last visual mode selection marks '< and '> at lines 2 and 4 + helpers.doKeys('V', '2', 'j', 'v'); + helpers.doEx('\'<,\'>s/\\d/0'); + eq('1\n0\n0\n0\n5', cm.getValue()); +}, { value: '1\n2\n3\n4\n5' }); +testVim('ex_substitute_capture', function(cm, vim, helpers) { + cm.setCursor(1, 0); + helpers.doEx('s/(\\d+)/$1$1/') + eq('a1111 a1212 a1313', cm.getValue()); +}, { value: 'a11 a12 a13' }); +testVim('ex_substitute_empty_query', function(cm, vim, helpers) { + // If the query is empty, use last query. + cm.setCursor(1, 0); + cm.openDialog = helpers.fakeOpenDialog('1'); + helpers.doKeys('/'); + helpers.doEx('s//b'); + eq('abb ab2 ab3', cm.getValue()); +}, { value: 'a11 a12 a13' }); +testVim('ex_substitute_count', function(cm, vim, helpers) { + cm.setCursor(1, 0); + helpers.doEx('s/\\d/0/i 2'); + eq('1\n0\n0\n4', cm.getValue()); +}, { value: '1\n2\n3\n4' }); +testVim('ex_substitute_count_with_range', function(cm, vim, helpers) { + cm.setCursor(1, 0); + helpers.doEx('1,3s/\\d/0/ 3'); + eq('1\n2\n0\n0', cm.getValue()); +}, { value: '1\n2\n3\n4' }); +function testSubstituteConfirm(name, command, initialValue, expectedValue, keys, finalPos) { + testVim(name, function(cm, vim, helpers) { + var savedOpenDialog = cm.openDialog; + var savedKeyName = CodeMirror.keyName; + var onKeyDown; + var recordedCallback; + var closed = true; // Start out closed, set false on second openDialog. + function close() { + closed = true; + } + // First openDialog should save callback. + cm.openDialog = function(template, callback, options) { + recordedCallback = callback; + } + // Do first openDialog. + helpers.doKeys(':'); + // Second openDialog should save keyDown handler. + cm.openDialog = function(template, callback, options) { + onKeyDown = options.onKeyDown; + closed = false; + }; + // Return the command to Vim and trigger second openDialog. + recordedCallback(command); + // The event should really use keyCode, but here just mock it out and use + // key and replace keyName to just return key. + CodeMirror.keyName = function (e) { return e.key; } + keys = keys.toUpperCase(); + for (var i = 0; i < keys.length; i++) { + is(!closed); + onKeyDown({ key: keys.charAt(i) }, '', close); + } + try { + eq(expectedValue, cm.getValue()); + helpers.assertCursorAt(finalPos); + is(closed); + } catch(e) { + throw e + } finally { + // Restore overriden functions. + CodeMirror.keyName = savedKeyName; + cm.openDialog = savedOpenDialog; + } + }, { value: initialValue }); +}; +testSubstituteConfirm('ex_substitute_confirm_emptydoc', + '%s/x/b/c', '', '', '', makeCursor(0, 0)); +testSubstituteConfirm('ex_substitute_confirm_nomatch', + '%s/x/b/c', 'ba a\nbab', 'ba a\nbab', '', makeCursor(0, 0)); +testSubstituteConfirm('ex_substitute_confirm_accept', + '%s/a/b/c', 'ba a\nbab', 'bb b\nbbb', 'yyy', makeCursor(1, 1)); +testSubstituteConfirm('ex_substitute_confirm_random_keys', + '%s/a/b/c', 'ba a\nbab', 'bb b\nbbb', 'ysdkywerty', makeCursor(1, 1)); +testSubstituteConfirm('ex_substitute_confirm_some', + '%s/a/b/c', 'ba a\nbab', 'bb a\nbbb', 'yny', makeCursor(1, 1)); +testSubstituteConfirm('ex_substitute_confirm_all', + '%s/a/b/c', 'ba a\nbab', 'bb b\nbbb', 'a', makeCursor(1, 1)); +testSubstituteConfirm('ex_substitute_confirm_accept_then_all', + '%s/a/b/c', 'ba a\nbab', 'bb b\nbbb', 'ya', makeCursor(1, 1)); +testSubstituteConfirm('ex_substitute_confirm_quit', + '%s/a/b/c', 'ba a\nbab', 'bb a\nbab', 'yq', makeCursor(0, 3)); +testSubstituteConfirm('ex_substitute_confirm_last', + '%s/a/b/c', 'ba a\nbab', 'bb b\nbab', 'yl', makeCursor(0, 3)); +testSubstituteConfirm('ex_substitute_confirm_oneline', + '1s/a/b/c', 'ba a\nbab', 'bb b\nbab', 'yl', makeCursor(0, 3)); +testSubstituteConfirm('ex_substitute_confirm_range_accept', + '1,2s/a/b/c', 'aa\na \na\na', 'bb\nb \na\na', 'yyy', makeCursor(1, 0)); +testSubstituteConfirm('ex_substitute_confirm_range_some', + '1,3s/a/b/c', 'aa\na \na\na', 'ba\nb \nb\na', 'ynyy', makeCursor(2, 0)); +testSubstituteConfirm('ex_substitute_confirm_range_all', + '1,3s/a/b/c', 'aa\na \na\na', 'bb\nb \nb\na', 'a', makeCursor(2, 0)); +testSubstituteConfirm('ex_substitute_confirm_range_last', + '1,3s/a/b/c', 'aa\na \na\na', 'bb\nb \na\na', 'yyl', makeCursor(1, 0)); +//:noh should clear highlighting of search-results but allow to resume search through n +testVim('ex_noh_clearSearchHighlight', function(cm, vim, helpers) { + cm.openDialog = helpers.fakeOpenDialog('match'); + helpers.doKeys('?'); + helpers.doEx('noh'); + eq(vim.searchState_.getOverlay(),null,'match-highlighting wasn\'t cleared'); + helpers.doKeys('n'); + helpers.assertCursorAt(0, 11,'can\'t resume search after clearing highlighting'); +}, { value: 'match nope match \n nope Match' }); +// TODO: Reset key maps after each test. +testVim('ex_map_key2key', function(cm, vim, helpers) { + helpers.doEx('map a x'); + helpers.doKeys('a'); + helpers.assertCursorAt(0, 0); + eq('bc', cm.getValue()); +}, { value: 'abc' }); +testVim('ex_map_key2key_to_colon', function(cm, vim, helpers) { + helpers.doEx('map ; :'); + var dialogOpened = false; + cm.openDialog = function() { + dialogOpened = true; + } + helpers.doKeys(';'); + eq(dialogOpened, true); +}); +testVim('ex_map_ex2key:', function(cm, vim, helpers) { + helpers.doEx('map :del x'); + helpers.doEx('del'); + helpers.assertCursorAt(0, 0); + eq('bc', cm.getValue()); +}, { value: 'abc' }); +testVim('ex_map_ex2ex', function(cm, vim, helpers) { + helpers.doEx('map :del :w'); + var tmp = CodeMirror.commands.save; + var written = false; + var actualCm; + CodeMirror.commands.save = function(cm) { + written = true; + actualCm = cm; + }; + helpers.doEx('del'); + CodeMirror.commands.save = tmp; + eq(written, true); + eq(actualCm, cm); +}); +testVim('ex_map_key2ex', function(cm, vim, helpers) { + helpers.doEx('map a :w'); + var tmp = CodeMirror.commands.save; + var written = false; + var actualCm; + CodeMirror.commands.save = function(cm) { + written = true; + actualCm = cm; + }; + helpers.doKeys('a'); + CodeMirror.commands.save = tmp; + eq(written, true); + eq(actualCm, cm); +}); +// Testing registration of functions as ex-commands and mapping to -keys +testVim('ex_api_test', function(cm, vim, helpers) { + var res=false; + var val='from'; + CodeMirror.Vim.defineEx('extest','ext',function(cm,params){ + if(params.args)val=params.args[0]; + else res=true; + }); + helpers.doEx(':ext to'); + eq(val,'to','Defining ex-command failed'); + CodeMirror.Vim.map('',':ext'); + helpers.doKeys('',''); + is(res,'Mapping to key failed'); +}); +// For now, this test needs to be last because it messes up : for future tests. +testVim('ex_map_key2key_from_colon', function(cm, vim, helpers) { + helpers.doEx('map : x'); + helpers.doKeys(':'); + helpers.assertCursorAt(0, 0); + eq('bc', cm.getValue()); +}, { value: 'abc' }); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/3024-day.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/3024-day.css new file mode 100644 index 0000000..f2bc348 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/3024-day.css @@ -0,0 +1,33 @@ +/* + + Name: 3024 day + Author: Jan T. Sott (http://github.com/idleberg) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-3024-day.CodeMirror {background: #f7f7f7; color: #3a3432;} +.cm-s-3024-day div.CodeMirror-selected {background: #d6d5d4 !important;} +.cm-s-3024-day .CodeMirror-gutters {background: #f7f7f7; border-right: 0px;} +.cm-s-3024-day .CodeMirror-linenumber {color: #807d7c;} +.cm-s-3024-day .CodeMirror-cursor {border-left: 1px solid #5c5855 !important;} + +.cm-s-3024-day span.cm-comment {color: #cdab53;} +.cm-s-3024-day span.cm-atom {color: #a16a94;} +.cm-s-3024-day span.cm-number {color: #a16a94;} + +.cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute {color: #01a252;} +.cm-s-3024-day span.cm-keyword {color: #db2d20;} +.cm-s-3024-day span.cm-string {color: #fded02;} + +.cm-s-3024-day span.cm-variable {color: #01a252;} +.cm-s-3024-day span.cm-variable-2 {color: #01a0e4;} +.cm-s-3024-day span.cm-def {color: #e8bbd0;} +.cm-s-3024-day span.cm-error {background: #db2d20; color: #5c5855;} +.cm-s-3024-day span.cm-bracket {color: #3a3432;} +.cm-s-3024-day span.cm-tag {color: #db2d20;} +.cm-s-3024-day span.cm-link {color: #a16a94;} + +.cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/3024-night.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/3024-night.css new file mode 100644 index 0000000..87c7f8a --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/3024-night.css @@ -0,0 +1,33 @@ +/* + + Name: 3024 night + Author: Jan T. Sott (http://github.com/idleberg) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-3024-night.CodeMirror {background: #090300; color: #d6d5d4;} +.cm-s-3024-night div.CodeMirror-selected {background: #3a3432 !important;} +.cm-s-3024-night .CodeMirror-gutters {background: #090300; border-right: 0px;} +.cm-s-3024-night .CodeMirror-linenumber {color: #5c5855;} +.cm-s-3024-night .CodeMirror-cursor {border-left: 1px solid #807d7c !important;} + +.cm-s-3024-night span.cm-comment {color: #cdab53;} +.cm-s-3024-night span.cm-atom {color: #a16a94;} +.cm-s-3024-night span.cm-number {color: #a16a94;} + +.cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute {color: #01a252;} +.cm-s-3024-night span.cm-keyword {color: #db2d20;} +.cm-s-3024-night span.cm-string {color: #fded02;} + +.cm-s-3024-night span.cm-variable {color: #01a252;} +.cm-s-3024-night span.cm-variable-2 {color: #01a0e4;} +.cm-s-3024-night span.cm-def {color: #e8bbd0;} +.cm-s-3024-night span.cm-error {background: #db2d20; color: #807d7c;} +.cm-s-3024-night span.cm-bracket {color: #d6d5d4;} +.cm-s-3024-night span.cm-tag {color: #db2d20;} +.cm-s-3024-night span.cm-link {color: #a16a94;} + +.cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/ambiance-mobile.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/ambiance-mobile.css new file mode 100644 index 0000000..88d332e --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/ambiance-mobile.css @@ -0,0 +1,5 @@ +.cm-s-ambiance.CodeMirror { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/ambiance.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/ambiance.css new file mode 100644 index 0000000..0185426 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/ambiance.css @@ -0,0 +1,75 @@ +/* ambiance theme for codemirror */ + +/* Color scheme */ + +.cm-s-ambiance .cm-keyword { color: #cda869; } +.cm-s-ambiance .cm-atom { color: #CF7EA9; } +.cm-s-ambiance .cm-number { color: #78CF8A; } +.cm-s-ambiance .cm-def { color: #aac6e3; } +.cm-s-ambiance .cm-variable { color: #ffb795; } +.cm-s-ambiance .cm-variable-2 { color: #eed1b3; } +.cm-s-ambiance .cm-variable-3 { color: #faded3; } +.cm-s-ambiance .cm-property { color: #eed1b3; } +.cm-s-ambiance .cm-operator {color: #fa8d6a;} +.cm-s-ambiance .cm-comment { color: #555; font-style:italic; } +.cm-s-ambiance .cm-string { color: #8f9d6a; } +.cm-s-ambiance .cm-string-2 { color: #9d937c; } +.cm-s-ambiance .cm-meta { color: #D2A8A1; } +.cm-s-ambiance .cm-error { color: #AF2018; } +.cm-s-ambiance .cm-qualifier { color: yellow; } +.cm-s-ambiance .cm-builtin { color: #9999cc; } +.cm-s-ambiance .cm-bracket { color: #24C2C7; } +.cm-s-ambiance .cm-tag { color: #fee4ff } +.cm-s-ambiance .cm-attribute { color: #9B859D; } +.cm-s-ambiance .cm-header {color: blue;} +.cm-s-ambiance .cm-quote { color: #24C2C7; } +.cm-s-ambiance .cm-hr { color: pink; } +.cm-s-ambiance .cm-link { color: #F4C20B; } +.cm-s-ambiance .cm-special { color: #FF9D00; } + +.cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; } +.cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; } + +.cm-s-ambiance .CodeMirror-selected { + background: rgba(255, 255, 255, 0.15); +} +.cm-s-ambiance .CodeMirror-focused .CodeMirror-selected { + background: rgba(255, 255, 255, 0.10); +} + +/* Editor styling */ + +.cm-s-ambiance.CodeMirror { + line-height: 1.40em; + font-family: Monaco, Menlo,"Andale Mono","lucida console","Courier New",monospace !important; + color: #E6E1DC; + background-color: #202020; + -webkit-box-shadow: inset 0 0 10px black; + -moz-box-shadow: inset 0 0 10px black; + box-shadow: inset 0 0 10px black; +} + +.cm-s-ambiance .CodeMirror-gutters { + background: #3D3D3D; + border-right: 1px solid #4D4D4D; + box-shadow: 0 10px 20px black; +} + +.cm-s-ambiance .CodeMirror-linenumber { + text-shadow: 0px 1px 1px #4d4d4d; + color: #222; + padding: 0 5px; +} + +.cm-s-ambiance .CodeMirror-lines .CodeMirror-cursor { + border-left: 1px solid #7991E8; +} + +.cm-s-ambiance .activeline { + background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031); +} + +.cm-s-ambiance.CodeMirror, +.cm-s-ambiance .CodeMirror-gutters { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC"); +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/base16-dark.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/base16-dark.css new file mode 100644 index 0000000..7a818b7 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/base16-dark.css @@ -0,0 +1,33 @@ +/* + + Name: Base16 Default Dark + Author: Chris Kempson (http://chriskempson.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-base16-dark.CodeMirror {background: #151515; color: #e0e0e0;} +.cm-s-base16-dark div.CodeMirror-selected {background: #202020 !important;} +.cm-s-base16-dark .CodeMirror-gutters {background: #151515; border-right: 0px;} +.cm-s-base16-dark .CodeMirror-linenumber {color: #505050;} +.cm-s-base16-dark .CodeMirror-cursor {border-left: 1px solid #b0b0b0 !important;} + +.cm-s-base16-dark span.cm-comment {color: #8f5536;} +.cm-s-base16-dark span.cm-atom {color: #aa759f;} +.cm-s-base16-dark span.cm-number {color: #aa759f;} + +.cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute {color: #90a959;} +.cm-s-base16-dark span.cm-keyword {color: #ac4142;} +.cm-s-base16-dark span.cm-string {color: #f4bf75;} + +.cm-s-base16-dark span.cm-variable {color: #90a959;} +.cm-s-base16-dark span.cm-variable-2 {color: #6a9fb5;} +.cm-s-base16-dark span.cm-def {color: #d28445;} +.cm-s-base16-dark span.cm-error {background: #ac4142; color: #b0b0b0;} +.cm-s-base16-dark span.cm-bracket {color: #e0e0e0;} +.cm-s-base16-dark span.cm-tag {color: #ac4142;} +.cm-s-base16-dark span.cm-link {color: #aa759f;} + +.cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/base16-light.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/base16-light.css new file mode 100644 index 0000000..a3b2d4d --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/base16-light.css @@ -0,0 +1,33 @@ +/* + + Name: Base16 Default Light + Author: Chris Kempson (http://chriskempson.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-base16-light.CodeMirror {background: #f5f5f5; color: #202020;} +.cm-s-base16-light div.CodeMirror-selected {background: #e0e0e0 !important;} +.cm-s-base16-light .CodeMirror-gutters {background: #f5f5f5; border-right: 0px;} +.cm-s-base16-light .CodeMirror-linenumber {color: #b0b0b0;} +.cm-s-base16-light .CodeMirror-cursor {border-left: 1px solid #505050 !important;} + +.cm-s-base16-light span.cm-comment {color: #8f5536;} +.cm-s-base16-light span.cm-atom {color: #aa759f;} +.cm-s-base16-light span.cm-number {color: #aa759f;} + +.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute {color: #90a959;} +.cm-s-base16-light span.cm-keyword {color: #ac4142;} +.cm-s-base16-light span.cm-string {color: #f4bf75;} + +.cm-s-base16-light span.cm-variable {color: #90a959;} +.cm-s-base16-light span.cm-variable-2 {color: #6a9fb5;} +.cm-s-base16-light span.cm-def {color: #d28445;} +.cm-s-base16-light span.cm-error {background: #ac4142; color: #505050;} +.cm-s-base16-light span.cm-bracket {color: #202020;} +.cm-s-base16-light span.cm-tag {color: #ac4142;} +.cm-s-base16-light span.cm-link {color: #aa759f;} + +.cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/blackboard.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/blackboard.css new file mode 100644 index 0000000..f2bde69 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/blackboard.css @@ -0,0 +1,25 @@ +/* Port of TextMate's Blackboard theme */ + +.cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; } +.cm-s-blackboard .CodeMirror-selected { background: #253B76 !important; } +.cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; } +.cm-s-blackboard .CodeMirror-linenumber { color: #888; } +.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; } + +.cm-s-blackboard .cm-keyword { color: #FBDE2D; } +.cm-s-blackboard .cm-atom { color: #D8FA3C; } +.cm-s-blackboard .cm-number { color: #D8FA3C; } +.cm-s-blackboard .cm-def { color: #8DA6CE; } +.cm-s-blackboard .cm-variable { color: #FF6400; } +.cm-s-blackboard .cm-operator { color: #FBDE2D;} +.cm-s-blackboard .cm-comment { color: #AEAEAE; } +.cm-s-blackboard .cm-string { color: #61CE3C; } +.cm-s-blackboard .cm-string-2 { color: #61CE3C; } +.cm-s-blackboard .cm-meta { color: #D8FA3C; } +.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; } +.cm-s-blackboard .cm-builtin { color: #8DA6CE; } +.cm-s-blackboard .cm-tag { color: #8DA6CE; } +.cm-s-blackboard .cm-attribute { color: #8DA6CE; } +.cm-s-blackboard .cm-header { color: #FF6400; } +.cm-s-blackboard .cm-hr { color: #AEAEAE; } +.cm-s-blackboard .cm-link { color: #8DA6CE; } diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/cobalt.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/cobalt.css new file mode 100644 index 0000000..6095799 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/cobalt.css @@ -0,0 +1,18 @@ +.cm-s-cobalt.CodeMirror { background: #002240; color: white; } +.cm-s-cobalt div.CodeMirror-selected { background: #b36539 !important; } +.cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white !important; } + +.cm-s-cobalt span.cm-comment { color: #08f; } +.cm-s-cobalt span.cm-atom { color: #845dc4; } +.cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; } +.cm-s-cobalt span.cm-keyword { color: #ffee80; } +.cm-s-cobalt span.cm-string { color: #3ad900; } +.cm-s-cobalt span.cm-meta { color: #ff9d00; } +.cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; } +.cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; } +.cm-s-cobalt span.cm-error { color: #9d1e15; } +.cm-s-cobalt span.cm-bracket { color: #d8d8d8; } +.cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; } +.cm-s-cobalt span.cm-link { color: #845dc4; } diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/eclipse.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/eclipse.css new file mode 100644 index 0000000..4137bbe --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/eclipse.css @@ -0,0 +1,25 @@ +.cm-s-eclipse span.cm-meta {color: #FF1717;} +.cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } +.cm-s-eclipse span.cm-atom {color: #219;} +.cm-s-eclipse span.cm-number {color: #164;} +.cm-s-eclipse span.cm-def {color: #00f;} +.cm-s-eclipse span.cm-variable {color: black;} +.cm-s-eclipse span.cm-variable-2 {color: #0000C0;} +.cm-s-eclipse span.cm-variable-3 {color: #0000C0;} +.cm-s-eclipse span.cm-property {color: black;} +.cm-s-eclipse span.cm-operator {color: black;} +.cm-s-eclipse span.cm-comment {color: #3F7F5F;} +.cm-s-eclipse span.cm-string {color: #2A00FF;} +.cm-s-eclipse span.cm-string-2 {color: #f50;} +.cm-s-eclipse span.cm-error {color: #f00;} +.cm-s-eclipse span.cm-qualifier {color: #555;} +.cm-s-eclipse span.cm-builtin {color: #30a;} +.cm-s-eclipse span.cm-bracket {color: #cc7;} +.cm-s-eclipse span.cm-tag {color: #170;} +.cm-s-eclipse span.cm-attribute {color: #00c;} +.cm-s-eclipse span.cm-link {color: #219;} + +.cm-s-eclipse .CodeMirror-matchingbracket { + outline:1px solid grey; + color:black !important; +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/elegant.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/elegant.css new file mode 100644 index 0000000..d0ce0cb --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/elegant.css @@ -0,0 +1,10 @@ +.cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;} +.cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;} +.cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;} +.cm-s-elegant span.cm-variable {color: black;} +.cm-s-elegant span.cm-variable-2 {color: #b11;} +.cm-s-elegant span.cm-qualifier {color: #555;} +.cm-s-elegant span.cm-keyword {color: #730;} +.cm-s-elegant span.cm-builtin {color: #30a;} +.cm-s-elegant span.cm-error {background-color: #fdd;} +.cm-s-elegant span.cm-link {color: #762;} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/erlang-dark.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/erlang-dark.css new file mode 100644 index 0000000..cf5bf2b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/erlang-dark.css @@ -0,0 +1,21 @@ +.cm-s-erlang-dark.CodeMirror { background: #002240; color: white; } +.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539 !important; } +.cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white !important; } + +.cm-s-erlang-dark span.cm-atom { color: #845dc4; } +.cm-s-erlang-dark span.cm-attribute { color: #ff80e1; } +.cm-s-erlang-dark span.cm-bracket { color: #ff9d00; } +.cm-s-erlang-dark span.cm-builtin { color: #eaa; } +.cm-s-erlang-dark span.cm-comment { color: #77f; } +.cm-s-erlang-dark span.cm-def { color: #e7a; } +.cm-s-erlang-dark span.cm-error { color: #9d1e15; } +.cm-s-erlang-dark span.cm-keyword { color: #ffee80; } +.cm-s-erlang-dark span.cm-meta { color: #50fefe; } +.cm-s-erlang-dark span.cm-number { color: #ffd0d0; } +.cm-s-erlang-dark span.cm-operator { color: #d11; } +.cm-s-erlang-dark span.cm-string { color: #3ad900; } +.cm-s-erlang-dark span.cm-tag { color: #9effff; } +.cm-s-erlang-dark span.cm-variable { color: #50fe50; } +.cm-s-erlang-dark span.cm-variable-2 { color: #e0e; } diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/lesser-dark.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/lesser-dark.css new file mode 100644 index 0000000..0bd08f5 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/lesser-dark.css @@ -0,0 +1,44 @@ +/* +http://lesscss.org/ dark theme +Ported to CodeMirror by Peter Kroon +*/ +.cm-s-lesser-dark { + line-height: 1.3em; +} +.cm-s-lesser-dark { + font-family: 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Monaco', Courier, monospace !important; +} + +.cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; } +.cm-s-lesser-dark div.CodeMirror-selected {background: #45443B !important;} /* 33322B*/ +.cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white !important; } +.cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/ + +.cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/ + +.cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; } +.cm-s-lesser-dark .CodeMirror-linenumber { color: #777; } + +.cm-s-lesser-dark span.cm-keyword { color: #599eff; } +.cm-s-lesser-dark span.cm-atom { color: #C2B470; } +.cm-s-lesser-dark span.cm-number { color: #B35E4D; } +.cm-s-lesser-dark span.cm-def {color: white;} +.cm-s-lesser-dark span.cm-variable { color:#D9BF8C; } +.cm-s-lesser-dark span.cm-variable-2 { color: #669199; } +.cm-s-lesser-dark span.cm-variable-3 { color: white; } +.cm-s-lesser-dark span.cm-property {color: #92A75C;} +.cm-s-lesser-dark span.cm-operator {color: #92A75C;} +.cm-s-lesser-dark span.cm-comment { color: #666; } +.cm-s-lesser-dark span.cm-string { color: #BCD279; } +.cm-s-lesser-dark span.cm-string-2 {color: #f50;} +.cm-s-lesser-dark span.cm-meta { color: #738C73; } +.cm-s-lesser-dark span.cm-error { color: #9d1e15; } +.cm-s-lesser-dark span.cm-qualifier {color: #555;} +.cm-s-lesser-dark span.cm-builtin { color: #ff9e59; } +.cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; } +.cm-s-lesser-dark span.cm-tag { color: #669199; } +.cm-s-lesser-dark span.cm-attribute {color: #00c;} +.cm-s-lesser-dark span.cm-header {color: #a0a;} +.cm-s-lesser-dark span.cm-quote {color: #090;} +.cm-s-lesser-dark span.cm-hr {color: #999;} +.cm-s-lesser-dark span.cm-link {color: #00c;} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/midnight.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/midnight.css new file mode 100644 index 0000000..bc2d49b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/midnight.css @@ -0,0 +1,43 @@ +/* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */ + +/**/ +.cm-s-midnight span.CodeMirror-matchhighlight { background: #494949 } +.cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight { background: #314D67 !important; } + +/**/ +.cm-s-midnight .activeline {background: #253540 !important;} + +.cm-s-midnight.CodeMirror { + background: #0F192A; + color: #D1EDFF; +} + +.cm-s-midnight.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;} + +.cm-s-midnight div.CodeMirror-selected {background: #314D67 !important;} +.cm-s-midnight .CodeMirror-gutters {background: #0F192A; border-right: 1px solid;} +.cm-s-midnight .CodeMirror-linenumber {color: #D0D0D0;} +.cm-s-midnight .CodeMirror-cursor { + border-left: 1px solid #F8F8F0 !important; +} + +.cm-s-midnight span.cm-comment {color: #428BDD;} +.cm-s-midnight span.cm-atom {color: #AE81FF;} +.cm-s-midnight span.cm-number {color: #D1EDFF;} + +.cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute {color: #A6E22E;} +.cm-s-midnight span.cm-keyword {color: #E83737;} +.cm-s-midnight span.cm-string {color: #1DC116;} + +.cm-s-midnight span.cm-variable {color: #FFAA3E;} +.cm-s-midnight span.cm-variable-2 {color: #FFAA3E;} +.cm-s-midnight span.cm-def {color: #4DD;} +.cm-s-midnight span.cm-error {background: #F92672; color: #F8F8F0;} +.cm-s-midnight span.cm-bracket {color: #D1EDFF;} +.cm-s-midnight span.cm-tag {color: #008;} +.cm-s-midnight span.cm-link {color: #AE81FF;} + +.cm-s-midnight .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/monokai.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/monokai.css new file mode 100644 index 0000000..a0b3c7c --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/monokai.css @@ -0,0 +1,28 @@ +/* Based on Sublime Text's Monokai theme */ + +.cm-s-monokai.CodeMirror {background: #272822; color: #f8f8f2;} +.cm-s-monokai div.CodeMirror-selected {background: #49483E !important;} +.cm-s-monokai .CodeMirror-gutters {background: #272822; border-right: 0px;} +.cm-s-monokai .CodeMirror-linenumber {color: #d0d0d0;} +.cm-s-monokai .CodeMirror-cursor {border-left: 1px solid #f8f8f0 !important;} + +.cm-s-monokai span.cm-comment {color: #75715e;} +.cm-s-monokai span.cm-atom {color: #ae81ff;} +.cm-s-monokai span.cm-number {color: #ae81ff;} + +.cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute {color: #a6e22e;} +.cm-s-monokai span.cm-keyword {color: #f92672;} +.cm-s-monokai span.cm-string {color: #e6db74;} + +.cm-s-monokai span.cm-variable {color: #a6e22e;} +.cm-s-monokai span.cm-variable-2 {color: #9effff;} +.cm-s-monokai span.cm-def {color: #fd971f;} +.cm-s-monokai span.cm-error {background: #f92672; color: #f8f8f0;} +.cm-s-monokai span.cm-bracket {color: #f8f8f2;} +.cm-s-monokai span.cm-tag {color: #f92672;} +.cm-s-monokai span.cm-link {color: #ae81ff;} + +.cm-s-monokai .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/neat.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/neat.css new file mode 100644 index 0000000..8a307f8 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/neat.css @@ -0,0 +1,9 @@ +.cm-s-neat span.cm-comment { color: #a86; } +.cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } +.cm-s-neat span.cm-string { color: #a22; } +.cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } +.cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } +.cm-s-neat span.cm-variable { color: black; } +.cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } +.cm-s-neat span.cm-meta {color: #555;} +.cm-s-neat span.cm-link { color: #3a3; } diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/night.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/night.css new file mode 100644 index 0000000..8804a39 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/night.css @@ -0,0 +1,21 @@ +/* Loosely based on the Midnight Textmate theme */ + +.cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; } +.cm-s-night div.CodeMirror-selected { background: #447 !important; } +.cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-night .CodeMirror-linenumber { color: #f8f8f8; } +.cm-s-night .CodeMirror-cursor { border-left: 1px solid white !important; } + +.cm-s-night span.cm-comment { color: #6900a1; } +.cm-s-night span.cm-atom { color: #845dc4; } +.cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; } +.cm-s-night span.cm-keyword { color: #599eff; } +.cm-s-night span.cm-string { color: #37f14a; } +.cm-s-night span.cm-meta { color: #7678e2; } +.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; } +.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; } +.cm-s-night span.cm-error { color: #9d1e15; } +.cm-s-night span.cm-bracket { color: #8da6ce; } +.cm-s-night span.cm-comment { color: #6900a1; } +.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; } +.cm-s-night span.cm-link { color: #845dc4; } diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/rubyblue.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/rubyblue.css new file mode 100644 index 0000000..23c0cc7 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/rubyblue.css @@ -0,0 +1,21 @@ +.cm-s-rubyblue { font-family: Trebuchet, Verdana, sans-serif; } /* - customized editor font - */ + +.cm-s-rubyblue.CodeMirror { background: #112435; color: white; } +.cm-s-rubyblue div.CodeMirror-selected { background: #38566F !important; } +.cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; } +.cm-s-rubyblue .CodeMirror-linenumber { color: white; } +.cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white !important; } + +.cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; } +.cm-s-rubyblue span.cm-atom { color: #F4C20B; } +.cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; } +.cm-s-rubyblue span.cm-keyword { color: #F0F; } +.cm-s-rubyblue span.cm-string { color: #F08047; } +.cm-s-rubyblue span.cm-meta { color: #F0F; } +.cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; } +.cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; } +.cm-s-rubyblue span.cm-error { color: #AF2018; } +.cm-s-rubyblue span.cm-bracket { color: #F0F; } +.cm-s-rubyblue span.cm-link { color: #F4C20B; } +.cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; } +.cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; } diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/solarized.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/solarized.css new file mode 100644 index 0000000..867394a --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/solarized.css @@ -0,0 +1,203 @@ +/* +Solarized theme for code-mirror +http://ethanschoonover.com/solarized +*/ + +/* +Solarized color pallet +http://ethanschoonover.com/solarized/img/solarized-palette.png +*/ + +.solarized.base03 { color: #002b36; } +.solarized.base02 { color: #073642; } +.solarized.base01 { color: #586e75; } +.solarized.base00 { color: #657b83; } +.solarized.base0 { color: #839496; } +.solarized.base1 { color: #93a1a1; } +.solarized.base2 { color: #eee8d5; } +.solarized.base3 { color: #fdf6e3; } +.solarized.solar-yellow { color: #b58900; } +.solarized.solar-orange { color: #cb4b16; } +.solarized.solar-red { color: #dc322f; } +.solarized.solar-magenta { color: #d33682; } +.solarized.solar-violet { color: #6c71c4; } +.solarized.solar-blue { color: #268bd2; } +.solarized.solar-cyan { color: #2aa198; } +.solarized.solar-green { color: #859900; } + +/* Color scheme for code-mirror */ + +.cm-s-solarized { + line-height: 1.45em; + font-family: Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace !important; + color-profile: sRGB; + rendering-intent: auto; +} +.cm-s-solarized.cm-s-dark { + color: #839496; + background-color: #002b36; + text-shadow: #002b36 0 1px; +} +.cm-s-solarized.cm-s-light { + background-color: #fdf6e3; + color: #657b83; + text-shadow: #eee8d5 0 1px; +} + +.cm-s-solarized .CodeMirror-widget { + text-shadow: none; +} + + +.cm-s-solarized .cm-keyword { color: #cb4b16 } +.cm-s-solarized .cm-atom { color: #d33682; } +.cm-s-solarized .cm-number { color: #d33682; } +.cm-s-solarized .cm-def { color: #2aa198; } + +.cm-s-solarized .cm-variable { color: #268bd2; } +.cm-s-solarized .cm-variable-2 { color: #b58900; } +.cm-s-solarized .cm-variable-3 { color: #6c71c4; } + +.cm-s-solarized .cm-property { color: #2aa198; } +.cm-s-solarized .cm-operator {color: #6c71c4;} + +.cm-s-solarized .cm-comment { color: #586e75; font-style:italic; } + +.cm-s-solarized .cm-string { color: #859900; } +.cm-s-solarized .cm-string-2 { color: #b58900; } + +.cm-s-solarized .cm-meta { color: #859900; } +.cm-s-solarized .cm-error, +.cm-s-solarized .cm-invalidchar { + color: #586e75; + border-bottom: 1px dotted #dc322f; +} +.cm-s-solarized .cm-qualifier { color: #b58900; } +.cm-s-solarized .cm-builtin { color: #d33682; } +.cm-s-solarized .cm-bracket { color: #cb4b16; } +.cm-s-solarized .CodeMirror-matchingbracket { color: #859900; } +.cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; } +.cm-s-solarized .cm-tag { color: #93a1a1 } +.cm-s-solarized .cm-attribute { color: #2aa198; } +.cm-s-solarized .cm-header { color: #586e75; } +.cm-s-solarized .cm-quote { color: #93a1a1; } +.cm-s-solarized .cm-hr { + color: transparent; + border-top: 1px solid #586e75; + display: block; +} +.cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; } +.cm-s-solarized .cm-special { color: #6c71c4; } +.cm-s-solarized .cm-em { + color: #999; + text-decoration: underline; + text-decoration-style: dotted; +} +.cm-s-solarized .cm-strong { color: #eee; } +.cm-s-solarized .cm-tab:before { + content: "➤"; /*visualize tab character*/ + color: #586e75; +} + +.cm-s-solarized.cm-s-dark .CodeMirror-focused .CodeMirror-selected { + background: #386774; + color: inherit; +} + +.cm-s-solarized.cm-s-dark ::selection { + background: #386774; + color: inherit; +} + +.cm-s-solarized.cm-s-dark .CodeMirror-selected { + background: #586e75; +} + +.cm-s-solarized.cm-s-light .CodeMirror-focused .CodeMirror-selected { + background: #eee8d5; + color: inherit; +} + +.cm-s-solarized.cm-s-light ::selection { + background: #eee8d5; + color: inherit; +} + +.cm-s-solarized.cm-s-light .CodeMirror-selected { + background: #93a1a1; +} + + + +/* Editor styling */ + + + +/* Little shadow on the view-port of the buffer view */ +.cm-s-solarized.CodeMirror { + -moz-box-shadow: inset 7px 0 12px -6px #000; + -webkit-box-shadow: inset 7px 0 12px -6px #000; + box-shadow: inset 7px 0 12px -6px #000; +} + +/* Gutter border and some shadow from it */ +.cm-s-solarized .CodeMirror-gutters { + padding: 0 15px 0 10px; + box-shadow: 0 10px 20px black; + border-right: 1px solid; +} + +/* Gutter colors and line number styling based of color scheme (dark / light) */ + +/* Dark */ +.cm-s-solarized.cm-s-dark .CodeMirror-gutters { + background-color: #073642; + border-color: #00232c; +} + +.cm-s-solarized.cm-s-dark .CodeMirror-linenumber { + text-shadow: #021014 0 -1px; +} + +/* Light */ +.cm-s-solarized.cm-s-light .CodeMirror-gutters { + background-color: #eee8d5; + border-color: #eee8d5; +} + +/* Common */ +.cm-s-solarized .CodeMirror-linenumber { + color: #586e75; +} + +.cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text { + color: #586e75; +} + +.cm-s-solarized .CodeMirror-lines { + padding-left: 5px; +} + +.cm-s-solarized .CodeMirror-lines .CodeMirror-cursor { + border-left: 1px solid #819090; +} + +/* +Active line. Negative margin compensates left padding of the text in the +view-port +*/ +.cm-s-solarized .activeline { + margin-left: -20px; +} + +.cm-s-solarized.cm-s-dark .activeline { + background: rgba(255, 255, 255, 0.05); + +} +.cm-s-solarized.cm-s-light .activeline { + background: rgba(0, 0, 0, 0.05); +} + +/* +View-port and gutter both get little noise background to give it a real feel. +*/ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/solarized.mod.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/solarized.mod.css new file mode 100644 index 0000000..664e529 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/solarized.mod.css @@ -0,0 +1,204 @@ +/* +Solarized theme for code-mirror +http://ethanschoonover.com/solarized +*/ + +/* +Solarized color pallet +http://ethanschoonover.com/solarized/img/solarized-palette.png +*/ + +/* +Modified by kreatura for LayerSlider +*/ + +.solarized.base03 { color: #002b36; } +.solarized.base02 { color: #073642; } +.solarized.base01 { color: #586e75; } +.solarized.base00 { color: #657b83; } +.solarized.base0 { color: #839496; } +.solarized.base1 { color: #93a1a1; } +.solarized.base2 { color: #eee8d5; } +.solarized.base3 { color: #fdf6e3; } +.solarized.solar-yellow { color: #b58900; } +.solarized.solar-orange { color: #cb4b16; } +.solarized.solar-red { color: #dc322f; } +.solarized.solar-magenta { color: #d33682; } +.solarized.solar-violet { color: #6c71c4; } +.solarized.solar-blue { color: #268bd2; } +.solarized.solar-cyan { color: #2aa198; } +.solarized.solar-green { color: #859900; } + +/* Color scheme for code-mirror */ + +.cm-s-solarized { + line-height: 1.45em; + font-family: Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace !important; + color-profile: sRGB; + rendering-intent: auto; +} + + +.cm-s-solarized .CodeMirror-widget { + text-shadow: none; +} + + +.cm-s-solarized .cm-keyword { color: #cb4b16 } +.cm-s-solarized .cm-atom { color: #d33682; } +.cm-s-solarized .cm-number { color: #d33682; } +.cm-s-solarized .cm-def { color: #2aa198; } + +.cm-s-solarized .cm-variable { color: #268bd2; } +.cm-s-solarized .cm-variable-2 { color: #b58900; } +.cm-s-solarized .cm-variable-3 { color: #6c71c4; } + +.cm-s-solarized .cm-property { color: #2aa198; } +.cm-s-solarized .cm-operator {color: #6c71c4;} + +.cm-s-solarized .cm-comment { color: #586e75; font-style:italic; } + +.cm-s-solarized .cm-string { color: #859900; } +.cm-s-solarized .cm-string-2 { color: #b58900; } + +.cm-s-solarized .cm-meta { color: #859900; } +.cm-s-solarized .cm-error, +.cm-s-solarized .cm-invalidchar { + color: #586e75; + border-bottom: 1px dotted #dc322f; +} +.cm-s-solarized .cm-qualifier { color: #b58900; } +.cm-s-solarized .cm-builtin { color: #d33682; } +.cm-s-solarized .cm-bracket { color: #cb4b16; } +.cm-s-solarized .CodeMirror-matchingbracket { color: #859900; } +.cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; } +.cm-s-solarized .cm-tag { color: #93a1a1 } +.cm-s-solarized .cm-attribute { color: #2aa198; } +.cm-s-solarized .cm-header { color: #586e75; } +.cm-s-solarized .cm-quote { color: #93a1a1; } +.cm-s-solarized .cm-hr { + color: transparent; + border-top: 1px solid #586e75; + display: block; +} +.cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; } +.cm-s-solarized .cm-special { color: #6c71c4; } +.cm-s-solarized .cm-em { + color: #999; + text-decoration: underline; + text-decoration-style: dotted; +} + + + +/* Editor styling */ + + + +/* Little shadow on the view-port of the buffer view */ +.cm-s-solarized.CodeMirror { + height: auto; +} + +/* Gutter border and some shadow from it */ +.cm-s-solarized .CodeMirror-gutters { + padding: 0 10px 0 5px !important; + box-shadow: 0 0 10px #ddd; + margin-right: 10px; + padding-right: 4px; + border-right: 1px solid #ddd; + z-index: 1; +} + + +/* Common */ +.cm-s-solarized .CodeMirror-linenumber { + color: #586e75; + z-index: 2; +} + +.CodeMirror-code pre { + padding-left: 10px; +} + +.cm-s-solarized .CodeMirror-lines .CodeMirror-cursor { + margin-left: 6px; + border-left: 1px solid black; +} + +/* +Active line. Negative margin compensates left padding of the text in the +view-port +*/ +.cm-s-solarized .activeline { + margin-left: -20px; +} + +/* +View-port and gutter both get little noise background to give it a real feel. +*/ +.cm-s-solarized.CodeMirror, +.cm-s-solarized .CodeMirror-gutters { + background-image: url(../../img/cm-noise.png); +} + + + +.CodeMirror-activeline-background { + padding-left: 5px; + margin-left: -5px; + background: #f7f7f7 url(../../img/cm-noise.png); +} + +.CodeMirror-focused .CodeMirror-selected { + background: #d9ecff; +} + +.CodeMirror-foldmarker { + position: relative; + top: -1px; + margin: 0 5px; + padding: 0px 6px 1px 6px; + background: rgba(234, 58, 66, .7) url(../../img/cm-noise.png); + color: white; + border-radius: 7px; + box-shadow: 1px 1px 1px #aaa; + text-shadow: 0px 0px 2px black; + font-family: arial; + line-height: 16px; + cursor: pointer; +} + +.CodeMirror-foldgutter { + width: .7em; + z-index: 2 !important; +} + +.CodeMirror-gutter-elt { + z-index: 2 !important; +} + +.CodeMirror-foldgutter-folded { + color: #e60204 !important; + text-shadow: 1px 1px 1px #666; +} + +.CodeMirror-foldgutter-open, +.CodeMirror-foldgutter-folded { + color: #555; + cursor: pointer; + font-size: 20px; + margin: -2px 0 0 1px; +} + +.CodeMirror-foldgutter-open:after { + content: "\25BE"; +} + +.CodeMirror-foldgutter-folded:after { + content: "\25B8"; +} + +.CodeMirror .cm-tab { + background: url(../../img/cm-tab.png) center right no-repeat; +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/tomorrow-night-eighties.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/tomorrow-night-eighties.css new file mode 100644 index 0000000..d682120 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/tomorrow-night-eighties.css @@ -0,0 +1,33 @@ +/* + + Name: Tomorrow Night - Eighties + Author: Chris Kempson + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-tomorrow-night-eighties.CodeMirror {background: #000000; color: #CCCCCC;} +.cm-s-tomorrow-night-eighties div.CodeMirror-selected {background: #2D2D2D !important;} +.cm-s-tomorrow-night-eighties .CodeMirror-gutters {background: #000000; border-right: 0px;} +.cm-s-tomorrow-night-eighties .CodeMirror-linenumber {color: #515151;} +.cm-s-tomorrow-night-eighties .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;} + +.cm-s-tomorrow-night-eighties span.cm-comment {color: #d27b53;} +.cm-s-tomorrow-night-eighties span.cm-atom {color: #a16a94;} +.cm-s-tomorrow-night-eighties span.cm-number {color: #a16a94;} + +.cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute {color: #99cc99;} +.cm-s-tomorrow-night-eighties span.cm-keyword {color: #f2777a;} +.cm-s-tomorrow-night-eighties span.cm-string {color: #ffcc66;} + +.cm-s-tomorrow-night-eighties span.cm-variable {color: #99cc99;} +.cm-s-tomorrow-night-eighties span.cm-variable-2 {color: #6699cc;} +.cm-s-tomorrow-night-eighties span.cm-def {color: #f99157;} +.cm-s-tomorrow-night-eighties span.cm-error {background: #f2777a; color: #6A6A6A;} +.cm-s-tomorrow-night-eighties span.cm-bracket {color: #CCCCCC;} +.cm-s-tomorrow-night-eighties span.cm-tag {color: #f2777a;} +.cm-s-tomorrow-night-eighties span.cm-link {color: #a16a94;} + +.cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/twilight.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/twilight.css new file mode 100644 index 0000000..fd8944b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/twilight.css @@ -0,0 +1,26 @@ +.cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/ +.cm-s-twilight .CodeMirror-selected { background: #323232 !important; } /**/ + +.cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; } +.cm-s-twilight .CodeMirror-linenumber { color: #aaa; } +.cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white !important; } + +.cm-s-twilight .cm-keyword { color: #f9ee98; } /**/ +.cm-s-twilight .cm-atom { color: #FC0; } +.cm-s-twilight .cm-number { color: #ca7841; } /**/ +.cm-s-twilight .cm-def { color: #8DA6CE; } +.cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/ +.cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def { color: #607392; } /**/ +.cm-s-twilight .cm-operator { color: #cda869; } /**/ +.cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/ +.cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/ +.cm-s-twilight .cm-string-2 { color:#bd6b18 } /*?*/ +.cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/ +.cm-s-twilight .cm-error { border-bottom: 1px solid red; } +.cm-s-twilight .cm-builtin { color: #cda869; } /*?*/ +.cm-s-twilight .cm-tag { color: #997643; } /**/ +.cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/ +.cm-s-twilight .cm-header { color: #FF6400; } +.cm-s-twilight .cm-hr { color: #AEAEAE; } +.cm-s-twilight .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } /**/ + diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/vibrant-ink.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/vibrant-ink.css new file mode 100644 index 0000000..4445be2 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/vibrant-ink.css @@ -0,0 +1,27 @@ +/* Taken from the popular Visual Studio Vibrant Ink Schema */ + +.cm-s-vibrant-ink.CodeMirror { background: black; color: white; } +.cm-s-vibrant-ink .CodeMirror-selected { background: #35493c !important; } + +.cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white !important; } + +.cm-s-vibrant-ink .cm-keyword { color: #CC7832; } +.cm-s-vibrant-ink .cm-atom { color: #FC0; } +.cm-s-vibrant-ink .cm-number { color: #FFEE98; } +.cm-s-vibrant-ink .cm-def { color: #8DA6CE; } +.cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D } +.cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def { color: #FFC66D } +.cm-s-vibrant-ink .cm-operator { color: #888; } +.cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; } +.cm-s-vibrant-ink .cm-string { color: #A5C25C } +.cm-s-vibrant-ink .cm-string-2 { color: red } +.cm-s-vibrant-ink .cm-meta { color: #D8FA3C; } +.cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; } +.cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; } +.cm-s-vibrant-ink .cm-tag { color: #8DA6CE; } +.cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; } +.cm-s-vibrant-ink .cm-header { color: #FF6400; } +.cm-s-vibrant-ink .cm-hr { color: #AEAEAE; } +.cm-s-vibrant-ink .cm-link { color: blue; } diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/xq-dark.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/xq-dark.css new file mode 100644 index 0000000..fd9bb12 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/xq-dark.css @@ -0,0 +1,46 @@ +/* +Copyright (C) 2011 by MarkLogic Corporation +Author: Mike Brevoort + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +.cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; } +.cm-s-xq-dark span.CodeMirror-selected { background: #a8f !important; } +.cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; } +.cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white !important; } + +.cm-s-xq-dark span.cm-keyword {color: #FFBD40;} +.cm-s-xq-dark span.cm-atom {color: #6C8CD5;} +.cm-s-xq-dark span.cm-number {color: #164;} +.cm-s-xq-dark span.cm-def {color: #FFF; text-decoration:underline;} +.cm-s-xq-dark span.cm-variable {color: #FFF;} +.cm-s-xq-dark span.cm-variable-2 {color: #EEE;} +.cm-s-xq-dark span.cm-variable-3 {color: #DDD;} +.cm-s-xq-dark span.cm-property {} +.cm-s-xq-dark span.cm-operator {} +.cm-s-xq-dark span.cm-comment {color: gray;} +.cm-s-xq-dark span.cm-string {color: #9FEE00;} +.cm-s-xq-dark span.cm-meta {color: yellow;} +.cm-s-xq-dark span.cm-error {color: #f00;} +.cm-s-xq-dark span.cm-qualifier {color: #FFF700;} +.cm-s-xq-dark span.cm-builtin {color: #30a;} +.cm-s-xq-dark span.cm-bracket {color: #cc7;} +.cm-s-xq-dark span.cm-tag {color: #FFBD40;} +.cm-s-xq-dark span.cm-attribute {color: #FFF700;} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/xq-light.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/xq-light.css new file mode 100644 index 0000000..08784d5 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/codemirror/theme/xq-light.css @@ -0,0 +1,43 @@ +/* +Copyright (C) 2011 by MarkLogic Corporation +Author: Mike Brevoort + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +.cm-s-xq-light span.cm-keyword {line-height: 1em; font-weight: bold; color: #5A5CAD; } +.cm-s-xq-light span.cm-atom {color: #6C8CD5;} +.cm-s-xq-light span.cm-number {color: #164;} +.cm-s-xq-light span.cm-def {text-decoration:underline;} +.cm-s-xq-light span.cm-variable {color: black; } +.cm-s-xq-light span.cm-variable-2 {color:black;} +.cm-s-xq-light span.cm-variable-3 {color: black; } +.cm-s-xq-light span.cm-property {} +.cm-s-xq-light span.cm-operator {} +.cm-s-xq-light span.cm-comment {color: #0080FF; font-style: italic;} +.cm-s-xq-light span.cm-string {color: red;} +.cm-s-xq-light span.cm-meta {color: yellow;} +.cm-s-xq-light span.cm-error {color: #f00;} +.cm-s-xq-light span.cm-qualifier {color: grey} +.cm-s-xq-light span.cm-builtin {color: #7EA656;} +.cm-s-xq-light span.cm-bracket {color: #cc7;} +.cm-s-xq-light span.cm-tag {color: #3F7F7F;} +.cm-s-xq-light span.cm-attribute {color: #7F007F;} + +.cm-s-xq-light .CodeMirror-activeline-background {background: #e8f2ff !important;} +.cm-s-xq-light .CodeMirror-matchingbracket {border:1px solid grey;color:black !important;background:yellow;} \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/admin.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/admin.css new file mode 100644 index 0000000..70629f4 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/admin.css @@ -0,0 +1,1120 @@ +/**************************************************/ +/* EDITOR GENERAL */ +/**************************************************/ + +.ls-page { + display: none; +} + +.ls-page.active { + display: block; +} + +.ls-box .header, .ls-box thead, .ls-box th { + height: 29px; + margin: 0px; + padding: 0px 10px; + border-top: 1px solid #fff; + border-bottom: 1px solid #dfdfdf; + font: normal normal bold 12px/29px Arial, serif; + color: #333; + text-shadow: 0px 1px 0px #fff; + text-align: left; + + background: #f9f9f9; /* Old browsers */ + background: -moz-linear-gradient(top, #f9f9f9 0%, #ededed 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#ededed)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f9f9f9 0%,#ededed 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f9f9f9 0%,#ededed 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f9f9f9 0%,#ededed 100%); /* IE10+ */ + background: linear-gradient(to bottom, #f9f9f9 0%,#ededed 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f9f9f9', endColorstr='#ededed',GradientType=0 ); /* IE6-9 */ +} + +#ls-layers td { + border-bottom: 1px solid #dfdfdf !important; +} + +.ls-box .header { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} + + +.ls-box table { + width: 100%; + border-collapse: collapse; + border-spacing: 0px; +} + + +.ls-box a { + text-decoration: none; +} + +.ls-settings tbody td:first-child { + width: 200px; + text-align: right; + font-size: 12px; + color: #333; +} + +.ls-settings .wp-color-result { + width: 120px; +} + +/**************************************************/ +/* SETTINGS PAGE */ +/**************************************************/ + + +.ls-box h4 { + margin: 0px; +} + +.ls-box td.desc { + margin: 0px; + color: #898989; + font-size: 11px; +} + +.ls-box td div.reset-parent { + position: relative; +} + +.ls-box .input, .ls-box select { + width: 150px; +} + + + +.ls-box .ls-reset { + position: absolute; + top: 7px; + left: 135px; + width: 10px; + height: 10px; + border-radius: 5px; + background-color: #666; + font-size: 8px; + line-height: 10px; + text-align: center; + color: #fff; + cursor: pointer; + box-shadow: 0px 0px 5px 5px #fff; +} + +.ls-slide-options .ls-reset { + left: 105px; +} + +.ls-slide-options button { + padding: 0px !important; + margin: 0px !important; + width: 120px; +} + +.ls-slide-options .checkbox, .ls-sublayers .checkbox { + width: auto; + height: auto; +} + + + +#ls-icon-preview { + width: 16px; + height: 16px; + display: block; + float: left; + margin: 6px 8px 0px 10px; + background: transparent url(../img/sprite.png) 0px -183px no-repeat; +} + +/**************************************************/ +/* LAYERS */ +/**************************************************/ + +#ls-sample { + display: none; +} + +#ls-layer-tabs { + position: relative; + z-index: 1; +} + +#ls-layer-tabs a { + display: block !important; + position: relative; + width: 78px; + height: 30px; + padding: 0px 10px; + border: 1px solid #dfdfdf; + color: #c7c7c7; + background-color: #f9f9f9; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + text-decoration: none; + font: normal normal bold 13px/30px Arial, serif; + float: left; + margin: 3px 3px 0px 0px; +} + +#ls-layer-tabs .ui-sortable-helper { + position: absolute !important; +} + +#ls-layer-tabs a span { + display: inline-block; + width: 10px; + height: 10px; + position: absolute; + top: 8px; right: 10px; + border: 1px solid #ad1714; + font: normal normal normal 10px/10px Arial, serif; + color: #FFF; + background-color: #db1b17; + border-radius: 6px; + text-align: center; + -webkit-box-shadow:inset 1px 1px 0px rgba(255,255,255,0.2),1px 1px 0px #fff; + -moz-box-shadow:inset 1px 1px 0px rgba(255,255,255,0.2),1px 1px 0px #fff; + box-shadow:inset 1px 1px 0px rgba(255,255,255,0.2),1px 1px 0px #fff; +} + +#ls-layer-tabs a span { + display: none; +} + +#ls-add-layer { + border: 0px !important; + margin: 4px 0px 0px 5px !important; + padding: 0px 0px 0px 20px !important; + color: #2175a7 !important; + font-weight: normal !important; + background: #fff url(../img/sprite.png) 0px -425px no-repeat !important; + width: auto !important; +} + +.ls-add-sublayer { + display: inline-block; + height: 20px; + border: 0px !important; + margin: 10px 0px 10px 10px !important; + padding: 0px 0px 0px 20px !important; + color: #2175a7 !important; + font-weight: normal !important; + background: #fff url(../img/sprite.png) 0px -429px no-repeat !important; + text-decoration: none; + font: normal normal normal 13px/20px Arial, serif; +} + +#ls-layer-tabs a.active { + color: #333; + border-bottom: 1px solid #f9f9f9; + background: #f9f9f9; /* Old browsers */ + background: -moz-linear-gradient(top, #f2f2f2 0%, #f9f9f9 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f2f2f2), color-stop(100%,#f9f9f9)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f2f2f2 0%,#f9f9f9 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f2f2f2 0%,#f9f9f9 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f2f2f2 0%,#f9f9f9 100%); /* IE10+ */ + background: linear-gradient(to bottom, #f2f2f2 0%,#f9f9f9 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f2f2f2', endColorstr='#f9f9f9',GradientType=0 ); /* IE6-9 */ +} + +#ls-layer-tabs a.active span { + display: inline-block; +} + +.ls-layer-box { + display: none; + top: -1px; + position: relative; + margin-top: 0 !important; +} + +.ls-layer-box.active { + display: block; +} + +.ls-layer-box thead { + border-top: 0px; + background: #f2f2f2; /* Old browsers */ + background: -moz-linear-gradient(top, #f2f2f2 0%, #ececec 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f2f2f2), color-stop(100%,#ececec)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f2f2f2 0%,#ececec 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f2f2f2 0%,#ececec 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f2f2f2 0%,#ececec 100%); /* IE10+ */ + background: linear-gradient(to bottom, #f2f2f2 0%,#ececec 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f2f2f2', endColorstr='#ececec',GradientType=0 ); /* IE6-9 */ +} + +#ls-icon-layer-options { + display: block; + width: 16px; + height: 16px; + float: left; + margin: 6px 8px 0px 10px; + background: transparent url(../img/sprite.png) 0px -376px no-repeat; +} + +.ls-layer-duplicate { + float: right; + margin-right: 8px; + font-weight: normal; +} + +.ls-select-transitions { + margin-left: 5px !important; +} + +#ls-icon-sublayers { + display: block; + width: 16px; + height: 16px; + float: left; + margin: 6px 8px 0px 10px; + background: transparent url(../img/sprite.png) 0px -403px no-repeat; +} + +.ls-slide-options input, .ls-slide-options select { + width: 120px; +} + +.ls-slide-options td { + color: #999; +} + +.ls-slide-options td:first-child { + width: 120px; + padding-right: 10px; + text-align: right; + color: #333; +} + +.ls-slide-options .right { + text-align: right; +} + +.ls-preview { + background-position: center center; + background-repeat: no-repeat; +} + +.ls-preview-td { + background-color: white !important; +} + +.ls-preview-wrapper { + margin: 0px auto; + position: relative; +} + +.ls-preview, .ls-preview .draggable { + display: block; + width: 600px; + height: 300px; + background-color: #fff; + border: 1px solid #ddd; + margin: 10px auto; + position: relative; +} + +.ls-preview .draggable { + border: 0px; + margin: 0px; + overflow: hidden; + background-color: transparent; + background-position: center center !important; + background-repeat: no-repeat; +} + +.ls-preview .draggable > * { + position: absolute; + margin: 0px; + padding: 0px; + line-height: normal; +} + +.ls-preview .draggable img { + min-width: none; + max-width: none; +} + +.ls-preview img.ui-draggable-dragging { + box-shadow: 0px 0px 7px black; +} + +.ls-preview-button { + margin: 0px 0px 10px 10px +} + +.ls-real-time-preview { + display: none; +} + +.layerslider { + margin: 10px auto; + background-position: center center; +} + + +/**************************************************/ +/* SUBLAYERS */ +/**************************************************/ + +.notfirst { + width: auto !important; + padding-right: 0px !important; + color: #999 !important; +} + +.ls-sublayers td { + height: 38px; + padding: 0px !important; +} + + +.ls-sublayers tr { + cursor: pointer; +} + + +.ls-sublayer-wrapper { + position: relative; +} + +.ls-sublayer-number { + display: block; + width: 26px; + height: 16px; + float: left; + margin: 9px 7px; + border-radius: 6px; + border: 1px solid #cdcdcd; + background-color: #e9e9e9; + text-align: center; + color: #818181; + font: normal normal normal 13px/20px Arial, serif; + font-size: 11px; + line-height: 16px; + -webkit-font-smoothing: antialiased; +} + + +.ls-sublayer-title { + width: 250px; + float: left; + margin: 0px; + margin-top: 7px; + font: normal normal normal 12px/14px Arial, serif; + color: #333; + background-color: transparent !important; + border: 1px solid transparent !important; + box-shadow: none !important; +} + +.ls-sublayer-title:hover, .ls-sublayer-title:focus { + border: 1px solid #7F9AB7 !important; + background-color: transparent !important; +} + +.ls-sublayers tr.active .ls-sublayer-wrapper { + border-top: 1px solid #ecf3fc; + border-bottom: 0px; + background: #d8eafa; /* Old browsers */ + background: -moz-linear-gradient(top, #d8eafa 0%, #c4daf6 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#d8eafa), color-stop(100%,#c4daf6)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #d8eafa 0%,#c4daf6 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #d8eafa 0%,#c4daf6 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #d8eafa 0%,#c4daf6 100%); /* IE10+ */ + background: linear-gradient(to bottom, #d8eafa 0%,#c4daf6 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#d8eafa', endColorstr='#c4daf6',GradientType=0 ); /* IE6-9 */ +} + +.ls-sublayer-pages { + display: none; +} + +.ls-sublayer-pages tr { + cursor: default; +} + +.ls-sublayer-page td { + padding: 5px 0px !important; +} + +.ls-sublayers tr.active .ls-sublayer-pages { + display: block; +} + +.ls-sublayers .active .ls-sublayer-number { + border: 1px solid #adbfcf; + background-color: #c9dbf0; + box-shadow: inset 0px 0px 2px #b2c8e1; +} + +.ls-sublayers .active .ls-sublayer-title { + color: #475e77; +} + +.ls-sublayers .ui-sortable-helper { + box-shadow: 0px 8px 5px -4px rgba(0,0,0,0.1), 0px -8px 5px -4px rgba(0,0,0,0.1); +} + +.ls-sublayer-nav { + width: 600px; + display: none; + position: absolute !important; + top: 5px; + right: 5px; + text-align: right; +} + +.ls-sublayer-nav a { + display: inline-block; + height: 30px; + padding: 0px 10px; + border: 1px solid transparent; + border-bottom: 0px; + text-decoration: none; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + font: normal normal normal 13px/30px Arial, serif; +} + +.ls-sublayer-nav a.active { + border: 1px solid #b8cfe9; + border-bottom: 0px; + background-color: #fff; +} + +.ls-sublayer-nav a.remove { + width: 10px; + height: 10px; + padding: 0px; + margin: 0px 10px; + position: relative; + top: -2px; + border: 1px solid #ad1714; + font: normal normal normal 10px/10px Arial, serif; + color: #FFF; + background-color: #db1b17; + border-radius: 6px; + text-align: center; + -webkit-box-shadow:inset 1px 1px 0px rgba(255,255,255,0.2),1px 1px 0px #fff; + -moz-box-shadow:inset 1px 1px 0px rgba(255,255,255,0.2),1px 1px 0px #fff; + box-shadow:inset 1px 1px 0px rgba(255,255,255,0.2),1px 1px 0px #fff; +} + +.ls-sublayers .active .ls-sublayer-nav { + display: block; +} + +.ls-sublayer-pages { + background-color: #fff; + cursor: default; +} + +.ls-sublayer-pages .ls-sublayer-page { + display: none; +} + +.ls-sublayer-pages .ls-sublayer-page.active { + display: block; +} + +.ls-sublayer-wrapper { + width: 100%; +} + +/* SUBLAYER BASIC */ + + +.ls-sublayer-basic { + padding-top: 15px; +} + +.ls-icon-img { + background: transparent url(../img/sprite.png) 0px -457px no-repeat; +} + +.ls-icon-div { + background: transparent url(../img/sprite.png) 0px -482px no-repeat; +} + +.ls-icon-p { + background: transparent url(../img/sprite.png) 0px -509px no-repeat; +} + +.ls-icon-span { + background: transparent url(../img/sprite.png) 0px -536px no-repeat; +} + +.ls-icon-h1 { + background: transparent url(../img/sprite.png) 0px -563px no-repeat; +} + +.ls-icon-h2 { + background: transparent url(../img/sprite.png) 0px -590px no-repeat; +} + +.ls-icon-h3 { + background: transparent url(../img/sprite.png) 0px -617px no-repeat; +} + +.ls-icon-h4 { + background: transparent url(../img/sprite.png) 0px -644px no-repeat; +} + +.ls-icon-h5 { + background: transparent url(../img/sprite.png) 0px -671px no-repeat; +} + +.ls-icon-h6 { + background: transparent url(../img/sprite.png) 0px -698px no-repeat; +} + +.ls-image-uploader { + width: 500px; + margin: 20px auto 0 auto; +} + +.ls-image-uploader .ls-image { + float: left; +} + +.ls-html-code { + width: 620px; + margin: 15px auto 0 auto; +} + +.ls-html-code h5 { + margin: 0px 0px 10px 0px; +} + +.ls-html-code textarea { + width: 100%; + height: 100px; +} + + +.ls-image-uploader p { + float: right; + width: 330px; + margin: 13px 0 35px 0; + text-align: center; + color: #999; + font: normal normal normal 12px/14px Arial, serif; + text-align: justify; +} + +.ls-image-uploader input { + width: 425px; +} +/* SUBLAYER OPTIONS */ + +.ls-sublayer-options td { + color: #999; +} + +.ls-sublayer-options td.right { + padding-right: 10px !important; + text-align: right; +} + +.ls-sublayer-options input { + width: 60px; +} + +.ls-sublayer-options select { + width: 80px; +} + +.ls-sublayer-options td:first-child { + width: 90px; + padding-right: 10px !important; + text-align: right; + color: #333; +} + +/* SUBLAYER LINK */ + +.ls-sublayer-link td { + color: #999; +} + +.ls-sublayer-link .url { + width: 400px; +} + +.ls-sublayer-link input { + width: 400px; +} + +.ls-sublayer-link td:first-child { + width: 150px; + padding-right: 10px !important; + text-align: right; + color: #333; +} + +/* SUBLAYER STYLE */ + +.ls-sublayer-style td { + color: #999; +} + +.ls-sublayer-style td input { + width: 100px; +} + +.ls-sublayer-style td.right { + padding-right: 10px !important; + text-align: right; +} + +.ls-sublayer-style input { + width: 80px; +} + +.ls-sublayer-style td:first-child { + width: 150px; + padding-right: 10px !important; + text-align: right; + color: #333; +} + +.ls-sublayer-style textarea { + width: 98%; + height: 40px; + margin: 10px 0px; +} + + +/* SUBLAYER ATTRIBUTES */ + +.ls-sublayer-attributes td { + color: #999; +} + +.ls-sublayer-attributes td.right { + padding-right: 10px !important; + text-align: right; +} + +.ls-sublayer-attributes input { + width: 120px; +} + +.ls-sublayer-attributes td:first-child { + width: 150px; + padding-right: 10px !important; + text-align: right; + color: #333; +} + +/* SUBLAYER HTML */ + +.ls-sublayer-html { + padding: 10px; +} + +.ls-sublayer-html h5 { + margin: 0px 10px 10px 0px; + cursor: default !important; +} + +.ls-sublayer-html textarea { + width: 100%; + height: 100px; +} + +/**************************************************/ +/* CALLBACK BOXES */ +/**************************************************/ + +.ls-callback-page { + margin: 0px -10px 0px 0px; +} + +.ls-callback-box { + margin: 0px 10px 10px 0px; +} + +.ls-callback-box figure { + display: inline; + margin: 0; + color: #999; + font-weight: normal; +} +.ls-callback-box figure span { + margin: 0 5px; +} + +.ls-callback-box textarea{ + width: 100%; + height: 150px; +} + +/**************************************************/ +/* MAIN MENU */ +/**************************************************/ + +#ls-main-nav-bar { + height: 38px; + border: 1px solid #dfdfdf; + border-radius: 3px; + margin: 10px 0px; + line-height: 38px; + margin: 10px 0 30px 0; + + background: #f9f9f9; /* Old browsers */ + background: -moz-linear-gradient(top, #f9f9f9 0%, #ececec 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#ececec)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f9f9f9 0%,#ececec 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f9f9f9 0%,#ececec 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f9f9f9 0%,#ececec 100%); /* IE10+ */ + background: linear-gradient(to bottom, #f9f9f9 0%,#ececec 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f9f9f9', endColorstr='#ececec',GradientType=0 ); /* IE6-9 */ + +} + +#ls-main-nav-bar a { + display: block; + height: 38px; + margin: 0px; + float: left; + + font: normal normal normal 13px/38px Arial, serif; + color: #2175a7; + text-decoration: none; + text-shadow: 0px 1px 0px #fff; +} + +#ls-main-nav-bar a span { + display: block; + height: 38px; + padding: 0px 10px 0px 34px; +} + +#ls-main-nav-bar .right { + float: right; +} + +#ls-main-nav-bar a:last-child { + display: none; +} + +#ls-main-nav-bar a.support { + float: right; + background: transparent url(../img/sprite.png) 10px -81px no-repeat; +} + + +#ls-main-nav-bar a.active { + color: #464646; + background: #f9f9f9; /* Old browsers */ + background: -moz-linear-gradient(top, #f9f9f9 1%, #d8d8d8 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#f9f9f9), color-stop(100%,#d8d8d8)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f9f9f9 1%,#d8d8d8 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f9f9f9 1%,#d8d8d8 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f9f9f9 1%,#d8d8d8 100%); /* IE10+ */ + background: linear-gradient(to bottom, #f9f9f9 1%,#d8d8d8 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f9f9f9', endColorstr='#d8d8d8',GradientType=0 ); /* IE6-9 */ +} + + +#ls-main-nav-bar a.active span { + border-left: 1px solid transparent !important; +} + +#ls-main-nav-bar a.active:first-child { + border-radius: 3px 0 0 3px; +} + +#ls-main-nav-bar a.active:first-child span { + border-left: 0 !important; +} + +#ls-main-nav-bar a.callbacks.active span { + border-right: 1px solid #dfdfdf; +} + +#ls-main-nav-bar a.settings span { + border-right: 1px solid #dfdfdf; + background: transparent url(../img/sprite.png) 10px 0px no-repeat; +} + +#ls-main-nav-bar a.layers span { + border-left: 1px solid #fff; + border-right: 1px solid #dfdfdf; + background: transparent url(../img/sprite.png) 10px -27px no-repeat; +} + +#ls-main-nav-bar a.callbacks span { + border-left: 1px solid #fff; + background: transparent url(../img/sprite.png) 10px -54px no-repeat; +} + +#ls-main-nav-bar a.faq { + background: transparent url(../img/sprite.png) 10px -935px no-repeat; +} + +#ls-main-nav-bar a.help { + background: transparent url(../img/sprite.png) 10px -81px no-repeat; +} + +/**************************************************/ +/* SUPPORT */ +/**************************************************/ + +.ls-support thead td { + padding: 0px 10px; +} + +.ls-support tbody td { + padding: 15px; + text-align: justify; + color: #666; +} + +.ls-publish button { + float: left; +} + +.ls-saving-warning { + float: left; + margin: 5px 0px 0px 10px; +} + +.ls-preview-button { + display: block !important; + margin: 0px auto 5px auto !important; +} + +.wp-core-ui button.saving, .wp-core-ui button.saving:disabled, .wp-core-ui button.saving[disabled] { + text-shadow: none !important; + cursor: default !important; + color: white !important; + background: #ff3232 !important; + background: -moz-linear-gradient(top, #ff3232 0%, #b50000 100%) !important; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ff3232), color-stop(100%,#b50000)) !important; + background: -webkit-linear-gradient(top, #ff3232 0%,#b50000 100%) !important; + background: -o-linear-gradient(top, #ff3232 0%,#b50000 100%) !important; + background: -ms-linear-gradient(top, #ff3232 0%,#b50000 100%) !important; + background: linear-gradient(to bottom, #ff3232 0%,#b50000 100%) !important; + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff3232', endColorstr='#b50000',GradientType=0 ) !important; + border: 1px solid #ff3232 !important; +} + +.wp-core-ui button.saved, .wp-core-ui button.saved:disabled, .wp-core-ui button.saved[disabled], button.playing { + text-shadow: none !important; + color: white !important; + background: #76c928 !important; + background: -moz-linear-gradient(top, #76c928 0%, #3e7f19 100%) !important; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#76c928), color-stop(100%,#3e7f19)) !important; + background: -webkit-linear-gradient(top, #76c928 0%,#3e7f19 100%) !important; + background: -o-linear-gradient(top, #76c928 0%,#3e7f19 100%) !important; + background: -ms-linear-gradient(top, #76c928 0%,#3e7f19 100%) !important; + background: linear-gradient(to bottom, #76c928 0%,#3e7f19 100%) !important; + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#76c928', endColorstr='#3e7f19',GradientType=0 ) !important; + border: 1px solid #76c928 !important; +} + +.yourlogo { + z-index: 99; + position: absolute; +} + + +/**************************************************/ +/* LIST VIEW */ +/**************************************************/ +.wp-list-table { + margin: 15px 0px; +} + +.ls-box.ls-import-box textarea { + width: 100%; + height: 100px; +} + +.ls-box.ls-slider-list table { + width: 100%; + border-collapse: collapse; + border-spacing: 0px; +} + +.ls-box.ls-slider-list thead td { + padding-left: 10px; +} + +.ls-box.ls-slider-list tbody td { + height: 20px; +} + +.ls-box.ls-slider-list td:first-child { + text-align: center; +} + +.ls-box.ls-slider-list a { + text-decoration: none !important; +} + +.ls-help-pointer .inner { + padding: 10px; + text-align: justify; +} + +.ls-help-pointer .wp-pointer-arrow { + left: auto; + right: 10px; +} + +.ls-auto-update .header { + background: #2a95c5; + background: -moz-linear-gradient(top, #2a95c5 0%, #21759b 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2a95c5), color-stop(100%,#21759b)); + background: -webkit-linear-gradient(top, #2a95c5 0%,#21759b 100%); + background: -o-linear-gradient(top, #2a95c5 0%,#21759b 100%); + background: -ms-linear-gradient(top, #2a95c5 0%,#21759b 100%); + background: linear-gradient(to bottom, #2a95c5 0%,#21759b 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2a95c5', endColorstr='#21759b',GradientType=0 ); + text-shadow: 0px -1px 0px #21759b; + color: white; + border-top: 1px solid #CCEFFC; +} + +.ls-auto-update { + border-top: 0px; +} + +.ls-auto-update input { + font: normal normal normal 13px/15px Arial, sans-serif; + color: #333; +} + +.ls-auto-update tfoot span { + margin-left: 10px; +} + +.ls-builder-preview-button { + margin: 10px 0px 6px 0px; + text-align: center; +} + +/**************************************************/ +/* tl VIEW */ +/**************************************************/ + +.ls-tl { + background: #fff; + margin-left: 211px; + margin-right: 10px; + position: relative; + top: 13px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + display: none; + border: 1px solid #ddd; +} + +.ls-tl-active { + display: block !important; +} + +.ls-tl table { + height: 100%; + border-spacing: 0; + padding: 0; + background: none; + -webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC); + -moz-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC); + mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.ls-tl table, +.ls-tl table td, +.ls-tl table tr { + width: auto; +} + +#ls-layers .ls-tl td { + padding: 0 !important; + border: 0 !important; + width: 0; +} + +.ls-tl, +#ls-layers .ls-tl td { + height: 8px !important; +} + +.ls-tl-delayin { + background: #ddd !important; +} + +.ls-tl-durationin, +.ls-tl-durationout { + background: #aaa !important; +} + +.ls-tl-showuntil { + background: #555 !important; +} + +.ls-tl-slider { + width: 0px; + height : 36px; + position: absolute; + z-index: 1; + background: rgba(255,255,255,.75); + border-right: 1px solid #777; + left: 0px; + top: -14px; + overflow: visible !important; +} + +.ls-tl-timer { + font-size: 12px; + color: #333; + position: absolute; + z-index: 1; + right: 0px; + top: -20px; + font-weight: bold; + width: 100px; + text-align: right; +} + +.ls-tl-ruler { + margin-left: 211px; + margin-right: 10px; + position: relative; + height: 0px; + z-index: 10; +} + +.ls-tl-ruler div { + position: absolute; + width: 0px; + height: 100%; + border-right: 1px dotted #999; + top: 0px; +} + +.ls-tl-ruler div p { + position: absolute; + right: -10px; + top: -30px; + height: 20px; + line-height: 20px; + text-align: right; + width: 50px; + color: #999; + font-size: 11px; +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/admin_new.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/admin_new.css new file mode 100644 index 0000000..5955973 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/admin_new.css @@ -0,0 +1,1338 @@ +html { + background: white; } + +.clear { + clear: both; + float: none !important; } + +.wrap { + position: relative; } + +.wrap a { + outline: none; } + +#screen-meta-links { + position: relative; + z-index: 10; } + +.ls-hidden { + display: none !important; } + +.wrap .ls-preview *, +.wrap .ls-layer * { + text-shadow: none; } + +.clearfix:before, +.clearfix:after { + content: " "; + display: table; } + +.clearfix:after { + clear: both; } + +.clearfix { + zoom: 1; } + +.ls-icon { + width: 16px; + height: 16px; + display: block; + float: left; + margin: 12px 8px 0px 10px; } + .ls-icon.layout { + background: transparent url("../img/sprite.png") 0px -156px no-repeat; } + .ls-icon.slideshow, .ls-icon.preview { + background: transparent url("../img/sprite.png") 0px -183px no-repeat; } + .ls-icon.appearance { + background: transparent url("../img/sprite.png") 0px -210px no-repeat; } + .ls-icon.navigation { + background: transparent url("../img/sprite.png") 0px -726px no-repeat; } + .ls-icon.thumbnails { + background: transparent url("../img/sprite.png") 0px -1001px no-repeat; } + .ls-icon.videos { + background: transparent url("../img/sprite.png") 0px -973px no-repeat; } + .ls-icon.misc { + background: transparent url("../img/sprite.png") 0px -237px no-repeat; } + .ls-icon.troubleshooting { + background: transparent url("../img/sprite.png") 0px -782px no-repeat; } + .ls-icon.yourlogo { + background: transparent url("../img/sprite.png") 0px -264px no-repeat; + position: static; } + .ls-icon.advanced { + background: transparent url("../img/sprite.png") 0px -264px no-repeat; } + .ls-icon.font { + background: transparent url("../img/sprite.png") 0px -1030px no-repeat; } + .ls-icon.img { + background: transparent url("../img/layers.png") 0px 0px no-repeat; } + .ls-icon.text { + background: transparent url("../img/layers.png") 0px -36px no-repeat; } + .ls-icon.post { + background: transparent url("../img/layers.png") 0px -72px no-repeat; } + .ls-icon.video { + background: transparent url("../img/layers.png") 0px -108px no-repeat; } + +.columns .half { + width: 49%; + width: calc(50% - 15px); + margin-left: 30px; + *margin-left: 2%; + float: left; } + .columns .half:first-child { + margin-left: 0; } + +.ls-overlay { + width: 100%; + height: 100%; + position: fixed; + left: 0; + top: 0; + background-color: black; + opacity: 0.5; + z-index: 2000; } + +.ls-notification { + padding: 0 0 2px 0 !important; + margin: 10px 0; + background: #c9c9c9; + border-radius: 3px; + box-shadow: 0 1px 1px #999; } + .ls-notification div { + padding: 5px 10px; + background: #ddd; + border-radius: 3px; + font-family: Helvetica, Arial, sans-serif, serif; + font-size: 15px; + line-height: 20px; } + +.ls-notification.changed { + background: #ecdf86; + box-shadow: 0 1px 2px #bba98a; } + .ls-notification.changed div { + background: #fffbcc; + background: -webkit-linear-gradient(to bottom, #fffbcc 0%, #fffb99 100%); + background: -moz-linear-gradient(to bottom, #fffbcc 0%, #fffb99 100%); + background: -o-linear-gradient(to bottom, #fffbcc 0%, #fffb99 100%); + background: -ms-linear-gradient(to bottom, #fffbcc 0%, #fffb99 100%); + background: linear-gradient(to bottom, #fffbcc 0%, #fffb99 100%); + color: #795d1c; } + +.ls-notification.warning { + background: #dfafb0; + box-shadow: 0 1px 2px #a27172; } + .ls-notification.warning div { + background: #ffebe6; + background: -webkit-linear-gradient(to bottom, #ffebe6 0%, #f0c8c7 100%); + background: -moz-linear-gradient(to bottom, #ffebe6 0%, #f0c8c7 100%); + background: -o-linear-gradient(to bottom, #ffebe6 0%, #f0c8c7 100%); + background: -ms-linear-gradient(to bottom, #ffebe6 0%, #f0c8c7 100%); + background: linear-gradient(to bottom, #ffebe6 0%, #f0c8c7 100%); + color: #581b1e; } + +.ls-checkbox { + display: inline-block; + width: 35px; + height: 16px; + margin-bottom: -3px; + position: relative; + background: transparent url(../img/sprite.png) 0px -291px no-repeat; } + +.ls-checkbox span { + display: inline-block; + width: 19px; + height: 19px; + position: absolute; + top: -1px; + left: 17px; + background: transparent url(../img/sprite.png) 0px -343px no-repeat; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; } + +.ls-checkbox.on { + background: transparent url(../img/sprite.png) 0px -317px no-repeat; } + +.ls-checkbox.on span { + left: -2px; } + +.ls-popup { + width: 300px; + height: 150px; + position: absolute; + padding: 20px; + background: white; + border-radius: 7px; + color: #eee; + z-index: 6000; + box-shadow: 0px 2px 10px -2px black; } + +.ls-popup .inner { + width: 300px; + height: 150px; } + +.ls-tooltip { + max-width: 260px; + min-width: 120px; + position: absolute; + padding: 10px; + background: #000; + background: rgba(0, 0, 0, 0.8); + border-radius: 7px; + color: #eee; + font: normal normal normal 12px/14px Arial, sans-serif; + text-align: justify; + z-index: 6000; + box-shadow: 0px 2px 10px -2px black; } + +.ls-tooltip span { + display: block; + width: 0px; + height: 0px; + position: absolute; + bottom: -7px; + left: 50%; + opacity: .6; + margin-left: -7px; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 7px solid black; } + +.ls-box { + border: 1px solid #dfdfdf; + border-radius: 3px; + margin-top: 15px; + position: relative; + box-shadow: 0 0 10px #f2f2f2; } + .ls-box .header { + height: 28px; + position: relative; + line-height: 28px; + border-radius: 3px 3px 0 0; + font: normal normal bold 12px/29px Arial, serif; + background: #f7f7f7; + background: -webkit-linear-gradient(to bottom, #f7f7f7 0%, #e6e6e6 100%); + background: -moz-linear-gradient(to bottom, #f7f7f7 0%, #e6e6e6 100%); + background: -o-linear-gradient(to bottom, #f7f7f7 0%, #e6e6e6 100%); + background: -ms-linear-gradient(to bottom, #f7f7f7 0%, #e6e6e6 100%); + background: linear-gradient(to bottom, #f7f7f7 0%, #e6e6e6 100%); } + .ls-box .header.medium { + height: 38px; + line-height: 38px; } + .ls-box .header.dark { + background: #e6e6e6; + background: -webkit-linear-gradient(to bottom, #e6e6e6 0%, #cccccc 100%); + background: -moz-linear-gradient(to bottom, #e6e6e6 0%, #cccccc 100%); + background: -o-linear-gradient(to bottom, #e6e6e6 0%, #cccccc 100%); + background: -ms-linear-gradient(to bottom, #e6e6e6 0%, #cccccc 100%); + background: linear-gradient(to bottom, #e6e6e6 0%, #cccccc 100%); } + .ls-box .header.blue { + border-top: 0; + text-shadow: 1px 1px 1px #333; + background: #2a95c5; + background: -webkit-linear-gradient(to bottom, #2a95c5 0%, #21759b 100%); + background: -moz-linear-gradient(to bottom, #2a95c5 0%, #21759b 100%); + background: -o-linear-gradient(to bottom, #2a95c5 0%, #21759b 100%); + background: -ms-linear-gradient(to bottom, #2a95c5 0%, #21759b 100%); + background: linear-gradient(to bottom, #2a95c5 0%, #21759b 100%); } + .ls-box .header h2 { + margin: 0; + padding: 0; + float: left; + font-family: Arial; + font-weight: bold; + font-size: 12px; + line-height: inherit; + color: #333; + text-shadow: 0px 1px 0px #fff; + text-align: left; } + .ls-box .header p { + margin: 0; + float: left; } + .ls-box .footer { + position: relative; + padding: 8px 10px !important; + border-top: 1px solid #dedede; + background: #f3f3f3; } + .ls-box table, .ls-box tr { + width: 100%; } + +.ls-box .inner { + padding: 10px; } + +.ls-box .ls-box-toggle { + display: none; + width: 1em; + height: 38px; + float: right; + font-size: 30px; + line-height: 38px; + color: #999; + cursor: pointer; } + +.ls-box:hover .ls-ficon { + display: inline !important; } + +.ls-box.collapsed .ls-ficon { + display: inline; } +.ls-box.collapsed .header figure, .ls-box.collapsed .inner { + display: none; } + +.ls-box table { + width: 100%; + border-collapse: collapse; + border-spacing: 0px; } + .ls-box table thead td, .ls-box table .ls-box th { + border-bottom: 1px solid #dfdfdf; + background: #f7f7f7; + background: -webkit-linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); + background: -moz-linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); + background: -o-linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); + background: -ms-linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); + background: linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); } + .ls-box table tbody td, .ls-box table .ls-box tfoot td { + height: 30px; + padding: 4px; + border-top: 1px solid #fff; + border-bottom: 1px solid #e3e3e3; + font: normal normal normal 13px/16px Arial, serif; + background: white; + background: -webkit-linear-gradient(to bottom, white 0%, #fafafa 100%); + background: -moz-linear-gradient(to bottom, white 0%, #fafafa 100%); + background: -o-linear-gradient(to bottom, white 0%, #fafafa 100%); + background: -ms-linear-gradient(to bottom, white 0%, #fafafa 100%); + background: linear-gradient(to bottom, white 0%, #fafafa 100%); } + .ls-box table tbody:last-child tr:last-child td { + border-bottom: 0; } + .ls-box table tfoot td { + padding: 5px 10px; + border-bottom: 0px; } + +.ls-box .filters { + float: left; + border-left: 1px solid #dedede; + margin: 0 0 0 10px; + padding: 0 0 0 10px; } + .ls-box .filters span { + float: left; + margin-right: 10px; + color: #8c8c8c; } + .ls-box .filters ul { + margin: 0; + padding: 0; + float: left; + list-style-type: none; } + .ls-box .filters ul li { + display: inline-block; + margin: 0; + margin-right: 12px; + text-shadow: 0 1px 1px white; + color: #333; + cursor: pointer; } + .ls-box .filters ul li.active { + border: 1px solid #444; + padding: 0 8px; + border-radius: 8px; + -webkit-box-shadow: 0 1px 1px white; + -moz-box-shadow: 0 1px 1px white; + box-shadow: 0 1px 1px white; + color: white; + text-shadow: 0 1px #333; + line-height: 16px; + background: #4d4d4d; + background: -webkit-linear-gradient(to bottom, #4d4d4d 0%, #666666 100%); + background: -moz-linear-gradient(to bottom, #4d4d4d 0%, #666666 100%); + background: -o-linear-gradient(to bottom, #4d4d4d 0%, #666666 100%); + background: -ms-linear-gradient(to bottom, #4d4d4d 0%, #666666 100%); + background: linear-gradient(to bottom, #4d4d4d 0%, #666666 100%); } + +.ls-modal { + width: 980px; + height: 560px; + position: fixed; + top: 50%; + left: 50%; + margin: -280px 0px 0px -490px; + z-index: 2001; + box-shadow: 0px 0px 40px -13px #000; + background-color: white; } + +.ls-modal .header a { + display: inline-block; + width: 10px; + height: 10px; + position: absolute; + top: 8px; + right: 10px; + border: 1px solid #ad1714; + font: normal normal normal 10px/10px Arial, serif; + color: #FFF; + background-color: #db1b17; + border-radius: 6px; + text-align: center; + -webkit-box-shadow: inset 1px 1px 0px rgba(255, 255, 255, 0.2), 1px 1px 0px white; + -moz-box-shadow: inset 1px 1px 0px rgba(255, 255, 255, 0.2), 1px 1px 0px white; + box-shadow: inset 1px 1px 0px rgba(255, 255, 255, 0.2), 1px 1px 0px white; + cursor: pointer; } + .ls-modal .header a:hover { + background-color: #981210; } + +.ls-editor-slider { + width: 260px; + height: 2px; + display: inline-block; + position: relative; + top: -2px; + background: #aaa; + border-radius: 2px; } + +.ls-editor-slider .ui-slider-range { + height: 2px; + background: #666; } + +.ls-editor-slider .ui-slider-handle { + width: 10px; + height: 10px; + display: block; + position: absolute; + top: -5px; + background: white; + border: 1px solid #999; + border-radius: 6px; } + +#ls-screen-options-form input[type="number"] { + width: 50px; } +#ls-screen-options-form button { + margin-left: 10px; } + +.ls-version-number { + position: absolute; + top: 30px; + right: 0px; + line-height: 12px; + color: red; } + +#ls-add-slider-template { + display: none; + width: 330px; + min-height: 0; + text-align: center; + box-shadow: 0px 0px 10px #666; } + #ls-add-slider-template:before { + box-shadow: 0px 0px 10px #666; } + #ls-add-slider-template h3.header { + text-align: center; } + #ls-add-slider-template input { + width: 200px; + margin-right: 10px; } + +.ls-add-slider-overlay { + background: black; + opacity: 0.2; } + +#ls-list-page .ls-box { + margin-bottom: 30px; } + +.ls-sliders-list { + position: relative; + margin-bottom: 0px !important; + color: #555; } + .ls-sliders-list tr.faded { + opacity: 0.5; } + .ls-sliders-list td { + text-align: center; + padding: 3px !important; } + .ls-sliders-list td input { + margin-left: 6px; } + .ls-sliders-list td.name { + text-align: left; } + .ls-sliders-list td.preview { + width: 160px; + float: none; + text-align: center; } + .ls-sliders-list td.preview div { + width: 150px; + height: 36px; + position: relative; + margin: 0 auto; + overflow: hidden; + border-radius: 5px; } + .ls-sliders-list td.preview img { + width: 150px; + position: absolute; + top: -50%; + left: 50%; + margin-top: -20px; + margin-left: -75px; } + .ls-sliders-list span { + font-size: 19px; + line-height: 19px; + -webkit-font-smoothing: none; } + .ls-sliders-list span.dashicons-backup { + -webkit-font-smoothing: antialiased; } + .ls-sliders-list span.dashicons-backup:hover { + color: orange; } + .ls-sliders-list span.dashicons-trash:hover { + color: #E14D43; } + +div.ls-bulk-actions { + position: absolute; + width: 260px; + height: 30px; + left: 0; + bottom: -45px; } + div.ls-bulk-actions button { + margin-left: 10px !important; } + +.ls-pagination { + width: 300px; + height: 40px; + float: right; + clear: none !important; + margin: 10px 0 0 0; + text-align: right; } + .ls-pagination form { + display: inline-block; } + +.ls-export-wrapper { + margin-top: 65px; } + +.ls-import-export-box form.ls-import-box td { + border-bottom: 1px solid #e3e3e3 !important; } +.ls-import-export-box td:first-child { + width: 130px; + text-align: right; } +.ls-import-export-box input, .ls-import-export-box select { + width: 90%; } +.ls-import-export-box button { + float: right; } + +.ls-news .ls-version { + float: right; + font-weight: normal; } +.ls-news iframe { + width: 100%; + height: 350px; + border: 0; } + +.ls-auto-update tbody td { + padding: 10px 0 !important; + text-align: center !important; } +.ls-auto-update input { + margin: 0 2px 0 5px; } + .ls-auto-update input.key { + width: 280px; + margin-right: 25px; + font: normal normal normal 13px/15px Arial, sans-serif; } +.ls-auto-update a { + margin-left: 15px !important; } +.ls-auto-update .footer span { + margin-left: 10px; + line-height: 28px; } + +.ls-global-settings .inner { + padding: 0; } +.ls-global-settings figure { + display: inline; + margin: 0; + color: #999; + font-weight: normal; + -webkit-transition: color 300ms; + -moz-transition: color 300ms; + -o-transition: color 300ms; + -ms-transition: color 300ms; + transition: color 300ms; } + .ls-global-settings figure span { + margin: 0 5px; + color: #999; } +.ls-global-settings:hover figure { + color: red; } +.ls-global-settings .ls-icon { + margin-top: 6px; } +.ls-global-settings thead { + color: #444; } +.ls-global-settings tbody td:first-child { + width: 230px; + text-align: right; } +.ls-global-settings .ls-checkbox { + margin: 0 10px; } +.ls-global-settings td.desc { + font-size: 12px; } + +.ls-font-search .right { + float: right; } +.ls-font-search input { + width: 180px; + margin: 0 10px; + font-size: 12px; } + +.ls-font-search .ls-pointer { + display: none; + opacity: 0; + position: absolute; + right: 30px; + width: 280px; + margin-top: 40px; + box-shadow: 0px 0px 10px #666; } + .ls-font-search .ls-pointer:before { + box-shadow: 0px 0px 10px #666; } + .ls-font-search .ls-pointer .fonts h4 { + padding-top: 10px; + font: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", sans-serif; + font-weight: normal; + font-size: 18px; + text-align: center; } + .ls-font-search .ls-pointer .variants { + display: none; } + .ls-font-search .ls-pointer .variants .ls-checkbox { + margin: 0 10px -3px 10px; } + .ls-font-search .ls-pointer .inner div { + text-align: center; } + +ul.ls-font-list { + margin: 0; + padding: 0; } + ul.ls-font-list .ls-notice { + margin: 5px 0; + text-align: center; + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", sans-serif; + font-size: 14px; } + ul.ls-font-list input { + width: 500px; } + ul.ls-font-list input[readonly] { + background-color: white; } + ul.ls-font-list .ls-checkbox { + margin: 0 10px -3px 10px; } + ul.ls-font-list a.remove { + display: inline-block; + width: 10px; + height: 10px; + border: 1px solid #ad1714; + margin: 0 10px; + font: normal normal normal 10px/10px Arial, serif; + color: #FFF; + background-color: #db1b17; + border-radius: 6px; + text-align: center; + -webkit-box-shadow: inset 1px 1px 0px rgba(255, 255, 255, 0.2), 1px 1px 0px white; + -moz-box-shadow: inset 1px 1px 0px rgba(255, 255, 255, 0.2), 1px 1px 0px white; + box-shadow: inset 1px 1px 0px rgba(255, 255, 255, 0.2), 1px 1px 0px white; } + +#post-body-content { + float: none; + margin: 0px; } + +#titlediv { + margin-bottom: 5px !important; } + +.ls-slider-settings { + margin-top: 10px; } + .ls-slider-settings .header input { + width: 200px; + height: 24px; + padding: 0 10px; + margin: 7px -3px 0 0; + border: 1px solid #dedede; + float: right; + border-radius: 12px; + font-weight: normal; + box-shadow: inset 1px 1px 1px #bbb; } + .ls-slider-settings .header input:focus { + border: 1px solid #aaa; } + .ls-slider-settings th { + height: 20px; + padding: 0 0 0 30px; + background: #f7f7f7; + background: -webkit-linear-gradient(to bottom, #ededed 0%, #f2f2f2 30%, #f2f2f2 70%, #ededed 100%); + background: -moz-linear-gradient(to bottom, #ededed 0%, #f2f2f2 30%, #f2f2f2 70%, #ededed 100%); + background: -o-linear-gradient(to bottom, #ededed 0%, #f2f2f2 30%, #f2f2f2 70%, #ededed 100%); + background: -ms-linear-gradient(to bottom, #ededed 0%, #f2f2f2 30%, #f2f2f2 70%, #ededed 100%); + background: linear-gradient(to bottom, #ededed 0%, #f2f2f2 30%, #f2f2f2 70%, #ededed 100%); + font-size: 12px; + line-height: 20px; + color: #666; } + .ls-slider-settings .inner { + min-height: 420px; + position: relative; + padding: 0; } + +.ls-settings-contents { + padding-left: 200px; } + .ls-settings-contents tbody { + display: none; } + .ls-settings-contents tbody.active { + display: table-row-group; } + +.ls-settings-sidebar { + width: 200px; + min-height: 420px; + height: 100%; + position: absolute; + top: 0px; + left: 0; + border-right: 1px solid #e3e3e3; + margin: 0; + background: #f7f7f7; } + .ls-settings-sidebar li { + height: 40px; + position: relative; + margin: 0; + border-top: 1px solid #fff; + border-bottom: 1px solid #e3e3e3; + line-height: 40px; + cursor: pointer; + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", sans-serif; + font-size: 14px; + background: #f7f7f7; + background: -webkit-linear-gradient(to bottom, #f2f2f2 0%, #f7f7f7 30%, #f7f7f7 70%, #f2f2f2 100%); + background: -moz-linear-gradient(to bottom, #f2f2f2 0%, #f7f7f7 30%, #f7f7f7 70%, #f2f2f2 100%); + background: -o-linear-gradient(to bottom, #f2f2f2 0%, #f7f7f7 30%, #f7f7f7 70%, #f2f2f2 100%); + background: -ms-linear-gradient(to bottom, #f2f2f2 0%, #f7f7f7 30%, #f7f7f7 70%, #f2f2f2 100%); + background: linear-gradient(to bottom, #f2f2f2 0%, #f7f7f7 30%, #f7f7f7 70%, #f2f2f2 100%); } + .ls-settings-sidebar li.active { + border-top: 1px solid #8c8c8c; + color: white; + text-shadow: 1px 1px 2px #595959; + background: #8c8c8c; + background: -webkit-linear-gradient(to bottom, #8c8c8c 0%, #666666 100%); + background: -moz-linear-gradient(to bottom, #8c8c8c 0%, #666666 100%); + background: -o-linear-gradient(to bottom, #8c8c8c 0%, #666666 100%); + background: -ms-linear-gradient(to bottom, #8c8c8c 0%, #666666 100%); + background: linear-gradient(to bottom, #8c8c8c 0%, #666666 100%); } + .ls-settings-sidebar li.active:after { + content: ' '; + display: block; + width: 29px; + height: 29px; + position: absolute; + top: 5px; + right: -15px; + opacity: 1; + background: #8c8c8c; + background: -webkit-linear-gradient(135deg, #8c8c8c 0%, #666666 100%); + background: -moz-linear-gradient(135deg, #8c8c8c 0%, #666666 100%); + background: -o-linear-gradient(135deg, #8c8c8c 0%, #666666 100%); + background: -ms-linear-gradient(135deg, #8c8c8c 0%, #666666 100%); + background: linear-gradient(135deg, #8c8c8c 0%, #666666 100%); + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + +.ls-editor-slider-text { + font-weight: normal; + margin: 0 5px 0 15px; } + +.ls-editor-slider-val { + font-weight: normal; + margin-left: 10px; } + +#ls-layers .ls-slide-options span.desc { + color: #999; + font-size: 12px; } + +.ls-slide-options tr.black td { + color: #666 !important; } + +.ls-slide-options td { + padding: 6px 4px !important; } + +div.ls-image { + position: relative; + width: 152px; } + div.ls-image div { + display: inline-block; + position: relative; + width: 150px; + height: 50px; + border: 1px solid #dedede; + border-radius: 5px; + cursor: pointer; + overflow: hidden; } + div.ls-image div img { + position: absolute; + left: 0; + top: 50%; + margin-top: -55px; + border-radius: inherit; + width: 150px; } + div.ls-image a { + display: none; } + div.ls-image.hover a { + display: block; + position: absolute; + top: -4px; + right: -4px; + width: 16px; + height: 16px; + background: red; + text-align: center; + color: white; + border-radius: 10px; + box-shadow: 0px 0px 2px #333; } + +#ls-post-options { + display: none; } + +.ls-configure-posts-modal { + position: fixed; + top: 50%; + left: 50%; + z-index: 2001; + width: 800px; + height: auto !important; + margin: -329px 0 0 -400px; + box-shadow: 0 0 5px 2px #666; } + .ls-configure-posts-modal h3.header { + border-top: 1px solid #dedede !important; } + .ls-configure-posts-modal .inner { + background: white; + text-align: center; } + .ls-configure-posts-modal select { + height: 20px; + color: #222; } + .ls-configure-posts-modal select.offset { + width: 85px; } + .ls-configure-posts-modal select.multiple { + width: 130px; + height: 200px !important; + border-radius: 3px; + background: white; + background: -webkit-linear-gradient(to bottom, white 0%, #fafafa 100%); + background: -moz-linear-gradient(to bottom, white 0%, #fafafa 100%); + background: -o-linear-gradient(to bottom, white 0%, #fafafa 100%); + background: -ms-linear-gradient(to bottom, white 0%, #fafafa 100%); + background: linear-gradient(to bottom, white 0%, #fafafa 100%); } + .ls-configure-posts-modal .footer { + background: white; } + .ls-configure-posts-modal .half { + float: left; + width: 49%; + text-align: center; + border-right: 1px solid #d9d9d9; } + .ls-configure-posts-modal .half:last-child { + border: 0; } + +.ls-post-filters { + width: 560px; + margin: 0 auto; } + .ls-post-filters select { + float: left; + margin: 0 10px 10px 0; } + .ls-post-filters select.ls-post-taxonomy { + width: 130px; + height: 20px; } + .ls-post-filters select:last-child { + height: 170px !important; } + +.ls-post-adv-settings p { + margin: 5px 0; } +.ls-post-adv-settings select { + width: 110px; } +.ls-post-adv-settings input { + width: 50px; } +.ls-post-adv-settings span.sep { + margin: 0 7px; + font-size: 12px; + text-align: center; } +.ls-post-adv-settings .half { + padding: 15px 0; } + +.ls-post-previews { + height: 212px; + padding: 5px 0; + overflow: auto; } + .ls-post-previews ul { + list-style-type: none; + margin: 0; } + .ls-post-previews li { + position: relative; + height: 50px; + margin: 0; + padding: 10px; + border-bottom: 1px solid #dfdfdf; } + .ls-post-previews li h4 { + margin-top: 80px; + text-align: center; + font-size: 22px; + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", sans-serif; + font-weight: normal; } + .ls-post-previews li:last-child { + border: 0; } + .ls-post-previews li span.counter { + width: 35px; + float: left; + margin-right: 10px; + line-height: 50px; + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", sans-serif; + font-size: 24px; + text-align: center; + color: #666; + -webkit-font-smoothing: antialiased; } + .ls-post-previews li img { + float: left; + width: 50px; + height: 50px; } + .ls-post-previews li h3 { + margin: 0 0 0 105px; + text-align: left; + color: #444; + font-size: 12px; + font-family: Arial; } + .ls-post-previews li p { + height: 32px; + margin: 5px 0 0 105px; + text-align: justify; + color: #555; + overflow: hidden; + line-height: 15px; } + .ls-post-previews li span.author { + position: absolute; + top: 10px; + right: 10px; + color: #999; } + +.ls-linkfield { + width: calc(100% * 0.666 + 132px) !important; } + +.ls-post-placeholders { + width: 620px; + margin: 0 auto; } + +.ls-post-placeholders li { + display: inline-block; + height: 23px; + padding: 0 0 0 22px; + margin: 0 15px 8px 0; + float: left; + background: url(../img/tag.png) no-repeat left top; + cursor: pointer; } + +.ls-post-placeholders li span { + padding: 0 12px 0 0; + margin: 0 -12px 0 0; + background: url(../img/tag.png) no-repeat right top; + font: normal normal normal 13px/23px Arial, sans-serif; + color: #996633; + text-shadow: 0px 1px 1px #ffeac1; + float: left; } + +.ls-tl-toggle { + font-weight: normal; + margin-left: 10px; } + +.ls-sublayer-sortable.dragging > tr.active .ls-sublayer-pages { + display: none; } + +.ls-sublayers .dashicons-menu { + float: left; + margin: 10px 0 0 5px; + font-size: 15px; + color: #666; + -webkit-font-smoothing: none; } + +.ls-sublayers .ls-highlight { + opacity: 1; } + .ls-sublayers .ls-highlight.active { + opacity: 0.5; } + +.ls-sublayers .ls-icon-eye { + opacity: 1; } + .ls-sublayers .ls-icon-eye.active { + opacity: 0.5; } + +.ls-sublayers .ls-icon-lock { + opacity: 1; } + .ls-sublayers .ls-icon-lock.active { + opacity: 0.5; } + +.ls-sublayer-controls { + display: none; + position: absolute; + top: 14px; + right: 395px; + z-index: 2; } + .ls-sublayer-controls .dashicons { + font-size: 14px; + -webkit-font-smoothing: antialiased; } + .ls-sublayer-controls .dashicons.dashicons-visibility { + font-size: 15px; } + +tr.active .ls-sublayer-controls { + display: inline; } + +.ls-sublayer-basic .ls-layer-kind { + width: 690px; + margin: 0 auto; + text-align: center; } + .ls-sublayer-basic .ls-layer-kind ul { + display: inline-block; + border: 1px solid #dedede; + background: #f3f3f3; + border-radius: 5px; + font-size: 0px; } + .ls-sublayer-basic .ls-layer-kind ul li { + display: inline-block; + margin: 0; + padding: 5px 10px 5px 0px; + border-left: 1px solid white; + border-right: 1px solid #dedede; + cursor: pointer; + color: #555; + font-size: 12px; } + .ls-sublayer-basic .ls-layer-kind ul li span.ls-icon { + opacity: 0.65; } + .ls-sublayer-basic .ls-layer-kind ul li.active { + background: #e0e0e0; + border-left: 1px solid transparent; + text-shadow: 0px 0px 1px white; + color: #222; } + .ls-sublayer-basic .ls-layer-kind ul li.active span.ls-icon { + opacity: 1; } + .ls-sublayer-basic .ls-layer-kind ul li:hover { + background: #e9e9e9; } + .ls-sublayer-basic .ls-layer-kind ul li:first-child { + border-left: 0; } + .ls-sublayer-basic .ls-layer-kind ul li:last-child { + border-right: 0; } + .ls-sublayer-basic .ls-layer-kind ul li span { + margin: 0 10px; } + +.ls-sublayer-element { + margin: 0; + padding-top: 20px; + text-align: center; } + +.ls-sublayer-element li { + display: inline-block; + width: 60px; + height: 45px; + padding-top: 10px; + color: #333; + text-align: center; + font: normal normal normal 11px/16px Arial, serif; + border: 1px solid transparent; + cursor: pointer; } + +.ls-sublayer-element li.active { + border-radius: 3px; + border: 1px solid #b3cce9; + background: #d5e9fa; + /* Old browsers */ + background: -moz-linear-gradient(top, #d5e9fa 0%, #c6dbf7 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #d5e9fa), color-stop(100%, #c6dbf7)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #d5e9fa 0%, #c6dbf7 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #d5e9fa 0%, #c6dbf7 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #d5e9fa 0%, #c6dbf7 100%); + /* IE10+ */ + background: linear-gradient(to bottom, #d5e9fa 0%, #c6dbf7 100%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#d5e9fa', endColorstr='#c6dbf7',GradientType=0 ); + /* IE6-9 */ } + +.ls-sublayer-element li span { + width: 16px; + height: 16px; + display: inline-block; } + +.ls-html-code { + margin-bottom: 10px; } + .ls-html-code p { + margin: 10px 0; + color: #666; } + .ls-html-code p button { + margin-right: 10px !important; } + +.ls-insert-media { + padding-left: 8px !important; } + .ls-insert-media span { + margin-right: 4px; + color: #666; + font-size: 16px; + line-height: 25px; + -webkit-font-smoothing: antialiased; } + +.ls-post-section p { + width: 600px; + margin: 10px auto 10px auto; + text-align: center; } + +.ls-posts-configured { + position: relative; } + .ls-posts-configured input { + width: 70px; + margin-right: 10px; } + .ls-posts-configured button { + margin-top: 10px !important; } + .ls-posts-configured button span { + margin-right: 6px; + color: #666; + font-size: 16px; + line-height: 25px; + -webkit-font-smoothing: antialiased; } + +tr.ls-separator td { + height: 8px !important; + padding: 0 !important; + background: #dddddd; + background: -moz-linear-gradient(top, #dddddd 0%, #f4f4f4 100%) !important; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dddddd), color-stop(100%, #f4f4f4)) !important; + background: -webkit-linear-gradient(top, #dddddd 0%, #f4f4f4 100%) !important; + background: -o-linear-gradient(top, #dddddd 0%, #f4f4f4 100%) !important; + background: -ms-linear-gradient(top, #dddddd 0%, #f4f4f4 100%) !important; + background: linear-gradient(to bottom, #dddddd 0%, #f4f4f4 100%) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#dddddd', endColorstr='#f4f4f4',GradientType=0 ) !important; } + +.ls-sublayer-options .right { + color: #888 !important; } + +.ls-sublayer-options td.center { + text-align: center; } + .ls-sublayer-options td.center input { + width: 60%; + margin-top: 10px; } + +.ls-sublayer-link select { + width: 200px; + margin-left: 15px; } + +#ls-transition-window div { + height: 529px; + overflow-y: auto; } + +#ls-transition-window table { + border-spacing: 0px; + border-collapse: collapse; } + +#ls-transition-window th { + padding-left: 10px; + color: #888 !important; } + +#ls-transition-window th .ls-checkbox { + height: 16px !important; + padding: 0px !important; + margin-left: 10px; } + +#ls-transition-window th span.all { + margin-left: 5px; + font-weight: normal; } + +#ls-transition-window tbody td { + line-height: 20px; + padding: 0px; + color: #888 !important; } + +#ls-transition-window tbody td:first-child { + border-right: 1px solid #ddd; } + +#ls-transition-window tbody a { + display: inline-block; + height: 20px; + padding-left: 36px; + line-height: 20px; + outline: none; } + +#ls-transition-window tbody td.added a { + background-image: url(../img/sprite.png); + background-position: 10px -752px; + background-repeat: no-repeat; } + +.ls-icon-star { + width: 16px; + height: 16px; + display: block; + float: right; + margin: 2px 8px 0px 10px; + background: transparent url(../img/sprite.png) 0px -810px no-repeat; } + +.ls-builder-preview { + text-align: center; + margin: 10px auto; } + +#ls-tr-sample-3d, #ls-tr-sample-2d, #ls-tr-sample-preview { + display: none; } + +.ls-tr-builder { + margin-top: 10px; } + +.ls-tr-builder .header { + height: 35px !important; + line-height: 35px; + padding: 0px; } + +.ls-tr-builder .ls-builder-left { + width: 50%; + height: 100%; + float: left; + border-right: 1px solid #dfdfdf; } + +.ls-tr-list-3d, .ls-tr-list-2d { + min-height: 650px; } + +.ls-tr-builder .ls-builder-right { + width: 50%; + height: 100%; + float: left; + margin-right: -1px; } + +.ls-tr-builder .ls-half .inner { + padding: 0px 10px; } + +.ls-tr-builder .ls-half p { + float: right; + margin: 3px 0 0 0; + font-weight: normal; } + +.ls-tr-builder .ls-tr-options { + overflow: hidden; } + +.ls-tr-builder .checkbox { + height: 16px !important; + width: 14px !important; } + +.ls-transition-item { + display: none; } + +.ls-transition-item.active { + display: block; } + +.ls-tr-settings { + border: 0px; + margin: 0; } + +.ls-tr-settings.bottomborder { + border-bottom: 1px solid #dfdfdf; } + +.ls-tr-settings tbody:last-child td { + border-bottom: 0px; } + +.ls-tr-settings thead { + line-height: 16px; } + +.ls-tr-settings td { + padding: 4px 6px 4px 10px !important; } + +.ls-tr-settings tbody td.right { + width: 80px; + text-align: right; } + +.ls-tr-settings input, .ls-tr-settings select { + width: 100%; + height: 22px; } + +.ls-icon-tr-add { + width: 55px; + height: 16px; + display: inline-block; + margin: 4px 0px 0px 5px !important; + padding: 0px 0px 0px 20px !important; + background: transparent url(../img/builder.png) 0px -113px no-repeat; + line-height: 16px; + text-align: center; } + +.ls-tr-properties { + width: 300px !important; } + +.ls-tr-remove { + cursor: pointer !important; + text-shadow: none !important; + color: white !important; + background: #ff3232 !important; + background: -moz-linear-gradient(top, #ff3232 0%, #b50000 100%) !important; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ff3232), color-stop(100%, #b50000)) !important; + background: -webkit-linear-gradient(top, #ff3232 0%, #b50000 100%) !important; + background: -o-linear-gradient(top, #ff3232 0%, #b50000 100%) !important; + background: -ms-linear-gradient(top, #ff3232 0%, #b50000 100%) !important; + background: linear-gradient(to bottom, #ff3232 0%, #b50000 100%) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3232', endColorstr='#b50000',GradientType=0 ) !important; + border: 1px solid #ff3232 !important; } + +.ls-tr-remove.right { + float: right; } + +.ls-tr-tags li { + display: block; + height: 23px; + padding: 0 0 0 20px; + margin: 0 15px 8px 0; + float: left; + background: url(../img/tag.png) no-repeat left top; } + +.ls-tr-tags li p { + padding: 0 25px 0 0; + margin: 0 -20px 0 0; + background: url(../img/tag.png) no-repeat right top; + font: normal normal normal 12px/23px Arial, sans-serif; + color: #996633; + text-shadow: 0px 1px 1px #ffeac1; + float: left; } + +.ls-tr-tags li p input { + width: 30px; + height: 23px; + line-height: 23px; + background: transparent; + border: 0px; + padding: 0px; + margin: 0px; + margin-left: 5px; + outline: none; + text-align: center; + color: #333; } + +.ls-tr-tags li a { + display: block; + width: 13px; + height: 13px; + margin-top: 5px; + float: left; + background-color: #a7753a; + box-shadow: 0px 1px 1px #FFF; + text-align: center; + border-radius: 7px; + color: #FFF; + text-decoration: none; + font: normal normal bold 11px/13px Arial, sans-serif; + text-shadow: 0px 1px 1px #7b5b36; } + +.ls-tr-add-property { + clear: both; + text-align: right; } + +.ls-tr-add-property select { + width: 100px; } + +.ls-no-transitions-notification { + padding-top: 25px; + color: #b3b3b3; + text-align: center; + font: normal normal normal 20px/30px 'HelveticaNeue-Light', 'Helvetica Neue Light', Helvetica, Arial, Serif; } + +.ls-no-transitions-notification h1 { + font-size: 22px; + line-height: 30px; + font-weight: normal; } + +.ls-no-transitions-notification p { + padding: 0px 75px; + font-size: 13px; + line-height: 18px; } + +.ls-builder-checkbox { + width: 100px; + float: right; + margin: 0px; + padding: 0px; + font-weight: normal; + text-align: right; } + +.ls-builder-checkbox input { + height: 16px !important; + width: 14px !important; } + +.ls-builder-collapsed { + display: none; } diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/blank.gif b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/blank.gif new file mode 100644 index 0000000..5a8c950 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/blank.gif differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/dashicons.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/dashicons.css new file mode 100644 index 0000000..09fc01f --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/dashicons.css @@ -0,0 +1,722 @@ +@font-face { + font-family: "dashicons"; + src: url("../fonts/dashicons.eot"); +} + +@font-face { + font-family: "dashicons"; + src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAEewAA4AAAAAcagAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABRAAAABwAAAAcacM8A0dERUYAAAFgAAAAHgAAACAA5AAET1MvMgAAAYAAAABAAAAAYFAJaORjbWFwAAABwAAAAPcAAAI6OaMGV2dhc3AAAAK4AAAACAAAAAgAAAAQZ2x5ZgAAAsAAAD4YAABgOEAurGRoZWFkAABA2AAAAC4AAAA2BHQuCmhoZWEAAEEIAAAAGgAAACQPogeuaG10eAAAQSQAAAC+AAABeGGJTphsb2NhAABB5AAAAXAAAAFw0RvoHG1heHAAAENUAAAAHwAAACABCgC1bmFtZQAAQ3QAAAFzAAADBkiqZVtwb3N0AABE6AAAAr8AAAcwE04MRXdlYmYAAEeoAAAABgAAAAY/c1KdAAAAAQAAAADMPaLPAAAAAM7CqUIAAAAAzsLv8XjaY2BkYGDgA2IJBhBgYmAEwm1AzALmMQAADBwA6QAAeNpjYGY/zjiBgZWBhVWEZQMDA8M0CM20h8GIKQLIB0phB6He4X4MDg8YviSxXwDxgaQGkGJEUqLAwAgAMWoKnnja3Y+9S8RQEMT3JacQSMaACAYsAmKRLsgpBpvcidxdoQjanIXEj0YrbQQ7G/83KzutLKzUSp19QSuNjzuwsLVzYGcZGH4wIuLL+ObEOBfTdsmMcsvMut+VUibEexAGnGbCeWbMucyCa1xnn0Pu85gXvFKjgSaaaaGldm1gE5vZwg7qQT2sD5pGxDGEMWeYcsExFrnC0jF63GbFQ57xUkV9jTXVfMQwNrapzW1Z9+utumqa1J9q4Quf+MA73vCKFzzjCY+4xx1ucYNrbGIDPXSwiiW0o/PoNDqJjqK9sAp3w53xxr/KTMoPyHjOvN8F+ff6BgrgYvcAAAEAAf//AA942s18eWAUVbZ33aququ7snd6yddJ7Z+lsvQJJOgHCHhbDFmWRpdkDRhEECagYEJUlokZBxgURcRmNioxLhnEbbddBXsTRYRwcleGhsziP54Mkff3OudUdEsR5831/felU3Vu3bt2qu53zO8u9nMjBHznHd3ECJ3EaLoVL57hKrVUr6Kw6k5ZYk4lWR871PEmfjj5Jd5JpT0af5Lti9eRO7kfa/SOhsU+4H4mH8tyPHOEG/FVyHM9FuJj8itQDZQY4TkNCYWI05RNTvhAMaYgs6QuIUS+n8bIEp3w+TELBUJgPBb2Q7g2Jh2I1Hdnr7hlW+ujUkuo5jSuHxR6P1TxnNi83m3NHLTGOsPunVMhjl157rd/mS23w55mnwq2pZmET/2ZHXqrdlb+1LCvPmkpSYo/zbz7H7k4z5wbHZlTa/ddeu3SsXDHZb6vXrhqZy8rkCPFwUalOVnOZ0CZWr9Gg1UslhGjtNldA6w+Sc0Jb49q1jVGaEoVQVq9tjNU3rqUp5NzaRr6rcS1UW+D+B8r4TDoBbZnGyjHJGuLWkIBPJNCseEh1e5bH1sfWL+e/J+3R2CG+qXeKYKEtqk17lvO3sXTaEt0beyL2FD+dppNzNAXKjXIdcrM8jMviXFw1lGvMSCdpxE1qSdDvdtnSCXEFIW7RsGtJJpLeZAzKxCilE8nidmXUkjAxsVSv9LdNm/Y0/nk5kRoaamtrn6+dSJ8xD228/yayqO9b3lhQYGsqiH2LQRl5MB9v0H03KY/QBXV1tc9LXZhyf+PQfCJObIAC6uoa6DPL/9y4Z1PvTCjgqgILnx87y8J3yEPsxqZNZPEmeMRM59c+X1fLcSoYHxGoUzOn43K5IhwjROt3lRC3VbbbJGh9o8/qDXJeo16yufyiVcvCoM9r0lqhQfsvRX1V0eNbaMuWx4uqqoqEM0VVsbpju3cf2y0cIecg2L3UlEu7oU2VuNDGdxVVRaNVRbF6eIB/AZOPqXpPL8VnRHKBysvofnbB8f1jQoAe5bD7RKvBqvXxTcKZ3sOCpS8rSs6J+p7vIlFRj/1/ljstfS2d4dRQJweOejcJ4qgXQ0ROI3arLNncLn8t1DSoUe7IRCygXa+S+pzZLndm39uzhC03eL+dT1tbPa0ej6e1RpBIfTbey6FdUp6SVed2zXq/pW/DNO8IyFSy0dNK2uadowfgVibcyqGvwvyLcm9LMamPM3BW+HZJ5SbYYiHiygwFHSYNb5RworHxA7NRaltI/3Zj7Kvxx+8Zz2/3+xfOJaq19E8kh+QXDenZlz/NnJ9vnpZvFn5c6PfHrh9/z/FxfP6NJHPh3CEe+id6mhSs+TFWYDbHM3IC8RCPrJYOwPwv4cYovWu3XuxZ4sOuLSEG7MgaYsferMKGgamXuArglTmRk3V5QFZXFfV8h30t6ouq+rIiGI2Yi839EXLuMmntqk6M907BTjdXNVZ1GMxmQwdEeBfG6P6BabHPMcbII9fO7ZdHy03QoxyBbnRJOPVMMjSnCpqSuEPGIM4ulf4I3/qrSW+MmlCv8//qe3omSD8Jvhcgpu8hsX7CKJ20/0hsyxG/btSEUa9PPvI9/c/ge0FSChn+yRLr34Dxpofx1gXjLYurgHfbylTlxBUWfF4YJ2mi4ITQTNJUdlsZXw6NEyY+lXH2FUFPtlYQJKmkdnF4ybayNKLSZpUENpGM6/9jY3rgsQN/XrT4y2fucruv//hGlc9VM25cjU4XWrFwQunaJ+fI2WOGTxlK/3Jk6/GVF8R0d36WyWpLSb7Q8tFmhYZHZDV8j5srh9rbJRnqLckGa8Dllt0hl9uu9QVD7pApGApYDUZTyCQbTT7OG/S7bJJeVn+eE9p7fG/TEtq9pGlv995Q1uefmYZCyvRm4mEpQ02f9XnPd3ae7xQsK2bAHcjyeVYI7jQtIUWL5kBKMDeeMmcRHd6Jedl3RWWbfAXQWOgVzpgJXETlFkTB6laGd6Y3GGDfINW+NmrUvBb67rZX6ScdtDsi5I6pXD2P8OWrJk1aNUkue41S+uO8lkAdfbGAbo8K5E5Su3reqNipSUNCkAPfRQrlZhjHWpzRxKsyyWUwPiXZpyG+YKZDZ3O4Q/kwRoMhu4bY0wThzF6iXfBU+JXlv/jedobup/uPZb1BSn/5AP1HfyqZS+Yey9xw5O/SgU0tbzbOe+te2kLaD5HMB3va4gmknbZs+uPDcziklVGorzKXsmE2F/10NnEWlUlSWRzuoIrV2+glQKkC8GPzZRubL+tgvoRII/Fv2EA/oM/QDzZs4B9be2Dt2gMwfj0924hHsCBpw8x9WXAWxj24c+eDcJzCTGtjhyKRCHxPKheFud0M4yIdqLcJ+qAARkgJjJEQV8XVwmyfcJn5btVadfBJvviRoOwh+E4n3Bt0DfdVA67lZqiDg9XhZFFVj4ORXOJR/ntXFpthhkexwfgmZJh9sQEpXYNzkHYkG3ESovoMEjxR9kdTzCxXJAI83ZOIw414FOqN/CAiHWAYIX8wSrDGUYI7BBMDZglMBUAMZ+KIgXZDRDjQ0xNJ/CN+6DuVwA+CpXFt3zMDbiMv4aDPj8G7ZGjlAuQlOrsOsISD9W7QLziNJpfdppJdDrtNDoaEMzFjWbTiHuGMcKZveGMVULEIX9qS5S/qoq/PmUNf7yoMZLUIZ0hx7xHVmipsiwirWuy3f7r3Rfnlfftell+8V+F58kh5LaBBLSIYAGnI+KyA35CdydKeHWYzbew9rCo5nD819hc+e2fszBi5aQdgLHpF31Dx5GEz6dvNZ+2M/aWbA1wJf1CPYzBS7FwTzNzlXAskZfBlxGFRpRE+IzOfwMgNExjDxswMHoexC1KDDDO6ZMlucwcdPph4LsmgBwRpNBmBaQDmCRMkvCyHCwilZCwgOg0Jq9xwn9cQFx/wEx0+Lh9b9PIP9Hf0Ffq7H15eBHFSSUaTyh9e7n2brCITv9+583v6At1NX8AYqaG/W6ZP0xlumWbVrSILPtpLTM3+OSZjjih4ay0W+r3BpVbr0/X6zdPsy+wOPUSntZCXiCiojRo5ae4nPSfJpvf+Wyj+Zs3GJUuEUcqrFl3yCeLMQS+dyD6kt0gIqHlfOUkiB99YtVCeMN48vLBILc7cWn2qsZH/G1GrBD7kJ8kSL5BAiKjpsVge/7Kc3dh489An/+MPdLuwu/fMQnLbty/Q92O7ivM5MT5mm2FEyVwym7EczkUCFHvQ4RHX9WxTNfSdAlzDDr4pdkhuPn9eXAdzovviATRxOmmXRTkNsEUJlOZ3lwFfzAy501QmpIShoPOnScKMsd5fjsv+6JFHF7z44EpvRs5XT943f4Hw7OVS+RObZ9e6MnaR4Vd8Xb718IcXbv6Pvqamjssl4vAS+7GkCpBXCpeBddQB3rYSICTsgApqiBWYWexQ7xTiUXX2TlF1xg7FDgkWpBhyc++U2CHxJFSwBQkAhuQcls0PwKku5IE2yXxRKvAxEtBPB7Qknq5qaLzidtqNkkIj39S4Fg+kBN0RCMV1O8e/RLuJZ20jOYfptAWOFCAG/WkwZRiPw/dqgN5qoaWzOTNnwXrh25zwElHw6ax2wUcSB0xTDQ+Atajq/Pkq8nI0AmQ6Eo0AHkqckMifU/q1qujCa7wULqqK4GsvHoBrz/RlCW20hbYw/KPUP4I0iDiDAMegqhZXBkPiojYNq6xc+IP8q6pJhVUf0i8+/PCucRP7WjOjbXex6BBpX1SqLYn2/g2uie1DO7862td289MsLlQVBgbIA+lMIhieqKlesieIK9SPS3A3f1j29d/z5qsKYN5783nTl1Kaf9w4/4V/wln8n55tfJfC4PYTMclgLhvWWKHwtqKJw/z2bElSZQypW9qyZKQvWW6OP+bHIi68htNB6GGMj3arcxqnNM+ZO7KY8cUivsszZvr0MUZjStGSycMhxZAYK1HGF3UMLV7y/T7gc5wlmOGySBniSeLyhMOeCx/gmbgALbfT3aTh7Fl6+KxUF/b0Liytry9V/cITjvZ8d1a5ge+Q4B0d/XKTHeafD3guB7Qzn9en8UA7y3h/mM+MYzDVJWGCy0rxUMgle8mwd2/2+29+l75NF9O3lbjc2tTU2sTnDAxiEgt+w3iL3Dxy9ROv/PmVJ1aPTERi9iaWYcB/bDMLWqrwGZCx28k5xj+TFWkq8ZMOII9EXghUSJ+IMdlXkcGUZ0z4lD2AIhgIYYGQwW6wB+wBH+AJ6QBMrr5WVQOwbGDaEVEPfD3S4xDaouw6GmVtxwFuOQY46iIthDK1CWoIEXeAwSZGEeVj5ysU+gdSBu2W1ThBzp+XDsC4OIOAgfFQhh1aWPkilJ8F5bcPpLUDS3deUjLONCBJ9XwXFNt+SbFKof9rme5LypTV8LWxeln9s0XCOB1YplIanLAE8WRfFj4G7d+uzH+EhOI6cR0+peHxCgjlOrqSruYI3wX3Tqo6lXviSUxFsso3xe/pE8+JekwFeHY32cHudYknQWRm9wCiQSrmjx36l/dkBQfLw6ANChje9DHEyfiZ1hqXFpXQYDUgTKohOOzFAXHWD1o7nJUDZqLnwmvEAwOVtMOpr1UBfHyXEhJsjfYo34T/Ul3PNmCH4aamcISde1BOHHzqWS209bVGUFGWOLAdofYLJaf4JBuFJmInIZP40NbYX7bS41u/FZ+cGzORuzai3P577vfSeem8wsVA3riIiQL+TAfwGOHMw8R2vLX1OP2Cvka/ON7aTZaRB2KvSOcvJrUeJ7aHPyHLjvc2C2p6E8f0AVEmy6UzmelSrMUDtJQ1xKQhDLAUnrjpphP09wBXfo8x4Tc49mGKAU9DJhFVpPuBWUghe6zPh7eig7MP4qMarJeGiESAdxEn0YlE5xR1xCmcod2xQ+QX1+JAaSH7Yodo91nyMX1jJvVQz0z6BvlYbo4dmkC9sWVYKn8f+WgCWUdLhtF9sdjZswCJIsO4ATwL38XeBKiQlU88fBONtCDfv5Yu5Jt+Whx+J6az8Ydzz0qKCAFUlIUUCb4wBUYy9ClrT5SNm7k0RS40ZjCkiQMxTHRx+dOgN6GywIjSITGKb209enSr1bkceOwrmsNb5tx66yu35tKj9i2Zgmx5Lp/Uwwz+DT13VL289yvx5F0PxP7QNntOW9ucYCVkeitTtQGyIBEkh8ghqVAqYnRUUTGGNKjf0/2BPknv+Yg00yc/JzNJ84f0Hn7tR2QlfYJdfkTvITM+p09w/+t44CxhklFGLGkkw3i5AUFGkozTW7eepv+A82UHQu+Kraf784A8Q9rjujQTzN1S+G7fYO7IdD8Wo0HQsobTEneYxNvQaJJh0vVLpUUR5IdR4MvE43CXw5wtdztUDXGNXhHq94jn4NmzB3EQMnzVHav/NHOcByesZ1zmp4MxI+IqJ1fPTRz8TTVkIMZDCtOPPcKSD7oZ0EYBRhF1AFtijxmkurdKampKes6V1LCImFJS0/OdqqH3MDnHWCGx8GqzJTh0YlFf65BGl5EQIqRmWt1VtvIJRXki/1qkpqTvZqlOKaOm5C2ljJqS3mmqBhplfJV2JzmWXr166lDE6FCpggJVepGrzGpCIBKrgNF6c0kNCKyaAZjKxNCCm9FMlNG5EMjkgQEyemYcEaDszf8bcYYzEUTCOcoggbiu9/D3/zIWqSq6+JRUx1BBFbKlfxUb2FcX68E5L9WAJL4NuoYfEFeQLr4UX32h9zKfNbAqkqi8F9lV36mLcY5TZHL8jmMg/xu4rMEYBpkojAMYKCZ8KcDn7r5TqG8AotMFOBx10MCESbtgwSiGDPS1sHuxekA7eJfjFN24IjMnwZuyuDyUO2AgBmycwa5JvFRkAapO+K43d91/hv7jeSJJ02gKMP02wQKUFAgxTQEsf0Y8efue4/Q//0h/yX/Vs42mCGcAF8XqQRwBrvoz79PAKzm7wWsk8drpWCAgXKt6k9QR6Xn6jzP37+opwtKwVMYUIvg2+ksy9Y/EdHwPkftakXSqOuEM7dDXmmhLFWvLY9CnycxWAgCaGBQ2jmenVYMKLNFK5GO0G0rvRvm09zTfRffzXciE6X5os7mqhigKq1GUV6OkPbY20sNgS7xO2FeImZTy4zwfsCNUw64VNAJ0FDzHSvDik9ArZ2gLIjzlhcgX8GUgGOegJg/1doydA4+JcsflJPh+E7PHyE6g+G4X/uxa6CMvqimkVydPpmdDIf+C+RvbdmDVP3jlyLY7hC9eoUtfWdO2Y+fmjQvmB0LwrjfIG/TE5Il3bFPKfhvKVsfLDobg58MybbKEP2AqoiuDGCD3kVc+QGS0o611wQJ/KETPTha+gBdMnEyKaZiGiScUmL9g4+adO9rWvELuZzIKNH9UXAd0OIONYL0ka1GZoi1DbbvFqGLKJZdNXPfErRGv99YnkNbGDrGJIK6744QtttcTycsTymwn7gAam80mCJsbyhxV92sorTgJFerO1PlIRwGdEWtidjriId8ktCWIexQjxFNUBWJAS19rC6N3wklFDOnCr4DhxgIcvy0DRI24bBS9RC9pv7wcyTSRaJKLh4NJQM82VC0KFlQVQDBYhYrTq69VsEQUwblFCeO4A1GReJJJf/lo2mDv9AdDeAIZOcw4jF78cMuRD+/qy7rrw87N0u6llWXe31x38KzwTdrbt6G8vOUtbU7e0t26hevOHqxgbRsl51i5ZqDdIyGFCbxpEjMQhMVMb1hVS8okW5oqneSLjjifEjZ/8M7eOxeM02ZKWY2z2u+LDr78cu891y8dH0pNFTNr6puvu3fwJZ/GdO3iyVDTihVNuXlxjjPoqu/FuBSsNk9tmD2ibNDVaabWB9p9EWfomLRa91PdsBsmpciGh13rM+Bxsbc4Ji8bLYIpX7EVYXMO7pEITtHekCqnwBOBP09B7+kCj0doQlkahu/BiaF6AAv1IZzRTPcbfxJybgSESrs3QvYCfDzGx0Vwvmt1VqQGwUNNJIvNG6InROqSjnIebgjO+ExZUUUmfnIakSWFAMR/ksPtyggFHSohmOF2WWQpw2S0qI7e6VomZKtt5WFVjbXS7jAZVcKIikqv3++rtHr4UktWln4vvX/zww8vJ7kk17548RL6xeIlSxYTm1R2J13/kGCUci0lqlJrJaLK0ooRgmA0uOyV1mqhtsySr5/qv+UR8u7DyydMiOUsIdYl8Ef/tGQJ0kQk0NKBAfJvPwcTEmEbSnexQ1ElUDUgecFDUQcyMQzmGchCMB7XDZajFcnKp0VGAWjO3q9ZPCec6fkuCjQaReVupRSY9ECyI4lC8SDtOJWA4Uv9dtd0oNsFjN+XKBRFEe98ALG9RtFaBm1CrImpPVCqU3UiEen5DomJdtfhXfQW4smYvmA6nYdAsa8VISJwW/wHHFIUAXQ547rrZpQMHUqfiIPMwQKcun8cY50z4vo4KyBHDlEGfBbK0IpR2hSASe5kjOziIatRpYRqx75W4sHJdQr1gshzEgfehHpDPj3Che5WnEHR6NpGVEcCIkLlJJfA7qwfJYWvoZCIygD9RQDvEM7sIsKr10C/dV3zKo3RP9PYq9dc8yoRhDNKyi5o8/pdiVQgV5Cb0ZoB9UxWapdoV1nNvgP/8TMR1mIvMmwEsr1HPCnVAa/Nw1aBz/GGFJ4YQCTvdlkFLZBA1N3bZZ/XoJelEpCKydu/u2Gdz796+uI1q2ls/baVft/cpR0P/97nXXEIxO3vIguf3zShIVeT3nH905Mmx2LEarGOnzL6D4/MKilBmks+gDGtgveiLGQnPtka8hF7yCq+/Qk90x2OzQmfIFmfhPlHxXV9rTAI23B8tbN5UMdqqGMSiR3trS7UHOjR4sT/XDzC2E0EWUDXZaOiXlF5AbS6NML0d/DuHNZ3qNf1Ay1Zwq1gei3ZBIxeBuRjsAoBeyDE+H4AFel2hfGbEAewBsTLdGJgWaFh4b5yz8AM6ok8II663Aajr78bII8J69A06pbCspRMnuThB2942jckzaBJykirtpuN2mxDbmmWwZBlSkmV5JTk8oVkF+a6xemsnRQqzNXpDcM8FQUFviyT3lCcm5+d662fUlySk11ZmG26RWkA0r7E50zKLKb/FY3EfjlaVeHX5ZhMeVY4JCElxRTUJSclp2Slp2doUysjw96M0M/KsnMKqzNFuawga0RKitmSnq6WU8cbrdaqwqwsidfk5dVHgAY7SLv0OfSbniGMi0YGnv+p4aE/TXixpuSesOHZO+5c/uo9Y7XGN++6edpUwXkx8W5IfAMT+YPXTgxY024kmaPe9O17n8a2Hf50wvhbrp0YtFyayP0MPb3EqoKznSmS25RQPKlo4RLHv1MGDNxTqgbFNoPh/0sZ0gGALG3IJ+PhpWWIPylDp1B0EteIWuP6RgTHCIvRQgBHN9oUsMtRulEsqUjJGQhP6OsyuHzOxQ3jRoGM3cTNRW0JcMyQSxnXIN9DLwUkZcAG/KEg8Ql2wRfy6bSDxi5G7HKgf3iLdpghUJCYSCkhTI0lVTjsOS77pFkzRgy32ba3NY21FLscV5aWV1T2PbP01PJTS4Z9c/yzRUOG5OcN9+blDQlunDK93lxgzquhU58JmjTpag3ZurDOZrEUhJfSNPT8iqAoJ3Ulq7VXuJ3OMfVX3/tgzrQkjXposGVZdXWMmVQOkudjh8o8jdV2e4pKY3f6Jjkc5w/qMkvK9PrF+4aX+nOyt5tMZb6srNgrIIJZIiihIT6K+8mIrNUNDDvKOqesLSJat6hjXkcmp2AqIiFBDGn5po1f0ts3AoNr30hv/7LvHb6p9/BGcsOXG2mLqnPjl+SGjdIBvLMRewGv+y4w9S97LJ6RAw6WwMoDeXhuP7dN6FZr46OAYWXUvQ8+Ln/PGhDYeFGuUSstHUAdK8DYAf/tlySDYJwSwSGOF2ipA+6YokjI0f4/EGhhACNXA87c1J/arYSI086hfANY2cjlIEdAdMBkEK0+X/CGhYCWTano9mXL741mD1/4UPSRhSNyYHaejP121wP7tvM1sRdrbtgwZ9jQWTfeUBNDBYSqv4/655cOKjnwx/jhoONANPFJ+E3knPifjN8koZYJ+ZTO6rbqxJKjdCFMwK4VZH8Jff1ekJRRVeTZS05f9PuAPhKBV9jRJ0jDrJkJ647iMWeCpNAAnzki2JPRHphL4F91gkgge6vfZIKa0FZVtDfYOyX0QAI7Y8tFIsdei6LhJII2jkgEpzcT+HoN6DVV+9e/heOeU8I4pqhIATE8BUPFRjrwO9OB95cO+M64Cs/5E20fehEJzJbj0w7+SH7LAxdR+gMhwER9p2AIXPy2YcV4p7gYP6p42LBi5SP/GruVmTrOJfz2pE4YA27mw2AmeplItnLeVUP8IYJsFF0lywnSIMJ8Ub3ivatqamLLqp+pvgYi/H3VM2fUUJ7fbDafMJcUm2ObMDJdEq+pntk9szq2rKZmFYvW8B01Nb1RyDgt/4QZ8uVPg4zYLlqGM+qY7ern59fIuL8MI7FaRmoTswm1yXI8Ll4S/qt7Uh3CbKTNiMr6siLCmUgEvXcgBNDdf75cmqyORHockQha/SPMGeYci0T7T5dLQ/9Zxj9WMc6sEOQ01slWJN0gAFlBAtLqgV5jRcuIQuqFM0cXRUZZV06Bub5r94jxjx0EoPrlY4+NC99Dd/NN01blj4wsFA83N3/42m3hhb5odNGWPUdI8gMP/GIfPf/i/ZuXR6OhSHjLrz9a0YwYPTKAh6FWCWlAPmdT+KGIVjJ7AN1xnQNYoz0ewphuQfYYiSIWjwpn+lqRyDBjDrA6C+2W6iIRxd63n+5PkB1lAjG5Rc2sIs0/9370kSM+fL994Pt9/Q4YwGeQ3DE/pSja4FH4QHIHyTgFkGlH2Lt+5gMQh/fz8XQYYzXM08Zht6kkEAqMKp/XQezY7qEEP7XJ7gGgErixEFdVsBSbdKCLHj3aLyXsOkpG0NH7sowjavT6vDxfU0vdrbvXjR1jzp0Wyki/O9fvK8/Lzc2dJxSTVjLy1YuCx6tkZcmQYre3JC/H4TToht48ftiw+SNKS2sKTUY7fT+n3OvNyakoz85VdPNR/rD0e9HE1XOTuCu5OYCRYUzBNxsUUGuPs/uA3WR322V7yB4AuGDyxbFBOvEpSjOvSXa5FZgBgw6EdCL73Dj03JLT4Es0ARRjEN12gwI2pLJCm7VwdNOto6s0czNDQxd+umPOkqqvhy2dM+fWOctnP//c6nAoV32L2uQI182c04BIwzG1wq4hTvqZxl7aezpziYFPVqXwaeT5G9zZefn5I+nVv+R/Lby2tNpSIMiynDotZ/LIFkv5lLLSnp7HH++JXLjQU+SY6LdrwhVj7E7XFakpyVWekZGJxUPIuGCNaEspSqqqelRI15UX6zLpeUIIf8iU5S3DtlLkUsWOkQfUxcYFuaFcNePb6CUuye5aXnESF9yKjzjvQ9Obk4RMctw33JSuuIaHRA2wJp2GiMxJvLT2kycSPuINB4YXlKGPeE8T6pajzHmdeQmdqht/h+Iifue3o+5HB/Fa4QKqCxBYohJdsEh/Yx7jZQXDDyQcxhueOFHr2bMJ6ZTib8TwY+ydUd/eqTiL3zG+bg/LOlkpAyZAO7w0XmfSzvhxKuAltN6UQa3D3GikokGtn3c5LDDgDRkJm4DqEo2jJu5L3J+QCPtNPOtUpzovGrX4/2GMiT6lMNFZytUEcgX6hoxhV6pvlUTFbEHa/0CyH00YzR6lfxE+Yek7FIMC+6cZ5J3YIVQxTf90YPLphEo14fvA6IkWJXE7YK0wSOrBkDaNlPEImzxTuz87RVdN/e5PP34QFU/2OFCxkkfMZj6375RdbStQKzShncm7cZmeMBcK5VD8vhKHVBdlGrFo/P18k3SA2fBF5OlaGBqYFkW8K3xD7mYdh64AkLedEMbrEOujPZFHw12+CAQ/GAqLIdQB8CqLMQOdh1R3QsN+98j2a1VufaHZmbHFbN6S4TQX6t2qa7c/EnuV5L33Hv36PVn9CP3u0Z0XFgjWTKe52PDM/PnPGIrNzkyrsODCzkeJ/mrM9R7J69dbSCe4FJAO0TtTN8B+mDBuEadWdIpap6gT9Wuqx+0+tntcdYjJ7mQEGUuzYvuY68lTv+Sf4Ruta0Yv3b176eg1VnIdk+Dpui19re+/jzqEHTHXRfkG+TvSetQHlcBIRGmeWRmYhhm+wOp3YRKB0I4eCHatox8ZkYCtTIR77VEAOtHeKej+RdrX9H0fESwQTkUf0Yhw78E1aO9sX/TEulWr1j2xKG6N7qbdaFhRda5tnLoGZghCMs/UNWtjMzAawafhTqw3ag3U1QWsNCWhI4cxlcysaehT5mIeFHaDHcFYgPmRJXQhgNC0aM9AdxOswTlAztGebdGoqO+dIpxg3lGR3sMR/Jq+LL4LotKB3sPRqGKYAd5J2pkDVswL9UFeBrgkhUWZzYDN4zrms2eBURNXCzMcC8ONyJcoigVLVRFNKaqqcZNzRfzdTK6pKuo7xZZ+WIqqxBfQNFA8DDk4NAy6beCt2CE4Mx8Eck5uBtkgLt0OLhxELYItiet6lDU9inqyS/HeY3OVNNAwtHsYdXBxXp/OVvpcUpYTvr15bWPPd/ikqG9c23sYfZMVj+C+LDgfQZKn2JGi0gkYQ07mRaDQpZBTssdXuzhdzJ8FpRi3aNTLYlB8kikGNXT8lW0Qa908ixzRoEIRYnS8RkOOXClY2LXNfnohRBaettvYIxCphyRFh/gO9y4buwVsrQHagaxEeRcwVxO+msShQMhgFLTEqGjfQ278EiKrfUU9ueSgAWaG2F46AiD24qqmcHaeWLSD/gpTyaOFFVm59DXp4dkTtD1f8o843WiA1+prvRr+Fs/4cFOSJlnbM0J1VewF5ZY81pxEBcV2p8imSEuQtnPOgbMZUTvwteDFhAShv5Tgy2pSGoTxV+ujC/114YjpRNqag2sCpfSEZGJktvdOReRoU4zNqg9yZwWxi6rmZ8VWueqH7LE5p65ZMzV4VW7s7+JJRqBjN7Hge8WnDcewBsbBO8yujh1qTCMDrAAKqopjK4AhWmsw1P9L2A4SbEd04SK5/l9oQNZAMATPoo0h8Uu8QZphNy1dbzfYHAXOwuLiq2aXFBU6rVabMUtLUpKpjyRphOJKX3Xt8DGj77tv9JjhtdW+SnqErXuKFcOzN9qUZx0VM6+ucOCzBdk56fAs+ZD+wMvxh+sm3nffxDr2sLjdv360yV/gsBmyM3SyXqfJzMg2Wm1WRyHP5xcTT4YqXOkrLMnNT7VYUvNzSwp9lbEjbFHWk/4bR2fFn8xI0umSMvDJAkeRHZ+k3Xxa/NHcDIslI5c9yuaawu9T0M4AhCFNJWcCPyQg+KLZQiVbQTpMmbFl7823h41kAalHV8Boj0N4lv7tcXpc1QkEoYRPc9U2jyeppMJAvECjHo4dUzVU3I9zcDnRyoulo7hwERATjPQkIqnsFqfRZwkBXkQFVRmpgb5BK2nIqDLFZ0YwJMlBefGEZjKj8xx98k16jMYqCrkfoze86nDnl1fe9PiUGROavHeQ279M+vT+h5s3rSi5YYWU2TIp3XI3/Yz+81jrY+Iv+J3XyKk577WpSgTfI3Mj0554P7nUfd+n1+fUto1OZnZFckfcHlKAWmokMrI+0+RllIbRnYA2HgMee/iZDeTbL/kkgdfMaG2dETuVz4dZ5A1ZvWFm3/WS8DH9USKtz2xwk/INz7R+NFPxbVD4599BbslFjuC0+pMI5yF2rTeF5BDR6uc5B1yoTMZMsZ97GcVu4l/9O6jLI3T+Z8fJHST891tjp4j/EP2Grj/RQTJWLL829p9NGzd2bmyNniD3kyuJ/YNr6fFbvqXv0A2/+w9yCzE9Ro+3LF1K/7n7xpkzNmyYMfPGuH1d4a2OgZ60Wh9gfbY0zMU8sQG196+9sIq7nD6fky49VvB37+ibR6zb+cTHH8d4px/IgM/Z0+Lw883f762q+r3m8fuf/z52j98htjt9im8eFxXvg3fpsd5an87K3qGNv0PrEyYR53876emqxvuubn38nR9+iPKfk7wjo0ZxPyb/9oXj9OuEjZZhNQ1bOaHoS2HGc/12btotnuxrjdIUQc2soyjQ9WUhq2xVKPZ5TiIa6Ou3pReBI+aBLD2EG8s14ajMF3zeMM+sAZIo5RNvmLjR/oVxX+JC0AVZBpOOrUgiEEFG4hZcOFolp9coC+ix7dYFgXQEBbssOirGF3mbKkypGdeOrG+hjam2K6+70paaNu+6ecJSuBgyVLm6etxGZ/jIbb97Y+gm7caGCRtjz64Y3hIYOXxZ+oqKA51FrmShsvOxyhXpy4aPDFwzcmVqukvKLJw1Z0L52OXrKsbOmrU/tG3x4m2hmkmTavpjvQ3kmU3PL/j8JdoYqK8XKu7uplsKhpaRlftekpK1L+2jd5cNLSDrP92dmS6xMTGROyLfIK1gvugmgivQNKjWIWxdo9NhyteYpLM76GM7pwXnU1/sn+ap+evMZtW4v9BOsu+HbK/bl+fXhZKHCWLTTvrUzsZbFsdW0mKzeT0uHT51l7Dx6qRcU4lxiG5k6gQB6M79ZIh0j/Q0V8wNYxb9NAHIclgVQhBuyic80mNVGfZKWNYxep2g+SajMFPPZznyks0uU8P4WQ1Tst2zFs4psGaUXv3stWto7Ic/dvrMhgzPmJlLVl1/zTP582Y1zhNISs6C2dPmyrz0oJxfVBEKDDFps7wTx4xMM2ZkTBo59iSN9Z0ZM74ua87Tq0d03NVx202RxuLU2JL6lJSxMxbZCoZbzFPnTsxQbIRkF8NWqIngSFy3pLOiI4mVtCtCFQhy6GyJDpEA7Honv4v6IpqCKFLR35MSVkYq0F0rVw6S5UjmJzdIyiIKZoAhLvbHSNBRS9IIryx4vZjuvEzsUmGrSxGFaIoSkrecZHR7e/6cXztrO2vD1Kgk802DQ1LyR5K1nxQxkevT/fSM0MK0hMOGPRgP6Qnns6NG1b1OH3DW1oafWxBPLr4kVPSZim9nJlvHi7ZnH3M5xyWXXsRG+cSAmhs/6l0RmJQQAEAEiAWkSQciF16LbD29bdnVVy/bdnpr75ToYr61UzjT2covpt0RAPq9h2HSw63iYsgWjR7Y1km7oq2d2w5EycGr2qLRNk4kQW6KtFfWMv9MJ3xDJVtPXgBiey2M/HIiu2ViU/gQtqPblgCKouzWhXzEFBLcdnI0GHx3w+nTG94NBqOtp7/ZSBY+fvbbg4+dPft467PPnn+ukwg3H4tt7+l9f+Mnvdt7xA9Of9MKWd9t/eZ067uhYDSWdPZxyPzYwW8jz25kGHLVqfLYyyd5w5e+2K9PcjC2BtqLk+BaC1Q0oel0AQXz4NpRXdzHXAyxwOkGfGxyy8yprAhSROWeEHKLJm06sUYV1RsIFPkdtBsX6UCEnOvo6OkgnmisXqpjurEsmqLahMs6OzrIXHZPcafHo6dD0VFD2E08HR3eDhRQ8A5TYHZ00JYO+COeng5FbxZfJ5XwTzVcsnoDO9+ST0SDlfE+EhiASA3iyX5g36j4vcbqmeRDsoIjIBgRhPk1ULTA3md9Dwm9v/wsa2E14szqhVmfMVkaeMBwtvYP5y6TI31aaCMQxLTi+sETFZpCUcQ0RXEe43zmBpYhKWUoz8ZN+ajNRKMEql+iqufexYcUMhBNEAaFBzO7Rx1b/c4cREzwIbjk/cJrfBd0Q0TU92WJ+ihKcxd9wNBPs4qbxHSPCpFA3aPFESQOd5BzpvFGk1SmQhoJv3yVzIvBMtEdFki+Kk1IJ2UqIKHNuxKr43btSqyO6xtJtz45ntxJOGtZZrHfXl8ZcFXom8q8z4fHzr9tUnEKkWgLn1tZM6KqMjlJ6xohbC4oz8+QVWK6Wi0bwlVDSpPcQiUra9eg8nvcR/9BhiSHdu7b4xONruJ8UTvqiqYh+lRtuX/cKC898fSMrdNqi6yFpmLf2GryXsXCGbNHX+EbkZuV5buyekid7fbB63+sCdRycd163K1ZidttZQSGk4bnC/m/MG+Tfg1QyYZj69cfE95ny9LUkKAsdh+wfL2In7b+2A/H1vdOQY0Ye+8q7n1ZlEWgE17GpzIRvzpQ1RlijCoslAHfl01EMIWJQ8UEu4A9lxBnyCVOv+uj2cZ7ztNT9Ohdd7ztPWB7aPU1P5z89XWZY3/xBYRDu6jW/fz4C8RKhtOTZhWZP5+U0zCfKnWOP0//RH9Dv/hwjnH8mK93LFn3VvVQ7ZgH4amj10F4zXz6AT96FhRv6jtkLlalCORLWkBf7+ZloLEaGFuvA17CtRzV3HhsLwQumcBcfVZU28KlLFrDqioQi00EJqI3GNIFGchlN9N5zAEshiiZ0A+7nR7NL1Hte9mhHmrlVaNlXRV9Ma9UJm/DwJB0+tzUTwze9NgjlRMlZ2FIfUgszKW/dufSbSZPUtIYOia7UPVQqlb1CR3Pa3KyHenf6G2GdEE8We7sy+ZPPeewHTONsuVvU6XZcoze7N7NEzxuocHuujvdZU5P25lrii2onS2sYLcNZnMyN3ANvQqkF5xFGpJYIK9qQBIWq1e9wfQoSLqQRMU1JmztT9wvNxNQ4HRuNvq0wpziYE5xvEGPC2d9XgfnvOxCWdW/WiYrhgU/WyYrZxIXp/WHoDvY85nysYfoObqTLqc76LkH2VrZR98n15GU3s/oU2uyMoxZd812GtaTO//yNAndOGyFRp2VZFeFRtvt9OOsIriCHO1z3de73VnGjKzZm4S0lGSjrFn2t/f+p/eNP9O/jyVTyN8Iv+WO9c15Twhm0oFlP8Te+f6jbHHsgyTFKdytFoYESDJ55fc3tmimN2a6c8ozhknzOkb0zJ4tjCJqlYoPV5EUSRBIdZio6VNllvxZkzfWv37mv+nV1/P3xhpWkiNEeuvRviXk4djoUutU8lfFRzOxrnr65dYgoD3m30pDJ7TAoFWgzPcGY7KarVWgDH/gYtKfvcLFnuyatLNr1P0B/CmmJ4qrqopJcTFuVPLzV8BFlJiSCvxFGTMRppcycTmAWydzM5VVq7JgFXyoQxi4qsGuEy91jg1AtRDbAN0ASQF3KIFpB9KEK8zXAt5wh0lIdrl9MLBcqob7ymbmXEW//PsT40kurmBVeButfS9C3sRYnOMJbvrm9fTNmzUjAnW3WUQxmYRfapzaVUtUkiTw1u3DfcM1/92Q/XHOeJUg6t0FJC1WH8VVsUoZILw7Xx/IPGlK82efNY/YPiTHkZMz1jjc6x2e5nZZk5OdOUO2D3999IbWUQKP/Ogurl2ulesS/iwaYpRkIuq4UNCIa514NxGjZFIRcfa5Yo27hCcq7JvpZ7Ept/NP0nS+sy02WdbT5zzrXH2OXXyn8HSlU0U3xSbezr/ct4N/AW7jO57jVskFYhS4rBltnxzTn6HkmE4UC8PAS87C6dwSnN1yJr/s4Jq8sRHPDIMhj//wYpxu4cvI21e1NdBbqYfe2tB2lRhdM9VfoU8SxQo/woT+eG8uqSfqsi/oP0jGF2X0POIY9DU4KZ7s1/UP9CQ6iasBlAO49kXvH0XeVjCvTkG7iWECMQl1mlJdtOc7VDeiUpdxpAb03uhsVXW2dvZsQ5PFxTVRWmgLZmUYXIouwQSNIJuyjXOwQAyhwO/j6+080QFlooc/LqzrPQznATYRmL9mzoe8TuXTJ5E0HmCDzAdAQg7pgBsEAENorflCARHOpJTevfd0y8TWe+9tdbs0BfNmb1q5alJly1eP3mq1kXOMVutH/eq+e/NoSl7rtpuLi2W1OndUoOQUvY7+9fSd83Q6VXp4Qtt9f/gvMuI5XGHTd06VOWnxKy2q9NLS2rxYvVJU3PZ6Tjpw+bZHv6l+S8slbT+gTper0b+sw//2taz8C+SC+Kn4KX6Thu9fMCZ+Sh8kC3bQB+lDO8l8diILxPFw/eCOxPX8nfQhMl+RBRVdvQDouBKoJ9pl58f3EogrKWtBFAwwETjusgi/goEaTS/D+W5209zvPo2GV9z9C822yiIKuxi31zObvRpdanpf1qWlJaWqRFEicnKKze4z5+aka5OSeMLzvArYV3JqSrpOVyH8QFNip++oCQTyzPocc5HbNiLk9w6t8AbzMhx8qrrA4g8ME7YmHFhwdaeqk1Ylp2Zk5iSnGrJ4iZSWlgD3TsnUZ2XlZjo1yWn5QqYOwKBa40KTw9Qmi9XvD20U1VKSLMuSJGqSZCFJxW8M+QNW6++YT0SUbZUCyPmifITtFoi32yJuGdM1/V+0XcKH4f+m/cigNuwz/7ttWKY0D31mUDsO8V3ajvzRxM4B6LwMki5II5/+e01JJNZIv/rXjbmCZULPH6VBL87/Im4ajD63K6Eh97ElN2jx7v8xZ4H4jzAnoIQCPXEHt1FSms4ka00hrTsEpfCfC4ArjMZ8q9dfs6R+lNGYKpAkOTXVkGnOLnaXlxUVZ2dnGVPSZI1wr9csV+evCk1f1bJo0bVXNXtaSmpzy4ZPL39+8uMjFy+of+zjK+aJ63ShwJAKr8NtMFVVT5s+R5fksjps0NE5Rp3OYM5zOZzuPGvskem3XFBpeC0gqvSUlBS1Tp2TpEu+sPWK1QFzzuNbaHdzM/Fsedxfw9rhCMiruUBrrUgHOYsq06BHopFGoJ7xFYx+l7tMFfBn6mAEIDzBAygywBZhMvES4b7iqmqDIduuABJ7tjp3dMDT0cI3WUqyQ+XRMn92iUVuvo/SPf621RFzvnV5kbKjVtFya7J79fLb/HsI3xOZOTNQXRYMlFcP0tuq2YouomV2PDUKK4qZX9UQxcVxgkVZCNevf13H/MeAPsET4jocf5hfPIlSrpKd+0n5VsWsStA3jPmls4xnFFd6dNrB/PG1CqxskIIHlqjsF5TwYR9UtjPu008GFodL3Nqj6NaFT/z0uy+Wh2wYjbR9py5TNkFhHMV6XHyOOVixwJWVBoJ5dJnvHljixfYZoLtn6yVMl13NG7cv6VD0v8xqXr48vtjysit56dvsprICJL4OEvdRuLhGoN8LNL6LQOLA6rE13f1n3G9gwH5AuBpoPMg11yo7WBD46DTcDKgMtwUKk7juIIVYHFxmRhJeD6qXaJNxUZDMNDGisjESxIiMnN/nLwMR0Z2G8o41CIDg53bi4e+lm+jDP3Z0cD+SeWQzmcdB/MeYl1xFqr7euvVr+lt6kP4WY/y+qWPXPhBauPkpumf9U0/98+mnSLlvxIJyMy/cbHRWBgKVzuQ/dnfXrxoDNFJAkjotKW9Yw+SRhp/dgcjX8SN9+Cfv9w58K6liX+IszXttY2Sm8aGl65+KPP3Pp55af+NTNLlKd+XCOQX5DRunjXBkqwXS+PHHKlfVhCuuGBvSZiw+sGiCTU/ivupxummCdi9nO/JZlV32XMzYwXAq22lP7F+55w/qfhIvYYZgRkdQ+wnp4uhYPZpvH9I0hSPhJs1DcNGXMkBhsWPAlmLfKxb5lfG8K+GCrZgwG7AIgxmXUcT1v90DwsRt5hmD+tkP5SXyDJCoc7gy9HXiXLb4ppchEjQNvPDrCJpfcOcqtv0hqkhl4scd9NLQRQVqHlTVNbV6Yu95PGUbSvig5++ejSX9VyW1ZL+naWMJnfucp7XJA7fh3PukrbJSq033TJg41BIeK9EmfLzV4yH4/GoPXJVs9Hj4Ynh+Y2w7nYsPkf3PQUEePuDBt3WXro405eQULPx98KpVV8K8eBCws1f6MzeFu4pbwF3H3cLt4PagPVmPFg59miSXiQGlEmw9IWp2QBhT/AQSOyXGQ6WjlAzYrxAjiS3xjIkdxIhkyCdY/RBgBuhQ0c+ULrKkuDCICeMiXJt8GIc8EJc+b+q80GTT5ZS7auzVmuSJ/gllNlvThc6mxc3b1JltiwN3O7UoqeGWa3BgVOvYU7m4LVO9rWKpue8eVxh7lmxSuveIjs/TRXR5vC49PZJONLr0DNqdka4zG4jHYKb78Ww20G44r49gFE/C+/hC/4jrpzaUVhrtkrrCccVVdzf58dNG1r70VXng1m8a84ZJaw+s9eIzXuUMl1JNduM3twbKv3opb3gmub66sIhRPsW0T7U5utxcncGY3GMCFqwFieQbRSyJbwMX9/tAGYetxCRoFAj6DEGfNr5LpVnR99UQyZ7Y2jIe2tyGuPZPsS4m1EDAVl66ftZK3BqqEce+rzL+QZU+3MStszXKl8f33AGxePXLM2bQbnS7ITQVp9LnmWzRbFQ5Z36u6BMirZ2o7FacFNi6o4R+O4kzAAWo5GYybwW/O42wFRi4dCYRZd4scWcW9GUZeCUCqIjXwwZfb4/Xlj1qyue9YVRGcSwQQnATaXVAm4+LcYS2SGE1Njh8nhKhLWhywYO0X4wdfRiogNqWYVND+PDRXxyw7GlrbdtjefTBmLjp9vuc9YvGFptfpb+mbfTXrzpHbJxp3yMdmN1ceL3HWVtdmIjEjpG56ClE9zN/oYvxmpUvBX5AckJKCKGfYOyHwEsrVz3rT6pzuYYn+Z6lk93hJF3liEAp7V750ooVL60knmHjJmYnhTk1W19wkq2ftkIrDudGceO4idwV2JaMqKjYZjPOgReKn77ShDjhnJdck5BBdsIhxkNhhcPnz8yUs6rLXDOen8E3DbqMvQ79zDq7CK1f/XFc3oZLImKHlFDc5V4+b3p2TpJt/pXN7gUTJiy45Lr3R/SZGug/FY/zt+AuSsyzWwlRtn0D+EeabOD0XB5XiLqUNN5WRtwEDp0RCY0OGC/KIm5JAJriZnZm2agaT96q6Dp+7HhXBXlj6BcdP7yzwLdm8a9eo8E5Y6a+s2/Rtjl390xcMLHn7plX1t4vFve9N297Xd32eYJ3znIVcew4OmVxPv1zGc18IuPqI1Njf4zM6JyxyLD6in5MJT0EfcE0AYD8cU9kO5EA9qJYZZJww2lJ1mnR5zdM2DaqRNbqmBYr6A5KmisnWuqq3p1Bzy+j/zP945o6y6Qr6yfwGv1DK/KHvbv4BZ1+bOe5zrF63QuLf1frWLlfr+HHiVeXHXrjqqlL1DSV/FfK0plXvXGo1CaEq275ITzDTW/lg3ln2tq+3r7967a2M3mx35CbrfNrLmyuquUH7LmSinsscGwHEYBMYUHDu2WdU3DHd+C559BX778QCF54TT/mwy7hPL2TrCn5c1bf3WXvWMkaeqiQv4HfIauX3H23z4+WRH390209TxMHyXJuJs/66bCrC+gZ+lUJuZ/OT8z9/9/W0w7cDyj9p/sB/au9gP7VJkC4x5jQJtWpGhhKRf/WdrbZX0OUQ/0723MC9ekWwJ0Kp93E7ebu5x7iDnHP4XZXAReIh0aTQSA6Y5i43DoSxNGjkiVc7+0QjCbcYFsyGXEJpg4wBgqRrjSU1AuIrCS4cYCJwZCujBAdCqe4OlzQ6U0odaI9pgq7nTFku9Yni2hDtOCV0yQp5Qio0bczjbzsx3KcimN7SA/DGVe9kVwC9BYyALKc1GHOGzN5UU/+wkkdQ8ZMWiy8YbPfuXgf/WQIhg8QT3RLnSqrVJOUrknXDBmvLkxTpw21N8lJokrKyCR7IEFOG2IXdGM66a7sgGpsKfnV8Uq9Sk4rsN79KE+qqyuLyITjmctHkguvTV2ztnFZHnl6GW4MwcdW35NMUjN1QybdWqSR1JoqZ7paN9ny1OxryKNPp+TZD89vXCXLfoF6m68hpLqqXDxCT5O8sZMmdeQReprPIaa8MfvuzSMFffc2v3vQGdr5QPN7Bx2hnfyaig28JjsrrzZcnDtuEbk/WchTpac6BEmTIqjVj75FHlBSiBzMOz8uSFPGvgPzRA4NTcq+aubsDaSCHlXxhsx8+uiEuitoNylEZ1hSMeX+1XtwbyBVyl8DQhbhyd7vyFaBpKeJxPxVw2haXPrMD2GzJa9p3ecLDpaTsD5Hp6UdZBj9GAanAbFnJ/c588ku44Zxo7lZ8Z0e0ni06QX8DmCRPkRnkgutA+gwYJXtxvh6GOhnNwwQHFBIm8iAHewYPnOXSYDB0HxjFH7RNLp65VNLNx2/iaheSvOn1JjUedJ9r1/zq4XkrUXtU/UlNwesk99rWpye3t6E57tUU9hWd337n94nqlJNmS6DP2XIkFvffkqoD7ctDK+eE6rdMPnm35Ka4SUlRHhj+8yH5kdmmmuvuG1hsdeZN/0d4cHV1+0X+L3XrT5IJiub5vU+edMKY3ZGbp7OnOZQZ/I75kV2cP8HaN6Jp3jaY2BkYGBgZOzkvFFoFc9v85WBm/0CUITh3KH3n5Bp9gtgcQ4GJhAPAHr1DTQAAHjaY2BkYGC/8P8GiGRgAJOMDKiAFQB1yQRkAAB42kVQKw4CQQx9HQRZvwdAIFdzCyTJHmAUgoOgBkcQaCQYFAoBFQgkZ0BvQnD0t0tfOtPpvL42pQ5maQeQxOMnMjX4gO1+g+UsVCMb2N4IX0Q2QEXzbqNJujjAqcVL9VyBDuIlXhhOxk14/y61aGkvVqSWHqJeaEqNw/JZJmZ1ZVr3PPxxMIsze13cI1rS2pWFWWGObVTNQqtE1QqVTai2wWnopvhGfHadXs8A2xBjb4yOrrE72ZJ8HX/INVp4AAAAAAAmACYAJgAuAIYAqADUAT4BkAGoAe4CLgKSAsgDEANcA5ID1AQcBJgEzgUKBTIF8gYcBmQGkgbOBxIHRgeoB9oIOAhSCHgIqAjSCPwJEgkgCS4JPAlKCVgJtgnKCfYKNgpsCooKngrcCv4LNgt+C/AMVAyYDMwNBA0+DW4Nng3MDfoOJg5oDqgO1A8yD5YP+BAcEEwQlhDcEQoRJhFiEXwRuhJYEqASwhLkEwYTMBPCE/4UahSUFLQU0BUkFWwVsBYmFmgWqBbqF0wX4hhcGNAY9BkQGSYZZhmgGfoaQBp4Gp4awhr+G0wbohxUHIQc1B0GHU4dhB2mHcoeWB6QHu4fEB+MH84gIiCGIMwg7iEQISghqCHkIj4isiLQI3oj6iRwJKIk6iUGJSglWiWoJcQl9CYWJrInWifeKCooRChaKHIoiCigKLYozijkKRwpOin2KlwqxiuaK/Ysmi0WLWAtuC30Lj4uai54L5owHHjaY2BkYGDYzrCJQZABBJiAmJEBJOYA5jMAAChvAcAAeNqNUsFOwkAQfS1oQjQePHgwHhq9qAkFS8QKV9SDaIhG67VAKUSEChXwF/wyvfkFfoPxA4xvt1vStBezme6bt29mdnYKYA1vyEHLFwB80SKsYZNehHVs4FvhHGz8KpzHrlZVeAUL7UHhVfKfChdwqP0ovI5tfUfhd2zpcewHynoTF2ihCQMzeJhgigHGGNG3aGMyBlz6r9yHRKFUZdVzohB9op5kQiIPC3T4DejFun1qQq4ANZS45nKZ8Hn6wl1U9MkPGSFiR6zh0UpkA7JF5nfxTKXI80RmD+eq4lmm3gEaVE+pFdnGMtsNFT5riW4mOGKmMlcVddzhEg6uibJRxVRcVmGkFPepF0pWauGWjPCSbJ/KUOWbLSNMnPBbZ68uHplTaHpkxQu1OSUTx9JsVOid/uPujnzlLm8xkW8r7t6VaCDnYMgpu6w4V8pgqYwn5NBvJ2Yd3fVK9drgaYd79BdZPK3RbH4tdioY0XnlD99veDwAeNptk2eTVFUURXuNCmZExQhiACNov3PuCyOgIs4YMWNGRVHAMIqKCmLCrGBWVAxgDhiR4ucR7NV+oqu6dr3qe9Z9vWqf3kjvv8/unb3o7e+za++X3ggjHMCBHMQkJnMwh3Aoh3E4R3AkUziKqRzNMRzLNI7jeE7gRE7iZKYzg1OYyamcxumcwSxmcyZncTbncC7nMYe5nM8F9KkIkkJNQ0vHKBcyj/ks4CIu5hIWcimLuIwxxrmcK7iSq7iaa1jMtVzH9dzAjdzEzSzhFm7lNm7nDu7kLpZyN/dwL8u4j/tZzgM8yApWsoqHeJhHeJQJHuNxVvMET/IUa3iaZ3iWtazjOdbzPC/wIi/xMht4hVd5jdd5gzd5i7d5h41s4l3e430+4EM+4mM+4VM28xmf8wVb+JKv+Jpv2Mo2vuU7vucHfuQnfuYXfuU3tvM7f/Anf/E3/7CDf9k5ec3EqrF+v78vx6v/szLDTLOYtdmYrdmZo4Os5FXyKnmVvEpOJaeSU8mp5ISckBNyQk7ICTkhJ+SEnJSTzqfz6f9KOSknnU/ni/PF9yhyipzifPH+4nzt77X31J6rvaf2fD08732N9zXe18hp5DRyGjmNnEZOI6d1vvV9WzmtnFZOK6eV08pp5XS+Tyevk9fJ6+R1A17Yp7BPYY/CHkV/eK4xW7MzB/eGPQp7FPYo7FFU8uxT2KewT2Gfwj6FfQr7FPYp7FOEPHsV9irsVdirsFdhryLl2a+wX2G/wn6F/YqUZ8/CnoU9C/uV+sv+8DnNYtZmY7ZmZw64qcfUY+ox9Zh6TD2mHlOPqcfUY+ox9Zh6TD2mHlOPqcfUY+ox9Zh6TD2mHlOPqcfUY+ox9Zh6TD2mHtN9zaFP9zWLPPc2izz3N93fLANe8bkMn+u+WZlhplnM2mzM1pTnvhf3vbjvpYk9i9zPKgAAAVKdP3IAAA==) format("woff"), + url("../fonts/dashicons.ttf") format("truetype"), + url("../fonts/dashicons.svg#dashicons") format("svg"); + font-weight: normal; + font-style: normal; +} + + +.dashicons { + display: inline-block; + width: 16px; + height: 16px; + -webkit-font-smoothing: antialiased; + font-size: 16px; + line-height: 1; + font-family: "dashicons"; + text-decoration: inherit; + font-weight: normal; + font-style: normal; + vertical-align: top; + -moz-transition: color .1s ease-in 0; + -webkit-transition: color .1s ease-in 0; + text-align: center; +} + + +/* Admin Menu Icons */ + +.dashicons-menu:before { + content:"\f333"; +} + +.dashicons-admin-site:before { + content:"\f319"; +} + +.dashicons-dashboard:before { + content:"\f226"; +} + +.dashicons-admin-media:before { + content: "\f104"; +} + +.dashicons-admin-page:before { + content: "\f105"; +} + +.dashicons-admin-comments:before { + content: "\f101"; +} + +.dashicons-admin-appearance:before { + content: "\f100"; +} + +.dashicons-admin-plugins:before { + content: "\f106"; +} + +.dashicons-admin-users:before { + content: "\f110"; +} + +.dashicons-admin-tools:before { + content: "\f107"; +} + +.dashicons-admin-settings:before { + content: "\f108"; +} + +.dashicons-admin-network:before { + content: "\f112"; +} + +.dashicons-admin-generic:before { + content: "\f111"; +} + +.dashicons-admin-home:before { + content: "\f102"; +} + +.dashicons-admin-collapse:before { + content:"\f148"; +} + + +/* Both Admin Menu and Post Formats */ + +.dashicons-admin-links:before, +.dashicons-format-links:before { + content: "\f103"; +} + +.dashicons-admin-post:before, +.dashicons-format-standard:before { + content: "\f109"; +} + + +/* Post Format Icons */ + +.dashicons-format-image:before { + content: "\f128"; +} + +.dashicons-format-gallery:before { + content: "\f161"; +} + +.dashicons-format-audio:before { + content: "\f127"; +} + +.dashicons-format-video:before { + content: "\f126"; +} + +.dashicons-format-chat:before { + content: "\f125"; +} + +.dashicons-format-status:before { + content: "\f130"; +} + +.dashicons-format-aside:before { + content: "\f123"; +} + +.dashicons-format-quote:before { + content: "\f122"; +} + + +/* Welcome Screen Icons */ + +.dashicons-welcome-write-blog:before, +.dashicons-welcome-edit-page:before { + content:"\f119"; +} + +.dashicons-welcome-add-page:before { + content:"\f133"; +} + +.dashicons-welcome-view-site:before { + content:"\f115"; +} + +.dashicons-welcome-widgets-menus:before { + content:"\f116"; +} + +.dashicons-welcome-comments:before { + content:"\f117"; +} + +.dashicons-welcome-learn-more:before { + content:"\f118"; +} + + +/* Image Editing Icons */ + +.dashicons-image-crop:before { + content:"\f165"; +} + +.dashicons-image-rotate-left:before { + content:"\f166"; +} + +.dashicons-image-rotate-right:before { + content:"\f167"; +} + +.dashicons-image-flip-vertical:before { + content:"\f168"; +} + +.dashicons-image-flip-horizontal:before { + content:"\f169"; +} + + +/* Both Image Editing and TinyMCE */ + +.dashicons-undo:before { + content:"\f171"; +} + +.dashicons-redo:before { + content:"\f172"; +} + +/* TinyMCE Icons */ + +.dashicons-editor-bold:before { + content:"\f200"; +} + +.dashicons-editor-italic:before { + content:"\f201"; +} + +.dashicons-editor-ul:before { + content:"\f203"; +} + +.dashicons-editor-ol:before { + content:"\f204"; +} + +.dashicons-editor-quote:before { + content:"\f205"; +} + +.dashicons-editor-alignleft:before { + content:"\f206"; +} + +.dashicons-editor-aligncenter:before { + content:"\f207"; +} + +.dashicons-editor-alignright:before { + content:"\f208"; +} + +.dashicons-editor-insertmore:before { + content:"\f209"; +} + +.dashicons-editor-spellcheck:before { + content:"\f210"; +} + +.dashicons-editor-distractionfree:before { + content:"\f211"; +} + +.dashicons-editor-kitchensink:before { + content:"\f212"; +} + +.dashicons-editor-underline:before { + content:"\f213"; +} + +.dashicons-editor-justify:before { + content:"\f214"; +} + +.dashicons-editor-textcolor:before { + content:"\f215"; +} + +.dashicons-editor-paste-word:before { + content:"\f216"; +} + +.dashicons-editor-paste-text:before { + content:"\f217"; +} + +.dashicons-editor-removeformatting:before { + content:"\f218"; +} + +.dashicons-editor-video:before { + content:"\f219"; +} + +.dashicons-editor-customchar:before { + content:"\f220"; +} + +.dashicons-editor-outdent:before { + content:"\f221"; +} + +.dashicons-editor-indent:before { + content:"\f222"; +} + +.dashicons-editor-help:before { + content:"\f223"; +} + +.dashicons-editor-strikethrough:before { + content:"\f224"; +} + +.dashicons-editor-unlink:before { + content:"\f225"; +} + +.dashicons-editor-rtl:before { + content:"\f320"; +} + + +/* Post Icons */ + +.dashicons-align-left:before { + content:"\f135"; +} + +.dashicons-align-right:before { + content:"\f136"; +} + +.dashicons-align-center:before { + content:"\f134"; +} + +.dashicons-align-none:before { + content:"\f138"; +} + +.dashicons-lock:before { + content:"\f160"; +} + +.dashicons-calendar:before { + content:"\f145"; +} + +.dashicons-visibility:before { + content:"\f177"; +} + +.dashicons-post-status:before { + content:"\f173"; +} + +.dashicons-post-trash:before { + content:"\f182"; +} + +.dashicons-edit:before { + content:"\f327"; +} + +.dashicons-trash:before { + content:"\f458"; +} + + +/* Sorting */ + +.dashicons-arrow-up:before { + content:"\f142"; +} + +.dashicons-arrow-down:before { + content:"\f140"; +} + +.dashicons-arrow-left:before { + content:"\f141"; +} + +.dashicons-arrow-right:before { + content:"\f139"; +} + +.dashicons-arrow-up-alt:before { + content:"\f342"; +} + +.dashicons-arrow-down-alt:before { + content:"\f346"; +} + +.dashicons-arrow-left-alt:before { + content:"\f340"; +} + +.dashicons-arrow-right-alt:before { + content:"\f344"; +} + +.dashicons-arrow-up-alt2:before { + content:"\f343"; +} + +.dashicons-arrow-down-alt2:before { + content:"\f347"; +} + +.dashicons-arrow-left-alt2:before { + content:"\f341"; +} + +.dashicons-arrow-right-alt2:before { + content:"\f345"; +} + +.dashicons-leftright:before { + content:"\f229"; +} + +.dashicons-sort:before { + content:"\f156"; +} + +.dashicons-list-view:before { + content:"\f163"; +} + +.dashicons-exerpt-view:before { + content:"\f164"; +} + + +/* Social Icons */ + +.dashicons-share:before { + content:"\f237"; +} + +.dashicons-share1:before { + content:"\f237"; +} + +.dashicons-share-alt:before { + content:"\f240"; +} + +.dashicons-share-alt2:before { + content:"\f242"; +} + +.dashicons-twitter:before { + content:"\f301"; +} + +.dashicons-rss:before { + content:"\f303"; +} + +.dashicons-facebook:before { + content:"\f304"; +} + +.dashicons-facebook-alt:before { + content:"\f305"; +} + +.dashicons-networking:before { + content:"\f325"; +} + +.dashicons-googleplus:before { + content:"\f462"; +} + + +/* Jobs Icons */ + +.dashicons-hammer:before { + content:"\f308"; +} + +.dashicons-art:before { + content:"\f309"; +} + +.dashicons-migrate:before { + content:"\f310"; +} + +.dashicons-performance:before { + content:"\f311"; +} + + +/* Internal/Products */ + +.dashicons-wordpress:before { + content:"\f120"; +} + +.dashicons-wordpress-alt:before { + content:"\f324"; +} + +.dashicons-pressthis:before { + content:"\f157"; +} + +.dashicons-update:before { + content:"\f113"; +} + +.dashicons-screenoptions:before { + content:"\f180"; +} + +.dashicons-info:before { + content:"\f348"; +} + +.dashicons-cart:before { + content:"\f174"; +} + +.dashicons-feedback:before { + content:"\f175"; +} + +.dashicons-cloud:before { + content:"\f176"; +} + +.dashicons-translation:before { + content:"\f326"; +} + + +/* Taxonomies */ + +.dashicons-tag:before { + content:"\f323"; +} + +.dashicons-category:before { + content:"\f318"; +} + + +/* Alerts/Notifications/Flags */ + +.dashicons-yes:before { + content:"\f147"; +} + +.dashicons-no:before { + content:"\f158"; +} + +.dashicons-no-alt:before { + content:"\f335"; +} + +.dashicons-plus:before { + content:"\f132"; +} + +.dashicons-minus:before { + content:"\f460"; +} + +.dashicons-dismiss:before { + content:"\f153"; +} + +.dashicons-marker:before { + content:"\f159"; +} + +.dashicons-star-filled:before { + content:"\f155"; +} + +.dashicons-star-half:before { + content:"\f459"; +} + +.dashicons-star-empty:before { + content:"\f154"; +} + +.dashicons-flag:before { + content:"\f227"; +} + + +/* Misc/CPT */ + +.dashicons-location:before { + content:"\f230"; +} + +.dashicons-location-alt:before { + content:"\f231"; +} + +.dashicons-camera:before { + content:"\f306"; +} + +.dashicons-images-alt:before { + content:"\f232"; +} + +.dashicons-images-alt2:before { + content:"\f233"; +} + +.dashicons-video-alt:before { + content:"\f234"; +} + +.dashicons-video-alt2:before { + content:"\f235"; +} + +.dashicons-video-alt3:before { + content:"\f236"; +} + +.dashicons-vault:before { + content:"\f178"; +} + +.dashicons-shield:before { + content:"\f332"; +} + +.dashicons-shield-alt:before { + content:"\f334"; +} + +.dashicons-search:before { + content:"\f179"; +} + +.dashicons-slides:before { + content:"\f181"; +} + +.dashicons-analytics:before { + content:"\f183"; +} + +.dashicons-chart-pie:before { + content:"\f184"; +} + +.dashicons-chart-bar:before { + content:"\f185"; +} + +.dashicons-chart-line:before { + content:"\f238"; +} + +.dashicons-chart-area:before { + content:"\f239"; +} + +.dashicons-groups:before { + content:"\f307"; +} + +.dashicons-businessman:before { + content:"\f338"; +} + +.dashicons-id:before { + content:"\f336"; +} + +.dashicons-id-alt:before { + content:"\f337"; +} + +.dashicons-products:before { + content:"\f312"; +} + +.dashicons-awards:before { + content:"\f313"; +} + +.dashicons-forms:before { + content:"\f314"; +} + +.dashicons-portfolio:before { + content:"\f322"; +} + +.dashicons-book:before { + content:"\f330"; +} + +.dashicons-book-alt:before { + content:"\f331"; +} + +.dashicons-download:before { + content:"\f316"; +} + +.dashicons-upload:before { + content:"\f317"; +} + +.dashicons-backup:before { + content:"\f321"; +} + +.dashicons-lightbulb:before { + content:"\f339"; +} + +.dashicons-smiley:before { + content:"\f328"; +} \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/global.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/global.css new file mode 100644 index 0000000..788b61f --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/global.css @@ -0,0 +1,473 @@ +/**************************************************/ +/* N O T I C E */ +/**************************************************/ +#layerslider_notice { + margin: 0px 15px 5px 0px; + padding: 19px 0px; + background: none; + border: none; + border-bottom: 1px dotted #ccc; } + +#layerslider_notice img { + margin-right: 15px; + float: left; } + +#layerslider_notice h1 { + margin: 0px 0px 10px 0px; + font: normal normal normal 24px/30px "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; } + +#layerslider_notice p { + margin: 0px; + font-size: 14px; + line-height: 18px; + text-align: justify; + padding-right: 200px; + position: relative; } + +#layerslider_notice p i { + color: #999; + font-size: 13px; } + +#layerslider_notice a { + display: block; + width: 181px; + height: 30px; + padding: 0px; + background: #f74402; + border-radius: 2px; + text-align: center; + font: normal normal normal 14px/30px Arial, serif; + color: white; + text-shadow: none; + position: absolute; + right: 1px; + top: 5px; + border: 2px solid #fff; + transition-duration: .3s; + -ms-transition-duration: .3s; + -moz-transition-duration: .3s; + -webkit-transition-duration: .3s; + box-shadow: 0px 0px 1px black; + text-decoration: none; } + +#layerslider_notice a:hover { + background: #de2e00; + color: white; } + +/**************************************************/ +/* N O T I C E */ +/**************************************************/ +.columns .half { + width: 49%; + width: calc(50% - 15px); + margin-left: 30px; + *margin-left: 2%; + float: left; } + .columns .half:first-child { + margin-left: 0; } + +.ls-overlay { + width: 100%; + height: 100%; + position: fixed; + left: 0; + top: 0; + background-color: black; + opacity: 0.5; + z-index: 2000; } + +.ls-notification { + padding: 0 0 2px 0 !important; + margin: 10px 0; + background: #c9c9c9; + border-radius: 3px; + box-shadow: 0 1px 1px #999; } + .ls-notification div { + padding: 5px 10px; + background: #ddd; + border-radius: 3px; + font-family: Helvetica, Arial, sans-serif, serif; + font-size: 15px; + line-height: 20px; } + +.ls-notification.changed { + background: #ecdf86; + box-shadow: 0 1px 2px #bba98a; } + .ls-notification.changed div { + background: #fffbcc; + background: -webkit-linear-gradient(to bottom, #fffbcc 0%, #fffb99 100%); + background: -moz-linear-gradient(to bottom, #fffbcc 0%, #fffb99 100%); + background: -o-linear-gradient(to bottom, #fffbcc 0%, #fffb99 100%); + background: -ms-linear-gradient(to bottom, #fffbcc 0%, #fffb99 100%); + background: linear-gradient(to bottom, #fffbcc 0%, #fffb99 100%); + color: #795d1c; } + +.ls-notification.warning { + background: #dfafb0; + box-shadow: 0 1px 2px #a27172; } + .ls-notification.warning div { + background: #ffebe6; + background: -webkit-linear-gradient(to bottom, #ffebe6 0%, #f0c8c7 100%); + background: -moz-linear-gradient(to bottom, #ffebe6 0%, #f0c8c7 100%); + background: -o-linear-gradient(to bottom, #ffebe6 0%, #f0c8c7 100%); + background: -ms-linear-gradient(to bottom, #ffebe6 0%, #f0c8c7 100%); + background: linear-gradient(to bottom, #ffebe6 0%, #f0c8c7 100%); + color: #581b1e; } + +.ls-checkbox { + display: inline-block; + width: 35px; + height: 16px; + margin-bottom: -3px; + position: relative; + background: transparent url(../img/sprite.png) 0px -291px no-repeat; } + +.ls-checkbox span { + display: inline-block; + width: 19px; + height: 19px; + position: absolute; + top: -1px; + left: 17px; + background: transparent url(../img/sprite.png) 0px -343px no-repeat; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; } + +.ls-checkbox.on { + background: transparent url(../img/sprite.png) 0px -317px no-repeat; } + +.ls-checkbox.on span { + left: -2px; } + +.ls-popup { + width: 300px; + height: 150px; + position: absolute; + padding: 20px; + background: white; + border-radius: 7px; + color: #eee; + z-index: 6000; + box-shadow: 0px 2px 10px -2px black; } + +.ls-popup .inner { + width: 300px; + height: 150px; } + +.ls-tooltip { + max-width: 260px; + min-width: 120px; + position: absolute; + padding: 10px; + background: #000; + background: rgba(0, 0, 0, 0.8); + border-radius: 7px; + color: #eee; + font: normal normal normal 12px/14px Arial, sans-serif; + text-align: justify; + z-index: 6000; + box-shadow: 0px 2px 10px -2px black; } + +.ls-tooltip span { + display: block; + width: 0px; + height: 0px; + position: absolute; + bottom: -7px; + left: 50%; + opacity: .6; + margin-left: -7px; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 7px solid black; } + +.ls-box { + border: 1px solid #dfdfdf; + border-radius: 3px; + margin-top: 15px; + position: relative; + box-shadow: 0 0 10px #f2f2f2; } + .ls-box .header { + height: 28px; + position: relative; + line-height: 28px; + border-radius: 3px 3px 0 0; + font: normal normal bold 12px/29px Arial, serif; + background: #f7f7f7; + background: -webkit-linear-gradient(to bottom, #f7f7f7 0%, #e6e6e6 100%); + background: -moz-linear-gradient(to bottom, #f7f7f7 0%, #e6e6e6 100%); + background: -o-linear-gradient(to bottom, #f7f7f7 0%, #e6e6e6 100%); + background: -ms-linear-gradient(to bottom, #f7f7f7 0%, #e6e6e6 100%); + background: linear-gradient(to bottom, #f7f7f7 0%, #e6e6e6 100%); } + .ls-box .header.medium { + height: 38px; + line-height: 38px; } + .ls-box .header.dark { + background: #e6e6e6; + background: -webkit-linear-gradient(to bottom, #e6e6e6 0%, #cccccc 100%); + background: -moz-linear-gradient(to bottom, #e6e6e6 0%, #cccccc 100%); + background: -o-linear-gradient(to bottom, #e6e6e6 0%, #cccccc 100%); + background: -ms-linear-gradient(to bottom, #e6e6e6 0%, #cccccc 100%); + background: linear-gradient(to bottom, #e6e6e6 0%, #cccccc 100%); } + .ls-box .header.blue { + border-top: 0; + text-shadow: 1px 1px 1px #333; + background: #2a95c5; + background: -webkit-linear-gradient(to bottom, #2a95c5 0%, #21759b 100%); + background: -moz-linear-gradient(to bottom, #2a95c5 0%, #21759b 100%); + background: -o-linear-gradient(to bottom, #2a95c5 0%, #21759b 100%); + background: -ms-linear-gradient(to bottom, #2a95c5 0%, #21759b 100%); + background: linear-gradient(to bottom, #2a95c5 0%, #21759b 100%); } + .ls-box .header h2 { + margin: 0; + padding: 0; + float: left; + font-family: Arial; + font-weight: bold; + font-size: 12px; + line-height: inherit; + color: #333; + text-shadow: 0px 1px 0px #fff; + text-align: left; } + .ls-box .header p { + margin: 0; + float: left; } + .ls-box .footer { + position: relative; + padding: 8px 10px !important; + border-top: 1px solid #dedede; + background: #f3f3f3; } + .ls-box table, .ls-box tr { + width: 100%; } + +.ls-box .inner { + padding: 10px; } + +.ls-box .ls-box-toggle { + display: none; + width: 1em; + height: 38px; + float: right; + font-size: 30px; + line-height: 38px; + color: #999; + cursor: pointer; } + +.ls-box:hover .ls-ficon { + display: inline !important; } + +.ls-box.collapsed .ls-ficon { + display: inline; } +.ls-box.collapsed .header figure, .ls-box.collapsed .inner { + display: none; } + +.ls-box table { + width: 100%; + border-collapse: collapse; + border-spacing: 0px; } + .ls-box table thead td, .ls-box table .ls-box th { + border-bottom: 1px solid #dfdfdf; + background: #f7f7f7; + background: -webkit-linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); + background: -moz-linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); + background: -o-linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); + background: -ms-linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); + background: linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); } + .ls-box table tbody td, .ls-box table .ls-box tfoot td { + height: 30px; + padding: 4px; + border-top: 1px solid #fff; + border-bottom: 1px solid #e3e3e3; + font: normal normal normal 13px/16px Arial, serif; + background: white; + background: -webkit-linear-gradient(to bottom, white 0%, #fafafa 100%); + background: -moz-linear-gradient(to bottom, white 0%, #fafafa 100%); + background: -o-linear-gradient(to bottom, white 0%, #fafafa 100%); + background: -ms-linear-gradient(to bottom, white 0%, #fafafa 100%); + background: linear-gradient(to bottom, white 0%, #fafafa 100%); } + .ls-box table tbody:last-child tr:last-child td { + border-bottom: 0; } + .ls-box table tfoot td { + padding: 5px 10px; + border-bottom: 0px; } + +.ls-box .filters { + float: left; + border-left: 1px solid #dedede; + margin: 0 0 0 10px; + padding: 0 0 0 10px; } + .ls-box .filters span { + float: left; + margin-right: 10px; + color: #8c8c8c; } + .ls-box .filters ul { + margin: 0; + padding: 0; + float: left; + list-style-type: none; } + .ls-box .filters ul li { + display: inline-block; + margin: 0; + margin-right: 12px; + text-shadow: 0 1px 1px white; + color: #333; + cursor: pointer; } + .ls-box .filters ul li.active { + border: 1px solid #444; + padding: 0 8px; + border-radius: 8px; + -webkit-box-shadow: 0 1px 1px white; + -moz-box-shadow: 0 1px 1px white; + box-shadow: 0 1px 1px white; + color: white; + text-shadow: 0 1px #333; + line-height: 16px; + background: #4d4d4d; + background: -webkit-linear-gradient(to bottom, #4d4d4d 0%, #666666 100%); + background: -moz-linear-gradient(to bottom, #4d4d4d 0%, #666666 100%); + background: -o-linear-gradient(to bottom, #4d4d4d 0%, #666666 100%); + background: -ms-linear-gradient(to bottom, #4d4d4d 0%, #666666 100%); + background: linear-gradient(to bottom, #4d4d4d 0%, #666666 100%); } + +.ls-modal { + width: 980px; + height: 560px; + position: fixed; + top: 50%; + left: 50%; + margin: -280px 0px 0px -490px; + z-index: 2001; + box-shadow: 0px 0px 40px -13px #000; + background-color: white; } + +.ls-modal .header a { + display: inline-block; + width: 10px; + height: 10px; + position: absolute; + top: 8px; + right: 10px; + border: 1px solid #ad1714; + font: normal normal normal 10px/10px Arial, serif; + color: #FFF; + background-color: #db1b17; + border-radius: 6px; + text-align: center; + -webkit-box-shadow: inset 1px 1px 0px rgba(255, 255, 255, 0.2), 1px 1px 0px white; + -moz-box-shadow: inset 1px 1px 0px rgba(255, 255, 255, 0.2), 1px 1px 0px white; + box-shadow: inset 1px 1px 0px rgba(255, 255, 255, 0.2), 1px 1px 0px white; + cursor: pointer; } + .ls-modal .header a:hover { + background-color: #981210; } + +.ls-editor-slider { + width: 260px; + height: 2px; + display: inline-block; + position: relative; + top: -2px; + background: #aaa; + border-radius: 2px; } + +.ls-editor-slider .ui-slider-range { + height: 2px; + background: #666; } + +.ls-editor-slider .ui-slider-handle { + width: 10px; + height: 10px; + display: block; + position: absolute; + top: -5px; + background: white; + border: 1px solid #999; + border-radius: 6px; } + +.wp_themeSkin span.mce_layerslider_button { + background: url(../img/icon_16x16.png) 2px 2px no-repeat; } + +.ls-pointer { + width: 250px; + min-height: 100px; + position: absolute !important; + margin: 40px 0 0 0; + z-index: 2001; + background: rgba(255, 255, 255, 0.95); + box-shadow: 0px 0px 5px black; + opacity: 0; } + .ls-pointer:before { + content: ''; + display: block; + position: absolute; + top: -10px; + left: 50%; + z-index: -1; + width: 20px; + height: 20px; + margin-left: -10px; + border: 1px solid #dfdfdf; + background: #f7f7f7; + box-shadow: 0px 0px 5px black; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + .ls-pointer .header { + height: 28px; + margin: 0; + border-top: 0 !important; + font: normal normal bold 12px/28px Arial, serif; + text-align: center !important; } + +.ls-shortcode-pointer ul.inner, +.ls-font-search ul.inner { + max-height: 250px; + overflow: auto; + padding: 0 !important; + margin: 5px !important; } + .ls-shortcode-pointer ul.inner li, + .ls-font-search ul.inner li { + margin: 0; + padding: 5px; + border-radius: 3px; + font: normal normal normal 14px/20px "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", sans-serif; + cursor: pointer; } + .ls-shortcode-pointer ul.inner li:hover, + .ls-font-search ul.inner li:hover { + background: #2d92c7; + background: #2d92c7; + background: -webkit-linear-gradient(to bottom, #2d92c7 0%, #23739d 100%); + background: -moz-linear-gradient(to bottom, #2d92c7 0%, #23739d 100%); + background: -o-linear-gradient(to bottom, #2d92c7 0%, #23739d 100%); + background: -ms-linear-gradient(to bottom, #2d92c7 0%, #23739d 100%); + background: linear-gradient(to bottom, #2d92c7 0%, #23739d 100%); + color: white; } + .ls-shortcode-pointer ul.inner li.unselectable, + .ls-font-search ul.inner li.unselectable { + background: none; + color: black; + cursor: normal; } + .ls-shortcode-pointer ul.inner li div.preview, + .ls-font-search ul.inner li div.preview { + display: inline-block; + width: 20px; + height: 20px; + position: relative; + margin-right: 10px; + overflow: hidden; + border-radius: 3px; + float: left; } + .ls-shortcode-pointer ul.inner li div.preview img, + .ls-font-search ul.inner li div.preview img { + height: 20px; + position: absolute; + top: 0; + left: 50%; + margin-left: -10px; } + .ls-shortcode-pointer ul.inner li div.title, + .ls-font-search ul.inner li div.title { + display: inline-block; } diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/layerslider.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/layerslider.css new file mode 100644 index 0000000..88cf961 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/layerslider.css @@ -0,0 +1,869 @@ + +/* + * Style settings of LayerSlider + * + * (c) 2011-2013 George Krupa, John Gera & Kreatura Media + * + * Plugin web: http://kreaturamedia.com/ + * Licenses: http://codecanyon.net/licenses/ +*/ + + + +/* Global settings */ + +.ls-container { + visibility: hidden; + position: relative; +} + +.ls-lt-container { + position: absolute; +} + +.ls-lt-container, +.ls-lt-container * { + text-align: left !important; + direction: ltr !important; +} + +.ls-container-fullscreen { + margin: 0 auto !important; + padding: 2% !important; + background: black !important; + border-radius: 0 !important; + -moz-border-radius: 0 !important; + -webkit-border-radius: 0 !important; + border: none !important; +} + +.ls-container-fullscreen .ls-thumbnail-wrapper, +.ls-container-fullscreen .ls-fullscreen, +.ls-container-fullscreen .ls-shadow { + display: none !important; +} + +.ls-overflow-hidden { + overflow: hidden; +} + +.ls-inner { + position: relative; + background-position: center center; + z-index: 2; +} + +.ls-loading-container { + position: absolute !important; + display: none; + z-index: 3 !important; + left: 50% !important; + top: 50% !important; +} + +.ls-loading-indicator { + margin: 0 auto; +} + +.ls-inner, +.ls-slide { + width: 100%; + height: 100%; +} + +.ls-slide, +.ls-layer { + position: absolute; + display: none; + background-position: center center; + overflow: hidden; +} + +.ls-active, +.ls-animating { + display: block !important; +} + +.ls-slide > * { + position: absolute; + line-height: normal; + margin: 0; + left: 0; + top: 0; +} + +.ls-slide .ls-bg { + left: 0px; + top: 0px; + transform: none !important; + -o-transform: none !important; + -ms-transform: none !important; + -moz-transform: none !important; + -webkit-transform: none !important; +} + +.ls-yourlogo { + position: absolute; + z-index: 99; +} + + + +/* Timers */ + +.ls-bar-timer { + position: absolute; + width: 0; + height: 2px; + background: white; + border-bottom: 2px solid #555; + opacity: .55; + filter: alpha(opacity=55); + z-index: 4; + top: 0; +} + +.ls-circle-timer { + width: 16px; + height: 16px; + position: absolute; + right: 10px; + top: 10px; + z-index: 4; + opacity: .65; + filter: alpha(opacity=65); + display: none; +} + +.ls-ct-half { + background: white; +} + +.ls-ct-center { + background: #444; +} + +.ls-ct-left, +.ls-ct-right { + width: 50%; + height: 100%; + overflow: hidden; +} + +.ls-ct-left, +.ls-ct-right { + float: left; + position: relative; +} + +.ls-ct-rotate { + width: 200%; + height: 100%; + position: absolute; + top: 0; +} + +.ls-ct-left .ls-ct-rotate, +.ls-ct-right .ls-ct-hider, +.ls-ct-right .ls-ct-half { + left: 0; +} + +.ls-ct-right .ls-ct-rotate, +.ls-ct-left .ls-ct-hider, +.ls-ct-left .ls-ct-half { + right: 0; +} + +.ls-ct-hider, +.ls-ct-half { + position: absolute; + top: 0; +} + +.ls-ct-hider { + width: 50%; + height: 100%; + overflow: hidden; +} + +.ls-ct-half { + width: 200%; + height: 100%; +} + +.ls-ct-center { + width: 50%; + height: 50%; + left: 25%; + top: 25%; + position: absolute; +} + +.ls-ct-half, +.ls-ct-center { + border-radius: 100px; + -moz-border-radius: 100px; + -webkit-border-radius: 100px; +} + + + +/* Navigation */ + +.ls-bottom-nav-wrapper { + height: 0; +} + +.ls-bottom-slidebuttons { + text-align: left; +} + +.ls-bottom-nav-wrapper, +.ls-below-thumbnails { + z-index: 2; + height: 0; + position: relative; + text-align: center; + margin: 0 auto; +} + +.ls-below-thumbnails { + display: none; + z-index: 6; +} + +.ls-bottom-nav-wrapper a, +.ls-nav-prev, +.ls-nav-next { + outline: none; +} + +* .ls-bottom-nav-wrapper *, +* .ls-bottom-nav-wrapper span * { + direction: ltr !important; +} + +.ls-bottom-slidebuttons { + position: relative; + z-index: 1000; +} + +.ls-bottom-slidebuttons, +.ls-nav-start, +.ls-nav-stop, +.ls-nav-sides { + position: relative; +} + +.ls-nothumb { + text-align: center !important; +} + +.ls-link { + position: absolute; + width: 100% !important; + height: 100% !important; + left: 0 !important; + top: 0 !important; + background-image: url(blank.gif); +} + +.ls-slide > a > * { + background-image: url(blank.gif); +} + + + +/* Embedded videos */ + +.ls-vpcontainer { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; +} + +.ls-videopreview { + width : 100%; + height : 100%; + position : absolute; + left : 0; + top : 0; + cursor : pointer; +} + +.ls-playvideo { + position: absolute; + left: 50%; + top: 50%; + cursor: pointer; +} + + + +/* Thumbnails */ + +.ls-tn { + display: none !important; +} + +.ls-thumbnail-hover { + display: none; + position: absolute; + left: 0; +} + +.ls-thumbnail-hover-inner { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; + display: none; +} + +.ls-thumbnail-hover-bg { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; +} + +.ls-thumbnail-hover-img { + position: absolute; + overflow: hidden; +} + +.ls-thumbnail-hover img { + max-width: none !important; + position: absolute; + display: inline-block; + visibility: visible !important; + left: 50%; + top: 0; +} + +.ls-thumbnail-hover span { + left: 50%; + top: 100%; + width: 0; + height: 0; + display: block; + position: absolute; + border-left-color: transparent !important; + border-right-color: transparent !important; + border-bottom-color: transparent !important; +} + +.ls-thumbnail-wrapper { + position: relative; + width: 100%; + margin: 0 auto; + z-index: 4; +} + +.ls-thumbnail { + position: relative; + margin: 0 auto; +} + +.ls-thumbnail-inner, +.ls-thumbnail-slide-container { + width: 100%; +} + +.ls-thumbnail-slide-container { + overflow: hidden !important; + position: relative; +} + +.ls-touchscroll { + overflow-x: auto !important; +} + +.ls-thumbnail-slide { + text-align: center; + white-space: nowrap; + float: left; + position: relative; +} + +.ls-thumbnail-slide a { + overflow: hidden; + display: inline-block; + width: 0; + height: 0; + position: relative; +} + +.ls-thumbnail-slide img { + max-width: none !important; + max-height: 100% !important; + height: 100%; + visibility: visible !important; +} + +.ls-shadow { + display: none; + position: absolute; + z-index: 1; + top: 100%; + width: 100%; + left: 0; + overflow: hidden !important; + visibility: hidden; +} + +.ls-shadow img { + width: 100% !important; + height: auto !important; + position: absolute !important; + left: 0 !important; + bottom: 0 !important; +} + +.ls-bottom-nav-wrapper, +.ls-thumbnail-wrapper, +.ls-nav-prev, +.ls-nav-next { + visibility: hidden; +} + + + +/* WP plugin fullwidth */ + +.ls-wp-fullwidth-container { + width: 100%; + position: relative; +} + +.ls-wp-fullwidth-helper { + position: absolute; +} + + + +/* 2D & 3D Layer Transitions */ + +.ls-overflow-hidden { + overflow: hidden; +} + +.ls-lt-tile { + position: relative; + float: left; + perspective: 1000px; + -o-perspective: 1000px; + -ms-perspective: 1000px; + -moz-perspective: 1000px; + -webkit-perspective: 1000px; +} + +.ls-lt-tile img { + visibility: visible; + display: inline-block; +} + +.ls-curtiles { + overflow: hidden; +} + +.ls-curtiles, +.ls-nexttiles { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; +} + +.ls-curtile, .ls-nexttile { + overflow: hidden; + position: absolute; + width: 100% !important; + height: 100% !important; + backface-visibility: hidden; + -o-backface-visibility: hidden; + -ms-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -webkit-backface-visibility: hidden; +} + +.ls-curtile { + left: 0; + top: 0; +} + +.ls-curtile img, +.ls-nexttile img { + position: absolute; + filter: inherit; +} + +.ls-3d-container { + position: relative; + overflow: visible !important; +} + +.ls-3d-box { + position: absolute; + top: 50%; + left: 50%; + transform-style: preserve-3d; + -o-transform-style: preserve-3d; + -ms-transform-style: preserve-3d; + -moz-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; +} + +.ls-3d-box div { + overflow: hidden; + background: #777; + margin: 0; + padding: 0; + position: absolute; +} + + + +/* Full screen */ + +.ls-fullscreen { + position: absolute; + z-index: 10; + cursor: pointer; + display: block; +} + + + +/* Removing all default global styles of WordPress themes */ + +html * .ls-nav-prev, +html * .ls-nav-next, +html * .ls-container img, +html * .ls-bottom-nav-wrapper a, +html * .ls-container .ls-fullscreen, +body * .ls-nav-prev, +body * .ls-nav-next, +body * .ls-container img, +body * .ls-bottom-nav-wrapper a, +body * .ls-container .ls-fullscreen, +#ls-global * .ls-nav-prev, +#ls-global * .ls-nav-next, +#ls-global * .ls-container img, +#ls-global * .ls-bottom-nav-wrapper a, +#ls-global * .ls-container .ls-fullscreen, +html * .ls-thumbnail a, +body * .ls-thumbnail a, +#ls-global * .ls-thumbnail a { + transition: none; + -o-transition: none; + -ms-transition: none; + -moz-transition: none; + -webkit-transition: none; + line-height: normal; + outline: none; + padding: 0; + border: 0; +} + +html * .ls-slide > a, +body * .ls-slide > a, +#ls-global * .ls-slide > a, +html * .ls-slide > h1, +body * .ls-slide > h1, +#ls-global * .ls-slide > h1, +html * .ls-slide > h2, +body * .ls-slide > h2, +#ls-global * .ls-slide > h2, +html * .ls-slide > h3, +body * .ls-slide > h3, +#ls-global * .ls-slide > h3, +html * .ls-slide > h4, +body * .ls-slide > h4, +#ls-global * .ls-slide > h4, +html * .ls-slide > h5, +body * .ls-slide > h5, +#ls-global * .ls-slide > h5, +html * .ls-slide > p, +body * .ls-slide > p, +#ls-global * .ls-slide > p, +html * .ls-slide > div, +body * .ls-slide > div, +#ls-global * .ls-slide > div, +html * .ls-slide > span, +body * .ls-slide > span, +#ls-global * .ls-slide > span, +html * .ls-slide > *, +body * .ls-slide > *, +#ls-global * .ls-slide > * { + transition: none; + -o-transition: none; + -ms-transition: none; + -moz-transition: none; + -webkit-transition: none; +} + +html * .ls-slide > *, +body * .ls-slide > *, +#ls-global * .ls-slide > * { + margin: 0; +} + +html * .ls-container img, +body * .ls-container img, +#ls-global * .ls-container img { + background: none !important; + min-width: 0 !important; + max-width: none !important; + border-radius: 0; + box-shadow: none; + border: 0; + padding: 0; +} + +/*html * .ls-thumbnail a img, +body * .ls-thumbnail a img, +#ls-global * .ls-thumbnail a img { + min-width: 100% !important; +} +*/ + +html * .ls-wp-container .ls-slide > *, +body * .ls-wp-container .ls-slide > *, +#ls-global * .ls-wp-container .ls-slide > * { + line-height: normal; + outline: none; + padding: 0; + margin: 0; + border: 0; +} + +html * .ls-wp-container .ls-slide > a > *, +body * .ls-wp-container .ls-slide > a > *, +#ls-global * .ls-wp-container .ls-slide > a > * { + margin: 0; +} + +html * .ls-wp-container .ls-slide > a, +body * .ls-wp-container .ls-slide > a, +#ls-global * .ls-wp-container .ls-slide > a { + text-decoration: none; +} + +.ls-wp-fullwidth-container, +.ls-wp-fullwidth-helper, +.ls-container, +.ls-container * { + box-sizing: content-box !important; + -moz-box-sizing: content-box !important; + -webkit-box-sizing: content-box !important; +} + +html * .ls-yourlogo, +body * .ls-yourlogo, +#ls-global * .ls-yourlogo { + margin: 0; +} + +html * .ls-tn, +body * .ls-tn, +#ls-global * .ls-tn { + display: none; +} + +.site { + overflow: visible !important; +} + + + +/* Style of LayerSlider Debug Console */ + +.ls-debug-console * { + margin: 0 !important; + padding: 0 !important; + border: 0 !important; + color: white !important; + text-shadow: none !important; + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", Helvetica, Arial, sans-serif !important; + line-height: normal !important; + -webkit-font-smoothing: antialiased !important; + text-align: left !important; + font-style: normal !important; +} + +.ls-debug-console h1 { + padding-top: 10px !important; + font-size: 17px !important; + font-weight: bold !important; +} + +.ls-debug-console h1:first-child { + padding-top: 0 !important; +} + +.ls-debug-console ul { + padding-top: 10px !important; + list-style: none !important; +} + +.ls-debug-console li { + margin-left: 10px !important; + font-size: 13px !important; + position: relative !important; + font-weight: normal !important; +} + +html * .ls-debug-console li ul, +body * .ls-debug-console li ul, +#ls-global * .ls-debug-console li ul { + display: none; + width: 260px; + left: -10px; +} + +.ls-debug-console li ul { + position: absolute !important; + bottom: 100% !important; + padding: 10px 10px 10px 0 !important; + background: white !important; + border-radius: 10px !important; + box-shadow: 0 0 20px black !important; +} + +html * .ls-debug-console li:hover ul, +body * .ls-debug-console li:hover ul, +#ls-global * .ls-debug-console li:hover ul { + display: block; +} + +.ls-debug-console li ul * { + color: black !important; +} + +.ls-debug-console a { + text-decoration: none !important; + border-bottom: 1px dotted white !important; +} + +.ls-error { + border-radius: 5px !important; + -moz-border-radius: 5px !important; + -wenkit-border-radius: 5px !important; + background: white !important; + height: auto !important; + width: auto !important; + color: white !important; + padding: 20px 40px 30px 80px !important; + position: relative !important; + box-shadow: 0 2px 20px -5px black; +} + +.ls-error p { + line-height: normal !important; + text-shadow: none !important; + margin: 0 !important; + padding: 0 !important; + border: 0 !important; + text-align: justify !important; + font-family: Arial, sans-serif !important; +} + +.ls-error .ls-error-title { + line-height: 40px !important; + color: red !important; + font-weight: bold !important; + font-size: 16px !important; +} + +.ls-error .ls-error-text { + color: #555 !important; + font-weight: normal !important; + font-size: 13px !important; +} + +.ls-error .ls-exclam { + width: 40px !important; + height: 40px !important; + position: absolute !important; + left: 20px !important; + top: 20px !important; + border-radius: 50px !important; + -moz-border-radius: 50px !important; + -webkit-border-radius: 50px !important; + font-size: 30px !important; + font-weight: bold !important; + color: white !important; + line-height: 40px !important; + background: red !important; + text-align: center !important; +} + + + +/* GPU Hardware Acceleration */ + +html * .ls-container .ls-shadow, +html * .ls-container .ls-slide > *, +html * .ls-container .ls-fullscreen, +html * .ls-container .ls-3d-container, +html * .ls-container .ls-lt-container, +html * .ls-container .ls-lt-container *, +html * .ls-container .ls-thumbnail-wrapper, +html * .ls-container .ls-bottom-nav-wrapper, +body * .ls-container .ls-shadow, +body * .ls-container .ls-slide > *, +body * .ls-container .ls-fullscreen, +body * .ls-container .ls-3d-container, +body * .ls-container .ls-lt-container, +body * .ls-container .ls-lt-container *, +body * .ls-container .ls-thumbnail-wrapper, +body * .ls-container .ls-bottom-nav-wrapper, +#ls-global * .ls-container .ls-shadow, +#ls-global * .ls-container .ls-slide > *, +#ls-global * .ls-container .ls-fullscreen, +#ls-global * .ls-container .ls-3d-container, +#ls-global * .ls-container .ls-lt-container, +#ls-global * .ls-container .ls-lt-container *, +#ls-global * .ls-container .ls-thumbnail-wrapper, +#ls-global * .ls-container .ls-bottom-nav-wrapper, +.ls-gpuhack { + transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -webkit-transform: translate3d(0, 0, 0); +} + +.ls-gpuhack { + width: 100% !important; + height: 100% !important; +} + + +html * .ls-container .ls-webkit-hack, +body * .ls-container .ls-webkit-hack, +#ls-global * .ls-container .ls-webkit-hack { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; + z-index: 1; +} + +/* GPU */ + +@media (transform-3d), (-o-transform-3d), (-ms-transform-3d), (-moz-transform-3d), (-webkit-transform-3d) { + #ls-test3d { + position: absolute; + left: 9px; + height: 3px; + } +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/layerslider.transitiongallery.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/layerslider.transitiongallery.css new file mode 100644 index 0000000..5170132 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/layerslider.transitiongallery.css @@ -0,0 +1,98 @@ +/* LayerSlider Transition Gallery Styles */ + + + +.ls-transition-preview { + width: 300px !important; + height: 150px !important; + position: relative; +} + +.ls-transition-preview .ls-overflow-hidden { + overflow: hidden; +} + +.ls-transition-preview .ls-lt-tile { + position: relative; + overflow: hidden; + float: left; +} + +.ls-transition-preview .ls-curtile, +.ls-transition-preview .ls-nexttile { + position: absolute; + width: 100% !important; + height: 100% !important; + overflow: hidden; + bottom: auto !important; + right: auto !important; +} + +.ls-transition-preview .ls-curtile { + left: 0px; + top: 0px; +} + +.ls-transition-preview .ls-curtile img, +.ls-transition-preview .ls-nexttile img { + position: absolute; + left: 0px; + top: 0px; + filter: inherit; +} + +.ls-transition-preview .ls-3d-container { + position: relative; + perspective: 500px !important; + -o-perspective: 500px !important; + -ms-perspective: 500px !important; + -moz-perspective: 500px !important; + -webkit-perspective: 500px !important; + overflow: visible !important; +} + +.ls-transition-preview .ls-3d-box { + position: absolute; + top: 50%; + left: 50%; + transform-style: preserve-3d; + -o-transform-style: preserve-3d; + -ms-transform-style: preserve-3d; + -moz-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; +} + +.ls-transition-preview .ls-3d-box div { + overflow: hidden; + background: #777; + margin: 0px; + padding: 0px; + position: absolute; + transform-style: preserve-3d; + -o-transform-style: preserve-3d; + -ms-transform-style: preserve-3d; + -moz-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; +} + + +/* GPU Hardware Acceleration under WebKit */ + +.ls-transition-preview, +.ls-transition-preview * { + transform: translateZ(0px); + -o-transform: translateZ(0px); + -ms-transform: translateZ(0px); + -moz-transform: translateZ(0px); + -webkit-transform: translateZ(0px); +} + +/* GPU */ + +@media (transform-3d), (-o-transform-3d), (-ms-transform-3d), (-moz-transform-3d), (-webkit-transform-3d) { + #ls-test3d { + position: absolute; + left: 9px; + height: 3px; + } +} \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/skin.editor.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/skin.editor.css new file mode 100644 index 0000000..b3471ad --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/skin.editor.css @@ -0,0 +1,41 @@ +.ls-skin-editor-box { + margin-top: 10px; } + .ls-skin-editor-box p { + margin: 0px; + margin-right: -5px; + font-weight: normal; } + .ls-skin-editor-box textarea { + min-width: 100%; + width: 100%; + max-width: 100%; + height: 500px; } + .ls-skin-editor-box .inner p { + margin: 5px 0px; } + .ls-skin-editor-box p.inner { + padding: 5px 10px; + margin: 0; + background-color: #F3F3F3; + background-image: url(../img/cm-noise.png); + border-bottom: 1px solid #ddd; + color: #555; } + +.ls-skin-editor-box .header { + border-bottom: 1px solid #ddd; } + .ls-skin-editor-box .header figure { + display: inline; + margin: 0; + color: #999; + font-weight: normal; } + .ls-skin-editor-box .header figure span { + margin: 0 5px; } + .ls-skin-editor-box .header p { + float: right; + margin-top: 5px; } +.ls-skin-editor-box .inner { + padding: 0; } + .ls-skin-editor-box .inner p { + margin: 0; + padding: 10px; + border-top: 1px solid #dedede; } + .ls-skin-editor-box .inner p button { + margin-right: 10px; } diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/sliders_list.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/sliders_list.css new file mode 100644 index 0000000..8d356d0 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/css/sliders_list.css @@ -0,0 +1,3 @@ +#ls-list-page .ls-box { + margin-bottom: 30px; +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/fonts/dashicons.eot b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/fonts/dashicons.eot new file mode 100644 index 0000000..ef8dfaf Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/fonts/dashicons.eot differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/fonts/dashicons.svg b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/fonts/dashicons.svg new file mode 100644 index 0000000..5a372f0 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/fonts/dashicons.svg @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/fonts/dashicons.ttf b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/fonts/dashicons.ttf new file mode 100644 index 0000000..58ac356 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/fonts/dashicons.ttf differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/fonts/dashicons.woff b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/fonts/dashicons.woff new file mode 100644 index 0000000..8f2ebb8 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/fonts/dashicons.woff differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/blank.gif b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/blank.gif new file mode 100644 index 0000000..5a8c950 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/blank.gif differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/builder.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/builder.png new file mode 100644 index 0000000..85564fb Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/builder.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/cm-noise.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/cm-noise.png new file mode 100644 index 0000000..5bffb9c Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/cm-noise.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/cm-tab.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/cm-tab.png new file mode 100644 index 0000000..76904cf Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/cm-tab.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/icon_16x16.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/icon_16x16.png new file mode 100644 index 0000000..8361b96 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/icon_16x16.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/layers.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/layers.png new file mode 100644 index 0000000..6b9f3e5 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/layers.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/ls_80x80.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/ls_80x80.png new file mode 100644 index 0000000..f1e1586 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/ls_80x80.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/nocss3d.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/nocss3d.png new file mode 100644 index 0000000..3d37125 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/nocss3d.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/not_set.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/not_set.png new file mode 100644 index 0000000..8615b0a Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/not_set.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/sample_slide_1.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/sample_slide_1.png new file mode 100644 index 0000000..49b56f7 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/sample_slide_1.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/sample_slide_2.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/sample_slide_2.png new file mode 100644 index 0000000..297eaba Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/sample_slide_2.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/slider_preview.jpg b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/slider_preview.jpg new file mode 100644 index 0000000..c08e208 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/slider_preview.jpg differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/sprite.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/sprite.png new file mode 100644 index 0000000..16c6702 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/sprite.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/tag.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/tag.png new file mode 100644 index 0000000..a808953 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/img/tag.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/admin.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/admin.js new file mode 100644 index 0000000..d8a2f63 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/admin.js @@ -0,0 +1,2909 @@ +if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { + "use strict"; + if (this === null) { + throw new TypeError(); + } + var t = Object(this); + var len = t.length >>> 0; + if (len === 0) { + return -1; + } + var n = 0; + if (arguments.length > 1) { + n = Number(arguments[1]); + if (n != n) { // shortcut for verifying if it's NaN + n = 0; + } else if (n != 0 && n != Infinity && n != -Infinity) { + n = (n > 0 || -1) * Math.floor(Math.abs(n)); + } + } + if (n >= len) { + return -1; + } + var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); + for (; k < len; k++) { + if (k in t && t[k] === searchElement) { + return k; + } + } + return -1; + }; +} + + +function isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); +} + +function ucFirst(string) { + return string.charAt(0).toUpperCase() + string.slice(1); +} + + +(function( $ ) { + + $.fn.customCheckbox = function() { + return this.each(function() { + + // Get element & hide it + var $el = $(this).hide(); + + // Create replacement element + var $rep = $('
              ').addClass('ls-checkbox').insertAfter(this); + + // Check help attr + if($el.attr('data-help') !== "undefined") { + $rep.attr('data-help', $el.attr('data-help')); + } + + // Set default state + if($el.prop('checked')) { + $rep.addClass('on'); + } else { + $rep.addClass('off'); + } + }); + }; +})( jQuery ); + + +var lsScreenOptionsActions = { + + init : function() { + + // Form submit + jQuery(document).on('submit', '#ls-screen-options-form', function(e) { + e.preventDefault(); lsScreenOptionsActions.saveSettings(this, true); + }); + + // Checkboxes + jQuery(document).on('click', '#ls-screen-options-form input:checkbox', function() { + var reload = false; + if(typeof lsScreenOptionsActions[ jQuery(this).attr('name')] != "undefined") { + lsScreenOptionsActions[ jQuery(this).attr('name')](this); } + + if(jQuery(this).hasClass('reload')) { reload = true; } + + lsScreenOptionsActions.saveSettings( jQuery(this).closest('form'), reload ); + }); + }, + + saveSettings : function(form, reload) { + + var options = {}; + jQuery(form).find('input').each(function() { + if( jQuery(this).is(':checkbox')) { + options[jQuery(this).attr('name')] = jQuery(this).prop('checked'); + } else { + options[jQuery(this).attr('name')] = jQuery(this).val(); + } + }); + + // Save settings + jQuery.post(ajaxurl, jQuery.param({ action : 'ls_save_screen_options', options : options }), function() { + if(typeof reload != "undefined" && reload === true) { + document.location.href = 'admin.php?page=layerslider'; + } + }); + }, + + showTooltips : function(el) { + + if( jQuery(el).prop('checked') === true ) { + lsTooltip.init(); + } else { + lsTooltip.destroy(); + } + } +}; + +var LS_BoxToggles = { + + init : function() { + jQuery('.ls-box-toggle').click(function() { + + // Get parent + var parent = jQuery(this).closest('.ls-box'); + var button = jQuery(this); + + // Check state + if(parent.hasClass('collapsed')) { + parent.removeClass('collapsed'); + button.removeClass('dashicons-arrow-right').addClass('dashicons-arrow-down'); + jQuery.post(ajaxurl, { + action : 'ls_update_box_toggles', + key : button.attr('id'), + collapsed : false + }); + } else { + parent.addClass('collapsed'); + button.removeClass('dashicons-arrow-down').addClass('dashicons-arrow-right'); + jQuery.post(ajaxurl, { + action : 'ls_update_box_toggles', + key : button.attr('id'), + collapsed : true + }); + } + }); + } +}; + + +var lsTooltip = { + timeout : 0, + + init : function() { + + jQuery(document).on('mouseover', '[data-help]', function() { + var el = this; + lsTooltip.timeout = setTimeout(function() { + lsTooltip.open(el); + }, 500); + }); + + jQuery(document).on('mouseout', '[data-help]', function() { + clearTimeout(lsTooltip.timeout); + lsTooltip.close(); + }); + }, + + destroy : function() { + + jQuery(document).off('mouseover', '[data-help]'); + jQuery(document).off('mouseout', '[data-help]'); + }, + + open : function(el) { + + // Create tooltip + jQuery('body').prepend( jQuery('
              ', { 'class' : 'ls-tooltip' }) + .append( jQuery('
              ', { 'class' : 'inner' })) + .append( jQuery('') ) + ); + + // Get tooltip + var tooltip = jQuery('.ls-tooltip'); + + // Set tooltip text + tooltip.find('.inner').text( jQuery(el).attr('data-help')); + + // Get viewport dimensions + var v_w = jQuery(window).width(); + + // Get element dimensions + var e_w = jQuery(el).width(); + + // Get element position + var e_l = jQuery(el).offset().left; + var e_t = jQuery(el).offset().top; + + // Get toolip dimensions + var t_w = tooltip.outerWidth(); + var t_h = tooltip.outerHeight(); + + // Position tooltip + tooltip.css({ top : e_t - t_h - 10, left : e_l - (t_w - e_w) / 2 }); + // Fix right position + if(tooltip.offset().left + t_w > v_w) { + tooltip.css({ 'left' : 'auto', 'right' : 10 }); + tooltip.find('span').css({ left : 'auto', right : v_w - jQuery(el).offset().left - jQuery(el).outerWidth() / 2 - 17, marginLeft : 'auto' }); + } + + }, + + close : function() { + jQuery('.ls-tooltip').remove(); + } +}; + +var LayerSlider = { + + uploadInput : null, + dragIndex : 0, + newIndex : 0, + timeout : 0, + counter : 0, + + selectMainTab : function(el) { + + // Remove highlight from the other tabs + jQuery('#ls-main-nav-bar a').removeClass('active'); + + // Highlight selected tab + jQuery(el).addClass('active'); + + // Hide other pages + jQuery('#ls-pages .ls-page').removeClass('active'); + + // Show selected page + jQuery('#ls-pages .ls-page').eq( jQuery(el).index() ).addClass('active'); + + // Init CodeMirror + if(jQuery(el).hasClass('callbacks')) { + if(jQuery('.CodeMirror-code').length === 0) { + LS_CodeMirror.init({ mode: 'javascript', autofocus : false }); + jQuery(window).scrollTop(0); + } + } + }, + + + selectSettingsTab : function(li) { + var index = jQuery(li).index(); + jQuery(li).siblings().removeClass('active'); + jQuery(li).addClass('active'); + jQuery('div.ls-settings-contents tbody.active').removeClass('active'); + jQuery('div.ls-settings-contents tbody').eq(index).addClass('active'); + }, + + addLayer : function() { + + // Clone the sample layer page + var clone = jQuery('#ls-sample > div').clone(); + + // Append to place + clone.appendTo('#ls-layers'); + + // Close other layers + jQuery('#ls-layer-tabs a').removeClass('active'); + + // Get layer index + var index = clone.index(); + + // Add layer tab + var tab = jQuery('Slide #'+(index+1)+'x').insertBefore('#ls-add-layer'); + + // Open new layer + tab.click(); + + // Add sortables + LayerSlider.addSortables(); + + // Generate preview + LayerSlider.generatePreview(index); + LayerSlider.addPreviewSlider( jQuery('.ls-editor-slider', clone) ); + LayerSlider.addColorPicker( clone.find('.ls-colorpicker') ); + }, + + removeLayer : function(el) { + + if(confirm('Are you sure you want to remove this slide?')) { + + // Get menu item + var item = jQuery(el).parent(); + + // Get layer + var layer = jQuery(el).closest('#ls-layer-tabs').next().children().eq( item.index() ); + + // Open next or prev layer + if(layer.next().length > 0) { + item.next().click(); + + } else if(layer.prev().length > 0) { + item.prev().click(); + } + + // Remove menu item + item.remove(); + + // Remove the layer + layer.remove(); + + // Reindex layers + LayerSlider.reindexLayers(); + } + }, + + selectLayer : function(el) { + + // Close other layers + jQuery('#ls-layer-tabs a').removeClass('active'); + jQuery('#ls-layers .ls-layer-box').removeClass('active'); + + // Open new layer + jQuery(el).addClass('active'); + jQuery('#ls-layers .ls-layer-box').eq( jQuery(el).index() ).addClass('active'); + + // Open first sublayer +// jQuery('#ls-layers .ls-layer-box').eq( jQuery(el).index() ).find('.ls-sublayers td:first').click(); + + // Update preview + LayerSlider.generatePreview( jQuery(el).index() ); + + // Stop preview + LayerSlider.stop(); + + // Hide Timeline + lsTimeLine.hide( jQuery('.ls-tl') ); + }, + + duplicateLayer : function(el) { + + // Clone fix + LayerSlider.cloneFix(); + + // Get layer index + var index = jQuery(el).closest('.ls-layer-box').index(); + + // Append new tab + jQuery('Slide #0x').insertBefore('#ls-layer-tabs a:last'); + + // Rename tab + LayerSlider.reindexLayers(); + + // Clone layer + var clone = jQuery(el).closest('.ls-layer-box').clone(); + + // Append new layer + clone.appendTo('#ls-layers'); + + // Remove active class if any + clone.removeClass('active'); + + // Add sortables + LayerSlider.addSortables(); + + // Color picker + jQuery('.ls-editor-slider', clone).empty().next().text('100%'); + LayerSlider.addPreviewSlider( jQuery('.ls-editor-slider', clone) ); + clone.find('.ls-colorpicker').minicolors('destroy'); + LayerSlider.addColorPicker( clone.find('.ls-colorpicker') ); + }, + + addPreviewSlider : function(target) { + + jQuery(target).slider({ + value: 1, + min: 0.3, + max: 2, + step: 0.1, + range: 'min', + orientation: "horizontal", + slide : function(event, ui) { + + // Set value + jQuery(ui.handle).parent().next().text(''+parseInt(ui.value*100)+'%'); + + // Get vars + var $slide = jQuery(ui.handle).closest('.ls-layer-box'); + var $preview = $slide.find('.ls-preview-wrapper').css('zoom', ui.value); + } + }); + }, + + addSublayer : function(el) { + + // Get clone from sample + var clone = jQuery('#ls-sample .ls-sublayers > tr').clone(); + + // Appent to place + clone.appendTo( jQuery(el).prev().find('.ls-sublayers') ); + + // Get sublayer index + var index = clone.index(); + + // Rewrite sublayer number + clone.find('.ls-sublayer-number').html( index + 1); + clone.find('.ls-sublayer-title').val('Layer #' + (index + 1) ); + + // Open it + clone.click(); + LayerSlider.addColorPicker( clone.find('.ls-colorpicker') ); + }, + + selectSubLayer : function(el) { + + if(jQuery(el).index() == jQuery(el).parent().children('.active:first').index() ) { + return; + } + + // Close other sublayers + jQuery(el).parent().children().removeClass('active'); + + // Open the new one + jQuery(el).addClass('active'); + + // Hide Timeline + lsTimeLine.hide( jQuery(el).closest('table').find('.ls-tl') ); + }, + + selectSublayerPage : function(el) { + + // Close previous page + jQuery(el).parent().children().removeClass('active'); + jQuery(el).parent().next().find('.ls-sublayer-page').removeClass('active'); + + // Open the selected one + jQuery(el).addClass('active'); + jQuery(el).parent().next().find('.ls-sublayer-page').eq( jQuery(el).index() ).addClass('active'); + }, + + removeSublayer : function(el) { + + if(!confirm('Are you sure you want to remove this layer?')) { + return; + } + + // Get sublayer + var sublayer = jQuery(el).closest('tr'); + + // Get layer index + var layer = jQuery(el).closest('.ls-layer-box'); + + // Open the next or prev sublayer + if(sublayer.next().length > 0) { + sublayer.next().click(); + + } else if(sublayer.prev().length > 0) { + sublayer.prev().click(); + } + + // Remove menu item + jQuery(el).remove(); + + // Remove sublayer + sublayer.remove(); + + // Update preview + LayerSlider.generatePreview( layer.index() ); + }, + + highlightSublayer : function(el) { + + if(!jQuery(el).hasClass('active')) { + + // Deselect other checkboxes + jQuery('.ls-highlight').removeClass('active'); + jQuery(el).addClass('active'); + + // Restore sublayers in the preview + jQuery(el).closest('.ls-layer-box').find('.draggable').children().css({ opacity : 0.5 }); + + // Get element index + var index = jQuery(el).closest('tr').index(); + + // Highlight selected one + jQuery(el).closest('.ls-layer-box').find('.draggable').children().eq(index).css({ zIndex : 1000, opacity : 1 }); + + } else { + + // Restore sublayers in the preview + jQuery(el).removeClass('active'); + jQuery(el).closest('.ls-layer-box').find('.draggable').children().each(function(index) { + jQuery(this).css({ zIndex : 10 + index }); + jQuery(this).css('opacity', 1); + }); + } + }, + + eyeSublayer : function(el) { + + if(jQuery(el).hasClass('active')) { + jQuery(el).removeClass('active'); + } else { + jQuery(el).addClass('active'); + } + + // Update preview + LayerSlider.generatePreview( jQuery('.ls-box.active').index() ); + }, + + lockSublayer : function(el) { + + if(jQuery(el).hasClass('active')) { + jQuery(el).removeClass('active'); + } else { + jQuery(el).addClass('active'); + } + + // Update preview + LayerSlider.generatePreview( jQuery('.ls-box.active').index() ); + }, + + addColorPicker : function(el) { + jQuery(el).minicolors({ + opacity: true, + changeDelay : 100, + position: 'bottom right', + change : function(hex, opacity) { + LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() ); + } + }); + }, + + duplicateSublayer : function(el) { + + // Clone fix + LayerSlider.cloneFix(); + + // Clone sublayer + var clone = jQuery(el).closest('.ls-sublayer-wrapper').closest('tr').clone(); + + // Remove active class + clone.removeClass('active'); + + // Append + clone.appendTo( jQuery(el).closest('.ls-sublayers') ); + + // Rename sublayer + clone.find('.ls-sublayer-title').val( clone.find('.ls-sublayer-title').val() + ' copy' ); + LayerSlider.reindexSublayers(); + + // Update preview + LayerSlider.generatePreview( jQuery(el).closest('.ls-layer-box').index() ); + + // Color picker + clone.find('.ls-colorpicker').minicolors('destroy'); + LayerSlider.addColorPicker( clone.find('.ls-colorpicker') ); + }, + + skipSublayer : function(el) { + + LayerSlider.generatePreview( jQuery(el).closest('.ls-layer-box').index() ); + }, + + selectMediaType : function(el) { + + // Layer and sections + var layer = jQuery(el).closest('.ls-sublayer-page'); + var section = jQuery(el).data('section'); + var sections = jQuery('.ls-layer-sections', layer).children(); + + // Set active class + jQuery(el).siblings().removeAttr('class'); + jQuery(el).attr('class', 'active'); + + // Store selection + jQuery('input[name="media"]', layer).val(section); + + // Show the corresponding sections + sections.hide().removeClass('ls-hidden'); + jQuery('.ls-sublayer-element', layer).hide().removeClass('ls-hidden'); + jQuery('.ls-html-code p', layer).hide().removeClass('ls-hidden'); + switch(section) { + case 'img': sections.eq(0).show(); break; + case 'text': + sections.eq(1).show(); + layer.find('.ls-sublayer-element').show(); + break; + case 'html': + sections.eq(1).show(); + jQuery('.ls-html-code p', layer).show(); + break; + case 'post': + sections.eq(1).show(); + sections.eq(2).show(); + + if(jQuery(el).closest('.ls-layer-box').find('.ls-post-json').val() !== '') { + jQuery('.ls-posts-configured', layer).show().next().hide(); + } else { + jQuery('.ls-posts-configured', layer).hide().next().show(); + } + break; + } + + LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() ); + }, + + selectElementType : function(el) { + + // Layer and properties + var layer = jQuery(el).closest('.ls-sublayer-page'); + var element = jQuery(el).data('element'); + + // Set active class + jQuery(el).siblings().removeClass('active'); + jQuery(el).addClass('active'); + + // Store selection + jQuery('input[name="type"]', layer).val(element); + LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() ); + }, + + + willGeneratePreview : function(index) { + clearTimeout(LayerSlider.timeout); + LayerSlider.timeout = setTimeout(function() { + + if(index == -1) { + jQuery('#ls-layers .ls-layer-box').each(function( index ) { + LayerSlider.generatePreview(index); + }); + } else { + LayerSlider.generatePreview(index); + } + }, 1000); + }, + + generatePreview : function(index) { + + // Get main elements + var preview = jQuery('.ls-preview').eq( index + 1 ); + var draggable = preview.find('.draggable'); + var $settings = jQuery('.ls-settings'); + + // Get sizes + var width = jQuery('input[name="width"]', $settings).val(); + var height = jQuery('input[name="height"]', $settings).val(); + height = (height.indexOf('%') != -1) ? 400 : height; + var sub_container = jQuery('input[name="sublayercontainer"]', $settings).val(); + + // Which width? + if(sub_container != '' && sub_container != 0) { + width = sub_container; + } + + // Set sizes + preview.add(draggable).css({ width : width, height : height }); + preview.parent().css({ width : width }); + + // Get backgrounds + var bgColor = jQuery('input[name="backgroundcolor"]', $settings).val(); + bgColor = (bgColor !== '') ? bgColor : 'transparent'; + + var bgImage = jQuery('input[name="backgroundimage"]', $settings).val(); + bgImage = (bgImage !== '') ? 'url('+bgImage+')' : 'none'; + + // Set backgrounds + preview.css({ backgroundColor : bgColor }); + preview.css({ backgroundImage : bgImage }); + + + // Get yourLogo + var yourLogo = jQuery('input[name="yourlogo"]', $settings).val(); + var yourLogoStyle = jQuery('input[name="yourlogostyle"]', $settings).val(); + + // Remove previous yourLogo + preview.parent().find('.yourlogo').remove(); + + // Set yourLogo + if(yourLogo && yourLogo !== '') { + var logo = jQuery('').prependTo( jQuery(preview).parent() ); + logo.attr('style', yourLogoStyle); + + var oL = oR = oT = oB = 'auto'; + + if( logo.css('left') != 'auto' ){ + var logoLeft = logo[0].style.left; + } + if( logo.css('right') != 'auto' ){ + var logoRight = logo[0].style.right; + } + if( logo.css('top') != 'auto' ){ + var logoTop = logo[0].style.top; + } + if( logo.css('bottom') != 'auto' ){ + var logoBottom = logo[0].style.bottom; + } + + if( logoLeft && logoLeft.indexOf('%') != -1 ){ + oL = width / 100 * parseInt( logoLeft ) - logo.width() / 2; + }else{ + oL = parseInt( logoLeft ); + } + + if( logoRight && logoRight.indexOf('%') != -1 ){ + oR = width / 100 * parseInt( logoRight ) - logo.width() / 2; + }else{ + oR = parseInt( logoRight ); + } + + if( logoTop && logoTop.indexOf('%') != -1 ){ + oT = height / 100 * parseInt( logoTop ) - logo.height() / 2; + }else{ + oT = parseInt( logoTop ); + } + + if( logoBottom && logoBottom.indexOf('%') != -1 ){ + oB = height / 100 * parseInt( logoBottom ) - logo.height() / 2; + }else{ + oB = parseInt( logoBottom ); + } + + logo.css({ + left : oL, + right : oR, + top : oT, + bottom : oB + }); + } + + // Get layer background + var slide = jQuery('#ls-layers .ls-layer-box').eq(index); + var background = jQuery('input[name="background"]', slide).val(); + var postOffset = jQuery('input[name="post_offset"]', slide).val(); + var posts = null; + + // Set layer background + if(background != '') { + draggable.css({ + backgroundImage : 'url('+background+')', + backgroundPosition : 'center center' + }); + } else { + draggable.css({ + backgroundImage : 'none' + }); + } + + // Empty draggable + draggable.children().remove(); + + // Iterate over the sublayers + jQuery('#ls-layers .ls-layer-box').eq(index).find('.ls-sublayers > tr').each(function(layerkey) { + + if(jQuery('input[name="skip"]', this).prop('checked')) { + jQuery('
              ').appendTo(draggable).hide(); + return true; } + + if(jQuery('.ls-icon-eye', this).hasClass('active')) { + jQuery('
              ').appendTo(draggable).hide(); + return true; + } + + var item; + var type = jQuery('input[name="type"]', this).val(); + var html = jQuery('textarea[name="html"]', this).val(); + switch( jQuery('input[name="media"]', this).val() ) { + case 'img': type = 'img'; break; + case 'html': type = 'div'; break; + case 'post': type = 'post'; break; + } + var id = jQuery('input[name="id"]', this).val(); + var classes = jQuery('input[name="class"]', this).val(); + + // Append element + if(type == 'img') { + var url = jQuery('input[name="image"]', this).val(); + var tmpContent = (url !== '') ? '' : '
              '; + item = jQuery(tmpContent).appendTo(draggable); + + } else if(type == 'post') { + + if(posts === null) { + posts = jQuery.parseJSON( jQuery('#ls-posts-json').val() ); + } + + if(postOffset == -1) { postOffset = index; } + + // Parse post placeholders + var post = posts[postOffset]; + var textlength = jQuery('input[name="post_text_length"]', this).val(); + for(var key in post) { + if(html.indexOf('['+key+']') !== -1) { + if( (key == 'title' || key == 'content' || key == 'excerpt') && textlength > 0) { + post[key] = post[key].substr(0, textlength); + } + html = html.replace('['+key+']', post[key]); + } + } + + // Test for html wrapper + html = jQuery.trim(html); + var first = html.substr(0, 1); + var last = html.substr(html.length-1, 1); + if(first == '<' && last == '>') { + html = html.replace(/(\r\n|\n|\r)/gm,""); + item = jQuery(html).appendTo(draggable); + } else { + item = jQuery('
              ').html(html).appendTo(draggable); + } + + } else { + item = jQuery('<'+type+'>').appendTo(draggable); + if(html !== '') { item.html(html); } + } + + + // Editor options + if(jQuery('.ls-icon-lock', this).hasClass('active')) { + item.addClass('disabled'); } + + // Get style settings + var top = jQuery('input[name="top"]', this).val(); + var left = jQuery('input[name="left"]', this).val(); + var custom = jQuery('textarea[name="style"]', this).val(); + + // Styles + var styles = {}; + jQuery('.ls-sublayer-style input.auto', this).each(function() { + var cssVal = jQuery(this).val(); + var cssProp = jQuery(this).attr('name'); + if(cssVal === '') { + return true; + } + + if(cssVal.slice(-1) == ';' ) { + cssVal = cssVal.substring(0, cssVal.length - 1); + } + + styles[cssProp] = isNumber(cssVal) ? cssVal + 'px' : cssVal; + }); + + // Apply style settings and attributes + item.attr('style', custom).css(styles); + item.attr('id', id).addClass(classes); + if(jQuery('input[name="wordwrap"]', this).prop('checked') === false) { + item.css('white-space', 'nowrap'); + } + + var pt = isNaN( parseInt( item.css('padding-top') ) ) ? 0 : parseInt( item.css('padding-top') ); + var pl = isNaN( parseInt( item.css('padding-left') ) ) ? 0 : parseInt( item.css('padding-left') ); + var bt = isNaN( parseInt( item.css('border-top-width') ) ) ? 0 : parseInt( item.css('border-top-width') ); + var bl = isNaN( parseInt( item.css('border-left-width') ) ) ? 0 : parseInt( item.css('border-left-width') ); + + var setPositions = function(){ + + // Position the element + if(top.indexOf('%') !== -1) { + item.css({ top : draggable.height() / 100 * parseInt( top ) - item.height() / 2 - pt - bt }); + } else { + item.css({ top : parseInt(top) }); + } + + if(left.indexOf('%') !== -1) { + item.css({ left : draggable.width() / 100 * parseInt( left ) - item.width() / 2 - pl - bl }); + } else { + item.css({ left : parseInt(left) }); + } + }; + + if( item.is('img') ){ + + item.load(function(){ + setPositions(); + }).attr('src',item.attr('src') ); + }else{ + setPositions(); + } + + // Z-index + item.css({ zIndex : 10 + item.index() }); + }); + + + // Add draggable + LayerSlider.addDraggable(); + }, + + openMediaLibrary : function() { + + // New 3.5 media uploader + if(newMediaUploader == true) { + + jQuery(document).on('click', '.ls-upload', function(e) { + e.preventDefault(); + + uploadInput = this; + + // Get library type + var type = jQuery(this).hasClass('ls-insert-media') ? 'video,audio' : 'image'; + var multiple = jQuery(this).hasClass('ls-mass-upload') ? true : false; + + // Media Library params + var frame = wp.media({ + title : 'Pick an image to use it in LayerSlider WP', + multiple : multiple, + library : { type : type }, + button : { text : 'Insert' } + }); + + // Runs on select + frame.on('select',function() { + + // Image with preview + var attachment = frame.state().get('selection').first().toJSON(); + var attachments = frame.state().get('selection').toJSON(); + + if( jQuery(uploadInput).hasClass('ls-mass-upload') ) { + + // Get layer + var layer = jQuery(uploadInput).closest('.ls-layer-box'); + var sublayer = layer.find('.ls-sublayers > tr:last-child'); + + // Set first image + jQuery(uploadInput).prev().val(attachment.url); + jQuery(uploadInput).prev().prev().val(attachment.id); + if(typeof attachment.sizes.thumbnail != "undefined") { + jQuery(uploadInput).find('img').attr('src', attachment.sizes.thumbnail.url); + } else { + jQuery(uploadInput).find('img').attr('src', attachment.sizes.full.url); + } + + for(c = 1; c < attachments.length; c++) { + var count = layer.find('.ls-sublayers > tr').length + 1; + var clone = jQuery('#ls-sample .ls-sublayers > tr').clone(); + var input = clone.appendTo( layer.find('.ls-sublayers') ).find('div.ls-image'); + + input.prev().val(attachments[c].url); + input.prev().prev().val(attachments[c].id); + if(typeof attachment.sizes.thumbnail != "undefined") { + jQuery(uploadInput).find('img').attr('src', attachment.sizes.thumbnail.url); + } else { + jQuery(uploadInput).find('img').attr('src', attachment.sizes.full.url); + } + clone.find('input[name="subtitle"]').val('Layer #' + count); + clone.find('.ls-sublayer-number').text(count); + } + + } else if( jQuery(uploadInput).is('div.ls-image') ) { + jQuery(uploadInput).prev().val(attachment.url); + jQuery(uploadInput).prev().prev().val(attachment.id); + if(typeof attachment.sizes.thumbnail != "undefined") { + jQuery(uploadInput).find('img').attr('src', attachment.sizes.thumbnail.url); + } else { + jQuery(uploadInput).find('img').attr('src', attachment.sizes.full.url); + } + + // Multimedia HTML + } else if( jQuery(uploadInput).hasClass('ls-insert-media')) { + + var url = attachment.url.split('/wp-content/')[1]; + url = '/wp-content/'+url; + + if(attachment.type === 'video') { + var mediaHTML = ''; + } else { + var mediaHTML = ''; + } + + jQuery(uploadInput).parent().prev().val(mediaHTML); + + // Image with input field + } else { + jQuery(uploadInput).val( attachment['url'] ); + if(jQuery(uploadInput).is('input[name="image"]')) { + jQuery(uploadInput).prev().attr('src', attachment['url']); + } + } + + // Generate preview + LayerSlider.generatePreview( jQuery('.ls-layer-box.active').index() ); + }); + + // Open ML + frame.open(); + }); + + } else { + + // Bind upload button to show media uploader + jQuery(document).on('click', '.ls-upload', function(e) { + e.preventDefault(); + uploadInput = this; + tb_show('Upload or select a new image to insert into LayerSlider WP', 'media-upload.php?type=image&TB_iframe=true&width=650&height=400'); + return false; + }); + } + }, + + insertUpload : function() { + + // Bind an event to image url insert + window.send_to_editor = function(html) { + + // Insert image + var img = jQuery('img',html).attr('src'); + if(jQuery(uploadInput).is('div.ls-image')) { + jQuery(uploadInput).prev().val(attachment.url); + jQuery(uploadInput).prev().prev().val(attachment.id); + jQuery(uploadInput).children('img').attr('src', attachment.sizes.thumbnail.url); + } else { + jQuery(uploadInput).val( img ); + } + + // Remove thickbox and update preview + tb_remove(); + LayerSlider.generatePreview( jQuery('.ls-layer-box.active').index() ); + }; + }, + + addSortables : function() { + + // Bind sortable function + jQuery('.ls-sublayer-sortable').sortable({ + + // Properties + handle : 'span.ls-sublayer-sortable-handle', + containment : 'parent', + tolerance : 'pointer', + delay: 150, + axis : 'y', + + // Events + helper: function(e, tr) { + var $originals = tr.children(); + var $helper = tr.clone(); + $helper.children().each(function(index) { + + // Set helper cell sizes to match the original sizes + jQuery(this).width($originals.eq(index).width()); + }); + return $helper; + }, + + update : function(event, ui) { + LayerSlider.reindexSublayers(); + LayerSlider.generatePreview( jQuery('#ls-layers .ls-layer-box.active').index() ); + }, + }); + }, + + addLayerSortables : function() { + + // Bind sortable function + jQuery('#ls-layer-tabs').sortable({ + //axis : 'x', + start : function() { + LayerSlider.dragIndex = jQuery('.ui-sortable-placeholder').index() - 1; + }, + change: function() { + jQuery('.ui-sortable-helper').addClass('moving'); + }, + stop : function(event, ui) { + + // Get old index + var oldIndex = LayerSlider.dragIndex; + + // Get new index + var index = jQuery('.moving').index(); + + if( index > -1 ){ + + // Rearraange layer pages + + if(index == 0) { + jQuery('#ls-layers .ls-layer-box').eq(oldIndex).prependTo('#ls-layers'); + }else{ + var layerObj = jQuery('#ls-layers .ls-layer-box').eq(oldIndex); + jQuery('#ls-layers .ls-layer-box').eq(oldIndex).remove(); + + layerObj.insertAfter('#ls-layers .ls-layer-box:eq('+(index-1)+')'); + } + } + + jQuery('.moving').removeClass('moving'); + + // Reindex layers + LayerSlider.reindexLayers(); + + // Sortable + LayerSlider.addSortables(); + }, + containment : 'parent', + tolerance : 'pointer', + items : 'a:not(.unsortable)' + }); + }, + + addDraggable : function() { + + // Add dragable + jQuery('.draggable').children().draggable({ + drag : function() { + + LayerSlider.dragging(); + }, + stop : function() { + + LayerSlider.dragging(); + } + }); + + jQuery('.draggable .disabled').draggable('disable'); + }, + + dragging : function() { + + // Get positions + var top = parseInt(jQuery('.ui-draggable-dragging').position().top); + var left = parseInt(jQuery('.ui-draggable-dragging').position().left); + + // Get index + var wrapper = jQuery('.ui-draggable-dragging').closest('.ls-layer-box'); + var index = jQuery('.ui-draggable-dragging').index(); + + // Set positions + wrapper.find('input[name="top"]').eq(index).val(top + 'px'); + wrapper.find('input[name="left"]').eq(index).val(left + 'px'); + }, + + selectDragElement : function(el) { + + jQuery(el).closest('.ls-layer-box').find('.ls-sublayers > tr').eq( jQuery(el).index() ).click(); + jQuery(el).closest('.ls-layer-box').find('.ls-sublayers > tr').eq( jQuery(el).index() ).find('.ls-sublayer-nav a:eq(1)').click(); + }, + + reindexSublayers : function(el) { + + jQuery('#ls-layers .ls-layer-box.active .ls-sublayers > tr').each(function(index) { + + // Reindex sublayer number + jQuery(this).find('.ls-sublayer-number').html( index + 1 ); + + // Reindex sublayer title if it is untoched + if( + jQuery(this).find('.ls-sublayer-title').val().indexOf('Sublayer') != -1 && + jQuery(this).find('.ls-sublayer-title').val().indexOf('Layer') != -1 && + jQuery(this).find('.ls-sublayer-title').val().indexOf('copy') == -1 + ) { + jQuery(this).find('.ls-sublayer-title').val('Layer #' + (index + 1) ); + } + }); + }, + + reindexLayers : function() { + jQuery('#ls-layer-tabs a:not(.unsortable)').each(function(index) { + jQuery(this).html('Slide #' + (index + 1) + 'x'); + }); + }, + + play : function( index ) { + + // Get layerslider contaier + var layerslider = jQuery('#ls-layers .ls-layer-box').eq(index).find('.ls-real-time-preview'); + + // Stop + if(layerslider.children().length > 0) { + jQuery('#ls-layers .ls-layer-box').eq(index).find('.ls-preview').show(); + layerslider.find('.ls-container').layerSlider('stop'); + layerslider.html('').hide(); + jQuery('#ls-layers .ls-layer-box').eq(index).find('.ls-preview-button').html('Enter Preview').removeClass('playing'); + + // Remove Timeline slider + lsTimeLine.remove(); + + return; + } + + // Slider settings + var width = jQuery('.ls-settings input[name="width"]').val(); + var height = jQuery('.ls-settings input[name="height"]').val(); + var posts = null; + + // Switch between preview and editor + layerslider.show(); + layerslider = jQuery('
              ').appendTo(layerslider); + jQuery('#ls-layers .ls-layer-box').eq(index).find('.ls-preview').hide(); + jQuery('#ls-layers .ls-layer-box').eq(index).find('.ls-preview-button').html('Exit Preview').addClass('playing'); + + // Apply global settings + layerslider.css({ + width: width, + height : height + }); + + // Add backgrounds + var backgroundColor = jQuery('.ls-settings input[name="backgroundcolor"]').val(); + var backgroundImage = jQuery('.ls-settings input[name="backgroundimage"]').val(); + if(backgroundColor != '') { + layerslider.css({ backgroundColor : backgroundColor }); } + + if(backgroundImage != '') { + layerslider.css({ backgroundImage : 'url('+backgroundImage+')' }); } + + + + // Iterate over the slides + jQuery('#ls-layers .ls-layer-box').each(function(slidekey) { + + // Get layer background + var slide = jQuery(this); + var post = jQuery.parseJSON( slide.find('textarea.ls-post-json').val() ); + var postOffset = slide.find('input[name="post_offset"]').val(); + + // Layer properties + var layerprops = ''; + jQuery(this).find('.layerprop').each(function() { + layerprops += ''+jQuery(this).attr('name')+':'+jQuery(this).val()+';'; + }); + + // Build the layer + var layer = jQuery('
              ').appendTo(layerslider); + layer.attr('data-ls', layerprops); + + // Add background + var background = jQuery(this).find('input[name="background"]').val(); + if(background != '') { + jQuery('').appendTo(layer); + } + + // Get selected transitions + var tr2d = jQuery('input[name="2d_transitions"]', this).val(); + var tr3d = jQuery('input[name="3d_transitions"]', this).val(); + var tr2dcustom = jQuery('input[name="custom_2d_transitions"]', this).val(); + var tr3dcustom = jQuery('input[name="custom_3d_transitions"]', this).val(); + + // Apply transitions + if( tr2d == '' && tr3d == '' && tr2dcustom == '' && tr3dcustom == '' ) { + layer.attr('data-ls', layer.attr('data-ls') + ' transition2d: all; '); + layer.attr('data-ls', layer.attr('data-ls') + ' transition3d: all; '); + } else { + if(tr2d != '') layer.attr('data-ls', layer.attr('data-ls') + ' transition2d: '+tr2d+'; '); + if(tr3d != '') layer.attr('data-ls', layer.attr('data-ls') + ' transition3d: '+tr3d+'; '); + if(tr2dcustom != '') layer.attr('data-ls', layer.attr('data-ls') + ' customtransition2d: '+tr2dcustom+'; '); + if(tr3dcustom != '') layer.attr('data-ls', layer.attr('data-ls') + ' customtransition3d: '+tr3dcustom+'; '); + } + + + // Iterate over layers + jQuery(this).find('.ls-sublayers > tr').each(function(layerkey) { + + // Skip sublayer? + if( jQuery('input[name="skip"]', this).prop('checked') ) { + jQuery('
              ').appendTo(layer) + return true; + } + + // Gather sublayer data + var type = jQuery('input[name="type"]', this).val(); + switch( jQuery('input[name="media"]', this).val() ) { + case 'img': type = 'img'; break; + case 'html': type = 'div'; break; + case 'post': type = 'post'; break; + } + + var image = jQuery('input[name="image"]', this).val(); + var html = jQuery('textarea[name="html"]', this).val(); + var style = jQuery('textarea[name="style"]', this).val(); + var top = jQuery('input[name="top"]', this).val(); + var left = jQuery('input[name="left"]', this).val(); + var skip = jQuery('input[name="skip"]', this).prop('checked'); + var url = jQuery('input[name="url"]', this).val(); + var id = jQuery('input[name="id"]', this).val(); + var classes = jQuery('input[name="class"]', this).val(); + + // Sublayer properties + var sublayerprops = ''; + jQuery(this).find('.sublayerprop').each(function() { + if(jQuery(this).is(':checkbox')) { + sublayerprops += jQuery(this).attr('name')+':'+jQuery(this).prop('checked')+';'; + } else { + sublayerprops += jQuery(this).attr('name')+':'+jQuery(this).val()+';'; + } + }); + + // Styles + var styles = {}; + jQuery(this).find('.ls-sublayer-style input.auto').each(function() { + var cssVal = jQuery(this).val(); + var cssProp = jQuery(this).attr('name'); + if(cssVal === '') { return true; } + + if(cssVal.slice(-1) == ';' ) { + cssVal = cssVal.substring(0, cssVal.length - 1); + } + + styles[cssProp] = isNumber(cssVal) ? cssVal + 'px' : cssVal; + }); + + // Build the sublayer + var sublayer; + if(type == 'img') { + if(image != '') { + sublayer = jQuery('').appendTo(layer); + } else { + return true; + } + + } else if(type == 'post') { + + if(posts === null) { + posts = jQuery.parseJSON( jQuery('#ls-posts-json').val() ); + } + + if(postOffset == -1) { + postOffset = slidekey; + } + + // Parse post placeholders + var post = posts[postOffset]; + var textlength = jQuery('input[name="post_text_length"]', this).val(); + for(var key in post) { + if(html.indexOf('['+key+']') !== -1) { + if( (key == 'title' || key == 'content' || key == 'excerpt') && textlength > 0) { + post[key] = post[key].substr(0, textlength); + } + html = html.replace('['+key+']', post[key]); + } + } + + // Test html + html = jQuery.trim(html); + var first = html.substr(0, 1); + var last = html.substr(html.length-1, 1); + if(first == '<' && last == '>') { + html = html.replace(/(\r\n|\n|\r)/gm,""); + sublayer = jQuery(html).appendTo(layer).addClass('ls-s'); + } else { + sublayer = jQuery('
              ').appendTo(layer).html(html).addClass('ls-s'); + } + + } else { + sublayer = jQuery('<'+type+'>').appendTo(layer).html(html).addClass('ls-s'); + } + + // Apply styles and attributes + sublayer.attr('id', id).attr('style', style).addClass(classes) + sublayer.css(styles); + if(jQuery('input[name="wordwrap"]', this).prop('checked') == false) { + sublayer.css('white-space', 'nowrap'); } + + // Position the element + if(top.indexOf('%') != -1) { sublayer.css({ top : top }); + } else { sublayer.css({ top : parseInt(top) }); } + + if(left.indexOf('%') != -1) { sublayer.css({ left : left }); + } else { sublayer.css({ left : parseInt(left) }); } + + if(url != '' && url.match(/^\#[0-9]/)) { + sublayer.addClass('ls-linkto-' + url.substr(1)); + } + + sublayer.attr('data-ls', sublayerprops); + }); + }); + + // Get slider settings + var autoPlayVideos = jQuery('.ls-settings-contents input[name="autoplayvideos"]').prop('checked'); + autoPlayVideos = autoPlayVideos ? true : false; + + // Init layerslider + jQuery(layerslider).layerSlider({ + width : width, + height : height, + responsive : false, + skin : 'preview', + skinsPath : pluginPath + 'skins/', + animateFirstLayer : true, + firstLayer : (index + 1), + autoStart : false, + pauseOnHover : false, + autoPlayVideos : autoPlayVideos, + cbInit : function(){ + lsTimeLine.create(); + }, + cbTimeLineStart : function(g,d){ + if( g.nextLayerIndex == jQuery('#ls-layer-tabs .active').index() + 1 ){ + lsTimeLine.start(d); + } + } + + }); + + jQuery(layerslider).layerSlider('start'); + }, + + + stop : function() { + + // Get layerslider contaier + var layersliders = jQuery('#ls-layers .ls-layer-box .ls-real-time-preview'); + + // Stop the preview if any + if(layersliders.children().length > 0) { + + // Show the editor + jQuery('#ls-layers .ls-layer-box .ls-preview').show(); + + // Stop LayerSlider + layersliders.find('.ls-container').layerSlider('stop'); + + // Empty and hide the Preview + layersliders.html('').hide(); + + // Rewrote the Preview button text + jQuery('#ls-layers .ls-layer-box .ls-preview-button').text('Enter Preview').removeClass('playing'); + } + + // Remove Timeline slider + lsTimeLine.remove(); + }, + + openTransitionGallery : function() { + + // Create window + jQuery('body').prepend( jQuery('
              ', { 'id' : 'ls-transition-window', 'class' : 'ls-modal ls-box' }) + .append( jQuery('

              ', { 'class' : 'header', 'text' : 'Select LayerSlider transitions' }) + .append( jQuery('', { 'text' : 'x' })) + ) + .append( jQuery('
              ') + .append( jQuery('')) + ) + ); + + // Create overlay + jQuery('body').prepend( jQuery('
              ', { 'class' : 'ls-overlay'})); + + + // Add custom checkboxes + jQuery('#ls-transition-window :checkbox').customCheckbox(); + + // Append transitions + LayerSlider.appendTransition('Built-in 2D transitions', '2d_transitions', layerSliderTransitions['t2d']); + LayerSlider.appendTransition('Built-in 3D transitions', '3d_transitions', layerSliderTransitions['t3d']); + + if(typeof layerSliderCustomTransitions != "undefined") { + + // Custom 3D transitions + if(layerSliderCustomTransitions['t3d'].length) { + LayerSlider.appendTransition('Custom 3D transitions', 'custom_3d_transitions', layerSliderCustomTransitions['t3d']); + } + + // Custom 2D transitions + if(layerSliderCustomTransitions['t2d'].length) { + LayerSlider.appendTransition('Custom 2D transitions', 'custom_2d_transitions', layerSliderCustomTransitions['t2d']); + } + } + + // Add custom checkboxes + jQuery('#ls-transition-window :checkbox').customCheckbox(); + + // Close event + jQuery(document).one('click', '.ls-overlay', function() { + LayerSlider.closeTransitionGallery(); + }); + }, + + closeTransitionGallery : function() { + + jQuery('.ls-overlay, #ls-transition-window').remove(); + }, + + appendTransition : function(title, tbodyclass, transitions) { + + // Append new tbody + var tbody = jQuery('
              ', { 'class' : tbodyclass }).appendTo('#ls-transition-window table'); + + // Append section header + tbody.append( jQuery('') + .append( jQuery('').appendTo(tbody).append('<\/tr>/g, ''); + + return html; +} + +function insertChar(chr) { + tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';'); + + // Refocus in window + if (tinyMCEPopup.isWindow) + window.focus(); + + tinyMCEPopup.editor.focus(); + tinyMCEPopup.close(); +} + +function previewChar(codeA, codeB, codeN) { + var elmA = document.getElementById('codeA'); + var elmB = document.getElementById('codeB'); + var elmV = document.getElementById('codeV'); + var elmN = document.getElementById('codeN'); + + if (codeA=='#160;') { + elmV.innerHTML = '__'; + } else { + elmV.innerHTML = '&' + codeA; + } + + elmB.innerHTML = '&' + codeA; + elmA.innerHTML = '&' + codeB; + elmN.innerHTML = codeN; +} diff --git a/src/wp-includes/js/tinymce/themes/advanced/js/color_picker.js b/src/wp-includes/js/tinymce/themes/advanced/js/color_picker.js new file mode 100644 index 0000000..cc891c1 --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/js/color_picker.js @@ -0,0 +1,345 @@ +tinyMCEPopup.requireLangPack(); + +var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false; + +var colors = [ + "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033", + "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099", + "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff", + "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033", + "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399", + "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff", + "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333", + "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399", + "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff", + "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633", + "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699", + "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff", + "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633", + "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999", + "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff", + "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933", + "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999", + "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff", + "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33", + "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99", + "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff", + "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33", + "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99", + "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff", + "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33", + "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99", + "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff" +]; + +var named = { + '#F0F8FF':'Alice Blue','#FAEBD7':'Antique White','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige', + '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'Blanched Almond','#0000FF':'Blue','#8A2BE2':'Blue Violet','#A52A2A':'Brown', + '#DEB887':'Burly Wood','#5F9EA0':'Cadet Blue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'Cornflower Blue', + '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'Dark Blue','#008B8B':'Dark Cyan','#B8860B':'Dark Golden Rod', + '#A9A9A9':'Dark Gray','#A9A9A9':'Dark Grey','#006400':'Dark Green','#BDB76B':'Dark Khaki','#8B008B':'Dark Magenta','#556B2F':'Dark Olive Green', + '#FF8C00':'Darkorange','#9932CC':'Dark Orchid','#8B0000':'Dark Red','#E9967A':'Dark Salmon','#8FBC8F':'Dark Sea Green','#483D8B':'Dark Slate Blue', + '#2F4F4F':'Dark Slate Gray','#2F4F4F':'Dark Slate Grey','#00CED1':'Dark Turquoise','#9400D3':'Dark Violet','#FF1493':'Deep Pink','#00BFFF':'Deep Sky Blue', + '#696969':'Dim Gray','#696969':'Dim Grey','#1E90FF':'Dodger Blue','#B22222':'Fire Brick','#FFFAF0':'Floral White','#228B22':'Forest Green', + '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'Ghost White','#FFD700':'Gold','#DAA520':'Golden Rod','#808080':'Gray','#808080':'Grey', + '#008000':'Green','#ADFF2F':'Green Yellow','#F0FFF0':'Honey Dew','#FF69B4':'Hot Pink','#CD5C5C':'Indian Red','#4B0082':'Indigo','#FFFFF0':'Ivory', + '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'Lavender Blush','#7CFC00':'Lawn Green','#FFFACD':'Lemon Chiffon','#ADD8E6':'Light Blue', + '#F08080':'Light Coral','#E0FFFF':'Light Cyan','#FAFAD2':'Light Golden Rod Yellow','#D3D3D3':'Light Gray','#D3D3D3':'Light Grey','#90EE90':'Light Green', + '#FFB6C1':'Light Pink','#FFA07A':'Light Salmon','#20B2AA':'Light Sea Green','#87CEFA':'Light Sky Blue','#778899':'Light Slate Gray','#778899':'Light Slate Grey', + '#B0C4DE':'Light Steel Blue','#FFFFE0':'Light Yellow','#00FF00':'Lime','#32CD32':'Lime Green','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon', + '#66CDAA':'Medium Aqua Marine','#0000CD':'Medium Blue','#BA55D3':'Medium Orchid','#9370D8':'Medium Purple','#3CB371':'Medium Sea Green','#7B68EE':'Medium Slate Blue', + '#00FA9A':'Medium Spring Green','#48D1CC':'Medium Turquoise','#C71585':'Medium Violet Red','#191970':'Midnight Blue','#F5FFFA':'Mint Cream','#FFE4E1':'Misty Rose','#FFE4B5':'Moccasin', + '#FFDEAD':'Navajo White','#000080':'Navy','#FDF5E6':'Old Lace','#808000':'Olive','#6B8E23':'Olive Drab','#FFA500':'Orange','#FF4500':'Orange Red','#DA70D6':'Orchid', + '#EEE8AA':'Pale Golden Rod','#98FB98':'Pale Green','#AFEEEE':'Pale Turquoise','#D87093':'Pale Violet Red','#FFEFD5':'Papaya Whip','#FFDAB9':'Peach Puff', + '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'Powder Blue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'Rosy Brown','#4169E1':'Royal Blue', + '#8B4513':'Saddle Brown','#FA8072':'Salmon','#F4A460':'Sandy Brown','#2E8B57':'Sea Green','#FFF5EE':'Sea Shell','#A0522D':'Sienna','#C0C0C0':'Silver', + '#87CEEB':'Sky Blue','#6A5ACD':'Slate Blue','#708090':'Slate Gray','#708090':'Slate Grey','#FFFAFA':'Snow','#00FF7F':'Spring Green', + '#4682B4':'Steel Blue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet', + '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'White Smoke','#FFFF00':'Yellow','#9ACD32':'Yellow Green' +}; + +var namedLookup = {}; + +function init() { + var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')), key, value; + + tinyMCEPopup.resizeToInnerSize(); + + generatePicker(); + generateWebColors(); + generateNamedColors(); + + if (inputColor) { + changeFinalColor(inputColor); + + col = convertHexToRGB(inputColor); + + if (col) + updateLight(col.r, col.g, col.b); + } + + for (key in named) { + value = named[key]; + namedLookup[value.replace(/\s+/, '').toLowerCase()] = key.replace(/#/, '').toLowerCase(); + } +} + +function toHexColor(color) { + var matches, red, green, blue, toInt = parseInt; + + function hex(value) { + value = parseInt(value).toString(16); + + return value.length > 1 ? value : '0' + value; // Padd with leading zero + }; + + color = tinymce.trim(color); + color = color.replace(/^[#]/, '').toLowerCase(); // remove leading '#' + color = namedLookup[color] || color; + + matches = /^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/.exec(color); + + if (matches) { + red = toInt(matches[1]); + green = toInt(matches[2]); + blue = toInt(matches[3]); + } else { + matches = /^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/.exec(color); + + if (matches) { + red = toInt(matches[1], 16); + green = toInt(matches[2], 16); + blue = toInt(matches[3], 16); + } else { + matches = /^([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(color); + + if (matches) { + red = toInt(matches[1] + matches[1], 16); + green = toInt(matches[2] + matches[2], 16); + blue = toInt(matches[3] + matches[3], 16); + } else { + return ''; + } + } + } + + return '#' + hex(red) + hex(green) + hex(blue); +} + +function insertAction() { + var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func'); + + var hexColor = toHexColor(color); + + if (hexColor === '') { + var text = tinyMCEPopup.editor.getLang('advanced_dlg.invalid_color_value'); + tinyMCEPopup.alert(text + ': ' + color); + } + else { + tinyMCEPopup.restoreSelection(); + + if (f) + f(hexColor); + + tinyMCEPopup.close(); + } +} + +function showColor(color, name) { + if (name) + document.getElementById("colorname").innerHTML = name; + + document.getElementById("preview").style.backgroundColor = color; + document.getElementById("color").value = color.toUpperCase(); +} + +function convertRGBToHex(col) { + var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi"); + + if (!col) + return col; + + var rgb = col.replace(re, "$1,$2,$3").split(','); + if (rgb.length == 3) { + r = parseInt(rgb[0]).toString(16); + g = parseInt(rgb[1]).toString(16); + b = parseInt(rgb[2]).toString(16); + + r = r.length == 1 ? '0' + r : r; + g = g.length == 1 ? '0' + g : g; + b = b.length == 1 ? '0' + b : b; + + return "#" + r + g + b; + } + + return col; +} + +function convertHexToRGB(col) { + if (col.indexOf('#') != -1) { + col = col.replace(new RegExp('[^0-9A-F]', 'gi'), ''); + + r = parseInt(col.substring(0, 2), 16); + g = parseInt(col.substring(2, 4), 16); + b = parseInt(col.substring(4, 6), 16); + + return {r : r, g : g, b : b}; + } + + return null; +} + +function generatePicker() { + var el = document.getElementById('light'), h = '', i; + + for (i = 0; i < detail; i++){ + h += '
              '; + } + + el.innerHTML = h; +} + +function generateWebColors() { + var el = document.getElementById('webcolors'), h = '', i; + + if (el.className == 'generated') + return; + + // TODO: VoiceOver doesn't seem to support legend as a label referenced by labelledby. + h += '
              ', { 'colspan' : 2 }) + .append( jQuery('', { 'text' : title })) + .append( jQuery('', { 'type' : 'checkbox' })) + .append( jQuery('', { 'class' : 'all', 'text' : 'Select all' })) + ) + ); + + // Get checked transitions + var checked = jQuery('#ls-layers .ls-layer-box.active').find('input[name="'+tbodyclass+'"]').val(); + checked = (checked != '') ? checked.split(',') : []; + + // Check checkbox if all is selected + if(checked == 'all') { + tbody.find('.ls-checkbox').removeClass('off').addClass('on'); + tbody.find(':checkbox').prop('checked', true); + } + + for(c = 0; c < transitions.length; c+=2) { + + // Append new table row + var tr = jQuery('
              ').append(''); + + // Append transition col 1 & 2 + tr.children().eq(0).append( jQuery('', { 'href' : '#', 'html' : ''+(c+1)+'. '+transitions[c]['name']+'', 'rel' : 'tr'+(c+1) } ) ) + if(transitions.length > (c+1)) { + tr.children().eq(1).append( jQuery('', { 'href' : '#', 'html' : ''+(c+2)+'. '+transitions[(c+1)]['name']+'', 'rel' : 'tr'+(c+2) } ) ); + } + + // Check transitions + if(checked.indexOf(''+(c+1)+'') != -1 || checked == 'all') tr.children().eq(0).addClass('added'); + if((checked.indexOf(''+(c+2)+'') != -1 || checked == 'all') && transitions.length > (c+1)) tr.children().eq(1).addClass('added'); + } + }, + + selectAllTransition : function(index, check) { + + // Get checkbox + var checkbox = jQuery('#ls-transition-window tbody').eq(index).find(':checkbox'); + + // Get category + var cat = jQuery('#ls-transition-window tbody').eq(index).attr('class'); + + if(checkbox.is(':checked') || (typeof check != undefined && check == true) ) { + + // Check every transition + jQuery('#ls-transition-window tbody').eq(index).find('td a').each(function() { + jQuery(this).parent().addClass('added'); + }); + + // Check the checkbox + jQuery('#ls-transition-window tbody').eq(index).find('.ls-checkbox').removeClass('off').addClass('on'); + jQuery('#ls-transition-window tbody').eq(index).find(':checkbox').prop('checked', true); + + // Set the hidden input + jQuery('#ls-layers .ls-layer-box.active').find('input[name="'+cat+'"]').val('all'); + + } else { + + // Check every transition + jQuery('#ls-transition-window tbody').eq(index).find('td').removeClass('added'); + + // Set the hidden input + jQuery('#ls-layers .ls-layer-box.active').find('input[name="'+cat+'"]').val(''); + } + }, + + toggleTransition : function(el) { + + // Toggle addded class + if(jQuery(el).parent().hasClass('added')) { + jQuery(el).parent().removeClass('added'); + + } else { + jQuery(el).parent().addClass('added'); + } + + // Get transitions + var trs = jQuery(el).closest('tbody').find('td'); + + // All selected + if(trs.filter('.added').length == trs.find('a').length) { + + LayerSlider.selectAllTransition( jQuery(el).closest('tbody').index(), true ); + return; + + // Uncheck sleect al. + } else { + + // Check the checkbox + jQuery(el).closest('tbody').find('.ls-checkbox').addClass('off').removeClass('on'); + jQuery(el).closest('tbody').find(':checkbox').prop('checked', false); + } + + // Get category + var cat = jQuery(el).closest('tbody').attr('class'); + + // Array to hold the checked elements + var checked = []; + + // Get checked elements + trs.filter('.added').find('a').each(function() { + checked.push( jQuery(this).attr('rel').substr(2) ); + }); + + // Set hidden input + jQuery('#ls-layers .ls-layer-box.active').find('input[name="'+cat+'"]').val( checked.join(',') ); + }, + + showTransition : function(el) { + + // Get transition index + var index = jQuery(el).attr('rel').substr(2)-1; + + // Create popup + jQuery('body').prepend( jQuery('
              ', { 'class' : 'ls-popup' }) + .append( jQuery('
              ', { 'class' : 'inner ls-transition-preview' })) + ); + + // Get popup + var popup = jQuery('.ls-popup'); + + // Get viewport dimensions + var v_w = jQuery(window).width(); + + // Get element dimensions + var e_w = jQuery(el).width(); + + // Get element position + var e_l = jQuery(el).offset().left; + var e_t = jQuery(el).offset().top; + + // Get toolip dimensions + var t_w = popup.outerWidth(); + var t_h = popup.outerHeight(); + + // Position tooltip + popup.css({ top : e_t - t_h - 60, left : e_l - (t_w - e_w) / 2 }); + + // Fix top + if(popup.offset().top < 20) { + popup.css('top', e_t + 75); + } + + // Fix left + if(popup.offset().left < 20) { + popup.css('left', 20); + } + + // Get transition class + var trclass = jQuery(el).closest('tbody').attr('class'); + + // Built-in 3D + if(trclass == '3d_transitions') { + var trtype = '3d'; + var trObj = layerSliderTransitions['t'+trtype+''][index]; + + // Built-in 2D + } else if(trclass == '2d_transitions') { + var trtype = '2d'; + var trObj = layerSliderTransitions['t'+trtype+''][index]; + + // Custom 3D + } else if(trclass == 'custom_3d_transitions') { + var trtype = '3d'; + var trObj = layerSliderCustomTransitions['t'+trtype+''][index]; + + // Custom 3D + } else if(trclass == 'custom_2d_transitions') { + var trtype = '2d'; + var trObj = layerSliderCustomTransitions['t'+trtype+''][index]; + } + + // Init transition + popup.find('.inner').lsTransitionPreview({ + transitionType : trtype, + transitionObject : trObj, + imgPath : lsTrImgPath, + skinsPath: lsTrImgPath+'../skins/', + delay : 100 + }); + }, + + hideTransition : function(el) { + + // Stop transition + jQuery('.ls-popup').find('.inner').lsTransitionPreview('stop'); + + // Remove transition + jQuery('.ls-popup').remove(); + }, + + save : function(el) { + + // Temporary disable submit button + jQuery('.ls-publish button').text('Saving ...').addClass('saving').attr('disabled', true); + jQuery('.ls-saving-warning').text('Please do not navigate away from this page while LayerSlider WP saving your layers!'); + + // Iterate over the slider settings + jQuery('.ls-slider-settings input:not(.nochange), .ls-slider-settings select').each(function() { + + // Save original name attr to element's data + jQuery(this).data('name', jQuery(this).attr('name') ); + + // Rewrite the name attr + jQuery(this).attr('name', 'layerslider-slides[properties]['+jQuery(this).attr('name')+']'); + }); + + // Iterate over post options + jQuery('#ls-post-options').find('input, select').each(function() { + + // Save original name attr to element's data + jQuery(this).data('name', jQuery(this).attr('name') ); + + if(jQuery(this).attr('name').substr(-2, 2) == '[]') { + var nameAttr = jQuery(this).attr('name'); + nameAttr = nameAttr.substring(0, nameAttr.length - 2); + jQuery(this).attr('name', 'layerslider-slides[properties]['+nameAttr+'][]'); + } else { + jQuery(this).attr('name', 'layerslider-slides[properties]['+jQuery(this).attr('name')+']'); + } + }); + + // Iterate over the layers + jQuery('#ls-layers .ls-layer-box').each(function(layer) { + + // Iterate over layer settings + jQuery('.ls-slide-options', this).find('input, select').each(function() { + + // Save original name attr to element's data + jQuery(this).data('name', jQuery(this).attr('name') ); + jQuery(this).attr('name', 'layerslider-slides[layers]['+layer+'][properties]['+jQuery(this).attr('name')+']'); + }); + + // Iterate over the sublayers + jQuery(this).find('.ls-sublayers > tr').each(function(sublayer) { + + // Transtions + var transitionProps = {}; + jQuery(this).find('.sublayerprop').each(function() { + if(jQuery(this).is(':checkbox')) { + transitionProps[jQuery(this).attr('name')] = jQuery(this).prop('checked'); + } else { + transitionProps[jQuery(this).attr('name')] = jQuery(this).val(); + } + + jQuery(this).data('name', jQuery(this).attr('name') ).attr('name', ''); + }); + + // Style editor + var styles = {}; + jQuery(this).find('input.auto').each(function() { + + if(jQuery(this).val() != '') { + styles[jQuery(this).attr('name')] = jQuery(this).val(); + } + + jQuery(this).data('name', jQuery(this).attr('name') ).attr('name', ''); + }); + + // Generate styles object + jQuery(this).find('.ls-sublayer-style input[name="styles"]').val( JSON.stringify(styles) ); + jQuery(this).find('.ls-sublayer-options input[name="transition"]').val( JSON.stringify(transitionProps) ); + + + // Iterate over the sublayer properties + jQuery(this).find('input, select, textarea').filter(':not(.auto,.sublayerprop)').each(function() { + if(jQuery(this).attr('name') == '') { return true; } + + // Save original name attr to element's data + jQuery(this).data('name', jQuery(this).attr('name') ); + + // Rewrite the name attr + jQuery(this).attr('name', 'layerslider-slides[layers]['+layer+'][sublayers]['+sublayer+']['+jQuery(this).attr('name')+']'); + }); + }); + }); + + // Iterate over the callback functions + jQuery('.ls-callback-page textarea').each(function() { + + // Save original name attr to element's data + jQuery(this).data('name', jQuery(this).attr('name') ); + + // Rewrite the name attr + jQuery(this).attr('name', 'layerslider-slides[properties]['+jQuery(this).attr('name')+']'); + }); + + // Reset layer counter + LayerSlider.counter = 0; + + setTimeout(function() { + + // Iterate over the layers + jQuery('#ls-layers .ls-layer-box').each(function(layer) { + + // Reindex layerkey + jQuery(this).find('input[name="layerkey"]').val(layer); + + // Data to send + $data = jQuery('#ls-layers .ls-layer-box').eq(layer).find('input, textarea, select'); + $data = $data.add( jQuery('#ls-slider-form > input') ); + $data = $data.add( jQuery('.ls-settings').find('input, textarea, select') ); + $data = $data.add( jQuery('#ls-post-options').find('input, select') ); + $data = $data.add( jQuery('.ls-callback-page textarea') ); + + // Post layer + jQuery.ajax({ + type: 'post', + url: ajaxurl, + dataType: 'text', + data : $data.serialize(), + async : false, + error : function(jqXHR, textStatus, errorThrown) { + alert('It looks there is a server issue that prevented LayerSlider from saving your work. Please, try to temporary disable themes/plugins, or contact with your hosting provider. Your HTTP server thrown the following error: \n\n' + errorThrown); + }, + success : function(id) { + + if(id == '' || id == 0 || parseInt(id) != id) { + alert('An error occurred while saving: invalid returning data (possible database issue).') + return; + } + + LayerSlider.counter += 1; + + if(jQuery('#ls-layers .ls-layer-box').length == LayerSlider.counter) { + + // Give feedback + jQuery('.ls-publish button').text('Saved').removeClass('saving').addClass('saved'); + jQuery('.ls-saving-warning').text(''); + + // Re-enable the button + setTimeout(function() { + jQuery('.ls-publish button').text('Save changes').attr('disabled', false).removeClass('saved'); + }, 2000); + + // Rewrote original name attr + + // Global settings + jQuery('.ls-slider-settings input, .ls-slider-settings select').each(function() { + jQuery(this).attr('name', jQuery(this).data('name')); + }); + + jQuery('#ls-post-options input, #ls-post-options select').each(function() { + jQuery(this).attr('name', jQuery(this).data('name')); + }); + + // Layers + jQuery('#ls-layers .ls-layer-box').each(function(layer) { + + // Layer settings + jQuery(this).find('.ls-slide-options').find('input, select').each(function() { + jQuery(this).attr('name', jQuery(this).data('name')); + }); + + // Sublayers + jQuery(this).find('.ls-sublayers > tr').each(function(sublayer) { + jQuery(this).find('input, select, textarea').each(function() { + jQuery(this).attr('name', jQuery(this).data('name')); + }); + }); + }); + + // Iterate over the callback functions + jQuery('.ls-callback-page textarea').each(function() { + jQuery(this).attr('name', jQuery(this).data('name')); + }); + + // Redirect the edit page when adding new slider + if(document.location.href.indexOf('layerslider_add_new') != -1) { + document.location.href = 'admin.php?page=layerslider&action=edit&id='+id+''; + } + } + } + }); + }); + }, 500); + }, + + cloneFix : function() { + + jQuery('textarea').each(function() { + jQuery(this).text( jQuery(this).val() ); + }); + + // Select clone fix + jQuery('select').each(function() { + + // Get selected index + var index = jQuery(this).find('option:selected').index(); + + // Deselect old options + jQuery(this).find('option').attr('selected', false); + + // Select the new one + jQuery(this).find('option').eq( index ).attr('selected', true); + }); + } +}; + + +var LS_GoogleFontsAPI = { + + results : 0, + fontName : null, + fontIndex : null, + + init : function() { + + // Prefetch fonts + jQuery('.ls-font-search input').focus(function() { + LS_GoogleFontsAPI.getFonts(); + }); + + // Search + jQuery('.ls-font-search .right button').click(function(e) { + e.preventDefault(); + var input = jQuery(this).prev()[0]; + LS_GoogleFontsAPI.timeout = setTimeout(function() { + LS_GoogleFontsAPI.search(input); + }, 500); + }); + + jQuery('.ls-font-search .right input').keydown(function(e) { + if(e.which === 13) { + e.preventDefault(); + var input = this; + LS_GoogleFontsAPI.timeout = setTimeout(function() { + LS_GoogleFontsAPI.search(input); + }, 500); + } + }); + + // Select font + jQuery('.ls-google-fonts .fonts').on('click', 'li:not(.unselectable)', function() { + LS_GoogleFontsAPI.showVariants(this); + }); + + // Add font event + jQuery('.ls-font-search').on('click', 'button.add-font', function(e) { + e.preventDefault(); + LS_GoogleFontsAPI.addFonts(this); + }); + + // Back to results event + jQuery('.ls-google-fonts .variants').on('click', 'button:last', function(e) { + e.preventDefault(); + LS_GoogleFontsAPI.showFonts(this); + }); + + // Close event + jQuery(document).on('click', '.ls-overlay', function() { + if(jQuery('.ls-pointer').length) { + jQuery(this).remove(); + jQuery('.ls-pointer').children('div.fonts').show().next().hide(); + jQuery('.ls-pointer').animate({ marginTop : 40, opacity : 0 }, 150, function() { + this.style.display = 'none'; + }); + } + }); + + // Remove font + jQuery('.ls-font-list').on('click', 'a.remove', function(e) { + e.preventDefault(); + jQuery(this).parent().animate({ height : 0, opacity : 0 }, 300, function() { + + // Add notice if needed + if(jQuery(this).siblings().length < 2) { + jQuery(this).parent().append( + jQuery('
            • ', { 'class' : 'ls-notice', 'text' : 'You didn\'t add any Google font to your library yet.'}) + ); + } + + jQuery(this).remove(); + }); + }); + }, + + getFonts : function() { + + if(LS_GoogleFontsAPI.results == 0) { + var API_KEY = 'AIzaSyC_iL-1h1jz_StV_vMbVtVfh3h2QjVUZ8c'; + jQuery.getJSON('https://www.googleapis.com/webfonts/v1/webfonts?key=' + API_KEY, function(data) { + LS_GoogleFontsAPI.results = data; + }); + } + }, + + search : function(input) { + + // Hide overlay if any + jQuery('.ls-overlay').remove(); + + // Get search field + var searchValue = jQuery(input).val().toLowerCase(); + + // Wait until fonts being fetched + if(LS_GoogleFontsAPI.results != 0 && searchValue.length > 2 ) { + + // Search + var indexes = []; + var found = jQuery.grep(LS_GoogleFontsAPI.results.items, function(obj, index) { + if(obj.family.toLowerCase().indexOf(searchValue) !== -1) { + indexes.push(index); + return true; + } + }); + + // Get list + var list = jQuery('.ls-font-search .ls-pointer .fonts ul'); + + // Remove previous contents and append new ones + list.empty(); + if(found.length) { + for(c = 0; c < found.length; c++) { + list.append( jQuery('
            • ', { 'data-key' : indexes[c], 'text' : found[c]['family'] })); + } + } else { + list.append(jQuery('
            • ', { 'class' : 'unselectable' }) + .append( jQuery('

              ', { 'text' : 'No results were found' })) + ); + } + + // Show pointer and append overlay + jQuery('.ls-font-search .ls-pointer').show().animate({ marginTop : 15, opacity : 1 }, 150); + jQuery('
              ', { 'class' : 'ls-overlay ls-add-slider-overlay'}).prependTo('body'); + } + }, + + showVariants : function(li) { + + // Get selected font + var fontName = jQuery(li).text(); + var fontIndex = jQuery(li).data('key'); + var fontObject = LS_GoogleFontsAPI.results.items[fontIndex]['variants']; + LS_GoogleFontsAPI.fontName = fontName; + LS_GoogleFontsAPI.fontIndex = fontIndex; + + // Get and empty list + var list = jQuery(li).closest('div').next().children('ul'); + list.empty(); + + + // Change header + jQuery(li).closest('.ls-box').children('.header').text('Select "'+fontName+'" variants'); + + // Append variants + for(c = 0; c < fontObject.length; c++) { + list.append( jQuery('
            • ', { 'class' : 'unselectable' }) + .append( jQuery('', { 'type' : 'checkbox'} )) + .append( jQuery('', { 'text' : ucFirst(fontObject[c]) })) + ); + } + + // Init checkboxes + list.find(':checkbox').customCheckbox(); + + // Show variants + jQuery(li).closest('.fonts').hide().next().show(); + }, + + showFonts : function(button) { + jQuery(button).closest('.ls-box').children('.header').text('Choose a font family'); + jQuery(button).closest('.variants').hide().prev().show(); + }, + + addFonts: function(button) { + + // Get variants + var variants = jQuery(button).parent().prev().find('input:checked'); + + var apiUrl = []; + var urlVariants = []; + apiUrl.push(LS_GoogleFontsAPI.fontName.replace(/ /g, '+')); + + if(variants.length) { + apiUrl.push(':'); + variants.each(function() { + urlVariants.push( jQuery(this).siblings('span').text().toLowerCase() ); + }); + apiUrl.push(urlVariants.join(',')); + } + + LS_GoogleFontsAPI.appendToFontList( apiUrl.join('') ); + }, + + appendToFontList : function(url) { + + // Empty notice if any + jQuery('ul.ls-font-list li.ls-notice').remove(); + + var index = jQuery('ul.ls-font-list li').length - 1; + + // Append list item + var item = jQuery('ul.ls-font-list li.ls-hidden').clone(); + item.children('input:text').val(url).attr('name', 'urlParams['+index+']'); + item.children('input:checkbox').attr('name', 'onlyOnAdmin['+index+']'); + item.appendTo('ul.ls-font-list').attr('class', ''); + + // Reset search field + jQuery('.ls-font-search .right input').val(''); + + // Close pointer + jQuery('.ls-overlay').click(); + } +}; + +var lsTimeLine = { + + opened : false, + + init : function(){ + + jQuery(document).on('click', '.ls-tl-toggle', function(e) { + e.preventDefault(); + var t = jQuery(this).closest('table'); + var tl = jQuery(this).closest('table').find('.ls-tl'); + if( tl.eq(0).css('display') == 'none' ){ + lsTimeLine.show(t,tl); + }else{ + lsTimeLine.hide(tl); + } + }); + }, + + show : function(t,tl){ + + if( t.find('tr').length != -1 ){ + + if( t.find('tr.active').length != -1 ){ + this.opened = t.find('tr.active'); + t.find('tr.active').removeClass('active'); + }else{ + this.opened = false; + } + + var osd = parseInt( jQuery('#ls-layers .active').find('input[name="slidedelay"]').val() ); + + tl.addClass('ls-tl-active'); + tl.each(function(){ + + var slidedelay = osd; + + var percent = slidedelay / 100; + var tableWidth = '100%'; + + var tlVal = []; + var tlName = ['delayin','durationin','showuntil','durationout']; + var tlTTName = ['Delay in','Duration in','Show until','Duration out']; + + tlVal.push( parseInt( jQuery(this).closest('.ls-sublayer-wrapper').find('input[name="delayin"]').val() ) ); + tlVal.push( parseInt( jQuery(this).closest('.ls-sublayer-wrapper').find('input[name="durationin"]').val() ) ); + tlVal.push( parseInt( jQuery(this).closest('.ls-sublayer-wrapper').find('input[name="showuntil"]').val() ) ); + tlVal.push( parseInt( jQuery(this).closest('.ls-sublayer-wrapper').find('input[name="durationout"]').val() ) ); + + var osu = tlVal[2]; + if( tlVal[2] === 0 ){ + tlVal[3] = 0; + tlVal[2] = slidedelay - ( tlVal[0] + tlVal[1] ) > 0 ? slidedelay - ( tlVal[0] + tlVal[1] ) : 0; + } + + if( slidedelay > tlVal[0] + tlVal[1] + tlVal[2] + tlVal[3] ){ + tableWidth = ( tlVal[0] + tlVal[1] + tlVal[2] + tlVal[3] ) / percent + '%'; + } + + jQuery(this).find('table').css({ + width : tableWidth + }); + + for(var x = 0; x').addClass('ls-tl-ruler').appendTo( t.find('tr:eq(0) td') ); + var rn = osd%1000 === 0 ? osd/1000 + 1 : parseInt( osd/1000 ) + 2; + var l, d, ms; + + for( var r=0; r').css({ + top: -5, + left: l, + height: h+6 + }).appendTo( tr ); + jQuery('

              ').text( ms+' ms' ).appendTo( d ); + } + + } + }, + + hide : function(tl){ + tl.removeClass('ls-tl-active'); + jQuery('.ls-tl-ruler').remove(); + if( this.opened && jQuery('#ls-layers .active .ls-sublayers tr.active').length == 0 ){ + this.opened.addClass('active'); + } + this.opened = false; + }, + + create : function(){ + var tls = jQuery('

              ').addClass('ls-tl-slider').appendTo('.ls-tl-active'); +// var timer = jQuery('
              ').addClass('ls-tl-timer').appendTo('.ls-tl-slider:eq(0)'); + }, + + start : function(d){ + var slidedelay = parseInt( jQuery('#ls-layers .active').find('input[name="slidedelay"]').val() ); + var tls = jQuery('.ls-tl-slider'); + var w = jQuery('.ls-tl-active:eq(0)').width(); + var d = d ? d : 0; + + tls.css({ + width: 0 + }).delay(d).animate({ + width : w + }, slidedelay, 'linear' ); +/* + var timer; + + var t = function(){ + timer = parseInt( (tls.eq(0).width() / w * slidedelay)/50 ) * 50 + 50; + setTimeout(function(){ + console.log('s') + jQuery('.ls-tl-timer').text( timer + ' ms'); + if( timer < slidedelay ){ + t(); + }else{ + jQuery('.ls-tl-timer').text( slidedelay + ' ms'); + } + },50); + }; + + t(); +*/ + }, + + remove : function(){ + jQuery('.ls-tl-slider').stop().remove(); + } +}; + +var LS_CodeMirror = { + + init : function(settings) { + + var defaults = { + mode: 'css', + theme: 'solarized', + lineNumbers: true, + autofocus: true, + indentUnit: 4, + indentWithTabs: true, + foldGutter: true, + gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], + styleActiveLine: true, + extraKeys: { + "Ctrl-Q": function(cm) { + cm.foldCode(cm.getCursor()); + } + } + } + + if(typeof settings !== "undefined") { + jQuery.extend(defaults, settings); + } + + jQuery('.ls-codemirror').each(function() { + CodeMirror.fromTextArea(this, defaults); + }); + } +}; + +var LS_PostOptions = { + + init : function() { + + jQuery('#ls-layers').on('click', '.ls-configure-posts', function(e) { + e.preventDefault(); LS_PostOptions.open(this); + }); + + jQuery('.ls-configure-posts-modal .header a').click(function(e) { + e.preventDefault(); LS_PostOptions.close(); + }); + + jQuery('#ls-post-options select:not(.ls-post-taxonomy, .post_offset)').change(function() { + LS_PostOptions.change(this); + }); + + jQuery('#ls-post-options select.offset').change(function() { + jQuery('#ls-layers .ls-layer-box.active input[name="post_offset"]').val( jQuery(this).val() ); + LayerSlider.willGeneratePreview( jQuery('.ls-layer-box.active').index() ); + }); + + jQuery('#ls-post-options select.ls-post-taxonomy').change(function() { + LS_PostOptions.getTaxonoies(this); + }); + + jQuery('#ls-layers').on('click', '.ls-post-placeholders li', function() { + LS_PostOptions.insertPlaceholder(this); + }); + }, + + open : function(el) { + + // Create overlay + jQuery('body').prepend(jQuery('
              ', { 'class' : 'ls-overlay'})); + + // Get slide's post offset + var offset = jQuery('#ls-layers .ls-layer-box.active input[name="post_offset"]').val(); + offset = parseInt(offset) + 1; + + // Show modal window + var modal = jQuery('#ls-post-options').show(); + modal.find('select.offset option').prop('selected', false).eq(offset).prop('selected', true); + + // Close event + jQuery(document).one('click', '.ls-overlay', function() { + LS_PostOptions.close(); + }); + + // First open? + if(modal.find('.ls-post-previews ul').children().length === 0) { + LS_PostOptions.change( modal.find('select')[0] ); + } + }, + + getTaxonoies : function(select) { + + var target = jQuery(select).next().empty(); + + if(jQuery(select).val() == 0) { + LS_PostOptions.change(select); + + } else { + + jQuery.post(ajaxurl, jQuery.param({ action : 'ls_get_taxonomies', taxonomy : jQuery(select).val() }), function(data) { + var data = jQuery.parseJSON(data); + for(c = 0; c < data.length; c++) { + target.append( jQuery('
            • ') + .append( jQuery('

              ', { 'text' : 'No posts were found with the current filters.' }) ) + ); + + } else { + for(c = 0; c < data.length; c++) { + preview.append( jQuery('
            • ') + .append( jQuery('', { 'class' : 'counter', 'text' : ''+(c+1)+'. ' })) + .append( jQuery('', { 'src' : data[c]['thumbnail'] } )) + .append( jQuery('

              ', { 'text' : data[c]['title'] } )) + .append( jQuery('

              ', { 'text' : data[c]['content'] } )) + .append( jQuery('', { 'class' : 'author', 'text' : data[c]['date-published']+' by '+data[c]['author'] } )) + ); + } + } + }, + + close : function() { + jQuery('#ls-post-options').hide(); + jQuery('.ls-overlay').remove(); + }, + + insertPlaceholder : function(el) { + + var element = jQuery(el).closest('.ls-sublayer-page').find('textarea[name="html"]')[0]; + var text = (typeof jQuery(el).data('placeholder') != "undefined") ? jQuery(el).data('placeholder') : jQuery(el).children().text(); + + if (document.selection) { + element.focus(); + var sel = document.selection.createRange(); + sel.text = text; + element.focus(); + } else if (element.selectionStart || element.selectionStart === 0) { + var startPos = element.selectionStart; + var endPos = element.selectionEnd; + var scrollTop = element.scrollTop; + element.value = element.value.substring(0, startPos) + text + element.value.substring(endPos, element.value.length); + element.focus(); + element.selectionStart = startPos + text.length; + element.selectionEnd = startPos + text.length; + element.scrollTop = scrollTop; + } else { + element.value += text; + element.focus(); + } + + jQuery(element).keyup(); + } +}; + + +jQuery(document).ready(function() { + + + // Global + + // Tooltips + if(lsScreenOptions['showTooltips'] == 'true') { + lsTooltip.init(); + } + + // Screen options + jQuery('#ls-screen-options').children().first().appendTo('#screen-meta'); + jQuery('#ls-screen-options').children().last().appendTo('#screen-meta-links'); + + // Screen option actions + lsScreenOptionsActions.init(); + + // CodeMirror + if(document.location.href.indexOf('&action=edit') === -1) { + LS_CodeMirror.init(); + } + + // Checkbox event + jQuery(document).on('click', '.ls-checkbox', function(e){ + + // Prevent browers default submission + e.preventDefault(); + + // Get checkbox + var el = jQuery(this).prev()[0]; + + if( jQuery(el).is(':checked') ) { + jQuery(el).prop('checked', false); + jQuery(this).removeClass('on').addClass('off'); + } else { + jQuery(el).prop('checked', true); + jQuery(this).removeClass('off').addClass('on'); + } + + // Trigger events + jQuery('#ls-layers').trigger( jQuery.Event('click', { target : el } ) ); + jQuery(document).trigger( jQuery.Event('click', { target : el } ) ); + }); + + + // List view + if( + document.location.href.indexOf('page=layerslider') != -1 && + document.location.href.indexOf('layerslider_add_new') == -1 && + document.location.href.indexOf('action=edit') == -1 && + document.location.href.indexOf('ls-skin-editor') == -1 && + document.location.href.indexOf('ls-style-editor') == -1 && + document.location.href.indexOf('ls-transition-builder') == -1 + ) { + + LS_BoxToggles.init(); + + // Checkboxes + jQuery('.ls-global-settings :checkbox').customCheckbox(); + jQuery('.ls-google-fonts :checkbox').customCheckbox(); + + + // Google Fonts API + LS_GoogleFontsAPI.init(); + + // Slider remove + jQuery('.ls-sliders-list a.remove').click(function(e) { + e.preventDefault(); + if(confirm('Are you sure you want to remove this slider?')){ + document.location.href = jQuery(this).attr('href'); + } + }); + + // Add slider + jQuery('#ls-add-slider-button').click(function(e) { + e.preventDefault(); + var offsets = jQuery(this).position(); + var popup = jQuery('#ls-add-slider-template'); + + popup.css({ + top : offsets.top + 35, + left : offsets.left - popup.outerWidth() / 2 + jQuery(this).width() / 2 + 7 + }).show().animate({ marginTop : 0, opacity : 1 }, 150); + + jQuery('

              ', { 'class' : 'ls-overlay ls-add-slider-overlay'}).prependTo('body'); + }); + + // Close add slider window + jQuery(document).on('click', '.ls-overlay', function() { + if(jQuery('.ls-pointer').length) { + jQuery('.ls-overlay').remove(); + jQuery('.ls-pointer').animate({ marginTop : 40, opacity : 0 }, 150); + } + }); + + // Auto-update + jQuery('.ls-auto-update').submit(function(e) { + + // Prevent browser default submission + e.preventDefault(); + + // Set progress text + jQuery('.ls-auto-update tfoot span').text('Validating ...').css('color', '#333'); + + // Post it + jQuery.post( ajaxurl, jQuery(this).serialize(), function(data) { + + // Parse data + data = jQuery.parseJSON(data); + + // Check success + jQuery('.ls-auto-update .footer span').text(data['message']); + + // Check success + if(data['success'] == true) { + jQuery('.ls-auto-update .footer span').css('color', '#4b982f'); + } else { + jQuery('.ls-auto-update .footer span').css('color', '#c33219'); + } + }); + }); + + // Permission form + jQuery('#ls-permission-form').submit(function(e) { + e.preventDefault(); + if(confirm('WARNING: This option controls who can access to this plugin, you can easily lock out yourself by accident. Please, make sure that you have entered a valid capability without whitespaces or other invalid characters. Do you want to proceed?')) { + this.submit(); + } + }); + + // News filters + jQuery('.ls-news .filters li').click(function() { + + // Highlight + jQuery(this).siblings().attr('class', ''); + jQuery(this).attr('class', 'active'); + + // Get stuff + var page = jQuery(this).data('page'); + var frame = jQuery(this).closest('.ls-box').find('iframe'); + var baseUrl = frame.attr('src').split('#')[0]; + + // Set filter + frame.attr('src', baseUrl+'#'+page); + + }); + + // Skin editor + } else if( + document.location.href.indexOf('ls-skin-editor') != -1 || + document.location.href.indexOf('ls-style-editor') != -1 + ) { + + // Select + jQuery('select[name="skin"]').change(function() { + document.location.href = 'admin.php?page=ls-skin-editor&skin=' + jQuery(this).children(':selected').val(); + }); + + + // Transition builder + } else if(document.location.href.indexOf('ls-transition-builder') != -1) { + + // Editor view + } else { + + // URL rewrite after creating slider + if( history.replaceState ) { + if(document.location.href.indexOf('&showsettings=1') != -1) { + var url = document.location.href.replace('&showsettings=1', ''); + history.replaceState(null, document.title, url); + } + } + + // Main tab bar page select + jQuery('#ls-main-nav-bar a:not(.unselectable)').click(function(e) { + e.preventDefault(); LayerSlider.selectMainTab( this ); + }); + + // Generate preview if user resizes the browser + jQuery(window).resize(function(){ + // LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() ); + }); + + // Support menu + jQuery('#ls-main-nav-bar a.support').click(function(e) { + e.preventDefault(); jQuery('#contextual-help-link').click(); + }); + + // Settings: checkboxes + jQuery('.ls-settings :checkbox, .ls-layer-box :checkbox:not(.noreplace)').customCheckbox(); + + // Generate preview + jQuery(window).load(function() { + LayerSlider.generatePreview( jQuery('.ls-box.active').index() ); + }); + + // Uploads + LayerSlider.openMediaLibrary(); + LayerSlider.insertUpload(); + + // Clear uploaded image + jQuery(document).on({ + mouseenter : function() { + if(jQuery(this).prev().val() != '') { + jQuery(this).addClass('hover'); + } + }, + mouseleave : function() { + if(jQuery(this).prev().val() != '') { + jQuery(this).removeClass('hover'); + } + } + }, '.ls-image'); + jQuery(document).on('click', '.ls-image a', function(e) { + e.preventDefault(); + e.stopPropagation(); + jQuery(this).closest('.ls-image').removeClass('hover'); + jQuery(this).closest('.ls-image').find('img').attr('src', lsTrImgPath+'/not_set.png'); + jQuery(this).closest('.ls-image').prev().val(''); + jQuery(this).closest('.ls-image').prev().prev().val(''); + LayerSlider.generatePreview( jQuery('.ls-box.active').index() ); + }); + + // Settings: width, height + jQuery('.ls-settings').find('input[name="width"], input[name="height"], input[name="sublayercontainer"]').keyup(function() { + LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() ); + }); + + // Settings: backgroundColor + jQuery('.ls-settings input[name="backgroundcolor"]').keyup(function() { + LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() ); + }); + + // Settings: reset button + jQuery(document).on('click', '.ls-reset', function() { + + // Empty field + jQuery(this).prev().val(''); + + // Generate preview + LayerSlider.generatePreview( jQuery('.ls-box.active').index() ); + }); + + // Settings: yourLogoStyle + jQuery('.ls-settings input[name="yourlogostyle"]').keyup(function() { + LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() ); + }); + + // Add layer + jQuery('#ls-add-layer').click(function(e) { + e.preventDefault(); + LayerSlider.addLayer(); + }); + + // Select layer + jQuery('#ls-layer-tabs').on('click', 'a:not(.unsortable)', function(e) { + e.preventDefault(); + LayerSlider.selectLayer(this); + }); + + // Duplicate layer + jQuery('#ls-layers').on('click', '.ls-layer-options-thead a.duplicate', function(e){ + e.preventDefault(); + LayerSlider.duplicateLayer(this); + }); + + // Enter URL + jQuery('#ls-layers').on('click', '.ls-url-prompt', function(e){ + e.preventDefault(); + var $target = null; + var url = prompt('Enter an image URL'); + if(!url || url == '') { return false; } + + // Slide options + if(jQuery(this).parent().is('td')) { + $target = jQuery(this).parent().next(); + + // Image layer + } else if(jQuery(this).parent().parent().is('.ls-image-uploader')) { + $target = jQuery(this).closest('.ls-image-uploader'); + } + + $target.children('input').eq(0).val(''); + $target.children('input').eq(1).val(url); + $target.find('.ls-image img').attr('src', url); + LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() ); + }); + + // Open Transition gallery + jQuery('#ls-layers').on('click', '.ls-select-transitions', function(e) { + e.preventDefault(); + LayerSlider.openTransitionGallery(); + }); + + // Close transition gallery + jQuery(document).on('click', '#ls-transition-window h1 a', function(e) { + e.preventDefault(); + LayerSlider.closeTransitionGallery(); + }); + + // Add/Remove layer transitions + jQuery(document).on('click', '#ls-transition-window tbody a:not(.ls-checkbox)', function(e) { + e.preventDefault(); + LayerSlider.toggleTransition(this); + }); + + // Add/Remove layer transitions + jQuery(document).on('click', '#ls-transition-window .ls-checkbox', function(e) { + e.preventDefault(); + LayerSlider.selectAllTransition( jQuery(this).closest('tbody').index() ); + }); + + // Show transition + jQuery(document).on('mouseenter', '#ls-transition-window table a:not(.ls-checkbox)', function() { + LayerSlider.showTransition(this); + }); + + // Hide transition + jQuery(document).on('mouseleave', '#ls-transition-window table a:not(.ls-checkbox)', function() { + LayerSlider.hideTransition(this); + }); + + // Add sublayer + jQuery('#ls-layers').on('click', '.ls-add-sublayer', function(e) { + e.preventDefault(); + LayerSlider.addSublayer(this); + }); + + // Remove layer + jQuery('#ls-layer-tabs').on('click', 'a span', function(e) { + e.preventDefault(); + e.stopPropagation(); + LayerSlider.removeLayer(this); + }); + + + // Select sublayer + jQuery('#ls-layers').on('click', '.ls-sublayers tr', function() { + LayerSlider.selectSubLayer(this); + }); + + + // Sublayer pages + jQuery('#ls-layers').on('click', '.ls-sublayer-nav a:not(:last-child)', function(e) { + e.preventDefault(); + LayerSlider.selectSublayerPage(this); + }); + + // Remove sublayer + jQuery('#ls-layers').on('click', '.ls-sublayer-nav a:last-child', function(e) { + e.preventDefault(); + LayerSlider.removeSublayer(this); + }); + + // Duplicate sublayer + jQuery('#ls-layers').on('click', '.ls-sublayer-options button.duplicate', function(e) { + e.preventDefault(); + LayerSlider.duplicateSublayer(this); + }); + + // Highlight sublayer + jQuery('#ls-layers').on('click', '.ls-highlight', function(e) { + e.stopPropagation(); + LayerSlider.highlightSublayer(this); + }); + + // Sublayer media type + jQuery('#ls-layers').on('click', '.ls-layer-kind li', function(e) { + e.preventDefault(); + LayerSlider.selectMediaType(this); + }); + + // Sublayer element type + jQuery('#ls-layers').on('click', '.ls-sublayer-element > li', function(e) { + e.preventDefault(); + LayerSlider.selectElementType(this); + }); + + // Restore sublayer media type + jQuery('#ls-layers .ls-sublayer-basic').each(function() { + + var kind = jQuery('input[name="media"]', this).val(); + var type = jQuery('input[name="type"]', this).val(); + var kindEl = jQuery('.ls-layer-kind li[data-section="'+kind+'"]', this); + var typeEl = jQuery('.ls-sublayer-element > li[data-element="'+type+'"]', this); + + LayerSlider.selectMediaType(kindEl); + LayerSlider.selectElementType(typeEl); + }); + + // Sublayer: Style + jQuery('#ls-layers').on('keyup', '.ls-sublayer-style input, .ls-sublayer-style select, .ls-sublayer-style textarea', function() { + LayerSlider.willGeneratePreview( jQuery(this).closest('.ls-layer-box').index() ); + }); + + // Sublayer: WordWrap + jQuery('#ls-layers').on('click', '.ls-sublayers input[name="wordwrap"]', function() { + LayerSlider.generatePreview( jQuery(this).closest('.ls-layer-box').index() ); + }); + + // Sublayer: HTML + jQuery('#ls-layers').on('keyup', '.ls-sublayers textarea[name="html"]', function() { + LayerSlider.willGeneratePreview( jQuery(this).closest('.ls-layer-box').index() ); + }); + + // Post content text length + jQuery('#ls-layers').on('keydown change', '.ls-sublayers input[name="post_text_length"]', function() { + LayerSlider.willGeneratePreview( jQuery(this).closest('.ls-layer-box').index() ); + }); + + // Sublayer: sortables, draggable, etc + LayerSlider.addSortables(); + LayerSlider.addDraggable(); + LayerSlider.addLayerSortables(); + + // Sublayer: skip + jQuery('#ls-layers').on('click', '.ls-sublayer-options input[name="skip"]', function() { + LayerSlider.skipSublayer(this); + }); + + // Preview + jQuery('#ls-layers').on('click', '.ls-preview-button', function(e) { + e.preventDefault(); + LayerSlider.play( jQuery(this).closest('.ls-layer-box').index() ); + }); + + // Preview drag element select + jQuery('#ls-layers').on('click', '.draggable > *', function(e) { + e.preventDefault(); + LayerSlider.selectDragElement(this); + }); + + // Save changes + jQuery('#ls-slider-form').submit(function(e) { + e.preventDefault(); + LayerSlider.save(this); + }); + + // Add color picker + LayerSlider.addColorPicker( jQuery('#ls-slider-form input.ls-colorpicker') ); + + + // Show color picker on focus + jQuery('.color').focus(function() { + jQuery(this).next().slideDown(); + }); + + // Show color picker on blur + jQuery('.color').blur(function() { + jQuery(this).next().slideUp(); + }); + + // Eye icon for layers + jQuery('#ls-layers').on('click', '.ls-icon-eye', function(e) { + e.stopPropagation(); + LayerSlider.eyeSublayer(this); + }); + + // Lock icon for layers + jQuery('#ls-layers').on('click', '.ls-icon-lock', function(e) { + e.stopPropagation(); + LayerSlider.lockSublayer(this); + }); + + jQuery('ul.ls-settings-sidebar > li').click(function() { + LayerSlider.selectSettingsTab(this); + }); + + // Collapse layer before sorting + jQuery('#ls-layers').on('mousedown', '.ls-sublayer-sortable-handle', function(){ + jQuery(this).closest('.ls-sublayers').addClass('dragging'); + }); + + + // Expand layer after sorting + jQuery('#ls-layers').on('mouseup', '.ls-sublayer-sortable-handle', function(){ + jQuery('#ls-layers .ls-layer-box.active .ls-sublayer-sortable').removeClass('dragging'); + }); + + // Timeline + lsTimeLine.init(); + LS_PostOptions.init(); + LayerSlider.addPreviewSlider( jQuery('#ls-layers .ls-editor-slider') ); + } + +}); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/admin_layout.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/admin_layout.js new file mode 100644 index 0000000..2de9e39 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/admin_layout.js @@ -0,0 +1,17 @@ +jQuery(document).ready(function($) { + + // Collapse sidebar + $('body').addClass('folded'); + + // Add hover event + $('#adminmenu').hover( + function() { $('body').removeClass('folded'); }, + function() { + setTimeout(function() { + $('body').addClass('folded'); + }, 1500); + } + ); + + // Restore when leaving the page +}); \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/builder.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/builder.js new file mode 100644 index 0000000..e09507b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/builder.js @@ -0,0 +1,534 @@ +(function( $ ) { + var radioCheck = /radio|checkbox/i, + keyBreaker = /[^\[\]]+/g, + numberMatcher = /^[\-+]?[0-9]*\.?[0-9]+([eE][\-+]?[0-9]+)?$/; + + var isNumber = function( value ) { + if ( typeof value == 'number' ) { + return true; + } + + if ( typeof value != 'string' ) { + return false; + } + + return value.match(numberMatcher); + }; + + $.fn.extend({ + /** + * @parent dom + * @download http://jmvcsite.heroku.com/pluginify?plugins[]=jquery/dom/form_params/form_params.js + * @plugin jquery/dom/form_params + * @test jquery/dom/form_params/qunit.html + *

              Returns an object of name-value pairs that represents values in a form. + * It is able to nest values whose element's name has square brackets.

              + * Example html: + * @codestart html + * <form> + * <input name="foo[bar]" value='2'/> + * <input name="foo[ced]" value='4'/> + * <form/> + * @codeend + * Example code: + * @codestart + * $('form').formParams() //-> { foo:{bar:2, ced: 4} } + * @codeend + * + * @demo jquery/dom/form_params/form_params.html + * + * @param {Boolean} [convert] True if strings that look like numbers and booleans should be converted. Defaults to true. + * @return {Object} An object of name-value pairs. + */ + formParams: function( convert ) { + if ( this[0].nodeName.toLowerCase() == 'form' && this[0].elements ) { + + return jQuery(jQuery.makeArray(this[0].elements)).getParams(convert); + } + return jQuery("input[name], textarea[name], select[name]", this[0]).getParams(convert); + }, + getParams: function( convert ) { + var data = {}, + current; + + convert = convert === undefined ? true : convert; + + this.each(function() { + var el = this, + type = el.type && el.type.toLowerCase(); + //if we are submit, ignore + if ((type == 'submit') || !el.name ) { + return; + } + + var key = el.name, + value = $.data(el, "value") || $.fn.val.call([el]), + isRadioCheck = radioCheck.test(el.type), + parts = key.match(keyBreaker), + write = !isRadioCheck || !! el.checked, + //make an array of values + lastPart; + + if ( convert ) { + if ( isNumber(value) ) { + value = parseFloat(value); + } else if ( value === 'true' || value === 'false' ) { + value = Boolean(value); + } + + } + + // go through and create nested objects + current = data; + for ( var i = 0; i < parts.length - 1; i++ ) { + if (!current[parts[i]] ) { + current[parts[i]] = {}; + } + current = current[parts[i]]; + } + lastPart = parts[parts.length - 1]; + + //now we are on the last part, set the value + if ( lastPart in current && type === "checkbox" ) { + if (!$.isArray(current[lastPart]) ) { + current[lastPart] = current[lastPart] === undefined ? [] : [current[lastPart]]; + } + if ( write ) { + current[lastPart].push(value); + } + } else if ( write || !current[lastPart] ) { + current[lastPart] = write ? value : undefined; + } + + }); + return data; + } + }); + +})(jQuery) + +var lsTrBuilder = { + + selectTransition : function(el) { + + // Get parent + var parent = jQuery(el).hasClass('3d') ? jQuery('.ls-tr-list-3d') : jQuery('.ls-tr-list-2d'); + + // Get index + var index = jQuery(el).find('option:selected').index(); + + // Stop preview + lsTrBuilder.stopPreview( parent.children('.active') ); + + // Hide the previous transition box + jQuery(parent).children().removeClass('active') + + // Show the new one + jQuery(parent).children().eq(index).addClass('active') + }, + + addTransition : function(el) { + + // Get select + var select = jQuery(el).prev(); + + // Get parent + var parent = jQuery(el).hasClass('3d') ? jQuery('.ls-tr-list-3d') : jQuery('.ls-tr-list-2d'); + + + // Remove notification if any + if(parent.find('.ls-no-transitions-notification').length) { + + // Remove notification + parent.children('.ls-no-transitions-notification').remove(); + + // Remove option from select + select.children('.notification').remove(); + } + + // Get clone + var clone = jQuery(el).hasClass('3d') ? jQuery('#ls-tr-sample-3d') : jQuery('#ls-tr-sample-2d'); + + // Append clone + var tr = clone.children().clone().appendTo(parent); + + // Find tr name + var name = tr.find('input[name="name"]').val(); + + // Stop current preview + lsTrBuilder.stopPreview(parent); + + // Append tr to list and select it + select.children().prop('selected', false); + jQuery( jQuery('
              ', { 'class' : 'ls-no-transitions-notification' }) + .append( jQuery('

              ', { 'text' : textNotification })) + .append( jQuery('

              ', { 'text' : 'To create a new transition, click to the "Add new" button above this text.' })) + + ); + + } + + }, + + toggleTableGroup : function(el) { + + // Get tbody + var tbody = jQuery(el).closest('thead').next(); + + if(tbody.hasClass('ls-builder-collapsed')) { + tbody.removeClass('ls-builder-collapsed'); + } else { + tbody.addClass('ls-builder-collapsed'); + } + }, + + addProperty : function(el) { + + // Get list + var list = jQuery(el).parent().prev(); + + // Get select + var select = jQuery(el).next(); + + // Get title + var title = select.children(':selected').text(); + + // Get name + var name = select.children(':selected').val().split(',')[0]; + + // Get value + var value = select.children(':selected').val().split(',')[1]; + + // Build tag + list.append( jQuery('

            • ') + .append( jQuery('

              ') + .append(''+title+'') + ).append( jQuery('', { 'href' : '#', 'text' : 'x' }) ) + ); + }, + + removeProperty : function(el) { + + jQuery(el).closest('li').remove(); + }, + + storeNameAttrs : function() { + + jQuery('.wrap form').find('input,select').each(function() { + jQuery(this).data('originalName', jQuery(this).attr('name')); + }); + }, + + restoreNameAttrs : function() { + + jQuery('.wrap form').find('input,select').each(function() { + jQuery(this).attr('name', jQuery(this).data('originalName')); + }); + }, + + + serializeTransitions : function(el) { + + // Iterate over 2D transitions + jQuery('.ls-tr-list-2d table').each(function(index) { + + // Basic + jQuery(this).find('tbody.basic input').each(function() { + jQuery(this).attr('name', 't2d['+index+']['+jQuery(this).attr('name')+']'); + }); + + // Iterate over other sections + jQuery(this).find('tbody:gt(1)').each(function() { + + // Get section name + if(typeof jQuery(this).attr('class') != "undefined") { + + var section = jQuery(this).attr('class'); + // Iterate over the fields + jQuery(this).find('input,select').each(function() { + jQuery(this).attr('name', 't2d['+index+']['+section+']['+jQuery(this).attr('name')+']'); + }); + } + }); + }); + + // Iterate over 3D transitions + jQuery('.ls-tr-list-3d table').each(function(index) { + + // Basic + jQuery(this).find('tbody.basic input').each(function() { + jQuery(this).attr('name', 't3d['+index+']['+jQuery(this).attr('name')+']'); + }); + + // Iterate over other sections + jQuery(this).find('tbody:gt(1)').each(function() { + + if(typeof jQuery(this).attr('class') != "undefined") { + + // Get section name + var section = jQuery(this).attr('class').split(' ')[0]; + + // Iterate over the fields + jQuery(this).find('input,select').each(function() { + + // Basic field + if(jQuery(this).closest('tr.transition').length == 0) { + jQuery(this).attr('name', 't3d['+index+']['+section+']['+jQuery(this).attr('name')+']'); + + // Transition field + } else if(jQuery(this).is('input')) { + jQuery(this).attr('name', 't3d['+index+']['+section+'][transition]['+jQuery(this).attr('name')+']'); + } + }); + + // Thead options + jQuery(this).prev().find('input').each(function() { + jQuery(this).attr('name', 't3d['+index+']['+section+'][enabled]'); + }); + } + }); + }); + }, + + stopPreview : function(el) { + + // Get transition element + if(jQuery(el).is('button')) { + el = jQuery(el).closest('.ls-transition-item'); + } + + // Get button + var button = jQuery(el).find('.ls-builder-preview-button button'); + + if(button.hasClass('playing')) { + + // Set stopped class + button.text('Enter Preview').removeClass('playing'); + + // Remove the preview + jQuery(el).find('.ls-builder-preview').lsTransitionPreview('stop'); + + // Place preview image + jQuery(el).find('.ls-builder-preview').append( jQuery('', { 'src' : lsTrImgPath + 'sample_slide_1.png' })); + } + }, + + startPreview : function(el) { + + // Check playing status + if(jQuery(el).hasClass('playing')) { + lsTrBuilder.stopPreview(el); + return; + } + + // Set playing class + jQuery(el).text('Exit Preview').addClass('playing'); + + // Get transitions item + var item = jQuery(el).closest('.ls-transition-item'); + + // Get tr index + var index = jQuery(item).index(); + + // Get type + var trtype = jQuery(item).closest('.ls-tr-list-3d').length ? '3d' : '2d'; + + // Store name attrs + lsTrBuilder.storeNameAttrs(); + + // Serialize + lsTrBuilder.serializeTransitions(); + + // Get transition + var trObj = jQuery(item).formParams(); + trObj = trObj['t'+trtype+''][index]; + + if(trtype == '3d') { + if(typeof trObj['before']['enabled'] == "undefined") { + trObj['before'] = {}; + } + + if(typeof trObj['after']['enabled'] == "undefined") { + trObj['after'] = {}; + } + } + //console.log(JSON.stringify(trObj)); + // Restore name attrs + lsTrBuilder.restoreNameAttrs(); + + // Try preview + try { + jQuery(item).find('.ls-builder-preview').empty(); + jQuery(item).find('.ls-builder-preview').lsTransitionPreview({ + transitionType : trtype, + transitionObject : trObj, + imgPath : lsTrImgPath, + skinsPath: lsTrImgPath+'../skins/', + delay : 100 + }); + } catch(err) { + + // Stop preview + lsTrBuilder.stopPreview(item); + + // Show error message + alert('Oops, something went wrong, please check your transitions settings and enter valid values. Error: '+err); + } + }, + + save : function(el) { + + // Store name attrs + lsTrBuilder.storeNameAttrs(); + + // Temporary disable submit button + jQuery('.ls-publish button').text('Saving ...').addClass('saving').attr('disabled', true); + jQuery('.ls-saving-warning').text('Please do not navigate away from this page while LayerSlider WP saving your transitions!'); + + // Serialize + lsTrBuilder.serializeTransitions(); + + // Post + jQuery.post( jQuery(el).attr('action'), jQuery(el).serialize(), function() { + + // Give feedback + jQuery('.ls-publish button').text('Saved').removeClass('saving').addClass('saved'); + jQuery('.ls-saving-warning').text(''); + + // Re-enable the button + setTimeout(function() { + jQuery('.ls-publish button').text('Save changes').attr('disabled', false).removeClass('saved'); + }, 2000); + + // Restore name attrs + lsTrBuilder.restoreNameAttrs(); + }); + } +}; + +jQuery(document).ready(function() { + + // Transition select + jQuery('.ls-tr-builder-tr-select').change(function() { + lsTrBuilder.selectTransition(this); + }); + + // Add transition + jQuery('.ls-tr-builder-add-tr').click(function(e) { + e.preventDefault(); + lsTrBuilder.addTransition(this); + }); + + // Remove transition + jQuery('.ls-tr-builder').on('click', '.ls-tr-remove', function(e) { + e.preventDefault(); + lsTrBuilder.removeTransition(this); + }); + + // Collapsable toggles + jQuery('.ls-tr-builder').on('click', '.ls-builder-collapse-toggle', function() { + lsTrBuilder.toggleTableGroup(this); + }); + + // Add property + jQuery('.ls-tr-builder').on('click', '.ls-tr-add-property a', function(e) { + e.preventDefault(); + lsTrBuilder.addProperty(this); + }); + + // Remove property + jQuery('.ls-tr-builder').on('click', '.ls-tr-tags a', function(e) { + e.preventDefault(); + lsTrBuilder.removeProperty(this); + }); + + // Start preview + jQuery('.ls-tr-builder').on('click', '.ls-builder-preview-button button', function(e) { + e.preventDefault(); + lsTrBuilder.startPreview(this); + }); + + // Form submit + jQuery('#ls-tr-builder-form').submit(function(e) { + e.preventDefault(); + lsTrBuilder.save(this); + }) +}); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/greensock.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/greensock.js new file mode 100644 index 0000000..164387d --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/greensock.js @@ -0,0 +1,14 @@ +/*! + * VERSION: 1.11.2 + * DATE: 2013-11-20 + * UPDATES AND DOCS AT: http://www.greensock.com + * + * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ + + +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(17(e){"5v 5u";19 t=e.6h||e;1a(!t.5c){19 n,r,i,s,o,u=17(e){19 n,r=e.1s("."),i=t;1b(n=0;r.1c>n;n++)i[r[n]]=i=i[r[n]]||{};18 i},a=u("4F.4A"),f=1e-10,l=[].6G,c=17(){},h=17(){19 e=9h.1x.9i,t=e.1Z([]);18 17(n){18 n 2a 3K||"3T"==1j n&&!!n.28&&e.1Z(n)===t}}(),p={},d=17(n,r,i,s){15.4v=p[n]?p[n].4v:[],p[n]=15,15.5a=1d,15.76=i;19 o=[];15.5F=17(a){1b(19 f,l,c,h,v=r.1c,m=v;--v>-1;)(f=p[r[v]]||1g d(r[v],[])).5a?(o[v]=f.5a,m--):a&&f.4v.28(15);1a(0===m&&i)1b(l=("4F.4A."+n).1s("."),c=l.4G(),h=u(l.1G("."))[c]=15.5a=i.36(i,o),s&&(t[c]=h,"17"==1j 5V&&5V.9j?5V((e.8F?e.8F+"/":"")+n.1s(".").1G("/"),[],17(){18 h}):"9f"!=1j 5E&&5E.8A&&(5E.8A=h)),v=0;15.4v.1c>v;v++)15.4v[v].5F()},15.5F(!0)},v=e.3R=17(e,t,n,r){18 1g d(e,t,n,r)},m=a.7W=17(e,t,n){18 t=t||17(){},v(e,[],17(){18 t},n),t};v.97=t;19 g=[0,0,1,1],y=[],b=m("2j.7v",17(e,t,n,r){15.5B=e,15.6j=n||0,15.6g=r||0,15.5C=t?g.3U(t):g},!0),w=b.7Z={},E=b.7X=17(e,t,n,r){1b(19 i,s,o,u,f=t.1s(","),l=f.1c,c=(n||"5s,5R,5r").1s(",");--l>-1;)1b(s=f[l],i=r?m("2j."+s,1d,!0):a.2j[s]||{},o=c.1c;--o>-1;)u=c[o],w[s+"."+u]=w[u+s]=i[u]=e.2x?e:e[u]||1g e};1b(i=b.1x,i.3m=!1,i.2x=17(e){1a(15.5B)18 15.5C[0]=e,15.5B.36(1d,15.5C);19 t=15.6j,n=15.6g,r=1===t?1-e:2===t?e:.5>e?2*e:2*(1-e);18 1===n?r*=r:2===n?r*=r*r:3===n?r*=r*r*r:4===n&&(r*=r*r*r*r),1===t?1-r:2===t?r:.5>e?r/2:1-r/2},n=["8u","8w","9a","9c","9l,9x"],r=n.1c;--r>-1;)i=n[r]+",9y"+r,E(1g b(1d,1d,1,r),i,"5R",!0),E(1g b(1d,1d,2,r),i,"5s"+(0===r?",96":"")),E(1g b(1d,1d,3,r),i,"5r");w.9s=a.2j.8u.5s,w.9o=a.2j.8w.5r;19 S=m("8m.8q",17(e){15.40={},15.8r=e||15});i=S.1x,i.8M=17(e,t,n,r,i){i=i||0;19 u,a,f=15.40[e],l=0;1b(1d==f&&(15.40[e]=f=[]),a=f.1c;--a>-1;)u=f[a],u.c===t&&u.s===n?f.2W(a,1):0===l&&i>u.2s&&(l=a+1);f.2W(l,0,{c:t,s:n,8o:r,2s:i}),15!==s||o||s.3a()},i.9n=17(e,t){19 n,r=15.40[e];1a(r)1b(n=r.1c;--n>-1;)1a(r[n].c===t)18 r.2W(n,1),2u 0},i.8C=17(e){19 t,n,r,i=15.40[e];1a(i)1b(t=i.1c,n=15.8r;--t>-1;)r=i[t],r.8o?r.c.1Z(r.s||n,{2r:e,2v:n}):r.c.1Z(r.s||n)};19 x=e.9z,T=e.8S,N=8l.95||17(){18(1g 8l).92()},C=N();1b(n=["64","8W","91","o"],r=n.1c;--r>-1&&!x;)x=e[n[r]+"8Z"],T=e[n[r]+"93"]||e[n[r]+"8U"];m("52",17(e,t){19 n,r,i,u,a,f=15,l=N(),h=t!==!1&&x,p=17(e){C=N(),f.3u=(C-l)/8d;19 t,s=f.3u-a;(!n||s>0||e===!0)&&(f.41++,a+=s+(s>=u?.9t:u-s),t=!0),e!==!0&&(i=r(p)),t&&f.8C("5y")};S.1Z(f),f.3u=f.41=0,f.5y=17(){p(!0)},f.4X=17(){1d!=i&&(h&&T?T(i):aa(i),r=c,i=1d,f===s&&(o=!1))},f.3a=17(){1d!==i&&f.4X(),r=0===n?c:h&&x?x:17(e){18 6p(e,0|8d*(a-f.3u)+1)},f===s&&(o=!0),p(2)},f.6f=17(e){18 22.1c?(n=e,u=1/(n||60),a=15.3u+u,f.3a(),2u 0):n},f.8e=17(e){18 22.1c?(f.4X(),h=e,f.6f(n),2u 0):h},f.6f(e),6p(17(){h&&(!i||5>f.41)&&f.8e(!1)},af)}),i=a.52.1x=1g a.8m.8q,i.2M=a.52;19 k=m("5k.72",17(e,t){1a(15.1o=t=t||{},15.1N=15.2l=e||0,15.2J=1C(t.4y)||0,15.1y=1,15.2c=t.1V===!0,15.1z=t.1z,15.2G=t.43===!0,q){o||s.3a();19 n=15.1o.5Q?I:q;n.1P(15,n.1n),15.1o.34&&15.34(!0)}});s=k.8h=1g a.52,i=k.1x,i.2o=i.1I=i.2w=i.1A=!1,i.1K=i.1n=0,i.1O=-1,i.1f=i.3h=i.32=i.1p=i.1U=1d,i.1A=!1;19 L=17(){o&&N()-C>8p&&s.3a(),6p(L,8p)};L(),i.7w=17(e,t){18 22.1c&&15.4e(e,t),15.43(!1).34(!1)},i.6c=17(e,t){18 22.1c&&15.4e(e,t),15.34(!0)},i.aB=17(e,t){18 22.1c&&15.4e(e,t),15.34(!1)},i.4e=17(e,t){18 15.2Z(1C(e),t!==!1)},i.ar=17(e,t){18 15.43(!1).34(!1).2Z(e?-15.2J:0,t!==!1,!0)},i.as=17(e,t){18 22.1c&&15.4e(e||15.26(),t),15.43(!0).34(!1)},i.1B=17(){},i.5i=17(){18 15},i.4O=17(){19 e,t=15.1p,n=15.1i;18!t||!15.1I&&!15.1A&&t.4O()&&(e=t.3y())>=n&&n+15.26()/15.1y>e},i.1M=17(e,t){18 o||s.3a(),15.1I=!e,15.2c=15.4O(),t!==!0&&(e&&!15.1U?15.1p.1P(15,15.1i-15.2J):!e&&15.1U&&15.1p.3C(15,!0)),!1},i.2p=17(){18 15.1M(!1,!1)},i.4c=17(e,t){18 15.2p(e,t),15},i.35=17(e){1b(19 t=e?15:15.1U;t;)t.2o=!0,t=t.1U;18 15},i.5o=17(e){1b(19 t=e.1c,n=e.3U();--t>-1;)"{4t}"===e[t]&&(n[t]=15);18 n},i.aw=17(e,t,n,r){1a("a8"===(e||"").1t(0,2)){19 i=15.1o;1a(1===22.1c)18 i[e];1d==t?3L i[e]:(i[e]=t,i[e+"6o"]=h(n)&&-1!==n.1G("").1k("{4t}")?15.5o(n):n,i[e+"6l"]=r),"5q"===e&&(15.32=t)}18 15},i.4y=17(e){18 22.1c?(15.1p.2F&&15.8f(15.1i+e-15.2J),15.2J=e,15):15.2J},i.2C=17(e){18 22.1c?(15.1N=15.2l=e,15.35(!0),15.1p.2F&&15.1n>0&&15.1n<15.1N&&0!==e&&15.2Z(15.1K*(e/15.1N),!0),15):(15.2o=!1,15.1N)},i.26=17(e){18 15.2o=!1,22.1c?15.2C(e):15.2l},i.3u=17(e,t){18 22.1c?(15.2o&&15.26(),15.2Z(e>15.1N?15.1N:e,t)):15.1n},i.2Z=17(e,t,n){1a(o||s.3a(),!22.1c)18 15.1K;1a(15.1p){1a(0>e&&!n&&(e+=15.26()),15.1p.2F){15.2o&&15.26();19 r=15.2l,i=15.1p;1a(e>r&&!n&&(e=r),15.1i=(15.1A?15.4D:i.1n)-(15.2G?r-e:e)/15.1y,i.2o||15.35(!1),i.1p)1b(;i.1p;)i.1p.1n!==(i.1i+i.1K)/i.1y&&i.2Z(i.1K,!0),i=i.1p}15.1I&&15.1M(!0,!1),(15.1K!==e||0===15.1N)&&15.1B(e,t,!1)}18 15},i.9N=i.9P=17(e,t){18 22.1c?15.2Z(15.2C()*e,t):15.1n/15.2C()},i.8f=17(e){18 22.1c?(e!==15.1i&&(15.1i=e,15.1U&&15.1U.4J&&15.1U.1P(15,e-15.2J)),15):15.1i},i.5N=17(e){1a(!22.1c)18 15.1y;1a(e=e||f,15.1p&&15.1p.2F){19 t=15.4D,n=t||0===t?t:15.1p.2Z();15.1i=n-(n-15.1i)*15.1y/e}18 15.1y=e,15.35(!1)},i.43=17(e){18 22.1c?(e!=15.2G&&(15.2G=e,15.2Z(15.1K,!0)),15):15.2G},i.34=17(e){1a(!22.1c)18 15.1A;1a(e!=15.1A&&15.1p){o||e||s.3a();19 t=15.1p,n=t.3y(),r=n-15.4D;!e&&t.2F&&(15.1i+=r,15.35(!1)),15.4D=e?n:1d,15.1A=e,15.2c=15.4O(),!e&&0!==r&&15.2w&&15.2C()&&15.1B(t.2F?15.1K:(n-15.1i)/15.1y,!0,!0)}18 15.1I&&!e&&15.1M(!0,!1),15};19 A=m("5k.7n",17(e){k.1Z(15,0,e),15.4P=15.2F=!0});i=A.1x=1g k,i.2M=A,i.4c().1I=!1,i.27=i.3h=1d,i.4J=!1,i.1P=i.84=17(e,t){19 n,r;1a(e.1i=1C(t||0)+e.2J,e.1A&&15!==e.1p&&(e.4D=e.1i+(15.3y()-e.1i)/e.1y),e.1U&&e.1U.3C(e,!0),e.1U=e.1p=15,e.1I&&e.1M(!0,!0),n=15.3h,15.4J)1b(r=e.1i;n&&n.1i>r;)n=n.1l;18 n?(e.1f=n.1f,n.1f=e):(e.1f=15.27,15.27=e),e.1f?e.1f.1l=e:15.3h=e,e.1l=n,15.1p&&15.35(!0),15},i.3C=17(e,t){18 e.1U===15&&(t||e.1M(!1,!0),e.1U=1d,e.1l?e.1l.1f=e.1f:15.27===e&&(15.27=e.1f),e.1f?e.1f.1l=e.1l:15.3h===e&&(15.3h=e.1l),15.1p&&15.35(!0)),15},i.1B=17(e,t,n){19 r,i=15.27;1b(15.1K=15.1n=15.1O=e;i;)r=i.1f,(i.2c||e>=i.1i&&!i.1A)&&(i.2G?i.1B((i.2o?i.26():i.2l)-(e-i.1i)*i.1y,t,n):i.1B((e-i.1i)*i.1y,t,n)),i=r},i.3y=17(){18 o||s.3a(),15.1K};19 O=m("5c",17(t,n,r){1a(k.1Z(15,n,r),15.1B=O.1x.1B,1d==t)5W"87 6v a 1d 2v.";15.2v=t="1H"!=1j t?t:O.3w(t)||t;19 i,s,o,u=t.9I||t.1c&&t!==e&&t[0]&&(t[0]===e||t[0].3o&&t[0].1v&&!t.3o),a=15.1o.4L;1a(15.5S=a=1d==a?F[O.8i]:"2t"==1j a?a>>0:F[a],(u||t 2a 3K||t.28&&h(t))&&"2t"!=1j t[0])1b(15.2z=o=l.1Z(t,0),15.3A=[],15.2Y=[],i=0;o.1c>i;i++)s=o[i],s?"1H"!=1j s?s.1c&&s!==e&&s[0]&&(s[0]===e||s[0].3o&&s[0].1v&&!s.3o)?(o.2W(i--,1),15.2z=o=o.3U(l.1Z(s,0))):(15.2Y[i]=R(s,15,!1),1===a&&15.2Y[i].1c>1&&U(s,15,1d,1,15.2Y[i])):(s=o[i--]=O.3w(s),"1H"==1j s&&o.2W(i+1,1)):o.2W(i--,1);1m 15.3A={},15.2Y=R(t,15,!1),1===a&&15.2Y.1c>1&&U(t,15,1d,1,15.2Y);(15.1o.1V||0===n&&0===15.2J&&15.1o.1V!==!1)&&15.1B(-15.2J,!1,!0)},!0),M=17(t){18 t.1c&&t!==e&&t[0]&&(t[0]===e||t[0].3o&&t[0].1v&&!t.3o)},2q=17(e,t){19 n,r={};1b(n 1w e)j[n]||n 1w t&&"x"!==n&&"y"!==n&&"3M"!==n&&"3B"!==n&&"39"!==n&&"3X"!==n||!(!P[n]||P[n]&&P[n].9D)||(r[n]=e[n],3L e[n]);e.4s=r};i=O.1x=1g k,i.2M=O,i.4c().1I=!1,i.3i=0,i.1r=i.2z=i.3f=i.29=1d,i.4I=!1,O.3Z="1.11.2",O.6n=i.2H=1g b(1d,1d,1,1),O.8i="2n",O.8h=s,O.8J=!0,O.3w=e.$||e.9C||17(t){18 e.$?(O.3w=e.$,e.$(t)):e.69?e.69.9G("#"===t.1u(0)?t.1t(1):t):t};19 D=O.4p={7T:h,7U:M},P=O.9R={},H=O.a2={},B=0,j=D.7i={3Q:1,4y:1,4L:1,4i:1,61:1,62:1,5Q:1,4C:1,38:1,5q:1,67:1,6b:1,4B:1,5D:1,63:1,4j:1,7b:1,7o:1,a3:1,a4:1,a6:1,5p:1,a5:1,1V:1,a0:1,9Z:1,1z:1,34:1,43:1,5A:1},F={3r:0,3Y:1,2n:2,9U:3,9T:4,9S:5,"9V":1,"5O":0},I=k.6Y=1g A,q=k.9W=1g A;q.1i=s.3u,I.1i=s.41,q.2c=I.2c=!0,k.86=17(){1a(q.1B((s.3u-q.1i)*q.1y,!1,!1),I.1B((s.41-I.1i)*I.1y,!1,!1),!(s.41%9Y)){19 e,t,n;1b(n 1w H){1b(t=H[n].3x,e=t.1c;--e>-1;)t[e].1I&&t.2W(e,1);0===t.1c&&3L H[n]}1a(n=q.27,(!n||n.1A)&&O.8J&&!I.27&&1===s.40.5y.1c){1b(;n&&n.1A;)n=n.1f;n||s.4X()}}},s.8M("5y",k.86);19 R=17(e,t,n){19 r,i,s=e.7h;1a(H[s||(e.7h=s="t"+B++)]||(H[s]={2v:e,3x:[]}),t&&(r=H[s].3x,r[i=r.1c]=t,n))1b(;--i>-1;)r[i]===t&&r.2W(i,1);18 H[s].3x},U=17(e,t,n,r,i){19 s,o,u,a;1a(1===r||r>=4){1b(a=i.1c,s=0;a>s;s++)1a((u=i[s])!==t)u.1I||u.1M(!1,!1)&&(o=!0);1m 1a(5===r)7p;18 o}19 l,c=t.1i+f,h=[],p=0,d=0===t.1N;1b(s=i.1c;--s>-1;)(u=i[s])===t||u.1I||u.1A||(u.1p!==t.1p?(l=l||z(t,0,d),0===z(u,l,d)&&(h[p++]=u)):c>=u.1i&&u.1i+u.26()/u.1y+f>c&&((d||!u.2w)&&2e-10>=c-u.1i||(h[p++]=u)));1b(s=p;--s>-1;)u=h[s],2===r&&u.2p(n,e)&&(o=!0),(2!==r||!u.1r&&u.2w)&&u.1M(!1,!1)&&(o=!0);18 o},z=17(e,t,n){1b(19 r=e.1p,i=r.1y,s=e.1i;r.1p;){1a(s+=r.1i,i*=r.1y,r.1A)18-23;r=r.1p}18 s/=i,s>t?s-t:n&&s===t||!e.2w&&2*f>s-t?f:(s+=e.26()/e.1y/i)>t+f?0:s-t-f};i.7c=17(){19 e,t,n,r,i=15.1o,s=15.3f,o=15.1N,u=i.1V,a=i.3Q;1a(i.38){1a(15.29&&15.29.1B(-1,!0),i.38.4L=0,i.38.1V=!0,15.29=O.3v(15.2v,0,i.38),u)1a(15.1n>0)15.29=1d;1m 1a(0!==o)18}1m 1a(i.4C&&0!==o)1a(15.29)15.29.1B(-1,!0),15.29=1d;1m{n={};1b(r 1w i)j[r]&&"5A"!==r||(n[r]=i[r]);1a(n.4L=0,n.1z="7G",15.29=O.3v(15.2v,0,n),i.1V){1a(0===15.1n)18}1m 15.29.1B(-1,!0)}1a(15.2H=a?a 2a b?i.5p 2a 3K?a.3t.36(a,i.5p):a:"17"==1j a?1g b(a,i.5p):w[a]||O.6n:O.6n,15.5P=15.2H.6j,15.7f=15.2H.6g,15.1r=1d,15.2z)1b(e=15.2z.1c;--e>-1;)15.4o(15.2z[e],15.3A[e]={},15.2Y[e],s?s[e]:1d)&&(t=!0);1m t=15.4o(15.2v,15.3A,15.2Y,s);1a(t&&O.4U("4Z",15),s&&(15.1r||"17"!=1j 15.2v&&15.1M(!1,!1)),i.4C)1b(n=15.1r;n;)n.s+=n.c,n.c=-n.c,n=n.1f;15.32=i.5q,15.2w=!0},i.4o=17(t,n,r,i){19 s,o,u,a,f,l;1a(1d==t)18!1;15.1o.4s||t.1v&&t!==e&&t.3o&&P.4s&&15.1o.5A!==!1&&2q(15.1o,t);1b(s 1w 15.1o){1a(l=15.1o[s],j[s])l&&(l 2a 3K||l.28&&h(l))&&-1!==l.1G("").1k("{4t}")&&(15.1o[s]=l=15.5o(l,15));1m 1a(P[s]&&(a=1g P[s]).6M(t,15.1o[s],15)){1b(15.1r=f={1f:15.1r,t:a,p:"1X",s:0,c:1,f:!0,n:s,4M:!0,2s:a.5T},o=a.2E.1c;--o>-1;)n[a.2E[o]]=15.1r;(a.5T||a.4Z)&&(u=!0),(a.6q||a.89)&&(15.4I=!0)}1m 15.1r=n[s]=f={1f:15.1r,t:t,p:s,f:"17"==1j t[s],n:s,4M:!1,2s:0},f.s=f.f?t[s.1k("4h")||"17"!=1j t["7g"+s.1t(3)]?s:"7g"+s.1t(3)]():1q(t[s]),f.c="1H"==1j l&&"="===l.1u(1)?3q(l.1u(0)+"1",10)*1C(l.1t(2)):1C(l)-f.s||0;f&&f.1f&&(f.1f.1l=f)}18 i&&15.2p(i,t)?15.4o(t,n,r,i):15.5S>1&&15.1r&&r.1c>1&&U(t,15,n,15.5S,r)?(15.2p(n,t),15.4o(t,n,r,i)):u},i.1B=17(e,t,n){19 r,i,s,o,u=15.1n,a=15.1N;1a(e>=a)15.1K=15.1n=a,15.3i=15.2H.3m?15.2H.2x(1):1,15.2G||(r=!0,i="4i"),0===a&&(o=15.1O,(0===e||0>o||o===f)&&o!==e&&(n=!0,o>f&&(i="4j")),15.1O=o=!t||e?e:f);1m 1a(1e-7>e)15.1K=15.1n=0,15.3i=15.2H.3m?15.2H.2x(0):0,(0!==u||0===a&&15.1O>f)&&(i="4j",r=15.2G),0>e?(15.2c=!1,0===a&&(15.1O>=0&&(n=!0),15.1O=o=!t||e?e:f)):15.2w||(n=!0);1m 1a(15.1K=15.1n=e,15.5P){19 l=e/a,c=15.5P,h=15.7f;(1===c||3===c&&l>=.5)&&(l=1-l),3===c&&(l*=2),1===h?l*=l:2===h?l*=l*l:3===h?l*=l*l*l:4===h&&(l*=l*l*l*l),15.3i=1===c?1-l:2===c?l:.5>e/a?l/2:1-l/2}1m 15.3i=15.2H.2x(e/a);1a(15.1n!==u||n){1a(!15.2w){1a(15.7c(),!15.2w||15.1I)18;15.1n&&!r?15.3i=15.2H.2x(15.1n/a):r&&15.2H.3m&&(15.3i=15.2H.2x(0===15.1n?0:1))}1b(15.2c||!15.1A&&15.1n!==u&&e>=0&&(15.2c=!0),0===u&&(15.29&&(e>=0?15.29.1B(e,t,n):i||(i="a1")),15.1o.4B&&(0!==15.1n||0===a)&&(t||15.1o.4B.36(15.1o.63||15,15.1o.5D||y))),s=15.1r;s;)s.f?s.t[s.p](s.c*15.3i+s.s):s.t[s.p]=s.c*15.3i+s.s,s=s.1f;15.32&&(0>e&&15.29&&15.1i&&15.29.1B(e,t,n),t||n&&0===15.1n&&0===u||15.32.36(15.1o.6b||15,15.1o.67||y)),i&&(15.1I||(0>e&&15.29&&!15.32&&15.1i&&15.29.1B(e,t,n),r&&(15.1p.4P&&15.1M(!1,!1),15.2c=!1),!t&&15.1o[i]&&15.1o[i].36(15.1o[i+"6l"]||15,15.1o[i+"6o"]||y),0===a&&15.1O===f&&o!==f&&(15.1O=0)))}},i.2p=17(e,t){1a("3Y"===e&&(e=1d),1d==e&&(1d==t||t===15.2v))18 15.1M(!1,!1);t="1H"!=1j t?t||15.2z||15.2v:O.3w(t)||t;19 n,r,i,s,o,u,a,f;1a((h(t)||M(t))&&"2t"!=1j t[0])1b(n=t.1c;--n>-1;)15.2p(e,t[n])&&(u=!0);1m{1a(15.2z){1b(n=15.2z.1c;--n>-1;)1a(t===15.2z[n]){o=15.3A[n]||{},15.3f=15.3f||[],r=15.3f[n]=e?15.3f[n]||{}:"3Y";7p}}1m{1a(t!==15.2v)18!1;o=15.3A,r=15.3f=e?15.3f||{}:"3Y"}1a(o){a=e||o,f=e!==r&&"3Y"!==r&&e!==o&&("3T"!=1j e||!e.9Q);1b(i 1w a)(s=o[i])&&(s.4M&&s.t.2p(a)&&(u=!0),s.4M&&0!==s.t.2E.1c||(s.1l?s.1l.1f=s.1f:s===15.1r&&(15.1r=s.1f),s.1f&&(s.1f.1l=s.1l),s.1f=s.1l=1d),3L o[i]),f&&(r[i]=1);!15.1r&&15.2w&&15.1M(!1,!1)}}18 u},i.5i=17(){18 15.4I&&O.4U("6q",15),15.1r=1d,15.3f=1d,15.32=1d,15.29=1d,15.2w=15.2c=15.4I=!1,15.3A=15.2z?{}:[],15},i.1M=17(e,t){1a(o||s.3a(),e&&15.1I){19 n,r=15.2z;1a(r)1b(n=r.1c;--n>-1;)15.2Y[n]=R(r[n],15,!0);1m 15.2Y=R(15.2v,15,!0)}18 k.1x.1M.1Z(15,e,t),15.4I&&15.1r?O.4U(e?"89":"6q",15):!1},O.3v=17(e,t,n){18 1g O(e,t,n)},O.68=17(e,t,n){18 n.4C=!0,n.1V=0!=n.1V,1g O(e,t,n)},O.66=17(e,t,n,r){18 r.38=n,r.1V=0!=r.1V&&0!=n.1V,1g O(e,t,r)},O.6k=17(e,t,n,r,i){18 1g O(t,0,{4y:e,4i:t,61:n,62:r,4j:t,7b:n,7o:r,1V:!1,5Q:i,4L:0})},O.4h=17(e,t){18 1g O(e,0,t)},O.3W=17(e,t){1a(1d==e)18[];e="1H"!=1j e?e:O.3w(e)||e;19 n,r,i,s;1a((h(e)||M(e))&&"2t"!=1j e[0]){1b(n=e.1c,r=[];--n>-1;)r=r.3U(O.3W(e[n],t));1b(n=r.1c;--n>-1;)1b(s=r[n],i=n;--i>-1;)s===r[i]&&r.2W(n,1)}1m 1b(r=R(e).3U(),n=r.1c;--n>-1;)(r[n].1I||t&&!r[n].4O())&&r.2W(n,1);18 r},O.9J=O.9O=17(e,t,n){"3T"==1j t&&(n=t,t=!1);1b(19 r=O.3W(e,t),i=r.1c;--i>-1;)r[i].2p(n,e)};19 W=m("4z.7Q",17(e,t){15.2E=(e||"").1s(","),15.4N=15.2E[0],15.5T=t||0,15.9M=W.1x},!0);1a(i=W.1x,W.3Z="1.10.1",W.3J=2,i.1r=1d,i.9K=17(e,t,n,r,i,s){19 o,u;18 1d!=r&&(o="2t"==1j r||"="!==r.1u(1)?1C(r)-n:3q(r.1u(0)+"1",10)*1C(r.1t(2)))?(15.1r=u={1f:15.1r,t:e,p:t,s:n,c:o,f:"17"==1j e[t],n:i||t,r:s},u.1f&&(u.1f.1l=u),u):2u 0},i.1X=17(e){1b(19 t,n=15.1r,r=1e-6;n;)t=n.c*e+n.s,n.r?t=0|t+(t>0?.5:-.5):r>t&&t>-r&&(t=0),n.f?n.t[n.p](t):n.t[n.p]=t,n=n.1f},i.2p=17(e){19 t,n=15.2E,r=15.1r;1a(1d!=e[15.4N])15.2E=[];1m 1b(t=n.1c;--t>-1;)1d!=e[n[t]]&&n.2W(t,1);1b(;r;)1d!=e[r.n]&&(r.1f&&(r.1f.1l=r.1l),r.1l?(r.1l.1f=r.1f,r.1l=1d):15.1r===r&&(15.1r=r.1f)),r=r.1f;18!1},i.71=17(e,t){1b(19 n=15.1r;n;)(e[15.4N]||1d!=n.n&&e[n.n.1s(15.4N+"2q").1G("")])&&(n.r=t),n=n.1f},O.4U=17(e,t){19 n,r,i,s,o,u=t.1r;1a("4Z"===e){1b(;u;){1b(o=u.1f,r=i;r&&r.2s>u.2s;)r=r.1f;(u.1l=r?r.1l:s)?u.1l.1f=u:i=u,(u.1f=r)?r.1l=u:s=u,u=o}u=t.1r=i}1b(;u;)u.4M&&"17"==1j u.t[e]&&u.t[e]()&&(n=!0),u=u.1f;18 n},W.6P=17(e){1b(19 t=e.1c;--t>-1;)e[t].3J===W.3J&&(P[(1g e[t]).4N]=e[t]);18!0},v.2A=17(e){1a(!(e&&e.7a&&e.78&&e.3J))5W"9L 2A a7.";19 t,n=e.7a,r=e.5H||0,i=e.av,s={78:"6M",4h:"1X",4c:"2p",59:"71",au:"4Z"},o=m("4z."+n.1u(0).5h()+n.1t(1)+"8j",17(){W.1Z(15,n,r),15.2E=i||[]},e.aq===!0),u=o.1x=1g W(n);u.2M=o,o.3J=e.3J;1b(t 1w s)"17"==1j e[t]&&(u[s[t]]=e[t]);18 o.3Z=e.3Z,W.6P([o]),o},n=e.3b){1b(r=0;n.1c>r;r++)n[r]();1b(i 1w p)p[i].76||e.65.6U("ax ay aD aE: 4F.4A."+i)}o=!1}})(1T);(1T.3b||(1T.3b=[])).28(17(){"5v 5u";1T.3R("aC",["5k.72","5k.7n","5c"],17(e,t,n){19 r=17(e){t.1Z(15,e),15.2L={},15.4P=15.1o.4P===!0,15.2F=15.1o.2F===!0,15.4J=!0,15.32=15.1o.5q;19 n,r,i=15.1o;1b(r 1w i)n=i[r],o(n)&&-1!==n.1G("").1k("{4t}")&&(i[r]=15.5o(n));o(i.3x)&&15.1P(i.3x,0,i.aA,i.ap)},i=1e-10,s=n.4p.7U,o=n.4p.7T,u=[],a=17(e){19 t,n={};1b(t 1w e)n[t]=e[t];18 n},f=17(e,t,n,r){e.1p.6c(e.1i),t&&t.36(r||e.1p,n||u)},l=u.6G,c=r.1x=1g t;18 r.3Z="1.11.0",c.2M=r,c.4c().1I=!1,c.3v=17(e,t,r,i){18 t?15.1P(1g n(e,t,r),i):15.4h(e,r,i)},c.68=17(e,t,r,i){18 15.1P(n.68(e,t,r),i)},c.66=17(e,t,r,i,s){18 t?15.1P(n.66(e,t,r,i),s):15.4h(e,i,s)},c.5I=17(e,t,i,o,u,f,c,p){19 d,v=1g r({4i:f,61:c,62:p});1b("1H"==1j e&&(e=n.3w(e)||e),s(e)&&(e=l.1Z(e,0)),o=o||0,d=0;e.1c>d;d++)i.38&&(i.38=a(i.38)),v.3v(e[d],t,a(i),d*o);18 15.1P(v,u)},c.ac=17(e,t,n,r,i,s,o,u){18 n.1V=0!=n.1V,n.4C=!0,15.5I(e,t,n,r,i,s,o,u)},c.a9=17(e,t,n,r,i,s,o,u,a){18 r.38=n,r.1V=0!=r.1V&&0!=n.1V,15.5I(e,t,r,i,s,o,u,a)},c.1Z=17(e,t,r,i){18 15.1P(n.6k(0,e,t,r),i)},c.4h=17(e,t,r){18 r=15.3d(r,0,!0),1d==t.1V&&(t.1V=r===15.1n&&!15.1A),15.1P(1g n(e,0,t),r)},r.ab=17(e,t){e=e||{},1d==e.2F&&(e.2F=!0);19 i,s,o=1g r(e),u=o.1p;1b(1d==t&&(t=!0),u.3C(o,!0),o.1i=0,o.1O=o.1n=o.1K=u.1n,i=u.27;i;)s=i.1f,t&&i 2a n&&i.2v===i.1o.4i||o.1P(i,i.1i-i.2J),i=s;18 u.1P(o,0),o},c.1P=17(i,s,u,a){19 f,l,c,h,p,d;1a("2t"!=1j s&&(s=15.3d(s,0,!0,i)),!(i 2a e)){1a(i 2a 3K||i&&i.28&&o(i)){1b(u=u||"ag",a=a||0,f=s,l=i.1c,c=0;l>c;c++)o(h=i[c])&&(h=1g r({3x:h})),15.1P(h,f),"1H"!=1j h&&"17"!=1j h&&("9A"===u?f=h.1i+h.26()/h.1y:"ah"===u&&(h.1i-=h.4y())),f+=a;18 15.35(!0)}1a("1H"==1j i)18 15.80(i,s);1a("17"!=1j i)5W"87 1P "+i+" am an 1U; 3z al 8a a 6v, 1U, 17, ak 1H.";i=n.6k(0,i)}1a(t.1x.1P.1Z(15,i,s),15.1I&&!15.1A&&15.1N<15.2C())1b(p=15,d=p.3y()>i.1i;p.1I&&p.1p;)p.1p.2F&&d?p.2Z(p.1K,!0):p.1M(!0,!1),p=p.1p;18 15},c.51=17(t){1a(t 2a e)18 15.3C(t,!1);1a(t 2a 3K||t&&t.28&&o(t)){1b(19 n=t.1c;--n>-1;)15.51(t[n]);18 15}18"1H"==1j t?15.7P(t):15.4c(1d,t)},c.3C=17(e,n){t.1x.3C.1Z(15,e,n);19 r=15.3h;18 r?15.1n>r.1i+r.2l/r.1y&&(15.1n=15.2C(),15.1K=15.2l):15.1n=15.1K=0,15},c.aF=17(e,t){18 15.1P(e,15.3d(1d,t,!0,e))},c.84=c.8R=17(e,t,n,r){18 15.1P(e,t||0,n,r)},c.8T=17(e,t,n,r){18 15.1P(e,15.3d(1d,t,!0,e),n,r)},c.80=17(e,t){18 15.2L[e]=15.3d(t),15},c.94=17(e,t,n,r){18 15.1Z(f,["{4t}",t,n,r],15,e)},c.7P=17(e){18 3L 15.2L[e],15},c.8X=17(e){18 1d!=15.2L[e]?15.2L[e]:-1},c.3d=17(t,n,r,i){19 s;1a(i 2a e&&i.1U===15)15.51(i);1m 1a(i&&(i 2a 3K||i.28&&o(i)))1b(s=i.1c;--s>-1;)i[s]2a e&&i[s].1U===15&&15.51(i[s]);1a("1H"==1j n)18 15.3d(n,r&&"2t"==1j t&&1d==15.2L[n]?t-15.2C():0,r);1a(n=n||0,"1H"!=1j t||!5X(t)&&1d==15.2L[t])1d==t&&(t=15.2C());1m{1a(s=t.1k("="),-1===s)18 1d==15.2L[t]?r?15.2L[t]=15.2C()+n:n:15.2L[t]+n;n=3q(t.1u(s-1)+"1",10)*1C(t.1t(s+1)),t=s>1?15.3d(t.1t(0,s-1),0,r):15.2C()}18 1C(t)+n},c.4e=17(e,t){18 15.2Z("2t"==1j e?e:15.3d(e),t!==!1)},c.8V=17(){18 15.34(!0)},c.9r=17(e,t){18 15.7w(e,t)},c.9q=17(e,t){18 15.6c(e,t)},c.1B=17(e,t,n){15.1I&&15.1M(!0,!1);19 r,s,o,a,f,l=15.2o?15.26():15.2l,c=15.1n,h=15.1i,p=15.1y,d=15.1A;1a(e>=l?(15.1K=15.1n=l,15.2G||15.5U()||(s=!0,a="4i",0===15.1N&&(0===e||0>15.1O||15.1O===i)&&15.1O!==e&&15.27&&(f=!0,15.1O>i&&(a="4j"))),15.1O=15.1N||!t||e?e:i,e=l+1e-6):1e-7>e?(15.1K=15.1n=0,(0!==c||0===15.1N&&(15.1O>i||0>e&&15.1O>=0))&&(a="4j",s=15.2G),0>e?(15.2c=!1,0===15.1N&&15.1O>=0&&15.27&&(f=!0),15.1O=e):(15.1O=15.1N||!t||e?e:i,e=0,15.2w||(f=!0))):15.1K=15.1n=15.1O=e,15.1n!==c&&15.27||n||f){1a(15.2w||(15.2w=!0),15.2c||!15.1A&&15.1n!==c&&e>0&&(15.2c=!0),0===c&&15.1o.4B&&0!==15.1n&&(t||15.1o.4B.36(15.1o.63||15,15.1o.5D||u)),15.1n>=c)1b(r=15.27;r&&(o=r.1f,!15.1A||d);)(r.2c||r.1i<=15.1n&&!r.1A&&!r.1I)&&(r.2G?r.1B((r.2o?r.26():r.2l)-(e-r.1i)*r.1y,t,n):r.1B((e-r.1i)*r.1y,t,n)),r=o;1m 1b(r=15.3h;r&&(o=r.1l,!15.1A||d);)(r.2c||c>=r.1i&&!r.1A&&!r.1I)&&(r.2G?r.1B((r.2o?r.26():r.2l)-(e-r.1i)*r.1y,t,n):r.1B((e-r.1i)*r.1y,t,n)),r=o;15.32&&(t||15.32.36(15.1o.6b||15,15.1o.67||u)),a&&(15.1I||(h===15.1i||p!==15.1y)&&(0===15.1n||l>=15.26())&&(s&&(15.1p.4P&&15.1M(!1,!1),15.2c=!1),!t&&15.1o[a]&&15.1o[a].36(15.1o[a+"6l"]||15,15.1o[a+"6o"]||u)))}},c.5U=17(){1b(19 e=15.27;e;){1a(e.1A||e 2a r&&e.5U())18!0;e=e.1f}18!1},c.5g=17(e,t,r,i){i=i||-4Y;1b(19 s=[],o=15.27,u=0;o;)i>o.1i||(o 2a n?t!==!1&&(s[u++]=o):(r!==!1&&(s[u++]=o),e!==!1&&(s=s.3U(o.5g(!0,t,r)),u=s.1c))),o=o.1f;18 s},c.3W=17(e,t){1b(19 r=n.3W(e),i=r.1c,s=[],o=0;--i>-1;)(r[i].1U===15||t&&15.7A(r[i]))&&(s[o++]=r[i]);18 s},c.7A=17(e){1b(19 t=e.1U;t;){1a(t===15)18!0;t=t.1U}18!1},c.7l=17(e,t,n){n=n||0;1b(19 r,i=15.27,s=15.2L;i;)i.1i>=n&&(i.1i+=e),i=i.1f;1a(t)1b(r 1w s)s[r]>=n&&(s[r]+=e);18 15.35(!0)},c.2p=17(e,t){1a(!e&&!t)18 15.1M(!1,!1);1b(19 n=t?15.3W(t):15.5g(!0,!0,!1),r=n.1c,i=!1;--r>-1;)n[r].2p(e,t)&&(i=!0);18 i},c.9b=17(e){19 t=15.5g(!1,!0,!0),n=t.1c;1b(15.1n=15.1K=0;--n>-1;)t[n].1M(!1,!1);18 e!==!1&&(15.2L={}),15.35(!0)},c.5i=17(){1b(19 e=15.27;e;)e.5i(),e=e.1f;18 15},c.1M=17(e,n){1a(e===15.1I)1b(19 r=15.27;r;)r.1M(e,!0),r=r.1f;18 t.1x.1M.1Z(15,e,n)},c.2C=17(e){18 22.1c?(0!==15.2C()&&0!==e&&15.5N(15.1N/e),15):(15.2o&&15.26(),15.1N)},c.26=17(e){1a(!22.1c){1a(15.2o){1b(19 t,n,r=0,i=15.3h,s=9g;i;)t=i.1l,i.2o&&i.26(),i.1i>s&&15.4J&&!i.1A?15.1P(i,i.1i-i.2J):s=i.1i,0>i.1i&&!i.1A&&(r-=i.1i,15.1p.2F&&(15.1i+=i.1i/15.1y),15.7l(-i.1i,!1,-4Y),s=0),n=i.1i+i.2l/i.1y,n>r&&(r=n),i=t;15.1N=15.2l=r,15.2o=!1}18 15.2l}18 0!==15.26()&&0!==e&&15.5N(15.2l/e),15},c.cW=17(){1b(19 t=15.1p;t.1p;)t=t.1p;18 t===e.6Y},c.3y=17(){18 15.1A?15.1K:(15.1p.3y()-15.1i)*15.1y},r},!0)}),1T.3R&&1T.3b.4G()();(1T.3b||(1T.3b=[])).28(17(){"5v 5u";1T.3R("2j.7F",["2j.7v"],17(e){19 t,n,r,i=1T.6h||1T,s=i.4F.4A,o=2*1h.4l,u=1h.4l/2,a=s.7W,f=17(t,n){19 r=a("2j."+t,17(){},!0),i=r.1x=1g e;18 i.2M=r,i.2x=n,r},l=e.7X||17(){},c=17(e,t,n,r){19 i=a("2j."+e,{5R:1g t,5s:1g n,5r:1g r},!0);18 l(i,e),i},h=17(e,t,n){15.t=e,15.v=t,n&&(15.5t=n,n.5x=15,15.c=n.v-t,15.7x=n.t-e)},p=17(t,n){19 r=a("2j."+t,17(e){15.1R=e||0===e?e:1.c7,15.2k=1.ci*15.1R},!0),i=r.1x=1g e;18 i.2M=r,i.2x=n,i.3t=17(e){18 1g r(e)},r},d=c("7F",p("d3",17(e){18(e-=1)*e*((15.1R+1)*e+15.1R)+1}),p("d6",17(e){18 e*e*((15.1R+1)*e-15.1R)}),p("cU",17(e){18 1>(e*=2)?.5*e*e*((15.2k+1)*e-15.2k):.5*((e-=2)*e*((15.2k+1)*e+15.2k)+2)})),v=a("2j.5Z",17(e,t,n){t=t||0===t?t:.7,1d==e?e=.7:e>1&&(e=1),15.7V=1!==e?t:0,15.1R=(1-e)/2,15.2k=e,15.3c=15.1R+15.2k,15.3m=n===!0},!0),m=v.1x=1g e;18 m.2M=v,m.2x=17(e){19 t=e+(.5-e)*15.7V;18 15.1R>e?15.3m?1-(e=1-e/15.1R)*e:t-(e=1-e/15.1R)*e*e*e*t:e>15.3c?15.3m?1-(e=(e-15.3c)/15.1R)*e:t+(e-t)*(e=(e-15.3c)/15.1R)*e*e*e:15.3m?1:t},v.3Q=1g v(.7,.7),m.3t=v.3t=17(e,t,n){18 1g v(e,t,n)},t=a("2j.7S",17(e){e=e||1,15.1R=1/e,15.2k=e+1},!0),m=t.1x=1g e,m.2M=t,m.2x=17(e){18 0>e?e=0:e>=1&&(e=.cH),(15.2k*e>>0)*15.1R},m.3t=t.3t=17(e){18 1g t(e)},n=a("2j.7Y",17(t){t=t||{};1b(19 n,r,i,s,o,u,a=t.cT||"3r",f=[],l=0,c=0|(t.d4||20),p=c,d=t.d1!==!1,v=t.cX===!0,m=t.7J 2a e?t.7J:1d,g="2t"==1j t.7K?.4*t.7K:.4;--p>-1;)n=d?1h.7L():1/c*p,r=m?m.2x(n):n,"3r"===a?i=g:"cC"===a?(s=1-n,i=s*s*g):"1w"===a?i=n*n*g:.5>n?(s=2*n,i=.5*s*s*g):(s=2*(1-n),i=.5*s*s*g),d?r+=1h.7L()*i-.5*i:p%2?r+=.5*i:r-=.5*i,v&&(r>1?r=1:0>r&&(r=0)),f[l++]={x:n,y:r};1b(f.ch(17(e,t){18 e.x-t.x}),u=1g h(1,1,1d),p=c;--p>-1;)o=f[p],u=1g h(o.x,o.y,u);15.1l=1g h(0,0,0!==u.t?u:u.5t)},!0),m=n.1x=1g e,m.2M=n,m.2x=17(e){19 t=15.1l;1a(e>t.t){1b(;t.5t&&e>=t.t;)t=t.5t;t=t.5x}1m 1b(;t.5x&&t.t>=e;)t=t.5x;18 15.1l=t,t.v+(e-t.t)/t.7x*t.c},m.3t=17(e){18 1g n(e)},n.3Q=1g n,c("cm",f("cA",17(e){18 1/2.75>e?7.2I*e*e:2/2.75>e?7.2I*(e-=1.5/2.75)*e+.75:2.5/2.75>e?7.2I*(e-=2.25/2.75)*e+.6i:7.2I*(e-=2.6d/2.75)*e+.6e}),f("cu",17(e){18 1/2.75>(e=1-e)?1-7.2I*e*e:2/2.75>e?1-(7.2I*(e-=1.5/2.75)*e+.75):2.5/2.75>e?1-(7.2I*(e-=2.25/2.75)*e+.6i):1-(7.2I*(e-=2.6d/2.75)*e+.6e)}),f("co",17(e){19 t=.5>e;18 e=t?1-2*e:2*e-1,e=1/2.75>e?7.2I*e*e:2/2.75>e?7.2I*(e-=1.5/2.75)*e+.75:2.5/2.75>e?7.2I*(e-=2.25/2.75)*e+.6i:7.2I*(e-=2.6d/2.75)*e+.6e,t?.5*(1-e):.5*e+.5})),c("cr",f("cs",17(e){18 1h.3l(1-(e-=1)*e)}),f("cp",17(e){18-(1h.3l(1-e*e)-1)}),f("cn",17(e){18 1>(e*=2)?-.5*(1h.3l(1-e*e)-1):.5*(1h.3l(1-(e-=2)*e)+1)})),r=17(t,n,r){19 i=a("2j."+t,17(e,t){15.1R=e||1,15.2k=t||r,15.3c=15.2k/o*(1h.cv(1/15.1R)||0)},!0),s=i.1x=1g e;18 s.2M=i,s.2x=n,s.3t=17(e,t){18 1g i(e,t)},i},c("cB",r("cz",17(e){18 15.1R*1h.3n(2,-10*e)*1h.2h((e-15.3c)*o/15.2k)+1},.3),r("cy",17(e){18-(15.1R*1h.3n(2,10*(e-=1))*1h.2h((e-15.3c)*o/15.2k))},.3),r("cw",17(e){18 1>(e*=2)?-.5*15.1R*1h.3n(2,10*(e-=1))*1h.2h((e-15.3c)*o/15.2k):.5*15.1R*1h.3n(2,-10*(e-=1))*1h.2h((e-15.3c)*o/15.2k)+1},.45)),c("cc",f("ca",17(e){18 1-1h.3n(2,-10*e)}),f("c8",17(e){18 1h.3n(2,10*(e-1))-.cd}),f("ce",17(e){18 1>(e*=2)?.5*1h.3n(2,10*(e-1)):.5*(2-1h.3n(2,-10*(e-1)))})),c("ck",f("cf",17(e){18 1h.2h(e*u)}),f("cJ",17(e){18-1h.2D(e*u)+1}),f("cZ",17(e){18-.5*(1h.2D(1h.4l*e)-1)})),a("2j.cV",{d0:17(t){18 e.7Z[t]}},!0),l(i.5Z,"5Z","3Q,"),l(n,"7Y","3Q,"),l(t,"7S","3Q,"),d},!0)}),1T.3R&&1T.3b.4G()();(1T.3b||(1T.3b=[])).28(17(){"5v 5u";1T.3R("4z.cE",["4z.7Q","5c"],17(e,t){19 n,r,i,s,o=17(){e.1Z(15,"4s"),15.2E.1c=0,15.1X=o.1x.1X},u={},a=o.1x=1g e("4s");a.2M=o,o.3Z="1.11.2",o.3J=2,o.8g=0,a="2d",o.6z={3k:a,7e:a,4x:a,4u:a,3M:a,3B:a,cP:a,6x:a,6w:a,33:a};19 f,l,c,h,p,d,v=/(?:\\d|\\-\\d|\\.\\d|\\-\\.\\d)+/g,m=/(?:\\d|\\-\\d|\\.\\d|\\-\\.\\d|\\+=\\d|\\-=\\d|\\+=.\\d|\\-=\\.\\d)+/g,g=/(?:\\+=|\\-=|\\-|\\b)[\\d\\-\\.]+[a-cN-cO-9]*(?:%|\\b)/3N,y=/[^\\d\\-\\.]/g,b=/(?:\\d|\\-|\\+|=|#|\\.)*/g,w=/1Y *= *([^)]*)/,E=/1Y:([^;]*)/,S=/3E\\(1Y *=.+?\\)/i,x=/^(5e|6m)/,T=/([A-Z])/g,N=/-([a-z])/3N,C=/(^(?:74\\(\\"|74\\())|(?:(\\"\\))$|\\)$)/3N,k=17(e,t){18 t.5h()},L=/(?:5Y|7s|7k)/i,A=/(8z|8O|8N|8L)=[\\d\\-\\.e]+/3N,O=/8x\\:5J\\.5L\\.5M\\(.+?\\)/i,M=/,(?=[^\\)]*(?:\\(|$))/3N,2q=1h.4l/31,D=31/1h.4l,P={},H=69,B=H.6a("77"),j=H.6a("ba"),F=o.4p={bb:u},I=b8.b7,q=17(){19 e,t=I.1k("b3"),n=H.6a("77");18 c=-1!==I.1k("b5")&&-1===I.1k("b6")&&(-1===t||1C(I.1t(t+8,1))>3),p=c&&6>1C(I.1t(I.1k("bc/")+8,1)),h=-1!==I.1k("bd"),/bk ([0-9]{1,}[\\.0-9]{0,})/.bl(I)&&(d=1q(4k.$1)),n.bm="a",e=n.bi("a")[0],e?/^0.55/.2P(e.1v.1Y):!1}(),R=17(e){18 w.2P("1H"==1j e?e:(e.2R?e.2R.2i:e.1v.2i)||"")?1q(4k.$1)/23:1},U=17(e){1T.65&&65.6U(e)},z="",W="",X=17(e,t){t=t||B;19 n,r,i=t.1v;1a(2u 0!==i[e])18 e;1b(e=e.1u(0).5h()+e.1t(1),n=["O","be","64","bf","bg"],r=5;--r>-1&&2u 0===i[n[r]+e];);18 r>=0?(W=3===r?"64":n[r],z="-"+W.6R()+"-",W+e):1d},V=H.6Z?H.6Z.bh:17(){},$=o.c6=17(e,t,n,r,i){19 s;18 q||"1Y"!==t?(!r&&e.1v[t]?s=e.1v[t]:(n=n||V(e,1d))?(e=n.4m(t.1D(T,"-$1").6R()),s=e||n.1c?e:n[t]):e.2R&&(s=e.2R[t]),1d==i||s&&"3r"!==s&&"2n"!==s&&"2n 2n"!==s?s:i):R(e)},J=17(e,t,n,r,i){1a("2d"===r||!r)18 n;1a("2n"===r||!n)18 0;19 s,o=L.2P(t),u=e,a=B.1v,f=0>n;18 f&&(n=-n),"%"===r&&-1!==t.1k("3X")?s=n/23*(o?e.b2:e.b1):(a.37="3X:0 4S 8P;4q:"+$(e,"4q")+";aN-3B:0;","%"!==r&&u.7m?a[o?"aO":"70"]=n+r:(u=e.aP||H.aM,a[o?"3M":"3B"]=n+r),u.7m(B),s=1q(B[o?"4H":"4r"]),u.aL(B),0!==s||i||(s=J(e,t,n,r,!0))),f?-s:s},K=17(e,t,n){1a("8y"!==$(e,"4q",n))18 0;19 r="4u"===t?"5Y":"7r",i=$(e,"6w"+r,n);18 e["aH"+r]-(J(e,t,1q(i),i.1D(b,""))||0)},Q=17(e,t){19 n,r,i={};1a(t=t||V(e,1d))1a(n=t.1c)1b(;--n>-1;)i[t[n].1D(N,k)]=t.4m(t[n]);1m 1b(n 1w t)i[n]=t[n];1m 1a(t=e.2R||e.1v)1b(n 1w t)"1H"==1j n&&2u 0!==i[n]&&(i[n.1D(N,k)]=t[n]);18 q||(i.1Y=R(e)),r=44(e,t,!1),i.1F=r.1F,i.1S=r.1S,i.2f=r.2f,i.2g=r.2g,i.x=r.x,i.y=r.y,3j&&(i.z=r.z,i.1Q=r.1Q,i.21=r.21,i.2N=r.2N),i.7q&&3L i.7q,i},G=17(e,t,n,r,i){19 s,o,u,a={},f=e.1v;1b(o 1w n)"37"!==o&&"1c"!==o&&5X(o)&&(t[o]!==(s=n[o])||i&&i[o])&&-1===o.1k("aI")&&("2t"==1j s||"1H"==1j s)&&(a[o]="2n"!==s||"4u"!==o&&"3k"!==o?""!==s&&"2n"!==s&&"3r"!==s||"1H"!=1j t[o]||""===t[o].1D(y,"")?s:0:K(e,o),2u 0!==f[o]&&(u=1g ct(f,o,f[o],u)));1a(r)1b(o 1w r)"39"!==o&&(a[o]=r[o]);18{4T:a,42:u}},Y={3M:["5Y","7s"],3B:["7r","aK"]},Z=["7C","81","83","82"],3D=17(e,t,n){19 r=1q("3M"===t?e.4H:e.4r),i=Y[t],s=i.1c;1b(n=n||V(e,1d);--s>-1;)r-=1q($(e,"6x"+i[s],n,!0))||0,r-=1q($(e,"3X"+i[s]+"7k",n,!0))||0;18 r},3e=17(e,t){(1d==e||""===e||"2n"===e||"2n 2n"===e)&&(e="0 0");19 n=e.1s(" "),r=-1!==e.1k("4u")?"0%":-1!==e.1k("7e")?"23%":n[0],i=-1!==e.1k("3k")?"0%":-1!==e.1k("4x")?"23%":n[1];18 1d==i?i="0":"7d"===i&&(i="50%"),("7d"===r||5X(1q(r))&&-1===(r+"").1k("="))&&(r="50%"),t&&(t.8K=-1!==r.1k("%"),t.8H=-1!==i.1k("%"),t.aQ="="===r.1u(1),t.aR="="===i.1u(1),t.57=1q(r.1D(y,"")),t.5K=1q(i.1D(y,""))),r+" "+i+(n.1c>2?" "+n[2]:"")},3s=17(e,t){18"1H"==1j e&&"="===e.1u(1)?3q(e.1u(0)+"1",10)*1q(e.1t(2)):1q(e)-1q(t)},2B=17(e,t){18 1d==e?t:"1H"==1j e&&"="===e.1u(1)?3q(e.1u(0)+"1",10)*1C(e.1t(2))+t:1q(e)},3z=17(e,t,n,r){19 i,s,o,u,a=1e-6;18 1d==e?u=t:"2t"==1j e?u=e:(i=6r,s=e.1s("2q"),o=1C(s[0].1D(y,""))*(-1===e.1k("aY")?1:D)-("="===e.1u(1)?0:t),s.1c&&(r&&(r[n]=t+o),-1!==e.1k("aZ")&&(o%=i,o!==o%(i/2)&&(o=0>o?o+i:o-i)),-1!==e.1k("b0")&&0>o?o=(o+4Y*i)%i-(0|o/i)*i:-1!==e.1k("aX")&&o>0&&(o=(o-4Y*i)%i-(0|o/i)*i)),u=t+o),a>u&&u>-a&&(u=0),u},3G={aS:[0,1E,1E],aT:[0,1E,0],aU:[5j,5j,5j],8k:[0,0,0],aV:[2O,0,0],bn:[0,2O,2O],bo:[0,0,1E],bS:[0,0,2O],bT:[1E,1E,1E],bU:[1E,0,1E],bR:[2O,2O,0],bQ:[1E,1E,0],bM:[1E,bN,0],bO:[2O,2O,2O],bP:[2O,0,2O],bV:[0,2O,0],8P:[1E,0,0],c2:[1E,5j,c4],c1:[0,1E,1E],4a:[1E,1E,1E,0]},4W=17(e,t,n){18 e=0>e?e+1:e>1?e-1:e,0|1E*(1>6*e?t+6*(n-t)*e:.5>e?n:2>3*e?t+6*(n-t)*(2/3-e):t)+.5},5d=17(e){19 t,n,r,i,s,o;18 e&&""!==e?"2t"==1j e?[e>>16,1E&e>>8,1E&e]:(","===e.1u(e.1c-1)&&(e=e.1t(0,e.1c-1)),3G[e]?3G[e]:"#"===e.1u(0)?(4===e.1c&&(t=e.1u(1),n=e.1u(2),r=e.1u(3),e="#"+t+t+n+n+r+r),e=3q(e.1t(1),16),[e>>16,1E&e>>8,1E&e]):"6m"===e.1t(0,3)?(e=e.2K(v),i=1C(e[0])%6r/6r,s=1C(e[1])/23,o=1C(e[2])/23,n=.5>=o?o*(s+1):o+s-o*s,t=2*o-n,e.1c>3&&(e[3]=1C(e[3])),e[0]=4W(i+1/3,t,n),e[1]=4W(i,t,n),e[2]=4W(i-1/3,t,n),e):(e=e.2K(v)||3G.4a,e[0]=1C(e[0]),e[1]=1C(e[1]),e[2]=1C(e[2]),e.1c>3&&(e[3]=1C(e[3])),e)):3G.8k},at="(?:\\\\b(?:(?:5e|6N|6m|bZ)\\\\(.+?\\\\))|\\\\B#.+?\\\\b";1b(a 1w 3G)at+="|"+a+"\\\\b";at=4k(at+")","3N");19 6I=17(e,t,n,r){1a(1d==e)18 17(e){18 e};19 i,s=t?(e.2K(at)||[""])[0]:"",o=e.1s(s).1G("").2K(g)||[],u=e.1t(0,e.1k(o[0])),a=")"===e.1u(e.1c-1)?")":"",f=-1!==e.1k(" ")?" ":",",l=o.1c,c=l>0?o[0].1D(v,""):"";18 l?i=t?17(e){19 t,h,p,d;1a("2t"==1j e)e+=c;1m 1a(r&&M.2P(e)){1b(d=e.1D(M,"|").1s("|"),p=0;d.1c>p;p++)d[p]=i(d[p]);18 d.1G(",")}1a(t=(e.2K(at)||[s])[0],h=e.1s(t).1G("").2K(g)||[],p=h.1c,l>p--)1b(;l>++p;)h[p]=n?h[0|(p-1)/2]:o[p];18 u+h.1G(f)+f+t+a+(-1!==e.1k("6D")?" 6D":"")}:17(e){19 t,s,h;1a("2t"==1j e)e+=c;1m 1a(r&&M.2P(e)){1b(s=e.1D(M,"|").1s("|"),h=0;s.1c>h;h++)s[h]=i(s[h]);18 s.1G(",")}1a(t=e.2K(g)||[],h=t.1c,l>h--)1b(;l>++h;)t[h]=n?t[0|(h-1)/2]:o[h];18 u+t.1G(f)+a}:17(e){18 e}},6A=17(e){18 e=e.1s(","),17(t,n,r,i,s,o,u){19 a,f=(n+"").1s(" ");1b(u={},a=0;4>a;a++)u[e[a]]=f[a]=f[a]||f[(a-1)/2>>0];18 i.2S(t,u,s,o)}},ct=(F.bL=17(e){15.2A.1X(e);1b(19 t,n,r,i,s=15.1z,o=s.8t,u=s.42,a=1e-6;u;)t=o[u.v],u.r?t=t>0?0|t+.5:0|t-.5:a>t&&t>-a&&(t=0),u.t[u.p]=t,u=u.1f;1a(s.8c&&(s.8c.1F=o.1F),1===e)1b(u=s.42;u;){1a(n=u.t,n.2r){1a(1===n.2r){1b(i=n.1W+n.s+n.3V,r=1;n.l>r;r++)i+=n["3g"+r]+n["2X"+(r+1)];n.e=i}}1m n.e=n.s+n.1W;u=u.1f}},17(e,t,n,r,i){15.t=e,15.p=t,15.v=n,15.r=i,r&&(r.1l=15,15.1f=r)}),24=(F.bK=17(e,t,n,r,i,s){19 o,u,a,f,l,c=r,h={},p={},d=n.3p,v=P;1b(n.3p=1d,P=t,r=l=n.2S(e,t,r,i),P=v,s&&(n.3p=d,c&&(c.1l=1d,c.1l&&(c.1l.1f=1d)));r&&r!==c;){1a(1>=r.2r&&(u=r.p,p[u]=r.s+r.c,h[u]=r.s,s||(f=1g ct(r,"s",u,f,r.r),r.c=0),1===r.2r))1b(o=r.l;--o>0;)a="3g"+o,u=r.p+"2q"+a,p[u]=r.1z[a],h[u]=r[a],s||(f=1g ct(r,a,u,f,r.5f[a]));r=r.1f}18{8t:h,bw:p,42:f,4f:l}},F.bx=17(e,t,r,i,o,u,a,f,l,c,h){15.t=e,15.p=t,15.s=r,15.c=i,15.n=a||t,e 2a 24||s.28(15.n),15.r=f,15.2r=u||0,l&&(15.2s=l,n=!0),15.b=2u 0===c?r:c,15.e=2u 0===h?r+i:h,o&&(15.1f=o,o.1l=15)}),4f=o.46=17(e,t,n,r,i,s,o,u,a,l){n=n||s||"",o=1g 24(e,t,0,0,o,l?2:1,1d,!1,u,n,r),r+="";19 c,h,p,d,g,y,b,w,E,S,T,N,C=n.1s(", ").1G(",").1s(" "),k=r.1s(", ").1G(",").1s(" "),L=C.1c,A=f!==!1;1b((-1!==r.1k(",")||-1!==n.1k(","))&&(C=C.1G(" ").1D(M,", ").1s(" "),k=k.1G(" ").1D(M,", ").1s(" "),L=C.1c),L!==k.1c&&(C=(s||"").1s(" "),L=C.1c),o.2A=a,o.1X=l,c=0;L>c;c++)1a(d=C[c],g=k[c],w=1q(d),w||0===w)o.3I("",w,3s(g,w),g.1D(m,""),A&&-1!==g.1k("2d"),!0);1m 1a(i&&("#"===d.1u(0)||3G[d]||x.2P(d)))N=","===g.1u(g.1c-1)?"),":")",d=5d(d),g=5d(g),E=d.1c+g.1c>6,E&&!q&&0===g[3]?(o["2X"+o.l]+=o.l?" 4a":"4a",o.e=o.e.1s(k[c]).1G("4a")):(q||(E=!1),o.3I(E?"6N(":"5e(",d[0],g[0]-d[0],",",!0,!0).3I("",d[1],g[1]-d[1],",",!0).3I("",d[2],g[2]-d[2],E?",":N,!0),E&&(d=4>d.1c?1:d[3],o.3I("",d,(4>g.1c?1:g[3])-d,N,!1)));1m 1a(y=d.2K(v)){1a(b=g.2K(m),!b||b.1c!==y.1c)18 o;1b(p=0,h=0;y.1c>h;h++)T=y[h],S=d.1k(T,p),o.3I(d.1t(p,S-p),1C(T),3s(b[h],T),"",A&&"2d"===d.1t(S+T.1c,2),0===h),p=S+T.1c;o["2X"+o.l]+=d.1t(p)}1m o["2X"+o.l]+=o.l?" "+d:d;1a(-1!==r.1k("=")&&o.1z){1b(N=o.1W+o.1z.s,c=1;o.l>c;c++)N+=o["2X"+c]+o.1z["3g"+c];o.e=N+o["2X"+c]}18 o.l||(o.2r=-1,o.1W=o.e),o.3H||o},2m=9;1b(a=24.1x,a.l=a.2s=0;--2m>0;)a["3g"+2m]=0,a["2X"+2m]="";a.1W="",a.1f=a.1l=a.3H=a.1z=a.2A=a.1X=a.5f=1d,a.3I=17(e,t,n,r,i,s){19 o=15,u=o.l;18 o["2X"+u]+=s&&u?" "+e:e||"",n||0===u||o.2A?(o.l++,o.2r=o.1X?2:1,o["2X"+o.l]=r||"",u>0?(o.1z["3g"+u]=t+n,o.5f["3g"+u]=i,o["3g"+u]=t,o.2A||(o.3H=1g 24(o,"3g"+u,t,n,o.3H||o,0,o.n,i,o.2s),o.3H.1W=0),o):(o.1z={s:t+n},o.5f={},o.s=t,o.c=n,o.r=i,o)):(o["2X"+u]+=t+(r||""),o)};19 5G=17(e,t){t=t||{},15.p=t.2T?X(e)||e:e,u[e]=u[15.p]=15,15.2U=t.4R||6I(t.2y,t.4g,t.by,t.47),t.2b&&(15.2S=t.2b),15.8D=t.4g,15.47=t.47,15.4V=t.4V,15.49=t.2y,15.2s=t.5H||0},1L=F.bv=17(e,t,n){"3T"!=1j t&&(t={2b:n});19 r,i,s=e.1s(","),o=t.2y;1b(n=n||[o],r=0;s.1c>r;r++)t.2T=0===r&&t.2T,t.2y=n[r]||o,i=1g 5G(s[r],t)},7H=17(e){1a(!u[e]){19 t=e.1u(0).5h()+e.1t(1)+"8j";1L(e,{2b:17(e,n,r,i,s,o,a){19 f=(1T.6h||1T).4F.4A.4z[t];18 f?(f.bu(),u[r].2S(e,n,r,i,s,o,a)):(U("bp: "+t+" bq br 8a bs."),s)}})}};a=5G.1x,a.46=17(e,t,n,r,i,s){19 o,u,a,f,l,c,h=15.4V;1a(15.47&&(M.2P(n)||M.2P(t)?(u=t.1D(M,"|").1s("|"),a=n.1D(M,"|").1s("|")):h&&(u=[t],a=[n])),a){1b(f=a.1c>u.1c?a.1c:u.1c,o=0;f>o;o++)t=u[o]=u[o]||15.49,n=a[o]=a[o]||15.49,h&&(l=t.1k(h),c=n.1k(h),l!==c&&(n=-1===c?a:u,n[o]+=" "+h));t=u.1G(", "),n=a.1G(", ")}18 4f(e,15.p,t,n,15.8D,15.49,r,15.2s,i,s)},a.2S=17(e,t,n,r,s,o){18 15.46(e.1v,15.2U($(e,15.p,i,!1,15.49)),15.2U(t),s,o)},o.bA=17(e,t,n){1L(e,{2b:17(e,r,i,s,o,u){19 a=1g 24(e,i,0,0,o,2,i,!1,n);18 a.2A=u,a.1X=t(e,r,s.2V,i),a},5H:n})};19 6K="2f,2g,2N,x,y,z,1S,1F,1Q,21,33".1s(","),bt=X("3P"),8B=z+"3P",5m=X("4Q"),3j=1d!==X("33"),44=17(e,t,n,r){1a(e.4b&&n&&!r)18 e.4b;19 i,s,u,a,f,l,c,h,p,d,v,m,g,y=n?e.4b||{30:0}:{30:0},b=0>y.2f,w=2e-5,E=54,S=bH.99,x=S*2q,T=3j?1q($(e,5m,t,!1,"0 0 0").1s(" ")[2])||y.2Q||0:0;1b(bt?i=$(e,8B,t,!0):e.2R&&(i=e.2R.2i.2K(A),i=i&&4===i.1c?[i[0].1t(4),1C(i[2].1t(4)),1C(i[1].1t(4)),i[3].1t(4),y.x||0,y.y||0].1G(","):""),s=(i||"").2K(/(?:\\-|\\b)[\\d\\-\\.e]+\\b/3N)||[],u=s.1c;--u>-1;)a=1C(s[u]),s[u]=(f=a-(a|=0))?(0|f*E+(0>f?-.5:.5))/E+a:a;1a(16===s.1c){19 N=s[8],C=s[9],k=s[10],L=s[12],O=s[13],M=s[14];1a(y.2Q&&(M=-y.2Q,L=N*M-s[12],O=C*M-s[13],M=k*M+y.2Q-s[14]),!n||r||1d==y.1Q){19 P,H,B,j,F,I,q,R=s[0],U=s[1],z=s[2],W=s[3],X=s[4],V=s[5],J=s[6],K=s[7],Q=s[11],G=1h.4w(J,k),Y=-x>G||G>x;y.1Q=G*D,G&&(j=1h.2D(-G),F=1h.2h(-G),P=X*j+N*F,H=V*j+C*F,B=J*j+k*F,N=X*-F+N*j,C=V*-F+C*j,k=J*-F+k*j,Q=K*-F+Q*j,X=P,V=H,J=B),G=1h.4w(N,R),y.21=G*D,G&&(I=-x>G||G>x,j=1h.2D(-G),F=1h.2h(-G),P=R*j-N*F,H=U*j-C*F,B=z*j-k*F,C=U*F+C*j,k=z*F+k*j,Q=W*F+Q*j,R=P,U=H,z=B),G=1h.4w(U,V),y.1F=G*D,G&&(q=-x>G||G>x,j=1h.2D(-G),F=1h.2h(-G),R=R*j+X*F,H=U*j+V*F,V=U*-F+V*j,J=z*-F+J*j,U=H),q&&Y?y.1F=y.1Q=0:q&&I?y.1F=y.21=0:I&&Y&&(y.21=y.1Q=0),y.2f=(0|1h.3l(R*R+U*U)*E+.5)/E,y.2g=(0|1h.3l(V*V+C*C)*E+.5)/E,y.2N=(0|1h.3l(J*J+k*k)*E+.5)/E,y.1S=0,y.33=Q?1/(0>Q?-Q:Q):0,y.x=L,y.y=O,y.z=M}}1m 1a(!(3j&&!r&&s.1c&&y.x===s[4]&&y.y===s[5]&&(y.1Q||y.21)||2u 0!==y.x&&"3r"===$(e,"6s",t))){19 Z=s.1c>=6,3D=Z?s[0]:1,3e=s[1]||0,3s=s[2]||0,2B=Z?s[3]:1;y.x=s[4]||0,y.y=s[5]||0,l=1h.3l(3D*3D+3e*3e),c=1h.3l(2B*2B+3s*3s),h=3D||3e?1h.4w(3e,3D)*D:y.1F||0,p=3s||2B?1h.4w(3s,2B)*D+h:y.1S||0,d=l-1h.56(y.2f||0),v=c-1h.56(y.2g||0),1h.56(p)>90&&bJ>1h.56(p)&&(b?(l*=-1,p+=0>=h?31:-31,h+=0>=h?31:-31):(c*=-1,p+=0>=p?31:-31)),m=(h-y.1F)%31,g=(p-y.1S)%31,(2u 0===y.1S||d>w||-w>d||v>w||-w>v||m>-S&&S>m&&5O|m*E||g>-S&&S>g&&5O|g*E)&&(y.2f=l,y.2g=c,y.1F=h,y.1S=p),3j&&(y.1Q=y.21=y.z=0,y.33=1q(o.8g)||0,y.2N=1)}y.2Q=T;1b(u 1w y)w>y[u]&&y[u]>-w&&(y[u]=0);18 n&&(e.4b=y),y},7O=17(e){19 t,n,r=15.1z,i=-r.1F*2q,s=i+r.1S*2q,o=54,u=(0|1h.2D(i)*r.2f*o)/o,a=(0|1h.2h(i)*r.2f*o)/o,f=(0|1h.2h(s)*-r.2g*o)/o,l=(0|1h.2D(s)*r.2g*o)/o,c=15.t.1v,h=15.t.2R;1a(h){n=a,a=-f,f=-n,t=h.2i,c.2i="";19 p,v,m=15.t.4H,g=15.t.4r,y="8y"!==h.4q,E="8x:5J.5L.5M(8z="+u+", 8O="+a+", 8N="+f+", 8L="+l,S=r.x,x=r.y;1a(1d!=r.57&&(p=(r.8K?.8I*m*r.57:r.57)-m/2,v=(r.8H?.8I*g*r.5K:r.5K)-g/2,S+=p-(p*u+v*a),x+=v-(p*f+v*l)),y?(p=m/2,v=g/2,E+=", 8E="+(p-(p*u+v*a)+S)+", 8G="+(v-(p*f+v*l)+x)+")"):E+=", bF=\'2n bB\')",c.2i=-1!==t.1k("5J.5L.5M(")?t.1D(O,E):E+" "+t,(0===e||1===e)&&1===u&&0===a&&0===f&&1===l&&(y&&-1===E.1k("8E=0, 8G=0")||w.2P(t)&&23!==1q(4k.$1)||-1===t.1k("bD("&&t.1k("bE"))&&c.6Q("2i")),!y){19 T,N,C,k=8>d?1:-1;1b(p=r.5l||0,v=r.58||0,r.5l=1h.59((m-((0>u?-u:u)*m+(0>a?-a:a)*g))/2+S),r.58=1h.59((g-((0>l?-l:l)*g+(0>f?-f:f)*m))/2+x),2m=0;4>2m;2m++)N=Z[2m],T=h[N],n=-1!==T.1k("2d")?1q(T):J(15.t,N,1q(T),T.1D(b,""))||0,C=n!==r[N]?2>2m?-r.5l:-r.58:2>2m?p-r.5l:v-r.58,c[N]=(r[N]=1h.59(n-C*(0===2m||2===2m?1:k)))+"2d"}}},7D=17(){19 e,t,n,r,i,s,o,u,a,f,l,c,p,d,v,m,g,y,b,w,E,S,x,T=15.1z,N=15.t.1v,C=T.1F*2q,k=T.2f,L=T.2g,A=T.2N,O=T.33;1a(h){19 M=1e-4;M>k&&k>-M&&(k=A=2e-5),M>L&&L>-M&&(L=A=2e-5),!O||T.z||T.1Q||T.21||(O=0)}1a(C||T.1S)y=1h.2D(C),b=1h.2h(C),e=y,i=b,T.1S&&(C-=T.1S*2q,y=1h.2D(C),b=1h.2h(C)),t=-b,s=y;1m{1a(!(T.21||T.1Q||1!==A||O))18 N[bt]="bC("+T.x+"2d,"+T.y+"2d,"+T.z+"2d)"+(1!==k||1!==L?" 48("+k+","+L+")":""),2u 0;e=s=1,t=i=0}l=1,n=r=o=u=a=f=c=p=d=0,v=O?-1/O:0,m=T.2Q,g=54,C=T.21*2q,C&&(y=1h.2D(C),b=1h.2h(C),a=l*-b,p=v*-b,n=e*b,o=i*b,l*=y,v*=y,e*=y,i*=y),C=T.1Q*2q,C&&(y=1h.2D(C),b=1h.2h(C),w=t*y+n*b,E=s*y+o*b,S=f*y+l*b,x=d*y+v*b,n=t*-b+n*y,o=s*-b+o*y,l=f*-b+l*y,v=d*-b+v*y,t=w,s=E,f=S,d=x),1!==A&&(n*=A,o*=A,l*=A,v*=A),1!==L&&(t*=L,s*=L,f*=L,d*=L),1!==k&&(e*=k,i*=k,a*=k,p*=k),m&&(c-=m,r=n*c,u=o*c,c=l*c+m),r=(w=(r+=T.x)-(r|=0))?(0|w*g+(0>w?-.5:.5))/g+r:r,u=(w=(u+=T.y)-(u|=0))?(0|w*g+(0>w?-.5:.5))/g+u:u,c=(w=(c+=T.z)-(c|=0))?(0|w*g+(0>w?-.5:.5))/g+c:c,N[bt]="bG("+[(0|e*g)/g,(0|i*g)/g,(0|a*g)/g,(0|p*g)/g,(0|t*g)/g,(0|s*g)/g,(0|f*g)/g,(0|d*g)/g,(0|n*g)/g,(0|o*g)/g,(0|l*g)/g,(0|v*g)/g,r,u,c,O?1+ -c/O:1].1G(",")+")"},7B=17(){19 e,t,n,r,i,s,o,u,a,f=15.1z,l=15.t,c=l.1v;h&&(e=c.3k?"3k":c.4x?"4x":1q($(l,"3k",1d,!1))?"4x":"3k",t=$(l,e,1d,!1),n=1q(t)||0,r=t.1t((n+"").1c)||"2d",f.6y=!f.6y,c[e]=(f.6y?n+.8v:n-.8v)+r),f.1F||f.1S?(i=f.1F*2q,s=i-f.1S*2q,o=54,u=f.2f*o,a=f.2g*o,c[bt]="8b("+(0|1h.2D(i)*u)/o+","+(0|1h.2h(i)*u)/o+","+(0|1h.2h(s)*-a)/o+","+(0|1h.2D(s)*a)/o+","+f.x+","+f.y+")"):c[bt]="8b("+f.2f+",0,0,"+f.2g+","+f.x+","+f.y+")"};1L("3P,48,2f,2g,2N,x,y,z,1F,1Q,21,6u,1S,30,6t,6B,6C,bI,4Q,8s,8n,8Q,4E",{2b:17(e,t,n,r,s,o,u){1a(r.3p)18 s;19 a,f,l,c,h,p,d,v=r.3p=44(e,i,!0,u.8Q),m=e.1v,g=1e-6,y=6K.1c,b=u,w={};1a("1H"==1j b.3P&&bt)l=m.37,m[bt]=b.3P,m.6s="bz",a=44(e,1d,!1),m.37=l;1m 1a("3T"==1j b){1a(a={2f:2B(1d!=b.2f?b.2f:b.48,v.2f),2g:2B(1d!=b.2g?b.2g:b.48,v.2g),2N:2B(1d!=b.2N?b.2N:b.48,v.2N),x:2B(b.x,v.x),y:2B(b.y,v.y),z:2B(b.z,v.z),33:2B(b.8s,v.33)},d=b.8n,1d!=d)1a("3T"==1j d)1b(l 1w d)b[l]=d[l];1m b.1F=d;a.1F=3z("1F"1w b?b.1F:"6t"1w b?b.6t+"6J":"6u"1w b?b.6u:v.1F,v.1F,"1F",w),3j&&(a.1Q=3z("1Q"1w b?b.1Q:"6B"1w b?b.6B+"6J":v.1Q||0,v.1Q,"1Q",w),a.21=3z("21"1w b?b.21:"6C"1w b?b.6C+"6J":v.21||0,v.21,"21",w)),a.1S=1d==b.1S?v.1S:3z(b.1S,v.1S),a.30=1d==b.30?v.30:3z(b.30,v.30),(f=a.30-v.30)&&(a.1S+=f,a.1F+=f)}1b(1d!=b.4E&&(v.4E=b.4E,p=!0),h=v.4E||v.z||v.1Q||v.21||a.z||a.1Q||a.21||a.33,h||1d==b.48||(a.2N=1);--y>-1;)n=6K[y],c=a[n]-v[n],(c>g||-g>c||1d!=P[n])&&(p=!0,s=1g 24(v,n,v[n],c,s),n 1w w&&(s.e=w[n]),s.1W=0,s.2A=o,r.2E.28(s.n));18 c=b.4Q,(c||3j&&h&&v.2Q)&&(bt?(p=!0,n=5m,c=(c||$(e,n,i,!1,"50% 50%"))+"",s=1g 24(m,n,0,0,s,-1,"4Q"),s.b=m[n],s.2A=o,3j?(l=v.2Q,c=c.1s(" "),v.2Q=(c.1c>2&&(0===l||"1J"!==c[2])?1q(c[2]):l)||0,s.1W=s.e=m[n]=c[0]+" "+(c[1]||"50%")+" 1J",s=1g 24(v,"2Q",0,0,s,-1,s.n),s.b=l,s.1W=s.e=v.2Q):s.1W=s.e=m[n]=c):3e(c+"",v)),p&&(r.3S=h||3===15.3S?3:2),s},2T:!0}),1L("bY",{2y:"1J 1J 1J 1J #6V",2T:!0,4g:!0,47:!0,4V:"6D"}),1L("bX",{2y:"1J",2b:17(e,t,n,s,o){t=15.2U(t);19 u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x=["c0","c3","bW","aW"],T=e.1v;1b(v=1q(e.4H),m=1q(e.4r),u=t.1s(" "),a=0;x.1c>a;a++)15.p.1k("3X")&&(x[a]=X(x[a])),c=l=$(e,x[a],i,!1,"1J"),-1!==c.1k(" ")&&(l=c.1s(" "),c=l[0],l=l[1]),h=f=u[a],p=1q(c),y=c.1t((p+"").1c),b="="===h.1u(1),b?(d=3q(h.1u(0)+"1",10),h=h.1t(2),d*=1q(h),g=h.1t((d+"").1c-(0>d?1:0))||""):(d=1q(h),g=h.1t((d+"").1c)),""===g&&(g=r[n]||y),g!==y&&(w=J(e,"6X",p,y),E=J(e,"aJ",p,y),"%"===g?(c=23*(w/v)+"%",l=23*(E/m)+"%"):"4d"===g?(S=J(e,"6X",1,"4d"),c=w/S+"4d",l=E/S+"4d"):(c=w+"2d",l=E+"2d"),b&&(h=1q(c)+d+g,f=1q(l)+d+g)),o=4f(T,x[a],c+" "+l,h+" "+f,!1,"1J",o);18 o},2T:!0,4R:6I("1J 1J 1J 1J",!1,!0)}),1L("b4",{2y:"0 0",2b:17(e,t,n,r,s,o){19 u,a,f,l,c,h,p="b9-4q",v=i||V(e,1d),m=15.2U((v?d?v.4m(p+"-x")+" "+v.4m(p+"-y"):v.4m(p):e.2R.c5+" "+e.2R.cQ)||"0 0"),g=15.2U(t);1a(-1!==m.1k("%")!=(-1!==g.1k("%"))&&(h=$(e,"cS").1D(C,""),h&&"3r"!==h)){1b(u=m.1s(" "),a=g.1s(" "),j.cM("cG",h),f=2;--f>-1;)m=u[f],l=-1!==m.1k("%"),l!==(-1!==a[f].1k("%"))&&(c=0===f?e.4H-j.3M:e.4r-j.3B,u[f]=l?1q(m)/23*c+"2d":23*(1q(m)/c)+"%");m=u.1G(" ")}18 15.46(e.1v,m,g,s,o)},4R:3e}),1L("cI",{2y:"0 0",4R:3e}),1L("33",{2y:"1J",2T:!0}),1L("cK",{2y:"50% 50%",2T:!0}),1L("cY",{2T:!0}),1L("cj",{2T:!0}),1L("cx",{2T:!0}),1L("6w",{2b:6A("83,81,82,7C")}),1L("6x",{2b:6A("cq,cl,cb,cF")}),1L("c9",{2y:"7R(1J,1J,1J,1J)",2b:17(e,t,n,r,s,o){19 u,a,f;18 9>d?(a=e.2R,f=8>d?" ":",",u="7R("+a.aG+f+a.cg+f+a.cD+f+a.d2+")",t=15.2U(t).1s(",").1G(f)):(u=15.2U($(e,15.p,i,!1,15.49)),t=15.2U(t)),15.46(e.1v,u,t,s,o)}}),1L("d5",{2y:"1J 1J 1J #6V",4g:!0,47:!0}),1L("7N,85",{2b:17(e,t,n,r,i){18 i}}),1L("3X",{2y:"1J 4S #6O",2b:17(e,t,n,r,s,o){18 15.46(e.1v,15.2U($(e,"70",i,!1,"1J")+" "+$(e,"cL",i,!1,"4S")+" "+$(e,"cR",i,!1,"#6O")),15.2U(t),s,o)},4g:!0,4R:17(e){19 t=e.1s(" ");18 t[0]+" "+(t[1]||"4S")+" "+(e.2K(at)||["#6O"])[0]}}),1L("9E,6S,6W",{2b:17(e,t,n,r,i){19 s=e.1v,o="6S"1w s?"6S":"6W";18 1g 24(s,o,0,0,i,-1,n,!1,0,s[o],t)}});19 73=17(e){19 t,n=15.t,r=n.2i||$(15.1z,"2i"),i=0|15.s+15.c*e;23===i&&(-1===r.1k("9k(")&&-1===r.1k("9e(")&&-1===r.1k("98(")?(n.6Q("2i"),t=!$(15.1z,"2i")):(n.2i=r.1D(S,""),t=!0)),t||(15.3O&&(n.2i=r=r||"3E(1Y="+i+")"),-1===r.1k("1Y")?0===i&&15.3O||(n.2i=r+" 3E(1Y="+i+")"):n.2i=r.1D(w,"1Y="+i))};1L("1Y,3E,5n",{2y:"1",2b:17(e,t,n,r,s,o){19 u=1q($(e,"1Y",i,!1,"1")),a=e.1v,f="5n"===n;18"1H"==1j t&&"="===t.1u(1)&&(t=("-"===t.1u(0)?-1:1)*1q(t.1t(2))+u),f&&1===u&&"5z"===$(e,"6E",i)&&0!==t&&(u=0),q?s=1g 24(a,"1Y",u,t-u,s):(s=1g 24(a,"1Y",23*u,23*(t-u),s),s.3O=f?1:0,a.7z=1,s.2r=2,s.b="3E(1Y="+s.s+")",s.e="3E(1Y="+(s.s+s.c)+")",s.1z=e,s.2A=o,s.1X=73),f&&(s=1g 24(a,"6E",0,0,s,-1,1d,!1,0,0!==u?"6T":"5z",0===t?"5z":"6T"),s.1W="6T",r.2E.28(s.n),r.2E.28(n)),s}});19 53=17(e,t){t&&(e.88?e.88(t.1D(T,"-$1").6R()):e.6Q(t))},7M=17(e){1a(15.t.4K=15,1===e||0===e){15.t.39=0===e?15.b:15.e;1b(19 t=15.1z,n=15.t.1v;t;)t.v?n[t.p]=t.v:53(n,t.p),t=t.1f;1===e&&15.t.4K===15&&(15.t.4K=1d)}1m 15.t.39!==15.e&&(15.t.39=15.e)};1L("39",{2b:17(e,t,r,s,o,u,a){19 f,l,c,h,p,d=e.39,v=e.1v.37;1a(o=s.6F=1g 24(e,r,0,0,o,2),o.1X=7M,o.2s=-11,n=!0,o.b=d,l=Q(e,i),c=e.4K){1b(h={},p=c.1z;p;)h[p.p]=1,p=p.1f;c.1X(1)}18 e.4K=o,o.e="="!==t.1u(1)?t:d.1D(4k("\\\\s*\\\\b"+t.1t(2)+"\\\\b"),"")+("+"===t.1u(0)?" "+t.1t(2):""),s.2V.1N&&(e.39=o.e,f=G(e,l,Q(e),a,h),e.39=d,o.1z=f.42,e.1v.37=v,o=o.3H=s.2S(e,f.4T,o,u)),o}});19 7I=17(e){1a((1===e||0===e)&&15.1z.1K===15.1z.2l&&"7G"!==15.1z.1z){19 t,n,r,i,s=15.t.1v,o=u.3P.2S;1a("3Y"===15.e)s.37="",i=!0;1m 1b(t=15.e.1s(","),r=t.1c;--r>-1;)n=t[r],u[n]&&(u[n].2S===o?i=!0:n="4Q"===n?5m:u[n].p),53(s,n);i&&(53(s,bt),15.t.4b&&3L 15.t.4b)}};1b(1L("9d",{2b:17(e,t,r,i,s){18 s=1g 24(e,r,0,0,s,2),s.1X=7I,s.e=t,s.2s=-10,s.1z=i.2V,n=!0,s}}),a="9m,9v,9u,9w".1s(","),2m=a.1c;2m--;)7H(a[2m]);a=o.1x,a.1r=1d,a.6M=17(e,t,u){1a(!e.3o)18!1;15.7t=e,15.2V=u,15.7E=t,f=t.7N,n=!1,r=t.6z||o.6z,i=V(e,""),s=15.2E;19 a,h,d,v,m,g,y,b,w,S=e.1v;1a(l&&""===S.3F&&(a=$(e,"3F",i),("2n"===a||""===a)&&(S.3F=0)),"1H"==1j t&&(v=S.37,a=Q(e,i),S.37=v+";"+t,a=G(e,a,Q(e)).4T,!q&&E.2P(t)&&(a.1Y=1q(4k.$1)),t=a,S.37=v),15.1r=h=15.2S(e,t,1d),15.3S){1b(w=3===15.3S,bt?c&&(l=!0,""===S.3F&&(y=$(e,"3F",i),("2n"===y||""===y)&&(S.3F=0)),p&&(S.7y=15.7E.7y||(w?"9p":"5z"))):S.7z=1,d=h;d&&d.1f;)d=d.1f;b=1g 24(e,"3P",0,0,1d,2),15.5w(b,1d,d),b.1X=w&&3j?7D:bt?7B:7O,b.1z=15.3p||44(e,i,!0),s.4G()}1a(n){1b(;h;){1b(g=h.1f,d=v;d&&d.2s>h.2s;)d=d.1f;(h.1l=d?d.1l:m)?h.1l.1f=h:v=h,(h.1f=d)?d.1l=h:m=h,h=g}15.1r=v}18!0},a.2S=17(e,t,n,s){19 o,a,l,c,h,p,d,v,m,g,y=e.1v;1b(o 1w t)p=t[o],a=u[o],a?n=a.2S(e,p,o,15,n,s,t):(h=$(e,o,i)+"",m="1H"==1j p,"4g"===o||"8Y"===o||"aj"===o||-1!==o.1k("ai")||m&&x.2P(p)?(m||(p=5d(p),p=(p.1c>3?"6N(":"5e(")+p.1G(",")+")"),n=4f(y,o,h,p,!0,"4a",n,0,s)):!m||-1===p.1k(" ")&&-1===p.1k(",")?(l=1q(h),d=l||0===l?h.1t((l+"").1c):"",(""===h||"2n"===h)&&("3M"===o||"3B"===o?(l=3D(e,o,i),d="2d"):"4u"===o||"3k"===o?(l=K(e,o,i),d="2d"):(l="1Y"!==o?0:1,d="")),g=m&&"="===p.1u(1),g?(c=3q(p.1u(0)+"1",10),p=p.1t(2),c*=1q(p),v=p.1D(b,"")):(c=1q(p),v=m?p.1t((c+"").1c)||"":""),""===v&&(v=r[o]||d),p=c||0===c?(g?c+l:c)+v:t[o],d!==v&&""!==v&&(c||0===c)&&(l||0===l)&&(l=J(e,o,l,d),"%"===v?(l/=J(e,o,23,"%")/23,l>23&&(l=23),t.85!==!0&&(h=l+"%")):"4d"===v?l/=J(e,o,1,"4d"):(c=J(e,o,c,v),v="2d"),g&&(c||0===c)&&(p=c+l+v)),g&&(c+=l),!l&&0!==l||!c&&0!==c?2u 0!==y[o]&&(p||"ad"!=p+""&&1d!=p)?(n=1g 24(y,o,c||l||0,0,n,-1,o,!1,0,h,p),n.1W="3r"!==p||"6s"!==o&&-1===o.1k("ae")?p:h):U("ao "+o+" 6v az: "+t[o]):(n=1g 24(y,o,l,c-l,n,0,o,f!==!1&&("2d"===v||"3F"===o),0,h,p),n.1W=v)):n=4f(y,o,h,p,!0,1d,n,0,s)),s&&n&&!n.2A&&(n.2A=s);18 n},a.1X=17(e){19 t,n,r,i=15.1r,s=1e-6;1a(1!==e||15.2V.1n!==15.2V.1N&&0!==15.2V.1n)1a(e||15.2V.1n!==15.2V.1N&&0!==15.2V.1n||15.2V.1O===-1e-6)1b(;i;){1a(t=i.c*e+i.s,i.r?t=t>0?0|t+.5:0|t-.5:s>t&&t>-s&&(t=0),i.2r)1a(1===i.2r)1a(r=i.l,2===r)i.t[i.p]=i.1W+t+i.3V+i.3O+i.5b;1m 1a(3===r)i.t[i.p]=i.1W+t+i.3V+i.3O+i.5b+i.6L+i.6H;1m 1a(4===r)i.t[i.p]=i.1W+t+i.3V+i.3O+i.5b+i.6L+i.6H+i.79+i.7u;1m 1a(5===r)i.t[i.p]=i.1W+t+i.3V+i.3O+i.5b+i.6L+i.6H+i.79+i.7u+i.9B+i.9F;1m{1b(n=i.1W+t+i.3V,r=1;i.l>r;r++)n+=i["3g"+r]+i["2X"+(r+1)];i.t[i.p]=n}1m-1===i.2r?i.t[i.p]=i.1W:i.1X&&i.1X(e);1m i.t[i.p]=t+i.1W;i=i.1f}1m 1b(;i;)2!==i.2r?i.t[i.p]=i.b:i.1X(e),i=i.1f;1m 1b(;i;)2!==i.2r?i.t[i.p]=i.e:i.1X(e),i=i.1f},a.9H=17(e){15.3S=e||3===15.3S?3:2,15.3p=15.3p||44(15.7t,i,!0)},a.5w=17(e,t,n,r){18 e&&(t&&(t.1l=e),e.1f&&(e.1f.1l=e.1l),e.1l?e.1l.1f=e.1f:15.1r===e&&(15.1r=e.1f,r=!0),n?n.1f=e:r||1d!==15.1r||(15.1r=e),e.1f=t,e.1l=n),e},a.2p=17(t){19 n,r,i,s=t;1a(t.5n||t.3E){s={};1b(r 1w t)s[r]=t[r];s.1Y=1,s.5n&&(s.6E=1)}18 t.39&&(n=15.6F)&&(i=n.3H,i&&i.1l?15.5w(i.1l,n.1f,i.1l.1l):i===15.1r&&(15.1r=n.1f),n.1f&&15.5w(n.1f,n.1f.1f,i.1l),15.6F=1d),e.1x.2p.1Z(15,s)};19 4n=17(e,t,n){19 r,i,s,o;1a(e.6G)1b(i=e.1c;--i>-1;)4n(e[i],t,n);1m 1b(r=e.7j,i=r.1c;--i>-1;)s=r[i],o=s.2r,s.1v&&(t.28(Q(s)),n&&n.28(s)),1!==o&&9!==o&&11!==o||!s.7j.1c||4n(s,t,n)};18 o.9X=17(e,n,r){19 i,s,o,u=t.3v(e,n,r),a=[u],f=[],l=[],c=[],h=t.4p.7i;1b(e=u.2z||u.2v,4n(e,f,c),u.1B(n,!0),4n(e,l),u.1B(0,!0),u.1M(!0),i=c.1c;--i>-1;)1a(s=G(c[i],f[i],l[i]),s.42){s=s.4T;1b(o 1w r)h[o]&&(s[o]=r[o]);a.28(t.3v(c[i],n,s))}18 a},e.6P([o]),o},!0)}),1T.3R&&1T.3b.4G()()',62,813,'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||this||function|return|var|if|for|length|null||_next|new|Math|_startTime|typeof|indexOf|_prev|else|_time|vars|_timeline|parseFloat|_firstPT|split|substr|charAt|style|in|prototype|_timeScale|data|_paused|render|Number|replace|255|rotation|join|string|_gc|0px|_totalTime|mt|_enabled|_duration|_rawPrevTime|add|rotationX|_p1|skewX|window|timeline|immediateRender|xs0|setRatio|opacity|call||rotationY|arguments|100|ht||totalDuration|_first|push|_startAt|instanceof|parser|_active|px||scaleX|scaleY|sin|filter|easing|_p2|_totalDuration|dt|auto|_dirty|_kill|_|type|pr|number|void|target|_initted|getRatio|defaultValue|_targets|plugin|rt|duration|cos|_overwriteProps|smoothChildTiming|_reversed|_ease|5625|_delay|match|_labels|constructor|scaleZ|128|test|zOrigin|currentStyle|parse|prefix|format|_tween|splice|xs|_siblings|totalTime|skewY|180|_onUpdate|perspective|paused|_uncache|apply|cssText|startAt|className|wake|_gsQueue|_p3|_parseTimeOrLabel|tt|_overwrittenProps|xn|_last|ratio|St|top|sqrt|_calcEnd|pow|nodeType|_transform|parseInt|none|nt|config|time|to|selector|tweens|rawTime|it|_propLookup|height|_remove|et|alpha|zIndex|st|xfirst|appendXtra|API|Array|delete|width|gi|xn1|transform|ease|_gsDefine|_transformType|object|concat|xs1|getTweensOf|border|all|version|_listeners|frame|firstMPT|reversed|xt||parseComplex|multi|scale|dflt|transparent|_gsTransform|kill|em|seek|pt|color|set|onComplete|onReverseComplete|RegExp|PI|getPropertyValue|Mt|_initProps|_internals|position|offsetHeight|css|self|left|sc|atan2|bottom|delay|plugins|greensock|onStart|runBackwards|_pauseTime|force3D|com|pop|offsetWidth|_notifyPluginsOfEnabled|_sortChildren|_gsClassPT|overwrite|pg|_propName|isActive|autoRemoveChildren|transformOrigin|formatter|solid|difs|_onPluginEvent|keyword|ot|sleep|9999999999|_onInitAllProps||remove|Ticker|Lt|1e5||abs|ox|ieOffsetY|round|gsClass|xs2|TweenLite|ut|rgb|rxp|getChildren|toUpperCase|invalidate|192|core|ieOffsetX|Et|autoAlpha|_swapSelfInParams|easeParams|onUpdate|easeInOut|easeIn|next|strict|use|_linkCSSP|prev|tick|hidden|autoCSS|_func|_params|onStartParams|module|check|vt|priority|staggerTo|DXImageTransform|oy|Microsoft|Matrix|timeScale|false|_easeType|useFrames|easeOut|_overwrite|_priority|_hasPausedChild|define|throw|isNaN|Left|SlowMo||onCompleteParams|onCompleteScope|onStartScope|ms|console|fromTo|onUpdateParams|from|document|createElement|onUpdateScope|pause|625|984375|fps|_power|GreenSockGlobals|9375|_type|delayedCall|Scope|hsl|defaultEase|Params|setTimeout|_onDisable|360|display|shortRotation|rotationZ|tween|margin|padding|_ffFix|suffixMap|lt|shortRotationX|shortRotationY|inset|visibility|_classNamePT|slice|xs3|ft|_short|yt|xn2|_onInitTween|rgba|000|activate|removeAttribute|toLowerCase|cssFloat|inherit|log|999|styleFloat|borderLeft|_rootFramesTimeline|defaultView|borderTopWidth|_roundProps|Animation|kt|url||func|div|init|xn3|propName|onReverseCompleteParams|_init|center|right|_easePower|get|_gsTweenID|reservedProps|childNodes|Width|shiftChildren|appendChild|SimpleTimeline|onReverseCompleteScope|break|filters|Top|Right|_target|xs4|Ease|play|gap|WebkitBackfaceVisibility|zoom|_contains|Ct|marginLeft|Nt|_vars|Back|isFromStart|gt|Ot|template|strength|random|At|autoRound|Tt|removeLabel|TweenPlugin|rect|SteppedEase|isArray|isSelector|_p|_class|register|RoughEase|map|addLabel|marginRight|marginBottom|marginTop|insert|strictUnits|_updateRoot|Cannot|removeProperty|_onEnable|not|matrix|autoRotate|1e3|useRAF|startTime|defaultTransformPerspective|ticker|defaultOverwrite|Plugin|black|Date|events|directionalRotation|up|2e3|EventDispatcher|_eventTarget|transformPerspective|proxy|Linear|05|Quad|progid|absolute|M11|exports|wt|dispatchEvent|clrs|Dx|GreenSockAMDPath|Dy|oyp|01|autoSleep|oxp|M22|addEventListener|M21|M12|red|parseTransform|insertMultiple|cancelAnimationFrame|appendMultiple|CancelRequestAnimationFrame|stop|moz|getLabelTime|fill|RequestAnimationFrame||webkit|getTime|CancelAnimationFrame|addPause|now|easeNone|globals|oader||Cubic|clear|Quart|clearProps|radient|undefined|999999999999|Object|toString|amd|atrix|Quint|bezier|removeEventListener|swing|visible|gotoAndStop|gotoAndPlay|linear|004|physicsProps|throwProps|physics2D|Strong|Power|requestAnimationFrame|sequence|xn4|jQuery|_autoCSS|float|xs5|getElementById|_enableTransforms|jquery|killTweensOf|_addTween|illegal|_super|progress|killDelayedCallsTo|totalProgress|_tempKill|_plugins|preexisting|allOnStart|concurrent|true|_rootTimeline|cascadeTo|120|repeatDelay|repeat|_dummyGS|_tweenLookup|onRepeat|onRepeatParams|yoyo|onRepeatScope|definition|on|staggerFromTo|clearTimeout|exportRoot|staggerFrom|NaN|Style|1500|normal|start|Color|stroke|or|is|into|the|invalid|stagger|global|restart|reverse||initAll|overwriteProps|eventCallback|GSAP|encountered|value|align|resume|TimelineLite|missing|dependency|append|clipTop|offset|Origin|borderTop|Bottom|removeChild|body|line|borderLeftWidth|parentNode|oxr|oyr|aqua|lime|silver|maroon|borderBottomLeftRadius|ccw|rad|short|_cw|clientHeight|clientWidth|Android|backgroundPosition|Safari|Chrome|userAgent|navigator|background|img|_specialProps|Version|Firefox|Moz|Ms|Webkit|getComputedStyle|getElementsByTagName|1px|MSIE|exec|innerHTML|teal|blue|Error|js|file|loaded||_cssRegister|_registerComplexSpecialProp|end|CSSPropTween|collapsible|block|registerSpecialProp|expand|translate3d|gradient|Alpha|sizingMethod|matrix3d|179|shortRotationZ|270|_parseToProxy|_setPluginRatio|orange|165|gray|purple|yellow|olive|navy|white|fuchsia|green|borderBottomRightRadius|borderRadius|boxShadow|hsla|borderTopLeftRadius|cyan|pink|borderTopRightRadius|203|backgroundPositionX|getStyle|70158|ExpoIn|clip|ExpoOut|paddingBottom|Expo|001|ExpoInOut|SineOut|clipRight|sort|525|backfaceVisibility|Sine|paddingRight|Bounce|CircInOut|BounceInOut|CircIn|paddingTop|Circ|CircOut||BounceIn|asin|ElasticInOut|userSelect|ElasticIn|ElasticOut|BounceOut|Elastic|out|clipBottom|CSSPlugin|paddingLeft|src|999999999|backgroundSize|SineIn|perspectiveOrigin|borderTopStyle|setAttribute|zA|Z0|fontSize|backgroundPositionY|borderTopColor|backgroundImage|taper|BackInOut|EaseLookup|usesFrames|clamp|transformStyle|SineInOut|find|randomize|clipLeft|BackOut|points|textShadow|BackIn'.split('|'),0,{})) diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/layerslider.kreaturamedia.jquery.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/layerslider.kreaturamedia.jquery.js new file mode 100644 index 0000000..a9266ff --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/layerslider.kreaturamedia.jquery.js @@ -0,0 +1,13 @@ + +/* + * LayerSlider + * + * (c) 2011-2014 George Krupa, John Gera & Kreatura Media + * + * Plugin web: http://kreaturamedia.com/ + * licenses: http://codecanyon.net/licenses/ +*/ + + + +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('18 9s(e,t,n){16 r;6(1Y e=="4w"){r=3x("#"+e)}19 6(1Y e=="9u"){r=e}16 i,s;2q(t){1l"8j":i="cZ 3x 9M";s=\'9Q 9R 4N cD cu ae 3W 4T dB da an d6 bO 2Q 20 3x 9K bP bX 24 2A 2f 5V 4T c8. <1X>4S c6 4r 4T 4V c5 bS 2f 20 bZ bU 2Q 2A 4I dC 20 "d9 aw d8 2f 3T" d7 db 20 de & dd dc 3O.\';1j;1l"9q":i="5M 3x 9M";s="9Q 9R 4N d5 d4 cY an 5M 2B ("+n+\') 2Q 20 3x 9K. 2A cX at cW 2B 1.7.0 3W cV. 4S a7 3x 2f 1.10.x 3W d3. d2: 4S do 2H d1 20 3x dw ae 4r 4V 4I do 2H a7 2f 2.x 2B 2Q 3x dv 4h 3g 2H ah b1 du dt 4N dy 7 & 8. dk ca dj di dh dl 3x by dm dq.\';1j}r.1r("12-3Y");r.3Q(\'

              !

              \');r.3Q(\'

              2A: \'+i+"

              ");r.3Q(\'

              \'+s+"

              ")}(18(e){e.fn.2R=18(n){16 r="1.7.0";16 i=e.fn.8j;16 s=e(14);16 o=18(e,t){16 n=e.1E(".");16 r=t.1E(".");24(16 i=0;i1b(r[i])){1U 1h}19{1U 1c}}6(n.1k!=r.1k){1U 1c}1U 1c};6(!o("1.8.0",i)){s.1r("12-bq")}6(!o(r,i)){9s(s,"9q",i)}19{6((1Y n).3N("9u|3E")){1U 14.1O(18(e){1G t(14,n)})}19{6(n=="11"){16 u=e(14).11("2A").g;6(u){1U u}}19{1U 14.1O(18(t){16 r=e(14).11("2A");6(r){6(!r.g.2X&&!r.g.4a){6(1Y n=="3S"){6(n>0&&n1S | 1V | 22 | 1x | ce 1x\');f.d.3Z.17("a").1O(18(){e(14).2l(18(t){t.3A();e(u).2R(e(14).8N())})});f.d.aT("2A 2B cb");f.d.aU("aw 2B: <1X>"+f.g.2B+"");6(f.g.8l){f.d.aL("cg 2B: <1X>"+f.g.8l+"")}6(f.g.8i){f.d.aL("4V 2B: <1X>"+f.g.8i+"")}f.d.aL("3x 2B: <1X>"+e().8j+"");6(e(u).1f("4J")){f.d.aT("2A 2p");f.d.aU("#"+e(u).1f("4J"))}6(!f.o.2r||f.o.2r==""||!f.o.3v||f.o.3v==""){f.d.aT("ch cx 2r. cN: cL 2r 4I / 3W 3v.");f.59()}19{f.d.aT("cK 2f 2Z b1 2r: "+f.o.2r,1c);e(u).1r("12-"+f.o.2r);16 n=f.o.3v+f.o.2r+"/2r.1a";8R=e("aZ");6(!e("aZ").1k){8R=e("3T")}6(e(\'74[2h="\'+n+\'"]\').1k){f.d.aU(\'cS "\'+f.o.2r+\'" 3g cR 2W.\');r=e(\'74[2h="\'+n+\'"]\');6(!f.g.2W){f.g.2W=1c;f.g.ap=2e(18(){f.59()},70)}}19{6(5P.b7){5P.b7(n);16 r=e(\'74[2h="\'+n+\'"]\')}19{16 r=e(\'<74 5d="cQ" 2h="\'+n+\'" 4R="8N/1a" />\').1v(8R)}}r.2Z(18(){6(!f.g.2W){f.d.aU("aM.2Z(); 91");f.g.2W=1c;f.g.ao=2e(18(){f.59()},70)}});e(2o).2Z(18(){6(!f.g.2W){f.d.aU("$(2o).2Z(); 91");f.g.2W=1c;f.g.aj=2e(18(){f.59()},70)}});f.g.am=2e(18(){6(!f.g.2W){f.d.aT("cJ cC: cB aM.2Z(); 3W $(2o).2Z(); cz 91");f.g.2W=1c;f.59()}},1P)}}};f.59=18(){6(!e("4M").1f("4J")){e("4M").1f("4J","12-6E")}19 6(!e("3T").1f("4J")){e("3T").1f("4J","12-6E")}f.g.1z=18(){1U e(u).1d()};f.g.1F=18(){1U e(u).1e()};e(u).17(".12-5q").31("12-5q").1r("12-1p");e(u).17(\'.12-1p > *[1t*="12-s"]\').1O(18(){16 t=e(14).1f("1t").1E("12-s")[1].1E(" ")[0];e(14).31("12-s"+t).1r("12-l"+t)});6(f.o.aK){f.o.32=f.o.aK}6(f.o.cE===1h){f.o.4A=1h}6(e(u).17(".12-1p").1k==1){f.o.78=1h;f.o.8k=1h;f.o.6s=1h;f.o.6y=1h;f.o.4f=0;f.o.7u=1h;f.o.2C=1c;f.o.32=1;f.o.3o="aV"}6(f.o.1d){f.g.7E=f.g.2y=""+f.o.1d}19{f.g.7E=f.g.2y=e(u)[0].1N.1d}6(f.o.1e){f.g.4i=""+f.o.1e}19{f.g.4i=e(u)[0].1N.1e}6(f.g.2y.1i("%")==-1&&f.g.2y.1i("1I")==-1){f.g.2y+="1I"}6(f.g.4i.1i("%")==-1&&f.g.4i.1i("1I")==-1){f.g.4i+="1I"}6(f.o.bf&&f.g.2y.1i("1I")!=-1&&f.g.4i.1i("1I")!=-1){f.g.4d=1c}19{f.g.4d=1h}e(u).17(\'*[1t*="12-l"], *[1t*="12-bg"]\').1O(18(){6(!e(14).26().3k("12-1p")){e(14).cH(e(14).26())}});e(u).17(".12-1p").1O(18(){e(14).38(\':2H([1t*="12-"])\').1O(18(){e(14).6q()});16 t=e("<1n>").1r("12-cG");6(e(14).17(".12-bg").1k){t.cF(e(14).17(".12-bg").eq("0"))}19{t.7e(e(14))}});e(u).17(\'.12-1p, *[1t*="12-l"]\').1O(18(){6(e(14).11("12")||e(14).1f("5d")||e(14).1f("1N")){6(e(14).11("12")){16 t=e(14).11("12").21().1E(";")}19 6(e(14).1f("5d")&&e(14).1f("5d").1i(":")!=-1&&e(14).1f("5d").1i(";")!=-1){16 t=e(14).1f("5d").21().1E(";")}19{16 t=e(14).1f("1N").21().1E(";")}24(x=0;x0){r=e(14).38()}16 i=r.1d();16 s=r.1e();6(r[0].1N.1d&&r[0].1N.1d.1i("%")!=-1){i=r[0].1N.1d}6(r[0].1N.1e&&r[0].1N.1e.1i("%")!=-1){s=r[0].1N.1e}r.11("2T",i);r.11("2U",s);r.11("7N",r.1a("2a-1m"));r.11("7O",r.1a("2a-1D"));r.11("7R",r.1a("2a-1q"));r.11("7Q",r.1a("2a-1o"));16 o=1Y 3j(r.1a("2N"))=="3S"?1C.cA(3j(r.1a("2N"))*1J)/1J:1;e(14).11("75",o);6(r.1a("3s-1m-1d").1i("1I")==-1){r.11("7k",r[0].1N.9m)}19{r.11("7k",r.1a("3s-1m-1d"))}6(r.1a("3s-1D-1d").1i("1I")==-1){r.11("6h",r[0].1N.9i)}19{r.11("6h",r.1a("3s-1D-1d"))}6(r.1a("3s-1q-1d").1i("1I")==-1){r.11("6w",r[0].1N.9f)}19{r.11("6w",r.1a("3s-1q-1d"))}6(r.1a("3s-1o-1d").1i("1I")==-1){r.11("6x",r[0].1N.9g)}19{r.11("6x",r.1a("3s-1o-1d"))}r.11("9Z",r.1a("a1-a3"));r.11("9X",r.1a("98-1e"))});6(5P.4H.aO){24(16 t=0;t2){f.o.32=="2g";f.o.8b=1h}19{f.o.7p=1h}6(f.o.32=="2g"){f.o.32=1C.27(1C.2g()*f.g.2x+1)}f.o.4Z=f.o.4Z").1r("12-6e").1v(e(14).26());6(f.o.41){e("<1Z>").1v(i).1r("12-2J").11("1g",r+"//1Z.7v.68/ay/"+e(14).1f("1g").1E("7P/")[1].1E("?")[0]+"/"+f.o.8P)}19{e("<1Z>").1v(i).1r("12-2J").1f("1g",r+"//1Z.7v.68/ay/"+e(14).1f("1g").1E("7P/")[1].1E("?")[0]+"/"+f.o.8P)}e("<1n>").1v(i).1r("12-bv");e(14).26().1a({1d:e(14).1d(),1e:e(14).1e()}).2l(18(){f.g.2X=1c;6(f.g.3h){6(f.o.2C!=1h){f.g.3h=1h}f.g.2t=1c}19{f.g.2t=f.g.2v}6(f.o.2C!=1h){f.1x()}f.g.53=1c;r=e(14).17("29").11("3U").1i("7q")===-1?n:"";e(14).17("29").1f("1g",r+e(14).17("29").11("3U"));e(14).17(".12-6e").1M(f.g.v.d).3M(f.g.v.fo,18(){6(f.o.2C=="1W"&&f.g.2t==1c){16 e=2e(18(){f.22()},t.11("7f")-f.g.v.d);t.11("7b",e)}f.g.2X=1h;6(f.g.30==1c){f.3D(f.g.1L,18(){f.g.30=1h})}})});16 s="&";6(e(14).1f("1g").1i("?")==-1){s="?"}6(e(14).1f("1g").1i("3F=0")!=-1){e(14).11("3U",e(14).1f("1g").2k("3F=0","3F=1"))}19 6(e(14).1f("1g").1i("3F")==-1){e(14).11("3U",e(14).1f("1g")+s+"3F=1")}e(14).11("2T",e(14).1f("1d"));e(14).11("2U",e(14).1f("1e"));e(14).1f("1g","")}});e(u).17(\'29[1g*="61.5k"]\').1O(18(){e(14).26().1r("12-3P-5q");6(e(14).26(\'[1t*="12-l"]\')){16 t=e(14);16 r=n;16 i=e("<1n>").1r("12-6e").1v(e(14).26());e.aA(r+"//5k.68/b8/cm/3P/"+e(14).1f("1g").1E("3P/")[1].1E("?")[0]+".bJ?bw=?",18(n){6(f.o.41){e("<1Z>").1v(i).1r("12-2J").11("1g",n[0]["bM"])}19{e("<1Z>").1v(i).1r("12-2J").1f("1g",n[0]["bM"])}t.11("7f",1b(n[0]["2m"])*1P);e("<1n>").1v(i).1r("12-bv")});e(14).26().1a({1d:e(14).1d(),1e:e(14).1e()}).2l(18(){f.g.2X=1c;6(f.g.3h){6(f.o.2C!=1h){f.g.3h=1h}f.g.2t=1c}19{f.g.2t=f.g.2v}6(f.o.2C!=1h){f.1x()}f.g.53=1c;r=e(14).17("29").11("3U").1i("7q")===-1?n:"";e(14).17("29").1f("1g",r+e(14).17("29").11("3U"));e(14).17(".12-6e").1M(f.g.v.d).3M(f.g.v.fo,18(){6(f.o.2C=="1W"&&f.g.2t==1c){16 e=2e(18(){f.22()},t.11("7f")-f.g.v.d);t.11("7b",e)}f.g.2X=1h;6(f.g.30==1c){f.3D(f.g.1L,18(){f.g.30=1h})}})});16 s="&";6(e(14).1f("1g").1i("?")==-1){s="?"}6(e(14).1f("1g").1i("3F=0")!=-1){e(14).11("3U",e(14).1f("1g").2k("3F=0","3F=1"))}19 6(e(14).1f("1g").1i("3F")==-1){e(14).11("3U",e(14).1f("1g")+s+"3F=1")}e(14).11("2T",e(14).1f("1d"));e(14).11("2U",e(14).1f("1e"));e(14).1f("1g","")}});e(u).17("3P, 6Z").1O(18(){16 t=1Y e(14).1f("1d")==="4w"?e(14).1f("1d"):e(14).1d();16 n=1Y e(14).1f("1e")==="4w"?e(14).1f("1e"):e(14).1e();6(t.1i("%")===-1){t=1b(t)}6(n.1i("%")===-1){n=1b(n)}e(14).26().1r("12-3P-5q").1a({1d:t,1e:n}).11({2T:t,2U:n});e(14).5Q("1d").5Q("1e").1a({1d:"1J%",1e:"1J%"}).2l(18(){14.cv=0;14.cs();f.g.2X=1c;6(f.g.3h){6(f.o.2C!==1h){f.g.3h=1h}f.g.2t=1c}19{f.g.2t=f.g.2v}6(f.o.2C!==1h){f.1x()}f.g.53=1c;e(14).4r("cr",18(){6(f.o.2C==="1W"&&f.g.2t===1c){f.22()}});f.g.2X=1h;6(f.g.30===1c){f.3D(f.g.1L,18(){f.g.30=1h})}})});6(f.o.4A){f.o.32=f.o.32-1===0?f.g.2x:f.o.32-1}f.g.23=f.o.32;f.g.1L=e(u).17(".12-1p:eq("+(f.g.23-1)+")");e(u).17(".12-1p").cn(\'<1n 1t="12-28">\');6(f.o.b4){f.g.3z=e("<1n>").1r("12-co-62").1v(e(u).17(".12-28"))}6(f.o.aN&&!f.g.2n){f.g.3p=e("<1n>").1r("12-cp-62").1v(e(u).17(".12-28"));f.g.3p.3Q(e(\'<1n 1t="12-ct-1m"><1n 1t="12-ct-3y"><1n 1t="12-ct-bx"><1n 1t="12-ct-9c"><1n 1t="12-ct-1D"><1n 1t="12-ct-3y"><1n 1t="12-ct-bx"><1n 1t="12-ct-9c"><1n 1t="12-ct-dx">\'))}f.g.3w=e("<1n>").1a({bK:-1,1K:"1Q"}).1r("12-ac-2p").1v(e(u));e("<1n>").1r("12-ac-dg").1v(f.g.3w);6(e(u).1a("3r")=="df"){e(u).1a("3r","bm")}6(f.o.6z){e(u).17(".12-28").1a({d0:"64("+f.o.6z+")"})}19{e(u).17(".12-28").1a({c1:f.o.8g})}6(f.o.8g=="8o"&&f.o.6z==1h){e(u).17(".12-28").1a({3e:"1Q 8o !c0"})}e(u).17(".12-1p 1Z").1O(18(){e(14).5Q("1d").5Q("1e");6(f.o.44===1c&&f.o.41===1c){6(1Y e(14).11("1g")!=="4w"){e(14).11("1g",e(14).1f("1g"));16 t=f.o.3v+"../1a/bV.bT";e(14).1f("1g",t)}}19{6(1Y e(14).11("1g")==="4w"){e(14).1f("1g",e(14).11("1g"));e(14).5Q("11-1g")}}});e(u).17(".12-1p").4r("c2",18(t){f.g.99=t.7J-e(14).26().5e().1m;f.g.9z=t.9t-e(14).26().5e().1q});e(u).17(".12-1p").4r("bC",18(t){16 n=e(14).26().5e().1m+f.g.99;16 r=e(14).26().5e().1q+f.g.9z;16 i=t.7J-n;16 s=t.9t-r;e(14).17("> *:2H(.12-bg)").1O(18(){6(1Y e(14).11("4Y")!=="3E"&&1b(e(14).11("4Y"))!==0){e(14).1a({3l:-i/1J*1b(e(14).11("4Y")),3I:-s/1J*1b(e(14).11("4Y"))})}})});e(u).17(".12-1p").4r("bR",18(){e(14).17("> *:2H(.12-bg)").1O(18(){6(1Y e(14).11("4Y")!=="3E"&&1b(e(14).11("4Y"))!==0){36.2f(14,.4,{1a:{3l:0,3I:0}})}})});6(f.o.8k){e(\'\').2l(18(t){t.3A();e(u).2R("1S")}).1v(e(u));e(\'\').2l(18(t){t.3A();e(u).2R("1V")}).1v(e(u));6(f.o.b0){e(u).17(".12-1s-1S, .12-1s-1V").1a({1K:"1Q"});e(u).1R(18(){6(!f.g.84){6(f.g.2n){e(u).17(".12-1s-1S, .12-1s-1V").1a("1K","2j")}19{e(u).17(".12-1s-1S, .12-1s-1V").1x(1c,1c).2G(2E)}}},18(){6(f.g.2n){e(u).17(".12-1s-1S, .12-1s-1V").1a("1K","1Q")}19{e(u).17(".12-1s-1S, .12-1s-1V").1x(1c,1c).3M(2E)}})}}6(f.o.6s||f.o.6y){16 r=e(\'<1n 1t="12-1o-1s-2F" />\').1v(e(u));f.g.3n=r;6(f.o.3o=="4v"){r.1r("12-aq-5i")}6(f.o.6y&&f.o.3o!="4v"){e(\'<5C 1t="12-1o-4u" />\').1v(e(u).17(".12-1o-1s-2F"));6(f.o.3o=="1R"){16 i=e(\'<1n 1t="12-1H-1R"><1n 1t="12-1H-1R-28"><1n 1t="12-1H-1R-bg"><1n 1t="12-1H-1R-1Z"><1Z><5C>\').1v(e(u).17(".12-1o-4u"))}24(x=1;x\').1v(e(u).17(".12-1o-4u")).2l(18(t){t.3A();e(u).2R(e(14).5D()+1)});6(f.o.3o=="1R"){e(u).17(".12-1H-1R, .12-1H-1R-1Z").1a({1d:f.o.8T,1e:f.o.5s});16 o=e(u).17(".12-1H-1R");16 a=o.17("1Z").1a({1e:f.o.5s});16 l=e(u).17(".12-1H-1R-28").1a({2b:"2K",1K:"2j"});s.1R(18(){16 t=e(u).17(".12-1p").eq(e(14).5D());16 n;6(f.o.44===1c&&f.o.41===1c){6(t.17(".12-4l").1k){n=t.17(".12-4l").11("1g")}19 6(t.17(".12-2J").1k){n=t.17(".12-2J").11("1g")}19 6(t.17(".12-bg").1k){n=t.17(".12-bg").11("1g")}19{n=f.o.3v+f.o.2r+"/6j.4G"}}19{6(t.17(".12-4l").1k){n=t.17(".12-4l").1f("1g")}19 6(t.17(".12-2J").1k){n=t.17(".12-2J").1f("1g")}19 6(t.17(".12-bg").1k){n=t.17(".12-bg").1f("1g")}19{n=f.o.3v+f.o.2r+"/6j.4G"}}e(u).17(".12-1H-1R-1Z").1a({1m:1b(o.1a("2a-1m")),1q:1b(o.1a("2a-1q"))});a.2Z(18(){6(e(14).1d()==0){a.1a({3r:"bm",3i:"0 1W",1m:"1W"})}19{a.1a({3r:"c9",3l:-e(14).1d()/2,1m:"50%"})}}).1f("1g",n);o.1a({1K:"2j"}).1x().4g({1m:e(14).3r().1m+(e(14).1d()-o.3t())/2},7M);l.1a({1K:"1Q",2b:"2V"}).1x().2G(7M)},18(){l.1x().3M(7M,18(){o.1a({2b:"2K",1K:"2j"})})})}}6(f.o.3o=="1R"){i.1v(e(u).17(".12-1o-4u"))}e(u).17(".12-1o-4u a:eq("+(f.o.32-1)+")").1r("12-1s-1T")}6(f.o.6s){16 c=e(\'\').2l(18(t){t.3A();e(u).2R("22")}).7e(e(u).17(".12-1o-1s-2F"));16 h=e(\'\').2l(18(t){t.3A();e(u).2R("1x")}).1v(e(u).17(".12-1o-1s-2F"))}19 6(f.o.3o!="4v"){e(\'<5C 1t="12-1s-bb 12-1s-c3" />\').7e(e(u).17(".12-1o-1s-2F"));e(\'<5C 1t="12-1s-bb 12-1s-c7" />\').1v(e(u).17(".12-1o-1s-2F"))}6(f.o.6U&&f.o.3o!="4v"){r.1a({1K:"1Q"});e(u).1R(18(){6(!f.g.84){6(f.g.2n){r.1a("1K","2j")}19{r.1x(1c,1c).2G(2E)}}},18(){6(f.g.2n){r.1a("1K","1Q")}19{r.1x(1c,1c).3M(2E)}})}}6(f.o.3o=="4v"){f.g.43=e(\'<1n 1t="12-1H-2F">\').1v(e(u));16 i=e(\'<1n 1t="12-1H"><1n 1t="12-1H-28"><1n 1t="12-1H-1p-2p"><1n 1t="12-1H-1p">\').1v(f.g.43);f.g.5i=e(u).17(".12-1H-1p-2p");6(!("6L"3H 2o)){f.g.5i.1R(18(){e(14).1r("12-1H-1p-1R")},18(){e(14).31("12-1H-1p-1R");f.7Y()}).bC(18(t){16 n=1b(t.7J-e(14).5e().1m)/e(14).1d()*(e(14).1d()-e(14).17(".12-1H-1p").1d());e(14).17(".12-1H-1p").1x().1a({3l:n})})}19{f.g.5i.1r("12-bY")}e(u).17(".12-1p").1O(18(){16 t=e(14).5D()+1;16 n;6(f.o.44===1c&&f.o.41===1c){6(e(14).17(".12-4l").1k){n=e(14).17(".12-4l").11("1g")}19 6(e(14).17(".12-2J").1k){n=e(14).17(".12-2J").11("1g")}19 6(e(14).17(".12-bg").1k){n=e(14).17(".12-bg").11("1g")}19{n=f.o.3v+f.o.2r+"/6j.4G"}}19{6(e(14).17(".12-4l").1k){n=e(14).17(".12-4l").1f("1g")}19 6(e(14).17(".12-2J").1k){n=e(14).17(".12-2J").1f("1g")}19 6(e(14).17(".12-bg").1k){n=e(14).17(".12-bg").1f("1g")}19{n=f.o.3v+f.o.2r+"/6j.4G"}}16 r=e(\'<1Z 1g="\'+n+\'">\');r.1v(e(u).17(".12-1H-1p"));6(!("6L"3H 2o)){r.1R(18(){e(14).38().1x().6D(2E,f.o.8X/1J)},18(){6(!e(14).38().3k("12-4k-1T")){e(14).38().1x().6D(2E,f.o.8V/1J)}})}r.2l(18(n){n.3A();e(u).2R(t)})});6(c&&h){16 p=f.g.3n=e(\'<1n 1t="12-1o-1s-2F 12-bW-5i">\').1v(e(u));c.7y().2l(18(t){t.3A();e(u).2R("22")}).1v(p);h.7y().2l(18(t){t.3A();e(u).2R("1x")}).1v(p)}6(f.o.6U){f.g.43.1a("1K","1Q");6(p){f.g.3n=p.1a("1K")=="2j"?p:e(u).17(".12-aq-5i");f.g.3n.1a("1K","1Q")}e(u).1R(18(){e(u).1r("12-1R");6(!f.g.84){6(f.g.2n){f.g.43.1a("1K","2j");6(f.g.3n){f.g.3n.1a("1K","2j")}}19{f.g.43.1x(1c,1c).2G(2E);6(f.g.3n){f.g.3n.1x(1c,1c).2G(2E)}}}},18(){e(u).31("12-1R");6(f.g.2n){f.g.43.1a("1K","1Q");6(f.g.3n){f.g.3n.1a("1K","1Q")}}19{f.g.43.1x(1c,1c).3M(2E);6(f.g.3n){f.g.3n.1x(1c,1c).3M(2E)}}})}}f.g.47=e(\'<1n 1t="12-47">\').1v(e(u));6(f.g.47.1a("1K")=="2j"&&!f.g.47.17("1Z").1k){f.g.7r=18(){f.g.47.1a({1K:"1Q",2b:"2V"}).2G(46,18(){f.g.7r=1h})};f.g.5g=e("<1Z>").1f("1g",f.o.3v+f.o.2r+"/47.4G").1v(f.g.47);f.g.9r=1Y 1b(e(u).1a("2a-1o"))=="3S"?1b(e(u).1a("2a-1o")):0}f.7z();6(f.o.ar&&e(u).17(".12-1p").1k>1){e("3T").6H("c4",18(e){6(!f.g.2X&&!f.g.4a){6(e.aX==37){f.o.79(f.g);f.1S("6F")}19 6(e.aX==39){f.o.7s(f.g);f.1V("6F")}}})}6("6L"3H 2o&&e(u).17(".12-1p").1k>1&&f.o.b2){e(u).17(".12-28").6H("bQ",18(e){16 t=e.56?e.56:e.aP.56;6(t.1k==1){f.g.6I=f.g.5v=t[0].aR}});e(u).17(".12-28").6H("bN",18(e){16 t=e.56?e.56:e.aP.56;6(t.1k==1){f.g.5v=t[0].aR}6(1C.4m(f.g.6I-f.g.5v)>45){e.3A()}});e(u).17(".12-28").6H("e8",18(t){6(1C.4m(f.g.6I-f.g.5v)>45){6(f.g.6I-f.g.5v>0){f.o.7s(f.g);e(u).2R("1V")}19{f.o.79(f.g);e(u).2R("1S")}}})}6(f.o.bl==1c&&e(u).17(".12-1p").1k>1){e(u).17(".12-28").1R(18(){f.o.bp(f.g);6(f.g.2v){f.g.3h=1c;f.1x();6(f.g.3z){f.g.3z.1x()}6(f.g.3p){6(f.g.2L){f.g.2L.6c()}}f.g.48=(1G 57).5a()}},18(){6(f.g.3h==1c){f.22();f.g.3h=1h}})}f.7D();6(f.o.1w){f.g.1w=e("<1Z>").1r("12-eQ").1v(e(u)).1f("1N",f.o.9P).1a({2b:"2K",1K:"eP"}).2Z(18(){16 t=0;6(!f.g.1w){t=1P}2e(18(){f.g.1w.11("2T",f.g.1w.1d());f.g.1w.11("2U",f.g.1w.1e());6(f.g.1w.1a("1m")!="1W"){f.g.1w.11("49",f.g.1w[0].1N.1m)}6(f.g.1w.1a("1D")!="1W"){f.g.1w.11("5X",f.g.1w[0].1N.1D)}6(f.g.1w.1a("1q")!="1W"){f.g.1w.11("4n",f.g.1w[0].1N.1q)}6(f.g.1w.1a("1o")!="1W"){f.g.1w.11("5W",f.g.1w[0].1N.1o)}6(f.o.8n!=1h){e("").1v(e(u)).1f("2h",f.o.8n).1f("eO",f.o.a9).1a({eN:"1Q",eS:"1Q"}).3Q(f.g.1w)}f.g.1w.1a({1K:"1Q",2b:"2V"});f.7B()},t)}).1f("1g",f.o.1w)}e(2o).30(18(){f.g.30=1c;6(!f.g.2X){f.3D(f.g.1L,18(){6(f.g.2s){f.g.2s.5t()}f.g.30=1h});6(f.g.1w){f.7B()}}});f.g.9H=1c;6(f.o.4A==1c){6(f.o.78){f.g.2v=1c;e(u).17(".12-1s-22").1r("12-1s-22-1T")}19{e(u).17(".12-1s-1x").1r("12-1s-1x-1T")}f.1V()}19{f.44(f.g.1L,18(){f.g.1L.2G(1P,18(){f.g.4a=1h;e(14).1r("12-1T");6(f.o.8W){e(14).1M(e(14).11("5c")+25).eV(18(){e(14).17(".12-2J, 3P, 6Z").2l();e(14).7C()})}f.g.1L.17(\' > *[1t*="12-l"]\').1O(18(){6(e(14).11("5E")>0){16 t=e(14);t.11("7d",2e(18(){f.8Y(t)},t.11("5E")))}})});f.86(f.g.23);6(f.o.78){f.g.4a=1h;f.22()}19{e(u).17(".12-1s-1x").1r("12-1s-1x-1T")}})}f.o.9b(e(u))};f.22=18(){6(f.g.2v){6(f.g.2i=="1S"&&f.o.8b){f.1S()}19{f.1V()}}19{f.g.2v=1c;6(!f.g.2X&&!f.g.4a){f.62()}}e(u).17(".12-1s-22").1r("12-1s-22-1T");e(u).17(".12-1s-1x").31("12-1s-1x-1T")};f.62=18(){6(e(u).17(".12-1T").11("12")){16 t=f.58.7i}19{16 t=f.o.7i}16 n=e(u).17(".12-1T").11("5w")?1b(e(u).17(".12-1T").11("5w")):t;6(!f.o.4A&&!e(u).17(".12-1T").11("5w")){16 r=e(u).17(".12-1p:eq("+(f.o.32-1)+")").11("5w");n=r?r:t}2w(f.g.4e);6(f.g.48){6(!f.g.4b){f.g.4b=(1G 57).5a()}6(f.g.4b>f.g.48){f.g.48=(1G 57).5a()}6(!f.g.3K){f.g.3K=n}f.g.3K-=f.g.48-f.g.4b;f.g.48=1h;f.g.4b=(1G 57).5a()}19{f.g.3K=n;f.g.4b=(1G 57).5a()}f.g.3K=1b(f.g.3K);f.g.4e=2e(18(){f.g.4b=f.g.48=f.g.3K=1h;f.22()},f.g.3K);6(f.g.3z){f.g.3z.4g({1d:f.g.1z()},f.g.3K,"8z",18(){e(14).1a({1d:0})})}6(f.g.3p){16 i=f.g.3p.17(".12-ct-1D .12-ct-3y");16 s=f.g.3p.17(".12-ct-1m .12-ct-3y");6(f.g.3p.1a("1K")=="1Q"){i.1a({3y:0});s.1a({3y:0});f.g.3p.2G(aQ)}6(!f.g.2L){f.g.2L=1G aD;f.g.2L.aJ(36.77(i[0],n/aI,{3f:0},{3R:8y.8t,3f:7l,eU:18(){f.g.2L=1h}}));f.g.2L.aJ(36.77(s[0],n/aI,{3f:0},{3R:8y.8t,3f:7l}))}19{f.g.2L.eT()}}};f.1x=18(){f.g.48=(1G 57).5a();6(f.g.3z){f.g.3z.1x()}6(f.g.3p){6(f.g.2L){f.g.2L.6c()}}6(!f.g.3h&&!f.g.2t){e(u).17(".12-1s-1x").1r("12-1s-1x-1T");e(u).17(".12-1s-22").31("12-1s-22-1T")}2w(f.g.4e);f.g.2v=1h};f.au=18(){2w(f.g.4e);f.g.2v=1h;2w(f.g.ap);2w(f.g.ao);2w(f.g.aj);2w(f.g.am);2w(f.g.96);6(f.g.3z){f.g.3z.1x()}6(f.g.3p){6(f.g.2L){f.g.2L.6c()}}e(u).17("*").1x(1c,1h).7C();e(u).17(".12-1p >").1O(18(){6(e(14).11("3L")){e(14).11("3L").6c()}});6(!f.g.3h&&!f.g.2t){e(u).17(".12-1s-1x").1r("12-1s-1x-1T");e(u).17(".12-1s-22").31("12-1s-22-1T")}};f.eL=18(){e(u).17("*").1x();2w(f.g.4e);f.4C(f.g.23,f.g.2i)};f.aE=18(t){6(e.5J(t.21())=="ai"||e.5J(t.21())=="8z"){1U t.21()}19{1U t.2k("8s","bF").2k("8u","9x").2k("8r","bB").2k("eK","eC").2k("eB","eA").2k("ey","ez").2k("eD","eE").2k("eJ","eI").2k("eH","eF").2k("eG","eY").2k("fh","fg").2k("5B","ff").2k("fe","fj")}};f.1S=18(e){6(f.g.23<2){f.g.4c+=1}6(f.g.4c>f.o.4f&&f.o.4f>0&&!e){f.g.4c=0;f.1x();6(f.o.7u==1h){f.o.4f=0}}19{16 t=f.g.23<2?f.g.2x:f.g.23-1;f.g.2i="1S";f.4C(t,f.g.2i)}};f.1V=18(e){6(!f.o.7p){6(!(f.g.23f.o.4f&&f.o.4f>0&&!e){f.g.4c=0;f.1x();6(f.o.7u==1h){f.o.4f=0}}19{16 t=f.g.230){r=f.g.v.fi}f.44(f.g.1u,18(){f.4g()})};f.44=18(t,n){f.g.4a=1c;6(f.g.9H){e(u).1a({2b:"2V"})}6(f.o.44){16 r=[];16 i=0;6(t.1a("3e-2I")!="1Q"&&t.1a("3e-2I").1i("64")!=-1&&!t.3k("12-3q")&&!t.3k("12-2H-3q")){16 s=t.1a("3e-2I");s=s.3N(/64\\((.*)\\)/)[1].2k(/"/9G,"");r[r.1k]=[s,t]}t.17("1Z:2H(.12-3q, .12-2H-3q)").1O(18(){6(f.o.41===1c){e(14).1f("1g",e(14).11("1g"))}r[r.1k]=[e(14).1f("1g"),e(14)]});t.17("*").1O(18(){6(e(14).1a("3e-2I")!="1Q"&&e(14).1a("3e-2I").1i("64")!=-1&&!e(14).3k("12-3q")&&!e(14).3k("12-2H-3q")){16 t=e(14).1a("3e-2I");t=t.3N(/64\\((.*)\\)/)[1].2k(/"/9G,"");r[r.1k]=[t,e(14)]}});6(r.1k==0){e(".12-1H-2F, .12-1s-1V, .12-1s-1S, .12-1o-1s-2F").1a({2b:"2V"});f.3D(t,n)}19{6(f.g.2n){f.g.3w.1a("1K","2j")}19{f.g.3w.1M(ad).2G(2E)}24(x=0;x").11("el",r[x]).2Z(18(){e(14).11("el")[1].1r("12-3q");6(++i==r.1k){f.g.3w.1x(1c,1c).1a({1K:"1Q"});e(".12-1H-2F, .12-1s-1V, .12-1s-1S, .12-1o-1s-2F").1a({2b:"2V"});6(42.40.1i("fq/7")!==-1||f.g.2n){2e(18(){f.3D(t,n)},50)}19{f.3D(t,n)}}}).3Y(18(){16 t=e(14).11("el")[0].9A(e(14).11("el")[0].a5("/")+1,e(14).11("el")[0].1k);6(2o.4L){4L.fl(\'2A 3Y:\\r\\n\\r\\6l 6k 4N 20 6i 2Q 20 2I 3W 3e 2I "\'+t+\'" 3g 6r 2f a 6t 4H 4I 4h 6v be 2W. 4S 6Y 20 6o 2Q 4P 4T 6W 7c 3H 20 7n.\')}19{a4(\'2A 3Y:\\r\\n\\r\\6l 6k 4N 20 6i 2Q 20 2I 3W 3e 2I "\'+t+\'" 3g 6r 2f a 6t 4H 4I 4h 6v be 2W. 4S 6Y 20 6o 2Q 4P 4T 6W 7c 3H 20 7n.\')}e(14).1r("12-2H-3q");i++}).1f("1g",r[x][0])}}}19{e(".12-1H-2F, .12-1s-1V, .12-1s-1S, .12-1o-1s-2F").1a({2b:"2V"});f.3D(t,n)}};f.3D=18(t,n){t.1a({2b:"2K",1K:"2j"});6(f.g.7r){f.g.7r()}f.7D();6(f.o.3o=="4v"){f.9E()}t.38().1O(18(){16 t=e(14);16 n=t.11("49")?t.11("49"):"0";16 r=t.11("4n")?t.11("4n"):"0";6(t.3g("a")&&t.38().1k>0){t.1a({1K:"2j"});t=t.38()}16 i="1W";16 s="1W";6(t.11("2T")){6(1Y t.11("2T")=="3S"){i=1b(t.11("2T"))*f.g.1A}19 6(t.11("2T").1i("%")!=-1){i=t.11("2T")}}6(t.11("2U")){6(1Y t.11("2U")=="3S"){s=1b(t.11("2U"))*f.g.1A}19 6(t.11("2U").1i("%")!=-1){s=t.11("2U")}}16 o=t.11("7N")?1b(t.11("7N"))*f.g.1A:0;16 a=t.11("7O")?1b(t.11("7O"))*f.g.1A:0;16 l=t.11("7R")?1b(t.11("7R"))*f.g.1A:0;16 c=t.11("7Q")?1b(t.11("7Q"))*f.g.1A:0;16 h=t.11("7k")?1b(t.11("7k"))*f.g.1A:0;16 p=t.11("6h")?1b(t.11("6h"))*f.g.1A:0;16 d=t.11("6w")?1b(t.11("6w"))*f.g.1A:0;16 v=t.11("6x")?1b(t.11("6x"))*f.g.1A:0;16 m=t.11("9Z");16 g=t.11("9X");6(f.g.4d||f.o.4K>0){6(t.3g("1Z")&&!t.3k("12-bg")&&t.1f("1g")){t.1a({1d:"1W",1e:"1W"});6((i==0||i=="1W")&&1Y s=="3S"&&s!=0){i=s/t.1e()*t.1d()}6((s==0||s=="1W")&&1Y i=="3S"&&i!=0){s=i/t.1d()*t.1e()}6(i=="1W"){i=t.1d()*f.g.1A}6(s=="1W"){s=t.1e()*f.g.1A}t.1a({1d:i,1e:s})}6(!t.3g("1Z")){t.1a({1d:i,1e:s,"a1-a3":1b(m)*f.g.1A+"1I","98-1e":1b(g)*f.g.1A+"1I"})}6(t.3g("1n")&&t.17("29").11("3U")){16 y=t.17("29");y.1f("1d",1b(y.11("2T"))*f.g.1A).1f("1e",1b(y.11("2U"))*f.g.1A);t.1a({1d:1b(y.11("2T"))*f.g.1A,1e:1b(y.11("2U"))*f.g.1A})}t.1a({2a:l+"1I "+a+"1I "+c+"1I "+o+"1I ",9m:h+"1I",9i:p+"1I",9f:d+"1I",9g:v+"1I"})}6(!t.3k("12-bg")){16 b=t;6(t.26().3g("a")){t=t.26()}16 w=0;6(f.o.7a){w=f.o.7a>0?(f.g.1z()-f.o.7a)/2:0}19 6(f.o.7K){w=f.o.7K>0?(f.g.1z()-f.o.7K)/2:0}w=w<0?0:w;6(n.1i("%")!=-1){t.1a({1m:f.g.1z()/1J*1b(n)-b.1d()/2-o-h})}19 6(w>0||f.g.4d||f.o.4K>0){t.1a({1m:w+1b(n)*f.g.1A})}6(r.1i("%")!=-1){t.1a({1q:f.g.1F()/1J*1b(r)-b.1e()/2-l-d})}19 6(f.g.4d||f.o.4K>0){t.1a({1q:1b(r)*f.g.1A})}}19{16 E=e(u).17(".12-28");t.1a({1d:"1W",1e:"1W"});i=t.1d();s=t.1e();16 S=f.g.1A;6(f.g.2y.1i("%")!=-1){6(f.g.1z()>i){S=f.g.1z()/i;6(f.g.1F()>s*S){S=f.g.1F()/s}}19 6(f.g.1F()>s){S=f.g.1F()/s;6(f.g.1z()>i*S){S=f.g.1z()/i}}}t.1a({1d:i*S,1e:s*S,3l:E.1d()/2-i*S/2,3I:E.1e()/2-s*S/2})}});t.1a({1K:"1Q",2b:"2V"});f.7z();n();e(14).7C()};f.7z=18(){6(f.g.5g){16 e=18(){6(f.g.5g.1e()>0){6(f.g.9r>0){f.g.47.1a({1e:f.g.5g.1e()/2})}19{f.g.47.1a({1e:f.g.5g.1e(),3I:-f.g.5g.1e()/2})}}19{2e(18(){e()},50)}};e()}};f.7D=18(){6(f.o.4K>0){6(e(2o).1d()e(u).17(".12-1H-1p").1d()){n.1a({1d:e(u).17(".12-1H-1p").1d()})}f.7x("9I")};f.86=18(t){16 n=t?t:f.g.65;e(u).17(".12-1H-1p a:2H(.12-4k-"+n+")").38().1O(18(){e(14).31("12-4k-1T").1x().6D(8U,f.o.8V/1J)});e(u).17(".12-1H-1p a.12-4k-"+n).38().1r("12-4k-1T").1x().6D(8U,f.o.8X/1J)};f.7Y=18(){6(!e(u).17(".12-1H-1p-2p").3k("12-1H-1p-1R")){16 t=e(u).17(".12-4k-1T").1k?e(u).17(".12-4k-1T").26():1h;6(t){16 n=t.3r().1m+t.1d()/2;16 r=e(u).17(".12-1H-1p-2p").1d()/2-n;r=r0?0:r;e(u).17(".12-1H-1p").4g({3l:r},fm)}}};f.7x=18(t){6(f.o.6U&&!e(u).3k("12-1R")){2q(t){1l"4r":f.g.43.1a({2b:"2K",1K:"2j"});1j;1l"9I":f.g.43.1a({2b:"2V",1K:"1Q"});1j}}};f.4g=18(){6(e(u).17(".12-1p").1k>1){f.g.2X=1c}f.g.4a=1h;2w(f.g.4e);2w(f.g.fd);f.g.9Y=f.g.1L;f.o.bk(f.g);6(f.o.3o=="4v"){f.86();6(!("6L"3H 2o)){f.7Y()}}f.g.1u.1r("12-9d");16 t=7V=6V=85=6S=7U=6R=7T=6M=fc=6T=f3="1W";16 a=7I=f.g.1z();16 l=83=f.g.1F();16 c=f.g.2i=="1S"?f.g.1L:f.g.1u;16 h=c.11("3C")?c.11("3C"):f.o.8H;16 p=f.g.8J[f.g.2i][h];6(p=="1m"||p=="1D"){a=6V=7I=6R=0;6T=0}6(p=="1q"||p=="1o"){l=t=83=6S=0;6M=0}2q(p){1l"1m":7V=6S=0;6M=-f.g.1z();1j;1l"1D":t=7U=0;6M=f.g.1z();1j;1l"1q":85=6R=0;6T=-f.g.1F();1j;1l"1o":6V=7T=0;6T=f.g.1F();1j}f.g.1L.1a({1m:t,1D:7V,1q:6V,1o:85});f.g.1u.1a({1d:7I,1e:83,1m:6S,1D:7U,1q:6R,1o:7T});16 d=f.g.1L.11("5O")?1b(f.g.1L.11("5O")):f.o.7j;16 v=f.g.1L.11("4O")?1b(f.g.1L.11("4O")):f.o.4F;16 m=f.g.1L.11("4Q")?f.g.1L.11("4Q"):f.o.4z;16 g=f.g.1u.11("5c")?1b(f.g.1u.11("5c")):f.o.5Y;16 y=f.g.1u.11("5N")?1b(f.g.1u.11("5N")):f.o.5F;16 b=f.g.1u.11("5R")?f.g.1u.11("5R"):f.o.5x;16 w=18(){f.g.1L.1M(d+v/15).4g({1d:a,1e:l},v,m,18(){E()})};16 E=18(){f.g.9Y.17(\' > *[1t*="12-l"]\').1O(18(){6(e(14).11("3L")){e(14).11("3L").7X()}e(14).1a({f4:"1Q"})});f.o.8F(f.g);f.g.1L=f.g.1u;f.g.23=f.g.65;6(f.o.44&&f.o.41){16 t=f.g.23==f.g.2x?1:f.g.23+1;e(u).17(".12-1p").eq(t-1).17("1Z:2H(.12-3q)").1O(18(){e(14).2Z(18(){e(14).1r("12-3q")}).3Y(18(){16 t=e(14).11("1g").9A(e(14).11("1g").a5("/")+1,e(14).11("1g").1k);6(2o.4L){4L(\'2A 3Y:\\r\\n\\r\\6l 6k 4N 20 6i 2Q 20 2I 3W 3e 2I "\'+t+\'" 3g 6r 2f a 6t 4H 4I 4h 6v be 2W. 4S 6Y 20 6o 2Q 4P 4T 6W 7c 3H 20 7n.\')}19{a4(\'2A 3Y:\\r\\n\\r\\6l 6k 4N 20 6i 2Q 20 2I 3W 3e 2I "\'+t+\'" 3g 6r 2f a 6t 4H 4I 4h 6v be 2W. 4S 6Y 20 6o 2Q 4P 4T 6W 7c 3H 20 7n.\')}e(14).1r("12-2H-3q")}).1f("1g",e(14).11("1g"))})}e(u).17(".12-1p").31("12-1T");e(u).17(".12-1p:eq("+(f.g.23-1)+")").1r("12-1T").31("12-9d");e(u).17(".12-1o-4u a").31("12-1s-1T");e(u).17(".12-1o-4u a:eq("+(f.g.23-1)+")").1r("12-1s-1T");6(f.g.2v){f.62()}f.g.2X=1h;6(f.g.30==1c){f.3D(f.g.1L,18(){f.g.30=1h})}};16 S=18(t){f.g.1L.17(\' > *[1t*="12-l"]\').1O(18(){6(!e(14).11("2z")){f.5L(e(14))}16 r=e(14).11("3C")?e(14).11("3C"):p;16 i,s;2q(r){1l"1m":i=-f.g.1z();s=0;1j;1l"1D":i=f.g.1z();s=0;1j;1l"1q":s=-f.g.1F();i=0;1j;1l"1o":s=f.g.1F();i=0;1j;1l"3B":s=0;i=0;1j}6(e(14).11("2z")==="1G"){16 o="1G"}19{16 o=e(14).11("5G")?e(14).11("5G"):1h}2q(o){1l"1m":i=f.g.1z();s=0;1j;1l"1D":i=-f.g.1z();s=0;1j;1l"1q":s=f.g.1F();i=0;1j;1l"1o":s=-f.g.1F();i=0;1j;1l"3B":s=0;i=0;1j;1l"1G":6(e(14).11("3c")){6(e(14).11("3c")==="1m"){i=f.g.1z()}19 6(e(14).11("3c")==="1D"){i=-f.g.1z()}19{i=-1b(e(14).11("3c"))}}19{i=-f.1y.8m}6(e(14).11("34")){6(e(14).11("34")==="1q"){s=f.g.1F()}19 6(e(14).11("34")==="1o"){s=-f.g.1F()}19{s=-1b(e(14).11("34"))}}19{s=-f.1y.8I}1j}16 u=5r=5p=4s=5n=5j=3a=33="1Q";u=e(14).11("5H")?e(14).11("5H"):f.1y.89;5r=e(14).11("6N")?e(14).11("6N"):f.1y.88;5p=e(14).11("6O")?e(14).11("6O"):f.1y.8c;4s=e(14).11("5I")?e(14).11("5I"):f.1y.8f;5n=e(14).11("6A")?e(14).11("6A"):f.1y.8C;5j=e(14).11("6P")?e(14).11("6P"):f.1y.8D;6(4s===1){3a=e(14).11("6Q")?e(14).11("6Q"):f.1y.8p;33=e(14).11("6X")?e(14).11("6X"):f.1y.8q}19{3a=33=4s}16 a=e(14).11("6n")?e(14).11("6n").1E(" "):f.1y.8E;24(16 l=0;le(14).3u()?e(14).3t():e(14).3u();16 y=1b(u)===0?e(14).3t():g;16 b=1b(u)===0?e(14).3u():g;6(m===-1&&o!=="1G"||e(14).11("3c")==="1m"||e(14).11("3c")==="1D"){6(i<0){i=-(f.g.1z()-d+(3a/2-.5)*y+1J)}19 6(i>0){i=d+(3a/2+.5)*y+1J}}19{i=i*f.g.1A}6(m===-1&&o!=="1G"||e(14).11("34")==="1q"||e(14).11("34")==="1o"){6(s<0){s=-(f.g.1F()-v+(33/2-.5)*b+1J)}19 6(s>0){s=v+(33/2+.5)*b+1J}}19{s=s*f.g.1A}6(m===-1||o==="1G"){16 w=1}19{16 E=f.g.1L.11("6u")?1b(f.g.1L.11("6u")):f.o.8Z;16 w=m*E}6(e(14).11("2z")==="1G"){16 S=f.1y.7j;16 x=f.1y.4F;16 T=f.1y.4z}19{16 S=f.o.7j;16 x=f.o.4F;16 T=f.o.4z}16 N=e(14).11("5O")?1b(e(14).11("5O")):S;16 C=e(14).11("4O")?1b(e(14).11("4O")):x;16 k=e(14).11("4Q")?e(14).11("4Q"):T;6(t){N=0;C=t}6(e(14).11("7d")){2w(e(14).11("7d"))}16 L={2b:"2K"};16 A=e(14);16 O={3f:u,4E:5r,4B:5p,7m:5n,7h:5j,5o:3a,5m:33,x:-i*w,y:-s*w,1M:N/1P,3R:n(k),8L:18(){A.1a(L)}};6(o=="3B"||!o&&r==="3B"||e(14).11("aY")!=="1h"&&e(14).11("2z")==="1G"){O["2N"]=0;L["2N"]=e(14).11("75")}6(e(14).11("3L")){e(14).11("3L").7X()}36.8Q(e(14)[0],{8K:c,8O:h});e(14).11("3L",36.2f(e(14)[0],C/1P,O))})};16 x=18(){f.g.1u.1M(d+g).4g({1d:f.g.1z(),1e:f.g.1F()},y,b)};16 T=18(){6(f.g.3b){d=0}6(1Y f.o.9w==="18"){f.o.9w(f.g,d+g)}f.g.1u.17(\' > *[1t*="12-l"]\').1O(18(){6(!e(14).11("2z")){f.5L(e(14))}6(e(14).11("2z")==="1G"){16 t="1G"}19{16 t=e(14).11("3C")?e(14).11("3C"):p}16 r,i;2q(t){1l"1m":r=-f.g.1z();i=0;1j;1l"1D":r=f.g.1z();i=0;1j;1l"1q":i=-f.g.1F();r=0;1j;1l"1o":i=f.g.1F();r=0;1j;1l"3B":i=0;r=0;1j;1l"1G":6(e(14).11("5b")){6(e(14).11("5b")==="1m"){r=-f.g.1z()}19 6(e(14).11("5b")==="1D"){r=f.g.1z()}19{r=1b(e(14).11("5b"))}}19{r=f.1y.9k}6(e(14).11("54")){6(e(14).11("54")==="1q"){i=-f.g.1F()}19 6(e(14).11("54")==="1o"){i=f.g.1F()}19{i=1b(e(14).11("54"))}}19{i=f.1y.bH}1j}16 s=7Z=7W=73=82=81=51=52="1Q";s=e(14).11("8S")?e(14).11("8S"):f.1y.ab;7Z=e(14).11("9p")?e(14).11("9p"):f.1y.9J;7W=e(14).11("9o")?e(14).11("9o"):f.1y.9B;73=e(14).11("87")?e(14).11("87"):f.1y.9O;82=e(14).11("9e")?e(14).11("9e"):f.1y.9S;81=e(14).11("9j")?e(14).11("9j"):f.1y.9L;6(73===1){51=e(14).11("9n")?e(14).11("9n"):f.1y.9N;52=e(14).11("9l")?e(14).11("9l"):f.1y.9U}19{51=52=73}16 o=e(14).11("a8")?e(14).11("a8").1E(" "):f.1y.9D;24(16 u=0;ue(14).3u()?e(14).3t():e(14).3u();16 m=1b(s)===0?e(14).3t():v;16 g=1b(s)===0?e(14).3u():v;6(d===-1&&t!=="1G"||e(14).11("5b")==="1m"||e(14).11("5b")==="1D"){6(r<0){r=-(c+(51/2+.5)*m+1J)}19 6(r>0){r=f.g.1z()-c+(51/2-.5)*m+1J}}19{r=r*f.g.1A}6(d===-1&&t!=="1G"||e(14).11("54")==="1q"||e(14).11("54")==="1o"){6(i<0){i=-(h+(52/2+.5)*g+1J)}19 6(i>0){i=f.g.1F()-h+(52/2-.5)*g+1J}}19{i=i*f.g.1A}6(d===-1||t==="1G"){16 y=1}19{16 b=f.g.1u.11("bI")?1b(f.g.1u.11("bI")):f.o.b5;16 y=d*b}6(e(14).11("2z")==="1G"){16 w=f.1y.5Y;16 E=f.1y.5F;16 S=f.1y.5x}19{16 w=f.o.5Y;16 E=f.o.5F;16 S=f.o.5x}16 x=e(14).11("5c")?1b(e(14).11("5c")):w;16 T=e(14).11("5N")?1b(e(14).11("5N")):E;16 N=e(14).11("5R")?e(14).11("5R"):S;16 C=e(14);16 k=18(){6(f.o.8W==1c){C.17(".12-2J, 3P, 6Z").2l()}6(C.11("5E")>0){C.11("7d",2e(18(){f.8Y(C)},C.11("5E")))}};e(14).1a({3l:0,3I:0});16 L={5o:51,5m:52,7m:82,7h:81,3f:s,4E:7Z,4B:7W,2b:"2V",x:r*y,y:i*y};16 A={3f:0,4E:0,4B:0,7m:0,7h:0,5o:1,5m:1,3R:n(N),1M:x/1P,x:0,y:0,8L:18(){k()}};6(t.1i("3B")!=-1||e(14).11("f1")!=="1h"&&e(14).11("2z")==="1G"){L["2N"]=0;A["2N"]=e(14).11("75")}6(e(14).11("3L")){e(14).11("3L").7X()}36.8Q(e(14)[0],{8O:l,8K:a});e(14).11("3L",36.77(e(14)[0],T/1P,L,A))})};16 N=18(){6(i(e(u))&&(f.g.1u.11("5f")||f.g.1u.11("63"))){6(f.g.1u.11("5f")&&f.g.1u.11("63")){16 t=1C.27(1C.2g()*2);16 n=[["3d",f.g.1u.11("5f")],["bs",f.g.1u.11("63")]];k(n[t][0],n[t][1])}19 6(f.g.1u.11("5f")){k("3d",f.g.1u.11("5f"))}19{k("bs",f.g.1u.11("63"))}}19{6(f.g.1u.11("5y")&&f.g.1u.11("5z")){16 t=1C.27(1C.2g()*2);16 n=[["2d",f.g.1u.11("5y")],["bo",f.g.1u.11("5z")]];k(n[t][0],n[t][1])}19 6(f.g.1u.11("5y")){k("2d",f.g.1u.11("5y"))}19 6(f.g.1u.11("5z")){k("bo",f.g.1u.11("5z"))}19{k("2d","1")}}};16 C=18(){6(i(e(u))&&5u.1i("3d")!=-1){k("3d",5u.1E(":")[1])}19{6(5u.1i("3d")!=-1){k("2d","4P")}19{k("2d",5u.1E(":")[1])}}};16 k=18(e,t){16 n=e.1i("eZ")==-1?f.t:f.ct;16 r="3d",i,s;6(e.1i("2d")!=-1){r="2d"}6(t.1i("4j")!=-1){s=n["t"+r].1k-1;i="4j"}19 6(t.1i("4P")!=-1){s=1C.27(1C.2g()*o(n["t"+r]));i="2g bh 4P"}19{16 u=t.1E(",");16 a=u.1k;s=1b(u[1C.27(1C.2g()*a)])-1;i="2g bh f0"}L(r,n["t"+r][s])};16 L=18(t,i){16 o=e(u).17(".12-28");16 a=f.g.1L.17(\'*[1t*="12-l"]\').1k>0?1P:0;16 l=i.7g.21().1i("f5")==-1?1h:1c;16 c=i.7g.21().1i("f6")==-1?1h:1c;16 h=1Y i.4p;16 p=1Y i.4o;2q(h){1l"3S":h=i.4p;1j;1l"4w":h=1C.27(1C.2g()*(1b(i.4p.1E(",")[1])-1b(i.4p.1E(",")[0])+1))+1b(i.4p.1E(",")[0]);1j;bj:h=1C.27(1C.2g()*(i.4p[1]-i.4p[0]+1))+i.4p[0];1j}2q(p){1l"3S":p=i.4o;1j;1l"4w":p=1C.27(1C.2g()*(1b(i.4o.1E(",")[1])-1b(i.4o.1E(",")[0])+1))+1b(i.4o.1E(",")[0]);1j;bj:p=1C.27(1C.2g()*(i.4o[1]-i.4o[0]+1))+i.4o[0];1j}6(f.g.9C()==1c&&f.o.97==1c||f.g.2n&&f.o.9a==1c){6(h>=15){h=7}19 6(h>=5){h=4}19 6(h>=4){h=3}19 6(h>2){h=2}6(p>=15){p=7}19 6(p>=5){p=4}19 6(p>=4){p=3}19 6(p>2){p=2}6(p>2&&h>2){p=2;6(h>4){h=4}}}16 d=e(u).17(".12-28").1d()/h;16 v=e(u).17(".12-28").1e()/p;6(!f.g.2s){f.g.2s=e("<1n>").1r("12-1y-2p").1r("12-4q-2K").1a({1d:o.1d(),1e:o.1e()}).7e(o)}19{f.g.2s.1x(1c,1c).5t().1a({1K:"2j",1d:o.1d(),1e:o.1e()})}16 m=o.1d()-1C.27(d)*h;16 g=o.1e()-1C.27(v)*p;16 y=[];y.bu=18(){16 e=14.1k,t,n,r;6(e==0)1U 1h;aa(--e){t=1C.27(1C.2g()*(e+1));n=14[e];r=14[t];14[e]=r;14[t]=n}1U 14};24(16 b=0;b").1r("12-f7").1v(f.g.2s);f.g.7w=e("<1n>").1r("12-f8").1v(f.g.2s)}16 k=f.g.2i;24(16 L=0;L(p-1)*h-1?g:0;16 M=e("<1n>").1r("12-1y-3X").1a({1d:1C.27(d)+A,1e:1C.27(v)+O}).1v(f.g.2s);16 55,D;6(t=="3d"){M.1r("12-3d-2p");16 P=1C.27(d)+A;16 H=1C.27(v)+O;16 B;6(i.2c.5S=="aC"){6(1C.4m(i.2c.1B.3m)>90&&i.3X.bE!="bD"){B=1C.27(P/7)+A}19{B=P}}19{6(1C.4m(i.2c.1B.2Y)>90&&i.3X.bE!="bD"){B=1C.27(H/7)+O}19{B=H}}16 j=P/2;16 F=H/2;16 I=B/2;16 q=18(t,n,r,i,s,o,u,a,f){e("<1n>").1r(t).1a({1d:r,1e:i,3V:"5T("+s+"1I, "+o+"1I, "+u+"1I) 2Y("+a+"3J) 3m("+f+"3J) 6b(69) 4x(1, 1, 1)","-o-3V":"5T("+s+"1I, "+o+"1I, "+u+"1I) 2Y("+a+"3J) 3m("+f+"3J) 6b(69) 4x(1, 1, 1)","-ag-3V":"5T("+s+"1I, "+o+"1I, "+u+"1I) 2Y("+a+"3J) 3m("+f+"3J) 6b(69) 4x(1, 1, 1)","-af-3V":"5T("+s+"1I, "+o+"1I, "+u+"1I) 2Y("+a+"3J) 3m("+f+"3J) 6b(69) 4x(1, 1, 1)","-67-3V":"5T("+s+"1I, "+o+"1I, "+u+"1I) 2Y("+a+"3J) 3m("+f+"3J) 6b(69) 4x(1, 1, 1)"}).1v(n)};q("12-3d-3O",M,0,0,0,0,-I,0,0);16 R=0;16 U=0;16 z=0;6(i.2c.5S=="dU"&&1C.4m(i.2c.1B.2Y)>90){q("12-3d-5B",M.17(".12-3d-3O"),P,H,-j,-F,-I,7l,0)}19{q("12-3d-5B",M.17(".12-3d-3O"),P,H,-j,-F,-I,0,7l)}q("12-3d-1o",M.17(".12-3d-3O"),P,B,-j,F-I,0,-90,0);q("12-3d-1q",M.17(".12-3d-3O"),P,B,-j,-F-I,0,90,0);q("12-3d-aB",M.17(".12-3d-3O"),P,H,-j,-F,I,0,0);q("12-3d-1m",M.17(".12-3d-3O"),B,H,-j-I,-F,0,0,-90);q("12-3d-1D",M.17(".12-3d-3O"),B,H,j-I,-F,0,0,90);55=M.17(".12-3d-aB");6(i.2c.5S=="aC"){6(1C.4m(i.2c.1B.3m)>90){D=M.17(".12-3d-5B")}19{D=M.17(".12-3d-1m, .12-3d-1D")}}19{6(1C.4m(i.2c.1B.2Y)>90){D=M.17(".12-3d-5B")}19{D=M.17(".12-3d-1q, .12-3d-1o")}}16 W=y[L]*i.3X.1M;16 X=f.g.2s.17(".12-3d-2p:eq("+L+") .12-3d-3O");16 V=1G aD;6(i.2P&&i.2P.1B){i.2P.1B.1M=i.2P.1B.1M?(i.2P.1B.1M+W)/1P:W/1P;V.2f(X[0],i.2P.2m/1P,r(i.2P.1B,i.2P.4t))}19{i.2c.1B.1M=i.2c.1B.1M?(i.2c.1B.1M+W)/1P:W/1P}V.2f(X[0],i.2c.2m/1P,r(i.2c.1B,i.2c.4t));6(i.2u){6(!i.2u.1B){i.2u.1B={}}V.2f(X[0],i.2u.2m/1P,r(i.2u.1B,i.2u.4t,"2u"))}}19{16 J=2S=2O=2M="1W";16 K=72=1;6(i.1B.5S=="2g"){16 Q=["1q","1o","1D","1m"];16 G=Q[1C.27(1C.2g()*Q.1k)]}19{16 G=i.1B.5S}6(i.7g.21().1i("b6")!=-1&&L%2==0){6(k=="1S"){k="1V"}19{k="1S"}}6(k=="1S"){2q(G){1l"1q":G="1o";1j;1l"1o":G="1q";1j;1l"1m":G="1D";1j;1l"1D":G="1m";1j;1l"7A":G="7H";1j;1l"7G":G="7F";1j;1l"7F":G="7G";1j;1l"7H":G="7A";1j}}2q(G){1l"1q":J=2O=-M.1e();2S=2M=0;1j;1l"1o":J=2O=M.1e();2S=2M=0;1j;1l"1m":J=2O=0;2S=2M=-M.1d();1j;1l"1D":J=2O=0;2S=2M=M.1d();1j;1l"7A":J=M.1e();2O=0;2S=M.1d();2M=0;1j;1l"7G":J=M.1e();2O=0;2S=-M.1d();2M=0;1j;1l"7F":J=-M.1e();2O=0;2S=M.1d();2M=0;1j;1l"7H":J=-M.1e();2O=0;2S=-M.1d();2M=0;1j}f.g.5l=i.1B.5A?i.1B.5A:1;6(l==1c&&f.g.5l!=1){J=J/2;2O=2O/2;2S=2S/2;2M=2M/2}2q(i.1B.4R){1l"3B":J=2O=2S=2M=0;K=0;72=1;1j;1l"dF":K=0;72=1;6(f.g.5l==1){2O=2M=0}1j}6((i.1B.3y||i.1B.2Y||i.1B.3m||f.g.5l!=1)&&!f.g.2n&&i.1B.4R!="1p"){M.1a({4q:"2V"})}19{M.1a({4q:"2K"})}6(l==1c){f.g.5h.1a({4q:"2V"})}19{f.g.5h.1a({4q:"2K"})}6(c==1c||i.1B.4R=="1p"||l==1c){16 Y=M.1v(f.g.5h);16 Z=M.7y().1v(f.g.7w);55=e("<1n>").1r("12-dD").1v(Y)}19{16 Z=M.1v(f.g.7w)}D=e("<1n>").1r("12-dK").1v(Z).1a({1q:-J,1m:-2S,dN:"2j",2N:K});16 et=y[L]*i.3X.1M;16 4X=i.1B.3y?i.1B.3y:0;16 76=i.1B.2Y?i.1B.2Y:0;16 71=i.1B.3m?i.1B.3m:0;6(k=="1S"){4X=-4X;76=-76;71=-71}36.77(D[0],i.1B.2m/1P,{3f:4X,4E:76,4B:71,5A:f.g.5l},{1M:et/1P,1q:0,1m:0,2N:72,3f:0,4E:0,4B:0,5A:1,3R:n(i.1B.4t)});6(c==1c&&(x.1k<1||x.1k>0&&(x.1f("1g").21().1i("4G")!=-1||x.1d()").1f("1g",w.1f("1g")).1a({1d:w[0].1N.1d,1e:w[0].1N.1e,3l:3j(w.1a("3i-1m"))-3j(M.3r().1m),3I:3j(w.1a("3i-1q"))-3j(M.3r().1q)}))}19 6(f.g.5h.38().1k==0){f.g.5h.3Q(e("<1Z>").1f("1g",w.1f("1g")).1a({1d:w[0].1N.1d,1e:w[0].1N.1e,3l:3j(w.1a("3i-1m")),3I:3j(w.1a("3i-1q"))}))}}6(x.1k){D.3Q(e("<1Z>").1f("1g",x.1f("1g")).1a({1d:x[0].1N.1d,1e:x[0].1N.1e,3l:3j(x.1a("3i-1m"))-3j(M.3r().1m),3I:3j(x.1a("3i-1q"))-3j(M.3r().1q)}))}}16 58=f.g.1L;16 2D=f.g.1u;2e(18(){58.17(".12-bg").1a({2b:"2K"})},50);2D.17(".12-bg").1a({2b:"2K"});f.g.2s.31("12-4q-2K");S(a);2e(18(){58.1a({1d:0})},a);16 7S=1b(2D.11("6m"))?1b(2D.11("6m")):0;16 at=f.g.3b+7S>0?f.g.3b+7S:0;2e(18(){6(f.g.30==1c){f.g.2s.5t();58.31("12-1T");f.3D(2D,18(){f.g.30=1h})}T();6(2D.17(".12-bg").1k<1||2D.17(".12-bg").1k>0&&2D.17(".12-bg").1f("1g").21().1i("4G")!=-1){f.g.2s.1M(aQ).3M(2E,18(){e(14).5t().5V()})}2D.1a({1d:f.g.1z(),1e:f.g.1F()})},at);6(f.g.3b<1P){f.g.3b=1P}2e(18(){f.g.2s.1r("12-4q-2K");2D.1r("12-1T");6(2D.17(".12-bg").1k){2D.17(".12-bg").1a({1K:"1Q",2b:"2V"});6(f.g.2n){2D.17(".12-bg").1a("1K","2j");2e(18(){E()},46)}19{2D.17(".12-bg").2G(46,18(){E()})}}19{E()}},f.g.3b)};16 A=(f.g.1u.11("5f")||f.g.1u.11("5y"))&&f.t||(f.g.1u.11("63")||f.g.1u.11("5z"))&&f.ct?"1G":"5M";6(!f.g.1u.11("2z")){f.5L(f.g.1u)}6(f.g.1u.11("2z")==="1G"){A="1G"}6(f.o.8M){A="aW"}6(f.o.4A&&!f.g.aS){6(f.g.2x==1){16 d=0;f.o.8F(f.g)}19{16 O=1b(f.g.1u.11("6m"))?1b(f.g.1u.11("6m")):0;16 M=A=="1G"?0:v;f.g.96=2e(18(){E()},M+1C.4m(O))}f.g.3b=1c;T();f.g.1u.1a({1d:f.g.1z(),1e:f.g.1F()});6(!f.g.2n){f.g.1u.17(".12-bg").1a({1K:"1Q"}).2G(46)}f.g.aS=1c;f.g.4a=1h}19{2q(A){1l"5M":f.g.3b=1h;6(f.g.2s){f.g.2s.5t()}w();S();x();T();1j;1l"1G":6(1Y 5u!="3E"){C()}19{N()}1j;1l"aW":L(f.o.8M.4R,f.o.8M.ej);1j}}};f.5L=18(e){16 t=e.11("12")||!e.11("12")&&!e.11("5w")&&!e.11("3C")&&!e.11("5G")&&!e.11("5c")&&!e.11("5O")&&!e.11("5N")&&!e.11("4O")&&!e.11("5E")&&!e.11("5R")&&!e.11("4Q")&&!e.11("87")&&!e.11("5I")&&!e.11("8S")&&!e.11("5H")?"1G":"5M";e.11("2z",t)};f.8Y=18(e){6(!e.11("2z")){f.5L(e)}16 t=f.g.1L;6(f.g.2i!="1S"&&f.g.1u){t=f.g.1u}16 r=t.11("3C")?t.11("3C"):f.o.8H;16 i=f.g.8J[f.g.2i][r];16 s=e.11("3C")?e.11("3C"):i;16 o,u;2q(s){1l"1m":o=-f.g.1z();u=0;1j;1l"1D":o=f.g.1z();u=0;1j;1l"1q":u=-f.g.1F();o=0;1j;1l"1o":u=f.g.1F();o=0;1j;1l"3B":u=0;o=0;1j}6(e.11("2z")==="1G"){16 a="1G"}19{16 a=e.11("5G")?e.11("5G"):1h}2q(a){1l"1m":o=f.g.1z();u=0;1j;1l"1D":o=-f.g.1z();u=0;1j;1l"1q":u=f.g.1F();o=0;1j;1l"1o":u=-f.g.1F();o=0;1j;1l"3B":u=0;o=0;1j;1l"1G":6(e.11("3c")){6(e.11("3c")==="1m"){o=f.g.1z()}19 6(e.11("3c")==="1D"){o=-f.g.1z()}19{o=-1b(e.11("3c"))}}19{o=-f.1y.8m}6(e.11("34")){6(e.11("34")==="1q"){u=f.g.1F()}19 6(e.11("34")==="1o"){u=-f.g.1F()}19{u=-1b(e.11("34"))}}19{u=-f.1y.8I}1j}16 l=5r=5p=4s=5n=5j=3a=33="1Q";l=e.11("5H")?e.11("5H"):f.1y.89;5r=e.11("6N")?e.11("6N"):f.1y.88;5p=e.11("6O")?e.11("6O"):f.1y.8c;4s=e.11("5I")?e.11("5I"):f.1y.8f;5n=e.11("6A")?e.11("6A"):f.1y.8C;5j=e.11("6P")?e.11("6P"):f.1y.8D;6(4s===1){3a=e.11("6Q")?e.11("6Q"):f.1y.8p;33=e.11("6X")?e.11("6X"):f.1y.8q}19{3a=33=4s}16 c=e.11("6n")?e.11("6n").1E(" "):f.1y.8E;24(16 h=0;he.3u()?e.3t():e.3u();16 b=1b(l)===0?e.3t():y;16 w=1b(l)===0?e.3u():y;6(g===-1&&a!=="1G"||e.11("3c")==="1m"||e.11("3c")==="1D"){6(o<0){o=-(f.g.1z()-v+(3a/2-.5)*b+1J)}19 6(o>0){o=v+(3a/2+.5)*b+1J}}19{o=o*f.g.1A}6(g===-1&&a!=="1G"||e.11("34")==="1q"||e.11("34")==="1o"){6(u<0){u=-(f.g.1F()-m+(33/2-.5)*w+1J)}19 6(u>0){u=m+(33/2+.5)*w+1J}}19{u=u*f.g.1A}6(g===-1||a==="1G"){16 E=1}19{16 S=f.g.1L.11("6u")?1b(f.g.1L.11("6u")):f.o.8Z;16 E=g*S}6(e.11("2z")==="1G"){16 x=f.1y.4F;16 T=f.1y.4z}19{16 x=f.o.4F;16 T=f.o.4z}16 N=e.11("4O")?1b(e.11("4O")):x;16 C=e.11("4Q")?e.11("4Q"):T;16 k={2b:"2K"};16 L={3f:l,4E:5r,4B:5p,7m:5n,7h:5j,5o:3a,5m:33,x:-o*E,y:-u*E,3R:n(C),8L:18(){e.1a(k)}};6(a=="3B"||!a&&s=="3B"||e.11("aY")!=="1h"&&e.11("2z")==="1G"){L["2N"]=0;k["2N"]=e.11("75")}36.8Q(e[0],{8O:d,8K:p});36.2f(e[0],N/1P,L)};f.4W=18(){f.d={3Z:e("<1n>"),aT:18(t){e(""+t+"").1v(f.d.3Z)},as:18(){e("<4y>").1v(f.d.3Z)},aU:18(t){e("<4y><3w>"+t+"").1v(f.d.3Z)},aL:18(t){e("<3w>"+t+"").1v(f.d.3Z.17("4y:4j"))},8h:18(t){e("<4y>").1v(f.d.3Z.17("4y:4j 3w:4j"))},aF:18(e){f.d.3Z.17("4y:4j 3w:4j").1R(18(){e.1a({3s:"ef ee ed",3I:1b(e.1a("3i-1q"))-2,3l:1b(e.1a("3i-1m"))-2})},18(){e.1a({3s:"a2",3I:1b(e.1a("3i-1q"))+2,3l:1b(e.1a("3i-1m"))+2})})},5V:18(){6(!e("3T").17(".12-4W-4L").1k){6(!f.d.bz){f.d.aT("ec ew");f.d.as();24(16 t 3H f.o){f.d.aL(t+": <1X>"+f.o[t]+"")}f.d.aT("2A e6");f.d.aU("er 2Q ev eo: <1X>"+e(u).17(".12-1p").1k+"");e(u).17(\'.12-28 .12-1p, .12-28 *[1t*="12-l"]\').1O(18(){6(e(14).3k("12-1p")){f.d.aU("<1X>al "+(e(14).5D()+1)+"");f.d.8h();f.d.aL("<1X>al "+(e(14).5D()+1)+" az:

              ")}19{f.d.aU("&7o;&7o;&7o;&7o;ei ( "+e(14).aH("b9")+" )");f.d.aF(e(14));f.d.8h();f.d.aL("<1X>"+e(14).aH("b9")+" 5q az:

              ");f.d.aL("en / 1t: <1X>"+e(14).1f("1t")+"")}e.1O(e(14).11(),18(e,t){f.d.aL(e+": <1X>"+t+"")})});f.d.bz=1c}16 n=e("<1n>").1r("12-4W-4L").1a({3r:"dG",bK:"dQ",1q:"6g",1D:"6g",1d:"dR",2a:"dZ",3e:"e0","3s-e1":"6g",1e:e(2o).1e()-60,2N:0,bc:70}).1v(e("3T")).1a({bc:0,2N:.9}).2l(18(t){6(t.bn&&t.ba){e(14).6q()}});16 r=e("<1n>").1a({1d:"1J%",1e:"1J%",4q:"1W"}).1v(n);16 i=e("<1n>").1a({1d:"1J%"}).1v(r).3Q(f.d.3Z)}},e2:18(){e("3T").17(".12-4W-4L").6q()}};e(u).2l(18(e){6(e.bn&&e.ba){f.d.5V()}})};f.2Z()};16 n=18(e){16 t;6(e.21().1i("ai")!==-1||e.21().1i("8z")!==-1){t=8y.8t}19 6(e.21().1i("8s")!==-1){16 n=e.21().1E("8s")[1];t=2o[n.8v(0).8x()+n.8w(1)].bF}19 6(e.21().1i("8r")!==-1){16 n=e.21().1E("8r")[1];t=2o[n.8v(0).8x()+n.8w(1)].bB}19 6(e.21().1i("8u")!==-1){16 n=e.21().1E("8u")[1];t=2o[n.8v(0).8x()+n.8w(1)].9x}1U t};16 r=18(e,t,r,i){6(1Y t==="3E"){16 t="dT"}16 s={};6(e.3y!==i){s.3f=e.3y}6(e.3m!==i){s.4B=e.3m}6(e.2Y!==i){s.4E=e.2Y}6(r==="2u"){s.5o=s.5m=s.9y=1}19 6(e.4x!==i){s.5o=s.5m=s.9y=e.4x}6(e.1M){s.1M=r==="2u"?e.1M/1P:e.1M}s.3R=n(t);1U s};16 i=18(t){16 n=e("<1n>"),r=1h,i=1h,s=["dS","ex","eX","eR","dI"];3V=["eM","eW","dX","em","ek"];24(16 o=s.1k-1;o>=0;o--){r=r?r:n[0].1N[s[o]]!=3E}24(16 o=3V.1k-1;o>=0;o--){n.1a("3V-1N","94-3d");i=i?i:n[0].1N[3V[o]]=="94-3d"}6(r&&n[0].1N[s[4]]!=3E){n.1f("4J","12-ea").1v(t);r=n[0].eb===3&&n[0].e5===9;n.6q()}1U r&&i};16 s=18(e,t,n){16 r=[];6(n=="8A"){24(16 i=0;i-1;i--){24(16 s=t-1;s>-1;s--){r.8B(i+s*e)}}}1U r};16 o=18(e){16 t=0;24(16 n 3H e){6(e.e7(n)){++t}}1U t};16 u=18(){a0=18(e){e=e.21();16 t=/(a6)[ \\/]([\\w.]+)/.5Z(e)||/(67)[ \\/]([\\w.]+)/.5Z(e)||/(e9)(?:.*2B|)[ \\/]([\\w.]+)/.5Z(e)||/(9T) ([\\w.]+)/.5Z(e)||e.1i("ah")<0&&/(eg)(?:.*? eh:([\\w.]+)|)/.5Z(e)||[];1U{8a:t[1]||"",2B:t[2]||"0"}};16 e=a0(42.40),t={};6(e.8a){t[e.8a]=1c;t.2B=e.2B}6(t.a6){t.67=1c}19 6(t.67){t.es=1c}1U t};eu=18(e,t){16 n=["67","ep","af","ag","o",""];16 r=0,i,s;aa(r', { 'class' : 'transitionpreview', 'style' : 'width: '+settings.width+'px; height: '+settings.height+'px;'}) + .append( $('
              ', { 'class' : 'ls-layer', 'data-ls' : 'slidedelay: '+settings.delay+';'}) + .append( $('', { 'src' : ''+settings.imgPath+'sample_slide_1.png', 'class' : 'ls-bg'}))) + .append( $('
              ', { 'class' : 'ls-layer', 'data-ls' : 'slidedelay: '+settings.delay+';'}) + .append( $('', { 'src' : ''+settings.imgPath+'sample_slide_2.png', 'class' : 'ls-bg'}))) + ); + + // Initialize the slider + + $(el).find('.transitionpreview').layerSlider({ + showCircleTimer : false, + pauseOnHover : false, + skin : 'noskin', + slidedelay : 100, + skinsPath : settings.skinsPath, + slideTransition : { + type : settings.transitionType, + obj : settings.transitionObject + } + }); + }; + + tp.stop = function(){ + + $(el).find('.transitionpreview').layerSlider('forceStop').remove(); + }; + + tp.init(); + }; +}( jQuery )); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/layerslider.transitions.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/layerslider.transitions.js new file mode 100644 index 0000000..e024953 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/layerslider.transitions.js @@ -0,0 +1,13 @@ + +/* + * 2D & 3D Transitions for LayerSlider + * + * (c) 2011-2013 George Krupa, John Gera & Kreatura Media + * + * Plugin web: http://kreaturamedia.com/ + * Licenses: http://codecanyon.net/licenses/ +*/ + + + +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('20 1Z={27:[{j:"13 N E",d:1,g:1,f:{e:0,i:"o"},c:{n:"W",b:"1e",a:G,h:"r"}},{j:"13 N r",d:1,g:1,f:{e:0,i:"o"},c:{n:"W",b:"1e",a:G,h:"E"}},{j:"13 N L",d:1,g:1,f:{e:0,i:"o"},c:{n:"W",b:"1e",a:G,h:"J"}},{j:"13 N J",d:1,g:1,f:{e:0,i:"o"},c:{n:"W",b:"1e",a:G,h:"L"}},{j:"26",d:1,g:1,f:{e:0,i:"o"},c:{n:"14",b:"1e",a:G,h:"r"}},{j:"Z R o",d:[2,4],g:[4,7],f:{e:1k,i:"o"},c:{n:"14",b:"z",a:G,h:"r"}},{j:"Z R D",d:[2,4],g:[4,7],f:{e:1k,i:"D"},c:{n:"14",b:"z",a:G,h:"r"}},{j:"Z R 1j-o",d:[2,4],g:[4,7],f:{e:1k,i:"1j-o"},c:{n:"14",b:"z",a:G,h:"r"}},{j:"Z R 1j-D",d:[2,4],g:[4,7],f:{e:1k,i:"1j-D"},c:{n:"14",b:"z",a:G,h:"r"}},{j:"Z R (k)",d:[2,4],g:[4,7],f:{e:1k,i:"k"},c:{n:"14",b:"z",a:G,h:"r"}},{j:"1y 1H N E",d:1,g:1s,f:{e:25,i:"D"},c:{n:"14",b:"1X",a:V,h:"r"}},{j:"1y 1H N r",d:1,g:1s,f:{e:25,i:"o"},c:{n:"14",b:"w",a:V,h:"r"}},{j:"1y 1H N L",d:1s,g:1,f:{e:25,i:"1j-D"},c:{n:"14",b:"w",a:V,h:"r"}},{j:"1y 1H N J",d:1s,g:1,f:{e:25,i:"1j-o"},c:{n:"14",b:"w",a:V,h:"r"}},{j:"1y Y N E",d:1,g:25,f:{e:1k,i:"D"},c:{n:"W",b:"w",a:1g,h:"r"}},{j:"1y Y N r",d:1,g:25,f:{e:1k,i:"o"},c:{n:"W",b:"w",a:1g,h:"E"}},{j:"1y 1W N L",d:25,g:1,f:{e:1k,i:"1j-D"},c:{n:"W",b:"w",a:1g,h:"J"}},{j:"1y Y N J",d:25,g:1,f:{e:1k,i:"1j-o"},c:{n:"W",b:"w",a:1g,h:"L"}},{j:"13 R m E (k)",d:[2,4],g:[4,7],f:{e:1f,i:"k"},c:{n:"W",b:"z",a:1m,h:"E"}},{j:"13 R m r (k)",d:[2,4],g:[4,7],f:{e:1f,i:"k"},c:{n:"W",b:"z",a:1m,h:"r"}},{j:"13 R m L (k)",d:[2,4],g:[4,7],f:{e:1f,i:"k"},c:{n:"W",b:"z",a:1m,h:"L"}},{j:"13 R m J (k)",d:[2,4],g:[4,7],f:{e:1f,i:"k"},c:{n:"W",b:"z",a:1m,h:"J"}},{j:"13 k R m k 1S",d:[2,4],g:[4,7],f:{e:1f,i:"k"},c:{n:"W",b:"z",a:1m,h:"k"}},{j:"13 d m E (o)",d:[7,11],g:1,f:{e:1d,i:"o"},c:{n:"W",b:"w",a:p,h:"E"}},{j:"13 d m E (D)",d:[7,11],g:1,f:{e:1d,i:"D"},c:{n:"W",b:"w",a:p,h:"E"}},{j:"13 d m E (k)",d:[7,11],g:1,f:{e:1d,i:"k"},c:{n:"W",b:"w",a:p,h:"E"}},{j:"13 d m r (o)",d:[7,11],g:1,f:{e:1d,i:"o"},c:{n:"W",b:"w",a:p,h:"r"}},{j:"13 d m r (D)",d:[7,11],g:1,f:{e:1d,i:"D"},c:{n:"W",b:"w",a:p,h:"r"}},{j:"13 d m r (k)",d:[7,11],g:1,f:{e:1d,i:"k"},c:{n:"W",b:"w",a:p,h:"r"}},{j:"13 d N J m L (o)",d:[7,11],g:1,f:{e:1d,i:"o"},c:{n:"W",b:"w",a:p,h:"L"}},{j:"13 d N J m L (k)",d:[7,11],g:1,f:{e:1d,i:"k"},c:{n:"W",b:"w",a:p,h:"L"}},{j:"13 d N L m J (D)",d:[7,11],g:1,f:{e:1d,i:"D"},c:{n:"W",b:"w",a:p,h:"J"}},{j:"13 d N L m J (k)",d:[7,11],g:1,f:{e:1d,i:"k"},c:{n:"W",b:"w",a:p,h:"J"}},{j:"13 P m L (o)",d:1,g:[12,16],f:{e:q,i:"o"},c:{n:"W",b:"w",a:p,h:"L"}},{j:"13 P m L (D)",d:1,g:[12,16],f:{e:q,i:"D"},c:{n:"W",b:"w",a:p,h:"L"}},{j:"13 P m L (k)",d:1,g:[12,16],f:{e:q,i:"k"},c:{n:"W",b:"w",a:p,h:"L"}},{j:"13 P m J (o)",d:1,g:[12,16],f:{e:q,i:"o"},c:{n:"W",b:"w",a:p,h:"J"}},{j:"13 P m J (D)",d:1,g:[12,16],f:{e:q,i:"D"},c:{n:"W",b:"w",a:p,h:"J"}},{j:"13 P m J (k)",d:1,g:[12,16],f:{e:q,i:"k"},c:{n:"W",b:"w",a:p,h:"J"}},{j:"13 P N r m E (o)",d:1,g:[12,16],f:{e:q,i:"o"},c:{n:"W",b:"w",a:p,h:"E"}},{j:"13 P N r m E (k)",d:1,g:[12,16],f:{e:q,i:"k"},c:{n:"W",b:"w",a:p,h:"E"}},{j:"13 P N E m r (D)",d:1,g:[12,16],f:{e:q,i:"D"},c:{n:"W",b:"w",a:p,h:"r"}},{j:"13 P N E m r (k)",d:1,g:[12,16],f:{e:q,i:"k"},c:{n:"W",b:"w",a:p,h:"r"}},{j:"Z v Y R m E (k)",d:[2,4],g:[4,7],f:{e:1f,i:"k"},c:{n:"Q",b:"z",a:1m,h:"E"}},{j:"Z v Y R m r (k)",d:[2,4],g:[4,7],f:{e:1f,i:"k"},c:{n:"Q",b:"z",a:1m,h:"r"}},{j:"Z v Y R m L (k)",d:[2,4],g:[4,7],f:{e:1f,i:"k"},c:{n:"Q",b:"z",a:1m,h:"L"}},{j:"Z v Y R m J (k)",d:[2,4],g:[4,7],f:{e:1f,i:"k"},c:{n:"Q",b:"z",a:1m,h:"J"}},{j:"Z v Y k R m k 1S",d:[2,4],g:[4,7],f:{e:1f,i:"k"},c:{n:"Q",b:"z",a:1m,h:"k"}},{j:"Z v Y R N J-r (o)",d:[2,4],g:[4,7],f:{e:1f,i:"o"},c:{n:"Q",b:"z",a:1m,h:"1V"}},{j:"Z v Y R N L-E (D)",d:[2,4],g:[4,7],f:{e:1f,i:"D"},c:{n:"Q",b:"z",a:1m,h:"21"}},{j:"Z v Y R N J-E (k)",d:[2,4],g:[4,7],f:{e:1f,i:"k"},c:{n:"Q",b:"z",a:1m,h:"1T"}},{j:"Z v Y R N L-r (k)",d:[2,4],g:[4,7],f:{e:1f,i:"k"},c:{n:"Q",b:"z",a:1m,h:"1U"}},{j:"Z v Y d m E (o)",d:[7,11],g:1,f:{e:1d,i:"o"},c:{n:"Q",b:"w",a:p,h:"E"}},{j:"Z v Y d m E (D)",d:[7,11],g:1,f:{e:1d,i:"D"},c:{n:"Q",b:"w",a:p,h:"E"}},{j:"Z v Y d m E (k)",d:[7,11],g:1,f:{e:1d,i:"k"},c:{n:"Q",b:"w",a:p,h:"E"}},{j:"Z v Y d m r (o)",d:[7,11],g:1,f:{e:1d,i:"o"},c:{n:"Q",b:"w",a:p,h:"r"}},{j:"Z v Y d m r (D)",d:[7,11],g:1,f:{e:1d,i:"D"},c:{n:"Q",b:"w",a:p,h:"r"}},{j:"Z v Y d m r (k)",d:[7,11],g:1,f:{e:1d,i:"k"},c:{n:"Q",b:"w",a:p,h:"r"}},{j:"Z v Y d N J m L (o)",d:[7,11],g:1,f:{e:1d,i:"o"},c:{n:"Q",b:"w",a:p,h:"L"}},{j:"Z v Y d N J m L (k)",d:[7,11],g:1,f:{e:1d,i:"k"},c:{n:"Q",b:"w",a:p,h:"L"}},{j:"Z v Y d N L m J (D)",d:[7,11],g:1,f:{e:1d,i:"D"},c:{n:"Q",b:"w",a:p,h:"J"}},{j:"Z v Y d N L m J (k)",d:[7,11],g:1,f:{e:1d,i:"k"},c:{n:"Q",b:"w",a:p,h:"J"}},{j:"Z v Y P m L (o)",d:1,g:[12,16],f:{e:q,i:"o"},c:{n:"Q",b:"w",a:p,h:"L"}},{j:"Z v Y P m L (D)",d:1,g:[12,16],f:{e:q,i:"D"},c:{n:"Q",b:"w",a:p,h:"L"}},{j:"Z v Y P m L (k)",d:1,g:[12,16],f:{e:q,i:"k"},c:{n:"Q",b:"w",a:p,h:"L"}},{j:"Z v Y P m J (o)",d:1,g:[12,16],f:{e:q,i:"o"},c:{n:"Q",b:"w",a:p,h:"J"}},{j:"Z v Y P m J (D)",d:1,g:[12,16],f:{e:q,i:"D"},c:{n:"Q",b:"w",a:p,h:"J"}},{j:"Z v Y P m J (k)",d:1,g:[12,16],f:{e:q,i:"k"},c:{n:"Q",b:"w",a:p,h:"J"}},{j:"Z v Y P N r m E (o)",d:1,g:[12,16],f:{e:q,i:"o"},c:{n:"Q",b:"w",a:p,h:"E"}},{j:"Z v Y P N r m E (k)",d:1,g:[12,16],f:{e:q,i:"k"},c:{n:"Q",b:"w",a:p,h:"E"}},{j:"Z v Y P N E m r (D)",d:1,g:[12,16],f:{e:q,i:"D"},c:{n:"Q",b:"w",a:p,h:"r"}},{j:"Z v Y P N E m r (k)",d:1,g:[12,16],f:{e:q,i:"k"},c:{n:"Q",b:"w",a:p,h:"r"}},{j:"1u",d:1,g:1,f:{e:0,i:"o"},c:{n:"Q",b:"1e",a:V,h:"r",1h:.5}},{j:"1u d",d:4,g:1,f:{e:1f,i:"o"},c:{n:"Q",b:"1e",a:V,h:"r",1h:.5}},{j:"1u g",d:1,g:4,f:{e:1f,i:"o"},c:{n:"Q",b:"1e",a:V,h:"r",1h:.5}},{j:"1u R A",d:3,g:4,f:{e:1s,i:"o"},c:{n:"Q",b:"1e",a:V,h:"r",1h:.5,y:x}},{j:"1u R F",d:3,g:4,f:{e:1s,i:"o"},c:{n:"Q",b:"1e",a:V,h:"J",1h:.5,u:-x}},{j:"1u-1I R A",d:3,g:4,f:{e:15,i:"o"},c:{n:"Q",b:"1e",a:V,h:"r",1h:.5,y:x}},{j:"1u-1I R F",d:3,g:4,f:{e:15,i:"o"},c:{n:"Q",b:"1e",a:V,h:"J",1h:.5,u:-x}},{j:"1u 1I d",d:4,g:1,f:{e:1f,i:"o"},c:{n:"Q",b:"1e",a:V,h:"E",1h:.5}},{j:"1u 1I g",d:1,g:4,f:{e:1f,i:"o"},c:{n:"Q",b:"1e",a:V,h:"r",1h:.5}},{j:"1c f N r",d:1,g:1,f:{e:0,i:"o"},c:{n:"W",b:"z",a:V,h:"E",y:x}},{j:"1c f N E",d:1,g:1,f:{e:0,i:"o"},c:{n:"W",b:"z",a:V,h:"r",y:-x}},{j:"1c f N J",d:1,g:1,f:{e:0,i:"o"},c:{n:"W",b:"z",a:V,h:"L",u:-x}},{j:"1c f N L",d:1,g:1,f:{e:0,i:"o"},c:{n:"W",b:"z",a:V,h:"J",u:x}},{j:"1c R N r",d:[3,4],g:[3,4],f:{e:19,i:"o"},c:{n:"14",b:"z",a:V,h:"r",y:x}},{j:"1c R N E",d:[3,4],g:[3,4],f:{e:19,i:"D"},c:{n:"14",b:"z",a:V,h:"r",y:-x}},{j:"1c R N J",d:[3,4],g:[3,4],f:{e:19,i:"o"},c:{n:"14",b:"z",a:V,h:"r",u:-x}},{j:"1c R N L",d:[3,4],g:[3,4],f:{e:19,i:"D"},c:{n:"14",b:"z",a:V,h:"r",u:x}},{j:"1c d N J",d:[6,12],g:1,f:{e:19,i:"o"},c:{n:"14",b:"z",a:V,h:"r",u:x}},{j:"1c d N L",d:[6,12],g:1,f:{e:19,i:"D"},c:{n:"14",b:"z",a:V,h:"r",u:-x}},{j:"1c g N r",d:1,g:[6,12],f:{e:19,i:"o"},c:{n:"14",b:"z",a:V,h:"r",y:-x}},{j:"1c g N E",d:1,g:[6,12],f:{e:19,i:"D"},c:{n:"14",b:"z",a:V,h:"r",y:x}},{j:"1v d N r",d:[3,10],g:1,f:{e:19,i:"o"},c:{n:"14",b:"z",a:V,h:"r",y:x}},{j:"1v d N E",d:[3,10],g:1,f:{e:19,i:"D"},c:{n:"14",b:"z",a:V,h:"r",y:-x}},{j:"1v g N J",d:1,g:[3,10],f:{e:19,i:"o"},c:{n:"14",b:"z",a:V,h:"r",u:-x}},{j:"1v g N L",d:1,g:[3,10],f:{e:19,i:"D"},c:{n:"14",b:"z",a:V,h:"r",u:x}},{j:"1v v 1z f N r",d:1,g:1,f:{e:q,i:"o"},c:{n:"Q",b:"z",a:V,h:"E",1h:.1,1r:-x,y:x}},{j:"1v v 1z f N E",d:1,g:1,f:{e:q,i:"o"},c:{n:"Q",b:"z",a:V,h:"r",1h:.1,1r:x,y:-x}},{j:"1v v 1z R N r",d:[3,4],g:[3,4],f:{e:19,i:"o"},c:{n:"Q",b:"z",a:V,h:"E",1r:-1w}},{j:"1v v 1z R N E",d:[3,4],g:[3,4],f:{e:19,i:"o"},c:{n:"Q",b:"z",a:V,h:"r",1r:-1w}},{j:"1v v 1z R N k",d:[3,4],g:[3,4],f:{e:19,i:"k"},c:{n:"Q",b:"z",a:V,h:"k",1r:-1w}},{j:"B f 1O",d:1,g:1,f:{e:0,i:"o"},c:{n:"14",b:"z",a:1a,h:"r",1h:.8}},{j:"B f N 1L",d:1,g:1,f:{e:0,i:"o"},c:{n:"14",b:"w",a:1a,h:"r",1h:1.2}},{j:"B R k",d:[3,4],g:[3,4],f:{e:1s,i:"k"},c:{n:"14",b:"z",a:V,h:"r",1h:.1}},{j:"B R N 1L k",d:[3,4],g:[3,4],f:{e:1s,i:"k"},c:{n:"14",b:"z",a:V,h:"r",1h:2}},{j:"B 1O v 1z R k",d:[3,4],g:[3,4],f:{e:1s,i:"k"},c:{n:"14",b:"z",a:V,h:"r",1h:.1,1r:x}},{j:"B v 1z R N 1L k",d:[3,4],g:[3,4],f:{e:1s,i:"k"},c:{n:"14",b:"z",a:V,h:"r",1h:2,1r:-x}},{j:"1D-Y R 24",d:3,g:4,f:{e:15,i:"o"},c:{n:"W",b:"w",a:1Y,h:"1T"}},{j:"1D-Y d A",d:6,g:1,f:{e:0,i:"o"},c:{n:"Q",b:"z",a:V,h:"r"}},{j:"1D-Y d F",d:6,g:1,f:{e:0,i:"o"},c:{n:"Q",b:"z",a:V,h:"J"}},{j:"1D-Y g A",d:1,g:8,f:{e:0,i:"o"},c:{n:"Q",b:"z",a:V,h:"r"}},{j:"1D-Y g F",d:1,g:8,f:{e:0,i:"o"},c:{n:"Q",b:"z",a:V,h:"J"}}],23:[{j:"1b f m E (l&#t;)",d:1,g:1,f:{e:q,i:"o"},s:{c:{y:1E},b:"1F",a:G,h:"A"},C:{c:{y:l},b:"z",a:G,h:"A"}},{j:"1b f m r (l&#t;)",d:1,g:1,f:{e:q,i:"o"},s:{c:{y:-1E},b:"1F",a:G,h:"A"},C:{c:{y:-l},b:"z",a:G,h:"A"}},{j:"1b f m L (l&#t;)",d:1,g:1,f:{e:q,i:"o"},s:{c:{u:-1E},b:"1F",a:1x,h:"F"},C:{c:{u:-l},b:"z",a:1x,h:"F"}},{j:"1b f m J (l&#t;)",d:1,g:1,f:{e:q,i:"o"},s:{c:{u:1E},b:"1F",a:1x,h:"F"},C:{c:{u:l},b:"z",a:1x,h:"F"}},{j:"1b R m E (l&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"o"},s:{c:{y:l},b:"w",a:G,h:"A"}},{j:"1b R m r (l&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"D"},s:{c:{y:-l},b:"w",a:G,h:"A"}},{j:"1b R m L (l&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"1j-o"},s:{c:{u:-l},b:"w",a:G,h:"F"}},{j:"1b R m J (l&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"1j-D"},s:{c:{u:l},b:"w",a:G,h:"F"}},{j:"1B S R k (l&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"k"},s:{c:{y:l},b:"w",a:1G,h:"A"}},{j:"1C S R k (l&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"k"},s:{c:{u:l},b:"w",a:1G,h:"F"}},{j:"B v S R m E (l&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"o"},M:{c:{I:.1A},a:1l,b:"18"},s:{c:{y:l},b:"H",a:G,h:"A"},C:{a:1g,b:"H"}},{j:"B v S R m r (l&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"D"},M:{c:{I:.1A},a:1l,b:"18"},s:{c:{y:-l},b:"H",a:G,h:"A"},C:{a:1g,b:"H"}},{j:"B v S R m L (l&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"1j-o"},M:{c:{I:.1A},a:1l,b:"18"},s:{c:{u:-l},b:"H",a:G,h:"F"},C:{a:1g,b:"H"}},{j:"B v S R m J (l&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"1j-D"},M:{c:{I:.1A},a:1l,b:"18"},s:{c:{u:l},b:"H",a:G,h:"F"},C:{a:1g,b:"H"}},{j:"B v A S R k (l&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"k"},M:{c:{I:.1A,u:1k},a:1l,b:"18"},s:{c:{y:l,u:-1k},b:"H",a:1G,h:"A"},C:{c:{u:0},a:1g,b:"H"}},{j:"B v F S R k (l&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"k"},M:{c:{I:.1A,y:-15},a:1l,b:"18"},s:{c:{u:l,y:15},b:"H",a:1G,h:"F"},C:{c:{y:0},a:1g,b:"H"}},{j:"1b d m E (l&#t;)",d:[5,9],g:1,f:{e:q,i:"o"},s:{c:{y:l},b:"w",a:1a,h:"A"}},{j:"1b d m r (l&#t;)",d:[5,9],g:1,f:{e:q,i:"o"},s:{c:{y:-l},b:"w",a:1a,h:"A"}},{j:"1b d m L (l&#t;)",d:[5,9],g:1,f:{e:q,i:"o"},s:{c:{u:-l},b:"w",a:G,h:"F"}},{j:"1b d m J (l&#t;)",d:[5,9],g:1,f:{e:q,i:"D"},s:{c:{u:l},b:"w",a:G,h:"F"}},{j:"1B S d k (l&#t;)",d:[5,9],g:1,f:{e:q,i:"k"},s:{c:{y:l},b:"w",a:1a,h:"A"}},{j:"1C S d k (l&#t;)",d:[5,9],g:1,f:{e:q,i:"k"},s:{c:{u:-l},b:"w",a:1a,h:"F"}},{j:"1C S d k (1J&#t;)",d:[3,7],g:1,f:{e:1Q,i:"k"},s:{c:{u:-1J},b:"w",a:1R,h:"F"}},{j:"B v S d m E (l&#t;)",d:[5,9],g:1,f:{e:19,i:"o"},M:{c:{I:.O},a:p,b:"K"},s:{c:{y:l},b:"H",a:1p,h:"A"},C:{c:{e:X},b:"K",a:p}},{j:"B v S d m r (l&#t;)",d:[5,9],g:1,f:{e:19,i:"D"},M:{c:{I:.O},a:p,b:"K"},s:{c:{y:-l},b:"H",a:1p,h:"A"},C:{c:{e:X},b:"K",a:p}},{j:"B v S d m L (l&#t;)",d:[5,9],g:1,f:{e:19,i:"o"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:-l},b:"w",a:p,h:"F"},C:{c:{e:X},b:"K",a:p}},{j:"B v S d m J (l&#t;)",d:[5,9],g:1,f:{e:19,i:"D"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:l},b:"w",a:p,h:"F"},C:{c:{e:X},b:"K",a:p}},{j:"B v A S d k (l&#t;)",d:[5,9],g:1,f:{e:19,i:"k"},M:{c:{I:.O},a:p,b:"K"},s:{c:{y:l},b:"H",a:1p,h:"A"},C:{c:{e:X},b:"K",a:p}},{j:"B v F S d k (l&#t;)",d:[5,9],g:1,f:{e:19,i:"k"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:-l},b:"H",a:p,h:"F"},C:{c:{e:X},b:"K",a:p}},{j:"1b P m E (l&#t;)",d:1,g:[5,9],f:{e:q,i:"o"},s:{c:{y:l},b:"w",a:1a,h:"A"}},{j:"1b P m r (l&#t;)",d:1,g:[5,9],f:{e:q,i:"o"},s:{c:{y:-l},b:"w",a:1a,h:"A"}},{j:"1b P m L (l&#t;)",d:1,g:[5,9],f:{e:q,i:"o"},s:{c:{u:-l},b:"w",a:G,h:"F"}},{j:"1b P m J (l&#t;)",d:1,g:[5,9],f:{e:q,i:"D"},s:{c:{u:l},b:"w",a:G,h:"F"}},{j:"1B S P k (l&#t;)",d:1,g:[5,9],f:{e:q,i:"k"},s:{c:{y:l},b:"w",a:1a,h:"A"}},{j:"1C S P k (l&#t;)",d:1,g:[5,9],f:{e:q,i:"k"},s:{c:{u:-l},b:"w",a:1a,h:"F"}},{j:"1B S P k (1J&#t;)",d:1,g:[4,9],f:{e:1Q,i:"k"},s:{c:{y:1J},b:"w",a:1R,h:"A"}},{j:"B v S P m E (l&#t;)",d:1,g:[7,11],f:{e:19,i:"o"},M:{c:{I:.O},a:p,b:"K"},s:{c:{y:l},b:"w",a:p,h:"A"},C:{c:{e:X},b:"K",a:p}},{j:"B v S P m r (l&#t;)",d:1,g:[7,11],f:{e:19,i:"D"},M:{c:{I:.O},a:p,b:"K"},s:{c:{y:-l},b:"w",a:p,h:"A"},C:{c:{e:X},b:"K",a:p}},{j:"B v S P m L (l&#t;)",d:1,g:[7,11],f:{e:19,i:"o"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:-l},b:"H",a:1p,h:"F"},C:{c:{e:X},b:"K",a:p}},{j:"B v S P m J (l&#t;)",d:1,g:[7,11],f:{e:q,i:"D"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:l},b:"H",a:1p,h:"F"},C:{c:{e:X},b:"K",a:p}},{j:"B v A S P k (l&#t;)",d:1,g:[7,11],f:{e:q,i:"k"},M:{c:{I:.O},a:p,b:"K"},s:{c:{y:l},b:"H",a:p,h:"A"},C:{c:{e:X},b:"K",a:p}},{j:"B v F S P k (l&#t;)",d:1,g:[7,11],f:{e:q,i:"k"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:-l},b:"H",a:1p,h:"F"},C:{c:{e:X},b:"K",a:p}},{j:"1N 1P 1M v S m E (l&#t;)",d:1,g:[7,11],f:{e:q,i:"o"},M:{c:{I:.O,u:-1k},a:p,b:"z"},s:{c:{u:-1k,y:l},b:"w",a:G,h:"A"},C:{c:{u:0,e:X},b:"z",a:p}},{j:"1N 1P 1M v S m r (l&#t;)",d:1,g:[7,11],f:{e:q,i:"D"},M:{c:{I:.O,u:-1k},a:p,b:"z"},s:{c:{u:1k,y:-l},b:"w",a:G,h:"A"},C:{c:{u:0,e:X},b:"z",a:p}},{j:"1c 1t m E (x&#t;)",d:1,g:1,f:{e:q,i:"o"},s:{c:{y:x},b:"w",a:1a,h:"A"}},{j:"1c 1t m r (x&#t;)",d:1,g:1,f:{e:q,i:"o"},s:{c:{y:-x},b:"w",a:1a,h:"A"}},{j:"1c 1t m L (x&#t;)",d:1,g:1,f:{e:q,i:"o"},s:{c:{u:-x},b:"w",a:1a,h:"F"}},{j:"1c 1t m J (x&#t;)",d:1,g:1,f:{e:q,i:"o"},s:{c:{u:x},b:"w",a:1a,h:"F"}},{j:"B v 17 1t m E (x&#t;)",d:1,g:1,f:{e:q,i:"k"},s:{c:{I:.8,1r:7,u:10,y:1w},b:"1e",a:1x,h:"A"},C:{c:{1r:0,u:0,y:x},a:1x,b:"1e"}},{j:"B v 17 1t m r (x&#t;)",d:1,g:1,f:{e:q,i:"k"},s:{c:{I:.8,1r:-7,u:10,y:-1w},b:"1e",a:1x,h:"A"},C:{c:{1r:0,u:0,y:-x},a:1x,b:"1e"}},{j:"B v 17 1n m E (x&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"o"},M:{c:{I:.O},a:1l,b:"18"},s:{c:{y:x},b:"H",a:G,h:"A"},C:{a:1g,b:"H"}},{j:"B v 17 1n m r (x&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"D"},M:{c:{I:.O},a:1l,b:"18"},s:{c:{y:-x},b:"H",a:G,h:"A"},C:{a:1g,b:"H"}},{j:"B v 17 1n m L (x&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"1j-o"},M:{c:{I:.O},a:1l,b:"18"},s:{c:{u:-x},b:"H",a:G,h:"F"},C:{a:1g,b:"H"}},{j:"B v 17 1n m J (x&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"1j-D"},M:{c:{I:.O},a:1l,b:"18"},s:{c:{u:x},b:"H",a:G,h:"F"},C:{a:1g,b:"H"}},{j:"B v A 17 1n k (x&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"k"},M:{c:{I:.1i,u:-15},a:1o,b:"18"},s:{c:{y:q,u:15},b:"H",a:1o,h:"A"},C:{c:{y:x,u:0},a:1o,b:"H"}},{j:"B v F 17 1n k (x&#t;)",d:[2,4],g:[4,7],f:{e:q,i:"k"},M:{c:{I:.1i,y:15},a:1o,b:"18"},s:{c:{u:q,y:-15},b:"H",a:1o,h:"F"},C:{c:{u:x,y:0},a:1o,b:"H"}},{j:"1c d m E (x&#t;)",d:[5,9],g:1,f:{e:q,i:"o"},s:{c:{y:x},b:"w",a:1a,h:"A"}},{j:"1c d m r (x&#t;)",d:[5,9],g:1,f:{e:q,i:"o"},s:{c:{y:-x},b:"w",a:1a,h:"A"}},{j:"1B 17 d k (x&#t;)",d:[5,9],g:1,f:{e:q,i:"k"},s:{c:{y:x},b:"w",a:1a,h:"A"}},{j:"B v 17 d m E (x&#t;)",d:[5,9],g:1,f:{e:q,i:"o"},M:{c:{I:.O,u:3},a:p,b:"K"},s:{c:{y:22,u:0},b:"H",a:G,h:"A"},C:{c:{e:X,y:x},b:"K",a:p}},{j:"B v 17 d m r (x&#t;)",d:[5,9],g:1,f:{e:q,i:"D"},M:{c:{I:.O,u:3},a:p,b:"K"},s:{c:{y:-x,u:0},b:"H",a:G,h:"A"},C:{c:{e:X},b:"K",a:p}},{j:"B v 17 d m L (x&#t;)",d:[5,9],g:1,f:{e:q,i:"o"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:-x},b:"H",a:G,h:"F"},C:{c:{e:X},b:"K",a:p}},{j:"B v 17 d m J (x&#t;)",d:[5,9],g:1,f:{e:q,i:"D"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:x},b:"H",a:G,h:"F"},C:{c:{e:X},b:"K",a:p}},{j:"B v A 17 d k (x&#t;)",d:[5,9],g:1,f:{e:q,i:"k"},M:{c:{I:.O,u:3},a:p,b:"K"},s:{c:{y:x,u:0},b:"H",a:G,h:"A"},C:{c:{e:X},b:"K",a:p}},{j:"B v F 17 d k (x&#t;)",d:[5,9],g:1,f:{e:q,i:"k"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:-x},b:"H",a:G,h:"F"},C:{c:{e:X},b:"K",a:p}},{j:"B v A 17 1K d m E (x&#t;)",d:[7,11],g:1,f:{e:q,i:"o"},s:{c:{I:.O,u:5,y:1w},b:"18",a:G,h:"A"},C:{c:{u:0,y:x},b:"18",a:G}},{j:"B v A 17 1K d m r (x&#t;)",d:[7,11],g:1,f:{e:q,i:"D"},s:{c:{I:.O,u:5,y:-1w},b:"18",a:G,h:"A"},C:{c:{u:0,y:-x},b:"18",a:G}},{j:"1c P m L (x&#t;)",d:1,g:[5,9],f:{e:q,i:"o"},s:{c:{u:-x},b:"w",a:G,h:"F"}},{j:"1c P m J (x&#t;)",d:1,g:[5,9],f:{e:q,i:"D"},s:{c:{u:x},b:"w",a:G,h:"F"}},{j:"1C 17 P k (x&#t;)",d:1,g:[5,9],f:{e:q,i:"k"},s:{c:{u:-x},b:"w",a:G,h:"F"}},{j:"B v 17 P m L (x&#t;)",d:1,g:[7,11],f:{e:q,i:"o"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:-x},b:"H",a:G,h:"F"},C:{c:{e:X},b:"K",a:p}},{j:"B v 17 P m J (x&#t;)",d:1,g:[7,11],f:{e:q,i:"D"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:x},b:"H",a:G,h:"F"},C:{c:{e:X},b:"K",a:p}},{j:"B v 17 P m E (x&#t;)",d:1,g:[7,11],f:{e:q,i:"o"},M:{c:{I:.O},a:p,b:"K"},s:{c:{y:x},b:"H",a:G,h:"A"},C:{c:{e:X},b:"K",a:p}},{j:"B v 17 P m r (x&#t;)",d:1,g:[7,11],f:{e:q,i:"D"},M:{c:{I:.O},a:p,b:"K"},s:{c:{y:-x},b:"H",a:G,h:"A"},C:{c:{e:X},b:"K",a:p}},{j:"B v A 17 P k (x&#t;)",d:1,g:[7,11],f:{e:q,i:"k"},M:{c:{I:.O},a:p,b:"K"},s:{c:{y:x},b:"H",a:G,h:"A"},C:{c:{e:X},b:"K",a:p}},{j:"B v F 17 P k (x&#t;)",d:1,g:[7,11],f:{e:q,i:"k"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:-x},b:"H",a:G,h:"F"},C:{c:{e:X},b:"K",a:p}},{j:"B v F 17 1K P m E (x&#t;)",d:1,g:[7,11],f:{e:q,i:"o"},s:{c:{I:.O,u:1w,y:-5},b:"18",a:G,h:"F"},C:{c:{u:x,y:0},b:"18",a:G}},{j:"B v F 17 1K P m r (x&#t;)",d:1,g:[7,11],f:{e:q,i:"D"},s:{c:{I:.O,u:-1w,y:-5},b:"18",a:G,h:"F"},C:{c:{u:-x,y:0},b:"18",a:G}},{j:"1b 1t m E (l&#t;, T U)",d:1,g:1,f:{e:q,i:"o",U:"T"},s:{c:{y:l},b:"w",a:1a,h:"A"}},{j:"1b 1t m r (l&#t;, T U)",d:1,g:1,f:{e:q,i:"o",U:"T"},s:{c:{y:-l},b:"w",a:1a,h:"A"}},{j:"1b 1t m L (l&#t;, T U)",d:1,g:1,f:{e:q,i:"o",U:"T"},s:{c:{u:-l},b:"w",a:1a,h:"F"}},{j:"1b 1t m J (l&#t;, T U)",d:1,g:1,f:{e:q,i:"o",U:"T"},s:{c:{u:l},b:"w",a:1a,h:"F"}},{j:"B v S 1n m E (l&#t;, T U)",d:[2,4],g:[4,7],f:{e:q,i:"o",U:"T"},M:{c:{I:.O},a:1l,b:"18"},s:{c:{y:l},b:"H",a:G,h:"A"},C:{a:1g,b:"H"}},{j:"B v S 1n m r (l&#t;, T U)",d:[2,4],g:[4,7],f:{e:q,i:"D",U:"T"},M:{c:{I:.O},a:1l,b:"18"},s:{c:{y:-l},b:"H",a:G,h:"A"},C:{a:1g,b:"H"}},{j:"B v S 1n m L (l&#t;, T U)",d:[2,4],g:[4,7],f:{e:q,i:"1j-o",U:"T"},M:{c:{I:.O},a:1l,b:"18"},s:{c:{u:-l},b:"H",a:G,h:"F"},C:{a:1g,b:"H"}},{j:"B v S 1n m J (l&#t;, T U)",d:[2,4],g:[4,7],f:{e:q,i:"1j-D",U:"T"},M:{c:{I:.O},a:1l,b:"18"},s:{c:{u:l},b:"H",a:G,h:"F"},C:{a:1g,b:"H"}},{j:"B v A S 1n k (l&#t;, T U)",d:[2,4],g:[4,7],f:{e:q,i:"k",U:"T"},M:{c:{I:.1i},a:1o,b:"18"},s:{c:{y:l},b:"H",a:1o,h:"A"},C:{a:1o,b:"H"}},{j:"B v F S 1n k (l&#t;, T U)",d:[2,4],g:[4,7],f:{e:q,i:"k",U:"T"},M:{c:{I:.1i},a:1o,b:"18"},s:{c:{u:l},b:"H",a:1o,h:"F"},C:{a:1o,b:"H"}},{j:"B v S d m E (l&#t;, T U)",d:[5,9],g:1,f:{e:1i,i:"o",U:"T"},M:{c:{I:.O,u:3},a:p,b:"K"},s:{c:{y:l,u:-3},b:"w",a:1p,h:"A"},C:{c:{e:X,u:0},b:"z",a:1q}},{j:"B v S d m r (l&#t;, T U)",d:[5,9],g:1,f:{e:1i,i:"D",U:"T"},M:{c:{I:.O,u:3},a:p,b:"K"},s:{c:{y:-l,u:-3},b:"w",a:1p,h:"A"},C:{c:{e:X,u:0},b:"z",a:1q}},{j:"B v S d m L (l&#t;, T U)",d:[5,9],g:1,f:{e:1i,i:"o",U:"T"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:-l},b:"H",a:G,h:"F"},C:{c:{e:X},b:"z",a:1q}},{j:"B v S d m J (l&#t;, T U)",d:[5,9],g:1,f:{e:1i,i:"D",U:"T"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:l},b:"H",a:G,h:"F"},C:{c:{e:X},b:"z",a:1q}},{j:"B v A S d k (l&#t;, T U)",d:[5,9],g:1,f:{e:1i,i:"k",U:"T"},M:{c:{I:.O,u:3},a:p,b:"K"},s:{c:{y:l,u:-3},b:"w",a:1p,h:"A"},C:{c:{e:X,u:0},b:"z",a:1q}},{j:"B v F S d k (l&#t;, T U)",d:[5,9],g:1,f:{e:1i,i:"k",U:"T"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:-l},b:"H",a:G,h:"F"},C:{c:{e:X},b:"z",a:1q}},{j:"B v S P m L (l&#t;, T U)",d:1,g:[7,11],f:{e:1i,i:"o",U:"T"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:-l},b:"w",a:1p,h:"F"},C:{c:{e:X},b:"z",a:1q}},{j:"B v S P m J (l&#t;, T U)",d:1,g:[7,11],f:{e:1i,i:"D",U:"T"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:l},b:"w",a:1p,h:"F"},C:{c:{e:X},b:"z",a:1q}},{j:"B v S P m E (l&#t;, T U)",d:1,g:[7,11],f:{e:1i,i:"o",U:"T"},M:{c:{I:.O},a:p,b:"K"},s:{c:{y:l},b:"H",a:G,h:"A"},C:{c:{e:X},b:"z",a:1q}},{j:"B v S P m r (l&#t;, T U)",d:1,g:[7,11],f:{e:1i,i:"D",U:"T"},M:{c:{I:.O},a:p,b:"K"},s:{c:{y:-l},b:"H",a:G,h:"A"},C:{c:{e:X},b:"z",a:1q}},{j:"B v A S P k (l&#t;, T U)",d:1,g:[7,11],f:{e:1i,i:"k",U:"T"},M:{c:{I:.O},a:p,b:"K"},s:{c:{y:l},b:"H",a:G,h:"A"},C:{c:{e:X},b:"z",a:1q}},{j:"B v F S P k (l&#t;, T U)",d:1,g:[7,11],f:{e:1i,i:"k",U:"T"},M:{c:{I:.O},a:p,b:"K"},s:{c:{u:-l},b:"w",a:1p,h:"F"},C:{c:{e:X},b:"z",a:1q}}]}',62,132,'||||||||||duration|easing|transition|rows|delay|tile|cols|direction|sequence|name|random|180|to|type|forward|600|75|left|animation|176|rotateX|and|easeInOutQuart|90|rotateY|easeOutQuart|horizontal|Scaling|after|reverse|right|vertical|1e3|easeInOutBack|scale3d|top|easeOutBack|bottom|before|from|85|columns|mixed|tiles|spinning|large|depth|750|slide|200|sliding|Fading||||Sliding|fade|||turning|easeInOutQuint|55|1500|Spinning|Turning|100|easeInOutQuad|50|350|scale|65|col|30|450|500|cuboids|700|1200|400|rotate|35|cuboid|Carousel|Flying|45|800|Smooth|rotating|95|Horizontal|Vertical|Mirror|91|easeInQuart|1300|fading|mirror|540|drunk|out|scaling|Drunk|in|colums|150|2e3|directions|topright|bottomleft|topleft|sliging|linear|850|layerSliderTransitions|var|bottomright|87|t3d|diagonal||Crossfading|t2d'.split('|'))) diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/minicolors/jquery.minicolors.css b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/minicolors/jquery.minicolors.css new file mode 100644 index 0000000..bed6e1a --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/minicolors/jquery.minicolors.css @@ -0,0 +1,239 @@ +.minicolors { + position: relative; +} + +.minicolors-swatch { + position: absolute; + vertical-align: middle; + background: url(jquery.minicolors.png) -80px 0; + /*border: solid 1px #ccc;*/ + cursor: text; + padding: 0; + margin: 0; + display: inline-block; +} + +.minicolors-swatch-color { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + border-radius: 2px; +} + +.minicolors input[type=hidden] + .minicolors-swatch { + width: 21px; + height: 21px; + position: static; + cursor: pointer; +} + +/* Panel */ +.minicolors-panel { + position: absolute; + width: 173px; + height: 152px; + background: white; + border: solid 1px #CCC; + box-shadow: 0 0 20px rgba(0, 0, 0, .2); + z-index: 99999; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + display: none; +} + +.minicolors-panel.minicolors-visible { + display: block; +} + +/* Panel positioning */ +.minicolors-position-top .minicolors-panel { + top: -154px; +} + +.minicolors-position-right .minicolors-panel { + right: 0; +} + +.minicolors-position-bottom .minicolors-panel { + top: auto; +} + +.minicolors-position-left .minicolors-panel { + left: 0; +} + +.minicolors-with-opacity .minicolors-panel { + width: 194px; +} + +.minicolors .minicolors-grid { + position: absolute; + top: 1px; + left: 1px; + width: 150px; + height: 150px; + background: url(jquery.minicolors.png) -120px 0; + cursor: crosshair; +} + +.minicolors .minicolors-grid-inner { + position: absolute; + top: 0; + left: 0; + width: 150px; + height: 150px; + background: none; +} + +.minicolors-slider-saturation .minicolors-grid { + background-position: -420px 0; +} + +.minicolors-slider-saturation .minicolors-grid-inner { + background: url(jquery.minicolors.png) -270px 0; +} + +.minicolors-slider-brightness .minicolors-grid { + background-position: -570px 0; +} + +.minicolors-slider-brightness .minicolors-grid-inner { + background: black; +} + +.minicolors-slider-wheel .minicolors-grid { + background-position: -720px 0; +} + +.minicolors-slider, +.minicolors-opacity-slider { + position: absolute; + top: 1px; + left: 152px; + width: 20px; + height: 150px; + background: white url(jquery.minicolors.png) 0 0; + cursor: row-resize; +} + +.minicolors-slider-saturation .minicolors-slider { + background-position: -60px 0; +} + +.minicolors-slider-brightness .minicolors-slider { + background-position: -20px 0; +} + +.minicolors-slider-wheel .minicolors-slider { + background-position: -20px 0; +} + +.minicolors-opacity-slider { + left: 173px; + background-position: -40px 0; + display: none; +} + +.minicolors-with-opacity .minicolors-opacity-slider { + display: block; +} + +/* Pickers */ +.minicolors-grid .minicolors-picker { + position: absolute; + top: 70px; + left: 70px; + width: 12px; + height: 12px; + border: solid 1px black; + border-radius: 10px; + margin-top: -6px; + margin-left: -6px; + background: none; +} + +.minicolors-grid .minicolors-picker > div { + position: absolute; + top: 0; + left: 0; + width: 8px; + height: 8px; + border-radius: 8px; + border: solid 2px white; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} + +.minicolors-picker { + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 2px; + background: white; + border: solid 1px black; + margin-top: -2px; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} + +/* Inline controls */ +.minicolors-inline { + display: inline-block; +} + +.minicolors-inline .minicolors-input { + display: none !important; +} + +.minicolors-inline .minicolors-panel { + position: relative; + top: auto; + left: auto; + box-shadow: none; + z-index: auto; + display: inline-block; +} + +/* Default theme */ +.minicolors-theme-default .minicolors-swatch { + top: 2px; + left: 2px; + width: 21px; + height: 21px; +} + +.minicolors-theme-default.minicolors { + width: auto; + display: inline-block; +} +.minicolors-theme-default .minicolors-input { + display: inline-block; + padding-left: 26px; +} + + +/* Bootstrap theme */ +.minicolors-theme-bootstrap .minicolors-swatch { + top: 3px; + left: 3px; + width: 28px; + height: 28px; + border-radius: 3px; +} +.minicolors-theme-bootstrap.minicolors-position-right .minicolors-swatch { + left: auto; + right: 3px; +} +.minicolors-theme-bootstrap .minicolors-input { + padding-left: 44px; +} +.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input { + padding-right: 44px; + padding-left: 12px; +} diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/minicolors/jquery.minicolors.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/minicolors/jquery.minicolors.js new file mode 100644 index 0000000..b8c0b04 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/minicolors/jquery.minicolors.js @@ -0,0 +1,874 @@ +/* + * jQuery MiniColors: A tiny color picker built on jQuery + * + * Copyright Cory LaViska for A Beautiful Site, LLC. (http://www.abeautifulsite.net/) + * + * Licensed under the MIT license: http://opensource.org/licenses/MIT + * + */ +if(jQuery) (function($) { + + // Defaults + $.minicolors = { + defaults: { + animationSpeed: 50, + animationEasing: 'swing', + change: null, + changeDelay: 0, + control: 'hue', + defaultValue: '', + hide: null, + hideSpeed: 100, + inline: false, + letterCase: 'lowercase', + opacity: false, + position: 'bottom left', + show: null, + showSpeed: 100, + theme: 'default' + } + }; + + // Public methods + $.extend($.fn, { + minicolors: function(method, data) { + + switch(method) { + + // Destroy the control + case 'destroy': + $(this).each( function() { + destroy($(this)); + }); + return $(this); + + // Hide the color picker + case 'hide': + hide(); + return $(this); + + // Get/set opacity + case 'opacity': + // Getter + if( data === undefined ) { + // Getter + return $(this).attr('data-opacity'); + } else { + // Setter + $(this).each( function() { + updateFromInput($(this).attr('data-opacity', data)); + }); + } + return $(this); + + // Get an RGB(A) object based on the current color/opacity + case 'rgbObject': + return rgbObject($(this), method === 'rgbaObject'); + + // Get an RGB(A) string based on the current color/opacity + case 'rgbString': + case 'rgbaString': + return rgbString($(this), method === 'rgbaString'); + + // Get/set settings on the fly + case 'settings': + if( data === undefined ) { + return $(this).data('minicolors-settings'); + } else { + // Setter + $(this).each( function() { + var settings = $(this).data('minicolors-settings') || {}; + destroy($(this)); + $(this).minicolors($.extend(true, settings, data)); + }); + } + return $(this); + + // Show the color picker + case 'show': + show( $(this).eq(0) ); + return $(this); + + // Get/set the hex color value + case 'value': + if( data === undefined ) { + // Getter + return $(this).val(); + } else { + // Setter + $(this).each( function() { + updateFromInput($(this).val(data)); + }); + } + return $(this); + + // Initializes the control + default: + if( method !== 'create' ) data = method; + $(this).each( function() { + init($(this), data); + }); + return $(this); + + } + + } + }); + + // Initialize input elements + function init(input, settings) { + + var minicolors = $('
              '), + defaults = $.minicolors.defaults; + + // Do nothing if already initialized + if( input.data('minicolors-initialized') ) return; + + // Handle settings + settings = $.extend(true, {}, defaults, settings); + + // The wrapper + minicolors + .addClass('minicolors-theme-' + settings.theme) + .toggleClass('minicolors-with-opacity', settings.opacity); + + // Custom positioning + if( settings.position !== undefined ) { + $.each(settings.position.split(' '), function() { + minicolors.addClass('minicolors-position-' + this); + }); + } + + // The input + input + .addClass('minicolors-input') + .data('minicolors-initialized', true) + .data('minicolors-settings', settings) + .prop('size', 7) + .wrap(minicolors) + .after( + '
              ' + + '
              ' + + '
              ' + + '
              ' + + '
              ' + + '
              ' + + '
              ' + + '
              ' + + '
              ' + + '
              ' + + '
              ' + + '
              ' + ); + + // The swatch + if( !settings.inline ) { + input.after(''); + input.next('.minicolors-swatch').on('click', function(event) { + event.preventDefault(); + input.focus(); + }); + } + + // Prevent text selection in IE + input.parent().find('.minicolors-panel').on('selectstart', function() { return false; }).end(); + + // Inline controls + if( settings.inline ) input.parent().addClass('minicolors-inline'); + + updateFromInput(input, true); + + + // Populate lastChange to prevent change event from firing initially + input.data('minicolors-lastChange', { + hex: input.val(), + opacity: input.attr('data-opacity') + }); + + } + + // Returns the input back to its original state + function destroy(input) { + + var minicolors = input.parent(); + + // Revert the input element + input + .removeData('minicolors-initialized') + .removeData('minicolors-settings') + .removeProp('size') + .removeClass('minicolors-input'); + + // Remove the wrap and destroy whatever remains + minicolors.before(input).remove(); + + } + + // Shows the specified dropdown panel + function show(input) { + + var minicolors = input.parent(), + panel = minicolors.find('.minicolors-panel'), + settings = input.data('minicolors-settings'); + + // Do nothing if uninitialized, disabled, inline, or already open + if( !input.data('minicolors-initialized') || + input.prop('disabled') || + minicolors.hasClass('minicolors-inline') || + minicolors.hasClass('minicolors-focus') + ) return; + + hide(); + + minicolors.addClass('minicolors-focus'); + panel + .stop(true, true) + .fadeIn(settings.showSpeed, function() { + if( settings.show ) settings.show.call(input.get(0)); + }); + + } + + // Hides all dropdown panels + function hide() { + + $('.minicolors-input').each( function() { + + var input = $(this), + settings = input.data('minicolors-settings'), + minicolors = input.parent(); + + // Don't hide inline controls + if( settings.inline ) return; + + minicolors.find('.minicolors-panel').fadeOut(settings.hideSpeed, function() { + if(minicolors.hasClass('minicolors-focus')) { + if( settings.hide ) settings.hide.call(input.get(0)); + } + minicolors.removeClass('minicolors-focus'); + }); + + }); + } + + // Moves the selected picker + function move(target, event, animate) { + + var input = target.parents('.minicolors').find('.minicolors-input'), + settings = input.data('minicolors-settings'), + picker = target.find('[class$=-picker]'), + offsetX = target.offset().left, + offsetY = target.offset().top, + x = Math.round(event.pageX - offsetX), + y = Math.round(event.pageY - offsetY), + duration = animate ? settings.animationSpeed : 0, + wx, wy, r, phi; + + + // Touch support + if( event.originalEvent.changedTouches ) { + x = event.originalEvent.changedTouches[0].pageX - offsetX; + y = event.originalEvent.changedTouches[0].pageY - offsetY; + } + + // Constrain picker to its container + if( x < 0 ) x = 0; + if( y < 0 ) y = 0; + if( x > target.width() ) x = target.width(); + if( y > target.height() ) y = target.height(); + + // Constrain color wheel values to the wheel + if( target.parent().is('.minicolors-slider-wheel') && picker.parent().is('.minicolors-grid') ) { + wx = 75 - x; + wy = 75 - y; + r = Math.sqrt(wx * wx + wy * wy); + phi = Math.atan2(wy, wx); + if( phi < 0 ) phi += Math.PI * 2; + if( r > 75 ) { + r = 75; + x = 75 - (75 * Math.cos(phi)); + y = 75 - (75 * Math.sin(phi)); + } + x = Math.round(x); + y = Math.round(y); + } + + // Move the picker + if( target.is('.minicolors-grid') ) { + picker + .stop(true) + .animate({ + top: y + 'px', + left: x + 'px' + }, duration, settings.animationEasing, function() { + updateFromControl(input, target); + }); + } else { + picker + .stop(true) + .animate({ + top: y + 'px' + }, duration, settings.animationEasing, function() { + updateFromControl(input, target); + }); + } + + } + + // Sets the input based on the color picker values + function updateFromControl(input, target) { + + function getCoords(picker, container) { + + var left, top; + if( !picker.length || !container ) return null; + left = picker.offset().left; + top = picker.offset().top; + + return { + x: left - container.offset().left + (picker.outerWidth() / 2), + y: top - container.offset().top + (picker.outerHeight() / 2) + }; + + } + + var hue, saturation, brightness, x, y, r, phi, + + hex = input.val(), + opacity = input.attr('data-opacity'), + + // Helpful references + minicolors = input.parent(), + settings = input.data('minicolors-settings'), + swatch = minicolors.find('.minicolors-swatch'), + + // Panel objects + grid = minicolors.find('.minicolors-grid'), + slider = minicolors.find('.minicolors-slider'), + opacitySlider = minicolors.find('.minicolors-opacity-slider'), + + // Picker objects + gridPicker = grid.find('[class$=-picker]'), + sliderPicker = slider.find('[class$=-picker]'), + opacityPicker = opacitySlider.find('[class$=-picker]'), + + // Picker positions + gridPos = getCoords(gridPicker, grid), + sliderPos = getCoords(sliderPicker, slider), + opacityPos = getCoords(opacityPicker, opacitySlider); + + // Handle colors + if( target.is('.minicolors-grid, .minicolors-slider, .minicolors-opacity-slider') ) { + + // Determine HSB values + switch(settings.control) { + + case 'wheel': + // Calculate hue, saturation, and brightness + x = (grid.width() / 2) - gridPos.x; + y = (grid.height() / 2) - gridPos.y; + r = Math.sqrt(x * x + y * y); + phi = Math.atan2(y, x); + if( phi < 0 ) phi += Math.PI * 2; + if( r > 75 ) { + r = 75; + gridPos.x = 69 - (75 * Math.cos(phi)); + gridPos.y = 69 - (75 * Math.sin(phi)); + } + saturation = keepWithin(r / 0.75, 0, 100); + hue = keepWithin(phi * 180 / Math.PI, 0, 360); + brightness = keepWithin(100 - Math.floor(sliderPos.y * (100 / slider.height())), 0, 100); + hex = hsb2hex({ + h: hue, + s: saturation, + b: brightness + }); + + // Update UI + slider.css('backgroundColor', hsb2hex({ h: hue, s: saturation, b: 100 })); + break; + + case 'saturation': + // Calculate hue, saturation, and brightness + hue = keepWithin(parseInt(gridPos.x * (360 / grid.width()), 10), 0, 360); + saturation = keepWithin(100 - Math.floor(sliderPos.y * (100 / slider.height())), 0, 100); + brightness = keepWithin(100 - Math.floor(gridPos.y * (100 / grid.height())), 0, 100); + hex = hsb2hex({ + h: hue, + s: saturation, + b: brightness + }); + + // Update UI + slider.css('backgroundColor', hsb2hex({ h: hue, s: 100, b: brightness })); + minicolors.find('.minicolors-grid-inner').css('opacity', saturation / 100); + break; + + case 'brightness': + // Calculate hue, saturation, and brightness + hue = keepWithin(parseInt(gridPos.x * (360 / grid.width()), 10), 0, 360); + saturation = keepWithin(100 - Math.floor(gridPos.y * (100 / grid.height())), 0, 100); + brightness = keepWithin(100 - Math.floor(sliderPos.y * (100 / slider.height())), 0, 100); + hex = hsb2hex({ + h: hue, + s: saturation, + b: brightness + }); + + // Update UI + slider.css('backgroundColor', hsb2hex({ h: hue, s: saturation, b: 100 })); + minicolors.find('.minicolors-grid-inner').css('opacity', 1 - (brightness / 100)); + break; + + default: + // Calculate hue, saturation, and brightness + hue = keepWithin(360 - parseInt(sliderPos.y * (360 / slider.height()), 10), 0, 360); + saturation = keepWithin(Math.floor(gridPos.x * (100 / grid.width())), 0, 100); + brightness = keepWithin(100 - Math.floor(gridPos.y * (100 / grid.height())), 0, 100); + hex = hsb2hex({ + h: hue, + s: saturation, + b: brightness + }); + + // Update UI + grid.css('backgroundColor', hsb2hex({ h: hue, s: 100, b: 100 })); + break; + + } + + // Adjust case + var rgb = hex2rgb(hex); + if(input.minicolors('rgbObject').a < 1 && rgb) { + input.val('rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(opacity) + ')'); + } else { + input.val( convertCase(hex, settings.letterCase) ); + } + + } + + + // Handle opacity + if( target.is('.minicolors-opacity-slider') ) { + if( settings.opacity ) { + opacity = parseFloat(1 - (opacityPos.y / opacitySlider.height())).toFixed(2); + } else { + opacity = 1; + } + if( settings.opacity ) input.attr('data-opacity', opacity); + } + + // Set swatch color + swatch.find('SPAN').css({ + backgroundColor: hex, + opacity: opacity + }); + + // Handle change event + doChange(input, hex, opacity); + + } + + // Sets the color picker values from the input + function updateFromInput(input, preserveInputValue) { + + var hex, hexStr, + hsb, + rgbaArr, + opacity, alphaVal, + x, y, r, phi, + + // Helpful references + minicolors = input.parent(), + settings = input.data('minicolors-settings'), + swatch = minicolors.find('.minicolors-swatch'), + + // Panel objects + grid = minicolors.find('.minicolors-grid'), + slider = minicolors.find('.minicolors-slider'), + opacitySlider = minicolors.find('.minicolors-opacity-slider'), + + // Picker objects + gridPicker = grid.find('[class$=-picker]'), + sliderPicker = slider.find('[class$=-picker]'), + opacityPicker = opacitySlider.find('[class$=-picker]'); + + // RGBA value if any + if(input.val().indexOf('rgb') != -1) { + rgbaArr = input.val().split("(")[1].split(")")[0].split(","); + hexStr = '#' + ("0" + parseInt(rgbaArr[0]).toString(16)).slice(-2); + hexStr += '#' + ("0" + parseInt(rgbaArr[1]).toString(16)).slice(-2); + hexStr += '#' + ("0" + parseInt(rgbaArr[2]).toString(16)).slice(-2); + alphaVal = parseFloat(rgbaArr[3]); + + } else { + if(input.val() == 'transparent') { + hexStr = '#ffffff'; + alphaVal = 0; + } else { + hexStr = input.val(); + alphaVal = input.attr('data-opacity'); + } + } + + // Determine hex/HSB values + hex = convertCase(parseHex(hexStr, true), settings.letterCase); + + if( !hex ){ + hex = convertCase(parseHex(settings.defaultValue, true), settings.letterCase); + } + hsb = hex2hsb(hex); + + // Update input value + if( !preserveInputValue ) input.val(hex); + + // Determine opacity value + if( settings.opacity ) { + // Get from data-opacity attribute and keep within 0-1 range + opacity = alphaVal === '' ? 1 : keepWithin(parseFloat(alphaVal).toFixed(2), 0, 1); + if( isNaN(opacity) ) opacity = 1; + input.attr('data-opacity', opacity); + swatch.find('SPAN').css('opacity', opacity); + + // Set opacity picker position + y = keepWithin(opacitySlider.height() - (opacitySlider.height() * opacity), 0, opacitySlider.height()); + opacityPicker.css('top', y + 'px'); + } + + // Update swatch + swatch.find('SPAN').css('backgroundColor', hex); + + // Determine picker locations + switch(settings.control) { + + case 'wheel': + // Set grid position + r = keepWithin(Math.ceil(hsb.s * 0.75), 0, grid.height() / 2); + phi = hsb.h * Math.PI / 180; + x = keepWithin(75 - Math.cos(phi) * r, 0, grid.width()); + y = keepWithin(75 - Math.sin(phi) * r, 0, grid.height()); + gridPicker.css({ + top: y + 'px', + left: x + 'px' + }); + + // Set slider position + y = 150 - (hsb.b / (100 / grid.height())); + if( hex === '' ) y = 0; + sliderPicker.css('top', y + 'px'); + + // Update panel color + slider.css('backgroundColor', hsb2hex({ h: hsb.h, s: hsb.s, b: 100 })); + break; + + case 'saturation': + // Set grid position + x = keepWithin((5 * hsb.h) / 12, 0, 150); + y = keepWithin(grid.height() - Math.ceil(hsb.b / (100 / grid.height())), 0, grid.height()); + gridPicker.css({ + top: y + 'px', + left: x + 'px' + }); + + // Set slider position + y = keepWithin(slider.height() - (hsb.s * (slider.height() / 100)), 0, slider.height()); + sliderPicker.css('top', y + 'px'); + + // Update UI + slider.css('backgroundColor', hsb2hex({ h: hsb.h, s: 100, b: hsb.b })); + minicolors.find('.minicolors-grid-inner').css('opacity', hsb.s / 100); + + break; + + case 'brightness': + // Set grid position + x = keepWithin((5 * hsb.h) / 12, 0, 150); + y = keepWithin(grid.height() - Math.ceil(hsb.s / (100 / grid.height())), 0, grid.height()); + gridPicker.css({ + top: y + 'px', + left: x + 'px' + }); + + // Set slider position + y = keepWithin(slider.height() - (hsb.b * (slider.height() / 100)), 0, slider.height()); + sliderPicker.css('top', y + 'px'); + + // Update UI + slider.css('backgroundColor', hsb2hex({ h: hsb.h, s: hsb.s, b: 100 })); + minicolors.find('.minicolors-grid-inner').css('opacity', 1 - (hsb.b / 100)); + break; + + default: + // Set grid position + x = keepWithin(Math.ceil(hsb.s / (100 / grid.width())), 0, grid.width()); + y = keepWithin(grid.height() - Math.ceil(hsb.b / (100 / grid.height())), 0, grid.height()); + gridPicker.css({ + top: y + 'px', + left: x + 'px' + }); + + // Set slider position + y = keepWithin(slider.height() - (hsb.h / (360 / slider.height())), 0, slider.height()); + sliderPicker.css('top', y + 'px'); + + // Update panel color + grid.css('backgroundColor', hsb2hex({ h: hsb.h, s: 100, b: 100 })); + break; + + } + + } + + // Runs the change and changeDelay callbacks + function doChange(input, hex, opacity) { + + var settings = input.data('minicolors-settings'), + lastChange = input.data('minicolors-lastChange'); + + // Only run if it actually changed + if( lastChange.hex !== hex || lastChange.opacity !== opacity ) { + + // Remember last-changed value + input.data('minicolors-lastChange', { + hex: hex, + opacity: opacity + }); + + // Fire change event + if( settings.change ) { + if( settings.changeDelay ) { + // Call after a delay + clearTimeout(input.data('minicolors-changeTimeout')); + input.data('minicolors-changeTimeout', setTimeout( function() { + settings.change.call(input.get(0), hex, opacity); + }, settings.changeDelay)); + } else { + // Call immediately + settings.change.call(input.get(0), hex, opacity); + } + } + input.trigger('change').trigger('input'); + } + + } + + // Generates an RGB(A) object based on the input's value + function rgbObject(input) { + var hex = parseHex($(input).val(), true), + rgb = hex2rgb(hex), + opacity = $(input).attr('data-opacity'); + if( !rgb ) return null; + if( opacity !== undefined ) $.extend(rgb, { a: parseFloat(opacity) }); + return rgb; + } + + // Genearates an RGB(A) string based on the input's value + function rgbString(input, alpha) { + var hex = parseHex($(input).val(), true), + rgb = hex2rgb(hex), + opacity = $(input).attr('data-opacity'); + if( !rgb ) return null; + if( opacity === undefined ) opacity = 1; + if( alpha ) { + return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(opacity) + ')'; + } else { + return 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')'; + } + } + + // Converts to the letter case specified in settings + function convertCase(string, letterCase) { + return letterCase === 'uppercase' ? string.toUpperCase() : string.toLowerCase(); + } + + // Parses a string and returns a valid hex string when possible + function parseHex(string, expand) { + string = string.replace(/[^A-F0-9]/ig, ''); + if( string.length !== 3 && string.length !== 6 ) return ''; + if( string.length === 3 && expand ) { + string = string[0] + string[0] + string[1] + string[1] + string[2] + string[2]; + } + return '#' + string; + } + + // Keeps value within min and max + function keepWithin(value, min, max) { + if( value < min ) value = min; + if( value > max ) value = max; + return value; + } + + // Converts an HSB object to an RGB object + function hsb2rgb(hsb) { + var rgb = {}; + var h = Math.round(hsb.h); + var s = Math.round(hsb.s * 255 / 100); + var v = Math.round(hsb.b * 255 / 100); + if(s === 0) { + rgb.r = rgb.g = rgb.b = v; + } else { + var t1 = v; + var t2 = (255 - s) * v / 255; + var t3 = (t1 - t2) * (h % 60) / 60; + if( h === 360 ) h = 0; + if( h < 60 ) { rgb.r = t1; rgb.b = t2; rgb.g = t2 + t3; } + else if( h < 120 ) {rgb.g = t1; rgb.b = t2; rgb.r = t1 - t3; } + else if( h < 180 ) {rgb.g = t1; rgb.r = t2; rgb.b = t2 + t3; } + else if( h < 240 ) {rgb.b = t1; rgb.r = t2; rgb.g = t1 - t3; } + else if( h < 300 ) {rgb.b = t1; rgb.g = t2; rgb.r = t2 + t3; } + else if( h < 360 ) {rgb.r = t1; rgb.g = t2; rgb.b = t1 - t3; } + else { rgb.r = 0; rgb.g = 0; rgb.b = 0; } + } + return { + r: Math.round(rgb.r), + g: Math.round(rgb.g), + b: Math.round(rgb.b) + }; + } + + // Converts an RGB object to a hex string + function rgb2hex(rgb) { + var hex = [ + rgb.r.toString(16), + rgb.g.toString(16), + rgb.b.toString(16) + ]; + $.each(hex, function(nr, val) { + if (val.length === 1) hex[nr] = '0' + val; + }); + return '#' + hex.join(''); + } + + // Converts an HSB object to a hex string + function hsb2hex(hsb) { + return rgb2hex(hsb2rgb(hsb)); + } + + // Converts a hex string to an HSB object + function hex2hsb(hex) { + var hsb = rgb2hsb(hex2rgb(hex)); + if( hsb.s === 0 ) hsb.h = 360; + return hsb; + } + + // Converts an RGB object to an HSB object + function rgb2hsb(rgb) { + var hsb = { h: 0, s: 0, b: 0 }; + var min = Math.min(rgb.r, rgb.g, rgb.b); + var max = Math.max(rgb.r, rgb.g, rgb.b); + var delta = max - min; + hsb.b = max; + hsb.s = max !== 0 ? 255 * delta / max : 0; + if( hsb.s !== 0 ) { + if( rgb.r === max ) { + hsb.h = (rgb.g - rgb.b) / delta; + } else if( rgb.g === max ) { + hsb.h = 2 + (rgb.b - rgb.r) / delta; + } else { + hsb.h = 4 + (rgb.r - rgb.g) / delta; + } + } else { + hsb.h = -1; + } + hsb.h *= 60; + if( hsb.h < 0 ) { + hsb.h += 360; + } + hsb.s *= 100/255; + hsb.b *= 100/255; + return hsb; + } + + // Converts a hex string to an RGB object + function hex2rgb(hex) { + hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16); + return { + r: hex >> 16, + g: (hex & 0x00FF00) >> 8, + b: (hex & 0x0000FF) + }; + } + + // Handle events + $(document) + // Hide on clicks outside of the control + .on('mousedown.minicolors touchstart.minicolors', function(event) { + if( !$(event.target).parents().add(event.target).hasClass('minicolors') ) { + hide(); + } + }) + // Start moving + .on('mousedown.minicolors touchstart.minicolors', '.minicolors-grid, .minicolors-slider, .minicolors-opacity-slider', function(event) { + var target = $(this); + event.preventDefault(); + $(document).data('minicolors-target', target); + move(target, event, true); + }) + // Move pickers + .on('mousemove.minicolors touchmove.minicolors', function(event) { + var target = $(document).data('minicolors-target'); + if( target ) move(target, event); + }) + // Stop moving + .on('mouseup.minicolors touchend.minicolors', function() { + $(this).removeData('minicolors-target'); + }) + // Show panel when swatch is clicked + .on('mousedown.minicolors touchstart.minicolors', '.minicolors-swatch', function(event) { + var input = $(this).parent().find('.minicolors-input'); + event.preventDefault(); + show(input); + }) + // Show on focus + .on('focus.minicolors', '.minicolors-input', function() { + var input = $(this); + if( !input.data('minicolors-initialized') ) return; + show(input); + }) + // Fix hex on blur + .on('blur.minicolors', '.minicolors-input', function() { + var input = $(this), + settings = input.data('minicolors-settings'); + if( !input.data('minicolors-initialized') ) return; + + // Parse Hex + // input.val(parseHex(input.val(), true)); + + // Is it blank? + if( input.val() === '' ) input.val(parseHex(settings.defaultValue, true)); + + // Adjust case + // input.val( convertCase(input.val(), settings.letterCase) ); + + }) + // Handle keypresses + .on('keydown.minicolors', '.minicolors-input', function(event) { + var input = $(this); + if( !input.data('minicolors-initialized') ) return; + switch(event.keyCode) { + case 9: // tab + hide(); + break; + case 13: // enter + case 27: // esc + hide(); + input.blur(); + break; + } + }) + // Update on keyup + .on('keyup.minicolors', '.minicolors-input', function() { + var input = $(this); + if( !input.data('minicolors-initialized') ) return; + updateFromInput(input, true); + }) + // Update on paste + .on('paste.minicolors', '.minicolors-input', function() { + var input = $(this); + if( !input.data('minicolors-initialized') ) return; + setTimeout( function() { + updateFromInput(input, true); + }, 1); + }); + +})(jQuery); diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/minicolors/jquery.minicolors.min.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/minicolors/jquery.minicolors.min.js new file mode 100644 index 0000000..520f8d6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/minicolors/jquery.minicolors.min.js @@ -0,0 +1,8 @@ +/* + * jQuery MiniColors: A tiny color picker built on jQuery + * + * Copyright Cory LaViska for A Beautiful Site, LLC. (http://www.abeautifulsite.net/) + * + * Licensed under the MIT license: http://opensource.org/licenses/MIT + * + */jQuery&&function(e){function t(t,n){var r=e('
              '),i=e.minicolors.defaults;if(t.data("minicolors-initialized"))return;n=e.extend(!0,{},i,n);r.addClass("minicolors-theme-"+n.theme).toggleClass("minicolors-with-opacity",n.opacity);n.position!==undefined&&e.each(n.position.split(" "),function(){r.addClass("minicolors-position-"+this)});t.addClass("minicolors-input").data("minicolors-initialized",!0).data("minicolors-settings",n).prop("size",7).wrap(r).after('
              '+'
              '+'
              '+"
              "+'
              '+'
              '+"
              "+'
              '+'
              '+'
              '+"
              "+"
              ");if(!n.inline){t.after('');t.next(".minicolors-swatch").on("click",function(e){e.preventDefault();t.focus()})}t.parent().find(".minicolors-panel").on("selectstart",function(){return!1}).end();n.inline&&t.parent().addClass("minicolors-inline");u(t,!1);t.data("minicolors-lastChange",{hex:t.val(),opacity:t.attr("data-opacity")})}function n(e){var t=e.parent();e.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input");t.before(e).remove()}function r(e){var t=e.parent(),n=t.find(".minicolors-panel"),r=e.data("minicolors-settings");if(!e.data("minicolors-initialized")||e.prop("disabled")||t.hasClass("minicolors-inline")||t.hasClass("minicolors-focus"))return;i();t.addClass("minicolors-focus");n.stop(!0,!0).fadeIn(r.showSpeed,function(){r.show&&r.show.call(e.get(0))})}function i(){e(".minicolors-input").each(function(){var t=e(this),n=t.data("minicolors-settings"),r=t.parent();if(n.inline)return;r.find(".minicolors-panel").fadeOut(n.hideSpeed,function(){r.hasClass("minicolors-focus")&&n.hide&&n.hide.call(t.get(0));r.removeClass("minicolors-focus")})})}function s(e,t,n){var r=e.parents(".minicolors").find(".minicolors-input"),i=r.data("minicolors-settings"),s=e.find("[class$=-picker]"),u=e.offset().left,a=e.offset().top,f=Math.round(t.pageX-u),l=Math.round(t.pageY-a),c=n?i.animationSpeed:0,h,p,d,v;if(t.originalEvent.changedTouches){f=t.originalEvent.changedTouches[0].pageX-u;l=t.originalEvent.changedTouches[0].pageY-a}f<0&&(f=0);l<0&&(l=0);f>e.width()&&(f=e.width());l>e.height()&&(l=e.height());if(e.parent().is(".minicolors-slider-wheel")&&s.parent().is(".minicolors-grid")){h=75-f;p=75-l;d=Math.sqrt(h*h+p*p);v=Math.atan2(p,h);v<0&&(v+=Math.PI*2);if(d>75){d=75;f=75-75*Math.cos(v);l=75-75*Math.sin(v)}f=Math.round(f);l=Math.round(l)}e.is(".minicolors-grid")?s.stop(!0).animate({top:l+"px",left:f+"px"},c,i.animationEasing,function(){o(r,e)}):s.stop(!0).animate({top:l+"px"},c,i.animationEasing,function(){o(r,e)})}function o(e,t){function n(e,t){var n,r;if(!e.length||!t)return null;n=e.offset().left;r=e.offset().top;return{x:n-t.offset().left+e.outerWidth()/2,y:r-t.offset().top+e.outerHeight()/2}}var r,i,s,o,u,f,l,h=e.val(),d=e.attr("data-opacity"),v=e.parent(),g=e.data("minicolors-settings"),y=v.find(".minicolors-swatch"),b=v.find(".minicolors-grid"),w=v.find(".minicolors-slider"),E=v.find(".minicolors-opacity-slider"),S=b.find("[class$=-picker]"),x=w.find("[class$=-picker]"),T=E.find("[class$=-picker]"),N=n(S,b),C=n(x,w),k=n(T,E);if(t.is(".minicolors-grid, .minicolors-slider")){switch(g.control){case"wheel":o=b.width()/2-N.x;u=b.height()/2-N.y;f=Math.sqrt(o*o+u*u);l=Math.atan2(u,o);l<0&&(l+=Math.PI*2);if(f>75){f=75;N.x=69-75*Math.cos(l);N.y=69-75*Math.sin(l)}i=p(f/.75,0,100);r=p(l*180/Math.PI,0,360);s=p(100-Math.floor(C.y*(100/w.height())),0,100);h=m({h:r,s:i,b:s});w.css("backgroundColor",m({h:r,s:i,b:100}));break;case"saturation":r=p(parseInt(N.x*(360/b.width()),10),0,360);i=p(100-Math.floor(C.y*(100/w.height())),0,100);s=p(100-Math.floor(N.y*(100/b.height())),0,100);h=m({h:r,s:i,b:s});w.css("backgroundColor",m({h:r,s:100,b:s}));v.find(".minicolors-grid-inner").css("opacity",i/100);break;case"brightness":r=p(parseInt(N.x*(360/b.width()),10),0,360);i=p(100-Math.floor(N.y*(100/b.height())),0,100);s=p(100-Math.floor(C.y*(100/w.height())),0,100);h=m({h:r,s:i,b:s});w.css("backgroundColor",m({h:r,s:i,b:100}));v.find(".minicolors-grid-inner").css("opacity",1-s/100);break;default:r=p(360-parseInt(C.y*(360/w.height()),10),0,360);i=p(Math.floor(N.x*(100/b.width())),0,100);s=p(100-Math.floor(N.y*(100/b.height())),0,100);h=m({h:r,s:i,b:s});b.css("backgroundColor",m({h:r,s:100,b:100}))}e.val(c(h,g.letterCase))}if(t.is(".minicolors-opacity-slider")){g.opacity?d=parseFloat(1-k.y/E.height()).toFixed(2):d=1;g.opacity&&e.attr("data-opacity",d)}y.find("SPAN").css({backgroundColor:h,opacity:d});a(e,h,d)}function u(e,t){var n,r,i,s,o,u,a,f=e.parent(),l=e.data("minicolors-settings"),d=f.find(".minicolors-swatch"),v=f.find(".minicolors-grid"),y=f.find(".minicolors-slider"),b=f.find(".minicolors-opacity-slider"),w=v.find("[class$=-picker]"),E=y.find("[class$=-picker]"),S=b.find("[class$=-picker]");n=c(h(e.val(),!0),l.letterCase);n||(n=c(h(l.defaultValue,!0),l.letterCase));r=g(n);t||e.val(n);if(l.opacity){i=e.attr("data-opacity")===""?1:p(parseFloat(e.attr("data-opacity")).toFixed(2),0,1);isNaN(i)&&(i=1);e.attr("data-opacity",i);d.find("SPAN").css("opacity",i);o=p(b.height()-b.height()*i,0,b.height());S.css("top",o+"px")}d.find("SPAN").css("backgroundColor",n);switch(l.control){case"wheel":u=p(Math.ceil(r.s*.75),0,v.height()/2);a=r.h*Math.PI/180;s=p(75-Math.cos(a)*u,0,v.width());o=p(75-Math.sin(a)*u,0,v.height());w.css({top:o+"px",left:s+"px"});o=150-r.b/(100/v.height());n===""&&(o=0);E.css("top",o+"px");y.css("backgroundColor",m({h:r.h,s:r.s,b:100}));break;case"saturation":s=p(5*r.h/12,0,150);o=p(v.height()-Math.ceil(r.b/(100/v.height())),0,v.height());w.css({top:o+"px",left:s+"px"});o=p(y.height()-r.s*(y.height()/100),0,y.height());E.css("top",o+"px");y.css("backgroundColor",m({h:r.h,s:100,b:r.b}));f.find(".minicolors-grid-inner").css("opacity",r.s/100);break;case"brightness":s=p(5*r.h/12,0,150);o=p(v.height()-Math.ceil(r.s/(100/v.height())),0,v.height());w.css({top:o+"px",left:s+"px"});o=p(y.height()-r.b*(y.height()/100),0,y.height());E.css("top",o+"px");y.css("backgroundColor",m({h:r.h,s:r.s,b:100}));f.find(".minicolors-grid-inner").css("opacity",1-r.b/100);break;default:s=p(Math.ceil(r.s/(100/v.width())),0,v.width());o=p(v.height()-Math.ceil(r.b/(100/v.height())),0,v.height());w.css({top:o+"px",left:s+"px"});o=p(y.height()-r.h/(360/y.height()),0,y.height());E.css("top",o+"px");v.css("backgroundColor",m({h:r.h,s:100,b:100}))}}function a(e,t,n){var r=e.data("minicolors-settings"),i=e.data("minicolors-lastChange");if(i.hex!==t||i.opacity!==n){e.data("minicolors-lastChange",{hex:t,opacity:n});if(r.change)if(r.changeDelay){clearTimeout(e.data("minicolors-changeTimeout"));e.data("minicolors-changeTimeout",setTimeout(function(){r.change.call(e.get(0),t,n)},r.changeDelay))}else r.change.call(e.get(0),t,n);e.trigger("change").trigger("input")}}function f(t){var n=h(e(t).val(),!0),r=b(n),i=e(t).attr("data-opacity");if(!r)return null;i!==undefined&&e.extend(r,{a:parseFloat(i)});return r}function l(t,n){var r=h(e(t).val(),!0),i=b(r),s=e(t).attr("data-opacity");if(!i)return null;s===undefined&&(s=1);return n?"rgba("+i.r+", "+i.g+", "+i.b+", "+parseFloat(s)+")":"rgb("+i.r+", "+i.g+", "+i.b+")"}function c(e,t){return t==="uppercase"?e.toUpperCase():e.toLowerCase()}function h(e,t){e=e.replace(/[^A-F0-9]/ig,"");if(e.length!==3&&e.length!==6)return"";e.length===3&&t&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]);return"#"+e}function p(e,t,n){en&&(e=n);return e}function d(e){var t={},n=Math.round(e.h),r=Math.round(e.s*255/100),i=Math.round(e.b*255/100);if(r===0)t.r=t.g=t.b=i;else{var s=i,o=(255-r)*i/255,u=(s-o)*(n%60)/60;n===360&&(n=0);if(n<60){t.r=s;t.b=o;t.g=o+u}else if(n<120){t.g=s;t.b=o;t.r=s-u}else if(n<180){t.g=s;t.r=o;t.b=o+u}else if(n<240){t.b=s;t.r=o;t.g=s-u}else if(n<300){t.b=s;t.g=o;t.r=o+u}else if(n<360){t.r=s;t.g=o;t.b=s-u}else{t.r=0;t.g=0;t.b=0}}return{r:Math.round(t.r),g:Math.round(t.g),b:Math.round(t.b)}}function v(t){var n=[t.r.toString(16),t.g.toString(16),t.b.toString(16)];e.each(n,function(e,t){t.length===1&&(n[e]="0"+t)});return"#"+n.join("")}function m(e){return v(d(e))}function g(e){var t=y(b(e));t.s===0&&(t.h=360);return t}function y(e){var t={h:0,s:0,b:0},n=Math.min(e.r,e.g,e.b),r=Math.max(e.r,e.g,e.b),i=r-n;t.b=r;t.s=r!==0?255*i/r:0;t.s!==0?e.r===r?t.h=(e.g-e.b)/i:e.g===r?t.h=2+(e.b-e.r)/i:t.h=4+(e.r-e.g)/i:t.h=-1;t.h*=60;t.h<0&&(t.h+=360);t.s*=100/255;t.b*=100/255;return t}function b(e){e=parseInt(e.indexOf("#")>-1?e.substring(1):e,16);return{r:e>>16,g:(e&65280)>>8,b:e&255}}e.minicolors={defaults:{animationSpeed:50,animationEasing:"swing",change:null,changeDelay:0,control:"hue",defaultValue:"",hide:null,hideSpeed:100,inline:!1,letterCase:"lowercase",opacity:!1,position:"bottom left",show:null,showSpeed:100,theme:"default"}};e.extend(e.fn,{minicolors:function(s,o){switch(s){case"destroy":e(this).each(function(){n(e(this))});return e(this);case"hide":i();return e(this);case"opacity":if(o===undefined)return e(this).attr("data-opacity");e(this).each(function(){u(e(this).attr("data-opacity",o))});return e(this);case"rgbObject":return f(e(this),s==="rgbaObject");case"rgbString":case"rgbaString":return l(e(this),s==="rgbaString");case"settings":if(o===undefined)return e(this).data("minicolors-settings");e(this).each(function(){var t=e(this).data("minicolors-settings")||{};n(e(this));e(this).minicolors(e.extend(!0,t,o))});return e(this);case"show":r(e(this).eq(0));return e(this);case"value":if(o===undefined)return e(this).val();e(this).each(function(){u(e(this).val(o))});return e(this);default:s!=="create"&&(o=s);e(this).each(function(){t(e(this),o)});return e(this)}}});e(document).on("mousedown.minicolors touchstart.minicolors",function(t){e(t.target).parents().add(t.target).hasClass("minicolors")||i()}).on("mousedown.minicolors touchstart.minicolors",".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider",function(t){var n=e(this);t.preventDefault();e(document).data("minicolors-target",n);s(n,t,!0)}).on("mousemove.minicolors touchmove.minicolors",function(t){var n=e(document).data("minicolors-target");n&&s(n,t)}).on("mouseup.minicolors touchend.minicolors",function(){e(this).removeData("minicolors-target")}).on("mousedown.minicolors touchstart.minicolors",".minicolors-swatch",function(t){var n=e(this).parent().find(".minicolors-input");t.preventDefault();r(n)}).on("focus.minicolors",".minicolors-input",function(){var t=e(this);if(!t.data("minicolors-initialized"))return;r(t)}).on("blur.minicolors",".minicolors-input",function(){var t=e(this),n=t.data("minicolors-settings");if(!t.data("minicolors-initialized"))return;t.val(h(t.val(),!0));t.val()===""&&t.val(h(n.defaultValue,!0));t.val(c(t.val(),n.letterCase))}).on("keydown.minicolors",".minicolors-input",function(t){var n=e(this);if(!n.data("minicolors-initialized"))return;switch(t.keyCode){case 9:i();break;case 13:case 27:i();n.blur()}}).on("keyup.minicolors",".minicolors-input",function(){var t=e(this);if(!t.data("minicolors-initialized"))return;u(t,!0)}).on("paste.minicolors",".minicolors-input",function(){var t=e(this);if(!t.data("minicolors-initialized"))return;setTimeout(function(){u(t,!0)},1)})}(jQuery); \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/minicolors/jquery.minicolors.png b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/minicolors/jquery.minicolors.png new file mode 100644 index 0000000..8fa1e9d Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/minicolors/jquery.minicolors.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/tinymce.js b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/tinymce.js new file mode 100644 index 0000000..6384dc4 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/LayerSlider/static/js/tinymce.js @@ -0,0 +1,91 @@ +jQuery(document).ready(function($) { + + tinymce.create('tinymce.plugins.layerslider_plugin', { + + init : function(ed, url) { + + var self = this; + + // Select slider + $(document).on('click', '.ls-pointer li', function() { + self.selectSlider(this); + self.closePopup(); + }); + + // Close event + $(document).on('click', '.ls-overlay', function() { + self.closePopup(); + }); + + // Button props + ed.addButton('layerslider_button', { + itle : 'Add LayerSlider', + cmd : 'layerslider_insert_shortcode', + onclick : function() { self.openPopup(); } + }); + }, + + + openPopup : function() { + + // Check if popup is already opened + if($('.ls-pointer').length) { + return; + } + + // Add popup markup + $('body').prepend( $('
              ', { 'class' : 'ls-pointer ls-shortcode-pointer ls-box' }) + .append( $('', { 'class' : 'ls-mce-arrow'} )) + .append( $('

              ', { 'class' : 'header', 'text' : 'Insert LayerSlider to page'} )) + .append( $('

              '; + + update_option('cpto_options', $options); + update_option('CPT_configured', 'TRUE'); + + } + + $queue_data = get_option('ce_queue'); + + ?> +
              +
              +

              + + + +
              +
              +

              + + + + + + + + + + + + + + + + + + + + +
              + +
              + + +

              + +
              + +
              + +

              + +

              + + + + +
              + +
              + + '; + + + } + +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt-pt_BR.mo b/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt-pt_BR.mo new file mode 100644 index 0000000..9a421ec Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt-pt_BR.mo differ diff --git a/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt-pt_BR.po b/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt-pt_BR.po new file mode 100644 index 0000000..c3edf95 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt-pt_BR.po @@ -0,0 +1,98 @@ +msgid "" +msgstr "" +"Project-Id-Version: Post Types Order\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-11-29 09:26-0300\n" +"PO-Revision-Date: 2012-12-07 14:22+0200\n" +"Last-Translator: Gabriel Reguly \n" +"Language-Team: http://ppgr.com.br/\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-KeywordsList: __;_e\n" +"X-Poedit-Basepath: .\n" +"Language: pt_BR\n" +"X-Generator: Poedit 1.5.3\n" +"X-Poedit-SearchPath-0: post-types-order\n" + +#: post-types-order/post-types-order.php:41 +msgid "Post Types Order" +msgstr "Ordenar Posts" + +#: post-types-order/post-types-order.php:176 +msgid "Invalid post type" +msgstr "Type de post inválido" + +#: post-types-order/post-types-order.php:216 +#: post-types-order/post-types-order.php:218 +msgid "Re-Order" +msgstr "Reordenar" + +#: post-types-order/post-types-order.php:229 +#, php-format +msgid "%s - Re-order " +msgstr "Reordenar %s" + +#: post-types-order/post-types-order.php:233 +msgid "" +"This plugin can't work without javascript, because it use drag and drop and " +"AJAX." +msgstr "Este plugin precisa de JavaScript para funcionar." + +#: post-types-order/post-types-order.php:242 +msgid "Update" +msgstr "Atualizar" + +#: post-types-order/post-types-order.php:257 +msgid "Item order updated" +msgstr "Ordem alterada" + +#: post-types-order/post-types-order.php:263 +msgid "" +"Did you found this plug-in useful? Please support our work with a donation." +msgstr "" +"Você considera útil este plugin? Por favor, faça uma doação para o autor." + +#: post-types-order/post-types-order.php:283 +msgid "Pages" +msgstr "Páginas" + +#: post-types-order/include/options.php:6 +msgid "Settings Saved" +msgstr "Configuração salva" + +#: post-types-order/include/options.php:13 +msgid "General Setings" +msgstr "Configuração geral" + +#: post-types-order/include/options.php:16 +msgid "General" +msgstr "Geral" + +#: post-types-order/include/options.php:21 +msgid "Minimum Level to use this plugin" +msgstr "Nível minimo para utilizar este plugin" + +#: post-types-order/include/options.php:25 +msgid "Subscriber" +msgstr "Assinante" + +#: post-types-order/include/options.php:26 +msgid "Contributor" +msgstr "Contribuidor" + +#: post-types-order/include/options.php:27 +msgid "Author" +msgstr "Author" + +#: post-types-order/include/options.php:28 +msgid "Editor" +msgstr "Editor" + +#: post-types-order/include/options.php:29 +msgid "Administrator" +msgstr "Administrador" + +#: post-types-order/include/options.php:36 +msgid "Save Settings" +msgstr "Salvar configuração" diff --git a/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt-ro_RO.mo b/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt-ro_RO.mo new file mode 100644 index 0000000..0f54901 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt-ro_RO.mo differ diff --git a/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt-ro_RO.po b/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt-ro_RO.po new file mode 100644 index 0000000..a8a8978 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt-ro_RO.po @@ -0,0 +1,101 @@ +msgid "" +msgstr "" +"Project-Id-Version: Post Types Order\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-11-29 09:26-0300\n" +"PO-Revision-Date: 2012-12-07 14:34+0200\n" +"Last-Translator: Gabriel Reguly \n" +"Language-Team: http://ppgr.com.br/\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-KeywordsList: __;_e\n" +"X-Poedit-Basepath: .\n" +"Language: pt_BR\n" +"X-Generator: Poedit 1.5.3\n" +"X-Poedit-SearchPath-0: post-types-order\n" + +#: post-types-order/post-types-order.php:41 +msgid "Post Types Order" +msgstr "Post Types Order" + +#: post-types-order/post-types-order.php:176 +msgid "Invalid post type" +msgstr "Post Type Invalid" + +#: post-types-order/post-types-order.php:216 +#: post-types-order/post-types-order.php:218 +msgid "Re-Order" +msgstr "Re-Order" + +#: post-types-order/post-types-order.php:229 +#, php-format +msgid "%s - Re-order " +msgstr "Reordenar %s" + +#: post-types-order/post-types-order.php:233 +msgid "" +"This plugin can't work without javascript, because it use drag and drop and " +"AJAX." +msgstr "" +"Acest plugin nu poate functiona fara JavaScript pentru ca foloseste o " +"capabilitate AJAX" + +#: post-types-order/post-types-order.php:242 +msgid "Update" +msgstr "Actualizare" + +#: post-types-order/post-types-order.php:257 +msgid "Item order updated" +msgstr "Ordonare salvata" + +#: post-types-order/post-types-order.php:263 +msgid "" +"Did you found this plug-in useful? Please support our work with a donation." +msgstr "" +"Ai gasit acest plugin folositor? The rog ajuta exhipa sa dezvolte softul in " +"continuare printr-o donatie" + +#: post-types-order/post-types-order.php:283 +msgid "Pages" +msgstr "Pagini" + +#: post-types-order/include/options.php:6 +msgid "Settings Saved" +msgstr "Setari Salvate" + +#: post-types-order/include/options.php:13 +msgid "General Setings" +msgstr "Setari Generale" + +#: post-types-order/include/options.php:16 +msgid "General" +msgstr "Geral" + +#: post-types-order/include/options.php:21 +msgid "Minimum Level to use this plugin" +msgstr "Niveulul minim pentru a utiliza Re-order" + +#: post-types-order/include/options.php:25 +msgid "Subscriber" +msgstr "Subscriber" + +#: post-types-order/include/options.php:26 +msgid "Contributor" +msgstr "Contributor" + +#: post-types-order/include/options.php:27 +msgid "Author" +msgstr "Author" + +#: post-types-order/include/options.php:28 +msgid "Editor" +msgstr "Editor" + +#: post-types-order/include/options.php:29 +msgid "Administrator" +msgstr "Administrator" + +#: post-types-order/include/options.php:36 +msgid "Save Settings" +msgstr "Salveaza" diff --git a/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt.mo b/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt.mo new file mode 100644 index 0000000..d65560e Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt.mo differ diff --git a/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt.po b/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt.po new file mode 100644 index 0000000..a2c88a4 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/post-types-order/lang/cpt.po @@ -0,0 +1,143 @@ +msgid "" +msgstr "" +"Project-Id-Version: Post Types Order\n" +"POT-Creation-Date: 2012-12-07 16:41+0200\n" +"PO-Revision-Date: 2012-12-07 16:41+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.3\n" +"X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n" +"X-Poedit-Basepath: ../\n" +"X-Poedit-SearchPath-0: .\n" + +#: post-types-order.php:107 +msgid "Post Types Order must be configured. Please go to" +msgstr "" + +#: post-types-order.php:107 +msgid "Settings Page" +msgstr "" + +#: post-types-order.php:107 +msgid "make the configuration and save" +msgstr "" + +#: post-types-order.php:468 +msgid "" +"This plugin can't work without javascript, because it's use drag and drop " +"and AJAX." +msgstr "" + +#: post-types-order.php:497 +msgid "Items Order Updated" +msgstr "" + +#: post-types-order.php:514 +msgid "Pages" +msgstr "" + +#: include/functions.php:65 +msgid "" +"Did you find this plugin useful? Please support our work with a donation or " +"write an article about this plugin in your blog with a link to our site" +msgstr "" + +#: include/functions.php:66 +msgid "Did you know there is available an Advanced version of this plug-in?" +msgstr "" + +#: include/functions.php:66 +msgid "Read more" +msgstr "" + +#: include/functions.php:67 +msgid "Check our" +msgstr "" + +#: include/functions.php:67 +msgid "" +"plugin which allow to custom sort categories and custom taxonomies terms" +msgstr "" + +#: include/options.php:16 +msgid "Settings Saved" +msgstr "" + +#: include/options.php:28 +msgid "General Settings" +msgstr "" + +#: include/options.php:34 +msgid "General" +msgstr "" + +#: include/options.php:39 +msgid "Minimum Level to use this plugin" +msgstr "" + +#: include/options.php:42 +msgid "Subscriber" +msgstr "" + +#: include/options.php:43 +msgid "Contributor" +msgstr "" + +#: include/options.php:44 +msgid "Author" +msgstr "" + +#: include/options.php:45 +msgid "Editor" +msgstr "" + +#: include/options.php:46 +msgid "Administrator" +msgstr "" + +#: include/options.php:52 +msgid "Auto Sort" +msgstr "" + +#: include/options.php:56 +msgid "" +"If checked, the plug-in will automatically update the wp-queries to use the " +"new order (No code update is necessarily).
              If you need more " +"order customizations you will need to uncheck this and include 'menu_order' " +"into your theme queries" +msgstr "" + +#: include/options.php:58 +msgid "Show Examples" +msgstr "" + +#: include/options.php:61 +msgid "The following PHP code will still return the post in the set-up Order" +msgstr "" + +#: include/options.php:74 +msgid "Or" +msgstr "" + +#: include/options.php:83 +msgid "" +"If the Auto Sort is uncheck you will need to use the \"orderby\" and \"order" +"\" parameters" +msgstr "" + +#: include/options.php:98 +msgid "Admin Sort" +msgstr "" + +#: include/options.php:102 +msgid "" +"To affect the admin interface, to see the post types per your new sort, this " +"need to be checked" +msgstr "" + +#: include/options.php:111 +msgid "Save Settings" +msgstr "" diff --git a/src/wp-content/themes/avada/framework/plugins/post-types-order/post-types-order.php b/src/wp-content/themes/avada/framework/plugins/post-types-order/post-types-order.php new file mode 100644 index 0000000..8fa04d6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/post-types-order/post-types-order.php @@ -0,0 +1,572 @@ +query['suppress_filters'])) + $query->query['suppress_filters'] = FALSE; + + + if (isset($query->query_vars['suppress_filters'])) + $query->query_vars['suppress_filters'] = FALSE; + + } + + return $query; + } + +add_filter('posts_orderby', 'CPTOrderPosts', 99, 2); +function CPTOrderPosts($orderBy, $query) + { + global $wpdb; + + $options = get_option('cpto_options'); + + //ignore the bbpress + if (isset($query->query_vars['post_type']) && ((is_array($query->query_vars['post_type']) && in_array("reply", $query->query_vars['post_type'])) || ($query->query_vars['post_type'] == "reply"))) + return $orderBy; + if (isset($query->query_vars['post_type']) && ((is_array($query->query_vars['post_type']) && in_array("topic", $query->query_vars['post_type'])) || ($query->query_vars['post_type'] == "topic"))) + return $orderBy; + + if (is_admin()) + { + if ($options['adminsort'] == "1") + $orderBy = "{$wpdb->posts}.menu_order, {$wpdb->posts}.post_date DESC"; + } + else + { + if ($options['autosort'] == "1") + $orderBy = "{$wpdb->posts}.menu_order, " . $orderBy; + } + + return($orderBy); + } + +$is_configured = get_option('CPT_configured'); +if ($is_configured == '') + add_action( 'admin_notices', 'CPTO_admin_notices'); + +function CPTO_admin_notices() + { + if (isset($_POST['form_submit'])) + return; + ?> +
              +

              +
              + Post Types Order', 'manage_options', 'cpto-options', 'cpt_plugin_options'); + } + + +add_action('wp_loaded', 'initCPTO' ); +function initCPTO() + { + global $custom_post_type_order, $userdata; + + $options = get_option('cpto_options'); + + if (is_admin()) + { + if(isset($options['capability']) && !empty($options['capability'])) + { + if(current_user_can($options['capability'])) + $custom_post_type_order = new CPTO(); + } + else if (is_numeric($options['level'])) + { + if (userdata_get_user_level(true) >= $options['level']) + $custom_post_type_order = new CPTO(); + } + else + { + $custom_post_type_order = new CPTO(); + } + } + } + +add_filter('get_previous_post_where', 'cpto_get_previous_post_where'); +add_filter('get_previous_post_sort', 'cpto_get_previous_post_sort'); +add_filter('get_next_post_where', 'cpto_get_next_post_where'); +add_filter('get_next_post_sort', 'cpto_get_next_post_sort'); +function cpto_get_previous_post_where($where) + { + global $post, $wpdb; + + if ( empty( $post ) ) + return $where; + + $current_post_date = $post->post_date; + + $join = ''; + $posts_in_ex_cats_sql = ''; + if (isset($in_same_cat)) + if ( $in_same_cat || !empty($excluded_categories) ) + { + $join = " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id"; + + if ( $in_same_cat ) { + $cat_array = wp_get_object_terms($post->ID, 'category', array('fields' => 'ids')); + $join .= " AND tt.taxonomy = 'category' AND tt.term_id IN (" . implode(',', $cat_array) . ")"; + } + + $posts_in_ex_cats_sql = "AND tt.taxonomy = 'category'"; + if ( !empty($excluded_categories) ) { + $excluded_categories = array_map('intval', explode(' and ', $excluded_categories)); + if ( !empty($cat_array) ) { + $excluded_categories = array_diff($excluded_categories, $cat_array); + $posts_in_ex_cats_sql = ''; + } + + if ( !empty($excluded_categories) ) { + $posts_in_ex_cats_sql = " AND tt.taxonomy = 'category' AND tt.term_id NOT IN (" . implode($excluded_categories, ',') . ')'; + } + } + } + $current_menu_order = $post->menu_order; + + //check if there are more posts with lower menu_order + $query = "SELECT p.* FROM $wpdb->posts AS p + WHERE p.menu_order < '".$current_menu_order."' AND p.post_type = '". $post->post_type ."' AND p.post_status = 'publish' $posts_in_ex_cats_sql"; + $results = $wpdb->get_results($query); + + if (count($results) > 0) + { + $where = "WHERE p.menu_order < '".$current_menu_order."' AND p.post_type = '". $post->post_type ."' AND p.post_status = 'publish' $posts_in_ex_cats_sql"; + } + else + { + $where = "WHERE p.post_date < '".$current_post_date."' AND p.post_type = '". $post->post_type ."' AND p.post_status = 'publish' AND p.ID != '". $post->ID ."' $posts_in_ex_cats_sql"; + } + + return $where; + } + +function cpto_get_previous_post_sort($sort) + { + global $post, $wpdb; + $posts_in_ex_cats_sql = ''; + + $current_menu_order = $post->menu_order; + + $query = "SELECT p.* FROM $wpdb->posts AS p + WHERE p.menu_order < '".$current_menu_order."' AND p.post_type = '". $post->post_type ."' AND p.post_status = 'publish' $posts_in_ex_cats_sql"; + $results = $wpdb->get_results($query); + + if (count($results) > 0) + { + $sort = 'ORDER BY p.menu_order DESC, p.post_date ASC LIMIT 1'; + } + else + { + $sort = 'ORDER BY p.post_date DESC LIMIT 1'; + } + + return $sort; + } + +function cpto_get_next_post_where($where) + { + global $post, $wpdb; + + if ( empty( $post ) ) + return null; + + $current_post_date = $post->post_date; + + $join = ''; + $posts_in_ex_cats_sql = ''; + if (isset($in_same_cat)) + if ( $in_same_cat || !empty($excluded_categories) ) + { + $join = " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id"; + + if ( $in_same_cat ) { + $cat_array = wp_get_object_terms($post->ID, 'category', array('fields' => 'ids')); + $join .= " AND tt.taxonomy = 'category' AND tt.term_id IN (" . implode(',', $cat_array) . ")"; + } + + $posts_in_ex_cats_sql = "AND tt.taxonomy = 'category'"; + if ( !empty($excluded_categories) ) { + $excluded_categories = array_map('intval', explode(' and ', $excluded_categories)); + if ( !empty($cat_array) ) { + $excluded_categories = array_diff($excluded_categories, $cat_array); + $posts_in_ex_cats_sql = ''; + } + + if ( !empty($excluded_categories) ) { + $posts_in_ex_cats_sql = " AND tt.taxonomy = 'category' AND tt.term_id NOT IN (" . implode($excluded_categories, ',') . ')'; + } + } + } + + $current_menu_order = $post->menu_order; + + //check if there are more posts with lower menu_order + $query = "SELECT p.* FROM $wpdb->posts AS p + WHERE p.menu_order > '".$current_menu_order."' AND p.post_type = '". $post->post_type ."' AND p.post_status = 'publish' $posts_in_ex_cats_sql"; + $results = $wpdb->get_results($query); + + if (count($results) > 0) + { + $where = "WHERE p.menu_order > '".$current_menu_order."' AND p.post_type = '". $post->post_type ."' AND p.post_status = 'publish' $posts_in_ex_cats_sql"; + } + else + { + $where = "WHERE p.post_date > '".$current_post_date."' AND p.post_type = '". $post->post_type ."' AND p.post_status = 'publish' AND p.ID != '". $post->ID ."' $posts_in_ex_cats_sql"; + } + + return $where; + } + +function cpto_get_next_post_sort($sort) + { + global $post, $wpdb; + $posts_in_ex_cats_sql = ''; + + $current_menu_order = $post->menu_order; + + $query = "SELECT p.* FROM $wpdb->posts AS p + WHERE p.menu_order > '".$current_menu_order."' AND p.post_type = '". $post->post_type ."' AND p.post_status = 'publish' $posts_in_ex_cats_sql"; + $results = $wpdb->get_results($query); + if (count($results) > 0) + { + $sort = 'ORDER BY p.menu_order ASC, p.post_date DESC LIMIT 1'; + } + else + { + $sort = 'ORDER BY p.post_date ASC LIMIT 1'; + } + + return $sort; + } + + +class Post_Types_Order_Walker extends Walker + { + + var $db_fields = array ('parent' => 'post_parent', 'id' => 'ID'); + + + function start_lvl(&$output, $depth) { + $indent = str_repeat("\t", $depth); + $output .= "\n$indent
                \n"; + } + + + function end_lvl(&$output, $depth) { + $indent = str_repeat("\t", $depth); + $output .= "$indent
              \n"; + } + + + function start_el(&$output, $page, $depth, $args) { + if ( $depth ) + $indent = str_repeat("\t", $depth); + else + $indent = ''; + + extract($args, EXTR_SKIP); + + $output .= $indent . '
            • '.apply_filters( 'the_title', $page->post_title, $page->ID ).''; + } + + + function end_el(&$output, $page, $depth) { + $output .= "
            • \n"; + } + + } + + +class CPTO + { + var $current_post_type = null; + + function CPTO() + { + add_action( 'admin_init', array(&$this, 'registerFiles'), 11 ); + add_action( 'admin_init', array(&$this, 'checkPost'), 10 ); + add_action( 'admin_menu', array(&$this, 'addMenu') ); + + + + add_action( 'wp_ajax_update-custom-type-order', array(&$this, 'saveAjaxOrder') ); + } + + function registerFiles() + { + if ( $this->current_post_type != null ) + { + wp_enqueue_script('jQuery'); + wp_enqueue_script('jquery-ui-sortable'); + } + + wp_register_style('CPTStyleSheets', CPTURL . '/css/cpt.css'); + wp_enqueue_style( 'CPTStyleSheets'); + } + + function checkPost() + { + if ( isset($_GET['page']) && substr($_GET['page'], 0, 17) == 'order-post-types-' ) + { + $this->current_post_type = get_post_type_object(str_replace( 'order-post-types-', '', $_GET['page'] )); + if ( $this->current_post_type == null) + { + wp_die('Invalid post type'); + } + } + } + + function saveAjaxOrder() + { + global $wpdb; + + parse_str($_POST['order'], $data); + + if (is_array($data)) + foreach($data as $key => $values ) + { + if ( $key == 'item' ) + { + foreach( $values as $position => $id ) + { + $wpdb->update( $wpdb->posts, array('menu_order' => $position, 'post_parent' => 0), array('ID' => $id) ); + } + } + else + { + foreach( $values as $position => $id ) + { + $wpdb->update( $wpdb->posts, array('menu_order' => $position, 'post_parent' => str_replace('item_', '', $key)), array('ID' => $id) ); + } + } + } + } + + + function addMenu() + { + global $userdata; + //put a menu for all custom_type + $post_types = get_post_types(); + + $options = get_option('cpto_options'); + //get the required user capability + $capability = ''; + if(isset($options['capability']) && !empty($options['capability'])) + { + $capability = $options['capability']; + } + else if (is_numeric($options['level'])) + { + $capability = userdata_get_user_level(); + } + else + { + $capability = 'install_plugins'; + } + + foreach( $post_types as $post_type_name ) + { + if ($post_type_name == 'page') + continue; + + //ignore bbpress + if ($post_type_name == 'reply' || $post_type_name == 'topic') + continue; + + if ($post_type_name == 'post') + add_submenu_page('edit.php', 'Re-Order', 'Re-Order', $capability, 'order-post-types-'.$post_type_name, array(&$this, 'SortPage') ); + else + { + if (!is_post_type_hierarchical($post_type_name)) + add_submenu_page('edit.php?post_type='.$post_type_name, 'Re-Order', 'Re-Order', $capability, 'order-post-types-'.$post_type_name, array(&$this, 'SortPage') ); + } + } + } + + + function SortPage() + { + ?> +
              +

              +

              current_post_type->labels->singular_name . ' - Re-order '?>

              + + + +
              + + + +
              +
                + listPages('hide_empty=0&title_li=&post_type='.$this->current_post_type->name); ?> +
              + +
              +
              + +

              + Update +

              + + + +
              + 0, 'show_date' => '', + 'date_format' => get_option('date_format'), + 'child_of' => 0, 'exclude' => '', + 'title_li' => __('Pages', 'pto'), 'echo' => 1, + 'authors' => '', 'sort_column' => 'menu_order', + 'link_before' => '', 'link_after' => '', 'walker' => '' + ); + + $r = wp_parse_args( $args, $defaults ); + extract( $r, EXTR_SKIP ); + + $output = ''; + + $r['exclude'] = preg_replace('/[^0-9,]/', '', $r['exclude']); + $exclude_array = ( $r['exclude'] ) ? explode(',', $r['exclude']) : array(); + $r['exclude'] = implode( ',', apply_filters('wp_list_pages_excludes', $exclude_array) ); + + // Query pages. + $r['hierarchical'] = 0; + $args = array( + 'sort_column' => 'menu_order', + 'post_type' => $post_type, + 'posts_per_page' => -1, + 'orderby' => 'menu_order', + 'order' => 'ASC' + ); + + $the_query = new WP_Query($args); + $pages = $the_query->posts; + + if ( !empty($pages) ) { + if ( $r['title_li'] ) + $output .= ''; + } + + $output = apply_filters('wp_list_pages', $output, $r); + + if ( $r['echo'] ) + echo $output; + else + return $output; + } + + function walkTree($pages, $depth, $r) + { + if ( empty($r['walker']) ) + $walker = new Post_Types_Order_Walker; + else + $walker = $r['walker']; + + $args = array($pages, $depth, $r); + return call_user_func_array(array(&$walker, 'walk'), $args); + } + } + + +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/revslider.zip b/src/wp-content/themes/avada/framework/plugins/revslider.zip new file mode 100644 index 0000000..dcaba7b Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/revslider.zip differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/flexslider.css b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/flexslider.css new file mode 100644 index 0000000..7a75cfc --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/flexslider.css @@ -0,0 +1,79 @@ +/* + * jQuery FlexSlider v2.1 + * http://www.woothemes.com/wooslider/ + * + * Copyright 2012 WooThemes + * Free to use under the GPLv2 license. + * http://www.gnu.org/licenses/gpl-2.0.html + * + * Contributing author: Tyler Smith (@mbmufffin) + */ + + +/* Browser Resets */ +.wooslider-container a:active, +.wooslider a:active, +.wooslider-container a:focus, +.wooslider a:focus {outline: none;} +.slides, +.wooslider-control-nav, +.wooslider-direction-nav {margin: 0; padding: 0; list-style: none;} + +/* wooslider Necessary Styles +*********************************/ +.wooslider {margin: 0; padding: 0;} +.wooslider .slides > li { display: none; -webkit-backface-visibility: hidden; } /* Hide the slides before the JS is loaded. Avoids image jumping */ +.wooslider .slides img {width: 100%; display: block;} +.wooslider-pauseplay span {text-transform: capitalize;} + +/* Clearfix for the .slides element */ +.wooslider .slides:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; } +html[xmlns] .wooslider .slides { display: block; } +* html .wooslider .slides { height: 1%; } + +/* No JavaScript Fallback */ +/* If you are not using another script, such as Modernizr, make sure you + * include js that eliminates this class on page load */ +.no-js .wooslider .slides > li:first-child { display: block; } + + +/* wooslider Default Theme +*********************************/ +.wooslider {margin: 0 0 60px; background: #fff; border: 4px solid #fff; position: relative; -webkit-border-radius: 4px; -moz-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.2); -moz-box-shadow: 0 1px 4px rgba(0,0,0,.2); -o-box-shadow: 0 1px 4px rgba(0,0,0,.2); box-shadow: 0 1px 4px rgba(0,0,0,.2); zoom: 1;} +.wooslider-viewport {max-height: 2000px; -webkit-transition: all 1s ease; -moz-transition: all 1s ease; transition: all 1s ease;} +.loading .wooslider-viewport {max-height: 300px;} +.wooslider .slides {zoom: 1;} + +.wooslider .carousel li { margin-right: 5px; } + +/* Direction Nav */ +.wooslider-direction-nav a {width: 30px; height: 30px; margin: -20px 0 0; display: block; background: url(../images/bg_direction_nav.png) no-repeat 0 0; position: absolute; top: 50%; cursor: pointer; text-indent: -9999px; opacity: 0; -webkit-transition: all .3s ease; -moz-transition: all .3s ease; -o-transition: all .3s ease; transition: all .3s ease;} +.wooslider-direction-nav .wooslider-next {background-position: 100% 0; right: -36px; } +.wooslider-direction-nav .wooslider-prev {left: -36px;} +.wooslider:hover .wooslider-next {opacity: 0.8; right: 5px;} +.wooslider:hover .wooslider-prev {opacity: 0.8; left: 5px;} +.wooslider:hover .wooslider-next:hover, .wooslider:hover .wooslider-prev:hover {opacity: 1;} +.wooslider-direction-nav .disabled {opacity: .3!important; filter:alpha(opacity=30); cursor: default;} + +/* Pause/Play */ +.wooslider-pauseplay a { width: 30px; height: 30px; text-indent: -9999px; background: url(../images/bg_play_pause.png) no-repeat 110% 0; position: absolute; bottom: 5px; left: 5px; opacity: 0.8; z-index: 9999; cursor: pointer; } +.wooslider-pauseplay a:hover { opacity: 1; } +.wooslider-pauseplay a.wooslider-play { background-position: 0 0; } + +/* Control Nav */ +.wooslider-control-nav {width: 100%; position: absolute; top: 100%; margin-top: 10px!important; text-align: center; z-index: 9999; } +.wooslider-control-nav li {margin: 0 6px; display: inline-block; zoom: 1; *display: inline;} +.wooslider-control-paging li a {width: 11px; height: 11px; display: block; background: #666; background: rgba(0,0,0,0.5); cursor: pointer; text-indent: -9999px; -webkit-border-radius: 20px; -moz-border-radius: 20px; -o-border-radius: 20px; border-radius: 20px; box-shadow: inset 0 0 3px rgba(0,0,0,0.3);} +.wooslider-control-paging li a:hover { background: #333; background: rgba(0,0,0,0.7); } +.wooslider-control-paging li a.wooslider-active { background: #000; background: rgba(0,0,0,0.9); cursor: default; } + +.wooslider-control-thumbs {margin: 5px 0 0; position: static; overflow: hidden;} +.wooslider-control-thumbs li {width: 25%; float: left; margin: 0;} +.wooslider-control-thumbs img {width: 100%; display: block; opacity: .7; cursor: pointer;} +.wooslider-control-thumbs img:hover {opacity: 1;} +.wooslider-control-thumbs .wooslider-active {opacity: 1; cursor: default;} + +@media screen and (max-width: 860px) { + .wooslider-direction-nav .wooslider-prev {opacity: 1; left: 0;} + .wooslider-direction-nav .wooslider-next {opacity: 1; right: 0;} +} diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/global.css b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/global.css new file mode 100644 index 0000000..8612374 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/global.css @@ -0,0 +1,4 @@ +#adminmenu li.menu-icon-slide .wp-menu-image img { display: none; opacity: 0; } +#wpwrap li.menu-icon-slide div.wp-menu-image { background: url(../images/icon_slide_16.png) no-repeat left top; width: 20px; height: 16px; margin-left: 9px; margin-right:7px;margin-top: 7px; } +#wpwrap li.menu-icon-slide.current div.wp-menu-image, #wpwrap li.menu-icon-slide:hover div.wp-menu-image, #wpwrap li.menu-icon-slide.wp-has-current-submenu div.wp-menu-image { background-position: left -16px; } +#icon-wooslider, #icon-post.icon32-posts-slide, #icon-edit.icon32-posts-slide { background: transparent url(../images/icon_slide_32.png) no-repeat left top; } \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/image-selectors.css b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/image-selectors.css new file mode 100644 index 0000000..0a3aa5f --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/image-selectors.css @@ -0,0 +1,3 @@ +.radio-images { position: relative; top: -30px; } +.radio-image-thumb { border: 3px solid #CCC; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; margin-right: 5px; } +.radio-image-thumb:hover, .radio-image-thumb.active { border-color: #999; } \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/ranges.css b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/ranges.css new file mode 100644 index 0000000..2e0efbb --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/ranges.css @@ -0,0 +1,48 @@ +.slider-value { position: relative; bottom: 16px; left: 325px; font-weight: bold; font-size: 1.2em; width: 75px; } + +.ui-slider { max-width: 300px; } + +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(../images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } +.ui-widget-content a { color: #222222/*{fcContent}*/; } +.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(../images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } +.ui-widget-header a { color: #222222/*{fcHeader}*/; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(../images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(../images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(../images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/settings.css b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/settings.css new file mode 100644 index 0000000..6d76f55 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/settings.css @@ -0,0 +1,15 @@ +.info-box { background: #F2F2F2; border: 1px solid #CCCCCC; position: relative; left: -230px; padding: 0.1em 1em; margin-bottom: 1em; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } +.info-box .title { margin-top: 1em; } + +.info-box.success { border-color: #E6DB55; background-color: #ffffe0; } +.info-box.error { border-color: #cc0000; background-color: #ffebe8; } + +#wooslider { position: relative; } +#wooslider .fl { float: left; } +#wooslider .fr { float: right; } +#wooslider .powered-by-woo { position: absolute; top: 12px; z-index: 1; right: 0; font-size: 11px; text-transform: uppercase; color: #afafaf; } +#wooslider .powered-by-woo img { vertical-align: middle; margin: 0 0 0 10px!important; } + +#screen-meta-links .screen-meta-toggle { z-index: 2; } + +#wooslider h2 span.version { font-size: 0.4em; font-weight: bold; position: relative; top: -4px; left: 5px; padding: 2px 5px; border: 1px solid #ccc; background: #f5f5f5; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; } \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/style.css b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/style.css new file mode 100644 index 0000000..9a098d4 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/css/style.css @@ -0,0 +1,54 @@ +/* Basic reset for better theme compatibility. */ +.wooslider .slides > li { list-style: none; float: left; margin: 0; padding: 0; } +.wooslider .slides > li img { border: 0; box-shadow: none; } +.wooslider .wooslider-control-nav > li { margin: 0 6px; padding: 0; } + +body .wooslider.wooslider-type-posts img, body .wooslider.wooslider-type-attachments img { border: 0; padding: 0; margin: 0; height: auto; } +body .wooslider .slides, body .wooslider .wooslider-control-nav, body .wooslider .wooslider-direction-nav { padding: 0; margin: 0; } +body .wooslider .wooslider-control-nav li, body .wooslider .wooslider-direction-nav li { list-style: none; } + +/* Layout styles for the "Posts" slideshow type. */ +/* Text Left and Text Right Options */ +.wooslider .layout-text-left img { float: right; width: 40%; } +.wooslider .layout-text-left .slide-excerpt { float: left; width: 50%; } + +.wooslider .layout-text-right img { float: left; width: 40%; } +.wooslider .layout-text-right .slide-excerpt { float: right; width: 50%; } + +/* Full overlay enabled */ +.wooslider .overlay-full { position: relative; } +.wooslider .overlay-full .slide-excerpt { background: #000; opacity: 0.8; color: #FFF; position: absolute; padding: 1em; } +.wooslider .overlay-full .slide-excerpt .slide-title { color: #FFF; } +.wooslider .overlay-full img { float: none; width: 100%; height: auto; } + +body .wooslider .overlay-full.layout-text-left .slide-excerpt { left: 0; top: 0; bottom: 0; width: 30%; padding: 1em; overflow: hidden; } +body .wooslider .overlay-full.layout-text-right .slide-excerpt { right: 0; top: 0; bottom: 0; width: 30%; padding: 1em; overflow: hidden; } +body .wooslider .overlay-full.layout-text-top .slide-excerpt { left: 0; right: 0; top: 0; height: auto; padding: 1em; overflow: hidden; } +body .wooslider .overlay-full.layout-text-bottom .slide-excerpt { left: 0; right: 0; bottom: 0; height: auto; padding: 1em; overflow: hidden; } + +/* Natural overlay enabled */ +.wooslider .overlay-natural { position: relative; } +.wooslider .overlay-natural .slide-excerpt { color: #FFF; position: absolute; float: left; padding: 0; } +.wooslider .overlay-natural .slide-excerpt .slide-title { color: #FFF; background: #000; opacity: 0.8; float: left; padding: 0.5em 1em; margin: 0; } +.wooslider .overlay-natural .slide-excerpt p { color: #FFF; background: #000; opacity: 0.8; float: left; padding: 0.5em 1em; } +.wooslider .overlay-natural img { float: none; width: 100%; height: auto; } + +body .wooslider .overlay-natural.layout-text-left .slide-excerpt { left: 0; top: 10%; overflow: hidden; } +body .wooslider .overlay-natural.layout-text-right .slide-excerpt { float: right; right: 0; top: 10%; overflow: hidden; } +body .wooslider .overlay-natural.layout-text-right .slide-excerpt .slide-title, +body .wooslider .overlay-natural.layout-text-right .slide-excerpt p { float: right; } +body .wooslider .overlay-natural.layout-text-top .slide-excerpt { left: 0; top: 0; overflow: hidden; } +body .wooslider .overlay-natural.layout-text-bottom .slide-excerpt { left: 0; bottom: 0; overflow: hidden; } + +/* "Slides" slideshow type */ +body .wooslider .slide-content { margin: 0.5em; padding: 0; border: 0; width: auto; height: auto; } + +/* Slide widget */ +.widget_wooslider_slideshow_attachments .wooslider-direction-nav a { padding: 0; } + +body .wooslider.wooslider-type-posts img, body .wooslider.wooslider-type-attachments img { max-width: 100%; border: none; } +body .wooslider-control-nav { margin: 0; padding: 0; } +body .wooslider-control-nav img { border: 0; background: none; margin: 0; padding: 0; } +body .wooslider-direction-nav, body .wooslider-direction-nav li { list-style: none; margin: 0; padding: 0; } +body .wooslider.wooslider-type-slides .has-featured-image img.featured-image { max-width: 100%; height: auto; } +body .wooslider.wooslider-type-slides img { max-width: 100%; } \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/bg_direction_nav.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/bg_direction_nav.png new file mode 100644 index 0000000..de3fe04 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/bg_direction_nav.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/bg_play_pause.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/bg_play_pause.png new file mode 100644 index 0000000..aa3eb56 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/bg_play_pause.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/default.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/default.png new file mode 100644 index 0000000..6bbb1c3 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/default.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/icon_slide_16.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/icon_slide_16.png new file mode 100644 index 0000000..32ee0e2 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/icon_slide_16.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/icon_slide_32.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/icon_slide_32.png new file mode 100644 index 0000000..cc1496f Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/icon_slide_32.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/overlay-natural.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/overlay-natural.png new file mode 100644 index 0000000..12cfe5c Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/overlay-natural.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/placeholder.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/placeholder.png new file mode 100644 index 0000000..aa7e60e Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/placeholder.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/text-bottom.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/text-bottom.png new file mode 100644 index 0000000..b8a5c29 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/text-bottom.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/text-left.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/text-left.png new file mode 100644 index 0000000..a832f28 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/text-left.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/text-right.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/text-right.png new file mode 100644 index 0000000..fb1db09 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/text-right.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/text-top.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/text-top.png new file mode 100644 index 0000000..2763a7f Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/text-top.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_flat_0_aaaaaa_40x100.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000..99be896 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_flat_75_ffffff_40x100.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000..e77a535 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_55_fbf9ee_1x400.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000..6352348 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_65_ffffff_1x400.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..54b5d35 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_75_dadada_1x400.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000..20055b8 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_75_e6e6e6_1x400.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000..efe693b Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_95_fef1ec_1x400.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000..c3e50c1 Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000..7c9fa6c Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/woothemes.png b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/woothemes.png new file mode 100644 index 0000000..6da55cd Binary files /dev/null and b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/images/woothemes.png differ diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/image-selectors.js b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/image-selectors.js new file mode 100644 index 0000000..5b2c306 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/image-selectors.js @@ -0,0 +1,15 @@ +jQuery(document).ready( function($) { + if ( jQuery( '.radio-images' ).length ) { + jQuery( '.radio-images' ).each( function ( i, e ) { + if ( jQuery( this ).is( ':checked' ) ) { + jQuery( this ).next( 'img.radio-image-thumb' ).addClass( 'active' ); + } + jQuery( this ).hide(); + }); + + jQuery( '.radio-image-thumb' ).click( function ( e ) { + jQuery( this ).addClass( 'active' ).siblings( '.active' ).removeClass( 'active' ); + jQuery( this ).prev( 'input.radio-images' ).trigger( 'click' ); + }); + } +}); \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/jquery.flexslider.js b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/jquery.flexslider.js new file mode 100644 index 0000000..6e754b6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/jquery.flexslider.js @@ -0,0 +1,903 @@ +/* + * jQuery FlexSlider v2.1 + * http://www.woothemes.com/flexslider/ + * + * Copyright 2012 WooThemes + * Free to use under the GPLv2 license. + * http://www.gnu.org/licenses/gpl-2.0.html + * + * Contributing author: Tyler Smith (@mbmufffin) + */ + +;(function ($) { + + //FlexSlider: Object Instance + $.flexslider2 = function(el, options) { + var slider = $(el), + vars = $.extend({}, $.flexslider2.defaults, options), + namespace = vars.namespace, + touch = ("ontouchstart" in window) || window.DocumentTouch && document instanceof DocumentTouch, + eventType = (touch) ? "touchend" : "click", + vertical = vars.direction === "vertical", + reverse = vars.reverse, + carousel = (vars.itemWidth > 0), + fade = vars.animation === "fade", + asNav = vars.asNavFor !== "", + methods = {}; + + // Store a reference to the slider object + $.data(el, "flexslider2", slider); + + // Privat slider methods + methods = { + init: function() { + slider.animating = false; + slider.currentSlide = vars.startAt; + slider.animatingTo = slider.currentSlide; + slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last); + slider.containerSelector = vars.selector.substr(0,vars.selector.search(' ')); + slider.slides = $(vars.selector, slider); + slider.container = $(slider.containerSelector, slider); + slider.count = slider.slides.length; + // SYNC: + slider.syncExists = $(vars.sync).length > 0; + // SLIDE: + if (vars.animation === "slide") vars.animation = "swing"; + slider.prop = (vertical) ? "top" : "marginLeft"; + slider.args = {}; + // SLIDESHOW: + slider.manualPause = false; + // TOUCH/USECSS: + slider.transitions = !vars.video && !fade && vars.useCSS && (function() { + var obj = document.createElement('div'), + props = ['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective']; + for (var i in props) { + if ( obj.style[ props[i] ] !== undefined ) { + slider.pfx = props[i].replace('Perspective','').toLowerCase(); + slider.prop = "-" + slider.pfx + "-transform"; + return true; + } + } + return false; + }()); + // CONTROLSCONTAINER: + if (vars.controlsContainer !== "") slider.controlsContainer = $(vars.controlsContainer).length > 0 && $(vars.controlsContainer); + // MANUAL: + if (vars.manualControls !== "") slider.manualControls = $(vars.manualControls).length > 0 && $(vars.manualControls); + + // RANDOMIZE: + if (vars.randomize) { + slider.slides.sort(function() { return (Math.round(Math.random())-0.5); }); + slider.container.empty().append(slider.slides); + } + + slider.doMath(); + + // ASNAV: + if (asNav) methods.asNav.setup(); + + // INIT + slider.setup("init"); + + // CONTROLNAV: + if (vars.controlNav) methods.controlNav.setup(); + + // DIRECTIONNAV: + if (vars.directionNav) methods.directionNav.setup(); + + // KEYBOARD: + if (vars.keyboard && ($(slider.containerSelector).length === 1 || vars.multipleKeyboard)) { + $(document).bind('keyup', function(event) { + var keycode = event.keyCode; + if (!slider.animating && (keycode === 39 || keycode === 37)) { + var target = (keycode === 39) ? slider.getTarget('next') : + (keycode === 37) ? slider.getTarget('prev') : false; + slider.flexAnimate(target, vars.pauseOnAction); + } + }); + } + // MOUSEWHEEL: + if (vars.mousewheel) { + slider.bind('mousewheel', function(event, delta, deltaX, deltaY) { + event.preventDefault(); + var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev'); + slider.flexAnimate(target, vars.pauseOnAction); + }); + } + + // PAUSEPLAY + if (vars.pausePlay) methods.pausePlay.setup(); + + // SLIDSESHOW + if (vars.slideshow) { + if (vars.pauseOnHover) { + slider.hover(function() { + if (!slider.manualPlay && !slider.manualPause) slider.pause(); + }, function() { + if (!slider.manualPause && !slider.manualPlay) slider.play(); + }); + } + // initialize animation + (vars.initDelay > 0) ? setTimeout(slider.play, vars.initDelay) : slider.play(); + } + + // TOUCH + if (touch && vars.touch) methods.touch(); + + // FADE&&SMOOTHHEIGHT || SLIDE: + if (!fade || (fade && vars.smoothHeight)) $(window).bind("resize focus", methods.resize); + + + // API: start() Callback + setTimeout(function(){ + vars.start(slider); + }, 200); + }, + asNav: { + setup: function() { + slider.asNav = true; + slider.animatingTo = Math.floor(slider.currentSlide/slider.move); + slider.currentItem = slider.currentSlide; + slider.slides.removeClass(namespace + "active-slide").eq(slider.currentItem).addClass(namespace + "active-slide"); + slider.slides.click(function(e){ + e.preventDefault(); + var $slide = $(this), + target = $slide.index(); + if (!$(vars.asNavFor).data('flexslider2').animating && !$slide.hasClass('active')) { + slider.direction = (slider.currentItem < target) ? "next" : "prev"; + slider.flexAnimate(target, vars.pauseOnAction, false, true, true); + } + }); + } + }, + controlNav: { + setup: function() { + if (!slider.manualControls) { + methods.controlNav.setupPaging(); + } else { // MANUALCONTROLS: + methods.controlNav.setupManual(); + } + }, + setupPaging: function() { + var type = (vars.controlNav === "thumbnails") ? 'control-thumbs' : 'control-paging', + j = 1, + item; + + slider.controlNavScaffold = $('
                '); + + if (slider.pagingCount > 1) { + for (var i = 0; i < slider.pagingCount; i++) { + item = (vars.controlNav === "thumbnails") ? '' : '' + j + ''; + slider.controlNavScaffold.append('
              1. ' + item + '
              2. '); + j++; + } + } + + // CONTROLSCONTAINER: + (slider.controlsContainer) ? $(slider.controlsContainer).append(slider.controlNavScaffold) : slider.append(slider.controlNavScaffold); + methods.controlNav.set(); + + methods.controlNav.active(); + + slider.controlNavScaffold.delegate('a, img', eventType, function(event) { + event.preventDefault(); + var $this = $(this), + target = slider.controlNav.index($this); + + if (!$this.hasClass(namespace + 'active')) { + slider.direction = (target > slider.currentSlide) ? "next" : "prev"; + slider.flexAnimate(target, vars.pauseOnAction); + } + }); + // Prevent iOS click event bug + if (touch) { + slider.controlNavScaffold.delegate('a', "click touchstart", function(event) { + event.preventDefault(); + }); + } + }, + setupManual: function() { + slider.controlNav = slider.manualControls; + methods.controlNav.active(); + + slider.controlNav.live(eventType, function(event) { + event.preventDefault(); + var $this = $(this), + target = slider.controlNav.index($this); + + if (!$this.hasClass(namespace + 'active')) { + (target > slider.currentSlide) ? slider.direction = "next" : slider.direction = "prev"; + slider.flexAnimate(target, vars.pauseOnAction); + } + }); + // Prevent iOS click event bug + if (touch) { + slider.controlNav.live("click touchstart", function(event) { + event.preventDefault(); + }); + } + }, + set: function() { + var selector = (vars.controlNav === "thumbnails") ? 'img' : 'a'; + slider.controlNav = $('.' + namespace + 'control-nav li ' + selector, (slider.controlsContainer) ? slider.controlsContainer : slider); + }, + active: function() { + slider.controlNav.removeClass(namespace + "active").eq(slider.animatingTo).addClass(namespace + "active"); + }, + update: function(action, pos) { + if (slider.pagingCount > 1 && action === "add") { + slider.controlNavScaffold.append($('
              3. ' + slider.count + '
              4. ')); + } else if (slider.pagingCount === 1) { + slider.controlNavScaffold.find('li').remove(); + } else { + slider.controlNav.eq(pos).closest('li').remove(); + } + methods.controlNav.set(); + (slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length) ? slider.update(pos, action) : methods.controlNav.active(); + } + }, + directionNav: { + setup: function() { + var directionNavScaffold = $(''); + + // CONTROLSCONTAINER: + if (slider.controlsContainer) { + $(slider.controlsContainer).append(directionNavScaffold); + slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer); + } else { + slider.append(directionNavScaffold); + slider.directionNav = $('.' + namespace + 'direction-nav li a', slider); + } + + methods.directionNav.update(); + + slider.directionNav.bind(eventType, function(event) { + event.preventDefault(); + var target = ($(this).hasClass(namespace + 'next')) ? slider.getTarget('next') : slider.getTarget('prev'); + slider.flexAnimate(target, vars.pauseOnAction); + }); + // Prevent iOS click event bug + if (touch) { + slider.directionNav.bind("click touchstart", function(event) { + event.preventDefault(); + }); + } + }, + update: function() { + var disabledClass = namespace + 'disabled'; + if (slider.pagingCount === 1) { + slider.directionNav.addClass(disabledClass); + } else if (!vars.animationLoop) { + if (slider.animatingTo === 0) { + slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "prev").addClass(disabledClass); + } else if (slider.animatingTo === slider.last) { + slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "next").addClass(disabledClass); + } else { + slider.directionNav.removeClass(disabledClass); + } + } else { + slider.directionNav.removeClass(disabledClass); + } + } + }, + pausePlay: { + setup: function() { + var pausePlayScaffold = $('
                '); + + // CONTROLSCONTAINER: + if (slider.controlsContainer) { + slider.controlsContainer.append(pausePlayScaffold); + slider.pausePlay = $('.' + namespace + 'pauseplay a', slider.controlsContainer); + } else { + slider.append(pausePlayScaffold); + slider.pausePlay = $('.' + namespace + 'pauseplay a', slider); + } + + methods.pausePlay.update((vars.slideshow) ? namespace + 'pause' : namespace + 'play'); + + slider.pausePlay.bind(eventType, function(event) { + event.preventDefault(); + if ($(this).hasClass(namespace + 'pause')) { + slider.manualPause = true; + slider.manualPlay = false; + slider.pause(); + } else { + slider.manualPause = false; + slider.manualPlay = true; + slider.play(); + } + }); + // Prevent iOS click event bug + if (touch) { + slider.pausePlay.bind("click touchstart", function(event) { + event.preventDefault(); + }); + } + }, + update: function(state) { + (state === "play") ? slider.pausePlay.removeClass(namespace + 'pause').addClass(namespace + 'play').text(vars.playText) : slider.pausePlay.removeClass(namespace + 'play').addClass(namespace + 'pause').text(vars.pauseText); + } + }, + touch: function() { + var startX, + startY, + offset, + cwidth, + dx, + startT, + scrolling = false; + + el.addEventListener('touchstart', onTouchStart, false); + function onTouchStart(e) { + if (slider.animating) { + e.preventDefault(); + } else if (e.touches.length === 1) { + slider.pause(); + // CAROUSEL: + cwidth = (vertical) ? slider.h : slider. w; + startT = Number(new Date()); + // CAROUSEL: + offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 : + (carousel && reverse) ? slider.limit - (((slider.itemW + vars.itemMargin) * slider.move) * slider.animatingTo) : + (carousel && slider.currentSlide === slider.last) ? slider.limit : + (carousel) ? ((slider.itemW + vars.itemMargin) * slider.move) * slider.currentSlide : + (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth; + startX = (vertical) ? e.touches[0].pageY : e.touches[0].pageX; + startY = (vertical) ? e.touches[0].pageX : e.touches[0].pageY; + + el.addEventListener('touchmove', onTouchMove, false); + el.addEventListener('touchend', onTouchEnd, false); + } + } + + function onTouchMove(e) { + dx = (vertical) ? startX - e.touches[0].pageY : startX - e.touches[0].pageX; + scrolling = (vertical) ? (Math.abs(dx) < Math.abs(e.touches[0].pageX - startY)) : (Math.abs(dx) < Math.abs(e.touches[0].pageY - startY)); + + if (!scrolling || Number(new Date()) - startT > 500) { + e.preventDefault(); + if (!fade && slider.transitions) { + if (!vars.animationLoop) { + dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1); + } + slider.setProps(offset + dx, "setTouch"); + } + } + } + + function onTouchEnd(e) { + // finish the touch by undoing the touch session + el.removeEventListener('touchmove', onTouchMove, false); + + if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) { + var updateDx = (reverse) ? -dx : dx, + target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev'); + + if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) { + slider.flexAnimate(target, vars.pauseOnAction); + } else { + if (!fade) slider.flexAnimate(slider.currentSlide, vars.pauseOnAction, true); + } + } + el.removeEventListener('touchend', onTouchEnd, false); + startX = null; + startY = null; + dx = null; + offset = null; + } + }, + resize: function() { + if (!slider.animating && slider.is(':visible')) { + if (!carousel) slider.doMath(); + + if (fade) { + // SMOOTH HEIGHT: + methods.smoothHeight(); + } else if (carousel) { //CAROUSEL: + slider.slides.width(slider.computedW); + slider.update(slider.pagingCount); + slider.setProps(); + } + else if (vertical) { //VERTICAL: + slider.viewport.height(slider.h); + slider.setProps(slider.h, "setTotal"); + } else { + // SMOOTH HEIGHT: + if (vars.smoothHeight) methods.smoothHeight(); + slider.newSlides.width(slider.computedW); + slider.setProps(slider.computedW, "setTotal"); + } + } + }, + smoothHeight: function(dur) { + if (!vertical || fade) { + var $obj = (fade) ? slider : slider.viewport; + (dur) ? $obj.animate({"height": slider.slides.eq(slider.animatingTo).height()}, dur) : $obj.height(slider.slides.eq(slider.animatingTo).height()); + } + }, + sync: function(action) { + var $obj = $(vars.sync).data("flexslider2"), + target = slider.animatingTo; + + switch (action) { + case "animate": $obj.flexAnimate(target, vars.pauseOnAction, false, true); break; + case "play": if (!$obj.playing && !$obj.asNav) { $obj.play(); } break; + case "pause": $obj.pause(); break; + } + } + } + + // public methods + slider.flexAnimate = function(target, pause, override, withSync, fromNav) { + if (asNav && slider.pagingCount === 1) slider.direction = (slider.currentItem < target) ? "next" : "prev"; + + if (!slider.animating && (slider.canAdvance(target, fromNav) || override) && slider.is(":visible")) { + if (asNav && withSync) { + var master = $(vars.asNavFor).data('flexslider2'); + slider.atEnd = target === 0 || target === slider.count - 1; + master.flexAnimate(target, true, false, true, fromNav); + slider.direction = (slider.currentItem < target) ? "next" : "prev"; + master.direction = slider.direction; + + if (Math.ceil((target + 1)/slider.visible) - 1 !== slider.currentSlide && target !== 0) { + slider.currentItem = target; + slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide"); + target = Math.floor(target/slider.visible); + } else { + slider.currentItem = target; + slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide"); + return false; + } + } + + slider.animating = true; + slider.animatingTo = target; + // API: before() animation Callback + vars.before(slider); + + // SLIDESHOW: + if (pause) slider.pause(); + + // SYNC: + if (slider.syncExists && !fromNav) methods.sync("animate"); + + // CONTROLNAV + if (vars.controlNav) methods.controlNav.active(); + + // !CAROUSEL: + // CANDIDATE: slide active class (for add/remove slide) + if (!carousel) slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide'); + + // INFINITE LOOP: + // CANDIDATE: atEnd + slider.atEnd = target === 0 || target === slider.last; + + // DIRECTIONNAV: + if (vars.directionNav) methods.directionNav.update(); + + if (target === slider.last) { + // API: end() of cycle Callback + vars.end(slider); + // SLIDESHOW && !INFINITE LOOP: + if (!vars.animationLoop) slider.pause(); + } + + // SLIDE: + if (!fade) { + var dimension = (vertical) ? slider.slides.filter(':first').height() : slider.computedW, + margin, slideString, calcNext; + + // INFINITE LOOP / REVERSE: + if (carousel) { + margin = (vars.itemWidth > slider.w) ? vars.itemMargin * 2 : vars.itemMargin; + calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo; + slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext; + } else if (slider.currentSlide === 0 && target === slider.count - 1 && vars.animationLoop && slider.direction !== "next") { + slideString = (reverse) ? (slider.count + slider.cloneOffset) * dimension : 0; + } else if (slider.currentSlide === slider.last && target === 0 && vars.animationLoop && slider.direction !== "prev") { + slideString = (reverse) ? 0 : (slider.count + 1) * dimension; + } else { + slideString = (reverse) ? ((slider.count - 1) - target + slider.cloneOffset) * dimension : (target + slider.cloneOffset) * dimension; + } + slider.setProps(slideString, "", vars.animationSpeed); + if (slider.transitions) { + if (!vars.animationLoop || !slider.atEnd) { + slider.animating = false; + slider.currentSlide = slider.animatingTo; + } + slider.container.unbind("webkitTransitionEnd transitionend"); + slider.container.bind("webkitTransitionEnd transitionend", function() { + slider.wrapup(dimension); + }); + } else { + slider.container.animate(slider.args, vars.animationSpeed, vars.easing, function(){ + slider.wrapup(dimension); + }); + } + } else { // FADE: + if (!touch) { + slider.slides.eq(slider.currentSlide).fadeOut(vars.animationSpeed, vars.easing); + slider.slides.eq(target).fadeIn(vars.animationSpeed, vars.easing, slider.wrapup); + } else { + slider.slides.eq(slider.currentSlide).css({ "opacity": 0, "zIndex": 1 }); + slider.slides.eq(target).css({ "opacity": 1, "zIndex": 2 }); + + slider.slides.unbind("webkitTransitionEnd transitionend"); + slider.slides.eq(slider.currentSlide).bind("webkitTransitionEnd transitionend", function() { + // API: after() animation Callback + vars.after(slider); + }); + + slider.animating = false; + slider.currentSlide = slider.animatingTo; + } + } + // SMOOTH HEIGHT: + if (vars.smoothHeight) methods.smoothHeight(vars.animationSpeed); + } + } + slider.wrapup = function(dimension) { + // SLIDE: + if (!fade && !carousel) { + if (slider.currentSlide === 0 && slider.animatingTo === slider.last && vars.animationLoop) { + slider.setProps(dimension, "jumpEnd"); + } else if (slider.currentSlide === slider.last && slider.animatingTo === 0 && vars.animationLoop) { + slider.setProps(dimension, "jumpStart"); + } + } + slider.animating = false; + slider.currentSlide = slider.animatingTo; + // API: after() animation Callback + vars.after(slider); + } + + // SLIDESHOW: + slider.animateSlides = function() { + if (!slider.animating) slider.flexAnimate(slider.getTarget("next")); + } + // SLIDESHOW: + slider.pause = function() { + clearInterval(slider.animatedSlides); + slider.playing = false; + // PAUSEPLAY: + if (vars.pausePlay) methods.pausePlay.update("play"); + // SYNC: + if (slider.syncExists) methods.sync("pause"); + } + // SLIDESHOW: + slider.play = function() { + slider.animatedSlides = setInterval(slider.animateSlides, vars.slideshowSpeed); + slider.playing = true; + // PAUSEPLAY: + if (vars.pausePlay) methods.pausePlay.update("pause"); + // SYNC: + if (slider.syncExists) methods.sync("play"); + } + slider.canAdvance = function(target, fromNav) { + // ASNAV: + var last = (asNav) ? slider.pagingCount - 1 : slider.last; + return (fromNav) ? true : + (asNav && slider.currentItem === slider.count - 1 && target === 0 && slider.direction === "prev") ? true : + (asNav && slider.currentItem === 0 && target === slider.pagingCount - 1 && slider.direction !== "next") ? false : + (target === slider.currentSlide && !asNav) ? false : + (vars.animationLoop) ? true : + (slider.atEnd && slider.currentSlide === 0 && target === last && slider.direction !== "next") ? false : + (slider.atEnd && slider.currentSlide === last && target === 0 && slider.direction === "next") ? false : + true; + } + slider.getTarget = function(dir) { + slider.direction = dir; + if (dir === "next") { + return (slider.currentSlide === slider.last) ? 0 : slider.currentSlide + 1; + } else { + return (slider.currentSlide === 0) ? slider.last : slider.currentSlide - 1; + } + } + + // SLIDE: + slider.setProps = function(pos, special, dur) { + var target = (function() { + var posCheck = (pos) ? pos : ((slider.itemW + vars.itemMargin) * slider.move) * slider.animatingTo, + posCalc = (function() { + if (carousel) { + return (special === "setTouch") ? pos : + (reverse && slider.animatingTo === slider.last) ? 0 : + (reverse) ? slider.limit - (((slider.itemW + vars.itemMargin) * slider.move) * slider.animatingTo) : + (slider.animatingTo === slider.last) ? slider.limit : posCheck; + } else { + switch (special) { + case "setTotal": return (reverse) ? ((slider.count - 1) - slider.currentSlide + slider.cloneOffset) * pos : (slider.currentSlide + slider.cloneOffset) * pos; + case "setTouch": return (reverse) ? pos : pos; + case "jumpEnd": return (reverse) ? pos : slider.count * pos; + case "jumpStart": return (reverse) ? slider.count * pos : pos; + default: return pos; + } + } + }()); + return (posCalc * -1) + "px"; + }()); + + if (slider.transitions) { + target = (vertical) ? "translate3d(0," + target + ",0)" : "translate3d(" + target + ",0,0)"; + dur = (dur !== undefined) ? (dur/1000) + "s" : "0s"; + slider.container.css("-" + slider.pfx + "-transition-duration", dur); + } + + slider.args[slider.prop] = target; + if (slider.transitions || dur === undefined) slider.container.css(slider.args); + } + + slider.setup = function(type) { + // SLIDE: + if (!fade) { + var sliderOffset, arr; + + if (type === "init") { + slider.viewport = $('
                ').css({"overflow": "hidden", "position": "relative"}).appendTo(slider).append(slider.container); + // INFINITE LOOP: + slider.cloneCount = 0; + slider.cloneOffset = 0; + // REVERSE: + if (reverse) { + arr = $.makeArray(slider.slides).reverse(); + slider.slides = $(arr); + slider.container.empty().append(slider.slides); + } + } + // INFINITE LOOP && !CAROUSEL: + if (vars.animationLoop && !carousel) { + slider.cloneCount = 2; + slider.cloneOffset = 1; + // clear out old clones + if (type !== "init") slider.container.find('.clone').remove(); + slider.container.append(slider.slides.first().clone().addClass('clone')).prepend(slider.slides.last().clone().addClass('clone')); + } + slider.newSlides = $(vars.selector, slider); + + sliderOffset = (reverse) ? slider.count - 1 - slider.currentSlide + slider.cloneOffset : slider.currentSlide + slider.cloneOffset; + // VERTICAL: + if (vertical && !carousel) { + slider.container.height((slider.count + slider.cloneCount) * 200 + "%").css("position", "absolute").width("100%"); + setTimeout(function(){ + slider.newSlides.css({"display": "block"}); + slider.doMath(); + slider.viewport.height(slider.h); + slider.setProps(sliderOffset * slider.h, "init"); + }, (type === "init") ? 100 : 0); + } else { + slider.container.width((slider.count + slider.cloneCount) * 200 + "%"); + slider.setProps(sliderOffset * slider.computedW, "init"); + setTimeout(function(){ + slider.doMath(); + slider.newSlides.css({"width": slider.computedW, "float": "left", "display": "block"}); + // SMOOTH HEIGHT: + if (vars.smoothHeight) methods.smoothHeight(); + }, (type === "init") ? 100 : 0); + } + } else { // FADE: + slider.slides.css({"width": "100%", "float": "left", "marginRight": "-100%", "position": "relative"}); + if (type === "init") { + if (!touch) { + slider.slides.eq(slider.currentSlide).fadeIn(vars.animationSpeed, vars.easing); + } else { + slider.slides.css({ "opacity": 0, "display": "block", "webkitTransition": "opacity " + vars.animationSpeed / 1000 + "s ease", "zIndex": 1 }).eq(slider.currentSlide).css({ "opacity": 1, "zIndex": 2}); + } + } + // SMOOTH HEIGHT: + if (vars.smoothHeight) methods.smoothHeight(); + } + // !CAROUSEL: + // CANDIDATE: active slide + if (!carousel) slider.slides.removeClass(namespace + "active-slide").eq(slider.currentSlide).addClass(namespace + "active-slide"); + } + + slider.doMath = function() { + var slide = slider.slides.first(), + slideMargin = vars.itemMargin, + minItems = vars.minItems, + maxItems = vars.maxItems; + + slider.w = slider.width(); + slider.h = slide.height(); + slider.boxPadding = slide.outerWidth() - slide.width(); + + // CAROUSEL: + if (carousel) { + slider.itemT = vars.itemWidth + slideMargin; + slider.minW = (minItems) ? minItems * slider.itemT : slider.w; + slider.maxW = (maxItems) ? maxItems * slider.itemT : slider.w; + slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * minItems))/minItems : + (slider.maxW < slider.w) ? (slider.w - (slideMargin * maxItems))/maxItems : + (vars.itemWidth > slider.w) ? slider.w : vars.itemWidth; + slider.visible = Math.floor(slider.w/(slider.itemW + slideMargin)); + slider.move = (vars.move > 0 && vars.move < slider.visible ) ? vars.move : slider.visible; + slider.pagingCount = Math.ceil(((slider.count - slider.visible)/slider.move) + 1); + slider.last = slider.pagingCount - 1; + slider.limit = (slider.pagingCount === 1) ? 0 : + (vars.itemWidth > slider.w) ? ((slider.itemW + (slideMargin * 2)) * slider.count) - slider.w - slideMargin : ((slider.itemW + slideMargin) * slider.count) - slider.w - slideMargin; + } else { + slider.itemW = slider.w; + slider.pagingCount = slider.count; + slider.last = slider.count - 1; + } + slider.computedW = slider.itemW - slider.boxPadding; + } + + slider.update = function(pos, action) { + slider.doMath(); + + // update currentSlide and slider.animatingTo if necessary + if (!carousel) { + if (pos < slider.currentSlide) { + slider.currentSlide += 1; + } else if (pos <= slider.currentSlide && pos !== 0) { + slider.currentSlide -= 1; + } + slider.animatingTo = slider.currentSlide; + } + + // update controlNav + if (vars.controlNav && !slider.manualControls) { + if ((action === "add" && !carousel) || slider.pagingCount > slider.controlNav.length) { + methods.controlNav.update("add"); + } else if ((action === "remove" && !carousel) || slider.pagingCount < slider.controlNav.length) { + if (carousel && slider.currentSlide > slider.last) { + slider.currentSlide -= 1; + slider.animatingTo -= 1; + } + methods.controlNav.update("remove", slider.last); + } + } + // update directionNav + if (vars.directionNav) methods.directionNav.update(); + + } + + slider.addSlide = function(obj, pos) { + var $obj = $(obj); + + slider.count += 1; + slider.last = slider.count - 1; + + // append new slide + if (vertical && reverse) { + (pos !== undefined) ? slider.slides.eq(slider.count - pos).after($obj) : slider.container.prepend($obj); + } else { + (pos !== undefined) ? slider.slides.eq(pos).before($obj) : slider.container.append($obj); + } + + // update currentSlide, animatingTo, controlNav, and directionNav + slider.update(pos, "add"); + + // update slider.slides + slider.slides = $(vars.selector + ':not(.clone)', slider); + // re-setup the slider to accomdate new slide + slider.setup(); + + //FlexSlider: added() Callback + vars.added(slider); + } + slider.removeSlide = function(obj) { + var pos = (isNaN(obj)) ? slider.slides.index($(obj)) : obj; + + // update count + slider.count -= 1; + slider.last = slider.count - 1; + + // remove slide + if (isNaN(obj)) { + $(obj, slider.slides).remove(); + } else { + (vertical && reverse) ? slider.slides.eq(slider.last).remove() : slider.slides.eq(obj).remove(); + } + + // update currentSlide, animatingTo, controlNav, and directionNav + slider.doMath(); + slider.update(pos, "remove"); + + // update slider.slides + slider.slides = $(vars.selector + ':not(.clone)', slider); + // re-setup the slider to accomdate new slide + slider.setup(); + + // FlexSlider: removed() Callback + vars.removed(slider); + } + + //FlexSlider: Initialize + methods.init(); + } + + //FlexSlider: Default Settings + $.flexslider2.defaults = { + namespace: "flex-", //{NEW} String: Prefix string attached to the class of every element generated by the plugin + selector: ".slides > li", //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril + animation: "fade", //String: Select your animation type, "fade" or "slide" + easing: "swing", //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported! + direction: "horizontal", //String: Select the sliding direction, "horizontal" or "vertical" + reverse: false, //{NEW} Boolean: Reverse the animation direction + animationLoop: true, //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end + smoothHeight: false, //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode + startAt: 0, //Integer: The slide that the slider should start on. Array notation (0 = first slide) + slideshow: true, //Boolean: Animate slider automatically + slideshowSpeed: 7000, //Integer: Set the speed of the slideshow cycling, in milliseconds + animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds + initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds + randomize: false, //Boolean: Randomize slide order + + // Usability features + pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended. + pauseOnHover: false, //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering + useCSS: true, //{NEW} Boolean: Slider will use CSS3 transitions if available + touch: true, //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices + video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches + + // Primary Controls + controlNav: true, //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage + directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false) + prevText: "Previous", //String: Set the text for the "previous" directionNav item + nextText: "Next", //String: Set the text for the "next" directionNav item + + // Secondary Navigation + keyboard: true, //Boolean: Allow slider navigating via keyboard left/right keys + multipleKeyboard: false, //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present. + mousewheel: false, //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel + pausePlay: false, //Boolean: Create pause/play dynamic element + pauseText: "Pause", //String: Set the text for the "pause" pausePlay item + playText: "Play", //String: Set the text for the "play" pausePlay item + + // Special properties + controlsContainer: "", //{UPDATED} jQuery Object/Selector: Declare which container the navigation elements should be appended too. Default container is the FlexSlider element. Example use would be $(".flexslider2-container"). Property is ignored if given element is not found. + manualControls: "", //{UPDATED} jQuery Object/Selector: Declare custom control navigation. Examples would be $(".flex-control-nav li") or "#tabs-nav li img", etc. The number of elements in your controlNav should match the number of slides/tabs. + sync: "", //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care. + asNavFor: "", //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider + + // Carousel Options + itemWidth: 0, //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding. + itemMargin: 0, //{NEW} Integer: Margin between carousel items. + minItems: 0, //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this. + maxItems: 0, //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit. + move: 0, //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items. + + // Callback API + start: function(){}, //Callback: function(slider) - Fires when the slider loads the first slide + before: function(){}, //Callback: function(slider) - Fires asynchronously with each slider animation + after: function(){}, //Callback: function(slider) - Fires after each slider animation completes + end: function(){}, //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous) + added: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is added + removed: function(){} //{NEW} Callback: function(slider) - Fires after a slide is removed + } + + + //FlexSlider: Plugin Function + $.fn.flexslider2 = function(options) { + if (options === undefined) options = {}; + + if (typeof options === "object") { + return this.each(function() { + var $this = $(this), + selector = (options.selector) ? options.selector : ".slides > li", + $slides = $this.find(selector); + + if ($slides.length === 1) { + $slides.fadeIn(400); + if (options.start) options.start($this); + } else if ($this.data('flexslider2') == undefined) { + new $.flexslider2(this, options); + } + }); + } else { + // Helper strings to quickly perform functions on the slider + var $slider = $(this).data('flexslider2'); + switch (options) { + case "play": $slider.play(); break; + case "pause": $slider.pause(); break; + case "next": $slider.flexAnimate($slider.getTarget("next"), true); break; + case "prev": + case "previous": $slider.flexAnimate($slider.getTarget("prev"), true); break; + default: if (typeof options === "number") $slider.flexAnimate(options, true); + } + } + } + +})(jQuery); \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/jquery.flexslider.min.js b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/jquery.flexslider.min.js new file mode 100644 index 0000000..94c4540 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/jquery.flexslider.min.js @@ -0,0 +1,33 @@ +(function(d){d.flexslider2=function(i,k){var a=d(i),c=d.extend({},d.flexslider2.defaults,k),e=c.namespace,p="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch,t=p?"touchend":"click",l="vertical"===c.direction,m=c.reverse,h=0g?a.getTarget("next"):a.getTarget("prev");a.flexAnimate(d,c.pauseOnAction)});c.pausePlay&&f.pausePlay.setup();c.slideshow&&(c.pauseOnHover&&a.hover(function(){!a.manualPlay&&!a.manualPause&&a.pause()}, +function(){!a.manualPause&&!a.manualPlay&&a.play()}),0');if(1':""+b+"",a.controlNavScaffold.append("
              5. "+g+"
              6. "),b++;a.controlsContainer?d(a.controlsContainer).append(a.controlNavScaffold):a.append(a.controlNavScaffold);f.controlNav.set();f.controlNav.active();a.controlNavScaffold.delegate("a, img",t,function(b){b.preventDefault();var b=d(this),g=a.controlNav.index(b);b.hasClass(e+"active")||(a.direction=g>a.currentSlide?"next":"prev",a.flexAnimate(g,c.pauseOnAction))});p&&a.controlNavScaffold.delegate("a", +"click touchstart",function(a){a.preventDefault()})},setupManual:function(){a.controlNav=a.manualControls;f.controlNav.active();a.controlNav.live(t,function(b){b.preventDefault();var b=d(this),g=a.controlNav.index(b);b.hasClass(e+"active")||(g>a.currentSlide?a.direction="next":a.direction="prev",a.flexAnimate(g,c.pauseOnAction))});p&&a.controlNav.live("click touchstart",function(a){a.preventDefault()})},set:function(){a.controlNav=d("."+e+"control-nav li "+("thumbnails"===c.controlNav?"img":"a"), +a.controlsContainer?a.controlsContainer:a)},active:function(){a.controlNav.removeClass(e+"active").eq(a.animatingTo).addClass(e+"active")},update:function(b,c){1"+a.count+"

              7. ")):1===a.pagingCount?a.controlNavScaffold.find("li").remove():a.controlNav.eq(c).closest("li").remove();f.controlNav.set();1
              8. '+c.prevText+'
              9. '+c.nextText+"
              10. ");a.controlsContainer?(d(a.controlsContainer).append(b),a.directionNav=d("."+e+"direction-nav li a",a.controlsContainer)):(a.append(b),a.directionNav=d("."+e+"direction-nav li a",a));f.directionNav.update();a.directionNav.bind(t,function(b){b.preventDefault();b=d(this).hasClass(e+"next")?a.getTarget("next"):a.getTarget("prev");a.flexAnimate(b,c.pauseOnAction)}); +p&&a.directionNav.bind("click touchstart",function(a){a.preventDefault()})},update:function(){var b=e+"disabled";1===a.pagingCount?a.directionNav.addClass(b):c.animationLoop?a.directionNav.removeClass(b):0===a.animatingTo?a.directionNav.removeClass(b).filter("."+e+"prev").addClass(b):a.animatingTo===a.last?a.directionNav.removeClass(b).filter("."+e+"next").addClass(b):a.directionNav.removeClass(b)}},pausePlay:{setup:function(){var b=d('
                ');a.controlsContainer? +(a.controlsContainer.append(b),a.pausePlay=d("."+e+"pauseplay a",a.controlsContainer)):(a.append(b),a.pausePlay=d("."+e+"pauseplay a",a));f.pausePlay.update(c.slideshow?e+"pause":e+"play");a.pausePlay.bind(t,function(b){b.preventDefault();d(this).hasClass(e+"pause")?(a.manualPause=!0,a.manualPlay=!1,a.pause()):(a.manualPause=!1,a.manualPlay=!0,a.play())});p&&a.pausePlay.bind("click touchstart",function(a){a.preventDefault()})},update:function(b){"play"===b?a.pausePlay.removeClass(e+"pause").addClass(e+ +"play").text(c.playText):a.pausePlay.removeClass(e+"play").addClass(e+"pause").text(c.pauseText)}},touch:function(){function b(b){j=l?d-b.touches[0].pageY:d-b.touches[0].pageX;p=l?Math.abs(j)j||a.currentSlide===a.last&&0Number(new Date)-k&&50q/2)?a.flexAnimate(l,c.pauseOnAction):r||a.flexAnimate(a.currentSlide,c.pauseOnAction,!0)}i.removeEventListener("touchend",g,!1);f=j=e=d=null}var d,e,f,q,j,k,p=!1;i.addEventListener("touchstart",function(j){a.animating?j.preventDefault():1===j.touches.length&&(a.pause(),q=l?a.h:a.w,k=Number(new Date),f=h&&m&&a.animatingTo=== +a.last?0:h&&m?a.limit-(a.itemW+c.itemMargin)*a.move*a.animatingTo:h&&a.currentSlide===a.last?a.limit:h?(a.itemW+c.itemMargin)*a.move*a.currentSlide:m?(a.last-a.currentSlide+a.cloneOffset)*q:(a.currentSlide+a.cloneOffset)*q,d=l?j.touches[0].pageY:j.touches[0].pageX,e=l?j.touches[0].pageX:j.touches[0].pageY,i.addEventListener("touchmove",b,!1),i.addEventListener("touchend",g,!1))},!1)},resize:function(){!a.animating&&a.is(":visible")&&(h||a.doMath(),r?f.smoothHeight():h?(a.slides.width(a.computedW), +a.update(a.pagingCount),a.setProps()):l?(a.viewport.height(a.h),a.setProps(a.h,"setTotal")):(c.smoothHeight&&f.smoothHeight(),a.newSlides.width(a.computedW),a.setProps(a.computedW,"setTotal")))},smoothHeight:function(b){if(!l||r){var c=r?a:a.viewport;b?c.animate({height:a.slides.eq(a.animatingTo).height()},b):c.height(a.slides.eq(a.animatingTo).height())}},sync:function(b){var g=d(c.sync).data("flexslider2"),e=a.animatingTo;switch(b){case "animate":g.flexAnimate(e,c.pauseOnAction,!1,!0);break;case "play":!g.playing&& +!g.asNav&&g.play();break;case "pause":g.pause()}}};a.flexAnimate=function(b,g,n,i,k){s&&1===a.pagingCount&&(a.direction=a.currentItema.w?2*c.itemMargin:c.itemMargin,b=(a.itemW+b)*a.move*a.animatingTo, +b=b>a.limit&&1!==a.visible?a.limit:b):b=0===a.currentSlide&&b===a.count-1&&c.animationLoop&&"next"!==a.direction?m?(a.count+a.cloneOffset)*q:0:a.currentSlide===a.last&&0===b&&c.animationLoop&&"prev"!==a.direction?m?0:(a.count+1)*q:m?(a.count-1-b+a.cloneOffset)*q:(b+a.cloneOffset)*q;a.setProps(b,"",c.animationSpeed);if(a.transitions){if(!c.animationLoop||!a.atEnd)a.animating=!1,a.currentSlide=a.animatingTo;a.container.unbind("webkitTransitionEnd transitionend");a.container.bind("webkitTransitionEnd transitionend", +function(){a.wrapup(q)})}else a.container.animate(a.args,c.animationSpeed,c.easing,function(){a.wrapup(q)})}c.smoothHeight&&f.smoothHeight(c.animationSpeed)}};a.wrapup=function(b){!r&&!h&&(0===a.currentSlide&&a.animatingTo===a.last&&c.animationLoop?a.setProps(b,"jumpEnd"):a.currentSlide===a.last&&(0===a.animatingTo&&c.animationLoop)&&a.setProps(b,"jumpStart"));a.animating=!1;a.currentSlide=a.animatingTo;c.after(a)};a.animateSlides=function(){a.animating||a.flexAnimate(a.getTarget("next"))};a.pause= +function(){clearInterval(a.animatedSlides);a.playing=!1;c.pausePlay&&f.pausePlay.update("play");a.syncExists&&f.sync("pause")};a.play=function(){a.animatedSlides=setInterval(a.animateSlides,c.slideshowSpeed);a.playing=!0;c.pausePlay&&f.pausePlay.update("pause");a.syncExists&&f.sync("play")};a.canAdvance=function(b,g){var d=s?a.pagingCount-1:a.last;return g?!0:s&&a.currentItem===a.count-1&&0===b&&"prev"===a.direction?!0:s&&0===a.currentItem&&b===a.pagingCount-1&&"next"!==a.direction?!1:b===a.currentSlide&& +!s?!1:c.animationLoop?!0:a.atEnd&&0===a.currentSlide&&b===d&&"next"!==a.direction?!1:a.atEnd&&a.currentSlide===d&&0===b&&"next"===a.direction?!1:!0};a.getTarget=function(b){a.direction=b;return"next"===b?a.currentSlide===a.last?0:a.currentSlide+1:0===a.currentSlide?a.last:a.currentSlide-1};a.setProps=function(b,g,d){var e,f=b?b:(a.itemW+c.itemMargin)*a.move*a.animatingTo;e=-1*function(){if(h)return"setTouch"===g?b:m&&a.animatingTo===a.last?0:m?a.limit-(a.itemW+c.itemMargin)*a.move*a.animatingTo:a.animatingTo=== +a.last?a.limit:f;switch(g){case "setTotal":return m?(a.count-1-a.currentSlide+a.cloneOffset)*b:(a.currentSlide+a.cloneOffset)*b;case "setTouch":return b;case "jumpEnd":return m?b:a.count*b;case "jumpStart":return m?a.count*b:b;default:return b}}()+"px";a.transitions&&(e=l?"translate3d(0,"+e+",0)":"translate3d("+e+",0,0)",d=void 0!==d?d/1E3+"s":"0s",a.container.css("-"+a.pfx+"-transition-duration",d));a.args[a.prop]=e;(a.transitions||void 0===d)&&a.container.css(a.args)};a.setup=function(b){if(r)a.slides.css({width:"100%", +"float":"left",marginRight:"-100%",position:"relative"}),"init"===b&&(p?a.slides.css({opacity:0,display:"block",webkitTransition:"opacity "+c.animationSpeed/1E3+"s ease",zIndex:1}).eq(a.currentSlide).css({opacity:1,zIndex:2}):a.slides.eq(a.currentSlide).fadeIn(c.animationSpeed,c.easing)),c.smoothHeight&&f.smoothHeight();else{var g,n;"init"===b&&(a.viewport=d('
                ').css({overflow:"hidden",position:"relative"}).appendTo(a).append(a.container),a.cloneCount=0,a.cloneOffset= +0,m&&(n=d.makeArray(a.slides).reverse(),a.slides=d(n),a.container.empty().append(a.slides)));c.animationLoop&&!h&&(a.cloneCount=2,a.cloneOffset=1,"init"!==b&&a.container.find(".clone").remove(),a.container.append(a.slides.first().clone().addClass("clone")).prepend(a.slides.last().clone().addClass("clone")));a.newSlides=d(c.selector,a);g=m?a.count-1-a.currentSlide+a.cloneOffset:a.currentSlide+a.cloneOffset;l&&!h?(a.container.height(200*(a.count+a.cloneCount)+"%").css("position","absolute").width("100%"), +setTimeout(function(){a.newSlides.css({display:"block"});a.doMath();a.viewport.height(a.h);a.setProps(g*a.h,"init")},"init"===b?100:0)):(a.container.width(200*(a.count+a.cloneCount)+"%"),a.setProps(g*a.computedW,"init"),setTimeout(function(){a.doMath();a.newSlides.css({width:a.computedW,"float":"left",display:"block"});c.smoothHeight&&f.smoothHeight()},"init"===b?100:0))}h||a.slides.removeClass(e+"active-slide").eq(a.currentSlide).addClass(e+"active-slide")};a.doMath=function(){var b=a.slides.first(), +d=c.itemMargin,e=c.minItems,f=c.maxItems;a.w=a.width();a.h=b.height();a.boxPadding=b.outerWidth()-b.width();h?(a.itemT=c.itemWidth+d,a.minW=e?e*a.itemT:a.w,a.maxW=f?f*a.itemT:a.w,a.itemW=a.minW>a.w?(a.w-d*e)/e:a.maxWa.w?a.w:c.itemWidth,a.visible=Math.floor(a.w/(a.itemW+d)),a.move=0a.w?(a.itemW+2*d)*a.count-a.w- +d:(a.itemW+d)*a.count-a.w-d):(a.itemW=a.w,a.pagingCount=a.count,a.last=a.count-1);a.computedW=a.itemW-a.boxPadding};a.update=function(b,d){a.doMath();h||(ba.controlNav.length)f.controlNav.update("add");else if("remove"===d&&!h||a.pagingCounta.last&&(a.currentSlide-=1,a.animatingTo-=1), +f.controlNav.update("remove",a.last);c.directionNav&&f.directionNav.update()};a.addSlide=function(b,e){var f=d(b);a.count+=1;a.last=a.count-1;l&&m?void 0!==e?a.slides.eq(a.count-e).after(f):a.container.prepend(f):void 0!==e?a.slides.eq(e).before(f):a.container.append(f);a.update(e,"add");a.slides=d(c.selector+":not(.clone)",a);a.setup();c.added(a)};a.removeSlide=function(b){var e=isNaN(b)?a.slides.index(d(b)):b;a.count-=1;a.last=a.count-1;isNaN(b)?d(b,a.slides).remove():l&&m?a.slides.eq(a.last).remove(): +a.slides.eq(b).remove();a.doMath();a.update(e,"remove");a.slides=d(c.selector+":not(.clone)",a);a.setup();c.removed(a)};f.init()};d.flexslider2.defaults={namespace:"flex-",selector:".slides > li",animation:"fade",easing:"swing",direction:"horizontal",reverse:!1,animationLoop:!0,smoothHeight:!1,startAt:0,slideshow:!0,slideshowSpeed:7E3,animationSpeed:600,initDelay:0,randomize:!1,pauseOnAction:!0,pauseOnHover:!1,useCSS:!0,touch:!0,video:!1,controlNav:!0,directionNav:!0,prevText:"Previous",nextText:"Next", +keyboard:!0,multipleKeyboard:!1,mousewheel:!1,pausePlay:!1,pauseText:"Pause",playText:"Play",controlsContainer:"",manualControls:"",sync:"",asNavFor:"",itemWidth:0,itemMargin:0,minItems:0,maxItems:0,move:0,start:function(){},before:function(){},after:function(){},end:function(){},added:function(){},removed:function(){}};d.fn.flexslider2=function(i){void 0===i&&(i={});if("object"===typeof i)return this.each(function(){var a=d(this),c=a.find(i.selector?i.selector:".slides > li");1===c.length?(c.fadeIn(400), +i.start&&i.start(a)):void 0==a.data("flexslider2")&&new d.flexslider2(this,i)});var k=d(this).data("flexslider2");switch(i){case "play":k.play();break;case "pause":k.pause();break;case "next":k.flexAnimate(k.getTarget("next"),!0);break;case "prev":case "previous":k.flexAnimate(k.getTarget("prev"),!0);break;default:"number"===typeof i&&k.flexAnimate(i,!0)}}})(jQuery); \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/jquery.mousewheel.js b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/jquery.mousewheel.js new file mode 100644 index 0000000..f1d5f72 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/jquery.mousewheel.js @@ -0,0 +1,84 @@ +/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) + * Licensed under the MIT License (LICENSE.txt). + * + * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. + * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. + * Thanks to: Seamus Leahy for adding deltaX and deltaY + * + * Version: 3.0.6 + * + * Requires: 1.2.2+ + */ + +(function($) { + +var types = ['DOMMouseScroll', 'mousewheel']; + +if ($.event.fixHooks) { + for ( var i=types.length; i; ) { + $.event.fixHooks[ types[--i] ] = $.event.mouseHooks; + } +} + +$.event.special.mousewheel = { + setup: function() { + if ( this.addEventListener ) { + for ( var i=types.length; i; ) { + this.addEventListener( types[--i], handler, false ); + } + } else { + this.onmousewheel = handler; + } + }, + + teardown: function() { + if ( this.removeEventListener ) { + for ( var i=types.length; i; ) { + this.removeEventListener( types[--i], handler, false ); + } + } else { + this.onmousewheel = null; + } + } +}; + +$.fn.extend({ + mousewheel: function(fn) { + return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); + }, + + unmousewheel: function(fn) { + return this.unbind("mousewheel", fn); + } +}); + + +function handler(event) { + var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0; + event = $.event.fix(orgEvent); + event.type = "mousewheel"; + + // Old school scrollwheel delta + if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta/120; } + if ( orgEvent.detail ) { delta = -orgEvent.detail/3; } + + // New school multidimensional scroll (touchpads) deltas + deltaY = delta; + + // Gecko + if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { + deltaY = 0; + deltaX = -1*delta; + } + + // Webkit + if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; } + if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; } + + // Add event and delta to the front of the arguments + args.unshift(event, delta, deltaX, deltaY); + + return ($.event.dispatch || $.event.handle).apply(this, args); +} + +})(jQuery); \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/jquery.mousewheel.min.js b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/jquery.mousewheel.min.js new file mode 100644 index 0000000..4c8dd78 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/jquery.mousewheel.min.js @@ -0,0 +1,2 @@ +(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;void 0!==b.axis&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);void 0!==b.wheelDeltaY&&(g=b.wheelDeltaY/120);void 0!==b.wheelDeltaX&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]= +d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,!1);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,!1);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery); \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/ranges.js b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/ranges.js new file mode 100644 index 0000000..56c3b10 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/ranges.js @@ -0,0 +1,34 @@ +jQuery(document).ready( function($) { + jQuery( 'select.range-input' ).each( function () { + // Get the range field's ID value. + var idValue = jQuery( this ).attr( 'id' ); + + if ( idValue ) { + var select = jQuery( this ); + + var selectedValue = select.val(); + + var numberOfOptions = jQuery( this ).find( 'option' ).length; + + var slider = jQuery( '
                ' ).insertAfter( select ).slider({ + min: 1, + max: parseInt( numberOfOptions ), + range: 'min', + value: select[0].selectedIndex + 1, + slide: function( event, ui ) { + select[0].selectedIndex = ui.value - 1; + jQuery( this ).parents( 'td' ).find( '.slider-value' ).text( select.val() ); + } + }); + + slider.after( '
                ' + selectedValue + '
                ' ); + + select.hide(); + + select.change(function() { + slider.slider( "value", this.selectedIndex + 1 ); + jQuery( this ).parents( 'td' ).find( '.slider-value' ).text( jQuery( this ).val() ); + }); + } + }); +}); \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/shortcode-creator.js b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/shortcode-creator.js new file mode 100644 index 0000000..0345f43 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/shortcode-creator.js @@ -0,0 +1,100 @@ +jQuery(document).ready( function ( e ) { + // Hide the advanced settings on first load, toggled via the ".advanced-settings" button. + jQuery( '#wooslider-advanced-settings' ).hide(); + jQuery( 'a.advanced-settings' ).click( function ( e ) { + jQuery( '#wooslider-advanced-settings' ).toggle(); + }); + + // Hide the conditional boxes on first load, and show only the relevant section. + var currentType = jQuery( 'select#slider_type' ).val(); + if ( typeof( currentType ) != 'undefined' ) { + jQuery( '.conditional:not(".conditional-' + currentType + '")' ).hide(); + jQuery( '.conditional-' + currentType + '' ).show(); + } + + jQuery( 'select#slider_type' ).change( function ( e ) { + var currentType = jQuery( 'select#slider_type' ).val(); + if ( typeof( currentType ) != 'undefined' ) { + jQuery( '.conditional:not(".conditional-' + currentType + '")' ).hide(); + jQuery( '.conditional-' + currentType + '' ).show(); + } + }); + + // Shortcode creator logic. + jQuery( 'form#wooslider-insert' ).submit( function ( e ) { + var shortcode_atts = ''; + + for ( var prop in wooslider_settings ) { + if ( wooslider_settings.hasOwnProperty( prop ) ) { + var defaultValue = wooslider_settings[prop]; + var element = jQuery( this ).find( '#' + prop + ':visible, #' + prop + '.range-input' ); + // Ignore the form fields if they're in a conditional box and that box is hidden. + if ( element.parents( '.conditional' ).length == 1 && element.parents( '.conditional' ).is( ':hidden' ) ) { continue; } + + if ( element ) { + // Checkboxes. + if ( element.is( 'input' ) && 'checkbox' == element.attr( 'type' ) ) { + if ( element.attr( 'checked' ) && defaultValue != 1 ) { + shortcode_atts += ' ' + prop + '="true"'; + } + if ( element.attr( 'checked' ) != 'checked' && defaultValue != 0 ) { + shortcode_atts += ' ' + prop + '="false"'; + } + } + + // Select fields. + if ( element.is( 'select' ) && element.val() != defaultValue ) { + shortcode_atts += ' ' + prop + '="' + element.val() + '"'; + } + + // Radio buttons. + if ( element.is( 'input' ) && 'radio' == element.attr( 'type' ) ) { + shortcode_atts += ' ' + prop + '="' + element.val() + '"'; + } + + // Text input fields. + if ( element.is( 'input' ) && ( 'text' == element.attr( 'type' ) ) && element.val() != defaultValue ) { + shortcode_atts += ' ' + prop + '="' + element.val() + '"'; + } + } + } + + // Cater for multicheck fields and individual checkbox fields. + if ( wooslider_settings.hasOwnProperty( prop ) ) { + var defaultValue = wooslider_settings[prop]; + var element = jQuery( this ).find( 'input.multicheck.multicheck-' + prop + ':checked' ); + // Ignore the form fields if they're in a conditional box and that box is hidden. + if ( element.parents( '.conditional' ).length == 1 && element.parents( '.conditional' ).is( ':hidden' ) ) { continue; } + + var options_string = ''; + if ( element.length && element.is( 'input[type="checkbox"]' ) && element.hasClass( 'multicheck' ) ) { + element.each( function ( i, e ) { + if ( i > 0 ) { options_string += ','; } + options_string += jQuery( this ).val(); + }); + } + + if ( options_string != '' ) { + shortcode_atts += ' ' + prop + '="' + options_string + '"'; + } + } + + // Cater for radio inputs. + if ( wooslider_settings.hasOwnProperty( prop ) ) { + var defaultValue = wooslider_settings[prop]; + var element = jQuery( this ).find( 'input[type="radio"][name="' + prop + '"]:checked' ); + // Ignore the form fields if they're in a conditional box and that box is hidden. + if ( element.parents( '.conditional' ).length == 1 && element.parents( '.conditional' ).is( ':hidden' ) ) { continue; } + + if ( element.length && element.is( 'input[type="radio"]' ) ) { + shortcode_atts += ' ' + prop + '="' + element.val() + '"'; + } + } + } + + var shortcode = '[wooslider' + shortcode_atts + '] '; + var win = window.dialogArguments || opener || parent || top; + win.send_to_editor( shortcode ); + return false; +}); +}); \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/shortcode-creator.min.js b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/shortcode-creator.min.js new file mode 100644 index 0000000..a1c85be --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/shortcode-creator.min.js @@ -0,0 +1,4 @@ +jQuery(document).ready(function(){jQuery("#wooslider-advanced-settings").hide();jQuery("a.advanced-settings").click(function(){jQuery("#wooslider-advanced-settings").toggle()});var f=jQuery("select#slider_type").val();"undefined"!=typeof f&&(jQuery('.conditional:not(".conditional-'+f+'")').hide(),jQuery(".conditional-"+f+"").show());jQuery("select#slider_type").change(function(){var b=jQuery("select#slider_type").val();"undefined"!=typeof b&&(jQuery('.conditional:not(".conditional-'+b+'")').hide(), +jQuery(".conditional-"+b+"").show())});jQuery("form#wooslider-insert").submit(function(){var b="",c;for(c in wooslider_settings){if(wooslider_settings.hasOwnProperty(c)){var d=wooslider_settings[c],a=jQuery(this).find("#"+c+":visible, #"+c+".range-input");if(1==a.parents(".conditional").length&&a.parents(".conditional").is(":hidden"))continue;a&&(a.is("input")&&"checkbox"==a.attr("type")&&(a.attr("checked")&&1!=d&&(b+=" "+c+'="true"'),"checked"!=a.attr("checked")&&0!=d&&(b+=" "+c+'="false"')),a.is("select")&& +a.val()!=d&&(b+=" "+c+'="'+a.val()+'"'),a.is("input")&&"radio"==a.attr("type")&&(b+=" "+c+'="'+a.val()+'"'),a.is("input")&&("text"==a.attr("type")&&a.val()!=d)&&(b+=" "+c+'="'+a.val()+'"'))}if(wooslider_settings.hasOwnProperty(c)){d=wooslider_settings[c];a=jQuery(this).find("input.multicheck.multicheck-"+c+":checked");if(1==a.parents(".conditional").length&&a.parents(".conditional").is(":hidden"))continue;var e="";a.length&&(a.is('input[type="checkbox"]')&&a.hasClass("multicheck"))&&a.each(function(a){0< +a&&(e+=",");e+=jQuery(this).val()});""!=e&&(b+=" "+c+'="'+e+'"')}wooslider_settings.hasOwnProperty(c)&&(d=wooslider_settings[c],a=jQuery(this).find('input[type="radio"][name="'+c+'"]:checked'),1==a.parents(".conditional").length&&a.parents(".conditional").is(":hidden")||a.length&&a.is('input[type="radio"]')&&(b+=" "+c+'="'+a.val()+'"'))}(window.dialogArguments||opener||parent||top).send_to_editor("[wooslider"+b+"] ");return!1})}); \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/tabs-navigation.js b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/tabs-navigation.js new file mode 100644 index 0000000..ccadbb4 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/assets/js/tabs-navigation.js @@ -0,0 +1,31 @@ +jQuery(document).ready( function($) { + // Make sure each heading has a unique ID. + jQuery( 'ul#settings-sections.subsubsub' ).find( 'a' ).each( function ( i ) { + var id_value = jQuery( this ).attr( 'href' ).replace( '#', '' ); + jQuery( 'h3:contains("' + jQuery( this ).text() + '")' ).attr( 'id', id_value ).addClass( 'section-heading' ); + }); + + jQuery( '#wooslider .subsubsub a.tab' ).click( function ( e ) { + // Move the "current" CSS class. + jQuery( this ).parents( '.subsubsub' ).find( '.current' ).removeClass( 'current' ); + jQuery( this ).addClass( 'current' ); + + // If "All" is clicked, show all. + if ( jQuery( this ).hasClass( 'all' ) ) { + jQuery( '#wooslider h3, #wooslider form p, #wooslider table.form-table, p.submit' ).show(); + + return false; + } + + // If the link is a tab, show only the specified tab. + var toShow = jQuery( this ).attr( 'href' ); + + // Remove the first occurance of # from the selected string (will be added manually below). + toShow = toShow.replace( '#', '', toShow ); + + jQuery( '#wooslider h3, #wooslider form > p:not(".submit"), #wooslider table' ).hide(); + jQuery( 'h3#' + toShow ).show().nextUntil( 'h3.section-heading', 'p, table, table p' ).show(); + + return false; + }); +}); \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/changelog.txt b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/changelog.txt new file mode 100644 index 0000000..7c7bd3c --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/changelog.txt @@ -0,0 +1,82 @@ +*** WooSlider Changelog *** + +2012.02.01 - version 1.0.9 + * /inc/woo-functions.php - Added is_woocommerce_active + * /inc/class-wc-dependencies.php - Added to detect WooCommerce +2012.12.06 - version 1.0.7 + * /assets/js/jquery.flexslider.js - Introduce non-minified version of FlexSlider, for debugging in SCRIPT_DEBUG mode. + * /assets/js/jquery.flexslider.min.js - Upgrade to the latest version of FlexSlider. RENAMED from "-min" to ".min" in accordance with the WordPress script file naming convention. + * /assets/js/shortcode-creator.js - Code standards optimisations. + * /assets/js/jquery.mousewheel.js, + * /assets/js/jquery.mousewheel.min.js - Introduce jQuery Mousewheel script, for use with the "mousewheel" parameter. + * /assets/css/style.css - Adds basic resets for slides, images within slides and control navigation for better theme compatibility. + * /classes/class-wooslider-sliders.php - Adds orderby and order arguments for attachment based sliders, default to menu_order to support drag/drop ordering of attachment slides. Pass settings through when retrieving slides. For future use and enhancements. + * /classes/class-wooslider-admin.php - Introduces "id" parameter, to assign a specific ID value to a slideshow. Adds minified version of the script, as well as SCRIPT_DEBUG logic. Introduce FlexSlider "sync" parameter. + * /classes/class-wooslider-frontend.php - Adjusts slideshow JavaScript generation to account for new custom "id" field. Introduce FlexSlider "sync" parameter. + * /classes/class-wooslider-updater.php - REMOVED + * /classes/class-wooslider.php - Removes logic for loading the previous plugin updater code. + * /inc/wooslider-template.php - Adds support for the new custom "id" field. + * /inc/woo-functions.php - Introduces functionality for integration with the "WooThemes Updater" plugin. + * wooslider.php - Integrate with the "WooThemes Updater" plugin. + +2012.11.08 - version 1.0.6 + * /assets/css/global.css - Adjust CSS for the admin menu icon for WordPress 3.5-beta compatibility. + * /classes/class-wooslider-settings.php - Add setting to control "touch" parameter. + * /classes/class-wooslider-admin.php - Update version number on "global.css' enqueue. Fix and update the "shortcode-creator" script enqueue. Load "shortcode-creator" JavaScript in the header instead of the footer. + * /classes/class-wooslider-posttypes.php - Change image dimensions in admin columns to include height value. Fixes "undefined offset" notice. + * /classes/class-wooslider-sliders.php - Remove get_the_ID() from the call to get_the_excerpt() when rendering "posts" slideshows. Fixes "undefined index" on "thumbnails" when rendering "posts" slideshows. + * /classes/class-wooslider-frontend.php - Load slideshow JavaScript directly in "wp_footer" instead of using a transient to load via a separate URL. Removed "trigger_javascript_generator()" method, as no longer used. Added logic for outputting "touch" parameter in generated JavaScript. + * /inc/wooslider-template.php - Don't display the slideshow markup if there are no slides rendered. Add the ability to use do_action( 'wooslider' ) to display a slideshow instead of using the template tag. + * /assets/js/tabs-navigation.js - Compatibilty with jQuery 1.8.2 in WordPress 3.5 beta. + +2012.09.03 - version 1.0.5 + * /assets/css/flexslider.css - Make sure ".carousel" and the general clearfix styles are prefixed with ".wooslider". Add missing browser-prefixed box-shadow properties to ".wooslider". + * /classes/class-wooslider-admin.php - Adjust logic for the popup's JavaScript and conditional fields loading, to fix issue when Network Activated on a WordPress MultiSite Network. + * /classes/class-wooslider-sliders.php - Make sure the thumbnails generate correctly for the "Attached Images Slideshow" widget. Wrap $slides in the "wooslider_get_slides" filter, passing through $slides, $type and $args. Link the post thumbnail to the post if the "link title to it's post" option is enabled in the "posts" slideshow type. Add basic support for the [embed] shortcode to the "slides" slideshow type. + * /widgets/widget-wooslider-slides.php - Make sure the "Slide Groups" functionality works correctly in the "Slides Slideshow" widget. + * /widgets/widget-wooslider-attachments.php - Make sure $instance keys are unset correctly if added to $extra_args, to prevent them being added to $settings as well. + * /inc/wooslider-template.php - Minor refinements and updates to the "[wooslider]" shortcode. + * /lang/wooslider-en_GB.po - Rescan language translation file. + * /lang/wooslider-xx_XX.pot - Rescan language translation file. + +2012.08.22 - version 1.0.4 + * /classes/class-wooslider-settings.php - Added contextual help for each WooSlider administration screen. Made sure that contextual help displays only where necessary within the WordPress admin. Specifiy "settings_version" as the WooSlider version. + * /classes/class-wooslider-settings-api.php - Add support for the "settings_version" property, to be displayed next to the title of the settings screen. + * /classes/class-wooslider-frontend.php - Fixed logic around the generation of the JavaScript for the boolean settings. Fixes issue of navigation not being able to be disabled. Add get_theme() method. + * /classes/class-wooslider-admin.php - Add support and markup in the popup for the "theme" field. + * /classes/class-wooslider-utils.php - Add get_slider_themes() method. + * /classes/class-wooslider-posttypes.php - Make "slide-page" taxonomy non-hierarchical. Hide "Popular" section above the "Add Slide Group" form in the WordPress admin. Remove unused "remove_wooframework_metabox()" method. + * /inc/wooslider-template.php - Add support for the "theme" field in the output function, using the get_theme() method in the frontend class. + * /widgets/widget-wooslider-base.php - Add support for theme selection, if multiple themes are available. Make sure settings aren't overridden if the "Customise Advanced Settings" checkbox isn't checked. + * /widgets/widget-wooslider-attachments.php - Make sure settings aren't overridden if the "Customise Advanced Settings" checkbox isn't checked. + * /widgets/widget-wooslider-posts.php - Make sure settings aren't overridden if the "Customise Advanced Settings" checkbox isn't checked. + * /widgets/widget-wooslider-slides.php - Make sure settings aren't overridden if the "Customise Advanced Settings" checkbox isn't checked. + * /assets/css/settings.css - Add styling for the settings version number display. + * /lang/wooslider-en_GB.po - Rescan language translation file. + * /lang/wooslider-xx_XX.pot - Rescan language translation file. + +2012.08.16 - version 1.0.3 + * /classes/class-wooslider-frontend.php - Change 'true' to a boolean true to fix checkbox logic error. Make sure the booelan values are being checked for correctly when generating the slideshow JavaScript. + * /classes/class-wooslider-admin.php - Manually enqueue the "ranges" and "image selector" JavaScript files. + * /classes/class-wooslider-sliders.php - Add "display_excerpt" option to the "posts" slideshow type. Remove unused get_placeholder_image() method in favour of the method present in the WooSlider_Utils class. + * /widgets/widget-wooslider-base.php - Adjusted how default fields are saved per widget. Ensure that widget-specific fields save correctly at each scenario (init, update). + * /lang/wooslider-en_GB.po - Rescanned language file. + +2012.08.09 - version 1.0.2 + * /classes/class-wooslider-admin.php - Add support for "text" input field types to the conditional popup fields. Remove second enqueue of field scripts, which is no longer required in the popup. + * /classes/class-wooslider-settings-api.php - Adjust the enqueue_field_styles() method call to ensure that field-specific styles are conditionally loaded correctly. + * /classes/class-wooslider-sliders.php - Add shortcode support and wptexturize for the content of slides in the "slides" slideshow type. + * /widgets/widget-wooslider-base.php - Make sure that "range" fields display correctly as select box fields. Ensure that "advanced settings" save correctly when in use. + * /assets/js/shortcode-creator.js - Look for hidden select boxes for "range" fields, as well as the default field check, when creating the shortcode. + +2012.08.07 - version 1.0.1 + * /classes/class-wooslider.php - Check if WooThemes_Plugin_Updater class exists to avoid plugin updater conflicts. Add "post-thumbnails" support if the theme doesn't natively support it. + * /classes/class-wooslider-frontend.php - Bump "wooslider-common" stylesheet version to 1.0.1. Make sure "autoslide" can be disabled via the shortcode. + * /classes/class-wooslider-sliders.php - Make sure the postdata is reset correctly after retrieving the slides for the "slides" slideshow type. + * /assets/css/flexslider.css - Move slideshow-specific styles to "style.css". Adjust styling of the "active" CSS classes to be "wooslider-active" in accordance with FlexSlider version 2.1 update. + * /assets/css/style.css - Add slideshow-specific styles from "flexslider.css". Fixed image and excerpt z-index. + * /assets/js/jquery.flexslider-min.js - Upgrade FlexSlider to version 2.1. + * /lang/en_GB.po - Rescan language translation file. + +2012.08.07 - version 1.0.0 + * First release. Woo! \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php new file mode 100644 index 0000000..fd2462b --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-admin.php @@ -0,0 +1,568 @@ +token . '-global', $wooslider->plugin_url . 'assets/css/global.css', '', '1.0.6', 'screen' ); + wp_enqueue_style( $wooslider->token . '-global' ); + } // End admin_styles_global() + + /** + * Filter the "Add Media" popup's tabs, to add our own. + * @since 1.0.0 + * @param array $tabs The existing array of tabs. + */ + public function add_media_tab ( $tabs ) { + $tabs['wooslider'] = __( 'FlexSlider', 'wooslider' ); + return $tabs; + } // End add_media_tab() + + /** + * Display the tab content in a WordPress iframe. + * @since 1.0.0 + * @return void + */ + public function media_tab_handle () { + wp_iframe( array( &$this, 'media_tab_process' ) ); + } // End media_tab_handle() + + /** + * Create the tab content to be displayed. + * @since 1.0.0 + * @uses global $wooslider Global $wooslider object + * @return void + */ + public function media_tab_process () { + global $wooslider; + media_upload_header(); + $wooslider->post_types->setup_slide_pages_taxonomy(); +?> +
                + + popup_fields(); ?> +

                +
                +

                + display_special_settings(); + settings_fields( $wooslider->settings->token ); + do_settings_sections( $wooslider->settings->token ); + ?> +
                + +
                +settings->enqueue_field_styles(); + + $wooslider->settings->enqueue_scripts(); + + wp_enqueue_script( 'wooslider-settings-ranges' ); + wp_enqueue_script( 'wooslider-settings-imageselectors' ); + + wp_enqueue_style( 'wooslider-settings-ranges' ); + wp_enqueue_style( 'wooslider-settings-imageselectors' ); + + $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; + wp_register_script( $wooslider->token . '-media-tab', esc_url( $wooslider->plugin_url . 'assets/js/shortcode-creator' . $suffix . '.js' ), array( 'jquery' ), '1.0.7', false ); + wp_enqueue_script( $wooslider->token . '-media-tab' ); + + $settings = $wooslider->settings->get_settings(); + + // Allow themes/plugins to filter here. + $settings['category'] = ''; + $settings['tag'] = ''; + $settings['slide_page'] = ''; + $settings['slider_type'] = ''; + $settings['theme'] = 'default'; + $settings['layout'] = ''; + $settings['overlay'] = ''; + $settings['limit'] = '5'; + $settings['thumbnails'] = ''; + $settings['link_title'] = ''; + $settings['display_excerpt'] = '1'; + $settings['id'] = ''; + $settings['sync'] = ''; + // $settings['as_nav_for'] = ''; + $settings = (array)apply_filters( 'wooslider_popup_settings', $settings ); + + wp_localize_script( $wooslider->token . '-media-tab', $wooslider->token . '_settings', $settings ); + } // End media_tab_js() + + /** + * Fields specific to the "Add Media" popup. + * @since 1.0.0 + * @return void + */ + public function popup_fields () { + $types = WooSlider_Utils::get_slider_types(); + + $slider_types = array(); + foreach ( (array)$types as $k => $v ) { + $slider_types[$k] = $v['name']; + } +?> + + + + + + + + + + + + + + + + + +
                +

                +
                +

                +
                +

                +
                + + + + + + + + + + + +*/ ?> + +
                +

                +
                +

                +
                + $v ) { + if ( method_exists( $this, 'conditional_fields_' . $k ) ) { + echo '
                ' . "\n"; + $this->{'conditional_fields_' . $k}(); + echo '
                ' . "\n"; + } + } + } // End add_default_conditional_fields() + + /** + * Conditional fields, displayed only for the "attachments" slideshow type. + * @since 1.0.0 + * @return void + */ + private function conditional_fields_attachments () { + global $wooslider; + + $fields = $this->generate_conditional_fields_attachments(); +?> + + + $v ) { ?> + + + + + + +
                + generate_field_by_type( $v['type'], $v['args'] ); ?> +

                +
                +generate_conditional_fields_posts(); +?> + + + $v ) { ?> + + + + + + +
                + generate_field_by_type( $v['type'], $v['args'] ); ?> +

                +
                +generate_conditional_fields_slides(); +?> + + + $v ) { ?> + + + + + + +
                + generate_field_by_type( $v['type'], $v['args'] ); ?> +

                +
                +' . "\n"; + + echo $html; + break; + + // Select fields. + case 'select': + $html = '' . "\n"; + + echo $html; + break; + + // Single checkbox. + case 'checkbox': + $default = ''; + if ( isset( $args['data']['default'] ) ) { $default = $args['data']['default']; } + $checked = checked( $default, 'true', false) ; + $html = ' ' . "\n"; + echo $html; + + break; + + // Multiple checkboxes. + case 'multicheck': + if ( isset( $args['data']['options'] ) && ( count( (array)$args['data']['options'] ) > 0 ) ) { + $html = '
                ' . "\n"; + foreach ( $args['data']['options'] as $k => $v ) { + $checked = ''; + $html .= ' ' . $v . '
                ' . "\n"; + } + $html .= '
                ' . "\n"; + echo $html; + } + + break; + + // Image selectors. + case 'images': + if ( isset( $args['data']['options'] ) && ( count( (array)$args['data']['options'] ) > 0 ) ) { + $html = ''; + foreach ( $args['data']['options'] as $k => $v ) { + $image_url = $wooslider->plugin_url . '/assets/images/default.png'; + if ( isset( $args['data']['images'][$k] ) ) { + $image_url = $args['data']['images'][$k]; + } + $image = '' . esc_attr( $v ) . ''; + $html .= ' ' . $image . "\n"; + } + echo $html; + } + break; + } + } + } // End generate_field_by_type() + + /** + * Generate an array of the conditional fields for the default slider types. + * @since 1.0.0 + * @param array $types The supported slideshow types. + * @return array $fields. + */ + public function generate_default_conditional_fields ( $types ) { + $fields = array(); + foreach ( (array)$types as $k => $v ) { + if ( method_exists( $this, 'generate_conditional_fields_' . $k ) ) { + $fields[$k] = (array)$this->{'generate_conditional_fields_' . $k}(); + } + } + + return $fields; + } // End generate_default_conditional_fields() + + /** + * Generate conditional fields for the "attachments" slideshow type. + * @since 1.0.0 + * @return array $fields An array of fields. + */ + private function generate_conditional_fields_attachments () { + $fields = array(); + + $limit_options = array(); + for ( $i = 1; $i <= 20; $i++ ) { + $limit_options[$i] = $i; + } + $limit_args = array( 'key' => 'limit', 'data' => array( 'options' => $limit_options, 'default' => 5 ) ); + $thumbnails_args = array( 'key' => 'thumbnails', 'data' => array() ); + + // Create final array. + $fields['limit'] = array( 'name' => __( 'Number of Images', 'wooslider' ), 'type' => 'select', 'args' => $limit_args, 'description' => __( 'The maximum number of images to display', 'wooslider' ) ); + $fields['thumbnails'] = array( 'name' => __( 'Use thumbnails for Pagination', 'wooslider' ), 'type' => 'checkbox', 'args' => $thumbnails_args, 'description' => __( 'Use thumbnails for pagination, instead of "dot" indicators', 'wooslider' ) ); + + return $fields; + } // End generate_conditional_fields_attachments() + + /** + * Generate conditional fields for the "slides" slideshow type. + * @since 1.0.0 + * @return array $fields An array of fields. + */ + private function generate_conditional_fields_slides () { + $fields = array(); + + // Categories. + $terms = get_terms( 'slide-page' ); + $terms_options = array(); + if ( ! is_wp_error( $terms ) ) { + foreach ( $terms as $k => $v ) { + $terms_options[$v->slug] = $v->name; + } + } + + $categories_args = array( 'key' => 'slide_page', 'data' => array( 'options' => $terms_options ) ); + + $limit_options = array(); + for ( $i = 1; $i <= 20; $i++ ) { + $limit_options[$i] = $i; + } + $limit_args = array( 'key' => 'limit', 'data' => array( 'options' => $limit_options, 'default' => 5 ) ); + $thumbnails_args = array( 'key' => 'thumbnails', 'data' => array() ); + $display_featured_image_args = array( 'key' => 'display_featured_image', 'data' => array() ); + + // Create final array. + $fields['limit'] = array( 'name' => __( 'Number of Slides', 'wooslider' ), 'type' => 'select', 'args' => $limit_args, 'description' => __( 'The maximum number of slides to display', 'wooslider' ) ); + $fields['slide_page'] = array( 'name' => __( 'Slide Groups', 'wooslider' ), 'type' => 'multicheck', 'args' => $categories_args, 'description' => __( 'The slide groups from which to display slides', 'wooslider' ) ); + $fields['thumbnails'] = array( 'name' => __( 'Use thumbnails for Pagination', 'wooslider' ), 'type' => 'checkbox', 'args' => $thumbnails_args, 'description' => __( 'Use thumbnails for pagination, instead of "dot" indicators (uses featured image)', 'wooslider' ) ); + + return $fields; + } // End generate_conditional_fields_slides() + + /** + * Generate conditional fields for the "posts" slideshow type. + * @since 1.0.0 + * @return array $fields An array of fields. + */ + private function generate_conditional_fields_posts () { + global $wooslider; + + $images_url = $wooslider->plugin_url . '/assets/images/'; + $fields = array(); + + // Categories. + $terms = get_categories(); + $terms_options = array(); + if ( ! is_wp_error( $terms ) ) { + foreach ( $terms as $k => $v ) { + $terms_options[$v->slug] = $v->name; + } + } + + $categories_args = array( 'key' => 'category', 'data' => array( 'options' => $terms_options ) ); + + // Tags. + $terms = get_tags(); + $terms_options = array(); + if ( ! is_wp_error( $terms ) ) { + foreach ( $terms as $k => $v ) { + $terms_options[$v->slug] = $v->name; + } + } + + $tags_args = array( 'key' => 'tag', 'data' => array( 'options' => $terms_options ) ); + + $layout_types = WooSlider_Utils::get_posts_layout_types(); + $layout_options = array(); + + foreach ( (array)$layout_types as $k => $v ) { + $layout_options[$k] = $v['name']; + } + + $layout_images = array( + 'text-left' => esc_url( $images_url . 'text-left.png' ), + 'text-right' => esc_url( $images_url . 'text-right.png' ), + 'text-top' => esc_url( $images_url . 'text-top.png' ), + 'text-bottom' => esc_url( $images_url . 'text-bottom.png' ) + ); + $layouts_args = array( 'key' => 'layout', 'data' => array( 'options' => $layout_options, 'images' => $layout_images ) ); + + $overlay_images = array( + 'none' => esc_url( $images_url . 'default.png' ), + 'full' => esc_url( $images_url . 'text-bottom.png' ), + 'natural' => esc_url( $images_url . 'overlay-natural.png' ) + ); + + $overlay_options = array( 'none' => __( 'None', 'wooslider' ), 'full' => __( 'Full', 'wooslider' ), 'natural' => __( 'Natural', 'wooslider' ) ); + + $overlay_args = array( 'key' => 'overlay', 'data' => array( 'options' => $overlay_options, 'images' => $overlay_images ) ); + + $limit_options = array(); + for ( $i = 1; $i <= 20; $i++ ) { + $limit_options[$i] = $i; + } + $limit_args = array( 'key' => 'limit', 'data' => array( 'options' => $limit_options, 'default' => 5 ) ); + $thumbnails_args = array( 'key' => 'thumbnails', 'data' => array() ); + $link_title_args = array( 'key' => 'link_title', 'data' => array() ); + $display_excerpt_args = array( 'key' => 'display_excerpt', 'data' => array('default' => '1') ); + + // Create final array. + $fields['limit'] = array( 'name' => __( 'Number of Posts', 'wooslider' ), 'type' => 'select', 'args' => $limit_args, 'description' => __( 'The maximum number of posts to display', 'wooslider' ) ); + $fields['thumbnails'] = array( 'name' => __( 'Use thumbnails for Pagination', 'wooslider' ), 'type' => 'checkbox', 'args' => $thumbnails_args, 'description' => __( 'Use thumbnails for pagination, instead of "dot" indicators (uses featured image)', 'wooslider' ) ); + $fields['link_title'] = array( 'name' => __( 'Link the post title to it\'s post', 'wooslider' ), 'type' => 'checkbox', 'args' => $link_title_args, 'description' => __( 'Link the post title to it\'s single post screen', 'wooslider' ) ); + $fields['display_excerpt'] = array( 'name' => __( 'Display the post\'s excerpt', 'wooslider' ), 'type' => 'checkbox', 'args' => $display_excerpt_args, 'description' => __( 'Display the post\'s excerpt on each slide', 'wooslider' ) ); + $fields['layout'] = array( 'name' => __( 'Layout', 'wooslider' ), 'type' => 'images', 'args' => $layouts_args, 'description' => __( 'The layout to use when displaying posts', 'wooslider' ) ); + $fields['overlay'] = array( 'name' => __( 'Overlay', 'wooslider' ), 'type' => 'images', 'args' => $overlay_args, 'description' => __( 'The type of overlay to use when displaying the post text', 'wooslider' ) ); + $fields['category'] = array( 'name' => __( 'Categories', 'wooslider' ), 'type' => 'multicheck', 'args' => $categories_args, 'description' => __( 'The categories from which to display posts', 'wooslider' ) ); + $fields['tag'] = array( 'name' => __( 'Tags', 'wooslider' ), 'type' => 'multicheck', 'args' => $tags_args, 'description' => __( 'The tags from which to display posts', 'wooslider' ) ); + + return $fields; + } // End generate_conditional_fields_posts() +} // End Class +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-frontend.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-frontend.php new file mode 100644 index 0000000..8adf740 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-frontend.php @@ -0,0 +1,306 @@ +sliders = new WooSlider_Sliders(); + $this->sliders->token = $this->token; + } // End __construct() + + /** + * Initialise the code. + * @since 1.0.0 + * @return void + */ + public function init () { + add_action( 'wp_enqueue_scripts', array( &$this, 'enqueue_styles' ) ); + add_action( 'wp_enqueue_scripts', array( &$this, 'enqueue_scripts' ) ); + add_action( 'wp_footer', array( &$this, 'load_slider_javascript' ) ); + } // End init() + + /** + * Generate the JavaScript code for each slider in use on the current screen. + * @since 1.0.0 + * @return void + */ + private function generate_slider_javascript () { + $html = ''; + + // Remove slideshows with no slides, to prevent their JavaScript being generated. + if ( is_array( $this->sliders->sliders ) && count( $this->sliders->sliders ) > 0 ) { + foreach ( $this->sliders->sliders as $k => $v ) { + if ( ! is_array( $v['slides'] ) || 0 >= count( $v['slides'] ) ) { + unset( $this->sliders->sliders[$k] ); + } + } + } + + if ( is_array( $this->sliders->sliders ) && count( $this->sliders->sliders ) > 0 ) { + $html .= '' . "\n"; + } + + return $html; + } // End generate_slider_javascript() + + /** + * Generate the JavaScript for a specified slideshow. + * @uses generate_slider_settings_javascript() + * @since 1.0.0 + * @param int $id The ID of the slider for which to generate the JavaScript. + * @param array $args Arguments to be used in the slider JavaScript. + * @param array $extra Additional, contextual arguments to use when generating the slider JavaScript. + * @return string The JavaScript code pertaining to the specified slider. + */ + private function generate_single_slider_javascript ( $id, $args, $extra = array() ) { + $html = ''; + + // Convert settings to a JavaScript-readable string. + $args_output = $this->generate_slider_settings_javascript( $args, $extra ); + + $html .= "\n" . 'jQuery( \'#' . esc_js( sanitize_key( $id ) ) . '\' ).flexslider2(' . $args_output . ');' . "\n"; + + return $html; + } // End generate_single_slider_javascript() + + /** + * Generate a JavaScript-friendly string of an object containing the slider arguments. + * @since 1.0.0 + * @param array $args Arguments for this slideshow. + * @param array $extra Additional, contextual arguments to use when generating the slider JavaScript. + * @return string A JavaScript-friendly string of arguments. + */ + private function generate_slider_settings_javascript ( $args, $extra = array() ) { + // Begin the arguments output + $args_output = '{'; + + $args_output .= 'namespace: "wooslider-"' . "\n"; + + // Animation + if ( isset( $args['animation'] ) && in_array( $args['animation'], WooSlider_Utils::get_supported_effects() ) ) { + $args_output .= ', animation: \'' . $args['animation'] . '\''; + } + + // Direction + if ( ( $args['animation'] == 'slide' ) && isset( $args['direction'] ) && in_array( $args['direction'], array( 'horizontal', 'vertical' ) ) ) { + $args_output .= ', direction: \'' . $args['direction'] . '\''; + } + + // Slideshow Speed + if ( isset( $args['slideshow_speed'] ) && is_numeric( $args['slideshow_speed'] ) && ( floatval( $args['slideshow_speed'] ) > 0 ) ) { + $args_output .= ', slideshowSpeed: ' . ( $args['slideshow_speed'] ) * 1000; + } + + // Animation Duration + if ( isset( $args['animation_duration'] ) && is_numeric( $args['animation_duration'] ) && ( floatval( $args['animation_duration'] ) > 0 ) ) { + $args_output .= ', animationSpeed: ' . ( $args['animation_duration'] ) * 1000; + } + + // Checkboxes. + $options = array( + 'autoslide' => 'slideshow', + 'direction_nav' => 'directionNav', + 'keyboard_nav' => 'keyboard', + 'mousewheel_nav' => 'mousewheel', + 'playpause' => 'pausePlay', + 'randomize' => 'randomize', + 'animation_loop' => 'animationLoop', + 'pause_on_action' => 'pauseOnAction', + 'pause_on_hover' => 'pauseOnHover', + 'smoothheight' => 'smoothHeight', + 'touch' => 'touch' + ); + + if ( isset( $extra['thumbnails'] ) && ( $extra['thumbnails'] == 'true' || $extra['thumbnails'] == 1 ) ) { + $args_output .= ', controlNav: "thumbnails"' . "\n"; + } else { + $options['control_nav'] = 'controlNav'; + } + + // Process the checkboxes. + foreach ( $options as $k => $v ) { + $status = 'false'; + if ( isset( $args[$k] ) && ( ( $args[$k] == 'true' && $args[$k] != 'false' ) || $args[$k] == 1 ) ) { + $status = 'true'; + } + + $args_output .= ', ' . esc_js( $v ) . ': ' . $status; + } + + // Text fields. + $options = array( + 'prev_text' => array( 'key' => 'prevText', 'default' => __( 'Previous', 'wooslider' ) ), + 'next_text' => array( 'key' => 'nextText', 'default' => __( 'Next', 'wooslider' ) ), + 'play_text' => array( 'key' => 'playText', 'default' => __( 'Play', 'wooslider' ) ), + 'pause_text' => array( 'key' => 'pauseText', 'default' => __( 'Pause', 'wooslider' ) ) + ); + + // Process the text fields. + foreach ( $options as $k => $v ) { + if ( isset( $args[$k] ) && ( $args[$k] != $v['default'] ) ) { + $args_output .= ', ' . esc_js( $v['key'] ) . ': \'' . esc_js( $args[$k] ) . '\''; + } + } + + // CSS Selector fields. + $options = array( + 'sync' => array( 'key' => 'sync', 'default' => '' ), + 'as_nav_for' => array( 'key' => 'asNavFor', 'default' => '' ) + ); + + // Process the CSS selector fields. + foreach ( $options as $k => $v ) { + if ( isset( $extra[$k] ) && ( $extra[$k] != $v['default'] ) ) { + $args_output .= ', ' . esc_js( $v['key'] ) . ': \'' . esc_js( '#' . $extra[$k] ) . '\''; + } + } + + // End the arguments output + $args_output .= '}'; + + return $args_output; + } // End generate_slider_settings_javascript() + + /** + * Load the slider JavaScript in the footer. + * @since 1.0.6 + * @return void + */ + public function load_slider_javascript () { + echo $this->generate_slider_javascript(); + + // Conditionally load the theme stylesheets in the footer as well. + $this->maybe_load_theme_stylesheets(); + } // End load_slider_javascript() + + /** + * Enqueue frontend JavaScripts. + * @since 1.0.0 + * @return void + */ + public function enqueue_scripts () { + global $wooslider; + + $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; + wp_register_script( $this->token . '-mousewheel', esc_url( $wooslider->plugin_url . 'assets/js/jquery.mousewheel' . $suffix . '.js' ), array( 'jquery' ), '2.1.0-20121206', true ); + wp_register_script( $this->token . '-flexslider', esc_url( $wooslider->plugin_url . 'assets/js/jquery.flexslider' . $suffix . '.js' ), array( 'jquery', $this->token . '-mousewheel' ), '2.1.0-20121206', true ); + wp_enqueue_script( $this->token . '-flexslider' ); + } // End enqueue_scripts() + + /** + * Enqueue frontend CSS files. + * @since 1.0.0 + * @return void + */ + public function enqueue_styles () { + global $wooslider; + + wp_register_style( $this->token . '-flexslider', esc_url( $wooslider->plugin_url . 'assets/css/flexslider.css' ), '', '1.0.1', 'all' ); + wp_register_style( $this->token . '-common', esc_url( $wooslider->plugin_url . 'assets/css/style.css' ), array( $this->token . '-flexslider' ), '1.0.1', 'all' ); + + wp_enqueue_style( $this->token . '-common' ); + } // End enqueue_styles() + + /** + * Make sure the desired theme is valid. If not, return 'default'. + * @since 1.0.4 + * @param array $args Arguments for the current slideshow. + * @return string The slug of the theme, or 'default'. + */ + public function is_valid_theme ( $args ) { + $response = false; + if ( is_array( $args ) && isset( $args['theme'] ) && in_array( $args['theme'], array_keys( WooSlider_Utils::get_slider_themes() ) ) ) { + $response = true; + } + return $response; + } // End is_valid_theme() + + /** + * Make sure the desired theme is valid. If not, return 'default'. + * @since 1.0.4 + * @param array $args Arguments for the current slideshow. + * @return string The slug of the theme, or 'default'. + */ + public function get_sanitized_theme_key ( $args ) { + $theme = 'default'; + if ( is_array( $args ) && isset( $args['theme'] ) && in_array( $args['theme'], array_keys( WooSlider_Utils::get_slider_themes() ) ) ) { + $theme = esc_attr( strtolower( $args['theme'] ) ); + } + return $theme; + } // End get_sanitized_theme_key() + + /** + * Get data for a specified theme. + * @since 1.0.4 + * @param array $args Arguments for the current slideshow. + * @return string The slug of the theme, or 'default'. + */ + public function get_theme_data ( $key ) { + $theme = array( 'name' => 'default', 'stylesheet' => '' ); + if ( in_array( $key, array_keys( WooSlider_Utils::get_slider_themes() ) ) ) { + $themes = WooSlider_Utils::get_slider_themes(); + $theme = $themes[esc_attr( $key )]; + } + return $theme; + } // End get_theme_data() + + /** + * Maybe load stylesheets for the themes in use. + * @since 1.0.4 + * @return void + */ + public function maybe_load_theme_stylesheets () { + if ( isset( $this->sliders->sliders ) && ( 0 < $this->sliders->sliders ) ) { + foreach ( $this->sliders->sliders as $k => $v ) { + if ( isset( $v['extra']['theme'] ) && ( '' != $v['extra']['theme'] ) ) { + $theme_data = $this->get_theme_data( $v['extra']['theme'] ); + if ( isset( $theme_data['stylesheet'] ) && ( '' != $theme_data['stylesheet'] ) ) { + wp_enqueue_style( 'wooslider-theme-' . esc_attr( $v['extra']['theme'] ), esc_url( $theme_data['stylesheet'] ) ); + } + } + } + } + } // End maybe_load_theme_stylesheets() +} // End Class +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php new file mode 100644 index 0000000..a378059 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-posttypes.php @@ -0,0 +1,284 @@ +labels = array(); + $this->setup_post_type_labels_base(); + add_action( 'init', array( &$this, 'setup_slide_post_type' ), 100 ); + add_action( 'init', array( &$this, 'setup_slide_pages_taxonomy' ), 100 ); + + if ( is_admin() ) { + global $pagenow; + if ( ( $pagenow == 'post.php' || $pagenow == 'post-new.php' ) ) { + add_filter( 'enter_title_here', array( &$this, 'enter_title_here' ), 10 ); + add_filter( 'post_updated_messages', array( &$this, 'setup_post_type_messages' ) ); + } + add_filter( 'manage_edit-slide_columns', array( &$this, 'add_column_headings' ), 10, 1 ); + add_action( 'manage_posts_custom_column', array( &$this, 'add_column_data' ), 10, 2 ); + } + } // End __construct() + + /** + * Setup the "slide" post type, it's admin menu item and the appropriate labels and permissions. + * @since 1.0.0 + * @uses global $wooslider + * @return void + */ + public function setup_slide_post_type () { + global $wooslider; + + $args = array( + 'labels' => $this->create_post_type_labels( 'slide', $this->labels['slide']['singular'], $this->labels['slide']['plural'], $this->labels['slide']['menu'] ), + 'public' => false, + 'publicly_queryable' => true, + 'show_ui' => true, + 'show_in_menu' => true, + 'query_var' => true, + 'rewrite' => array( 'slug' => 'slider', 'with_front' => false, 'feeds' => false, 'pages' => false ), + 'capability_type' => 'post', + 'has_archive' => false, + 'hierarchical' => false, + 'menu_position' => 100, // Below "Pages" + 'menu_icon' => esc_url( $wooslider->plugin_url . 'assets/images/icon_slide_16.png' ), + 'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail' ) + ); + + register_post_type( 'slide', $args ); + } // End setup_slide_post_type() + + /** + * Setup the "slide-page" taxonomy, linked to the "slide" post type. + * @since 1.0.0 + * @return void + */ + public function setup_slide_pages_taxonomy () { + // "Slide Groups" Custom Taxonomy + $labels = array( + 'name' => _x( 'Slide Groups', 'taxonomy general name', 'wooslider' ), + 'singular_name' => _x( 'Slide Group', 'taxonomy singular name', 'wooslider' ), + 'search_items' => __( 'Search Slide Groups', 'wooslider' ), + 'all_items' => __( 'All Slide Groups', 'wooslider' ), + 'parent_item' => __( 'Parent Slide Group', 'wooslider' ), + 'parent_item_colon' => __( 'Parent Slide Group:', 'wooslider' ), + 'edit_item' => __( 'Edit Slide Group', 'wooslider' ), + 'update_item' => __( 'Update Slide Group', 'wooslider' ), + 'add_new_item' => __( 'Add New Slide Group', 'wooslider' ), + 'new_item_name' => __( 'New Slide Group Name', 'wooslider' ), + 'menu_name' => __( 'Slide Groups', 'wooslider' ), + 'popular_items' => null // Hides the "Popular" section above the "add" form in the admin. + ); + + $args = array( + 'hierarchical' => true, + 'labels' => $labels, + 'show_ui' => true, + 'query_var' => true, + 'rewrite' => array( 'slug' => 'slide-page' ) + ); + + register_taxonomy( 'slide-page', array( 'slide' ), $args ); + } // End setup_slide_pages_taxonomy() + + /** + * Setup the singular, plural and menu label names for the post types. + * @since 1.0.0 + * @return void + */ + private function setup_post_type_labels_base () { + $this->labels = array( 'slide' => array() ); + + $this->labels['slide'] = array( 'singular' => __( 'Slide', 'wooslider' ), 'plural' => __( 'Slides', 'wooslider' ), 'menu' => __( 'FlexSlider', 'wooslider' ) ); + } // End setup_post_type_labels_base() + + /** + * Create the labels for a specified post type. + * @since 1.0.0 + * @param string $token The post type for which to setup labels (used to provide context) + * @param string $singular The label for a singular instance of the post type + * @param string $plural The label for a plural instance of the post type + * @param string $menu The menu item label + * @return array An array of the labels to be used + */ + private function create_post_type_labels ( $token, $singular, $plural, $menu ) { + $labels = array( + 'name' => sprintf( _x( '%s', 'post type general name', 'wooslider' ), $plural ), + 'singular_name' => sprintf( _x( '%s', 'post type singular name', 'wooslider' ), $singular ), + 'add_new' => sprintf( _x( 'Add New %s', $token, 'wooslider' ), $singular ), + 'add_new_item' => sprintf( __( 'Add New %s', 'wooslider' ), $singular ), + 'edit_item' => sprintf( __( 'Edit %s', 'wooslider' ), $singular ), + 'new_item' => sprintf( __( 'New %s', 'wooslider' ), $singular ), + 'all_items' => sprintf( __( 'All %s', 'wooslider' ), $plural ), + 'view_item' => sprintf( __( 'View %s', 'wooslider' ), $singular ), + 'search_items' => sprintf( __( 'Search %s', 'wooslider' ), $plural ), + 'not_found' => sprintf( __( 'No %s found', 'wooslider' ), strtolower( $plural ) ), + 'not_found_in_trash' => sprintf( __( 'No %s found in Trash', 'wooslider' ), strtolower( $plural ) ), + 'parent_item_colon' => '', + 'menu_name' => $menu + ); + + return $labels; + } // End create_post_type_labels() + + /** + * Setup update messages for the post types. + * @since 1.0.0 + * @param array $messages The existing array of messages for post types. + * @return array The modified array of messages for post types. + */ + public function setup_post_type_messages ( $messages ) { + global $post, $post_ID; + + $messages['slide'] = $this->create_post_type_messages( 'slide' ); + + return $messages; + } // End setup_post_type_messages() + + /** + * Create an array of messages for a specified post type. + * @since 1.0.0 + * @param string $post_type The post type for which to create messages. + * @return array An array of messages (empty array if the post type isn't one we're looking to work with). + */ + private function create_post_type_messages ( $post_type ) { + global $post, $post_ID; + + if ( ! isset( $this->labels[$post_type] ) ) { return array(); } + + $messages = array( + 0 => '', // Unused. Messages start at index 1. + 1 => sprintf( __( '%s updated.' ), esc_attr( $this->labels[$post_type]['singular'] ) ), + 2 => __( 'Custom field updated.', 'wooslider' ), + 3 => __( 'Custom field deleted.', 'wooslider' ), + 4 => sprintf( __( '%s updated.', 'wooslider' ), esc_attr( $this->labels[$post_type]['singular'] ) ), + /* translators: %s: date and time of the revision */ + 5 => isset( $_GET['revision']) ? sprintf( __('%2$s restored to revision from %1$s', 'wooslider' ), wp_post_revision_title( (int) $_GET['revision'], false ), esc_attr( $this->labels[$post_type]['singular'] ) ) : false, + 6 => sprintf( __('%2$s published.' ), esc_url( get_permalink($post_ID) ), esc_attr( $this->labels[$post_type]['singular'] ) ), + 7 => sprintf( __( '%s saved.', 'wooslider' ), esc_attr( $this->labels[$post_type]['singular'] ) ), + 8 => sprintf( __( '%2$s submitted.', 'wooslider' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ), esc_attr( $this->labels[$post_type]['singular'] ) ), + 9 => sprintf( __( '%s scheduled for: %1$s.', 'wooslider' ), + // translators: Publish box date format, see http://php.net/date + date_i18n( __( ' M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ), strtolower( esc_attr( $this->labels[$post_type]['singular'] ) ) ), + 10 => sprintf( __( '%s draft updated.', 'wooslider' ), esc_attr( $this->labels[$post_type]['singular'] ) ), + ); + + return $messages; + } // End create_post_type_messages() + + /** + * Change the "Enter Title Here" text for the "slide" post type. + * @access public + * @since 1.0.0 + * @param string $title + * @return string $title + */ + public function enter_title_here ( $title ) { + if ( get_post_type() == 'slide' ) { + $title = __( 'Enter a title for this slide here', 'wooslider' ); + } + + return $title; + } // End enter_title_here() + + /** + * Add column headings to the "slides" post list screen. + * @access public + * @since 1.0.0 + * @param array $defaults + * @return array $new_columns + */ + public function add_column_headings ( $defaults ) { + $new_columns['cb'] = ''; + // $new_columns['id'] = __( 'ID' ); + $new_columns['title'] = _x( 'Slide Title', 'column name', 'wooslider' ); + $new_columns['slide-thumbnail'] = _x( 'Featured Image', 'column name', 'wooslider' ); + $new_columns['slide-page'] = _x( 'Slide Groups', 'column name', 'wooslider' ); + + if ( isset( $defaults['date'] ) ) { + $new_columns['date'] = $defaults['date']; + } + + return $new_columns; + } // End add_column_headings() + + /** + * Add data for our newly-added custom columns. + * @access public + * @since 1.0.0 + * @param string $column_name + * @param int $id + * @return void + */ + public function add_column_data ( $column_name, $id ) { + global $wpdb, $post; + + switch ( $column_name ) { + case 'id': + echo $id; + break; + + case 'slide-page': + $value = __( 'No Slide Groups Specified', 'wooslider' ); + $terms = get_the_terms( $id, 'slide-page' ); + + if ( $terms && ! is_wp_error( $terms ) ) { + $term_links = array(); + + foreach ( $terms as $term ) { + $term_links[] = sprintf( '%s', + esc_url( add_query_arg( array( 'post_type' => 'slide', 'tag_ID' => $term->term_id, 'taxonomy' => 'slide-page', 'action' => 'edit' ), 'edit-tags.php' ) ), + esc_html( sanitize_term_field( 'name', $term->name, $term->term_id, 'slide-page', 'display' ) ) + ); + } + + $value = join( ', ', $term_links ); + } + echo $value; + break; + + case 'slide-thumbnail': + echo '' . "\n"; + if ( has_post_thumbnail( $id ) ) { + the_post_thumbnail( array( 75, 75 ) ); + } else { + echo '' . "\n"; + } + echo '' . "\n"; + break; + + default: + break; + } + } // End add_column_data() +} // End Class +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings-api.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings-api.php new file mode 100644 index 0000000..7c371f6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings-api.php @@ -0,0 +1,873 @@ +token = 'wooslider'; + $this->page_slug = 'wooslider-settings-api'; + + $this->sections = array(); + $this->fields = array(); + $this->remaining_fields = array(); + $this->errors = array(); + + $this->has_range = false; + $this->has_imageselector = false; + $this->has_tabs = false; + $this->tabs = array(); + $this->settings_version = ''; + } // End __construct() + + /** + * setup_settings function. + * + * @access public + * @return void + */ + public function setup_settings () { + add_action( 'admin_menu', array( &$this, 'register_settings_screen' ) ); + add_action( 'admin_init', array( &$this, 'settings_fields' ) ); + + $this->init_sections(); + $this->init_fields(); + $this->get_settings(); + if ( $this->has_tabs == true ) { + $this->create_tabs(); + } + } // End setup_settings() + + /** + * init_sections function. + * + * @access public + * @return void + */ + public function init_sections () { + // Override this function in your class and assign the array of sections to $this->sections. + _e( 'Override init_sections() in your class.', 'wooslider' ); + } // End init_sections() + + /** + * init_fields function. + * + * @access public + * @return void + */ + public function init_fields () { + // Override this function in your class and assign the array of sections to $this->fields. + _e( 'Override init_fields() in your class.', 'wooslider' ); + } // End init_fields() + + /** + * settings_tabs function. + * + * @access public + * @since 1.1.0 + * @return void + */ + public function settings_tabs () { + if ( ! $this->has_tabs ) { return; } + + if ( count( $this->tabs ) > 0 ) { + $html = ''; + + $html .= '
                ' . "\n"; + + echo $html; + } + } // End settings_tabs() + + /** + * create_tabs function. + * + * @access private + * @since 1.1.0 + * @return void + */ + private function create_tabs () { + if ( count( $this->sections ) > 0 ) { + $tabs = array(); + foreach ( $this->sections as $k => $v ) { + $tabs[$k] = $v; + } + + $this->tabs = $tabs; + } + } // End create_tabs() + + /** + * create_sections function. + * + * @access public + * @return void + */ + public function create_sections () { + if ( count( $this->sections ) > 0 ) { + foreach ( $this->sections as $k => $v ) { + add_settings_section( $k, $v['name'], array( &$this, 'section_description' ), $this->token ); + } + } + } // End create_sections() + + /** + * create_fields function. + * + * @access public + * @return void + */ + public function create_fields () { + if ( count( $this->sections ) > 0 ) { + // $this->parse_fields( $this->fields ); + + foreach ( $this->fields as $k => $v ) { + $method = $this->determine_method( $v, 'form' ); + $name = $v['name']; + if ( $v['type'] == 'info' ) { $name = ''; } + add_settings_field( $k, $name, $method, $this->token, $v['section'], array( 'key' => $k, 'data' => $v ) ); + + // Let the API know that we have a colourpicker field. + if ( $v['type'] == 'range' && $this->has_range == false ) { $this->has_range = true; } + } + } + } // End create_fields() + + /** + * determine_method function. + * + * @access protected + * @param array $data + * @return array or string + */ + protected function determine_method ( $data, $type = 'form' ) { + $method = ''; + + if ( ! in_array( $type, array( 'form', 'validate', 'check' ) ) ) { return; } + + // Check for custom functions. + if ( isset( $data[$type] ) ) { + if ( function_exists( $data[$type] ) ) { + $method = $data[$type]; + } + + if ( $method == '' && method_exists( $this, $data[$type] ) ) { + if ( $type == 'form' ) { + $method = array( &$this, $data[$type] ); + } else { + $method = $data[$type]; + } + } + } + + if ( $method == '' && method_exists ( $this, $type . '_field_' . $data['type'] ) ) { + if ( $type == 'form' ) { + $method = array( &$this, $type . '_field_' . $data['type'] ); + } else { + $method = $type . '_field_' . $data['type']; + } + } + + if ( $method == '' && function_exists ( $this->token . '_' . $type . '_field_' . $data['type'] ) ) { + $method = $this->token . '_' . $type . '_field_' . $data['type']; + } + + if ( $method == '' ) { + if ( $type == 'form' ) { + $method = array( &$this, $type . '_field_text' ); + } else { + $method = $type . '_field_text'; + } + } + + return $method; + } // End determine_method() + + /** + * parse_fields function. + * + * @access public + * @since 1.0.0 + * @param array $fields + * @return void + */ + public function parse_fields ( $fields ) { + foreach ( $fields as $k => $v ) { + if ( isset( $v['section'] ) && ( $v['section'] != '' ) && ( isset( $this->sections[$v['section']] ) ) ) { + if ( ! isset( $this->sections[$v['section']]['fields'] ) ) { + $this->sections[$v['section']]['fields'] = array(); + } + + $this->sections[$v['section']]['fields'][$k] = $v; + } else { + $this->remaining_fields[$k] = $v; + } + } + } // End parse_fields() + + /** + * register_settings_screen function. + * + * @access public + * @since 1.0.0 + * @return void + */ + public function register_settings_screen () { + global $wooslider; + + $hook = add_submenu_page( 'edit.php?post_type=slide', $this->name, $this->menu_label, 'manage_options', $this->page_slug, array( &$this, 'settings_screen' ) ); + + $this->hook = $hook; + + if ( isset( $_GET['page'] ) && ( $_GET['page'] == $this->page_slug ) ) { + add_action( 'admin_notices', array( &$this, 'settings_errors' ) ); + add_action( 'admin_print_scripts', array( &$this, 'enqueue_scripts' ) ); + add_action( 'admin_print_styles', array( &$this, 'enqueue_styles' ) ); + } + } // End register_settings_screen() + + /** + * settings_screen function. + * + * @access public + * @return void + */ + public function settings_screen () { + global $wooslider; +?> +
                + +

                name ); ?>settings_version ) { echo ' ' . $this->settings_version . ''; } ?>

                + +
                + settings_tabs(); ?> + token ); ?> + token ); ?> + +
                +
                +settings ) ) { + $this->settings = get_option( $this->token, array() ); + } + + foreach ( $this->fields as $k => $v ) { + if ( ! isset( $this->settings[$k] ) && isset( $v['default'] ) ) { + $this->settings[$k] = $v['default']; + } + if ( $v['type'] == 'checkbox' && $this->settings[$k] != true ) { + $this->settings[$k] = 0; + } + } + + return $this->settings; + } // End get_settings() + + /** + * settings_fields function. + * + * @access public + * @return void + */ + public function settings_fields () { + register_setting( $this->token, $this->token, array( &$this, 'validate_fields' ) ); + $this->create_sections(); + $this->create_fields(); + } // End settings_fields() + + /** + * settings_errors function. + * + * @access public + * @since 1.0.0 + * @return void + */ + public function settings_errors () { + echo settings_errors( $this->token . '-errors' ); + } // End settings_errors() + + /** + * section_description function. + * + * @access public + * @return void + */ + public function section_description ( $section ) { + if ( isset( $this->sections[$section['id']]['description'] ) ) { + echo wpautop( esc_html( $this->sections[$section['id']]['description'] ) ); + } + } // End section_description_main() + + /** + * form_field_text function. + * + * @access public + * @since 1.0.0 + * @param array $args + * @return void + */ + public function form_field_text ( $args ) { + $options = $this->get_settings(); + + echo '' . "\n"; + if ( isset( $args['data']['description'] ) ) { + echo '' . esc_html( $args['data']['description'] ) . '' . "\n"; + } + } // End form_field_text() + + /** + * form_field_checkbox function. + * + * @access public + * @since 1.0.0 + * @param array $args + * @return void + */ + public function form_field_checkbox ( $args ) { + $options = $this->get_settings(); + + $has_description = false; + if ( isset( $args['data']['description'] ) ) { + $has_description = true; + echo '' . "\n"; + } + } // End form_field_text() + + /** + * form_field_textarea function. + * + * @access public + * @since 1.0.0 + * @param array $args + * @return void + */ + public function form_field_textarea ( $args ) { + $options = $this->get_settings(); + + echo '' . "\n"; + if ( isset( $args['data']['description'] ) ) { + echo '

                ' . esc_html( $args['data']['description'] ) . '

                ' . "\n"; + } + } // End form_field_textarea() + + /** + * form_field_select function. + * + * @access public + * @since 1.0.0 + * @param array $args + * @return void + */ + public function form_field_select ( $args ) { + $options = $this->get_settings(); + + if ( isset( $args['data']['options'] ) && ( count( (array)$args['data']['options'] ) > 0 ) ) { + $html = ''; + $html .= '' . "\n"; + echo $html; + + if ( isset( $args['data']['description'] ) ) { + echo '

                ' . esc_html( $args['data']['description'] ) . '

                ' . "\n"; + } + } + } // End form_field_select() + + /** + * form_field_radio function. + * + * @access public + * @since 1.0.0 + * @param array $args + * @return void + */ + public function form_field_radio ( $args ) { + $options = $this->get_settings(); + + if ( isset( $args['data']['options'] ) && ( count( (array)$args['data']['options'] ) > 0 ) ) { + $html = ''; + foreach ( $args['data']['options'] as $k => $v ) { + $html .= ' ' . $v . '
                ' . "\n"; + } + echo $html; + + if ( isset( $args['data']['description'] ) ) { + echo '' . esc_html( $args['data']['description'] ) . '' . "\n"; + } + } + } // End form_field_radio() + + /** + * form_field_multicheck function. + * + * @access public + * @since 1.0.0 + * @param array $args + * @return void + */ + public function form_field_multicheck ( $args ) { + $options = $this->get_settings(); + + if ( isset( $args['data']['options'] ) && ( count( (array)$args['data']['options'] ) > 0 ) ) { + $html = '
                ' . "\n"; + foreach ( $args['data']['options'] as $k => $v ) { + $checked = ''; + + if ( in_array( $k, (array)$options[$args['key']] ) ) { $checked = ' checked="checked"'; } + $html .= ' ' . $v . '
                ' . "\n"; + } + $html .= '
                ' . "\n"; + echo $html; + + if ( isset( $args['data']['description'] ) ) { + echo '' . esc_html( $args['data']['description'] ) . '' . "\n"; + } + } + } // End form_field_multicheck() + + /** + * form_field_range function. + * + * @access public + * @since 1.0.0 + * @param array $args + * @return void + */ + public function form_field_range ( $args ) { + $options = $this->get_settings(); + + if ( isset( $args['data']['options'] ) && ( count( (array)$args['data']['options'] ) > 0 ) ) { + $html = ''; + $html .= '' . "\n"; + echo $html; + + if ( isset( $args['data']['description'] ) ) { + echo '

                ' . esc_html( $args['data']['description'] ) . '

                ' . "\n"; + } + } + } // End form_field_range() + + /** + * form_field_images function. + * + * @access public + * @since 1.0.0 + * @param array $args + * @return void + */ + public function form_field_images ( $args ) { + $options = $this->get_settings(); + + if ( isset( $args['data']['options'] ) && ( count( (array)$args['data']['options'] ) > 0 ) ) { + $html = ''; + foreach ( $args['data']['options'] as $k => $v ) { + $html .= ' ' . $v . '
                ' . "\n"; + } + echo $html; + + if ( isset( $args['data']['description'] ) ) { + echo '' . esc_html( $args['data']['description'] ) . '' . "\n"; + } + } + } // End form_field_images() + + /** + * form_field_info function. + * + * @access public + * @since 1.0.0 + * @param array $args + * @return void + */ + public function form_field_info ( $args ) { + $class = ''; + if ( isset( $args['data']['class'] ) ) { + $class = ' ' . esc_attr( $args['data']['class'] ); + } + $html = '
                ' . "\n"; + if ( isset( $args['data']['name'] ) && ( $args['data']['name'] != '' ) ) { + $html .= '

                ' . esc_html( $args['data']['name'] ) . '

                ' . "\n"; + } + if ( isset( $args['data']['description'] ) && ( $args['data']['description'] != '' ) ) { + $html .= '

                ' . esc_html( $args['data']['description'] ) . '

                ' . "\n"; + } + $html .= '
                ' . "\n"; + + echo $html; + } // End form_field_info() + + /** + * validate_fields function. + * + * @access public + * @since 1.0.0 + * @param array $input + * @uses $this->parse_errors() + * @return array $options + */ + public function validate_fields ( $input ) { + $options = $this->get_settings(); + + foreach ( $this->fields as $k => $v ) { + // Make sure checkboxes are present even when false. + if ( $v['type'] == 'checkbox' && ! isset( $input[$k] ) ) { $input[$k] = false; } + + if ( isset( $input[$k] ) ) { + // Perform checks on required fields. + if ( isset( $v['required'] ) && ( $v['required'] == true ) ) { + if ( in_array( $v['type'], $this->get_array_field_types() ) && ( count( (array) $input[$k] ) <= 0 ) ) { + $this->add_error( $k, $v ); + continue; + } else { + if ( $input[$k] == '' ) { + $this->add_error( $k, $v ); + continue; + } + } + } + + $value = $input[$k]; + + // Check if the field is valid. + $method = $this->determine_method( $v, 'check' ); + + if ( function_exists ( $method ) ) { + $is_valid = $method( $value ); + } else { + if ( method_exists( $this, $method ) ) { + $is_valid = $this->$method( $value ); + } + } + + if ( ! $is_valid ) { + $this->add_error( $k, $v ); + continue; + } + + $method = $this->determine_method( $v, 'validate' ); + + if ( function_exists ( $method ) ) { + $options[$k] = $method( $value ); + } else { + if ( method_exists( $this, $method ) ) { + $options[$k] = $this->$method( $value ); + } + } + } + } + + // Parse error messages into the Settings API. + $this->parse_errors(); + return $options; + } // End validate_fields() + + /** + * validate_field_text function. + * + * @access public + * @since 1.0.0 + * @param string $input + * @return string + */ + public function validate_field_text ( $input ) { + return trim( esc_attr( $input ) ); + } // End validate_field_text() + + /** + * validate_field_checkbox function. + * + * @access public + * @since 1.0.0 + * @param string $input + * @return string + */ + public function validate_field_checkbox ( $input ) { + if ( ! isset( $input ) ) { + return 0; + } else { + return (bool)$input; + } + } // End validate_field_checkbox() + + /** + * validate_field_multicheck function. + * + * @access public + * @since 1.0.0 + * @param string $input + * @return string + */ + public function validate_field_multicheck ( $input ) { + $input = (array) $input; + + $input = array_map( 'esc_attr', $input ); + + return $input; + } // End validate_field_multicheck() + + /** + * validate_field_range function. + * + * @access public + * @since 1.0.0 + * @param string $input + * @return string + */ + public function validate_field_range ( $input ) { + $input = number_format( floatval( $input ), 1 ); + + return $input; + } // End validate_field_range() + + /** + * validate_field_url function. + * + * @access public + * @since 1.0.0 + * @param string $input + * @return string + */ + public function validate_field_url ( $input ) { + return trim( esc_url( $input ) ); + } // End validate_field_url() + + /** + * check_field_text function. + * @param string $input String of the value to be validated. + * @since 1.1.0 + * @return boolean Is the value valid? + */ + public function check_field_text ( $input ) { + $is_valid = true; + + return $is_valid; + } // End check_field_text() + + /** + * add_error function. + * + * @access protected + * @since 1.0.0 + * @param string $key + * @param array $data + * @return void + */ + protected function add_error ( $key, $data ) { + if ( isset( $data['error_message'] ) ) { + $message = $data['error_message']; + } else { + $message = sprintf( __( '%s is a required field', 'wooslider' ), $data['name'] ); + } + $this->errors[$key] = $message; + } // End add_error() + + protected function parse_errors () { + if ( count ( $this->errors ) > 0 ) { + foreach ( $this->errors as $k => $v ) { + add_settings_error( $this->token . '-errors', $k, $v, 'error' ); + } + } else { + $message = sprintf( __( '%s updated', 'wooslider' ), $this->name ); + add_settings_error( $this->token . '-errors', $this->token, $message, 'updated' ); + } + } // End parse_errors() + + /** + * get_array_field_types function. + * + * @description Return an array of field types expecting an array value returned. + * @access protected + * @since 1.0.0 + * @return void + */ + protected function get_array_field_types () { + return array( 'multicheck' ); + } // End get_array_field_types() + + /** + * enqueue_scripts function. + * + * @description Load in JavaScripts where necessary. + * @access public + * @since 1.0.0 + * @return void + */ + public function enqueue_scripts () { + global $wooslider; + if ( $this->has_range ) { + wp_enqueue_script( 'wooslider-settings-ranges', $wooslider->plugin_url . 'assets/js/ranges.js', array( 'jquery-ui-slider' ), '1.0.0' ); + } + + wp_register_script( 'wooslider-settings-imageselectors', $wooslider->plugin_url . 'assets/js/image-selectors.js', array( 'jquery' ), '1.0.0' ); + + if ( $this->has_imageselector ) { + wp_enqueue_script( 'wooslider-settings-imageselectors' ); + } + + if ( $this->has_tabs ) { + wp_enqueue_script( 'wooslider-settings-tabs-navigation', $wooslider->plugin_url . 'assets/js/tabs-navigation.js', array( 'jquery' ), '1.0.0' ); + } + } // End enqueue_scripts() + + /** + * enqueue_styles function. + * + * @description Load in CSS styles where necessary. + * @access public + * @since 1.0.0 + * @return void + */ + public function enqueue_styles () { + global $wooslider; + wp_enqueue_style( $wooslider->token . '-admin' ); + + wp_enqueue_style( 'wooslider-settings-api', $wooslider->plugin_url . 'assets/css/settings.css', '', '1.0.0' ); + + $this->enqueue_field_styles(); + } // End enqueue_styles() + + /** + * enqueue_field_styles function. + * + * @description Load in CSS styles where necessary. + * @access public + * @since 1.0.0 + * @return void + */ + public function enqueue_field_styles () { + global $wooslider; + + if ( $this->has_range ) { + wp_enqueue_style( 'wooslider-settings-ranges', $wooslider->plugin_url . 'assets/css/ranges.css', '', '1.0.0' ); + } + + wp_register_style( 'wooslider-settings-imageselectors', $wooslider->plugin_url . 'assets/css/image-selectors.css', '', '1.0.0' ); + + if ( $this->has_imageselector ) { + wp_enqueue_style( 'wooslider-settings-imageselectors' ); + } + } // End enqueue_field_styles() +} // End Class +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php new file mode 100644 index 0000000..e2e3e61 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-settings.php @@ -0,0 +1,468 @@ +settings_version = $wooslider->version; // Use the global plugin version on this settings screen. + + $hook = add_submenu_page( 'edit.php?post_type=slide', $this->name, $this->menu_label, 'manage_options', $this->page_slug, array( &$this, 'settings_screen' ) ); + + $this->hook = $hook; + + if ( isset( $_GET['page'] ) && ( $_GET['page'] == $this->page_slug ) ) { + add_action( 'admin_notices', array( &$this, 'settings_errors' ) ); + add_action( 'admin_print_scripts', array( &$this, 'enqueue_scripts' ) ); + add_action( 'admin_print_styles', array( &$this, 'enqueue_styles' ) ); + } + } // End register_settings_screen() + + /** + * init_sections function. + * + * @access public + * @since 1.0.0 + * @return void + */ + public function init_sections () { + + $sections = array(); + + $sections['default-settings'] = array( + 'name' => __( 'General Settings', 'wooslider' ), + 'description' => __( 'Settings to apply to all slideshows, unless overridden.', 'wooslider' ) + ); + + $sections['control-settings'] = array( + 'name' => __( 'Control Settings', 'wooslider' ), + 'description' => __( 'Customise the ways in which slideshows can be controlled.', 'wooslider' ) + ); + + $sections['button-settings'] = array( + 'name' => __( 'Button Settings', 'wooslider' ), + 'description' => __( 'Customise the texts of the various slideshow buttons.', 'wooslider' ) + ); + + $this->sections = $sections; + + } // End init_sections() + + /** + * init_fields function. + * + * @access public + * @since 1.0.0 + * @uses WooSlider_Utils::get_slider_types() + * @return void + */ + public function init_fields () { + global $pagenow; + + $fields = array(); + + $fields['animation'] = array( + 'name' => __( 'Animation', 'wooslider' ), + 'description' => __( 'The slider animation', 'wooslider' ), + 'type' => 'select', + 'default' => 'fade', + 'section' => 'default-settings', + 'required' => 0, + 'options' => array( 'fade' => __( 'Fade', 'wooslider' ), 'slide' => __( 'Slide', 'wooslider' ) ) + ); + + $fields['direction'] = array( + 'name' => __( 'Slide Direction', 'wooslider' ), + 'description' => __( 'The direction to slide (if using the "Slide" animation)', 'wooslider' ), + 'type' => 'select', + 'default' => 'horizontal', + 'section' => 'default-settings', + 'required' => 0, + 'options' => array( 'horizontal' => __( 'Horizontal', 'wooslider' ), 'vertical' => __( 'Vertical', 'wooslider' ) ) + ); + + $fields['slideshow_speed'] = array( + 'name' => __( 'Slideshow Speed', 'wooslider' ), + 'description' => __( 'Set the delay between each slide animation (in seconds)', 'wooslider' ), + 'type' => 'range', + 'default' => '7.0', + 'section' => 'default-settings', + 'required' => 0, + 'options' => $this->get_duration_options( false ) + ); + + $fields['animation_duration'] = array( + 'name' => __( 'Animation Speed', 'wooslider' ), + 'description' => __( 'Set the duration of each slide animation (in seconds)', 'wooslider' ), + 'type' => 'range', + 'default' => '0.6', + 'section' => 'default-settings', + 'required' => 0, + 'options' => $this->get_duration_options() + ); + + // Button Settings + $fields['prev_text'] = array( + 'name' => __( '"Previous" Link Text', 'wooslider' ), + 'description' => __( 'The text to display on the "Previous" button.', 'wooslider' ), + 'type' => 'text', + 'default' => __( 'Previous', 'wooslider' ), + 'section' => 'button-settings' + ); + + $fields['next_text'] = array( + 'name' => __( '"Next" Link Text', 'wooslider' ), + 'description' => __( 'The text to display on the "Next" button.', 'wooslider' ), + 'type' => 'text', + 'default' => __( 'Next', 'wooslider' ), + 'section' => 'button-settings' + ); + + $fields['play_text'] = array( + 'name' => __( '"Play" Button Text', 'wooslider' ), + 'description' => __( 'The text to display on the "Play" button.', 'wooslider' ), + 'type' => 'text', + 'default' => __( 'Play', 'wooslider' ), + 'section' => 'button-settings' + ); + + $fields['pause_text'] = array( + 'name' => __( '"Pause" Button Text', 'wooslider' ), + 'description' => __( 'The text to display on the "Pause" button.', 'wooslider' ), + 'type' => 'text', + 'default' => __( 'Pause', 'wooslider' ), + 'section' => 'button-settings' + ); + + // Control Settings + $fields['autoslide'] = array( + 'name' => '', + 'description' => __( 'Animate the slideshows automatically', 'wooslider' ), + 'type' => 'checkbox', + 'default' => true, + 'section' => 'control-settings' + ); + + $fields['smoothheight'] = array( + 'name' => '', + 'description' => __( 'Adjust the height of the slideshow to the height of the current slide', 'wooslider' ), + 'type' => 'checkbox', + 'default' => false, + 'section' => 'control-settings' + ); + + $fields['direction_nav'] = array( + 'name' => '', + 'description' => __( 'Display the "Previous/Next" navigation', 'wooslider' ), + 'type' => 'checkbox', + 'default' => true, + 'section' => 'control-settings' + ); + + $fields['control_nav'] = array( + 'name' => '', + 'description' => __( 'Display the slideshow pagination', 'wooslider' ), + 'type' => 'checkbox', + 'default' => true, + 'section' => 'control-settings' + ); + + $fields['keyboard_nav'] = array( + 'name' => '', + 'description' => __( 'Enable keyboard navigation', 'wooslider' ), + 'type' => 'checkbox', + 'default' => false, + 'section' => 'control-settings' + ); + + $fields['mousewheel_nav'] = array( + 'name' => '', + 'description' => __( 'Enable the mousewheel navigation', 'wooslider' ), + 'type' => 'checkbox', + 'default' => false, + 'section' => 'control-settings' + ); + + $fields['touch'] = array( + 'name' => '', + 'description' => __( 'Enable the touch swipe navigation on touch-screen devices', 'wooslider' ), + 'type' => 'checkbox', + 'default' => true, + 'section' => 'control-settings' + ); + + $fields['playpause'] = array( + 'name' => '', + 'description' => __( 'Enable the "Play/Pause" event', 'wooslider' ), + 'type' => 'checkbox', + 'default' => false, + 'section' => 'control-settings' + ); + + $fields['randomize'] = array( + 'name' => '', + 'description' => __( 'Randomize the order of slides in slideshows', 'wooslider' ), + 'type' => 'checkbox', + 'default' => false, + 'section' => 'control-settings' + ); + + $fields['animation_loop'] = array( + 'name' => '', + 'description' => __( 'Loop the slideshow animations', 'wooslider' ), + 'type' => 'checkbox', + 'default' => true, + 'section' => 'control-settings' + ); + + $fields['pause_on_action'] = array( + 'name' => '', + 'description' => __( 'Pause the slideshow autoplay when using the pagination or "Previous/Next" navigation', 'wooslider' ), + 'type' => 'checkbox', + 'default' => true, + 'section' => 'control-settings' + ); + + $fields['pause_on_hover'] = array( + 'name' => '', + 'description' => __( 'Pause the slideshow autoplay when hovering over a slide', 'wooslider' ), + 'type' => 'checkbox', + 'default' => false, + 'section' => 'control-settings' + ); + + $this->fields = $fields; + + } // End init_fields() + + /** + * Get options for the duration fields. + * @since 1.0.0 + * @param $include_milliseconds (default: true) Whether or not to include milliseconds between 0 and 1. + * @return array Options between 0.1 and 10 seconds. + */ + private function get_duration_options ( $include_milliseconds = true ) { + $numbers = array( '1.0', '1.5', '2.0', '2.5', '3.0', '3.5', '4.0', '4.5', '5.0', '5.5', '6.0', '6.5', '7.0', '7.5', '8.0', '8.5', '9.0', '9.5', '10.0' ); + $options = array(); + + if ( true == (bool)$include_milliseconds ) { + $milliseconds = array( '0.1', '0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '0.8', '0.9' ); + foreach ( $milliseconds as $k => $v ) { + $options[$v] = $v; + } + } else { + $options['0.5'] = '0.5'; + } + + foreach ( $numbers as $k => $v ) { + $options[$v] = $v; + } + + return $options; + } // End get_duration_options() + + /** + * Add contextual help to the settings screen. + * @access public + * @since 1.0.0 + * @return void + */ + public function add_contextual_help () { + $current_screen = get_current_screen(); + $screens = array( 'slide_page_wooslider-settings', 'edit-slide', 'slide', 'edit-slide-page' ); + + // Get out if we're not on a screen in the plugin. + if ( ! isset( $current_screen->id ) || ! in_array( $current_screen->id, $screens ) ) { return; } + + // Settings screen help tabs. + if ( isset( $current_screen->id ) && ( 'slide_page_wooslider-settings' == $current_screen->id ) ) { + $current_screen->add_help_tab( array( + 'id' => 'overview', + 'title' => __( 'Overview', 'wooslider' ), + 'content' => + '

                ' . __( 'This screen contains all the default settings for your slideshows created by WooSlider (animation duration, speeds, display of slideshow controls, etc). Anything set here will apply to all WooSlider slideshows, unless overridden by a slideshow.', 'wooslider' ) . '

                ' + ) ); + + $current_screen->add_help_tab( array( + 'id' => 'general-settings', + 'title' => __( 'General Settings', 'wooslider' ), + 'content' => + '

                ' . __( 'Settings to apply to all slideshows, unless overridden.', 'wooslider' ) . '

                ' . + '
                  ' . + '
                1. ' . __( 'Animation', 'wooslider' ) . ' - ' . __( 'The default animation to use for your slideshows ("slide" or "fade").', 'wooslider' ) . '
                2. ' . + '
                3. ' . __( 'Slide Direction', 'wooslider' ) . ' - ' . __( 'Slide the slideshows either vertically or horizontally (works only with the "slide" animation).', 'wooslider' ) . ' ' . __( 'NOTE: When sliding vertically, all slides need to have the same height.', 'wooslider' ) . '
                4. ' . + '
                5. ' . __( 'Slideshow Speed', 'wooslider' ) . ' - ' . __( 'The delay between each slide animation (in seconds).', 'wooslider' ) . '
                6. ' . + '
                7. ' . __( 'Animation Speed', 'wooslider' ) . ' - ' . __( 'The duration of each slide animation (in seconds).', 'wooslider' ) . '
                8. ' . + '
                ' + ) ); + + $current_screen->add_help_tab( array( + 'id' => 'control-settings', + 'title' => __( 'Control Settings', 'wooslider' ), + 'content' => + '

                ' . __( 'Customise the ways in which slideshows can be controlled.', 'wooslider' ) . '

                ' . + '
                  ' . + '
                1. ' . __( 'Animate the slideshows automatically', 'wooslider' ) . ' - ' . __( 'Whether or not to automatically animate between the slides (the alternative is to slide only when using the controls).', 'wooslider' ) . '
                2. ' . + '
                3. ' . __( 'Adjust the height of the slideshow to the height of the current slide', 'wooslider' ) . ' - ' . __( 'Alternatively, the slideshow will take the height from it\'s tallest slide.', 'wooslider' ) . '
                4. ' . + '
                5. ' . __( 'Display the "Previous/Next" navigation', 'wooslider' ) . ' - ' . __( 'Show/hide the "Previous" and "Next" button controls.', 'wooslider' ) . '
                6. ' . + '
                7. ' . __( 'Display the slideshow pagination', 'wooslider' ) . ' - ' . __( 'Show/hide the pagination bar below the slideshow.', 'wooslider' ) . '
                8. ' . + '
                9. ' . __( 'Enable keyboard navigation', 'wooslider' ) . ' - ' . __( 'Enable navigation of this slideshow via the "left" and "right" arrow keys on the viewer\'s computer keyboard.', 'wooslider' ) . '
                10. ' . + '
                11. ' . __( 'Enable the mousewheel navigation', 'wooslider' ) . ' - ' . __( 'Enable navigation of this slideshow via the viewer\'s computer mousewheel.', 'wooslider' ) . '
                12. ' . + '
                13. ' . __( 'Enable the "Play/Pause" event', 'wooslider' ) . ' - ' . __( 'Show/hide the "Play/Pause" button below the slideshow for pausing and resuming the automated slideshow.', 'wooslider' ) . '
                14. ' . + '
                15. ' . __( 'Randomize the order of slides in slideshows', 'wooslider' ) . ' - ' . __( 'Display the slides in the slideshow in a random order.', 'wooslider' ) . '
                16. ' . + '
                17. ' . __( 'Loop the slideshow animations', 'wooslider' ) . ' - ' . __( 'When arriving at the end of the slideshow, carry on sliding from the first slide, indefinitely.', 'wooslider' ) . '
                18. ' . + '
                19. ' . __( 'Pause the slideshow autoplay when using the pagination or "Previous/Next" navigation', 'wooslider' ) . ' - ' . __( 'Pause the slideshow automation when the viewer decides to navigate using the manual controls.', 'wooslider' ) . '
                20. ' . + '
                21. ' . __( 'Pause the slideshow autoplay when hovering over a slide', 'wooslider' ) . ' - ' . __( 'Pause the slideshow automation when the viewer hovers over the slideshow.', 'wooslider' ) . '
                22. ' . + '
                ' + ) ); + + $current_screen->add_help_tab( array( + 'id' => 'button-settings', + 'title' => __( 'Button Settings', 'wooslider' ), + 'content' => + '

                ' . __( 'Customise the texts of the various slideshow buttons.', 'wooslider' ) . '

                ' . + '
                  ' . + '
                1. ' . __( '"Previous" Link Text', 'wooslider' ) . ' - ' . __( 'The text for the "Previous" button.', 'wooslider' ) . '
                2. ' . + '
                3. ' . __( '"Next" Link Text', 'wooslider' ) . ' - ' . __( 'The text for the "Next" button.', 'wooslider' ) . '
                4. ' . + '
                5. ' . __( '"Play" Button Text', 'wooslider' ) . ' - ' . __( 'The text for the "Play" button.', 'wooslider' ) . '
                6. ' . + '
                7. ' . __( '"Pause" Button Text', 'wooslider' ) . ' - ' . __( 'The text for the "Pause" button.', 'wooslider' ) . '
                8. ' . + '
                ' + ) ); + } + + // "Edit Slides" help tabs. + if ( isset( $current_screen->id ) && ( 'edit-slide' == $current_screen->id ) ) { + $current_screen->add_help_tab( array( + 'id' => 'overview', + 'title' => __( 'Overview', 'wooslider' ), + 'content' => + '

                ' . __( 'This screen provides access to all of your posts. You can customize the display of this screen to suit your workflow.', 'wooslider' ) . '

                ' + ) ); + + $current_screen->add_help_tab( array( + 'id' => 'screen-content', + 'title' => __( 'Screen Content', 'wooslider' ), + 'content' => + '

                ' . __( 'You can customize the display of this screen\'s contents in a number of ways:', 'wooslider' ) . '

                ' . + '
                  ' . + '
                1. ' . __( 'You can hide/display columns based on your needs and decide how many slides to list per screen using the Screen Options tab.', 'wooslider' ) . '
                2. ' . + '
                3. ' . __( 'You can filter the list of slides by status using the text links in the upper left to show All, Published, Draft, or Trashed slides. The default view is to show all slides.', 'wooslider' ) . '
                4. ' . + '
                5. ' . __( 'You can view slides in a simple title list or with an excerpt. Choose the view you prefer by clicking on the icons at the top of the list on the right.', 'wooslider' ) . '
                6. ' . + '
                7. ' . __( 'You can refine the list to show only slides from a specific month by using the dropdown menus above the slides list. Click the Filter button after making your selection. You also can refine the list by clicking on the slide groups in the slides list.', 'wooslider' ) . '
                8. ' . + '
                ' + ) ); + + $current_screen->add_help_tab( array( + 'id' => 'available-actions', + 'title' => __( 'Available Actions', 'wooslider' ), + 'content' => + '

                ' . __( 'Hovering over a row in the posts list will display action links that allow you to manage your post. You can perform the following actions:', 'wooslider' ) . '

                ' . + '
                  ' . + '
                1. ' . __( 'Edit', 'wooslider' ) . ' ' . __( 'takes you to the editing screen for that slide. You can also reach that screen by clicking on the slide title.', 'wooslider' ) . '
                2. ' . + '
                3. ' . __( 'Quick Edit', 'wooslider' ) . ' ' . __( 'provides inline access to the metadata of your slide, allowing you to update slide details without leaving this screen.', 'wooslider' ) . '
                4. ' . + '
                5. ' . __( 'Trash', 'wooslider' ) . ' ' . __( 'removes your slide from this list and places it in the trash, from which you can permanently delete it.', 'wooslider' ) . '
                6. ' . + '
                7. ' . __( 'Preview', 'wooslider' ) . ' ' . __( 'will show you what your draft slide will look like if you publish it. View will take you to your live site to view the slide. Which link is available depends on your slide\'s status.', 'wooslider' ) . '
                8. ' . + '
                ' + ) ); + + $current_screen->add_help_tab( array( + 'id' => 'bulk-actions', + 'title' => __( 'Bulk Actions', 'wooslider' ), + 'content' => + '

                ' . __( 'You can also edit or move multiple slides to the trash at once. Select the slides you want to act on using the checkboxes, then select the action you want to take from the Bulk Actions menu and click Apply.', 'wooslider' ) . '

                ' . + '

                ' . __( 'When using Bulk Edit, you can change the metadata (slide groups, etc) for all selected slides at once. To remove a slide from the grouping, just click the x next to its name in the Bulk Edit area that appears.', 'wooslider' ) . '

                ' + ) ); + } + + // "Add Slide" help tabs. + if ( isset( $current_screen->id ) && ( 'slide' == $current_screen->id ) ) { + $current_screen->add_help_tab( array( + 'id' => 'customize-display', + 'title' => __( 'Customize This Display', 'wooslider' ), + 'content' => + '

                ' . __( 'The title field and the big Slide Editing Area are fixed in place, but you can reposition all the other boxes using drag and drop, and can minimize or expand them by clicking the title bar of each box. Use the Screen Options tab to unhide more boxes (Excerpt, Featured Image) or to choose a 1- or 2-column layout for this screen.', 'wooslider' ) . '

                ' + ) ); + + $current_screen->add_help_tab( array( + 'id' => 'title-content-editor', + 'title' => __( 'Title and Content Editor', 'wooslider' ), + 'content' => + '

                ' . __( 'Title', 'wooslider' ) . ' - ' . __( 'Enter a title for your slide.', 'wooslider' ) . '

                ' . + '

                ' . __( 'Content Editor', 'wooslider' ) . ' - ' . __( 'Enter the text for your slide. There are two modes of editing: Visual and HTML. Choose the mode by clicking on the appropriate tab. Visual mode gives you a WYSIWYG editor. Click the last icon in the row to get a second row of controls. The HTML mode allows you to enter raw HTML along with your slide text. You can insert media files by clicking the icons above the content editor and following the directions. You can go to the distraction-free writing screen via the Fullscreen icon in Visual mode (second to last in the top row) or the Fullscreen button in HTML mode (last in the row). Once there, you can make buttons visible by hovering over the top area. Exit Fullscreen back to the regular content editor. This content area is a blank canvas for each slide. Any content added here will display in the slide. ', 'wooslider' ) . '

                ' + ) ); + + $current_screen->add_help_tab( array( + 'id' => 'publish-box', + 'title' => __( 'Publish Box', 'wooslider' ), + 'content' => + '

                ' . __( 'Publish', 'wooslider' ) . ' - ' . __( 'You can set the terms of publishing your slide in the Publish box. For Status, Visibility, and Publish (immediately), click on the Edit link to reveal more options. Visibility includes options for password-protecting a post or making it stay at the front of each slideshow it is in (sticky). Publish (immediately) allows you to set a future or past date and time, so you can schedule a slide to be published in the future or backdate a slide.', 'wooslider' ) . '

                ' . + '

                ' . __( 'Featured Image', 'wooslider' ) . ' - ' . __( 'This allows you to associate an image with your slide without inserting it. This is used only if the "thumbnails" pagination setting is enabled. Otherwise, the featured image is not used.', 'wooslider' ) . '

                ' + ) ); + } + + // "Edit Slide Groups" help tabs. + if ( isset( $current_screen->id ) && ( 'edit-slide-page' == $current_screen->id ) ) { + $current_screen->add_help_tab( array( + 'id' => 'overview', + 'title' => __( 'Overview', 'wooslider' ), + 'content' => + '

                ' . __( 'You can use slide groups to define groupings of slides to be displayed in various WooSlider slideshows.', 'wooslider' ) . '

                ' + ) ); + + $current_screen->add_help_tab( array( + 'id' => 'adding-slide-groups', + 'title' => __( 'Adding Slide Groups', 'wooslider' ), + 'content' => + '

                ' . __( 'When adding a new slide group on this screen, you\'ll fill in the following fields:', 'wooslider' ) . '

                ' . + '
                  ' . + '
                1. ' . __( 'Name', 'wooslider' ) . ' - ' . __( 'The name is how it appears on your site.', 'wooslider' ) . '
                2. ' . + '
                3. ' . __( 'Slug', 'wooslider' ) . ' - ' . __( 'The \"slug\" is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens.', 'wooslider' ) . '
                4. ' . + '
                5. ' . __( 'Description', 'wooslider' ) . ' - ' . __( 'The description is not prominent by default; however, some themes may display it (WooSlider doesn\'t display this anywhere by default).', 'wooslider' ) . '
                6. ' . + '
                ' + ) ); + } + + $current_screen->set_help_sidebar( + '

                ' . __( 'For more information:', 'wooslider' ) . '

                ' . + '

                ' . __( 'Support Desk', 'wooslider' ) . '

                ' + ); + } // End add_contextual_help() +} // End Class +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-sliders.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-sliders.php new file mode 100644 index 0000000..5c55593 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-sliders.php @@ -0,0 +1,318 @@ +sliders ) ) ) { + $this->sliders[(string)$settings['id']] = array( 'slides' => $slides, 'args' => $settings, 'extra' => $args ); + } + } // End add() + + /** + * Get the slides pertaining to a specified slider. + * @since 1.0.0 + * @param int $id The ID of the slider in question. + * @param array $args Optional arguments pertaining to this slider. + * @return array An array of slides pertaining to the specified slider. + */ + public function get_slides ( $type, $args = array(), $settings = array() ) { + $slides = array(); + $supported_types = WooSlider_Utils::get_slider_types(); + + if ( in_array( $type, array_keys( $supported_types ) ) ) { + if ( method_exists( $this, 'slideshow_type_' . esc_attr( $type ) ) ) { + $slides = call_user_func( array( $this, 'slideshow_type_' . esc_attr( $type ) ), $args, $settings ); + } else { + if ( isset( $supported_types[$type]['callback'] ) && $supported_types[$type]['callback'] != 'method' ) { + if ( is_callable( $supported_types[$type]['callback'] ) ) { + $slides = call_user_func( $supported_types[$type]['callback'], $args, $settings ); + } + } + } + } + + return (array) apply_filters( 'wooslider_get_slides', $slides, $type, $args, $settings ); + } // End get_slides() + + /** + * Render the slides into appropriate HTML. + * @since 1.0.0 + * @param array $slides The slides to render. + * @return string The rendered HTML. + */ + public function render ( $slides ) { + $html = ''; + + if ( ! is_array( $slides ) ) $slides = (array)$slides; + + if ( is_array( $slides ) && count( $slides ) ) { + foreach ( $slides as $k => $v ) { + if ( isset( $v['content'] ) ) { + $atts = ''; + if ( isset( $v['attributes'] ) && is_array( $v['attributes'] ) && ( count( $v['attributes'] ) > 0 ) ) { + foreach ( $v['attributes'] as $i => $j ) { + $atts .= ' ' . esc_attr( strtolower( $i ) ) . '="' . esc_attr( $j ) . '"'; + } + } + $html .= '
              11. ' . "\n" . $v['content'] . '
              12. ' . "\n"; + } + } + } + + return $html; + } // End render() + + /** + * Get the slides for the "attachments" slideshow type. + * @since 1.0.0 + * @param array $args Array of arguments to determine which slides to return. + * @return array An array of slides to render for the slideshow. + */ + private function slideshow_type_attachments ( $args = array(), $settings = array() ) { + global $post; + $slides = array(); + + $defaults = array( + 'limit' => '5', + 'id' => $post->ID, + 'size' => 'large', + 'thumbnails' => '', + 'orderby' => 'menu_order', + 'order' => 'ASC', + 'lightbox' => 'no' + ); + + $args = wp_parse_args( $args, $defaults ); + + $query_args = array( 'post_type' => 'attachment', 'post_mime_type' => 'image', 'post_parent' => intval( $args['id'] ), 'numberposts' => intval( $args['limit'] ), 'orderby' => sanitize_key( $args['orderby'] ), 'order' => sanitize_key( $args['order'] ) ); + $attachments = get_posts( $query_args ); + + if ( ! is_wp_error( $attachments ) && ( count( $attachments ) > 0 ) ) { + foreach ( $attachments as $k => $v ) { + if($args['lightbox'] == 'yes') { + $image = ''.wp_get_attachment_image( $v->ID, esc_attr( $args['size'] ) ).''; + } else { + $image = wp_get_attachment_image( $v->ID, esc_attr( $args['size'] ) ); + } + $data = array( 'content' => $image ); + if ( 'true' == $args['thumbnails'] || 1 == $args['thumbnails'] ) { + $thumb_url = wp_get_attachment_thumb_url( $v->ID ); + if ( ! is_bool( $thumb_url ) ) { + $data['attributes'] = array( 'data-thumb' => $thumb_url ); + } else { + $data['attributes'] = array( 'data-thumb' => esc_url( WooSlider_Utils::get_placeholder_image() ) ); + } + } + $slides[] = $data; + } + } + + return $slides; + } // End slideshow_type_attachments() + + /** + * Get the slides for the "posts" slideshow type. + * @since 1.0.0 + * @param array $args Array of arguments to determine which slides to return. + * @return array An array of slides to render for the slideshow. + */ + private function slideshow_type_posts ( $args = array(), $settings = array() ) { + global $post; + $slides = array(); + + $defaults = array( + 'limit' => '5', + 'category' => '', + 'tag' => '', + 'layout' => 'text-left', + 'size' => 'large', + 'link_title' => '', + 'overlay' => 'none', // none, full or natural + 'display_excerpt' => 'true' + ); + + $args = wp_parse_args( $args, $defaults ); + + // Determine and validate the layout type. + $supported_layouts = WooSlider_Utils::get_posts_layout_types(); + if ( ! in_array( $args['layout'], array_keys( $supported_layouts ) ) ) { $args['layout'] = $defaults['layout']; } + + // Determine and validate the overlay setting. + if ( ! in_array( $args['overlay'], array( 'none', 'full', 'natural' ) ) ) { $args['overlay'] = $defaults['overlay']; } + + $query_args = array( 'post_type' => 'post', 'numberposts' => intval( $args['limit'] ) ); + + if ( $args['category'] != '' ) { + $query_args['category_name'] = esc_attr( $args['category'] ); + } + + if ( $args['tag'] != '' ) { + $query_args['tag'] = esc_attr( str_replace( ',', '+', $args['tag'] ) ); + } + + $posts = get_posts( $query_args ); + + if ( ! is_wp_error( $posts ) && ( count( $posts ) > 0 ) ) { + // Setup the CSS class. + $class = 'layout-' . esc_attr( $args['layout'] ) . ' overlay-' . esc_attr( $args['overlay'] ); + + foreach ( $posts as $k => $post ) { + setup_postdata( $post ); + $image = get_the_post_thumbnail( get_the_ID(), $args['size'] ); + + // Allow plugins/themes to filter here. + $excerpt = ''; + if ( ( $args['display_excerpt'] == 'true' || $args['display_excerpt'] == 1 ) ) { $excerpt = wpautop( tf_content($args['excerpt'], "true") ); } + + $title = get_the_title( get_the_ID() ); + if ( $args['link_title'] == 'true' || $args['link_title'] == 1 ) { + $title = '' . $title . ''; + $image = '' . $image . ''; + } + $content = $image . '

                ' . $title . '

                ' . $excerpt . '
                '; + if ( $args['layout'] == 'text-top' ) { + $content = '

                ' . $title . '

                ' . $excerpt . '
                ' . $image; + } + + $layed_out_content = apply_filters( 'wooslider_posts_layout_html', $content, $args, $post ); + + $content = '
                ' . $layed_out_content . '
                '; + $data = array( 'content' => $content ); + + if ( isset( $args['thumbnails'] ) && ( 'true' == $args['thumbnails'] || 1 == $args['thumbnails'] ) ) { + $thumb_url = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'medium' ); + if ( ! is_bool( $thumb_url ) && isset( $thumb_url[0] ) ) { + $data['attributes'] = array( 'data-thumb' => esc_url( $thumb_url[0] ) ); + } else { + $data['attributes'] = array( 'data-thumb' => esc_url( WooSlider_Utils::get_placeholder_image() ) ); + } + } + $slides[] = $data; + } + wp_reset_postdata(); + } + + return $slides; + } // End slideshow_type_posts() + + /** + * Get the slides for the "slides" slideshow type. + * @since 1.0.0 + * @param array $args Array of arguments to determine which slides to return. + * @return array An array of slides to render for the slideshow. + */ + private function slideshow_type_slides ( $args = array(), $settings = array() ) { + global $post; + $slides = array(); + + $defaults = array( + 'limit' => '5', + 'slide_page' => '', + 'thumbnails' => '' + ); + + $args = wp_parse_args( $args, $defaults ); + + $query_args = array( 'post_type' => 'slide', 'numberposts' => intval( $args['limit'] ) ); + + if ( $args['slide_page'] != '' ) { + $cats_split = explode( ',', $args['slide_page'] ); + $query_args['tax_query'] = array(); + foreach ( $cats_split as $k => $v ) { + $query_args['tax_query'][] = array( + 'taxonomy' => 'slide-page', + 'field' => 'slug', + 'terms' => esc_attr( trim( rtrim( $v ) ) ) + ); + } + } + + $posts = get_posts( $query_args ); + + if ( ! is_wp_error( $posts ) && ( count( $posts ) > 0 ) ) { + foreach ( $posts as $k => $post ) { + setup_postdata( $post ); + $content = get_the_content(); + + $data = array( 'content' => '
                ' . "\n" . apply_filters( 'wooslider_slide_content_slides', $content, $args ) . "\n" . '
                ' . "\n" ); + if ( 'true' == $args['thumbnails'] || 1 == $args['thumbnails'] ) { + $thumb_url = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'medium' ); + if ( ! is_bool( $thumb_url ) && isset( $thumb_url[0] ) ) { + $data['attributes'] = array( 'data-thumb' => esc_url( $thumb_url[0] ) ); + } else { + $data['attributes'] = array( 'data-thumb' => esc_url( WooSlider_Utils::get_placeholder_image() ) ); + } + } + $slides[] = $data; + } + wp_reset_postdata(); + } + + return $slides; + } // End slideshow_type_slides() + + /** + * Add default filters to the content of the "slides" slideshow type's slides. + * @since 1.0.2 + * @return void + */ + public function apply_default_filters_slides () { + add_filter( 'wooslider_slide_content_slides', 'wptexturize', 1 ); + add_filter( 'wooslider_slide_content_slides', 'convert_smilies', 1 ); + add_filter( 'wooslider_slide_content_slides', 'convert_chars', 1 ); + add_filter( 'wooslider_slide_content_slides', 'wpautop', 1 ); + add_filter( 'wooslider_slide_content_slides', 'shortcode_unautop', 1 ); + add_filter( 'wooslider_slide_content_slides', 'prepend_attachment', 1 ); + + // Take note of the priority settings for the following filters. + add_filter( 'wooslider_slide_content_slides', 'wp_kses_post', 2 ); + + if ( get_option( 'embed_autourls' ) ) { + global $wp_embed; + add_filter( 'wooslider_slide_content_slides', array( &$wp_embed, 'run_shortcode' ), 3 ); + } + + add_filter( 'wooslider_slide_content_slides', 'do_shortcode', 4 ); + } // End apply_default_filters_slides() +} // End Class +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-utils.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-utils.php new file mode 100644 index 0000000..820fd61 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider-utils.php @@ -0,0 +1,84 @@ + array( 'name' => __( 'Attached Images', 'wooslider' ), 'callback' => 'method' ), + 'slides' => array( 'name' => __( 'Slides', 'wooslider' ), 'callback' => 'method' ), + 'posts' => array( 'name' => __( 'Posts', 'wooslider' ), 'callback' => 'method' ) + ) + ); + } // End get_slider_types() + + /** + * Get an array of the supported posts layout types. + * @since 1.0.0 + * @return array The posts layout types supported by WooSlider. + */ + public static function get_posts_layout_types () { + return (array)apply_filters( 'wooslider_posts_layout_types', array( + 'text-left' => array( 'name' => __( 'Text Left', 'wooslider' ), 'callback' => 'method' ), + 'text-right' => array( 'name' => __( 'Text Right', 'wooslider' ), 'callback' => 'method' ), + 'text-top' => array( 'name' => __( 'Text Top', 'wooslider' ), 'callback' => 'method' ), + 'text-bottom' => array( 'name' => __( 'Text Bottom', 'wooslider' ), 'callback' => 'method' ) + ) + ); + } // End get_posts_layout_types() + + /** + * Return an array of supported slider effects. + * @since 1.0.0 + * @uses filter: 'wooslider_supported_effects' + * @return array Supported effects. + */ + public static function get_supported_effects () { + return (array)apply_filters( 'wooslider_supported_effects', array( 'fade', 'slide' ) ); + } // End get_supported_effects() + + /** + * Get the placeholder thumbnail image. + * @since 1.0.0 + * @return string The URL to the placeholder thumbnail image. + */ + public static function get_placeholder_image () { + global $wooslider; + return esc_url( apply_filters( 'wooslider_placeholder_thumbnail', $wooslider->plugin_url . 'assets/images/placeholder.png' ) ); + } // End get_placeholder_image() + + /** + * Get an array of the supported slider themes. + * @since 1.0.4 + * @return array The slider themes supported by WooSlider. + */ + public static function get_slider_themes () { + return (array)apply_filters( 'wooslider_slider_themes', array( + 'default' => array( 'name' => __( 'Default', 'wooslider' ), 'stylesheet' => '' ) + ) + ); + } // End get_slider_themes() +} // End Class +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider.php new file mode 100644 index 0000000..6c1b410 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/classes/class-wooslider.php @@ -0,0 +1,160 @@ +file = $file; + $this->plugin_url = get_template_directory_uri() . '/framework/plugins/tf-flexslider/'; + $this->plugin_path = trailingslashit( dirname( $file ) ); + + $this->load_plugin_textdomain(); + add_action( 'init', array( &$this, 'load_localisation' ), 0 ); + + // Run this on activation. + register_activation_hook( $this->file, array( &$this, 'activation' ) ); + + // Load the Utils class. + require_once( 'class-wooslider-utils.php' ); + + // Setup post types. + require_once( 'class-wooslider-posttypes.php' ); + $this->post_types = new WooSlider_PostTypes(); + + // Setup settings screen. + require_once( 'class-wooslider-settings-api.php' ); + require_once( 'class-wooslider-settings.php' ); + $this->settings = new WooSlider_Settings(); + $this->settings->token = 'wooslider-settings'; + if ( is_admin() ) { + $this->settings->has_tabs = true; + $this->settings->name = __( 'Slideshow Settings', 'wooslider' ); + $this->settings->menu_label = __( 'Settings', 'wooslider' ); + $this->settings->page_slug = 'wooslider-settings'; + } + + $this->settings->setup_settings(); + + // Differentiate between administration and frontend logic. + if ( is_admin() ) { + require_once( 'class-wooslider-admin.php' ); + $this->admin = new WooSlider_Admin(); + $this->admin->token = $this->token; + } else { + require_once( 'class-wooslider-frontend.php' ); + $this->frontend = new WooSlider_Frontend(); + $this->frontend->token = $this->token; + $this->frontend->init(); + } + + add_action( 'widgets_init', array( &$this, 'register_widgets' ) ); + add_action( 'after_setup_theme', array( &$this, 'ensure_post_thumbnails_support' ) ); + } // End __construct() + + /** + * Register the widgets. + * @return [type] [description] + */ + public function register_widgets () { + require_once( $this->plugin_path . 'widgets/widget-wooslider-base.php' ); + require_once( $this->plugin_path . 'widgets/widget-wooslider-attachments.php' ); + require_once( $this->plugin_path . 'widgets/widget-wooslider-posts.php' ); + require_once( $this->plugin_path . 'widgets/widget-wooslider-slides.php' ); + + register_widget( 'WooSlider_Widget_Attachments' ); + register_widget( 'WooSlider_Widget_Posts' ); + register_widget( 'WooSlider_Widget_Slides' ); + } // End register_widgets() + + /** + * Load the plugin's localisation file. + * @access public + * @since 1.0.0 + * @return void + */ + public function load_localisation () { + load_plugin_textdomain( 'wooslider', false, dirname( plugin_basename( $this->file ) ) . '/lang/' ); + } // End load_localisation() + + /** + * Load the plugin textdomain from the main WordPress "languages" folder. + * @since 1.0.0 + * @return void + */ + public function load_plugin_textdomain () { + $domain = 'wooslider'; + // The "plugin_locale" filter is also used in load_plugin_textdomain() + $locale = apply_filters( 'plugin_locale', get_locale(), $domain ); + + //load_plugin_textdomain( $domain, WP_LANG_DIR . '/' . $domain . '/' . $domain . '-' . $locale . '.mo' ); + load_plugin_textdomain( $domain, FALSE, dirname( plugin_basename( $this->file ) ) . '/lang/' ); + } // End load_plugin_textdomain() + + /** + * Run on activation. + * @access public + * @since 1.0.0 + * @return void + */ + public function activation () { + $this->register_plugin_version(); + } // End activation() + + /** + * Register the plugin's version. + * @access public + * @since 1.0.0 + * @return void + */ + private function register_plugin_version () { + if ( $this->version != '' ) { + update_option( 'wooslider' . '-version', $this->version ); + } + } // End register_plugin_version() + + /** + * Ensure that "post-thumbnails" support is available for those themes that don't register it. + * @since 1.0.1 + * @return void + */ + public function ensure_post_thumbnails_support () { + if ( ! current_theme_supports( 'post-thumbnails' ) ) { add_theme_support( 'post-thumbnails' ); } + } // End ensure_post_thumbnails_support() +} // End Class +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/inc/class-wc-dependencies.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/inc/class-wc-dependencies.php new file mode 100644 index 0000000..fcfc851 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/inc/class-wc-dependencies.php @@ -0,0 +1,27 @@ +file = $file; + $plugin->file_id = $file_id; + $plugin->product_id = $product_id; + + $woothemes_queued_updates[] = $plugin; + } +} + +/** + * Load installer for the WooThemes Updater. + * @return $api Object + */ +if ( ! class_exists( 'WooThemes_Updater' ) && ! function_exists( 'woothemes_updater_install' ) ) { + function woothemes_updater_install( $api, $action, $args ) { + $download_url = 'http://woodojo.s3.amazonaws.com/downloads/woothemes-updater/woothemes-updater.zip'; + + if ( 'plugin_information' != $action || + false !== $api || + ! isset( $args->slug ) || + 'woothemes-updater' != $args->slug + ) return $api; + + $api = new stdClass(); + $api->name = 'WooThemes Updater'; + $api->version = '1.0.0'; + $api->download_link = esc_url( $download_url ); + return $api; + } + + add_filter( 'plugins_api', 'woothemes_updater_install', 10, 3 ); +} + +/** + * WooUpdater Installation Prompts + */ +if ( ! class_exists( 'WooThemes_Updater' ) && ! function_exists( 'woothemes_updater_notice' ) ) { + + /** + * Display a notice if the "WooThemes Updater" plugin hasn't been installed. + * @return void + */ + function woothemes_updater_notice() { + $active_plugins = apply_filters( 'active_plugins', get_option('active_plugins' ) ); + if ( in_array( 'woothemes-updater/woothemes-updater.php', $active_plugins ) ) return; + + $slug = 'woothemes-updater'; + $install_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $slug ), 'install-plugin_' . $slug ); + $activate_url = 'plugins.php?action=activate&plugin=' . urlencode( 'woothemes-updater/woothemes-updater.php' ) . '&plugin_status=all&paged=1&s&_wpnonce=' . urlencode( wp_create_nonce( 'activate-plugin_woothemes-updater/woothemes-updater.php' ) ); + + $message = 'Install the WooThemes Updater plugin to get updates for your WooThemes plugins.'; + $is_downloaded = false; + $plugins = array_keys( get_plugins() ); + foreach ( $plugins as $plugin ) { + if ( strpos( $plugin, 'woothemes-updater.php' ) !== false ) { + $is_downloaded = true; + $message = 'Activate the WooThemes Updater plugin to get updates for your WooThemes plugins.'; + } + } + //echo '

                ' . $message . '

                ' . "\n"; + } + + add_action( 'admin_notices', 'woothemes_updater_notice' ); +} +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/inc/wooslider-template.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/inc/wooslider-template.php new file mode 100644 index 0000000..3790181 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/inc/wooslider-template.php @@ -0,0 +1,85 @@ +settings->get_settings(); + $defaults['slider_type'] = 'attachments'; + + $settings = wp_parse_args( $args, $defaults ); + + // Generate an ID for this slider. + if ( isset( $extra_args['id'] ) ) { + $settings['id'] = $extra_args['id']; + } else { + $settings['id'] = 'wooslider-id-' . $wooslider->slider_count++; + } + + $slides = $wooslider->frontend->sliders->get_slides( $settings['slider_type'], $extra_args, $settings ); + + $wooslider->frontend->sliders->add( $slides, $settings, $extra_args ); + + $theme = 'default'; + if ( $wooslider->frontend->is_valid_theme( $extra_args ) ) { + $theme = $wooslider->frontend->get_sanitized_theme_key( $extra_args ); + } + + $slides_html = $wooslider->frontend->sliders->render( $slides, $extra_args ); + + $html = ''; + if ( '' != $slides_html ) { + $html .= '
                  ' . "\n"; + $html .= $slides_html; + $html .= '
                ' . "\n"; + } + + if ( $echo == true ) { echo $html; } + + return $html; +} // End wooslider() +} + +if ( ! function_exists( 'wooslider_shortcode' ) ) { +/** + * WooSlider shortcode wrapper. + * @since 1.0.0 + * @param array $atts Optional shortcode attributes, used to customise slider settings. + * @param string $content Content, if the shortcode supports wrapping of content. + * @return string Rendered WooSlider. + */ +function wooslider_shortcode ( $atts, $content = null ) { + global $wooslider; + $args = $wooslider->settings->get_settings(); + $args['slider_type'] = 'attachments'; + $settings = shortcode_atts( $args, $atts ); + $extra_args = array(); + + foreach ( (array)$atts as $k => $v ) { + if ( ! in_array( $k, array_keys( $args ) ) ) { + $extra_args[$k] = $v; + } + } + + return wooslider( $settings, $extra_args, false ); +} // End wooslider_shortcode() +} + +add_shortcode( 'wooslider', 'wooslider_shortcode' ); +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/lang/wooslider-en_GB.mo b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/lang/wooslider-en_GB.mo new file mode 100644 index 0000000..e69de29 diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/lang/wooslider-en_GB.po b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/lang/wooslider-en_GB.po new file mode 100644 index 0000000..5cfbe70 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/lang/wooslider-en_GB.po @@ -0,0 +1,1184 @@ +msgid "" +msgstr "" +"Project-Id-Version: WooSlider v1.0.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-09-03 10:43:01+0000\n" +"Last-Translator: Matty \n" +"Language-Team: \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-Poedit-Language: English\n" +"X-Poedit-Country: UNITED KINGDOM\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n" +"X-Poedit-Basepath: ../\n" +"X-Poedit-Bookmarks: \n" +"X-Poedit-SearchPath-0: .\n" +"X-Textdomain-Support: yes" + +#: classes/class-wooslider-admin.php:66 +#: classes/class-wooslider-posttypes.php:121 +#@ wooslider +msgid "Slideshows" +msgstr "" + +#: classes/class-wooslider-admin.php:91 +#: classes/class-wooslider-admin.php:99 +#@ wooslider +msgid "Insert Slideshow" +msgstr "" + +#: classes/class-wooslider-admin.php:93 +#@ wooslider +msgid "Advanced Settings" +msgstr "" + +#: classes/class-wooslider-admin.php:95 +#@ wooslider +msgid "Optionally override the default slideshow settings using the fields below." +msgstr "" + +#: classes/class-wooslider-admin.php:161 +#@ wooslider +msgid "Slideshow Type" +msgstr "" + +#: classes/class-wooslider-admin.php:169 +#@ wooslider +msgid "The type of slideshow to insert" +msgstr "" + +#: classes/class-wooslider-admin.php:401 +#@ wooslider +msgid "Number of Images" +msgstr "" + +#: classes/class-wooslider-admin.php:401 +#@ wooslider +msgid "The maximum number of images to display" +msgstr "" + +#: classes/class-wooslider-admin.php:402 +#: classes/class-wooslider-admin.php:437 +#: classes/class-wooslider-admin.php:511 +#@ wooslider +msgid "Use thumbnails for Pagination" +msgstr "" + +#: classes/class-wooslider-admin.php:402 +#@ wooslider +msgid "Use thumbnails for pagination, instead of \"dot\" indicators" +msgstr "" + +#: classes/class-wooslider-admin.php:435 +#@ wooslider +msgid "Number of Slides" +msgstr "" + +#: classes/class-wooslider-admin.php:435 +#@ wooslider +msgid "The maximum number of slides to display" +msgstr "" + +#: classes/class-wooslider-admin.php:437 +#: classes/class-wooslider-admin.php:511 +#@ wooslider +msgid "Use thumbnails for pagination, instead of \"dot\" indicators (uses featured image)" +msgstr "" + +#: classes/class-wooslider-admin.php:496 +#@ wooslider +msgid "None" +msgstr "" + +#: classes/class-wooslider-admin.php:496 +#@ wooslider +msgid "Full" +msgstr "" + +#: classes/class-wooslider-admin.php:496 +#@ wooslider +msgid "Natural" +msgstr "" + +#: classes/class-wooslider-admin.php:510 +#@ wooslider +msgid "Number of Posts" +msgstr "" + +#: classes/class-wooslider-admin.php:510 +#@ wooslider +msgid "The maximum number of posts to display" +msgstr "" + +#: classes/class-wooslider-admin.php:512 +#@ wooslider +msgid "Link the post title to it's post" +msgstr "" + +#: classes/class-wooslider-admin.php:512 +#@ wooslider +msgid "Link the post title to it's single post screen" +msgstr "" + +#: classes/class-wooslider-admin.php:514 +#@ wooslider +msgid "Layout" +msgstr "" + +#: classes/class-wooslider-admin.php:514 +#@ wooslider +msgid "The layout to use when displaying posts" +msgstr "" + +#: classes/class-wooslider-admin.php:515 +#@ wooslider +msgid "Overlay" +msgstr "" + +#: classes/class-wooslider-admin.php:515 +#@ wooslider +msgid "The type of overlay to use when displaying the post text" +msgstr "" + +#: classes/class-wooslider-admin.php:516 +#@ wooslider +msgid "Categories" +msgstr "" + +#: classes/class-wooslider-admin.php:516 +#@ wooslider +msgid "The categories from which to display posts" +msgstr "" + +#: classes/class-wooslider-admin.php:517 +#@ wooslider +msgid "Tags" +msgstr "" + +#: classes/class-wooslider-admin.php:517 +#@ wooslider +msgid "The tags from which to display posts" +msgstr "" + +#: classes/class-wooslider-frontend.php:185 +#: classes/class-wooslider-settings.php:146 +#@ wooslider +msgid "Previous" +msgstr "" + +#: classes/class-wooslider-frontend.php:186 +#: classes/class-wooslider-settings.php:154 +#@ wooslider +msgid "Next" +msgstr "" + +#: classes/class-wooslider-frontend.php:187 +#: classes/class-wooslider-settings.php:162 +#@ wooslider +msgid "Play" +msgstr "" + +#: classes/class-wooslider-frontend.php:188 +#: classes/class-wooslider-settings.php:170 +#@ wooslider +msgid "Pause" +msgstr "" + +#: classes/class-wooslider-posttypes.php:88 +#@ wooslider +msgctxt "taxonomy general name" +msgid "Slide Groups" +msgstr "" + +#: classes/class-wooslider-posttypes.php:89 +#@ wooslider +msgctxt "taxonomy singular name" +msgid "Slide Group" +msgstr "" + +#: classes/class-wooslider-posttypes.php:90 +#@ wooslider +msgid "Search Slide Groups" +msgstr "" + +#: classes/class-wooslider-posttypes.php:91 +#@ wooslider +msgid "All Slide Groups" +msgstr "" + +#: classes/class-wooslider-posttypes.php:92 +#@ wooslider +msgid "Parent Slide Group" +msgstr "" + +#: classes/class-wooslider-posttypes.php:93 +#@ wooslider +msgid "Parent Slide Group:" +msgstr "" + +#: classes/class-wooslider-posttypes.php:94 +#@ wooslider +msgid "Edit Slide Group" +msgstr "" + +#: classes/class-wooslider-posttypes.php:95 +#@ wooslider +msgid "Update Slide Group" +msgstr "" + +#: classes/class-wooslider-posttypes.php:96 +#@ wooslider +msgid "Add New Slide Group" +msgstr "" + +#: classes/class-wooslider-posttypes.php:97 +#@ wooslider +msgid "New Slide Group Name" +msgstr "" + +#: classes/class-wooslider-admin.php:436 +#: classes/class-wooslider-posttypes.php:98 +#@ wooslider +msgid "Slide Groups" +msgstr "" + +#: classes/class-wooslider-posttypes.php:121 +#: classes/class-wooslider-settings.php:108 +#@ wooslider +msgid "Slide" +msgstr "" + +#: classes/class-wooslider-posttypes.php:121 +#: classes/class-wooslider-utils.php:31 +#@ wooslider +msgid "Slides" +msgstr "" + +#: classes/class-wooslider-posttypes.php:135 +#, php-format +#@ wooslider +msgctxt "post type general name" +msgid "%s" +msgstr "" + +#: classes/class-wooslider-posttypes.php:136 +#, php-format +#@ wooslider +msgctxt "post type singular name" +msgid "%s" +msgstr "" + +#: classes/class-wooslider-posttypes.php:137 +#, php-format +#@ wooslider +msgctxt "" +msgid "Add New %s" +msgstr "" + +#: classes/class-wooslider-posttypes.php:138 +#, php-format +#@ wooslider +msgid "Add New %s" +msgstr "" + +#: classes/class-wooslider-posttypes.php:139 +#, php-format +#@ wooslider +msgid "Edit %s" +msgstr "" + +#: classes/class-wooslider-posttypes.php:140 +#, php-format +#@ wooslider +msgid "New %s" +msgstr "" + +#: classes/class-wooslider-posttypes.php:141 +#, php-format +#@ wooslider +msgid "All %s" +msgstr "" + +#: classes/class-wooslider-posttypes.php:142 +#, php-format +#@ wooslider +msgid "View %s" +msgstr "" + +#: classes/class-wooslider-posttypes.php:143 +#, php-format +#@ wooslider +msgid "Search %s" +msgstr "" + +#: classes/class-wooslider-posttypes.php:144 +#, php-format +#@ wooslider +msgid "No %s found" +msgstr "" + +#: classes/class-wooslider-posttypes.php:145 +#, php-format +#@ wooslider +msgid "No %s found in Trash" +msgstr "" + +#: classes/class-wooslider-posttypes.php:180 +#: classes/class-wooslider-posttypes.php:183 +#, php-format +#@ default +#@ wooslider +msgid "%s updated." +msgstr "" + +#: classes/class-wooslider-posttypes.php:181 +#@ wooslider +msgid "Custom field updated." +msgstr "" + +#: classes/class-wooslider-posttypes.php:182 +#@ wooslider +msgid "Custom field deleted." +msgstr "" + +#. translators: %s: date and time of the revision +#: classes/class-wooslider-posttypes.php:185 +#, php-format +#@ wooslider +msgid "%2$s restored to revision from %1$s" +msgstr "" + +#: classes/class-wooslider-posttypes.php:186 +#, php-format +#@ default +msgid "%2$s published." +msgstr "" + +#: classes/class-wooslider-posttypes.php:187 +#, php-format +#@ wooslider +msgid "%s saved." +msgstr "" + +#: classes/class-wooslider-posttypes.php:188 +#, php-format +#@ wooslider +msgid "%2$s submitted." +msgstr "" + +#: classes/class-wooslider-posttypes.php:189 +#, php-format +#@ wooslider +msgid "%s scheduled for: %1$s." +msgstr "" + +#: classes/class-wooslider-posttypes.php:191 +#@ default +msgid " M j, Y @ G:i" +msgstr "" + +#: classes/class-wooslider-posttypes.php:192 +#, php-format +#@ wooslider +msgid "%s draft updated." +msgstr "" + +#: classes/class-wooslider-posttypes.php:207 +#@ wooslider +msgid "Enter a title for this slide here" +msgstr "" + +#: classes/class-wooslider-posttypes.php:223 +#@ wooslider +msgctxt "column name" +msgid "Slide Title" +msgstr "" + +#: classes/class-wooslider-posttypes.php:224 +#@ wooslider +msgctxt "column name" +msgid "Featured Image" +msgstr "" + +#: classes/class-wooslider-posttypes.php:225 +#@ wooslider +msgctxt "column name" +msgid "Slide Groups" +msgstr "" + +#: classes/class-wooslider-posttypes.php:251 +#@ wooslider +msgid "No Slide Groups Specified" +msgstr "" + +#: classes/class-wooslider-settings-api.php:131 +#@ wooslider +msgid "Override init_sections() in your class." +msgstr "" + +#: classes/class-wooslider-settings-api.php:142 +#@ wooslider +msgid "Override init_fields() in your class." +msgstr "" + +#: classes/class-wooslider-settings-api.php:161 +#@ wooslider +msgid "All" +msgstr "" + +#: classes/class-wooslider-settings-api.php:343 +#@ wooslider +msgid "Powered by" +msgstr "" + +#: classes/class-wooslider-settings-api.php:782 +#, php-format +#@ wooslider +msgid "%s is a required field" +msgstr "" + +#: classes/class-wooslider-settings-api.php:793 +#, php-format +#@ wooslider +msgid "%s updated" +msgstr "" + +#: classes/class-wooslider-settings.php:70 +#: classes/class-wooslider-settings.php:317 +#@ wooslider +msgid "General Settings" +msgstr "" + +#: classes/class-wooslider-settings.php:71 +#: classes/class-wooslider-settings.php:319 +#@ wooslider +msgid "Settings to apply to all slideshows, unless overridden." +msgstr "" + +#: classes/class-wooslider-settings.php:75 +#: classes/class-wooslider-settings.php:330 +#@ wooslider +msgid "Control Settings" +msgstr "" + +#: classes/class-wooslider-settings.php:76 +#: classes/class-wooslider-settings.php:332 +#@ wooslider +msgid "Customise the ways in which slideshows can be controlled." +msgstr "" + +#: classes/class-wooslider-settings.php:80 +#: classes/class-wooslider-settings.php:350 +#@ wooslider +msgid "Button Settings" +msgstr "" + +#: classes/class-wooslider-settings.php:81 +#: classes/class-wooslider-settings.php:352 +#@ wooslider +msgid "Customise the texts of the various slideshow buttons." +msgstr "" + +#: classes/class-wooslider-settings.php:102 +#: classes/class-wooslider-settings.php:321 +#@ wooslider +msgid "Animation" +msgstr "" + +#: classes/class-wooslider-settings.php:103 +#@ wooslider +msgid "The slider animation" +msgstr "" + +#: classes/class-wooslider-settings.php:108 +#@ wooslider +msgid "Fade" +msgstr "" + +#: classes/class-wooslider-settings.php:112 +#: classes/class-wooslider-settings.php:322 +#@ wooslider +msgid "Slide Direction" +msgstr "" + +#: classes/class-wooslider-settings.php:113 +#@ wooslider +msgid "The direction to slide (if using the \"Slide\" animation)" +msgstr "" + +#: classes/class-wooslider-settings.php:118 +#@ wooslider +msgid "Horizontal" +msgstr "" + +#: classes/class-wooslider-settings.php:118 +#@ wooslider +msgid "Vertical" +msgstr "" + +#: classes/class-wooslider-settings.php:122 +#: classes/class-wooslider-settings.php:323 +#@ wooslider +msgid "Slideshow Speed" +msgstr "" + +#: classes/class-wooslider-settings.php:123 +#@ wooslider +msgid "Set the delay between each slide animation (in seconds)" +msgstr "" + +#: classes/class-wooslider-settings.php:132 +#: classes/class-wooslider-settings.php:324 +#@ wooslider +msgid "Animation Speed" +msgstr "" + +#: classes/class-wooslider-settings.php:133 +#@ wooslider +msgid "Set the duration of each slide animation (in seconds)" +msgstr "" + +#: classes/class-wooslider-settings.php:143 +#: classes/class-wooslider-settings.php:354 +#@ wooslider +msgid "\"Previous\" Link Text" +msgstr "" + +#: classes/class-wooslider-settings.php:144 +#@ wooslider +msgid "The text to display on the \"Previous\" button." +msgstr "" + +#: classes/class-wooslider-settings.php:151 +#: classes/class-wooslider-settings.php:355 +#@ wooslider +msgid "\"Next\" Link Text" +msgstr "" + +#: classes/class-wooslider-settings.php:152 +#@ wooslider +msgid "The text to display on the \"Next\" button." +msgstr "" + +#: classes/class-wooslider-settings.php:159 +#: classes/class-wooslider-settings.php:356 +#@ wooslider +msgid "\"Play\" Button Text" +msgstr "" + +#: classes/class-wooslider-settings.php:160 +#@ wooslider +msgid "The text to display on the \"Play\" button." +msgstr "" + +#: classes/class-wooslider-settings.php:167 +#: classes/class-wooslider-settings.php:357 +#@ wooslider +msgid "\"Pause\" Button Text" +msgstr "" + +#: classes/class-wooslider-settings.php:168 +#@ wooslider +msgid "The text to display on the \"Pause\" button." +msgstr "" + +#: classes/class-wooslider-settings.php:177 +#: classes/class-wooslider-settings.php:334 +#@ wooslider +msgid "Animate the slideshows automatically" +msgstr "" + +#: classes/class-wooslider-settings.php:185 +#: classes/class-wooslider-settings.php:335 +#@ wooslider +msgid "Adjust the height of the slideshow to the height of the current slide" +msgstr "" + +#: classes/class-wooslider-settings.php:193 +#: classes/class-wooslider-settings.php:336 +#@ wooslider +msgid "Display the \"Previous/Next\" navigation" +msgstr "" + +#: classes/class-wooslider-settings.php:201 +#: classes/class-wooslider-settings.php:337 +#@ wooslider +msgid "Display the slideshow pagination" +msgstr "" + +#: classes/class-wooslider-settings.php:209 +#: classes/class-wooslider-settings.php:338 +#@ wooslider +msgid "Enable keyboard navigation" +msgstr "" + +#: classes/class-wooslider-settings.php:217 +#: classes/class-wooslider-settings.php:339 +#@ wooslider +msgid "Enable the mousewheel navigation" +msgstr "" + +#: classes/class-wooslider-settings.php:225 +#: classes/class-wooslider-settings.php:340 +#@ wooslider +msgid "Enable the \"Play/Pause\" event" +msgstr "" + +#: classes/class-wooslider-settings.php:233 +#: classes/class-wooslider-settings.php:341 +#@ wooslider +msgid "Randomize the order of slides in slideshows" +msgstr "" + +#: classes/class-wooslider-settings.php:241 +#: classes/class-wooslider-settings.php:342 +#@ wooslider +msgid "Loop the slideshow animations" +msgstr "" + +#: classes/class-wooslider-settings.php:249 +#: classes/class-wooslider-settings.php:343 +#@ wooslider +msgid "Pause the slideshow autoplay when using the pagination or \"Previous/Next\" navigation" +msgstr "" + +#: classes/class-wooslider-settings.php:257 +#: classes/class-wooslider-settings.php:344 +#@ wooslider +msgid "Pause the slideshow autoplay when hovering over a slide" +msgstr "" + +#: classes/class-wooslider-settings.php:310 +#: classes/class-wooslider-settings.php:366 +#: classes/class-wooslider-settings.php:436 +#@ wooslider +msgid "Overview" +msgstr "" + +#: classes/class-wooslider-settings.php:312 +#@ wooslider +msgid "This screen contains all the default settings for your slideshows created by WooSlider (animation duration, speeds, display of slideshow controls, etc). Anything set here will apply to all WooSlider slideshows, unless overridden by a slideshow." +msgstr "" + +#: classes/class-wooslider-settings.php:321 +#@ wooslider +msgid "The default animation to use for your slideshows (\"slide\" or \"fade\")." +msgstr "" + +#: classes/class-wooslider-settings.php:322 +#@ wooslider +msgid "Slide the slideshows either vertically or horizontally (works only with the \"slide\" animation)." +msgstr "" + +#: classes/class-wooslider-settings.php:322 +#@ wooslider +msgid "NOTE: When sliding vertically, all slides need to have the same height." +msgstr "" + +#: classes/class-wooslider-settings.php:323 +#@ wooslider +msgid "The delay between each slide animation (in seconds)." +msgstr "" + +#: classes/class-wooslider-settings.php:324 +#@ wooslider +msgid "The duration of each slide animation (in seconds)." +msgstr "" + +#: classes/class-wooslider-settings.php:334 +#@ wooslider +msgid "Whether or not to automatically animate between the slides (the alternative is to slide only when using the controls)." +msgstr "" + +#: classes/class-wooslider-settings.php:335 +#@ wooslider +msgid "Alternatively, the slideshow will take the height from it's tallest slide." +msgstr "" + +#: classes/class-wooslider-settings.php:336 +#@ wooslider +msgid "Show/hide the \"Previous\" and \"Next\" button controls." +msgstr "" + +#: classes/class-wooslider-settings.php:337 +#@ wooslider +msgid "Show/hide the pagination bar below the slideshow." +msgstr "" + +#: classes/class-wooslider-settings.php:338 +#@ wooslider +msgid "Enable navigation of this slideshow via the \"left\" and \"right\" arrow keys on the viewer's computer keyboard." +msgstr "" + +#: classes/class-wooslider-settings.php:339 +#@ wooslider +msgid "Enable navigation of this slideshow via the viewer's computer mousewheel." +msgstr "" + +#: classes/class-wooslider-settings.php:340 +#@ wooslider +msgid "Show/hide the \"Play/Pause\" button below the slideshow for pausing and resuming the automated slideshow." +msgstr "" + +#: classes/class-wooslider-settings.php:341 +#@ wooslider +msgid "Display the slides in the slideshow in a random order." +msgstr "" + +#: classes/class-wooslider-settings.php:342 +#@ wooslider +msgid "When arriving at the end of the slideshow, carry on sliding from the first slide, indefinitely." +msgstr "" + +#: classes/class-wooslider-settings.php:343 +#@ wooslider +msgid "Pause the slideshow automation when the viewer decides to navigate using the manual controls." +msgstr "" + +#: classes/class-wooslider-settings.php:344 +#@ wooslider +msgid "Pause the slideshow automation when the viewer hovers over the slideshow." +msgstr "" + +#: classes/class-wooslider-settings.php:354 +#@ wooslider +msgid "The text for the \"Previous\" button." +msgstr "" + +#: classes/class-wooslider-settings.php:355 +#@ wooslider +msgid "The text for the \"Next\" button." +msgstr "" + +#: classes/class-wooslider-settings.php:356 +#@ wooslider +msgid "The text for the \"Play\" button." +msgstr "" + +#: classes/class-wooslider-settings.php:357 +#@ wooslider +msgid "The text for the \"Pause\" button." +msgstr "" + +#: classes/class-wooslider-settings.php:455 +#@ wooslider +msgid "For more information:" +msgstr "" + +#: classes/class-wooslider-settings.php:456 +#@ wooslider +msgid "Support Desk" +msgstr "" + +#: classes/class-wooslider-utils.php:30 +#@ wooslider +msgid "Attached Images" +msgstr "" + +#: classes/class-wooslider-utils.php:32 +#: widgets/widget-wooslider-posts.php:38 +#@ wooslider +msgid "Posts" +msgstr "" + +#: classes/class-wooslider-utils.php:44 +#@ wooslider +msgid "Text Left" +msgstr "" + +#: classes/class-wooslider-utils.php:45 +#@ wooslider +msgid "Text Right" +msgstr "" + +#: classes/class-wooslider-utils.php:46 +#@ wooslider +msgid "Text Top" +msgstr "" + +#: classes/class-wooslider-utils.php:47 +#@ wooslider +msgid "Text Bottom" +msgstr "" + +#: classes/class-wooslider.php:68 +#@ wooslider +msgid "Slideshow Settings" +msgstr "" + +#: classes/class-wooslider.php:69 +#@ wooslider +msgid "Settings" +msgstr "" + +#: widgets/widget-wooslider-attachments.php:31 +#@ wooslider +msgid "A slideshow of the images attached to the current page/post" +msgstr "" + +#: widgets/widget-wooslider-attachments.php:33 +#@ wooslider +msgid "Attached Images Slideshow (WooSlider)" +msgstr "" + +#: widgets/widget-wooslider-attachments.php:38 +#@ wooslider +msgid "Images" +msgstr "" + +#: widgets/widget-wooslider-base.php:45 +#@ wooslider +msgid "A slideshow of the content on your site" +msgstr "" + +#: widgets/widget-wooslider-base.php:47 +#@ wooslider +msgid "Slideshow (WooSlider)" +msgstr "" + +#: widgets/widget-wooslider-base.php:260 +#@ wooslider +msgid "Title (optional):" +msgstr "" + +#: widgets/widget-wooslider-base.php:297 +#@ wooslider +msgid "Customise Advanced Settings" +msgstr "" + +#: widgets/widget-wooslider-base.php:299 +#@ wooslider +msgid "Save the widget settings with this checkbox checked to customise slideshow settings." +msgstr "" + +#: widgets/widget-wooslider-posts.php:31 +#@ wooslider +msgid "A slideshow of posts on your site" +msgstr "" + +#: widgets/widget-wooslider-posts.php:33 +#@ wooslider +msgid "Posts Slideshow (WooSlider)" +msgstr "" + +#: widgets/widget-wooslider-slides.php:31 +#@ wooslider +msgid "A slideshow of slides on your site" +msgstr "" + +#: widgets/widget-wooslider-slides.php:33 +#@ wooslider +msgid "Slides Slideshow (WooSlider)" +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:147 +#@ wooslider +msgid "WooThemes Updates" +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:167 +#@ wooslider +msgid "WooThemes Plugin Updater" +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:174 +#@ wooslider +msgid "WooThemes Username" +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:178 +#@ wooslider +msgid "WooThemes Password" +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:187 +#@ wooslider +msgid "Login" +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:238 +#@ wooslider +msgid "Switch WooThemes Account" +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:240 +#, php-format +#@ wooslider +msgid "You are currently logged in as %1$s. To switch to a different WooThemes account, please fill in the login details below." +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:243 +#@ wooslider +msgid "Update your Plugins" +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:250 +#@ wooslider +msgid "Login Error" +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:252 +#@ wooslider +msgid "The login details supplied are invalid. Please try again." +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:262 +#@ wooslider +msgid "Enable WooThemes Plugin Updates." +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:264 +#, php-format +#@ wooslider +msgid "Please login to enable automatic plugin updates." +msgstr "" + +#: classes/class-woothemes-plugin-updater.php:277 +#@ wooslider +msgid "Hide This Message" +msgstr "" + +#: classes/class-wooslider-admin.php:513 +#@ wooslider +msgid "Display the post's excerpt" +msgstr "" + +#: classes/class-wooslider-admin.php:513 +#@ wooslider +msgid "Display the post's excerpt on each slide" +msgstr "" + +#: classes/class-wooslider-settings.php:368 +#@ wooslider +msgid "This screen provides access to all of your posts. You can customize the display of this screen to suit your workflow." +msgstr "" + +#: classes/class-wooslider-settings.php:373 +#@ wooslider +msgid "Screen Content" +msgstr "" + +#: classes/class-wooslider-settings.php:375 +#@ wooslider +msgid "You can customize the display of this screen’s contents in a number of ways:" +msgstr "" + +#: classes/class-wooslider-settings.php:377 +#@ wooslider +msgid "You can hide/display columns based on your needs and decide how many slides to list per screen using the Screen Options tab." +msgstr "" + +#: classes/class-wooslider-settings.php:378 +#@ wooslider +msgid "You can filter the list of slides by status using the text links in the upper left to show All, Published, Draft, or Trashed slides. The default view is to show all slides." +msgstr "" + +#: classes/class-wooslider-settings.php:379 +#@ wooslider +msgid "You can view slides in a simple title list or with an excerpt. Choose the view you prefer by clicking on the icons at the top of the list on the right." +msgstr "" + +#: classes/class-wooslider-settings.php:380 +#@ wooslider +msgid "You can refine the list to show only slides from a specific month by using the dropdown menus above the slides list. Click the Filter button after making your selection. You also can refine the list by clicking on the slide groups in the slides list." +msgstr "" + +#: classes/class-wooslider-settings.php:386 +#@ wooslider +msgid "Available Actions" +msgstr "" + +#: classes/class-wooslider-settings.php:388 +#@ wooslider +msgid "Hovering over a row in the posts list will display action links that allow you to manage your post. You can perform the following actions:" +msgstr "" + +#: classes/class-wooslider-settings.php:390 +#@ wooslider +msgid "Edit" +msgstr "" + +#: classes/class-wooslider-settings.php:390 +#@ wooslider +msgid "takes you to the editing screen for that slide. You can also reach that screen by clicking on the slide title." +msgstr "" + +#: classes/class-wooslider-settings.php:391 +#@ wooslider +msgid "Quick Edit" +msgstr "" + +#: classes/class-wooslider-settings.php:391 +#@ wooslider +msgid "provides inline access to the metadata of your slide, allowing you to update slide details without leaving this screen." +msgstr "" + +#: classes/class-wooslider-settings.php:392 +#@ wooslider +msgid "Trash" +msgstr "" + +#: classes/class-wooslider-settings.php:392 +#@ wooslider +msgid "removes your slide from this list and places it in the trash, from which you can permanently delete it." +msgstr "" + +#: classes/class-wooslider-settings.php:393 +#@ wooslider +msgid "Preview" +msgstr "" + +#: classes/class-wooslider-settings.php:393 +#@ wooslider +msgid "will show you what your draft slide will look like if you publish it. View will take you to your live site to view the slide. Which link is available depends on your slide's status." +msgstr "" + +#: classes/class-wooslider-settings.php:399 +#@ wooslider +msgid "Bulk Actions" +msgstr "" + +#: classes/class-wooslider-settings.php:401 +#@ wooslider +msgid "You can also edit or move multiple slides to the trash at once. Select the slides you want to act on using the checkboxes, then select the action you want to take from the Bulk Actions menu and click Apply." +msgstr "" + +#: classes/class-wooslider-settings.php:402 +#@ wooslider +msgid "When using Bulk Edit, you can change the metadata (slide groups, etc) for all selected slides at once. To remove a slide from the grouping, just click the x next to its name in the Bulk Edit area that appears." +msgstr "" + +#: classes/class-wooslider-settings.php:410 +#@ wooslider +msgid "Customize This Display" +msgstr "" + +#: classes/class-wooslider-settings.php:412 +#@ wooslider +msgid "The title field and the big Slide Editing Area are fixed in place, but you can reposition all the other boxes using drag and drop, and can minimize or expand them by clicking the title bar of each box. Use the Screen Options tab to unhide more boxes (Excerpt, Featured Image) or to choose a 1- or 2-column layout for this screen." +msgstr "" + +#: classes/class-wooslider-settings.php:417 +#@ wooslider +msgid "Title and Content Editor" +msgstr "" + +#: classes/class-wooslider-settings.php:419 +#@ wooslider +msgid "Title" +msgstr "" + +#: classes/class-wooslider-settings.php:419 +#@ wooslider +msgid "Enter a title for your slide." +msgstr "" + +#: classes/class-wooslider-settings.php:420 +#@ wooslider +msgid "Content Editor" +msgstr "" + +#: classes/class-wooslider-settings.php:420 +#@ wooslider +msgid "Enter the text for your slide. There are two modes of editing: Visual and HTML. Choose the mode by clicking on the appropriate tab. Visual mode gives you a WYSIWYG editor. Click the last icon in the row to get a second row of controls. The HTML mode allows you to enter raw HTML along with your slide text. You can insert media files by clicking the icons above the content editor and following the directions. You can go to the distraction-free writing screen via the Fullscreen icon in Visual mode (second to last in the top row) or the Fullscreen button in HTML mode (last in the row). Once there, you can make buttons visible by hovering over the top area. Exit Fullscreen back to the regular content editor. This content area is a blank canvas for each slide. Any content added here will display in the slide.\t" +msgstr "" + +#: classes/class-wooslider-settings.php:425 +#@ wooslider +msgid "Publish Box" +msgstr "" + +#: classes/class-wooslider-settings.php:427 +#@ wooslider +msgid "Publish" +msgstr "" + +#: classes/class-wooslider-settings.php:427 +#@ wooslider +msgid "You can set the terms of publishing your slide in the Publish box. For Status, Visibility, and Publish (immediately), click on the Edit link to reveal more options. Visibility includes options for password-protecting a post or making it stay at the front of each slideshow it is in (sticky). Publish (immediately) allows you to set a future or past date and time, so you can schedule a slide to be published in the future or backdate a slide." +msgstr "" + +#: classes/class-wooslider-settings.php:428 +#@ wooslider +msgid "Featured Image" +msgstr "" + +#: classes/class-wooslider-settings.php:428 +#@ wooslider +msgid "This allows you to associate an image with your slide without inserting it. This is used only if the \"thumbnails\" pagination setting is enabled. Otherwise, the featured image is not used." +msgstr "" + +#: classes/class-wooslider-settings.php:438 +#@ wooslider +msgid "You can use slide groups to define groupings of slides to be displayed in various WooSlider slideshows." +msgstr "" + +#: classes/class-wooslider-settings.php:443 +#@ wooslider +msgid "Adding Slide Groups" +msgstr "" + +#: classes/class-wooslider-settings.php:445 +#@ wooslider +msgid "When adding a new slide group on this screen, you’ll fill in the following fields:" +msgstr "" + +#: classes/class-wooslider-settings.php:447 +#@ wooslider +msgid "Name" +msgstr "" + +#: classes/class-wooslider-settings.php:447 +#@ wooslider +msgid "The name is how it appears on your site." +msgstr "" + +#: classes/class-wooslider-settings.php:448 +#@ wooslider +msgid "Slug" +msgstr "" + +#: classes/class-wooslider-settings.php:448 +#@ wooslider +msgid "The “slug” is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens." +msgstr "" + +#: classes/class-wooslider-settings.php:449 +#@ wooslider +msgid "Description" +msgstr "" + +#: classes/class-wooslider-settings.php:449 +#@ wooslider +msgid "The description is not prominent by default; however, some themes may display it (WooSlider doesn't display this anywhere by default)." +msgstr "" + +#: classes/class-wooslider-admin.php:179 +#@ wooslider +msgid "Slideshow Theme" +msgstr "" + +#: classes/class-wooslider-admin.php:187 +#@ wooslider +msgid "The desired slideshow theme" +msgstr "" + +#: classes/class-wooslider-utils.php:79 +#@ wooslider +msgid "Default" +msgstr "" + +#: widgets/widget-wooslider-base.php:266 +#@ wooslider +msgid "Slideshow Theme:" +msgstr "" + +#: classes/class-wooslider-admin.php:436 +#@ wooslider +msgid "The slide groups from which to display slides" +msgstr "" + diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/lang/wooslider-xx_XX.pot b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/lang/wooslider-xx_XX.pot new file mode 100644 index 0000000..74abf01 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/lang/wooslider-xx_XX.pot @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: PlaceHolder\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-08-06 13:26:26+0000\n" +"Last-Translator: none\n" +"Language-Team: \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-Poedit-Language: English\n" +"X-Poedit-Country: UNITED STATES\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n" +"X-Poedit-Basepath: ../\n" +"X-Poedit-Bookmarks: \n" +"X-Poedit-SearchPath-0: .\n" +"X-Textdomain-Support: yes" + diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-attachments.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-attachments.php new file mode 100644 index 0000000..3ca8228 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-attachments.php @@ -0,0 +1,77 @@ +slider_type = 'attachments'; + $this->woo_widget_cssclass = 'widget_wooslider_slideshow_attachments'; + $this->woo_widget_description = __( 'A slideshow of the images attached to the current page/post', 'wooslider' ); + $this->woo_widget_idbase = 'wooslider_slideshow_attachments'; + $this->woo_widget_title = __('Attached Images Slideshow (FlexSlider)', 'wooslider' ); + + $this->init(); + + $this->defaults = array( + 'title' => __( 'Images', 'wooslider' ) + ); + } // End Constructor + + /** + * Generate the HTML for this slideshow. + * @since 1.0.0 + * @return string The generated HTML. + */ + protected function generate_slideshow ( $instance ) { + if ( ! is_singular() ) { return ''; } + + global $wooslider; + $settings = $wooslider->settings->get_settings(); + $settings['slider_type'] = $this->slider_type; + + $extra_args = array(); + + foreach ( $instance as $k => $v ) { + if ( ! in_array( $k, array_keys( $settings ) ) ) { + $extra_args[$k] = esc_attr( $v ); + unset( $instance[$k] ); + } + } + + // Make sure the various settings are applied. + if ( isset( $instance['show_advanced_settings'] ) && ( $instance['show_advanced_settings'] == true ) ) { + foreach ( $settings as $k => $v ) { + if ( isset( $instance[$k] ) && ( $instance[$k] != $settings[$k] ) ) { + $settings[$k] = esc_attr( $instance[$k] ); + } + } + } + + $html = wooslider( $settings, $extra_args, false ); + + return $html; + } // End generate_slideshow() +} // End Class +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-base.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-base.php new file mode 100644 index 0000000..8df8685 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-base.php @@ -0,0 +1,422 @@ + '' ); + protected $woo_widget_cssclass; + protected $woo_widget_description; + protected $woo_widget_idbase; + protected $woo_widget_title; + + /** + * __construct function. + * + * @access public + * @return void + */ + public function __construct () { + /* Widget variable settings. */ + $this->woo_widget_cssclass = 'widget_wooslider_slideshow'; + $this->woo_widget_description = __( 'A slideshow of the content on your site', 'wooslider' ); + $this->woo_widget_idbase = 'wooslider_slideshow'; + $this->woo_widget_title = __( 'Slideshow (FlexSlider)', 'wooslider' ); + + $this->can_show_slideshow = true; + + $this->init(); + } // End Constructor + + /** + * Initialize the widget. + * @since 1.0.0 + * @return void + */ + protected function init () { + /* Widget settings. */ + $widget_ops = array( 'classname' => $this->woo_widget_cssclass, 'description' => $this->woo_widget_description ); + + /* Widget control settings. */ + $control_ops = array( 'width' => 250, 'height' => 350, 'id_base' => $this->woo_widget_idbase ); + + /* Create the widget. */ + $this->WP_Widget( $this->woo_widget_idbase, $this->woo_widget_title, $widget_ops, $control_ops ); + } // End init() + + /** + * widget function. + * @since 1.0.0 + * @access public + * @param array $args + * @param array $instance + * @return void + */ + public function widget ( $args, $instance ) { + $slideshow_html = $this->generate_slideshow( $instance ); + if ( $slideshow_html == '' ) { return; } + + $html = ''; + + extract( $args, EXTR_SKIP ); + + /* Our variables from the widget settings. */ + $title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base ); + + /* Before widget (defined by themes). */ + echo $before_widget; + + /* Display the widget title if one was input (before and after defined by themes). */ + if ( $title ) { + echo $before_title . esc_html( $title ) . $after_title; + } + + /* Widget content. */ + + // Add actions for plugins/themes to hook onto. + do_action( $this->woo_widget_cssclass . '_top' ); + + // Load widget content here. + $html = ''; + + $html .= $slideshow_html; + + echo $html; + + // Add actions for plugins/themes to hook onto. + do_action( $this->woo_widget_cssclass . '_bottom' ); + + /* After widget (defined by themes). */ + echo $after_widget; + + } // End widget() + + /** + * update function. + * @access public + * @param array $new_instance + * @param array $old_instance + * @return array $instance + */ + public function update ( $new_instance, $old_instance ) { + global $wooslider; + + $instance = $old_instance; + + /* Strip tags for title and name to remove HTML (important for text inputs). */ + $instance['title'] = esc_html( $new_instance['title'] ); + + /* Save the selected theme. */ + $instance['theme'] = esc_attr( $new_instance['theme'] ); + + /* Save fields for the various contexts. */ + $fields = $wooslider->admin->generate_default_conditional_fields( array( $this->slider_type => $this->slider_type ) ); + + /* Advanced Settings switch and related fields. */ + $instance['show_advanced_settings'] = (bool)intval( $new_instance['show_advanced_settings'] ); + + if ( isset( $instance['show_advanced_settings'] ) && ( $instance['show_advanced_settings'] == true ) ) { + $wooslider->settings->init_fields(); + $advanced_fields = $wooslider->settings->fields; + + if ( is_array( $advanced_fields ) && count( $advanced_fields ) > 0 ) { + foreach ( $advanced_fields as $i => $j ) { + switch ( $j['type'] ) { + case 'checkbox': + if ( isset( $new_instance[$i] ) && ( $new_instance[$i] == 1 ) ) { + $instance[$i] = (bool)intval( $new_instance[$i] ); + } else { + $instance[$i] = false; + } + break; + + case 'multicheck': + $instance[$i] = array_map( 'esc_attr', $new_instance[$i] ); + break; + + case 'text': + case 'select': + case 'images': + case 'range': + default: + $instance[$i] = esc_attr( $new_instance[$i] ); + break; + } + } + } + } + + /* Cater for new fields and preserve old fields if they aren't part of our current fields to be saved. */ + // Save fields for the current type. + if ( isset( $fields[$this->slider_type] ) ) { + foreach ( $fields[$this->slider_type] as $i => $j ) { + switch ( $j['type'] ) { + case 'checkbox': + if ( isset( $new_instance[$i] ) && ( $new_instance[$i] == 1 ) ) { + $instance[$i] = (bool)intval( $new_instance[$i] ); + } else { + $instance[$i] = false; + } + break; + + case 'multicheck': + $instance[$i] = array_map( 'esc_attr', $new_instance[$i] ); + break; + + case 'text': + case 'select': + case 'images': + case 'range': + $instance[$i] = esc_attr( $new_instance[$i] ); + break; + } + } + } + + // Allow child themes/plugins to act here. + $instance = apply_filters( $this->woo_widget_idbase . '_widget_save', $instance, $new_instance, $this ); + + return $instance; + } // End update() + + /** + * form function. + * + * @since 1.0.0 + * @access public + * @param array $instance + * @uses global $wooslider object + * @return void + */ + public function form ( $instance ) { + global $wooslider; + + /* Set up some default widget settings. */ + /* Make sure all keys are added here, even with empty string values. */ + $defaults = $this->defaults; + + // Allow child themes/plugins to filter here. + $defaults = apply_filters( $this->woo_widget_idbase . '_widget_defaults', $defaults, $this ); + $defaults['show_advanced_settings'] = 0; + $defaults['theme'] = 'default'; + + $advanced_fields = array(); + + $wooslider->settings->init_fields(); + $advanced_fields = $wooslider->settings->fields; + + if ( is_array( $advanced_fields ) && count( $advanced_fields ) > 0 ) { + foreach ( $advanced_fields as $k => $v ) { + if ( ! isset( $defaults[$k] ) ) { + $defaults[$k] = $v['default']; + } + } + } + + $has_fields = false; + if ( isset( $this->slider_type ) && ( $this->slider_type != '' ) ) { + $fields = $wooslider->admin->generate_default_conditional_fields( array( $this->slider_type => $this->slider_type ) ); + $has_fields = true; + + if ( 0 < count( $fields ) ) { + foreach ( $fields[$this->slider_type] as $k => $v ) { + if ( isset( $v['args']['data']['default'] ) ) { + $defaults[$k] = $v['args']['data']['default']; + } + } + } + } + + // Get the supported themes. + $themes = WooSlider_Utils::get_slider_themes(); + + $instance = wp_parse_args( $instance, $defaults ); +?> + +

                + + +

                + + +

                + + +

                + get_field_name( 'theme' ) ) . '" id="' . esc_attr( $this->get_field_id( 'theme' ) ) . '" value="' . esc_attr( $instance['theme'] ) . '" />' . "\n"; + } + ?> + slider_type ) && ( $this->slider_type != '' ) ) { + foreach ( $fields[$this->slider_type] as $k => $v ) { + ?> +

                + ' . $v['name'] . '' . "\n"; + if ( $v['type'] != 'checkbox' ) { echo $field_label; } // Display the label first if the field isn't a checkbox. + $this->generate_field_by_type( $v['type'], $v['args'], $instance ); + if ( $v['type'] == 'checkbox' ) { echo $field_label; } // Display the label last if the field is a checkbox. + ?> +

                + +
                + +

                + /> + +

                +

                + 0 ) { + foreach ( $advanced_fields as $k => $v ) { + echo '

                ' . "\n"; + $label = $v['name']; + if ( $label == '' ) { $label = $v['description']; } + $field_label = '' . "\n"; + if ( $v['type'] != 'checkbox' ) { echo $field_label; } // Display the label first if the field isn't a checkbox. + $this->generate_field_by_type( $v['type'], array( 'key' => $k, 'data' => $v ), $instance ); + if ( $v['type'] == 'checkbox' ) { echo $field_label; } // Display the label last if the field is a checkbox. + echo '

                ' . "\n"; + } + } + } else { + if ( is_array( $advanced_fields ) && count( $advanced_fields ) > 0 ) { + foreach ( $advanced_fields as $k => $v ) { + echo '' . "\n"; + } + } + } + } + ?> +woo_widget_idbase . '_widget_settings', $instance, $this ); + + } // End form() + + /** + * Generate a field from the settings API based on a provided field type. + * @since 1.0.0 + * @param string $type The type of field to generate. + * @param array $args Arguments to be passed to the field. + * @param array $instance The current widget's instance. + * @return void + */ + private function generate_field_by_type ( $type, $args, $instance ) { + if ( is_array( $args ) && isset( $args['key'] ) && isset( $args['data'] ) ) { + switch ( $type ) { + // Select fields. + case 'select': + case 'images': + case 'range': + $html = '' . "\n"; + + echo $html; + break; + + // Multiple checkboxes. + case 'multicheck': + if ( isset( $args['data']['options'] ) && ( count( (array)$args['data']['options'] ) > 0 ) ) { + $html = '
                ' . "\n"; + foreach ( $args['data']['options'] as $k => $v ) { + $checked = ''; + if ( in_array( $k, (array)$instance[$args['key']] ) ) { $checked = ' checked="checked"'; } + $html .= ' ' . $v . '
                ' . "\n"; + } + $html .= '
                ' . "\n"; + echo $html; + } + + break; + + // Single checkbox. + case 'checkbox': + if ( isset( $args['key'] ) && $args['key'] != '' ) { + $html .= ' ' . "\n"; + echo $html; + } + + break; + + // Text input. + case 'text': + if ( isset( $args['key'] ) && $args['key'] != '' ) { + $html .= ' ' . "\n"; + echo $html; + } + + break; + } + } + } // End generate_field_by_type() + + /** + * Generate the HTML for this slideshow. + * @since 1.0.0 + * @return string The generated HTML. + */ + protected function generate_slideshow ( $instance ) { + global $wooslider; + $settings = $wooslider->settings->get_settings(); + $settings['slider_type'] = $this->slider_type; + + $extra_args = array(); + + foreach ( $instance as $k => $v ) { + if ( ! in_array( $k, array_keys( $settings ) ) ) { + $extra_args[$k] = esc_attr( $v ); + } + } + + // Make sure the various settings are applied. + if ( isset( $instance['show_advanced_settings'] ) && ( $instance['show_advanced_settings'] == true ) ) { + foreach ( $settings as $k => $v ) { + if ( isset( $instance[$k] ) && ( $instance[$k] != $settings[$k] ) ) { + $settings[$k] = esc_attr( $instance[$k] ); + } + } + } + + $html = wooslider( $settings, $extra_args, false ); + + return $html; + } // End generate_slideshow() +} // End Class +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-posts.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-posts.php new file mode 100644 index 0000000..fff08c6 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-posts.php @@ -0,0 +1,100 @@ +slider_type = 'posts'; + $this->woo_widget_cssclass = 'widget_wooslider_slideshow_posts'; + $this->woo_widget_description = __( 'A slideshow of posts on your site', 'wooslider' ); + $this->woo_widget_idbase = 'wooslider_slideshow_posts'; + $this->woo_widget_title = __('Posts Slideshow (FlexSlider)', 'wooslider' ); + + $this->init(); + + $this->defaults = array( + 'title' => __( 'Posts', 'wooslider' ) + ); + } // End Constructor + + /** + * Generate the HTML for this slideshow. + * @since 1.0.0 + * @return string The generated HTML. + */ + protected function generate_slideshow ( $instance ) { + global $wooslider; + $settings = $wooslider->settings->get_settings(); + $settings['slider_type'] = $this->slider_type; + + $extra_args = array(); + + // Tags. + if ( isset( $instance['tag'] ) && is_array( $instance['tag'] ) ) { + $count = 0; + foreach ( $instance['tag'] as $k => $v ) { + $count++; + if ( $count > 1 ) { + $extra_args['tag'] .= '+'; + } + $extra_args['tag'] .= esc_attr( $v ); + } + unset( $instance['tag'] ); + } + + // Categories. + if ( isset( $instance['category'] ) && is_array( $instance['category'] ) ) { + $count = 0; + foreach ( $instance['category'] as $k => $v ) { + $count++; + if ( $count > 1 ) { + $extra_args['category'] .= ','; + } + $extra_args['category'] .= esc_attr( $v ); + } + unset( $instance['category'] ); + } + + foreach ( $instance as $k => $v ) { + if ( ! in_array( $k, array_keys( $settings ) ) ) { + $extra_args[$k] = esc_attr( $v ); + } + } + + // Make sure the various settings are applied. + if ( isset( $instance['show_advanced_settings'] ) && ( $instance['show_advanced_settings'] == true ) ) { + foreach ( $settings as $k => $v ) { + if ( isset( $instance[$k] ) && ( $instance[$k] != $settings[$k] ) ) { + $settings[$k] = esc_attr( $instance[$k] ); + } + } + } + + $html = wooslider( $settings, $extra_args, false ); + + return $html; + } // End generate_slideshow() +} // End Class +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-slides.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-slides.php new file mode 100644 index 0000000..07d8a6a --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/widgets/widget-wooslider-slides.php @@ -0,0 +1,87 @@ +slider_type = 'slides'; + $this->woo_widget_cssclass = 'widget_wooslider_slideshow_slides'; + $this->woo_widget_description = __( 'A slideshow of slides on your site', 'wooslider' ); + $this->woo_widget_idbase = 'wooslider_slideshow_slides'; + $this->woo_widget_title = __('Slides Slideshow (Flexslider)', 'wooslider' ); + + $this->init(); + + $this->defaults = array( + 'title' => '' + ); + } // End Constructor + + /** + * Generate the HTML for this slideshow. + * @since 1.0.0 + * @return string The generated HTML. + */ + protected function generate_slideshow ( $instance ) { + global $wooslider; + $settings = $wooslider->settings->get_settings(); + $settings['slider_type'] = $this->slider_type; + + $extra_args = array( 'slide_page' => '' ); + + // Slide Pages. + if ( isset( $instance['slide_page'] ) && is_array( $instance['slide_page'] ) ) { + $count = 0; + foreach ( $instance['slide_page'] as $k => $v ) { + $count++; + if ( $count > 1 ) { + $extra_args['slide_page'] .= ','; + } + $extra_args['slide_page'] .= esc_attr( $v ); + } + unset( $instance['slide_page'] ); + } + + foreach ( $instance as $k => $v ) { + if ( ! in_array( $k, array_keys( $settings ) ) ) { + $extra_args[$k] = esc_attr( $v ); + } + } + + // Make sure the various settings are applied. + if ( isset( $instance['show_advanced_settings'] ) && ( $instance['show_advanced_settings'] == true ) ) { + foreach ( $settings as $k => $v ) { + if ( isset( $instance[$k] ) && ( $instance[$k] != $settings[$k] ) ) { + $settings[$k] = esc_attr( $instance[$k] ); + } + } + } + + $html = wooslider( $settings, $extra_args, false ); + + return $html; + } // End generate_slideshow() +} // End Class +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/tf-flexslider/wooslider.php b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/wooslider.php new file mode 100644 index 0000000..11d20f2 --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/tf-flexslider/wooslider.php @@ -0,0 +1,41 @@ +version = '1.0.9'; +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/plugins/wpml.php b/src/wp-content/themes/avada/framework/plugins/wpml.php new file mode 100644 index 0000000..57538ab --- /dev/null +++ b/src/wp-content/themes/avada/framework/plugins/wpml.php @@ -0,0 +1,21 @@ +prefix}icl_translations as t on t.element_id = p.ID"; + return $join; +} + +function avada_get_next_post_plus_where($where) { + global $sitepress; + $where .= "AND t.language_code = '" . $sitepress->get_current_language() . "'"; + return $where; +} \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/recaptchalib.php b/src/wp-content/themes/avada/framework/recaptchalib.php new file mode 100644 index 0000000..f42e528 --- /dev/null +++ b/src/wp-content/themes/avada/framework/recaptchalib.php @@ -0,0 +1,277 @@ + $value ) + $req .= $key . '=' . urlencode( stripslashes($value) ) . '&'; + + // Cut the last '&' + $req=substr($req,0,strlen($req)-1); + return $req; +} + + + +/** + * Submits an HTTP POST to a reCAPTCHA server + * @param string $host + * @param string $path + * @param array $data + * @param int port + * @return array response + */ +function _recaptcha_http_post($host, $path, $data, $port = 80) { + + $req = _recaptcha_qsencode ($data); + + $http_request = "POST $path HTTP/1.0\r\n"; + $http_request .= "Host: $host\r\n"; + $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; + $http_request .= "Content-Length: " . strlen($req) . "\r\n"; + $http_request .= "User-Agent: reCAPTCHA/PHP\r\n"; + $http_request .= "\r\n"; + $http_request .= $req; + + $response = ''; + if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { + die ('Could not open socket'); + } + + fwrite($fs, $http_request); + + while ( !feof($fs) ) + $response .= fgets($fs, 1160); // One TCP-IP packet + fclose($fs); + $response = explode("\r\n\r\n", $response, 2); + + return $response; +} + + + +/** + * Gets the challenge HTML (javascript and non-javascript version). + * This is called from the browser, and the resulting reCAPTCHA HTML widget + * is embedded within the HTML form it was called from. + * @param string $pubkey A public key for reCAPTCHA + * @param string $error The error given by reCAPTCHA (optional, default is null) + * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false) + + * @return string - The HTML to be embedded in the user's form. + */ +function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false) +{ + if ($pubkey == null || $pubkey == '') { + die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create"); + } + + if ($use_ssl) { + $server = RECAPTCHA_API_SECURE_SERVER; + } else { + $server = RECAPTCHA_API_SERVER; + } + + $errorpart = ""; + if ($error) { + $errorpart = "&error=" . $error; + } + return ' + + '; +} + + + + +/** + * A ReCaptchaResponse is returned from recaptcha_check_answer() + */ +class ReCaptchaResponse { + var $is_valid; + var $error; +} + + +/** + * Calls an HTTP POST function to verify if the user's guess was correct + * @param string $privkey + * @param string $remoteip + * @param string $challenge + * @param string $response + * @param array $extra_params an array of extra variables to post to the server + * @return ReCaptchaResponse + */ +function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array()) +{ + if ($privkey == null || $privkey == '') { + die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create"); + } + + if ($remoteip == null || $remoteip == '') { + die ("For security reasons, you must pass the remote ip to reCAPTCHA"); + } + + + + //discard spam submissions + if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) { + $recaptcha_response = new ReCaptchaResponse(); + $recaptcha_response->is_valid = false; + $recaptcha_response->error = 'incorrect-captcha-sol'; + return $recaptcha_response; + } + + $response = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify", + array ( + 'privatekey' => $privkey, + 'remoteip' => $remoteip, + 'challenge' => $challenge, + 'response' => $response + ) + $extra_params + ); + + $answers = explode ("\n", $response [1]); + $recaptcha_response = new ReCaptchaResponse(); + + if (trim ($answers [0]) == 'true') { + $recaptcha_response->is_valid = true; + } + else { + $recaptcha_response->is_valid = false; + $recaptcha_response->error = $answers [1]; + } + return $recaptcha_response; + +} + +/** + * gets a URL where the user can sign up for reCAPTCHA. If your application + * has a configuration page where you enter a key, you should provide a link + * using this function. + * @param string $domain The domain where the page is hosted + * @param string $appname The name of your application + */ +function recaptcha_get_signup_url ($domain = null, $appname = null) { + return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode (array ('domains' => $domain, 'app' => $appname)); +} + +function _recaptcha_aes_pad($val) { + $block_size = 16; + $numpad = $block_size - (strlen ($val) % $block_size); + return str_pad($val, strlen ($val) + $numpad, chr($numpad)); +} + +/* Mailhide related code */ + +function _recaptcha_aes_encrypt($val,$ky) { + if (! function_exists ("mcrypt_encrypt")) { + die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed."); + } + $mode=MCRYPT_MODE_CBC; + $enc=MCRYPT_RIJNDAEL_128; + $val=_recaptcha_aes_pad($val); + return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); +} + + +function _recaptcha_mailhide_urlbase64 ($x) { + return strtr(base64_encode ($x), '+/', '-_'); +} + +/* gets the reCAPTCHA Mailhide url for a given email, public key and private key */ +function recaptcha_mailhide_url($pubkey, $privkey, $email) { + if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) { + die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " . + "you can do so at http://www.google.com/recaptcha/mailhide/apikey"); + } + + + $ky = pack('H*', $privkey); + $cryptmail = _recaptcha_aes_encrypt ($email, $ky); + + return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail); +} + +/** + * gets the parts of the email to expose to the user. + * eg, given johndoe@example,com return ["john", "example.com"]. + * the email is then displayed as john...@example.com + */ +function _recaptcha_mailhide_email_parts ($email) { + $arr = preg_split("/@/", $email ); + + if (strlen ($arr[0]) <= 4) { + $arr[0] = substr ($arr[0], 0, 1); + } else if (strlen ($arr[0]) <= 6) { + $arr[0] = substr ($arr[0], 0, 3); + } else { + $arr[0] = substr ($arr[0], 0, 4); + } + return $arr; +} + +/** + * Gets html to display an email address given a public an private key. + * to get a key, go to: + * + * http://www.google.com/recaptcha/mailhide/apikey + */ +function recaptcha_mailhide_html($pubkey, $privkey, $email) { + $emailparts = _recaptcha_mailhide_email_parts ($email); + $url = recaptcha_mailhide_url ($pubkey, $privkey, $email); + + return htmlentities($emailparts[0]) . "...@" . htmlentities ($emailparts [1]); + +} + + +?> diff --git a/src/wp-content/themes/avada/framework/views/metaboxes/es_options.php b/src/wp-content/themes/avada/framework/views/metaboxes/es_options.php new file mode 100644 index 0000000..910bc71 --- /dev/null +++ b/src/wp-content/themes/avada/framework/views/metaboxes/es_options.php @@ -0,0 +1,12 @@ +text( 'caption_1', + 'Title', + '' + ); +?> +text( 'caption_2', + 'Caption', + '' + ); +?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/views/metaboxes/page_options.php b/src/wp-content/themes/avada/framework/views/metaboxes/page_options.php new file mode 100644 index 0000000..46b5a18 --- /dev/null +++ b/src/wp-content/themes/avada/framework/views/metaboxes/page_options.php @@ -0,0 +1,308 @@ +
                +

                Slider Options:

                +select( 'slider_type', + 'Slider Type', + array('no' => 'No Slider', 'layer' => 'LayerSlider', 'flex' => 'FlexSlider', 'flex2' => 'ThemeFusion Slider', 'rev' => 'Revolution Slider', 'elastic' => 'Elastic Slider'), + '' + ); +?> +prefix . "layerslider"; + +// Get sliders +$sliders = $wpdb->get_results( "SELECT * FROM $table_name + WHERE flag_hidden = '0' AND flag_deleted = '0' + ORDER BY date_c ASC" ); + +if(!empty($sliders)): +foreach($sliders as $key => $item): + $slides[$item->id] = ''; +endforeach; +endif; + +if(isset($slides) && $slides){ +foreach($slides as $key => $val){ + $slides_array[$key] = 'LayerSlider #'.($key); +} +} +$this->select( 'slider', + 'Select LayerSlider', + $slides_array, + '' + ); +?> +errors)){ +$slides = is_array($slides) ? $slides : unserialize($slides); +foreach($slides as $key => $val){ + $slides_array[$val->slug] = $val->name; +} +} +$this->select( 'wooslider', + 'Select FlexSlider', + $slides_array, + '' + ); +?> +data; +while($i <= $data['flexsliders_number']){ + $slides_array['flexslider_'.$i] = 'TFSlider'.$i; + $i++; +} +$this->select( 'flexslider', + 'Select ThemeFusion Slider', + $slides_array, + '' + ); +?> +get_results('SELECT * FROM '.$wpdb->prefix.'revslider_sliders'); + if($get_sliders) { + foreach($get_sliders as $slider) { + $revsliders[$slider->alias] = $slider->title; + } + } +} +$this->select( 'revslider', + 'Select Revolution Slider', + $revsliders, + '' + ); +?> +errors)){ +$slides = is_array($slides) ? $slides : unserialize($slides); +foreach($slides as $key => $val){ + $slides_array[$val->slug] = $val->name; +} +} +$this->select( 'elasticslider', + 'Select Elastic Slider', + $slides_array, + '' + ); +?> +upload('fallback', 'Slider Fallback Image'); ?> +

                Page options:

                +select( 'full_width', + 'Page: Full Width', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'sidebar_position', + 'Page: Sidebar Position', + array('default' => 'Default', 'right' => 'Right', 'left' => 'Left'), + '' + ); +?> +text( 'main_top_padding', + 'Page Content Top Padding', + 'In pixels ex: 20px. Leave empty for default value.' + ); +?> +text( 'main_bottom_padding', + 'Page Content Bottom Padding', + 'In pixels ex: 20px. Leave empty for default value.' + ); +?> +text( 'hundredp_padding', + '100% Width Template Left/Right Padding', + 'In pixels ex: 20px. Leave empty for default value.' + ); +?> +

                Portfolio options:

                +text( 'portfolio_excerpt', + 'Portfolio: Excerpt Length', + '' + ); +?> +select( 'portfolio_full_width', + 'Portfolio: Full Width', + array('yes' => 'Yes', 'no' => 'No'), + '' + ); +?> +select( 'portfolio_sidebar_position', + 'Portfolio: Sidebar Position', + array('default' => 'Default', 'right' => 'Right', 'left' => 'Left'), + '' + ); +?> +term_id] = $type->name; + } +$this->multiple( 'portfolio_category', + 'Portfolio Type', + $types_array, + 'Choose what portfolio category you want to display on this page. Leave blank for all categories.' + ); +} +?> +select( 'portfolio_filters', + 'Show Portfolio Filters', + array('yes' => 'Show', 'no' => 'Hide'), + '' + ); +?> +

                Background options:

                +select( 'page_bg_layout', + 'Layout', + array('default' => 'Default', 'wide' => 'Wide', 'boxed' => 'Boxed') + ); +?> +

                Following options only work in boxed mode:

                +upload('page_bg', 'Background Image for Outer Area'); ?> +text( 'page_bg_color', + 'Background Color (Hex Code)', + '' + ); +?> +select( 'page_bg_full', + '100% Background Image', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'page_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +

                Following options work in boxed and wide mode:

                +upload('wide_page_bg', 'Background Image for Main Content Area'); ?> +text( 'wide_page_bg_color', + 'Background Color (Hex Code)', + '' + ); +?> +select( 'wide_page_bg_full', + '100% Background Image', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'wide_page_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +

                Header background options:

                +upload('header_bg', 'Background Image'); ?> +text( 'header_bg_color', + 'Background Color (Hex Code)', + '' + ); +?> +select( 'header_bg_full', + '100% Background Image', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'header_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +

                Page title bar options:

                +select( 'page_title', + 'Page Title Bar', + array('yes' => 'Show', 'no' => 'Hide'), + '' + ); +?> +select( 'page_title_text', + 'Page Title Bar Text', + array('yes' => 'Show', 'no' => 'Hide'), + '' + ); +?> +text( 'page_title_custom_text', + 'Page Title Bar Custom Text', + '' + ); +?> +text( 'page_title_custom_subheader', + 'Page Title Bar Custom Subheader Text', + '' + ); +?> +text( 'page_title_height', + 'Page Title Bar Height (in pixels "px")', + '' + ); +?> + +upload('page_title_bar_bg', 'Page Title Bar Background'); ?> +upload('page_title_bar_bg_retina', 'Page Title Bar Background Retina'); ?> +text( 'page_title_bar_bg_color', + 'Page Title Bar Background Color (Hex Code)', + '' + ); +?> +select( 'page_title_bar_bg_full', + '100% Background Image', + array('default' => 'Default', 'no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'page_title_bg_parallax', + 'Parallax Background Image', + array('default' => 'Default', 'no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +
                \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/views/metaboxes/portfolio_options.php b/src/wp-content/themes/avada/framework/views/metaboxes/portfolio_options.php new file mode 100644 index 0000000..1cfb535 --- /dev/null +++ b/src/wp-content/themes/avada/framework/views/metaboxes/portfolio_options.php @@ -0,0 +1,355 @@ +
                +

                Portfolio options:

                +select( 'width', + 'Width (Content Columns for Featured Image)', + array('full' => 'Full Width', 'half' => 'Half Width'), + '' + ); +?> +select( 'portfolio_width_100', + 'Use 100% Width Page', + array('no' => 'No','yes' => 'Yes'), + '' + ); +?> +select( 'sidebar', + 'Show Sidebar', + array('no' => 'No','yes' => 'Yes'), + '' + ); +?> +select( 'sidebar_position', + 'Page: Sidebar Position', + array('default' => 'Default', 'right' => 'Right', 'left' => 'Left'), + '' + ); +?> +select( 'project_desc_title', + 'Show Project Description Title', + array('yes' => 'Yes', 'no' => 'No'), + '' + ); +?> +select( 'project_details', + 'Show Project Details', + array('yes' => 'Yes', 'no' => 'No'), + '' + ); +?> +select( 'show_first_featured_image', + 'Enable First Featured Image On Video Posts', + array('no' => 'No', 'yes' => 'Yes'), + '(Checking this option will allow the first featured image to show on single post pages.)' + ); +?> +textarea( 'video', + 'Video Embed Code' + ); +?> +text( 'video_url', + 'Youtube/Vimeo Video URL for Lightbox', + '' + ); +?> +text( 'project_url', + 'Project URL', + '' + ); +?> +text( 'project_url_text', + 'Project URL Text', + '' + ); +?> +text( 'copy_url', + 'Copyright URL', + '' + ); +?> +text( 'copy_url_text', + 'Copyright URL Text', + '' + ); +?> +text( 'fimg_width', + 'Featured Image Width', + '(in pixels or percentage, e.g.: 100% or 100px. Or Use "auto" for automatic resizing if you added either width or height)' + ); +?> +text( 'fimg_height', + 'Featured Image Height', + '(in pixels or percentage, e.g.: 100% or 100px. Or Use "auto" for automatic resizing if you added either width or height)' + ); +?> +select( 'image_rollover_icons', + 'Image Rollover Icons', + array('linkzoom' => 'Link + Zoom', 'link' => 'Link', 'zoom' => 'Zoom', 'no' => 'No Icons'), + '' + ); +?> +text( 'link_icon_url', + 'Link Icon URL', + 'Leave blank for post URL' + ); +?> +select( 'link_icon_target', + 'Open Link Icon URL In New Window', + array('no' => 'No','yes' => 'Yes'), + '' + ); +?> +select( 'related_posts', + 'Show Related Posts', + array('yes' => 'Show', 'no' => 'Hide'), + '' + ); +?> +

                Slider options:

                +select( 'slider_type', + 'Slider Type', + array('no' => 'No Slider', 'layer' => 'LayerSlider', 'flex' => 'FlexSlider', 'flex2' => 'ThemeFusion Slider', 'rev' => 'Revolution Slider', 'elastic' => 'Elastic Slider'), + '' + ); +?> +prefix . "layerslider"; + +// Get sliders +$sliders = $wpdb->get_results( "SELECT * FROM $table_name + WHERE flag_hidden = '0' AND flag_deleted = '0' + ORDER BY date_c ASC" ); + +if(!empty($sliders)): +foreach($sliders as $key => $item): + $slides[$item->id] = ''; +endforeach; +endif; + +if(isset($slides) && $slides){ +foreach($slides as $key => $val){ + $slides_array[$key] = 'LayerSlider #'.($key); +} +} +$this->select( 'slider', + 'Select LayerSlider', + $slides_array, + '' + ); +?> +errors)){ +$slides = is_array($slides) ? $slides : unserialize($slides); +foreach($slides as $key => $val){ + $slides_array[$val->slug] = $val->name; +} +} +$this->select( 'wooslider', + 'Select FlexSlider', + $slides_array, + '' + ); +?> +data; +while($i <= $data['flexsliders_number']){ + $slides_array['flexslider_'.$i] = 'TFSlider'.$i; + $i++; +} +$this->select( 'flexslider', + 'Select ThemeFusion Slider', + $slides_array, + '' + ); +?> +get_results('SELECT * FROM '.$wpdb->prefix.'revslider_sliders'); + if($get_sliders) { + foreach($get_sliders as $slider) { + $revsliders[$slider->alias] = $slider->title; + } + } +} +$this->select( 'revslider', + 'Select Revolution Slider', + $revsliders, + '' + ); +?> +errors)){ +$slides = is_array($slides) ? $slides : unserialize($slides); +foreach($slides as $key => $val){ + $slides_array[$val->slug] = $val->name; +} +} +$this->select( 'elasticslider', + 'Select Elastic Slider', + $slides_array, + '' + ); +?> +upload('fallback', 'Slider Fallback Image'); ?> +

                Background options:

                +select( 'page_bg_layout', + 'Layout', + array('default' => 'Default', 'wide' => 'Wide', 'boxed' => 'Boxed') + ); +?> +

                Following options only work in boxed mode:

                +upload('page_bg', 'Background Image for Outer Area'); ?> +text( 'page_bg_color', + 'Background Color (Hex Code)', + '' + ); +?> +select( 'page_bg_full', + '100% Background Image', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'page_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +

                Following options work in boxed and wide mode:

                +upload('wide_page_bg', 'Background Image for Main Content Area'); ?> +text( 'wide_page_bg_color', + 'Background Color (Hex Code)', + '' + ); +?> +select( 'wide_page_bg_full', + '100% Background Image', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'wide_page_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +

                Header background options:

                +upload('header_bg', 'Background Image'); ?> +text( 'header_bg_color', + 'Background Color (Hex Code)', + '' + ); +?> +select( 'header_bg_full', + '100% Background Image', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'header_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +

                Page title bar options:

                +select( 'page_title', + 'Page Title Bar', + array('yes' => 'Show', 'no' => 'Hide'), + '' + ); +?> +select( 'page_title_text', + 'Page Title Bar Text', + array('yes' => 'Show', 'no' => 'Hide'), + '' + ); +?> +text( 'page_title_custom_text', + 'Page Title Bar Custom Text', + '' + ); +?> +text( 'page_title_custom_subheader', + 'Page Title Bar Custom Subheader Text', + '' + ); +?> +text( 'page_title_height', + 'Page Title Bar Height (in pixels "px")', + '' + ); +?> +upload('page_title_bar_bg', 'Page Title Bar Background'); ?> +upload('page_title_bar_bg_retina', 'Page Title Bar Background Retina'); ?> +select( 'page_title_bar_bg_full', + '100% Background Image', + array('default' => 'Default', 'no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +text( 'page_title_bar_bg_color', + 'Page Title Bar Background Color (Hex Code)', + '' + ); +?> +select( 'page_title_bg_parallax', + 'Parallax Background Image', + array('default' => 'Default', 'no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +
                \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/views/metaboxes/post_options.php b/src/wp-content/themes/avada/framework/views/metaboxes/post_options.php new file mode 100644 index 0000000..f5945a9 --- /dev/null +++ b/src/wp-content/themes/avada/framework/views/metaboxes/post_options.php @@ -0,0 +1,283 @@ +
                +

                Post options:

                +textarea( 'video', + 'Video Embed Code' + ); +?> +select( 'full_width', + 'Full Width', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'sidebar_position', + 'Sidebar Position', + array('default' => 'Default', 'right' => 'Right', 'left' => 'Left'), + '' + ); +?> +text( 'fimg_width', + 'Featured Image Width', + '(in pixels or percentage, e.g.: 100% or 100px. Or Use "auto" for automatic resizing if you added either width or height)' + ); +?> +text( 'fimg_height', + 'Featured Image Height', + '(in pixels or percentage, e.g.: 100% or 100px. Or Use "auto" for automatic resizing if you added either width or height)' + ); +?> +select( 'image_rollover_icons', + 'Image Rollover Icons', + array('linkzoom' => 'Link + Zoom', 'link' => 'Link', 'zoom' => 'Zoom', 'no' => 'No Icons'), + '' + ); +?> +text( 'link_icon_url', + 'Link Icon URL', + 'Leave blank for post URL' + ); +?> +select( 'related_posts', + 'Show Related Posts', + array('yes' => 'Show', 'no' => 'Hide'), + '' + ); +?> +

                Slider options:

                +select( 'slider_type', + 'Slider Type', + array('no' => 'No Slider', 'layer' => 'LayerSlider', 'flex' => 'FlexSlider', 'flex2' => 'ThemeFusion Slider', 'rev' => 'Revolution Slider', 'elastic' => 'Elastic Slider'), + '' + ); +?> +prefix . "layerslider"; + +// Get sliders +$sliders = $wpdb->get_results( "SELECT * FROM $table_name + WHERE flag_hidden = '0' AND flag_deleted = '0' + ORDER BY date_c ASC" ); + +if(!empty($sliders)): +foreach($sliders as $key => $item): + $slides[$item->id] = ''; +endforeach; +endif; + +if(isset($slides) && $slides){ +foreach($slides as $key => $val){ + $slides_array[$key] = 'LayerSlider #'.($key); +} +} +$this->select( 'slider', + 'Select LayerSlider', + $slides_array, + '' + ); +?> +errors)){ +$slides = is_array($slides) ? $slides : unserialize($slides); +foreach($slides as $key => $val){ + $slides_array[$val->slug] = $val->name; +} +} +$this->select( 'wooslider', + 'Select FlexSlider', + $slides_array, + '' + ); +?> +data; +while($i <= $data['flexsliders_number']){ + $slides_array['flexslider_'.$i] = 'TFSlider'.$i; + $i++; +} +$this->select( 'flexslider', + 'Select ThemeFusion Slider', + $slides_array, + '' + ); +?> +get_results('SELECT * FROM '.$wpdb->prefix.'revslider_sliders'); + if($get_sliders) { + foreach($get_sliders as $slider) { + $revsliders[$slider->alias] = $slider->title; + } + } +} +$this->select( 'revslider', + 'Select Revolution Slider', + $revsliders, + '' + ); +?> +errors)){ +$slides = is_array($slides) ? $slides : unserialize($slides); +foreach($slides as $key => $val){ + $slides_array[$val->slug] = $val->name; +} +} +$this->select( 'elasticslider', + 'Select Elastic Slider', + $slides_array, + '' + ); +?> +upload('fallback', 'Slider Fallback Image'); ?> +

                Background options:

                +select( 'page_bg_layout', + 'Layout', + array('default' => 'Default', 'wide' => 'Wide', 'boxed' => 'Boxed') + ); +?> +

                Following options only work in boxed mode:

                +upload('page_bg', 'Background Image for Outer Area'); ?> +text( 'page_bg_color', + 'Background Color (Hex Code)', + '' + ); +?> +select( 'page_bg_full', + '100% Background Image', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'page_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +

                Following options work in boxed and wide mode:

                +upload('wide_page_bg', 'Background Image for Main Content Area'); ?> +text( 'wide_page_bg_color', + 'Background Color (Hex Code)', + '' + ); +?> +select( 'wide_page_bg_full', + '100% Background Image', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'wide_page_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +

                Header background options:

                +upload('header_bg', 'Background Image'); ?> +text( 'header_bg_color', + 'Background Color (Hex Code)', + '' + ); +?> +select( 'header_bg_full', + '100% Background Image', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'header_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +

                Page title bar options:

                +select( 'page_title', + 'Page Title Bar', + array('yes' => 'Show', 'no' => 'Hide'), + '' + ); +?> +select( 'page_title_text', + 'Page Title Bar Text', + array('yes' => 'Show', 'no' => 'Hide'), + '' + ); +?> +text( 'page_title_custom_text', + 'Page Title Bar Custom Text', + '' + ); +?> +text( 'page_title_custom_subheader', + 'Page Title Bar Custom Subheader Text', + '' + ); +?> +text( 'page_title_height', + 'Page Title Bar Height (in pixels "px")', + '' + ); +?> +upload('page_title_bar_bg', 'Page Title Bar Background'); ?> +upload('page_title_bar_bg_retina', 'Page Title Bar Background Retina'); ?> +select( 'page_title_bar_bg_full', + '100% Background Image', + array('default' => 'Default', 'no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +text( 'page_title_bar_bg_color', + 'Page Title Bar Background Color (Hex Code)', + '' + ); +?> +select( 'page_title_bg_parallax', + 'Parallax Background Image', + array('default' => 'Default', 'no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +
                \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/views/metaboxes/style.php b/src/wp-content/themes/avada/framework/views/metaboxes/style.php new file mode 100644 index 0000000..2ccccdd --- /dev/null +++ b/src/wp-content/themes/avada/framework/views/metaboxes/style.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/src/wp-content/themes/avada/framework/views/metaboxes/woocommerce_options.php b/src/wp-content/themes/avada/framework/views/metaboxes/woocommerce_options.php new file mode 100644 index 0000000..a499d4e --- /dev/null +++ b/src/wp-content/themes/avada/framework/views/metaboxes/woocommerce_options.php @@ -0,0 +1,252 @@ +
                +

                Page options:

                +select( 'full_width', + 'Page: Full Width', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'sidebar_position', + 'Page: Sidebar Position', + array('default' => 'Default', 'right' => 'Right', 'left' => 'Left'), + '' + ); +?> +

                Slider options:

                +select( 'slider_type', + 'Slider Type', + array('no' => 'No Slider', 'layer' => 'LayerSlider', 'flex' => 'FlexSlider', 'flex2' => 'ThemeFusion Slider', 'rev' => 'Revolution Slider', 'elastic' => 'Elastic Slider'), + '' + ); +?> +prefix . "layerslider"; + +// Get sliders +$sliders = $wpdb->get_results( "SELECT * FROM $table_name + WHERE flag_hidden = '0' AND flag_deleted = '0' + ORDER BY date_c ASC" ); + +if(!empty($sliders)): +foreach($sliders as $key => $item): + $slides[$item->id] = ''; +endforeach; +endif; + +if($slides){ +foreach($slides as $key => $val){ + $slides_array[$key] = 'LayerSlider #'.($key); +} +} +$this->select( 'slider', + 'Select LayerSlider', + $slides_array, + '' + ); +?> +errors)){ +$slides = is_array($slides) ? $slides : unserialize($slides); +foreach($slides as $key => $val){ + $slides_array[$val->slug] = $val->name; +} +} +$this->select( 'wooslider', + 'Select FlexSlider', + $slides_array, + '' + ); +?> +data; +while($i <= $data['flexsliders_number']){ + $slides_array['flexslider_'.$i] = 'TFSlider'.$i; + $i++; +} +$this->select( 'flexslider', + 'Select ThemeFusion Slider', + $slides_array, + '' + ); +?> +get_results('SELECT * FROM '.$wpdb->prefix.'revslider_sliders'); +$revsliders[0] = 'Select a slider'; +if($get_sliders) { + foreach($get_sliders as $slider) { + $revsliders[$slider->alias] = $slider->title; + } +} +$this->select( 'revslider', + 'Select Revolution Slider', + $revsliders, + '' + ); +?> +errors)){ +$slides = is_array($slides) ? $slides : unserialize($slides); +foreach($slides as $key => $val){ + $slides_array[$val->slug] = $val->name; +} +} +$this->select( 'elasticslider', + 'Select Elastic Slider', + $slides_array, + '' + ); +?> +upload('fallback', 'Slider Fallback Image'); ?> +

                Background options:

                +select( 'page_bg_layout', + 'Layout', + array('default' => 'Default', 'wide' => 'Wide', 'boxed' => 'Boxed') + ); +?> +

                Following options only work in boxed mode:

                +upload('page_bg', 'Background Image'); ?> +text( 'page_bg_color', + 'Background Color (Hex Code)', + '' + ); +?> +select( 'page_bg_full', + '100% Background Image', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'page_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +

                Following options work in boxed and wide mode:

                +upload('wide_page_bg', 'Background Image'); ?> +text( 'wide_page_bg_color', + 'Background Color (Hex Code)', + '' + ); +?> +select( 'wide_page_bg_full', + '100% Background Image', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'wide_page_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +

                Header background options:

                +upload('header_bg', 'Background Image'); ?> +text( 'header_bg_color', + 'Background Color (Hex Code)', + '' + ); +?> +select( 'header_bg_full', + '100% Background Image', + array('no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +select( 'header_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +

                Page title bar options:

                +select( 'page_title', + 'Page Title Bar', + array('yes' => 'Show', 'no' => 'Hide'), + '' + ); +?> +select( 'page_title_text', + 'Page Title Bar Text', + array('yes' => 'Show', 'no' => 'Hide'), + '' + ); +?> +select( 'page_bg_repeat', + 'Background Repeat', + array('repeat' => 'Tile', 'repeat-x' => 'Tile Horizontally', 'repeat-y' => 'Tile Vertically', 'no-repeat' => 'No Repeat'), + '' + ); +?> +text( 'page_title_custom_text', + 'Page Title Bar Custom Text', + '' + ); +?> +text( 'page_title_custom_subheader', + 'Page Title Bar Custom Subheader Text', + '' + ); +?> +text( 'page_title_height', + 'Page Title Bar Height', + '' + ); +?> +upload('page_title_bar_bg', 'Page Title Bar Background'); ?> +upload('page_title_bar_bg_retina', 'Page Title Bar Background Retina'); ?> +select( 'page_title_bar_bg_full', + '100% Background Image', + array('default' => 'Default', 'no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +text( 'page_title_bar_bg_color', + 'Page Title Bar Background Color (Hex Code)', + '' + ); +?> +select( 'page_title_bg_parallax', + 'Parallax Background Image', + array('default' => 'Default', 'no' => 'No', 'yes' => 'Yes'), + '' + ); +?> +
                \ No newline at end of file diff --git a/src/wp-content/themes/avada/full-width.php b/src/wp-content/themes/avada/full-width.php new file mode 100644 index 0000000..c77b501 --- /dev/null +++ b/src/wp-content/themes/avada/full-width.php @@ -0,0 +1,25 @@ + +
                + +
                > + + + +
                + +
                + +
                + + +
                + + + + +
                + +
                + \ No newline at end of file diff --git a/src/wp-content/themes/avada/functions.php b/src/wp-content/themes/avada/functions.php new file mode 100644 index 0000000..8e5f91d --- /dev/null +++ b/src/wp-content/themes/avada/functions.php @@ -0,0 +1,1469 @@ +Defaults); + //$options_machine = new Options_Machine($of_options); +}*/ + +// Content Width +if (!isset( $content_width )) $content_width = '669px'; + +// Post Formats +add_theme_support('post-formats', array('gallery', 'link', 'image', 'quote', 'video', 'audio', 'chat')); + +// Enable or disable shortcodes developer mode +if($data['dev_shortcodes']) { + add_theme_support( 'fusion_shortcodes_embed' ); +} + +// Auto plugin activation +// Reset activated plugins because if pre-installed plugins are already activated in standalone mode, theme will bug out. +if(get_option('avada_int_plugins', '0') == '0') { + global $wpdb; + $wpdb->query("UPDATE ". $wpdb->options ." SET option_value = 'a:0:{}' WHERE option_name = 'active_plugins';"); + if($wpdb->sitemeta) { + $wpdb->query("UPDATE ". $wpdb->sitemeta ." SET meta_value = 'a:0:{}' WHERE meta_key = 'active_plugins';"); + } + update_option('avada_int_plugins', '1'); +} + +if(get_option('avada_int_plugins', '0') == '1') { + /**************************/ + /* Include LayerSlider WP */ + /**************************/ + + $layerslider = get_template_directory() . '/framework/plugins/LayerSlider/layerslider.php'; + + if(!$data['status_layerslider']) { + include $layerslider; + + $layerslider_last_version = get_option('avada_layerslider_last_version', '1.0'); + + // Activate the plugin if necessary + if(get_option('avada_layerslider_activated', '0') == '0') { + // Run activation script + layerslider_activation_scripts(); + + // Save a flag that it is activated, so this won't run again + update_option('avada_layerslider_activated', '1'); + + // Save the current version number of LayerSlider + update_option('avada_layerslider_last_version', $GLOBALS['lsPluginVersion']); + + // Do version check + } else if(version_compare($GLOBALS['lsPluginVersion'], $layerslider_last_version, '>')) { + // Run again activation scripts for possible adjustments + layerslider_activation_scripts(); + + // Update the version number + update_option('avada_layerslider_last_version', $GLOBALS['lsPluginVersion']); + } + } + + /**************************/ + /* Include Flexslider WP */ + /**************************/ + + $flexslider = get_template_directory() . '/framework/plugins/tf-flexslider/wooslider.php'; + if(!$data['status_flexslider']) { + include $flexslider; + } + + /**************************/ + /* Include Posts Type Order */ + /**************************/ + + $pto = get_template_directory() . '/framework/plugins/post-types-order/post-types-order.php'; + if($data['post_type_order']) { + include $pto; + } + + /************************************************/ + /* Include Previous / Next Post Pagination Plus */ + /************************************************/ + $pnp = get_template_directory() . '/framework/plugins/ambrosite-post-link-plus.php'; + include $pnp; + + /***********************/ + /* Include WPML Fixes */ + /***********************/ + if(defined('ICL_SITEPRESS_VERSION')) { + $wpml_include = get_template_directory() . '/framework/plugins/wpml.php'; + include $wpml_include; + } +} + +// Metaboxes +include_once(get_template_directory().'/framework/metaboxes.php'); + +// Extend Visual Composer +get_template_part('shortcodes'); + +// Custom Functions +get_template_part('framework/custom_functions'); + +// Plugins +include_once(get_template_directory().'/framework/plugins/multiple_sidebars.php'); + +// Widgets +get_template_part('widgets/widgets'); + +// Add post thumbnail functionality +add_theme_support('post-thumbnails'); +add_image_size('blog-large', 669, 272, true); +add_image_size('blog-medium', 320, 202, true); +add_image_size('tabs-img', 52, 50, true); +add_image_size('related-img', 180, 138, true); +add_image_size('portfolio-one', 540, 272, true); +add_image_size('portfolio-two', 460, 295, true); +add_image_size('portfolio-three', 300, 214, true); +add_image_size('portfolio-four', 220, 161, true); +add_image_size('portfolio-full', 940, 400, true); +add_image_size('recent-posts', 700, 441, true); +add_image_size('recent-works-thumbnail', 66, 66, true); + +// Register widgetized locations +if(function_exists('register_sidebar')) { + register_sidebar(array( + 'name' => 'Blog Sidebar', + 'id' => 'avada-blog-sidebar', + 'before_widget' => '
                ', + 'after_widget' => '
                ', + 'before_title' => '

                ', + 'after_title' => '

                ', + )); + + register_sidebar(array( + 'name' => 'Footer Widget 1', + 'id' => 'avada-footer-widget-1', + 'before_widget' => '', + 'before_title' => '

                ', + 'after_title' => '

                ', + )); + + register_sidebar(array( + 'name' => 'Footer Widget 2', + 'id' => 'avada-footer-widget-2', + 'before_widget' => '', + 'before_title' => '

                ', + 'after_title' => '

                ', + )); + + register_sidebar(array( + 'name' => 'Footer Widget 3', + 'id' => 'avada-footer-widget-3', + 'before_widget' => '', + 'before_title' => '

                ', + 'after_title' => '

                ', + )); + + register_sidebar(array( + 'name' => 'Footer Widget 4', + 'id' => 'avada-footer-widget-4', + 'before_widget' => '', + 'before_title' => '

                ', + 'after_title' => '

                ', + )); + + register_sidebar(array( + 'name' => 'SlidingBar Widget 1', + 'id' => 'avada-slidingbar-widget-1', + 'before_widget' => '
                ', + 'after_widget' => '
                ', + 'before_title' => '

                ', + 'after_title' => '

                ', + )); + + register_sidebar(array( + 'name' => 'SlidingBar Widget 2', + 'id' => 'avada-slidingbar-widget-2', + 'before_widget' => '
                ', + 'after_widget' => '
                ', + 'before_title' => '

                ', + 'after_title' => '

                ', + )); + + register_sidebar(array( + 'name' => 'SlidingBar Widget 3', + 'id' => 'avada-slidingbar-widget-3', + 'before_widget' => '
                ', + 'after_widget' => '
                ', + 'before_title' => '

                ', + 'after_title' => '

                ', + )); + + register_sidebar(array( + 'name' => 'SlidingBar Widget 4', + 'id' => 'avada-slidingbar-widget-4', + 'before_widget' => '
                ', + 'after_widget' => '
                ', + 'before_title' => '

                ', + 'after_title' => '

                ', + )); +} + +// Register custom post types +add_action('init', 'pyre_init'); +function pyre_init() { + global $data; + register_post_type( + 'avada_portfolio', + array( + 'labels' => array( + 'name' => 'Portfolio', + 'singular_name' => 'Portfolio' + ), + 'public' => true, + 'has_archive' => false, + 'rewrite' => array('slug' => $data['portfolio_slug']), + 'supports' => array('title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', 'page-attributes', 'post-formats'), + 'can_export' => true, + ) + ); + + register_taxonomy('portfolio_category', 'avada_portfolio', array('hierarchical' => true, 'label' => 'Categories', 'query_var' => true, 'rewrite' => true)); + register_taxonomy('portfolio_skills', 'avada_portfolio', array('hierarchical' => true, 'label' => 'Skills', 'query_var' => true, 'rewrite' => true)); + register_taxonomy('portfolio_tags', 'avada_portfolio', array('hierarchical' => false, 'label' => 'Tags', 'query_var' => true, 'rewrite' => true)); + + register_post_type( + 'avada_faq', + array( + 'labels' => array( + 'name' => 'FAQs', + 'singular_name' => 'FAQ' + ), + 'public' => true, + 'has_archive' => false, + 'rewrite' => array('slug' => 'faq-items'), + 'supports' => array('title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', 'page-attributes', 'post-formats'), + 'can_export' => true, + ) + ); + + register_taxonomy('faq_category', 'avada_faq', array('hierarchical' => true, 'label' => 'Categories', 'query_var' => true, 'rewrite' => true)); + + register_post_type( + 'themefusion_elastic', + array( + 'labels' => array( + 'name' => 'Elastic Slider', + 'singular_name' => 'Elastic Slide' + ), + 'public' => true, + 'has_archive' => false, + 'rewrite' => array('slug' => 'elastic-slide'), + 'supports' => array('title', 'thumbnail'), + 'can_export' => true, + 'menu_position' => 100, + ) + ); + + register_taxonomy('themefusion_es_groups', 'themefusion_elastic', array('hierarchical' => false, 'label' => 'Groups', 'query_var' => true, 'rewrite' => true)); +} + +// How comments are displayed +function avada_comment($comment, $args, $depth) { + $GLOBALS['comment'] = $comment; ?> + +
              13. id="comment-"> + +
                +
                + +
                + +
                + +
                + + __(' - Reply', 'Avada'), 'add_below' => 'comment', 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?> +
                + +
                + comment_approved == '0') : ?> + +
                + + +
                + +
                + +
                + +is_search) { + $query->set('post_type', 'post'); + } + return $query; +} +add_filter('pre_get_posts','pyre_SearchFilter');*/ + +add_filter('wp_get_attachment_link', 'avada_pretty'); +function avada_pretty($content) { + $content = preg_replace("/ 'featured-image-'.$i, + 'post_type' => 'post', // Set this to post or page + 'labels' => array( + 'name' => 'Featured image '.$i, + 'set' => 'Set featured image '.$i, + 'remove' => 'Remove featured image '.$i, + 'use' => 'Use as featured image '.$i, + ) + ); + + new kdMultipleFeaturedImages( $args ); + + $args = array( + 'id' => 'featured-image-'.$i, + 'post_type' => 'page', // Set this to post or page + 'labels' => array( + 'name' => 'Featured image '.$i, + 'set' => 'Set featured image '.$i, + 'remove' => 'Remove featured image '.$i, + 'use' => 'Use as featured image '.$i, + ) + ); + + new kdMultipleFeaturedImages( $args ); + + $args = array( + 'id' => 'featured-image-'.$i, + 'post_type' => 'avada_portfolio', // Set this to post or page + 'labels' => array( + 'name' => 'Featured image '.$i, + 'set' => 'Set featured image '.$i, + 'remove' => 'Remove featured image '.$i, + 'use' => 'Use as featured image '.$i, + ) + ); + + new kdMultipleFeaturedImages( $args ); + + $i++; + } + +} + +function avada_excerpt_length( $length ) { + global $data; + + if(isset($data['excerpt_length_blog'])) { + return $data['excerpt_length_blog']; + } +} +add_filter('excerpt_length', 'avada_excerpt_length', 999); + +function avada_admin_bar_render() { + global $wp_admin_bar; + $wp_admin_bar->add_menu( array( + 'parent' => 'site-name', // use 'false' for a root menu, or pass the ID of the parent menu + 'id' => 'smof_options', // link ID, defaults to a sanitized title value + 'title' => __('Theme Options', 'Avada'), // link title + 'href' => admin_url( 'themes.php?page=optionsframework'), // name of file + 'meta' => false // array of any of the following options: array( 'html' => '', 'class' => '', 'onclick' => '', target => '', title => '' ); + )); +} +add_action( 'wp_before_admin_bar_render', 'avada_admin_bar_render' ); + +add_filter('upload_mimes', 'avada_filter_mime_types'); +function avada_filter_mime_types($mimes) +{ + $mimes['ttf'] = 'font/ttf'; + $mimes['woff'] = 'font/woff'; + $mimes['svg'] = 'font/svg'; + $mimes['eot'] = 'font/eot'; + + return $mimes; +} + +function avada_process_tag( $m ) { + if ($m[2] == 'dropcap' || $m[2] == 'highlight' || $m[2] == 'tooltip') { + return $m[0]; + } + + // allow [[foo]] syntax for escaping a tag + if ( $m[1] == '[' && $m[6] == ']' ) { + return substr($m[0], 1, -1); + } + + return $m[1] . $m[6]; +} + +function tf_content($limit, $strip_html) { + global $data, $more; + + if(!$limit && $limit != 0) { + $limit = 285; + } + + $limit = (int) $limit; + + $test_strip_html = $strip_html; + + if($strip_html == "true" || $strip_html == true) { + $test_strip_html = true; + } + + if($strip_html == "false" || $strip_html == false) { + $test_strip_html = false; + } + + $custom_excerpt = false; + + $post = get_post(get_the_ID()); + + $pos = strpos($post->post_content, ''); + + if($data['link_read_more']) { + $readmore = ' [...]'; + } else { + $readmore = ' [...]'; + } + + if($data['disable_excerpts']) { + $readmore = ''; + } + + if($test_strip_html) { + $raw_content = strip_tags( get_the_content($readmore) ); + if($post->post_excerpt || $pos !== false) { + $more = 0; + $raw_content = strip_tags( get_the_content($readmore) ); + $custom_excerpt = true; + } + } else { + $raw_content = get_the_content($readmore); + if($post->post_excerpt || $pos !== false) { + $more = 0; + $raw_content = get_the_content($readmore); + $custom_excerpt = true; + } + } + + if($raw_content && $custom_excerpt == false) { + $content = $raw_content; + + if($test_strip_html == true) { + $pattern = get_shortcode_regex(); + $content = preg_replace_callback("/$pattern/s", 'avada_process_tag', $content); + } + $content = explode(' ', $content, $limit); + if(count($content)>=$limit) { + array_pop($content); + if($data['disable_excerpts']) { + $content = implode(" ",$content); + } else { + $content = implode(" ",$content); + if($limit != 0) { + if($data['link_read_more']) { + $content .= $readmore; + } else { + $content .= $readmore; + } + } + } + } else { + $content = implode(" ",$content); + } + + if( $limit != 0 ) { + $content = apply_filters('the_content', $content); + $content = str_replace(']]>', ']]>', $content); + } + + $content = '
                '.do_shortcode($content).'
                '; + + return $content; + } + + if($custom_excerpt == true) { + $content = $raw_content; + if($test_strip_html == true) { + $pattern = get_shortcode_regex(); + $content = preg_replace_callback("/$pattern/s", 'avada_process_tag', $content); + $content = apply_filters('the_content', $content); + $content = str_replace(']]>', ']]>', $content); + $content = '
                '.do_shortcode($content).'
                '; + } else { + $content = apply_filters('the_content', $content); + $content = str_replace(']]>', ']]>', $content); + } + } + + if(has_excerpt()) { + $content = do_shortcode(get_the_excerpt()); + } + + return $content; +} + +function avada_scripts() { + if (!is_admin() && !in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) )) { + wp_reset_query(); + + global $data,$post,$wp_filesystem; + + if( empty( $wp_filesystem ) ) { + require_once( ABSPATH .'/wp-admin/includes/file.php' ); + WP_Filesystem(); + } + + if(isset($post)) { + $slider_page_id = $post->ID; + } + if(is_home() && !is_front_page()){ + $slider_page_id = get_option('page_for_posts'); + } + + $upload_dir = wp_upload_dir(); + + if( ! isset($lang) && ! $lang ) { + $lang = ''; + if(defined('ICL_LANGUAGE_CODE')) { + global $sitepress; + if(ICL_LANGUAGE_CODE != 'en' && ICL_LANGUAGE_CODE != 'all') { + $lang = '_'.ICL_LANGUAGE_CODE; + if(!get_option(THEMENAME.'_options'.$lang)) { + update_option(THEMENAME.'_options'.$lang, get_option(THEMENAME.'_options')); + } + } elseif( ICL_LANGUAGE_CODE == 'all' ) { + $lang = '_' . $sitepress->get_default_language(); + if( $sitepress->get_default_language() == 'en' ) { + $lang = ''; + } + } else { + $lang = ''; + } + } + } else { + $lang = ''; + } + + if((get_option('show_on_front') && get_option('page_for_posts') && is_home()) || + (get_option('page_for_posts') && is_archive() && !is_post_type_archive())) { + $c_pageID = get_option('page_for_posts'); + } else { + if(isset($post)) { + $c_pageID = $post->ID; + } + + if(class_exists('Woocommerce')) { + if(is_shop() || is_tax('product_cat') || is_tax('product_tag')) { + $c_pageID = get_option('woocommerce_shop_page_id'); + } + } + } + + wp_enqueue_script( 'jquery', false, array(), null, true); + + if ( is_singular() && get_option( 'thread_comments' ) ) { + wp_enqueue_script( 'comment-reply' ); + } + + wp_deregister_script( 'modernizr' ); + wp_register_script( 'modernizr', get_bloginfo('template_directory').'/js/modernizr-min.js', array(), null, true); + wp_enqueue_script( 'modernizr' ); + + if( function_exists('novagallery_shortcode') ) { + wp_deregister_script( 'novagallery_modernizr' ); + wp_register_script( 'novagallery_modernizr', get_bloginfo('template_directory').'/js/modernizr-min.js', array(), null, true); + wp_enqueue_script( 'novagallery_modernizr' ); + } + + if( function_exists('ccgallery_shortcode') ) { + wp_deregister_script( 'ccgallery_modernizr' ); + wp_register_script( 'ccgallery_modernizr', get_bloginfo('template_directory').'/js/modernizr-min.js', array(), null, true); + wp_enqueue_script( 'ccgallery_modernizr' ); + } + + wp_deregister_script( 'jquery.carouFredSel' ); + wp_register_script( 'jquery.carouFredSel', get_bloginfo('template_directory').'/js/jquery.carouFredSel-6.2.1-min.js', array(), null, true); + //if(is_single()) { + wp_enqueue_script( 'jquery.carouFredSel' ); + //} + + if ( class_exists( 'Woocommerce' ) ) { + if(!$data['status_lightbox'] && !is_woocommerce()) { + wp_deregister_script( 'jquery.prettyPhoto' ); + wp_register_script( 'jquery.prettyPhoto', get_bloginfo('template_directory').'/js/jquery.prettyPhoto-min.js', array(), null, true); + wp_enqueue_script( 'jquery.prettyPhoto' ); + } + wp_dequeue_script('wc-add-to-cart-variation'); + wp_enqueue_script( 'wc-add-to-cart-variation', get_bloginfo( 'template_directory' ). '/woocommerce/js/add-to-cart-variation-min.js' , array( 'jquery' ), false, true ); + + wp_dequeue_script('wc-single-product'); + wp_enqueue_script( 'wc-single-product', get_bloginfo( 'template_directory' ). '/woocommerce/js/single-product-min.js' , array( 'jquery' ), false, true ); + } else { + if(!$data['status_lightbox']) { + wp_deregister_script( 'jquery.prettyPhoto' ); + wp_register_script( 'jquery.prettyPhoto', get_bloginfo('template_directory').'/js/jquery.prettyPhoto-min.js', array(), null, true); + wp_enqueue_script( 'jquery.prettyPhoto' ); + } + } + + wp_deregister_script( 'jquery.flexslider' ); + wp_register_script( 'jquery.flexslider', get_bloginfo('template_directory').'/js/jquery.flexslider-min.js', array(), null, true); + //if(is_home() || is_single() || is_search() || is_archive() || get_post_meta($slider_page_id, 'pyre_slider_type', true) == 'flex2') { + wp_enqueue_script( 'jquery.flexslider' ); + //} + + wp_deregister_script( 'jquery.fitvids' ); + wp_register_script( 'jquery.fitvids', get_bloginfo('template_directory').'/js/jquery.fitvids-min.js', array(), null, true); + wp_enqueue_script( 'jquery.fitvids' ); + + if(!$data['status_gmap']) { + wp_deregister_script( 'jquery.ui.map' ); + wp_register_script( 'jquery.ui.map', get_bloginfo('template_directory').'/js/gmap-min.js', array(), null, true); + //if(is_page_template('contact.php') || is_page_template('contact-2.php')) { + wp_enqueue_script( 'jquery.ui.map' ); + //} + } + + wp_deregister_script( 'avada' ); + wp_register_script( 'avada', get_bloginfo('template_directory').'/js/main.js', array(), null, true); + wp_enqueue_script( 'avada' ); + + if(get_post_meta($c_pageID, 'pyre_fimg_width', true) == 'auto' && get_post_meta($c_pageID, 'pyre_width', true) == 'half') { + $smoothHeight = 'true'; + } else { + $smoothHeight = 'false'; + } + + if(get_post_meta($c_pageID, 'pyre_fimg_width', true) == 'auto' && get_post_meta($c_pageID, 'pyre_width', true) == 'half') { + $flex_smoothHeight = 'true'; + } else { + if($data["slideshow_smooth_height"]) { + $flex_smoothHeight = 'true'; + } else { + $flex_smoothHeight = 'false'; + } + } + + wp_localize_script('avada', 'js_local_vars', array( + 'dropdown_goto' => __('Go to...', 'Avada'), + 'mobile_nav_cart' => __('Shopping Cart', 'Avada'), + 'page_smoothHeight' => $smoothHeight, + 'flex_smoothHeight' => $flex_smoothHeight, + 'language_flag' => ICL_LANGUAGE_CODE, + 'infinte_blog_finished_msg' => ''.__('All posts displayed', 'Avada').'', + 'infinite_blog_text' => ''. __('Loading the next set of posts...', 'Avada').'', + 'portfolio_loading_text' => ''. __('Loading Portfolio Items...', 'Avada').'', + 'faqs_loading_text' => ''. __('Loading FAQ Items...', 'Avada').'' + ) + ); + + $filename = trailingslashit($upload_dir['baseurl']) . 'avada' . $lang . '.js'; + $filename_dir = trailingslashit($upload_dir['basedir']) . 'avada' . $lang . '.js'; + if( $wp_filesystem ) { + $file_status = $wp_filesystem->get_contents( $filename_dir ); + + if( trim( $file_status ) ) { // if js file creation fails + wp_enqueue_script('avada-dynamic-js', $filename, array(), null, true); + } + } + + if( is_page('header-2') || is_page('header-3') || is_page('header-4') || is_page('header-5') ) { + $header_demo = true; + } else { + $header_demo = false; + } + + $filename = trailingslashit($upload_dir['baseurl']) . 'avada' . $lang . '.css'; + $filename_dir = trailingslashit($upload_dir['basedir']) . 'avada' . $lang . '.css'; + if( $wp_filesystem ) { + $file_status = $wp_filesystem->get_contents( $filename_dir ); + + if( trim( $file_status ) && $header_demo == false ) { // if js file creation fails + wp_enqueue_style('avada-dynamic-css', $filename); + } + } + + } +} +add_action('wp_enqueue_scripts', 'avada_scripts'); + +function avada_admin_scripts( $hook ) { + if( is_admin() && $hook == 'nav-menus.php' ) { + wp_enqueue_media(); + + wp_register_style('avada_megamenu', get_bloginfo('template_directory') . '/css/megamenu.css'); + wp_enqueue_style('avada_megamenu'); + + wp_register_script('avada_megamenu', get_bloginfo('template_directory') . '/js/megamenu.js'); + wp_enqueue_script('avada_megamenu'); + } +} +add_action('admin_enqueue_scripts', 'avada_admin_scripts'); + +add_filter('jpeg_quality', 'avada_image_full_quality'); +add_filter('wp_editor_set_quality', 'avada_image_full_quality'); +function avada_image_full_quality($quality) { + return 100; +} + +add_filter('get_archives_link', 'avada_cat_count_span'); +add_filter('wp_list_categories', 'avada_cat_count_span'); +function avada_cat_count_span($links) { + $get_count = preg_match_all('#\((.*?)\)#', $links, $matches); + + if($matches) { + $i = 0; + foreach($matches[0] as $val) { + $links = str_replace(' '.$val, ' '.$val.'', $links); + $links = str_replace(' '.$val, ' '.$val.'', $links); + $i++; + } + } + + return $links; +} + +remove_action('wp_head', 'adjacent_posts_rel_link_wp_head'); + +add_filter('pre_get_posts','avada_SearchFilter'); +function avada_SearchFilter($query) { + global $data; + if($query->is_search) { + if($data['search_content'] == 'Only Posts') { + $query->set('post_type', 'post'); + } + + if($data['search_content'] == 'Only Pages') { + $query->set('post_type', 'page'); + } + } + return $query; +} + +add_action('admin_head', 'avada_admin_css'); +function avada_admin_css() { + echo ''; +} + +/* Theme Activation Hook */ +add_action('admin_init','avada_theme_activation'); +function avada_theme_activation() +{ + global $pagenow; + if(is_admin() && 'themes.php' == $pagenow && isset($_GET['activated'])) + { + update_option('shop_catalog_image_size', array('width' => 500, 'height' => '', 0)); + update_option('shop_single_image_size', array('width' => 500, 'height' => '', 0)); + update_option('shop_thumbnail_image_size', array('width' => 120, 'height' => '', 0)); + } +} + +// Register default function when plugin not activated +add_action('wp_head', 'avada_plugins_loaded'); +function avada_plugins_loaded() { + if(!function_exists('is_woocommerce')) { + function is_woocommerce() { return false; } + } + if(!function_exists('is_bbpress')) { + function is_bbpress() { return false; } + } +} + +// Woocommerce Hooks +remove_action('woocommerce_before_main_content', 'woocommerce_breadcrumb', 20); +remove_action('woocommerce_before_shop_loop', 'woocommerce_result_count', 20); +remove_action('woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30); + +add_action('woocommerce_before_shop_loop', 'avada_woocommerce_catalog_ordering', 30); +function avada_woocommerce_catalog_ordering() { + global $data; + + parse_str($_SERVER['QUERY_STRING'], $params); + + $query_string = '?'.$_SERVER['QUERY_STRING']; + + // replace it with theme option + if($data['woo_items']) { + $per_page = $data['woo_items']; + } else { + $per_page = 12; + } + + $pob = !empty($params['product_orderby']) ? $params['product_orderby'] : 'default'; + $po = !empty($params['product_order']) ? $params['product_order'] : 'asc'; + $pc = !empty($params['product_count']) ? $params['product_count'] : $per_page; + + $html = ''; + $html .= '
                '; + + $html .= '
                '; + + $html .= ''; + + + $html .= '
                  '; + if($po == 'desc'): + $html .= '
                • '; + endif; + if($po == 'asc'): + $html .= '
                • '; + endif; + $html .= '
                '; + + $html .= '
                '; + + $html .= ''; + $html .= '
                '; + + echo $html; +} + +add_action('woocommerce_get_catalog_ordering_args', 'avada_woocommerce_get_catalog_ordering_args', 20); +function avada_woocommerce_get_catalog_ordering_args($args) +{ + parse_str($_SERVER['QUERY_STRING'], $params); + + $pob = !empty($params['product_orderby']) ? $params['product_orderby'] : 'default'; + $po = !empty($params['product_order']) ? $params['product_order'] : 'asc'; + + switch($pob) { + case 'date': + $orderby = 'date'; + $order = 'desc'; + $meta_key = ''; + break; + case 'price': + $orderby = 'meta_value_num'; + $order = 'asc'; + $meta_key = '_price'; + break; + case 'popularity': + $orderby = 'meta_value_num'; + $order = 'desc'; + $meta_key = 'total_sales'; + break; + case 'title': + $orderby = 'title'; + $order = 'asc'; + $meta_key = ''; + break; + case 'default': + default: + $orderby = 'menu_order title'; + $order = 'asc'; + $meta_key = ''; + break; + } + + switch($po) { + case 'desc': + $order = 'desc'; + break; + case 'asc': + $order = 'asc'; + break; + default: + $order = 'asc'; + break; + } + + $args['orderby'] = $orderby; + $args['order'] = $order; + $args['meta_key'] = $meta_key; + + return $args; +} + +add_filter('loop_shop_per_page', 'avada_loop_shop_per_page'); +function avada_loop_shop_per_page() +{ + global $data; + + parse_str($_SERVER['QUERY_STRING'], $params); + + if($data['woo_items']) { + $per_page = $data['woo_items']; + } else { + $per_page = 12; + } + + $pc = !empty($params['product_count']) ? $params['product_count'] : $per_page; + + return $pc; +} + +add_action('woocommerce_before_shop_loop_item_title', 'avada_woocommerce_thumbnail', 10); +remove_action('woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10); +function avada_woocommerce_thumbnail() { + global $product, $woocommerce; + + $items_in_cart = array(); + + if($woocommerce->cart->get_cart() && is_array($woocommerce->cart->get_cart())) { + foreach($woocommerce->cart->get_cart() as $cart) { + $items_in_cart[] = $cart['product_id']; + } + } + + $id = get_the_ID(); + $in_cart = in_array($id, $items_in_cart); + $size = 'shop_catalog'; + + $gallery = get_post_meta($id, '_product_image_gallery', true); + $attachment_image = ''; + if(!empty($gallery)) { + $gallery = explode(',', $gallery); + $first_image_id = $gallery[0]; + $attachment_image = wp_get_attachment_image($first_image_id , $size, false, array('class' => 'hover-image')); + } + $thumb_image = get_the_post_thumbnail($id , $size); + + if($attachment_image) { + $classes = 'crossfade-images'; + } else { + $classes = ''; + } + + echo ''; + echo $attachment_image; + echo $thumb_image; + if($in_cart) { + echo ''; + } else { + echo ''; + } + echo ''; +} +add_filter('add_to_cart_fragments', 'avada_woocommerce_header_add_to_cart_fragment'); +function avada_woocommerce_header_add_to_cart_fragment( $fragments ) { + global $woocommerce; + + ob_start(); + ?> +
              14. + cart->cart_contents_count): ?> + + + cart->cart_contents_count; ?> - cart->subtotal); ?> + + +
              15. + +
              16. + cart->cart_contents_count): ?> + + + +
                + cart->cart_contents as $cart_item): //var_dump($cart_item); ?> + + +
                + + +
                +
                + +
              17. + + .widget input { border-color: #DFDFDF !important; } + '; +} +add_action('admin_head', 'custom_admin_styles'); + +/* Style Selector */ +add_action('wp_ajax_avada_style_selector', 'tf_style_selector'); +add_action('wp_ajax_nopriv_avada_style_selector', 'tf_style_selector'); +function tf_style_selector() { + global $data; + + $color = $_POST['color']; + + $data = array_merge($data, $color); + + ob_start(); + include(locate_template('style_selector_style.php', false)); + $html = ob_get_clean(); + + echo $html; + + die(); +} + +/* Display a notice that can be dismissed */ +if($data['ubermenu']) { + update_option('avada_ubermenu_notice', true); +} elseif(!get_option('avada_ubermenu_notice_hidden')) { + update_option('avada_ubermenu_notice', false); +} + +add_action('admin_notices', 'avada_admin_notice'); +function avada_admin_notice() { + /* Check that the user hasn't already clicked to ignore the message */ + if ( ! get_option('avada_ubermenu_notice') && function_exists( 'uberMenu_direct' ) && ($_GET['page'] != 'uber-menu') + && current_user_can( 'activate_plugins' ) ) { + $url = admin_url( 'themes.php?page=optionsframework#of-option-extraoptions' ); + echo '

                '; + printf(__('It seems you have Ubermenu installed, please enable Ubermenu Plugin Support option on the Extras tab in Avada theme options to allow compatiblity.
                Hide Notice'), '?avada_uber_nag_ignore=0'); + echo "

                "; + } + + if( ! get_option('avada_ubermenu_notice') && function_exists( 'uberMenu_direct' ) && $_GET['page'] == 'uber-menu' + && current_user_can( 'activate_plugins' ) ) { + echo '

                Support Avada with Ubermenu

                '; + printf(__('It seems you have Ubermenu installed, please enable Ubermenu Plugin Support option on the Extras tab in Avada theme options to allow compatiblity.Hide Notice'), '?avada_uber_nag_ignore=0'); + echo '

                '; + } + + if( isset($_GET['imported']) && $_GET['imported'] == 'success' ) { + echo '

                '; + printf(__('Sucessfully imported demo data!')); + echo "

                "; + } +} + +add_action('admin_init', 'avada_nag_ignore'); +function avada_nag_ignore() { + /* If user clicks to ignore the notice, add that to their user meta */ + if (isset($_GET['avada_uber_nag_ignore']) && '0' == $_GET['avada_uber_nag_ignore'] ) { + update_option('avada_ubermenu_notice', true); + update_option('avada_ubermenu_notice_hidden', true); + $referer = esc_url($_SERVER["HTTP_REFERER"]); + wp_redirect($referer); + } +} + +/* Importer */ +$importer = get_template_directory() . '/framework/plugins/importer/importer.php'; +include $importer; + +// make wordpress respect the search template on an empty search +function empty_search_filter($query) { + if (isset($_GET['s']) && empty($_GET['s']) && $query->is_main_query()){ + $query->is_search = true; + $query->is_home = false; + } + return $query; +} +add_filter('pre_get_posts','empty_search_filter'); + +////////////////////////////////////////////////////////////////// +// Woo Products Shortcode Recode +////////////////////////////////////////////////////////////////// +function avada_woo_product($atts, $content = null) { + global $woocommerce_loop; + + if (empty($atts)) return; + + $args = array( + 'post_type' => 'product', + 'posts_per_page' => 1, + 'no_found_rows' => 1, + 'post_status' => 'publish', + 'meta_query' => array( + array( + 'key' => '_visibility', + 'value' => array('catalog', 'visible'), + 'compare' => 'IN' + ) + ), + 'columns' => 1 + ); + + if(isset($atts['sku'])){ + $args['meta_query'][] = array( + 'key' => '_sku', + 'value' => $atts['sku'], + 'compare' => '=' + ); + } + + if(isset($atts['id'])){ + $args['p'] = $atts['id']; + } + + ob_start(); + + if(isset($columns)) { + $woocommerce_loop['columns'] = $columns; + } + + $products = new WP_Query( $args ); + + if ( $products->have_posts() ) : ?> + + + + have_posts() ) : $products->the_post(); ?> + + + + + + + + ' . ob_get_clean() . '

              18. '; +} + +add_action('wp_loaded', 'remove_product_shortcode'); +function remove_product_shortcode() { + if(class_exists('Woocommerce')) { + // First remove the shortcode + remove_shortcode('product'); + // Then recode it + add_shortcode('product', 'avada_woo_product'); + } +} + +// TGM Plugin Activation +require_once dirname( __FILE__ ) . '/framework/class-tgm-plugin-activation.php'; +add_action( 'tgmpa_register', 'avada_register_required_plugins' ); +function avada_register_required_plugins() { + /** + * Array of plugin arrays. Required keys are name and slug. + * If the source is NOT from the .org repo, then source is also required. + */ + $plugins = array( + + // This is an example of how to include a plugin pre-packaged with a theme + array( + 'name' => 'Revolution Slider', // The plugin name + 'slug' => 'revslider', // The plugin slug (typically the folder name) + 'source' => get_template_directory() . '/framework/plugins/revslider.zip', // The plugin source + 'required' => false, // If false, the plugin is only 'recommended' instead of required + 'version' => '4.1.4', // E.g. 1.0.0. If set, the active plugin must be this version or higher, otherwise a notice is presented + 'force_activation' => false, // If true, plugin is activated upon theme activation and cannot be deactivated until theme switch + 'force_deactivation' => false, // If true, plugin is deactivated upon theme switch, useful for theme-specific plugins + 'external_url' => '', // If set, overrides default API URL and points to an external URL + ), + array( + 'name' => 'Fusion Core', // The plugin name + 'slug' => 'fusion-core', // The plugin slug (typically the folder name) + 'source' => get_template_directory() . '/framework/plugins/fusion-core.zip', // The plugin source + 'required' => true, // If false, the plugin is only 'recommended' instead of required + 'version' => '1.2.1', // E.g. 1.0.0. If set, the active plugin must be this version or higher, otherwise a notice is presented + 'force_activation' => false, // If true, plugin is activated upon theme activation and cannot be deactivated until theme switch + 'force_deactivation' => false, // If true, plugin is deactivated upon theme switch, useful for theme-specific plugins + 'external_url' => '', // If set, overrides default API URL and points to an external URL + ), + + ); + + // Change this to your theme text domain, used for internationalising strings + $theme_text_domain = 'tgmpa'; + + /** + * Array of configuration settings. Amend each line as needed. + * If you want the default strings to be available under your own theme domain, + * leave the strings uncommented. + * Some of the strings are added into a sprintf, so see the comments at the + * end of each line for what each argument will be. + */ + $config = array( + 'domain' => $theme_text_domain, // Text domain - likely want to be the same as your theme. + 'default_path' => '', // Default absolute path to pre-packaged plugins + 'parent_menu_slug' => 'themes.php', // Default parent menu slug + 'parent_url_slug' => 'themes.php', // Default parent URL slug + 'menu' => 'install-required-plugins', // Menu slug + 'has_notices' => true, // Show admin notices or not + 'is_automatic' => false, // Automatically activate plugins after installation or not + 'message' => '', // Message to output right before the plugins table + 'strings' => array( + 'page_title' => __( 'Install Required Plugins', $theme_text_domain ), + 'menu_title' => __( 'Install Plugins', $theme_text_domain ), + 'installing' => __( 'Installing Plugin: %s', $theme_text_domain ), // %1$s = plugin name + 'oops' => __( 'Something went wrong with the plugin API.', $theme_text_domain ), + 'notice_can_install_required' => _n_noop( 'This theme requires the following plugin installed or update: %1$s.', 'This theme requires the following plugins installed or updated: %1$s.' ), // %1$s = plugin name(s) + 'notice_can_install_recommended' => _n_noop( 'This theme recommends the following plugin installed or updated: %1$s.', 'This theme recommends the following plugins installed or updated: %1$s.' ), // %1$s = plugin name(s) + 'notice_cannot_install' => _n_noop( 'Sorry, but you do not have the correct permissions to install the %s plugin. Contact the administrator of this site for help on getting the plugin installed.', 'Sorry, but you do not have the correct permissions to install the %s plugins. Contact the administrator of this site for help on getting the plugins installed.' ), // %1$s = plugin name(s) + 'notice_can_activate_required' => _n_noop( 'The following required plugin is currently inactive: %1$s.', 'The following required plugins are currently inactive: %1$s.' ), // %1$s = plugin name(s) + 'notice_can_activate_recommended' => _n_noop( 'The following recommended plugin is currently inactive: %1$s.', 'The following recommended plugins are currently inactive: %1$s.' ), // %1$s = plugin name(s) + 'notice_cannot_activate' => _n_noop( 'Sorry, but you do not have the correct permissions to activate the %s plugin. Contact the administrator of this site for help on getting the plugin activated.', 'Sorry, but you do not have the correct permissions to activate the %s plugins. Contact the administrator of this site for help on getting the plugins activated.' ), // %1$s = plugin name(s) + 'notice_ask_to_update' => _n_noop( 'The following plugin needs to be updated to its latest version to ensure maximum compatibility with this theme: %1$s.', 'The following plugins need to be updated to their latest version to ensure maximum compatibility with this theme: %1$s.' ), // %1$s = plugin name(s) + 'notice_cannot_update' => _n_noop( 'Sorry, but you do not have the correct permissions to update the %s plugin. Contact the administrator of this site for help on getting the plugin updated.', 'Sorry, but you do not have the correct permissions to update the %s plugins. Contact the administrator of this site for help on getting the plugins updated.' ), // %1$s = plugin name(s) + 'install_link' => _n_noop( 'Begin installing plugin', 'Begin installing plugins' ), + 'activate_link' => _n_noop( 'Activate installed plugin', 'Activate installed plugins' ), + 'return' => __( 'Return to Required Plugins Installer', $theme_text_domain ), + 'plugin_activated' => __( 'Plugin activated successfully.', $theme_text_domain ), + 'complete' => __( 'All plugins installed and activated successfully. %s', $theme_text_domain ), // %1$s = dashboard link + 'nag_type' => 'updated' // Determines admin notice type - can only be 'updated' or 'error' + ) + ); + + tgmpa( $plugins, $config ); +} + +/** + * Show a shop page description on product archives + */ +function woocommerce_product_archive_description() { + if ( is_post_type_archive( 'product' ) && get_query_var( 'paged' ) == 0 ) { + $shop_page = get_post( woocommerce_get_page_id( 'shop' ) ); + $description = apply_filters( 'the_content', $shop_page->post_content ); + if ( $description ) { + echo '
                ' . $description . '
                '; + } + } +} + + +/** + * Check if the device is a tablet. + */ +function is_tablet($user_agent = null) { + $tablet_devices = array( + 'iPad' => 'iPad|iPad.*Mobile', + 'NexusTablet' => '^.*Android.*Nexus(((?:(?!Mobile))|(?:(\s(7|10).+))).)*$', + 'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-I9205|GT-P5200|GT-P5210|SM-T311|SM-T310|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500', + // @reference: http://www.labnol.org/software/kindle-user-agent-string/20378/ + 'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE)\b', + // Only the Surface tablets with Windows RT are considered mobile. + // @ref: http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx + 'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;', + // @ref: http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT + 'HPTablet' => 'HP Slate 7|HP ElitePad 900|hp-tablet|EliteBook.*Touch', + // @note: watch out for PadFone, see #132 + 'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101', + 'BlackBerryTablet' => 'PlayBook|RIM Tablet', + 'HTCtablet' => 'HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200', + 'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617', + 'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2', + // @ref: http://www.acer.ro/ac/ro/RO/content/drivers + // @ref: http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer) + // @ref: http://us.acer.com/ac/en/US/content/group/tablets + // @note: Can conflict with Micromax and Motorola phones codes. + 'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810)\b|W3-810', + // @ref: http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/ + // @ref: http://us.toshiba.com/tablets/tablet-finder + // @ref: http://www.toshiba.co.jp/regza/tablet/ + 'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO', + // @ref: http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html + 'LGTablet' => '\bL-06C|LG-V900|LG-V909\b', + 'FujitsuTablet' => 'Android.*\b(F-01D|F-05E|F-10D|M532|Q572)\b', + // Prestigio Tablets http://www.prestigio.com/support + 'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD', + // @ref: http://support.lenovo.com/en_GB/downloads/default.page?# + 'LenovoTablet' => 'IdeaTab|S2110|S6000|K3011|A3000|A1000|A2107|A2109|A1107', + 'YarvikTablet' => 'Android.*(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468)', + 'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB', + 'ArnovaTablet' => 'AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT', + // IRU.ru Tablets http://www.iru.ru/catalog/soho/planetable/ + 'IRUTablet' => 'M702pro', + 'MegafonTablet' => 'MegaFon V9|\bZTE V9\b', + // @ref: http://www.e-boda.ro/tablete-pc.html + 'EbodaTablet' => 'E-Boda (Supreme|Impresspeed|Izzycomm|Essential)', + // @ref: http://www.allview.ro/produse/droseries/lista-tablete-pc/ + 'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)', + // @reference: http://wiki.archosfans.com/index.php?title=Main_Page + 'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R', + // @ref: http://www.ainol.com/plugin.php?identifier=ainol&module=product + 'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark', + // @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER + // @ref: Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser + // @ref: http://www.sony.jp/support/tablet/ + 'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT211|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201', + // @ref: db + http://www.cube-tablet.com/buy-products.html + 'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT', + // @ref: http://www.cobyusa.com/?p=pcat&pcat_id=3001 + 'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010', + // @ref: http://www.match.net.cn/products.asp + 'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733', + // @ref: http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets) + // @ref: http://www.imp3.net/14/show.php?itemid=20454 + 'SMiTTablet' => 'Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)', + // @ref: http://www.rock-chips.com/index.php?do=prod&pid=2 + 'RockChipTablet' => 'Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A', + // @ref: http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/ + 'FlyTablet' => 'IQ310|Fly Vision', + // @ref: http://www.bqreaders.com/gb/tablets-prices-sale.html + 'bqTablet' => 'bq.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant)|Maxwell.*Lite|Maxwell.*Plus', + // @ref: http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290 + // @ref: http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets) + 'HuaweiTablet' => 'MediaPad|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim', + // Nec or Medias Tab + 'NecTablet' => '\bN-06D|\bN-08D', + // Pantech Tablets: http://www.pantechusa.com/phones/ + 'PantechTablet' => 'Pantech.*P4100', + // Broncho Tablets: http://www.broncho.cn/ (hard to find) + 'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)', + // @ref: http://versusuk.com/support.html + 'VersusTablet' => 'TOUCHPAD.*[78910]|\bTOUCHTAB\b', + // @ref: http://www.zync.in/index.php/our-products/tablet-phablets + 'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900', + // @ref: http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/ + 'PositivoTablet' => 'TB07STA|TB10STA|TB07FTA|TB10FTA', + // @ref: https://www.nabitablet.com/ + 'NabiTablet' => 'Android.*\bNabi', + 'KoboTablet' => 'Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build', + // French Danew Tablets http://www.danew.com/produits-tablette.php + 'DanewTablet' => 'DSlide.*\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\b', + // Texet Tablets and Readers http://www.texet.ru/tablet/ + 'TexetTablet' => 'NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE', + // @note: Avoid detecting 'PLAYSTATION 3' as mobile. + 'PlaystationTablet' => 'Playstation.*(Portable|Vita)', + // @ref: http://www.galapad.net/product.html + 'GalapadTablet' => 'Android.*\bG1\b', + // @ref: http://www.micromaxinfo.com/tablet/funbook + 'MicromaxTablet' => 'Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b', + // http://www.karbonnmobiles.com/products_tablet.php + 'KarbonnTablet' => 'Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b', + // @ref: http://www.myallfine.com/Products.asp + 'AllFineTablet' => 'Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide', + // @ref: http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr= + 'PROSCANTablet' => '\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\b', + // @ref: http://www.yonesnav.com/products/products.php + 'YONESTablet' => 'BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026', + // @ref: http://www.cjshowroom.com/eproducts.aspx?classcode=004001001 + // China manufacturer makes tablets for different small brands (eg. http://www.zeepad.net/index.html) + 'ChangJiaTablet' => 'TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503', + // @ref: http://www.gloryunion.cn/products.asp + // @ref: http://www.allwinnertech.com/en/apply/mobile.html + // @ref: http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB) + // aka. Cute or Cool tablets. Not sure yet, must research to avoid collisions. + 'GUTablet' => 'TX-A1301|TX-M9002|Q702', // A12R|D75A|D77|D79|R83|A95|A106C|R15|A75|A76|D71|D72|R71|R73|R77|D82|R85|D92|A97|D92|R91|A10F|A77F|W71F|A78F|W78F|W81F|A97F|W91F|W97F|R16G|C72|C73E|K72|K73|R96G + // @ref: http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118 + 'PointOfViewTablet' => 'TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10', + // @ref: http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/ + // @todo: add more tests. + 'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)', + // @ref: http://hclmetablet.com/India/index.php + 'HCLTablet' => 'HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync', + // @ref: http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html + 'DPSTablet' => 'DPS Dream 9|DPS Dual 7', + // @ref: http://www.visture.com/index.asp + 'VistureTablet' => 'V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10', + // @ref: http://www.mijncresta.nl/tablet + 'CrestaTablets' => 'CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989', + // @ref: http://www.tesco.com/direct/hudl/ + 'Hudl' => 'Hudl HT7S3', + // @ref: http://www.telstra.com.au/home-phone/thub-2/ + 'TelstraTablet' => 'T-Hub2', + 'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|ViewPad7|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|SmartTabII10|SmartTab10', + ); + + foreach ($tablet_devices as $regex) { + $regex = str_replace('/', '\/', $regex); + + if ((bool) preg_match('/'.$regex.'/is', $user_agent)) { + return true; + } + } + return false; +} \ No newline at end of file diff --git a/src/wp-content/themes/avada/header.php b/src/wp-content/themes/avada/header.php new file mode 100644 index 0000000..52ae5d5 --- /dev/null +++ b/src/wp-content/themes/avada/header.php @@ -0,0 +1,1246 @@ + +> + + + + + + + <?php + if ( defined('WPSEO_VERSION') ) { + wp_title(''); + } else { + bloginfo('name'); ?> <?php wp_title(' - ', true, 'left'); + } + ?> + + + + + parent_theme) { + $template_dir = basename(get_template_directory()); + $theme_info = wp_get_theme($template_dir); + } + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID; + } + + if(class_exists('Woocommerce')) { + if(is_shop() || is_tax('product_cat') || is_tax('product_tag')) { + $c_pageID = get_option('woocommerce_shop_page_id'); + } + } + } + ?> + + + + + + + + + + + + + + +> +
                > + + + + +
                + +
                + + +
                + + + + ID; + } + if(!is_home() && is_front_page() && isset($post)) { + $slider_page_id = $post->ID; + } + if(is_home() && !is_front_page()){ + $slider_page_id = get_option('page_for_posts'); + } + if(class_exists('Woocommerce')) { + if(is_shop()) { + $slider_page_id = get_option('woocommerce_shop_page_id'); + } + } + if(get_post_meta($slider_page_id, 'pyre_slider_type', true) == 'layer' && (get_post_meta($slider_page_id, 'pyre_slider', true) || get_post_meta($slider_page_id, 'pyre_slider', true) != 0)): ?> + prefix . "layerslider"; + $ls_id = get_post_meta($slider_page_id, 'pyre_slider', true); + $ls_slider = $wpdb->get_row("SELECT * FROM $ls_table_name WHERE id = ".(int)$ls_id." ORDER BY date_c DESC LIMIT 1" , ARRAY_A); + $ls_slider = json_decode($ls_slider['data'], true); + ?> + +
                +
                + +
                + + + +
                + +
                +
                + + + + + + +
                + + +
                + +
                + + + + +
                +
                +
                +
                + +

                + + + + + +

                + +

                + +

                + + +
                + + + + + + + +
                +
                +
                + + +
                +
                +
                +
                + +

                + +
                + + + + + + + +
                +
                +
                + + +
                +
                +
                +
                +

                +
                + + + + + + + +
                +
                +
                + + +
                +
                +
                +
                +

                +
                +
                +
                +
                + + +
                +
                +
                +
                +

                + + ' . get_the_date() . '' ); ?> + + ' . get_the_date( _x( 'F Y', 'monthly archives date format', 'Avada' ) ) . '' ); ?> + + ' . get_the_date( _x( 'Y', 'yearly archives date format', 'Avada' ) ) . '' ); ?> + + + nickname; ?> + + + +

                +
                + + + + + + + +
                +
                +
                + + version && is_woocommerce() && ((is_product() && get_post_meta($c_pageID, 'pyre_page_title', true) == 'yes') || (is_shop() && get_post_meta($c_pageID, 'pyre_page_title', true) == 'yes')) && !is_search()): + ?> +
                +
                +
                +
                + +

                + +

                + +

                + +

                + +

                + +
              19. + + + '', + 'before' => '
              20. ', + 'after' => '
              21. ', + 'delimiter' => '' + )); ?> + + + + +
                + + + + +
                +
                +
                +
                +

                + + ' . get_the_date() . '' ); ?> + + ' . get_the_date( _x( 'F Y', 'monthly archives date format', 'Avada' ) ) . '' ); ?> + + ' . get_the_date( _x( 'Y', 'yearly archives date format', 'Avada' ) ) . '' ); ?> + + + nickname; ?> + + + +

                +
                + + + + + + + +
                +
                +
                + + + +
                +
                +
                +
                + +

                + +
                + + + '', 'sep' => ' ', 'crumb_before' => '
              22. ', 'crumb_after' => '
              23. ', 'home_text' => __('Home', 'Avada')) ); ?> + + + + +
                +
                +
                + + + + + + + + + + +
                +
                + + + + + +
                +
                + + +
                +
                + \ No newline at end of file diff --git a/src/wp-content/themes/avada/images/-icon@2x.png b/src/wp-content/themes/avada/images/-icon@2x.png new file mode 100644 index 0000000..d14d213 Binary files /dev/null and b/src/wp-content/themes/avada/images/-icon@2x.png differ diff --git a/src/wp-content/themes/avada/images/404_image.png b/src/wp-content/themes/avada/images/404_image.png new file mode 100644 index 0000000..ade04cf Binary files /dev/null and b/src/wp-content/themes/avada/images/404_image.png differ diff --git a/src/wp-content/themes/avada/images/404_image@2x.png b/src/wp-content/themes/avada/images/404_image@2x.png new file mode 100644 index 0000000..6e5f18f Binary files /dev/null and b/src/wp-content/themes/avada/images/404_image@2x.png differ diff --git a/src/wp-content/themes/avada/images/404_image_dark.png b/src/wp-content/themes/avada/images/404_image_dark.png new file mode 100644 index 0000000..1fac196 Binary files /dev/null and b/src/wp-content/themes/avada/images/404_image_dark.png differ diff --git a/src/wp-content/themes/avada/images/404_image_dark@2x.png b/src/wp-content/themes/avada/images/404_image_dark@2x.png new file mode 100644 index 0000000..42c78a1 Binary files /dev/null and b/src/wp-content/themes/avada/images/404_image_dark@2x.png differ diff --git a/src/wp-content/themes/avada/images/arrow-bullet-left.png b/src/wp-content/themes/avada/images/arrow-bullet-left.png new file mode 100644 index 0000000..04955ca Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-bullet-left.png differ diff --git a/src/wp-content/themes/avada/images/arrow-bullet.png b/src/wp-content/themes/avada/images/arrow-bullet.png new file mode 100644 index 0000000..0afa27a Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-bullet.png differ diff --git a/src/wp-content/themes/avada/images/arrow-bullet@2x.png b/src/wp-content/themes/avada/images/arrow-bullet@2x.png new file mode 100644 index 0000000..2fddd2e Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-bullet@2x.png differ diff --git a/src/wp-content/themes/avada/images/arrow-list.gif b/src/wp-content/themes/avada/images/arrow-list.gif new file mode 100644 index 0000000..4ce44ec Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-list.gif differ diff --git a/src/wp-content/themes/avada/images/arrow-list@2x.gif b/src/wp-content/themes/avada/images/arrow-list@2x.gif new file mode 100644 index 0000000..a2207d7 Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-list@2x.gif differ diff --git a/src/wp-content/themes/avada/images/arrow-more-green.gif b/src/wp-content/themes/avada/images/arrow-more-green.gif new file mode 100644 index 0000000..1f060e3 Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-more-green.gif differ diff --git a/src/wp-content/themes/avada/images/arrow-more-green@2x.gif b/src/wp-content/themes/avada/images/arrow-more-green@2x.gif new file mode 100644 index 0000000..0f48647 Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-more-green@2x.gif differ diff --git a/src/wp-content/themes/avada/images/arrow-more.gif b/src/wp-content/themes/avada/images/arrow-more.gif new file mode 100644 index 0000000..4ce44ec Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-more.gif differ diff --git a/src/wp-content/themes/avada/images/arrow-more@2x.gif b/src/wp-content/themes/avada/images/arrow-more@2x.gif new file mode 100644 index 0000000..a2207d7 Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-more@2x.gif differ diff --git a/src/wp-content/themes/avada/images/arrow-next.png b/src/wp-content/themes/avada/images/arrow-next.png new file mode 100644 index 0000000..6cc8bf7 Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-next.png differ diff --git a/src/wp-content/themes/avada/images/arrow-next@2x.png b/src/wp-content/themes/avada/images/arrow-next@2x.png new file mode 100644 index 0000000..babf051 Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-next@2x.png differ diff --git a/src/wp-content/themes/avada/images/arrow-prev.png b/src/wp-content/themes/avada/images/arrow-prev.png new file mode 100644 index 0000000..0833bb0 Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-prev.png differ diff --git a/src/wp-content/themes/avada/images/arrow-prev@2x.png b/src/wp-content/themes/avada/images/arrow-prev@2x.png new file mode 100644 index 0000000..d22032c Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-prev@2x.png differ diff --git a/src/wp-content/themes/avada/images/arrow-ul.png b/src/wp-content/themes/avada/images/arrow-ul.png new file mode 100644 index 0000000..6cc8bf7 Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-ul.png differ diff --git a/src/wp-content/themes/avada/images/arrow-ul@2x.png b/src/wp-content/themes/avada/images/arrow-ul@2x.png new file mode 100644 index 0000000..babf051 Binary files /dev/null and b/src/wp-content/themes/avada/images/arrow-ul@2x.png differ diff --git a/src/wp-content/themes/avada/images/bg-blockquote.gif b/src/wp-content/themes/avada/images/bg-blockquote.gif new file mode 100644 index 0000000..87d991d Binary files /dev/null and b/src/wp-content/themes/avada/images/bg-blockquote.gif differ diff --git a/src/wp-content/themes/avada/images/bg-blockquote@2x.gif b/src/wp-content/themes/avada/images/bg-blockquote@2x.gif new file mode 100644 index 0000000..42a2195 Binary files /dev/null and b/src/wp-content/themes/avada/images/bg-blockquote@2x.gif differ diff --git a/src/wp-content/themes/avada/images/bg-line.gif b/src/wp-content/themes/avada/images/bg-line.gif new file mode 100644 index 0000000..e7ad8cb Binary files /dev/null and b/src/wp-content/themes/avada/images/bg-line.gif differ diff --git a/src/wp-content/themes/avada/images/bg-line@2x.gif b/src/wp-content/themes/avada/images/bg-line@2x.gif new file mode 100644 index 0000000..e7ad8cb Binary files /dev/null and b/src/wp-content/themes/avada/images/bg-line@2x.gif differ diff --git a/src/wp-content/themes/avada/images/bg-popup.png b/src/wp-content/themes/avada/images/bg-popup.png new file mode 100644 index 0000000..14488e7 Binary files /dev/null and b/src/wp-content/themes/avada/images/bg-popup.png differ diff --git a/src/wp-content/themes/avada/images/bg-popup@2x.png b/src/wp-content/themes/avada/images/bg-popup@2x.png new file mode 100644 index 0000000..ac9dd48 Binary files /dev/null and b/src/wp-content/themes/avada/images/bg-popup@2x.png differ diff --git a/src/wp-content/themes/avada/images/bg-title.gif b/src/wp-content/themes/avada/images/bg-title.gif new file mode 100644 index 0000000..572e4cd Binary files /dev/null and b/src/wp-content/themes/avada/images/bg-title.gif differ diff --git a/src/wp-content/themes/avada/images/bg-title@2x.gif b/src/wp-content/themes/avada/images/bg-title@2x.gif new file mode 100644 index 0000000..a76db67 Binary files /dev/null and b/src/wp-content/themes/avada/images/bg-title@2x.gif differ diff --git a/src/wp-content/themes/avada/images/bg_direction_nav.png b/src/wp-content/themes/avada/images/bg_direction_nav.png new file mode 100644 index 0000000..de3fe04 Binary files /dev/null and b/src/wp-content/themes/avada/images/bg_direction_nav.png differ diff --git a/src/wp-content/themes/avada/images/bg_direction_nav@2x.png b/src/wp-content/themes/avada/images/bg_direction_nav@2x.png new file mode 100644 index 0000000..de3fe04 Binary files /dev/null and b/src/wp-content/themes/avada/images/bg_direction_nav@2x.png differ diff --git a/src/wp-content/themes/avada/images/blogger.png b/src/wp-content/themes/avada/images/blogger.png new file mode 100644 index 0000000..4746ebe Binary files /dev/null and b/src/wp-content/themes/avada/images/blogger.png differ diff --git a/src/wp-content/themes/avada/images/blogger@2x.png b/src/wp-content/themes/avada/images/blogger@2x.png new file mode 100644 index 0000000..6dc0707 Binary files /dev/null and b/src/wp-content/themes/avada/images/blogger@2x.png differ diff --git a/src/wp-content/themes/avada/images/deviantart.png b/src/wp-content/themes/avada/images/deviantart.png new file mode 100644 index 0000000..00405a0 Binary files /dev/null and b/src/wp-content/themes/avada/images/deviantart.png differ diff --git a/src/wp-content/themes/avada/images/deviantart@2x.png b/src/wp-content/themes/avada/images/deviantart@2x.png new file mode 100644 index 0000000..39674df Binary files /dev/null and b/src/wp-content/themes/avada/images/deviantart@2x.png differ diff --git a/src/wp-content/themes/avada/images/digg.png b/src/wp-content/themes/avada/images/digg.png new file mode 100644 index 0000000..6b9e9f0 Binary files /dev/null and b/src/wp-content/themes/avada/images/digg.png differ diff --git a/src/wp-content/themes/avada/images/digg@2x.png b/src/wp-content/themes/avada/images/digg@2x.png new file mode 100644 index 0000000..da5ab5e Binary files /dev/null and b/src/wp-content/themes/avada/images/digg@2x.png differ diff --git a/src/wp-content/themes/avada/images/divider-02.gif b/src/wp-content/themes/avada/images/divider-02.gif new file mode 100644 index 0000000..3784cea Binary files /dev/null and b/src/wp-content/themes/avada/images/divider-02.gif differ diff --git a/src/wp-content/themes/avada/images/divider-0@2x.gif b/src/wp-content/themes/avada/images/divider-0@2x.gif new file mode 100644 index 0000000..4ba5bdb Binary files /dev/null and b/src/wp-content/themes/avada/images/divider-0@2x.gif differ diff --git a/src/wp-content/themes/avada/images/divider.gif b/src/wp-content/themes/avada/images/divider.gif new file mode 100644 index 0000000..c1b95ed Binary files /dev/null and b/src/wp-content/themes/avada/images/divider.gif differ diff --git a/src/wp-content/themes/avada/images/divider@2x.gif b/src/wp-content/themes/avada/images/divider@2x.gif new file mode 100644 index 0000000..8ea4417 Binary files /dev/null and b/src/wp-content/themes/avada/images/divider@2x.gif differ diff --git a/src/wp-content/themes/avada/images/dribbble-icon.png b/src/wp-content/themes/avada/images/dribbble-icon.png new file mode 100644 index 0000000..4cfb29a Binary files /dev/null and b/src/wp-content/themes/avada/images/dribbble-icon.png differ diff --git a/src/wp-content/themes/avada/images/dribbble-icon@2x.png b/src/wp-content/themes/avada/images/dribbble-icon@2x.png new file mode 100644 index 0000000..efa1f8a Binary files /dev/null and b/src/wp-content/themes/avada/images/dribbble-icon@2x.png differ diff --git a/src/wp-content/themes/avada/images/dribbble.png b/src/wp-content/themes/avada/images/dribbble.png new file mode 100644 index 0000000..94d03ec Binary files /dev/null and b/src/wp-content/themes/avada/images/dribbble.png differ diff --git a/src/wp-content/themes/avada/images/dribbble@2x.png b/src/wp-content/themes/avada/images/dribbble@2x.png new file mode 100644 index 0000000..5cb9efe Binary files /dev/null and b/src/wp-content/themes/avada/images/dribbble@2x.png differ diff --git a/src/wp-content/themes/avada/images/error-icon.png b/src/wp-content/themes/avada/images/error-icon.png new file mode 100644 index 0000000..d871088 Binary files /dev/null and b/src/wp-content/themes/avada/images/error-icon.png differ diff --git a/src/wp-content/themes/avada/images/error-icon@2x.png b/src/wp-content/themes/avada/images/error-icon@2x.png new file mode 100644 index 0000000..caaddee Binary files /dev/null and b/src/wp-content/themes/avada/images/error-icon@2x.png differ diff --git a/src/wp-content/themes/avada/images/facebook.png b/src/wp-content/themes/avada/images/facebook.png new file mode 100644 index 0000000..ce2ba75 Binary files /dev/null and b/src/wp-content/themes/avada/images/facebook.png differ diff --git a/src/wp-content/themes/avada/images/facebook@2x.png b/src/wp-content/themes/avada/images/facebook@2x.png new file mode 100644 index 0000000..5b03829 Binary files /dev/null and b/src/wp-content/themes/avada/images/facebook@2x.png differ diff --git a/src/wp-content/themes/avada/images/finder-ico.png b/src/wp-content/themes/avada/images/finder-ico.png new file mode 100644 index 0000000..5eb5664 Binary files /dev/null and b/src/wp-content/themes/avada/images/finder-ico.png differ diff --git a/src/wp-content/themes/avada/images/finder-ico@2x.png b/src/wp-content/themes/avada/images/finder-ico@2x.png new file mode 100644 index 0000000..6618a5a Binary files /dev/null and b/src/wp-content/themes/avada/images/finder-ico@2x.png differ diff --git a/src/wp-content/themes/avada/images/flickr.png b/src/wp-content/themes/avada/images/flickr.png new file mode 100644 index 0000000..89c9300 Binary files /dev/null and b/src/wp-content/themes/avada/images/flickr.png differ diff --git a/src/wp-content/themes/avada/images/flickr@2x.png b/src/wp-content/themes/avada/images/flickr@2x.png new file mode 100644 index 0000000..24de020 Binary files /dev/null and b/src/wp-content/themes/avada/images/flickr@2x.png differ diff --git a/src/wp-content/themes/avada/images/forrst.png b/src/wp-content/themes/avada/images/forrst.png new file mode 100644 index 0000000..3d42e5d Binary files /dev/null and b/src/wp-content/themes/avada/images/forrst.png differ diff --git a/src/wp-content/themes/avada/images/forrst@2x.png b/src/wp-content/themes/avada/images/forrst@2x.png new file mode 100644 index 0000000..cf8529e Binary files /dev/null and b/src/wp-content/themes/avada/images/forrst@2x.png differ diff --git a/src/wp-content/themes/avada/images/forum-arrow.png b/src/wp-content/themes/avada/images/forum-arrow.png new file mode 100644 index 0000000..8085754 Binary files /dev/null and b/src/wp-content/themes/avada/images/forum-arrow.png differ diff --git a/src/wp-content/themes/avada/images/general-icon.png b/src/wp-content/themes/avada/images/general-icon.png new file mode 100644 index 0000000..53bad83 Binary files /dev/null and b/src/wp-content/themes/avada/images/general-icon.png differ diff --git a/src/wp-content/themes/avada/images/general-icon@2x.png b/src/wp-content/themes/avada/images/general-icon@2x.png new file mode 100644 index 0000000..53bad83 Binary files /dev/null and b/src/wp-content/themes/avada/images/general-icon@2x.png differ diff --git a/src/wp-content/themes/avada/images/google.png b/src/wp-content/themes/avada/images/google.png new file mode 100644 index 0000000..3352fec Binary files /dev/null and b/src/wp-content/themes/avada/images/google.png differ diff --git a/src/wp-content/themes/avada/images/google@2x.png b/src/wp-content/themes/avada/images/google@2x.png new file mode 100644 index 0000000..088c28b Binary files /dev/null and b/src/wp-content/themes/avada/images/google@2x.png differ diff --git a/src/wp-content/themes/avada/images/ico-01.gif b/src/wp-content/themes/avada/images/ico-01.gif new file mode 100644 index 0000000..e3657dd Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-01.gif differ diff --git a/src/wp-content/themes/avada/images/ico-01@2x.gif b/src/wp-content/themes/avada/images/ico-01@2x.gif new file mode 100644 index 0000000..7674d2c Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-01@2x.gif differ diff --git a/src/wp-content/themes/avada/images/ico-02.gif b/src/wp-content/themes/avada/images/ico-02.gif new file mode 100644 index 0000000..adbd555 Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-02.gif differ diff --git a/src/wp-content/themes/avada/images/ico-03.gif b/src/wp-content/themes/avada/images/ico-03.gif new file mode 100644 index 0000000..a6e1784 Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-03.gif differ diff --git a/src/wp-content/themes/avada/images/ico-03@2x.gif b/src/wp-content/themes/avada/images/ico-03@2x.gif new file mode 100644 index 0000000..aa1cd05 Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-03@2x.gif differ diff --git a/src/wp-content/themes/avada/images/ico-04.gif b/src/wp-content/themes/avada/images/ico-04.gif new file mode 100644 index 0000000..f1419a7 Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-04.gif differ diff --git a/src/wp-content/themes/avada/images/ico-04@2x.gif b/src/wp-content/themes/avada/images/ico-04@2x.gif new file mode 100644 index 0000000..cf75bbc Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-04@2x.gif differ diff --git a/src/wp-content/themes/avada/images/ico-0@2x.gif b/src/wp-content/themes/avada/images/ico-0@2x.gif new file mode 100644 index 0000000..f782c7e Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-0@2x.gif differ diff --git a/src/wp-content/themes/avada/images/ico-social-networks.gif b/src/wp-content/themes/avada/images/ico-social-networks.gif new file mode 100644 index 0000000..4cf9e8b Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-social-networks.gif differ diff --git a/src/wp-content/themes/avada/images/ico-social-networks@2x.gif b/src/wp-content/themes/avada/images/ico-social-networks@2x.gif new file mode 100644 index 0000000..4cf9e8b Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-social-networks@2x.gif differ diff --git a/src/wp-content/themes/avada/images/ico-user-girl.png b/src/wp-content/themes/avada/images/ico-user-girl.png new file mode 100644 index 0000000..cccc9a2 Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-user-girl.png differ diff --git a/src/wp-content/themes/avada/images/ico-user-girl@2x.png b/src/wp-content/themes/avada/images/ico-user-girl@2x.png new file mode 100644 index 0000000..6e6e6ba Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-user-girl@2x.png differ diff --git a/src/wp-content/themes/avada/images/ico-user-girl_dark.png b/src/wp-content/themes/avada/images/ico-user-girl_dark.png new file mode 100644 index 0000000..a0907f8 Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-user-girl_dark.png differ diff --git a/src/wp-content/themes/avada/images/ico-user-girl_dark@2x.png b/src/wp-content/themes/avada/images/ico-user-girl_dark@2x.png new file mode 100644 index 0000000..478bb7f Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-user-girl_dark@2x.png differ diff --git a/src/wp-content/themes/avada/images/ico-user.png b/src/wp-content/themes/avada/images/ico-user.png new file mode 100644 index 0000000..11a5c54 Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-user.png differ diff --git a/src/wp-content/themes/avada/images/ico-user@2x.png b/src/wp-content/themes/avada/images/ico-user@2x.png new file mode 100644 index 0000000..6dd1a4b Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-user@2x.png differ diff --git a/src/wp-content/themes/avada/images/ico-user_dark.png b/src/wp-content/themes/avada/images/ico-user_dark.png new file mode 100644 index 0000000..3a84dee Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-user_dark.png differ diff --git a/src/wp-content/themes/avada/images/ico-user_dark@2x.png b/src/wp-content/themes/avada/images/ico-user_dark@2x.png new file mode 100644 index 0000000..493f3e7 Binary files /dev/null and b/src/wp-content/themes/avada/images/ico-user_dark@2x.png differ diff --git a/src/wp-content/themes/avada/images/imageframe_shadow.png b/src/wp-content/themes/avada/images/imageframe_shadow.png new file mode 100644 index 0000000..b1726c8 Binary files /dev/null and b/src/wp-content/themes/avada/images/imageframe_shadow.png differ diff --git a/src/wp-content/themes/avada/images/large_btn_bg.png b/src/wp-content/themes/avada/images/large_btn_bg.png new file mode 100644 index 0000000..097ca13 Binary files /dev/null and b/src/wp-content/themes/avada/images/large_btn_bg.png differ diff --git a/src/wp-content/themes/avada/images/large_btn_bg@2x.png b/src/wp-content/themes/avada/images/large_btn_bg@2x.png new file mode 100644 index 0000000..826e0d3 Binary files /dev/null and b/src/wp-content/themes/avada/images/large_btn_bg@2x.png differ diff --git a/src/wp-content/themes/avada/images/link-ico.png b/src/wp-content/themes/avada/images/link-ico.png new file mode 100644 index 0000000..146c606 Binary files /dev/null and b/src/wp-content/themes/avada/images/link-ico.png differ diff --git a/src/wp-content/themes/avada/images/link-ico@2x.png b/src/wp-content/themes/avada/images/link-ico@2x.png new file mode 100644 index 0000000..ae106d9 Binary files /dev/null and b/src/wp-content/themes/avada/images/link-ico@2x.png differ diff --git a/src/wp-content/themes/avada/images/linkedin.png b/src/wp-content/themes/avada/images/linkedin.png new file mode 100644 index 0000000..ba41e82 Binary files /dev/null and b/src/wp-content/themes/avada/images/linkedin.png differ diff --git a/src/wp-content/themes/avada/images/linkedin@2x.png b/src/wp-content/themes/avada/images/linkedin@2x.png new file mode 100644 index 0000000..c666eab Binary files /dev/null and b/src/wp-content/themes/avada/images/linkedin@2x.png differ diff --git a/src/wp-content/themes/avada/images/logo-footer.gif b/src/wp-content/themes/avada/images/logo-footer.gif new file mode 100644 index 0000000..517d67f Binary files /dev/null and b/src/wp-content/themes/avada/images/logo-footer.gif differ diff --git a/src/wp-content/themes/avada/images/logo-footer@2x.gif b/src/wp-content/themes/avada/images/logo-footer@2x.gif new file mode 100644 index 0000000..d3f244d Binary files /dev/null and b/src/wp-content/themes/avada/images/logo-footer@2x.gif differ diff --git a/src/wp-content/themes/avada/images/logo.gif b/src/wp-content/themes/avada/images/logo.gif new file mode 100644 index 0000000..dc3b9f0 Binary files /dev/null and b/src/wp-content/themes/avada/images/logo.gif differ diff --git a/src/wp-content/themes/avada/images/logo.png b/src/wp-content/themes/avada/images/logo.png new file mode 100644 index 0000000..b206066 Binary files /dev/null and b/src/wp-content/themes/avada/images/logo.png differ diff --git a/src/wp-content/themes/avada/images/logo@2x.gif b/src/wp-content/themes/avada/images/logo@2x.gif new file mode 100644 index 0000000..be6a731 Binary files /dev/null and b/src/wp-content/themes/avada/images/logo@2x.gif differ diff --git a/src/wp-content/themes/avada/images/logo@2x.png b/src/wp-content/themes/avada/images/logo@2x.png new file mode 100644 index 0000000..0f0a457 Binary files /dev/null and b/src/wp-content/themes/avada/images/logo@2x.png differ diff --git a/src/wp-content/themes/avada/images/logo_dark.png b/src/wp-content/themes/avada/images/logo_dark.png new file mode 100644 index 0000000..cebd45b Binary files /dev/null and b/src/wp-content/themes/avada/images/logo_dark.png differ diff --git a/src/wp-content/themes/avada/images/logo_dark@2x.png b/src/wp-content/themes/avada/images/logo_dark@2x.png new file mode 100644 index 0000000..e7115f9 Binary files /dev/null and b/src/wp-content/themes/avada/images/logo_dark@2x.png differ diff --git a/src/wp-content/themes/avada/images/ls_next.png b/src/wp-content/themes/avada/images/ls_next.png new file mode 100644 index 0000000..c76650b Binary files /dev/null and b/src/wp-content/themes/avada/images/ls_next.png differ diff --git a/src/wp-content/themes/avada/images/ls_next@2x.png b/src/wp-content/themes/avada/images/ls_next@2x.png new file mode 100644 index 0000000..b00989b Binary files /dev/null and b/src/wp-content/themes/avada/images/ls_next@2x.png differ diff --git a/src/wp-content/themes/avada/images/ls_prev.png b/src/wp-content/themes/avada/images/ls_prev.png new file mode 100644 index 0000000..ac12b1d Binary files /dev/null and b/src/wp-content/themes/avada/images/ls_prev.png differ diff --git a/src/wp-content/themes/avada/images/ls_prev@2x.png b/src/wp-content/themes/avada/images/ls_prev@2x.png new file mode 100644 index 0000000..13be915 Binary files /dev/null and b/src/wp-content/themes/avada/images/ls_prev@2x.png differ diff --git a/src/wp-content/themes/avada/images/mail.png b/src/wp-content/themes/avada/images/mail.png new file mode 100644 index 0000000..af0e751 Binary files /dev/null and b/src/wp-content/themes/avada/images/mail.png differ diff --git a/src/wp-content/themes/avada/images/mail@2x.png b/src/wp-content/themes/avada/images/mail@2x.png new file mode 100644 index 0000000..40d1cbf Binary files /dev/null and b/src/wp-content/themes/avada/images/mail@2x.png differ diff --git a/src/wp-content/themes/avada/images/mobile_menu_bg.png b/src/wp-content/themes/avada/images/mobile_menu_bg.png new file mode 100644 index 0000000..f902316 Binary files /dev/null and b/src/wp-content/themes/avada/images/mobile_menu_bg.png differ diff --git a/src/wp-content/themes/avada/images/mobile_menu_icon.png b/src/wp-content/themes/avada/images/mobile_menu_icon.png new file mode 100644 index 0000000..23345ca Binary files /dev/null and b/src/wp-content/themes/avada/images/mobile_menu_icon.png differ diff --git a/src/wp-content/themes/avada/images/mobile_menu_icon@2x.png b/src/wp-content/themes/avada/images/mobile_menu_icon@2x.png new file mode 100644 index 0000000..c20f823 Binary files /dev/null and b/src/wp-content/themes/avada/images/mobile_menu_icon@2x.png differ diff --git a/src/wp-content/themes/avada/images/myspace.png b/src/wp-content/themes/avada/images/myspace.png new file mode 100644 index 0000000..0ca2425 Binary files /dev/null and b/src/wp-content/themes/avada/images/myspace.png differ diff --git a/src/wp-content/themes/avada/images/myspace@2x.png b/src/wp-content/themes/avada/images/myspace@2x.png new file mode 100644 index 0000000..1bb5eda Binary files /dev/null and b/src/wp-content/themes/avada/images/myspace@2x.png differ diff --git a/src/wp-content/themes/avada/images/notice-icon.png b/src/wp-content/themes/avada/images/notice-icon.png new file mode 100644 index 0000000..0947238 Binary files /dev/null and b/src/wp-content/themes/avada/images/notice-icon.png differ diff --git a/src/wp-content/themes/avada/images/notice-icon@2x.png b/src/wp-content/themes/avada/images/notice-icon@2x.png new file mode 100644 index 0000000..45cc13c Binary files /dev/null and b/src/wp-content/themes/avada/images/notice-icon@2x.png differ diff --git a/src/wp-content/themes/avada/images/page_title_bg.png b/src/wp-content/themes/avada/images/page_title_bg.png new file mode 100644 index 0000000..c1a3e95 Binary files /dev/null and b/src/wp-content/themes/avada/images/page_title_bg.png differ diff --git a/src/wp-content/themes/avada/images/page_title_bg@2x.png b/src/wp-content/themes/avada/images/page_title_bg@2x.png new file mode 100644 index 0000000..df3cdb7 Binary files /dev/null and b/src/wp-content/themes/avada/images/page_title_bg@2x.png differ diff --git a/src/wp-content/themes/avada/images/patterns/header1.jpg b/src/wp-content/themes/avada/images/patterns/header1.jpg new file mode 100644 index 0000000..0606d71 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/header1.jpg differ diff --git a/src/wp-content/themes/avada/images/patterns/header2.jpg b/src/wp-content/themes/avada/images/patterns/header2.jpg new file mode 100644 index 0000000..615b11c Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/header2.jpg differ diff --git a/src/wp-content/themes/avada/images/patterns/header3.jpg b/src/wp-content/themes/avada/images/patterns/header3.jpg new file mode 100644 index 0000000..103d1ad Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/header3.jpg differ diff --git a/src/wp-content/themes/avada/images/patterns/header4.jpg b/src/wp-content/themes/avada/images/patterns/header4.jpg new file mode 100644 index 0000000..37ef67f Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/header4.jpg differ diff --git a/src/wp-content/themes/avada/images/patterns/header5.jpg b/src/wp-content/themes/avada/images/patterns/header5.jpg new file mode 100644 index 0000000..7af2ba3 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/header5.jpg differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern1.png b/src/wp-content/themes/avada/images/patterns/pattern1.png new file mode 100644 index 0000000..e02d752 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern1.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern10.png b/src/wp-content/themes/avada/images/patterns/pattern10.png new file mode 100644 index 0000000..a673c84 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern10.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern10@2x.png b/src/wp-content/themes/avada/images/patterns/pattern10@2x.png new file mode 100644 index 0000000..a673c84 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern10@2x.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern1@2x.png b/src/wp-content/themes/avada/images/patterns/pattern1@2x.png new file mode 100644 index 0000000..e02d752 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern1@2x.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern2.png b/src/wp-content/themes/avada/images/patterns/pattern2.png new file mode 100644 index 0000000..306ebd5 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern2.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern3.png b/src/wp-content/themes/avada/images/patterns/pattern3.png new file mode 100644 index 0000000..5f27326 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern3.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern3@2x.png b/src/wp-content/themes/avada/images/patterns/pattern3@2x.png new file mode 100644 index 0000000..5f27326 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern3@2x.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern4.png b/src/wp-content/themes/avada/images/patterns/pattern4.png new file mode 100644 index 0000000..8429ead Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern4.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern4@2x.png b/src/wp-content/themes/avada/images/patterns/pattern4@2x.png new file mode 100644 index 0000000..8429ead Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern4@2x.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern5.png b/src/wp-content/themes/avada/images/patterns/pattern5.png new file mode 100644 index 0000000..fa6b0a8 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern5.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern5@2x.png b/src/wp-content/themes/avada/images/patterns/pattern5@2x.png new file mode 100644 index 0000000..fa6b0a8 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern5@2x.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern6.png b/src/wp-content/themes/avada/images/patterns/pattern6.png new file mode 100644 index 0000000..9e5e191 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern6.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern6@2x.png b/src/wp-content/themes/avada/images/patterns/pattern6@2x.png new file mode 100644 index 0000000..9e5e191 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern6@2x.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern7.png b/src/wp-content/themes/avada/images/patterns/pattern7.png new file mode 100644 index 0000000..430c727 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern7.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern7@2x.png b/src/wp-content/themes/avada/images/patterns/pattern7@2x.png new file mode 100644 index 0000000..430c727 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern7@2x.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern8.png b/src/wp-content/themes/avada/images/patterns/pattern8.png new file mode 100644 index 0000000..8e0af26 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern8.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern8@2x.png b/src/wp-content/themes/avada/images/patterns/pattern8@2x.png new file mode 100644 index 0000000..8e0af26 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern8@2x.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern9.png b/src/wp-content/themes/avada/images/patterns/pattern9.png new file mode 100644 index 0000000..928d8ba Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern9.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern9@2x.png b/src/wp-content/themes/avada/images/patterns/pattern9@2x.png new file mode 100644 index 0000000..928d8ba Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern9@2x.png differ diff --git a/src/wp-content/themes/avada/images/patterns/pattern@2x.png b/src/wp-content/themes/avada/images/patterns/pattern@2x.png new file mode 100644 index 0000000..306ebd5 Binary files /dev/null and b/src/wp-content/themes/avada/images/patterns/pattern@2x.png differ diff --git a/src/wp-content/themes/avada/images/pc-icon.png b/src/wp-content/themes/avada/images/pc-icon.png new file mode 100644 index 0000000..2da2dd1 Binary files /dev/null and b/src/wp-content/themes/avada/images/pc-icon.png differ diff --git a/src/wp-content/themes/avada/images/pc-icon@2x.png b/src/wp-content/themes/avada/images/pc-icon@2x.png new file mode 100644 index 0000000..209a303 Binary files /dev/null and b/src/wp-content/themes/avada/images/pc-icon@2x.png differ diff --git a/src/wp-content/themes/avada/images/pinterest.png b/src/wp-content/themes/avada/images/pinterest.png new file mode 100644 index 0000000..adf2490 Binary files /dev/null and b/src/wp-content/themes/avada/images/pinterest.png differ diff --git a/src/wp-content/themes/avada/images/pinterest@2x.png b/src/wp-content/themes/avada/images/pinterest@2x.png new file mode 100644 index 0000000..c6fe00c Binary files /dev/null and b/src/wp-content/themes/avada/images/pinterest@2x.png differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/default_thumb.png b/src/wp-content/themes/avada/images/prettyPhoto/default/default_thumb.png new file mode 100644 index 0000000..1a26e4b Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/default_thumb.png differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/default_thumb@2x.png b/src/wp-content/themes/avada/images/prettyPhoto/default/default_thumb@2x.png new file mode 100644 index 0000000..1a26e4b Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/default_thumb@2x.png differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/loader.gif b/src/wp-content/themes/avada/images/prettyPhoto/default/loader.gif new file mode 100644 index 0000000..35d397c Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/loader.gif differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/loader@2x.gif b/src/wp-content/themes/avada/images/prettyPhoto/default/loader@2x.gif new file mode 100644 index 0000000..35d397c Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/loader@2x.gif differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/sprite.png b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite.png new file mode 100644 index 0000000..5f07ddc Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite.png differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/sprite@2x.png b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite@2x.png new file mode 100644 index 0000000..5f07ddc Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite@2x.png differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_@2x.png b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_@2x.png new file mode 100644 index 0000000..d4433ab Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_@2x.png differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_net@2x.png b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_net@2x.png new file mode 100644 index 0000000..379dc0d Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_net@2x.png differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_next.png b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_next.png new file mode 100644 index 0000000..379dc0d Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_next.png differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_prev.png b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_prev.png new file mode 100644 index 0000000..1ee4865 Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_prev.png differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_prev@2x.png b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_prev@2x.png new file mode 100644 index 0000000..1ee4865 Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_prev@2x.png differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_x.png b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_x.png new file mode 100644 index 0000000..d4433ab Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_x.png differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_y.png b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_y.png new file mode 100644 index 0000000..7786ab5 Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_y.png differ diff --git a/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_y@2x.png b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_y@2x.png new file mode 100644 index 0000000..7786ab5 Binary files /dev/null and b/src/wp-content/themes/avada/images/prettyPhoto/default/sprite_y@2x.png differ diff --git a/src/wp-content/themes/avada/images/reddit.png b/src/wp-content/themes/avada/images/reddit.png new file mode 100644 index 0000000..48a7c41 Binary files /dev/null and b/src/wp-content/themes/avada/images/reddit.png differ diff --git a/src/wp-content/themes/avada/images/reddit@2x.png b/src/wp-content/themes/avada/images/reddit@2x.png new file mode 100644 index 0000000..b413165 Binary files /dev/null and b/src/wp-content/themes/avada/images/reddit@2x.png differ diff --git a/src/wp-content/themes/avada/images/rss.png b/src/wp-content/themes/avada/images/rss.png new file mode 100644 index 0000000..9ad780c Binary files /dev/null and b/src/wp-content/themes/avada/images/rss.png differ diff --git a/src/wp-content/themes/avada/images/rss@2x.png b/src/wp-content/themes/avada/images/rss@2x.png new file mode 100644 index 0000000..c8d0bda Binary files /dev/null and b/src/wp-content/themes/avada/images/rss@2x.png differ diff --git a/src/wp-content/themes/avada/images/sep-shadow.png b/src/wp-content/themes/avada/images/sep-shadow.png new file mode 100644 index 0000000..e82a763 Binary files /dev/null and b/src/wp-content/themes/avada/images/sep-shadow.png differ diff --git a/src/wp-content/themes/avada/images/shadow-bottom.png b/src/wp-content/themes/avada/images/shadow-bottom.png new file mode 100644 index 0000000..ad082c2 Binary files /dev/null and b/src/wp-content/themes/avada/images/shadow-bottom.png differ diff --git a/src/wp-content/themes/avada/images/shadow-bottom@2x.png b/src/wp-content/themes/avada/images/shadow-bottom@2x.png new file mode 100644 index 0000000..ad082c2 Binary files /dev/null and b/src/wp-content/themes/avada/images/shadow-bottom@2x.png differ diff --git a/src/wp-content/themes/avada/images/shadow-top.png b/src/wp-content/themes/avada/images/shadow-top.png new file mode 100644 index 0000000..88cf8b8 Binary files /dev/null and b/src/wp-content/themes/avada/images/shadow-top.png differ diff --git a/src/wp-content/themes/avada/images/shadow-top@2x.png b/src/wp-content/themes/avada/images/shadow-top@2x.png new file mode 100644 index 0000000..88cf8b8 Binary files /dev/null and b/src/wp-content/themes/avada/images/shadow-top@2x.png differ diff --git a/src/wp-content/themes/avada/images/share.png b/src/wp-content/themes/avada/images/share.png new file mode 100644 index 0000000..8be5efc Binary files /dev/null and b/src/wp-content/themes/avada/images/share.png differ diff --git a/src/wp-content/themes/avada/images/share@2x.png b/src/wp-content/themes/avada/images/share@2x.png new file mode 100644 index 0000000..8be5efc Binary files /dev/null and b/src/wp-content/themes/avada/images/share@2x.png differ diff --git a/src/wp-content/themes/avada/images/shortcode_sep.png b/src/wp-content/themes/avada/images/shortcode_sep.png new file mode 100644 index 0000000..e1bbbbe Binary files /dev/null and b/src/wp-content/themes/avada/images/shortcode_sep.png differ diff --git a/src/wp-content/themes/avada/images/shortcode_sep@2x.png b/src/wp-content/themes/avada/images/shortcode_sep@2x.png new file mode 100644 index 0000000..e1bbbbe Binary files /dev/null and b/src/wp-content/themes/avada/images/shortcode_sep@2x.png differ diff --git a/src/wp-content/themes/avada/images/side_nav_bg.png b/src/wp-content/themes/avada/images/side_nav_bg.png new file mode 100644 index 0000000..bd969cc Binary files /dev/null and b/src/wp-content/themes/avada/images/side_nav_bg.png differ diff --git a/src/wp-content/themes/avada/images/side_nav_bg@2x.png b/src/wp-content/themes/avada/images/side_nav_bg@2x.png new file mode 100644 index 0000000..bd969cc Binary files /dev/null and b/src/wp-content/themes/avada/images/side_nav_bg@2x.png differ diff --git a/src/wp-content/themes/avada/images/side_nav_bg_dark.png b/src/wp-content/themes/avada/images/side_nav_bg_dark.png new file mode 100644 index 0000000..8933c31 Binary files /dev/null and b/src/wp-content/themes/avada/images/side_nav_bg_dark.png differ diff --git a/src/wp-content/themes/avada/images/side_nav_bg_dark@2x.png b/src/wp-content/themes/avada/images/side_nav_bg_dark@2x.png new file mode 100644 index 0000000..8933c31 Binary files /dev/null and b/src/wp-content/themes/avada/images/side_nav_bg_dark@2x.png differ diff --git a/src/wp-content/themes/avada/images/skin.png b/src/wp-content/themes/avada/images/skin.png new file mode 100644 index 0000000..6c5f106 Binary files /dev/null and b/src/wp-content/themes/avada/images/skin.png differ diff --git a/src/wp-content/themes/avada/images/skype.png b/src/wp-content/themes/avada/images/skype.png new file mode 100644 index 0000000..b3b7e19 Binary files /dev/null and b/src/wp-content/themes/avada/images/skype.png differ diff --git a/src/wp-content/themes/avada/images/skype@2x.png b/src/wp-content/themes/avada/images/skype@2x.png new file mode 100644 index 0000000..a247f73 Binary files /dev/null and b/src/wp-content/themes/avada/images/skype@2x.png differ diff --git a/src/wp-content/themes/avada/images/social_links.png b/src/wp-content/themes/avada/images/social_links.png new file mode 100644 index 0000000..acd96e8 Binary files /dev/null and b/src/wp-content/themes/avada/images/social_links.png differ diff --git a/src/wp-content/themes/avada/images/social_links@2x.png b/src/wp-content/themes/avada/images/social_links@2x.png new file mode 100644 index 0000000..acd96e8 Binary files /dev/null and b/src/wp-content/themes/avada/images/social_links@2x.png differ diff --git a/src/wp-content/themes/avada/images/speech-bubble.png b/src/wp-content/themes/avada/images/speech-bubble.png new file mode 100644 index 0000000..8dffa5d Binary files /dev/null and b/src/wp-content/themes/avada/images/speech-bubble.png differ diff --git a/src/wp-content/themes/avada/images/speech-bubble@2x.png b/src/wp-content/themes/avada/images/speech-bubble@2x.png new file mode 100644 index 0000000..d02b8d8 Binary files /dev/null and b/src/wp-content/themes/avada/images/speech-bubble@2x.png differ diff --git a/src/wp-content/themes/avada/images/style-selector.png b/src/wp-content/themes/avada/images/style-selector.png new file mode 100644 index 0000000..ea9cd4c Binary files /dev/null and b/src/wp-content/themes/avada/images/style-selector.png differ diff --git a/src/wp-content/themes/avada/images/subnav_sep.jpg b/src/wp-content/themes/avada/images/subnav_sep.jpg new file mode 100644 index 0000000..2fbe0e5 Binary files /dev/null and b/src/wp-content/themes/avada/images/subnav_sep.jpg differ diff --git a/src/wp-content/themes/avada/images/subnav_sep@2x.jpg b/src/wp-content/themes/avada/images/subnav_sep@2x.jpg new file mode 100644 index 0000000..2fbe0e5 Binary files /dev/null and b/src/wp-content/themes/avada/images/subnav_sep@2x.jpg differ diff --git a/src/wp-content/themes/avada/images/success-icon.png b/src/wp-content/themes/avada/images/success-icon.png new file mode 100644 index 0000000..7d87e5b Binary files /dev/null and b/src/wp-content/themes/avada/images/success-icon.png differ diff --git a/src/wp-content/themes/avada/images/success-icon@2x.png b/src/wp-content/themes/avada/images/success-icon@2x.png new file mode 100644 index 0000000..dbb9a4f Binary files /dev/null and b/src/wp-content/themes/avada/images/success-icon@2x.png differ diff --git a/src/wp-content/themes/avada/images/tab-bg.png b/src/wp-content/themes/avada/images/tab-bg.png new file mode 100644 index 0000000..44de3b3 Binary files /dev/null and b/src/wp-content/themes/avada/images/tab-bg.png differ diff --git a/src/wp-content/themes/avada/images/tab-bg@2x.png b/src/wp-content/themes/avada/images/tab-bg@2x.png new file mode 100644 index 0000000..44de3b3 Binary files /dev/null and b/src/wp-content/themes/avada/images/tab-bg@2x.png differ diff --git a/src/wp-content/themes/avada/images/timeline_line.png b/src/wp-content/themes/avada/images/timeline_line.png new file mode 100644 index 0000000..10227be Binary files /dev/null and b/src/wp-content/themes/avada/images/timeline_line.png differ diff --git a/src/wp-content/themes/avada/images/timeline_line_dark.png b/src/wp-content/themes/avada/images/timeline_line_dark.png new file mode 100644 index 0000000..e5725cf Binary files /dev/null and b/src/wp-content/themes/avada/images/timeline_line_dark.png differ diff --git a/src/wp-content/themes/avada/images/toggle_minus.png b/src/wp-content/themes/avada/images/toggle_minus.png new file mode 100644 index 0000000..85eb09b Binary files /dev/null and b/src/wp-content/themes/avada/images/toggle_minus.png differ diff --git a/src/wp-content/themes/avada/images/toggle_minus@2x.png b/src/wp-content/themes/avada/images/toggle_minus@2x.png new file mode 100644 index 0000000..40b61cd Binary files /dev/null and b/src/wp-content/themes/avada/images/toggle_minus@2x.png differ diff --git a/src/wp-content/themes/avada/images/toggle_plus.png b/src/wp-content/themes/avada/images/toggle_plus.png new file mode 100644 index 0000000..a3802a2 Binary files /dev/null and b/src/wp-content/themes/avada/images/toggle_plus.png differ diff --git a/src/wp-content/themes/avada/images/toggle_plus@2x.png b/src/wp-content/themes/avada/images/toggle_plus@2x.png new file mode 100644 index 0000000..669c51b Binary files /dev/null and b/src/wp-content/themes/avada/images/toggle_plus@2x.png differ diff --git a/src/wp-content/themes/avada/images/tumblr.png b/src/wp-content/themes/avada/images/tumblr.png new file mode 100644 index 0000000..f98caea Binary files /dev/null and b/src/wp-content/themes/avada/images/tumblr.png differ diff --git a/src/wp-content/themes/avada/images/tumblr@2x.png b/src/wp-content/themes/avada/images/tumblr@2x.png new file mode 100644 index 0000000..b45bf8b Binary files /dev/null and b/src/wp-content/themes/avada/images/tumblr@2x.png differ diff --git a/src/wp-content/themes/avada/images/twitter-icon.png b/src/wp-content/themes/avada/images/twitter-icon.png new file mode 100644 index 0000000..8ab73ca Binary files /dev/null and b/src/wp-content/themes/avada/images/twitter-icon.png differ diff --git a/src/wp-content/themes/avada/images/twitter-icon@2x.png b/src/wp-content/themes/avada/images/twitter-icon@2x.png new file mode 100644 index 0000000..0df6d13 Binary files /dev/null and b/src/wp-content/themes/avada/images/twitter-icon@2x.png differ diff --git a/src/wp-content/themes/avada/images/twitter.png b/src/wp-content/themes/avada/images/twitter.png new file mode 100644 index 0000000..7b7b891 Binary files /dev/null and b/src/wp-content/themes/avada/images/twitter.png differ diff --git a/src/wp-content/themes/avada/images/twitter@2x.png b/src/wp-content/themes/avada/images/twitter@2x.png new file mode 100644 index 0000000..ddbc102 Binary files /dev/null and b/src/wp-content/themes/avada/images/twitter@2x.png differ diff --git a/src/wp-content/themes/avada/images/vimeo.png b/src/wp-content/themes/avada/images/vimeo.png new file mode 100644 index 0000000..6c6ea2d Binary files /dev/null and b/src/wp-content/themes/avada/images/vimeo.png differ diff --git a/src/wp-content/themes/avada/images/vimeo@2x.png b/src/wp-content/themes/avada/images/vimeo@2x.png new file mode 100644 index 0000000..184e5ec Binary files /dev/null and b/src/wp-content/themes/avada/images/vimeo@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/blogger.png b/src/wp-content/themes/avada/images/white/blogger.png new file mode 100644 index 0000000..d2f91b9 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/blogger.png differ diff --git a/src/wp-content/themes/avada/images/white/blogger@2x.png b/src/wp-content/themes/avada/images/white/blogger@2x.png new file mode 100644 index 0000000..1cdd6e7 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/blogger@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/deviantart.png b/src/wp-content/themes/avada/images/white/deviantart.png new file mode 100644 index 0000000..0061faf Binary files /dev/null and b/src/wp-content/themes/avada/images/white/deviantart.png differ diff --git a/src/wp-content/themes/avada/images/white/deviantart@2x.png b/src/wp-content/themes/avada/images/white/deviantart@2x.png new file mode 100644 index 0000000..9e38f39 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/deviantart@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/digg.png b/src/wp-content/themes/avada/images/white/digg.png new file mode 100644 index 0000000..ea0b687 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/digg.png differ diff --git a/src/wp-content/themes/avada/images/white/digg@2x.png b/src/wp-content/themes/avada/images/white/digg@2x.png new file mode 100644 index 0000000..cb0bc2c Binary files /dev/null and b/src/wp-content/themes/avada/images/white/digg@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/dribbble.png b/src/wp-content/themes/avada/images/white/dribbble.png new file mode 100644 index 0000000..0da5fec Binary files /dev/null and b/src/wp-content/themes/avada/images/white/dribbble.png differ diff --git a/src/wp-content/themes/avada/images/white/dribbble@2x.png b/src/wp-content/themes/avada/images/white/dribbble@2x.png new file mode 100644 index 0000000..a322e57 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/dribbble@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/facebook.png b/src/wp-content/themes/avada/images/white/facebook.png new file mode 100644 index 0000000..ade67f4 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/facebook.png differ diff --git a/src/wp-content/themes/avada/images/white/facebook@2x.png b/src/wp-content/themes/avada/images/white/facebook@2x.png new file mode 100644 index 0000000..221f533 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/facebook@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/flickr.png b/src/wp-content/themes/avada/images/white/flickr.png new file mode 100644 index 0000000..f5d991d Binary files /dev/null and b/src/wp-content/themes/avada/images/white/flickr.png differ diff --git a/src/wp-content/themes/avada/images/white/flickr@2x.png b/src/wp-content/themes/avada/images/white/flickr@2x.png new file mode 100644 index 0000000..e814fac Binary files /dev/null and b/src/wp-content/themes/avada/images/white/flickr@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/forrst.png b/src/wp-content/themes/avada/images/white/forrst.png new file mode 100644 index 0000000..173b832 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/forrst.png differ diff --git a/src/wp-content/themes/avada/images/white/forrst@2x.png b/src/wp-content/themes/avada/images/white/forrst@2x.png new file mode 100644 index 0000000..9c414fe Binary files /dev/null and b/src/wp-content/themes/avada/images/white/forrst@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/google.png b/src/wp-content/themes/avada/images/white/google.png new file mode 100644 index 0000000..ce5fb25 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/google.png differ diff --git a/src/wp-content/themes/avada/images/white/google@2x.png b/src/wp-content/themes/avada/images/white/google@2x.png new file mode 100644 index 0000000..516ff1c Binary files /dev/null and b/src/wp-content/themes/avada/images/white/google@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/linkedin.png b/src/wp-content/themes/avada/images/white/linkedin.png new file mode 100644 index 0000000..8d5981f Binary files /dev/null and b/src/wp-content/themes/avada/images/white/linkedin.png differ diff --git a/src/wp-content/themes/avada/images/white/linkedin@2x.png b/src/wp-content/themes/avada/images/white/linkedin@2x.png new file mode 100644 index 0000000..009b129 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/linkedin@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/mail.png b/src/wp-content/themes/avada/images/white/mail.png new file mode 100644 index 0000000..1e95135 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/mail.png differ diff --git a/src/wp-content/themes/avada/images/white/mail@2x.png b/src/wp-content/themes/avada/images/white/mail@2x.png new file mode 100644 index 0000000..5a502d6 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/mail@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/myspace.png b/src/wp-content/themes/avada/images/white/myspace.png new file mode 100644 index 0000000..914a719 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/myspace.png differ diff --git a/src/wp-content/themes/avada/images/white/myspace@2x.png b/src/wp-content/themes/avada/images/white/myspace@2x.png new file mode 100644 index 0000000..f9a4c67 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/myspace@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/pinterest.png b/src/wp-content/themes/avada/images/white/pinterest.png new file mode 100644 index 0000000..3198768 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/pinterest.png differ diff --git a/src/wp-content/themes/avada/images/white/pinterest@2x.png b/src/wp-content/themes/avada/images/white/pinterest@2x.png new file mode 100644 index 0000000..dffcacb Binary files /dev/null and b/src/wp-content/themes/avada/images/white/pinterest@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/reddit.png b/src/wp-content/themes/avada/images/white/reddit.png new file mode 100644 index 0000000..88036e6 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/reddit.png differ diff --git a/src/wp-content/themes/avada/images/white/reddit@2x.png b/src/wp-content/themes/avada/images/white/reddit@2x.png new file mode 100644 index 0000000..3ac3d0f Binary files /dev/null and b/src/wp-content/themes/avada/images/white/reddit@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/rss.png b/src/wp-content/themes/avada/images/white/rss.png new file mode 100644 index 0000000..632e3d4 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/rss.png differ diff --git a/src/wp-content/themes/avada/images/white/rss@2x.png b/src/wp-content/themes/avada/images/white/rss@2x.png new file mode 100644 index 0000000..a2d5703 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/rss@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/skype.png b/src/wp-content/themes/avada/images/white/skype.png new file mode 100644 index 0000000..cc6eeb5 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/skype.png differ diff --git a/src/wp-content/themes/avada/images/white/skype@2x.png b/src/wp-content/themes/avada/images/white/skype@2x.png new file mode 100644 index 0000000..98e0b23 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/skype@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/tumblr.png b/src/wp-content/themes/avada/images/white/tumblr.png new file mode 100644 index 0000000..b4c308d Binary files /dev/null and b/src/wp-content/themes/avada/images/white/tumblr.png differ diff --git a/src/wp-content/themes/avada/images/white/tumblr@2x.png b/src/wp-content/themes/avada/images/white/tumblr@2x.png new file mode 100644 index 0000000..6d7cc43 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/tumblr@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/twitter.png b/src/wp-content/themes/avada/images/white/twitter.png new file mode 100644 index 0000000..24b4e17 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/twitter.png differ diff --git a/src/wp-content/themes/avada/images/white/twitter@2x.png b/src/wp-content/themes/avada/images/white/twitter@2x.png new file mode 100644 index 0000000..63ecfea Binary files /dev/null and b/src/wp-content/themes/avada/images/white/twitter@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/vimeo.png b/src/wp-content/themes/avada/images/white/vimeo.png new file mode 100644 index 0000000..a097cd8 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/vimeo.png differ diff --git a/src/wp-content/themes/avada/images/white/vimeo@2x.png b/src/wp-content/themes/avada/images/white/vimeo@2x.png new file mode 100644 index 0000000..052c3ba Binary files /dev/null and b/src/wp-content/themes/avada/images/white/vimeo@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/yahoo.png b/src/wp-content/themes/avada/images/white/yahoo.png new file mode 100644 index 0000000..12a431d Binary files /dev/null and b/src/wp-content/themes/avada/images/white/yahoo.png differ diff --git a/src/wp-content/themes/avada/images/white/yahoo@2x.png b/src/wp-content/themes/avada/images/white/yahoo@2x.png new file mode 100644 index 0000000..8c9ec87 Binary files /dev/null and b/src/wp-content/themes/avada/images/white/yahoo@2x.png differ diff --git a/src/wp-content/themes/avada/images/white/youtube.png b/src/wp-content/themes/avada/images/white/youtube.png new file mode 100644 index 0000000..78718ec Binary files /dev/null and b/src/wp-content/themes/avada/images/white/youtube.png differ diff --git a/src/wp-content/themes/avada/images/white/youtube@2x.png b/src/wp-content/themes/avada/images/white/youtube@2x.png new file mode 100644 index 0000000..847b8cd Binary files /dev/null and b/src/wp-content/themes/avada/images/white/youtube@2x.png differ diff --git a/src/wp-content/themes/avada/images/x-icon.png b/src/wp-content/themes/avada/images/x-icon.png new file mode 100644 index 0000000..ee9f467 Binary files /dev/null and b/src/wp-content/themes/avada/images/x-icon.png differ diff --git a/src/wp-content/themes/avada/images/yahoo.png b/src/wp-content/themes/avada/images/yahoo.png new file mode 100644 index 0000000..91eb910 Binary files /dev/null and b/src/wp-content/themes/avada/images/yahoo.png differ diff --git a/src/wp-content/themes/avada/images/yahoo@2x.png b/src/wp-content/themes/avada/images/yahoo@2x.png new file mode 100644 index 0000000..d711873 Binary files /dev/null and b/src/wp-content/themes/avada/images/yahoo@2x.png differ diff --git a/src/wp-content/themes/avada/images/youtube.png b/src/wp-content/themes/avada/images/youtube.png new file mode 100644 index 0000000..dcdabe9 Binary files /dev/null and b/src/wp-content/themes/avada/images/youtube.png differ diff --git a/src/wp-content/themes/avada/images/youtube@2x.png b/src/wp-content/themes/avada/images/youtube@2x.png new file mode 100644 index 0000000..5cb1099 Binary files /dev/null and b/src/wp-content/themes/avada/images/youtube@2x.png differ diff --git a/src/wp-content/themes/avada/index.php b/src/wp-content/themes/avada/index.php new file mode 100644 index 0000000..1698990 --- /dev/null +++ b/src/wp-content/themes/avada/index.php @@ -0,0 +1,229 @@ + + +
                + +
                + +
                + post_date); + $post_month = date('n', $post_timestamp); + $post_year = get_the_date('o'); + $current_date = get_the_date('o-n'); + ?> + + +

                + + +
                > + +
                +
                + + +
                +
                + + +
                +
                + + +
                + +
                +
                + + +

                + + +
                +
                + + +
                +
                + + +
                +
                + +
                + +

                + + +

                ||

                + +

                ||||

                + + + +
                + +
                +
                + +
                + + +
                + +
                + +
                +  '.__('0', 'Avada'), ' '.__('1', 'Avada'), ' '.'%'); ?> +
                + + +
                + |||| +
                + +
                + +
                + +
                + +
                +
                + +
                + +
                + + + \ No newline at end of file diff --git a/src/wp-content/themes/avada/js/gmap-min.js b/src/wp-content/themes/avada/js/gmap-min.js new file mode 100644 index 0000000..2866b75 --- /dev/null +++ b/src/wp-content/themes/avada/js/gmap-min.js @@ -0,0 +1,8 @@ +/** + * jQuery goMap + * + * @url http://www.pittss.lv/jquery/gomap/ + * @author Jevgenijs Shtrauss + * @version 1.3.2 2011.07.01 + * This software is released under the MIT License + */(function(e){function n(e){this.setMap(e)}var t=new google.maps.Geocoder;n.prototype=new google.maps.OverlayView;n.prototype.onAdd=function(){};n.prototype.onRemove=function(){};n.prototype.draw=function(){};e.goMap={};e.fn.goMap=function(t){return this.each(function(){var n=e(this).data("goMap");if(!n){var r=e.extend(!0,{},e.goMapBase);e(this).data("goMap",r.init(this,t));e.goMap=r}else e.goMap=n})};e.goMapBase={defaults:{address:"",latitude:56.9,longitude:24.1,zoom:4,delay:200,hideByClick:!0,oneInfoWindow:!0,prefixId:"gomarker",polyId:"gopoly",groupId:"gogroup",navigationControl:!0,navigationControlOptions:{position:"TOP_LEFT",style:"DEFAULT"},mapTypeControl:!0,mapTypeControlOptions:{position:"TOP_RIGHT",style:"DEFAULT"},scaleControl:!1,scrollwheel:!0,directions:!1,directionsResult:null,disableDoubleClickZoom:!1,streetViewControl:!1,markers:[],overlays:[],polyline:{color:"#FF0000",opacity:1,weight:2},polygon:{color:"#FF0000",opacity:1,weight:2,fillColor:"#FF0000",fillOpacity:.2},circle:{color:"#FF0000",opacity:1,weight:2,fillColor:"#FF0000",fillOpacity:.2},rectangle:{color:"#FF0000",opacity:1,weight:2,fillColor:"#FF0000",fillOpacity:.2},maptype:"HYBRID",html_prepend:"
                ",html_append:"
                ",addMarker:!1},map:null,count:0,markers:[],polylines:[],polygons:[],circles:[],rectangles:[],tmpMarkers:[],geoMarkers:[],lockGeocode:!1,bounds:null,overlays:null,overlay:null,mapId:null,plId:null,pgId:null,cId:null,rId:null,opts:null,centerLatLng:null,init:function(t,r){var i=e.extend(!0,{},e.goMapBase.defaults,r);this.mapId=e(t);this.opts=i;i.address?this.geocode({address:i.address,center:!0}):e.isArray(i.markers)&&i.markers.length>0?i.markers[0].address?this.geocode({address:i.markers[0].address,center:!0}):this.centerLatLng=new google.maps.LatLng(i.markers[0].latitude,i.markers[0].longitude):this.centerLatLng=new google.maps.LatLng(i.latitude,i.longitude);var s={center:this.centerLatLng,disableDoubleClickZoom:i.disableDoubleClickZoom,mapTypeControl:i.mapTypeControl,streetViewControl:i.streetViewControl,mapTypeControlOptions:{position:google.maps.ControlPosition[i.mapTypeControlOptions.position.toUpperCase()],style:google.maps.MapTypeControlStyle[i.mapTypeControlOptions.style.toUpperCase()]},mapTypeId:google.maps.MapTypeId[i.maptype.toUpperCase()],navigationControl:i.navigationControl,navigationControlOptions:{position:google.maps.ControlPosition[i.navigationControlOptions.position.toUpperCase()],style:google.maps.NavigationControlStyle[i.navigationControlOptions.style.toUpperCase()]},scaleControl:i.scaleControl,scrollwheel:i.scrollwheel,zoom:i.zoom,zoomControl:i.navigationControl,panControl:i.navigationControl};this.map=new google.maps.Map(t,s);this.overlay=new n(this.map);this.overlays={polyline:{id:"plId",array:"polylines",create:"createPolyline"},polygon:{id:"pgId",array:"polygons",create:"createPolygon"},circle:{id:"cId",array:"circles",create:"createCircle"},rectangle:{id:"rId",array:"rectangles",create:"createRectangle"}};this.plId=e('
                ').appendTo(this.mapId);this.pgId=e('
                ').appendTo(this.mapId);this.cId=e('
                ').appendTo(this.mapId);this.rId=e('
                ').appendTo(this.mapId);for(var o=0,u=i.markers.length;o0&&!this.lockGeocode){this.lockGeocode=!0;var e=this.geoMarkers.splice(0,1);this.geocode({address:e[0].address},e[0])}else if(this.lockGeocode){var t=this;setTimeout(function(){t.geoMarker()},this.opts.delay)}},setMap:function(e){delete e.mapTypeId;if(e.address){this.geocode({address:e.address,center:!0});delete e.address}else if(e.latitude&&e.longitude){e.center=new google.maps.LatLng(e.latitude,e.longitude);delete e.longitude;delete e.latitude}e.mapTypeControlOptions&&e.mapTypeControlOptions.position&&(e.mapTypeControlOptions.position=google.maps.ControlPosition[e.mapTypeControlOptions.position.toUpperCase()]);e.mapTypeControlOptions&&e.mapTypeControlOptions.style&&(e.mapTypeControlOptions.style=google.maps.MapTypeControlStyle[e.mapTypeControlOptions.style.toUpperCase()]);e.navigationControlOptions&&e.navigationControlOptions.position&&(e.navigationControlOptions.position=google.maps.ControlPosition[e.navigationControlOptions.position.toUpperCase()]);e.navigationControlOptions&&e.navigationControlOptions.style&&(e.navigationControlOptions.style=google.maps.NavigationControlStyle[e.navigationControlOptions.style.toUpperCase()]);this.map.setOptions(e)},getMap:function(){return this.map},createListener:function(t,n,r){var i;typeof t!="object"&&(t={type:t});t.type=="map"?i=this.map:t.type=="marker"&&t.marker?i=e(this.mapId).data(t.marker):t.type=="info"&&t.marker&&(i=e(this.mapId).data(t.marker+"info"));if(i)return google.maps.event.addListener(i,n,r);if((t.type=="marker"||t.type=="info")&&this.getMarkerCount()!=this.getTmpMarkerCount())var s=this;setTimeout(function(){s.createListener(t,n,r)},this.opts.delay)},removeListener:function(e){google.maps.event.removeListener(e)},setInfoWindow:function(t,n){var r=this;n.content=r.opts.html_prepend+n.content+r.opts.html_append;var i=new google.maps.InfoWindow(n);i.show=!1;e(r.mapId).data(t.id+"info",i);if(n.popup){r.openWindow(i,t,n);i.show=!0}google.maps.event.addListener(t,"click",function(){if(i.show&&r.opts.hideByClick){i.close();i.show=!1}else{r.openWindow(i,t,n);i.show=!0}})},openWindow:function(t,n,r){this.opts.oneInfoWindow&&this.clearInfo();if(r.ajax){t.open(this.map,n);e.ajax({url:r.ajax,success:function(e){t.setContent(e)}})}else if(r.id){t.setContent(e(r.id).html());t.open(this.map,n)}else t.open(this.map,n)},setInfo:function(t,n){var r=e(this.mapId).data(t+"info");typeof n=="object"?r.setOptions(n):r.setContent(n)},getInfo:function(t,n){var r=e(this.mapId).data(t+"info").getContent();return n?e(r).html():r},clearInfo:function(){for(var t=0,n=this.markers.length;t0))return!1;for(var n=0,r=e.coords.length;n0))return!1;for(var n=0,r=e.coords.length;n0){var i=[];for(var s=0,o=r.coords.length;s-1){i=this[this.overlays[t].array].splice(r,1);var s=i[0];e(this[this.overlays[t].id]).data(s).setMap(null);e(this[this.overlays[t].id]).removeData(s);return!0}return!1},clearOverlays:function(t){for(var n=0,r=this[this.overlays[t].array].length;n-1){this.tmpMarkers.splice(n,1);r=this.markers.splice(n,1);var i=r[0],t=e(this.mapId).data(i),s=e(this.mapId).data(i+"info");t.setVisible(!1);t.setMap(null);e(this.mapId).removeData(i);if(s){s.close();s.show=!1;e(this.mapId).removeData(i+"info")}return!0}return!1},clearMarkers:function(){for(var t=0,n=this.markers.length;t + * @version 1.3.2 2011.07.01 + * This software is released under the MIT License + */ + +(function($) { + var geocoder = new google.maps.Geocoder(); + + function MyOverlay(map) { this.setMap(map); }; + MyOverlay.prototype = new google.maps.OverlayView(); + MyOverlay.prototype.onAdd = function() { }; + MyOverlay.prototype.onRemove = function() { }; + MyOverlay.prototype.draw = function() { }; + + $.goMap = {}; + + $.fn.goMap = function(options) { + return this.each(function() { + var goMap = $(this).data('goMap'); + if(!goMap) { + var goMapBase = $.extend(true, {}, $.goMapBase); + $(this).data('goMap', goMapBase.init(this, options)); + $.goMap = goMapBase; + } + else { + $.goMap = goMap; + } + }); + }; + + $.goMapBase = { + defaults: { + address: '', // Street, City, Country + latitude: 56.9, + longitude: 24.1, + zoom: 4, + delay: 200, + hideByClick: true, + oneInfoWindow: true, + prefixId: 'gomarker', + polyId: 'gopoly', + groupId: 'gogroup', + navigationControl: true, // Show or hide navigation control + navigationControlOptions: { + position: 'TOP_LEFT', // TOP, TOP_LEFT, TOP_RIGHT, BOTTOM, BOTTOM_LEFT, BOTTOM_RIGHT, LEFT, RIGHT + style: 'DEFAULT' // DEFAULT, ANDROID, SMALL, ZOOM_PAN + }, + mapTypeControl: true, // Show or hide map control + mapTypeControlOptions: { + position: 'TOP_RIGHT', // TOP, TOP_LEFT, TOP_RIGHT, BOTTOM, BOTTOM_LEFT, BOTTOM_RIGHT, LEFT, RIGHT + style: 'DEFAULT'// DEFAULT, DROPDOWN_MENU, HORIZONTAL_BAR + }, + scaleControl: false, // Show or hide scale + scrollwheel: true, // Mouse scroll whell + directions: false, + directionsResult: null, + disableDoubleClickZoom: false, + streetViewControl: false, + markers: [], + overlays: [], + polyline: { + color: '#FF0000', + opacity: 1.0, + weight: 2 + }, + polygon: { + color: '#FF0000', + opacity: 1.0, + weight: 2, + fillColor: '#FF0000', + fillOpacity: 0.2 + }, + circle: { + color: '#FF0000', + opacity: 1.0, + weight: 2, + fillColor: '#FF0000', + fillOpacity: 0.2 + }, + rectangle: { + color: '#FF0000', + opacity: 1.0, + weight: 2, + fillColor: '#FF0000', + fillOpacity: 0.2 + }, + maptype: 'HYBRID', // Map type - HYBRID, ROADMAP, SATELLITE, TERRAIN + html_prepend: '
                ', + html_append: '
                ', + addMarker: false + }, + map: null, + count: 0, + markers: [], + polylines: [], + polygons: [], + circles: [], + rectangles: [], + tmpMarkers: [], + geoMarkers: [], + lockGeocode: false, + bounds: null, + overlays: null, + overlay: null, + mapId: null, + plId: null, + pgId: null, + cId: null, + rId: null, + opts: null, + centerLatLng: null, + + init: function(el, options) { + var opts = $.extend(true, {}, $.goMapBase.defaults, options); + this.mapId = $(el); + this.opts = opts; + + if (opts.address) + this.geocode({address: opts.address, center: true}); +// else if (opts.latitude != $.goMapBase.defaults.latitude && opts.longitude != $.goMapBase.defaults.longitude) +// this.centerLatLng = new google.maps.LatLng(opts.latitude, opts.longitude); + else if ($.isArray(opts.markers) && opts.markers.length > 0) { + if (opts.markers[0].address) + this.geocode({address: opts.markers[0].address, center: true}); + else + this.centerLatLng = new google.maps.LatLng(opts.markers[0].latitude, opts.markers[0].longitude); + } + else + this.centerLatLng = new google.maps.LatLng(opts.latitude, opts.longitude); + + var myOptions = { + center: this.centerLatLng, + disableDoubleClickZoom: opts.disableDoubleClickZoom, + mapTypeControl: opts.mapTypeControl, + streetViewControl: opts.streetViewControl, + mapTypeControlOptions: { + position: google.maps.ControlPosition[opts.mapTypeControlOptions.position.toUpperCase()], + style: google.maps.MapTypeControlStyle[opts.mapTypeControlOptions.style.toUpperCase()] + }, + mapTypeId: google.maps.MapTypeId[opts.maptype.toUpperCase()], + navigationControl: opts.navigationControl, + navigationControlOptions: { + position: google.maps.ControlPosition[opts.navigationControlOptions.position.toUpperCase()], + style: google.maps.NavigationControlStyle[opts.navigationControlOptions.style.toUpperCase()] + }, + scaleControl: opts.scaleControl, + scrollwheel: opts.scrollwheel, + zoom: opts.zoom, + zoomControl: opts.navigationControl, + panControl: opts.navigationControl + }; + + this.map = new google.maps.Map(el, myOptions); + this.overlay = new MyOverlay(this.map); + + this.overlays = { + polyline: { id: 'plId', array: 'polylines', create: 'createPolyline' }, + polygon: { id: 'pgId', array: 'polygons', create: 'createPolygon' }, + circle: { id: 'cId', array: 'circles', create: 'createCircle' }, + rectangle: { id: 'rId', array: 'rectangles', create: 'createRectangle' } + }; + + this.plId = $('
                ').appendTo(this.mapId); + this.pgId = $('
                ').appendTo(this.mapId); + this.cId = $('
                ').appendTo(this.mapId); + this.rId = $('
                ').appendTo(this.mapId); + + for (var j = 0, l = opts.markers.length; j < l; j++) + this.createMarker(opts.markers[j]); + + for (var j = 0, l = opts.overlays.length; j < l; j++) + this[this.overlays[opts.overlays[j].type].create](opts.overlays[j]); + + var goMap = this; + if (opts.addMarker == true || opts.addMarker == 'multi') { + google.maps.event.addListener(goMap.map, 'click', function(event) { + var options = { + position: event.latLng, + draggable: true + }; + + var marker = goMap.createMarker(options); + + google.maps.event.addListener(marker, 'dblclick', function(event) { + marker.setMap(null); + goMap.removeMarker(marker.id); + }); + + }); + } + else if (opts.addMarker == 'single') { + google.maps.event.addListener(goMap.map, 'click', function(event) { + if(!goMap.singleMarker) { + var options = { + position: event.latLng, + draggable: true + }; + + var marker = goMap.createMarker(options); + goMap.singleMarker = true; + + google.maps.event.addListener(marker, 'dblclick', function(event) { + marker.setMap(null); + goMap.removeMarker(marker.id); + goMap.singleMarker = false; + }); + } + }); + } + delete opts.markers; + delete opts.overlays; + + return this; + }, + + ready: function(f) { + google.maps.event.addListenerOnce(this.map, 'bounds_changed', function() { + return f(); + }); + }, + + geocode: function(address, options) { + var goMap = this; + setTimeout(function() { + geocoder.geocode({'address': address.address}, function(results, status) { + if (status == google.maps.GeocoderStatus.OK && address.center) + goMap.map.setCenter(results[0].geometry.location); + + if (status == google.maps.GeocoderStatus.OK && options && options.markerId) + options.markerId.setPosition(results[0].geometry.location); + + else if (status == google.maps.GeocoderStatus.OK && options) { + if(goMap.lockGeocode) { + goMap.lockGeocode = false; + options.position = results[0].geometry.location; + options.geocode = true; + goMap.createMarker(options); + } + } + else if(status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) { + goMap.geocode(address, options); + } + }); + }, this.opts.delay); + }, + + geoMarker: function() { + if(this.geoMarkers.length > 0 && !this.lockGeocode) { + this.lockGeocode = true; + var current = this.geoMarkers.splice(0, 1); + this.geocode({address:current[0].address}, current[0]); + } + else if(this.lockGeocode) { + var goMap = this; + setTimeout(function() { + goMap.geoMarker(); + }, this.opts.delay); + } + }, + + setMap: function(options) { + delete options.mapTypeId; + + if (options.address) { + this.geocode({address: options.address, center: true}); + delete options.address; + } + else if (options.latitude && options.longitude) { + options.center = new google.maps.LatLng(options.latitude, options.longitude); + delete options.longitude; + delete options.latitude; + } + + if(options.mapTypeControlOptions && options.mapTypeControlOptions.position) + options.mapTypeControlOptions.position = google.maps.ControlPosition[options.mapTypeControlOptions.position.toUpperCase()]; + + if(options.mapTypeControlOptions && options.mapTypeControlOptions.style) + options.mapTypeControlOptions.style = google.maps.MapTypeControlStyle[options.mapTypeControlOptions.style.toUpperCase()]; + + if(options.navigationControlOptions && options.navigationControlOptions.position) + options.navigationControlOptions.position = google.maps.ControlPosition[options.navigationControlOptions.position.toUpperCase()]; + + if(options.navigationControlOptions && options.navigationControlOptions.style) + options.navigationControlOptions.style = google.maps.NavigationControlStyle[options.navigationControlOptions.style.toUpperCase()]; + + this.map.setOptions(options); + }, + + getMap: function() { + return this.map; + }, + + createListener: function(type, event, data) { + var target; + + if(typeof type != 'object') + type = {type:type}; + + if(type.type == 'map') + target = this.map; + else if(type.type == 'marker' && type.marker) + target = $(this.mapId).data(type.marker); + else if(type.type == 'info' && type.marker) + target = $(this.mapId).data(type.marker + 'info'); + + if(target) + return google.maps.event.addListener(target, event, data); + else if((type.type == 'marker' || type.type == 'info') && this.getMarkerCount() != this.getTmpMarkerCount()) + var goMap = this; + setTimeout(function() { + goMap.createListener(type, event, data); + }, this.opts.delay); + }, + + removeListener: function(listener) { + google.maps.event.removeListener(listener); + }, + + setInfoWindow: function(marker, html) { + var goMap = this; + html.content = goMap.opts.html_prepend + html.content + goMap.opts.html_append; + var infowindow = new google.maps.InfoWindow(html); + infowindow.show = false; + + $(goMap.mapId).data(marker.id + 'info',infowindow); + + if (html.popup) { + goMap.openWindow(infowindow, marker, html); + infowindow.show = true; + } + + google.maps.event.addListener(marker, 'click', function() { + if (infowindow.show && goMap.opts.hideByClick) { + infowindow.close(); + infowindow.show = false; + } + else { + goMap.openWindow(infowindow, marker, html); + infowindow.show = true; + } + }); + }, + + openWindow: function(infowindow, marker, html) { + if(this.opts.oneInfoWindow) + this.clearInfo(); + + if (html.ajax) { + infowindow.open(this.map, marker); + $.ajax({ + url: html.ajax, + success: function(html) { + infowindow.setContent(html); + } + }); + } + else if (html.id) { + infowindow.setContent($(html.id).html()); + infowindow.open(this.map, marker); + } + else + infowindow.open(this.map, marker); + }, + + setInfo: function(id, text) { + var info = $(this.mapId).data(id + 'info'); + + if(typeof text == 'object') + info.setOptions(text); + else + info.setContent(text); + }, + + getInfo: function(id, hideDiv) { + var info = $(this.mapId).data(id + 'info').getContent(); + if(hideDiv) + return $(info).html(); + else + return info; + }, + + clearInfo: function() { + for (var i = 0, l = this.markers.length; i < l; i++) { + var info = $(this.mapId).data(this.markers[i] + 'info'); + if(info) { + info.close(); + info.show = false; + } + } + }, + + fitBounds: function(type, markers) { + var goMap = this; + if(this.getMarkerCount() != this.getTmpMarkerCount()) + setTimeout(function() { + goMap.fitBounds(type, markers); + }, this.opts.delay); + else { + this.bounds = new google.maps.LatLngBounds(); + + if(!type || (type && type == 'all')) { + for (var i = 0, l = this.markers.length; i < l; i++) { + this.bounds.extend($(this.mapId).data(this.markers[i]).position); + } + } + else if (type && type == 'visible') { + for (var i = 0, l = this.markers.length; i < l; i++) { + if(this.getVisibleMarker(this.markers[i])) + this.bounds.extend($(this.mapId).data(this.markers[i]).position); + } + + } + else if (type && type == 'markers' && $.isArray(markers)) { + for (var i = 0, l = markers.length; i < l; i++) { + this.bounds.extend($(this.mapId).data(markers[i]).position); + } + } + this.map.fitBounds(this.bounds); + } + }, + + getBounds: function() { + return this.map.getBounds(); + }, + + createPolyline: function(poly) { + poly.type = 'polyline'; + return this.createOverlay(poly); + }, + + createPolygon: function(poly) { + poly.type = 'polygon'; + return this.createOverlay(poly); + }, + + createCircle: function(poly) { + poly.type = 'circle'; + return this.createOverlay(poly); + }, + + createRectangle: function(poly) { + poly.type = 'rectangle'; + return this.createOverlay(poly); + }, + + createOverlay: function(poly) { + var overlay = []; + if (!poly.id) { + this.count++; + poly.id = this.opts.polyId + this.count; + } + switch(poly.type) { + case 'polyline': + if (poly.coords.length > 0) { + for (var j = 0, l = poly.coords.length; j < l; j++) + overlay.push(new google.maps.LatLng(poly.coords[j].latitude, poly.coords[j].longitude)); + + overlay = new google.maps.Polyline({ + map: this.map, + path: overlay, + strokeColor: poly.color ? poly.color : this.opts.polyline.color, + strokeOpacity: poly.opacity ? poly.opacity : this.opts.polyline.opacity, + strokeWeight: poly.weight ? poly.weight : this.opts.polyline.weight + }); + } + else + return false; + break; + case 'polygon': + if (poly.coords.length > 0) { + for (var j = 0, l = poly.coords.length; j < l; j++) + overlay.push(new google.maps.LatLng(poly.coords[j].latitude, poly.coords[j].longitude)); + + overlay = new google.maps.Polygon({ + map: this.map, + path: overlay, + strokeColor: poly.color ? poly.color : this.opts.polygon.color, + strokeOpacity: poly.opacity ? poly.opacity : this.opts.polygon.opacity, + strokeWeight: poly.weight ? poly.weight : this.opts.polygon.weight, + fillColor: poly.fillColor ? poly.fillColor : this.opts.polygon.fillColor, + fillOpacity: poly.fillOpacity ? poly.fillOpacity : this.opts.polygon.fillOpacity + }); + } + else + return false; + break; + case 'circle': + overlay = new google.maps.Circle({ + map: this.map, + center: new google.maps.LatLng(poly.latitude, poly.longitude), + radius: poly.radius, + strokeColor: poly.color ? poly.color : this.opts.circle.color, + strokeOpacity: poly.opacity ? poly.opacity : this.opts.circle.opacity, + strokeWeight: poly.weight ? poly.weight : this.opts.circle.weight, + fillColor: poly.fillColor ? poly.fillColor : this.opts.circle.fillColor, + fillOpacity: poly.fillOpacity ? poly.fillOpacity : this.opts.circle.fillOpacity + }); + break; + case 'rectangle': + overlay = new google.maps.Rectangle({ + map: this.map, + bounds: new google.maps.LatLngBounds(new google.maps.LatLng(poly.sw.latitude, poly.sw.longitude), new google.maps.LatLng(poly.ne.latitude, poly.ne.longitude)), + strokeColor: poly.color ? poly.color : this.opts.circle.color, + strokeOpacity: poly.opacity ? poly.opacity : this.opts.circle.opacity, + strokeWeight: poly.weight ? poly.weight : this.opts.circle.weight, + fillColor: poly.fillColor ? poly.fillColor : this.opts.circle.fillColor, + fillOpacity: poly.fillOpacity ? poly.fillOpacity : this.opts.circle.fillOpacity + }); + break; + default: + return false; + break; + } + this.addOverlay(poly, overlay); + return overlay; + }, + + addOverlay: function(poly, overlay) { + $(this[this.overlays[poly.type].id]).data(poly.id, overlay); + this[this.overlays[poly.type].array].push(poly.id); + }, + + setOverlay: function(type, overlay, options) { + overlay = $(this[this.overlays[type].id]).data(overlay); + + if (options.coords && options.coords.length > 0) { + var array = []; + for (var j = 0, l = options.coords.length; j < l; j++) + array.push(new google.maps.LatLng(options.coords[j].latitude, options.coords[j].longitude)); + + options.path = array; + delete options.coords; + } + else if (options.ne && options.sw) { + options.bounds = new google.maps.LatLngBounds(new google.maps.LatLng(options.sw.latitude, options.sw.longitude), new google.maps.LatLng(options.ne.latitude, options.ne.longitude)); + delete options.ne; + delete options.sw; + } + else if (options.latitude && options.longitude) { + + options.center = new google.maps.LatLng(options.latitude, options.longitude); + delete options.latitude; + delete options.longitude; + } + overlay.setOptions(options); + }, + + showHideOverlay: function(type, overlay, display) { + if(typeof display === 'undefined') { + if(this.getVisibleOverlay(type, overlay)) + display = false; + else + display = true; + } + + if(display) + $(this[this.overlays[type].id]).data(overlay).setMap(this.map); + else + $(this[this.overlays[type].id]).data(overlay).setMap(null); + }, + + getVisibleOverlay: function(type, overlay) { + if($(this[this.overlays[type].id]).data(overlay).getMap()) + return true; + else + return false; + }, + + getOverlaysCount: function(type) { + return this[this.overlays[type].array].length; + }, + + removeOverlay: function(type, overlay) { + var index = $.inArray(overlay, this[this.overlays[type].array]), current; + if (index > -1) { + current = this[this.overlays[type].array].splice(index, 1); + var markerId = current[0]; + $(this[this.overlays[type].id]).data(markerId).setMap(null); + $(this[this.overlays[type].id]).removeData(markerId); + + return true; + } + return false; + }, + + clearOverlays: function(type) { + for (var i = 0, l = this[this.overlays[type].array].length; i < l; i++) { + var markerId = this[this.overlays[type].array][i]; + $(this[this.overlays[type].id]).data(markerId).setMap(null); + $(this[this.overlays[type].id]).removeData(markerId); + } + this[this.overlays[type].array] = []; + }, + + showHideMarker: function(marker, display) { + if(typeof display === 'undefined') { + if(this.getVisibleMarker(marker)) { + $(this.mapId).data(marker).setVisible(false); + var info = $(this.mapId).data(marker + 'info'); + if(info && info.show) { + info.close(); + info.show = false; + } + } + else + $(this.mapId).data(marker).setVisible(true); + } + else + $(this.mapId).data(marker).setVisible(display); + }, + + showHideMarkerByGroup: function(group, display) { + for (var i = 0, l = this.markers.length; i < l; i++) { + var markerId = this.markers[i]; + var marker = $(this.mapId).data(markerId); + if(marker.group == group) { + if(typeof display === 'undefined') { + if(this.getVisibleMarker(markerId)) { + marker.setVisible(false); + var info = $(this.mapId).data(markerId + 'info'); + if(info && info.show) { + info.close(); + info.show = false; + } + } + else + marker.setVisible(true); + } + else + marker.setVisible(display); + } + } + }, + + getVisibleMarker: function(marker) { + return $(this.mapId).data(marker).getVisible(); + }, + + getMarkerCount: function() { + return this.markers.length; + }, + + getTmpMarkerCount: function() { + return this.tmpMarkers.length; + }, + + getVisibleMarkerCount: function() { + return this.getMarkers('visiblesInMap').length; + }, + + getMarkerByGroupCount: function(group) { + return this.getMarkers('group', group).length; + }, + + getMarkers: function(type, name) { + var array = []; + switch(type) { + case "json": + for (var i = 0, l = this.markers.length; i < l; i++) { + var temp = "'" + i + "': '" + $(this.mapId).data(this.markers[i]).getPosition().toUrlValue() + "'"; + array.push(temp); + } + array = "{'markers':{" + array.join(",") + "}}"; + break; + case "data": + for (var i = 0, l = this.markers.length; i < l; i++) { + var temp = "marker[" + i + "]=" + $(this.mapId).data(this.markers[i]).getPosition().toUrlValue(); + array.push(temp); + } + array = array.join("&"); + break; + case "visiblesInBounds": + for (var i = 0, l = this.markers.length; i < l; i++) { + if (this.isVisible($(this.mapId).data(this.markers[i]).getPosition())) + array.push(this.markers[i]); + } + break; + case "visiblesInMap": + for (var i = 0, l = this.markers.length; i < l; i++) { + if(this.getVisibleMarker(this.markers[i])) + array.push(this.markers[i]); + } + break; + case "group": + if(name) + for (var i = 0, l = this.markers.length; i < l; i++) { + if($(this.mapId).data(this.markers[i]).group == name) + array.push(this.markers[i]); + } + break; + case "markers": + for (var i = 0, l = this.markers.length; i < l; i++) { + var temp = $(this.mapId).data(this.markers[i]); + array.push(temp); + } + break; + default: + for (var i = 0, l = this.markers.length; i < l; i++) { + var temp = $(this.mapId).data(this.markers[i]).getPosition().toUrlValue(); + array.push(temp); + } + break; + } + return array; + }, + + getVisibleMarkers: function() { + return this.getMarkers('visiblesInBounds'); + }, + + createMarker: function(marker) { + if (!marker.geocode) { + this.count++; + if (!marker.id) + marker.id = this.opts.prefixId + this.count; + this.tmpMarkers.push(marker.id); + } + if (marker.address && !marker.geocode) { + this.geoMarkers.push(marker); + this.geoMarker(); + } + else if (marker.latitude && marker.longitude || marker.position) { + var options = { map:this.map }; + options.id = marker.id; + options.group = marker.group ? marker.group : this.opts.groupId; + options.zIndex = marker.zIndex ? marker.zIndex : 0; + options.zIndexOrg = marker.zIndexOrg ? marker.zIndexOrg : 0; + + if (marker.visible == false) + options.visible = marker.visible; + + if (marker.title) + options.title = marker.title; + + if (marker.draggable) + options.draggable = marker.draggable; + + if (marker.icon && marker.icon.image) { + options.icon = marker.icon.image; + if (marker.icon.shadow) + options.shadow = marker.icon.shadow; + } + else if (marker.icon) + options.icon = marker.icon; + + else if (this.opts.icon && this.opts.icon.image) { + options.icon = this.opts.icon.image; + if (this.opts.icon.shadow) + options.shadow = this.opts.icon.shadow; + } + else if (this.opts.icon) + options.icon = this.opts.icon; + + options.position = marker.position ? marker.position : new google.maps.LatLng(marker.latitude, marker.longitude); + + var cmarker = new google.maps.Marker(options); + + if (marker.html) { + if (!marker.html.content && !marker.html.ajax && !marker.html.id) + marker.html = { content:marker.html }; + else if (!marker.html.content) + marker.html.content = null; + + this.setInfoWindow(cmarker, marker.html); + } + this.addMarker(cmarker); + return cmarker; + } + }, + + addMarker: function(marker) { + $(this.mapId).data(marker.id, marker); + this.markers.push(marker.id); + }, + + setMarker: function(marker, options) { + var tmarker = $(this.mapId).data(marker); + + delete options.id; + delete options.visible; + + if(options.icon) { + var toption = options.icon; + delete options.icon; + + if(toption && toption == 'default') { + if (this.opts.icon && this.opts.icon.image) { + options.icon = this.opts.icon.image; + if (this.opts.icon.shadow) + options.shadow = this.opts.icon.shadow; + } + else if (this.opts.icon) + options.icon = this.opts.icon; + } + else if(toption && toption.image) { + options.icon = toption.image; + if (toption.shadow) + options.shadow = toption.shadow; + } + else if (toption) + options.icon = toption; + } + + if (options.address) { + this.geocode({address: options.address}, {markerId:tmarker}); + delete options.address; + delete options.latitude; + delete options.longitude; + delete options.position; + } + else if (options.latitude && options.longitude || options.position) { + if (!options.position) + options.position = new google.maps.LatLng(options.latitude, options.longitude); + } + tmarker.setOptions(options); + }, + + removeMarker: function(marker) { + var index = $.inArray(marker, this.markers), current; + if (index > -1) { + this.tmpMarkers.splice(index,1); + current = this.markers.splice(index,1); + var markerId = current[0]; + var marker = $(this.mapId).data(markerId); + var info = $(this.mapId).data(markerId + 'info'); + + marker.setVisible(false); + marker.setMap(null); + $(this.mapId).removeData(markerId); + + if(info) { + info.close(); + info.show = false; + $(this.mapId).removeData(markerId + 'info'); + } + return true; + } + return false; + }, + + clearMarkers: function() { + for (var i = 0, l = this.markers.length; i < l; i++) { + var markerId = this.markers[i]; + var marker = $(this.mapId).data(markerId); + var info = $(this.mapId).data(markerId + 'info'); + + marker.setVisible(false); + marker.setMap(null); + $(this.mapId).removeData(markerId); + + if(info) { + info.close(); + info.show = false; + $(this.mapId).removeData(markerId + 'info'); + } + } + this.singleMarker = false; + this.lockGeocode = false; + this.markers = []; + this.tmpMarkers = []; + this.geoMarkers = []; + }, + + isVisible: function(latlng) { + return this.map.getBounds().contains(latlng); + } + } +})(jQuery); \ No newline at end of file diff --git a/src/wp-content/themes/avada/js/jquery.carouFredSel-6.2.1-min.js b/src/wp-content/themes/avada/js/jquery.carouFredSel-6.2.1-min.js new file mode 100644 index 0000000..7d84bed --- /dev/null +++ b/src/wp-content/themes/avada/js/jquery.carouFredSel-6.2.1-min.js @@ -0,0 +1,13 @@ +/* + * jQuery carouFredSel 6.2.1 + * Demo's and documentation: + * caroufredsel.dev7studios.com + * + * Copyright (c) 2013 Fred Heusschen + * www.frebsite.nl + * + * Dual licensed under the MIT and GPL licenses. + * http://en.wikipedia.org/wiki/MIT_License + * http://en.wikipedia.org/wiki/GNU_General_Public_License + */(function($){function sc_setScroll(e,t,n){n.transition=="transition"&&t=="swing"&&(t="ease");return{anims:[],duration:e,orgDuration:e,easing:t,startTime:getTime()}}function sc_startScroll(e,t){for(var n=0,r=e.anims.length;nt){debug(n,"Not enough items ("+t+" total, "+r+" needed): Hiding navigation.");var i="hide"}else var i="show";var s=i=="show"?"removeClass":"addClass",o=cf_c("hidden",n);e.auto.button&&e.auto.button[i]()[s](o);e.prev.button&&e.prev.button[i]()[s](o);e.next.button&&e.next.button[i]()[s](o);e.pagination.container&&e.pagination.container[i]()[s](o)}function nv_enableNavi(e,t,n){if(e.circular||e.infinite)return;var r=t=="removeClass"||t=="addClass"?t:!1,i=cf_c("disabled",n);e.auto.button&&r&&e.auto.button[r](i);if(e.prev.button){var s=r||t==0?"addClass":"removeClass";e.prev.button[s](i)}if(e.next.button){var s=r||t==e.items.visible?"addClass":"removeClass";e.next.button[s](i)}}function go_getObject(e,t){is_function(t)?t=t.call(e):is_undefined(t)&&(t={});return t}function go_getItemsObject(e,t){t=go_getObject(e,t);is_number(t)?t={visible:t}:t=="variable"?t={visible:t,width:t,height:t}:is_object(t)||(t={});return t}function go_getScrollObject(e,t){t=go_getObject(e,t);is_number(t)?t<=50?t={items:t}:t={duration:t}:is_string(t)?t={easing:t}:is_object(t)||(t={});return t}function go_getNaviObject(e,t){t=go_getObject(e,t);if(is_string(t)){var n=cf_getKeyCode(t);n==-1?t=$(t):t=n}return t}function go_getAutoObject(e,t){t=go_getNaviObject(e,t);is_jquery(t)?t={button:t}:is_boolean(t)?t={play:t}:is_number(t)&&(t={timeoutDuration:t});t.progress&&(is_string(t.progress)||is_jquery(t.progress))&&(t.progress={bar:t.progress});return t}function go_complementAutoObject(e,t){is_function(t.button)&&(t.button=t.button.call(e));is_string(t.button)&&(t.button=$(t.button));is_boolean(t.play)||(t.play=!0);is_number(t.delay)||(t.delay=0);is_undefined(t.pauseOnEvent)&&(t.pauseOnEvent=!0);is_boolean(t.pauseOnResize)||(t.pauseOnResize=!0);is_number(t.timeoutDuration)||(t.timeoutDuration=t.duration<10?2500:t.duration*5);if(t.progress){is_function(t.progress.bar)&&(t.progress.bar=t.progress.bar.call(e));is_string(t.progress.bar)&&(t.progress.bar=$(t.progress.bar));if(t.progress.bar){is_function(t.progress.updater)||(t.progress.updater=$.fn.carouFredSel.progressbarUpdater);is_number(t.progress.interval)||(t.progress.interval=50)}else t.progress=!1}return t}function go_getPrevNextObject(e,t){t=go_getNaviObject(e,t);is_jquery(t)?t={button:t}:is_number(t)&&(t={key:t});return t}function go_complementPrevNextObject(e,t){is_function(t.button)&&(t.button=t.button.call(e));is_string(t.button)&&(t.button=$(t.button));is_string(t.key)&&(t.key=cf_getKeyCode(t.key));return t}function go_getPaginationObject(e,t){t=go_getNaviObject(e,t);is_jquery(t)?t={container:t}:is_boolean(t)&&(t={keys:t});return t}function go_complementPaginationObject(e,t){is_function(t.container)&&(t.container=t.container.call(e));is_string(t.container)&&(t.container=$(t.container));is_number(t.items)||(t.items=!1);is_boolean(t.keys)||(t.keys=!1);!is_function(t.anchorBuilder)&&!is_false(t.anchorBuilder)&&(t.anchorBuilder=$.fn.carouFredSel.pageAnchorBuilder);is_number(t.deviation)||(t.deviation=0);return t}function go_getSwipeObject(e,t){is_function(t)&&(t=t.call(e));is_undefined(t)&&(t={onTouch:!1});is_true(t)?t={onTouch:t}:is_number(t)&&(t={items:t});return t}function go_complementSwipeObject(e,t){is_boolean(t.onTouch)||(t.onTouch=!0);is_boolean(t.onMouse)||(t.onMouse=!1);is_object(t.options)||(t.options={});is_boolean(t.options.triggerOnTouchEnd)||(t.options.triggerOnTouchEnd=!1);return t}function go_getMousewheelObject(e,t){is_function(t)&&(t=t.call(e));is_true(t)?t={}:is_number(t)?t={items:t}:is_undefined(t)&&(t=!1);return t}function go_complementMousewheelObject(e,t){return t}function gn_getItemIndex(e,t,n,r,i){is_string(e)&&(e=$(e,i));is_object(e)&&(e=$(e,i));if(is_jquery(e)){e=i.children().index(e);is_boolean(n)||(n=!1)}else is_boolean(n)||(n=!0);is_number(e)||(e=0);is_number(t)||(t=0);n&&(e+=r.first);e+=t;if(r.total>0){while(e>=r.total)e-=r.total;while(e<0)e+=r.total}return e}function gn_getVisibleItemsPrev(e,t,n){var r=0,i=0;for(var s=n;s>=0;s--){var o=e.eq(s);r+=o.is(":visible")?o[t.d.outerWidth](!0):0;if(r>t.maxDimension)return i;s==0&&(s=e.length);i++}}function gn_getVisibleItemsPrevFilter(e,t,n){return gn_getItemsPrevFilter(e,t.items.filter,t.items.visibleConf.org,n)}function gn_getScrollItemsPrevFilter(e,t,n,r){return gn_getItemsPrevFilter(e,t.items.filter,r,n)}function gn_getItemsPrevFilter(e,t,n,r){var i=0,s=0;for(var o=r,u=e.length;o>=0;o--){s++;if(s==u)return s;var a=e.eq(o);if(a.is(t)){i++;if(i==n)return s}o==0&&(o=u)}}function gn_getVisibleOrg(e,t){return t.items.visibleConf.org||e.children().slice(0,t.items.visible).filter(t.items.filter).length}function gn_getVisibleItemsNext(e,t,n){var r=0,i=0;for(var s=n,o=e.length-1;s<=o;s++){var u=e.eq(s);r+=u.is(":visible")?u[t.d.outerWidth](!0):0;if(r>t.maxDimension)return i;i++;if(i==o+1)return i;s==o&&(s=-1)}}function gn_getVisibleItemsNextTestCircular(e,t,n,r){var i=gn_getVisibleItemsNext(e,t,n);t.circular||n+i>r&&(i=r-n);return i}function gn_getVisibleItemsNextFilter(e,t,n){return gn_getItemsNextFilter(e,t.items.filter,t.items.visibleConf.org,n,t.circular)}function gn_getScrollItemsNextFilter(e,t,n,r){return gn_getItemsNextFilter(e,t.items.filter,r+1,n,t.circular)-1}function gn_getItemsNextFilter(e,t,n,r,i){var s=0,o=0;for(var u=r,a=e.length-1;u<=a;u++){o++;if(o>=a)return o;var f=e.eq(u);if(f.is(t)){s++;if(s==n)return o}u==a&&(u=-1)}}function gi_getCurrentItems(e,t){return e.slice(0,t.items.visible)}function gi_getOldItemsPrev(e,t,n){return e.slice(n,t.items.visibleConf.old+n)}function gi_getNewItemsPrev(e,t){return e.slice(0,t.items.visible)}function gi_getOldItemsNext(e,t){return e.slice(0,t.items.visibleConf.old)}function gi_getNewItemsNext(e,t,n){return e.slice(n,t.items.visible+n)}function sz_storeMargin(e,t,n){if(t.usePadding){is_string(n)||(n="_cfs_origCssMargin");e.each(function(){var e=$(this),r=parseInt(e.css(t.d.marginRight),10);is_number(r)||(r=0);e.data(n,r)})}}function sz_resetMargin(e,t,n){if(t.usePadding){var r=is_boolean(n)?n:!1;is_number(n)||(n=0);sz_storeMargin(e,t,"_cfs_tempCssMargin");e.each(function(){var e=$(this);e.css(t.d.marginRight,r?e.data("_cfs_tempCssMargin"):n+e.data("_cfs_origCssMargin"))})}}function sz_storeOrigCss(e){e.each(function(){var e=$(this);e.data("_cfs_origCss",e.attr("style")||"")})}function sz_restoreOrigCss(e){e.each(function(){var e=$(this);e.attr("style",e.data("_cfs_origCss")||"")})}function sz_setResponsiveSizes(e,t){var n=e.items.visible,r=e.items[e.d.width],i=e[e.d.height],s=is_percentage(i);t.each(function(){var t=$(this),n=r-ms_getPaddingBorderMargin(t,e,"Width");t[e.d.width](n);s&&t[e.d.height](ms_getPercentage(n,i))})}function sz_setSizes(e,t){var n=e.parent(),r=e.children(),i=gi_getCurrentItems(r,t),s=cf_mapWrapperSizes(ms_getSizes(i,t,!0),t,!1);n.css(s);if(t.usePadding){var o=t.padding,u=o[t.d[1]];t.align&&u<0&&(u=0);var a=i.last();a.css(t.d.marginRight,a.data("_cfs_origCssMargin")+u);e.css(t.d.top,o[t.d[0]]);e.css(t.d.left,o[t.d[3]])}e.css(t.d.width,s[t.d.width]+ms_getTotalSize(r,t,"width")*2);e.css(t.d.height,ms_getLargestSize(r,t,"height"));return s}function ms_getSizes(e,t,n){return[ms_getTotalSize(e,t,"width",n),ms_getLargestSize(e,t,"height",n)]}function ms_getLargestSize(e,t,n,r){is_boolean(r)||(r=!1);if(is_number(t[t.d[n]])&&r)return t[t.d[n]];if(is_number(t.items[t.d[n]]))return t.items[t.d[n]];n=n.toLowerCase().indexOf("width")>-1?"outerWidth":"outerHeight";return ms_getTrueLargestSize(e,t,n)}function ms_getTrueLargestSize(e,t,n){var r=0;for(var i=0,s=e.length;i-1?"outerWidth":"outerHeight",s=0;for(var o=0,u=e.length;o-1&&is_undefined(n[s])){n[s]=e[r];break}return n}function cf_getPadding(e){if(is_undefined(e))return[0,0,0,0];if(is_number(e))return[e,e,e,e];is_string(e)&&(e=e.split("px").join("").split("em").join("").split(" "));if(!is_array(e))return[0,0,0,0];for(var t=0;t<4;t++)e[t]=parseInt(e[t],10);switch(e.length){case 0:return[0,0,0,0];case 1:return[e[0],e[0],e[0],e[0]];case 2:return[e[0],e[1],e[0],e[1]];case 3:return[e[0],e[1],e[2],e[1]];default:return[e[0],e[1],e[2],e[3]]}}function cf_getAlignPadding(e,t){var n=is_number(t[t.d.width])?Math.ceil(t[t.d.width]-ms_getTotalSize(e,t,"width")):0;switch(t.align){case"left":return[0,n];case"right":return[n,0];case"center":default:return[Math.ceil(n/2),Math.floor(n/2)]}}function cf_getDimensions(e){var t=[["width","innerWidth","outerWidth","height","innerHeight","outerHeight","left","top","marginRight",0,1,2,3],["height","innerHeight","outerHeight","width","innerWidth","outerWidth","top","left","marginBottom",3,2,1,0]],n=t[0].length,r=e.direction=="right"||e.direction=="left"?0:1,i={};for(var s=0;ss.length)var u=!0,a=o[0],f=o[1];else var u=!1,a=s[0],f=s[1];switch(a){case"even":i=e%2==1?e-1:e;break;case"odd":i=e%2==0?e-1:e;break;default:i=e}f=parseInt(f,10);if(is_number(f)){u&&(f=-f);i+=f}}if(!is_number(i)||i<1)i=1;return i}function cf_getItemsAdjust(e,t,n,r){return cf_getItemAdjustMinMax(cf_getAdjust(e,t,n,r),t.items.visibleConf)}function cf_getItemAdjustMinMax(e,t){is_number(t.min)&&et.max&&(e=t.max);e<1&&(e=1);return e}function cf_getSynchArr(e){is_array(e)||(e=[[e]]);is_array(e[0])||(e=[e]);for(var t=0,n=e.length;t0?":visible":"*");if(!e[t.d.width])if(t.responsive){debug(!0,"Set a "+t.d.width+" for the items!");e[t.d.width]=ms_getTrueLargestSize(n,t,"outerWidth")}else e[t.d.width]=ms_hasVariableSizes(n,t,"outerWidth")?"variable":n[t.d.outerWidth](!0);e[t.d.height]||(e[t.d.height]=ms_hasVariableSizes(n,t,"outerHeight")?"variable":n[t.d.outerHeight](!0));e.sizesConf.width=e.width;e.sizesConf.height=e.height;return e}function in_complementVisibleItems(e,t){e.items[e.d["width"]]=="variable"&&(e.items.visibleConf.variable=!0);if(!e.items.visibleConf.variable){if(is_number(e[e.d.width]))e.items.visible=Math.floor(e[e.d.width]/e.items[e.d.width]);else{e.items.visible=Math.floor(t/e.items[e.d.width]);e[e.d.width]=e.items.visible*e.items[e.d.width];e.items.visibleConf.adjust||(e.align=!1)}if(e.items.visible=="Infinity"||e.items.visible<1){debug(!0,'Not a valid number of visible items: Set to "variable".');e.items.visibleConf.variable=!0}}return e}function in_complementPrimarySize(e,t,n){e=="auto"&&(e=ms_getTrueLargestSize(n,t,"outerWidth"));return e}function in_complementSecondarySize(e,t,n){e=="auto"&&(e=ms_getTrueLargestSize(n,t,"outerHeight"));e||(e=t.items[t.d.height]);return e}function in_getAlignPadding(e,t){var n=cf_getAlignPadding(gi_getCurrentItems(t,e),e);e.padding[e.d[1]]=n[1];e.padding[e.d[3]]=n[0];return e}function in_getResponsiveValues(e,t,n){var r=cf_getItemAdjustMinMax(Math.ceil(e[e.d.width]/e.items[e.d.width]),e.items.visibleConf);r>t.length&&(r=t.length);var i=Math.floor(e[e.d.width]/r);e.items.visible=r;e.items[e.d.width]=i;e[e.d.width]=r*i;return e}function bt_pauseOnHoverConfig(e){if(is_string(e))var t=e.indexOf("immediate")>-1?!0:!1,n=e.indexOf("resume")>-1?!0:!1;else var t=n=!1;return[t,n]}function bt_mousesheelNumber(e){return is_number(e)?e:null}function is_null(e){return e===null}function is_undefined(e){return is_null(e)||typeof e=="undefined"||e===""||e==="undefined"}function is_array(e){return e instanceof Array}function is_jquery(e){return e instanceof jQuery}function is_object(e){return(e instanceof Object||typeof e=="object")&&!is_null(e)&&!is_jquery(e)&&!is_array(e)&&!is_function(e)}function is_number(e){return(e instanceof Number||typeof e=="number")&&!isNaN(e)}function is_string(e){return(e instanceof String||typeof e=="string")&&!is_undefined(e)&&!is_true(e)&&!is_false(e)}function is_function(e){return e instanceof Function||typeof e=="function"}function is_boolean(e){return e instanceof Boolean||typeof e=="boolean"||is_true(e)||is_false(e)}function is_true(e){return e===!0||e==="true"}function is_false(e){return e===!1||e==="false"}function is_percentage(e){return is_string(e)&&e.slice(-1)=="%"}function getTime(){return(new Date).getTime()}function deprecated(e,t){debug(!0,e+" is DEPRECATED, support for it will be removed. Use "+t+" instead.")}function debug(e,t){if(!is_undefined(window.console)&&!is_undefined(window.console.log)){if(is_object(e)){var n=" ("+e.selector+")";e=e.debug}else var n="";if(!e)return!1;is_string(t)?t="carouFredSel"+n+": "+t:t=["carouFredSel"+n+":",t];window.console.log(t)}return!1}if($.fn.carouFredSel)return;$.fn.caroufredsel=$.fn.carouFredSel=function(options,configs){if(this.length==0){debug(!0,'No element found for "'+this.selector+'".');return this}if(this.length>1)return this.each(function(){$(this).carouFredSel(options,configs)});var $cfs=this,$tt0=this[0],starting_position=!1;if($cfs.data("_cfs_isCarousel")){starting_position=$cfs.triggerHandler("_cfs_triggerEvent","currentPosition");$cfs.trigger("_cfs_triggerEvent",["destroy",!0])}var FN={};FN._init=function(e,t,n){e=go_getObject($tt0,e);e.items=go_getItemsObject($tt0,e.items);e.scroll=go_getScrollObject($tt0,e.scroll);e.auto=go_getAutoObject($tt0,e.auto);e.prev=go_getPrevNextObject($tt0,e.prev);e.next=go_getPrevNextObject($tt0,e.next);e.pagination=go_getPaginationObject($tt0,e.pagination);e.swipe=go_getSwipeObject($tt0,e.swipe);e.mousewheel=go_getMousewheelObject($tt0,e.mousewheel);t&&(opts_orig=$.extend(!0,{},$.fn.carouFredSel.defaults,e));opts=$.extend(!0,{},$.fn.carouFredSel.defaults,e);opts.d=cf_getDimensions(opts);crsl.direction=opts.direction=="up"||opts.direction=="left"?"next":"prev";var r=$cfs.children(),i=ms_getParentSize($wrp,opts,"width");is_true(opts.cookie)&&(opts.cookie="caroufredsel_cookie_"+conf.serialNumber);opts.maxDimension=ms_getMaxDimension(opts,i);opts.items=in_complementItems(opts.items,opts,r,n);opts[opts.d.width]=in_complementPrimarySize(opts[opts.d.width],opts,r);opts[opts.d.height]=in_complementSecondarySize(opts[opts.d.height],opts,r);opts.responsive&&(is_percentage(opts[opts.d.width])||(opts[opts.d.width]="100%"));if(is_percentage(opts[opts.d.width])){crsl.upDateOnWindowResize=!0;crsl.primarySizePercentage=opts[opts.d.width];opts[opts.d.width]=ms_getPercentage(i,crsl.primarySizePercentage);opts.items.visible||(opts.items.visibleConf.variable=!0)}if(opts.responsive){opts.usePadding=!1;opts.padding=[0,0,0,0];opts.align=!1;opts.items.visibleConf.variable=!1}else{opts.items.visible||(opts=in_complementVisibleItems(opts,i));if(!opts[opts.d.width])if(!opts.items.visibleConf.variable&&is_number(opts.items[opts.d.width])&&opts.items.filter=="*"){opts[opts.d.width]=opts.items.visible*opts.items[opts.d.width];opts.align=!1}else opts[opts.d.width]="variable";is_undefined(opts.align)&&(opts.align=is_number(opts[opts.d.width])?"center":!1);opts.items.visibleConf.variable&&(opts.items.visible=gn_getVisibleItemsNext(r,opts,0))}if(opts.items.filter!="*"&&!opts.items.visibleConf.variable){opts.items.visibleConf.org=opts.items.visible;opts.items.visible=gn_getVisibleItemsNextFilter(r,opts,0)}opts.items.visible=cf_getItemsAdjust(opts.items.visible,opts,opts.items.visibleConf.adjust,$tt0);opts.items.visibleConf.old=opts.items.visible;if(opts.responsive){opts.items.visibleConf.min||(opts.items.visibleConf.min=opts.items.visible);opts.items.visibleConf.max||(opts.items.visibleConf.max=opts.items.visible);opts=in_getResponsiveValues(opts,r,i)}else{opts.padding=cf_getPadding(opts.padding);opts.align=="top"?opts.align="left":opts.align=="bottom"&&(opts.align="right");switch(opts.align){case"center":case"left":case"right":if(opts[opts.d["width"]]!="variable"){opts=in_getAlignPadding(opts,r);opts.usePadding=!0}break;default:opts.align=!1;opts.usePadding=opts.padding[0]==0&&opts.padding[1]==0&&opts.padding[2]==0&&opts.padding[3]==0?!1:!0}}is_number(opts.scroll.duration)||(opts.scroll.duration=500);is_undefined(opts.scroll.items)&&(opts.scroll.items=opts.responsive||opts.items.visibleConf.variable||opts.items.filter!="*"?"visible":opts.items.visible);opts.auto=$.extend(!0,{},opts.scroll,opts.auto);opts.prev=$.extend(!0,{},opts.scroll,opts.prev);opts.next=$.extend(!0,{},opts.scroll,opts.next);opts.pagination=$.extend(!0,{},opts.scroll,opts.pagination);opts.auto=go_complementAutoObject($tt0,opts.auto);opts.prev=go_complementPrevNextObject($tt0,opts.prev);opts.next=go_complementPrevNextObject($tt0,opts.next);opts.pagination=go_complementPaginationObject($tt0,opts.pagination);opts.swipe=go_complementSwipeObject($tt0,opts.swipe);opts.mousewheel=go_complementMousewheelObject($tt0,opts.mousewheel);opts.synchronise&&(opts.synchronise=cf_getSynchArr(opts.synchronise));if(opts.auto.onPauseStart){opts.auto.onTimeoutStart=opts.auto.onPauseStart;deprecated("auto.onPauseStart","auto.onTimeoutStart")}if(opts.auto.onPausePause){opts.auto.onTimeoutPause=opts.auto.onPausePause;deprecated("auto.onPausePause","auto.onTimeoutPause")}if(opts.auto.onPauseEnd){opts.auto.onTimeoutEnd=opts.auto.onPauseEnd;deprecated("auto.onPauseEnd","auto.onTimeoutEnd")}if(opts.auto.pauseDuration){opts.auto.timeoutDuration=opts.auto.pauseDuration;deprecated("auto.pauseDuration","auto.timeoutDuration")}};FN._build=function(){$cfs.data("_cfs_isCarousel",!0);var e=$cfs.children(),t=in_mapCss($cfs,["textAlign","float","position","top","right","bottom","left","zIndex","width","height","marginTop","marginRight","marginBottom","marginLeft"]),n="relative";switch(t.position){case"absolute":case"fixed":n=t.position}conf.wrapper=="parent"?sz_storeOrigCss($wrp):$wrp.css(t);$wrp.css({overflow:"hidden",position:n});sz_storeOrigCss($cfs);$cfs.data("_cfs_origCssZindex",t.zIndex);$cfs.css({textAlign:"left","float":"none",position:"absolute",top:0,right:"auto",bottom:"auto",left:0,marginTop:0,marginRight:0,marginBottom:0,marginLeft:0});sz_storeMargin(e,opts);sz_storeOrigCss(e);opts.responsive&&sz_setResponsiveSizes(opts,e)};FN._bind_events=function(){FN._unbind_events();$cfs.bind(cf_e("stop",conf),function(e,t){e.stopPropagation();crsl.isStopped||opts.auto.button&&opts.auto.button.addClass(cf_c("stopped",conf));crsl.isStopped=!0;if(opts.auto.play){opts.auto.play=!1;$cfs.trigger(cf_e("pause",conf),t)}return!0});$cfs.bind(cf_e("finish",conf),function(e){e.stopPropagation();crsl.isScrolling&&sc_stopScroll(scrl);return!0});$cfs.bind(cf_e("pause",conf),function(e,t,n){e.stopPropagation();tmrs=sc_clearTimers(tmrs);if(t&&crsl.isScrolling){scrl.isStopped=!0;var r=getTime()-scrl.startTime;scrl.duration-=r;scrl.pre&&(scrl.pre.duration-=r);scrl.post&&(scrl.post.duration-=r);sc_stopScroll(scrl,!1)}!crsl.isPaused&&!crsl.isScrolling&&n&&(tmrs.timePassed+=getTime()-tmrs.startTime);crsl.isPaused||opts.auto.button&&opts.auto.button.addClass(cf_c("paused",conf));crsl.isPaused=!0;if(opts.auto.onTimeoutPause){var i=opts.auto.timeoutDuration-tmrs.timePassed,s=100-Math.ceil(i*100/opts.auto.timeoutDuration);opts.auto.onTimeoutPause.call($tt0,s,i)}return!0});$cfs.bind(cf_e("play",conf),function(e,t,n,r){e.stopPropagation();tmrs=sc_clearTimers(tmrs);var i=[t,n,r],s=["string","number","boolean"],o=cf_sortParams(i,s);t=o[0];n=o[1];r=o[2];t!="prev"&&t!="next"&&(t=crsl.direction);is_number(n)||(n=0);is_boolean(r)||(r=!1);if(r){crsl.isStopped=!1;opts.auto.play=!0}if(!opts.auto.play){e.stopImmediatePropagation();return debug(conf,"Carousel stopped: Not scrolling.")}if(crsl.isPaused&&opts.auto.button){opts.auto.button.removeClass(cf_c("stopped",conf));opts.auto.button.removeClass(cf_c("paused",conf))}crsl.isPaused=!1;tmrs.startTime=getTime();var u=opts.auto.timeoutDuration+n;dur2=u-tmrs.timePassed;perc=100-Math.ceil(dur2*100/u);opts.auto.progress&&(tmrs.progress=setInterval(function(){var e=getTime()-tmrs.startTime+tmrs.timePassed,t=Math.ceil(e*100/u);opts.auto.progress.updater.call(opts.auto.progress.bar[0],t)},opts.auto.progress.interval));tmrs.auto=setTimeout(function(){opts.auto.progress&&opts.auto.progress.updater.call(opts.auto.progress.bar[0],100);opts.auto.onTimeoutEnd&&opts.auto.onTimeoutEnd.call($tt0,perc,dur2);crsl.isScrolling?$cfs.trigger(cf_e("play",conf),t):$cfs.trigger(cf_e(t,conf),opts.auto)},dur2);opts.auto.onTimeoutStart&&opts.auto.onTimeoutStart.call($tt0,perc,dur2);return!0});$cfs.bind(cf_e("resume",conf),function(e){e.stopPropagation();if(scrl.isStopped){scrl.isStopped=!1;crsl.isPaused=!1;crsl.isScrolling=!0;scrl.startTime=getTime();sc_startScroll(scrl,conf)}else $cfs.trigger(cf_e("play",conf));return!0});$cfs.bind(cf_e("prev",conf)+" "+cf_e("next",conf),function(e,t,n,r,i){e.stopPropagation();if(crsl.isStopped||$cfs.is(":hidden")){e.stopImmediatePropagation();return debug(conf,"Carousel stopped or hidden: Not scrolling.")}var s=is_number(opts.items.minimum)?opts.items.minimum:opts.items.visible+1;if(s>itms.total){e.stopImmediatePropagation();return debug(conf,"Not enough items ("+itms.total+" total, "+s+" needed): Not scrolling.")}var o=[t,n,r,i],u=["object","number/string","function","boolean"],a=cf_sortParams(o,u);t=a[0];n=a[1];r=a[2];i=a[3];var f=e.type.slice(conf.events.prefix.length);is_object(t)||(t={});is_function(r)&&(t.onAfter=r);is_boolean(i)&&(t.queue=i);t=$.extend(!0,{},opts[f],t);if(t.conditions&&!t.conditions.call($tt0,f)){e.stopImmediatePropagation();return debug(conf,'Callback "conditions" returned false.')}if(!is_number(n)){if(opts.items.filter!="*")n="visible";else{var l=[n,t.items,opts[f].items];for(var a=0,c=l.length;a0&&crsl.isScrolling){if(t.queue){t.queue=="last"&&(queu=[]);(t.queue!="first"||queu.length==0)&&$cfs.trigger(cf_e("queue",conf),[f,[t,n,r]])}e.stopImmediatePropagation();return debug(conf,"Carousel currently scrolling.")}tmrs.timePassed=0;$cfs.trigger(cf_e("slide_"+f,conf),[t,n]);if(opts.synchronise){var h=opts.synchronise,p=[t,n];for(var d=0,c=h.length;d=itms.total)itms.first-=itms.total;if(!opts.circular){itms.first==0&&t.onEnd&&t.onEnd.call($tt0,"prev");opts.infinite||nv_enableNavi(opts,itms.first,conf)}$cfs.children().slice(itms.total-n,itms.total).prependTo($cfs);itms.total=0&&sz_resetMargin(f,opts,opts.padding[opts.d[1]]);c>=0&&sz_resetMargin(a,opts,opts.padding[opts.d[3]]);if(opts.align){opts.padding[opts.d[1]]=h;opts.padding[opts.d[3]]=c}k[opts.d.left]=-(b-d);L[opts.d.left]=-(E-d);x[opts.d.left]=w[opts.d.width];var O=function(){},M=function(){},_=function(){},D=function(){},P=function(){},H=function(){},B=function(){},j=function(){},F=function(){},I=function(){},q=function(){};switch(t.fx){case"crossfade":case"cover":case"cover-fade":case"uncover":case"uncover-fade":y=$cfs.clone(!0).appendTo($wrp)}switch(t.fx){case"crossfade":case"uncover":case"uncover-fade":y.children().slice(0,n).remove();y.children().slice(opts.items.visibleConf.old).remove();break;case"cover":case"cover-fade":y.children().slice(opts.items.visible).remove();y.css(L)}$cfs.css(k);scrl=sc_setScroll(A,t.easing,conf);S[opts.d.left]=opts.usePadding?opts.padding[opts.d[3]]:0;if(opts[opts.d["width"]]=="variable"||opts[opts.d["height"]]=="variable"){O=function(){$wrp.css(w)};M=function(){scrl.anims.push([$wrp,w])}}if(opts.usePadding){if(l.not(a).length){T[opts.d.marginRight]=a.data("_cfs_origCssMargin");if(c<0)a.css(T);else{B=function(){a.css(T)};j=function(){scrl.anims.push([a,T])}}}switch(t.fx){case"cover":case"cover-fade":y.children().eq(n-1).css(T)}if(l.not(f).length){N[opts.d.marginRight]=f.data("_cfs_origCssMargin");_=function(){f.css(N)};D=function(){scrl.anims.push([f,N])}}if(h>=0){C[opts.d.marginRight]=l.data("_cfs_origCssMargin")+opts.padding[opts.d[1]];P=function(){l.css(C)};H=function(){scrl.anims.push([l,C])}}}q=function(){$cfs.css(S)};var R=opts.items.visible+n-itms.total;I=function(){if(R>0){$cfs.children().slice(itms.total).remove();o=$($cfs.children().slice(itms.total-(opts.items.visible-R)).get().concat($cfs.children().slice(0,R).get()))}sc_showHiddenItems(v);if(opts.usePadding){var e=$cfs.children().eq(opts.items.visible+n-1);e.css(opts.d.marginRight,e.data("_cfs_origCssMargin"))}};var U=sc_mapCallbackArguments(o,m,u,n,"prev",A,w);F=function(){sc_afterScroll($cfs,y,t);crsl.isScrolling=!1;clbk.onAfter=sc_fireCallbacks($tt0,t,"onAfter",U,clbk);queu=sc_fireQueue($cfs,queu,conf);crsl.isPaused||$cfs.trigger(cf_e("play",conf))};crsl.isScrolling=!0;tmrs=sc_clearTimers(tmrs);clbk.onBefore=sc_fireCallbacks($tt0,t,"onBefore",U,clbk);switch(t.fx){case"none":$cfs.css(S);O();_();P();B();q();I();F();break;case"fade":scrl.anims.push([$cfs,{opacity:0},function(){O();_();P();B();q();I();scrl=sc_setScroll(A,t.easing,conf);scrl.anims.push([$cfs,{opacity:1},F]);sc_startScroll(scrl,conf)}]);break;case"crossfade":$cfs.css({opacity:0});scrl.anims.push([y,{opacity:0}]);scrl.anims.push([$cfs,{opacity:1},F]);M();_();P();B();q();I();break;case"cover":scrl.anims.push([y,S,function(){_();P();B();q();I();F()}]);M();break;case"cover-fade":scrl.anims.push([$cfs,{opacity:0}]);scrl.anims.push([y,S,function(){_();P();B();q();I();F()}]);M();break;case"uncover":scrl.anims.push([y,x,F]);M();_();P();B();q();I();break;case"uncover-fade":$cfs.css({opacity:0});scrl.anims.push([$cfs,{opacity:1}]);scrl.anims.push([y,x,F]);M();_();P();B();q();I();break;default:scrl.anims.push([$cfs,S,function(){I();F()}]);M();D();H();j()}sc_startScroll(scrl,conf);cf_setCookie(opts.cookie,$cfs,conf);$cfs.trigger(cf_e("updatePageStatus",conf),[!1,w]);return!0});$cfs.bind(cf_e("slide_next",conf),function(e,t,n){e.stopPropagation();var r=$cfs.children();if(!opts.circular&&itms.first==opts.items.visible){opts.infinite&&$cfs +.trigger(cf_e("prev",conf),itms.total-1);return e.stopImmediatePropagation()}sz_resetMargin(r,opts);if(!is_number(n)){if(opts.items.filter!="*"){var i=is_number(t.items)?t.items:gn_getVisibleOrg($cfs,opts);n=gn_getScrollItemsNextFilter(r,opts,0,i)}else n=opts.items.visible;n=cf_getAdjust(n,opts,t.items,$tt0)}var s=itms.first==0?itms.total:itms.first;if(!opts.circular){if(opts.items.visibleConf.variable)var o=gn_getVisibleItemsNext(r,opts,n),i=gn_getVisibleItemsPrev(r,opts,s-1);else var o=opts.items.visible,i=opts.items.visible;n+o>s&&(n=s-i)}opts.items.visibleConf.old=opts.items.visible;if(opts.items.visibleConf.variable){var o=cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(r,opts,n,s),opts,opts.items.visibleConf.adjust,$tt0);while(opts.items.visible-n>=o&&n=0&&(j+=opts.padding[opts.d[1]]);c.css(opts.d.marginRight,j);f.not(l).length&&(N[opts.d.marginRight]=l.data("_cfs_origCssMargin"));O=function(){l.css(N)};M=function(){scrl.anims.push([l,N])};var F=f.data("_cfs_origCssMargin");h>0&&(F+=opts.padding[opts.d[3]]);T[opts.d.marginRight]=F;_=function(){f.css(T)};D=function(){scrl.anims.push([f,T])}}B=function(){$cfs.css(C)};var I=opts.items.visible+n-itms.total;H=function(){I>0&&$cfs.children().slice(itms.total).remove();var e=$cfs.children().slice(0,n).appendTo($cfs).last();I>0&&(a=gi_getCurrentItems(r,opts));sc_showHiddenItems(v);if(opts.usePadding){if(itms.totalt?"next":"prev");s=="prev"&&(t=itms.total-t);$cfs.trigger(cf_e(s,conf),[i,t,o]);return!0});$cfs.bind(cf_e("prevPage",conf),function(e,t,n){e.stopPropagation();var r=$cfs.triggerHandler(cf_e("currentPage",conf));return $cfs.triggerHandler(cf_e("slideToPage",conf),[r-1,t,"prev",n])});$cfs.bind(cf_e("nextPage",conf),function(e,t,n){e.stopPropagation();var r=$cfs.triggerHandler(cf_e("currentPage",conf));return $cfs.triggerHandler(cf_e("slideToPage",conf),[r+1,t,"next",n])});$cfs.bind(cf_e("slideToPage",conf),function(e,t,n,r,i){e.stopPropagation();is_number(t)||(t=$cfs.triggerHandler(cf_e("currentPage",conf)));var s=opts.pagination.items||opts.items.visible,o=Math.ceil(itms.total/s)-1;t<0&&(t=o);t>o&&(t=0);return $cfs.triggerHandler(cf_e("slideTo",conf),[t*s,0,!0,n,r,i])});$cfs.bind(cf_e("jumpToStart",conf),function(e,t){e.stopPropagation();t?t=gn_getItemIndex(t,0,!0,itms,$cfs):t=0;t+=itms.first;if(t!=0){if(itms.total>0)while(t>itms.total)t-=itms.total;$cfs.prepend($cfs.children().slice(t,itms.total))}return!0});$cfs.bind(cf_e("synchronise",conf),function(e,t){e.stopPropagation();if(t)t=cf_getSynchArr(t);else{if(!opts.synchronise)return debug(conf,"No carousel to synchronise.");t=opts.synchronise}var n=$cfs.triggerHandler(cf_e("currentPosition",conf)),r=!0;for(var i=0,s=t.length;i=itms.total&&(itms.first-=itms.total);$cfs.trigger(cf_e("updateSizes",conf));$cfs.trigger(cf_e("linkAnchors",conf));return!0});$cfs.bind(cf_e("removeItem",conf),function(e,t,n,r){e.stopPropagation();var i=[t,n,r],s=["string/number/object","boolean","number"],o=cf_sortParams(i,s);t=o[0];n=o[1];r=o[2];var u=!1;if(t instanceof $&&t.length>1){a=$();t.each(function(e,t){var i=$cfs.trigger(cf_e("removeItem",conf),[$(this),n,r]);i&&(a=a.add(i))});return a}if(is_undefined(t)||t=="end")a=$cfs.children().last();else{t=gn_getItemIndex(t,r,n,itms,$cfs);var a=$cfs.children().eq(t);a.length&&tr&&(i=r);is_function(t)&&t.call($tt0,i);return i});$cfs.bind(cf_e("currentVisible",conf),function(e,t){e.stopPropagation();var n=gi_getCurrentItems($cfs.children(),opts);is_function(t)&&t.call($tt0,n);return n});$cfs.bind(cf_e("slice",conf),function(e,t,n,r){e.stopPropagation();if(itms.total==0)return!1;var i=[t,n,r],s=["number","number","function"],o=cf_sortParams(i,s);t=is_number(o[0])?o[0]:0;n=is_number(o[1])?o[1]:itms.total;r=o[2];t+=itms.first;n+=itms.first;if(items.total>0){while(t>itms.total)t-=itms.total;while(n>itms.total)n-=itms.total;while(t<0)t+=itms.total;while(n<0)n+=itms.total}var u=$cfs.children(),a;n>t?a=u.slice(t,n):a=$(u.slice(t,itms.total).get().concat(u.slice(0,n).get()));is_function(r)&&r.call($tt0,a);return a});$cfs.bind(cf_e("isPaused",conf)+" "+cf_e("isStopped",conf)+" "+cf_e("isScrolling",conf),function(e,t){e.stopPropagation();var n=e.type.slice(conf.events.prefix.length),r=crsl[n];is_function(t)&&t.call($tt0,r);return r});$cfs.bind(cf_e("configuration",conf),function(e,a,b,c){e.stopPropagation();var reInit=!1;if(is_function(a))a.call($tt0,opts);else if(is_object(a)){opts_orig=$.extend(!0,{},opts_orig,a);b!==!1?reInit=!0:opts=$.extend(!0,{},opts,a)}else if(!is_undefined(a))if(is_function(b)){var val=eval("opts."+a);is_undefined(val)&&(val="");b.call($tt0,val)}else{if(!!is_undefined(b))return eval("opts."+a);typeof c!="boolean"&&(c=!0);eval("opts_orig."+a+" = b");c!==!1?reInit=!0:eval("opts."+a+" = b")}if(reInit){sz_resetMargin($cfs.children(),opts);FN._init(opts_orig);FN._bind_buttons();var sz=sz_setSizes($cfs,opts);$cfs.trigger(cf_e("updatePageStatus",conf),[!0,sz])}return opts});$cfs.bind(cf_e("linkAnchors",conf),function(e,t,n){e.stopPropagation();is_undefined(t)?t=$("body"):is_string(t)&&(t=$(t));if(!is_jquery(t)||t.length==0)return debug(conf,"Not a valid object.");is_string(n)||(n="a.caroufredsel");t.find(n).each(function(){var e=this.hash||"";e.length>0&&$cfs.children().index($(e))!=-1&&$(this).unbind("click").click(function(t){t.preventDefault();$cfs.trigger(cf_e("slideTo",conf),e)})});return!0});$cfs.bind(cf_e("updatePageStatus",conf),function(e,t,n){e.stopPropagation();if(!opts.pagination.container)return;var r=opts.pagination.items||opts.items.visible,i=Math.ceil(itms.total/r);if(t){if(opts.pagination.anchorBuilder){opts.pagination.container.children().remove();opts.pagination.container.each(function(){for(var e=0;e=i&&(s=0);s<0&&(s=i-1);opts.pagination.container.each(function(){$(this).children().removeClass(cf_c("selected",conf)).eq(s).addClass(cf_c("selected",conf))});return!0});$cfs.bind(cf_e("updateSizes",conf),function(e){var t=opts.items.visible,n=$cfs.children(),r=ms_getParentSize($wrp,opts,"width");itms.total=n.length;if(crsl.primarySizePercentage){opts.maxDimension=r;opts[opts.d.width]=ms_getPercentage(r,crsl.primarySizePercentage)}else opts.maxDimension=ms_getMaxDimension(opts,r);if(opts.responsive){opts.items.width=opts.items.sizesConf.width;opts.items.height=opts.items.sizesConf.height;opts=in_getResponsiveValues(opts,n,r);t=opts.items.visible;sz_setResponsiveSizes(opts,n)}else opts.items.visibleConf.variable?t=gn_getVisibleItemsNext(n,opts,0):opts.items.filter!="*"&&(t=gn_getVisibleItemsNextFilter(n,opts,0));if(!opts.circular&&itms.first!=0&&t>itms.first){if(opts.items.visibleConf.variable)var i=gn_getVisibleItemsPrev(n,opts,itms.first)-itms.first;else if(opts.items.filter!="*")var i=gn_getVisibleItemsPrevFilter(n,opts,itms.first)-itms.first;else var i=opts.items.visible-itms.first;debug(conf,"Preventing non-circular: sliding "+i+" items backward.");$cfs.trigger(cf_e("prev",conf),i)}opts.items.visible=cf_getItemsAdjust(t,opts,opts.items.visibleConf.adjust,$tt0);opts.items.visibleConf.old=opts.items.visible;opts=in_getAlignPadding(opts,n);var s=sz_setSizes($cfs,opts);$cfs.trigger(cf_e("updatePageStatus",conf),[!0,s]);nv_showNavi(opts,itms.total,conf);nv_enableNavi(opts,itms.first,conf);return s});$cfs.bind(cf_e("destroy",conf),function(e,t){e.stopPropagation();tmrs=sc_clearTimers(tmrs);$cfs.data("_cfs_isCarousel",!1);$cfs.trigger(cf_e("finish",conf));t&&$cfs.trigger(cf_e("jumpToStart",conf));sz_restoreOrigCss($cfs.children());sz_restoreOrigCss($cfs);FN._unbind_events();FN._unbind_buttons();conf.wrapper=="parent"?sz_restoreOrigCss($wrp):$wrp.replaceWith($cfs);return!0});$cfs.bind(cf_e("debug",conf),function(e){debug(conf,"Carousel width: "+opts.width);debug(conf,"Carousel height: "+opts.height);debug(conf,"Item widths: "+opts.items.width);debug(conf,"Item heights: "+opts.items.height);debug(conf,"Number of items visible: "+opts.items.visible);opts.auto.play&&debug(conf,"Number of items scrolled automatically: "+opts.auto.items);opts.prev.button&&debug(conf,"Number of items scrolled backward: "+opts.prev.items);opts.next.button&&debug(conf,"Number of items scrolled forward: "+opts.next.items);return conf.debug});$cfs.bind("_cfs_triggerEvent",function(e,t,n){e.stopPropagation();return $cfs.triggerHandler(cf_e(t,conf),n)})};FN._unbind_events=function(){$cfs.unbind(cf_e("",conf));$cfs.unbind(cf_e("",conf,!1));$cfs.unbind("_cfs_triggerEvent")};FN._bind_buttons=function(){FN._unbind_buttons();nv_showNavi(opts,itms.total,conf);nv_enableNavi(opts,itms.first,conf);if(opts.auto.pauseOnHover){var e=bt_pauseOnHoverConfig(opts.auto.pauseOnHover);$wrp.bind(cf_e("mouseenter",conf,!1),function(){$cfs.trigger(cf_e("pause",conf),e)}).bind(cf_e("mouseleave",conf,!1),function(){$cfs.trigger(cf_e("resume",conf))})}opts.auto.button&&opts.auto.button.bind(cf_e(opts.auto.event,conf,!1),function(e){e.preventDefault();var t=!1,n=null;if(crsl.isPaused)t="play";else if(opts.auto.pauseOnEvent){t="pause";n=bt_pauseOnHoverConfig(opts.auto.pauseOnEvent)}t&&$cfs.trigger(cf_e(t,conf),n)});if(opts.prev.button){opts.prev.button.bind(cf_e(opts.prev.event,conf,!1),function(e){e.preventDefault();$cfs.trigger(cf_e("prev",conf))});if(opts.prev.pauseOnHover){var e=bt_pauseOnHoverConfig(opts.prev.pauseOnHover);opts.prev.button.bind(cf_e("mouseenter",conf,!1),function(){$cfs.trigger(cf_e("pause",conf),e)}).bind(cf_e("mouseleave",conf,!1),function(){$cfs.trigger(cf_e("resume",conf))})}}if(opts.next.button){opts.next.button.bind(cf_e(opts.next.event,conf,!1),function(e){e.preventDefault();$cfs.trigger(cf_e("next",conf))});if(opts.next.pauseOnHover){var e=bt_pauseOnHoverConfig(opts.next.pauseOnHover);opts.next.button.bind(cf_e("mouseenter",conf,!1),function(){$cfs.trigger(cf_e("pause",conf),e)}).bind(cf_e("mouseleave",conf,!1),function(){$cfs.trigger(cf_e("resume",conf))})}}if(opts.pagination.container&&opts.pagination.pauseOnHover){var e=bt_pauseOnHoverConfig(opts.pagination.pauseOnHover);opts.pagination.container.bind(cf_e("mouseenter",conf,!1),function(){$cfs.trigger(cf_e("pause",conf),e)}).bind(cf_e("mouseleave",conf,!1),function(){$cfs.trigger(cf_e("resume",conf))})}(opts.prev.key||opts.next.key)&&$(document).bind(cf_e("keyup",conf,!1,!0,!0),function(e){var t=e.keyCode;if(t==opts.next.key){e.preventDefault();$cfs.trigger(cf_e("next",conf))}if(t==opts.prev.key){e.preventDefault();$cfs.trigger(cf_e("prev",conf))}});opts.pagination.keys&&$(document).bind(cf_e("keyup",conf,!1,!0,!0),function(e){var t=e.keyCode;if(t>=49&&t<58){t=(t-49)*opts.items.visible;if(t<=itms.total){e.preventDefault();$cfs.trigger(cf_e("slideTo",conf),[t,0,!0,opts.pagination])}}});if($.fn.swipe){var t="ontouchstart"in window;if(t&&opts.swipe.onTouch||!t&&opts.swipe.onMouse){var n=$.extend(!0,{},opts.prev,opts.swipe),r=$.extend(!0,{},opts.next,opts.swipe),i=function(){$cfs.trigger(cf_e("prev",conf),[n])},s=function(){$cfs.trigger(cf_e("next",conf),[r])};switch(opts.direction){case"up":case"down":opts.swipe.options.swipeUp=s;opts.swipe.options.swipeDown=i;break;default:opts.swipe.options.swipeLeft=s;opts.swipe.options.swipeRight=i}crsl.swipe&&$cfs.swipe("destroy");$wrp.swipe(opts.swipe.options);$wrp.css("cursor","move");crsl.swipe=!0}}if($.fn.mousewheel&&opts.mousewheel){var o=$.extend(!0,{},opts.prev,opts.mousewheel),u=$.extend(!0,{},opts.next,opts.mousewheel);crsl.mousewheel&&$wrp.unbind(cf_e("mousewheel",conf,!1));$wrp.bind(cf_e("mousewheel",conf,!1),function(e,t){e.preventDefault();t>0?$cfs.trigger(cf_e("prev",conf),[o]):$cfs.trigger(cf_e("next",conf),[u])});crsl.mousewheel=!0}opts.auto.play&&$cfs.trigger(cf_e("play",conf),opts.auto.delay);if(crsl.upDateOnWindowResize){var a=function(e){$cfs.trigger(cf_e("finish",conf));opts.auto.pauseOnResize&&!crsl.isPaused&&$cfs.trigger(cf_e("play",conf));sz_resetMargin($cfs.children(),opts);$cfs.trigger(cf_e("updateSizes",conf))},f=$(window),l=null;if($.debounce&&conf.onWindowResize=="debounce")l=$.debounce(200,a);else if($.throttle&&conf.onWindowResize=="throttle")l=$.throttle(300,a);else{var c=0,h=0;l=function(){var e=f.width(),t=f.height();if(e!=c||t!=h){a();c=e;h=t}}}f.bind(cf_e("resize",conf,!1,!0,!0),l)}};FN._unbind_buttons=function(){var e=cf_e("",conf),t=cf_e("",conf,!1);ns3=cf_e("",conf,!1,!0,!0);$(document).unbind(ns3);$(window).unbind(ns3);$wrp.unbind(t);opts.auto.button&&opts.auto.button.unbind(t);opts.prev.button&&opts.prev.button.unbind(t);opts.next.button&&opts.next.button.unbind(t);if(opts.pagination.container){opts.pagination.container.unbind(t);opts.pagination.anchorBuilder&&opts.pagination.container.children().remove()}if(crsl.swipe){$cfs.swipe("destroy");$wrp.css("cursor","default");crsl.swipe=!1}crsl.mousewheel&&(crsl.mousewheel=!1);nv_showNavi(opts,"hide",conf);nv_enableNavi(opts,"removeClass",conf)};is_boolean(configs)&&(configs={debug:configs});var crsl={direction:"next",isPaused:!0,isScrolling:!1,isStopped:!1,mousewheel:!1,swipe:!1},itms={total:$cfs.children().length,first:0},tmrs={auto:null,progress:null,startTime:getTime(),timePassed:0},scrl={isStopped:!1,duration:0,startTime:0,easing:"",anims:[]},clbk={onBefore:[],onAfter:[]},queu=[],conf=$.extend(!0,{},$.fn.carouFredSel.configs,configs),opts={},opts_orig=$.extend(!0,{},options),$wrp=conf.wrapper=="parent"?$cfs.parent():$cfs.wrap("<"+conf.wrapper.element+' class="'+conf.wrapper.classname+'" />').parent();conf.selector=$cfs.selector;conf.serialNumber=$.fn.carouFredSel.serialNumber++;conf.transition=conf.transition&&$.fn.transition?"transition":"animate";FN._init(opts_orig,!0,starting_position);FN._build();FN._bind_events();FN._bind_buttons();if(is_array(opts.items.start))var start_arr=opts.items.start;else{var start_arr=[];opts.items.start!=0&&start_arr.push(opts.items.start)}opts.cookie&&start_arr.unshift(parseInt(cf_getCookie(opts.cookie),10));if(start_arr.length>0)for(var a=0,l=start_arr.length;a'+e+""};$.fn.carouFredSel.progressbarUpdater=function(e){$(this).css("width",e+"%")};$.fn.carouFredSel.cookie={get:function(e){e+="=";var t=document.cookie.split(";");for(var n=0,r=t.length;n 1) + { + return this.each(function() { + $(this).carouFredSel(options, configs); + }); + } + + + var $cfs = this, + $tt0 = this[0], + starting_position = false; + + if ($cfs.data('_cfs_isCarousel')) + { + starting_position = $cfs.triggerHandler('_cfs_triggerEvent', 'currentPosition'); + $cfs.trigger('_cfs_triggerEvent', ['destroy', true]); + } + + var FN = {}; + + FN._init = function(o, setOrig, start) + { + o = go_getObject($tt0, o); + + o.items = go_getItemsObject($tt0, o.items); + o.scroll = go_getScrollObject($tt0, o.scroll); + o.auto = go_getAutoObject($tt0, o.auto); + o.prev = go_getPrevNextObject($tt0, o.prev); + o.next = go_getPrevNextObject($tt0, o.next); + o.pagination = go_getPaginationObject($tt0, o.pagination); + o.swipe = go_getSwipeObject($tt0, o.swipe); + o.mousewheel = go_getMousewheelObject($tt0, o.mousewheel); + + if (setOrig) + { + opts_orig = $.extend(true, {}, $.fn.carouFredSel.defaults, o); + } + + opts = $.extend(true, {}, $.fn.carouFredSel.defaults, o); + opts.d = cf_getDimensions(opts); + + crsl.direction = (opts.direction == 'up' || opts.direction == 'left') ? 'next' : 'prev'; + + var a_itm = $cfs.children(), + avail_primary = ms_getParentSize($wrp, opts, 'width'); + + if (is_true(opts.cookie)) + { + opts.cookie = 'caroufredsel_cookie_' + conf.serialNumber; + } + + opts.maxDimension = ms_getMaxDimension(opts, avail_primary); + + // complement items and sizes + opts.items = in_complementItems(opts.items, opts, a_itm, start); + opts[opts.d['width']] = in_complementPrimarySize(opts[opts.d['width']], opts, a_itm); + opts[opts.d['height']] = in_complementSecondarySize(opts[opts.d['height']], opts, a_itm); + + // primary size not set for a responsive carousel + if (opts.responsive) + { + if (!is_percentage(opts[opts.d['width']])) + { + opts[opts.d['width']] = '100%'; + } + } + + // primary size is percentage + if (is_percentage(opts[opts.d['width']])) + { + crsl.upDateOnWindowResize = true; + crsl.primarySizePercentage = opts[opts.d['width']]; + opts[opts.d['width']] = ms_getPercentage(avail_primary, crsl.primarySizePercentage); + if (!opts.items.visible) + { + opts.items.visibleConf.variable = true; + } + } + + if (opts.responsive) + { + opts.usePadding = false; + opts.padding = [0, 0, 0, 0]; + opts.align = false; + opts.items.visibleConf.variable = false; + } + else + { + // visible-items not set + if (!opts.items.visible) + { + opts = in_complementVisibleItems(opts, avail_primary); + } + + // primary size not set -> calculate it or set to "variable" + if (!opts[opts.d['width']]) + { + if (!opts.items.visibleConf.variable && is_number(opts.items[opts.d['width']]) && opts.items.filter == '*') + { + opts[opts.d['width']] = opts.items.visible * opts.items[opts.d['width']]; + opts.align = false; + } + else + { + opts[opts.d['width']] = 'variable'; + } + } + // align not set -> set to center if primary size is number + if (is_undefined(opts.align)) + { + opts.align = (is_number(opts[opts.d['width']])) + ? 'center' + : false; + } + // set variabe visible-items + if (opts.items.visibleConf.variable) + { + opts.items.visible = gn_getVisibleItemsNext(a_itm, opts, 0); + } + } + + // set visible items by filter + if (opts.items.filter != '*' && !opts.items.visibleConf.variable) + { + opts.items.visibleConf.org = opts.items.visible; + opts.items.visible = gn_getVisibleItemsNextFilter(a_itm, opts, 0); + } + + opts.items.visible = cf_getItemsAdjust(opts.items.visible, opts, opts.items.visibleConf.adjust, $tt0); + opts.items.visibleConf.old = opts.items.visible; + + if (opts.responsive) + { + if (!opts.items.visibleConf.min) + { + opts.items.visibleConf.min = opts.items.visible; + } + if (!opts.items.visibleConf.max) + { + opts.items.visibleConf.max = opts.items.visible; + } + opts = in_getResponsiveValues(opts, a_itm, avail_primary); + } + else + { + opts.padding = cf_getPadding(opts.padding); + + if (opts.align == 'top') + { + opts.align = 'left'; + } + else if (opts.align == 'bottom') + { + opts.align = 'right'; + } + + switch (opts.align) + { + // align: center, left or right + case 'center': + case 'left': + case 'right': + if (opts[opts.d['width']] != 'variable') + { + opts = in_getAlignPadding(opts, a_itm); + opts.usePadding = true; + } + break; + + // padding + default: + opts.align = false; + opts.usePadding = ( + opts.padding[0] == 0 && + opts.padding[1] == 0 && + opts.padding[2] == 0 && + opts.padding[3] == 0 + ) ? false : true; + break; + } + } + + if (!is_number(opts.scroll.duration)) + { + opts.scroll.duration = 500; + } + if (is_undefined(opts.scroll.items)) + { + opts.scroll.items = (opts.responsive || opts.items.visibleConf.variable || opts.items.filter != '*') + ? 'visible' + : opts.items.visible; + } + + opts.auto = $.extend(true, {}, opts.scroll, opts.auto); + opts.prev = $.extend(true, {}, opts.scroll, opts.prev); + opts.next = $.extend(true, {}, opts.scroll, opts.next); + opts.pagination = $.extend(true, {}, opts.scroll, opts.pagination); + // swipe and mousewheel extend later on, per direction + + opts.auto = go_complementAutoObject($tt0, opts.auto); + opts.prev = go_complementPrevNextObject($tt0, opts.prev); + opts.next = go_complementPrevNextObject($tt0, opts.next); + opts.pagination = go_complementPaginationObject($tt0, opts.pagination); + opts.swipe = go_complementSwipeObject($tt0, opts.swipe); + opts.mousewheel = go_complementMousewheelObject($tt0, opts.mousewheel); + + if (opts.synchronise) + { + opts.synchronise = cf_getSynchArr(opts.synchronise); + } + + + // DEPRECATED + if (opts.auto.onPauseStart) + { + opts.auto.onTimeoutStart = opts.auto.onPauseStart; + deprecated('auto.onPauseStart', 'auto.onTimeoutStart'); + } + if (opts.auto.onPausePause) + { + opts.auto.onTimeoutPause = opts.auto.onPausePause; + deprecated('auto.onPausePause', 'auto.onTimeoutPause'); + } + if (opts.auto.onPauseEnd) + { + opts.auto.onTimeoutEnd = opts.auto.onPauseEnd; + deprecated('auto.onPauseEnd', 'auto.onTimeoutEnd'); + } + if (opts.auto.pauseDuration) + { + opts.auto.timeoutDuration = opts.auto.pauseDuration; + deprecated('auto.pauseDuration', 'auto.timeoutDuration'); + } + // /DEPRECATED + + + }; // /init + + + FN._build = function() { + $cfs.data('_cfs_isCarousel', true); + + var a_itm = $cfs.children(), + orgCSS = in_mapCss($cfs, ['textAlign', 'float', 'position', 'top', 'right', 'bottom', 'left', 'zIndex', 'width', 'height', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft']), + newPosition = 'relative'; + + switch (orgCSS.position) + { + case 'absolute': + case 'fixed': + newPosition = orgCSS.position; + break; + } + + if (conf.wrapper == 'parent') + { + sz_storeOrigCss($wrp); + } + else + { + $wrp.css(orgCSS); + } + $wrp.css({ + 'overflow' : 'hidden', + 'position' : newPosition + }); + + sz_storeOrigCss($cfs); + $cfs.data('_cfs_origCssZindex', orgCSS.zIndex); + $cfs.css({ + 'textAlign' : 'left', + 'float' : 'none', + 'position' : 'absolute', + 'top' : 0, + 'right' : 'auto', + 'bottom' : 'auto', + 'left' : 0, + 'marginTop' : 0, + 'marginRight' : 0, + 'marginBottom' : 0, + 'marginLeft' : 0 + }); + + sz_storeMargin(a_itm, opts); + sz_storeOrigCss(a_itm); + if (opts.responsive) + { + sz_setResponsiveSizes(opts, a_itm); + } + + }; // /build + + + FN._bind_events = function() { + FN._unbind_events(); + + + // stop event + $cfs.bind(cf_e('stop', conf), function(e, imm) { + e.stopPropagation(); + + // button + if (!crsl.isStopped) + { + if (opts.auto.button) + { + opts.auto.button.addClass(cf_c('stopped', conf)); + } + } + + // set stopped + crsl.isStopped = true; + + if (opts.auto.play) + { + opts.auto.play = false; + $cfs.trigger(cf_e('pause', conf), imm); + } + return true; + }); + + + // finish event + $cfs.bind(cf_e('finish', conf), function(e) { + e.stopPropagation(); + if (crsl.isScrolling) + { + sc_stopScroll(scrl); + } + return true; + }); + + + // pause event + $cfs.bind(cf_e('pause', conf), function(e, imm, res) { + e.stopPropagation(); + tmrs = sc_clearTimers(tmrs); + + // immediately pause + if (imm && crsl.isScrolling) + { + scrl.isStopped = true; + var nst = getTime() - scrl.startTime; + scrl.duration -= nst; + if (scrl.pre) + { + scrl.pre.duration -= nst; + } + if (scrl.post) + { + scrl.post.duration -= nst; + } + sc_stopScroll(scrl, false); + } + + // update remaining pause-time + if (!crsl.isPaused && !crsl.isScrolling) + { + if (res) + { + tmrs.timePassed += getTime() - tmrs.startTime; + } + } + + // button + if (!crsl.isPaused) + { + if (opts.auto.button) + { + opts.auto.button.addClass(cf_c('paused', conf)); + } + } + + // set paused + crsl.isPaused = true; + + // pause pause callback + if (opts.auto.onTimeoutPause) + { + var dur1 = opts.auto.timeoutDuration - tmrs.timePassed, + perc = 100 - Math.ceil( dur1 * 100 / opts.auto.timeoutDuration ); + + opts.auto.onTimeoutPause.call($tt0, perc, dur1); + } + return true; + }); + + + // play event + $cfs.bind(cf_e('play', conf), function(e, dir, del, res) { + e.stopPropagation(); + tmrs = sc_clearTimers(tmrs); + + // sort params + var v = [dir, del, res], + t = ['string', 'number', 'boolean'], + a = cf_sortParams(v, t); + + dir = a[0]; + del = a[1]; + res = a[2]; + + if (dir != 'prev' && dir != 'next') + { + dir = crsl.direction; + } + if (!is_number(del)) + { + del = 0; + } + if (!is_boolean(res)) + { + res = false; + } + + // stopped? + if (res) + { + crsl.isStopped = false; + opts.auto.play = true; + } + if (!opts.auto.play) + { + e.stopImmediatePropagation(); + return debug(conf, 'Carousel stopped: Not scrolling.'); + } + + // button + if (crsl.isPaused) + { + if (opts.auto.button) + { + opts.auto.button.removeClass(cf_c('stopped', conf)); + opts.auto.button.removeClass(cf_c('paused', conf)); + } + } + + // set playing + crsl.isPaused = false; + tmrs.startTime = getTime(); + + // timeout the scrolling + var dur1 = opts.auto.timeoutDuration + del; + dur2 = dur1 - tmrs.timePassed; + perc = 100 - Math.ceil(dur2 * 100 / dur1); + + if (opts.auto.progress) + { + tmrs.progress = setInterval(function() { + var pasd = getTime() - tmrs.startTime + tmrs.timePassed, + perc = Math.ceil(pasd * 100 / dur1); + opts.auto.progress.updater.call(opts.auto.progress.bar[0], perc); + }, opts.auto.progress.interval); + } + + tmrs.auto = setTimeout(function() { + if (opts.auto.progress) + { + opts.auto.progress.updater.call(opts.auto.progress.bar[0], 100); + } + if (opts.auto.onTimeoutEnd) + { + opts.auto.onTimeoutEnd.call($tt0, perc, dur2); + } + if (crsl.isScrolling) + { + $cfs.trigger(cf_e('play', conf), dir); + } + else + { + $cfs.trigger(cf_e(dir, conf), opts.auto); + } + }, dur2); + + // pause start callback + if (opts.auto.onTimeoutStart) + { + opts.auto.onTimeoutStart.call($tt0, perc, dur2); + } + + return true; + }); + + + // resume event + $cfs.bind(cf_e('resume', conf), function(e) { + e.stopPropagation(); + if (scrl.isStopped) + { + scrl.isStopped = false; + crsl.isPaused = false; + crsl.isScrolling = true; + scrl.startTime = getTime(); + sc_startScroll(scrl, conf); + } + else + { + $cfs.trigger(cf_e('play', conf)); + } + return true; + }); + + + // prev + next events + $cfs.bind(cf_e('prev', conf)+' '+cf_e('next', conf), function(e, obj, num, clb, que) { + e.stopPropagation(); + + // stopped or hidden carousel, don't scroll, don't queue + if (crsl.isStopped || $cfs.is(':hidden')) + { + e.stopImmediatePropagation(); + return debug(conf, 'Carousel stopped or hidden: Not scrolling.'); + } + + // not enough items + var minimum = (is_number(opts.items.minimum)) ? opts.items.minimum : opts.items.visible + 1; + if (minimum > itms.total) + { + e.stopImmediatePropagation(); + return debug(conf, 'Not enough items ('+itms.total+' total, '+minimum+' needed): Not scrolling.'); + } + + // get config + var v = [obj, num, clb, que], + t = ['object', 'number/string', 'function', 'boolean'], + a = cf_sortParams(v, t); + + obj = a[0]; + num = a[1]; + clb = a[2]; + que = a[3]; + + var eType = e.type.slice(conf.events.prefix.length); + + if (!is_object(obj)) + { + obj = {}; + } + if (is_function(clb)) + { + obj.onAfter = clb; + } + if (is_boolean(que)) + { + obj.queue = que; + } + obj = $.extend(true, {}, opts[eType], obj); + + // test conditions callback + if (obj.conditions && !obj.conditions.call($tt0, eType)) + { + e.stopImmediatePropagation(); + return debug(conf, 'Callback "conditions" returned false.'); + } + + if (!is_number(num)) + { + if (opts.items.filter != '*') + { + num = 'visible'; + } + else + { + var arr = [num, obj.items, opts[eType].items]; + for (var a = 0, l = arr.length; a < l; a++) + { + if (is_number(arr[a]) || arr[a] == 'page' || arr[a] == 'visible') { + num = arr[a]; + break; + } + } + } + switch(num) { + case 'page': + e.stopImmediatePropagation(); + return $cfs.triggerHandler(cf_e(eType+'Page', conf), [obj, clb]); + break; + + case 'visible': + if (!opts.items.visibleConf.variable && opts.items.filter == '*') + { + num = opts.items.visible; + } + break; + } + } + + // resume animation, add current to queue + if (scrl.isStopped) + { + $cfs.trigger(cf_e('resume', conf)); + $cfs.trigger(cf_e('queue', conf), [eType, [obj, num, clb]]); + e.stopImmediatePropagation(); + return debug(conf, 'Carousel resumed scrolling.'); + } + + // queue if scrolling + if (obj.duration > 0) + { + if (crsl.isScrolling) + { + if (obj.queue) + { + if (obj.queue == 'last') + { + queu = []; + } + if (obj.queue != 'first' || queu.length == 0) + { + $cfs.trigger(cf_e('queue', conf), [eType, [obj, num, clb]]); + } + } + e.stopImmediatePropagation(); + return debug(conf, 'Carousel currently scrolling.'); + } + } + + tmrs.timePassed = 0; + $cfs.trigger(cf_e('slide_'+eType, conf), [obj, num]); + + // synchronise + if (opts.synchronise) + { + var s = opts.synchronise, + c = [obj, num]; + + for (var j = 0, l = s.length; j < l; j++) { + var d = eType; + if (!s[j][2]) + { + d = (d == 'prev') ? 'next' : 'prev'; + } + if (!s[j][1]) + { + c[0] = s[j][0].triggerHandler('_cfs_triggerEvent', ['configuration', d]); + } + c[1] = num + s[j][3]; + s[j][0].trigger('_cfs_triggerEvent', ['slide_'+d, c]); + } + } + return true; + }); + + + // prev event + $cfs.bind(cf_e('slide_prev', conf), function(e, sO, nI) { + e.stopPropagation(); + var a_itm = $cfs.children(); + + // non-circular at start, scroll to end + if (!opts.circular) + { + if (itms.first == 0) + { + if (opts.infinite) + { + $cfs.trigger(cf_e('next', conf), itms.total-1); + } + return e.stopImmediatePropagation(); + } + } + + sz_resetMargin(a_itm, opts); + + // find number of items to scroll + if (!is_number(nI)) + { + if (opts.items.visibleConf.variable) + { + nI = gn_getVisibleItemsPrev(a_itm, opts, itms.total-1); + } + else if (opts.items.filter != '*') + { + var xI = (is_number(sO.items)) ? sO.items : gn_getVisibleOrg($cfs, opts); + nI = gn_getScrollItemsPrevFilter(a_itm, opts, itms.total-1, xI); + } + else + { + nI = opts.items.visible; + } + nI = cf_getAdjust(nI, opts, sO.items, $tt0); + } + + // prevent non-circular from scrolling to far + if (!opts.circular) + { + if (itms.total - nI < itms.first) + { + nI = itms.total - itms.first; + } + } + + // set new number of visible items + opts.items.visibleConf.old = opts.items.visible; + if (opts.items.visibleConf.variable) + { + var vI = cf_getItemsAdjust(gn_getVisibleItemsNext(a_itm, opts, itms.total-nI), opts, opts.items.visibleConf.adjust, $tt0); + if (opts.items.visible+nI <= vI && nI < itms.total) + { + nI++; + vI = cf_getItemsAdjust(gn_getVisibleItemsNext(a_itm, opts, itms.total-nI), opts, opts.items.visibleConf.adjust, $tt0); + } + opts.items.visible = vI; + } + else if (opts.items.filter != '*') + { + var vI = gn_getVisibleItemsNextFilter(a_itm, opts, itms.total-nI); + opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0); + } + + sz_resetMargin(a_itm, opts, true); + + // scroll 0, don't scroll + if (nI == 0) + { + e.stopImmediatePropagation(); + return debug(conf, '0 items to scroll: Not scrolling.'); + } + debug(conf, 'Scrolling '+nI+' items backward.'); + + + // save new config + itms.first += nI; + while (itms.first >= itms.total) + { + itms.first -= itms.total; + } + + // non-circular callback + if (!opts.circular) + { + if (itms.first == 0 && sO.onEnd) + { + sO.onEnd.call($tt0, 'prev'); + } + if (!opts.infinite) + { + nv_enableNavi(opts, itms.first, conf); + } + } + + // rearrange items + $cfs.children().slice(itms.total-nI, itms.total).prependTo($cfs); + if (itms.total < opts.items.visible + nI) + { + $cfs.children().slice(0, (opts.items.visible+nI)-itms.total).clone(true).appendTo($cfs); + } + + // the needed items + var a_itm = $cfs.children(), + i_old = gi_getOldItemsPrev(a_itm, opts, nI), + i_new = gi_getNewItemsPrev(a_itm, opts), + i_cur_l = a_itm.eq(nI-1), + i_old_l = i_old.last(), + i_new_l = i_new.last(); + + sz_resetMargin(a_itm, opts); + + var pL = 0, + pR = 0; + + if (opts.align) + { + var p = cf_getAlignPadding(i_new, opts); + pL = p[0]; + pR = p[1]; + } + var oL = (pL < 0) ? opts.padding[opts.d[3]] : 0; + + // hide items for fx directscroll + var hiddenitems = false, + i_skp = $(); + if (opts.items.visible < nI) + { + i_skp = a_itm.slice(opts.items.visibleConf.old, nI); + if (sO.fx == 'directscroll') + { + var orgW = opts.items[opts.d['width']]; + hiddenitems = i_skp; + i_cur_l = i_new_l; + sc_hideHiddenItems(hiddenitems); + opts.items[opts.d['width']] = 'variable'; + } + } + + // save new sizes + var $cf2 = false, + i_siz = ms_getTotalSize(a_itm.slice(0, nI), opts, 'width'), + w_siz = cf_mapWrapperSizes(ms_getSizes(i_new, opts, true), opts, !opts.usePadding), + i_siz_vis = 0, + a_cfs = {}, + a_wsz = {}, + a_cur = {}, + a_old = {}, + a_new = {}, + a_lef = {}, + a_lef_vis = {}, + a_dur = sc_getDuration(sO, opts, nI, i_siz); + + switch(sO.fx) + { + case 'cover': + case 'cover-fade': + i_siz_vis = ms_getTotalSize(a_itm.slice(0, opts.items.visible), opts, 'width'); + break; + } + + if (hiddenitems) + { + opts.items[opts.d['width']] = orgW; + } + + sz_resetMargin(a_itm, opts, true); + if (pR >= 0) + { + sz_resetMargin(i_old_l, opts, opts.padding[opts.d[1]]); + } + if (pL >= 0) + { + sz_resetMargin(i_cur_l, opts, opts.padding[opts.d[3]]); + } + + if (opts.align) + { + opts.padding[opts.d[1]] = pR; + opts.padding[opts.d[3]] = pL; + } + + a_lef[opts.d['left']] = -(i_siz - oL); + a_lef_vis[opts.d['left']] = -(i_siz_vis - oL); + a_wsz[opts.d['left']] = w_siz[opts.d['width']]; + + // scrolling functions + var _s_wrapper = function() {}, + _a_wrapper = function() {}, + _s_paddingold = function() {}, + _a_paddingold = function() {}, + _s_paddingnew = function() {}, + _a_paddingnew = function() {}, + _s_paddingcur = function() {}, + _a_paddingcur = function() {}, + _onafter = function() {}, + _moveitems = function() {}, + _position = function() {}; + + // clone carousel + switch(sO.fx) + { + case 'crossfade': + case 'cover': + case 'cover-fade': + case 'uncover': + case 'uncover-fade': + $cf2 = $cfs.clone(true).appendTo($wrp); + break; + } + switch(sO.fx) + { + case 'crossfade': + case 'uncover': + case 'uncover-fade': + $cf2.children().slice(0, nI).remove(); + $cf2.children().slice(opts.items.visibleConf.old).remove(); + break; + + case 'cover': + case 'cover-fade': + $cf2.children().slice(opts.items.visible).remove(); + $cf2.css(a_lef_vis); + break; + } + + $cfs.css(a_lef); + + // reset all scrolls + scrl = sc_setScroll(a_dur, sO.easing, conf); + + // animate / set carousel + a_cfs[opts.d['left']] = (opts.usePadding) ? opts.padding[opts.d[3]] : 0; + + // animate / set wrapper + if (opts[opts.d['width']] == 'variable' || opts[opts.d['height']] == 'variable') + { + _s_wrapper = function() { + $wrp.css(w_siz); + }; + _a_wrapper = function() { + scrl.anims.push([$wrp, w_siz]); + }; + } + + // animate / set items + if (opts.usePadding) + { + if (i_new_l.not(i_cur_l).length) + { + a_cur[opts.d['marginRight']] = i_cur_l.data('_cfs_origCssMargin'); + + if (pL < 0) + { + i_cur_l.css(a_cur); + } + else + { + _s_paddingcur = function() { + i_cur_l.css(a_cur); + }; + _a_paddingcur = function() { + scrl.anims.push([i_cur_l, a_cur]); + }; + } + } + switch(sO.fx) + { + case 'cover': + case 'cover-fade': + $cf2.children().eq(nI-1).css(a_cur); + break; + } + + if (i_new_l.not(i_old_l).length) + { + a_old[opts.d['marginRight']] = i_old_l.data('_cfs_origCssMargin'); + _s_paddingold = function() { + i_old_l.css(a_old); + }; + _a_paddingold = function() { + scrl.anims.push([i_old_l, a_old]); + }; + } + + if (pR >= 0) + { + a_new[opts.d['marginRight']] = i_new_l.data('_cfs_origCssMargin') + opts.padding[opts.d[1]]; + _s_paddingnew = function() { + i_new_l.css(a_new); + }; + _a_paddingnew = function() { + scrl.anims.push([i_new_l, a_new]); + }; + } + } + + // set position + _position = function() { + $cfs.css(a_cfs); + }; + + + var overFill = opts.items.visible+nI-itms.total; + + // rearrange items + _moveitems = function() { + if (overFill > 0) + { + $cfs.children().slice(itms.total).remove(); + i_old = $( $cfs.children().slice(itms.total-(opts.items.visible-overFill)).get().concat( $cfs.children().slice(0, overFill).get() ) ); + } + sc_showHiddenItems(hiddenitems); + + if (opts.usePadding) + { + var l_itm = $cfs.children().eq(opts.items.visible+nI-1); + l_itm.css(opts.d['marginRight'], l_itm.data('_cfs_origCssMargin')); + } + }; + + + var cb_arguments = sc_mapCallbackArguments(i_old, i_skp, i_new, nI, 'prev', a_dur, w_siz); + + // fire onAfter callbacks + _onafter = function() { + sc_afterScroll($cfs, $cf2, sO); + crsl.isScrolling = false; + clbk.onAfter = sc_fireCallbacks($tt0, sO, 'onAfter', cb_arguments, clbk); + queu = sc_fireQueue($cfs, queu, conf); + + if (!crsl.isPaused) + { + $cfs.trigger(cf_e('play', conf)); + } + }; + + // fire onBefore callback + crsl.isScrolling = true; + tmrs = sc_clearTimers(tmrs); + clbk.onBefore = sc_fireCallbacks($tt0, sO, 'onBefore', cb_arguments, clbk); + + switch(sO.fx) + { + case 'none': + $cfs.css(a_cfs); + _s_wrapper(); + _s_paddingold(); + _s_paddingnew(); + _s_paddingcur(); + _position(); + _moveitems(); + _onafter(); + break; + + case 'fade': + scrl.anims.push([$cfs, { 'opacity': 0 }, function() { + _s_wrapper(); + _s_paddingold(); + _s_paddingnew(); + _s_paddingcur(); + _position(); + _moveitems(); + scrl = sc_setScroll(a_dur, sO.easing, conf); + scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]); + sc_startScroll(scrl, conf); + }]); + break; + + case 'crossfade': + $cfs.css({ 'opacity': 0 }); + scrl.anims.push([$cf2, { 'opacity': 0 }]); + scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]); + _a_wrapper(); + _s_paddingold(); + _s_paddingnew(); + _s_paddingcur(); + _position(); + _moveitems(); + break; + + case 'cover': + scrl.anims.push([$cf2, a_cfs, function() { + _s_paddingold(); + _s_paddingnew(); + _s_paddingcur(); + _position(); + _moveitems(); + _onafter(); + }]); + _a_wrapper(); + break; + + case 'cover-fade': + scrl.anims.push([$cfs, { 'opacity': 0 }]); + scrl.anims.push([$cf2, a_cfs, function() { + _s_paddingold(); + _s_paddingnew(); + _s_paddingcur(); + _position(); + _moveitems(); + _onafter(); + }]); + _a_wrapper(); + break; + + case 'uncover': + scrl.anims.push([$cf2, a_wsz, _onafter]); + _a_wrapper(); + _s_paddingold(); + _s_paddingnew(); + _s_paddingcur(); + _position(); + _moveitems(); + break; + + case 'uncover-fade': + $cfs.css({ 'opacity': 0 }); + scrl.anims.push([$cfs, { 'opacity': 1 }]); + scrl.anims.push([$cf2, a_wsz, _onafter]); + _a_wrapper(); + _s_paddingold(); + _s_paddingnew(); + _s_paddingcur(); + _position(); + _moveitems(); + break; + + default: + scrl.anims.push([$cfs, a_cfs, function() { + _moveitems(); + _onafter(); + }]); + _a_wrapper(); + _a_paddingold(); + _a_paddingnew(); + _a_paddingcur(); + break; + } + + sc_startScroll(scrl, conf); + cf_setCookie(opts.cookie, $cfs, conf); + + $cfs.trigger(cf_e('updatePageStatus', conf), [false, w_siz]); + + return true; + }); + + + // next event + $cfs.bind(cf_e('slide_next', conf), function(e, sO, nI) { + e.stopPropagation(); + var a_itm = $cfs.children(); + + // non-circular at end, scroll to start + if (!opts.circular) + { + if (itms.first == opts.items.visible) + { + if (opts.infinite) + { + $cfs.trigger(cf_e('prev', conf), itms.total-1); + } + return e.stopImmediatePropagation(); + } + } + + sz_resetMargin(a_itm, opts); + + // find number of items to scroll + if (!is_number(nI)) + { + if (opts.items.filter != '*') + { + var xI = (is_number(sO.items)) ? sO.items : gn_getVisibleOrg($cfs, opts); + nI = gn_getScrollItemsNextFilter(a_itm, opts, 0, xI); + } + else + { + nI = opts.items.visible; + } + nI = cf_getAdjust(nI, opts, sO.items, $tt0); + } + + var lastItemNr = (itms.first == 0) ? itms.total : itms.first; + + // prevent non-circular from scrolling to far + if (!opts.circular) + { + if (opts.items.visibleConf.variable) + { + var vI = gn_getVisibleItemsNext(a_itm, opts, nI), + xI = gn_getVisibleItemsPrev(a_itm, opts, lastItemNr-1); + } + else + { + var vI = opts.items.visible, + xI = opts.items.visible; + } + + if (nI + vI > lastItemNr) + { + nI = lastItemNr - xI; + } + } + + // set new number of visible items + opts.items.visibleConf.old = opts.items.visible; + if (opts.items.visibleConf.variable) + { + var vI = cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(a_itm, opts, nI, lastItemNr), opts, opts.items.visibleConf.adjust, $tt0); + while (opts.items.visible-nI >= vI && nI < itms.total) + { + nI++; + vI = cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(a_itm, opts, nI, lastItemNr), opts, opts.items.visibleConf.adjust, $tt0); + } + opts.items.visible = vI; + } + else if (opts.items.filter != '*') + { + var vI = gn_getVisibleItemsNextFilter(a_itm, opts, nI); + opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0); + } + + sz_resetMargin(a_itm, opts, true); + + // scroll 0, don't scroll + if (nI == 0) + { + e.stopImmediatePropagation(); + return debug(conf, '0 items to scroll: Not scrolling.'); + } + debug(conf, 'Scrolling '+nI+' items forward.'); + + + // save new config + itms.first -= nI; + while (itms.first < 0) + { + itms.first += itms.total; + } + + // non-circular callback + if (!opts.circular) + { + if (itms.first == opts.items.visible && sO.onEnd) + { + sO.onEnd.call($tt0, 'next'); + } + if (!opts.infinite) + { + nv_enableNavi(opts, itms.first, conf); + } + } + + // rearrange items + if (itms.total < opts.items.visible+nI) + { + $cfs.children().slice(0, (opts.items.visible+nI)-itms.total).clone(true).appendTo($cfs); + } + + // the needed items + var a_itm = $cfs.children(), + i_old = gi_getOldItemsNext(a_itm, opts), + i_new = gi_getNewItemsNext(a_itm, opts, nI), + i_cur_l = a_itm.eq(nI-1), + i_old_l = i_old.last(), + i_new_l = i_new.last(); + + sz_resetMargin(a_itm, opts); + + var pL = 0, + pR = 0; + + if (opts.align) + { + var p = cf_getAlignPadding(i_new, opts); + pL = p[0]; + pR = p[1]; + } + + // hide items for fx directscroll + var hiddenitems = false, + i_skp = $(); + if (opts.items.visibleConf.old < nI) + { + i_skp = a_itm.slice(opts.items.visibleConf.old, nI); + if (sO.fx == 'directscroll') + { + var orgW = opts.items[opts.d['width']]; + hiddenitems = i_skp; + i_cur_l = i_old_l; + sc_hideHiddenItems(hiddenitems); + opts.items[opts.d['width']] = 'variable'; + } + } + + // save new sizes + var $cf2 = false, + i_siz = ms_getTotalSize(a_itm.slice(0, nI), opts, 'width'), + w_siz = cf_mapWrapperSizes(ms_getSizes(i_new, opts, true), opts, !opts.usePadding), + i_siz_vis = 0, + a_cfs = {}, + a_cfs_vis = {}, + a_cur = {}, + a_old = {}, + a_lef = {}, + a_dur = sc_getDuration(sO, opts, nI, i_siz); + + switch(sO.fx) + { + case 'uncover': + case 'uncover-fade': + i_siz_vis = ms_getTotalSize(a_itm.slice(0, opts.items.visibleConf.old), opts, 'width'); + break; + } + + if (hiddenitems) + { + opts.items[opts.d['width']] = orgW; + } + + if (opts.align) + { + if (opts.padding[opts.d[1]] < 0) + { + opts.padding[opts.d[1]] = 0; + } + } + sz_resetMargin(a_itm, opts, true); + sz_resetMargin(i_old_l, opts, opts.padding[opts.d[1]]); + + if (opts.align) + { + opts.padding[opts.d[1]] = pR; + opts.padding[opts.d[3]] = pL; + } + + a_lef[opts.d['left']] = (opts.usePadding) ? opts.padding[opts.d[3]] : 0; + + // scrolling functions + var _s_wrapper = function() {}, + _a_wrapper = function() {}, + _s_paddingold = function() {}, + _a_paddingold = function() {}, + _s_paddingcur = function() {}, + _a_paddingcur = function() {}, + _onafter = function() {}, + _moveitems = function() {}, + _position = function() {}; + + // clone carousel + switch(sO.fx) + { + case 'crossfade': + case 'cover': + case 'cover-fade': + case 'uncover': + case 'uncover-fade': + $cf2 = $cfs.clone(true).appendTo($wrp); + $cf2.children().slice(opts.items.visibleConf.old).remove(); + break; + } + switch(sO.fx) + { + case 'crossfade': + case 'cover': + case 'cover-fade': + $cfs.css('zIndex', 1); + $cf2.css('zIndex', 0); + break; + } + + // reset all scrolls + scrl = sc_setScroll(a_dur, sO.easing, conf); + + // animate / set carousel + a_cfs[opts.d['left']] = -i_siz; + a_cfs_vis[opts.d['left']] = -i_siz_vis; + + if (pL < 0) + { + a_cfs[opts.d['left']] += pL; + } + + // animate / set wrapper + if (opts[opts.d['width']] == 'variable' || opts[opts.d['height']] == 'variable') + { + _s_wrapper = function() { + $wrp.css(w_siz); + }; + _a_wrapper = function() { + scrl.anims.push([$wrp, w_siz]); + }; + } + + // animate / set items + if (opts.usePadding) + { + var i_new_l_m = i_new_l.data('_cfs_origCssMargin'); + + if (pR >= 0) + { + i_new_l_m += opts.padding[opts.d[1]]; + } + i_new_l.css(opts.d['marginRight'], i_new_l_m); + + if (i_cur_l.not(i_old_l).length) + { + a_old[opts.d['marginRight']] = i_old_l.data('_cfs_origCssMargin'); + } + _s_paddingold = function() { + i_old_l.css(a_old); + }; + _a_paddingold = function() { + scrl.anims.push([i_old_l, a_old]); + }; + + var i_cur_l_m = i_cur_l.data('_cfs_origCssMargin'); + if (pL > 0) + { + i_cur_l_m += opts.padding[opts.d[3]]; + } + + a_cur[opts.d['marginRight']] = i_cur_l_m; + + _s_paddingcur = function() { + i_cur_l.css(a_cur); + }; + _a_paddingcur = function() { + scrl.anims.push([i_cur_l, a_cur]); + }; + } + + // set position + _position = function() { + $cfs.css(a_lef); + }; + + + var overFill = opts.items.visible+nI-itms.total; + + // rearrange items + _moveitems = function() { + if (overFill > 0) + { + $cfs.children().slice(itms.total).remove(); + } + var l_itm = $cfs.children().slice(0, nI).appendTo($cfs).last(); + if (overFill > 0) + { + i_new = gi_getCurrentItems(a_itm, opts); + } + sc_showHiddenItems(hiddenitems); + + if (opts.usePadding) + { + if (itms.total < opts.items.visible+nI) { + var i_cur_l = $cfs.children().eq(opts.items.visible-1); + i_cur_l.css(opts.d['marginRight'], i_cur_l.data('_cfs_origCssMargin') + opts.padding[opts.d[1]]); + } + l_itm.css(opts.d['marginRight'], l_itm.data('_cfs_origCssMargin')); + } + }; + + + var cb_arguments = sc_mapCallbackArguments(i_old, i_skp, i_new, nI, 'next', a_dur, w_siz); + + // fire onAfter callbacks + _onafter = function() { + $cfs.css('zIndex', $cfs.data('_cfs_origCssZindex')); + sc_afterScroll($cfs, $cf2, sO); + crsl.isScrolling = false; + clbk.onAfter = sc_fireCallbacks($tt0, sO, 'onAfter', cb_arguments, clbk); + queu = sc_fireQueue($cfs, queu, conf); + + if (!crsl.isPaused) + { + $cfs.trigger(cf_e('play', conf)); + } + }; + + // fire onBefore callbacks + crsl.isScrolling = true; + tmrs = sc_clearTimers(tmrs); + clbk.onBefore = sc_fireCallbacks($tt0, sO, 'onBefore', cb_arguments, clbk); + + switch(sO.fx) + { + case 'none': + $cfs.css(a_cfs); + _s_wrapper(); + _s_paddingold(); + _s_paddingcur(); + _position(); + _moveitems(); + _onafter(); + break; + + case 'fade': + scrl.anims.push([$cfs, { 'opacity': 0 }, function() { + _s_wrapper(); + _s_paddingold(); + _s_paddingcur(); + _position(); + _moveitems(); + scrl = sc_setScroll(a_dur, sO.easing, conf); + scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]); + sc_startScroll(scrl, conf); + }]); + break; + + case 'crossfade': + $cfs.css({ 'opacity': 0 }); + scrl.anims.push([$cf2, { 'opacity': 0 }]); + scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]); + _a_wrapper(); + _s_paddingold(); + _s_paddingcur(); + _position(); + _moveitems(); + break; + + case 'cover': + $cfs.css(opts.d['left'], $wrp[opts.d['width']]()); + scrl.anims.push([$cfs, a_lef, _onafter]); + _a_wrapper(); + _s_paddingold(); + _s_paddingcur(); + _moveitems(); + break; + + case 'cover-fade': + $cfs.css(opts.d['left'], $wrp[opts.d['width']]()); + scrl.anims.push([$cf2, { 'opacity': 0 }]); + scrl.anims.push([$cfs, a_lef, _onafter]); + _a_wrapper(); + _s_paddingold(); + _s_paddingcur(); + _moveitems(); + break; + + case 'uncover': + scrl.anims.push([$cf2, a_cfs_vis, _onafter]); + _a_wrapper(); + _s_paddingold(); + _s_paddingcur(); + _position(); + _moveitems(); + break; + + case 'uncover-fade': + $cfs.css({ 'opacity': 0 }); + scrl.anims.push([$cfs, { 'opacity': 1 }]); + scrl.anims.push([$cf2, a_cfs_vis, _onafter]); + _a_wrapper(); + _s_paddingold(); + _s_paddingcur(); + _position(); + _moveitems(); + break; + + default: + scrl.anims.push([$cfs, a_cfs, function() { + _position(); + _moveitems(); + _onafter(); + }]); + _a_wrapper(); + _a_paddingold(); + _a_paddingcur(); + break; + } + + sc_startScroll(scrl, conf); + cf_setCookie(opts.cookie, $cfs, conf); + + $cfs.trigger(cf_e('updatePageStatus', conf), [false, w_siz]); + + return true; + }); + + + // slideTo event + $cfs.bind(cf_e('slideTo', conf), function(e, num, dev, org, obj, dir, clb) { + e.stopPropagation(); + + var v = [num, dev, org, obj, dir, clb], + t = ['string/number/object', 'number', 'boolean', 'object', 'string', 'function'], + a = cf_sortParams(v, t); + + obj = a[3]; + dir = a[4]; + clb = a[5]; + + num = gn_getItemIndex(a[0], a[1], a[2], itms, $cfs); + + if (num == 0) + { + return false; + } + if (!is_object(obj)) + { + obj = false; + } + + if (dir != 'prev' && dir != 'next') + { + if (opts.circular) + { + dir = (num <= itms.total / 2) ? 'next' : 'prev'; + } + else + { + dir = (itms.first == 0 || itms.first > num) ? 'next' : 'prev'; + } + } + + if (dir == 'prev') + { + num = itms.total-num; + } + $cfs.trigger(cf_e(dir, conf), [obj, num, clb]); + + return true; + }); + + + // prevPage event + $cfs.bind(cf_e('prevPage', conf), function(e, obj, clb) { + e.stopPropagation(); + var cur = $cfs.triggerHandler(cf_e('currentPage', conf)); + return $cfs.triggerHandler(cf_e('slideToPage', conf), [cur-1, obj, 'prev', clb]); + }); + + + // nextPage event + $cfs.bind(cf_e('nextPage', conf), function(e, obj, clb) { + e.stopPropagation(); + var cur = $cfs.triggerHandler(cf_e('currentPage', conf)); + return $cfs.triggerHandler(cf_e('slideToPage', conf), [cur+1, obj, 'next', clb]); + }); + + + // slideToPage event + $cfs.bind(cf_e('slideToPage', conf), function(e, pag, obj, dir, clb) { + e.stopPropagation(); + if (!is_number(pag)) + { + pag = $cfs.triggerHandler(cf_e('currentPage', conf)); + } + var ipp = opts.pagination.items || opts.items.visible, + max = Math.ceil(itms.total / ipp)-1; + + if (pag < 0) + { + pag = max; + } + if (pag > max) + { + pag = 0; + } + return $cfs.triggerHandler(cf_e('slideTo', conf), [pag*ipp, 0, true, obj, dir, clb]); + }); + + // jumpToStart event + $cfs.bind(cf_e('jumpToStart', conf), function(e, s) { + e.stopPropagation(); + if (s) + { + s = gn_getItemIndex(s, 0, true, itms, $cfs); + } + else + { + s = 0; + } + + s += itms.first; + if (s != 0) + { + if (itms.total > 0) + { + while (s > itms.total) + { + s -= itms.total; + } + } + $cfs.prepend($cfs.children().slice(s, itms.total)); + } + return true; + }); + + + // synchronise event + $cfs.bind(cf_e('synchronise', conf), function(e, s) { + e.stopPropagation(); + if (s) + { + s = cf_getSynchArr(s); + } + else if (opts.synchronise) + { + s = opts.synchronise; + } + else + { + return debug(conf, 'No carousel to synchronise.'); + } + + var n = $cfs.triggerHandler(cf_e('currentPosition', conf)), + x = true; + + for (var j = 0, l = s.length; j < l; j++) + { + if (!s[j][0].triggerHandler(cf_e('slideTo', conf), [n, s[j][3], true])) + { + x = false; + } + } + return x; + }); + + + // queue event + $cfs.bind(cf_e('queue', conf), function(e, dir, opt) { + e.stopPropagation(); + if (is_function(dir)) + { + dir.call($tt0, queu); + } + else if (is_array(dir)) + { + queu = dir; + } + else if (!is_undefined(dir)) + { + queu.push([dir, opt]); + } + return queu; + }); + + + // insertItem event + $cfs.bind(cf_e('insertItem', conf), function(e, itm, num, org, dev) { + e.stopPropagation(); + + var v = [itm, num, org, dev], + t = ['string/object', 'string/number/object', 'boolean', 'number'], + a = cf_sortParams(v, t); + + itm = a[0]; + num = a[1]; + org = a[2]; + dev = a[3]; + + if (is_object(itm) && !is_jquery(itm)) + { + itm = $(itm); + } + else if (is_string(itm)) + { + itm = $(itm); + } + if (!is_jquery(itm) || itm.length == 0) + { + return debug(conf, 'Not a valid object.'); + } + + if (is_undefined(num)) + { + num = 'end'; + } + + sz_storeMargin(itm, opts); + sz_storeOrigCss(itm); + + var orgNum = num, + before = 'before'; + + if (num == 'end') + { + if (org) + { + if (itms.first == 0) + { + num = itms.total-1; + before = 'after'; + } + else + { + num = itms.first; + itms.first += itm.length; + } + if (num < 0) + { + num = 0; + } + } + else + { + num = itms.total-1; + before = 'after'; + } + } + else + { + num = gn_getItemIndex(num, dev, org, itms, $cfs); + } + + var $cit = $cfs.children().eq(num); + if ($cit.length) + { + $cit[before](itm); + } + else + { + debug(conf, 'Correct insert-position not found! Appending item to the end.'); + $cfs.append(itm); + } + + if (orgNum != 'end' && !org) + { + if (num < itms.first) + { + itms.first += itm.length; + } + } + itms.total = $cfs.children().length; + if (itms.first >= itms.total) + { + itms.first -= itms.total; + } + + $cfs.trigger(cf_e('updateSizes', conf)); + $cfs.trigger(cf_e('linkAnchors', conf)); + + return true; + }); + + + // removeItem event + $cfs.bind(cf_e('removeItem', conf), function(e, num, org, dev) { + e.stopPropagation(); + + var v = [num, org, dev], + t = ['string/number/object', 'boolean', 'number'], + a = cf_sortParams(v, t); + + num = a[0]; + org = a[1]; + dev = a[2]; + + var removed = false; + + if (num instanceof $ && num.length > 1) + { + $removed = $(); + num.each(function(i, el) { + var $rem = $cfs.trigger(cf_e('removeItem', conf), [$(this), org, dev]); + if ( $rem ) + { + $removed = $removed.add($rem); + } + }); + return $removed; + } + + if (is_undefined(num) || num == 'end') + { + $removed = $cfs.children().last(); + } + else + { + num = gn_getItemIndex(num, dev, org, itms, $cfs); + var $removed = $cfs.children().eq(num); + if ( $removed.length ) + { + if (num < itms.first) + { + itms.first -= $removed.length; + } + } + } + if ( $removed && $removed.length ) + { + $removed.detach(); + itms.total = $cfs.children().length; + $cfs.trigger(cf_e('updateSizes', conf)); + } + + return $removed; + }); + + + // onBefore and onAfter event + $cfs.bind(cf_e('onBefore', conf)+' '+cf_e('onAfter', conf), function(e, fn) { + e.stopPropagation(); + var eType = e.type.slice(conf.events.prefix.length); + if (is_array(fn)) + { + clbk[eType] = fn; + } + if (is_function(fn)) + { + clbk[eType].push(fn); + } + return clbk[eType]; + }); + + + // currentPosition event + $cfs.bind(cf_e('currentPosition', conf), function(e, fn) { + e.stopPropagation(); + if (itms.first == 0) + { + var val = 0; + } + else + { + var val = itms.total - itms.first; + } + if (is_function(fn)) + { + fn.call($tt0, val); + } + return val; + }); + + + // currentPage event + $cfs.bind(cf_e('currentPage', conf), function(e, fn) { + e.stopPropagation(); + var ipp = opts.pagination.items || opts.items.visible, + max = Math.ceil(itms.total/ipp-1), + nr; + if (itms.first == 0) + { + nr = 0; + } + else if (itms.first < itms.total % ipp) + { + nr = 0; + } + else if (itms.first == ipp && !opts.circular) + { + nr = max; + } + else + { + nr = Math.round((itms.total-itms.first)/ipp); + } + if (nr < 0) + { + nr = 0; + } + if (nr > max) + { + nr = max; + } + if (is_function(fn)) + { + fn.call($tt0, nr); + } + return nr; + }); + + + // currentVisible event + $cfs.bind(cf_e('currentVisible', conf), function(e, fn) { + e.stopPropagation(); + var $i = gi_getCurrentItems($cfs.children(), opts); + if (is_function(fn)) + { + fn.call($tt0, $i); + } + return $i; + }); + + + // slice event + $cfs.bind(cf_e('slice', conf), function(e, f, l, fn) { + e.stopPropagation(); + + if (itms.total == 0) + { + return false; + } + + var v = [f, l, fn], + t = ['number', 'number', 'function'], + a = cf_sortParams(v, t); + + f = (is_number(a[0])) ? a[0] : 0; + l = (is_number(a[1])) ? a[1] : itms.total; + fn = a[2]; + + f += itms.first; + l += itms.first; + + if (items.total > 0) + { + while (f > itms.total) + { + f -= itms.total; + } + while (l > itms.total) + { + l -= itms.total; + } + while (f < 0) + { + f += itms.total; + } + while (l < 0) + { + l += itms.total; + } + } + var $iA = $cfs.children(), + $i; + + if (l > f) + { + $i = $iA.slice(f, l); + } + else + { + $i = $( $iA.slice(f, itms.total).get().concat( $iA.slice(0, l).get() ) ); + } + + if (is_function(fn)) + { + fn.call($tt0, $i); + } + return $i; + }); + + + // isPaused, isStopped and isScrolling events + $cfs.bind(cf_e('isPaused', conf)+' '+cf_e('isStopped', conf)+' '+cf_e('isScrolling', conf), function(e, fn) { + e.stopPropagation(); + var eType = e.type.slice(conf.events.prefix.length), + value = crsl[eType]; + if (is_function(fn)) + { + fn.call($tt0, value); + } + return value; + }); + + + // configuration event + $cfs.bind(cf_e('configuration', conf), function(e, a, b, c) { + e.stopPropagation(); + var reInit = false; + + // return entire configuration-object + if (is_function(a)) + { + a.call($tt0, opts); + } + // set multiple options via object + else if (is_object(a)) + { + opts_orig = $.extend(true, {}, opts_orig, a); + if (b !== false) reInit = true; + else opts = $.extend(true, {}, opts, a); + + } + else if (!is_undefined(a)) + { + + // callback function for specific option + if (is_function(b)) + { + var val = eval('opts.'+a); + if (is_undefined(val)) + { + val = ''; + } + b.call($tt0, val); + } + // set individual option + else if (!is_undefined(b)) + { + if (typeof c !== 'boolean') c = true; + eval('opts_orig.'+a+' = b'); + if (c !== false) reInit = true; + else eval('opts.'+a+' = b'); + } + // return value for specific option + else + { + return eval('opts.'+a); + } + } + if (reInit) + { + sz_resetMargin($cfs.children(), opts); + FN._init(opts_orig); + FN._bind_buttons(); + var sz = sz_setSizes($cfs, opts); + $cfs.trigger(cf_e('updatePageStatus', conf), [true, sz]); + } + return opts; + }); + + + // linkAnchors event + $cfs.bind(cf_e('linkAnchors', conf), function(e, $con, sel) { + e.stopPropagation(); + + if (is_undefined($con)) + { + $con = $('body'); + } + else if (is_string($con)) + { + $con = $($con); + } + if (!is_jquery($con) || $con.length == 0) + { + return debug(conf, 'Not a valid object.'); + } + if (!is_string(sel)) + { + sel = 'a.caroufredsel'; + } + + $con.find(sel).each(function() { + var h = this.hash || ''; + if (h.length > 0 && $cfs.children().index($(h)) != -1) + { + $(this).unbind('click').click(function(e) { + e.preventDefault(); + $cfs.trigger(cf_e('slideTo', conf), h); + }); + } + }); + return true; + }); + + + // updatePageStatus event + $cfs.bind(cf_e('updatePageStatus', conf), function(e, build, sizes) { + e.stopPropagation(); + if (!opts.pagination.container) + { + return; + } + + var ipp = opts.pagination.items || opts.items.visible, + pgs = Math.ceil(itms.total/ipp); + + if (build) + { + if (opts.pagination.anchorBuilder) + { + opts.pagination.container.children().remove(); + opts.pagination.container.each(function() { + for (var a = 0; a < pgs; a++) + { + var i = $cfs.children().eq( gn_getItemIndex(a*ipp, 0, true, itms, $cfs) ); + $(this).append(opts.pagination.anchorBuilder.call(i[0], a+1)); + } + }); + } + opts.pagination.container.each(function() { + $(this).children().unbind(opts.pagination.event).each(function(a) { + $(this).bind(opts.pagination.event, function(e) { + e.preventDefault(); + $cfs.trigger(cf_e('slideTo', conf), [a*ipp, -opts.pagination.deviation, true, opts.pagination]); + }); + }); + }); + } + + var selected = $cfs.triggerHandler(cf_e('currentPage', conf)) + opts.pagination.deviation; + if (selected >= pgs) + { + selected = 0; + } + if (selected < 0) + { + selected = pgs-1; + } + opts.pagination.container.each(function() { + $(this).children().removeClass(cf_c('selected', conf)).eq(selected).addClass(cf_c('selected', conf)); + }); + return true; + }); + + + // updateSizes event + $cfs.bind(cf_e('updateSizes', conf), function(e) { + var vI = opts.items.visible, + a_itm = $cfs.children(), + avail_primary = ms_getParentSize($wrp, opts, 'width'); + + itms.total = a_itm.length; + + if (crsl.primarySizePercentage) + { + opts.maxDimension = avail_primary; + opts[opts.d['width']] = ms_getPercentage(avail_primary, crsl.primarySizePercentage); + } + else + { + opts.maxDimension = ms_getMaxDimension(opts, avail_primary); + } + + if (opts.responsive) + { + opts.items.width = opts.items.sizesConf.width; + opts.items.height = opts.items.sizesConf.height; + opts = in_getResponsiveValues(opts, a_itm, avail_primary); + vI = opts.items.visible; + sz_setResponsiveSizes(opts, a_itm); + } + else if (opts.items.visibleConf.variable) + { + vI = gn_getVisibleItemsNext(a_itm, opts, 0); + } + else if (opts.items.filter != '*') + { + vI = gn_getVisibleItemsNextFilter(a_itm, opts, 0); + } + + if (!opts.circular && itms.first != 0 && vI > itms.first) { + if (opts.items.visibleConf.variable) + { + var nI = gn_getVisibleItemsPrev(a_itm, opts, itms.first) - itms.first; + } + else if (opts.items.filter != '*') + { + var nI = gn_getVisibleItemsPrevFilter(a_itm, opts, itms.first) - itms.first; + } + else + { + var nI = opts.items.visible - itms.first; + } + debug(conf, 'Preventing non-circular: sliding '+nI+' items backward.'); + $cfs.trigger(cf_e('prev', conf), nI); + } + + opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0); + opts.items.visibleConf.old = opts.items.visible; + opts = in_getAlignPadding(opts, a_itm); + + var sz = sz_setSizes($cfs, opts); + $cfs.trigger(cf_e('updatePageStatus', conf), [true, sz]); + nv_showNavi(opts, itms.total, conf); + nv_enableNavi(opts, itms.first, conf); + + return sz; + }); + + + // destroy event + $cfs.bind(cf_e('destroy', conf), function(e, orgOrder) { + e.stopPropagation(); + tmrs = sc_clearTimers(tmrs); + + $cfs.data('_cfs_isCarousel', false); + $cfs.trigger(cf_e('finish', conf)); + if (orgOrder) + { + $cfs.trigger(cf_e('jumpToStart', conf)); + } + sz_restoreOrigCss($cfs.children()); + sz_restoreOrigCss($cfs); + FN._unbind_events(); + FN._unbind_buttons(); + if (conf.wrapper == 'parent') + { + sz_restoreOrigCss($wrp); + } + else + { + $wrp.replaceWith($cfs); + } + + return true; + }); + + + // debug event + $cfs.bind(cf_e('debug', conf), function(e) { + debug(conf, 'Carousel width: ' + opts.width); + debug(conf, 'Carousel height: ' + opts.height); + debug(conf, 'Item widths: ' + opts.items.width); + debug(conf, 'Item heights: ' + opts.items.height); + debug(conf, 'Number of items visible: ' + opts.items.visible); + if (opts.auto.play) + { + debug(conf, 'Number of items scrolled automatically: ' + opts.auto.items); + } + if (opts.prev.button) + { + debug(conf, 'Number of items scrolled backward: ' + opts.prev.items); + } + if (opts.next.button) + { + debug(conf, 'Number of items scrolled forward: ' + opts.next.items); + } + return conf.debug; + }); + + + // triggerEvent, making prefixed and namespaced events accessible from outside + $cfs.bind('_cfs_triggerEvent', function(e, n, o) { + e.stopPropagation(); + return $cfs.triggerHandler(cf_e(n, conf), o); + }); + }; // /bind_events + + + FN._unbind_events = function() { + $cfs.unbind(cf_e('', conf)); + $cfs.unbind(cf_e('', conf, false)); + $cfs.unbind('_cfs_triggerEvent'); + }; // /unbind_events + + + FN._bind_buttons = function() { + FN._unbind_buttons(); + nv_showNavi(opts, itms.total, conf); + nv_enableNavi(opts, itms.first, conf); + + if (opts.auto.pauseOnHover) + { + var pC = bt_pauseOnHoverConfig(opts.auto.pauseOnHover); + $wrp.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); }) + .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); }); + } + + // play button + if (opts.auto.button) + { + opts.auto.button.bind(cf_e(opts.auto.event, conf, false), function(e) { + e.preventDefault(); + var ev = false, + pC = null; + + if (crsl.isPaused) + { + ev = 'play'; + } + else if (opts.auto.pauseOnEvent) + { + ev = 'pause'; + pC = bt_pauseOnHoverConfig(opts.auto.pauseOnEvent); + } + if (ev) + { + $cfs.trigger(cf_e(ev, conf), pC); + } + }); + } + + // prev button + if (opts.prev.button) + { + opts.prev.button.bind(cf_e(opts.prev.event, conf, false), function(e) { + e.preventDefault(); + $cfs.trigger(cf_e('prev', conf)); + }); + if (opts.prev.pauseOnHover) + { + var pC = bt_pauseOnHoverConfig(opts.prev.pauseOnHover); + opts.prev.button.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); }) + .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); }); + } + } + + // next butotn + if (opts.next.button) + { + opts.next.button.bind(cf_e(opts.next.event, conf, false), function(e) { + e.preventDefault(); + $cfs.trigger(cf_e('next', conf)); + }); + if (opts.next.pauseOnHover) + { + var pC = bt_pauseOnHoverConfig(opts.next.pauseOnHover); + opts.next.button.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); }) + .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); }); + } + } + + // pagination + if (opts.pagination.container) + { + if (opts.pagination.pauseOnHover) + { + var pC = bt_pauseOnHoverConfig(opts.pagination.pauseOnHover); + opts.pagination.container.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); }) + .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); }); + } + } + + // prev/next keys + if (opts.prev.key || opts.next.key) + { + $(document).bind(cf_e('keyup', conf, false, true, true), function(e) { + var k = e.keyCode; + if (k == opts.next.key) + { + e.preventDefault(); + $cfs.trigger(cf_e('next', conf)); + } + if (k == opts.prev.key) + { + e.preventDefault(); + $cfs.trigger(cf_e('prev', conf)); + } + }); + } + + // pagination keys + if (opts.pagination.keys) + { + $(document).bind(cf_e('keyup', conf, false, true, true), function(e) { + var k = e.keyCode; + if (k >= 49 && k < 58) + { + k = (k-49) * opts.items.visible; + if (k <= itms.total) + { + e.preventDefault(); + $cfs.trigger(cf_e('slideTo', conf), [k, 0, true, opts.pagination]); + } + } + }); + } + + // swipe + if ($.fn.swipe) + { + var isTouch = 'ontouchstart' in window; + if ((isTouch && opts.swipe.onTouch) || (!isTouch && opts.swipe.onMouse)) + { + var scP = $.extend(true, {}, opts.prev, opts.swipe), + scN = $.extend(true, {}, opts.next, opts.swipe), + swP = function() { $cfs.trigger(cf_e('prev', conf), [scP]) }, + swN = function() { $cfs.trigger(cf_e('next', conf), [scN]) }; + + switch (opts.direction) + { + case 'up': + case 'down': + opts.swipe.options.swipeUp = swN; + opts.swipe.options.swipeDown = swP; + break; + default: + opts.swipe.options.swipeLeft = swN; + opts.swipe.options.swipeRight = swP; + } + if (crsl.swipe) + { + $cfs.swipe('destroy'); + } + $wrp.swipe(opts.swipe.options); + $wrp.css('cursor', 'move'); + crsl.swipe = true; + } + } + + // mousewheel + if ($.fn.mousewheel) + { + + if (opts.mousewheel) + { + var mcP = $.extend(true, {}, opts.prev, opts.mousewheel), + mcN = $.extend(true, {}, opts.next, opts.mousewheel); + + if (crsl.mousewheel) + { + $wrp.unbind(cf_e('mousewheel', conf, false)); + } + $wrp.bind(cf_e('mousewheel', conf, false), function(e, delta) { + e.preventDefault(); + if (delta > 0) + { + $cfs.trigger(cf_e('prev', conf), [mcP]); + } + else + { + $cfs.trigger(cf_e('next', conf), [mcN]); + } + }); + crsl.mousewheel = true; + } + } + + if (opts.auto.play) + { + $cfs.trigger(cf_e('play', conf), opts.auto.delay); + } + + if (crsl.upDateOnWindowResize) + { + var resizeFn = function(e) { + $cfs.trigger(cf_e('finish', conf)); + if (opts.auto.pauseOnResize && !crsl.isPaused) + { + $cfs.trigger(cf_e('play', conf)); + } + sz_resetMargin($cfs.children(), opts); + $cfs.trigger(cf_e('updateSizes', conf)); + }; + + var $w = $(window), + onResize = null; + + if ($.debounce && conf.onWindowResize == 'debounce') + { + onResize = $.debounce(200, resizeFn); + } + else if ($.throttle && conf.onWindowResize == 'throttle') + { + onResize = $.throttle(300, resizeFn); + } + else + { + var _windowWidth = 0, + _windowHeight = 0; + + onResize = function() { + var nw = $w.width(), + nh = $w.height(); + + if (nw != _windowWidth || nh != _windowHeight) + { + resizeFn(); + _windowWidth = nw; + _windowHeight = nh; + } + }; + } + $w.bind(cf_e('resize', conf, false, true, true), onResize); + } + }; // /bind_buttons + + + FN._unbind_buttons = function() { + var ns1 = cf_e('', conf), + ns2 = cf_e('', conf, false); + ns3 = cf_e('', conf, false, true, true); + + $(document).unbind(ns3); + $(window).unbind(ns3); + $wrp.unbind(ns2); + + if (opts.auto.button) + { + opts.auto.button.unbind(ns2); + } + if (opts.prev.button) + { + opts.prev.button.unbind(ns2); + } + if (opts.next.button) + { + opts.next.button.unbind(ns2); + } + if (opts.pagination.container) + { + opts.pagination.container.unbind(ns2); + if (opts.pagination.anchorBuilder) + { + opts.pagination.container.children().remove(); + } + } + if (crsl.swipe) + { + $cfs.swipe('destroy'); + $wrp.css('cursor', 'default'); + crsl.swipe = false; + } + if (crsl.mousewheel) + { + crsl.mousewheel = false; + } + + nv_showNavi(opts, 'hide', conf); + nv_enableNavi(opts, 'removeClass', conf); + + }; // /unbind_buttons + + + + // START + + if (is_boolean(configs)) + { + configs = { + 'debug': configs + }; + } + + // set vars + var crsl = { + 'direction' : 'next', + 'isPaused' : true, + 'isScrolling' : false, + 'isStopped' : false, + 'mousewheel' : false, + 'swipe' : false + }, + itms = { + 'total' : $cfs.children().length, + 'first' : 0 + }, + tmrs = { + 'auto' : null, + 'progress' : null, + 'startTime' : getTime(), + 'timePassed' : 0 + }, + scrl = { + 'isStopped' : false, + 'duration' : 0, + 'startTime' : 0, + 'easing' : '', + 'anims' : [] + }, + clbk = { + 'onBefore' : [], + 'onAfter' : [] + }, + queu = [], + conf = $.extend(true, {}, $.fn.carouFredSel.configs, configs), + opts = {}, + opts_orig = $.extend(true, {}, options), + $wrp = (conf.wrapper == 'parent') + ? $cfs.parent() + : $cfs.wrap('<'+conf.wrapper.element+' class="'+conf.wrapper.classname+'" />').parent(); + + + conf.selector = $cfs.selector; + conf.serialNumber = $.fn.carouFredSel.serialNumber++; + + conf.transition = (conf.transition && $.fn.transition) ? 'transition' : 'animate'; + + // create carousel + FN._init(opts_orig, true, starting_position); + FN._build(); + FN._bind_events(); + FN._bind_buttons(); + + // find item to start + if (is_array(opts.items.start)) + { + var start_arr = opts.items.start; + } + else + { + var start_arr = []; + if (opts.items.start != 0) + { + start_arr.push(opts.items.start); + } + } + if (opts.cookie) + { + start_arr.unshift(parseInt(cf_getCookie(opts.cookie), 10)); + } + + if (start_arr.length > 0) + { + for (var a = 0, l = start_arr.length; a < l; a++) + { + var s = start_arr[a]; + if (s == 0) + { + continue; + } + if (s === true) + { + s = window.location.hash; + if (s.length < 1) + { + continue; + } + } + else if (s === 'random') + { + s = Math.floor(Math.random()*itms.total); + } + if ($cfs.triggerHandler(cf_e('slideTo', conf), [s, 0, true, { fx: 'none' }])) + { + break; + } + } + } + var siz = sz_setSizes($cfs, opts), + itm = gi_getCurrentItems($cfs.children(), opts); + + if (opts.onCreate) + { + opts.onCreate.call($tt0, { + 'width': siz.width, + 'height': siz.height, + 'items': itm + }); + } + + $cfs.trigger(cf_e('updatePageStatus', conf), [true, siz]); + $cfs.trigger(cf_e('linkAnchors', conf)); + + if (conf.debug) + { + $cfs.trigger(cf_e('debug', conf)); + } + + return $cfs; + }; + + + + // GLOBAL PUBLIC + + $.fn.carouFredSel.serialNumber = 1; + $.fn.carouFredSel.defaults = { + 'synchronise' : false, + 'infinite' : true, + 'circular' : true, + 'responsive' : false, + 'direction' : 'left', + 'items' : { + 'start' : 0 + }, + 'scroll' : { + 'easing' : 'swing', + 'duration' : 500, + 'pauseOnHover' : false, + 'event' : 'click', + 'queue' : false + } + }; + $.fn.carouFredSel.configs = { + 'debug' : false, + 'transition' : false, + 'onWindowResize': 'throttle', + 'events' : { + 'prefix' : '', + 'namespace' : 'cfs' + }, + 'wrapper' : { + 'element' : 'div', + 'classname' : 'caroufredsel_wrapper' + }, + 'classnames' : {} + }; + $.fn.carouFredSel.pageAnchorBuilder = function(nr) { + return ''+nr+''; + }; + $.fn.carouFredSel.progressbarUpdater = function(perc) { + $(this).css('width', perc+'%'); + }; + + $.fn.carouFredSel.cookie = { + get: function(n) { + n += '='; + var ca = document.cookie.split(';'); + for (var a = 0, l = ca.length; a < l; a++) + { + var c = ca[a]; + while (c.charAt(0) == ' ') + { + c = c.slice(1); + } + if (c.indexOf(n) == 0) + { + return c.slice(n.length); + } + } + return 0; + }, + set: function(n, v, d) { + var e = ""; + if (d) + { + var date = new Date(); + date.setTime(date.getTime() + (d * 24 * 60 * 60 * 1000)); + e = "; expires=" + date.toGMTString(); + } + document.cookie = n + '=' + v + e + '; path=/'; + }, + remove: function(n) { + $.fn.carouFredSel.cookie.set(n, "", -1); + } + }; + + + // GLOBAL PRIVATE + + // scrolling functions + function sc_setScroll(d, e, c) { + if (c.transition == 'transition') + { + if (e == 'swing') + { + e = 'ease'; + } + } + return { + anims: [], + duration: d, + orgDuration: d, + easing: e, + startTime: getTime() + }; + } + function sc_startScroll(s, c) { + for (var a = 0, l = s.anims.length; a < l; a++) + { + var b = s.anims[a]; + if (!b) + { + continue; + } + b[0][c.transition](b[1], s.duration, s.easing, b[2]); + } + } + function sc_stopScroll(s, finish) { + if (!is_boolean(finish)) + { + finish = true; + } + if (is_object(s.pre)) + { + sc_stopScroll(s.pre, finish); + } + for (var a = 0, l = s.anims.length; a < l; a++) + { + var b = s.anims[a]; + b[0].stop(true); + if (finish) + { + b[0].css(b[1]); + if (is_function(b[2])) + { + b[2](); + } + } + } + if (is_object(s.post)) + { + sc_stopScroll(s.post, finish); + } + } + function sc_afterScroll( $c, $c2, o ) { + if ($c2) + { + $c2.remove(); + } + + switch(o.fx) { + case 'fade': + case 'crossfade': + case 'cover-fade': + case 'uncover-fade': + $c.css('opacity', 1); + $c.css('filter', ''); + break; + } + } + function sc_fireCallbacks($t, o, b, a, c) { + if (o[b]) + { + o[b].call($t, a); + } + if (c[b].length) + { + for (var i = 0, l = c[b].length; i < l; i++) + { + c[b][i].call($t, a); + } + } + return []; + } + function sc_fireQueue($c, q, c) { + + if (q.length) + { + $c.trigger(cf_e(q[0][0], c), q[0][1]); + q.shift(); + } + return q; + } + function sc_hideHiddenItems(hiddenitems) { + hiddenitems.each(function() { + var hi = $(this); + hi.data('_cfs_isHidden', hi.is(':hidden')).hide(); + }); + } + function sc_showHiddenItems(hiddenitems) { + if (hiddenitems) + { + hiddenitems.each(function() { + var hi = $(this); + if (!hi.data('_cfs_isHidden')) + { + hi.show(); + } + }); + } + } + function sc_clearTimers(t) { + if (t.auto) + { + clearTimeout(t.auto); + } + if (t.progress) + { + clearInterval(t.progress); + } + return t; + } + function sc_mapCallbackArguments(i_old, i_skp, i_new, s_itm, s_dir, s_dur, w_siz) { + return { + 'width': w_siz.width, + 'height': w_siz.height, + 'items': { + 'old': i_old, + 'skipped': i_skp, + 'visible': i_new + }, + 'scroll': { + 'items': s_itm, + 'direction': s_dir, + 'duration': s_dur + } + }; + } + function sc_getDuration( sO, o, nI, siz ) { + var dur = sO.duration; + if (sO.fx == 'none') + { + return 0; + } + if (dur == 'auto') + { + dur = o.scroll.duration / o.scroll.items * nI; + } + else if (dur < 10) + { + dur = siz / dur; + } + if (dur < 1) + { + return 0; + } + if (sO.fx == 'fade') + { + dur = dur / 2; + } + return Math.round(dur); + } + + // navigation functions + function nv_showNavi(o, t, c) { + var minimum = (is_number(o.items.minimum)) ? o.items.minimum : o.items.visible + 1; + if (t == 'show' || t == 'hide') + { + var f = t; + } + else if (minimum > t) + { + debug(c, 'Not enough items ('+t+' total, '+minimum+' needed): Hiding navigation.'); + var f = 'hide'; + } + else + { + var f = 'show'; + } + var s = (f == 'show') ? 'removeClass' : 'addClass', + h = cf_c('hidden', c); + + if (o.auto.button) + { + o.auto.button[f]()[s](h); + } + if (o.prev.button) + { + o.prev.button[f]()[s](h); + } + if (o.next.button) + { + o.next.button[f]()[s](h); + } + if (o.pagination.container) + { + o.pagination.container[f]()[s](h); + } + } + function nv_enableNavi(o, f, c) { + if (o.circular || o.infinite) return; + var fx = (f == 'removeClass' || f == 'addClass') ? f : false, + di = cf_c('disabled', c); + + if (o.auto.button && fx) + { + o.auto.button[fx](di); + } + if (o.prev.button) + { + var fn = fx || (f == 0) ? 'addClass' : 'removeClass'; + o.prev.button[fn](di); + } + if (o.next.button) + { + var fn = fx || (f == o.items.visible) ? 'addClass' : 'removeClass'; + o.next.button[fn](di); + } + } + + // get object functions + function go_getObject($tt, obj) { + if (is_function(obj)) + { + obj = obj.call($tt); + } + else if (is_undefined(obj)) + { + obj = {}; + } + return obj; + } + function go_getItemsObject($tt, obj) { + obj = go_getObject($tt, obj); + if (is_number(obj)) + { + obj = { + 'visible': obj + }; + } + else if (obj == 'variable') + { + obj = { + 'visible': obj, + 'width': obj, + 'height': obj + }; + } + else if (!is_object(obj)) + { + obj = {}; + } + return obj; + } + function go_getScrollObject($tt, obj) { + obj = go_getObject($tt, obj); + if (is_number(obj)) + { + if (obj <= 50) + { + obj = { + 'items': obj + }; + } + else + { + obj = { + 'duration': obj + }; + } + } + else if (is_string(obj)) + { + obj = { + 'easing': obj + }; + } + else if (!is_object(obj)) + { + obj = {}; + } + return obj; + } + function go_getNaviObject($tt, obj) { + obj = go_getObject($tt, obj); + if (is_string(obj)) + { + var temp = cf_getKeyCode(obj); + if (temp == -1) + { + obj = $(obj); + } + else + { + obj = temp; + } + } + return obj; + } + + function go_getAutoObject($tt, obj) { + obj = go_getNaviObject($tt, obj); + if (is_jquery(obj)) + { + obj = { + 'button': obj + }; + } + else if (is_boolean(obj)) + { + obj = { + 'play': obj + }; + } + else if (is_number(obj)) + { + obj = { + 'timeoutDuration': obj + }; + } + if (obj.progress) + { + if (is_string(obj.progress) || is_jquery(obj.progress)) + { + obj.progress = { + 'bar': obj.progress + }; + } + } + return obj; + } + function go_complementAutoObject($tt, obj) { + if (is_function(obj.button)) + { + obj.button = obj.button.call($tt); + } + if (is_string(obj.button)) + { + obj.button = $(obj.button); + } + if (!is_boolean(obj.play)) + { + obj.play = true; + } + if (!is_number(obj.delay)) + { + obj.delay = 0; + } + if (is_undefined(obj.pauseOnEvent)) + { + obj.pauseOnEvent = true; + } + if (!is_boolean(obj.pauseOnResize)) + { + obj.pauseOnResize = true; + } + if (!is_number(obj.timeoutDuration)) + { + obj.timeoutDuration = (obj.duration < 10) + ? 2500 + : obj.duration * 5; + } + if (obj.progress) + { + if (is_function(obj.progress.bar)) + { + obj.progress.bar = obj.progress.bar.call($tt); + } + if (is_string(obj.progress.bar)) + { + obj.progress.bar = $(obj.progress.bar); + } + if (obj.progress.bar) + { + if (!is_function(obj.progress.updater)) + { + obj.progress.updater = $.fn.carouFredSel.progressbarUpdater; + } + if (!is_number(obj.progress.interval)) + { + obj.progress.interval = 50; + } + } + else + { + obj.progress = false; + } + } + return obj; + } + + function go_getPrevNextObject($tt, obj) { + obj = go_getNaviObject($tt, obj); + if (is_jquery(obj)) + { + obj = { + 'button': obj + }; + } + else if (is_number(obj)) + { + obj = { + 'key': obj + }; + } + return obj; + } + function go_complementPrevNextObject($tt, obj) { + if (is_function(obj.button)) + { + obj.button = obj.button.call($tt); + } + if (is_string(obj.button)) + { + obj.button = $(obj.button); + } + if (is_string(obj.key)) + { + obj.key = cf_getKeyCode(obj.key); + } + return obj; + } + + function go_getPaginationObject($tt, obj) { + obj = go_getNaviObject($tt, obj); + if (is_jquery(obj)) + { + obj = { + 'container': obj + }; + } + else if (is_boolean(obj)) + { + obj = { + 'keys': obj + }; + } + return obj; + } + function go_complementPaginationObject($tt, obj) { + if (is_function(obj.container)) + { + obj.container = obj.container.call($tt); + } + if (is_string(obj.container)) + { + obj.container = $(obj.container); + } + if (!is_number(obj.items)) + { + obj.items = false; + } + if (!is_boolean(obj.keys)) + { + obj.keys = false; + } + if (!is_function(obj.anchorBuilder) && !is_false(obj.anchorBuilder)) + { + obj.anchorBuilder = $.fn.carouFredSel.pageAnchorBuilder; + } + if (!is_number(obj.deviation)) + { + obj.deviation = 0; + } + return obj; + } + + function go_getSwipeObject($tt, obj) { + if (is_function(obj)) + { + obj = obj.call($tt); + } + if (is_undefined(obj)) + { + obj = { + 'onTouch': false + }; + } + if (is_true(obj)) + { + obj = { + 'onTouch': obj + }; + } + else if (is_number(obj)) + { + obj = { + 'items': obj + }; + } + return obj; + } + function go_complementSwipeObject($tt, obj) { + if (!is_boolean(obj.onTouch)) + { + obj.onTouch = true; + } + if (!is_boolean(obj.onMouse)) + { + obj.onMouse = false; + } + if (!is_object(obj.options)) + { + obj.options = {}; + } + if (!is_boolean(obj.options.triggerOnTouchEnd)) + { + obj.options.triggerOnTouchEnd = false; + } + return obj; + } + function go_getMousewheelObject($tt, obj) { + if (is_function(obj)) + { + obj = obj.call($tt); + } + if (is_true(obj)) + { + obj = {}; + } + else if (is_number(obj)) + { + obj = { + 'items': obj + }; + } + else if (is_undefined(obj)) + { + obj = false; + } + return obj; + } + function go_complementMousewheelObject($tt, obj) { + return obj; + } + + // get number functions + function gn_getItemIndex(num, dev, org, items, $cfs) { + if (is_string(num)) + { + num = $(num, $cfs); + } + + if (is_object(num)) + { + num = $(num, $cfs); + } + if (is_jquery(num)) + { + num = $cfs.children().index(num); + if (!is_boolean(org)) + { + org = false; + } + } + else + { + if (!is_boolean(org)) + { + org = true; + } + } + if (!is_number(num)) + { + num = 0; + } + if (!is_number(dev)) + { + dev = 0; + } + + if (org) + { + num += items.first; + } + num += dev; + if (items.total > 0) + { + while (num >= items.total) + { + num -= items.total; + } + while (num < 0) + { + num += items.total; + } + } + return num; + } + + // items prev + function gn_getVisibleItemsPrev(i, o, s) { + var t = 0, + x = 0; + + for (var a = s; a >= 0; a--) + { + var j = i.eq(a); + t += (j.is(':visible')) ? j[o.d['outerWidth']](true) : 0; + if (t > o.maxDimension) + { + return x; + } + if (a == 0) + { + a = i.length; + } + x++; + } + } + function gn_getVisibleItemsPrevFilter(i, o, s) { + return gn_getItemsPrevFilter(i, o.items.filter, o.items.visibleConf.org, s); + } + function gn_getScrollItemsPrevFilter(i, o, s, m) { + return gn_getItemsPrevFilter(i, o.items.filter, m, s); + } + function gn_getItemsPrevFilter(i, f, m, s) { + var t = 0, + x = 0; + + for (var a = s, l = i.length; a >= 0; a--) + { + x++; + if (x == l) + { + return x; + } + + var j = i.eq(a); + if (j.is(f)) + { + t++; + if (t == m) + { + return x; + } + } + if (a == 0) + { + a = l; + } + } + } + + function gn_getVisibleOrg($c, o) { + return o.items.visibleConf.org || $c.children().slice(0, o.items.visible).filter(o.items.filter).length; + } + + // items next + function gn_getVisibleItemsNext(i, o, s) { + var t = 0, + x = 0; + + for (var a = s, l = i.length-1; a <= l; a++) + { + var j = i.eq(a); + + t += (j.is(':visible')) ? j[o.d['outerWidth']](true) : 0; + if (t > o.maxDimension) + { + return x; + } + + x++; + if (x == l+1) + { + return x; + } + if (a == l) + { + a = -1; + } + } + } + function gn_getVisibleItemsNextTestCircular(i, o, s, l) { + var v = gn_getVisibleItemsNext(i, o, s); + if (!o.circular) + { + if (s + v > l) + { + v = l - s; + } + } + return v; + } + function gn_getVisibleItemsNextFilter(i, o, s) { + return gn_getItemsNextFilter(i, o.items.filter, o.items.visibleConf.org, s, o.circular); + } + function gn_getScrollItemsNextFilter(i, o, s, m) { + return gn_getItemsNextFilter(i, o.items.filter, m+1, s, o.circular) - 1; + } + function gn_getItemsNextFilter(i, f, m, s, c) { + var t = 0, + x = 0; + + for (var a = s, l = i.length-1; a <= l; a++) + { + x++; + if (x >= l) + { + return x; + } + + var j = i.eq(a); + if (j.is(f)) + { + t++; + if (t == m) + { + return x; + } + } + if (a == l) + { + a = -1; + } + } + } + + // get items functions + function gi_getCurrentItems(i, o) { + return i.slice(0, o.items.visible); + } + function gi_getOldItemsPrev(i, o, n) { + return i.slice(n, o.items.visibleConf.old+n); + } + function gi_getNewItemsPrev(i, o) { + return i.slice(0, o.items.visible); + } + function gi_getOldItemsNext(i, o) { + return i.slice(0, o.items.visibleConf.old); + } + function gi_getNewItemsNext(i, o, n) { + return i.slice(n, o.items.visible+n); + } + + // sizes functions + function sz_storeMargin(i, o, d) { + if (o.usePadding) + { + if (!is_string(d)) + { + d = '_cfs_origCssMargin'; + } + i.each(function() { + var j = $(this), + m = parseInt(j.css(o.d['marginRight']), 10); + if (!is_number(m)) + { + m = 0; + } + j.data(d, m); + }); + } + } + function sz_resetMargin(i, o, m) { + if (o.usePadding) + { + var x = (is_boolean(m)) ? m : false; + if (!is_number(m)) + { + m = 0; + } + sz_storeMargin(i, o, '_cfs_tempCssMargin'); + i.each(function() { + var j = $(this); + j.css(o.d['marginRight'], ((x) ? j.data('_cfs_tempCssMargin') : m + j.data('_cfs_origCssMargin'))); + }); + } + } + function sz_storeOrigCss(i) { + i.each(function() { + var j = $(this); + j.data('_cfs_origCss', j.attr('style') || ''); + }); + } + function sz_restoreOrigCss(i) { + i.each(function() { + var j = $(this); + j.attr('style', j.data('_cfs_origCss') || ''); + }); + } + function sz_setResponsiveSizes(o, all) { + var visb = o.items.visible, + newS = o.items[o.d['width']], + seco = o[o.d['height']], + secp = is_percentage(seco); + + all.each(function() { + var $t = $(this), + nw = newS - ms_getPaddingBorderMargin($t, o, 'Width'); + + $t[o.d['width']](nw); + if (secp) + { + $t[o.d['height']](ms_getPercentage(nw, seco)); + } + }); + } + function sz_setSizes($c, o) { + var $w = $c.parent(), + $i = $c.children(), + $v = gi_getCurrentItems($i, o), + sz = cf_mapWrapperSizes(ms_getSizes($v, o, true), o, false); + + $w.css(sz); + + if (o.usePadding) + { + var p = o.padding, + r = p[o.d[1]]; + + if (o.align && r < 0) + { + r = 0; + } + var $l = $v.last(); + $l.css(o.d['marginRight'], $l.data('_cfs_origCssMargin') + r); + $c.css(o.d['top'], p[o.d[0]]); + $c.css(o.d['left'], p[o.d[3]]); + } + + $c.css(o.d['width'], sz[o.d['width']]+(ms_getTotalSize($i, o, 'width')*2)); + $c.css(o.d['height'], ms_getLargestSize($i, o, 'height')); + return sz; + } + + // measuring functions + function ms_getSizes(i, o, wrapper) { + return [ms_getTotalSize(i, o, 'width', wrapper), ms_getLargestSize(i, o, 'height', wrapper)]; + } + function ms_getLargestSize(i, o, dim, wrapper) { + if (!is_boolean(wrapper)) + { + wrapper = false; + } + if (is_number(o[o.d[dim]]) && wrapper) + { + return o[o.d[dim]]; + } + if (is_number(o.items[o.d[dim]])) + { + return o.items[o.d[dim]]; + } + dim = (dim.toLowerCase().indexOf('width') > -1) ? 'outerWidth' : 'outerHeight'; + return ms_getTrueLargestSize(i, o, dim); + } + function ms_getTrueLargestSize(i, o, dim) { + var s = 0; + + for (var a = 0, l = i.length; a < l; a++) + { + var j = i.eq(a); + + var m = (j.is(':visible')) ? j[o.d[dim]](true) : 0; + if (s < m) + { + s = m; + } + } + return s; + } + + function ms_getTotalSize(i, o, dim, wrapper) { + if (!is_boolean(wrapper)) + { + wrapper = false; + } + if (is_number(o[o.d[dim]]) && wrapper) + { + return o[o.d[dim]]; + } + if (is_number(o.items[o.d[dim]])) + { + return o.items[o.d[dim]] * i.length; + } + + var d = (dim.toLowerCase().indexOf('width') > -1) ? 'outerWidth' : 'outerHeight', + s = 0; + + for (var a = 0, l = i.length; a < l; a++) + { + var j = i.eq(a); + s += (j.is(':visible')) ? j[o.d[d]](true) : 0; + } + return s; + } + function ms_getParentSize($w, o, d) { + var isVisible = $w.is(':visible'); + if (isVisible) + { + $w.hide(); + } + var s = $w.parent()[o.d[d]](); + if (isVisible) + { + $w.show(); + } + return s; + } + function ms_getMaxDimension(o, a) { + return (is_number(o[o.d['width']])) ? o[o.d['width']] : a; + } + function ms_hasVariableSizes(i, o, dim) { + var s = false, + v = false; + + for (var a = 0, l = i.length; a < l; a++) + { + var j = i.eq(a); + + var c = (j.is(':visible')) ? j[o.d[dim]](true) : 0; + if (s === false) + { + s = c; + } + else if (s != c) + { + v = true; + } + if (s == 0) + { + v = true; + } + } + return v; + } + function ms_getPaddingBorderMargin(i, o, d) { + return i[o.d['outer'+d]](true) - i[o.d[d.toLowerCase()]](); + } + function ms_getPercentage(s, o) { + if (is_percentage(o)) + { + o = parseInt( o.slice(0, -1), 10 ); + if (!is_number(o)) + { + return s; + } + s *= o/100; + } + return s; + } + + // config functions + function cf_e(n, c, pf, ns, rd) { + if (!is_boolean(pf)) + { + pf = true; + } + if (!is_boolean(ns)) + { + ns = true; + } + if (!is_boolean(rd)) + { + rd = false; + } + + if (pf) + { + n = c.events.prefix + n; + } + if (ns) + { + n = n +'.'+ c.events.namespace; + } + if (ns && rd) + { + n += c.serialNumber; + } + + return n; + } + function cf_c(n, c) { + return (is_string(c.classnames[n])) ? c.classnames[n] : n; + } + function cf_mapWrapperSizes(ws, o, p) { + if (!is_boolean(p)) + { + p = true; + } + var pad = (o.usePadding && p) ? o.padding : [0, 0, 0, 0]; + var wra = {}; + + wra[o.d['width']] = ws[0] + pad[1] + pad[3]; + wra[o.d['height']] = ws[1] + pad[0] + pad[2]; + + return wra; + } + function cf_sortParams(vals, typs) { + var arr = []; + for (var a = 0, l1 = vals.length; a < l1; a++) + { + for (var b = 0, l2 = typs.length; b < l2; b++) + { + if (typs[b].indexOf(typeof vals[a]) > -1 && is_undefined(arr[b])) + { + arr[b] = vals[a]; + break; + } + } + } + return arr; + } + function cf_getPadding(p) { + if (is_undefined(p)) + { + return [0, 0, 0, 0]; + } + if (is_number(p)) + { + return [p, p, p, p]; + } + if (is_string(p)) + { + p = p.split('px').join('').split('em').join('').split(' '); + } + + if (!is_array(p)) + { + return [0, 0, 0, 0]; + } + for (var i = 0; i < 4; i++) + { + p[i] = parseInt(p[i], 10); + } + switch (p.length) + { + case 0: + return [0, 0, 0, 0]; + case 1: + return [p[0], p[0], p[0], p[0]]; + case 2: + return [p[0], p[1], p[0], p[1]]; + case 3: + return [p[0], p[1], p[2], p[1]]; + default: + return [p[0], p[1], p[2], p[3]]; + } + } + function cf_getAlignPadding(itm, o) { + var x = (is_number(o[o.d['width']])) ? Math.ceil(o[o.d['width']] - ms_getTotalSize(itm, o, 'width')) : 0; + switch (o.align) + { + case 'left': + return [0, x]; + case 'right': + return [x, 0]; + case 'center': + default: + return [Math.ceil(x/2), Math.floor(x/2)]; + } + } + function cf_getDimensions(o) { + var dm = [ + ['width' , 'innerWidth' , 'outerWidth' , 'height' , 'innerHeight' , 'outerHeight' , 'left', 'top' , 'marginRight' , 0, 1, 2, 3], + ['height' , 'innerHeight' , 'outerHeight' , 'width' , 'innerWidth' , 'outerWidth' , 'top' , 'left', 'marginBottom', 3, 2, 1, 0] + ]; + + var dl = dm[0].length, + dx = (o.direction == 'right' || o.direction == 'left') ? 0 : 1; + + var dimensions = {}; + for (var d = 0; d < dl; d++) + { + dimensions[dm[0][d]] = dm[dx][d]; + } + return dimensions; + } + function cf_getAdjust(x, o, a, $t) { + var v = x; + if (is_function(a)) + { + v = a.call($t, v); + + } + else if (is_string(a)) + { + var p = a.split('+'), + m = a.split('-'); + + if (m.length > p.length) + { + var neg = true, + sta = m[0], + adj = m[1]; + } + else + { + var neg = false, + sta = p[0], + adj = p[1]; + } + + switch(sta) + { + case 'even': + v = (x % 2 == 1) ? x-1 : x; + break; + case 'odd': + v = (x % 2 == 0) ? x-1 : x; + break; + default: + v = x; + break; + } + adj = parseInt(adj, 10); + if (is_number(adj)) + { + if (neg) + { + adj = -adj; + } + v += adj; + } + } + if (!is_number(v) || v < 1) + { + v = 1; + } + return v; + } + function cf_getItemsAdjust(x, o, a, $t) { + return cf_getItemAdjustMinMax(cf_getAdjust(x, o, a, $t), o.items.visibleConf); + } + function cf_getItemAdjustMinMax(v, i) { + if (is_number(i.min) && v < i.min) + { + v = i.min; + } + if (is_number(i.max) && v > i.max) + { + v = i.max; + } + if (v < 1) + { + v = 1; + } + return v; + } + function cf_getSynchArr(s) { + if (!is_array(s)) + { + s = [[s]]; + } + if (!is_array(s[0])) + { + s = [s]; + } + for (var j = 0, l = s.length; j < l; j++) + { + if (is_string(s[j][0])) + { + s[j][0] = $(s[j][0]); + } + if (!is_boolean(s[j][1])) + { + s[j][1] = true; + } + if (!is_boolean(s[j][2])) + { + s[j][2] = true; + } + if (!is_number(s[j][3])) + { + s[j][3] = 0; + } + } + return s; + } + function cf_getKeyCode(k) { + if (k == 'right') + { + return 39; + } + if (k == 'left') + { + return 37; + } + if (k == 'up') + { + return 38; + } + if (k == 'down') + { + return 40; + } + return -1; + } + function cf_setCookie(n, $c, c) { + if (n) + { + var v = $c.triggerHandler(cf_e('currentPosition', c)); + $.fn.carouFredSel.cookie.set(n, v); + } + } + function cf_getCookie(n) { + var c = $.fn.carouFredSel.cookie.get(n); + return (c == '') ? 0 : c; + } + + // init function + function in_mapCss($elem, props) { + var css = {}; + for (var p = 0, l = props.length; p < l; p++) + { + css[props[p]] = $elem.css(props[p]); + } + return css; + } + function in_complementItems(obj, opt, itm, sta) { + if (!is_object(obj.visibleConf)) + { + obj.visibleConf = {}; + } + if (!is_object(obj.sizesConf)) + { + obj.sizesConf = {}; + } + + if (obj.start == 0 && is_number(sta)) + { + obj.start = sta; + } + + // visible items + if (is_object(obj.visible)) + { + obj.visibleConf.min = obj.visible.min; + obj.visibleConf.max = obj.visible.max; + obj.visible = false; + } + else if (is_string(obj.visible)) + { + // variable visible items + if (obj.visible == 'variable') + { + obj.visibleConf.variable = true; + } + // adjust string visible items + else + { + obj.visibleConf.adjust = obj.visible; + } + obj.visible = false; + } + else if (is_function(obj.visible)) + { + obj.visibleConf.adjust = obj.visible; + obj.visible = false; + } + + // set items filter + if (!is_string(obj.filter)) + { + obj.filter = (itm.filter(':hidden').length > 0) ? ':visible' : '*'; + } + + // primary item-size not set + if (!obj[opt.d['width']]) + { + // responsive carousel -> set to largest + if (opt.responsive) + { + debug(true, 'Set a '+opt.d['width']+' for the items!'); + obj[opt.d['width']] = ms_getTrueLargestSize(itm, opt, 'outerWidth'); + } + // non-responsive -> measure it or set to "variable" + else + { + obj[opt.d['width']] = (ms_hasVariableSizes(itm, opt, 'outerWidth')) + ? 'variable' + : itm[opt.d['outerWidth']](true); + } + } + + // secondary item-size not set -> measure it or set to "variable" + if (!obj[opt.d['height']]) + { + obj[opt.d['height']] = (ms_hasVariableSizes(itm, opt, 'outerHeight')) + ? 'variable' + : itm[opt.d['outerHeight']](true); + } + + obj.sizesConf.width = obj.width; + obj.sizesConf.height = obj.height; + return obj; + } + function in_complementVisibleItems(opt, avl) { + // primary item-size variable -> set visible items variable + if (opt.items[opt.d['width']] == 'variable') + { + opt.items.visibleConf.variable = true; + } + if (!opt.items.visibleConf.variable) { + // primary size is number -> calculate visible-items + if (is_number(opt[opt.d['width']])) + { + opt.items.visible = Math.floor(opt[opt.d['width']] / opt.items[opt.d['width']]); + } + // measure and calculate primary size and visible-items + else + { + opt.items.visible = Math.floor(avl / opt.items[opt.d['width']]); + opt[opt.d['width']] = opt.items.visible * opt.items[opt.d['width']]; + if (!opt.items.visibleConf.adjust) + { + opt.align = false; + } + } + if (opt.items.visible == 'Infinity' || opt.items.visible < 1) + { + debug(true, 'Not a valid number of visible items: Set to "variable".'); + opt.items.visibleConf.variable = true; + } + } + return opt; + } + function in_complementPrimarySize(obj, opt, all) { + // primary size set to auto -> measure largest item-size and set it + if (obj == 'auto') + { + obj = ms_getTrueLargestSize(all, opt, 'outerWidth'); + } + return obj; + } + function in_complementSecondarySize(obj, opt, all) { + // secondary size set to auto -> measure largest item-size and set it + if (obj == 'auto') + { + obj = ms_getTrueLargestSize(all, opt, 'outerHeight'); + } + // secondary size not set -> set to secondary item-size + if (!obj) + { + obj = opt.items[opt.d['height']]; + } + return obj; + } + function in_getAlignPadding(o, all) { + var p = cf_getAlignPadding(gi_getCurrentItems(all, o), o); + o.padding[o.d[1]] = p[1]; + o.padding[o.d[3]] = p[0]; + return o; + } + function in_getResponsiveValues(o, all, avl) { + + var visb = cf_getItemAdjustMinMax(Math.ceil(o[o.d['width']] / o.items[o.d['width']]), o.items.visibleConf); + if (visb > all.length) + { + visb = all.length; + } + + var newS = Math.floor(o[o.d['width']]/visb); + + o.items.visible = visb; + o.items[o.d['width']] = newS; + o[o.d['width']] = visb * newS; + return o; + } + + + // buttons functions + function bt_pauseOnHoverConfig(p) { + if (is_string(p)) + { + var i = (p.indexOf('immediate') > -1) ? true : false, + r = (p.indexOf('resume') > -1) ? true : false; + } + else + { + var i = r = false; + } + return [i, r]; + } + function bt_mousesheelNumber(mw) { + return (is_number(mw)) ? mw : null + } + + // helper functions + function is_null(a) { + return (a === null); + } + function is_undefined(a) { + return (is_null(a) || typeof a == 'undefined' || a === '' || a === 'undefined'); + } + function is_array(a) { + return (a instanceof Array); + } + function is_jquery(a) { + return (a instanceof jQuery); + } + function is_object(a) { + return ((a instanceof Object || typeof a == 'object') && !is_null(a) && !is_jquery(a) && !is_array(a) && !is_function(a)); + } + function is_number(a) { + return ((a instanceof Number || typeof a == 'number') && !isNaN(a)); + } + function is_string(a) { + return ((a instanceof String || typeof a == 'string') && !is_undefined(a) && !is_true(a) && !is_false(a)); + } + function is_function(a) { + return (a instanceof Function || typeof a == 'function'); + } + function is_boolean(a) { + return (a instanceof Boolean || typeof a == 'boolean' || is_true(a) || is_false(a)); + } + function is_true(a) { + return (a === true || a === 'true'); + } + function is_false(a) { + return (a === false || a === 'false'); + } + function is_percentage(x) { + return (is_string(x) && x.slice(-1) == '%'); + } + + + function getTime() { + return new Date().getTime(); + } + + function deprecated( o, n ) { + debug(true, o+' is DEPRECATED, support for it will be removed. Use '+n+' instead.'); + } + function debug(d, m) { + if (!is_undefined(window.console) && !is_undefined(window.console.log)) + { + if (is_object(d)) + { + var s = ' ('+d.selector+')'; + d = d.debug; + } + else + { + var s = ''; + } + if (!d) + { + return false; + } + + if (is_string(m)) + { + m = 'carouFredSel'+s+': ' + m; + } + else + { + m = ['carouFredSel'+s+':', m]; + } + window.console.log(m); + } + return false; + } + + + + // EASING FUNCTIONS + $.extend($.easing, { + 'quadratic': function(t) { + var t2 = t * t; + return t * (-t2 * t + 4 * t2 - 6 * t + 4); + }, + 'cubic': function(t) { + return t * (4 * t * t - 9 * t + 6); + }, + 'elastic': function(t) { + var t2 = t * t; + return t * (33 * t2 * t2 - 106 * t2 * t + 126 * t2 - 67 * t + 15); + } + }); + + +})(jQuery); \ No newline at end of file diff --git a/src/wp-content/themes/avada/js/jquery.fitvids-min.js b/src/wp-content/themes/avada/js/jquery.fitvids-min.js new file mode 100644 index 0000000..1f944cb --- /dev/null +++ b/src/wp-content/themes/avada/js/jquery.fitvids-min.js @@ -0,0 +1,9 @@ +/*global jQuery *//*jshint multistr:true browser:true *//*! +* FitVids 1.0.3 +* +* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com +* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ +* Released under the WTFPL license - http://sam.zoy.org/wtfpl/ +* +* Date: Thu Sept 01 18:00:00 2011 -0500 +*/(function(e){"use strict";e.fn.fitVids=function(t){var n={customSelector:null};if(!document.getElementById("fit-vids-style")){var r=document.createElement("div"),i=document.getElementsByTagName("base")[0]||document.getElementsByTagName("script")[0],s="­";r.className="fit-vids-style";r.id="fit-vids-style";r.style.display="none";r.innerHTML=s;i.parentNode.insertBefore(r,i)}t&&e.extend(n,t);return this.each(function(){var t=["iframe[src*='player.vimeo.com']","iframe[src*='youtube.com']","iframe[src*='youtube-nocookie.com']","iframe[src*='kickstarter.com'][src*='video.html']","object","embed"];n.customSelector&&t.push(n.customSelector);var r=e(this).find(t.join(","));r=r.not("object object");r.each(function(){var t=e(this);if(this.tagName.toLowerCase()==="embed"&&t.parent("object").length||t.parent(".fluid-width-video-wrapper").length)return;var n=this.tagName.toLowerCase()==="object"||t.attr("height")&&!isNaN(parseInt(t.attr("height"),10))?parseInt(t.attr("height"),10):t.height(),r=isNaN(parseInt(t.attr("width"),10))?t.width():parseInt(t.attr("width"),10),i=n/r;if(!t.attr("id")){var s="fitvid"+Math.floor(Math.random()*999999);t.attr("id",s)}t.wrap('
                ').parent(".fluid-width-video-wrapper").css("padding-top",i*100+"%");t.removeAttr("height").removeAttr("width")})})}})(window.jQuery||window.Zepto); \ No newline at end of file diff --git a/src/wp-content/themes/avada/js/jquery.fitvids.js b/src/wp-content/themes/avada/js/jquery.fitvids.js new file mode 100644 index 0000000..b77fb55 --- /dev/null +++ b/src/wp-content/themes/avada/js/jquery.fitvids.js @@ -0,0 +1,74 @@ +/*global jQuery */ +/*jshint multistr:true browser:true */ +/*! +* FitVids 1.0.3 +* +* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com +* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ +* Released under the WTFPL license - http://sam.zoy.org/wtfpl/ +* +* Date: Thu Sept 01 18:00:00 2011 -0500 +*/ + +(function( $ ){ + + "use strict"; + + $.fn.fitVids = function( options ) { + var settings = { + customSelector: null + }; + + if(!document.getElementById('fit-vids-style')) { + + var div = document.createElement('div'), + ref = document.getElementsByTagName('base')[0] || document.getElementsByTagName('script')[0], + cssStyles = '­'; + + div.className = 'fit-vids-style'; + div.id = 'fit-vids-style'; + div.style.display = 'none'; + div.innerHTML = cssStyles; + + ref.parentNode.insertBefore(div,ref); + + } + + if ( options ) { + $.extend( settings, options ); + } + + return this.each(function(){ + var selectors = [ + "iframe[src*='player.vimeo.com']", + "iframe[src*='youtube.com']", + "iframe[src*='youtube-nocookie.com']", + "iframe[src*='kickstarter.com'][src*='video.html']", + "object", + "embed" + ]; + + if (settings.customSelector) { + selectors.push(settings.customSelector); + } + + var $allVideos = $(this).find(selectors.join(',')); + $allVideos = $allVideos.not("object object"); // SwfObj conflict patch + + $allVideos.each(function(){ + var $this = $(this); + if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; } + var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(), + width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(), + aspectRatio = height / width; + if(!$this.attr('id')){ + var videoID = 'fitvid' + Math.floor(Math.random()*999999); + $this.attr('id', videoID); + } + $this.wrap('
                ').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+"%"); + $this.removeAttr('height').removeAttr('width'); + }); + }); + }; +// Works with either jQuery or Zepto +})( window.jQuery || window.Zepto ); \ No newline at end of file diff --git a/src/wp-content/themes/avada/js/jquery.flexslider-min.js b/src/wp-content/themes/avada/js/jquery.flexslider-min.js new file mode 100644 index 0000000..9a9cc51 --- /dev/null +++ b/src/wp-content/themes/avada/js/jquery.flexslider-min.js @@ -0,0 +1,5 @@ +/* + * jQuery FlexSlider v2.2.0 + * Copyright 2012 WooThemes + * Contributing Author: Tyler Smith + */(function(e){e.flexslider=function(t,n,r){var i=e(t);i.vars=e.extend({},e.flexslider.defaults,n);var s=i.vars.namespace,o=window.navigator&&window.navigator.msPointerEnabled&&window.MSGesture,u=("ontouchstart"in window||o||window.DocumentTouch&&document instanceof DocumentTouch)&&i.vars.touch,a="click touchend MSPointerUp",f="",l,c=i.vars.direction==="vertical",h=i.vars.reverse,p=i.vars.itemWidth>0,d=i.vars.animation==="fade",v=i.vars.asNavFor!=="",m={},g=!0,r=typeof r!="undefined"?r++:0;e.data(t,"flexslider",i);m={init:function(){i.id=r;i.animating=!1;i.currentSlide=parseInt(i.vars.startAt?i.vars.startAt:0);isNaN(i.currentSlide)&&(i.currentSlide=0);i.animatingTo=i.currentSlide;i.atEnd=i.currentSlide===0||i.currentSlide===i.last;i.containerSelector=i.vars.selector.substr(0,i.vars.selector.search(" "));i.slides=e(i.vars.selector,i);i.container=e(i.containerSelector,i);i.count=i.slides.length;i.syncExists=e(i.vars.sync).length>0;i.vars.animation==="slide"&&(i.vars.animation="swing");i.prop=c?"top":"marginLeft";i.args={};i.manualPause=!1;i.stopped=!1;i.started=!1;i.startTimeout=null;i.transitions=!i.vars.video&&!d&&i.vars.useCSS&&function(){var e=document.createElement("div"),t=["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"];for(var n in t)if(e.style[t[n]]!==undefined){i.pfx=t[n].replace("Perspective","").toLowerCase();i.prop="-"+i.pfx+"-transform";return!0}return!1}();i.vars.controlsContainer!==""&&(i.controlsContainer=e(i.vars.controlsContainer).length>0&&e(i.vars.controlsContainer));i.vars.manualControls!==""&&(i.manualControls=e(i.vars.manualControls).length>0&&e(i.vars.manualControls));if(i.vars.randomize){i.slides.sort(function(){return Math.round(Math.random())-.5});i.container.empty().append(i.slides)}i.doMath();i.setup("init");i.vars.controlNav&&m.controlNav.setup();i.vars.directionNav&&m.directionNav.setup();i.vars.keyboard&&(e(i.containerSelector).length===1||i.vars.multipleKeyboard)&&e(document).bind("keyup"+i.vars.eventNamespace+"-"+i.id,function(e){var t=e.keyCode;if(!i.animating&&(t===39||t===37)){var n=t===39?i.getTarget("next"):t===37?i.getTarget("prev"):!1;i.flexAnimate(n,i.vars.pauseOnAction)}});i.vars.mousewheel&&i.bind("mousewheel"+i.vars.eventNamespace,function(e,t,n,r){e.preventDefault();var s=t<0?i.getTarget("next"):i.getTarget("prev");i.flexAnimate(s,i.vars.pauseOnAction)});i.vars.pausePlay&&m.pausePlay.setup();i.vars.slideshow&&i.vars.pauseInvisible&&m.pauseInvisible.init();if(i.vars.slideshow){i.vars.pauseOnHover&&i.hover(function(){!i.manualPlay&&!i.manualPause&&i.pause()},function(){!i.manualPause&&!i.manualPlay&&!i.stopped&&i.play()});if(!i.vars.pauseInvisible||!m.pauseInvisible.isHidden())i.vars.initDelay>0?i.startTimeout=setTimeout(i.play,i.vars.initDelay):i.play()}v&&m.asNav.setup();u&&i.vars.touch&&m.touch();(!d||d&&i.vars.smoothHeight)&&e(window).bind("resize"+i.vars.eventNamespace+"-"+i.id+" orientationchange"+i.vars.eventNamespace+"-"+i.id+" focus"+i.vars.eventNamespace+"-"+i.id,m.resize);i.find("img").attr("draggable","false");setTimeout(function(){i.vars.start(i)},200)},asNav:{setup:function(){i.asNav=!0;i.animatingTo=Math.floor(i.currentSlide/i.move);i.currentItem=i.currentSlide;i.slides.removeClass(s+"active-slide").eq(i.currentItem).addClass(s+"active-slide");if(!o)i.slides.on("click"+i.vars.eventNamespace,function(t){t.preventDefault();var n=e(this),r=n.index(),o=n.offset().left-e(i).scrollLeft();if(o<=0&&n.hasClass(s+"active-slide"))i.flexAnimate(i.getTarget("prev"),!0);else if(!e(i.vars.asNavFor).data("flexslider").animating&&!n.hasClass(s+"active-slide")){i.direction=i.currentItem');if(i.pagingCount>1)for(var u=0;u':""+n+"";if("thumbnails"===i.vars.controlNav&&!0===i.vars.thumbCaptions){var l=o.attr("data-thumbcaption");""!=l&&undefined!=l&&(r+=''+l+"")}i.controlNavScaffold.append("
              24. "+r+"
              25. ");n++}i.controlsContainer?e(i.controlsContainer).append(i.controlNavScaffold):i.append(i.controlNavScaffold);m.controlNav.set();m.controlNav.active();i.controlNavScaffold.delegate("a, img",a,function(t){t.preventDefault();if(f===""||f===t.type){var n=e(this),r=i.controlNav.index(n);if(!n.hasClass(s+"active")){i.direction=r>i.currentSlide?"next":"prev";i.flexAnimate(r,i.vars.pauseOnAction)}}f===""&&(f=t.type);m.setToClearWatchedEvent()})},setupManual:function(){i.controlNav=i.manualControls;m.controlNav.active();i.controlNav.bind(a,function(t){t.preventDefault();if(f===""||f===t.type){var n=e(this),r=i.controlNav.index(n);if(!n.hasClass(s+"active")){r>i.currentSlide?i.direction="next":i.direction="prev";i.flexAnimate(r,i.vars.pauseOnAction)}}f===""&&(f=t.type);m.setToClearWatchedEvent()})},set:function(){var t=i.vars.controlNav==="thumbnails"?"img":"a";i.controlNav=e("."+s+"control-nav li "+t,i.controlsContainer?i.controlsContainer:i)},active:function(){i.controlNav.removeClass(s+"active").eq(i.animatingTo).addClass(s+"active")},update:function(t,n){i.pagingCount>1&&t==="add"?i.controlNavScaffold.append(e("
              26. "+i.count+"
              27. ")):i.pagingCount===1?i.controlNavScaffold.find("li").remove():i.controlNav.eq(n).closest("li").remove();m.controlNav.set();i.pagingCount>1&&i.pagingCount!==i.controlNav.length?i.update(n,t):m.controlNav.active()}},directionNav:{setup:function(){var t=e('");if(i.controlsContainer){e(i.controlsContainer).append(t);i.directionNav=e("."+s+"direction-nav li a",i.controlsContainer)}else{i.append(t);i.directionNav=e("."+s+"direction-nav li a",i)}m.directionNav.update();i.directionNav.bind(a,function(t){t.preventDefault();var n;if(f===""||f===t.type){n=e(this).hasClass(s+"next")?i.getTarget("next"):i.getTarget("prev");i.flexAnimate(n,i.vars.pauseOnAction)}f===""&&(f=t.type);m.setToClearWatchedEvent()})},update:function(){var e=s+"disabled";i.pagingCount===1?i.directionNav.addClass(e).attr("tabindex","-1"):i.vars.animationLoop?i.directionNav.removeClass(e).removeAttr("tabindex"):i.animatingTo===0?i.directionNav.removeClass(e).filter("."+s+"prev").addClass(e).attr("tabindex","-1"):i.animatingTo===i.last?i.directionNav.removeClass(e).filter("."+s+"next").addClass(e).attr("tabindex","-1"):i.directionNav.removeClass(e).removeAttr("tabindex")}},pausePlay:{setup:function(){var t=e('
                ');if(i.controlsContainer){i.controlsContainer.append(t);i.pausePlay=e("."+s+"pauseplay a",i.controlsContainer)}else{i.append(t);i.pausePlay=e("."+s+"pauseplay a",i)}m.pausePlay.update(i.vars.slideshow?s+"pause":s+"play");i.pausePlay.bind(a,function(t){t.preventDefault();if(f===""||f===t.type)if(e(this).hasClass(s+"pause")){i.manualPause=!0;i.manualPlay=!1;i.pause()}else{i.manualPause=!1;i.manualPlay=!0;i.play()}f===""&&(f=t.type);m.setToClearWatchedEvent()})},update:function(e){e==="play"?i.pausePlay.removeClass(s+"pause").addClass(s+"play").html(i.vars.playText):i.pausePlay.removeClass(s+"play").addClass(s+"pause").html(i.vars.pauseText)}},touch:function(){var e,n,r,s,u,a,f=!1,l=0,v=0,m=0;if(!o){t.addEventListener("touchstart",g,!1);function g(o){if(i.animating)o.preventDefault();else if(window.navigator.msPointerEnabled||o.touches.length===1){i.pause();s=c?i.h:i.w;a=Number(new Date);l=o.touches[0].pageX;v=o.touches[0].pageY;r=p&&h&&i.animatingTo===i.last?0:p&&h?i.limit-(i.itemW+i.vars.itemMargin)*i.move*i.animatingTo:p&&i.currentSlide===i.last?i.limit:p?(i.itemW+i.vars.itemMargin)*i.move*i.currentSlide:h?(i.last-i.currentSlide+i.cloneOffset)*s:(i.currentSlide+i.cloneOffset)*s;e=c?v:l;n=c?l:v;t.addEventListener("touchmove",y,!1);t.addEventListener("touchend",b,!1)}}function y(o){l=o.touches[0].pageX;v=o.touches[0].pageY;u=c?e-v:e-l;f=c?Math.abs(u)h){o.preventDefault();if(!d&&i.transitions){i.vars.animationLoop||(u/=i.currentSlide===0&&u<0||i.currentSlide===i.last&&u>0?Math.abs(u)/s+2:1);i.setProps(r+u,"setTouch")}}else t.removeEventListener("touchmove",y,!1)}function b(o){t.removeEventListener("touchmove",y,!1);if(i.animatingTo===i.currentSlide&&!f&&u!==null){var l=h?-u:u,c=l>0?i.getTarget("next"):i.getTarget("prev");i.canAdvance(c)&&(Number(new Date)-a<550&&Math.abs(l)>50||Math.abs(l)>s/2)?i.flexAnimate(c,i.vars.pauseOnAction):d||i.flexAnimate(i.currentSlide,i.vars.pauseOnAction,!0)}t.removeEventListener("touchend",b,!1);e=null;n=null;u=null;r=null}}else{t.style.msTouchAction="none";t._gesture=new MSGesture;t._gesture.target=t;t.addEventListener("MSPointerDown",w,!1);t._slider=i;t.addEventListener("MSGestureChange",E,!1);t.addEventListener("MSGestureEnd",S,!1);function w(e){e.stopPropagation();if(i.animating)e.preventDefault();else{i.pause();t._gesture.addPointer(e.pointerId);m=0;s=c?i.h:i.w;a=Number(new Date);r=p&&h&&i.animatingTo===i.last?0:p&&h?i.limit-(i.itemW+i.vars.itemMargin)*i.move*i.animatingTo:p&&i.currentSlide===i.last?i.limit:p?(i.itemW+i.vars.itemMargin)*i.move*i.currentSlide:h?(i.last-i.currentSlide+i.cloneOffset)*s:(i.currentSlide+i.cloneOffset)*s}}function E(e){e.stopPropagation();var n=e.target._slider;if(!n)return;var i=-e.translationX,o=-e.translationY;m+=c?o:i;u=m;f=c?Math.abs(m)500){e.preventDefault();if(!d&&n.transitions){n.vars.animationLoop||(u=m/(n.currentSlide===0&&m<0||n.currentSlide===n.last&&m>0?Math.abs(m)/s+2:1));n.setProps(r+u,"setTouch")}}}function S(t){t.stopPropagation();var i=t.target._slider;if(!i)return;if(i.animatingTo===i.currentSlide&&!f&&u!==null){var o=h?-u:u,l=o>0?i.getTarget("next"):i.getTarget("prev");i.canAdvance(l)&&(Number(new Date)-a<550&&Math.abs(o)>50||Math.abs(o)>s/2)?i.flexAnimate(l,i.vars.pauseOnAction):d||i.flexAnimate(i.currentSlide,i.vars.pauseOnAction,!0)}e=null;n=null;u=null;r=null;m=0}}},resize:function(){if(!i.animating&&i.is(":visible")){p||i.doMath();if(d)m.smoothHeight();else if(p){i.slides.width(i.computedW);i.update(i.pagingCount);i.setProps()}else if(c){i.viewport.height(i.h);i.setProps(i.h,"setTotal")}else{i.vars.smoothHeight&&m.smoothHeight();i.newSlides.width(i.computedW);i.setProps(i.computedW,"setTotal")}}},smoothHeight:function(e){if(!c||d){var t=d?i:i.viewport;e?t.animate({height:i.slides.eq(i.animatingTo).height()},e):t.height(i.slides.eq(i.animatingTo).height())}},sync:function(t){var n=e(i.vars.sync).data("flexslider"),r=i.animatingTo;switch(t){case"animate":n.flexAnimate(r,i.vars.pauseOnAction,!1,!0);break;case"play":!n.playing&&!n.asNav&&n.play();break;case"pause":n.pause()}},pauseInvisible:{visProp:null,init:function(){var e=["webkit","moz","ms","o"];if("hidden"in document)return"hidden";for(var t=0;t0?setTimeout(i.play,i.vars.initDelay):i.play()})}},isHidden:function(){return document[m.pauseInvisible.visProp]||!1}},setToClearWatchedEvent:function(){clearTimeout(l);l=setTimeout(function(){f=""},3e3)}};i.flexAnimate=function(t,n,r,o,a){!i.vars.animationLoop&&t!==i.currentSlide&&(i.direction=t>i.currentSlide?"next":"prev");v&&i.pagingCount===1&&(i.direction=i.currentItemi.limit&&i.visible!==1?i.limit:b}else i.currentSlide===0&&t===i.count-1&&i.vars.animationLoop&&i.direction!=="next"?y=h?(i.count+i.cloneOffset)*l:0:i.currentSlide===i.last&&t===0&&i.vars.animationLoop&&i.direction!=="prev"?y=h?0:(i.count+1)*l:y=h?(i.count-1-t+i.cloneOffset)*l:(t+i.cloneOffset)*l;i.setProps(y,"",i.vars.animationSpeed);if(i.transitions){if(!i.vars.animationLoop||!i.atEnd){i.animating=!1;i.currentSlide=i.animatingTo}i.container.unbind("webkitTransitionEnd"+i.vars.eventNamespace+" transitionend"+i.vars.eventNamespace);+i.container.bind("webkitTransitionEnd"+i.vars.eventNamespace+" transitionend"+i.vars.eventNamespace,function(){i.wrapup(l)})}else i.container.animate(i.args,i.vars.animationSpeed,i.vars.easing,function(){i.wrapup(l)})}else if(!u){i.slides.eq(i.currentSlide).css({zIndex:1}).animate({opacity:0},i.vars.animationSpeed,i.vars.easing);i.slides.eq(t).css({zIndex:2}).animate({opacity:1},i.vars.animationSpeed,i.vars.easing,i.wrapup)}else{i.slides.eq(i.currentSlide).css({opacity:0,zIndex:1});i.slides.eq(t).css({opacity:1,zIndex:2});i.wrapup(l)}i.vars.smoothHeight&&m.smoothHeight(i.vars.animationSpeed)}};i.wrapup=function(e){!d&&!p&&(i.currentSlide===0&&i.animatingTo===i.last&&i.vars.animationLoop?i.setProps(e,"jumpEnd"):i.currentSlide===i.last&&i.animatingTo===0&&i.vars.animationLoop&&i.setProps(e,"jumpStart"));i.animating=!1;i.currentSlide=i.animatingTo;i.vars.after(i)};i.animateSlides=function(){!i.animating&&g&&i.flexAnimate(i.getTarget("next"))};i.pause=function(){clearInterval(i.animatedSlides);i.animatedSlides=null;i.playing=!1;i.vars.pausePlay&&m.pausePlay.update("play");i.syncExists&&m.sync("pause")};i.play=function(){i.playing&&clearInterval(i.animatedSlides);i.animatedSlides=i.animatedSlides||setInterval(i.animateSlides,i.vars.slideshowSpeed);i.started=i.playing=!0;i.vars.pausePlay&&m.pausePlay.update("pause");i.syncExists&&m.sync("play")};i.stop=function(){i.pause();i.stopped=!0};i.canAdvance=function(e,t){var n=v?i.pagingCount-1:i.last;return t?!0:v&&i.currentItem===i.count-1&&e===0&&i.direction==="prev"?!0:v&&i.currentItem===0&&e===i.pagingCount-1&&i.direction!=="next"?!1:e===i.currentSlide&&!v?!1:i.vars.animationLoop?!0:i.atEnd&&i.currentSlide===0&&e===n&&i.direction!=="next"?!1:i.atEnd&&i.currentSlide===n&&e===0&&i.direction==="next"?!1:!0};i.getTarget=function(e){i.direction=e;return e==="next"?i.currentSlide===i.last?0:i.currentSlide+1:i.currentSlide===0?i.last:i.currentSlide-1};i.setProps=function(e,t,n){var r=function(){var n=e?e:(i.itemW+i.vars.itemMargin)*i.move*i.animatingTo,r=function(){if(p)return t==="setTouch"?e:h&&i.animatingTo===i.last?0:h?i.limit-(i.itemW+i.vars.itemMargin)*i.move*i.animatingTo:i.animatingTo===i.last?i.limit:n;switch(t){case"setTotal":return h?(i.count-1-i.currentSlide+i.cloneOffset)*e:(i.currentSlide+i.cloneOffset)*e;case"setTouch":return h?e:e;case"jumpEnd":return h?e:i.count*e;case"jumpStart":return h?i.count*e:e;default:return e}}();return r*-1+"px"}();if(i.transitions){r=c?"translate3d(0,"+r+",0)":"translate3d("+r+",0,0)";n=n!==undefined?n/1e3+"s":"0s";i.container.css("-"+i.pfx+"-transition-duration",n)}i.args[i.prop]=r;(i.transitions||n===undefined)&&i.container.css(i.args)};i.setup=function(t){if(!d){var n,r;if(t==="init"){i.viewport=e('
                ').css({overflow:"hidden",position:"relative"}).appendTo(i).append(i.container);i.cloneCount=0;i.cloneOffset=0;if(h){r=e.makeArray(i.slides).reverse();i.slides=e(r);i.container.empty().append(i.slides)}}if(i.vars.animationLoop&&!p){i.cloneCount=2;i.cloneOffset=1;t!=="init"&&i.container.find(".clone").remove();i.container.append(i.slides.first().clone().addClass("clone").attr("aria-hidden","true")).prepend(i.slides.last().clone().addClass("clone").attr("aria-hidden","true"))}i.newSlides=e(i.vars.selector,i);n=h?i.count-1-i.currentSlide+i.cloneOffset:i.currentSlide+i.cloneOffset;if(c&&!p){i.container.height((i.count+i.cloneCount)*200+"%").css("position","absolute").width("100%");setTimeout(function(){i.newSlides.css({display:"block"});i.doMath();i.viewport.height(i.h);i.setProps(n*i.h,"init")},t==="init"?100:0)}else{i.container.width((i.count+i.cloneCount)*200+"%");i.setProps(n*i.computedW,"init");setTimeout(function(){i.doMath();i.newSlides.css({width:i.computedW,"float":"left",display:"block"});i.vars.smoothHeight&&m.smoothHeight()},t==="init"?100:0)}}else{i.slides.css({width:"100%","float":"left",marginRight:"-100%",position:"relative"});t==="init"&&(u?i.slides.css({opacity:0,display:"block",webkitTransition:"opacity "+i.vars.animationSpeed/1e3+"s ease",zIndex:1}).eq(i.currentSlide).css({opacity:1,zIndex:2}):i.slides.css({opacity:0,display:"block",zIndex:1}).eq(i.currentSlide).css({zIndex:2}).animate({opacity:1},i.vars.animationSpeed,i.vars.easing));i.vars.smoothHeight&&m.smoothHeight()}p||i.slides.removeClass(s+"active-slide").eq(i.currentSlide).addClass(s+"active-slide")};i.doMath=function(){var e=i.slides.first(),t=i.vars.itemMargin,n=i.vars.minItems,r=i.vars.maxItems;i.w=i.viewport===undefined?i.width():i.viewport.width();i.h=e.height();i.boxPadding=e.outerWidth()-e.width();if(p){i.itemT=i.vars.itemWidth+t;i.minW=n?n*i.itemT:i.w;i.maxW=r?r*i.itemT-t:i.w;i.itemW=i.minW>i.w?(i.w-t*(n-1))/n:i.maxWi.w?i.w:i.vars.itemWidth;i.visible=Math.floor(i.w/i.itemW);i.move=i.vars.move>0&&i.vars.movei.w?i.itemW*(i.count-1)+t*(i.count-1):(i.itemW+t)*i.count-i.w-t}else{i.itemW=i.w;i.pagingCount=i.count;i.last=i.count-1}i.computedW=i.itemW-i.boxPadding};i.update=function(e,t){i.doMath();if(!p){ei.controlNav.length)m.controlNav.update("add");else if(t==="remove"&&!p||i.pagingCounti.last){i.currentSlide-=1;i.animatingTo-=1}m.controlNav.update("remove",i.last)}i.vars.directionNav&&m.directionNav.update()};i.addSlide=function(t,n){var r=e(t);i.count+=1;i.last=i.count-1;c&&h?n!==undefined?i.slides.eq(i.count-n).after(r):i.container.prepend(r):n!==undefined?i.slides.eq(n).before(r):i.container.append(r);i.update(n,"add");i.slides=e(i.vars.selector+":not(.clone)",i);i.setup();i.vars.added(i)};i.removeSlide=function(t){var n=isNaN(t)?i.slides.index(e(t)):t;i.count-=1;i.last=i.count-1;isNaN(t)?e(t,i.slides).remove():c&&h?i.slides.eq(i.last).remove():i.slides.eq(t).remove();i.doMath();i.update(n,"remove");i.slides=e(i.vars.selector+":not(.clone)",i);i.setup();i.vars.removed(i)};i.destroy=function(){var t="."+i.vars.namespace;i.vars.controlNav&&i.controlNav.closest(t+"control-nav").remove();i.vars.directionNav&&i.directionNav.closest(t+"direction-nav").remove();i.vars.pausePlay&&i.pausePlay.closest(t+"pauseplay").remove();i.find(".clone").remove();i.unbind(i.vars.eventNamespace);i.vars.animation!="fade"&&i.container.unwrap();i.container.removeAttr("style");i.container.unbind(i.vars.eventNamespace);i.slides.removeAttr("style");i.slides.filter(t+"active-slide").removeClass(i.vars.namespace+"active-slide");i.slides.unbind(i.vars.eventNamespace);e(document).unbind(i.vars.eventNamespace+"-"+i.id);e(window).unbind(i.vars.eventNamespace+"-"+i.id);i.stop();i.removeData("flexslider")};m.init()};e(window).blur(function(e){focused=!1}).focus(function(e){focused=!0});e.flexslider.defaults={namespace:"flex-",eventNamespace:".flexslider",selector:".slides > li",animation:"fade",easing:"swing",direction:"horizontal",reverse:!1,animationLoop:!0,smoothHeight:!1,startAt:0,slideshow:!0,slideshowSpeed:7e3,animationSpeed:600,initDelay:0,randomize:!1,thumbCaptions:!1,pauseOnAction:!0,pauseOnHover:!1,pauseInvisible:!0,useCSS:!0,touch:!0,video:!1,controlNav:!0,directionNav:!0,prevText:"Previous",nextText:"Next",keyboard:!0,multipleKeyboard:!1,mousewheel:!1,pausePlay:!1,pauseText:"Pause",playText:"Play",controlsContainer:"",manualControls:"",sync:"",asNavFor:"",itemWidth:0,itemMargin:0,minItems:1,maxItems:0,move:0,allowOneSlide:!0,start:function(){},before:function(){},after:function(){},end:function(){},added:function(){},removed:function(){}};var t=0;e.fn.flexslider=function(n){n===undefined&&(n={});if(typeof n=="object")return this.each(function(){var r=e(this),i=n.selector?n.selector:".slides > li",s=r.find(i);if(s.length===1&&n.allowOneSlide===!0||s.length===0){s.fadeIn(400);n.start&&n.start(r)}else r.data("flexslider")===undefined&&new e.flexslider(this,n,t++)});var r=e(this).data("flexslider");switch(n){case"play":r.play();break;case"pause":r.pause();break;case"stop":r.stop();break;case"next":r.flexAnimate(r.getTarget("next"),!0);break;case"prev":case"previous":r.flexAnimate(r.getTarget("prev"),!0);break;case"destroy":r.destroy();break;default:typeof n=="number"&&r.flexAnimate(n,!0)}}})(jQuery); \ No newline at end of file diff --git a/src/wp-content/themes/avada/js/jquery.flexslider.js b/src/wp-content/themes/avada/js/jquery.flexslider.js new file mode 100644 index 0000000..8711024 --- /dev/null +++ b/src/wp-content/themes/avada/js/jquery.flexslider.js @@ -0,0 +1,1156 @@ +/* + * jQuery FlexSlider v2.2.0 + * Copyright 2012 WooThemes + * Contributing Author: Tyler Smith + */ +; +(function ($) { + + //FlexSlider: Object Instance + $.flexslider = function(el, options, instanceId) { + var slider = $(el); + + // making variables public + slider.vars = $.extend({}, $.flexslider.defaults, options); + + var namespace = slider.vars.namespace, + msGesture = window.navigator && window.navigator.msPointerEnabled && window.MSGesture, + touch = (( "ontouchstart" in window ) || msGesture || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch, + // depricating this idea, as devices are being released with both of these events + //eventType = (touch) ? "touchend" : "click", + eventType = "click touchend MSPointerUp", + watchedEvent = "", + watchedEventClearTimer, + vertical = slider.vars.direction === "vertical", + reverse = slider.vars.reverse, + carousel = (slider.vars.itemWidth > 0), + fade = slider.vars.animation === "fade", + asNav = slider.vars.asNavFor !== "", + methods = {}, + focused = true; + + var instanceId = ( typeof instanceId !== 'undefined' ) ? instanceId++ : 0 + + // Store a reference to the slider object + $.data(el, "flexslider", slider); + + // Private slider methods + methods = { + init: function() { + slider.id = instanceId; + slider.animating = false; + // Get current slide and make sure it is a number + slider.currentSlide = parseInt( ( slider.vars.startAt ? slider.vars.startAt : 0) ); + if ( isNaN( slider.currentSlide ) ) slider.currentSlide = 0; + slider.animatingTo = slider.currentSlide; + slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last); + slider.containerSelector = slider.vars.selector.substr(0,slider.vars.selector.search(' ')); + slider.slides = $(slider.vars.selector, slider); + slider.container = $(slider.containerSelector, slider); + slider.count = slider.slides.length; + // SYNC: + slider.syncExists = $(slider.vars.sync).length > 0; + // SLIDE: + if (slider.vars.animation === "slide") slider.vars.animation = "swing"; + slider.prop = (vertical) ? "top" : "marginLeft"; + slider.args = {}; + // SLIDESHOW: + slider.manualPause = false; + slider.stopped = false; + //PAUSE WHEN INVISIBLE + slider.started = false; + slider.startTimeout = null; + // TOUCH/USECSS: + slider.transitions = !slider.vars.video && !fade && slider.vars.useCSS && (function() { + var obj = document.createElement('div'), + props = ['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective']; + for (var i in props) { + if ( obj.style[ props[i] ] !== undefined ) { + slider.pfx = props[i].replace('Perspective','').toLowerCase(); + slider.prop = "-" + slider.pfx + "-transform"; + return true; + } + } + return false; + }()); + // CONTROLSCONTAINER: + if (slider.vars.controlsContainer !== "") slider.controlsContainer = $(slider.vars.controlsContainer).length > 0 && $(slider.vars.controlsContainer); + // MANUAL: + if (slider.vars.manualControls !== "") slider.manualControls = $(slider.vars.manualControls).length > 0 && $(slider.vars.manualControls); + + // RANDOMIZE: + if (slider.vars.randomize) { + slider.slides.sort(function() { return (Math.round(Math.random())-0.5); }); + slider.container.empty().append(slider.slides); + } + + slider.doMath(); + + // INIT + slider.setup("init"); + + // CONTROLNAV: + if (slider.vars.controlNav) methods.controlNav.setup(); + + // DIRECTIONNAV: + if (slider.vars.directionNav) methods.directionNav.setup(); + + // KEYBOARD: + if (slider.vars.keyboard && ($(slider.containerSelector).length === 1 || slider.vars.multipleKeyboard)) { + $(document).bind('keyup' + slider.vars.eventNamespace + "-" + slider.id, function(event) { + var keycode = event.keyCode; + if (!slider.animating && (keycode === 39 || keycode === 37)) { + var target = (keycode === 39) ? slider.getTarget('next') : + (keycode === 37) ? slider.getTarget('prev') : false; + slider.flexAnimate(target, slider.vars.pauseOnAction); + } + }); + } + // MOUSEWHEEL: + if (slider.vars.mousewheel) { + slider.bind('mousewheel' + slider.vars.eventNamespace, function(event, delta, deltaX, deltaY) { + event.preventDefault(); + var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev'); + slider.flexAnimate(target, slider.vars.pauseOnAction); + }); + } + + // PAUSEPLAY + if (slider.vars.pausePlay) methods.pausePlay.setup(); + + //PAUSE WHEN INVISIBLE + if (slider.vars.slideshow && slider.vars.pauseInvisible) methods.pauseInvisible.init(); + + // SLIDSESHOW + if (slider.vars.slideshow) { + if (slider.vars.pauseOnHover) { + slider.hover(function() { + if (!slider.manualPlay && !slider.manualPause) slider.pause(); + }, function() { + if (!slider.manualPause && !slider.manualPlay && !slider.stopped) slider.play(); + }); + } + // initialize animation + //If we're visible, or we don't use PageVisibility API + if(!slider.vars.pauseInvisible || !methods.pauseInvisible.isHidden()) { + (slider.vars.initDelay > 0) ? slider.startTimeout = setTimeout(slider.play, slider.vars.initDelay) : slider.play(); + } + } + + // ASNAV: + if (asNav) methods.asNav.setup(); + + // TOUCH + if (touch && slider.vars.touch) methods.touch(); + + // FADE&&SMOOTHHEIGHT || SLIDE: + if (!fade || (fade && slider.vars.smoothHeight)) $(window).bind("resize" + slider.vars.eventNamespace + "-" + slider.id + " orientationchange" + slider.vars.eventNamespace + "-" + slider.id + " focus" + slider.vars.eventNamespace + "-" + slider.id, methods.resize); + + slider.find("img").attr("draggable", "false"); + + // API: start() Callback + setTimeout(function(){ + slider.vars.start(slider); + }, 200); + }, + asNav: { + setup: function() { + slider.asNav = true; + slider.animatingTo = Math.floor(slider.currentSlide/slider.move); + slider.currentItem = slider.currentSlide; + slider.slides.removeClass(namespace + "active-slide").eq(slider.currentItem).addClass(namespace + "active-slide"); + if(!msGesture){ + slider.slides.on("click" + slider.vars.eventNamespace, function(e){ + e.preventDefault(); + var $slide = $(this), + target = $slide.index(); + var posFromLeft = $slide.offset().left - $(slider).scrollLeft(); // Find position of slide relative to left of slider container + if( posFromLeft <= 0 && $slide.hasClass( namespace + 'active-slide' ) ) { + slider.flexAnimate(slider.getTarget("prev"), true); + } else if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass(namespace + "active-slide")) { + slider.direction = (slider.currentItem < target) ? "next" : "prev"; + slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true); + } + }); + }else{ + el._slider = slider; + slider.slides.each(function (){ + var that = this; + that._gesture = new MSGesture(); + that._gesture.target = that; + that.addEventListener("MSPointerDown", function (e){ + e.preventDefault(); + if(e.currentTarget._gesture) + e.currentTarget._gesture.addPointer(e.pointerId); + }, false); + that.addEventListener("MSGestureTap", function (e){ + e.preventDefault(); + var $slide = $(this), + target = $slide.index(); + if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass('active')) { + slider.direction = (slider.currentItem < target) ? "next" : "prev"; + slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true); + } + }); + }); + } + } + }, + controlNav: { + setup: function() { + if (!slider.manualControls) { + methods.controlNav.setupPaging(); + } else { // MANUALCONTROLS: + methods.controlNav.setupManual(); + } + }, + setupPaging: function() { + var type = (slider.vars.controlNav === "thumbnails") ? 'control-thumbs' : 'control-paging', + j = 1, + item, + slide; + + slider.controlNavScaffold = $('
                  '); + + if (slider.pagingCount > 1) { + for (var i = 0; i < slider.pagingCount; i++) { + slide = slider.slides.eq(i); + item = (slider.vars.controlNav === "thumbnails") ? '' : '' + j + ''; + if ( 'thumbnails' === slider.vars.controlNav && true === slider.vars.thumbCaptions ) { + var captn = slide.attr( 'data-thumbcaption' ); + if ( '' != captn && undefined != captn ) item += '' + captn + ''; + } + slider.controlNavScaffold.append('
                1. ' + item + '
                2. '); + j++; + } + } + + // CONTROLSCONTAINER: + (slider.controlsContainer) ? $(slider.controlsContainer).append(slider.controlNavScaffold) : slider.append(slider.controlNavScaffold); + methods.controlNav.set(); + + methods.controlNav.active(); + + slider.controlNavScaffold.delegate('a, img', eventType, function(event) { + event.preventDefault(); + + if (watchedEvent === "" || watchedEvent === event.type) { + var $this = $(this), + target = slider.controlNav.index($this); + + if (!$this.hasClass(namespace + 'active')) { + slider.direction = (target > slider.currentSlide) ? "next" : "prev"; + slider.flexAnimate(target, slider.vars.pauseOnAction); + } + } + + // setup flags to prevent event duplication + if (watchedEvent === "") { + watchedEvent = event.type; + } + methods.setToClearWatchedEvent(); + + }); + }, + setupManual: function() { + slider.controlNav = slider.manualControls; + methods.controlNav.active(); + + slider.controlNav.bind(eventType, function(event) { + event.preventDefault(); + + if (watchedEvent === "" || watchedEvent === event.type) { + var $this = $(this), + target = slider.controlNav.index($this); + + if (!$this.hasClass(namespace + 'active')) { + (target > slider.currentSlide) ? slider.direction = "next" : slider.direction = "prev"; + slider.flexAnimate(target, slider.vars.pauseOnAction); + } + } + + // setup flags to prevent event duplication + if (watchedEvent === "") { + watchedEvent = event.type; + } + methods.setToClearWatchedEvent(); + }); + }, + set: function() { + var selector = (slider.vars.controlNav === "thumbnails") ? 'img' : 'a'; + slider.controlNav = $('.' + namespace + 'control-nav li ' + selector, (slider.controlsContainer) ? slider.controlsContainer : slider); + }, + active: function() { + slider.controlNav.removeClass(namespace + "active").eq(slider.animatingTo).addClass(namespace + "active"); + }, + update: function(action, pos) { + if (slider.pagingCount > 1 && action === "add") { + slider.controlNavScaffold.append($('
                3. ' + slider.count + '
                4. ')); + } else if (slider.pagingCount === 1) { + slider.controlNavScaffold.find('li').remove(); + } else { + slider.controlNav.eq(pos).closest('li').remove(); + } + methods.controlNav.set(); + (slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length) ? slider.update(pos, action) : methods.controlNav.active(); + } + }, + directionNav: { + setup: function() { + var directionNavScaffold = $(''); + + // CONTROLSCONTAINER: + if (slider.controlsContainer) { + $(slider.controlsContainer).append(directionNavScaffold); + slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer); + } else { + slider.append(directionNavScaffold); + slider.directionNav = $('.' + namespace + 'direction-nav li a', slider); + } + + methods.directionNav.update(); + + slider.directionNav.bind(eventType, function(event) { + event.preventDefault(); + var target; + + if (watchedEvent === "" || watchedEvent === event.type) { + target = ($(this).hasClass(namespace + 'next')) ? slider.getTarget('next') : slider.getTarget('prev'); + slider.flexAnimate(target, slider.vars.pauseOnAction); + } + + // setup flags to prevent event duplication + if (watchedEvent === "") { + watchedEvent = event.type; + } + methods.setToClearWatchedEvent(); + }); + }, + update: function() { + var disabledClass = namespace + 'disabled'; + if (slider.pagingCount === 1) { + slider.directionNav.addClass(disabledClass).attr('tabindex', '-1'); + } else if (!slider.vars.animationLoop) { + if (slider.animatingTo === 0) { + slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "prev").addClass(disabledClass).attr('tabindex', '-1'); + } else if (slider.animatingTo === slider.last) { + slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "next").addClass(disabledClass).attr('tabindex', '-1'); + } else { + slider.directionNav.removeClass(disabledClass).removeAttr('tabindex'); + } + } else { + slider.directionNav.removeClass(disabledClass).removeAttr('tabindex'); + } + } + }, + pausePlay: { + setup: function() { + var pausePlayScaffold = $('
                  '); + + // CONTROLSCONTAINER: + if (slider.controlsContainer) { + slider.controlsContainer.append(pausePlayScaffold); + slider.pausePlay = $('.' + namespace + 'pauseplay a', slider.controlsContainer); + } else { + slider.append(pausePlayScaffold); + slider.pausePlay = $('.' + namespace + 'pauseplay a', slider); + } + + methods.pausePlay.update((slider.vars.slideshow) ? namespace + 'pause' : namespace + 'play'); + + slider.pausePlay.bind(eventType, function(event) { + event.preventDefault(); + + if (watchedEvent === "" || watchedEvent === event.type) { + if ($(this).hasClass(namespace + 'pause')) { + slider.manualPause = true; + slider.manualPlay = false; + slider.pause(); + } else { + slider.manualPause = false; + slider.manualPlay = true; + slider.play(); + } + } + + // setup flags to prevent event duplication + if (watchedEvent === "") { + watchedEvent = event.type; + } + methods.setToClearWatchedEvent(); + }); + }, + update: function(state) { + (state === "play") ? slider.pausePlay.removeClass(namespace + 'pause').addClass(namespace + 'play').html(slider.vars.playText) : slider.pausePlay.removeClass(namespace + 'play').addClass(namespace + 'pause').html(slider.vars.pauseText); + } + }, + touch: function() { + var startX, + startY, + offset, + cwidth, + dx, + startT, + scrolling = false, + localX = 0, + localY = 0, + accDx = 0; + + if(!msGesture){ + el.addEventListener('touchstart', onTouchStart, false); + + function onTouchStart(e) { + if (slider.animating) { + e.preventDefault(); + } else if ( ( window.navigator.msPointerEnabled ) || e.touches.length === 1 ) { + slider.pause(); + // CAROUSEL: + cwidth = (vertical) ? slider.h : slider. w; + startT = Number(new Date()); + // CAROUSEL: + + // Local vars for X and Y points. + localX = e.touches[0].pageX; + localY = e.touches[0].pageY; + + offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 : + (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) : + (carousel && slider.currentSlide === slider.last) ? slider.limit : + (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide : + (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth; + startX = (vertical) ? localY : localX; + startY = (vertical) ? localX : localY; + + el.addEventListener('touchmove', onTouchMove, false); + el.addEventListener('touchend', onTouchEnd, false); + } + } + + function onTouchMove(e) { + // Local vars for X and Y points. + + localX = e.touches[0].pageX; + localY = e.touches[0].pageY; + + dx = (vertical) ? startX - localY : startX - localX; + scrolling = (vertical) ? (Math.abs(dx) < Math.abs(localX - startY)) : (Math.abs(dx) < Math.abs(localY - startY)); + + var fxms = 500; + + if ( ! scrolling || Number( new Date() ) - startT > fxms ) { + e.preventDefault(); + if (!fade && slider.transitions) { + if (!slider.vars.animationLoop) { + dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1); + } + slider.setProps(offset + dx, "setTouch"); + } + }else{ + //gesture is not related to slider direction, ignore it + el.removeEventListener('touchmove', onTouchMove, false); + } + } + + function onTouchEnd(e) { + // finish the touch by undoing the touch session + el.removeEventListener('touchmove', onTouchMove, false); + + if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) { + var updateDx = (reverse) ? -dx : dx, + target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev'); + + if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) { + slider.flexAnimate(target, slider.vars.pauseOnAction); + } else { + if (!fade) slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true); + } + } + el.removeEventListener('touchend', onTouchEnd, false); + + startX = null; + startY = null; + dx = null; + offset = null; + } + }else{ + el.style.msTouchAction = "none"; + el._gesture = new MSGesture(); + el._gesture.target = el; + el.addEventListener("MSPointerDown", onMSPointerDown, false); + el._slider = slider; + el.addEventListener("MSGestureChange", onMSGestureChange, false); + el.addEventListener("MSGestureEnd", onMSGestureEnd, false); + + function onMSPointerDown(e){ + e.stopPropagation(); + if (slider.animating) { + e.preventDefault(); + }else{ + slider.pause(); + el._gesture.addPointer(e.pointerId); + accDx = 0; + cwidth = (vertical) ? slider.h : slider. w; + startT = Number(new Date()); + // CAROUSEL: + + offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 : + (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) : + (carousel && slider.currentSlide === slider.last) ? slider.limit : + (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide : + (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth; + } + } + + function onMSGestureChange(e) { + e.stopPropagation(); + var slider = e.target._slider; + if(!slider){ + return; + } + var transX = -e.translationX, + transY = -e.translationY; + + //Accumulate translations. + accDx = accDx + ((vertical) ? transY : transX); + dx = accDx; + scrolling = (vertical) ? (Math.abs(accDx) < Math.abs(-transX)) : (Math.abs(accDx) < Math.abs(-transY)); + + if(e.detail === e.MSGESTURE_FLAG_INERTIA){ + setImmediate(function (){ + el._gesture.stop(); + }); + + return; + } + + if (!scrolling || Number(new Date()) - startT > 500) { + e.preventDefault(); + if (!fade && slider.transitions) { + if (!slider.vars.animationLoop) { + dx = accDx / ((slider.currentSlide === 0 && accDx < 0 || slider.currentSlide === slider.last && accDx > 0) ? (Math.abs(accDx) / cwidth + 2) : 1); + } + slider.setProps(offset + dx, "setTouch"); + } + } + } + + function onMSGestureEnd(e) { + e.stopPropagation(); + var slider = e.target._slider; + if(!slider){ + return; + } + if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) { + var updateDx = (reverse) ? -dx : dx, + target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev'); + + if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) { + slider.flexAnimate(target, slider.vars.pauseOnAction); + } else { + if (!fade) slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true); + } + } + + startX = null; + startY = null; + dx = null; + offset = null; + accDx = 0; + } + } + }, + resize: function() { + if (!slider.animating && slider.is(':visible')) { + if (!carousel) slider.doMath(); + + if (fade) { + // SMOOTH HEIGHT: + methods.smoothHeight(); + } else if (carousel) { //CAROUSEL: + slider.slides.width(slider.computedW); + slider.update(slider.pagingCount); + slider.setProps(); + } + else if (vertical) { //VERTICAL: + slider.viewport.height(slider.h); + slider.setProps(slider.h, "setTotal"); + } else { + // SMOOTH HEIGHT: + if (slider.vars.smoothHeight) methods.smoothHeight(); + slider.newSlides.width(slider.computedW); + slider.setProps(slider.computedW, "setTotal"); + } + } + }, + smoothHeight: function(dur) { + if (!vertical || fade) { + var $obj = (fade) ? slider : slider.viewport; + (dur) ? $obj.animate({"height": slider.slides.eq(slider.animatingTo).height()}, dur) : $obj.height(slider.slides.eq(slider.animatingTo).height()); + } + }, + sync: function(action) { + var $obj = $(slider.vars.sync).data("flexslider"), + target = slider.animatingTo; + + switch (action) { + case "animate": $obj.flexAnimate(target, slider.vars.pauseOnAction, false, true); break; + case "play": if (!$obj.playing && !$obj.asNav) { $obj.play(); } break; + case "pause": $obj.pause(); break; + } + }, + pauseInvisible: { + visProp: null, + init: function() { + var prefixes = ['webkit','moz','ms','o']; + + if ('hidden' in document) return 'hidden'; + for (var i = 0; i < prefixes.length; i++) { + if ((prefixes[i] + 'Hidden') in document) + methods.pauseInvisible.visProp = prefixes[i] + 'Hidden'; + } + if (methods.pauseInvisible.visProp) { + var evtname = methods.pauseInvisible.visProp.replace(/[H|h]idden/,'') + 'visibilitychange'; + document.addEventListener(evtname, function() { + if (methods.pauseInvisible.isHidden()) { + if(slider.startTimeout) clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible + else slider.pause(); //Or just pause + } + else { + if(slider.started) slider.play(); //Initiated before, just play + else (slider.vars.initDelay > 0) ? setTimeout(slider.play, slider.vars.initDelay) : slider.play(); //Didn't init before: simply init or wait for it + } + }); + } + }, + isHidden: function() { + return document[methods.pauseInvisible.visProp] || false; + } + }, + setToClearWatchedEvent: function() { + clearTimeout(watchedEventClearTimer); + watchedEventClearTimer = setTimeout(function() { + watchedEvent = ""; + }, 3000); + } + } + + // public methods + slider.flexAnimate = function(target, pause, override, withSync, fromNav) { + if (!slider.vars.animationLoop && target !== slider.currentSlide) { + slider.direction = (target > slider.currentSlide) ? "next" : "prev"; + } + + if (asNav && slider.pagingCount === 1) slider.direction = (slider.currentItem < target) ? "next" : "prev"; + + if (!slider.animating && (slider.canAdvance(target, fromNav) || override) && slider.is(":visible")) { + if (asNav && withSync) { + var master = $(slider.vars.asNavFor).data('flexslider'); + slider.atEnd = target === 0 || target === slider.count - 1; + master.flexAnimate(target, true, false, true, fromNav); + slider.direction = (slider.currentItem < target) ? "next" : "prev"; + master.direction = slider.direction; + + if (Math.ceil((target + 1)/slider.visible) - 1 !== slider.currentSlide && target !== 0) { + slider.currentItem = target; + slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide"); + target = Math.floor(target/slider.visible); + } else { + slider.currentItem = target; + slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide"); + return false; + } + } + + slider.animating = true; + slider.animatingTo = target; + + // SLIDESHOW: + if (pause) slider.pause(); + + // API: before() animation Callback + slider.vars.before(slider); + + // SYNC: + if (slider.syncExists && !fromNav) methods.sync("animate"); + + // CONTROLNAV + if (slider.vars.controlNav) methods.controlNav.active(); + + // !CAROUSEL: + // CANDIDATE: slide active class (for add/remove slide) + if (!carousel) slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide'); + + // INFINITE LOOP: + // CANDIDATE: atEnd + slider.atEnd = target === 0 || target === slider.last; + + // DIRECTIONNAV: + if (slider.vars.directionNav) methods.directionNav.update(); + + if (target === slider.last) { + // API: end() of cycle Callback + slider.vars.end(slider); + // SLIDESHOW && !INFINITE LOOP: + if (!slider.vars.animationLoop) slider.pause(); + } + + // SLIDE: + if (!fade) { + var dimension = (vertical) ? slider.slides.filter(':first').height() : slider.computedW, + margin, slideString, calcNext; + + // INFINITE LOOP / REVERSE: + if (carousel) { + //margin = (slider.vars.itemWidth > slider.w) ? slider.vars.itemMargin * 2 : slider.vars.itemMargin; + margin = slider.vars.itemMargin; + calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo; + slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext; + } else if (slider.currentSlide === 0 && target === slider.count - 1 && slider.vars.animationLoop && slider.direction !== "next") { + slideString = (reverse) ? (slider.count + slider.cloneOffset) * dimension : 0; + } else if (slider.currentSlide === slider.last && target === 0 && slider.vars.animationLoop && slider.direction !== "prev") { + slideString = (reverse) ? 0 : (slider.count + 1) * dimension; + } else { + slideString = (reverse) ? ((slider.count - 1) - target + slider.cloneOffset) * dimension : (target + slider.cloneOffset) * dimension; + } + slider.setProps(slideString, "", slider.vars.animationSpeed); + if (slider.transitions) { + if (!slider.vars.animationLoop || !slider.atEnd) { + slider.animating = false; + slider.currentSlide = slider.animatingTo; + } + slider.container.unbind("webkitTransitionEnd" + slider.vars.eventNamespace + " transitionend" + slider.vars.eventNamespace); ++ slider.container.bind("webkitTransitionEnd" + slider.vars.eventNamespace + " transitionend" + slider.vars.eventNamespace, function() { + slider.wrapup(dimension); + }); + } else { + slider.container.animate(slider.args, slider.vars.animationSpeed, slider.vars.easing, function(){ + slider.wrapup(dimension); + }); + } + } else { // FADE: + if (!touch) { + //slider.slides.eq(slider.currentSlide).fadeOut(slider.vars.animationSpeed, slider.vars.easing); + //slider.slides.eq(target).fadeIn(slider.vars.animationSpeed, slider.vars.easing, slider.wrapup); + + slider.slides.eq(slider.currentSlide).css({"zIndex": 1}).animate({"opacity": 0}, slider.vars.animationSpeed, slider.vars.easing); + slider.slides.eq(target).css({"zIndex": 2}).animate({"opacity": 1}, slider.vars.animationSpeed, slider.vars.easing, slider.wrapup); + + } else { + slider.slides.eq(slider.currentSlide).css({ "opacity": 0, "zIndex": 1 }); + slider.slides.eq(target).css({ "opacity": 1, "zIndex": 2 }); + slider.wrapup(dimension); + } + } + // SMOOTH HEIGHT: + if (slider.vars.smoothHeight) methods.smoothHeight(slider.vars.animationSpeed); + } + } + slider.wrapup = function(dimension) { + // SLIDE: + if (!fade && !carousel) { + if (slider.currentSlide === 0 && slider.animatingTo === slider.last && slider.vars.animationLoop) { + slider.setProps(dimension, "jumpEnd"); + } else if (slider.currentSlide === slider.last && slider.animatingTo === 0 && slider.vars.animationLoop) { + slider.setProps(dimension, "jumpStart"); + } + } + slider.animating = false; + slider.currentSlide = slider.animatingTo; + // API: after() animation Callback + slider.vars.after(slider); + } + + // SLIDESHOW: + slider.animateSlides = function() { + if (!slider.animating && focused ) slider.flexAnimate(slider.getTarget("next")); + } + // SLIDESHOW: + slider.pause = function() { + clearInterval(slider.animatedSlides); + slider.animatedSlides = null; + slider.playing = false; + // PAUSEPLAY: + if (slider.vars.pausePlay) methods.pausePlay.update("play"); + // SYNC: + if (slider.syncExists) methods.sync("pause"); + } + // SLIDESHOW: + slider.play = function() { + if (slider.playing) clearInterval(slider.animatedSlides); + slider.animatedSlides = slider.animatedSlides || setInterval(slider.animateSlides, slider.vars.slideshowSpeed); + slider.started = slider.playing = true; + // PAUSEPLAY: + if (slider.vars.pausePlay) methods.pausePlay.update("pause"); + // SYNC: + if (slider.syncExists) methods.sync("play"); + } + // STOP: + slider.stop = function () { + slider.pause(); + slider.stopped = true; + } + slider.canAdvance = function(target, fromNav) { + // ASNAV: + var last = (asNav) ? slider.pagingCount - 1 : slider.last; + return (fromNav) ? true : + (asNav && slider.currentItem === slider.count - 1 && target === 0 && slider.direction === "prev") ? true : + (asNav && slider.currentItem === 0 && target === slider.pagingCount - 1 && slider.direction !== "next") ? false : + (target === slider.currentSlide && !asNav) ? false : + (slider.vars.animationLoop) ? true : + (slider.atEnd && slider.currentSlide === 0 && target === last && slider.direction !== "next") ? false : + (slider.atEnd && slider.currentSlide === last && target === 0 && slider.direction === "next") ? false : + true; + } + slider.getTarget = function(dir) { + slider.direction = dir; + if (dir === "next") { + return (slider.currentSlide === slider.last) ? 0 : slider.currentSlide + 1; + } else { + return (slider.currentSlide === 0) ? slider.last : slider.currentSlide - 1; + } + } + + // SLIDE: + slider.setProps = function(pos, special, dur) { + var target = (function() { + var posCheck = (pos) ? pos : ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo, + posCalc = (function() { + if (carousel) { + return (special === "setTouch") ? pos : + (reverse && slider.animatingTo === slider.last) ? 0 : + (reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) : + (slider.animatingTo === slider.last) ? slider.limit : posCheck; + } else { + switch (special) { + case "setTotal": return (reverse) ? ((slider.count - 1) - slider.currentSlide + slider.cloneOffset) * pos : (slider.currentSlide + slider.cloneOffset) * pos; + case "setTouch": return (reverse) ? pos : pos; + case "jumpEnd": return (reverse) ? pos : slider.count * pos; + case "jumpStart": return (reverse) ? slider.count * pos : pos; + default: return pos; + } + } + }()); + + return (posCalc * -1) + "px"; + }()); + + if (slider.transitions) { + target = (vertical) ? "translate3d(0," + target + ",0)" : "translate3d(" + target + ",0,0)"; + dur = (dur !== undefined) ? (dur/1000) + "s" : "0s"; + slider.container.css("-" + slider.pfx + "-transition-duration", dur); + } + + slider.args[slider.prop] = target; + if (slider.transitions || dur === undefined) slider.container.css(slider.args); + } + + slider.setup = function(type) { + // SLIDE: + if (!fade) { + var sliderOffset, arr; + + if (type === "init") { + slider.viewport = $('
                  ').css({"overflow": "hidden", "position": "relative"}).appendTo(slider).append(slider.container); + // INFINITE LOOP: + slider.cloneCount = 0; + slider.cloneOffset = 0; + // REVERSE: + if (reverse) { + arr = $.makeArray(slider.slides).reverse(); + slider.slides = $(arr); + slider.container.empty().append(slider.slides); + } + } + // INFINITE LOOP && !CAROUSEL: + if (slider.vars.animationLoop && !carousel) { + slider.cloneCount = 2; + slider.cloneOffset = 1; + // clear out old clones + if (type !== "init") slider.container.find('.clone').remove(); + slider.container.append(slider.slides.first().clone().addClass('clone').attr('aria-hidden', 'true')).prepend(slider.slides.last().clone().addClass('clone').attr('aria-hidden', 'true')); + } + slider.newSlides = $(slider.vars.selector, slider); + + sliderOffset = (reverse) ? slider.count - 1 - slider.currentSlide + slider.cloneOffset : slider.currentSlide + slider.cloneOffset; + // VERTICAL: + if (vertical && !carousel) { + slider.container.height((slider.count + slider.cloneCount) * 200 + "%").css("position", "absolute").width("100%"); + setTimeout(function(){ + slider.newSlides.css({"display": "block"}); + slider.doMath(); + slider.viewport.height(slider.h); + slider.setProps(sliderOffset * slider.h, "init"); + }, (type === "init") ? 100 : 0); + } else { + slider.container.width((slider.count + slider.cloneCount) * 200 + "%"); + slider.setProps(sliderOffset * slider.computedW, "init"); + setTimeout(function(){ + slider.doMath(); + slider.newSlides.css({"width": slider.computedW, "float": "left", "display": "block"}); + // SMOOTH HEIGHT: + if (slider.vars.smoothHeight) methods.smoothHeight(); + }, (type === "init") ? 100 : 0); + } + } else { // FADE: + slider.slides.css({"width": "100%", "float": "left", "marginRight": "-100%", "position": "relative"}); + if (type === "init") { + if (!touch) { + //slider.slides.eq(slider.currentSlide).fadeIn(slider.vars.animationSpeed, slider.vars.easing); + slider.slides.css({ "opacity": 0, "display": "block", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2}).animate({"opacity": 1},slider.vars.animationSpeed,slider.vars.easing); + } else { + slider.slides.css({ "opacity": 0, "display": "block", "webkitTransition": "opacity " + slider.vars.animationSpeed / 1000 + "s ease", "zIndex": 1 }).eq(slider.currentSlide).css({ "opacity": 1, "zIndex": 2}); + } + } + // SMOOTH HEIGHT: + if (slider.vars.smoothHeight) methods.smoothHeight(); + } + // !CAROUSEL: + // CANDIDATE: active slide + if (!carousel) slider.slides.removeClass(namespace + "active-slide").eq(slider.currentSlide).addClass(namespace + "active-slide"); + } + + + slider.doMath = function() { + var slide = slider.slides.first(), + slideMargin = slider.vars.itemMargin, + minItems = slider.vars.minItems, + maxItems = slider.vars.maxItems; + + slider.w = (slider.viewport===undefined) ? slider.width() : slider.viewport.width(); + slider.h = slide.height(); + slider.boxPadding = slide.outerWidth() - slide.width(); + + // CAROUSEL: + if (carousel) { + slider.itemT = slider.vars.itemWidth + slideMargin; + slider.minW = (minItems) ? minItems * slider.itemT : slider.w; + slider.maxW = (maxItems) ? (maxItems * slider.itemT) - slideMargin : slider.w; + slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * (minItems - 1)))/minItems : + (slider.maxW < slider.w) ? (slider.w - (slideMargin * (maxItems - 1)))/maxItems : + (slider.vars.itemWidth > slider.w) ? slider.w : slider.vars.itemWidth; + + slider.visible = Math.floor(slider.w/(slider.itemW)); + slider.move = (slider.vars.move > 0 && slider.vars.move < slider.visible ) ? slider.vars.move : slider.visible; + slider.pagingCount = Math.ceil(((slider.count - slider.visible)/slider.move) + 1); + slider.last = slider.pagingCount - 1; + slider.limit = (slider.pagingCount === 1) ? 0 : + (slider.vars.itemWidth > slider.w) ? (slider.itemW * (slider.count - 1)) + (slideMargin * (slider.count - 1)) : ((slider.itemW + slideMargin) * slider.count) - slider.w - slideMargin; + } else { + slider.itemW = slider.w; + slider.pagingCount = slider.count; + slider.last = slider.count - 1; + } + slider.computedW = slider.itemW - slider.boxPadding; + } + + + slider.update = function(pos, action) { + slider.doMath(); + + // update currentSlide and slider.animatingTo if necessary + if (!carousel) { + if (pos < slider.currentSlide) { + slider.currentSlide += 1; + } else if (pos <= slider.currentSlide && pos !== 0) { + slider.currentSlide -= 1; + } + slider.animatingTo = slider.currentSlide; + } + + // update controlNav + if (slider.vars.controlNav && !slider.manualControls) { + if ((action === "add" && !carousel) || slider.pagingCount > slider.controlNav.length) { + methods.controlNav.update("add"); + } else if ((action === "remove" && !carousel) || slider.pagingCount < slider.controlNav.length) { + if (carousel && slider.currentSlide > slider.last) { + slider.currentSlide -= 1; + slider.animatingTo -= 1; + } + methods.controlNav.update("remove", slider.last); + } + } + // update directionNav + if (slider.vars.directionNav) methods.directionNav.update(); + + } + + slider.addSlide = function(obj, pos) { + var $obj = $(obj); + + slider.count += 1; + slider.last = slider.count - 1; + + // append new slide + if (vertical && reverse) { + (pos !== undefined) ? slider.slides.eq(slider.count - pos).after($obj) : slider.container.prepend($obj); + } else { + (pos !== undefined) ? slider.slides.eq(pos).before($obj) : slider.container.append($obj); + } + + // update currentSlide, animatingTo, controlNav, and directionNav + slider.update(pos, "add"); + + // update slider.slides + slider.slides = $(slider.vars.selector + ':not(.clone)', slider); + // re-setup the slider to accomdate new slide + slider.setup(); + + //FlexSlider: added() Callback + slider.vars.added(slider); + } + slider.removeSlide = function(obj) { + var pos = (isNaN(obj)) ? slider.slides.index($(obj)) : obj; + + // update count + slider.count -= 1; + slider.last = slider.count - 1; + + // remove slide + if (isNaN(obj)) { + $(obj, slider.slides).remove(); + } else { + (vertical && reverse) ? slider.slides.eq(slider.last).remove() : slider.slides.eq(obj).remove(); + } + + // update currentSlide, animatingTo, controlNav, and directionNav + slider.doMath(); + slider.update(pos, "remove"); + + // update slider.slides + slider.slides = $(slider.vars.selector + ':not(.clone)', slider); + // re-setup the slider to accomdate new slide + slider.setup(); + + // FlexSlider: removed() Callback + slider.vars.removed(slider); + } + + slider.destroy = function() { + var classNamespace = '.' + slider.vars.namespace; // Namespaced class selector + if (slider.vars.controlNav) slider.controlNav.closest(classNamespace + 'control-nav').remove(); // Remove control elements if present + if (slider.vars.directionNav) slider.directionNav.closest(classNamespace + 'direction-nav').remove(); // Remove direction-nav elements if present + if (slider.vars.pausePlay) slider.pausePlay.closest(classNamespace + 'pauseplay').remove(); // Remove pauseplay elements if present + slider.find('.clone').remove(); // Remove any flexslider clones + slider.unbind(slider.vars.eventNamespace); // Remove events on slider + if ( slider.vars.animation != "fade" ) slider.container.unwrap(); // Remove the .flex-viewport div + slider.container.removeAttr('style') // Remove generated CSS (could collide with 3rd parties) + slider.container.unbind(slider.vars.eventNamespace); // Remove events on slider + slider.slides.removeAttr('style'); // Remove generated CSS (could collide with 3rd parties) + slider.slides.filter(classNamespace + 'active-slide').removeClass(slider.vars.namespace + 'active-slide'); // Remove slide active class + slider.slides.unbind(slider.vars.eventNamespace); // Remove events on slides + $(document).unbind(slider.vars.eventNamespace + "-" + slider.id); // Remove events from document for this instance only + $(window).unbind(slider.vars.eventNamespace + "-" + slider.id); // Remove events from window for this instance only + slider.stop(); // Stop the interval + slider.removeData('flexslider'); // Remove data + } + + //FlexSlider: Initialize + methods.init(); + } + + // Ensure the slider isn't focussed if the window loses focus. + $( window ).blur( function ( e ) { + focused = false; + }).focus( function ( e ) { + focused = true; + }); + + //FlexSlider: Default Settings + $.flexslider.defaults = { + namespace: "flex-", //{NEW} String: Prefix string attached to the class of every element generated by the plugin + eventNamespace: '.flexslider', //{NEW} String: Event namespace string attached to all element events generated by the plugin. The period at the start of the string is required. + selector: ".slides > li", //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril + animation: "fade", //String: Select your animation type, "fade" or "slide" + easing: "swing", //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported! + direction: "horizontal", //String: Select the sliding direction, "horizontal" or "vertical" + reverse: false, //{NEW} Boolean: Reverse the animation direction + animationLoop: true, //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end + smoothHeight: false, //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode + startAt: 0, //Integer: The slide that the slider should start on. Array notation (0 = first slide) + slideshow: true, //Boolean: Animate slider automatically + slideshowSpeed: 7000, //Integer: Set the speed of the slideshow cycling, in milliseconds + animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds + initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds + randomize: false, //Boolean: Randomize slide order + thumbCaptions: false, //Boolean: Whether or not to put captions on thumbnails when using the "thumbnails" controlNav. + + // Usability features + pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended. + pauseOnHover: false, //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering + pauseInvisible: true, //{NEW} Boolean: Pause the slideshow when tab is invisible, resume when visible. Provides better UX, lower CPU usage. + useCSS: true, //{NEW} Boolean: Slider will use CSS3 transitions if available + touch: true, //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices + video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches + + // Primary Controls + controlNav: true, //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage + directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false) + prevText: "Previous", //String: Set the text for the "previous" directionNav item + nextText: "Next", //String: Set the text for the "next" directionNav item + + // Secondary Navigation + keyboard: true, //Boolean: Allow slider navigating via keyboard left/right keys + multipleKeyboard: false, //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present. + mousewheel: false, //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel + pausePlay: false, //Boolean: Create pause/play dynamic element + pauseText: "Pause", //String: Set the text for the "pause" pausePlay item + playText: "Play", //String: Set the text for the "play" pausePlay item + + // Special properties + controlsContainer: "", //{UPDATED} jQuery Object/Selector: Declare which container the navigation elements should be appended too. Default container is the FlexSlider element. Example use would be $(".flexslider-container"). Property is ignored if given element is not found. + manualControls: "", //{UPDATED} jQuery Object/Selector: Declare custom control navigation. Examples would be $(".flex-control-nav li") or "#tabs-nav li img", etc. The number of elements in your controlNav should match the number of slides/tabs. + sync: "", //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care. + asNavFor: "", //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider + + // Carousel Options + itemWidth: 0, //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding. + itemMargin: 0, //{NEW} Integer: Margin between carousel items. + minItems: 1, //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this. + maxItems: 0, //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit. + move: 0, //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items. + allowOneSlide: true, //{NEW} Boolean: Whether or not to allow a slider comprised of a single slide + + // Callback API + start: function(){}, //Callback: function(slider) - Fires when the slider loads the first slide + before: function(){}, //Callback: function(slider) - Fires asynchronously with each slider animation + after: function(){}, //Callback: function(slider) - Fires after each slider animation completes + end: function(){}, //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous) + added: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is added + removed: function(){} //{NEW} Callback: function(slider) - Fires after a slide is removed + } + + var instanceId = 0; + + //FlexSlider: Plugin Function + $.fn.flexslider = function(options) { + if (options === undefined) options = {}; + + if (typeof options === "object") { + return this.each(function() { + var $this = $(this), + selector = (options.selector) ? options.selector : ".slides > li", + $slides = $this.find(selector); + + if ( ( $slides.length === 1 && options.allowOneSlide === true ) || $slides.length === 0 ) { + $slides.fadeIn(400); + if (options.start) options.start($this); + } else if ($this.data('flexslider') === undefined) { + new $.flexslider(this, options, instanceId++); + } + }); + } else { + // Helper strings to quickly perform functions on the slider + var $slider = $(this).data('flexslider'); + switch (options) { + case "play": $slider.play(); break; + case "pause": $slider.pause(); break; + case "stop": $slider.stop(); break; + case "next": $slider.flexAnimate($slider.getTarget("next"), true); break; + case "prev": + case "previous": $slider.flexAnimate($slider.getTarget("prev"), true); break; + case "destroy": $slider.destroy(); break; + default: if (typeof options === "number") $slider.flexAnimate(options, true); + } + } + } +})(jQuery); \ No newline at end of file diff --git a/src/wp-content/themes/avada/js/jquery.prettyPhoto-min.js b/src/wp-content/themes/avada/js/jquery.prettyPhoto-min.js new file mode 100644 index 0000000..c67fc8a --- /dev/null +++ b/src/wp-content/themes/avada/js/jquery.prettyPhoto-min.js @@ -0,0 +1 @@ +(function(e){function t(){var e=location.href;return hashtag=-1!==e.indexOf("#prettyPhoto")?decodeURI(e.substring(e.indexOf("#prettyPhoto")+1,e.length)):!1}function n(e,t){e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var n=RegExp("[\\?&]"+e+"=([^&#]*)").exec(t);return null==n?"":n[1]}e.prettyPhoto={version:"3.1.5"};e.fn.prettyPhoto=function(r){function i(){e(".pp_loaderIcon").hide();projectedTop=scroll_pos.scrollTop+(S/2-m.containerHeight/2);0>projectedTop&&(projectedTop=0);$ppt.fadeTo(settings.animation_speed,1);$pp_pic_holder.find(".pp_content").animate({height:m.contentHeight,width:m.contentWidth},settings.animation_speed);$pp_pic_holder.animate({top:projectedTop,left:0>x/2-m.containerWidth/2?0:x/2-m.containerWidth/2,width:m.containerWidth},settings.animation_speed,function(){$pp_pic_holder.find(".pp_hoverContainer,#fullResImage").height(m.height).width(m.width);$pp_pic_holder.find(".pp_fade").fadeIn(settings.animation_speed);isSet&&"image"==f(pp_images[set_position])?$pp_pic_holder.find(".pp_hoverContainer").show():$pp_pic_holder.find(".pp_hoverContainer").hide();settings.allow_expand&&(m.resized?e("a.pp_expand,a.pp_contract").show():e("a.pp_expand").hide());settings.autoplay_slideshow&&!T&&!g&&e.prettyPhoto.startSlideshow();settings.changepicturecallback();g=!0});isSet&&settings.overlay_gallery&&"image"==f(pp_images[set_position])?(itemWidth=57,navWidth="facebook"==settings.theme||"pp_default"==settings.theme?50:30,itemsPerPage=Math.floor((m.containerWidth-100-navWidth)/itemWidth),itemsPerPage=itemsPerPagex||w>S)&&doresize&&settings.allow_resize&&!d){resized=!0;for(fitting=!1;!fitting;)E>x?(imageWidth=x-200,imageHeight=t/e*imageWidth):w>S?(imageHeight=S-200,imageWidth=e/t*imageHeight):fitting=!0,w=imageHeight,E=imageWidth;(E>x||w>S)&&o(E,w);u(imageWidth,imageHeight)}return{width:Math.floor(imageWidth),height:Math.floor(imageHeight),containerHeight:Math.floor(w),containerWidth:Math.floor(E)+2*settings.horizontal_padding,contentHeight:Math.floor(y),contentWidth:Math.floor(b),resized:resized}}function u(t,n){t=parseFloat(t);n=parseFloat(n);$pp_details=$pp_pic_holder.find(".pp_details");$pp_details.width(t);detailsHeight=parseFloat($pp_details.css("marginTop"))+parseFloat($pp_details.css("marginBottom"));$pp_details=$pp_details.clone().addClass(settings.theme).width(t).appendTo(e("body")).css({position:"absolute",top:-1e4});detailsHeight+=$pp_details.height();detailsHeight=34>=detailsHeight?36:detailsHeight;$pp_details.remove();$pp_title=$pp_pic_holder.find(".ppt");$pp_title.width(t);titleHeight=parseFloat($pp_title.css("marginTop"))+parseFloat($pp_title.css("marginBottom"));$pp_title=$pp_title.clone().appendTo(e("body")).css({position:"absolute",top:-1e4});titleHeight+=$pp_title.height();$pp_title.remove();y=n+detailsHeight;b=t;w=y+titleHeight+$pp_pic_holder.find(".pp_top").height()+$pp_pic_holder.find(".pp_bottom").height();E=t}function f(e){return e.match(/youtube\.com\/watch/i)||e.match(/youtu\.be/i)?"youtube":e.match(/vimeo\.com/i)?"vimeo":e.match(/\b.mov\b/i)?"quicktime":e.match(/\b.swf\b/i)?"flash":e.match(/\biframe=true\b/i)?"iframe":e.match(/\bajax=true\b/i)?"ajax":e.match(/\bcustom=true\b/i)?"custom":"#"==e.substr(0,1)?"inline":"image"}function l(){doresize&&"undefined"!=typeof $pp_pic_holder&&(scroll_pos=c(),contentHeight=$pp_pic_holder.height(),contentwidth=$pp_pic_holder.width(),projectedTop=S/2+scroll_pos.scrollTop-contentHeight/2,0>projectedTop&&(projectedTop=0),contentHeight>S||$pp_pic_holder.css({top:projectedTop,left:x/2+scroll_pos.scrollLeft-contentwidth/2}))}function c(){if(self.pageYOffset)return{scrollTop:self.pageYOffset,scrollLeft:self.pageXOffset};if(document.documentElement&&document.documentElement.scrollTop)return{scrollTop:document.documentElement.scrollTop,scrollLeft:document.documentElement.scrollLeft};if(document.body)return{scrollTop:document.body.scrollTop,scrollLeft:document.body.scrollLeft}}function h(){settings.social_tools&&(facebook_like_link=settings.social_tools.replace("{location_href}",encodeURIComponent(location.href)));settings.markup=settings.markup.replace("{pp_social}","");e("body").append(settings.markup);$pp_pic_holder=e(".pp_pic_holder");$ppt=e(".ppt");$pp_overlay=e("div.pp_overlay");if(isSet&&settings.overlay_gallery){currentGalleryPage=0;toInject="";for(var t=0;t";toInject=settings.gallery_markup.replace(/{gallery}/g,toInject);$pp_pic_holder.find("#pp_full_res").after(toInject);$pp_gallery=e(".pp_pic_holder .pp_gallery");$pp_gallery_li=$pp_gallery.find("li");$pp_gallery.find(".pp_arrow_next").click(function(){e.prettyPhoto.changeGalleryPage("next");e.prettyPhoto.stopSlideshow();return!1});$pp_gallery.find(".pp_arrow_previous").click(function(){e.prettyPhoto.changeGalleryPage("previous");e.prettyPhoto.stopSlideshow();return!1});$pp_pic_holder.find(".pp_content").hover(function(){$pp_pic_holder.find(".pp_gallery:not(.disabled)").fadeIn()},function(){$pp_pic_holder.find(".pp_gallery:not(.disabled)").fadeOut()});itemWidth=57;$pp_gallery_li.each(function(t){e(this).find("a").click(function(){e.prettyPhoto.changePage(t);e.prettyPhoto.stopSlideshow();return!1})})}settings.slideshow&&($pp_pic_holder.find(".pp_nav").prepend('Play'),$pp_pic_holder.find(".pp_nav .pp_play").click(function(){e.prettyPhoto.startSlideshow();return!1}));$pp_pic_holder.attr("class","pp_pic_holder "+settings.theme);$pp_overlay.css({opacity:0,height:e(document).height(),width:e(window).width()}).bind("click",function(){settings.modal||e.prettyPhoto.close()});e("a.pp_close").bind("click",function(){e.prettyPhoto.close();return!1});settings.allow_expand&&e("a.pp_expand").bind("click",function(){e(this).hasClass("pp_expand")?(e(this).removeClass("pp_expand").addClass("pp_contract"),doresize=!1):(e(this).removeClass("pp_contract").addClass("pp_expand"),doresize=!0);s(function(){e.prettyPhoto.open()});return!1});$pp_pic_holder.find(".pp_previous, .pp_nav .pp_arrow_previous").bind("click",function(){e.prettyPhoto.changePage("previous");e.prettyPhoto.stopSlideshow();return!1});$pp_pic_holder.find(".pp_next, .pp_nav .pp_arrow_next").bind("click",function(){e.prettyPhoto.changePage("next");e.prettyPhoto.stopSlideshow();return!1});l()}r=jQuery.extend({hook:"rel",animation_speed:"fast",hd:!0,ajaxcallback:function(){},slideshow:5e3,autoplay_slideshow:!1,opacity:.8,show_title:!0,allow_resize:!0,allow_expand:!0,default_width:600,default_height:344,counter_separator_label:"/",theme:"pp_default",horizontal_padding:20,hideflash:!1,wmode:"opaque",autoplay:!0,modal:!1,deeplinking:!0,overlay_gallery:!0,overlay_gallery_max:30,keyboard_shortcuts:!0,changepicturecallback:function(){},callback:function(){},ie6_fallback:!0,markup:'
                   
                  ',gallery_markup:'',image_markup:'',flash_markup:'',quicktime_markup:'',iframe_markup:'',inline_markup:'
                  {content}
                  ',custom_markup:"",social_tools:''},r);var p=this,d=!1,m,g,y,b,w,E,S=e(window).height(),x=e(window).width(),T;current_as_setting=r.autoplay_slideshow;current_og_setting=r.overlay_gallery;doresize=!0;scroll_pos=c();e(window).unbind("resize.prettyphoto").bind("resize.prettyphoto",function(){l();S=e(window).height();x=e(window).width();"undefined"!=typeof $pp_overlay&&$pp_overlay.height(e(document).height()).width(x)});r.keyboard_shortcuts&&e(document).unbind("keydown.prettyphoto").bind("keydown.prettyphoto",function(t){if("undefined"!=typeof $pp_pic_holder&&$pp_pic_holder.is(":visible"))switch(t.keyCode){case 37:e.prettyPhoto.changePage("previous");t.preventDefault();break;case 39:e.prettyPhoto.changePage("next");t.preventDefault();break;case 27:settings.modal||e.prettyPhoto.close(),t.preventDefault()}});e.prettyPhoto.initialize=function(){settings=r;"pp_default"==settings.theme&&(settings.horizontal_padding=16);theRel=e(this).attr(settings.hook);galleryRegExp=/\[(?:.*)\]/;pp_images=(isSet=galleryRegExp.exec(theRel)?!0:!1)?jQuery.map(p,function(t){if(-1!=e(t).attr(settings.hook).indexOf(theRel))return e(t).attr("href")}):e.makeArray(e(this).attr("href"));pp_titles=isSet?jQuery.map(p,function(t){if(-1!=e(t).attr(settings.hook).indexOf(theRel))return e(t).find("img").attr("alt")?e(t).find("img").attr("alt"):""}):e.makeArray(e(this).find("img").attr("alt"));pp_descriptions=isSet?jQuery.map(p,function(t){if(-1!=e(t).attr(settings.hook).indexOf(theRel))return e(t).attr("title")?e(t).attr("title"):""}):e.makeArray(e(this).attr("title"));pp_images.length>settings.overlay_gallery_max&&(settings.overlay_gallery=!1);1==pp_images.length?(settings.autoplay_slideshow=!1,settings.overlay_gallery=!1,e(".pp_previous, .pp_next").remove()):(settings.autoplay_slideshow=current_as_setting,settings.overlay_gallery=current_og_setting);set_position=jQuery.inArray(e(this).attr("href"),pp_images);rel_index=isSet?set_position:e("a["+settings.hook+"^='"+theRel+"']").index(e(this));h(this);settings.allow_resize&&e(window).bind("scroll.prettyphoto",function(){l()});e.prettyPhoto.open();1==pp_images.length&&e(".pp_previous, .pp_next").remove();!1===r.show_desc&&e(".pp_description").remove();return!1};e.prettyPhoto.open=function(t,s,u,l){"undefined"==typeof settings&&(settings=r,pp_images=e.makeArray(t),pp_titles=s?e.makeArray(s):e.makeArray(""),pp_descriptions=u?e.makeArray(u):e.makeArray(""),isSet=1').css({width:settings.default_width}).wrapInner('
                  ').appendTo(e("body")).show(),doresize=!1,m=o(e(myClone).width(),e(myClone).height()),doresize=!0,e(myClone).remove(),toInject=settings.inline_markup.replace(/{content}/g,e(pp_images[set_position]).html())}!imgPreloader&&!skipInjection&&($pp_pic_holder.find("#pp_full_res")[0].innerHTML=toInject,i())});t=f(pp_images[set_position]);"youtube"==t||"vimeo"==t||"quicktime"==t||"flash"==t?e(".pp_gallery").hide():e(".pp_content").hover(function(){e(".pp_gallery:not(.disabled)").fadeIn()},function(){e(".pp_gallery:not(.disabled)").fadeOut()});return!1};e.prettyPhoto.changePage=function(t){currentGalleryPage=0;"previous"==t?(set_position--,0>set_position&&(set_position=e(pp_images).size()-1)):"next"==t?(set_position++,set_position>e(pp_images).size()-1&&(set_position=0)):set_position=t;rel_index=set_position;doresize||(doresize=!0);settings.allow_expand&&e(".pp_contract").removeClass("pp_contract").addClass("pp_expand");s(function(){e.prettyPhoto.open()})};e.prettyPhoto.changeGalleryPage=function(e){"next"==e?(currentGalleryPage++,currentGalleryPage>totalPage&&(currentGalleryPage=0)):"previous"==e?(currentGalleryPage--,0>currentGalleryPage&&(currentGalleryPage=totalPage)):currentGalleryPage=e;slide_speed="next"==e||"previous"==e?settings.animation_speed:0;slide_to=currentGalleryPage*itemsPerPage*itemWidth;$pp_gallery.find("ul").animate({left:-slide_to},slide_speed)};e.prettyPhoto.startSlideshow=function(){"undefined"==typeof T?($pp_pic_holder.find(".pp_play").unbind("click").removeClass("pp_play").addClass("pp_pause").click(function(){e.prettyPhoto.stopSlideshow();return!1}),T=setInterval(e.prettyPhoto.startSlideshow,settings.slideshow)):e.prettyPhoto.changePage("next")};e.prettyPhoto.stopSlideshow=function(){$pp_pic_holder.find(".pp_pause").unbind("click").removeClass("pp_pause").addClass("pp_play").click(function(){e.prettyPhoto.startSlideshow();return!1});clearInterval(T);T=void 0};e.prettyPhoto.close=function(){$pp_overlay.is(":animated")||(e.prettyPhoto.stopSlideshow(),$pp_pic_holder.stop().find("object,embed").css("visibility","hidden"),e("div.pp_pic_holder,div.ppt,.pp_fade").fadeOut(settings.animation_speed,function(){e(this).remove()}),$pp_overlay.fadeOut(settings.animation_speed,function(){settings.hideflash&&e("object,embed,iframe[src*=youtube],iframe[src*=vimeo]").css("visibility","visible");e(this).remove();e(window).unbind("scroll.prettyphoto");-1!==location.href.indexOf("#prettyPhoto")&&(location.hash="prettyPhoto");settings.callback();doresize=!0;g=!1;delete settings}))};!pp_alreadyInitialized&&t()&&(pp_alreadyInitialized=!0,hashRel=hashIndex=t(),hashIndex=hashIndex.substring(hashIndex.indexOf("/")+1,hashIndex.length-1),hashRel=hashRel.substring(0,hashRel.indexOf("/")),setTimeout(function(){e("a["+r.hook+"^='"+hashRel+"']:eq("+hashIndex+")").trigger("click")},50));return this.unbind("click.prettyphoto").bind("click.prettyphoto",e.prettyPhoto.initialize)}})(jQuery);var pp_alreadyInitialized=!1; \ No newline at end of file diff --git a/src/wp-content/themes/avada/js/jquery.prettyPhoto.js b/src/wp-content/themes/avada/js/jquery.prettyPhoto.js new file mode 100644 index 0000000..977b409 --- /dev/null +++ b/src/wp-content/themes/avada/js/jquery.prettyPhoto.js @@ -0,0 +1,40 @@ +(function(a){function v(){var a=location.href;return hashtag=-1!==a.indexOf("#prettyPhoto")?decodeURI(a.substring(a.indexOf("#prettyPhoto")+1,a.length)):!1}function j(a,j){a=a.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var l=RegExp("[\\?&]"+a+"=([^&#]*)").exec(j);return null==l?"":l[1]}a.prettyPhoto={version:"3.1.5"};a.fn.prettyPhoto=function(f){function q(){a(".pp_loaderIcon").hide();projectedTop=scroll_pos.scrollTop+(e/2-b.containerHeight/2);0>projectedTop&&(projectedTop=0);$ppt.fadeTo(settings.animation_speed, +1);$pp_pic_holder.find(".pp_content").animate({height:b.contentHeight,width:b.contentWidth},settings.animation_speed);$pp_pic_holder.animate({top:projectedTop,left:0>d/2-b.containerWidth/2?0:d/2-b.containerWidth/2,width:b.containerWidth},settings.animation_speed,function(){$pp_pic_holder.find(".pp_hoverContainer,#fullResImage").height(b.height).width(b.width);$pp_pic_holder.find(".pp_fade").fadeIn(settings.animation_speed);isSet&&"image"==n(pp_images[set_position])?$pp_pic_holder.find(".pp_hoverContainer").show(): +$pp_pic_holder.find(".pp_hoverContainer").hide();settings.allow_expand&&(b.resized?a("a.pp_expand,a.pp_contract").show():a("a.pp_expand").hide());settings.autoplay_slideshow&&(!m&&!r)&&a.prettyPhoto.startSlideshow();settings.changepicturecallback();r=!0});isSet&&settings.overlay_gallery&&"image"==n(pp_images[set_position])?(itemWidth=57,navWidth="facebook"==settings.theme||"pp_default"==settings.theme?50:30,itemsPerPage=Math.floor((b.containerWidth-100-navWidth)/itemWidth),itemsPerPage=itemsPerPage< +pp_images.length?itemsPerPage:pp_images.length,totalPage=Math.ceil(pp_images.length/itemsPerPage)-1,0==totalPage?(navWidth=0,$pp_gallery.find(".pp_arrow_next,.pp_arrow_previous").hide()):$pp_gallery.find(".pp_arrow_next,.pp_arrow_previous").show(),galleryWidth=itemsPerPage*itemWidth,fullGalleryWidth=pp_images.length*itemWidth,$pp_gallery.css("margin-left",-(galleryWidth/2+navWidth/2)).find("div:first").width(galleryWidth+5).find("ul").width(fullGalleryWidth).find("li.selected").removeClass("selected"), +goToPage=Math.floor(set_position/itemsPerPage)d||k>e)&&doresize&&settings.allow_resize&&!p){resized=!0;for(fitting=!1;!fitting;)h>d?(imageWidth=d-200,imageHeight=b/a*imageWidth):k>e?(imageHeight=e-200,imageWidth=a/b*imageHeight):fitting=!0,k=imageHeight,h=imageWidth;(h>d||k>e)&&g(h,k);w(imageWidth,imageHeight)}return{width:Math.floor(imageWidth),height:Math.floor(imageHeight),containerHeight:Math.floor(k),containerWidth:Math.floor(h)+2*settings.horizontal_padding,contentHeight:Math.floor(s), +contentWidth:Math.floor(x),resized:resized}}function w(c,b){c=parseFloat(c);b=parseFloat(b);$pp_details=$pp_pic_holder.find(".pp_details");$pp_details.width(c);detailsHeight=parseFloat($pp_details.css("marginTop"))+parseFloat($pp_details.css("marginBottom"));$pp_details=$pp_details.clone().addClass(settings.theme).width(c).appendTo(a("body")).css({position:"absolute",top:-1E4});detailsHeight+=$pp_details.height();detailsHeight=34>=detailsHeight?36:detailsHeight;$pp_details.remove();$pp_title=$pp_pic_holder.find(".ppt"); +$pp_title.width(c);titleHeight=parseFloat($pp_title.css("marginTop"))+parseFloat($pp_title.css("marginBottom"));$pp_title=$pp_title.clone().appendTo(a("body")).css({position:"absolute",top:-1E4});titleHeight+=$pp_title.height();$pp_title.remove();s=b+detailsHeight;x=c;k=s+titleHeight+$pp_pic_holder.find(".pp_top").height()+$pp_pic_holder.find(".pp_bottom").height();h=c}function n(a){return a.match(/youtube\.com\/watch/i)||a.match(/youtu\.be/i)?"youtube":a.match(/vimeo\.com/i)?"vimeo":a.match(/\b.mov\b/i)? +"quicktime":a.match(/\b.swf\b/i)?"flash":a.match(/\biframe=true\b/i)?"iframe":a.match(/\bajax=true\b/i)?"ajax":a.match(/\bcustom=true\b/i)?"custom":"#"==a.substr(0,1)?"inline":"image"}function t(){doresize&&"undefined"!=typeof $pp_pic_holder&&(scroll_pos=y(),contentHeight=$pp_pic_holder.height(),contentwidth=$pp_pic_holder.width(),projectedTop=e/2+scroll_pos.scrollTop-contentHeight/2,0>projectedTop&&(projectedTop=0),contentHeight>e||$pp_pic_holder.css({top:projectedTop,left:d/2+scroll_pos.scrollLeft- +contentwidth/2}))}function y(){if(self.pageYOffset)return{scrollTop:self.pageYOffset,scrollLeft:self.pageXOffset};if(document.documentElement&&document.documentElement.scrollTop)return{scrollTop:document.documentElement.scrollTop,scrollLeft:document.documentElement.scrollLeft};if(document.body)return{scrollTop:document.body.scrollTop,scrollLeft:document.body.scrollLeft}}function z(){settings.social_tools&&(facebook_like_link=settings.social_tools.replace("{location_href}",encodeURIComponent(location.href))); +settings.markup=settings.markup.replace("{pp_social}","");a("body").append(settings.markup);$pp_pic_holder=a(".pp_pic_holder");$ppt=a(".ppt");$pp_overlay=a("div.pp_overlay");if(isSet&&settings.overlay_gallery){currentGalleryPage=0;toInject="";for(var c=0;c";toInject= +settings.gallery_markup.replace(/{gallery}/g,toInject);$pp_pic_holder.find("#pp_full_res").after(toInject);$pp_gallery=a(".pp_pic_holder .pp_gallery");$pp_gallery_li=$pp_gallery.find("li");$pp_gallery.find(".pp_arrow_next").click(function(){a.prettyPhoto.changeGalleryPage("next");a.prettyPhoto.stopSlideshow();return!1});$pp_gallery.find(".pp_arrow_previous").click(function(){a.prettyPhoto.changeGalleryPage("previous");a.prettyPhoto.stopSlideshow();return!1});$pp_pic_holder.find(".pp_content").hover(function(){$pp_pic_holder.find(".pp_gallery:not(.disabled)").fadeIn()}, +function(){$pp_pic_holder.find(".pp_gallery:not(.disabled)").fadeOut()});itemWidth=57;$pp_gallery_li.each(function(c){a(this).find("a").click(function(){a.prettyPhoto.changePage(c);a.prettyPhoto.stopSlideshow();return!1})})}settings.slideshow&&($pp_pic_holder.find(".pp_nav").prepend('Play'),$pp_pic_holder.find(".pp_nav .pp_play").click(function(){a.prettyPhoto.startSlideshow();return!1}));$pp_pic_holder.attr("class","pp_pic_holder "+settings.theme);$pp_overlay.css({opacity:0, +height:a(document).height(),width:a(window).width()}).bind("click",function(){settings.modal||a.prettyPhoto.close()});a("a.pp_close").bind("click",function(){a.prettyPhoto.close();return!1});settings.allow_expand&&a("a.pp_expand").bind("click",function(){a(this).hasClass("pp_expand")?(a(this).removeClass("pp_expand").addClass("pp_contract"),doresize=!1):(a(this).removeClass("pp_contract").addClass("pp_expand"),doresize=!0);l(function(){a.prettyPhoto.open()});return!1});$pp_pic_holder.find(".pp_previous, .pp_nav .pp_arrow_previous").bind("click", +function(){a.prettyPhoto.changePage("previous");a.prettyPhoto.stopSlideshow();return!1});$pp_pic_holder.find(".pp_next, .pp_nav .pp_arrow_next").bind("click",function(){a.prettyPhoto.changePage("next");a.prettyPhoto.stopSlideshow();return!1});t()}f=jQuery.extend({hook:"rel",animation_speed:"fast",hd:!0,ajaxcallback:function(){},slideshow:5E3,autoplay_slideshow:!1,opacity:0.8,show_title:!0,allow_resize:!0,allow_expand:!0,default_width:600,default_height:344,counter_separator_label:"/",theme:"pp_default", +horizontal_padding:20,hideflash:!1,wmode:"opaque",autoplay:!0,modal:!1,deeplinking:!0,overlay_gallery:!0,overlay_gallery_max:30,keyboard_shortcuts:!0,changepicturecallback:function(){},callback:function(){},ie6_fallback:!0,markup:'
                   
                  ', +gallery_markup:'',image_markup:'',flash_markup:'', +quicktime_markup:'',iframe_markup:'', +inline_markup:'
                  {content}
                  ',custom_markup:"",social_tools:' \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/shop/wrapper-start.php b/src/wp-content/themes/avada/woocommerce/shop/wrapper-start.php new file mode 100644 index 0000000..ebe20de --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/shop/wrapper-start.php @@ -0,0 +1,83 @@ +ID; +} + +$custom_fields = get_post_custom_values('_wp_page_template', $pageID); +if(is_array($custom_fields) && !empty($custom_fields)) { + $page_template = $custom_fields[0]; +} else { + $page_template = ''; +} + +$content_css = ''; + +if( $page_template == '100-width.php') { + $content_css = 'width:100%'; + $sidebar_css = 'display:none'; +} elseif(get_post_meta($pageID, 'pyre_full_width', true) == 'yes' || $page_template == 'full-width.php') { + $content_css = 'width:100%'; + $sidebar_css = 'display:none'; +} elseif(get_post_meta($pageID, 'pyre_sidebar_position', true) == 'left') { + $content_css = 'float:right;'; + $sidebar_css = 'float:left;'; +} elseif(get_post_meta($pageID, 'pyre_sidebar_position', true) == 'right') { + $content_css = 'float:left;'; + $sidebar_css = 'float:right;'; +} elseif(get_post_meta($pageID, 'pyre_sidebar_position', true) == 'default') { + if($data['default_sidebar_pos'] == 'Left') { + $content_css = 'float:right;'; + $sidebar_css = 'float:left;'; + } elseif($data['default_sidebar_pos'] == 'Right') { + $content_css = 'float:left;'; + $sidebar_css = 'float:right;'; + } +} +if(is_product_category() || is_product_tag()) { + if($data['woocommerce_archive_sidebar'] == 'None') { + $content_css = 'width:100%'; + $sidebar_css = 'display:none'; + } else { + if($data['default_sidebar_pos'] == 'Left') { + $content_css = 'float:right;'; + $sidebar_css = 'float:left;'; + } elseif($data['default_sidebar_pos'] == 'Right') { + $content_css = 'float:left;'; + $sidebar_css = 'float:right;'; + } + } +} + +switch( $template ) { + case 'twentyeleven' : + echo '
                  '; + break; + case 'twentytwelve' : + echo '
                  '; + break; + case 'twentythirteen' : + echo '
                  '; + break; + case 'Avada' : + echo '
                  '; + break; + default : + echo '
                  '; + break; +} \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product-reviews.php b/src/wp-content/themes/avada/woocommerce/single-product-reviews.php new file mode 100644 index 0000000..1972358 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product-reviews.php @@ -0,0 +1,112 @@ + +
                  '; + + if ( get_option('woocommerce_enable_review_rating') == 'yes' ) { + + $count = $product->get_rating_count(); + + if ( $count > 0 ) { + + $average = $product->get_average_rating(); + + echo '
                  '; + + echo '
                  '.$average.' '.__( 'out of 5', 'woocommerce' ).'
                  '; + + echo '

                  '.sprintf( _n('%s review for %s', '%s reviews for %s', $count, 'woocommerce'), ''.$count.'', wptexturize($post->post_title) ).'

                  '; + + echo '
                  '; + + } else { + + echo '

                  '.__( 'Reviews', 'woocommerce' ).'

                  '; + + } + + } else { + + echo '

                  '.__( 'Reviews', 'woocommerce' ).'

                  '; + + } + + $title_reply = ''; + + if ( have_comments() ) : + + echo '
                    '; + + wp_list_comments( array( 'callback' => 'woocommerce_comments', 'avatar_size' => 75 ) ); + + echo '
                  '; + + if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : ?> + + ' . __( 'Add Review', 'woocommerce' ) . '

                  '; + $title_reply = __( 'Add a review', 'woocommerce' ); + + else : + + $title_reply = __( 'Be the first to review', 'woocommerce' ).' “'.$post->post_title.'”'; + + echo '

                  '.__( 'There are no reviews yet, would you like to submit yours?', 'woocommerce' ).'

                  '; + + endif; + + $commenter = wp_get_current_commenter(); + + echo '
                  '; + + $comment_form = array( + 'title_reply' => $title_reply, + 'comment_notes_before' => '', + 'comment_notes_after' => '', + 'fields' => array( + 'author' => '

                  ' . ' ' . '*' . + '

                  ', + 'email' => '', + ), + 'label_submit' => __( 'Submit Review', 'woocommerce' ), + 'logged_in_as' => '', + 'comment_field' => '' + ); + + if ( get_option('woocommerce_enable_review_rating') == 'yes' ) { + + $comment_form['comment_field'] = '

                  '; + + } + + $comment_form['comment_field'] .= '

                  ' . $woocommerce->nonce_field('comment_rating', true, false); + + comment_form( apply_filters( 'woocommerce_product_review_comment_form_args', $comment_form ) ); + + echo '
                  '; + +?>
                  + \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product.php b/src/wp-content/themes/avada/woocommerce/single-product.php new file mode 100644 index 0000000..891710f --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product.php @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/external.php b/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/external.php new file mode 100644 index 0000000..f69f9cd --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/external.php @@ -0,0 +1,17 @@ + + + +

                  + + \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/grouped.php b/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/grouped.php new file mode 100644 index 0000000..e7b3cff --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/grouped.php @@ -0,0 +1,85 @@ +get_children() as $child_id ) { + $child_product = $product->get_child( $child_id ); + + if ( ! $child_product->is_sold_individually() && ! $child_product->is_type('external') ) + $quantites_required = true; + + $grouped_products[] = array( + 'product' => $child_product, + 'availability' => $child_product->get_availability() + ); +} +?> + + + +
                  + + + + + + + + + + + + + + +
                  + is_type('external') ) : ?> + + get_button_text() ), 'external'); ?> + + + + product_type ); ?> + + + + 'quantity['.$child_product['product']->id.']', 'input_value' => '0' ) ); ?> + + + get_price_html(); ?> + '.$child_product['availability']['availability'].'', $child_product['availability']['availability'] ); ?> +
                  + + + + + + + + + + + +
                  + + \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/quantity.php b/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/quantity.php new file mode 100644 index 0000000..6f0bf38 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/quantity.php @@ -0,0 +1,12 @@ + +
                  min="" max="" name="" value="" title="" class="input-text qty text" />
                  diff --git a/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/simple.php b/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/simple.php new file mode 100644 index 0000000..a6bc91d --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/simple.php @@ -0,0 +1,50 @@ +is_purchasable() ) return; +?> + +get_availability(); + + if ($availability['availability']) : + echo apply_filters( 'woocommerce_stock_html', '

                  ' . esc_html( $availability['availability'] ) . '

                  ', $availability['availability'] ); + endif; +?> + +is_in_stock() ) : ?> + + + +
                  + + + + is_sold_individually() ) + woocommerce_quantity_input( array( + 'min_value' => apply_filters( 'woocommerce_quantity_input_min', 1, $product ), + 'max_value' => apply_filters( 'woocommerce_quantity_input_max', $product->backorders_allowed() ? '' : $product->get_stock_quantity(), $product ) + ) ); + ?> + + + + + +
                  + + + + \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/variable.php b/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/variable.php new file mode 100644 index 0000000..bf475b6 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/add-to-cart/variable.php @@ -0,0 +1,98 @@ + + + + +
                  + + + $options ) : $loop++; ?> + + + + + + + + + +
                  +
                  + ' . __( 'Clear selection', 'woocommerce' ) . ''; + ?> +
                  + + + + +
                  + + + +
                  + + diff --git a/src/wp-content/themes/avada/woocommerce/single-product/meta.php b/src/wp-content/themes/avada/woocommerce/single-product/meta.php new file mode 100644 index 0000000..819188f --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/meta.php @@ -0,0 +1,34 @@ + +
                  + + + + is_type( array( 'simple', 'variable' ) ) && get_option( 'woocommerce_enable_sku' ) == 'yes' && $product->get_sku() ) : ?> + get_sku(); ?>. + + + ID, 'product_cat' ) ); + echo $product->get_categories( ', ', '' . _n( 'Category:', 'Categories:', $size, 'woocommerce' ) . ' ', '.' ); + ?> + + ID, 'product_tag' ) ); + echo $product->get_tags( ', ', '' . _n( 'Tag:', 'Tags:', $size, 'woocommerce' ) . ' ', '.' ); + ?> + + + +
                  \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/price.php b/src/wp-content/themes/avada/woocommerce/single-product/price.php new file mode 100644 index 0000000..33394c0 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/price.php @@ -0,0 +1,22 @@ + +
                  + +

                  get_price_html(); ?>

                  + + + + +
                  +
                  \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/product-attributes.php b/src/wp-content/themes/avada/woocommerce/single-product/product-attributes.php new file mode 100644 index 0000000..d5199ab --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/product-attributes.php @@ -0,0 +1,71 @@ +get_attributes(); + +if ( empty( $attributes ) && ( ! $product->enable_dimensions_display() || ( ! $product->has_dimensions() && ! $product->has_weight() ) ) ) return; +?> + + + enable_dimensions_display() ) : ?> + + has_weight() ) : ?> + + + + + + + + + has_dimensions() ) : ?> + + + + + + + + + + + + + + + + + + + +
                  get_weight() . ' ' . esc_attr( get_option('woocommerce_weight_unit') ); ?>
                  get_dimensions(); ?>
                  attribute_label( $attribute['name'] ); ?>id, $attribute['name'], 'names' ); + echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values ); + + } else { + + // Convert pipes to commas and display values + $values = array_map( 'trim', explode( '|', $attribute['value'] ) ); + echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values ); + + } + ?>
                  \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/product-image.php b/src/wp-content/themes/avada/woocommerce/single-product/product-image.php new file mode 100644 index 0000000..a40144f --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/product-image.php @@ -0,0 +1,87 @@ + +
                  + + +
                  +
                    + ID, apply_filters( 'single_product_large_thumbnail_size', 'shop_single' ) ); + $image_title = esc_attr( get_the_title( get_post_thumbnail_id() ) ); + $image_link = wp_get_attachment_url( get_post_thumbnail_id() ); + $attachment_count = count( $product->get_gallery_attachment_ids() ); + + $gallery = 'woo'; + + echo apply_filters( 'woocommerce_single_product_image_html', sprintf( '
                  • %s
                  • ', $image_link, $image_title, $image ), $post->ID ); + + } + $attachment_ids = $product->get_gallery_attachment_ids(); + ?> + %s', $image_link, $image_title, $image ), $post->ID ); + + //echo apply_filters( 'woocommerce_single_product_image_thumbnail_html', sprintf( '
                  • %s
                  • ', $image_link, $image_class, $image_title, $image ), $attachment_id, $post->ID, $image_class ); + + $loop++; + } + + ?> +
                  +
                  + ID, apply_filters( 'single_product_large_thumbnail_size', 'shop_single' ) ); + $image_title = esc_attr( get_the_title( get_post_thumbnail_id() ) ); + $image_link = wp_get_attachment_url( get_post_thumbnail_id() ); + $attachment_count = count( $product->get_gallery_attachment_ids() ); + + if ( $attachment_count > 0 ) { + $gallery = '[product-gallery]'; + } else { + $gallery = ''; + } + + //echo apply_filters( 'woocommerce_single_product_image_html', sprintf( '%s', $image_link, $image_title, $image ), $post->ID ); + + } + $attachment_ids = $product->get_gallery_attachment_ids(); + if ( has_post_thumbnail() ) { + } + ?> + + + +
                  diff --git a/src/wp-content/themes/avada/woocommerce/single-product/product-thumbnails.php b/src/wp-content/themes/avada/woocommerce/single-product/product-thumbnails.php new file mode 100644 index 0000000..6e9f9d2 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/product-thumbnails.php @@ -0,0 +1,65 @@ +get_gallery_attachment_ids(); + +if ( $attachment_ids ) { + ?> + + get_related(); + +if ( sizeof( $related ) == 0 ) return; + +$args = apply_filters('woocommerce_related_products_args', array( + 'post_type' => 'product', + 'ignore_sticky_posts' => 1, + 'no_found_rows' => 1, + 'posts_per_page' => 4, + 'orderby' => $orderby, + 'post__in' => $related, + 'post__not_in' => array($product->id) +) ); + +$products = new WP_Query( $args ); + +$columns = 4; +$woocommerce_loop['columns'] = $columns; + +if ( $products->have_posts() ) : ?> + + + +comment_ID, 'rating', true ) ); +?> +
                5. id="li-comment-"> +
                  + + + +
                  + + comment_approved == '0') : ?> +

                  + +

                  + comment_author_email, $GLOBALS['comment']->user_id, $post->ID ) ) + echo '(' . __( 'verified owner', 'woocommerce' ) . ') '; + + ?>– +

                  + + + + +
                  + comment_ID, 'rating', true ) ); ?> +
                  + + + +
                  +
                  +
                  +
                  +
                  diff --git a/src/wp-content/themes/avada/woocommerce/single-product/sale-flash.php b/src/wp-content/themes/avada/woocommerce/single-product/sale-flash.php new file mode 100644 index 0000000..341b7b8 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/sale-flash.php @@ -0,0 +1,18 @@ + +is_on_sale()) : ?> + + '.__( 'Sale!', 'woocommerce' ).'', $post, $product); ?> + + \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/share.php b/src/wp-content/themes/avada/woocommerce/single-product/share.php new file mode 100644 index 0000000..bc5a1c9 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/share.php @@ -0,0 +1,16 @@ + + + \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/short-description.php b/src/wp-content/themes/avada/woocommerce/single-product/short-description.php new file mode 100644 index 0000000..dea0f55 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/short-description.php @@ -0,0 +1,18 @@ +post_excerpt ) return; +?> +
                  + post_excerpt ) ?> +
                  \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/tabs/additional-information.php b/src/wp-content/themes/avada/woocommerce/single-product/tabs/additional-information.php new file mode 100644 index 0000000..d756f50 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/tabs/additional-information.php @@ -0,0 +1,19 @@ + + +

                  + +list_attributes(); ?> \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/tabs/description.php b/src/wp-content/themes/avada/woocommerce/single-product/tabs/description.php new file mode 100644 index 0000000..760a029 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/tabs/description.php @@ -0,0 +1,20 @@ + + +
                  +

                  + +
                  \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/tabs/tabs.php b/src/wp-content/themes/avada/woocommerce/single-product/tabs/tabs.php new file mode 100644 index 0000000..d804c42 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/tabs/tabs.php @@ -0,0 +1,75 @@ + + +
                  +
                    + $tab ) : ?> + +
                  • +
                    +
                  • + + +
                  + $tab ) : ?> + +
                  + +
                  + + +
                  + + + +
                  + + + \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/title.php b/src/wp-content/themes/avada/woocommerce/single-product/title.php new file mode 100644 index 0000000..ee3c071 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/title.php @@ -0,0 +1,13 @@ + +

                  \ No newline at end of file diff --git a/src/wp-content/themes/avada/woocommerce/single-product/up-sells.php b/src/wp-content/themes/avada/woocommerce/single-product/up-sells.php new file mode 100644 index 0000000..9d46c98 --- /dev/null +++ b/src/wp-content/themes/avada/woocommerce/single-product/up-sells.php @@ -0,0 +1,59 @@ +get_upsells(); + +if ( sizeof( $upsells ) == 0 ) return; + +$meta_query = $woocommerce->query->get_meta_query(); + +$args = array( + 'post_type' => 'product', + 'ignore_sticky_posts' => 1, + 'no_found_rows' => 1, + 'posts_per_page' => 4, + 'orderby' => $orderby, + 'post__in' => $upsells, + 'post__not_in' => array( $product->id ), + 'meta_query' => $meta_query +); + +$products = new WP_Query( $args ); + +$columns = 4; +$woocommerce_loop['columns'] = $columns; + +if ( $products->have_posts() ) : ?> + +
                  + +
                  +

                  +
                  +
                  + + + + have_posts() ) : $products->the_post(); ?> + + + + + + + +
                  + + +

                  + + + display_name + ); + ?> + + + + + + + + + + + + + + + +

                  \ No newline at end of file diff --git a/src/wp-content/themes/avada/wpml-config.xml b/src/wp-content/themes/avada/wpml-config.xml new file mode 100644 index 0000000..f5a4d22 --- /dev/null +++ b/src/wp-content/themes/avada/wpml-config.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + themefusion_elastic + slide + layerslider + revslider + avada_faq + avada_portfolio + + + portfolio_category + faq_category + portfolio_skills + themefusion_es_groups + slide-page + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/archive.php b/src/wp-content/themes/double-r-group/archive.php new file mode 100644 index 0000000..9feb4ed --- /dev/null +++ b/src/wp-content/themes/double-r-group/archive.php @@ -0,0 +1,233 @@ + + +
                  + +
                  > +
                  + +
                  +
                  + + +
                  + +
                  + post_date); + $post_month = date('n', $post_timestamp); + $post_year = get_the_date('o'); + $current_date = get_the_date('o-n'); + ?> + + +

                  + + +
                  > + +
                  +
                  + + +
                  + + +
                  + +
                  + +
                  + + +
                  + +
                  +
                  + + +

                  + + +
                  +
                  + + +
                  + + +
                  + +
                  + +
                  + +
                  + +

                  + + +

                  ||

                  + +

                  ||||

                  + + + +
                  + +
                  +
                  + +
                  + + +
                  + +
                  + +
                  +  '.__('0', 'Avada'), ' '.__('1', 'Avada'), ' '.'%'); ?> +
                  + + +
                  + |||| +
                  + +
                  + +
                  + +
                  + +
                  +
                  + +
                  + +
                  + + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/author.php b/src/wp-content/themes/double-r-group/author.php new file mode 100644 index 0000000..e063094 --- /dev/null +++ b/src/wp-content/themes/double-r-group/author.php @@ -0,0 +1,317 @@ + + '.sprintf( __( 'So far %s has created %s entries.' ), $name, count_user_posts( $author_id ) ); + } + ?> +
                  +
                  +
                  + +
                  +
                  +

                  + + () + +

                  + +
                  +
                  +
                  + +
                  + + + +
                  + +
                  +
                  + + +
                  + +
                  + post_date); + $post_month = date('n', $post_timestamp); + $post_year = get_the_date('o'); + $current_date = get_the_date('o-n'); + ?> + + +

                  + + +
                  > + +
                  +
                  + + +
                  + + +
                  + +
                  + +
                  + + +
                  + +
                  +
                  + + +

                  + + +
                  +
                  + + +
                  + + +
                  + +
                  + +
                  + +
                  + +

                  + + +

                  ||

                  + +

                  ||||

                  + + + +
                  + +
                  +
                  + +
                  + + +
                  + +
                  + +
                  +  '.__('0', 'Avada'), ' '.__('1', 'Avada'), ' '.'%'); ?> +
                  + + +
                  + |||| +
                  + +
                  + +
                  + +
                  + +
                  +
                  + +
                  + +
                  + + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/comments.php b/src/wp-content/themes/double-r-group/comments.php new file mode 100644 index 0000000..37540c2 --- /dev/null +++ b/src/wp-content/themes/double-r-group/comments.php @@ -0,0 +1,75 @@ + +

                  + + + + + + +
                  +

                  + +
                    + +
                  + +
                  +
                  +
                  +
                  +
                  + + + + + + + + +

                  + + + + + + + + '; + + $fields['email'] = ''; + + $fields['url'] = '
                6. '; + + return $fields; + } + add_filter('comment_form_default_fields','modify_comment_form_fields'); + + $comments_args = array( + 'title_reply' => '

                  '. __("Leave A Comment", "Avada").'

                  ', + 'title_reply_to' => '

                  '. __("Leave A Comment", "Avada").'

                  ', + 'must_log_in' => '', + 'logged_in_as' => '

                  ' . __( "Logged in as"," Avada" ).' '.$user_identity.'. '. __("Log out »", "Avada").'

                  ', + 'comment_notes_before' => '', + 'comment_notes_after' => '', + 'comment_field' => '
                  ', + 'id_submit' => 'comment-submit', + 'label_submit'=> __("Post Comment", "Avada"), + ); + + comment_form($comments_args); + ?> + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/css/media.css b/src/wp-content/themes/double-r-group/css/media.css new file mode 100644 index 0000000..59117db --- /dev/null +++ b/src/wp-content/themes/double-r-group/css/media.css @@ -0,0 +1,51 @@ +@media only screen and (max-width: 965px){ + .header-social, .header-drg #small-nav, .header-drg #header { padding-left: 10px; padding-right: 10px; } +} +@media only screen and (max-width: 800px){ + .header-drg .header-social { display: block; } + .header-drg .header-social .alignleft{width:100%; margin:0; text-align:center;margin-bottom:10px;} + .header-drg .header-social .alignright{width:100%; margin:0; text-align:center; clear:both;} + .header-drg .header-social .social-networks{width:100%; margin-top:0; padding-bottom:0;} + .header-drg .header-social .social-networks li{float:none; margin-bottom:0; margin-left:10px; margin-right:10px; line-height:26px;} + .header-drg .header-social .social-networks li a{margin-bottom:0;} + + .header-drg #header{padding-left:20px!important; padding-right:20px!important;} + .header-drg #header .logo{width:100%; margin-bottom:10px !important;} + .header-drg #header .search{width:100%; float:none; margin-bottom:5px; margin-left: 0 !important;} + .header-drg #header #s { width: 100% !important; } + .header-drg #header .tagline{width:100%; float:none; text-align:center;margin:0;} + + .header-drg #small-nav{padding:6px 20px;} + .header-drg #small-nav #nav{width:100%;} + .header-drg #small-nav .social-networks {display: none;} + .header-drg .header-social .alignright .menu{margin-top:-10px; line-height:25px;} + + .header-drg #lang_sel {width:100%; margin:0; text-align:center; clear:both;} + + #footer .social-networks, #footer .copyright {width:100%; margin:0; text-align:center; clear:both; padding: 0} + #footer .copyright {background:none; margin: 0 auto;} +} +@media only screen and (min-device-width: 320px) and (max-device-width: 640px){ + .header-drg .header-social { display: block; } + .header-drg .header-social .alignleft{width:100%; margin:0; text-align:center;margin-bottom:10px;} + .header-drg .header-social .alignright{width:100%; margin:0; text-align:center; clear:both;} + .header-drg .header-social .social-networks{width:100%; margin-top:0; padding-bottom:0;} + .header-drg .header-social .social-networks li{float:none; margin-bottom:0; margin-left:10px; margin-right:10px; line-height:26px;} + .header-drg .header-social .social-networks li a{margin-bottom:0;} + + .header-drg #header{padding-left:20px!important; padding-right:20px!important;} + .header-drg #header .logo{width:100%; margin-bottom:10px !important;} + .header-drg #header .search{width:100%; float:none; margin-bottom:5px; margin-left: 0 !important;} + .header-drg #header #s { width: 100% !important; } + .header-drg #header .tagline{width:100%; float:none; text-align:center;margin:0;} + + .header-drg #small-nav{padding:6px 20px;} + .header-drg #small-nav #nav{width:100%;} + .header-drg .header-social .alignright .menu{margin-top:-10px; line-height:25px;} + + .header-drg #lang_sel {width:100%; margin:0; text-align:center; clear:both;} + + #footer .social-networks, #footer .copyright {width:100%; margin:0; text-align:center; clear:both; padding: 0} + #footer .copyright {background:none; margin: 0 auto;} +} + diff --git a/src/wp-content/themes/double-r-group/footer.php b/src/wp-content/themes/double-r-group/footer.php new file mode 100644 index 0000000..46b4d91 --- /dev/null +++ b/src/wp-content/themes/double-r-group/footer.php @@ -0,0 +1,260 @@ +
                  +
                  + + + +
                  +
                  +
                  +
                  + +
                  + +
                  + +
                  + +
                  + +
                  + +
                  + +
                  +
                  +
                  +
                  + + + + + +
                  + + + + + + + + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/framework/custom_functions.php b/src/wp-content/themes/double-r-group/framework/custom_functions.php new file mode 100644 index 0000000..76154b9 --- /dev/null +++ b/src/wp-content/themes/double-r-group/framework/custom_functions.php @@ -0,0 +1,142 @@ +get_default_language(); + if( $sitepress->get_default_language() == 'en' ) { + $lang = ''; + } + } else { + $lang = ''; + } + } + } + + $data = get_option( THEMENAME . '_options' . $lang ); + + $upload_dir = wp_upload_dir(); + //$filename = trailingslashit($upload_dir['basedir']) . 'drg' . $lang . '.css'; + $filename = trailingslashit($upload_dir['basedir']) . 'drg.css'; + + ob_start(); + include dirname(__FILE__) . '/dynamic_css.php'; + $dynamic_css = ob_get_contents(); + ob_get_clean(); + + global $wp_filesystem; + if( empty( $wp_filesystem ) ) { + require_once( ABSPATH .'/wp-admin/includes/file.php' ); + WP_Filesystem(); + } + + if( $wp_filesystem ) { + $wp_filesystem->put_contents( + $filename, + $dynamic_css, + FS_CHMOD_FILE // predefined mode settings for WP files + ); + } + +} + +remove_action('fusion_admin_save', 'fusion_add_dynamic_js_file'); +add_action( 'fusion_admin_save', 'drg_add_dynamic_js_file' ); +function drg_add_dynamic_js_file( $lang ) { + + global $data, $woocommerce; + + if( !$lang ) { + $lang = ''; + if(defined('ICL_LANGUAGE_CODE')) { + global $sitepress; + if(ICL_LANGUAGE_CODE != 'en' && ICL_LANGUAGE_CODE != 'all') { + $lang = '_'.ICL_LANGUAGE_CODE; + if(!get_option($theme_name.'_options'.$lang)) { + update_option($theme_name.'_options'.$lang, get_option($theme_name.'_options')); + } + } elseif( ICL_LANGUAGE_CODE == 'all' ) { + $lang = '_' . $sitepress->get_default_language(); + if( $sitepress->get_default_language() == 'en' ) { + $lang = ''; + } + } else { + $lang = ''; + } + } + } + + $data = get_option( THEMENAME . '_options' . $lang ); + + $upload_dir = wp_upload_dir(); + //$filename = trailingslashit($upload_dir['basedir']) . 'drg' . $lang . '.js'; + $filename = trailingslashit($upload_dir['basedir']) . 'drg.js'; + + ob_start(); + include dirname(__FILE__) . '/dynamic_js.php'; + $dynamic_js = ob_get_contents(); + ob_get_clean(); + + global $wp_filesystem; + if( empty( $wp_filesystem ) ) { + require_once( ABSPATH .'/wp-admin/includes/file.php' ); + WP_Filesystem(); + } + + if( $wp_filesystem ) { + $wp_filesystem->put_contents( + $filename, + $dynamic_js, + FS_CHMOD_FILE // predefined mode settings for WP files + ); + } + +} + + +function get_related_horses($post_id, $number_posts = 8) { + $query = new WP_Query(); + $args = ''; + if ($number_posts == 0) { + return $query; + } + + $item_cats = get_the_terms($post_id, 'horse_categories'); + if ($item_cats): + foreach ($item_cats as $item_cat) { + $item_array[] = $item_cat->term_id; + } + endif; + + $args = wp_parse_args($args, array( + 'posts_per_page' => $number_posts, + 'post__not_in' => array($post_id), + 'ignore_sticky_posts' => 0, + 'meta_key' => '_thumbnail_id', + 'post_type' => 'drg_horse', + 'tax_query' => array( + array( + 'taxonomy' => 'horse_categories', + 'field' => 'id', + 'terms' => $item_array + ) + ) + )); + + $query = new WP_Query($args); + return $query; +} diff --git a/src/wp-content/themes/double-r-group/framework/custom_meta_boxes.php b/src/wp-content/themes/double-r-group/framework/custom_meta_boxes.php new file mode 100644 index 0000000..afa3b51 --- /dev/null +++ b/src/wp-content/themes/double-r-group/framework/custom_meta_boxes.php @@ -0,0 +1,80 @@ +ID, 'horse_category', true)); + + + $types = get_terms('horse_categories', 'hide_empty=0'); + + $types_array = array(); + $types_array[0] = __('All categories', 'double-r-group'); + + if ($types) { + foreach ($types as $type) { + $types_array[$type->term_id] = $type->name; + } + + $id = 'horse_category'; + $label = __('Horse categories', 'double-r-group'); + $options = $types_array; + $desc = __('Choose what horse category you want to display on this page. Leave blank for all categories.', 'double-r-group'); + + $html = ''; + $html .= '

                  ' . $label . '

                  '; + $html .= ''; + $html .= ''; + if ($desc) { + $html .= '

                  ' . $desc . '

                  '; + } + + echo $html; + } +} + +function drg_save_horse_fields($page_id, $page) { + // Check template + $templates = array( + 'template-caballos-competicion.php', + 'template-caballos-cria.php' + ); + if (in_array(get_post_meta($page_id, '_wp_page_template', true), $templates)) { + foreach($_POST as $key => $value) { + if(strstr($key, 'drg_')) { + _log($key); + _log($value); + update_post_meta($page_id, $key, $value); + } + } + } +} diff --git a/src/wp-content/themes/double-r-group/framework/custom_post_types.php b/src/wp-content/themes/double-r-group/framework/custom_post_types.php new file mode 100644 index 0000000..22ef2cd --- /dev/null +++ b/src/wp-content/themes/double-r-group/framework/custom_post_types.php @@ -0,0 +1,76 @@ + array( + 'name' => __('Horses', 'double-r-group'), + 'singular_name' => __('Horse', 'double-r-group'), + 'add_new_item' => __('Add New Horse', 'double-r-group'), + 'edit_item' => __('Edit Horse', 'double-r-group'), + 'new_item' => __('New Horse', 'double-r-group'), + 'view_item' => __('View Horse', 'double-r-group'), + 'search_items' => __('Search Horses', 'double-r-group'), + 'not_found' => __('No Horses found', 'double-r-group'), + 'not_found_in_trash' => __('No Horses found in Trash', 'double-r-group'), + 'parent' => __('Parent Horse', 'double-r-group') + ), + + 'public' => true, + 'has_archive' => true, + 'rewrite' => array('slug' => 'horse'), + 'supports' => array('title', 'excerpt', 'editor', 'thumbnail', 'revisions', 'page-attributes', 'custom-fields'), + //'menu_icon' => plugins_url( 'images/horse_icon.png', __FILE__ ), + 'can_export' => true, + ) + ); + + register_taxonomy('horse_categories', 'drg_horse', array('hierarchical' => true, 'label' => __('Categories', 'double-r-group'), 'query_var' => true, 'rewrite' => true)); + register_taxonomy('horse_breeds', 'drg_horse', array('hierarchical' => true, 'label' => __('Breeds', 'double-r-group'), 'query_var' => true, 'rewrite' => true)); + register_taxonomy('horse_ages', 'drg_horse', array('hierarchical' => true, 'label' => __('Ages', 'double-r-group'), 'query_var' => true, 'rewrite' => true)); + register_taxonomy('horse_genders', 'drg_horse', array('hierarchical' => true, 'label' => __('Genders', 'double-r-group'), 'query_var' => true, 'rewrite' => true)); + register_taxonomy('horse_tags', 'drg_horse', array('hierarchical' => false, 'label' => __('Tags', 'double-r-group'), 'query_var' => true, 'rewrite' => true)); + + if (class_exists('kdMultipleFeaturedImages') && !$data['legacy_posts_slideshow']) { + $i = 2; + + while ($i <= $data['posts_slideshow_number']) { + $args = array( + 'id' => 'featured-image-' . $i, + 'post_type' => 'drg_horse', // Set this to post or page + 'labels' => array( + 'name' => 'Featured image ' . $i, + 'set' => 'Set featured image ' . $i, + 'remove' => 'Remove featured image ' . $i, + 'use' => 'Use as featured image ' . $i, + ) + ); + new kdMultipleFeaturedImages($args); + $i++; + } + } +} + +// Register widgetized locations +function drg_custom_sidebar() { + if(function_exists('register_sidebar')) { + register_sidebar(array( + 'name' => 'Horses Sidebar', + 'id' => 'drg-horses-sidebar', + 'before_widget' => '
                  ', + 'after_widget' => '
                  ', + 'before_title' => '

                  ', + 'after_title' => '

                  ', + )); + } +} + + +// Register custom post types +add_action('init', 'drg_init_horse_type'); +function drg_init_horse_type(){ + drg_custom_post_types(); + drg_custom_sidebar(); +} diff --git a/src/wp-content/themes/double-r-group/framework/dynamic_css.php b/src/wp-content/themes/double-r-group/framework/dynamic_css.php new file mode 100644 index 0000000..920084a --- /dev/null +++ b/src/wp-content/themes/double-r-group/framework/dynamic_css.php @@ -0,0 +1,1457 @@ + +a:hover, .tooltip-shortcode{ + color:; +} +#nav ul .current_page_item a, #nav ul .current-menu-item a, #nav ul > .current-menu-parent a, +#sticky-nav ul .current_page_item a, #sticky-nav ul .current-menu-item a, #sticky-nav ul > .current-menu-parent a, +.footer-area ul li a:hover, +#slidingbar-area ul li a:hover, +.portfolio-tabs li.active a, .faq-tabs li.active a, +.project-content .project-info .project-info-box a:hover, +.about-author .title a, +span.dropcap,.footer-area a:hover,#slidingbar-area a:hover,.copyright a:hover, +#sidebar .widget_categories li a:hover, +#main .post h2 a:hover, +#sidebar .widget li a:hover, +#nav ul a:hover, #sticky-nav ul a:hover, +.date-and-formats .format-box i, +h5.toggle:hover a, +.tooltip-shortcode,.content-box-percentage, +.more a:hover:after,.read-more:hover:after,.pagination-prev:hover:before,.pagination-next:hover:after,.bbp-topic-pagination .prev:hover:before,.bbp-topic-pagination .next:hover:after, +.single-navigation a[rel=prev]:hover:before,.single-navigation a[rel=next]:hover:after, +#sidebar .widget_nav_menu li a:hover:before,#sidebar .widget_categories li a:hover:before, +#sidebar .widget .recentcomments:hover:before,#sidebar .widget_recent_entries li a:hover:before, +#sidebar .widget_archive li a:hover:before,#sidebar .widget_pages li a:hover:before, +#sidebar .widget_links li a:hover:before,.side-nav .arrow:hover:after,.woocommerce-tabs .tabs a:hover .arrow:after, +.star-rating:before,.star-rating span:before,.price ins .amount, +.price > .amount,.woocommerce-pagination .prev:hover,.woocommerce-pagination .next:hover,.woocommerce-pagination .prev:hover:before,.woocommerce-pagination .next:hover:after, +.woocommerce-tabs .tabs li.active a,.woocommerce-tabs .tabs li.active a .arrow:after, +#wrapper .cart-checkout a:hover,#wrapper .cart-checkout a:hover:before, +.widget_shopping_cart_content .total .amount,.widget_layered_nav li a:hover:before, +.widget_product_categories li a:hover:before,#header .my-account-link-active:after,.woocommerce-side-nav li.active a,.woocommerce-side-nav li.active a:after,.my_account_orders .order-number a,.shop_table .product-subtotal .amount, +.cart_totals .total .amount,form.checkout .shop_table tfoot .total .amount,#final-order-details .mini-order-details tr:last-child .amount,.rtl .more a:hover:before,.rtl .read-more:hover:before,#header .my-cart-link-active:after,#wrapper #sidebar .current_page_item > a,#wrapper #sidebar .current-menu-item > a,#wrapper #sidebar .current_page_item > a:before,#wrapper #sidebar .current-menu-item > a:before,#wrapper .footer-area .current_page_item > a,#wrapper .footer-area .current-menu-item > a,#wrapper .footer-area .current_page_item > a:before,#wrapper .footer-area .current-menu-item > a:before,#wrapper #slidingbar-area .current_page_item > a,#wrapper #slidingbar-area .current-menu-item > a,#wrapper #slidingbar-area .current_page_item > a:before,#wrapper #slidingbar-area .current-menu-item > a:before,.side-nav ul > li.current_page_item > a,.side-nav li.current_page_ancestor > a, +.gform_wrapper span.ginput_total,.gform_wrapper span.ginput_product_price,.ginput_shipping_price, +.bbp-topics-front ul.super-sticky a:hover, .bbp-topics ul.super-sticky a:hover, .bbp-topics ul.sticky a:hover, .bbp-forum-content ul.sticky a:hover{ + color: !important; +} +#sidebar .image .image-extras .image-extras-content a:hover { color: #333333 !important; } +.star-rating:before,.star-rating span:before { + color: !important; +} +.tagcloud a:hover,#slidingbar-area .tagcloud a:hover,.footer-area .tagcloud a:hover{ color: #FFFFFF !important; text-shadow: none !important; -moz-text-shadow: none !important; -webkit-text-shadow: none !important; } +#nav ul .current_page_item a, #nav ul .current-menu-item a, #nav ul > .current-menu-parent a, +#sticky-nav ul .current_page_item a, #sticky-nav ul .current-menu-item a, #sticky-nav ul > .current-menu-parent a, +#nav ul ul,#sticky-nav ul ul,#navigation li.current-menu-ancestor a, +.reading-box, +.portfolio-tabs li.active a, .faq-tabs li.active a, +.tab-holder .tabs li.active a, +.post-content blockquote, +.progress-bar-content, +.pagination .current, +.bbp-topic-pagination .current, +.pagination a.inactive:hover, +.woocommerce-pagination .page-numbers:hover, +#nav ul a:hover,#sticky-nav ul a:hover,.woocommerce-pagination .current, +.tagcloud a:hover,#header .my-account-link:hover:after,body #header .my-account-link-active:after, +#bbpress-forums div.bbp-topic-tags a:hover{ + border-color: !important; +} +#navigation li.current-menu-ancestor a { + color: !important; +} +.side-nav li.current_page_item a{ + border-right-color: !important; +} +.rtl .side-nav li.current_page_item a{ + border-left-color: !important; +} +.header-v2 .header-social, .header-v3 .header-social, .header-v4 .header-social,.header-v5 .header-social,.header-v2{ + border-top-color: !important; +} +h5.toggle.active span.arrow, +.post-content ul.circle-yes li:before, +.progress-bar-content, +.pagination .current, +.bbp-topic-pagination .current, +.header-v3 .header-social,.header-v4 .header-social,.header-v5 .header-social, +.date-and-formats .date-box,.table-2 table thead, +.onsale,.woocommerce-pagination .current, +.woocommerce .social-share li a:hover i, +.price_slider_wrapper .ui-slider .ui-slider-range, +.tagcloud a:hover,.cart-loading, +#toTop:hover, +#bbpress-forums div.bbp-topic-tags a:hover, +.main-nav-search-form input[type="submit"]:hover, .search-page-search-form input[type="submit"]:hover, +ul.arrow li:before, +p.demo_store { + background-color: !important; +} + + +#toTop:hover {background-color: #333333 !important;} + + +.bbp-topics-front ul.super-sticky, .bbp-topics ul.super-sticky, .bbp-topics ul.sticky, .bbp-forum-content ul.sticky { + background-color: #ffffe8 !important; + opacity: 1; +} + + + + +#slidingbar-area { border-bottom: 3px solid #363839; } +.sb_toggle { bottom: -43px; } +.header-wrapper { margin-top: 3px; } +.admin-bar p.demo_store { padding-top: 13px; } + + + +#slidingbar { + background-color: !important; + background-color: !important; +} +.sb_toggle { + border-color: transparent transparent transparent !important; + border-color: transparent transparent transparent !important; +} +#slidingbar-area .pyre_tabs .tab-holder .tabs li { + border-color: !important; + border-color: !important; +} + +#slidingbar-area { + border-bottom: 3px solid !important; + border-bottom: 3px solid !important; +} +.sb_toggle { bottom: -43px; } + + + + + + #header .my-cart-link:after, #header a.search-link:after, + #small-nav .my-cart-link:after, #small-nav a.search-link:after{ border: none !important; } + + + + +.sticky-header #sticky-nav ul li { padding-right: px; } +.sticky-header #sticky-nav ul li ul li { padding-right: 0; } + + + +.sticky-header #sticky-nav > ul > li a { font-size: px; } +.sticky-header .cart-checkout .cart-link a, .sticky-header .cart-checkout .checkout-link a { font-size: 12px !important; } + + + + + + +body #header.sticky-header .sticky-shadow{background:rgba(, , , ) !important;} +.no-rgba #header.sticky-header .sticky-shadow{background:; filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=); opacity: ;} + +body #header.sticky-header .sticky-shadow{background:rgba(, , , 0.97) !important;} +.no-rgba #header.sticky-header .sticky-shadow{background:; filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=97); opacity: 0.97;} + + +.no-rgba #header.sticky-header .sticky-shadow{background: #ffffff; filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=97); opacity: 0.97;} + + + + + +#header,#small-nav,#header .login-box,#header .cart-contents,#small-nav .login-box,#small-nav .cart-contents{ + background-color: !important; +} + + + +#main,#wrapper{ + background-color: !important; +} + + + +.footer-area{ + background-color: !important; +} +.footer-area .pyre_tabs .tab-holder .tabs li { + border-color: !important; +} + + + +.footer-area{ + border-color: !important; +} + + + +#footer{ + background-color: !important; +} + + + +#footer{ + border-color: !important; +} + + + +.sep-boxed-pricing ul li.title-row{ + background-color: !important; + border-color: !important; +} +.pricing-row .exact_price, .pricing-row sup{ + color: !important; +} + + + +.image .image-extras{ + background-image: linear-gradient(top, 0%, 100%); + background-image: -o-linear-gradient(top, 0%, 100%); + background-image: -moz-linear-gradient(top, 0%, 100%); + background-image: -webkit-linear-gradient(top, 0%, 100%); + background-image: -ms-linear-gradient(top, 0%, 100%); + + background-image: -webkit-gradient( + linear, + left top, + left bottom, + color-stop(0, ), + color-stop(1, ) + ); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='', endColorstr='') + progid: DXImageTransform.Microsoft.Alpha(Opacity=0); +} +.no-cssgradients .image .image-extras{ + background:; +} +.image:hover .image-extras { + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='', endColorstr='') + progid: DXImageTransform.Microsoft.Alpha(Opacity=100); + } + + +#main .portfolio-one .button, +#main .comment-submit, +#reviews input#submit, +.comment-form input[type="submit"], +.wpcf7-form input[type="submit"], +.bbp-submit-wrapper button, +.button.default, +.price_slider_amount button, +.gform_wrapper .gform_button{ + background: ; + + color: !important; + background-image: linear-gradient(top, 0%, 100%); + background-image: -o-linear-gradient(top, 0%, 100%); + background-image: -moz-linear-gradient(top, 0%, 100%); + background-image: -webkit-linear-gradient(top, 0%, 100%); + background-image: -ms-linear-gradient(top, 0%, 100%); + + background-image: -webkit-gradient( + linear, + left top, + left bottom, + color-stop(0, ), + color-stop(1, ) + ); + border:1px solid ; + + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='', endColorstr=''); +} +.no-cssgradients #main .portfolio-one .button, +.no-cssgradients #main .comment-submit, +.no-cssgradients #reviews input#submit, +.no-cssgradients .comment-form input[type="submit"], +.no-cssgradients .wpcf7-form input[type="submit"], +.no-cssgradients .bbp-submit-wrapper button, +.no-cssgradients .button.default, +.no-cssgradients .price_slider_amount button, +.no-cssgradients .gform_wrapper .gform_button{ + background:; +} +#main .portfolio-one .button:hover, +#main .comment-submit:hover, +#reviews input#submit:hover, +.comment-form input[type="submit"]:hover, +.wpcf7-form input[type="submit"]:hover, +.bbp-submit-wrapper button:hover, +.button.default:hover, +.price_slider_amount button:hover, +.gform_wrapper .gform_button:hover{ + background: ; + color: !important; + background-image: linear-gradient(top, 0%, 100%); + background-image: -o-linear-gradient(top, 0%, 100%); + background-image: -moz-linear-gradient(top, 0%, 100%); + background-image: -webkit-linear-gradient(top, 0%, 100%); + background-image: -ms-linear-gradient(top, 0%, 100%); + + background-image: -webkit-gradient( + linear, + left top, + left bottom, + color-stop(0, ), + color-stop(1, ) + ); + border:1px solid ; + + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='', endColorstr=''); +} +.no-cssgradients #main .portfolio-one .button:hover, +.no-cssgradients #main .comment-submit:hover, +.no-cssgradients #reviews input#submit:hover, +.no-cssgradients .comment-form input[type="submit"]:hover, +.no-cssgradients .wpcf7-form input[type="submit"]:hover, +.no-cssgradients .bbp-submit-wrapper button:hover, +.no-cssgradients .button.default, +.no-cssgradients .price_slider_amount button:hover, +.no-cssgradients .gform_wrapper .gform_button{ + background:; +} + + + +.page-title-container{border-color: !important;} + + +.footer-area{ + + background-image:url(); + background-repeat:; + + background-position:; + + + background-attachment:scroll; + background-position:center center; + -webkit-background-size: cover; + -moz-background-size: cover; + -o-background-size: cover; + background-size: cover; + + + + background-attachment: fixed !important; + background-position:top center; + + + + + padding-top: !important; + + + + padding-bottom: !important; + +} + +#footer{ + + padding-top: !important; + + + + padding-bottom: !important; + +} + + +.fontawesome-icon.circle-yes{ + background-color: !important; +} + + + +.fontawesome-icon.circle-yes{ + border-color: !important; +} + + + +.fontawesome-icon{ + color: !important; +} + + + +.title-sep,.product .product-border{ + border-color: !important; +} + + + +.review blockquote q,.post-content blockquote,form.checkout .payment_methods .payment_box{ + background-color: !important; +} +.review blockquote div:after{ + border-top-color: !important; +} + + + +.review blockquote q,.post-content blockquote{ + color: !important; +} + + + +@font-face { + font-family: 'MuseoSlab500Regular'; + src: url(''); + src: + url('?#iefix') format('eot'), + url('') format('woff'), + url('') format('truetype'), + url('#MuseoSlab500Regular') format('svg'); + font-weight: 400; + font-style: normal; +} + + + + +body,#nav ul li ul li a,#sticky-nav ul li ul li a +.more, +.avada-container h3, +.meta .date, +.review blockquote q, +.review blockquote div strong, +.image .image-extras .image-extras-content h4, +.image .image-extras .image-extras-content h4 a, +.project-content .project-info h4, +.post-content blockquote, +.button.large, +.button.small, +.ei-title h3,.cart-contents, +.page-title h3, +.blog-shortcode h3.timeline-title{ + font-family:; +} +.avada-container h3, +.review blockquote div strong, +.footer-area h3, +#slidingbar-area h3, +.button.large, +.button.small, +.comment-form input[type="submit"], +.wpcf7-form input[type="submit"], +.gform_wrapper .gform_button{ + font-weight:bold; +} +.meta .date, +.review blockquote q, +.post-content blockquote{ + font-style:italic; +} + + + +#nav, #sticky-nav, #navigation, +.side-nav li a{ + font-family:; +} + + + + +h1, h2, h3, h4, h5, h6, +#main .reading-box h2, +#main h2, +.page-title h1, +.image .image-extras .image-extras-content h3, +#main .post h2, +#sidebar .widget h3, +.project-content .project-info .heading h3, +.tab-holder .tabs li a, +.share-box h4, +.project-content h3, +.author .author_title, +h5.toggle a, +.full-boxed-pricing ul li.title-row, +.full-boxed-pricing ul li.pricing-row, +.sep-boxed-pricing ul li.title-row, +.sep-boxed-pricing ul li.pricing-row, +.person-author-wrapper, +.post-content h1, .post-content h2, .post-content h3, .post-content h4, .post-content h5, .post-content h6, +.ei-title h2, #header .tagline, +table th,.project-content .project-info h4, +.woocommerce-success-message .msg,.product-title, +.comment-form input[type="submit"], .gform_button, +.wpcf7-form input[type="submit"], +.gform_wrapper .gform_button, +.woocommerce-success-message .button { + font-family:; +} + + + + +.footer-area h3,#slidingbar-area h3{ + font-family:; +} + + +body,#sidebar .slide-excerpt h2, .footer-area .slide-excerpt h2,#slidingbar-area .slide-excerpt h2{ + font-size:px; + + line-height:px; +} +.project-content .project-info h4,.gform_wrapper label,.gform_wrapper .gfield_description{ + font-size:px !important; + + line-height:px !important; +} +.blog-shortcode h3.timeline-title { font-size:px;line-height:px; } +.counter-box-content { font-size:px; } + + + +body,#sidebar .slide-excerpt h2, .footer-area .slide-excerpt h2,#slidingbar-area .slide-excerpt h2{ + line-height:px !important; +} +.project-content .project-info h4{ + line-height:px !important; +} + + + +#nav,#sticky-nav,#navigation{font-size:px !important;} + + + +#nav ul li ul li a,#sticky-nav ul li ul li a{font-size:px !important;} + + + +.header-social *{font-size:px !important;} + + + +.page-title ul li,page-title ul li a{font-size:px !important;} + + + +.side-nav li a{font-size:px !important;} + + + +#sidebar .widget h3, .project-content .project-info .heading h3 {font-size:px !important;} + + + +#slidingbar-area h3{font-size:px !important;} + + + +.footer-area h3{font-size:px !important;} + + + +.copyright{font-size:px !important;} + + + +#header .avada-row, #main .avada-row, .footer-area .avada-row,#slidingbar-area .avada-row, #footer .avada-row{ max-width:940px; } + + + +.post-content h1{ + font-size:px !important; + + line-height:px !important; +} + + + +.post-content h1{ + line-height:px !important; +} + + + +.post-content h2,.title h2,#main .post-content .title h2,.page-title h1,#main .post h2 a{ + font-size:px !important; + + line-height:px !important; +} + + + +.post-content h2,.title h2,#main .post-content .title h2,.page-title h1,#main .post h2 a{ + line-height:px !important; +} + + + +.post-content h3,.project-content h3,#header .tagline,.product-title{ + font-size:px !important; + + line-height:px !important; +} +p.demo_store { font-size:px !important; } + + + +.post-content h3,.project-content h3,#header .tagline,.product-title{ + line-height:px !important; +} + + + +.post-content h4{ + font-size:px !important; + + line-height:px !important; +} +h5.toggle a,.tab-holder .tabs li a,.share-box h4,.person-author-wrapper{ + font-size:px !important; +} + + + +.post-content h4{ + line-height:px !important; +} + + + +.post-content h5{ + font-size:px !important; + + line-height:px !important; +} + + + +.post-content h5{ + line-height:px !important; +} + + + +.post-content h6{ + font-size:px !important; + + line-height:px !important; +} + + + +.post-content h6{ + line-height:px !important; +} + + + +.ei-title h2{ + font-size:px !important; + + line-height:px !important; +} + + + +.ei-title h3{ + font-size:px !important; + + line-height:px !important; +} + + + +body,.post .post-content,.post-content blockquote,.tab-holder .news-list li .post-holder .meta,#sidebar #jtwt,.meta,.review blockquote div,.search input,.project-content .project-info h4,.title-row,.simple-products-slider .price .amount,.quantity .qty,.quantity .minus,.quantity .plus,.blog-shortcode h3.timeline-title{color: !important;} + + + +.post-content h1,.title h1,.woocommerce-success-message .msg{ + color: !important; +} + + + +.post-content h2,.title h2,.woocommerce-tabs h2,.search-page-search-form h2{ + color: !important; +} + + + +.post-content h3,#sidebar .widget h3,.project-content h3,.title h3,#header .tagline,.person-author-wrapper span,.product-title{ + color: !important; +} + + + +.post-content h4,.project-content .project-info h4,.share-box h4,.title h4,.tab-holder .tabs li a{ + color: !important; +} + + + +.post-content h5,h5.toggle a,.title h5{ + color: !important; +} + + + +.post-content h6,.title h6{ + color: !important; +} + + + +.page-title h1{ + color: !important; +} + + + +/*.post-content h1, .post-content h2, .post-content h3, +.post-content h4, .post-content h5, .post-content h6, +#sidebar .widget h3,h5.toggle a, +.page-title h1,.full-boxed-pricing ul li.title-row, +.project-content .project-info h4,.project-content h3,.share-box h4,.title h2,.person-author-wrapper,#sidebar .tab-holder .tabs li a,#header .tagline, +.table-1 table th{ + color: !important; +}*/ + + + +.sep-boxed-pricing ul li.title-row{ + color: !important; +} + + + +.full-boxed-pricing ul li.title-row{ + color: !important; +} + + + +body a{color:;} +.project-content .project-info .project-info-box a,#sidebar .widget li a, #sidebar .widget .recentcomments, #sidebar .widget_categories li, #main .post h2 a, +.shop_attributes tr th,.image-extras a,.products-slider .price .amount,z.my_account_orders thead tr th,.shop_table thead tr th,.cart_totals table th,form.checkout .shop_table tfoot th,form.checkout .payment_methods label,#final-order-details .mini-order-details th,#main .product .product_title{color: !important;} + + + +.page-title ul li,.page-title ul li a{color: !important;} + + + +#slidingbar-area h3{color: !important;} + + + +#slidingbar-area,#slidingbar-area article.col,#slidingbar-area #jtwt,#slidingbar-area #jtwt .jtwt_tweet{color: !important;} + + + +#slidingbar-area a{color: !important;} + + + +#sidebar .widget h3, #sidebar .widget .heading h3, .project-content .project-info .heading h3 {color: !important;} + + + +.footer-area h3{color: !important;} + + + +.footer-area,.footer-area article.col,.footer-area #jtwt,.footer-area #jtwt .jtwt_tweet,.copyright{color: !important;} + + + +.footer-area a,.footer-area .pyre_tabs .tab-holder .tabs li a,.copyright a{color: !important;} + + + +#nav ul a,#sticky-nav ul a,.side-nav li a,#header .cart-content a,#header .cart-content a:hover,#small-nav .cart-content a,#small-nav .cart-content a:hover,#wrapper .header-social .top-menu .cart > a,#wrapper .header-social .top-menu .cart > a > .amount{color: !important;} +#header .my-account-link:after{border-color: !important;} + + + +#nav ul .current_page_item a, #nav ul .current-menu-item a, #nav ul > .current-menu-parent a, #nav ul ul,#navigation li.current-menu-ancestor a,#nav ul li a:hover, +#sticky-nav ul .current_page_item a, #sticky-nav ul .current-menu-item a, #sticky-nav ul > .current-menu-parent a, #sticky-nav ul ul,#navigation li.current-menu-ancestor a,#sticky-nav ul li a:hover +{color: !important;border-color: !important;} +#nav ul ul,#sticky-nav ul ul{border-color: !important;} + + + +#nav ul ul,#sticky-nav ul ul{background-color:;} + + + +#wrapper #nav ul li ul li a,#wrapper #sticky-nav ul li ul li a,.side-nav li li a,.side-nav li.current_page_item li a{color: !important;} + + + +.ei-title h2{color: !important;} + + + +.ei-title h3{color: !important;} + + + +#wrapper .header-social .header-info, #wrapper .header-social a {color: !important;} +#wrapper .header-social .mobile-topnav-holder li a {color: #333333 !important;} + + + +.sep-single{background-color: !important;} +.sep-double,.sep-dashed,.sep-dotted,.search-page-search-form{border-color: !important;} +.ls-avada, .avada-skin-rev,.clients-carousel .es-carousel li img,h5.toggle a,.progress-bar, +#small-nav,.portfolio-tabs,.faq-tabs,.single-navigation,.project-content .project-info .project-info-box, +.post .meta-info,.grid-layout .post,.grid-layout .post .content-sep, +.grid-layout .post .flexslider,.timeline-layout .post,.timeline-layout .post .content-sep, +.timeline-layout .post .flexslider,h3.timeline-title,.timeline-arrow, +.counter-box-wrapper,.table-2 table thead,.table-2 tr td, +#sidebar .widget li a,#sidebar .widget .recentcomments,#sidebar .widget_categories li, +.tab-holder,.commentlist .the-comment, +.side-nav,#wrapper .side-nav li a,.rtl .side-nav,h5.toggle.active + .toggle-content, +#wrapper .side-nav li.current_page_item li a,.tabs-vertical .tabset, +.tabs-vertical .tabs-container .tab_content,.page-title-container,.pagination a.inactive,.woocommerce-pagination .page-numbers,.bbp-topic-pagination .page-numbers,.rtl .woocommerce .social-share li,.author .author_social{border-color:;} +.side-nav li a,.product_list_widget li,.widget_layered_nav li,.price_slider_wrapper,.tagcloud a,#header .cart-content a,#header .cart-content a:hover,#header .login-box,#header .cart-contents,#small-nav .login-box,#small-nav .cart-contents,#small-nav .cart-content a,#small-nav .cart-content a:hover, +#customer_login_box,.myaccount_user,.myaccount_user_container span, +.woocommerce-side-nav li a,.woocommerce-content-box,.woocommerce-content-box h2,.my_account_orders tr,.woocommerce .address h4,.shop_table tr,.cart_totals .total,.chzn-container-single .chzn-single,.chzn-container-single .chzn-single div,.chzn-drop,form.checkout .shop_table tfoot,.input-radio,#final-order-details .mini-order-details tr:last-child,p.order-info,.cart-content a img,.panel.entry-content,.woocommerce-tabs .tabs li a,.woocommerce .social-share,.woocommerce .social-share li,.quantity,.quantity .minus, .quantity .qty,.shop_attributes tr,.woocommerce-success-message,#reviews li .comment-text{border-color: !important;} +.price_slider_wrapper .ui-widget-content{background-color:;} +.gform_wrapper .gsection{border-bottom:1px dotted ;} + + + +.quantity .minus,.quantity .plus{background-color: !important;} + + + +.quantity .minus:hover,.quantity .plus:hover{background-color: !important;} + + + +#slidingbar-area .widget_categories li a, #slidingbar-area li.recentcomments, #slidingbar-area ul li a, #slidingbar-area .product_list_widget li {border-bottom: 1px solid !important;} +#slidingbar-area .tagcloud a, #slidingbar-area .pyre_tabs .tab-holder .tabs-wrapper, #slidingbar-area .pyre_tabs .tab-holder .news-list li {border-color: !important;} + + + +.footer-area .widget_categories li a, .footer-area li.recentcomments, .footer-area ul li a, .footer-area .product_list_widget li, +.footer-area .tagcloud a,.footer-area .pyre_tabs .tab-holder .tabs-wrapper, .footer-area .pyre_tabs .tab-holder .news-list li {border-color: !important;} + + + +input#s,#comment-input input,#comment-textarea textarea,.comment-form-comment textarea,.input-text, +.wpcf7-form .wpcf7-text,.wpcf7-form .wpcf7-quiz,.wpcf7-form .wpcf7-number,.wpcf7-form textarea,.wpcf7-form .wpcf7-select,.wpcf7-captchar,.wpcf7-form .wpcf7-date, +.gform_wrapper .gfield input[type=text],.gform_wrapper .gfield textarea,.gform_wrapper .gfield select, +#bbpress-forums .bbp-search-form #bbp_search,.bbp-reply-form input#bbp_topic_tags,.bbp-topic-form input#bbp_topic_title, .bbp-topic-form input#bbp_topic_tags, .bbp-topic-form select#bbp_stick_topic_select, .bbp-topic-form select#bbp_topic_status_select,#bbpress-forums div.bbp-the-content-wrapper textarea.bbp-the-content, +.main-nav-search-form input,.search-page-search-form input,.chzn-container-single .chzn-single,.chzn-container .chzn-drop, +.avada-select-parent select{ +background-color: !important;} + + + +input#s,input#s .placeholder,#comment-input input,#comment-textarea textarea,#comment-input .placeholder,#comment-textarea .placeholder,.comment-form-comment textarea,.input-text, +.wpcf7-form .wpcf7-text,.wpcf7-form .wpcf7-quiz,.wpcf7-form .wpcf7-number,.wpcf7-form textarea,.wpcf7-form .wpcf7-select,.wpcf7-select-parent .select-arrow,.wpcf7-captchar,.wpcf7-form .wpcf7-date, +.gform_wrapper .gfield input[type=text],.gform_wrapper .gfield textarea,.gform_wrapper .gfield select, +#bbpress-forums .bbp-search-form #bbp_search,.bbp-reply-form input#bbp_topic_tags,.bbp-topic-form input#bbp_topic_title, .bbp-topic-form input#bbp_topic_tags, .bbp-topic-form select#bbp_stick_topic_select, .bbp-topic-form select#bbp_topic_status_select,#bbpress-forums div.bbp-the-content-wrapper textarea.bbp-the-content, +.main-nav-search-form input,.search-page-search-form input,.chzn-container-single .chzn-single,.chzn-container .chzn-drop,.avada-select-parent select +{color: !important;} + +input#s::-webkit-input-placeholder,#comment-input input::-webkit-input-placeholder,#comment-textarea textarea::-webkit-input-placeholder,.comment-form-comment textarea::-webkit-input-placeholder,.input-text::-webkit-input-placeholder{color: !important;} +input#s:-moz-placeholder,#comment-input input:-moz-placeholder,#comment-textarea textarea:-moz-placeholder,.comment-form-comment textarea:-moz-placeholder,.input-text:-moz-placeholder, +input#s:-ms-input-placeholder,#comment-input input:-ms-input-placeholder,#comment-textarea textarea:-moz-placeholder,.comment-form-comment textarea:-ms-input-placeholder,.input-text:-ms-input-placeholder, +{color: !important;} + + + +input#s,#comment-input input,#comment-textarea textarea,.comment-form-comment textarea,.input-text, +.wpcf7-form .wpcf7-text,.wpcf7-form .wpcf7-quiz,.wpcf7-form .wpcf7-number,.wpcf7-form textarea,.wpcf7-form .wpcf7-select,.wpcf7-select-parent .select-arrow,.wpcf7-captchar,.wpcf7-form .wpcf7-date, +.gform_wrapper .gfield input[type=text],.gform_wrapper .gfield textarea,.gform_wrapper .gfield_select[multiple=multiple],.gform_wrapper .gfield select,.select-arrow, +#bbpress-forums .quicktags-toolbar,#bbpress-forums .bbp-search-form #bbp_search,.bbp-reply-form input#bbp_topic_tags,.bbp-topic-form input#bbp_topic_title, .bbp-topic-form input#bbp_topic_tags, .bbp-topic-form select#bbp_stick_topic_select, .bbp-topic-form select#bbp_topic_status_select,#bbpress-forums div.bbp-the-content-wrapper textarea.bbp-the-content,#wp-bbp_topic_content-editor-container,#wp-bbp_reply_content-editor-container, +.main-nav-search-form input,.search-page-search-form input,.chzn-container-single .chzn-single,.chzn-container .chzn-drop, +.avada-select-parent select +{border-color: !important;} + + + +#wrapper #nav ul li ul li a,#wrapper #sticky-nav ul li ul li a{border-bottom:1px solid !important;} + + + +#wrapper #nav ul li ul li a:hover, #wrapper #nav ul li ul li.current-menu-item a, +#wrapper #sticky-nav ul li ul li a:hover, #wrapper #sticky-nav ul li ul li.current-menu-item a, +#header .cart-content a:hover,#small-nav .cart-content a:hover{background-color: !important;} + + + +#header .tagline{ + color: !important; +} + + + +#header .tagline{ + font-size:px !important; + line-height:35px !important; +} + + + +.page-title h1{ + font-size:px !important; + line-height:normal !important; +} + + + + .page-title h3{ + font-size:px !important; + line-height: px !important; + } + + + +.header-social,#header,.header-v4 #small-nav,.header-v5 #small-nav{ + border-bottom-color: !important; +} + + + +#nav ul ul,#sticky-nav ul ul{ + width: !important; +} +#nav ul ul li:hover ul,#sticky-nav ul ul li:hover ul{ + left: !important; +} +ul#navigation > li:last-child ul ul{ + left:- !important; +} +.rtl #header #nav ul ul li:hover ul,.rtl #small-nav #nav ul ul li:hover ul, .rtl .sticky-header #sticky-nav ul ul li:hover ul{ + right: !important; + left: auto !important; +} +.rtl ul#navigation > li:last-child ul ul{ + right:- !important; + left: auto !important; +} + + + +#main #sidebar{ + background-color:; +} + + + +#main #content{ + width:%; +} + + + +#main #sidebar{ + width:%; +} + + + +#main #sidebar{ + padding-left:%; + padding-right:%; +} + + + +#wrapper .header-social{ + background-color: !important; +} + + + +#wrapper .header-social .menu > li{ + border-color: !important; +} + + + +#wrapper .header-social .menu .sub-menu,#wrapper .header-social .login-box,#wrapper .header-social .cart-contents,.main-nav-search-form{ + background-color: !important; +} + + + +#wrapper .header-social .menu .sub-menu li, #wrapper .header-social .menu .sub-menu li a,#wrapper .header-social .login-box *,#wrapper .header-social .cart-contents *{ + color: !important; +} + + + +#wrapper .header-social .menu .sub-menu li a:hover{ + background-color: !important; +} + + + +#wrapper .header-social .menu .sub-menu li a:hover{ + color: !important; +} + + + +#wrapper .header-social .menu .sub-menu,#wrapper .header-social .menu .sub-menu li,.top-menu .cart-content a,#wrapper .header-social .login-box,#wrapper .header-social .cart-contents,.main-nav-search-form{ + border-color: !important; +} + + + +#header .cart-checkout,.top-menu .cart,.top-menu .cart-content a:hover,.top-menu .cart-checkout,#small-nav .cart-checkout{ + background-color: !important; +} + + + +h5.toggle span.arrow{background-color:;} + + + +.progress-bar-content{background-color: !important;border-color: !important;} +.content-box-percentage{color: !important;} + + + +.progress-bar{background-color:;border-color:;} + + + +.date-and-formats .format-box{background-color:;} + + + +.es-nav-prev,.es-nav-next{background-color:;} + + + +.es-nav-prev:hover,.es-nav-next:hover{background-color:;} + + + +.content-boxes .col{background-color:;} + + + +#sidebar .tab-holder,#sidebar .tab-holder .news-list li{border-color: !important;} +#sidebar .pyre_tabs .tabs-container{background-color: !important;} +body #sidebar .tab-hold .tabs li{border-right:1px solid !important;} +body #sidebar .tab-hold .tabs li a{background: !important;border-bottom:0 !important;color: !important;} +body #sidebar .tab-hold .tabs li a:hover{background: !important;border-bottom:0 !important;} +body #sidebar .tab-hold .tabs li.active a{background: !important;border-bottom:0 !important;} +body #sidebar .tab-hold .tabs li.active a{border-top-color:!important;} + + + +.share-box{background-color:;} + + + +.grid-layout .post,.timeline-layout .post{background-color:;} + + + +.grid-layout .post .flexslider,.timeline-layout .post,.timeline-layout .post .content-sep, +.timeline-layout .post .flexslider,h3.timeline-title,.grid-layout .post,.grid-layout .post .content-sep,.products li,.product-details-container,.product-buttons,.product-buttons-container{border-color: !important;} +.align-left .timeline-arrow:before,.align-left .timeline-arrow:after{border-left-color: !important;} +.align-right .timeline-arrow:before,.align-right .timeline-arrow:after{border-right-color: !important;} +.timeline-circle,.timeline-title{background-color: !important;} +.timeline-icon{color:;} + + + + #bbpress-forums li.bbp-header, + #bbpress-forums div.bbp-reply-header,#bbpress-forums #bbp-single-user-details #bbp-user-navigation li.current a,div.bbp-template-notice, div.indicator-hint{ background: !important; } + #bbpress-forums .bbp-replies div.even { background: transparent !important; } + + + + #bbpress-forums ul.bbp-lead-topic, #bbpress-forums ul.bbp-topics, #bbpress-forums ul.bbp-forums, #bbpress-forums ul.bbp-replies, #bbpress-forums ul.bbp-search-results, + #bbpress-forums li.bbp-body ul.forum, #bbpress-forums li.bbp-body ul.topic, + #bbpress-forums div.bbp-reply-content,#bbpress-forums div.bbp-reply-header, + #bbpress-forums div.bbp-reply-author .bbp-reply-post-date, + #bbpress-forums div.bbp-topic-tags a,#bbpress-forums #bbp-single-user-details,div.bbp-template-notice, div.indicator-hint, + .bbp-arrow{ border-color: !important; } + + + + +.header-v4 #small-nav,.header-v5 #small-nav{ + border-bottom-color: !important; +} + +body #header.sticky-header .sticky-shadow { -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.42);-mozbox-shadow: 0 1px 3px rgba(0, 0, 0, 0.42);box-shadow: 0 1px 3px rgba(0, 0, 0, 0.42); } +.products-slider .price .amount,.simple-products-slider .price .amount{color:#333333 !important;} +.meta li{border-color:;} +.error-image{background-image:url(/images/404_image_dark.png);} +.error_page .oops {color: #2F2F30 !important;} +.review blockquote div .company-name{background-image:url(/images/ico-user_dark.png);} +.review.male blockquote div .company-name{background-image:url(/images/ico-user_dark.png);} +.review.female blockquote div .company-name{background-image:url(/images/ico-user-girl_dark.png);} +.timeline-layout{background-image:url(/images/timeline_line_dark.png);} +.side-nav li a{background-image:url(/images/side_nav_bg_dark.png);} +@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 13/10), only screen and (min-resolution: 120dpi) { + .error-image{background-image:url(/images/404_image_dark@2x.png) !important;} + .review blockquote div .company-name{background-image:url(/images/ico-user_dark@2x.png) !important;} + .review.male blockquote div .company-name{background-image:url(/images/ico-user_dark@2x.png) !important;} + .review.female blockquote div .company-name{background-image:url(/images/ico-user-girl_dark@2x.png) !important;} + .side-nav li a{background-image:url(/images/side_nav_bg_dark@2x.png) !important;} +} +.bbp-arrow, #bbpress-forums .quicktags-toolbar { background-color: !important; } +#toTop { background-color: #111111; } +.chzn-container-single .chzn-single { background-image: none !important; box-shadow: none !important; } + + +.mobile-nav-holder .mobile-selector, .mobile-topnav-holder .mobile-selector, #mobile-nav li a, #wrapper .header-social .mobile-topnav-holder li a, +.catalog-ordering a, .order-dropdown > li:after,.order-dropdown ul li a +{color: !important;} + + + +.mobile-nav-holder .mobile-selector, .mobile-topnav-holder .mobile-selector, #mobile-nav, #mobile-nav li a, .mobile-nav-holder .mobile-selector .selector-down, .mobile-topnav-holder .mobile-selector .selector-down, +.order-dropdown li,.order-dropdown .current-li,.order-dropdown > li:after,.order-dropdown ul li a,.catalog-ordering .order li a +{border-color: !important;} + + + +.order-dropdown li, .order-dropdown .current-li,.order-dropdown ul li a,.catalog-ordering .order li a +{background-color: !important;} + + +.mobile-nav-holder .mobile-selector, .mobile-topnav-holder .mobile-selector,#mobile-nav { background-image: none !important; background-color: !important; } +.order-dropdown li:hover, .order-dropdown .current-li:hover, .order-dropdown ul li a:hover, .catalog-ordering .order li a:hover,#mobile-nav li a:hover { background-color: #29292A !important; } +.bbp-topics-front ul.super-sticky, .bbp-topics ul.super-sticky, .bbp-topics ul.sticky, .bbp-forum-content ul.sticky { + background-color: #3E3E3E !important; +} +.bbp-topics-front ul.super-sticky a, .bbp-topics ul.super-sticky a, .bbp-topics ul.sticky a, .bbp-forum-content ul.sticky a { + color: #FFFFFF !important; +} + + + +.quicktags-toolbar input { + background: linear-gradient(to top, , ) #3E3E3E !important; + background: -o-linear-gradient(to top, , ) #3E3E3E !important; + background: -moz-linear-gradient(to top, , ) #3E3E3E !important; + background: -webkit-linear-gradient(to top, , ) #3E3E3E !important; + background: -ms-linear-gradient(to top, , ) #3E3E3E !important; + background: linear-gradient(to top, , ) #3E3E3E !important; + + background-image: -webkit-gradient( + linear, + left top, + left bottom, + color-stop(0, ), + color-stop(1, ) + ); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='', endColorstr='') + progid: DXImageTransform.Microsoft.Alpha(Opacity=0); + + border: 1px solid !important; + color: !important; +} + +.quicktags-toolbar input:hover { + background: !important; +} + + + + +.main-flex .flex-control-nav{display:none !important;} + + + +@media only screen and (max-width: 940px){ + .breadcrumbs{display:none !important;} +} +@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait){ + .breadcrumbs{display:none !important;} +} + + + +.image-extras{display:none !important;} + + + +#navigation > li > a,#navigation li.current-menu-ancestor a{height:px;line-height:px;} +#navigation > li > a,#navigation li.current-menu-ancestor a{height:px;line-height:px;} +#nav ul ul,#sticky-nav ul ul{top:px;} + + +#navigation > li > a,#navigation li.current-menu-ancestor a{height:40px;line-height:40px;} +#navigation > li > a,#navigation li.current-menu-ancestor a{height:40px;line-height:40px;} + +#nav ul ul,#sticky-nav ul ul{top:43px;} + +.sticky-header #navigation > li > a.my-cart-link, .sticky-header #navigation li.current-menu-ancestor a.my-cart-link {height:63px;line-height:63px;} + + + +#nav ul li, #sticky-nav ul li { padding-right: px; } + + + +.ei-slider{width: !important;} + + + +.ei-slider{height: !important;} + + + +.button,.gform_wrapper .gform_button{text-shadow:none !important;} + + + +#slidingbar-area a{text-shadow:none !important;} + + + +.footer-area a,.copyright{text-shadow:none !important;} + + + +.reading-box{background-color: !important;} + + +.isotope .isotope-item { + -webkit-transition-property: top, left, opacity; + -moz-transition-property: top, left, opacity; + -ms-transition-property: top, left, opacity; + -o-transition-property: top, left, opacity; + transition-property: top, left, opacity; +} + +.image-extras .link-icon{display:none !important;} +.image-extras .gallery-icon{display:none !important;} +.image-extras h3{display:none !important;} +.image-extras h4{display:none !important;} + + +.header-v4 #small-nav,.header-v5 #small-nav{background-color: !important;} + + + + +#header .logo{float:right;} +.sticky-header .logo{float:right !important;} +#header #nav,#header #sticky-nav{float:left;} +#header .search,#header .tagline{float:left !important;} +.header-v5 #header .logo{float:right;} +#header-banner{float:left;} +.rtl .header-v4 #header .search { margin-left: 15px!important; margin-right: 0!important; } + +.header-v4 #header .search { margin-left: 0!important; } + + +.header-v5 #header .logo{float:left;} + + + +@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 13/10), only screen and (min-resolution: 120dpi) { + #header .normal_logo{display:none !important;} + #header .retina_logo{display:inline !important;} +} + + + +@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 13/10), only screen and (min-resolution: 120dpi) { + #header .normal_flag{display:none !important;} + #header .retina_flag{display:inline !important;} +} + + + +.bbp_reply_admin_links .admin_links_sep, .bbp-admin-links .admin_links_sep{ + display: none; +} + + + +.rev_slider_wrapper{ + position:relative +} + +.rev_slider_wrapper .shadow-left{ + position:absolute; + background-image:url(/images/shadow-top.png); + background-repeat:no-repeat; + background-position:top center; + height:42px; + width:100%; + top:0; + z-index:99; +} + +.rev_slider_wrapper .shadow-left{top:-1px;} + +.rev_slider_wrapper .shadow-right{ + position:absolute; + background-image:url(/images/shadow-bottom.png); + background-repeat:no-repeat; + background-position:bottom center; + height:32px; + width:100%; + bottom:0; + z-index:99; +} + +.avada-skin-rev{ + border-top: 1px solid #d2d3d4; + border-bottom: 1px solid #d2d3d4; +} + +.rev_slider_wrapper .tp-leftarrow, .rev_slider_wrapper .tp-rightarrow{ + background-color: rgba(0, 0, 0, 0.5) !important; + background-repeat: no-repeat; + width: 63px !important; + height: 63px !important; + position: absolute; + top: 50% !important; + margin-top:-31px !important; + opacity:0.8; + position:absolute !important; +} + +.rev_slider_wrapper .tp-rightarrow{ + left:auto !important; + right:0 !important; +} + +.no-rgba .rev_slider_wrapper .tp-leftarrow, .no-rgba .rev_slider_wrapper .tp-rightarrow{ + background-color:#ccc !important; +} + +.rev_slider_wrapper:hover .tp-leftarrow,.rev_slider_wrapper:hover .tp-rightarrow{ + display:block !important; + opacity:0.8 !important; +} + +.rev_slider_wrapper .tp-leftarrow:hover, .rev_slider_wrapper .tp-rightarrow:hover{ + opacity:1 !important; +} + +.rev_slider_wrapper .tp-leftarrow{ + background-image: url(/images/ls_prev.png) !important; + background-position: 19px 19px !important; + left: 0 !important; + margin-left:0 !important; + z-index:100; + opacity: 0; +} + +.rev_slider_wrapper .tp-rightarrow{ + background-image: url(/images/ls_next.png) !important; + background-position: 29px 19px !important; + right: 0 !important; + margin-left:0 !important; + z-index:100; + opacity: 0; +} + +.tp-bullets .bullet.last{ + clear:none !important; +} + +@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 13/10), only screen and (min-resolution: 120dpi) { + .rev_slider_wrapper .tp-leftarrow{ + background-image: url(/images/ls_prev@2x.png) !important; + -webkit-background-size:12px 24px !important; + -moz-background-size:12px 24px !important; + -o-background-size:12px 24px !important; + background-size:12px 24px !important; + } + + .rev_slider_wrapper .tp-rightarrow{ + background-image: url(/images/ls_next@2x.png) !important; + -webkit-background-size:12px 24px !important; + -moz-background-size:12px 24px !important; + -o-background-size:12px 24px !important; + background-size:12px 24px !important; + } +} + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/framework/dynamic_js.php b/src/wp-content/themes/double-r-group/framework/dynamic_js.php new file mode 100644 index 0000000..3df22e9 --- /dev/null +++ b/src/wp-content/themes/double-r-group/framework/dynamic_js.php @@ -0,0 +1,1080 @@ +function insertParam(url, parameterName, parameterValue, atStart){ + replaceDuplicates = true; + + if(url.indexOf('#') > 0){ + var cl = url.indexOf('#'); + urlhash = url.substring(url.indexOf('#'),url.length); + } else { + urlhash = ''; + cl = url.length; + } + sourceUrl = url.substring(0,cl); + + var urlParts = sourceUrl.split("?"); + var newQueryString = ""; + + if (urlParts.length > 1) + { + var parameters = urlParts[1].split("&"); + for (var i=0; (i < parameters.length); i++) + { + var parameterParts = parameters[i].split("="); + if (!(replaceDuplicates && parameterParts[0] == parameterName)) + { + if (newQueryString == "") { + newQueryString = "?" + parameterParts[0] + "=" + (parameterParts[1]?parameterParts[1]:''); + } + else { + newQueryString += "&"; + newQueryString += parameterParts[0] + "=" + (parameterParts[1]?parameterParts[1]:''); + } + } + } + } + if (newQueryString == "") + newQueryString = "?"; + + if(atStart){ + newQueryString = '?'+ parameterName + "=" + parameterValue + (newQueryString.length>1?'&'+newQueryString.substring(1):''); + } else { + if (newQueryString !== "" && newQueryString != '?') + newQueryString += "&"; + newQueryString += parameterName + "=" + (parameterValue?parameterValue:''); + } + return urlParts[0] + newQueryString + urlhash; +}; + +function ytVidId(url) { + var p = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; + return (url.match(p)) ? RegExp.$1 : false; + //return (url.match(p)) ? true : false; +} + +jQuery(document).ready(function() { + jQuery('.portfolio-wrapper').hide(); + jQuery('.portfolio-tabs ').hide(); + jQuery('.faq-tabs ').hide(); + if(jQuery('.portfolio').length >= 1) { + jQuery('#content').append('
                  Loading...
                  '+js_local_vars.portfolio_loading_text+'
                  '); + } + if(jQuery('.faqs').length >= 1) { + jQuery('#content').append('
                  Loading...
                  '+js_local_vars.faqs_loading_text+'
                  '); + } + + var iframes = jQuery('iframe'); + jQuery.each(iframes, function(i, v) { + var src = jQuery(this).attr('src'); + if(src) { + + if(src.indexOf('vimeo') >= 1) { + jQuery(this).attr('id', 'player_'+(i+1)); + var new_src = insertParam(src, 'api', '1', false); + var new_src_2 = insertParam(new_src, 'player_id', 'player_'+(i+1), false); + + jQuery(this).attr('src', new_src_2); + } + + + if(ytVidId(src)) { + jQuery(this).parent().wrap(''); + window.yt_vid_exists = true; + } + + } + }); +}); +jQuery(window).load(function() { + if(jQuery('#sidebar').is(':visible')) { + jQuery('.post-content div.portfolio').each(function() { + var columns = jQuery(this).data('columns'); + jQuery(this).addClass('portfolio-'+columns+'-sidebar'); + }); + } + + if(jQuery().isotope) { + // modified Isotope methods for gutters in masonry + jQuery.Isotope.prototype._getMasonryGutterColumns = function() { + var gutter = this.options.masonry && this.options.masonry.gutterWidth || 0; + containerWidth = this.element.width(); + + this.masonry.columnWidth = this.options.masonry && this.options.masonry.columnWidth || + // or use the size of the first item + this.$filteredAtoms.outerWidth(true) || + // if there's no items, use size of container + containerWidth; + + this.masonry.columnWidth += gutter; + + this.masonry.cols = Math.floor( ( containerWidth + gutter ) / this.masonry.columnWidth ); + this.masonry.cols = Math.max( this.masonry.cols, 1 ); + }; + + jQuery.Isotope.prototype._masonryReset = function() { + // layout-specific props + this.masonry = {}; + // FIXME shouldn't have to call this again + this._getMasonryGutterColumns(); + var i = this.masonry.cols; + this.masonry.colYs = []; + while (i--) { + this.masonry.colYs.push( 0 ); + } + }; + + jQuery.Isotope.prototype._masonryResizeChanged = function() { + var prevSegments = this.masonry.cols; + // update cols/rows + this._getMasonryGutterColumns(); + // return if updated cols/rows is not equal to previous + return ( this.masonry.cols !== prevSegments ); + }; + + imagesLoaded(jQuery('.portfolio-one .portfolio-wrapper'), function() { + jQuery('.portfolio-wrapper').fadeIn(); + jQuery('.portfolio-tabs').fadeIn(); + jQuery('.faq-tabs').fadeIn(); + jQuery('.loading-container').fadeOut(); + jQuery('.portfolio-one .portfolio-wrapper').isotope({ + // options + itemSelector: '.portfolio-item', + layoutMode: 'straightDown', + transformsEnabled: false + }); + }); + + imagesLoaded(jQuery('.portfolio-two .portfolio-wrapper, .portfolio-three .portfolio-wrapper, .portfolio-four .portfolio-wrapper'),function() { + jQuery('.portfolio-wrapper').fadeIn(); + jQuery('.portfolio-tabs').fadeIn(); + jQuery('.loading-container').fadeOut(); + jQuery('.portfolio-two .portfolio-wrapper, .portfolio-three .portfolio-wrapper, .portfolio-four .portfolio-wrapper').isotope({ + // options + itemSelector: '.portfolio-item', + layoutMode: 'fitRows', + transformsEnabled: false + }); + }); + + var masonryContainer = jQuery('.portfolio-masonry .portfolio-wrapper'); + imagesLoaded(masonryContainer, function() { + jQuery('.portfolio-wrapper').fadeIn(); + jQuery('.portfolio-tabs').fadeIn(); + jQuery('.loading-container').fadeOut(); + var gridTwo = masonryContainer.parent().hasClass('portfolio-grid-2'); + var columns; + if(gridTwo) { + columns = 2; + } else { + columns = 3; + } + masonryContainer.isotope({ + // options + itemSelector: '.portfolio-item', + layoutMode: 'masonry', + transformsEnabled: false, + masonry: { columnWidth: masonryContainer.width() / columns } + }); + }); + } + + if(jQuery().flexslider) { + var avada_ytplayer; + + + if(window.yt_vid_exists == true) { + var tag = document.createElement('script'); + tag.src = "https://www.youtube.com/iframe_api"; + var firstScriptTag = document.getElementsByTagName('script')[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + + function getFrameID(id){ + var elem = document.getElementById(id); + if (elem) { + if(/^iframe$/i.test(elem.tagName)) return id; //Frame, OK + // else: Look for frame + var elems = elem.getElementsByTagName("iframe"); + if (!elems.length) return null; //No iframe found, FAILURE + for (var i=0; i + + + function ready(player_id) { + var froogaloop = $f(player_id); + + froogaloop.addEvent('play', function(data) { + jQuery('#'+player_id).parents('li').parent().parent().flexslider("pause"); + }); + + froogaloop.addEvent('pause', function(data) { + jQuery('#'+player_id).parents('li').parent().parent().flexslider("play"); + }); + } + + var vimeoPlayers = jQuery('.flexslider').find('iframe'), player; + + jQuery('.flexslider').find('iframe').each(function() { + var id = jQuery(this).attr('id'); + + if(id) { + $f(id).addEvent('ready', ready); + } + }); + + function addEvent(element, eventName, callback) { + if (element.addEventListener) { + element.addEventListener(eventName, callback, false) + } else { + element.attachEvent(eventName, callback, false); + } + } + + + jQuery('.full-video, .video-shortcode, .wooslider .slide-content, .post-content').fitVids(); + + if(jQuery('.tfs-slider').length >= 1) { + //jQuery('.tfs-slider').flexslider('destroy'); + + jQuery('.tfs-slider').flexslider({ + animation: "", + slideshow: , + slideshowSpeed: , + animationSpeed: , + smoothHeight: true, + pauseOnHover: false, + useCSS: false, + video: true, + start: function(slider) { + if(typeof(slider.slides) !== 'undefined' && slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + + jQuery(slider).find('.flex-control-nav').css('bottom', '-30px'); + + jQuery(slider).find('.flex-control-nav').hide(); + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + } else { + + jQuery(slider).find('.flex-control-nav').css('bottom', '0px'); + + jQuery(slider).find('.flex-control-nav').show(); + + } + }, + before: function(slider) { + if(slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + + $f( slider.slides.eq(slider.currentSlide).find('iframe')[0] ).api('pause'); + + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + + /* ------------------ YOUTUBE FOR AUTOSLIDER ------------------ */ + playVideoAndPauseOthers(slider); + } + }, + after: function(slider) { + if(slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + + jQuery(slider).find('.flex-control-nav').css('bottom', '-30px'); + + jQuery(slider).find('.flex-control-nav').hide(); + + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + } else { + + jQuery(slider).find('.flex-control-nav').css('bottom', '0px'); + + jQuery(slider).find('.flex-control-nav').show(); + + } + } + }); + } + + if(js_local_vars.page_smoothHeight === 'false') { + page_smoothHeight = false; + } else { + page_smoothHeight = true; + } + + jQuery('.grid-layout .flexslider').flexslider({ + slideshow: , + slideshowSpeed: , + video: true, + smoothHeight: page_smoothHeight, + pauseOnHover: false, + useCSS: false, + start: function(slider) { + if (typeof(slider.slides) !== 'undefined' && slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + + jQuery(slider).find('.flex-control-nav').css('bottom', '-30px'); + + jQuery(slider).find('.flex-control-nav').hide(); + + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + } else { + + jQuery(slider).find('.flex-control-nav').css('bottom', '0'); + + jQuery(slider).find('.flex-control-nav').show(); + + } + }, + before: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + $f(slider.slides.eq(slider.currentSlide).find('iframe')[0] ).api('pause'); + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + + /* ------------------ YOUTUBE FOR AUTOSLIDER ------------------ */ + playVideoAndPauseOthers(slider); + } + }, + after: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + + jQuery(slider).find('.flex-control-nav').css('bottom', '-30px'); + + jQuery(slider).find('.flex-control-nav').hide(); + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + } else { + + jQuery(slider).find('.flex-control-nav').css('bottom', '0px'); + + jQuery(slider).find('.flex-control-nav').show(); + + } + } + }); + + if(js_local_vars.flex_smoothHeight === 'false') { + flex_smoothHeight = false; + } else { + flex_smoothHeight = true; + } + + jQuery('.flexslider').flexslider({ + slideshow: , + slideshowSpeed: , + video: true, + smoothHeight: flex_smoothHeight, + pauseOnHover: false, + useCSS: false, + start: function(slider) { + if (typeof(slider.slides) !== 'undefined' && slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + + jQuery(slider).find('.flex-control-nav').css('bottom', '-30px'); + + jQuery(slider).find('.flex-control-nav').hide(); + + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + } else { + + jQuery(slider).find('.flex-control-nav').css('bottom', '0'); + + jQuery(slider).find('.flex-control-nav').show(); + + } + }, + before: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + $f(slider.slides.eq(slider.currentSlide).find('iframe')[0] ).api('pause'); + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + + /* ------------------ YOUTUBE FOR AUTOSLIDER ------------------ */ + playVideoAndPauseOthers(slider); + } + }, + after: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + + jQuery(slider).find('.flex-control-nav').css('bottom', '-30px'); + + jQuery(slider).find('.flex-control-nav').hide(); + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + } else { + + jQuery(slider).find('.flex-control-nav').css('bottom', '0px'); + + jQuery(slider).find('.flex-control-nav').show(); + + } + } + }); + + function playVideoAndPauseOthers(slider) { + jQuery(slider).find('iframe').each(function(i) { + var func = 'stopVideo'; + this.contentWindow.postMessage('{"event":"command","func":"' + func + '","args":""}', '*'); + }); + } + + /* ------------------ PREV & NEXT BUTTON FOR FLEXSLIDER (YOUTUBE) ------------------ */ + jQuery('.flex-next, .flex-prev').click(function() { + playVideoAndPauseOthers(jQuery(this).parents('.flexslider, .tfs-slider')); + }); + + function onPlayerStateChange(frame, slider) { + return function(event) { + if(event.data == YT.PlayerState.PLAYING) { + jQuery(slider).flexslider("pause"); + } + if(event.data == YT.PlayerState.PAUSED) { + jQuery(slider).flexslider("play"); + } + } + } + } + + if(jQuery().isotope) { + var gridwidth = (jQuery('.grid-layout').width() / 2) - 22; + jQuery('.grid-layout .post').css('width', gridwidth); + jQuery('.grid-layout').isotope({ + layoutMode: 'masonry', + itemSelector: '.post', + transformsEnabled: false, + masonry: { + columnWidth: gridwidth, + gutterWidth: 40 + }, + }); + + var gridwidth = (jQuery('.grid-full-layout-3').width() / 3) - 30; + jQuery('.grid-full-layout-3 .post').css('width', gridwidth); + jQuery('.grid-full-layout-3').isotope({ + layoutMode: 'masonry', + itemSelector: '.post', + transformsEnabled: false, + masonry: { + columnWidth: gridwidth, + gutterWidth: 40 + }, + }); + + var gridwidth = (jQuery('.grid-full-layout-4').width() / 4) - 35; + jQuery('.grid-full-layout-4 .post').css('width', gridwidth); + jQuery('.grid-full-layout-4').isotope({ + layoutMode: 'masonry', + itemSelector: '.post', + transformsEnabled: false, + masonry: { + columnWidth: gridwidth, + gutterWidth: 40 + }, + }); + } + + + jQuery('.rev_slider_wrapper').each(function() { + if(jQuery(this).length >=1 && jQuery(this).find('.tp-bannershadow').length == 0) { + jQuery('
                  ').appendTo(this); + jQuery('
                  ').appendTo(this); + + jQuery(this).addClass('avada-skin-rev'); + } + }); + + jQuery('.tparrows').each(function() { + if(jQuery(this).css('visibility') == 'hidden') { + jQuery(this).remove(); + } + }); + +}); +jQuery(document).ready(function() { + function onAfter(curr, next, opts, fwd) { + var $ht = jQuery(this).height(); + + //set the container's height to that of the current slide + jQuery(this).parent().css('height', $ht); + } + if(jQuery().cycle) { + jQuery('.reviews').cycle({ + fx: 'fade', + after: onAfter, + + timeout: + + }); + } + + +}); +jQuery(window).load(function($) { + jQuery('.header-social .menu > li').height(jQuery('.header-social').height()); + jQuery('.header-social .menu > li').css('line-height', jQuery('.header-social').height()+'px'); + jQuery('.header-social .menu > li.cart').css('line-height', jQuery('.header-social').height()+'px'); + + if(jQuery('.top-menu .cart').width() > 150) { + new_width = jQuery('.top-menu .cart').width(); + jQuery('.top-menu .cart-contents').css("width", new_width+'px'); + new_width -= 26; + jQuery('.top-menu .cart-content a').css("width", new_width+'px'); + new_width -= 56; + jQuery('.top-menu .cart-content a .cart-desc').css("width", new_width+'px'); + }; + + if(jQuery().prettyPhoto) { + var ppArgs = { + + animation_speed: '', + + overlay_gallery: , + autoplay_slideshow: , + + slideshow: , + + + opacity: , + + show_title: , + show_desc: , + + }; + + jQuery("a[rel^='prettyPhoto']").prettyPhoto(ppArgs); + + + jQuery('.single-post .post-content a').has('img').prettyPhoto(ppArgs); + + + jQuery('.lightbox-enabled a').has('img').prettyPhoto(ppArgs); + + var mediaQuery = 'desk'; + + if (Modernizr.mq('only screen and (max-width: 600px)') || Modernizr.mq('only screen and (max-height: 520px)')) { + + mediaQuery = 'mobile'; + jQuery("a[rel^='prettyPhoto']").unbind('click'); + + jQuery('.single-post .post-content a').has('img').unbind('click'); + + jQuery('.lightbox-enabled a').has('img').unbind('click'); + } + + // Disables prettyPhoto if screen small + jQuery(window).on('resize', function() { + if ((Modernizr.mq('only screen and (max-width: 600px)') || Modernizr.mq('only screen and (max-height: 520px)')) && mediaQuery == 'desk') { + jQuery("a[rel^='prettyPhoto']").unbind('click.prettyphoto'); + + jQuery('.single-post .post-content a').has('img').unbind('click.prettyphoto'); + + jQuery('.lightbox-enabled a').has('img').unbind('click.prettyphoto'); + mediaQuery = 'mobile'; + } else if (!Modernizr.mq('only screen and (max-width: 600px)') && !Modernizr.mq('only screen and (max-height: 520px)') && mediaQuery == 'mobile') { + jQuery("a[rel^='prettyPhoto']").prettyPhoto(ppArgs); + + jQuery('.single-post .post-content a').has('img').prettyPhoto(ppArgs); + + jQuery('.lightbox-enabled a').has('img').prettyPhoto(ppArgs); + mediaQuery = 'desk'; + } + }); + } + + jQuery('.side-nav li a').live('click', function(e) { + if(jQuery(this).find('.arrow').length >= 1) { + if(jQuery(this).parent().find('> .children').length >= 1 && !$(this).parent().find('> .children').is(':visible')) { + jQuery(this).parent().find('> .children').stop(true, true).slideDown('slow'); + } else { + jQuery(this).parent().find('> .children').stop(true, true).slideUp('slow'); + } + } + + if(jQuery(this).find('.arrow').length >= 1) { + return false; + } + }); + + jQuery('.side-nav li').hoverIntent({ + over: function() { + if(jQuery(this).find('> .children').length >= 1) { + jQuery(this).find('> .children').stop(true, true).slideDown('slow'); + } + }, + out: function() { + if(jQuery(this).find('.current_page_item').length == 0 && jQuery(this).hasClass('current_page_item') == false) { + jQuery(this).find('.children').stop(true, true).slideUp('slow'); + } + }, + timeout: 500 + }); + + + if(jQuery().eislideshow) { + jQuery('#ei-slider').eislideshow({ + + animation: '', + + autoplay: , + + slideshow_interval: , + + + speed: , + + + thumbMaxWidth: + + }); + } + + var retina = window.devicePixelRatio > 1 ? true : false; + + + if(retina) { + jQuery('.social-networks li.custom').each(function() { + jQuery(this).find('img').attr('src', ''); + jQuery(this).find('img').attr('width', ''); + jQuery(this).find('img').attr('height', ''); + }) + } + + + /* wpml flag in center */ + var wpml_flag = jQuery('ul#navigation > li > a > .iclflag'); + var wpml_h = wpml_flag.height(); + wpml_flag.css('margin-top', +wpml_h / - 2 + "px"); + + var wpml_flag = jQuery('.top-menu > ul > li > a > .iclflag'); + var wpml_h = wpml_flag.height(); + wpml_flag.css('margin-top', +wpml_h / - 2 + "px"); + + + jQuery('#posts-container').infinitescroll({ + navSelector : "div.pagination", + // selector for the paged navigation (it will be hidden) + nextSelector : "a.pagination-next", + // selector for the NEXT link (to page 2) + itemSelector : "div.post, .timeline-date", + // selector for all items you'll retrieve + loading : { + finishedMsg: js_local_vars.infinte_blog_finished_msg, + msgText: js_local_vars.infinte_blog_text, + }, + errorCallback: function() { + jQuery('#posts-container').isotope('reLayout'); + } + }, function(posts) { + if(jQuery().isotope) { + //jQuery(posts).css('position', 'relative').css('top', 'auto').css('left', 'auto'); + + jQuery(posts).hide(); + imagesLoaded(posts, function() { + jQuery(posts).fadeIn(); + jQuery('#posts-container').isotope('appended', jQuery(posts)); + jQuery('#posts-container').isotope('reLayout'); + }); + + var gridwidth = (jQuery('.grid-layout').width() / 2) - 22; + jQuery('.grid-layout .post').css('width', gridwidth); + + var gridwidth = (jQuery('.grid-full-layout-3').width() / 3) - 30; + jQuery('.grid-full-layout-3 .post').css('width', gridwidth); + + var gridwidth = (jQuery('.grid-full-layout-4').width() / 4) - 35; + jQuery('.grid-full-layout-4 .post').css('width', gridwidth); + + jQuery('#posts-container').isotope('reLayout'); + } + + jQuery('.flexslider').flexslider({ + slideshow: , + slideshowSpeed: , + video: true, + pauseOnHover: false, + useCSS: false, + start: function(slider) { + if (typeof(slider.slides) !== 'undefined' && slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + + jQuery(slider).find('.flex-control-nav').css('bottom', '-30px'); + + jQuery(slider).find('.flex-control-nav').hide(); + + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + } else { + + jQuery(slider).find('.flex-control-nav').css('bottom', '0'); + + jQuery(slider).find('.flex-control-nav').show(); + + } + }, + before: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + $f(slider.slides.eq(slider.currentSlide).find('iframe')[0] ).api('pause'); + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + + /* ------------------ YOUTUBE FOR AUTOSLIDER ------------------ */ + playVideoAndPauseOthers(slider); + } + }, + after: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + + jQuery(slider).find('.flex-control-nav').css('bottom', '-30px'); + + jQuery(slider).find('.flex-control-nav').hide(); + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + } else { + + jQuery(slider).find('.flex-control-nav').css('bottom', '0px'); + + jQuery(slider).find('.flex-control-nav').show(); + + } + } + }); + if(jQuery().prettyPhoto) { jQuery("a[rel^='prettyPhoto']").prettyPhoto(ppArgs); } + jQuery(posts).each(function() { + jQuery(this).find('.full-video, .video-shortcode, .wooslider .slide-content').fitVids(); + }); + + if(jQuery().isotope) { + jQuery('#posts-container').isotope('reLayout'); + } + }); + + + jQuery('#posts-container-infinite').infinitescroll({ + navSelector : "div.pagination", + // selector for the paged navigation (it will be hidden) + nextSelector : "a.pagination-next", + // selector for the NEXT link (to page 2) + itemSelector : "div.post, .timeline-date", + // selector for all items you'll retrieve + loading : { + finishedMsg: js_local_vars.infinte_blog_finished_msg, + msgText: js_local_vars.infinte_blog_text, + }, + errorCallback: function() { + jQuery('#posts-container').isotope('reLayout'); + } + }, function(posts) { + if(jQuery().isotope) { + //jQuery(posts).css('top', 'auto').css('left', 'auto'); + + jQuery(posts).hide(); + imagesLoaded(posts, function() { + jQuery(posts).fadeIn(); + jQuery('#posts-container-infinite').isotope('appended', jQuery(posts)); + jQuery('#posts-container-infinite').isotope('reLayout'); + }); + + var gridwidth = (jQuery('.grid-layout').width() / 2) - 22; + jQuery('.grid-layout .post').css('width', gridwidth); + + var gridwidth = (jQuery('.grid-full-layout-3').width() / 3) - 30; + jQuery('.grid-full-layout-3 .post').css('width', gridwidth); + + var gridwidth = (jQuery('.grid-full-layout-4').width() / 4) - 35; + jQuery('.grid-full-layout-4 .post').css('width', gridwidth); + + jQuery('#posts-container-infinite').isotope('reLayout'); + } + + jQuery('.flexslider').flexslider({ + slideshow: , + slideshowSpeed: , + video: true, + pauseOnHover: false, + useCSS: false, + start: function(slider) { + if (typeof(slider.slides) !== 'undefined' && slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + + jQuery(slider).find('.flex-control-nav').css('bottom', '-30px'); + + jQuery(slider).find('.flex-control-nav').hide(); + + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + } else { + + jQuery(slider).find('.flex-control-nav').css('bottom', '0'); + + jQuery(slider).find('.flex-control-nav').show(); + + } + }, + before: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + $f(slider.slides.eq(slider.currentSlide).find('iframe')[0] ).api('pause'); + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + + /* ------------------ YOUTUBE FOR AUTOSLIDER ------------------ */ + playVideoAndPauseOthers(slider); + } + }, + after: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + + jQuery(slider).find('.flex-control-nav').css('bottom', '-30px'); + + jQuery(slider).find('.flex-control-nav').hide(); + + + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + } else { + + jQuery(slider).find('.flex-control-nav').css('bottom', '0px'); + + jQuery(slider).find('.flex-control-nav').show(); + + } + } + }); + if(jQuery().prettyPhoto) { jQuery("a[rel^='prettyPhoto']").prettyPhoto(ppArgs); } + jQuery(posts).each(function() { + jQuery(this).find('.full-video, .video-shortcode, .wooslider .slide-content').fitVids(); + }); + + if(jQuery().isotope) { + jQuery('#posts-container-infinite').isotope('reLayout'); + } + }); + + + jQuery('.portfolio-masonry .portfolio-wrapper').infinitescroll({ + //behavior: 'local', + //binder: jQuery('.portfolio-infinite .portfolio-wrapper'), + navSelector : "div.pagination", + // selector for the paged navigation (it will be hidden) + nextSelector : "a.pagination-next", + // selector for the NEXT link (to page 2) + itemSelector : "div.portfolio-item", + // selector for all items you'll retrieve + loading : { + finishedMsg: js_local_vars.infinte_finished_msg, + msgText: js_local_vars.infinte_blog_text, + }, + errorCallback: function() { + //jQuery('.portfolio-masonry .portfolio-wrapper').isotope('reLayout'); + }, + contentSelector: jQuery('.portfolio-masonry .portfolio-wrapper'), + }, function(posts) { + if(jQuery().isotope) { + //jQuery(posts).css('position', 'relative').css('top', 'auto').css('left', 'auto'); + + jQuery(posts).hide(); + + imagesLoaded(jQuery(posts), function() { + jQuery(posts).fadeIn(); + + jQuery('.portfolio-masonry .portfolio-wrapper').isotope('appended', jQuery(posts)); + + if(jQuery().prettyPhoto) { jQuery("a[rel^='prettyPhoto']").prettyPhoto(ppArgs); } + + jQuery(posts).each(function() { + jQuery(this).find('.full-video, .video-shortcode, .wooslider .slide-content').fitVids(); + }); + + jQuery('.portfolio-masonry .portfolio-wrapper').isotope('reLayout'); + }); + + //}); + + /*var gridwidth = (jQuery('.grid-layout').width() / 2) - 22; + jQuery('.grid-layout .post').css('width', gridwidth); + + var gridwidth = (jQuery('.grid-full-layout').width() / 3) - 30; + jQuery('.grid-full-layout .post').css('width', gridwidth);*/ + + //jQuery('.portfolio-masonry .portfolio-wrapper').isotope('reLayout'); + } + }); + +}); \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/framework/headers/header-drg.php b/src/wp-content/themes/double-r-group/framework/headers/header-drg.php new file mode 100644 index 0000000..981b9af --- /dev/null +++ b/src/wp-content/themes/double-r-group/framework/headers/header-drg.php @@ -0,0 +1,77 @@ + +
                  + + + + +
                  +
                  + + + + +
                  + +
                  +
                  + +
                  +
                  +
                  +
                  \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/framework/headers/header-lang-sel.php b/src/wp-content/themes/double-r-group/framework/headers/header-lang-sel.php new file mode 100644 index 0000000..53a5384 --- /dev/null +++ b/src/wp-content/themes/double-r-group/framework/headers/header-lang-sel.php @@ -0,0 +1,21 @@ + +
                  += 1): + foreach((array)$languages as $language): +?> + + + + <?php echo $language['native_name']; ?> + + <?php echo $language['native_name']; ?> + + + +
                  + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/framework/headers/header-social.php b/src/wp-content/themes/double-r-group/framework/headers/header-social.php new file mode 100644 index 0000000..3cfbbf0 --- /dev/null +++ b/src/wp-content/themes/double-r-group/framework/headers/header-social.php @@ -0,0 +1,196 @@ + + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/functions.php b/src/wp-content/themes/double-r-group/functions.php new file mode 100644 index 0000000..e9e43eb --- /dev/null +++ b/src/wp-content/themes/double-r-group/functions.php @@ -0,0 +1,260 @@ +get_default_language(); + if ($sitepress->get_default_language() == 'en') { + $lang = ''; + } + } else { + $lang = ''; + } + } + } else { + $lang = ''; + }*/ + + $upload_dir = wp_upload_dir(); + + $filename = trailingslashit($upload_dir['baseurl']) . 'drg.js'; + $filename_dir = trailingslashit($upload_dir['basedir']) . 'drg.js'; + if ($wp_filesystem) { + $file_status = $wp_filesystem->get_contents($filename_dir); + if (trim($file_status)) { + wp_dequeue_script('avada-dynamic-js'); + wp_enqueue_script('drg-dynamic-js', $filename, array(), null, true); + } + } + + $filename = trailingslashit($upload_dir['baseurl']) . 'drg.css'; + $filename_dir = trailingslashit($upload_dir['basedir']) . 'drg.css'; + if ($wp_filesystem) { + $file_status = $wp_filesystem->get_contents($filename_dir); + if (trim($file_status)) { + wp_dequeue_style('avada-dynamic-css'); + wp_enqueue_style('drg-dynamic-css', $filename); + } + } + + wp_register_script('double-r-group', get_stylesheet_directory_uri().'/js/main.js', array(), null, true); + wp_enqueue_script('double-r-group'); + + } /* if */ +} + + + +////////////////////////////////////////////////////////////////// +// Image +////////////////////////////////////////////////////////////////// +remove_shortcode('image'); +add_shortcode('image', 'drg_shortcode_image'); +function drg_shortcode_image($atts, $content = null) { + $image_id = tf_get_attachment_id_from_url($atts['image']); + + if(!$atts['alt'] && empty($atts['alt'])) { + if($image_id) { + $atts['alt'] = get_post_meta($image_id, '_wp_attachment_image_alt', true); + } else { + $atts['alt'] = ""; + } + } + + if($image_id) { + $title_attr = get_post_field('post_excerpt', $image_id); + } else { + $title_attr = ""; + } + + if(!$atts['link'] && empty($atts['link'])) { + $atts['link'] = $atts['image']; + } + + $html = '
                7. '; + $html .= ''.$atts['alt'].''; + $html .= '
                8. '; + return $html; +} + + +////////////////////////////////////////////////////////////////// +// Content box shortcode +////////////////////////////////////////////////////////////////// +remove_shortcode('content_box'); +add_shortcode('content_box', 'drg_shortcode_content_box'); + +function drg_shortcode_content_box($atts, $content = null) { + + extract(shortcode_atts(array( + 'linktarget' => '_self', + 'width' => '35', + 'height' => '35', + 'animation_type' => '', + 'animation_direction' => 'left', + 'animation_speed' => '', + 'img_id' => '', + ), $atts)); + + $direction_suffix = ''; + $animation_class = ''; + $animation_attribues = ''; + if ($animation_type) { + $animation_class = ' animated'; + if ($animation_type != 'flash' && $animation_type != 'shake') { + $direction_suffix = 'In' . ucfirst($animation_direction); + $animation_type .= $direction_suffix; + } + $animation_attribues = ' animation_type="' . $animation_type . '"'; + + if ($animation_speed) { + $animation_attribues .= ' animation_duration="' . $animation_speed . '"'; + } + } + + $str = ''; + if (!empty($atts['last']) && $atts['last'] == 'yes'): + $str .= '
                  '; + else: + $str .= '
                  '; + endif; + + if ((isset($atts['image']) && $atts['image']) || (isset($atts['title']) && $atts['title'])): + if (!empty($atts['image'])) { + $margin_left = -$atts['image_width'] / 2; + $margin_top = 0; + if ($atts['image_height'] < 64) { + $margin_top = strval((64 - $atts['image_height']) / 2) . 'px'; + } + $padding_left = $atts['image_width'] + 10; + $img_id = "id" . strval(mt_rand()); + $str .= ""; + } + if (!empty($atts['image']) || !empty($atts['icon'])) { + $str .= '
                  '; + } else { + $str .= '
                  '; + } + if (isset($atts['image']) && $atts['image']): + if ($animation_type) { + $animation_class = 'class="animated"'; + } + $str .= '
                  '; + elseif (!empty($atts['icon']) && $atts['icon']): + $str .= ''; + endif; + if ($atts['title']): + $str .= '

                  ' . $atts['title'] . '

                  '; + endif; + $str .= '
                  '; + endif; + + $str .= '
                  '; + + $str .= do_shortcode($content); + + if (isset($atts['link']) && $atts['link'] && isset($atts['linktext']) && $atts['linktext']): + $str .= '' . $atts['linktext'] . ''; + endif; + + $str .= '
                  '; + + $str .= '
                  '; + + return $str; +} + diff --git a/src/wp-content/themes/double-r-group/header.php b/src/wp-content/themes/double-r-group/header.php new file mode 100644 index 0000000..39b2d40 --- /dev/null +++ b/src/wp-content/themes/double-r-group/header.php @@ -0,0 +1,1124 @@ + +> + + + + + + <?php + if ( defined('WPSEO_VERSION') ) { + wp_title(''); + } else { + bloginfo('name'); ?> <?php wp_title(' - ', true, 'left'); + } + ?> + + + + + parent_theme) { + $template_dir = basename(get_template_directory()); + $theme_info = wp_get_theme($template_dir); + } + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID; + } + + if(class_exists('Woocommerce')) { + if(is_shop() || is_tax('product_cat') || is_tax('product_tag')) { + $c_pageID = get_option('woocommerce_shop_page_id'); + } + } + } + ?> + + + + + + + + + + + + + + + + + + +> +
                  > + + + + +
                  + +
                  + + +
                  + + + + ID; + } + if(!is_home() && is_front_page() && isset($post)) { + $slider_page_id = $post->ID; + } + if(is_home() && !is_front_page()){ + $slider_page_id = get_option('page_for_posts'); + } + if(class_exists('Woocommerce')) { + if(is_shop()) { + $slider_page_id = get_option('woocommerce_shop_page_id'); + } + } + if(get_post_meta($slider_page_id, 'pyre_slider_type', true) == 'layer' && (get_post_meta($slider_page_id, 'pyre_slider', true) || get_post_meta($slider_page_id, 'pyre_slider', true) != 0)): ?> + prefix . "layerslider"; + $ls_id = get_post_meta($slider_page_id, 'pyre_slider', true); + $ls_slider = $wpdb->get_row("SELECT * FROM $ls_table_name WHERE id = ".(int)$ls_id." ORDER BY date_c DESC LIMIT 1" , ARRAY_A); + $ls_slider = json_decode($ls_slider['data'], true); + ?> + +
                  +
                  + +
                  + + + +
                  + +
                  +
                  + + + + + + +
                  + + +
                  + +
                  + + + + +
                  +
                  +
                  +
                  + +

                  + + + + + +

                  + +

                  + +

                  + + +
                  + + + + + + + +
                  +
                  +
                  + + +
                  +
                  +
                  +
                  + +

                  + +
                  + + + + + + + +
                  +
                  +
                  + + +
                  +
                  +
                  +
                  +

                  +
                  + + + + + + + +
                  +
                  +
                  + + +
                  +
                  +
                  +
                  +

                  +
                  +
                  +
                  +
                  + + +
                  +
                  +
                  +
                  +

                  + + ' . get_the_date() . '' ); ?> + + ' . get_the_date( _x( 'F Y', 'monthly archives date format', 'Avada' ) ) . '' ); ?> + + ' . get_the_date( _x( 'Y', 'yearly archives date format', 'Avada' ) ) . '' ); ?> + + + nickname; ?> + + + +

                  +
                  + + + + + + + +
                  +
                  +
                  + + version && is_woocommerce() && ((is_product() && get_post_meta($c_pageID, 'pyre_page_title', true) == 'yes') || (is_shop() && get_post_meta($c_pageID, 'pyre_page_title', true) == 'yes')) && !is_search()): + ?> +
                  +
                  +
                  +
                  + +

                  + +

                  + +

                  + +

                  + + + +
                  + + + '', + 'before' => '
                9. ', + 'after' => '
                10. ', + 'delimiter' => '' + )); ?> + + + + +
                  +
                  +
                  + + +
                  +
                  +
                  +
                  +

                  + + ' . get_the_date() . '' ); ?> + + ' . get_the_date( _x( 'F Y', 'monthly archives date format', 'Avada' ) ) . '' ); ?> + + ' . get_the_date( _x( 'Y', 'yearly archives date format', 'Avada' ) ) . '' ); ?> + + + nickname; ?> + + + +

                  +
                  + + + + + + + +
                  +
                  +
                  + + + +
                  +
                  +
                  +
                  + +

                  + +
                  + + + '', 'sep' => ' ', 'crumb_before' => '
                11. ', 'crumb_after' => '
                12. ', 'home_text' => __('Home', 'Avada')) ); ?> + + + + +
                  +
                  +
                  + + + + + + + + + + +
                  +
                  + + + + + +
                  +
                  + + +
                  +
                  + diff --git a/src/wp-content/themes/double-r-group/images/Logo-RR-footer.png b/src/wp-content/themes/double-r-group/images/Logo-RR-footer.png new file mode 100644 index 0000000..e44a5e7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/Logo-RR-footer.png differ diff --git a/src/wp-content/themes/double-r-group/images/Logo-RR-footer@2x.png b/src/wp-content/themes/double-r-group/images/Logo-RR-footer@2x.png new file mode 100644 index 0000000..6326774 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/Logo-RR-footer@2x.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AD.png b/src/wp-content/themes/double-r-group/images/flags/16/AD.png new file mode 100644 index 0000000..bdbe434 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AE.png b/src/wp-content/themes/double-r-group/images/flags/16/AE.png new file mode 100644 index 0000000..501ebc6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AF.png b/src/wp-content/themes/double-r-group/images/flags/16/AF.png new file mode 100644 index 0000000..61e9518 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AG.png b/src/wp-content/themes/double-r-group/images/flags/16/AG.png new file mode 100644 index 0000000..cb6b940 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AI.png b/src/wp-content/themes/double-r-group/images/flags/16/AI.png new file mode 100644 index 0000000..3206b92 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AL.png b/src/wp-content/themes/double-r-group/images/flags/16/AL.png new file mode 100644 index 0000000..5bd4986 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AM.png b/src/wp-content/themes/double-r-group/images/flags/16/AM.png new file mode 100644 index 0000000..83df09a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AN.png b/src/wp-content/themes/double-r-group/images/flags/16/AN.png new file mode 100644 index 0000000..0fc1c3b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AO.png b/src/wp-content/themes/double-r-group/images/flags/16/AO.png new file mode 100644 index 0000000..fa426da Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AQ.png b/src/wp-content/themes/double-r-group/images/flags/16/AQ.png new file mode 100644 index 0000000..cfa0b9f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AR.png b/src/wp-content/themes/double-r-group/images/flags/16/AR.png new file mode 100644 index 0000000..e1fa97b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AS.png b/src/wp-content/themes/double-r-group/images/flags/16/AS.png new file mode 100644 index 0000000..43b5aec Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AT.png b/src/wp-content/themes/double-r-group/images/flags/16/AT.png new file mode 100644 index 0000000..794bd2f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AU.png b/src/wp-content/themes/double-r-group/images/flags/16/AU.png new file mode 100644 index 0000000..11f4d1c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AW.png b/src/wp-content/themes/double-r-group/images/flags/16/AW.png new file mode 100644 index 0000000..b21c2ea Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AX.png b/src/wp-content/themes/double-r-group/images/flags/16/AX.png new file mode 100644 index 0000000..46a1802 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/AZ.png b/src/wp-content/themes/double-r-group/images/flags/16/AZ.png new file mode 100644 index 0000000..878e559 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/AZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BA.png b/src/wp-content/themes/double-r-group/images/flags/16/BA.png new file mode 100644 index 0000000..b484edb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BB.png b/src/wp-content/themes/double-r-group/images/flags/16/BB.png new file mode 100644 index 0000000..be3d149 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BD.png b/src/wp-content/themes/double-r-group/images/flags/16/BD.png new file mode 100644 index 0000000..b6c440a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BE.png b/src/wp-content/themes/double-r-group/images/flags/16/BE.png new file mode 100644 index 0000000..5e47a3a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BF.png b/src/wp-content/themes/double-r-group/images/flags/16/BF.png new file mode 100644 index 0000000..9e0643c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BG.png b/src/wp-content/themes/double-r-group/images/flags/16/BG.png new file mode 100644 index 0000000..775550c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BH.png b/src/wp-content/themes/double-r-group/images/flags/16/BH.png new file mode 100644 index 0000000..b3eb851 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BI.png b/src/wp-content/themes/double-r-group/images/flags/16/BI.png new file mode 100644 index 0000000..394a829 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BJ.png b/src/wp-content/themes/double-r-group/images/flags/16/BJ.png new file mode 100644 index 0000000..688797f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BL.png b/src/wp-content/themes/double-r-group/images/flags/16/BL.png new file mode 100644 index 0000000..79e24d2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BM.png b/src/wp-content/themes/double-r-group/images/flags/16/BM.png new file mode 100644 index 0000000..132e990 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BN.png b/src/wp-content/themes/double-r-group/images/flags/16/BN.png new file mode 100644 index 0000000..62882e8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BO.png b/src/wp-content/themes/double-r-group/images/flags/16/BO.png new file mode 100644 index 0000000..63d8e76 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BR.png b/src/wp-content/themes/double-r-group/images/flags/16/BR.png new file mode 100644 index 0000000..42e1849 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BS.png b/src/wp-content/themes/double-r-group/images/flags/16/BS.png new file mode 100644 index 0000000..aabafab Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BT.png b/src/wp-content/themes/double-r-group/images/flags/16/BT.png new file mode 100644 index 0000000..026fde3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BW.png b/src/wp-content/themes/double-r-group/images/flags/16/BW.png new file mode 100644 index 0000000..b4a502b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BY.png b/src/wp-content/themes/double-r-group/images/flags/16/BY.png new file mode 100644 index 0000000..0376c98 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/BZ.png b/src/wp-content/themes/double-r-group/images/flags/16/BZ.png new file mode 100644 index 0000000..0291200 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/BZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CA.png b/src/wp-content/themes/double-r-group/images/flags/16/CA.png new file mode 100644 index 0000000..0906eca Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CC.png b/src/wp-content/themes/double-r-group/images/flags/16/CC.png new file mode 100644 index 0000000..d599e12 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CD.png b/src/wp-content/themes/double-r-group/images/flags/16/CD.png new file mode 100644 index 0000000..de00b2f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CF.png b/src/wp-content/themes/double-r-group/images/flags/16/CF.png new file mode 100644 index 0000000..32cb360 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CG.png b/src/wp-content/themes/double-r-group/images/flags/16/CG.png new file mode 100644 index 0000000..f35021f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CH.png b/src/wp-content/themes/double-r-group/images/flags/16/CH.png new file mode 100644 index 0000000..de304f3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CI.png b/src/wp-content/themes/double-r-group/images/flags/16/CI.png new file mode 100644 index 0000000..e519e0b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CK.png b/src/wp-content/themes/double-r-group/images/flags/16/CK.png new file mode 100644 index 0000000..e07ed83 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CL.png b/src/wp-content/themes/double-r-group/images/flags/16/CL.png new file mode 100644 index 0000000..57bf33e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CM.png b/src/wp-content/themes/double-r-group/images/flags/16/CM.png new file mode 100644 index 0000000..7b21abc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CN.png b/src/wp-content/themes/double-r-group/images/flags/16/CN.png new file mode 100644 index 0000000..8c35f25 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CO.png b/src/wp-content/themes/double-r-group/images/flags/16/CO.png new file mode 100644 index 0000000..25142bc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CR.png b/src/wp-content/themes/double-r-group/images/flags/16/CR.png new file mode 100644 index 0000000..17eeb62 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CU.png b/src/wp-content/themes/double-r-group/images/flags/16/CU.png new file mode 100644 index 0000000..cd80f6d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CV.png b/src/wp-content/themes/double-r-group/images/flags/16/CV.png new file mode 100644 index 0000000..f0c6fb0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CW.png b/src/wp-content/themes/double-r-group/images/flags/16/CW.png new file mode 100644 index 0000000..ebcbaf1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CX.png b/src/wp-content/themes/double-r-group/images/flags/16/CX.png new file mode 100644 index 0000000..6d068d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CY.png b/src/wp-content/themes/double-r-group/images/flags/16/CY.png new file mode 100644 index 0000000..3aff6b8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/CZ.png b/src/wp-content/themes/double-r-group/images/flags/16/CZ.png new file mode 100644 index 0000000..1bbbf0d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/CZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/DE.png b/src/wp-content/themes/double-r-group/images/flags/16/DE.png new file mode 100644 index 0000000..d282989 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/DE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/DJ.png b/src/wp-content/themes/double-r-group/images/flags/16/DJ.png new file mode 100644 index 0000000..78660a1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/DJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/DK.png b/src/wp-content/themes/double-r-group/images/flags/16/DK.png new file mode 100644 index 0000000..a81768c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/DK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/DM.png b/src/wp-content/themes/double-r-group/images/flags/16/DM.png new file mode 100644 index 0000000..93700d7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/DM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/DO.png b/src/wp-content/themes/double-r-group/images/flags/16/DO.png new file mode 100644 index 0000000..4b2c207 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/DO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/DZ.png b/src/wp-content/themes/double-r-group/images/flags/16/DZ.png new file mode 100644 index 0000000..65a50f3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/DZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/EC.png b/src/wp-content/themes/double-r-group/images/flags/16/EC.png new file mode 100644 index 0000000..204c631 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/EC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/EE.png b/src/wp-content/themes/double-r-group/images/flags/16/EE.png new file mode 100644 index 0000000..6c19913 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/EE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/EG.png b/src/wp-content/themes/double-r-group/images/flags/16/EG.png new file mode 100644 index 0000000..96c93ed Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/EG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/EH.png b/src/wp-content/themes/double-r-group/images/flags/16/EH.png new file mode 100644 index 0000000..2a53959 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/EH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/ER.png b/src/wp-content/themes/double-r-group/images/flags/16/ER.png new file mode 100644 index 0000000..273ef15 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/ER.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/ES.png b/src/wp-content/themes/double-r-group/images/flags/16/ES.png new file mode 100644 index 0000000..df2315f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/ES.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/ET.png b/src/wp-content/themes/double-r-group/images/flags/16/ET.png new file mode 100644 index 0000000..c66f7ac Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/ET.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/EU.png b/src/wp-content/themes/double-r-group/images/flags/16/EU.png new file mode 100644 index 0000000..7652407 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/EU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/FI.png b/src/wp-content/themes/double-r-group/images/flags/16/FI.png new file mode 100644 index 0000000..627ad2e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/FI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/FJ.png b/src/wp-content/themes/double-r-group/images/flags/16/FJ.png new file mode 100644 index 0000000..a90ae00 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/FJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/FK.png b/src/wp-content/themes/double-r-group/images/flags/16/FK.png new file mode 100644 index 0000000..8c4e4a7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/FK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/FM.png b/src/wp-content/themes/double-r-group/images/flags/16/FM.png new file mode 100644 index 0000000..bf420a8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/FM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/FO.png b/src/wp-content/themes/double-r-group/images/flags/16/FO.png new file mode 100644 index 0000000..4264083 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/FO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/FR.png b/src/wp-content/themes/double-r-group/images/flags/16/FR.png new file mode 100644 index 0000000..b18c5ff Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/FR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GA.png b/src/wp-content/themes/double-r-group/images/flags/16/GA.png new file mode 100644 index 0000000..2b198db Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GB.png b/src/wp-content/themes/double-r-group/images/flags/16/GB.png new file mode 100644 index 0000000..a1d267e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GD.png b/src/wp-content/themes/double-r-group/images/flags/16/GD.png new file mode 100644 index 0000000..5ec83c4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GE.png b/src/wp-content/themes/double-r-group/images/flags/16/GE.png new file mode 100644 index 0000000..b6b33ec Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GG.png b/src/wp-content/themes/double-r-group/images/flags/16/GG.png new file mode 100644 index 0000000..f2c1b71 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GH.png b/src/wp-content/themes/double-r-group/images/flags/16/GH.png new file mode 100644 index 0000000..3ba2af7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GI.png b/src/wp-content/themes/double-r-group/images/flags/16/GI.png new file mode 100644 index 0000000..7a79f3e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GL.png b/src/wp-content/themes/double-r-group/images/flags/16/GL.png new file mode 100644 index 0000000..6f27d69 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GM.png b/src/wp-content/themes/double-r-group/images/flags/16/GM.png new file mode 100644 index 0000000..b056657 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GN.png b/src/wp-content/themes/double-r-group/images/flags/16/GN.png new file mode 100644 index 0000000..4b4a25a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GQ.png b/src/wp-content/themes/double-r-group/images/flags/16/GQ.png new file mode 100644 index 0000000..22e85d7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GR.png b/src/wp-content/themes/double-r-group/images/flags/16/GR.png new file mode 100644 index 0000000..9321a1e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GS.png b/src/wp-content/themes/double-r-group/images/flags/16/GS.png new file mode 100644 index 0000000..fbd3fd7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GT.png b/src/wp-content/themes/double-r-group/images/flags/16/GT.png new file mode 100644 index 0000000..dacd490 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GU.png b/src/wp-content/themes/double-r-group/images/flags/16/GU.png new file mode 100644 index 0000000..fa0cc49 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GW.png b/src/wp-content/themes/double-r-group/images/flags/16/GW.png new file mode 100644 index 0000000..4f48bec Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/GY.png b/src/wp-content/themes/double-r-group/images/flags/16/GY.png new file mode 100644 index 0000000..17a1692 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/GY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/HK.png b/src/wp-content/themes/double-r-group/images/flags/16/HK.png new file mode 100644 index 0000000..a2bd2ea Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/HK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/HN.png b/src/wp-content/themes/double-r-group/images/flags/16/HN.png new file mode 100644 index 0000000..4aadec8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/HN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/HR.png b/src/wp-content/themes/double-r-group/images/flags/16/HR.png new file mode 100644 index 0000000..d0b5266 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/HR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/HT.png b/src/wp-content/themes/double-r-group/images/flags/16/HT.png new file mode 100644 index 0000000..d20cf24 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/HT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/HU.png b/src/wp-content/themes/double-r-group/images/flags/16/HU.png new file mode 100644 index 0000000..ae5c6c9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/HU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/IC.png b/src/wp-content/themes/double-r-group/images/flags/16/IC.png new file mode 100644 index 0000000..c1d8d46 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/IC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/ID.png b/src/wp-content/themes/double-r-group/images/flags/16/ID.png new file mode 100644 index 0000000..9881b87 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/ID.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/IE.png b/src/wp-content/themes/double-r-group/images/flags/16/IE.png new file mode 100644 index 0000000..ec9ba0f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/IE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/IL.png b/src/wp-content/themes/double-r-group/images/flags/16/IL.png new file mode 100644 index 0000000..13e3503 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/IL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/IM.png b/src/wp-content/themes/double-r-group/images/flags/16/IM.png new file mode 100644 index 0000000..06ee5c4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/IM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/IN.png b/src/wp-content/themes/double-r-group/images/flags/16/IN.png new file mode 100644 index 0000000..e5dd9d2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/IN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/IQ.png b/src/wp-content/themes/double-r-group/images/flags/16/IQ.png new file mode 100644 index 0000000..1f28ebd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/IQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/IR.png b/src/wp-content/themes/double-r-group/images/flags/16/IR.png new file mode 100644 index 0000000..5388dfb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/IR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/IS.png b/src/wp-content/themes/double-r-group/images/flags/16/IS.png new file mode 100644 index 0000000..d535f7f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/IS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/IT.png b/src/wp-content/themes/double-r-group/images/flags/16/IT.png new file mode 100644 index 0000000..42d1677 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/IT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/JE.png b/src/wp-content/themes/double-r-group/images/flags/16/JE.png new file mode 100644 index 0000000..407e319 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/JE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/JM.png b/src/wp-content/themes/double-r-group/images/flags/16/JM.png new file mode 100644 index 0000000..6237052 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/JM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/JO.png b/src/wp-content/themes/double-r-group/images/flags/16/JO.png new file mode 100644 index 0000000..8e11b7b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/JO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/JP.png b/src/wp-content/themes/double-r-group/images/flags/16/JP.png new file mode 100644 index 0000000..a742140 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/JP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/KE.png b/src/wp-content/themes/double-r-group/images/flags/16/KE.png new file mode 100644 index 0000000..e1ac097 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/KE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/KG.png b/src/wp-content/themes/double-r-group/images/flags/16/KG.png new file mode 100644 index 0000000..2de2061 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/KG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/KH.png b/src/wp-content/themes/double-r-group/images/flags/16/KH.png new file mode 100644 index 0000000..4f80d8c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/KH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/KI.png b/src/wp-content/themes/double-r-group/images/flags/16/KI.png new file mode 100644 index 0000000..1990c8d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/KI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/KM.png b/src/wp-content/themes/double-r-group/images/flags/16/KM.png new file mode 100644 index 0000000..5eedfeb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/KM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/KN.png b/src/wp-content/themes/double-r-group/images/flags/16/KN.png new file mode 100644 index 0000000..be930df Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/KN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/KP.png b/src/wp-content/themes/double-r-group/images/flags/16/KP.png new file mode 100644 index 0000000..9716adc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/KP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/KR.png b/src/wp-content/themes/double-r-group/images/flags/16/KR.png new file mode 100644 index 0000000..7878247 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/KR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/KW.png b/src/wp-content/themes/double-r-group/images/flags/16/KW.png new file mode 100644 index 0000000..af0191c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/KW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/KY.png b/src/wp-content/themes/double-r-group/images/flags/16/KY.png new file mode 100644 index 0000000..c787eb0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/KY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/KZ.png b/src/wp-content/themes/double-r-group/images/flags/16/KZ.png new file mode 100644 index 0000000..5fe5a82 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/KZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/LA.png b/src/wp-content/themes/double-r-group/images/flags/16/LA.png new file mode 100644 index 0000000..d68c937 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/LA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/LB.png b/src/wp-content/themes/double-r-group/images/flags/16/LB.png new file mode 100644 index 0000000..627a3aa Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/LB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/LC.png b/src/wp-content/themes/double-r-group/images/flags/16/LC.png new file mode 100644 index 0000000..8e93f66 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/LC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/LI.png b/src/wp-content/themes/double-r-group/images/flags/16/LI.png new file mode 100644 index 0000000..7d65fba Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/LI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/LK.png b/src/wp-content/themes/double-r-group/images/flags/16/LK.png new file mode 100644 index 0000000..e926ca3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/LK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/LR.png b/src/wp-content/themes/double-r-group/images/flags/16/LR.png new file mode 100644 index 0000000..4918491 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/LR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/LS.png b/src/wp-content/themes/double-r-group/images/flags/16/LS.png new file mode 100644 index 0000000..c8a5493 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/LS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/LT.png b/src/wp-content/themes/double-r-group/images/flags/16/LT.png new file mode 100644 index 0000000..f12a14b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/LT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/LU.png b/src/wp-content/themes/double-r-group/images/flags/16/LU.png new file mode 100644 index 0000000..59b08cc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/LU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/LV.png b/src/wp-content/themes/double-r-group/images/flags/16/LV.png new file mode 100644 index 0000000..c31180d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/LV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/LY.png b/src/wp-content/themes/double-r-group/images/flags/16/LY.png new file mode 100644 index 0000000..6847120 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/LY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MA.png b/src/wp-content/themes/double-r-group/images/flags/16/MA.png new file mode 100644 index 0000000..67fe432 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MC.png b/src/wp-content/themes/double-r-group/images/flags/16/MC.png new file mode 100644 index 0000000..9881b87 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MD.png b/src/wp-content/themes/double-r-group/images/flags/16/MD.png new file mode 100644 index 0000000..4ebe0d6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/ME.png b/src/wp-content/themes/double-r-group/images/flags/16/ME.png new file mode 100644 index 0000000..96e74b0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/ME.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MF.png b/src/wp-content/themes/double-r-group/images/flags/16/MF.png new file mode 100644 index 0000000..4aafb1f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MG.png b/src/wp-content/themes/double-r-group/images/flags/16/MG.png new file mode 100644 index 0000000..c55a2f4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MH.png b/src/wp-content/themes/double-r-group/images/flags/16/MH.png new file mode 100644 index 0000000..7ffbb41 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MK.png b/src/wp-content/themes/double-r-group/images/flags/16/MK.png new file mode 100644 index 0000000..1f6b1c7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/ML.png b/src/wp-content/themes/double-r-group/images/flags/16/ML.png new file mode 100644 index 0000000..530e5c5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/ML.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MM.png b/src/wp-content/themes/double-r-group/images/flags/16/MM.png new file mode 100644 index 0000000..102f811 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MN.png b/src/wp-content/themes/double-r-group/images/flags/16/MN.png new file mode 100644 index 0000000..8589e8d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MO.png b/src/wp-content/themes/double-r-group/images/flags/16/MO.png new file mode 100644 index 0000000..ff2e117 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MP.png b/src/wp-content/themes/double-r-group/images/flags/16/MP.png new file mode 100644 index 0000000..0a80d84 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MQ.png b/src/wp-content/themes/double-r-group/images/flags/16/MQ.png new file mode 100644 index 0000000..5d78e64 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MR.png b/src/wp-content/themes/double-r-group/images/flags/16/MR.png new file mode 100644 index 0000000..f25680e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MS.png b/src/wp-content/themes/double-r-group/images/flags/16/MS.png new file mode 100644 index 0000000..1689556 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MT.png b/src/wp-content/themes/double-r-group/images/flags/16/MT.png new file mode 100644 index 0000000..e77d8b2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MU.png b/src/wp-content/themes/double-r-group/images/flags/16/MU.png new file mode 100644 index 0000000..d7d7e1c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MV.png b/src/wp-content/themes/double-r-group/images/flags/16/MV.png new file mode 100644 index 0000000..94d63cf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MW.png b/src/wp-content/themes/double-r-group/images/flags/16/MW.png new file mode 100644 index 0000000..9b70c79 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MX.png b/src/wp-content/themes/double-r-group/images/flags/16/MX.png new file mode 100644 index 0000000..d05b37a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MY.png b/src/wp-content/themes/double-r-group/images/flags/16/MY.png new file mode 100644 index 0000000..9b7b458 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/MZ.png b/src/wp-content/themes/double-r-group/images/flags/16/MZ.png new file mode 100644 index 0000000..a919a16 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/MZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/NA.png b/src/wp-content/themes/double-r-group/images/flags/16/NA.png new file mode 100644 index 0000000..a053026 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/NA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/NC.png b/src/wp-content/themes/double-r-group/images/flags/16/NC.png new file mode 100644 index 0000000..d04c592 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/NC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/NE.png b/src/wp-content/themes/double-r-group/images/flags/16/NE.png new file mode 100644 index 0000000..94c9512 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/NE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/NF.png b/src/wp-content/themes/double-r-group/images/flags/16/NF.png new file mode 100644 index 0000000..d09be06 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/NF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/NG.png b/src/wp-content/themes/double-r-group/images/flags/16/NG.png new file mode 100644 index 0000000..4265810 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/NG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/NI.png b/src/wp-content/themes/double-r-group/images/flags/16/NI.png new file mode 100644 index 0000000..3b542e4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/NI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/NL.png b/src/wp-content/themes/double-r-group/images/flags/16/NL.png new file mode 100644 index 0000000..e1ede53 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/NL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/NO.png b/src/wp-content/themes/double-r-group/images/flags/16/NO.png new file mode 100644 index 0000000..9f79424 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/NO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/NP.png b/src/wp-content/themes/double-r-group/images/flags/16/NP.png new file mode 100644 index 0000000..23c3c6d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/NP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/NR.png b/src/wp-content/themes/double-r-group/images/flags/16/NR.png new file mode 100644 index 0000000..ee4d01e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/NR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/NU.png b/src/wp-content/themes/double-r-group/images/flags/16/NU.png new file mode 100644 index 0000000..354a67c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/NU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/NZ.png b/src/wp-content/themes/double-r-group/images/flags/16/NZ.png new file mode 100644 index 0000000..c44ca79 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/NZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/OM.png b/src/wp-content/themes/double-r-group/images/flags/16/OM.png new file mode 100644 index 0000000..0e12bf9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/OM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PA.png b/src/wp-content/themes/double-r-group/images/flags/16/PA.png new file mode 100644 index 0000000..87f2a4b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PE.png b/src/wp-content/themes/double-r-group/images/flags/16/PE.png new file mode 100644 index 0000000..792a9ce Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PF.png b/src/wp-content/themes/double-r-group/images/flags/16/PF.png new file mode 100644 index 0000000..5f9a5a5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PG.png b/src/wp-content/themes/double-r-group/images/flags/16/PG.png new file mode 100644 index 0000000..a7d1d23 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PH.png b/src/wp-content/themes/double-r-group/images/flags/16/PH.png new file mode 100644 index 0000000..fd9d8fb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PK.png b/src/wp-content/themes/double-r-group/images/flags/16/PK.png new file mode 100644 index 0000000..2f2550c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PL.png b/src/wp-content/themes/double-r-group/images/flags/16/PL.png new file mode 100644 index 0000000..e30222e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PN.png b/src/wp-content/themes/double-r-group/images/flags/16/PN.png new file mode 100644 index 0000000..18b8e38 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PR.png b/src/wp-content/themes/double-r-group/images/flags/16/PR.png new file mode 100644 index 0000000..bac124c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PS.png b/src/wp-content/themes/double-r-group/images/flags/16/PS.png new file mode 100644 index 0000000..7145cbe Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PT.png b/src/wp-content/themes/double-r-group/images/flags/16/PT.png new file mode 100644 index 0000000..eab3f39 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PW.png b/src/wp-content/themes/double-r-group/images/flags/16/PW.png new file mode 100644 index 0000000..a5b01c3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/PY.png b/src/wp-content/themes/double-r-group/images/flags/16/PY.png new file mode 100644 index 0000000..ab391d7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/PY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/QA.png b/src/wp-content/themes/double-r-group/images/flags/16/QA.png new file mode 100644 index 0000000..c3f3d57 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/QA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/RO.png b/src/wp-content/themes/double-r-group/images/flags/16/RO.png new file mode 100644 index 0000000..79a7d55 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/RO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/RS.png b/src/wp-content/themes/double-r-group/images/flags/16/RS.png new file mode 100644 index 0000000..5a6f9a3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/RS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/RU.png b/src/wp-content/themes/double-r-group/images/flags/16/RU.png new file mode 100644 index 0000000..0d74832 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/RU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/RW.png b/src/wp-content/themes/double-r-group/images/flags/16/RW.png new file mode 100644 index 0000000..64d72c9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/RW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SA.png b/src/wp-content/themes/double-r-group/images/flags/16/SA.png new file mode 100644 index 0000000..b9f78ad Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SB.png b/src/wp-content/themes/double-r-group/images/flags/16/SB.png new file mode 100644 index 0000000..bfd2624 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SC.png b/src/wp-content/themes/double-r-group/images/flags/16/SC.png new file mode 100644 index 0000000..0ff3930 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SD.png b/src/wp-content/themes/double-r-group/images/flags/16/SD.png new file mode 100644 index 0000000..25e8425 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SE.png b/src/wp-content/themes/double-r-group/images/flags/16/SE.png new file mode 100644 index 0000000..f9ad787 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SG.png b/src/wp-content/themes/double-r-group/images/flags/16/SG.png new file mode 100644 index 0000000..b274a5d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SH.png b/src/wp-content/themes/double-r-group/images/flags/16/SH.png new file mode 100644 index 0000000..8640c10 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SI.png b/src/wp-content/themes/double-r-group/images/flags/16/SI.png new file mode 100644 index 0000000..5b257f2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SK.png b/src/wp-content/themes/double-r-group/images/flags/16/SK.png new file mode 100644 index 0000000..1409b5f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SL.png b/src/wp-content/themes/double-r-group/images/flags/16/SL.png new file mode 100644 index 0000000..23695b3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SM.png b/src/wp-content/themes/double-r-group/images/flags/16/SM.png new file mode 100644 index 0000000..64e5428 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SN.png b/src/wp-content/themes/double-r-group/images/flags/16/SN.png new file mode 100644 index 0000000..08ba0f5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SO.png b/src/wp-content/themes/double-r-group/images/flags/16/SO.png new file mode 100644 index 0000000..021f6ca Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SR.png b/src/wp-content/themes/double-r-group/images/flags/16/SR.png new file mode 100644 index 0000000..2b114de Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SS.png b/src/wp-content/themes/double-r-group/images/flags/16/SS.png new file mode 100644 index 0000000..8c6616c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/ST.png b/src/wp-content/themes/double-r-group/images/flags/16/ST.png new file mode 100644 index 0000000..8eab5c5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/ST.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SV.png b/src/wp-content/themes/double-r-group/images/flags/16/SV.png new file mode 100644 index 0000000..82fc634 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SY.png b/src/wp-content/themes/double-r-group/images/flags/16/SY.png new file mode 100644 index 0000000..82ab48c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/SZ.png b/src/wp-content/themes/double-r-group/images/flags/16/SZ.png new file mode 100644 index 0000000..555a279 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/SZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TC.png b/src/wp-content/themes/double-r-group/images/flags/16/TC.png new file mode 100644 index 0000000..5edc6e9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TD.png b/src/wp-content/themes/double-r-group/images/flags/16/TD.png new file mode 100644 index 0000000..d382728 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TF.png b/src/wp-content/themes/double-r-group/images/flags/16/TF.png new file mode 100644 index 0000000..0cb1a01 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TG.png b/src/wp-content/themes/double-r-group/images/flags/16/TG.png new file mode 100644 index 0000000..52e3a51 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TH.png b/src/wp-content/themes/double-r-group/images/flags/16/TH.png new file mode 100644 index 0000000..485709a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TJ.png b/src/wp-content/themes/double-r-group/images/flags/16/TJ.png new file mode 100644 index 0000000..2731fd5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TK.png b/src/wp-content/themes/double-r-group/images/flags/16/TK.png new file mode 100644 index 0000000..78c1a29 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TL.png b/src/wp-content/themes/double-r-group/images/flags/16/TL.png new file mode 100644 index 0000000..7e17f16 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TM.png b/src/wp-content/themes/double-r-group/images/flags/16/TM.png new file mode 100644 index 0000000..4a31703 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TN.png b/src/wp-content/themes/double-r-group/images/flags/16/TN.png new file mode 100644 index 0000000..fd2b160 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TO.png b/src/wp-content/themes/double-r-group/images/flags/16/TO.png new file mode 100644 index 0000000..ea666d2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TR.png b/src/wp-content/themes/double-r-group/images/flags/16/TR.png new file mode 100644 index 0000000..d5a384a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TT.png b/src/wp-content/themes/double-r-group/images/flags/16/TT.png new file mode 100644 index 0000000..e929812 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TV.png b/src/wp-content/themes/double-r-group/images/flags/16/TV.png new file mode 100644 index 0000000..40a5323 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TW.png b/src/wp-content/themes/double-r-group/images/flags/16/TW.png new file mode 100644 index 0000000..cb691b3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/TZ.png b/src/wp-content/themes/double-r-group/images/flags/16/TZ.png new file mode 100644 index 0000000..5b7395e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/TZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/UA.png b/src/wp-content/themes/double-r-group/images/flags/16/UA.png new file mode 100644 index 0000000..70db400 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/UA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/UG.png b/src/wp-content/themes/double-r-group/images/flags/16/UG.png new file mode 100644 index 0000000..d07682e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/UG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/US.png b/src/wp-content/themes/double-r-group/images/flags/16/US.png new file mode 100644 index 0000000..5706b57 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/US.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/UY.png b/src/wp-content/themes/double-r-group/images/flags/16/UY.png new file mode 100644 index 0000000..419d11f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/UY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/UZ.png b/src/wp-content/themes/double-r-group/images/flags/16/UZ.png new file mode 100644 index 0000000..b88e27e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/UZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/VA.png b/src/wp-content/themes/double-r-group/images/flags/16/VA.png new file mode 100644 index 0000000..da76146 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/VA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/VC.png b/src/wp-content/themes/double-r-group/images/flags/16/VC.png new file mode 100644 index 0000000..28b71cf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/VC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/VE.png b/src/wp-content/themes/double-r-group/images/flags/16/VE.png new file mode 100644 index 0000000..9e51f9a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/VE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/VG.png b/src/wp-content/themes/double-r-group/images/flags/16/VG.png new file mode 100644 index 0000000..d337635 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/VG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/VI.png b/src/wp-content/themes/double-r-group/images/flags/16/VI.png new file mode 100644 index 0000000..5fa3126 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/VI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/VN.png b/src/wp-content/themes/double-r-group/images/flags/16/VN.png new file mode 100644 index 0000000..06b9498 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/VN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/VU.png b/src/wp-content/themes/double-r-group/images/flags/16/VU.png new file mode 100644 index 0000000..e898000 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/VU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/WF.png b/src/wp-content/themes/double-r-group/images/flags/16/WF.png new file mode 100644 index 0000000..79bf057 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/WF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/WS.png b/src/wp-content/themes/double-r-group/images/flags/16/WS.png new file mode 100644 index 0000000..45fe25f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/WS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/YE.png b/src/wp-content/themes/double-r-group/images/flags/16/YE.png new file mode 100644 index 0000000..19a9e90 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/YE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/YT.png b/src/wp-content/themes/double-r-group/images/flags/16/YT.png new file mode 100644 index 0000000..877ddf8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/YT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/ZA.png b/src/wp-content/themes/double-r-group/images/flags/16/ZA.png new file mode 100644 index 0000000..2c2eff8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/ZA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/ZM.png b/src/wp-content/themes/double-r-group/images/flags/16/ZM.png new file mode 100644 index 0000000..cd3d06a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/ZM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/ZW.png b/src/wp-content/themes/double-r-group/images/flags/16/ZW.png new file mode 100644 index 0000000..a40454d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/ZW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_abkhazia.png b/src/wp-content/themes/double-r-group/images/flags/16/_abkhazia.png new file mode 100644 index 0000000..ad5d130 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_abkhazia.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_basque-country.png b/src/wp-content/themes/double-r-group/images/flags/16/_basque-country.png new file mode 100644 index 0000000..8cb0d2c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_basque-country.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_british-antarctic-territory.png b/src/wp-content/themes/double-r-group/images/flags/16/_british-antarctic-territory.png new file mode 100644 index 0000000..74a1847 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_british-antarctic-territory.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_commonwealth.png b/src/wp-content/themes/double-r-group/images/flags/16/_commonwealth.png new file mode 100644 index 0000000..8f0aaa0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_commonwealth.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_england.png b/src/wp-content/themes/double-r-group/images/flags/16/_england.png new file mode 100644 index 0000000..87d6ded Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_england.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_gosquared.png b/src/wp-content/themes/double-r-group/images/flags/16/_gosquared.png new file mode 100644 index 0000000..6c5fb56 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_gosquared.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_kosovo.png b/src/wp-content/themes/double-r-group/images/flags/16/_kosovo.png new file mode 100644 index 0000000..cf0ad17 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_kosovo.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_mars.png b/src/wp-content/themes/double-r-group/images/flags/16/_mars.png new file mode 100644 index 0000000..ba98c22 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_mars.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_nagorno-karabakh.png b/src/wp-content/themes/double-r-group/images/flags/16/_nagorno-karabakh.png new file mode 100644 index 0000000..0edf82f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_nagorno-karabakh.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_nato.png b/src/wp-content/themes/double-r-group/images/flags/16/_nato.png new file mode 100644 index 0000000..f52845a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_nato.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_northern-cyprus.png b/src/wp-content/themes/double-r-group/images/flags/16/_northern-cyprus.png new file mode 100644 index 0000000..600c7f2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_northern-cyprus.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_olympics.png b/src/wp-content/themes/double-r-group/images/flags/16/_olympics.png new file mode 100644 index 0000000..2109917 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_olympics.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_red-cross.png b/src/wp-content/themes/double-r-group/images/flags/16/_red-cross.png new file mode 100644 index 0000000..c672f88 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_red-cross.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_scotland.png b/src/wp-content/themes/double-r-group/images/flags/16/_scotland.png new file mode 100644 index 0000000..53864fd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_scotland.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_somaliland.png b/src/wp-content/themes/double-r-group/images/flags/16/_somaliland.png new file mode 100644 index 0000000..46ce0d5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_somaliland.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_south-ossetia.png b/src/wp-content/themes/double-r-group/images/flags/16/_south-ossetia.png new file mode 100644 index 0000000..c076713 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_south-ossetia.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_united-nations.png b/src/wp-content/themes/double-r-group/images/flags/16/_united-nations.png new file mode 100644 index 0000000..42b3e1e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_united-nations.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_unknown.png b/src/wp-content/themes/double-r-group/images/flags/16/_unknown.png new file mode 100644 index 0000000..4d643de Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_unknown.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/16/_wales.png b/src/wp-content/themes/double-r-group/images/flags/16/_wales.png new file mode 100644 index 0000000..aad4ede Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/16/_wales.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AD.png b/src/wp-content/themes/double-r-group/images/flags/24/AD.png new file mode 100644 index 0000000..52b3f8d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AE.png b/src/wp-content/themes/double-r-group/images/flags/24/AE.png new file mode 100644 index 0000000..a4383d2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AF.png b/src/wp-content/themes/double-r-group/images/flags/24/AF.png new file mode 100644 index 0000000..11074cc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AG.png b/src/wp-content/themes/double-r-group/images/flags/24/AG.png new file mode 100644 index 0000000..ca68482 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AI.png b/src/wp-content/themes/double-r-group/images/flags/24/AI.png new file mode 100644 index 0000000..c2d32a3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AL.png b/src/wp-content/themes/double-r-group/images/flags/24/AL.png new file mode 100644 index 0000000..9b6ce18 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AM.png b/src/wp-content/themes/double-r-group/images/flags/24/AM.png new file mode 100644 index 0000000..30975d0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AN.png b/src/wp-content/themes/double-r-group/images/flags/24/AN.png new file mode 100644 index 0000000..b09f152 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AO.png b/src/wp-content/themes/double-r-group/images/flags/24/AO.png new file mode 100644 index 0000000..f73e6e3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AQ.png b/src/wp-content/themes/double-r-group/images/flags/24/AQ.png new file mode 100644 index 0000000..cfd62d0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AR.png b/src/wp-content/themes/double-r-group/images/flags/24/AR.png new file mode 100644 index 0000000..3f11d75 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AS.png b/src/wp-content/themes/double-r-group/images/flags/24/AS.png new file mode 100644 index 0000000..bc04b1d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AT.png b/src/wp-content/themes/double-r-group/images/flags/24/AT.png new file mode 100644 index 0000000..563e011 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AU.png b/src/wp-content/themes/double-r-group/images/flags/24/AU.png new file mode 100644 index 0000000..1f60807 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AW.png b/src/wp-content/themes/double-r-group/images/flags/24/AW.png new file mode 100644 index 0000000..6416975 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AX.png b/src/wp-content/themes/double-r-group/images/flags/24/AX.png new file mode 100644 index 0000000..32d8161 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/AZ.png b/src/wp-content/themes/double-r-group/images/flags/24/AZ.png new file mode 100644 index 0000000..f2c8a78 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/AZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BA.png b/src/wp-content/themes/double-r-group/images/flags/24/BA.png new file mode 100644 index 0000000..a4b3d21 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BB.png b/src/wp-content/themes/double-r-group/images/flags/24/BB.png new file mode 100644 index 0000000..863a347 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BD.png b/src/wp-content/themes/double-r-group/images/flags/24/BD.png new file mode 100644 index 0000000..88e78d7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BE.png b/src/wp-content/themes/double-r-group/images/flags/24/BE.png new file mode 100644 index 0000000..c3ea8ce Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BF.png b/src/wp-content/themes/double-r-group/images/flags/24/BF.png new file mode 100644 index 0000000..cb5daf2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BG.png b/src/wp-content/themes/double-r-group/images/flags/24/BG.png new file mode 100644 index 0000000..ffb444a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BH.png b/src/wp-content/themes/double-r-group/images/flags/24/BH.png new file mode 100644 index 0000000..3ac5bae Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BI.png b/src/wp-content/themes/double-r-group/images/flags/24/BI.png new file mode 100644 index 0000000..ebe14f3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BJ.png b/src/wp-content/themes/double-r-group/images/flags/24/BJ.png new file mode 100644 index 0000000..d78c94c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BL.png b/src/wp-content/themes/double-r-group/images/flags/24/BL.png new file mode 100644 index 0000000..ade01d4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BM.png b/src/wp-content/themes/double-r-group/images/flags/24/BM.png new file mode 100644 index 0000000..ed7fb2f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BN.png b/src/wp-content/themes/double-r-group/images/flags/24/BN.png new file mode 100644 index 0000000..d6d0d6c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BO.png b/src/wp-content/themes/double-r-group/images/flags/24/BO.png new file mode 100644 index 0000000..ac32cdf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BR.png b/src/wp-content/themes/double-r-group/images/flags/24/BR.png new file mode 100644 index 0000000..e660338 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BS.png b/src/wp-content/themes/double-r-group/images/flags/24/BS.png new file mode 100644 index 0000000..24db9da Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BT.png b/src/wp-content/themes/double-r-group/images/flags/24/BT.png new file mode 100644 index 0000000..13989ed Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BW.png b/src/wp-content/themes/double-r-group/images/flags/24/BW.png new file mode 100644 index 0000000..77c3761 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BY.png b/src/wp-content/themes/double-r-group/images/flags/24/BY.png new file mode 100644 index 0000000..784f69c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/BZ.png b/src/wp-content/themes/double-r-group/images/flags/24/BZ.png new file mode 100644 index 0000000..ca66a15 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/BZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CA.png b/src/wp-content/themes/double-r-group/images/flags/24/CA.png new file mode 100644 index 0000000..fd089c2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CC.png b/src/wp-content/themes/double-r-group/images/flags/24/CC.png new file mode 100644 index 0000000..35cfe7f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CD.png b/src/wp-content/themes/double-r-group/images/flags/24/CD.png new file mode 100644 index 0000000..bec710d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CF.png b/src/wp-content/themes/double-r-group/images/flags/24/CF.png new file mode 100644 index 0000000..ae33452 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CG.png b/src/wp-content/themes/double-r-group/images/flags/24/CG.png new file mode 100644 index 0000000..c0b72bc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CH.png b/src/wp-content/themes/double-r-group/images/flags/24/CH.png new file mode 100644 index 0000000..2f22b90 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CI.png b/src/wp-content/themes/double-r-group/images/flags/24/CI.png new file mode 100644 index 0000000..8326e1d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CK.png b/src/wp-content/themes/double-r-group/images/flags/24/CK.png new file mode 100644 index 0000000..fbdb7dd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CL.png b/src/wp-content/themes/double-r-group/images/flags/24/CL.png new file mode 100644 index 0000000..6768c75 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CM.png b/src/wp-content/themes/double-r-group/images/flags/24/CM.png new file mode 100644 index 0000000..c03409b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CN.png b/src/wp-content/themes/double-r-group/images/flags/24/CN.png new file mode 100644 index 0000000..08fca13 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CO.png b/src/wp-content/themes/double-r-group/images/flags/24/CO.png new file mode 100644 index 0000000..af86cd0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CR.png b/src/wp-content/themes/double-r-group/images/flags/24/CR.png new file mode 100644 index 0000000..9de7a24 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CU.png b/src/wp-content/themes/double-r-group/images/flags/24/CU.png new file mode 100644 index 0000000..4ba1a41 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CV.png b/src/wp-content/themes/double-r-group/images/flags/24/CV.png new file mode 100644 index 0000000..b8bf179 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CW.png b/src/wp-content/themes/double-r-group/images/flags/24/CW.png new file mode 100644 index 0000000..58b08de Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CX.png b/src/wp-content/themes/double-r-group/images/flags/24/CX.png new file mode 100644 index 0000000..0916464 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CY.png b/src/wp-content/themes/double-r-group/images/flags/24/CY.png new file mode 100644 index 0000000..885bfd6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/CZ.png b/src/wp-content/themes/double-r-group/images/flags/24/CZ.png new file mode 100644 index 0000000..73ac442 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/CZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/DE.png b/src/wp-content/themes/double-r-group/images/flags/24/DE.png new file mode 100644 index 0000000..0c229c3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/DE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/DJ.png b/src/wp-content/themes/double-r-group/images/flags/24/DJ.png new file mode 100644 index 0000000..68a297b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/DJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/DK.png b/src/wp-content/themes/double-r-group/images/flags/24/DK.png new file mode 100644 index 0000000..6edf00b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/DK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/DM.png b/src/wp-content/themes/double-r-group/images/flags/24/DM.png new file mode 100644 index 0000000..7cd1131 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/DM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/DO.png b/src/wp-content/themes/double-r-group/images/flags/24/DO.png new file mode 100644 index 0000000..d2ae5b6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/DO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/DZ.png b/src/wp-content/themes/double-r-group/images/flags/24/DZ.png new file mode 100644 index 0000000..9cde087 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/DZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/EC.png b/src/wp-content/themes/double-r-group/images/flags/24/EC.png new file mode 100644 index 0000000..ba11aaa Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/EC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/EE.png b/src/wp-content/themes/double-r-group/images/flags/24/EE.png new file mode 100644 index 0000000..20150fc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/EE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/EG.png b/src/wp-content/themes/double-r-group/images/flags/24/EG.png new file mode 100644 index 0000000..9b157a4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/EG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/EH.png b/src/wp-content/themes/double-r-group/images/flags/24/EH.png new file mode 100644 index 0000000..caec718 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/EH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/EN.png b/src/wp-content/themes/double-r-group/images/flags/24/EN.png new file mode 100644 index 0000000..02fa2a1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/EN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/ER.png b/src/wp-content/themes/double-r-group/images/flags/24/ER.png new file mode 100644 index 0000000..c36d218 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/ER.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/ES.png b/src/wp-content/themes/double-r-group/images/flags/24/ES.png new file mode 100644 index 0000000..39d0c76 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/ES.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/ET.png b/src/wp-content/themes/double-r-group/images/flags/24/ET.png new file mode 100644 index 0000000..87da26f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/ET.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/EU.png b/src/wp-content/themes/double-r-group/images/flags/24/EU.png new file mode 100644 index 0000000..ccdf7d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/EU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/FI.png b/src/wp-content/themes/double-r-group/images/flags/24/FI.png new file mode 100644 index 0000000..c9f17f6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/FI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/FJ.png b/src/wp-content/themes/double-r-group/images/flags/24/FJ.png new file mode 100644 index 0000000..13a8bfd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/FJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/FK.png b/src/wp-content/themes/double-r-group/images/flags/24/FK.png new file mode 100644 index 0000000..f9ebef2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/FK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/FM.png b/src/wp-content/themes/double-r-group/images/flags/24/FM.png new file mode 100644 index 0000000..e4596ce Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/FM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/FO.png b/src/wp-content/themes/double-r-group/images/flags/24/FO.png new file mode 100644 index 0000000..8cb6c90 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/FO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/FR.png b/src/wp-content/themes/double-r-group/images/flags/24/FR.png new file mode 100644 index 0000000..f27f411 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/FR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GA.png b/src/wp-content/themes/double-r-group/images/flags/24/GA.png new file mode 100644 index 0000000..317dd67 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GB.png b/src/wp-content/themes/double-r-group/images/flags/24/GB.png new file mode 100644 index 0000000..02fa2a1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GD.png b/src/wp-content/themes/double-r-group/images/flags/24/GD.png new file mode 100644 index 0000000..1670317 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GE.png b/src/wp-content/themes/double-r-group/images/flags/24/GE.png new file mode 100644 index 0000000..eda18d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GG.png b/src/wp-content/themes/double-r-group/images/flags/24/GG.png new file mode 100644 index 0000000..273e5e7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GH.png b/src/wp-content/themes/double-r-group/images/flags/24/GH.png new file mode 100644 index 0000000..4fcc198 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GI.png b/src/wp-content/themes/double-r-group/images/flags/24/GI.png new file mode 100644 index 0000000..8b76b45 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GL.png b/src/wp-content/themes/double-r-group/images/flags/24/GL.png new file mode 100644 index 0000000..a3835b7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GM.png b/src/wp-content/themes/double-r-group/images/flags/24/GM.png new file mode 100644 index 0000000..814d391 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GN.png b/src/wp-content/themes/double-r-group/images/flags/24/GN.png new file mode 100644 index 0000000..1c3b5b2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GQ.png b/src/wp-content/themes/double-r-group/images/flags/24/GQ.png new file mode 100644 index 0000000..ce53907 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GR.png b/src/wp-content/themes/double-r-group/images/flags/24/GR.png new file mode 100644 index 0000000..5f6320f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GS.png b/src/wp-content/themes/double-r-group/images/flags/24/GS.png new file mode 100644 index 0000000..00d20b6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GT.png b/src/wp-content/themes/double-r-group/images/flags/24/GT.png new file mode 100644 index 0000000..a587b51 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GU.png b/src/wp-content/themes/double-r-group/images/flags/24/GU.png new file mode 100644 index 0000000..5004db6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GW.png b/src/wp-content/themes/double-r-group/images/flags/24/GW.png new file mode 100644 index 0000000..808a1ef Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/GY.png b/src/wp-content/themes/double-r-group/images/flags/24/GY.png new file mode 100644 index 0000000..b94d736 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/GY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/HK.png b/src/wp-content/themes/double-r-group/images/flags/24/HK.png new file mode 100644 index 0000000..c17e4ce Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/HK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/HN.png b/src/wp-content/themes/double-r-group/images/flags/24/HN.png new file mode 100644 index 0000000..9635f7e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/HN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/HR.png b/src/wp-content/themes/double-r-group/images/flags/24/HR.png new file mode 100644 index 0000000..e4fc75a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/HR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/HT.png b/src/wp-content/themes/double-r-group/images/flags/24/HT.png new file mode 100644 index 0000000..9f52fc4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/HT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/HU.png b/src/wp-content/themes/double-r-group/images/flags/24/HU.png new file mode 100644 index 0000000..6d4478f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/HU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/IC.png b/src/wp-content/themes/double-r-group/images/flags/24/IC.png new file mode 100644 index 0000000..5f2343f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/IC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/ID.png b/src/wp-content/themes/double-r-group/images/flags/24/ID.png new file mode 100644 index 0000000..63ad1fc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/ID.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/IE.png b/src/wp-content/themes/double-r-group/images/flags/24/IE.png new file mode 100644 index 0000000..44062f6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/IE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/IL.png b/src/wp-content/themes/double-r-group/images/flags/24/IL.png new file mode 100644 index 0000000..8a8d4a8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/IL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/IM.png b/src/wp-content/themes/double-r-group/images/flags/24/IM.png new file mode 100644 index 0000000..3f30b7a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/IM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/IN.png b/src/wp-content/themes/double-r-group/images/flags/24/IN.png new file mode 100644 index 0000000..3e43337 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/IN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/IQ.png b/src/wp-content/themes/double-r-group/images/flags/24/IQ.png new file mode 100644 index 0000000..6418593 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/IQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/IR.png b/src/wp-content/themes/double-r-group/images/flags/24/IR.png new file mode 100644 index 0000000..1506e99 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/IR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/IS.png b/src/wp-content/themes/double-r-group/images/flags/24/IS.png new file mode 100644 index 0000000..33d2499 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/IS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/IT.png b/src/wp-content/themes/double-r-group/images/flags/24/IT.png new file mode 100644 index 0000000..53ec702 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/IT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/JE.png b/src/wp-content/themes/double-r-group/images/flags/24/JE.png new file mode 100644 index 0000000..2e3a1a7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/JE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/JM.png b/src/wp-content/themes/double-r-group/images/flags/24/JM.png new file mode 100644 index 0000000..b55ccfc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/JM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/JO.png b/src/wp-content/themes/double-r-group/images/flags/24/JO.png new file mode 100644 index 0000000..7a3be3f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/JO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/JP.png b/src/wp-content/themes/double-r-group/images/flags/24/JP.png new file mode 100644 index 0000000..0516af4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/JP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/KE.png b/src/wp-content/themes/double-r-group/images/flags/24/KE.png new file mode 100644 index 0000000..7296684 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/KE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/KG.png b/src/wp-content/themes/double-r-group/images/flags/24/KG.png new file mode 100644 index 0000000..1b38e31 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/KG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/KH.png b/src/wp-content/themes/double-r-group/images/flags/24/KH.png new file mode 100644 index 0000000..4881570 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/KH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/KI.png b/src/wp-content/themes/double-r-group/images/flags/24/KI.png new file mode 100644 index 0000000..0bf057e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/KI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/KM.png b/src/wp-content/themes/double-r-group/images/flags/24/KM.png new file mode 100644 index 0000000..eef9dcb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/KM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/KN.png b/src/wp-content/themes/double-r-group/images/flags/24/KN.png new file mode 100644 index 0000000..55a0a88 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/KN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/KP.png b/src/wp-content/themes/double-r-group/images/flags/24/KP.png new file mode 100644 index 0000000..8323a97 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/KP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/KR.png b/src/wp-content/themes/double-r-group/images/flags/24/KR.png new file mode 100644 index 0000000..f6f6baa Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/KR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/KW.png b/src/wp-content/themes/double-r-group/images/flags/24/KW.png new file mode 100644 index 0000000..3e899f6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/KW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/KY.png b/src/wp-content/themes/double-r-group/images/flags/24/KY.png new file mode 100644 index 0000000..49e4c7c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/KY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/KZ.png b/src/wp-content/themes/double-r-group/images/flags/24/KZ.png new file mode 100644 index 0000000..04e0e42 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/KZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/LA.png b/src/wp-content/themes/double-r-group/images/flags/24/LA.png new file mode 100644 index 0000000..e3d22fd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/LA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/LB.png b/src/wp-content/themes/double-r-group/images/flags/24/LB.png new file mode 100644 index 0000000..04d889c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/LB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/LC.png b/src/wp-content/themes/double-r-group/images/flags/24/LC.png new file mode 100644 index 0000000..fbba84e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/LC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/LI.png b/src/wp-content/themes/double-r-group/images/flags/24/LI.png new file mode 100644 index 0000000..78ddc1f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/LI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/LK.png b/src/wp-content/themes/double-r-group/images/flags/24/LK.png new file mode 100644 index 0000000..d393119 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/LK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/LR.png b/src/wp-content/themes/double-r-group/images/flags/24/LR.png new file mode 100644 index 0000000..17954ee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/LR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/LS.png b/src/wp-content/themes/double-r-group/images/flags/24/LS.png new file mode 100644 index 0000000..9eca793 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/LS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/LT.png b/src/wp-content/themes/double-r-group/images/flags/24/LT.png new file mode 100644 index 0000000..3d2b525 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/LT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/LU.png b/src/wp-content/themes/double-r-group/images/flags/24/LU.png new file mode 100644 index 0000000..36171c8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/LU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/LV.png b/src/wp-content/themes/double-r-group/images/flags/24/LV.png new file mode 100644 index 0000000..89f459f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/LV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/LY.png b/src/wp-content/themes/double-r-group/images/flags/24/LY.png new file mode 100644 index 0000000..58ad284 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/LY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MA.png b/src/wp-content/themes/double-r-group/images/flags/24/MA.png new file mode 100644 index 0000000..055948e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MC.png b/src/wp-content/themes/double-r-group/images/flags/24/MC.png new file mode 100644 index 0000000..63ad1fc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MD.png b/src/wp-content/themes/double-r-group/images/flags/24/MD.png new file mode 100644 index 0000000..6713c38 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/ME.png b/src/wp-content/themes/double-r-group/images/flags/24/ME.png new file mode 100644 index 0000000..663cd07 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/ME.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MF.png b/src/wp-content/themes/double-r-group/images/flags/24/MF.png new file mode 100644 index 0000000..af19531 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MG.png b/src/wp-content/themes/double-r-group/images/flags/24/MG.png new file mode 100644 index 0000000..78baaa8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MH.png b/src/wp-content/themes/double-r-group/images/flags/24/MH.png new file mode 100644 index 0000000..3ead7c0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MK.png b/src/wp-content/themes/double-r-group/images/flags/24/MK.png new file mode 100644 index 0000000..3bdb9a8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/ML.png b/src/wp-content/themes/double-r-group/images/flags/24/ML.png new file mode 100644 index 0000000..a027a3c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/ML.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MM.png b/src/wp-content/themes/double-r-group/images/flags/24/MM.png new file mode 100644 index 0000000..798d802 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MN.png b/src/wp-content/themes/double-r-group/images/flags/24/MN.png new file mode 100644 index 0000000..2f71455 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MO.png b/src/wp-content/themes/double-r-group/images/flags/24/MO.png new file mode 100644 index 0000000..3d9e0e0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MP.png b/src/wp-content/themes/double-r-group/images/flags/24/MP.png new file mode 100644 index 0000000..5b59f91 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MQ.png b/src/wp-content/themes/double-r-group/images/flags/24/MQ.png new file mode 100644 index 0000000..45766c2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MR.png b/src/wp-content/themes/double-r-group/images/flags/24/MR.png new file mode 100644 index 0000000..e5f0792 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MS.png b/src/wp-content/themes/double-r-group/images/flags/24/MS.png new file mode 100644 index 0000000..7f9ee94 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MT.png b/src/wp-content/themes/double-r-group/images/flags/24/MT.png new file mode 100644 index 0000000..a44e22f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MU.png b/src/wp-content/themes/double-r-group/images/flags/24/MU.png new file mode 100644 index 0000000..1c27411 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MV.png b/src/wp-content/themes/double-r-group/images/flags/24/MV.png new file mode 100644 index 0000000..4e92401 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MW.png b/src/wp-content/themes/double-r-group/images/flags/24/MW.png new file mode 100644 index 0000000..149a1d1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MX.png b/src/wp-content/themes/double-r-group/images/flags/24/MX.png new file mode 100644 index 0000000..86f1272 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MY.png b/src/wp-content/themes/double-r-group/images/flags/24/MY.png new file mode 100644 index 0000000..7ba7b03 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/MZ.png b/src/wp-content/themes/double-r-group/images/flags/24/MZ.png new file mode 100644 index 0000000..f20e525 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/MZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/NA.png b/src/wp-content/themes/double-r-group/images/flags/24/NA.png new file mode 100644 index 0000000..100b38e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/NA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/NC.png b/src/wp-content/themes/double-r-group/images/flags/24/NC.png new file mode 100644 index 0000000..2c8bb2a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/NC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/NE.png b/src/wp-content/themes/double-r-group/images/flags/24/NE.png new file mode 100644 index 0000000..8f501cd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/NE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/NF.png b/src/wp-content/themes/double-r-group/images/flags/24/NF.png new file mode 100644 index 0000000..be1ed10 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/NF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/NG.png b/src/wp-content/themes/double-r-group/images/flags/24/NG.png new file mode 100644 index 0000000..4a00307 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/NG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/NI.png b/src/wp-content/themes/double-r-group/images/flags/24/NI.png new file mode 100644 index 0000000..709fcc6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/NI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/NL.png b/src/wp-content/themes/double-r-group/images/flags/24/NL.png new file mode 100644 index 0000000..505b9ce Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/NL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/NO.png b/src/wp-content/themes/double-r-group/images/flags/24/NO.png new file mode 100644 index 0000000..20d6534 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/NO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/NP.png b/src/wp-content/themes/double-r-group/images/flags/24/NP.png new file mode 100644 index 0000000..75c012e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/NP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/NR.png b/src/wp-content/themes/double-r-group/images/flags/24/NR.png new file mode 100644 index 0000000..a970507 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/NR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/NU.png b/src/wp-content/themes/double-r-group/images/flags/24/NU.png new file mode 100644 index 0000000..cd3c5dc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/NU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/NZ.png b/src/wp-content/themes/double-r-group/images/flags/24/NZ.png new file mode 100644 index 0000000..0c5a8e0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/NZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/OM.png b/src/wp-content/themes/double-r-group/images/flags/24/OM.png new file mode 100644 index 0000000..384def2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/OM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PA.png b/src/wp-content/themes/double-r-group/images/flags/24/PA.png new file mode 100644 index 0000000..e20a743 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PE.png b/src/wp-content/themes/double-r-group/images/flags/24/PE.png new file mode 100644 index 0000000..616b655 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PF.png b/src/wp-content/themes/double-r-group/images/flags/24/PF.png new file mode 100644 index 0000000..2ad2502 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PG.png b/src/wp-content/themes/double-r-group/images/flags/24/PG.png new file mode 100644 index 0000000..13dc48a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PH.png b/src/wp-content/themes/double-r-group/images/flags/24/PH.png new file mode 100644 index 0000000..36b3612 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PK.png b/src/wp-content/themes/double-r-group/images/flags/24/PK.png new file mode 100644 index 0000000..317e02d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PL.png b/src/wp-content/themes/double-r-group/images/flags/24/PL.png new file mode 100644 index 0000000..92cd1ca Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PN.png b/src/wp-content/themes/double-r-group/images/flags/24/PN.png new file mode 100644 index 0000000..e26fad9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PR.png b/src/wp-content/themes/double-r-group/images/flags/24/PR.png new file mode 100644 index 0000000..b466682 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PS.png b/src/wp-content/themes/double-r-group/images/flags/24/PS.png new file mode 100644 index 0000000..d95bacb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PT.png b/src/wp-content/themes/double-r-group/images/flags/24/PT.png new file mode 100644 index 0000000..6e4d734 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PW.png b/src/wp-content/themes/double-r-group/images/flags/24/PW.png new file mode 100644 index 0000000..6852102 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/PY.png b/src/wp-content/themes/double-r-group/images/flags/24/PY.png new file mode 100644 index 0000000..e4445d5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/PY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/QA.png b/src/wp-content/themes/double-r-group/images/flags/24/QA.png new file mode 100644 index 0000000..e3fa51f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/QA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/RO.png b/src/wp-content/themes/double-r-group/images/flags/24/RO.png new file mode 100644 index 0000000..e7fa4f5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/RO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/RS.png b/src/wp-content/themes/double-r-group/images/flags/24/RS.png new file mode 100644 index 0000000..4c1e9f5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/RS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/RU.png b/src/wp-content/themes/double-r-group/images/flags/24/RU.png new file mode 100644 index 0000000..d9624ca Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/RU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/RW.png b/src/wp-content/themes/double-r-group/images/flags/24/RW.png new file mode 100644 index 0000000..6f5f588 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/RW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SA.png b/src/wp-content/themes/double-r-group/images/flags/24/SA.png new file mode 100644 index 0000000..d386dc0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SB.png b/src/wp-content/themes/double-r-group/images/flags/24/SB.png new file mode 100644 index 0000000..1c25553 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SC.png b/src/wp-content/themes/double-r-group/images/flags/24/SC.png new file mode 100644 index 0000000..dd27a21 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SD.png b/src/wp-content/themes/double-r-group/images/flags/24/SD.png new file mode 100644 index 0000000..4cbba36 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SE.png b/src/wp-content/themes/double-r-group/images/flags/24/SE.png new file mode 100644 index 0000000..fd0b55b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SG.png b/src/wp-content/themes/double-r-group/images/flags/24/SG.png new file mode 100644 index 0000000..a3dbbfc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SH.png b/src/wp-content/themes/double-r-group/images/flags/24/SH.png new file mode 100644 index 0000000..2250413 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SI.png b/src/wp-content/themes/double-r-group/images/flags/24/SI.png new file mode 100644 index 0000000..9938bee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SK.png b/src/wp-content/themes/double-r-group/images/flags/24/SK.png new file mode 100644 index 0000000..bf7a247 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SL.png b/src/wp-content/themes/double-r-group/images/flags/24/SL.png new file mode 100644 index 0000000..f5ccc93 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SM.png b/src/wp-content/themes/double-r-group/images/flags/24/SM.png new file mode 100644 index 0000000..fc5036c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SN.png b/src/wp-content/themes/double-r-group/images/flags/24/SN.png new file mode 100644 index 0000000..861df13 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SO.png b/src/wp-content/themes/double-r-group/images/flags/24/SO.png new file mode 100644 index 0000000..ea7eb21 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SR.png b/src/wp-content/themes/double-r-group/images/flags/24/SR.png new file mode 100644 index 0000000..4fa6114 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SS.png b/src/wp-content/themes/double-r-group/images/flags/24/SS.png new file mode 100644 index 0000000..7e64489 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/ST.png b/src/wp-content/themes/double-r-group/images/flags/24/ST.png new file mode 100644 index 0000000..3486853 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/ST.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SV.png b/src/wp-content/themes/double-r-group/images/flags/24/SV.png new file mode 100644 index 0000000..a369796 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SY.png b/src/wp-content/themes/double-r-group/images/flags/24/SY.png new file mode 100644 index 0000000..aee3c96 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/SZ.png b/src/wp-content/themes/double-r-group/images/flags/24/SZ.png new file mode 100644 index 0000000..b89f4d1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/SZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TC.png b/src/wp-content/themes/double-r-group/images/flags/24/TC.png new file mode 100644 index 0000000..f076b4a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TD.png b/src/wp-content/themes/double-r-group/images/flags/24/TD.png new file mode 100644 index 0000000..8b17d5c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TF.png b/src/wp-content/themes/double-r-group/images/flags/24/TF.png new file mode 100644 index 0000000..64a3748 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TG.png b/src/wp-content/themes/double-r-group/images/flags/24/TG.png new file mode 100644 index 0000000..00933c4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TH.png b/src/wp-content/themes/double-r-group/images/flags/24/TH.png new file mode 100644 index 0000000..0ea4ed8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TJ.png b/src/wp-content/themes/double-r-group/images/flags/24/TJ.png new file mode 100644 index 0000000..6922244 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TK.png b/src/wp-content/themes/double-r-group/images/flags/24/TK.png new file mode 100644 index 0000000..466a67b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TL.png b/src/wp-content/themes/double-r-group/images/flags/24/TL.png new file mode 100644 index 0000000..a8e5a43 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TM.png b/src/wp-content/themes/double-r-group/images/flags/24/TM.png new file mode 100644 index 0000000..e0813d0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TN.png b/src/wp-content/themes/double-r-group/images/flags/24/TN.png new file mode 100644 index 0000000..deacc5b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TO.png b/src/wp-content/themes/double-r-group/images/flags/24/TO.png new file mode 100644 index 0000000..f2e9026 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TR.png b/src/wp-content/themes/double-r-group/images/flags/24/TR.png new file mode 100644 index 0000000..786d736 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TT.png b/src/wp-content/themes/double-r-group/images/flags/24/TT.png new file mode 100644 index 0000000..99b1d60 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TV.png b/src/wp-content/themes/double-r-group/images/flags/24/TV.png new file mode 100644 index 0000000..3c36378 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TW.png b/src/wp-content/themes/double-r-group/images/flags/24/TW.png new file mode 100644 index 0000000..0bd4125 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/TZ.png b/src/wp-content/themes/double-r-group/images/flags/24/TZ.png new file mode 100644 index 0000000..c927c65 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/TZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/UA.png b/src/wp-content/themes/double-r-group/images/flags/24/UA.png new file mode 100644 index 0000000..e46611f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/UA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/UG.png b/src/wp-content/themes/double-r-group/images/flags/24/UG.png new file mode 100644 index 0000000..209aa45 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/UG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/US.png b/src/wp-content/themes/double-r-group/images/flags/24/US.png new file mode 100644 index 0000000..2b04dcf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/US.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/UY.png b/src/wp-content/themes/double-r-group/images/flags/24/UY.png new file mode 100644 index 0000000..0edaf69 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/UY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/UZ.png b/src/wp-content/themes/double-r-group/images/flags/24/UZ.png new file mode 100644 index 0000000..19f5c39 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/UZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/VA.png b/src/wp-content/themes/double-r-group/images/flags/24/VA.png new file mode 100644 index 0000000..ed1d70a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/VA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/VC.png b/src/wp-content/themes/double-r-group/images/flags/24/VC.png new file mode 100644 index 0000000..5191c65 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/VC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/VE.png b/src/wp-content/themes/double-r-group/images/flags/24/VE.png new file mode 100644 index 0000000..e28cbf7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/VE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/VG.png b/src/wp-content/themes/double-r-group/images/flags/24/VG.png new file mode 100644 index 0000000..00c72f8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/VG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/VI.png b/src/wp-content/themes/double-r-group/images/flags/24/VI.png new file mode 100644 index 0000000..bce202d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/VI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/VN.png b/src/wp-content/themes/double-r-group/images/flags/24/VN.png new file mode 100644 index 0000000..33385c1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/VN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/VU.png b/src/wp-content/themes/double-r-group/images/flags/24/VU.png new file mode 100644 index 0000000..08534b9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/VU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/WF.png b/src/wp-content/themes/double-r-group/images/flags/24/WF.png new file mode 100644 index 0000000..97678d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/WF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/WS.png b/src/wp-content/themes/double-r-group/images/flags/24/WS.png new file mode 100644 index 0000000..520b84f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/WS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/YE.png b/src/wp-content/themes/double-r-group/images/flags/24/YE.png new file mode 100644 index 0000000..651c4f0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/YE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/YT.png b/src/wp-content/themes/double-r-group/images/flags/24/YT.png new file mode 100644 index 0000000..dea0a0f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/YT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/ZA.png b/src/wp-content/themes/double-r-group/images/flags/24/ZA.png new file mode 100644 index 0000000..177fe75 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/ZA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/ZM.png b/src/wp-content/themes/double-r-group/images/flags/24/ZM.png new file mode 100644 index 0000000..26f9969 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/ZM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/ZW.png b/src/wp-content/themes/double-r-group/images/flags/24/ZW.png new file mode 100644 index 0000000..6cccf56 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/ZW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_abkhazia.png b/src/wp-content/themes/double-r-group/images/flags/24/_abkhazia.png new file mode 100644 index 0000000..267eb2f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_abkhazia.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_basque-country.png b/src/wp-content/themes/double-r-group/images/flags/24/_basque-country.png new file mode 100644 index 0000000..6b71a3f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_basque-country.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_british-antarctic-territory.png b/src/wp-content/themes/double-r-group/images/flags/24/_british-antarctic-territory.png new file mode 100644 index 0000000..fae8b5e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_british-antarctic-territory.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_commonwealth.png b/src/wp-content/themes/double-r-group/images/flags/24/_commonwealth.png new file mode 100644 index 0000000..52ded7e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_commonwealth.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_england.png b/src/wp-content/themes/double-r-group/images/flags/24/_england.png new file mode 100644 index 0000000..ce1d226 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_england.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_gosquared.png b/src/wp-content/themes/double-r-group/images/flags/24/_gosquared.png new file mode 100644 index 0000000..ae596b4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_gosquared.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_kosovo.png b/src/wp-content/themes/double-r-group/images/flags/24/_kosovo.png new file mode 100644 index 0000000..a919bba Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_kosovo.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_mars.png b/src/wp-content/themes/double-r-group/images/flags/24/_mars.png new file mode 100644 index 0000000..cf80d89 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_mars.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_nagorno-karabakh.png b/src/wp-content/themes/double-r-group/images/flags/24/_nagorno-karabakh.png new file mode 100644 index 0000000..a7f3845 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_nagorno-karabakh.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_nato.png b/src/wp-content/themes/double-r-group/images/flags/24/_nato.png new file mode 100644 index 0000000..faa5f76 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_nato.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_northern-cyprus.png b/src/wp-content/themes/double-r-group/images/flags/24/_northern-cyprus.png new file mode 100644 index 0000000..45a987f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_northern-cyprus.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_olympics.png b/src/wp-content/themes/double-r-group/images/flags/24/_olympics.png new file mode 100644 index 0000000..9f4b7e4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_olympics.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_red-cross.png b/src/wp-content/themes/double-r-group/images/flags/24/_red-cross.png new file mode 100644 index 0000000..201b1c6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_red-cross.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_scotland.png b/src/wp-content/themes/double-r-group/images/flags/24/_scotland.png new file mode 100644 index 0000000..c11234a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_scotland.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_somaliland.png b/src/wp-content/themes/double-r-group/images/flags/24/_somaliland.png new file mode 100644 index 0000000..00a975f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_somaliland.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_south-ossetia.png b/src/wp-content/themes/double-r-group/images/flags/24/_south-ossetia.png new file mode 100644 index 0000000..7b3324e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_south-ossetia.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_united-nations.png b/src/wp-content/themes/double-r-group/images/flags/24/_united-nations.png new file mode 100644 index 0000000..7d0dda1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_united-nations.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_unknown.png b/src/wp-content/themes/double-r-group/images/flags/24/_unknown.png new file mode 100644 index 0000000..2e66361 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_unknown.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/24/_wales.png b/src/wp-content/themes/double-r-group/images/flags/24/_wales.png new file mode 100644 index 0000000..30d99d6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/24/_wales.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AD.png b/src/wp-content/themes/double-r-group/images/flags/32/AD.png new file mode 100644 index 0000000..1052256 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AE.png b/src/wp-content/themes/double-r-group/images/flags/32/AE.png new file mode 100644 index 0000000..b3053ef Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AF.png b/src/wp-content/themes/double-r-group/images/flags/32/AF.png new file mode 100644 index 0000000..594d060 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AG.png b/src/wp-content/themes/double-r-group/images/flags/32/AG.png new file mode 100644 index 0000000..29dded8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AI.png b/src/wp-content/themes/double-r-group/images/flags/32/AI.png new file mode 100644 index 0000000..e1aae86 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AL.png b/src/wp-content/themes/double-r-group/images/flags/32/AL.png new file mode 100644 index 0000000..ff840aa Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AM.png b/src/wp-content/themes/double-r-group/images/flags/32/AM.png new file mode 100644 index 0000000..3a6e11b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AN.png b/src/wp-content/themes/double-r-group/images/flags/32/AN.png new file mode 100644 index 0000000..dd8b999 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AO.png b/src/wp-content/themes/double-r-group/images/flags/32/AO.png new file mode 100644 index 0000000..ef33703 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AQ.png b/src/wp-content/themes/double-r-group/images/flags/32/AQ.png new file mode 100644 index 0000000..39e5e2f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AR.png b/src/wp-content/themes/double-r-group/images/flags/32/AR.png new file mode 100644 index 0000000..eb3f0d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AS.png b/src/wp-content/themes/double-r-group/images/flags/32/AS.png new file mode 100644 index 0000000..5d89b3b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AT.png b/src/wp-content/themes/double-r-group/images/flags/32/AT.png new file mode 100644 index 0000000..c699394 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AU.png b/src/wp-content/themes/double-r-group/images/flags/32/AU.png new file mode 100644 index 0000000..5135f7c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AW.png b/src/wp-content/themes/double-r-group/images/flags/32/AW.png new file mode 100644 index 0000000..5841373 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AX.png b/src/wp-content/themes/double-r-group/images/flags/32/AX.png new file mode 100644 index 0000000..66f2830 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/AZ.png b/src/wp-content/themes/double-r-group/images/flags/32/AZ.png new file mode 100644 index 0000000..de44c66 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/AZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BA.png b/src/wp-content/themes/double-r-group/images/flags/32/BA.png new file mode 100644 index 0000000..20cae4d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BB.png b/src/wp-content/themes/double-r-group/images/flags/32/BB.png new file mode 100644 index 0000000..b631ef0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BD.png b/src/wp-content/themes/double-r-group/images/flags/32/BD.png new file mode 100644 index 0000000..12c1f8a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BE.png b/src/wp-content/themes/double-r-group/images/flags/32/BE.png new file mode 100644 index 0000000..38c2e8a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BF.png b/src/wp-content/themes/double-r-group/images/flags/32/BF.png new file mode 100644 index 0000000..a0b176e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BG.png b/src/wp-content/themes/double-r-group/images/flags/32/BG.png new file mode 100644 index 0000000..6bdf9b1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BH.png b/src/wp-content/themes/double-r-group/images/flags/32/BH.png new file mode 100644 index 0000000..b753f24 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BI.png b/src/wp-content/themes/double-r-group/images/flags/32/BI.png new file mode 100644 index 0000000..348b5d4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BJ.png b/src/wp-content/themes/double-r-group/images/flags/32/BJ.png new file mode 100644 index 0000000..4999b28 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BL.png b/src/wp-content/themes/double-r-group/images/flags/32/BL.png new file mode 100644 index 0000000..b4677c7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BM.png b/src/wp-content/themes/double-r-group/images/flags/32/BM.png new file mode 100644 index 0000000..3b5d2b7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BN.png b/src/wp-content/themes/double-r-group/images/flags/32/BN.png new file mode 100644 index 0000000..0da9406 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BO.png b/src/wp-content/themes/double-r-group/images/flags/32/BO.png new file mode 100644 index 0000000..3cecb07 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BR.png b/src/wp-content/themes/double-r-group/images/flags/32/BR.png new file mode 100644 index 0000000..79ecfcb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BS.png b/src/wp-content/themes/double-r-group/images/flags/32/BS.png new file mode 100644 index 0000000..2517602 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BT.png b/src/wp-content/themes/double-r-group/images/flags/32/BT.png new file mode 100644 index 0000000..4290f0a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BW.png b/src/wp-content/themes/double-r-group/images/flags/32/BW.png new file mode 100644 index 0000000..8bd54e9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BY.png b/src/wp-content/themes/double-r-group/images/flags/32/BY.png new file mode 100644 index 0000000..ded745b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/BZ.png b/src/wp-content/themes/double-r-group/images/flags/32/BZ.png new file mode 100644 index 0000000..9fc1b47 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/BZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CA.png b/src/wp-content/themes/double-r-group/images/flags/32/CA.png new file mode 100644 index 0000000..3f1ab11 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CC.png b/src/wp-content/themes/double-r-group/images/flags/32/CC.png new file mode 100644 index 0000000..64f68f9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CD.png b/src/wp-content/themes/double-r-group/images/flags/32/CD.png new file mode 100644 index 0000000..1c2932d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CF.png b/src/wp-content/themes/double-r-group/images/flags/32/CF.png new file mode 100644 index 0000000..52cfc90 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CG.png b/src/wp-content/themes/double-r-group/images/flags/32/CG.png new file mode 100644 index 0000000..358de44 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CH.png b/src/wp-content/themes/double-r-group/images/flags/32/CH.png new file mode 100644 index 0000000..8f7c95b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CI.png b/src/wp-content/themes/double-r-group/images/flags/32/CI.png new file mode 100644 index 0000000..8ef4d98 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CK.png b/src/wp-content/themes/double-r-group/images/flags/32/CK.png new file mode 100644 index 0000000..e3210e6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CL.png b/src/wp-content/themes/double-r-group/images/flags/32/CL.png new file mode 100644 index 0000000..a00af03 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CM.png b/src/wp-content/themes/double-r-group/images/flags/32/CM.png new file mode 100644 index 0000000..977580d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CN.png b/src/wp-content/themes/double-r-group/images/flags/32/CN.png new file mode 100644 index 0000000..eea8471 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CO.png b/src/wp-content/themes/double-r-group/images/flags/32/CO.png new file mode 100644 index 0000000..69935e6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CR.png b/src/wp-content/themes/double-r-group/images/flags/32/CR.png new file mode 100644 index 0000000..87df0cc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CU.png b/src/wp-content/themes/double-r-group/images/flags/32/CU.png new file mode 100644 index 0000000..ea4f238 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CV.png b/src/wp-content/themes/double-r-group/images/flags/32/CV.png new file mode 100644 index 0000000..2e54a57 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CW.png b/src/wp-content/themes/double-r-group/images/flags/32/CW.png new file mode 100644 index 0000000..900408a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CX.png b/src/wp-content/themes/double-r-group/images/flags/32/CX.png new file mode 100644 index 0000000..d6182ac Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CY.png b/src/wp-content/themes/double-r-group/images/flags/32/CY.png new file mode 100644 index 0000000..b359ba9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/CZ.png b/src/wp-content/themes/double-r-group/images/flags/32/CZ.png new file mode 100644 index 0000000..7a45980 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/CZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/DE.png b/src/wp-content/themes/double-r-group/images/flags/32/DE.png new file mode 100644 index 0000000..4e84b6e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/DE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/DJ.png b/src/wp-content/themes/double-r-group/images/flags/32/DJ.png new file mode 100644 index 0000000..7598d19 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/DJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/DK.png b/src/wp-content/themes/double-r-group/images/flags/32/DK.png new file mode 100644 index 0000000..9cb5c29 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/DK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/DM.png b/src/wp-content/themes/double-r-group/images/flags/32/DM.png new file mode 100644 index 0000000..e4d5e6a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/DM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/DO.png b/src/wp-content/themes/double-r-group/images/flags/32/DO.png new file mode 100644 index 0000000..80bbe51 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/DO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/DZ.png b/src/wp-content/themes/double-r-group/images/flags/32/DZ.png new file mode 100644 index 0000000..e4eef52 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/DZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/EC.png b/src/wp-content/themes/double-r-group/images/flags/32/EC.png new file mode 100644 index 0000000..86c720d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/EC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/EE.png b/src/wp-content/themes/double-r-group/images/flags/32/EE.png new file mode 100644 index 0000000..41dc640 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/EE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/EG.png b/src/wp-content/themes/double-r-group/images/flags/32/EG.png new file mode 100644 index 0000000..15e5194 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/EG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/EH.png b/src/wp-content/themes/double-r-group/images/flags/32/EH.png new file mode 100644 index 0000000..d25fe2a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/EH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/ER.png b/src/wp-content/themes/double-r-group/images/flags/32/ER.png new file mode 100644 index 0000000..29c2c5a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/ER.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/ES.png b/src/wp-content/themes/double-r-group/images/flags/32/ES.png new file mode 100644 index 0000000..65814c3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/ES.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/ET.png b/src/wp-content/themes/double-r-group/images/flags/32/ET.png new file mode 100644 index 0000000..07c7b40 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/ET.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/EU.png b/src/wp-content/themes/double-r-group/images/flags/32/EU.png new file mode 100644 index 0000000..f2936a0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/EU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/FI.png b/src/wp-content/themes/double-r-group/images/flags/32/FI.png new file mode 100644 index 0000000..e665307 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/FI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/FJ.png b/src/wp-content/themes/double-r-group/images/flags/32/FJ.png new file mode 100644 index 0000000..0b19ac1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/FJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/FK.png b/src/wp-content/themes/double-r-group/images/flags/32/FK.png new file mode 100644 index 0000000..af12c55 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/FK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/FM.png b/src/wp-content/themes/double-r-group/images/flags/32/FM.png new file mode 100644 index 0000000..3dc51be Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/FM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/FO.png b/src/wp-content/themes/double-r-group/images/flags/32/FO.png new file mode 100644 index 0000000..30e2338 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/FO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/FR.png b/src/wp-content/themes/double-r-group/images/flags/32/FR.png new file mode 100644 index 0000000..00c2b42 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/FR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GA.png b/src/wp-content/themes/double-r-group/images/flags/32/GA.png new file mode 100644 index 0000000..4e2cae3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GB.png b/src/wp-content/themes/double-r-group/images/flags/32/GB.png new file mode 100644 index 0000000..531836e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GD.png b/src/wp-content/themes/double-r-group/images/flags/32/GD.png new file mode 100644 index 0000000..f33143c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GE.png b/src/wp-content/themes/double-r-group/images/flags/32/GE.png new file mode 100644 index 0000000..754f405 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GG.png b/src/wp-content/themes/double-r-group/images/flags/32/GG.png new file mode 100644 index 0000000..37fabcc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GH.png b/src/wp-content/themes/double-r-group/images/flags/32/GH.png new file mode 100644 index 0000000..0f7e735 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GI.png b/src/wp-content/themes/double-r-group/images/flags/32/GI.png new file mode 100644 index 0000000..f487f82 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GL.png b/src/wp-content/themes/double-r-group/images/flags/32/GL.png new file mode 100644 index 0000000..dac9998 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GM.png b/src/wp-content/themes/double-r-group/images/flags/32/GM.png new file mode 100644 index 0000000..0e6c447 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GN.png b/src/wp-content/themes/double-r-group/images/flags/32/GN.png new file mode 100644 index 0000000..b37e3e9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GQ.png b/src/wp-content/themes/double-r-group/images/flags/32/GQ.png new file mode 100644 index 0000000..19bb7a3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GR.png b/src/wp-content/themes/double-r-group/images/flags/32/GR.png new file mode 100644 index 0000000..0f202d5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GS.png b/src/wp-content/themes/double-r-group/images/flags/32/GS.png new file mode 100644 index 0000000..fcaa793 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GT.png b/src/wp-content/themes/double-r-group/images/flags/32/GT.png new file mode 100644 index 0000000..7d85788 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GU.png b/src/wp-content/themes/double-r-group/images/flags/32/GU.png new file mode 100644 index 0000000..1b1213f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GW.png b/src/wp-content/themes/double-r-group/images/flags/32/GW.png new file mode 100644 index 0000000..4fd1490 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/GY.png b/src/wp-content/themes/double-r-group/images/flags/32/GY.png new file mode 100644 index 0000000..f60142d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/GY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/HK.png b/src/wp-content/themes/double-r-group/images/flags/32/HK.png new file mode 100644 index 0000000..d94644b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/HK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/HN.png b/src/wp-content/themes/double-r-group/images/flags/32/HN.png new file mode 100644 index 0000000..1bc0783 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/HN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/HR.png b/src/wp-content/themes/double-r-group/images/flags/32/HR.png new file mode 100644 index 0000000..35da777 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/HR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/HT.png b/src/wp-content/themes/double-r-group/images/flags/32/HT.png new file mode 100644 index 0000000..3db16a0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/HT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/HU.png b/src/wp-content/themes/double-r-group/images/flags/32/HU.png new file mode 100644 index 0000000..1a03bc7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/HU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/IC.png b/src/wp-content/themes/double-r-group/images/flags/32/IC.png new file mode 100644 index 0000000..7849d3e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/IC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/ID.png b/src/wp-content/themes/double-r-group/images/flags/32/ID.png new file mode 100644 index 0000000..05fb3d7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/ID.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/IE.png b/src/wp-content/themes/double-r-group/images/flags/32/IE.png new file mode 100644 index 0000000..197bc80 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/IE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/IL.png b/src/wp-content/themes/double-r-group/images/flags/32/IL.png new file mode 100644 index 0000000..1edb473 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/IL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/IM.png b/src/wp-content/themes/double-r-group/images/flags/32/IM.png new file mode 100644 index 0000000..403ab16 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/IM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/IN.png b/src/wp-content/themes/double-r-group/images/flags/32/IN.png new file mode 100644 index 0000000..4614f30 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/IN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/IQ.png b/src/wp-content/themes/double-r-group/images/flags/32/IQ.png new file mode 100644 index 0000000..fd397b3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/IQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/IR.png b/src/wp-content/themes/double-r-group/images/flags/32/IR.png new file mode 100644 index 0000000..58c142c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/IR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/IS.png b/src/wp-content/themes/double-r-group/images/flags/32/IS.png new file mode 100644 index 0000000..a996642 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/IS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/IT.png b/src/wp-content/themes/double-r-group/images/flags/32/IT.png new file mode 100644 index 0000000..26071b1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/IT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/JE.png b/src/wp-content/themes/double-r-group/images/flags/32/JE.png new file mode 100644 index 0000000..b621e1b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/JE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/JM.png b/src/wp-content/themes/double-r-group/images/flags/32/JM.png new file mode 100644 index 0000000..d327699 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/JM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/JO.png b/src/wp-content/themes/double-r-group/images/flags/32/JO.png new file mode 100644 index 0000000..92dcae5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/JO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/JP.png b/src/wp-content/themes/double-r-group/images/flags/32/JP.png new file mode 100644 index 0000000..69cca05 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/JP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/KE.png b/src/wp-content/themes/double-r-group/images/flags/32/KE.png new file mode 100644 index 0000000..e677cd6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/KE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/KG.png b/src/wp-content/themes/double-r-group/images/flags/32/KG.png new file mode 100644 index 0000000..23f3c3f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/KG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/KH.png b/src/wp-content/themes/double-r-group/images/flags/32/KH.png new file mode 100644 index 0000000..be536d0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/KH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/KI.png b/src/wp-content/themes/double-r-group/images/flags/32/KI.png new file mode 100644 index 0000000..d2c4406 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/KI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/KM.png b/src/wp-content/themes/double-r-group/images/flags/32/KM.png new file mode 100644 index 0000000..6a7126c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/KM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/KN.png b/src/wp-content/themes/double-r-group/images/flags/32/KN.png new file mode 100644 index 0000000..b299794 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/KN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/KP.png b/src/wp-content/themes/double-r-group/images/flags/32/KP.png new file mode 100644 index 0000000..f109971 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/KP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/KR.png b/src/wp-content/themes/double-r-group/images/flags/32/KR.png new file mode 100644 index 0000000..2a3a7ee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/KR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/KW.png b/src/wp-content/themes/double-r-group/images/flags/32/KW.png new file mode 100644 index 0000000..70f2946 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/KW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/KY.png b/src/wp-content/themes/double-r-group/images/flags/32/KY.png new file mode 100644 index 0000000..0ad539e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/KY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/KZ.png b/src/wp-content/themes/double-r-group/images/flags/32/KZ.png new file mode 100644 index 0000000..c71047b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/KZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/LA.png b/src/wp-content/themes/double-r-group/images/flags/32/LA.png new file mode 100644 index 0000000..1fb2fee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/LA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/LB.png b/src/wp-content/themes/double-r-group/images/flags/32/LB.png new file mode 100644 index 0000000..2817bcc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/LB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/LC.png b/src/wp-content/themes/double-r-group/images/flags/32/LC.png new file mode 100644 index 0000000..a86b4ea Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/LC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/LI.png b/src/wp-content/themes/double-r-group/images/flags/32/LI.png new file mode 100644 index 0000000..eaf426a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/LI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/LK.png b/src/wp-content/themes/double-r-group/images/flags/32/LK.png new file mode 100644 index 0000000..5bc19e8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/LK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/LR.png b/src/wp-content/themes/double-r-group/images/flags/32/LR.png new file mode 100644 index 0000000..eb821ae Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/LR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/LS.png b/src/wp-content/themes/double-r-group/images/flags/32/LS.png new file mode 100644 index 0000000..2a91042 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/LS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/LT.png b/src/wp-content/themes/double-r-group/images/flags/32/LT.png new file mode 100644 index 0000000..2979c00 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/LT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/LU.png b/src/wp-content/themes/double-r-group/images/flags/32/LU.png new file mode 100644 index 0000000..fd0197b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/LU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/LV.png b/src/wp-content/themes/double-r-group/images/flags/32/LV.png new file mode 100644 index 0000000..63e7c44 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/LV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/LY.png b/src/wp-content/themes/double-r-group/images/flags/32/LY.png new file mode 100644 index 0000000..40c3f84 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/LY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MA.png b/src/wp-content/themes/double-r-group/images/flags/32/MA.png new file mode 100644 index 0000000..0536263 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MC.png b/src/wp-content/themes/double-r-group/images/flags/32/MC.png new file mode 100644 index 0000000..05fb3d7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MD.png b/src/wp-content/themes/double-r-group/images/flags/32/MD.png new file mode 100644 index 0000000..4e2e489 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/ME.png b/src/wp-content/themes/double-r-group/images/flags/32/ME.png new file mode 100644 index 0000000..25be583 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/ME.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MF.png b/src/wp-content/themes/double-r-group/images/flags/32/MF.png new file mode 100644 index 0000000..38fc4f4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MG.png b/src/wp-content/themes/double-r-group/images/flags/32/MG.png new file mode 100644 index 0000000..c5d65b4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MH.png b/src/wp-content/themes/double-r-group/images/flags/32/MH.png new file mode 100644 index 0000000..e7e3acd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MK.png b/src/wp-content/themes/double-r-group/images/flags/32/MK.png new file mode 100644 index 0000000..1aa93b7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/ML.png b/src/wp-content/themes/double-r-group/images/flags/32/ML.png new file mode 100644 index 0000000..90b36c8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/ML.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MM.png b/src/wp-content/themes/double-r-group/images/flags/32/MM.png new file mode 100644 index 0000000..283508d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MN.png b/src/wp-content/themes/double-r-group/images/flags/32/MN.png new file mode 100644 index 0000000..700cfde Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MO.png b/src/wp-content/themes/double-r-group/images/flags/32/MO.png new file mode 100644 index 0000000..26d9990 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MP.png b/src/wp-content/themes/double-r-group/images/flags/32/MP.png new file mode 100644 index 0000000..218978c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MQ.png b/src/wp-content/themes/double-r-group/images/flags/32/MQ.png new file mode 100644 index 0000000..bd163d4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MR.png b/src/wp-content/themes/double-r-group/images/flags/32/MR.png new file mode 100644 index 0000000..5ea54ba Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MS.png b/src/wp-content/themes/double-r-group/images/flags/32/MS.png new file mode 100644 index 0000000..28faa78 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MT.png b/src/wp-content/themes/double-r-group/images/flags/32/MT.png new file mode 100644 index 0000000..cdd6f44 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MU.png b/src/wp-content/themes/double-r-group/images/flags/32/MU.png new file mode 100644 index 0000000..75aa760 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MV.png b/src/wp-content/themes/double-r-group/images/flags/32/MV.png new file mode 100644 index 0000000..d0b2e78 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MW.png b/src/wp-content/themes/double-r-group/images/flags/32/MW.png new file mode 100644 index 0000000..3911698 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MX.png b/src/wp-content/themes/double-r-group/images/flags/32/MX.png new file mode 100644 index 0000000..5fc1e67 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MY.png b/src/wp-content/themes/double-r-group/images/flags/32/MY.png new file mode 100644 index 0000000..f8b6b98 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/MZ.png b/src/wp-content/themes/double-r-group/images/flags/32/MZ.png new file mode 100644 index 0000000..b10b18a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/MZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/NA.png b/src/wp-content/themes/double-r-group/images/flags/32/NA.png new file mode 100644 index 0000000..0c79cba Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/NA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/NC.png b/src/wp-content/themes/double-r-group/images/flags/32/NC.png new file mode 100644 index 0000000..5a2d759 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/NC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/NE.png b/src/wp-content/themes/double-r-group/images/flags/32/NE.png new file mode 100644 index 0000000..7108759 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/NE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/NF.png b/src/wp-content/themes/double-r-group/images/flags/32/NF.png new file mode 100644 index 0000000..9f1bd9b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/NF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/NG.png b/src/wp-content/themes/double-r-group/images/flags/32/NG.png new file mode 100644 index 0000000..57db1c3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/NG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/NI.png b/src/wp-content/themes/double-r-group/images/flags/32/NI.png new file mode 100644 index 0000000..d454076 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/NI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/NL.png b/src/wp-content/themes/double-r-group/images/flags/32/NL.png new file mode 100644 index 0000000..01b1612 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/NL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/NO.png b/src/wp-content/themes/double-r-group/images/flags/32/NO.png new file mode 100644 index 0000000..dc0d858 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/NO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/NP.png b/src/wp-content/themes/double-r-group/images/flags/32/NP.png new file mode 100644 index 0000000..50f04ac Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/NP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/NR.png b/src/wp-content/themes/double-r-group/images/flags/32/NR.png new file mode 100644 index 0000000..2d9038a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/NR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/NU.png b/src/wp-content/themes/double-r-group/images/flags/32/NU.png new file mode 100644 index 0000000..f712b41 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/NU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/NZ.png b/src/wp-content/themes/double-r-group/images/flags/32/NZ.png new file mode 100644 index 0000000..6034fde Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/NZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/OM.png b/src/wp-content/themes/double-r-group/images/flags/32/OM.png new file mode 100644 index 0000000..3f65141 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/OM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PA.png b/src/wp-content/themes/double-r-group/images/flags/32/PA.png new file mode 100644 index 0000000..99f9884 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PE.png b/src/wp-content/themes/double-r-group/images/flags/32/PE.png new file mode 100644 index 0000000..210a0b8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PF.png b/src/wp-content/themes/double-r-group/images/flags/32/PF.png new file mode 100644 index 0000000..2bd5247 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PG.png b/src/wp-content/themes/double-r-group/images/flags/32/PG.png new file mode 100644 index 0000000..3e59c8b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PH.png b/src/wp-content/themes/double-r-group/images/flags/32/PH.png new file mode 100644 index 0000000..aad946d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PK.png b/src/wp-content/themes/double-r-group/images/flags/32/PK.png new file mode 100644 index 0000000..f24fe2b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PL.png b/src/wp-content/themes/double-r-group/images/flags/32/PL.png new file mode 100644 index 0000000..60cb1b4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PN.png b/src/wp-content/themes/double-r-group/images/flags/32/PN.png new file mode 100644 index 0000000..01dead4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PR.png b/src/wp-content/themes/double-r-group/images/flags/32/PR.png new file mode 100644 index 0000000..31fbcd3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PS.png b/src/wp-content/themes/double-r-group/images/flags/32/PS.png new file mode 100644 index 0000000..8efd0d1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PT.png b/src/wp-content/themes/double-r-group/images/flags/32/PT.png new file mode 100644 index 0000000..d9c2383 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PW.png b/src/wp-content/themes/double-r-group/images/flags/32/PW.png new file mode 100644 index 0000000..b384ef3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/PY.png b/src/wp-content/themes/double-r-group/images/flags/32/PY.png new file mode 100644 index 0000000..84ff0f9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/PY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/QA.png b/src/wp-content/themes/double-r-group/images/flags/32/QA.png new file mode 100644 index 0000000..55ebe0a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/QA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/RO.png b/src/wp-content/themes/double-r-group/images/flags/32/RO.png new file mode 100644 index 0000000..5c68926 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/RO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/RS.png b/src/wp-content/themes/double-r-group/images/flags/32/RS.png new file mode 100644 index 0000000..5576a0f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/RS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/RU.png b/src/wp-content/themes/double-r-group/images/flags/32/RU.png new file mode 100644 index 0000000..6ec5b90 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/RU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/RW.png b/src/wp-content/themes/double-r-group/images/flags/32/RW.png new file mode 100644 index 0000000..0ce3a11 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/RW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SA.png b/src/wp-content/themes/double-r-group/images/flags/32/SA.png new file mode 100644 index 0000000..27f6c90 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SB.png b/src/wp-content/themes/double-r-group/images/flags/32/SB.png new file mode 100644 index 0000000..379674d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SC.png b/src/wp-content/themes/double-r-group/images/flags/32/SC.png new file mode 100644 index 0000000..437d688 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SD.png b/src/wp-content/themes/double-r-group/images/flags/32/SD.png new file mode 100644 index 0000000..45a7c91 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SE.png b/src/wp-content/themes/double-r-group/images/flags/32/SE.png new file mode 100644 index 0000000..c114237 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SG.png b/src/wp-content/themes/double-r-group/images/flags/32/SG.png new file mode 100644 index 0000000..9f67797 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SH.png b/src/wp-content/themes/double-r-group/images/flags/32/SH.png new file mode 100644 index 0000000..169d5a7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SI.png b/src/wp-content/themes/double-r-group/images/flags/32/SI.png new file mode 100644 index 0000000..5bd7049 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SK.png b/src/wp-content/themes/double-r-group/images/flags/32/SK.png new file mode 100644 index 0000000..0628ea0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SL.png b/src/wp-content/themes/double-r-group/images/flags/32/SL.png new file mode 100644 index 0000000..d56037b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SM.png b/src/wp-content/themes/double-r-group/images/flags/32/SM.png new file mode 100644 index 0000000..194e1cd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SN.png b/src/wp-content/themes/double-r-group/images/flags/32/SN.png new file mode 100644 index 0000000..b3b9b10 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SO.png b/src/wp-content/themes/double-r-group/images/flags/32/SO.png new file mode 100644 index 0000000..6824850 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SR.png b/src/wp-content/themes/double-r-group/images/flags/32/SR.png new file mode 100644 index 0000000..659c0b0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SS.png b/src/wp-content/themes/double-r-group/images/flags/32/SS.png new file mode 100644 index 0000000..805b169 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/ST.png b/src/wp-content/themes/double-r-group/images/flags/32/ST.png new file mode 100644 index 0000000..61125ea Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/ST.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SV.png b/src/wp-content/themes/double-r-group/images/flags/32/SV.png new file mode 100644 index 0000000..3dad13f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SY.png b/src/wp-content/themes/double-r-group/images/flags/32/SY.png new file mode 100644 index 0000000..dd5d0a2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/SZ.png b/src/wp-content/themes/double-r-group/images/flags/32/SZ.png new file mode 100644 index 0000000..1c7406c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/SZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TC.png b/src/wp-content/themes/double-r-group/images/flags/32/TC.png new file mode 100644 index 0000000..aea447f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TD.png b/src/wp-content/themes/double-r-group/images/flags/32/TD.png new file mode 100644 index 0000000..4c8a5d4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TF.png b/src/wp-content/themes/double-r-group/images/flags/32/TF.png new file mode 100644 index 0000000..eda6af3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TG.png b/src/wp-content/themes/double-r-group/images/flags/32/TG.png new file mode 100644 index 0000000..7653f21 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TH.png b/src/wp-content/themes/double-r-group/images/flags/32/TH.png new file mode 100644 index 0000000..68d10bb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TJ.png b/src/wp-content/themes/double-r-group/images/flags/32/TJ.png new file mode 100644 index 0000000..97eb04e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TK.png b/src/wp-content/themes/double-r-group/images/flags/32/TK.png new file mode 100644 index 0000000..61da295 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TL.png b/src/wp-content/themes/double-r-group/images/flags/32/TL.png new file mode 100644 index 0000000..da70cca Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TM.png b/src/wp-content/themes/double-r-group/images/flags/32/TM.png new file mode 100644 index 0000000..14c6046 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TN.png b/src/wp-content/themes/double-r-group/images/flags/32/TN.png new file mode 100644 index 0000000..512c47a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TO.png b/src/wp-content/themes/double-r-group/images/flags/32/TO.png new file mode 100644 index 0000000..a903c36 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TR.png b/src/wp-content/themes/double-r-group/images/flags/32/TR.png new file mode 100644 index 0000000..e854a8d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TT.png b/src/wp-content/themes/double-r-group/images/flags/32/TT.png new file mode 100644 index 0000000..6ce562b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TV.png b/src/wp-content/themes/double-r-group/images/flags/32/TV.png new file mode 100644 index 0000000..db0897a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TW.png b/src/wp-content/themes/double-r-group/images/flags/32/TW.png new file mode 100644 index 0000000..9265d85 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/TZ.png b/src/wp-content/themes/double-r-group/images/flags/32/TZ.png new file mode 100644 index 0000000..ba1dcf0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/TZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/UA.png b/src/wp-content/themes/double-r-group/images/flags/32/UA.png new file mode 100644 index 0000000..151d87a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/UA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/UG.png b/src/wp-content/themes/double-r-group/images/flags/32/UG.png new file mode 100644 index 0000000..6e60b7a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/UG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/US.png b/src/wp-content/themes/double-r-group/images/flags/32/US.png new file mode 100644 index 0000000..44b3c28 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/US.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/UY.png b/src/wp-content/themes/double-r-group/images/flags/32/UY.png new file mode 100644 index 0000000..97cb920 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/UY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/UZ.png b/src/wp-content/themes/double-r-group/images/flags/32/UZ.png new file mode 100644 index 0000000..1aa66d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/UZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/VA.png b/src/wp-content/themes/double-r-group/images/flags/32/VA.png new file mode 100644 index 0000000..d73feed Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/VA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/VC.png b/src/wp-content/themes/double-r-group/images/flags/32/VC.png new file mode 100644 index 0000000..e734896 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/VC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/VE.png b/src/wp-content/themes/double-r-group/images/flags/32/VE.png new file mode 100644 index 0000000..319645f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/VE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/VG.png b/src/wp-content/themes/double-r-group/images/flags/32/VG.png new file mode 100644 index 0000000..810e982 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/VG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/VI.png b/src/wp-content/themes/double-r-group/images/flags/32/VI.png new file mode 100644 index 0000000..2fe609b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/VI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/VN.png b/src/wp-content/themes/double-r-group/images/flags/32/VN.png new file mode 100644 index 0000000..02bdd0d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/VN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/VU.png b/src/wp-content/themes/double-r-group/images/flags/32/VU.png new file mode 100644 index 0000000..1caa6cd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/VU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/WF.png b/src/wp-content/themes/double-r-group/images/flags/32/WF.png new file mode 100644 index 0000000..cd668bc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/WF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/WS.png b/src/wp-content/themes/double-r-group/images/flags/32/WS.png new file mode 100644 index 0000000..c53c22d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/WS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/YE.png b/src/wp-content/themes/double-r-group/images/flags/32/YE.png new file mode 100644 index 0000000..3362041 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/YE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/YT.png b/src/wp-content/themes/double-r-group/images/flags/32/YT.png new file mode 100644 index 0000000..1420291 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/YT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/ZA.png b/src/wp-content/themes/double-r-group/images/flags/32/ZA.png new file mode 100644 index 0000000..3d792b6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/ZA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/ZM.png b/src/wp-content/themes/double-r-group/images/flags/32/ZM.png new file mode 100644 index 0000000..685c2cd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/ZM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/ZW.png b/src/wp-content/themes/double-r-group/images/flags/32/ZW.png new file mode 100644 index 0000000..e80faec Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/ZW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_abkhazia.png b/src/wp-content/themes/double-r-group/images/flags/32/_abkhazia.png new file mode 100644 index 0000000..159f1ba Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_abkhazia.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_basque-country.png b/src/wp-content/themes/double-r-group/images/flags/32/_basque-country.png new file mode 100644 index 0000000..b46e333 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_basque-country.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_british-antarctic-territory.png b/src/wp-content/themes/double-r-group/images/flags/32/_british-antarctic-territory.png new file mode 100644 index 0000000..e4031c8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_british-antarctic-territory.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_commonwealth.png b/src/wp-content/themes/double-r-group/images/flags/32/_commonwealth.png new file mode 100644 index 0000000..b9c057e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_commonwealth.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_england.png b/src/wp-content/themes/double-r-group/images/flags/32/_england.png new file mode 100644 index 0000000..3d05378 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_england.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_gosquared.png b/src/wp-content/themes/double-r-group/images/flags/32/_gosquared.png new file mode 100644 index 0000000..6e26513 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_gosquared.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_kosovo.png b/src/wp-content/themes/double-r-group/images/flags/32/_kosovo.png new file mode 100644 index 0000000..bcdfe73 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_kosovo.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_mars.png b/src/wp-content/themes/double-r-group/images/flags/32/_mars.png new file mode 100644 index 0000000..93c4521 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_mars.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_nagorno-karabakh.png b/src/wp-content/themes/double-r-group/images/flags/32/_nagorno-karabakh.png new file mode 100644 index 0000000..d95e66f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_nagorno-karabakh.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_nato.png b/src/wp-content/themes/double-r-group/images/flags/32/_nato.png new file mode 100644 index 0000000..a837cab Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_nato.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_northern-cyprus.png b/src/wp-content/themes/double-r-group/images/flags/32/_northern-cyprus.png new file mode 100644 index 0000000..a904bcf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_northern-cyprus.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_olympics.png b/src/wp-content/themes/double-r-group/images/flags/32/_olympics.png new file mode 100644 index 0000000..18605fd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_olympics.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_red-cross.png b/src/wp-content/themes/double-r-group/images/flags/32/_red-cross.png new file mode 100644 index 0000000..c13cd8d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_red-cross.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_scotland.png b/src/wp-content/themes/double-r-group/images/flags/32/_scotland.png new file mode 100644 index 0000000..38f8d1d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_scotland.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_somaliland.png b/src/wp-content/themes/double-r-group/images/flags/32/_somaliland.png new file mode 100644 index 0000000..0f45e1e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_somaliland.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_south-ossetia.png b/src/wp-content/themes/double-r-group/images/flags/32/_south-ossetia.png new file mode 100644 index 0000000..c5d5630 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_south-ossetia.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_united-nations.png b/src/wp-content/themes/double-r-group/images/flags/32/_united-nations.png new file mode 100644 index 0000000..a48c0e5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_united-nations.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_unknown.png b/src/wp-content/themes/double-r-group/images/flags/32/_unknown.png new file mode 100644 index 0000000..e2ef37c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_unknown.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/32/_wales.png b/src/wp-content/themes/double-r-group/images/flags/32/_wales.png new file mode 100644 index 0000000..fb77f7d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/32/_wales.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AD.png b/src/wp-content/themes/double-r-group/images/flags/48/AD.png new file mode 100644 index 0000000..7e34545 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AE.png b/src/wp-content/themes/double-r-group/images/flags/48/AE.png new file mode 100644 index 0000000..c3be97b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AF.png b/src/wp-content/themes/double-r-group/images/flags/48/AF.png new file mode 100644 index 0000000..f8a2089 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AG.png b/src/wp-content/themes/double-r-group/images/flags/48/AG.png new file mode 100644 index 0000000..81e03f6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AI.png b/src/wp-content/themes/double-r-group/images/flags/48/AI.png new file mode 100644 index 0000000..f443518 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AL.png b/src/wp-content/themes/double-r-group/images/flags/48/AL.png new file mode 100644 index 0000000..f2972da Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AM.png b/src/wp-content/themes/double-r-group/images/flags/48/AM.png new file mode 100644 index 0000000..dff6909 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AN.png b/src/wp-content/themes/double-r-group/images/flags/48/AN.png new file mode 100644 index 0000000..b6afdee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AO.png b/src/wp-content/themes/double-r-group/images/flags/48/AO.png new file mode 100644 index 0000000..6094813 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AQ.png b/src/wp-content/themes/double-r-group/images/flags/48/AQ.png new file mode 100644 index 0000000..f82aea6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AR.png b/src/wp-content/themes/double-r-group/images/flags/48/AR.png new file mode 100644 index 0000000..6c0248b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AS.png b/src/wp-content/themes/double-r-group/images/flags/48/AS.png new file mode 100644 index 0000000..f6701ad Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AT.png b/src/wp-content/themes/double-r-group/images/flags/48/AT.png new file mode 100644 index 0000000..64aaca4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AU.png b/src/wp-content/themes/double-r-group/images/flags/48/AU.png new file mode 100644 index 0000000..5dee590 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AW.png b/src/wp-content/themes/double-r-group/images/flags/48/AW.png new file mode 100644 index 0000000..12f96e7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AX.png b/src/wp-content/themes/double-r-group/images/flags/48/AX.png new file mode 100644 index 0000000..2f4bd4a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/AZ.png b/src/wp-content/themes/double-r-group/images/flags/48/AZ.png new file mode 100644 index 0000000..fcca9a0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/AZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BA.png b/src/wp-content/themes/double-r-group/images/flags/48/BA.png new file mode 100644 index 0000000..bcd7223 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BB.png b/src/wp-content/themes/double-r-group/images/flags/48/BB.png new file mode 100644 index 0000000..26f9355 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BD.png b/src/wp-content/themes/double-r-group/images/flags/48/BD.png new file mode 100644 index 0000000..66a2f99 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BE.png b/src/wp-content/themes/double-r-group/images/flags/48/BE.png new file mode 100644 index 0000000..f94127e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BF.png b/src/wp-content/themes/double-r-group/images/flags/48/BF.png new file mode 100644 index 0000000..db65c36 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BG.png b/src/wp-content/themes/double-r-group/images/flags/48/BG.png new file mode 100644 index 0000000..96987ee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BH.png b/src/wp-content/themes/double-r-group/images/flags/48/BH.png new file mode 100644 index 0000000..02f86ed Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BI.png b/src/wp-content/themes/double-r-group/images/flags/48/BI.png new file mode 100644 index 0000000..b680aac Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BJ.png b/src/wp-content/themes/double-r-group/images/flags/48/BJ.png new file mode 100644 index 0000000..f35ae52 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BL.png b/src/wp-content/themes/double-r-group/images/flags/48/BL.png new file mode 100644 index 0000000..e64f96b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BM.png b/src/wp-content/themes/double-r-group/images/flags/48/BM.png new file mode 100644 index 0000000..9288df5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BN.png b/src/wp-content/themes/double-r-group/images/flags/48/BN.png new file mode 100644 index 0000000..61aa7a0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BO.png b/src/wp-content/themes/double-r-group/images/flags/48/BO.png new file mode 100644 index 0000000..f3e14a7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BR.png b/src/wp-content/themes/double-r-group/images/flags/48/BR.png new file mode 100644 index 0000000..56d6933 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BS.png b/src/wp-content/themes/double-r-group/images/flags/48/BS.png new file mode 100644 index 0000000..3e06289 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BT.png b/src/wp-content/themes/double-r-group/images/flags/48/BT.png new file mode 100644 index 0000000..dab69cc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BW.png b/src/wp-content/themes/double-r-group/images/flags/48/BW.png new file mode 100644 index 0000000..ea95524 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BY.png b/src/wp-content/themes/double-r-group/images/flags/48/BY.png new file mode 100644 index 0000000..654cc13 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/BZ.png b/src/wp-content/themes/double-r-group/images/flags/48/BZ.png new file mode 100644 index 0000000..6bfeea6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/BZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CA.png b/src/wp-content/themes/double-r-group/images/flags/48/CA.png new file mode 100644 index 0000000..48f5907 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CC.png b/src/wp-content/themes/double-r-group/images/flags/48/CC.png new file mode 100644 index 0000000..32ca763 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CD.png b/src/wp-content/themes/double-r-group/images/flags/48/CD.png new file mode 100644 index 0000000..762e022 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CF.png b/src/wp-content/themes/double-r-group/images/flags/48/CF.png new file mode 100644 index 0000000..b5329ff Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CG.png b/src/wp-content/themes/double-r-group/images/flags/48/CG.png new file mode 100644 index 0000000..b9637a0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CH.png b/src/wp-content/themes/double-r-group/images/flags/48/CH.png new file mode 100644 index 0000000..e6ff9a0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CI.png b/src/wp-content/themes/double-r-group/images/flags/48/CI.png new file mode 100644 index 0000000..55b166a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CK.png b/src/wp-content/themes/double-r-group/images/flags/48/CK.png new file mode 100644 index 0000000..53b530a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CL.png b/src/wp-content/themes/double-r-group/images/flags/48/CL.png new file mode 100644 index 0000000..7c0fa84 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CM.png b/src/wp-content/themes/double-r-group/images/flags/48/CM.png new file mode 100644 index 0000000..fce39d5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CN.png b/src/wp-content/themes/double-r-group/images/flags/48/CN.png new file mode 100644 index 0000000..5252856 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CO.png b/src/wp-content/themes/double-r-group/images/flags/48/CO.png new file mode 100644 index 0000000..d12519e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CR.png b/src/wp-content/themes/double-r-group/images/flags/48/CR.png new file mode 100644 index 0000000..33de629 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CU.png b/src/wp-content/themes/double-r-group/images/flags/48/CU.png new file mode 100644 index 0000000..4c68fe4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CV.png b/src/wp-content/themes/double-r-group/images/flags/48/CV.png new file mode 100644 index 0000000..4d6bba9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CW.png b/src/wp-content/themes/double-r-group/images/flags/48/CW.png new file mode 100644 index 0000000..de4f554 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CX.png b/src/wp-content/themes/double-r-group/images/flags/48/CX.png new file mode 100644 index 0000000..b04c93c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CY.png b/src/wp-content/themes/double-r-group/images/flags/48/CY.png new file mode 100644 index 0000000..5249cbd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/CZ.png b/src/wp-content/themes/double-r-group/images/flags/48/CZ.png new file mode 100644 index 0000000..bd5ab6d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/CZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/DE.png b/src/wp-content/themes/double-r-group/images/flags/48/DE.png new file mode 100644 index 0000000..2eae857 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/DE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/DJ.png b/src/wp-content/themes/double-r-group/images/flags/48/DJ.png new file mode 100644 index 0000000..d277e5c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/DJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/DK.png b/src/wp-content/themes/double-r-group/images/flags/48/DK.png new file mode 100644 index 0000000..c9a7728 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/DK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/DM.png b/src/wp-content/themes/double-r-group/images/flags/48/DM.png new file mode 100644 index 0000000..604a1a0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/DM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/DO.png b/src/wp-content/themes/double-r-group/images/flags/48/DO.png new file mode 100644 index 0000000..2dc0628 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/DO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/DZ.png b/src/wp-content/themes/double-r-group/images/flags/48/DZ.png new file mode 100644 index 0000000..450a319 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/DZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/EC.png b/src/wp-content/themes/double-r-group/images/flags/48/EC.png new file mode 100644 index 0000000..41853f1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/EC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/EE.png b/src/wp-content/themes/double-r-group/images/flags/48/EE.png new file mode 100644 index 0000000..6a99912 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/EE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/EG.png b/src/wp-content/themes/double-r-group/images/flags/48/EG.png new file mode 100644 index 0000000..f0c62e6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/EG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/EH.png b/src/wp-content/themes/double-r-group/images/flags/48/EH.png new file mode 100644 index 0000000..fa570cd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/EH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/EN.png b/src/wp-content/themes/double-r-group/images/flags/48/EN.png new file mode 100644 index 0000000..89d962f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/EN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/ER.png b/src/wp-content/themes/double-r-group/images/flags/48/ER.png new file mode 100644 index 0000000..221d983 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/ER.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/ES.png b/src/wp-content/themes/double-r-group/images/flags/48/ES.png new file mode 100644 index 0000000..6572af3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/ES.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/ET.png b/src/wp-content/themes/double-r-group/images/flags/48/ET.png new file mode 100644 index 0000000..d9beca2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/ET.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/EU.png b/src/wp-content/themes/double-r-group/images/flags/48/EU.png new file mode 100644 index 0000000..8054f2c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/EU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/FI.png b/src/wp-content/themes/double-r-group/images/flags/48/FI.png new file mode 100644 index 0000000..3ccbe96 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/FI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/FJ.png b/src/wp-content/themes/double-r-group/images/flags/48/FJ.png new file mode 100644 index 0000000..9348a75 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/FJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/FK.png b/src/wp-content/themes/double-r-group/images/flags/48/FK.png new file mode 100644 index 0000000..69a8d65 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/FK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/FM.png b/src/wp-content/themes/double-r-group/images/flags/48/FM.png new file mode 100644 index 0000000..fc722ee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/FM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/FO.png b/src/wp-content/themes/double-r-group/images/flags/48/FO.png new file mode 100644 index 0000000..1338473 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/FO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/FR.png b/src/wp-content/themes/double-r-group/images/flags/48/FR.png new file mode 100644 index 0000000..6353092 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/FR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GA.png b/src/wp-content/themes/double-r-group/images/flags/48/GA.png new file mode 100644 index 0000000..ec2cb29 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GB.png b/src/wp-content/themes/double-r-group/images/flags/48/GB.png new file mode 100644 index 0000000..89d962f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GD.png b/src/wp-content/themes/double-r-group/images/flags/48/GD.png new file mode 100644 index 0000000..ff7c546 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GE.png b/src/wp-content/themes/double-r-group/images/flags/48/GE.png new file mode 100644 index 0000000..6427031 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GG.png b/src/wp-content/themes/double-r-group/images/flags/48/GG.png new file mode 100644 index 0000000..2f26d13 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GH.png b/src/wp-content/themes/double-r-group/images/flags/48/GH.png new file mode 100644 index 0000000..d811bdf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GI.png b/src/wp-content/themes/double-r-group/images/flags/48/GI.png new file mode 100644 index 0000000..fb56d2f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GL.png b/src/wp-content/themes/double-r-group/images/flags/48/GL.png new file mode 100644 index 0000000..fed20b0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GM.png b/src/wp-content/themes/double-r-group/images/flags/48/GM.png new file mode 100644 index 0000000..d17f405 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GN.png b/src/wp-content/themes/double-r-group/images/flags/48/GN.png new file mode 100644 index 0000000..54e4a2f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GQ.png b/src/wp-content/themes/double-r-group/images/flags/48/GQ.png new file mode 100644 index 0000000..0c2cbc7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GR.png b/src/wp-content/themes/double-r-group/images/flags/48/GR.png new file mode 100644 index 0000000..664e983 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GS.png b/src/wp-content/themes/double-r-group/images/flags/48/GS.png new file mode 100644 index 0000000..a05a5b0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GT.png b/src/wp-content/themes/double-r-group/images/flags/48/GT.png new file mode 100644 index 0000000..4ff1a93 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GU.png b/src/wp-content/themes/double-r-group/images/flags/48/GU.png new file mode 100644 index 0000000..aa71b54 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GW.png b/src/wp-content/themes/double-r-group/images/flags/48/GW.png new file mode 100644 index 0000000..66db3fa Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/GY.png b/src/wp-content/themes/double-r-group/images/flags/48/GY.png new file mode 100644 index 0000000..f7000ea Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/GY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/HK.png b/src/wp-content/themes/double-r-group/images/flags/48/HK.png new file mode 100644 index 0000000..f619cbc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/HK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/HN.png b/src/wp-content/themes/double-r-group/images/flags/48/HN.png new file mode 100644 index 0000000..1d6cf2b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/HN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/HR.png b/src/wp-content/themes/double-r-group/images/flags/48/HR.png new file mode 100644 index 0000000..dc25a0c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/HR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/HT.png b/src/wp-content/themes/double-r-group/images/flags/48/HT.png new file mode 100644 index 0000000..e15231e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/HT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/HU.png b/src/wp-content/themes/double-r-group/images/flags/48/HU.png new file mode 100644 index 0000000..81c6da0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/HU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/IC.png b/src/wp-content/themes/double-r-group/images/flags/48/IC.png new file mode 100644 index 0000000..e621318 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/IC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/ID.png b/src/wp-content/themes/double-r-group/images/flags/48/ID.png new file mode 100644 index 0000000..4767be4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/ID.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/IE.png b/src/wp-content/themes/double-r-group/images/flags/48/IE.png new file mode 100644 index 0000000..ca1b5b1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/IE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/IL.png b/src/wp-content/themes/double-r-group/images/flags/48/IL.png new file mode 100644 index 0000000..f99a59b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/IL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/IM.png b/src/wp-content/themes/double-r-group/images/flags/48/IM.png new file mode 100644 index 0000000..7c3a9c2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/IM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/IN.png b/src/wp-content/themes/double-r-group/images/flags/48/IN.png new file mode 100644 index 0000000..e99960b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/IN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/IQ.png b/src/wp-content/themes/double-r-group/images/flags/48/IQ.png new file mode 100644 index 0000000..74681d7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/IQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/IR.png b/src/wp-content/themes/double-r-group/images/flags/48/IR.png new file mode 100644 index 0000000..bb56923 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/IR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/IS.png b/src/wp-content/themes/double-r-group/images/flags/48/IS.png new file mode 100644 index 0000000..80fcf13 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/IS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/IT.png b/src/wp-content/themes/double-r-group/images/flags/48/IT.png new file mode 100644 index 0000000..ea0b791 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/IT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/JE.png b/src/wp-content/themes/double-r-group/images/flags/48/JE.png new file mode 100644 index 0000000..87435b9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/JE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/JM.png b/src/wp-content/themes/double-r-group/images/flags/48/JM.png new file mode 100644 index 0000000..b79728e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/JM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/JO.png b/src/wp-content/themes/double-r-group/images/flags/48/JO.png new file mode 100644 index 0000000..e074264 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/JO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/JP.png b/src/wp-content/themes/double-r-group/images/flags/48/JP.png new file mode 100644 index 0000000..122963f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/JP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/KE.png b/src/wp-content/themes/double-r-group/images/flags/48/KE.png new file mode 100644 index 0000000..73d461d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/KE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/KG.png b/src/wp-content/themes/double-r-group/images/flags/48/KG.png new file mode 100644 index 0000000..e874f10 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/KG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/KH.png b/src/wp-content/themes/double-r-group/images/flags/48/KH.png new file mode 100644 index 0000000..981807b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/KH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/KI.png b/src/wp-content/themes/double-r-group/images/flags/48/KI.png new file mode 100644 index 0000000..cfedc8b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/KI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/KM.png b/src/wp-content/themes/double-r-group/images/flags/48/KM.png new file mode 100644 index 0000000..799ba13 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/KM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/KN.png b/src/wp-content/themes/double-r-group/images/flags/48/KN.png new file mode 100644 index 0000000..98bccc5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/KN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/KP.png b/src/wp-content/themes/double-r-group/images/flags/48/KP.png new file mode 100644 index 0000000..c4be6dc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/KP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/KR.png b/src/wp-content/themes/double-r-group/images/flags/48/KR.png new file mode 100644 index 0000000..4bbec80 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/KR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/KW.png b/src/wp-content/themes/double-r-group/images/flags/48/KW.png new file mode 100644 index 0000000..3227643 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/KW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/KY.png b/src/wp-content/themes/double-r-group/images/flags/48/KY.png new file mode 100644 index 0000000..2c5d8cb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/KY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/KZ.png b/src/wp-content/themes/double-r-group/images/flags/48/KZ.png new file mode 100644 index 0000000..4f73c21 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/KZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/LA.png b/src/wp-content/themes/double-r-group/images/flags/48/LA.png new file mode 100644 index 0000000..9dffe06 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/LA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/LB.png b/src/wp-content/themes/double-r-group/images/flags/48/LB.png new file mode 100644 index 0000000..88ec96f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/LB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/LC.png b/src/wp-content/themes/double-r-group/images/flags/48/LC.png new file mode 100644 index 0000000..00bcb17 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/LC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/LI.png b/src/wp-content/themes/double-r-group/images/flags/48/LI.png new file mode 100644 index 0000000..c38be4f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/LI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/LK.png b/src/wp-content/themes/double-r-group/images/flags/48/LK.png new file mode 100644 index 0000000..2e872e8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/LK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/LR.png b/src/wp-content/themes/double-r-group/images/flags/48/LR.png new file mode 100644 index 0000000..6815a9a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/LR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/LS.png b/src/wp-content/themes/double-r-group/images/flags/48/LS.png new file mode 100644 index 0000000..655887e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/LS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/LT.png b/src/wp-content/themes/double-r-group/images/flags/48/LT.png new file mode 100644 index 0000000..0530b69 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/LT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/LU.png b/src/wp-content/themes/double-r-group/images/flags/48/LU.png new file mode 100644 index 0000000..8fedfc9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/LU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/LV.png b/src/wp-content/themes/double-r-group/images/flags/48/LV.png new file mode 100644 index 0000000..5c2adac Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/LV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/LY.png b/src/wp-content/themes/double-r-group/images/flags/48/LY.png new file mode 100644 index 0000000..b3df89e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/LY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MA.png b/src/wp-content/themes/double-r-group/images/flags/48/MA.png new file mode 100644 index 0000000..e521425 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MC.png b/src/wp-content/themes/double-r-group/images/flags/48/MC.png new file mode 100644 index 0000000..4767be4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MD.png b/src/wp-content/themes/double-r-group/images/flags/48/MD.png new file mode 100644 index 0000000..74722d6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/ME.png b/src/wp-content/themes/double-r-group/images/flags/48/ME.png new file mode 100644 index 0000000..c8d2f4a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/ME.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MF.png b/src/wp-content/themes/double-r-group/images/flags/48/MF.png new file mode 100644 index 0000000..f1d37de Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MG.png b/src/wp-content/themes/double-r-group/images/flags/48/MG.png new file mode 100644 index 0000000..6775ae8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MH.png b/src/wp-content/themes/double-r-group/images/flags/48/MH.png new file mode 100644 index 0000000..1b73c66 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MK.png b/src/wp-content/themes/double-r-group/images/flags/48/MK.png new file mode 100644 index 0000000..602ea1f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/ML.png b/src/wp-content/themes/double-r-group/images/flags/48/ML.png new file mode 100644 index 0000000..23d7832 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/ML.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MM.png b/src/wp-content/themes/double-r-group/images/flags/48/MM.png new file mode 100644 index 0000000..0c63c6a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MN.png b/src/wp-content/themes/double-r-group/images/flags/48/MN.png new file mode 100644 index 0000000..9faf78e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MO.png b/src/wp-content/themes/double-r-group/images/flags/48/MO.png new file mode 100644 index 0000000..b5a1e60 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MP.png b/src/wp-content/themes/double-r-group/images/flags/48/MP.png new file mode 100644 index 0000000..be0c31a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MQ.png b/src/wp-content/themes/double-r-group/images/flags/48/MQ.png new file mode 100644 index 0000000..bdc8db4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MR.png b/src/wp-content/themes/double-r-group/images/flags/48/MR.png new file mode 100644 index 0000000..173c6b4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MS.png b/src/wp-content/themes/double-r-group/images/flags/48/MS.png new file mode 100644 index 0000000..b1f237c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MT.png b/src/wp-content/themes/double-r-group/images/flags/48/MT.png new file mode 100644 index 0000000..4c9f251 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MU.png b/src/wp-content/themes/double-r-group/images/flags/48/MU.png new file mode 100644 index 0000000..dd96a83 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MV.png b/src/wp-content/themes/double-r-group/images/flags/48/MV.png new file mode 100644 index 0000000..f979b6f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MW.png b/src/wp-content/themes/double-r-group/images/flags/48/MW.png new file mode 100644 index 0000000..608ec76 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MX.png b/src/wp-content/themes/double-r-group/images/flags/48/MX.png new file mode 100644 index 0000000..99a3049 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MY.png b/src/wp-content/themes/double-r-group/images/flags/48/MY.png new file mode 100644 index 0000000..02d6a98 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/MZ.png b/src/wp-content/themes/double-r-group/images/flags/48/MZ.png new file mode 100644 index 0000000..d986f18 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/MZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/NA.png b/src/wp-content/themes/double-r-group/images/flags/48/NA.png new file mode 100644 index 0000000..99972e1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/NA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/NC.png b/src/wp-content/themes/double-r-group/images/flags/48/NC.png new file mode 100644 index 0000000..11ad1f5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/NC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/NE.png b/src/wp-content/themes/double-r-group/images/flags/48/NE.png new file mode 100644 index 0000000..865cd36 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/NE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/NF.png b/src/wp-content/themes/double-r-group/images/flags/48/NF.png new file mode 100644 index 0000000..8601f82 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/NF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/NG.png b/src/wp-content/themes/double-r-group/images/flags/48/NG.png new file mode 100644 index 0000000..2402795 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/NG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/NI.png b/src/wp-content/themes/double-r-group/images/flags/48/NI.png new file mode 100644 index 0000000..92c65a2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/NI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/NL.png b/src/wp-content/themes/double-r-group/images/flags/48/NL.png new file mode 100644 index 0000000..f16a129 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/NL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/NO.png b/src/wp-content/themes/double-r-group/images/flags/48/NO.png new file mode 100644 index 0000000..ac2a305 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/NO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/NP.png b/src/wp-content/themes/double-r-group/images/flags/48/NP.png new file mode 100644 index 0000000..5130807 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/NP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/NR.png b/src/wp-content/themes/double-r-group/images/flags/48/NR.png new file mode 100644 index 0000000..6614c81 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/NR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/NU.png b/src/wp-content/themes/double-r-group/images/flags/48/NU.png new file mode 100644 index 0000000..961bdfd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/NU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/NZ.png b/src/wp-content/themes/double-r-group/images/flags/48/NZ.png new file mode 100644 index 0000000..a75297e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/NZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/OM.png b/src/wp-content/themes/double-r-group/images/flags/48/OM.png new file mode 100644 index 0000000..58ded8f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/OM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PA.png b/src/wp-content/themes/double-r-group/images/flags/48/PA.png new file mode 100644 index 0000000..9c03d02 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PE.png b/src/wp-content/themes/double-r-group/images/flags/48/PE.png new file mode 100644 index 0000000..d6e6653 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PF.png b/src/wp-content/themes/double-r-group/images/flags/48/PF.png new file mode 100644 index 0000000..c3d38b5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PG.png b/src/wp-content/themes/double-r-group/images/flags/48/PG.png new file mode 100644 index 0000000..118ee64 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PH.png b/src/wp-content/themes/double-r-group/images/flags/48/PH.png new file mode 100644 index 0000000..aa487a2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PK.png b/src/wp-content/themes/double-r-group/images/flags/48/PK.png new file mode 100644 index 0000000..e6ad89c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PL.png b/src/wp-content/themes/double-r-group/images/flags/48/PL.png new file mode 100644 index 0000000..b4e207c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PN.png b/src/wp-content/themes/double-r-group/images/flags/48/PN.png new file mode 100644 index 0000000..01612b1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PR.png b/src/wp-content/themes/double-r-group/images/flags/48/PR.png new file mode 100644 index 0000000..6ba9c02 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PS.png b/src/wp-content/themes/double-r-group/images/flags/48/PS.png new file mode 100644 index 0000000..2e6dde8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PT.png b/src/wp-content/themes/double-r-group/images/flags/48/PT.png new file mode 100644 index 0000000..d0b2bba Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PW.png b/src/wp-content/themes/double-r-group/images/flags/48/PW.png new file mode 100644 index 0000000..f738c1f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/PY.png b/src/wp-content/themes/double-r-group/images/flags/48/PY.png new file mode 100644 index 0000000..ffeca8a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/PY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/QA.png b/src/wp-content/themes/double-r-group/images/flags/48/QA.png new file mode 100644 index 0000000..a8dbc3f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/QA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/RO.png b/src/wp-content/themes/double-r-group/images/flags/48/RO.png new file mode 100644 index 0000000..7a9d278 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/RO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/RS.png b/src/wp-content/themes/double-r-group/images/flags/48/RS.png new file mode 100644 index 0000000..6883df9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/RS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/RU.png b/src/wp-content/themes/double-r-group/images/flags/48/RU.png new file mode 100644 index 0000000..f7be413 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/RU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/RW.png b/src/wp-content/themes/double-r-group/images/flags/48/RW.png new file mode 100644 index 0000000..8b19824 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/RW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SA.png b/src/wp-content/themes/double-r-group/images/flags/48/SA.png new file mode 100644 index 0000000..7573e20 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SB.png b/src/wp-content/themes/double-r-group/images/flags/48/SB.png new file mode 100644 index 0000000..792113a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SC.png b/src/wp-content/themes/double-r-group/images/flags/48/SC.png new file mode 100644 index 0000000..3265ba2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SD.png b/src/wp-content/themes/double-r-group/images/flags/48/SD.png new file mode 100644 index 0000000..4f60ce6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SE.png b/src/wp-content/themes/double-r-group/images/flags/48/SE.png new file mode 100644 index 0000000..d6cf067 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SG.png b/src/wp-content/themes/double-r-group/images/flags/48/SG.png new file mode 100644 index 0000000..cb5fa3e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SH.png b/src/wp-content/themes/double-r-group/images/flags/48/SH.png new file mode 100644 index 0000000..931e9a0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SI.png b/src/wp-content/themes/double-r-group/images/flags/48/SI.png new file mode 100644 index 0000000..7c112bb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SK.png b/src/wp-content/themes/double-r-group/images/flags/48/SK.png new file mode 100644 index 0000000..7647af3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SL.png b/src/wp-content/themes/double-r-group/images/flags/48/SL.png new file mode 100644 index 0000000..14db5ba Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SM.png b/src/wp-content/themes/double-r-group/images/flags/48/SM.png new file mode 100644 index 0000000..93a47e6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SN.png b/src/wp-content/themes/double-r-group/images/flags/48/SN.png new file mode 100644 index 0000000..14f3981 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SO.png b/src/wp-content/themes/double-r-group/images/flags/48/SO.png new file mode 100644 index 0000000..e8b37f5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SR.png b/src/wp-content/themes/double-r-group/images/flags/48/SR.png new file mode 100644 index 0000000..904f6a4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SS.png b/src/wp-content/themes/double-r-group/images/flags/48/SS.png new file mode 100644 index 0000000..40f977f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/ST.png b/src/wp-content/themes/double-r-group/images/flags/48/ST.png new file mode 100644 index 0000000..9168c88 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/ST.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SV.png b/src/wp-content/themes/double-r-group/images/flags/48/SV.png new file mode 100644 index 0000000..7db0b43 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SY.png b/src/wp-content/themes/double-r-group/images/flags/48/SY.png new file mode 100644 index 0000000..83a8ed8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/SZ.png b/src/wp-content/themes/double-r-group/images/flags/48/SZ.png new file mode 100644 index 0000000..7e84259 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/SZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TC.png b/src/wp-content/themes/double-r-group/images/flags/48/TC.png new file mode 100644 index 0000000..8b43792 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TD.png b/src/wp-content/themes/double-r-group/images/flags/48/TD.png new file mode 100644 index 0000000..eb2f0e3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TF.png b/src/wp-content/themes/double-r-group/images/flags/48/TF.png new file mode 100644 index 0000000..e017048 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TG.png b/src/wp-content/themes/double-r-group/images/flags/48/TG.png new file mode 100644 index 0000000..0da702d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TH.png b/src/wp-content/themes/double-r-group/images/flags/48/TH.png new file mode 100644 index 0000000..36d6499 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TJ.png b/src/wp-content/themes/double-r-group/images/flags/48/TJ.png new file mode 100644 index 0000000..f2e7dbd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TK.png b/src/wp-content/themes/double-r-group/images/flags/48/TK.png new file mode 100644 index 0000000..5084cc0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TL.png b/src/wp-content/themes/double-r-group/images/flags/48/TL.png new file mode 100644 index 0000000..deb1123 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TM.png b/src/wp-content/themes/double-r-group/images/flags/48/TM.png new file mode 100644 index 0000000..75d52f5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TN.png b/src/wp-content/themes/double-r-group/images/flags/48/TN.png new file mode 100644 index 0000000..6ef0d79 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TO.png b/src/wp-content/themes/double-r-group/images/flags/48/TO.png new file mode 100644 index 0000000..7bc6f61 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TR.png b/src/wp-content/themes/double-r-group/images/flags/48/TR.png new file mode 100644 index 0000000..8e291ad Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TT.png b/src/wp-content/themes/double-r-group/images/flags/48/TT.png new file mode 100644 index 0000000..d661d82 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TV.png b/src/wp-content/themes/double-r-group/images/flags/48/TV.png new file mode 100644 index 0000000..a1382dd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TW.png b/src/wp-content/themes/double-r-group/images/flags/48/TW.png new file mode 100644 index 0000000..b3cfa6e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/TZ.png b/src/wp-content/themes/double-r-group/images/flags/48/TZ.png new file mode 100644 index 0000000..43dc56b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/TZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/UA.png b/src/wp-content/themes/double-r-group/images/flags/48/UA.png new file mode 100644 index 0000000..9466e81 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/UA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/UG.png b/src/wp-content/themes/double-r-group/images/flags/48/UG.png new file mode 100644 index 0000000..cf23f26 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/UG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/US.png b/src/wp-content/themes/double-r-group/images/flags/48/US.png new file mode 100644 index 0000000..154ce18 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/US.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/UY.png b/src/wp-content/themes/double-r-group/images/flags/48/UY.png new file mode 100644 index 0000000..6f864f4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/UY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/UZ.png b/src/wp-content/themes/double-r-group/images/flags/48/UZ.png new file mode 100644 index 0000000..9411956 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/UZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/VA.png b/src/wp-content/themes/double-r-group/images/flags/48/VA.png new file mode 100644 index 0000000..0aed467 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/VA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/VC.png b/src/wp-content/themes/double-r-group/images/flags/48/VC.png new file mode 100644 index 0000000..03fd69f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/VC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/VE.png b/src/wp-content/themes/double-r-group/images/flags/48/VE.png new file mode 100644 index 0000000..d6627db Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/VE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/VG.png b/src/wp-content/themes/double-r-group/images/flags/48/VG.png new file mode 100644 index 0000000..c688b5c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/VG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/VI.png b/src/wp-content/themes/double-r-group/images/flags/48/VI.png new file mode 100644 index 0000000..6e5d2ee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/VI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/VN.png b/src/wp-content/themes/double-r-group/images/flags/48/VN.png new file mode 100644 index 0000000..8386793 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/VN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/VU.png b/src/wp-content/themes/double-r-group/images/flags/48/VU.png new file mode 100644 index 0000000..c436652 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/VU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/WF.png b/src/wp-content/themes/double-r-group/images/flags/48/WF.png new file mode 100644 index 0000000..1e8e5f7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/WF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/WS.png b/src/wp-content/themes/double-r-group/images/flags/48/WS.png new file mode 100644 index 0000000..bd75592 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/WS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/YE.png b/src/wp-content/themes/double-r-group/images/flags/48/YE.png new file mode 100644 index 0000000..c305294 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/YE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/YT.png b/src/wp-content/themes/double-r-group/images/flags/48/YT.png new file mode 100644 index 0000000..9e9d210 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/YT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/ZA.png b/src/wp-content/themes/double-r-group/images/flags/48/ZA.png new file mode 100644 index 0000000..1faf24a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/ZA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/ZM.png b/src/wp-content/themes/double-r-group/images/flags/48/ZM.png new file mode 100644 index 0000000..110e222 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/ZM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/ZW.png b/src/wp-content/themes/double-r-group/images/flags/48/ZW.png new file mode 100644 index 0000000..e115935 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/ZW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_abkhazia.png b/src/wp-content/themes/double-r-group/images/flags/48/_abkhazia.png new file mode 100644 index 0000000..45344ef Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_abkhazia.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_basque-country.png b/src/wp-content/themes/double-r-group/images/flags/48/_basque-country.png new file mode 100644 index 0000000..6c691b4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_basque-country.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_british-antarctic-territory.png b/src/wp-content/themes/double-r-group/images/flags/48/_british-antarctic-territory.png new file mode 100644 index 0000000..1aa2a87 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_british-antarctic-territory.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_commonwealth.png b/src/wp-content/themes/double-r-group/images/flags/48/_commonwealth.png new file mode 100644 index 0000000..99bf898 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_commonwealth.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_england.png b/src/wp-content/themes/double-r-group/images/flags/48/_england.png new file mode 100644 index 0000000..45764bc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_england.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_gosquared.png b/src/wp-content/themes/double-r-group/images/flags/48/_gosquared.png new file mode 100644 index 0000000..889aef7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_gosquared.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_kosovo.png b/src/wp-content/themes/double-r-group/images/flags/48/_kosovo.png new file mode 100644 index 0000000..48997ee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_kosovo.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_mars.png b/src/wp-content/themes/double-r-group/images/flags/48/_mars.png new file mode 100644 index 0000000..602a538 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_mars.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_nagorno-karabakh.png b/src/wp-content/themes/double-r-group/images/flags/48/_nagorno-karabakh.png new file mode 100644 index 0000000..791cb9b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_nagorno-karabakh.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_nato.png b/src/wp-content/themes/double-r-group/images/flags/48/_nato.png new file mode 100644 index 0000000..d24fdcc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_nato.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_northern-cyprus.png b/src/wp-content/themes/double-r-group/images/flags/48/_northern-cyprus.png new file mode 100644 index 0000000..d9c4848 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_northern-cyprus.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_olympics.png b/src/wp-content/themes/double-r-group/images/flags/48/_olympics.png new file mode 100644 index 0000000..31e1f87 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_olympics.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_red-cross.png b/src/wp-content/themes/double-r-group/images/flags/48/_red-cross.png new file mode 100644 index 0000000..031aaf1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_red-cross.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_scotland.png b/src/wp-content/themes/double-r-group/images/flags/48/_scotland.png new file mode 100644 index 0000000..b9d867e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_scotland.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_somaliland.png b/src/wp-content/themes/double-r-group/images/flags/48/_somaliland.png new file mode 100644 index 0000000..1968add Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_somaliland.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_south-ossetia.png b/src/wp-content/themes/double-r-group/images/flags/48/_south-ossetia.png new file mode 100644 index 0000000..8e4ee0a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_south-ossetia.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_united-nations.png b/src/wp-content/themes/double-r-group/images/flags/48/_united-nations.png new file mode 100644 index 0000000..fe6d472 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_united-nations.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_unknown.png b/src/wp-content/themes/double-r-group/images/flags/48/_unknown.png new file mode 100644 index 0000000..6b1632e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_unknown.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/48/_wales.png b/src/wp-content/themes/double-r-group/images/flags/48/_wales.png new file mode 100644 index 0000000..1db325f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/48/_wales.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AD.png b/src/wp-content/themes/double-r-group/images/flags/64/AD.png new file mode 100644 index 0000000..f7f544d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AE.png b/src/wp-content/themes/double-r-group/images/flags/64/AE.png new file mode 100644 index 0000000..1a7bc79 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AF.png b/src/wp-content/themes/double-r-group/images/flags/64/AF.png new file mode 100644 index 0000000..c454d02 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AG.png b/src/wp-content/themes/double-r-group/images/flags/64/AG.png new file mode 100644 index 0000000..7204156 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AI.png b/src/wp-content/themes/double-r-group/images/flags/64/AI.png new file mode 100644 index 0000000..1b8306f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AL.png b/src/wp-content/themes/double-r-group/images/flags/64/AL.png new file mode 100644 index 0000000..c9718da Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AM.png b/src/wp-content/themes/double-r-group/images/flags/64/AM.png new file mode 100644 index 0000000..c4474a4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AN.png b/src/wp-content/themes/double-r-group/images/flags/64/AN.png new file mode 100644 index 0000000..8ca75ce Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AO.png b/src/wp-content/themes/double-r-group/images/flags/64/AO.png new file mode 100644 index 0000000..ecd1112 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AQ.png b/src/wp-content/themes/double-r-group/images/flags/64/AQ.png new file mode 100644 index 0000000..7bb02f8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AR.png b/src/wp-content/themes/double-r-group/images/flags/64/AR.png new file mode 100644 index 0000000..d6b5189 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AS.png b/src/wp-content/themes/double-r-group/images/flags/64/AS.png new file mode 100644 index 0000000..9fa4ce8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AT.png b/src/wp-content/themes/double-r-group/images/flags/64/AT.png new file mode 100644 index 0000000..ddabd31 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AU.png b/src/wp-content/themes/double-r-group/images/flags/64/AU.png new file mode 100644 index 0000000..50fb678 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AW.png b/src/wp-content/themes/double-r-group/images/flags/64/AW.png new file mode 100644 index 0000000..7289894 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AX.png b/src/wp-content/themes/double-r-group/images/flags/64/AX.png new file mode 100644 index 0000000..2824c2e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/AZ.png b/src/wp-content/themes/double-r-group/images/flags/64/AZ.png new file mode 100644 index 0000000..cf4fd8e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/AZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BA.png b/src/wp-content/themes/double-r-group/images/flags/64/BA.png new file mode 100644 index 0000000..104d45a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BB.png b/src/wp-content/themes/double-r-group/images/flags/64/BB.png new file mode 100644 index 0000000..fac3025 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BD.png b/src/wp-content/themes/double-r-group/images/flags/64/BD.png new file mode 100644 index 0000000..d9b4611 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BE.png b/src/wp-content/themes/double-r-group/images/flags/64/BE.png new file mode 100644 index 0000000..e36ff7f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BF.png b/src/wp-content/themes/double-r-group/images/flags/64/BF.png new file mode 100644 index 0000000..ed53cbe Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BG.png b/src/wp-content/themes/double-r-group/images/flags/64/BG.png new file mode 100644 index 0000000..9d05465 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BH.png b/src/wp-content/themes/double-r-group/images/flags/64/BH.png new file mode 100644 index 0000000..7e3d75d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BI.png b/src/wp-content/themes/double-r-group/images/flags/64/BI.png new file mode 100644 index 0000000..1dd48d9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BJ.png b/src/wp-content/themes/double-r-group/images/flags/64/BJ.png new file mode 100644 index 0000000..18a0475 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BL.png b/src/wp-content/themes/double-r-group/images/flags/64/BL.png new file mode 100644 index 0000000..dbe3337 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BM.png b/src/wp-content/themes/double-r-group/images/flags/64/BM.png new file mode 100644 index 0000000..e2fa88f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BN.png b/src/wp-content/themes/double-r-group/images/flags/64/BN.png new file mode 100644 index 0000000..04e7fd7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BO.png b/src/wp-content/themes/double-r-group/images/flags/64/BO.png new file mode 100644 index 0000000..83a9efb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BR.png b/src/wp-content/themes/double-r-group/images/flags/64/BR.png new file mode 100644 index 0000000..0b1da29 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BS.png b/src/wp-content/themes/double-r-group/images/flags/64/BS.png new file mode 100644 index 0000000..c7eebff Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BT.png b/src/wp-content/themes/double-r-group/images/flags/64/BT.png new file mode 100644 index 0000000..da74719 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BW.png b/src/wp-content/themes/double-r-group/images/flags/64/BW.png new file mode 100644 index 0000000..7789fa6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BY.png b/src/wp-content/themes/double-r-group/images/flags/64/BY.png new file mode 100644 index 0000000..f5e8da7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/BZ.png b/src/wp-content/themes/double-r-group/images/flags/64/BZ.png new file mode 100644 index 0000000..c99c488 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/BZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CA.png b/src/wp-content/themes/double-r-group/images/flags/64/CA.png new file mode 100644 index 0000000..4c68c8c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CC.png b/src/wp-content/themes/double-r-group/images/flags/64/CC.png new file mode 100644 index 0000000..26b7bd2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CD.png b/src/wp-content/themes/double-r-group/images/flags/64/CD.png new file mode 100644 index 0000000..dbd5795 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CF.png b/src/wp-content/themes/double-r-group/images/flags/64/CF.png new file mode 100644 index 0000000..78cc880 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CG.png b/src/wp-content/themes/double-r-group/images/flags/64/CG.png new file mode 100644 index 0000000..6abb441 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CH.png b/src/wp-content/themes/double-r-group/images/flags/64/CH.png new file mode 100644 index 0000000..cb91083 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CI.png b/src/wp-content/themes/double-r-group/images/flags/64/CI.png new file mode 100644 index 0000000..e94f791 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CK.png b/src/wp-content/themes/double-r-group/images/flags/64/CK.png new file mode 100644 index 0000000..96dc4d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CL.png b/src/wp-content/themes/double-r-group/images/flags/64/CL.png new file mode 100644 index 0000000..2a9b342 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CM.png b/src/wp-content/themes/double-r-group/images/flags/64/CM.png new file mode 100644 index 0000000..b2355fb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CN.png b/src/wp-content/themes/double-r-group/images/flags/64/CN.png new file mode 100644 index 0000000..30496b0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CO.png b/src/wp-content/themes/double-r-group/images/flags/64/CO.png new file mode 100644 index 0000000..896af29 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CR.png b/src/wp-content/themes/double-r-group/images/flags/64/CR.png new file mode 100644 index 0000000..95206cf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CU.png b/src/wp-content/themes/double-r-group/images/flags/64/CU.png new file mode 100644 index 0000000..e51a780 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CV.png b/src/wp-content/themes/double-r-group/images/flags/64/CV.png new file mode 100644 index 0000000..39f0e63 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CW.png b/src/wp-content/themes/double-r-group/images/flags/64/CW.png new file mode 100644 index 0000000..7d2847c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CX.png b/src/wp-content/themes/double-r-group/images/flags/64/CX.png new file mode 100644 index 0000000..3fb679b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CY.png b/src/wp-content/themes/double-r-group/images/flags/64/CY.png new file mode 100644 index 0000000..dc5a119 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/CZ.png b/src/wp-content/themes/double-r-group/images/flags/64/CZ.png new file mode 100644 index 0000000..2616355 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/CZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/DE.png b/src/wp-content/themes/double-r-group/images/flags/64/DE.png new file mode 100644 index 0000000..b28cfd9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/DE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/DJ.png b/src/wp-content/themes/double-r-group/images/flags/64/DJ.png new file mode 100644 index 0000000..336cccd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/DJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/DK.png b/src/wp-content/themes/double-r-group/images/flags/64/DK.png new file mode 100644 index 0000000..ae650dd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/DK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/DM.png b/src/wp-content/themes/double-r-group/images/flags/64/DM.png new file mode 100644 index 0000000..55800b7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/DM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/DO.png b/src/wp-content/themes/double-r-group/images/flags/64/DO.png new file mode 100644 index 0000000..ebb32b6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/DO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/DZ.png b/src/wp-content/themes/double-r-group/images/flags/64/DZ.png new file mode 100644 index 0000000..241584f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/DZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/EC.png b/src/wp-content/themes/double-r-group/images/flags/64/EC.png new file mode 100644 index 0000000..c69d1a0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/EC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/EE.png b/src/wp-content/themes/double-r-group/images/flags/64/EE.png new file mode 100644 index 0000000..120ee25 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/EE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/EG.png b/src/wp-content/themes/double-r-group/images/flags/64/EG.png new file mode 100644 index 0000000..bd282eb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/EG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/EH.png b/src/wp-content/themes/double-r-group/images/flags/64/EH.png new file mode 100644 index 0000000..6461b34 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/EH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/ER.png b/src/wp-content/themes/double-r-group/images/flags/64/ER.png new file mode 100644 index 0000000..8bfc48c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/ER.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/ES.png b/src/wp-content/themes/double-r-group/images/flags/64/ES.png new file mode 100644 index 0000000..bef0a45 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/ES.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/ET.png b/src/wp-content/themes/double-r-group/images/flags/64/ET.png new file mode 100644 index 0000000..ec683e1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/ET.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/EU.png b/src/wp-content/themes/double-r-group/images/flags/64/EU.png new file mode 100644 index 0000000..fe942d4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/EU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/FI.png b/src/wp-content/themes/double-r-group/images/flags/64/FI.png new file mode 100644 index 0000000..3100021 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/FI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/FJ.png b/src/wp-content/themes/double-r-group/images/flags/64/FJ.png new file mode 100644 index 0000000..ff4ce5c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/FJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/FK.png b/src/wp-content/themes/double-r-group/images/flags/64/FK.png new file mode 100644 index 0000000..a0f1f06 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/FK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/FM.png b/src/wp-content/themes/double-r-group/images/flags/64/FM.png new file mode 100644 index 0000000..50f5504 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/FM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/FO.png b/src/wp-content/themes/double-r-group/images/flags/64/FO.png new file mode 100644 index 0000000..73a76d5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/FO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/FR.png b/src/wp-content/themes/double-r-group/images/flags/64/FR.png new file mode 100644 index 0000000..a2b2de6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/FR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GA.png b/src/wp-content/themes/double-r-group/images/flags/64/GA.png new file mode 100644 index 0000000..0525472 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GB.png b/src/wp-content/themes/double-r-group/images/flags/64/GB.png new file mode 100644 index 0000000..c029aa7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GD.png b/src/wp-content/themes/double-r-group/images/flags/64/GD.png new file mode 100644 index 0000000..5d4df8f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GE.png b/src/wp-content/themes/double-r-group/images/flags/64/GE.png new file mode 100644 index 0000000..b3a56a2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GG.png b/src/wp-content/themes/double-r-group/images/flags/64/GG.png new file mode 100644 index 0000000..f0e14b9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GH.png b/src/wp-content/themes/double-r-group/images/flags/64/GH.png new file mode 100644 index 0000000..9653c86 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GI.png b/src/wp-content/themes/double-r-group/images/flags/64/GI.png new file mode 100644 index 0000000..93eb1af Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GL.png b/src/wp-content/themes/double-r-group/images/flags/64/GL.png new file mode 100644 index 0000000..6f18ea0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GM.png b/src/wp-content/themes/double-r-group/images/flags/64/GM.png new file mode 100644 index 0000000..3b1027c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GN.png b/src/wp-content/themes/double-r-group/images/flags/64/GN.png new file mode 100644 index 0000000..65e0dfb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GQ.png b/src/wp-content/themes/double-r-group/images/flags/64/GQ.png new file mode 100644 index 0000000..8429dc9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GR.png b/src/wp-content/themes/double-r-group/images/flags/64/GR.png new file mode 100644 index 0000000..f64bd39 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GS.png b/src/wp-content/themes/double-r-group/images/flags/64/GS.png new file mode 100644 index 0000000..f877766 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GT.png b/src/wp-content/themes/double-r-group/images/flags/64/GT.png new file mode 100644 index 0000000..79848de Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GU.png b/src/wp-content/themes/double-r-group/images/flags/64/GU.png new file mode 100644 index 0000000..18e7086 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GW.png b/src/wp-content/themes/double-r-group/images/flags/64/GW.png new file mode 100644 index 0000000..d378f47 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/GY.png b/src/wp-content/themes/double-r-group/images/flags/64/GY.png new file mode 100644 index 0000000..f78e34c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/GY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/HK.png b/src/wp-content/themes/double-r-group/images/flags/64/HK.png new file mode 100644 index 0000000..9e86dee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/HK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/HN.png b/src/wp-content/themes/double-r-group/images/flags/64/HN.png new file mode 100644 index 0000000..669cd4d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/HN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/HR.png b/src/wp-content/themes/double-r-group/images/flags/64/HR.png new file mode 100644 index 0000000..d2dd0e3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/HR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/HT.png b/src/wp-content/themes/double-r-group/images/flags/64/HT.png new file mode 100644 index 0000000..3e0db8d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/HT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/HU.png b/src/wp-content/themes/double-r-group/images/flags/64/HU.png new file mode 100644 index 0000000..d115bc3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/HU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/IC.png b/src/wp-content/themes/double-r-group/images/flags/64/IC.png new file mode 100644 index 0000000..13057c3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/IC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/ID.png b/src/wp-content/themes/double-r-group/images/flags/64/ID.png new file mode 100644 index 0000000..f44ee9e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/ID.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/IE.png b/src/wp-content/themes/double-r-group/images/flags/64/IE.png new file mode 100644 index 0000000..f26d2a4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/IE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/IL.png b/src/wp-content/themes/double-r-group/images/flags/64/IL.png new file mode 100644 index 0000000..2e0443f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/IL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/IM.png b/src/wp-content/themes/double-r-group/images/flags/64/IM.png new file mode 100644 index 0000000..7b3508f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/IM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/IN.png b/src/wp-content/themes/double-r-group/images/flags/64/IN.png new file mode 100644 index 0000000..ee348e8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/IN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/IQ.png b/src/wp-content/themes/double-r-group/images/flags/64/IQ.png new file mode 100644 index 0000000..1c7191b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/IQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/IR.png b/src/wp-content/themes/double-r-group/images/flags/64/IR.png new file mode 100644 index 0000000..09daca1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/IR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/IS.png b/src/wp-content/themes/double-r-group/images/flags/64/IS.png new file mode 100644 index 0000000..3875477 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/IS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/IT.png b/src/wp-content/themes/double-r-group/images/flags/64/IT.png new file mode 100644 index 0000000..70d488f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/IT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/JE.png b/src/wp-content/themes/double-r-group/images/flags/64/JE.png new file mode 100644 index 0000000..e9bb2f8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/JE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/JM.png b/src/wp-content/themes/double-r-group/images/flags/64/JM.png new file mode 100644 index 0000000..490d3f6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/JM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/JO.png b/src/wp-content/themes/double-r-group/images/flags/64/JO.png new file mode 100644 index 0000000..94f959d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/JO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/JP.png b/src/wp-content/themes/double-r-group/images/flags/64/JP.png new file mode 100644 index 0000000..9907ce0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/JP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/KE.png b/src/wp-content/themes/double-r-group/images/flags/64/KE.png new file mode 100644 index 0000000..966feb9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/KE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/KG.png b/src/wp-content/themes/double-r-group/images/flags/64/KG.png new file mode 100644 index 0000000..7d7f930 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/KG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/KH.png b/src/wp-content/themes/double-r-group/images/flags/64/KH.png new file mode 100644 index 0000000..7cb4b23 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/KH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/KI.png b/src/wp-content/themes/double-r-group/images/flags/64/KI.png new file mode 100644 index 0000000..8e10c78 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/KI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/KM.png b/src/wp-content/themes/double-r-group/images/flags/64/KM.png new file mode 100644 index 0000000..7b0cb90 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/KM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/KN.png b/src/wp-content/themes/double-r-group/images/flags/64/KN.png new file mode 100644 index 0000000..7f558d7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/KN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/KP.png b/src/wp-content/themes/double-r-group/images/flags/64/KP.png new file mode 100644 index 0000000..58874f6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/KP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/KR.png b/src/wp-content/themes/double-r-group/images/flags/64/KR.png new file mode 100644 index 0000000..f3c12d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/KR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/KW.png b/src/wp-content/themes/double-r-group/images/flags/64/KW.png new file mode 100644 index 0000000..93ff3d9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/KW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/KY.png b/src/wp-content/themes/double-r-group/images/flags/64/KY.png new file mode 100644 index 0000000..83f2870 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/KY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/KZ.png b/src/wp-content/themes/double-r-group/images/flags/64/KZ.png new file mode 100644 index 0000000..37bda09 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/KZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/LA.png b/src/wp-content/themes/double-r-group/images/flags/64/LA.png new file mode 100644 index 0000000..bce6687 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/LA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/LB.png b/src/wp-content/themes/double-r-group/images/flags/64/LB.png new file mode 100644 index 0000000..5a18341 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/LB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/LC.png b/src/wp-content/themes/double-r-group/images/flags/64/LC.png new file mode 100644 index 0000000..e521ac8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/LC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/LI.png b/src/wp-content/themes/double-r-group/images/flags/64/LI.png new file mode 100644 index 0000000..a866dd0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/LI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/LK.png b/src/wp-content/themes/double-r-group/images/flags/64/LK.png new file mode 100644 index 0000000..a9fc5aa Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/LK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/LR.png b/src/wp-content/themes/double-r-group/images/flags/64/LR.png new file mode 100644 index 0000000..d264167 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/LR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/LS.png b/src/wp-content/themes/double-r-group/images/flags/64/LS.png new file mode 100644 index 0000000..39edfaa Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/LS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/LT.png b/src/wp-content/themes/double-r-group/images/flags/64/LT.png new file mode 100644 index 0000000..db17b65 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/LT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/LU.png b/src/wp-content/themes/double-r-group/images/flags/64/LU.png new file mode 100644 index 0000000..e87ddc7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/LU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/LV.png b/src/wp-content/themes/double-r-group/images/flags/64/LV.png new file mode 100644 index 0000000..8117906 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/LV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/LY.png b/src/wp-content/themes/double-r-group/images/flags/64/LY.png new file mode 100644 index 0000000..d3b605e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/LY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MA.png b/src/wp-content/themes/double-r-group/images/flags/64/MA.png new file mode 100644 index 0000000..6ef3c74 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MC.png b/src/wp-content/themes/double-r-group/images/flags/64/MC.png new file mode 100644 index 0000000..f44ee9e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MD.png b/src/wp-content/themes/double-r-group/images/flags/64/MD.png new file mode 100644 index 0000000..0a4af81 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/ME.png b/src/wp-content/themes/double-r-group/images/flags/64/ME.png new file mode 100644 index 0000000..f0c2644 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/ME.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MF.png b/src/wp-content/themes/double-r-group/images/flags/64/MF.png new file mode 100644 index 0000000..71d9fd1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MG.png b/src/wp-content/themes/double-r-group/images/flags/64/MG.png new file mode 100644 index 0000000..3418851 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MH.png b/src/wp-content/themes/double-r-group/images/flags/64/MH.png new file mode 100644 index 0000000..6687fc0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MK.png b/src/wp-content/themes/double-r-group/images/flags/64/MK.png new file mode 100644 index 0000000..eb30d9b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/ML.png b/src/wp-content/themes/double-r-group/images/flags/64/ML.png new file mode 100644 index 0000000..1457695 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/ML.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MM.png b/src/wp-content/themes/double-r-group/images/flags/64/MM.png new file mode 100644 index 0000000..a96807b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MN.png b/src/wp-content/themes/double-r-group/images/flags/64/MN.png new file mode 100644 index 0000000..d406fbb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MO.png b/src/wp-content/themes/double-r-group/images/flags/64/MO.png new file mode 100644 index 0000000..9379034 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MP.png b/src/wp-content/themes/double-r-group/images/flags/64/MP.png new file mode 100644 index 0000000..e8cbb1c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MQ.png b/src/wp-content/themes/double-r-group/images/flags/64/MQ.png new file mode 100644 index 0000000..79ddf76 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MQ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MR.png b/src/wp-content/themes/double-r-group/images/flags/64/MR.png new file mode 100644 index 0000000..4e32555 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MS.png b/src/wp-content/themes/double-r-group/images/flags/64/MS.png new file mode 100644 index 0000000..addb87f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MT.png b/src/wp-content/themes/double-r-group/images/flags/64/MT.png new file mode 100644 index 0000000..1b2b4f5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MU.png b/src/wp-content/themes/double-r-group/images/flags/64/MU.png new file mode 100644 index 0000000..9b2508b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MV.png b/src/wp-content/themes/double-r-group/images/flags/64/MV.png new file mode 100644 index 0000000..19581fc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MW.png b/src/wp-content/themes/double-r-group/images/flags/64/MW.png new file mode 100644 index 0000000..574baac Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MX.png b/src/wp-content/themes/double-r-group/images/flags/64/MX.png new file mode 100644 index 0000000..2b73aed Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MX.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MY.png b/src/wp-content/themes/double-r-group/images/flags/64/MY.png new file mode 100644 index 0000000..9280e98 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/MZ.png b/src/wp-content/themes/double-r-group/images/flags/64/MZ.png new file mode 100644 index 0000000..ef9646a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/MZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/NA.png b/src/wp-content/themes/double-r-group/images/flags/64/NA.png new file mode 100644 index 0000000..edcd8c5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/NA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/NC.png b/src/wp-content/themes/double-r-group/images/flags/64/NC.png new file mode 100644 index 0000000..db6b1ef Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/NC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/NE.png b/src/wp-content/themes/double-r-group/images/flags/64/NE.png new file mode 100644 index 0000000..6d192b4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/NE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/NF.png b/src/wp-content/themes/double-r-group/images/flags/64/NF.png new file mode 100644 index 0000000..1a356e4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/NF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/NG.png b/src/wp-content/themes/double-r-group/images/flags/64/NG.png new file mode 100644 index 0000000..600a978 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/NG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/NI.png b/src/wp-content/themes/double-r-group/images/flags/64/NI.png new file mode 100644 index 0000000..1fd2b4b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/NI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/NL.png b/src/wp-content/themes/double-r-group/images/flags/64/NL.png new file mode 100644 index 0000000..dbb2c2c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/NL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/NO.png b/src/wp-content/themes/double-r-group/images/flags/64/NO.png new file mode 100644 index 0000000..89b8c21 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/NO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/NP.png b/src/wp-content/themes/double-r-group/images/flags/64/NP.png new file mode 100644 index 0000000..763c216 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/NP.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/NR.png b/src/wp-content/themes/double-r-group/images/flags/64/NR.png new file mode 100644 index 0000000..1bb178e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/NR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/NU.png b/src/wp-content/themes/double-r-group/images/flags/64/NU.png new file mode 100644 index 0000000..c92483f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/NU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/NZ.png b/src/wp-content/themes/double-r-group/images/flags/64/NZ.png new file mode 100644 index 0000000..0bdf72f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/NZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/OM.png b/src/wp-content/themes/double-r-group/images/flags/64/OM.png new file mode 100644 index 0000000..8f9a173 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/OM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PA.png b/src/wp-content/themes/double-r-group/images/flags/64/PA.png new file mode 100644 index 0000000..830eaa0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PE.png b/src/wp-content/themes/double-r-group/images/flags/64/PE.png new file mode 100644 index 0000000..b8df431 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PF.png b/src/wp-content/themes/double-r-group/images/flags/64/PF.png new file mode 100644 index 0000000..df5883e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PG.png b/src/wp-content/themes/double-r-group/images/flags/64/PG.png new file mode 100644 index 0000000..c9e18c3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PH.png b/src/wp-content/themes/double-r-group/images/flags/64/PH.png new file mode 100644 index 0000000..d4212b9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PK.png b/src/wp-content/themes/double-r-group/images/flags/64/PK.png new file mode 100644 index 0000000..ad9e59d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PL.png b/src/wp-content/themes/double-r-group/images/flags/64/PL.png new file mode 100644 index 0000000..99a2c7b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PN.png b/src/wp-content/themes/double-r-group/images/flags/64/PN.png new file mode 100644 index 0000000..fe73283 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PR.png b/src/wp-content/themes/double-r-group/images/flags/64/PR.png new file mode 100644 index 0000000..e2c9342 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PS.png b/src/wp-content/themes/double-r-group/images/flags/64/PS.png new file mode 100644 index 0000000..8098092 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PT.png b/src/wp-content/themes/double-r-group/images/flags/64/PT.png new file mode 100644 index 0000000..ff40fe1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PW.png b/src/wp-content/themes/double-r-group/images/flags/64/PW.png new file mode 100644 index 0000000..56c11cd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/PY.png b/src/wp-content/themes/double-r-group/images/flags/64/PY.png new file mode 100644 index 0000000..097f9e2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/PY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/QA.png b/src/wp-content/themes/double-r-group/images/flags/64/QA.png new file mode 100644 index 0000000..2bef4ad Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/QA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/RO.png b/src/wp-content/themes/double-r-group/images/flags/64/RO.png new file mode 100644 index 0000000..5665f06 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/RO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/RS.png b/src/wp-content/themes/double-r-group/images/flags/64/RS.png new file mode 100644 index 0000000..0b08c77 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/RS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/RU.png b/src/wp-content/themes/double-r-group/images/flags/64/RU.png new file mode 100644 index 0000000..69f32bb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/RU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/RW.png b/src/wp-content/themes/double-r-group/images/flags/64/RW.png new file mode 100644 index 0000000..e5e181c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/RW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SA.png b/src/wp-content/themes/double-r-group/images/flags/64/SA.png new file mode 100644 index 0000000..8ea7226 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SB.png b/src/wp-content/themes/double-r-group/images/flags/64/SB.png new file mode 100644 index 0000000..97a55d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SB.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SC.png b/src/wp-content/themes/double-r-group/images/flags/64/SC.png new file mode 100644 index 0000000..b07a589 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SD.png b/src/wp-content/themes/double-r-group/images/flags/64/SD.png new file mode 100644 index 0000000..2a0a134 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SE.png b/src/wp-content/themes/double-r-group/images/flags/64/SE.png new file mode 100644 index 0000000..c943557 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SG.png b/src/wp-content/themes/double-r-group/images/flags/64/SG.png new file mode 100644 index 0000000..37e9609 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SH.png b/src/wp-content/themes/double-r-group/images/flags/64/SH.png new file mode 100644 index 0000000..4d5b2b5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SI.png b/src/wp-content/themes/double-r-group/images/flags/64/SI.png new file mode 100644 index 0000000..9d1330c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SK.png b/src/wp-content/themes/double-r-group/images/flags/64/SK.png new file mode 100644 index 0000000..6264388 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SL.png b/src/wp-content/themes/double-r-group/images/flags/64/SL.png new file mode 100644 index 0000000..684be94 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SM.png b/src/wp-content/themes/double-r-group/images/flags/64/SM.png new file mode 100644 index 0000000..a34392d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SN.png b/src/wp-content/themes/double-r-group/images/flags/64/SN.png new file mode 100644 index 0000000..616967c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SO.png b/src/wp-content/themes/double-r-group/images/flags/64/SO.png new file mode 100644 index 0000000..462b1d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SR.png b/src/wp-content/themes/double-r-group/images/flags/64/SR.png new file mode 100644 index 0000000..68953b8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SS.png b/src/wp-content/themes/double-r-group/images/flags/64/SS.png new file mode 100644 index 0000000..cef26fe Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/ST.png b/src/wp-content/themes/double-r-group/images/flags/64/ST.png new file mode 100644 index 0000000..307dae7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/ST.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SV.png b/src/wp-content/themes/double-r-group/images/flags/64/SV.png new file mode 100644 index 0000000..7b4598c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SY.png b/src/wp-content/themes/double-r-group/images/flags/64/SY.png new file mode 100644 index 0000000..2ff9f7b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/SZ.png b/src/wp-content/themes/double-r-group/images/flags/64/SZ.png new file mode 100644 index 0000000..ac61b26 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/SZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TC.png b/src/wp-content/themes/double-r-group/images/flags/64/TC.png new file mode 100644 index 0000000..f668ad2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TD.png b/src/wp-content/themes/double-r-group/images/flags/64/TD.png new file mode 100644 index 0000000..9f9581d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TD.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TF.png b/src/wp-content/themes/double-r-group/images/flags/64/TF.png new file mode 100644 index 0000000..5990d4a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TG.png b/src/wp-content/themes/double-r-group/images/flags/64/TG.png new file mode 100644 index 0000000..cd1b4b4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TH.png b/src/wp-content/themes/double-r-group/images/flags/64/TH.png new file mode 100644 index 0000000..cb98c4f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TH.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TJ.png b/src/wp-content/themes/double-r-group/images/flags/64/TJ.png new file mode 100644 index 0000000..b64cb3c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TJ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TK.png b/src/wp-content/themes/double-r-group/images/flags/64/TK.png new file mode 100644 index 0000000..8622cbb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TK.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TL.png b/src/wp-content/themes/double-r-group/images/flags/64/TL.png new file mode 100644 index 0000000..7bd71ce Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TL.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TM.png b/src/wp-content/themes/double-r-group/images/flags/64/TM.png new file mode 100644 index 0000000..ff0a6fb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TN.png b/src/wp-content/themes/double-r-group/images/flags/64/TN.png new file mode 100644 index 0000000..a9d4d16 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TO.png b/src/wp-content/themes/double-r-group/images/flags/64/TO.png new file mode 100644 index 0000000..4529f17 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TO.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TR.png b/src/wp-content/themes/double-r-group/images/flags/64/TR.png new file mode 100644 index 0000000..640e7e8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TR.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TT.png b/src/wp-content/themes/double-r-group/images/flags/64/TT.png new file mode 100644 index 0000000..08ca8a0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TV.png b/src/wp-content/themes/double-r-group/images/flags/64/TV.png new file mode 100644 index 0000000..8937d42 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TV.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TW.png b/src/wp-content/themes/double-r-group/images/flags/64/TW.png new file mode 100644 index 0000000..98bb9fb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/TZ.png b/src/wp-content/themes/double-r-group/images/flags/64/TZ.png new file mode 100644 index 0000000..2766dd5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/TZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/UA.png b/src/wp-content/themes/double-r-group/images/flags/64/UA.png new file mode 100644 index 0000000..143d7db Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/UA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/UG.png b/src/wp-content/themes/double-r-group/images/flags/64/UG.png new file mode 100644 index 0000000..cffccb6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/UG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/US.png b/src/wp-content/themes/double-r-group/images/flags/64/US.png new file mode 100644 index 0000000..c75043c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/US.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/UY.png b/src/wp-content/themes/double-r-group/images/flags/64/UY.png new file mode 100644 index 0000000..01b67b0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/UY.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/UZ.png b/src/wp-content/themes/double-r-group/images/flags/64/UZ.png new file mode 100644 index 0000000..3d7cfee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/UZ.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/VA.png b/src/wp-content/themes/double-r-group/images/flags/64/VA.png new file mode 100644 index 0000000..f8f7bf7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/VA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/VC.png b/src/wp-content/themes/double-r-group/images/flags/64/VC.png new file mode 100644 index 0000000..73de64f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/VC.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/VE.png b/src/wp-content/themes/double-r-group/images/flags/64/VE.png new file mode 100644 index 0000000..da42902 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/VE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/VG.png b/src/wp-content/themes/double-r-group/images/flags/64/VG.png new file mode 100644 index 0000000..fa997e0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/VG.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/VI.png b/src/wp-content/themes/double-r-group/images/flags/64/VI.png new file mode 100644 index 0000000..558b1ad Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/VI.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/VN.png b/src/wp-content/themes/double-r-group/images/flags/64/VN.png new file mode 100644 index 0000000..454cf42 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/VN.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/VU.png b/src/wp-content/themes/double-r-group/images/flags/64/VU.png new file mode 100644 index 0000000..49889e2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/VU.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/WF.png b/src/wp-content/themes/double-r-group/images/flags/64/WF.png new file mode 100644 index 0000000..e5806b9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/WF.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/WS.png b/src/wp-content/themes/double-r-group/images/flags/64/WS.png new file mode 100644 index 0000000..3d7900b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/WS.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/YE.png b/src/wp-content/themes/double-r-group/images/flags/64/YE.png new file mode 100644 index 0000000..73dd33d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/YE.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/YT.png b/src/wp-content/themes/double-r-group/images/flags/64/YT.png new file mode 100644 index 0000000..af947fd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/YT.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/ZA.png b/src/wp-content/themes/double-r-group/images/flags/64/ZA.png new file mode 100644 index 0000000..6fffc66 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/ZA.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/ZM.png b/src/wp-content/themes/double-r-group/images/flags/64/ZM.png new file mode 100644 index 0000000..6208724 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/ZM.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/ZW.png b/src/wp-content/themes/double-r-group/images/flags/64/ZW.png new file mode 100644 index 0000000..baa8851 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/ZW.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_abkhazia.png b/src/wp-content/themes/double-r-group/images/flags/64/_abkhazia.png new file mode 100644 index 0000000..fea70f5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_abkhazia.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_basque-country.png b/src/wp-content/themes/double-r-group/images/flags/64/_basque-country.png new file mode 100644 index 0000000..6a695b2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_basque-country.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_british-antarctic-territory.png b/src/wp-content/themes/double-r-group/images/flags/64/_british-antarctic-territory.png new file mode 100644 index 0000000..50fa45d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_british-antarctic-territory.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_commonwealth.png b/src/wp-content/themes/double-r-group/images/flags/64/_commonwealth.png new file mode 100644 index 0000000..6aba76c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_commonwealth.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_england.png b/src/wp-content/themes/double-r-group/images/flags/64/_england.png new file mode 100644 index 0000000..a21e16c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_england.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_gosquared.png b/src/wp-content/themes/double-r-group/images/flags/64/_gosquared.png new file mode 100644 index 0000000..17895f1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_gosquared.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_kosovo.png b/src/wp-content/themes/double-r-group/images/flags/64/_kosovo.png new file mode 100644 index 0000000..43660fd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_kosovo.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_mars.png b/src/wp-content/themes/double-r-group/images/flags/64/_mars.png new file mode 100644 index 0000000..3d6587c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_mars.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_nagorno-karabakh.png b/src/wp-content/themes/double-r-group/images/flags/64/_nagorno-karabakh.png new file mode 100644 index 0000000..a2f67d4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_nagorno-karabakh.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_nato.png b/src/wp-content/themes/double-r-group/images/flags/64/_nato.png new file mode 100644 index 0000000..81b720b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_nato.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_northern-cyprus.png b/src/wp-content/themes/double-r-group/images/flags/64/_northern-cyprus.png new file mode 100644 index 0000000..589b62a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_northern-cyprus.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_olympics.png b/src/wp-content/themes/double-r-group/images/flags/64/_olympics.png new file mode 100644 index 0000000..25c9fc0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_olympics.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_red-cross.png b/src/wp-content/themes/double-r-group/images/flags/64/_red-cross.png new file mode 100644 index 0000000..f824705 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_red-cross.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_scotland.png b/src/wp-content/themes/double-r-group/images/flags/64/_scotland.png new file mode 100644 index 0000000..925ddca Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_scotland.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_somaliland.png b/src/wp-content/themes/double-r-group/images/flags/64/_somaliland.png new file mode 100644 index 0000000..299383d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_somaliland.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_south-ossetia.png b/src/wp-content/themes/double-r-group/images/flags/64/_south-ossetia.png new file mode 100644 index 0000000..eb301e2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_south-ossetia.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_united-nations.png b/src/wp-content/themes/double-r-group/images/flags/64/_united-nations.png new file mode 100644 index 0000000..4fe1bfe Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_united-nations.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_unknown.png b/src/wp-content/themes/double-r-group/images/flags/64/_unknown.png new file mode 100644 index 0000000..d26ae5e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_unknown.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/64/_wales.png b/src/wp-content/themes/double-r-group/images/flags/64/_wales.png new file mode 100644 index 0000000..ba86125 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/64/_wales.png differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AD.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AD.icns new file mode 100644 index 0000000..e872060 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AD.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AE.icns new file mode 100644 index 0000000..2f07f3f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AF.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AF.icns new file mode 100644 index 0000000..5681b16 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AF.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AG.icns new file mode 100644 index 0000000..8ea6a42 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AI.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AI.icns new file mode 100644 index 0000000..b749858 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AI.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AL.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AL.icns new file mode 100644 index 0000000..f46e018 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AL.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AM.icns new file mode 100644 index 0000000..960632f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AN.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AN.icns new file mode 100644 index 0000000..6965e12 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AN.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AO.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AO.icns new file mode 100644 index 0000000..335768d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AO.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AQ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AQ.icns new file mode 100644 index 0000000..55e6f52 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AQ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AR.icns new file mode 100644 index 0000000..1ecf6bc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AS.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AS.icns new file mode 100644 index 0000000..808a71e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AS.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AT.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AT.icns new file mode 100644 index 0000000..4873c90 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AT.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AU.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AU.icns new file mode 100644 index 0000000..2ebd4d0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AU.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AW.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AW.icns new file mode 100644 index 0000000..cf34643 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AW.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AX.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AX.icns new file mode 100644 index 0000000..e9521e0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AX.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/AZ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/AZ.icns new file mode 100644 index 0000000..96468e0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/AZ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BA.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BA.icns new file mode 100644 index 0000000..5b91cb6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BA.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BB.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BB.icns new file mode 100644 index 0000000..f137a75 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BB.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BD.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BD.icns new file mode 100644 index 0000000..ebb6fe6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BD.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BE.icns new file mode 100644 index 0000000..4ae81c4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BF.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BF.icns new file mode 100644 index 0000000..45b9ba3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BF.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BG.icns new file mode 100644 index 0000000..0647bd0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BH.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BH.icns new file mode 100644 index 0000000..6340873 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BH.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BI.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BI.icns new file mode 100644 index 0000000..8e1c902 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BI.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BJ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BJ.icns new file mode 100644 index 0000000..e260f0b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BJ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BL.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BL.icns new file mode 100644 index 0000000..73780f9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BL.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BM.icns new file mode 100644 index 0000000..c21c322 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BN.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BN.icns new file mode 100644 index 0000000..bd3cdc0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BN.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BO.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BO.icns new file mode 100644 index 0000000..9877af0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BO.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BR.icns new file mode 100644 index 0000000..3c97992 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BS.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BS.icns new file mode 100644 index 0000000..d499ed5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BS.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BT.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BT.icns new file mode 100644 index 0000000..b19d5ee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BT.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BW.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BW.icns new file mode 100644 index 0000000..c22ce7a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BW.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BY.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BY.icns new file mode 100644 index 0000000..dc650ff Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BY.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/BZ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/BZ.icns new file mode 100644 index 0000000..403ab0c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/BZ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CA.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CA.icns new file mode 100644 index 0000000..73bcf29 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CA.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CC.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CC.icns new file mode 100644 index 0000000..46e21a6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CC.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CD.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CD.icns new file mode 100644 index 0000000..84e1863 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CD.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CF.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CF.icns new file mode 100644 index 0000000..6c75b22 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CF.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CG.icns new file mode 100644 index 0000000..b69c19a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CH.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CH.icns new file mode 100644 index 0000000..d05a9dd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CH.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CI.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CI.icns new file mode 100644 index 0000000..b4c5c32 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CI.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CK.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CK.icns new file mode 100644 index 0000000..4a3bb6c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CK.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CL.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CL.icns new file mode 100644 index 0000000..9d12f7e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CL.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CM.icns new file mode 100644 index 0000000..4af902a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CN.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CN.icns new file mode 100644 index 0000000..02c661a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CN.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CO.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CO.icns new file mode 100644 index 0000000..e77ec9d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CO.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CR.icns new file mode 100644 index 0000000..2839d4e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CU.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CU.icns new file mode 100644 index 0000000..bdb4368 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CU.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CV.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CV.icns new file mode 100644 index 0000000..10dc17a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CV.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CW.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CW.icns new file mode 100644 index 0000000..280cff0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CW.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CX.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CX.icns new file mode 100644 index 0000000..5dac757 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CX.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CY.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CY.icns new file mode 100644 index 0000000..f0e400e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CY.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/CZ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/CZ.icns new file mode 100644 index 0000000..92808d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/CZ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/DE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/DE.icns new file mode 100644 index 0000000..6cecc75 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/DE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/DJ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/DJ.icns new file mode 100644 index 0000000..6d139c0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/DJ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/DK.icns b/src/wp-content/themes/double-r-group/images/flags/icns/DK.icns new file mode 100644 index 0000000..792266c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/DK.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/DM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/DM.icns new file mode 100644 index 0000000..e813ca1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/DM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/DO.icns b/src/wp-content/themes/double-r-group/images/flags/icns/DO.icns new file mode 100644 index 0000000..ea7a1e5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/DO.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/DZ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/DZ.icns new file mode 100644 index 0000000..c3ac1d9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/DZ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/EC.icns b/src/wp-content/themes/double-r-group/images/flags/icns/EC.icns new file mode 100644 index 0000000..2ad82b2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/EC.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/EE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/EE.icns new file mode 100644 index 0000000..2d8458f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/EE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/EG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/EG.icns new file mode 100644 index 0000000..389f4d9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/EG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/EH.icns b/src/wp-content/themes/double-r-group/images/flags/icns/EH.icns new file mode 100644 index 0000000..044d756 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/EH.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/ER.icns b/src/wp-content/themes/double-r-group/images/flags/icns/ER.icns new file mode 100644 index 0000000..1b4a968 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/ER.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/ES.icns b/src/wp-content/themes/double-r-group/images/flags/icns/ES.icns new file mode 100644 index 0000000..07f15b8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/ES.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/ET.icns b/src/wp-content/themes/double-r-group/images/flags/icns/ET.icns new file mode 100644 index 0000000..213b740 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/ET.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/EU.icns b/src/wp-content/themes/double-r-group/images/flags/icns/EU.icns new file mode 100644 index 0000000..ba193fa Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/EU.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/FI.icns b/src/wp-content/themes/double-r-group/images/flags/icns/FI.icns new file mode 100644 index 0000000..31e6658 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/FI.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/FJ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/FJ.icns new file mode 100644 index 0000000..ba3a78e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/FJ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/FK.icns b/src/wp-content/themes/double-r-group/images/flags/icns/FK.icns new file mode 100644 index 0000000..ff1ea16 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/FK.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/FM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/FM.icns new file mode 100644 index 0000000..71f0ac6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/FM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/FO.icns b/src/wp-content/themes/double-r-group/images/flags/icns/FO.icns new file mode 100644 index 0000000..942c727 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/FO.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/FR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/FR.icns new file mode 100644 index 0000000..ce10625 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/FR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GA.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GA.icns new file mode 100644 index 0000000..a16d073 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GA.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GB.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GB.icns new file mode 100644 index 0000000..1b993e3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GB.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GD.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GD.icns new file mode 100644 index 0000000..b7ce9e9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GD.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GE.icns new file mode 100644 index 0000000..a90715d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GG.icns new file mode 100644 index 0000000..4bbb78e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GH.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GH.icns new file mode 100644 index 0000000..f09acb1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GH.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GI.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GI.icns new file mode 100644 index 0000000..8356a48 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GI.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GL.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GL.icns new file mode 100644 index 0000000..9480c37 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GL.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GM.icns new file mode 100644 index 0000000..cc47114 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GN.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GN.icns new file mode 100644 index 0000000..6c34616 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GN.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GQ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GQ.icns new file mode 100644 index 0000000..ab903a3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GQ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GR.icns new file mode 100644 index 0000000..69c9a53 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GS.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GS.icns new file mode 100644 index 0000000..60a4d58 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GS.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GT.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GT.icns new file mode 100644 index 0000000..6caba8f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GT.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GU.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GU.icns new file mode 100644 index 0000000..30fedb8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GU.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GW.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GW.icns new file mode 100644 index 0000000..747ddc5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GW.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/GY.icns b/src/wp-content/themes/double-r-group/images/flags/icns/GY.icns new file mode 100644 index 0000000..345695a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/GY.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/HK.icns b/src/wp-content/themes/double-r-group/images/flags/icns/HK.icns new file mode 100644 index 0000000..2c0d92d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/HK.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/HN.icns b/src/wp-content/themes/double-r-group/images/flags/icns/HN.icns new file mode 100644 index 0000000..08a93e9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/HN.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/HR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/HR.icns new file mode 100644 index 0000000..c6dccc9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/HR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/HT.icns b/src/wp-content/themes/double-r-group/images/flags/icns/HT.icns new file mode 100644 index 0000000..aa67664 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/HT.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/HU.icns b/src/wp-content/themes/double-r-group/images/flags/icns/HU.icns new file mode 100644 index 0000000..59fce06 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/HU.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/IC.icns b/src/wp-content/themes/double-r-group/images/flags/icns/IC.icns new file mode 100644 index 0000000..f61f43e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/IC.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/ID.icns b/src/wp-content/themes/double-r-group/images/flags/icns/ID.icns new file mode 100644 index 0000000..800113d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/ID.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/IE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/IE.icns new file mode 100644 index 0000000..3fc88a3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/IE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/IL.icns b/src/wp-content/themes/double-r-group/images/flags/icns/IL.icns new file mode 100644 index 0000000..ddc09b8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/IL.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/IM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/IM.icns new file mode 100644 index 0000000..3cc499c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/IM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/IN.icns b/src/wp-content/themes/double-r-group/images/flags/icns/IN.icns new file mode 100644 index 0000000..38ccb4f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/IN.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/IQ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/IQ.icns new file mode 100644 index 0000000..4ac722c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/IQ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/IR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/IR.icns new file mode 100644 index 0000000..337df75 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/IR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/IS.icns b/src/wp-content/themes/double-r-group/images/flags/icns/IS.icns new file mode 100644 index 0000000..48f12fc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/IS.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/IT.icns b/src/wp-content/themes/double-r-group/images/flags/icns/IT.icns new file mode 100644 index 0000000..8ae1a70 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/IT.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/JE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/JE.icns new file mode 100644 index 0000000..a77d713 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/JE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/JM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/JM.icns new file mode 100644 index 0000000..285ca0f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/JM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/JO.icns b/src/wp-content/themes/double-r-group/images/flags/icns/JO.icns new file mode 100644 index 0000000..3671da4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/JO.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/JP.icns b/src/wp-content/themes/double-r-group/images/flags/icns/JP.icns new file mode 100644 index 0000000..be8ba9c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/JP.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/KE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/KE.icns new file mode 100644 index 0000000..5b4a9ec Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/KE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/KG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/KG.icns new file mode 100644 index 0000000..0f6819d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/KG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/KH.icns b/src/wp-content/themes/double-r-group/images/flags/icns/KH.icns new file mode 100644 index 0000000..f57e558 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/KH.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/KI.icns b/src/wp-content/themes/double-r-group/images/flags/icns/KI.icns new file mode 100644 index 0000000..6a27cda Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/KI.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/KM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/KM.icns new file mode 100644 index 0000000..ef79d25 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/KM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/KN.icns b/src/wp-content/themes/double-r-group/images/flags/icns/KN.icns new file mode 100644 index 0000000..e1315b4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/KN.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/KP.icns b/src/wp-content/themes/double-r-group/images/flags/icns/KP.icns new file mode 100644 index 0000000..b058f10 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/KP.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/KR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/KR.icns new file mode 100644 index 0000000..90d83da Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/KR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/KW.icns b/src/wp-content/themes/double-r-group/images/flags/icns/KW.icns new file mode 100644 index 0000000..b836aeb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/KW.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/KY.icns b/src/wp-content/themes/double-r-group/images/flags/icns/KY.icns new file mode 100644 index 0000000..92c60e9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/KY.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/KZ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/KZ.icns new file mode 100644 index 0000000..1166a89 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/KZ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/LA.icns b/src/wp-content/themes/double-r-group/images/flags/icns/LA.icns new file mode 100644 index 0000000..feef83e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/LA.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/LB.icns b/src/wp-content/themes/double-r-group/images/flags/icns/LB.icns new file mode 100644 index 0000000..52cad55 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/LB.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/LC.icns b/src/wp-content/themes/double-r-group/images/flags/icns/LC.icns new file mode 100644 index 0000000..bd6c56d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/LC.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/LI.icns b/src/wp-content/themes/double-r-group/images/flags/icns/LI.icns new file mode 100644 index 0000000..fa4098d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/LI.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/LK.icns b/src/wp-content/themes/double-r-group/images/flags/icns/LK.icns new file mode 100644 index 0000000..a528f7e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/LK.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/LR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/LR.icns new file mode 100644 index 0000000..4e86184 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/LR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/LS.icns b/src/wp-content/themes/double-r-group/images/flags/icns/LS.icns new file mode 100644 index 0000000..951a3bf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/LS.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/LT.icns b/src/wp-content/themes/double-r-group/images/flags/icns/LT.icns new file mode 100644 index 0000000..54dccf9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/LT.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/LU.icns b/src/wp-content/themes/double-r-group/images/flags/icns/LU.icns new file mode 100644 index 0000000..745aab0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/LU.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/LV.icns b/src/wp-content/themes/double-r-group/images/flags/icns/LV.icns new file mode 100644 index 0000000..d83a40d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/LV.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/LY.icns b/src/wp-content/themes/double-r-group/images/flags/icns/LY.icns new file mode 100644 index 0000000..668e699 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/LY.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MA.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MA.icns new file mode 100644 index 0000000..e09ce32 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MA.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MC.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MC.icns new file mode 100644 index 0000000..800113d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MC.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MD.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MD.icns new file mode 100644 index 0000000..5faf0bd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MD.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/ME.icns b/src/wp-content/themes/double-r-group/images/flags/icns/ME.icns new file mode 100644 index 0000000..ac9df89 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/ME.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MF.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MF.icns new file mode 100644 index 0000000..47f8137 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MF.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MG.icns new file mode 100644 index 0000000..3110015 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MH.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MH.icns new file mode 100644 index 0000000..31904fd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MH.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MK.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MK.icns new file mode 100644 index 0000000..b9c136e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MK.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/ML.icns b/src/wp-content/themes/double-r-group/images/flags/icns/ML.icns new file mode 100644 index 0000000..cde7db4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/ML.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MM.icns new file mode 100644 index 0000000..55927de Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MN.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MN.icns new file mode 100644 index 0000000..96f9d54 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MN.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MO.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MO.icns new file mode 100644 index 0000000..63c85b8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MO.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MP.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MP.icns new file mode 100644 index 0000000..6db325b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MP.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MQ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MQ.icns new file mode 100644 index 0000000..03d90fd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MQ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MR.icns new file mode 100644 index 0000000..f51c616 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MS.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MS.icns new file mode 100644 index 0000000..64ac50f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MS.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MT.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MT.icns new file mode 100644 index 0000000..7f74d79 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MT.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MU.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MU.icns new file mode 100644 index 0000000..d4b11ff Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MU.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MV.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MV.icns new file mode 100644 index 0000000..03424a6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MV.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MW.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MW.icns new file mode 100644 index 0000000..7004409 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MW.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MX.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MX.icns new file mode 100644 index 0000000..3cfb6fe Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MX.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MY.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MY.icns new file mode 100644 index 0000000..6b64945 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MY.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/MZ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/MZ.icns new file mode 100644 index 0000000..3232e43 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/MZ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/NA.icns b/src/wp-content/themes/double-r-group/images/flags/icns/NA.icns new file mode 100644 index 0000000..afa823d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/NA.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/NC.icns b/src/wp-content/themes/double-r-group/images/flags/icns/NC.icns new file mode 100644 index 0000000..4889234 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/NC.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/NE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/NE.icns new file mode 100644 index 0000000..16822f3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/NE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/NF.icns b/src/wp-content/themes/double-r-group/images/flags/icns/NF.icns new file mode 100644 index 0000000..d67493b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/NF.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/NG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/NG.icns new file mode 100644 index 0000000..281e502 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/NG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/NI.icns b/src/wp-content/themes/double-r-group/images/flags/icns/NI.icns new file mode 100644 index 0000000..9d3b5e9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/NI.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/NL.icns b/src/wp-content/themes/double-r-group/images/flags/icns/NL.icns new file mode 100644 index 0000000..f8eac3e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/NL.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/NO.icns b/src/wp-content/themes/double-r-group/images/flags/icns/NO.icns new file mode 100644 index 0000000..21c5740 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/NO.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/NP.icns b/src/wp-content/themes/double-r-group/images/flags/icns/NP.icns new file mode 100644 index 0000000..318563d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/NP.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/NR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/NR.icns new file mode 100644 index 0000000..16a65ba Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/NR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/NU.icns b/src/wp-content/themes/double-r-group/images/flags/icns/NU.icns new file mode 100644 index 0000000..b468e09 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/NU.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/NZ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/NZ.icns new file mode 100644 index 0000000..c53490a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/NZ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/OM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/OM.icns new file mode 100644 index 0000000..abe7ff1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/OM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PA.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PA.icns new file mode 100644 index 0000000..6e7e0b6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PA.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PE.icns new file mode 100644 index 0000000..e496a67 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PF.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PF.icns new file mode 100644 index 0000000..487e0c5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PF.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PG.icns new file mode 100644 index 0000000..c518533 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PH.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PH.icns new file mode 100644 index 0000000..69d44e7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PH.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PK.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PK.icns new file mode 100644 index 0000000..ff6efcd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PK.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PL.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PL.icns new file mode 100644 index 0000000..13f49ca Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PL.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PN.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PN.icns new file mode 100644 index 0000000..f9108d9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PN.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PR.icns new file mode 100644 index 0000000..6a74f48 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PS.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PS.icns new file mode 100644 index 0000000..ab85a04 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PS.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PT.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PT.icns new file mode 100644 index 0000000..507a0bf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PT.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PW.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PW.icns new file mode 100644 index 0000000..a15d64d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PW.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/PY.icns b/src/wp-content/themes/double-r-group/images/flags/icns/PY.icns new file mode 100644 index 0000000..d6e75b7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/PY.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/QA.icns b/src/wp-content/themes/double-r-group/images/flags/icns/QA.icns new file mode 100644 index 0000000..49eb775 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/QA.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/RO.icns b/src/wp-content/themes/double-r-group/images/flags/icns/RO.icns new file mode 100644 index 0000000..2cc4bca Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/RO.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/RS.icns b/src/wp-content/themes/double-r-group/images/flags/icns/RS.icns new file mode 100644 index 0000000..0948942 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/RS.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/RU.icns b/src/wp-content/themes/double-r-group/images/flags/icns/RU.icns new file mode 100644 index 0000000..e858b95 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/RU.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/RW.icns b/src/wp-content/themes/double-r-group/images/flags/icns/RW.icns new file mode 100644 index 0000000..516a30e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/RW.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SA.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SA.icns new file mode 100644 index 0000000..e34b5d2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SA.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SB.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SB.icns new file mode 100644 index 0000000..263a39c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SB.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SC.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SC.icns new file mode 100644 index 0000000..5fb2a8d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SC.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SD.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SD.icns new file mode 100644 index 0000000..e636519 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SD.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SE.icns new file mode 100644 index 0000000..aa112b9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SG.icns new file mode 100644 index 0000000..2da77ff Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SH.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SH.icns new file mode 100644 index 0000000..2033ce3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SH.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SI.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SI.icns new file mode 100644 index 0000000..f44e121 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SI.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SK.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SK.icns new file mode 100644 index 0000000..73059b3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SK.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SL.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SL.icns new file mode 100644 index 0000000..c62104d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SL.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SM.icns new file mode 100644 index 0000000..1c88251 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SN.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SN.icns new file mode 100644 index 0000000..6b07fea Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SN.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SO.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SO.icns new file mode 100644 index 0000000..0559a51 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SO.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SR.icns new file mode 100644 index 0000000..3175d23 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SS.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SS.icns new file mode 100644 index 0000000..f0f4fda Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SS.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/ST.icns b/src/wp-content/themes/double-r-group/images/flags/icns/ST.icns new file mode 100644 index 0000000..1c665ec Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/ST.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SV.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SV.icns new file mode 100644 index 0000000..feba3c8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SV.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SY.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SY.icns new file mode 100644 index 0000000..fb78de2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SY.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/SZ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/SZ.icns new file mode 100644 index 0000000..f50d34d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/SZ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TC.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TC.icns new file mode 100644 index 0000000..6fe7895 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TC.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TD.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TD.icns new file mode 100644 index 0000000..ba60528 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TD.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TF.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TF.icns new file mode 100644 index 0000000..739a1ad Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TF.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TG.icns new file mode 100644 index 0000000..b6e38af Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TH.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TH.icns new file mode 100644 index 0000000..8e4f1ff Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TH.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TJ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TJ.icns new file mode 100644 index 0000000..81bc46b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TJ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TK.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TK.icns new file mode 100644 index 0000000..af2598d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TK.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TL.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TL.icns new file mode 100644 index 0000000..abc1a4a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TL.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TM.icns new file mode 100644 index 0000000..d0e495c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TN.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TN.icns new file mode 100644 index 0000000..80dd226 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TN.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TO.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TO.icns new file mode 100644 index 0000000..a71414c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TO.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TR.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TR.icns new file mode 100644 index 0000000..1d0c254 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TR.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TT.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TT.icns new file mode 100644 index 0000000..57a8425 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TT.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TV.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TV.icns new file mode 100644 index 0000000..30c016e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TV.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TW.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TW.icns new file mode 100644 index 0000000..76a0959 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TW.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/TZ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/TZ.icns new file mode 100644 index 0000000..b6adfe0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/TZ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/UA.icns b/src/wp-content/themes/double-r-group/images/flags/icns/UA.icns new file mode 100644 index 0000000..ec51fcf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/UA.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/UG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/UG.icns new file mode 100644 index 0000000..7a9d8d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/UG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/US.icns b/src/wp-content/themes/double-r-group/images/flags/icns/US.icns new file mode 100644 index 0000000..d03062b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/US.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/UY.icns b/src/wp-content/themes/double-r-group/images/flags/icns/UY.icns new file mode 100644 index 0000000..ba8f9c3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/UY.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/UZ.icns b/src/wp-content/themes/double-r-group/images/flags/icns/UZ.icns new file mode 100644 index 0000000..f4291ae Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/UZ.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/VA.icns b/src/wp-content/themes/double-r-group/images/flags/icns/VA.icns new file mode 100644 index 0000000..d08f433 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/VA.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/VC.icns b/src/wp-content/themes/double-r-group/images/flags/icns/VC.icns new file mode 100644 index 0000000..a29db21 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/VC.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/VE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/VE.icns new file mode 100644 index 0000000..aa38b42 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/VE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/VG.icns b/src/wp-content/themes/double-r-group/images/flags/icns/VG.icns new file mode 100644 index 0000000..096e9d0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/VG.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/VI.icns b/src/wp-content/themes/double-r-group/images/flags/icns/VI.icns new file mode 100644 index 0000000..d0ddd36 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/VI.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/VN.icns b/src/wp-content/themes/double-r-group/images/flags/icns/VN.icns new file mode 100644 index 0000000..1b1be19 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/VN.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/VU.icns b/src/wp-content/themes/double-r-group/images/flags/icns/VU.icns new file mode 100644 index 0000000..9579e1b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/VU.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/WF.icns b/src/wp-content/themes/double-r-group/images/flags/icns/WF.icns new file mode 100644 index 0000000..5a129f7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/WF.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/WS.icns b/src/wp-content/themes/double-r-group/images/flags/icns/WS.icns new file mode 100644 index 0000000..ed0e5f9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/WS.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/YE.icns b/src/wp-content/themes/double-r-group/images/flags/icns/YE.icns new file mode 100644 index 0000000..05b9e48 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/YE.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/YT.icns b/src/wp-content/themes/double-r-group/images/flags/icns/YT.icns new file mode 100644 index 0000000..58ea917 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/YT.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/ZA.icns b/src/wp-content/themes/double-r-group/images/flags/icns/ZA.icns new file mode 100644 index 0000000..66404cf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/ZA.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/ZM.icns b/src/wp-content/themes/double-r-group/images/flags/icns/ZM.icns new file mode 100644 index 0000000..51c6556 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/ZM.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/ZW.icns b/src/wp-content/themes/double-r-group/images/flags/icns/ZW.icns new file mode 100644 index 0000000..3b06d2e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/ZW.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_abkhazia.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_abkhazia.icns new file mode 100644 index 0000000..c190acb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_abkhazia.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_basque-country.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_basque-country.icns new file mode 100644 index 0000000..8d91e61 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_basque-country.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_british-antarctic-territory.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_british-antarctic-territory.icns new file mode 100644 index 0000000..30e9b2f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_british-antarctic-territory.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_commonwealth.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_commonwealth.icns new file mode 100644 index 0000000..2228d8d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_commonwealth.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_england.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_england.icns new file mode 100644 index 0000000..209688b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_england.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_gosquared.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_gosquared.icns new file mode 100644 index 0000000..449e632 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_gosquared.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_kosovo.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_kosovo.icns new file mode 100644 index 0000000..2bccaa9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_kosovo.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_mars.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_mars.icns new file mode 100644 index 0000000..a0a8d6d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_mars.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_nagorno-karabakh.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_nagorno-karabakh.icns new file mode 100644 index 0000000..4ce8f4e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_nagorno-karabakh.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_nato.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_nato.icns new file mode 100644 index 0000000..43f966f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_nato.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_northern-cyprus.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_northern-cyprus.icns new file mode 100644 index 0000000..3900fc9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_northern-cyprus.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_olympics.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_olympics.icns new file mode 100644 index 0000000..8dd2a43 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_olympics.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_red-cross.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_red-cross.icns new file mode 100644 index 0000000..eb2688c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_red-cross.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_scotland.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_scotland.icns new file mode 100644 index 0000000..fa5940c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_scotland.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_somaliland.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_somaliland.icns new file mode 100644 index 0000000..253a1fe Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_somaliland.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_south-ossetia.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_south-ossetia.icns new file mode 100644 index 0000000..968475e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_south-ossetia.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_united-nations.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_united-nations.icns new file mode 100644 index 0000000..4da1fb1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_united-nations.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_unknown.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_unknown.icns new file mode 100644 index 0000000..94de2af Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_unknown.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/icns/_wales.icns b/src/wp-content/themes/double-r-group/images/flags/icns/_wales.icns new file mode 100644 index 0000000..07ff9cc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/icns/_wales.icns differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AD.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AD.ico new file mode 100644 index 0000000..e2d1210 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AD.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AE.ico new file mode 100644 index 0000000..773c496 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AF.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AF.ico new file mode 100644 index 0000000..67d2b1c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AF.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AG.ico new file mode 100644 index 0000000..22a1ae8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AI.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AI.ico new file mode 100644 index 0000000..e90c069 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AI.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AL.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AL.ico new file mode 100644 index 0000000..a144a58 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AL.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AM.ico new file mode 100644 index 0000000..8bf4612 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AN.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AN.ico new file mode 100644 index 0000000..1f1b797 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AN.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AO.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AO.ico new file mode 100644 index 0000000..cc97fe6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AO.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AQ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AQ.ico new file mode 100644 index 0000000..ac60431 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AQ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AR.ico new file mode 100644 index 0000000..d11a521 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AS.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AS.ico new file mode 100644 index 0000000..c1bd547 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AS.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AT.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AT.ico new file mode 100644 index 0000000..43d5eac Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AT.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AU.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AU.ico new file mode 100644 index 0000000..d68fdc6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AU.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AW.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AW.ico new file mode 100644 index 0000000..831067e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AW.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AX.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AX.ico new file mode 100644 index 0000000..40af4f5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AX.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/AZ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/AZ.ico new file mode 100644 index 0000000..93a8a38 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/AZ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BA.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BA.ico new file mode 100644 index 0000000..a13f539 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BA.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BB.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BB.ico new file mode 100644 index 0000000..7ec0f0e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BB.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BD.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BD.ico new file mode 100644 index 0000000..ba03dae Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BD.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BE.ico new file mode 100644 index 0000000..f0ebb9b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BF.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BF.ico new file mode 100644 index 0000000..7bb582c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BF.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BG.ico new file mode 100644 index 0000000..19d08fd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BH.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BH.ico new file mode 100644 index 0000000..4f815a2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BH.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BI.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BI.ico new file mode 100644 index 0000000..b13e519 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BI.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BJ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BJ.ico new file mode 100644 index 0000000..eca1edd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BJ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BL.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BL.ico new file mode 100644 index 0000000..af749ee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BL.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BM.ico new file mode 100644 index 0000000..c75936e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BN.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BN.ico new file mode 100644 index 0000000..b532324 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BN.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BO.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BO.ico new file mode 100644 index 0000000..1b705c6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BO.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BR.ico new file mode 100644 index 0000000..9995e04 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BS.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BS.ico new file mode 100644 index 0000000..779ca15 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BS.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BT.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BT.ico new file mode 100644 index 0000000..5bd528b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BT.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BW.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BW.ico new file mode 100644 index 0000000..28ea5f1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BW.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BY.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BY.ico new file mode 100644 index 0000000..66f609b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BY.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/BZ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/BZ.ico new file mode 100644 index 0000000..1cb116f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/BZ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CA.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CA.ico new file mode 100644 index 0000000..695e670 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CA.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CC.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CC.ico new file mode 100644 index 0000000..c79d420 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CC.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CD.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CD.ico new file mode 100644 index 0000000..ee7512a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CD.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CF.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CF.ico new file mode 100644 index 0000000..c4e508c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CF.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CG.ico new file mode 100644 index 0000000..2234962 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CH.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CH.ico new file mode 100644 index 0000000..0a468db Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CH.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CI.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CI.ico new file mode 100644 index 0000000..eb62ff9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CI.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CK.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CK.ico new file mode 100644 index 0000000..c4c45f8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CK.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CL.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CL.ico new file mode 100644 index 0000000..51277fd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CL.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CM.ico new file mode 100644 index 0000000..b8c0853 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CN.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CN.ico new file mode 100644 index 0000000..cbab579 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CN.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CO.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CO.ico new file mode 100644 index 0000000..5b7af03 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CO.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CR.ico new file mode 100644 index 0000000..1942fd6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CU.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CU.ico new file mode 100644 index 0000000..92d418e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CU.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CV.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CV.ico new file mode 100644 index 0000000..d36f52d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CV.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CW.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CW.ico new file mode 100644 index 0000000..7452d53 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CW.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CX.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CX.ico new file mode 100644 index 0000000..99b2668 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CX.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CY.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CY.ico new file mode 100644 index 0000000..03c87ba Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CY.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/CZ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/CZ.ico new file mode 100644 index 0000000..4be270f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/CZ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/DE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/DE.ico new file mode 100644 index 0000000..3930f69 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/DE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/DJ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/DJ.ico new file mode 100644 index 0000000..ee0bbd6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/DJ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/DK.ico b/src/wp-content/themes/double-r-group/images/flags/ico/DK.ico new file mode 100644 index 0000000..c84aa62 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/DK.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/DM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/DM.ico new file mode 100644 index 0000000..2a2d45a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/DM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/DO.ico b/src/wp-content/themes/double-r-group/images/flags/ico/DO.ico new file mode 100644 index 0000000..6d7a5ad Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/DO.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/DZ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/DZ.ico new file mode 100644 index 0000000..940a9fd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/DZ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/EC.ico b/src/wp-content/themes/double-r-group/images/flags/ico/EC.ico new file mode 100644 index 0000000..d2505b6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/EC.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/EE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/EE.ico new file mode 100644 index 0000000..df44adc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/EE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/EG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/EG.ico new file mode 100644 index 0000000..b008560 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/EG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/EH.ico b/src/wp-content/themes/double-r-group/images/flags/ico/EH.ico new file mode 100644 index 0000000..648563f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/EH.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/ER.ico b/src/wp-content/themes/double-r-group/images/flags/ico/ER.ico new file mode 100644 index 0000000..59a627b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/ER.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/ES.ico b/src/wp-content/themes/double-r-group/images/flags/ico/ES.ico new file mode 100644 index 0000000..777bee2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/ES.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/ET.ico b/src/wp-content/themes/double-r-group/images/flags/ico/ET.ico new file mode 100644 index 0000000..7985273 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/ET.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/EU.ico b/src/wp-content/themes/double-r-group/images/flags/ico/EU.ico new file mode 100644 index 0000000..ec778ae Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/EU.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/FI.ico b/src/wp-content/themes/double-r-group/images/flags/ico/FI.ico new file mode 100644 index 0000000..50a3c63 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/FI.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/FJ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/FJ.ico new file mode 100644 index 0000000..d621ce9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/FJ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/FK.ico b/src/wp-content/themes/double-r-group/images/flags/ico/FK.ico new file mode 100644 index 0000000..b879f48 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/FK.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/FM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/FM.ico new file mode 100644 index 0000000..909c46a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/FM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/FO.ico b/src/wp-content/themes/double-r-group/images/flags/ico/FO.ico new file mode 100644 index 0000000..5b13e78 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/FO.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/FR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/FR.ico new file mode 100644 index 0000000..1ac89c1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/FR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GA.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GA.ico new file mode 100644 index 0000000..104a872 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GA.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GB.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GB.ico new file mode 100644 index 0000000..cf8c2e7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GB.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GD.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GD.ico new file mode 100644 index 0000000..ae0102f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GD.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GE.ico new file mode 100644 index 0000000..57af451 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GG.ico new file mode 100644 index 0000000..18a2963 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GH.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GH.ico new file mode 100644 index 0000000..cf98742 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GH.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GI.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GI.ico new file mode 100644 index 0000000..170c3f4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GI.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GL.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GL.ico new file mode 100644 index 0000000..d9da5a8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GL.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GM.ico new file mode 100644 index 0000000..bc65983 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GN.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GN.ico new file mode 100644 index 0000000..7232543 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GN.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GQ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GQ.ico new file mode 100644 index 0000000..06391a4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GQ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GR.ico new file mode 100644 index 0000000..732a9b5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GS.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GS.ico new file mode 100644 index 0000000..e849b1d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GS.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GT.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GT.ico new file mode 100644 index 0000000..10263bd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GT.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GU.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GU.ico new file mode 100644 index 0000000..73d9751 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GU.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GW.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GW.ico new file mode 100644 index 0000000..601a1f0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GW.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/GY.ico b/src/wp-content/themes/double-r-group/images/flags/ico/GY.ico new file mode 100644 index 0000000..384627d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/GY.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/HK.ico b/src/wp-content/themes/double-r-group/images/flags/ico/HK.ico new file mode 100644 index 0000000..3cd6331 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/HK.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/HN.ico b/src/wp-content/themes/double-r-group/images/flags/ico/HN.ico new file mode 100644 index 0000000..37c15b7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/HN.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/HR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/HR.ico new file mode 100644 index 0000000..125fc53 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/HR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/HT.ico b/src/wp-content/themes/double-r-group/images/flags/ico/HT.ico new file mode 100644 index 0000000..d34f8b9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/HT.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/HU.ico b/src/wp-content/themes/double-r-group/images/flags/ico/HU.ico new file mode 100644 index 0000000..330d93b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/HU.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/IC.ico b/src/wp-content/themes/double-r-group/images/flags/ico/IC.ico new file mode 100644 index 0000000..4d807a9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/IC.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/ID.ico b/src/wp-content/themes/double-r-group/images/flags/ico/ID.ico new file mode 100644 index 0000000..f911641 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/ID.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/IE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/IE.ico new file mode 100644 index 0000000..851aa9e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/IE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/IL.ico b/src/wp-content/themes/double-r-group/images/flags/ico/IL.ico new file mode 100644 index 0000000..94ee730 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/IL.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/IM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/IM.ico new file mode 100644 index 0000000..596a63f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/IM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/IN.ico b/src/wp-content/themes/double-r-group/images/flags/ico/IN.ico new file mode 100644 index 0000000..763293c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/IN.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/IQ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/IQ.ico new file mode 100644 index 0000000..2741707 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/IQ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/IR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/IR.ico new file mode 100644 index 0000000..ce68814 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/IR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/IS.ico b/src/wp-content/themes/double-r-group/images/flags/ico/IS.ico new file mode 100644 index 0000000..ae32c6e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/IS.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/IT.ico b/src/wp-content/themes/double-r-group/images/flags/ico/IT.ico new file mode 100644 index 0000000..c5db2e4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/IT.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/JE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/JE.ico new file mode 100644 index 0000000..b8bfe67 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/JE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/JM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/JM.ico new file mode 100644 index 0000000..72baaee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/JM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/JO.ico b/src/wp-content/themes/double-r-group/images/flags/ico/JO.ico new file mode 100644 index 0000000..0ea9e8f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/JO.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/JP.ico b/src/wp-content/themes/double-r-group/images/flags/ico/JP.ico new file mode 100644 index 0000000..3aa2317 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/JP.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/KE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/KE.ico new file mode 100644 index 0000000..339dffc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/KE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/KG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/KG.ico new file mode 100644 index 0000000..466414b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/KG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/KH.ico b/src/wp-content/themes/double-r-group/images/flags/ico/KH.ico new file mode 100644 index 0000000..261d171 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/KH.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/KI.ico b/src/wp-content/themes/double-r-group/images/flags/ico/KI.ico new file mode 100644 index 0000000..7b2c0bd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/KI.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/KM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/KM.ico new file mode 100644 index 0000000..9b51512 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/KM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/KN.ico b/src/wp-content/themes/double-r-group/images/flags/ico/KN.ico new file mode 100644 index 0000000..f79310d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/KN.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/KP.ico b/src/wp-content/themes/double-r-group/images/flags/ico/KP.ico new file mode 100644 index 0000000..50e0be1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/KP.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/KR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/KR.ico new file mode 100644 index 0000000..7a1fc44 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/KR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/KW.ico b/src/wp-content/themes/double-r-group/images/flags/ico/KW.ico new file mode 100644 index 0000000..83379a6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/KW.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/KY.ico b/src/wp-content/themes/double-r-group/images/flags/ico/KY.ico new file mode 100644 index 0000000..4eab664 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/KY.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/KZ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/KZ.ico new file mode 100644 index 0000000..c60dd3a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/KZ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/LA.ico b/src/wp-content/themes/double-r-group/images/flags/ico/LA.ico new file mode 100644 index 0000000..2047dde Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/LA.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/LB.ico b/src/wp-content/themes/double-r-group/images/flags/ico/LB.ico new file mode 100644 index 0000000..c9e3f07 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/LB.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/LC.ico b/src/wp-content/themes/double-r-group/images/flags/ico/LC.ico new file mode 100644 index 0000000..c2d58d5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/LC.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/LI.ico b/src/wp-content/themes/double-r-group/images/flags/ico/LI.ico new file mode 100644 index 0000000..deb8a0a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/LI.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/LK.ico b/src/wp-content/themes/double-r-group/images/flags/ico/LK.ico new file mode 100644 index 0000000..82c64f6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/LK.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/LR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/LR.ico new file mode 100644 index 0000000..a8e3821 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/LR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/LS.ico b/src/wp-content/themes/double-r-group/images/flags/ico/LS.ico new file mode 100644 index 0000000..51dcef1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/LS.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/LT.ico b/src/wp-content/themes/double-r-group/images/flags/ico/LT.ico new file mode 100644 index 0000000..3cd3b62 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/LT.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/LU.ico b/src/wp-content/themes/double-r-group/images/flags/ico/LU.ico new file mode 100644 index 0000000..4cd73ec Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/LU.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/LV.ico b/src/wp-content/themes/double-r-group/images/flags/ico/LV.ico new file mode 100644 index 0000000..21e946c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/LV.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/LY.ico b/src/wp-content/themes/double-r-group/images/flags/ico/LY.ico new file mode 100644 index 0000000..b154de9 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/LY.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MA.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MA.ico new file mode 100644 index 0000000..ad17b19 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MA.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MC.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MC.ico new file mode 100644 index 0000000..f911641 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MC.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MD.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MD.ico new file mode 100644 index 0000000..934dcbf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MD.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/ME.ico b/src/wp-content/themes/double-r-group/images/flags/ico/ME.ico new file mode 100644 index 0000000..981accf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/ME.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MF.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MF.ico new file mode 100644 index 0000000..2b22b54 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MF.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MG.ico new file mode 100644 index 0000000..c07781d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MH.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MH.ico new file mode 100644 index 0000000..eb542a0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MH.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MK.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MK.ico new file mode 100644 index 0000000..4b15103 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MK.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/ML.ico b/src/wp-content/themes/double-r-group/images/flags/ico/ML.ico new file mode 100644 index 0000000..4f5444d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/ML.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MM.ico new file mode 100644 index 0000000..e6c3033 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MN.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MN.ico new file mode 100644 index 0000000..12666fc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MN.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MO.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MO.ico new file mode 100644 index 0000000..3d477a4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MO.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MP.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MP.ico new file mode 100644 index 0000000..91ba059 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MP.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MQ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MQ.ico new file mode 100644 index 0000000..fcb3882 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MQ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MR.ico new file mode 100644 index 0000000..675cb43 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MS.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MS.ico new file mode 100644 index 0000000..f751c9c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MS.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MT.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MT.ico new file mode 100644 index 0000000..45e98d5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MT.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MU.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MU.ico new file mode 100644 index 0000000..3fbbb46 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MU.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MV.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MV.ico new file mode 100644 index 0000000..4241b32 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MV.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MW.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MW.ico new file mode 100644 index 0000000..ae696ff Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MW.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MX.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MX.ico new file mode 100644 index 0000000..556b360 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MX.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MY.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MY.ico new file mode 100644 index 0000000..8dc5799 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MY.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/MZ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/MZ.ico new file mode 100644 index 0000000..f26f8d8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/MZ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/NA.ico b/src/wp-content/themes/double-r-group/images/flags/ico/NA.ico new file mode 100644 index 0000000..38ddb33 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/NA.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/NC.ico b/src/wp-content/themes/double-r-group/images/flags/ico/NC.ico new file mode 100644 index 0000000..61469ad Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/NC.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/NE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/NE.ico new file mode 100644 index 0000000..fc29e7e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/NE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/NF.ico b/src/wp-content/themes/double-r-group/images/flags/ico/NF.ico new file mode 100644 index 0000000..3f208b0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/NF.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/NG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/NG.ico new file mode 100644 index 0000000..86c7e75 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/NG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/NI.ico b/src/wp-content/themes/double-r-group/images/flags/ico/NI.ico new file mode 100644 index 0000000..ca2a35c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/NI.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/NL.ico b/src/wp-content/themes/double-r-group/images/flags/ico/NL.ico new file mode 100644 index 0000000..f4bd8aa Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/NL.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/NO.ico b/src/wp-content/themes/double-r-group/images/flags/ico/NO.ico new file mode 100644 index 0000000..82c636a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/NO.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/NP.ico b/src/wp-content/themes/double-r-group/images/flags/ico/NP.ico new file mode 100644 index 0000000..bb5a0fe Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/NP.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/NR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/NR.ico new file mode 100644 index 0000000..891c9ab Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/NR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/NU.ico b/src/wp-content/themes/double-r-group/images/flags/ico/NU.ico new file mode 100644 index 0000000..56b0b05 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/NU.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/NZ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/NZ.ico new file mode 100644 index 0000000..53c8077 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/NZ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/OM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/OM.ico new file mode 100644 index 0000000..a0e074b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/OM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PA.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PA.ico new file mode 100644 index 0000000..7a6375b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PA.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PE.ico new file mode 100644 index 0000000..d7693f4 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PF.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PF.ico new file mode 100644 index 0000000..3daff6c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PF.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PG.ico new file mode 100644 index 0000000..0901e76 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PH.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PH.ico new file mode 100644 index 0000000..d66ada2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PH.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PK.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PK.ico new file mode 100644 index 0000000..c3aaff8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PK.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PL.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PL.ico new file mode 100644 index 0000000..5adfa08 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PL.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PN.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PN.ico new file mode 100644 index 0000000..42b4cee Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PN.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PR.ico new file mode 100644 index 0000000..2f96c61 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PS.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PS.ico new file mode 100644 index 0000000..0ef30cc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PS.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PT.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PT.ico new file mode 100644 index 0000000..7a449bf Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PT.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PW.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PW.ico new file mode 100644 index 0000000..5793713 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PW.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/PY.ico b/src/wp-content/themes/double-r-group/images/flags/ico/PY.ico new file mode 100644 index 0000000..410626c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/PY.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/QA.ico b/src/wp-content/themes/double-r-group/images/flags/ico/QA.ico new file mode 100644 index 0000000..2bb0491 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/QA.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/RO.ico b/src/wp-content/themes/double-r-group/images/flags/ico/RO.ico new file mode 100644 index 0000000..8e81716 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/RO.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/RS.ico b/src/wp-content/themes/double-r-group/images/flags/ico/RS.ico new file mode 100644 index 0000000..7547101 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/RS.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/RU.ico b/src/wp-content/themes/double-r-group/images/flags/ico/RU.ico new file mode 100644 index 0000000..1830457 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/RU.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/RW.ico b/src/wp-content/themes/double-r-group/images/flags/ico/RW.ico new file mode 100644 index 0000000..c02338a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/RW.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SA.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SA.ico new file mode 100644 index 0000000..3c9d864 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SA.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SB.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SB.ico new file mode 100644 index 0000000..24a2af0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SB.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SC.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SC.ico new file mode 100644 index 0000000..2af13d6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SC.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SD.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SD.ico new file mode 100644 index 0000000..49185ad Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SD.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SE.ico new file mode 100644 index 0000000..30db06d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SG.ico new file mode 100644 index 0000000..4b506d5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SH.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SH.ico new file mode 100644 index 0000000..41a17bc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SH.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SI.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SI.ico new file mode 100644 index 0000000..06bfb8d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SI.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SK.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SK.ico new file mode 100644 index 0000000..3f5323e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SK.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SL.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SL.ico new file mode 100644 index 0000000..83d5040 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SL.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SM.ico new file mode 100644 index 0000000..aa97ae0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SN.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SN.ico new file mode 100644 index 0000000..789fcb0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SN.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SO.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SO.ico new file mode 100644 index 0000000..0522188 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SO.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SR.ico new file mode 100644 index 0000000..7445340 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SS.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SS.ico new file mode 100644 index 0000000..49ca0d2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SS.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/ST.ico b/src/wp-content/themes/double-r-group/images/flags/ico/ST.ico new file mode 100644 index 0000000..34eae8b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/ST.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SV.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SV.ico new file mode 100644 index 0000000..de64212 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SV.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SY.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SY.ico new file mode 100644 index 0000000..d99ca0e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SY.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/SZ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/SZ.ico new file mode 100644 index 0000000..b295162 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/SZ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TC.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TC.ico new file mode 100644 index 0000000..e0e59c6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TC.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TD.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TD.ico new file mode 100644 index 0000000..a037ae6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TD.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TF.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TF.ico new file mode 100644 index 0000000..23da461 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TF.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TG.ico new file mode 100644 index 0000000..9f6abdc Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TH.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TH.ico new file mode 100644 index 0000000..8dc00ae Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TH.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TJ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TJ.ico new file mode 100644 index 0000000..053a182 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TJ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TK.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TK.ico new file mode 100644 index 0000000..cc3ec05 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TK.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TL.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TL.ico new file mode 100644 index 0000000..81a297b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TL.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TM.ico new file mode 100644 index 0000000..1679244 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TN.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TN.ico new file mode 100644 index 0000000..eae8795 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TN.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TO.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TO.ico new file mode 100644 index 0000000..35d166b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TO.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TR.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TR.ico new file mode 100644 index 0000000..3deac51 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TR.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TT.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TT.ico new file mode 100644 index 0000000..f81807b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TT.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TV.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TV.ico new file mode 100644 index 0000000..616ee79 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TV.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TW.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TW.ico new file mode 100644 index 0000000..a80ae1e Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TW.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/TZ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/TZ.ico new file mode 100644 index 0000000..4629dbd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/TZ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/UA.ico b/src/wp-content/themes/double-r-group/images/flags/ico/UA.ico new file mode 100644 index 0000000..53da046 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/UA.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/UG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/UG.ico new file mode 100644 index 0000000..ac7f3f0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/UG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/US.ico b/src/wp-content/themes/double-r-group/images/flags/ico/US.ico new file mode 100644 index 0000000..a6f9008 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/US.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/UY.ico b/src/wp-content/themes/double-r-group/images/flags/ico/UY.ico new file mode 100644 index 0000000..990524f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/UY.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/UZ.ico b/src/wp-content/themes/double-r-group/images/flags/ico/UZ.ico new file mode 100644 index 0000000..c7d4563 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/UZ.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/VA.ico b/src/wp-content/themes/double-r-group/images/flags/ico/VA.ico new file mode 100644 index 0000000..c21c23a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/VA.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/VC.ico b/src/wp-content/themes/double-r-group/images/flags/ico/VC.ico new file mode 100644 index 0000000..d11fe0f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/VC.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/VE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/VE.ico new file mode 100644 index 0000000..a6d5eae Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/VE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/VG.ico b/src/wp-content/themes/double-r-group/images/flags/ico/VG.ico new file mode 100644 index 0000000..330f1b2 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/VG.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/VI.ico b/src/wp-content/themes/double-r-group/images/flags/ico/VI.ico new file mode 100644 index 0000000..e529618 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/VI.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/VN.ico b/src/wp-content/themes/double-r-group/images/flags/ico/VN.ico new file mode 100644 index 0000000..fc1e77c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/VN.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/VU.ico b/src/wp-content/themes/double-r-group/images/flags/ico/VU.ico new file mode 100644 index 0000000..d461ba5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/VU.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/WF.ico b/src/wp-content/themes/double-r-group/images/flags/ico/WF.ico new file mode 100644 index 0000000..bb63b1f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/WF.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/WS.ico b/src/wp-content/themes/double-r-group/images/flags/ico/WS.ico new file mode 100644 index 0000000..1d47f8d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/WS.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/YE.ico b/src/wp-content/themes/double-r-group/images/flags/ico/YE.ico new file mode 100644 index 0000000..068f37a Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/YE.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/YT.ico b/src/wp-content/themes/double-r-group/images/flags/ico/YT.ico new file mode 100644 index 0000000..b8aad04 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/YT.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/ZA.ico b/src/wp-content/themes/double-r-group/images/flags/ico/ZA.ico new file mode 100644 index 0000000..8938650 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/ZA.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/ZM.ico b/src/wp-content/themes/double-r-group/images/flags/ico/ZM.ico new file mode 100644 index 0000000..721221b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/ZM.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/ZW.ico b/src/wp-content/themes/double-r-group/images/flags/ico/ZW.ico new file mode 100644 index 0000000..bb69496 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/ZW.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_abkhazia.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_abkhazia.ico new file mode 100644 index 0000000..f43ded7 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_abkhazia.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_basque-country.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_basque-country.ico new file mode 100644 index 0000000..1728f21 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_basque-country.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_british-antarctic-territory.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_british-antarctic-territory.ico new file mode 100644 index 0000000..cacb7f5 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_british-antarctic-territory.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_commonwealth.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_commonwealth.ico new file mode 100644 index 0000000..e846bfb Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_commonwealth.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_england.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_england.ico new file mode 100644 index 0000000..ad7268f Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_england.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_gosquared.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_gosquared.ico new file mode 100644 index 0000000..2e765b0 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_gosquared.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_kosovo.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_kosovo.ico new file mode 100644 index 0000000..e2ac7fa Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_kosovo.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_mars.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_mars.ico new file mode 100644 index 0000000..968f3f1 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_mars.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_nagorno-karabakh.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_nagorno-karabakh.ico new file mode 100644 index 0000000..0b8455d Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_nagorno-karabakh.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_nato.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_nato.ico new file mode 100644 index 0000000..9238ea6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_nato.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_northern-cyprus.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_northern-cyprus.ico new file mode 100644 index 0000000..c21aa42 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_northern-cyprus.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_olympics.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_olympics.ico new file mode 100644 index 0000000..4b414cd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_olympics.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_red-cross.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_red-cross.ico new file mode 100644 index 0000000..a4308b8 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_red-cross.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_scotland.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_scotland.ico new file mode 100644 index 0000000..c162cba Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_scotland.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_somaliland.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_somaliland.ico new file mode 100644 index 0000000..af967d3 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_somaliland.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_south-ossetia.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_south-ossetia.ico new file mode 100644 index 0000000..d885236 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_south-ossetia.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_united-nations.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_united-nations.ico new file mode 100644 index 0000000..41d5a4c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_united-nations.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_unknown.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_unknown.ico new file mode 100644 index 0000000..22c5ebd Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_unknown.ico differ diff --git a/src/wp-content/themes/double-r-group/images/flags/ico/_wales.ico b/src/wp-content/themes/double-r-group/images/flags/ico/_wales.ico new file mode 100644 index 0000000..c50192b Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/flags/ico/_wales.ico differ diff --git a/src/wp-content/themes/double-r-group/images/page_title_bg.png b/src/wp-content/themes/double-r-group/images/page_title_bg.png new file mode 100644 index 0000000..e252182 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/page_title_bg.png differ diff --git a/src/wp-content/themes/double-r-group/images/page_title_bg@2x.png b/src/wp-content/themes/double-r-group/images/page_title_bg@2x.png new file mode 100644 index 0000000..1028732 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/page_title_bg@2x.png differ diff --git a/src/wp-content/themes/double-r-group/images/silueta-cabeza-caballo.png b/src/wp-content/themes/double-r-group/images/silueta-cabeza-caballo.png new file mode 100644 index 0000000..133862c Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/silueta-cabeza-caballo.png differ diff --git a/src/wp-content/themes/double-r-group/images/silueta-cuerpo-caballo.png b/src/wp-content/themes/double-r-group/images/silueta-cuerpo-caballo.png new file mode 100644 index 0000000..3549dc6 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/silueta-cuerpo-caballo.png differ diff --git a/src/wp-content/themes/double-r-group/images/social/social-icons.png b/src/wp-content/themes/double-r-group/images/social/social-icons.png new file mode 100644 index 0000000..6a31175 Binary files /dev/null and b/src/wp-content/themes/double-r-group/images/social/social-icons.png differ diff --git a/src/wp-content/themes/double-r-group/index.php b/src/wp-content/themes/double-r-group/index.php new file mode 100644 index 0000000..4746567 --- /dev/null +++ b/src/wp-content/themes/double-r-group/index.php @@ -0,0 +1,237 @@ + + +
                  + +
                  + +
                  + post_date); + $post_month = date('n', $post_timestamp); + $post_year = get_the_date('o'); + $current_date = get_the_date('o-n'); + ?> + + +

                  + + +
                  > + +
                  +
                  + + +
                  + + + +
                  + +
                  + +
                  + + +
                  + +
                  +
                  + + +

                  + + +
                  +
                  + + +
                  + + +
                  + +
                  + +
                  + +
                  + +

                  + + +

                  ||

                  + +

                  + | + | + ||

                  + + + +
                  + +
                  +
                  + +
                  + + +
                  + +
                  + +
                  +  '.__('0', 'Avada'), ' '.__('1', 'Avada'), ' '.'%'); ?> +
                  + + +
                  + |||| +
                  + +
                  + +
                  + +
                  + +
                  +
                  + +
                  + +
                  + + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/js/horse-filter.js b/src/wp-content/themes/double-r-group/js/horse-filter.js new file mode 100644 index 0000000..c4ab2c2 --- /dev/null +++ b/src/wp-content/themes/double-r-group/js/horse-filter.js @@ -0,0 +1,36 @@ +jQuery(document).ready(function($) { + var $container = jQuery('.portfolio').find('.portfolio-wrapper'); + var filters = {}; + + // filter buttons + jQuery('.horse-tabs ul li.cat-item a').click(function(){ + var $this = jQuery(this); + // don't proceed if already selected + if ( $this.hasClass('current-cat') ) { + return; + } + + var $optionSet = $this.parents('.horse-tab'); + // change selected class + $optionSet.find('li.cat-item').removeClass('current-cat'); + $this.parent().addClass('current-cat'); + + // store filter value in object + // i.e. filters.color = 'red' + var group = $optionSet.attr('data-filter-group'); + + filters[ group ] = $this.attr('data-filter-value'); + + // convert object into array + var isoFilters = []; + for ( var prop in filters ) { + isoFilters.push( filters[ prop ] ) + } + var selector = isoFilters.join(''); + $container.isotope({ filter: selector }); + console.log(selector); + + + return false; + }); +}); \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/js/main.js b/src/wp-content/themes/double-r-group/js/main.js new file mode 100644 index 0000000..a45c96e --- /dev/null +++ b/src/wp-content/themes/double-r-group/js/main.js @@ -0,0 +1,23 @@ +jQuery(document).ready(function($) { + + //main nav + /*jQuery('.header-wrapper .mobile-nav-holder').append('
                  '+js_local_vars.dropdown_goto+'
                  '); + jQuery('.header-wrapper .mobile-nav-holder .mobile-selector').append('
                  '); + jQuery('.header-wrapper .mobile-nav-holder').append(jQuery('.header-wrapper .nav-holder ul#navigation').clone()); + jQuery('.header-wrapper .mobile-nav-holder ul#navigation').attr("id","mobile-nav"); + jQuery('.header-wrapper .mobile-nav-holder ul#mobile-nav').children('li').each(function () { + jQuery(this).attr("class", "mobile-nav-item"); + }); + jQuery('.header-wrapper .mobile-nav-holder ul#mobile-nav li').children('.my-cart-link').each(function () { + jQuery(this).text(js_local_vars.mobile_nav_cart); + jQuery(this).children('cart-contents').remove(); + }); + jQuery('.header-wrapper .mobile-nav-holder ul#mobile-nav li').children('#nav-search-link').each(function () { + jQuery(this).parents('li').remove(); + }); + jQuery('.header-wrapper .mobile-nav-holder .mobile-selector').click(function(){ + jQuery('.header-wrapper .mobile-nav-holder #mobile-nav').slideToggle(240,'easeOutQuad'); + });*/ + + +}); diff --git a/src/wp-content/themes/double-r-group/new-slideshow.php b/src/wp-content/themes/double-r-group/new-slideshow.php new file mode 100644 index 0000000..bc50abc --- /dev/null +++ b/src/wp-content/themes/double-r-group/new-slideshow.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/partials/horse-list.php b/src/wp-content/themes/double-r-group/partials/horse-list.php new file mode 100644 index 0000000..fd89617 --- /dev/null +++ b/src/wp-content/themes/double-r-group/partials/horse-list.php @@ -0,0 +1,304 @@ + + +
                  + + + +
                  > +
                  + + +
                  +
                  + ID; ?> + + + +
                  > +
                  + +
                  +
                  + + + + 'drg_horse', + 'paged' => $paged, + 'posts_per_page' => $data['portfolio_items'], + 'orderby' => 'title', + 'order' => 'ASC' + ); + + $pcats = get_post_meta(get_the_ID(), 'drg_horse_category', true); + if($pcats && $pcats[0] == 0) { + unset($pcats[0]); + } + + if($pcats){ + $args['tax_query'][] = array( + 'taxonomy' => 'horse_categories', + 'field' => 'ID', + 'terms' => $pcats + ); + } + + if (is_tax()) { + $the_tax = get_queried_object(); + $args['tax_query'][] = array( + 'taxonomy' => $the_tax->taxonomy, + 'field' => 'ID', + 'terms' => $the_tax->term_id + ); + } + + $gallery = new WP_Query($args); + if (is_array($gallery->posts) && !empty($gallery->posts)) { + $horse_cats = array(); + $horse_breeds = array(); + $horse_ages = array(); + $horse_genders = array(); + + foreach ($gallery->posts as $gallery_post) { + // Revisar las categorías de todos los items devueltos + $post_taxs = wp_get_post_terms($gallery_post->ID, 'horse_categories', array("fields" => "all")); + + if (is_array($post_taxs) && !empty($post_taxs)) { + foreach ($post_taxs as $post_tax) { + if (is_array($pcats) && !empty($pcats) && (in_array($post_tax->term_id, $pcats) || in_array($post_tax->parent, $pcats))) { + $horse_cats[urldecode($post_tax->slug)] = $post_tax->name; + } + // + if (empty($pcats) || !isset($pcats)) { + $horse_cats[urldecode($post_tax->slug)] = $post_tax->name; + } + } + } + + // Revisar las razas de todos los items devueltos + $post_taxs = wp_get_post_terms($gallery_post->ID, 'horse_breeds', array("fields" => "all")); + if (is_array($post_taxs) && !empty($post_taxs)) { + foreach ($post_taxs as $post_tax) { + $horse_breeds[urldecode($post_tax->slug)] = $post_tax->name; + } + } + + // Revisar las edades de todos los items devueltos + $post_taxs = wp_get_post_terms($gallery_post->ID, 'horse_ages', array("fields" => "all")); + if (is_array($post_taxs) && !empty($post_taxs)) { + foreach ($post_taxs as $post_tax) { + $horse_ages[urldecode($post_tax->slug)] = $post_tax->name; + } + } + + // Revisar los géneros de todos los items devueltos + $post_taxs = wp_get_post_terms($gallery_post->ID, 'horse_genders', array("fields" => "all")); + if (is_array($post_taxs) && !empty($post_taxs)) { + foreach ($post_taxs as $post_tax) { + $horse_genders[urldecode($post_tax->slug)] = $post_tax->name; + } + } + } + } + ?> + +
                  + have_posts()): $gallery->the_post(); + if($pcats) { + $permalink = tf_addUrlParameter(get_permalink(), 'horseID', $current_page_id); + } else { + $permalink = get_permalink(); + } + ?> + ID, 'horse_categories'); + if($item_list): + foreach($item_list as $item) { + $item_classes .= 'cat-' . urldecode($item->slug) . ' '; + } + endif; + + $item_list = get_the_terms($post->ID, 'horse_breeds'); + if($item_list): + foreach($item_list as $item) { + $item_classes .= 'breed-' . urldecode($item->slug) . ' '; + } + endif; + + $item_list = get_the_terms($post->ID, 'horse_genders'); + if($item_list): + foreach($item_list as $item) { + $item_classes .= 'gender-' . urldecode($item->slug) . ' '; + } + endif; + + $item_list = get_the_terms($post->ID, 'horse_ages'); + if($item_list): + foreach($item_list as $item) { + $item_classes .= 'age-' . urldecode($item->slug) . ' '; + } + endif; + + + ?> +
                  +
                  + + + + 'wp-image')); ?> + + <?php the_title(); ?> + + + + + + 'wp-image')); ?> + + 'wp-image')); ?> + + + + + ID, 'pyre_image_rollover_icons', true) == 'link') { + $link_icon_css = 'display:inline-block;'; + $zoom_icon_css = 'display:none;'; + } elseif(get_post_meta($post->ID, 'pyre_image_rollover_icons', true) == 'zoom') { + $link_icon_css = 'display:none;'; + $zoom_icon_css = 'display:inline-block;'; + } elseif(get_post_meta($post->ID, 'pyre_image_rollover_icons', true) == 'no') { + $link_icon_css = 'display:none;'; + $zoom_icon_css = 'display:none;'; + } else { + $link_icon_css = 'display:inline-block;'; + $zoom_icon_css = 'display:inline-block;'; + } + + $link_target = ""; + $icon_url_check = get_post_meta(get_the_ID(), 'pyre_link_icon_url', true); if(!empty($icon_url_check)) { + $icon_permalink = get_post_meta($post->ID, 'pyre_link_icon_url', true); + if(get_post_meta(get_the_ID(), 'pyre_link_icon_target', true) == "yes") { + $link_target = ' target="_blank"'; + } + } else { + $icon_permalink = $permalink; + } + ?> + +
                  +
                  + ID), 'full'); ?> + >Permalink + ID, 'pyre_video_url', true)) { + $full_image[0] = get_post_meta($post->ID, 'pyre_video_url', true); + } + ?> + <?php echo get_post_meta(get_post_thumbnail_id($post->ID), '_wp_attachment_image_alt', true); ?>Gallery + +

                  >

                  + +

                  + +

                  ID, 'horse_categories', '', ', ', ''); ?>

                  +
                  +
                  + +
                  +
                  + +
                  +
                  +

                  +
                  + ID, 'horse_breeds', '', ', ', ' '); + $term_list .= get_the_term_list($post->ID, 'horse_ages', '', ', ', ' '); + $term_list .= get_the_term_list($post->ID, 'horse_genders', '', ', ', ''); + ?> +

                  + +
                  + + +
                  + +
                  +
                  + +
                  + max_num_pages, $range = 2); ?> +
                  + + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/partials/horse_filter.php b/src/wp-content/themes/double-r-group/partials/horse_filter.php new file mode 100644 index 0000000..d8daa56 --- /dev/null +++ b/src/wp-content/themes/double-r-group/partials/horse_filter.php @@ -0,0 +1,24 @@ + + + +
                  + +
                    +
                  • + $item_name): ?> +
                  • + + + +
                  • + +
                  + diff --git a/src/wp-content/themes/double-r-group/partials/horse_related_horses.php b/src/wp-content/themes/double-r-group/partials/horse_related_horses.php new file mode 100644 index 0000000..1656a9c --- /dev/null +++ b/src/wp-content/themes/double-r-group/partials/horse_related_horses.php @@ -0,0 +1,41 @@ + + + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/partials/new-slideshow.php b/src/wp-content/themes/double-r-group/partials/new-slideshow.php new file mode 100644 index 0000000..c369413 --- /dev/null +++ b/src/wp-content/themes/double-r-group/partials/new-slideshow.php @@ -0,0 +1,199 @@ + + + + + + +ID, 'pyre_image_rollover_icons', true) == 'link') { + $link_icon_css = 'display:inline-block;'; + $zoom_icon_css = 'display:none;'; +} elseif(get_post_meta($post->ID, 'pyre_image_rollover_icons', true) == 'zoom') { + $link_icon_css = 'display:none;'; + $zoom_icon_css = 'display:inline-block;'; +} elseif(get_post_meta($post->ID, 'pyre_image_rollover_icons', true) == 'no') { + $link_icon_css = 'display:none;'; + $zoom_icon_css = 'display:none;'; +} else { + $link_icon_css = 'display:inline-block;'; + $zoom_icon_css = 'display:inline-block;'; +} + +$icon_url_check = get_post_meta(get_the_ID(), 'pyre_link_icon_url', true); if(!empty($icon_url_check)) { + $permalink = get_post_meta($post->ID, 'pyre_link_icon_url', true); +} else { + $permalink = get_permalink($post->ID); +} +?> + +ID, 'pyre_fimg_height', true) && get_post_meta($post->ID, 'pyre_fimg_width', true) && + get_post_meta($post->ID, 'pyre_fimg_height', true) != 'auto' && get_post_meta($post->ID, 'pyre_fimg_width', true) != 'auto' +) { + $size = 'full'; +} + +if( + get_post_meta($post->ID, 'pyre_fimg_height', true) == 'auto' ||get_post_meta($post->ID, 'pyre_fimg_width', true) == 'auto' +) { + $size = 'full'; +} + +if($layout == 'Grid' || $layout == 'Timeline') { + $size = 'full'; +} +?> + + + +
                  + + +
                  + +
                    + +
                  • +
                    + +
                    +
                  • + + + + +
                  • +
                    + + + + + + + +
                    +
                    + ID), 'full'); ?> + Permalink + ID, 'pyre_video_url', true)) { + $full_image[0] = get_post_meta($post->ID, 'pyre_video_url', true); + } + ?> + <?php echo get_post_meta(get_post_thumbnail_id(), '_wp_attachment_image_alt', true); ?>Gallery + +

                    + +

                    + +
                    +
                    + +
                    +
                    +
                  • + + + + + + +
                  • +
                    + <?php echo $attachment_data['image_meta']['title']; ?> + <?php echo get_post_meta($attachment_id, '_wp_attachment_image_alt', true); ?> +
                    +
                  • + + +
                  +
                  + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/screenshot.png b/src/wp-content/themes/double-r-group/screenshot.png new file mode 100644 index 0000000..67a796d Binary files /dev/null and b/src/wp-content/themes/double-r-group/screenshot.png differ diff --git a/src/wp-content/themes/double-r-group/search.php b/src/wp-content/themes/double-r-group/search.php new file mode 100644 index 0000000..e7c007c --- /dev/null +++ b/src/wp-content/themes/double-r-group/search.php @@ -0,0 +1,100 @@ + + +
                  +
                  +

                  +

                  + +
                  + + + +
                  > + post_type && !$data['search_featured_images']): + if($data['legacy_posts_slideshow']) { + get_template_part('legacy-slideshow'); + } else { + get_template_part('partials/new-slideshow'); + } + endif; + ?> +

                  + +
                  + +
                  + + +
                  +
                  + |||| +
                  +
                  + +
                  +
                  + +
                  + + + +
                  +
                  +

                  +
                  +
                  +
                  +

                  +
                  + +
                  +

                  +

                  + +
                  +
                  +
                  + +
                  + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/single-drg_horse.php b/src/wp-content/themes/double-r-group/single-drg_horse.php new file mode 100644 index 0000000..d7c85a7 --- /dev/null +++ b/src/wp-content/themes/double-r-group/single-drg_horse.php @@ -0,0 +1,233 @@ + + ID, 'pyre_width', true) == 'half') { + $portfolio_width = 'half'; + } else { + $portfolio_width = 'full'; + } + if($data['portfolio_featured_images'] && $portfolio_width == 'half') { + $portfolio_width = 'full'; + } + ?> + ID, 'pyre_sidebar', true); + if(get_post_meta($post->ID, 'pyre_sidebar', true) == 'no' || empty($sidebar_check) || !isset($sidebar_check)) { + $content_css = 'width:100%'; + $sidebar_css = 'display:none'; + } + elseif(get_post_meta($post->ID, 'pyre_sidebar_position', true) == 'left') { + $content_css = 'float:right;'; + $sidebar_css = 'float:left;'; + $class = 'with-sidebar'; + } elseif(get_post_meta($post->ID, 'pyre_sidebar_position', true) == 'right') { + $content_css = 'float:left;'; + $sidebar_css = 'float:right;'; + $class = 'with-sidebar'; + } elseif(get_post_meta($post->ID, 'pyre_sidebar_position', true) == 'default') { + if($data['default_sidebar_pos'] == 'Left') { + $content_css = 'float:right;'; + $sidebar_css = 'float:left;'; + } elseif($data['default_sidebar_pos'] == 'Right') { + $content_css = 'float:left;'; + $sidebar_css = 'float:right;'; + } + $class = 'with-sidebar'; + } + ?> + +
                  + + + + + +
                  > + + ID, 'pyre_project_details', true) == 'no') { + $project_info_style = 'display:none;'; + } + if($portfolio_width == 'full' && get_post_meta($post->ID, 'pyre_project_details', true) == 'no') { + $project_desc_style = 'width:100%;'; + } + if(get_post_meta($post->ID, 'pyre_project_desc_title', true) == 'no') { + $project_desc_title_style = 'display:none;'; + } + + ?> +
                  +
                  + +
                  + + + + + <?php echo get_post_meta(get_post_thumbnail_id(), '_wp_attachment_image_alt', true); ?> + + <?php echo get_post_meta(get_post_thumbnail_id(), '_wp_attachment_image_alt', true); ?> + +
                  +
                  + +
                   
                  + + ID, 'horse_categories', '', '
                  ', '')): ?> +
                  +

                  :

                  +
                  + ID, 'horse_categories', '', '
                  ', ''); ?> +
                  +
                  + + ID, 'horse_breeds', '', '
                  ', '')): ?> +
                  +

                  :

                  +
                  + ID, 'horse_breeds', '', '
                  ', ''); ?> +
                  +
                  + + ID, 'horse_genders', '', '
                  ', '')): ?> +
                  +

                  :

                  +
                  + ID, 'horse_genders', '', '
                  ', ''); ?> +
                  +
                  + + + ID, 'horse_ages', '', '
                  ', '')): ?> +
                  +

                  :

                  +
                  + ID, 'horse_ages', '', '
                  ', ''); ?> +
                  +
                  + + + ID, 'horse_tags', '', '
                  ', '')): ?> +
                  +

                  :

                  +
                  + ID, 'horse_tags', '', '
                  ', ''); ?> +
                  +
                  + + +
                  + + + + + +

                  + + + + +
                  + + <?php echo get_post_meta($attachment_new_id, '_wp_attachment_image_alt', true); ?> + +
                  + +
                  + + + ID, 'pyre_video', true)): ?> +

                  + ID, 'pyre_video', true)): ?> +
                  + ID, 'pyre_video', true); ?> +
                  + +
                  + + + +
                  +
                  +

                  + +
                  +
                  +
                  + + + ID, $data['number_related_posts']); ?> + have_posts() && get_post_meta($post->ID, 'pyre_related_posts', true) != 'no'): ?> + + +
                  + + + +
                  + '%link', 'link' => __('Previous', 'double-r-group'), 'in_same_tax' => 'horse_categories', 'in_cats' => $nav_categories, 'return' => 'href')); + } else { + $previous_post_link = previous_post_link_plus(array('format' => '%link', 'link' => __('Previous', 'double-r-group'), 'return' => 'href')); + } + ?> + + + + '%link', 'link' => __('Next', 'double-r-group'), 'in_same_tax' => 'horse_categories', 'in_cats' => $nav_categories, 'return' => 'href')); + } else { + $next_post_link = next_post_link_plus(array('format' => '%link', 'link' => __('Next', 'double-r-group'), 'return' => 'href')); + } + ?> + + + +
                  + + + +
                  + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/single.php b/src/wp-content/themes/double-r-group/single.php new file mode 100644 index 0000000..3ba614a --- /dev/null +++ b/src/wp-content/themes/double-r-group/single.php @@ -0,0 +1,393 @@ + + ID, 'pyre_full_width', true) == 'yes') { + $content_css = 'width:100%'; + $sidebar_css = 'display:none'; + $content_class= 'full-width'; + } + elseif(get_post_meta($post->ID, 'pyre_sidebar_position', true) == 'left') { + $content_css = 'float:right;'; + $sidebar_css = 'float:left;'; + } elseif(get_post_meta($post->ID, 'pyre_sidebar_position', true) == 'right') { + $content_css = 'float:left;'; + $sidebar_css = 'float:right;'; + } elseif(get_post_meta($post->ID, 'pyre_sidebar_position', true) == 'default') { + if($data['default_sidebar_pos'] == 'Left') { + $content_css = 'float:right;'; + $sidebar_css = 'float:left;'; + } elseif($data['default_sidebar_pos'] == 'Right') { + $content_css = 'float:left;'; + $sidebar_css = 'float:right;'; + } + } + + if($data['single_post_full_width']) { + $content_css = 'width:100%'; + $sidebar_css = 'display:none'; + $content_class= 'full-width'; + } + ?> +
                  + + + + +
                  > + +

                  + + + ID, 'pyre_video', true)): ?> + + 'attachment', + 'numberposts' => $data['posts_slideshow_number']-1, + 'post_status' => null, + 'post_parent' => $post->ID, + 'orderby' => 'menu_order', + 'order' => 'ASC', + 'post_mime_type' => 'image', + 'exclude' => get_post_thumbnail_id() + ); + $attachments = get_posts($args); + if((has_post_thumbnail() || get_post_meta($post->ID, 'pyre_video', true))): + ?> +
                  + +
                    + + ID, 'pyre_video', true)): ?> +
                  • +
                    + ID, 'pyre_video', true); ?> +
                    +
                  • + + + + +
                  • + <?php echo get_post_meta(get_post_thumbnail_id(), '_wp_attachment_image_alt', true); ?> +
                  • + + + ID, 'pyre_video', true)): ?> +
                  • +
                    + ID, 'pyre_video', true); ?> +
                    +
                  • + + ID, 'pyre_video', true)): ?> + + + +
                  • + <?php echo get_post_meta(get_post_thumbnail_id(), '_wp_attachment_image_alt', true); ?> +
                  • + + + ID, 'full'); ?> + ID, 'full'); ?> + ID); ?> +
                  • + <?php echo get_post_meta($attachment->ID, '_wp_attachment_image_alt', true); ?> +
                  • + + +
                  +
                  +
                  + + + ID, 'pyre_video', true))): + ?> +
                  + +
                    + + ID, 'pyre_video', true)): ?> +
                  • +
                    + ID, 'pyre_video', true); ?> +
                    +
                  • + + + + +
                  • + <?php echo get_post_meta(get_post_thumbnail_id(), '_wp_attachment_image_alt', true); ?> +
                  • + + + ID, 'pyre_video', true)): ?> +
                  • +
                    + ID, 'pyre_video', true); ?> +
                    +
                  • + + + + + +
                  • + <?php echo get_post_meta(get_post_thumbnail_id(), '_wp_attachment_image_alt', true); ?> +
                  • + + + + + +
                  • + <?php echo get_post_meta($attachment_new_id, '_wp_attachment_image_alt', true); ?> +
                  • + + +
                  +
                  +
                  + + + + +
                  + + +
                  + +
                  +
                  + ||| +
                  +
                  + + + + + + +
                  +

                  +
                  +
                  + +
                  +
                  + +
                  +
                  +
                  + + + +
                  + + +
                  + + + + ID, $data['number_related_posts']); ?> + have_posts() && get_post_meta($post->ID, 'pyre_related_posts', true) != 'no'): ?> + + + + + + + + +
                  + +
                  + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/style.css b/src/wp-content/themes/double-r-group/style.css new file mode 100644 index 0000000..3769726 --- /dev/null +++ b/src/wp-content/themes/double-r-group/style.css @@ -0,0 +1,351 @@ +/* +Theme Name: Double R Group +Description: Double R Group Theme +Author: Double R Group +Template: Avada +*/ + +@import url("../avada/style.css"); + +/* COLORES Y FUENTES */ +h1 { font-weight: bold; } +h2 { font-weight: normal; } +h3 { font-weight: bold; } +h4 { font-weight: normal; text-transform: uppercase;} +h5 { font-weight: bold; text-transform: uppercase;} +h6 { font-weight: bold; } + +.header-drg #small-nav {background-color: #395B7B !important; border-bottom-color:#395B7B !important;} + +.header-drg #small-nav #nav ul li ul li a { font-family:"PT Sans", Arial, Helvetica, sans-serif !important; } + +#wrapper #nav ul li ul li a:hover, #wrapper #nav ul li ul li.current-menu-item a, +#wrapper #sticky-nav ul li ul li a:hover, #wrapper #sticky-nav ul li ul li.current-menu-item a, +#header .cart-content a:hover, #small-nav .cart-content a:hover { + color: #395B7B !important; +} + +#nav ul ul, #sticky-nav ul ul { + border-color: #B4C2CD !important; +} + +img[class*="wp-image"], +img[class^="wp-image"], +.featured-image, +.avatar, +.zoom-picture, +.attachment-thumbnail, +.video, +.recent-posts time { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + box-sizing: border-box; + border: 5px solid #fff; + -webkit-box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.25); + box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.25); +} + +img[class*="wp-image"], +img[class^="wp-image"]{ + border: 5px solid #fff !important; + position: relative; + z-index: 1; +} + +/* HEADER */ + +.header-wrapper .header-drg .main-nav-search-form input#s { + width:150px; +} +.header-drg .header-social{background-color:#a0ce4e;} +.header-drg .header-social .alignleft,.header-v3 .header-social .alignleft a,.header-drg .header-social .alignright .menu li a{color:#fff !important;} + +.header-drg #header{border-bottom:1px solid #e1e1e1;} +.header-drg #header{padding:30px 0px;} +.header-drg #header .logo{margin:0;} +.header-drg #header .tagline{float:left; margin:0 0 0 20px; padding:0; line-height:32px; text-align:left;} +.header-drg #header .search{width:270px; float:right;margin-left:15px !important;} + +.header-drg #small-nav { } +.header-drg #nav {float:left;} +.header-drg #nav ul a, .header-drg #navigation li.current-menu-ancestor a {border-top:0; padding-top:3px;} +.header-drg #navigation li:last-child{padding-right:0;} + +.header-wrapper .header-drg #s{width: 268px;} + +.header-drg #nav-uber #megaMenu { + margin-top:0; + margin-bottom:0; + float:left; +} +.header-drg #nav-uber #megaMenu.megaMenuVertical { + margin-left:0; +} + +.header-drg .header-social {background-color:#a0ce4e; display: none;} +.header-drg .header-social .alignleft, .header-drg .header-social .alignleft a, .header-drg .header-social .alignright .menu li a{color:#fff !important;} +.header-drg .header-social .social-networks li{float:right;} +.header-drg .header-social .alignright .menu, .header-drg .header-social .alignright .menu ul{list-style:none; margin:0; padding:0;} +.header-drg .header-social .alignright .menu li:first-child{border-left:0;} + + +/* SIDEBAR */ +#sidebar .widget .heading, .project-content .project-info .heading { margin-bottom: 20px;} +#sidebar .widget h3, .project-content .project-info .heading h3 { margin-bottom: 10px !important;} +#sidebar .widget h3, #sidebar .widget .heading h3, .project-content .project-info .heading h3 { + text-transform: uppercase; + font-weight: bold !important; +} +#sidebar .widget li a, #sidebar .widget .recentcomments, +#sidebar .widget_categories li { + border-bottom: none; + padding: 0px; +} +#sidebar .widget_categories li.current-cat a { font-weight: bold; } + + +/* WPML */ +.header-drg #lang_sel { + display: inline-block; + float: right; +} +.header-drg #lang_sel a, .header-drg #lang_sel a:visited { + display: inline-block; + border: none; + background: none; + padding-left: 5px; +} + +.header-drg .retina_flag { display:none; } + +/* SOCIAL NETWORKS */ +.header-drg #small-nav .social-networks {margin-top: -10px;} +.header-drg #small-nav .social-networks li{margin-left:10px; margin-right:0;} +.header-drg #small-nav .social-networks img {} +.header-drg #small-nav .social-networks a{opacity:1; width:40px; height:92px; position:relative; z-index:999;} +.header-drg #small-nav .social-networks a:hover{opacity:1;} + +.header-drg #small-nav .social-networks .facebook a{background:url(images/social/social-icons.png) -40px 0 !important; } +.header-drg #small-nav .social-networks .twitter a{background:url(images/social/social-icons.png) -80px 0 !important; } +.header-drg #small-nav .social-networks .linkedin a{} +.header-drg #small-nav .social-networks .rss a{background:url(images/social/social-icons.png) -120px 0 !important; } +.header-drg #small-nav .social-networks .dribbble a{background:url(images/social/social-icons.png) 40px 0 !important; } +.header-drg #small-nav .social-networks .youtube a{background:url(images/social/social-icons.png) 0 0 !important; } +.header-drg #small-nav .social-networks .pinterest a{} +.header-drg #small-nav .social-networks .vimeo a{background:url(images/social/social-icons.png) -160px 0 !important; } +.header-drg #small-nav .social-networks .flickr a{} +.header-drg #small-nav .social-networks .tumblr a{} +.header-drg #small-nav .social-networks .google a{} +.header-drg #small-nav .social-networks .digg a{background:url(images/social/social-icons.png) 161px 0 !important; } +.header-drg #small-nav .social-networks .blogger a{} +.header-drg #small-nav .social-networks .skype a{background:url(images/social/social-icons.png) -200px 0 !important; } +.header-drg #small-nav .social-networks .myspace a{} +.header-drg #small-nav .social-networks .deviantart a{} +.header-drg #small-nav .social-networks .yahoo a{} +.header-drg #small-nav .social-networks .reddit a{} +.header-drg #small-nav .social-networks .forrst a{} +.header-drg #small-nav .social-networks .email a{} + + +/* FOOTER */ +.footer-area { border-top: none; } + +#footer { + padding-top: 12px !important; + padding-bottom: 0 !important; +} + +#footer .copyright { + background: url("images/Logo-RR-footer.png") no-repeat center left; + padding-left: 185px; + position: absolute; +} + +/* CONTENT */ + +.columns{ + overflow:visible; + margin: 0 0 10px; +} + +.col .heading { + overflow: visible; +} + +.title, .heading { + position: relative; + border-bottom-style: solid; + border-bottom-width: 1px; + border-bottom-color: rgba( 30,30,30,.2); +} + +.title { + padding-bottom: 10px; +} + +.title:after, .heading:after { + content: ''; + width: 70px; + height: 0px; + border-top-style: solid; + border-top-width: 4px; + position: absolute; + left: 0; + bottom: 0; + border-color: #395B7B; +} + +.heading:after { + text-align: center; + position: relative; + display: block; +} + +#main #content .heading:after { + margin: 0 auto; +} + +#main .columns .heading h2 { + font-weight: bold; + text-transform: uppercase; + font-size: 14px !important; +} + +.title-sep { + display: none; + border: none; +} + +.post-content h2, .title h2, #main .post-content .title h2, .page-title h1, #main .post h2 a { +} + +.share-box { height: 55px; } +.share-box span { margin-top: 20px; margin-left: 20px; display: inline-block;} +.share-box ul { margin-top: 20px; } + +.image{ overflow:visible; } + +.es-carousel ul li h5, clients-carousel .es-carousel ul li h5 { + text-align: center; +} + + +/* FORMS */ + +.wpcf7-form input[type="submit"],.comment-form input[type="submit"] { font-weight: normal !important; } + +.gform_wrapper .gfield input[type=text]:focus, +.gform_wrapper .gfield textarea:focus { + border-color:#395B7B; + outline:0; + -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(41, 94, 129, 0.6); + box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(41, 94, 129, 0.6); +} + +/* PORTFOLIO */ +.portfolio-item .portfolio-content { + text-align: center; +} + +.portfolio-item .portfolio-content .heading { + margin-bottom: 20px; +} + +.project-content{ + overflow:visible; + display:inline; +} +.project-content .project-description{ + float:right; + width:58%; +} +.project-content .project-info{ + float:left; + width:37%; +} + +.project-content .project-info .heading { + margin-top: 30px; +} + +.project-content .project-info .heading:after { + margin: 0 !important; +} + +.project-content .project-info .imageframe img{border:6px solid #f6f6f6;} +.project-content .project-info .imageframe-glow img{ + -moz-box-shadow: 0 0 3px rgba(0,0,0,.3); /* outer glow */ + -webkit-box-shadow: 0 0 3px rgba(0,0,0,.3); /* outer glow */ + box-shadow: 0 0 3px rgba(0,0,0,.3); /* outer glow */ +} + + +/* MEDIA QUERIES */ + +@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { + /* Retina */ + + #footer .copyright { + background: url("images/Logo-RR-footer@2x.png") no-repeat center left; + background-size: 156px 27px; + } +} + +/* RTL */ + +.rtl .header-drg #nav{float:right;} +.rtl .header-drg #small-nav ul#navigation > li {padding-right:0;padding-left:35px;float:right;} +.rtl .header-drg #header .tagline{float:left; text-align:left !important;} +.rtl .header-drg #header .search{float:left; margin-left:0 !important; margin-right:15px !important;} + + +/* EFECTO BORDER VARIAS FOTOS */ + +.photo-frame{ + margin-bottom: 15px; + position: relative; +} +.photo-frame:before { + content: ""; + height: 100%; width: 100%; + background: #eff4de; + border: 5px solid #fff; + position: absolute; + z-index: 0; + top: 0px; + left: -10px; + -webkit-box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.25); + box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.25); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-transform: rotate(-2deg); + -moz-transform: rotate(-2deg); + -o-transform: rotate(-2deg); + -ms-transform: rotate(-2deg); + transform: rotate(-2deg); + box-sizing: border-box; +} +.photo-frame:after { + content: ""; + height: 100%; width: 100%; + background: #768590; + border: 5px solid #fff; + position: absolute; + z-index: 0; + top: 3px; + left: 0px; + -webkit-box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.25); + box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.25); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-transform: rotate(3deg); + -moz-transform: rotate(3deg); + -o-transform: rotate(3deg); + -ms-transform: rotate(3deg); + transform: rotate(3deg); + box-sizing: border-box; +} + diff --git a/src/wp-content/themes/double-r-group/taxonomy-horse_ages.php b/src/wp-content/themes/double-r-group/taxonomy-horse_ages.php new file mode 100644 index 0000000..6033625 --- /dev/null +++ b/src/wp-content/themes/double-r-group/taxonomy-horse_ages.php @@ -0,0 +1,24 @@ + + diff --git a/src/wp-content/themes/double-r-group/taxonomy-horse_breeds.php b/src/wp-content/themes/double-r-group/taxonomy-horse_breeds.php new file mode 100644 index 0000000..6033625 --- /dev/null +++ b/src/wp-content/themes/double-r-group/taxonomy-horse_breeds.php @@ -0,0 +1,24 @@ + + diff --git a/src/wp-content/themes/double-r-group/taxonomy-horse_categories.php b/src/wp-content/themes/double-r-group/taxonomy-horse_categories.php new file mode 100644 index 0000000..fcf26e5 --- /dev/null +++ b/src/wp-content/themes/double-r-group/taxonomy-horse_categories.php @@ -0,0 +1,121 @@ +slug) { + case 'cria': + $thumbnail_size = 'portfolio-three'; + $thumbnail_generic = get_stylesheet_directory_uri() . '/images/silueta-cuerpo-caballo.png'; + break; + default: + $thumbnail_size = 'portfolio-three-vertical'; + $thumbnail_generic = get_stylesheet_directory_uri() . '/images/silueta-cabeza-caballo.png'; + break; +} +?> + +
                  + +
                  > +
                  + +
                  +
                  + +
                  + + ID, 'horse_categories'); + if ($item_cats): + foreach ($item_cats as $item_cat) { + $item_classes .= $item_cat->slug . ' '; + } + endif; + ?> +
                  +
                  + + + + 'wp-image')); ?> + + <?php the_title(); ?> + + + + +
                  +
                  + ID), 'full'); ?> + Permalink + ID, 'pyre_video_url', true)) { + $full_image[0] = get_post_meta($post->ID, 'pyre_video_url', true); + } + ?> + <?php echo get_post_meta(get_post_thumbnail_id($post->ID), '_wp_attachment_image_alt', true); ?>Gallery + +

                  >

                  + +

                  >

                  + +
                  +
                  + +
                  +
                  + +
                  +
                  +

                  +
                  +

                  ID, 'horse_categories', '', ', ', ''); ?>

                  + +
                  + +
                  + +
                  + + ID, 'pyre_project_url', true)): ?> + + +
                  + +
                  + + +
                  + +
                  + +
                  + max_num_pages, $range = 2); ?> +
                  + + \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/taxonomy-horse_genders.php b/src/wp-content/themes/double-r-group/taxonomy-horse_genders.php new file mode 100644 index 0000000..6033625 --- /dev/null +++ b/src/wp-content/themes/double-r-group/taxonomy-horse_genders.php @@ -0,0 +1,24 @@ + + diff --git a/src/wp-content/themes/double-r-group/taxonomy-horse_tags.php b/src/wp-content/themes/double-r-group/taxonomy-horse_tags.php new file mode 100644 index 0000000..6033625 --- /dev/null +++ b/src/wp-content/themes/double-r-group/taxonomy-horse_tags.php @@ -0,0 +1,24 @@ + + diff --git a/src/wp-content/themes/double-r-group/template-caballos-competicion.php b/src/wp-content/themes/double-r-group/template-caballos-competicion.php new file mode 100644 index 0000000..e45c172 --- /dev/null +++ b/src/wp-content/themes/double-r-group/template-caballos-competicion.php @@ -0,0 +1,37 @@ +ID, 'pyre_portfolio_full_width', true) == 'yes') { + $content_css = 'width:100%'; + $sidebar_css = 'display:none'; +} +elseif(get_post_meta($post->ID, 'pyre_portfolio_sidebar_position', true) == 'left') { + $content_css = 'float:right;'; + $sidebar_css = 'float:left;'; + $content_class = 'portfolio-three-sidebar'; +} elseif(get_post_meta($post->ID, 'pyre_portfolio_sidebar_position', true) == 'right') { + $content_css = 'float:left;'; + $sidebar_css = 'float:right;'; + $content_class = 'portfolio-three-sidebar'; +} elseif(get_post_meta($post->ID, 'pyre_sidebar_position', true) == 'default') { + $content_class = 'portfolio-three-sidebar'; + if($data['default_sidebar_pos'] == 'Left') { + $content_css = 'float:right;'; + $sidebar_css = 'float:left;'; + } elseif($data['default_sidebar_pos'] == 'Right') { + $content_css = 'float:left;'; + $sidebar_css = 'float:right;'; + } +} + +$portfolio_layout = 'portfolio-three portfolio-three-text'; +$thumbnail_size = 'portfolio-three-vertical'; +$thumbnail_generic = get_stylesheet_directory_uri() . '/images/silueta-cabeza-caballo.png'; +$category_horse = + +include_once 'partials/horse-list.php'; + +?> \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/template-caballos-cria.php b/src/wp-content/themes/double-r-group/template-caballos-cria.php new file mode 100644 index 0000000..055730a --- /dev/null +++ b/src/wp-content/themes/double-r-group/template-caballos-cria.php @@ -0,0 +1,37 @@ +ID, 'pyre_portfolio_full_width', true) == 'yes') { + $content_css = 'width:100%'; + $sidebar_css = 'display:none'; +} +elseif(get_post_meta($post->ID, 'pyre_portfolio_sidebar_position', true) == 'left') { + $content_css = 'float:right;'; + $sidebar_css = 'float:left;'; + $content_class = 'portfolio-three-sidebar'; +} elseif(get_post_meta($post->ID, 'pyre_portfolio_sidebar_position', true) == 'right') { + $content_css = 'float:left;'; + $sidebar_css = 'float:right;'; + $content_class = 'portfolio-three-sidebar'; +} elseif(get_post_meta($post->ID, 'pyre_sidebar_position', true) == 'default') { + $content_class = 'portfolio-three-sidebar'; + if($data['default_sidebar_pos'] == 'Left') { + $content_css = 'float:right;'; + $sidebar_css = 'float:left;'; + } elseif($data['default_sidebar_pos'] == 'Right') { + $content_css = 'float:left;'; + $sidebar_css = 'float:right;'; + } +} + +$portfolio_layout = 'portfolio-three portfolio-three-text'; +$thumbnail_size = 'portfolio-three'; +$thumbnail_generic = get_stylesheet_directory_uri() . '/images/silueta-cuerpo-caballo.png'; + +include_once 'partials/horse-list.php'; + + +?> \ No newline at end of file diff --git a/src/wp-content/themes/double-r-group/wpml-config.xml b/src/wp-content/themes/double-r-group/wpml-config.xml new file mode 100644 index 0000000..06010d0 --- /dev/null +++ b/src/wp-content/themes/double-r-group/wpml-config.xml @@ -0,0 +1,12 @@ + + + drg_horse + + + horse_categories + horse_breeds + horse_ages + horse_genders + horse_tags + + diff --git a/src/wp-content/themes/index.php b/src/wp-content/themes/index.php new file mode 100644 index 0000000..4e6c07c --- /dev/null +++ b/src/wp-content/themes/index.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/wp-content/uploads/drg.css b/src/wp-content/uploads/drg.css new file mode 100644 index 0000000..c32e9dc --- /dev/null +++ b/src/wp-content/uploads/drg.css @@ -0,0 +1,902 @@ +a:hover, .tooltip-shortcode{ + color:#395b7b; +} +#nav ul .current_page_item a, #nav ul .current-menu-item a, #nav ul > .current-menu-parent a, +#sticky-nav ul .current_page_item a, #sticky-nav ul .current-menu-item a, #sticky-nav ul > .current-menu-parent a, +.footer-area ul li a:hover, +#slidingbar-area ul li a:hover, +.portfolio-tabs li.active a, .faq-tabs li.active a, +.project-content .project-info .project-info-box a:hover, +.about-author .title a, +span.dropcap,.footer-area a:hover,#slidingbar-area a:hover,.copyright a:hover, +#sidebar .widget_categories li a:hover, +#main .post h2 a:hover, +#sidebar .widget li a:hover, +#nav ul a:hover, #sticky-nav ul a:hover, +.date-and-formats .format-box i, +h5.toggle:hover a, +.tooltip-shortcode,.content-box-percentage, +.more a:hover:after,.read-more:hover:after,.pagination-prev:hover:before,.pagination-next:hover:after,.bbp-topic-pagination .prev:hover:before,.bbp-topic-pagination .next:hover:after, +.single-navigation a[rel=prev]:hover:before,.single-navigation a[rel=next]:hover:after, +#sidebar .widget_nav_menu li a:hover:before,#sidebar .widget_categories li a:hover:before, +#sidebar .widget .recentcomments:hover:before,#sidebar .widget_recent_entries li a:hover:before, +#sidebar .widget_archive li a:hover:before,#sidebar .widget_pages li a:hover:before, +#sidebar .widget_links li a:hover:before,.side-nav .arrow:hover:after,.woocommerce-tabs .tabs a:hover .arrow:after, +.star-rating:before,.star-rating span:before,.price ins .amount, +.price > .amount,.woocommerce-pagination .prev:hover,.woocommerce-pagination .next:hover,.woocommerce-pagination .prev:hover:before,.woocommerce-pagination .next:hover:after, +.woocommerce-tabs .tabs li.active a,.woocommerce-tabs .tabs li.active a .arrow:after, +#wrapper .cart-checkout a:hover,#wrapper .cart-checkout a:hover:before, +.widget_shopping_cart_content .total .amount,.widget_layered_nav li a:hover:before, +.widget_product_categories li a:hover:before,#header .my-account-link-active:after,.woocommerce-side-nav li.active a,.woocommerce-side-nav li.active a:after,.my_account_orders .order-number a,.shop_table .product-subtotal .amount, +.cart_totals .total .amount,form.checkout .shop_table tfoot .total .amount,#final-order-details .mini-order-details tr:last-child .amount,.rtl .more a:hover:before,.rtl .read-more:hover:before,#header .my-cart-link-active:after,#wrapper #sidebar .current_page_item > a,#wrapper #sidebar .current-menu-item > a,#wrapper #sidebar .current_page_item > a:before,#wrapper #sidebar .current-menu-item > a:before,#wrapper .footer-area .current_page_item > a,#wrapper .footer-area .current-menu-item > a,#wrapper .footer-area .current_page_item > a:before,#wrapper .footer-area .current-menu-item > a:before,#wrapper #slidingbar-area .current_page_item > a,#wrapper #slidingbar-area .current-menu-item > a,#wrapper #slidingbar-area .current_page_item > a:before,#wrapper #slidingbar-area .current-menu-item > a:before,.side-nav ul > li.current_page_item > a,.side-nav li.current_page_ancestor > a, +.gform_wrapper span.ginput_total,.gform_wrapper span.ginput_product_price,.ginput_shipping_price, +.bbp-topics-front ul.super-sticky a:hover, .bbp-topics ul.super-sticky a:hover, .bbp-topics ul.sticky a:hover, .bbp-forum-content ul.sticky a:hover{ + color:#395b7b !important; +} +#sidebar .image .image-extras .image-extras-content a:hover { color: #333333 !important; } +.star-rating:before,.star-rating span:before { + color:#395b7b !important; +} +.tagcloud a:hover,#slidingbar-area .tagcloud a:hover,.footer-area .tagcloud a:hover{ color: #FFFFFF !important; text-shadow: none !important; -moz-text-shadow: none !important; -webkit-text-shadow: none !important; } +#nav ul .current_page_item a, #nav ul .current-menu-item a, #nav ul > .current-menu-parent a, +#sticky-nav ul .current_page_item a, #sticky-nav ul .current-menu-item a, #sticky-nav ul > .current-menu-parent a, +#nav ul ul,#sticky-nav ul ul,#navigation li.current-menu-ancestor a, +.reading-box, +.portfolio-tabs li.active a, .faq-tabs li.active a, +.tab-holder .tabs li.active a, +.post-content blockquote, +.progress-bar-content, +.pagination .current, +.bbp-topic-pagination .current, +.pagination a.inactive:hover, +.woocommerce-pagination .page-numbers:hover, +#nav ul a:hover,#sticky-nav ul a:hover,.woocommerce-pagination .current, +.tagcloud a:hover,#header .my-account-link:hover:after,body #header .my-account-link-active:after, +#bbpress-forums div.bbp-topic-tags a:hover{ + border-color:#395b7b !important; +} +#navigation li.current-menu-ancestor a { + color: #395b7b !important; +} +.side-nav li.current_page_item a{ + border-right-color:#395b7b !important; +} +.rtl .side-nav li.current_page_item a{ + border-left-color:#395b7b !important; +} +.header-v2 .header-social, .header-v3 .header-social, .header-v4 .header-social,.header-v5 .header-social,.header-v2{ + border-top-color:#395b7b !important; +} +h5.toggle.active span.arrow, +.post-content ul.circle-yes li:before, +.progress-bar-content, +.pagination .current, +.bbp-topic-pagination .current, +.header-v3 .header-social,.header-v4 .header-social,.header-v5 .header-social, +.date-and-formats .date-box,.table-2 table thead, +.onsale,.woocommerce-pagination .current, +.woocommerce .social-share li a:hover i, +.price_slider_wrapper .ui-slider .ui-slider-range, +.tagcloud a:hover,.cart-loading, +#toTop:hover, +#bbpress-forums div.bbp-topic-tags a:hover, +.main-nav-search-form input[type="submit"]:hover, .search-page-search-form input[type="submit"]:hover, +ul.arrow li:before, +p.demo_store { + background-color:#395b7b !important; +} +.bbp-topics-front ul.super-sticky, .bbp-topics ul.super-sticky, .bbp-topics ul.sticky, .bbp-forum-content ul.sticky { + background-color: #ffffe8 !important; + opacity: 1; +} + + + #header .my-cart-link:after, #header a.search-link:after, + #small-nav .my-cart-link:after, #small-nav a.search-link:after{ border: none !important; } + + + + + +body #header.sticky-header .sticky-shadow{background:rgba(255, 255, 255, 0.97) !important;} +.no-rgba #header.sticky-header .sticky-shadow{background:#ffffff; filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=97); opacity: 0.97;} + + +#header,#small-nav,#header .login-box,#header .cart-contents,#small-nav .login-box,#small-nav .cart-contents{ + background-color:#ffffff !important; +} + +#main,#wrapper{ + background-color:#ffffff !important; +} + +.footer-area{ + background-color:#ffffff !important; +} +.footer-area .pyre_tabs .tab-holder .tabs li { + border-color:#ffffff !important; +} + +.footer-area{ + border-color:#ffffff !important; +} + +#footer{ + background-color:#1f1f1f !important; +} + +#footer{ + border-color:#242424 !important; +} + +.sep-boxed-pricing ul li.title-row{ + background-color:#62a2c4 !important; + border-color:#62a2c4 !important; +} +.pricing-row .exact_price, .pricing-row sup{ + color:#62a2c4 !important; +} +.image .image-extras{ + background-image: linear-gradient(top, rgba(57,91,123,1) 0%, rgba(57,91,123,1) 100%); + background-image: -o-linear-gradient(top, rgba(57,91,123,1) 0%, rgba(57,91,123,1) 100%); + background-image: -moz-linear-gradient(top, rgba(57,91,123,1) 0%, rgba(57,91,123,1) 100%); + background-image: -webkit-linear-gradient(top, rgba(57,91,123,1) 0%, rgba(57,91,123,1) 100%); + background-image: -ms-linear-gradient(top, rgba(57,91,123,1) 0%, rgba(57,91,123,1) 100%); + + background-image: -webkit-gradient( + linear, + left top, + left bottom, + color-stop(0, rgba(57,91,123,1)), + color-stop(1, rgba(57,91,123,1)) + ); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#395b7b', endColorstr='#395b7b') + progid: DXImageTransform.Microsoft.Alpha(Opacity=0); +} +.no-cssgradients .image .image-extras{ + background:#395b7b; +} +.image:hover .image-extras { + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#395b7b', endColorstr='#395b7b') + progid: DXImageTransform.Microsoft.Alpha(Opacity=100); + } +#main .portfolio-one .button, +#main .comment-submit, +#reviews input#submit, +.comment-form input[type="submit"], +.wpcf7-form input[type="submit"], +.bbp-submit-wrapper button, +.button.default, +.price_slider_amount button, +.gform_wrapper .gform_button{ + background: #395b7b; + + color: #ebeaea !important; + background-image: linear-gradient(top, #395b7b 0%, #395b7b 100%); + background-image: -o-linear-gradient(top, #395b7b 0%, #395b7b 100%); + background-image: -moz-linear-gradient(top, #395b7b 0%, #395b7b 100%); + background-image: -webkit-linear-gradient(top, #395b7b 0%, #395b7b 100%); + background-image: -ms-linear-gradient(top, #395b7b 0%, #395b7b 100%); + + background-image: -webkit-gradient( + linear, + left top, + left bottom, + color-stop(0, #395b7b), + color-stop(1, #395b7b) + ); + border:1px solid #395b7b; + + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#395b7b', endColorstr='#395b7b'); +} +.no-cssgradients #main .portfolio-one .button, +.no-cssgradients #main .comment-submit, +.no-cssgradients #reviews input#submit, +.no-cssgradients .comment-form input[type="submit"], +.no-cssgradients .wpcf7-form input[type="submit"], +.no-cssgradients .bbp-submit-wrapper button, +.no-cssgradients .button.default, +.no-cssgradients .price_slider_amount button, +.no-cssgradients .gform_wrapper .gform_button{ + background:#395b7b; +} +#main .portfolio-one .button:hover, +#main .comment-submit:hover, +#reviews input#submit:hover, +.comment-form input[type="submit"]:hover, +.wpcf7-form input[type="submit"]:hover, +.bbp-submit-wrapper button:hover, +.button.default:hover, +.price_slider_amount button:hover, +.gform_wrapper .gform_button:hover{ + background: #395b7b; + color: #ebeaea !important; + background-image: linear-gradient(top, #395b7b 0%, #395b7b 100%); + background-image: -o-linear-gradient(top, #395b7b 0%, #395b7b 100%); + background-image: -moz-linear-gradient(top, #395b7b 0%, #395b7b 100%); + background-image: -webkit-linear-gradient(top, #395b7b 0%, #395b7b 100%); + background-image: -ms-linear-gradient(top, #395b7b 0%, #395b7b 100%); + + background-image: -webkit-gradient( + linear, + left top, + left bottom, + color-stop(0, #395b7b), + color-stop(1, #395b7b) + ); + border:1px solid #395b7b; + + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#395b7b', endColorstr='#395b7b'); +} +.no-cssgradients #main .portfolio-one .button:hover, +.no-cssgradients #main .comment-submit:hover, +.no-cssgradients #reviews input#submit:hover, +.no-cssgradients .comment-form input[type="submit"]:hover, +.no-cssgradients .wpcf7-form input[type="submit"]:hover, +.no-cssgradients .bbp-submit-wrapper button:hover, +.no-cssgradients .button.default, +.no-cssgradients .price_slider_amount button:hover, +.no-cssgradients .gform_wrapper .gform_button{ + background:#395b7b; +} + +.page-title-container{border-color:#d2d3d4 !important;} + +.footer-area{ + background-image:url(http://127.0.0.1:4001/wordpress/wp-content/uploads/2014/01/footer.png); + background-repeat:repeat-x; + background-position:top left; + + + + } + +#footer{ + padding-top: 18 !important; + + padding-bottom: 18 !important; + } + +.fontawesome-icon.circle-yes{ + background-color:#333333 !important; +} + +.fontawesome-icon.circle-yes{ + border-color:#333333 !important; +} + +.fontawesome-icon{ + color:#ffffff !important; +} + +.title-sep,.product .product-border{ + border-color:#e0dede !important; +} + +.review blockquote q,.post-content blockquote,form.checkout .payment_methods .payment_box{ + background-color:#f6f6f6 !important; +} +.review blockquote div:after{ + border-top-color:#f6f6f6 !important; +} + +.review blockquote q,.post-content blockquote{ + color:#747474 !important; +} + + + +body,#nav ul li ul li a,#sticky-nav ul li ul li a +.more, +.avada-container h3, +.meta .date, +.review blockquote q, +.review blockquote div strong, +.image .image-extras .image-extras-content h4, +.image .image-extras .image-extras-content h4 a, +.project-content .project-info h4, +.post-content blockquote, +.button.large, +.button.small, +.ei-title h3,.cart-contents, +.page-title h3, +.blog-shortcode h3.timeline-title{ + font-family:"Droid Serif", Arial, Helvetica, sans-serif !important; +} +.avada-container h3, +.review blockquote div strong, +.footer-area h3, +#slidingbar-area h3, +.button.large, +.button.small, +.comment-form input[type="submit"], +.wpcf7-form input[type="submit"], +.gform_wrapper .gform_button{ + font-weight:bold; +} +.meta .date, +.review blockquote q, +.post-content blockquote{ + font-style:italic; +} + + +#nav, #sticky-nav, #navigation, +.side-nav li a{ + font-family:"Roboto", Arial, Helvetica, sans-serif !important; +} + + +h1, h2, h3, h4, h5, h6, +#main .reading-box h2, +#main h2, +.page-title h1, +.image .image-extras .image-extras-content h3, +#main .post h2, +#sidebar .widget h3, +.project-content .project-info .heading h3, +.tab-holder .tabs li a, +.share-box h4, +.project-content h3, +.author .author_title, +h5.toggle a, +.full-boxed-pricing ul li.title-row, +.full-boxed-pricing ul li.pricing-row, +.sep-boxed-pricing ul li.title-row, +.sep-boxed-pricing ul li.pricing-row, +.person-author-wrapper, +.post-content h1, .post-content h2, .post-content h3, .post-content h4, .post-content h5, .post-content h6, +.ei-title h2, #header .tagline, +table th,.project-content .project-info h4, +.woocommerce-success-message .msg,.product-title, +.comment-form input[type="submit"], .gform_button, +.wpcf7-form input[type="submit"], +.gform_wrapper .gform_button, +.woocommerce-success-message .button { + font-family:"Roboto", Arial, Helvetica, sans-serif !important; +} + + +.footer-area h3,#slidingbar-area h3{ + font-family:"Roboto", Arial, Helvetica, sans-serif !important; +} + +body,#sidebar .slide-excerpt h2, .footer-area .slide-excerpt h2,#slidingbar-area .slide-excerpt h2{ + font-size:14px; + line-height:21px; +} +.project-content .project-info h4,.gform_wrapper label,.gform_wrapper .gfield_description{ + font-size:14px !important; + line-height:21px !important; +} +.blog-shortcode h3.timeline-title { font-size:14px;line-height:14px; } +.counter-box-content { font-size:14px; } + +body,#sidebar .slide-excerpt h2, .footer-area .slide-excerpt h2,#slidingbar-area .slide-excerpt h2{ + line-height:21px !important; +} +.project-content .project-info h4{ + line-height:21px !important; +} + +#nav,#sticky-nav,#navigation{font-size:16px !important;} + +#nav ul li ul li a,#sticky-nav ul li ul li a{font-size:16px !important;} + +.header-social *{font-size:12px !important;} + +.page-title ul li,page-title ul li a{font-size:14px !important;} + +.side-nav li a{font-size:14px !important;} + +#sidebar .widget h3, .project-content .project-info .heading h3 {font-size:15px !important;} + +#slidingbar-area h3{font-size:13px !important;} + +.footer-area h3{font-size:15px !important;} + +.copyright{font-size:12px !important;} + +#header .avada-row, #main .avada-row, .footer-area .avada-row,#slidingbar-area .avada-row, #footer .avada-row{ max-width:940px; } + +.post-content h1{ + font-size:36px !important; + line-height:54px !important; +} + +.post-content h1{ + line-height:44px !important; +} + +.post-content h2,.title h2,#main .post-content .title h2,.page-title h1,#main .post h2 a{ + font-size:29px !important; + line-height:44px !important; +} + +.post-content h2,.title h2,#main .post-content .title h2,.page-title h1,#main .post h2 a{ + line-height:44px !important; +} + +.post-content h3,.project-content h3,#header .tagline,.product-title{ + font-size:24px !important; + line-height:36px !important; +} +p.demo_store { font-size:24px !important; } + +.post-content h3,.project-content h3,#header .tagline,.product-title{ + line-height:29px !important; +} + +.post-content h4{ + font-size:18px !important; + line-height:27px !important; +} +h5.toggle a,.tab-holder .tabs li a,.share-box h4,.person-author-wrapper{ + font-size:18px !important; +} + +.post-content h4{ + line-height:25px !important; +} + +.post-content h5{ + font-size:15px !important; + line-height:23px !important; +} + +.post-content h5{ + line-height:21px !important; +} + +.post-content h6{ + font-size:15px !important; + line-height:23px !important; +} + +.post-content h6{ + line-height:21px !important; +} + +.ei-title h2{ + font-size:42px !important; + line-height:63px !important; +} + +.ei-title h3{ + font-size:20px !important; + line-height:30px !important; +} + +body,.post .post-content,.post-content blockquote,.tab-holder .news-list li .post-holder .meta,#sidebar #jtwt,.meta,.review blockquote div,.search input,.project-content .project-info h4,.title-row,.simple-products-slider .price .amount,.quantity .qty,.quantity .minus,.quantity .plus,.blog-shortcode h3.timeline-title{color:#333333 !important;} + +.post-content h1,.title h1,.woocommerce-success-message .msg{ + color:#333333 !important; +} + +.post-content h2,.title h2,.woocommerce-tabs h2,.search-page-search-form h2{ + color:#333333 !important; +} + +.post-content h3,#sidebar .widget h3,.project-content h3,.title h3,#header .tagline,.person-author-wrapper span,.product-title{ + color:#333333 !important; +} + +.post-content h4,.project-content .project-info h4,.share-box h4,.title h4,.tab-holder .tabs li a{ + color:#333333 !important; +} + +.post-content h5,h5.toggle a,.title h5{ + color:#333333 !important; +} + +.post-content h6,.title h6{ + color:#333333 !important; +} + +.page-title h1{ + color:#395b7b !important; +} + + +.sep-boxed-pricing ul li.title-row{ + color:#333333 !important; +} + +.full-boxed-pricing ul li.title-row{ + color:#333333 !important; +} + +body a{color:#395b7b;} +.project-content .project-info .project-info-box a,#sidebar .widget li a, #sidebar .widget .recentcomments, #sidebar .widget_categories li, #main .post h2 a, +.shop_attributes tr th,.image-extras a,.products-slider .price .amount,z.my_account_orders thead tr th,.shop_table thead tr th,.cart_totals table th,form.checkout .shop_table tfoot th,form.checkout .payment_methods label,#final-order-details .mini-order-details th,#main .product .product_title{color:#395b7b !important;} + +.page-title ul li,.page-title ul li a{color:#8C8989 !important;} + +#slidingbar-area h3{color:#DDDDDD !important;} + +#slidingbar-area,#slidingbar-area article.col,#slidingbar-area #jtwt,#slidingbar-area #jtwt .jtwt_tweet{color:#8C8989 !important;} + +#slidingbar-area a{color:#BFBFBF !important;} + +#sidebar .widget h3, #sidebar .widget .heading h3, .project-content .project-info .heading h3 {color:#333333 !important;} + +.footer-area h3{color:#B4C2CD !important;} + +.footer-area,.footer-area article.col,.footer-area #jtwt,.footer-area #jtwt .jtwt_tweet,.copyright{color:#666666 !important;} + +.footer-area a,.footer-area .pyre_tabs .tab-holder .tabs li a,.copyright a{color:#B4C2CD !important;} + +#nav ul a,#sticky-nav ul a,.side-nav li a,#header .cart-content a,#header .cart-content a:hover,#small-nav .cart-content a,#small-nav .cart-content a:hover,#wrapper .header-social .top-menu .cart > a,#wrapper .header-social .top-menu .cart > a > .amount{color:#B4C2CD !important;} +#header .my-account-link:after{border-color:#B4C2CD !important;} + +#nav ul .current_page_item a, #nav ul .current-menu-item a, #nav ul > .current-menu-parent a, #nav ul ul,#navigation li.current-menu-ancestor a,#nav ul li a:hover, +#sticky-nav ul .current_page_item a, #sticky-nav ul .current-menu-item a, #sticky-nav ul > .current-menu-parent a, #sticky-nav ul ul,#navigation li.current-menu-ancestor a,#sticky-nav ul li a:hover +{color:#ffffff !important;border-color:#ffffff !important;} +#nav ul ul,#sticky-nav ul ul{border-color:#ffffff !important;} + +#nav ul ul,#sticky-nav ul ul{background-color:#395b7b;} + +#wrapper #nav ul li ul li a,#wrapper #sticky-nav ul li ul li a,.side-nav li li a,.side-nav li.current_page_item li a{color:#B4C2CD !important;} + +.ei-title h2{color:#333333 !important;} + +.ei-title h3{color:#747474 !important;} + +#wrapper .header-social .header-info, #wrapper .header-social a {color:#ffffff !important;} +#wrapper .header-social .mobile-topnav-holder li a {color: #333333 !important;} + +.sep-single{background-color:#e0dede !important;} +.sep-double,.sep-dashed,.sep-dotted,.search-page-search-form{border-color:#e0dede !important;} +.ls-avada, .avada-skin-rev,.clients-carousel .es-carousel li img,h5.toggle a,.progress-bar, +#small-nav,.portfolio-tabs,.faq-tabs,.single-navigation,.project-content .project-info .project-info-box, +.post .meta-info,.grid-layout .post,.grid-layout .post .content-sep, +.grid-layout .post .flexslider,.timeline-layout .post,.timeline-layout .post .content-sep, +.timeline-layout .post .flexslider,h3.timeline-title,.timeline-arrow, +.counter-box-wrapper,.table-2 table thead,.table-2 tr td, +#sidebar .widget li a,#sidebar .widget .recentcomments,#sidebar .widget_categories li, +.tab-holder,.commentlist .the-comment, +.side-nav,#wrapper .side-nav li a,.rtl .side-nav,h5.toggle.active + .toggle-content, +#wrapper .side-nav li.current_page_item li a,.tabs-vertical .tabset, +.tabs-vertical .tabs-container .tab_content,.page-title-container,.pagination a.inactive,.woocommerce-pagination .page-numbers,.bbp-topic-pagination .page-numbers,.rtl .woocommerce .social-share li,.author .author_social{border-color:#e0dede;} +.side-nav li a,.product_list_widget li,.widget_layered_nav li,.price_slider_wrapper,.tagcloud a,#header .cart-content a,#header .cart-content a:hover,#header .login-box,#header .cart-contents,#small-nav .login-box,#small-nav .cart-contents,#small-nav .cart-content a,#small-nav .cart-content a:hover, +#customer_login_box,.myaccount_user,.myaccount_user_container span, +.woocommerce-side-nav li a,.woocommerce-content-box,.woocommerce-content-box h2,.my_account_orders tr,.woocommerce .address h4,.shop_table tr,.cart_totals .total,.chzn-container-single .chzn-single,.chzn-container-single .chzn-single div,.chzn-drop,form.checkout .shop_table tfoot,.input-radio,#final-order-details .mini-order-details tr:last-child,p.order-info,.cart-content a img,.panel.entry-content,.woocommerce-tabs .tabs li a,.woocommerce .social-share,.woocommerce .social-share li,.quantity,.quantity .minus, .quantity .qty,.shop_attributes tr,.woocommerce-success-message,#reviews li .comment-text{border-color:#e0dede !important;} +.price_slider_wrapper .ui-widget-content{background-color:#e0dede;} +.gform_wrapper .gsection{border-bottom:1px dotted #e0dede;} + +.quantity .minus,.quantity .plus{background-color:#fbfaf9 !important;} + +.quantity .minus:hover,.quantity .plus:hover{background-color:#ffffff !important;} + +#slidingbar-area .widget_categories li a, #slidingbar-area li.recentcomments, #slidingbar-area ul li a, #slidingbar-area .product_list_widget li {border-bottom: 1px solid #282A2B !important;} +#slidingbar-area .tagcloud a, #slidingbar-area .pyre_tabs .tab-holder .tabs-wrapper, #slidingbar-area .pyre_tabs .tab-holder .news-list li {border-color: #282A2B !important;} + +.footer-area .widget_categories li a, .footer-area li.recentcomments, .footer-area ul li a, .footer-area .product_list_widget li, +.footer-area .tagcloud a,.footer-area .pyre_tabs .tab-holder .tabs-wrapper, .footer-area .pyre_tabs .tab-holder .news-list li {border-color: #464849 !important;} + +input#s,#comment-input input,#comment-textarea textarea,.comment-form-comment textarea,.input-text, +.wpcf7-form .wpcf7-text,.wpcf7-form .wpcf7-quiz,.wpcf7-form .wpcf7-number,.wpcf7-form textarea,.wpcf7-form .wpcf7-select,.wpcf7-captchar,.wpcf7-form .wpcf7-date, +.gform_wrapper .gfield input[type=text],.gform_wrapper .gfield textarea,.gform_wrapper .gfield select, +#bbpress-forums .bbp-search-form #bbp_search,.bbp-reply-form input#bbp_topic_tags,.bbp-topic-form input#bbp_topic_title, .bbp-topic-form input#bbp_topic_tags, .bbp-topic-form select#bbp_stick_topic_select, .bbp-topic-form select#bbp_topic_status_select,#bbpress-forums div.bbp-the-content-wrapper textarea.bbp-the-content, +.main-nav-search-form input,.search-page-search-form input,.chzn-container-single .chzn-single,.chzn-container .chzn-drop, +.avada-select-parent select{ +background-color:#ffffff !important;} + +input#s,input#s .placeholder,#comment-input input,#comment-textarea textarea,#comment-input .placeholder,#comment-textarea .placeholder,.comment-form-comment textarea,.input-text, +.wpcf7-form .wpcf7-text,.wpcf7-form .wpcf7-quiz,.wpcf7-form .wpcf7-number,.wpcf7-form textarea,.wpcf7-form .wpcf7-select,.wpcf7-select-parent .select-arrow,.wpcf7-captchar,.wpcf7-form .wpcf7-date, +.gform_wrapper .gfield input[type=text],.gform_wrapper .gfield textarea,.gform_wrapper .gfield select, +#bbpress-forums .bbp-search-form #bbp_search,.bbp-reply-form input#bbp_topic_tags,.bbp-topic-form input#bbp_topic_title, .bbp-topic-form input#bbp_topic_tags, .bbp-topic-form select#bbp_stick_topic_select, .bbp-topic-form select#bbp_topic_status_select,#bbpress-forums div.bbp-the-content-wrapper textarea.bbp-the-content, +.main-nav-search-form input,.search-page-search-form input,.chzn-container-single .chzn-single,.chzn-container .chzn-drop,.avada-select-parent select +{color:#333333 !important;} + +input#s::-webkit-input-placeholder,#comment-input input::-webkit-input-placeholder,#comment-textarea textarea::-webkit-input-placeholder,.comment-form-comment textarea::-webkit-input-placeholder,.input-text::-webkit-input-placeholder{color:#333333 !important;} +input#s:-moz-placeholder,#comment-input input:-moz-placeholder,#comment-textarea textarea:-moz-placeholder,.comment-form-comment textarea:-moz-placeholder,.input-text:-moz-placeholder, +input#s:-ms-input-placeholder,#comment-input input:-ms-input-placeholder,#comment-textarea textarea:-moz-placeholder,.comment-form-comment textarea:-ms-input-placeholder,.input-text:-ms-input-placeholder, +{color:#333333 !important;} + +input#s,#comment-input input,#comment-textarea textarea,.comment-form-comment textarea,.input-text, +.wpcf7-form .wpcf7-text,.wpcf7-form .wpcf7-quiz,.wpcf7-form .wpcf7-number,.wpcf7-form textarea,.wpcf7-form .wpcf7-select,.wpcf7-select-parent .select-arrow,.wpcf7-captchar,.wpcf7-form .wpcf7-date, +.gform_wrapper .gfield input[type=text],.gform_wrapper .gfield textarea,.gform_wrapper .gfield_select[multiple=multiple],.gform_wrapper .gfield select,.select-arrow, +#bbpress-forums .quicktags-toolbar,#bbpress-forums .bbp-search-form #bbp_search,.bbp-reply-form input#bbp_topic_tags,.bbp-topic-form input#bbp_topic_title, .bbp-topic-form input#bbp_topic_tags, .bbp-topic-form select#bbp_stick_topic_select, .bbp-topic-form select#bbp_topic_status_select,#bbpress-forums div.bbp-the-content-wrapper textarea.bbp-the-content,#wp-bbp_topic_content-editor-container,#wp-bbp_reply_content-editor-container, +.main-nav-search-form input,.search-page-search-form input,.chzn-container-single .chzn-single,.chzn-container .chzn-drop, +.avada-select-parent select +{border-color:#d2d2d2 !important;} + +#wrapper #nav ul li ul li a,#wrapper #sticky-nav ul li ul li a{border-bottom:1px solid #B4C2CD !important;} + +#wrapper #nav ul li ul li a:hover, #wrapper #nav ul li ul li.current-menu-item a, +#wrapper #sticky-nav ul li ul li a:hover, #wrapper #sticky-nav ul li ul li.current-menu-item a, +#header .cart-content a:hover,#small-nav .cart-content a:hover{background-color:#ffffff !important;} + +#header .tagline{ + color:#395b7b !important; +} + +#header .tagline{ + font-size:16px !important; + line-height:35px !important; +} + +.page-title h1{ + font-size:18px !important; + line-height:normal !important; +} + + .page-title h3{ + font-size:18px !important; + line-height: 30px !important; + } + +.header-social,#header,.header-v4 #small-nav,.header-v5 #small-nav{ + border-bottom-color:#e5e5e5 !important; +} + +#nav ul ul,#sticky-nav ul ul{ + width:170px !important; +} +#nav ul ul li:hover ul,#sticky-nav ul ul li:hover ul{ + left:170px !important; +} +ul#navigation > li:last-child ul ul{ + left:-170px !important; +} +.rtl #header #nav ul ul li:hover ul,.rtl #small-nav #nav ul ul li:hover ul, .rtl .sticky-header #sticky-nav ul ul li:hover ul{ + right:170px !important; + left: auto !important; +} +.rtl ul#navigation > li:last-child ul ul{ + right:-170px !important; + left: auto !important; +} + +#main #sidebar{ + background-color:transparent; +} + +#main #content{ + width:71.1702128%; +} + +#main #sidebar{ + width:23.4042553%; +} + + +#wrapper .header-social{ + background-color:#395b7b !important; +} + +#wrapper .header-social .menu > li{ + border-color:#B4C2CD !important; +} + +#wrapper .header-social .menu .sub-menu,#wrapper .header-social .login-box,#wrapper .header-social .cart-contents,.main-nav-search-form{ + background-color:#395b7b !important; +} + +#wrapper .header-social .menu .sub-menu li, #wrapper .header-social .menu .sub-menu li a,#wrapper .header-social .login-box *,#wrapper .header-social .cart-contents *{ + color:#747474 !important; +} + +#wrapper .header-social .menu .sub-menu li a:hover{ + background-color:#fafafa !important; +} + +#wrapper .header-social .menu .sub-menu li a:hover{ + color:#333333 !important; +} + +#wrapper .header-social .menu .sub-menu,#wrapper .header-social .menu .sub-menu li,.top-menu .cart-content a,#wrapper .header-social .login-box,#wrapper .header-social .cart-contents,.main-nav-search-form{ + border-color:#B4C2CD !important; +} + +#header .cart-checkout,.top-menu .cart,.top-menu .cart-content a:hover,.top-menu .cart-checkout,#small-nav .cart-checkout{ + background-color:#fafafa !important; +} + +h5.toggle span.arrow{background-color:#333333;} + +.progress-bar-content{background-color:#1a80b6 !important;border-color:#1a80b6 !important;} +.content-box-percentage{color:#1a80b6 !important;} + +.progress-bar{background-color:#f6f6f6;border-color:#f6f6f6;} + +.date-and-formats .format-box{background-color:#eef0f2;} + +.es-nav-prev,.es-nav-next{background-color:#999999;} + +.es-nav-prev:hover,.es-nav-next:hover{background-color:#808080;} + +.content-boxes .col{background-color:transparent;} + +#sidebar .tab-holder,#sidebar .tab-holder .news-list li{border-color:#ebeaea !important;} +#sidebar .pyre_tabs .tabs-container{background-color:#ffffff !important;} +body #sidebar .tab-hold .tabs li{border-right:1px solid #ffffff !important;} +body #sidebar .tab-hold .tabs li a{background:#ebeaea !important;border-bottom:0 !important;color:#333333 !important;} +body #sidebar .tab-hold .tabs li a:hover{background:#ffffff !important;border-bottom:0 !important;} +body #sidebar .tab-hold .tabs li.active a{background:#ffffff !important;border-bottom:0 !important;} +body #sidebar .tab-hold .tabs li.active a{border-top-color:#395b7b!important;} + +.share-box{background-color:#f6f6f6;} + +.grid-layout .post,.timeline-layout .post{background-color:transparent;} + +.grid-layout .post .flexslider,.timeline-layout .post,.timeline-layout .post .content-sep, +.timeline-layout .post .flexslider,h3.timeline-title,.grid-layout .post,.grid-layout .post .content-sep,.products li,.product-details-container,.product-buttons,.product-buttons-container{border-color:#ebeaea !important;} +.align-left .timeline-arrow:before,.align-left .timeline-arrow:after{border-left-color:#ebeaea !important;} +.align-right .timeline-arrow:before,.align-right .timeline-arrow:after{border-right-color:#ebeaea !important;} +.timeline-circle,.timeline-title{background-color:#ebeaea !important;} +.timeline-icon{color:#ebeaea;} + + #bbpress-forums li.bbp-header, + #bbpress-forums div.bbp-reply-header,#bbpress-forums #bbp-single-user-details #bbp-user-navigation li.current a,div.bbp-template-notice, div.indicator-hint{ background:#ebeaea !important; } + #bbpress-forums .bbp-replies div.even { background: transparent !important; } + + #bbpress-forums ul.bbp-lead-topic, #bbpress-forums ul.bbp-topics, #bbpress-forums ul.bbp-forums, #bbpress-forums ul.bbp-replies, #bbpress-forums ul.bbp-search-results, + #bbpress-forums li.bbp-body ul.forum, #bbpress-forums li.bbp-body ul.topic, + #bbpress-forums div.bbp-reply-content,#bbpress-forums div.bbp-reply-header, + #bbpress-forums div.bbp-reply-author .bbp-reply-post-date, + #bbpress-forums div.bbp-topic-tags a,#bbpress-forums #bbp-single-user-details,div.bbp-template-notice, div.indicator-hint, + .bbp-arrow{ border-color:#ebeaea !important; } + + + +.main-flex .flex-control-nav{display:none !important;} + +@media only screen and (max-width: 940px){ + .breadcrumbs{display:none !important;} +} +@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait){ + .breadcrumbs{display:none !important;} +} + +.image-extras{display:none !important;} + +#navigation > li > a,#navigation li.current-menu-ancestor a{height:40px;line-height:40px;} +#navigation > li > a,#navigation li.current-menu-ancestor a{height:40px;line-height:40px;} +#nav ul ul,#sticky-nav ul ul{top:43px;} + +.sticky-header #navigation > li > a.my-cart-link, .sticky-header #navigation li.current-menu-ancestor a.my-cart-link {height:63px;line-height:63px;} + +#nav ul li, #sticky-nav ul li { padding-right: 35px; } + +.ei-slider{width:100% !important;} + +.ei-slider{height:400px !important;} + +.button,.gform_wrapper .gform_button{text-shadow:none !important;} + +#slidingbar-area a{text-shadow:none !important;} + +.footer-area a,.copyright{text-shadow:none !important;} + +.reading-box{background-color:#f6f6f6 !important;} + +.isotope .isotope-item { + -webkit-transition-property: top, left, opacity; + -moz-transition-property: top, left, opacity; + -ms-transition-property: top, left, opacity; + -o-transition-property: top, left, opacity; + transition-property: top, left, opacity; +} + + +.header-v4 #small-nav,.header-v5 #small-nav{background-color:#395b7b !important;} + +.header-v5 #header .logo{float:left;} + +@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 13/10), only screen and (min-resolution: 120dpi) { + #header .normal_logo{display:none !important;} + #header .retina_logo{display:inline !important;} +} + + +@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 13/10), only screen and (min-resolution: 120dpi) { + #header .normal_flag{display:none !important;} + #header .retina_flag{display:inline !important;} +} + + + +.rev_slider_wrapper{ + position:relative +} + +.rev_slider_wrapper .shadow-left{ + position:absolute; + background-image:url(http://127.0.0.1:4001/wordpress/wp-content/themes/Avada/images/shadow-top.png); + background-repeat:no-repeat; + background-position:top center; + height:42px; + width:100%; + top:0; + z-index:99; +} + +.rev_slider_wrapper .shadow-left{top:-1px;} + +.rev_slider_wrapper .shadow-right{ + position:absolute; + background-image:url(http://127.0.0.1:4001/wordpress/wp-content/themes/Avada/images/shadow-bottom.png); + background-repeat:no-repeat; + background-position:bottom center; + height:32px; + width:100%; + bottom:0; + z-index:99; +} + +.avada-skin-rev{ + border-top: 1px solid #d2d3d4; + border-bottom: 1px solid #d2d3d4; +} + +.rev_slider_wrapper .tp-leftarrow, .rev_slider_wrapper .tp-rightarrow{ + background-color: rgba(0, 0, 0, 0.5) !important; + background-repeat: no-repeat; + width: 63px !important; + height: 63px !important; + position: absolute; + top: 50% !important; + margin-top:-31px !important; + opacity:0.8; + position:absolute !important; +} + +.rev_slider_wrapper .tp-rightarrow{ + left:auto !important; + right:0 !important; +} + +.no-rgba .rev_slider_wrapper .tp-leftarrow, .no-rgba .rev_slider_wrapper .tp-rightarrow{ + background-color:#ccc !important; +} + +.rev_slider_wrapper:hover .tp-leftarrow,.rev_slider_wrapper:hover .tp-rightarrow{ + display:block !important; + opacity:0.8 !important; +} + +.rev_slider_wrapper .tp-leftarrow:hover, .rev_slider_wrapper .tp-rightarrow:hover{ + opacity:1 !important; +} + +.rev_slider_wrapper .tp-leftarrow{ + background-image: url(http://127.0.0.1:4001/wordpress/wp-content/themes/Avada/images/ls_prev.png) !important; + background-position: 19px 19px !important; + left: 0 !important; + margin-left:0 !important; + z-index:100; + opacity: 0; +} + +.rev_slider_wrapper .tp-rightarrow{ + background-image: url(http://127.0.0.1:4001/wordpress/wp-content/themes/Avada/images/ls_next.png) !important; + background-position: 29px 19px !important; + right: 0 !important; + margin-left:0 !important; + z-index:100; + opacity: 0; +} + +.tp-bullets .bullet.last{ + clear:none !important; +} + +@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 13/10), only screen and (min-resolution: 120dpi) { + .rev_slider_wrapper .tp-leftarrow{ + background-image: url(http://127.0.0.1:4001/wordpress/wp-content/themes/Avada/images/ls_prev@2x.png) !important; + -webkit-background-size:12px 24px !important; + -moz-background-size:12px 24px !important; + -o-background-size:12px 24px !important; + background-size:12px 24px !important; + } + + .rev_slider_wrapper .tp-rightarrow{ + background-image: url(http://127.0.0.1:4001/wordpress/wp-content/themes/Avada/images/ls_next@2x.png) !important; + -webkit-background-size:12px 24px !important; + -moz-background-size:12px 24px !important; + -o-background-size:12px 24px !important; + background-size:12px 24px !important; + } +} diff --git a/src/wp-content/uploads/drg.js b/src/wp-content/uploads/drg.js new file mode 100644 index 0000000..2310af1 --- /dev/null +++ b/src/wp-content/uploads/drg.js @@ -0,0 +1,743 @@ +function insertParam(url, parameterName, parameterValue, atStart){ + replaceDuplicates = true; + + if(url.indexOf('#') > 0){ + var cl = url.indexOf('#'); + urlhash = url.substring(url.indexOf('#'),url.length); + } else { + urlhash = ''; + cl = url.length; + } + sourceUrl = url.substring(0,cl); + + var urlParts = sourceUrl.split("?"); + var newQueryString = ""; + + if (urlParts.length > 1) + { + var parameters = urlParts[1].split("&"); + for (var i=0; (i < parameters.length); i++) + { + var parameterParts = parameters[i].split("="); + if (!(replaceDuplicates && parameterParts[0] == parameterName)) + { + if (newQueryString == "") { + newQueryString = "?" + parameterParts[0] + "=" + (parameterParts[1]?parameterParts[1]:''); + } + else { + newQueryString += "&"; + newQueryString += parameterParts[0] + "=" + (parameterParts[1]?parameterParts[1]:''); + } + } + } + } + if (newQueryString == "") + newQueryString = "?"; + + if(atStart){ + newQueryString = '?'+ parameterName + "=" + parameterValue + (newQueryString.length>1?'&'+newQueryString.substring(1):''); + } else { + if (newQueryString !== "" && newQueryString != '?') + newQueryString += "&"; + newQueryString += parameterName + "=" + (parameterValue?parameterValue:''); + } + return urlParts[0] + newQueryString + urlhash; +}; + +function ytVidId(url) { + var p = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; + return (url.match(p)) ? RegExp.$1 : false; + //return (url.match(p)) ? true : false; +} + +jQuery(document).ready(function() { + jQuery('.portfolio-wrapper').hide(); + jQuery('.portfolio-tabs ').hide(); + jQuery('.faq-tabs ').hide(); + if(jQuery('.portfolio').length >= 1) { + jQuery('#content').append('
                  Loading...
                  '+js_local_vars.portfolio_loading_text+'
                  '); + } + if(jQuery('.faqs').length >= 1) { + jQuery('#content').append('
                  Loading...
                  '+js_local_vars.faqs_loading_text+'
                  '); + } + + var iframes = jQuery('iframe'); + jQuery.each(iframes, function(i, v) { + var src = jQuery(this).attr('src'); + if(src) { + if(src.indexOf('vimeo') >= 1) { + jQuery(this).attr('id', 'player_'+(i+1)); + var new_src = insertParam(src, 'api', '1', false); + var new_src_2 = insertParam(new_src, 'player_id', 'player_'+(i+1), false); + + jQuery(this).attr('src', new_src_2); + } + if(ytVidId(src)) { + jQuery(this).parent().wrap(''); + window.yt_vid_exists = true; + } + } + }); +}); +jQuery(window).load(function() { + if(jQuery('#sidebar').is(':visible')) { + jQuery('.post-content div.portfolio').each(function() { + var columns = jQuery(this).data('columns'); + jQuery(this).addClass('portfolio-'+columns+'-sidebar'); + }); + } + + if(jQuery().isotope) { + // modified Isotope methods for gutters in masonry + jQuery.Isotope.prototype._getMasonryGutterColumns = function() { + var gutter = this.options.masonry && this.options.masonry.gutterWidth || 0; + containerWidth = this.element.width(); + + this.masonry.columnWidth = this.options.masonry && this.options.masonry.columnWidth || + // or use the size of the first item + this.$filteredAtoms.outerWidth(true) || + // if there's no items, use size of container + containerWidth; + + this.masonry.columnWidth += gutter; + + this.masonry.cols = Math.floor( ( containerWidth + gutter ) / this.masonry.columnWidth ); + this.masonry.cols = Math.max( this.masonry.cols, 1 ); + }; + + jQuery.Isotope.prototype._masonryReset = function() { + // layout-specific props + this.masonry = {}; + // FIXME shouldn't have to call this again + this._getMasonryGutterColumns(); + var i = this.masonry.cols; + this.masonry.colYs = []; + while (i--) { + this.masonry.colYs.push( 0 ); + } + }; + + jQuery.Isotope.prototype._masonryResizeChanged = function() { + var prevSegments = this.masonry.cols; + // update cols/rows + this._getMasonryGutterColumns(); + // return if updated cols/rows is not equal to previous + return ( this.masonry.cols !== prevSegments ); + }; + + imagesLoaded(jQuery('.portfolio-one .portfolio-wrapper'), function() { + jQuery('.portfolio-wrapper').fadeIn(); + jQuery('.portfolio-tabs').fadeIn(); + jQuery('.faq-tabs').fadeIn(); + jQuery('.loading-container').fadeOut(); + jQuery('.portfolio-one .portfolio-wrapper').isotope({ + // options + itemSelector: '.portfolio-item', + layoutMode: 'straightDown', + transformsEnabled: false + }); + }); + + imagesLoaded(jQuery('.portfolio-two .portfolio-wrapper, .portfolio-three .portfolio-wrapper, .portfolio-four .portfolio-wrapper'),function() { + jQuery('.portfolio-wrapper').fadeIn(); + jQuery('.portfolio-tabs').fadeIn(); + jQuery('.loading-container').fadeOut(); + jQuery('.portfolio-two .portfolio-wrapper, .portfolio-three .portfolio-wrapper, .portfolio-four .portfolio-wrapper').isotope({ + // options + itemSelector: '.portfolio-item', + layoutMode: 'fitRows', + transformsEnabled: false + }); + }); + + var masonryContainer = jQuery('.portfolio-masonry .portfolio-wrapper'); + imagesLoaded(masonryContainer, function() { + jQuery('.portfolio-wrapper').fadeIn(); + jQuery('.portfolio-tabs').fadeIn(); + jQuery('.loading-container').fadeOut(); + var gridTwo = masonryContainer.parent().hasClass('portfolio-grid-2'); + var columns; + if(gridTwo) { + columns = 2; + } else { + columns = 3; + } + masonryContainer.isotope({ + // options + itemSelector: '.portfolio-item', + layoutMode: 'masonry', + transformsEnabled: false, + masonry: { columnWidth: masonryContainer.width() / columns } + }); + }); + } + + if(jQuery().flexslider) { + var avada_ytplayer; + + if(window.yt_vid_exists == true) { + var tag = document.createElement('script'); + tag.src = "https://www.youtube.com/iframe_api"; + var firstScriptTag = document.getElementsByTagName('script')[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + + function getFrameID(id){ + var elem = document.getElementById(id); + if (elem) { + if(/^iframe$/i.test(elem.tagName)) return id; //Frame, OK + // else: Look for frame + var elems = elem.getElementsByTagName("iframe"); + if (!elems.length) return null; //No iframe found, FAILURE + for (var i=0; i= 1) { + //jQuery('.tfs-slider').flexslider('destroy'); + + jQuery('.tfs-slider').flexslider({ + animation: "fade", + slideshow: true, + slideshowSpeed: 7000, + animationSpeed: 600, + smoothHeight: true, + pauseOnHover: false, + useCSS: false, + video: true, + start: function(slider) { + if(typeof(slider.slides) !== 'undefined' && slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + jQuery(slider).find('.flex-control-nav').hide(); + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + } else { + jQuery(slider).find('.flex-control-nav').show(); + } + }, + before: function(slider) { + if(slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + $f( slider.slides.eq(slider.currentSlide).find('iframe')[0] ).api('pause'); + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + /* ------------------ YOUTUBE FOR AUTOSLIDER ------------------ */ + playVideoAndPauseOthers(slider); + } + }, + after: function(slider) { + if(slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + jQuery(slider).find('.flex-control-nav').hide(); + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + } else { + jQuery(slider).find('.flex-control-nav').show(); + } + } + }); + } + + if(js_local_vars.page_smoothHeight === 'false') { + page_smoothHeight = false; + } else { + page_smoothHeight = true; + } + + jQuery('.grid-layout .flexslider').flexslider({ + slideshow: true, + slideshowSpeed: 7000, + video: true, + smoothHeight: page_smoothHeight, + pauseOnHover: false, + useCSS: false, + start: function(slider) { + if (typeof(slider.slides) !== 'undefined' && slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + jQuery(slider).find('.flex-control-nav').hide(); + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + } else { + jQuery(slider).find('.flex-control-nav').show(); + } + }, + before: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + $f(slider.slides.eq(slider.currentSlide).find('iframe')[0] ).api('pause'); if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + /* ------------------ YOUTUBE FOR AUTOSLIDER ------------------ */ + playVideoAndPauseOthers(slider); + } + }, + after: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + jQuery(slider).find('.flex-control-nav').hide(); + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + } else { + jQuery(slider).find('.flex-control-nav').show(); + } + } + }); + + if(js_local_vars.flex_smoothHeight === 'false') { + flex_smoothHeight = false; + } else { + flex_smoothHeight = true; + } + + jQuery('.flexslider').flexslider({ + slideshow: true, + slideshowSpeed: 7000, + video: true, + smoothHeight: flex_smoothHeight, + pauseOnHover: false, + useCSS: false, + start: function(slider) { + if (typeof(slider.slides) !== 'undefined' && slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + jQuery(slider).find('.flex-control-nav').hide(); + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + } else { + jQuery(slider).find('.flex-control-nav').show(); + } + }, + before: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + $f(slider.slides.eq(slider.currentSlide).find('iframe')[0] ).api('pause'); if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + /* ------------------ YOUTUBE FOR AUTOSLIDER ------------------ */ + playVideoAndPauseOthers(slider); + } + }, + after: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + jQuery(slider).find('.flex-control-nav').hide(); + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + } else { + jQuery(slider).find('.flex-control-nav').show(); + } + } + }); + + function playVideoAndPauseOthers(slider) { + jQuery(slider).find('iframe').each(function(i) { + var func = 'stopVideo'; + this.contentWindow.postMessage('{"event":"command","func":"' + func + '","args":""}', '*'); + }); + } + + /* ------------------ PREV & NEXT BUTTON FOR FLEXSLIDER (YOUTUBE) ------------------ */ + jQuery('.flex-next, .flex-prev').click(function() { + playVideoAndPauseOthers(jQuery(this).parents('.flexslider, .tfs-slider')); + }); + + function onPlayerStateChange(frame, slider) { + return function(event) { + if(event.data == YT.PlayerState.PLAYING) { + jQuery(slider).flexslider("pause"); + } + if(event.data == YT.PlayerState.PAUSED) { + jQuery(slider).flexslider("play"); + } + } + } + } + + if(jQuery().isotope) { + var gridwidth = (jQuery('.grid-layout').width() / 2) - 22; + jQuery('.grid-layout .post').css('width', gridwidth); + jQuery('.grid-layout').isotope({ + layoutMode: 'masonry', + itemSelector: '.post', + transformsEnabled: false, + masonry: { + columnWidth: gridwidth, + gutterWidth: 40 + }, + }); + + var gridwidth = (jQuery('.grid-full-layout-3').width() / 3) - 30; + jQuery('.grid-full-layout-3 .post').css('width', gridwidth); + jQuery('.grid-full-layout-3').isotope({ + layoutMode: 'masonry', + itemSelector: '.post', + transformsEnabled: false, + masonry: { + columnWidth: gridwidth, + gutterWidth: 40 + }, + }); + + var gridwidth = (jQuery('.grid-full-layout-4').width() / 4) - 35; + jQuery('.grid-full-layout-4 .post').css('width', gridwidth); + jQuery('.grid-full-layout-4').isotope({ + layoutMode: 'masonry', + itemSelector: '.post', + transformsEnabled: false, + masonry: { + columnWidth: gridwidth, + gutterWidth: 40 + }, + }); + } + + jQuery('.rev_slider_wrapper').each(function() { + if(jQuery(this).length >=1 && jQuery(this).find('.tp-bannershadow').length == 0) { + jQuery('
                  ').appendTo(this); + jQuery('
                  ').appendTo(this); + + jQuery(this).addClass('avada-skin-rev'); + } + }); + + jQuery('.tparrows').each(function() { + if(jQuery(this).css('visibility') == 'hidden') { + jQuery(this).remove(); + } + }); + }); +jQuery(document).ready(function() { + function onAfter(curr, next, opts, fwd) { + var $ht = jQuery(this).height(); + + //set the container's height to that of the current slide + jQuery(this).parent().css('height', $ht); + } + if(jQuery().cycle) { + jQuery('.reviews').cycle({ + fx: 'fade', + after: onAfter, + timeout: 4000 }); + } + + +}); +jQuery(window).load(function($) { + jQuery('.header-social .menu > li').height(jQuery('.header-social').height()); + jQuery('.header-social .menu > li').css('line-height', jQuery('.header-social').height()+'px'); + jQuery('.header-social .menu > li.cart').css('line-height', jQuery('.header-social').height()+'px'); + + if(jQuery('.top-menu .cart').width() > 150) { + new_width = jQuery('.top-menu .cart').width(); + jQuery('.top-menu .cart-contents').css("width", new_width+'px'); + new_width -= 26; + jQuery('.top-menu .cart-content a').css("width", new_width+'px'); + new_width -= 56; + jQuery('.top-menu .cart-content a .cart-desc').css("width", new_width+'px'); + }; + + if(jQuery().prettyPhoto) { + var ppArgs = { + animation_speed: 'fast', + overlay_gallery: true, + autoplay_slideshow: false, + slideshow: 5000, + opacity: 0.8, + show_title: true, + show_desc: true, + }; + + jQuery("a[rel^='prettyPhoto']").prettyPhoto(ppArgs); + + + jQuery('.lightbox-enabled a').has('img').prettyPhoto(ppArgs); + + var mediaQuery = 'desk'; + + if (Modernizr.mq('only screen and (max-width: 600px)') || Modernizr.mq('only screen and (max-height: 520px)')) { + + mediaQuery = 'mobile'; + jQuery("a[rel^='prettyPhoto']").unbind('click'); + jQuery('.lightbox-enabled a').has('img').unbind('click'); + } + + // Disables prettyPhoto if screen small + jQuery(window).on('resize', function() { + if ((Modernizr.mq('only screen and (max-width: 600px)') || Modernizr.mq('only screen and (max-height: 520px)')) && mediaQuery == 'desk') { + jQuery("a[rel^='prettyPhoto']").unbind('click.prettyphoto'); + jQuery('.lightbox-enabled a').has('img').unbind('click.prettyphoto'); + mediaQuery = 'mobile'; + } else if (!Modernizr.mq('only screen and (max-width: 600px)') && !Modernizr.mq('only screen and (max-height: 520px)') && mediaQuery == 'mobile') { + jQuery("a[rel^='prettyPhoto']").prettyPhoto(ppArgs); + jQuery('.lightbox-enabled a').has('img').prettyPhoto(ppArgs); + mediaQuery = 'desk'; + } + }); + } + jQuery('.side-nav li').hoverIntent({ + over: function() { + if(jQuery(this).find('> .children').length >= 1) { + jQuery(this).find('> .children').stop(true, true).slideDown('slow'); + } + }, + out: function() { + if(jQuery(this).find('.current_page_item').length == 0 && jQuery(this).hasClass('current_page_item') == false) { + jQuery(this).find('.children').stop(true, true).slideUp('slow'); + } + }, + timeout: 500 + }); + + if(jQuery().eislideshow) { + jQuery('#ei-slider').eislideshow({ + animation: 'center', + autoplay: true, + slideshow_interval: 8000, + speed: 800, + thumbMaxWidth: 150 }); + } + + var retina = window.devicePixelRatio > 1 ? true : false; + + + /* wpml flag in center */ + var wpml_flag = jQuery('ul#navigation > li > a > .iclflag'); + var wpml_h = wpml_flag.height(); + wpml_flag.css('margin-top', +wpml_h / - 2 + "px"); + + var wpml_flag = jQuery('.top-menu > ul > li > a > .iclflag'); + var wpml_h = wpml_flag.height(); + wpml_flag.css('margin-top', +wpml_h / - 2 + "px"); + + + jQuery('#posts-container-infinite').infinitescroll({ + navSelector : "div.pagination", + // selector for the paged navigation (it will be hidden) + nextSelector : "a.pagination-next", + // selector for the NEXT link (to page 2) + itemSelector : "div.post, .timeline-date", + // selector for all items you'll retrieve + loading : { + finishedMsg: js_local_vars.infinte_blog_finished_msg, + msgText: js_local_vars.infinte_blog_text, + }, + errorCallback: function() { + jQuery('#posts-container').isotope('reLayout'); + } + }, function(posts) { + if(jQuery().isotope) { + //jQuery(posts).css('top', 'auto').css('left', 'auto'); + + jQuery(posts).hide(); + imagesLoaded(posts, function() { + jQuery(posts).fadeIn(); + jQuery('#posts-container-infinite').isotope('appended', jQuery(posts)); + jQuery('#posts-container-infinite').isotope('reLayout'); + }); + + var gridwidth = (jQuery('.grid-layout').width() / 2) - 22; + jQuery('.grid-layout .post').css('width', gridwidth); + + var gridwidth = (jQuery('.grid-full-layout-3').width() / 3) - 30; + jQuery('.grid-full-layout-3 .post').css('width', gridwidth); + + var gridwidth = (jQuery('.grid-full-layout-4').width() / 4) - 35; + jQuery('.grid-full-layout-4 .post').css('width', gridwidth); + + jQuery('#posts-container-infinite').isotope('reLayout'); + } + + jQuery('.flexslider').flexslider({ + slideshow: true, + slideshowSpeed: 7000, + video: true, + pauseOnHover: false, + useCSS: false, + start: function(slider) { + if (typeof(slider.slides) !== 'undefined' && slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + jQuery(slider).find('.flex-control-nav').hide(); + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + } else { + jQuery(slider).find('.flex-control-nav').show(); + } + }, + before: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + $f(slider.slides.eq(slider.currentSlide).find('iframe')[0] ).api('pause'); + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + + /* ------------------ YOUTUBE FOR AUTOSLIDER ------------------ */ + playVideoAndPauseOthers(slider); + } + }, + after: function(slider) { + if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0) { + jQuery(slider).find('.flex-control-nav').hide(); + + if(window.yt_vid_exists == true) { + YT_ready(function() { + new YT.Player(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), { + events: { + 'onStateChange': onPlayerStateChange(slider.slides.eq(slider.currentSlide).find('iframe').attr('id'), slider) + } + }); + }); + } + } else { + jQuery(slider).find('.flex-control-nav').show(); + } + } + }); + if(jQuery().prettyPhoto) { jQuery("a[rel^='prettyPhoto']").prettyPhoto(ppArgs); } + jQuery(posts).each(function() { + jQuery(this).find('.full-video, .video-shortcode, .wooslider .slide-content').fitVids(); + }); + + if(jQuery().isotope) { + jQuery('#posts-container-infinite').isotope('reLayout'); + } + }); + + }); \ No newline at end of file diff --git a/src/wp-cron.php b/src/wp-cron.php new file mode 100644 index 0000000..da2838c --- /dev/null +++ b/src/wp-cron.php @@ -0,0 +1,112 @@ +get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", '_transient_doing_cron' ) ); + if ( is_object( $row ) ) + $value = $row->option_value; + } + + return $value; +} + +if ( false === $crons = _get_cron_array() ) + die(); + +$keys = array_keys( $crons ); +$gmt_time = microtime( true ); + +if ( isset($keys[0]) && $keys[0] > $gmt_time ) + die(); + +$doing_cron_transient = get_transient( 'doing_cron'); + +// Use global $doing_wp_cron lock otherwise use the GET lock. If no lock, trying grabbing a new lock. +if ( empty( $doing_wp_cron ) ) { + if ( empty( $_GET[ 'doing_wp_cron' ] ) ) { + // Called from external script/job. Try setting a lock. + if ( $doing_cron_transient && ( $doing_cron_transient + WP_CRON_LOCK_TIMEOUT > $gmt_time ) ) + return; + $doing_cron_transient = $doing_wp_cron = sprintf( '%.22F', microtime( true ) ); + set_transient( 'doing_cron', $doing_wp_cron ); + } else { + $doing_wp_cron = $_GET[ 'doing_wp_cron' ]; + } +} + +// Check lock +if ( $doing_cron_transient != $doing_wp_cron ) + return; + +foreach ( $crons as $timestamp => $cronhooks ) { + if ( $timestamp > $gmt_time ) + break; + + foreach ( $cronhooks as $hook => $keys ) { + + foreach ( $keys as $k => $v ) { + + $schedule = $v['schedule']; + + if ( $schedule != false ) { + $new_args = array($timestamp, $schedule, $hook, $v['args']); + call_user_func_array('wp_reschedule_event', $new_args); + } + + wp_unschedule_event( $timestamp, $hook, $v['args'] ); + + /** + * Fires scheduled events. + * + * @since 2.1.0 + * + * @param string $hook Name of the hook that was scheduled to be fired. + * @param array $v['args'] The arguments to be passed to the hook. + */ + do_action_ref_array( $hook, $v['args'] ); + + // If the hook ran too long and another cron process stole the lock, quit. + if ( _get_cron_lock() != $doing_wp_cron ) + return; + } + } +} + +if ( _get_cron_lock() == $doing_wp_cron ) + delete_transient( 'doing_cron' ); + +die(); diff --git a/src/wp-includes/ID3/getid3.lib.php b/src/wp-includes/ID3/getid3.lib.php new file mode 100644 index 0000000..f8df233 --- /dev/null +++ b/src/wp-includes/ID3/getid3.lib.php @@ -0,0 +1,1341 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// // +// getid3.lib.php - part of getID3() // +// See readme.txt for more details // +// /// +///////////////////////////////////////////////////////////////// + + +class getid3_lib +{ + + public static function PrintHexBytes($string, $hex=true, $spaces=true, $htmlencoding='UTF-8') { + $returnstring = ''; + for ($i = 0; $i < strlen($string); $i++) { + if ($hex) { + $returnstring .= str_pad(dechex(ord($string{$i})), 2, '0', STR_PAD_LEFT); + } else { + $returnstring .= ' '.(preg_match("#[\x20-\x7E]#", $string{$i}) ? $string{$i} : '¤'); + } + if ($spaces) { + $returnstring .= ' '; + } + } + if (!empty($htmlencoding)) { + if ($htmlencoding === true) { + $htmlencoding = 'UTF-8'; // prior to getID3 v1.9.0 the function's 4th parameter was boolean + } + $returnstring = htmlentities($returnstring, ENT_QUOTES, $htmlencoding); + } + return $returnstring; + } + + public static function trunc($floatnumber) { + // truncates a floating-point number at the decimal point + // returns int (if possible, otherwise float) + if ($floatnumber >= 1) { + $truncatednumber = floor($floatnumber); + } elseif ($floatnumber <= -1) { + $truncatednumber = ceil($floatnumber); + } else { + $truncatednumber = 0; + } + if (self::intValueSupported($truncatednumber)) { + $truncatednumber = (int) $truncatednumber; + } + return $truncatednumber; + } + + + public static function safe_inc(&$variable, $increment=1) { + if (isset($variable)) { + $variable += $increment; + } else { + $variable = $increment; + } + return true; + } + + public static function CastAsInt($floatnum) { + // convert to float if not already + $floatnum = (float) $floatnum; + + // convert a float to type int, only if possible + if (self::trunc($floatnum) == $floatnum) { + // it's not floating point + if (self::intValueSupported($floatnum)) { + // it's within int range + $floatnum = (int) $floatnum; + } + } + return $floatnum; + } + + public static function intValueSupported($num) { + // check if integers are 64-bit + static $hasINT64 = null; + if ($hasINT64 === null) { // 10x faster than is_null() + $hasINT64 = is_int(pow(2, 31)); // 32-bit int are limited to (2^31)-1 + if (!$hasINT64 && !defined('PHP_INT_MIN')) { + define('PHP_INT_MIN', ~PHP_INT_MAX); + } + } + // if integers are 64-bit - no other check required + if ($hasINT64 || (($num <= PHP_INT_MAX) && ($num >= PHP_INT_MIN))) { + return true; + } + return false; + } + + public static function DecimalizeFraction($fraction) { + list($numerator, $denominator) = explode('/', $fraction); + return $numerator / ($denominator ? $denominator : 1); + } + + + public static function DecimalBinary2Float($binarynumerator) { + $numerator = self::Bin2Dec($binarynumerator); + $denominator = self::Bin2Dec('1'.str_repeat('0', strlen($binarynumerator))); + return ($numerator / $denominator); + } + + + public static function NormalizeBinaryPoint($binarypointnumber, $maxbits=52) { + // http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/binary.html + if (strpos($binarypointnumber, '.') === false) { + $binarypointnumber = '0.'.$binarypointnumber; + } elseif ($binarypointnumber{0} == '.') { + $binarypointnumber = '0'.$binarypointnumber; + } + $exponent = 0; + while (($binarypointnumber{0} != '1') || (substr($binarypointnumber, 1, 1) != '.')) { + if (substr($binarypointnumber, 1, 1) == '.') { + $exponent--; + $binarypointnumber = substr($binarypointnumber, 2, 1).'.'.substr($binarypointnumber, 3); + } else { + $pointpos = strpos($binarypointnumber, '.'); + $exponent += ($pointpos - 1); + $binarypointnumber = str_replace('.', '', $binarypointnumber); + $binarypointnumber = $binarypointnumber{0}.'.'.substr($binarypointnumber, 1); + } + } + $binarypointnumber = str_pad(substr($binarypointnumber, 0, $maxbits + 2), $maxbits + 2, '0', STR_PAD_RIGHT); + return array('normalized'=>$binarypointnumber, 'exponent'=>(int) $exponent); + } + + + public static function Float2BinaryDecimal($floatvalue) { + // http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/binary.html + $maxbits = 128; // to how many bits of precision should the calculations be taken? + $intpart = self::trunc($floatvalue); + $floatpart = abs($floatvalue - $intpart); + $pointbitstring = ''; + while (($floatpart != 0) && (strlen($pointbitstring) < $maxbits)) { + $floatpart *= 2; + $pointbitstring .= (string) self::trunc($floatpart); + $floatpart -= self::trunc($floatpart); + } + $binarypointnumber = decbin($intpart).'.'.$pointbitstring; + return $binarypointnumber; + } + + + public static function Float2String($floatvalue, $bits) { + // http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/ieee-expl.html + switch ($bits) { + case 32: + $exponentbits = 8; + $fractionbits = 23; + break; + + case 64: + $exponentbits = 11; + $fractionbits = 52; + break; + + default: + return false; + break; + } + if ($floatvalue >= 0) { + $signbit = '0'; + } else { + $signbit = '1'; + } + $normalizedbinary = self::NormalizeBinaryPoint(self::Float2BinaryDecimal($floatvalue), $fractionbits); + $biasedexponent = pow(2, $exponentbits - 1) - 1 + $normalizedbinary['exponent']; // (127 or 1023) +/- exponent + $exponentbitstring = str_pad(decbin($biasedexponent), $exponentbits, '0', STR_PAD_LEFT); + $fractionbitstring = str_pad(substr($normalizedbinary['normalized'], 2), $fractionbits, '0', STR_PAD_RIGHT); + + return self::BigEndian2String(self::Bin2Dec($signbit.$exponentbitstring.$fractionbitstring), $bits % 8, false); + } + + + public static function LittleEndian2Float($byteword) { + return self::BigEndian2Float(strrev($byteword)); + } + + + public static function BigEndian2Float($byteword) { + // ANSI/IEEE Standard 754-1985, Standard for Binary Floating Point Arithmetic + // http://www.psc.edu/general/software/packages/ieee/ieee.html + // http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/ieee.html + + $bitword = self::BigEndian2Bin($byteword); + if (!$bitword) { + return 0; + } + $signbit = $bitword{0}; + + switch (strlen($byteword) * 8) { + case 32: + $exponentbits = 8; + $fractionbits = 23; + break; + + case 64: + $exponentbits = 11; + $fractionbits = 52; + break; + + case 80: + // 80-bit Apple SANE format + // http://www.mactech.com/articles/mactech/Vol.06/06.01/SANENormalized/ + $exponentstring = substr($bitword, 1, 15); + $isnormalized = intval($bitword{16}); + $fractionstring = substr($bitword, 17, 63); + $exponent = pow(2, self::Bin2Dec($exponentstring) - 16383); + $fraction = $isnormalized + self::DecimalBinary2Float($fractionstring); + $floatvalue = $exponent * $fraction; + if ($signbit == '1') { + $floatvalue *= -1; + } + return $floatvalue; + break; + + default: + return false; + break; + } + $exponentstring = substr($bitword, 1, $exponentbits); + $fractionstring = substr($bitword, $exponentbits + 1, $fractionbits); + $exponent = self::Bin2Dec($exponentstring); + $fraction = self::Bin2Dec($fractionstring); + + if (($exponent == (pow(2, $exponentbits) - 1)) && ($fraction != 0)) { + // Not a Number + $floatvalue = false; + } elseif (($exponent == (pow(2, $exponentbits) - 1)) && ($fraction == 0)) { + if ($signbit == '1') { + $floatvalue = '-infinity'; + } else { + $floatvalue = '+infinity'; + } + } elseif (($exponent == 0) && ($fraction == 0)) { + if ($signbit == '1') { + $floatvalue = -0; + } else { + $floatvalue = 0; + } + $floatvalue = ($signbit ? 0 : -0); + } elseif (($exponent == 0) && ($fraction != 0)) { + // These are 'unnormalized' values + $floatvalue = pow(2, (-1 * (pow(2, $exponentbits - 1) - 2))) * self::DecimalBinary2Float($fractionstring); + if ($signbit == '1') { + $floatvalue *= -1; + } + } elseif ($exponent != 0) { + $floatvalue = pow(2, ($exponent - (pow(2, $exponentbits - 1) - 1))) * (1 + self::DecimalBinary2Float($fractionstring)); + if ($signbit == '1') { + $floatvalue *= -1; + } + } + return (float) $floatvalue; + } + + + public static function BigEndian2Int($byteword, $synchsafe=false, $signed=false) { + $intvalue = 0; + $bytewordlen = strlen($byteword); + if ($bytewordlen == 0) { + return false; + } + for ($i = 0; $i < $bytewordlen; $i++) { + if ($synchsafe) { // disregard MSB, effectively 7-bit bytes + //$intvalue = $intvalue | (ord($byteword{$i}) & 0x7F) << (($bytewordlen - 1 - $i) * 7); // faster, but runs into problems past 2^31 on 32-bit systems + $intvalue += (ord($byteword{$i}) & 0x7F) * pow(2, ($bytewordlen - 1 - $i) * 7); + } else { + $intvalue += ord($byteword{$i}) * pow(256, ($bytewordlen - 1 - $i)); + } + } + if ($signed && !$synchsafe) { + // synchsafe ints are not allowed to be signed + if ($bytewordlen <= PHP_INT_SIZE) { + $signMaskBit = 0x80 << (8 * ($bytewordlen - 1)); + if ($intvalue & $signMaskBit) { + $intvalue = 0 - ($intvalue & ($signMaskBit - 1)); + } + } else { + throw new Exception('ERROR: Cannot have signed integers larger than '.(8 * PHP_INT_SIZE).'-bits ('.strlen($byteword).') in self::BigEndian2Int()'); + break; + } + } + return self::CastAsInt($intvalue); + } + + + public static function LittleEndian2Int($byteword, $signed=false) { + return self::BigEndian2Int(strrev($byteword), false, $signed); + } + + + public static function BigEndian2Bin($byteword) { + $binvalue = ''; + $bytewordlen = strlen($byteword); + for ($i = 0; $i < $bytewordlen; $i++) { + $binvalue .= str_pad(decbin(ord($byteword{$i})), 8, '0', STR_PAD_LEFT); + } + return $binvalue; + } + + + public static function BigEndian2String($number, $minbytes=1, $synchsafe=false, $signed=false) { + if ($number < 0) { + throw new Exception('ERROR: self::BigEndian2String() does not support negative numbers'); + } + $maskbyte = (($synchsafe || $signed) ? 0x7F : 0xFF); + $intstring = ''; + if ($signed) { + if ($minbytes > PHP_INT_SIZE) { + throw new Exception('ERROR: Cannot have signed integers larger than '.(8 * PHP_INT_SIZE).'-bits in self::BigEndian2String()'); + } + $number = $number & (0x80 << (8 * ($minbytes - 1))); + } + while ($number != 0) { + $quotient = ($number / ($maskbyte + 1)); + $intstring = chr(ceil(($quotient - floor($quotient)) * $maskbyte)).$intstring; + $number = floor($quotient); + } + return str_pad($intstring, $minbytes, "\x00", STR_PAD_LEFT); + } + + + public static function Dec2Bin($number) { + while ($number >= 256) { + $bytes[] = (($number / 256) - (floor($number / 256))) * 256; + $number = floor($number / 256); + } + $bytes[] = $number; + $binstring = ''; + for ($i = 0; $i < count($bytes); $i++) { + $binstring = (($i == count($bytes) - 1) ? decbin($bytes[$i]) : str_pad(decbin($bytes[$i]), 8, '0', STR_PAD_LEFT)).$binstring; + } + return $binstring; + } + + + public static function Bin2Dec($binstring, $signed=false) { + $signmult = 1; + if ($signed) { + if ($binstring{0} == '1') { + $signmult = -1; + } + $binstring = substr($binstring, 1); + } + $decvalue = 0; + for ($i = 0; $i < strlen($binstring); $i++) { + $decvalue += ((int) substr($binstring, strlen($binstring) - $i - 1, 1)) * pow(2, $i); + } + return self::CastAsInt($decvalue * $signmult); + } + + + public static function Bin2String($binstring) { + // return 'hi' for input of '0110100001101001' + $string = ''; + $binstringreversed = strrev($binstring); + for ($i = 0; $i < strlen($binstringreversed); $i += 8) { + $string = chr(self::Bin2Dec(strrev(substr($binstringreversed, $i, 8)))).$string; + } + return $string; + } + + + public static function LittleEndian2String($number, $minbytes=1, $synchsafe=false) { + $intstring = ''; + while ($number > 0) { + if ($synchsafe) { + $intstring = $intstring.chr($number & 127); + $number >>= 7; + } else { + $intstring = $intstring.chr($number & 255); + $number >>= 8; + } + } + return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT); + } + + + public static function array_merge_clobber($array1, $array2) { + // written by kcØhireability*com + // taken from http://www.php.net/manual/en/function.array-merge-recursive.php + if (!is_array($array1) || !is_array($array2)) { + return false; + } + $newarray = $array1; + foreach ($array2 as $key => $val) { + if (is_array($val) && isset($newarray[$key]) && is_array($newarray[$key])) { + $newarray[$key] = self::array_merge_clobber($newarray[$key], $val); + } else { + $newarray[$key] = $val; + } + } + return $newarray; + } + + + public static function array_merge_noclobber($array1, $array2) { + if (!is_array($array1) || !is_array($array2)) { + return false; + } + $newarray = $array1; + foreach ($array2 as $key => $val) { + if (is_array($val) && isset($newarray[$key]) && is_array($newarray[$key])) { + $newarray[$key] = self::array_merge_noclobber($newarray[$key], $val); + } elseif (!isset($newarray[$key])) { + $newarray[$key] = $val; + } + } + return $newarray; + } + + + public static function ksort_recursive(&$theArray) { + ksort($theArray); + foreach ($theArray as $key => $value) { + if (is_array($value)) { + self::ksort_recursive($theArray[$key]); + } + } + return true; + } + + public static function fileextension($filename, $numextensions=1) { + if (strstr($filename, '.')) { + $reversedfilename = strrev($filename); + $offset = 0; + for ($i = 0; $i < $numextensions; $i++) { + $offset = strpos($reversedfilename, '.', $offset + 1); + if ($offset === false) { + return ''; + } + } + return strrev(substr($reversedfilename, 0, $offset)); + } + return ''; + } + + + public static function PlaytimeString($seconds) { + $sign = (($seconds < 0) ? '-' : ''); + $seconds = round(abs($seconds)); + $H = (int) floor( $seconds / 3600); + $M = (int) floor(($seconds - (3600 * $H) ) / 60); + $S = (int) round( $seconds - (3600 * $H) - (60 * $M) ); + return $sign.($H ? $H.':' : '').($H ? str_pad($M, 2, '0', STR_PAD_LEFT) : intval($M)).':'.str_pad($S, 2, 0, STR_PAD_LEFT); + } + + + public static function DateMac2Unix($macdate) { + // Macintosh timestamp: seconds since 00:00h January 1, 1904 + // UNIX timestamp: seconds since 00:00h January 1, 1970 + return self::CastAsInt($macdate - 2082844800); + } + + + public static function FixedPoint8_8($rawdata) { + return self::BigEndian2Int(substr($rawdata, 0, 1)) + (float) (self::BigEndian2Int(substr($rawdata, 1, 1)) / pow(2, 8)); + } + + + public static function FixedPoint16_16($rawdata) { + return self::BigEndian2Int(substr($rawdata, 0, 2)) + (float) (self::BigEndian2Int(substr($rawdata, 2, 2)) / pow(2, 16)); + } + + + public static function FixedPoint2_30($rawdata) { + $binarystring = self::BigEndian2Bin($rawdata); + return self::Bin2Dec(substr($binarystring, 0, 2)) + (float) (self::Bin2Dec(substr($binarystring, 2, 30)) / pow(2, 30)); + } + + + public static function CreateDeepArray($ArrayPath, $Separator, $Value) { + // assigns $Value to a nested array path: + // $foo = self::CreateDeepArray('/path/to/my', '/', 'file.txt') + // is the same as: + // $foo = array('path'=>array('to'=>'array('my'=>array('file.txt')))); + // or + // $foo['path']['to']['my'] = 'file.txt'; + $ArrayPath = ltrim($ArrayPath, $Separator); + if (($pos = strpos($ArrayPath, $Separator)) !== false) { + $ReturnedArray[substr($ArrayPath, 0, $pos)] = self::CreateDeepArray(substr($ArrayPath, $pos + 1), $Separator, $Value); + } else { + $ReturnedArray[$ArrayPath] = $Value; + } + return $ReturnedArray; + } + + public static function array_max($arraydata, $returnkey=false) { + $maxvalue = false; + $maxkey = false; + foreach ($arraydata as $key => $value) { + if (!is_array($value)) { + if ($value > $maxvalue) { + $maxvalue = $value; + $maxkey = $key; + } + } + } + return ($returnkey ? $maxkey : $maxvalue); + } + + public static function array_min($arraydata, $returnkey=false) { + $minvalue = false; + $minkey = false; + foreach ($arraydata as $key => $value) { + if (!is_array($value)) { + if ($value > $minvalue) { + $minvalue = $value; + $minkey = $key; + } + } + } + return ($returnkey ? $minkey : $minvalue); + } + + public static function XML2array($XMLstring) { + if (function_exists('simplexml_load_string')) { + if (function_exists('get_object_vars')) { + $XMLobject = simplexml_load_string($XMLstring); + return self::SimpleXMLelement2array($XMLobject); + } + } + return false; + } + + public static function SimpleXMLelement2array($XMLobject) { + if (!is_object($XMLobject) && !is_array($XMLobject)) { + return $XMLobject; + } + $XMLarray = (is_object($XMLobject) ? get_object_vars($XMLobject) : $XMLobject); + foreach ($XMLarray as $key => $value) { + $XMLarray[$key] = self::SimpleXMLelement2array($value); + } + return $XMLarray; + } + + + // Allan Hansen + // self::md5_data() - returns md5sum for a file from startuing position to absolute end position + public static function hash_data($file, $offset, $end, $algorithm) { + static $tempdir = ''; + if (!self::intValueSupported($end)) { + return false; + } + switch ($algorithm) { + case 'md5': + $hash_function = 'md5_file'; + $unix_call = 'md5sum'; + $windows_call = 'md5sum.exe'; + $hash_length = 32; + break; + + case 'sha1': + $hash_function = 'sha1_file'; + $unix_call = 'sha1sum'; + $windows_call = 'sha1sum.exe'; + $hash_length = 40; + break; + + default: + throw new Exception('Invalid algorithm ('.$algorithm.') in self::hash_data()'); + break; + } + $size = $end - $offset; + while (true) { + if (GETID3_OS_ISWINDOWS) { + + // It seems that sha1sum.exe for Windows only works on physical files, does not accept piped data + // Fall back to create-temp-file method: + if ($algorithm == 'sha1') { + break; + } + + $RequiredFiles = array('cygwin1.dll', 'head.exe', 'tail.exe', $windows_call); + foreach ($RequiredFiles as $required_file) { + if (!is_readable(GETID3_HELPERAPPSDIR.$required_file)) { + // helper apps not available - fall back to old method + break 2; + } + } + $commandline = GETID3_HELPERAPPSDIR.'head.exe -c '.$end.' '.escapeshellarg(str_replace('/', DIRECTORY_SEPARATOR, $file)).' | '; + $commandline .= GETID3_HELPERAPPSDIR.'tail.exe -c '.$size.' | '; + $commandline .= GETID3_HELPERAPPSDIR.$windows_call; + + } else { + + $commandline = 'head -c'.$end.' '.escapeshellarg($file).' | '; + $commandline .= 'tail -c'.$size.' | '; + $commandline .= $unix_call; + + } + if (preg_match('#(1|ON)#i', ini_get('safe_mode'))) { + //throw new Exception('PHP running in Safe Mode - backtick operator not available, using slower non-system-call '.$algorithm.' algorithm'); + break; + } + return substr(`$commandline`, 0, $hash_length); + } + + if (empty($tempdir)) { + // yes this is ugly, feel free to suggest a better way + require_once(dirname(__FILE__).'/getid3.php'); + $getid3_temp = new getID3(); + $tempdir = $getid3_temp->tempdir; + unset($getid3_temp); + } + // try to create a temporary file in the system temp directory - invalid dirname should force to system temp dir + if (($data_filename = tempnam($tempdir, 'gI3')) === false) { + // can't find anywhere to create a temp file, just fail + return false; + } + + // Init + $result = false; + + // copy parts of file + try { + self::CopyFileParts($file, $data_filename, $offset, $end - $offset); + $result = $hash_function($data_filename); + } catch (Exception $e) { + throw new Exception('self::CopyFileParts() failed in getid_lib::hash_data(): '.$e->getMessage()); + } + unlink($data_filename); + return $result; + } + + public static function CopyFileParts($filename_source, $filename_dest, $offset, $length) { + if (!self::intValueSupported($offset + $length)) { + throw new Exception('cannot copy file portion, it extends beyond the '.round(PHP_INT_MAX / 1073741824).'GB limit'); + } + if (is_readable($filename_source) && is_file($filename_source) && ($fp_src = fopen($filename_source, 'rb'))) { + if (($fp_dest = fopen($filename_dest, 'wb'))) { + if (fseek($fp_src, $offset, SEEK_SET) == 0) { + $byteslefttowrite = $length; + while (($byteslefttowrite > 0) && ($buffer = fread($fp_src, min($byteslefttowrite, getID3::FREAD_BUFFER_SIZE)))) { + $byteswritten = fwrite($fp_dest, $buffer, $byteslefttowrite); + $byteslefttowrite -= $byteswritten; + } + return true; + } else { + throw new Exception('failed to seek to offset '.$offset.' in '.$filename_source); + } + fclose($fp_dest); + } else { + throw new Exception('failed to create file for writing '.$filename_dest); + } + fclose($fp_src); + } else { + throw new Exception('failed to open file for reading '.$filename_source); + } + return false; + } + + public static function iconv_fallback_int_utf8($charval) { + if ($charval < 128) { + // 0bbbbbbb + $newcharstring = chr($charval); + } elseif ($charval < 2048) { + // 110bbbbb 10bbbbbb + $newcharstring = chr(($charval >> 6) | 0xC0); + $newcharstring .= chr(($charval & 0x3F) | 0x80); + } elseif ($charval < 65536) { + // 1110bbbb 10bbbbbb 10bbbbbb + $newcharstring = chr(($charval >> 12) | 0xE0); + $newcharstring .= chr(($charval >> 6) | 0xC0); + $newcharstring .= chr(($charval & 0x3F) | 0x80); + } else { + // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb + $newcharstring = chr(($charval >> 18) | 0xF0); + $newcharstring .= chr(($charval >> 12) | 0xC0); + $newcharstring .= chr(($charval >> 6) | 0xC0); + $newcharstring .= chr(($charval & 0x3F) | 0x80); + } + return $newcharstring; + } + + // ISO-8859-1 => UTF-8 + public static function iconv_fallback_iso88591_utf8($string, $bom=false) { + if (function_exists('utf8_encode')) { + return utf8_encode($string); + } + // utf8_encode() unavailable, use getID3()'s iconv_fallback() conversions (possibly PHP is compiled without XML support) + $newcharstring = ''; + if ($bom) { + $newcharstring .= "\xEF\xBB\xBF"; + } + for ($i = 0; $i < strlen($string); $i++) { + $charval = ord($string{$i}); + $newcharstring .= self::iconv_fallback_int_utf8($charval); + } + return $newcharstring; + } + + // ISO-8859-1 => UTF-16BE + public static function iconv_fallback_iso88591_utf16be($string, $bom=false) { + $newcharstring = ''; + if ($bom) { + $newcharstring .= "\xFE\xFF"; + } + for ($i = 0; $i < strlen($string); $i++) { + $newcharstring .= "\x00".$string{$i}; + } + return $newcharstring; + } + + // ISO-8859-1 => UTF-16LE + public static function iconv_fallback_iso88591_utf16le($string, $bom=false) { + $newcharstring = ''; + if ($bom) { + $newcharstring .= "\xFF\xFE"; + } + for ($i = 0; $i < strlen($string); $i++) { + $newcharstring .= $string{$i}."\x00"; + } + return $newcharstring; + } + + // ISO-8859-1 => UTF-16LE (BOM) + public static function iconv_fallback_iso88591_utf16($string) { + return self::iconv_fallback_iso88591_utf16le($string, true); + } + + // UTF-8 => ISO-8859-1 + public static function iconv_fallback_utf8_iso88591($string) { + if (function_exists('utf8_decode')) { + return utf8_decode($string); + } + // utf8_decode() unavailable, use getID3()'s iconv_fallback() conversions (possibly PHP is compiled without XML support) + $newcharstring = ''; + $offset = 0; + $stringlength = strlen($string); + while ($offset < $stringlength) { + if ((ord($string{$offset}) | 0x07) == 0xF7) { + // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb + $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) & + ((ord($string{($offset + 1)}) & 0x3F) << 12) & + ((ord($string{($offset + 2)}) & 0x3F) << 6) & + (ord($string{($offset + 3)}) & 0x3F); + $offset += 4; + } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) { + // 1110bbbb 10bbbbbb 10bbbbbb + $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) & + ((ord($string{($offset + 1)}) & 0x3F) << 6) & + (ord($string{($offset + 2)}) & 0x3F); + $offset += 3; + } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) { + // 110bbbbb 10bbbbbb + $charval = ((ord($string{($offset + 0)}) & 0x1F) << 6) & + (ord($string{($offset + 1)}) & 0x3F); + $offset += 2; + } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) { + // 0bbbbbbb + $charval = ord($string{$offset}); + $offset += 1; + } else { + // error? throw some kind of warning here? + $charval = false; + $offset += 1; + } + if ($charval !== false) { + $newcharstring .= (($charval < 256) ? chr($charval) : '?'); + } + } + return $newcharstring; + } + + // UTF-8 => UTF-16BE + public static function iconv_fallback_utf8_utf16be($string, $bom=false) { + $newcharstring = ''; + if ($bom) { + $newcharstring .= "\xFE\xFF"; + } + $offset = 0; + $stringlength = strlen($string); + while ($offset < $stringlength) { + if ((ord($string{$offset}) | 0x07) == 0xF7) { + // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb + $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) & + ((ord($string{($offset + 1)}) & 0x3F) << 12) & + ((ord($string{($offset + 2)}) & 0x3F) << 6) & + (ord($string{($offset + 3)}) & 0x3F); + $offset += 4; + } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) { + // 1110bbbb 10bbbbbb 10bbbbbb + $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) & + ((ord($string{($offset + 1)}) & 0x3F) << 6) & + (ord($string{($offset + 2)}) & 0x3F); + $offset += 3; + } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) { + // 110bbbbb 10bbbbbb + $charval = ((ord($string{($offset + 0)}) & 0x1F) << 6) & + (ord($string{($offset + 1)}) & 0x3F); + $offset += 2; + } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) { + // 0bbbbbbb + $charval = ord($string{$offset}); + $offset += 1; + } else { + // error? throw some kind of warning here? + $charval = false; + $offset += 1; + } + if ($charval !== false) { + $newcharstring .= (($charval < 65536) ? self::BigEndian2String($charval, 2) : "\x00".'?'); + } + } + return $newcharstring; + } + + // UTF-8 => UTF-16LE + public static function iconv_fallback_utf8_utf16le($string, $bom=false) { + $newcharstring = ''; + if ($bom) { + $newcharstring .= "\xFF\xFE"; + } + $offset = 0; + $stringlength = strlen($string); + while ($offset < $stringlength) { + if ((ord($string{$offset}) | 0x07) == 0xF7) { + // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb + $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) & + ((ord($string{($offset + 1)}) & 0x3F) << 12) & + ((ord($string{($offset + 2)}) & 0x3F) << 6) & + (ord($string{($offset + 3)}) & 0x3F); + $offset += 4; + } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) { + // 1110bbbb 10bbbbbb 10bbbbbb + $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) & + ((ord($string{($offset + 1)}) & 0x3F) << 6) & + (ord($string{($offset + 2)}) & 0x3F); + $offset += 3; + } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) { + // 110bbbbb 10bbbbbb + $charval = ((ord($string{($offset + 0)}) & 0x1F) << 6) & + (ord($string{($offset + 1)}) & 0x3F); + $offset += 2; + } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) { + // 0bbbbbbb + $charval = ord($string{$offset}); + $offset += 1; + } else { + // error? maybe throw some warning here? + $charval = false; + $offset += 1; + } + if ($charval !== false) { + $newcharstring .= (($charval < 65536) ? self::LittleEndian2String($charval, 2) : '?'."\x00"); + } + } + return $newcharstring; + } + + // UTF-8 => UTF-16LE (BOM) + public static function iconv_fallback_utf8_utf16($string) { + return self::iconv_fallback_utf8_utf16le($string, true); + } + + // UTF-16BE => UTF-8 + public static function iconv_fallback_utf16be_utf8($string) { + if (substr($string, 0, 2) == "\xFE\xFF") { + // strip BOM + $string = substr($string, 2); + } + $newcharstring = ''; + for ($i = 0; $i < strlen($string); $i += 2) { + $charval = self::BigEndian2Int(substr($string, $i, 2)); + $newcharstring .= self::iconv_fallback_int_utf8($charval); + } + return $newcharstring; + } + + // UTF-16LE => UTF-8 + public static function iconv_fallback_utf16le_utf8($string) { + if (substr($string, 0, 2) == "\xFF\xFE") { + // strip BOM + $string = substr($string, 2); + } + $newcharstring = ''; + for ($i = 0; $i < strlen($string); $i += 2) { + $charval = self::LittleEndian2Int(substr($string, $i, 2)); + $newcharstring .= self::iconv_fallback_int_utf8($charval); + } + return $newcharstring; + } + + // UTF-16BE => ISO-8859-1 + public static function iconv_fallback_utf16be_iso88591($string) { + if (substr($string, 0, 2) == "\xFE\xFF") { + // strip BOM + $string = substr($string, 2); + } + $newcharstring = ''; + for ($i = 0; $i < strlen($string); $i += 2) { + $charval = self::BigEndian2Int(substr($string, $i, 2)); + $newcharstring .= (($charval < 256) ? chr($charval) : '?'); + } + return $newcharstring; + } + + // UTF-16LE => ISO-8859-1 + public static function iconv_fallback_utf16le_iso88591($string) { + if (substr($string, 0, 2) == "\xFF\xFE") { + // strip BOM + $string = substr($string, 2); + } + $newcharstring = ''; + for ($i = 0; $i < strlen($string); $i += 2) { + $charval = self::LittleEndian2Int(substr($string, $i, 2)); + $newcharstring .= (($charval < 256) ? chr($charval) : '?'); + } + return $newcharstring; + } + + // UTF-16 (BOM) => ISO-8859-1 + public static function iconv_fallback_utf16_iso88591($string) { + $bom = substr($string, 0, 2); + if ($bom == "\xFE\xFF") { + return self::iconv_fallback_utf16be_iso88591(substr($string, 2)); + } elseif ($bom == "\xFF\xFE") { + return self::iconv_fallback_utf16le_iso88591(substr($string, 2)); + } + return $string; + } + + // UTF-16 (BOM) => UTF-8 + public static function iconv_fallback_utf16_utf8($string) { + $bom = substr($string, 0, 2); + if ($bom == "\xFE\xFF") { + return self::iconv_fallback_utf16be_utf8(substr($string, 2)); + } elseif ($bom == "\xFF\xFE") { + return self::iconv_fallback_utf16le_utf8(substr($string, 2)); + } + return $string; + } + + public static function iconv_fallback($in_charset, $out_charset, $string) { + + if ($in_charset == $out_charset) { + return $string; + } + + // iconv() availble + if (function_exists('iconv')) { + if ($converted_string = @iconv($in_charset, $out_charset.'//TRANSLIT', $string)) { + switch ($out_charset) { + case 'ISO-8859-1': + $converted_string = rtrim($converted_string, "\x00"); + break; + } + return $converted_string; + } + + // iconv() may sometimes fail with "illegal character in input string" error message + // and return an empty string, but returning the unconverted string is more useful + return $string; + } + + + // iconv() not available + static $ConversionFunctionList = array(); + if (empty($ConversionFunctionList)) { + $ConversionFunctionList['ISO-8859-1']['UTF-8'] = 'iconv_fallback_iso88591_utf8'; + $ConversionFunctionList['ISO-8859-1']['UTF-16'] = 'iconv_fallback_iso88591_utf16'; + $ConversionFunctionList['ISO-8859-1']['UTF-16BE'] = 'iconv_fallback_iso88591_utf16be'; + $ConversionFunctionList['ISO-8859-1']['UTF-16LE'] = 'iconv_fallback_iso88591_utf16le'; + $ConversionFunctionList['UTF-8']['ISO-8859-1'] = 'iconv_fallback_utf8_iso88591'; + $ConversionFunctionList['UTF-8']['UTF-16'] = 'iconv_fallback_utf8_utf16'; + $ConversionFunctionList['UTF-8']['UTF-16BE'] = 'iconv_fallback_utf8_utf16be'; + $ConversionFunctionList['UTF-8']['UTF-16LE'] = 'iconv_fallback_utf8_utf16le'; + $ConversionFunctionList['UTF-16']['ISO-8859-1'] = 'iconv_fallback_utf16_iso88591'; + $ConversionFunctionList['UTF-16']['UTF-8'] = 'iconv_fallback_utf16_utf8'; + $ConversionFunctionList['UTF-16LE']['ISO-8859-1'] = 'iconv_fallback_utf16le_iso88591'; + $ConversionFunctionList['UTF-16LE']['UTF-8'] = 'iconv_fallback_utf16le_utf8'; + $ConversionFunctionList['UTF-16BE']['ISO-8859-1'] = 'iconv_fallback_utf16be_iso88591'; + $ConversionFunctionList['UTF-16BE']['UTF-8'] = 'iconv_fallback_utf16be_utf8'; + } + if (isset($ConversionFunctionList[strtoupper($in_charset)][strtoupper($out_charset)])) { + $ConversionFunction = $ConversionFunctionList[strtoupper($in_charset)][strtoupper($out_charset)]; + return self::$ConversionFunction($string); + } + throw new Exception('PHP does not have iconv() support - cannot convert from '.$in_charset.' to '.$out_charset); + } + + + public static function MultiByteCharString2HTML($string, $charset='ISO-8859-1') { + $string = (string) $string; // in case trying to pass a numeric (float, int) string, would otherwise return an empty string + $HTMLstring = ''; + + switch ($charset) { + case '1251': + case '1252': + case '866': + case '932': + case '936': + case '950': + case 'BIG5': + case 'BIG5-HKSCS': + case 'cp1251': + case 'cp1252': + case 'cp866': + case 'EUC-JP': + case 'EUCJP': + case 'GB2312': + case 'ibm866': + case 'ISO-8859-1': + case 'ISO-8859-15': + case 'ISO8859-1': + case 'ISO8859-15': + case 'KOI8-R': + case 'koi8-ru': + case 'koi8r': + case 'Shift_JIS': + case 'SJIS': + case 'win-1251': + case 'Windows-1251': + case 'Windows-1252': + $HTMLstring = htmlentities($string, ENT_COMPAT, $charset); + break; + + case 'UTF-8': + $strlen = strlen($string); + for ($i = 0; $i < $strlen; $i++) { + $char_ord_val = ord($string{$i}); + $charval = 0; + if ($char_ord_val < 0x80) { + $charval = $char_ord_val; + } elseif ((($char_ord_val & 0xF0) >> 4) == 0x0F && $i+3 < $strlen) { + $charval = (($char_ord_val & 0x07) << 18); + $charval += ((ord($string{++$i}) & 0x3F) << 12); + $charval += ((ord($string{++$i}) & 0x3F) << 6); + $charval += (ord($string{++$i}) & 0x3F); + } elseif ((($char_ord_val & 0xE0) >> 5) == 0x07 && $i+2 < $strlen) { + $charval = (($char_ord_val & 0x0F) << 12); + $charval += ((ord($string{++$i}) & 0x3F) << 6); + $charval += (ord($string{++$i}) & 0x3F); + } elseif ((($char_ord_val & 0xC0) >> 6) == 0x03 && $i+1 < $strlen) { + $charval = (($char_ord_val & 0x1F) << 6); + $charval += (ord($string{++$i}) & 0x3F); + } + if (($charval >= 32) && ($charval <= 127)) { + $HTMLstring .= htmlentities(chr($charval)); + } else { + $HTMLstring .= '&#'.$charval.';'; + } + } + break; + + case 'UTF-16LE': + for ($i = 0; $i < strlen($string); $i += 2) { + $charval = self::LittleEndian2Int(substr($string, $i, 2)); + if (($charval >= 32) && ($charval <= 127)) { + $HTMLstring .= chr($charval); + } else { + $HTMLstring .= '&#'.$charval.';'; + } + } + break; + + case 'UTF-16BE': + for ($i = 0; $i < strlen($string); $i += 2) { + $charval = self::BigEndian2Int(substr($string, $i, 2)); + if (($charval >= 32) && ($charval <= 127)) { + $HTMLstring .= chr($charval); + } else { + $HTMLstring .= '&#'.$charval.';'; + } + } + break; + + default: + $HTMLstring = 'ERROR: Character set "'.$charset.'" not supported in MultiByteCharString2HTML()'; + break; + } + return $HTMLstring; + } + + + + public static function RGADnameLookup($namecode) { + static $RGADname = array(); + if (empty($RGADname)) { + $RGADname[0] = 'not set'; + $RGADname[1] = 'Track Gain Adjustment'; + $RGADname[2] = 'Album Gain Adjustment'; + } + + return (isset($RGADname[$namecode]) ? $RGADname[$namecode] : ''); + } + + + public static function RGADoriginatorLookup($originatorcode) { + static $RGADoriginator = array(); + if (empty($RGADoriginator)) { + $RGADoriginator[0] = 'unspecified'; + $RGADoriginator[1] = 'pre-set by artist/producer/mastering engineer'; + $RGADoriginator[2] = 'set by user'; + $RGADoriginator[3] = 'determined automatically'; + } + + return (isset($RGADoriginator[$originatorcode]) ? $RGADoriginator[$originatorcode] : ''); + } + + + public static function RGADadjustmentLookup($rawadjustment, $signbit) { + $adjustment = $rawadjustment / 10; + if ($signbit == 1) { + $adjustment *= -1; + } + return (float) $adjustment; + } + + + public static function RGADgainString($namecode, $originatorcode, $replaygain) { + if ($replaygain < 0) { + $signbit = '1'; + } else { + $signbit = '0'; + } + $storedreplaygain = intval(round($replaygain * 10)); + $gainstring = str_pad(decbin($namecode), 3, '0', STR_PAD_LEFT); + $gainstring .= str_pad(decbin($originatorcode), 3, '0', STR_PAD_LEFT); + $gainstring .= $signbit; + $gainstring .= str_pad(decbin($storedreplaygain), 9, '0', STR_PAD_LEFT); + + return $gainstring; + } + + public static function RGADamplitude2dB($amplitude) { + return 20 * log10($amplitude); + } + + + public static function GetDataImageSize($imgData, &$imageinfo=array()) { + static $tempdir = ''; + if (empty($tempdir)) { + // yes this is ugly, feel free to suggest a better way + require_once(dirname(__FILE__).'/getid3.php'); + $getid3_temp = new getID3(); + $tempdir = $getid3_temp->tempdir; + unset($getid3_temp); + } + $GetDataImageSize = false; + if ($tempfilename = tempnam($tempdir, 'gI3')) { + if (is_writable($tempfilename) && is_file($tempfilename) && ($tmp = fopen($tempfilename, 'wb'))) { + fwrite($tmp, $imgData); + fclose($tmp); + $GetDataImageSize = @getimagesize($tempfilename, $imageinfo); + } + unlink($tempfilename); + } + return $GetDataImageSize; + } + + public static function ImageExtFromMime($mime_type) { + // temporary way, works OK for now, but should be reworked in the future + return str_replace(array('image/', 'x-', 'jpeg'), array('', '', 'jpg'), $mime_type); + } + + public static function ImageTypesLookup($imagetypeid) { + static $ImageTypesLookup = array(); + if (empty($ImageTypesLookup)) { + $ImageTypesLookup[1] = 'gif'; + $ImageTypesLookup[2] = 'jpeg'; + $ImageTypesLookup[3] = 'png'; + $ImageTypesLookup[4] = 'swf'; + $ImageTypesLookup[5] = 'psd'; + $ImageTypesLookup[6] = 'bmp'; + $ImageTypesLookup[7] = 'tiff (little-endian)'; + $ImageTypesLookup[8] = 'tiff (big-endian)'; + $ImageTypesLookup[9] = 'jpc'; + $ImageTypesLookup[10] = 'jp2'; + $ImageTypesLookup[11] = 'jpx'; + $ImageTypesLookup[12] = 'jb2'; + $ImageTypesLookup[13] = 'swc'; + $ImageTypesLookup[14] = 'iff'; + } + return (isset($ImageTypesLookup[$imagetypeid]) ? $ImageTypesLookup[$imagetypeid] : ''); + } + + public static function CopyTagsToComments(&$ThisFileInfo) { + + // Copy all entries from ['tags'] into common ['comments'] + if (!empty($ThisFileInfo['tags'])) { + foreach ($ThisFileInfo['tags'] as $tagtype => $tagarray) { + foreach ($tagarray as $tagname => $tagdata) { + foreach ($tagdata as $key => $value) { + if (!empty($value)) { + if (empty($ThisFileInfo['comments'][$tagname])) { + + // fall through and append value + + } elseif ($tagtype == 'id3v1') { + + $newvaluelength = strlen(trim($value)); + foreach ($ThisFileInfo['comments'][$tagname] as $existingkey => $existingvalue) { + $oldvaluelength = strlen(trim($existingvalue)); + if (($newvaluelength <= $oldvaluelength) && (substr($existingvalue, 0, $newvaluelength) == trim($value))) { + // new value is identical but shorter-than (or equal-length to) one already in comments - skip + break 2; + } + } + + } elseif (!is_array($value)) { + + $newvaluelength = strlen(trim($value)); + foreach ($ThisFileInfo['comments'][$tagname] as $existingkey => $existingvalue) { + $oldvaluelength = strlen(trim($existingvalue)); + if (($newvaluelength > $oldvaluelength) && (substr(trim($value), 0, strlen($existingvalue)) == $existingvalue)) { + $ThisFileInfo['comments'][$tagname][$existingkey] = trim($value); + break 2; + } + } + + } + if (is_array($value) || empty($ThisFileInfo['comments'][$tagname]) || !in_array(trim($value), $ThisFileInfo['comments'][$tagname])) { + $value = (is_string($value) ? trim($value) : $value); + $ThisFileInfo['comments'][$tagname][] = $value; + } + } + } + } + } + + // Copy to ['comments_html'] + foreach ($ThisFileInfo['comments'] as $field => $values) { + if ($field == 'picture') { + // pictures can take up a lot of space, and we don't need multiple copies of them + // let there be a single copy in [comments][picture], and not elsewhere + continue; + } + foreach ($values as $index => $value) { + if (is_array($value)) { + $ThisFileInfo['comments_html'][$field][$index] = $value; + } else { + $ThisFileInfo['comments_html'][$field][$index] = str_replace('�', '', self::MultiByteCharString2HTML($value, $ThisFileInfo['encoding'])); + } + } + } + } + return true; + } + + + public static function EmbeddedLookup($key, $begin, $end, $file, $name) { + + // Cached + static $cache; + if (isset($cache[$file][$name])) { + return (isset($cache[$file][$name][$key]) ? $cache[$file][$name][$key] : ''); + } + + // Init + $keylength = strlen($key); + $line_count = $end - $begin - 7; + + // Open php file + $fp = fopen($file, 'r'); + + // Discard $begin lines + for ($i = 0; $i < ($begin + 3); $i++) { + fgets($fp, 1024); + } + + // Loop thru line + while (0 < $line_count--) { + + // Read line + $line = ltrim(fgets($fp, 1024), "\t "); + + // METHOD A: only cache the matching key - less memory but slower on next lookup of not-previously-looked-up key + //$keycheck = substr($line, 0, $keylength); + //if ($key == $keycheck) { + // $cache[$file][$name][$keycheck] = substr($line, $keylength + 1); + // break; + //} + + // METHOD B: cache all keys in this lookup - more memory but faster on next lookup of not-previously-looked-up key + //$cache[$file][$name][substr($line, 0, $keylength)] = trim(substr($line, $keylength + 1)); + $explodedLine = explode("\t", $line, 2); + $ThisKey = (isset($explodedLine[0]) ? $explodedLine[0] : ''); + $ThisValue = (isset($explodedLine[1]) ? $explodedLine[1] : ''); + $cache[$file][$name][$ThisKey] = trim($ThisValue); + } + + // Close and return + fclose($fp); + return (isset($cache[$file][$name][$key]) ? $cache[$file][$name][$key] : ''); + } + + public static function IncludeDependency($filename, $sourcefile, $DieOnFailure=false) { + global $GETID3_ERRORARRAY; + + if (file_exists($filename)) { + if (include_once($filename)) { + return true; + } else { + $diemessage = basename($sourcefile).' depends on '.$filename.', which has errors'; + } + } else { + $diemessage = basename($sourcefile).' depends on '.$filename.', which is missing'; + } + if ($DieOnFailure) { + throw new Exception($diemessage); + } else { + $GETID3_ERRORARRAY[] = $diemessage; + } + return false; + } + + public static function trimNullByte($string) { + return trim($string, "\x00"); + } + + public static function getFileSizeSyscall($path) { + $filesize = false; + + if (GETID3_OS_ISWINDOWS) { + if (class_exists('COM')) { // From PHP 5.3.15 and 5.4.5, COM and DOTNET is no longer built into the php core.you have to add COM support in php.ini: + $filesystem = new COM('Scripting.FileSystemObject'); + $file = $filesystem->GetFile($path); + $filesize = $file->Size(); + unset($filesystem, $file); + } else { + $commandline = 'for %I in ('.escapeshellarg($path).') do @echo %~zI'; + } + } else { + $commandline = 'ls -l '.escapeshellarg($path).' | awk \'{print $5}\''; + } + if (isset($commandline)) { + $output = trim(`$commandline`); + if (ctype_digit($output)) { + $filesize = (float) $output; + } + } + return $filesize; + } +} \ No newline at end of file diff --git a/src/wp-includes/ID3/getid3.php b/src/wp-includes/ID3/getid3.php new file mode 100644 index 0000000..84b9cce --- /dev/null +++ b/src/wp-includes/ID3/getid3.php @@ -0,0 +1,1776 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// // +// Please see readme.txt for more information // +// /// +///////////////////////////////////////////////////////////////// + +// define a constant rather than looking up every time it is needed +if (!defined('GETID3_OS_ISWINDOWS')) { + define('GETID3_OS_ISWINDOWS', (stripos(PHP_OS, 'WIN') === 0)); +} +// Get base path of getID3() - ONCE +if (!defined('GETID3_INCLUDEPATH')) { + define('GETID3_INCLUDEPATH', dirname(__FILE__).DIRECTORY_SEPARATOR); +} + +// attempt to define temp dir as something flexible but reliable +$temp_dir = ini_get('upload_tmp_dir'); +if ($temp_dir && (!is_dir($temp_dir) || !is_readable($temp_dir))) { + $temp_dir = ''; +} +if (!$temp_dir && function_exists('sys_get_temp_dir')) { + // PHP v5.2.1+ + // sys_get_temp_dir() may give inaccessible temp dir, e.g. with open_basedir on virtual hosts + $temp_dir = sys_get_temp_dir(); +} +$temp_dir = realpath($temp_dir); +$open_basedir = ini_get('open_basedir'); +if ($open_basedir) { + // e.g. "/var/www/vhosts/getid3.org/httpdocs/:/tmp/" + $temp_dir = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $temp_dir); + $open_basedir = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $open_basedir); + if (substr($temp_dir, -1, 1) != DIRECTORY_SEPARATOR) { + $temp_dir .= DIRECTORY_SEPARATOR; + } + $found_valid_tempdir = false; + $open_basedirs = explode(PATH_SEPARATOR, $open_basedir); + foreach ($open_basedirs as $basedir) { + if (substr($basedir, -1, 1) != DIRECTORY_SEPARATOR) { + $basedir .= DIRECTORY_SEPARATOR; + } + if (preg_match('#^'.preg_quote($basedir).'#', $temp_dir)) { + $found_valid_tempdir = true; + break; + } + } + if (!$found_valid_tempdir) { + $temp_dir = ''; + } + unset($open_basedirs, $found_valid_tempdir, $basedir); +} +if (!$temp_dir) { + $temp_dir = '*'; // invalid directory name should force tempnam() to use system default temp dir +} +// $temp_dir = '/something/else/'; // feel free to override temp dir here if it works better for your system +define('GETID3_TEMP_DIR', $temp_dir); +unset($open_basedir, $temp_dir); + +// End: Defines + + +class getID3 +{ + // public: Settings + public $encoding = 'UTF-8'; // CASE SENSITIVE! - i.e. (must be supported by iconv()). Examples: ISO-8859-1 UTF-8 UTF-16 UTF-16BE + public $encoding_id3v1 = 'ISO-8859-1'; // Should always be 'ISO-8859-1', but some tags may be written in other encodings such as 'EUC-CN' or 'CP1252' + + // public: Optional tag checks - disable for speed. + public $option_tag_id3v1 = true; // Read and process ID3v1 tags + public $option_tag_id3v2 = true; // Read and process ID3v2 tags + public $option_tag_lyrics3 = true; // Read and process Lyrics3 tags + public $option_tag_apetag = true; // Read and process APE tags + public $option_tags_process = true; // Copy tags to root key 'tags' and encode to $this->encoding + public $option_tags_html = true; // Copy tags to root key 'tags_html' properly translated from various encodings to HTML entities + + // public: Optional tag/comment calucations + public $option_extra_info = true; // Calculate additional info such as bitrate, channelmode etc + + // public: Optional handling of embedded attachments (e.g. images) + public $option_save_attachments = true; // defaults to true (ATTACHMENTS_INLINE) for backward compatibility + + // public: Optional calculations + public $option_md5_data = false; // Get MD5 sum of data part - slow + public $option_md5_data_source = false; // Use MD5 of source file if availble - only FLAC and OptimFROG + public $option_sha1_data = false; // Get SHA1 sum of data part - slow + public $option_max_2gb_check = null; // Check whether file is larger than 2GB and thus not supported by 32-bit PHP (null: auto-detect based on PHP_INT_MAX) + + // public: Read buffer size in bytes + public $option_fread_buffer_size = 32768; + + // Public variables + public $filename; // Filename of file being analysed. + public $fp; // Filepointer to file being analysed. + public $info; // Result array. + public $tempdir = GETID3_TEMP_DIR; + + // Protected variables + protected $startup_error = ''; + protected $startup_warning = ''; + protected $memory_limit = 0; + + const VERSION = '1.9.7-20130705'; + const FREAD_BUFFER_SIZE = 32768; + + const ATTACHMENTS_NONE = false; + const ATTACHMENTS_INLINE = true; + + // public: constructor + public function __construct() { + + // Check for PHP version + $required_php_version = '5.0.5'; + if (version_compare(PHP_VERSION, $required_php_version, '<')) { + $this->startup_error .= 'getID3() requires PHP v'.$required_php_version.' or higher - you are running v'.PHP_VERSION; + return false; + } + + // Check memory + $this->memory_limit = ini_get('memory_limit'); + if (preg_match('#([0-9]+)M#i', $this->memory_limit, $matches)) { + // could be stored as "16M" rather than 16777216 for example + $this->memory_limit = $matches[1] * 1048576; + } elseif (preg_match('#([0-9]+)G#i', $this->memory_limit, $matches)) { // The 'G' modifier is available since PHP 5.1.0 + // could be stored as "2G" rather than 2147483648 for example + $this->memory_limit = $matches[1] * 1073741824; + } + if ($this->memory_limit <= 0) { + // memory limits probably disabled + } elseif ($this->memory_limit <= 4194304) { + $this->startup_error .= 'PHP has less than 4MB available memory and will very likely run out. Increase memory_limit in php.ini'; + } elseif ($this->memory_limit <= 12582912) { + $this->startup_warning .= 'PHP has less than 12MB available memory and might run out if all modules are loaded. Increase memory_limit in php.ini'; + } + + // Check safe_mode off + if (preg_match('#(1|ON)#i', ini_get('safe_mode'))) { + $this->warning('WARNING: Safe mode is on, shorten support disabled, md5data/sha1data for ogg vorbis disabled, ogg vorbos/flac tag writing disabled.'); + } + + if (intval(ini_get('mbstring.func_overload')) > 0) { + $this->warning('WARNING: php.ini contains "mbstring.func_overload = '.ini_get('mbstring.func_overload').'", this may break things.'); + } + + // Check for magic_quotes_runtime + if (function_exists('get_magic_quotes_runtime')) { + if (get_magic_quotes_runtime()) { + return $this->startup_error('magic_quotes_runtime must be disabled before running getID3(). Surround getid3 block by set_magic_quotes_runtime(0) and set_magic_quotes_runtime(1).'); + } + } + + // Check for magic_quotes_gpc + if (function_exists('magic_quotes_gpc')) { + if (get_magic_quotes_gpc()) { + return $this->startup_error('magic_quotes_gpc must be disabled before running getID3(). Surround getid3 block by set_magic_quotes_gpc(0) and set_magic_quotes_gpc(1).'); + } + } + + // Load support library + if (!include_once(GETID3_INCLUDEPATH.'getid3.lib.php')) { + $this->startup_error .= 'getid3.lib.php is missing or corrupt'; + } + + if ($this->option_max_2gb_check === null) { + $this->option_max_2gb_check = (PHP_INT_MAX <= 2147483647); + } + + + // Needed for Windows only: + // Define locations of helper applications for Shorten, VorbisComment, MetaFLAC + // as well as other helper functions such as head, tail, md5sum, etc + // This path cannot contain spaces, but the below code will attempt to get the + // 8.3-equivalent path automatically + // IMPORTANT: This path must include the trailing slash + if (GETID3_OS_ISWINDOWS && !defined('GETID3_HELPERAPPSDIR')) { + + $helperappsdir = GETID3_INCLUDEPATH.'..'.DIRECTORY_SEPARATOR.'helperapps'; // must not have any space in this path + + if (!is_dir($helperappsdir)) { + $this->startup_warning .= '"'.$helperappsdir.'" cannot be defined as GETID3_HELPERAPPSDIR because it does not exist'; + } elseif (strpos(realpath($helperappsdir), ' ') !== false) { + $DirPieces = explode(DIRECTORY_SEPARATOR, realpath($helperappsdir)); + $path_so_far = array(); + foreach ($DirPieces as $key => $value) { + if (strpos($value, ' ') !== false) { + if (!empty($path_so_far)) { + $commandline = 'dir /x '.escapeshellarg(implode(DIRECTORY_SEPARATOR, $path_so_far)); + $dir_listing = `$commandline`; + $lines = explode("\n", $dir_listing); + foreach ($lines as $line) { + $line = trim($line); + if (preg_match('#^([0-9/]{10}) +([0-9:]{4,5}( [AP]M)?) +(|[0-9,]+) +([^ ]{0,11}) +(.+)$#', $line, $matches)) { + list($dummy, $date, $time, $ampm, $filesize, $shortname, $filename) = $matches; + if ((strtoupper($filesize) == '') && (strtolower($filename) == strtolower($value))) { + $value = $shortname; + } + } + } + } else { + $this->startup_warning .= 'GETID3_HELPERAPPSDIR must not have any spaces in it - use 8dot3 naming convention if neccesary. You can run "dir /x" from the commandline to see the correct 8.3-style names.'; + } + } + $path_so_far[] = $value; + } + $helperappsdir = implode(DIRECTORY_SEPARATOR, $path_so_far); + } + define('GETID3_HELPERAPPSDIR', $helperappsdir.DIRECTORY_SEPARATOR); + } + + return true; + } + + public function version() { + return self::VERSION; + } + + public function fread_buffer_size() { + return $this->option_fread_buffer_size; + } + + + // public: setOption + public function setOption($optArray) { + if (!is_array($optArray) || empty($optArray)) { + return false; + } + foreach ($optArray as $opt => $val) { + if (isset($this->$opt) === false) { + continue; + } + $this->$opt = $val; + } + return true; + } + + + public function openfile($filename) { + try { + if (!empty($this->startup_error)) { + throw new getid3_exception($this->startup_error); + } + if (!empty($this->startup_warning)) { + $this->warning($this->startup_warning); + } + + // init result array and set parameters + $this->filename = $filename; + $this->info = array(); + $this->info['GETID3_VERSION'] = $this->version(); + $this->info['php_memory_limit'] = $this->memory_limit; + + // remote files not supported + if (preg_match('/^(ht|f)tp:\/\//', $filename)) { + throw new getid3_exception('Remote files are not supported - please copy the file locally first'); + } + + $filename = str_replace('/', DIRECTORY_SEPARATOR, $filename); + $filename = preg_replace('#(.+)'.preg_quote(DIRECTORY_SEPARATOR).'{2,}#U', '\1'.DIRECTORY_SEPARATOR, $filename); + + // open local file + if (is_readable($filename) && is_file($filename) && ($this->fp = fopen($filename, 'rb'))) { + // great + } else { + throw new getid3_exception('Could not open "'.$filename.'" (does not exist, or is not a file)'); + } + + $this->info['filesize'] = filesize($filename); + // set redundant parameters - might be needed in some include file + $this->info['filename'] = basename($filename); + $this->info['filepath'] = str_replace('\\', '/', realpath(dirname($filename))); + $this->info['filenamepath'] = $this->info['filepath'].'/'.$this->info['filename']; + + + // option_max_2gb_check + if ($this->option_max_2gb_check) { + // PHP (32-bit all, and 64-bit Windows) doesn't support integers larger than 2^31 (~2GB) + // filesize() simply returns (filesize % (pow(2, 32)), no matter the actual filesize + // ftell() returns 0 if seeking to the end is beyond the range of unsigned integer + $fseek = fseek($this->fp, 0, SEEK_END); + if (($fseek < 0) || (($this->info['filesize'] != 0) && (ftell($this->fp) == 0)) || + ($this->info['filesize'] < 0) || + (ftell($this->fp) < 0)) { + $real_filesize = getid3_lib::getFileSizeSyscall($this->info['filenamepath']); + + if ($real_filesize === false) { + unset($this->info['filesize']); + fclose($this->fp); + throw new getid3_exception('Unable to determine actual filesize. File is most likely larger than '.round(PHP_INT_MAX / 1073741824).'GB and is not supported by PHP.'); + } elseif (getid3_lib::intValueSupported($real_filesize)) { + unset($this->info['filesize']); + fclose($this->fp); + throw new getid3_exception('PHP seems to think the file is larger than '.round(PHP_INT_MAX / 1073741824).'GB, but filesystem reports it as '.number_format($real_filesize, 3).'GB, please report to info@getid3.org'); + } + $this->info['filesize'] = $real_filesize; + $this->warning('File is larger than '.round(PHP_INT_MAX / 1073741824).'GB (filesystem reports it as '.number_format($real_filesize, 3).'GB) and is not properly supported by PHP.'); + } + } + + // set more parameters + $this->info['avdataoffset'] = 0; + $this->info['avdataend'] = $this->info['filesize']; + $this->info['fileformat'] = ''; // filled in later + $this->info['audio']['dataformat'] = ''; // filled in later, unset if not used + $this->info['video']['dataformat'] = ''; // filled in later, unset if not used + $this->info['tags'] = array(); // filled in later, unset if not used + $this->info['error'] = array(); // filled in later, unset if not used + $this->info['warning'] = array(); // filled in later, unset if not used + $this->info['comments'] = array(); // filled in later, unset if not used + $this->info['encoding'] = $this->encoding; // required by id3v2 and iso modules - can be unset at the end if desired + + return true; + + } catch (Exception $e) { + $this->error($e->getMessage()); + } + return false; + } + + // public: analyze file + public function analyze($filename) { + try { + if (!$this->openfile($filename)) { + return $this->info; + } + + // Handle tags + foreach (array('id3v2'=>'id3v2', 'id3v1'=>'id3v1', 'apetag'=>'ape', 'lyrics3'=>'lyrics3') as $tag_name => $tag_key) { + $option_tag = 'option_tag_'.$tag_name; + if ($this->$option_tag) { + $this->include_module('tag.'.$tag_name); + try { + $tag_class = 'getid3_'.$tag_name; + $tag = new $tag_class($this); + $tag->Analyze(); + } + catch (getid3_exception $e) { + throw $e; + } + } + } + if (isset($this->info['id3v2']['tag_offset_start'])) { + $this->info['avdataoffset'] = max($this->info['avdataoffset'], $this->info['id3v2']['tag_offset_end']); + } + foreach (array('id3v1'=>'id3v1', 'apetag'=>'ape', 'lyrics3'=>'lyrics3') as $tag_name => $tag_key) { + if (isset($this->info[$tag_key]['tag_offset_start'])) { + $this->info['avdataend'] = min($this->info['avdataend'], $this->info[$tag_key]['tag_offset_start']); + } + } + + // ID3v2 detection (NOT parsing), even if ($this->option_tag_id3v2 == false) done to make fileformat easier + if (!$this->option_tag_id3v2) { + fseek($this->fp, 0, SEEK_SET); + $header = fread($this->fp, 10); + if ((substr($header, 0, 3) == 'ID3') && (strlen($header) == 10)) { + $this->info['id3v2']['header'] = true; + $this->info['id3v2']['majorversion'] = ord($header{3}); + $this->info['id3v2']['minorversion'] = ord($header{4}); + $this->info['avdataoffset'] += getid3_lib::BigEndian2Int(substr($header, 6, 4), 1) + 10; // length of ID3v2 tag in 10-byte header doesn't include 10-byte header length + } + } + + // read 32 kb file data + fseek($this->fp, $this->info['avdataoffset'], SEEK_SET); + $formattest = fread($this->fp, 32774); + + // determine format + $determined_format = $this->GetFileFormat($formattest, $filename); + + // unable to determine file format + if (!$determined_format) { + fclose($this->fp); + return $this->error('unable to determine file format'); + } + + // check for illegal ID3 tags + if (isset($determined_format['fail_id3']) && (in_array('id3v1', $this->info['tags']) || in_array('id3v2', $this->info['tags']))) { + if ($determined_format['fail_id3'] === 'ERROR') { + fclose($this->fp); + return $this->error('ID3 tags not allowed on this file type.'); + } elseif ($determined_format['fail_id3'] === 'WARNING') { + $this->warning('ID3 tags not allowed on this file type.'); + } + } + + // check for illegal APE tags + if (isset($determined_format['fail_ape']) && in_array('ape', $this->info['tags'])) { + if ($determined_format['fail_ape'] === 'ERROR') { + fclose($this->fp); + return $this->error('APE tags not allowed on this file type.'); + } elseif ($determined_format['fail_ape'] === 'WARNING') { + $this->warning('APE tags not allowed on this file type.'); + } + } + + // set mime type + $this->info['mime_type'] = $determined_format['mime_type']; + + // supported format signature pattern detected, but module deleted + if (!file_exists(GETID3_INCLUDEPATH.$determined_format['include'])) { + fclose($this->fp); + return $this->error('Format not supported, module "'.$determined_format['include'].'" was removed.'); + } + + // module requires iconv support + // Check encoding/iconv support + if (!empty($determined_format['iconv_req']) && !function_exists('iconv') && !in_array($this->encoding, array('ISO-8859-1', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'UTF-16'))) { + $errormessage = 'iconv() support is required for this module ('.$determined_format['include'].') for encodings other than ISO-8859-1, UTF-8, UTF-16LE, UTF16-BE, UTF-16. '; + if (GETID3_OS_ISWINDOWS) { + $errormessage .= 'PHP does not have iconv() support. Please enable php_iconv.dll in php.ini, and copy iconv.dll from c:/php/dlls to c:/windows/system32'; + } else { + $errormessage .= 'PHP is not compiled with iconv() support. Please recompile with the --with-iconv switch'; + } + return $this->error($errormessage); + } + + // include module + include_once(GETID3_INCLUDEPATH.$determined_format['include']); + + // instantiate module class + $class_name = 'getid3_'.$determined_format['module']; + if (!class_exists($class_name)) { + return $this->error('Format not supported, module "'.$determined_format['include'].'" is corrupt.'); + } + $class = new $class_name($this); + $class->Analyze(); + unset($class); + + // close file + fclose($this->fp); + + // process all tags - copy to 'tags' and convert charsets + if ($this->option_tags_process) { + $this->HandleAllTags(); + } + + // perform more calculations + if ($this->option_extra_info) { + $this->ChannelsBitratePlaytimeCalculations(); + $this->CalculateCompressionRatioVideo(); + $this->CalculateCompressionRatioAudio(); + $this->CalculateReplayGain(); + $this->ProcessAudioStreams(); + } + + // get the MD5 sum of the audio/video portion of the file - without ID3/APE/Lyrics3/etc header/footer tags + if ($this->option_md5_data) { + // do not calc md5_data if md5_data_source is present - set by flac only - future MPC/SV8 too + if (!$this->option_md5_data_source || empty($this->info['md5_data_source'])) { + $this->getHashdata('md5'); + } + } + + // get the SHA1 sum of the audio/video portion of the file - without ID3/APE/Lyrics3/etc header/footer tags + if ($this->option_sha1_data) { + $this->getHashdata('sha1'); + } + + // remove undesired keys + $this->CleanUp(); + + } catch (Exception $e) { + $this->error('Caught exception: '.$e->getMessage()); + } + + // return info array + return $this->info; + } + + + // private: error handling + public function error($message) { + $this->CleanUp(); + if (!isset($this->info['error'])) { + $this->info['error'] = array(); + } + $this->info['error'][] = $message; + return $this->info; + } + + + // private: warning handling + public function warning($message) { + $this->info['warning'][] = $message; + return true; + } + + + // private: CleanUp + private function CleanUp() { + + // remove possible empty keys + $AVpossibleEmptyKeys = array('dataformat', 'bits_per_sample', 'encoder_options', 'streams', 'bitrate'); + foreach ($AVpossibleEmptyKeys as $dummy => $key) { + if (empty($this->info['audio'][$key]) && isset($this->info['audio'][$key])) { + unset($this->info['audio'][$key]); + } + if (empty($this->info['video'][$key]) && isset($this->info['video'][$key])) { + unset($this->info['video'][$key]); + } + } + + // remove empty root keys + if (!empty($this->info)) { + foreach ($this->info as $key => $value) { + if (empty($this->info[$key]) && ($this->info[$key] !== 0) && ($this->info[$key] !== '0')) { + unset($this->info[$key]); + } + } + } + + // remove meaningless entries from unknown-format files + if (empty($this->info['fileformat'])) { + if (isset($this->info['avdataoffset'])) { + unset($this->info['avdataoffset']); + } + if (isset($this->info['avdataend'])) { + unset($this->info['avdataend']); + } + } + + // remove possible duplicated identical entries + if (!empty($this->info['error'])) { + $this->info['error'] = array_values(array_unique($this->info['error'])); + } + if (!empty($this->info['warning'])) { + $this->info['warning'] = array_values(array_unique($this->info['warning'])); + } + + // remove "global variable" type keys + unset($this->info['php_memory_limit']); + + return true; + } + + + // return array containing information about all supported formats + public function GetFileFormatArray() { + static $format_info = array(); + if (empty($format_info)) { + $format_info = array( + + // Audio formats + + // AC-3 - audio - Dolby AC-3 / Dolby Digital + 'ac3' => array( + 'pattern' => '^\x0B\x77', + 'group' => 'audio', + 'module' => 'ac3', + 'mime_type' => 'audio/ac3', + ), + + // AAC - audio - Advanced Audio Coding (AAC) - ADIF format + 'adif' => array( + 'pattern' => '^ADIF', + 'group' => 'audio', + 'module' => 'aac', + 'mime_type' => 'application/octet-stream', + 'fail_ape' => 'WARNING', + ), + +/* + // AA - audio - Audible Audiobook + 'aa' => array( + 'pattern' => '^.{4}\x57\x90\x75\x36', + 'group' => 'audio', + 'module' => 'aa', + 'mime_type' => 'audio/audible', + ), +*/ + // AAC - audio - Advanced Audio Coding (AAC) - ADTS format (very similar to MP3) + 'adts' => array( + 'pattern' => '^\xFF[\xF0-\xF1\xF8-\xF9]', + 'group' => 'audio', + 'module' => 'aac', + 'mime_type' => 'application/octet-stream', + 'fail_ape' => 'WARNING', + ), + + + // AU - audio - NeXT/Sun AUdio (AU) + 'au' => array( + 'pattern' => '^\.snd', + 'group' => 'audio', + 'module' => 'au', + 'mime_type' => 'audio/basic', + ), + + // AVR - audio - Audio Visual Research + 'avr' => array( + 'pattern' => '^2BIT', + 'group' => 'audio', + 'module' => 'avr', + 'mime_type' => 'application/octet-stream', + ), + + // BONK - audio - Bonk v0.9+ + 'bonk' => array( + 'pattern' => '^\x00(BONK|INFO|META| ID3)', + 'group' => 'audio', + 'module' => 'bonk', + 'mime_type' => 'audio/xmms-bonk', + ), + + // DSS - audio - Digital Speech Standard + 'dss' => array( + 'pattern' => '^[\x02-\x03]ds[s2]', + 'group' => 'audio', + 'module' => 'dss', + 'mime_type' => 'application/octet-stream', + ), + + // DTS - audio - Dolby Theatre System + 'dts' => array( + 'pattern' => '^\x7F\xFE\x80\x01', + 'group' => 'audio', + 'module' => 'dts', + 'mime_type' => 'audio/dts', + ), + + // FLAC - audio - Free Lossless Audio Codec + 'flac' => array( + 'pattern' => '^fLaC', + 'group' => 'audio', + 'module' => 'flac', + 'mime_type' => 'audio/x-flac', + ), + + // LA - audio - Lossless Audio (LA) + 'la' => array( + 'pattern' => '^LA0[2-4]', + 'group' => 'audio', + 'module' => 'la', + 'mime_type' => 'application/octet-stream', + ), + + // LPAC - audio - Lossless Predictive Audio Compression (LPAC) + 'lpac' => array( + 'pattern' => '^LPAC', + 'group' => 'audio', + 'module' => 'lpac', + 'mime_type' => 'application/octet-stream', + ), + + // MIDI - audio - MIDI (Musical Instrument Digital Interface) + 'midi' => array( + 'pattern' => '^MThd', + 'group' => 'audio', + 'module' => 'midi', + 'mime_type' => 'audio/midi', + ), + + // MAC - audio - Monkey's Audio Compressor + 'mac' => array( + 'pattern' => '^MAC ', + 'group' => 'audio', + 'module' => 'monkey', + 'mime_type' => 'application/octet-stream', + ), + +// has been known to produce false matches in random files (e.g. JPEGs), leave out until more precise matching available +// // MOD - audio - MODule (assorted sub-formats) +// 'mod' => array( +// 'pattern' => '^.{1080}(M\\.K\\.|M!K!|FLT4|FLT8|[5-9]CHN|[1-3][0-9]CH)', +// 'group' => 'audio', +// 'module' => 'mod', +// 'option' => 'mod', +// 'mime_type' => 'audio/mod', +// ), + + // MOD - audio - MODule (Impulse Tracker) + 'it' => array( + 'pattern' => '^IMPM', + 'group' => 'audio', + 'module' => 'mod', + //'option' => 'it', + 'mime_type' => 'audio/it', + ), + + // MOD - audio - MODule (eXtended Module, various sub-formats) + 'xm' => array( + 'pattern' => '^Extended Module', + 'group' => 'audio', + 'module' => 'mod', + //'option' => 'xm', + 'mime_type' => 'audio/xm', + ), + + // MOD - audio - MODule (ScreamTracker) + 's3m' => array( + 'pattern' => '^.{44}SCRM', + 'group' => 'audio', + 'module' => 'mod', + //'option' => 's3m', + 'mime_type' => 'audio/s3m', + ), + + // MPC - audio - Musepack / MPEGplus + 'mpc' => array( + 'pattern' => '^(MPCK|MP\+|[\x00\x01\x10\x11\x40\x41\x50\x51\x80\x81\x90\x91\xC0\xC1\xD0\xD1][\x20-37][\x00\x20\x40\x60\x80\xA0\xC0\xE0])', + 'group' => 'audio', + 'module' => 'mpc', + 'mime_type' => 'audio/x-musepack', + ), + + // MP3 - audio - MPEG-audio Layer 3 (very similar to AAC-ADTS) + 'mp3' => array( + 'pattern' => '^\xFF[\xE2-\xE7\xF2-\xF7\xFA-\xFF][\x00-\x0B\x10-\x1B\x20-\x2B\x30-\x3B\x40-\x4B\x50-\x5B\x60-\x6B\x70-\x7B\x80-\x8B\x90-\x9B\xA0-\xAB\xB0-\xBB\xC0-\xCB\xD0-\xDB\xE0-\xEB\xF0-\xFB]', + 'group' => 'audio', + 'module' => 'mp3', + 'mime_type' => 'audio/mpeg', + ), + + // OFR - audio - OptimFROG + 'ofr' => array( + 'pattern' => '^(\*RIFF|OFR)', + 'group' => 'audio', + 'module' => 'optimfrog', + 'mime_type' => 'application/octet-stream', + ), + + // RKAU - audio - RKive AUdio compressor + 'rkau' => array( + 'pattern' => '^RKA', + 'group' => 'audio', + 'module' => 'rkau', + 'mime_type' => 'application/octet-stream', + ), + + // SHN - audio - Shorten + 'shn' => array( + 'pattern' => '^ajkg', + 'group' => 'audio', + 'module' => 'shorten', + 'mime_type' => 'audio/xmms-shn', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + // TTA - audio - TTA Lossless Audio Compressor (http://tta.corecodec.org) + 'tta' => array( + 'pattern' => '^TTA', // could also be '^TTA(\x01|\x02|\x03|2|1)' + 'group' => 'audio', + 'module' => 'tta', + 'mime_type' => 'application/octet-stream', + ), + + // VOC - audio - Creative Voice (VOC) + 'voc' => array( + 'pattern' => '^Creative Voice File', + 'group' => 'audio', + 'module' => 'voc', + 'mime_type' => 'audio/voc', + ), + + // VQF - audio - transform-domain weighted interleave Vector Quantization Format (VQF) + 'vqf' => array( + 'pattern' => '^TWIN', + 'group' => 'audio', + 'module' => 'vqf', + 'mime_type' => 'application/octet-stream', + ), + + // WV - audio - WavPack (v4.0+) + 'wv' => array( + 'pattern' => '^wvpk', + 'group' => 'audio', + 'module' => 'wavpack', + 'mime_type' => 'application/octet-stream', + ), + + + // Audio-Video formats + + // ASF - audio/video - Advanced Streaming Format, Windows Media Video, Windows Media Audio + 'asf' => array( + 'pattern' => '^\x30\x26\xB2\x75\x8E\x66\xCF\x11\xA6\xD9\x00\xAA\x00\x62\xCE\x6C', + 'group' => 'audio-video', + 'module' => 'asf', + 'mime_type' => 'video/x-ms-asf', + 'iconv_req' => false, + ), + + // BINK - audio/video - Bink / Smacker + 'bink' => array( + 'pattern' => '^(BIK|SMK)', + 'group' => 'audio-video', + 'module' => 'bink', + 'mime_type' => 'application/octet-stream', + ), + + // FLV - audio/video - FLash Video + 'flv' => array( + 'pattern' => '^FLV\x01', + 'group' => 'audio-video', + 'module' => 'flv', + 'mime_type' => 'video/x-flv', + ), + + // MKAV - audio/video - Mastroka + 'matroska' => array( + 'pattern' => '^\x1A\x45\xDF\xA3', + 'group' => 'audio-video', + 'module' => 'matroska', + 'mime_type' => 'video/x-matroska', // may also be audio/x-matroska + ), + + // MPEG - audio/video - MPEG (Moving Pictures Experts Group) + 'mpeg' => array( + 'pattern' => '^\x00\x00\x01(\xBA|\xB3)', + 'group' => 'audio-video', + 'module' => 'mpeg', + 'mime_type' => 'video/mpeg', + ), + + // NSV - audio/video - Nullsoft Streaming Video (NSV) + 'nsv' => array( + 'pattern' => '^NSV[sf]', + 'group' => 'audio-video', + 'module' => 'nsv', + 'mime_type' => 'application/octet-stream', + ), + + // Ogg - audio/video - Ogg (Ogg-Vorbis, Ogg-FLAC, Speex, Ogg-Theora(*), Ogg-Tarkin(*)) + 'ogg' => array( + 'pattern' => '^OggS', + 'group' => 'audio', + 'module' => 'ogg', + 'mime_type' => 'application/ogg', + 'fail_id3' => 'WARNING', + 'fail_ape' => 'WARNING', + ), + + // QT - audio/video - Quicktime + 'quicktime' => array( + 'pattern' => '^.{4}(cmov|free|ftyp|mdat|moov|pnot|skip|wide)', + 'group' => 'audio-video', + 'module' => 'quicktime', + 'mime_type' => 'video/quicktime', + ), + + // RIFF - audio/video - Resource Interchange File Format (RIFF) / WAV / AVI / CD-audio / SDSS = renamed variant used by SmartSound QuickTracks (www.smartsound.com) / FORM = Audio Interchange File Format (AIFF) + 'riff' => array( + 'pattern' => '^(RIFF|SDSS|FORM)', + 'group' => 'audio-video', + 'module' => 'riff', + 'mime_type' => 'audio/x-wave', + 'fail_ape' => 'WARNING', + ), + + // Real - audio/video - RealAudio, RealVideo + 'real' => array( + 'pattern' => '^(\\.RMF|\\.ra)', + 'group' => 'audio-video', + 'module' => 'real', + 'mime_type' => 'audio/x-realaudio', + ), + + // SWF - audio/video - ShockWave Flash + 'swf' => array( + 'pattern' => '^(F|C)WS', + 'group' => 'audio-video', + 'module' => 'swf', + 'mime_type' => 'application/x-shockwave-flash', + ), + + // TS - audio/video - MPEG-2 Transport Stream + 'ts' => array( + 'pattern' => '^(\x47.{187}){10,}', // packets are 188 bytes long and start with 0x47 "G". Check for at least 10 packets matching this pattern + 'group' => 'audio-video', + 'module' => 'ts', + 'mime_type' => 'video/MP2T', + ), + + + // Still-Image formats + + // BMP - still image - Bitmap (Windows, OS/2; uncompressed, RLE8, RLE4) + 'bmp' => array( + 'pattern' => '^BM', + 'group' => 'graphic', + 'module' => 'bmp', + 'mime_type' => 'image/bmp', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + // GIF - still image - Graphics Interchange Format + 'gif' => array( + 'pattern' => '^GIF', + 'group' => 'graphic', + 'module' => 'gif', + 'mime_type' => 'image/gif', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + // JPEG - still image - Joint Photographic Experts Group (JPEG) + 'jpg' => array( + 'pattern' => '^\xFF\xD8\xFF', + 'group' => 'graphic', + 'module' => 'jpg', + 'mime_type' => 'image/jpeg', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + // PCD - still image - Kodak Photo CD + 'pcd' => array( + 'pattern' => '^.{2048}PCD_IPI\x00', + 'group' => 'graphic', + 'module' => 'pcd', + 'mime_type' => 'image/x-photo-cd', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + + // PNG - still image - Portable Network Graphics (PNG) + 'png' => array( + 'pattern' => '^\x89\x50\x4E\x47\x0D\x0A\x1A\x0A', + 'group' => 'graphic', + 'module' => 'png', + 'mime_type' => 'image/png', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + + // SVG - still image - Scalable Vector Graphics (SVG) + 'svg' => array( + 'pattern' => '( 'graphic', + 'module' => 'svg', + 'mime_type' => 'image/svg+xml', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + + // TIFF - still image - Tagged Information File Format (TIFF) + 'tiff' => array( + 'pattern' => '^(II\x2A\x00|MM\x00\x2A)', + 'group' => 'graphic', + 'module' => 'tiff', + 'mime_type' => 'image/tiff', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + + // EFAX - still image - eFax (TIFF derivative) + 'efax' => array( + 'pattern' => '^\xDC\xFE', + 'group' => 'graphic', + 'module' => 'efax', + 'mime_type' => 'image/efax', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + + // Data formats + + // ISO - data - International Standards Organization (ISO) CD-ROM Image + 'iso' => array( + 'pattern' => '^.{32769}CD001', + 'group' => 'misc', + 'module' => 'iso', + 'mime_type' => 'application/octet-stream', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + 'iconv_req' => false, + ), + + // RAR - data - RAR compressed data + 'rar' => array( + 'pattern' => '^Rar\!', + 'group' => 'archive', + 'module' => 'rar', + 'mime_type' => 'application/octet-stream', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + // SZIP - audio/data - SZIP compressed data + 'szip' => array( + 'pattern' => '^SZ\x0A\x04', + 'group' => 'archive', + 'module' => 'szip', + 'mime_type' => 'application/octet-stream', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + // TAR - data - TAR compressed data + 'tar' => array( + 'pattern' => '^.{100}[0-9\x20]{7}\x00[0-9\x20]{7}\x00[0-9\x20]{7}\x00[0-9\x20\x00]{12}[0-9\x20\x00]{12}', + 'group' => 'archive', + 'module' => 'tar', + 'mime_type' => 'application/x-tar', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + // GZIP - data - GZIP compressed data + 'gz' => array( + 'pattern' => '^\x1F\x8B\x08', + 'group' => 'archive', + 'module' => 'gzip', + 'mime_type' => 'application/x-gzip', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + // ZIP - data - ZIP compressed data + 'zip' => array( + 'pattern' => '^PK\x03\x04', + 'group' => 'archive', + 'module' => 'zip', + 'mime_type' => 'application/zip', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + + // Misc other formats + + // PAR2 - data - Parity Volume Set Specification 2.0 + 'par2' => array ( + 'pattern' => '^PAR2\x00PKT', + 'group' => 'misc', + 'module' => 'par2', + 'mime_type' => 'application/octet-stream', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + // PDF - data - Portable Document Format + 'pdf' => array( + 'pattern' => '^\x25PDF', + 'group' => 'misc', + 'module' => 'pdf', + 'mime_type' => 'application/pdf', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + // MSOFFICE - data - ZIP compressed data + 'msoffice' => array( + 'pattern' => '^\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1', // D0CF11E == DOCFILE == Microsoft Office Document + 'group' => 'misc', + 'module' => 'msoffice', + 'mime_type' => 'application/octet-stream', + 'fail_id3' => 'ERROR', + 'fail_ape' => 'ERROR', + ), + + // CUE - data - CUEsheet (index to single-file disc images) + 'cue' => array( + 'pattern' => '', // empty pattern means cannot be automatically detected, will fall through all other formats and match based on filename and very basic file contents + 'group' => 'misc', + 'module' => 'cue', + 'mime_type' => 'application/octet-stream', + ), + + ); + } + + return $format_info; + } + + + + public function GetFileFormat(&$filedata, $filename='') { + // this function will determine the format of a file based on usually + // the first 2-4 bytes of the file (8 bytes for PNG, 16 bytes for JPG, + // and in the case of ISO CD image, 6 bytes offset 32kb from the start + // of the file). + + // Identify file format - loop through $format_info and detect with reg expr + foreach ($this->GetFileFormatArray() as $format_name => $info) { + // The /s switch on preg_match() forces preg_match() NOT to treat + // newline (0x0A) characters as special chars but do a binary match + if (!empty($info['pattern']) && preg_match('#'.$info['pattern'].'#s', $filedata)) { + $info['include'] = 'module.'.$info['group'].'.'.$info['module'].'.php'; + return $info; + } + } + + + if (preg_match('#\.mp[123a]$#i', $filename)) { + // Too many mp3 encoders on the market put gabage in front of mpeg files + // use assume format on these if format detection failed + $GetFileFormatArray = $this->GetFileFormatArray(); + $info = $GetFileFormatArray['mp3']; + $info['include'] = 'module.'.$info['group'].'.'.$info['module'].'.php'; + return $info; + } elseif (preg_match('/\.cue$/i', $filename) && preg_match('#FILE "[^"]+" (BINARY|MOTOROLA|AIFF|WAVE|MP3)#', $filedata)) { + // there's not really a useful consistent "magic" at the beginning of .cue files to identify them + // so until I think of something better, just go by filename if all other format checks fail + // and verify there's at least one instance of "TRACK xx AUDIO" in the file + $GetFileFormatArray = $this->GetFileFormatArray(); + $info = $GetFileFormatArray['cue']; + $info['include'] = 'module.'.$info['group'].'.'.$info['module'].'.php'; + return $info; + } + + return false; + } + + + // converts array to $encoding charset from $this->encoding + public function CharConvert(&$array, $encoding) { + + // identical encoding - end here + if ($encoding == $this->encoding) { + return; + } + + // loop thru array + foreach ($array as $key => $value) { + + // go recursive + if (is_array($value)) { + $this->CharConvert($array[$key], $encoding); + } + + // convert string + elseif (is_string($value)) { + $array[$key] = trim(getid3_lib::iconv_fallback($encoding, $this->encoding, $value)); + } + } + } + + + public function HandleAllTags() { + + // key name => array (tag name, character encoding) + static $tags; + if (empty($tags)) { + $tags = array( + 'asf' => array('asf' , 'UTF-16LE'), + 'midi' => array('midi' , 'ISO-8859-1'), + 'nsv' => array('nsv' , 'ISO-8859-1'), + 'ogg' => array('vorbiscomment' , 'UTF-8'), + 'png' => array('png' , 'UTF-8'), + 'tiff' => array('tiff' , 'ISO-8859-1'), + 'quicktime' => array('quicktime' , 'UTF-8'), + 'real' => array('real' , 'ISO-8859-1'), + 'vqf' => array('vqf' , 'ISO-8859-1'), + 'zip' => array('zip' , 'ISO-8859-1'), + 'riff' => array('riff' , 'ISO-8859-1'), + 'lyrics3' => array('lyrics3' , 'ISO-8859-1'), + 'id3v1' => array('id3v1' , $this->encoding_id3v1), + 'id3v2' => array('id3v2' , 'UTF-8'), // not according to the specs (every frame can have a different encoding), but getID3() force-converts all encodings to UTF-8 + 'ape' => array('ape' , 'UTF-8'), + 'cue' => array('cue' , 'ISO-8859-1'), + 'matroska' => array('matroska' , 'UTF-8'), + 'flac' => array('vorbiscomment' , 'UTF-8'), + 'divxtag' => array('divx' , 'ISO-8859-1'), + ); + } + + // loop through comments array + foreach ($tags as $comment_name => $tagname_encoding_array) { + list($tag_name, $encoding) = $tagname_encoding_array; + + // fill in default encoding type if not already present + if (isset($this->info[$comment_name]) && !isset($this->info[$comment_name]['encoding'])) { + $this->info[$comment_name]['encoding'] = $encoding; + } + + // copy comments if key name set + if (!empty($this->info[$comment_name]['comments'])) { + foreach ($this->info[$comment_name]['comments'] as $tag_key => $valuearray) { + foreach ($valuearray as $key => $value) { + if (is_string($value)) { + $value = trim($value, " \r\n\t"); // do not trim nulls from $value!! Unicode characters will get mangled if trailing nulls are removed! + } + if ($value) { + $this->info['tags'][trim($tag_name)][trim($tag_key)][] = $value; + } + } + if ($tag_key == 'picture') { + unset($this->info[$comment_name]['comments'][$tag_key]); + } + } + + if (!isset($this->info['tags'][$tag_name])) { + // comments are set but contain nothing but empty strings, so skip + continue; + } + + if ($this->option_tags_html) { + foreach ($this->info['tags'][$tag_name] as $tag_key => $valuearray) { + foreach ($valuearray as $key => $value) { + if (is_string($value)) { + //$this->info['tags_html'][$tag_name][$tag_key][$key] = getid3_lib::MultiByteCharString2HTML($value, $encoding); + $this->info['tags_html'][$tag_name][$tag_key][$key] = str_replace('�', '', trim(getid3_lib::MultiByteCharString2HTML($value, $encoding))); + } else { + $this->info['tags_html'][$tag_name][$tag_key][$key] = $value; + } + } + } + } + + $this->CharConvert($this->info['tags'][$tag_name], $encoding); // only copy gets converted! + } + + } + + // pictures can take up a lot of space, and we don't need multiple copies of them + // let there be a single copy in [comments][picture], and not elsewhere + if (!empty($this->info['tags'])) { + $unset_keys = array('tags', 'tags_html'); + foreach ($this->info['tags'] as $tagtype => $tagarray) { + foreach ($tagarray as $tagname => $tagdata) { + if ($tagname == 'picture') { + foreach ($tagdata as $key => $tagarray) { + $this->info['comments']['picture'][] = $tagarray; + if (isset($tagarray['data']) && isset($tagarray['image_mime'])) { + if (isset($this->info['tags'][$tagtype][$tagname][$key])) { + unset($this->info['tags'][$tagtype][$tagname][$key]); + } + if (isset($this->info['tags_html'][$tagtype][$tagname][$key])) { + unset($this->info['tags_html'][$tagtype][$tagname][$key]); + } + } + } + } + } + foreach ($unset_keys as $unset_key) { + // remove possible empty keys from (e.g. [tags][id3v2][picture]) + if (empty($this->info[$unset_key][$tagtype]['picture'])) { + unset($this->info[$unset_key][$tagtype]['picture']); + } + if (empty($this->info[$unset_key][$tagtype])) { + unset($this->info[$unset_key][$tagtype]); + } + if (empty($this->info[$unset_key])) { + unset($this->info[$unset_key]); + } + } + // remove duplicate copy of picture data from (e.g. [id3v2][comments][picture]) + if (isset($this->info[$tagtype]['comments']['picture'])) { + unset($this->info[$tagtype]['comments']['picture']); + } + if (empty($this->info[$tagtype]['comments'])) { + unset($this->info[$tagtype]['comments']); + } + if (empty($this->info[$tagtype])) { + unset($this->info[$tagtype]); + } + } + } + return true; + } + + + public function getHashdata($algorithm) { + switch ($algorithm) { + case 'md5': + case 'sha1': + break; + + default: + return $this->error('bad algorithm "'.$algorithm.'" in getHashdata()'); + break; + } + + if (!empty($this->info['fileformat']) && !empty($this->info['dataformat']) && ($this->info['fileformat'] == 'ogg') && ($this->info['audio']['dataformat'] == 'vorbis')) { + + // We cannot get an identical md5_data value for Ogg files where the comments + // span more than 1 Ogg page (compared to the same audio data with smaller + // comments) using the normal getID3() method of MD5'ing the data between the + // end of the comments and the end of the file (minus any trailing tags), + // because the page sequence numbers of the pages that the audio data is on + // do not match. Under normal circumstances, where comments are smaller than + // the nominal 4-8kB page size, then this is not a problem, but if there are + // very large comments, the only way around it is to strip off the comment + // tags with vorbiscomment and MD5 that file. + // This procedure must be applied to ALL Ogg files, not just the ones with + // comments larger than 1 page, because the below method simply MD5's the + // whole file with the comments stripped, not just the portion after the + // comments block (which is the standard getID3() method. + + // The above-mentioned problem of comments spanning multiple pages and changing + // page sequence numbers likely happens for OggSpeex and OggFLAC as well, but + // currently vorbiscomment only works on OggVorbis files. + + if (preg_match('#(1|ON)#i', ini_get('safe_mode'))) { + + $this->warning('Failed making system call to vorbiscomment.exe - '.$algorithm.'_data is incorrect - error returned: PHP running in Safe Mode (backtick operator not available)'); + $this->info[$algorithm.'_data'] = false; + + } else { + + // Prevent user from aborting script + $old_abort = ignore_user_abort(true); + + // Create empty file + $empty = tempnam(GETID3_TEMP_DIR, 'getID3'); + touch($empty); + + // Use vorbiscomment to make temp file without comments + $temp = tempnam(GETID3_TEMP_DIR, 'getID3'); + $file = $this->info['filenamepath']; + + if (GETID3_OS_ISWINDOWS) { + + if (file_exists(GETID3_HELPERAPPSDIR.'vorbiscomment.exe')) { + + $commandline = '"'.GETID3_HELPERAPPSDIR.'vorbiscomment.exe" -w -c "'.$empty.'" "'.$file.'" "'.$temp.'"'; + $VorbisCommentError = `$commandline`; + + } else { + + $VorbisCommentError = 'vorbiscomment.exe not found in '.GETID3_HELPERAPPSDIR; + + } + + } else { + + $commandline = 'vorbiscomment -w -c "'.$empty.'" "'.$file.'" "'.$temp.'" 2>&1'; + $commandline = 'vorbiscomment -w -c '.escapeshellarg($empty).' '.escapeshellarg($file).' '.escapeshellarg($temp).' 2>&1'; + $VorbisCommentError = `$commandline`; + + } + + if (!empty($VorbisCommentError)) { + + $this->info['warning'][] = 'Failed making system call to vorbiscomment(.exe) - '.$algorithm.'_data will be incorrect. If vorbiscomment is unavailable, please download from http://www.vorbis.com/download.psp and put in the getID3() directory. Error returned: '.$VorbisCommentError; + $this->info[$algorithm.'_data'] = false; + + } else { + + // Get hash of newly created file + switch ($algorithm) { + case 'md5': + $this->info[$algorithm.'_data'] = md5_file($temp); + break; + + case 'sha1': + $this->info[$algorithm.'_data'] = sha1_file($temp); + break; + } + } + + // Clean up + unlink($empty); + unlink($temp); + + // Reset abort setting + ignore_user_abort($old_abort); + + } + + } else { + + if (!empty($this->info['avdataoffset']) || (isset($this->info['avdataend']) && ($this->info['avdataend'] < $this->info['filesize']))) { + + // get hash from part of file + $this->info[$algorithm.'_data'] = getid3_lib::hash_data($this->info['filenamepath'], $this->info['avdataoffset'], $this->info['avdataend'], $algorithm); + + } else { + + // get hash from whole file + switch ($algorithm) { + case 'md5': + $this->info[$algorithm.'_data'] = md5_file($this->info['filenamepath']); + break; + + case 'sha1': + $this->info[$algorithm.'_data'] = sha1_file($this->info['filenamepath']); + break; + } + } + + } + return true; + } + + + public function ChannelsBitratePlaytimeCalculations() { + + // set channelmode on audio + if (!empty($this->info['audio']['channelmode']) || !isset($this->info['audio']['channels'])) { + // ignore + } elseif ($this->info['audio']['channels'] == 1) { + $this->info['audio']['channelmode'] = 'mono'; + } elseif ($this->info['audio']['channels'] == 2) { + $this->info['audio']['channelmode'] = 'stereo'; + } + + // Calculate combined bitrate - audio + video + $CombinedBitrate = 0; + $CombinedBitrate += (isset($this->info['audio']['bitrate']) ? $this->info['audio']['bitrate'] : 0); + $CombinedBitrate += (isset($this->info['video']['bitrate']) ? $this->info['video']['bitrate'] : 0); + if (($CombinedBitrate > 0) && empty($this->info['bitrate'])) { + $this->info['bitrate'] = $CombinedBitrate; + } + //if ((isset($this->info['video']) && !isset($this->info['video']['bitrate'])) || (isset($this->info['audio']) && !isset($this->info['audio']['bitrate']))) { + // // for example, VBR MPEG video files cannot determine video bitrate: + // // should not set overall bitrate and playtime from audio bitrate only + // unset($this->info['bitrate']); + //} + + // video bitrate undetermined, but calculable + if (isset($this->info['video']['dataformat']) && $this->info['video']['dataformat'] && (!isset($this->info['video']['bitrate']) || ($this->info['video']['bitrate'] == 0))) { + // if video bitrate not set + if (isset($this->info['audio']['bitrate']) && ($this->info['audio']['bitrate'] > 0) && ($this->info['audio']['bitrate'] == $this->info['bitrate'])) { + // AND if audio bitrate is set to same as overall bitrate + if (isset($this->info['playtime_seconds']) && ($this->info['playtime_seconds'] > 0)) { + // AND if playtime is set + if (isset($this->info['avdataend']) && isset($this->info['avdataoffset'])) { + // AND if AV data offset start/end is known + // THEN we can calculate the video bitrate + $this->info['bitrate'] = round((($this->info['avdataend'] - $this->info['avdataoffset']) * 8) / $this->info['playtime_seconds']); + $this->info['video']['bitrate'] = $this->info['bitrate'] - $this->info['audio']['bitrate']; + } + } + } + } + + if ((!isset($this->info['playtime_seconds']) || ($this->info['playtime_seconds'] <= 0)) && !empty($this->info['bitrate'])) { + $this->info['playtime_seconds'] = (($this->info['avdataend'] - $this->info['avdataoffset']) * 8) / $this->info['bitrate']; + } + + if (!isset($this->info['bitrate']) && !empty($this->info['playtime_seconds'])) { + $this->info['bitrate'] = (($this->info['avdataend'] - $this->info['avdataoffset']) * 8) / $this->info['playtime_seconds']; + } + if (isset($this->info['bitrate']) && empty($this->info['audio']['bitrate']) && empty($this->info['video']['bitrate'])) { + if (isset($this->info['audio']['dataformat']) && empty($this->info['video']['resolution_x'])) { + // audio only + $this->info['audio']['bitrate'] = $this->info['bitrate']; + } elseif (isset($this->info['video']['resolution_x']) && empty($this->info['audio']['dataformat'])) { + // video only + $this->info['video']['bitrate'] = $this->info['bitrate']; + } + } + + // Set playtime string + if (!empty($this->info['playtime_seconds']) && empty($this->info['playtime_string'])) { + $this->info['playtime_string'] = getid3_lib::PlaytimeString($this->info['playtime_seconds']); + } + } + + + public function CalculateCompressionRatioVideo() { + if (empty($this->info['video'])) { + return false; + } + if (empty($this->info['video']['resolution_x']) || empty($this->info['video']['resolution_y'])) { + return false; + } + if (empty($this->info['video']['bits_per_sample'])) { + return false; + } + + switch ($this->info['video']['dataformat']) { + case 'bmp': + case 'gif': + case 'jpeg': + case 'jpg': + case 'png': + case 'tiff': + $FrameRate = 1; + $PlaytimeSeconds = 1; + $BitrateCompressed = $this->info['filesize'] * 8; + break; + + default: + if (!empty($this->info['video']['frame_rate'])) { + $FrameRate = $this->info['video']['frame_rate']; + } else { + return false; + } + if (!empty($this->info['playtime_seconds'])) { + $PlaytimeSeconds = $this->info['playtime_seconds']; + } else { + return false; + } + if (!empty($this->info['video']['bitrate'])) { + $BitrateCompressed = $this->info['video']['bitrate']; + } else { + return false; + } + break; + } + $BitrateUncompressed = $this->info['video']['resolution_x'] * $this->info['video']['resolution_y'] * $this->info['video']['bits_per_sample'] * $FrameRate; + + $this->info['video']['compression_ratio'] = $BitrateCompressed / $BitrateUncompressed; + return true; + } + + + public function CalculateCompressionRatioAudio() { + if (empty($this->info['audio']['bitrate']) || empty($this->info['audio']['channels']) || empty($this->info['audio']['sample_rate']) || !is_numeric($this->info['audio']['sample_rate'])) { + return false; + } + $this->info['audio']['compression_ratio'] = $this->info['audio']['bitrate'] / ($this->info['audio']['channels'] * $this->info['audio']['sample_rate'] * (!empty($this->info['audio']['bits_per_sample']) ? $this->info['audio']['bits_per_sample'] : 16)); + + if (!empty($this->info['audio']['streams'])) { + foreach ($this->info['audio']['streams'] as $streamnumber => $streamdata) { + if (!empty($streamdata['bitrate']) && !empty($streamdata['channels']) && !empty($streamdata['sample_rate'])) { + $this->info['audio']['streams'][$streamnumber]['compression_ratio'] = $streamdata['bitrate'] / ($streamdata['channels'] * $streamdata['sample_rate'] * (!empty($streamdata['bits_per_sample']) ? $streamdata['bits_per_sample'] : 16)); + } + } + } + return true; + } + + + public function CalculateReplayGain() { + if (isset($this->info['replay_gain'])) { + if (!isset($this->info['replay_gain']['reference_volume'])) { + $this->info['replay_gain']['reference_volume'] = (double) 89.0; + } + if (isset($this->info['replay_gain']['track']['adjustment'])) { + $this->info['replay_gain']['track']['volume'] = $this->info['replay_gain']['reference_volume'] - $this->info['replay_gain']['track']['adjustment']; + } + if (isset($this->info['replay_gain']['album']['adjustment'])) { + $this->info['replay_gain']['album']['volume'] = $this->info['replay_gain']['reference_volume'] - $this->info['replay_gain']['album']['adjustment']; + } + + if (isset($this->info['replay_gain']['track']['peak'])) { + $this->info['replay_gain']['track']['max_noclip_gain'] = 0 - getid3_lib::RGADamplitude2dB($this->info['replay_gain']['track']['peak']); + } + if (isset($this->info['replay_gain']['album']['peak'])) { + $this->info['replay_gain']['album']['max_noclip_gain'] = 0 - getid3_lib::RGADamplitude2dB($this->info['replay_gain']['album']['peak']); + } + } + return true; + } + + public function ProcessAudioStreams() { + if (!empty($this->info['audio']['bitrate']) || !empty($this->info['audio']['channels']) || !empty($this->info['audio']['sample_rate'])) { + if (!isset($this->info['audio']['streams'])) { + foreach ($this->info['audio'] as $key => $value) { + if ($key != 'streams') { + $this->info['audio']['streams'][0][$key] = $value; + } + } + } + } + return true; + } + + public function getid3_tempnam() { + return tempnam($this->tempdir, 'gI3'); + } + + public function include_module($name) { + //if (!file_exists($this->include_path.'module.'.$name.'.php')) { + if (!file_exists(GETID3_INCLUDEPATH.'module.'.$name.'.php')) { + throw new getid3_exception('Required module.'.$name.'.php is missing.'); + } + include_once(GETID3_INCLUDEPATH.'module.'.$name.'.php'); + return true; + } + +} + + +abstract class getid3_handler +{ + protected $getid3; // pointer + + protected $data_string_flag = false; // analyzing filepointer or string + protected $data_string = ''; // string to analyze + protected $data_string_position = 0; // seek position in string + protected $data_string_length = 0; // string length + + private $dependency_to = null; + + + public function __construct(getID3 $getid3, $call_module=null) { + $this->getid3 = $getid3; + + if ($call_module) { + $this->dependency_to = str_replace('getid3_', '', $call_module); + } + } + + + // Analyze from file pointer + abstract public function Analyze(); + + + // Analyze from string instead + public function AnalyzeString($string) { + // Enter string mode + $this->setStringMode($string); + + // Save info + $saved_avdataoffset = $this->getid3->info['avdataoffset']; + $saved_avdataend = $this->getid3->info['avdataend']; + $saved_filesize = (isset($this->getid3->info['filesize']) ? $this->getid3->info['filesize'] : null); // may be not set if called as dependency without openfile() call + + // Reset some info + $this->getid3->info['avdataoffset'] = 0; + $this->getid3->info['avdataend'] = $this->getid3->info['filesize'] = $this->data_string_length; + + // Analyze + $this->Analyze(); + + // Restore some info + $this->getid3->info['avdataoffset'] = $saved_avdataoffset; + $this->getid3->info['avdataend'] = $saved_avdataend; + $this->getid3->info['filesize'] = $saved_filesize; + + // Exit string mode + $this->data_string_flag = false; + } + + public function setStringMode($string) { + $this->data_string_flag = true; + $this->data_string = $string; + $this->data_string_length = strlen($string); + } + + protected function ftell() { + if ($this->data_string_flag) { + return $this->data_string_position; + } + return ftell($this->getid3->fp); + } + + protected function fread($bytes) { + if ($this->data_string_flag) { + $this->data_string_position += $bytes; + return substr($this->data_string, $this->data_string_position - $bytes, $bytes); + } + $pos = $this->ftell() + $bytes; + if (!getid3_lib::intValueSupported($pos)) { + throw new getid3_exception('cannot fread('.$bytes.' from '.$this->ftell().') because beyond PHP filesystem limit', 10); + } + return fread($this->getid3->fp, $bytes); + } + + protected function fseek($bytes, $whence=SEEK_SET) { + if ($this->data_string_flag) { + switch ($whence) { + case SEEK_SET: + $this->data_string_position = $bytes; + break; + + case SEEK_CUR: + $this->data_string_position += $bytes; + break; + + case SEEK_END: + $this->data_string_position = $this->data_string_length + $bytes; + break; + } + return 0; + } else { + $pos = $bytes; + if ($whence == SEEK_CUR) { + $pos = $this->ftell() + $bytes; + } elseif ($whence == SEEK_END) { + $pos = $this->info['filesize'] + $bytes; + } + if (!getid3_lib::intValueSupported($pos)) { + throw new getid3_exception('cannot fseek('.$pos.') because beyond PHP filesystem limit', 10); + } + } + return fseek($this->getid3->fp, $bytes, $whence); + } + + protected function feof() { + if ($this->data_string_flag) { + return $this->data_string_position >= $this->data_string_length; + } + return feof($this->getid3->fp); + } + + final protected function isDependencyFor($module) { + return $this->dependency_to == $module; + } + + protected function error($text) + { + $this->getid3->info['error'][] = $text; + + return false; + } + + protected function warning($text) + { + return $this->getid3->warning($text); + } + + protected function notice($text) + { + // does nothing for now + } + + public function saveAttachment($name, $offset, $length, $image_mime=null) { + try { + + // do not extract at all + if ($this->getid3->option_save_attachments === getID3::ATTACHMENTS_NONE) { + + $attachment = null; // do not set any + + // extract to return array + } elseif ($this->getid3->option_save_attachments === getID3::ATTACHMENTS_INLINE) { + + $this->fseek($offset); + $attachment = $this->fread($length); // get whole data in one pass, till it is anyway stored in memory + if ($attachment === false || strlen($attachment) != $length) { + throw new Exception('failed to read attachment data'); + } + + // assume directory path is given + } else { + + // set up destination path + $dir = rtrim(str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $this->getid3->option_save_attachments), DIRECTORY_SEPARATOR); + if (!is_dir($dir) || !is_writable($dir)) { // check supplied directory + throw new Exception('supplied path ('.$dir.') does not exist, or is not writable'); + } + $dest = $dir.DIRECTORY_SEPARATOR.$name.($image_mime ? '.'.getid3_lib::ImageExtFromMime($image_mime) : ''); + + // create dest file + if (($fp_dest = fopen($dest, 'wb')) == false) { + throw new Exception('failed to create file '.$dest); + } + + // copy data + $this->fseek($offset); + $buffersize = ($this->data_string_flag ? $length : $this->getid3->fread_buffer_size()); + $bytesleft = $length; + while ($bytesleft > 0) { + if (($buffer = $this->fread(min($buffersize, $bytesleft))) === false || ($byteswritten = fwrite($fp_dest, $buffer)) === false || ($byteswritten === 0)) { + throw new Exception($buffer === false ? 'not enough data to read' : 'failed to write to destination file, may be not enough disk space'); + } + $bytesleft -= $byteswritten; + } + + fclose($fp_dest); + $attachment = $dest; + + } + + } catch (Exception $e) { + + // close and remove dest file if created + if (isset($fp_dest) && is_resource($fp_dest)) { + fclose($fp_dest); + unlink($dest); + } + + // do not set any is case of error + $attachment = null; + $this->warning('Failed to extract attachment '.$name.': '.$e->getMessage()); + + } + + // seek to the end of attachment + $this->fseek($offset + $length); + + return $attachment; + } + +} + + +class getid3_exception extends Exception +{ + public $message; +} \ No newline at end of file diff --git a/src/wp-includes/ID3/license.commercial.txt b/src/wp-includes/ID3/license.commercial.txt new file mode 100644 index 0000000..416e5a1 --- /dev/null +++ b/src/wp-includes/ID3/license.commercial.txt @@ -0,0 +1,27 @@ + getID3() Commercial License + =========================== + +getID3() is licensed under the "GNU Public License" (GPL) and/or the +"getID3() Commercial License" (gCL). This document describes the gCL. + +--------------------------------------------------------------------- + +The license is non-exclusively granted to a single person or company, +per payment of the license fee, for the lifetime of that person or +company. The license is non-transferrable. + +The gCL grants the licensee the right to use getID3() in commercial +closed-source projects. Modifications may be made to getID3() with no +obligation to release the modified source code. getID3() (or pieces +thereof) may be included in any number of projects authored (in whole +or in part) by the licensee. + +The licensee may use any version of getID3(), past, present or future, +as is most convenient. This license does not entitle the licensee to +receive any technical support, updates or bugfixes, except as such are +made publicly available to all getID3() users. + +The licensee may not sub-license getID3() itself, meaning that any +commercially released product containing all or parts of getID3() must +have added functionality beyond what is available in getID3(); +getID3() itself may not be re-licensed by the licensee. diff --git a/src/wp-includes/ID3/license.txt b/src/wp-includes/ID3/license.txt new file mode 100644 index 0000000..85f4356 --- /dev/null +++ b/src/wp-includes/ID3/license.txt @@ -0,0 +1,28 @@ +///////////////////////////////////////////////////////////////// +/// getID3() by James Heinrich // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// + +***************************************************************** +***************************************************************** + + getID3() is released under multiple licenses. You may choose + from the following licenses, and use getID3 according to the + terms of the license most suitable to your project. + +GNU GPL: https://gnu.org/licenses/gpl.html (v3) + https://gnu.org/licenses/old-licenses/gpl-2.0.html (v2) + https://gnu.org/licenses/old-licenses/gpl-1.0.html (v1) + +GNU LGPL: https://gnu.org/licenses/lgpl.html (v3) + +Mozilla MPL: http://www.mozilla.org/MPL/2.0/ (v2) + +getID3 Commercial License: http://getid3.org/#gCL (payment required) + +***************************************************************** +***************************************************************** + +Copies of each of the above licenses are included in the 'licenses' +directory of the getID3 distribution. diff --git a/src/wp-includes/ID3/module.audio-video.asf.php b/src/wp-includes/ID3/module.audio-video.asf.php new file mode 100644 index 0000000..cfc60a7 --- /dev/null +++ b/src/wp-includes/ID3/module.audio-video.asf.php @@ -0,0 +1,2019 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +// // +// module.audio-video.asf.php // +// module for analyzing ASF, WMA and WMV files // +// dependencies: module.audio-video.riff.php // +// /// +///////////////////////////////////////////////////////////////// + +getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.riff.php', __FILE__, true); + +class getid3_asf extends getid3_handler +{ + + public function __construct(getID3 $getid3) { + parent::__construct($getid3); // extends getid3_handler::__construct() + + // initialize all GUID constants + $GUIDarray = $this->KnownGUIDs(); + foreach ($GUIDarray as $GUIDname => $hexstringvalue) { + if (!defined($GUIDname)) { + define($GUIDname, $this->GUIDtoBytestring($hexstringvalue)); + } + } + } + + public function Analyze() { + $info = &$this->getid3->info; + + // Shortcuts + $thisfile_audio = &$info['audio']; + $thisfile_video = &$info['video']; + $info['asf'] = array(); + $thisfile_asf = &$info['asf']; + $thisfile_asf['comments'] = array(); + $thisfile_asf_comments = &$thisfile_asf['comments']; + $thisfile_asf['header_object'] = array(); + $thisfile_asf_headerobject = &$thisfile_asf['header_object']; + + + // ASF structure: + // * Header Object [required] + // * File Properties Object [required] (global file attributes) + // * Stream Properties Object [required] (defines media stream & characteristics) + // * Header Extension Object [required] (additional functionality) + // * Content Description Object (bibliographic information) + // * Script Command Object (commands for during playback) + // * Marker Object (named jumped points within the file) + // * Data Object [required] + // * Data Packets + // * Index Object + + // Header Object: (mandatory, one only) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for header object - GETID3_ASF_Header_Object + // Object Size QWORD 64 // size of header object, including 30 bytes of Header Object header + // Number of Header Objects DWORD 32 // number of objects in header object + // Reserved1 BYTE 8 // hardcoded: 0x01 + // Reserved2 BYTE 8 // hardcoded: 0x02 + + $info['fileformat'] = 'asf'; + + fseek($this->getid3->fp, $info['avdataoffset'], SEEK_SET); + $HeaderObjectData = fread($this->getid3->fp, 30); + + $thisfile_asf_headerobject['objectid'] = substr($HeaderObjectData, 0, 16); + $thisfile_asf_headerobject['objectid_guid'] = $this->BytestringToGUID($thisfile_asf_headerobject['objectid']); + if ($thisfile_asf_headerobject['objectid'] != GETID3_ASF_Header_Object) { + $info['warning'][] = 'ASF header GUID {'.$this->BytestringToGUID($thisfile_asf_headerobject['objectid']).'} does not match expected "GETID3_ASF_Header_Object" GUID {'.$this->BytestringToGUID(GETID3_ASF_Header_Object).'}'; + unset($info['fileformat']); + unset($info['asf']); + return false; + break; + } + $thisfile_asf_headerobject['objectsize'] = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 16, 8)); + $thisfile_asf_headerobject['headerobjects'] = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 24, 4)); + $thisfile_asf_headerobject['reserved1'] = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 28, 1)); + $thisfile_asf_headerobject['reserved2'] = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 29, 1)); + + $NextObjectOffset = ftell($this->getid3->fp); + $ASFHeaderData = fread($this->getid3->fp, $thisfile_asf_headerobject['objectsize'] - 30); + $offset = 0; + + for ($HeaderObjectsCounter = 0; $HeaderObjectsCounter < $thisfile_asf_headerobject['headerobjects']; $HeaderObjectsCounter++) { + $NextObjectGUID = substr($ASFHeaderData, $offset, 16); + $offset += 16; + $NextObjectGUIDtext = $this->BytestringToGUID($NextObjectGUID); + $NextObjectSize = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8)); + $offset += 8; + switch ($NextObjectGUID) { + + case GETID3_ASF_File_Properties_Object: + // File Properties Object: (mandatory, one only) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for file properties object - GETID3_ASF_File_Properties_Object + // Object Size QWORD 64 // size of file properties object, including 104 bytes of File Properties Object header + // File ID GUID 128 // unique ID - identical to File ID in Data Object + // File Size QWORD 64 // entire file in bytes. Invalid if Broadcast Flag == 1 + // Creation Date QWORD 64 // date & time of file creation. Maybe invalid if Broadcast Flag == 1 + // Data Packets Count QWORD 64 // number of data packets in Data Object. Invalid if Broadcast Flag == 1 + // Play Duration QWORD 64 // playtime, in 100-nanosecond units. Invalid if Broadcast Flag == 1 + // Send Duration QWORD 64 // time needed to send file, in 100-nanosecond units. Players can ignore this value. Invalid if Broadcast Flag == 1 + // Preroll QWORD 64 // time to buffer data before starting to play file, in 1-millisecond units. If <> 0, PlayDuration and PresentationTime have been offset by this amount + // Flags DWORD 32 // + // * Broadcast Flag bits 1 (0x01) // file is currently being written, some header values are invalid + // * Seekable Flag bits 1 (0x02) // is file seekable + // * Reserved bits 30 (0xFFFFFFFC) // reserved - set to zero + // Minimum Data Packet Size DWORD 32 // in bytes. should be same as Maximum Data Packet Size. Invalid if Broadcast Flag == 1 + // Maximum Data Packet Size DWORD 32 // in bytes. should be same as Minimum Data Packet Size. Invalid if Broadcast Flag == 1 + // Maximum Bitrate DWORD 32 // maximum instantaneous bitrate in bits per second for entire file, including all data streams and ASF overhead + + // shortcut + $thisfile_asf['file_properties_object'] = array(); + $thisfile_asf_filepropertiesobject = &$thisfile_asf['file_properties_object']; + + $thisfile_asf_filepropertiesobject['offset'] = $NextObjectOffset + $offset; + $thisfile_asf_filepropertiesobject['objectid'] = $NextObjectGUID; + $thisfile_asf_filepropertiesobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_filepropertiesobject['objectsize'] = $NextObjectSize; + $thisfile_asf_filepropertiesobject['fileid'] = substr($ASFHeaderData, $offset, 16); + $offset += 16; + $thisfile_asf_filepropertiesobject['fileid_guid'] = $this->BytestringToGUID($thisfile_asf_filepropertiesobject['fileid']); + $thisfile_asf_filepropertiesobject['filesize'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8)); + $offset += 8; + $thisfile_asf_filepropertiesobject['creation_date'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8)); + $thisfile_asf_filepropertiesobject['creation_date_unix'] = $this->FILETIMEtoUNIXtime($thisfile_asf_filepropertiesobject['creation_date']); + $offset += 8; + $thisfile_asf_filepropertiesobject['data_packets'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8)); + $offset += 8; + $thisfile_asf_filepropertiesobject['play_duration'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8)); + $offset += 8; + $thisfile_asf_filepropertiesobject['send_duration'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8)); + $offset += 8; + $thisfile_asf_filepropertiesobject['preroll'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8)); + $offset += 8; + $thisfile_asf_filepropertiesobject['flags_raw'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + $thisfile_asf_filepropertiesobject['flags']['broadcast'] = (bool) ($thisfile_asf_filepropertiesobject['flags_raw'] & 0x0001); + $thisfile_asf_filepropertiesobject['flags']['seekable'] = (bool) ($thisfile_asf_filepropertiesobject['flags_raw'] & 0x0002); + + $thisfile_asf_filepropertiesobject['min_packet_size'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + $thisfile_asf_filepropertiesobject['max_packet_size'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + $thisfile_asf_filepropertiesobject['max_bitrate'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + + if ($thisfile_asf_filepropertiesobject['flags']['broadcast']) { + + // broadcast flag is set, some values invalid + unset($thisfile_asf_filepropertiesobject['filesize']); + unset($thisfile_asf_filepropertiesobject['data_packets']); + unset($thisfile_asf_filepropertiesobject['play_duration']); + unset($thisfile_asf_filepropertiesobject['send_duration']); + unset($thisfile_asf_filepropertiesobject['min_packet_size']); + unset($thisfile_asf_filepropertiesobject['max_packet_size']); + + } else { + + // broadcast flag NOT set, perform calculations + $info['playtime_seconds'] = ($thisfile_asf_filepropertiesobject['play_duration'] / 10000000) - ($thisfile_asf_filepropertiesobject['preroll'] / 1000); + + //$info['bitrate'] = $thisfile_asf_filepropertiesobject['max_bitrate']; + $info['bitrate'] = ((isset($thisfile_asf_filepropertiesobject['filesize']) ? $thisfile_asf_filepropertiesobject['filesize'] : $info['filesize']) * 8) / $info['playtime_seconds']; + } + break; + + case GETID3_ASF_Stream_Properties_Object: + // Stream Properties Object: (mandatory, one per media stream) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for stream properties object - GETID3_ASF_Stream_Properties_Object + // Object Size QWORD 64 // size of stream properties object, including 78 bytes of Stream Properties Object header + // Stream Type GUID 128 // GETID3_ASF_Audio_Media, GETID3_ASF_Video_Media or GETID3_ASF_Command_Media + // Error Correction Type GUID 128 // GETID3_ASF_Audio_Spread for audio-only streams, GETID3_ASF_No_Error_Correction for other stream types + // Time Offset QWORD 64 // 100-nanosecond units. typically zero. added to all timestamps of samples in the stream + // Type-Specific Data Length DWORD 32 // number of bytes for Type-Specific Data field + // Error Correction Data Length DWORD 32 // number of bytes for Error Correction Data field + // Flags WORD 16 // + // * Stream Number bits 7 (0x007F) // number of this stream. 1 <= valid <= 127 + // * Reserved bits 8 (0x7F80) // reserved - set to zero + // * Encrypted Content Flag bits 1 (0x8000) // stream contents encrypted if set + // Reserved DWORD 32 // reserved - set to zero + // Type-Specific Data BYTESTREAM variable // type-specific format data, depending on value of Stream Type + // Error Correction Data BYTESTREAM variable // error-correction-specific format data, depending on value of Error Correct Type + + // There is one GETID3_ASF_Stream_Properties_Object for each stream (audio, video) but the + // stream number isn't known until halfway through decoding the structure, hence it + // it is decoded to a temporary variable and then stuck in the appropriate index later + + $StreamPropertiesObjectData['offset'] = $NextObjectOffset + $offset; + $StreamPropertiesObjectData['objectid'] = $NextObjectGUID; + $StreamPropertiesObjectData['objectid_guid'] = $NextObjectGUIDtext; + $StreamPropertiesObjectData['objectsize'] = $NextObjectSize; + $StreamPropertiesObjectData['stream_type'] = substr($ASFHeaderData, $offset, 16); + $offset += 16; + $StreamPropertiesObjectData['stream_type_guid'] = $this->BytestringToGUID($StreamPropertiesObjectData['stream_type']); + $StreamPropertiesObjectData['error_correct_type'] = substr($ASFHeaderData, $offset, 16); + $offset += 16; + $StreamPropertiesObjectData['error_correct_guid'] = $this->BytestringToGUID($StreamPropertiesObjectData['error_correct_type']); + $StreamPropertiesObjectData['time_offset'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8)); + $offset += 8; + $StreamPropertiesObjectData['type_data_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + $StreamPropertiesObjectData['error_data_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + $StreamPropertiesObjectData['flags_raw'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $StreamPropertiesObjectStreamNumber = $StreamPropertiesObjectData['flags_raw'] & 0x007F; + $StreamPropertiesObjectData['flags']['encrypted'] = (bool) ($StreamPropertiesObjectData['flags_raw'] & 0x8000); + + $offset += 4; // reserved - DWORD + $StreamPropertiesObjectData['type_specific_data'] = substr($ASFHeaderData, $offset, $StreamPropertiesObjectData['type_data_length']); + $offset += $StreamPropertiesObjectData['type_data_length']; + $StreamPropertiesObjectData['error_correct_data'] = substr($ASFHeaderData, $offset, $StreamPropertiesObjectData['error_data_length']); + $offset += $StreamPropertiesObjectData['error_data_length']; + + switch ($StreamPropertiesObjectData['stream_type']) { + + case GETID3_ASF_Audio_Media: + $thisfile_audio['dataformat'] = (!empty($thisfile_audio['dataformat']) ? $thisfile_audio['dataformat'] : 'asf'); + $thisfile_audio['bitrate_mode'] = (!empty($thisfile_audio['bitrate_mode']) ? $thisfile_audio['bitrate_mode'] : 'cbr'); + + $audiodata = getid3_riff::parseWAVEFORMATex(substr($StreamPropertiesObjectData['type_specific_data'], 0, 16)); + unset($audiodata['raw']); + $thisfile_audio = getid3_lib::array_merge_noclobber($audiodata, $thisfile_audio); + break; + + case GETID3_ASF_Video_Media: + $thisfile_video['dataformat'] = (!empty($thisfile_video['dataformat']) ? $thisfile_video['dataformat'] : 'asf'); + $thisfile_video['bitrate_mode'] = (!empty($thisfile_video['bitrate_mode']) ? $thisfile_video['bitrate_mode'] : 'cbr'); + break; + + case GETID3_ASF_Command_Media: + default: + // do nothing + break; + + } + + $thisfile_asf['stream_properties_object'][$StreamPropertiesObjectStreamNumber] = $StreamPropertiesObjectData; + unset($StreamPropertiesObjectData); // clear for next stream, if any + break; + + case GETID3_ASF_Header_Extension_Object: + // Header Extension Object: (mandatory, one only) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for Header Extension object - GETID3_ASF_Header_Extension_Object + // Object Size QWORD 64 // size of Header Extension object, including 46 bytes of Header Extension Object header + // Reserved Field 1 GUID 128 // hardcoded: GETID3_ASF_Reserved_1 + // Reserved Field 2 WORD 16 // hardcoded: 0x00000006 + // Header Extension Data Size DWORD 32 // in bytes. valid: 0, or > 24. equals object size minus 46 + // Header Extension Data BYTESTREAM variable // array of zero or more extended header objects + + // shortcut + $thisfile_asf['header_extension_object'] = array(); + $thisfile_asf_headerextensionobject = &$thisfile_asf['header_extension_object']; + + $thisfile_asf_headerextensionobject['offset'] = $NextObjectOffset + $offset; + $thisfile_asf_headerextensionobject['objectid'] = $NextObjectGUID; + $thisfile_asf_headerextensionobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_headerextensionobject['objectsize'] = $NextObjectSize; + $thisfile_asf_headerextensionobject['reserved_1'] = substr($ASFHeaderData, $offset, 16); + $offset += 16; + $thisfile_asf_headerextensionobject['reserved_1_guid'] = $this->BytestringToGUID($thisfile_asf_headerextensionobject['reserved_1']); + if ($thisfile_asf_headerextensionobject['reserved_1'] != GETID3_ASF_Reserved_1) { + $info['warning'][] = 'header_extension_object.reserved_1 GUID ('.$this->BytestringToGUID($thisfile_asf_headerextensionobject['reserved_1']).') does not match expected "GETID3_ASF_Reserved_1" GUID ('.$this->BytestringToGUID(GETID3_ASF_Reserved_1).')'; + //return false; + break; + } + $thisfile_asf_headerextensionobject['reserved_2'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + if ($thisfile_asf_headerextensionobject['reserved_2'] != 6) { + $info['warning'][] = 'header_extension_object.reserved_2 ('.getid3_lib::PrintHexBytes($thisfile_asf_headerextensionobject['reserved_2']).') does not match expected value of "6"'; + //return false; + break; + } + $thisfile_asf_headerextensionobject['extension_data_size'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + $thisfile_asf_headerextensionobject['extension_data'] = substr($ASFHeaderData, $offset, $thisfile_asf_headerextensionobject['extension_data_size']); + $unhandled_sections = 0; + $thisfile_asf_headerextensionobject['extension_data_parsed'] = $this->ASF_HeaderExtensionObjectDataParse($thisfile_asf_headerextensionobject['extension_data'], $unhandled_sections); + if ($unhandled_sections === 0) { + unset($thisfile_asf_headerextensionobject['extension_data']); + } + $offset += $thisfile_asf_headerextensionobject['extension_data_size']; + break; + + case GETID3_ASF_Codec_List_Object: + // Codec List Object: (optional, one only) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for Codec List object - GETID3_ASF_Codec_List_Object + // Object Size QWORD 64 // size of Codec List object, including 44 bytes of Codec List Object header + // Reserved GUID 128 // hardcoded: 86D15241-311D-11D0-A3A4-00A0C90348F6 + // Codec Entries Count DWORD 32 // number of entries in Codec Entries array + // Codec Entries array of: variable // + // * Type WORD 16 // 0x0001 = Video Codec, 0x0002 = Audio Codec, 0xFFFF = Unknown Codec + // * Codec Name Length WORD 16 // number of Unicode characters stored in the Codec Name field + // * Codec Name WCHAR variable // array of Unicode characters - name of codec used to create the content + // * Codec Description Length WORD 16 // number of Unicode characters stored in the Codec Description field + // * Codec Description WCHAR variable // array of Unicode characters - description of format used to create the content + // * Codec Information Length WORD 16 // number of Unicode characters stored in the Codec Information field + // * Codec Information BYTESTREAM variable // opaque array of information bytes about the codec used to create the content + + // shortcut + $thisfile_asf['codec_list_object'] = array(); + $thisfile_asf_codeclistobject = &$thisfile_asf['codec_list_object']; + + $thisfile_asf_codeclistobject['offset'] = $NextObjectOffset + $offset; + $thisfile_asf_codeclistobject['objectid'] = $NextObjectGUID; + $thisfile_asf_codeclistobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_codeclistobject['objectsize'] = $NextObjectSize; + $thisfile_asf_codeclistobject['reserved'] = substr($ASFHeaderData, $offset, 16); + $offset += 16; + $thisfile_asf_codeclistobject['reserved_guid'] = $this->BytestringToGUID($thisfile_asf_codeclistobject['reserved']); + if ($thisfile_asf_codeclistobject['reserved'] != $this->GUIDtoBytestring('86D15241-311D-11D0-A3A4-00A0C90348F6')) { + $info['warning'][] = 'codec_list_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_codeclistobject['reserved']).'} does not match expected "GETID3_ASF_Reserved_1" GUID {86D15241-311D-11D0-A3A4-00A0C90348F6}'; + //return false; + break; + } + $thisfile_asf_codeclistobject['codec_entries_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + for ($CodecEntryCounter = 0; $CodecEntryCounter < $thisfile_asf_codeclistobject['codec_entries_count']; $CodecEntryCounter++) { + // shortcut + $thisfile_asf_codeclistobject['codec_entries'][$CodecEntryCounter] = array(); + $thisfile_asf_codeclistobject_codecentries_current = &$thisfile_asf_codeclistobject['codec_entries'][$CodecEntryCounter]; + + $thisfile_asf_codeclistobject_codecentries_current['type_raw'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_codeclistobject_codecentries_current['type'] = $this->ASFCodecListObjectTypeLookup($thisfile_asf_codeclistobject_codecentries_current['type_raw']); + + $CodecNameLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character + $offset += 2; + $thisfile_asf_codeclistobject_codecentries_current['name'] = substr($ASFHeaderData, $offset, $CodecNameLength); + $offset += $CodecNameLength; + + $CodecDescriptionLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character + $offset += 2; + $thisfile_asf_codeclistobject_codecentries_current['description'] = substr($ASFHeaderData, $offset, $CodecDescriptionLength); + $offset += $CodecDescriptionLength; + + $CodecInformationLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_codeclistobject_codecentries_current['information'] = substr($ASFHeaderData, $offset, $CodecInformationLength); + $offset += $CodecInformationLength; + + if ($thisfile_asf_codeclistobject_codecentries_current['type_raw'] == 2) { // audio codec + + if (strpos($thisfile_asf_codeclistobject_codecentries_current['description'], ',') === false) { + $info['warning'][] = '[asf][codec_list_object][codec_entries]['.$CodecEntryCounter.'][description] expected to contain comma-seperated list of parameters: "'.$thisfile_asf_codeclistobject_codecentries_current['description'].'"'; + } else { + + list($AudioCodecBitrate, $AudioCodecFrequency, $AudioCodecChannels) = explode(',', $this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['description'])); + $thisfile_audio['codec'] = $this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['name']); + + if (!isset($thisfile_audio['bitrate']) && strstr($AudioCodecBitrate, 'kbps')) { + $thisfile_audio['bitrate'] = (int) (trim(str_replace('kbps', '', $AudioCodecBitrate)) * 1000); + } + //if (!isset($thisfile_video['bitrate']) && isset($thisfile_audio['bitrate']) && isset($thisfile_asf['file_properties_object']['max_bitrate']) && ($thisfile_asf_codeclistobject['codec_entries_count'] > 1)) { + if (empty($thisfile_video['bitrate']) && !empty($thisfile_audio['bitrate']) && !empty($info['bitrate'])) { + //$thisfile_video['bitrate'] = $thisfile_asf['file_properties_object']['max_bitrate'] - $thisfile_audio['bitrate']; + $thisfile_video['bitrate'] = $info['bitrate'] - $thisfile_audio['bitrate']; + } + + $AudioCodecFrequency = (int) trim(str_replace('kHz', '', $AudioCodecFrequency)); + switch ($AudioCodecFrequency) { + case 8: + case 8000: + $thisfile_audio['sample_rate'] = 8000; + break; + + case 11: + case 11025: + $thisfile_audio['sample_rate'] = 11025; + break; + + case 12: + case 12000: + $thisfile_audio['sample_rate'] = 12000; + break; + + case 16: + case 16000: + $thisfile_audio['sample_rate'] = 16000; + break; + + case 22: + case 22050: + $thisfile_audio['sample_rate'] = 22050; + break; + + case 24: + case 24000: + $thisfile_audio['sample_rate'] = 24000; + break; + + case 32: + case 32000: + $thisfile_audio['sample_rate'] = 32000; + break; + + case 44: + case 441000: + $thisfile_audio['sample_rate'] = 44100; + break; + + case 48: + case 48000: + $thisfile_audio['sample_rate'] = 48000; + break; + + default: + $info['warning'][] = 'unknown frequency: "'.$AudioCodecFrequency.'" ('.$this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['description']).')'; + break; + } + + if (!isset($thisfile_audio['channels'])) { + if (strstr($AudioCodecChannels, 'stereo')) { + $thisfile_audio['channels'] = 2; + } elseif (strstr($AudioCodecChannels, 'mono')) { + $thisfile_audio['channels'] = 1; + } + } + + } + } + } + break; + + case GETID3_ASF_Script_Command_Object: + // Script Command Object: (optional, one only) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for Script Command object - GETID3_ASF_Script_Command_Object + // Object Size QWORD 64 // size of Script Command object, including 44 bytes of Script Command Object header + // Reserved GUID 128 // hardcoded: 4B1ACBE3-100B-11D0-A39B-00A0C90348F6 + // Commands Count WORD 16 // number of Commands structures in the Script Commands Objects + // Command Types Count WORD 16 // number of Command Types structures in the Script Commands Objects + // Command Types array of: variable // + // * Command Type Name Length WORD 16 // number of Unicode characters for Command Type Name + // * Command Type Name WCHAR variable // array of Unicode characters - name of a type of command + // Commands array of: variable // + // * Presentation Time DWORD 32 // presentation time of that command, in milliseconds + // * Type Index WORD 16 // type of this command, as a zero-based index into the array of Command Types of this object + // * Command Name Length WORD 16 // number of Unicode characters for Command Name + // * Command Name WCHAR variable // array of Unicode characters - name of this command + + // shortcut + $thisfile_asf['script_command_object'] = array(); + $thisfile_asf_scriptcommandobject = &$thisfile_asf['script_command_object']; + + $thisfile_asf_scriptcommandobject['offset'] = $NextObjectOffset + $offset; + $thisfile_asf_scriptcommandobject['objectid'] = $NextObjectGUID; + $thisfile_asf_scriptcommandobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_scriptcommandobject['objectsize'] = $NextObjectSize; + $thisfile_asf_scriptcommandobject['reserved'] = substr($ASFHeaderData, $offset, 16); + $offset += 16; + $thisfile_asf_scriptcommandobject['reserved_guid'] = $this->BytestringToGUID($thisfile_asf_scriptcommandobject['reserved']); + if ($thisfile_asf_scriptcommandobject['reserved'] != $this->GUIDtoBytestring('4B1ACBE3-100B-11D0-A39B-00A0C90348F6')) { + $info['warning'][] = 'script_command_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_scriptcommandobject['reserved']).'} does not match expected "GETID3_ASF_Reserved_1" GUID {4B1ACBE3-100B-11D0-A39B-00A0C90348F6}'; + //return false; + break; + } + $thisfile_asf_scriptcommandobject['commands_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_scriptcommandobject['command_types_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + for ($CommandTypesCounter = 0; $CommandTypesCounter < $thisfile_asf_scriptcommandobject['command_types_count']; $CommandTypesCounter++) { + $CommandTypeNameLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character + $offset += 2; + $thisfile_asf_scriptcommandobject['command_types'][$CommandTypesCounter]['name'] = substr($ASFHeaderData, $offset, $CommandTypeNameLength); + $offset += $CommandTypeNameLength; + } + for ($CommandsCounter = 0; $CommandsCounter < $thisfile_asf_scriptcommandobject['commands_count']; $CommandsCounter++) { + $thisfile_asf_scriptcommandobject['commands'][$CommandsCounter]['presentation_time'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + $thisfile_asf_scriptcommandobject['commands'][$CommandsCounter]['type_index'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + + $CommandTypeNameLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character + $offset += 2; + $thisfile_asf_scriptcommandobject['commands'][$CommandsCounter]['name'] = substr($ASFHeaderData, $offset, $CommandTypeNameLength); + $offset += $CommandTypeNameLength; + } + break; + + case GETID3_ASF_Marker_Object: + // Marker Object: (optional, one only) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for Marker object - GETID3_ASF_Marker_Object + // Object Size QWORD 64 // size of Marker object, including 48 bytes of Marker Object header + // Reserved GUID 128 // hardcoded: 4CFEDB20-75F6-11CF-9C0F-00A0C90349CB + // Markers Count DWORD 32 // number of Marker structures in Marker Object + // Reserved WORD 16 // hardcoded: 0x0000 + // Name Length WORD 16 // number of bytes in the Name field + // Name WCHAR variable // name of the Marker Object + // Markers array of: variable // + // * Offset QWORD 64 // byte offset into Data Object + // * Presentation Time QWORD 64 // in 100-nanosecond units + // * Entry Length WORD 16 // length in bytes of (Send Time + Flags + Marker Description Length + Marker Description + Padding) + // * Send Time DWORD 32 // in milliseconds + // * Flags DWORD 32 // hardcoded: 0x00000000 + // * Marker Description Length DWORD 32 // number of bytes in Marker Description field + // * Marker Description WCHAR variable // array of Unicode characters - description of marker entry + // * Padding BYTESTREAM variable // optional padding bytes + + // shortcut + $thisfile_asf['marker_object'] = array(); + $thisfile_asf_markerobject = &$thisfile_asf['marker_object']; + + $thisfile_asf_markerobject['offset'] = $NextObjectOffset + $offset; + $thisfile_asf_markerobject['objectid'] = $NextObjectGUID; + $thisfile_asf_markerobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_markerobject['objectsize'] = $NextObjectSize; + $thisfile_asf_markerobject['reserved'] = substr($ASFHeaderData, $offset, 16); + $offset += 16; + $thisfile_asf_markerobject['reserved_guid'] = $this->BytestringToGUID($thisfile_asf_markerobject['reserved']); + if ($thisfile_asf_markerobject['reserved'] != $this->GUIDtoBytestring('4CFEDB20-75F6-11CF-9C0F-00A0C90349CB')) { + $info['warning'][] = 'marker_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_markerobject['reserved_1']).'} does not match expected "GETID3_ASF_Reserved_1" GUID {4CFEDB20-75F6-11CF-9C0F-00A0C90349CB}'; + break; + } + $thisfile_asf_markerobject['markers_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + $thisfile_asf_markerobject['reserved_2'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + if ($thisfile_asf_markerobject['reserved_2'] != 0) { + $info['warning'][] = 'marker_object.reserved_2 ('.getid3_lib::PrintHexBytes($thisfile_asf_markerobject['reserved_2']).') does not match expected value of "0"'; + break; + } + $thisfile_asf_markerobject['name_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_markerobject['name'] = substr($ASFHeaderData, $offset, $thisfile_asf_markerobject['name_length']); + $offset += $thisfile_asf_markerobject['name_length']; + for ($MarkersCounter = 0; $MarkersCounter < $thisfile_asf_markerobject['markers_count']; $MarkersCounter++) { + $thisfile_asf_markerobject['markers'][$MarkersCounter]['offset'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8)); + $offset += 8; + $thisfile_asf_markerobject['markers'][$MarkersCounter]['presentation_time'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8)); + $offset += 8; + $thisfile_asf_markerobject['markers'][$MarkersCounter]['entry_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_markerobject['markers'][$MarkersCounter]['send_time'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + $thisfile_asf_markerobject['markers'][$MarkersCounter]['flags'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + $thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + $thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description'] = substr($ASFHeaderData, $offset, $thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description_length']); + $offset += $thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description_length']; + $PaddingLength = $thisfile_asf_markerobject['markers'][$MarkersCounter]['entry_length'] - 4 - 4 - 4 - $thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description_length']; + if ($PaddingLength > 0) { + $thisfile_asf_markerobject['markers'][$MarkersCounter]['padding'] = substr($ASFHeaderData, $offset, $PaddingLength); + $offset += $PaddingLength; + } + } + break; + + case GETID3_ASF_Bitrate_Mutual_Exclusion_Object: + // Bitrate Mutual Exclusion Object: (optional) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for Bitrate Mutual Exclusion object - GETID3_ASF_Bitrate_Mutual_Exclusion_Object + // Object Size QWORD 64 // size of Bitrate Mutual Exclusion object, including 42 bytes of Bitrate Mutual Exclusion Object header + // Exlusion Type GUID 128 // nature of mutual exclusion relationship. one of: (GETID3_ASF_Mutex_Bitrate, GETID3_ASF_Mutex_Unknown) + // Stream Numbers Count WORD 16 // number of video streams + // Stream Numbers WORD variable // array of mutually exclusive video stream numbers. 1 <= valid <= 127 + + // shortcut + $thisfile_asf['bitrate_mutual_exclusion_object'] = array(); + $thisfile_asf_bitratemutualexclusionobject = &$thisfile_asf['bitrate_mutual_exclusion_object']; + + $thisfile_asf_bitratemutualexclusionobject['offset'] = $NextObjectOffset + $offset; + $thisfile_asf_bitratemutualexclusionobject['objectid'] = $NextObjectGUID; + $thisfile_asf_bitratemutualexclusionobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_bitratemutualexclusionobject['objectsize'] = $NextObjectSize; + $thisfile_asf_bitratemutualexclusionobject['reserved'] = substr($ASFHeaderData, $offset, 16); + $thisfile_asf_bitratemutualexclusionobject['reserved_guid'] = $this->BytestringToGUID($thisfile_asf_bitratemutualexclusionobject['reserved']); + $offset += 16; + if (($thisfile_asf_bitratemutualexclusionobject['reserved'] != GETID3_ASF_Mutex_Bitrate) && ($thisfile_asf_bitratemutualexclusionobject['reserved'] != GETID3_ASF_Mutex_Unknown)) { + $info['warning'][] = 'bitrate_mutual_exclusion_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_bitratemutualexclusionobject['reserved']).'} does not match expected "GETID3_ASF_Mutex_Bitrate" GUID {'.$this->BytestringToGUID(GETID3_ASF_Mutex_Bitrate).'} or "GETID3_ASF_Mutex_Unknown" GUID {'.$this->BytestringToGUID(GETID3_ASF_Mutex_Unknown).'}'; + //return false; + break; + } + $thisfile_asf_bitratemutualexclusionobject['stream_numbers_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + for ($StreamNumberCounter = 0; $StreamNumberCounter < $thisfile_asf_bitratemutualexclusionobject['stream_numbers_count']; $StreamNumberCounter++) { + $thisfile_asf_bitratemutualexclusionobject['stream_numbers'][$StreamNumberCounter] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + } + break; + + case GETID3_ASF_Error_Correction_Object: + // Error Correction Object: (optional, one only) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for Error Correction object - GETID3_ASF_Error_Correction_Object + // Object Size QWORD 64 // size of Error Correction object, including 44 bytes of Error Correction Object header + // Error Correction Type GUID 128 // type of error correction. one of: (GETID3_ASF_No_Error_Correction, GETID3_ASF_Audio_Spread) + // Error Correction Data Length DWORD 32 // number of bytes in Error Correction Data field + // Error Correction Data BYTESTREAM variable // structure depends on value of Error Correction Type field + + // shortcut + $thisfile_asf['error_correction_object'] = array(); + $thisfile_asf_errorcorrectionobject = &$thisfile_asf['error_correction_object']; + + $thisfile_asf_errorcorrectionobject['offset'] = $NextObjectOffset + $offset; + $thisfile_asf_errorcorrectionobject['objectid'] = $NextObjectGUID; + $thisfile_asf_errorcorrectionobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_errorcorrectionobject['objectsize'] = $NextObjectSize; + $thisfile_asf_errorcorrectionobject['error_correction_type'] = substr($ASFHeaderData, $offset, 16); + $offset += 16; + $thisfile_asf_errorcorrectionobject['error_correction_guid'] = $this->BytestringToGUID($thisfile_asf_errorcorrectionobject['error_correction_type']); + $thisfile_asf_errorcorrectionobject['error_correction_data_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + switch ($thisfile_asf_errorcorrectionobject['error_correction_type']) { + case GETID3_ASF_No_Error_Correction: + // should be no data, but just in case there is, skip to the end of the field + $offset += $thisfile_asf_errorcorrectionobject['error_correction_data_length']; + break; + + case GETID3_ASF_Audio_Spread: + // Field Name Field Type Size (bits) + // Span BYTE 8 // number of packets over which audio will be spread. + // Virtual Packet Length WORD 16 // size of largest audio payload found in audio stream + // Virtual Chunk Length WORD 16 // size of largest audio payload found in audio stream + // Silence Data Length WORD 16 // number of bytes in Silence Data field + // Silence Data BYTESTREAM variable // hardcoded: 0x00 * (Silence Data Length) bytes + + $thisfile_asf_errorcorrectionobject['span'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 1)); + $offset += 1; + $thisfile_asf_errorcorrectionobject['virtual_packet_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_errorcorrectionobject['virtual_chunk_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_errorcorrectionobject['silence_data_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_errorcorrectionobject['silence_data'] = substr($ASFHeaderData, $offset, $thisfile_asf_errorcorrectionobject['silence_data_length']); + $offset += $thisfile_asf_errorcorrectionobject['silence_data_length']; + break; + + default: + $info['warning'][] = 'error_correction_object.error_correction_type GUID {'.$this->BytestringToGUID($thisfile_asf_errorcorrectionobject['reserved']).'} does not match expected "GETID3_ASF_No_Error_Correction" GUID {'.$this->BytestringToGUID(GETID3_ASF_No_Error_Correction).'} or "GETID3_ASF_Audio_Spread" GUID {'.$this->BytestringToGUID(GETID3_ASF_Audio_Spread).'}'; + //return false; + break; + } + + break; + + case GETID3_ASF_Content_Description_Object: + // Content Description Object: (optional, one only) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for Content Description object - GETID3_ASF_Content_Description_Object + // Object Size QWORD 64 // size of Content Description object, including 34 bytes of Content Description Object header + // Title Length WORD 16 // number of bytes in Title field + // Author Length WORD 16 // number of bytes in Author field + // Copyright Length WORD 16 // number of bytes in Copyright field + // Description Length WORD 16 // number of bytes in Description field + // Rating Length WORD 16 // number of bytes in Rating field + // Title WCHAR 16 // array of Unicode characters - Title + // Author WCHAR 16 // array of Unicode characters - Author + // Copyright WCHAR 16 // array of Unicode characters - Copyright + // Description WCHAR 16 // array of Unicode characters - Description + // Rating WCHAR 16 // array of Unicode characters - Rating + + // shortcut + $thisfile_asf['content_description_object'] = array(); + $thisfile_asf_contentdescriptionobject = &$thisfile_asf['content_description_object']; + + $thisfile_asf_contentdescriptionobject['offset'] = $NextObjectOffset + $offset; + $thisfile_asf_contentdescriptionobject['objectid'] = $NextObjectGUID; + $thisfile_asf_contentdescriptionobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_contentdescriptionobject['objectsize'] = $NextObjectSize; + $thisfile_asf_contentdescriptionobject['title_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_contentdescriptionobject['author_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_contentdescriptionobject['copyright_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_contentdescriptionobject['description_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_contentdescriptionobject['rating_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_contentdescriptionobject['title'] = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['title_length']); + $offset += $thisfile_asf_contentdescriptionobject['title_length']; + $thisfile_asf_contentdescriptionobject['author'] = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['author_length']); + $offset += $thisfile_asf_contentdescriptionobject['author_length']; + $thisfile_asf_contentdescriptionobject['copyright'] = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['copyright_length']); + $offset += $thisfile_asf_contentdescriptionobject['copyright_length']; + $thisfile_asf_contentdescriptionobject['description'] = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['description_length']); + $offset += $thisfile_asf_contentdescriptionobject['description_length']; + $thisfile_asf_contentdescriptionobject['rating'] = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['rating_length']); + $offset += $thisfile_asf_contentdescriptionobject['rating_length']; + + $ASFcommentKeysToCopy = array('title'=>'title', 'author'=>'artist', 'copyright'=>'copyright', 'description'=>'comment', 'rating'=>'rating'); + foreach ($ASFcommentKeysToCopy as $keytocopyfrom => $keytocopyto) { + if (!empty($thisfile_asf_contentdescriptionobject[$keytocopyfrom])) { + $thisfile_asf_comments[$keytocopyto][] = $this->TrimTerm($thisfile_asf_contentdescriptionobject[$keytocopyfrom]); + } + } + break; + + case GETID3_ASF_Extended_Content_Description_Object: + // Extended Content Description Object: (optional, one only) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for Extended Content Description object - GETID3_ASF_Extended_Content_Description_Object + // Object Size QWORD 64 // size of ExtendedContent Description object, including 26 bytes of Extended Content Description Object header + // Content Descriptors Count WORD 16 // number of entries in Content Descriptors list + // Content Descriptors array of: variable // + // * Descriptor Name Length WORD 16 // size in bytes of Descriptor Name field + // * Descriptor Name WCHAR variable // array of Unicode characters - Descriptor Name + // * Descriptor Value Data Type WORD 16 // Lookup array: + // 0x0000 = Unicode String (variable length) + // 0x0001 = BYTE array (variable length) + // 0x0002 = BOOL (DWORD, 32 bits) + // 0x0003 = DWORD (DWORD, 32 bits) + // 0x0004 = QWORD (QWORD, 64 bits) + // 0x0005 = WORD (WORD, 16 bits) + // * Descriptor Value Length WORD 16 // number of bytes stored in Descriptor Value field + // * Descriptor Value variable variable // value for Content Descriptor + + // shortcut + $thisfile_asf['extended_content_description_object'] = array(); + $thisfile_asf_extendedcontentdescriptionobject = &$thisfile_asf['extended_content_description_object']; + + $thisfile_asf_extendedcontentdescriptionobject['offset'] = $NextObjectOffset + $offset; + $thisfile_asf_extendedcontentdescriptionobject['objectid'] = $NextObjectGUID; + $thisfile_asf_extendedcontentdescriptionobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_extendedcontentdescriptionobject['objectsize'] = $NextObjectSize; + $thisfile_asf_extendedcontentdescriptionobject['content_descriptors_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + for ($ExtendedContentDescriptorsCounter = 0; $ExtendedContentDescriptorsCounter < $thisfile_asf_extendedcontentdescriptionobject['content_descriptors_count']; $ExtendedContentDescriptorsCounter++) { + // shortcut + $thisfile_asf_extendedcontentdescriptionobject['content_descriptors'][$ExtendedContentDescriptorsCounter] = array(); + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current = &$thisfile_asf_extendedcontentdescriptionobject['content_descriptors'][$ExtendedContentDescriptorsCounter]; + + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['base_offset'] = $offset + 30; + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name'] = substr($ASFHeaderData, $offset, $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name_length']); + $offset += $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name_length']; + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_type'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'] = substr($ASFHeaderData, $offset, $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_length']); + $offset += $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_length']; + switch ($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_type']) { + case 0x0000: // Unicode string + break; + + case 0x0001: // BYTE array + // do nothing + break; + + case 0x0002: // BOOL + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'] = (bool) getid3_lib::LittleEndian2Int($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']); + break; + + case 0x0003: // DWORD + case 0x0004: // QWORD + case 0x0005: // WORD + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'] = getid3_lib::LittleEndian2Int($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']); + break; + + default: + $info['warning'][] = 'extended_content_description.content_descriptors.'.$ExtendedContentDescriptorsCounter.'.value_type is invalid ('.$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_type'].')'; + //return false; + break; + } + switch ($this->TrimConvert(strtolower($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name']))) { + + case 'wm/albumartist': + case 'artist': + // Note: not 'artist', that comes from 'author' tag + $thisfile_asf_comments['albumartist'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'])); + break; + + case 'wm/albumtitle': + case 'album': + $thisfile_asf_comments['album'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'])); + break; + + case 'wm/genre': + case 'genre': + $thisfile_asf_comments['genre'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'])); + break; + + case 'wm/partofset': + $thisfile_asf_comments['partofset'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'])); + break; + + case 'wm/tracknumber': + case 'tracknumber': + // be careful casting to int: casting unicode strings to int gives unexpected results (stops parsing at first non-numeric character) + $thisfile_asf_comments['track'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'])); + foreach ($thisfile_asf_comments['track'] as $key => $value) { + if (preg_match('/^[0-9\x00]+$/', $value)) { + $thisfile_asf_comments['track'][$key] = intval(str_replace("\x00", '', $value)); + } + } + break; + + case 'wm/track': + if (empty($thisfile_asf_comments['track'])) { + $thisfile_asf_comments['track'] = array(1 + $this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'])); + } + break; + + case 'wm/year': + case 'year': + case 'date': + $thisfile_asf_comments['year'] = array( $this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'])); + break; + + case 'wm/lyrics': + case 'lyrics': + $thisfile_asf_comments['lyrics'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'])); + break; + + case 'isvbr': + if ($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']) { + $thisfile_audio['bitrate_mode'] = 'vbr'; + $thisfile_video['bitrate_mode'] = 'vbr'; + } + break; + + case 'id3': + // id3v2 module might not be loaded + if (class_exists('getid3_id3v2')) { + $tempfile = tempnam(GETID3_TEMP_DIR, 'getID3'); + $tempfilehandle = fopen($tempfile, 'wb'); + $tempThisfileInfo = array('encoding'=>$info['encoding']); + fwrite($tempfilehandle, $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']); + fclose($tempfilehandle); + + $getid3_temp = new getID3(); + $getid3_temp->openfile($tempfile); + $getid3_id3v2 = new getid3_id3v2($getid3_temp); + $getid3_id3v2->Analyze(); + $info['id3v2'] = $getid3_temp->info['id3v2']; + unset($getid3_temp, $getid3_id3v2); + + unlink($tempfile); + } + break; + + case 'wm/encodingtime': + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['encoding_time_unix'] = $this->FILETIMEtoUNIXtime($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']); + $thisfile_asf_comments['encoding_time_unix'] = array($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['encoding_time_unix']); + break; + + case 'wm/picture': + $WMpicture = $this->ASF_WMpicture($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']); + foreach ($WMpicture as $key => $value) { + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current[$key] = $value; + } + unset($WMpicture); +/* + $wm_picture_offset = 0; + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type_id'] = getid3_lib::LittleEndian2Int(substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 1)); + $wm_picture_offset += 1; + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type'] = $this->WMpictureTypeLookup($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type_id']); + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_size'] = getid3_lib::LittleEndian2Int(substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 4)); + $wm_picture_offset += 4; + + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime'] = ''; + do { + $next_byte_pair = substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 2); + $wm_picture_offset += 2; + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime'] .= $next_byte_pair; + } while ($next_byte_pair !== "\x00\x00"); + + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_description'] = ''; + do { + $next_byte_pair = substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 2); + $wm_picture_offset += 2; + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_description'] .= $next_byte_pair; + } while ($next_byte_pair !== "\x00\x00"); + + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['dataoffset'] = $wm_picture_offset; + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['data'] = substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset); + unset($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']); + + $imageinfo = array(); + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime'] = ''; + $imagechunkcheck = getid3_lib::GetDataImageSize($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['data'], $imageinfo); + unset($imageinfo); + if (!empty($imagechunkcheck)) { + $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime'] = image_type_to_mime_type($imagechunkcheck[2]); + } + if (!isset($thisfile_asf_comments['picture'])) { + $thisfile_asf_comments['picture'] = array(); + } + $thisfile_asf_comments['picture'][] = array('data'=>$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['data'], 'image_mime'=>$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime']); +*/ + break; + + default: + switch ($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_type']) { + case 0: // Unicode string + if (substr($this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name']), 0, 3) == 'WM/') { + $thisfile_asf_comments[str_replace('wm/', '', strtolower($this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name'])))] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'])); + } + break; + + case 1: + break; + } + break; + } + + } + break; + + case GETID3_ASF_Stream_Bitrate_Properties_Object: + // Stream Bitrate Properties Object: (optional, one only) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for Stream Bitrate Properties object - GETID3_ASF_Stream_Bitrate_Properties_Object + // Object Size QWORD 64 // size of Extended Content Description object, including 26 bytes of Stream Bitrate Properties Object header + // Bitrate Records Count WORD 16 // number of records in Bitrate Records + // Bitrate Records array of: variable // + // * Flags WORD 16 // + // * * Stream Number bits 7 (0x007F) // number of this stream + // * * Reserved bits 9 (0xFF80) // hardcoded: 0 + // * Average Bitrate DWORD 32 // in bits per second + + // shortcut + $thisfile_asf['stream_bitrate_properties_object'] = array(); + $thisfile_asf_streambitratepropertiesobject = &$thisfile_asf['stream_bitrate_properties_object']; + + $thisfile_asf_streambitratepropertiesobject['offset'] = $NextObjectOffset + $offset; + $thisfile_asf_streambitratepropertiesobject['objectid'] = $NextObjectGUID; + $thisfile_asf_streambitratepropertiesobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_streambitratepropertiesobject['objectsize'] = $NextObjectSize; + $thisfile_asf_streambitratepropertiesobject['bitrate_records_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + for ($BitrateRecordsCounter = 0; $BitrateRecordsCounter < $thisfile_asf_streambitratepropertiesobject['bitrate_records_count']; $BitrateRecordsCounter++) { + $thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['flags_raw'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)); + $offset += 2; + $thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['flags']['stream_number'] = $thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['flags_raw'] & 0x007F; + $thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['bitrate'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4)); + $offset += 4; + } + break; + + case GETID3_ASF_Padding_Object: + // Padding Object: (optional) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for Padding object - GETID3_ASF_Padding_Object + // Object Size QWORD 64 // size of Padding object, including 24 bytes of ASF Padding Object header + // Padding Data BYTESTREAM variable // ignore + + // shortcut + $thisfile_asf['padding_object'] = array(); + $thisfile_asf_paddingobject = &$thisfile_asf['padding_object']; + + $thisfile_asf_paddingobject['offset'] = $NextObjectOffset + $offset; + $thisfile_asf_paddingobject['objectid'] = $NextObjectGUID; + $thisfile_asf_paddingobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_paddingobject['objectsize'] = $NextObjectSize; + $thisfile_asf_paddingobject['padding_length'] = $thisfile_asf_paddingobject['objectsize'] - 16 - 8; + $thisfile_asf_paddingobject['padding'] = substr($ASFHeaderData, $offset, $thisfile_asf_paddingobject['padding_length']); + $offset += ($NextObjectSize - 16 - 8); + break; + + case GETID3_ASF_Extended_Content_Encryption_Object: + case GETID3_ASF_Content_Encryption_Object: + // WMA DRM - just ignore + $offset += ($NextObjectSize - 16 - 8); + break; + + default: + // Implementations shall ignore any standard or non-standard object that they do not know how to handle. + if ($this->GUIDname($NextObjectGUIDtext)) { + $info['warning'][] = 'unhandled GUID "'.$this->GUIDname($NextObjectGUIDtext).'" {'.$NextObjectGUIDtext.'} in ASF header at offset '.($offset - 16 - 8); + } else { + $info['warning'][] = 'unknown GUID {'.$NextObjectGUIDtext.'} in ASF header at offset '.($offset - 16 - 8); + } + $offset += ($NextObjectSize - 16 - 8); + break; + } + } + if (isset($thisfile_asf_streambitrateproperties['bitrate_records_count'])) { + $ASFbitrateAudio = 0; + $ASFbitrateVideo = 0; + for ($BitrateRecordsCounter = 0; $BitrateRecordsCounter < $thisfile_asf_streambitrateproperties['bitrate_records_count']; $BitrateRecordsCounter++) { + if (isset($thisfile_asf_codeclistobject['codec_entries'][$BitrateRecordsCounter])) { + switch ($thisfile_asf_codeclistobject['codec_entries'][$BitrateRecordsCounter]['type_raw']) { + case 1: + $ASFbitrateVideo += $thisfile_asf_streambitrateproperties['bitrate_records'][$BitrateRecordsCounter]['bitrate']; + break; + + case 2: + $ASFbitrateAudio += $thisfile_asf_streambitrateproperties['bitrate_records'][$BitrateRecordsCounter]['bitrate']; + break; + + default: + // do nothing + break; + } + } + } + if ($ASFbitrateAudio > 0) { + $thisfile_audio['bitrate'] = $ASFbitrateAudio; + } + if ($ASFbitrateVideo > 0) { + $thisfile_video['bitrate'] = $ASFbitrateVideo; + } + } + if (isset($thisfile_asf['stream_properties_object']) && is_array($thisfile_asf['stream_properties_object'])) { + + $thisfile_audio['bitrate'] = 0; + $thisfile_video['bitrate'] = 0; + + foreach ($thisfile_asf['stream_properties_object'] as $streamnumber => $streamdata) { + + switch ($streamdata['stream_type']) { + case GETID3_ASF_Audio_Media: + // Field Name Field Type Size (bits) + // Codec ID / Format Tag WORD 16 // unique ID of audio codec - defined as wFormatTag field of WAVEFORMATEX structure + // Number of Channels WORD 16 // number of channels of audio - defined as nChannels field of WAVEFORMATEX structure + // Samples Per Second DWORD 32 // in Hertz - defined as nSamplesPerSec field of WAVEFORMATEX structure + // Average number of Bytes/sec DWORD 32 // bytes/sec of audio stream - defined as nAvgBytesPerSec field of WAVEFORMATEX structure + // Block Alignment WORD 16 // block size in bytes of audio codec - defined as nBlockAlign field of WAVEFORMATEX structure + // Bits per sample WORD 16 // bits per sample of mono data. set to zero for variable bitrate codecs. defined as wBitsPerSample field of WAVEFORMATEX structure + // Codec Specific Data Size WORD 16 // size in bytes of Codec Specific Data buffer - defined as cbSize field of WAVEFORMATEX structure + // Codec Specific Data BYTESTREAM variable // array of codec-specific data bytes + + // shortcut + $thisfile_asf['audio_media'][$streamnumber] = array(); + $thisfile_asf_audiomedia_currentstream = &$thisfile_asf['audio_media'][$streamnumber]; + + $audiomediaoffset = 0; + + $thisfile_asf_audiomedia_currentstream = getid3_riff::parseWAVEFORMATex(substr($streamdata['type_specific_data'], $audiomediaoffset, 16)); + $audiomediaoffset += 16; + + $thisfile_audio['lossless'] = false; + switch ($thisfile_asf_audiomedia_currentstream['raw']['wFormatTag']) { + case 0x0001: // PCM + case 0x0163: // WMA9 Lossless + $thisfile_audio['lossless'] = true; + break; + } + + if (!empty($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'])) { + foreach ($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'] as $dummy => $dataarray) { + if (isset($dataarray['flags']['stream_number']) && ($dataarray['flags']['stream_number'] == $streamnumber)) { + $thisfile_asf_audiomedia_currentstream['bitrate'] = $dataarray['bitrate']; + $thisfile_audio['bitrate'] += $dataarray['bitrate']; + break; + } + } + } else { + if (!empty($thisfile_asf_audiomedia_currentstream['bytes_sec'])) { + $thisfile_audio['bitrate'] += $thisfile_asf_audiomedia_currentstream['bytes_sec'] * 8; + } elseif (!empty($thisfile_asf_audiomedia_currentstream['bitrate'])) { + $thisfile_audio['bitrate'] += $thisfile_asf_audiomedia_currentstream['bitrate']; + } + } + $thisfile_audio['streams'][$streamnumber] = $thisfile_asf_audiomedia_currentstream; + $thisfile_audio['streams'][$streamnumber]['wformattag'] = $thisfile_asf_audiomedia_currentstream['raw']['wFormatTag']; + $thisfile_audio['streams'][$streamnumber]['lossless'] = $thisfile_audio['lossless']; + $thisfile_audio['streams'][$streamnumber]['bitrate'] = $thisfile_audio['bitrate']; + $thisfile_audio['streams'][$streamnumber]['dataformat'] = 'wma'; + unset($thisfile_audio['streams'][$streamnumber]['raw']); + + $thisfile_asf_audiomedia_currentstream['codec_data_size'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $audiomediaoffset, 2)); + $audiomediaoffset += 2; + $thisfile_asf_audiomedia_currentstream['codec_data'] = substr($streamdata['type_specific_data'], $audiomediaoffset, $thisfile_asf_audiomedia_currentstream['codec_data_size']); + $audiomediaoffset += $thisfile_asf_audiomedia_currentstream['codec_data_size']; + + break; + + case GETID3_ASF_Video_Media: + // Field Name Field Type Size (bits) + // Encoded Image Width DWORD 32 // width of image in pixels + // Encoded Image Height DWORD 32 // height of image in pixels + // Reserved Flags BYTE 8 // hardcoded: 0x02 + // Format Data Size WORD 16 // size of Format Data field in bytes + // Format Data array of: variable // + // * Format Data Size DWORD 32 // number of bytes in Format Data field, in bytes - defined as biSize field of BITMAPINFOHEADER structure + // * Image Width LONG 32 // width of encoded image in pixels - defined as biWidth field of BITMAPINFOHEADER structure + // * Image Height LONG 32 // height of encoded image in pixels - defined as biHeight field of BITMAPINFOHEADER structure + // * Reserved WORD 16 // hardcoded: 0x0001 - defined as biPlanes field of BITMAPINFOHEADER structure + // * Bits Per Pixel Count WORD 16 // bits per pixel - defined as biBitCount field of BITMAPINFOHEADER structure + // * Compression ID FOURCC 32 // fourcc of video codec - defined as biCompression field of BITMAPINFOHEADER structure + // * Image Size DWORD 32 // image size in bytes - defined as biSizeImage field of BITMAPINFOHEADER structure + // * Horizontal Pixels / Meter DWORD 32 // horizontal resolution of target device in pixels per meter - defined as biXPelsPerMeter field of BITMAPINFOHEADER structure + // * Vertical Pixels / Meter DWORD 32 // vertical resolution of target device in pixels per meter - defined as biYPelsPerMeter field of BITMAPINFOHEADER structure + // * Colors Used Count DWORD 32 // number of color indexes in the color table that are actually used - defined as biClrUsed field of BITMAPINFOHEADER structure + // * Important Colors Count DWORD 32 // number of color index required for displaying bitmap. if zero, all colors are required. defined as biClrImportant field of BITMAPINFOHEADER structure + // * Codec Specific Data BYTESTREAM variable // array of codec-specific data bytes + + // shortcut + $thisfile_asf['video_media'][$streamnumber] = array(); + $thisfile_asf_videomedia_currentstream = &$thisfile_asf['video_media'][$streamnumber]; + + $videomediaoffset = 0; + $thisfile_asf_videomedia_currentstream['image_width'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4)); + $videomediaoffset += 4; + $thisfile_asf_videomedia_currentstream['image_height'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4)); + $videomediaoffset += 4; + $thisfile_asf_videomedia_currentstream['flags'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 1)); + $videomediaoffset += 1; + $thisfile_asf_videomedia_currentstream['format_data_size'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 2)); + $videomediaoffset += 2; + $thisfile_asf_videomedia_currentstream['format_data']['format_data_size'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4)); + $videomediaoffset += 4; + $thisfile_asf_videomedia_currentstream['format_data']['image_width'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4)); + $videomediaoffset += 4; + $thisfile_asf_videomedia_currentstream['format_data']['image_height'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4)); + $videomediaoffset += 4; + $thisfile_asf_videomedia_currentstream['format_data']['reserved'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 2)); + $videomediaoffset += 2; + $thisfile_asf_videomedia_currentstream['format_data']['bits_per_pixel'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 2)); + $videomediaoffset += 2; + $thisfile_asf_videomedia_currentstream['format_data']['codec_fourcc'] = substr($streamdata['type_specific_data'], $videomediaoffset, 4); + $videomediaoffset += 4; + $thisfile_asf_videomedia_currentstream['format_data']['image_size'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4)); + $videomediaoffset += 4; + $thisfile_asf_videomedia_currentstream['format_data']['horizontal_pels'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4)); + $videomediaoffset += 4; + $thisfile_asf_videomedia_currentstream['format_data']['vertical_pels'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4)); + $videomediaoffset += 4; + $thisfile_asf_videomedia_currentstream['format_data']['colors_used'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4)); + $videomediaoffset += 4; + $thisfile_asf_videomedia_currentstream['format_data']['colors_important'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4)); + $videomediaoffset += 4; + $thisfile_asf_videomedia_currentstream['format_data']['codec_data'] = substr($streamdata['type_specific_data'], $videomediaoffset); + + if (!empty($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'])) { + foreach ($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'] as $dummy => $dataarray) { + if (isset($dataarray['flags']['stream_number']) && ($dataarray['flags']['stream_number'] == $streamnumber)) { + $thisfile_asf_videomedia_currentstream['bitrate'] = $dataarray['bitrate']; + $thisfile_video['streams'][$streamnumber]['bitrate'] = $dataarray['bitrate']; + $thisfile_video['bitrate'] += $dataarray['bitrate']; + break; + } + } + } + + $thisfile_asf_videomedia_currentstream['format_data']['codec'] = getid3_riff::fourccLookup($thisfile_asf_videomedia_currentstream['format_data']['codec_fourcc']); + + $thisfile_video['streams'][$streamnumber]['fourcc'] = $thisfile_asf_videomedia_currentstream['format_data']['codec_fourcc']; + $thisfile_video['streams'][$streamnumber]['codec'] = $thisfile_asf_videomedia_currentstream['format_data']['codec']; + $thisfile_video['streams'][$streamnumber]['resolution_x'] = $thisfile_asf_videomedia_currentstream['image_width']; + $thisfile_video['streams'][$streamnumber]['resolution_y'] = $thisfile_asf_videomedia_currentstream['image_height']; + $thisfile_video['streams'][$streamnumber]['bits_per_sample'] = $thisfile_asf_videomedia_currentstream['format_data']['bits_per_pixel']; + break; + + default: + break; + } + } + } + + while (ftell($this->getid3->fp) < $info['avdataend']) { + $NextObjectDataHeader = fread($this->getid3->fp, 24); + $offset = 0; + $NextObjectGUID = substr($NextObjectDataHeader, 0, 16); + $offset += 16; + $NextObjectGUIDtext = $this->BytestringToGUID($NextObjectGUID); + $NextObjectSize = getid3_lib::LittleEndian2Int(substr($NextObjectDataHeader, $offset, 8)); + $offset += 8; + + switch ($NextObjectGUID) { + case GETID3_ASF_Data_Object: + // Data Object: (mandatory, one only) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for Data object - GETID3_ASF_Data_Object + // Object Size QWORD 64 // size of Data object, including 50 bytes of Data Object header. may be 0 if FilePropertiesObject.BroadcastFlag == 1 + // File ID GUID 128 // unique identifier. identical to File ID field in Header Object + // Total Data Packets QWORD 64 // number of Data Packet entries in Data Object. invalid if FilePropertiesObject.BroadcastFlag == 1 + // Reserved WORD 16 // hardcoded: 0x0101 + + // shortcut + $thisfile_asf['data_object'] = array(); + $thisfile_asf_dataobject = &$thisfile_asf['data_object']; + + $DataObjectData = $NextObjectDataHeader.fread($this->getid3->fp, 50 - 24); + $offset = 24; + + $thisfile_asf_dataobject['objectid'] = $NextObjectGUID; + $thisfile_asf_dataobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_dataobject['objectsize'] = $NextObjectSize; + + $thisfile_asf_dataobject['fileid'] = substr($DataObjectData, $offset, 16); + $offset += 16; + $thisfile_asf_dataobject['fileid_guid'] = $this->BytestringToGUID($thisfile_asf_dataobject['fileid']); + $thisfile_asf_dataobject['total_data_packets'] = getid3_lib::LittleEndian2Int(substr($DataObjectData, $offset, 8)); + $offset += 8; + $thisfile_asf_dataobject['reserved'] = getid3_lib::LittleEndian2Int(substr($DataObjectData, $offset, 2)); + $offset += 2; + if ($thisfile_asf_dataobject['reserved'] != 0x0101) { + $info['warning'][] = 'data_object.reserved ('.getid3_lib::PrintHexBytes($thisfile_asf_dataobject['reserved']).') does not match expected value of "0x0101"'; + //return false; + break; + } + + // Data Packets array of: variable // + // * Error Correction Flags BYTE 8 // + // * * Error Correction Data Length bits 4 // if Error Correction Length Type == 00, size of Error Correction Data in bytes, else hardcoded: 0000 + // * * Opaque Data Present bits 1 // + // * * Error Correction Length Type bits 2 // number of bits for size of the error correction data. hardcoded: 00 + // * * Error Correction Present bits 1 // If set, use Opaque Data Packet structure, else use Payload structure + // * Error Correction Data + + $info['avdataoffset'] = ftell($this->getid3->fp); + fseek($this->getid3->fp, ($thisfile_asf_dataobject['objectsize'] - 50), SEEK_CUR); // skip actual audio/video data + $info['avdataend'] = ftell($this->getid3->fp); + break; + + case GETID3_ASF_Simple_Index_Object: + // Simple Index Object: (optional, recommended, one per video stream) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for Simple Index object - GETID3_ASF_Data_Object + // Object Size QWORD 64 // size of Simple Index object, including 56 bytes of Simple Index Object header + // File ID GUID 128 // unique identifier. may be zero or identical to File ID field in Data Object and Header Object + // Index Entry Time Interval QWORD 64 // interval between index entries in 100-nanosecond units + // Maximum Packet Count DWORD 32 // maximum packet count for all index entries + // Index Entries Count DWORD 32 // number of Index Entries structures + // Index Entries array of: variable // + // * Packet Number DWORD 32 // number of the Data Packet associated with this index entry + // * Packet Count WORD 16 // number of Data Packets to sent at this index entry + + // shortcut + $thisfile_asf['simple_index_object'] = array(); + $thisfile_asf_simpleindexobject = &$thisfile_asf['simple_index_object']; + + $SimpleIndexObjectData = $NextObjectDataHeader.fread($this->getid3->fp, 56 - 24); + $offset = 24; + + $thisfile_asf_simpleindexobject['objectid'] = $NextObjectGUID; + $thisfile_asf_simpleindexobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_simpleindexobject['objectsize'] = $NextObjectSize; + + $thisfile_asf_simpleindexobject['fileid'] = substr($SimpleIndexObjectData, $offset, 16); + $offset += 16; + $thisfile_asf_simpleindexobject['fileid_guid'] = $this->BytestringToGUID($thisfile_asf_simpleindexobject['fileid']); + $thisfile_asf_simpleindexobject['index_entry_time_interval'] = getid3_lib::LittleEndian2Int(substr($SimpleIndexObjectData, $offset, 8)); + $offset += 8; + $thisfile_asf_simpleindexobject['maximum_packet_count'] = getid3_lib::LittleEndian2Int(substr($SimpleIndexObjectData, $offset, 4)); + $offset += 4; + $thisfile_asf_simpleindexobject['index_entries_count'] = getid3_lib::LittleEndian2Int(substr($SimpleIndexObjectData, $offset, 4)); + $offset += 4; + + $IndexEntriesData = $SimpleIndexObjectData.fread($this->getid3->fp, 6 * $thisfile_asf_simpleindexobject['index_entries_count']); + for ($IndexEntriesCounter = 0; $IndexEntriesCounter < $thisfile_asf_simpleindexobject['index_entries_count']; $IndexEntriesCounter++) { + $thisfile_asf_simpleindexobject['index_entries'][$IndexEntriesCounter]['packet_number'] = getid3_lib::LittleEndian2Int(substr($IndexEntriesData, $offset, 4)); + $offset += 4; + $thisfile_asf_simpleindexobject['index_entries'][$IndexEntriesCounter]['packet_count'] = getid3_lib::LittleEndian2Int(substr($IndexEntriesData, $offset, 4)); + $offset += 2; + } + + break; + + case GETID3_ASF_Index_Object: + // 6.2 ASF top-level Index Object (optional but recommended when appropriate, 0 or 1) + // Field Name Field Type Size (bits) + // Object ID GUID 128 // GUID for the Index Object - GETID3_ASF_Index_Object + // Object Size QWORD 64 // Specifies the size, in bytes, of the Index Object, including at least 34 bytes of Index Object header + // Index Entry Time Interval DWORD 32 // Specifies the time interval between each index entry in ms. + // Index Specifiers Count WORD 16 // Specifies the number of Index Specifiers structures in this Index Object. + // Index Blocks Count DWORD 32 // Specifies the number of Index Blocks structures in this Index Object. + + // Index Entry Time Interval DWORD 32 // Specifies the time interval between index entries in milliseconds. This value cannot be 0. + // Index Specifiers Count WORD 16 // Specifies the number of entries in the Index Specifiers list. Valid values are 1 and greater. + // Index Specifiers array of: varies // + // * Stream Number WORD 16 // Specifies the stream number that the Index Specifiers refer to. Valid values are between 1 and 127. + // * Index Type WORD 16 // Specifies Index Type values as follows: + // 1 = Nearest Past Data Packet - indexes point to the data packet whose presentation time is closest to the index entry time. + // 2 = Nearest Past Media Object - indexes point to the closest data packet containing an entire object or first fragment of an object. + // 3 = Nearest Past Cleanpoint. - indexes point to the closest data packet containing an entire object (or first fragment of an object) that has the Cleanpoint Flag set. + // Nearest Past Cleanpoint is the most common type of index. + // Index Entry Count DWORD 32 // Specifies the number of Index Entries in the block. + // * Block Positions QWORD varies // Specifies a list of byte offsets of the beginnings of the blocks relative to the beginning of the first Data Packet (i.e., the beginning of the Data Object + 50 bytes). The number of entries in this list is specified by the value of the Index Specifiers Count field. The order of those byte offsets is tied to the order in which Index Specifiers are listed. + // * Index Entries array of: varies // + // * * Offsets DWORD varies // An offset value of 0xffffffff indicates an invalid offset value + + // shortcut + $thisfile_asf['asf_index_object'] = array(); + $thisfile_asf_asfindexobject = &$thisfile_asf['asf_index_object']; + + $ASFIndexObjectData = $NextObjectDataHeader.fread($this->getid3->fp, 34 - 24); + $offset = 24; + + $thisfile_asf_asfindexobject['objectid'] = $NextObjectGUID; + $thisfile_asf_asfindexobject['objectid_guid'] = $NextObjectGUIDtext; + $thisfile_asf_asfindexobject['objectsize'] = $NextObjectSize; + + $thisfile_asf_asfindexobject['entry_time_interval'] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4)); + $offset += 4; + $thisfile_asf_asfindexobject['index_specifiers_count'] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 2)); + $offset += 2; + $thisfile_asf_asfindexobject['index_blocks_count'] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4)); + $offset += 4; + + $ASFIndexObjectData .= fread($this->getid3->fp, 4 * $thisfile_asf_asfindexobject['index_specifiers_count']); + for ($IndexSpecifiersCounter = 0; $IndexSpecifiersCounter < $thisfile_asf_asfindexobject['index_specifiers_count']; $IndexSpecifiersCounter++) { + $IndexSpecifierStreamNumber = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 2)); + $offset += 2; + $thisfile_asf_asfindexobject['index_specifiers'][$IndexSpecifiersCounter]['stream_number'] = $IndexSpecifierStreamNumber; + $thisfile_asf_asfindexobject['index_specifiers'][$IndexSpecifiersCounter]['index_type'] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 2)); + $offset += 2; + $thisfile_asf_asfindexobject['index_specifiers'][$IndexSpecifiersCounter]['index_type_text'] = $this->ASFIndexObjectIndexTypeLookup($thisfile_asf_asfindexobject['index_specifiers'][$IndexSpecifiersCounter]['index_type']); + } + + $ASFIndexObjectData .= fread($this->getid3->fp, 4); + $thisfile_asf_asfindexobject['index_entry_count'] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4)); + $offset += 4; + + $ASFIndexObjectData .= fread($this->getid3->fp, 8 * $thisfile_asf_asfindexobject['index_specifiers_count']); + for ($IndexSpecifiersCounter = 0; $IndexSpecifiersCounter < $thisfile_asf_asfindexobject['index_specifiers_count']; $IndexSpecifiersCounter++) { + $thisfile_asf_asfindexobject['block_positions'][$IndexSpecifiersCounter] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 8)); + $offset += 8; + } + + $ASFIndexObjectData .= fread($this->getid3->fp, 4 * $thisfile_asf_asfindexobject['index_specifiers_count'] * $thisfile_asf_asfindexobject['index_entry_count']); + for ($IndexEntryCounter = 0; $IndexEntryCounter < $thisfile_asf_asfindexobject['index_entry_count']; $IndexEntryCounter++) { + for ($IndexSpecifiersCounter = 0; $IndexSpecifiersCounter < $thisfile_asf_asfindexobject['index_specifiers_count']; $IndexSpecifiersCounter++) { + $thisfile_asf_asfindexobject['offsets'][$IndexSpecifiersCounter][$IndexEntryCounter] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4)); + $offset += 4; + } + } + break; + + + default: + // Implementations shall ignore any standard or non-standard object that they do not know how to handle. + if ($this->GUIDname($NextObjectGUIDtext)) { + $info['warning'][] = 'unhandled GUID "'.$this->GUIDname($NextObjectGUIDtext).'" {'.$NextObjectGUIDtext.'} in ASF body at offset '.($offset - 16 - 8); + } else { + $info['warning'][] = 'unknown GUID {'.$NextObjectGUIDtext.'} in ASF body at offset '.(ftell($this->getid3->fp) - 16 - 8); + } + fseek($this->getid3->fp, ($NextObjectSize - 16 - 8), SEEK_CUR); + break; + } + } + + if (isset($thisfile_asf_codeclistobject['codec_entries']) && is_array($thisfile_asf_codeclistobject['codec_entries'])) { + foreach ($thisfile_asf_codeclistobject['codec_entries'] as $streamnumber => $streamdata) { + switch ($streamdata['information']) { + case 'WMV1': + case 'WMV2': + case 'WMV3': + case 'MSS1': + case 'MSS2': + case 'WMVA': + case 'WVC1': + case 'WMVP': + case 'WVP2': + $thisfile_video['dataformat'] = 'wmv'; + $info['mime_type'] = 'video/x-ms-wmv'; + break; + + case 'MP42': + case 'MP43': + case 'MP4S': + case 'mp4s': + $thisfile_video['dataformat'] = 'asf'; + $info['mime_type'] = 'video/x-ms-asf'; + break; + + default: + switch ($streamdata['type_raw']) { + case 1: + if (strstr($this->TrimConvert($streamdata['name']), 'Windows Media')) { + $thisfile_video['dataformat'] = 'wmv'; + if ($info['mime_type'] == 'video/x-ms-asf') { + $info['mime_type'] = 'video/x-ms-wmv'; + } + } + break; + + case 2: + if (strstr($this->TrimConvert($streamdata['name']), 'Windows Media')) { + $thisfile_audio['dataformat'] = 'wma'; + if ($info['mime_type'] == 'video/x-ms-asf') { + $info['mime_type'] = 'audio/x-ms-wma'; + } + } + break; + + } + break; + } + } + } + + switch (isset($thisfile_audio['codec']) ? $thisfile_audio['codec'] : '') { + case 'MPEG Layer-3': + $thisfile_audio['dataformat'] = 'mp3'; + break; + + default: + break; + } + + if (isset($thisfile_asf_codeclistobject['codec_entries'])) { + foreach ($thisfile_asf_codeclistobject['codec_entries'] as $streamnumber => $streamdata) { + switch ($streamdata['type_raw']) { + + case 1: // video + $thisfile_video['encoder'] = $this->TrimConvert($thisfile_asf_codeclistobject['codec_entries'][$streamnumber]['name']); + break; + + case 2: // audio + $thisfile_audio['encoder'] = $this->TrimConvert($thisfile_asf_codeclistobject['codec_entries'][$streamnumber]['name']); + + // AH 2003-10-01 + $thisfile_audio['encoder_options'] = $this->TrimConvert($thisfile_asf_codeclistobject['codec_entries'][0]['description']); + + $thisfile_audio['codec'] = $thisfile_audio['encoder']; + break; + + default: + $info['warning'][] = 'Unknown streamtype: [codec_list_object][codec_entries]['.$streamnumber.'][type_raw] == '.$streamdata['type_raw']; + break; + + } + } + } + + if (isset($info['audio'])) { + $thisfile_audio['lossless'] = (isset($thisfile_audio['lossless']) ? $thisfile_audio['lossless'] : false); + $thisfile_audio['dataformat'] = (!empty($thisfile_audio['dataformat']) ? $thisfile_audio['dataformat'] : 'asf'); + } + if (!empty($thisfile_video['dataformat'])) { + $thisfile_video['lossless'] = (isset($thisfile_audio['lossless']) ? $thisfile_audio['lossless'] : false); + $thisfile_video['pixel_aspect_ratio'] = (isset($thisfile_audio['pixel_aspect_ratio']) ? $thisfile_audio['pixel_aspect_ratio'] : (float) 1); + $thisfile_video['dataformat'] = (!empty($thisfile_video['dataformat']) ? $thisfile_video['dataformat'] : 'asf'); + } + if (!empty($thisfile_video['streams'])) { + $thisfile_video['streams']['resolution_x'] = 0; + $thisfile_video['streams']['resolution_y'] = 0; + foreach ($thisfile_video['streams'] as $key => $valuearray) { + if (($valuearray['resolution_x'] > $thisfile_video['streams']['resolution_x']) || ($valuearray['resolution_y'] > $thisfile_video['streams']['resolution_y'])) { + $thisfile_video['resolution_x'] = $valuearray['resolution_x']; + $thisfile_video['resolution_y'] = $valuearray['resolution_y']; + } + } + } + $info['bitrate'] = (isset($thisfile_audio['bitrate']) ? $thisfile_audio['bitrate'] : 0) + (isset($thisfile_video['bitrate']) ? $thisfile_video['bitrate'] : 0); + + if ((!isset($info['playtime_seconds']) || ($info['playtime_seconds'] <= 0)) && ($info['bitrate'] > 0)) { + $info['playtime_seconds'] = ($info['filesize'] - $info['avdataoffset']) / ($info['bitrate'] / 8); + } + + return true; + } + + public static function ASFCodecListObjectTypeLookup($CodecListType) { + static $ASFCodecListObjectTypeLookup = array(); + if (empty($ASFCodecListObjectTypeLookup)) { + $ASFCodecListObjectTypeLookup[0x0001] = 'Video Codec'; + $ASFCodecListObjectTypeLookup[0x0002] = 'Audio Codec'; + $ASFCodecListObjectTypeLookup[0xFFFF] = 'Unknown Codec'; + } + + return (isset($ASFCodecListObjectTypeLookup[$CodecListType]) ? $ASFCodecListObjectTypeLookup[$CodecListType] : 'Invalid Codec Type'); + } + + public static function KnownGUIDs() { + static $GUIDarray = array( + 'GETID3_ASF_Extended_Stream_Properties_Object' => '14E6A5CB-C672-4332-8399-A96952065B5A', + 'GETID3_ASF_Padding_Object' => '1806D474-CADF-4509-A4BA-9AABCB96AAE8', + 'GETID3_ASF_Payload_Ext_Syst_Pixel_Aspect_Ratio' => '1B1EE554-F9EA-4BC8-821A-376B74E4C4B8', + 'GETID3_ASF_Script_Command_Object' => '1EFB1A30-0B62-11D0-A39B-00A0C90348F6', + 'GETID3_ASF_No_Error_Correction' => '20FB5700-5B55-11CF-A8FD-00805F5C442B', + 'GETID3_ASF_Content_Branding_Object' => '2211B3FA-BD23-11D2-B4B7-00A0C955FC6E', + 'GETID3_ASF_Content_Encryption_Object' => '2211B3FB-BD23-11D2-B4B7-00A0C955FC6E', + 'GETID3_ASF_Digital_Signature_Object' => '2211B3FC-BD23-11D2-B4B7-00A0C955FC6E', + 'GETID3_ASF_Extended_Content_Encryption_Object' => '298AE614-2622-4C17-B935-DAE07EE9289C', + 'GETID3_ASF_Simple_Index_Object' => '33000890-E5B1-11CF-89F4-00A0C90349CB', + 'GETID3_ASF_Degradable_JPEG_Media' => '35907DE0-E415-11CF-A917-00805F5C442B', + 'GETID3_ASF_Payload_Extension_System_Timecode' => '399595EC-8667-4E2D-8FDB-98814CE76C1E', + 'GETID3_ASF_Binary_Media' => '3AFB65E2-47EF-40F2-AC2C-70A90D71D343', + 'GETID3_ASF_Timecode_Index_Object' => '3CB73FD0-0C4A-4803-953D-EDF7B6228F0C', + 'GETID3_ASF_Metadata_Library_Object' => '44231C94-9498-49D1-A141-1D134E457054', + 'GETID3_ASF_Reserved_3' => '4B1ACBE3-100B-11D0-A39B-00A0C90348F6', + 'GETID3_ASF_Reserved_4' => '4CFEDB20-75F6-11CF-9C0F-00A0C90349CB', + 'GETID3_ASF_Command_Media' => '59DACFC0-59E6-11D0-A3AC-00A0C90348F6', + 'GETID3_ASF_Header_Extension_Object' => '5FBF03B5-A92E-11CF-8EE3-00C00C205365', + 'GETID3_ASF_Media_Object_Index_Parameters_Obj' => '6B203BAD-3F11-4E84-ACA8-D7613DE2CFA7', + 'GETID3_ASF_Header_Object' => '75B22630-668E-11CF-A6D9-00AA0062CE6C', + 'GETID3_ASF_Content_Description_Object' => '75B22633-668E-11CF-A6D9-00AA0062CE6C', + 'GETID3_ASF_Error_Correction_Object' => '75B22635-668E-11CF-A6D9-00AA0062CE6C', + 'GETID3_ASF_Data_Object' => '75B22636-668E-11CF-A6D9-00AA0062CE6C', + 'GETID3_ASF_Web_Stream_Media_Subtype' => '776257D4-C627-41CB-8F81-7AC7FF1C40CC', + 'GETID3_ASF_Stream_Bitrate_Properties_Object' => '7BF875CE-468D-11D1-8D82-006097C9A2B2', + 'GETID3_ASF_Language_List_Object' => '7C4346A9-EFE0-4BFC-B229-393EDE415C85', + 'GETID3_ASF_Codec_List_Object' => '86D15240-311D-11D0-A3A4-00A0C90348F6', + 'GETID3_ASF_Reserved_2' => '86D15241-311D-11D0-A3A4-00A0C90348F6', + 'GETID3_ASF_File_Properties_Object' => '8CABDCA1-A947-11CF-8EE4-00C00C205365', + 'GETID3_ASF_File_Transfer_Media' => '91BD222C-F21C-497A-8B6D-5AA86BFC0185', + 'GETID3_ASF_Old_RTP_Extension_Data' => '96800C63-4C94-11D1-837B-0080C7A37F95', + 'GETID3_ASF_Advanced_Mutual_Exclusion_Object' => 'A08649CF-4775-4670-8A16-6E35357566CD', + 'GETID3_ASF_Bandwidth_Sharing_Object' => 'A69609E6-517B-11D2-B6AF-00C04FD908E9', + 'GETID3_ASF_Reserved_1' => 'ABD3D211-A9BA-11cf-8EE6-00C00C205365', + 'GETID3_ASF_Bandwidth_Sharing_Exclusive' => 'AF6060AA-5197-11D2-B6AF-00C04FD908E9', + 'GETID3_ASF_Bandwidth_Sharing_Partial' => 'AF6060AB-5197-11D2-B6AF-00C04FD908E9', + 'GETID3_ASF_JFIF_Media' => 'B61BE100-5B4E-11CF-A8FD-00805F5C442B', + 'GETID3_ASF_Stream_Properties_Object' => 'B7DC0791-A9B7-11CF-8EE6-00C00C205365', + 'GETID3_ASF_Video_Media' => 'BC19EFC0-5B4D-11CF-A8FD-00805F5C442B', + 'GETID3_ASF_Audio_Spread' => 'BFC3CD50-618F-11CF-8BB2-00AA00B4E220', + 'GETID3_ASF_Metadata_Object' => 'C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA', + 'GETID3_ASF_Payload_Ext_Syst_Sample_Duration' => 'C6BD9450-867F-4907-83A3-C77921B733AD', + 'GETID3_ASF_Group_Mutual_Exclusion_Object' => 'D1465A40-5A79-4338-B71B-E36B8FD6C249', + 'GETID3_ASF_Extended_Content_Description_Object' => 'D2D0A440-E307-11D2-97F0-00A0C95EA850', + 'GETID3_ASF_Stream_Prioritization_Object' => 'D4FED15B-88D3-454F-81F0-ED5C45999E24', + 'GETID3_ASF_Payload_Ext_System_Content_Type' => 'D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC', + 'GETID3_ASF_Old_File_Properties_Object' => 'D6E229D0-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_ASF_Header_Object' => 'D6E229D1-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_ASF_Data_Object' => 'D6E229D2-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Index_Object' => 'D6E229D3-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Stream_Properties_Object' => 'D6E229D4-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Content_Description_Object' => 'D6E229D5-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Script_Command_Object' => 'D6E229D6-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Marker_Object' => 'D6E229D7-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Component_Download_Object' => 'D6E229D8-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Stream_Group_Object' => 'D6E229D9-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Scalable_Object' => 'D6E229DA-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Prioritization_Object' => 'D6E229DB-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Bitrate_Mutual_Exclusion_Object' => 'D6E229DC-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Inter_Media_Dependency_Object' => 'D6E229DD-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Rating_Object' => 'D6E229DE-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Index_Parameters_Object' => 'D6E229DF-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Color_Table_Object' => 'D6E229E0-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Language_List_Object' => 'D6E229E1-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Audio_Media' => 'D6E229E2-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Video_Media' => 'D6E229E3-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Image_Media' => 'D6E229E4-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Timecode_Media' => 'D6E229E5-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Text_Media' => 'D6E229E6-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_MIDI_Media' => 'D6E229E7-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Command_Media' => 'D6E229E8-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_No_Error_Concealment' => 'D6E229EA-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Scrambled_Audio' => 'D6E229EB-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_No_Color_Table' => 'D6E229EC-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_SMPTE_Time' => 'D6E229ED-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_ASCII_Text' => 'D6E229EE-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Unicode_Text' => 'D6E229EF-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_HTML_Text' => 'D6E229F0-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_URL_Command' => 'D6E229F1-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Filename_Command' => 'D6E229F2-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_ACM_Codec' => 'D6E229F3-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_VCM_Codec' => 'D6E229F4-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_QuickTime_Codec' => 'D6E229F5-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_DirectShow_Transform_Filter' => 'D6E229F6-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_DirectShow_Rendering_Filter' => 'D6E229F7-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_No_Enhancement' => 'D6E229F8-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Unknown_Enhancement_Type' => 'D6E229F9-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Temporal_Enhancement' => 'D6E229FA-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Spatial_Enhancement' => 'D6E229FB-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Quality_Enhancement' => 'D6E229FC-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Number_of_Channels_Enhancement' => 'D6E229FD-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Frequency_Response_Enhancement' => 'D6E229FE-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Media_Object' => 'D6E229FF-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Mutex_Language' => 'D6E22A00-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Mutex_Bitrate' => 'D6E22A01-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Mutex_Unknown' => 'D6E22A02-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_ASF_Placeholder_Object' => 'D6E22A0E-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Old_Data_Unit_Extension_Object' => 'D6E22A0F-35DA-11D1-9034-00A0C90349BE', + 'GETID3_ASF_Web_Stream_Format' => 'DA1E6B13-8359-4050-B398-388E965BF00C', + 'GETID3_ASF_Payload_Ext_System_File_Name' => 'E165EC0E-19ED-45D7-B4A7-25CBD1E28E9B', + 'GETID3_ASF_Marker_Object' => 'F487CD01-A951-11CF-8EE6-00C00C205365', + 'GETID3_ASF_Timecode_Index_Parameters_Object' => 'F55E496D-9797-4B5D-8C8B-604DFE9BFB24', + 'GETID3_ASF_Audio_Media' => 'F8699E40-5B4D-11CF-A8FD-00805F5C442B', + 'GETID3_ASF_Media_Object_Index_Object' => 'FEB103F8-12AD-4C64-840F-2A1D2F7AD48C', + 'GETID3_ASF_Alt_Extended_Content_Encryption_Obj' => 'FF889EF1-ADEE-40DA-9E71-98704BB928CE', + 'GETID3_ASF_Index_Placeholder_Object' => 'D9AADE20-7C17-4F9C-BC28-8555DD98E2A2', // http://cpan.uwinnipeg.ca/htdocs/Audio-WMA/Audio/WMA.pm.html + 'GETID3_ASF_Compatibility_Object' => '26F18B5D-4584-47EC-9F5F-0E651F0452C9', // http://cpan.uwinnipeg.ca/htdocs/Audio-WMA/Audio/WMA.pm.html + ); + return $GUIDarray; + } + + public static function GUIDname($GUIDstring) { + static $GUIDarray = array(); + if (empty($GUIDarray)) { + $GUIDarray = self::KnownGUIDs(); + } + return array_search($GUIDstring, $GUIDarray); + } + + public static function ASFIndexObjectIndexTypeLookup($id) { + static $ASFIndexObjectIndexTypeLookup = array(); + if (empty($ASFIndexObjectIndexTypeLookup)) { + $ASFIndexObjectIndexTypeLookup[1] = 'Nearest Past Data Packet'; + $ASFIndexObjectIndexTypeLookup[2] = 'Nearest Past Media Object'; + $ASFIndexObjectIndexTypeLookup[3] = 'Nearest Past Cleanpoint'; + } + return (isset($ASFIndexObjectIndexTypeLookup[$id]) ? $ASFIndexObjectIndexTypeLookup[$id] : 'invalid'); + } + + public static function GUIDtoBytestring($GUIDstring) { + // Microsoft defines these 16-byte (128-bit) GUIDs in the strangest way: + // first 4 bytes are in little-endian order + // next 2 bytes are appended in little-endian order + // next 2 bytes are appended in little-endian order + // next 2 bytes are appended in big-endian order + // next 6 bytes are appended in big-endian order + + // AaBbCcDd-EeFf-GgHh-IiJj-KkLlMmNnOoPp is stored as this 16-byte string: + // $Dd $Cc $Bb $Aa $Ff $Ee $Hh $Gg $Ii $Jj $Kk $Ll $Mm $Nn $Oo $Pp + + $hexbytecharstring = chr(hexdec(substr($GUIDstring, 6, 2))); + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 4, 2))); + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 2, 2))); + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 0, 2))); + + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 11, 2))); + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 9, 2))); + + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 16, 2))); + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 14, 2))); + + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 19, 2))); + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 21, 2))); + + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 24, 2))); + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 26, 2))); + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 28, 2))); + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 30, 2))); + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 32, 2))); + $hexbytecharstring .= chr(hexdec(substr($GUIDstring, 34, 2))); + + return $hexbytecharstring; + } + + public static function BytestringToGUID($Bytestring) { + $GUIDstring = str_pad(dechex(ord($Bytestring{3})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= str_pad(dechex(ord($Bytestring{2})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= str_pad(dechex(ord($Bytestring{1})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= str_pad(dechex(ord($Bytestring{0})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= '-'; + $GUIDstring .= str_pad(dechex(ord($Bytestring{5})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= str_pad(dechex(ord($Bytestring{4})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= '-'; + $GUIDstring .= str_pad(dechex(ord($Bytestring{7})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= str_pad(dechex(ord($Bytestring{6})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= '-'; + $GUIDstring .= str_pad(dechex(ord($Bytestring{8})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= str_pad(dechex(ord($Bytestring{9})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= '-'; + $GUIDstring .= str_pad(dechex(ord($Bytestring{10})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= str_pad(dechex(ord($Bytestring{11})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= str_pad(dechex(ord($Bytestring{12})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= str_pad(dechex(ord($Bytestring{13})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= str_pad(dechex(ord($Bytestring{14})), 2, '0', STR_PAD_LEFT); + $GUIDstring .= str_pad(dechex(ord($Bytestring{15})), 2, '0', STR_PAD_LEFT); + + return strtoupper($GUIDstring); + } + + public static function FILETIMEtoUNIXtime($FILETIME, $round=true) { + // FILETIME is a 64-bit unsigned integer representing + // the number of 100-nanosecond intervals since January 1, 1601 + // UNIX timestamp is number of seconds since January 1, 1970 + // 116444736000000000 = 10000000 * 60 * 60 * 24 * 365 * 369 + 89 leap days + if ($round) { + return intval(round(($FILETIME - 116444736000000000) / 10000000)); + } + return ($FILETIME - 116444736000000000) / 10000000; + } + + public static function WMpictureTypeLookup($WMpictureType) { + static $WMpictureTypeLookup = array(); + if (empty($WMpictureTypeLookup)) { + $WMpictureTypeLookup[0x03] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Front Cover'); + $WMpictureTypeLookup[0x04] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Back Cover'); + $WMpictureTypeLookup[0x00] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'User Defined'); + $WMpictureTypeLookup[0x05] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Leaflet Page'); + $WMpictureTypeLookup[0x06] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Media Label'); + $WMpictureTypeLookup[0x07] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Lead Artist'); + $WMpictureTypeLookup[0x08] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Artist'); + $WMpictureTypeLookup[0x09] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Conductor'); + $WMpictureTypeLookup[0x0A] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Band'); + $WMpictureTypeLookup[0x0B] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Composer'); + $WMpictureTypeLookup[0x0C] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Lyricist'); + $WMpictureTypeLookup[0x0D] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Recording Location'); + $WMpictureTypeLookup[0x0E] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'During Recording'); + $WMpictureTypeLookup[0x0F] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'During Performance'); + $WMpictureTypeLookup[0x10] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Video Screen Capture'); + $WMpictureTypeLookup[0x12] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Illustration'); + $WMpictureTypeLookup[0x13] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Band Logotype'); + $WMpictureTypeLookup[0x14] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Publisher Logotype'); + } + return (isset($WMpictureTypeLookup[$WMpictureType]) ? $WMpictureTypeLookup[$WMpictureType] : ''); + } + + public function ASF_HeaderExtensionObjectDataParse(&$asf_header_extension_object_data, &$unhandled_sections) { + // http://msdn.microsoft.com/en-us/library/bb643323.aspx + + $offset = 0; + $objectOffset = 0; + $HeaderExtensionObjectParsed = array(); + while ($objectOffset < strlen($asf_header_extension_object_data)) { + $offset = $objectOffset; + $thisObject = array(); + + $thisObject['guid'] = substr($asf_header_extension_object_data, $offset, 16); + $offset += 16; + $thisObject['guid_text'] = $this->BytestringToGUID($thisObject['guid']); + $thisObject['guid_name'] = $this->GUIDname($thisObject['guid_text']); + + $thisObject['size'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 8)); + $offset += 8; + if ($thisObject['size'] <= 0) { + break; + } + + switch ($thisObject['guid']) { + case GETID3_ASF_Extended_Stream_Properties_Object: + $thisObject['start_time'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 8)); + $offset += 8; + $thisObject['start_time_unix'] = $this->FILETIMEtoUNIXtime($thisObject['start_time']); + + $thisObject['end_time'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 8)); + $offset += 8; + $thisObject['end_time_unix'] = $this->FILETIMEtoUNIXtime($thisObject['end_time']); + + $thisObject['data_bitrate'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4)); + $offset += 4; + + $thisObject['buffer_size'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4)); + $offset += 4; + + $thisObject['initial_buffer_fullness'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4)); + $offset += 4; + + $thisObject['alternate_data_bitrate'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4)); + $offset += 4; + + $thisObject['alternate_buffer_size'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4)); + $offset += 4; + + $thisObject['alternate_initial_buffer_fullness'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4)); + $offset += 4; + + $thisObject['maximum_object_size'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4)); + $offset += 4; + + $thisObject['flags_raw'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4)); + $offset += 4; + $thisObject['flags']['reliable'] = (bool) $thisObject['flags_raw'] & 0x00000001; + $thisObject['flags']['seekable'] = (bool) $thisObject['flags_raw'] & 0x00000002; + $thisObject['flags']['no_cleanpoints'] = (bool) $thisObject['flags_raw'] & 0x00000004; + $thisObject['flags']['resend_live_cleanpoints'] = (bool) $thisObject['flags_raw'] & 0x00000008; + + $thisObject['stream_number'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + $thisObject['stream_language_id_index'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + $thisObject['average_time_per_frame'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4)); + $offset += 4; + + $thisObject['stream_name_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + $thisObject['payload_extension_system_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + for ($i = 0; $i < $thisObject['stream_name_count']; $i++) { + $streamName = array(); + + $streamName['language_id_index'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + $streamName['stream_name_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + $streamName['stream_name'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, $streamName['stream_name_length'])); + $offset += $streamName['stream_name_length']; + + $thisObject['stream_names'][$i] = $streamName; + } + + for ($i = 0; $i < $thisObject['payload_extension_system_count']; $i++) { + $payloadExtensionSystem = array(); + + $payloadExtensionSystem['extension_system_id'] = substr($asf_header_extension_object_data, $offset, 16); + $offset += 16; + $payloadExtensionSystem['extension_system_id_text'] = $this->BytestringToGUID($payloadExtensionSystem['extension_system_id']); + + $payloadExtensionSystem['extension_system_size'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + if ($payloadExtensionSystem['extension_system_size'] <= 0) { + break 2; + } + + $payloadExtensionSystem['extension_system_info_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4)); + $offset += 4; + + $payloadExtensionSystem['extension_system_info_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, $payloadExtensionSystem['extension_system_info_length'])); + $offset += $payloadExtensionSystem['extension_system_info_length']; + + $thisObject['payload_extension_systems'][$i] = $payloadExtensionSystem; + } + + break; + + case GETID3_ASF_Padding_Object: + // padding, skip it + break; + + case GETID3_ASF_Metadata_Object: + $thisObject['description_record_counts'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + for ($i = 0; $i < $thisObject['description_record_counts']; $i++) { + $descriptionRecord = array(); + + $descriptionRecord['reserved_1'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); // must be zero + $offset += 2; + + $descriptionRecord['stream_number'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + $descriptionRecord['name_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + $descriptionRecord['data_type'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + $descriptionRecord['data_type_text'] = $this->ASFmetadataLibraryObjectDataTypeLookup($descriptionRecord['data_type']); + + $descriptionRecord['data_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4)); + $offset += 4; + + $descriptionRecord['name'] = substr($asf_header_extension_object_data, $offset, $descriptionRecord['name_length']); + $offset += $descriptionRecord['name_length']; + + $descriptionRecord['data'] = substr($asf_header_extension_object_data, $offset, $descriptionRecord['data_length']); + $offset += $descriptionRecord['data_length']; + switch ($descriptionRecord['data_type']) { + case 0x0000: // Unicode string + break; + + case 0x0001: // BYTE array + // do nothing + break; + + case 0x0002: // BOOL + $descriptionRecord['data'] = (bool) getid3_lib::LittleEndian2Int($descriptionRecord['data']); + break; + + case 0x0003: // DWORD + case 0x0004: // QWORD + case 0x0005: // WORD + $descriptionRecord['data'] = getid3_lib::LittleEndian2Int($descriptionRecord['data']); + break; + + case 0x0006: // GUID + $descriptionRecord['data_text'] = $this->BytestringToGUID($descriptionRecord['data']); + break; + } + + $thisObject['description_record'][$i] = $descriptionRecord; + } + break; + + case GETID3_ASF_Language_List_Object: + $thisObject['language_id_record_counts'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + for ($i = 0; $i < $thisObject['language_id_record_counts']; $i++) { + $languageIDrecord = array(); + + $languageIDrecord['language_id_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 1)); + $offset += 1; + + $languageIDrecord['language_id'] = substr($asf_header_extension_object_data, $offset, $languageIDrecord['language_id_length']); + $offset += $languageIDrecord['language_id_length']; + + $thisObject['language_id_record'][$i] = $languageIDrecord; + } + break; + + case GETID3_ASF_Metadata_Library_Object: + $thisObject['description_records_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + for ($i = 0; $i < $thisObject['description_records_count']; $i++) { + $descriptionRecord = array(); + + $descriptionRecord['language_list_index'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + $descriptionRecord['stream_number'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + $descriptionRecord['name_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + + $descriptionRecord['data_type'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2)); + $offset += 2; + $descriptionRecord['data_type_text'] = $this->ASFmetadataLibraryObjectDataTypeLookup($descriptionRecord['data_type']); + + $descriptionRecord['data_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4)); + $offset += 4; + + $descriptionRecord['name'] = substr($asf_header_extension_object_data, $offset, $descriptionRecord['name_length']); + $offset += $descriptionRecord['name_length']; + + $descriptionRecord['data'] = substr($asf_header_extension_object_data, $offset, $descriptionRecord['data_length']); + $offset += $descriptionRecord['data_length']; + + if (preg_match('#^WM/Picture$#', str_replace("\x00", '', trim($descriptionRecord['name'])))) { + $WMpicture = $this->ASF_WMpicture($descriptionRecord['data']); + foreach ($WMpicture as $key => $value) { + $descriptionRecord['data'] = $WMpicture; + } + unset($WMpicture); + } + + $thisObject['description_record'][$i] = $descriptionRecord; + } + break; + + default: + $unhandled_sections++; + if ($this->GUIDname($thisObject['guid_text'])) { + $this->getid3->info['warning'][] = 'unhandled Header Extension Object GUID "'.$this->GUIDname($thisObject['guid_text']).'" {'.$thisObject['guid_text'].'} at offset '.($offset - 16 - 8); + } else { + $this->getid3->info['warning'][] = 'unknown Header Extension Object GUID {'.$thisObject['guid_text'].'} in at offset '.($offset - 16 - 8); + } + break; + } + $HeaderExtensionObjectParsed[] = $thisObject; + + $objectOffset += $thisObject['size']; + } + return $HeaderExtensionObjectParsed; + } + + + public static function ASFmetadataLibraryObjectDataTypeLookup($id) { + static $ASFmetadataLibraryObjectDataTypeLookup = array( + 0x0000 => 'Unicode string', // The data consists of a sequence of Unicode characters + 0x0001 => 'BYTE array', // The type of the data is implementation-specific + 0x0002 => 'BOOL', // The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer. Only 0x0000 or 0x0001 are permitted values + 0x0003 => 'DWORD', // The data is 4 bytes long and should be interpreted as a 32-bit unsigned integer + 0x0004 => 'QWORD', // The data is 8 bytes long and should be interpreted as a 64-bit unsigned integer + 0x0005 => 'WORD', // The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer + 0x0006 => 'GUID', // The data is 16 bytes long and should be interpreted as a 128-bit GUID + ); + return (isset($ASFmetadataLibraryObjectDataTypeLookup[$id]) ? $ASFmetadataLibraryObjectDataTypeLookup[$id] : 'invalid'); + } + + public function ASF_WMpicture(&$data) { + //typedef struct _WMPicture{ + // LPWSTR pwszMIMEType; + // BYTE bPictureType; + // LPWSTR pwszDescription; + // DWORD dwDataLen; + // BYTE* pbData; + //} WM_PICTURE; + + $WMpicture = array(); + + $offset = 0; + $WMpicture['image_type_id'] = getid3_lib::LittleEndian2Int(substr($data, $offset, 1)); + $offset += 1; + $WMpicture['image_type'] = $this->WMpictureTypeLookup($WMpicture['image_type_id']); + $WMpicture['image_size'] = getid3_lib::LittleEndian2Int(substr($data, $offset, 4)); + $offset += 4; + + $WMpicture['image_mime'] = ''; + do { + $next_byte_pair = substr($data, $offset, 2); + $offset += 2; + $WMpicture['image_mime'] .= $next_byte_pair; + } while ($next_byte_pair !== "\x00\x00"); + + $WMpicture['image_description'] = ''; + do { + $next_byte_pair = substr($data, $offset, 2); + $offset += 2; + $WMpicture['image_description'] .= $next_byte_pair; + } while ($next_byte_pair !== "\x00\x00"); + + $WMpicture['dataoffset'] = $offset; + $WMpicture['data'] = substr($data, $offset); + + $imageinfo = array(); + $WMpicture['image_mime'] = ''; + $imagechunkcheck = getid3_lib::GetDataImageSize($WMpicture['data'], $imageinfo); + unset($imageinfo); + if (!empty($imagechunkcheck)) { + $WMpicture['image_mime'] = image_type_to_mime_type($imagechunkcheck[2]); + } + if (!isset($this->getid3->info['asf']['comments']['picture'])) { + $this->getid3->info['asf']['comments']['picture'] = array(); + } + $this->getid3->info['asf']['comments']['picture'][] = array('data'=>$WMpicture['data'], 'image_mime'=>$WMpicture['image_mime']); + + return $WMpicture; + } + + + // Remove terminator 00 00 and convert UTF-16LE to Latin-1 + public static function TrimConvert($string) { + return trim(getid3_lib::iconv_fallback('UTF-16LE', 'ISO-8859-1', self::TrimTerm($string)), ' '); + } + + + // Remove terminator 00 00 + public static function TrimTerm($string) { + // remove terminator, only if present (it should be, but...) + if (substr($string, -2) === "\x00\x00") { + $string = substr($string, 0, -2); + } + return $string; + } + +} diff --git a/src/wp-includes/ID3/module.audio-video.flv.php b/src/wp-includes/ID3/module.audio-video.flv.php new file mode 100644 index 0000000..f9c4cf3 --- /dev/null +++ b/src/wp-includes/ID3/module.audio-video.flv.php @@ -0,0 +1,729 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +// // +// FLV module by Seth Kaufman // +// // +// * version 0.1 (26 June 2005) // +// // +// // +// * version 0.1.1 (15 July 2005) // +// minor modifications by James Heinrich // +// // +// * version 0.2 (22 February 2006) // +// Support for On2 VP6 codec and meta information // +// by Steve Webster // +// // +// * version 0.3 (15 June 2006) // +// Modified to not read entire file into memory // +// by James Heinrich // +// // +// * version 0.4 (07 December 2007) // +// Bugfixes for incorrectly parsed FLV dimensions // +// and incorrect parsing of onMetaTag // +// by Evgeny Moysevich // +// // +// * version 0.5 (21 May 2009) // +// Fixed parsing of audio tags and added additional codec // +// details. The duration is now read from onMetaTag (if // +// exists), rather than parsing whole file // +// by Nigel Barnes // +// // +// * version 0.6 (24 May 2009) // +// Better parsing of files with h264 video // +// by Evgeny Moysevich // +// // +// * version 0.6.1 (30 May 2011) // +// prevent infinite loops in expGolombUe() // +// // +///////////////////////////////////////////////////////////////// +// // +// module.audio-video.flv.php // +// module for analyzing Shockwave Flash Video files // +// dependencies: NONE // +// /// +///////////////////////////////////////////////////////////////// + +define('GETID3_FLV_TAG_AUDIO', 8); +define('GETID3_FLV_TAG_VIDEO', 9); +define('GETID3_FLV_TAG_META', 18); + +define('GETID3_FLV_VIDEO_H263', 2); +define('GETID3_FLV_VIDEO_SCREEN', 3); +define('GETID3_FLV_VIDEO_VP6FLV', 4); +define('GETID3_FLV_VIDEO_VP6FLV_ALPHA', 5); +define('GETID3_FLV_VIDEO_SCREENV2', 6); +define('GETID3_FLV_VIDEO_H264', 7); + +define('H264_AVC_SEQUENCE_HEADER', 0); +define('H264_PROFILE_BASELINE', 66); +define('H264_PROFILE_MAIN', 77); +define('H264_PROFILE_EXTENDED', 88); +define('H264_PROFILE_HIGH', 100); +define('H264_PROFILE_HIGH10', 110); +define('H264_PROFILE_HIGH422', 122); +define('H264_PROFILE_HIGH444', 144); +define('H264_PROFILE_HIGH444_PREDICTIVE', 244); + +class getid3_flv extends getid3_handler +{ + public $max_frames = 100000; // break out of the loop if too many frames have been scanned; only scan this many if meta frame does not contain useful duration + + public function Analyze() { + $info = &$this->getid3->info; + + fseek($this->getid3->fp, $info['avdataoffset'], SEEK_SET); + + $FLVdataLength = $info['avdataend'] - $info['avdataoffset']; + $FLVheader = fread($this->getid3->fp, 5); + + $info['fileformat'] = 'flv'; + $info['flv']['header']['signature'] = substr($FLVheader, 0, 3); + $info['flv']['header']['version'] = getid3_lib::BigEndian2Int(substr($FLVheader, 3, 1)); + $TypeFlags = getid3_lib::BigEndian2Int(substr($FLVheader, 4, 1)); + + $magic = 'FLV'; + if ($info['flv']['header']['signature'] != $magic) { + $info['error'][] = 'Expecting "'.getid3_lib::PrintHexBytes($magic).'" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes($info['flv']['header']['signature']).'"'; + unset($info['flv']); + unset($info['fileformat']); + return false; + } + + $info['flv']['header']['hasAudio'] = (bool) ($TypeFlags & 0x04); + $info['flv']['header']['hasVideo'] = (bool) ($TypeFlags & 0x01); + + $FrameSizeDataLength = getid3_lib::BigEndian2Int(fread($this->getid3->fp, 4)); + $FLVheaderFrameLength = 9; + if ($FrameSizeDataLength > $FLVheaderFrameLength) { + fseek($this->getid3->fp, $FrameSizeDataLength - $FLVheaderFrameLength, SEEK_CUR); + } + $Duration = 0; + $found_video = false; + $found_audio = false; + $found_meta = false; + $found_valid_meta_playtime = false; + $tagParseCount = 0; + $info['flv']['framecount'] = array('total'=>0, 'audio'=>0, 'video'=>0); + $flv_framecount = &$info['flv']['framecount']; + while (((ftell($this->getid3->fp) + 16) < $info['avdataend']) && (($tagParseCount++ <= $this->max_frames) || !$found_valid_meta_playtime)) { + $ThisTagHeader = fread($this->getid3->fp, 16); + + $PreviousTagLength = getid3_lib::BigEndian2Int(substr($ThisTagHeader, 0, 4)); + $TagType = getid3_lib::BigEndian2Int(substr($ThisTagHeader, 4, 1)); + $DataLength = getid3_lib::BigEndian2Int(substr($ThisTagHeader, 5, 3)); + $Timestamp = getid3_lib::BigEndian2Int(substr($ThisTagHeader, 8, 3)); + $LastHeaderByte = getid3_lib::BigEndian2Int(substr($ThisTagHeader, 15, 1)); + $NextOffset = ftell($this->getid3->fp) - 1 + $DataLength; + if ($Timestamp > $Duration) { + $Duration = $Timestamp; + } + + $flv_framecount['total']++; + switch ($TagType) { + case GETID3_FLV_TAG_AUDIO: + $flv_framecount['audio']++; + if (!$found_audio) { + $found_audio = true; + $info['flv']['audio']['audioFormat'] = ($LastHeaderByte >> 4) & 0x0F; + $info['flv']['audio']['audioRate'] = ($LastHeaderByte >> 2) & 0x03; + $info['flv']['audio']['audioSampleSize'] = ($LastHeaderByte >> 1) & 0x01; + $info['flv']['audio']['audioType'] = $LastHeaderByte & 0x01; + } + break; + + case GETID3_FLV_TAG_VIDEO: + $flv_framecount['video']++; + if (!$found_video) { + $found_video = true; + $info['flv']['video']['videoCodec'] = $LastHeaderByte & 0x07; + + $FLVvideoHeader = fread($this->getid3->fp, 11); + + if ($info['flv']['video']['videoCodec'] == GETID3_FLV_VIDEO_H264) { + // this code block contributed by: moysevichØgmail*com + + $AVCPacketType = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 0, 1)); + if ($AVCPacketType == H264_AVC_SEQUENCE_HEADER) { + // read AVCDecoderConfigurationRecord + $configurationVersion = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 4, 1)); + $AVCProfileIndication = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 5, 1)); + $profile_compatibility = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 1)); + $lengthSizeMinusOne = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 7, 1)); + $numOfSequenceParameterSets = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 8, 1)); + + if (($numOfSequenceParameterSets & 0x1F) != 0) { + // there is at least one SequenceParameterSet + // read size of the first SequenceParameterSet + //$spsSize = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 9, 2)); + $spsSize = getid3_lib::LittleEndian2Int(substr($FLVvideoHeader, 9, 2)); + // read the first SequenceParameterSet + $sps = fread($this->getid3->fp, $spsSize); + if (strlen($sps) == $spsSize) { // make sure that whole SequenceParameterSet was red + $spsReader = new AVCSequenceParameterSetReader($sps); + $spsReader->readData(); + $info['video']['resolution_x'] = $spsReader->getWidth(); + $info['video']['resolution_y'] = $spsReader->getHeight(); + } + } + } + // end: moysevichØgmail*com + + } elseif ($info['flv']['video']['videoCodec'] == GETID3_FLV_VIDEO_H263) { + + $PictureSizeType = (getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 3, 2))) >> 7; + $PictureSizeType = $PictureSizeType & 0x0007; + $info['flv']['header']['videoSizeType'] = $PictureSizeType; + switch ($PictureSizeType) { + case 0: + //$PictureSizeEnc = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 5, 2)); + //$PictureSizeEnc <<= 1; + //$info['video']['resolution_x'] = ($PictureSizeEnc & 0xFF00) >> 8; + //$PictureSizeEnc = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 2)); + //$PictureSizeEnc <<= 1; + //$info['video']['resolution_y'] = ($PictureSizeEnc & 0xFF00) >> 8; + + $PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 4, 2)); + $PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 5, 2)); + $PictureSizeEnc['x'] >>= 7; + $PictureSizeEnc['y'] >>= 7; + $info['video']['resolution_x'] = $PictureSizeEnc['x'] & 0xFF; + $info['video']['resolution_y'] = $PictureSizeEnc['y'] & 0xFF; + break; + + case 1: + $PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 4, 3)); + $PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 3)); + $PictureSizeEnc['x'] >>= 7; + $PictureSizeEnc['y'] >>= 7; + $info['video']['resolution_x'] = $PictureSizeEnc['x'] & 0xFFFF; + $info['video']['resolution_y'] = $PictureSizeEnc['y'] & 0xFFFF; + break; + + case 2: + $info['video']['resolution_x'] = 352; + $info['video']['resolution_y'] = 288; + break; + + case 3: + $info['video']['resolution_x'] = 176; + $info['video']['resolution_y'] = 144; + break; + + case 4: + $info['video']['resolution_x'] = 128; + $info['video']['resolution_y'] = 96; + break; + + case 5: + $info['video']['resolution_x'] = 320; + $info['video']['resolution_y'] = 240; + break; + + case 6: + $info['video']['resolution_x'] = 160; + $info['video']['resolution_y'] = 120; + break; + + default: + $info['video']['resolution_x'] = 0; + $info['video']['resolution_y'] = 0; + break; + + } + } + $info['video']['pixel_aspect_ratio'] = $info['video']['resolution_x'] / $info['video']['resolution_y']; + } + break; + + // Meta tag + case GETID3_FLV_TAG_META: + if (!$found_meta) { + $found_meta = true; + fseek($this->getid3->fp, -1, SEEK_CUR); + $datachunk = fread($this->getid3->fp, $DataLength); + $AMFstream = new AMFStream($datachunk); + $reader = new AMFReader($AMFstream); + $eventName = $reader->readData(); + $info['flv']['meta'][$eventName] = $reader->readData(); + unset($reader); + + $copykeys = array('framerate'=>'frame_rate', 'width'=>'resolution_x', 'height'=>'resolution_y', 'audiodatarate'=>'bitrate', 'videodatarate'=>'bitrate'); + foreach ($copykeys as $sourcekey => $destkey) { + if (isset($info['flv']['meta']['onMetaData'][$sourcekey])) { + switch ($sourcekey) { + case 'width': + case 'height': + $info['video'][$destkey] = intval(round($info['flv']['meta']['onMetaData'][$sourcekey])); + break; + case 'audiodatarate': + $info['audio'][$destkey] = getid3_lib::CastAsInt(round($info['flv']['meta']['onMetaData'][$sourcekey] * 1000)); + break; + case 'videodatarate': + case 'frame_rate': + default: + $info['video'][$destkey] = $info['flv']['meta']['onMetaData'][$sourcekey]; + break; + } + } + } + if (!empty($info['flv']['meta']['onMetaData']['duration'])) { + $found_valid_meta_playtime = true; + } + } + break; + + default: + // noop + break; + } + fseek($this->getid3->fp, $NextOffset, SEEK_SET); + } + + $info['playtime_seconds'] = $Duration / 1000; + if ($info['playtime_seconds'] > 0) { + $info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds']; + } + + if ($info['flv']['header']['hasAudio']) { + $info['audio']['codec'] = $this->FLVaudioFormat($info['flv']['audio']['audioFormat']); + $info['audio']['sample_rate'] = $this->FLVaudioRate($info['flv']['audio']['audioRate']); + $info['audio']['bits_per_sample'] = $this->FLVaudioBitDepth($info['flv']['audio']['audioSampleSize']); + + $info['audio']['channels'] = $info['flv']['audio']['audioType'] + 1; // 0=mono,1=stereo + $info['audio']['lossless'] = ($info['flv']['audio']['audioFormat'] ? false : true); // 0=uncompressed + $info['audio']['dataformat'] = 'flv'; + } + if (!empty($info['flv']['header']['hasVideo'])) { + $info['video']['codec'] = $this->FLVvideoCodec($info['flv']['video']['videoCodec']); + $info['video']['dataformat'] = 'flv'; + $info['video']['lossless'] = false; + } + + // Set information from meta + if (!empty($info['flv']['meta']['onMetaData']['duration'])) { + $info['playtime_seconds'] = $info['flv']['meta']['onMetaData']['duration']; + $info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds']; + } + if (isset($info['flv']['meta']['onMetaData']['audiocodecid'])) { + $info['audio']['codec'] = $this->FLVaudioFormat($info['flv']['meta']['onMetaData']['audiocodecid']); + } + if (isset($info['flv']['meta']['onMetaData']['videocodecid'])) { + $info['video']['codec'] = $this->FLVvideoCodec($info['flv']['meta']['onMetaData']['videocodecid']); + } + return true; + } + + + public function FLVaudioFormat($id) { + $FLVaudioFormat = array( + 0 => 'Linear PCM, platform endian', + 1 => 'ADPCM', + 2 => 'mp3', + 3 => 'Linear PCM, little endian', + 4 => 'Nellymoser 16kHz mono', + 5 => 'Nellymoser 8kHz mono', + 6 => 'Nellymoser', + 7 => 'G.711A-law logarithmic PCM', + 8 => 'G.711 mu-law logarithmic PCM', + 9 => 'reserved', + 10 => 'AAC', + 11 => false, // unknown? + 12 => false, // unknown? + 13 => false, // unknown? + 14 => 'mp3 8kHz', + 15 => 'Device-specific sound', + ); + return (isset($FLVaudioFormat[$id]) ? $FLVaudioFormat[$id] : false); + } + + public function FLVaudioRate($id) { + $FLVaudioRate = array( + 0 => 5500, + 1 => 11025, + 2 => 22050, + 3 => 44100, + ); + return (isset($FLVaudioRate[$id]) ? $FLVaudioRate[$id] : false); + } + + public function FLVaudioBitDepth($id) { + $FLVaudioBitDepth = array( + 0 => 8, + 1 => 16, + ); + return (isset($FLVaudioBitDepth[$id]) ? $FLVaudioBitDepth[$id] : false); + } + + public function FLVvideoCodec($id) { + $FLVvideoCodec = array( + GETID3_FLV_VIDEO_H263 => 'Sorenson H.263', + GETID3_FLV_VIDEO_SCREEN => 'Screen video', + GETID3_FLV_VIDEO_VP6FLV => 'On2 VP6', + GETID3_FLV_VIDEO_VP6FLV_ALPHA => 'On2 VP6 with alpha channel', + GETID3_FLV_VIDEO_SCREENV2 => 'Screen video v2', + GETID3_FLV_VIDEO_H264 => 'Sorenson H.264', + ); + return (isset($FLVvideoCodec[$id]) ? $FLVvideoCodec[$id] : false); + } +} + +class AMFStream { + public $bytes; + public $pos; + + public function AMFStream(&$bytes) { + $this->bytes =& $bytes; + $this->pos = 0; + } + + public function readByte() { + return getid3_lib::BigEndian2Int(substr($this->bytes, $this->pos++, 1)); + } + + public function readInt() { + return ($this->readByte() << 8) + $this->readByte(); + } + + public function readLong() { + return ($this->readByte() << 24) + ($this->readByte() << 16) + ($this->readByte() << 8) + $this->readByte(); + } + + public function readDouble() { + return getid3_lib::BigEndian2Float($this->read(8)); + } + + public function readUTF() { + $length = $this->readInt(); + return $this->read($length); + } + + public function readLongUTF() { + $length = $this->readLong(); + return $this->read($length); + } + + public function read($length) { + $val = substr($this->bytes, $this->pos, $length); + $this->pos += $length; + return $val; + } + + public function peekByte() { + $pos = $this->pos; + $val = $this->readByte(); + $this->pos = $pos; + return $val; + } + + public function peekInt() { + $pos = $this->pos; + $val = $this->readInt(); + $this->pos = $pos; + return $val; + } + + public function peekLong() { + $pos = $this->pos; + $val = $this->readLong(); + $this->pos = $pos; + return $val; + } + + public function peekDouble() { + $pos = $this->pos; + $val = $this->readDouble(); + $this->pos = $pos; + return $val; + } + + public function peekUTF() { + $pos = $this->pos; + $val = $this->readUTF(); + $this->pos = $pos; + return $val; + } + + public function peekLongUTF() { + $pos = $this->pos; + $val = $this->readLongUTF(); + $this->pos = $pos; + return $val; + } +} + +class AMFReader { + public $stream; + + public function AMFReader(&$stream) { + $this->stream =& $stream; + } + + public function readData() { + $value = null; + + $type = $this->stream->readByte(); + switch ($type) { + + // Double + case 0: + $value = $this->readDouble(); + break; + + // Boolean + case 1: + $value = $this->readBoolean(); + break; + + // String + case 2: + $value = $this->readString(); + break; + + // Object + case 3: + $value = $this->readObject(); + break; + + // null + case 6: + return null; + break; + + // Mixed array + case 8: + $value = $this->readMixedArray(); + break; + + // Array + case 10: + $value = $this->readArray(); + break; + + // Date + case 11: + $value = $this->readDate(); + break; + + // Long string + case 13: + $value = $this->readLongString(); + break; + + // XML (handled as string) + case 15: + $value = $this->readXML(); + break; + + // Typed object (handled as object) + case 16: + $value = $this->readTypedObject(); + break; + + // Long string + default: + $value = '(unknown or unsupported data type)'; + break; + } + + return $value; + } + + public function readDouble() { + return $this->stream->readDouble(); + } + + public function readBoolean() { + return $this->stream->readByte() == 1; + } + + public function readString() { + return $this->stream->readUTF(); + } + + public function readObject() { + // Get highest numerical index - ignored +// $highestIndex = $this->stream->readLong(); + + $data = array(); + + while ($key = $this->stream->readUTF()) { + $data[$key] = $this->readData(); + } + // Mixed array record ends with empty string (0x00 0x00) and 0x09 + if (($key == '') && ($this->stream->peekByte() == 0x09)) { + // Consume byte + $this->stream->readByte(); + } + return $data; + } + + public function readMixedArray() { + // Get highest numerical index - ignored + $highestIndex = $this->stream->readLong(); + + $data = array(); + + while ($key = $this->stream->readUTF()) { + if (is_numeric($key)) { + $key = (float) $key; + } + $data[$key] = $this->readData(); + } + // Mixed array record ends with empty string (0x00 0x00) and 0x09 + if (($key == '') && ($this->stream->peekByte() == 0x09)) { + // Consume byte + $this->stream->readByte(); + } + + return $data; + } + + public function readArray() { + $length = $this->stream->readLong(); + $data = array(); + + for ($i = 0; $i < $length; $i++) { + $data[] = $this->readData(); + } + return $data; + } + + public function readDate() { + $timestamp = $this->stream->readDouble(); + $timezone = $this->stream->readInt(); + return $timestamp; + } + + public function readLongString() { + return $this->stream->readLongUTF(); + } + + public function readXML() { + return $this->stream->readLongUTF(); + } + + public function readTypedObject() { + $className = $this->stream->readUTF(); + return $this->readObject(); + } +} + +class AVCSequenceParameterSetReader { + public $sps; + public $start = 0; + public $currentBytes = 0; + public $currentBits = 0; + public $width; + public $height; + + public function AVCSequenceParameterSetReader($sps) { + $this->sps = $sps; + } + + public function readData() { + $this->skipBits(8); + $this->skipBits(8); + $profile = $this->getBits(8); // read profile + $this->skipBits(16); + $this->expGolombUe(); // read sps id + if (in_array($profile, array(H264_PROFILE_HIGH, H264_PROFILE_HIGH10, H264_PROFILE_HIGH422, H264_PROFILE_HIGH444, H264_PROFILE_HIGH444_PREDICTIVE))) { + if ($this->expGolombUe() == 3) { + $this->skipBits(1); + } + $this->expGolombUe(); + $this->expGolombUe(); + $this->skipBits(1); + if ($this->getBit()) { + for ($i = 0; $i < 8; $i++) { + if ($this->getBit()) { + $size = $i < 6 ? 16 : 64; + $lastScale = 8; + $nextScale = 8; + for ($j = 0; $j < $size; $j++) { + if ($nextScale != 0) { + $deltaScale = $this->expGolombUe(); + $nextScale = ($lastScale + $deltaScale + 256) % 256; + } + if ($nextScale != 0) { + $lastScale = $nextScale; + } + } + } + } + } + } + $this->expGolombUe(); + $pocType = $this->expGolombUe(); + if ($pocType == 0) { + $this->expGolombUe(); + } elseif ($pocType == 1) { + $this->skipBits(1); + $this->expGolombSe(); + $this->expGolombSe(); + $pocCycleLength = $this->expGolombUe(); + for ($i = 0; $i < $pocCycleLength; $i++) { + $this->expGolombSe(); + } + } + $this->expGolombUe(); + $this->skipBits(1); + $this->width = ($this->expGolombUe() + 1) * 16; + $heightMap = $this->expGolombUe() + 1; + $this->height = (2 - $this->getBit()) * $heightMap * 16; + } + + public function skipBits($bits) { + $newBits = $this->currentBits + $bits; + $this->currentBytes += (int)floor($newBits / 8); + $this->currentBits = $newBits % 8; + } + + public function getBit() { + $result = (getid3_lib::BigEndian2Int(substr($this->sps, $this->currentBytes, 1)) >> (7 - $this->currentBits)) & 0x01; + $this->skipBits(1); + return $result; + } + + public function getBits($bits) { + $result = 0; + for ($i = 0; $i < $bits; $i++) { + $result = ($result << 1) + $this->getBit(); + } + return $result; + } + + public function expGolombUe() { + $significantBits = 0; + $bit = $this->getBit(); + while ($bit == 0) { + $significantBits++; + $bit = $this->getBit(); + + if ($significantBits > 31) { + // something is broken, this is an emergency escape to prevent infinite loops + return 0; + } + } + return (1 << $significantBits) + $this->getBits($significantBits) - 1; + } + + public function expGolombSe() { + $result = $this->expGolombUe(); + if (($result & 0x01) == 0) { + return -($result >> 1); + } else { + return ($result + 1) >> 1; + } + } + + public function getWidth() { + return $this->width; + } + + public function getHeight() { + return $this->height; + } +} diff --git a/src/wp-includes/ID3/module.audio-video.matroska.php b/src/wp-includes/ID3/module.audio-video.matroska.php new file mode 100644 index 0000000..fb0af72 --- /dev/null +++ b/src/wp-includes/ID3/module.audio-video.matroska.php @@ -0,0 +1,1765 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +// // +// module.audio-video.matriska.php // +// module for analyzing Matroska containers // +// dependencies: NONE // +// /// +///////////////////////////////////////////////////////////////// + + +define('EBML_ID_CHAPTERS', 0x0043A770); // [10][43][A7][70] -- A system to define basic menus and partition data. For more detailed information, look at the Chapters Explanation. +define('EBML_ID_SEEKHEAD', 0x014D9B74); // [11][4D][9B][74] -- Contains the position of other level 1 elements. +define('EBML_ID_TAGS', 0x0254C367); // [12][54][C3][67] -- Element containing elements specific to Tracks/Chapters. A list of valid tags can be found . +define('EBML_ID_INFO', 0x0549A966); // [15][49][A9][66] -- Contains miscellaneous general information and statistics on the file. +define('EBML_ID_TRACKS', 0x0654AE6B); // [16][54][AE][6B] -- A top-level block of information with many tracks described. +define('EBML_ID_SEGMENT', 0x08538067); // [18][53][80][67] -- This element contains all other top-level (level 1) elements. Typically a Matroska file is composed of 1 segment. +define('EBML_ID_ATTACHMENTS', 0x0941A469); // [19][41][A4][69] -- Contain attached files. +define('EBML_ID_EBML', 0x0A45DFA3); // [1A][45][DF][A3] -- Set the EBML characteristics of the data to follow. Each EBML document has to start with this. +define('EBML_ID_CUES', 0x0C53BB6B); // [1C][53][BB][6B] -- A top-level element to speed seeking access. All entries are local to the segment. +define('EBML_ID_CLUSTER', 0x0F43B675); // [1F][43][B6][75] -- The lower level element containing the (monolithic) Block structure. +define('EBML_ID_LANGUAGE', 0x02B59C); // [22][B5][9C] -- Specifies the language of the track in the Matroska languages form. +define('EBML_ID_TRACKTIMECODESCALE', 0x03314F); // [23][31][4F] -- The scale to apply on this track to work at normal speed in relation with other tracks (mostly used to adjust video speed when the audio length differs). +define('EBML_ID_DEFAULTDURATION', 0x03E383); // [23][E3][83] -- Number of nanoseconds (i.e. not scaled) per frame. +define('EBML_ID_CODECNAME', 0x058688); // [25][86][88] -- A human-readable string specifying the codec. +define('EBML_ID_CODECDOWNLOADURL', 0x06B240); // [26][B2][40] -- A URL to download about the codec used. +define('EBML_ID_TIMECODESCALE', 0x0AD7B1); // [2A][D7][B1] -- Timecode scale in nanoseconds (1.000.000 means all timecodes in the segment are expressed in milliseconds). +define('EBML_ID_COLOURSPACE', 0x0EB524); // [2E][B5][24] -- Same value as in AVI (32 bits). +define('EBML_ID_GAMMAVALUE', 0x0FB523); // [2F][B5][23] -- Gamma Value. +define('EBML_ID_CODECSETTINGS', 0x1A9697); // [3A][96][97] -- A string describing the encoding setting used. +define('EBML_ID_CODECINFOURL', 0x1B4040); // [3B][40][40] -- A URL to find information about the codec used. +define('EBML_ID_PREVFILENAME', 0x1C83AB); // [3C][83][AB] -- An escaped filename corresponding to the previous segment. +define('EBML_ID_PREVUID', 0x1CB923); // [3C][B9][23] -- A unique ID to identify the previous chained segment (128 bits). +define('EBML_ID_NEXTFILENAME', 0x1E83BB); // [3E][83][BB] -- An escaped filename corresponding to the next segment. +define('EBML_ID_NEXTUID', 0x1EB923); // [3E][B9][23] -- A unique ID to identify the next chained segment (128 bits). +define('EBML_ID_CONTENTCOMPALGO', 0x0254); // [42][54] -- The compression algorithm used. Algorithms that have been specified so far are: +define('EBML_ID_CONTENTCOMPSETTINGS', 0x0255); // [42][55] -- Settings that might be needed by the decompressor. For Header Stripping (ContentCompAlgo=3), the bytes that were removed from the beggining of each frames of the track. +define('EBML_ID_DOCTYPE', 0x0282); // [42][82] -- A string that describes the type of document that follows this EBML header ('matroska' in our case). +define('EBML_ID_DOCTYPEREADVERSION', 0x0285); // [42][85] -- The minimum DocType version an interpreter has to support to read this file. +define('EBML_ID_EBMLVERSION', 0x0286); // [42][86] -- The version of EBML parser used to create the file. +define('EBML_ID_DOCTYPEVERSION', 0x0287); // [42][87] -- The version of DocType interpreter used to create the file. +define('EBML_ID_EBMLMAXIDLENGTH', 0x02F2); // [42][F2] -- The maximum length of the IDs you'll find in this file (4 or less in Matroska). +define('EBML_ID_EBMLMAXSIZELENGTH', 0x02F3); // [42][F3] -- The maximum length of the sizes you'll find in this file (8 or less in Matroska). This does not override the element size indicated at the beginning of an element. Elements that have an indicated size which is larger than what is allowed by EBMLMaxSizeLength shall be considered invalid. +define('EBML_ID_EBMLREADVERSION', 0x02F7); // [42][F7] -- The minimum EBML version a parser has to support to read this file. +define('EBML_ID_CHAPLANGUAGE', 0x037C); // [43][7C] -- The languages corresponding to the string, in the bibliographic ISO-639-2 form. +define('EBML_ID_CHAPCOUNTRY', 0x037E); // [43][7E] -- The countries corresponding to the string, same 2 octets as in Internet domains. +define('EBML_ID_SEGMENTFAMILY', 0x0444); // [44][44] -- A randomly generated unique ID that all segments related to each other must use (128 bits). +define('EBML_ID_DATEUTC', 0x0461); // [44][61] -- Date of the origin of timecode (value 0), i.e. production date. +define('EBML_ID_TAGLANGUAGE', 0x047A); // [44][7A] -- Specifies the language of the tag specified, in the Matroska languages form. +define('EBML_ID_TAGDEFAULT', 0x0484); // [44][84] -- Indication to know if this is the default/original language to use for the given tag. +define('EBML_ID_TAGBINARY', 0x0485); // [44][85] -- The values of the Tag if it is binary. Note that this cannot be used in the same SimpleTag as TagString. +define('EBML_ID_TAGSTRING', 0x0487); // [44][87] -- The value of the Tag. +define('EBML_ID_DURATION', 0x0489); // [44][89] -- Duration of the segment (based on TimecodeScale). +define('EBML_ID_CHAPPROCESSPRIVATE', 0x050D); // [45][0D] -- Some optional data attached to the ChapProcessCodecID information. For ChapProcessCodecID = 1, it is the "DVD level" equivalent. +define('EBML_ID_CHAPTERFLAGENABLED', 0x0598); // [45][98] -- Specify wether the chapter is enabled. It can be enabled/disabled by a Control Track. When disabled, the movie should skip all the content between the TimeStart and TimeEnd of this chapter. +define('EBML_ID_TAGNAME', 0x05A3); // [45][A3] -- The name of the Tag that is going to be stored. +define('EBML_ID_EDITIONENTRY', 0x05B9); // [45][B9] -- Contains all information about a segment edition. +define('EBML_ID_EDITIONUID', 0x05BC); // [45][BC] -- A unique ID to identify the edition. It's useful for tagging an edition. +define('EBML_ID_EDITIONFLAGHIDDEN', 0x05BD); // [45][BD] -- If an edition is hidden (1), it should not be available to the user interface (but still to Control Tracks). +define('EBML_ID_EDITIONFLAGDEFAULT', 0x05DB); // [45][DB] -- If a flag is set (1) the edition should be used as the default one. +define('EBML_ID_EDITIONFLAGORDERED', 0x05DD); // [45][DD] -- Specify if the chapters can be defined multiple times and the order to play them is enforced. +define('EBML_ID_FILEDATA', 0x065C); // [46][5C] -- The data of the file. +define('EBML_ID_FILEMIMETYPE', 0x0660); // [46][60] -- MIME type of the file. +define('EBML_ID_FILENAME', 0x066E); // [46][6E] -- Filename of the attached file. +define('EBML_ID_FILEREFERRAL', 0x0675); // [46][75] -- A binary value that a track/codec can refer to when the attachment is needed. +define('EBML_ID_FILEDESCRIPTION', 0x067E); // [46][7E] -- A human-friendly name for the attached file. +define('EBML_ID_FILEUID', 0x06AE); // [46][AE] -- Unique ID representing the file, as random as possible. +define('EBML_ID_CONTENTENCALGO', 0x07E1); // [47][E1] -- The encryption algorithm used. The value '0' means that the contents have not been encrypted but only signed. Predefined values: +define('EBML_ID_CONTENTENCKEYID', 0x07E2); // [47][E2] -- For public key algorithms this is the ID of the public key the the data was encrypted with. +define('EBML_ID_CONTENTSIGNATURE', 0x07E3); // [47][E3] -- A cryptographic signature of the contents. +define('EBML_ID_CONTENTSIGKEYID', 0x07E4); // [47][E4] -- This is the ID of the private key the data was signed with. +define('EBML_ID_CONTENTSIGALGO', 0x07E5); // [47][E5] -- The algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: +define('EBML_ID_CONTENTSIGHASHALGO', 0x07E6); // [47][E6] -- The hash algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: +define('EBML_ID_MUXINGAPP', 0x0D80); // [4D][80] -- Muxing application or library ("libmatroska-0.4.3"). +define('EBML_ID_SEEK', 0x0DBB); // [4D][BB] -- Contains a single seek entry to an EBML element. +define('EBML_ID_CONTENTENCODINGORDER', 0x1031); // [50][31] -- Tells when this modification was used during encoding/muxing starting with 0 and counting upwards. The decoder/demuxer has to start with the highest order number it finds and work its way down. This value has to be unique over all ContentEncodingOrder elements in the segment. +define('EBML_ID_CONTENTENCODINGSCOPE', 0x1032); // [50][32] -- A bit field that describes which elements have been modified in this way. Values (big endian) can be OR'ed. Possible values: +define('EBML_ID_CONTENTENCODINGTYPE', 0x1033); // [50][33] -- A value describing what kind of transformation has been done. Possible values: +define('EBML_ID_CONTENTCOMPRESSION', 0x1034); // [50][34] -- Settings describing the compression used. Must be present if the value of ContentEncodingType is 0 and absent otherwise. Each block must be decompressable even if no previous block is available in order not to prevent seeking. +define('EBML_ID_CONTENTENCRYPTION', 0x1035); // [50][35] -- Settings describing the encryption used. Must be present if the value of ContentEncodingType is 1 and absent otherwise. +define('EBML_ID_CUEREFNUMBER', 0x135F); // [53][5F] -- Number of the referenced Block of Track X in the specified Cluster. +define('EBML_ID_NAME', 0x136E); // [53][6E] -- A human-readable track name. +define('EBML_ID_CUEBLOCKNUMBER', 0x1378); // [53][78] -- Number of the Block in the specified Cluster. +define('EBML_ID_TRACKOFFSET', 0x137F); // [53][7F] -- A value to add to the Block's Timecode. This can be used to adjust the playback offset of a track. +define('EBML_ID_SEEKID', 0x13AB); // [53][AB] -- The binary ID corresponding to the element name. +define('EBML_ID_SEEKPOSITION', 0x13AC); // [53][AC] -- The position of the element in the segment in octets (0 = first level 1 element). +define('EBML_ID_STEREOMODE', 0x13B8); // [53][B8] -- Stereo-3D video mode. +define('EBML_ID_OLDSTEREOMODE', 0x13B9); // [53][B9] -- Bogus StereoMode value used in old versions of libmatroska. DO NOT USE. (0: mono, 1: right eye, 2: left eye, 3: both eyes). +define('EBML_ID_PIXELCROPBOTTOM', 0x14AA); // [54][AA] -- The number of video pixels to remove at the bottom of the image (for HDTV content). +define('EBML_ID_DISPLAYWIDTH', 0x14B0); // [54][B0] -- Width of the video frames to display. +define('EBML_ID_DISPLAYUNIT', 0x14B2); // [54][B2] -- Type of the unit for DisplayWidth/Height (0: pixels, 1: centimeters, 2: inches). +define('EBML_ID_ASPECTRATIOTYPE', 0x14B3); // [54][B3] -- Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect ratio, 2: fixed). +define('EBML_ID_DISPLAYHEIGHT', 0x14BA); // [54][BA] -- Height of the video frames to display. +define('EBML_ID_PIXELCROPTOP', 0x14BB); // [54][BB] -- The number of video pixels to remove at the top of the image. +define('EBML_ID_PIXELCROPLEFT', 0x14CC); // [54][CC] -- The number of video pixels to remove on the left of the image. +define('EBML_ID_PIXELCROPRIGHT', 0x14DD); // [54][DD] -- The number of video pixels to remove on the right of the image. +define('EBML_ID_FLAGFORCED', 0x15AA); // [55][AA] -- Set if that track MUST be used during playback. There can be many forced track for a kind (audio, video or subs), the player should select the one which language matches the user preference or the default + forced track. Overlay MAY happen between a forced and non-forced track of the same kind. +define('EBML_ID_MAXBLOCKADDITIONID', 0x15EE); // [55][EE] -- The maximum value of BlockAddID. A value 0 means there is no BlockAdditions for this track. +define('EBML_ID_WRITINGAPP', 0x1741); // [57][41] -- Writing application ("mkvmerge-0.3.3"). +define('EBML_ID_CLUSTERSILENTTRACKS', 0x1854); // [58][54] -- The list of tracks that are not used in that part of the stream. It is useful when using overlay tracks on seeking. Then you should decide what track to use. +define('EBML_ID_CLUSTERSILENTTRACKNUMBER', 0x18D7); // [58][D7] -- One of the track number that are not used from now on in the stream. It could change later if not specified as silent in a further Cluster. +define('EBML_ID_ATTACHEDFILE', 0x21A7); // [61][A7] -- An attached file. +define('EBML_ID_CONTENTENCODING', 0x2240); // [62][40] -- Settings for one content encoding like compression or encryption. +define('EBML_ID_BITDEPTH', 0x2264); // [62][64] -- Bits per sample, mostly used for PCM. +define('EBML_ID_CODECPRIVATE', 0x23A2); // [63][A2] -- Private data only known to the codec. +define('EBML_ID_TARGETS', 0x23C0); // [63][C0] -- Contain all UIDs where the specified meta data apply. It is void to describe everything in the segment. +define('EBML_ID_CHAPTERPHYSICALEQUIV', 0x23C3); // [63][C3] -- Specify the physical equivalent of this ChapterAtom like "DVD" (60) or "SIDE" (50), see complete list of values. +define('EBML_ID_TAGCHAPTERUID', 0x23C4); // [63][C4] -- A unique ID to identify the Chapter(s) the tags belong to. If the value is 0 at this level, the tags apply to all chapters in the Segment. +define('EBML_ID_TAGTRACKUID', 0x23C5); // [63][C5] -- A unique ID to identify the Track(s) the tags belong to. If the value is 0 at this level, the tags apply to all tracks in the Segment. +define('EBML_ID_TAGATTACHMENTUID', 0x23C6); // [63][C6] -- A unique ID to identify the Attachment(s) the tags belong to. If the value is 0 at this level, the tags apply to all the attachments in the Segment. +define('EBML_ID_TAGEDITIONUID', 0x23C9); // [63][C9] -- A unique ID to identify the EditionEntry(s) the tags belong to. If the value is 0 at this level, the tags apply to all editions in the Segment. +define('EBML_ID_TARGETTYPE', 0x23CA); // [63][CA] -- An informational string that can be used to display the logical level of the target like "ALBUM", "TRACK", "MOVIE", "CHAPTER", etc (see TargetType). +define('EBML_ID_TRACKTRANSLATE', 0x2624); // [66][24] -- The track identification for the given Chapter Codec. +define('EBML_ID_TRACKTRANSLATETRACKID', 0x26A5); // [66][A5] -- The binary value used to represent this track in the chapter codec data. The format depends on the ChapProcessCodecID used. +define('EBML_ID_TRACKTRANSLATECODEC', 0x26BF); // [66][BF] -- The chapter codec using this ID (0: Matroska Script, 1: DVD-menu). +define('EBML_ID_TRACKTRANSLATEEDITIONUID', 0x26FC); // [66][FC] -- Specify an edition UID on which this translation applies. When not specified, it means for all editions found in the segment. +define('EBML_ID_SIMPLETAG', 0x27C8); // [67][C8] -- Contains general information about the target. +define('EBML_ID_TARGETTYPEVALUE', 0x28CA); // [68][CA] -- A number to indicate the logical level of the target (see TargetType). +define('EBML_ID_CHAPPROCESSCOMMAND', 0x2911); // [69][11] -- Contains all the commands associated to the Atom. +define('EBML_ID_CHAPPROCESSTIME', 0x2922); // [69][22] -- Defines when the process command should be handled (0: during the whole chapter, 1: before starting playback, 2: after playback of the chapter). +define('EBML_ID_CHAPTERTRANSLATE', 0x2924); // [69][24] -- A tuple of corresponding ID used by chapter codecs to represent this segment. +define('EBML_ID_CHAPPROCESSDATA', 0x2933); // [69][33] -- Contains the command information. The data should be interpreted depending on the ChapProcessCodecID value. For ChapProcessCodecID = 1, the data correspond to the binary DVD cell pre/post commands. +define('EBML_ID_CHAPPROCESS', 0x2944); // [69][44] -- Contains all the commands associated to the Atom. +define('EBML_ID_CHAPPROCESSCODECID', 0x2955); // [69][55] -- Contains the type of the codec used for the processing. A value of 0 means native Matroska processing (to be defined), a value of 1 means the DVD command set is used. More codec IDs can be added later. +define('EBML_ID_CHAPTERTRANSLATEID', 0x29A5); // [69][A5] -- The binary value used to represent this segment in the chapter codec data. The format depends on the ChapProcessCodecID used. +define('EBML_ID_CHAPTERTRANSLATECODEC', 0x29BF); // [69][BF] -- The chapter codec using this ID (0: Matroska Script, 1: DVD-menu). +define('EBML_ID_CHAPTERTRANSLATEEDITIONUID', 0x29FC); // [69][FC] -- Specify an edition UID on which this correspondance applies. When not specified, it means for all editions found in the segment. +define('EBML_ID_CONTENTENCODINGS', 0x2D80); // [6D][80] -- Settings for several content encoding mechanisms like compression or encryption. +define('EBML_ID_MINCACHE', 0x2DE7); // [6D][E7] -- The minimum number of frames a player should be able to cache during playback. If set to 0, the reference pseudo-cache system is not used. +define('EBML_ID_MAXCACHE', 0x2DF8); // [6D][F8] -- The maximum cache size required to store referenced frames in and the current frame. 0 means no cache is needed. +define('EBML_ID_CHAPTERSEGMENTUID', 0x2E67); // [6E][67] -- A segment to play in place of this chapter. Edition ChapterSegmentEditionUID should be used for this segment, otherwise no edition is used. +define('EBML_ID_CHAPTERSEGMENTEDITIONUID', 0x2EBC); // [6E][BC] -- The edition to play from the segment linked in ChapterSegmentUID. +define('EBML_ID_TRACKOVERLAY', 0x2FAB); // [6F][AB] -- Specify that this track is an overlay track for the Track specified (in the u-integer). That means when this track has a gap (see SilentTracks) the overlay track should be used instead. The order of multiple TrackOverlay matters, the first one is the one that should be used. If not found it should be the second, etc. +define('EBML_ID_TAG', 0x3373); // [73][73] -- Element containing elements specific to Tracks/Chapters. +define('EBML_ID_SEGMENTFILENAME', 0x3384); // [73][84] -- A filename corresponding to this segment. +define('EBML_ID_SEGMENTUID', 0x33A4); // [73][A4] -- A randomly generated unique ID to identify the current segment between many others (128 bits). +define('EBML_ID_CHAPTERUID', 0x33C4); // [73][C4] -- A unique ID to identify the Chapter. +define('EBML_ID_TRACKUID', 0x33C5); // [73][C5] -- A unique ID to identify the Track. This should be kept the same when making a direct stream copy of the Track to another file. +define('EBML_ID_ATTACHMENTLINK', 0x3446); // [74][46] -- The UID of an attachment that is used by this codec. +define('EBML_ID_CLUSTERBLOCKADDITIONS', 0x35A1); // [75][A1] -- Contain additional blocks to complete the main one. An EBML parser that has no knowledge of the Block structure could still see and use/skip these data. +define('EBML_ID_CHANNELPOSITIONS', 0x347B); // [7D][7B] -- Table of horizontal angles for each successive channel, see appendix. +define('EBML_ID_OUTPUTSAMPLINGFREQUENCY', 0x38B5); // [78][B5] -- Real output sampling frequency in Hz (used for SBR techniques). +define('EBML_ID_TITLE', 0x3BA9); // [7B][A9] -- General name of the segment. +define('EBML_ID_CHAPTERDISPLAY', 0x00); // [80] -- Contains all possible strings to use for the chapter display. +define('EBML_ID_TRACKTYPE', 0x03); // [83] -- A set of track types coded on 8 bits (1: video, 2: audio, 3: complex, 0x10: logo, 0x11: subtitle, 0x12: buttons, 0x20: control). +define('EBML_ID_CHAPSTRING', 0x05); // [85] -- Contains the string to use as the chapter atom. +define('EBML_ID_CODECID', 0x06); // [86] -- An ID corresponding to the codec, see the codec page for more info. +define('EBML_ID_FLAGDEFAULT', 0x08); // [88] -- Set if that track (audio, video or subs) SHOULD be used if no language found matches the user preference. +define('EBML_ID_CHAPTERTRACKNUMBER', 0x09); // [89] -- UID of the Track to apply this chapter too. In the absense of a control track, choosing this chapter will select the listed Tracks and deselect unlisted tracks. Absense of this element indicates that the Chapter should be applied to any currently used Tracks. +define('EBML_ID_CLUSTERSLICES', 0x0E); // [8E] -- Contains slices description. +define('EBML_ID_CHAPTERTRACK', 0x0F); // [8F] -- List of tracks on which the chapter applies. If this element is not present, all tracks apply +define('EBML_ID_CHAPTERTIMESTART', 0x11); // [91] -- Timecode of the start of Chapter (not scaled). +define('EBML_ID_CHAPTERTIMEEND', 0x12); // [92] -- Timecode of the end of Chapter (timecode excluded, not scaled). +define('EBML_ID_CUEREFTIME', 0x16); // [96] -- Timecode of the referenced Block. +define('EBML_ID_CUEREFCLUSTER', 0x17); // [97] -- Position of the Cluster containing the referenced Block. +define('EBML_ID_CHAPTERFLAGHIDDEN', 0x18); // [98] -- If a chapter is hidden (1), it should not be available to the user interface (but still to Control Tracks). +define('EBML_ID_FLAGINTERLACED', 0x1A); // [9A] -- Set if the video is interlaced. +define('EBML_ID_CLUSTERBLOCKDURATION', 0x1B); // [9B] -- The duration of the Block (based on TimecodeScale). This element is mandatory when DefaultDuration is set for the track. When not written and with no DefaultDuration, the value is assumed to be the difference between the timecode of this Block and the timecode of the next Block in "display" order (not coding order). This element can be useful at the end of a Track (as there is not other Block available), or when there is a break in a track like for subtitle tracks. +define('EBML_ID_FLAGLACING', 0x1C); // [9C] -- Set if the track may contain blocks using lacing. +define('EBML_ID_CHANNELS', 0x1F); // [9F] -- Numbers of channels in the track. +define('EBML_ID_CLUSTERBLOCKGROUP', 0x20); // [A0] -- Basic container of information containing a single Block or BlockVirtual, and information specific to that Block/VirtualBlock. +define('EBML_ID_CLUSTERBLOCK', 0x21); // [A1] -- Block containing the actual data to be rendered and a timecode relative to the Cluster Timecode. +define('EBML_ID_CLUSTERBLOCKVIRTUAL', 0x22); // [A2] -- A Block with no data. It must be stored in the stream at the place the real Block should be in display order. +define('EBML_ID_CLUSTERSIMPLEBLOCK', 0x23); // [A3] -- Similar to Block but without all the extra information, mostly used to reduced overhead when no extra feature is needed. +define('EBML_ID_CLUSTERCODECSTATE', 0x24); // [A4] -- The new codec state to use. Data interpretation is private to the codec. This information should always be referenced by a seek entry. +define('EBML_ID_CLUSTERBLOCKADDITIONAL', 0x25); // [A5] -- Interpreted by the codec as it wishes (using the BlockAddID). +define('EBML_ID_CLUSTERBLOCKMORE', 0x26); // [A6] -- Contain the BlockAdditional and some parameters. +define('EBML_ID_CLUSTERPOSITION', 0x27); // [A7] -- Position of the Cluster in the segment (0 in live broadcast streams). It might help to resynchronise offset on damaged streams. +define('EBML_ID_CODECDECODEALL', 0x2A); // [AA] -- The codec can decode potentially damaged data. +define('EBML_ID_CLUSTERPREVSIZE', 0x2B); // [AB] -- Size of the previous Cluster, in octets. Can be useful for backward playing. +define('EBML_ID_TRACKENTRY', 0x2E); // [AE] -- Describes a track with all elements. +define('EBML_ID_CLUSTERENCRYPTEDBLOCK', 0x2F); // [AF] -- Similar to SimpleBlock but the data inside the Block are Transformed (encrypt and/or signed). +define('EBML_ID_PIXELWIDTH', 0x30); // [B0] -- Width of the encoded video frames in pixels. +define('EBML_ID_CUETIME', 0x33); // [B3] -- Absolute timecode according to the segment time base. +define('EBML_ID_SAMPLINGFREQUENCY', 0x35); // [B5] -- Sampling frequency in Hz. +define('EBML_ID_CHAPTERATOM', 0x36); // [B6] -- Contains the atom information to use as the chapter atom (apply to all tracks). +define('EBML_ID_CUETRACKPOSITIONS', 0x37); // [B7] -- Contain positions for different tracks corresponding to the timecode. +define('EBML_ID_FLAGENABLED', 0x39); // [B9] -- Set if the track is used. +define('EBML_ID_PIXELHEIGHT', 0x3A); // [BA] -- Height of the encoded video frames in pixels. +define('EBML_ID_CUEPOINT', 0x3B); // [BB] -- Contains all information relative to a seek point in the segment. +define('EBML_ID_CRC32', 0x3F); // [BF] -- The CRC is computed on all the data of the Master element it's in, regardless of its position. It's recommended to put the CRC value at the beggining of the Master element for easier reading. All level 1 elements should include a CRC-32. +define('EBML_ID_CLUSTERBLOCKADDITIONID', 0x4B); // [CB] -- The ID of the BlockAdditional element (0 is the main Block). +define('EBML_ID_CLUSTERLACENUMBER', 0x4C); // [CC] -- The reverse number of the frame in the lace (0 is the last frame, 1 is the next to last, etc). While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback. +define('EBML_ID_CLUSTERFRAMENUMBER', 0x4D); // [CD] -- The number of the frame to generate from this lace with this delay (allow you to generate many frames from the same Block/Frame). +define('EBML_ID_CLUSTERDELAY', 0x4E); // [CE] -- The (scaled) delay to apply to the element. +define('EBML_ID_CLUSTERDURATION', 0x4F); // [CF] -- The (scaled) duration to apply to the element. +define('EBML_ID_TRACKNUMBER', 0x57); // [D7] -- The track number as used in the Block Header (using more than 127 tracks is not encouraged, though the design allows an unlimited number). +define('EBML_ID_CUEREFERENCE', 0x5B); // [DB] -- The Clusters containing the required referenced Blocks. +define('EBML_ID_VIDEO', 0x60); // [E0] -- Video settings. +define('EBML_ID_AUDIO', 0x61); // [E1] -- Audio settings. +define('EBML_ID_CLUSTERTIMESLICE', 0x68); // [E8] -- Contains extra time information about the data contained in the Block. While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback. +define('EBML_ID_CUECODECSTATE', 0x6A); // [EA] -- The position of the Codec State corresponding to this Cue element. 0 means that the data is taken from the initial Track Entry. +define('EBML_ID_CUEREFCODECSTATE', 0x6B); // [EB] -- The position of the Codec State corresponding to this referenced element. 0 means that the data is taken from the initial Track Entry. +define('EBML_ID_VOID', 0x6C); // [EC] -- Used to void damaged data, to avoid unexpected behaviors when using damaged data. The content is discarded. Also used to reserve space in a sub-element for later use. +define('EBML_ID_CLUSTERTIMECODE', 0x67); // [E7] -- Absolute timecode of the cluster (based on TimecodeScale). +define('EBML_ID_CLUSTERBLOCKADDID', 0x6E); // [EE] -- An ID to identify the BlockAdditional level. +define('EBML_ID_CUECLUSTERPOSITION', 0x71); // [F1] -- The position of the Cluster containing the required Block. +define('EBML_ID_CUETRACK', 0x77); // [F7] -- The track for which a position is given. +define('EBML_ID_CLUSTERREFERENCEPRIORITY', 0x7A); // [FA] -- This frame is referenced and has the specified cache priority. In cache only a frame of the same or higher priority can replace this frame. A value of 0 means the frame is not referenced. +define('EBML_ID_CLUSTERREFERENCEBLOCK', 0x7B); // [FB] -- Timecode of another frame used as a reference (ie: B or P frame). The timecode is relative to the block it's attached to. +define('EBML_ID_CLUSTERREFERENCEVIRTUAL', 0x7D); // [FD] -- Relative position of the data that should be in position of the virtual block. + + +/** +* @tutorial http://www.matroska.org/technical/specs/index.html +* +* @todo Rewrite EBML parser to reduce it's size and honor default element values +* @todo After rewrite implement stream size calculation, that will provide additional useful info and enable AAC/FLAC audio bitrate detection +*/ +class getid3_matroska extends getid3_handler +{ + // public options + public static $hide_clusters = true; // if true, do not return information about CLUSTER chunks, since there's a lot of them and they're not usually useful [default: TRUE] + public static $parse_whole_file = false; // true to parse the whole file, not only header [default: FALSE] + + // private parser settings/placeholders + private $EBMLbuffer = ''; + private $EBMLbuffer_offset = 0; + private $EBMLbuffer_length = 0; + private $current_offset = 0; + private $unuseful_elements = array(EBML_ID_CRC32, EBML_ID_VOID); + + public function Analyze() + { + $info = &$this->getid3->info; + + // parse container + try { + $this->parseEBML($info); + } catch (Exception $e) { + $info['error'][] = 'EBML parser: '.$e->getMessage(); + } + + // calculate playtime + if (isset($info['matroska']['info']) && is_array($info['matroska']['info'])) { + foreach ($info['matroska']['info'] as $key => $infoarray) { + if (isset($infoarray['Duration'])) { + // TimecodeScale is how many nanoseconds each Duration unit is + $info['playtime_seconds'] = $infoarray['Duration'] * ((isset($infoarray['TimecodeScale']) ? $infoarray['TimecodeScale'] : 1000000) / 1000000000); + break; + } + } + } + + // extract tags + if (isset($info['matroska']['tags']) && is_array($info['matroska']['tags'])) { + foreach ($info['matroska']['tags'] as $key => $infoarray) { + $this->ExtractCommentsSimpleTag($infoarray); + } + } + + // process tracks + if (isset($info['matroska']['tracks']['tracks']) && is_array($info['matroska']['tracks']['tracks'])) { + foreach ($info['matroska']['tracks']['tracks'] as $key => $trackarray) { + + $track_info = array(); + $track_info['dataformat'] = self::CodecIDtoCommonName($trackarray['CodecID']); + $track_info['default'] = (isset($trackarray['FlagDefault']) ? $trackarray['FlagDefault'] : true); + if (isset($trackarray['Name'])) { $track_info['name'] = $trackarray['Name']; } + + switch ($trackarray['TrackType']) { + + case 1: // Video + $track_info['resolution_x'] = $trackarray['PixelWidth']; + $track_info['resolution_y'] = $trackarray['PixelHeight']; + $track_info['display_unit'] = self::displayUnit(isset($trackarray['DisplayUnit']) ? $trackarray['DisplayUnit'] : 0); + $track_info['display_x'] = (isset($trackarray['DisplayWidth']) ? $trackarray['DisplayWidth'] : $trackarray['PixelWidth']); + $track_info['display_y'] = (isset($trackarray['DisplayHeight']) ? $trackarray['DisplayHeight'] : $trackarray['PixelHeight']); + + if (isset($trackarray['PixelCropBottom'])) { $track_info['crop_bottom'] = $trackarray['PixelCropBottom']; } + if (isset($trackarray['PixelCropTop'])) { $track_info['crop_top'] = $trackarray['PixelCropTop']; } + if (isset($trackarray['PixelCropLeft'])) { $track_info['crop_left'] = $trackarray['PixelCropLeft']; } + if (isset($trackarray['PixelCropRight'])) { $track_info['crop_right'] = $trackarray['PixelCropRight']; } + if (isset($trackarray['DefaultDuration'])) { $track_info['frame_rate'] = round(1000000000 / $trackarray['DefaultDuration'], 3); } + if (isset($trackarray['CodecName'])) { $track_info['codec'] = $trackarray['CodecName']; } + + switch ($trackarray['CodecID']) { + case 'V_MS/VFW/FOURCC': + if (!getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.riff.php', __FILE__, false)) { + $this->warning('Unable to parse codec private data ['.basename(__FILE__).':'.__LINE__.'] because cannot include "module.audio-video.riff.php"'); + break; + } + $parsed = getid3_riff::ParseBITMAPINFOHEADER($trackarray['CodecPrivate']); + $track_info['codec'] = getid3_riff::fourccLookup($parsed['fourcc']); + $info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $parsed; + break; + + /*case 'V_MPEG4/ISO/AVC': + $h264['profile'] = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 1, 1)); + $h264['level'] = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 3, 1)); + $rn = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 4, 1)); + $h264['NALUlength'] = ($rn & 3) + 1; + $rn = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 5, 1)); + $nsps = ($rn & 31); + $offset = 6; + for ($i = 0; $i < $nsps; $i ++) { + $length = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], $offset, 2)); + $h264['SPS'][] = substr($trackarray['CodecPrivate'], $offset + 2, $length); + $offset += 2 + $length; + } + $npps = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], $offset, 1)); + $offset += 1; + for ($i = 0; $i < $npps; $i ++) { + $length = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], $offset, 2)); + $h264['PPS'][] = substr($trackarray['CodecPrivate'], $offset + 2, $length); + $offset += 2 + $length; + } + $info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $h264; + break;*/ + } + + $info['video']['streams'][] = $track_info; + break; + + case 2: // Audio + $track_info['sample_rate'] = (isset($trackarray['SamplingFrequency']) ? $trackarray['SamplingFrequency'] : 8000.0); + $track_info['channels'] = (isset($trackarray['Channels']) ? $trackarray['Channels'] : 1); + $track_info['language'] = (isset($trackarray['Language']) ? $trackarray['Language'] : 'eng'); + if (isset($trackarray['BitDepth'])) { $track_info['bits_per_sample'] = $trackarray['BitDepth']; } + if (isset($trackarray['CodecName'])) { $track_info['codec'] = $trackarray['CodecName']; } + + switch ($trackarray['CodecID']) { + case 'A_PCM/INT/LIT': + case 'A_PCM/INT/BIG': + $track_info['bitrate'] = $trackarray['SamplingFrequency'] * $trackarray['Channels'] * $trackarray['BitDepth']; + break; + + case 'A_AC3': + case 'A_DTS': + case 'A_MPEG/L3': + case 'A_MPEG/L2': + case 'A_FLAC': + if (!getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.'.($track_info['dataformat'] == 'mp2' ? 'mp3' : $track_info['dataformat']).'.php', __FILE__, false)) { + $this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because cannot include "module.audio.'.$track_info['dataformat'].'.php"'); + break; + } + + if (!isset($info['matroska']['track_data_offsets'][$trackarray['TrackNumber']])) { + $this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because $info[matroska][track_data_offsets]['.$trackarray['TrackNumber'].'] not set'); + break; + } + + // create temp instance + $getid3_temp = new getID3(); + if ($track_info['dataformat'] != 'flac') { + $getid3_temp->openfile($this->getid3->filename); + } + $getid3_temp->info['avdataoffset'] = $info['matroska']['track_data_offsets'][$trackarray['TrackNumber']]['offset']; + if ($track_info['dataformat'][0] == 'm' || $track_info['dataformat'] == 'flac') { + $getid3_temp->info['avdataend'] = $info['matroska']['track_data_offsets'][$trackarray['TrackNumber']]['offset'] + $info['matroska']['track_data_offsets'][$trackarray['TrackNumber']]['length']; + } + + // analyze + $class = 'getid3_'.($track_info['dataformat'] == 'mp2' ? 'mp3' : $track_info['dataformat']); + $header_data_key = $track_info['dataformat'][0] == 'm' ? 'mpeg' : $track_info['dataformat']; + $getid3_audio = new $class($getid3_temp, __CLASS__); + if ($track_info['dataformat'] == 'flac') { + $getid3_audio->AnalyzeString($trackarray['CodecPrivate']); + } + else { + $getid3_audio->Analyze(); + } + if (!empty($getid3_temp->info[$header_data_key])) { + $info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $getid3_temp->info[$header_data_key]; + if (isset($getid3_temp->info['audio']) && is_array($getid3_temp->info['audio'])) { + foreach ($getid3_temp->info['audio'] as $key => $value) { + $track_info[$key] = $value; + } + } + } + else { + $this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because '.$class.'::Analyze() failed at offset '.$getid3_temp->info['avdataoffset']); + } + + // copy errors and warnings + if (!empty($getid3_temp->info['error'])) { + foreach ($getid3_temp->info['error'] as $newerror) { + $this->warning($class.'() says: ['.$newerror.']'); + } + } + if (!empty($getid3_temp->info['warning'])) { + foreach ($getid3_temp->info['warning'] as $newerror) { + if ($track_info['dataformat'] == 'mp3' && preg_match('/^Probable truncated file: expecting \d+ bytes of audio data, only found \d+ \(short by \d+ bytes\)$/', $newerror)) { + // LAME/Xing header is probably set, but audio data is chunked into Matroska file and near-impossible to verify if audio stream is complete, so ignore useless warning + continue; + } + $this->warning($class.'() says: ['.$newerror.']'); + } + } + unset($getid3_temp, $getid3_audio); + break; + + case 'A_AAC': + case 'A_AAC/MPEG2/LC': + case 'A_AAC/MPEG2/LC/SBR': + case 'A_AAC/MPEG4/LC': + case 'A_AAC/MPEG4/LC/SBR': + $this->warning($trackarray['CodecID'].' audio data contains no header, audio/video bitrates can\'t be calculated'); + break; + + case 'A_VORBIS': + if (!isset($trackarray['CodecPrivate'])) { + $this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because CodecPrivate data not set'); + break; + } + $vorbis_offset = strpos($trackarray['CodecPrivate'], 'vorbis', 1); + if ($vorbis_offset === false) { + $this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because CodecPrivate data does not contain "vorbis" keyword'); + break; + } + $vorbis_offset -= 1; + + if (!getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.ogg.php', __FILE__, false)) { + $this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because cannot include "module.audio.ogg.php"'); + break; + } + + // create temp instance + $getid3_temp = new getID3(); + + // analyze + $getid3_ogg = new getid3_ogg($getid3_temp); + $oggpageinfo['page_seqno'] = 0; + $getid3_ogg->ParseVorbisPageHeader($trackarray['CodecPrivate'], $vorbis_offset, $oggpageinfo); + if (!empty($getid3_temp->info['ogg'])) { + $info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $getid3_temp->info['ogg']; + if (isset($getid3_temp->info['audio']) && is_array($getid3_temp->info['audio'])) { + foreach ($getid3_temp->info['audio'] as $key => $value) { + $track_info[$key] = $value; + } + } + } + + // copy errors and warnings + if (!empty($getid3_temp->info['error'])) { + foreach ($getid3_temp->info['error'] as $newerror) { + $this->warning('getid3_ogg() says: ['.$newerror.']'); + } + } + if (!empty($getid3_temp->info['warning'])) { + foreach ($getid3_temp->info['warning'] as $newerror) { + $this->warning('getid3_ogg() says: ['.$newerror.']'); + } + } + + if (!empty($getid3_temp->info['ogg']['bitrate_nominal'])) { + $track_info['bitrate'] = $getid3_temp->info['ogg']['bitrate_nominal']; + } + unset($getid3_temp, $getid3_ogg, $oggpageinfo, $vorbis_offset); + break; + + case 'A_MS/ACM': + if (!getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.riff.php', __FILE__, false)) { + $this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because cannot include "module.audio-video.riff.php"'); + break; + } + + $parsed = getid3_riff::parseWAVEFORMATex($trackarray['CodecPrivate']); + foreach ($parsed as $key => $value) { + if ($key != 'raw') { + $track_info[$key] = $value; + } + } + $info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $parsed; + break; + + default: + $this->warning('Unhandled audio type "'.(isset($trackarray['CodecID']) ? $trackarray['CodecID'] : '').'"'); + } + + $info['audio']['streams'][] = $track_info; + break; + } + } + + if (!empty($info['video']['streams'])) { + $info['video'] = self::getDefaultStreamInfo($info['video']['streams']); + } + if (!empty($info['audio']['streams'])) { + $info['audio'] = self::getDefaultStreamInfo($info['audio']['streams']); + } + } + + // process attachments + if (isset($info['matroska']['attachments']) && $this->getid3->option_save_attachments !== getID3::ATTACHMENTS_NONE) { + foreach ($info['matroska']['attachments'] as $i => $entry) { + if (strpos($entry['FileMimeType'], 'image/') === 0 && !empty($entry['FileData'])) { + $info['matroska']['comments']['picture'][] = array('data' => $entry['FileData'], 'image_mime' => $entry['FileMimeType'], 'filename' => $entry['FileName']); + } + } + } + + // determine mime type + if (!empty($info['video']['streams'])) { + $info['mime_type'] = ($info['matroska']['doctype'] == 'webm' ? 'video/webm' : 'video/x-matroska'); + } elseif (!empty($info['audio']['streams'])) { + $info['mime_type'] = ($info['matroska']['doctype'] == 'webm' ? 'audio/webm' : 'audio/x-matroska'); + } elseif (isset($info['mime_type'])) { + unset($info['mime_type']); + } + + return true; + } + + private function parseEBML(&$info) { + // http://www.matroska.org/technical/specs/index.html#EBMLBasics + $this->current_offset = $info['avdataoffset']; + + while ($this->getEBMLelement($top_element, $info['avdataend'])) { + switch ($top_element['id']) { + + case EBML_ID_EBML: + $info['fileformat'] = 'matroska'; + $info['matroska']['header']['offset'] = $top_element['offset']; + $info['matroska']['header']['length'] = $top_element['length']; + + while ($this->getEBMLelement($element_data, $top_element['end'], true)) { + switch ($element_data['id']) { + + case EBML_ID_EBMLVERSION: + case EBML_ID_EBMLREADVERSION: + case EBML_ID_EBMLMAXIDLENGTH: + case EBML_ID_EBMLMAXSIZELENGTH: + case EBML_ID_DOCTYPEVERSION: + case EBML_ID_DOCTYPEREADVERSION: + $element_data['data'] = getid3_lib::BigEndian2Int($element_data['data']); + break; + + case EBML_ID_DOCTYPE: + $element_data['data'] = getid3_lib::trimNullByte($element_data['data']); + $info['matroska']['doctype'] = $element_data['data']; + break; + + default: + $this->unhandledElement('header', __LINE__, $element_data); + } + + unset($element_data['offset'], $element_data['end']); + $info['matroska']['header']['elements'][] = $element_data; + } + break; + + case EBML_ID_SEGMENT: + $info['matroska']['segment'][0]['offset'] = $top_element['offset']; + $info['matroska']['segment'][0]['length'] = $top_element['length']; + + while ($this->getEBMLelement($element_data, $top_element['end'])) { + if ($element_data['id'] != EBML_ID_CLUSTER || !self::$hide_clusters) { // collect clusters only if required + $info['matroska']['segments'][] = $element_data; + } + switch ($element_data['id']) { + + case EBML_ID_SEEKHEAD: // Contains the position of other level 1 elements. + + while ($this->getEBMLelement($seek_entry, $element_data['end'])) { + switch ($seek_entry['id']) { + + case EBML_ID_SEEK: // Contains a single seek entry to an EBML element + while ($this->getEBMLelement($sub_seek_entry, $seek_entry['end'], true)) { + + switch ($sub_seek_entry['id']) { + + case EBML_ID_SEEKID: + $seek_entry['target_id'] = self::EBML2Int($sub_seek_entry['data']); + $seek_entry['target_name'] = self::EBMLidName($seek_entry['target_id']); + break; + + case EBML_ID_SEEKPOSITION: + $seek_entry['target_offset'] = $element_data['offset'] + getid3_lib::BigEndian2Int($sub_seek_entry['data']); + break; + + default: + $this->unhandledElement('seekhead.seek', __LINE__, $sub_seek_entry); } + } + + if ($seek_entry['target_id'] != EBML_ID_CLUSTER || !self::$hide_clusters) { // collect clusters only if required + $info['matroska']['seek'][] = $seek_entry; + } + break; + + default: + $this->unhandledElement('seekhead', __LINE__, $seek_entry); + } + } + break; + + case EBML_ID_TRACKS: // A top-level block of information with many tracks described. + $info['matroska']['tracks'] = $element_data; + + while ($this->getEBMLelement($track_entry, $element_data['end'])) { + switch ($track_entry['id']) { + + case EBML_ID_TRACKENTRY: //subelements: Describes a track with all elements. + + while ($this->getEBMLelement($subelement, $track_entry['end'], array(EBML_ID_VIDEO, EBML_ID_AUDIO, EBML_ID_CONTENTENCODINGS, EBML_ID_CODECPRIVATE))) { + switch ($subelement['id']) { + + case EBML_ID_TRACKNUMBER: + case EBML_ID_TRACKUID: + case EBML_ID_TRACKTYPE: + case EBML_ID_MINCACHE: + case EBML_ID_MAXCACHE: + case EBML_ID_MAXBLOCKADDITIONID: + case EBML_ID_DEFAULTDURATION: // nanoseconds per frame + $track_entry[$subelement['id_name']] = getid3_lib::BigEndian2Int($subelement['data']); + break; + + case EBML_ID_TRACKTIMECODESCALE: + $track_entry[$subelement['id_name']] = getid3_lib::BigEndian2Float($subelement['data']); + break; + + case EBML_ID_CODECID: + case EBML_ID_LANGUAGE: + case EBML_ID_NAME: + case EBML_ID_CODECNAME: + $track_entry[$subelement['id_name']] = getid3_lib::trimNullByte($subelement['data']); + break; + + case EBML_ID_CODECPRIVATE: + $track_entry[$subelement['id_name']] = $this->readEBMLelementData($subelement['length'], true); + break; + + case EBML_ID_FLAGENABLED: + case EBML_ID_FLAGDEFAULT: + case EBML_ID_FLAGFORCED: + case EBML_ID_FLAGLACING: + case EBML_ID_CODECDECODEALL: + $track_entry[$subelement['id_name']] = (bool) getid3_lib::BigEndian2Int($subelement['data']); + break; + + case EBML_ID_VIDEO: + + while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) { + switch ($sub_subelement['id']) { + + case EBML_ID_PIXELWIDTH: + case EBML_ID_PIXELHEIGHT: + case EBML_ID_PIXELCROPBOTTOM: + case EBML_ID_PIXELCROPTOP: + case EBML_ID_PIXELCROPLEFT: + case EBML_ID_PIXELCROPRIGHT: + case EBML_ID_DISPLAYWIDTH: + case EBML_ID_DISPLAYHEIGHT: + case EBML_ID_DISPLAYUNIT: + case EBML_ID_ASPECTRATIOTYPE: + case EBML_ID_STEREOMODE: + case EBML_ID_OLDSTEREOMODE: + $track_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']); + break; + + case EBML_ID_FLAGINTERLACED: + $track_entry[$sub_subelement['id_name']] = (bool)getid3_lib::BigEndian2Int($sub_subelement['data']); + break; + + case EBML_ID_GAMMAVALUE: + $track_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Float($sub_subelement['data']); + break; + + case EBML_ID_COLOURSPACE: + $track_entry[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']); + break; + + default: + $this->unhandledElement('track.video', __LINE__, $sub_subelement); + } + } + break; + + case EBML_ID_AUDIO: + + while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) { + switch ($sub_subelement['id']) { + + case EBML_ID_CHANNELS: + case EBML_ID_BITDEPTH: + $track_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']); + break; + + case EBML_ID_SAMPLINGFREQUENCY: + case EBML_ID_OUTPUTSAMPLINGFREQUENCY: + $track_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Float($sub_subelement['data']); + break; + + case EBML_ID_CHANNELPOSITIONS: + $track_entry[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']); + break; + + default: + $this->unhandledElement('track.audio', __LINE__, $sub_subelement); + } + } + break; + + case EBML_ID_CONTENTENCODINGS: + + while ($this->getEBMLelement($sub_subelement, $subelement['end'])) { + switch ($sub_subelement['id']) { + + case EBML_ID_CONTENTENCODING: + + while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], array(EBML_ID_CONTENTCOMPRESSION, EBML_ID_CONTENTENCRYPTION))) { + switch ($sub_sub_subelement['id']) { + + case EBML_ID_CONTENTENCODINGORDER: + case EBML_ID_CONTENTENCODINGSCOPE: + case EBML_ID_CONTENTENCODINGTYPE: + $track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']); + break; + + case EBML_ID_CONTENTCOMPRESSION: + + while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) { + switch ($sub_sub_sub_subelement['id']) { + + case EBML_ID_CONTENTCOMPALGO: + $track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_sub_subelement['data']); + break; + + case EBML_ID_CONTENTCOMPSETTINGS: + $track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data']; + break; + + default: + $this->unhandledElement('track.contentencodings.contentencoding.contentcompression', __LINE__, $sub_sub_sub_subelement); + } + } + break; + + case EBML_ID_CONTENTENCRYPTION: + + while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) { + switch ($sub_sub_sub_subelement['id']) { + + case EBML_ID_CONTENTENCALGO: + case EBML_ID_CONTENTSIGALGO: + case EBML_ID_CONTENTSIGHASHALGO: + $track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_sub_subelement['data']); + break; + + case EBML_ID_CONTENTENCKEYID: + case EBML_ID_CONTENTSIGNATURE: + case EBML_ID_CONTENTSIGKEYID: + $track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data']; + break; + + default: + $this->unhandledElement('track.contentencodings.contentencoding.contentcompression', __LINE__, $sub_sub_sub_subelement); + } + } + break; + + default: + $this->unhandledElement('track.contentencodings.contentencoding', __LINE__, $sub_sub_subelement); + } + } + break; + + default: + $this->unhandledElement('track.contentencodings', __LINE__, $sub_subelement); + } + } + break; + + default: + $this->unhandledElement('track', __LINE__, $subelement); + } + } + + $info['matroska']['tracks']['tracks'][] = $track_entry; + break; + + default: + $this->unhandledElement('tracks', __LINE__, $track_entry); + } + } + break; + + case EBML_ID_INFO: // Contains miscellaneous general information and statistics on the file. + $info_entry = array(); + + while ($this->getEBMLelement($subelement, $element_data['end'], true)) { + switch ($subelement['id']) { + + case EBML_ID_TIMECODESCALE: + $info_entry[$subelement['id_name']] = getid3_lib::BigEndian2Int($subelement['data']); + break; + + case EBML_ID_DURATION: + $info_entry[$subelement['id_name']] = getid3_lib::BigEndian2Float($subelement['data']); + break; + + case EBML_ID_DATEUTC: + $info_entry[$subelement['id_name']] = getid3_lib::BigEndian2Int($subelement['data']); + $info_entry[$subelement['id_name'].'_unix'] = self::EBMLdate2unix($info_entry[$subelement['id_name']]); + break; + + case EBML_ID_SEGMENTUID: + case EBML_ID_PREVUID: + case EBML_ID_NEXTUID: + $info_entry[$subelement['id_name']] = getid3_lib::trimNullByte($subelement['data']); + break; + + case EBML_ID_SEGMENTFAMILY: + $info_entry[$subelement['id_name']][] = getid3_lib::trimNullByte($subelement['data']); + break; + + case EBML_ID_SEGMENTFILENAME: + case EBML_ID_PREVFILENAME: + case EBML_ID_NEXTFILENAME: + case EBML_ID_TITLE: + case EBML_ID_MUXINGAPP: + case EBML_ID_WRITINGAPP: + $info_entry[$subelement['id_name']] = getid3_lib::trimNullByte($subelement['data']); + $info['matroska']['comments'][strtolower($subelement['id_name'])][] = $info_entry[$subelement['id_name']]; + break; + + case EBML_ID_CHAPTERTRANSLATE: + $chaptertranslate_entry = array(); + + while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) { + switch ($sub_subelement['id']) { + + case EBML_ID_CHAPTERTRANSLATEEDITIONUID: + $chaptertranslate_entry[$sub_subelement['id_name']][] = getid3_lib::BigEndian2Int($sub_subelement['data']); + break; + + case EBML_ID_CHAPTERTRANSLATECODEC: + $chaptertranslate_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']); + break; + + case EBML_ID_CHAPTERTRANSLATEID: + $chaptertranslate_entry[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']); + break; + + default: + $this->unhandledElement('info.chaptertranslate', __LINE__, $sub_subelement); + } + } + $info_entry[$subelement['id_name']] = $chaptertranslate_entry; + break; + + default: + $this->unhandledElement('info', __LINE__, $subelement); + } + } + $info['matroska']['info'][] = $info_entry; + break; + + case EBML_ID_CUES: // A top-level element to speed seeking access. All entries are local to the segment. Should be mandatory for non "live" streams. + if (self::$hide_clusters) { // do not parse cues if hide clusters is "ON" till they point to clusters anyway + $this->current_offset = $element_data['end']; + break; + } + $cues_entry = array(); + + while ($this->getEBMLelement($subelement, $element_data['end'])) { + switch ($subelement['id']) { + + case EBML_ID_CUEPOINT: + $cuepoint_entry = array(); + + while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_CUETRACKPOSITIONS))) { + switch ($sub_subelement['id']) { + + case EBML_ID_CUETRACKPOSITIONS: + $cuetrackpositions_entry = array(); + + while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], true)) { + switch ($sub_sub_subelement['id']) { + + case EBML_ID_CUETRACK: + case EBML_ID_CUECLUSTERPOSITION: + case EBML_ID_CUEBLOCKNUMBER: + case EBML_ID_CUECODECSTATE: + $cuetrackpositions_entry[$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']); + break; + + default: + $this->unhandledElement('cues.cuepoint.cuetrackpositions', __LINE__, $sub_sub_subelement); + } + } + $cuepoint_entry[$sub_subelement['id_name']][] = $cuetrackpositions_entry; + break; + + case EBML_ID_CUETIME: + $cuepoint_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']); + break; + + default: + $this->unhandledElement('cues.cuepoint', __LINE__, $sub_subelement); + } + } + $cues_entry[] = $cuepoint_entry; + break; + + default: + $this->unhandledElement('cues', __LINE__, $subelement); + } + } + $info['matroska']['cues'] = $cues_entry; + break; + + case EBML_ID_TAGS: // Element containing elements specific to Tracks/Chapters. + $tags_entry = array(); + + while ($this->getEBMLelement($subelement, $element_data['end'], false)) { + switch ($subelement['id']) { + + case EBML_ID_TAG: + $tag_entry = array(); + + while ($this->getEBMLelement($sub_subelement, $subelement['end'], false)) { + switch ($sub_subelement['id']) { + + case EBML_ID_TARGETS: + $targets_entry = array(); + + while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], true)) { + switch ($sub_sub_subelement['id']) { + + case EBML_ID_TARGETTYPEVALUE: + $targets_entry[$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']); + $targets_entry[strtolower($sub_sub_subelement['id_name']).'_long'] = self::TargetTypeValue($targets_entry[$sub_sub_subelement['id_name']]); + break; + + case EBML_ID_TARGETTYPE: + $targets_entry[$sub_sub_subelement['id_name']] = $sub_sub_subelement['data']; + break; + + case EBML_ID_TAGTRACKUID: + case EBML_ID_TAGEDITIONUID: + case EBML_ID_TAGCHAPTERUID: + case EBML_ID_TAGATTACHMENTUID: + $targets_entry[$sub_sub_subelement['id_name']][] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']); + break; + + default: + $this->unhandledElement('tags.tag.targets', __LINE__, $sub_sub_subelement); + } + } + $tag_entry[$sub_subelement['id_name']] = $targets_entry; + break; + + case EBML_ID_SIMPLETAG: + $tag_entry[$sub_subelement['id_name']][] = $this->HandleEMBLSimpleTag($sub_subelement['end']); + break; + + default: + $this->unhandledElement('tags.tag', __LINE__, $sub_subelement); + } + } + $tags_entry[] = $tag_entry; + break; + + default: + $this->unhandledElement('tags', __LINE__, $subelement); + } + } + $info['matroska']['tags'] = $tags_entry; + break; + + case EBML_ID_ATTACHMENTS: // Contain attached files. + + while ($this->getEBMLelement($subelement, $element_data['end'])) { + switch ($subelement['id']) { + + case EBML_ID_ATTACHEDFILE: + $attachedfile_entry = array(); + + while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_FILEDATA))) { + switch ($sub_subelement['id']) { + + case EBML_ID_FILEDESCRIPTION: + case EBML_ID_FILENAME: + case EBML_ID_FILEMIMETYPE: + $attachedfile_entry[$sub_subelement['id_name']] = $sub_subelement['data']; + break; + + case EBML_ID_FILEDATA: + $attachedfile_entry['data_offset'] = $this->current_offset; + $attachedfile_entry['data_length'] = $sub_subelement['length']; + + $attachedfile_entry[$sub_subelement['id_name']] = $this->saveAttachment( + $attachedfile_entry['FileName'], + $attachedfile_entry['data_offset'], + $attachedfile_entry['data_length']); + + $this->current_offset = $sub_subelement['end']; + break; + + case EBML_ID_FILEUID: + $attachedfile_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']); + break; + + default: + $this->unhandledElement('attachments.attachedfile', __LINE__, $sub_subelement); + } + } + $info['matroska']['attachments'][] = $attachedfile_entry; + break; + + default: + $this->unhandledElement('attachments', __LINE__, $subelement); + } + } + break; + + case EBML_ID_CHAPTERS: + + while ($this->getEBMLelement($subelement, $element_data['end'])) { + switch ($subelement['id']) { + + case EBML_ID_EDITIONENTRY: + $editionentry_entry = array(); + + while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_CHAPTERATOM))) { + switch ($sub_subelement['id']) { + + case EBML_ID_EDITIONUID: + $editionentry_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']); + break; + + case EBML_ID_EDITIONFLAGHIDDEN: + case EBML_ID_EDITIONFLAGDEFAULT: + case EBML_ID_EDITIONFLAGORDERED: + $editionentry_entry[$sub_subelement['id_name']] = (bool)getid3_lib::BigEndian2Int($sub_subelement['data']); + break; + + case EBML_ID_CHAPTERATOM: + $chapteratom_entry = array(); + + while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], array(EBML_ID_CHAPTERTRACK, EBML_ID_CHAPTERDISPLAY))) { + switch ($sub_sub_subelement['id']) { + + case EBML_ID_CHAPTERSEGMENTUID: + case EBML_ID_CHAPTERSEGMENTEDITIONUID: + $chapteratom_entry[$sub_sub_subelement['id_name']] = $sub_sub_subelement['data']; + break; + + case EBML_ID_CHAPTERFLAGENABLED: + case EBML_ID_CHAPTERFLAGHIDDEN: + $chapteratom_entry[$sub_sub_subelement['id_name']] = (bool)getid3_lib::BigEndian2Int($sub_sub_subelement['data']); + break; + + case EBML_ID_CHAPTERUID: + case EBML_ID_CHAPTERTIMESTART: + case EBML_ID_CHAPTERTIMEEND: + $chapteratom_entry[$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']); + break; + + case EBML_ID_CHAPTERTRACK: + $chaptertrack_entry = array(); + + while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) { + switch ($sub_sub_sub_subelement['id']) { + + case EBML_ID_CHAPTERTRACKNUMBER: + $chaptertrack_entry[$sub_sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_sub_subelement['data']); + break; + + default: + $this->unhandledElement('chapters.editionentry.chapteratom.chaptertrack', __LINE__, $sub_sub_sub_subelement); + } + } + $chapteratom_entry[$sub_sub_subelement['id_name']][] = $chaptertrack_entry; + break; + + case EBML_ID_CHAPTERDISPLAY: + $chapterdisplay_entry = array(); + + while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) { + switch ($sub_sub_sub_subelement['id']) { + + case EBML_ID_CHAPSTRING: + case EBML_ID_CHAPLANGUAGE: + case EBML_ID_CHAPCOUNTRY: + $chapterdisplay_entry[$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data']; + break; + + default: + $this->unhandledElement('chapters.editionentry.chapteratom.chapterdisplay', __LINE__, $sub_sub_sub_subelement); + } + } + $chapteratom_entry[$sub_sub_subelement['id_name']][] = $chapterdisplay_entry; + break; + + default: + $this->unhandledElement('chapters.editionentry.chapteratom', __LINE__, $sub_sub_subelement); + } + } + $editionentry_entry[$sub_subelement['id_name']][] = $chapteratom_entry; + break; + + default: + $this->unhandledElement('chapters.editionentry', __LINE__, $sub_subelement); + } + } + $info['matroska']['chapters'][] = $editionentry_entry; + break; + + default: + $this->unhandledElement('chapters', __LINE__, $subelement); + } + } + break; + + case EBML_ID_CLUSTER: // The lower level element containing the (monolithic) Block structure. + $cluster_entry = array(); + + while ($this->getEBMLelement($subelement, $element_data['end'], array(EBML_ID_CLUSTERSILENTTRACKS, EBML_ID_CLUSTERBLOCKGROUP, EBML_ID_CLUSTERSIMPLEBLOCK))) { + switch ($subelement['id']) { + + case EBML_ID_CLUSTERTIMECODE: + case EBML_ID_CLUSTERPOSITION: + case EBML_ID_CLUSTERPREVSIZE: + $cluster_entry[$subelement['id_name']] = getid3_lib::BigEndian2Int($subelement['data']); + break; + + case EBML_ID_CLUSTERSILENTTRACKS: + $cluster_silent_tracks = array(); + + while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) { + switch ($sub_subelement['id']) { + + case EBML_ID_CLUSTERSILENTTRACKNUMBER: + $cluster_silent_tracks[] = getid3_lib::BigEndian2Int($sub_subelement['data']); + break; + + default: + $this->unhandledElement('cluster.silenttracks', __LINE__, $sub_subelement); + } + } + $cluster_entry[$subelement['id_name']][] = $cluster_silent_tracks; + break; + + case EBML_ID_CLUSTERBLOCKGROUP: + $cluster_block_group = array('offset' => $this->current_offset); + + while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_CLUSTERBLOCK))) { + switch ($sub_subelement['id']) { + + case EBML_ID_CLUSTERBLOCK: + $cluster_block_group[$sub_subelement['id_name']] = $this->HandleEMBLClusterBlock($sub_subelement, EBML_ID_CLUSTERBLOCK, $info); + break; + + case EBML_ID_CLUSTERREFERENCEPRIORITY: // unsigned-int + case EBML_ID_CLUSTERBLOCKDURATION: // unsigned-int + $cluster_block_group[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']); + break; + + case EBML_ID_CLUSTERREFERENCEBLOCK: // signed-int + $cluster_block_group[$sub_subelement['id_name']][] = getid3_lib::BigEndian2Int($sub_subelement['data'], false, true); + break; + + case EBML_ID_CLUSTERCODECSTATE: + $cluster_block_group[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']); + break; + + default: + $this->unhandledElement('clusters.blockgroup', __LINE__, $sub_subelement); + } + } + $cluster_entry[$subelement['id_name']][] = $cluster_block_group; + break; + + case EBML_ID_CLUSTERSIMPLEBLOCK: + $cluster_entry[$subelement['id_name']][] = $this->HandleEMBLClusterBlock($subelement, EBML_ID_CLUSTERSIMPLEBLOCK, $info); + break; + + default: + $this->unhandledElement('cluster', __LINE__, $subelement); + } + $this->current_offset = $subelement['end']; + } + if (!self::$hide_clusters) { + $info['matroska']['cluster'][] = $cluster_entry; + } + + // check to see if all the data we need exists already, if so, break out of the loop + if (!self::$parse_whole_file) { + if (isset($info['matroska']['info']) && is_array($info['matroska']['info'])) { + if (isset($info['matroska']['tracks']['tracks']) && is_array($info['matroska']['tracks']['tracks'])) { + if (count($info['matroska']['track_data_offsets']) == count($info['matroska']['tracks']['tracks'])) { + return; + } + } + } + } + break; + + default: + $this->unhandledElement('segment', __LINE__, $element_data); + } + } + break; + + default: + $this->unhandledElement('root', __LINE__, $top_element); + } + } + } + + private function EnsureBufferHasEnoughData($min_data=1024) { + if (($this->current_offset - $this->EBMLbuffer_offset) >= ($this->EBMLbuffer_length - $min_data)) { + $read_bytes = max($min_data, $this->getid3->fread_buffer_size()); + + try { + $this->fseek($this->current_offset); + $this->EBMLbuffer_offset = $this->current_offset; + $this->EBMLbuffer = $this->fread($read_bytes); + $this->EBMLbuffer_length = strlen($this->EBMLbuffer); + } catch (getid3_exception $e) { + $this->warning('EBML parser: '.$e->getMessage()); + return false; + } + + if ($this->EBMLbuffer_length == 0 && $this->feof()) { + return $this->error('EBML parser: ran out of file at offset '.$this->current_offset); + } + } + return true; + } + + private function readEBMLint() { + $actual_offset = $this->current_offset - $this->EBMLbuffer_offset; + + // get length of integer + $first_byte_int = ord($this->EBMLbuffer[$actual_offset]); + if (0x80 & $first_byte_int) { + $length = 1; + } elseif (0x40 & $first_byte_int) { + $length = 2; + } elseif (0x20 & $first_byte_int) { + $length = 3; + } elseif (0x10 & $first_byte_int) { + $length = 4; + } elseif (0x08 & $first_byte_int) { + $length = 5; + } elseif (0x04 & $first_byte_int) { + $length = 6; + } elseif (0x02 & $first_byte_int) { + $length = 7; + } elseif (0x01 & $first_byte_int) { + $length = 8; + } else { + throw new Exception('invalid EBML integer (leading 0x00) at '.$this->current_offset); + } + + // read + $int_value = self::EBML2Int(substr($this->EBMLbuffer, $actual_offset, $length)); + $this->current_offset += $length; + + return $int_value; + } + + private function readEBMLelementData($length, $check_buffer=false) { + if ($check_buffer && !$this->EnsureBufferHasEnoughData($length)) { + return false; + } + $data = substr($this->EBMLbuffer, $this->current_offset - $this->EBMLbuffer_offset, $length); + $this->current_offset += $length; + return $data; + } + + private function getEBMLelement(&$element, $parent_end, $get_data=false) { + if ($this->current_offset >= $parent_end) { + return false; + } + + if (!$this->EnsureBufferHasEnoughData()) { + $this->current_offset = PHP_INT_MAX; // do not exit parser right now, allow to finish current loop to gather maximum information + return false; + } + + $element = array(); + + // set offset + $element['offset'] = $this->current_offset; + + // get ID + $element['id'] = $this->readEBMLint(); + + // get name + $element['id_name'] = self::EBMLidName($element['id']); + + // get length + $element['length'] = $this->readEBMLint(); + + // get end offset + $element['end'] = $this->current_offset + $element['length']; + + // get raw data + $dont_parse = (in_array($element['id'], $this->unuseful_elements) || $element['id_name'] == dechex($element['id'])); + if (($get_data === true || (is_array($get_data) && !in_array($element['id'], $get_data))) && !$dont_parse) { + $element['data'] = $this->readEBMLelementData($element['length'], $element); + } + + return true; + } + + private function unhandledElement($type, $line, $element) { + // warn only about unknown and missed elements, not about unuseful + if (!in_array($element['id'], $this->unuseful_elements)) { + $this->warning('Unhandled '.$type.' element ['.basename(__FILE__).':'.$line.'] ('.$element['id'].'::'.$element['id_name'].' ['.$element['length'].' bytes]) at '.$element['offset']); + } + + // increase offset for unparsed elements + if (!isset($element['data'])) { + $this->current_offset = $element['end']; + } + } + + private function ExtractCommentsSimpleTag($SimpleTagArray) { + if (!empty($SimpleTagArray['SimpleTag'])) { + foreach ($SimpleTagArray['SimpleTag'] as $SimpleTagKey => $SimpleTagData) { + if (!empty($SimpleTagData['TagName']) && !empty($SimpleTagData['TagString'])) { + $this->getid3->info['matroska']['comments'][strtolower($SimpleTagData['TagName'])][] = $SimpleTagData['TagString']; + } + if (!empty($SimpleTagData['SimpleTag'])) { + $this->ExtractCommentsSimpleTag($SimpleTagData); + } + } + } + + return true; + } + + private function HandleEMBLSimpleTag($parent_end) { + $simpletag_entry = array(); + + while ($this->getEBMLelement($element, $parent_end, array(EBML_ID_SIMPLETAG))) { + switch ($element['id']) { + + case EBML_ID_TAGNAME: + case EBML_ID_TAGLANGUAGE: + case EBML_ID_TAGSTRING: + case EBML_ID_TAGBINARY: + $simpletag_entry[$element['id_name']] = $element['data']; + break; + + case EBML_ID_SIMPLETAG: + $simpletag_entry[$element['id_name']][] = $this->HandleEMBLSimpleTag($element['end']); + break; + + case EBML_ID_TAGDEFAULT: + $simpletag_entry[$element['id_name']] = (bool)getid3_lib::BigEndian2Int($element['data']); + break; + + default: + $this->unhandledElement('tag.simpletag', __LINE__, $element); + } + } + + return $simpletag_entry; + } + + private function HandleEMBLClusterBlock($element, $block_type, &$info) { + // http://www.matroska.org/technical/specs/index.html#block_structure + // http://www.matroska.org/technical/specs/index.html#simpleblock_structure + + $block_data = array(); + $block_data['tracknumber'] = $this->readEBMLint(); + $block_data['timecode'] = getid3_lib::BigEndian2Int($this->readEBMLelementData(2), false, true); + $block_data['flags_raw'] = getid3_lib::BigEndian2Int($this->readEBMLelementData(1)); + + if ($block_type == EBML_ID_CLUSTERSIMPLEBLOCK) { + $block_data['flags']['keyframe'] = (($block_data['flags_raw'] & 0x80) >> 7); + //$block_data['flags']['reserved1'] = (($block_data['flags_raw'] & 0x70) >> 4); + } + else { + //$block_data['flags']['reserved1'] = (($block_data['flags_raw'] & 0xF0) >> 4); + } + $block_data['flags']['invisible'] = (bool)(($block_data['flags_raw'] & 0x08) >> 3); + $block_data['flags']['lacing'] = (($block_data['flags_raw'] & 0x06) >> 1); // 00=no lacing; 01=Xiph lacing; 11=EBML lacing; 10=fixed-size lacing + if ($block_type == EBML_ID_CLUSTERSIMPLEBLOCK) { + $block_data['flags']['discardable'] = (($block_data['flags_raw'] & 0x01)); + } + else { + //$block_data['flags']['reserved2'] = (($block_data['flags_raw'] & 0x01) >> 0); + } + $block_data['flags']['lacing_type'] = self::BlockLacingType($block_data['flags']['lacing']); + + // Lace (when lacing bit is set) + if ($block_data['flags']['lacing'] > 0) { + $block_data['lace_frames'] = getid3_lib::BigEndian2Int($this->readEBMLelementData(1)) + 1; // Number of frames in the lace-1 (uint8) + if ($block_data['flags']['lacing'] != 0x02) { + for ($i = 1; $i < $block_data['lace_frames']; $i ++) { // Lace-coded size of each frame of the lace, except for the last one (multiple uint8). *This is not used with Fixed-size lacing as it is calculated automatically from (total size of lace) / (number of frames in lace). + if ($block_data['flags']['lacing'] == 0x03) { // EBML lacing + $block_data['lace_frames_size'][$i] = $this->readEBMLint(); // TODO: read size correctly, calc size for the last frame. For now offsets are deteminded OK with readEBMLint() and that's the most important thing. + } + else { // Xiph lacing + $block_data['lace_frames_size'][$i] = 0; + do { + $size = getid3_lib::BigEndian2Int($this->readEBMLelementData(1)); + $block_data['lace_frames_size'][$i] += $size; + } + while ($size == 255); + } + } + if ($block_data['flags']['lacing'] == 0x01) { // calc size of the last frame only for Xiph lacing, till EBML sizes are now anyway determined incorrectly + $block_data['lace_frames_size'][] = $element['end'] - $this->current_offset - array_sum($block_data['lace_frames_size']); + } + } + } + + if (!isset($info['matroska']['track_data_offsets'][$block_data['tracknumber']])) { + $info['matroska']['track_data_offsets'][$block_data['tracknumber']]['offset'] = $this->current_offset; + $info['matroska']['track_data_offsets'][$block_data['tracknumber']]['length'] = $element['end'] - $this->current_offset; + //$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['total_length'] = 0; + } + //$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['total_length'] += $info['matroska']['track_data_offsets'][$block_data['tracknumber']]['length']; + //$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['duration'] = $block_data['timecode'] * ((isset($info['matroska']['info'][0]['TimecodeScale']) ? $info['matroska']['info'][0]['TimecodeScale'] : 1000000) / 1000000000); + + // set offset manually + $this->current_offset = $element['end']; + + return $block_data; + } + + private static function EBML2Int($EBMLstring) { + // http://matroska.org/specs/ + + // Element ID coded with an UTF-8 like system: + // 1xxx xxxx - Class A IDs (2^7 -2 possible values) (base 0x8X) + // 01xx xxxx xxxx xxxx - Class B IDs (2^14-2 possible values) (base 0x4X 0xXX) + // 001x xxxx xxxx xxxx xxxx xxxx - Class C IDs (2^21-2 possible values) (base 0x2X 0xXX 0xXX) + // 0001 xxxx xxxx xxxx xxxx xxxx xxxx xxxx - Class D IDs (2^28-2 possible values) (base 0x1X 0xXX 0xXX 0xXX) + // Values with all x at 0 and 1 are reserved (hence the -2). + + // Data size, in octets, is also coded with an UTF-8 like system : + // 1xxx xxxx - value 0 to 2^7-2 + // 01xx xxxx xxxx xxxx - value 0 to 2^14-2 + // 001x xxxx xxxx xxxx xxxx xxxx - value 0 to 2^21-2 + // 0001 xxxx xxxx xxxx xxxx xxxx xxxx xxxx - value 0 to 2^28-2 + // 0000 1xxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx - value 0 to 2^35-2 + // 0000 01xx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx - value 0 to 2^42-2 + // 0000 001x xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx - value 0 to 2^49-2 + // 0000 0001 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx - value 0 to 2^56-2 + + $first_byte_int = ord($EBMLstring[0]); + if (0x80 & $first_byte_int) { + $EBMLstring[0] = chr($first_byte_int & 0x7F); + } elseif (0x40 & $first_byte_int) { + $EBMLstring[0] = chr($first_byte_int & 0x3F); + } elseif (0x20 & $first_byte_int) { + $EBMLstring[0] = chr($first_byte_int & 0x1F); + } elseif (0x10 & $first_byte_int) { + $EBMLstring[0] = chr($first_byte_int & 0x0F); + } elseif (0x08 & $first_byte_int) { + $EBMLstring[0] = chr($first_byte_int & 0x07); + } elseif (0x04 & $first_byte_int) { + $EBMLstring[0] = chr($first_byte_int & 0x03); + } elseif (0x02 & $first_byte_int) { + $EBMLstring[0] = chr($first_byte_int & 0x01); + } elseif (0x01 & $first_byte_int) { + $EBMLstring[0] = chr($first_byte_int & 0x00); + } + + return getid3_lib::BigEndian2Int($EBMLstring); + } + + private static function EBMLdate2unix($EBMLdatestamp) { + // Date - signed 8 octets integer in nanoseconds with 0 indicating the precise beginning of the millennium (at 2001-01-01T00:00:00,000000000 UTC) + // 978307200 == mktime(0, 0, 0, 1, 1, 2001) == January 1, 2001 12:00:00am UTC + return round(($EBMLdatestamp / 1000000000) + 978307200); + } + + public static function TargetTypeValue($target_type) { + // http://www.matroska.org/technical/specs/tagging/index.html + static $TargetTypeValue = array(); + if (empty($TargetTypeValue)) { + $TargetTypeValue[10] = 'A: ~ V:shot'; // the lowest hierarchy found in music or movies + $TargetTypeValue[20] = 'A:subtrack/part/movement ~ V:scene'; // corresponds to parts of a track for audio (like a movement) + $TargetTypeValue[30] = 'A:track/song ~ V:chapter'; // the common parts of an album or a movie + $TargetTypeValue[40] = 'A:part/session ~ V:part/session'; // when an album or episode has different logical parts + $TargetTypeValue[50] = 'A:album/opera/concert ~ V:movie/episode/concert'; // the most common grouping level of music and video (equals to an episode for TV series) + $TargetTypeValue[60] = 'A:edition/issue/volume/opus ~ V:season/sequel/volume'; // a list of lower levels grouped together + $TargetTypeValue[70] = 'A:collection ~ V:collection'; // the high hierarchy consisting of many different lower items + } + return (isset($TargetTypeValue[$target_type]) ? $TargetTypeValue[$target_type] : $target_type); + } + + public static function BlockLacingType($lacingtype) { + // http://matroska.org/technical/specs/index.html#block_structure + static $BlockLacingType = array(); + if (empty($BlockLacingType)) { + $BlockLacingType[0x00] = 'no lacing'; + $BlockLacingType[0x01] = 'Xiph lacing'; + $BlockLacingType[0x02] = 'fixed-size lacing'; + $BlockLacingType[0x03] = 'EBML lacing'; + } + return (isset($BlockLacingType[$lacingtype]) ? $BlockLacingType[$lacingtype] : $lacingtype); + } + + public static function CodecIDtoCommonName($codecid) { + // http://www.matroska.org/technical/specs/codecid/index.html + static $CodecIDlist = array(); + if (empty($CodecIDlist)) { + $CodecIDlist['A_AAC'] = 'aac'; + $CodecIDlist['A_AAC/MPEG2/LC'] = 'aac'; + $CodecIDlist['A_AC3'] = 'ac3'; + $CodecIDlist['A_DTS'] = 'dts'; + $CodecIDlist['A_FLAC'] = 'flac'; + $CodecIDlist['A_MPEG/L1'] = 'mp1'; + $CodecIDlist['A_MPEG/L2'] = 'mp2'; + $CodecIDlist['A_MPEG/L3'] = 'mp3'; + $CodecIDlist['A_PCM/INT/LIT'] = 'pcm'; // PCM Integer Little Endian + $CodecIDlist['A_PCM/INT/BIG'] = 'pcm'; // PCM Integer Big Endian + $CodecIDlist['A_QUICKTIME/QDMC'] = 'quicktime'; // Quicktime: QDesign Music + $CodecIDlist['A_QUICKTIME/QDM2'] = 'quicktime'; // Quicktime: QDesign Music v2 + $CodecIDlist['A_VORBIS'] = 'vorbis'; + $CodecIDlist['V_MPEG1'] = 'mpeg'; + $CodecIDlist['V_THEORA'] = 'theora'; + $CodecIDlist['V_REAL/RV40'] = 'real'; + $CodecIDlist['V_REAL/RV10'] = 'real'; + $CodecIDlist['V_REAL/RV20'] = 'real'; + $CodecIDlist['V_REAL/RV30'] = 'real'; + $CodecIDlist['V_QUICKTIME'] = 'quicktime'; // Quicktime + $CodecIDlist['V_MPEG4/ISO/AP'] = 'mpeg4'; + $CodecIDlist['V_MPEG4/ISO/ASP'] = 'mpeg4'; + $CodecIDlist['V_MPEG4/ISO/AVC'] = 'h264'; + $CodecIDlist['V_MPEG4/ISO/SP'] = 'mpeg4'; + $CodecIDlist['V_VP8'] = 'vp8'; + $CodecIDlist['V_MS/VFW/FOURCC'] = 'riff'; + $CodecIDlist['A_MS/ACM'] = 'riff'; + } + return (isset($CodecIDlist[$codecid]) ? $CodecIDlist[$codecid] : $codecid); + } + + private static function EBMLidName($value) { + static $EBMLidList = array(); + if (empty($EBMLidList)) { + $EBMLidList[EBML_ID_ASPECTRATIOTYPE] = 'AspectRatioType'; + $EBMLidList[EBML_ID_ATTACHEDFILE] = 'AttachedFile'; + $EBMLidList[EBML_ID_ATTACHMENTLINK] = 'AttachmentLink'; + $EBMLidList[EBML_ID_ATTACHMENTS] = 'Attachments'; + $EBMLidList[EBML_ID_AUDIO] = 'Audio'; + $EBMLidList[EBML_ID_BITDEPTH] = 'BitDepth'; + $EBMLidList[EBML_ID_CHANNELPOSITIONS] = 'ChannelPositions'; + $EBMLidList[EBML_ID_CHANNELS] = 'Channels'; + $EBMLidList[EBML_ID_CHAPCOUNTRY] = 'ChapCountry'; + $EBMLidList[EBML_ID_CHAPLANGUAGE] = 'ChapLanguage'; + $EBMLidList[EBML_ID_CHAPPROCESS] = 'ChapProcess'; + $EBMLidList[EBML_ID_CHAPPROCESSCODECID] = 'ChapProcessCodecID'; + $EBMLidList[EBML_ID_CHAPPROCESSCOMMAND] = 'ChapProcessCommand'; + $EBMLidList[EBML_ID_CHAPPROCESSDATA] = 'ChapProcessData'; + $EBMLidList[EBML_ID_CHAPPROCESSPRIVATE] = 'ChapProcessPrivate'; + $EBMLidList[EBML_ID_CHAPPROCESSTIME] = 'ChapProcessTime'; + $EBMLidList[EBML_ID_CHAPSTRING] = 'ChapString'; + $EBMLidList[EBML_ID_CHAPTERATOM] = 'ChapterAtom'; + $EBMLidList[EBML_ID_CHAPTERDISPLAY] = 'ChapterDisplay'; + $EBMLidList[EBML_ID_CHAPTERFLAGENABLED] = 'ChapterFlagEnabled'; + $EBMLidList[EBML_ID_CHAPTERFLAGHIDDEN] = 'ChapterFlagHidden'; + $EBMLidList[EBML_ID_CHAPTERPHYSICALEQUIV] = 'ChapterPhysicalEquiv'; + $EBMLidList[EBML_ID_CHAPTERS] = 'Chapters'; + $EBMLidList[EBML_ID_CHAPTERSEGMENTEDITIONUID] = 'ChapterSegmentEditionUID'; + $EBMLidList[EBML_ID_CHAPTERSEGMENTUID] = 'ChapterSegmentUID'; + $EBMLidList[EBML_ID_CHAPTERTIMEEND] = 'ChapterTimeEnd'; + $EBMLidList[EBML_ID_CHAPTERTIMESTART] = 'ChapterTimeStart'; + $EBMLidList[EBML_ID_CHAPTERTRACK] = 'ChapterTrack'; + $EBMLidList[EBML_ID_CHAPTERTRACKNUMBER] = 'ChapterTrackNumber'; + $EBMLidList[EBML_ID_CHAPTERTRANSLATE] = 'ChapterTranslate'; + $EBMLidList[EBML_ID_CHAPTERTRANSLATECODEC] = 'ChapterTranslateCodec'; + $EBMLidList[EBML_ID_CHAPTERTRANSLATEEDITIONUID] = 'ChapterTranslateEditionUID'; + $EBMLidList[EBML_ID_CHAPTERTRANSLATEID] = 'ChapterTranslateID'; + $EBMLidList[EBML_ID_CHAPTERUID] = 'ChapterUID'; + $EBMLidList[EBML_ID_CLUSTER] = 'Cluster'; + $EBMLidList[EBML_ID_CLUSTERBLOCK] = 'ClusterBlock'; + $EBMLidList[EBML_ID_CLUSTERBLOCKADDID] = 'ClusterBlockAddID'; + $EBMLidList[EBML_ID_CLUSTERBLOCKADDITIONAL] = 'ClusterBlockAdditional'; + $EBMLidList[EBML_ID_CLUSTERBLOCKADDITIONID] = 'ClusterBlockAdditionID'; + $EBMLidList[EBML_ID_CLUSTERBLOCKADDITIONS] = 'ClusterBlockAdditions'; + $EBMLidList[EBML_ID_CLUSTERBLOCKDURATION] = 'ClusterBlockDuration'; + $EBMLidList[EBML_ID_CLUSTERBLOCKGROUP] = 'ClusterBlockGroup'; + $EBMLidList[EBML_ID_CLUSTERBLOCKMORE] = 'ClusterBlockMore'; + $EBMLidList[EBML_ID_CLUSTERBLOCKVIRTUAL] = 'ClusterBlockVirtual'; + $EBMLidList[EBML_ID_CLUSTERCODECSTATE] = 'ClusterCodecState'; + $EBMLidList[EBML_ID_CLUSTERDELAY] = 'ClusterDelay'; + $EBMLidList[EBML_ID_CLUSTERDURATION] = 'ClusterDuration'; + $EBMLidList[EBML_ID_CLUSTERENCRYPTEDBLOCK] = 'ClusterEncryptedBlock'; + $EBMLidList[EBML_ID_CLUSTERFRAMENUMBER] = 'ClusterFrameNumber'; + $EBMLidList[EBML_ID_CLUSTERLACENUMBER] = 'ClusterLaceNumber'; + $EBMLidList[EBML_ID_CLUSTERPOSITION] = 'ClusterPosition'; + $EBMLidList[EBML_ID_CLUSTERPREVSIZE] = 'ClusterPrevSize'; + $EBMLidList[EBML_ID_CLUSTERREFERENCEBLOCK] = 'ClusterReferenceBlock'; + $EBMLidList[EBML_ID_CLUSTERREFERENCEPRIORITY] = 'ClusterReferencePriority'; + $EBMLidList[EBML_ID_CLUSTERREFERENCEVIRTUAL] = 'ClusterReferenceVirtual'; + $EBMLidList[EBML_ID_CLUSTERSILENTTRACKNUMBER] = 'ClusterSilentTrackNumber'; + $EBMLidList[EBML_ID_CLUSTERSILENTTRACKS] = 'ClusterSilentTracks'; + $EBMLidList[EBML_ID_CLUSTERSIMPLEBLOCK] = 'ClusterSimpleBlock'; + $EBMLidList[EBML_ID_CLUSTERTIMECODE] = 'ClusterTimecode'; + $EBMLidList[EBML_ID_CLUSTERTIMESLICE] = 'ClusterTimeSlice'; + $EBMLidList[EBML_ID_CODECDECODEALL] = 'CodecDecodeAll'; + $EBMLidList[EBML_ID_CODECDOWNLOADURL] = 'CodecDownloadURL'; + $EBMLidList[EBML_ID_CODECID] = 'CodecID'; + $EBMLidList[EBML_ID_CODECINFOURL] = 'CodecInfoURL'; + $EBMLidList[EBML_ID_CODECNAME] = 'CodecName'; + $EBMLidList[EBML_ID_CODECPRIVATE] = 'CodecPrivate'; + $EBMLidList[EBML_ID_CODECSETTINGS] = 'CodecSettings'; + $EBMLidList[EBML_ID_COLOURSPACE] = 'ColourSpace'; + $EBMLidList[EBML_ID_CONTENTCOMPALGO] = 'ContentCompAlgo'; + $EBMLidList[EBML_ID_CONTENTCOMPRESSION] = 'ContentCompression'; + $EBMLidList[EBML_ID_CONTENTCOMPSETTINGS] = 'ContentCompSettings'; + $EBMLidList[EBML_ID_CONTENTENCALGO] = 'ContentEncAlgo'; + $EBMLidList[EBML_ID_CONTENTENCKEYID] = 'ContentEncKeyID'; + $EBMLidList[EBML_ID_CONTENTENCODING] = 'ContentEncoding'; + $EBMLidList[EBML_ID_CONTENTENCODINGORDER] = 'ContentEncodingOrder'; + $EBMLidList[EBML_ID_CONTENTENCODINGS] = 'ContentEncodings'; + $EBMLidList[EBML_ID_CONTENTENCODINGSCOPE] = 'ContentEncodingScope'; + $EBMLidList[EBML_ID_CONTENTENCODINGTYPE] = 'ContentEncodingType'; + $EBMLidList[EBML_ID_CONTENTENCRYPTION] = 'ContentEncryption'; + $EBMLidList[EBML_ID_CONTENTSIGALGO] = 'ContentSigAlgo'; + $EBMLidList[EBML_ID_CONTENTSIGHASHALGO] = 'ContentSigHashAlgo'; + $EBMLidList[EBML_ID_CONTENTSIGKEYID] = 'ContentSigKeyID'; + $EBMLidList[EBML_ID_CONTENTSIGNATURE] = 'ContentSignature'; + $EBMLidList[EBML_ID_CRC32] = 'CRC32'; + $EBMLidList[EBML_ID_CUEBLOCKNUMBER] = 'CueBlockNumber'; + $EBMLidList[EBML_ID_CUECLUSTERPOSITION] = 'CueClusterPosition'; + $EBMLidList[EBML_ID_CUECODECSTATE] = 'CueCodecState'; + $EBMLidList[EBML_ID_CUEPOINT] = 'CuePoint'; + $EBMLidList[EBML_ID_CUEREFCLUSTER] = 'CueRefCluster'; + $EBMLidList[EBML_ID_CUEREFCODECSTATE] = 'CueRefCodecState'; + $EBMLidList[EBML_ID_CUEREFERENCE] = 'CueReference'; + $EBMLidList[EBML_ID_CUEREFNUMBER] = 'CueRefNumber'; + $EBMLidList[EBML_ID_CUEREFTIME] = 'CueRefTime'; + $EBMLidList[EBML_ID_CUES] = 'Cues'; + $EBMLidList[EBML_ID_CUETIME] = 'CueTime'; + $EBMLidList[EBML_ID_CUETRACK] = 'CueTrack'; + $EBMLidList[EBML_ID_CUETRACKPOSITIONS] = 'CueTrackPositions'; + $EBMLidList[EBML_ID_DATEUTC] = 'DateUTC'; + $EBMLidList[EBML_ID_DEFAULTDURATION] = 'DefaultDuration'; + $EBMLidList[EBML_ID_DISPLAYHEIGHT] = 'DisplayHeight'; + $EBMLidList[EBML_ID_DISPLAYUNIT] = 'DisplayUnit'; + $EBMLidList[EBML_ID_DISPLAYWIDTH] = 'DisplayWidth'; + $EBMLidList[EBML_ID_DOCTYPE] = 'DocType'; + $EBMLidList[EBML_ID_DOCTYPEREADVERSION] = 'DocTypeReadVersion'; + $EBMLidList[EBML_ID_DOCTYPEVERSION] = 'DocTypeVersion'; + $EBMLidList[EBML_ID_DURATION] = 'Duration'; + $EBMLidList[EBML_ID_EBML] = 'EBML'; + $EBMLidList[EBML_ID_EBMLMAXIDLENGTH] = 'EBMLMaxIDLength'; + $EBMLidList[EBML_ID_EBMLMAXSIZELENGTH] = 'EBMLMaxSizeLength'; + $EBMLidList[EBML_ID_EBMLREADVERSION] = 'EBMLReadVersion'; + $EBMLidList[EBML_ID_EBMLVERSION] = 'EBMLVersion'; + $EBMLidList[EBML_ID_EDITIONENTRY] = 'EditionEntry'; + $EBMLidList[EBML_ID_EDITIONFLAGDEFAULT] = 'EditionFlagDefault'; + $EBMLidList[EBML_ID_EDITIONFLAGHIDDEN] = 'EditionFlagHidden'; + $EBMLidList[EBML_ID_EDITIONFLAGORDERED] = 'EditionFlagOrdered'; + $EBMLidList[EBML_ID_EDITIONUID] = 'EditionUID'; + $EBMLidList[EBML_ID_FILEDATA] = 'FileData'; + $EBMLidList[EBML_ID_FILEDESCRIPTION] = 'FileDescription'; + $EBMLidList[EBML_ID_FILEMIMETYPE] = 'FileMimeType'; + $EBMLidList[EBML_ID_FILENAME] = 'FileName'; + $EBMLidList[EBML_ID_FILEREFERRAL] = 'FileReferral'; + $EBMLidList[EBML_ID_FILEUID] = 'FileUID'; + $EBMLidList[EBML_ID_FLAGDEFAULT] = 'FlagDefault'; + $EBMLidList[EBML_ID_FLAGENABLED] = 'FlagEnabled'; + $EBMLidList[EBML_ID_FLAGFORCED] = 'FlagForced'; + $EBMLidList[EBML_ID_FLAGINTERLACED] = 'FlagInterlaced'; + $EBMLidList[EBML_ID_FLAGLACING] = 'FlagLacing'; + $EBMLidList[EBML_ID_GAMMAVALUE] = 'GammaValue'; + $EBMLidList[EBML_ID_INFO] = 'Info'; + $EBMLidList[EBML_ID_LANGUAGE] = 'Language'; + $EBMLidList[EBML_ID_MAXBLOCKADDITIONID] = 'MaxBlockAdditionID'; + $EBMLidList[EBML_ID_MAXCACHE] = 'MaxCache'; + $EBMLidList[EBML_ID_MINCACHE] = 'MinCache'; + $EBMLidList[EBML_ID_MUXINGAPP] = 'MuxingApp'; + $EBMLidList[EBML_ID_NAME] = 'Name'; + $EBMLidList[EBML_ID_NEXTFILENAME] = 'NextFilename'; + $EBMLidList[EBML_ID_NEXTUID] = 'NextUID'; + $EBMLidList[EBML_ID_OUTPUTSAMPLINGFREQUENCY] = 'OutputSamplingFrequency'; + $EBMLidList[EBML_ID_PIXELCROPBOTTOM] = 'PixelCropBottom'; + $EBMLidList[EBML_ID_PIXELCROPLEFT] = 'PixelCropLeft'; + $EBMLidList[EBML_ID_PIXELCROPRIGHT] = 'PixelCropRight'; + $EBMLidList[EBML_ID_PIXELCROPTOP] = 'PixelCropTop'; + $EBMLidList[EBML_ID_PIXELHEIGHT] = 'PixelHeight'; + $EBMLidList[EBML_ID_PIXELWIDTH] = 'PixelWidth'; + $EBMLidList[EBML_ID_PREVFILENAME] = 'PrevFilename'; + $EBMLidList[EBML_ID_PREVUID] = 'PrevUID'; + $EBMLidList[EBML_ID_SAMPLINGFREQUENCY] = 'SamplingFrequency'; + $EBMLidList[EBML_ID_SEEK] = 'Seek'; + $EBMLidList[EBML_ID_SEEKHEAD] = 'SeekHead'; + $EBMLidList[EBML_ID_SEEKID] = 'SeekID'; + $EBMLidList[EBML_ID_SEEKPOSITION] = 'SeekPosition'; + $EBMLidList[EBML_ID_SEGMENT] = 'Segment'; + $EBMLidList[EBML_ID_SEGMENTFAMILY] = 'SegmentFamily'; + $EBMLidList[EBML_ID_SEGMENTFILENAME] = 'SegmentFilename'; + $EBMLidList[EBML_ID_SEGMENTUID] = 'SegmentUID'; + $EBMLidList[EBML_ID_SIMPLETAG] = 'SimpleTag'; + $EBMLidList[EBML_ID_CLUSTERSLICES] = 'ClusterSlices'; + $EBMLidList[EBML_ID_STEREOMODE] = 'StereoMode'; + $EBMLidList[EBML_ID_OLDSTEREOMODE] = 'OldStereoMode'; + $EBMLidList[EBML_ID_TAG] = 'Tag'; + $EBMLidList[EBML_ID_TAGATTACHMENTUID] = 'TagAttachmentUID'; + $EBMLidList[EBML_ID_TAGBINARY] = 'TagBinary'; + $EBMLidList[EBML_ID_TAGCHAPTERUID] = 'TagChapterUID'; + $EBMLidList[EBML_ID_TAGDEFAULT] = 'TagDefault'; + $EBMLidList[EBML_ID_TAGEDITIONUID] = 'TagEditionUID'; + $EBMLidList[EBML_ID_TAGLANGUAGE] = 'TagLanguage'; + $EBMLidList[EBML_ID_TAGNAME] = 'TagName'; + $EBMLidList[EBML_ID_TAGTRACKUID] = 'TagTrackUID'; + $EBMLidList[EBML_ID_TAGS] = 'Tags'; + $EBMLidList[EBML_ID_TAGSTRING] = 'TagString'; + $EBMLidList[EBML_ID_TARGETS] = 'Targets'; + $EBMLidList[EBML_ID_TARGETTYPE] = 'TargetType'; + $EBMLidList[EBML_ID_TARGETTYPEVALUE] = 'TargetTypeValue'; + $EBMLidList[EBML_ID_TIMECODESCALE] = 'TimecodeScale'; + $EBMLidList[EBML_ID_TITLE] = 'Title'; + $EBMLidList[EBML_ID_TRACKENTRY] = 'TrackEntry'; + $EBMLidList[EBML_ID_TRACKNUMBER] = 'TrackNumber'; + $EBMLidList[EBML_ID_TRACKOFFSET] = 'TrackOffset'; + $EBMLidList[EBML_ID_TRACKOVERLAY] = 'TrackOverlay'; + $EBMLidList[EBML_ID_TRACKS] = 'Tracks'; + $EBMLidList[EBML_ID_TRACKTIMECODESCALE] = 'TrackTimecodeScale'; + $EBMLidList[EBML_ID_TRACKTRANSLATE] = 'TrackTranslate'; + $EBMLidList[EBML_ID_TRACKTRANSLATECODEC] = 'TrackTranslateCodec'; + $EBMLidList[EBML_ID_TRACKTRANSLATEEDITIONUID] = 'TrackTranslateEditionUID'; + $EBMLidList[EBML_ID_TRACKTRANSLATETRACKID] = 'TrackTranslateTrackID'; + $EBMLidList[EBML_ID_TRACKTYPE] = 'TrackType'; + $EBMLidList[EBML_ID_TRACKUID] = 'TrackUID'; + $EBMLidList[EBML_ID_VIDEO] = 'Video'; + $EBMLidList[EBML_ID_VOID] = 'Void'; + $EBMLidList[EBML_ID_WRITINGAPP] = 'WritingApp'; + } + + return (isset($EBMLidList[$value]) ? $EBMLidList[$value] : dechex($value)); + } + + public static function displayUnit($value) { + // http://www.matroska.org/technical/specs/index.html#DisplayUnit + static $units = array( + 0 => 'pixels', + 1 => 'centimeters', + 2 => 'inches', + 3 => 'Display Aspect Ratio'); + + return (isset($units[$value]) ? $units[$value] : 'unknown'); + } + + private static function getDefaultStreamInfo($streams) + { + foreach (array_reverse($streams) as $stream) { + if ($stream['default']) { + break; + } + } + + $unset = array('default', 'name'); + foreach ($unset as $u) { + if (isset($stream[$u])) { + unset($stream[$u]); + } + } + + $info = $stream; + $info['streams'] = $streams; + + return $info; + } + +} diff --git a/src/wp-includes/ID3/module.audio-video.quicktime.php b/src/wp-includes/ID3/module.audio-video.quicktime.php new file mode 100644 index 0000000..1b5ad5f --- /dev/null +++ b/src/wp-includes/ID3/module.audio-video.quicktime.php @@ -0,0 +1,2221 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +// // +// module.audio-video.quicktime.php // +// module for analyzing Quicktime and MP3-in-MP4 files // +// dependencies: module.audio.mp3.php // +// dependencies: module.tag.id3v2.php // +// /// +///////////////////////////////////////////////////////////////// + +getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.mp3.php', __FILE__, true); +getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v2.php', __FILE__, true); // needed for ISO 639-2 language code lookup + +class getid3_quicktime extends getid3_handler +{ + + public $ReturnAtomData = true; + public $ParseAllPossibleAtoms = false; + + public function Analyze() { + $info = &$this->getid3->info; + + $info['fileformat'] = 'quicktime'; + $info['quicktime']['hinting'] = false; + $info['quicktime']['controller'] = 'standard'; // may be overridden if 'ctyp' atom is present + + fseek($this->getid3->fp, $info['avdataoffset'], SEEK_SET); + + $offset = 0; + $atomcounter = 0; + + while ($offset < $info['avdataend']) { + if (!getid3_lib::intValueSupported($offset)) { + $info['error'][] = 'Unable to parse atom at offset '.$offset.' because beyond '.round(PHP_INT_MAX / 1073741824).'GB limit of PHP filesystem functions'; + break; + } + fseek($this->getid3->fp, $offset, SEEK_SET); + $AtomHeader = fread($this->getid3->fp, 8); + + $atomsize = getid3_lib::BigEndian2Int(substr($AtomHeader, 0, 4)); + $atomname = substr($AtomHeader, 4, 4); + + // 64-bit MOV patch by jlegateØktnc*com + if ($atomsize == 1) { + $atomsize = getid3_lib::BigEndian2Int(fread($this->getid3->fp, 8)); + } + + $info['quicktime'][$atomname]['name'] = $atomname; + $info['quicktime'][$atomname]['size'] = $atomsize; + $info['quicktime'][$atomname]['offset'] = $offset; + + if (($offset + $atomsize) > $info['avdataend']) { + $info['error'][] = 'Atom at offset '.$offset.' claims to go beyond end-of-file (length: '.$atomsize.' bytes)'; + return false; + } + + if ($atomsize == 0) { + // Furthermore, for historical reasons the list of atoms is optionally + // terminated by a 32-bit integer set to 0. If you are writing a program + // to read user data atoms, you should allow for the terminating 0. + break; + } + switch ($atomname) { + case 'mdat': // Media DATa atom + // 'mdat' contains the actual data for the audio/video + if (($atomsize > 8) && (!isset($info['avdataend_tmp']) || ($info['quicktime'][$atomname]['size'] > ($info['avdataend_tmp'] - $info['avdataoffset'])))) { + + $info['avdataoffset'] = $info['quicktime'][$atomname]['offset'] + 8; + $OldAVDataEnd = $info['avdataend']; + $info['avdataend'] = $info['quicktime'][$atomname]['offset'] + $info['quicktime'][$atomname]['size']; + + $getid3_temp = new getID3(); + $getid3_temp->openfile($this->getid3->filename); + $getid3_temp->info['avdataoffset'] = $info['avdataoffset']; + $getid3_temp->info['avdataend'] = $info['avdataend']; + $getid3_mp3 = new getid3_mp3($getid3_temp); + if ($getid3_mp3->MPEGaudioHeaderValid($getid3_mp3->MPEGaudioHeaderDecode(fread($this->getid3->fp, 4)))) { + $getid3_mp3->getOnlyMPEGaudioInfo($getid3_temp->info['avdataoffset'], false); + if (!empty($getid3_temp->info['warning'])) { + foreach ($getid3_temp->info['warning'] as $value) { + $info['warning'][] = $value; + } + } + if (!empty($getid3_temp->info['mpeg'])) { + $info['mpeg'] = $getid3_temp->info['mpeg']; + if (isset($info['mpeg']['audio'])) { + $info['audio']['dataformat'] = 'mp3'; + $info['audio']['codec'] = (!empty($info['mpeg']['audio']['encoder']) ? $info['mpeg']['audio']['encoder'] : (!empty($info['mpeg']['audio']['codec']) ? $info['mpeg']['audio']['codec'] : (!empty($info['mpeg']['audio']['LAME']) ? 'LAME' :'mp3'))); + $info['audio']['sample_rate'] = $info['mpeg']['audio']['sample_rate']; + $info['audio']['channels'] = $info['mpeg']['audio']['channels']; + $info['audio']['bitrate'] = $info['mpeg']['audio']['bitrate']; + $info['audio']['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']); + $info['bitrate'] = $info['audio']['bitrate']; + } + } + } + unset($getid3_mp3, $getid3_temp); + $info['avdataend'] = $OldAVDataEnd; + unset($OldAVDataEnd); + + } + break; + + case 'free': // FREE space atom + case 'skip': // SKIP atom + case 'wide': // 64-bit expansion placeholder atom + // 'free', 'skip' and 'wide' are just padding, contains no useful data at all + break; + + default: + $atomHierarchy = array(); + $info['quicktime'][$atomname] = $this->QuicktimeParseAtom($atomname, $atomsize, fread($this->getid3->fp, $atomsize), $offset, $atomHierarchy, $this->ParseAllPossibleAtoms); + break; + } + + $offset += $atomsize; + $atomcounter++; + } + + if (!empty($info['avdataend_tmp'])) { + // this value is assigned to a temp value and then erased because + // otherwise any atoms beyond the 'mdat' atom would not get parsed + $info['avdataend'] = $info['avdataend_tmp']; + unset($info['avdataend_tmp']); + } + + if (!isset($info['bitrate']) && isset($info['playtime_seconds'])) { + $info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds']; + } + if (isset($info['bitrate']) && !isset($info['audio']['bitrate']) && !isset($info['quicktime']['video'])) { + $info['audio']['bitrate'] = $info['bitrate']; + } + if (!empty($info['playtime_seconds']) && !isset($info['video']['frame_rate']) && !empty($info['quicktime']['stts_framecount'])) { + foreach ($info['quicktime']['stts_framecount'] as $key => $samples_count) { + $samples_per_second = $samples_count / $info['playtime_seconds']; + if ($samples_per_second > 240) { + // has to be audio samples + } else { + $info['video']['frame_rate'] = $samples_per_second; + break; + } + } + } + if (($info['audio']['dataformat'] == 'mp4') && empty($info['video']['resolution_x'])) { + $info['fileformat'] = 'mp4'; + $info['mime_type'] = 'audio/mp4'; + unset($info['video']['dataformat']); + } + + if (!$this->ReturnAtomData) { + unset($info['quicktime']['moov']); + } + + if (empty($info['audio']['dataformat']) && !empty($info['quicktime']['audio'])) { + $info['audio']['dataformat'] = 'quicktime'; + } + if (empty($info['video']['dataformat']) && !empty($info['quicktime']['video'])) { + $info['video']['dataformat'] = 'quicktime'; + } + + return true; + } + + public function QuicktimeParseAtom($atomname, $atomsize, $atom_data, $baseoffset, &$atomHierarchy, $ParseAllPossibleAtoms) { + // http://developer.apple.com/techpubs/quicktime/qtdevdocs/APIREF/INDEX/atomalphaindex.htm + + $info = &$this->getid3->info; + + //$atom_parent = array_pop($atomHierarchy); + $atom_parent = end($atomHierarchy); // http://www.getid3.org/phpBB3/viewtopic.php?t=1717 + array_push($atomHierarchy, $atomname); + $atom_structure['hierarchy'] = implode(' ', $atomHierarchy); + $atom_structure['name'] = $atomname; + $atom_structure['size'] = $atomsize; + $atom_structure['offset'] = $baseoffset; +//echo getid3_lib::PrintHexBytes(substr($atom_data, 0, 8)).'
                  '; +//echo getid3_lib::PrintHexBytes(substr($atom_data, 0, 8), false).'

                  '; + switch ($atomname) { + case 'moov': // MOVie container atom + case 'trak': // TRAcK container atom + case 'clip': // CLIPping container atom + case 'matt': // track MATTe container atom + case 'edts': // EDiTS container atom + case 'tref': // Track REFerence container atom + case 'mdia': // MeDIA container atom + case 'minf': // Media INFormation container atom + case 'dinf': // Data INFormation container atom + case 'udta': // User DaTA container atom + case 'cmov': // Compressed MOVie container atom + case 'rmra': // Reference Movie Record Atom + case 'rmda': // Reference Movie Descriptor Atom + case 'gmhd': // Generic Media info HeaDer atom (seen on QTVR) + $atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms); + break; + + case 'ilst': // Item LiST container atom + $atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms); + + // some "ilst" atoms contain data atoms that have a numeric name, and the data is far more accessible if the returned array is compacted + $allnumericnames = true; + foreach ($atom_structure['subatoms'] as $subatomarray) { + if (!is_integer($subatomarray['name']) || (count($subatomarray['subatoms']) != 1)) { + $allnumericnames = false; + break; + } + } + if ($allnumericnames) { + $newData = array(); + foreach ($atom_structure['subatoms'] as $subatomarray) { + foreach ($subatomarray['subatoms'] as $newData_subatomarray) { + unset($newData_subatomarray['hierarchy'], $newData_subatomarray['name']); + $newData[$subatomarray['name']] = $newData_subatomarray; + break; + } + } + $atom_structure['data'] = $newData; + unset($atom_structure['subatoms']); + } + break; + + case "\x00\x00\x00\x01": + case "\x00\x00\x00\x02": + case "\x00\x00\x00\x03": + case "\x00\x00\x00\x04": + case "\x00\x00\x00\x05": + $atomname = getid3_lib::BigEndian2Int($atomname); + $atom_structure['name'] = $atomname; + $atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms); + break; + + case 'stbl': // Sample TaBLe container atom + $atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms); + $isVideo = false; + $framerate = 0; + $framecount = 0; + foreach ($atom_structure['subatoms'] as $key => $value_array) { + if (isset($value_array['sample_description_table'])) { + foreach ($value_array['sample_description_table'] as $key2 => $value_array2) { + if (isset($value_array2['data_format'])) { + switch ($value_array2['data_format']) { + case 'avc1': + case 'mp4v': + // video data + $isVideo = true; + break; + case 'mp4a': + // audio data + break; + } + } + } + } elseif (isset($value_array['time_to_sample_table'])) { + foreach ($value_array['time_to_sample_table'] as $key2 => $value_array2) { + if (isset($value_array2['sample_count']) && isset($value_array2['sample_duration']) && ($value_array2['sample_duration'] > 0)) { + $framerate = round($info['quicktime']['time_scale'] / $value_array2['sample_duration'], 3); + $framecount = $value_array2['sample_count']; + } + } + } + } + if ($isVideo && $framerate) { + $info['quicktime']['video']['frame_rate'] = $framerate; + $info['video']['frame_rate'] = $info['quicktime']['video']['frame_rate']; + } + if ($isVideo && $framecount) { + $info['quicktime']['video']['frame_count'] = $framecount; + } + break; + + + case 'aART': // Album ARTist + case 'catg': // CaTeGory + case 'covr': // COVeR artwork + case 'cpil': // ComPILation + case 'cprt': // CoPyRighT + case 'desc': // DESCription + case 'disk': // DISK number + case 'egid': // Episode Global ID + case 'gnre': // GeNRE + case 'keyw': // KEYWord + case 'ldes': + case 'pcst': // PodCaST + case 'pgap': // GAPless Playback + case 'purd': // PURchase Date + case 'purl': // Podcast URL + case 'rati': + case 'rndu': + case 'rpdu': + case 'rtng': // RaTiNG + case 'stik': + case 'tmpo': // TeMPO (BPM) + case 'trkn': // TRacK Number + case 'tves': // TV EpiSode + case 'tvnn': // TV Network Name + case 'tvsh': // TV SHow Name + case 'tvsn': // TV SeasoN + case 'akID': // iTunes store account type + case 'apID': + case 'atID': + case 'cmID': + case 'cnID': + case 'geID': + case 'plID': + case 'sfID': // iTunes store country + case '©alb': // ALBum + case '©art': // ARTist + case '©ART': + case '©aut': + case '©cmt': // CoMmenT + case '©com': // COMposer + case '©cpy': + case '©day': // content created year + case '©dir': + case '©ed1': + case '©ed2': + case '©ed3': + case '©ed4': + case '©ed5': + case '©ed6': + case '©ed7': + case '©ed8': + case '©ed9': + case '©enc': + case '©fmt': + case '©gen': // GENre + case '©grp': // GRouPing + case '©hst': + case '©inf': + case '©lyr': // LYRics + case '©mak': + case '©mod': + case '©nam': // full NAMe + case '©ope': + case '©PRD': + case '©prd': + case '©prf': + case '©req': + case '©src': + case '©swr': + case '©too': // encoder + case '©trk': // TRacK + case '©url': + case '©wrn': + case '©wrt': // WRiTer + case '----': // itunes specific + if ($atom_parent == 'udta') { + // User data atom handler + $atom_structure['data_length'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 2)); + $atom_structure['language_id'] = getid3_lib::BigEndian2Int(substr($atom_data, 2, 2)); + $atom_structure['data'] = substr($atom_data, 4); + + $atom_structure['language'] = $this->QuicktimeLanguageLookup($atom_structure['language_id']); + if (empty($info['comments']['language']) || (!in_array($atom_structure['language'], $info['comments']['language']))) { + $info['comments']['language'][] = $atom_structure['language']; + } + } else { + // Apple item list box atom handler + $atomoffset = 0; + if (substr($atom_data, 2, 2) == "\x10\xB5") { + // not sure what it means, but observed on iPhone4 data. + // Each $atom_data has 2 bytes of datasize, plus 0x10B5, then data + while ($atomoffset < strlen($atom_data)) { + $boxsmallsize = getid3_lib::BigEndian2Int(substr($atom_data, $atomoffset, 2)); + $boxsmalltype = substr($atom_data, $atomoffset + 2, 2); + $boxsmalldata = substr($atom_data, $atomoffset + 4, $boxsmallsize); + if ($boxsmallsize <= 1) { + $info['warning'][] = 'Invalid QuickTime atom smallbox size "'.$boxsmallsize.'" in atom "'.$atomname.'" at offset: '.($atom_structure['offset'] + $atomoffset); + $atom_structure['data'] = null; + $atomoffset = strlen($atom_data); + break; + } + switch ($boxsmalltype) { + case "\x10\xB5": + $atom_structure['data'] = $boxsmalldata; + break; + default: + $info['warning'][] = 'Unknown QuickTime smallbox type: "'.getid3_lib::PrintHexBytes($boxsmalltype).'" at offset '.$baseoffset; + $atom_structure['data'] = $atom_data; + break; + } + $atomoffset += (4 + $boxsmallsize); + } + } else { + while ($atomoffset < strlen($atom_data)) { + $boxsize = getid3_lib::BigEndian2Int(substr($atom_data, $atomoffset, 4)); + $boxtype = substr($atom_data, $atomoffset + 4, 4); + $boxdata = substr($atom_data, $atomoffset + 8, $boxsize - 8); + if ($boxsize <= 1) { + $info['warning'][] = 'Invalid QuickTime atom box size "'.$boxsize.'" in atom "'.$atomname.'" at offset: '.($atom_structure['offset'] + $atomoffset); + $atom_structure['data'] = null; + $atomoffset = strlen($atom_data); + break; + } + $atomoffset += $boxsize; + + switch ($boxtype) { + case 'mean': + case 'name': + $atom_structure[$boxtype] = substr($boxdata, 4); + break; + + case 'data': + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($boxdata, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($boxdata, 1, 3)); + switch ($atom_structure['flags_raw']) { + case 0: // data flag + case 21: // tmpo/cpil flag + switch ($atomname) { + case 'cpil': + case 'pcst': + case 'pgap': + $atom_structure['data'] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 1)); + break; + + case 'tmpo': + $atom_structure['data'] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 2)); + break; + + case 'disk': + case 'trkn': + $num = getid3_lib::BigEndian2Int(substr($boxdata, 10, 2)); + $num_total = getid3_lib::BigEndian2Int(substr($boxdata, 12, 2)); + $atom_structure['data'] = empty($num) ? '' : $num; + $atom_structure['data'] .= empty($num_total) ? '' : '/'.$num_total; + break; + + case 'gnre': + $GenreID = getid3_lib::BigEndian2Int(substr($boxdata, 8, 4)); + $atom_structure['data'] = getid3_id3v1::LookupGenreName($GenreID - 1); + break; + + case 'rtng': + $atom_structure[$atomname] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 1)); + $atom_structure['data'] = $this->QuicktimeContentRatingLookup($atom_structure[$atomname]); + break; + + case 'stik': + $atom_structure[$atomname] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 1)); + $atom_structure['data'] = $this->QuicktimeSTIKLookup($atom_structure[$atomname]); + break; + + case 'sfID': + $atom_structure[$atomname] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 4)); + $atom_structure['data'] = $this->QuicktimeStoreFrontCodeLookup($atom_structure[$atomname]); + break; + + case 'egid': + case 'purl': + $atom_structure['data'] = substr($boxdata, 8); + break; + + default: + $atom_structure['data'] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 4)); + } + break; + + case 1: // text flag + case 13: // image flag + default: + $atom_structure['data'] = substr($boxdata, 8); + break; + + } + break; + + default: + $info['warning'][] = 'Unknown QuickTime box type: "'.getid3_lib::PrintHexBytes($boxtype).'" at offset '.$baseoffset; + $atom_structure['data'] = $atom_data; + + } + } + } + } + $this->CopyToAppropriateCommentsSection($atomname, $atom_structure['data'], $atom_structure['name']); + break; + + + case 'play': // auto-PLAY atom + $atom_structure['autoplay'] = (bool) getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + + $info['quicktime']['autoplay'] = $atom_structure['autoplay']; + break; + + + case 'WLOC': // Window LOCation atom + $atom_structure['location_x'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 2)); + $atom_structure['location_y'] = getid3_lib::BigEndian2Int(substr($atom_data, 2, 2)); + break; + + + case 'LOOP': // LOOPing atom + case 'SelO': // play SELection Only atom + case 'AllF': // play ALL Frames atom + $atom_structure['data'] = getid3_lib::BigEndian2Int($atom_data); + break; + + + case 'name': // + case 'MCPS': // Media Cleaner PRo + case '@PRM': // adobe PReMiere version + case '@PRQ': // adobe PRemiere Quicktime version + $atom_structure['data'] = $atom_data; + break; + + + case 'cmvd': // Compressed MooV Data atom + // Code by ubergeekØubergeek*tv based on information from + // http://developer.apple.com/quicktime/icefloe/dispatch012.html + $atom_structure['unCompressedSize'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 4)); + + $CompressedFileData = substr($atom_data, 4); + if ($UncompressedHeader = @gzuncompress($CompressedFileData)) { + $atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($UncompressedHeader, 0, $atomHierarchy, $ParseAllPossibleAtoms); + } else { + $info['warning'][] = 'Error decompressing compressed MOV atom at offset '.$atom_structure['offset']; + } + break; + + + case 'dcom': // Data COMpression atom + $atom_structure['compression_id'] = $atom_data; + $atom_structure['compression_text'] = $this->QuicktimeDCOMLookup($atom_data); + break; + + + case 'rdrf': // Reference movie Data ReFerence atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); + $atom_structure['flags']['internal_data'] = (bool) ($atom_structure['flags_raw'] & 0x000001); + + $atom_structure['reference_type_name'] = substr($atom_data, 4, 4); + $atom_structure['reference_length'] = getid3_lib::BigEndian2Int(substr($atom_data, 8, 4)); + switch ($atom_structure['reference_type_name']) { + case 'url ': + $atom_structure['url'] = $this->NoNullString(substr($atom_data, 12)); + break; + + case 'alis': + $atom_structure['file_alias'] = substr($atom_data, 12); + break; + + case 'rsrc': + $atom_structure['resource_alias'] = substr($atom_data, 12); + break; + + default: + $atom_structure['data'] = substr($atom_data, 12); + break; + } + break; + + + case 'rmqu': // Reference Movie QUality atom + $atom_structure['movie_quality'] = getid3_lib::BigEndian2Int($atom_data); + break; + + + case 'rmcs': // Reference Movie Cpu Speed atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['cpu_speed_rating'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 2)); + break; + + + case 'rmvc': // Reference Movie Version Check atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['gestalt_selector'] = substr($atom_data, 4, 4); + $atom_structure['gestalt_value_mask'] = getid3_lib::BigEndian2Int(substr($atom_data, 8, 4)); + $atom_structure['gestalt_value'] = getid3_lib::BigEndian2Int(substr($atom_data, 12, 4)); + $atom_structure['gestalt_check_type'] = getid3_lib::BigEndian2Int(substr($atom_data, 14, 2)); + break; + + + case 'rmcd': // Reference Movie Component check atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['component_type'] = substr($atom_data, 4, 4); + $atom_structure['component_subtype'] = substr($atom_data, 8, 4); + $atom_structure['component_manufacturer'] = substr($atom_data, 12, 4); + $atom_structure['component_flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 16, 4)); + $atom_structure['component_flags_mask'] = getid3_lib::BigEndian2Int(substr($atom_data, 20, 4)); + $atom_structure['component_min_version'] = getid3_lib::BigEndian2Int(substr($atom_data, 24, 4)); + break; + + + case 'rmdr': // Reference Movie Data Rate atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['data_rate'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + + $atom_structure['data_rate_bps'] = $atom_structure['data_rate'] * 10; + break; + + + case 'rmla': // Reference Movie Language Atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['language_id'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 2)); + + $atom_structure['language'] = $this->QuicktimeLanguageLookup($atom_structure['language_id']); + if (empty($info['comments']['language']) || (!in_array($atom_structure['language'], $info['comments']['language']))) { + $info['comments']['language'][] = $atom_structure['language']; + } + break; + + + case 'rmla': // Reference Movie Language Atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['track_id'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 2)); + break; + + + case 'ptv ': // Print To Video - defines a movie's full screen mode + // http://developer.apple.com/documentation/QuickTime/APIREF/SOURCESIV/at_ptv-_pg.htm + $atom_structure['display_size_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 2)); + $atom_structure['reserved_1'] = getid3_lib::BigEndian2Int(substr($atom_data, 2, 2)); // hardcoded: 0x0000 + $atom_structure['reserved_2'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 2)); // hardcoded: 0x0000 + $atom_structure['slide_show_flag'] = getid3_lib::BigEndian2Int(substr($atom_data, 6, 1)); + $atom_structure['play_on_open_flag'] = getid3_lib::BigEndian2Int(substr($atom_data, 7, 1)); + + $atom_structure['flags']['play_on_open'] = (bool) $atom_structure['play_on_open_flag']; + $atom_structure['flags']['slide_show'] = (bool) $atom_structure['slide_show_flag']; + + $ptv_lookup[0] = 'normal'; + $ptv_lookup[1] = 'double'; + $ptv_lookup[2] = 'half'; + $ptv_lookup[3] = 'full'; + $ptv_lookup[4] = 'current'; + if (isset($ptv_lookup[$atom_structure['display_size_raw']])) { + $atom_structure['display_size'] = $ptv_lookup[$atom_structure['display_size_raw']]; + } else { + $info['warning'][] = 'unknown "ptv " display constant ('.$atom_structure['display_size_raw'].')'; + } + break; + + + case 'stsd': // Sample Table Sample Description atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $stsdEntriesDataOffset = 8; + for ($i = 0; $i < $atom_structure['number_entries']; $i++) { + $atom_structure['sample_description_table'][$i]['size'] = getid3_lib::BigEndian2Int(substr($atom_data, $stsdEntriesDataOffset, 4)); + $stsdEntriesDataOffset += 4; + $atom_structure['sample_description_table'][$i]['data_format'] = substr($atom_data, $stsdEntriesDataOffset, 4); + $stsdEntriesDataOffset += 4; + $atom_structure['sample_description_table'][$i]['reserved'] = getid3_lib::BigEndian2Int(substr($atom_data, $stsdEntriesDataOffset, 6)); + $stsdEntriesDataOffset += 6; + $atom_structure['sample_description_table'][$i]['reference_index'] = getid3_lib::BigEndian2Int(substr($atom_data, $stsdEntriesDataOffset, 2)); + $stsdEntriesDataOffset += 2; + $atom_structure['sample_description_table'][$i]['data'] = substr($atom_data, $stsdEntriesDataOffset, ($atom_structure['sample_description_table'][$i]['size'] - 4 - 4 - 6 - 2)); + $stsdEntriesDataOffset += ($atom_structure['sample_description_table'][$i]['size'] - 4 - 4 - 6 - 2); + + $atom_structure['sample_description_table'][$i]['encoder_version'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 0, 2)); + $atom_structure['sample_description_table'][$i]['encoder_revision'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 2, 2)); + $atom_structure['sample_description_table'][$i]['encoder_vendor'] = substr($atom_structure['sample_description_table'][$i]['data'], 4, 4); + + switch ($atom_structure['sample_description_table'][$i]['encoder_vendor']) { + + case "\x00\x00\x00\x00": + // audio tracks + $atom_structure['sample_description_table'][$i]['audio_channels'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 8, 2)); + $atom_structure['sample_description_table'][$i]['audio_bit_depth'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 10, 2)); + $atom_structure['sample_description_table'][$i]['audio_compression_id'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 12, 2)); + $atom_structure['sample_description_table'][$i]['audio_packet_size'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 14, 2)); + $atom_structure['sample_description_table'][$i]['audio_sample_rate'] = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 16, 4)); + + // video tracks + // http://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap3/qtff3.html + $atom_structure['sample_description_table'][$i]['temporal_quality'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 8, 4)); + $atom_structure['sample_description_table'][$i]['spatial_quality'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 12, 4)); + $atom_structure['sample_description_table'][$i]['width'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 16, 2)); + $atom_structure['sample_description_table'][$i]['height'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 18, 2)); + $atom_structure['sample_description_table'][$i]['resolution_x'] = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 24, 4)); + $atom_structure['sample_description_table'][$i]['resolution_y'] = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 28, 4)); + $atom_structure['sample_description_table'][$i]['data_size'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 32, 4)); + $atom_structure['sample_description_table'][$i]['frame_count'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 36, 2)); + $atom_structure['sample_description_table'][$i]['compressor_name'] = substr($atom_structure['sample_description_table'][$i]['data'], 38, 4); + $atom_structure['sample_description_table'][$i]['pixel_depth'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 42, 2)); + $atom_structure['sample_description_table'][$i]['color_table_id'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 44, 2)); + + switch ($atom_structure['sample_description_table'][$i]['data_format']) { + case '2vuY': + case 'avc1': + case 'cvid': + case 'dvc ': + case 'dvcp': + case 'gif ': + case 'h263': + case 'jpeg': + case 'kpcd': + case 'mjpa': + case 'mjpb': + case 'mp4v': + case 'png ': + case 'raw ': + case 'rle ': + case 'rpza': + case 'smc ': + case 'SVQ1': + case 'SVQ3': + case 'tiff': + case 'v210': + case 'v216': + case 'v308': + case 'v408': + case 'v410': + case 'yuv2': + $info['fileformat'] = 'mp4'; + $info['video']['fourcc'] = $atom_structure['sample_description_table'][$i]['data_format']; +// http://www.getid3.org/phpBB3/viewtopic.php?t=1550 +//if ((!empty($atom_structure['sample_description_table'][$i]['width']) && !empty($atom_structure['sample_description_table'][$i]['width'])) && (empty($info['video']['resolution_x']) || empty($info['video']['resolution_y']) || (number_format($info['video']['resolution_x'], 6) != number_format(round($info['video']['resolution_x']), 6)) || (number_format($info['video']['resolution_y'], 6) != number_format(round($info['video']['resolution_y']), 6)))) { // ugly check for floating point numbers +if (!empty($atom_structure['sample_description_table'][$i]['width']) && !empty($atom_structure['sample_description_table'][$i]['height'])) { + // assume that values stored here are more important than values stored in [tkhd] atom + $info['video']['resolution_x'] = $atom_structure['sample_description_table'][$i]['width']; + $info['video']['resolution_y'] = $atom_structure['sample_description_table'][$i]['height']; + $info['quicktime']['video']['resolution_x'] = $info['video']['resolution_x']; + $info['quicktime']['video']['resolution_y'] = $info['video']['resolution_y']; +} + break; + + case 'qtvr': + $info['video']['dataformat'] = 'quicktimevr'; + break; + + case 'mp4a': + default: + $info['quicktime']['audio']['codec'] = $this->QuicktimeAudioCodecLookup($atom_structure['sample_description_table'][$i]['data_format']); + $info['quicktime']['audio']['sample_rate'] = $atom_structure['sample_description_table'][$i]['audio_sample_rate']; + $info['quicktime']['audio']['channels'] = $atom_structure['sample_description_table'][$i]['audio_channels']; + $info['quicktime']['audio']['bit_depth'] = $atom_structure['sample_description_table'][$i]['audio_bit_depth']; + $info['audio']['codec'] = $info['quicktime']['audio']['codec']; + $info['audio']['sample_rate'] = $info['quicktime']['audio']['sample_rate']; + $info['audio']['channels'] = $info['quicktime']['audio']['channels']; + $info['audio']['bits_per_sample'] = $info['quicktime']['audio']['bit_depth']; + switch ($atom_structure['sample_description_table'][$i]['data_format']) { + case 'raw ': // PCM + case 'alac': // Apple Lossless Audio Codec + $info['audio']['lossless'] = true; + break; + default: + $info['audio']['lossless'] = false; + break; + } + break; + } + break; + + default: + switch ($atom_structure['sample_description_table'][$i]['data_format']) { + case 'mp4s': + $info['fileformat'] = 'mp4'; + break; + + default: + // video atom + $atom_structure['sample_description_table'][$i]['video_temporal_quality'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 8, 4)); + $atom_structure['sample_description_table'][$i]['video_spatial_quality'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 12, 4)); + $atom_structure['sample_description_table'][$i]['video_frame_width'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 16, 2)); + $atom_structure['sample_description_table'][$i]['video_frame_height'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 18, 2)); + $atom_structure['sample_description_table'][$i]['video_resolution_x'] = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 20, 4)); + $atom_structure['sample_description_table'][$i]['video_resolution_y'] = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 24, 4)); + $atom_structure['sample_description_table'][$i]['video_data_size'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 28, 4)); + $atom_structure['sample_description_table'][$i]['video_frame_count'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 32, 2)); + $atom_structure['sample_description_table'][$i]['video_encoder_name_len'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 34, 1)); + $atom_structure['sample_description_table'][$i]['video_encoder_name'] = substr($atom_structure['sample_description_table'][$i]['data'], 35, $atom_structure['sample_description_table'][$i]['video_encoder_name_len']); + $atom_structure['sample_description_table'][$i]['video_pixel_color_depth'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 66, 2)); + $atom_structure['sample_description_table'][$i]['video_color_table_id'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 68, 2)); + + $atom_structure['sample_description_table'][$i]['video_pixel_color_type'] = (($atom_structure['sample_description_table'][$i]['video_pixel_color_depth'] > 32) ? 'grayscale' : 'color'); + $atom_structure['sample_description_table'][$i]['video_pixel_color_name'] = $this->QuicktimeColorNameLookup($atom_structure['sample_description_table'][$i]['video_pixel_color_depth']); + + if ($atom_structure['sample_description_table'][$i]['video_pixel_color_name'] != 'invalid') { + $info['quicktime']['video']['codec_fourcc'] = $atom_structure['sample_description_table'][$i]['data_format']; + $info['quicktime']['video']['codec_fourcc_lookup'] = $this->QuicktimeVideoCodecLookup($atom_structure['sample_description_table'][$i]['data_format']); + $info['quicktime']['video']['codec'] = (($atom_structure['sample_description_table'][$i]['video_encoder_name_len'] > 0) ? $atom_structure['sample_description_table'][$i]['video_encoder_name'] : $atom_structure['sample_description_table'][$i]['data_format']); + $info['quicktime']['video']['color_depth'] = $atom_structure['sample_description_table'][$i]['video_pixel_color_depth']; + $info['quicktime']['video']['color_depth_name'] = $atom_structure['sample_description_table'][$i]['video_pixel_color_name']; + + $info['video']['codec'] = $info['quicktime']['video']['codec']; + $info['video']['bits_per_sample'] = $info['quicktime']['video']['color_depth']; + } + $info['video']['lossless'] = false; + $info['video']['pixel_aspect_ratio'] = (float) 1; + break; + } + break; + } + switch (strtolower($atom_structure['sample_description_table'][$i]['data_format'])) { + case 'mp4a': + $info['audio']['dataformat'] = 'mp4'; + $info['quicktime']['audio']['codec'] = 'mp4'; + break; + + case '3ivx': + case '3iv1': + case '3iv2': + $info['video']['dataformat'] = '3ivx'; + break; + + case 'xvid': + $info['video']['dataformat'] = 'xvid'; + break; + + case 'mp4v': + $info['video']['dataformat'] = 'mpeg4'; + break; + + case 'divx': + case 'div1': + case 'div2': + case 'div3': + case 'div4': + case 'div5': + case 'div6': + $info['video']['dataformat'] = 'divx'; + break; + + default: + // do nothing + break; + } + unset($atom_structure['sample_description_table'][$i]['data']); + } + break; + + + case 'stts': // Sample Table Time-to-Sample atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $sttsEntriesDataOffset = 8; + //$FrameRateCalculatorArray = array(); + $frames_count = 0; + for ($i = 0; $i < $atom_structure['number_entries']; $i++) { + $atom_structure['time_to_sample_table'][$i]['sample_count'] = getid3_lib::BigEndian2Int(substr($atom_data, $sttsEntriesDataOffset, 4)); + $sttsEntriesDataOffset += 4; + $atom_structure['time_to_sample_table'][$i]['sample_duration'] = getid3_lib::BigEndian2Int(substr($atom_data, $sttsEntriesDataOffset, 4)); + $sttsEntriesDataOffset += 4; + + $frames_count += $atom_structure['time_to_sample_table'][$i]['sample_count']; + + // THIS SECTION REPLACED WITH CODE IN "stbl" ATOM + //if (!empty($info['quicktime']['time_scale']) && ($atom_structure['time_to_sample_table'][$i]['sample_duration'] > 0)) { + // $stts_new_framerate = $info['quicktime']['time_scale'] / $atom_structure['time_to_sample_table'][$i]['sample_duration']; + // if ($stts_new_framerate <= 60) { + // // some atoms have durations of "1" giving a very large framerate, which probably is not right + // $info['video']['frame_rate'] = max($info['video']['frame_rate'], $stts_new_framerate); + // } + //} + // + //$FrameRateCalculatorArray[($info['quicktime']['time_scale'] / $atom_structure['time_to_sample_table'][$i]['sample_duration'])] += $atom_structure['time_to_sample_table'][$i]['sample_count']; + } + $info['quicktime']['stts_framecount'][] = $frames_count; + //$sttsFramesTotal = 0; + //$sttsSecondsTotal = 0; + //foreach ($FrameRateCalculatorArray as $frames_per_second => $frame_count) { + // if (($frames_per_second > 60) || ($frames_per_second < 1)) { + // // not video FPS information, probably audio information + // $sttsFramesTotal = 0; + // $sttsSecondsTotal = 0; + // break; + // } + // $sttsFramesTotal += $frame_count; + // $sttsSecondsTotal += $frame_count / $frames_per_second; + //} + //if (($sttsFramesTotal > 0) && ($sttsSecondsTotal > 0)) { + // if (($sttsFramesTotal / $sttsSecondsTotal) > $info['video']['frame_rate']) { + // $info['video']['frame_rate'] = $sttsFramesTotal / $sttsSecondsTotal; + // } + //} + break; + + + case 'stss': // Sample Table Sync Sample (key frames) atom + if ($ParseAllPossibleAtoms) { + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $stssEntriesDataOffset = 8; + for ($i = 0; $i < $atom_structure['number_entries']; $i++) { + $atom_structure['time_to_sample_table'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $stssEntriesDataOffset, 4)); + $stssEntriesDataOffset += 4; + } + } + break; + + + case 'stsc': // Sample Table Sample-to-Chunk atom + if ($ParseAllPossibleAtoms) { + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $stscEntriesDataOffset = 8; + for ($i = 0; $i < $atom_structure['number_entries']; $i++) { + $atom_structure['sample_to_chunk_table'][$i]['first_chunk'] = getid3_lib::BigEndian2Int(substr($atom_data, $stscEntriesDataOffset, 4)); + $stscEntriesDataOffset += 4; + $atom_structure['sample_to_chunk_table'][$i]['samples_per_chunk'] = getid3_lib::BigEndian2Int(substr($atom_data, $stscEntriesDataOffset, 4)); + $stscEntriesDataOffset += 4; + $atom_structure['sample_to_chunk_table'][$i]['sample_description'] = getid3_lib::BigEndian2Int(substr($atom_data, $stscEntriesDataOffset, 4)); + $stscEntriesDataOffset += 4; + } + } + break; + + + case 'stsz': // Sample Table SiZe atom + if ($ParseAllPossibleAtoms) { + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['sample_size'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data, 8, 4)); + $stszEntriesDataOffset = 12; + if ($atom_structure['sample_size'] == 0) { + for ($i = 0; $i < $atom_structure['number_entries']; $i++) { + $atom_structure['sample_size_table'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $stszEntriesDataOffset, 4)); + $stszEntriesDataOffset += 4; + } + } + } + break; + + + case 'stco': // Sample Table Chunk Offset atom + if ($ParseAllPossibleAtoms) { + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $stcoEntriesDataOffset = 8; + for ($i = 0; $i < $atom_structure['number_entries']; $i++) { + $atom_structure['chunk_offset_table'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $stcoEntriesDataOffset, 4)); + $stcoEntriesDataOffset += 4; + } + } + break; + + + case 'co64': // Chunk Offset 64-bit (version of "stco" that supports > 2GB files) + if ($ParseAllPossibleAtoms) { + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $stcoEntriesDataOffset = 8; + for ($i = 0; $i < $atom_structure['number_entries']; $i++) { + $atom_structure['chunk_offset_table'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $stcoEntriesDataOffset, 8)); + $stcoEntriesDataOffset += 8; + } + } + break; + + + case 'dref': // Data REFerence atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $drefDataOffset = 8; + for ($i = 0; $i < $atom_structure['number_entries']; $i++) { + $atom_structure['data_references'][$i]['size'] = getid3_lib::BigEndian2Int(substr($atom_data, $drefDataOffset, 4)); + $drefDataOffset += 4; + $atom_structure['data_references'][$i]['type'] = substr($atom_data, $drefDataOffset, 4); + $drefDataOffset += 4; + $atom_structure['data_references'][$i]['version'] = getid3_lib::BigEndian2Int(substr($atom_data, $drefDataOffset, 1)); + $drefDataOffset += 1; + $atom_structure['data_references'][$i]['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, $drefDataOffset, 3)); // hardcoded: 0x0000 + $drefDataOffset += 3; + $atom_structure['data_references'][$i]['data'] = substr($atom_data, $drefDataOffset, ($atom_structure['data_references'][$i]['size'] - 4 - 4 - 1 - 3)); + $drefDataOffset += ($atom_structure['data_references'][$i]['size'] - 4 - 4 - 1 - 3); + + $atom_structure['data_references'][$i]['flags']['self_reference'] = (bool) ($atom_structure['data_references'][$i]['flags_raw'] & 0x001); + } + break; + + + case 'gmin': // base Media INformation atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['graphics_mode'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 2)); + $atom_structure['opcolor_red'] = getid3_lib::BigEndian2Int(substr($atom_data, 6, 2)); + $atom_structure['opcolor_green'] = getid3_lib::BigEndian2Int(substr($atom_data, 8, 2)); + $atom_structure['opcolor_blue'] = getid3_lib::BigEndian2Int(substr($atom_data, 10, 2)); + $atom_structure['balance'] = getid3_lib::BigEndian2Int(substr($atom_data, 12, 2)); + $atom_structure['reserved'] = getid3_lib::BigEndian2Int(substr($atom_data, 14, 2)); + break; + + + case 'smhd': // Sound Media information HeaDer atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['balance'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 2)); + $atom_structure['reserved'] = getid3_lib::BigEndian2Int(substr($atom_data, 6, 2)); + break; + + + case 'vmhd': // Video Media information HeaDer atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); + $atom_structure['graphics_mode'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 2)); + $atom_structure['opcolor_red'] = getid3_lib::BigEndian2Int(substr($atom_data, 6, 2)); + $atom_structure['opcolor_green'] = getid3_lib::BigEndian2Int(substr($atom_data, 8, 2)); + $atom_structure['opcolor_blue'] = getid3_lib::BigEndian2Int(substr($atom_data, 10, 2)); + + $atom_structure['flags']['no_lean_ahead'] = (bool) ($atom_structure['flags_raw'] & 0x001); + break; + + + case 'hdlr': // HanDLeR reference atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['component_type'] = substr($atom_data, 4, 4); + $atom_structure['component_subtype'] = substr($atom_data, 8, 4); + $atom_structure['component_manufacturer'] = substr($atom_data, 12, 4); + $atom_structure['component_flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 16, 4)); + $atom_structure['component_flags_mask'] = getid3_lib::BigEndian2Int(substr($atom_data, 20, 4)); + $atom_structure['component_name'] = $this->Pascal2String(substr($atom_data, 24)); + + if (($atom_structure['component_subtype'] == 'STpn') && ($atom_structure['component_manufacturer'] == 'zzzz')) { + $info['video']['dataformat'] = 'quicktimevr'; + } + break; + + + case 'mdhd': // MeDia HeaDer atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['creation_time'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $atom_structure['modify_time'] = getid3_lib::BigEndian2Int(substr($atom_data, 8, 4)); + $atom_structure['time_scale'] = getid3_lib::BigEndian2Int(substr($atom_data, 12, 4)); + $atom_structure['duration'] = getid3_lib::BigEndian2Int(substr($atom_data, 16, 4)); + $atom_structure['language_id'] = getid3_lib::BigEndian2Int(substr($atom_data, 20, 2)); + $atom_structure['quality'] = getid3_lib::BigEndian2Int(substr($atom_data, 22, 2)); + + if ($atom_structure['time_scale'] == 0) { + $info['error'][] = 'Corrupt Quicktime file: mdhd.time_scale == zero'; + return false; + } + $info['quicktime']['time_scale'] = (isset($info['quicktime']['time_scale']) ? max($info['quicktime']['time_scale'], $atom_structure['time_scale']) : $atom_structure['time_scale']); + + $atom_structure['creation_time_unix'] = getid3_lib::DateMac2Unix($atom_structure['creation_time']); + $atom_structure['modify_time_unix'] = getid3_lib::DateMac2Unix($atom_structure['modify_time']); + $atom_structure['playtime_seconds'] = $atom_structure['duration'] / $atom_structure['time_scale']; + $atom_structure['language'] = $this->QuicktimeLanguageLookup($atom_structure['language_id']); + if (empty($info['comments']['language']) || (!in_array($atom_structure['language'], $info['comments']['language']))) { + $info['comments']['language'][] = $atom_structure['language']; + } + break; + + + case 'pnot': // Preview atom + $atom_structure['modification_date'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 4)); // "standard Macintosh format" + $atom_structure['version_number'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 2)); // hardcoded: 0x00 + $atom_structure['atom_type'] = substr($atom_data, 6, 4); // usually: 'PICT' + $atom_structure['atom_index'] = getid3_lib::BigEndian2Int(substr($atom_data, 10, 2)); // usually: 0x01 + + $atom_structure['modification_date_unix'] = getid3_lib::DateMac2Unix($atom_structure['modification_date']); + break; + + + case 'crgn': // Clipping ReGioN atom + $atom_structure['region_size'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 2)); // The Region size, Region boundary box, + $atom_structure['boundary_box'] = getid3_lib::BigEndian2Int(substr($atom_data, 2, 8)); // and Clipping region data fields + $atom_structure['clipping_data'] = substr($atom_data, 10); // constitute a QuickDraw region. + break; + + + case 'load': // track LOAD settings atom + $atom_structure['preload_start_time'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 4)); + $atom_structure['preload_duration'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $atom_structure['preload_flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 8, 4)); + $atom_structure['default_hints_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 12, 4)); + + $atom_structure['default_hints']['double_buffer'] = (bool) ($atom_structure['default_hints_raw'] & 0x0020); + $atom_structure['default_hints']['high_quality'] = (bool) ($atom_structure['default_hints_raw'] & 0x0100); + break; + + + case 'tmcd': // TiMe CoDe atom + case 'chap': // CHAPter list atom + case 'sync': // SYNChronization atom + case 'scpt': // tranSCriPT atom + case 'ssrc': // non-primary SouRCe atom + for ($i = 0; $i < (strlen($atom_data) % 4); $i++) { + $atom_structure['track_id'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $i * 4, 4)); + } + break; + + + case 'elst': // Edit LiST atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + for ($i = 0; $i < $atom_structure['number_entries']; $i++ ) { + $atom_structure['edit_list'][$i]['track_duration'] = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($i * 12) + 0, 4)); + $atom_structure['edit_list'][$i]['media_time'] = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($i * 12) + 4, 4)); + $atom_structure['edit_list'][$i]['media_rate'] = getid3_lib::FixedPoint16_16(substr($atom_data, 8 + ($i * 12) + 8, 4)); + } + break; + + + case 'kmat': // compressed MATte atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); // hardcoded: 0x0000 + $atom_structure['matte_data_raw'] = substr($atom_data, 4); + break; + + + case 'ctab': // Color TABle atom + $atom_structure['color_table_seed'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 4)); // hardcoded: 0x00000000 + $atom_structure['color_table_flags'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 2)); // hardcoded: 0x8000 + $atom_structure['color_table_size'] = getid3_lib::BigEndian2Int(substr($atom_data, 6, 2)) + 1; + for ($colortableentry = 0; $colortableentry < $atom_structure['color_table_size']; $colortableentry++) { + $atom_structure['color_table'][$colortableentry]['alpha'] = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($colortableentry * 8) + 0, 2)); + $atom_structure['color_table'][$colortableentry]['red'] = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($colortableentry * 8) + 2, 2)); + $atom_structure['color_table'][$colortableentry]['green'] = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($colortableentry * 8) + 4, 2)); + $atom_structure['color_table'][$colortableentry]['blue'] = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($colortableentry * 8) + 6, 2)); + } + break; + + + case 'mvhd': // MoVie HeaDer atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); + $atom_structure['creation_time'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $atom_structure['modify_time'] = getid3_lib::BigEndian2Int(substr($atom_data, 8, 4)); + $atom_structure['time_scale'] = getid3_lib::BigEndian2Int(substr($atom_data, 12, 4)); + $atom_structure['duration'] = getid3_lib::BigEndian2Int(substr($atom_data, 16, 4)); + $atom_structure['preferred_rate'] = getid3_lib::FixedPoint16_16(substr($atom_data, 20, 4)); + $atom_structure['preferred_volume'] = getid3_lib::FixedPoint8_8(substr($atom_data, 24, 2)); + $atom_structure['reserved'] = substr($atom_data, 26, 10); + $atom_structure['matrix_a'] = getid3_lib::FixedPoint16_16(substr($atom_data, 36, 4)); + $atom_structure['matrix_b'] = getid3_lib::FixedPoint16_16(substr($atom_data, 40, 4)); + $atom_structure['matrix_u'] = getid3_lib::FixedPoint2_30(substr($atom_data, 44, 4)); + $atom_structure['matrix_c'] = getid3_lib::FixedPoint16_16(substr($atom_data, 48, 4)); + $atom_structure['matrix_d'] = getid3_lib::FixedPoint16_16(substr($atom_data, 52, 4)); + $atom_structure['matrix_v'] = getid3_lib::FixedPoint2_30(substr($atom_data, 56, 4)); + $atom_structure['matrix_x'] = getid3_lib::FixedPoint16_16(substr($atom_data, 60, 4)); + $atom_structure['matrix_y'] = getid3_lib::FixedPoint16_16(substr($atom_data, 64, 4)); + $atom_structure['matrix_w'] = getid3_lib::FixedPoint2_30(substr($atom_data, 68, 4)); + $atom_structure['preview_time'] = getid3_lib::BigEndian2Int(substr($atom_data, 72, 4)); + $atom_structure['preview_duration'] = getid3_lib::BigEndian2Int(substr($atom_data, 76, 4)); + $atom_structure['poster_time'] = getid3_lib::BigEndian2Int(substr($atom_data, 80, 4)); + $atom_structure['selection_time'] = getid3_lib::BigEndian2Int(substr($atom_data, 84, 4)); + $atom_structure['selection_duration'] = getid3_lib::BigEndian2Int(substr($atom_data, 88, 4)); + $atom_structure['current_time'] = getid3_lib::BigEndian2Int(substr($atom_data, 92, 4)); + $atom_structure['next_track_id'] = getid3_lib::BigEndian2Int(substr($atom_data, 96, 4)); + + if ($atom_structure['time_scale'] == 0) { + $info['error'][] = 'Corrupt Quicktime file: mvhd.time_scale == zero'; + return false; + } + $atom_structure['creation_time_unix'] = getid3_lib::DateMac2Unix($atom_structure['creation_time']); + $atom_structure['modify_time_unix'] = getid3_lib::DateMac2Unix($atom_structure['modify_time']); + $info['quicktime']['time_scale'] = (isset($info['quicktime']['time_scale']) ? max($info['quicktime']['time_scale'], $atom_structure['time_scale']) : $atom_structure['time_scale']); + $info['quicktime']['display_scale'] = $atom_structure['matrix_a']; + $info['playtime_seconds'] = $atom_structure['duration'] / $atom_structure['time_scale']; + break; + + + case 'tkhd': // TracK HeaDer atom + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); + $atom_structure['creation_time'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $atom_structure['modify_time'] = getid3_lib::BigEndian2Int(substr($atom_data, 8, 4)); + $atom_structure['trackid'] = getid3_lib::BigEndian2Int(substr($atom_data, 12, 4)); + $atom_structure['reserved1'] = getid3_lib::BigEndian2Int(substr($atom_data, 16, 4)); + $atom_structure['duration'] = getid3_lib::BigEndian2Int(substr($atom_data, 20, 4)); + $atom_structure['reserved2'] = getid3_lib::BigEndian2Int(substr($atom_data, 24, 8)); + $atom_structure['layer'] = getid3_lib::BigEndian2Int(substr($atom_data, 32, 2)); + $atom_structure['alternate_group'] = getid3_lib::BigEndian2Int(substr($atom_data, 34, 2)); + $atom_structure['volume'] = getid3_lib::FixedPoint8_8(substr($atom_data, 36, 2)); + $atom_structure['reserved3'] = getid3_lib::BigEndian2Int(substr($atom_data, 38, 2)); +// http://developer.apple.com/library/mac/#documentation/QuickTime/RM/MovieBasics/MTEditing/K-Chapter/11MatrixFunctions.html +// http://developer.apple.com/library/mac/#documentation/QuickTime/qtff/QTFFChap4/qtff4.html#//apple_ref/doc/uid/TP40000939-CH206-18737 + $atom_structure['matrix_a'] = getid3_lib::FixedPoint16_16(substr($atom_data, 40, 4)); + $atom_structure['matrix_b'] = getid3_lib::FixedPoint16_16(substr($atom_data, 44, 4)); + $atom_structure['matrix_u'] = getid3_lib::FixedPoint2_30(substr($atom_data, 48, 4)); + $atom_structure['matrix_c'] = getid3_lib::FixedPoint16_16(substr($atom_data, 52, 4)); + $atom_structure['matrix_d'] = getid3_lib::FixedPoint16_16(substr($atom_data, 56, 4)); + $atom_structure['matrix_v'] = getid3_lib::FixedPoint2_30(substr($atom_data, 60, 4)); + $atom_structure['matrix_x'] = getid3_lib::FixedPoint16_16(substr($atom_data, 64, 4)); + $atom_structure['matrix_y'] = getid3_lib::FixedPoint16_16(substr($atom_data, 68, 4)); + $atom_structure['matrix_w'] = getid3_lib::FixedPoint2_30(substr($atom_data, 72, 4)); + $atom_structure['width'] = getid3_lib::FixedPoint16_16(substr($atom_data, 76, 4)); + $atom_structure['height'] = getid3_lib::FixedPoint16_16(substr($atom_data, 80, 4)); + $atom_structure['flags']['enabled'] = (bool) ($atom_structure['flags_raw'] & 0x0001); + $atom_structure['flags']['in_movie'] = (bool) ($atom_structure['flags_raw'] & 0x0002); + $atom_structure['flags']['in_preview'] = (bool) ($atom_structure['flags_raw'] & 0x0004); + $atom_structure['flags']['in_poster'] = (bool) ($atom_structure['flags_raw'] & 0x0008); + $atom_structure['creation_time_unix'] = getid3_lib::DateMac2Unix($atom_structure['creation_time']); + $atom_structure['modify_time_unix'] = getid3_lib::DateMac2Unix($atom_structure['modify_time']); + + if ($atom_structure['flags']['enabled'] == 1) { + if (!isset($info['video']['resolution_x']) || !isset($info['video']['resolution_y'])) { + $info['video']['resolution_x'] = $atom_structure['width']; + $info['video']['resolution_y'] = $atom_structure['height']; + } + $info['video']['resolution_x'] = max($info['video']['resolution_x'], $atom_structure['width']); + $info['video']['resolution_y'] = max($info['video']['resolution_y'], $atom_structure['height']); + $info['quicktime']['video']['resolution_x'] = $info['video']['resolution_x']; + $info['quicktime']['video']['resolution_y'] = $info['video']['resolution_y']; + } else { + // see: http://www.getid3.org/phpBB3/viewtopic.php?t=1295 + //if (isset($info['video']['resolution_x'])) { unset($info['video']['resolution_x']); } + //if (isset($info['video']['resolution_y'])) { unset($info['video']['resolution_y']); } + //if (isset($info['quicktime']['video'])) { unset($info['quicktime']['video']); } + } + break; + + + case 'iods': // Initial Object DeScriptor atom + // http://www.koders.com/c/fid1FAB3E762903DC482D8A246D4A4BF9F28E049594.aspx?s=windows.h + // http://libquicktime.sourcearchive.com/documentation/1.0.2plus-pdebian/iods_8c-source.html + $offset = 0; + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1)); + $offset += 1; + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 3)); + $offset += 3; + $atom_structure['mp4_iod_tag'] = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1)); + $offset += 1; + $atom_structure['length'] = $this->quicktime_read_mp4_descr_length($atom_data, $offset); + //$offset already adjusted by quicktime_read_mp4_descr_length() + $atom_structure['object_descriptor_id'] = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 2)); + $offset += 2; + $atom_structure['od_profile_level'] = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1)); + $offset += 1; + $atom_structure['scene_profile_level'] = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1)); + $offset += 1; + $atom_structure['audio_profile_id'] = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1)); + $offset += 1; + $atom_structure['video_profile_id'] = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1)); + $offset += 1; + $atom_structure['graphics_profile_level'] = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1)); + $offset += 1; + + $atom_structure['num_iods_tracks'] = ($atom_structure['length'] - 7) / 6; // 6 bytes would only be right if all tracks use 1-byte length fields + for ($i = 0; $i < $atom_structure['num_iods_tracks']; $i++) { + $atom_structure['track'][$i]['ES_ID_IncTag'] = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1)); + $offset += 1; + $atom_structure['track'][$i]['length'] = $this->quicktime_read_mp4_descr_length($atom_data, $offset); + //$offset already adjusted by quicktime_read_mp4_descr_length() + $atom_structure['track'][$i]['track_id'] = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 4)); + $offset += 4; + } + + $atom_structure['audio_profile_name'] = $this->QuicktimeIODSaudioProfileName($atom_structure['audio_profile_id']); + $atom_structure['video_profile_name'] = $this->QuicktimeIODSvideoProfileName($atom_structure['video_profile_id']); + break; + + case 'ftyp': // FileTYPe (?) atom (for MP4 it seems) + $atom_structure['signature'] = substr($atom_data, 0, 4); + $atom_structure['unknown_1'] = getid3_lib::BigEndian2Int(substr($atom_data, 4, 4)); + $atom_structure['fourcc'] = substr($atom_data, 8, 4); + break; + + case 'mdat': // Media DATa atom + case 'free': // FREE space atom + case 'skip': // SKIP atom + case 'wide': // 64-bit expansion placeholder atom + // 'mdat' data is too big to deal with, contains no useful metadata + // 'free', 'skip' and 'wide' are just padding, contains no useful data at all + + // When writing QuickTime files, it is sometimes necessary to update an atom's size. + // It is impossible to update a 32-bit atom to a 64-bit atom since the 32-bit atom + // is only 8 bytes in size, and the 64-bit atom requires 16 bytes. Therefore, QuickTime + // puts an 8-byte placeholder atom before any atoms it may have to update the size of. + // In this way, if the atom needs to be converted from a 32-bit to a 64-bit atom, the + // placeholder atom can be overwritten to obtain the necessary 8 extra bytes. + // The placeholder atom has a type of kWideAtomPlaceholderType ( 'wide' ). + break; + + + case 'nsav': // NoSAVe atom + // http://developer.apple.com/technotes/tn/tn2038.html + $atom_structure['data'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 4)); + break; + + case 'ctyp': // Controller TYPe atom (seen on QTVR) + // http://homepages.slingshot.co.nz/~helmboy/quicktime/formats/qtm-layout.txt + // some controller names are: + // 0x00 + 'std' for linear movie + // 'none' for no controls + $atom_structure['ctyp'] = substr($atom_data, 0, 4); + $info['quicktime']['controller'] = $atom_structure['ctyp']; + switch ($atom_structure['ctyp']) { + case 'qtvr': + $info['video']['dataformat'] = 'quicktimevr'; + break; + } + break; + + case 'pano': // PANOrama track (seen on QTVR) + $atom_structure['pano'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 4)); + break; + + case 'hint': // HINT track + case 'hinf': // + case 'hinv': // + case 'hnti': // + $info['quicktime']['hinting'] = true; + break; + + case 'imgt': // IMaGe Track reference (kQTVRImageTrackRefType) (seen on QTVR) + for ($i = 0; $i < ($atom_structure['size'] - 8); $i += 4) { + $atom_structure['imgt'][] = getid3_lib::BigEndian2Int(substr($atom_data, $i, 4)); + } + break; + + + // Observed-but-not-handled atom types are just listed here to prevent warnings being generated + case 'FXTC': // Something to do with Adobe After Effects (?) + case 'PrmA': + case 'code': + case 'FIEL': // this is NOT "fiel" (Field Ordering) as describe here: http://developer.apple.com/documentation/QuickTime/QTFF/QTFFChap3/chapter_4_section_2.html + case 'tapt': // TrackApertureModeDimensionsAID - http://developer.apple.com/documentation/QuickTime/Reference/QT7-1_Update_Reference/Constants/Constants.html + // tapt seems to be used to compute the video size [http://www.getid3.org/phpBB3/viewtopic.php?t=838] + // * http://lists.apple.com/archives/quicktime-api/2006/Aug/msg00014.html + // * http://handbrake.fr/irclogs/handbrake-dev/handbrake-dev20080128_pg2.html + case 'ctts':// STCompositionOffsetAID - http://developer.apple.com/documentation/QuickTime/Reference/QTRef_Constants/Reference/reference.html + case 'cslg':// STCompositionShiftLeastGreatestAID - http://developer.apple.com/documentation/QuickTime/Reference/QTRef_Constants/Reference/reference.html + case 'sdtp':// STSampleDependencyAID - http://developer.apple.com/documentation/QuickTime/Reference/QTRef_Constants/Reference/reference.html + case 'stps':// STPartialSyncSampleAID - http://developer.apple.com/documentation/QuickTime/Reference/QTRef_Constants/Reference/reference.html + //$atom_structure['data'] = $atom_data; + break; + + case '©xyz': // GPS latitude+longitude+altitude + $atom_structure['data'] = $atom_data; + if (preg_match('#([\\+\\-][0-9\\.]+)([\\+\\-][0-9\\.]+)([\\+\\-][0-9\\.]+)?/$#i', $atom_data, $matches)) { + @list($all, $latitude, $longitude, $altitude) = $matches; + $info['quicktime']['comments']['gps_latitude'][] = floatval($latitude); + $info['quicktime']['comments']['gps_longitude'][] = floatval($longitude); + if (!empty($altitude)) { + $info['quicktime']['comments']['gps_altitude'][] = floatval($altitude); + } + } else { + $info['warning'][] = 'QuickTime atom "©xyz" data does not match expected data pattern at offset '.$baseoffset.'. Please report as getID3() bug.'; + } + break; + + case 'NCDT': + // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html + // Nikon-specific QuickTime tags found in the NCDT atom of MOV videos from some Nikon cameras such as the Coolpix S8000 and D5100 + $atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 4, $atomHierarchy, $ParseAllPossibleAtoms); + break; + case 'NCTH': // Nikon Camera THumbnail image + case 'NCVW': // Nikon Camera preVieW image + // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html + if (preg_match('/^\xFF\xD8\xFF/', $atom_data)) { + $atom_structure['data'] = $atom_data; + $atom_structure['image_mime'] = 'image/jpeg'; + $atom_structure['description'] = (($atomname == 'NCTH') ? 'Nikon Camera Thumbnail Image' : (($atomname == 'NCVW') ? 'Nikon Camera Preview Image' : 'Nikon preview image')); + $info['quicktime']['comments']['picture'][] = array('image_mime'=>$atom_structure['image_mime'], 'data'=>$atom_data, 'description'=>$atom_structure['description']); + } + break; + case 'NCHD': // MakerNoteVersion + // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html + $atom_structure['data'] = $atom_data; + break; + case 'NCTG': // NikonTags + // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html#NCTG + $atom_structure['data'] = $this->QuicktimeParseNikonNCTG($atom_data); + break; + case 'NCDB': // NikonTags + // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html + $atom_structure['data'] = $atom_data; + break; + + case "\x00\x00\x00\x00": + case 'meta': // METAdata atom + // some kind of metacontainer, may contain a big data dump such as: + // mdta keys  mdtacom.apple.quicktime.make (mdtacom.apple.quicktime.creationdate ,mdtacom.apple.quicktime.location.ISO6709 $mdtacom.apple.quicktime.software !mdtacom.apple.quicktime.model ilst   data DEApple 0  (data DE2011-05-11T17:54:04+0200 2  *data DE+52.4936+013.3897+040.247/   data DE4.3.1  data DEiPhone 4 + // http://www.geocities.com/xhelmboyx/quicktime/formats/qti-layout.txt + + $atom_structure['version'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 1)); + $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data, 1, 3)); + $atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom(substr($atom_data, 4), $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms); + //$atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms); + break; + + case 'data': // metaDATA atom + // seems to be 2 bytes language code (ASCII), 2 bytes unknown (set to 0x10B5 in sample I have), remainder is useful data + $atom_structure['language'] = substr($atom_data, 4 + 0, 2); + $atom_structure['unknown'] = getid3_lib::BigEndian2Int(substr($atom_data, 4 + 2, 2)); + $atom_structure['data'] = substr($atom_data, 4 + 4); + break; + + default: + $info['warning'][] = 'Unknown QuickTime atom type: "'.$atomname.'" ('.trim(getid3_lib::PrintHexBytes($atomname)).') at offset '.$baseoffset; + $atom_structure['data'] = $atom_data; + break; + } + array_pop($atomHierarchy); + return $atom_structure; + } + + public function QuicktimeParseContainerAtom($atom_data, $baseoffset, &$atomHierarchy, $ParseAllPossibleAtoms) { +//echo 'QuicktimeParseContainerAtom('.substr($atom_data, 4, 4).') @ '.$baseoffset.'

                  '; + $atom_structure = false; + $subatomoffset = 0; + $subatomcounter = 0; + if ((strlen($atom_data) == 4) && (getid3_lib::BigEndian2Int($atom_data) == 0x00000000)) { + return false; + } + while ($subatomoffset < strlen($atom_data)) { + $subatomsize = getid3_lib::BigEndian2Int(substr($atom_data, $subatomoffset + 0, 4)); + $subatomname = substr($atom_data, $subatomoffset + 4, 4); + $subatomdata = substr($atom_data, $subatomoffset + 8, $subatomsize - 8); + if ($subatomsize == 0) { + // Furthermore, for historical reasons the list of atoms is optionally + // terminated by a 32-bit integer set to 0. If you are writing a program + // to read user data atoms, you should allow for the terminating 0. + return $atom_structure; + } + + $atom_structure[$subatomcounter] = $this->QuicktimeParseAtom($subatomname, $subatomsize, $subatomdata, $baseoffset + $subatomoffset, $atomHierarchy, $ParseAllPossibleAtoms); + + $subatomoffset += $subatomsize; + $subatomcounter++; + } + return $atom_structure; + } + + + public function quicktime_read_mp4_descr_length($data, &$offset) { + // http://libquicktime.sourcearchive.com/documentation/2:1.0.2plus-pdebian-2build1/esds_8c-source.html + $num_bytes = 0; + $length = 0; + do { + $b = ord(substr($data, $offset++, 1)); + $length = ($length << 7) | ($b & 0x7F); + } while (($b & 0x80) && ($num_bytes++ < 4)); + return $length; + } + + + public function QuicktimeLanguageLookup($languageid) { + // http://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap4/qtff4.html#//apple_ref/doc/uid/TP40000939-CH206-34353 + static $QuicktimeLanguageLookup = array(); + if (empty($QuicktimeLanguageLookup)) { + $QuicktimeLanguageLookup[0] = 'English'; + $QuicktimeLanguageLookup[1] = 'French'; + $QuicktimeLanguageLookup[2] = 'German'; + $QuicktimeLanguageLookup[3] = 'Italian'; + $QuicktimeLanguageLookup[4] = 'Dutch'; + $QuicktimeLanguageLookup[5] = 'Swedish'; + $QuicktimeLanguageLookup[6] = 'Spanish'; + $QuicktimeLanguageLookup[7] = 'Danish'; + $QuicktimeLanguageLookup[8] = 'Portuguese'; + $QuicktimeLanguageLookup[9] = 'Norwegian'; + $QuicktimeLanguageLookup[10] = 'Hebrew'; + $QuicktimeLanguageLookup[11] = 'Japanese'; + $QuicktimeLanguageLookup[12] = 'Arabic'; + $QuicktimeLanguageLookup[13] = 'Finnish'; + $QuicktimeLanguageLookup[14] = 'Greek'; + $QuicktimeLanguageLookup[15] = 'Icelandic'; + $QuicktimeLanguageLookup[16] = 'Maltese'; + $QuicktimeLanguageLookup[17] = 'Turkish'; + $QuicktimeLanguageLookup[18] = 'Croatian'; + $QuicktimeLanguageLookup[19] = 'Chinese (Traditional)'; + $QuicktimeLanguageLookup[20] = 'Urdu'; + $QuicktimeLanguageLookup[21] = 'Hindi'; + $QuicktimeLanguageLookup[22] = 'Thai'; + $QuicktimeLanguageLookup[23] = 'Korean'; + $QuicktimeLanguageLookup[24] = 'Lithuanian'; + $QuicktimeLanguageLookup[25] = 'Polish'; + $QuicktimeLanguageLookup[26] = 'Hungarian'; + $QuicktimeLanguageLookup[27] = 'Estonian'; + $QuicktimeLanguageLookup[28] = 'Lettish'; + $QuicktimeLanguageLookup[28] = 'Latvian'; + $QuicktimeLanguageLookup[29] = 'Saamisk'; + $QuicktimeLanguageLookup[29] = 'Lappish'; + $QuicktimeLanguageLookup[30] = 'Faeroese'; + $QuicktimeLanguageLookup[31] = 'Farsi'; + $QuicktimeLanguageLookup[31] = 'Persian'; + $QuicktimeLanguageLookup[32] = 'Russian'; + $QuicktimeLanguageLookup[33] = 'Chinese (Simplified)'; + $QuicktimeLanguageLookup[34] = 'Flemish'; + $QuicktimeLanguageLookup[35] = 'Irish'; + $QuicktimeLanguageLookup[36] = 'Albanian'; + $QuicktimeLanguageLookup[37] = 'Romanian'; + $QuicktimeLanguageLookup[38] = 'Czech'; + $QuicktimeLanguageLookup[39] = 'Slovak'; + $QuicktimeLanguageLookup[40] = 'Slovenian'; + $QuicktimeLanguageLookup[41] = 'Yiddish'; + $QuicktimeLanguageLookup[42] = 'Serbian'; + $QuicktimeLanguageLookup[43] = 'Macedonian'; + $QuicktimeLanguageLookup[44] = 'Bulgarian'; + $QuicktimeLanguageLookup[45] = 'Ukrainian'; + $QuicktimeLanguageLookup[46] = 'Byelorussian'; + $QuicktimeLanguageLookup[47] = 'Uzbek'; + $QuicktimeLanguageLookup[48] = 'Kazakh'; + $QuicktimeLanguageLookup[49] = 'Azerbaijani'; + $QuicktimeLanguageLookup[50] = 'AzerbaijanAr'; + $QuicktimeLanguageLookup[51] = 'Armenian'; + $QuicktimeLanguageLookup[52] = 'Georgian'; + $QuicktimeLanguageLookup[53] = 'Moldavian'; + $QuicktimeLanguageLookup[54] = 'Kirghiz'; + $QuicktimeLanguageLookup[55] = 'Tajiki'; + $QuicktimeLanguageLookup[56] = 'Turkmen'; + $QuicktimeLanguageLookup[57] = 'Mongolian'; + $QuicktimeLanguageLookup[58] = 'MongolianCyr'; + $QuicktimeLanguageLookup[59] = 'Pashto'; + $QuicktimeLanguageLookup[60] = 'Kurdish'; + $QuicktimeLanguageLookup[61] = 'Kashmiri'; + $QuicktimeLanguageLookup[62] = 'Sindhi'; + $QuicktimeLanguageLookup[63] = 'Tibetan'; + $QuicktimeLanguageLookup[64] = 'Nepali'; + $QuicktimeLanguageLookup[65] = 'Sanskrit'; + $QuicktimeLanguageLookup[66] = 'Marathi'; + $QuicktimeLanguageLookup[67] = 'Bengali'; + $QuicktimeLanguageLookup[68] = 'Assamese'; + $QuicktimeLanguageLookup[69] = 'Gujarati'; + $QuicktimeLanguageLookup[70] = 'Punjabi'; + $QuicktimeLanguageLookup[71] = 'Oriya'; + $QuicktimeLanguageLookup[72] = 'Malayalam'; + $QuicktimeLanguageLookup[73] = 'Kannada'; + $QuicktimeLanguageLookup[74] = 'Tamil'; + $QuicktimeLanguageLookup[75] = 'Telugu'; + $QuicktimeLanguageLookup[76] = 'Sinhalese'; + $QuicktimeLanguageLookup[77] = 'Burmese'; + $QuicktimeLanguageLookup[78] = 'Khmer'; + $QuicktimeLanguageLookup[79] = 'Lao'; + $QuicktimeLanguageLookup[80] = 'Vietnamese'; + $QuicktimeLanguageLookup[81] = 'Indonesian'; + $QuicktimeLanguageLookup[82] = 'Tagalog'; + $QuicktimeLanguageLookup[83] = 'MalayRoman'; + $QuicktimeLanguageLookup[84] = 'MalayArabic'; + $QuicktimeLanguageLookup[85] = 'Amharic'; + $QuicktimeLanguageLookup[86] = 'Tigrinya'; + $QuicktimeLanguageLookup[87] = 'Galla'; + $QuicktimeLanguageLookup[87] = 'Oromo'; + $QuicktimeLanguageLookup[88] = 'Somali'; + $QuicktimeLanguageLookup[89] = 'Swahili'; + $QuicktimeLanguageLookup[90] = 'Ruanda'; + $QuicktimeLanguageLookup[91] = 'Rundi'; + $QuicktimeLanguageLookup[92] = 'Chewa'; + $QuicktimeLanguageLookup[93] = 'Malagasy'; + $QuicktimeLanguageLookup[94] = 'Esperanto'; + $QuicktimeLanguageLookup[128] = 'Welsh'; + $QuicktimeLanguageLookup[129] = 'Basque'; + $QuicktimeLanguageLookup[130] = 'Catalan'; + $QuicktimeLanguageLookup[131] = 'Latin'; + $QuicktimeLanguageLookup[132] = 'Quechua'; + $QuicktimeLanguageLookup[133] = 'Guarani'; + $QuicktimeLanguageLookup[134] = 'Aymara'; + $QuicktimeLanguageLookup[135] = 'Tatar'; + $QuicktimeLanguageLookup[136] = 'Uighur'; + $QuicktimeLanguageLookup[137] = 'Dzongkha'; + $QuicktimeLanguageLookup[138] = 'JavaneseRom'; + $QuicktimeLanguageLookup[32767] = 'Unspecified'; + } + if (($languageid > 138) && ($languageid < 32767)) { + /* + ISO Language Codes - http://www.loc.gov/standards/iso639-2/php/code_list.php + Because the language codes specified by ISO 639-2/T are three characters long, they must be packed to fit into a 16-bit field. + The packing algorithm must map each of the three characters, which are always lowercase, into a 5-bit integer and then concatenate + these integers into the least significant 15 bits of a 16-bit integer, leaving the 16-bit integer's most significant bit set to zero. + + One algorithm for performing this packing is to treat each ISO character as a 16-bit integer. Subtract 0x60 from the first character + and multiply by 2^10 (0x400), subtract 0x60 from the second character and multiply by 2^5 (0x20), subtract 0x60 from the third character, + and add the three 16-bit values. This will result in a single 16-bit value with the three codes correctly packed into the 15 least + significant bits and the most significant bit set to zero. + */ + $iso_language_id = ''; + $iso_language_id .= chr((($languageid & 0x7C00) >> 10) + 0x60); + $iso_language_id .= chr((($languageid & 0x03E0) >> 5) + 0x60); + $iso_language_id .= chr((($languageid & 0x001F) >> 0) + 0x60); + $QuicktimeLanguageLookup[$languageid] = getid3_id3v2::LanguageLookup($iso_language_id); + } + return (isset($QuicktimeLanguageLookup[$languageid]) ? $QuicktimeLanguageLookup[$languageid] : 'invalid'); + } + + public function QuicktimeVideoCodecLookup($codecid) { + static $QuicktimeVideoCodecLookup = array(); + if (empty($QuicktimeVideoCodecLookup)) { + $QuicktimeVideoCodecLookup['.SGI'] = 'SGI'; + $QuicktimeVideoCodecLookup['3IV1'] = '3ivx MPEG-4 v1'; + $QuicktimeVideoCodecLookup['3IV2'] = '3ivx MPEG-4 v2'; + $QuicktimeVideoCodecLookup['3IVX'] = '3ivx MPEG-4'; + $QuicktimeVideoCodecLookup['8BPS'] = 'Planar RGB'; + $QuicktimeVideoCodecLookup['avc1'] = 'H.264/MPEG-4 AVC'; + $QuicktimeVideoCodecLookup['avr '] = 'AVR-JPEG'; + $QuicktimeVideoCodecLookup['b16g'] = '16Gray'; + $QuicktimeVideoCodecLookup['b32a'] = '32AlphaGray'; + $QuicktimeVideoCodecLookup['b48r'] = '48RGB'; + $QuicktimeVideoCodecLookup['b64a'] = '64ARGB'; + $QuicktimeVideoCodecLookup['base'] = 'Base'; + $QuicktimeVideoCodecLookup['clou'] = 'Cloud'; + $QuicktimeVideoCodecLookup['cmyk'] = 'CMYK'; + $QuicktimeVideoCodecLookup['cvid'] = 'Cinepak'; + $QuicktimeVideoCodecLookup['dmb1'] = 'OpenDML JPEG'; + $QuicktimeVideoCodecLookup['dvc '] = 'DVC-NTSC'; + $QuicktimeVideoCodecLookup['dvcp'] = 'DVC-PAL'; + $QuicktimeVideoCodecLookup['dvpn'] = 'DVCPro-NTSC'; + $QuicktimeVideoCodecLookup['dvpp'] = 'DVCPro-PAL'; + $QuicktimeVideoCodecLookup['fire'] = 'Fire'; + $QuicktimeVideoCodecLookup['flic'] = 'FLC'; + $QuicktimeVideoCodecLookup['gif '] = 'GIF'; + $QuicktimeVideoCodecLookup['h261'] = 'H261'; + $QuicktimeVideoCodecLookup['h263'] = 'H263'; + $QuicktimeVideoCodecLookup['IV41'] = 'Indeo4'; + $QuicktimeVideoCodecLookup['jpeg'] = 'JPEG'; + $QuicktimeVideoCodecLookup['kpcd'] = 'PhotoCD'; + $QuicktimeVideoCodecLookup['mjpa'] = 'Motion JPEG-A'; + $QuicktimeVideoCodecLookup['mjpb'] = 'Motion JPEG-B'; + $QuicktimeVideoCodecLookup['msvc'] = 'Microsoft Video1'; + $QuicktimeVideoCodecLookup['myuv'] = 'MPEG YUV420'; + $QuicktimeVideoCodecLookup['path'] = 'Vector'; + $QuicktimeVideoCodecLookup['png '] = 'PNG'; + $QuicktimeVideoCodecLookup['PNTG'] = 'MacPaint'; + $QuicktimeVideoCodecLookup['qdgx'] = 'QuickDrawGX'; + $QuicktimeVideoCodecLookup['qdrw'] = 'QuickDraw'; + $QuicktimeVideoCodecLookup['raw '] = 'RAW'; + $QuicktimeVideoCodecLookup['ripl'] = 'WaterRipple'; + $QuicktimeVideoCodecLookup['rpza'] = 'Video'; + $QuicktimeVideoCodecLookup['smc '] = 'Graphics'; + $QuicktimeVideoCodecLookup['SVQ1'] = 'Sorenson Video 1'; + $QuicktimeVideoCodecLookup['SVQ1'] = 'Sorenson Video 3'; + $QuicktimeVideoCodecLookup['syv9'] = 'Sorenson YUV9'; + $QuicktimeVideoCodecLookup['tga '] = 'Targa'; + $QuicktimeVideoCodecLookup['tiff'] = 'TIFF'; + $QuicktimeVideoCodecLookup['WRAW'] = 'Windows RAW'; + $QuicktimeVideoCodecLookup['WRLE'] = 'BMP'; + $QuicktimeVideoCodecLookup['y420'] = 'YUV420'; + $QuicktimeVideoCodecLookup['yuv2'] = 'ComponentVideo'; + $QuicktimeVideoCodecLookup['yuvs'] = 'ComponentVideoUnsigned'; + $QuicktimeVideoCodecLookup['yuvu'] = 'ComponentVideoSigned'; + } + return (isset($QuicktimeVideoCodecLookup[$codecid]) ? $QuicktimeVideoCodecLookup[$codecid] : ''); + } + + public function QuicktimeAudioCodecLookup($codecid) { + static $QuicktimeAudioCodecLookup = array(); + if (empty($QuicktimeAudioCodecLookup)) { + $QuicktimeAudioCodecLookup['.mp3'] = 'Fraunhofer MPEG Layer-III alias'; + $QuicktimeAudioCodecLookup['aac '] = 'ISO/IEC 14496-3 AAC'; + $QuicktimeAudioCodecLookup['agsm'] = 'Apple GSM 10:1'; + $QuicktimeAudioCodecLookup['alac'] = 'Apple Lossless Audio Codec'; + $QuicktimeAudioCodecLookup['alaw'] = 'A-law 2:1'; + $QuicktimeAudioCodecLookup['conv'] = 'Sample Format'; + $QuicktimeAudioCodecLookup['dvca'] = 'DV'; + $QuicktimeAudioCodecLookup['dvi '] = 'DV 4:1'; + $QuicktimeAudioCodecLookup['eqal'] = 'Frequency Equalizer'; + $QuicktimeAudioCodecLookup['fl32'] = '32-bit Floating Point'; + $QuicktimeAudioCodecLookup['fl64'] = '64-bit Floating Point'; + $QuicktimeAudioCodecLookup['ima4'] = 'Interactive Multimedia Association 4:1'; + $QuicktimeAudioCodecLookup['in24'] = '24-bit Integer'; + $QuicktimeAudioCodecLookup['in32'] = '32-bit Integer'; + $QuicktimeAudioCodecLookup['lpc '] = 'LPC 23:1'; + $QuicktimeAudioCodecLookup['MAC3'] = 'Macintosh Audio Compression/Expansion (MACE) 3:1'; + $QuicktimeAudioCodecLookup['MAC6'] = 'Macintosh Audio Compression/Expansion (MACE) 6:1'; + $QuicktimeAudioCodecLookup['mixb'] = '8-bit Mixer'; + $QuicktimeAudioCodecLookup['mixw'] = '16-bit Mixer'; + $QuicktimeAudioCodecLookup['mp4a'] = 'ISO/IEC 14496-3 AAC'; + $QuicktimeAudioCodecLookup['MS'."\x00\x02"] = 'Microsoft ADPCM'; + $QuicktimeAudioCodecLookup['MS'."\x00\x11"] = 'DV IMA'; + $QuicktimeAudioCodecLookup['MS'."\x00\x55"] = 'Fraunhofer MPEG Layer III'; + $QuicktimeAudioCodecLookup['NONE'] = 'No Encoding'; + $QuicktimeAudioCodecLookup['Qclp'] = 'Qualcomm PureVoice'; + $QuicktimeAudioCodecLookup['QDM2'] = 'QDesign Music 2'; + $QuicktimeAudioCodecLookup['QDMC'] = 'QDesign Music 1'; + $QuicktimeAudioCodecLookup['ratb'] = '8-bit Rate'; + $QuicktimeAudioCodecLookup['ratw'] = '16-bit Rate'; + $QuicktimeAudioCodecLookup['raw '] = 'raw PCM'; + $QuicktimeAudioCodecLookup['sour'] = 'Sound Source'; + $QuicktimeAudioCodecLookup['sowt'] = 'signed/two\'s complement (Little Endian)'; + $QuicktimeAudioCodecLookup['str1'] = 'Iomega MPEG layer II'; + $QuicktimeAudioCodecLookup['str2'] = 'Iomega MPEG *layer II'; + $QuicktimeAudioCodecLookup['str3'] = 'Iomega MPEG **layer II'; + $QuicktimeAudioCodecLookup['str4'] = 'Iomega MPEG ***layer II'; + $QuicktimeAudioCodecLookup['twos'] = 'signed/two\'s complement (Big Endian)'; + $QuicktimeAudioCodecLookup['ulaw'] = 'mu-law 2:1'; + } + return (isset($QuicktimeAudioCodecLookup[$codecid]) ? $QuicktimeAudioCodecLookup[$codecid] : ''); + } + + public function QuicktimeDCOMLookup($compressionid) { + static $QuicktimeDCOMLookup = array(); + if (empty($QuicktimeDCOMLookup)) { + $QuicktimeDCOMLookup['zlib'] = 'ZLib Deflate'; + $QuicktimeDCOMLookup['adec'] = 'Apple Compression'; + } + return (isset($QuicktimeDCOMLookup[$compressionid]) ? $QuicktimeDCOMLookup[$compressionid] : ''); + } + + public function QuicktimeColorNameLookup($colordepthid) { + static $QuicktimeColorNameLookup = array(); + if (empty($QuicktimeColorNameLookup)) { + $QuicktimeColorNameLookup[1] = '2-color (monochrome)'; + $QuicktimeColorNameLookup[2] = '4-color'; + $QuicktimeColorNameLookup[4] = '16-color'; + $QuicktimeColorNameLookup[8] = '256-color'; + $QuicktimeColorNameLookup[16] = 'thousands (16-bit color)'; + $QuicktimeColorNameLookup[24] = 'millions (24-bit color)'; + $QuicktimeColorNameLookup[32] = 'millions+ (32-bit color)'; + $QuicktimeColorNameLookup[33] = 'black & white'; + $QuicktimeColorNameLookup[34] = '4-gray'; + $QuicktimeColorNameLookup[36] = '16-gray'; + $QuicktimeColorNameLookup[40] = '256-gray'; + } + return (isset($QuicktimeColorNameLookup[$colordepthid]) ? $QuicktimeColorNameLookup[$colordepthid] : 'invalid'); + } + + public function QuicktimeSTIKLookup($stik) { + static $QuicktimeSTIKLookup = array(); + if (empty($QuicktimeSTIKLookup)) { + $QuicktimeSTIKLookup[0] = 'Movie'; + $QuicktimeSTIKLookup[1] = 'Normal'; + $QuicktimeSTIKLookup[2] = 'Audiobook'; + $QuicktimeSTIKLookup[5] = 'Whacked Bookmark'; + $QuicktimeSTIKLookup[6] = 'Music Video'; + $QuicktimeSTIKLookup[9] = 'Short Film'; + $QuicktimeSTIKLookup[10] = 'TV Show'; + $QuicktimeSTIKLookup[11] = 'Booklet'; + $QuicktimeSTIKLookup[14] = 'Ringtone'; + $QuicktimeSTIKLookup[21] = 'Podcast'; + } + return (isset($QuicktimeSTIKLookup[$stik]) ? $QuicktimeSTIKLookup[$stik] : 'invalid'); + } + + public function QuicktimeIODSaudioProfileName($audio_profile_id) { + static $QuicktimeIODSaudioProfileNameLookup = array(); + if (empty($QuicktimeIODSaudioProfileNameLookup)) { + $QuicktimeIODSaudioProfileNameLookup = array( + 0x00 => 'ISO Reserved (0x00)', + 0x01 => 'Main Audio Profile @ Level 1', + 0x02 => 'Main Audio Profile @ Level 2', + 0x03 => 'Main Audio Profile @ Level 3', + 0x04 => 'Main Audio Profile @ Level 4', + 0x05 => 'Scalable Audio Profile @ Level 1', + 0x06 => 'Scalable Audio Profile @ Level 2', + 0x07 => 'Scalable Audio Profile @ Level 3', + 0x08 => 'Scalable Audio Profile @ Level 4', + 0x09 => 'Speech Audio Profile @ Level 1', + 0x0A => 'Speech Audio Profile @ Level 2', + 0x0B => 'Synthetic Audio Profile @ Level 1', + 0x0C => 'Synthetic Audio Profile @ Level 2', + 0x0D => 'Synthetic Audio Profile @ Level 3', + 0x0E => 'High Quality Audio Profile @ Level 1', + 0x0F => 'High Quality Audio Profile @ Level 2', + 0x10 => 'High Quality Audio Profile @ Level 3', + 0x11 => 'High Quality Audio Profile @ Level 4', + 0x12 => 'High Quality Audio Profile @ Level 5', + 0x13 => 'High Quality Audio Profile @ Level 6', + 0x14 => 'High Quality Audio Profile @ Level 7', + 0x15 => 'High Quality Audio Profile @ Level 8', + 0x16 => 'Low Delay Audio Profile @ Level 1', + 0x17 => 'Low Delay Audio Profile @ Level 2', + 0x18 => 'Low Delay Audio Profile @ Level 3', + 0x19 => 'Low Delay Audio Profile @ Level 4', + 0x1A => 'Low Delay Audio Profile @ Level 5', + 0x1B => 'Low Delay Audio Profile @ Level 6', + 0x1C => 'Low Delay Audio Profile @ Level 7', + 0x1D => 'Low Delay Audio Profile @ Level 8', + 0x1E => 'Natural Audio Profile @ Level 1', + 0x1F => 'Natural Audio Profile @ Level 2', + 0x20 => 'Natural Audio Profile @ Level 3', + 0x21 => 'Natural Audio Profile @ Level 4', + 0x22 => 'Mobile Audio Internetworking Profile @ Level 1', + 0x23 => 'Mobile Audio Internetworking Profile @ Level 2', + 0x24 => 'Mobile Audio Internetworking Profile @ Level 3', + 0x25 => 'Mobile Audio Internetworking Profile @ Level 4', + 0x26 => 'Mobile Audio Internetworking Profile @ Level 5', + 0x27 => 'Mobile Audio Internetworking Profile @ Level 6', + 0x28 => 'AAC Profile @ Level 1', + 0x29 => 'AAC Profile @ Level 2', + 0x2A => 'AAC Profile @ Level 4', + 0x2B => 'AAC Profile @ Level 5', + 0x2C => 'High Efficiency AAC Profile @ Level 2', + 0x2D => 'High Efficiency AAC Profile @ Level 3', + 0x2E => 'High Efficiency AAC Profile @ Level 4', + 0x2F => 'High Efficiency AAC Profile @ Level 5', + 0xFE => 'Not part of MPEG-4 audio profiles', + 0xFF => 'No audio capability required', + ); + } + return (isset($QuicktimeIODSaudioProfileNameLookup[$audio_profile_id]) ? $QuicktimeIODSaudioProfileNameLookup[$audio_profile_id] : 'ISO Reserved / User Private'); + } + + + public function QuicktimeIODSvideoProfileName($video_profile_id) { + static $QuicktimeIODSvideoProfileNameLookup = array(); + if (empty($QuicktimeIODSvideoProfileNameLookup)) { + $QuicktimeIODSvideoProfileNameLookup = array( + 0x00 => 'Reserved (0x00) Profile', + 0x01 => 'Simple Profile @ Level 1', + 0x02 => 'Simple Profile @ Level 2', + 0x03 => 'Simple Profile @ Level 3', + 0x08 => 'Simple Profile @ Level 0', + 0x10 => 'Simple Scalable Profile @ Level 0', + 0x11 => 'Simple Scalable Profile @ Level 1', + 0x12 => 'Simple Scalable Profile @ Level 2', + 0x15 => 'AVC/H264 Profile', + 0x21 => 'Core Profile @ Level 1', + 0x22 => 'Core Profile @ Level 2', + 0x32 => 'Main Profile @ Level 2', + 0x33 => 'Main Profile @ Level 3', + 0x34 => 'Main Profile @ Level 4', + 0x42 => 'N-bit Profile @ Level 2', + 0x51 => 'Scalable Texture Profile @ Level 1', + 0x61 => 'Simple Face Animation Profile @ Level 1', + 0x62 => 'Simple Face Animation Profile @ Level 2', + 0x63 => 'Simple FBA Profile @ Level 1', + 0x64 => 'Simple FBA Profile @ Level 2', + 0x71 => 'Basic Animated Texture Profile @ Level 1', + 0x72 => 'Basic Animated Texture Profile @ Level 2', + 0x81 => 'Hybrid Profile @ Level 1', + 0x82 => 'Hybrid Profile @ Level 2', + 0x91 => 'Advanced Real Time Simple Profile @ Level 1', + 0x92 => 'Advanced Real Time Simple Profile @ Level 2', + 0x93 => 'Advanced Real Time Simple Profile @ Level 3', + 0x94 => 'Advanced Real Time Simple Profile @ Level 4', + 0xA1 => 'Core Scalable Profile @ Level1', + 0xA2 => 'Core Scalable Profile @ Level2', + 0xA3 => 'Core Scalable Profile @ Level3', + 0xB1 => 'Advanced Coding Efficiency Profile @ Level 1', + 0xB2 => 'Advanced Coding Efficiency Profile @ Level 2', + 0xB3 => 'Advanced Coding Efficiency Profile @ Level 3', + 0xB4 => 'Advanced Coding Efficiency Profile @ Level 4', + 0xC1 => 'Advanced Core Profile @ Level 1', + 0xC2 => 'Advanced Core Profile @ Level 2', + 0xD1 => 'Advanced Scalable Texture @ Level1', + 0xD2 => 'Advanced Scalable Texture @ Level2', + 0xE1 => 'Simple Studio Profile @ Level 1', + 0xE2 => 'Simple Studio Profile @ Level 2', + 0xE3 => 'Simple Studio Profile @ Level 3', + 0xE4 => 'Simple Studio Profile @ Level 4', + 0xE5 => 'Core Studio Profile @ Level 1', + 0xE6 => 'Core Studio Profile @ Level 2', + 0xE7 => 'Core Studio Profile @ Level 3', + 0xE8 => 'Core Studio Profile @ Level 4', + 0xF0 => 'Advanced Simple Profile @ Level 0', + 0xF1 => 'Advanced Simple Profile @ Level 1', + 0xF2 => 'Advanced Simple Profile @ Level 2', + 0xF3 => 'Advanced Simple Profile @ Level 3', + 0xF4 => 'Advanced Simple Profile @ Level 4', + 0xF5 => 'Advanced Simple Profile @ Level 5', + 0xF7 => 'Advanced Simple Profile @ Level 3b', + 0xF8 => 'Fine Granularity Scalable Profile @ Level 0', + 0xF9 => 'Fine Granularity Scalable Profile @ Level 1', + 0xFA => 'Fine Granularity Scalable Profile @ Level 2', + 0xFB => 'Fine Granularity Scalable Profile @ Level 3', + 0xFC => 'Fine Granularity Scalable Profile @ Level 4', + 0xFD => 'Fine Granularity Scalable Profile @ Level 5', + 0xFE => 'Not part of MPEG-4 Visual profiles', + 0xFF => 'No visual capability required', + ); + } + return (isset($QuicktimeIODSvideoProfileNameLookup[$video_profile_id]) ? $QuicktimeIODSvideoProfileNameLookup[$video_profile_id] : 'ISO Reserved Profile'); + } + + + public function QuicktimeContentRatingLookup($rtng) { + static $QuicktimeContentRatingLookup = array(); + if (empty($QuicktimeContentRatingLookup)) { + $QuicktimeContentRatingLookup[0] = 'None'; + $QuicktimeContentRatingLookup[2] = 'Clean'; + $QuicktimeContentRatingLookup[4] = 'Explicit'; + } + return (isset($QuicktimeContentRatingLookup[$rtng]) ? $QuicktimeContentRatingLookup[$rtng] : 'invalid'); + } + + public function QuicktimeStoreAccountTypeLookup($akid) { + static $QuicktimeStoreAccountTypeLookup = array(); + if (empty($QuicktimeStoreAccountTypeLookup)) { + $QuicktimeStoreAccountTypeLookup[0] = 'iTunes'; + $QuicktimeStoreAccountTypeLookup[1] = 'AOL'; + } + return (isset($QuicktimeStoreAccountTypeLookup[$akid]) ? $QuicktimeStoreAccountTypeLookup[$akid] : 'invalid'); + } + + public function QuicktimeStoreFrontCodeLookup($sfid) { + static $QuicktimeStoreFrontCodeLookup = array(); + if (empty($QuicktimeStoreFrontCodeLookup)) { + $QuicktimeStoreFrontCodeLookup[143460] = 'Australia'; + $QuicktimeStoreFrontCodeLookup[143445] = 'Austria'; + $QuicktimeStoreFrontCodeLookup[143446] = 'Belgium'; + $QuicktimeStoreFrontCodeLookup[143455] = 'Canada'; + $QuicktimeStoreFrontCodeLookup[143458] = 'Denmark'; + $QuicktimeStoreFrontCodeLookup[143447] = 'Finland'; + $QuicktimeStoreFrontCodeLookup[143442] = 'France'; + $QuicktimeStoreFrontCodeLookup[143443] = 'Germany'; + $QuicktimeStoreFrontCodeLookup[143448] = 'Greece'; + $QuicktimeStoreFrontCodeLookup[143449] = 'Ireland'; + $QuicktimeStoreFrontCodeLookup[143450] = 'Italy'; + $QuicktimeStoreFrontCodeLookup[143462] = 'Japan'; + $QuicktimeStoreFrontCodeLookup[143451] = 'Luxembourg'; + $QuicktimeStoreFrontCodeLookup[143452] = 'Netherlands'; + $QuicktimeStoreFrontCodeLookup[143461] = 'New Zealand'; + $QuicktimeStoreFrontCodeLookup[143457] = 'Norway'; + $QuicktimeStoreFrontCodeLookup[143453] = 'Portugal'; + $QuicktimeStoreFrontCodeLookup[143454] = 'Spain'; + $QuicktimeStoreFrontCodeLookup[143456] = 'Sweden'; + $QuicktimeStoreFrontCodeLookup[143459] = 'Switzerland'; + $QuicktimeStoreFrontCodeLookup[143444] = 'United Kingdom'; + $QuicktimeStoreFrontCodeLookup[143441] = 'United States'; + } + return (isset($QuicktimeStoreFrontCodeLookup[$sfid]) ? $QuicktimeStoreFrontCodeLookup[$sfid] : 'invalid'); + } + + public function QuicktimeParseNikonNCTG($atom_data) { + // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html#NCTG + // Nikon-specific QuickTime tags found in the NCDT atom of MOV videos from some Nikon cameras such as the Coolpix S8000 and D5100 + // Data is stored as records of: + // * 4 bytes record type + // * 2 bytes size of data field type: + // 0x0001 = flag (size field *= 1-byte) + // 0x0002 = char (size field *= 1-byte) + // 0x0003 = DWORD+ (size field *= 2-byte), values are stored CDAB + // 0x0004 = QWORD+ (size field *= 4-byte), values are stored EFGHABCD + // 0x0005 = float (size field *= 8-byte), values are stored aaaabbbb where value is aaaa/bbbb; possibly multiple sets of values appended together + // 0x0007 = bytes (size field *= 1-byte), values are stored as ?????? + // 0x0008 = ????? (size field *= 2-byte), values are stored as ?????? + // * 2 bytes data size field + // * ? bytes data (string data may be null-padded; datestamp fields are in the format "2011:05:25 20:24:15") + // all integers are stored BigEndian + + $NCTGtagName = array( + 0x00000001 => 'Make', + 0x00000002 => 'Model', + 0x00000003 => 'Software', + 0x00000011 => 'CreateDate', + 0x00000012 => 'DateTimeOriginal', + 0x00000013 => 'FrameCount', + 0x00000016 => 'FrameRate', + 0x00000022 => 'FrameWidth', + 0x00000023 => 'FrameHeight', + 0x00000032 => 'AudioChannels', + 0x00000033 => 'AudioBitsPerSample', + 0x00000034 => 'AudioSampleRate', + 0x02000001 => 'MakerNoteVersion', + 0x02000005 => 'WhiteBalance', + 0x0200000b => 'WhiteBalanceFineTune', + 0x0200001e => 'ColorSpace', + 0x02000023 => 'PictureControlData', + 0x02000024 => 'WorldTime', + 0x02000032 => 'UnknownInfo', + 0x02000083 => 'LensType', + 0x02000084 => 'Lens', + ); + + $offset = 0; + $datalength = strlen($atom_data); + $parsed = array(); + while ($offset < $datalength) { +//echo getid3_lib::PrintHexBytes(substr($atom_data, $offset, 4)).'
                  '; + $record_type = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 4)); $offset += 4; + $data_size_type = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 2)); $offset += 2; + $data_size = getid3_lib::BigEndian2Int(substr($atom_data, $offset, 2)); $offset += 2; + switch ($data_size_type) { + case 0x0001: // 0x0001 = flag (size field *= 1-byte) + $data = getid3_lib::BigEndian2Int(substr($atom_data, $offset, $data_size * 1)); + $offset += ($data_size * 1); + break; + case 0x0002: // 0x0002 = char (size field *= 1-byte) + $data = substr($atom_data, $offset, $data_size * 1); + $offset += ($data_size * 1); + $data = rtrim($data, "\x00"); + break; + case 0x0003: // 0x0003 = DWORD+ (size field *= 2-byte), values are stored CDAB + $data = ''; + for ($i = $data_size - 1; $i >= 0; $i--) { + $data .= substr($atom_data, $offset + ($i * 2), 2); + } + $data = getid3_lib::BigEndian2Int($data); + $offset += ($data_size * 2); + break; + case 0x0004: // 0x0004 = QWORD+ (size field *= 4-byte), values are stored EFGHABCD + $data = ''; + for ($i = $data_size - 1; $i >= 0; $i--) { + $data .= substr($atom_data, $offset + ($i * 4), 4); + } + $data = getid3_lib::BigEndian2Int($data); + $offset += ($data_size * 4); + break; + case 0x0005: // 0x0005 = float (size field *= 8-byte), values are stored aaaabbbb where value is aaaa/bbbb; possibly multiple sets of values appended together + $data = array(); + for ($i = 0; $i < $data_size; $i++) { + $numerator = getid3_lib::BigEndian2Int(substr($atom_data, $offset + ($i * 8) + 0, 4)); + $denomninator = getid3_lib::BigEndian2Int(substr($atom_data, $offset + ($i * 8) + 4, 4)); + if ($denomninator == 0) { + $data[$i] = false; + } else { + $data[$i] = (double) $numerator / $denomninator; + } + } + $offset += (8 * $data_size); + if (count($data) == 1) { + $data = $data[0]; + } + break; + case 0x0007: // 0x0007 = bytes (size field *= 1-byte), values are stored as ?????? + $data = substr($atom_data, $offset, $data_size * 1); + $offset += ($data_size * 1); + break; + case 0x0008: // 0x0008 = ????? (size field *= 2-byte), values are stored as ?????? + $data = substr($atom_data, $offset, $data_size * 2); + $offset += ($data_size * 2); + break; + default: +echo 'QuicktimeParseNikonNCTG()::unknown $data_size_type: '.$data_size_type.'
                  '; + break 2; + } + + switch ($record_type) { + case 0x00000011: // CreateDate + case 0x00000012: // DateTimeOriginal + $data = strtotime($data); + break; + case 0x0200001e: // ColorSpace + switch ($data) { + case 1: + $data = 'sRGB'; + break; + case 2: + $data = 'Adobe RGB'; + break; + } + break; + case 0x02000023: // PictureControlData + $PictureControlAdjust = array(0=>'default', 1=>'quick', 2=>'full'); + $FilterEffect = array(0x80=>'off', 0x81=>'yellow', 0x82=>'orange', 0x83=>'red', 0x84=>'green', 0xff=>'n/a'); + $ToningEffect = array(0x80=>'b&w', 0x81=>'sepia', 0x82=>'cyanotype', 0x83=>'red', 0x84=>'yellow', 0x85=>'green', 0x86=>'blue-green', 0x87=>'blue', 0x88=>'purple-blue', 0x89=>'red-purple', 0xff=>'n/a'); + $data = array( + 'PictureControlVersion' => substr($data, 0, 4), + 'PictureControlName' => rtrim(substr($data, 4, 20), "\x00"), + 'PictureControlBase' => rtrim(substr($data, 24, 20), "\x00"), + //'?' => substr($data, 44, 4), + 'PictureControlAdjust' => $PictureControlAdjust[ord(substr($data, 48, 1))], + 'PictureControlQuickAdjust' => ord(substr($data, 49, 1)), + 'Sharpness' => ord(substr($data, 50, 1)), + 'Contrast' => ord(substr($data, 51, 1)), + 'Brightness' => ord(substr($data, 52, 1)), + 'Saturation' => ord(substr($data, 53, 1)), + 'HueAdjustment' => ord(substr($data, 54, 1)), + 'FilterEffect' => $FilterEffect[ord(substr($data, 55, 1))], + 'ToningEffect' => $ToningEffect[ord(substr($data, 56, 1))], + 'ToningSaturation' => ord(substr($data, 57, 1)), + ); + break; + case 0x02000024: // WorldTime + // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html#WorldTime + // timezone is stored as offset from GMT in minutes + $timezone = getid3_lib::BigEndian2Int(substr($data, 0, 2)); + if ($timezone & 0x8000) { + $timezone = 0 - (0x10000 - $timezone); + } + $timezone /= 60; + + $dst = (bool) getid3_lib::BigEndian2Int(substr($data, 2, 1)); + switch (getid3_lib::BigEndian2Int(substr($data, 3, 1))) { + case 2: + $datedisplayformat = 'D/M/Y'; break; + case 1: + $datedisplayformat = 'M/D/Y'; break; + case 0: + default: + $datedisplayformat = 'Y/M/D'; break; + } + + $data = array('timezone'=>floatval($timezone), 'dst'=>$dst, 'display'=>$datedisplayformat); + break; + case 0x02000083: // LensType + $data = array( + //'_' => $data, + 'mf' => (bool) ($data & 0x01), + 'd' => (bool) ($data & 0x02), + 'g' => (bool) ($data & 0x04), + 'vr' => (bool) ($data & 0x08), + ); + break; + } + $tag_name = (isset($NCTGtagName[$record_type]) ? $NCTGtagName[$record_type] : '0x'.str_pad(dechex($record_type), 8, '0', STR_PAD_LEFT)); + $parsed[$tag_name] = $data; + } + return $parsed; + } + + + public function CopyToAppropriateCommentsSection($keyname, $data, $boxname='') { + static $handyatomtranslatorarray = array(); + if (empty($handyatomtranslatorarray)) { + $handyatomtranslatorarray['©cpy'] = 'copyright'; + $handyatomtranslatorarray['©day'] = 'creation_date'; // iTunes 4.0 + $handyatomtranslatorarray['©dir'] = 'director'; + $handyatomtranslatorarray['©ed1'] = 'edit1'; + $handyatomtranslatorarray['©ed2'] = 'edit2'; + $handyatomtranslatorarray['©ed3'] = 'edit3'; + $handyatomtranslatorarray['©ed4'] = 'edit4'; + $handyatomtranslatorarray['©ed5'] = 'edit5'; + $handyatomtranslatorarray['©ed6'] = 'edit6'; + $handyatomtranslatorarray['©ed7'] = 'edit7'; + $handyatomtranslatorarray['©ed8'] = 'edit8'; + $handyatomtranslatorarray['©ed9'] = 'edit9'; + $handyatomtranslatorarray['©fmt'] = 'format'; + $handyatomtranslatorarray['©inf'] = 'information'; + $handyatomtranslatorarray['©prd'] = 'producer'; + $handyatomtranslatorarray['©prf'] = 'performers'; + $handyatomtranslatorarray['©req'] = 'system_requirements'; + $handyatomtranslatorarray['©src'] = 'source_credit'; + $handyatomtranslatorarray['©wrt'] = 'writer'; + + // http://www.geocities.com/xhelmboyx/quicktime/formats/qtm-layout.txt + $handyatomtranslatorarray['©nam'] = 'title'; // iTunes 4.0 + $handyatomtranslatorarray['©cmt'] = 'comment'; // iTunes 4.0 + $handyatomtranslatorarray['©wrn'] = 'warning'; + $handyatomtranslatorarray['©hst'] = 'host_computer'; + $handyatomtranslatorarray['©mak'] = 'make'; + $handyatomtranslatorarray['©mod'] = 'model'; + $handyatomtranslatorarray['©PRD'] = 'product'; + $handyatomtranslatorarray['©swr'] = 'software'; + $handyatomtranslatorarray['©aut'] = 'author'; + $handyatomtranslatorarray['©ART'] = 'artist'; + $handyatomtranslatorarray['©trk'] = 'track'; + $handyatomtranslatorarray['©alb'] = 'album'; // iTunes 4.0 + $handyatomtranslatorarray['©com'] = 'comment'; + $handyatomtranslatorarray['©gen'] = 'genre'; // iTunes 4.0 + $handyatomtranslatorarray['©ope'] = 'composer'; + $handyatomtranslatorarray['©url'] = 'url'; + $handyatomtranslatorarray['©enc'] = 'encoder'; + + // http://atomicparsley.sourceforge.net/mpeg-4files.html + $handyatomtranslatorarray['©art'] = 'artist'; // iTunes 4.0 + $handyatomtranslatorarray['aART'] = 'album_artist'; + $handyatomtranslatorarray['trkn'] = 'track_number'; // iTunes 4.0 + $handyatomtranslatorarray['disk'] = 'disc_number'; // iTunes 4.0 + $handyatomtranslatorarray['gnre'] = 'genre'; // iTunes 4.0 + $handyatomtranslatorarray['©too'] = 'encoder'; // iTunes 4.0 + $handyatomtranslatorarray['tmpo'] = 'bpm'; // iTunes 4.0 + $handyatomtranslatorarray['cprt'] = 'copyright'; // iTunes 4.0? + $handyatomtranslatorarray['cpil'] = 'compilation'; // iTunes 4.0 + $handyatomtranslatorarray['covr'] = 'picture'; // iTunes 4.0 + $handyatomtranslatorarray['rtng'] = 'rating'; // iTunes 4.0 + $handyatomtranslatorarray['©grp'] = 'grouping'; // iTunes 4.2 + $handyatomtranslatorarray['stik'] = 'stik'; // iTunes 4.9 + $handyatomtranslatorarray['pcst'] = 'podcast'; // iTunes 4.9 + $handyatomtranslatorarray['catg'] = 'category'; // iTunes 4.9 + $handyatomtranslatorarray['keyw'] = 'keyword'; // iTunes 4.9 + $handyatomtranslatorarray['purl'] = 'podcast_url'; // iTunes 4.9 + $handyatomtranslatorarray['egid'] = 'episode_guid'; // iTunes 4.9 + $handyatomtranslatorarray['desc'] = 'description'; // iTunes 5.0 + $handyatomtranslatorarray['©lyr'] = 'lyrics'; // iTunes 5.0 + $handyatomtranslatorarray['tvnn'] = 'tv_network_name'; // iTunes 6.0 + $handyatomtranslatorarray['tvsh'] = 'tv_show_name'; // iTunes 6.0 + $handyatomtranslatorarray['tvsn'] = 'tv_season'; // iTunes 6.0 + $handyatomtranslatorarray['tves'] = 'tv_episode'; // iTunes 6.0 + $handyatomtranslatorarray['purd'] = 'purchase_date'; // iTunes 6.0.2 + $handyatomtranslatorarray['pgap'] = 'gapless_playback'; // iTunes 7.0 + + // http://www.geocities.com/xhelmboyx/quicktime/formats/mp4-layout.txt + + + + // boxnames: + /* + $handyatomtranslatorarray['iTunSMPB'] = 'iTunSMPB'; + $handyatomtranslatorarray['iTunNORM'] = 'iTunNORM'; + $handyatomtranslatorarray['Encoding Params'] = 'Encoding Params'; + $handyatomtranslatorarray['replaygain_track_gain'] = 'replaygain_track_gain'; + $handyatomtranslatorarray['replaygain_track_peak'] = 'replaygain_track_peak'; + $handyatomtranslatorarray['replaygain_track_minmax'] = 'replaygain_track_minmax'; + $handyatomtranslatorarray['MusicIP PUID'] = 'MusicIP PUID'; + $handyatomtranslatorarray['MusicBrainz Artist Id'] = 'MusicBrainz Artist Id'; + $handyatomtranslatorarray['MusicBrainz Album Id'] = 'MusicBrainz Album Id'; + $handyatomtranslatorarray['MusicBrainz Album Artist Id'] = 'MusicBrainz Album Artist Id'; + $handyatomtranslatorarray['MusicBrainz Track Id'] = 'MusicBrainz Track Id'; + $handyatomtranslatorarray['MusicBrainz Disc Id'] = 'MusicBrainz Disc Id'; + + // http://age.hobba.nl/audio/tag_frame_reference.html + $handyatomtranslatorarray['PLAY_COUNTER'] = 'play_counter'; // Foobar2000 - http://www.getid3.org/phpBB3/viewtopic.php?t=1355 + $handyatomtranslatorarray['MEDIATYPE'] = 'mediatype'; // Foobar2000 - http://www.getid3.org/phpBB3/viewtopic.php?t=1355 + */ + } + $info = &$this->getid3->info; + $comment_key = ''; + if ($boxname && ($boxname != $keyname)) { + $comment_key = (isset($handyatomtranslatorarray[$boxname]) ? $handyatomtranslatorarray[$boxname] : $boxname); + } elseif (isset($handyatomtranslatorarray[$keyname])) { + $comment_key = $handyatomtranslatorarray[$keyname]; + } + if ($comment_key) { + if ($comment_key == 'picture') { + if (!is_array($data)) { + $image_mime = ''; + if (preg_match('#^\x89\x50\x4E\x47\x0D\x0A\x1A\x0A#', $data)) { + $image_mime = 'image/png'; + } elseif (preg_match('#^\xFF\xD8\xFF#', $data)) { + $image_mime = 'image/jpeg'; + } elseif (preg_match('#^GIF#', $data)) { + $image_mime = 'image/gif'; + } elseif (preg_match('#^BM#', $data)) { + $image_mime = 'image/bmp'; + } + $data = array('data'=>$data, 'image_mime'=>$image_mime); + } + } + $info['quicktime']['comments'][$comment_key][] = $data; + } + return true; + } + + public function NoNullString($nullterminatedstring) { + // remove the single null terminator on null terminated strings + if (substr($nullterminatedstring, strlen($nullterminatedstring) - 1, 1) === "\x00") { + return substr($nullterminatedstring, 0, strlen($nullterminatedstring) - 1); + } + return $nullterminatedstring; + } + + public function Pascal2String($pascalstring) { + // Pascal strings have 1 unsigned byte at the beginning saying how many chars (1-255) are in the string + return substr($pascalstring, 1); + } + +} diff --git a/src/wp-includes/ID3/module.audio-video.riff.php b/src/wp-includes/ID3/module.audio-video.riff.php new file mode 100644 index 0000000..8f43100 --- /dev/null +++ b/src/wp-includes/ID3/module.audio-video.riff.php @@ -0,0 +1,2435 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +// // +// module.audio-video.riff.php // +// module for analyzing RIFF files // +// multiple formats supported by this module: // +// Wave, AVI, AIFF/AIFC, (MP3,AC3)/RIFF, Wavpack v3, 8SVX // +// dependencies: module.audio.mp3.php // +// module.audio.ac3.php // +// module.audio.dts.php // +// /// +///////////////////////////////////////////////////////////////// + +/** +* @todo Parse AC-3/DTS audio inside WAVE correctly +* @todo Rewrite RIFF parser totally +*/ + +getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.mp3.php', __FILE__, true); +getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.ac3.php', __FILE__, true); +getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.dts.php', __FILE__, true); + +class getid3_riff extends getid3_handler +{ + + public function Analyze() { + $info = &$this->getid3->info; + + // initialize these values to an empty array, otherwise they default to NULL + // and you can't append array values to a NULL value + $info['riff'] = array('raw'=>array()); + + // Shortcuts + $thisfile_riff = &$info['riff']; + $thisfile_riff_raw = &$thisfile_riff['raw']; + $thisfile_audio = &$info['audio']; + $thisfile_video = &$info['video']; + $thisfile_audio_dataformat = &$thisfile_audio['dataformat']; + $thisfile_riff_audio = &$thisfile_riff['audio']; + $thisfile_riff_video = &$thisfile_riff['video']; + + $Original['avdataoffset'] = $info['avdataoffset']; + $Original['avdataend'] = $info['avdataend']; + + $this->fseek($info['avdataoffset']); + $RIFFheader = $this->fread(12); + $offset = $this->ftell(); + $RIFFtype = substr($RIFFheader, 0, 4); + $RIFFsize = substr($RIFFheader, 4, 4); + $RIFFsubtype = substr($RIFFheader, 8, 4); + + switch ($RIFFtype) { + + case 'FORM': // AIFF, AIFC + $info['fileformat'] = 'aiff'; + $thisfile_riff['header_size'] = $this->EitherEndian2Int($RIFFsize); + $thisfile_riff[$RIFFsubtype] = $this->ParseRIFF($offset, ($offset + $thisfile_riff['header_size'] - 4)); + break; + + case 'RIFF': // AVI, WAV, etc + case 'SDSS': // SDSS is identical to RIFF, just renamed. Used by SmartSound QuickTracks (www.smartsound.com) + case 'RMP3': // RMP3 is identical to RIFF, just renamed. Used by [unknown program] when creating RIFF-MP3s + $info['fileformat'] = 'riff'; + $thisfile_riff['header_size'] = $this->EitherEndian2Int($RIFFsize); + if ($RIFFsubtype == 'RMP3') { + // RMP3 is identical to WAVE, just renamed. Used by [unknown program] when creating RIFF-MP3s + $RIFFsubtype = 'WAVE'; + } + $thisfile_riff[$RIFFsubtype] = $this->ParseRIFF($offset, ($offset + $thisfile_riff['header_size'] - 4)); + if (($info['avdataend'] - $info['filesize']) == 1) { + // LiteWave appears to incorrectly *not* pad actual output file + // to nearest WORD boundary so may appear to be short by one + // byte, in which case - skip warning + $info['avdataend'] = $info['filesize']; + } + + $nextRIFFoffset = $Original['avdataoffset'] + 8 + $thisfile_riff['header_size']; // 8 = "RIFF" + 32-bit offset + while ($nextRIFFoffset < min($info['filesize'], $info['avdataend'])) { + try { + $this->fseek($nextRIFFoffset); + } catch (getid3_exception $e) { + if ($e->getCode() == 10) { + //$this->warning('RIFF parser: '.$e->getMessage()); + $this->error('AVI extends beyond '.round(PHP_INT_MAX / 1073741824).'GB and PHP filesystem functions cannot read that far, playtime may be wrong'); + $this->warning('[avdataend] value may be incorrect, multiple AVIX chunks may be present'); + break; + } else { + throw $e; + } + } + $nextRIFFheader = $this->fread(12); + if ($nextRIFFoffset == ($info['avdataend'] - 1)) { + if (substr($nextRIFFheader, 0, 1) == "\x00") { + // RIFF padded to WORD boundary, we're actually already at the end + break; + } + } + $nextRIFFheaderID = substr($nextRIFFheader, 0, 4); + $nextRIFFsize = $this->EitherEndian2Int(substr($nextRIFFheader, 4, 4)); + $nextRIFFtype = substr($nextRIFFheader, 8, 4); + $chunkdata = array(); + $chunkdata['offset'] = $nextRIFFoffset + 8; + $chunkdata['size'] = $nextRIFFsize; + $nextRIFFoffset = $chunkdata['offset'] + $chunkdata['size']; + + switch ($nextRIFFheaderID) { + + case 'RIFF': + $chunkdata['chunks'] = $this->ParseRIFF($chunkdata['offset'] + 4, $nextRIFFoffset); + + if (!isset($thisfile_riff[$nextRIFFtype])) { + $thisfile_riff[$nextRIFFtype] = array(); + } + $thisfile_riff[$nextRIFFtype][] = $chunkdata; + break; + + case 'JUNK': + // ignore + $thisfile_riff[$nextRIFFheaderID][] = $chunkdata; + break; + + case 'IDVX': + $info['divxtag']['comments'] = self::ParseDIVXTAG($this->fread($chunkdata['size'])); + break; + + default: + if ($info['filesize'] == ($chunkdata['offset'] - 8 + 128)) { + $DIVXTAG = $nextRIFFheader.$this->fread(128 - 12); + if (substr($DIVXTAG, -7) == 'DIVXTAG') { + // DIVXTAG is supposed to be inside an IDVX chunk in a LIST chunk, but some bad encoders just slap it on the end of a file + $this->warning('Found wrongly-structured DIVXTAG at offset '.($this->ftell() - 128).', parsing anyway'); + $info['divxtag']['comments'] = self::ParseDIVXTAG($DIVXTAG); + break 2; + } + } + $this->warning('Expecting "RIFF|JUNK|IDVX" at '.$nextRIFFoffset.', found "'.$nextRIFFheaderID.'" ('.getid3_lib::PrintHexBytes($nextRIFFheaderID).') - skipping rest of file'); + break 2; + + } + + } + if ($RIFFsubtype == 'WAVE') { + $thisfile_riff_WAVE = &$thisfile_riff['WAVE']; + } + break; + + default: + $this->error('Cannot parse RIFF (this is maybe not a RIFF / WAV / AVI file?) - expecting "FORM|RIFF|SDSS|RMP3" found "'.$RIFFsubtype.'" instead'); + unset($info['fileformat']); + return false; + } + + $streamindex = 0; + switch ($RIFFsubtype) { + case 'WAVE': + if (empty($thisfile_audio['bitrate_mode'])) { + $thisfile_audio['bitrate_mode'] = 'cbr'; + } + if (empty($thisfile_audio_dataformat)) { + $thisfile_audio_dataformat = 'wav'; + } + + if (isset($thisfile_riff_WAVE['data'][0]['offset'])) { + $info['avdataoffset'] = $thisfile_riff_WAVE['data'][0]['offset'] + 8; + $info['avdataend'] = $info['avdataoffset'] + $thisfile_riff_WAVE['data'][0]['size']; + } + if (isset($thisfile_riff_WAVE['fmt '][0]['data'])) { + + $thisfile_riff_audio[$streamindex] = self::parseWAVEFORMATex($thisfile_riff_WAVE['fmt '][0]['data']); + $thisfile_audio['wformattag'] = $thisfile_riff_audio[$streamindex]['raw']['wFormatTag']; + if (!isset($thisfile_riff_audio[$streamindex]['bitrate']) || ($thisfile_riff_audio[$streamindex]['bitrate'] == 0)) { + $info['error'][] = 'Corrupt RIFF file: bitrate_audio == zero'; + return false; + } + $thisfile_riff_raw['fmt '] = $thisfile_riff_audio[$streamindex]['raw']; + unset($thisfile_riff_audio[$streamindex]['raw']); + $thisfile_audio['streams'][$streamindex] = $thisfile_riff_audio[$streamindex]; + + $thisfile_audio = getid3_lib::array_merge_noclobber($thisfile_audio, $thisfile_riff_audio[$streamindex]); + if (substr($thisfile_audio['codec'], 0, strlen('unknown: 0x')) == 'unknown: 0x') { + $info['warning'][] = 'Audio codec = '.$thisfile_audio['codec']; + } + $thisfile_audio['bitrate'] = $thisfile_riff_audio[$streamindex]['bitrate']; + + if (empty($info['playtime_seconds'])) { // may already be set (e.g. DTS-WAV) + $info['playtime_seconds'] = (float) ((($info['avdataend'] - $info['avdataoffset']) * 8) / $thisfile_audio['bitrate']); + } + + $thisfile_audio['lossless'] = false; + if (isset($thisfile_riff_WAVE['data'][0]['offset']) && isset($thisfile_riff_raw['fmt ']['wFormatTag'])) { + switch ($thisfile_riff_raw['fmt ']['wFormatTag']) { + + case 0x0001: // PCM + $thisfile_audio['lossless'] = true; + break; + + case 0x2000: // AC-3 + $thisfile_audio_dataformat = 'ac3'; + break; + + default: + // do nothing + break; + + } + } + $thisfile_audio['streams'][$streamindex]['wformattag'] = $thisfile_audio['wformattag']; + $thisfile_audio['streams'][$streamindex]['bitrate_mode'] = $thisfile_audio['bitrate_mode']; + $thisfile_audio['streams'][$streamindex]['lossless'] = $thisfile_audio['lossless']; + $thisfile_audio['streams'][$streamindex]['dataformat'] = $thisfile_audio_dataformat; + } + + if (isset($thisfile_riff_WAVE['rgad'][0]['data'])) { + + // shortcuts + $rgadData = &$thisfile_riff_WAVE['rgad'][0]['data']; + $thisfile_riff_raw['rgad'] = array('track'=>array(), 'album'=>array()); + $thisfile_riff_raw_rgad = &$thisfile_riff_raw['rgad']; + $thisfile_riff_raw_rgad_track = &$thisfile_riff_raw_rgad['track']; + $thisfile_riff_raw_rgad_album = &$thisfile_riff_raw_rgad['album']; + + $thisfile_riff_raw_rgad['fPeakAmplitude'] = getid3_lib::LittleEndian2Float(substr($rgadData, 0, 4)); + $thisfile_riff_raw_rgad['nRadioRgAdjust'] = $this->EitherEndian2Int(substr($rgadData, 4, 2)); + $thisfile_riff_raw_rgad['nAudiophileRgAdjust'] = $this->EitherEndian2Int(substr($rgadData, 6, 2)); + + $nRadioRgAdjustBitstring = str_pad(getid3_lib::Dec2Bin($thisfile_riff_raw_rgad['nRadioRgAdjust']), 16, '0', STR_PAD_LEFT); + $nAudiophileRgAdjustBitstring = str_pad(getid3_lib::Dec2Bin($thisfile_riff_raw_rgad['nAudiophileRgAdjust']), 16, '0', STR_PAD_LEFT); + $thisfile_riff_raw_rgad_track['name'] = getid3_lib::Bin2Dec(substr($nRadioRgAdjustBitstring, 0, 3)); + $thisfile_riff_raw_rgad_track['originator'] = getid3_lib::Bin2Dec(substr($nRadioRgAdjustBitstring, 3, 3)); + $thisfile_riff_raw_rgad_track['signbit'] = getid3_lib::Bin2Dec(substr($nRadioRgAdjustBitstring, 6, 1)); + $thisfile_riff_raw_rgad_track['adjustment'] = getid3_lib::Bin2Dec(substr($nRadioRgAdjustBitstring, 7, 9)); + $thisfile_riff_raw_rgad_album['name'] = getid3_lib::Bin2Dec(substr($nAudiophileRgAdjustBitstring, 0, 3)); + $thisfile_riff_raw_rgad_album['originator'] = getid3_lib::Bin2Dec(substr($nAudiophileRgAdjustBitstring, 3, 3)); + $thisfile_riff_raw_rgad_album['signbit'] = getid3_lib::Bin2Dec(substr($nAudiophileRgAdjustBitstring, 6, 1)); + $thisfile_riff_raw_rgad_album['adjustment'] = getid3_lib::Bin2Dec(substr($nAudiophileRgAdjustBitstring, 7, 9)); + + $thisfile_riff['rgad']['peakamplitude'] = $thisfile_riff_raw_rgad['fPeakAmplitude']; + if (($thisfile_riff_raw_rgad_track['name'] != 0) && ($thisfile_riff_raw_rgad_track['originator'] != 0)) { + $thisfile_riff['rgad']['track']['name'] = getid3_lib::RGADnameLookup($thisfile_riff_raw_rgad_track['name']); + $thisfile_riff['rgad']['track']['originator'] = getid3_lib::RGADoriginatorLookup($thisfile_riff_raw_rgad_track['originator']); + $thisfile_riff['rgad']['track']['adjustment'] = getid3_lib::RGADadjustmentLookup($thisfile_riff_raw_rgad_track['adjustment'], $thisfile_riff_raw_rgad_track['signbit']); + } + if (($thisfile_riff_raw_rgad_album['name'] != 0) && ($thisfile_riff_raw_rgad_album['originator'] != 0)) { + $thisfile_riff['rgad']['album']['name'] = getid3_lib::RGADnameLookup($thisfile_riff_raw_rgad_album['name']); + $thisfile_riff['rgad']['album']['originator'] = getid3_lib::RGADoriginatorLookup($thisfile_riff_raw_rgad_album['originator']); + $thisfile_riff['rgad']['album']['adjustment'] = getid3_lib::RGADadjustmentLookup($thisfile_riff_raw_rgad_album['adjustment'], $thisfile_riff_raw_rgad_album['signbit']); + } + } + + if (isset($thisfile_riff_WAVE['fact'][0]['data'])) { + $thisfile_riff_raw['fact']['NumberOfSamples'] = $this->EitherEndian2Int(substr($thisfile_riff_WAVE['fact'][0]['data'], 0, 4)); + + // This should be a good way of calculating exact playtime, + // but some sample files have had incorrect number of samples, + // so cannot use this method + + // if (!empty($thisfile_riff_raw['fmt ']['nSamplesPerSec'])) { + // $info['playtime_seconds'] = (float) $thisfile_riff_raw['fact']['NumberOfSamples'] / $thisfile_riff_raw['fmt ']['nSamplesPerSec']; + // } + } + if (!empty($thisfile_riff_raw['fmt ']['nAvgBytesPerSec'])) { + $thisfile_audio['bitrate'] = getid3_lib::CastAsInt($thisfile_riff_raw['fmt ']['nAvgBytesPerSec'] * 8); + } + + if (isset($thisfile_riff_WAVE['bext'][0]['data'])) { + // shortcut + $thisfile_riff_WAVE_bext_0 = &$thisfile_riff_WAVE['bext'][0]; + + $thisfile_riff_WAVE_bext_0['title'] = trim(substr($thisfile_riff_WAVE_bext_0['data'], 0, 256)); + $thisfile_riff_WAVE_bext_0['author'] = trim(substr($thisfile_riff_WAVE_bext_0['data'], 256, 32)); + $thisfile_riff_WAVE_bext_0['reference'] = trim(substr($thisfile_riff_WAVE_bext_0['data'], 288, 32)); + $thisfile_riff_WAVE_bext_0['origin_date'] = substr($thisfile_riff_WAVE_bext_0['data'], 320, 10); + $thisfile_riff_WAVE_bext_0['origin_time'] = substr($thisfile_riff_WAVE_bext_0['data'], 330, 8); + $thisfile_riff_WAVE_bext_0['time_reference'] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_bext_0['data'], 338, 8)); + $thisfile_riff_WAVE_bext_0['bwf_version'] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_bext_0['data'], 346, 1)); + $thisfile_riff_WAVE_bext_0['reserved'] = substr($thisfile_riff_WAVE_bext_0['data'], 347, 254); + $thisfile_riff_WAVE_bext_0['coding_history'] = explode("\r\n", trim(substr($thisfile_riff_WAVE_bext_0['data'], 601))); + if (preg_match('#^([0-9]{4}).([0-9]{2}).([0-9]{2})$#', $thisfile_riff_WAVE_bext_0['origin_date'], $matches_bext_date)) { + if (preg_match('#^([0-9]{2}).([0-9]{2}).([0-9]{2})$#', $thisfile_riff_WAVE_bext_0['origin_time'], $matches_bext_time)) { + list($dummy, $bext_timestamp['year'], $bext_timestamp['month'], $bext_timestamp['day']) = $matches_bext_date; + list($dummy, $bext_timestamp['hour'], $bext_timestamp['minute'], $bext_timestamp['second']) = $matches_bext_time; + $thisfile_riff_WAVE_bext_0['origin_date_unix'] = gmmktime($bext_timestamp['hour'], $bext_timestamp['minute'], $bext_timestamp['second'], $bext_timestamp['month'], $bext_timestamp['day'], $bext_timestamp['year']); + } else { + $info['warning'][] = 'RIFF.WAVE.BEXT.origin_time is invalid'; + } + } else { + $info['warning'][] = 'RIFF.WAVE.BEXT.origin_date is invalid'; + } + $thisfile_riff['comments']['author'][] = $thisfile_riff_WAVE_bext_0['author']; + $thisfile_riff['comments']['title'][] = $thisfile_riff_WAVE_bext_0['title']; + } + + if (isset($thisfile_riff_WAVE['MEXT'][0]['data'])) { + // shortcut + $thisfile_riff_WAVE_MEXT_0 = &$thisfile_riff_WAVE['MEXT'][0]; + + $thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_MEXT_0['data'], 0, 2)); + $thisfile_riff_WAVE_MEXT_0['flags']['homogenous'] = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] & 0x0001); + if ($thisfile_riff_WAVE_MEXT_0['flags']['homogenous']) { + $thisfile_riff_WAVE_MEXT_0['flags']['padding'] = ($thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] & 0x0002) ? false : true; + $thisfile_riff_WAVE_MEXT_0['flags']['22_or_44'] = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] & 0x0004); + $thisfile_riff_WAVE_MEXT_0['flags']['free_format'] = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] & 0x0008); + + $thisfile_riff_WAVE_MEXT_0['nominal_frame_size'] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_MEXT_0['data'], 2, 2)); + } + $thisfile_riff_WAVE_MEXT_0['anciliary_data_length'] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_MEXT_0['data'], 6, 2)); + $thisfile_riff_WAVE_MEXT_0['raw']['anciliary_data_def'] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_MEXT_0['data'], 8, 2)); + $thisfile_riff_WAVE_MEXT_0['flags']['anciliary_data_left'] = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['anciliary_data_def'] & 0x0001); + $thisfile_riff_WAVE_MEXT_0['flags']['anciliary_data_free'] = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['anciliary_data_def'] & 0x0002); + $thisfile_riff_WAVE_MEXT_0['flags']['anciliary_data_right'] = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['anciliary_data_def'] & 0x0004); + } + + if (isset($thisfile_riff_WAVE['cart'][0]['data'])) { + // shortcut + $thisfile_riff_WAVE_cart_0 = &$thisfile_riff_WAVE['cart'][0]; + + $thisfile_riff_WAVE_cart_0['version'] = substr($thisfile_riff_WAVE_cart_0['data'], 0, 4); + $thisfile_riff_WAVE_cart_0['title'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 4, 64)); + $thisfile_riff_WAVE_cart_0['artist'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 68, 64)); + $thisfile_riff_WAVE_cart_0['cut_id'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 132, 64)); + $thisfile_riff_WAVE_cart_0['client_id'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 196, 64)); + $thisfile_riff_WAVE_cart_0['category'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 260, 64)); + $thisfile_riff_WAVE_cart_0['classification'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 324, 64)); + $thisfile_riff_WAVE_cart_0['out_cue'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 388, 64)); + $thisfile_riff_WAVE_cart_0['start_date'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 452, 10)); + $thisfile_riff_WAVE_cart_0['start_time'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 462, 8)); + $thisfile_riff_WAVE_cart_0['end_date'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 470, 10)); + $thisfile_riff_WAVE_cart_0['end_time'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 480, 8)); + $thisfile_riff_WAVE_cart_0['producer_app_id'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 488, 64)); + $thisfile_riff_WAVE_cart_0['producer_app_version'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 552, 64)); + $thisfile_riff_WAVE_cart_0['user_defined_text'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 616, 64)); + $thisfile_riff_WAVE_cart_0['zero_db_reference'] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_cart_0['data'], 680, 4), true); + for ($i = 0; $i < 8; $i++) { + $thisfile_riff_WAVE_cart_0['post_time'][$i]['usage_fourcc'] = substr($thisfile_riff_WAVE_cart_0['data'], 684 + ($i * 8), 4); + $thisfile_riff_WAVE_cart_0['post_time'][$i]['timer_value'] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_cart_0['data'], 684 + ($i * 8) + 4, 4)); + } + $thisfile_riff_WAVE_cart_0['url'] = trim(substr($thisfile_riff_WAVE_cart_0['data'], 748, 1024)); + $thisfile_riff_WAVE_cart_0['tag_text'] = explode("\r\n", trim(substr($thisfile_riff_WAVE_cart_0['data'], 1772))); + + $thisfile_riff['comments']['artist'][] = $thisfile_riff_WAVE_cart_0['artist']; + $thisfile_riff['comments']['title'][] = $thisfile_riff_WAVE_cart_0['title']; + } + + if (isset($thisfile_riff_WAVE['SNDM'][0]['data'])) { + // SoundMiner metadata + + // shortcuts + $thisfile_riff_WAVE_SNDM_0 = &$thisfile_riff_WAVE['SNDM'][0]; + $thisfile_riff_WAVE_SNDM_0_data = &$thisfile_riff_WAVE_SNDM_0['data']; + $SNDM_startoffset = 0; + $SNDM_endoffset = $thisfile_riff_WAVE_SNDM_0['size']; + + while ($SNDM_startoffset < $SNDM_endoffset) { + $SNDM_thisTagOffset = 0; + $SNDM_thisTagSize = getid3_lib::BigEndian2Int(substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, 4)); + $SNDM_thisTagOffset += 4; + $SNDM_thisTagKey = substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, 4); + $SNDM_thisTagOffset += 4; + $SNDM_thisTagDataSize = getid3_lib::BigEndian2Int(substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, 2)); + $SNDM_thisTagOffset += 2; + $SNDM_thisTagDataFlags = getid3_lib::BigEndian2Int(substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, 2)); + $SNDM_thisTagOffset += 2; + $SNDM_thisTagDataText = substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, $SNDM_thisTagDataSize); + $SNDM_thisTagOffset += $SNDM_thisTagDataSize; + + if ($SNDM_thisTagSize != (4 + 4 + 2 + 2 + $SNDM_thisTagDataSize)) { + $info['warning'][] = 'RIFF.WAVE.SNDM.data contains tag not expected length (expected: '.$SNDM_thisTagSize.', found: '.(4 + 4 + 2 + 2 + $SNDM_thisTagDataSize).') at offset '.$SNDM_startoffset.' (file offset '.($thisfile_riff_WAVE_SNDM_0['offset'] + $SNDM_startoffset).')'; + break; + } elseif ($SNDM_thisTagSize <= 0) { + $info['warning'][] = 'RIFF.WAVE.SNDM.data contains zero-size tag at offset '.$SNDM_startoffset.' (file offset '.($thisfile_riff_WAVE_SNDM_0['offset'] + $SNDM_startoffset).')'; + break; + } + $SNDM_startoffset += $SNDM_thisTagSize; + + $thisfile_riff_WAVE_SNDM_0['parsed_raw'][$SNDM_thisTagKey] = $SNDM_thisTagDataText; + if ($parsedkey = self::waveSNDMtagLookup($SNDM_thisTagKey)) { + $thisfile_riff_WAVE_SNDM_0['parsed'][$parsedkey] = $SNDM_thisTagDataText; + } else { + $info['warning'][] = 'RIFF.WAVE.SNDM contains unknown tag "'.$SNDM_thisTagKey.'" at offset '.$SNDM_startoffset.' (file offset '.($thisfile_riff_WAVE_SNDM_0['offset'] + $SNDM_startoffset).')'; + } + } + + $tagmapping = array( + 'tracktitle'=>'title', + 'category' =>'genre', + 'cdtitle' =>'album', + 'tracktitle'=>'title', + ); + foreach ($tagmapping as $fromkey => $tokey) { + if (isset($thisfile_riff_WAVE_SNDM_0['parsed'][$fromkey])) { + $thisfile_riff['comments'][$tokey][] = $thisfile_riff_WAVE_SNDM_0['parsed'][$fromkey]; + } + } + } + + if (isset($thisfile_riff_WAVE['iXML'][0]['data'])) { + // requires functions simplexml_load_string and get_object_vars + if ($parsedXML = getid3_lib::XML2array($thisfile_riff_WAVE['iXML'][0]['data'])) { + $thisfile_riff_WAVE['iXML'][0]['parsed'] = $parsedXML; + if (isset($parsedXML['SPEED']['MASTER_SPEED'])) { + @list($numerator, $denominator) = explode('/', $parsedXML['SPEED']['MASTER_SPEED']); + $thisfile_riff_WAVE['iXML'][0]['master_speed'] = $numerator / ($denominator ? $denominator : 1000); + } + if (isset($parsedXML['SPEED']['TIMECODE_RATE'])) { + @list($numerator, $denominator) = explode('/', $parsedXML['SPEED']['TIMECODE_RATE']); + $thisfile_riff_WAVE['iXML'][0]['timecode_rate'] = $numerator / ($denominator ? $denominator : 1000); + } + if (isset($parsedXML['SPEED']['TIMESTAMP_SAMPLES_SINCE_MIDNIGHT_LO']) && !empty($parsedXML['SPEED']['TIMESTAMP_SAMPLE_RATE']) && !empty($thisfile_riff_WAVE['iXML'][0]['timecode_rate'])) { + $samples_since_midnight = floatval(ltrim($parsedXML['SPEED']['TIMESTAMP_SAMPLES_SINCE_MIDNIGHT_HI'].$parsedXML['SPEED']['TIMESTAMP_SAMPLES_SINCE_MIDNIGHT_LO'], '0')); + $thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] = $samples_since_midnight / $parsedXML['SPEED']['TIMESTAMP_SAMPLE_RATE']; + $h = floor( $thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] / 3600); + $m = floor(($thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] - ($h * 3600)) / 60); + $s = floor( $thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] - ($h * 3600) - ($m * 60)); + $f = ($thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] - ($h * 3600) - ($m * 60) - $s) * $thisfile_riff_WAVE['iXML'][0]['timecode_rate']; + $thisfile_riff_WAVE['iXML'][0]['timecode_string'] = sprintf('%02d:%02d:%02d:%05.2f', $h, $m, $s, $f); + $thisfile_riff_WAVE['iXML'][0]['timecode_string_round'] = sprintf('%02d:%02d:%02d:%02d', $h, $m, $s, round($f)); + } + unset($parsedXML); + } + } + + + + if (!isset($thisfile_audio['bitrate']) && isset($thisfile_riff_audio[$streamindex]['bitrate'])) { + $thisfile_audio['bitrate'] = $thisfile_riff_audio[$streamindex]['bitrate']; + $info['playtime_seconds'] = (float) ((($info['avdataend'] - $info['avdataoffset']) * 8) / $thisfile_audio['bitrate']); + } + + if (!empty($info['wavpack'])) { + $thisfile_audio_dataformat = 'wavpack'; + $thisfile_audio['bitrate_mode'] = 'vbr'; + $thisfile_audio['encoder'] = 'WavPack v'.$info['wavpack']['version']; + + // Reset to the way it was - RIFF parsing will have messed this up + $info['avdataend'] = $Original['avdataend']; + $thisfile_audio['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds']; + + $this->fseek($info['avdataoffset'] - 44); + $RIFFdata = $this->fread(44); + $OrignalRIFFheaderSize = getid3_lib::LittleEndian2Int(substr($RIFFdata, 4, 4)) + 8; + $OrignalRIFFdataSize = getid3_lib::LittleEndian2Int(substr($RIFFdata, 40, 4)) + 44; + + if ($OrignalRIFFheaderSize > $OrignalRIFFdataSize) { + $info['avdataend'] -= ($OrignalRIFFheaderSize - $OrignalRIFFdataSize); + $this->fseek($info['avdataend']); + $RIFFdata .= $this->fread($OrignalRIFFheaderSize - $OrignalRIFFdataSize); + } + + // move the data chunk after all other chunks (if any) + // so that the RIFF parser doesn't see EOF when trying + // to skip over the data chunk + $RIFFdata = substr($RIFFdata, 0, 36).substr($RIFFdata, 44).substr($RIFFdata, 36, 8); + $getid3_riff = new getid3_riff($this->getid3); + $getid3_riff->ParseRIFFdata($RIFFdata); + unset($getid3_riff); + } + + if (isset($thisfile_riff_raw['fmt ']['wFormatTag'])) { + switch ($thisfile_riff_raw['fmt ']['wFormatTag']) { + case 0x0001: // PCM + if (!empty($info['ac3'])) { + // Dolby Digital WAV files masquerade as PCM-WAV, but they're not + $thisfile_audio['wformattag'] = 0x2000; + $thisfile_audio['codec'] = self::wFormatTagLookup($thisfile_audio['wformattag']); + $thisfile_audio['lossless'] = false; + $thisfile_audio['bitrate'] = $info['ac3']['bitrate']; + $thisfile_audio['sample_rate'] = $info['ac3']['sample_rate']; + } + if (!empty($info['dts'])) { + // Dolby DTS files masquerade as PCM-WAV, but they're not + $thisfile_audio['wformattag'] = 0x2001; + $thisfile_audio['codec'] = self::wFormatTagLookup($thisfile_audio['wformattag']); + $thisfile_audio['lossless'] = false; + $thisfile_audio['bitrate'] = $info['dts']['bitrate']; + $thisfile_audio['sample_rate'] = $info['dts']['sample_rate']; + } + break; + case 0x08AE: // ClearJump LiteWave + $thisfile_audio['bitrate_mode'] = 'vbr'; + $thisfile_audio_dataformat = 'litewave'; + + //typedef struct tagSLwFormat { + // WORD m_wCompFormat; // low byte defines compression method, high byte is compression flags + // DWORD m_dwScale; // scale factor for lossy compression + // DWORD m_dwBlockSize; // number of samples in encoded blocks + // WORD m_wQuality; // alias for the scale factor + // WORD m_wMarkDistance; // distance between marks in bytes + // WORD m_wReserved; + // + // //following paramters are ignored if CF_FILESRC is not set + // DWORD m_dwOrgSize; // original file size in bytes + // WORD m_bFactExists; // indicates if 'fact' chunk exists in the original file + // DWORD m_dwRiffChunkSize; // riff chunk size in the original file + // + // PCMWAVEFORMAT m_OrgWf; // original wave format + // }SLwFormat, *PSLwFormat; + + // shortcut + $thisfile_riff['litewave']['raw'] = array(); + $riff_litewave = &$thisfile_riff['litewave']; + $riff_litewave_raw = &$riff_litewave['raw']; + + $flags = array( + 'compression_method' => 1, + 'compression_flags' => 1, + 'm_dwScale' => 4, + 'm_dwBlockSize' => 4, + 'm_wQuality' => 2, + 'm_wMarkDistance' => 2, + 'm_wReserved' => 2, + 'm_dwOrgSize' => 4, + 'm_bFactExists' => 2, + 'm_dwRiffChunkSize' => 4, + ); + $litewave_offset = 18; + foreach ($flags as $flag => $length) { + $riff_litewave_raw[$flag] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE['fmt '][0]['data'], $litewave_offset, $length)); + $litewave_offset += $length; + } + + //$riff_litewave['quality_factor'] = intval(round((2000 - $riff_litewave_raw['m_dwScale']) / 20)); + $riff_litewave['quality_factor'] = $riff_litewave_raw['m_wQuality']; + + $riff_litewave['flags']['raw_source'] = ($riff_litewave_raw['compression_flags'] & 0x01) ? false : true; + $riff_litewave['flags']['vbr_blocksize'] = ($riff_litewave_raw['compression_flags'] & 0x02) ? false : true; + $riff_litewave['flags']['seekpoints'] = (bool) ($riff_litewave_raw['compression_flags'] & 0x04); + + $thisfile_audio['lossless'] = (($riff_litewave_raw['m_wQuality'] == 100) ? true : false); + $thisfile_audio['encoder_options'] = '-q'.$riff_litewave['quality_factor']; + break; + + default: + break; + } + } + if ($info['avdataend'] > $info['filesize']) { + switch (!empty($thisfile_audio_dataformat) ? $thisfile_audio_dataformat : '') { + case 'wavpack': // WavPack + case 'lpac': // LPAC + case 'ofr': // OptimFROG + case 'ofs': // OptimFROG DualStream + // lossless compressed audio formats that keep original RIFF headers - skip warning + break; + + case 'litewave': + if (($info['avdataend'] - $info['filesize']) == 1) { + // LiteWave appears to incorrectly *not* pad actual output file + // to nearest WORD boundary so may appear to be short by one + // byte, in which case - skip warning + } else { + // Short by more than one byte, throw warning + $info['warning'][] = 'Probably truncated file - expecting '.$thisfile_riff[$RIFFsubtype]['data'][0]['size'].' bytes of data, only found '.($info['filesize'] - $info['avdataoffset']).' (short by '.($thisfile_riff[$RIFFsubtype]['data'][0]['size'] - ($info['filesize'] - $info['avdataoffset'])).' bytes)'; + $info['avdataend'] = $info['filesize']; + } + break; + + default: + if ((($info['avdataend'] - $info['filesize']) == 1) && (($thisfile_riff[$RIFFsubtype]['data'][0]['size'] % 2) == 0) && ((($info['filesize'] - $info['avdataoffset']) % 2) == 1)) { + // output file appears to be incorrectly *not* padded to nearest WORD boundary + // Output less severe warning + $info['warning'][] = 'File should probably be padded to nearest WORD boundary, but it is not (expecting '.$thisfile_riff[$RIFFsubtype]['data'][0]['size'].' bytes of data, only found '.($info['filesize'] - $info['avdataoffset']).' therefore short by '.($thisfile_riff[$RIFFsubtype]['data'][0]['size'] - ($info['filesize'] - $info['avdataoffset'])).' bytes)'; + $info['avdataend'] = $info['filesize']; + } else { + // Short by more than one byte, throw warning + $info['warning'][] = 'Probably truncated file - expecting '.$thisfile_riff[$RIFFsubtype]['data'][0]['size'].' bytes of data, only found '.($info['filesize'] - $info['avdataoffset']).' (short by '.($thisfile_riff[$RIFFsubtype]['data'][0]['size'] - ($info['filesize'] - $info['avdataoffset'])).' bytes)'; + $info['avdataend'] = $info['filesize']; + } + break; + } + } + if (!empty($info['mpeg']['audio']['LAME']['audio_bytes'])) { + if ((($info['avdataend'] - $info['avdataoffset']) - $info['mpeg']['audio']['LAME']['audio_bytes']) == 1) { + $info['avdataend']--; + $info['warning'][] = 'Extra null byte at end of MP3 data assumed to be RIFF padding and therefore ignored'; + } + } + if (isset($thisfile_audio_dataformat) && ($thisfile_audio_dataformat == 'ac3')) { + unset($thisfile_audio['bits_per_sample']); + if (!empty($info['ac3']['bitrate']) && ($info['ac3']['bitrate'] != $thisfile_audio['bitrate'])) { + $thisfile_audio['bitrate'] = $info['ac3']['bitrate']; + } + } + break; + + case 'AVI ': + $thisfile_video['bitrate_mode'] = 'vbr'; // maybe not, but probably + $thisfile_video['dataformat'] = 'avi'; + $info['mime_type'] = 'video/avi'; + + if (isset($thisfile_riff[$RIFFsubtype]['movi']['offset'])) { + $info['avdataoffset'] = $thisfile_riff[$RIFFsubtype]['movi']['offset'] + 8; + if (isset($thisfile_riff['AVIX'])) { + $info['avdataend'] = $thisfile_riff['AVIX'][(count($thisfile_riff['AVIX']) - 1)]['chunks']['movi']['offset'] + $thisfile_riff['AVIX'][(count($thisfile_riff['AVIX']) - 1)]['chunks']['movi']['size']; + } else { + $info['avdataend'] = $thisfile_riff['AVI ']['movi']['offset'] + $thisfile_riff['AVI ']['movi']['size']; + } + if ($info['avdataend'] > $info['filesize']) { + $info['warning'][] = 'Probably truncated file - expecting '.($info['avdataend'] - $info['avdataoffset']).' bytes of data, only found '.($info['filesize'] - $info['avdataoffset']).' (short by '.($info['avdataend'] - $info['filesize']).' bytes)'; + $info['avdataend'] = $info['filesize']; + } + } + + if (isset($thisfile_riff['AVI ']['hdrl']['strl']['indx'])) { + //$bIndexType = array( + // 0x00 => 'AVI_INDEX_OF_INDEXES', + // 0x01 => 'AVI_INDEX_OF_CHUNKS', + // 0x80 => 'AVI_INDEX_IS_DATA', + //); + //$bIndexSubtype = array( + // 0x01 => array( + // 0x01 => 'AVI_INDEX_2FIELD', + // ), + //); + foreach ($thisfile_riff['AVI ']['hdrl']['strl']['indx'] as $streamnumber => $steamdataarray) { + $ahsisd = &$thisfile_riff['AVI ']['hdrl']['strl']['indx'][$streamnumber]['data']; + + $thisfile_riff_raw['indx'][$streamnumber]['wLongsPerEntry'] = $this->EitherEndian2Int(substr($ahsisd, 0, 2)); + $thisfile_riff_raw['indx'][$streamnumber]['bIndexSubType'] = $this->EitherEndian2Int(substr($ahsisd, 2, 1)); + $thisfile_riff_raw['indx'][$streamnumber]['bIndexType'] = $this->EitherEndian2Int(substr($ahsisd, 3, 1)); + $thisfile_riff_raw['indx'][$streamnumber]['nEntriesInUse'] = $this->EitherEndian2Int(substr($ahsisd, 4, 4)); + $thisfile_riff_raw['indx'][$streamnumber]['dwChunkId'] = substr($ahsisd, 8, 4); + $thisfile_riff_raw['indx'][$streamnumber]['dwReserved'] = $this->EitherEndian2Int(substr($ahsisd, 12, 4)); + + //$thisfile_riff_raw['indx'][$streamnumber]['bIndexType_name'] = $bIndexType[$thisfile_riff_raw['indx'][$streamnumber]['bIndexType']]; + //$thisfile_riff_raw['indx'][$streamnumber]['bIndexSubType_name'] = $bIndexSubtype[$thisfile_riff_raw['indx'][$streamnumber]['bIndexType']][$thisfile_riff_raw['indx'][$streamnumber]['bIndexSubType']]; + + unset($ahsisd); + } + } + if (isset($thisfile_riff['AVI ']['hdrl']['avih'][$streamindex]['data'])) { + $avihData = $thisfile_riff['AVI ']['hdrl']['avih'][$streamindex]['data']; + + // shortcut + $thisfile_riff_raw['avih'] = array(); + $thisfile_riff_raw_avih = &$thisfile_riff_raw['avih']; + + $thisfile_riff_raw_avih['dwMicroSecPerFrame'] = $this->EitherEndian2Int(substr($avihData, 0, 4)); // frame display rate (or 0L) + if ($thisfile_riff_raw_avih['dwMicroSecPerFrame'] == 0) { + $info['error'][] = 'Corrupt RIFF file: avih.dwMicroSecPerFrame == zero'; + return false; + } + + $flags = array( + 'dwMaxBytesPerSec', // max. transfer rate + 'dwPaddingGranularity', // pad to multiples of this size; normally 2K. + 'dwFlags', // the ever-present flags + 'dwTotalFrames', // # frames in file + 'dwInitialFrames', // + 'dwStreams', // + 'dwSuggestedBufferSize', // + 'dwWidth', // + 'dwHeight', // + 'dwScale', // + 'dwRate', // + 'dwStart', // + 'dwLength', // + ); + $avih_offset = 4; + foreach ($flags as $flag) { + $thisfile_riff_raw_avih[$flag] = $this->EitherEndian2Int(substr($avihData, $avih_offset, 4)); + $avih_offset += 4; + } + + $flags = array( + 'hasindex' => 0x00000010, + 'mustuseindex' => 0x00000020, + 'interleaved' => 0x00000100, + 'trustcktype' => 0x00000800, + 'capturedfile' => 0x00010000, + 'copyrighted' => 0x00020010, + ); + foreach ($flags as $flag => $value) { + $thisfile_riff_raw_avih['flags'][$flag] = (bool) ($thisfile_riff_raw_avih['dwFlags'] & $value); + } + + // shortcut + $thisfile_riff_video[$streamindex] = array(); + $thisfile_riff_video_current = &$thisfile_riff_video[$streamindex]; + + if ($thisfile_riff_raw_avih['dwWidth'] > 0) { + $thisfile_riff_video_current['frame_width'] = $thisfile_riff_raw_avih['dwWidth']; + $thisfile_video['resolution_x'] = $thisfile_riff_video_current['frame_width']; + } + if ($thisfile_riff_raw_avih['dwHeight'] > 0) { + $thisfile_riff_video_current['frame_height'] = $thisfile_riff_raw_avih['dwHeight']; + $thisfile_video['resolution_y'] = $thisfile_riff_video_current['frame_height']; + } + if ($thisfile_riff_raw_avih['dwTotalFrames'] > 0) { + $thisfile_riff_video_current['total_frames'] = $thisfile_riff_raw_avih['dwTotalFrames']; + $thisfile_video['total_frames'] = $thisfile_riff_video_current['total_frames']; + } + + $thisfile_riff_video_current['frame_rate'] = round(1000000 / $thisfile_riff_raw_avih['dwMicroSecPerFrame'], 3); + $thisfile_video['frame_rate'] = $thisfile_riff_video_current['frame_rate']; + } + if (isset($thisfile_riff['AVI ']['hdrl']['strl']['strh'][0]['data'])) { + if (is_array($thisfile_riff['AVI ']['hdrl']['strl']['strh'])) { + for ($i = 0; $i < count($thisfile_riff['AVI ']['hdrl']['strl']['strh']); $i++) { + if (isset($thisfile_riff['AVI ']['hdrl']['strl']['strh'][$i]['data'])) { + $strhData = $thisfile_riff['AVI ']['hdrl']['strl']['strh'][$i]['data']; + $strhfccType = substr($strhData, 0, 4); + + if (isset($thisfile_riff['AVI ']['hdrl']['strl']['strf'][$i]['data'])) { + $strfData = $thisfile_riff['AVI ']['hdrl']['strl']['strf'][$i]['data']; + + // shortcut + $thisfile_riff_raw_strf_strhfccType_streamindex = &$thisfile_riff_raw['strf'][$strhfccType][$streamindex]; + + switch ($strhfccType) { + case 'auds': + $thisfile_audio['bitrate_mode'] = 'cbr'; + $thisfile_audio_dataformat = 'wav'; + if (isset($thisfile_riff_audio) && is_array($thisfile_riff_audio)) { + $streamindex = count($thisfile_riff_audio); + } + + $thisfile_riff_audio[$streamindex] = self::parseWAVEFORMATex($strfData); + $thisfile_audio['wformattag'] = $thisfile_riff_audio[$streamindex]['raw']['wFormatTag']; + + // shortcut + $thisfile_audio['streams'][$streamindex] = $thisfile_riff_audio[$streamindex]; + $thisfile_audio_streams_currentstream = &$thisfile_audio['streams'][$streamindex]; + + if ($thisfile_audio_streams_currentstream['bits_per_sample'] == 0) { + unset($thisfile_audio_streams_currentstream['bits_per_sample']); + } + $thisfile_audio_streams_currentstream['wformattag'] = $thisfile_audio_streams_currentstream['raw']['wFormatTag']; + unset($thisfile_audio_streams_currentstream['raw']); + + // shortcut + $thisfile_riff_raw['strf'][$strhfccType][$streamindex] = $thisfile_riff_audio[$streamindex]['raw']; + + unset($thisfile_riff_audio[$streamindex]['raw']); + $thisfile_audio = getid3_lib::array_merge_noclobber($thisfile_audio, $thisfile_riff_audio[$streamindex]); + + $thisfile_audio['lossless'] = false; + switch ($thisfile_riff_raw_strf_strhfccType_streamindex['wFormatTag']) { + case 0x0001: // PCM + $thisfile_audio_dataformat = 'wav'; + $thisfile_audio['lossless'] = true; + break; + + case 0x0050: // MPEG Layer 2 or Layer 1 + $thisfile_audio_dataformat = 'mp2'; // Assume Layer-2 + break; + + case 0x0055: // MPEG Layer 3 + $thisfile_audio_dataformat = 'mp3'; + break; + + case 0x00FF: // AAC + $thisfile_audio_dataformat = 'aac'; + break; + + case 0x0161: // Windows Media v7 / v8 / v9 + case 0x0162: // Windows Media Professional v9 + case 0x0163: // Windows Media Lossess v9 + $thisfile_audio_dataformat = 'wma'; + break; + + case 0x2000: // AC-3 + $thisfile_audio_dataformat = 'ac3'; + break; + + case 0x2001: // DTS + $thisfile_audio_dataformat = 'dts'; + break; + + default: + $thisfile_audio_dataformat = 'wav'; + break; + } + $thisfile_audio_streams_currentstream['dataformat'] = $thisfile_audio_dataformat; + $thisfile_audio_streams_currentstream['lossless'] = $thisfile_audio['lossless']; + $thisfile_audio_streams_currentstream['bitrate_mode'] = $thisfile_audio['bitrate_mode']; + break; + + + case 'iavs': + case 'vids': + // shortcut + $thisfile_riff_raw['strh'][$i] = array(); + $thisfile_riff_raw_strh_current = &$thisfile_riff_raw['strh'][$i]; + + $thisfile_riff_raw_strh_current['fccType'] = substr($strhData, 0, 4); // same as $strhfccType; + $thisfile_riff_raw_strh_current['fccHandler'] = substr($strhData, 4, 4); + $thisfile_riff_raw_strh_current['dwFlags'] = $this->EitherEndian2Int(substr($strhData, 8, 4)); // Contains AVITF_* flags + $thisfile_riff_raw_strh_current['wPriority'] = $this->EitherEndian2Int(substr($strhData, 12, 2)); + $thisfile_riff_raw_strh_current['wLanguage'] = $this->EitherEndian2Int(substr($strhData, 14, 2)); + $thisfile_riff_raw_strh_current['dwInitialFrames'] = $this->EitherEndian2Int(substr($strhData, 16, 4)); + $thisfile_riff_raw_strh_current['dwScale'] = $this->EitherEndian2Int(substr($strhData, 20, 4)); + $thisfile_riff_raw_strh_current['dwRate'] = $this->EitherEndian2Int(substr($strhData, 24, 4)); + $thisfile_riff_raw_strh_current['dwStart'] = $this->EitherEndian2Int(substr($strhData, 28, 4)); + $thisfile_riff_raw_strh_current['dwLength'] = $this->EitherEndian2Int(substr($strhData, 32, 4)); + $thisfile_riff_raw_strh_current['dwSuggestedBufferSize'] = $this->EitherEndian2Int(substr($strhData, 36, 4)); + $thisfile_riff_raw_strh_current['dwQuality'] = $this->EitherEndian2Int(substr($strhData, 40, 4)); + $thisfile_riff_raw_strh_current['dwSampleSize'] = $this->EitherEndian2Int(substr($strhData, 44, 4)); + $thisfile_riff_raw_strh_current['rcFrame'] = $this->EitherEndian2Int(substr($strhData, 48, 4)); + + $thisfile_riff_video_current['codec'] = self::fourccLookup($thisfile_riff_raw_strh_current['fccHandler']); + $thisfile_video['fourcc'] = $thisfile_riff_raw_strh_current['fccHandler']; + if (!$thisfile_riff_video_current['codec'] && isset($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc']) && self::fourccLookup($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc'])) { + $thisfile_riff_video_current['codec'] = self::fourccLookup($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc']); + $thisfile_video['fourcc'] = $thisfile_riff_raw_strf_strhfccType_streamindex['fourcc']; + } + $thisfile_video['codec'] = $thisfile_riff_video_current['codec']; + $thisfile_video['pixel_aspect_ratio'] = (float) 1; + switch ($thisfile_riff_raw_strh_current['fccHandler']) { + case 'HFYU': // Huffman Lossless Codec + case 'IRAW': // Intel YUV Uncompressed + case 'YUY2': // Uncompressed YUV 4:2:2 + $thisfile_video['lossless'] = true; + break; + + default: + $thisfile_video['lossless'] = false; + break; + } + + switch ($strhfccType) { + case 'vids': + $thisfile_riff_raw_strf_strhfccType_streamindex = self::ParseBITMAPINFOHEADER(substr($strfData, 0, 40), ($info['fileformat'] == 'riff')); + $thisfile_video['bits_per_sample'] = $thisfile_riff_raw_strf_strhfccType_streamindex['biBitCount']; + + if ($thisfile_riff_video_current['codec'] == 'DV') { + $thisfile_riff_video_current['dv_type'] = 2; + } + break; + + case 'iavs': + $thisfile_riff_video_current['dv_type'] = 1; + break; + } + break; + + default: + $info['warning'][] = 'Unhandled fccType for stream ('.$i.'): "'.$strhfccType.'"'; + break; + + } + } + } + + if (isset($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc'])) { + + $thisfile_video['fourcc'] = $thisfile_riff_raw_strf_strhfccType_streamindex['fourcc']; + if (self::fourccLookup($thisfile_video['fourcc'])) { + $thisfile_riff_video_current['codec'] = self::fourccLookup($thisfile_video['fourcc']); + $thisfile_video['codec'] = $thisfile_riff_video_current['codec']; + } + + switch ($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc']) { + case 'HFYU': // Huffman Lossless Codec + case 'IRAW': // Intel YUV Uncompressed + case 'YUY2': // Uncompressed YUV 4:2:2 + $thisfile_video['lossless'] = true; + //$thisfile_video['bits_per_sample'] = 24; + break; + + default: + $thisfile_video['lossless'] = false; + //$thisfile_video['bits_per_sample'] = 24; + break; + } + + } + } + } + } + break; + + case 'CDDA': + $thisfile_audio['bitrate_mode'] = 'cbr'; + $thisfile_audio_dataformat = 'cda'; + $thisfile_audio['lossless'] = true; + unset($info['mime_type']); + + $info['avdataoffset'] = 44; + + if (isset($thisfile_riff['CDDA']['fmt '][0]['data'])) { + // shortcut + $thisfile_riff_CDDA_fmt_0 = &$thisfile_riff['CDDA']['fmt '][0]; + + $thisfile_riff_CDDA_fmt_0['unknown1'] = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 0, 2)); + $thisfile_riff_CDDA_fmt_0['track_num'] = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 2, 2)); + $thisfile_riff_CDDA_fmt_0['disc_id'] = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 4, 4)); + $thisfile_riff_CDDA_fmt_0['start_offset_frame'] = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 8, 4)); + $thisfile_riff_CDDA_fmt_0['playtime_frames'] = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 12, 4)); + $thisfile_riff_CDDA_fmt_0['unknown6'] = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 16, 4)); + $thisfile_riff_CDDA_fmt_0['unknown7'] = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 20, 4)); + + $thisfile_riff_CDDA_fmt_0['start_offset_seconds'] = (float) $thisfile_riff_CDDA_fmt_0['start_offset_frame'] / 75; + $thisfile_riff_CDDA_fmt_0['playtime_seconds'] = (float) $thisfile_riff_CDDA_fmt_0['playtime_frames'] / 75; + $info['comments']['track'] = $thisfile_riff_CDDA_fmt_0['track_num']; + $info['playtime_seconds'] = $thisfile_riff_CDDA_fmt_0['playtime_seconds']; + + // hardcoded data for CD-audio + $thisfile_audio['sample_rate'] = 44100; + $thisfile_audio['channels'] = 2; + $thisfile_audio['bits_per_sample'] = 16; + $thisfile_audio['bitrate'] = $thisfile_audio['sample_rate'] * $thisfile_audio['channels'] * $thisfile_audio['bits_per_sample']; + $thisfile_audio['bitrate_mode'] = 'cbr'; + } + break; + + + case 'AIFF': + case 'AIFC': + $thisfile_audio['bitrate_mode'] = 'cbr'; + $thisfile_audio_dataformat = 'aiff'; + $thisfile_audio['lossless'] = true; + $info['mime_type'] = 'audio/x-aiff'; + + if (isset($thisfile_riff[$RIFFsubtype]['SSND'][0]['offset'])) { + $info['avdataoffset'] = $thisfile_riff[$RIFFsubtype]['SSND'][0]['offset'] + 8; + $info['avdataend'] = $info['avdataoffset'] + $thisfile_riff[$RIFFsubtype]['SSND'][0]['size']; + if ($info['avdataend'] > $info['filesize']) { + if (($info['avdataend'] == ($info['filesize'] + 1)) && (($info['filesize'] % 2) == 1)) { + // structures rounded to 2-byte boundary, but dumb encoders + // forget to pad end of file to make this actually work + } else { + $info['warning'][] = 'Probable truncated AIFF file: expecting '.$thisfile_riff[$RIFFsubtype]['SSND'][0]['size'].' bytes of audio data, only '.($info['filesize'] - $info['avdataoffset']).' bytes found'; + } + $info['avdataend'] = $info['filesize']; + } + } + + if (isset($thisfile_riff[$RIFFsubtype]['COMM'][0]['data'])) { + + // shortcut + $thisfile_riff_RIFFsubtype_COMM_0_data = &$thisfile_riff[$RIFFsubtype]['COMM'][0]['data']; + + $thisfile_riff_audio['channels'] = getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_COMM_0_data, 0, 2), true); + $thisfile_riff_audio['total_samples'] = getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_COMM_0_data, 2, 4), false); + $thisfile_riff_audio['bits_per_sample'] = getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_COMM_0_data, 6, 2), true); + $thisfile_riff_audio['sample_rate'] = (int) getid3_lib::BigEndian2Float(substr($thisfile_riff_RIFFsubtype_COMM_0_data, 8, 10)); + + if ($thisfile_riff[$RIFFsubtype]['COMM'][0]['size'] > 18) { + $thisfile_riff_audio['codec_fourcc'] = substr($thisfile_riff_RIFFsubtype_COMM_0_data, 18, 4); + $CodecNameSize = getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_COMM_0_data, 22, 1), false); + $thisfile_riff_audio['codec_name'] = substr($thisfile_riff_RIFFsubtype_COMM_0_data, 23, $CodecNameSize); + switch ($thisfile_riff_audio['codec_name']) { + case 'NONE': + $thisfile_audio['codec'] = 'Pulse Code Modulation (PCM)'; + $thisfile_audio['lossless'] = true; + break; + + case '': + switch ($thisfile_riff_audio['codec_fourcc']) { + // http://developer.apple.com/qa/snd/snd07.html + case 'sowt': + $thisfile_riff_audio['codec_name'] = 'Two\'s Compliment Little-Endian PCM'; + $thisfile_audio['lossless'] = true; + break; + + case 'twos': + $thisfile_riff_audio['codec_name'] = 'Two\'s Compliment Big-Endian PCM'; + $thisfile_audio['lossless'] = true; + break; + + default: + break; + } + break; + + default: + $thisfile_audio['codec'] = $thisfile_riff_audio['codec_name']; + $thisfile_audio['lossless'] = false; + break; + } + } + + $thisfile_audio['channels'] = $thisfile_riff_audio['channels']; + if ($thisfile_riff_audio['bits_per_sample'] > 0) { + $thisfile_audio['bits_per_sample'] = $thisfile_riff_audio['bits_per_sample']; + } + $thisfile_audio['sample_rate'] = $thisfile_riff_audio['sample_rate']; + if ($thisfile_audio['sample_rate'] == 0) { + $info['error'][] = 'Corrupted AIFF file: sample_rate == zero'; + return false; + } + $info['playtime_seconds'] = $thisfile_riff_audio['total_samples'] / $thisfile_audio['sample_rate']; + } + + if (isset($thisfile_riff[$RIFFsubtype]['COMT'])) { + $offset = 0; + $CommentCount = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, 2), false); + $offset += 2; + for ($i = 0; $i < $CommentCount; $i++) { + $info['comments_raw'][$i]['timestamp'] = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, 4), false); + $offset += 4; + $info['comments_raw'][$i]['marker_id'] = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, 2), true); + $offset += 2; + $CommentLength = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, 2), false); + $offset += 2; + $info['comments_raw'][$i]['comment'] = substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, $CommentLength); + $offset += $CommentLength; + + $info['comments_raw'][$i]['timestamp_unix'] = getid3_lib::DateMac2Unix($info['comments_raw'][$i]['timestamp']); + $thisfile_riff['comments']['comment'][] = $info['comments_raw'][$i]['comment']; + } + } + + $CommentsChunkNames = array('NAME'=>'title', 'author'=>'artist', '(c) '=>'copyright', 'ANNO'=>'comment'); + foreach ($CommentsChunkNames as $key => $value) { + if (isset($thisfile_riff[$RIFFsubtype][$key][0]['data'])) { + $thisfile_riff['comments'][$value][] = $thisfile_riff[$RIFFsubtype][$key][0]['data']; + } + } +/* + if (isset($thisfile_riff[$RIFFsubtype]['ID3 '])) { + getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v2.php', __FILE__, true); + $getid3_temp = new getID3(); + $getid3_temp->openfile($this->getid3->filename); + $getid3_id3v2 = new getid3_id3v2($getid3_temp); + $getid3_id3v2->StartingOffset = $thisfile_riff[$RIFFsubtype]['ID3 '][0]['offset'] + 8; + if ($thisfile_riff[$RIFFsubtype]['ID3 '][0]['valid'] = $getid3_id3v2->Analyze()) { + $info['id3v2'] = $getid3_temp->info['id3v2']; + } + unset($getid3_temp, $getid3_id3v2); + } +*/ + break; + + case '8SVX': + $thisfile_audio['bitrate_mode'] = 'cbr'; + $thisfile_audio_dataformat = '8svx'; + $thisfile_audio['bits_per_sample'] = 8; + $thisfile_audio['channels'] = 1; // overridden below, if need be + $info['mime_type'] = 'audio/x-aiff'; + + if (isset($thisfile_riff[$RIFFsubtype]['BODY'][0]['offset'])) { + $info['avdataoffset'] = $thisfile_riff[$RIFFsubtype]['BODY'][0]['offset'] + 8; + $info['avdataend'] = $info['avdataoffset'] + $thisfile_riff[$RIFFsubtype]['BODY'][0]['size']; + if ($info['avdataend'] > $info['filesize']) { + $info['warning'][] = 'Probable truncated AIFF file: expecting '.$thisfile_riff[$RIFFsubtype]['BODY'][0]['size'].' bytes of audio data, only '.($info['filesize'] - $info['avdataoffset']).' bytes found'; + } + } + + if (isset($thisfile_riff[$RIFFsubtype]['VHDR'][0]['offset'])) { + // shortcut + $thisfile_riff_RIFFsubtype_VHDR_0 = &$thisfile_riff[$RIFFsubtype]['VHDR'][0]; + + $thisfile_riff_RIFFsubtype_VHDR_0['oneShotHiSamples'] = getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 0, 4)); + $thisfile_riff_RIFFsubtype_VHDR_0['repeatHiSamples'] = getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 4, 4)); + $thisfile_riff_RIFFsubtype_VHDR_0['samplesPerHiCycle'] = getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 8, 4)); + $thisfile_riff_RIFFsubtype_VHDR_0['samplesPerSec'] = getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 12, 2)); + $thisfile_riff_RIFFsubtype_VHDR_0['ctOctave'] = getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 14, 1)); + $thisfile_riff_RIFFsubtype_VHDR_0['sCompression'] = getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 15, 1)); + $thisfile_riff_RIFFsubtype_VHDR_0['Volume'] = getid3_lib::FixedPoint16_16(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 16, 4)); + + $thisfile_audio['sample_rate'] = $thisfile_riff_RIFFsubtype_VHDR_0['samplesPerSec']; + + switch ($thisfile_riff_RIFFsubtype_VHDR_0['sCompression']) { + case 0: + $thisfile_audio['codec'] = 'Pulse Code Modulation (PCM)'; + $thisfile_audio['lossless'] = true; + $ActualBitsPerSample = 8; + break; + + case 1: + $thisfile_audio['codec'] = 'Fibonacci-delta encoding'; + $thisfile_audio['lossless'] = false; + $ActualBitsPerSample = 4; + break; + + default: + $info['warning'][] = 'Unexpected sCompression value in 8SVX.VHDR chunk - expecting 0 or 1, found "'.sCompression.'"'; + break; + } + } + + if (isset($thisfile_riff[$RIFFsubtype]['CHAN'][0]['data'])) { + $ChannelsIndex = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['CHAN'][0]['data'], 0, 4)); + switch ($ChannelsIndex) { + case 6: // Stereo + $thisfile_audio['channels'] = 2; + break; + + case 2: // Left channel only + case 4: // Right channel only + $thisfile_audio['channels'] = 1; + break; + + default: + $info['warning'][] = 'Unexpected value in 8SVX.CHAN chunk - expecting 2 or 4 or 6, found "'.$ChannelsIndex.'"'; + break; + } + + } + + $CommentsChunkNames = array('NAME'=>'title', 'author'=>'artist', '(c) '=>'copyright', 'ANNO'=>'comment'); + foreach ($CommentsChunkNames as $key => $value) { + if (isset($thisfile_riff[$RIFFsubtype][$key][0]['data'])) { + $thisfile_riff['comments'][$value][] = $thisfile_riff[$RIFFsubtype][$key][0]['data']; + } + } + + $thisfile_audio['bitrate'] = $thisfile_audio['sample_rate'] * $ActualBitsPerSample * $thisfile_audio['channels']; + if (!empty($thisfile_audio['bitrate'])) { + $info['playtime_seconds'] = ($info['avdataend'] - $info['avdataoffset']) / ($thisfile_audio['bitrate'] / 8); + } + break; + + + case 'CDXA': + $info['mime_type'] = 'video/mpeg'; + if (!empty($thisfile_riff['CDXA']['data'][0]['size'])) { + if (getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.mpeg.php', __FILE__, false)) { + $getid3_temp = new getID3(); + $getid3_temp->openfile($this->getid3->filename); + $getid3_mpeg = new getid3_mpeg($getid3_temp); + $getid3_mpeg->Analyze(); + if (empty($getid3_temp->info['error'])) { + $info['audio'] = $getid3_temp->info['audio']; + $info['video'] = $getid3_temp->info['video']; + $info['mpeg'] = $getid3_temp->info['mpeg']; + $info['warning'] = $getid3_temp->info['warning']; + } + unset($getid3_temp, $getid3_mpeg); + } + } + break; + + + default: + $info['error'][] = 'Unknown RIFF type: expecting one of (WAVE|RMP3|AVI |CDDA|AIFF|AIFC|8SVX|CDXA), found "'.$RIFFsubtype.'" instead'; + unset($info['fileformat']); + break; + } + + switch ($RIFFsubtype) { + case 'WAVE': + case 'AIFF': + case 'AIFC': + $ID3v2_key_good = 'id3 '; + $ID3v2_keys_bad = array('ID3 ', 'tag '); + foreach ($ID3v2_keys_bad as $ID3v2_key_bad) { + if (isset($thisfile_riff[$RIFFsubtype][$ID3v2_key_bad]) && !array_key_exists($ID3v2_key_good, $thisfile_riff[$RIFFsubtype])) { + $thisfile_riff[$RIFFsubtype][$ID3v2_key_good] = $thisfile_riff[$RIFFsubtype][$ID3v2_key_bad]; + $info['warning'][] = 'mapping "'.$ID3v2_key_bad.'" chunk to "'.$ID3v2_key_good.'"'; + } + } + + if (isset($thisfile_riff[$RIFFsubtype]['id3 '])) { + getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v2.php', __FILE__, true); + $getid3_temp = new getID3(); + $getid3_temp->openfile($this->getid3->filename); + $getid3_id3v2 = new getid3_id3v2($getid3_temp); + $getid3_id3v2->StartingOffset = $thisfile_riff[$RIFFsubtype]['id3 '][0]['offset'] + 8; + if ($thisfile_riff[$RIFFsubtype]['id3 '][0]['valid'] = $getid3_id3v2->Analyze()) { + $info['id3v2'] = $getid3_temp->info['id3v2']; + } + unset($getid3_temp, $getid3_id3v2); + } + break; + } + + if (isset($thisfile_riff_WAVE['DISP']) && is_array($thisfile_riff_WAVE['DISP'])) { + $thisfile_riff['comments']['title'][] = trim(substr($thisfile_riff_WAVE['DISP'][count($thisfile_riff_WAVE['DISP']) - 1]['data'], 4)); + } + if (isset($thisfile_riff_WAVE['INFO']) && is_array($thisfile_riff_WAVE['INFO'])) { + self::parseComments($thisfile_riff_WAVE['INFO'], $thisfile_riff['comments']); + } + if (isset($thisfile_riff['AVI ']['INFO']) && is_array($thisfile_riff['AVI ']['INFO'])) { + self::parseComments($thisfile_riff['AVI ']['INFO'], $thisfile_riff['comments']); + } + + if (empty($thisfile_audio['encoder']) && !empty($info['mpeg']['audio']['LAME']['short_version'])) { + $thisfile_audio['encoder'] = $info['mpeg']['audio']['LAME']['short_version']; + } + + if (!isset($info['playtime_seconds'])) { + $info['playtime_seconds'] = 0; + } + if (isset($thisfile_riff_raw['strh'][0]['dwLength']) && isset($thisfile_riff_raw['avih']['dwMicroSecPerFrame'])) { + // needed for >2GB AVIs where 'avih' chunk only lists number of frames in that chunk, not entire movie + $info['playtime_seconds'] = $thisfile_riff_raw['strh'][0]['dwLength'] * ($thisfile_riff_raw['avih']['dwMicroSecPerFrame'] / 1000000); + } elseif (isset($thisfile_riff_raw['avih']['dwTotalFrames']) && isset($thisfile_riff_raw['avih']['dwMicroSecPerFrame'])) { + $info['playtime_seconds'] = $thisfile_riff_raw['avih']['dwTotalFrames'] * ($thisfile_riff_raw['avih']['dwMicroSecPerFrame'] / 1000000); + } + + if ($info['playtime_seconds'] > 0) { + if (isset($thisfile_riff_audio) && isset($thisfile_riff_video)) { + + if (!isset($info['bitrate'])) { + $info['bitrate'] = ((($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds']) * 8); + } + + } elseif (isset($thisfile_riff_audio) && !isset($thisfile_riff_video)) { + + if (!isset($thisfile_audio['bitrate'])) { + $thisfile_audio['bitrate'] = ((($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds']) * 8); + } + + } elseif (!isset($thisfile_riff_audio) && isset($thisfile_riff_video)) { + + if (!isset($thisfile_video['bitrate'])) { + $thisfile_video['bitrate'] = ((($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds']) * 8); + } + + } + } + + + if (isset($thisfile_riff_video) && isset($thisfile_audio['bitrate']) && ($thisfile_audio['bitrate'] > 0) && ($info['playtime_seconds'] > 0)) { + + $info['bitrate'] = ((($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds']) * 8); + $thisfile_audio['bitrate'] = 0; + $thisfile_video['bitrate'] = $info['bitrate']; + foreach ($thisfile_riff_audio as $channelnumber => $audioinfoarray) { + $thisfile_video['bitrate'] -= $audioinfoarray['bitrate']; + $thisfile_audio['bitrate'] += $audioinfoarray['bitrate']; + } + if ($thisfile_video['bitrate'] <= 0) { + unset($thisfile_video['bitrate']); + } + if ($thisfile_audio['bitrate'] <= 0) { + unset($thisfile_audio['bitrate']); + } + } + + if (isset($info['mpeg']['audio'])) { + $thisfile_audio_dataformat = 'mp'.$info['mpeg']['audio']['layer']; + $thisfile_audio['sample_rate'] = $info['mpeg']['audio']['sample_rate']; + $thisfile_audio['channels'] = $info['mpeg']['audio']['channels']; + $thisfile_audio['bitrate'] = $info['mpeg']['audio']['bitrate']; + $thisfile_audio['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']); + if (!empty($info['mpeg']['audio']['codec'])) { + $thisfile_audio['codec'] = $info['mpeg']['audio']['codec'].' '.$thisfile_audio['codec']; + } + if (!empty($thisfile_audio['streams'])) { + foreach ($thisfile_audio['streams'] as $streamnumber => $streamdata) { + if ($streamdata['dataformat'] == $thisfile_audio_dataformat) { + $thisfile_audio['streams'][$streamnumber]['sample_rate'] = $thisfile_audio['sample_rate']; + $thisfile_audio['streams'][$streamnumber]['channels'] = $thisfile_audio['channels']; + $thisfile_audio['streams'][$streamnumber]['bitrate'] = $thisfile_audio['bitrate']; + $thisfile_audio['streams'][$streamnumber]['bitrate_mode'] = $thisfile_audio['bitrate_mode']; + $thisfile_audio['streams'][$streamnumber]['codec'] = $thisfile_audio['codec']; + } + } + } + $getid3_mp3 = new getid3_mp3($this->getid3); + $thisfile_audio['encoder_options'] = $getid3_mp3->GuessEncoderOptions(); + unset($getid3_mp3); + } + + + if (!empty($thisfile_riff_raw['fmt ']['wBitsPerSample']) && ($thisfile_riff_raw['fmt ']['wBitsPerSample'] > 0)) { + switch ($thisfile_audio_dataformat) { + case 'ac3': + // ignore bits_per_sample + break; + + default: + $thisfile_audio['bits_per_sample'] = $thisfile_riff_raw['fmt ']['wBitsPerSample']; + break; + } + } + + + if (empty($thisfile_riff_raw)) { + unset($thisfile_riff['raw']); + } + if (empty($thisfile_riff_audio)) { + unset($thisfile_riff['audio']); + } + if (empty($thisfile_riff_video)) { + unset($thisfile_riff['video']); + } + + return true; + } + + public function ParseRIFF($startoffset, $maxoffset) { + $info = &$this->getid3->info; + + $RIFFchunk = false; + $FoundAllChunksWeNeed = false; + + try { + $this->fseek($startoffset); + $maxoffset = min($maxoffset, $info['avdataend']); + while ($this->ftell() < $maxoffset) { + $chunknamesize = $this->fread(8); + //$chunkname = substr($chunknamesize, 0, 4); + $chunkname = str_replace("\x00", '_', substr($chunknamesize, 0, 4)); // note: chunk names of 4 null bytes do appear to be legal (has been observed inside INFO and PRMI chunks, for example), but makes traversing array keys more difficult + $chunksize = $this->EitherEndian2Int(substr($chunknamesize, 4, 4)); + //if (strlen(trim($chunkname, "\x00")) < 4) { + if (strlen($chunkname) < 4) { + $this->error('Expecting chunk name at offset '.($this->ftell() - 8).' but found nothing. Aborting RIFF parsing.'); + break; + } + if (($chunksize == 0) && ($chunkname != 'JUNK')) { + $this->warning('Chunk ('.$chunkname.') size at offset '.($this->ftell() - 4).' is zero. Aborting RIFF parsing.'); + break; + } + if (($chunksize % 2) != 0) { + // all structures are packed on word boundaries + $chunksize++; + } + + switch ($chunkname) { + case 'LIST': + $listname = $this->fread(4); + if (preg_match('#^(movi|rec )$#i', $listname)) { + $RIFFchunk[$listname]['offset'] = $this->ftell() - 4; + $RIFFchunk[$listname]['size'] = $chunksize; + + if (!$FoundAllChunksWeNeed) { + $WhereWeWere = $this->ftell(); + $AudioChunkHeader = $this->fread(12); + $AudioChunkStreamNum = substr($AudioChunkHeader, 0, 2); + $AudioChunkStreamType = substr($AudioChunkHeader, 2, 2); + $AudioChunkSize = getid3_lib::LittleEndian2Int(substr($AudioChunkHeader, 4, 4)); + + if ($AudioChunkStreamType == 'wb') { + $FirstFourBytes = substr($AudioChunkHeader, 8, 4); + if (preg_match('/^\xFF[\xE2-\xE7\xF2-\xF7\xFA-\xFF][\x00-\xEB]/s', $FirstFourBytes)) { + // MP3 + if (getid3_mp3::MPEGaudioHeaderBytesValid($FirstFourBytes)) { + $getid3_temp = new getID3(); + $getid3_temp->openfile($this->getid3->filename); + $getid3_temp->info['avdataoffset'] = $this->ftell() - 4; + $getid3_temp->info['avdataend'] = $this->ftell() + $AudioChunkSize; + $getid3_mp3 = new getid3_mp3($getid3_temp); + $getid3_mp3->getOnlyMPEGaudioInfo($getid3_temp->info['avdataoffset'], false); + if (isset($getid3_temp->info['mpeg']['audio'])) { + $info['mpeg']['audio'] = $getid3_temp->info['mpeg']['audio']; + $info['audio'] = $getid3_temp->info['audio']; + $info['audio']['dataformat'] = 'mp'.$info['mpeg']['audio']['layer']; + $info['audio']['sample_rate'] = $info['mpeg']['audio']['sample_rate']; + $info['audio']['channels'] = $info['mpeg']['audio']['channels']; + $info['audio']['bitrate'] = $info['mpeg']['audio']['bitrate']; + $info['audio']['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']); + //$info['bitrate'] = $info['audio']['bitrate']; + } + unset($getid3_temp, $getid3_mp3); + } + + } elseif (strpos($FirstFourBytes, getid3_ac3::syncword) === 0) { + + // AC3 + $getid3_temp = new getID3(); + $getid3_temp->openfile($this->getid3->filename); + $getid3_temp->info['avdataoffset'] = $this->ftell() - 4; + $getid3_temp->info['avdataend'] = $this->ftell() + $AudioChunkSize; + $getid3_ac3 = new getid3_ac3($getid3_temp); + $getid3_ac3->Analyze(); + if (empty($getid3_temp->info['error'])) { + $info['audio'] = $getid3_temp->info['audio']; + $info['ac3'] = $getid3_temp->info['ac3']; + if (!empty($getid3_temp->info['warning'])) { + foreach ($getid3_temp->info['warning'] as $key => $value) { + $info['warning'][] = $value; + } + } + } + unset($getid3_temp, $getid3_ac3); + } + } + $FoundAllChunksWeNeed = true; + $this->fseek($WhereWeWere); + } + $this->fseek($chunksize - 4, SEEK_CUR); + + } else { + + if (!isset($RIFFchunk[$listname])) { + $RIFFchunk[$listname] = array(); + } + $LISTchunkParent = $listname; + $LISTchunkMaxOffset = $this->ftell() - 4 + $chunksize; + if ($parsedChunk = $this->ParseRIFF($this->ftell(), $LISTchunkMaxOffset)) { + $RIFFchunk[$listname] = array_merge_recursive($RIFFchunk[$listname], $parsedChunk); + } + + } + break; + + default: + if (preg_match('#^[0-9]{2}(wb|pc|dc|db)$#', $chunkname)) { + $this->fseek($chunksize, SEEK_CUR); + break; + } + $thisindex = 0; + if (isset($RIFFchunk[$chunkname]) && is_array($RIFFchunk[$chunkname])) { + $thisindex = count($RIFFchunk[$chunkname]); + } + $RIFFchunk[$chunkname][$thisindex]['offset'] = $this->ftell() - 8; + $RIFFchunk[$chunkname][$thisindex]['size'] = $chunksize; + switch ($chunkname) { + case 'data': + $info['avdataoffset'] = $this->ftell(); + $info['avdataend'] = $info['avdataoffset'] + $chunksize; + + $testData = $this->fread(36); + if ($testData === '') { + break; + } + if (preg_match('/^\xFF[\xE2-\xE7\xF2-\xF7\xFA-\xFF][\x00-\xEB]/s', substr($testData, 0, 4))) { + + // Probably is MP3 data + if (getid3_mp3::MPEGaudioHeaderBytesValid(substr($testData, 0, 4))) { + $getid3_temp = new getID3(); + $getid3_temp->openfile($this->getid3->filename); + $getid3_temp->info['avdataoffset'] = $info['avdataoffset']; + $getid3_temp->info['avdataend'] = $info['avdataend']; + $getid3_mp3 = new getid3_mp3($getid3_temp); + $getid3_mp3->getOnlyMPEGaudioInfo($info['avdataoffset'], false); + if (empty($getid3_temp->info['error'])) { + $info['audio'] = $getid3_temp->info['audio']; + $info['mpeg'] = $getid3_temp->info['mpeg']; + } + unset($getid3_temp, $getid3_mp3); + } + + } elseif (($isRegularAC3 = (substr($testData, 0, 2) == getid3_ac3::syncword)) || substr($testData, 8, 2) == strrev(getid3_ac3::syncword)) { + + // This is probably AC-3 data + $getid3_temp = new getID3(); + if ($isRegularAC3) { + $getid3_temp->openfile($this->getid3->filename); + $getid3_temp->info['avdataoffset'] = $info['avdataoffset']; + $getid3_temp->info['avdataend'] = $info['avdataend']; + } + $getid3_ac3 = new getid3_ac3($getid3_temp); + if ($isRegularAC3) { + $getid3_ac3->Analyze(); + } else { + // Dolby Digital WAV + // AC-3 content, but not encoded in same format as normal AC-3 file + // For one thing, byte order is swapped + $ac3_data = ''; + for ($i = 0; $i < 28; $i += 2) { + $ac3_data .= substr($testData, 8 + $i + 1, 1); + $ac3_data .= substr($testData, 8 + $i + 0, 1); + } + $getid3_ac3->AnalyzeString($ac3_data); + } + + if (empty($getid3_temp->info['error'])) { + $info['audio'] = $getid3_temp->info['audio']; + $info['ac3'] = $getid3_temp->info['ac3']; + if (!empty($getid3_temp->info['warning'])) { + foreach ($getid3_temp->info['warning'] as $newerror) { + $this->warning('getid3_ac3() says: ['.$newerror.']'); + } + } + } + unset($getid3_temp, $getid3_ac3); + + } elseif (preg_match('/^('.implode('|', array_map('preg_quote', getid3_dts::$syncwords)).')/', $testData)) { + + // This is probably DTS data + $getid3_temp = new getID3(); + $getid3_temp->openfile($this->getid3->filename); + $getid3_temp->info['avdataoffset'] = $info['avdataoffset']; + $getid3_dts = new getid3_dts($getid3_temp); + $getid3_dts->Analyze(); + if (empty($getid3_temp->info['error'])) { + $info['audio'] = $getid3_temp->info['audio']; + $info['dts'] = $getid3_temp->info['dts']; + $info['playtime_seconds'] = $getid3_temp->info['playtime_seconds']; // may not match RIFF calculations since DTS-WAV often used 14/16 bit-word packing + if (!empty($getid3_temp->info['warning'])) { + foreach ($getid3_temp->info['warning'] as $newerror) { + $this->warning('getid3_dts() says: ['.$newerror.']'); + } + } + } + + unset($getid3_temp, $getid3_dts); + + } elseif (substr($testData, 0, 4) == 'wvpk') { + + // This is WavPack data + $info['wavpack']['offset'] = $info['avdataoffset']; + $info['wavpack']['size'] = getid3_lib::LittleEndian2Int(substr($testData, 4, 4)); + $this->parseWavPackHeader(substr($testData, 8, 28)); + + } else { + // This is some other kind of data (quite possibly just PCM) + // do nothing special, just skip it + } + $nextoffset = $info['avdataend']; + $this->fseek($nextoffset); + break; + + case 'iXML': + case 'bext': + case 'cart': + case 'fmt ': + case 'strh': + case 'strf': + case 'indx': + case 'MEXT': + case 'DISP': + // always read data in + case 'JUNK': + // should be: never read data in + // but some programs write their version strings in a JUNK chunk (e.g. VirtualDub, AVIdemux, etc) + if ($chunksize < 1048576) { + if ($chunksize > 0) { + $RIFFchunk[$chunkname][$thisindex]['data'] = $this->fread($chunksize); + if ($chunkname == 'JUNK') { + if (preg_match('#^([\\x20-\\x7F]+)#', $RIFFchunk[$chunkname][$thisindex]['data'], $matches)) { + // only keep text characters [chr(32)-chr(127)] + $info['riff']['comments']['junk'][] = trim($matches[1]); + } + // but if nothing there, ignore + // remove the key in either case + unset($RIFFchunk[$chunkname][$thisindex]['data']); + } + } + } else { + $this->warning('Chunk "'.$chunkname.'" at offset '.$this->ftell().' is unexpectedly larger than 1MB (claims to be '.number_format($chunksize).' bytes), skipping data'); + $this->fseek($chunksize, SEEK_CUR); + } + break; + + //case 'IDVX': + // $info['divxtag']['comments'] = self::ParseDIVXTAG($this->fread($chunksize)); + // break; + + default: + if (!empty($LISTchunkParent) && (($RIFFchunk[$chunkname][$thisindex]['offset'] + $RIFFchunk[$chunkname][$thisindex]['size']) <= $LISTchunkMaxOffset)) { + $RIFFchunk[$LISTchunkParent][$chunkname][$thisindex]['offset'] = $RIFFchunk[$chunkname][$thisindex]['offset']; + $RIFFchunk[$LISTchunkParent][$chunkname][$thisindex]['size'] = $RIFFchunk[$chunkname][$thisindex]['size']; + unset($RIFFchunk[$chunkname][$thisindex]['offset']); + unset($RIFFchunk[$chunkname][$thisindex]['size']); + if (isset($RIFFchunk[$chunkname][$thisindex]) && empty($RIFFchunk[$chunkname][$thisindex])) { + unset($RIFFchunk[$chunkname][$thisindex]); + } + if (isset($RIFFchunk[$chunkname]) && empty($RIFFchunk[$chunkname])) { + unset($RIFFchunk[$chunkname]); + } + $RIFFchunk[$LISTchunkParent][$chunkname][$thisindex]['data'] = $this->fread($chunksize); + } elseif ($chunksize < 2048) { + // only read data in if smaller than 2kB + $RIFFchunk[$chunkname][$thisindex]['data'] = $this->fread($chunksize); + } else { + $this->fseek($chunksize, SEEK_CUR); + } + break; + } + break; + } + } + + } catch (getid3_exception $e) { + if ($e->getCode() == 10) { + $this->warning('RIFF parser: '.$e->getMessage()); + } else { + throw $e; + } + } + + return $RIFFchunk; + } + + public function ParseRIFFdata(&$RIFFdata) { + $info = &$this->getid3->info; + if ($RIFFdata) { + $tempfile = tempnam(GETID3_TEMP_DIR, 'getID3'); + $fp_temp = fopen($tempfile, 'wb'); + $RIFFdataLength = strlen($RIFFdata); + $NewLengthString = getid3_lib::LittleEndian2String($RIFFdataLength, 4); + for ($i = 0; $i < 4; $i++) { + $RIFFdata[($i + 4)] = $NewLengthString[$i]; + } + fwrite($fp_temp, $RIFFdata); + fclose($fp_temp); + + $getid3_temp = new getID3(); + $getid3_temp->openfile($tempfile); + $getid3_temp->info['filesize'] = $RIFFdataLength; + $getid3_temp->info['filenamepath'] = $info['filenamepath']; + $getid3_temp->info['tags'] = $info['tags']; + $getid3_temp->info['warning'] = $info['warning']; + $getid3_temp->info['error'] = $info['error']; + $getid3_temp->info['comments'] = $info['comments']; + $getid3_temp->info['audio'] = (isset($info['audio']) ? $info['audio'] : array()); + $getid3_temp->info['video'] = (isset($info['video']) ? $info['video'] : array()); + $getid3_riff = new getid3_riff($getid3_temp); + $getid3_riff->Analyze(); + + $info['riff'] = $getid3_temp->info['riff']; + $info['warning'] = $getid3_temp->info['warning']; + $info['error'] = $getid3_temp->info['error']; + $info['tags'] = $getid3_temp->info['tags']; + $info['comments'] = $getid3_temp->info['comments']; + unset($getid3_riff, $getid3_temp); + unlink($tempfile); + } + return false; + } + + public static function parseComments(&$RIFFinfoArray, &$CommentsTargetArray) { + $RIFFinfoKeyLookup = array( + 'IARL'=>'archivallocation', + 'IART'=>'artist', + 'ICDS'=>'costumedesigner', + 'ICMS'=>'commissionedby', + 'ICMT'=>'comment', + 'ICNT'=>'country', + 'ICOP'=>'copyright', + 'ICRD'=>'creationdate', + 'IDIM'=>'dimensions', + 'IDIT'=>'digitizationdate', + 'IDPI'=>'resolution', + 'IDST'=>'distributor', + 'IEDT'=>'editor', + 'IENG'=>'engineers', + 'IFRM'=>'accountofparts', + 'IGNR'=>'genre', + 'IKEY'=>'keywords', + 'ILGT'=>'lightness', + 'ILNG'=>'language', + 'IMED'=>'orignalmedium', + 'IMUS'=>'composer', + 'INAM'=>'title', + 'IPDS'=>'productiondesigner', + 'IPLT'=>'palette', + 'IPRD'=>'product', + 'IPRO'=>'producer', + 'IPRT'=>'part', + 'IRTD'=>'rating', + 'ISBJ'=>'subject', + 'ISFT'=>'software', + 'ISGN'=>'secondarygenre', + 'ISHP'=>'sharpness', + 'ISRC'=>'sourcesupplier', + 'ISRF'=>'digitizationsource', + 'ISTD'=>'productionstudio', + 'ISTR'=>'starring', + 'ITCH'=>'encoded_by', + 'IWEB'=>'url', + 'IWRI'=>'writer', + '____'=>'comment', + ); + foreach ($RIFFinfoKeyLookup as $key => $value) { + if (isset($RIFFinfoArray[$key])) { + foreach ($RIFFinfoArray[$key] as $commentid => $commentdata) { + if (trim($commentdata['data']) != '') { + if (isset($CommentsTargetArray[$value])) { + $CommentsTargetArray[$value][] = trim($commentdata['data']); + } else { + $CommentsTargetArray[$value] = array(trim($commentdata['data'])); + } + } + } + } + } + return true; + } + + public static function parseWAVEFORMATex($WaveFormatExData) { + // shortcut + $WaveFormatEx['raw'] = array(); + $WaveFormatEx_raw = &$WaveFormatEx['raw']; + + $WaveFormatEx_raw['wFormatTag'] = substr($WaveFormatExData, 0, 2); + $WaveFormatEx_raw['nChannels'] = substr($WaveFormatExData, 2, 2); + $WaveFormatEx_raw['nSamplesPerSec'] = substr($WaveFormatExData, 4, 4); + $WaveFormatEx_raw['nAvgBytesPerSec'] = substr($WaveFormatExData, 8, 4); + $WaveFormatEx_raw['nBlockAlign'] = substr($WaveFormatExData, 12, 2); + $WaveFormatEx_raw['wBitsPerSample'] = substr($WaveFormatExData, 14, 2); + if (strlen($WaveFormatExData) > 16) { + $WaveFormatEx_raw['cbSize'] = substr($WaveFormatExData, 16, 2); + } + $WaveFormatEx_raw = array_map('getid3_lib::LittleEndian2Int', $WaveFormatEx_raw); + + $WaveFormatEx['codec'] = self::wFormatTagLookup($WaveFormatEx_raw['wFormatTag']); + $WaveFormatEx['channels'] = $WaveFormatEx_raw['nChannels']; + $WaveFormatEx['sample_rate'] = $WaveFormatEx_raw['nSamplesPerSec']; + $WaveFormatEx['bitrate'] = $WaveFormatEx_raw['nAvgBytesPerSec'] * 8; + $WaveFormatEx['bits_per_sample'] = $WaveFormatEx_raw['wBitsPerSample']; + + return $WaveFormatEx; + } + + public function parseWavPackHeader($WavPackChunkData) { + // typedef struct { + // char ckID [4]; + // long ckSize; + // short version; + // short bits; // added for version 2.00 + // short flags, shift; // added for version 3.00 + // long total_samples, crc, crc2; + // char extension [4], extra_bc, extras [3]; + // } WavpackHeader; + + // shortcut + $info = &$this->getid3->info; + $info['wavpack'] = array(); + $thisfile_wavpack = &$info['wavpack']; + + $thisfile_wavpack['version'] = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 0, 2)); + if ($thisfile_wavpack['version'] >= 2) { + $thisfile_wavpack['bits'] = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 2, 2)); + } + if ($thisfile_wavpack['version'] >= 3) { + $thisfile_wavpack['flags_raw'] = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 4, 2)); + $thisfile_wavpack['shift'] = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 6, 2)); + $thisfile_wavpack['total_samples'] = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 8, 4)); + $thisfile_wavpack['crc1'] = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 12, 4)); + $thisfile_wavpack['crc2'] = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 16, 4)); + $thisfile_wavpack['extension'] = substr($WavPackChunkData, 20, 4); + $thisfile_wavpack['extra_bc'] = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 24, 1)); + for ($i = 0; $i <= 2; $i++) { + $thisfile_wavpack['extras'][] = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 25 + $i, 1)); + } + + // shortcut + $thisfile_wavpack['flags'] = array(); + $thisfile_wavpack_flags = &$thisfile_wavpack['flags']; + + $thisfile_wavpack_flags['mono'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x000001); + $thisfile_wavpack_flags['fast_mode'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x000002); + $thisfile_wavpack_flags['raw_mode'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x000004); + $thisfile_wavpack_flags['calc_noise'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x000008); + $thisfile_wavpack_flags['high_quality'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x000010); + $thisfile_wavpack_flags['3_byte_samples'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x000020); + $thisfile_wavpack_flags['over_20_bits'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x000040); + $thisfile_wavpack_flags['use_wvc'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x000080); + $thisfile_wavpack_flags['noiseshaping'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x000100); + $thisfile_wavpack_flags['very_fast_mode'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x000200); + $thisfile_wavpack_flags['new_high_quality'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x000400); + $thisfile_wavpack_flags['cancel_extreme'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x000800); + $thisfile_wavpack_flags['cross_decorrelation'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x001000); + $thisfile_wavpack_flags['new_decorrelation'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x002000); + $thisfile_wavpack_flags['joint_stereo'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x004000); + $thisfile_wavpack_flags['extra_decorrelation'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x008000); + $thisfile_wavpack_flags['override_noiseshape'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x010000); + $thisfile_wavpack_flags['override_jointstereo'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x020000); + $thisfile_wavpack_flags['copy_source_filetime'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x040000); + $thisfile_wavpack_flags['create_exe'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x080000); + } + + return true; + } + + public static function ParseBITMAPINFOHEADER($BITMAPINFOHEADER, $littleEndian=true) { + + $parsed['biSize'] = substr($BITMAPINFOHEADER, 0, 4); // number of bytes required by the BITMAPINFOHEADER structure + $parsed['biWidth'] = substr($BITMAPINFOHEADER, 4, 4); // width of the bitmap in pixels + $parsed['biHeight'] = substr($BITMAPINFOHEADER, 8, 4); // height of the bitmap in pixels. If biHeight is positive, the bitmap is a 'bottom-up' DIB and its origin is the lower left corner. If biHeight is negative, the bitmap is a 'top-down' DIB and its origin is the upper left corner + $parsed['biPlanes'] = substr($BITMAPINFOHEADER, 12, 2); // number of color planes on the target device. In most cases this value must be set to 1 + $parsed['biBitCount'] = substr($BITMAPINFOHEADER, 14, 2); // Specifies the number of bits per pixels + $parsed['biSizeImage'] = substr($BITMAPINFOHEADER, 20, 4); // size of the bitmap data section of the image (the actual pixel data, excluding BITMAPINFOHEADER and RGBQUAD structures) + $parsed['biXPelsPerMeter'] = substr($BITMAPINFOHEADER, 24, 4); // horizontal resolution, in pixels per metre, of the target device + $parsed['biYPelsPerMeter'] = substr($BITMAPINFOHEADER, 28, 4); // vertical resolution, in pixels per metre, of the target device + $parsed['biClrUsed'] = substr($BITMAPINFOHEADER, 32, 4); // actual number of color indices in the color table used by the bitmap. If this value is zero, the bitmap uses the maximum number of colors corresponding to the value of the biBitCount member for the compression mode specified by biCompression + $parsed['biClrImportant'] = substr($BITMAPINFOHEADER, 36, 4); // number of color indices that are considered important for displaying the bitmap. If this value is zero, all colors are important + $parsed = array_map('getid3_lib::'.($littleEndian ? 'Little' : 'Big').'Endian2Int', $parsed); + + $parsed['fourcc'] = substr($BITMAPINFOHEADER, 16, 4); // compression identifier + + return $parsed; + } + + public static function ParseDIVXTAG($DIVXTAG, $raw=false) { + // structure from "IDivX" source, Form1.frm, by "Greg Frazier of Daemonic Software Group", email: gfrazier@icestorm.net, web: http://dsg.cjb.net/ + // source available at http://files.divx-digest.com/download/c663efe7ef8ad2e90bf4af4d3ea6188a/on0SWN2r/edit/IDivX.zip + // 'Byte Layout: '1111111111111111 + // '32 for Movie - 1 '1111111111111111 + // '28 for Author - 6 '6666666666666666 + // '4 for year - 2 '6666666666662222 + // '3 for genre - 3 '7777777777777777 + // '48 for Comments - 7 '7777777777777777 + // '1 for Rating - 4 '7777777777777777 + // '5 for Future Additions - 0 '333400000DIVXTAG + // '128 bytes total + + static $DIVXTAGgenre = array( + 0 => 'Action', + 1 => 'Action/Adventure', + 2 => 'Adventure', + 3 => 'Adult', + 4 => 'Anime', + 5 => 'Cartoon', + 6 => 'Claymation', + 7 => 'Comedy', + 8 => 'Commercial', + 9 => 'Documentary', + 10 => 'Drama', + 11 => 'Home Video', + 12 => 'Horror', + 13 => 'Infomercial', + 14 => 'Interactive', + 15 => 'Mystery', + 16 => 'Music Video', + 17 => 'Other', + 18 => 'Religion', + 19 => 'Sci Fi', + 20 => 'Thriller', + 21 => 'Western', + ), + $DIVXTAGrating = array( + 0 => 'Unrated', + 1 => 'G', + 2 => 'PG', + 3 => 'PG-13', + 4 => 'R', + 5 => 'NC-17', + ); + + $parsed['title'] = trim(substr($DIVXTAG, 0, 32)); + $parsed['artist'] = trim(substr($DIVXTAG, 32, 28)); + $parsed['year'] = intval(trim(substr($DIVXTAG, 60, 4))); + $parsed['comment'] = trim(substr($DIVXTAG, 64, 48)); + $parsed['genre_id'] = intval(trim(substr($DIVXTAG, 112, 3))); + $parsed['rating_id'] = ord(substr($DIVXTAG, 115, 1)); + //$parsed['padding'] = substr($DIVXTAG, 116, 5); // 5-byte null + //$parsed['magic'] = substr($DIVXTAG, 121, 7); // "DIVXTAG" + + $parsed['genre'] = (isset($DIVXTAGgenre[$parsed['genre_id']]) ? $DIVXTAGgenre[$parsed['genre_id']] : $parsed['genre_id']); + $parsed['rating'] = (isset($DIVXTAGrating[$parsed['rating_id']]) ? $DIVXTAGrating[$parsed['rating_id']] : $parsed['rating_id']); + + if (!$raw) { + unset($parsed['genre_id'], $parsed['rating_id']); + foreach ($parsed as $key => $value) { + if (!$value === '') { + unset($parsed['key']); + } + } + } + + foreach ($parsed as $tag => $value) { + $parsed[$tag] = array($value); + } + + return $parsed; + } + + public static function waveSNDMtagLookup($tagshortname) { + $begin = __LINE__; + + /** This is not a comment! + + ©kwd keywords + ©BPM bpm + ©trt tracktitle + ©des description + ©gen category + ©fin featuredinstrument + ©LID longid + ©bex bwdescription + ©pub publisher + ©cdt cdtitle + ©alb library + ©com composer + + */ + + return getid3_lib::EmbeddedLookup($tagshortname, $begin, __LINE__, __FILE__, 'riff-sndm'); + } + + public static function wFormatTagLookup($wFormatTag) { + + $begin = __LINE__; + + /** This is not a comment! + + 0x0000 Microsoft Unknown Wave Format + 0x0001 Pulse Code Modulation (PCM) + 0x0002 Microsoft ADPCM + 0x0003 IEEE Float + 0x0004 Compaq Computer VSELP + 0x0005 IBM CVSD + 0x0006 Microsoft A-Law + 0x0007 Microsoft mu-Law + 0x0008 Microsoft DTS + 0x0010 OKI ADPCM + 0x0011 Intel DVI/IMA ADPCM + 0x0012 Videologic MediaSpace ADPCM + 0x0013 Sierra Semiconductor ADPCM + 0x0014 Antex Electronics G.723 ADPCM + 0x0015 DSP Solutions DigiSTD + 0x0016 DSP Solutions DigiFIX + 0x0017 Dialogic OKI ADPCM + 0x0018 MediaVision ADPCM + 0x0019 Hewlett-Packard CU + 0x0020 Yamaha ADPCM + 0x0021 Speech Compression Sonarc + 0x0022 DSP Group TrueSpeech + 0x0023 Echo Speech EchoSC1 + 0x0024 Audiofile AF36 + 0x0025 Audio Processing Technology APTX + 0x0026 AudioFile AF10 + 0x0027 Prosody 1612 + 0x0028 LRC + 0x0030 Dolby AC2 + 0x0031 Microsoft GSM 6.10 + 0x0032 MSNAudio + 0x0033 Antex Electronics ADPCME + 0x0034 Control Resources VQLPC + 0x0035 DSP Solutions DigiREAL + 0x0036 DSP Solutions DigiADPCM + 0x0037 Control Resources CR10 + 0x0038 Natural MicroSystems VBXADPCM + 0x0039 Crystal Semiconductor IMA ADPCM + 0x003A EchoSC3 + 0x003B Rockwell ADPCM + 0x003C Rockwell Digit LK + 0x003D Xebec + 0x0040 Antex Electronics G.721 ADPCM + 0x0041 G.728 CELP + 0x0042 MSG723 + 0x0050 MPEG Layer-2 or Layer-1 + 0x0052 RT24 + 0x0053 PAC + 0x0055 MPEG Layer-3 + 0x0059 Lucent G.723 + 0x0060 Cirrus + 0x0061 ESPCM + 0x0062 Voxware + 0x0063 Canopus Atrac + 0x0064 G.726 ADPCM + 0x0065 G.722 ADPCM + 0x0066 DSAT + 0x0067 DSAT Display + 0x0069 Voxware Byte Aligned + 0x0070 Voxware AC8 + 0x0071 Voxware AC10 + 0x0072 Voxware AC16 + 0x0073 Voxware AC20 + 0x0074 Voxware MetaVoice + 0x0075 Voxware MetaSound + 0x0076 Voxware RT29HW + 0x0077 Voxware VR12 + 0x0078 Voxware VR18 + 0x0079 Voxware TQ40 + 0x0080 Softsound + 0x0081 Voxware TQ60 + 0x0082 MSRT24 + 0x0083 G.729A + 0x0084 MVI MV12 + 0x0085 DF G.726 + 0x0086 DF GSM610 + 0x0088 ISIAudio + 0x0089 Onlive + 0x0091 SBC24 + 0x0092 Dolby AC3 SPDIF + 0x0093 MediaSonic G.723 + 0x0094 Aculab PLC Prosody 8kbps + 0x0097 ZyXEL ADPCM + 0x0098 Philips LPCBB + 0x0099 Packed + 0x00FF AAC + 0x0100 Rhetorex ADPCM + 0x0101 IBM mu-law + 0x0102 IBM A-law + 0x0103 IBM AVC Adaptive Differential Pulse Code Modulation (ADPCM) + 0x0111 Vivo G.723 + 0x0112 Vivo Siren + 0x0123 Digital G.723 + 0x0125 Sanyo LD ADPCM + 0x0130 Sipro Lab Telecom ACELP NET + 0x0131 Sipro Lab Telecom ACELP 4800 + 0x0132 Sipro Lab Telecom ACELP 8V3 + 0x0133 Sipro Lab Telecom G.729 + 0x0134 Sipro Lab Telecom G.729A + 0x0135 Sipro Lab Telecom Kelvin + 0x0140 Windows Media Video V8 + 0x0150 Qualcomm PureVoice + 0x0151 Qualcomm HalfRate + 0x0155 Ring Zero Systems TUB GSM + 0x0160 Microsoft Audio 1 + 0x0161 Windows Media Audio V7 / V8 / V9 + 0x0162 Windows Media Audio Professional V9 + 0x0163 Windows Media Audio Lossless V9 + 0x0200 Creative Labs ADPCM + 0x0202 Creative Labs Fastspeech8 + 0x0203 Creative Labs Fastspeech10 + 0x0210 UHER Informatic GmbH ADPCM + 0x0220 Quarterdeck + 0x0230 I-link Worldwide VC + 0x0240 Aureal RAW Sport + 0x0250 Interactive Products HSX + 0x0251 Interactive Products RPELP + 0x0260 Consistent Software CS2 + 0x0270 Sony SCX + 0x0300 Fujitsu FM Towns Snd + 0x0400 BTV Digital + 0x0401 Intel Music Coder + 0x0450 QDesign Music + 0x0680 VME VMPCM + 0x0681 AT&T Labs TPC + 0x08AE ClearJump LiteWave + 0x1000 Olivetti GSM + 0x1001 Olivetti ADPCM + 0x1002 Olivetti CELP + 0x1003 Olivetti SBC + 0x1004 Olivetti OPR + 0x1100 Lernout & Hauspie Codec (0x1100) + 0x1101 Lernout & Hauspie CELP Codec (0x1101) + 0x1102 Lernout & Hauspie SBC Codec (0x1102) + 0x1103 Lernout & Hauspie SBC Codec (0x1103) + 0x1104 Lernout & Hauspie SBC Codec (0x1104) + 0x1400 Norris + 0x1401 AT&T ISIAudio + 0x1500 Soundspace Music Compression + 0x181C VoxWare RT24 Speech + 0x1FC4 NCT Soft ALF2CD (www.nctsoft.com) + 0x2000 Dolby AC3 + 0x2001 Dolby DTS + 0x2002 WAVE_FORMAT_14_4 + 0x2003 WAVE_FORMAT_28_8 + 0x2004 WAVE_FORMAT_COOK + 0x2005 WAVE_FORMAT_DNET + 0x674F Ogg Vorbis 1 + 0x6750 Ogg Vorbis 2 + 0x6751 Ogg Vorbis 3 + 0x676F Ogg Vorbis 1+ + 0x6770 Ogg Vorbis 2+ + 0x6771 Ogg Vorbis 3+ + 0x7A21 GSM-AMR (CBR, no SID) + 0x7A22 GSM-AMR (VBR, including SID) + 0xFFFE WAVE_FORMAT_EXTENSIBLE + 0xFFFF WAVE_FORMAT_DEVELOPMENT + + */ + + return getid3_lib::EmbeddedLookup('0x'.str_pad(strtoupper(dechex($wFormatTag)), 4, '0', STR_PAD_LEFT), $begin, __LINE__, __FILE__, 'riff-wFormatTag'); + } + + public static function fourccLookup($fourcc) { + + $begin = __LINE__; + + /** This is not a comment! + + swot http://developer.apple.com/qa/snd/snd07.html + ____ No Codec (____) + _BIT BI_BITFIELDS (Raw RGB) + _JPG JPEG compressed + _PNG PNG compressed W3C/ISO/IEC (RFC-2083) + _RAW Full Frames (Uncompressed) + _RGB Raw RGB Bitmap + _RL4 RLE 4bpp RGB + _RL8 RLE 8bpp RGB + 3IV1 3ivx MPEG-4 v1 + 3IV2 3ivx MPEG-4 v2 + 3IVX 3ivx MPEG-4 + AASC Autodesk Animator + ABYR Kensington ?ABYR? + AEMI Array Microsystems VideoONE MPEG1-I Capture + AFLC Autodesk Animator FLC + AFLI Autodesk Animator FLI + AMPG Array Microsystems VideoONE MPEG + ANIM Intel RDX (ANIM) + AP41 AngelPotion Definitive + ASV1 Asus Video v1 + ASV2 Asus Video v2 + ASVX Asus Video 2.0 (audio) + AUR2 AuraVision Aura 2 Codec - YUV 4:2:2 + AURA AuraVision Aura 1 Codec - YUV 4:1:1 + AVDJ Independent JPEG Group\'s codec (AVDJ) + AVRN Independent JPEG Group\'s codec (AVRN) + AYUV 4:4:4 YUV (AYUV) + AZPR Quicktime Apple Video (AZPR) + BGR Raw RGB32 + BLZ0 Blizzard DivX MPEG-4 + BTVC Conexant Composite Video + BINK RAD Game Tools Bink Video + BT20 Conexant Prosumer Video + BTCV Conexant Composite Video Codec + BW10 Data Translation Broadway MPEG Capture + CC12 Intel YUV12 + CDVC Canopus DV + CFCC Digital Processing Systems DPS Perception + CGDI Microsoft Office 97 Camcorder Video + CHAM Winnov Caviara Champagne + CJPG Creative WebCam JPEG + CLJR Cirrus Logic YUV 4:1:1 + CMYK Common Data Format in Printing (Colorgraph) + CPLA Weitek 4:2:0 YUV Planar + CRAM Microsoft Video 1 (CRAM) + cvid Radius Cinepak + CVID Radius Cinepak + CWLT Microsoft Color WLT DIB + CYUV Creative Labs YUV + CYUY ATI YUV + D261 H.261 + D263 H.263 + DIB Device Independent Bitmap + DIV1 FFmpeg OpenDivX + DIV2 Microsoft MPEG-4 v1/v2 + DIV3 DivX ;-) MPEG-4 v3.x Low-Motion + DIV4 DivX ;-) MPEG-4 v3.x Fast-Motion + DIV5 DivX MPEG-4 v5.x + DIV6 DivX ;-) (MS MPEG-4 v3.x) + DIVX DivX MPEG-4 v4 (OpenDivX / Project Mayo) + divx DivX MPEG-4 + DMB1 Matrox Rainbow Runner hardware MJPEG + DMB2 Paradigm MJPEG + DSVD ?DSVD? + DUCK Duck TrueMotion 1.0 + DPS0 DPS/Leitch Reality Motion JPEG + DPSC DPS/Leitch PAR Motion JPEG + DV25 Matrox DVCPRO codec + DV50 Matrox DVCPRO50 codec + DVC IEC 61834 and SMPTE 314M (DVC/DV Video) + DVCP IEC 61834 and SMPTE 314M (DVC/DV Video) + DVHD IEC Standard DV 1125 lines @ 30fps / 1250 lines @ 25fps + DVMA Darim Vision DVMPEG (dummy for MPEG compressor) (www.darvision.com) + DVSL IEC Standard DV compressed in SD (SDL) + DVAN ?DVAN? + DVE2 InSoft DVE-2 Videoconferencing + dvsd IEC 61834 and SMPTE 314M DVC/DV Video + DVSD IEC 61834 and SMPTE 314M DVC/DV Video + DVX1 Lucent DVX1000SP Video Decoder + DVX2 Lucent DVX2000S Video Decoder + DVX3 Lucent DVX3000S Video Decoder + DX50 DivX v5 + DXT1 Microsoft DirectX Compressed Texture (DXT1) + DXT2 Microsoft DirectX Compressed Texture (DXT2) + DXT3 Microsoft DirectX Compressed Texture (DXT3) + DXT4 Microsoft DirectX Compressed Texture (DXT4) + DXT5 Microsoft DirectX Compressed Texture (DXT5) + DXTC Microsoft DirectX Compressed Texture (DXTC) + DXTn Microsoft DirectX Compressed Texture (DXTn) + EM2V Etymonix MPEG-2 I-frame (www.etymonix.com) + EKQ0 Elsa ?EKQ0? + ELK0 Elsa ?ELK0? + ESCP Eidos Escape + ETV1 eTreppid Video ETV1 + ETV2 eTreppid Video ETV2 + ETVC eTreppid Video ETVC + FLIC Autodesk FLI/FLC Animation + FLV1 Sorenson Spark + FLV4 On2 TrueMotion VP6 + FRWT Darim Vision Forward Motion JPEG (www.darvision.com) + FRWU Darim Vision Forward Uncompressed (www.darvision.com) + FLJP D-Vision Field Encoded Motion JPEG + FPS1 FRAPS v1 + FRWA SoftLab-Nsk Forward Motion JPEG w/ alpha channel + FRWD SoftLab-Nsk Forward Motion JPEG + FVF1 Iterated Systems Fractal Video Frame + GLZW Motion LZW (gabest@freemail.hu) + GPEG Motion JPEG (gabest@freemail.hu) + GWLT Microsoft Greyscale WLT DIB + H260 Intel ITU H.260 Videoconferencing + H261 Intel ITU H.261 Videoconferencing + H262 Intel ITU H.262 Videoconferencing + H263 Intel ITU H.263 Videoconferencing + H264 Intel ITU H.264 Videoconferencing + H265 Intel ITU H.265 Videoconferencing + H266 Intel ITU H.266 Videoconferencing + H267 Intel ITU H.267 Videoconferencing + H268 Intel ITU H.268 Videoconferencing + H269 Intel ITU H.269 Videoconferencing + HFYU Huffman Lossless Codec + HMCR Rendition Motion Compensation Format (HMCR) + HMRR Rendition Motion Compensation Format (HMRR) + I263 FFmpeg I263 decoder + IF09 Indeo YVU9 ("YVU9 with additional delta-frame info after the U plane") + IUYV Interlaced version of UYVY (www.leadtools.com) + IY41 Interlaced version of Y41P (www.leadtools.com) + IYU1 12 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec IEEE standard + IYU2 24 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec IEEE standard + IYUV Planar YUV format (8-bpp Y plane, followed by 8-bpp 2×2 U and V planes) + i263 Intel ITU H.263 Videoconferencing (i263) + I420 Intel Indeo 4 + IAN Intel Indeo 4 (RDX) + ICLB InSoft CellB Videoconferencing + IGOR Power DVD + IJPG Intergraph JPEG + ILVC Intel Layered Video + ILVR ITU-T H.263+ + IPDV I-O Data Device Giga AVI DV Codec + IR21 Intel Indeo 2.1 + IRAW Intel YUV Uncompressed + IV30 Intel Indeo 3.0 + IV31 Intel Indeo 3.1 + IV32 Ligos Indeo 3.2 + IV33 Ligos Indeo 3.3 + IV34 Ligos Indeo 3.4 + IV35 Ligos Indeo 3.5 + IV36 Ligos Indeo 3.6 + IV37 Ligos Indeo 3.7 + IV38 Ligos Indeo 3.8 + IV39 Ligos Indeo 3.9 + IV40 Ligos Indeo Interactive 4.0 + IV41 Ligos Indeo Interactive 4.1 + IV42 Ligos Indeo Interactive 4.2 + IV43 Ligos Indeo Interactive 4.3 + IV44 Ligos Indeo Interactive 4.4 + IV45 Ligos Indeo Interactive 4.5 + IV46 Ligos Indeo Interactive 4.6 + IV47 Ligos Indeo Interactive 4.7 + IV48 Ligos Indeo Interactive 4.8 + IV49 Ligos Indeo Interactive 4.9 + IV50 Ligos Indeo Interactive 5.0 + JBYR Kensington ?JBYR? + JPEG Still Image JPEG DIB + JPGL Pegasus Lossless Motion JPEG + KMVC Team17 Software Karl Morton\'s Video Codec + LSVM Vianet Lighting Strike Vmail (Streaming) (www.vianet.com) + LEAD LEAD Video Codec + Ljpg LEAD MJPEG Codec + MDVD Alex MicroDVD Video (hacked MS MPEG-4) (www.tiasoft.de) + MJPA Morgan Motion JPEG (MJPA) (www.morgan-multimedia.com) + MJPB Morgan Motion JPEG (MJPB) (www.morgan-multimedia.com) + MMES Matrox MPEG-2 I-frame + MP2v Microsoft S-Mpeg 4 version 1 (MP2v) + MP42 Microsoft S-Mpeg 4 version 2 (MP42) + MP43 Microsoft S-Mpeg 4 version 3 (MP43) + MP4S Microsoft S-Mpeg 4 version 3 (MP4S) + MP4V FFmpeg MPEG-4 + MPG1 FFmpeg MPEG 1/2 + MPG2 FFmpeg MPEG 1/2 + MPG3 FFmpeg DivX ;-) (MS MPEG-4 v3) + MPG4 Microsoft MPEG-4 + MPGI Sigma Designs MPEG + MPNG PNG images decoder + MSS1 Microsoft Windows Screen Video + MSZH LCL (Lossless Codec Library) (www.geocities.co.jp/Playtown-Denei/2837/LRC.htm) + M261 Microsoft H.261 + M263 Microsoft H.263 + M4S2 Microsoft Fully Compliant MPEG-4 v2 simple profile (M4S2) + m4s2 Microsoft Fully Compliant MPEG-4 v2 simple profile (m4s2) + MC12 ATI Motion Compensation Format (MC12) + MCAM ATI Motion Compensation Format (MCAM) + MJ2C Morgan Multimedia Motion JPEG2000 + mJPG IBM Motion JPEG w/ Huffman Tables + MJPG Microsoft Motion JPEG DIB + MP42 Microsoft MPEG-4 (low-motion) + MP43 Microsoft MPEG-4 (fast-motion) + MP4S Microsoft MPEG-4 (MP4S) + mp4s Microsoft MPEG-4 (mp4s) + MPEG Chromatic Research MPEG-1 Video I-Frame + MPG4 Microsoft MPEG-4 Video High Speed Compressor + MPGI Sigma Designs MPEG + MRCA FAST Multimedia Martin Regen Codec + MRLE Microsoft Run Length Encoding + MSVC Microsoft Video 1 + MTX1 Matrox ?MTX1? + MTX2 Matrox ?MTX2? + MTX3 Matrox ?MTX3? + MTX4 Matrox ?MTX4? + MTX5 Matrox ?MTX5? + MTX6 Matrox ?MTX6? + MTX7 Matrox ?MTX7? + MTX8 Matrox ?MTX8? + MTX9 Matrox ?MTX9? + MV12 Motion Pixels Codec (old) + MWV1 Aware Motion Wavelets + nAVI SMR Codec (hack of Microsoft MPEG-4) (IRC #shadowrealm) + NT00 NewTek LightWave HDTV YUV w/ Alpha (www.newtek.com) + NUV1 NuppelVideo + NTN1 Nogatech Video Compression 1 + NVS0 nVidia GeForce Texture (NVS0) + NVS1 nVidia GeForce Texture (NVS1) + NVS2 nVidia GeForce Texture (NVS2) + NVS3 nVidia GeForce Texture (NVS3) + NVS4 nVidia GeForce Texture (NVS4) + NVS5 nVidia GeForce Texture (NVS5) + NVT0 nVidia GeForce Texture (NVT0) + NVT1 nVidia GeForce Texture (NVT1) + NVT2 nVidia GeForce Texture (NVT2) + NVT3 nVidia GeForce Texture (NVT3) + NVT4 nVidia GeForce Texture (NVT4) + NVT5 nVidia GeForce Texture (NVT5) + PIXL MiroXL, Pinnacle PCTV + PDVC I-O Data Device Digital Video Capture DV codec + PGVV Radius Video Vision + PHMO IBM Photomotion + PIM1 MPEG Realtime (Pinnacle Cards) + PIM2 Pegasus Imaging ?PIM2? + PIMJ Pegasus Imaging Lossless JPEG + PVEZ Horizons Technology PowerEZ + PVMM PacketVideo Corporation MPEG-4 + PVW2 Pegasus Imaging Wavelet Compression + Q1.0 Q-Team\'s QPEG 1.0 (www.q-team.de) + Q1.1 Q-Team\'s QPEG 1.1 (www.q-team.de) + QPEG Q-Team QPEG 1.0 + qpeq Q-Team QPEG 1.1 + RGB Raw BGR32 + RGBA Raw RGB w/ Alpha + RMP4 REALmagic MPEG-4 (unauthorized XVID copy) (www.sigmadesigns.com) + ROQV Id RoQ File Video Decoder + RPZA Quicktime Apple Video (RPZA) + RUD0 Rududu video codec (http://rududu.ifrance.com/rududu/) + RV10 RealVideo 1.0 (aka RealVideo 5.0) + RV13 RealVideo 1.0 (RV13) + RV20 RealVideo G2 + RV30 RealVideo 8 + RV40 RealVideo 9 + RGBT Raw RGB w/ Transparency + RLE Microsoft Run Length Encoder + RLE4 Run Length Encoded (4bpp, 16-color) + RLE8 Run Length Encoded (8bpp, 256-color) + RT21 Intel Indeo RealTime Video 2.1 + rv20 RealVideo G2 + rv30 RealVideo 8 + RVX Intel RDX (RVX ) + SMC Apple Graphics (SMC ) + SP54 Logitech Sunplus Sp54 Codec for Mustek GSmart Mini 2 + SPIG Radius Spigot + SVQ3 Sorenson Video 3 (Apple Quicktime 5) + s422 Tekram VideoCap C210 YUV 4:2:2 + SDCC Sun Communication Digital Camera Codec + SFMC CrystalNet Surface Fitting Method + SMSC Radius SMSC + SMSD Radius SMSD + smsv WorldConnect Wavelet Video + SPIG Radius Spigot + SPLC Splash Studios ACM Audio Codec (www.splashstudios.net) + SQZ2 Microsoft VXTreme Video Codec V2 + STVA ST Microelectronics CMOS Imager Data (Bayer) + STVB ST Microelectronics CMOS Imager Data (Nudged Bayer) + STVC ST Microelectronics CMOS Imager Data (Bunched) + STVX ST Microelectronics CMOS Imager Data (Extended CODEC Data Format) + STVY ST Microelectronics CMOS Imager Data (Extended CODEC Data Format with Correction Data) + SV10 Sorenson Video R1 + SVQ1 Sorenson Video + T420 Toshiba YUV 4:2:0 + TM2A Duck TrueMotion Archiver 2.0 (www.duck.com) + TVJP Pinnacle/Truevision Targa 2000 board (TVJP) + TVMJ Pinnacle/Truevision Targa 2000 board (TVMJ) + TY0N Tecomac Low-Bit Rate Codec (www.tecomac.com) + TY2C Trident Decompression Driver + TLMS TeraLogic Motion Intraframe Codec (TLMS) + TLST TeraLogic Motion Intraframe Codec (TLST) + TM20 Duck TrueMotion 2.0 + TM2X Duck TrueMotion 2X + TMIC TeraLogic Motion Intraframe Codec (TMIC) + TMOT Horizons Technology TrueMotion S + tmot Horizons TrueMotion Video Compression + TR20 Duck TrueMotion RealTime 2.0 + TSCC TechSmith Screen Capture Codec + TV10 Tecomac Low-Bit Rate Codec + TY2N Trident ?TY2N? + U263 UB Video H.263/H.263+/H.263++ Decoder + UMP4 UB Video MPEG 4 (www.ubvideo.com) + UYNV Nvidia UYVY packed 4:2:2 + UYVP Evans & Sutherland YCbCr 4:2:2 extended precision + UCOD eMajix.com ClearVideo + ULTI IBM Ultimotion + UYVY UYVY packed 4:2:2 + V261 Lucent VX2000S + VIFP VFAPI Reader Codec (www.yks.ne.jp/~hori/) + VIV1 FFmpeg H263+ decoder + VIV2 Vivo H.263 + VQC2 Vector-quantised codec 2 (research) http://eprints.ecs.soton.ac.uk/archive/00001310/01/VTC97-js.pdf) + VTLP Alaris VideoGramPiX + VYU9 ATI YUV (VYU9) + VYUY ATI YUV (VYUY) + V261 Lucent VX2000S + V422 Vitec Multimedia 24-bit YUV 4:2:2 Format + V655 Vitec Multimedia 16-bit YUV 4:2:2 Format + VCR1 ATI Video Codec 1 + VCR2 ATI Video Codec 2 + VCR3 ATI VCR 3.0 + VCR4 ATI VCR 4.0 + VCR5 ATI VCR 5.0 + VCR6 ATI VCR 6.0 + VCR7 ATI VCR 7.0 + VCR8 ATI VCR 8.0 + VCR9 ATI VCR 9.0 + VDCT Vitec Multimedia Video Maker Pro DIB + VDOM VDOnet VDOWave + VDOW VDOnet VDOLive (H.263) + VDTZ Darim Vison VideoTizer YUV + VGPX Alaris VideoGramPiX + VIDS Vitec Multimedia YUV 4:2:2 CCIR 601 for V422 + VIVO Vivo H.263 v2.00 + vivo Vivo H.263 + VIXL Miro/Pinnacle Video XL + VLV1 VideoLogic/PURE Digital Videologic Capture + VP30 On2 VP3.0 + VP31 On2 VP3.1 + VP6F On2 TrueMotion VP6 + VX1K Lucent VX1000S Video Codec + VX2K Lucent VX2000S Video Codec + VXSP Lucent VX1000SP Video Codec + WBVC Winbond W9960 + WHAM Microsoft Video 1 (WHAM) + WINX Winnov Software Compression + WJPG AverMedia Winbond JPEG + WMV1 Windows Media Video V7 + WMV2 Windows Media Video V8 + WMV3 Windows Media Video V9 + WNV1 Winnov Hardware Compression + XYZP Extended PAL format XYZ palette (www.riff.org) + x263 Xirlink H.263 + XLV0 NetXL Video Decoder + XMPG Xing MPEG (I-Frame only) + XVID XviD MPEG-4 (www.xvid.org) + XXAN ?XXAN? + YU92 Intel YUV (YU92) + YUNV Nvidia Uncompressed YUV 4:2:2 + YUVP Extended PAL format YUV palette (www.riff.org) + Y211 YUV 2:1:1 Packed + Y411 YUV 4:1:1 Packed + Y41B Weitek YUV 4:1:1 Planar + Y41P Brooktree PC1 YUV 4:1:1 Packed + Y41T Brooktree PC1 YUV 4:1:1 with transparency + Y42B Weitek YUV 4:2:2 Planar + Y42T Brooktree UYUV 4:2:2 with transparency + Y422 ADS Technologies Copy of UYVY used in Pyro WebCam firewire camera + Y800 Simple, single Y plane for monochrome images + Y8 Grayscale video + YC12 Intel YUV 12 codec + YUV8 Winnov Caviar YUV8 + YUV9 Intel YUV9 + YUY2 Uncompressed YUV 4:2:2 + YUYV Canopus YUV + YV12 YVU12 Planar + YVU9 Intel YVU9 Planar (8-bpp Y plane, followed by 8-bpp 4x4 U and V planes) + YVYU YVYU 4:2:2 Packed + ZLIB Lossless Codec Library zlib compression (www.geocities.co.jp/Playtown-Denei/2837/LRC.htm) + ZPEG Metheus Video Zipper + + */ + + return getid3_lib::EmbeddedLookup($fourcc, $begin, __LINE__, __FILE__, 'riff-fourcc'); + } + + private function EitherEndian2Int($byteword, $signed=false) { + if ($this->getid3->info['fileformat'] == 'riff') { + return getid3_lib::LittleEndian2Int($byteword, $signed); + } + return getid3_lib::BigEndian2Int($byteword, false, $signed); + } + +} diff --git a/src/wp-includes/ID3/module.audio.ac3.php b/src/wp-includes/ID3/module.audio.ac3.php new file mode 100644 index 0000000..9834feb --- /dev/null +++ b/src/wp-includes/ID3/module.audio.ac3.php @@ -0,0 +1,473 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +// // +// module.audio.ac3.php // +// module for analyzing AC-3 (aka Dolby Digital) audio files // +// dependencies: NONE // +// /// +///////////////////////////////////////////////////////////////// + + +class getid3_ac3 extends getid3_handler +{ + private $AC3header = array(); + private $BSIoffset = 0; + + const syncword = "\x0B\x77"; + + public function Analyze() { + $info = &$this->getid3->info; + + ///AH + $info['ac3']['raw']['bsi'] = array(); + $thisfile_ac3 = &$info['ac3']; + $thisfile_ac3_raw = &$thisfile_ac3['raw']; + $thisfile_ac3_raw_bsi = &$thisfile_ac3_raw['bsi']; + + + // http://www.atsc.org/standards/a_52a.pdf + + $info['fileformat'] = 'ac3'; + + // An AC-3 serial coded audio bit stream is made up of a sequence of synchronization frames + // Each synchronization frame contains 6 coded audio blocks (AB), each of which represent 256 + // new audio samples per channel. A synchronization information (SI) header at the beginning + // of each frame contains information needed to acquire and maintain synchronization. A + // bit stream information (BSI) header follows SI, and contains parameters describing the coded + // audio service. The coded audio blocks may be followed by an auxiliary data (Aux) field. At the + // end of each frame is an error check field that includes a CRC word for error detection. An + // additional CRC word is located in the SI header, the use of which, by a decoder, is optional. + // + // syncinfo() | bsi() | AB0 | AB1 | AB2 | AB3 | AB4 | AB5 | Aux | CRC + + // syncinfo() { + // syncword 16 + // crc1 16 + // fscod 2 + // frmsizecod 6 + // } /* end of syncinfo */ + + $this->fseek($info['avdataoffset']); + $this->AC3header['syncinfo'] = $this->fread(5); + + if (strpos($this->AC3header['syncinfo'], self::syncword) === 0) { + $thisfile_ac3_raw['synchinfo']['synchword'] = self::syncword; + $offset = 2; + } else { + if (!$this->isDependencyFor('matroska')) { + unset($info['fileformat'], $info['ac3']); + return $this->error('Expecting "'.getid3_lib::PrintHexBytes(self::syncword).'" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes(substr($this->AC3header['syncinfo'], 0, 2)).'"'); + } + $offset = 0; + $this->fseek(-2, SEEK_CUR); + } + + $info['audio']['dataformat'] = 'ac3'; + $info['audio']['bitrate_mode'] = 'cbr'; + $info['audio']['lossless'] = false; + + $thisfile_ac3_raw['synchinfo']['crc1'] = getid3_lib::LittleEndian2Int(substr($this->AC3header['syncinfo'], $offset, 2)); + $ac3_synchinfo_fscod_frmsizecod = getid3_lib::LittleEndian2Int(substr($this->AC3header['syncinfo'], ($offset + 2), 1)); + $thisfile_ac3_raw['synchinfo']['fscod'] = ($ac3_synchinfo_fscod_frmsizecod & 0xC0) >> 6; + $thisfile_ac3_raw['synchinfo']['frmsizecod'] = ($ac3_synchinfo_fscod_frmsizecod & 0x3F); + + $thisfile_ac3['sample_rate'] = self::sampleRateCodeLookup($thisfile_ac3_raw['synchinfo']['fscod']); + if ($thisfile_ac3_raw['synchinfo']['fscod'] <= 3) { + $info['audio']['sample_rate'] = $thisfile_ac3['sample_rate']; + } + + $thisfile_ac3['frame_length'] = self::frameSizeLookup($thisfile_ac3_raw['synchinfo']['frmsizecod'], $thisfile_ac3_raw['synchinfo']['fscod']); + $thisfile_ac3['bitrate'] = self::bitrateLookup($thisfile_ac3_raw['synchinfo']['frmsizecod']); + $info['audio']['bitrate'] = $thisfile_ac3['bitrate']; + + $this->AC3header['bsi'] = getid3_lib::BigEndian2Bin($this->fread(15)); + $ac3_bsi_offset = 0; + + $thisfile_ac3_raw_bsi['bsid'] = $this->readHeaderBSI(5); + if ($thisfile_ac3_raw_bsi['bsid'] > 8) { + // Decoders which can decode version 8 will thus be able to decode version numbers less than 8. + // If this standard is extended by the addition of additional elements or features, a value of bsid greater than 8 will be used. + // Decoders built to this version of the standard will not be able to decode versions with bsid greater than 8. + $this->error('Bit stream identification is version '.$thisfile_ac3_raw_bsi['bsid'].', but getID3() only understands up to version 8'); + unset($info['ac3']); + return false; + } + + $thisfile_ac3_raw_bsi['bsmod'] = $this->readHeaderBSI(3); + $thisfile_ac3_raw_bsi['acmod'] = $this->readHeaderBSI(3); + + $thisfile_ac3['service_type'] = self::serviceTypeLookup($thisfile_ac3_raw_bsi['bsmod'], $thisfile_ac3_raw_bsi['acmod']); + $ac3_coding_mode = self::audioCodingModeLookup($thisfile_ac3_raw_bsi['acmod']); + foreach($ac3_coding_mode as $key => $value) { + $thisfile_ac3[$key] = $value; + } + switch ($thisfile_ac3_raw_bsi['acmod']) { + case 0: + case 1: + $info['audio']['channelmode'] = 'mono'; + break; + case 3: + case 4: + $info['audio']['channelmode'] = 'stereo'; + break; + default: + $info['audio']['channelmode'] = 'surround'; + break; + } + $info['audio']['channels'] = $thisfile_ac3['num_channels']; + + if ($thisfile_ac3_raw_bsi['acmod'] & 0x01) { + // If the lsb of acmod is a 1, center channel is in use and cmixlev follows in the bit stream. + $thisfile_ac3_raw_bsi['cmixlev'] = $this->readHeaderBSI(2); + $thisfile_ac3['center_mix_level'] = self::centerMixLevelLookup($thisfile_ac3_raw_bsi['cmixlev']); + } + + if ($thisfile_ac3_raw_bsi['acmod'] & 0x04) { + // If the msb of acmod is a 1, surround channels are in use and surmixlev follows in the bit stream. + $thisfile_ac3_raw_bsi['surmixlev'] = $this->readHeaderBSI(2); + $thisfile_ac3['surround_mix_level'] = self::surroundMixLevelLookup($thisfile_ac3_raw_bsi['surmixlev']); + } + + if ($thisfile_ac3_raw_bsi['acmod'] == 0x02) { + // When operating in the two channel mode, this 2-bit code indicates whether or not the program has been encoded in Dolby Surround. + $thisfile_ac3_raw_bsi['dsurmod'] = $this->readHeaderBSI(2); + $thisfile_ac3['dolby_surround_mode'] = self::dolbySurroundModeLookup($thisfile_ac3_raw_bsi['dsurmod']); + } + + $thisfile_ac3_raw_bsi['lfeon'] = (bool) $this->readHeaderBSI(1); + $thisfile_ac3['lfe_enabled'] = $thisfile_ac3_raw_bsi['lfeon']; + if ($thisfile_ac3_raw_bsi['lfeon']) { + //$info['audio']['channels']++; + $info['audio']['channels'] .= '.1'; + } + + $thisfile_ac3['channels_enabled'] = self::channelsEnabledLookup($thisfile_ac3_raw_bsi['acmod'], $thisfile_ac3_raw_bsi['lfeon']); + + // This indicates how far the average dialogue level is below digital 100 percent. Valid values are 1-31. + // The value of 0 is reserved. The values of 1 to 31 are interpreted as -1 dB to -31 dB with respect to digital 100 percent. + $thisfile_ac3_raw_bsi['dialnorm'] = $this->readHeaderBSI(5); + $thisfile_ac3['dialogue_normalization'] = '-'.$thisfile_ac3_raw_bsi['dialnorm'].'dB'; + + $thisfile_ac3_raw_bsi['compre_flag'] = (bool) $this->readHeaderBSI(1); + if ($thisfile_ac3_raw_bsi['compre_flag']) { + $thisfile_ac3_raw_bsi['compr'] = $this->readHeaderBSI(8); + $thisfile_ac3['heavy_compression'] = self::heavyCompression($thisfile_ac3_raw_bsi['compr']); + } + + $thisfile_ac3_raw_bsi['langcode_flag'] = (bool) $this->readHeaderBSI(1); + if ($thisfile_ac3_raw_bsi['langcode_flag']) { + $thisfile_ac3_raw_bsi['langcod'] = $this->readHeaderBSI(8); + } + + $thisfile_ac3_raw_bsi['audprodie'] = (bool) $this->readHeaderBSI(1); + if ($thisfile_ac3_raw_bsi['audprodie']) { + $thisfile_ac3_raw_bsi['mixlevel'] = $this->readHeaderBSI(5); + $thisfile_ac3_raw_bsi['roomtyp'] = $this->readHeaderBSI(2); + + $thisfile_ac3['mixing_level'] = (80 + $thisfile_ac3_raw_bsi['mixlevel']).'dB'; + $thisfile_ac3['room_type'] = self::roomTypeLookup($thisfile_ac3_raw_bsi['roomtyp']); + } + + if ($thisfile_ac3_raw_bsi['acmod'] == 0x00) { + // If acmod is 0, then two completely independent program channels (dual mono) + // are encoded into the bit stream, and are referenced as Ch1, Ch2. In this case, + // a number of additional items are present in BSI or audblk to fully describe Ch2. + + // This indicates how far the average dialogue level is below digital 100 percent. Valid values are 1-31. + // The value of 0 is reserved. The values of 1 to 31 are interpreted as -1 dB to -31 dB with respect to digital 100 percent. + $thisfile_ac3_raw_bsi['dialnorm2'] = $this->readHeaderBSI(5); + $thisfile_ac3['dialogue_normalization2'] = '-'.$thisfile_ac3_raw_bsi['dialnorm2'].'dB'; + + $thisfile_ac3_raw_bsi['compre_flag2'] = (bool) $this->readHeaderBSI(1); + if ($thisfile_ac3_raw_bsi['compre_flag2']) { + $thisfile_ac3_raw_bsi['compr2'] = $this->readHeaderBSI(8); + $thisfile_ac3['heavy_compression2'] = self::heavyCompression($thisfile_ac3_raw_bsi['compr2']); + } + + $thisfile_ac3_raw_bsi['langcode_flag2'] = (bool) $this->readHeaderBSI(1); + if ($thisfile_ac3_raw_bsi['langcode_flag2']) { + $thisfile_ac3_raw_bsi['langcod2'] = $this->readHeaderBSI(8); + } + + $thisfile_ac3_raw_bsi['audprodie2'] = (bool) $this->readHeaderBSI(1); + if ($thisfile_ac3_raw_bsi['audprodie2']) { + $thisfile_ac3_raw_bsi['mixlevel2'] = $this->readHeaderBSI(5); + $thisfile_ac3_raw_bsi['roomtyp2'] = $this->readHeaderBSI(2); + + $thisfile_ac3['mixing_level2'] = (80 + $thisfile_ac3_raw_bsi['mixlevel2']).'dB'; + $thisfile_ac3['room_type2'] = self::roomTypeLookup($thisfile_ac3_raw_bsi['roomtyp2']); + } + + } + + $thisfile_ac3_raw_bsi['copyright'] = (bool) $this->readHeaderBSI(1); + + $thisfile_ac3_raw_bsi['original'] = (bool) $this->readHeaderBSI(1); + + $thisfile_ac3_raw_bsi['timecode1_flag'] = (bool) $this->readHeaderBSI(1); + if ($thisfile_ac3_raw_bsi['timecode1_flag']) { + $thisfile_ac3_raw_bsi['timecode1'] = $this->readHeaderBSI(14); + } + + $thisfile_ac3_raw_bsi['timecode2_flag'] = (bool) $this->readHeaderBSI(1); + if ($thisfile_ac3_raw_bsi['timecode2_flag']) { + $thisfile_ac3_raw_bsi['timecode2'] = $this->readHeaderBSI(14); + } + + $thisfile_ac3_raw_bsi['addbsi_flag'] = (bool) $this->readHeaderBSI(1); + if ($thisfile_ac3_raw_bsi['addbsi_flag']) { + $thisfile_ac3_raw_bsi['addbsi_length'] = $this->readHeaderBSI(6); + + $this->AC3header['bsi'] .= getid3_lib::BigEndian2Bin($this->fread($thisfile_ac3_raw_bsi['addbsi_length'])); + + $thisfile_ac3_raw_bsi['addbsi_data'] = substr($this->AC3header['bsi'], $this->BSIoffset, $thisfile_ac3_raw_bsi['addbsi_length'] * 8); + $this->BSIoffset += $thisfile_ac3_raw_bsi['addbsi_length'] * 8; + } + + return true; + } + + private function readHeaderBSI($length) { + $data = substr($this->AC3header['bsi'], $this->BSIoffset, $length); + $this->BSIoffset += $length; + + return bindec($data); + } + + public static function sampleRateCodeLookup($fscod) { + static $sampleRateCodeLookup = array( + 0 => 48000, + 1 => 44100, + 2 => 32000, + 3 => 'reserved' // If the reserved code is indicated, the decoder should not attempt to decode audio and should mute. + ); + return (isset($sampleRateCodeLookup[$fscod]) ? $sampleRateCodeLookup[$fscod] : false); + } + + public static function serviceTypeLookup($bsmod, $acmod) { + static $serviceTypeLookup = array(); + if (empty($serviceTypeLookup)) { + for ($i = 0; $i <= 7; $i++) { + $serviceTypeLookup[0][$i] = 'main audio service: complete main (CM)'; + $serviceTypeLookup[1][$i] = 'main audio service: music and effects (ME)'; + $serviceTypeLookup[2][$i] = 'associated service: visually impaired (VI)'; + $serviceTypeLookup[3][$i] = 'associated service: hearing impaired (HI)'; + $serviceTypeLookup[4][$i] = 'associated service: dialogue (D)'; + $serviceTypeLookup[5][$i] = 'associated service: commentary (C)'; + $serviceTypeLookup[6][$i] = 'associated service: emergency (E)'; + } + + $serviceTypeLookup[7][1] = 'associated service: voice over (VO)'; + for ($i = 2; $i <= 7; $i++) { + $serviceTypeLookup[7][$i] = 'main audio service: karaoke'; + } + } + return (isset($serviceTypeLookup[$bsmod][$acmod]) ? $serviceTypeLookup[$bsmod][$acmod] : false); + } + + public static function audioCodingModeLookup($acmod) { + // array(channel configuration, # channels (not incl LFE), channel order) + static $audioCodingModeLookup = array ( + 0 => array('channel_config'=>'1+1', 'num_channels'=>2, 'channel_order'=>'Ch1,Ch2'), + 1 => array('channel_config'=>'1/0', 'num_channels'=>1, 'channel_order'=>'C'), + 2 => array('channel_config'=>'2/0', 'num_channels'=>2, 'channel_order'=>'L,R'), + 3 => array('channel_config'=>'3/0', 'num_channels'=>3, 'channel_order'=>'L,C,R'), + 4 => array('channel_config'=>'2/1', 'num_channels'=>3, 'channel_order'=>'L,R,S'), + 5 => array('channel_config'=>'3/1', 'num_channels'=>4, 'channel_order'=>'L,C,R,S'), + 6 => array('channel_config'=>'2/2', 'num_channels'=>4, 'channel_order'=>'L,R,SL,SR'), + 7 => array('channel_config'=>'3/2', 'num_channels'=>5, 'channel_order'=>'L,C,R,SL,SR'), + ); + return (isset($audioCodingModeLookup[$acmod]) ? $audioCodingModeLookup[$acmod] : false); + } + + public static function centerMixLevelLookup($cmixlev) { + static $centerMixLevelLookup; + if (empty($centerMixLevelLookup)) { + $centerMixLevelLookup = array( + 0 => pow(2, -3.0 / 6), // 0.707 (-3.0 dB) + 1 => pow(2, -4.5 / 6), // 0.595 (-4.5 dB) + 2 => pow(2, -6.0 / 6), // 0.500 (-6.0 dB) + 3 => 'reserved' + ); + } + return (isset($centerMixLevelLookup[$cmixlev]) ? $centerMixLevelLookup[$cmixlev] : false); + } + + public static function surroundMixLevelLookup($surmixlev) { + static $surroundMixLevelLookup; + if (empty($surroundMixLevelLookup)) { + $surroundMixLevelLookup = array( + 0 => pow(2, -3.0 / 6), + 1 => pow(2, -6.0 / 6), + 2 => 0, + 3 => 'reserved' + ); + } + return (isset($surroundMixLevelLookup[$surmixlev]) ? $surroundMixLevelLookup[$surmixlev] : false); + } + + public static function dolbySurroundModeLookup($dsurmod) { + static $dolbySurroundModeLookup = array( + 0 => 'not indicated', + 1 => 'Not Dolby Surround encoded', + 2 => 'Dolby Surround encoded', + 3 => 'reserved' + ); + return (isset($dolbySurroundModeLookup[$dsurmod]) ? $dolbySurroundModeLookup[$dsurmod] : false); + } + + public static function channelsEnabledLookup($acmod, $lfeon) { + $lookup = array( + 'ch1'=>(bool) ($acmod == 0), + 'ch2'=>(bool) ($acmod == 0), + 'left'=>(bool) ($acmod > 1), + 'right'=>(bool) ($acmod > 1), + 'center'=>(bool) ($acmod & 0x01), + 'surround_mono'=>false, + 'surround_left'=>false, + 'surround_right'=>false, + 'lfe'=>$lfeon); + switch ($acmod) { + case 4: + case 5: + $lookup['surround_mono'] = true; + break; + case 6: + case 7: + $lookup['surround_left'] = true; + $lookup['surround_right'] = true; + break; + } + return $lookup; + } + + public static function heavyCompression($compre) { + // The first four bits indicate gain changes in 6.02dB increments which can be + // implemented with an arithmetic shift operation. The following four bits + // indicate linear gain changes, and require a 5-bit multiply. + // We will represent the two 4-bit fields of compr as follows: + // X0 X1 X2 X3 . Y4 Y5 Y6 Y7 + // The meaning of the X values is most simply described by considering X to represent a 4-bit + // signed integer with values from -8 to +7. The gain indicated by X is then (X + 1) * 6.02 dB. The + // following table shows this in detail. + + // Meaning of 4 msb of compr + // 7 +48.16 dB + // 6 +42.14 dB + // 5 +36.12 dB + // 4 +30.10 dB + // 3 +24.08 dB + // 2 +18.06 dB + // 1 +12.04 dB + // 0 +6.02 dB + // -1 0 dB + // -2 -6.02 dB + // -3 -12.04 dB + // -4 -18.06 dB + // -5 -24.08 dB + // -6 -30.10 dB + // -7 -36.12 dB + // -8 -42.14 dB + + $fourbit = str_pad(decbin(($compre & 0xF0) >> 4), 4, '0', STR_PAD_LEFT); + if ($fourbit{0} == '1') { + $log_gain = -8 + bindec(substr($fourbit, 1)); + } else { + $log_gain = bindec(substr($fourbit, 1)); + } + $log_gain = ($log_gain + 1) * getid3_lib::RGADamplitude2dB(2); + + // The value of Y is a linear representation of a gain change of up to -6 dB. Y is considered to + // be an unsigned fractional integer, with a leading value of 1, or: 0.1 Y4 Y5 Y6 Y7 (base 2). Y can + // represent values between 0.111112 (or 31/32) and 0.100002 (or 1/2). Thus, Y can represent gain + // changes from -0.28 dB to -6.02 dB. + + $lin_gain = (16 + ($compre & 0x0F)) / 32; + + // The combination of X and Y values allows compr to indicate gain changes from + // 48.16 - 0.28 = +47.89 dB, to + // -42.14 - 6.02 = -48.16 dB. + + return $log_gain - $lin_gain; + } + + public static function roomTypeLookup($roomtyp) { + static $roomTypeLookup = array( + 0 => 'not indicated', + 1 => 'large room, X curve monitor', + 2 => 'small room, flat monitor', + 3 => 'reserved' + ); + return (isset($roomTypeLookup[$roomtyp]) ? $roomTypeLookup[$roomtyp] : false); + } + + public static function frameSizeLookup($frmsizecod, $fscod) { + $padding = (bool) ($frmsizecod % 2); + $framesizeid = floor($frmsizecod / 2); + + static $frameSizeLookup = array(); + if (empty($frameSizeLookup)) { + $frameSizeLookup = array ( + 0 => array(128, 138, 192), + 1 => array(40, 160, 174, 240), + 2 => array(48, 192, 208, 288), + 3 => array(56, 224, 242, 336), + 4 => array(64, 256, 278, 384), + 5 => array(80, 320, 348, 480), + 6 => array(96, 384, 416, 576), + 7 => array(112, 448, 486, 672), + 8 => array(128, 512, 556, 768), + 9 => array(160, 640, 696, 960), + 10 => array(192, 768, 834, 1152), + 11 => array(224, 896, 974, 1344), + 12 => array(256, 1024, 1114, 1536), + 13 => array(320, 1280, 1392, 1920), + 14 => array(384, 1536, 1670, 2304), + 15 => array(448, 1792, 1950, 2688), + 16 => array(512, 2048, 2228, 3072), + 17 => array(576, 2304, 2506, 3456), + 18 => array(640, 2560, 2786, 3840) + ); + } + if (($fscod == 1) && $padding) { + // frame lengths are padded by 1 word (16 bits) at 44100 + $frameSizeLookup[$frmsizecod] += 2; + } + return (isset($frameSizeLookup[$framesizeid][$fscod]) ? $frameSizeLookup[$framesizeid][$fscod] : false); + } + + public static function bitrateLookup($frmsizecod) { + $framesizeid = floor($frmsizecod / 2); + + static $bitrateLookup = array( + 0 => 32000, + 1 => 40000, + 2 => 48000, + 3 => 56000, + 4 => 64000, + 5 => 80000, + 6 => 96000, + 7 => 112000, + 8 => 128000, + 9 => 160000, + 10 => 192000, + 11 => 224000, + 12 => 256000, + 13 => 320000, + 14 => 384000, + 15 => 448000, + 16 => 512000, + 17 => 576000, + 18 => 640000 + ); + return (isset($bitrateLookup[$framesizeid]) ? $bitrateLookup[$framesizeid] : false); + } + + +} diff --git a/src/wp-includes/ID3/module.audio.dts.php b/src/wp-includes/ID3/module.audio.dts.php new file mode 100644 index 0000000..79982cc --- /dev/null +++ b/src/wp-includes/ID3/module.audio.dts.php @@ -0,0 +1,290 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +// // +// module.audio.dts.php // +// module for analyzing DTS Audio files // +// dependencies: NONE // +// // +///////////////////////////////////////////////////////////////// + + +/** +* @tutorial http://wiki.multimedia.cx/index.php?title=DTS +*/ +class getid3_dts extends getid3_handler +{ + /** + * Default DTS syncword used in native .cpt or .dts formats + */ + const syncword = "\x7F\xFE\x80\x01"; + + private $readBinDataOffset = 0; + + /** + * Possible syncwords indicating bitstream encoding + */ + public static $syncwords = array( + 0 => "\x7F\xFE\x80\x01", // raw big-endian + 1 => "\xFE\x7F\x01\x80", // raw little-endian + 2 => "\x1F\xFF\xE8\x00", // 14-bit big-endian + 3 => "\xFF\x1F\x00\xE8"); // 14-bit little-endian + + public function Analyze() { + $info = &$this->getid3->info; + $info['fileformat'] = 'dts'; + + $this->fseek($info['avdataoffset']); + $DTSheader = $this->fread(20); // we only need 2 words magic + 6 words frame header, but these words may be normal 16-bit words OR 14-bit words with 2 highest bits set to zero, so 8 words can be either 8*16/8 = 16 bytes OR 8*16*(16/14)/8 = 18.3 bytes + + // check syncword + $sync = substr($DTSheader, 0, 4); + if (($encoding = array_search($sync, self::$syncwords)) !== false) { + + $info['dts']['raw']['magic'] = $sync; + $this->readBinDataOffset = 32; + + } elseif ($this->isDependencyFor('matroska')) { + + // Matroska contains DTS without syncword encoded as raw big-endian format + $encoding = 0; + $this->readBinDataOffset = 0; + + } else { + + unset($info['fileformat']); + return $this->error('Expecting "'.implode('| ', array_map('getid3_lib::PrintHexBytes', self::$syncwords)).'" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes($sync).'"'); + + } + + // decode header + $fhBS = ''; + for ($word_offset = 0; $word_offset <= strlen($DTSheader); $word_offset += 2) { + switch ($encoding) { + case 0: // raw big-endian + $fhBS .= getid3_lib::BigEndian2Bin( substr($DTSheader, $word_offset, 2) ); + break; + case 1: // raw little-endian + $fhBS .= getid3_lib::BigEndian2Bin(strrev(substr($DTSheader, $word_offset, 2))); + break; + case 2: // 14-bit big-endian + $fhBS .= substr(getid3_lib::BigEndian2Bin( substr($DTSheader, $word_offset, 2) ), 2, 14); + break; + case 3: // 14-bit little-endian + $fhBS .= substr(getid3_lib::BigEndian2Bin(strrev(substr($DTSheader, $word_offset, 2))), 2, 14); + break; + } + } + + $info['dts']['raw']['frame_type'] = $this->readBinData($fhBS, 1); + $info['dts']['raw']['deficit_samples'] = $this->readBinData($fhBS, 5); + $info['dts']['flags']['crc_present'] = (bool) $this->readBinData($fhBS, 1); + $info['dts']['raw']['pcm_sample_blocks'] = $this->readBinData($fhBS, 7); + $info['dts']['raw']['frame_byte_size'] = $this->readBinData($fhBS, 14); + $info['dts']['raw']['channel_arrangement'] = $this->readBinData($fhBS, 6); + $info['dts']['raw']['sample_frequency'] = $this->readBinData($fhBS, 4); + $info['dts']['raw']['bitrate'] = $this->readBinData($fhBS, 5); + $info['dts']['flags']['embedded_downmix'] = (bool) $this->readBinData($fhBS, 1); + $info['dts']['flags']['dynamicrange'] = (bool) $this->readBinData($fhBS, 1); + $info['dts']['flags']['timestamp'] = (bool) $this->readBinData($fhBS, 1); + $info['dts']['flags']['auxdata'] = (bool) $this->readBinData($fhBS, 1); + $info['dts']['flags']['hdcd'] = (bool) $this->readBinData($fhBS, 1); + $info['dts']['raw']['extension_audio'] = $this->readBinData($fhBS, 3); + $info['dts']['flags']['extended_coding'] = (bool) $this->readBinData($fhBS, 1); + $info['dts']['flags']['audio_sync_insertion'] = (bool) $this->readBinData($fhBS, 1); + $info['dts']['raw']['lfe_effects'] = $this->readBinData($fhBS, 2); + $info['dts']['flags']['predictor_history'] = (bool) $this->readBinData($fhBS, 1); + if ($info['dts']['flags']['crc_present']) { + $info['dts']['raw']['crc16'] = $this->readBinData($fhBS, 16); + } + $info['dts']['flags']['mri_perfect_reconst'] = (bool) $this->readBinData($fhBS, 1); + $info['dts']['raw']['encoder_soft_version'] = $this->readBinData($fhBS, 4); + $info['dts']['raw']['copy_history'] = $this->readBinData($fhBS, 2); + $info['dts']['raw']['bits_per_sample'] = $this->readBinData($fhBS, 2); + $info['dts']['flags']['surround_es'] = (bool) $this->readBinData($fhBS, 1); + $info['dts']['flags']['front_sum_diff'] = (bool) $this->readBinData($fhBS, 1); + $info['dts']['flags']['surround_sum_diff'] = (bool) $this->readBinData($fhBS, 1); + $info['dts']['raw']['dialog_normalization'] = $this->readBinData($fhBS, 4); + + + $info['dts']['bitrate'] = self::bitrateLookup($info['dts']['raw']['bitrate']); + $info['dts']['bits_per_sample'] = self::bitPerSampleLookup($info['dts']['raw']['bits_per_sample']); + $info['dts']['sample_rate'] = self::sampleRateLookup($info['dts']['raw']['sample_frequency']); + $info['dts']['dialog_normalization'] = self::dialogNormalization($info['dts']['raw']['dialog_normalization'], $info['dts']['raw']['encoder_soft_version']); + $info['dts']['flags']['lossless'] = (($info['dts']['raw']['bitrate'] == 31) ? true : false); + $info['dts']['bitrate_mode'] = (($info['dts']['raw']['bitrate'] == 30) ? 'vbr' : 'cbr'); + $info['dts']['channels'] = self::numChannelsLookup($info['dts']['raw']['channel_arrangement']); + $info['dts']['channel_arrangement'] = self::channelArrangementLookup($info['dts']['raw']['channel_arrangement']); + + $info['audio']['dataformat'] = 'dts'; + $info['audio']['lossless'] = $info['dts']['flags']['lossless']; + $info['audio']['bitrate_mode'] = $info['dts']['bitrate_mode']; + $info['audio']['bits_per_sample'] = $info['dts']['bits_per_sample']; + $info['audio']['sample_rate'] = $info['dts']['sample_rate']; + $info['audio']['channels'] = $info['dts']['channels']; + $info['audio']['bitrate'] = $info['dts']['bitrate']; + if (isset($info['avdataend']) && !empty($info['dts']['bitrate']) && is_numeric($info['dts']['bitrate'])) { + $info['playtime_seconds'] = ($info['avdataend'] - $info['avdataoffset']) / ($info['dts']['bitrate'] / 8); + if (($encoding == 2) || ($encoding == 3)) { + // 14-bit data packed into 16-bit words, so the playtime is wrong because only (14/16) of the bytes in the data portion of the file are used at the specified bitrate + $info['playtime_seconds'] *= (14 / 16); + } + } + return true; + } + + private function readBinData($bin, $length) { + $data = substr($bin, $this->readBinDataOffset, $length); + $this->readBinDataOffset += $length; + + return bindec($data); + } + + public static function bitrateLookup($index) { + static $lookup = array( + 0 => 32000, + 1 => 56000, + 2 => 64000, + 3 => 96000, + 4 => 112000, + 5 => 128000, + 6 => 192000, + 7 => 224000, + 8 => 256000, + 9 => 320000, + 10 => 384000, + 11 => 448000, + 12 => 512000, + 13 => 576000, + 14 => 640000, + 15 => 768000, + 16 => 960000, + 17 => 1024000, + 18 => 1152000, + 19 => 1280000, + 20 => 1344000, + 21 => 1408000, + 22 => 1411200, + 23 => 1472000, + 24 => 1536000, + 25 => 1920000, + 26 => 2048000, + 27 => 3072000, + 28 => 3840000, + 29 => 'open', + 30 => 'variable', + 31 => 'lossless', + ); + return (isset($lookup[$index]) ? $lookup[$index] : false); + } + + public static function sampleRateLookup($index) { + static $lookup = array( + 0 => 'invalid', + 1 => 8000, + 2 => 16000, + 3 => 32000, + 4 => 'invalid', + 5 => 'invalid', + 6 => 11025, + 7 => 22050, + 8 => 44100, + 9 => 'invalid', + 10 => 'invalid', + 11 => 12000, + 12 => 24000, + 13 => 48000, + 14 => 'invalid', + 15 => 'invalid', + ); + return (isset($lookup[$index]) ? $lookup[$index] : false); + } + + public static function bitPerSampleLookup($index) { + static $lookup = array( + 0 => 16, + 1 => 20, + 2 => 24, + 3 => 24, + ); + return (isset($lookup[$index]) ? $lookup[$index] : false); + } + + public static function numChannelsLookup($index) { + switch ($index) { + case 0: + return 1; + break; + case 1: + case 2: + case 3: + case 4: + return 2; + break; + case 5: + case 6: + return 3; + break; + case 7: + case 8: + return 4; + break; + case 9: + return 5; + break; + case 10: + case 11: + case 12: + return 6; + break; + case 13: + return 7; + break; + case 14: + case 15: + return 8; + break; + } + return false; + } + + public static function channelArrangementLookup($index) { + static $lookup = array( + 0 => 'A', + 1 => 'A + B (dual mono)', + 2 => 'L + R (stereo)', + 3 => '(L+R) + (L-R) (sum-difference)', + 4 => 'LT + RT (left and right total)', + 5 => 'C + L + R', + 6 => 'L + R + S', + 7 => 'C + L + R + S', + 8 => 'L + R + SL + SR', + 9 => 'C + L + R + SL + SR', + 10 => 'CL + CR + L + R + SL + SR', + 11 => 'C + L + R+ LR + RR + OV', + 12 => 'CF + CR + LF + RF + LR + RR', + 13 => 'CL + C + CR + L + R + SL + SR', + 14 => 'CL + CR + L + R + SL1 + SL2 + SR1 + SR2', + 15 => 'CL + C+ CR + L + R + SL + S + SR', + ); + return (isset($lookup[$index]) ? $lookup[$index] : 'user-defined'); + } + + public static function dialogNormalization($index, $version) { + switch ($version) { + case 7: + return 0 - $index; + break; + case 6: + return 0 - 16 - $index; + break; + } + return false; + } + +} diff --git a/src/wp-includes/ID3/module.audio.flac.php b/src/wp-includes/ID3/module.audio.flac.php new file mode 100644 index 0000000..6b9598c --- /dev/null +++ b/src/wp-includes/ID3/module.audio.flac.php @@ -0,0 +1,442 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +// // +// module.audio.flac.php // +// module for analyzing FLAC and OggFLAC audio files // +// dependencies: module.audio.ogg.php // +// /// +///////////////////////////////////////////////////////////////// + + +getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.ogg.php', __FILE__, true); + +/** +* @tutorial http://flac.sourceforge.net/format.html +*/ +class getid3_flac extends getid3_handler +{ + const syncword = 'fLaC'; + + public function Analyze() { + $info = &$this->getid3->info; + + $this->fseek($info['avdataoffset']); + $StreamMarker = $this->fread(4); + if ($StreamMarker != self::syncword) { + return $this->error('Expecting "'.getid3_lib::PrintHexBytes(self::syncword).'" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes($StreamMarker).'"'); + } + $info['fileformat'] = 'flac'; + $info['audio']['dataformat'] = 'flac'; + $info['audio']['bitrate_mode'] = 'vbr'; + $info['audio']['lossless'] = true; + + // parse flac container + return $this->parseMETAdata(); + } + + public function parseMETAdata() { + $info = &$this->getid3->info; + do { + $BlockOffset = $this->ftell(); + $BlockHeader = $this->fread(4); + $LBFBT = getid3_lib::BigEndian2Int(substr($BlockHeader, 0, 1)); + $LastBlockFlag = (bool) ($LBFBT & 0x80); + $BlockType = ($LBFBT & 0x7F); + $BlockLength = getid3_lib::BigEndian2Int(substr($BlockHeader, 1, 3)); + $BlockTypeText = self::metaBlockTypeLookup($BlockType); + + if (($BlockOffset + 4 + $BlockLength) > $info['avdataend']) { + $this->error('METADATA_BLOCK_HEADER.BLOCK_TYPE ('.$BlockTypeText.') at offset '.$BlockOffset.' extends beyond end of file'); + break; + } + if ($BlockLength < 1) { + $this->error('METADATA_BLOCK_HEADER.BLOCK_LENGTH ('.$BlockLength.') at offset '.$BlockOffset.' is invalid'); + break; + } + + $info['flac'][$BlockTypeText]['raw'] = array(); + $BlockTypeText_raw = &$info['flac'][$BlockTypeText]['raw']; + + $BlockTypeText_raw['offset'] = $BlockOffset; + $BlockTypeText_raw['last_meta_block'] = $LastBlockFlag; + $BlockTypeText_raw['block_type'] = $BlockType; + $BlockTypeText_raw['block_type_text'] = $BlockTypeText; + $BlockTypeText_raw['block_length'] = $BlockLength; + if ($BlockTypeText_raw['block_type'] != 0x06) { // do not read attachment data automatically + $BlockTypeText_raw['block_data'] = $this->fread($BlockLength); + } + + switch ($BlockTypeText) { + case 'STREAMINFO': // 0x00 + if (!$this->parseSTREAMINFO($BlockTypeText_raw['block_data'])) { + return false; + } + break; + + case 'PADDING': // 0x01 + unset($info['flac']['PADDING']); // ignore + break; + + case 'APPLICATION': // 0x02 + if (!$this->parseAPPLICATION($BlockTypeText_raw['block_data'])) { + return false; + } + break; + + case 'SEEKTABLE': // 0x03 + if (!$this->parseSEEKTABLE($BlockTypeText_raw['block_data'])) { + return false; + } + break; + + case 'VORBIS_COMMENT': // 0x04 + if (!$this->parseVORBIS_COMMENT($BlockTypeText_raw['block_data'])) { + return false; + } + break; + + case 'CUESHEET': // 0x05 + if (!$this->parseCUESHEET($BlockTypeText_raw['block_data'])) { + return false; + } + break; + + case 'PICTURE': // 0x06 + if (!$this->parsePICTURE()) { + return false; + } + break; + + default: + $this->warning('Unhandled METADATA_BLOCK_HEADER.BLOCK_TYPE ('.$BlockType.') at offset '.$BlockOffset); + } + + unset($info['flac'][$BlockTypeText]['raw']); + $info['avdataoffset'] = $this->ftell(); + } + while ($LastBlockFlag === false); + + // handle tags + if (!empty($info['flac']['VORBIS_COMMENT']['comments'])) { + $info['flac']['comments'] = $info['flac']['VORBIS_COMMENT']['comments']; + } + if (!empty($info['flac']['VORBIS_COMMENT']['vendor'])) { + $info['audio']['encoder'] = str_replace('reference ', '', $info['flac']['VORBIS_COMMENT']['vendor']); + } + + // copy attachments to 'comments' array if nesesary + if (isset($info['flac']['PICTURE']) && ($this->getid3->option_save_attachments !== getID3::ATTACHMENTS_NONE)) { + foreach ($info['flac']['PICTURE'] as $entry) { + if (!empty($entry['data'])) { + $info['flac']['comments']['picture'][] = array('image_mime'=>$entry['image_mime'], 'data'=>$entry['data']); + } + } + } + + if (isset($info['flac']['STREAMINFO'])) { + if (!$this->isDependencyFor('matroska')) { + $info['flac']['compressed_audio_bytes'] = $info['avdataend'] - $info['avdataoffset']; + } + $info['flac']['uncompressed_audio_bytes'] = $info['flac']['STREAMINFO']['samples_stream'] * $info['flac']['STREAMINFO']['channels'] * ($info['flac']['STREAMINFO']['bits_per_sample'] / 8); + if ($info['flac']['uncompressed_audio_bytes'] == 0) { + return $this->error('Corrupt FLAC file: uncompressed_audio_bytes == zero'); + } + if (!empty($info['flac']['compressed_audio_bytes'])) { + $info['flac']['compression_ratio'] = $info['flac']['compressed_audio_bytes'] / $info['flac']['uncompressed_audio_bytes']; + } + } + + // set md5_data_source - built into flac 0.5+ + if (isset($info['flac']['STREAMINFO']['audio_signature'])) { + + if ($info['flac']['STREAMINFO']['audio_signature'] === str_repeat("\x00", 16)) { + $this->warning('FLAC STREAMINFO.audio_signature is null (known issue with libOggFLAC)'); + } + else { + $info['md5_data_source'] = ''; + $md5 = $info['flac']['STREAMINFO']['audio_signature']; + for ($i = 0; $i < strlen($md5); $i++) { + $info['md5_data_source'] .= str_pad(dechex(ord($md5[$i])), 2, '00', STR_PAD_LEFT); + } + if (!preg_match('/^[0-9a-f]{32}$/', $info['md5_data_source'])) { + unset($info['md5_data_source']); + } + } + } + + if (isset($info['flac']['STREAMINFO']['bits_per_sample'])) { + $info['audio']['bits_per_sample'] = $info['flac']['STREAMINFO']['bits_per_sample']; + if ($info['audio']['bits_per_sample'] == 8) { + // special case + // must invert sign bit on all data bytes before MD5'ing to match FLAC's calculated value + // MD5sum calculates on unsigned bytes, but FLAC calculated MD5 on 8-bit audio data as signed + $this->warning('FLAC calculates MD5 data strangely on 8-bit audio, so the stored md5_data_source value will not match the decoded WAV file'); + } + } + + return true; + } + + private function parseSTREAMINFO($BlockData) { + $info = &$this->getid3->info; + + $info['flac']['STREAMINFO'] = array(); + $streaminfo = &$info['flac']['STREAMINFO']; + + $streaminfo['min_block_size'] = getid3_lib::BigEndian2Int(substr($BlockData, 0, 2)); + $streaminfo['max_block_size'] = getid3_lib::BigEndian2Int(substr($BlockData, 2, 2)); + $streaminfo['min_frame_size'] = getid3_lib::BigEndian2Int(substr($BlockData, 4, 3)); + $streaminfo['max_frame_size'] = getid3_lib::BigEndian2Int(substr($BlockData, 7, 3)); + + $SRCSBSS = getid3_lib::BigEndian2Bin(substr($BlockData, 10, 8)); + $streaminfo['sample_rate'] = getid3_lib::Bin2Dec(substr($SRCSBSS, 0, 20)); + $streaminfo['channels'] = getid3_lib::Bin2Dec(substr($SRCSBSS, 20, 3)) + 1; + $streaminfo['bits_per_sample'] = getid3_lib::Bin2Dec(substr($SRCSBSS, 23, 5)) + 1; + $streaminfo['samples_stream'] = getid3_lib::Bin2Dec(substr($SRCSBSS, 28, 36)); + + $streaminfo['audio_signature'] = substr($BlockData, 18, 16); + + if (!empty($streaminfo['sample_rate'])) { + + $info['audio']['bitrate_mode'] = 'vbr'; + $info['audio']['sample_rate'] = $streaminfo['sample_rate']; + $info['audio']['channels'] = $streaminfo['channels']; + $info['audio']['bits_per_sample'] = $streaminfo['bits_per_sample']; + $info['playtime_seconds'] = $streaminfo['samples_stream'] / $streaminfo['sample_rate']; + if ($info['playtime_seconds'] > 0) { + if (!$this->isDependencyFor('matroska')) { + $info['audio']['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds']; + } + else { + $this->warning('Cannot determine audio bitrate because total stream size is unknown'); + } + } + + } else { + return $this->error('Corrupt METAdata block: STREAMINFO'); + } + + return true; + } + + private function parseAPPLICATION($BlockData) { + $info = &$this->getid3->info; + + $ApplicationID = getid3_lib::BigEndian2Int(substr($BlockData, 0, 4)); + $info['flac']['APPLICATION'][$ApplicationID]['name'] = self::applicationIDLookup($ApplicationID); + $info['flac']['APPLICATION'][$ApplicationID]['data'] = substr($BlockData, 4); + + return true; + } + + private function parseSEEKTABLE($BlockData) { + $info = &$this->getid3->info; + + $offset = 0; + $BlockLength = strlen($BlockData); + $placeholderpattern = str_repeat("\xFF", 8); + while ($offset < $BlockLength) { + $SampleNumberString = substr($BlockData, $offset, 8); + $offset += 8; + if ($SampleNumberString == $placeholderpattern) { + + // placeholder point + getid3_lib::safe_inc($info['flac']['SEEKTABLE']['placeholders'], 1); + $offset += 10; + + } else { + + $SampleNumber = getid3_lib::BigEndian2Int($SampleNumberString); + $info['flac']['SEEKTABLE'][$SampleNumber]['offset'] = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8)); + $offset += 8; + $info['flac']['SEEKTABLE'][$SampleNumber]['samples'] = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 2)); + $offset += 2; + + } + } + + return true; + } + + private function parseVORBIS_COMMENT($BlockData) { + $info = &$this->getid3->info; + + $getid3_ogg = new getid3_ogg($this->getid3); + if ($this->isDependencyFor('matroska')) { + $getid3_ogg->setStringMode($this->data_string); + } + $getid3_ogg->ParseVorbisComments(); + if (isset($info['ogg'])) { + unset($info['ogg']['comments_raw']); + $info['flac']['VORBIS_COMMENT'] = $info['ogg']; + unset($info['ogg']); + } + + unset($getid3_ogg); + + return true; + } + + private function parseCUESHEET($BlockData) { + $info = &$this->getid3->info; + $offset = 0; + $info['flac']['CUESHEET']['media_catalog_number'] = trim(substr($BlockData, $offset, 128), "\0"); + $offset += 128; + $info['flac']['CUESHEET']['lead_in_samples'] = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8)); + $offset += 8; + $info['flac']['CUESHEET']['flags']['is_cd'] = (bool) (getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1)) & 0x80); + $offset += 1; + + $offset += 258; // reserved + + $info['flac']['CUESHEET']['number_tracks'] = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1)); + $offset += 1; + + for ($track = 0; $track < $info['flac']['CUESHEET']['number_tracks']; $track++) { + $TrackSampleOffset = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8)); + $offset += 8; + $TrackNumber = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1)); + $offset += 1; + + $info['flac']['CUESHEET']['tracks'][$TrackNumber]['sample_offset'] = $TrackSampleOffset; + + $info['flac']['CUESHEET']['tracks'][$TrackNumber]['isrc'] = substr($BlockData, $offset, 12); + $offset += 12; + + $TrackFlagsRaw = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1)); + $offset += 1; + $info['flac']['CUESHEET']['tracks'][$TrackNumber]['flags']['is_audio'] = (bool) ($TrackFlagsRaw & 0x80); + $info['flac']['CUESHEET']['tracks'][$TrackNumber]['flags']['pre_emphasis'] = (bool) ($TrackFlagsRaw & 0x40); + + $offset += 13; // reserved + + $info['flac']['CUESHEET']['tracks'][$TrackNumber]['index_points'] = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1)); + $offset += 1; + + for ($index = 0; $index < $info['flac']['CUESHEET']['tracks'][$TrackNumber]['index_points']; $index++) { + $IndexSampleOffset = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8)); + $offset += 8; + $IndexNumber = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1)); + $offset += 1; + + $offset += 3; // reserved + + $info['flac']['CUESHEET']['tracks'][$TrackNumber]['indexes'][$IndexNumber] = $IndexSampleOffset; + } + } + + return true; + } + + /** + * Parse METADATA_BLOCK_PICTURE flac structure and extract attachment + * External usage: audio.ogg + */ + public function parsePICTURE() { + $info = &$this->getid3->info; + + $picture['typeid'] = getid3_lib::BigEndian2Int($this->fread(4)); + $picture['type'] = self::pictureTypeLookup($picture['typeid']); + $picture['image_mime'] = $this->fread(getid3_lib::BigEndian2Int($this->fread(4))); + $descr_length = getid3_lib::BigEndian2Int($this->fread(4)); + if ($descr_length) { + $picture['description'] = $this->fread($descr_length); + } + $picture['width'] = getid3_lib::BigEndian2Int($this->fread(4)); + $picture['height'] = getid3_lib::BigEndian2Int($this->fread(4)); + $picture['color_depth'] = getid3_lib::BigEndian2Int($this->fread(4)); + $picture['colors_indexed'] = getid3_lib::BigEndian2Int($this->fread(4)); + $data_length = getid3_lib::BigEndian2Int($this->fread(4)); + + if ($picture['image_mime'] == '-->') { + $picture['data'] = $this->fread($data_length); + } else { + $picture['data'] = $this->saveAttachment( + str_replace('/', '_', $picture['type']).'_'.$this->ftell(), + $this->ftell(), + $data_length, + $picture['image_mime']); + } + + $info['flac']['PICTURE'][] = $picture; + + return true; + } + + public static function metaBlockTypeLookup($blocktype) { + static $lookup = array( + 0 => 'STREAMINFO', + 1 => 'PADDING', + 2 => 'APPLICATION', + 3 => 'SEEKTABLE', + 4 => 'VORBIS_COMMENT', + 5 => 'CUESHEET', + 6 => 'PICTURE', + ); + return (isset($lookup[$blocktype]) ? $lookup[$blocktype] : 'reserved'); + } + + public static function applicationIDLookup($applicationid) { + // http://flac.sourceforge.net/id.html + static $lookup = array( + 0x41544348 => 'FlacFile', // "ATCH" + 0x42534F4C => 'beSolo', // "BSOL" + 0x42554753 => 'Bugs Player', // "BUGS" + 0x43756573 => 'GoldWave cue points (specification)', // "Cues" + 0x46696361 => 'CUE Splitter', // "Fica" + 0x46746F6C => 'flac-tools', // "Ftol" + 0x4D4F5442 => 'MOTB MetaCzar', // "MOTB" + 0x4D505345 => 'MP3 Stream Editor', // "MPSE" + 0x4D754D4C => 'MusicML: Music Metadata Language', // "MuML" + 0x52494646 => 'Sound Devices RIFF chunk storage', // "RIFF" + 0x5346464C => 'Sound Font FLAC', // "SFFL" + 0x534F4E59 => 'Sony Creative Software', // "SONY" + 0x5351455A => 'flacsqueeze', // "SQEZ" + 0x54745776 => 'TwistedWave', // "TtWv" + 0x55495453 => 'UITS Embedding tools', // "UITS" + 0x61696666 => 'FLAC AIFF chunk storage', // "aiff" + 0x696D6167 => 'flac-image application for storing arbitrary files in APPLICATION metadata blocks', // "imag" + 0x7065656D => 'Parseable Embedded Extensible Metadata (specification)', // "peem" + 0x71667374 => 'QFLAC Studio', // "qfst" + 0x72696666 => 'FLAC RIFF chunk storage', // "riff" + 0x74756E65 => 'TagTuner', // "tune" + 0x78626174 => 'XBAT', // "xbat" + 0x786D6364 => 'xmcd', // "xmcd" + ); + return (isset($lookup[$applicationid]) ? $lookup[$applicationid] : 'reserved'); + } + + public static function pictureTypeLookup($type_id) { + static $lookup = array ( + 0 => 'Other', + 1 => '32x32 pixels \'file icon\' (PNG only)', + 2 => 'Other file icon', + 3 => 'Cover (front)', + 4 => 'Cover (back)', + 5 => 'Leaflet page', + 6 => 'Media (e.g. label side of CD)', + 7 => 'Lead artist/lead performer/soloist', + 8 => 'Artist/performer', + 9 => 'Conductor', + 10 => 'Band/Orchestra', + 11 => 'Composer', + 12 => 'Lyricist/text writer', + 13 => 'Recording Location', + 14 => 'During recording', + 15 => 'During performance', + 16 => 'Movie/video screen capture', + 17 => 'A bright coloured fish', + 18 => 'Illustration', + 19 => 'Band/artist logotype', + 20 => 'Publisher/Studio logotype', + ); + return (isset($lookup[$type_id]) ? $lookup[$type_id] : 'reserved'); + } + +} diff --git a/src/wp-includes/ID3/module.audio.mp3.php b/src/wp-includes/ID3/module.audio.mp3.php new file mode 100644 index 0000000..e6ffea9 --- /dev/null +++ b/src/wp-includes/ID3/module.audio.mp3.php @@ -0,0 +1,2009 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +// // +// module.audio.mp3.php // +// module for analyzing MP3 files // +// dependencies: NONE // +// /// +///////////////////////////////////////////////////////////////// + + +// number of frames to scan to determine if MPEG-audio sequence is valid +// Lower this number to 5-20 for faster scanning +// Increase this number to 50+ for most accurate detection of valid VBR/CBR +// mpeg-audio streams +define('GETID3_MP3_VALID_CHECK_FRAMES', 35); + + +class getid3_mp3 extends getid3_handler +{ + + public $allow_bruteforce = false; // forces getID3() to scan the file byte-by-byte and log all the valid audio frame headers - extremely slow, unrecommended, but may provide data from otherwise-unusuable files + + public function Analyze() { + $info = &$this->getid3->info; + + $initialOffset = $info['avdataoffset']; + + if (!$this->getOnlyMPEGaudioInfo($info['avdataoffset'])) { + if ($this->allow_bruteforce) { + $info['error'][] = 'Rescanning file in BruteForce mode'; + $this->getOnlyMPEGaudioInfoBruteForce($this->getid3->fp, $info); + } + } + + + if (isset($info['mpeg']['audio']['bitrate_mode'])) { + $info['audio']['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']); + } + + if (((isset($info['id3v2']['headerlength']) && ($info['avdataoffset'] > $info['id3v2']['headerlength'])) || (!isset($info['id3v2']) && ($info['avdataoffset'] > 0) && ($info['avdataoffset'] != $initialOffset)))) { + + $synchoffsetwarning = 'Unknown data before synch '; + if (isset($info['id3v2']['headerlength'])) { + $synchoffsetwarning .= '(ID3v2 header ends at '.$info['id3v2']['headerlength'].', then '.($info['avdataoffset'] - $info['id3v2']['headerlength']).' bytes garbage, '; + } elseif ($initialOffset > 0) { + $synchoffsetwarning .= '(should be at '.$initialOffset.', '; + } else { + $synchoffsetwarning .= '(should be at beginning of file, '; + } + $synchoffsetwarning .= 'synch detected at '.$info['avdataoffset'].')'; + if (isset($info['audio']['bitrate_mode']) && ($info['audio']['bitrate_mode'] == 'cbr')) { + + if (!empty($info['id3v2']['headerlength']) && (($info['avdataoffset'] - $info['id3v2']['headerlength']) == $info['mpeg']['audio']['framelength'])) { + + $synchoffsetwarning .= '. This is a known problem with some versions of LAME (3.90-3.92) DLL in CBR mode.'; + $info['audio']['codec'] = 'LAME'; + $CurrentDataLAMEversionString = 'LAME3.'; + + } elseif (empty($info['id3v2']['headerlength']) && ($info['avdataoffset'] == $info['mpeg']['audio']['framelength'])) { + + $synchoffsetwarning .= '. This is a known problem with some versions of LAME (3.90 - 3.92) DLL in CBR mode.'; + $info['audio']['codec'] = 'LAME'; + $CurrentDataLAMEversionString = 'LAME3.'; + + } + + } + $info['warning'][] = $synchoffsetwarning; + + } + + if (isset($info['mpeg']['audio']['LAME'])) { + $info['audio']['codec'] = 'LAME'; + if (!empty($info['mpeg']['audio']['LAME']['long_version'])) { + $info['audio']['encoder'] = rtrim($info['mpeg']['audio']['LAME']['long_version'], "\x00"); + } elseif (!empty($info['mpeg']['audio']['LAME']['short_version'])) { + $info['audio']['encoder'] = rtrim($info['mpeg']['audio']['LAME']['short_version'], "\x00"); + } + } + + $CurrentDataLAMEversionString = (!empty($CurrentDataLAMEversionString) ? $CurrentDataLAMEversionString : (isset($info['audio']['encoder']) ? $info['audio']['encoder'] : '')); + if (!empty($CurrentDataLAMEversionString) && (substr($CurrentDataLAMEversionString, 0, 6) == 'LAME3.') && !preg_match('[0-9\)]', substr($CurrentDataLAMEversionString, -1))) { + // a version number of LAME that does not end with a number like "LAME3.92" + // or with a closing parenthesis like "LAME3.88 (alpha)" + // or a version of LAME with the LAMEtag-not-filled-in-DLL-mode bug (3.90-3.92) + + // not sure what the actual last frame length will be, but will be less than or equal to 1441 + $PossiblyLongerLAMEversion_FrameLength = 1441; + + // Not sure what version of LAME this is - look in padding of last frame for longer version string + $PossibleLAMEversionStringOffset = $info['avdataend'] - $PossiblyLongerLAMEversion_FrameLength; + fseek($this->getid3->fp, $PossibleLAMEversionStringOffset); + $PossiblyLongerLAMEversion_Data = fread($this->getid3->fp, $PossiblyLongerLAMEversion_FrameLength); + switch (substr($CurrentDataLAMEversionString, -1)) { + case 'a': + case 'b': + // "LAME3.94a" will have a longer version string of "LAME3.94 (alpha)" for example + // need to trim off "a" to match longer string + $CurrentDataLAMEversionString = substr($CurrentDataLAMEversionString, 0, -1); + break; + } + if (($PossiblyLongerLAMEversion_String = strstr($PossiblyLongerLAMEversion_Data, $CurrentDataLAMEversionString)) !== false) { + if (substr($PossiblyLongerLAMEversion_String, 0, strlen($CurrentDataLAMEversionString)) == $CurrentDataLAMEversionString) { + $PossiblyLongerLAMEversion_NewString = substr($PossiblyLongerLAMEversion_String, 0, strspn($PossiblyLongerLAMEversion_String, 'LAME0123456789., (abcdefghijklmnopqrstuvwxyzJFSOND)')); //"LAME3.90.3" "LAME3.87 (beta 1, Sep 27 2000)" "LAME3.88 (beta)" + if (empty($info['audio']['encoder']) || (strlen($PossiblyLongerLAMEversion_NewString) > strlen($info['audio']['encoder']))) { + $info['audio']['encoder'] = $PossiblyLongerLAMEversion_NewString; + } + } + } + } + if (!empty($info['audio']['encoder'])) { + $info['audio']['encoder'] = rtrim($info['audio']['encoder'], "\x00 "); + } + + switch (isset($info['mpeg']['audio']['layer']) ? $info['mpeg']['audio']['layer'] : '') { + case 1: + case 2: + $info['audio']['dataformat'] = 'mp'.$info['mpeg']['audio']['layer']; + break; + } + if (isset($info['fileformat']) && ($info['fileformat'] == 'mp3')) { + switch ($info['audio']['dataformat']) { + case 'mp1': + case 'mp2': + case 'mp3': + $info['fileformat'] = $info['audio']['dataformat']; + break; + + default: + $info['warning'][] = 'Expecting [audio][dataformat] to be mp1/mp2/mp3 when fileformat == mp3, [audio][dataformat] actually "'.$info['audio']['dataformat'].'"'; + break; + } + } + + if (empty($info['fileformat'])) { + unset($info['fileformat']); + unset($info['audio']['bitrate_mode']); + unset($info['avdataoffset']); + unset($info['avdataend']); + return false; + } + + $info['mime_type'] = 'audio/mpeg'; + $info['audio']['lossless'] = false; + + // Calculate playtime + if (!isset($info['playtime_seconds']) && isset($info['audio']['bitrate']) && ($info['audio']['bitrate'] > 0)) { + $info['playtime_seconds'] = ($info['avdataend'] - $info['avdataoffset']) * 8 / $info['audio']['bitrate']; + } + + $info['audio']['encoder_options'] = $this->GuessEncoderOptions(); + + return true; + } + + + public function GuessEncoderOptions() { + // shortcuts + $info = &$this->getid3->info; + if (!empty($info['mpeg']['audio'])) { + $thisfile_mpeg_audio = &$info['mpeg']['audio']; + if (!empty($thisfile_mpeg_audio['LAME'])) { + $thisfile_mpeg_audio_lame = &$thisfile_mpeg_audio['LAME']; + } + } + + $encoder_options = ''; + static $NamedPresetBitrates = array(16, 24, 40, 56, 112, 128, 160, 192, 256); + + if (isset($thisfile_mpeg_audio['VBR_method']) && ($thisfile_mpeg_audio['VBR_method'] == 'Fraunhofer') && !empty($thisfile_mpeg_audio['VBR_quality'])) { + + $encoder_options = 'VBR q'.$thisfile_mpeg_audio['VBR_quality']; + + } elseif (!empty($thisfile_mpeg_audio_lame['preset_used']) && (!in_array($thisfile_mpeg_audio_lame['preset_used_id'], $NamedPresetBitrates))) { + + $encoder_options = $thisfile_mpeg_audio_lame['preset_used']; + + } elseif (!empty($thisfile_mpeg_audio_lame['vbr_quality'])) { + + static $KnownEncoderValues = array(); + if (empty($KnownEncoderValues)) { + + //$KnownEncoderValues[abrbitrate_minbitrate][vbr_quality][raw_vbr_method][raw_noise_shaping][raw_stereo_mode][ath_type][lowpass_frequency] = 'preset name'; + $KnownEncoderValues[0xFF][58][1][1][3][2][20500] = '--alt-preset insane'; // 3.90, 3.90.1, 3.92 + $KnownEncoderValues[0xFF][58][1][1][3][2][20600] = '--alt-preset insane'; // 3.90.2, 3.90.3, 3.91 + $KnownEncoderValues[0xFF][57][1][1][3][4][20500] = '--alt-preset insane'; // 3.94, 3.95 + $KnownEncoderValues['**'][78][3][2][3][2][19500] = '--alt-preset extreme'; // 3.90, 3.90.1, 3.92 + $KnownEncoderValues['**'][78][3][2][3][2][19600] = '--alt-preset extreme'; // 3.90.2, 3.91 + $KnownEncoderValues['**'][78][3][1][3][2][19600] = '--alt-preset extreme'; // 3.90.3 + $KnownEncoderValues['**'][78][4][2][3][2][19500] = '--alt-preset fast extreme'; // 3.90, 3.90.1, 3.92 + $KnownEncoderValues['**'][78][4][2][3][2][19600] = '--alt-preset fast extreme'; // 3.90.2, 3.90.3, 3.91 + $KnownEncoderValues['**'][78][3][2][3][4][19000] = '--alt-preset standard'; // 3.90, 3.90.1, 3.90.2, 3.91, 3.92 + $KnownEncoderValues['**'][78][3][1][3][4][19000] = '--alt-preset standard'; // 3.90.3 + $KnownEncoderValues['**'][78][4][2][3][4][19000] = '--alt-preset fast standard'; // 3.90, 3.90.1, 3.90.2, 3.91, 3.92 + $KnownEncoderValues['**'][78][4][1][3][4][19000] = '--alt-preset fast standard'; // 3.90.3 + $KnownEncoderValues['**'][88][4][1][3][3][19500] = '--r3mix'; // 3.90, 3.90.1, 3.92 + $KnownEncoderValues['**'][88][4][1][3][3][19600] = '--r3mix'; // 3.90.2, 3.90.3, 3.91 + $KnownEncoderValues['**'][67][4][1][3][4][18000] = '--r3mix'; // 3.94, 3.95 + $KnownEncoderValues['**'][68][3][2][3][4][18000] = '--alt-preset medium'; // 3.90.3 + $KnownEncoderValues['**'][68][4][2][3][4][18000] = '--alt-preset fast medium'; // 3.90.3 + + $KnownEncoderValues[0xFF][99][1][1][1][2][0] = '--preset studio'; // 3.90, 3.90.1, 3.90.2, 3.91, 3.92 + $KnownEncoderValues[0xFF][58][2][1][3][2][20600] = '--preset studio'; // 3.90.3, 3.93.1 + $KnownEncoderValues[0xFF][58][2][1][3][2][20500] = '--preset studio'; // 3.93 + $KnownEncoderValues[0xFF][57][2][1][3][4][20500] = '--preset studio'; // 3.94, 3.95 + $KnownEncoderValues[0xC0][88][1][1][1][2][0] = '--preset cd'; // 3.90, 3.90.1, 3.90.2, 3.91, 3.92 + $KnownEncoderValues[0xC0][58][2][2][3][2][19600] = '--preset cd'; // 3.90.3, 3.93.1 + $KnownEncoderValues[0xC0][58][2][2][3][2][19500] = '--preset cd'; // 3.93 + $KnownEncoderValues[0xC0][57][2][1][3][4][19500] = '--preset cd'; // 3.94, 3.95 + $KnownEncoderValues[0xA0][78][1][1][3][2][18000] = '--preset hifi'; // 3.90, 3.90.1, 3.90.2, 3.91, 3.92 + $KnownEncoderValues[0xA0][58][2][2][3][2][18000] = '--preset hifi'; // 3.90.3, 3.93, 3.93.1 + $KnownEncoderValues[0xA0][57][2][1][3][4][18000] = '--preset hifi'; // 3.94, 3.95 + $KnownEncoderValues[0x80][67][1][1][3][2][18000] = '--preset tape'; // 3.90, 3.90.1, 3.90.2, 3.91, 3.92 + $KnownEncoderValues[0x80][67][1][1][3][2][15000] = '--preset radio'; // 3.90, 3.90.1, 3.90.2, 3.91, 3.92 + $KnownEncoderValues[0x70][67][1][1][3][2][15000] = '--preset fm'; // 3.90, 3.90.1, 3.90.2, 3.91, 3.92 + $KnownEncoderValues[0x70][58][2][2][3][2][16000] = '--preset tape/radio/fm'; // 3.90.3, 3.93, 3.93.1 + $KnownEncoderValues[0x70][57][2][1][3][4][16000] = '--preset tape/radio/fm'; // 3.94, 3.95 + $KnownEncoderValues[0x38][58][2][2][0][2][10000] = '--preset voice'; // 3.90.3, 3.93, 3.93.1 + $KnownEncoderValues[0x38][57][2][1][0][4][15000] = '--preset voice'; // 3.94, 3.95 + $KnownEncoderValues[0x38][57][2][1][0][4][16000] = '--preset voice'; // 3.94a14 + $KnownEncoderValues[0x28][65][1][1][0][2][7500] = '--preset mw-us'; // 3.90, 3.90.1, 3.92 + $KnownEncoderValues[0x28][65][1][1][0][2][7600] = '--preset mw-us'; // 3.90.2, 3.91 + $KnownEncoderValues[0x28][58][2][2][0][2][7000] = '--preset mw-us'; // 3.90.3, 3.93, 3.93.1 + $KnownEncoderValues[0x28][57][2][1][0][4][10500] = '--preset mw-us'; // 3.94, 3.95 + $KnownEncoderValues[0x28][57][2][1][0][4][11200] = '--preset mw-us'; // 3.94a14 + $KnownEncoderValues[0x28][57][2][1][0][4][8800] = '--preset mw-us'; // 3.94a15 + $KnownEncoderValues[0x18][58][2][2][0][2][4000] = '--preset phon+/lw/mw-eu/sw'; // 3.90.3, 3.93.1 + $KnownEncoderValues[0x18][58][2][2][0][2][3900] = '--preset phon+/lw/mw-eu/sw'; // 3.93 + $KnownEncoderValues[0x18][57][2][1][0][4][5900] = '--preset phon+/lw/mw-eu/sw'; // 3.94, 3.95 + $KnownEncoderValues[0x18][57][2][1][0][4][6200] = '--preset phon+/lw/mw-eu/sw'; // 3.94a14 + $KnownEncoderValues[0x18][57][2][1][0][4][3200] = '--preset phon+/lw/mw-eu/sw'; // 3.94a15 + $KnownEncoderValues[0x10][58][2][2][0][2][3800] = '--preset phone'; // 3.90.3, 3.93.1 + $KnownEncoderValues[0x10][58][2][2][0][2][3700] = '--preset phone'; // 3.93 + $KnownEncoderValues[0x10][57][2][1][0][4][5600] = '--preset phone'; // 3.94, 3.95 + } + + if (isset($KnownEncoderValues[$thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate']][$thisfile_mpeg_audio_lame['vbr_quality']][$thisfile_mpeg_audio_lame['raw']['vbr_method']][$thisfile_mpeg_audio_lame['raw']['noise_shaping']][$thisfile_mpeg_audio_lame['raw']['stereo_mode']][$thisfile_mpeg_audio_lame['ath_type']][$thisfile_mpeg_audio_lame['lowpass_frequency']])) { + + $encoder_options = $KnownEncoderValues[$thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate']][$thisfile_mpeg_audio_lame['vbr_quality']][$thisfile_mpeg_audio_lame['raw']['vbr_method']][$thisfile_mpeg_audio_lame['raw']['noise_shaping']][$thisfile_mpeg_audio_lame['raw']['stereo_mode']][$thisfile_mpeg_audio_lame['ath_type']][$thisfile_mpeg_audio_lame['lowpass_frequency']]; + + } elseif (isset($KnownEncoderValues['**'][$thisfile_mpeg_audio_lame['vbr_quality']][$thisfile_mpeg_audio_lame['raw']['vbr_method']][$thisfile_mpeg_audio_lame['raw']['noise_shaping']][$thisfile_mpeg_audio_lame['raw']['stereo_mode']][$thisfile_mpeg_audio_lame['ath_type']][$thisfile_mpeg_audio_lame['lowpass_frequency']])) { + + $encoder_options = $KnownEncoderValues['**'][$thisfile_mpeg_audio_lame['vbr_quality']][$thisfile_mpeg_audio_lame['raw']['vbr_method']][$thisfile_mpeg_audio_lame['raw']['noise_shaping']][$thisfile_mpeg_audio_lame['raw']['stereo_mode']][$thisfile_mpeg_audio_lame['ath_type']][$thisfile_mpeg_audio_lame['lowpass_frequency']]; + + } elseif ($info['audio']['bitrate_mode'] == 'vbr') { + + // http://gabriel.mp3-tech.org/mp3infotag.html + // int Quality = (100 - 10 * gfp->VBR_q - gfp->quality)h + + + $LAME_V_value = 10 - ceil($thisfile_mpeg_audio_lame['vbr_quality'] / 10); + $LAME_q_value = 100 - $thisfile_mpeg_audio_lame['vbr_quality'] - ($LAME_V_value * 10); + $encoder_options = '-V'.$LAME_V_value.' -q'.$LAME_q_value; + + } elseif ($info['audio']['bitrate_mode'] == 'cbr') { + + $encoder_options = strtoupper($info['audio']['bitrate_mode']).ceil($info['audio']['bitrate'] / 1000); + + } else { + + $encoder_options = strtoupper($info['audio']['bitrate_mode']); + + } + + } elseif (!empty($thisfile_mpeg_audio_lame['bitrate_abr'])) { + + $encoder_options = 'ABR'.$thisfile_mpeg_audio_lame['bitrate_abr']; + + } elseif (!empty($info['audio']['bitrate'])) { + + if ($info['audio']['bitrate_mode'] == 'cbr') { + $encoder_options = strtoupper($info['audio']['bitrate_mode']).ceil($info['audio']['bitrate'] / 1000); + } else { + $encoder_options = strtoupper($info['audio']['bitrate_mode']); + } + + } + if (!empty($thisfile_mpeg_audio_lame['bitrate_min'])) { + $encoder_options .= ' -b'.$thisfile_mpeg_audio_lame['bitrate_min']; + } + + if (!empty($thisfile_mpeg_audio_lame['encoding_flags']['nogap_prev']) || !empty($thisfile_mpeg_audio_lame['encoding_flags']['nogap_next'])) { + $encoder_options .= ' --nogap'; + } + + if (!empty($thisfile_mpeg_audio_lame['lowpass_frequency'])) { + $ExplodedOptions = explode(' ', $encoder_options, 4); + if ($ExplodedOptions[0] == '--r3mix') { + $ExplodedOptions[1] = 'r3mix'; + } + switch ($ExplodedOptions[0]) { + case '--preset': + case '--alt-preset': + case '--r3mix': + if ($ExplodedOptions[1] == 'fast') { + $ExplodedOptions[1] .= ' '.$ExplodedOptions[2]; + } + switch ($ExplodedOptions[1]) { + case 'portable': + case 'medium': + case 'standard': + case 'extreme': + case 'insane': + case 'fast portable': + case 'fast medium': + case 'fast standard': + case 'fast extreme': + case 'fast insane': + case 'r3mix': + static $ExpectedLowpass = array( + 'insane|20500' => 20500, + 'insane|20600' => 20600, // 3.90.2, 3.90.3, 3.91 + 'medium|18000' => 18000, + 'fast medium|18000' => 18000, + 'extreme|19500' => 19500, // 3.90, 3.90.1, 3.92, 3.95 + 'extreme|19600' => 19600, // 3.90.2, 3.90.3, 3.91, 3.93.1 + 'fast extreme|19500' => 19500, // 3.90, 3.90.1, 3.92, 3.95 + 'fast extreme|19600' => 19600, // 3.90.2, 3.90.3, 3.91, 3.93.1 + 'standard|19000' => 19000, + 'fast standard|19000' => 19000, + 'r3mix|19500' => 19500, // 3.90, 3.90.1, 3.92 + 'r3mix|19600' => 19600, // 3.90.2, 3.90.3, 3.91 + 'r3mix|18000' => 18000, // 3.94, 3.95 + ); + if (!isset($ExpectedLowpass[$ExplodedOptions[1].'|'.$thisfile_mpeg_audio_lame['lowpass_frequency']]) && ($thisfile_mpeg_audio_lame['lowpass_frequency'] < 22050) && (round($thisfile_mpeg_audio_lame['lowpass_frequency'] / 1000) < round($thisfile_mpeg_audio['sample_rate'] / 2000))) { + $encoder_options .= ' --lowpass '.$thisfile_mpeg_audio_lame['lowpass_frequency']; + } + break; + + default: + break; + } + break; + } + } + + if (isset($thisfile_mpeg_audio_lame['raw']['source_sample_freq'])) { + if (($thisfile_mpeg_audio['sample_rate'] == 44100) && ($thisfile_mpeg_audio_lame['raw']['source_sample_freq'] != 1)) { + $encoder_options .= ' --resample 44100'; + } elseif (($thisfile_mpeg_audio['sample_rate'] == 48000) && ($thisfile_mpeg_audio_lame['raw']['source_sample_freq'] != 2)) { + $encoder_options .= ' --resample 48000'; + } elseif ($thisfile_mpeg_audio['sample_rate'] < 44100) { + switch ($thisfile_mpeg_audio_lame['raw']['source_sample_freq']) { + case 0: // <= 32000 + // may or may not be same as source frequency - ignore + break; + case 1: // 44100 + case 2: // 48000 + case 3: // 48000+ + $ExplodedOptions = explode(' ', $encoder_options, 4); + switch ($ExplodedOptions[0]) { + case '--preset': + case '--alt-preset': + switch ($ExplodedOptions[1]) { + case 'fast': + case 'portable': + case 'medium': + case 'standard': + case 'extreme': + case 'insane': + $encoder_options .= ' --resample '.$thisfile_mpeg_audio['sample_rate']; + break; + + default: + static $ExpectedResampledRate = array( + 'phon+/lw/mw-eu/sw|16000' => 16000, + 'mw-us|24000' => 24000, // 3.95 + 'mw-us|32000' => 32000, // 3.93 + 'mw-us|16000' => 16000, // 3.92 + 'phone|16000' => 16000, + 'phone|11025' => 11025, // 3.94a15 + 'radio|32000' => 32000, // 3.94a15 + 'fm/radio|32000' => 32000, // 3.92 + 'fm|32000' => 32000, // 3.90 + 'voice|32000' => 32000); + if (!isset($ExpectedResampledRate[$ExplodedOptions[1].'|'.$thisfile_mpeg_audio['sample_rate']])) { + $encoder_options .= ' --resample '.$thisfile_mpeg_audio['sample_rate']; + } + break; + } + break; + + case '--r3mix': + default: + $encoder_options .= ' --resample '.$thisfile_mpeg_audio['sample_rate']; + break; + } + break; + } + } + } + if (empty($encoder_options) && !empty($info['audio']['bitrate']) && !empty($info['audio']['bitrate_mode'])) { + //$encoder_options = strtoupper($info['audio']['bitrate_mode']).ceil($info['audio']['bitrate'] / 1000); + $encoder_options = strtoupper($info['audio']['bitrate_mode']); + } + + return $encoder_options; + } + + + public function decodeMPEGaudioHeader($offset, &$info, $recursivesearch=true, $ScanAsCBR=false, $FastMPEGheaderScan=false) { + static $MPEGaudioVersionLookup; + static $MPEGaudioLayerLookup; + static $MPEGaudioBitrateLookup; + static $MPEGaudioFrequencyLookup; + static $MPEGaudioChannelModeLookup; + static $MPEGaudioModeExtensionLookup; + static $MPEGaudioEmphasisLookup; + if (empty($MPEGaudioVersionLookup)) { + $MPEGaudioVersionLookup = self::MPEGaudioVersionArray(); + $MPEGaudioLayerLookup = self::MPEGaudioLayerArray(); + $MPEGaudioBitrateLookup = self::MPEGaudioBitrateArray(); + $MPEGaudioFrequencyLookup = self::MPEGaudioFrequencyArray(); + $MPEGaudioChannelModeLookup = self::MPEGaudioChannelModeArray(); + $MPEGaudioModeExtensionLookup = self::MPEGaudioModeExtensionArray(); + $MPEGaudioEmphasisLookup = self::MPEGaudioEmphasisArray(); + } + + if (fseek($this->getid3->fp, $offset, SEEK_SET) != 0) { + $info['error'][] = 'decodeMPEGaudioHeader() failed to seek to next offset at '.$offset; + return false; + } + //$headerstring = fread($this->getid3->fp, 1441); // worst-case max length = 32kHz @ 320kbps layer 3 = 1441 bytes/frame + $headerstring = fread($this->getid3->fp, 226); // LAME header at offset 36 + 190 bytes of Xing/LAME data + + // MP3 audio frame structure: + // $aa $aa $aa $aa [$bb $bb] $cc... + // where $aa..$aa is the four-byte mpeg-audio header (below) + // $bb $bb is the optional 2-byte CRC + // and $cc... is the audio data + + $head4 = substr($headerstring, 0, 4); + + static $MPEGaudioHeaderDecodeCache = array(); + if (isset($MPEGaudioHeaderDecodeCache[$head4])) { + $MPEGheaderRawArray = $MPEGaudioHeaderDecodeCache[$head4]; + } else { + $MPEGheaderRawArray = self::MPEGaudioHeaderDecode($head4); + $MPEGaudioHeaderDecodeCache[$head4] = $MPEGheaderRawArray; + } + + static $MPEGaudioHeaderValidCache = array(); + if (!isset($MPEGaudioHeaderValidCache[$head4])) { // Not in cache + //$MPEGaudioHeaderValidCache[$head4] = self::MPEGaudioHeaderValid($MPEGheaderRawArray, false, true); // allow badly-formatted freeformat (from LAME 3.90 - 3.93.1) + $MPEGaudioHeaderValidCache[$head4] = self::MPEGaudioHeaderValid($MPEGheaderRawArray, false, false); + } + + // shortcut + if (!isset($info['mpeg']['audio'])) { + $info['mpeg']['audio'] = array(); + } + $thisfile_mpeg_audio = &$info['mpeg']['audio']; + + + if ($MPEGaudioHeaderValidCache[$head4]) { + $thisfile_mpeg_audio['raw'] = $MPEGheaderRawArray; + } else { + $info['error'][] = 'Invalid MPEG audio header ('.getid3_lib::PrintHexBytes($head4).') at offset '.$offset; + return false; + } + + if (!$FastMPEGheaderScan) { + $thisfile_mpeg_audio['version'] = $MPEGaudioVersionLookup[$thisfile_mpeg_audio['raw']['version']]; + $thisfile_mpeg_audio['layer'] = $MPEGaudioLayerLookup[$thisfile_mpeg_audio['raw']['layer']]; + + $thisfile_mpeg_audio['channelmode'] = $MPEGaudioChannelModeLookup[$thisfile_mpeg_audio['raw']['channelmode']]; + $thisfile_mpeg_audio['channels'] = (($thisfile_mpeg_audio['channelmode'] == 'mono') ? 1 : 2); + $thisfile_mpeg_audio['sample_rate'] = $MPEGaudioFrequencyLookup[$thisfile_mpeg_audio['version']][$thisfile_mpeg_audio['raw']['sample_rate']]; + $thisfile_mpeg_audio['protection'] = !$thisfile_mpeg_audio['raw']['protection']; + $thisfile_mpeg_audio['private'] = (bool) $thisfile_mpeg_audio['raw']['private']; + $thisfile_mpeg_audio['modeextension'] = $MPEGaudioModeExtensionLookup[$thisfile_mpeg_audio['layer']][$thisfile_mpeg_audio['raw']['modeextension']]; + $thisfile_mpeg_audio['copyright'] = (bool) $thisfile_mpeg_audio['raw']['copyright']; + $thisfile_mpeg_audio['original'] = (bool) $thisfile_mpeg_audio['raw']['original']; + $thisfile_mpeg_audio['emphasis'] = $MPEGaudioEmphasisLookup[$thisfile_mpeg_audio['raw']['emphasis']]; + + $info['audio']['channels'] = $thisfile_mpeg_audio['channels']; + $info['audio']['sample_rate'] = $thisfile_mpeg_audio['sample_rate']; + + if ($thisfile_mpeg_audio['protection']) { + $thisfile_mpeg_audio['crc'] = getid3_lib::BigEndian2Int(substr($headerstring, 4, 2)); + } + } + + if ($thisfile_mpeg_audio['raw']['bitrate'] == 15) { + // http://www.hydrogenaudio.org/?act=ST&f=16&t=9682&st=0 + $info['warning'][] = 'Invalid bitrate index (15), this is a known bug in free-format MP3s encoded by LAME v3.90 - 3.93.1'; + $thisfile_mpeg_audio['raw']['bitrate'] = 0; + } + $thisfile_mpeg_audio['padding'] = (bool) $thisfile_mpeg_audio['raw']['padding']; + $thisfile_mpeg_audio['bitrate'] = $MPEGaudioBitrateLookup[$thisfile_mpeg_audio['version']][$thisfile_mpeg_audio['layer']][$thisfile_mpeg_audio['raw']['bitrate']]; + + if (($thisfile_mpeg_audio['bitrate'] == 'free') && ($offset == $info['avdataoffset'])) { + // only skip multiple frame check if free-format bitstream found at beginning of file + // otherwise is quite possibly simply corrupted data + $recursivesearch = false; + } + + // For Layer 2 there are some combinations of bitrate and mode which are not allowed. + if (!$FastMPEGheaderScan && ($thisfile_mpeg_audio['layer'] == '2')) { + + $info['audio']['dataformat'] = 'mp2'; + switch ($thisfile_mpeg_audio['channelmode']) { + + case 'mono': + if (($thisfile_mpeg_audio['bitrate'] == 'free') || ($thisfile_mpeg_audio['bitrate'] <= 192000)) { + // these are ok + } else { + $info['error'][] = $thisfile_mpeg_audio['bitrate'].'kbps not allowed in Layer 2, '.$thisfile_mpeg_audio['channelmode'].'.'; + return false; + } + break; + + case 'stereo': + case 'joint stereo': + case 'dual channel': + if (($thisfile_mpeg_audio['bitrate'] == 'free') || ($thisfile_mpeg_audio['bitrate'] == 64000) || ($thisfile_mpeg_audio['bitrate'] >= 96000)) { + // these are ok + } else { + $info['error'][] = intval(round($thisfile_mpeg_audio['bitrate'] / 1000)).'kbps not allowed in Layer 2, '.$thisfile_mpeg_audio['channelmode'].'.'; + return false; + } + break; + + } + + } + + + if ($info['audio']['sample_rate'] > 0) { + $thisfile_mpeg_audio['framelength'] = self::MPEGaudioFrameLength($thisfile_mpeg_audio['bitrate'], $thisfile_mpeg_audio['version'], $thisfile_mpeg_audio['layer'], (int) $thisfile_mpeg_audio['padding'], $info['audio']['sample_rate']); + } + + $nextframetestoffset = $offset + 1; + if ($thisfile_mpeg_audio['bitrate'] != 'free') { + + $info['audio']['bitrate'] = $thisfile_mpeg_audio['bitrate']; + + if (isset($thisfile_mpeg_audio['framelength'])) { + $nextframetestoffset = $offset + $thisfile_mpeg_audio['framelength']; + } else { + $info['error'][] = 'Frame at offset('.$offset.') is has an invalid frame length.'; + return false; + } + + } + + $ExpectedNumberOfAudioBytes = 0; + + //////////////////////////////////////////////////////////////////////////////////// + // Variable-bitrate headers + + if (substr($headerstring, 4 + 32, 4) == 'VBRI') { + // Fraunhofer VBR header is hardcoded 'VBRI' at offset 0x24 (36) + // specs taken from http://minnie.tuhs.org/pipermail/mp3encoder/2001-January/001800.html + + $thisfile_mpeg_audio['bitrate_mode'] = 'vbr'; + $thisfile_mpeg_audio['VBR_method'] = 'Fraunhofer'; + $info['audio']['codec'] = 'Fraunhofer'; + + $SideInfoData = substr($headerstring, 4 + 2, 32); + + $FraunhoferVBROffset = 36; + + $thisfile_mpeg_audio['VBR_encoder_version'] = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 4, 2)); // VbriVersion + $thisfile_mpeg_audio['VBR_encoder_delay'] = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 6, 2)); // VbriDelay + $thisfile_mpeg_audio['VBR_quality'] = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 8, 2)); // VbriQuality + $thisfile_mpeg_audio['VBR_bytes'] = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 10, 4)); // VbriStreamBytes + $thisfile_mpeg_audio['VBR_frames'] = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 14, 4)); // VbriStreamFrames + $thisfile_mpeg_audio['VBR_seek_offsets'] = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 18, 2)); // VbriTableSize + $thisfile_mpeg_audio['VBR_seek_scale'] = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 20, 2)); // VbriTableScale + $thisfile_mpeg_audio['VBR_entry_bytes'] = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 22, 2)); // VbriEntryBytes + $thisfile_mpeg_audio['VBR_entry_frames'] = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 24, 2)); // VbriEntryFrames + + $ExpectedNumberOfAudioBytes = $thisfile_mpeg_audio['VBR_bytes']; + + $previousbyteoffset = $offset; + for ($i = 0; $i < $thisfile_mpeg_audio['VBR_seek_offsets']; $i++) { + $Fraunhofer_OffsetN = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset, $thisfile_mpeg_audio['VBR_entry_bytes'])); + $FraunhoferVBROffset += $thisfile_mpeg_audio['VBR_entry_bytes']; + $thisfile_mpeg_audio['VBR_offsets_relative'][$i] = ($Fraunhofer_OffsetN * $thisfile_mpeg_audio['VBR_seek_scale']); + $thisfile_mpeg_audio['VBR_offsets_absolute'][$i] = ($Fraunhofer_OffsetN * $thisfile_mpeg_audio['VBR_seek_scale']) + $previousbyteoffset; + $previousbyteoffset += $Fraunhofer_OffsetN; + } + + + } else { + + // Xing VBR header is hardcoded 'Xing' at a offset 0x0D (13), 0x15 (21) or 0x24 (36) + // depending on MPEG layer and number of channels + + $VBRidOffset = self::XingVBRidOffset($thisfile_mpeg_audio['version'], $thisfile_mpeg_audio['channelmode']); + $SideInfoData = substr($headerstring, 4 + 2, $VBRidOffset - 4); + + if ((substr($headerstring, $VBRidOffset, strlen('Xing')) == 'Xing') || (substr($headerstring, $VBRidOffset, strlen('Info')) == 'Info')) { + // 'Xing' is traditional Xing VBR frame + // 'Info' is LAME-encoded CBR (This was done to avoid CBR files to be recognized as traditional Xing VBR files by some decoders.) + // 'Info' *can* legally be used to specify a VBR file as well, however. + + // http://www.multiweb.cz/twoinches/MP3inside.htm + //00..03 = "Xing" or "Info" + //04..07 = Flags: + // 0x01 Frames Flag set if value for number of frames in file is stored + // 0x02 Bytes Flag set if value for filesize in bytes is stored + // 0x04 TOC Flag set if values for TOC are stored + // 0x08 VBR Scale Flag set if values for VBR scale is stored + //08..11 Frames: Number of frames in file (including the first Xing/Info one) + //12..15 Bytes: File length in Bytes + //16..115 TOC (Table of Contents): + // Contains of 100 indexes (one Byte length) for easier lookup in file. Approximately solves problem with moving inside file. + // Each Byte has a value according this formula: + // (TOC[i] / 256) * fileLenInBytes + // So if song lasts eg. 240 sec. and you want to jump to 60. sec. (and file is 5 000 000 Bytes length) you can use: + // TOC[(60/240)*100] = TOC[25] + // and corresponding Byte in file is then approximately at: + // (TOC[25]/256) * 5000000 + //116..119 VBR Scale + + + // should be safe to leave this at 'vbr' and let it be overriden to 'cbr' if a CBR preset/mode is used by LAME +// if (substr($headerstring, $VBRidOffset, strlen('Info')) == 'Xing') { + $thisfile_mpeg_audio['bitrate_mode'] = 'vbr'; + $thisfile_mpeg_audio['VBR_method'] = 'Xing'; +// } else { +// $ScanAsCBR = true; +// $thisfile_mpeg_audio['bitrate_mode'] = 'cbr'; +// } + + $thisfile_mpeg_audio['xing_flags_raw'] = getid3_lib::BigEndian2Int(substr($headerstring, $VBRidOffset + 4, 4)); + + $thisfile_mpeg_audio['xing_flags']['frames'] = (bool) ($thisfile_mpeg_audio['xing_flags_raw'] & 0x00000001); + $thisfile_mpeg_audio['xing_flags']['bytes'] = (bool) ($thisfile_mpeg_audio['xing_flags_raw'] & 0x00000002); + $thisfile_mpeg_audio['xing_flags']['toc'] = (bool) ($thisfile_mpeg_audio['xing_flags_raw'] & 0x00000004); + $thisfile_mpeg_audio['xing_flags']['vbr_scale'] = (bool) ($thisfile_mpeg_audio['xing_flags_raw'] & 0x00000008); + + if ($thisfile_mpeg_audio['xing_flags']['frames']) { + $thisfile_mpeg_audio['VBR_frames'] = getid3_lib::BigEndian2Int(substr($headerstring, $VBRidOffset + 8, 4)); + //$thisfile_mpeg_audio['VBR_frames']--; // don't count header Xing/Info frame + } + if ($thisfile_mpeg_audio['xing_flags']['bytes']) { + $thisfile_mpeg_audio['VBR_bytes'] = getid3_lib::BigEndian2Int(substr($headerstring, $VBRidOffset + 12, 4)); + } + + //if (($thisfile_mpeg_audio['bitrate'] == 'free') && !empty($thisfile_mpeg_audio['VBR_frames']) && !empty($thisfile_mpeg_audio['VBR_bytes'])) { + if (!empty($thisfile_mpeg_audio['VBR_frames']) && !empty($thisfile_mpeg_audio['VBR_bytes'])) { + + $framelengthfloat = $thisfile_mpeg_audio['VBR_bytes'] / $thisfile_mpeg_audio['VBR_frames']; + + if ($thisfile_mpeg_audio['layer'] == '1') { + // BitRate = (((FrameLengthInBytes / 4) - Padding) * SampleRate) / 12 + //$info['audio']['bitrate'] = ((($framelengthfloat / 4) - intval($thisfile_mpeg_audio['padding'])) * $thisfile_mpeg_audio['sample_rate']) / 12; + $info['audio']['bitrate'] = ($framelengthfloat / 4) * $thisfile_mpeg_audio['sample_rate'] * (2 / $info['audio']['channels']) / 12; + } else { + // Bitrate = ((FrameLengthInBytes - Padding) * SampleRate) / 144 + //$info['audio']['bitrate'] = (($framelengthfloat - intval($thisfile_mpeg_audio['padding'])) * $thisfile_mpeg_audio['sample_rate']) / 144; + $info['audio']['bitrate'] = $framelengthfloat * $thisfile_mpeg_audio['sample_rate'] * (2 / $info['audio']['channels']) / 144; + } + $thisfile_mpeg_audio['framelength'] = floor($framelengthfloat); + } + + if ($thisfile_mpeg_audio['xing_flags']['toc']) { + $LAMEtocData = substr($headerstring, $VBRidOffset + 16, 100); + for ($i = 0; $i < 100; $i++) { + $thisfile_mpeg_audio['toc'][$i] = ord($LAMEtocData{$i}); + } + } + if ($thisfile_mpeg_audio['xing_flags']['vbr_scale']) { + $thisfile_mpeg_audio['VBR_scale'] = getid3_lib::BigEndian2Int(substr($headerstring, $VBRidOffset + 116, 4)); + } + + + // http://gabriel.mp3-tech.org/mp3infotag.html + if (substr($headerstring, $VBRidOffset + 120, 4) == 'LAME') { + + // shortcut + $thisfile_mpeg_audio['LAME'] = array(); + $thisfile_mpeg_audio_lame = &$thisfile_mpeg_audio['LAME']; + + + $thisfile_mpeg_audio_lame['long_version'] = substr($headerstring, $VBRidOffset + 120, 20); + $thisfile_mpeg_audio_lame['short_version'] = substr($thisfile_mpeg_audio_lame['long_version'], 0, 9); + + if ($thisfile_mpeg_audio_lame['short_version'] >= 'LAME3.90') { + + // extra 11 chars are not part of version string when LAMEtag present + unset($thisfile_mpeg_audio_lame['long_version']); + + // It the LAME tag was only introduced in LAME v3.90 + // http://www.hydrogenaudio.org/?act=ST&f=15&t=9933 + + // Offsets of various bytes in http://gabriel.mp3-tech.org/mp3infotag.html + // are assuming a 'Xing' identifier offset of 0x24, which is the case for + // MPEG-1 non-mono, but not for other combinations + $LAMEtagOffsetContant = $VBRidOffset - 0x24; + + // shortcuts + $thisfile_mpeg_audio_lame['RGAD'] = array('track'=>array(), 'album'=>array()); + $thisfile_mpeg_audio_lame_RGAD = &$thisfile_mpeg_audio_lame['RGAD']; + $thisfile_mpeg_audio_lame_RGAD_track = &$thisfile_mpeg_audio_lame_RGAD['track']; + $thisfile_mpeg_audio_lame_RGAD_album = &$thisfile_mpeg_audio_lame_RGAD['album']; + $thisfile_mpeg_audio_lame['raw'] = array(); + $thisfile_mpeg_audio_lame_raw = &$thisfile_mpeg_audio_lame['raw']; + + // byte $9B VBR Quality + // This field is there to indicate a quality level, although the scale was not precised in the original Xing specifications. + // Actually overwrites original Xing bytes + unset($thisfile_mpeg_audio['VBR_scale']); + $thisfile_mpeg_audio_lame['vbr_quality'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0x9B, 1)); + + // bytes $9C-$A4 Encoder short VersionString + $thisfile_mpeg_audio_lame['short_version'] = substr($headerstring, $LAMEtagOffsetContant + 0x9C, 9); + + // byte $A5 Info Tag revision + VBR method + $LAMEtagRevisionVBRmethod = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xA5, 1)); + + $thisfile_mpeg_audio_lame['tag_revision'] = ($LAMEtagRevisionVBRmethod & 0xF0) >> 4; + $thisfile_mpeg_audio_lame_raw['vbr_method'] = $LAMEtagRevisionVBRmethod & 0x0F; + $thisfile_mpeg_audio_lame['vbr_method'] = self::LAMEvbrMethodLookup($thisfile_mpeg_audio_lame_raw['vbr_method']); + $thisfile_mpeg_audio['bitrate_mode'] = substr($thisfile_mpeg_audio_lame['vbr_method'], 0, 3); // usually either 'cbr' or 'vbr', but truncates 'vbr-old / vbr-rh' to 'vbr' + + // byte $A6 Lowpass filter value + $thisfile_mpeg_audio_lame['lowpass_frequency'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xA6, 1)) * 100; + + // bytes $A7-$AE Replay Gain + // http://privatewww.essex.ac.uk/~djmrob/replaygain/rg_data_format.html + // bytes $A7-$AA : 32 bit floating point "Peak signal amplitude" + if ($thisfile_mpeg_audio_lame['short_version'] >= 'LAME3.94b') { + // LAME 3.94a16 and later - 9.23 fixed point + // ie 0x0059E2EE / (2^23) = 5890798 / 8388608 = 0.7022378444671630859375 + $thisfile_mpeg_audio_lame_RGAD['peak_amplitude'] = (float) ((getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xA7, 4))) / 8388608); + } else { + // LAME 3.94a15 and earlier - 32-bit floating point + // Actually 3.94a16 will fall in here too and be WRONG, but is hard to detect 3.94a16 vs 3.94a15 + $thisfile_mpeg_audio_lame_RGAD['peak_amplitude'] = getid3_lib::LittleEndian2Float(substr($headerstring, $LAMEtagOffsetContant + 0xA7, 4)); + } + if ($thisfile_mpeg_audio_lame_RGAD['peak_amplitude'] == 0) { + unset($thisfile_mpeg_audio_lame_RGAD['peak_amplitude']); + } else { + $thisfile_mpeg_audio_lame_RGAD['peak_db'] = getid3_lib::RGADamplitude2dB($thisfile_mpeg_audio_lame_RGAD['peak_amplitude']); + } + + $thisfile_mpeg_audio_lame_raw['RGAD_track'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xAB, 2)); + $thisfile_mpeg_audio_lame_raw['RGAD_album'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xAD, 2)); + + + if ($thisfile_mpeg_audio_lame_raw['RGAD_track'] != 0) { + + $thisfile_mpeg_audio_lame_RGAD_track['raw']['name'] = ($thisfile_mpeg_audio_lame_raw['RGAD_track'] & 0xE000) >> 13; + $thisfile_mpeg_audio_lame_RGAD_track['raw']['originator'] = ($thisfile_mpeg_audio_lame_raw['RGAD_track'] & 0x1C00) >> 10; + $thisfile_mpeg_audio_lame_RGAD_track['raw']['sign_bit'] = ($thisfile_mpeg_audio_lame_raw['RGAD_track'] & 0x0200) >> 9; + $thisfile_mpeg_audio_lame_RGAD_track['raw']['gain_adjust'] = $thisfile_mpeg_audio_lame_raw['RGAD_track'] & 0x01FF; + $thisfile_mpeg_audio_lame_RGAD_track['name'] = getid3_lib::RGADnameLookup($thisfile_mpeg_audio_lame_RGAD_track['raw']['name']); + $thisfile_mpeg_audio_lame_RGAD_track['originator'] = getid3_lib::RGADoriginatorLookup($thisfile_mpeg_audio_lame_RGAD_track['raw']['originator']); + $thisfile_mpeg_audio_lame_RGAD_track['gain_db'] = getid3_lib::RGADadjustmentLookup($thisfile_mpeg_audio_lame_RGAD_track['raw']['gain_adjust'], $thisfile_mpeg_audio_lame_RGAD_track['raw']['sign_bit']); + + if (!empty($thisfile_mpeg_audio_lame_RGAD['peak_amplitude'])) { + $info['replay_gain']['track']['peak'] = $thisfile_mpeg_audio_lame_RGAD['peak_amplitude']; + } + $info['replay_gain']['track']['originator'] = $thisfile_mpeg_audio_lame_RGAD_track['originator']; + $info['replay_gain']['track']['adjustment'] = $thisfile_mpeg_audio_lame_RGAD_track['gain_db']; + } else { + unset($thisfile_mpeg_audio_lame_RGAD['track']); + } + if ($thisfile_mpeg_audio_lame_raw['RGAD_album'] != 0) { + + $thisfile_mpeg_audio_lame_RGAD_album['raw']['name'] = ($thisfile_mpeg_audio_lame_raw['RGAD_album'] & 0xE000) >> 13; + $thisfile_mpeg_audio_lame_RGAD_album['raw']['originator'] = ($thisfile_mpeg_audio_lame_raw['RGAD_album'] & 0x1C00) >> 10; + $thisfile_mpeg_audio_lame_RGAD_album['raw']['sign_bit'] = ($thisfile_mpeg_audio_lame_raw['RGAD_album'] & 0x0200) >> 9; + $thisfile_mpeg_audio_lame_RGAD_album['raw']['gain_adjust'] = $thisfile_mpeg_audio_lame_raw['RGAD_album'] & 0x01FF; + $thisfile_mpeg_audio_lame_RGAD_album['name'] = getid3_lib::RGADnameLookup($thisfile_mpeg_audio_lame_RGAD_album['raw']['name']); + $thisfile_mpeg_audio_lame_RGAD_album['originator'] = getid3_lib::RGADoriginatorLookup($thisfile_mpeg_audio_lame_RGAD_album['raw']['originator']); + $thisfile_mpeg_audio_lame_RGAD_album['gain_db'] = getid3_lib::RGADadjustmentLookup($thisfile_mpeg_audio_lame_RGAD_album['raw']['gain_adjust'], $thisfile_mpeg_audio_lame_RGAD_album['raw']['sign_bit']); + + if (!empty($thisfile_mpeg_audio_lame_RGAD['peak_amplitude'])) { + $info['replay_gain']['album']['peak'] = $thisfile_mpeg_audio_lame_RGAD['peak_amplitude']; + } + $info['replay_gain']['album']['originator'] = $thisfile_mpeg_audio_lame_RGAD_album['originator']; + $info['replay_gain']['album']['adjustment'] = $thisfile_mpeg_audio_lame_RGAD_album['gain_db']; + } else { + unset($thisfile_mpeg_audio_lame_RGAD['album']); + } + if (empty($thisfile_mpeg_audio_lame_RGAD)) { + unset($thisfile_mpeg_audio_lame['RGAD']); + } + + + // byte $AF Encoding flags + ATH Type + $EncodingFlagsATHtype = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xAF, 1)); + $thisfile_mpeg_audio_lame['encoding_flags']['nspsytune'] = (bool) ($EncodingFlagsATHtype & 0x10); + $thisfile_mpeg_audio_lame['encoding_flags']['nssafejoint'] = (bool) ($EncodingFlagsATHtype & 0x20); + $thisfile_mpeg_audio_lame['encoding_flags']['nogap_next'] = (bool) ($EncodingFlagsATHtype & 0x40); + $thisfile_mpeg_audio_lame['encoding_flags']['nogap_prev'] = (bool) ($EncodingFlagsATHtype & 0x80); + $thisfile_mpeg_audio_lame['ath_type'] = $EncodingFlagsATHtype & 0x0F; + + // byte $B0 if ABR {specified bitrate} else {minimal bitrate} + $thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xB0, 1)); + if ($thisfile_mpeg_audio_lame_raw['vbr_method'] == 2) { // Average BitRate (ABR) + $thisfile_mpeg_audio_lame['bitrate_abr'] = $thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate']; + } elseif ($thisfile_mpeg_audio_lame_raw['vbr_method'] == 1) { // Constant BitRate (CBR) + // ignore + } elseif ($thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate'] > 0) { // Variable BitRate (VBR) - minimum bitrate + $thisfile_mpeg_audio_lame['bitrate_min'] = $thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate']; + } + + // bytes $B1-$B3 Encoder delays + $EncoderDelays = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xB1, 3)); + $thisfile_mpeg_audio_lame['encoder_delay'] = ($EncoderDelays & 0xFFF000) >> 12; + $thisfile_mpeg_audio_lame['end_padding'] = $EncoderDelays & 0x000FFF; + + // byte $B4 Misc + $MiscByte = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xB4, 1)); + $thisfile_mpeg_audio_lame_raw['noise_shaping'] = ($MiscByte & 0x03); + $thisfile_mpeg_audio_lame_raw['stereo_mode'] = ($MiscByte & 0x1C) >> 2; + $thisfile_mpeg_audio_lame_raw['not_optimal_quality'] = ($MiscByte & 0x20) >> 5; + $thisfile_mpeg_audio_lame_raw['source_sample_freq'] = ($MiscByte & 0xC0) >> 6; + $thisfile_mpeg_audio_lame['noise_shaping'] = $thisfile_mpeg_audio_lame_raw['noise_shaping']; + $thisfile_mpeg_audio_lame['stereo_mode'] = self::LAMEmiscStereoModeLookup($thisfile_mpeg_audio_lame_raw['stereo_mode']); + $thisfile_mpeg_audio_lame['not_optimal_quality'] = (bool) $thisfile_mpeg_audio_lame_raw['not_optimal_quality']; + $thisfile_mpeg_audio_lame['source_sample_freq'] = self::LAMEmiscSourceSampleFrequencyLookup($thisfile_mpeg_audio_lame_raw['source_sample_freq']); + + // byte $B5 MP3 Gain + $thisfile_mpeg_audio_lame_raw['mp3_gain'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xB5, 1), false, true); + $thisfile_mpeg_audio_lame['mp3_gain_db'] = (getid3_lib::RGADamplitude2dB(2) / 4) * $thisfile_mpeg_audio_lame_raw['mp3_gain']; + $thisfile_mpeg_audio_lame['mp3_gain_factor'] = pow(2, ($thisfile_mpeg_audio_lame['mp3_gain_db'] / 6)); + + // bytes $B6-$B7 Preset and surround info + $PresetSurroundBytes = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xB6, 2)); + // Reserved = ($PresetSurroundBytes & 0xC000); + $thisfile_mpeg_audio_lame_raw['surround_info'] = ($PresetSurroundBytes & 0x3800); + $thisfile_mpeg_audio_lame['surround_info'] = self::LAMEsurroundInfoLookup($thisfile_mpeg_audio_lame_raw['surround_info']); + $thisfile_mpeg_audio_lame['preset_used_id'] = ($PresetSurroundBytes & 0x07FF); + $thisfile_mpeg_audio_lame['preset_used'] = self::LAMEpresetUsedLookup($thisfile_mpeg_audio_lame); + if (!empty($thisfile_mpeg_audio_lame['preset_used_id']) && empty($thisfile_mpeg_audio_lame['preset_used'])) { + $info['warning'][] = 'Unknown LAME preset used ('.$thisfile_mpeg_audio_lame['preset_used_id'].') - please report to info@getid3.org'; + } + if (($thisfile_mpeg_audio_lame['short_version'] == 'LAME3.90.') && !empty($thisfile_mpeg_audio_lame['preset_used_id'])) { + // this may change if 3.90.4 ever comes out + $thisfile_mpeg_audio_lame['short_version'] = 'LAME3.90.3'; + } + + // bytes $B8-$BB MusicLength + $thisfile_mpeg_audio_lame['audio_bytes'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xB8, 4)); + $ExpectedNumberOfAudioBytes = (($thisfile_mpeg_audio_lame['audio_bytes'] > 0) ? $thisfile_mpeg_audio_lame['audio_bytes'] : $thisfile_mpeg_audio['VBR_bytes']); + + // bytes $BC-$BD MusicCRC + $thisfile_mpeg_audio_lame['music_crc'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xBC, 2)); + + // bytes $BE-$BF CRC-16 of Info Tag + $thisfile_mpeg_audio_lame['lame_tag_crc'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xBE, 2)); + + + // LAME CBR + if ($thisfile_mpeg_audio_lame_raw['vbr_method'] == 1) { + + $thisfile_mpeg_audio['bitrate_mode'] = 'cbr'; + $thisfile_mpeg_audio['bitrate'] = self::ClosestStandardMP3Bitrate($thisfile_mpeg_audio['bitrate']); + $info['audio']['bitrate'] = $thisfile_mpeg_audio['bitrate']; + //if (empty($thisfile_mpeg_audio['bitrate']) || (!empty($thisfile_mpeg_audio_lame['bitrate_min']) && ($thisfile_mpeg_audio_lame['bitrate_min'] != 255))) { + // $thisfile_mpeg_audio['bitrate'] = $thisfile_mpeg_audio_lame['bitrate_min']; + //} + + } + + } + } + + } else { + + // not Fraunhofer or Xing VBR methods, most likely CBR (but could be VBR with no header) + $thisfile_mpeg_audio['bitrate_mode'] = 'cbr'; + if ($recursivesearch) { + $thisfile_mpeg_audio['bitrate_mode'] = 'vbr'; + if ($this->RecursiveFrameScanning($offset, $nextframetestoffset, true)) { + $recursivesearch = false; + $thisfile_mpeg_audio['bitrate_mode'] = 'cbr'; + } + if ($thisfile_mpeg_audio['bitrate_mode'] == 'vbr') { + $info['warning'][] = 'VBR file with no VBR header. Bitrate values calculated from actual frame bitrates.'; + } + } + + } + + } + + if (($ExpectedNumberOfAudioBytes > 0) && ($ExpectedNumberOfAudioBytes != ($info['avdataend'] - $info['avdataoffset']))) { + if ($ExpectedNumberOfAudioBytes > ($info['avdataend'] - $info['avdataoffset'])) { + if (isset($info['fileformat']) && ($info['fileformat'] == 'riff')) { + // ignore, audio data is broken into chunks so will always be data "missing" + } elseif (($ExpectedNumberOfAudioBytes - ($info['avdataend'] - $info['avdataoffset'])) == 1) { + $info['warning'][] = 'Last byte of data truncated (this is a known bug in Meracl ID3 Tag Writer before v1.3.5)'; + } else { + $info['warning'][] = 'Probable truncated file: expecting '.$ExpectedNumberOfAudioBytes.' bytes of audio data, only found '.($info['avdataend'] - $info['avdataoffset']).' (short by '.($ExpectedNumberOfAudioBytes - ($info['avdataend'] - $info['avdataoffset'])).' bytes)'; + } + } else { + if ((($info['avdataend'] - $info['avdataoffset']) - $ExpectedNumberOfAudioBytes) == 1) { + // $prenullbytefileoffset = ftell($this->getid3->fp); + // fseek($this->getid3->fp, $info['avdataend'], SEEK_SET); + // $PossibleNullByte = fread($this->getid3->fp, 1); + // fseek($this->getid3->fp, $prenullbytefileoffset, SEEK_SET); + // if ($PossibleNullByte === "\x00") { + $info['avdataend']--; + // $info['warning'][] = 'Extra null byte at end of MP3 data assumed to be RIFF padding and therefore ignored'; + // } else { + // $info['warning'][] = 'Too much data in file: expecting '.$ExpectedNumberOfAudioBytes.' bytes of audio data, found '.($info['avdataend'] - $info['avdataoffset']).' ('.(($info['avdataend'] - $info['avdataoffset']) - $ExpectedNumberOfAudioBytes).' bytes too many)'; + // } + } else { + $info['warning'][] = 'Too much data in file: expecting '.$ExpectedNumberOfAudioBytes.' bytes of audio data, found '.($info['avdataend'] - $info['avdataoffset']).' ('.(($info['avdataend'] - $info['avdataoffset']) - $ExpectedNumberOfAudioBytes).' bytes too many)'; + } + } + } + + if (($thisfile_mpeg_audio['bitrate'] == 'free') && empty($info['audio']['bitrate'])) { + if (($offset == $info['avdataoffset']) && empty($thisfile_mpeg_audio['VBR_frames'])) { + $framebytelength = $this->FreeFormatFrameLength($offset, true); + if ($framebytelength > 0) { + $thisfile_mpeg_audio['framelength'] = $framebytelength; + if ($thisfile_mpeg_audio['layer'] == '1') { + // BitRate = (((FrameLengthInBytes / 4) - Padding) * SampleRate) / 12 + $info['audio']['bitrate'] = ((($framebytelength / 4) - intval($thisfile_mpeg_audio['padding'])) * $thisfile_mpeg_audio['sample_rate']) / 12; + } else { + // Bitrate = ((FrameLengthInBytes - Padding) * SampleRate) / 144 + $info['audio']['bitrate'] = (($framebytelength - intval($thisfile_mpeg_audio['padding'])) * $thisfile_mpeg_audio['sample_rate']) / 144; + } + } else { + $info['error'][] = 'Error calculating frame length of free-format MP3 without Xing/LAME header'; + } + } + } + + if (isset($thisfile_mpeg_audio['VBR_frames']) ? $thisfile_mpeg_audio['VBR_frames'] : '') { + switch ($thisfile_mpeg_audio['bitrate_mode']) { + case 'vbr': + case 'abr': + $bytes_per_frame = 1152; + if (($thisfile_mpeg_audio['version'] == '1') && ($thisfile_mpeg_audio['layer'] == 1)) { + $bytes_per_frame = 384; + } elseif ((($thisfile_mpeg_audio['version'] == '2') || ($thisfile_mpeg_audio['version'] == '2.5')) && ($thisfile_mpeg_audio['layer'] == 3)) { + $bytes_per_frame = 576; + } + $thisfile_mpeg_audio['VBR_bitrate'] = (isset($thisfile_mpeg_audio['VBR_bytes']) ? (($thisfile_mpeg_audio['VBR_bytes'] / $thisfile_mpeg_audio['VBR_frames']) * 8) * ($info['audio']['sample_rate'] / $bytes_per_frame) : 0); + if ($thisfile_mpeg_audio['VBR_bitrate'] > 0) { + $info['audio']['bitrate'] = $thisfile_mpeg_audio['VBR_bitrate']; + $thisfile_mpeg_audio['bitrate'] = $thisfile_mpeg_audio['VBR_bitrate']; // to avoid confusion + } + break; + } + } + + // End variable-bitrate headers + //////////////////////////////////////////////////////////////////////////////////// + + if ($recursivesearch) { + + if (!$this->RecursiveFrameScanning($offset, $nextframetestoffset, $ScanAsCBR)) { + return false; + } + + } + + + //if (false) { + // // experimental side info parsing section - not returning anything useful yet + // + // $SideInfoBitstream = getid3_lib::BigEndian2Bin($SideInfoData); + // $SideInfoOffset = 0; + // + // if ($thisfile_mpeg_audio['version'] == '1') { + // if ($thisfile_mpeg_audio['channelmode'] == 'mono') { + // // MPEG-1 (mono) + // $thisfile_mpeg_audio['side_info']['main_data_begin'] = substr($SideInfoBitstream, $SideInfoOffset, 9); + // $SideInfoOffset += 9; + // $SideInfoOffset += 5; + // } else { + // // MPEG-1 (stereo, joint-stereo, dual-channel) + // $thisfile_mpeg_audio['side_info']['main_data_begin'] = substr($SideInfoBitstream, $SideInfoOffset, 9); + // $SideInfoOffset += 9; + // $SideInfoOffset += 3; + // } + // } else { // 2 or 2.5 + // if ($thisfile_mpeg_audio['channelmode'] == 'mono') { + // // MPEG-2, MPEG-2.5 (mono) + // $thisfile_mpeg_audio['side_info']['main_data_begin'] = substr($SideInfoBitstream, $SideInfoOffset, 8); + // $SideInfoOffset += 8; + // $SideInfoOffset += 1; + // } else { + // // MPEG-2, MPEG-2.5 (stereo, joint-stereo, dual-channel) + // $thisfile_mpeg_audio['side_info']['main_data_begin'] = substr($SideInfoBitstream, $SideInfoOffset, 8); + // $SideInfoOffset += 8; + // $SideInfoOffset += 2; + // } + // } + // + // if ($thisfile_mpeg_audio['version'] == '1') { + // for ($channel = 0; $channel < $info['audio']['channels']; $channel++) { + // for ($scfsi_band = 0; $scfsi_band < 4; $scfsi_band++) { + // $thisfile_mpeg_audio['scfsi'][$channel][$scfsi_band] = substr($SideInfoBitstream, $SideInfoOffset, 1); + // $SideInfoOffset += 2; + // } + // } + // } + // for ($granule = 0; $granule < (($thisfile_mpeg_audio['version'] == '1') ? 2 : 1); $granule++) { + // for ($channel = 0; $channel < $info['audio']['channels']; $channel++) { + // $thisfile_mpeg_audio['part2_3_length'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 12); + // $SideInfoOffset += 12; + // $thisfile_mpeg_audio['big_values'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 9); + // $SideInfoOffset += 9; + // $thisfile_mpeg_audio['global_gain'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 8); + // $SideInfoOffset += 8; + // if ($thisfile_mpeg_audio['version'] == '1') { + // $thisfile_mpeg_audio['scalefac_compress'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 4); + // $SideInfoOffset += 4; + // } else { + // $thisfile_mpeg_audio['scalefac_compress'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 9); + // $SideInfoOffset += 9; + // } + // $thisfile_mpeg_audio['window_switching_flag'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 1); + // $SideInfoOffset += 1; + // + // if ($thisfile_mpeg_audio['window_switching_flag'][$granule][$channel] == '1') { + // + // $thisfile_mpeg_audio['block_type'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 2); + // $SideInfoOffset += 2; + // $thisfile_mpeg_audio['mixed_block_flag'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 1); + // $SideInfoOffset += 1; + // + // for ($region = 0; $region < 2; $region++) { + // $thisfile_mpeg_audio['table_select'][$granule][$channel][$region] = substr($SideInfoBitstream, $SideInfoOffset, 5); + // $SideInfoOffset += 5; + // } + // $thisfile_mpeg_audio['table_select'][$granule][$channel][2] = 0; + // + // for ($window = 0; $window < 3; $window++) { + // $thisfile_mpeg_audio['subblock_gain'][$granule][$channel][$window] = substr($SideInfoBitstream, $SideInfoOffset, 3); + // $SideInfoOffset += 3; + // } + // + // } else { + // + // for ($region = 0; $region < 3; $region++) { + // $thisfile_mpeg_audio['table_select'][$granule][$channel][$region] = substr($SideInfoBitstream, $SideInfoOffset, 5); + // $SideInfoOffset += 5; + // } + // + // $thisfile_mpeg_audio['region0_count'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 4); + // $SideInfoOffset += 4; + // $thisfile_mpeg_audio['region1_count'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 3); + // $SideInfoOffset += 3; + // $thisfile_mpeg_audio['block_type'][$granule][$channel] = 0; + // } + // + // if ($thisfile_mpeg_audio['version'] == '1') { + // $thisfile_mpeg_audio['preflag'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 1); + // $SideInfoOffset += 1; + // } + // $thisfile_mpeg_audio['scalefac_scale'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 1); + // $SideInfoOffset += 1; + // $thisfile_mpeg_audio['count1table_select'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 1); + // $SideInfoOffset += 1; + // } + // } + //} + + return true; + } + + public function RecursiveFrameScanning(&$offset, &$nextframetestoffset, $ScanAsCBR) { + $info = &$this->getid3->info; + $firstframetestarray = array('error'=>'', 'warning'=>'', 'avdataend'=>$info['avdataend'], 'avdataoffset'=>$info['avdataoffset']); + $this->decodeMPEGaudioHeader($offset, $firstframetestarray, false); + + for ($i = 0; $i < GETID3_MP3_VALID_CHECK_FRAMES; $i++) { + // check next GETID3_MP3_VALID_CHECK_FRAMES frames for validity, to make sure we haven't run across a false synch + if (($nextframetestoffset + 4) >= $info['avdataend']) { + // end of file + return true; + } + + $nextframetestarray = array('error'=>'', 'warning'=>'', 'avdataend'=>$info['avdataend'], 'avdataoffset'=>$info['avdataoffset']); + if ($this->decodeMPEGaudioHeader($nextframetestoffset, $nextframetestarray, false)) { + if ($ScanAsCBR) { + // force CBR mode, used for trying to pick out invalid audio streams with valid(?) VBR headers, or VBR streams with no VBR header + if (!isset($nextframetestarray['mpeg']['audio']['bitrate']) || !isset($firstframetestarray['mpeg']['audio']['bitrate']) || ($nextframetestarray['mpeg']['audio']['bitrate'] != $firstframetestarray['mpeg']['audio']['bitrate'])) { + return false; + } + } + + + // next frame is OK, get ready to check the one after that + if (isset($nextframetestarray['mpeg']['audio']['framelength']) && ($nextframetestarray['mpeg']['audio']['framelength'] > 0)) { + $nextframetestoffset += $nextframetestarray['mpeg']['audio']['framelength']; + } else { + $info['error'][] = 'Frame at offset ('.$offset.') is has an invalid frame length.'; + return false; + } + + } elseif (!empty($firstframetestarray['mpeg']['audio']['framelength']) && (($nextframetestoffset + $firstframetestarray['mpeg']['audio']['framelength']) > $info['avdataend'])) { + + // it's not the end of the file, but there's not enough data left for another frame, so assume it's garbage/padding and return OK + return true; + + } else { + + // next frame is not valid, note the error and fail, so scanning can contiue for a valid frame sequence + $info['warning'][] = 'Frame at offset ('.$offset.') is valid, but the next one at ('.$nextframetestoffset.') is not.'; + + return false; + } + } + return true; + } + + public function FreeFormatFrameLength($offset, $deepscan=false) { + $info = &$this->getid3->info; + + fseek($this->getid3->fp, $offset, SEEK_SET); + $MPEGaudioData = fread($this->getid3->fp, 32768); + + $SyncPattern1 = substr($MPEGaudioData, 0, 4); + // may be different pattern due to padding + $SyncPattern2 = $SyncPattern1{0}.$SyncPattern1{1}.chr(ord($SyncPattern1{2}) | 0x02).$SyncPattern1{3}; + if ($SyncPattern2 === $SyncPattern1) { + $SyncPattern2 = $SyncPattern1{0}.$SyncPattern1{1}.chr(ord($SyncPattern1{2}) & 0xFD).$SyncPattern1{3}; + } + + $framelength = false; + $framelength1 = strpos($MPEGaudioData, $SyncPattern1, 4); + $framelength2 = strpos($MPEGaudioData, $SyncPattern2, 4); + if ($framelength1 > 4) { + $framelength = $framelength1; + } + if (($framelength2 > 4) && ($framelength2 < $framelength1)) { + $framelength = $framelength2; + } + if (!$framelength) { + + // LAME 3.88 has a different value for modeextension on the first frame vs the rest + $framelength1 = strpos($MPEGaudioData, substr($SyncPattern1, 0, 3), 4); + $framelength2 = strpos($MPEGaudioData, substr($SyncPattern2, 0, 3), 4); + + if ($framelength1 > 4) { + $framelength = $framelength1; + } + if (($framelength2 > 4) && ($framelength2 < $framelength1)) { + $framelength = $framelength2; + } + if (!$framelength) { + $info['error'][] = 'Cannot find next free-format synch pattern ('.getid3_lib::PrintHexBytes($SyncPattern1).' or '.getid3_lib::PrintHexBytes($SyncPattern2).') after offset '.$offset; + return false; + } else { + $info['warning'][] = 'ModeExtension varies between first frame and other frames (known free-format issue in LAME 3.88)'; + $info['audio']['codec'] = 'LAME'; + $info['audio']['encoder'] = 'LAME3.88'; + $SyncPattern1 = substr($SyncPattern1, 0, 3); + $SyncPattern2 = substr($SyncPattern2, 0, 3); + } + } + + if ($deepscan) { + + $ActualFrameLengthValues = array(); + $nextoffset = $offset + $framelength; + while ($nextoffset < ($info['avdataend'] - 6)) { + fseek($this->getid3->fp, $nextoffset - 1, SEEK_SET); + $NextSyncPattern = fread($this->getid3->fp, 6); + if ((substr($NextSyncPattern, 1, strlen($SyncPattern1)) == $SyncPattern1) || (substr($NextSyncPattern, 1, strlen($SyncPattern2)) == $SyncPattern2)) { + // good - found where expected + $ActualFrameLengthValues[] = $framelength; + } elseif ((substr($NextSyncPattern, 0, strlen($SyncPattern1)) == $SyncPattern1) || (substr($NextSyncPattern, 0, strlen($SyncPattern2)) == $SyncPattern2)) { + // ok - found one byte earlier than expected (last frame wasn't padded, first frame was) + $ActualFrameLengthValues[] = ($framelength - 1); + $nextoffset--; + } elseif ((substr($NextSyncPattern, 2, strlen($SyncPattern1)) == $SyncPattern1) || (substr($NextSyncPattern, 2, strlen($SyncPattern2)) == $SyncPattern2)) { + // ok - found one byte later than expected (last frame was padded, first frame wasn't) + $ActualFrameLengthValues[] = ($framelength + 1); + $nextoffset++; + } else { + $info['error'][] = 'Did not find expected free-format sync pattern at offset '.$nextoffset; + return false; + } + $nextoffset += $framelength; + } + if (count($ActualFrameLengthValues) > 0) { + $framelength = intval(round(array_sum($ActualFrameLengthValues) / count($ActualFrameLengthValues))); + } + } + return $framelength; + } + + public function getOnlyMPEGaudioInfoBruteForce() { + $MPEGaudioHeaderDecodeCache = array(); + $MPEGaudioHeaderValidCache = array(); + $MPEGaudioHeaderLengthCache = array(); + $MPEGaudioVersionLookup = self::MPEGaudioVersionArray(); + $MPEGaudioLayerLookup = self::MPEGaudioLayerArray(); + $MPEGaudioBitrateLookup = self::MPEGaudioBitrateArray(); + $MPEGaudioFrequencyLookup = self::MPEGaudioFrequencyArray(); + $MPEGaudioChannelModeLookup = self::MPEGaudioChannelModeArray(); + $MPEGaudioModeExtensionLookup = self::MPEGaudioModeExtensionArray(); + $MPEGaudioEmphasisLookup = self::MPEGaudioEmphasisArray(); + $LongMPEGversionLookup = array(); + $LongMPEGlayerLookup = array(); + $LongMPEGbitrateLookup = array(); + $LongMPEGpaddingLookup = array(); + $LongMPEGfrequencyLookup = array(); + $Distribution['bitrate'] = array(); + $Distribution['frequency'] = array(); + $Distribution['layer'] = array(); + $Distribution['version'] = array(); + $Distribution['padding'] = array(); + + $info = &$this->getid3->info; + fseek($this->getid3->fp, $info['avdataoffset'], SEEK_SET); + + $max_frames_scan = 5000; + $frames_scanned = 0; + + $previousvalidframe = $info['avdataoffset']; + while (ftell($this->getid3->fp) < $info['avdataend']) { + set_time_limit(30); + $head4 = fread($this->getid3->fp, 4); + if (strlen($head4) < 4) { + break; + } + if ($head4{0} != "\xFF") { + for ($i = 1; $i < 4; $i++) { + if ($head4{$i} == "\xFF") { + fseek($this->getid3->fp, $i - 4, SEEK_CUR); + continue 2; + } + } + continue; + } + if (!isset($MPEGaudioHeaderDecodeCache[$head4])) { + $MPEGaudioHeaderDecodeCache[$head4] = self::MPEGaudioHeaderDecode($head4); + } + if (!isset($MPEGaudioHeaderValidCache[$head4])) { + $MPEGaudioHeaderValidCache[$head4] = self::MPEGaudioHeaderValid($MPEGaudioHeaderDecodeCache[$head4], false, false); + } + if ($MPEGaudioHeaderValidCache[$head4]) { + + if (!isset($MPEGaudioHeaderLengthCache[$head4])) { + $LongMPEGversionLookup[$head4] = $MPEGaudioVersionLookup[$MPEGaudioHeaderDecodeCache[$head4]['version']]; + $LongMPEGlayerLookup[$head4] = $MPEGaudioLayerLookup[$MPEGaudioHeaderDecodeCache[$head4]['layer']]; + $LongMPEGbitrateLookup[$head4] = $MPEGaudioBitrateLookup[$LongMPEGversionLookup[$head4]][$LongMPEGlayerLookup[$head4]][$MPEGaudioHeaderDecodeCache[$head4]['bitrate']]; + $LongMPEGpaddingLookup[$head4] = (bool) $MPEGaudioHeaderDecodeCache[$head4]['padding']; + $LongMPEGfrequencyLookup[$head4] = $MPEGaudioFrequencyLookup[$LongMPEGversionLookup[$head4]][$MPEGaudioHeaderDecodeCache[$head4]['sample_rate']]; + $MPEGaudioHeaderLengthCache[$head4] = self::MPEGaudioFrameLength( + $LongMPEGbitrateLookup[$head4], + $LongMPEGversionLookup[$head4], + $LongMPEGlayerLookup[$head4], + $LongMPEGpaddingLookup[$head4], + $LongMPEGfrequencyLookup[$head4]); + } + if ($MPEGaudioHeaderLengthCache[$head4] > 4) { + $WhereWeWere = ftell($this->getid3->fp); + fseek($this->getid3->fp, $MPEGaudioHeaderLengthCache[$head4] - 4, SEEK_CUR); + $next4 = fread($this->getid3->fp, 4); + if ($next4{0} == "\xFF") { + if (!isset($MPEGaudioHeaderDecodeCache[$next4])) { + $MPEGaudioHeaderDecodeCache[$next4] = self::MPEGaudioHeaderDecode($next4); + } + if (!isset($MPEGaudioHeaderValidCache[$next4])) { + $MPEGaudioHeaderValidCache[$next4] = self::MPEGaudioHeaderValid($MPEGaudioHeaderDecodeCache[$next4], false, false); + } + if ($MPEGaudioHeaderValidCache[$next4]) { + fseek($this->getid3->fp, -4, SEEK_CUR); + + getid3_lib::safe_inc($Distribution['bitrate'][$LongMPEGbitrateLookup[$head4]]); + getid3_lib::safe_inc($Distribution['layer'][$LongMPEGlayerLookup[$head4]]); + getid3_lib::safe_inc($Distribution['version'][$LongMPEGversionLookup[$head4]]); + getid3_lib::safe_inc($Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])]); + getid3_lib::safe_inc($Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]]); + if ($max_frames_scan && (++$frames_scanned >= $max_frames_scan)) { + $pct_data_scanned = (ftell($this->getid3->fp) - $info['avdataoffset']) / ($info['avdataend'] - $info['avdataoffset']); + $info['warning'][] = 'too many MPEG audio frames to scan, only scanned first '.$max_frames_scan.' frames ('.number_format($pct_data_scanned * 100, 1).'% of file) and extrapolated distribution, playtime and bitrate may be incorrect.'; + foreach ($Distribution as $key1 => $value1) { + foreach ($value1 as $key2 => $value2) { + $Distribution[$key1][$key2] = round($value2 / $pct_data_scanned); + } + } + break; + } + continue; + } + } + unset($next4); + fseek($this->getid3->fp, $WhereWeWere - 3, SEEK_SET); + } + + } + } + foreach ($Distribution as $key => $value) { + ksort($Distribution[$key], SORT_NUMERIC); + } + ksort($Distribution['version'], SORT_STRING); + $info['mpeg']['audio']['bitrate_distribution'] = $Distribution['bitrate']; + $info['mpeg']['audio']['frequency_distribution'] = $Distribution['frequency']; + $info['mpeg']['audio']['layer_distribution'] = $Distribution['layer']; + $info['mpeg']['audio']['version_distribution'] = $Distribution['version']; + $info['mpeg']['audio']['padding_distribution'] = $Distribution['padding']; + if (count($Distribution['version']) > 1) { + $info['error'][] = 'Corrupt file - more than one MPEG version detected'; + } + if (count($Distribution['layer']) > 1) { + $info['error'][] = 'Corrupt file - more than one MPEG layer detected'; + } + if (count($Distribution['frequency']) > 1) { + $info['error'][] = 'Corrupt file - more than one MPEG sample rate detected'; + } + + + $bittotal = 0; + foreach ($Distribution['bitrate'] as $bitratevalue => $bitratecount) { + if ($bitratevalue != 'free') { + $bittotal += ($bitratevalue * $bitratecount); + } + } + $info['mpeg']['audio']['frame_count'] = array_sum($Distribution['bitrate']); + if ($info['mpeg']['audio']['frame_count'] == 0) { + $info['error'][] = 'no MPEG audio frames found'; + return false; + } + $info['mpeg']['audio']['bitrate'] = ($bittotal / $info['mpeg']['audio']['frame_count']); + $info['mpeg']['audio']['bitrate_mode'] = ((count($Distribution['bitrate']) > 0) ? 'vbr' : 'cbr'); + $info['mpeg']['audio']['sample_rate'] = getid3_lib::array_max($Distribution['frequency'], true); + + $info['audio']['bitrate'] = $info['mpeg']['audio']['bitrate']; + $info['audio']['bitrate_mode'] = $info['mpeg']['audio']['bitrate_mode']; + $info['audio']['sample_rate'] = $info['mpeg']['audio']['sample_rate']; + $info['audio']['dataformat'] = 'mp'.getid3_lib::array_max($Distribution['layer'], true); + $info['fileformat'] = $info['audio']['dataformat']; + + return true; + } + + + public function getOnlyMPEGaudioInfo($avdataoffset, $BitrateHistogram=false) { + // looks for synch, decodes MPEG audio header + + $info = &$this->getid3->info; + + static $MPEGaudioVersionLookup; + static $MPEGaudioLayerLookup; + static $MPEGaudioBitrateLookup; + if (empty($MPEGaudioVersionLookup)) { + $MPEGaudioVersionLookup = self::MPEGaudioVersionArray(); + $MPEGaudioLayerLookup = self::MPEGaudioLayerArray(); + $MPEGaudioBitrateLookup = self::MPEGaudioBitrateArray(); + + } + + fseek($this->getid3->fp, $avdataoffset, SEEK_SET); + $sync_seek_buffer_size = min(128 * 1024, $info['avdataend'] - $avdataoffset); + if ($sync_seek_buffer_size <= 0) { + $info['error'][] = 'Invalid $sync_seek_buffer_size at offset '.$avdataoffset; + return false; + } + $header = fread($this->getid3->fp, $sync_seek_buffer_size); + $sync_seek_buffer_size = strlen($header); + $SynchSeekOffset = 0; + while ($SynchSeekOffset < $sync_seek_buffer_size) { + if ((($avdataoffset + $SynchSeekOffset) < $info['avdataend']) && !feof($this->getid3->fp)) { + + if ($SynchSeekOffset > $sync_seek_buffer_size) { + // if a synch's not found within the first 128k bytes, then give up + $info['error'][] = 'Could not find valid MPEG audio synch within the first '.round($sync_seek_buffer_size / 1024).'kB'; + if (isset($info['audio']['bitrate'])) { + unset($info['audio']['bitrate']); + } + if (isset($info['mpeg']['audio'])) { + unset($info['mpeg']['audio']); + } + if (empty($info['mpeg'])) { + unset($info['mpeg']); + } + return false; + + } elseif (feof($this->getid3->fp)) { + + $info['error'][] = 'Could not find valid MPEG audio synch before end of file'; + if (isset($info['audio']['bitrate'])) { + unset($info['audio']['bitrate']); + } + if (isset($info['mpeg']['audio'])) { + unset($info['mpeg']['audio']); + } + if (isset($info['mpeg']) && (!is_array($info['mpeg']) || (count($info['mpeg']) == 0))) { + unset($info['mpeg']); + } + return false; + } + } + + if (($SynchSeekOffset + 1) >= strlen($header)) { + $info['error'][] = 'Could not find valid MPEG synch before end of file'; + return false; + } + + if (($header{$SynchSeekOffset} == "\xFF") && ($header{($SynchSeekOffset + 1)} > "\xE0")) { // synch detected + if (!isset($FirstFrameThisfileInfo) && !isset($info['mpeg']['audio'])) { + $FirstFrameThisfileInfo = $info; + $FirstFrameAVDataOffset = $avdataoffset + $SynchSeekOffset; + if (!$this->decodeMPEGaudioHeader($FirstFrameAVDataOffset, $FirstFrameThisfileInfo, false)) { + // if this is the first valid MPEG-audio frame, save it in case it's a VBR header frame and there's + // garbage between this frame and a valid sequence of MPEG-audio frames, to be restored below + unset($FirstFrameThisfileInfo); + } + } + + $dummy = $info; // only overwrite real data if valid header found + if ($this->decodeMPEGaudioHeader($avdataoffset + $SynchSeekOffset, $dummy, true)) { + $info = $dummy; + $info['avdataoffset'] = $avdataoffset + $SynchSeekOffset; + switch (isset($info['fileformat']) ? $info['fileformat'] : '') { + case '': + case 'id3': + case 'ape': + case 'mp3': + $info['fileformat'] = 'mp3'; + $info['audio']['dataformat'] = 'mp3'; + break; + } + if (isset($FirstFrameThisfileInfo['mpeg']['audio']['bitrate_mode']) && ($FirstFrameThisfileInfo['mpeg']['audio']['bitrate_mode'] == 'vbr')) { + if (!(abs($info['audio']['bitrate'] - $FirstFrameThisfileInfo['audio']['bitrate']) <= 1)) { + // If there is garbage data between a valid VBR header frame and a sequence + // of valid MPEG-audio frames the VBR data is no longer discarded. + $info = $FirstFrameThisfileInfo; + $info['avdataoffset'] = $FirstFrameAVDataOffset; + $info['fileformat'] = 'mp3'; + $info['audio']['dataformat'] = 'mp3'; + $dummy = $info; + unset($dummy['mpeg']['audio']); + $GarbageOffsetStart = $FirstFrameAVDataOffset + $FirstFrameThisfileInfo['mpeg']['audio']['framelength']; + $GarbageOffsetEnd = $avdataoffset + $SynchSeekOffset; + if ($this->decodeMPEGaudioHeader($GarbageOffsetEnd, $dummy, true, true)) { + $info = $dummy; + $info['avdataoffset'] = $GarbageOffsetEnd; + $info['warning'][] = 'apparently-valid VBR header not used because could not find '.GETID3_MP3_VALID_CHECK_FRAMES.' consecutive MPEG-audio frames immediately after VBR header (garbage data for '.($GarbageOffsetEnd - $GarbageOffsetStart).' bytes between '.$GarbageOffsetStart.' and '.$GarbageOffsetEnd.'), but did find valid CBR stream starting at '.$GarbageOffsetEnd; + } else { + $info['warning'][] = 'using data from VBR header even though could not find '.GETID3_MP3_VALID_CHECK_FRAMES.' consecutive MPEG-audio frames immediately after VBR header (garbage data for '.($GarbageOffsetEnd - $GarbageOffsetStart).' bytes between '.$GarbageOffsetStart.' and '.$GarbageOffsetEnd.')'; + } + } + } + if (isset($info['mpeg']['audio']['bitrate_mode']) && ($info['mpeg']['audio']['bitrate_mode'] == 'vbr') && !isset($info['mpeg']['audio']['VBR_method'])) { + // VBR file with no VBR header + $BitrateHistogram = true; + } + + if ($BitrateHistogram) { + + $info['mpeg']['audio']['stereo_distribution'] = array('stereo'=>0, 'joint stereo'=>0, 'dual channel'=>0, 'mono'=>0); + $info['mpeg']['audio']['version_distribution'] = array('1'=>0, '2'=>0, '2.5'=>0); + + if ($info['mpeg']['audio']['version'] == '1') { + if ($info['mpeg']['audio']['layer'] == 3) { + $info['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32000=>0, 40000=>0, 48000=>0, 56000=>0, 64000=>0, 80000=>0, 96000=>0, 112000=>0, 128000=>0, 160000=>0, 192000=>0, 224000=>0, 256000=>0, 320000=>0); + } elseif ($info['mpeg']['audio']['layer'] == 2) { + $info['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32000=>0, 48000=>0, 56000=>0, 64000=>0, 80000=>0, 96000=>0, 112000=>0, 128000=>0, 160000=>0, 192000=>0, 224000=>0, 256000=>0, 320000=>0, 384000=>0); + } elseif ($info['mpeg']['audio']['layer'] == 1) { + $info['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32000=>0, 64000=>0, 96000=>0, 128000=>0, 160000=>0, 192000=>0, 224000=>0, 256000=>0, 288000=>0, 320000=>0, 352000=>0, 384000=>0, 416000=>0, 448000=>0); + } + } elseif ($info['mpeg']['audio']['layer'] == 1) { + $info['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32000=>0, 48000=>0, 56000=>0, 64000=>0, 80000=>0, 96000=>0, 112000=>0, 128000=>0, 144000=>0, 160000=>0, 176000=>0, 192000=>0, 224000=>0, 256000=>0); + } else { + $info['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 8000=>0, 16000=>0, 24000=>0, 32000=>0, 40000=>0, 48000=>0, 56000=>0, 64000=>0, 80000=>0, 96000=>0, 112000=>0, 128000=>0, 144000=>0, 160000=>0); + } + + $dummy = array('error'=>$info['error'], 'warning'=>$info['warning'], 'avdataend'=>$info['avdataend'], 'avdataoffset'=>$info['avdataoffset']); + $synchstartoffset = $info['avdataoffset']; + fseek($this->getid3->fp, $info['avdataoffset'], SEEK_SET); + + // you can play with these numbers: + $max_frames_scan = 50000; + $max_scan_segments = 10; + + // don't play with these numbers: + $FastMode = false; + $SynchErrorsFound = 0; + $frames_scanned = 0; + $this_scan_segment = 0; + $frames_scan_per_segment = ceil($max_frames_scan / $max_scan_segments); + $pct_data_scanned = 0; + for ($current_segment = 0; $current_segment < $max_scan_segments; $current_segment++) { + $frames_scanned_this_segment = 0; + if (ftell($this->getid3->fp) >= $info['avdataend']) { + break; + } + $scan_start_offset[$current_segment] = max(ftell($this->getid3->fp), $info['avdataoffset'] + round($current_segment * (($info['avdataend'] - $info['avdataoffset']) / $max_scan_segments))); + if ($current_segment > 0) { + fseek($this->getid3->fp, $scan_start_offset[$current_segment], SEEK_SET); + $buffer_4k = fread($this->getid3->fp, 4096); + for ($j = 0; $j < (strlen($buffer_4k) - 4); $j++) { + if (($buffer_4k{$j} == "\xFF") && ($buffer_4k{($j + 1)} > "\xE0")) { // synch detected + if ($this->decodeMPEGaudioHeader($scan_start_offset[$current_segment] + $j, $dummy, false, false, $FastMode)) { + $calculated_next_offset = $scan_start_offset[$current_segment] + $j + $dummy['mpeg']['audio']['framelength']; + if ($this->decodeMPEGaudioHeader($calculated_next_offset, $dummy, false, false, $FastMode)) { + $scan_start_offset[$current_segment] += $j; + break; + } + } + } + } + } + $synchstartoffset = $scan_start_offset[$current_segment]; + while ($this->decodeMPEGaudioHeader($synchstartoffset, $dummy, false, false, $FastMode)) { + $FastMode = true; + $thisframebitrate = $MPEGaudioBitrateLookup[$MPEGaudioVersionLookup[$dummy['mpeg']['audio']['raw']['version']]][$MPEGaudioLayerLookup[$dummy['mpeg']['audio']['raw']['layer']]][$dummy['mpeg']['audio']['raw']['bitrate']]; + + if (empty($dummy['mpeg']['audio']['framelength'])) { + $SynchErrorsFound++; + $synchstartoffset++; + } else { + getid3_lib::safe_inc($info['mpeg']['audio']['bitrate_distribution'][$thisframebitrate]); + getid3_lib::safe_inc($info['mpeg']['audio']['stereo_distribution'][$dummy['mpeg']['audio']['channelmode']]); + getid3_lib::safe_inc($info['mpeg']['audio']['version_distribution'][$dummy['mpeg']['audio']['version']]); + $synchstartoffset += $dummy['mpeg']['audio']['framelength']; + } + $frames_scanned++; + if ($frames_scan_per_segment && (++$frames_scanned_this_segment >= $frames_scan_per_segment)) { + $this_pct_scanned = (ftell($this->getid3->fp) - $scan_start_offset[$current_segment]) / ($info['avdataend'] - $info['avdataoffset']); + if (($current_segment == 0) && (($this_pct_scanned * $max_scan_segments) >= 1)) { + // file likely contains < $max_frames_scan, just scan as one segment + $max_scan_segments = 1; + $frames_scan_per_segment = $max_frames_scan; + } else { + $pct_data_scanned += $this_pct_scanned; + break; + } + } + } + } + if ($pct_data_scanned > 0) { + $info['warning'][] = 'too many MPEG audio frames to scan, only scanned '.$frames_scanned.' frames in '.$max_scan_segments.' segments ('.number_format($pct_data_scanned * 100, 1).'% of file) and extrapolated distribution, playtime and bitrate may be incorrect.'; + foreach ($info['mpeg']['audio'] as $key1 => $value1) { + if (!preg_match('#_distribution$#i', $key1)) { + continue; + } + foreach ($value1 as $key2 => $value2) { + $info['mpeg']['audio'][$key1][$key2] = round($value2 / $pct_data_scanned); + } + } + } + + if ($SynchErrorsFound > 0) { + $info['warning'][] = 'Found '.$SynchErrorsFound.' synch errors in histogram analysis'; + //return false; + } + + $bittotal = 0; + $framecounter = 0; + foreach ($info['mpeg']['audio']['bitrate_distribution'] as $bitratevalue => $bitratecount) { + $framecounter += $bitratecount; + if ($bitratevalue != 'free') { + $bittotal += ($bitratevalue * $bitratecount); + } + } + if ($framecounter == 0) { + $info['error'][] = 'Corrupt MP3 file: framecounter == zero'; + return false; + } + $info['mpeg']['audio']['frame_count'] = getid3_lib::CastAsInt($framecounter); + $info['mpeg']['audio']['bitrate'] = ($bittotal / $framecounter); + + $info['audio']['bitrate'] = $info['mpeg']['audio']['bitrate']; + + + // Definitively set VBR vs CBR, even if the Xing/LAME/VBRI header says differently + $distinct_bitrates = 0; + foreach ($info['mpeg']['audio']['bitrate_distribution'] as $bitrate_value => $bitrate_count) { + if ($bitrate_count > 0) { + $distinct_bitrates++; + } + } + if ($distinct_bitrates > 1) { + $info['mpeg']['audio']['bitrate_mode'] = 'vbr'; + } else { + $info['mpeg']['audio']['bitrate_mode'] = 'cbr'; + } + $info['audio']['bitrate_mode'] = $info['mpeg']['audio']['bitrate_mode']; + + } + + break; // exit while() + } + } + + $SynchSeekOffset++; + if (($avdataoffset + $SynchSeekOffset) >= $info['avdataend']) { + // end of file/data + + if (empty($info['mpeg']['audio'])) { + + $info['error'][] = 'could not find valid MPEG synch before end of file'; + if (isset($info['audio']['bitrate'])) { + unset($info['audio']['bitrate']); + } + if (isset($info['mpeg']['audio'])) { + unset($info['mpeg']['audio']); + } + if (isset($info['mpeg']) && (!is_array($info['mpeg']) || empty($info['mpeg']))) { + unset($info['mpeg']); + } + return false; + + } + break; + } + + } + $info['audio']['channels'] = $info['mpeg']['audio']['channels']; + $info['audio']['channelmode'] = $info['mpeg']['audio']['channelmode']; + $info['audio']['sample_rate'] = $info['mpeg']['audio']['sample_rate']; + return true; + } + + + public static function MPEGaudioVersionArray() { + static $MPEGaudioVersion = array('2.5', false, '2', '1'); + return $MPEGaudioVersion; + } + + public static function MPEGaudioLayerArray() { + static $MPEGaudioLayer = array(false, 3, 2, 1); + return $MPEGaudioLayer; + } + + public static function MPEGaudioBitrateArray() { + static $MPEGaudioBitrate; + if (empty($MPEGaudioBitrate)) { + $MPEGaudioBitrate = array ( + '1' => array (1 => array('free', 32000, 64000, 96000, 128000, 160000, 192000, 224000, 256000, 288000, 320000, 352000, 384000, 416000, 448000), + 2 => array('free', 32000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000, 384000), + 3 => array('free', 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000) + ), + + '2' => array (1 => array('free', 32000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 176000, 192000, 224000, 256000), + 2 => array('free', 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000), + ) + ); + $MPEGaudioBitrate['2'][3] = $MPEGaudioBitrate['2'][2]; + $MPEGaudioBitrate['2.5'] = $MPEGaudioBitrate['2']; + } + return $MPEGaudioBitrate; + } + + public static function MPEGaudioFrequencyArray() { + static $MPEGaudioFrequency; + if (empty($MPEGaudioFrequency)) { + $MPEGaudioFrequency = array ( + '1' => array(44100, 48000, 32000), + '2' => array(22050, 24000, 16000), + '2.5' => array(11025, 12000, 8000) + ); + } + return $MPEGaudioFrequency; + } + + public static function MPEGaudioChannelModeArray() { + static $MPEGaudioChannelMode = array('stereo', 'joint stereo', 'dual channel', 'mono'); + return $MPEGaudioChannelMode; + } + + public static function MPEGaudioModeExtensionArray() { + static $MPEGaudioModeExtension; + if (empty($MPEGaudioModeExtension)) { + $MPEGaudioModeExtension = array ( + 1 => array('4-31', '8-31', '12-31', '16-31'), + 2 => array('4-31', '8-31', '12-31', '16-31'), + 3 => array('', 'IS', 'MS', 'IS+MS') + ); + } + return $MPEGaudioModeExtension; + } + + public static function MPEGaudioEmphasisArray() { + static $MPEGaudioEmphasis = array('none', '50/15ms', false, 'CCIT J.17'); + return $MPEGaudioEmphasis; + } + + public static function MPEGaudioHeaderBytesValid($head4, $allowBitrate15=false) { + return self::MPEGaudioHeaderValid(self::MPEGaudioHeaderDecode($head4), false, $allowBitrate15); + } + + public static function MPEGaudioHeaderValid($rawarray, $echoerrors=false, $allowBitrate15=false) { + if (($rawarray['synch'] & 0x0FFE) != 0x0FFE) { + return false; + } + + static $MPEGaudioVersionLookup; + static $MPEGaudioLayerLookup; + static $MPEGaudioBitrateLookup; + static $MPEGaudioFrequencyLookup; + static $MPEGaudioChannelModeLookup; + static $MPEGaudioModeExtensionLookup; + static $MPEGaudioEmphasisLookup; + if (empty($MPEGaudioVersionLookup)) { + $MPEGaudioVersionLookup = self::MPEGaudioVersionArray(); + $MPEGaudioLayerLookup = self::MPEGaudioLayerArray(); + $MPEGaudioBitrateLookup = self::MPEGaudioBitrateArray(); + $MPEGaudioFrequencyLookup = self::MPEGaudioFrequencyArray(); + $MPEGaudioChannelModeLookup = self::MPEGaudioChannelModeArray(); + $MPEGaudioModeExtensionLookup = self::MPEGaudioModeExtensionArray(); + $MPEGaudioEmphasisLookup = self::MPEGaudioEmphasisArray(); + } + + if (isset($MPEGaudioVersionLookup[$rawarray['version']])) { + $decodedVersion = $MPEGaudioVersionLookup[$rawarray['version']]; + } else { + echo ($echoerrors ? "\n".'invalid Version ('.$rawarray['version'].')' : ''); + return false; + } + if (isset($MPEGaudioLayerLookup[$rawarray['layer']])) { + $decodedLayer = $MPEGaudioLayerLookup[$rawarray['layer']]; + } else { + echo ($echoerrors ? "\n".'invalid Layer ('.$rawarray['layer'].')' : ''); + return false; + } + if (!isset($MPEGaudioBitrateLookup[$decodedVersion][$decodedLayer][$rawarray['bitrate']])) { + echo ($echoerrors ? "\n".'invalid Bitrate ('.$rawarray['bitrate'].')' : ''); + if ($rawarray['bitrate'] == 15) { + // known issue in LAME 3.90 - 3.93.1 where free-format has bitrate ID of 15 instead of 0 + // let it go through here otherwise file will not be identified + if (!$allowBitrate15) { + return false; + } + } else { + return false; + } + } + if (!isset($MPEGaudioFrequencyLookup[$decodedVersion][$rawarray['sample_rate']])) { + echo ($echoerrors ? "\n".'invalid Frequency ('.$rawarray['sample_rate'].')' : ''); + return false; + } + if (!isset($MPEGaudioChannelModeLookup[$rawarray['channelmode']])) { + echo ($echoerrors ? "\n".'invalid ChannelMode ('.$rawarray['channelmode'].')' : ''); + return false; + } + if (!isset($MPEGaudioModeExtensionLookup[$decodedLayer][$rawarray['modeextension']])) { + echo ($echoerrors ? "\n".'invalid Mode Extension ('.$rawarray['modeextension'].')' : ''); + return false; + } + if (!isset($MPEGaudioEmphasisLookup[$rawarray['emphasis']])) { + echo ($echoerrors ? "\n".'invalid Emphasis ('.$rawarray['emphasis'].')' : ''); + return false; + } + // These are just either set or not set, you can't mess that up :) + // $rawarray['protection']; + // $rawarray['padding']; + // $rawarray['private']; + // $rawarray['copyright']; + // $rawarray['original']; + + return true; + } + + public static function MPEGaudioHeaderDecode($Header4Bytes) { + // AAAA AAAA AAAB BCCD EEEE FFGH IIJJ KLMM + // A - Frame sync (all bits set) + // B - MPEG Audio version ID + // C - Layer description + // D - Protection bit + // E - Bitrate index + // F - Sampling rate frequency index + // G - Padding bit + // H - Private bit + // I - Channel Mode + // J - Mode extension (Only if Joint stereo) + // K - Copyright + // L - Original + // M - Emphasis + + if (strlen($Header4Bytes) != 4) { + return false; + } + + $MPEGrawHeader['synch'] = (getid3_lib::BigEndian2Int(substr($Header4Bytes, 0, 2)) & 0xFFE0) >> 4; + $MPEGrawHeader['version'] = (ord($Header4Bytes{1}) & 0x18) >> 3; // BB + $MPEGrawHeader['layer'] = (ord($Header4Bytes{1}) & 0x06) >> 1; // CC + $MPEGrawHeader['protection'] = (ord($Header4Bytes{1}) & 0x01); // D + $MPEGrawHeader['bitrate'] = (ord($Header4Bytes{2}) & 0xF0) >> 4; // EEEE + $MPEGrawHeader['sample_rate'] = (ord($Header4Bytes{2}) & 0x0C) >> 2; // FF + $MPEGrawHeader['padding'] = (ord($Header4Bytes{2}) & 0x02) >> 1; // G + $MPEGrawHeader['private'] = (ord($Header4Bytes{2}) & 0x01); // H + $MPEGrawHeader['channelmode'] = (ord($Header4Bytes{3}) & 0xC0) >> 6; // II + $MPEGrawHeader['modeextension'] = (ord($Header4Bytes{3}) & 0x30) >> 4; // JJ + $MPEGrawHeader['copyright'] = (ord($Header4Bytes{3}) & 0x08) >> 3; // K + $MPEGrawHeader['original'] = (ord($Header4Bytes{3}) & 0x04) >> 2; // L + $MPEGrawHeader['emphasis'] = (ord($Header4Bytes{3}) & 0x03); // MM + + return $MPEGrawHeader; + } + + public static function MPEGaudioFrameLength(&$bitrate, &$version, &$layer, $padding, &$samplerate) { + static $AudioFrameLengthCache = array(); + + if (!isset($AudioFrameLengthCache[$bitrate][$version][$layer][$padding][$samplerate])) { + $AudioFrameLengthCache[$bitrate][$version][$layer][$padding][$samplerate] = false; + if ($bitrate != 'free') { + + if ($version == '1') { + + if ($layer == '1') { + + // For Layer I slot is 32 bits long + $FrameLengthCoefficient = 48; + $SlotLength = 4; + + } else { // Layer 2 / 3 + + // for Layer 2 and Layer 3 slot is 8 bits long. + $FrameLengthCoefficient = 144; + $SlotLength = 1; + + } + + } else { // MPEG-2 / MPEG-2.5 + + if ($layer == '1') { + + // For Layer I slot is 32 bits long + $FrameLengthCoefficient = 24; + $SlotLength = 4; + + } elseif ($layer == '2') { + + // for Layer 2 and Layer 3 slot is 8 bits long. + $FrameLengthCoefficient = 144; + $SlotLength = 1; + + } else { // layer 3 + + // for Layer 2 and Layer 3 slot is 8 bits long. + $FrameLengthCoefficient = 72; + $SlotLength = 1; + + } + + } + + // FrameLengthInBytes = ((Coefficient * BitRate) / SampleRate) + Padding + if ($samplerate > 0) { + $NewFramelength = ($FrameLengthCoefficient * $bitrate) / $samplerate; + $NewFramelength = floor($NewFramelength / $SlotLength) * $SlotLength; // round to next-lower multiple of SlotLength (1 byte for Layer 2/3, 4 bytes for Layer I) + if ($padding) { + $NewFramelength += $SlotLength; + } + $AudioFrameLengthCache[$bitrate][$version][$layer][$padding][$samplerate] = (int) $NewFramelength; + } + } + } + return $AudioFrameLengthCache[$bitrate][$version][$layer][$padding][$samplerate]; + } + + public static function ClosestStandardMP3Bitrate($bit_rate) { + static $standard_bit_rates = array (320000, 256000, 224000, 192000, 160000, 128000, 112000, 96000, 80000, 64000, 56000, 48000, 40000, 32000, 24000, 16000, 8000); + static $bit_rate_table = array (0=>'-'); + $round_bit_rate = intval(round($bit_rate, -3)); + if (!isset($bit_rate_table[$round_bit_rate])) { + if ($round_bit_rate > max($standard_bit_rates)) { + $bit_rate_table[$round_bit_rate] = round($bit_rate, 2 - strlen($bit_rate)); + } else { + $bit_rate_table[$round_bit_rate] = max($standard_bit_rates); + foreach ($standard_bit_rates as $standard_bit_rate) { + if ($round_bit_rate >= $standard_bit_rate + (($bit_rate_table[$round_bit_rate] - $standard_bit_rate) / 2)) { + break; + } + $bit_rate_table[$round_bit_rate] = $standard_bit_rate; + } + } + } + return $bit_rate_table[$round_bit_rate]; + } + + public static function XingVBRidOffset($version, $channelmode) { + static $XingVBRidOffsetCache = array(); + if (empty($XingVBRidOffset)) { + $XingVBRidOffset = array ( + '1' => array ('mono' => 0x15, // 4 + 17 = 21 + 'stereo' => 0x24, // 4 + 32 = 36 + 'joint stereo' => 0x24, + 'dual channel' => 0x24 + ), + + '2' => array ('mono' => 0x0D, // 4 + 9 = 13 + 'stereo' => 0x15, // 4 + 17 = 21 + 'joint stereo' => 0x15, + 'dual channel' => 0x15 + ), + + '2.5' => array ('mono' => 0x15, + 'stereo' => 0x15, + 'joint stereo' => 0x15, + 'dual channel' => 0x15 + ) + ); + } + return $XingVBRidOffset[$version][$channelmode]; + } + + public static function LAMEvbrMethodLookup($VBRmethodID) { + static $LAMEvbrMethodLookup = array( + 0x00 => 'unknown', + 0x01 => 'cbr', + 0x02 => 'abr', + 0x03 => 'vbr-old / vbr-rh', + 0x04 => 'vbr-new / vbr-mtrh', + 0x05 => 'vbr-mt', + 0x06 => 'vbr (full vbr method 4)', + 0x08 => 'cbr (constant bitrate 2 pass)', + 0x09 => 'abr (2 pass)', + 0x0F => 'reserved' + ); + return (isset($LAMEvbrMethodLookup[$VBRmethodID]) ? $LAMEvbrMethodLookup[$VBRmethodID] : ''); + } + + public static function LAMEmiscStereoModeLookup($StereoModeID) { + static $LAMEmiscStereoModeLookup = array( + 0 => 'mono', + 1 => 'stereo', + 2 => 'dual mono', + 3 => 'joint stereo', + 4 => 'forced stereo', + 5 => 'auto', + 6 => 'intensity stereo', + 7 => 'other' + ); + return (isset($LAMEmiscStereoModeLookup[$StereoModeID]) ? $LAMEmiscStereoModeLookup[$StereoModeID] : ''); + } + + public static function LAMEmiscSourceSampleFrequencyLookup($SourceSampleFrequencyID) { + static $LAMEmiscSourceSampleFrequencyLookup = array( + 0 => '<= 32 kHz', + 1 => '44.1 kHz', + 2 => '48 kHz', + 3 => '> 48kHz' + ); + return (isset($LAMEmiscSourceSampleFrequencyLookup[$SourceSampleFrequencyID]) ? $LAMEmiscSourceSampleFrequencyLookup[$SourceSampleFrequencyID] : ''); + } + + public static function LAMEsurroundInfoLookup($SurroundInfoID) { + static $LAMEsurroundInfoLookup = array( + 0 => 'no surround info', + 1 => 'DPL encoding', + 2 => 'DPL2 encoding', + 3 => 'Ambisonic encoding' + ); + return (isset($LAMEsurroundInfoLookup[$SurroundInfoID]) ? $LAMEsurroundInfoLookup[$SurroundInfoID] : 'reserved'); + } + + public static function LAMEpresetUsedLookup($LAMEtag) { + + if ($LAMEtag['preset_used_id'] == 0) { + // no preset used (LAME >=3.93) + // no preset recorded (LAME <3.93) + return ''; + } + $LAMEpresetUsedLookup = array(); + + ///// THIS PART CANNOT BE STATIC . + for ($i = 8; $i <= 320; $i++) { + switch ($LAMEtag['vbr_method']) { + case 'cbr': + $LAMEpresetUsedLookup[$i] = '--alt-preset '.$LAMEtag['vbr_method'].' '.$i; + break; + case 'abr': + default: // other VBR modes shouldn't be here(?) + $LAMEpresetUsedLookup[$i] = '--alt-preset '.$i; + break; + } + } + + // named old-style presets (studio, phone, voice, etc) are handled in GuessEncoderOptions() + + // named alt-presets + $LAMEpresetUsedLookup[1000] = '--r3mix'; + $LAMEpresetUsedLookup[1001] = '--alt-preset standard'; + $LAMEpresetUsedLookup[1002] = '--alt-preset extreme'; + $LAMEpresetUsedLookup[1003] = '--alt-preset insane'; + $LAMEpresetUsedLookup[1004] = '--alt-preset fast standard'; + $LAMEpresetUsedLookup[1005] = '--alt-preset fast extreme'; + $LAMEpresetUsedLookup[1006] = '--alt-preset medium'; + $LAMEpresetUsedLookup[1007] = '--alt-preset fast medium'; + + // LAME 3.94 additions/changes + $LAMEpresetUsedLookup[1010] = '--preset portable'; // 3.94a15 Oct 21 2003 + $LAMEpresetUsedLookup[1015] = '--preset radio'; // 3.94a15 Oct 21 2003 + + $LAMEpresetUsedLookup[320] = '--preset insane'; // 3.94a15 Nov 12 2003 + $LAMEpresetUsedLookup[410] = '-V9'; + $LAMEpresetUsedLookup[420] = '-V8'; + $LAMEpresetUsedLookup[440] = '-V6'; + $LAMEpresetUsedLookup[430] = '--preset radio'; // 3.94a15 Nov 12 2003 + $LAMEpresetUsedLookup[450] = '--preset '.(($LAMEtag['raw']['vbr_method'] == 4) ? 'fast ' : '').'portable'; // 3.94a15 Nov 12 2003 + $LAMEpresetUsedLookup[460] = '--preset '.(($LAMEtag['raw']['vbr_method'] == 4) ? 'fast ' : '').'medium'; // 3.94a15 Nov 12 2003 + $LAMEpresetUsedLookup[470] = '--r3mix'; // 3.94b1 Dec 18 2003 + $LAMEpresetUsedLookup[480] = '--preset '.(($LAMEtag['raw']['vbr_method'] == 4) ? 'fast ' : '').'standard'; // 3.94a15 Nov 12 2003 + $LAMEpresetUsedLookup[490] = '-V1'; + $LAMEpresetUsedLookup[500] = '--preset '.(($LAMEtag['raw']['vbr_method'] == 4) ? 'fast ' : '').'extreme'; // 3.94a15 Nov 12 2003 + + return (isset($LAMEpresetUsedLookup[$LAMEtag['preset_used_id']]) ? $LAMEpresetUsedLookup[$LAMEtag['preset_used_id']] : 'new/unknown preset: '.$LAMEtag['preset_used_id'].' - report to info@getid3.org'); + } + +} diff --git a/src/wp-includes/ID3/module.audio.ogg.php b/src/wp-includes/ID3/module.audio.ogg.php new file mode 100644 index 0000000..a2a35aa --- /dev/null +++ b/src/wp-includes/ID3/module.audio.ogg.php @@ -0,0 +1,671 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +// // +// module.audio.ogg.php // +// module for analyzing Ogg Vorbis, OggFLAC and Speex files // +// dependencies: module.audio.flac.php // +// /// +///////////////////////////////////////////////////////////////// + +getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.flac.php', __FILE__, true); + +class getid3_ogg extends getid3_handler +{ + // http://xiph.org/vorbis/doc/Vorbis_I_spec.html + public function Analyze() { + $info = &$this->getid3->info; + + $info['fileformat'] = 'ogg'; + + // Warn about illegal tags - only vorbiscomments are allowed + if (isset($info['id3v2'])) { + $info['warning'][] = 'Illegal ID3v2 tag present.'; + } + if (isset($info['id3v1'])) { + $info['warning'][] = 'Illegal ID3v1 tag present.'; + } + if (isset($info['ape'])) { + $info['warning'][] = 'Illegal APE tag present.'; + } + + + // Page 1 - Stream Header + + $this->fseek($info['avdataoffset']); + + $oggpageinfo = $this->ParseOggPageHeader(); + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']] = $oggpageinfo; + + if ($this->ftell() >= $this->getid3->fread_buffer_size()) { + $info['error'][] = 'Could not find start of Ogg page in the first '.$this->getid3->fread_buffer_size().' bytes (this might not be an Ogg-Vorbis file?)'; + unset($info['fileformat']); + unset($info['ogg']); + return false; + } + + $filedata = $this->fread($oggpageinfo['page_length']); + $filedataoffset = 0; + + if (substr($filedata, 0, 4) == 'fLaC') { + + $info['audio']['dataformat'] = 'flac'; + $info['audio']['bitrate_mode'] = 'vbr'; + $info['audio']['lossless'] = true; + + } elseif (substr($filedata, 1, 6) == 'vorbis') { + + $this->ParseVorbisPageHeader($filedata, $filedataoffset, $oggpageinfo); + + } elseif (substr($filedata, 0, 8) == 'Speex ') { + + // http://www.speex.org/manual/node10.html + + $info['audio']['dataformat'] = 'speex'; + $info['mime_type'] = 'audio/speex'; + $info['audio']['bitrate_mode'] = 'abr'; + $info['audio']['lossless'] = false; + + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['speex_string'] = substr($filedata, $filedataoffset, 8); // hard-coded to 'Speex ' + $filedataoffset += 8; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['speex_version'] = substr($filedata, $filedataoffset, 20); + $filedataoffset += 20; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['speex_version_id'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['header_size'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['rate'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['mode'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['mode_bitstream_version'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['nb_channels'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['bitrate'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['framesize'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['vbr'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['frames_per_packet'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['extra_headers'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['reserved1'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['reserved2'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + + $info['speex']['speex_version'] = trim($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['speex_version']); + $info['speex']['sample_rate'] = $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['rate']; + $info['speex']['channels'] = $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['nb_channels']; + $info['speex']['vbr'] = (bool) $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['vbr']; + $info['speex']['band_type'] = $this->SpeexBandModeLookup($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['mode']); + + $info['audio']['sample_rate'] = $info['speex']['sample_rate']; + $info['audio']['channels'] = $info['speex']['channels']; + if ($info['speex']['vbr']) { + $info['audio']['bitrate_mode'] = 'vbr'; + } + + + } elseif (substr($filedata, 0, 8) == "fishead\x00") { + + // Ogg Skeleton version 3.0 Format Specification + // http://xiph.org/ogg/doc/skeleton.html + $filedataoffset += 8; + $info['ogg']['skeleton']['fishead']['raw']['version_major'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 2)); + $filedataoffset += 2; + $info['ogg']['skeleton']['fishead']['raw']['version_minor'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 2)); + $filedataoffset += 2; + $info['ogg']['skeleton']['fishead']['raw']['presentationtime_numerator'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 8)); + $filedataoffset += 8; + $info['ogg']['skeleton']['fishead']['raw']['presentationtime_denominator'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 8)); + $filedataoffset += 8; + $info['ogg']['skeleton']['fishead']['raw']['basetime_numerator'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 8)); + $filedataoffset += 8; + $info['ogg']['skeleton']['fishead']['raw']['basetime_denominator'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 8)); + $filedataoffset += 8; + $info['ogg']['skeleton']['fishead']['raw']['utc'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 20)); + $filedataoffset += 20; + + $info['ogg']['skeleton']['fishead']['version'] = $info['ogg']['skeleton']['fishead']['raw']['version_major'].'.'.$info['ogg']['skeleton']['fishead']['raw']['version_minor']; + $info['ogg']['skeleton']['fishead']['presentationtime'] = $info['ogg']['skeleton']['fishead']['raw']['presentationtime_numerator'] / $info['ogg']['skeleton']['fishead']['raw']['presentationtime_denominator']; + $info['ogg']['skeleton']['fishead']['basetime'] = $info['ogg']['skeleton']['fishead']['raw']['basetime_numerator'] / $info['ogg']['skeleton']['fishead']['raw']['basetime_denominator']; + $info['ogg']['skeleton']['fishead']['utc'] = $info['ogg']['skeleton']['fishead']['raw']['utc']; + + + $counter = 0; + do { + $oggpageinfo = $this->ParseOggPageHeader(); + $info['ogg']['pageheader'][$oggpageinfo['page_seqno'].'.'.$counter++] = $oggpageinfo; + $filedata = $this->fread($oggpageinfo['page_length']); + $this->fseek($oggpageinfo['page_end_offset']); + + if (substr($filedata, 0, 8) == "fisbone\x00") { + + $filedataoffset = 8; + $info['ogg']['skeleton']['fisbone']['raw']['message_header_offset'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['skeleton']['fisbone']['raw']['serial_number'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['skeleton']['fisbone']['raw']['number_header_packets'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['skeleton']['fisbone']['raw']['granulerate_numerator'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 8)); + $filedataoffset += 8; + $info['ogg']['skeleton']['fisbone']['raw']['granulerate_denominator'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 8)); + $filedataoffset += 8; + $info['ogg']['skeleton']['fisbone']['raw']['basegranule'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 8)); + $filedataoffset += 8; + $info['ogg']['skeleton']['fisbone']['raw']['preroll'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['skeleton']['fisbone']['raw']['granuleshift'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)); + $filedataoffset += 1; + $info['ogg']['skeleton']['fisbone']['raw']['padding'] = substr($filedata, $filedataoffset, 3); + $filedataoffset += 3; + + } elseif (substr($filedata, 1, 6) == 'theora') { + + $info['video']['dataformat'] = 'theora'; + $info['error'][] = 'Ogg Theora not correctly handled in this version of getID3 ['.$this->getid3->version().']'; + //break; + + } elseif (substr($filedata, 1, 6) == 'vorbis') { + + $this->ParseVorbisPageHeader($filedata, $filedataoffset, $oggpageinfo); + + } else { + $info['error'][] = 'unexpected'; + //break; + } + //} while ($oggpageinfo['page_seqno'] == 0); + } while (($oggpageinfo['page_seqno'] == 0) && (substr($filedata, 0, 8) != "fisbone\x00")); + + $this->fseek($oggpageinfo['page_start_offset']); + + $info['error'][] = 'Ogg Skeleton not correctly handled in this version of getID3 ['.$this->getid3->version().']'; + //return false; + + } else { + + $info['error'][] = 'Expecting either "Speex " or "vorbis" identifier strings, found "'.substr($filedata, 0, 8).'"'; + unset($info['ogg']); + unset($info['mime_type']); + return false; + + } + + // Page 2 - Comment Header + $oggpageinfo = $this->ParseOggPageHeader(); + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']] = $oggpageinfo; + + switch ($info['audio']['dataformat']) { + case 'vorbis': + $filedata = $this->fread($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length']); + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['packet_type'] = getid3_lib::LittleEndian2Int(substr($filedata, 0, 1)); + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['stream_type'] = substr($filedata, 1, 6); // hard-coded to 'vorbis' + + $this->ParseVorbisComments(); + break; + + case 'flac': + $flac = new getid3_flac($this->getid3); + if (!$flac->parseMETAdata()) { + $info['error'][] = 'Failed to parse FLAC headers'; + return false; + } + unset($flac); + break; + + case 'speex': + $this->fseek($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length'], SEEK_CUR); + $this->ParseVorbisComments(); + break; + } + + + // Last Page - Number of Samples + if (!getid3_lib::intValueSupported($info['avdataend'])) { + + $info['warning'][] = 'Unable to parse Ogg end chunk file (PHP does not support file operations beyond '.round(PHP_INT_MAX / 1073741824).'GB)'; + + } else { + + $this->fseek(max($info['avdataend'] - $this->getid3->fread_buffer_size(), 0)); + $LastChunkOfOgg = strrev($this->fread($this->getid3->fread_buffer_size())); + if ($LastOggSpostion = strpos($LastChunkOfOgg, 'SggO')) { + $this->fseek($info['avdataend'] - ($LastOggSpostion + strlen('SggO'))); + $info['avdataend'] = $this->ftell(); + $info['ogg']['pageheader']['eos'] = $this->ParseOggPageHeader(); + $info['ogg']['samples'] = $info['ogg']['pageheader']['eos']['pcm_abs_position']; + if ($info['ogg']['samples'] == 0) { + $info['error'][] = 'Corrupt Ogg file: eos.number of samples == zero'; + return false; + } + if (!empty($info['audio']['sample_rate'])) { + $info['ogg']['bitrate_average'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / ($info['ogg']['samples'] / $info['audio']['sample_rate']); + } + } + + } + + if (!empty($info['ogg']['bitrate_average'])) { + $info['audio']['bitrate'] = $info['ogg']['bitrate_average']; + } elseif (!empty($info['ogg']['bitrate_nominal'])) { + $info['audio']['bitrate'] = $info['ogg']['bitrate_nominal']; + } elseif (!empty($info['ogg']['bitrate_min']) && !empty($info['ogg']['bitrate_max'])) { + $info['audio']['bitrate'] = ($info['ogg']['bitrate_min'] + $info['ogg']['bitrate_max']) / 2; + } + if (isset($info['audio']['bitrate']) && !isset($info['playtime_seconds'])) { + if ($info['audio']['bitrate'] == 0) { + $info['error'][] = 'Corrupt Ogg file: bitrate_audio == zero'; + return false; + } + $info['playtime_seconds'] = (float) ((($info['avdataend'] - $info['avdataoffset']) * 8) / $info['audio']['bitrate']); + } + + if (isset($info['ogg']['vendor'])) { + $info['audio']['encoder'] = preg_replace('/^Encoded with /', '', $info['ogg']['vendor']); + + // Vorbis only + if ($info['audio']['dataformat'] == 'vorbis') { + + // Vorbis 1.0 starts with Xiph.Org + if (preg_match('/^Xiph.Org/', $info['audio']['encoder'])) { + + if ($info['audio']['bitrate_mode'] == 'abr') { + + // Set -b 128 on abr files + $info['audio']['encoder_options'] = '-b '.round($info['ogg']['bitrate_nominal'] / 1000); + + } elseif (($info['audio']['bitrate_mode'] == 'vbr') && ($info['audio']['channels'] == 2) && ($info['audio']['sample_rate'] >= 44100) && ($info['audio']['sample_rate'] <= 48000)) { + // Set -q N on vbr files + $info['audio']['encoder_options'] = '-q '.$this->get_quality_from_nominal_bitrate($info['ogg']['bitrate_nominal']); + + } + } + + if (empty($info['audio']['encoder_options']) && !empty($info['ogg']['bitrate_nominal'])) { + $info['audio']['encoder_options'] = 'Nominal bitrate: '.intval(round($info['ogg']['bitrate_nominal'] / 1000)).'kbps'; + } + } + } + + return true; + } + + public function ParseVorbisPageHeader(&$filedata, &$filedataoffset, &$oggpageinfo) { + $info = &$this->getid3->info; + $info['audio']['dataformat'] = 'vorbis'; + $info['audio']['lossless'] = false; + + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['packet_type'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)); + $filedataoffset += 1; + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['stream_type'] = substr($filedata, $filedataoffset, 6); // hard-coded to 'vorbis' + $filedataoffset += 6; + $info['ogg']['bitstreamversion'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['numberofchannels'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)); + $filedataoffset += 1; + $info['audio']['channels'] = $info['ogg']['numberofchannels']; + $info['ogg']['samplerate'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + if ($info['ogg']['samplerate'] == 0) { + $info['error'][] = 'Corrupt Ogg file: sample rate == zero'; + return false; + } + $info['audio']['sample_rate'] = $info['ogg']['samplerate']; + $info['ogg']['samples'] = 0; // filled in later + $info['ogg']['bitrate_average'] = 0; // filled in later + $info['ogg']['bitrate_max'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['bitrate_nominal'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['bitrate_min'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $info['ogg']['blocksize_small'] = pow(2, getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)) & 0x0F); + $info['ogg']['blocksize_large'] = pow(2, (getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)) & 0xF0) >> 4); + $info['ogg']['stop_bit'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)); // must be 1, marks end of packet + + $info['audio']['bitrate_mode'] = 'vbr'; // overridden if actually abr + if ($info['ogg']['bitrate_max'] == 0xFFFFFFFF) { + unset($info['ogg']['bitrate_max']); + $info['audio']['bitrate_mode'] = 'abr'; + } + if ($info['ogg']['bitrate_nominal'] == 0xFFFFFFFF) { + unset($info['ogg']['bitrate_nominal']); + } + if ($info['ogg']['bitrate_min'] == 0xFFFFFFFF) { + unset($info['ogg']['bitrate_min']); + $info['audio']['bitrate_mode'] = 'abr'; + } + return true; + } + + public function ParseOggPageHeader() { + // http://xiph.org/ogg/vorbis/doc/framing.html + $oggheader['page_start_offset'] = $this->ftell(); // where we started from in the file + + $filedata = $this->fread($this->getid3->fread_buffer_size()); + $filedataoffset = 0; + while ((substr($filedata, $filedataoffset++, 4) != 'OggS')) { + if (($this->ftell() - $oggheader['page_start_offset']) >= $this->getid3->fread_buffer_size()) { + // should be found before here + return false; + } + if ((($filedataoffset + 28) > strlen($filedata)) || (strlen($filedata) < 28)) { + if ($this->feof() || (($filedata .= $this->fread($this->getid3->fread_buffer_size())) === false)) { + // get some more data, unless eof, in which case fail + return false; + } + } + } + $filedataoffset += strlen('OggS') - 1; // page, delimited by 'OggS' + + $oggheader['stream_structver'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)); + $filedataoffset += 1; + $oggheader['flags_raw'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)); + $filedataoffset += 1; + $oggheader['flags']['fresh'] = (bool) ($oggheader['flags_raw'] & 0x01); // fresh packet + $oggheader['flags']['bos'] = (bool) ($oggheader['flags_raw'] & 0x02); // first page of logical bitstream (bos) + $oggheader['flags']['eos'] = (bool) ($oggheader['flags_raw'] & 0x04); // last page of logical bitstream (eos) + + $oggheader['pcm_abs_position'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 8)); + $filedataoffset += 8; + $oggheader['stream_serialno'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $oggheader['page_seqno'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $oggheader['page_checksum'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4)); + $filedataoffset += 4; + $oggheader['page_segments'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)); + $filedataoffset += 1; + $oggheader['page_length'] = 0; + for ($i = 0; $i < $oggheader['page_segments']; $i++) { + $oggheader['segment_table'][$i] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)); + $filedataoffset += 1; + $oggheader['page_length'] += $oggheader['segment_table'][$i]; + } + $oggheader['header_end_offset'] = $oggheader['page_start_offset'] + $filedataoffset; + $oggheader['page_end_offset'] = $oggheader['header_end_offset'] + $oggheader['page_length']; + $this->fseek($oggheader['header_end_offset']); + + return $oggheader; + } + + // http://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-810005 + public function ParseVorbisComments() { + $info = &$this->getid3->info; + + $OriginalOffset = $this->ftell(); + $commentdataoffset = 0; + $VorbisCommentPage = 1; + + switch ($info['audio']['dataformat']) { + case 'vorbis': + case 'speex': + $CommentStartOffset = $info['ogg']['pageheader'][$VorbisCommentPage]['page_start_offset']; // Second Ogg page, after header block + $this->fseek($CommentStartOffset); + $commentdataoffset = 27 + $info['ogg']['pageheader'][$VorbisCommentPage]['page_segments']; + $commentdata = $this->fread(self::OggPageSegmentLength($info['ogg']['pageheader'][$VorbisCommentPage], 1) + $commentdataoffset); + + if ($info['audio']['dataformat'] == 'vorbis') { + $commentdataoffset += (strlen('vorbis') + 1); + } + break; + + case 'flac': + $CommentStartOffset = $info['flac']['VORBIS_COMMENT']['raw']['offset'] + 4; + $this->fseek($CommentStartOffset); + $commentdata = $this->fread($info['flac']['VORBIS_COMMENT']['raw']['block_length']); + break; + + default: + return false; + } + + $VendorSize = getid3_lib::LittleEndian2Int(substr($commentdata, $commentdataoffset, 4)); + $commentdataoffset += 4; + + $info['ogg']['vendor'] = substr($commentdata, $commentdataoffset, $VendorSize); + $commentdataoffset += $VendorSize; + + $CommentsCount = getid3_lib::LittleEndian2Int(substr($commentdata, $commentdataoffset, 4)); + $commentdataoffset += 4; + $info['avdataoffset'] = $CommentStartOffset + $commentdataoffset; + + $basicfields = array('TITLE', 'ARTIST', 'ALBUM', 'TRACKNUMBER', 'GENRE', 'DATE', 'DESCRIPTION', 'COMMENT'); + $ThisFileInfo_ogg_comments_raw = &$info['ogg']['comments_raw']; + for ($i = 0; $i < $CommentsCount; $i++) { + + $ThisFileInfo_ogg_comments_raw[$i]['dataoffset'] = $CommentStartOffset + $commentdataoffset; + + if ($this->ftell() < ($ThisFileInfo_ogg_comments_raw[$i]['dataoffset'] + 4)) { + if ($oggpageinfo = $this->ParseOggPageHeader()) { + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']] = $oggpageinfo; + + $VorbisCommentPage++; + + // First, save what we haven't read yet + $AsYetUnusedData = substr($commentdata, $commentdataoffset); + + // Then take that data off the end + $commentdata = substr($commentdata, 0, $commentdataoffset); + + // Add [headerlength] bytes of dummy data for the Ogg Page Header, just to keep absolute offsets correct + $commentdata .= str_repeat("\x00", 27 + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_segments']); + $commentdataoffset += (27 + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_segments']); + + // Finally, stick the unused data back on the end + $commentdata .= $AsYetUnusedData; + + //$commentdata .= $this->fread($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length']); + $commentdata .= $this->fread($this->OggPageSegmentLength($info['ogg']['pageheader'][$VorbisCommentPage], 1)); + } + + } + $ThisFileInfo_ogg_comments_raw[$i]['size'] = getid3_lib::LittleEndian2Int(substr($commentdata, $commentdataoffset, 4)); + + // replace avdataoffset with position just after the last vorbiscomment + $info['avdataoffset'] = $ThisFileInfo_ogg_comments_raw[$i]['dataoffset'] + $ThisFileInfo_ogg_comments_raw[$i]['size'] + 4; + + $commentdataoffset += 4; + while ((strlen($commentdata) - $commentdataoffset) < $ThisFileInfo_ogg_comments_raw[$i]['size']) { + if (($ThisFileInfo_ogg_comments_raw[$i]['size'] > $info['avdataend']) || ($ThisFileInfo_ogg_comments_raw[$i]['size'] < 0)) { + $info['warning'][] = 'Invalid Ogg comment size (comment #'.$i.', claims to be '.number_format($ThisFileInfo_ogg_comments_raw[$i]['size']).' bytes) - aborting reading comments'; + break 2; + } + + $VorbisCommentPage++; + + $oggpageinfo = $this->ParseOggPageHeader(); + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']] = $oggpageinfo; + + // First, save what we haven't read yet + $AsYetUnusedData = substr($commentdata, $commentdataoffset); + + // Then take that data off the end + $commentdata = substr($commentdata, 0, $commentdataoffset); + + // Add [headerlength] bytes of dummy data for the Ogg Page Header, just to keep absolute offsets correct + $commentdata .= str_repeat("\x00", 27 + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_segments']); + $commentdataoffset += (27 + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_segments']); + + // Finally, stick the unused data back on the end + $commentdata .= $AsYetUnusedData; + + //$commentdata .= $this->fread($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length']); + if (!isset($info['ogg']['pageheader'][$VorbisCommentPage])) { + $info['warning'][] = 'undefined Vorbis Comment page "'.$VorbisCommentPage.'" at offset '.$this->ftell(); + break; + } + $readlength = self::OggPageSegmentLength($info['ogg']['pageheader'][$VorbisCommentPage], 1); + if ($readlength <= 0) { + $info['warning'][] = 'invalid length Vorbis Comment page "'.$VorbisCommentPage.'" at offset '.$this->ftell(); + break; + } + $commentdata .= $this->fread($readlength); + + //$filebaseoffset += $oggpageinfo['header_end_offset'] - $oggpageinfo['page_start_offset']; + } + $ThisFileInfo_ogg_comments_raw[$i]['offset'] = $commentdataoffset; + $commentstring = substr($commentdata, $commentdataoffset, $ThisFileInfo_ogg_comments_raw[$i]['size']); + $commentdataoffset += $ThisFileInfo_ogg_comments_raw[$i]['size']; + + if (!$commentstring) { + + // no comment? + $info['warning'][] = 'Blank Ogg comment ['.$i.']'; + + } elseif (strstr($commentstring, '=')) { + + $commentexploded = explode('=', $commentstring, 2); + $ThisFileInfo_ogg_comments_raw[$i]['key'] = strtoupper($commentexploded[0]); + $ThisFileInfo_ogg_comments_raw[$i]['value'] = (isset($commentexploded[1]) ? $commentexploded[1] : ''); + + if ($ThisFileInfo_ogg_comments_raw[$i]['key'] == 'METADATA_BLOCK_PICTURE') { + + // http://wiki.xiph.org/VorbisComment#METADATA_BLOCK_PICTURE + // The unencoded format is that of the FLAC picture block. The fields are stored in big endian order as in FLAC, picture data is stored according to the relevant standard. + // http://flac.sourceforge.net/format.html#metadata_block_picture + $flac = new getid3_flac($this->getid3); + $flac->setStringMode(base64_decode($ThisFileInfo_ogg_comments_raw[$i]['value'])); + $flac->parsePICTURE(); + $info['ogg']['comments']['picture'][] = $flac->getid3->info['flac']['PICTURE'][0]; + unset($flac); + + } elseif ($ThisFileInfo_ogg_comments_raw[$i]['key'] == 'COVERART') { + + $data = base64_decode($ThisFileInfo_ogg_comments_raw[$i]['value']); + $this->notice('Found deprecated COVERART tag, it should be replaced in honor of METADATA_BLOCK_PICTURE structure'); + /** @todo use 'coverartmime' where available */ + $imageinfo = getid3_lib::GetDataImageSize($data); + if ($imageinfo === false || !isset($imageinfo['mime'])) { + $this->warning('COVERART vorbiscomment tag contains invalid image'); + continue; + } + + $ogg = new self($this->getid3); + $ogg->setStringMode($data); + $info['ogg']['comments']['picture'][] = array( + 'image_mime' => $imageinfo['mime'], + 'data' => $ogg->saveAttachment('coverart', 0, strlen($data), $imageinfo['mime']), + ); + unset($ogg); + + } else { + + $info['ogg']['comments'][strtolower($ThisFileInfo_ogg_comments_raw[$i]['key'])][] = $ThisFileInfo_ogg_comments_raw[$i]['value']; + + } + + } else { + + $info['warning'][] = '[known problem with CDex >= v1.40, < v1.50b7] Invalid Ogg comment name/value pair ['.$i.']: '.$commentstring; + + } + unset($ThisFileInfo_ogg_comments_raw[$i]); + } + unset($ThisFileInfo_ogg_comments_raw); + + + // Replay Gain Adjustment + // http://privatewww.essex.ac.uk/~djmrob/replaygain/ + if (isset($info['ogg']['comments']) && is_array($info['ogg']['comments'])) { + foreach ($info['ogg']['comments'] as $index => $commentvalue) { + switch ($index) { + case 'rg_audiophile': + case 'replaygain_album_gain': + $info['replay_gain']['album']['adjustment'] = (double) $commentvalue[0]; + unset($info['ogg']['comments'][$index]); + break; + + case 'rg_radio': + case 'replaygain_track_gain': + $info['replay_gain']['track']['adjustment'] = (double) $commentvalue[0]; + unset($info['ogg']['comments'][$index]); + break; + + case 'replaygain_album_peak': + $info['replay_gain']['album']['peak'] = (double) $commentvalue[0]; + unset($info['ogg']['comments'][$index]); + break; + + case 'rg_peak': + case 'replaygain_track_peak': + $info['replay_gain']['track']['peak'] = (double) $commentvalue[0]; + unset($info['ogg']['comments'][$index]); + break; + + case 'replaygain_reference_loudness': + $info['replay_gain']['reference_volume'] = (double) $commentvalue[0]; + unset($info['ogg']['comments'][$index]); + break; + + default: + // do nothing + break; + } + } + } + + $this->fseek($OriginalOffset); + + return true; + } + + public static function SpeexBandModeLookup($mode) { + static $SpeexBandModeLookup = array(); + if (empty($SpeexBandModeLookup)) { + $SpeexBandModeLookup[0] = 'narrow'; + $SpeexBandModeLookup[1] = 'wide'; + $SpeexBandModeLookup[2] = 'ultra-wide'; + } + return (isset($SpeexBandModeLookup[$mode]) ? $SpeexBandModeLookup[$mode] : null); + } + + + public static function OggPageSegmentLength($OggInfoArray, $SegmentNumber=1) { + for ($i = 0; $i < $SegmentNumber; $i++) { + $segmentlength = 0; + foreach ($OggInfoArray['segment_table'] as $key => $value) { + $segmentlength += $value; + if ($value < 255) { + break; + } + } + } + return $segmentlength; + } + + + public static function get_quality_from_nominal_bitrate($nominal_bitrate) { + + // decrease precision + $nominal_bitrate = $nominal_bitrate / 1000; + + if ($nominal_bitrate < 128) { + // q-1 to q4 + $qval = ($nominal_bitrate - 64) / 16; + } elseif ($nominal_bitrate < 256) { + // q4 to q8 + $qval = $nominal_bitrate / 32; + } elseif ($nominal_bitrate < 320) { + // q8 to q9 + $qval = ($nominal_bitrate + 256) / 64; + } else { + // q9 to q10 + $qval = ($nominal_bitrate + 1300) / 180; + } + //return $qval; // 5.031324 + //return intval($qval); // 5 + return round($qval, 1); // 5 or 4.9 + } + +} diff --git a/src/wp-includes/ID3/module.tag.apetag.php b/src/wp-includes/ID3/module.tag.apetag.php new file mode 100644 index 0000000..afeede7 --- /dev/null +++ b/src/wp-includes/ID3/module.tag.apetag.php @@ -0,0 +1,370 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +// // +// module.tag.apetag.php // +// module for analyzing APE tags // +// dependencies: NONE // +// /// +///////////////////////////////////////////////////////////////// + +class getid3_apetag extends getid3_handler +{ + public $inline_attachments = true; // true: return full data for all attachments; false: return no data for all attachments; integer: return data for attachments <= than this; string: save as file to this directory + public $overrideendoffset = 0; + + public function Analyze() { + $info = &$this->getid3->info; + + if (!getid3_lib::intValueSupported($info['filesize'])) { + $info['warning'][] = 'Unable to check for APEtags because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB'; + return false; + } + + $id3v1tagsize = 128; + $apetagheadersize = 32; + $lyrics3tagsize = 10; + + if ($this->overrideendoffset == 0) { + + fseek($this->getid3->fp, 0 - $id3v1tagsize - $apetagheadersize - $lyrics3tagsize, SEEK_END); + $APEfooterID3v1 = fread($this->getid3->fp, $id3v1tagsize + $apetagheadersize + $lyrics3tagsize); + + //if (preg_match('/APETAGEX.{24}TAG.{125}$/i', $APEfooterID3v1)) { + if (substr($APEfooterID3v1, strlen($APEfooterID3v1) - $id3v1tagsize - $apetagheadersize, 8) == 'APETAGEX') { + + // APE tag found before ID3v1 + $info['ape']['tag_offset_end'] = $info['filesize'] - $id3v1tagsize; + + //} elseif (preg_match('/APETAGEX.{24}$/i', $APEfooterID3v1)) { + } elseif (substr($APEfooterID3v1, strlen($APEfooterID3v1) - $apetagheadersize, 8) == 'APETAGEX') { + + // APE tag found, no ID3v1 + $info['ape']['tag_offset_end'] = $info['filesize']; + + } + + } else { + + fseek($this->getid3->fp, $this->overrideendoffset - $apetagheadersize, SEEK_SET); + if (fread($this->getid3->fp, 8) == 'APETAGEX') { + $info['ape']['tag_offset_end'] = $this->overrideendoffset; + } + + } + if (!isset($info['ape']['tag_offset_end'])) { + + // APE tag not found + unset($info['ape']); + return false; + + } + + // shortcut + $thisfile_ape = &$info['ape']; + + fseek($this->getid3->fp, $thisfile_ape['tag_offset_end'] - $apetagheadersize, SEEK_SET); + $APEfooterData = fread($this->getid3->fp, 32); + if (!($thisfile_ape['footer'] = $this->parseAPEheaderFooter($APEfooterData))) { + $info['error'][] = 'Error parsing APE footer at offset '.$thisfile_ape['tag_offset_end']; + return false; + } + + if (isset($thisfile_ape['footer']['flags']['header']) && $thisfile_ape['footer']['flags']['header']) { + fseek($this->getid3->fp, $thisfile_ape['tag_offset_end'] - $thisfile_ape['footer']['raw']['tagsize'] - $apetagheadersize, SEEK_SET); + $thisfile_ape['tag_offset_start'] = ftell($this->getid3->fp); + $APEtagData = fread($this->getid3->fp, $thisfile_ape['footer']['raw']['tagsize'] + $apetagheadersize); + } else { + $thisfile_ape['tag_offset_start'] = $thisfile_ape['tag_offset_end'] - $thisfile_ape['footer']['raw']['tagsize']; + fseek($this->getid3->fp, $thisfile_ape['tag_offset_start'], SEEK_SET); + $APEtagData = fread($this->getid3->fp, $thisfile_ape['footer']['raw']['tagsize']); + } + $info['avdataend'] = $thisfile_ape['tag_offset_start']; + + if (isset($info['id3v1']['tag_offset_start']) && ($info['id3v1']['tag_offset_start'] < $thisfile_ape['tag_offset_end'])) { + $info['warning'][] = 'ID3v1 tag information ignored since it appears to be a false synch in APEtag data'; + unset($info['id3v1']); + foreach ($info['warning'] as $key => $value) { + if ($value == 'Some ID3v1 fields do not use NULL characters for padding') { + unset($info['warning'][$key]); + sort($info['warning']); + break; + } + } + } + + $offset = 0; + if (isset($thisfile_ape['footer']['flags']['header']) && $thisfile_ape['footer']['flags']['header']) { + if ($thisfile_ape['header'] = $this->parseAPEheaderFooter(substr($APEtagData, 0, $apetagheadersize))) { + $offset += $apetagheadersize; + } else { + $info['error'][] = 'Error parsing APE header at offset '.$thisfile_ape['tag_offset_start']; + return false; + } + } + + // shortcut + $info['replay_gain'] = array(); + $thisfile_replaygain = &$info['replay_gain']; + + for ($i = 0; $i < $thisfile_ape['footer']['raw']['tag_items']; $i++) { + $value_size = getid3_lib::LittleEndian2Int(substr($APEtagData, $offset, 4)); + $offset += 4; + $item_flags = getid3_lib::LittleEndian2Int(substr($APEtagData, $offset, 4)); + $offset += 4; + if (strstr(substr($APEtagData, $offset), "\x00") === false) { + $info['error'][] = 'Cannot find null-byte (0x00) seperator between ItemKey #'.$i.' and value. ItemKey starts '.$offset.' bytes into the APE tag, at file offset '.($thisfile_ape['tag_offset_start'] + $offset); + return false; + } + $ItemKeyLength = strpos($APEtagData, "\x00", $offset) - $offset; + $item_key = strtolower(substr($APEtagData, $offset, $ItemKeyLength)); + + // shortcut + $thisfile_ape['items'][$item_key] = array(); + $thisfile_ape_items_current = &$thisfile_ape['items'][$item_key]; + + $thisfile_ape_items_current['offset'] = $thisfile_ape['tag_offset_start'] + $offset; + + $offset += ($ItemKeyLength + 1); // skip 0x00 terminator + $thisfile_ape_items_current['data'] = substr($APEtagData, $offset, $value_size); + $offset += $value_size; + + $thisfile_ape_items_current['flags'] = $this->parseAPEtagFlags($item_flags); + switch ($thisfile_ape_items_current['flags']['item_contents_raw']) { + case 0: // UTF-8 + case 3: // Locator (URL, filename, etc), UTF-8 encoded + $thisfile_ape_items_current['data'] = explode("\x00", trim($thisfile_ape_items_current['data'])); + break; + + default: // binary data + break; + } + + switch (strtolower($item_key)) { + case 'replaygain_track_gain': + $thisfile_replaygain['track']['adjustment'] = (float) str_replace(',', '.', $thisfile_ape_items_current['data'][0]); // float casting will see "0,95" as zero! + $thisfile_replaygain['track']['originator'] = 'unspecified'; + break; + + case 'replaygain_track_peak': + $thisfile_replaygain['track']['peak'] = (float) str_replace(',', '.', $thisfile_ape_items_current['data'][0]); // float casting will see "0,95" as zero! + $thisfile_replaygain['track']['originator'] = 'unspecified'; + if ($thisfile_replaygain['track']['peak'] <= 0) { + $info['warning'][] = 'ReplayGain Track peak from APEtag appears invalid: '.$thisfile_replaygain['track']['peak'].' (original value = "'.$thisfile_ape_items_current['data'][0].'")'; + } + break; + + case 'replaygain_album_gain': + $thisfile_replaygain['album']['adjustment'] = (float) str_replace(',', '.', $thisfile_ape_items_current['data'][0]); // float casting will see "0,95" as zero! + $thisfile_replaygain['album']['originator'] = 'unspecified'; + break; + + case 'replaygain_album_peak': + $thisfile_replaygain['album']['peak'] = (float) str_replace(',', '.', $thisfile_ape_items_current['data'][0]); // float casting will see "0,95" as zero! + $thisfile_replaygain['album']['originator'] = 'unspecified'; + if ($thisfile_replaygain['album']['peak'] <= 0) { + $info['warning'][] = 'ReplayGain Album peak from APEtag appears invalid: '.$thisfile_replaygain['album']['peak'].' (original value = "'.$thisfile_ape_items_current['data'][0].'")'; + } + break; + + case 'mp3gain_undo': + list($mp3gain_undo_left, $mp3gain_undo_right, $mp3gain_undo_wrap) = explode(',', $thisfile_ape_items_current['data'][0]); + $thisfile_replaygain['mp3gain']['undo_left'] = intval($mp3gain_undo_left); + $thisfile_replaygain['mp3gain']['undo_right'] = intval($mp3gain_undo_right); + $thisfile_replaygain['mp3gain']['undo_wrap'] = (($mp3gain_undo_wrap == 'Y') ? true : false); + break; + + case 'mp3gain_minmax': + list($mp3gain_globalgain_min, $mp3gain_globalgain_max) = explode(',', $thisfile_ape_items_current['data'][0]); + $thisfile_replaygain['mp3gain']['globalgain_track_min'] = intval($mp3gain_globalgain_min); + $thisfile_replaygain['mp3gain']['globalgain_track_max'] = intval($mp3gain_globalgain_max); + break; + + case 'mp3gain_album_minmax': + list($mp3gain_globalgain_album_min, $mp3gain_globalgain_album_max) = explode(',', $thisfile_ape_items_current['data'][0]); + $thisfile_replaygain['mp3gain']['globalgain_album_min'] = intval($mp3gain_globalgain_album_min); + $thisfile_replaygain['mp3gain']['globalgain_album_max'] = intval($mp3gain_globalgain_album_max); + break; + + case 'tracknumber': + if (is_array($thisfile_ape_items_current['data'])) { + foreach ($thisfile_ape_items_current['data'] as $comment) { + $thisfile_ape['comments']['track'][] = $comment; + } + } + break; + + case 'cover art (artist)': + case 'cover art (back)': + case 'cover art (band logo)': + case 'cover art (band)': + case 'cover art (colored fish)': + case 'cover art (composer)': + case 'cover art (conductor)': + case 'cover art (front)': + case 'cover art (icon)': + case 'cover art (illustration)': + case 'cover art (lead)': + case 'cover art (leaflet)': + case 'cover art (lyricist)': + case 'cover art (media)': + case 'cover art (movie scene)': + case 'cover art (other icon)': + case 'cover art (other)': + case 'cover art (performance)': + case 'cover art (publisher logo)': + case 'cover art (recording)': + case 'cover art (studio)': + // list of possible cover arts from http://taglib-sharp.sourcearchive.com/documentation/2.0.3.0-2/Ape_2Tag_8cs-source.html + list($thisfile_ape_items_current['filename'], $thisfile_ape_items_current['data']) = explode("\x00", $thisfile_ape_items_current['data'], 2); + $thisfile_ape_items_current['data_offset'] = $thisfile_ape_items_current['offset'] + strlen($thisfile_ape_items_current['filename']."\x00"); + $thisfile_ape_items_current['data_length'] = strlen($thisfile_ape_items_current['data']); + + $thisfile_ape_items_current['image_mime'] = ''; + $imageinfo = array(); + $imagechunkcheck = getid3_lib::GetDataImageSize($thisfile_ape_items_current['data'], $imageinfo); + $thisfile_ape_items_current['image_mime'] = image_type_to_mime_type($imagechunkcheck[2]); + + do { + if ($this->inline_attachments === false) { + // skip entirely + unset($thisfile_ape_items_current['data']); + break; + } + if ($this->inline_attachments === true) { + // great + } elseif (is_int($this->inline_attachments)) { + if ($this->inline_attachments < $thisfile_ape_items_current['data_length']) { + // too big, skip + $info['warning'][] = 'attachment at '.$thisfile_ape_items_current['offset'].' is too large to process inline ('.number_format($thisfile_ape_items_current['data_length']).' bytes)'; + unset($thisfile_ape_items_current['data']); + break; + } + } elseif (is_string($this->inline_attachments)) { + $this->inline_attachments = rtrim(str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $this->inline_attachments), DIRECTORY_SEPARATOR); + if (!is_dir($this->inline_attachments) || !is_writable($this->inline_attachments)) { + // cannot write, skip + $info['warning'][] = 'attachment at '.$thisfile_ape_items_current['offset'].' cannot be saved to "'.$this->inline_attachments.'" (not writable)'; + unset($thisfile_ape_items_current['data']); + break; + } + } + // if we get this far, must be OK + if (is_string($this->inline_attachments)) { + $destination_filename = $this->inline_attachments.DIRECTORY_SEPARATOR.md5($info['filenamepath']).'_'.$thisfile_ape_items_current['data_offset']; + if (!file_exists($destination_filename) || is_writable($destination_filename)) { + file_put_contents($destination_filename, $thisfile_ape_items_current['data']); + } else { + $info['warning'][] = 'attachment at '.$thisfile_ape_items_current['offset'].' cannot be saved to "'.$destination_filename.'" (not writable)'; + } + $thisfile_ape_items_current['data_filename'] = $destination_filename; + unset($thisfile_ape_items_current['data']); + } else { + if (!isset($info['ape']['comments']['picture'])) { + $info['ape']['comments']['picture'] = array(); + } + $info['ape']['comments']['picture'][] = array('data'=>$thisfile_ape_items_current['data'], 'image_mime'=>$thisfile_ape_items_current['image_mime']); + } + } while (false); + break; + + default: + if (is_array($thisfile_ape_items_current['data'])) { + foreach ($thisfile_ape_items_current['data'] as $comment) { + $thisfile_ape['comments'][strtolower($item_key)][] = $comment; + } + } + break; + } + + } + if (empty($thisfile_replaygain)) { + unset($info['replay_gain']); + } + return true; + } + + public function parseAPEheaderFooter($APEheaderFooterData) { + // http://www.uni-jena.de/~pfk/mpp/sv8/apeheader.html + + // shortcut + $headerfooterinfo['raw'] = array(); + $headerfooterinfo_raw = &$headerfooterinfo['raw']; + + $headerfooterinfo_raw['footer_tag'] = substr($APEheaderFooterData, 0, 8); + if ($headerfooterinfo_raw['footer_tag'] != 'APETAGEX') { + return false; + } + $headerfooterinfo_raw['version'] = getid3_lib::LittleEndian2Int(substr($APEheaderFooterData, 8, 4)); + $headerfooterinfo_raw['tagsize'] = getid3_lib::LittleEndian2Int(substr($APEheaderFooterData, 12, 4)); + $headerfooterinfo_raw['tag_items'] = getid3_lib::LittleEndian2Int(substr($APEheaderFooterData, 16, 4)); + $headerfooterinfo_raw['global_flags'] = getid3_lib::LittleEndian2Int(substr($APEheaderFooterData, 20, 4)); + $headerfooterinfo_raw['reserved'] = substr($APEheaderFooterData, 24, 8); + + $headerfooterinfo['tag_version'] = $headerfooterinfo_raw['version'] / 1000; + if ($headerfooterinfo['tag_version'] >= 2) { + $headerfooterinfo['flags'] = $this->parseAPEtagFlags($headerfooterinfo_raw['global_flags']); + } + return $headerfooterinfo; + } + + public function parseAPEtagFlags($rawflagint) { + // "Note: APE Tags 1.0 do not use any of the APE Tag flags. + // All are set to zero on creation and ignored on reading." + // http://www.uni-jena.de/~pfk/mpp/sv8/apetagflags.html + $flags['header'] = (bool) ($rawflagint & 0x80000000); + $flags['footer'] = (bool) ($rawflagint & 0x40000000); + $flags['this_is_header'] = (bool) ($rawflagint & 0x20000000); + $flags['item_contents_raw'] = ($rawflagint & 0x00000006) >> 1; + $flags['read_only'] = (bool) ($rawflagint & 0x00000001); + + $flags['item_contents'] = $this->APEcontentTypeFlagLookup($flags['item_contents_raw']); + + return $flags; + } + + public function APEcontentTypeFlagLookup($contenttypeid) { + static $APEcontentTypeFlagLookup = array( + 0 => 'utf-8', + 1 => 'binary', + 2 => 'external', + 3 => 'reserved' + ); + return (isset($APEcontentTypeFlagLookup[$contenttypeid]) ? $APEcontentTypeFlagLookup[$contenttypeid] : 'invalid'); + } + + public function APEtagItemIsUTF8Lookup($itemkey) { + static $APEtagItemIsUTF8Lookup = array( + 'title', + 'subtitle', + 'artist', + 'album', + 'debut album', + 'publisher', + 'conductor', + 'track', + 'composer', + 'comment', + 'copyright', + 'publicationright', + 'file', + 'year', + 'record date', + 'record location', + 'genre', + 'media', + 'related', + 'isrc', + 'abstract', + 'language', + 'bibliography' + ); + return in_array(strtolower($itemkey), $APEtagItemIsUTF8Lookup); + } + +} diff --git a/src/wp-includes/ID3/module.tag.id3v1.php b/src/wp-includes/ID3/module.tag.id3v1.php new file mode 100644 index 0000000..fd9069e --- /dev/null +++ b/src/wp-includes/ID3/module.tag.id3v1.php @@ -0,0 +1,359 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +// // +// module.tag.id3v1.php // +// module for analyzing ID3v1 tags // +// dependencies: NONE // +// /// +///////////////////////////////////////////////////////////////// + + +class getid3_id3v1 extends getid3_handler +{ + + public function Analyze() { + $info = &$this->getid3->info; + + if (!getid3_lib::intValueSupported($info['filesize'])) { + $info['warning'][] = 'Unable to check for ID3v1 because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB'; + return false; + } + + fseek($this->getid3->fp, -256, SEEK_END); + $preid3v1 = fread($this->getid3->fp, 128); + $id3v1tag = fread($this->getid3->fp, 128); + + if (substr($id3v1tag, 0, 3) == 'TAG') { + + $info['avdataend'] = $info['filesize'] - 128; + + $ParsedID3v1['title'] = $this->cutfield(substr($id3v1tag, 3, 30)); + $ParsedID3v1['artist'] = $this->cutfield(substr($id3v1tag, 33, 30)); + $ParsedID3v1['album'] = $this->cutfield(substr($id3v1tag, 63, 30)); + $ParsedID3v1['year'] = $this->cutfield(substr($id3v1tag, 93, 4)); + $ParsedID3v1['comment'] = substr($id3v1tag, 97, 30); // can't remove nulls yet, track detection depends on them + $ParsedID3v1['genreid'] = ord(substr($id3v1tag, 127, 1)); + + // If second-last byte of comment field is null and last byte of comment field is non-null + // then this is ID3v1.1 and the comment field is 28 bytes long and the 30th byte is the track number + if (($id3v1tag{125} === "\x00") && ($id3v1tag{126} !== "\x00")) { + $ParsedID3v1['track'] = ord(substr($ParsedID3v1['comment'], 29, 1)); + $ParsedID3v1['comment'] = substr($ParsedID3v1['comment'], 0, 28); + } + $ParsedID3v1['comment'] = $this->cutfield($ParsedID3v1['comment']); + + $ParsedID3v1['genre'] = $this->LookupGenreName($ParsedID3v1['genreid']); + if (!empty($ParsedID3v1['genre'])) { + unset($ParsedID3v1['genreid']); + } + if (isset($ParsedID3v1['genre']) && (empty($ParsedID3v1['genre']) || ($ParsedID3v1['genre'] == 'Unknown'))) { + unset($ParsedID3v1['genre']); + } + + foreach ($ParsedID3v1 as $key => $value) { + $ParsedID3v1['comments'][$key][0] = $value; + } + + // ID3v1 data is supposed to be padded with NULL characters, but some taggers pad with spaces + $GoodFormatID3v1tag = $this->GenerateID3v1Tag( + $ParsedID3v1['title'], + $ParsedID3v1['artist'], + $ParsedID3v1['album'], + $ParsedID3v1['year'], + (isset($ParsedID3v1['genre']) ? $this->LookupGenreID($ParsedID3v1['genre']) : false), + $ParsedID3v1['comment'], + (!empty($ParsedID3v1['track']) ? $ParsedID3v1['track'] : '')); + $ParsedID3v1['padding_valid'] = true; + if ($id3v1tag !== $GoodFormatID3v1tag) { + $ParsedID3v1['padding_valid'] = false; + $info['warning'][] = 'Some ID3v1 fields do not use NULL characters for padding'; + } + + $ParsedID3v1['tag_offset_end'] = $info['filesize']; + $ParsedID3v1['tag_offset_start'] = $ParsedID3v1['tag_offset_end'] - 128; + + $info['id3v1'] = $ParsedID3v1; + } + + if (substr($preid3v1, 0, 3) == 'TAG') { + // The way iTunes handles tags is, well, brain-damaged. + // It completely ignores v1 if ID3v2 is present. + // This goes as far as adding a new v1 tag *even if there already is one* + + // A suspected double-ID3v1 tag has been detected, but it could be that + // the "TAG" identifier is a legitimate part of an APE or Lyrics3 tag + if (substr($preid3v1, 96, 8) == 'APETAGEX') { + // an APE tag footer was found before the last ID3v1, assume false "TAG" synch + } elseif (substr($preid3v1, 119, 6) == 'LYRICS') { + // a Lyrics3 tag footer was found before the last ID3v1, assume false "TAG" synch + } else { + // APE and Lyrics3 footers not found - assume double ID3v1 + $info['warning'][] = 'Duplicate ID3v1 tag detected - this has been known to happen with iTunes'; + $info['avdataend'] -= 128; + } + } + + return true; + } + + public static function cutfield($str) { + return trim(substr($str, 0, strcspn($str, "\x00"))); + } + + public static function ArrayOfGenres($allowSCMPXextended=false) { + static $GenreLookup = array( + 0 => 'Blues', + 1 => 'Classic Rock', + 2 => 'Country', + 3 => 'Dance', + 4 => 'Disco', + 5 => 'Funk', + 6 => 'Grunge', + 7 => 'Hip-Hop', + 8 => 'Jazz', + 9 => 'Metal', + 10 => 'New Age', + 11 => 'Oldies', + 12 => 'Other', + 13 => 'Pop', + 14 => 'R&B', + 15 => 'Rap', + 16 => 'Reggae', + 17 => 'Rock', + 18 => 'Techno', + 19 => 'Industrial', + 20 => 'Alternative', + 21 => 'Ska', + 22 => 'Death Metal', + 23 => 'Pranks', + 24 => 'Soundtrack', + 25 => 'Euro-Techno', + 26 => 'Ambient', + 27 => 'Trip-Hop', + 28 => 'Vocal', + 29 => 'Jazz+Funk', + 30 => 'Fusion', + 31 => 'Trance', + 32 => 'Classical', + 33 => 'Instrumental', + 34 => 'Acid', + 35 => 'House', + 36 => 'Game', + 37 => 'Sound Clip', + 38 => 'Gospel', + 39 => 'Noise', + 40 => 'Alt. Rock', + 41 => 'Bass', + 42 => 'Soul', + 43 => 'Punk', + 44 => 'Space', + 45 => 'Meditative', + 46 => 'Instrumental Pop', + 47 => 'Instrumental Rock', + 48 => 'Ethnic', + 49 => 'Gothic', + 50 => 'Darkwave', + 51 => 'Techno-Industrial', + 52 => 'Electronic', + 53 => 'Pop-Folk', + 54 => 'Eurodance', + 55 => 'Dream', + 56 => 'Southern Rock', + 57 => 'Comedy', + 58 => 'Cult', + 59 => 'Gangsta Rap', + 60 => 'Top 40', + 61 => 'Christian Rap', + 62 => 'Pop/Funk', + 63 => 'Jungle', + 64 => 'Native American', + 65 => 'Cabaret', + 66 => 'New Wave', + 67 => 'Psychedelic', + 68 => 'Rave', + 69 => 'Showtunes', + 70 => 'Trailer', + 71 => 'Lo-Fi', + 72 => 'Tribal', + 73 => 'Acid Punk', + 74 => 'Acid Jazz', + 75 => 'Polka', + 76 => 'Retro', + 77 => 'Musical', + 78 => 'Rock & Roll', + 79 => 'Hard Rock', + 80 => 'Folk', + 81 => 'Folk/Rock', + 82 => 'National Folk', + 83 => 'Swing', + 84 => 'Fast-Fusion', + 85 => 'Bebob', + 86 => 'Latin', + 87 => 'Revival', + 88 => 'Celtic', + 89 => 'Bluegrass', + 90 => 'Avantgarde', + 91 => 'Gothic Rock', + 92 => 'Progressive Rock', + 93 => 'Psychedelic Rock', + 94 => 'Symphonic Rock', + 95 => 'Slow Rock', + 96 => 'Big Band', + 97 => 'Chorus', + 98 => 'Easy Listening', + 99 => 'Acoustic', + 100 => 'Humour', + 101 => 'Speech', + 102 => 'Chanson', + 103 => 'Opera', + 104 => 'Chamber Music', + 105 => 'Sonata', + 106 => 'Symphony', + 107 => 'Booty Bass', + 108 => 'Primus', + 109 => 'Porn Groove', + 110 => 'Satire', + 111 => 'Slow Jam', + 112 => 'Club', + 113 => 'Tango', + 114 => 'Samba', + 115 => 'Folklore', + 116 => 'Ballad', + 117 => 'Power Ballad', + 118 => 'Rhythmic Soul', + 119 => 'Freestyle', + 120 => 'Duet', + 121 => 'Punk Rock', + 122 => 'Drum Solo', + 123 => 'A Cappella', + 124 => 'Euro-House', + 125 => 'Dance Hall', + 126 => 'Goa', + 127 => 'Drum & Bass', + 128 => 'Club-House', + 129 => 'Hardcore', + 130 => 'Terror', + 131 => 'Indie', + 132 => 'BritPop', + 133 => 'Negerpunk', + 134 => 'Polsk Punk', + 135 => 'Beat', + 136 => 'Christian Gangsta Rap', + 137 => 'Heavy Metal', + 138 => 'Black Metal', + 139 => 'Crossover', + 140 => 'Contemporary Christian', + 141 => 'Christian Rock', + 142 => 'Merengue', + 143 => 'Salsa', + 144 => 'Thrash Metal', + 145 => 'Anime', + 146 => 'JPop', + 147 => 'Synthpop', + + 255 => 'Unknown', + + 'CR' => 'Cover', + 'RX' => 'Remix' + ); + + static $GenreLookupSCMPX = array(); + if ($allowSCMPXextended && empty($GenreLookupSCMPX)) { + $GenreLookupSCMPX = $GenreLookup; + // http://www.geocities.co.jp/SiliconValley-Oakland/3664/alittle.html#GenreExtended + // Extended ID3v1 genres invented by SCMPX + // Note that 255 "Japanese Anime" conflicts with standard "Unknown" + $GenreLookupSCMPX[240] = 'Sacred'; + $GenreLookupSCMPX[241] = 'Northern Europe'; + $GenreLookupSCMPX[242] = 'Irish & Scottish'; + $GenreLookupSCMPX[243] = 'Scotland'; + $GenreLookupSCMPX[244] = 'Ethnic Europe'; + $GenreLookupSCMPX[245] = 'Enka'; + $GenreLookupSCMPX[246] = 'Children\'s Song'; + $GenreLookupSCMPX[247] = 'Japanese Sky'; + $GenreLookupSCMPX[248] = 'Japanese Heavy Rock'; + $GenreLookupSCMPX[249] = 'Japanese Doom Rock'; + $GenreLookupSCMPX[250] = 'Japanese J-POP'; + $GenreLookupSCMPX[251] = 'Japanese Seiyu'; + $GenreLookupSCMPX[252] = 'Japanese Ambient Techno'; + $GenreLookupSCMPX[253] = 'Japanese Moemoe'; + $GenreLookupSCMPX[254] = 'Japanese Tokusatsu'; + //$GenreLookupSCMPX[255] = 'Japanese Anime'; + } + + return ($allowSCMPXextended ? $GenreLookupSCMPX : $GenreLookup); + } + + public static function LookupGenreName($genreid, $allowSCMPXextended=true) { + switch ($genreid) { + case 'RX': + case 'CR': + break; + default: + if (!is_numeric($genreid)) { + return false; + } + $genreid = intval($genreid); // to handle 3 or '3' or '03' + break; + } + $GenreLookup = self::ArrayOfGenres($allowSCMPXextended); + return (isset($GenreLookup[$genreid]) ? $GenreLookup[$genreid] : false); + } + + public static function LookupGenreID($genre, $allowSCMPXextended=false) { + $GenreLookup = self::ArrayOfGenres($allowSCMPXextended); + $LowerCaseNoSpaceSearchTerm = strtolower(str_replace(' ', '', $genre)); + foreach ($GenreLookup as $key => $value) { + if (strtolower(str_replace(' ', '', $value)) == $LowerCaseNoSpaceSearchTerm) { + return $key; + } + } + return false; + } + + public static function StandardiseID3v1GenreName($OriginalGenre) { + if (($GenreID = self::LookupGenreID($OriginalGenre)) !== false) { + return self::LookupGenreName($GenreID); + } + return $OriginalGenre; + } + + public static function GenerateID3v1Tag($title, $artist, $album, $year, $genreid, $comment, $track='') { + $ID3v1Tag = 'TAG'; + $ID3v1Tag .= str_pad(trim(substr($title, 0, 30)), 30, "\x00", STR_PAD_RIGHT); + $ID3v1Tag .= str_pad(trim(substr($artist, 0, 30)), 30, "\x00", STR_PAD_RIGHT); + $ID3v1Tag .= str_pad(trim(substr($album, 0, 30)), 30, "\x00", STR_PAD_RIGHT); + $ID3v1Tag .= str_pad(trim(substr($year, 0, 4)), 4, "\x00", STR_PAD_LEFT); + if (!empty($track) && ($track > 0) && ($track <= 255)) { + $ID3v1Tag .= str_pad(trim(substr($comment, 0, 28)), 28, "\x00", STR_PAD_RIGHT); + $ID3v1Tag .= "\x00"; + if (gettype($track) == 'string') { + $track = (int) $track; + } + $ID3v1Tag .= chr($track); + } else { + $ID3v1Tag .= str_pad(trim(substr($comment, 0, 30)), 30, "\x00", STR_PAD_RIGHT); + } + if (($genreid < 0) || ($genreid > 147)) { + $genreid = 255; // 'unknown' genre + } + switch (gettype($genreid)) { + case 'string': + case 'integer': + $ID3v1Tag .= chr(intval($genreid)); + break; + default: + $ID3v1Tag .= chr(255); // 'unknown' genre + break; + } + + return $ID3v1Tag; + } + +} diff --git a/src/wp-includes/ID3/module.tag.id3v2.php b/src/wp-includes/ID3/module.tag.id3v2.php new file mode 100644 index 0000000..b08f9f9 --- /dev/null +++ b/src/wp-includes/ID3/module.tag.id3v2.php @@ -0,0 +1,3414 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +/// // +// module.tag.id3v2.php // +// module for analyzing ID3v2 tags // +// dependencies: module.tag.id3v1.php // +// /// +///////////////////////////////////////////////////////////////// + +getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v1.php', __FILE__, true); + +class getid3_id3v2 extends getid3_handler +{ + public $StartingOffset = 0; + + public function Analyze() { + $info = &$this->getid3->info; + + // Overall tag structure: + // +-----------------------------+ + // | Header (10 bytes) | + // +-----------------------------+ + // | Extended Header | + // | (variable length, OPTIONAL) | + // +-----------------------------+ + // | Frames (variable length) | + // +-----------------------------+ + // | Padding | + // | (variable length, OPTIONAL) | + // +-----------------------------+ + // | Footer (10 bytes, OPTIONAL) | + // +-----------------------------+ + + // Header + // ID3v2/file identifier "ID3" + // ID3v2 version $04 00 + // ID3v2 flags (%ab000000 in v2.2, %abc00000 in v2.3, %abcd0000 in v2.4.x) + // ID3v2 size 4 * %0xxxxxxx + + + // shortcuts + $info['id3v2']['header'] = true; + $thisfile_id3v2 = &$info['id3v2']; + $thisfile_id3v2['flags'] = array(); + $thisfile_id3v2_flags = &$thisfile_id3v2['flags']; + + + fseek($this->getid3->fp, $this->StartingOffset, SEEK_SET); + $header = fread($this->getid3->fp, 10); + if (substr($header, 0, 3) == 'ID3' && strlen($header) == 10) { + + $thisfile_id3v2['majorversion'] = ord($header{3}); + $thisfile_id3v2['minorversion'] = ord($header{4}); + + // shortcut + $id3v2_majorversion = &$thisfile_id3v2['majorversion']; + + } else { + + unset($info['id3v2']); + return false; + + } + + if ($id3v2_majorversion > 4) { // this script probably won't correctly parse ID3v2.5.x and above (if it ever exists) + + $info['error'][] = 'this script only parses up to ID3v2.4.x - this tag is ID3v2.'.$id3v2_majorversion.'.'.$thisfile_id3v2['minorversion']; + return false; + + } + + $id3_flags = ord($header{5}); + switch ($id3v2_majorversion) { + case 2: + // %ab000000 in v2.2 + $thisfile_id3v2_flags['unsynch'] = (bool) ($id3_flags & 0x80); // a - Unsynchronisation + $thisfile_id3v2_flags['compression'] = (bool) ($id3_flags & 0x40); // b - Compression + break; + + case 3: + // %abc00000 in v2.3 + $thisfile_id3v2_flags['unsynch'] = (bool) ($id3_flags & 0x80); // a - Unsynchronisation + $thisfile_id3v2_flags['exthead'] = (bool) ($id3_flags & 0x40); // b - Extended header + $thisfile_id3v2_flags['experim'] = (bool) ($id3_flags & 0x20); // c - Experimental indicator + break; + + case 4: + // %abcd0000 in v2.4 + $thisfile_id3v2_flags['unsynch'] = (bool) ($id3_flags & 0x80); // a - Unsynchronisation + $thisfile_id3v2_flags['exthead'] = (bool) ($id3_flags & 0x40); // b - Extended header + $thisfile_id3v2_flags['experim'] = (bool) ($id3_flags & 0x20); // c - Experimental indicator + $thisfile_id3v2_flags['isfooter'] = (bool) ($id3_flags & 0x10); // d - Footer present + break; + } + + $thisfile_id3v2['headerlength'] = getid3_lib::BigEndian2Int(substr($header, 6, 4), 1) + 10; // length of ID3v2 tag in 10-byte header doesn't include 10-byte header length + + $thisfile_id3v2['tag_offset_start'] = $this->StartingOffset; + $thisfile_id3v2['tag_offset_end'] = $thisfile_id3v2['tag_offset_start'] + $thisfile_id3v2['headerlength']; + + + + // create 'encoding' key - used by getid3::HandleAllTags() + // in ID3v2 every field can have it's own encoding type + // so force everything to UTF-8 so it can be handled consistantly + $thisfile_id3v2['encoding'] = 'UTF-8'; + + + // Frames + + // All ID3v2 frames consists of one frame header followed by one or more + // fields containing the actual information. The header is always 10 + // bytes and laid out as follows: + // + // Frame ID $xx xx xx xx (four characters) + // Size 4 * %0xxxxxxx + // Flags $xx xx + + $sizeofframes = $thisfile_id3v2['headerlength'] - 10; // not including 10-byte initial header + if (!empty($thisfile_id3v2['exthead']['length'])) { + $sizeofframes -= ($thisfile_id3v2['exthead']['length'] + 4); + } + if (!empty($thisfile_id3v2_flags['isfooter'])) { + $sizeofframes -= 10; // footer takes last 10 bytes of ID3v2 header, after frame data, before audio + } + if ($sizeofframes > 0) { + + $framedata = fread($this->getid3->fp, $sizeofframes); // read all frames from file into $framedata variable + + // if entire frame data is unsynched, de-unsynch it now (ID3v2.3.x) + if (!empty($thisfile_id3v2_flags['unsynch']) && ($id3v2_majorversion <= 3)) { + $framedata = $this->DeUnsynchronise($framedata); + } + // [in ID3v2.4.0] Unsynchronisation [S:6.1] is done on frame level, instead + // of on tag level, making it easier to skip frames, increasing the streamability + // of the tag. The unsynchronisation flag in the header [S:3.1] indicates that + // there exists an unsynchronised frame, while the new unsynchronisation flag in + // the frame header [S:4.1.2] indicates unsynchronisation. + + + //$framedataoffset = 10 + ($thisfile_id3v2['exthead']['length'] ? $thisfile_id3v2['exthead']['length'] + 4 : 0); // how many bytes into the stream - start from after the 10-byte header (and extended header length+4, if present) + $framedataoffset = 10; // how many bytes into the stream - start from after the 10-byte header + + + // Extended Header + if (!empty($thisfile_id3v2_flags['exthead'])) { + $extended_header_offset = 0; + + if ($id3v2_majorversion == 3) { + + // v2.3 definition: + //Extended header size $xx xx xx xx // 32-bit integer + //Extended Flags $xx xx + // %x0000000 %00000000 // v2.3 + // x - CRC data present + //Size of padding $xx xx xx xx + + $thisfile_id3v2['exthead']['length'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 4), 0); + $extended_header_offset += 4; + + $thisfile_id3v2['exthead']['flag_bytes'] = 2; + $thisfile_id3v2['exthead']['flag_raw'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, $thisfile_id3v2['exthead']['flag_bytes'])); + $extended_header_offset += $thisfile_id3v2['exthead']['flag_bytes']; + + $thisfile_id3v2['exthead']['flags']['crc'] = (bool) ($thisfile_id3v2['exthead']['flag_raw'] & 0x8000); + + $thisfile_id3v2['exthead']['padding_size'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 4)); + $extended_header_offset += 4; + + if ($thisfile_id3v2['exthead']['flags']['crc']) { + $thisfile_id3v2['exthead']['flag_data']['crc'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 4)); + $extended_header_offset += 4; + } + $extended_header_offset += $thisfile_id3v2['exthead']['padding_size']; + + } elseif ($id3v2_majorversion == 4) { + + // v2.4 definition: + //Extended header size 4 * %0xxxxxxx // 28-bit synchsafe integer + //Number of flag bytes $01 + //Extended Flags $xx + // %0bcd0000 // v2.4 + // b - Tag is an update + // Flag data length $00 + // c - CRC data present + // Flag data length $05 + // Total frame CRC 5 * %0xxxxxxx + // d - Tag restrictions + // Flag data length $01 + + $thisfile_id3v2['exthead']['length'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 4), true); + $extended_header_offset += 4; + + $thisfile_id3v2['exthead']['flag_bytes'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); // should always be 1 + $extended_header_offset += 1; + + $thisfile_id3v2['exthead']['flag_raw'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, $thisfile_id3v2['exthead']['flag_bytes'])); + $extended_header_offset += $thisfile_id3v2['exthead']['flag_bytes']; + + $thisfile_id3v2['exthead']['flags']['update'] = (bool) ($thisfile_id3v2['exthead']['flag_raw'] & 0x40); + $thisfile_id3v2['exthead']['flags']['crc'] = (bool) ($thisfile_id3v2['exthead']['flag_raw'] & 0x20); + $thisfile_id3v2['exthead']['flags']['restrictions'] = (bool) ($thisfile_id3v2['exthead']['flag_raw'] & 0x10); + + if ($thisfile_id3v2['exthead']['flags']['update']) { + $ext_header_chunk_length = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); // should be 0 + $extended_header_offset += 1; + } + + if ($thisfile_id3v2['exthead']['flags']['crc']) { + $ext_header_chunk_length = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); // should be 5 + $extended_header_offset += 1; + $thisfile_id3v2['exthead']['flag_data']['crc'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, $ext_header_chunk_length), true, false); + $extended_header_offset += $ext_header_chunk_length; + } + + if ($thisfile_id3v2['exthead']['flags']['restrictions']) { + $ext_header_chunk_length = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); // should be 1 + $extended_header_offset += 1; + + // %ppqrrstt + $restrictions_raw = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); + $extended_header_offset += 1; + $thisfile_id3v2['exthead']['flags']['restrictions']['tagsize'] = ($restrictions_raw & 0xC0) >> 6; // p - Tag size restrictions + $thisfile_id3v2['exthead']['flags']['restrictions']['textenc'] = ($restrictions_raw & 0x20) >> 5; // q - Text encoding restrictions + $thisfile_id3v2['exthead']['flags']['restrictions']['textsize'] = ($restrictions_raw & 0x18) >> 3; // r - Text fields size restrictions + $thisfile_id3v2['exthead']['flags']['restrictions']['imgenc'] = ($restrictions_raw & 0x04) >> 2; // s - Image encoding restrictions + $thisfile_id3v2['exthead']['flags']['restrictions']['imgsize'] = ($restrictions_raw & 0x03) >> 0; // t - Image size restrictions + + $thisfile_id3v2['exthead']['flags']['restrictions_text']['tagsize'] = $this->LookupExtendedHeaderRestrictionsTagSizeLimits($thisfile_id3v2['exthead']['flags']['restrictions']['tagsize']); + $thisfile_id3v2['exthead']['flags']['restrictions_text']['textenc'] = $this->LookupExtendedHeaderRestrictionsTextEncodings($thisfile_id3v2['exthead']['flags']['restrictions']['textenc']); + $thisfile_id3v2['exthead']['flags']['restrictions_text']['textsize'] = $this->LookupExtendedHeaderRestrictionsTextFieldSize($thisfile_id3v2['exthead']['flags']['restrictions']['textsize']); + $thisfile_id3v2['exthead']['flags']['restrictions_text']['imgenc'] = $this->LookupExtendedHeaderRestrictionsImageEncoding($thisfile_id3v2['exthead']['flags']['restrictions']['imgenc']); + $thisfile_id3v2['exthead']['flags']['restrictions_text']['imgsize'] = $this->LookupExtendedHeaderRestrictionsImageSizeSize($thisfile_id3v2['exthead']['flags']['restrictions']['imgsize']); + } + + if ($thisfile_id3v2['exthead']['length'] != $extended_header_offset) { + $info['warning'][] = 'ID3v2.4 extended header length mismatch (expecting '.intval($thisfile_id3v2['exthead']['length']).', found '.intval($extended_header_offset).')'; + } + } + + $framedataoffset += $extended_header_offset; + $framedata = substr($framedata, $extended_header_offset); + } // end extended header + + + while (isset($framedata) && (strlen($framedata) > 0)) { // cycle through until no more frame data is left to parse + if (strlen($framedata) <= $this->ID3v2HeaderLength($id3v2_majorversion)) { + // insufficient room left in ID3v2 header for actual data - must be padding + $thisfile_id3v2['padding']['start'] = $framedataoffset; + $thisfile_id3v2['padding']['length'] = strlen($framedata); + $thisfile_id3v2['padding']['valid'] = true; + for ($i = 0; $i < $thisfile_id3v2['padding']['length']; $i++) { + if ($framedata{$i} != "\x00") { + $thisfile_id3v2['padding']['valid'] = false; + $thisfile_id3v2['padding']['errorpos'] = $thisfile_id3v2['padding']['start'] + $i; + $info['warning'][] = 'Invalid ID3v2 padding found at offset '.$thisfile_id3v2['padding']['errorpos'].' (the remaining '.($thisfile_id3v2['padding']['length'] - $i).' bytes are considered invalid)'; + break; + } + } + break; // skip rest of ID3v2 header + } + if ($id3v2_majorversion == 2) { + // Frame ID $xx xx xx (three characters) + // Size $xx xx xx (24-bit integer) + // Flags $xx xx + + $frame_header = substr($framedata, 0, 6); // take next 6 bytes for header + $framedata = substr($framedata, 6); // and leave the rest in $framedata + $frame_name = substr($frame_header, 0, 3); + $frame_size = getid3_lib::BigEndian2Int(substr($frame_header, 3, 3), 0); + $frame_flags = 0; // not used for anything in ID3v2.2, just set to avoid E_NOTICEs + + } elseif ($id3v2_majorversion > 2) { + + // Frame ID $xx xx xx xx (four characters) + // Size $xx xx xx xx (32-bit integer in v2.3, 28-bit synchsafe in v2.4+) + // Flags $xx xx + + $frame_header = substr($framedata, 0, 10); // take next 10 bytes for header + $framedata = substr($framedata, 10); // and leave the rest in $framedata + + $frame_name = substr($frame_header, 0, 4); + if ($id3v2_majorversion == 3) { + $frame_size = getid3_lib::BigEndian2Int(substr($frame_header, 4, 4), 0); // 32-bit integer + } else { // ID3v2.4+ + $frame_size = getid3_lib::BigEndian2Int(substr($frame_header, 4, 4), 1); // 32-bit synchsafe integer (28-bit value) + } + + if ($frame_size < (strlen($framedata) + 4)) { + $nextFrameID = substr($framedata, $frame_size, 4); + if ($this->IsValidID3v2FrameName($nextFrameID, $id3v2_majorversion)) { + // next frame is OK + } elseif (($frame_name == "\x00".'MP3') || ($frame_name == "\x00\x00".'MP') || ($frame_name == ' MP3') || ($frame_name == 'MP3e')) { + // MP3ext known broken frames - "ok" for the purposes of this test + } elseif (($id3v2_majorversion == 4) && ($this->IsValidID3v2FrameName(substr($framedata, getid3_lib::BigEndian2Int(substr($frame_header, 4, 4), 0), 4), 3))) { + $info['warning'][] = 'ID3v2 tag written as ID3v2.4, but with non-synchsafe integers (ID3v2.3 style). Older versions of (Helium2; iTunes) are known culprits of this. Tag has been parsed as ID3v2.3'; + $id3v2_majorversion = 3; + $frame_size = getid3_lib::BigEndian2Int(substr($frame_header, 4, 4), 0); // 32-bit integer + } + } + + + $frame_flags = getid3_lib::BigEndian2Int(substr($frame_header, 8, 2)); + } + + if ((($id3v2_majorversion == 2) && ($frame_name == "\x00\x00\x00")) || ($frame_name == "\x00\x00\x00\x00")) { + // padding encountered + + $thisfile_id3v2['padding']['start'] = $framedataoffset; + $thisfile_id3v2['padding']['length'] = strlen($frame_header) + strlen($framedata); + $thisfile_id3v2['padding']['valid'] = true; + + $len = strlen($framedata); + for ($i = 0; $i < $len; $i++) { + if ($framedata{$i} != "\x00") { + $thisfile_id3v2['padding']['valid'] = false; + $thisfile_id3v2['padding']['errorpos'] = $thisfile_id3v2['padding']['start'] + $i; + $info['warning'][] = 'Invalid ID3v2 padding found at offset '.$thisfile_id3v2['padding']['errorpos'].' (the remaining '.($thisfile_id3v2['padding']['length'] - $i).' bytes are considered invalid)'; + break; + } + } + break; // skip rest of ID3v2 header + } + + if ($frame_name == 'COM ') { + $info['warning'][] = 'error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag). (ERROR: IsValidID3v2FrameName("'.str_replace("\x00", ' ', $frame_name).'", '.$id3v2_majorversion.'))). [Note: this particular error has been known to happen with tags edited by iTunes (versions "X v2.0.3", "v3.0.1" are known-guilty, probably others too)]'; + $frame_name = 'COMM'; + } + if (($frame_size <= strlen($framedata)) && ($this->IsValidID3v2FrameName($frame_name, $id3v2_majorversion))) { + + unset($parsedFrame); + $parsedFrame['frame_name'] = $frame_name; + $parsedFrame['frame_flags_raw'] = $frame_flags; + $parsedFrame['data'] = substr($framedata, 0, $frame_size); + $parsedFrame['datalength'] = getid3_lib::CastAsInt($frame_size); + $parsedFrame['dataoffset'] = $framedataoffset; + + $this->ParseID3v2Frame($parsedFrame); + $thisfile_id3v2[$frame_name][] = $parsedFrame; + + $framedata = substr($framedata, $frame_size); + + } else { // invalid frame length or FrameID + + if ($frame_size <= strlen($framedata)) { + + if ($this->IsValidID3v2FrameName(substr($framedata, $frame_size, 4), $id3v2_majorversion)) { + + // next frame is valid, just skip the current frame + $framedata = substr($framedata, $frame_size); + $info['warning'][] = 'Next ID3v2 frame is valid, skipping current frame.'; + + } else { + + // next frame is invalid too, abort processing + //unset($framedata); + $framedata = null; + $info['error'][] = 'Next ID3v2 frame is also invalid, aborting processing.'; + + } + + } elseif ($frame_size == strlen($framedata)) { + + // this is the last frame, just skip + $info['warning'][] = 'This was the last ID3v2 frame.'; + + } else { + + // next frame is invalid too, abort processing + //unset($framedata); + $framedata = null; + $info['warning'][] = 'Invalid ID3v2 frame size, aborting.'; + + } + if (!$this->IsValidID3v2FrameName($frame_name, $id3v2_majorversion)) { + + switch ($frame_name) { + case "\x00\x00".'MP': + case "\x00".'MP3': + case ' MP3': + case 'MP3e': + case "\x00".'MP': + case ' MP': + case 'MP3': + $info['warning'][] = 'error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag). (ERROR: !IsValidID3v2FrameName("'.str_replace("\x00", ' ', $frame_name).'", '.$id3v2_majorversion.'))). [Note: this particular error has been known to happen with tags edited by "MP3ext (www.mutschler.de/mp3ext/)"]'; + break; + + default: + $info['warning'][] = 'error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag). (ERROR: !IsValidID3v2FrameName("'.str_replace("\x00", ' ', $frame_name).'", '.$id3v2_majorversion.'))).'; + break; + } + + } elseif (!isset($framedata) || ($frame_size > strlen($framedata))) { + + $info['error'][] = 'error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag). (ERROR: $frame_size ('.$frame_size.') > strlen($framedata) ('.(isset($framedata) ? strlen($framedata) : 'null').')).'; + + } else { + + $info['error'][] = 'error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag).'; + + } + + } + $framedataoffset += ($frame_size + $this->ID3v2HeaderLength($id3v2_majorversion)); + + } + + } + + + // Footer + + // The footer is a copy of the header, but with a different identifier. + // ID3v2 identifier "3DI" + // ID3v2 version $04 00 + // ID3v2 flags %abcd0000 + // ID3v2 size 4 * %0xxxxxxx + + if (isset($thisfile_id3v2_flags['isfooter']) && $thisfile_id3v2_flags['isfooter']) { + $footer = fread($this->getid3->fp, 10); + if (substr($footer, 0, 3) == '3DI') { + $thisfile_id3v2['footer'] = true; + $thisfile_id3v2['majorversion_footer'] = ord($footer{3}); + $thisfile_id3v2['minorversion_footer'] = ord($footer{4}); + } + if ($thisfile_id3v2['majorversion_footer'] <= 4) { + $id3_flags = ord(substr($footer{5})); + $thisfile_id3v2_flags['unsynch_footer'] = (bool) ($id3_flags & 0x80); + $thisfile_id3v2_flags['extfoot_footer'] = (bool) ($id3_flags & 0x40); + $thisfile_id3v2_flags['experim_footer'] = (bool) ($id3_flags & 0x20); + $thisfile_id3v2_flags['isfooter_footer'] = (bool) ($id3_flags & 0x10); + + $thisfile_id3v2['footerlength'] = getid3_lib::BigEndian2Int(substr($footer, 6, 4), 1); + } + } // end footer + + if (isset($thisfile_id3v2['comments']['genre'])) { + foreach ($thisfile_id3v2['comments']['genre'] as $key => $value) { + unset($thisfile_id3v2['comments']['genre'][$key]); + $thisfile_id3v2['comments'] = getid3_lib::array_merge_noclobber($thisfile_id3v2['comments'], array('genre'=>$this->ParseID3v2GenreString($value))); + } + } + + if (isset($thisfile_id3v2['comments']['track'])) { + foreach ($thisfile_id3v2['comments']['track'] as $key => $value) { + if (strstr($value, '/')) { + list($thisfile_id3v2['comments']['tracknum'][$key], $thisfile_id3v2['comments']['totaltracks'][$key]) = explode('/', $thisfile_id3v2['comments']['track'][$key]); + } + } + } + + if (!isset($thisfile_id3v2['comments']['year']) && !empty($thisfile_id3v2['comments']['recording_time'][0]) && preg_match('#^([0-9]{4})#', trim($thisfile_id3v2['comments']['recording_time'][0]), $matches)) { + $thisfile_id3v2['comments']['year'] = array($matches[1]); + } + + + if (!empty($thisfile_id3v2['TXXX'])) { + // MediaMonkey does this, maybe others: write a blank RGAD frame, but put replay-gain adjustment values in TXXX frames + foreach ($thisfile_id3v2['TXXX'] as $txxx_array) { + switch ($txxx_array['description']) { + case 'replaygain_track_gain': + if (empty($info['replay_gain']['track']['adjustment']) && !empty($txxx_array['data'])) { + $info['replay_gain']['track']['adjustment'] = floatval(trim(str_replace('dB', '', $txxx_array['data']))); + } + break; + case 'replaygain_track_peak': + if (empty($info['replay_gain']['track']['peak']) && !empty($txxx_array['data'])) { + $info['replay_gain']['track']['peak'] = floatval($txxx_array['data']); + } + break; + case 'replaygain_album_gain': + if (empty($info['replay_gain']['album']['adjustment']) && !empty($txxx_array['data'])) { + $info['replay_gain']['album']['adjustment'] = floatval(trim(str_replace('dB', '', $txxx_array['data']))); + } + break; + } + } + } + + + // Set avdataoffset + $info['avdataoffset'] = $thisfile_id3v2['headerlength']; + if (isset($thisfile_id3v2['footer'])) { + $info['avdataoffset'] += 10; + } + + return true; + } + + + public function ParseID3v2GenreString($genrestring) { + // Parse genres into arrays of genreName and genreID + // ID3v2.2.x, ID3v2.3.x: '(21)' or '(4)Eurodisco' or '(51)(39)' or '(55)((I think...)' + // ID3v2.4.x: '21' $00 'Eurodisco' $00 + $clean_genres = array(); + if (strpos($genrestring, "\x00") === false) { + $genrestring = preg_replace('#\(([0-9]{1,3})\)#', '$1'."\x00", $genrestring); + } + $genre_elements = explode("\x00", $genrestring); + foreach ($genre_elements as $element) { + $element = trim($element); + if ($element) { + if (preg_match('#^[0-9]{1,3}#', $element)) { + $clean_genres[] = getid3_id3v1::LookupGenreName($element); + } else { + $clean_genres[] = str_replace('((', '(', $element); + } + } + } + return $clean_genres; + } + + + public function ParseID3v2Frame(&$parsedFrame) { + + // shortcuts + $info = &$this->getid3->info; + $id3v2_majorversion = $info['id3v2']['majorversion']; + + $parsedFrame['framenamelong'] = $this->FrameNameLongLookup($parsedFrame['frame_name']); + if (empty($parsedFrame['framenamelong'])) { + unset($parsedFrame['framenamelong']); + } + $parsedFrame['framenameshort'] = $this->FrameNameShortLookup($parsedFrame['frame_name']); + if (empty($parsedFrame['framenameshort'])) { + unset($parsedFrame['framenameshort']); + } + + if ($id3v2_majorversion >= 3) { // frame flags are not part of the ID3v2.2 standard + if ($id3v2_majorversion == 3) { + // Frame Header Flags + // %abc00000 %ijk00000 + $parsedFrame['flags']['TagAlterPreservation'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x8000); // a - Tag alter preservation + $parsedFrame['flags']['FileAlterPreservation'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x4000); // b - File alter preservation + $parsedFrame['flags']['ReadOnly'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x2000); // c - Read only + $parsedFrame['flags']['compression'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x0080); // i - Compression + $parsedFrame['flags']['Encryption'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x0040); // j - Encryption + $parsedFrame['flags']['GroupingIdentity'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x0020); // k - Grouping identity + + } elseif ($id3v2_majorversion == 4) { + // Frame Header Flags + // %0abc0000 %0h00kmnp + $parsedFrame['flags']['TagAlterPreservation'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x4000); // a - Tag alter preservation + $parsedFrame['flags']['FileAlterPreservation'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x2000); // b - File alter preservation + $parsedFrame['flags']['ReadOnly'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x1000); // c - Read only + $parsedFrame['flags']['GroupingIdentity'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x0040); // h - Grouping identity + $parsedFrame['flags']['compression'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x0008); // k - Compression + $parsedFrame['flags']['Encryption'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x0004); // m - Encryption + $parsedFrame['flags']['Unsynchronisation'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x0002); // n - Unsynchronisation + $parsedFrame['flags']['DataLengthIndicator'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x0001); // p - Data length indicator + + // Frame-level de-unsynchronisation - ID3v2.4 + if ($parsedFrame['flags']['Unsynchronisation']) { + $parsedFrame['data'] = $this->DeUnsynchronise($parsedFrame['data']); + } + + if ($parsedFrame['flags']['DataLengthIndicator']) { + $parsedFrame['data_length_indicator'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 0, 4), 1); + $parsedFrame['data'] = substr($parsedFrame['data'], 4); + } + } + + // Frame-level de-compression + if ($parsedFrame['flags']['compression']) { + $parsedFrame['decompressed_size'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 0, 4)); + if (!function_exists('gzuncompress')) { + $info['warning'][] = 'gzuncompress() support required to decompress ID3v2 frame "'.$parsedFrame['frame_name'].'"'; + } else { + if ($decompresseddata = @gzuncompress(substr($parsedFrame['data'], 4))) { + //if ($decompresseddata = @gzuncompress($parsedFrame['data'])) { + $parsedFrame['data'] = $decompresseddata; + unset($decompresseddata); + } else { + $info['warning'][] = 'gzuncompress() failed on compressed contents of ID3v2 frame "'.$parsedFrame['frame_name'].'"'; + } + } + } + } + + if (!empty($parsedFrame['flags']['DataLengthIndicator'])) { + if ($parsedFrame['data_length_indicator'] != strlen($parsedFrame['data'])) { + $info['warning'][] = 'ID3v2 frame "'.$parsedFrame['frame_name'].'" should be '.$parsedFrame['data_length_indicator'].' bytes long according to DataLengthIndicator, but found '.strlen($parsedFrame['data']).' bytes of data'; + } + } + + if (isset($parsedFrame['datalength']) && ($parsedFrame['datalength'] == 0)) { + + $warning = 'Frame "'.$parsedFrame['frame_name'].'" at offset '.$parsedFrame['dataoffset'].' has no data portion'; + switch ($parsedFrame['frame_name']) { + case 'WCOM': + $warning .= ' (this is known to happen with files tagged by RioPort)'; + break; + + default: + break; + } + $info['warning'][] = $warning; + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'UFID')) || // 4.1 UFID Unique file identifier + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'UFI'))) { // 4.1 UFI Unique file identifier + // There may be more than one 'UFID' frame in a tag, + // but only one with the same 'Owner identifier'. + //
                  + // Owner identifier $00 + // Identifier + $exploded = explode("\x00", $parsedFrame['data'], 2); + $parsedFrame['ownerid'] = (isset($exploded[0]) ? $exploded[0] : ''); + $parsedFrame['data'] = (isset($exploded[1]) ? $exploded[1] : ''); + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'TXXX')) || // 4.2.2 TXXX User defined text information frame + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'TXX'))) { // 4.2.2 TXX User defined text information frame + // There may be more than one 'TXXX' frame in each tag, + // but only one with the same description. + //
                  + // Text encoding $xx + // Description $00 (00) + // Value + + $frame_offset = 0; + $frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + + if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) { + $info['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding'; + } + $frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding), $frame_offset); + if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) { + $frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00 + } + $frame_description = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_description) === 0) { + $frame_description = ''; + } + $parsedFrame['encodingid'] = $frame_textencoding; + $parsedFrame['encoding'] = $this->TextEncodingNameLookup($frame_textencoding); + + $parsedFrame['description'] = $frame_description; + $parsedFrame['data'] = substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding))); + if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) { + $info['id3v2']['comments'][$parsedFrame['framenameshort']][] = trim(getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data'])); + } + //unset($parsedFrame['data']); do not unset, may be needed elsewhere, e.g. for replaygain + + + } elseif ($parsedFrame['frame_name']{0} == 'T') { // 4.2. T??[?] Text information frame + // There may only be one text information frame of its kind in an tag. + //
                  + // Text encoding $xx + // Information + + $frame_offset = 0; + $frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) { + $info['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding'; + } + + $parsedFrame['data'] = (string) substr($parsedFrame['data'], $frame_offset); + + $parsedFrame['encodingid'] = $frame_textencoding; + $parsedFrame['encoding'] = $this->TextEncodingNameLookup($frame_textencoding); + + if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) { + // ID3v2.3 specs say that TPE1 (and others) can contain multiple artist values separated with / + // This of course breaks when an artist name contains slash character, e.g. "AC/DC" + // MP3tag (maybe others) implement alternative system where multiple artists are null-separated, which makes more sense + // getID3 will split null-separated artists into multiple artists and leave slash-separated ones to the user + switch ($parsedFrame['encoding']) { + case 'UTF-16': + case 'UTF-16BE': + case 'UTF-16LE': + $wordsize = 2; + break; + case 'ISO-8859-1': + case 'UTF-8': + default: + $wordsize = 1; + break; + } + $Txxx_elements = array(); + $Txxx_elements_start_offset = 0; + for ($i = 0; $i < strlen($parsedFrame['data']); $i += $wordsize) { + if (substr($parsedFrame['data'], $i, $wordsize) == str_repeat("\x00", $wordsize)) { + $Txxx_elements[] = substr($parsedFrame['data'], $Txxx_elements_start_offset, $i - $Txxx_elements_start_offset); + $Txxx_elements_start_offset = $i + $wordsize; + } + } + $Txxx_elements[] = substr($parsedFrame['data'], $Txxx_elements_start_offset, $i - $Txxx_elements_start_offset); + foreach ($Txxx_elements as $Txxx_element) { + $string = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $Txxx_element); + if (!empty($string)) { + $info['id3v2']['comments'][$parsedFrame['framenameshort']][] = $string; + } + } + unset($string, $wordsize, $i, $Txxx_elements, $Txxx_element, $Txxx_elements_start_offset); + } + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'WXXX')) || // 4.3.2 WXXX User defined URL link frame + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'WXX'))) { // 4.3.2 WXX User defined URL link frame + // There may be more than one 'WXXX' frame in each tag, + // but only one with the same description + //
                  + // Text encoding $xx + // Description $00 (00) + // URL + + $frame_offset = 0; + $frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) { + $info['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding'; + } + $frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding), $frame_offset); + if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) { + $frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00 + } + $frame_description = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + + if (ord($frame_description) === 0) { + $frame_description = ''; + } + $parsedFrame['data'] = substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding))); + + $frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding)); + if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) { + $frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00 + } + if ($frame_terminatorpos) { + // there are null bytes after the data - this is not according to spec + // only use data up to first null byte + $frame_urldata = (string) substr($parsedFrame['data'], 0, $frame_terminatorpos); + } else { + // no null bytes following data, just use all data + $frame_urldata = (string) $parsedFrame['data']; + } + + $parsedFrame['encodingid'] = $frame_textencoding; + $parsedFrame['encoding'] = $this->TextEncodingNameLookup($frame_textencoding); + + $parsedFrame['url'] = $frame_urldata; + $parsedFrame['description'] = $frame_description; + if (!empty($parsedFrame['framenameshort']) && $parsedFrame['url']) { + $info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['url']); + } + unset($parsedFrame['data']); + + + } elseif ($parsedFrame['frame_name']{0} == 'W') { // 4.3. W??? URL link frames + // There may only be one URL link frame of its kind in a tag, + // except when stated otherwise in the frame description + //
                  + // URL + + $parsedFrame['url'] = trim($parsedFrame['data']); + if (!empty($parsedFrame['framenameshort']) && $parsedFrame['url']) { + $info['id3v2']['comments'][$parsedFrame['framenameshort']][] = $parsedFrame['url']; + } + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion == 3) && ($parsedFrame['frame_name'] == 'IPLS')) || // 4.4 IPLS Involved people list (ID3v2.3 only) + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'IPL'))) { // 4.4 IPL Involved people list (ID3v2.2 only) + // http://id3.org/id3v2.3.0#sec4.4 + // There may only be one 'IPL' frame in each tag + //
                  + // Text encoding $xx + // People list strings + + $frame_offset = 0; + $frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) { + $info['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding'; + } + $parsedFrame['encodingid'] = $frame_textencoding; + $parsedFrame['encoding'] = $this->TextEncodingNameLookup($parsedFrame['encodingid']); + $parsedFrame['data_raw'] = (string) substr($parsedFrame['data'], $frame_offset); + + // http://www.getid3.org/phpBB3/viewtopic.php?t=1369 + // "this tag typically contains null terminated strings, which are associated in pairs" + // "there are users that use the tag incorrectly" + $IPLS_parts = array(); + if (strpos($parsedFrame['data_raw'], "\x00") !== false) { + $IPLS_parts_unsorted = array(); + if (((strlen($parsedFrame['data_raw']) % 2) == 0) && ((substr($parsedFrame['data_raw'], 0, 2) == "\xFF\xFE") || (substr($parsedFrame['data_raw'], 0, 2) == "\xFE\xFF"))) { + // UTF-16, be careful looking for null bytes since most 2-byte characters may contain one; you need to find twin null bytes, and on even padding + $thisILPS = ''; + for ($i = 0; $i < strlen($parsedFrame['data_raw']); $i += 2) { + $twobytes = substr($parsedFrame['data_raw'], $i, 2); + if ($twobytes === "\x00\x00") { + $IPLS_parts_unsorted[] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $thisILPS); + $thisILPS = ''; + } else { + $thisILPS .= $twobytes; + } + } + if (strlen($thisILPS) > 2) { // 2-byte BOM + $IPLS_parts_unsorted[] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $thisILPS); + } + } else { + // ISO-8859-1 or UTF-8 or other single-byte-null character set + $IPLS_parts_unsorted = explode("\x00", $parsedFrame['data_raw']); + } + if (count($IPLS_parts_unsorted) == 1) { + // just a list of names, e.g. "Dino Baptiste, Jimmy Copley, John Gordon, Bernie Marsden, Sharon Watson" + foreach ($IPLS_parts_unsorted as $key => $value) { + $IPLS_parts_sorted = preg_split('#[;,\\r\\n\\t]#', $value); + $position = ''; + foreach ($IPLS_parts_sorted as $person) { + $IPLS_parts[] = array('position'=>$position, 'person'=>$person); + } + } + } elseif ((count($IPLS_parts_unsorted) % 2) == 0) { + $position = ''; + $person = ''; + foreach ($IPLS_parts_unsorted as $key => $value) { + if (($key % 2) == 0) { + $position = $value; + } else { + $person = $value; + $IPLS_parts[] = array('position'=>$position, 'person'=>$person); + $position = ''; + $person = ''; + } + } + } else { + foreach ($IPLS_parts_unsorted as $key => $value) { + $IPLS_parts[] = array($value); + } + } + + } else { + $IPLS_parts = preg_split('#[;,\\r\\n\\t]#', $parsedFrame['data_raw']); + } + $parsedFrame['data'] = $IPLS_parts; + + if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) { + $info['id3v2']['comments'][$parsedFrame['framenameshort']][] = $parsedFrame['data']; + } + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'MCDI')) || // 4.4 MCDI Music CD identifier + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'MCI'))) { // 4.5 MCI Music CD identifier + // There may only be one 'MCDI' frame in each tag + //
                  + // CD TOC + + if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) { + $info['id3v2']['comments'][$parsedFrame['framenameshort']][] = $parsedFrame['data']; + } + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'ETCO')) || // 4.5 ETCO Event timing codes + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'ETC'))) { // 4.6 ETC Event timing codes + // There may only be one 'ETCO' frame in each tag + //
                  + // Time stamp format $xx + // Where time stamp format is: + // $01 (32-bit value) MPEG frames from beginning of file + // $02 (32-bit value) milliseconds from beginning of file + // Followed by a list of key events in the following format: + // Type of event $xx + // Time stamp $xx (xx ...) + // The 'Time stamp' is set to zero if directly at the beginning of the sound + // or after the previous event. All events MUST be sorted in chronological order. + + $frame_offset = 0; + $parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + + while ($frame_offset < strlen($parsedFrame['data'])) { + $parsedFrame['typeid'] = substr($parsedFrame['data'], $frame_offset++, 1); + $parsedFrame['type'] = $this->ETCOEventLookup($parsedFrame['typeid']); + $parsedFrame['timestamp'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4)); + $frame_offset += 4; + } + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'MLLT')) || // 4.6 MLLT MPEG location lookup table + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'MLL'))) { // 4.7 MLL MPEG location lookup table + // There may only be one 'MLLT' frame in each tag + //
                  + // MPEG frames between reference $xx xx + // Bytes between reference $xx xx xx + // Milliseconds between reference $xx xx xx + // Bits for bytes deviation $xx + // Bits for milliseconds dev. $xx + // Then for every reference the following data is included; + // Deviation in bytes %xxx.... + // Deviation in milliseconds %xxx.... + + $frame_offset = 0; + $parsedFrame['framesbetweenreferences'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 0, 2)); + $parsedFrame['bytesbetweenreferences'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 2, 3)); + $parsedFrame['msbetweenreferences'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 5, 3)); + $parsedFrame['bitsforbytesdeviation'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 8, 1)); + $parsedFrame['bitsformsdeviation'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 9, 1)); + $parsedFrame['data'] = substr($parsedFrame['data'], 10); + while ($frame_offset < strlen($parsedFrame['data'])) { + $deviationbitstream .= getid3_lib::BigEndian2Bin(substr($parsedFrame['data'], $frame_offset++, 1)); + } + $reference_counter = 0; + while (strlen($deviationbitstream) > 0) { + $parsedFrame[$reference_counter]['bytedeviation'] = bindec(substr($deviationbitstream, 0, $parsedFrame['bitsforbytesdeviation'])); + $parsedFrame[$reference_counter]['msdeviation'] = bindec(substr($deviationbitstream, $parsedFrame['bitsforbytesdeviation'], $parsedFrame['bitsformsdeviation'])); + $deviationbitstream = substr($deviationbitstream, $parsedFrame['bitsforbytesdeviation'] + $parsedFrame['bitsformsdeviation']); + $reference_counter++; + } + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'SYTC')) || // 4.7 SYTC Synchronised tempo codes + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'STC'))) { // 4.8 STC Synchronised tempo codes + // There may only be one 'SYTC' frame in each tag + //
                  + // Time stamp format $xx + // Tempo data + // Where time stamp format is: + // $01 (32-bit value) MPEG frames from beginning of file + // $02 (32-bit value) milliseconds from beginning of file + + $frame_offset = 0; + $parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $timestamp_counter = 0; + while ($frame_offset < strlen($parsedFrame['data'])) { + $parsedFrame[$timestamp_counter]['tempo'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + if ($parsedFrame[$timestamp_counter]['tempo'] == 255) { + $parsedFrame[$timestamp_counter]['tempo'] += ord(substr($parsedFrame['data'], $frame_offset++, 1)); + } + $parsedFrame[$timestamp_counter]['timestamp'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4)); + $frame_offset += 4; + $timestamp_counter++; + } + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'USLT')) || // 4.8 USLT Unsynchronised lyric/text transcription + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'ULT'))) { // 4.9 ULT Unsynchronised lyric/text transcription + // There may be more than one 'Unsynchronised lyrics/text transcription' frame + // in each tag, but only one with the same language and content descriptor. + //
                  + // Text encoding $xx + // Language $xx xx xx + // Content descriptor $00 (00) + // Lyrics/text + + $frame_offset = 0; + $frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) { + $info['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding'; + } + $frame_language = substr($parsedFrame['data'], $frame_offset, 3); + $frame_offset += 3; + $frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding), $frame_offset); + if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) { + $frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00 + } + $frame_description = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_description) === 0) { + $frame_description = ''; + } + $parsedFrame['data'] = substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding))); + + $parsedFrame['encodingid'] = $frame_textencoding; + $parsedFrame['encoding'] = $this->TextEncodingNameLookup($frame_textencoding); + + $parsedFrame['data'] = $parsedFrame['data']; + $parsedFrame['language'] = $frame_language; + $parsedFrame['languagename'] = $this->LanguageLookup($frame_language, false); + $parsedFrame['description'] = $frame_description; + if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) { + $info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']); + } + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'SYLT')) || // 4.9 SYLT Synchronised lyric/text + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'SLT'))) { // 4.10 SLT Synchronised lyric/text + // There may be more than one 'SYLT' frame in each tag, + // but only one with the same language and content descriptor. + //
                  + // Text encoding $xx + // Language $xx xx xx + // Time stamp format $xx + // $01 (32-bit value) MPEG frames from beginning of file + // $02 (32-bit value) milliseconds from beginning of file + // Content type $xx + // Content descriptor $00 (00) + // Terminated text to be synced (typically a syllable) + // Sync identifier (terminator to above string) $00 (00) + // Time stamp $xx (xx ...) + + $frame_offset = 0; + $frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) { + $info['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding'; + } + $frame_language = substr($parsedFrame['data'], $frame_offset, 3); + $frame_offset += 3; + $parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['contenttypeid'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['contenttype'] = $this->SYTLContentTypeLookup($parsedFrame['contenttypeid']); + $parsedFrame['encodingid'] = $frame_textencoding; + $parsedFrame['encoding'] = $this->TextEncodingNameLookup($frame_textencoding); + + $parsedFrame['language'] = $frame_language; + $parsedFrame['languagename'] = $this->LanguageLookup($frame_language, false); + + $timestampindex = 0; + $frame_remainingdata = substr($parsedFrame['data'], $frame_offset); + while (strlen($frame_remainingdata)) { + $frame_offset = 0; + $frame_terminatorpos = strpos($frame_remainingdata, $this->TextEncodingTerminatorLookup($frame_textencoding)); + if ($frame_terminatorpos === false) { + $frame_remainingdata = ''; + } else { + if (ord(substr($frame_remainingdata, $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) { + $frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00 + } + $parsedFrame['lyrics'][$timestampindex]['data'] = substr($frame_remainingdata, $frame_offset, $frame_terminatorpos - $frame_offset); + + $frame_remainingdata = substr($frame_remainingdata, $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding))); + if (($timestampindex == 0) && (ord($frame_remainingdata{0}) != 0)) { + // timestamp probably omitted for first data item + } else { + $parsedFrame['lyrics'][$timestampindex]['timestamp'] = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 0, 4)); + $frame_remainingdata = substr($frame_remainingdata, 4); + } + $timestampindex++; + } + } + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'COMM')) || // 4.10 COMM Comments + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'COM'))) { // 4.11 COM Comments + // There may be more than one comment frame in each tag, + // but only one with the same language and content descriptor. + //
                  + // Text encoding $xx + // Language $xx xx xx + // Short content descrip. $00 (00) + // The actual text + + if (strlen($parsedFrame['data']) < 5) { + + $info['warning'][] = 'Invalid data (too short) for "'.$parsedFrame['frame_name'].'" frame at offset '.$parsedFrame['dataoffset']; + + } else { + + $frame_offset = 0; + $frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) { + $info['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding'; + } + $frame_language = substr($parsedFrame['data'], $frame_offset, 3); + $frame_offset += 3; + $frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding), $frame_offset); + if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) { + $frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00 + } + $frame_description = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_description) === 0) { + $frame_description = ''; + } + $frame_text = (string) substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding))); + + $parsedFrame['encodingid'] = $frame_textencoding; + $parsedFrame['encoding'] = $this->TextEncodingNameLookup($frame_textencoding); + + $parsedFrame['language'] = $frame_language; + $parsedFrame['languagename'] = $this->LanguageLookup($frame_language, false); + $parsedFrame['description'] = $frame_description; + $parsedFrame['data'] = $frame_text; + if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) { + $info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']); + } + + } + + } elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'RVA2')) { // 4.11 RVA2 Relative volume adjustment (2) (ID3v2.4+ only) + // There may be more than one 'RVA2' frame in each tag, + // but only one with the same identification string + //
                  + // Identification $00 + // The 'identification' string is used to identify the situation and/or + // device where this adjustment should apply. The following is then + // repeated for every channel: + // Type of channel $xx + // Volume adjustment $xx xx + // Bits representing peak $xx + // Peak volume $xx (xx ...) + + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00"); + $frame_idstring = substr($parsedFrame['data'], 0, $frame_terminatorpos); + if (ord($frame_idstring) === 0) { + $frame_idstring = ''; + } + $frame_remainingdata = substr($parsedFrame['data'], $frame_terminatorpos + strlen("\x00")); + $parsedFrame['description'] = $frame_idstring; + $RVA2channelcounter = 0; + while (strlen($frame_remainingdata) >= 5) { + $frame_offset = 0; + $frame_channeltypeid = ord(substr($frame_remainingdata, $frame_offset++, 1)); + $parsedFrame[$RVA2channelcounter]['channeltypeid'] = $frame_channeltypeid; + $parsedFrame[$RVA2channelcounter]['channeltype'] = $this->RVA2ChannelTypeLookup($frame_channeltypeid); + $parsedFrame[$RVA2channelcounter]['volumeadjust'] = getid3_lib::BigEndian2Int(substr($frame_remainingdata, $frame_offset, 2), false, true); // 16-bit signed + $frame_offset += 2; + $parsedFrame[$RVA2channelcounter]['bitspeakvolume'] = ord(substr($frame_remainingdata, $frame_offset++, 1)); + if (($parsedFrame[$RVA2channelcounter]['bitspeakvolume'] < 1) || ($parsedFrame[$RVA2channelcounter]['bitspeakvolume'] > 4)) { + $info['warning'][] = 'ID3v2::RVA2 frame['.$RVA2channelcounter.'] contains invalid '.$parsedFrame[$RVA2channelcounter]['bitspeakvolume'].'-byte bits-representing-peak value'; + break; + } + $frame_bytespeakvolume = ceil($parsedFrame[$RVA2channelcounter]['bitspeakvolume'] / 8); + $parsedFrame[$RVA2channelcounter]['peakvolume'] = getid3_lib::BigEndian2Int(substr($frame_remainingdata, $frame_offset, $frame_bytespeakvolume)); + $frame_remainingdata = substr($frame_remainingdata, $frame_offset + $frame_bytespeakvolume); + $RVA2channelcounter++; + } + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion == 3) && ($parsedFrame['frame_name'] == 'RVAD')) || // 4.12 RVAD Relative volume adjustment (ID3v2.3 only) + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'RVA'))) { // 4.12 RVA Relative volume adjustment (ID3v2.2 only) + // There may only be one 'RVA' frame in each tag + //
                  + // ID3v2.2 => Increment/decrement %000000ba + // ID3v2.3 => Increment/decrement %00fedcba + // Bits used for volume descr. $xx + // Relative volume change, right $xx xx (xx ...) // a + // Relative volume change, left $xx xx (xx ...) // b + // Peak volume right $xx xx (xx ...) + // Peak volume left $xx xx (xx ...) + // ID3v2.3 only, optional (not present in ID3v2.2): + // Relative volume change, right back $xx xx (xx ...) // c + // Relative volume change, left back $xx xx (xx ...) // d + // Peak volume right back $xx xx (xx ...) + // Peak volume left back $xx xx (xx ...) + // ID3v2.3 only, optional (not present in ID3v2.2): + // Relative volume change, center $xx xx (xx ...) // e + // Peak volume center $xx xx (xx ...) + // ID3v2.3 only, optional (not present in ID3v2.2): + // Relative volume change, bass $xx xx (xx ...) // f + // Peak volume bass $xx xx (xx ...) + + $frame_offset = 0; + $frame_incrdecrflags = getid3_lib::BigEndian2Bin(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['incdec']['right'] = (bool) substr($frame_incrdecrflags, 6, 1); + $parsedFrame['incdec']['left'] = (bool) substr($frame_incrdecrflags, 7, 1); + $parsedFrame['bitsvolume'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $frame_bytesvolume = ceil($parsedFrame['bitsvolume'] / 8); + $parsedFrame['volumechange']['right'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume)); + if ($parsedFrame['incdec']['right'] === false) { + $parsedFrame['volumechange']['right'] *= -1; + } + $frame_offset += $frame_bytesvolume; + $parsedFrame['volumechange']['left'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume)); + if ($parsedFrame['incdec']['left'] === false) { + $parsedFrame['volumechange']['left'] *= -1; + } + $frame_offset += $frame_bytesvolume; + $parsedFrame['peakvolume']['right'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume)); + $frame_offset += $frame_bytesvolume; + $parsedFrame['peakvolume']['left'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume)); + $frame_offset += $frame_bytesvolume; + if ($id3v2_majorversion == 3) { + $parsedFrame['data'] = substr($parsedFrame['data'], $frame_offset); + if (strlen($parsedFrame['data']) > 0) { + $parsedFrame['incdec']['rightrear'] = (bool) substr($frame_incrdecrflags, 4, 1); + $parsedFrame['incdec']['leftrear'] = (bool) substr($frame_incrdecrflags, 5, 1); + $parsedFrame['volumechange']['rightrear'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume)); + if ($parsedFrame['incdec']['rightrear'] === false) { + $parsedFrame['volumechange']['rightrear'] *= -1; + } + $frame_offset += $frame_bytesvolume; + $parsedFrame['volumechange']['leftrear'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume)); + if ($parsedFrame['incdec']['leftrear'] === false) { + $parsedFrame['volumechange']['leftrear'] *= -1; + } + $frame_offset += $frame_bytesvolume; + $parsedFrame['peakvolume']['rightrear'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume)); + $frame_offset += $frame_bytesvolume; + $parsedFrame['peakvolume']['leftrear'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume)); + $frame_offset += $frame_bytesvolume; + } + $parsedFrame['data'] = substr($parsedFrame['data'], $frame_offset); + if (strlen($parsedFrame['data']) > 0) { + $parsedFrame['incdec']['center'] = (bool) substr($frame_incrdecrflags, 3, 1); + $parsedFrame['volumechange']['center'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume)); + if ($parsedFrame['incdec']['center'] === false) { + $parsedFrame['volumechange']['center'] *= -1; + } + $frame_offset += $frame_bytesvolume; + $parsedFrame['peakvolume']['center'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume)); + $frame_offset += $frame_bytesvolume; + } + $parsedFrame['data'] = substr($parsedFrame['data'], $frame_offset); + if (strlen($parsedFrame['data']) > 0) { + $parsedFrame['incdec']['bass'] = (bool) substr($frame_incrdecrflags, 2, 1); + $parsedFrame['volumechange']['bass'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume)); + if ($parsedFrame['incdec']['bass'] === false) { + $parsedFrame['volumechange']['bass'] *= -1; + } + $frame_offset += $frame_bytesvolume; + $parsedFrame['peakvolume']['bass'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume)); + $frame_offset += $frame_bytesvolume; + } + } + unset($parsedFrame['data']); + + + } elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'EQU2')) { // 4.12 EQU2 Equalisation (2) (ID3v2.4+ only) + // There may be more than one 'EQU2' frame in each tag, + // but only one with the same identification string + //
                  + // Interpolation method $xx + // $00 Band + // $01 Linear + // Identification $00 + // The following is then repeated for every adjustment point + // Frequency $xx xx + // Volume adjustment $xx xx + + $frame_offset = 0; + $frame_interpolationmethod = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_idstring = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_idstring) === 0) { + $frame_idstring = ''; + } + $parsedFrame['description'] = $frame_idstring; + $frame_remainingdata = substr($parsedFrame['data'], $frame_terminatorpos + strlen("\x00")); + while (strlen($frame_remainingdata)) { + $frame_frequency = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 0, 2)) / 2; + $parsedFrame['data'][$frame_frequency] = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 2, 2), false, true); + $frame_remainingdata = substr($frame_remainingdata, 4); + } + $parsedFrame['interpolationmethod'] = $frame_interpolationmethod; + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion == 3) && ($parsedFrame['frame_name'] == 'EQUA')) || // 4.12 EQUA Equalisation (ID3v2.3 only) + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'EQU'))) { // 4.13 EQU Equalisation (ID3v2.2 only) + // There may only be one 'EQUA' frame in each tag + //
                  + // Adjustment bits $xx + // This is followed by 2 bytes + ('adjustment bits' rounded up to the + // nearest byte) for every equalisation band in the following format, + // giving a frequency range of 0 - 32767Hz: + // Increment/decrement %x (MSB of the Frequency) + // Frequency (lower 15 bits) + // Adjustment $xx (xx ...) + + $frame_offset = 0; + $parsedFrame['adjustmentbits'] = substr($parsedFrame['data'], $frame_offset++, 1); + $frame_adjustmentbytes = ceil($parsedFrame['adjustmentbits'] / 8); + + $frame_remainingdata = (string) substr($parsedFrame['data'], $frame_offset); + while (strlen($frame_remainingdata) > 0) { + $frame_frequencystr = getid3_lib::BigEndian2Bin(substr($frame_remainingdata, 0, 2)); + $frame_incdec = (bool) substr($frame_frequencystr, 0, 1); + $frame_frequency = bindec(substr($frame_frequencystr, 1, 15)); + $parsedFrame[$frame_frequency]['incdec'] = $frame_incdec; + $parsedFrame[$frame_frequency]['adjustment'] = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 2, $frame_adjustmentbytes)); + if ($parsedFrame[$frame_frequency]['incdec'] === false) { + $parsedFrame[$frame_frequency]['adjustment'] *= -1; + } + $frame_remainingdata = substr($frame_remainingdata, 2 + $frame_adjustmentbytes); + } + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'RVRB')) || // 4.13 RVRB Reverb + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'REV'))) { // 4.14 REV Reverb + // There may only be one 'RVRB' frame in each tag. + //
                  + // Reverb left (ms) $xx xx + // Reverb right (ms) $xx xx + // Reverb bounces, left $xx + // Reverb bounces, right $xx + // Reverb feedback, left to left $xx + // Reverb feedback, left to right $xx + // Reverb feedback, right to right $xx + // Reverb feedback, right to left $xx + // Premix left to right $xx + // Premix right to left $xx + + $frame_offset = 0; + $parsedFrame['left'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2)); + $frame_offset += 2; + $parsedFrame['right'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2)); + $frame_offset += 2; + $parsedFrame['bouncesL'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['bouncesR'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['feedbackLL'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['feedbackLR'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['feedbackRR'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['feedbackRL'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['premixLR'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['premixRL'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'APIC')) || // 4.14 APIC Attached picture + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'PIC'))) { // 4.15 PIC Attached picture + // There may be several pictures attached to one file, + // each in their individual 'APIC' frame, but only one + // with the same content descriptor + //
                  + // Text encoding $xx + // ID3v2.3+ => MIME type $00 + // ID3v2.2 => Image format $xx xx xx + // Picture type $xx + // Description $00 (00) + // Picture data + + $frame_offset = 0; + $frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) { + $info['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding'; + } + + if ($id3v2_majorversion == 2 && strlen($parsedFrame['data']) > $frame_offset) { + $frame_imagetype = substr($parsedFrame['data'], $frame_offset, 3); + if (strtolower($frame_imagetype) == 'ima') { + // complete hack for mp3Rage (www.chaoticsoftware.com) that puts ID3v2.3-formatted + // MIME type instead of 3-char ID3v2.2-format image type (thanks xbhoffØpacbell*net) + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_mimetype = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_mimetype) === 0) { + $frame_mimetype = ''; + } + $frame_imagetype = strtoupper(str_replace('image/', '', strtolower($frame_mimetype))); + if ($frame_imagetype == 'JPEG') { + $frame_imagetype = 'JPG'; + } + $frame_offset = $frame_terminatorpos + strlen("\x00"); + } else { + $frame_offset += 3; + } + } + if ($id3v2_majorversion > 2 && strlen($parsedFrame['data']) > $frame_offset) { + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_mimetype = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_mimetype) === 0) { + $frame_mimetype = ''; + } + $frame_offset = $frame_terminatorpos + strlen("\x00"); + } + + $frame_picturetype = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + + if ($frame_offset >= $parsedFrame['datalength']) { + $info['warning'][] = 'data portion of APIC frame is missing at offset '.($parsedFrame['dataoffset'] + 8 + $frame_offset); + } else { + $frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding), $frame_offset); + if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) { + $frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00 + } + $frame_description = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_description) === 0) { + $frame_description = ''; + } + $parsedFrame['encodingid'] = $frame_textencoding; + $parsedFrame['encoding'] = $this->TextEncodingNameLookup($frame_textencoding); + + if ($id3v2_majorversion == 2) { + $parsedFrame['imagetype'] = $frame_imagetype; + } else { + $parsedFrame['mime'] = $frame_mimetype; + } + $parsedFrame['picturetypeid'] = $frame_picturetype; + $parsedFrame['picturetype'] = $this->APICPictureTypeLookup($frame_picturetype); + $parsedFrame['description'] = $frame_description; + $parsedFrame['data'] = substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding))); + $parsedFrame['datalength'] = strlen($parsedFrame['data']); + + $parsedFrame['image_mime'] = ''; + $imageinfo = array(); + $imagechunkcheck = getid3_lib::GetDataImageSize($parsedFrame['data'], $imageinfo); + if (($imagechunkcheck[2] >= 1) && ($imagechunkcheck[2] <= 3)) { + $parsedFrame['image_mime'] = 'image/'.getid3_lib::ImageTypesLookup($imagechunkcheck[2]); + if ($imagechunkcheck[0]) { + $parsedFrame['image_width'] = $imagechunkcheck[0]; + } + if ($imagechunkcheck[1]) { + $parsedFrame['image_height'] = $imagechunkcheck[1]; + } + } + + do { + if ($this->getid3->option_save_attachments === false) { + // skip entirely + unset($parsedFrame['data']); + break; + } + if ($this->getid3->option_save_attachments === true) { + // great +/* + } elseif (is_int($this->getid3->option_save_attachments)) { + if ($this->getid3->option_save_attachments < $parsedFrame['data_length']) { + // too big, skip + $info['warning'][] = 'attachment at '.$frame_offset.' is too large to process inline ('.number_format($parsedFrame['data_length']).' bytes)'; + unset($parsedFrame['data']); + break; + } +*/ + } elseif (is_string($this->getid3->option_save_attachments)) { + $dir = rtrim(str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $this->getid3->option_save_attachments), DIRECTORY_SEPARATOR); + if (!is_dir($dir) || !is_writable($dir)) { + // cannot write, skip + $info['warning'][] = 'attachment at '.$frame_offset.' cannot be saved to "'.$dir.'" (not writable)'; + unset($parsedFrame['data']); + break; + } + } + // if we get this far, must be OK + if (is_string($this->getid3->option_save_attachments)) { + $destination_filename = $dir.DIRECTORY_SEPARATOR.md5($info['filenamepath']).'_'.$frame_offset; + if (!file_exists($destination_filename) || is_writable($destination_filename)) { + file_put_contents($destination_filename, $parsedFrame['data']); + } else { + $info['warning'][] = 'attachment at '.$frame_offset.' cannot be saved to "'.$destination_filename.'" (not writable)'; + } + $parsedFrame['data_filename'] = $destination_filename; + unset($parsedFrame['data']); + } else { + if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) { + if (!isset($info['id3v2']['comments']['picture'])) { + $info['id3v2']['comments']['picture'] = array(); + } + $info['id3v2']['comments']['picture'][] = array('data'=>$parsedFrame['data'], 'image_mime'=>$parsedFrame['image_mime']); + } + } + } while (false); + } + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'GEOB')) || // 4.15 GEOB General encapsulated object + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'GEO'))) { // 4.16 GEO General encapsulated object + // There may be more than one 'GEOB' frame in each tag, + // but only one with the same content descriptor + //
                  + // Text encoding $xx + // MIME type $00 + // Filename $00 (00) + // Content description $00 (00) + // Encapsulated object + + $frame_offset = 0; + $frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) { + $info['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding'; + } + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_mimetype = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_mimetype) === 0) { + $frame_mimetype = ''; + } + $frame_offset = $frame_terminatorpos + strlen("\x00"); + + $frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding), $frame_offset); + if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) { + $frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00 + } + $frame_filename = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_filename) === 0) { + $frame_filename = ''; + } + $frame_offset = $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)); + + $frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding), $frame_offset); + if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) { + $frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00 + } + $frame_description = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_description) === 0) { + $frame_description = ''; + } + $frame_offset = $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)); + + $parsedFrame['objectdata'] = (string) substr($parsedFrame['data'], $frame_offset); + $parsedFrame['encodingid'] = $frame_textencoding; + $parsedFrame['encoding'] = $this->TextEncodingNameLookup($frame_textencoding); + + $parsedFrame['mime'] = $frame_mimetype; + $parsedFrame['filename'] = $frame_filename; + $parsedFrame['description'] = $frame_description; + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'PCNT')) || // 4.16 PCNT Play counter + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'CNT'))) { // 4.17 CNT Play counter + // There may only be one 'PCNT' frame in each tag. + // When the counter reaches all one's, one byte is inserted in + // front of the counter thus making the counter eight bits bigger + //
                  + // Counter $xx xx xx xx (xx ...) + + $parsedFrame['data'] = getid3_lib::BigEndian2Int($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'POPM')) || // 4.17 POPM Popularimeter + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'POP'))) { // 4.18 POP Popularimeter + // There may be more than one 'POPM' frame in each tag, + // but only one with the same email address + //
                  + // Email to user $00 + // Rating $xx + // Counter $xx xx xx xx (xx ...) + + $frame_offset = 0; + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_emailaddress = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_emailaddress) === 0) { + $frame_emailaddress = ''; + } + $frame_offset = $frame_terminatorpos + strlen("\x00"); + $frame_rating = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['counter'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset)); + $parsedFrame['email'] = $frame_emailaddress; + $parsedFrame['rating'] = $frame_rating; + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'RBUF')) || // 4.18 RBUF Recommended buffer size + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'BUF'))) { // 4.19 BUF Recommended buffer size + // There may only be one 'RBUF' frame in each tag + //
                  + // Buffer size $xx xx xx + // Embedded info flag %0000000x + // Offset to next tag $xx xx xx xx + + $frame_offset = 0; + $parsedFrame['buffersize'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 3)); + $frame_offset += 3; + + $frame_embeddedinfoflags = getid3_lib::BigEndian2Bin(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['flags']['embededinfo'] = (bool) substr($frame_embeddedinfoflags, 7, 1); + $parsedFrame['nexttagoffset'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4)); + unset($parsedFrame['data']); + + + } elseif (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'CRM')) { // 4.20 Encrypted meta frame (ID3v2.2 only) + // There may be more than one 'CRM' frame in a tag, + // but only one with the same 'owner identifier' + //
                  + // Owner identifier $00 (00) + // Content/explanation $00 (00) + // Encrypted datablock + + $frame_offset = 0; + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + $frame_offset = $frame_terminatorpos + strlen("\x00"); + + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_description = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_description) === 0) { + $frame_description = ''; + } + $frame_offset = $frame_terminatorpos + strlen("\x00"); + + $parsedFrame['ownerid'] = $frame_ownerid; + $parsedFrame['data'] = (string) substr($parsedFrame['data'], $frame_offset); + $parsedFrame['description'] = $frame_description; + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'AENC')) || // 4.19 AENC Audio encryption + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'CRA'))) { // 4.21 CRA Audio encryption + // There may be more than one 'AENC' frames in a tag, + // but only one with the same 'Owner identifier' + //
                  + // Owner identifier $00 + // Preview start $xx xx + // Preview length $xx xx + // Encryption info + + $frame_offset = 0; + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_ownerid) === 0) { + $frame_ownerid == ''; + } + $frame_offset = $frame_terminatorpos + strlen("\x00"); + $parsedFrame['ownerid'] = $frame_ownerid; + $parsedFrame['previewstart'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2)); + $frame_offset += 2; + $parsedFrame['previewlength'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2)); + $frame_offset += 2; + $parsedFrame['encryptioninfo'] = (string) substr($parsedFrame['data'], $frame_offset); + unset($parsedFrame['data']); + + + } elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'LINK')) || // 4.20 LINK Linked information + (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'LNK'))) { // 4.22 LNK Linked information + // There may be more than one 'LINK' frame in a tag, + // but only one with the same contents + //
                  + // ID3v2.3+ => Frame identifier $xx xx xx xx + // ID3v2.2 => Frame identifier $xx xx xx + // URL $00 + // ID and additional data + + $frame_offset = 0; + if ($id3v2_majorversion == 2) { + $parsedFrame['frameid'] = substr($parsedFrame['data'], $frame_offset, 3); + $frame_offset += 3; + } else { + $parsedFrame['frameid'] = substr($parsedFrame['data'], $frame_offset, 4); + $frame_offset += 4; + } + + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_url = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_url) === 0) { + $frame_url = ''; + } + $frame_offset = $frame_terminatorpos + strlen("\x00"); + $parsedFrame['url'] = $frame_url; + + $parsedFrame['additionaldata'] = (string) substr($parsedFrame['data'], $frame_offset); + if (!empty($parsedFrame['framenameshort']) && $parsedFrame['url']) { + $info['id3v2']['comments'][$parsedFrame['framenameshort']][] = utf8_encode($parsedFrame['url']); + } + unset($parsedFrame['data']); + + + } elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'POSS')) { // 4.21 POSS Position synchronisation frame (ID3v2.3+ only) + // There may only be one 'POSS' frame in each tag + // + // Time stamp format $xx + // Position $xx (xx ...) + + $frame_offset = 0; + $parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['position'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset)); + unset($parsedFrame['data']); + + + } elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'USER')) { // 4.22 USER Terms of use (ID3v2.3+ only) + // There may be more than one 'Terms of use' frame in a tag, + // but only one with the same 'Language' + //
                  + // Text encoding $xx + // Language $xx xx xx + // The actual text + + $frame_offset = 0; + $frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) { + $info['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding'; + } + $frame_language = substr($parsedFrame['data'], $frame_offset, 3); + $frame_offset += 3; + $parsedFrame['language'] = $frame_language; + $parsedFrame['languagename'] = $this->LanguageLookup($frame_language, false); + $parsedFrame['encodingid'] = $frame_textencoding; + $parsedFrame['encoding'] = $this->TextEncodingNameLookup($frame_textencoding); + + $parsedFrame['data'] = (string) substr($parsedFrame['data'], $frame_offset); + if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) { + $info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']); + } + unset($parsedFrame['data']); + + + } elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'OWNE')) { // 4.23 OWNE Ownership frame (ID3v2.3+ only) + // There may only be one 'OWNE' frame in a tag + //
                  + // Text encoding $xx + // Price paid $00 + // Date of purch. + // Seller + + $frame_offset = 0; + $frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) { + $info['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding'; + } + $parsedFrame['encodingid'] = $frame_textencoding; + $parsedFrame['encoding'] = $this->TextEncodingNameLookup($frame_textencoding); + + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_pricepaid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + $frame_offset = $frame_terminatorpos + strlen("\x00"); + + $parsedFrame['pricepaid']['currencyid'] = substr($frame_pricepaid, 0, 3); + $parsedFrame['pricepaid']['currency'] = $this->LookupCurrencyUnits($parsedFrame['pricepaid']['currencyid']); + $parsedFrame['pricepaid']['value'] = substr($frame_pricepaid, 3); + + $parsedFrame['purchasedate'] = substr($parsedFrame['data'], $frame_offset, 8); + if (!$this->IsValidDateStampString($parsedFrame['purchasedate'])) { + $parsedFrame['purchasedateunix'] = mktime (0, 0, 0, substr($parsedFrame['purchasedate'], 4, 2), substr($parsedFrame['purchasedate'], 6, 2), substr($parsedFrame['purchasedate'], 0, 4)); + } + $frame_offset += 8; + + $parsedFrame['seller'] = (string) substr($parsedFrame['data'], $frame_offset); + unset($parsedFrame['data']); + + + } elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'COMR')) { // 4.24 COMR Commercial frame (ID3v2.3+ only) + // There may be more than one 'commercial frame' in a tag, + // but no two may be identical + //
                  + // Text encoding $xx + // Price string $00 + // Valid until + // Contact URL $00 + // Received as $xx + // Name of seller $00 (00) + // Description $00 (00) + // Picture MIME type $00 + // Seller logo + + $frame_offset = 0; + $frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) { + $info['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding'; + } + + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_pricestring = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + $frame_offset = $frame_terminatorpos + strlen("\x00"); + $frame_rawpricearray = explode('/', $frame_pricestring); + foreach ($frame_rawpricearray as $key => $val) { + $frame_currencyid = substr($val, 0, 3); + $parsedFrame['price'][$frame_currencyid]['currency'] = $this->LookupCurrencyUnits($frame_currencyid); + $parsedFrame['price'][$frame_currencyid]['value'] = substr($val, 3); + } + + $frame_datestring = substr($parsedFrame['data'], $frame_offset, 8); + $frame_offset += 8; + + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_contacturl = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + $frame_offset = $frame_terminatorpos + strlen("\x00"); + + $frame_receivedasid = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + + $frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding), $frame_offset); + if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) { + $frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00 + } + $frame_sellername = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_sellername) === 0) { + $frame_sellername = ''; + } + $frame_offset = $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)); + + $frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding), $frame_offset); + if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) { + $frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00 + } + $frame_description = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_description) === 0) { + $frame_description = ''; + } + $frame_offset = $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)); + + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_mimetype = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + $frame_offset = $frame_terminatorpos + strlen("\x00"); + + $frame_sellerlogo = substr($parsedFrame['data'], $frame_offset); + + $parsedFrame['encodingid'] = $frame_textencoding; + $parsedFrame['encoding'] = $this->TextEncodingNameLookup($frame_textencoding); + + $parsedFrame['pricevaliduntil'] = $frame_datestring; + $parsedFrame['contacturl'] = $frame_contacturl; + $parsedFrame['receivedasid'] = $frame_receivedasid; + $parsedFrame['receivedas'] = $this->COMRReceivedAsLookup($frame_receivedasid); + $parsedFrame['sellername'] = $frame_sellername; + $parsedFrame['description'] = $frame_description; + $parsedFrame['mime'] = $frame_mimetype; + $parsedFrame['logo'] = $frame_sellerlogo; + unset($parsedFrame['data']); + + + } elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'ENCR')) { // 4.25 ENCR Encryption method registration (ID3v2.3+ only) + // There may be several 'ENCR' frames in a tag, + // but only one containing the same symbol + // and only one containing the same owner identifier + //
                  + // Owner identifier $00 + // Method symbol $xx + // Encryption data + + $frame_offset = 0; + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_ownerid) === 0) { + $frame_ownerid = ''; + } + $frame_offset = $frame_terminatorpos + strlen("\x00"); + + $parsedFrame['ownerid'] = $frame_ownerid; + $parsedFrame['methodsymbol'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['data'] = (string) substr($parsedFrame['data'], $frame_offset); + + + } elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'GRID')) { // 4.26 GRID Group identification registration (ID3v2.3+ only) + + // There may be several 'GRID' frames in a tag, + // but only one containing the same symbol + // and only one containing the same owner identifier + //
                  + // Owner identifier $00 + // Group symbol $xx + // Group dependent data + + $frame_offset = 0; + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_ownerid) === 0) { + $frame_ownerid = ''; + } + $frame_offset = $frame_terminatorpos + strlen("\x00"); + + $parsedFrame['ownerid'] = $frame_ownerid; + $parsedFrame['groupsymbol'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['data'] = (string) substr($parsedFrame['data'], $frame_offset); + + + } elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'PRIV')) { // 4.27 PRIV Private frame (ID3v2.3+ only) + // The tag may contain more than one 'PRIV' frame + // but only with different contents + //
                  + // Owner identifier $00 + // The private data + + $frame_offset = 0; + $frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset); + $frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset); + if (ord($frame_ownerid) === 0) { + $frame_ownerid = ''; + } + $frame_offset = $frame_terminatorpos + strlen("\x00"); + + $parsedFrame['ownerid'] = $frame_ownerid; + $parsedFrame['data'] = (string) substr($parsedFrame['data'], $frame_offset); + + + } elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'SIGN')) { // 4.28 SIGN Signature frame (ID3v2.4+ only) + // There may be more than one 'signature frame' in a tag, + // but no two may be identical + //
                  + // Group symbol $xx + // Signature + + $frame_offset = 0; + $parsedFrame['groupsymbol'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $parsedFrame['data'] = (string) substr($parsedFrame['data'], $frame_offset); + + + } elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'SEEK')) { // 4.29 SEEK Seek frame (ID3v2.4+ only) + // There may only be one 'seek frame' in a tag + //
                  + // Minimum offset to next tag $xx xx xx xx + + $frame_offset = 0; + $parsedFrame['data'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4)); + + + } elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'ASPI')) { // 4.30 ASPI Audio seek point index (ID3v2.4+ only) + // There may only be one 'audio seek point index' frame in a tag + //
                  + // Indexed data start (S) $xx xx xx xx + // Indexed data length (L) $xx xx xx xx + // Number of index points (N) $xx xx + // Bits per index point (b) $xx + // Then for every index point the following data is included: + // Fraction at index (Fi) $xx (xx) + + $frame_offset = 0; + $parsedFrame['datastart'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4)); + $frame_offset += 4; + $parsedFrame['indexeddatalength'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4)); + $frame_offset += 4; + $parsedFrame['indexpoints'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2)); + $frame_offset += 2; + $parsedFrame['bitsperpoint'] = ord(substr($parsedFrame['data'], $frame_offset++, 1)); + $frame_bytesperpoint = ceil($parsedFrame['bitsperpoint'] / 8); + for ($i = 0; $i < $frame_indexpoints; $i++) { + $parsedFrame['indexes'][$i] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesperpoint)); + $frame_offset += $frame_bytesperpoint; + } + unset($parsedFrame['data']); + + } elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'RGAD')) { // Replay Gain Adjustment + // http://privatewww.essex.ac.uk/~djmrob/replaygain/file_format_id3v2.html + // There may only be one 'RGAD' frame in a tag + //
                  + // Peak Amplitude $xx $xx $xx $xx + // Radio Replay Gain Adjustment %aaabbbcd %dddddddd + // Audiophile Replay Gain Adjustment %aaabbbcd %dddddddd + // a - name code + // b - originator code + // c - sign bit + // d - replay gain adjustment + + $frame_offset = 0; + $parsedFrame['peakamplitude'] = getid3_lib::BigEndian2Float(substr($parsedFrame['data'], $frame_offset, 4)); + $frame_offset += 4; + $rg_track_adjustment = getid3_lib::Dec2Bin(substr($parsedFrame['data'], $frame_offset, 2)); + $frame_offset += 2; + $rg_album_adjustment = getid3_lib::Dec2Bin(substr($parsedFrame['data'], $frame_offset, 2)); + $frame_offset += 2; + $parsedFrame['raw']['track']['name'] = getid3_lib::Bin2Dec(substr($rg_track_adjustment, 0, 3)); + $parsedFrame['raw']['track']['originator'] = getid3_lib::Bin2Dec(substr($rg_track_adjustment, 3, 3)); + $parsedFrame['raw']['track']['signbit'] = getid3_lib::Bin2Dec(substr($rg_track_adjustment, 6, 1)); + $parsedFrame['raw']['track']['adjustment'] = getid3_lib::Bin2Dec(substr($rg_track_adjustment, 7, 9)); + $parsedFrame['raw']['album']['name'] = getid3_lib::Bin2Dec(substr($rg_album_adjustment, 0, 3)); + $parsedFrame['raw']['album']['originator'] = getid3_lib::Bin2Dec(substr($rg_album_adjustment, 3, 3)); + $parsedFrame['raw']['album']['signbit'] = getid3_lib::Bin2Dec(substr($rg_album_adjustment, 6, 1)); + $parsedFrame['raw']['album']['adjustment'] = getid3_lib::Bin2Dec(substr($rg_album_adjustment, 7, 9)); + $parsedFrame['track']['name'] = getid3_lib::RGADnameLookup($parsedFrame['raw']['track']['name']); + $parsedFrame['track']['originator'] = getid3_lib::RGADoriginatorLookup($parsedFrame['raw']['track']['originator']); + $parsedFrame['track']['adjustment'] = getid3_lib::RGADadjustmentLookup($parsedFrame['raw']['track']['adjustment'], $parsedFrame['raw']['track']['signbit']); + $parsedFrame['album']['name'] = getid3_lib::RGADnameLookup($parsedFrame['raw']['album']['name']); + $parsedFrame['album']['originator'] = getid3_lib::RGADoriginatorLookup($parsedFrame['raw']['album']['originator']); + $parsedFrame['album']['adjustment'] = getid3_lib::RGADadjustmentLookup($parsedFrame['raw']['album']['adjustment'], $parsedFrame['raw']['album']['signbit']); + + $info['replay_gain']['track']['peak'] = $parsedFrame['peakamplitude']; + $info['replay_gain']['track']['originator'] = $parsedFrame['track']['originator']; + $info['replay_gain']['track']['adjustment'] = $parsedFrame['track']['adjustment']; + $info['replay_gain']['album']['originator'] = $parsedFrame['album']['originator']; + $info['replay_gain']['album']['adjustment'] = $parsedFrame['album']['adjustment']; + + unset($parsedFrame['data']); + + } + + return true; + } + + + public function DeUnsynchronise($data) { + return str_replace("\xFF\x00", "\xFF", $data); + } + + public function LookupExtendedHeaderRestrictionsTagSizeLimits($index) { + static $LookupExtendedHeaderRestrictionsTagSizeLimits = array( + 0x00 => 'No more than 128 frames and 1 MB total tag size', + 0x01 => 'No more than 64 frames and 128 KB total tag size', + 0x02 => 'No more than 32 frames and 40 KB total tag size', + 0x03 => 'No more than 32 frames and 4 KB total tag size', + ); + return (isset($LookupExtendedHeaderRestrictionsTagSizeLimits[$index]) ? $LookupExtendedHeaderRestrictionsTagSizeLimits[$index] : ''); + } + + public function LookupExtendedHeaderRestrictionsTextEncodings($index) { + static $LookupExtendedHeaderRestrictionsTextEncodings = array( + 0x00 => 'No restrictions', + 0x01 => 'Strings are only encoded with ISO-8859-1 or UTF-8', + ); + return (isset($LookupExtendedHeaderRestrictionsTextEncodings[$index]) ? $LookupExtendedHeaderRestrictionsTextEncodings[$index] : ''); + } + + public function LookupExtendedHeaderRestrictionsTextFieldSize($index) { + static $LookupExtendedHeaderRestrictionsTextFieldSize = array( + 0x00 => 'No restrictions', + 0x01 => 'No string is longer than 1024 characters', + 0x02 => 'No string is longer than 128 characters', + 0x03 => 'No string is longer than 30 characters', + ); + return (isset($LookupExtendedHeaderRestrictionsTextFieldSize[$index]) ? $LookupExtendedHeaderRestrictionsTextFieldSize[$index] : ''); + } + + public function LookupExtendedHeaderRestrictionsImageEncoding($index) { + static $LookupExtendedHeaderRestrictionsImageEncoding = array( + 0x00 => 'No restrictions', + 0x01 => 'Images are encoded only with PNG or JPEG', + ); + return (isset($LookupExtendedHeaderRestrictionsImageEncoding[$index]) ? $LookupExtendedHeaderRestrictionsImageEncoding[$index] : ''); + } + + public function LookupExtendedHeaderRestrictionsImageSizeSize($index) { + static $LookupExtendedHeaderRestrictionsImageSizeSize = array( + 0x00 => 'No restrictions', + 0x01 => 'All images are 256x256 pixels or smaller', + 0x02 => 'All images are 64x64 pixels or smaller', + 0x03 => 'All images are exactly 64x64 pixels, unless required otherwise', + ); + return (isset($LookupExtendedHeaderRestrictionsImageSizeSize[$index]) ? $LookupExtendedHeaderRestrictionsImageSizeSize[$index] : ''); + } + + public function LookupCurrencyUnits($currencyid) { + + $begin = __LINE__; + + /** This is not a comment! + + + AED Dirhams + AFA Afghanis + ALL Leke + AMD Drams + ANG Guilders + AOA Kwanza + ARS Pesos + ATS Schillings + AUD Dollars + AWG Guilders + AZM Manats + BAM Convertible Marka + BBD Dollars + BDT Taka + BEF Francs + BGL Leva + BHD Dinars + BIF Francs + BMD Dollars + BND Dollars + BOB Bolivianos + BRL Brazil Real + BSD Dollars + BTN Ngultrum + BWP Pulas + BYR Rubles + BZD Dollars + CAD Dollars + CDF Congolese Francs + CHF Francs + CLP Pesos + CNY Yuan Renminbi + COP Pesos + CRC Colones + CUP Pesos + CVE Escudos + CYP Pounds + CZK Koruny + DEM Deutsche Marks + DJF Francs + DKK Kroner + DOP Pesos + DZD Algeria Dinars + EEK Krooni + EGP Pounds + ERN Nakfa + ESP Pesetas + ETB Birr + EUR Euro + FIM Markkaa + FJD Dollars + FKP Pounds + FRF Francs + GBP Pounds + GEL Lari + GGP Pounds + GHC Cedis + GIP Pounds + GMD Dalasi + GNF Francs + GRD Drachmae + GTQ Quetzales + GYD Dollars + HKD Dollars + HNL Lempiras + HRK Kuna + HTG Gourdes + HUF Forints + IDR Rupiahs + IEP Pounds + ILS New Shekels + IMP Pounds + INR Rupees + IQD Dinars + IRR Rials + ISK Kronur + ITL Lire + JEP Pounds + JMD Dollars + JOD Dinars + JPY Yen + KES Shillings + KGS Soms + KHR Riels + KMF Francs + KPW Won + KWD Dinars + KYD Dollars + KZT Tenge + LAK Kips + LBP Pounds + LKR Rupees + LRD Dollars + LSL Maloti + LTL Litai + LUF Francs + LVL Lati + LYD Dinars + MAD Dirhams + MDL Lei + MGF Malagasy Francs + MKD Denars + MMK Kyats + MNT Tugriks + MOP Patacas + MRO Ouguiyas + MTL Liri + MUR Rupees + MVR Rufiyaa + MWK Kwachas + MXN Pesos + MYR Ringgits + MZM Meticais + NAD Dollars + NGN Nairas + NIO Gold Cordobas + NLG Guilders + NOK Krone + NPR Nepal Rupees + NZD Dollars + OMR Rials + PAB Balboa + PEN Nuevos Soles + PGK Kina + PHP Pesos + PKR Rupees + PLN Zlotych + PTE Escudos + PYG Guarani + QAR Rials + ROL Lei + RUR Rubles + RWF Rwanda Francs + SAR Riyals + SBD Dollars + SCR Rupees + SDD Dinars + SEK Kronor + SGD Dollars + SHP Pounds + SIT Tolars + SKK Koruny + SLL Leones + SOS Shillings + SPL Luigini + SRG Guilders + STD Dobras + SVC Colones + SYP Pounds + SZL Emalangeni + THB Baht + TJR Rubles + TMM Manats + TND Dinars + TOP Pa'anga + TRL Liras + TTD Dollars + TVD Tuvalu Dollars + TWD New Dollars + TZS Shillings + UAH Hryvnia + UGX Shillings + USD Dollars + UYU Pesos + UZS Sums + VAL Lire + VEB Bolivares + VND Dong + VUV Vatu + WST Tala + XAF Francs + XAG Ounces + XAU Ounces + XCD Dollars + XDR Special Drawing Rights + XPD Ounces + XPF Francs + XPT Ounces + YER Rials + YUM New Dinars + ZAR Rand + ZMK Kwacha + ZWD Zimbabwe Dollars + + */ + + return getid3_lib::EmbeddedLookup($currencyid, $begin, __LINE__, __FILE__, 'id3v2-currency-units'); + } + + + public function LookupCurrencyCountry($currencyid) { + + $begin = __LINE__; + + /** This is not a comment! + + AED United Arab Emirates + AFA Afghanistan + ALL Albania + AMD Armenia + ANG Netherlands Antilles + AOA Angola + ARS Argentina + ATS Austria + AUD Australia + AWG Aruba + AZM Azerbaijan + BAM Bosnia and Herzegovina + BBD Barbados + BDT Bangladesh + BEF Belgium + BGL Bulgaria + BHD Bahrain + BIF Burundi + BMD Bermuda + BND Brunei Darussalam + BOB Bolivia + BRL Brazil + BSD Bahamas + BTN Bhutan + BWP Botswana + BYR Belarus + BZD Belize + CAD Canada + CDF Congo/Kinshasa + CHF Switzerland + CLP Chile + CNY China + COP Colombia + CRC Costa Rica + CUP Cuba + CVE Cape Verde + CYP Cyprus + CZK Czech Republic + DEM Germany + DJF Djibouti + DKK Denmark + DOP Dominican Republic + DZD Algeria + EEK Estonia + EGP Egypt + ERN Eritrea + ESP Spain + ETB Ethiopia + EUR Euro Member Countries + FIM Finland + FJD Fiji + FKP Falkland Islands (Malvinas) + FRF France + GBP United Kingdom + GEL Georgia + GGP Guernsey + GHC Ghana + GIP Gibraltar + GMD Gambia + GNF Guinea + GRD Greece + GTQ Guatemala + GYD Guyana + HKD Hong Kong + HNL Honduras + HRK Croatia + HTG Haiti + HUF Hungary + IDR Indonesia + IEP Ireland (Eire) + ILS Israel + IMP Isle of Man + INR India + IQD Iraq + IRR Iran + ISK Iceland + ITL Italy + JEP Jersey + JMD Jamaica + JOD Jordan + JPY Japan + KES Kenya + KGS Kyrgyzstan + KHR Cambodia + KMF Comoros + KPW Korea + KWD Kuwait + KYD Cayman Islands + KZT Kazakstan + LAK Laos + LBP Lebanon + LKR Sri Lanka + LRD Liberia + LSL Lesotho + LTL Lithuania + LUF Luxembourg + LVL Latvia + LYD Libya + MAD Morocco + MDL Moldova + MGF Madagascar + MKD Macedonia + MMK Myanmar (Burma) + MNT Mongolia + MOP Macau + MRO Mauritania + MTL Malta + MUR Mauritius + MVR Maldives (Maldive Islands) + MWK Malawi + MXN Mexico + MYR Malaysia + MZM Mozambique + NAD Namibia + NGN Nigeria + NIO Nicaragua + NLG Netherlands (Holland) + NOK Norway + NPR Nepal + NZD New Zealand + OMR Oman + PAB Panama + PEN Peru + PGK Papua New Guinea + PHP Philippines + PKR Pakistan + PLN Poland + PTE Portugal + PYG Paraguay + QAR Qatar + ROL Romania + RUR Russia + RWF Rwanda + SAR Saudi Arabia + SBD Solomon Islands + SCR Seychelles + SDD Sudan + SEK Sweden + SGD Singapore + SHP Saint Helena + SIT Slovenia + SKK Slovakia + SLL Sierra Leone + SOS Somalia + SPL Seborga + SRG Suriname + STD São Tome and Principe + SVC El Salvador + SYP Syria + SZL Swaziland + THB Thailand + TJR Tajikistan + TMM Turkmenistan + TND Tunisia + TOP Tonga + TRL Turkey + TTD Trinidad and Tobago + TVD Tuvalu + TWD Taiwan + TZS Tanzania + UAH Ukraine + UGX Uganda + USD United States of America + UYU Uruguay + UZS Uzbekistan + VAL Vatican City + VEB Venezuela + VND Viet Nam + VUV Vanuatu + WST Samoa + XAF Communauté Financière Africaine + XAG Silver + XAU Gold + XCD East Caribbean + XDR International Monetary Fund + XPD Palladium + XPF Comptoirs Français du Pacifique + XPT Platinum + YER Yemen + YUM Yugoslavia + ZAR South Africa + ZMK Zambia + ZWD Zimbabwe + + */ + + return getid3_lib::EmbeddedLookup($currencyid, $begin, __LINE__, __FILE__, 'id3v2-currency-country'); + } + + + + public static function LanguageLookup($languagecode, $casesensitive=false) { + + if (!$casesensitive) { + $languagecode = strtolower($languagecode); + } + + // http://www.id3.org/id3v2.4.0-structure.txt + // [4. ID3v2 frame overview] + // The three byte language field, present in several frames, is used to + // describe the language of the frame's content, according to ISO-639-2 + // [ISO-639-2]. The language should be represented in lower case. If the + // language is not known the string "XXX" should be used. + + + // ISO 639-2 - http://www.id3.org/iso639-2.html + + $begin = __LINE__; + + /** This is not a comment! + + XXX unknown + xxx unknown + aar Afar + abk Abkhazian + ace Achinese + ach Acoli + ada Adangme + afa Afro-Asiatic (Other) + afh Afrihili + afr Afrikaans + aka Akan + akk Akkadian + alb Albanian + ale Aleut + alg Algonquian Languages + amh Amharic + ang English, Old (ca. 450-1100) + apa Apache Languages + ara Arabic + arc Aramaic + arm Armenian + arn Araucanian + arp Arapaho + art Artificial (Other) + arw Arawak + asm Assamese + ath Athapascan Languages + ava Avaric + ave Avestan + awa Awadhi + aym Aymara + aze Azerbaijani + bad Banda + bai Bamileke Languages + bak Bashkir + bal Baluchi + bam Bambara + ban Balinese + baq Basque + bas Basa + bat Baltic (Other) + bej Beja + bel Byelorussian + bem Bemba + ben Bengali + ber Berber (Other) + bho Bhojpuri + bih Bihari + bik Bikol + bin Bini + bis Bislama + bla Siksika + bnt Bantu (Other) + bod Tibetan + bra Braj + bre Breton + bua Buriat + bug Buginese + bul Bulgarian + bur Burmese + cad Caddo + cai Central American Indian (Other) + car Carib + cat Catalan + cau Caucasian (Other) + ceb Cebuano + cel Celtic (Other) + ces Czech + cha Chamorro + chb Chibcha + che Chechen + chg Chagatai + chi Chinese + chm Mari + chn Chinook jargon + cho Choctaw + chr Cherokee + chu Church Slavic + chv Chuvash + chy Cheyenne + cop Coptic + cor Cornish + cos Corsican + cpe Creoles and Pidgins, English-based (Other) + cpf Creoles and Pidgins, French-based (Other) + cpp Creoles and Pidgins, Portuguese-based (Other) + cre Cree + crp Creoles and Pidgins (Other) + cus Cushitic (Other) + cym Welsh + cze Czech + dak Dakota + dan Danish + del Delaware + deu German + din Dinka + div Divehi + doi Dogri + dra Dravidian (Other) + dua Duala + dum Dutch, Middle (ca. 1050-1350) + dut Dutch + dyu Dyula + dzo Dzongkha + efi Efik + egy Egyptian (Ancient) + eka Ekajuk + ell Greek, Modern (1453-) + elx Elamite + eng English + enm English, Middle (ca. 1100-1500) + epo Esperanto + esk Eskimo (Other) + esl Spanish + est Estonian + eus Basque + ewe Ewe + ewo Ewondo + fan Fang + fao Faroese + fas Persian + fat Fanti + fij Fijian + fin Finnish + fiu Finno-Ugrian (Other) + fon Fon + fra French + fre French + frm French, Middle (ca. 1400-1600) + fro French, Old (842- ca. 1400) + fry Frisian + ful Fulah + gaa Ga + gae Gaelic (Scots) + gai Irish + gay Gayo + gdh Gaelic (Scots) + gem Germanic (Other) + geo Georgian + ger German + gez Geez + gil Gilbertese + glg Gallegan + gmh German, Middle High (ca. 1050-1500) + goh German, Old High (ca. 750-1050) + gon Gondi + got Gothic + grb Grebo + grc Greek, Ancient (to 1453) + gre Greek, Modern (1453-) + grn Guarani + guj Gujarati + hai Haida + hau Hausa + haw Hawaiian + heb Hebrew + her Herero + hil Hiligaynon + him Himachali + hin Hindi + hmo Hiri Motu + hun Hungarian + hup Hupa + hye Armenian + iba Iban + ibo Igbo + ice Icelandic + ijo Ijo + iku Inuktitut + ilo Iloko + ina Interlingua (International Auxiliary language Association) + inc Indic (Other) + ind Indonesian + ine Indo-European (Other) + ine Interlingue + ipk Inupiak + ira Iranian (Other) + iri Irish + iro Iroquoian uages + isl Icelandic + ita Italian + jav Javanese + jaw Javanese + jpn Japanese + jpr Judeo-Persian + jrb Judeo-Arabic + kaa Kara-Kalpak + kab Kabyle + kac Kachin + kal Greenlandic + kam Kamba + kan Kannada + kar Karen + kas Kashmiri + kat Georgian + kau Kanuri + kaw Kawi + kaz Kazakh + kha Khasi + khi Khoisan (Other) + khm Khmer + kho Khotanese + kik Kikuyu + kin Kinyarwanda + kir Kirghiz + kok Konkani + kom Komi + kon Kongo + kor Korean + kpe Kpelle + kro Kru + kru Kurukh + kua Kuanyama + kum Kumyk + kur Kurdish + kus Kusaie + kut Kutenai + lad Ladino + lah Lahnda + lam Lamba + lao Lao + lat Latin + lav Latvian + lez Lezghian + lin Lingala + lit Lithuanian + lol Mongo + loz Lozi + ltz Letzeburgesch + lub Luba-Katanga + lug Ganda + lui Luiseno + lun Lunda + luo Luo (Kenya and Tanzania) + mac Macedonian + mad Madurese + mag Magahi + mah Marshall + mai Maithili + mak Macedonian + mak Makasar + mal Malayalam + man Mandingo + mao Maori + map Austronesian (Other) + mar Marathi + mas Masai + max Manx + may Malay + men Mende + mga Irish, Middle (900 - 1200) + mic Micmac + min Minangkabau + mis Miscellaneous (Other) + mkh Mon-Kmer (Other) + mlg Malagasy + mlt Maltese + mni Manipuri + mno Manobo Languages + moh Mohawk + mol Moldavian + mon Mongolian + mos Mossi + mri Maori + msa Malay + mul Multiple Languages + mun Munda Languages + mus Creek + mwr Marwari + mya Burmese + myn Mayan Languages + nah Aztec + nai North American Indian (Other) + nau Nauru + nav Navajo + nbl Ndebele, South + nde Ndebele, North + ndo Ndongo + nep Nepali + new Newari + nic Niger-Kordofanian (Other) + niu Niuean + nla Dutch + nno Norwegian (Nynorsk) + non Norse, Old + nor Norwegian + nso Sotho, Northern + nub Nubian Languages + nya Nyanja + nym Nyamwezi + nyn Nyankole + nyo Nyoro + nzi Nzima + oci Langue d'Oc (post 1500) + oji Ojibwa + ori Oriya + orm Oromo + osa Osage + oss Ossetic + ota Turkish, Ottoman (1500 - 1928) + oto Otomian Languages + paa Papuan-Australian (Other) + pag Pangasinan + pal Pahlavi + pam Pampanga + pan Panjabi + pap Papiamento + pau Palauan + peo Persian, Old (ca 600 - 400 B.C.) + per Persian + phn Phoenician + pli Pali + pol Polish + pon Ponape + por Portuguese + pra Prakrit uages + pro Provencal, Old (to 1500) + pus Pushto + que Quechua + raj Rajasthani + rar Rarotongan + roa Romance (Other) + roh Rhaeto-Romance + rom Romany + ron Romanian + rum Romanian + run Rundi + rus Russian + sad Sandawe + sag Sango + sah Yakut + sai South American Indian (Other) + sal Salishan Languages + sam Samaritan Aramaic + san Sanskrit + sco Scots + scr Serbo-Croatian + sel Selkup + sem Semitic (Other) + sga Irish, Old (to 900) + shn Shan + sid Sidamo + sin Singhalese + sio Siouan Languages + sit Sino-Tibetan (Other) + sla Slavic (Other) + slk Slovak + slo Slovak + slv Slovenian + smi Sami Languages + smo Samoan + sna Shona + snd Sindhi + sog Sogdian + som Somali + son Songhai + sot Sotho, Southern + spa Spanish + sqi Albanian + srd Sardinian + srr Serer + ssa Nilo-Saharan (Other) + ssw Siswant + ssw Swazi + suk Sukuma + sun Sudanese + sus Susu + sux Sumerian + sve Swedish + swa Swahili + swe Swedish + syr Syriac + tah Tahitian + tam Tamil + tat Tatar + tel Telugu + tem Timne + ter Tereno + tgk Tajik + tgl Tagalog + tha Thai + tib Tibetan + tig Tigre + tir Tigrinya + tiv Tivi + tli Tlingit + tmh Tamashek + tog Tonga (Nyasa) + ton Tonga (Tonga Islands) + tru Truk + tsi Tsimshian + tsn Tswana + tso Tsonga + tuk Turkmen + tum Tumbuka + tur Turkish + tut Altaic (Other) + twi Twi + tyv Tuvinian + uga Ugaritic + uig Uighur + ukr Ukrainian + umb Umbundu + und Undetermined + urd Urdu + uzb Uzbek + vai Vai + ven Venda + vie Vietnamese + vol Volapük + vot Votic + wak Wakashan Languages + wal Walamo + war Waray + was Washo + wel Welsh + wen Sorbian Languages + wol Wolof + xho Xhosa + yao Yao + yap Yap + yid Yiddish + yor Yoruba + zap Zapotec + zen Zenaga + zha Zhuang + zho Chinese + zul Zulu + zun Zuni + + */ + + return getid3_lib::EmbeddedLookup($languagecode, $begin, __LINE__, __FILE__, 'id3v2-languagecode'); + } + + + public static function ETCOEventLookup($index) { + if (($index >= 0x17) && ($index <= 0xDF)) { + return 'reserved for future use'; + } + if (($index >= 0xE0) && ($index <= 0xEF)) { + return 'not predefined synch 0-F'; + } + if (($index >= 0xF0) && ($index <= 0xFC)) { + return 'reserved for future use'; + } + + static $EventLookup = array( + 0x00 => 'padding (has no meaning)', + 0x01 => 'end of initial silence', + 0x02 => 'intro start', + 0x03 => 'main part start', + 0x04 => 'outro start', + 0x05 => 'outro end', + 0x06 => 'verse start', + 0x07 => 'refrain start', + 0x08 => 'interlude start', + 0x09 => 'theme start', + 0x0A => 'variation start', + 0x0B => 'key change', + 0x0C => 'time change', + 0x0D => 'momentary unwanted noise (Snap, Crackle & Pop)', + 0x0E => 'sustained noise', + 0x0F => 'sustained noise end', + 0x10 => 'intro end', + 0x11 => 'main part end', + 0x12 => 'verse end', + 0x13 => 'refrain end', + 0x14 => 'theme end', + 0x15 => 'profanity', + 0x16 => 'profanity end', + 0xFD => 'audio end (start of silence)', + 0xFE => 'audio file ends', + 0xFF => 'one more byte of events follows' + ); + + return (isset($EventLookup[$index]) ? $EventLookup[$index] : ''); + } + + public static function SYTLContentTypeLookup($index) { + static $SYTLContentTypeLookup = array( + 0x00 => 'other', + 0x01 => 'lyrics', + 0x02 => 'text transcription', + 0x03 => 'movement/part name', // (e.g. 'Adagio') + 0x04 => 'events', // (e.g. 'Don Quijote enters the stage') + 0x05 => 'chord', // (e.g. 'Bb F Fsus') + 0x06 => 'trivia/\'pop up\' information', + 0x07 => 'URLs to webpages', + 0x08 => 'URLs to images' + ); + + return (isset($SYTLContentTypeLookup[$index]) ? $SYTLContentTypeLookup[$index] : ''); + } + + public static function APICPictureTypeLookup($index, $returnarray=false) { + static $APICPictureTypeLookup = array( + 0x00 => 'Other', + 0x01 => '32x32 pixels \'file icon\' (PNG only)', + 0x02 => 'Other file icon', + 0x03 => 'Cover (front)', + 0x04 => 'Cover (back)', + 0x05 => 'Leaflet page', + 0x06 => 'Media (e.g. label side of CD)', + 0x07 => 'Lead artist/lead performer/soloist', + 0x08 => 'Artist/performer', + 0x09 => 'Conductor', + 0x0A => 'Band/Orchestra', + 0x0B => 'Composer', + 0x0C => 'Lyricist/text writer', + 0x0D => 'Recording Location', + 0x0E => 'During recording', + 0x0F => 'During performance', + 0x10 => 'Movie/video screen capture', + 0x11 => 'A bright coloured fish', + 0x12 => 'Illustration', + 0x13 => 'Band/artist logotype', + 0x14 => 'Publisher/Studio logotype' + ); + if ($returnarray) { + return $APICPictureTypeLookup; + } + return (isset($APICPictureTypeLookup[$index]) ? $APICPictureTypeLookup[$index] : ''); + } + + public static function COMRReceivedAsLookup($index) { + static $COMRReceivedAsLookup = array( + 0x00 => 'Other', + 0x01 => 'Standard CD album with other songs', + 0x02 => 'Compressed audio on CD', + 0x03 => 'File over the Internet', + 0x04 => 'Stream over the Internet', + 0x05 => 'As note sheets', + 0x06 => 'As note sheets in a book with other sheets', + 0x07 => 'Music on other media', + 0x08 => 'Non-musical merchandise' + ); + + return (isset($COMRReceivedAsLookup[$index]) ? $COMRReceivedAsLookup[$index] : ''); + } + + public static function RVA2ChannelTypeLookup($index) { + static $RVA2ChannelTypeLookup = array( + 0x00 => 'Other', + 0x01 => 'Master volume', + 0x02 => 'Front right', + 0x03 => 'Front left', + 0x04 => 'Back right', + 0x05 => 'Back left', + 0x06 => 'Front centre', + 0x07 => 'Back centre', + 0x08 => 'Subwoofer' + ); + + return (isset($RVA2ChannelTypeLookup[$index]) ? $RVA2ChannelTypeLookup[$index] : ''); + } + + public static function FrameNameLongLookup($framename) { + + $begin = __LINE__; + + /** This is not a comment! + + AENC Audio encryption + APIC Attached picture + ASPI Audio seek point index + BUF Recommended buffer size + CNT Play counter + COM Comments + COMM Comments + COMR Commercial frame + CRA Audio encryption + CRM Encrypted meta frame + ENCR Encryption method registration + EQU Equalisation + EQU2 Equalisation (2) + EQUA Equalisation + ETC Event timing codes + ETCO Event timing codes + GEO General encapsulated object + GEOB General encapsulated object + GRID Group identification registration + IPL Involved people list + IPLS Involved people list + LINK Linked information + LNK Linked information + MCDI Music CD identifier + MCI Music CD Identifier + MLL MPEG location lookup table + MLLT MPEG location lookup table + OWNE Ownership frame + PCNT Play counter + PIC Attached picture + POP Popularimeter + POPM Popularimeter + POSS Position synchronisation frame + PRIV Private frame + RBUF Recommended buffer size + REV Reverb + RVA Relative volume adjustment + RVA2 Relative volume adjustment (2) + RVAD Relative volume adjustment + RVRB Reverb + SEEK Seek frame + SIGN Signature frame + SLT Synchronised lyric/text + STC Synced tempo codes + SYLT Synchronised lyric/text + SYTC Synchronised tempo codes + TAL Album/Movie/Show title + TALB Album/Movie/Show title + TBP BPM (Beats Per Minute) + TBPM BPM (beats per minute) + TCM Composer + TCMP Part of a compilation + TCO Content type + TCOM Composer + TCON Content type + TCOP Copyright message + TCP Part of a compilation + TCR Copyright message + TDA Date + TDAT Date + TDEN Encoding time + TDLY Playlist delay + TDOR Original release time + TDRC Recording time + TDRL Release time + TDTG Tagging time + TDY Playlist delay + TEN Encoded by + TENC Encoded by + TEXT Lyricist/Text writer + TFLT File type + TFT File type + TIM Time + TIME Time + TIPL Involved people list + TIT1 Content group description + TIT2 Title/songname/content description + TIT3 Subtitle/Description refinement + TKE Initial key + TKEY Initial key + TLA Language(s) + TLAN Language(s) + TLE Length + TLEN Length + TMCL Musician credits list + TMED Media type + TMOO Mood + TMT Media type + TOA Original artist(s)/performer(s) + TOAL Original album/movie/show title + TOF Original filename + TOFN Original filename + TOL Original Lyricist(s)/text writer(s) + TOLY Original lyricist(s)/text writer(s) + TOPE Original artist(s)/performer(s) + TOR Original release year + TORY Original release year + TOT Original album/Movie/Show title + TOWN File owner/licensee + TP1 Lead artist(s)/Lead performer(s)/Soloist(s)/Performing group + TP2 Band/Orchestra/Accompaniment + TP3 Conductor/Performer refinement + TP4 Interpreted, remixed, or otherwise modified by + TPA Part of a set + TPB Publisher + TPE1 Lead performer(s)/Soloist(s) + TPE2 Band/orchestra/accompaniment + TPE3 Conductor/performer refinement + TPE4 Interpreted, remixed, or otherwise modified by + TPOS Part of a set + TPRO Produced notice + TPUB Publisher + TRC ISRC (International Standard Recording Code) + TRCK Track number/Position in set + TRD Recording dates + TRDA Recording dates + TRK Track number/Position in set + TRSN Internet radio station name + TRSO Internet radio station owner + TS2 Album-Artist sort order + TSA Album sort order + TSC Composer sort order + TSI Size + TSIZ Size + TSO2 Album-Artist sort order + TSOA Album sort order + TSOC Composer sort order + TSOP Performer sort order + TSOT Title sort order + TSP Performer sort order + TSRC ISRC (international standard recording code) + TSS Software/hardware and settings used for encoding + TSSE Software/Hardware and settings used for encoding + TSST Set subtitle + TST Title sort order + TT1 Content group description + TT2 Title/Songname/Content description + TT3 Subtitle/Description refinement + TXT Lyricist/text writer + TXX User defined text information frame + TXXX User defined text information frame + TYE Year + TYER Year + UFI Unique file identifier + UFID Unique file identifier + ULT Unsychronised lyric/text transcription + USER Terms of use + USLT Unsynchronised lyric/text transcription + WAF Official audio file webpage + WAR Official artist/performer webpage + WAS Official audio source webpage + WCM Commercial information + WCOM Commercial information + WCOP Copyright/Legal information + WCP Copyright/Legal information + WOAF Official audio file webpage + WOAR Official artist/performer webpage + WOAS Official audio source webpage + WORS Official Internet radio station homepage + WPAY Payment + WPB Publishers official webpage + WPUB Publishers official webpage + WXX User defined URL link frame + WXXX User defined URL link frame + TFEA Featured Artist + TSTU Recording Studio + rgad Replay Gain Adjustment + + */ + + return getid3_lib::EmbeddedLookup($framename, $begin, __LINE__, __FILE__, 'id3v2-framename_long'); + + // Last three: + // from Helium2 [www.helium2.com] + // from http://privatewww.essex.ac.uk/~djmrob/replaygain/file_format_id3v2.html + } + + + public static function FrameNameShortLookup($framename) { + + $begin = __LINE__; + + /** This is not a comment! + + AENC audio_encryption + APIC attached_picture + ASPI audio_seek_point_index + BUF recommended_buffer_size + CNT play_counter + COM comment + COMM comment + COMR commercial_frame + CRA audio_encryption + CRM encrypted_meta_frame + ENCR encryption_method_registration + EQU equalisation + EQU2 equalisation + EQUA equalisation + ETC event_timing_codes + ETCO event_timing_codes + GEO general_encapsulated_object + GEOB general_encapsulated_object + GRID group_identification_registration + IPL involved_people_list + IPLS involved_people_list + LINK linked_information + LNK linked_information + MCDI music_cd_identifier + MCI music_cd_identifier + MLL mpeg_location_lookup_table + MLLT mpeg_location_lookup_table + OWNE ownership_frame + PCNT play_counter + PIC attached_picture + POP popularimeter + POPM popularimeter + POSS position_synchronisation_frame + PRIV private_frame + RBUF recommended_buffer_size + REV reverb + RVA relative_volume_adjustment + RVA2 relative_volume_adjustment + RVAD relative_volume_adjustment + RVRB reverb + SEEK seek_frame + SIGN signature_frame + SLT synchronised_lyric + STC synced_tempo_codes + SYLT synchronised_lyric + SYTC synchronised_tempo_codes + TAL album + TALB album + TBP bpm + TBPM bpm + TCM composer + TCMP part_of_a_compilation + TCO genre + TCOM composer + TCON genre + TCOP copyright_message + TCP part_of_a_compilation + TCR copyright_message + TDA date + TDAT date + TDEN encoding_time + TDLY playlist_delay + TDOR original_release_time + TDRC recording_time + TDRL release_time + TDTG tagging_time + TDY playlist_delay + TEN encoded_by + TENC encoded_by + TEXT lyricist + TFLT file_type + TFT file_type + TIM time + TIME time + TIPL involved_people_list + TIT1 content_group_description + TIT2 title + TIT3 subtitle + TKE initial_key + TKEY initial_key + TLA language + TLAN language + TLE length + TLEN length + TMCL musician_credits_list + TMED media_type + TMOO mood + TMT media_type + TOA original_artist + TOAL original_album + TOF original_filename + TOFN original_filename + TOL original_lyricist + TOLY original_lyricist + TOPE original_artist + TOR original_year + TORY original_year + TOT original_album + TOWN file_owner + TP1 artist + TP2 band + TP3 conductor + TP4 remixer + TPA part_of_a_set + TPB publisher + TPE1 artist + TPE2 band + TPE3 conductor + TPE4 remixer + TPOS part_of_a_set + TPRO produced_notice + TPUB publisher + TRC isrc + TRCK track_number + TRD recording_dates + TRDA recording_dates + TRK track_number + TRSN internet_radio_station_name + TRSO internet_radio_station_owner + TS2 album_artist_sort_order + TSA album_sort_order + TSC composer_sort_order + TSI size + TSIZ size + TSO2 album_artist_sort_order + TSOA album_sort_order + TSOC composer_sort_order + TSOP performer_sort_order + TSOT title_sort_order + TSP performer_sort_order + TSRC isrc + TSS encoder_settings + TSSE encoder_settings + TSST set_subtitle + TST title_sort_order + TT1 content_group_description + TT2 title + TT3 subtitle + TXT lyricist + TXX text + TXXX text + TYE year + TYER year + UFI unique_file_identifier + UFID unique_file_identifier + ULT unsychronised_lyric + USER terms_of_use + USLT unsynchronised_lyric + WAF url_file + WAR url_artist + WAS url_source + WCM commercial_information + WCOM commercial_information + WCOP copyright + WCP copyright + WOAF url_file + WOAR url_artist + WOAS url_source + WORS url_station + WPAY url_payment + WPB url_publisher + WPUB url_publisher + WXX url_user + WXXX url_user + TFEA featured_artist + TSTU recording_studio + rgad replay_gain_adjustment + + */ + + return getid3_lib::EmbeddedLookup($framename, $begin, __LINE__, __FILE__, 'id3v2-framename_short'); + } + + public static function TextEncodingTerminatorLookup($encoding) { + // http://www.id3.org/id3v2.4.0-structure.txt + // Frames that allow different types of text encoding contains a text encoding description byte. Possible encodings: + static $TextEncodingTerminatorLookup = array( + 0 => "\x00", // $00 ISO-8859-1. Terminated with $00. + 1 => "\x00\x00", // $01 UTF-16 encoded Unicode with BOM. All strings in the same frame SHALL have the same byteorder. Terminated with $00 00. + 2 => "\x00\x00", // $02 UTF-16BE encoded Unicode without BOM. Terminated with $00 00. + 3 => "\x00", // $03 UTF-8 encoded Unicode. Terminated with $00. + 255 => "\x00\x00" + ); + return (isset($TextEncodingTerminatorLookup[$encoding]) ? $TextEncodingTerminatorLookup[$encoding] : ''); + } + + public static function TextEncodingNameLookup($encoding) { + // http://www.id3.org/id3v2.4.0-structure.txt + // Frames that allow different types of text encoding contains a text encoding description byte. Possible encodings: + static $TextEncodingNameLookup = array( + 0 => 'ISO-8859-1', // $00 ISO-8859-1. Terminated with $00. + 1 => 'UTF-16', // $01 UTF-16 encoded Unicode with BOM. All strings in the same frame SHALL have the same byteorder. Terminated with $00 00. + 2 => 'UTF-16BE', // $02 UTF-16BE encoded Unicode without BOM. Terminated with $00 00. + 3 => 'UTF-8', // $03 UTF-8 encoded Unicode. Terminated with $00. + 255 => 'UTF-16BE' + ); + return (isset($TextEncodingNameLookup[$encoding]) ? $TextEncodingNameLookup[$encoding] : 'ISO-8859-1'); + } + + public static function IsValidID3v2FrameName($framename, $id3v2majorversion) { + switch ($id3v2majorversion) { + case 2: + return preg_match('#[A-Z][A-Z0-9]{2}#', $framename); + break; + + case 3: + case 4: + return preg_match('#[A-Z][A-Z0-9]{3}#', $framename); + break; + } + return false; + } + + public static function IsANumber($numberstring, $allowdecimal=false, $allownegative=false) { + for ($i = 0; $i < strlen($numberstring); $i++) { + if ((chr($numberstring{$i}) < chr('0')) || (chr($numberstring{$i}) > chr('9'))) { + if (($numberstring{$i} == '.') && $allowdecimal) { + // allowed + } elseif (($numberstring{$i} == '-') && $allownegative && ($i == 0)) { + // allowed + } else { + return false; + } + } + } + return true; + } + + public static function IsValidDateStampString($datestamp) { + if (strlen($datestamp) != 8) { + return false; + } + if (!self::IsANumber($datestamp, false)) { + return false; + } + $year = substr($datestamp, 0, 4); + $month = substr($datestamp, 4, 2); + $day = substr($datestamp, 6, 2); + if (($year == 0) || ($month == 0) || ($day == 0)) { + return false; + } + if ($month > 12) { + return false; + } + if ($day > 31) { + return false; + } + if (($day > 30) && (($month == 4) || ($month == 6) || ($month == 9) || ($month == 11))) { + return false; + } + if (($day > 29) && ($month == 2)) { + return false; + } + return true; + } + + public static function ID3v2HeaderLength($majorversion) { + return (($majorversion == 2) ? 6 : 10); + } + +} + diff --git a/src/wp-includes/ID3/module.tag.lyrics3.php b/src/wp-includes/ID3/module.tag.lyrics3.php new file mode 100644 index 0000000..108d7ae --- /dev/null +++ b/src/wp-includes/ID3/module.tag.lyrics3.php @@ -0,0 +1,294 @@ + // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// See readme.txt for more details // +///////////////////////////////////////////////////////////////// +/// // +// module.tag.lyrics3.php // +// module for analyzing Lyrics3 tags // +// dependencies: module.tag.apetag.php (optional) // +// /// +///////////////////////////////////////////////////////////////// + + +class getid3_lyrics3 extends getid3_handler +{ + + public function Analyze() { + $info = &$this->getid3->info; + + // http://www.volweb.cz/str/tags.htm + + if (!getid3_lib::intValueSupported($info['filesize'])) { + $info['warning'][] = 'Unable to check for Lyrics3 because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB'; + return false; + } + + fseek($this->getid3->fp, (0 - 128 - 9 - 6), SEEK_END); // end - ID3v1 - "LYRICSEND" - [Lyrics3size] + $lyrics3_id3v1 = fread($this->getid3->fp, 128 + 9 + 6); + $lyrics3lsz = substr($lyrics3_id3v1, 0, 6); // Lyrics3size + $lyrics3end = substr($lyrics3_id3v1, 6, 9); // LYRICSEND or LYRICS200 + $id3v1tag = substr($lyrics3_id3v1, 15, 128); // ID3v1 + + if ($lyrics3end == 'LYRICSEND') { + // Lyrics3v1, ID3v1, no APE + + $lyrics3size = 5100; + $lyrics3offset = $info['filesize'] - 128 - $lyrics3size; + $lyrics3version = 1; + + } elseif ($lyrics3end == 'LYRICS200') { + // Lyrics3v2, ID3v1, no APE + + // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200' + $lyrics3size = $lyrics3lsz + 6 + strlen('LYRICS200'); + $lyrics3offset = $info['filesize'] - 128 - $lyrics3size; + $lyrics3version = 2; + + } elseif (substr(strrev($lyrics3_id3v1), 0, 9) == strrev('LYRICSEND')) { + // Lyrics3v1, no ID3v1, no APE + + $lyrics3size = 5100; + $lyrics3offset = $info['filesize'] - $lyrics3size; + $lyrics3version = 1; + $lyrics3offset = $info['filesize'] - $lyrics3size; + + } elseif (substr(strrev($lyrics3_id3v1), 0, 9) == strrev('LYRICS200')) { + + // Lyrics3v2, no ID3v1, no APE + + $lyrics3size = strrev(substr(strrev($lyrics3_id3v1), 9, 6)) + 6 + strlen('LYRICS200'); // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200' + $lyrics3offset = $info['filesize'] - $lyrics3size; + $lyrics3version = 2; + + } else { + + if (isset($info['ape']['tag_offset_start']) && ($info['ape']['tag_offset_start'] > 15)) { + + fseek($this->getid3->fp, $info['ape']['tag_offset_start'] - 15, SEEK_SET); + $lyrics3lsz = fread($this->getid3->fp, 6); + $lyrics3end = fread($this->getid3->fp, 9); + + if ($lyrics3end == 'LYRICSEND') { + // Lyrics3v1, APE, maybe ID3v1 + + $lyrics3size = 5100; + $lyrics3offset = $info['ape']['tag_offset_start'] - $lyrics3size; + $info['avdataend'] = $lyrics3offset; + $lyrics3version = 1; + $info['warning'][] = 'APE tag located after Lyrics3, will probably break Lyrics3 compatability'; + + } elseif ($lyrics3end == 'LYRICS200') { + // Lyrics3v2, APE, maybe ID3v1 + + $lyrics3size = $lyrics3lsz + 6 + strlen('LYRICS200'); // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200' + $lyrics3offset = $info['ape']['tag_offset_start'] - $lyrics3size; + $lyrics3version = 2; + $info['warning'][] = 'APE tag located after Lyrics3, will probably break Lyrics3 compatability'; + + } + + } + + } + + if (isset($lyrics3offset)) { + $info['avdataend'] = $lyrics3offset; + $this->getLyrics3Data($lyrics3offset, $lyrics3version, $lyrics3size); + + if (!isset($info['ape'])) { + $GETID3_ERRORARRAY = &$info['warning']; + if (getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.apetag.php', __FILE__, false)) { + $getid3_temp = new getID3(); + $getid3_temp->openfile($this->getid3->filename); + $getid3_apetag = new getid3_apetag($getid3_temp); + $getid3_apetag->overrideendoffset = $info['lyrics3']['tag_offset_start']; + $getid3_apetag->Analyze(); + if (!empty($getid3_temp->info['ape'])) { + $info['ape'] = $getid3_temp->info['ape']; + } + if (!empty($getid3_temp->info['replay_gain'])) { + $info['replay_gain'] = $getid3_temp->info['replay_gain']; + } + unset($getid3_temp, $getid3_apetag); + } + } + + } + + return true; + } + + public function getLyrics3Data($endoffset, $version, $length) { + // http://www.volweb.cz/str/tags.htm + + $info = &$this->getid3->info; + + if (!getid3_lib::intValueSupported($endoffset)) { + $info['warning'][] = 'Unable to check for Lyrics3 because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB'; + return false; + } + + fseek($this->getid3->fp, $endoffset, SEEK_SET); + if ($length <= 0) { + return false; + } + $rawdata = fread($this->getid3->fp, $length); + + $ParsedLyrics3['raw']['lyrics3version'] = $version; + $ParsedLyrics3['raw']['lyrics3tagsize'] = $length; + $ParsedLyrics3['tag_offset_start'] = $endoffset; + $ParsedLyrics3['tag_offset_end'] = $endoffset + $length - 1; + + if (substr($rawdata, 0, 11) != 'LYRICSBEGIN') { + if (strpos($rawdata, 'LYRICSBEGIN') !== false) { + + $info['warning'][] = '"LYRICSBEGIN" expected at '.$endoffset.' but actually found at '.($endoffset + strpos($rawdata, 'LYRICSBEGIN')).' - this is invalid for Lyrics3 v'.$version; + $info['avdataend'] = $endoffset + strpos($rawdata, 'LYRICSBEGIN'); + $rawdata = substr($rawdata, strpos($rawdata, 'LYRICSBEGIN')); + $length = strlen($rawdata); + $ParsedLyrics3['tag_offset_start'] = $info['avdataend']; + $ParsedLyrics3['raw']['lyrics3tagsize'] = $length; + + } else { + + $info['error'][] = '"LYRICSBEGIN" expected at '.$endoffset.' but found "'.substr($rawdata, 0, 11).'" instead'; + return false; + + } + + } + + switch ($version) { + + case 1: + if (substr($rawdata, strlen($rawdata) - 9, 9) == 'LYRICSEND') { + $ParsedLyrics3['raw']['LYR'] = trim(substr($rawdata, 11, strlen($rawdata) - 11 - 9)); + $this->Lyrics3LyricsTimestampParse($ParsedLyrics3); + } else { + $info['error'][] = '"LYRICSEND" expected at '.(ftell($this->getid3->fp) - 11 + $length - 9).' but found "'.substr($rawdata, strlen($rawdata) - 9, 9).'" instead'; + return false; + } + break; + + case 2: + if (substr($rawdata, strlen($rawdata) - 9, 9) == 'LYRICS200') { + $ParsedLyrics3['raw']['unparsed'] = substr($rawdata, 11, strlen($rawdata) - 11 - 9 - 6); // LYRICSBEGIN + LYRICS200 + LSZ + $rawdata = $ParsedLyrics3['raw']['unparsed']; + while (strlen($rawdata) > 0) { + $fieldname = substr($rawdata, 0, 3); + $fieldsize = (int) substr($rawdata, 3, 5); + $ParsedLyrics3['raw'][$fieldname] = substr($rawdata, 8, $fieldsize); + $rawdata = substr($rawdata, 3 + 5 + $fieldsize); + } + + if (isset($ParsedLyrics3['raw']['IND'])) { + $i = 0; + $flagnames = array('lyrics', 'timestamps', 'inhibitrandom'); + foreach ($flagnames as $flagname) { + if (strlen($ParsedLyrics3['raw']['IND']) > $i++) { + $ParsedLyrics3['flags'][$flagname] = $this->IntString2Bool(substr($ParsedLyrics3['raw']['IND'], $i, 1 - 1)); + } + } + } + + $fieldnametranslation = array('ETT'=>'title', 'EAR'=>'artist', 'EAL'=>'album', 'INF'=>'comment', 'AUT'=>'author'); + foreach ($fieldnametranslation as $key => $value) { + if (isset($ParsedLyrics3['raw'][$key])) { + $ParsedLyrics3['comments'][$value][] = trim($ParsedLyrics3['raw'][$key]); + } + } + + if (isset($ParsedLyrics3['raw']['IMG'])) { + $imagestrings = explode("\r\n", $ParsedLyrics3['raw']['IMG']); + foreach ($imagestrings as $key => $imagestring) { + if (strpos($imagestring, '||') !== false) { + $imagearray = explode('||', $imagestring); + $ParsedLyrics3['images'][$key]['filename'] = (isset($imagearray[0]) ? $imagearray[0] : ''); + $ParsedLyrics3['images'][$key]['description'] = (isset($imagearray[1]) ? $imagearray[1] : ''); + $ParsedLyrics3['images'][$key]['timestamp'] = $this->Lyrics3Timestamp2Seconds(isset($imagearray[2]) ? $imagearray[2] : ''); + } + } + } + if (isset($ParsedLyrics3['raw']['LYR'])) { + $this->Lyrics3LyricsTimestampParse($ParsedLyrics3); + } + } else { + $info['error'][] = '"LYRICS200" expected at '.(ftell($this->getid3->fp) - 11 + $length - 9).' but found "'.substr($rawdata, strlen($rawdata) - 9, 9).'" instead'; + return false; + } + break; + + default: + $info['error'][] = 'Cannot process Lyrics3 version '.$version.' (only v1 and v2)'; + return false; + break; + } + + + if (isset($info['id3v1']['tag_offset_start']) && ($info['id3v1']['tag_offset_start'] <= $ParsedLyrics3['tag_offset_end'])) { + $info['warning'][] = 'ID3v1 tag information ignored since it appears to be a false synch in Lyrics3 tag data'; + unset($info['id3v1']); + foreach ($info['warning'] as $key => $value) { + if ($value == 'Some ID3v1 fields do not use NULL characters for padding') { + unset($info['warning'][$key]); + sort($info['warning']); + break; + } + } + } + + $info['lyrics3'] = $ParsedLyrics3; + + return true; + } + + public function Lyrics3Timestamp2Seconds($rawtimestamp) { + if (preg_match('#^\\[([0-9]{2}):([0-9]{2})\\]$#', $rawtimestamp, $regs)) { + return (int) (($regs[1] * 60) + $regs[2]); + } + return false; + } + + public function Lyrics3LyricsTimestampParse(&$Lyrics3data) { + $lyricsarray = explode("\r\n", $Lyrics3data['raw']['LYR']); + foreach ($lyricsarray as $key => $lyricline) { + $regs = array(); + unset($thislinetimestamps); + while (preg_match('#^(\\[[0-9]{2}:[0-9]{2}\\])#', $lyricline, $regs)) { + $thislinetimestamps[] = $this->Lyrics3Timestamp2Seconds($regs[0]); + $lyricline = str_replace($regs[0], '', $lyricline); + } + $notimestamplyricsarray[$key] = $lyricline; + if (isset($thislinetimestamps) && is_array($thislinetimestamps)) { + sort($thislinetimestamps); + foreach ($thislinetimestamps as $timestampkey => $timestamp) { + if (isset($Lyrics3data['synchedlyrics'][$timestamp])) { + // timestamps only have a 1-second resolution, it's possible that multiple lines + // could have the same timestamp, if so, append + $Lyrics3data['synchedlyrics'][$timestamp] .= "\r\n".$lyricline; + } else { + $Lyrics3data['synchedlyrics'][$timestamp] = $lyricline; + } + } + } + } + $Lyrics3data['unsynchedlyrics'] = implode("\r\n", $notimestamplyricsarray); + if (isset($Lyrics3data['synchedlyrics']) && is_array($Lyrics3data['synchedlyrics'])) { + ksort($Lyrics3data['synchedlyrics']); + } + return true; + } + + public function IntString2Bool($char) { + if ($char == '1') { + return true; + } elseif ($char == '0') { + return false; + } + return null; + } +} diff --git a/src/wp-includes/ID3/readme.txt b/src/wp-includes/ID3/readme.txt new file mode 100644 index 0000000..337e84f --- /dev/null +++ b/src/wp-includes/ID3/readme.txt @@ -0,0 +1,603 @@ +///////////////////////////////////////////////////////////////// +/// getID3() by James Heinrich // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// + +***************************************************************** +***************************************************************** + + getID3() is released under multiple licenses. You may choose + from the following licenses, and use getID3 according to the + terms of the license most suitable to your project. + +GNU GPL: https://gnu.org/licenses/gpl.html (v3) + https://gnu.org/licenses/old-licenses/gpl-2.0.html (v2) + https://gnu.org/licenses/old-licenses/gpl-1.0.html (v1) + +GNU LGPL: https://gnu.org/licenses/lgpl.html (v3) + +Mozilla MPL: http://www.mozilla.org/MPL/2.0/ (v2) + +getID3 Commercial License: http://getid3.org/#gCL (payment required) + +***************************************************************** +***************************************************************** +Copies of each of the above licenses are included in the 'licenses' +directory of the getID3 distribution. + + + +---------------------------------------------+ + | If you want to donate, there is a link on | + | http://www.getid3.org for PayPal donations. | + +---------------------------------------------+ + + +Quick Start +=========================================================================== + +Q: How can I check that getID3() works on my server/files? +A: Unzip getID3() to a directory, then access /demos/demo.browse.php + + + +Support +=========================================================================== + +Q: I have a question, or I found a bug. What do I do? +A: The preferred method of support requests and/or bug reports is the + forum at http://support.getid3.org/ + + + +Sourceforge Notification +=========================================================================== + +It's highly recommended that you sign up for notification from +Sourceforge for when new versions are released. Please visit: +http://sourceforge.net/project/showfiles.php?group_id=55859 +and click the little "monitor package" icon/link. If you're +previously signed up for the mailing list, be aware that it has +been discontinued, only the automated Sourceforge notification +will be used from now on. + + + +What does getID3() do? +=========================================================================== + +Reads & parses (to varying degrees): +# tags: + * APE (v1 and v2) + * ID3v1 (& ID3v1.1) + * ID3v2 (v2.4, v2.3, v2.2) + * Lyrics3 (v1 & v2) + +# audio-lossy: + * MP3/MP2/MP1 + * MPC / Musepack + * Ogg (Vorbis, OggFLAC, Speex) + * AAC / MP4 + * AC3 + * DTS + * RealAudio + * Speex + * DSS + * VQF + +# audio-lossless: + * AIFF + * AU + * Bonk + * CD-audio (*.cda) + * FLAC + * LA (Lossless Audio) + * LiteWave + * LPAC + * MIDI + * Monkey's Audio + * OptimFROG + * RKAU + * Shorten + * TTA + * VOC + * WAV (RIFF) + * WavPack + +# audio-video: + * ASF: ASF, Windows Media Audio (WMA), Windows Media Video (WMV) + * AVI (RIFF) + * Flash + * Matroska (MKV) + * MPEG-1 / MPEG-2 + * NSV (Nullsoft Streaming Video) + * Quicktime (including MP4) + * RealVideo + +# still image: + * BMP + * GIF + * JPEG + * PNG + * TIFF + * SWF (Flash) + * PhotoCD + +# data: + * ISO-9660 CD-ROM image (directory structure) + * SZIP (limited support) + * ZIP (directory structure) + * TAR + * CUE + + +Writes: + * ID3v1 (& ID3v1.1) + * ID3v2 (v2.3 & v2.4) + * VorbisComment on OggVorbis + * VorbisComment on FLAC (not OggFLAC) + * APE v2 + * Lyrics3 (delete only) + + + +Requirements +=========================================================================== + +* PHP 4.2.0 up to 5.2.x for getID3() 1.7.x (and earlier) +* PHP 5.0.5 (or higher) for getID3() 1.8.x (and up) +* PHP 5.0.5 (or higher) for getID3() 2.0.x (and up) +* at least 4MB memory for PHP. 8MB or more is highly recommended. + 12MB is required with all modules loaded. + + + +Usage +=========================================================================== + +See /demos/demo.basic.php for a very basic use of getID3() with no +fancy output, just scanning one file. + +See structure.txt for the returned data structure. + +*> For an example of a complete directory-browsing, <* +*> file-scanning implementation of getID3(), please run <* +*> /demos/demo.browse.php <* + +See /demos/demo.mysql.php for a sample recursive scanning code that +scans every file in a given directory, and all sub-directories, stores +the results in a database and allows various analysis / maintenance +operations + +To analyze remote files over HTTP or FTP you need to copy the file +locally first before running getID3(). Your code would look something +like this: + +// Copy remote file locally to scan with getID3() +$remotefilename = 'http://www.example.com/filename.mp3'; +if ($fp_remote = fopen($remotefilename, 'rb')) { + $localtempfilename = tempnam('/tmp', 'getID3'); + if ($fp_local = fopen($localtempfilename, 'wb')) { + while ($buffer = fread($fp_remote, 8192)) { + fwrite($fp_local, $buffer); + } + fclose($fp_local); + + // Initialize getID3 engine + $getID3 = new getID3; + + $ThisFileInfo = $getID3->analyze($filename); + + // Delete temporary file + unlink($localtempfilename); + } + fclose($fp_remote); +} + + +See /demos/demo.write.php for how to write tags. + + + +What does the returned data structure look like? +=========================================================================== + +See structure.txt + +It is recommended that you look at the output of +/demos/demo.browse.php scanning the file(s) you're interested in to +confirm what data is actually returned for any particular filetype in +general, and your files in particular, as the actual data returned +may vary considerably depending on what information is available in +the file itself. + + + +Notes +=========================================================================== + +getID3() 1.x: +If the format parser encounters a critical problem, it will return +something in $fileinfo['error'], describing the encountered error. If +a less critical error or notice is generated it will appear in +$fileinfo['warning']. Both keys may contain more than one warning or +error. If something is returned in ['error'] then the file was not +correctly parsed and returned data may or may not be correct and/or +complete. If something is returned in ['warning'] (and not ['error']) +then the data that is returned is OK - usually getID3() is reporting +errors in the file that have been worked around due to known bugs in +other programs. Some warnings may indicate that the data that is +returned is OK but that some data could not be extracted due to +errors in the file. + +getID3() 2.x: +See above except errors are thrown (so you will only get one error). + + + +Disclaimer +=========================================================================== + +getID3() has been tested on many systems, on many types of files, +under many operating systems, and is generally believe to be stable +and safe. That being said, there is still the chance there is an +undiscovered and/or unfixed bug that may potentially corrupt your +file, especially within the writing functions. By using getID3() you +agree that it's not my fault if any of your files are corrupted. +In fact, I'm not liable for anything :) + + + +License +=========================================================================== + +GNU General Public License - see license.txt + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to: +Free Software Foundation, Inc. +59 Temple Place - Suite 330 +Boston, MA 02111-1307, USA. + +FAQ: +Q: Can I use getID3() in my program? Do I need a commercial license? +A: You're generally free to use getID3 however you see fit. The only + case in which you would require a commercial license is if you're + selling your closed-source program that integrates getID3. If you + sell your program including a copy of getID3, that's fine as long + as you include a copy of the sourcecode when you sell it. Or you + can distribute your code without getID3 and say "download it from + getid3.sourceforge.net" + + + +Why is it called "getID3()" if it does so much more than just that? +=========================================================================== + +v0.1 did in fact just do that. I don't have a copy of code that old, but I +could essentially write it today with a one-line function: + function getID3($filename) { return unpack('a3TAG/a30title/a30artist/a30album/a4year/a28comment/c1track/c1genreid', substr(file_get_contents($filename), -128)); } + + +Future Plans +=========================================================================== +http://www.getid3.org/phpBB3/viewforum.php?f=7 + +* Better support for MP4 container format +* Scan for appended ID3v2 tag at end of file per ID3v2.4 specs (Section 5.0) +* Support for JPEG-2000 (http://www.morgan-multimedia.com/jpeg2000_overview.htm) +* Support for MOD (mod/stm/s3m/it/xm/mtm/ult/669) +* Support for ACE (thanks Vince) +* Support for Ogg other than Vorbis, Speex and OggFlac (ie. Ogg+Xvid) +* Ability to create Xing/LAME VBR header for VBR MP3s that are missing VBR header +* Ability to "clean" ID3v2 padding (replace invalid padding with valid padding) +* Warn if MP3s change version mid-stream (in full-scan mode) +* check for corrupt/broken mid-file MP3 streams in histogram scan +* Support for lossless-compression formats + (http://www.firstpr.com.au/audiocomp/lossless/#Links) + (http://compression.ca/act-sound.html) + (http://web.inter.nl.net/users/hvdh/lossless/lossless.htm) +* Support for RIFF-INFO chunks + * http://lotto.st-andrews.ac.uk/~njh/tag_interchange.html + (thanks Nick Humfrey ) + * http://abcavi.narod.ru/sof/abcavi/infotags.htm + (thanks Kibi) +* Better support for Bink video +* http://www.hr/josip/DSP/AudioFile2.html +* http://www.pcisys.net/~melanson/codecs/ +* Detect mp3PRO +* Support for PSD +* Support for JPC +* Support for JP2 +* Support for JPX +* Support for JB2 +* Support for IFF +* Support for ICO +* Support for ANI +* Support for EXE (comments, author, etc) (thanks p*quaedackers@planet*nl) +* Support for DVD-IFO (region, subtitles, aspect ratio, etc) + (thanks p*quaedackers@planet*nl) +* More complete support for SWF - parsing encapsulated MP3 and/or JPEG content + (thanks n8n8@yahoo*com) +* Support for a2b +* Optional scan-through-frames for AVI verification + (thanks rockcohen@massive-interactive*nl) +* Support for TTF (thanks info@butterflyx*com) +* Support for DSS (http://www.getid3.org/phpBB3/viewtopic.php?t=171) +* Support for SMAF (http://smaf-yamaha.com/what/demo.html) + http://www.getid3.org/phpBB3/viewtopic.php?t=182 +* Support for AMR (http://www.getid3.org/phpBB3/viewtopic.php?t=195) +* Support for 3gpp (http://www.getid3.org/phpBB3/viewtopic.php?t=195) +* Support for ID4 (http://www.wackysoft.cjb.net grizlyY2K@hotmail*com) +* Parse XML data returned in Ogg comments +* Parse XML data from Quicktime SMIL metafiles (klausrath@mac*com) +* ID3v2 genre string creator function +* More complete parsing of JPG +* Support for all old-style ASF packets +* ASF/WMA/WMV tag writing +* Parse declared T??? ID3v2 text information frames, where appropriate + (thanks Christian Fritz for the idea) +* Recognize encoder: + http://www.guerillasoft.com/EncSpot2/index.html + http://ff123.net/identify.html + http://www.hydrogenaudio.org/?act=ST&f=16&t=9414 + http://www.hydrogenaudio.org/?showtopic=11785 +* Support for other OS/2 bitmap structures: Bitmap Array('BA'), + Color Icon('CI'), Color Pointer('CP'), Icon('IC'), Pointer ('PT') + http://netghost.narod.ru/gff/graphics/summary/os2bmp.htm +* Support for WavPack RAW mode +* ASF/WMA/WMV data packet parsing +* ID3v2FrameFlagsLookupTagAlter() +* ID3v2FrameFlagsLookupFileAlter() +* obey ID3v2 tag alter/preserve/discard rules +* http://www.geocities.com/SiliconValley/Sector/9654/Softdoc/Illyrium/Aolyr.htm +* proper checking for LINK/LNK frame validity in ID3v2 writing +* proper checking for ASPI-TLEN frame validity in ID3v2 writing +* proper checking for COMR frame validity in ID3v2 writing +* http://www.geocities.co.jp/SiliconValley-Oakland/3664/index.html +* decode GEOB ID3v2 structure as encoded by RealJukebox, + decode NCON ID3v2 structure as encoded by MusicMatch + (probably won't happen - the formats are proprietary) + + + +Known Bugs/Issues in getID3() that may be fixed eventually +=========================================================================== +http://www.getid3.org/phpBB3/viewtopic.php?t=25 + +* Cannot determine bitrate for MPEG video with VBR video data + (need documentation) +* Interlace/progressive cannot be determined for MPEG video + (need documentation) +* MIDI playtime is sometimes inaccurate +* AAC-RAW mode files cannot be identified +* WavPack-RAW mode files cannot be identified +* mp4 files report lots of "Unknown QuickTime atom type" + (need documentation) +* Encrypted ASF/WMA/WMV files warn about "unhandled GUID + ASF_Content_Encryption_Object" +* Bitrate split between audio and video cannot be calculated for + NSV, only the total bitrate. (need documentation) +* All Ogg formats (Vorbis, OggFLAC, Speex) are affected by the + problem of large VorbisComments spanning multiple Ogg pages, but + but only OggVorbis files can be processed with vorbiscomment. +* The version of "head" supplied with Mac OS 10.2.8 (maybe other + versions too) does only understands a single option (-n) and + therefore fails. getID3 ignores this and returns wrong md5_data. + + + +Known Bugs/Issues in getID3() that cannot be fixed +-------------------------------------------------- +http://www.getid3.org/phpBB3/viewtopic.php?t=25 + +* 32-bit PHP installations only: + Files larger than 2GB cannot always be parsed fully by getID3() + due to limitations in the 32-bit PHP filesystem functions. + NOTE: Since v1.7.8b3 there is partial support for larger-than- + 2GB files, most of which will parse OK, as long as no critical + data is located beyond the 2GB offset. + Known will-work: + * all file formats on 64-bit PHP + * ZIP (format doesn't support files >2GB) + * FLAC (current encoders don't support files >2GB) + Known will-not-work: + * ID3v1 tags (always located at end-of-file) + * Lyrics3 tags (always located at end-of-file) + * APE tags (always located at end-of-file) + Maybe-will-work: + * Quicktime (will work if needed metadata is before 2GB offset, + that is if the file has been hinted/optimized for streaming) + * RIFF.WAV (should work fine, but gives warnings about not being + able to parse all chunks) + * RIFF.AVI (playtime will probably be wrong, is only based on + "movi" chunk that fits in the first 2GB, should issue error + to show that playtime is incorrect. Other data should be mostly + correct, assuming that data is constant throughout the file) + + + +Known Bugs/Issues in other programs +----------------------------------- +http://www.getid3.org/phpBB3/viewtopic.php?t=25 + +* Windows Media Player (up to v11) and iTunes (up to v10+) do + not correctly handle ID3v2.3 tags with UTF-16BE+BOM + encoding (they assume the data is UTF-16LE+BOM and either + crash (WMP) or output Asian character set (iTunes) +* Winamp (up to v2.80 at least) does not support ID3v2.4 tags, + only ID3v2.3 + see: http://forums.winamp.com/showthread.php?postid=387524 +* Some versions of Helium2 (www.helium2.com) do not write + ID3v2.4-compliant Frame Sizes, even though the tag is marked + as ID3v2.4) (detected by getID3()) +* MP3ext V3.3.17 places a non-compliant padding string at the end + of the ID3v2 header. This is supposedly fixed in v3.4b21 but + only if you manually add a registry key. This fix is not yet + confirmed. (detected by getID3()) +* CDex v1.40 (fixed by v1.50b7) writes non-compliant Ogg comment + strings, supposed to be in the format "NAME=value" but actually + written just "value" (detected by getID3()) +* Oggenc 0.9-rc3 flags the encoded file as ABR whether it's + actually ABR or VBR. +* iTunes (versions "X v2.0.3", "v3.0.1" are known-guilty, probably + other versions are too) writes ID3v2.3 comment tags using a + frame name 'COM ' which is not valid for ID3v2.3+ (it's an + ID3v2.2-style frame name) (detected by getID3()) +* MP2enc does not encode mono CBR MP2 files properly (half speed + sound and double playtime) +* MP2enc does not encode mono VBR MP2 files properly (actually + encoded as stereo) +* tooLAME does not encode mono VBR MP2 files properly (actually + encoded as stereo) +* AACenc encodes files in VBR mode (actually ABR) even if CBR is + specified +* AAC/ADIF - bitrate_mode = cbr for vbr files +* LAME 3.90-3.92 prepends one frame of null data (space for the + LAME/VBR header, but it never gets written) when encoding in CBR + mode with the DLL +* Ahead Nero encodes TwinVQF with a DSIZ value (which is supposed + to be the filesize in bytes) of "0" for TwinVQF v1.0 and "1" for + TwinVQF v2.0 (detected by getID3()) +* Ahead Nero encodes TwinVQF files 1 second shorter than they + should be +* AAC-ADTS files are always actually encoded VBR, even if CBR mode + is specified (the CBR-mode switches on the encoder enable ABR + mode, not CBR as such, but it's not possible to tell the + difference between such ABR files and true VBR) +* STREAMINFO.audio_signature in OggFLAC is always null. "The reason + it's like that is because there is no seeking support in + libOggFLAC yet, so it has no way to go back and write the + computed sum after encoding. Seeking support in Ogg FLAC is the + #1 item for the next release." - Josh Coalson (FLAC developer) + NOTE: getID3() will calculate md5_data in a method similar to + other file formats, but that value cannot be compared to the + md5_data value from FLAC data in a FLAC file format. +* STREAMINFO.audio_signature is not calculated in FLAC v0.3.0 & + v0.4.0 - getID3() will calculate md5_data in a method similar to + other file formats, but that value cannot be compared to the + md5_data value from FLAC v0.5.0+ +* RioPort (various versions including 2.0 and 3.11) tags ID3v2 with + a WCOM frame that has no data portion +* Earlier versions of Coolplayer adds illegal ID3 tags to Ogg Vorbis + files, thus making them corrupt. +* Meracl ID3 Tag Writer v1.3.4 (and older) incorrectly truncates the + last byte of data from an MP3 file when appending a new ID3v1 tag. + (detected by getID3()) +* Lossless-Audio files encoded with and without the -noseek switch + do actually differ internally and therefore cannot match md5_data +* iTunes has been known to append a new ID3v1 tag on the end of an + existing ID3v1 tag when ID3v2 tag is also present + (detected by getID3()) +* MediaMonkey may write a blank RGAD ID3v2 frame but put actual + replay gain adjustments in a series of user-defined TXXX frames + (detected and handled by getID3() since v1.9.2) + + + + +Reference material: +=========================================================================== + +[www.id3.org material now mirrored at http://id3lib.sourceforge.net/id3/] +* http://www.id3.org/id3v2.4.0-structure.txt +* http://www.id3.org/id3v2.4.0-frames.txt +* http://www.id3.org/id3v2.4.0-changes.txt +* http://www.id3.org/id3v2.3.0.txt +* http://www.id3.org/id3v2-00.txt +* http://www.id3.org/mp3frame.html +* http://minnie.tuhs.org/pipermail/mp3encoder/2001-January/001800.html +* http://www.dv.co.yu/mpgscript/mpeghdr.htm +* http://www.mp3-tech.org/programmer/frame_header.html +* http://users.belgacom.net/gc247244/extra/tag.html +* http://gabriel.mp3-tech.org/mp3infotag.html +* http://www.id3.org/iso4217.html +* http://www.unicode.org/Public/MAPPINGS/ISO8859/8859-1.TXT +* http://www.xiph.org/ogg/vorbis/doc/framing.html +* http://www.xiph.org/ogg/vorbis/doc/v-comment.html +* http://leknor.com/code/php/class.ogg.php.txt +* http://www.id3.org/iso639-2.html +* http://www.id3.org/lyrics3.html +* http://www.id3.org/lyrics3200.html +* http://www.psc.edu/general/software/packages/ieee/ieee.html +* http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/ieee-expl.html +* http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/binary.html +* http://www.jmcgowan.com/avi.html +* http://www.wotsit.org/ +* http://www.herdsoft.com/ti/davincie/davp3xo2.htm +* http://www.mathdogs.com/vorbis-illuminated/bitstream-appendix.html +* "Standard MIDI File Format" by Dustin Caldwell (from www.wotsit.org) +* http://midistudio.com/Help/GMSpecs_Patches.htm +* http://www.xiph.org/archives/vorbis/200109/0459.html +* http://www.replaygain.org/ +* http://www.lossless-audio.com/ +* http://download.microsoft.com/download/winmediatech40/Doc/1.0/WIN98MeXP/EN-US/ASF_Specification_v.1.0.exe +* http://mediaxw.sourceforge.net/files/doc/Active%20Streaming%20Format%20(ASF)%201.0%20Specification.pdf +* http://www.uni-jena.de/~pfk/mpp/sv8/ (archived at http://www.hydrogenaudio.org/musepack/klemm/www.personal.uni-jena.de/~pfk/mpp/sv8/) +* http://jfaul.de/atl/ +* http://www.uni-jena.de/~pfk/mpp/ (archived at http://www.hydrogenaudio.org/musepack/klemm/www.personal.uni-jena.de/~pfk/mpp/) +* http://www.libpng.org/pub/png/spec/png-1.2-pdg.html +* http://www.real.com/devzone/library/creating/rmsdk/doc/rmff.htm +* http://www.fastgraph.com/help/bmp_os2_header_format.html +* http://netghost.narod.ru/gff/graphics/summary/os2bmp.htm +* http://flac.sourceforge.net/format.html +* http://www.research.att.com/projects/mpegaudio/mpeg2.html +* http://www.audiocoding.com/wiki/index.php?page=AAC +* http://libmpeg.org/mpeg4/doc/w2203tfs.pdf +* http://www.geocities.com/xhelmboyx/quicktime/formats/qtm-layout.txt +* http://developer.apple.com/techpubs/quicktime/qtdevdocs/RM/frameset.htm +* http://www.nullsoft.com/nsv/ +* http://www.wotsit.org/download.asp?f=iso9660 +* http://sandbox.mc.edu/~bennet/cs110/tc/tctod.html +* http://www.cdroller.com/htm/readdata.html +* http://www.speex.org/manual/node10.html +* http://www.harmony-central.com/Computer/Programming/aiff-file-format.doc +* http://www.faqs.org/rfcs/rfc2361.html +* http://ghido.shelter.ro/ +* http://www.ebu.ch/tech_t3285.pdf +* http://www.sr.se/utveckling/tu/bwf +* http://ftp.aessc.org/pub/aes46-2002.pdf +* http://cartchunk.org:8080/ +* http://www.broadcastpapers.com/radio/cartchunk01.htm +* http://www.hr/josip/DSP/AudioFile2.html +* http://home.attbi.com/~chris.bagwell/AudioFormats-11.html +* http://www.pure-mac.com/extkey.html +* http://cesnet.dl.sourceforge.net/sourceforge/bonkenc/bonk-binary-format-0.9.txt +* http://www.headbands.com/gspot/ +* http://www.openswf.org/spec/SWFfileformat.html +* http://j-faul.virtualave.net/ +* http://www.btinternet.com/~AnthonyJ/Atari/programming/avr_format.html +* http://cui.unige.ch/OSG/info/AudioFormats/ap11.html +* http://sswf.sourceforge.net/SWFalexref.html +* http://www.geocities.com/xhelmboyx/quicktime/formats/qti-layout.txt +* http://www-lehre.informatik.uni-osnabrueck.de/~fbstark/diplom/docs/swf/Flash_Uncovered.htm +* http://developer.apple.com/quicktime/icefloe/dispatch012.html +* http://www.csdn.net/Dev/Format/graphics/PCD.htm +* http://tta.iszf.irk.ru/ +* http://www.atsc.org/standards/a_52a.pdf +* http://www.alanwood.net/unicode/ +* http://www.freelists.org/archives/matroska-devel/07-2003/msg00010.html +* http://www.its.msstate.edu/net/real/reports/config/tags.stats +* http://homepages.slingshot.co.nz/~helmboy/quicktime/formats/qtm-layout.txt +* http://brennan.young.net/Comp/LiveStage/things.html +* http://www.multiweb.cz/twoinches/MP3inside.htm +* http://www.geocities.co.jp/SiliconValley-Oakland/3664/alittle.html#GenreExtended +* http://www.mactech.com/articles/mactech/Vol.06/06.01/SANENormalized/ +* http://www.unicode.org/unicode/faq/utf_bom.html +* http://tta.corecodec.org/?menu=format +* http://www.scvi.net/nsvformat.htm +* http://pda.etsi.org/pda/queryform.asp +* http://cpansearch.perl.org/src/RGIBSON/Audio-DSS-0.02/lib/Audio/DSS.pm +* http://trac.musepack.net/trac/wiki/SV8Specification +* http://wyday.com/cuesharp/specification.php +* http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html diff --git a/src/wp-includes/SimplePie/Author.php b/src/wp-includes/SimplePie/Author.php new file mode 100644 index 0000000..bbf3812 --- /dev/null +++ b/src/wp-includes/SimplePie/Author.php @@ -0,0 +1,157 @@ +name = $name; + $this->link = $link; + $this->email = $email; + } + + /** + * String-ified version + * + * @return string + */ + public function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + /** + * Author's name + * + * @return string|null + */ + public function get_name() + { + if ($this->name !== null) + { + return $this->name; + } + else + { + return null; + } + } + + /** + * Author's link + * + * @return string|null + */ + public function get_link() + { + if ($this->link !== null) + { + return $this->link; + } + else + { + return null; + } + } + + /** + * Author's email address + * + * @return string|null + */ + public function get_email() + { + if ($this->email !== null) + { + return $this->email; + } + else + { + return null; + } + } +} + diff --git a/src/wp-includes/SimplePie/Cache.php b/src/wp-includes/SimplePie/Cache.php new file mode 100644 index 0000000..75586d7 --- /dev/null +++ b/src/wp-includes/SimplePie/Cache.php @@ -0,0 +1,133 @@ + 'SimplePie_Cache_MySQL', + 'memcache' => 'SimplePie_Cache_Memcache', + ); + + /** + * Don't call the constructor. Please. + */ + private function __construct() { } + + /** + * Create a new SimplePie_Cache object + * + * @param string $location URL location (scheme is used to determine handler) + * @param string $filename Unique identifier for cache object + * @param string $extension 'spi' or 'spc' + * @return SimplePie_Cache_Base Type of object depends on scheme of `$location` + */ + public static function get_handler($location, $filename, $extension) + { + $type = explode(':', $location, 2); + $type = $type[0]; + if (!empty(self::$handlers[$type])) + { + $class = self::$handlers[$type]; + return new $class($location, $filename, $extension); + } + + return new SimplePie_Cache_File($location, $filename, $extension); + } + + /** + * Create a new SimplePie_Cache object + * + * @deprecated Use {@see get_handler} instead + */ + public function create($location, $filename, $extension) + { + trigger_error('Cache::create() has been replaced with Cache::get_handler(). Switch to the registry system to use this.', E_USER_DEPRECATED); + return self::get_handler($location, $filename, $extension); + } + + /** + * Register a handler + * + * @param string $type DSN type to register for + * @param string $class Name of handler class. Must implement SimplePie_Cache_Base + */ + public static function register($type, $class) + { + self::$handlers[$type] = $class; + } + + /** + * Parse a URL into an array + * + * @param string $url + * @return array + */ + public static function parse_URL($url) + { + $params = parse_url($url); + $params['extras'] = array(); + if (isset($params['query'])) + { + parse_str($params['query'], $params['extras']); + } + return $params; + } +} diff --git a/src/wp-includes/SimplePie/Cache/Base.php b/src/wp-includes/SimplePie/Cache/Base.php new file mode 100644 index 0000000..937e346 --- /dev/null +++ b/src/wp-includes/SimplePie/Cache/Base.php @@ -0,0 +1,114 @@ +get_items(); + $items_by_id = array(); + + if (!empty($items)) + { + foreach ($items as $item) + { + $items_by_id[$item->get_id()] = $item; + } + + if (count($items_by_id) !== count($items)) + { + $items_by_id = array(); + foreach ($items as $item) + { + $items_by_id[$item->get_id(true)] = $item; + } + } + + if (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0])) + { + $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]; + } + elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0])) + { + $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]; + } + elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0])) + { + $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]; + } + elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0])) + { + $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0]; + } + else + { + $channel = null; + } + + if ($channel !== null) + { + if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry'])) + { + unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']); + } + if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry'])) + { + unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']); + } + if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item'])) + { + unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']); + } + if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item'])) + { + unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']); + } + if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item'])) + { + unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']); + } + } + if (isset($data->data['items'])) + { + unset($data->data['items']); + } + if (isset($data->data['ordered_items'])) + { + unset($data->data['ordered_items']); + } + } + return array(serialize($data->data), $items_by_id); + } +} diff --git a/src/wp-includes/SimplePie/Cache/File.php b/src/wp-includes/SimplePie/Cache/File.php new file mode 100644 index 0000000..5797b3a --- /dev/null +++ b/src/wp-includes/SimplePie/Cache/File.php @@ -0,0 +1,173 @@ +location = $location; + $this->filename = $name; + $this->extension = $type; + $this->name = "$this->location/$this->filename.$this->extension"; + } + + /** + * Save data to the cache + * + * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property + * @return bool Successfulness + */ + public function save($data) + { + if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location)) + { + if ($data instanceof SimplePie) + { + $data = $data->data; + } + + $data = serialize($data); + return (bool) file_put_contents($this->name, $data); + } + return false; + } + + /** + * Retrieve the data saved to the cache + * + * @return array Data for SimplePie::$data + */ + public function load() + { + if (file_exists($this->name) && is_readable($this->name)) + { + return unserialize(file_get_contents($this->name)); + } + return false; + } + + /** + * Retrieve the last modified time for the cache + * + * @return int Timestamp + */ + public function mtime() + { + if (file_exists($this->name)) + { + return filemtime($this->name); + } + return false; + } + + /** + * Set the last modified time to the current time + * + * @return bool Success status + */ + public function touch() + { + if (file_exists($this->name)) + { + return touch($this->name); + } + return false; + } + + /** + * Remove the cache + * + * @return bool Success status + */ + public function unlink() + { + if (file_exists($this->name)) + { + return unlink($this->name); + } + return false; + } +} diff --git a/src/wp-includes/SimplePie/Cache/Memcache.php b/src/wp-includes/SimplePie/Cache/Memcache.php new file mode 100644 index 0000000..fd44780 --- /dev/null +++ b/src/wp-includes/SimplePie/Cache/Memcache.php @@ -0,0 +1,183 @@ +options = array( + 'host' => '127.0.0.1', + 'port' => 11211, + 'extras' => array( + 'timeout' => 3600, // one hour + 'prefix' => 'simplepie_', + ), + ); + $parsed = SimplePie_Cache::parse_URL($location); + $this->options['host'] = empty($parsed['host']) ? $this->options['host'] : $parsed['host']; + $this->options['port'] = empty($parsed['port']) ? $this->options['port'] : $parsed['port']; + $this->options['extras'] = array_merge($this->options['extras'], $parsed['extras']); + $this->name = $this->options['extras']['prefix'] . md5("$name:$type"); + + $this->cache = new Memcache(); + $this->cache->addServer($this->options['host'], (int) $this->options['port']); + } + + /** + * Save data to the cache + * + * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property + * @return bool Successfulness + */ + public function save($data) + { + if ($data instanceof SimplePie) + { + $data = $data->data; + } + return $this->cache->set($this->name, serialize($data), MEMCACHE_COMPRESSED, (int) $this->options['extras']['timeout']); + } + + /** + * Retrieve the data saved to the cache + * + * @return array Data for SimplePie::$data + */ + public function load() + { + $data = $this->cache->get($this->name); + + if ($data !== false) + { + return unserialize($data); + } + return false; + } + + /** + * Retrieve the last modified time for the cache + * + * @return int Timestamp + */ + public function mtime() + { + $data = $this->cache->get($this->name); + + if ($data !== false) + { + // essentially ignore the mtime because Memcache expires on it's own + return time(); + } + + return false; + } + + /** + * Set the last modified time to the current time + * + * @return bool Success status + */ + public function touch() + { + $data = $this->cache->get($this->name); + + if ($data !== false) + { + return $this->cache->set($this->name, $data, MEMCACHE_COMPRESSED, (int) $this->duration); + } + + return false; + } + + /** + * Remove the cache + * + * @return bool Success status + */ + public function unlink() + { + return $this->cache->delete($this->name, 0); + } +} diff --git a/src/wp-includes/SimplePie/Cache/MySQL.php b/src/wp-includes/SimplePie/Cache/MySQL.php new file mode 100644 index 0000000..d53ebc1 --- /dev/null +++ b/src/wp-includes/SimplePie/Cache/MySQL.php @@ -0,0 +1,438 @@ +options = array( + 'user' => null, + 'pass' => null, + 'host' => '127.0.0.1', + 'port' => '3306', + 'path' => '', + 'extras' => array( + 'prefix' => '', + ), + ); + $this->options = array_merge_recursive($this->options, SimplePie_Cache::parse_URL($location)); + + // Path is prefixed with a "/" + $this->options['dbname'] = substr($this->options['path'], 1); + + try + { + $this->mysql = new PDO("mysql:dbname={$this->options['dbname']};host={$this->options['host']};port={$this->options['port']}", $this->options['user'], $this->options['pass'], array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); + } + catch (PDOException $e) + { + $this->mysql = null; + return; + } + + $this->id = $name . $type; + + if (!$query = $this->mysql->query('SHOW TABLES')) + { + $this->mysql = null; + return; + } + + $db = array(); + while ($row = $query->fetchColumn()) + { + $db[] = $row; + } + + if (!in_array($this->options['extras']['prefix'] . 'cache_data', $db)) + { + $query = $this->mysql->exec('CREATE TABLE `' . $this->options['extras']['prefix'] . 'cache_data` (`id` TEXT CHARACTER SET utf8 NOT NULL, `items` SMALLINT NOT NULL DEFAULT 0, `data` BLOB NOT NULL, `mtime` INT UNSIGNED NOT NULL, UNIQUE (`id`(125)))'); + if ($query === false) + { + $this->mysql = null; + } + } + + if (!in_array($this->options['extras']['prefix'] . 'items', $db)) + { + $query = $this->mysql->exec('CREATE TABLE `' . $this->options['extras']['prefix'] . 'items` (`feed_id` TEXT CHARACTER SET utf8 NOT NULL, `id` TEXT CHARACTER SET utf8 NOT NULL, `data` TEXT CHARACTER SET utf8 NOT NULL, `posted` INT UNSIGNED NOT NULL, INDEX `feed_id` (`feed_id`(125)))'); + if ($query === false) + { + $this->mysql = null; + } + } + } + + /** + * Save data to the cache + * + * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property + * @return bool Successfulness + */ + public function save($data) + { + if ($this->mysql === null) + { + return false; + } + + if ($data instanceof SimplePie) + { + $data = clone $data; + + $prepared = self::prepare_simplepie_object_for_cache($data); + + $query = $this->mysql->prepare('SELECT COUNT(*) FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :feed'); + $query->bindValue(':feed', $this->id); + if ($query->execute()) + { + if ($query->fetchColumn() > 0) + { + $items = count($prepared[1]); + if ($items) + { + $sql = 'UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `items` = :items, `data` = :data, `mtime` = :time WHERE `id` = :feed'; + $query = $this->mysql->prepare($sql); + $query->bindValue(':items', $items); + } + else + { + $sql = 'UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `data` = :data, `mtime` = :time WHERE `id` = :feed'; + $query = $this->mysql->prepare($sql); + } + + $query->bindValue(':data', $prepared[0]); + $query->bindValue(':time', time()); + $query->bindValue(':feed', $this->id); + if (!$query->execute()) + { + return false; + } + } + else + { + $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(:feed, :count, :data, :time)'); + $query->bindValue(':feed', $this->id); + $query->bindValue(':count', count($prepared[1])); + $query->bindValue(':data', $prepared[0]); + $query->bindValue(':time', time()); + if (!$query->execute()) + { + return false; + } + } + + $ids = array_keys($prepared[1]); + if (!empty($ids)) + { + foreach ($ids as $id) + { + $database_ids[] = $this->mysql->quote($id); + } + + $query = $this->mysql->prepare('SELECT `id` FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `id` = ' . implode(' OR `id` = ', $database_ids) . ' AND `feed_id` = :feed'); + $query->bindValue(':feed', $this->id); + + if ($query->execute()) + { + $existing_ids = array(); + while ($row = $query->fetchColumn()) + { + $existing_ids[] = $row; + } + + $new_ids = array_diff($ids, $existing_ids); + + foreach ($new_ids as $new_id) + { + if (!($date = $prepared[1][$new_id]->get_date('U'))) + { + $date = time(); + } + + $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'items` (`feed_id`, `id`, `data`, `posted`) VALUES(:feed, :id, :data, :date)'); + $query->bindValue(':feed', $this->id); + $query->bindValue(':id', $new_id); + $query->bindValue(':data', serialize($prepared[1][$new_id]->data)); + $query->bindValue(':date', $date); + if (!$query->execute()) + { + return false; + } + } + return true; + } + } + else + { + return true; + } + } + } + else + { + $query = $this->mysql->prepare('SELECT `id` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :feed'); + $query->bindValue(':feed', $this->id); + if ($query->execute()) + { + if ($query->rowCount() > 0) + { + $query = $this->mysql->prepare('UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `items` = 0, `data` = :data, `mtime` = :time WHERE `id` = :feed'); + $query->bindValue(':data', serialize($data)); + $query->bindValue(':time', time()); + $query->bindValue(':feed', $this->id); + if ($this->execute()) + { + return true; + } + } + else + { + $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(:id, 0, :data, :time)'); + $query->bindValue(':id', $this->id); + $query->bindValue(':data', serialize($data)); + $query->bindValue(':time', time()); + if ($query->execute()) + { + return true; + } + } + } + } + return false; + } + + /** + * Retrieve the data saved to the cache + * + * @return array Data for SimplePie::$data + */ + public function load() + { + if ($this->mysql === null) + { + return false; + } + + $query = $this->mysql->prepare('SELECT `items`, `data` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id'); + $query->bindValue(':id', $this->id); + if ($query->execute() && ($row = $query->fetch())) + { + $data = unserialize($row[1]); + + if (isset($this->options['items'][0])) + { + $items = (int) $this->options['items'][0]; + } + else + { + $items = (int) $row[0]; + } + + if ($items !== 0) + { + if (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0])) + { + $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]; + } + elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0])) + { + $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]; + } + elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0])) + { + $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]; + } + elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0])) + { + $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]; + } + else + { + $feed = null; + } + + if ($feed !== null) + { + $sql = 'SELECT `data` FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `feed_id` = :feed ORDER BY `posted` DESC'; + if ($items > 0) + { + $sql .= ' LIMIT ' . $items; + } + + $query = $this->mysql->prepare($sql); + $query->bindValue(':feed', $this->id); + if ($query->execute()) + { + while ($row = $query->fetchColumn()) + { + $feed['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry'][] = unserialize($row); + } + } + else + { + return false; + } + } + } + return $data; + } + return false; + } + + /** + * Retrieve the last modified time for the cache + * + * @return int Timestamp + */ + public function mtime() + { + if ($this->mysql === null) + { + return false; + } + + $query = $this->mysql->prepare('SELECT `mtime` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id'); + $query->bindValue(':id', $this->id); + if ($query->execute() && ($time = $query->fetchColumn())) + { + return $time; + } + else + { + return false; + } + } + + /** + * Set the last modified time to the current time + * + * @return bool Success status + */ + public function touch() + { + if ($this->mysql === null) + { + return false; + } + + $query = $this->mysql->prepare('UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `mtime` = :time WHERE `id` = :id'); + $query->bindValue(':time', time()); + $query->bindValue(':id', $this->id); + if ($query->execute() && $query->rowCount() > 0) + { + return true; + } + else + { + return false; + } + } + + /** + * Remove the cache + * + * @return bool Success status + */ + public function unlink() + { + if ($this->mysql === null) + { + return false; + } + + $query = $this->mysql->prepare('DELETE FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id'); + $query->bindValue(':id', $this->id); + $query2 = $this->mysql->prepare('DELETE FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `feed_id` = :id'); + $query2->bindValue(':id', $this->id); + if ($query->execute() && $query2->execute()) + { + return true; + } + else + { + return false; + } + } +} diff --git a/src/wp-includes/SimplePie/Caption.php b/src/wp-includes/SimplePie/Caption.php new file mode 100644 index 0000000..52922c5 --- /dev/null +++ b/src/wp-includes/SimplePie/Caption.php @@ -0,0 +1,210 @@ +` captions as defined in Media RSS. + * + * Used by {@see SimplePie_Enclosure::get_caption()} and {@see SimplePie_Enclosure::get_captions()} + * + * This class can be overloaded with {@see SimplePie::set_caption_class()} + * + * @package SimplePie + * @subpackage API + */ +class SimplePie_Caption +{ + /** + * Content type + * + * @var string + * @see get_type() + */ + var $type; + + /** + * Language + * + * @var string + * @see get_language() + */ + var $lang; + + /** + * Start time + * + * @var string + * @see get_starttime() + */ + var $startTime; + + /** + * End time + * + * @var string + * @see get_endtime() + */ + var $endTime; + + /** + * Caption text + * + * @var string + * @see get_text() + */ + var $text; + + /** + * Constructor, used to input the data + * + * For documentation on all the parameters, see the corresponding + * properties and their accessors + */ + public function __construct($type = null, $lang = null, $startTime = null, $endTime = null, $text = null) + { + $this->type = $type; + $this->lang = $lang; + $this->startTime = $startTime; + $this->endTime = $endTime; + $this->text = $text; + } + + /** + * String-ified version + * + * @return string + */ + public function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + /** + * Get the end time + * + * @return string|null Time in the format 'hh:mm:ss.SSS' + */ + public function get_endtime() + { + if ($this->endTime !== null) + { + return $this->endTime; + } + else + { + return null; + } + } + + /** + * Get the language + * + * @link http://tools.ietf.org/html/rfc3066 + * @return string|null Language code as per RFC 3066 + */ + public function get_language() + { + if ($this->lang !== null) + { + return $this->lang; + } + else + { + return null; + } + } + + /** + * Get the start time + * + * @return string|null Time in the format 'hh:mm:ss.SSS' + */ + public function get_starttime() + { + if ($this->startTime !== null) + { + return $this->startTime; + } + else + { + return null; + } + } + + /** + * Get the text of the caption + * + * @return string|null + */ + public function get_text() + { + if ($this->text !== null) + { + return $this->text; + } + else + { + return null; + } + } + + /** + * Get the content type (not MIME type) + * + * @return string|null Either 'text' or 'html' + */ + public function get_type() + { + if ($this->type !== null) + { + return $this->type; + } + else + { + return null; + } + } +} + diff --git a/src/wp-includes/SimplePie/Category.php b/src/wp-includes/SimplePie/Category.php new file mode 100644 index 0000000..ad0407b --- /dev/null +++ b/src/wp-includes/SimplePie/Category.php @@ -0,0 +1,157 @@ +term = $term; + $this->scheme = $scheme; + $this->label = $label; + } + + /** + * String-ified version + * + * @return string + */ + public function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + /** + * Get the category identifier + * + * @return string|null + */ + public function get_term() + { + if ($this->term !== null) + { + return $this->term; + } + else + { + return null; + } + } + + /** + * Get the categorization scheme identifier + * + * @return string|null + */ + public function get_scheme() + { + if ($this->scheme !== null) + { + return $this->scheme; + } + else + { + return null; + } + } + + /** + * Get the human readable label + * + * @return string|null + */ + public function get_label() + { + if ($this->label !== null) + { + return $this->label; + } + else + { + return $this->get_term(); + } + } +} + diff --git a/src/wp-includes/SimplePie/Content/Type/Sniffer.php b/src/wp-includes/SimplePie/Content/Type/Sniffer.php new file mode 100644 index 0000000..20d053d --- /dev/null +++ b/src/wp-includes/SimplePie/Content/Type/Sniffer.php @@ -0,0 +1,332 @@ +file = $file; + } + + /** + * Get the Content-Type of the specified file + * + * @return string Actual Content-Type + */ + public function get_type() + { + if (isset($this->file->headers['content-type'])) + { + if (!isset($this->file->headers['content-encoding']) + && ($this->file->headers['content-type'] === 'text/plain' + || $this->file->headers['content-type'] === 'text/plain; charset=ISO-8859-1' + || $this->file->headers['content-type'] === 'text/plain; charset=iso-8859-1' + || $this->file->headers['content-type'] === 'text/plain; charset=UTF-8')) + { + return $this->text_or_binary(); + } + + if (($pos = strpos($this->file->headers['content-type'], ';')) !== false) + { + $official = substr($this->file->headers['content-type'], 0, $pos); + } + else + { + $official = $this->file->headers['content-type']; + } + $official = trim(strtolower($official)); + + if ($official === 'unknown/unknown' + || $official === 'application/unknown') + { + return $this->unknown(); + } + elseif (substr($official, -4) === '+xml' + || $official === 'text/xml' + || $official === 'application/xml') + { + return $official; + } + elseif (substr($official, 0, 6) === 'image/') + { + if ($return = $this->image()) + { + return $return; + } + else + { + return $official; + } + } + elseif ($official === 'text/html') + { + return $this->feed_or_html(); + } + else + { + return $official; + } + } + else + { + return $this->unknown(); + } + } + + /** + * Sniff text or binary + * + * @return string Actual Content-Type + */ + public function text_or_binary() + { + if (substr($this->file->body, 0, 2) === "\xFE\xFF" + || substr($this->file->body, 0, 2) === "\xFF\xFE" + || substr($this->file->body, 0, 4) === "\x00\x00\xFE\xFF" + || substr($this->file->body, 0, 3) === "\xEF\xBB\xBF") + { + return 'text/plain'; + } + elseif (preg_match('/[\x00-\x08\x0E-\x1A\x1C-\x1F]/', $this->file->body)) + { + return 'application/octect-stream'; + } + else + { + return 'text/plain'; + } + } + + /** + * Sniff unknown + * + * @return string Actual Content-Type + */ + public function unknown() + { + $ws = strspn($this->file->body, "\x09\x0A\x0B\x0C\x0D\x20"); + if (strtolower(substr($this->file->body, $ws, 14)) === 'file->body, $ws, 5)) === 'file->body, $ws, 7)) === 'file->body, 0, 5) === '%PDF-') + { + return 'application/pdf'; + } + elseif (substr($this->file->body, 0, 11) === '%!PS-Adobe-') + { + return 'application/postscript'; + } + elseif (substr($this->file->body, 0, 6) === 'GIF87a' + || substr($this->file->body, 0, 6) === 'GIF89a') + { + return 'image/gif'; + } + elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") + { + return 'image/png'; + } + elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") + { + return 'image/jpeg'; + } + elseif (substr($this->file->body, 0, 2) === "\x42\x4D") + { + return 'image/bmp'; + } + elseif (substr($this->file->body, 0, 4) === "\x00\x00\x01\x00") + { + return 'image/vnd.microsoft.icon'; + } + else + { + return $this->text_or_binary(); + } + } + + /** + * Sniff images + * + * @return string Actual Content-Type + */ + public function image() + { + if (substr($this->file->body, 0, 6) === 'GIF87a' + || substr($this->file->body, 0, 6) === 'GIF89a') + { + return 'image/gif'; + } + elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") + { + return 'image/png'; + } + elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") + { + return 'image/jpeg'; + } + elseif (substr($this->file->body, 0, 2) === "\x42\x4D") + { + return 'image/bmp'; + } + elseif (substr($this->file->body, 0, 4) === "\x00\x00\x01\x00") + { + return 'image/vnd.microsoft.icon'; + } + else + { + return false; + } + } + + /** + * Sniff HTML + * + * @return string Actual Content-Type + */ + public function feed_or_html() + { + $len = strlen($this->file->body); + $pos = strspn($this->file->body, "\x09\x0A\x0D\x20"); + + while ($pos < $len) + { + switch ($this->file->body[$pos]) + { + case "\x09": + case "\x0A": + case "\x0D": + case "\x20": + $pos += strspn($this->file->body, "\x09\x0A\x0D\x20", $pos); + continue 2; + + case '<': + $pos++; + break; + + default: + return 'text/html'; + } + + if (substr($this->file->body, $pos, 3) === '!--') + { + $pos += 3; + if ($pos < $len && ($pos = strpos($this->file->body, '-->', $pos)) !== false) + { + $pos += 3; + } + else + { + return 'text/html'; + } + } + elseif (substr($this->file->body, $pos, 1) === '!') + { + if ($pos < $len && ($pos = strpos($this->file->body, '>', $pos)) !== false) + { + $pos++; + } + else + { + return 'text/html'; + } + } + elseif (substr($this->file->body, $pos, 1) === '?') + { + if ($pos < $len && ($pos = strpos($this->file->body, '?>', $pos)) !== false) + { + $pos += 2; + } + else + { + return 'text/html'; + } + } + elseif (substr($this->file->body, $pos, 3) === 'rss' + || substr($this->file->body, $pos, 7) === 'rdf:RDF') + { + return 'application/rss+xml'; + } + elseif (substr($this->file->body, $pos, 4) === 'feed') + { + return 'application/atom+xml'; + } + else + { + return 'text/html'; + } + } + + return 'text/html'; + } +} + diff --git a/src/wp-includes/SimplePie/Copyright.php b/src/wp-includes/SimplePie/Copyright.php new file mode 100644 index 0000000..57c535a --- /dev/null +++ b/src/wp-includes/SimplePie/Copyright.php @@ -0,0 +1,130 @@ +` copyright tags as defined in Media RSS + * + * Used by {@see SimplePie_Enclosure::get_copyright()} + * + * This class can be overloaded with {@see SimplePie::set_copyright_class()} + * + * @package SimplePie + * @subpackage API + */ +class SimplePie_Copyright +{ + /** + * Copyright URL + * + * @var string + * @see get_url() + */ + var $url; + + /** + * Attribution + * + * @var string + * @see get_attribution() + */ + var $label; + + /** + * Constructor, used to input the data + * + * For documentation on all the parameters, see the corresponding + * properties and their accessors + */ + public function __construct($url = null, $label = null) + { + $this->url = $url; + $this->label = $label; + } + + /** + * String-ified version + * + * @return string + */ + public function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + /** + * Get the copyright URL + * + * @return string|null URL to copyright information + */ + public function get_url() + { + if ($this->url !== null) + { + return $this->url; + } + else + { + return null; + } + } + + /** + * Get the attribution text + * + * @return string|null + */ + public function get_attribution() + { + if ($this->label !== null) + { + return $this->label; + } + else + { + return null; + } + } +} + diff --git a/src/wp-includes/SimplePie/Core.php b/src/wp-includes/SimplePie/Core.php new file mode 100644 index 0000000..46d9966 --- /dev/null +++ b/src/wp-includes/SimplePie/Core.php @@ -0,0 +1,57 @@ +` as defined in Media RSS + * + * Used by {@see SimplePie_Enclosure::get_credit()} and {@see SimplePie_Enclosure::get_credits()} + * + * This class can be overloaded with {@see SimplePie::set_credit_class()} + * + * @package SimplePie + * @subpackage API + */ +class SimplePie_Credit +{ + /** + * Credited role + * + * @var string + * @see get_role() + */ + var $role; + + /** + * Organizational scheme + * + * @var string + * @see get_scheme() + */ + var $scheme; + + /** + * Credited name + * + * @var string + * @see get_name() + */ + var $name; + + /** + * Constructor, used to input the data + * + * For documentation on all the parameters, see the corresponding + * properties and their accessors + */ + public function __construct($role = null, $scheme = null, $name = null) + { + $this->role = $role; + $this->scheme = $scheme; + $this->name = $name; + } + + /** + * String-ified version + * + * @return string + */ + public function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + /** + * Get the role of the person receiving credit + * + * @return string|null + */ + public function get_role() + { + if ($this->role !== null) + { + return $this->role; + } + else + { + return null; + } + } + + /** + * Get the organizational scheme + * + * @return string|null + */ + public function get_scheme() + { + if ($this->scheme !== null) + { + return $this->scheme; + } + else + { + return null; + } + } + + /** + * Get the credited person/entity's name + * + * @return string|null + */ + public function get_name() + { + if ($this->name !== null) + { + return $this->name; + } + else + { + return null; + } + } +} + diff --git a/src/wp-includes/SimplePie/Decode/HTML/Entities.php b/src/wp-includes/SimplePie/Decode/HTML/Entities.php new file mode 100644 index 0000000..069e8d8 --- /dev/null +++ b/src/wp-includes/SimplePie/Decode/HTML/Entities.php @@ -0,0 +1,617 @@ +data = $data; + } + + /** + * Parse the input data + * + * @access public + * @return string Output data + */ + public function parse() + { + while (($this->position = strpos($this->data, '&', $this->position)) !== false) + { + $this->consume(); + $this->entity(); + $this->consumed = ''; + } + return $this->data; + } + + /** + * Consume the next byte + * + * @access private + * @return mixed The next byte, or false, if there is no more data + */ + public function consume() + { + if (isset($this->data[$this->position])) + { + $this->consumed .= $this->data[$this->position]; + return $this->data[$this->position++]; + } + else + { + return false; + } + } + + /** + * Consume a range of characters + * + * @access private + * @param string $chars Characters to consume + * @return mixed A series of characters that match the range, or false + */ + public function consume_range($chars) + { + if ($len = strspn($this->data, $chars, $this->position)) + { + $data = substr($this->data, $this->position, $len); + $this->consumed .= $data; + $this->position += $len; + return $data; + } + else + { + return false; + } + } + + /** + * Unconsume one byte + * + * @access private + */ + public function unconsume() + { + $this->consumed = substr($this->consumed, 0, -1); + $this->position--; + } + + /** + * Decode an entity + * + * @access private + */ + public function entity() + { + switch ($this->consume()) + { + case "\x09": + case "\x0A": + case "\x0B": + case "\x0B": + case "\x0C": + case "\x20": + case "\x3C": + case "\x26": + case false: + break; + + case "\x23": + switch ($this->consume()) + { + case "\x78": + case "\x58": + $range = '0123456789ABCDEFabcdef'; + $hex = true; + break; + + default: + $range = '0123456789'; + $hex = false; + $this->unconsume(); + break; + } + + if ($codepoint = $this->consume_range($range)) + { + static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8"); + + if ($hex) + { + $codepoint = hexdec($codepoint); + } + else + { + $codepoint = intval($codepoint); + } + + if (isset($windows_1252_specials[$codepoint])) + { + $replacement = $windows_1252_specials[$codepoint]; + } + else + { + $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint); + } + + if (!in_array($this->consume(), array(';', false), true)) + { + $this->unconsume(); + } + + $consumed_length = strlen($this->consumed); + $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length); + $this->position += strlen($replacement) - $consumed_length; + } + break; + + default: + static $entities = array( + 'Aacute' => "\xC3\x81", + 'aacute' => "\xC3\xA1", + 'Aacute;' => "\xC3\x81", + 'aacute;' => "\xC3\xA1", + 'Acirc' => "\xC3\x82", + 'acirc' => "\xC3\xA2", + 'Acirc;' => "\xC3\x82", + 'acirc;' => "\xC3\xA2", + 'acute' => "\xC2\xB4", + 'acute;' => "\xC2\xB4", + 'AElig' => "\xC3\x86", + 'aelig' => "\xC3\xA6", + 'AElig;' => "\xC3\x86", + 'aelig;' => "\xC3\xA6", + 'Agrave' => "\xC3\x80", + 'agrave' => "\xC3\xA0", + 'Agrave;' => "\xC3\x80", + 'agrave;' => "\xC3\xA0", + 'alefsym;' => "\xE2\x84\xB5", + 'Alpha;' => "\xCE\x91", + 'alpha;' => "\xCE\xB1", + 'AMP' => "\x26", + 'amp' => "\x26", + 'AMP;' => "\x26", + 'amp;' => "\x26", + 'and;' => "\xE2\x88\xA7", + 'ang;' => "\xE2\x88\xA0", + 'apos;' => "\x27", + 'Aring' => "\xC3\x85", + 'aring' => "\xC3\xA5", + 'Aring;' => "\xC3\x85", + 'aring;' => "\xC3\xA5", + 'asymp;' => "\xE2\x89\x88", + 'Atilde' => "\xC3\x83", + 'atilde' => "\xC3\xA3", + 'Atilde;' => "\xC3\x83", + 'atilde;' => "\xC3\xA3", + 'Auml' => "\xC3\x84", + 'auml' => "\xC3\xA4", + 'Auml;' => "\xC3\x84", + 'auml;' => "\xC3\xA4", + 'bdquo;' => "\xE2\x80\x9E", + 'Beta;' => "\xCE\x92", + 'beta;' => "\xCE\xB2", + 'brvbar' => "\xC2\xA6", + 'brvbar;' => "\xC2\xA6", + 'bull;' => "\xE2\x80\xA2", + 'cap;' => "\xE2\x88\xA9", + 'Ccedil' => "\xC3\x87", + 'ccedil' => "\xC3\xA7", + 'Ccedil;' => "\xC3\x87", + 'ccedil;' => "\xC3\xA7", + 'cedil' => "\xC2\xB8", + 'cedil;' => "\xC2\xB8", + 'cent' => "\xC2\xA2", + 'cent;' => "\xC2\xA2", + 'Chi;' => "\xCE\xA7", + 'chi;' => "\xCF\x87", + 'circ;' => "\xCB\x86", + 'clubs;' => "\xE2\x99\xA3", + 'cong;' => "\xE2\x89\x85", + 'COPY' => "\xC2\xA9", + 'copy' => "\xC2\xA9", + 'COPY;' => "\xC2\xA9", + 'copy;' => "\xC2\xA9", + 'crarr;' => "\xE2\x86\xB5", + 'cup;' => "\xE2\x88\xAA", + 'curren' => "\xC2\xA4", + 'curren;' => "\xC2\xA4", + 'Dagger;' => "\xE2\x80\xA1", + 'dagger;' => "\xE2\x80\xA0", + 'dArr;' => "\xE2\x87\x93", + 'darr;' => "\xE2\x86\x93", + 'deg' => "\xC2\xB0", + 'deg;' => "\xC2\xB0", + 'Delta;' => "\xCE\x94", + 'delta;' => "\xCE\xB4", + 'diams;' => "\xE2\x99\xA6", + 'divide' => "\xC3\xB7", + 'divide;' => "\xC3\xB7", + 'Eacute' => "\xC3\x89", + 'eacute' => "\xC3\xA9", + 'Eacute;' => "\xC3\x89", + 'eacute;' => "\xC3\xA9", + 'Ecirc' => "\xC3\x8A", + 'ecirc' => "\xC3\xAA", + 'Ecirc;' => "\xC3\x8A", + 'ecirc;' => "\xC3\xAA", + 'Egrave' => "\xC3\x88", + 'egrave' => "\xC3\xA8", + 'Egrave;' => "\xC3\x88", + 'egrave;' => "\xC3\xA8", + 'empty;' => "\xE2\x88\x85", + 'emsp;' => "\xE2\x80\x83", + 'ensp;' => "\xE2\x80\x82", + 'Epsilon;' => "\xCE\x95", + 'epsilon;' => "\xCE\xB5", + 'equiv;' => "\xE2\x89\xA1", + 'Eta;' => "\xCE\x97", + 'eta;' => "\xCE\xB7", + 'ETH' => "\xC3\x90", + 'eth' => "\xC3\xB0", + 'ETH;' => "\xC3\x90", + 'eth;' => "\xC3\xB0", + 'Euml' => "\xC3\x8B", + 'euml' => "\xC3\xAB", + 'Euml;' => "\xC3\x8B", + 'euml;' => "\xC3\xAB", + 'euro;' => "\xE2\x82\xAC", + 'exist;' => "\xE2\x88\x83", + 'fnof;' => "\xC6\x92", + 'forall;' => "\xE2\x88\x80", + 'frac12' => "\xC2\xBD", + 'frac12;' => "\xC2\xBD", + 'frac14' => "\xC2\xBC", + 'frac14;' => "\xC2\xBC", + 'frac34' => "\xC2\xBE", + 'frac34;' => "\xC2\xBE", + 'frasl;' => "\xE2\x81\x84", + 'Gamma;' => "\xCE\x93", + 'gamma;' => "\xCE\xB3", + 'ge;' => "\xE2\x89\xA5", + 'GT' => "\x3E", + 'gt' => "\x3E", + 'GT;' => "\x3E", + 'gt;' => "\x3E", + 'hArr;' => "\xE2\x87\x94", + 'harr;' => "\xE2\x86\x94", + 'hearts;' => "\xE2\x99\xA5", + 'hellip;' => "\xE2\x80\xA6", + 'Iacute' => "\xC3\x8D", + 'iacute' => "\xC3\xAD", + 'Iacute;' => "\xC3\x8D", + 'iacute;' => "\xC3\xAD", + 'Icirc' => "\xC3\x8E", + 'icirc' => "\xC3\xAE", + 'Icirc;' => "\xC3\x8E", + 'icirc;' => "\xC3\xAE", + 'iexcl' => "\xC2\xA1", + 'iexcl;' => "\xC2\xA1", + 'Igrave' => "\xC3\x8C", + 'igrave' => "\xC3\xAC", + 'Igrave;' => "\xC3\x8C", + 'igrave;' => "\xC3\xAC", + 'image;' => "\xE2\x84\x91", + 'infin;' => "\xE2\x88\x9E", + 'int;' => "\xE2\x88\xAB", + 'Iota;' => "\xCE\x99", + 'iota;' => "\xCE\xB9", + 'iquest' => "\xC2\xBF", + 'iquest;' => "\xC2\xBF", + 'isin;' => "\xE2\x88\x88", + 'Iuml' => "\xC3\x8F", + 'iuml' => "\xC3\xAF", + 'Iuml;' => "\xC3\x8F", + 'iuml;' => "\xC3\xAF", + 'Kappa;' => "\xCE\x9A", + 'kappa;' => "\xCE\xBA", + 'Lambda;' => "\xCE\x9B", + 'lambda;' => "\xCE\xBB", + 'lang;' => "\xE3\x80\x88", + 'laquo' => "\xC2\xAB", + 'laquo;' => "\xC2\xAB", + 'lArr;' => "\xE2\x87\x90", + 'larr;' => "\xE2\x86\x90", + 'lceil;' => "\xE2\x8C\x88", + 'ldquo;' => "\xE2\x80\x9C", + 'le;' => "\xE2\x89\xA4", + 'lfloor;' => "\xE2\x8C\x8A", + 'lowast;' => "\xE2\x88\x97", + 'loz;' => "\xE2\x97\x8A", + 'lrm;' => "\xE2\x80\x8E", + 'lsaquo;' => "\xE2\x80\xB9", + 'lsquo;' => "\xE2\x80\x98", + 'LT' => "\x3C", + 'lt' => "\x3C", + 'LT;' => "\x3C", + 'lt;' => "\x3C", + 'macr' => "\xC2\xAF", + 'macr;' => "\xC2\xAF", + 'mdash;' => "\xE2\x80\x94", + 'micro' => "\xC2\xB5", + 'micro;' => "\xC2\xB5", + 'middot' => "\xC2\xB7", + 'middot;' => "\xC2\xB7", + 'minus;' => "\xE2\x88\x92", + 'Mu;' => "\xCE\x9C", + 'mu;' => "\xCE\xBC", + 'nabla;' => "\xE2\x88\x87", + 'nbsp' => "\xC2\xA0", + 'nbsp;' => "\xC2\xA0", + 'ndash;' => "\xE2\x80\x93", + 'ne;' => "\xE2\x89\xA0", + 'ni;' => "\xE2\x88\x8B", + 'not' => "\xC2\xAC", + 'not;' => "\xC2\xAC", + 'notin;' => "\xE2\x88\x89", + 'nsub;' => "\xE2\x8A\x84", + 'Ntilde' => "\xC3\x91", + 'ntilde' => "\xC3\xB1", + 'Ntilde;' => "\xC3\x91", + 'ntilde;' => "\xC3\xB1", + 'Nu;' => "\xCE\x9D", + 'nu;' => "\xCE\xBD", + 'Oacute' => "\xC3\x93", + 'oacute' => "\xC3\xB3", + 'Oacute;' => "\xC3\x93", + 'oacute;' => "\xC3\xB3", + 'Ocirc' => "\xC3\x94", + 'ocirc' => "\xC3\xB4", + 'Ocirc;' => "\xC3\x94", + 'ocirc;' => "\xC3\xB4", + 'OElig;' => "\xC5\x92", + 'oelig;' => "\xC5\x93", + 'Ograve' => "\xC3\x92", + 'ograve' => "\xC3\xB2", + 'Ograve;' => "\xC3\x92", + 'ograve;' => "\xC3\xB2", + 'oline;' => "\xE2\x80\xBE", + 'Omega;' => "\xCE\xA9", + 'omega;' => "\xCF\x89", + 'Omicron;' => "\xCE\x9F", + 'omicron;' => "\xCE\xBF", + 'oplus;' => "\xE2\x8A\x95", + 'or;' => "\xE2\x88\xA8", + 'ordf' => "\xC2\xAA", + 'ordf;' => "\xC2\xAA", + 'ordm' => "\xC2\xBA", + 'ordm;' => "\xC2\xBA", + 'Oslash' => "\xC3\x98", + 'oslash' => "\xC3\xB8", + 'Oslash;' => "\xC3\x98", + 'oslash;' => "\xC3\xB8", + 'Otilde' => "\xC3\x95", + 'otilde' => "\xC3\xB5", + 'Otilde;' => "\xC3\x95", + 'otilde;' => "\xC3\xB5", + 'otimes;' => "\xE2\x8A\x97", + 'Ouml' => "\xC3\x96", + 'ouml' => "\xC3\xB6", + 'Ouml;' => "\xC3\x96", + 'ouml;' => "\xC3\xB6", + 'para' => "\xC2\xB6", + 'para;' => "\xC2\xB6", + 'part;' => "\xE2\x88\x82", + 'permil;' => "\xE2\x80\xB0", + 'perp;' => "\xE2\x8A\xA5", + 'Phi;' => "\xCE\xA6", + 'phi;' => "\xCF\x86", + 'Pi;' => "\xCE\xA0", + 'pi;' => "\xCF\x80", + 'piv;' => "\xCF\x96", + 'plusmn' => "\xC2\xB1", + 'plusmn;' => "\xC2\xB1", + 'pound' => "\xC2\xA3", + 'pound;' => "\xC2\xA3", + 'Prime;' => "\xE2\x80\xB3", + 'prime;' => "\xE2\x80\xB2", + 'prod;' => "\xE2\x88\x8F", + 'prop;' => "\xE2\x88\x9D", + 'Psi;' => "\xCE\xA8", + 'psi;' => "\xCF\x88", + 'QUOT' => "\x22", + 'quot' => "\x22", + 'QUOT;' => "\x22", + 'quot;' => "\x22", + 'radic;' => "\xE2\x88\x9A", + 'rang;' => "\xE3\x80\x89", + 'raquo' => "\xC2\xBB", + 'raquo;' => "\xC2\xBB", + 'rArr;' => "\xE2\x87\x92", + 'rarr;' => "\xE2\x86\x92", + 'rceil;' => "\xE2\x8C\x89", + 'rdquo;' => "\xE2\x80\x9D", + 'real;' => "\xE2\x84\x9C", + 'REG' => "\xC2\xAE", + 'reg' => "\xC2\xAE", + 'REG;' => "\xC2\xAE", + 'reg;' => "\xC2\xAE", + 'rfloor;' => "\xE2\x8C\x8B", + 'Rho;' => "\xCE\xA1", + 'rho;' => "\xCF\x81", + 'rlm;' => "\xE2\x80\x8F", + 'rsaquo;' => "\xE2\x80\xBA", + 'rsquo;' => "\xE2\x80\x99", + 'sbquo;' => "\xE2\x80\x9A", + 'Scaron;' => "\xC5\xA0", + 'scaron;' => "\xC5\xA1", + 'sdot;' => "\xE2\x8B\x85", + 'sect' => "\xC2\xA7", + 'sect;' => "\xC2\xA7", + 'shy' => "\xC2\xAD", + 'shy;' => "\xC2\xAD", + 'Sigma;' => "\xCE\xA3", + 'sigma;' => "\xCF\x83", + 'sigmaf;' => "\xCF\x82", + 'sim;' => "\xE2\x88\xBC", + 'spades;' => "\xE2\x99\xA0", + 'sub;' => "\xE2\x8A\x82", + 'sube;' => "\xE2\x8A\x86", + 'sum;' => "\xE2\x88\x91", + 'sup;' => "\xE2\x8A\x83", + 'sup1' => "\xC2\xB9", + 'sup1;' => "\xC2\xB9", + 'sup2' => "\xC2\xB2", + 'sup2;' => "\xC2\xB2", + 'sup3' => "\xC2\xB3", + 'sup3;' => "\xC2\xB3", + 'supe;' => "\xE2\x8A\x87", + 'szlig' => "\xC3\x9F", + 'szlig;' => "\xC3\x9F", + 'Tau;' => "\xCE\xA4", + 'tau;' => "\xCF\x84", + 'there4;' => "\xE2\x88\xB4", + 'Theta;' => "\xCE\x98", + 'theta;' => "\xCE\xB8", + 'thetasym;' => "\xCF\x91", + 'thinsp;' => "\xE2\x80\x89", + 'THORN' => "\xC3\x9E", + 'thorn' => "\xC3\xBE", + 'THORN;' => "\xC3\x9E", + 'thorn;' => "\xC3\xBE", + 'tilde;' => "\xCB\x9C", + 'times' => "\xC3\x97", + 'times;' => "\xC3\x97", + 'TRADE;' => "\xE2\x84\xA2", + 'trade;' => "\xE2\x84\xA2", + 'Uacute' => "\xC3\x9A", + 'uacute' => "\xC3\xBA", + 'Uacute;' => "\xC3\x9A", + 'uacute;' => "\xC3\xBA", + 'uArr;' => "\xE2\x87\x91", + 'uarr;' => "\xE2\x86\x91", + 'Ucirc' => "\xC3\x9B", + 'ucirc' => "\xC3\xBB", + 'Ucirc;' => "\xC3\x9B", + 'ucirc;' => "\xC3\xBB", + 'Ugrave' => "\xC3\x99", + 'ugrave' => "\xC3\xB9", + 'Ugrave;' => "\xC3\x99", + 'ugrave;' => "\xC3\xB9", + 'uml' => "\xC2\xA8", + 'uml;' => "\xC2\xA8", + 'upsih;' => "\xCF\x92", + 'Upsilon;' => "\xCE\xA5", + 'upsilon;' => "\xCF\x85", + 'Uuml' => "\xC3\x9C", + 'uuml' => "\xC3\xBC", + 'Uuml;' => "\xC3\x9C", + 'uuml;' => "\xC3\xBC", + 'weierp;' => "\xE2\x84\x98", + 'Xi;' => "\xCE\x9E", + 'xi;' => "\xCE\xBE", + 'Yacute' => "\xC3\x9D", + 'yacute' => "\xC3\xBD", + 'Yacute;' => "\xC3\x9D", + 'yacute;' => "\xC3\xBD", + 'yen' => "\xC2\xA5", + 'yen;' => "\xC2\xA5", + 'yuml' => "\xC3\xBF", + 'Yuml;' => "\xC5\xB8", + 'yuml;' => "\xC3\xBF", + 'Zeta;' => "\xCE\x96", + 'zeta;' => "\xCE\xB6", + 'zwj;' => "\xE2\x80\x8D", + 'zwnj;' => "\xE2\x80\x8C" + ); + + for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++) + { + $consumed = substr($this->consumed, 1); + if (isset($entities[$consumed])) + { + $match = $consumed; + } + } + + if ($match !== null) + { + $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1); + $this->position += strlen($entities[$match]) - strlen($consumed) - 1; + } + break; + } + } +} + diff --git a/src/wp-includes/SimplePie/Enclosure.php b/src/wp-includes/SimplePie/Enclosure.php new file mode 100644 index 0000000..5567437 --- /dev/null +++ b/src/wp-includes/SimplePie/Enclosure.php @@ -0,0 +1,1380 @@ +bitrate = $bitrate; + $this->captions = $captions; + $this->categories = $categories; + $this->channels = $channels; + $this->copyright = $copyright; + $this->credits = $credits; + $this->description = $description; + $this->duration = $duration; + $this->expression = $expression; + $this->framerate = $framerate; + $this->hashes = $hashes; + $this->height = $height; + $this->keywords = $keywords; + $this->lang = $lang; + $this->length = $length; + $this->link = $link; + $this->medium = $medium; + $this->player = $player; + $this->ratings = $ratings; + $this->restrictions = $restrictions; + $this->samplingrate = $samplingrate; + $this->thumbnails = $thumbnails; + $this->title = $title; + $this->type = $type; + $this->width = $width; + + if (class_exists('idna_convert')) + { + $idn = new idna_convert(); + $parsed = SimplePie_Misc::parse_url($link); + $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); + } + $this->handler = $this->get_handler(); // Needs to load last + } + + /** + * String-ified version + * + * @return string + */ + public function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + /** + * Get the bitrate + * + * @return string|null + */ + public function get_bitrate() + { + if ($this->bitrate !== null) + { + return $this->bitrate; + } + else + { + return null; + } + } + + /** + * Get a single caption + * + * @param int $key + * @return SimplePie_Caption|null + */ + public function get_caption($key = 0) + { + $captions = $this->get_captions(); + if (isset($captions[$key])) + { + return $captions[$key]; + } + else + { + return null; + } + } + + /** + * Get all captions + * + * @return array|null Array of {@see SimplePie_Caption} objects + */ + public function get_captions() + { + if ($this->captions !== null) + { + return $this->captions; + } + else + { + return null; + } + } + + /** + * Get a single category + * + * @param int $key + * @return SimplePie_Category|null + */ + public function get_category($key = 0) + { + $categories = $this->get_categories(); + if (isset($categories[$key])) + { + return $categories[$key]; + } + else + { + return null; + } + } + + /** + * Get all categories + * + * @return array|null Array of {@see SimplePie_Category} objects + */ + public function get_categories() + { + if ($this->categories !== null) + { + return $this->categories; + } + else + { + return null; + } + } + + /** + * Get the number of audio channels + * + * @return int|null + */ + public function get_channels() + { + if ($this->channels !== null) + { + return $this->channels; + } + else + { + return null; + } + } + + /** + * Get the copyright information + * + * @return SimplePie_Copyright|null + */ + public function get_copyright() + { + if ($this->copyright !== null) + { + return $this->copyright; + } + else + { + return null; + } + } + + /** + * Get a single credit + * + * @param int $key + * @return SimplePie_Credit|null + */ + public function get_credit($key = 0) + { + $credits = $this->get_credits(); + if (isset($credits[$key])) + { + return $credits[$key]; + } + else + { + return null; + } + } + + /** + * Get all credits + * + * @return array|null Array of {@see SimplePie_Credit} objects + */ + public function get_credits() + { + if ($this->credits !== null) + { + return $this->credits; + } + else + { + return null; + } + } + + /** + * Get the description of the enclosure + * + * @return string|null + */ + public function get_description() + { + if ($this->description !== null) + { + return $this->description; + } + else + { + return null; + } + } + + /** + * Get the duration of the enclosure + * + * @param string $convert Convert seconds into hh:mm:ss + * @return string|int|null 'hh:mm:ss' string if `$convert` was specified, otherwise integer (or null if none found) + */ + public function get_duration($convert = false) + { + if ($this->duration !== null) + { + if ($convert) + { + $time = SimplePie_Misc::time_hms($this->duration); + return $time; + } + else + { + return $this->duration; + } + } + else + { + return null; + } + } + + /** + * Get the expression + * + * @return string Probably one of 'sample', 'full', 'nonstop', 'clip'. Defaults to 'full' + */ + public function get_expression() + { + if ($this->expression !== null) + { + return $this->expression; + } + else + { + return 'full'; + } + } + + /** + * Get the file extension + * + * @return string|null + */ + public function get_extension() + { + if ($this->link !== null) + { + $url = SimplePie_Misc::parse_url($this->link); + if ($url['path'] !== '') + { + return pathinfo($url['path'], PATHINFO_EXTENSION); + } + } + return null; + } + + /** + * Get the framerate (in frames-per-second) + * + * @return string|null + */ + public function get_framerate() + { + if ($this->framerate !== null) + { + return $this->framerate; + } + else + { + return null; + } + } + + /** + * Get the preferred handler + * + * @return string|null One of 'flash', 'fmedia', 'quicktime', 'wmedia', 'mp3' + */ + public function get_handler() + { + return $this->get_real_type(true); + } + + /** + * Get a single hash + * + * @link http://www.rssboard.org/media-rss#media-hash + * @param int $key + * @return string|null Hash as per `media:hash`, prefixed with "$algo:" + */ + public function get_hash($key = 0) + { + $hashes = $this->get_hashes(); + if (isset($hashes[$key])) + { + return $hashes[$key]; + } + else + { + return null; + } + } + + /** + * Get all credits + * + * @return array|null Array of strings, see {@see get_hash()} + */ + public function get_hashes() + { + if ($this->hashes !== null) + { + return $this->hashes; + } + else + { + return null; + } + } + + /** + * Get the height + * + * @return string|null + */ + public function get_height() + { + if ($this->height !== null) + { + return $this->height; + } + else + { + return null; + } + } + + /** + * Get the language + * + * @link http://tools.ietf.org/html/rfc3066 + * @return string|null Language code as per RFC 3066 + */ + public function get_language() + { + if ($this->lang !== null) + { + return $this->lang; + } + else + { + return null; + } + } + + /** + * Get a single keyword + * + * @param int $key + * @return string|null + */ + public function get_keyword($key = 0) + { + $keywords = $this->get_keywords(); + if (isset($keywords[$key])) + { + return $keywords[$key]; + } + else + { + return null; + } + } + + /** + * Get all keywords + * + * @return array|null Array of strings + */ + public function get_keywords() + { + if ($this->keywords !== null) + { + return $this->keywords; + } + else + { + return null; + } + } + + /** + * Get length + * + * @return float Length in bytes + */ + public function get_length() + { + if ($this->length !== null) + { + return $this->length; + } + else + { + return null; + } + } + + /** + * Get the URL + * + * @return string|null + */ + public function get_link() + { + if ($this->link !== null) + { + return urldecode($this->link); + } + else + { + return null; + } + } + + /** + * Get the medium + * + * @link http://www.rssboard.org/media-rss#media-content + * @return string|null Should be one of 'image', 'audio', 'video', 'document', 'executable' + */ + public function get_medium() + { + if ($this->medium !== null) + { + return $this->medium; + } + else + { + return null; + } + } + + /** + * Get the player URL + * + * Typically the same as {@see get_permalink()} + * @return string|null Player URL + */ + public function get_player() + { + if ($this->player !== null) + { + return $this->player; + } + else + { + return null; + } + } + + /** + * Get a single rating + * + * @param int $key + * @return SimplePie_Rating|null + */ + public function get_rating($key = 0) + { + $ratings = $this->get_ratings(); + if (isset($ratings[$key])) + { + return $ratings[$key]; + } + else + { + return null; + } + } + + /** + * Get all ratings + * + * @return array|null Array of {@see SimplePie_Rating} objects + */ + public function get_ratings() + { + if ($this->ratings !== null) + { + return $this->ratings; + } + else + { + return null; + } + } + + /** + * Get a single restriction + * + * @param int $key + * @return SimplePie_Restriction|null + */ + public function get_restriction($key = 0) + { + $restrictions = $this->get_restrictions(); + if (isset($restrictions[$key])) + { + return $restrictions[$key]; + } + else + { + return null; + } + } + + /** + * Get all restrictions + * + * @return array|null Array of {@see SimplePie_Restriction} objects + */ + public function get_restrictions() + { + if ($this->restrictions !== null) + { + return $this->restrictions; + } + else + { + return null; + } + } + + /** + * Get the sampling rate (in kHz) + * + * @return string|null + */ + public function get_sampling_rate() + { + if ($this->samplingrate !== null) + { + return $this->samplingrate; + } + else + { + return null; + } + } + + /** + * Get the file size (in MiB) + * + * @return float|null File size in mebibytes (1048 bytes) + */ + public function get_size() + { + $length = $this->get_length(); + if ($length !== null) + { + return round($length/1048576, 2); + } + else + { + return null; + } + } + + /** + * Get a single thumbnail + * + * @param int $key + * @return string|null Thumbnail URL + */ + public function get_thumbnail($key = 0) + { + $thumbnails = $this->get_thumbnails(); + if (isset($thumbnails[$key])) + { + return $thumbnails[$key]; + } + else + { + return null; + } + } + + /** + * Get all thumbnails + * + * @return array|null Array of thumbnail URLs + */ + public function get_thumbnails() + { + if ($this->thumbnails !== null) + { + return $this->thumbnails; + } + else + { + return null; + } + } + + /** + * Get the title + * + * @return string|null + */ + public function get_title() + { + if ($this->title !== null) + { + return $this->title; + } + else + { + return null; + } + } + + /** + * Get mimetype of the enclosure + * + * @see get_real_type() + * @return string|null MIME type + */ + public function get_type() + { + if ($this->type !== null) + { + return $this->type; + } + else + { + return null; + } + } + + /** + * Get the width + * + * @return string|null + */ + public function get_width() + { + if ($this->width !== null) + { + return $this->width; + } + else + { + return null; + } + } + + /** + * Embed the enclosure using `` + * + * @deprecated Use the second parameter to {@see embed} instead + * + * @param array|string $options See first paramter to {@see embed} + * @return string HTML string to output + */ + public function native_embed($options='') + { + return $this->embed($options, true); + } + + /** + * Embed the enclosure using Javascript + * + * `$options` is an array or comma-separated key:value string, with the + * following properties: + * + * - `alt` (string): Alternate content for when an end-user does not have + * the appropriate handler installed or when a file type is + * unsupported. Can be any text or HTML. Defaults to blank. + * - `altclass` (string): If a file type is unsupported, the end-user will + * see the alt text (above) linked directly to the content. That link + * will have this value as its class name. Defaults to blank. + * - `audio` (string): This is an image that should be used as a + * placeholder for audio files before they're loaded (QuickTime-only). + * Can be any relative or absolute URL. Defaults to blank. + * - `bgcolor` (string): The background color for the media, if not + * already transparent. Defaults to `#ffffff`. + * - `height` (integer): The height of the embedded media. Accepts any + * numeric pixel value (such as `360`) or `auto`. Defaults to `auto`, + * and it is recommended that you use this default. + * - `loop` (boolean): Do you want the media to loop when its done? + * Defaults to `false`. + * - `mediaplayer` (string): The location of the included + * `mediaplayer.swf` file. This allows for the playback of Flash Video + * (`.flv`) files, and is the default handler for non-Odeo MP3's. + * Defaults to blank. + * - `video` (string): This is an image that should be used as a + * placeholder for video files before they're loaded (QuickTime-only). + * Can be any relative or absolute URL. Defaults to blank. + * - `width` (integer): The width of the embedded media. Accepts any + * numeric pixel value (such as `480`) or `auto`. Defaults to `auto`, + * and it is recommended that you use this default. + * - `widescreen` (boolean): Is the enclosure widescreen or standard? + * This applies only to video enclosures, and will automatically resize + * the content appropriately. Defaults to `false`, implying 4:3 mode. + * + * Note: Non-widescreen (4:3) mode with `width` and `height` set to `auto` + * will default to 480x360 video resolution. Widescreen (16:9) mode with + * `width` and `height` set to `auto` will default to 480x270 video resolution. + * + * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'. + * @param array|string $options Comma-separated key:value list, or array + * @param bool $native Use `` + * @return string HTML string to output + */ + public function embed($options = '', $native = false) + { + // Set up defaults + $audio = ''; + $video = ''; + $alt = ''; + $altclass = ''; + $loop = 'false'; + $width = 'auto'; + $height = 'auto'; + $bgcolor = '#ffffff'; + $mediaplayer = ''; + $widescreen = false; + $handler = $this->get_handler(); + $type = $this->get_real_type(); + + // Process options and reassign values as necessary + if (is_array($options)) + { + extract($options); + } + else + { + $options = explode(',', $options); + foreach($options as $option) + { + $opt = explode(':', $option, 2); + if (isset($opt[0], $opt[1])) + { + $opt[0] = trim($opt[0]); + $opt[1] = trim($opt[1]); + switch ($opt[0]) + { + case 'audio': + $audio = $opt[1]; + break; + + case 'video': + $video = $opt[1]; + break; + + case 'alt': + $alt = $opt[1]; + break; + + case 'altclass': + $altclass = $opt[1]; + break; + + case 'loop': + $loop = $opt[1]; + break; + + case 'width': + $width = $opt[1]; + break; + + case 'height': + $height = $opt[1]; + break; + + case 'bgcolor': + $bgcolor = $opt[1]; + break; + + case 'mediaplayer': + $mediaplayer = $opt[1]; + break; + + case 'widescreen': + $widescreen = $opt[1]; + break; + } + } + } + } + + $mime = explode('/', $type, 2); + $mime = $mime[0]; + + // Process values for 'auto' + if ($width === 'auto') + { + if ($mime === 'video') + { + if ($height === 'auto') + { + $width = 480; + } + elseif ($widescreen) + { + $width = round((intval($height)/9)*16); + } + else + { + $width = round((intval($height)/3)*4); + } + } + else + { + $width = '100%'; + } + } + + if ($height === 'auto') + { + if ($mime === 'audio') + { + $height = 0; + } + elseif ($mime === 'video') + { + if ($width === 'auto') + { + if ($widescreen) + { + $height = 270; + } + else + { + $height = 360; + } + } + elseif ($widescreen) + { + $height = round((intval($width)/16)*9); + } + else + { + $height = round((intval($width)/4)*3); + } + } + else + { + $height = 376; + } + } + elseif ($mime === 'audio') + { + $height = 0; + } + + // Set proper placeholder value + if ($mime === 'audio') + { + $placeholder = $audio; + } + elseif ($mime === 'video') + { + $placeholder = $video; + } + + $embed = ''; + + // Flash + if ($handler === 'flash') + { + if ($native) + { + $embed .= "get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\">"; + } + else + { + $embed .= ""; + } + } + + // Flash Media Player file types. + // Preferred handler for MP3 file types. + elseif ($handler === 'fmedia' || ($handler === 'mp3' && $mediaplayer !== '')) + { + $height += 20; + if ($native) + { + $embed .= "get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\">"; + } + else + { + $embed .= ""; + } + } + + // QuickTime 7 file types. Need to test with QuickTime 6. + // Only handle MP3's if the Flash Media Player is not present. + elseif ($handler === 'quicktime' || ($handler === 'mp3' && $mediaplayer === '')) + { + $height += 16; + if ($native) + { + if ($placeholder !== '') + { + $embed .= "get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\">"; + } + else + { + $embed .= "get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\">"; + } + } + else + { + $embed .= ""; + } + } + + // Windows Media + elseif ($handler === 'wmedia') + { + $height += 45; + if ($native) + { + $embed .= "get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\">"; + } + else + { + $embed .= ""; + } + } + + // Everything else + else $embed .= '' . $alt . ''; + + return $embed; + } + + /** + * Get the real media type + * + * Often, feeds lie to us, necessitating a bit of deeper inspection. This + * converts types to their canonical representations based on the file + * extension + * + * @see get_type() + * @param bool $find_handler Internal use only, use {@see get_handler()} instead + * @return string MIME type + */ + public function get_real_type($find_handler = false) + { + // Mime-types by handler. + $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash + $types_fmedia = array('video/flv', 'video/x-flv','flv-application/octet-stream'); // Flash Media Player + $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime + $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media + $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3 + + if ($this->get_type() !== null) + { + $type = strtolower($this->type); + } + else + { + $type = null; + } + + // If we encounter an unsupported mime-type, check the file extension and guess intelligently. + if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3))) + { + switch (strtolower($this->get_extension())) + { + // Audio mime-types + case 'aac': + case 'adts': + $type = 'audio/acc'; + break; + + case 'aif': + case 'aifc': + case 'aiff': + case 'cdda': + $type = 'audio/aiff'; + break; + + case 'bwf': + $type = 'audio/wav'; + break; + + case 'kar': + case 'mid': + case 'midi': + case 'smf': + $type = 'audio/midi'; + break; + + case 'm4a': + $type = 'audio/x-m4a'; + break; + + case 'mp3': + case 'swa': + $type = 'audio/mp3'; + break; + + case 'wav': + $type = 'audio/wav'; + break; + + case 'wax': + $type = 'audio/x-ms-wax'; + break; + + case 'wma': + $type = 'audio/x-ms-wma'; + break; + + // Video mime-types + case '3gp': + case '3gpp': + $type = 'video/3gpp'; + break; + + case '3g2': + case '3gp2': + $type = 'video/3gpp2'; + break; + + case 'asf': + $type = 'video/x-ms-asf'; + break; + + case 'flv': + $type = 'video/x-flv'; + break; + + case 'm1a': + case 'm1s': + case 'm1v': + case 'm15': + case 'm75': + case 'mp2': + case 'mpa': + case 'mpeg': + case 'mpg': + case 'mpm': + case 'mpv': + $type = 'video/mpeg'; + break; + + case 'm4v': + $type = 'video/x-m4v'; + break; + + case 'mov': + case 'qt': + $type = 'video/quicktime'; + break; + + case 'mp4': + case 'mpg4': + $type = 'video/mp4'; + break; + + case 'sdv': + $type = 'video/sd-video'; + break; + + case 'wm': + $type = 'video/x-ms-wm'; + break; + + case 'wmv': + $type = 'video/x-ms-wmv'; + break; + + case 'wvx': + $type = 'video/x-ms-wvx'; + break; + + // Flash mime-types + case 'spl': + $type = 'application/futuresplash'; + break; + + case 'swf': + $type = 'application/x-shockwave-flash'; + break; + } + } + + if ($find_handler) + { + if (in_array($type, $types_flash)) + { + return 'flash'; + } + elseif (in_array($type, $types_fmedia)) + { + return 'fmedia'; + } + elseif (in_array($type, $types_quicktime)) + { + return 'quicktime'; + } + elseif (in_array($type, $types_wmedia)) + { + return 'wmedia'; + } + elseif (in_array($type, $types_mp3)) + { + return 'mp3'; + } + else + { + return null; + } + } + else + { + return $type; + } + } +} + diff --git a/src/wp-includes/SimplePie/Exception.php b/src/wp-includes/SimplePie/Exception.php new file mode 100644 index 0000000..73e104d --- /dev/null +++ b/src/wp-includes/SimplePie/Exception.php @@ -0,0 +1,52 @@ +encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); + } + $this->url = $url; + $this->useragent = $useragent; + if (preg_match('/^http(s)?:\/\//i', $url)) + { + if ($useragent === null) + { + $useragent = ini_get('user_agent'); + $this->useragent = $useragent; + } + if (!is_array($headers)) + { + $headers = array(); + } + if (!$force_fsockopen && function_exists('curl_exec')) + { + $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_CURL; + $fp = curl_init(); + $headers2 = array(); + foreach ($headers as $key => $value) + { + $headers2[] = "$key: $value"; + } + if (version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>=')) + { + curl_setopt($fp, CURLOPT_ENCODING, ''); + } + curl_setopt($fp, CURLOPT_URL, $url); + curl_setopt($fp, CURLOPT_HEADER, 1); + curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($fp, CURLOPT_TIMEOUT, $timeout); + curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout); + curl_setopt($fp, CURLOPT_REFERER, $url); + curl_setopt($fp, CURLOPT_USERAGENT, $useragent); + curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2); + if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>=')) + { + curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1); + curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects); + } + + $this->headers = curl_exec($fp); + if (curl_errno($fp) === 23 || curl_errno($fp) === 61) + { + curl_setopt($fp, CURLOPT_ENCODING, 'none'); + $this->headers = curl_exec($fp); + } + if (curl_errno($fp)) + { + $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp); + $this->success = false; + } + else + { + $info = curl_getinfo($fp); + curl_close($fp); + $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1); + $this->headers = array_pop($this->headers); + $parser = new SimplePie_HTTP_Parser($this->headers); + if ($parser->parse()) + { + $this->headers = $parser->headers; + $this->body = $parser->body; + $this->status_code = $parser->status_code; + if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) + { + $this->redirects++; + $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url); + return $this->__construct($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen); + } + } + } + } + else + { + $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN; + $url_parts = parse_url($url); + $socket_host = $url_parts['host']; + if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') + { + $socket_host = "ssl://$url_parts[host]"; + $url_parts['port'] = 443; + } + if (!isset($url_parts['port'])) + { + $url_parts['port'] = 80; + } + $fp = @fsockopen($socket_host, $url_parts['port'], $errno, $errstr, $timeout); + if (!$fp) + { + $this->error = 'fsockopen error: ' . $errstr; + $this->success = false; + } + else + { + stream_set_timeout($fp, $timeout); + if (isset($url_parts['path'])) + { + if (isset($url_parts['query'])) + { + $get = "$url_parts[path]?$url_parts[query]"; + } + else + { + $get = $url_parts['path']; + } + } + else + { + $get = '/'; + } + $out = "GET $get HTTP/1.1\r\n"; + $out .= "Host: $url_parts[host]\r\n"; + $out .= "User-Agent: $useragent\r\n"; + if (extension_loaded('zlib')) + { + $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n"; + } + + if (isset($url_parts['user']) && isset($url_parts['pass'])) + { + $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n"; + } + foreach ($headers as $key => $value) + { + $out .= "$key: $value\r\n"; + } + $out .= "Connection: Close\r\n\r\n"; + fwrite($fp, $out); + + $info = stream_get_meta_data($fp); + + $this->headers = ''; + while (!$info['eof'] && !$info['timed_out']) + { + $this->headers .= fread($fp, 1160); + $info = stream_get_meta_data($fp); + } + if (!$info['timed_out']) + { + $parser = new SimplePie_HTTP_Parser($this->headers); + if ($parser->parse()) + { + $this->headers = $parser->headers; + $this->body = $parser->body; + $this->status_code = $parser->status_code; + if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) + { + $this->redirects++; + $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url); + return $this->__construct($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen); + } + if (isset($this->headers['content-encoding'])) + { + // Hey, we act dumb elsewhere, so let's do that here too + switch (strtolower(trim($this->headers['content-encoding'], "\x09\x0A\x0D\x20"))) + { + case 'gzip': + case 'x-gzip': + $decoder = new SimplePie_gzdecode($this->body); + if (!$decoder->parse()) + { + $this->error = 'Unable to decode HTTP "gzip" stream'; + $this->success = false; + } + else + { + $this->body = $decoder->data; + } + break; + + case 'deflate': + if (($decompressed = gzinflate($this->body)) !== false) + { + $this->body = $decompressed; + } + else if (($decompressed = gzuncompress($this->body)) !== false) + { + $this->body = $decompressed; + } + else if (function_exists('gzdecode') && ($decompressed = gzdecode($this->body)) !== false) + { + $this->body = $decompressed; + } + else + { + $this->error = 'Unable to decode HTTP "deflate" stream'; + $this->success = false; + } + break; + + default: + $this->error = 'Unknown content coding'; + $this->success = false; + } + } + } + } + else + { + $this->error = 'fsocket timed out'; + $this->success = false; + } + fclose($fp); + } + } + } + else + { + $this->method = SIMPLEPIE_FILE_SOURCE_LOCAL | SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS; + if (!$this->body = file_get_contents($url)) + { + $this->error = 'file_get_contents could not read the file'; + $this->success = false; + } + } + } +} diff --git a/src/wp-includes/SimplePie/HTTP/Parser.php b/src/wp-includes/SimplePie/HTTP/Parser.php new file mode 100644 index 0000000..bff2222 --- /dev/null +++ b/src/wp-includes/SimplePie/HTTP/Parser.php @@ -0,0 +1,500 @@ +data = $data; + $this->data_length = strlen($this->data); + } + + /** + * Parse the input data + * + * @return bool true on success, false on failure + */ + public function parse() + { + while ($this->state && $this->state !== 'emit' && $this->has_data()) + { + $state = $this->state; + $this->$state(); + } + $this->data = ''; + if ($this->state === 'emit' || $this->state === 'body') + { + return true; + } + else + { + $this->http_version = ''; + $this->status_code = ''; + $this->reason = ''; + $this->headers = array(); + $this->body = ''; + return false; + } + } + + /** + * Check whether there is data beyond the pointer + * + * @return bool true if there is further data, false if not + */ + protected function has_data() + { + return (bool) ($this->position < $this->data_length); + } + + /** + * See if the next character is LWS + * + * @return bool true if the next character is LWS, false if not + */ + protected function is_linear_whitespace() + { + return (bool) ($this->data[$this->position] === "\x09" + || $this->data[$this->position] === "\x20" + || ($this->data[$this->position] === "\x0A" + && isset($this->data[$this->position + 1]) + && ($this->data[$this->position + 1] === "\x09" || $this->data[$this->position + 1] === "\x20"))); + } + + /** + * Parse the HTTP version + */ + protected function http_version() + { + if (strpos($this->data, "\x0A") !== false && strtoupper(substr($this->data, 0, 5)) === 'HTTP/') + { + $len = strspn($this->data, '0123456789.', 5); + $this->http_version = substr($this->data, 5, $len); + $this->position += 5 + $len; + if (substr_count($this->http_version, '.') <= 1) + { + $this->http_version = (float) $this->http_version; + $this->position += strspn($this->data, "\x09\x20", $this->position); + $this->state = 'status'; + } + else + { + $this->state = false; + } + } + else + { + $this->state = false; + } + } + + /** + * Parse the status code + */ + protected function status() + { + if ($len = strspn($this->data, '0123456789', $this->position)) + { + $this->status_code = (int) substr($this->data, $this->position, $len); + $this->position += $len; + $this->state = 'reason'; + } + else + { + $this->state = false; + } + } + + /** + * Parse the reason phrase + */ + protected function reason() + { + $len = strcspn($this->data, "\x0A", $this->position); + $this->reason = trim(substr($this->data, $this->position, $len), "\x09\x0D\x20"); + $this->position += $len + 1; + $this->state = 'new_line'; + } + + /** + * Deal with a new line, shifting data around as needed + */ + protected function new_line() + { + $this->value = trim($this->value, "\x0D\x20"); + if ($this->name !== '' && $this->value !== '') + { + $this->name = strtolower($this->name); + // We should only use the last Content-Type header. c.f. issue #1 + if (isset($this->headers[$this->name]) && $this->name !== 'content-type') + { + $this->headers[$this->name] .= ', ' . $this->value; + } + else + { + $this->headers[$this->name] = $this->value; + } + } + $this->name = ''; + $this->value = ''; + if (substr($this->data[$this->position], 0, 2) === "\x0D\x0A") + { + $this->position += 2; + $this->state = 'body'; + } + elseif ($this->data[$this->position] === "\x0A") + { + $this->position++; + $this->state = 'body'; + } + else + { + $this->state = 'name'; + } + } + + /** + * Parse a header name + */ + protected function name() + { + $len = strcspn($this->data, "\x0A:", $this->position); + if (isset($this->data[$this->position + $len])) + { + if ($this->data[$this->position + $len] === "\x0A") + { + $this->position += $len; + $this->state = 'new_line'; + } + else + { + $this->name = substr($this->data, $this->position, $len); + $this->position += $len + 1; + $this->state = 'value'; + } + } + else + { + $this->state = false; + } + } + + /** + * Parse LWS, replacing consecutive LWS characters with a single space + */ + protected function linear_whitespace() + { + do + { + if (substr($this->data, $this->position, 2) === "\x0D\x0A") + { + $this->position += 2; + } + elseif ($this->data[$this->position] === "\x0A") + { + $this->position++; + } + $this->position += strspn($this->data, "\x09\x20", $this->position); + } while ($this->has_data() && $this->is_linear_whitespace()); + $this->value .= "\x20"; + } + + /** + * See what state to move to while within non-quoted header values + */ + protected function value() + { + if ($this->is_linear_whitespace()) + { + $this->linear_whitespace(); + } + else + { + switch ($this->data[$this->position]) + { + case '"': + // Workaround for ETags: we have to include the quotes as + // part of the tag. + if (strtolower($this->name) === 'etag') + { + $this->value .= '"'; + $this->position++; + $this->state = 'value_char'; + break; + } + $this->position++; + $this->state = 'quote'; + break; + + case "\x0A": + $this->position++; + $this->state = 'new_line'; + break; + + default: + $this->state = 'value_char'; + break; + } + } + } + + /** + * Parse a header value while outside quotes + */ + protected function value_char() + { + $len = strcspn($this->data, "\x09\x20\x0A\"", $this->position); + $this->value .= substr($this->data, $this->position, $len); + $this->position += $len; + $this->state = 'value'; + } + + /** + * See what state to move to while within quoted header values + */ + protected function quote() + { + if ($this->is_linear_whitespace()) + { + $this->linear_whitespace(); + } + else + { + switch ($this->data[$this->position]) + { + case '"': + $this->position++; + $this->state = 'value'; + break; + + case "\x0A": + $this->position++; + $this->state = 'new_line'; + break; + + case '\\': + $this->position++; + $this->state = 'quote_escaped'; + break; + + default: + $this->state = 'quote_char'; + break; + } + } + } + + /** + * Parse a header value while within quotes + */ + protected function quote_char() + { + $len = strcspn($this->data, "\x09\x20\x0A\"\\", $this->position); + $this->value .= substr($this->data, $this->position, $len); + $this->position += $len; + $this->state = 'value'; + } + + /** + * Parse an escaped character within quotes + */ + protected function quote_escaped() + { + $this->value .= $this->data[$this->position]; + $this->position++; + $this->state = 'quote'; + } + + /** + * Parse the body + */ + protected function body() + { + $this->body = substr($this->data, $this->position); + if (!empty($this->headers['transfer-encoding'])) + { + unset($this->headers['transfer-encoding']); + $this->state = 'chunked'; + } + else + { + $this->state = 'emit'; + } + } + + /** + * Parsed a "Transfer-Encoding: chunked" body + */ + protected function chunked() + { + if (!preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', trim($this->body))) + { + $this->state = 'emit'; + return; + } + + $decoded = ''; + $encoded = $this->body; + + while (true) + { + $is_chunked = (bool) preg_match( '/^([0-9a-f]+)[^\r\n]*\r\n/i', $encoded, $matches ); + if (!$is_chunked) + { + // Looks like it's not chunked after all + $this->state = 'emit'; + return; + } + + $length = hexdec(trim($matches[1])); + if ($length === 0) + { + // Ignore trailer headers + $this->state = 'emit'; + $this->body = $decoded; + return; + } + + $chunk_length = strlen($matches[0]); + $decoded .= $part = substr($encoded, $chunk_length, $length); + $encoded = substr($encoded, $chunk_length + $length + 2); + + if (trim($encoded) === '0' || empty($encoded)) + { + $this->state = 'emit'; + $this->body = $decoded; + return; + } + } + } +} diff --git a/src/wp-includes/SimplePie/IRI.php b/src/wp-includes/SimplePie/IRI.php new file mode 100644 index 0000000..d3198c0 --- /dev/null +++ b/src/wp-includes/SimplePie/IRI.php @@ -0,0 +1,1238 @@ + array( + 'port' => 674 + ), + 'dict' => array( + 'port' => 2628 + ), + 'file' => array( + 'ihost' => 'localhost' + ), + 'http' => array( + 'port' => 80, + 'ipath' => '/' + ), + 'https' => array( + 'port' => 443, + 'ipath' => '/' + ), + ); + + /** + * Return the entire IRI when you try and read the object as a string + * + * @return string + */ + public function __toString() + { + return $this->get_iri(); + } + + /** + * Overload __set() to provide access via properties + * + * @param string $name Property name + * @param mixed $value Property value + */ + public function __set($name, $value) + { + if (method_exists($this, 'set_' . $name)) + { + call_user_func(array($this, 'set_' . $name), $value); + } + elseif ( + $name === 'iauthority' + || $name === 'iuserinfo' + || $name === 'ihost' + || $name === 'ipath' + || $name === 'iquery' + || $name === 'ifragment' + ) + { + call_user_func(array($this, 'set_' . substr($name, 1)), $value); + } + } + + /** + * Overload __get() to provide access via properties + * + * @param string $name Property name + * @return mixed + */ + public function __get($name) + { + // isset() returns false for null, we don't want to do that + // Also why we use array_key_exists below instead of isset() + $props = get_object_vars($this); + + if ( + $name === 'iri' || + $name === 'uri' || + $name === 'iauthority' || + $name === 'authority' + ) + { + $return = $this->{"get_$name"}(); + } + elseif (array_key_exists($name, $props)) + { + $return = $this->$name; + } + // host -> ihost + elseif (($prop = 'i' . $name) && array_key_exists($prop, $props)) + { + $name = $prop; + $return = $this->$prop; + } + // ischeme -> scheme + elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props)) + { + $name = $prop; + $return = $this->$prop; + } + else + { + trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE); + $return = null; + } + + if ($return === null && isset($this->normalization[$this->scheme][$name])) + { + return $this->normalization[$this->scheme][$name]; + } + else + { + return $return; + } + } + + /** + * Overload __isset() to provide access via properties + * + * @param string $name Property name + * @return bool + */ + public function __isset($name) + { + if (method_exists($this, 'get_' . $name) || isset($this->$name)) + { + return true; + } + else + { + return false; + } + } + + /** + * Overload __unset() to provide access via properties + * + * @param string $name Property name + */ + public function __unset($name) + { + if (method_exists($this, 'set_' . $name)) + { + call_user_func(array($this, 'set_' . $name), ''); + } + } + + /** + * Create a new IRI object, from a specified string + * + * @param string $iri + */ + public function __construct($iri = null) + { + $this->set_iri($iri); + } + + /** + * Create a new IRI object by resolving a relative IRI + * + * Returns false if $base is not absolute, otherwise an IRI. + * + * @param IRI|string $base (Absolute) Base IRI + * @param IRI|string $relative Relative IRI + * @return IRI|false + */ + public static function absolutize($base, $relative) + { + if (!($relative instanceof SimplePie_IRI)) + { + $relative = new SimplePie_IRI($relative); + } + if (!$relative->is_valid()) + { + return false; + } + elseif ($relative->scheme !== null) + { + return clone $relative; + } + else + { + if (!($base instanceof SimplePie_IRI)) + { + $base = new SimplePie_IRI($base); + } + if ($base->scheme !== null && $base->is_valid()) + { + if ($relative->get_iri() !== '') + { + if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null) + { + $target = clone $relative; + $target->scheme = $base->scheme; + } + else + { + $target = new SimplePie_IRI; + $target->scheme = $base->scheme; + $target->iuserinfo = $base->iuserinfo; + $target->ihost = $base->ihost; + $target->port = $base->port; + if ($relative->ipath !== '') + { + if ($relative->ipath[0] === '/') + { + $target->ipath = $relative->ipath; + } + elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '') + { + $target->ipath = '/' . $relative->ipath; + } + elseif (($last_segment = strrpos($base->ipath, '/')) !== false) + { + $target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath; + } + else + { + $target->ipath = $relative->ipath; + } + $target->ipath = $target->remove_dot_segments($target->ipath); + $target->iquery = $relative->iquery; + } + else + { + $target->ipath = $base->ipath; + if ($relative->iquery !== null) + { + $target->iquery = $relative->iquery; + } + elseif ($base->iquery !== null) + { + $target->iquery = $base->iquery; + } + } + $target->ifragment = $relative->ifragment; + } + } + else + { + $target = clone $base; + $target->ifragment = null; + } + $target->scheme_normalization(); + return $target; + } + else + { + return false; + } + } + } + + /** + * Parse an IRI into scheme/authority/path/query/fragment segments + * + * @param string $iri + * @return array + */ + protected function parse_iri($iri) + { + $iri = trim($iri, "\x20\x09\x0A\x0C\x0D"); + if (preg_match('/^((?P[^:\/?#]+):)?(\/\/(?P[^\/?#]*))?(?P[^?#]*)(\?(?P[^#]*))?(#(?P.*))?$/', $iri, $match)) + { + if ($match[1] === '') + { + $match['scheme'] = null; + } + if (!isset($match[3]) || $match[3] === '') + { + $match['authority'] = null; + } + if (!isset($match[5])) + { + $match['path'] = ''; + } + if (!isset($match[6]) || $match[6] === '') + { + $match['query'] = null; + } + if (!isset($match[8]) || $match[8] === '') + { + $match['fragment'] = null; + } + return $match; + } + else + { + // This can occur when a paragraph is accidentally parsed as a URI + return false; + } + } + + /** + * Remove dot segments from a path + * + * @param string $input + * @return string + */ + protected function remove_dot_segments($input) + { + $output = ''; + while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') + { + // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise, + if (strpos($input, '../') === 0) + { + $input = substr($input, 3); + } + elseif (strpos($input, './') === 0) + { + $input = substr($input, 2); + } + // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise, + elseif (strpos($input, '/./') === 0) + { + $input = substr($input, 2); + } + elseif ($input === '/.') + { + $input = '/'; + } + // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise, + elseif (strpos($input, '/../') === 0) + { + $input = substr($input, 3); + $output = substr_replace($output, '', strrpos($output, '/')); + } + elseif ($input === '/..') + { + $input = '/'; + $output = substr_replace($output, '', strrpos($output, '/')); + } + // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise, + elseif ($input === '.' || $input === '..') + { + $input = ''; + } + // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer + elseif (($pos = strpos($input, '/', 1)) !== false) + { + $output .= substr($input, 0, $pos); + $input = substr_replace($input, '', 0, $pos); + } + else + { + $output .= $input; + $input = ''; + } + } + return $output . $input; + } + + /** + * Replace invalid character with percent encoding + * + * @param string $string Input string + * @param string $extra_chars Valid characters not in iunreserved or + * iprivate (this is ASCII-only) + * @param bool $iprivate Allow iprivate + * @return string + */ + protected function replace_invalid_with_pct_encoding($string, $extra_chars, $iprivate = false) + { + // Normalize as many pct-encoded sections as possible + $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array($this, 'remove_iunreserved_percent_encoded'), $string); + + // Replace invalid percent characters + $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string); + + // Add unreserved and % to $extra_chars (the latter is safe because all + // pct-encoded sections are now valid). + $extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%'; + + // Now replace any bytes that aren't allowed with their pct-encoded versions + $position = 0; + $strlen = strlen($string); + while (($position += strspn($string, $extra_chars, $position)) < $strlen) + { + $value = ord($string[$position]); + + // Start position + $start = $position; + + // By default we are valid + $valid = true; + + // No one byte sequences are valid due to the while. + // Two byte sequence: + if (($value & 0xE0) === 0xC0) + { + $character = ($value & 0x1F) << 6; + $length = 2; + $remaining = 1; + } + // Three byte sequence: + elseif (($value & 0xF0) === 0xE0) + { + $character = ($value & 0x0F) << 12; + $length = 3; + $remaining = 2; + } + // Four byte sequence: + elseif (($value & 0xF8) === 0xF0) + { + $character = ($value & 0x07) << 18; + $length = 4; + $remaining = 3; + } + // Invalid byte: + else + { + $valid = false; + $length = 1; + $remaining = 0; + } + + if ($remaining) + { + if ($position + $length <= $strlen) + { + for ($position++; $remaining; $position++) + { + $value = ord($string[$position]); + + // Check that the byte is valid, then add it to the character: + if (($value & 0xC0) === 0x80) + { + $character |= ($value & 0x3F) << (--$remaining * 6); + } + // If it is invalid, count the sequence as invalid and reprocess the current byte: + else + { + $valid = false; + $position--; + break; + } + } + } + else + { + $position = $strlen - 1; + $valid = false; + } + } + + // Percent encode anything invalid or not in ucschar + if ( + // Invalid sequences + !$valid + // Non-shortest form sequences are invalid + || $length > 1 && $character <= 0x7F + || $length > 2 && $character <= 0x7FF + || $length > 3 && $character <= 0xFFFF + // Outside of range of ucschar codepoints + // Noncharacters + || ($character & 0xFFFE) === 0xFFFE + || $character >= 0xFDD0 && $character <= 0xFDEF + || ( + // Everything else not in ucschar + $character > 0xD7FF && $character < 0xF900 + || $character < 0xA0 + || $character > 0xEFFFD + ) + && ( + // Everything not in iprivate, if it applies + !$iprivate + || $character < 0xE000 + || $character > 0x10FFFD + ) + ) + { + // If we were a character, pretend we weren't, but rather an error. + if ($valid) + $position--; + + for ($j = $start; $j <= $position; $j++) + { + $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1); + $j += 2; + $position += 2; + $strlen += 2; + } + } + } + + return $string; + } + + /** + * Callback function for preg_replace_callback. + * + * Removes sequences of percent encoded bytes that represent UTF-8 + * encoded characters in iunreserved + * + * @param array $match PCRE match + * @return string Replacement + */ + protected function remove_iunreserved_percent_encoded($match) + { + // As we just have valid percent encoded sequences we can just explode + // and ignore the first member of the returned array (an empty string). + $bytes = explode('%', $match[0]); + + // Initialize the new string (this is what will be returned) and that + // there are no bytes remaining in the current sequence (unsurprising + // at the first byte!). + $string = ''; + $remaining = 0; + + // Loop over each and every byte, and set $value to its value + for ($i = 1, $len = count($bytes); $i < $len; $i++) + { + $value = hexdec($bytes[$i]); + + // If we're the first byte of sequence: + if (!$remaining) + { + // Start position + $start = $i; + + // By default we are valid + $valid = true; + + // One byte sequence: + if ($value <= 0x7F) + { + $character = $value; + $length = 1; + } + // Two byte sequence: + elseif (($value & 0xE0) === 0xC0) + { + $character = ($value & 0x1F) << 6; + $length = 2; + $remaining = 1; + } + // Three byte sequence: + elseif (($value & 0xF0) === 0xE0) + { + $character = ($value & 0x0F) << 12; + $length = 3; + $remaining = 2; + } + // Four byte sequence: + elseif (($value & 0xF8) === 0xF0) + { + $character = ($value & 0x07) << 18; + $length = 4; + $remaining = 3; + } + // Invalid byte: + else + { + $valid = false; + $remaining = 0; + } + } + // Continuation byte: + else + { + // Check that the byte is valid, then add it to the character: + if (($value & 0xC0) === 0x80) + { + $remaining--; + $character |= ($value & 0x3F) << ($remaining * 6); + } + // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence: + else + { + $valid = false; + $remaining = 0; + $i--; + } + } + + // If we've reached the end of the current byte sequence, append it to Unicode::$data + if (!$remaining) + { + // Percent encode anything invalid or not in iunreserved + if ( + // Invalid sequences + !$valid + // Non-shortest form sequences are invalid + || $length > 1 && $character <= 0x7F + || $length > 2 && $character <= 0x7FF + || $length > 3 && $character <= 0xFFFF + // Outside of range of iunreserved codepoints + || $character < 0x2D + || $character > 0xEFFFD + // Noncharacters + || ($character & 0xFFFE) === 0xFFFE + || $character >= 0xFDD0 && $character <= 0xFDEF + // Everything else not in iunreserved (this is all BMP) + || $character === 0x2F + || $character > 0x39 && $character < 0x41 + || $character > 0x5A && $character < 0x61 + || $character > 0x7A && $character < 0x7E + || $character > 0x7E && $character < 0xA0 + || $character > 0xD7FF && $character < 0xF900 + ) + { + for ($j = $start; $j <= $i; $j++) + { + $string .= '%' . strtoupper($bytes[$j]); + } + } + else + { + for ($j = $start; $j <= $i; $j++) + { + $string .= chr(hexdec($bytes[$j])); + } + } + } + } + + // If we have any bytes left over they are invalid (i.e., we are + // mid-way through a multi-byte sequence) + if ($remaining) + { + for ($j = $start; $j < $len; $j++) + { + $string .= '%' . strtoupper($bytes[$j]); + } + } + + return $string; + } + + protected function scheme_normalization() + { + if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo']) + { + $this->iuserinfo = null; + } + if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost']) + { + $this->ihost = null; + } + if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port']) + { + $this->port = null; + } + if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath']) + { + $this->ipath = ''; + } + if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery']) + { + $this->iquery = null; + } + if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment']) + { + $this->ifragment = null; + } + } + + /** + * Check if the object represents a valid IRI. This needs to be done on each + * call as some things change depending on another part of the IRI. + * + * @return bool + */ + public function is_valid() + { + $isauthority = $this->iuserinfo !== null || $this->ihost !== null || $this->port !== null; + if ($this->ipath !== '' && + ( + $isauthority && ( + $this->ipath[0] !== '/' || + substr($this->ipath, 0, 2) === '//' + ) || + ( + $this->scheme === null && + !$isauthority && + strpos($this->ipath, ':') !== false && + (strpos($this->ipath, '/') === false ? true : strpos($this->ipath, ':') < strpos($this->ipath, '/')) + ) + ) + ) + { + return false; + } + + return true; + } + + /** + * Set the entire IRI. Returns true on success, false on failure (if there + * are any invalid characters). + * + * @param string $iri + * @return bool + */ + public function set_iri($iri) + { + static $cache; + if (!$cache) + { + $cache = array(); + } + + if ($iri === null) + { + return true; + } + elseif (isset($cache[$iri])) + { + list($this->scheme, + $this->iuserinfo, + $this->ihost, + $this->port, + $this->ipath, + $this->iquery, + $this->ifragment, + $return) = $cache[$iri]; + return $return; + } + else + { + $parsed = $this->parse_iri((string) $iri); + if (!$parsed) + { + return false; + } + + $return = $this->set_scheme($parsed['scheme']) + && $this->set_authority($parsed['authority']) + && $this->set_path($parsed['path']) + && $this->set_query($parsed['query']) + && $this->set_fragment($parsed['fragment']); + + $cache[$iri] = array($this->scheme, + $this->iuserinfo, + $this->ihost, + $this->port, + $this->ipath, + $this->iquery, + $this->ifragment, + $return); + return $return; + } + } + + /** + * Set the scheme. Returns true on success, false on failure (if there are + * any invalid characters). + * + * @param string $scheme + * @return bool + */ + public function set_scheme($scheme) + { + if ($scheme === null) + { + $this->scheme = null; + } + elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme)) + { + $this->scheme = null; + return false; + } + else + { + $this->scheme = strtolower($scheme); + } + return true; + } + + /** + * Set the authority. Returns true on success, false on failure (if there are + * any invalid characters). + * + * @param string $authority + * @return bool + */ + public function set_authority($authority) + { + static $cache; + if (!$cache) + $cache = array(); + + if ($authority === null) + { + $this->iuserinfo = null; + $this->ihost = null; + $this->port = null; + return true; + } + elseif (isset($cache[$authority])) + { + list($this->iuserinfo, + $this->ihost, + $this->port, + $return) = $cache[$authority]; + + return $return; + } + else + { + $remaining = $authority; + if (($iuserinfo_end = strrpos($remaining, '@')) !== false) + { + $iuserinfo = substr($remaining, 0, $iuserinfo_end); + $remaining = substr($remaining, $iuserinfo_end + 1); + } + else + { + $iuserinfo = null; + } + if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false) + { + if (($port = substr($remaining, $port_start + 1)) === false) + { + $port = null; + } + $remaining = substr($remaining, 0, $port_start); + } + else + { + $port = null; + } + + $return = $this->set_userinfo($iuserinfo) && + $this->set_host($remaining) && + $this->set_port($port); + + $cache[$authority] = array($this->iuserinfo, + $this->ihost, + $this->port, + $return); + + return $return; + } + } + + /** + * Set the iuserinfo. + * + * @param string $iuserinfo + * @return bool + */ + public function set_userinfo($iuserinfo) + { + if ($iuserinfo === null) + { + $this->iuserinfo = null; + } + else + { + $this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:'); + $this->scheme_normalization(); + } + + return true; + } + + /** + * Set the ihost. Returns true on success, false on failure (if there are + * any invalid characters). + * + * @param string $ihost + * @return bool + */ + public function set_host($ihost) + { + if ($ihost === null) + { + $this->ihost = null; + return true; + } + elseif (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']') + { + if (SimplePie_Net_IPv6::check_ipv6(substr($ihost, 1, -1))) + { + $this->ihost = '[' . SimplePie_Net_IPv6::compress(substr($ihost, 1, -1)) . ']'; + } + else + { + $this->ihost = null; + return false; + } + } + else + { + $ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;='); + + // Lowercase, but ignore pct-encoded sections (as they should + // remain uppercase). This must be done after the previous step + // as that can add unescaped characters. + $position = 0; + $strlen = strlen($ihost); + while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen) + { + if ($ihost[$position] === '%') + { + $position += 3; + } + else + { + $ihost[$position] = strtolower($ihost[$position]); + $position++; + } + } + + $this->ihost = $ihost; + } + + $this->scheme_normalization(); + + return true; + } + + /** + * Set the port. Returns true on success, false on failure (if there are + * any invalid characters). + * + * @param string $port + * @return bool + */ + public function set_port($port) + { + if ($port === null) + { + $this->port = null; + return true; + } + elseif (strspn($port, '0123456789') === strlen($port)) + { + $this->port = (int) $port; + $this->scheme_normalization(); + return true; + } + else + { + $this->port = null; + return false; + } + } + + /** + * Set the ipath. + * + * @param string $ipath + * @return bool + */ + public function set_path($ipath) + { + static $cache; + if (!$cache) + { + $cache = array(); + } + + $ipath = (string) $ipath; + + if (isset($cache[$ipath])) + { + $this->ipath = $cache[$ipath][(int) ($this->scheme !== null)]; + } + else + { + $valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/'); + $removed = $this->remove_dot_segments($valid); + + $cache[$ipath] = array($valid, $removed); + $this->ipath = ($this->scheme !== null) ? $removed : $valid; + } + + $this->scheme_normalization(); + return true; + } + + /** + * Set the iquery. + * + * @param string $iquery + * @return bool + */ + public function set_query($iquery) + { + if ($iquery === null) + { + $this->iquery = null; + } + else + { + $this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true); + $this->scheme_normalization(); + } + return true; + } + + /** + * Set the ifragment. + * + * @param string $ifragment + * @return bool + */ + public function set_fragment($ifragment) + { + if ($ifragment === null) + { + $this->ifragment = null; + } + else + { + $this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?'); + $this->scheme_normalization(); + } + return true; + } + + /** + * Convert an IRI to a URI (or parts thereof) + * + * @return string + */ + public function to_uri($string) + { + static $non_ascii; + if (!$non_ascii) + { + $non_ascii = implode('', range("\x80", "\xFF")); + } + + $position = 0; + $strlen = strlen($string); + while (($position += strcspn($string, $non_ascii, $position)) < $strlen) + { + $string = substr_replace($string, sprintf('%%%02X', ord($string[$position])), $position, 1); + $position += 3; + $strlen += 2; + } + + return $string; + } + + /** + * Get the complete IRI + * + * @return string + */ + public function get_iri() + { + if (!$this->is_valid()) + { + return false; + } + + $iri = ''; + if ($this->scheme !== null) + { + $iri .= $this->scheme . ':'; + } + if (($iauthority = $this->get_iauthority()) !== null) + { + $iri .= '//' . $iauthority; + } + if ($this->ipath !== '') + { + $iri .= $this->ipath; + } + elseif (!empty($this->normalization[$this->scheme]['ipath']) && $iauthority !== null && $iauthority !== '') + { + $iri .= $this->normalization[$this->scheme]['ipath']; + } + if ($this->iquery !== null) + { + $iri .= '?' . $this->iquery; + } + if ($this->ifragment !== null) + { + $iri .= '#' . $this->ifragment; + } + + return $iri; + } + + /** + * Get the complete URI + * + * @return string + */ + public function get_uri() + { + return $this->to_uri($this->get_iri()); + } + + /** + * Get the complete iauthority + * + * @return string + */ + protected function get_iauthority() + { + if ($this->iuserinfo !== null || $this->ihost !== null || $this->port !== null) + { + $iauthority = ''; + if ($this->iuserinfo !== null) + { + $iauthority .= $this->iuserinfo . '@'; + } + if ($this->ihost !== null) + { + $iauthority .= $this->ihost; + } + if ($this->port !== null) + { + $iauthority .= ':' . $this->port; + } + return $iauthority; + } + else + { + return null; + } + } + + /** + * Get the complete authority + * + * @return string + */ + protected function get_authority() + { + $iauthority = $this->get_iauthority(); + if (is_string($iauthority)) + return $this->to_uri($iauthority); + else + return $iauthority; + } +} diff --git a/src/wp-includes/SimplePie/Item.php b/src/wp-includes/SimplePie/Item.php new file mode 100644 index 0000000..a77574b --- /dev/null +++ b/src/wp-includes/SimplePie/Item.php @@ -0,0 +1,2964 @@ +feed = $feed; + $this->data = $data; + } + + /** + * Set the registry handler + * + * This is usually used by {@see SimplePie_Registry::create} + * + * @since 1.3 + * @param SimplePie_Registry $registry + */ + public function set_registry(SimplePie_Registry $registry) + { + $this->registry = $registry; + } + + /** + * Get a string representation of the item + * + * @return string + */ + public function __toString() + { + return md5(serialize($this->data)); + } + + /** + * Remove items that link back to this before destroying this object + */ + public function __destruct() + { + if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode')) + { + unset($this->feed); + } + } + + /** + * Get data for an item-level element + * + * This method allows you to get access to ANY element/attribute that is a + * sub-element of the item/entry tag. + * + * See {@see SimplePie::get_feed_tags()} for a description of the return value + * + * @since 1.0 + * @see http://simplepie.org/wiki/faq/supported_xml_namespaces + * @param string $namespace The URL of the XML namespace of the elements you're trying to access + * @param string $tag Tag name + * @return array + */ + public function get_item_tags($namespace, $tag) + { + if (isset($this->data['child'][$namespace][$tag])) + { + return $this->data['child'][$namespace][$tag]; + } + else + { + return null; + } + } + + /** + * Get the base URL value from the parent feed + * + * Uses `` + * + * @param array $element + * @return string + */ + public function get_base($element = array()) + { + return $this->feed->get_base($element); + } + + /** + * Sanitize feed data + * + * @access private + * @see SimplePie::sanitize() + * @param string $data Data to sanitize + * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants + * @param string $base Base URL to resolve URLs against + * @return string Sanitized data + */ + public function sanitize($data, $type, $base = '') + { + return $this->feed->sanitize($data, $type, $base); + } + + /** + * Get the parent feed + * + * Note: this may not work as you think for multifeeds! + * + * @link http://simplepie.org/faq/typical_multifeed_gotchas#missing_data_from_feed + * @since 1.0 + * @return SimplePie + */ + public function get_feed() + { + return $this->feed; + } + + /** + * Get the unique identifier for the item + * + * This is usually used when writing code to check for new items in a feed. + * + * Uses ``, ``, `` or the `about` attribute + * for RDF. If none of these are supplied (or `$hash` is true), creates an + * MD5 hash based on the permalink and title. If either of those are not + * supplied, creates a hash based on the full feed data. + * + * @since Beta 2 + * @param boolean $hash Should we force using a hash instead of the supplied ID? + * @return string + */ + public function get_id($hash = false) + { + if (!$hash) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'])) + { + return $this->sanitize($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (($return = $this->get_permalink()) !== null) + { + return $return; + } + elseif (($return = $this->get_title()) !== null) + { + return $return; + } + } + if ($this->get_permalink() !== null || $this->get_title() !== null) + { + return md5($this->get_permalink() . $this->get_title()); + } + else + { + return md5(serialize($this->data)); + } + } + + /** + * Get the title of the item + * + * Uses ``, `` or `<dc:title>` + * + * @since Beta 2 (previously called `get_item_title` since 0.8) + * @return string|null + */ + public function get_title() + { + if (!isset($this->data['title'])) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $this->data['title'] = null; + } + } + return $this->data['title']; + } + + /** + * Get the content for the item + * + * Prefers summaries over full content , but will return full content if a + * summary does not exist. + * + * To prefer full content instead, use {@see get_content} + * + * Uses `<atom:summary>`, `<description>`, `<dc:description>` or + * `<itunes:subtitle>` + * + * @since 0.8 + * @param boolean $description_only Should we avoid falling back to the content? + * @return string|null + */ + public function get_description($description_only = false) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML); + } + + elseif (!$description_only) + { + return $this->get_content(true); + } + else + { + return null; + } + } + + /** + * Get the content for the item + * + * Prefers full content over summaries, but will return a summary if full + * content does not exist. + * + * To prefer summaries instead, use {@see get_description} + * + * Uses `<atom:content>` or `<content:encoded>` (RSS 1.0 Content Module) + * + * @since 1.0 + * @param boolean $content_only Should we avoid falling back to the description? + * @return string|null + */ + public function get_content($content_only = false) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif (!$content_only) + { + return $this->get_description(true); + } + else + { + return null; + } + } + + /** + * Get a category for the item + * + * @since Beta 3 (previously called `get_categories()` since Beta 2) + * @param int $key The category that you want to return. Remember that arrays begin with 0, not 1 + * @return SimplePie_Category|null + */ + public function get_category($key = 0) + { + $categories = $this->get_categories(); + if (isset($categories[$key])) + { + return $categories[$key]; + } + else + { + return null; + } + } + + /** + * Get all categories for the item + * + * Uses `<atom:category>`, `<category>` or `<dc:subject>` + * + * @since Beta 3 + * @return array|null List of {@see SimplePie_Category} objects + */ + public function get_categories() + { + $categories = array(); + + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['attribs']['']['term'])) + { + $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) + { + // This is really the label, but keep this as the term also for BC. + // Label will also work on retrieving because that falls back to term. + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + if (isset($category['attribs']['']['domain'])) + { + $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = null; + } + $categories[] = $this->registry->create('Category', array($term, $scheme, null)); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) + { + $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) + { + $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + + if (!empty($categories)) + { + return array_unique($categories); + } + else + { + return null; + } + } + + /** + * Get an author for the item + * + * @since Beta 2 + * @param int $key The author that you want to return. Remember that arrays begin with 0, not 1 + * @return SimplePie_Author|null + */ + public function get_author($key = 0) + { + $authors = $this->get_authors(); + if (isset($authors[$key])) + { + return $authors[$key]; + } + else + { + return null; + } + } + + /** + * Get a contributor for the item + * + * @since 1.1 + * @param int $key The contrbutor that you want to return. Remember that arrays begin with 0, not 1 + * @return SimplePie_Author|null + */ + public function get_contributor($key = 0) + { + $contributors = $this->get_contributors(); + if (isset($contributors[$key])) + { + return $contributors[$key]; + } + else + { + return null; + } + } + + /** + * Get all contributors for the item + * + * Uses `<atom:contributor>` + * + * @since 1.1 + * @return array|null List of {@see SimplePie_Author} objects + */ + public function get_contributors() + { + $contributors = array(); + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) + { + $name = null; + $uri = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $contributors[] = $this->registry->create('Author', array($name, $uri, $email)); + } + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) + { + $name = null; + $url = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $contributors[] = $this->registry->create('Author', array($name, $url, $email)); + } + } + + if (!empty($contributors)) + { + return array_unique($contributors); + } + else + { + return null; + } + } + + /** + * Get all authors for the item + * + * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>` + * + * @since Beta 2 + * @return array|null List of {@see SimplePie_Author} objects + */ + public function get_authors() + { + $authors = array(); + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) + { + $name = null; + $uri = null; + $email = null; + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $authors[] = $this->registry->create('Author', array($name, $uri, $email)); + } + } + if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) + { + $name = null; + $url = null; + $email = null; + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $authors[] = $this->registry->create('Author', array($name, $url, $email)); + } + } + if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'author')) + { + $authors[] = $this->registry->create('Author', array(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT))); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) + { + $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) + { + $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) + { + $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + + if (!empty($authors)) + { + return array_unique($authors); + } + elseif (($source = $this->get_source()) && ($authors = $source->get_authors())) + { + return $authors; + } + elseif ($authors = $this->feed->get_authors()) + { + return $authors; + } + else + { + return null; + } + } + + /** + * Get the copyright info for the item + * + * Uses `<atom:rights>` or `<dc:rights>` + * + * @since 1.1 + * @return string + */ + public function get_copyright() + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + /** + * Get the posting date/time for the item + * + * Uses `<atom:published>`, `<atom:updated>`, `<atom:issued>`, + * `<atom:modified>`, `<pubDate>` or `<dc:date>` + * + * Note: obeys PHP's timezone setting. To get a UTC date/time, use + * {@see get_gmdate} + * + * @since Beta 2 (previously called `get_item_date` since 0.8) + * + * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data) + * @return int|string|null + */ + public function get_date($date_format = 'j F Y, g:i a') + { + if (!isset($this->data['date'])) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'pubDate')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + + if (!empty($this->data['date']['raw'])) + { + $parser = $this->registry->call('Parse_Date', 'get'); + $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']); + } + else + { + $this->data['date'] = null; + } + } + if ($this->data['date']) + { + $date_format = (string) $date_format; + switch ($date_format) + { + case '': + return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT); + + case 'U': + return $this->data['date']['parsed']; + + default: + return date($date_format, $this->data['date']['parsed']); + } + } + else + { + return null; + } + } + + /** + * Get the update date/time for the item + * + * Uses `<atom:updated>` + * + * Note: obeys PHP's timezone setting. To get a UTC date/time, use + * {@see get_gmdate} + * + * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data) + * @return int|string|null + */ + public function get_updated_date($date_format = 'j F Y, g:i a') + { + if (!isset($this->data['updated'])) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated')) + { + $this->data['updated']['raw'] = $return[0]['data']; + } + + if (!empty($this->data['updated']['raw'])) + { + $parser = $this->registry->call('Parse_Date', 'get'); + $this->data['updated']['parsed'] = $parser->parse($this->data['date']['raw']); + } + else + { + $this->data['updated'] = null; + } + } + if ($this->data['updated']) + { + $date_format = (string) $date_format; + switch ($date_format) + { + case '': + return $this->sanitize($this->data['updated']['raw'], SIMPLEPIE_CONSTRUCT_TEXT); + + case 'U': + return $this->data['updated']['parsed']; + + default: + return date($date_format, $this->data['updated']['parsed']); + } + } + else + { + return null; + } + } + + /** + * Get the localized posting date/time for the item + * + * Returns the date formatted in the localized language. To display in + * languages other than the server's default, you need to change the locale + * with {@link http://php.net/setlocale setlocale()}. The available + * localizations depend on which ones are installed on your web server. + * + * @since 1.0 + * + * @param string $date_format Supports any PHP date format from {@see http://php.net/strftime} (empty for the raw data) + * @return int|string|null + */ + public function get_local_date($date_format = '%c') + { + if (!$date_format) + { + return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (($date = $this->get_date('U')) !== null && $date !== false) + { + return strftime($date_format, $date); + } + else + { + return null; + } + } + + /** + * Get the posting date/time for the item (UTC time) + * + * @see get_date + * @param string $date_format Supports any PHP date format from {@see http://php.net/date} + * @return int|string|null + */ + public function get_gmdate($date_format = 'j F Y, g:i a') + { + $date = $this->get_date('U'); + if ($date === null) + { + return null; + } + + return gmdate($date_format, $date); + } + + /** + * Get the update date/time for the item (UTC time) + * + * @see get_updated_date + * @param string $date_format Supports any PHP date format from {@see http://php.net/date} + * @return int|string|null + */ + public function get_updated_gmdate($date_format = 'j F Y, g:i a') + { + $date = $this->get_updated_date('U'); + if ($date === null) + { + return null; + } + + return gmdate($date_format, $date); + } + + /** + * Get the permalink for the item + * + * Returns the first link available with a relationship of "alternate". + * Identical to {@see get_link()} with key 0 + * + * @see get_link + * @since 0.8 + * @return string|null Permalink URL + */ + public function get_permalink() + { + $link = $this->get_link(); + $enclosure = $this->get_enclosure(0); + if ($link !== null) + { + return $link; + } + elseif ($enclosure !== null) + { + return $enclosure->get_link(); + } + else + { + return null; + } + } + + /** + * Get a single link for the item + * + * @since Beta 3 + * @param int $key The link that you want to return. Remember that arrays begin with 0, not 1 + * @param string $rel The relationship of the link to return + * @return string|null Link URL + */ + public function get_link($key = 0, $rel = 'alternate') + { + $links = $this->get_links($rel); + if ($links[$key] !== null) + { + return $links[$key]; + } + else + { + return null; + } + } + + /** + * Get all links for the item + * + * Uses `<atom:link>`, `<link>` or `<guid>` + * + * @since Beta 2 + * @param string $rel The relationship of links to return + * @return array|null Links found for the item (strings) + */ + public function get_links($rel = 'alternate') + { + if (!isset($this->data['links'])) + { + $this->data['links'] = array(); + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + + } + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + } + } + if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid')) + { + if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) === 'true') + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + } + + $keys = array_keys($this->data['links']); + foreach ($keys as $key) + { + if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key))) + { + if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); + $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; + } + else + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; + } + } + elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) + { + $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; + } + $this->data['links'][$key] = array_unique($this->data['links'][$key]); + } + } + if (isset($this->data['links'][$rel])) + { + return $this->data['links'][$rel]; + } + else + { + return null; + } + } + + /** + * Get an enclosure from the item + * + * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS. + * + * @since Beta 2 + * @todo Add ability to prefer one type of content over another (in a media group). + * @param int $key The enclosure that you want to return. Remember that arrays begin with 0, not 1 + * @return SimplePie_Enclosure|null + */ + public function get_enclosure($key = 0, $prefer = null) + { + $enclosures = $this->get_enclosures(); + if (isset($enclosures[$key])) + { + return $enclosures[$key]; + } + else + { + return null; + } + } + + /** + * Get all available enclosures (podcasts, etc.) + * + * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS. + * + * At this point, we're pretty much assuming that all enclosures for an item + * are the same content. Anything else is too complicated to + * properly support. + * + * @since Beta 2 + * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4). + * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists). + * @return array|null List of SimplePie_Enclosure items + */ + public function get_enclosures() + { + if (!isset($this->data['enclosures'])) + { + $this->data['enclosures'] = array(); + + // Elements + $captions_parent = null; + $categories_parent = null; + $copyrights_parent = null; + $credits_parent = null; + $description_parent = null; + $duration_parent = null; + $hashes_parent = null; + $keywords_parent = null; + $player_parent = null; + $ratings_parent = null; + $restrictions_parent = null; + $thumbnails_parent = null; + $title_parent = null; + + // Let's do the channel and item-level ones first, and just re-use them if we need to. + $parent = $this->get_feed(); + + // CAPTIONS + if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text')) + { + foreach ($captions as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions_parent[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text)); + } + } + elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text')) + { + foreach ($captions as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions_parent[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text)); + } + } + if (is_array($captions_parent)) + { + $captions_parent = array_values(array_unique($captions_parent)); + } + + // CATEGORIES + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label)); + } + foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label)); + } + foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category) + { + $term = null; + $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd'; + $label = null; + if (isset($category['attribs']['']['text'])) + { + $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label)); + + if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'])) + { + foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory) + { + if (isset($subcategory['attribs']['']['text'])) + { + $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label)); + } + } + } + if (is_array($categories_parent)) + { + $categories_parent = array_values(array_unique($categories_parent)); + } + + // COPYRIGHT + if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright')) + { + $copyright_url = null; + $copyright_label = null; + if (isset($copyright[0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($copyright[0]['data'])) + { + $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights_parent = $this->registry->create('Copyright', array($copyright_url, $copyright_label)); + } + elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright')) + { + $copyright_url = null; + $copyright_label = null; + if (isset($copyright[0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($copyright[0]['data'])) + { + $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights_parent = $this->registry->create('Copyright', array($copyright_url, $copyright_label)); + } + + // CREDITS + if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit')) + { + foreach ($credits as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits_parent[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name)); + } + } + elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit')) + { + foreach ($credits as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits_parent[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name)); + } + } + if (is_array($credits_parent)) + { + $credits_parent = array_values(array_unique($credits_parent)); + } + + // DESCRIPTION + if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description')) + { + if (isset($description_parent[0]['data'])) + { + $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + } + elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description')) + { + if (isset($description_parent[0]['data'])) + { + $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + } + + // DURATION + if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration')) + { + $seconds = null; + $minutes = null; + $hours = null; + if (isset($duration_parent[0]['data'])) + { + $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + if (sizeof($temp) > 0) + { + $seconds = (int) array_pop($temp); + } + if (sizeof($temp) > 0) + { + $minutes = (int) array_pop($temp); + $seconds += $minutes * 60; + } + if (sizeof($temp) > 0) + { + $hours = (int) array_pop($temp); + $seconds += $hours * 3600; + } + unset($temp); + $duration_parent = $seconds; + } + } + + // HASHES + if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash')) + { + foreach ($hashes_iterator as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes_parent[] = $algo.':'.$value; + } + } + elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash')) + { + foreach ($hashes_iterator as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes_parent[] = $algo.':'.$value; + } + } + if (is_array($hashes_parent)) + { + $hashes_parent = array_values(array_unique($hashes_parent)); + } + + // KEYWORDS + if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords')) + { + if (isset($keywords[0]['data'])) + { + $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords_parent[] = trim($word); + } + } + unset($temp); + } + elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords')) + { + if (isset($keywords[0]['data'])) + { + $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords_parent[] = trim($word); + } + } + unset($temp); + } + elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords')) + { + if (isset($keywords[0]['data'])) + { + $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords_parent[] = trim($word); + } + } + unset($temp); + } + elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords')) + { + if (isset($keywords[0]['data'])) + { + $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords_parent[] = trim($word); + } + } + unset($temp); + } + if (is_array($keywords_parent)) + { + $keywords_parent = array_values(array_unique($keywords_parent)); + } + + // PLAYER + if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player')) + { + if (isset($player_parent[0]['attribs']['']['url'])) + { + $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + } + elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player')) + { + if (isset($player_parent[0]['attribs']['']['url'])) + { + $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + } + + // RATINGS + if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating')) + { + foreach ($ratings as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); + } + } + elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit')) + { + foreach ($ratings as $rating) + { + $rating_scheme = 'urn:itunes'; + $rating_value = null; + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); + } + } + elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating')) + { + foreach ($ratings as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); + } + } + elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit')) + { + foreach ($ratings as $rating) + { + $rating_scheme = 'urn:itunes'; + $rating_value = null; + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); + } + } + if (is_array($ratings_parent)) + { + $ratings_parent = array_values(array_unique($ratings_parent)); + } + + // RESTRICTIONS + if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction')) + { + foreach ($restrictions as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); + } + } + elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block')) + { + foreach ($restrictions as $restriction) + { + $restriction_relationship = 'allow'; + $restriction_type = null; + $restriction_value = 'itunes'; + if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') + { + $restriction_relationship = 'deny'; + } + $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); + } + } + elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction')) + { + foreach ($restrictions as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); + } + } + elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block')) + { + foreach ($restrictions as $restriction) + { + $restriction_relationship = 'allow'; + $restriction_type = null; + $restriction_value = 'itunes'; + if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') + { + $restriction_relationship = 'deny'; + } + $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); + } + } + if (is_array($restrictions_parent)) + { + $restrictions_parent = array_values(array_unique($restrictions_parent)); + } + else + { + $restrictions_parent = array(new SimplePie_Restriction('allow', null, 'default')); + } + + // THUMBNAILS + if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail')) + { + foreach ($thumbnails as $thumbnail) + { + if (isset($thumbnail['attribs']['']['url'])) + { + $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + } + } + elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail')) + { + foreach ($thumbnails as $thumbnail) + { + if (isset($thumbnail['attribs']['']['url'])) + { + $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + } + } + + // TITLES + if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title')) + { + if (isset($title_parent[0]['data'])) + { + $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + } + elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title')) + { + if (isset($title_parent[0]['data'])) + { + $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + } + + // Clear the memory + unset($parent); + + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + // Elements + $captions = null; + $categories = null; + $copyrights = null; + $credits = null; + $description = null; + $hashes = null; + $keywords = null; + $player = null; + $ratings = null; + $restrictions = null; + $thumbnails = null; + $title = null; + + // If we have media:group tags, loop through them. + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group) + { + if(isset($group['child']) && isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'])) + { + // If we have media:content tags, loop through them. + foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) + { + if (isset($content['attribs']['']['url'])) + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + // Elements + $captions = null; + $categories = null; + $copyrights = null; + $credits = null; + $description = null; + $hashes = null; + $keywords = null; + $player = null; + $ratings = null; + $restrictions = null; + $thumbnails = null; + $title = null; + + // Start checking the attributes of media:content + if (isset($content['attribs']['']['bitrate'])) + { + $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['channels'])) + { + $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['duration'])) + { + $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $duration = $duration_parent; + } + if (isset($content['attribs']['']['expression'])) + { + $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['framerate'])) + { + $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['height'])) + { + $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['lang'])) + { + $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['fileSize'])) + { + $length = ceil($content['attribs']['']['fileSize']); + } + if (isset($content['attribs']['']['medium'])) + { + $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['samplingrate'])) + { + $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['type'])) + { + $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['width'])) + { + $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + + // Checking the other optional media: elements. Priority: media:content, media:group, item, channel + + // CAPTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text)); + } + if (is_array($captions)) + { + $captions = array_values(array_unique($captions)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text)); + } + if (is_array($captions)) + { + $captions = array_values(array_unique($captions)); + } + } + else + { + $captions = $captions_parent; + } + + // CATEGORIES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) + { + foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); + } + } + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) + { + foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); + } + } + if (is_array($categories) && is_array($categories_parent)) + { + $categories = array_values(array_unique(array_merge($categories, $categories_parent))); + } + elseif (is_array($categories)) + { + $categories = array_values(array_unique($categories)); + } + elseif (is_array($categories_parent)) + { + $categories = array_values(array_unique($categories_parent)); + } + + // COPYRIGHTS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) + { + $copyright_url = null; + $copyright_label = null; + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) + { + $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label)); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) + { + $copyright_url = null; + $copyright_label = null; + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) + { + $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label)); + } + else + { + $copyrights = $copyrights_parent; + } + + // CREDITS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name)); + } + if (is_array($credits)) + { + $credits = array_values(array_unique($credits)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name)); + } + if (is_array($credits)) + { + $credits = array_values(array_unique($credits)); + } + } + else + { + $credits = $credits_parent; + } + + // DESCRIPTION + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) + { + $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) + { + $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $description = $description_parent; + } + + // HASHES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes[] = $algo.':'.$value; + } + if (is_array($hashes)) + { + $hashes = array_values(array_unique($hashes)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes[] = $algo.':'.$value; + } + if (is_array($hashes)) + { + $hashes = array_values(array_unique($hashes)); + } + } + else + { + $hashes = $hashes_parent; + } + + // KEYWORDS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) + { + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) + { + $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords[] = trim($word); + } + unset($temp); + } + if (is_array($keywords)) + { + $keywords = array_values(array_unique($keywords)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) + { + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) + { + $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords[] = trim($word); + } + unset($temp); + } + if (is_array($keywords)) + { + $keywords = array_values(array_unique($keywords)); + } + } + else + { + $keywords = $keywords_parent; + } + + // PLAYER + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) + { + $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) + { + $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + $player = $player_parent; + } + + // RATINGS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); + } + if (is_array($ratings)) + { + $ratings = array_values(array_unique($ratings)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); + } + if (is_array($ratings)) + { + $ratings = array_values(array_unique($ratings)); + } + } + else + { + $ratings = $ratings_parent; + } + + // RESTRICTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); + } + if (is_array($restrictions)) + { + $restrictions = array_values(array_unique($restrictions)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); + } + if (is_array($restrictions)) + { + $restrictions = array_values(array_unique($restrictions)); + } + } + else + { + $restrictions = $restrictions_parent; + } + + // THUMBNAILS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) + { + $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + if (is_array($thumbnails)) + { + $thumbnails = array_values(array_unique($thumbnails)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) + { + $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + if (is_array($thumbnails)) + { + $thumbnails = array_values(array_unique($thumbnails)); + } + } + else + { + $thumbnails = $thumbnails_parent; + } + + // TITLES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) + { + $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) + { + $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $title = $title_parent; + } + + $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width)); + } + } + } + } + + // If we have standalone media:content tags, loop through them. + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'])) + { + foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) + { + if (isset($content['attribs']['']['url']) || isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + // Elements + $captions = null; + $categories = null; + $copyrights = null; + $credits = null; + $description = null; + $hashes = null; + $keywords = null; + $player = null; + $ratings = null; + $restrictions = null; + $thumbnails = null; + $title = null; + + // Start checking the attributes of media:content + if (isset($content['attribs']['']['bitrate'])) + { + $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['channels'])) + { + $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['duration'])) + { + $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $duration = $duration_parent; + } + if (isset($content['attribs']['']['expression'])) + { + $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['framerate'])) + { + $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['height'])) + { + $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['lang'])) + { + $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['fileSize'])) + { + $length = ceil($content['attribs']['']['fileSize']); + } + if (isset($content['attribs']['']['medium'])) + { + $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['samplingrate'])) + { + $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['type'])) + { + $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['width'])) + { + $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['url'])) + { + $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + // Checking the other optional media: elements. Priority: media:content, media:group, item, channel + + // CAPTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text)); + } + if (is_array($captions)) + { + $captions = array_values(array_unique($captions)); + } + } + else + { + $captions = $captions_parent; + } + + // CATEGORIES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) + { + foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); + } + } + if (is_array($categories) && is_array($categories_parent)) + { + $categories = array_values(array_unique(array_merge($categories, $categories_parent))); + } + elseif (is_array($categories)) + { + $categories = array_values(array_unique($categories)); + } + elseif (is_array($categories_parent)) + { + $categories = array_values(array_unique($categories_parent)); + } + else + { + $categories = null; + } + + // COPYRIGHTS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) + { + $copyright_url = null; + $copyright_label = null; + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) + { + $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label)); + } + else + { + $copyrights = $copyrights_parent; + } + + // CREDITS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name)); + } + if (is_array($credits)) + { + $credits = array_values(array_unique($credits)); + } + } + else + { + $credits = $credits_parent; + } + + // DESCRIPTION + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) + { + $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $description = $description_parent; + } + + // HASHES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes[] = $algo.':'.$value; + } + if (is_array($hashes)) + { + $hashes = array_values(array_unique($hashes)); + } + } + else + { + $hashes = $hashes_parent; + } + + // KEYWORDS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) + { + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) + { + $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords[] = trim($word); + } + unset($temp); + } + if (is_array($keywords)) + { + $keywords = array_values(array_unique($keywords)); + } + } + else + { + $keywords = $keywords_parent; + } + + // PLAYER + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) + { + $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + $player = $player_parent; + } + + // RATINGS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); + } + if (is_array($ratings)) + { + $ratings = array_values(array_unique($ratings)); + } + } + else + { + $ratings = $ratings_parent; + } + + // RESTRICTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); + } + if (is_array($restrictions)) + { + $restrictions = array_values(array_unique($restrictions)); + } + } + else + { + $restrictions = $restrictions_parent; + } + + // THUMBNAILS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) + { + $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + if (is_array($thumbnails)) + { + $thumbnails = array_values(array_unique($thumbnails)); + } + } + else + { + $thumbnails = $thumbnails_parent; + } + + // TITLES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) + { + $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $title = $title_parent; + } + + $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width)); + } + } + } + + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) + { + if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + if (isset($link['attribs']['']['type'])) + { + $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($link['attribs']['']['length'])) + { + $length = ceil($link['attribs']['']['length']); + } + + // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor + $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width)); + } + } + + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) + { + if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + if (isset($link['attribs']['']['type'])) + { + $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($link['attribs']['']['length'])) + { + $length = ceil($link['attribs']['']['length']); + } + + // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor + $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width)); + } + } + + if ($enclosure = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'enclosure')) + { + if (isset($enclosure[0]['attribs']['']['url'])) + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0])); + if (isset($enclosure[0]['attribs']['']['type'])) + { + $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($enclosure[0]['attribs']['']['length'])) + { + $length = ceil($enclosure[0]['attribs']['']['length']); + } + + // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor + $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width)); + } + } + + if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width)) + { + // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor + $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width)); + } + + $this->data['enclosures'] = array_values(array_unique($this->data['enclosures'])); + } + if (!empty($this->data['enclosures'])) + { + return $this->data['enclosures']; + } + else + { + return null; + } + } + + /** + * Get the latitude coordinates for the item + * + * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications + * + * Uses `<geo:lat>` or `<georss:point>` + * + * @since 1.0 + * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo + * @link http://www.georss.org/ GeoRSS + * @return string|null + */ + public function get_latitude() + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) + { + return (float) $match[1]; + } + else + { + return null; + } + } + + /** + * Get the longitude coordinates for the item + * + * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications + * + * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>` + * + * @since 1.0 + * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo + * @link http://www.georss.org/ GeoRSS + * @return string|null + */ + public function get_longitude() + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) + { + return (float) $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) + { + return (float) $match[2]; + } + else + { + return null; + } + } + + /** + * Get the `<atom:source>` for the item + * + * @since 1.1 + * @return SimplePie_Source|null + */ + public function get_source() + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'source')) + { + return $this->registry->create('Source', array($this, $return[0])); + } + else + { + return null; + } + } +} + diff --git a/src/wp-includes/SimplePie/Locator.php b/src/wp-includes/SimplePie/Locator.php new file mode 100644 index 0000000..da89514 --- /dev/null +++ b/src/wp-includes/SimplePie/Locator.php @@ -0,0 +1,372 @@ +<?php +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + +/** + * Used for feed auto-discovery + * + * + * This class can be overloaded with {@see SimplePie::set_locator_class()} + * + * @package SimplePie + */ +class SimplePie_Locator +{ + var $useragent; + var $timeout; + var $file; + var $local = array(); + var $elsewhere = array(); + var $cached_entities = array(); + var $http_base; + var $base; + var $base_location = 0; + var $checked_feeds = 0; + var $max_checked_feeds = 10; + protected $registry; + + public function __construct(SimplePie_File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10) + { + $this->file = $file; + $this->useragent = $useragent; + $this->timeout = $timeout; + $this->max_checked_feeds = $max_checked_feeds; + + if (class_exists('DOMDocument')) + { + $this->dom = new DOMDocument(); + + set_error_handler(array('SimplePie_Misc', 'silence_errors')); + $this->dom->loadHTML($this->file->body); + restore_error_handler(); + } + else + { + $this->dom = null; + } + } + + public function set_registry(SimplePie_Registry $registry) + { + $this->registry = $registry; + } + + public function find($type = SIMPLEPIE_LOCATOR_ALL, &$working) + { + if ($this->is_feed($this->file)) + { + return $this->file; + } + + if ($this->file->method & SIMPLEPIE_FILE_SOURCE_REMOTE) + { + $sniffer = $this->registry->create('Content_Type_Sniffer', array($this->file)); + if ($sniffer->get_type() !== 'text/html') + { + return null; + } + } + + if ($type & ~SIMPLEPIE_LOCATOR_NONE) + { + $this->get_base(); + } + + if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery()) + { + return $working[0]; + } + + if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links()) + { + if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local)) + { + return $working; + } + + if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local)) + { + return $working; + } + + if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere)) + { + return $working; + } + + if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere)) + { + return $working; + } + } + return null; + } + + public function is_feed($file) + { + if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE) + { + $sniffer = $this->registry->create('Content_Type_Sniffer', array($file)); + $sniffed = $sniffer->get_type(); + if (in_array($sniffed, array('application/rss+xml', 'application/rdf+xml', 'text/rdf', 'application/atom+xml', 'text/xml', 'application/xml'))) + { + return true; + } + else + { + return false; + } + } + elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL) + { + return true; + } + else + { + return false; + } + } + + public function get_base() + { + if ($this->dom === null) + { + throw new SimplePie_Exception('DOMDocument not found, unable to use locator'); + } + $this->http_base = $this->file->url; + $this->base = $this->http_base; + $elements = $this->dom->getElementsByTagName('base'); + foreach ($elements as $element) + { + if ($element->hasAttribute('href')) + { + $base = $this->registry->call('Misc', 'absolutize_url', array(trim($element->getAttribute('href')), $this->http_base)); + if ($base === false) + { + continue; + } + $this->base = $base; + $this->base_location = method_exists($element, 'getLineNo') ? $element->getLineNo() : 0; + break; + } + } + } + + public function autodiscovery() + { + $done = array(); + $feeds = array(); + $feeds = array_merge($feeds, $this->search_elements_by_tag('link', $done, $feeds)); + $feeds = array_merge($feeds, $this->search_elements_by_tag('a', $done, $feeds)); + $feeds = array_merge($feeds, $this->search_elements_by_tag('area', $done, $feeds)); + + if (!empty($feeds)) + { + return array_values($feeds); + } + else + { + return null; + } + } + + protected function search_elements_by_tag($name, &$done, $feeds) + { + if ($this->dom === null) + { + throw new SimplePie_Exception('DOMDocument not found, unable to use locator'); + } + + $links = $this->dom->getElementsByTagName($name); + foreach ($links as $link) + { + if ($this->checked_feeds === $this->max_checked_feeds) + { + break; + } + if ($link->hasAttribute('href') && $link->hasAttribute('rel')) + { + $rel = array_unique($this->registry->call('Misc', 'space_seperated_tokens', array(strtolower($link->getAttribute('rel'))))); + $line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1; + + if ($this->base_location < $line) + { + $href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->base)); + } + else + { + $href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->http_base)); + } + if ($href === false) + { + continue; + } + + if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !in_array('stylesheet', $rel) && $link->hasAttribute('type') && in_array(strtolower($this->registry->call('Misc', 'parse_mime', array($link->getAttribute('type')))), array('application/rss+xml', 'application/atom+xml'))) && !isset($feeds[$href])) + { + $this->checked_feeds++; + $headers = array( + 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', + ); + $feed = $this->registry->create('File', array($href, $this->timeout, 5, $headers, $this->useragent)); + if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) + { + $feeds[$href] = $feed; + } + } + $done[] = $href; + } + } + + return $feeds; + } + + public function get_links() + { + if ($this->dom === null) + { + throw new SimplePie_Exception('DOMDocument not found, unable to use locator'); + } + + $links = $this->dom->getElementsByTagName('a'); + foreach ($links as $link) + { + if ($link->hasAttribute('href')) + { + $href = trim($link->getAttribute('href')); + $parsed = $this->registry->call('Misc', 'parse_url', array($href)); + if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme'])) + { + if (method_exists($link, 'getLineNo') && $this->base_location < $link->getLineNo()) + { + $href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->base)); + } + else + { + $href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->http_base)); + } + if ($href === false) + { + continue; + } + + $current = $this->registry->call('Misc', 'parse_url', array($this->file->url)); + + if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority']) + { + $this->local[] = $href; + } + else + { + $this->elsewhere[] = $href; + } + } + } + } + $this->local = array_unique($this->local); + $this->elsewhere = array_unique($this->elsewhere); + if (!empty($this->local) || !empty($this->elsewhere)) + { + return true; + } + return null; + } + + public function extension(&$array) + { + foreach ($array as $key => $value) + { + if ($this->checked_feeds === $this->max_checked_feeds) + { + break; + } + if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml'))) + { + $this->checked_feeds++; + + $headers = array( + 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', + ); + $feed = $this->registry->create('File', array($value, $this->timeout, 5, $headers, $this->useragent)); + if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) + { + return $feed; + } + else + { + unset($array[$key]); + } + } + } + return null; + } + + public function body(&$array) + { + foreach ($array as $key => $value) + { + if ($this->checked_feeds === $this->max_checked_feeds) + { + break; + } + if (preg_match('/(rss|rdf|atom|xml)/i', $value)) + { + $this->checked_feeds++; + $headers = array( + 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', + ); + $feed = $this->registry->create('File', array($value, $this->timeout, 5, null, $this->useragent)); + if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) + { + return $feed; + } + else + { + unset($array[$key]); + } + } + } + return null; + } +} + diff --git a/src/wp-includes/SimplePie/Misc.php b/src/wp-includes/SimplePie/Misc.php new file mode 100644 index 0000000..1c1b618 --- /dev/null +++ b/src/wp-includes/SimplePie/Misc.php @@ -0,0 +1,2247 @@ +<?php +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + +/** + * Miscellanous utilities + * + * @package SimplePie + */ +class SimplePie_Misc +{ + public static function time_hms($seconds) + { + $time = ''; + + $hours = floor($seconds / 3600); + $remainder = $seconds % 3600; + if ($hours > 0) + { + $time .= $hours.':'; + } + + $minutes = floor($remainder / 60); + $seconds = $remainder % 60; + if ($minutes < 10 && $hours > 0) + { + $minutes = '0' . $minutes; + } + if ($seconds < 10) + { + $seconds = '0' . $seconds; + } + + $time .= $minutes.':'; + $time .= $seconds; + + return $time; + } + + public static function absolutize_url($relative, $base) + { + $iri = SimplePie_IRI::absolutize(new SimplePie_IRI($base), $relative); + if ($iri === false) + { + return false; + } + return $iri->get_uri(); + } + + /** + * Get a HTML/XML element from a HTML string + * + * @deprecated Use DOMDocument instead (parsing HTML with regex is bad!) + * @param string $realname Element name (including namespace prefix if applicable) + * @param string $string HTML document + * @return array + */ + public static function get_element($realname, $string) + { + $return = array(); + $name = preg_quote($realname, '/'); + if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) + { + for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++) + { + $return[$i]['tag'] = $realname; + $return[$i]['full'] = $matches[$i][0][0]; + $return[$i]['offset'] = $matches[$i][0][1]; + if (strlen($matches[$i][3][0]) <= 2) + { + $return[$i]['self_closing'] = true; + } + else + { + $return[$i]['self_closing'] = false; + $return[$i]['content'] = $matches[$i][4][0]; + } + $return[$i]['attribs'] = array(); + if (isset($matches[$i][2][0]) && preg_match_all('/[\x09\x0A\x0B\x0C\x0D\x20]+([^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*)(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"([^"]*)"|\'([^\']*)\'|([^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?/', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER)) + { + for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++) + { + if (count($attribs[$j]) === 2) + { + $attribs[$j][2] = $attribs[$j][1]; + } + $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j])); + } + } + } + } + return $return; + } + + public static function element_implode($element) + { + $full = "<$element[tag]"; + foreach ($element['attribs'] as $key => $value) + { + $key = strtolower($key); + $full .= " $key=\"" . htmlspecialchars($value['data']) . '"'; + } + if ($element['self_closing']) + { + $full .= ' />'; + } + else + { + $full .= ">$element[content]</$element[tag]>"; + } + return $full; + } + + public static function error($message, $level, $file, $line) + { + if ((ini_get('error_reporting') & $level) > 0) + { + switch ($level) + { + case E_USER_ERROR: + $note = 'PHP Error'; + break; + case E_USER_WARNING: + $note = 'PHP Warning'; + break; + case E_USER_NOTICE: + $note = 'PHP Notice'; + break; + default: + $note = 'Unknown Error'; + break; + } + + $log_error = true; + if (!function_exists('error_log')) + { + $log_error = false; + } + + $log_file = @ini_get('error_log'); + if (!empty($log_file) && ('syslog' !== $log_file) && !@is_writable($log_file)) + { + $log_error = false; + } + + if ($log_error) + { + @error_log("$note: $message in $file on line $line", 0); + } + } + + return $message; + } + + public static function fix_protocol($url, $http = 1) + { + $url = SimplePie_Misc::normalize_url($url); + $parsed = SimplePie_Misc::parse_url($url); + if ($parsed['scheme'] !== '' && $parsed['scheme'] !== 'http' && $parsed['scheme'] !== 'https') + { + return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http); + } + + if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url)) + { + return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http); + } + + if ($http === 2 && $parsed['scheme'] !== '') + { + return "feed:$url"; + } + elseif ($http === 3 && strtolower($parsed['scheme']) === 'http') + { + return substr_replace($url, 'podcast', 0, 4); + } + elseif ($http === 4 && strtolower($parsed['scheme']) === 'http') + { + return substr_replace($url, 'itpc', 0, 4); + } + else + { + return $url; + } + } + + public static function parse_url($url) + { + $iri = new SimplePie_IRI($url); + return array( + 'scheme' => (string) $iri->scheme, + 'authority' => (string) $iri->authority, + 'path' => (string) $iri->path, + 'query' => (string) $iri->query, + 'fragment' => (string) $iri->fragment + ); + } + + public static function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '') + { + $iri = new SimplePie_IRI(''); + $iri->scheme = $scheme; + $iri->authority = $authority; + $iri->path = $path; + $iri->query = $query; + $iri->fragment = $fragment; + return $iri->get_uri(); + } + + public static function normalize_url($url) + { + $iri = new SimplePie_IRI($url); + return $iri->get_uri(); + } + + public static function percent_encoding_normalization($match) + { + $integer = hexdec($match[1]); + if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer === 0x2D || $integer === 0x2E || $integer === 0x5F || $integer === 0x7E) + { + return chr($integer); + } + else + { + return strtoupper($match[0]); + } + } + + /** + * Converts a Windows-1252 encoded string to a UTF-8 encoded string + * + * @static + * @param string $string Windows-1252 encoded string + * @return string UTF-8 encoded string + */ + public static function windows_1252_to_utf8($string) + { + static $convert_table = array("\x80" => "\xE2\x82\xAC", "\x81" => "\xEF\xBF\xBD", "\x82" => "\xE2\x80\x9A", "\x83" => "\xC6\x92", "\x84" => "\xE2\x80\x9E", "\x85" => "\xE2\x80\xA6", "\x86" => "\xE2\x80\xA0", "\x87" => "\xE2\x80\xA1", "\x88" => "\xCB\x86", "\x89" => "\xE2\x80\xB0", "\x8A" => "\xC5\xA0", "\x8B" => "\xE2\x80\xB9", "\x8C" => "\xC5\x92", "\x8D" => "\xEF\xBF\xBD", "\x8E" => "\xC5\xBD", "\x8F" => "\xEF\xBF\xBD", "\x90" => "\xEF\xBF\xBD", "\x91" => "\xE2\x80\x98", "\x92" => "\xE2\x80\x99", "\x93" => "\xE2\x80\x9C", "\x94" => "\xE2\x80\x9D", "\x95" => "\xE2\x80\xA2", "\x96" => "\xE2\x80\x93", "\x97" => "\xE2\x80\x94", "\x98" => "\xCB\x9C", "\x99" => "\xE2\x84\xA2", "\x9A" => "\xC5\xA1", "\x9B" => "\xE2\x80\xBA", "\x9C" => "\xC5\x93", "\x9D" => "\xEF\xBF\xBD", "\x9E" => "\xC5\xBE", "\x9F" => "\xC5\xB8", "\xA0" => "\xC2\xA0", "\xA1" => "\xC2\xA1", "\xA2" => "\xC2\xA2", "\xA3" => "\xC2\xA3", "\xA4" => "\xC2\xA4", "\xA5" => "\xC2\xA5", "\xA6" => "\xC2\xA6", "\xA7" => "\xC2\xA7", "\xA8" => "\xC2\xA8", "\xA9" => "\xC2\xA9", "\xAA" => "\xC2\xAA", "\xAB" => "\xC2\xAB", "\xAC" => "\xC2\xAC", "\xAD" => "\xC2\xAD", "\xAE" => "\xC2\xAE", "\xAF" => "\xC2\xAF", "\xB0" => "\xC2\xB0", "\xB1" => "\xC2\xB1", "\xB2" => "\xC2\xB2", "\xB3" => "\xC2\xB3", "\xB4" => "\xC2\xB4", "\xB5" => "\xC2\xB5", "\xB6" => "\xC2\xB6", "\xB7" => "\xC2\xB7", "\xB8" => "\xC2\xB8", "\xB9" => "\xC2\xB9", "\xBA" => "\xC2\xBA", "\xBB" => "\xC2\xBB", "\xBC" => "\xC2\xBC", "\xBD" => "\xC2\xBD", "\xBE" => "\xC2\xBE", "\xBF" => "\xC2\xBF", "\xC0" => "\xC3\x80", "\xC1" => "\xC3\x81", "\xC2" => "\xC3\x82", "\xC3" => "\xC3\x83", "\xC4" => "\xC3\x84", "\xC5" => "\xC3\x85", "\xC6" => "\xC3\x86", "\xC7" => "\xC3\x87", "\xC8" => "\xC3\x88", "\xC9" => "\xC3\x89", "\xCA" => "\xC3\x8A", "\xCB" => "\xC3\x8B", "\xCC" => "\xC3\x8C", "\xCD" => "\xC3\x8D", "\xCE" => "\xC3\x8E", "\xCF" => "\xC3\x8F", "\xD0" => "\xC3\x90", "\xD1" => "\xC3\x91", "\xD2" => "\xC3\x92", "\xD3" => "\xC3\x93", "\xD4" => "\xC3\x94", "\xD5" => "\xC3\x95", "\xD6" => "\xC3\x96", "\xD7" => "\xC3\x97", "\xD8" => "\xC3\x98", "\xD9" => "\xC3\x99", "\xDA" => "\xC3\x9A", "\xDB" => "\xC3\x9B", "\xDC" => "\xC3\x9C", "\xDD" => "\xC3\x9D", "\xDE" => "\xC3\x9E", "\xDF" => "\xC3\x9F", "\xE0" => "\xC3\xA0", "\xE1" => "\xC3\xA1", "\xE2" => "\xC3\xA2", "\xE3" => "\xC3\xA3", "\xE4" => "\xC3\xA4", "\xE5" => "\xC3\xA5", "\xE6" => "\xC3\xA6", "\xE7" => "\xC3\xA7", "\xE8" => "\xC3\xA8", "\xE9" => "\xC3\xA9", "\xEA" => "\xC3\xAA", "\xEB" => "\xC3\xAB", "\xEC" => "\xC3\xAC", "\xED" => "\xC3\xAD", "\xEE" => "\xC3\xAE", "\xEF" => "\xC3\xAF", "\xF0" => "\xC3\xB0", "\xF1" => "\xC3\xB1", "\xF2" => "\xC3\xB2", "\xF3" => "\xC3\xB3", "\xF4" => "\xC3\xB4", "\xF5" => "\xC3\xB5", "\xF6" => "\xC3\xB6", "\xF7" => "\xC3\xB7", "\xF8" => "\xC3\xB8", "\xF9" => "\xC3\xB9", "\xFA" => "\xC3\xBA", "\xFB" => "\xC3\xBB", "\xFC" => "\xC3\xBC", "\xFD" => "\xC3\xBD", "\xFE" => "\xC3\xBE", "\xFF" => "\xC3\xBF"); + + return strtr($string, $convert_table); + } + + /** + * Change a string from one encoding to another + * + * @param string $data Raw data in $input encoding + * @param string $input Encoding of $data + * @param string $output Encoding you want + * @return string|boolean False if we can't convert it + */ + public static function change_encoding($data, $input, $output) + { + $input = SimplePie_Misc::encoding($input); + $output = SimplePie_Misc::encoding($output); + + // We fail to fail on non US-ASCII bytes + if ($input === 'US-ASCII') + { + static $non_ascii_octects = ''; + if (!$non_ascii_octects) + { + for ($i = 0x80; $i <= 0xFF; $i++) + { + $non_ascii_octects .= chr($i); + } + } + $data = substr($data, 0, strcspn($data, $non_ascii_octects)); + } + + // This is first, as behaviour of this is completely predictable + if ($input === 'windows-1252' && $output === 'UTF-8') + { + return SimplePie_Misc::windows_1252_to_utf8($data); + } + // This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported). + elseif (function_exists('mb_convert_encoding') && ($return = SimplePie_Misc::change_encoding_mbstring($data, $input, $output))) + { + return $return; + } + // This is last, as behaviour of this varies with OS userland and PHP version + elseif (function_exists('iconv') && ($return = SimplePie_Misc::change_encoding_iconv($data, $input, $output))) + { + return $return; + } + // If we can't do anything, just fail + else + { + return false; + } + } + + protected static function change_encoding_mbstring($data, $input, $output) + { + if ($input === 'windows-949') + { + $input = 'EUC-KR'; + } + if ($output === 'windows-949') + { + $output = 'EUC-KR'; + } + if ($input === 'Windows-31J') + { + $input = 'SJIS'; + } + if ($output === 'Windows-31J') + { + $output = 'SJIS'; + } + + // Check that the encoding is supported + if (@mb_convert_encoding("\x80", 'UTF-16BE', $input) === "\x00\x80") + { + return false; + } + if (!in_array($input, mb_list_encodings())) + { + return false; + } + + // Let's do some conversion + if ($return = @mb_convert_encoding($data, $output, $input)) + { + return $return; + } + + return false; + } + + protected static function change_encoding_iconv($data, $input, $output) + { + return @iconv($input, $output, $data); + } + + /** + * Normalize an encoding name + * + * This is automatically generated by create.php + * + * To generate it, run `php create.php` on the command line, and copy the + * output to replace this function. + * + * @param string $charset Character set to standardise + * @return string Standardised name + */ + public static function encoding($charset) + { + // Normalization from UTS #22 + switch (strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\1', $charset))) + { + case 'adobestandardencoding': + case 'csadobestandardencoding': + return 'Adobe-Standard-Encoding'; + + case 'adobesymbolencoding': + case 'cshppsmath': + return 'Adobe-Symbol-Encoding'; + + case 'ami1251': + case 'amiga1251': + return 'Amiga-1251'; + + case 'ansix31101983': + case 'csat5001983': + case 'csiso99naplps': + case 'isoir99': + case 'naplps': + return 'ANSI_X3.110-1983'; + + case 'arabic7': + case 'asmo449': + case 'csiso89asmo449': + case 'iso9036': + case 'isoir89': + return 'ASMO_449'; + + case 'big5': + case 'csbig5': + return 'Big5'; + + case 'big5hkscs': + return 'Big5-HKSCS'; + + case 'bocu1': + case 'csbocu1': + return 'BOCU-1'; + + case 'brf': + case 'csbrf': + return 'BRF'; + + case 'bs4730': + case 'csiso4unitedkingdom': + case 'gb': + case 'iso646gb': + case 'isoir4': + case 'uk': + return 'BS_4730'; + + case 'bsviewdata': + case 'csiso47bsviewdata': + case 'isoir47': + return 'BS_viewdata'; + + case 'cesu8': + case 'cscesu8': + return 'CESU-8'; + + case 'ca': + case 'csa71': + case 'csaz243419851': + case 'csiso121canadian1': + case 'iso646ca': + case 'isoir121': + return 'CSA_Z243.4-1985-1'; + + case 'csa72': + case 'csaz243419852': + case 'csiso122canadian2': + case 'iso646ca2': + case 'isoir122': + return 'CSA_Z243.4-1985-2'; + + case 'csaz24341985gr': + case 'csiso123csaz24341985gr': + case 'isoir123': + return 'CSA_Z243.4-1985-gr'; + + case 'csiso139csn369103': + case 'csn369103': + case 'isoir139': + return 'CSN_369103'; + + case 'csdecmcs': + case 'dec': + case 'decmcs': + return 'DEC-MCS'; + + case 'csiso21german': + case 'de': + case 'din66003': + case 'iso646de': + case 'isoir21': + return 'DIN_66003'; + + case 'csdkus': + case 'dkus': + return 'dk-us'; + + case 'csiso646danish': + case 'dk': + case 'ds2089': + case 'iso646dk': + return 'DS_2089'; + + case 'csibmebcdicatde': + case 'ebcdicatde': + return 'EBCDIC-AT-DE'; + + case 'csebcdicatdea': + case 'ebcdicatdea': + return 'EBCDIC-AT-DE-A'; + + case 'csebcdiccafr': + case 'ebcdiccafr': + return 'EBCDIC-CA-FR'; + + case 'csebcdicdkno': + case 'ebcdicdkno': + return 'EBCDIC-DK-NO'; + + case 'csebcdicdknoa': + case 'ebcdicdknoa': + return 'EBCDIC-DK-NO-A'; + + case 'csebcdices': + case 'ebcdices': + return 'EBCDIC-ES'; + + case 'csebcdicesa': + case 'ebcdicesa': + return 'EBCDIC-ES-A'; + + case 'csebcdicess': + case 'ebcdicess': + return 'EBCDIC-ES-S'; + + case 'csebcdicfise': + case 'ebcdicfise': + return 'EBCDIC-FI-SE'; + + case 'csebcdicfisea': + case 'ebcdicfisea': + return 'EBCDIC-FI-SE-A'; + + case 'csebcdicfr': + case 'ebcdicfr': + return 'EBCDIC-FR'; + + case 'csebcdicit': + case 'ebcdicit': + return 'EBCDIC-IT'; + + case 'csebcdicpt': + case 'ebcdicpt': + return 'EBCDIC-PT'; + + case 'csebcdicuk': + case 'ebcdicuk': + return 'EBCDIC-UK'; + + case 'csebcdicus': + case 'ebcdicus': + return 'EBCDIC-US'; + + case 'csiso111ecmacyrillic': + case 'ecmacyrillic': + case 'isoir111': + case 'koi8e': + return 'ECMA-cyrillic'; + + case 'csiso17spanish': + case 'es': + case 'iso646es': + case 'isoir17': + return 'ES'; + + case 'csiso85spanish2': + case 'es2': + case 'iso646es2': + case 'isoir85': + return 'ES2'; + + case 'cseucpkdfmtjapanese': + case 'eucjp': + case 'extendedunixcodepackedformatforjapanese': + return 'EUC-JP'; + + case 'cseucfixwidjapanese': + case 'extendedunixcodefixedwidthforjapanese': + return 'Extended_UNIX_Code_Fixed_Width_for_Japanese'; + + case 'gb18030': + return 'GB18030'; + + case 'chinese': + case 'cp936': + case 'csgb2312': + case 'csiso58gb231280': + case 'gb2312': + case 'gb231280': + case 'gbk': + case 'isoir58': + case 'ms936': + case 'windows936': + return 'GBK'; + + case 'cn': + case 'csiso57gb1988': + case 'gb198880': + case 'iso646cn': + case 'isoir57': + return 'GB_1988-80'; + + case 'csiso153gost1976874': + case 'gost1976874': + case 'isoir153': + case 'stsev35888': + return 'GOST_19768-74'; + + case 'csiso150': + case 'csiso150greekccitt': + case 'greekccitt': + case 'isoir150': + return 'greek-ccitt'; + + case 'csiso88greek7': + case 'greek7': + case 'isoir88': + return 'greek7'; + + case 'csiso18greek7old': + case 'greek7old': + case 'isoir18': + return 'greek7-old'; + + case 'cshpdesktop': + case 'hpdesktop': + return 'HP-DeskTop'; + + case 'cshplegal': + case 'hplegal': + return 'HP-Legal'; + + case 'cshpmath8': + case 'hpmath8': + return 'HP-Math8'; + + case 'cshppifont': + case 'hppifont': + return 'HP-Pi-font'; + + case 'cshproman8': + case 'hproman8': + case 'r8': + case 'roman8': + return 'hp-roman8'; + + case 'hzgb2312': + return 'HZ-GB-2312'; + + case 'csibmsymbols': + case 'ibmsymbols': + return 'IBM-Symbols'; + + case 'csibmthai': + case 'ibmthai': + return 'IBM-Thai'; + + case 'cp37': + case 'csibm37': + case 'ebcdiccpca': + case 'ebcdiccpnl': + case 'ebcdiccpus': + case 'ebcdiccpwt': + case 'ibm37': + return 'IBM037'; + + case 'cp38': + case 'csibm38': + case 'ebcdicint': + case 'ibm38': + return 'IBM038'; + + case 'cp273': + case 'csibm273': + case 'ibm273': + return 'IBM273'; + + case 'cp274': + case 'csibm274': + case 'ebcdicbe': + case 'ibm274': + return 'IBM274'; + + case 'cp275': + case 'csibm275': + case 'ebcdicbr': + case 'ibm275': + return 'IBM275'; + + case 'csibm277': + case 'ebcdiccpdk': + case 'ebcdiccpno': + case 'ibm277': + return 'IBM277'; + + case 'cp278': + case 'csibm278': + case 'ebcdiccpfi': + case 'ebcdiccpse': + case 'ibm278': + return 'IBM278'; + + case 'cp280': + case 'csibm280': + case 'ebcdiccpit': + case 'ibm280': + return 'IBM280'; + + case 'cp281': + case 'csibm281': + case 'ebcdicjpe': + case 'ibm281': + return 'IBM281'; + + case 'cp284': + case 'csibm284': + case 'ebcdiccpes': + case 'ibm284': + return 'IBM284'; + + case 'cp285': + case 'csibm285': + case 'ebcdiccpgb': + case 'ibm285': + return 'IBM285'; + + case 'cp290': + case 'csibm290': + case 'ebcdicjpkana': + case 'ibm290': + return 'IBM290'; + + case 'cp297': + case 'csibm297': + case 'ebcdiccpfr': + case 'ibm297': + return 'IBM297'; + + case 'cp420': + case 'csibm420': + case 'ebcdiccpar1': + case 'ibm420': + return 'IBM420'; + + case 'cp423': + case 'csibm423': + case 'ebcdiccpgr': + case 'ibm423': + return 'IBM423'; + + case 'cp424': + case 'csibm424': + case 'ebcdiccphe': + case 'ibm424': + return 'IBM424'; + + case '437': + case 'cp437': + case 'cspc8codepage437': + case 'ibm437': + return 'IBM437'; + + case 'cp500': + case 'csibm500': + case 'ebcdiccpbe': + case 'ebcdiccpch': + case 'ibm500': + return 'IBM500'; + + case 'cp775': + case 'cspc775baltic': + case 'ibm775': + return 'IBM775'; + + case '850': + case 'cp850': + case 'cspc850multilingual': + case 'ibm850': + return 'IBM850'; + + case '851': + case 'cp851': + case 'csibm851': + case 'ibm851': + return 'IBM851'; + + case '852': + case 'cp852': + case 'cspcp852': + case 'ibm852': + return 'IBM852'; + + case '855': + case 'cp855': + case 'csibm855': + case 'ibm855': + return 'IBM855'; + + case '857': + case 'cp857': + case 'csibm857': + case 'ibm857': + return 'IBM857'; + + case 'ccsid858': + case 'cp858': + case 'ibm858': + case 'pcmultilingual850euro': + return 'IBM00858'; + + case '860': + case 'cp860': + case 'csibm860': + case 'ibm860': + return 'IBM860'; + + case '861': + case 'cp861': + case 'cpis': + case 'csibm861': + case 'ibm861': + return 'IBM861'; + + case '862': + case 'cp862': + case 'cspc862latinhebrew': + case 'ibm862': + return 'IBM862'; + + case '863': + case 'cp863': + case 'csibm863': + case 'ibm863': + return 'IBM863'; + + case 'cp864': + case 'csibm864': + case 'ibm864': + return 'IBM864'; + + case '865': + case 'cp865': + case 'csibm865': + case 'ibm865': + return 'IBM865'; + + case '866': + case 'cp866': + case 'csibm866': + case 'ibm866': + return 'IBM866'; + + case 'cp868': + case 'cpar': + case 'csibm868': + case 'ibm868': + return 'IBM868'; + + case '869': + case 'cp869': + case 'cpgr': + case 'csibm869': + case 'ibm869': + return 'IBM869'; + + case 'cp870': + case 'csibm870': + case 'ebcdiccproece': + case 'ebcdiccpyu': + case 'ibm870': + return 'IBM870'; + + case 'cp871': + case 'csibm871': + case 'ebcdiccpis': + case 'ibm871': + return 'IBM871'; + + case 'cp880': + case 'csibm880': + case 'ebcdiccyrillic': + case 'ibm880': + return 'IBM880'; + + case 'cp891': + case 'csibm891': + case 'ibm891': + return 'IBM891'; + + case 'cp903': + case 'csibm903': + case 'ibm903': + return 'IBM903'; + + case '904': + case 'cp904': + case 'csibbm904': + case 'ibm904': + return 'IBM904'; + + case 'cp905': + case 'csibm905': + case 'ebcdiccptr': + case 'ibm905': + return 'IBM905'; + + case 'cp918': + case 'csibm918': + case 'ebcdiccpar2': + case 'ibm918': + return 'IBM918'; + + case 'ccsid924': + case 'cp924': + case 'ebcdiclatin9euro': + case 'ibm924': + return 'IBM00924'; + + case 'cp1026': + case 'csibm1026': + case 'ibm1026': + return 'IBM1026'; + + case 'ibm1047': + return 'IBM1047'; + + case 'ccsid1140': + case 'cp1140': + case 'ebcdicus37euro': + case 'ibm1140': + return 'IBM01140'; + + case 'ccsid1141': + case 'cp1141': + case 'ebcdicde273euro': + case 'ibm1141': + return 'IBM01141'; + + case 'ccsid1142': + case 'cp1142': + case 'ebcdicdk277euro': + case 'ebcdicno277euro': + case 'ibm1142': + return 'IBM01142'; + + case 'ccsid1143': + case 'cp1143': + case 'ebcdicfi278euro': + case 'ebcdicse278euro': + case 'ibm1143': + return 'IBM01143'; + + case 'ccsid1144': + case 'cp1144': + case 'ebcdicit280euro': + case 'ibm1144': + return 'IBM01144'; + + case 'ccsid1145': + case 'cp1145': + case 'ebcdices284euro': + case 'ibm1145': + return 'IBM01145'; + + case 'ccsid1146': + case 'cp1146': + case 'ebcdicgb285euro': + case 'ibm1146': + return 'IBM01146'; + + case 'ccsid1147': + case 'cp1147': + case 'ebcdicfr297euro': + case 'ibm1147': + return 'IBM01147'; + + case 'ccsid1148': + case 'cp1148': + case 'ebcdicinternational500euro': + case 'ibm1148': + return 'IBM01148'; + + case 'ccsid1149': + case 'cp1149': + case 'ebcdicis871euro': + case 'ibm1149': + return 'IBM01149'; + + case 'csiso143iecp271': + case 'iecp271': + case 'isoir143': + return 'IEC_P27-1'; + + case 'csiso49inis': + case 'inis': + case 'isoir49': + return 'INIS'; + + case 'csiso50inis8': + case 'inis8': + case 'isoir50': + return 'INIS-8'; + + case 'csiso51iniscyrillic': + case 'iniscyrillic': + case 'isoir51': + return 'INIS-cyrillic'; + + case 'csinvariant': + case 'invariant': + return 'INVARIANT'; + + case 'iso2022cn': + return 'ISO-2022-CN'; + + case 'iso2022cnext': + return 'ISO-2022-CN-EXT'; + + case 'csiso2022jp': + case 'iso2022jp': + return 'ISO-2022-JP'; + + case 'csiso2022jp2': + case 'iso2022jp2': + return 'ISO-2022-JP-2'; + + case 'csiso2022kr': + case 'iso2022kr': + return 'ISO-2022-KR'; + + case 'cswindows30latin1': + case 'iso88591windows30latin1': + return 'ISO-8859-1-Windows-3.0-Latin-1'; + + case 'cswindows31latin1': + case 'iso88591windows31latin1': + return 'ISO-8859-1-Windows-3.1-Latin-1'; + + case 'csisolatin2': + case 'iso88592': + case 'iso885921987': + case 'isoir101': + case 'l2': + case 'latin2': + return 'ISO-8859-2'; + + case 'cswindows31latin2': + case 'iso88592windowslatin2': + return 'ISO-8859-2-Windows-Latin-2'; + + case 'csisolatin3': + case 'iso88593': + case 'iso885931988': + case 'isoir109': + case 'l3': + case 'latin3': + return 'ISO-8859-3'; + + case 'csisolatin4': + case 'iso88594': + case 'iso885941988': + case 'isoir110': + case 'l4': + case 'latin4': + return 'ISO-8859-4'; + + case 'csisolatincyrillic': + case 'cyrillic': + case 'iso88595': + case 'iso885951988': + case 'isoir144': + return 'ISO-8859-5'; + + case 'arabic': + case 'asmo708': + case 'csisolatinarabic': + case 'ecma114': + case 'iso88596': + case 'iso885961987': + case 'isoir127': + return 'ISO-8859-6'; + + case 'csiso88596e': + case 'iso88596e': + return 'ISO-8859-6-E'; + + case 'csiso88596i': + case 'iso88596i': + return 'ISO-8859-6-I'; + + case 'csisolatingreek': + case 'ecma118': + case 'elot928': + case 'greek': + case 'greek8': + case 'iso88597': + case 'iso885971987': + case 'isoir126': + return 'ISO-8859-7'; + + case 'csisolatinhebrew': + case 'hebrew': + case 'iso88598': + case 'iso885981988': + case 'isoir138': + return 'ISO-8859-8'; + + case 'csiso88598e': + case 'iso88598e': + return 'ISO-8859-8-E'; + + case 'csiso88598i': + case 'iso88598i': + return 'ISO-8859-8-I'; + + case 'cswindows31latin5': + case 'iso88599windowslatin5': + return 'ISO-8859-9-Windows-Latin-5'; + + case 'csisolatin6': + case 'iso885910': + case 'iso8859101992': + case 'isoir157': + case 'l6': + case 'latin6': + return 'ISO-8859-10'; + + case 'iso885913': + return 'ISO-8859-13'; + + case 'iso885914': + case 'iso8859141998': + case 'isoceltic': + case 'isoir199': + case 'l8': + case 'latin8': + return 'ISO-8859-14'; + + case 'iso885915': + case 'latin9': + return 'ISO-8859-15'; + + case 'iso885916': + case 'iso8859162001': + case 'isoir226': + case 'l10': + case 'latin10': + return 'ISO-8859-16'; + + case 'iso10646j1': + return 'ISO-10646-J-1'; + + case 'csunicode': + case 'iso10646ucs2': + return 'ISO-10646-UCS-2'; + + case 'csucs4': + case 'iso10646ucs4': + return 'ISO-10646-UCS-4'; + + case 'csunicodeascii': + case 'iso10646ucsbasic': + return 'ISO-10646-UCS-Basic'; + + case 'csunicodelatin1': + case 'iso10646': + case 'iso10646unicodelatin1': + return 'ISO-10646-Unicode-Latin1'; + + case 'csiso10646utf1': + case 'iso10646utf1': + return 'ISO-10646-UTF-1'; + + case 'csiso115481': + case 'iso115481': + case 'isotr115481': + return 'ISO-11548-1'; + + case 'csiso90': + case 'isoir90': + return 'iso-ir-90'; + + case 'csunicodeibm1261': + case 'isounicodeibm1261': + return 'ISO-Unicode-IBM-1261'; + + case 'csunicodeibm1264': + case 'isounicodeibm1264': + return 'ISO-Unicode-IBM-1264'; + + case 'csunicodeibm1265': + case 'isounicodeibm1265': + return 'ISO-Unicode-IBM-1265'; + + case 'csunicodeibm1268': + case 'isounicodeibm1268': + return 'ISO-Unicode-IBM-1268'; + + case 'csunicodeibm1276': + case 'isounicodeibm1276': + return 'ISO-Unicode-IBM-1276'; + + case 'csiso646basic1983': + case 'iso646basic1983': + case 'ref': + return 'ISO_646.basic:1983'; + + case 'csiso2intlrefversion': + case 'irv': + case 'iso646irv1983': + case 'isoir2': + return 'ISO_646.irv:1983'; + + case 'csiso2033': + case 'e13b': + case 'iso20331983': + case 'isoir98': + return 'ISO_2033-1983'; + + case 'csiso5427cyrillic': + case 'iso5427': + case 'isoir37': + return 'ISO_5427'; + + case 'iso5427cyrillic1981': + case 'iso54271981': + case 'isoir54': + return 'ISO_5427:1981'; + + case 'csiso5428greek': + case 'iso54281980': + case 'isoir55': + return 'ISO_5428:1980'; + + case 'csiso6937add': + case 'iso6937225': + case 'isoir152': + return 'ISO_6937-2-25'; + + case 'csisotextcomm': + case 'iso69372add': + case 'isoir142': + return 'ISO_6937-2-add'; + + case 'csiso8859supp': + case 'iso8859supp': + case 'isoir154': + case 'latin125': + return 'ISO_8859-supp'; + + case 'csiso10367box': + case 'iso10367box': + case 'isoir155': + return 'ISO_10367-box'; + + case 'csiso15italian': + case 'iso646it': + case 'isoir15': + case 'it': + return 'IT'; + + case 'csiso13jisc6220jp': + case 'isoir13': + case 'jisc62201969': + case 'jisc62201969jp': + case 'katakana': + case 'x2017': + return 'JIS_C6220-1969-jp'; + + case 'csiso14jisc6220ro': + case 'iso646jp': + case 'isoir14': + case 'jisc62201969ro': + case 'jp': + return 'JIS_C6220-1969-ro'; + + case 'csiso42jisc62261978': + case 'isoir42': + case 'jisc62261978': + return 'JIS_C6226-1978'; + + case 'csiso87jisx208': + case 'isoir87': + case 'jisc62261983': + case 'jisx2081983': + case 'x208': + return 'JIS_C6226-1983'; + + case 'csiso91jisc62291984a': + case 'isoir91': + case 'jisc62291984a': + case 'jpocra': + return 'JIS_C6229-1984-a'; + + case 'csiso92jisc62991984b': + case 'iso646jpocrb': + case 'isoir92': + case 'jisc62291984b': + case 'jpocrb': + return 'JIS_C6229-1984-b'; + + case 'csiso93jis62291984badd': + case 'isoir93': + case 'jisc62291984badd': + case 'jpocrbadd': + return 'JIS_C6229-1984-b-add'; + + case 'csiso94jis62291984hand': + case 'isoir94': + case 'jisc62291984hand': + case 'jpocrhand': + return 'JIS_C6229-1984-hand'; + + case 'csiso95jis62291984handadd': + case 'isoir95': + case 'jisc62291984handadd': + case 'jpocrhandadd': + return 'JIS_C6229-1984-hand-add'; + + case 'csiso96jisc62291984kana': + case 'isoir96': + case 'jisc62291984kana': + return 'JIS_C6229-1984-kana'; + + case 'csjisencoding': + case 'jisencoding': + return 'JIS_Encoding'; + + case 'cshalfwidthkatakana': + case 'jisx201': + case 'x201': + return 'JIS_X0201'; + + case 'csiso159jisx2121990': + case 'isoir159': + case 'jisx2121990': + case 'x212': + return 'JIS_X0212-1990'; + + case 'csiso141jusib1002': + case 'iso646yu': + case 'isoir141': + case 'js': + case 'jusib1002': + case 'yu': + return 'JUS_I.B1.002'; + + case 'csiso147macedonian': + case 'isoir147': + case 'jusib1003mac': + case 'macedonian': + return 'JUS_I.B1.003-mac'; + + case 'csiso146serbian': + case 'isoir146': + case 'jusib1003serb': + case 'serbian': + return 'JUS_I.B1.003-serb'; + + case 'koi7switched': + return 'KOI7-switched'; + + case 'cskoi8r': + case 'koi8r': + return 'KOI8-R'; + + case 'koi8u': + return 'KOI8-U'; + + case 'csksc5636': + case 'iso646kr': + case 'ksc5636': + return 'KSC5636'; + + case 'cskz1048': + case 'kz1048': + case 'rk1048': + case 'strk10482002': + return 'KZ-1048'; + + case 'csiso19latingreek': + case 'isoir19': + case 'latingreek': + return 'latin-greek'; + + case 'csiso27latingreek1': + case 'isoir27': + case 'latingreek1': + return 'Latin-greek-1'; + + case 'csiso158lap': + case 'isoir158': + case 'lap': + case 'latinlap': + return 'latin-lap'; + + case 'csmacintosh': + case 'mac': + case 'macintosh': + return 'macintosh'; + + case 'csmicrosoftpublishing': + case 'microsoftpublishing': + return 'Microsoft-Publishing'; + + case 'csmnem': + case 'mnem': + return 'MNEM'; + + case 'csmnemonic': + case 'mnemonic': + return 'MNEMONIC'; + + case 'csiso86hungarian': + case 'hu': + case 'iso646hu': + case 'isoir86': + case 'msz77953': + return 'MSZ_7795.3'; + + case 'csnatsdano': + case 'isoir91': + case 'natsdano': + return 'NATS-DANO'; + + case 'csnatsdanoadd': + case 'isoir92': + case 'natsdanoadd': + return 'NATS-DANO-ADD'; + + case 'csnatssefi': + case 'isoir81': + case 'natssefi': + return 'NATS-SEFI'; + + case 'csnatssefiadd': + case 'isoir82': + case 'natssefiadd': + return 'NATS-SEFI-ADD'; + + case 'csiso151cuba': + case 'cuba': + case 'iso646cu': + case 'isoir151': + case 'ncnc1081': + return 'NC_NC00-10:81'; + + case 'csiso69french': + case 'fr': + case 'iso646fr': + case 'isoir69': + case 'nfz62010': + return 'NF_Z_62-010'; + + case 'csiso25french': + case 'iso646fr1': + case 'isoir25': + case 'nfz620101973': + return 'NF_Z_62-010_(1973)'; + + case 'csiso60danishnorwegian': + case 'csiso60norwegian1': + case 'iso646no': + case 'isoir60': + case 'no': + case 'ns45511': + return 'NS_4551-1'; + + case 'csiso61norwegian2': + case 'iso646no2': + case 'isoir61': + case 'no2': + case 'ns45512': + return 'NS_4551-2'; + + case 'osdebcdicdf3irv': + return 'OSD_EBCDIC_DF03_IRV'; + + case 'osdebcdicdf41': + return 'OSD_EBCDIC_DF04_1'; + + case 'osdebcdicdf415': + return 'OSD_EBCDIC_DF04_15'; + + case 'cspc8danishnorwegian': + case 'pc8danishnorwegian': + return 'PC8-Danish-Norwegian'; + + case 'cspc8turkish': + case 'pc8turkish': + return 'PC8-Turkish'; + + case 'csiso16portuguese': + case 'iso646pt': + case 'isoir16': + case 'pt': + return 'PT'; + + case 'csiso84portuguese2': + case 'iso646pt2': + case 'isoir84': + case 'pt2': + return 'PT2'; + + case 'cp154': + case 'csptcp154': + case 'cyrillicasian': + case 'pt154': + case 'ptcp154': + return 'PTCP154'; + + case 'scsu': + return 'SCSU'; + + case 'csiso10swedish': + case 'fi': + case 'iso646fi': + case 'iso646se': + case 'isoir10': + case 'se': + case 'sen850200b': + return 'SEN_850200_B'; + + case 'csiso11swedishfornames': + case 'iso646se2': + case 'isoir11': + case 'se2': + case 'sen850200c': + return 'SEN_850200_C'; + + case 'csiso102t617bit': + case 'isoir102': + case 't617bit': + return 'T.61-7bit'; + + case 'csiso103t618bit': + case 'isoir103': + case 't61': + case 't618bit': + return 'T.61-8bit'; + + case 'csiso128t101g2': + case 'isoir128': + case 't101g2': + return 'T.101-G2'; + + case 'cstscii': + case 'tscii': + return 'TSCII'; + + case 'csunicode11': + case 'unicode11': + return 'UNICODE-1-1'; + + case 'csunicode11utf7': + case 'unicode11utf7': + return 'UNICODE-1-1-UTF-7'; + + case 'csunknown8bit': + case 'unknown8bit': + return 'UNKNOWN-8BIT'; + + case 'ansix341968': + case 'ansix341986': + case 'ascii': + case 'cp367': + case 'csascii': + case 'ibm367': + case 'iso646irv1991': + case 'iso646us': + case 'isoir6': + case 'us': + case 'usascii': + return 'US-ASCII'; + + case 'csusdk': + case 'usdk': + return 'us-dk'; + + case 'utf7': + return 'UTF-7'; + + case 'utf8': + return 'UTF-8'; + + case 'utf16': + return 'UTF-16'; + + case 'utf16be': + return 'UTF-16BE'; + + case 'utf16le': + return 'UTF-16LE'; + + case 'utf32': + return 'UTF-32'; + + case 'utf32be': + return 'UTF-32BE'; + + case 'utf32le': + return 'UTF-32LE'; + + case 'csventurainternational': + case 'venturainternational': + return 'Ventura-International'; + + case 'csventuramath': + case 'venturamath': + return 'Ventura-Math'; + + case 'csventuraus': + case 'venturaus': + return 'Ventura-US'; + + case 'csiso70videotexsupp1': + case 'isoir70': + case 'videotexsuppl': + return 'videotex-suppl'; + + case 'csviqr': + case 'viqr': + return 'VIQR'; + + case 'csviscii': + case 'viscii': + return 'VISCII'; + + case 'csshiftjis': + case 'cswindows31j': + case 'mskanji': + case 'shiftjis': + case 'windows31j': + return 'Windows-31J'; + + case 'iso885911': + case 'tis620': + return 'windows-874'; + + case 'cseuckr': + case 'csksc56011987': + case 'euckr': + case 'isoir149': + case 'korean': + case 'ksc5601': + case 'ksc56011987': + case 'ksc56011989': + case 'windows949': + return 'windows-949'; + + case 'windows1250': + return 'windows-1250'; + + case 'windows1251': + return 'windows-1251'; + + case 'cp819': + case 'csisolatin1': + case 'ibm819': + case 'iso88591': + case 'iso885911987': + case 'isoir100': + case 'l1': + case 'latin1': + case 'windows1252': + return 'windows-1252'; + + case 'windows1253': + return 'windows-1253'; + + case 'csisolatin5': + case 'iso88599': + case 'iso885991989': + case 'isoir148': + case 'l5': + case 'latin5': + case 'windows1254': + return 'windows-1254'; + + case 'windows1255': + return 'windows-1255'; + + case 'windows1256': + return 'windows-1256'; + + case 'windows1257': + return 'windows-1257'; + + case 'windows1258': + return 'windows-1258'; + + default: + return $charset; + } + } + + public static function get_curl_version() + { + if (is_array($curl = curl_version())) + { + $curl = $curl['version']; + } + elseif (substr($curl, 0, 5) === 'curl/') + { + $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5)); + } + elseif (substr($curl, 0, 8) === 'libcurl/') + { + $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8)); + } + else + { + $curl = 0; + } + return $curl; + } + + /** + * Strip HTML comments + * + * @param string $data Data to strip comments from + * @return string Comment stripped string + */ + public static function strip_comments($data) + { + $output = ''; + while (($start = strpos($data, '<!--')) !== false) + { + $output .= substr($data, 0, $start); + if (($end = strpos($data, '-->', $start)) !== false) + { + $data = substr_replace($data, '', 0, $end + 3); + } + else + { + $data = ''; + } + } + return $output . $data; + } + + public static function parse_date($dt) + { + $parser = SimplePie_Parse_Date::get(); + return $parser->parse($dt); + } + + /** + * Decode HTML entities + * + * @deprecated Use DOMDocument instead + * @param string $data Input data + * @return string Output data + */ + public static function entities_decode($data) + { + $decoder = new SimplePie_Decode_HTML_Entities($data); + return $decoder->parse(); + } + + /** + * Remove RFC822 comments + * + * @param string $data Data to strip comments from + * @return string Comment stripped string + */ + public static function uncomment_rfc822($string) + { + $string = (string) $string; + $position = 0; + $length = strlen($string); + $depth = 0; + + $output = ''; + + while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) + { + $output .= substr($string, $position, $pos - $position); + $position = $pos + 1; + if ($string[$pos - 1] !== '\\') + { + $depth++; + while ($depth && $position < $length) + { + $position += strcspn($string, '()', $position); + if ($string[$position - 1] === '\\') + { + $position++; + continue; + } + elseif (isset($string[$position])) + { + switch ($string[$position]) + { + case '(': + $depth++; + break; + + case ')': + $depth--; + break; + } + $position++; + } + else + { + break; + } + } + } + else + { + $output .= '('; + } + } + $output .= substr($string, $position); + + return $output; + } + + public static function parse_mime($mime) + { + if (($pos = strpos($mime, ';')) === false) + { + return trim($mime); + } + else + { + return trim(substr($mime, 0, $pos)); + } + } + + public static function atom_03_construct_type($attribs) + { + if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) === 'base64')) + { + $mode = SIMPLEPIE_CONSTRUCT_BASE64; + } + else + { + $mode = SIMPLEPIE_CONSTRUCT_NONE; + } + if (isset($attribs['']['type'])) + { + switch (strtolower(trim($attribs['']['type']))) + { + case 'text': + case 'text/plain': + return SIMPLEPIE_CONSTRUCT_TEXT | $mode; + + case 'html': + case 'text/html': + return SIMPLEPIE_CONSTRUCT_HTML | $mode; + + case 'xhtml': + case 'application/xhtml+xml': + return SIMPLEPIE_CONSTRUCT_XHTML | $mode; + + default: + return SIMPLEPIE_CONSTRUCT_NONE | $mode; + } + } + else + { + return SIMPLEPIE_CONSTRUCT_TEXT | $mode; + } + } + + public static function atom_10_construct_type($attribs) + { + if (isset($attribs['']['type'])) + { + switch (strtolower(trim($attribs['']['type']))) + { + case 'text': + return SIMPLEPIE_CONSTRUCT_TEXT; + + case 'html': + return SIMPLEPIE_CONSTRUCT_HTML; + + case 'xhtml': + return SIMPLEPIE_CONSTRUCT_XHTML; + + default: + return SIMPLEPIE_CONSTRUCT_NONE; + } + } + return SIMPLEPIE_CONSTRUCT_TEXT; + } + + public static function atom_10_content_construct_type($attribs) + { + if (isset($attribs['']['type'])) + { + $type = strtolower(trim($attribs['']['type'])); + switch ($type) + { + case 'text': + return SIMPLEPIE_CONSTRUCT_TEXT; + + case 'html': + return SIMPLEPIE_CONSTRUCT_HTML; + + case 'xhtml': + return SIMPLEPIE_CONSTRUCT_XHTML; + } + if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) === 'text/') + { + return SIMPLEPIE_CONSTRUCT_NONE; + } + else + { + return SIMPLEPIE_CONSTRUCT_BASE64; + } + } + else + { + return SIMPLEPIE_CONSTRUCT_TEXT; + } + } + + public static function is_isegment_nz_nc($string) + { + return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string); + } + + public static function space_seperated_tokens($string) + { + $space_characters = "\x20\x09\x0A\x0B\x0C\x0D"; + $string_length = strlen($string); + + $position = strspn($string, $space_characters); + $tokens = array(); + + while ($position < $string_length) + { + $len = strcspn($string, $space_characters, $position); + $tokens[] = substr($string, $position, $len); + $position += $len; + $position += strspn($string, $space_characters, $position); + } + + return $tokens; + } + + /** + * Converts a unicode codepoint to a UTF-8 character + * + * @static + * @param int $codepoint Unicode codepoint + * @return string UTF-8 character + */ + public static function codepoint_to_utf8($codepoint) + { + $codepoint = (int) $codepoint; + if ($codepoint < 0) + { + return false; + } + else if ($codepoint <= 0x7f) + { + return chr($codepoint); + } + else if ($codepoint <= 0x7ff) + { + return chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f)); + } + else if ($codepoint <= 0xffff) + { + return chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); + } + else if ($codepoint <= 0x10ffff) + { + return chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); + } + else + { + // U+FFFD REPLACEMENT CHARACTER + return "\xEF\xBF\xBD"; + } + } + + /** + * Similar to parse_str() + * + * Returns an associative array of name/value pairs, where the value is an + * array of values that have used the same name + * + * @static + * @param string $str The input string. + * @return array + */ + public static function parse_str($str) + { + $return = array(); + $str = explode('&', $str); + + foreach ($str as $section) + { + if (strpos($section, '=') !== false) + { + list($name, $value) = explode('=', $section, 2); + $return[urldecode($name)][] = urldecode($value); + } + else + { + $return[urldecode($section)][] = null; + } + } + + return $return; + } + + /** + * Detect XML encoding, as per XML 1.0 Appendix F.1 + * + * @todo Add support for EBCDIC + * @param string $data XML data + * @param SimplePie_Registry $registry Class registry + * @return array Possible encodings + */ + public static function xml_encoding($data, $registry) + { + // UTF-32 Big Endian BOM + if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") + { + $encoding[] = 'UTF-32BE'; + } + // UTF-32 Little Endian BOM + elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") + { + $encoding[] = 'UTF-32LE'; + } + // UTF-16 Big Endian BOM + elseif (substr($data, 0, 2) === "\xFE\xFF") + { + $encoding[] = 'UTF-16BE'; + } + // UTF-16 Little Endian BOM + elseif (substr($data, 0, 2) === "\xFF\xFE") + { + $encoding[] = 'UTF-16LE'; + } + // UTF-8 BOM + elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") + { + $encoding[] = 'UTF-8'; + } + // UTF-32 Big Endian Without BOM + elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C") + { + if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E")) + { + $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8'))); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-32BE'; + } + // UTF-32 Little Endian Without BOM + elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00") + { + if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00")) + { + $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8'))); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-32LE'; + } + // UTF-16 Big Endian Without BOM + elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C") + { + if ($pos = strpos($data, "\x00\x3F\x00\x3E")) + { + $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8'))); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-16BE'; + } + // UTF-16 Little Endian Without BOM + elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00") + { + if ($pos = strpos($data, "\x3F\x00\x3E\x00")) + { + $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8'))); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-16LE'; + } + // US-ASCII (or superset) + elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C") + { + if ($pos = strpos($data, "\x3F\x3E")) + { + $parser = $registry->create('XML_Declaration_Parser', array(substr($data, 5, $pos - 5))); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-8'; + } + // Fallback to UTF-8 + else + { + $encoding[] = 'UTF-8'; + } + return $encoding; + } + + public static function output_javascript() + { + if (function_exists('ob_gzhandler')) + { + ob_start('ob_gzhandler'); + } + header('Content-type: text/javascript; charset: UTF-8'); + header('Cache-Control: must-revalidate'); + header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days + ?> +function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) { + if (placeholder != '') { + document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>'); + } + else { + document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>'); + } +} + +function embed_flash(bgcolor, width, height, link, loop, type) { + document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>'); +} + +function embed_flv(width, height, link, placeholder, loop, player) { + document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>'); +} + +function embed_wmedia(width, height, link) { + document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>'); +} + <?php + } + + /** + * Get the SimplePie build timestamp + * + * Uses the git index if it exists, otherwise uses the modification time + * of the newest file. + */ + public static function get_build() + { + $root = dirname(dirname(__FILE__)); + if (file_exists($root . '/.git/index')) + { + return filemtime($root . '/.git/index'); + } + elseif (file_exists($root . '/SimplePie')) + { + $time = 0; + foreach (glob($root . '/SimplePie/*.php') as $file) + { + if (($mtime = filemtime($file)) > $time) + { + $time = $mtime; + } + } + return $time; + } + elseif (file_exists(dirname(__FILE__) . '/Core.php')) + { + return filemtime(dirname(__FILE__) . '/Core.php'); + } + else + { + return filemtime(__FILE__); + } + } + + /** + * Format debugging information + */ + public static function debug(&$sp) + { + $info = 'SimplePie ' . SIMPLEPIE_VERSION . ' Build ' . SIMPLEPIE_BUILD . "\n"; + $info .= 'PHP ' . PHP_VERSION . "\n"; + if ($sp->error() !== null) + { + $info .= 'Error occurred: ' . $sp->error() . "\n"; + } + else + { + $info .= "No error found.\n"; + } + $info .= "Extensions:\n"; + $extensions = array('pcre', 'curl', 'zlib', 'mbstring', 'iconv', 'xmlreader', 'xml'); + foreach ($extensions as $ext) + { + if (extension_loaded($ext)) + { + $info .= " $ext loaded\n"; + switch ($ext) + { + case 'pcre': + $info .= ' Version ' . PCRE_VERSION . "\n"; + break; + case 'curl': + $version = curl_version(); + $info .= ' Version ' . $version['version'] . "\n"; + break; + case 'mbstring': + $info .= ' Overloading: ' . mb_get_info('func_overload') . "\n"; + break; + case 'iconv': + $info .= ' Version ' . ICONV_VERSION . "\n"; + break; + case 'xml': + $info .= ' Version ' . LIBXML_DOTTED_VERSION . "\n"; + break; + } + } + else + { + $info .= " $ext not loaded\n"; + } + } + return $info; + } + + public static function silence_errors($num, $str) + { + // No-op + } +} + diff --git a/src/wp-includes/SimplePie/Net/IPv6.php b/src/wp-includes/SimplePie/Net/IPv6.php new file mode 100644 index 0000000..da80d8a --- /dev/null +++ b/src/wp-includes/SimplePie/Net/IPv6.php @@ -0,0 +1,276 @@ +<?php +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + + +/** + * Class to validate and to work with IPv6 addresses. + * + * @package SimplePie + * @subpackage HTTP + * @copyright 2003-2005 The PHP Group + * @license http://www.opensource.org/licenses/bsd-license.php + * @link http://pear.php.net/package/Net_IPv6 + * @author Alexander Merz <alexander.merz@web.de> + * @author elfrink at introweb dot nl + * @author Josh Peck <jmp at joshpeck dot org> + * @author Geoffrey Sneddon <geoffers@gmail.com> + */ +class SimplePie_Net_IPv6 +{ + /** + * Uncompresses an IPv6 address + * + * RFC 4291 allows you to compress concecutive zero pieces in an address to + * '::'. This method expects a valid IPv6 address and expands the '::' to + * the required number of zero pieces. + * + * Example: FF01::101 -> FF01:0:0:0:0:0:0:101 + * ::1 -> 0:0:0:0:0:0:0:1 + * + * @author Alexander Merz <alexander.merz@web.de> + * @author elfrink at introweb dot nl + * @author Josh Peck <jmp at joshpeck dot org> + * @copyright 2003-2005 The PHP Group + * @license http://www.opensource.org/licenses/bsd-license.php + * @param string $ip An IPv6 address + * @return string The uncompressed IPv6 address + */ + public static function uncompress($ip) + { + $c1 = -1; + $c2 = -1; + if (substr_count($ip, '::') === 1) + { + list($ip1, $ip2) = explode('::', $ip); + if ($ip1 === '') + { + $c1 = -1; + } + else + { + $c1 = substr_count($ip1, ':'); + } + if ($ip2 === '') + { + $c2 = -1; + } + else + { + $c2 = substr_count($ip2, ':'); + } + if (strpos($ip2, '.') !== false) + { + $c2++; + } + // :: + if ($c1 === -1 && $c2 === -1) + { + $ip = '0:0:0:0:0:0:0:0'; + } + // ::xxx + else if ($c1 === -1) + { + $fill = str_repeat('0:', 7 - $c2); + $ip = str_replace('::', $fill, $ip); + } + // xxx:: + else if ($c2 === -1) + { + $fill = str_repeat(':0', 7 - $c1); + $ip = str_replace('::', $fill, $ip); + } + // xxx::xxx + else + { + $fill = ':' . str_repeat('0:', 6 - $c2 - $c1); + $ip = str_replace('::', $fill, $ip); + } + } + return $ip; + } + + /** + * Compresses an IPv6 address + * + * RFC 4291 allows you to compress concecutive zero pieces in an address to + * '::'. This method expects a valid IPv6 address and compresses consecutive + * zero pieces to '::'. + * + * Example: FF01:0:0:0:0:0:0:101 -> FF01::101 + * 0:0:0:0:0:0:0:1 -> ::1 + * + * @see uncompress() + * @param string $ip An IPv6 address + * @return string The compressed IPv6 address + */ + public static function compress($ip) + { + // Prepare the IP to be compressed + $ip = self::uncompress($ip); + $ip_parts = self::split_v6_v4($ip); + + // Replace all leading zeros + $ip_parts[0] = preg_replace('/(^|:)0+([0-9])/', '\1\2', $ip_parts[0]); + + // Find bunches of zeros + if (preg_match_all('/(?:^|:)(?:0(?::|$))+/', $ip_parts[0], $matches, PREG_OFFSET_CAPTURE)) + { + $max = 0; + $pos = null; + foreach ($matches[0] as $match) + { + if (strlen($match[0]) > $max) + { + $max = strlen($match[0]); + $pos = $match[1]; + } + } + + $ip_parts[0] = substr_replace($ip_parts[0], '::', $pos, $max); + } + + if ($ip_parts[1] !== '') + { + return implode(':', $ip_parts); + } + else + { + return $ip_parts[0]; + } + } + + /** + * Splits an IPv6 address into the IPv6 and IPv4 representation parts + * + * RFC 4291 allows you to represent the last two parts of an IPv6 address + * using the standard IPv4 representation + * + * Example: 0:0:0:0:0:0:13.1.68.3 + * 0:0:0:0:0:FFFF:129.144.52.38 + * + * @param string $ip An IPv6 address + * @return array [0] contains the IPv6 represented part, and [1] the IPv4 represented part + */ + private static function split_v6_v4($ip) + { + if (strpos($ip, '.') !== false) + { + $pos = strrpos($ip, ':'); + $ipv6_part = substr($ip, 0, $pos); + $ipv4_part = substr($ip, $pos + 1); + return array($ipv6_part, $ipv4_part); + } + else + { + return array($ip, ''); + } + } + + /** + * Checks an IPv6 address + * + * Checks if the given IP is a valid IPv6 address + * + * @param string $ip An IPv6 address + * @return bool true if $ip is a valid IPv6 address + */ + public static function check_ipv6($ip) + { + $ip = self::uncompress($ip); + list($ipv6, $ipv4) = self::split_v6_v4($ip); + $ipv6 = explode(':', $ipv6); + $ipv4 = explode('.', $ipv4); + if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4) + { + foreach ($ipv6 as $ipv6_part) + { + // The section can't be empty + if ($ipv6_part === '') + return false; + + // Nor can it be over four characters + if (strlen($ipv6_part) > 4) + return false; + + // Remove leading zeros (this is safe because of the above) + $ipv6_part = ltrim($ipv6_part, '0'); + if ($ipv6_part === '') + $ipv6_part = '0'; + + // Check the value is valid + $value = hexdec($ipv6_part); + if (dechex($value) !== strtolower($ipv6_part) || $value < 0 || $value > 0xFFFF) + return false; + } + if (count($ipv4) === 4) + { + foreach ($ipv4 as $ipv4_part) + { + $value = (int) $ipv4_part; + if ((string) $value !== $ipv4_part || $value < 0 || $value > 0xFF) + return false; + } + } + return true; + } + else + { + return false; + } + } + + /** + * Checks if the given IP is a valid IPv6 address + * + * @codeCoverageIgnore + * @deprecated Use {@see SimplePie_Net_IPv6::check_ipv6()} instead + * @see check_ipv6 + * @param string $ip An IPv6 address + * @return bool true if $ip is a valid IPv6 address + */ + public static function checkIPv6($ip) + { + return self::check_ipv6($ip); + } +} diff --git a/src/wp-includes/SimplePie/Parse/Date.php b/src/wp-includes/SimplePie/Parse/Date.php new file mode 100644 index 0000000..d51f500 --- /dev/null +++ b/src/wp-includes/SimplePie/Parse/Date.php @@ -0,0 +1,983 @@ +<?php +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + + +/** + * Date Parser + * + * @package SimplePie + * @subpackage Parsing + */ +class SimplePie_Parse_Date +{ + /** + * Input data + * + * @access protected + * @var string + */ + var $date; + + /** + * List of days, calendar day name => ordinal day number in the week + * + * @access protected + * @var array + */ + var $day = array( + // English + 'mon' => 1, + 'monday' => 1, + 'tue' => 2, + 'tuesday' => 2, + 'wed' => 3, + 'wednesday' => 3, + 'thu' => 4, + 'thursday' => 4, + 'fri' => 5, + 'friday' => 5, + 'sat' => 6, + 'saturday' => 6, + 'sun' => 7, + 'sunday' => 7, + // Dutch + 'maandag' => 1, + 'dinsdag' => 2, + 'woensdag' => 3, + 'donderdag' => 4, + 'vrijdag' => 5, + 'zaterdag' => 6, + 'zondag' => 7, + // French + 'lundi' => 1, + 'mardi' => 2, + 'mercredi' => 3, + 'jeudi' => 4, + 'vendredi' => 5, + 'samedi' => 6, + 'dimanche' => 7, + // German + 'montag' => 1, + 'dienstag' => 2, + 'mittwoch' => 3, + 'donnerstag' => 4, + 'freitag' => 5, + 'samstag' => 6, + 'sonnabend' => 6, + 'sonntag' => 7, + // Italian + 'lunedì' => 1, + 'martedì' => 2, + 'mercoledì' => 3, + 'giovedì' => 4, + 'venerdì' => 5, + 'sabato' => 6, + 'domenica' => 7, + // Spanish + 'lunes' => 1, + 'martes' => 2, + 'miércoles' => 3, + 'jueves' => 4, + 'viernes' => 5, + 'sábado' => 6, + 'domingo' => 7, + // Finnish + 'maanantai' => 1, + 'tiistai' => 2, + 'keskiviikko' => 3, + 'torstai' => 4, + 'perjantai' => 5, + 'lauantai' => 6, + 'sunnuntai' => 7, + // Hungarian + 'hétfő' => 1, + 'kedd' => 2, + 'szerda' => 3, + 'csütörtok' => 4, + 'péntek' => 5, + 'szombat' => 6, + 'vasárnap' => 7, + // Greek + 'Δευ' => 1, + 'Τρι' => 2, + 'Τετ' => 3, + 'Πεμ' => 4, + 'Παρ' => 5, + 'Σαβ' => 6, + 'Κυρ' => 7, + ); + + /** + * List of months, calendar month name => calendar month number + * + * @access protected + * @var array + */ + var $month = array( + // English + 'jan' => 1, + 'january' => 1, + 'feb' => 2, + 'february' => 2, + 'mar' => 3, + 'march' => 3, + 'apr' => 4, + 'april' => 4, + 'may' => 5, + // No long form of May + 'jun' => 6, + 'june' => 6, + 'jul' => 7, + 'july' => 7, + 'aug' => 8, + 'august' => 8, + 'sep' => 9, + 'september' => 8, + 'oct' => 10, + 'october' => 10, + 'nov' => 11, + 'november' => 11, + 'dec' => 12, + 'december' => 12, + // Dutch + 'januari' => 1, + 'februari' => 2, + 'maart' => 3, + 'april' => 4, + 'mei' => 5, + 'juni' => 6, + 'juli' => 7, + 'augustus' => 8, + 'september' => 9, + 'oktober' => 10, + 'november' => 11, + 'december' => 12, + // French + 'janvier' => 1, + 'février' => 2, + 'mars' => 3, + 'avril' => 4, + 'mai' => 5, + 'juin' => 6, + 'juillet' => 7, + 'août' => 8, + 'septembre' => 9, + 'octobre' => 10, + 'novembre' => 11, + 'décembre' => 12, + // German + 'januar' => 1, + 'februar' => 2, + 'märz' => 3, + 'april' => 4, + 'mai' => 5, + 'juni' => 6, + 'juli' => 7, + 'august' => 8, + 'september' => 9, + 'oktober' => 10, + 'november' => 11, + 'dezember' => 12, + // Italian + 'gennaio' => 1, + 'febbraio' => 2, + 'marzo' => 3, + 'aprile' => 4, + 'maggio' => 5, + 'giugno' => 6, + 'luglio' => 7, + 'agosto' => 8, + 'settembre' => 9, + 'ottobre' => 10, + 'novembre' => 11, + 'dicembre' => 12, + // Spanish + 'enero' => 1, + 'febrero' => 2, + 'marzo' => 3, + 'abril' => 4, + 'mayo' => 5, + 'junio' => 6, + 'julio' => 7, + 'agosto' => 8, + 'septiembre' => 9, + 'setiembre' => 9, + 'octubre' => 10, + 'noviembre' => 11, + 'diciembre' => 12, + // Finnish + 'tammikuu' => 1, + 'helmikuu' => 2, + 'maaliskuu' => 3, + 'huhtikuu' => 4, + 'toukokuu' => 5, + 'kesäkuu' => 6, + 'heinäkuu' => 7, + 'elokuu' => 8, + 'suuskuu' => 9, + 'lokakuu' => 10, + 'marras' => 11, + 'joulukuu' => 12, + // Hungarian + 'január' => 1, + 'február' => 2, + 'március' => 3, + 'április' => 4, + 'május' => 5, + 'június' => 6, + 'július' => 7, + 'augusztus' => 8, + 'szeptember' => 9, + 'október' => 10, + 'november' => 11, + 'december' => 12, + // Greek + 'Ιαν' => 1, + 'Φεβ' => 2, + 'Μάώ' => 3, + 'Μαώ' => 3, + 'Απρ' => 4, + 'Μάι' => 5, + 'Μαϊ' => 5, + 'Μαι' => 5, + 'Ιούν' => 6, + 'Ιον' => 6, + 'Ιούλ' => 7, + 'Ιολ' => 7, + 'Αύγ' => 8, + 'Αυγ' => 8, + 'Σεπ' => 9, + 'Οκτ' => 10, + 'Νοέ' => 11, + 'Δεκ' => 12, + ); + + /** + * List of timezones, abbreviation => offset from UTC + * + * @access protected + * @var array + */ + var $timezone = array( + 'ACDT' => 37800, + 'ACIT' => 28800, + 'ACST' => 34200, + 'ACT' => -18000, + 'ACWDT' => 35100, + 'ACWST' => 31500, + 'AEDT' => 39600, + 'AEST' => 36000, + 'AFT' => 16200, + 'AKDT' => -28800, + 'AKST' => -32400, + 'AMDT' => 18000, + 'AMT' => -14400, + 'ANAST' => 46800, + 'ANAT' => 43200, + 'ART' => -10800, + 'AZOST' => -3600, + 'AZST' => 18000, + 'AZT' => 14400, + 'BIOT' => 21600, + 'BIT' => -43200, + 'BOT' => -14400, + 'BRST' => -7200, + 'BRT' => -10800, + 'BST' => 3600, + 'BTT' => 21600, + 'CAST' => 18000, + 'CAT' => 7200, + 'CCT' => 23400, + 'CDT' => -18000, + 'CEDT' => 7200, + 'CET' => 3600, + 'CGST' => -7200, + 'CGT' => -10800, + 'CHADT' => 49500, + 'CHAST' => 45900, + 'CIST' => -28800, + 'CKT' => -36000, + 'CLDT' => -10800, + 'CLST' => -14400, + 'COT' => -18000, + 'CST' => -21600, + 'CVT' => -3600, + 'CXT' => 25200, + 'DAVT' => 25200, + 'DTAT' => 36000, + 'EADT' => -18000, + 'EAST' => -21600, + 'EAT' => 10800, + 'ECT' => -18000, + 'EDT' => -14400, + 'EEST' => 10800, + 'EET' => 7200, + 'EGT' => -3600, + 'EKST' => 21600, + 'EST' => -18000, + 'FJT' => 43200, + 'FKDT' => -10800, + 'FKST' => -14400, + 'FNT' => -7200, + 'GALT' => -21600, + 'GEDT' => 14400, + 'GEST' => 10800, + 'GFT' => -10800, + 'GILT' => 43200, + 'GIT' => -32400, + 'GST' => 14400, + 'GST' => -7200, + 'GYT' => -14400, + 'HAA' => -10800, + 'HAC' => -18000, + 'HADT' => -32400, + 'HAE' => -14400, + 'HAP' => -25200, + 'HAR' => -21600, + 'HAST' => -36000, + 'HAT' => -9000, + 'HAY' => -28800, + 'HKST' => 28800, + 'HMT' => 18000, + 'HNA' => -14400, + 'HNC' => -21600, + 'HNE' => -18000, + 'HNP' => -28800, + 'HNR' => -25200, + 'HNT' => -12600, + 'HNY' => -32400, + 'IRDT' => 16200, + 'IRKST' => 32400, + 'IRKT' => 28800, + 'IRST' => 12600, + 'JFDT' => -10800, + 'JFST' => -14400, + 'JST' => 32400, + 'KGST' => 21600, + 'KGT' => 18000, + 'KOST' => 39600, + 'KOVST' => 28800, + 'KOVT' => 25200, + 'KRAST' => 28800, + 'KRAT' => 25200, + 'KST' => 32400, + 'LHDT' => 39600, + 'LHST' => 37800, + 'LINT' => 50400, + 'LKT' => 21600, + 'MAGST' => 43200, + 'MAGT' => 39600, + 'MAWT' => 21600, + 'MDT' => -21600, + 'MESZ' => 7200, + 'MEZ' => 3600, + 'MHT' => 43200, + 'MIT' => -34200, + 'MNST' => 32400, + 'MSDT' => 14400, + 'MSST' => 10800, + 'MST' => -25200, + 'MUT' => 14400, + 'MVT' => 18000, + 'MYT' => 28800, + 'NCT' => 39600, + 'NDT' => -9000, + 'NFT' => 41400, + 'NMIT' => 36000, + 'NOVST' => 25200, + 'NOVT' => 21600, + 'NPT' => 20700, + 'NRT' => 43200, + 'NST' => -12600, + 'NUT' => -39600, + 'NZDT' => 46800, + 'NZST' => 43200, + 'OMSST' => 25200, + 'OMST' => 21600, + 'PDT' => -25200, + 'PET' => -18000, + 'PETST' => 46800, + 'PETT' => 43200, + 'PGT' => 36000, + 'PHOT' => 46800, + 'PHT' => 28800, + 'PKT' => 18000, + 'PMDT' => -7200, + 'PMST' => -10800, + 'PONT' => 39600, + 'PST' => -28800, + 'PWT' => 32400, + 'PYST' => -10800, + 'PYT' => -14400, + 'RET' => 14400, + 'ROTT' => -10800, + 'SAMST' => 18000, + 'SAMT' => 14400, + 'SAST' => 7200, + 'SBT' => 39600, + 'SCDT' => 46800, + 'SCST' => 43200, + 'SCT' => 14400, + 'SEST' => 3600, + 'SGT' => 28800, + 'SIT' => 28800, + 'SRT' => -10800, + 'SST' => -39600, + 'SYST' => 10800, + 'SYT' => 7200, + 'TFT' => 18000, + 'THAT' => -36000, + 'TJT' => 18000, + 'TKT' => -36000, + 'TMT' => 18000, + 'TOT' => 46800, + 'TPT' => 32400, + 'TRUT' => 36000, + 'TVT' => 43200, + 'TWT' => 28800, + 'UYST' => -7200, + 'UYT' => -10800, + 'UZT' => 18000, + 'VET' => -14400, + 'VLAST' => 39600, + 'VLAT' => 36000, + 'VOST' => 21600, + 'VUT' => 39600, + 'WAST' => 7200, + 'WAT' => 3600, + 'WDT' => 32400, + 'WEST' => 3600, + 'WFT' => 43200, + 'WIB' => 25200, + 'WIT' => 32400, + 'WITA' => 28800, + 'WKST' => 18000, + 'WST' => 28800, + 'YAKST' => 36000, + 'YAKT' => 32400, + 'YAPT' => 36000, + 'YEKST' => 21600, + 'YEKT' => 18000, + ); + + /** + * Cached PCRE for SimplePie_Parse_Date::$day + * + * @access protected + * @var string + */ + var $day_pcre; + + /** + * Cached PCRE for SimplePie_Parse_Date::$month + * + * @access protected + * @var string + */ + var $month_pcre; + + /** + * Array of user-added callback methods + * + * @access private + * @var array + */ + var $built_in = array(); + + /** + * Array of user-added callback methods + * + * @access private + * @var array + */ + var $user = array(); + + /** + * Create new SimplePie_Parse_Date object, and set self::day_pcre, + * self::month_pcre, and self::built_in + * + * @access private + */ + public function __construct() + { + $this->day_pcre = '(' . implode(array_keys($this->day), '|') . ')'; + $this->month_pcre = '(' . implode(array_keys($this->month), '|') . ')'; + + static $cache; + if (!isset($cache[get_class($this)])) + { + $all_methods = get_class_methods($this); + + foreach ($all_methods as $method) + { + if (strtolower(substr($method, 0, 5)) === 'date_') + { + $cache[get_class($this)][] = $method; + } + } + } + + foreach ($cache[get_class($this)] as $method) + { + $this->built_in[] = $method; + } + } + + /** + * Get the object + * + * @access public + */ + public static function get() + { + static $object; + if (!$object) + { + $object = new SimplePie_Parse_Date; + } + return $object; + } + + /** + * Parse a date + * + * @final + * @access public + * @param string $date Date to parse + * @return int Timestamp corresponding to date string, or false on failure + */ + public function parse($date) + { + foreach ($this->user as $method) + { + if (($returned = call_user_func($method, $date)) !== false) + { + return $returned; + } + } + + foreach ($this->built_in as $method) + { + if (($returned = call_user_func(array($this, $method), $date)) !== false) + { + return $returned; + } + } + + return false; + } + + /** + * Add a callback method to parse a date + * + * @final + * @access public + * @param callback $callback + */ + public function add_callback($callback) + { + if (is_callable($callback)) + { + $this->user[] = $callback; + } + else + { + trigger_error('User-supplied function must be a valid callback', E_USER_WARNING); + } + } + + /** + * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as + * well as allowing any of upper or lower case "T", horizontal tabs, or + * spaces to be used as the time seperator (including more than one)) + * + * @access protected + * @return int Timestamp + */ + public function date_w3cdtf($date) + { + static $pcre; + if (!$pcre) + { + $year = '([0-9]{4})'; + $month = $day = $hour = $minute = $second = '([0-9]{2})'; + $decimal = '([0-9]*)'; + $zone = '(?:(Z)|([+\-])([0-9]{1,2}):?([0-9]{1,2}))'; + $pcre = '/^' . $year . '(?:-?' . $month . '(?:-?' . $day . '(?:[Tt\x09\x20]+' . $hour . '(?::?' . $minute . '(?::?' . $second . '(?:.' . $decimal . ')?)?)?' . $zone . ')?)?)?$/'; + } + if (preg_match($pcre, $date, $match)) + { + /* + Capturing subpatterns: + 1: Year + 2: Month + 3: Day + 4: Hour + 5: Minute + 6: Second + 7: Decimal fraction of a second + 8: Zulu + 9: Timezone ± + 10: Timezone hours + 11: Timezone minutes + */ + + // Fill in empty matches + for ($i = count($match); $i <= 3; $i++) + { + $match[$i] = '1'; + } + + for ($i = count($match); $i <= 7; $i++) + { + $match[$i] = '0'; + } + + // Numeric timezone + if (isset($match[9]) && $match[9] !== '') + { + $timezone = $match[10] * 3600; + $timezone += $match[11] * 60; + if ($match[9] === '-') + { + $timezone = 0 - $timezone; + } + } + else + { + $timezone = 0; + } + + // Convert the number of seconds to an integer, taking decimals into account + $second = round($match[6] + $match[7] / pow(10, strlen($match[7]))); + + return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone; + } + else + { + return false; + } + } + + /** + * Remove RFC822 comments + * + * @access protected + * @param string $data Data to strip comments from + * @return string Comment stripped string + */ + public function remove_rfc2822_comments($string) + { + $string = (string) $string; + $position = 0; + $length = strlen($string); + $depth = 0; + + $output = ''; + + while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) + { + $output .= substr($string, $position, $pos - $position); + $position = $pos + 1; + if ($string[$pos - 1] !== '\\') + { + $depth++; + while ($depth && $position < $length) + { + $position += strcspn($string, '()', $position); + if ($string[$position - 1] === '\\') + { + $position++; + continue; + } + elseif (isset($string[$position])) + { + switch ($string[$position]) + { + case '(': + $depth++; + break; + + case ')': + $depth--; + break; + } + $position++; + } + else + { + break; + } + } + } + else + { + $output .= '('; + } + } + $output .= substr($string, $position); + + return $output; + } + + /** + * Parse RFC2822's date format + * + * @access protected + * @return int Timestamp + */ + public function date_rfc2822($date) + { + static $pcre; + if (!$pcre) + { + $wsp = '[\x09\x20]'; + $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)'; + $optional_fws = $fws . '?'; + $day_name = $this->day_pcre; + $month = $this->month_pcre; + $day = '([0-9]{1,2})'; + $hour = $minute = $second = '([0-9]{2})'; + $year = '([0-9]{2,4})'; + $num_zone = '([+\-])([0-9]{2})([0-9]{2})'; + $character_zone = '([A-Z]{1,5})'; + $zone = '(?:' . $num_zone . '|' . $character_zone . ')'; + $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i'; + } + if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match)) + { + /* + Capturing subpatterns: + 1: Day name + 2: Day + 3: Month + 4: Year + 5: Hour + 6: Minute + 7: Second + 8: Timezone ± + 9: Timezone hours + 10: Timezone minutes + 11: Alphabetic timezone + */ + + // Find the month number + $month = $this->month[strtolower($match[3])]; + + // Numeric timezone + if ($match[8] !== '') + { + $timezone = $match[9] * 3600; + $timezone += $match[10] * 60; + if ($match[8] === '-') + { + $timezone = 0 - $timezone; + } + } + // Character timezone + elseif (isset($this->timezone[strtoupper($match[11])])) + { + $timezone = $this->timezone[strtoupper($match[11])]; + } + // Assume everything else to be -0000 + else + { + $timezone = 0; + } + + // Deal with 2/3 digit years + if ($match[4] < 50) + { + $match[4] += 2000; + } + elseif ($match[4] < 1000) + { + $match[4] += 1900; + } + + // Second is optional, if it is empty set it to zero + if ($match[7] !== '') + { + $second = $match[7]; + } + else + { + $second = 0; + } + + return gmmktime($match[5], $match[6], $second, $month, $match[2], $match[4]) - $timezone; + } + else + { + return false; + } + } + + /** + * Parse RFC850's date format + * + * @access protected + * @return int Timestamp + */ + public function date_rfc850($date) + { + static $pcre; + if (!$pcre) + { + $space = '[\x09\x20]+'; + $day_name = $this->day_pcre; + $month = $this->month_pcre; + $day = '([0-9]{1,2})'; + $year = $hour = $minute = $second = '([0-9]{2})'; + $zone = '([A-Z]{1,5})'; + $pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i'; + } + if (preg_match($pcre, $date, $match)) + { + /* + Capturing subpatterns: + 1: Day name + 2: Day + 3: Month + 4: Year + 5: Hour + 6: Minute + 7: Second + 8: Timezone + */ + + // Month + $month = $this->month[strtolower($match[3])]; + + // Character timezone + if (isset($this->timezone[strtoupper($match[8])])) + { + $timezone = $this->timezone[strtoupper($match[8])]; + } + // Assume everything else to be -0000 + else + { + $timezone = 0; + } + + // Deal with 2 digit year + if ($match[4] < 50) + { + $match[4] += 2000; + } + else + { + $match[4] += 1900; + } + + return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone; + } + else + { + return false; + } + } + + /** + * Parse C99's asctime()'s date format + * + * @access protected + * @return int Timestamp + */ + public function date_asctime($date) + { + static $pcre; + if (!$pcre) + { + $space = '[\x09\x20]+'; + $wday_name = $this->day_pcre; + $mon_name = $this->month_pcre; + $day = '([0-9]{1,2})'; + $hour = $sec = $min = '([0-9]{2})'; + $year = '([0-9]{4})'; + $terminator = '\x0A?\x00?'; + $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i'; + } + if (preg_match($pcre, $date, $match)) + { + /* + Capturing subpatterns: + 1: Day name + 2: Month + 3: Day + 4: Hour + 5: Minute + 6: Second + 7: Year + */ + + $month = $this->month[strtolower($match[2])]; + return gmmktime($match[4], $match[5], $match[6], $month, $match[3], $match[7]); + } + else + { + return false; + } + } + + /** + * Parse dates using strtotime() + * + * @access protected + * @return int Timestamp + */ + public function date_strtotime($date) + { + $strtotime = strtotime($date); + if ($strtotime === -1 || $strtotime === false) + { + return false; + } + else + { + return $strtotime; + } + } +} + diff --git a/src/wp-includes/SimplePie/Parser.php b/src/wp-includes/SimplePie/Parser.php new file mode 100644 index 0000000..d698552 --- /dev/null +++ b/src/wp-includes/SimplePie/Parser.php @@ -0,0 +1,407 @@ +<?php +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + +/** + * Parses XML into something sane + * + * + * This class can be overloaded with {@see SimplePie::set_parser_class()} + * + * @package SimplePie + * @subpackage Parsing + */ +class SimplePie_Parser +{ + var $error_code; + var $error_string; + var $current_line; + var $current_column; + var $current_byte; + var $separator = ' '; + var $namespace = array(''); + var $element = array(''); + var $xml_base = array(''); + var $xml_base_explicit = array(false); + var $xml_lang = array(''); + var $data = array(); + var $datas = array(array()); + var $current_xhtml_construct = -1; + var $encoding; + protected $registry; + + public function set_registry(SimplePie_Registry $registry) + { + $this->registry = $registry; + } + + public function parse(&$data, $encoding) + { + // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character + if (strtoupper($encoding) === 'US-ASCII') + { + $this->encoding = 'UTF-8'; + } + else + { + $this->encoding = $encoding; + } + + // Strip BOM: + // UTF-32 Big Endian BOM + if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") + { + $data = substr($data, 4); + } + // UTF-32 Little Endian BOM + elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") + { + $data = substr($data, 4); + } + // UTF-16 Big Endian BOM + elseif (substr($data, 0, 2) === "\xFE\xFF") + { + $data = substr($data, 2); + } + // UTF-16 Little Endian BOM + elseif (substr($data, 0, 2) === "\xFF\xFE") + { + $data = substr($data, 2); + } + // UTF-8 BOM + elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") + { + $data = substr($data, 3); + } + + if (substr($data, 0, 5) === '<?xml' && strspn(substr($data, 5, 1), "\x09\x0A\x0D\x20") && ($pos = strpos($data, '?>')) !== false) + { + $declaration = $this->registry->create('XML_Declaration_Parser', array(substr($data, 5, $pos - 5))); + if ($declaration->parse()) + { + $data = substr($data, $pos + 2); + $data = '<?xml version="' . $declaration->version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' . $data; + } + else + { + $this->error_string = 'SimplePie bug! Please report this!'; + return false; + } + } + + $return = true; + + static $xml_is_sane = null; + if ($xml_is_sane === null) + { + $parser_check = xml_parser_create(); + xml_parse_into_struct($parser_check, '<foo>&</foo>', $values); + xml_parser_free($parser_check); + $xml_is_sane = isset($values[0]['value']); + } + + // Create the parser + if ($xml_is_sane) + { + $xml = xml_parser_create_ns($this->encoding, $this->separator); + xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1); + xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0); + xml_set_object($xml, $this); + xml_set_character_data_handler($xml, 'cdata'); + xml_set_element_handler($xml, 'tag_open', 'tag_close'); + + // Parse! + if (!xml_parse($xml, $data, true)) + { + $this->error_code = xml_get_error_code($xml); + $this->error_string = xml_error_string($this->error_code); + $return = false; + } + $this->current_line = xml_get_current_line_number($xml); + $this->current_column = xml_get_current_column_number($xml); + $this->current_byte = xml_get_current_byte_index($xml); + xml_parser_free($xml); + return $return; + } + else + { + libxml_clear_errors(); + $xml = new XMLReader(); + $xml->xml($data); + while (@$xml->read()) + { + switch ($xml->nodeType) + { + + case constant('XMLReader::END_ELEMENT'): + if ($xml->namespaceURI !== '') + { + $tagName = $xml->namespaceURI . $this->separator . $xml->localName; + } + else + { + $tagName = $xml->localName; + } + $this->tag_close(null, $tagName); + break; + case constant('XMLReader::ELEMENT'): + $empty = $xml->isEmptyElement; + if ($xml->namespaceURI !== '') + { + $tagName = $xml->namespaceURI . $this->separator . $xml->localName; + } + else + { + $tagName = $xml->localName; + } + $attributes = array(); + while ($xml->moveToNextAttribute()) + { + if ($xml->namespaceURI !== '') + { + $attrName = $xml->namespaceURI . $this->separator . $xml->localName; + } + else + { + $attrName = $xml->localName; + } + $attributes[$attrName] = $xml->value; + } + $this->tag_open(null, $tagName, $attributes); + if ($empty) + { + $this->tag_close(null, $tagName); + } + break; + case constant('XMLReader::TEXT'): + + case constant('XMLReader::CDATA'): + $this->cdata(null, $xml->value); + break; + } + } + if ($error = libxml_get_last_error()) + { + $this->error_code = $error->code; + $this->error_string = $error->message; + $this->current_line = $error->line; + $this->current_column = $error->column; + return false; + } + else + { + return true; + } + } + } + + public function get_error_code() + { + return $this->error_code; + } + + public function get_error_string() + { + return $this->error_string; + } + + public function get_current_line() + { + return $this->current_line; + } + + public function get_current_column() + { + return $this->current_column; + } + + public function get_current_byte() + { + return $this->current_byte; + } + + public function get_data() + { + return $this->data; + } + + public function tag_open($parser, $tag, $attributes) + { + list($this->namespace[], $this->element[]) = $this->split_ns($tag); + + $attribs = array(); + foreach ($attributes as $name => $value) + { + list($attrib_namespace, $attribute) = $this->split_ns($name); + $attribs[$attrib_namespace][$attribute] = $value; + } + + if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['base'])) + { + $base = $this->registry->call('Misc', 'absolutize_url', array($attribs[SIMPLEPIE_NAMESPACE_XML]['base'], end($this->xml_base))); + if ($base !== false) + { + $this->xml_base[] = $base; + $this->xml_base_explicit[] = true; + } + } + else + { + $this->xml_base[] = end($this->xml_base); + $this->xml_base_explicit[] = end($this->xml_base_explicit); + } + + if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['lang'])) + { + $this->xml_lang[] = $attribs[SIMPLEPIE_NAMESPACE_XML]['lang']; + } + else + { + $this->xml_lang[] = end($this->xml_lang); + } + + if ($this->current_xhtml_construct >= 0) + { + $this->current_xhtml_construct++; + if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML) + { + $this->data['data'] .= '<' . end($this->element); + if (isset($attribs[''])) + { + foreach ($attribs[''] as $name => $value) + { + $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"'; + } + } + $this->data['data'] .= '>'; + } + } + else + { + $this->datas[] =& $this->data; + $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][]; + $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang)); + if ((end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] === 'xml') + || (end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] === 'xhtml') + || (end($this->namespace) === SIMPLEPIE_NAMESPACE_RSS_20 && in_array(end($this->element), array('title'))) + || (end($this->namespace) === SIMPLEPIE_NAMESPACE_RSS_090 && in_array(end($this->element), array('title'))) + || (end($this->namespace) === SIMPLEPIE_NAMESPACE_RSS_10 && in_array(end($this->element), array('title')))) + { + $this->current_xhtml_construct = 0; + } + } + } + + public function cdata($parser, $cdata) + { + if ($this->current_xhtml_construct >= 0) + { + $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding); + } + else + { + $this->data['data'] .= $cdata; + } + } + + public function tag_close($parser, $tag) + { + if ($this->current_xhtml_construct >= 0) + { + $this->current_xhtml_construct--; + if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param'))) + { + $this->data['data'] .= '</' . end($this->element) . '>'; + } + } + if ($this->current_xhtml_construct === -1) + { + $this->data =& $this->datas[count($this->datas) - 1]; + array_pop($this->datas); + } + + array_pop($this->element); + array_pop($this->namespace); + array_pop($this->xml_base); + array_pop($this->xml_base_explicit); + array_pop($this->xml_lang); + } + + public function split_ns($string) + { + static $cache = array(); + if (!isset($cache[$string])) + { + if ($pos = strpos($string, $this->separator)) + { + static $separator_length; + if (!$separator_length) + { + $separator_length = strlen($this->separator); + } + $namespace = substr($string, 0, $pos); + $local_name = substr($string, $pos + $separator_length); + if (strtolower($namespace) === SIMPLEPIE_NAMESPACE_ITUNES) + { + $namespace = SIMPLEPIE_NAMESPACE_ITUNES; + } + + // Normalize the Media RSS namespaces + if ($namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG || + $namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG2 || + $namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG3 || + $namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG4 || + $namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG5 ) + { + $namespace = SIMPLEPIE_NAMESPACE_MEDIARSS; + } + $cache[$string] = array($namespace, $local_name); + } + else + { + $cache[$string] = array('', $string); + } + } + return $cache[$string]; + } +} diff --git a/src/wp-includes/SimplePie/Rating.php b/src/wp-includes/SimplePie/Rating.php new file mode 100644 index 0000000..8689e5d --- /dev/null +++ b/src/wp-includes/SimplePie/Rating.php @@ -0,0 +1,129 @@ +<?php +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + +/** + * Handles `<media:rating>` or `<itunes:explicit>` tags as defined in Media RSS and iTunes RSS respectively + * + * Used by {@see SimplePie_Enclosure::get_rating()} and {@see SimplePie_Enclosure::get_ratings()} + * + * This class can be overloaded with {@see SimplePie::set_rating_class()} + * + * @package SimplePie + * @subpackage API + */ +class SimplePie_Rating +{ + /** + * Rating scheme + * + * @var string + * @see get_scheme() + */ + var $scheme; + + /** + * Rating value + * + * @var string + * @see get_value() + */ + var $value; + + /** + * Constructor, used to input the data + * + * For documentation on all the parameters, see the corresponding + * properties and their accessors + */ + public function __construct($scheme = null, $value = null) + { + $this->scheme = $scheme; + $this->value = $value; + } + + /** + * String-ified version + * + * @return string + */ + public function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + /** + * Get the organizational scheme for the rating + * + * @return string|null + */ + public function get_scheme() + { + if ($this->scheme !== null) + { + return $this->scheme; + } + else + { + return null; + } + } + + /** + * Get the value of the rating + * + * @return string|null + */ + public function get_value() + { + if ($this->value !== null) + { + return $this->value; + } + else + { + return null; + } + } +} diff --git a/src/wp-includes/SimplePie/Registry.php b/src/wp-includes/SimplePie/Registry.php new file mode 100644 index 0000000..1072cde --- /dev/null +++ b/src/wp-includes/SimplePie/Registry.php @@ -0,0 +1,225 @@ +<?php +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + +/** + * Handles creating objects and calling methods + * + * Access this via {@see SimplePie::get_registry()} + * + * @package SimplePie + */ +class SimplePie_Registry +{ + /** + * Default class mapping + * + * Overriding classes *must* subclass these. + * + * @var array + */ + protected $default = array( + 'Cache' => 'SimplePie_Cache', + 'Locator' => 'SimplePie_Locator', + 'Parser' => 'SimplePie_Parser', + 'File' => 'SimplePie_File', + 'Sanitize' => 'SimplePie_Sanitize', + 'Item' => 'SimplePie_Item', + 'Author' => 'SimplePie_Author', + 'Category' => 'SimplePie_Category', + 'Enclosure' => 'SimplePie_Enclosure', + 'Caption' => 'SimplePie_Caption', + 'Copyright' => 'SimplePie_Copyright', + 'Credit' => 'SimplePie_Credit', + 'Rating' => 'SimplePie_Rating', + 'Restriction' => 'SimplePie_Restriction', + 'Content_Type_Sniffer' => 'SimplePie_Content_Type_Sniffer', + 'Source' => 'SimplePie_Source', + 'Misc' => 'SimplePie_Misc', + 'XML_Declaration_Parser' => 'SimplePie_XML_Declaration_Parser', + 'Parse_Date' => 'SimplePie_Parse_Date', + ); + + /** + * Class mapping + * + * @see register() + * @var array + */ + protected $classes = array(); + + /** + * Legacy classes + * + * @see register() + * @var array + */ + protected $legacy = array(); + + /** + * Constructor + * + * No-op + */ + public function __construct() { } + + /** + * Register a class + * + * @param string $type See {@see $default} for names + * @param string $class Class name, must subclass the corresponding default + * @param bool $legacy Whether to enable legacy support for this class + * @return bool Successfulness + */ + public function register($type, $class, $legacy = false) + { + if (!is_subclass_of($class, $this->default[$type])) + { + return false; + } + + $this->classes[$type] = $class; + + if ($legacy) + { + $this->legacy[] = $class; + } + + return true; + } + + /** + * Get the class registered for a type + * + * Where possible, use {@see create()} or {@see call()} instead + * + * @param string $type + * @return string|null + */ + public function get_class($type) + { + if (!empty($this->classes[$type])) + { + return $this->classes[$type]; + } + if (!empty($this->default[$type])) + { + return $this->default[$type]; + } + + return null; + } + + /** + * Create a new instance of a given type + * + * @param string $type + * @param array $parameters Parameters to pass to the constructor + * @return object Instance of class + */ + public function &create($type, $parameters = array()) + { + $class = $this->get_class($type); + + if (in_array($class, $this->legacy)) + { + switch ($type) + { + case 'locator': + // Legacy: file, timeout, useragent, file_class, max_checked_feeds, content_type_sniffer_class + // Specified: file, timeout, useragent, max_checked_feeds + $replacement = array($this->get_class('file'), $parameters[3], $this->get_class('content_type_sniffer')); + array_splice($parameters, 3, 1, $replacement); + break; + } + } + + if (!method_exists($class, '__construct')) + { + $instance = new $class; + } + else + { + $reflector = new ReflectionClass($class); + $instance = $reflector->newInstanceArgs($parameters); + } + + if (method_exists($instance, 'set_registry')) + { + $instance->set_registry($this); + } + return $instance; + } + + /** + * Call a static method for a type + * + * @param string $type + * @param string $method + * @param array $parameters + * @return mixed + */ + public function &call($type, $method, $parameters = array()) + { + $class = $this->get_class($type); + + if (in_array($class, $this->legacy)) + { + switch ($type) + { + case 'Cache': + // For backwards compatibility with old non-static + // Cache::create() methods + if ($method === 'get_handler') + { + $result = @call_user_func_array(array($class, 'create'), $parameters); + return $result; + } + break; + } + } + + $result = call_user_func_array(array($class, $method), $parameters); + return $result; + } +} \ No newline at end of file diff --git a/src/wp-includes/SimplePie/Restriction.php b/src/wp-includes/SimplePie/Restriction.php new file mode 100644 index 0000000..4ba371b --- /dev/null +++ b/src/wp-includes/SimplePie/Restriction.php @@ -0,0 +1,155 @@ +<?php +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + +/** + * Handles `<media:restriction>` as defined in Media RSS + * + * Used by {@see SimplePie_Enclosure::get_restriction()} and {@see SimplePie_Enclosure::get_restrictions()} + * + * This class can be overloaded with {@see SimplePie::set_restriction_class()} + * + * @package SimplePie + * @subpackage API + */ +class SimplePie_Restriction +{ + /** + * Relationship ('allow'/'deny') + * + * @var string + * @see get_relationship() + */ + var $relationship; + + /** + * Type of restriction + * + * @var string + * @see get_type() + */ + var $type; + + /** + * Restricted values + * + * @var string + * @see get_value() + */ + var $value; + + /** + * Constructor, used to input the data + * + * For documentation on all the parameters, see the corresponding + * properties and their accessors + */ + public function __construct($relationship = null, $type = null, $value = null) + { + $this->relationship = $relationship; + $this->type = $type; + $this->value = $value; + } + + /** + * String-ified version + * + * @return string + */ + public function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + /** + * Get the relationship + * + * @return string|null Either 'allow' or 'deny' + */ + public function get_relationship() + { + if ($this->relationship !== null) + { + return $this->relationship; + } + else + { + return null; + } + } + + /** + * Get the type + * + * @return string|null + */ + public function get_type() + { + if ($this->type !== null) + { + return $this->type; + } + else + { + return null; + } + } + + /** + * Get the list of restricted things + * + * @return string|null + */ + public function get_value() + { + if ($this->value !== null) + { + return $this->value; + } + else + { + return null; + } + } +} diff --git a/src/wp-includes/SimplePie/Sanitize.php b/src/wp-includes/SimplePie/Sanitize.php new file mode 100644 index 0000000..1ce047a --- /dev/null +++ b/src/wp-includes/SimplePie/Sanitize.php @@ -0,0 +1,554 @@ +<?php +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + +/** + * Used for data cleanup and post-processing + * + * + * This class can be overloaded with {@see SimplePie::set_sanitize_class()} + * + * @package SimplePie + * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags + */ +class SimplePie_Sanitize +{ + // Private vars + var $base; + + // Options + var $remove_div = true; + var $image_handler = ''; + var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); + var $encode_instead_of_strip = false; + var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); + var $strip_comments = false; + var $output_encoding = 'UTF-8'; + var $enable_cache = true; + var $cache_location = './cache'; + var $cache_name_function = 'md5'; + var $timeout = 10; + var $useragent = ''; + var $force_fsockopen = false; + var $replace_url_attributes = null; + + public function __construct() + { + // Set defaults + $this->set_url_replacements(null); + } + + public function remove_div($enable = true) + { + $this->remove_div = (bool) $enable; + } + + public function set_image_handler($page = false) + { + if ($page) + { + $this->image_handler = (string) $page; + } + else + { + $this->image_handler = false; + } + } + + public function set_registry(SimplePie_Registry $registry) + { + $this->registry = $registry; + } + + public function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache') + { + if (isset($enable_cache)) + { + $this->enable_cache = (bool) $enable_cache; + } + + if ($cache_location) + { + $this->cache_location = (string) $cache_location; + } + + if ($cache_name_function) + { + $this->cache_name_function = (string) $cache_name_function; + } + } + + public function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false) + { + if ($timeout) + { + $this->timeout = (string) $timeout; + } + + if ($useragent) + { + $this->useragent = (string) $useragent; + } + + if ($force_fsockopen) + { + $this->force_fsockopen = (string) $force_fsockopen; + } + } + + public function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style')) + { + if ($tags) + { + if (is_array($tags)) + { + $this->strip_htmltags = $tags; + } + else + { + $this->strip_htmltags = explode(',', $tags); + } + } + else + { + $this->strip_htmltags = false; + } + } + + public function encode_instead_of_strip($encode = false) + { + $this->encode_instead_of_strip = (bool) $encode; + } + + public function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc')) + { + if ($attribs) + { + if (is_array($attribs)) + { + $this->strip_attributes = $attribs; + } + else + { + $this->strip_attributes = explode(',', $attribs); + } + } + else + { + $this->strip_attributes = false; + } + } + + public function strip_comments($strip = false) + { + $this->strip_comments = (bool) $strip; + } + + public function set_output_encoding($encoding = 'UTF-8') + { + $this->output_encoding = (string) $encoding; + } + + /** + * Set element/attribute key/value pairs of HTML attributes + * containing URLs that need to be resolved relative to the feed + * + * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite, + * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite, + * |q|@cite + * + * @since 1.0 + * @param array|null $element_attribute Element/attribute key/value pairs, null for default + */ + public function set_url_replacements($element_attribute = null) + { + if ($element_attribute === null) + { + $element_attribute = array( + 'a' => 'href', + 'area' => 'href', + 'blockquote' => 'cite', + 'del' => 'cite', + 'form' => 'action', + 'img' => array( + 'longdesc', + 'src' + ), + 'input' => 'src', + 'ins' => 'cite', + 'q' => 'cite' + ); + } + $this->replace_url_attributes = (array) $element_attribute; + } + + public function sanitize($data, $type, $base = '') + { + $data = trim($data); + if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI) + { + if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML) + { + if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data)) + { + $type |= SIMPLEPIE_CONSTRUCT_HTML; + } + else + { + $type |= SIMPLEPIE_CONSTRUCT_TEXT; + } + } + + if ($type & SIMPLEPIE_CONSTRUCT_BASE64) + { + $data = base64_decode($data); + } + + if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML)) + { + + if (!class_exists('DOMDocument')) + { + $this->registry->call('Misc', 'error', array('DOMDocument not found, unable to use sanitizer', E_USER_WARNING, __FILE__, __LINE__)); + return ''; + } + $document = new DOMDocument(); + $document->encoding = 'UTF-8'; + $data = $this->preprocess($data, $type); + + set_error_handler(array('SimplePie_Misc', 'silence_errors')); + $document->loadHTML($data); + restore_error_handler(); + + // Strip comments + if ($this->strip_comments) + { + $xpath = new DOMXPath($document); + $comments = $xpath->query('//comment()'); + + foreach ($comments as $comment) + { + $comment->parentNode->removeChild($comment); + } + } + + // Strip out HTML tags and attributes that might cause various security problems. + // Based on recommendations by Mark Pilgrim at: + // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely + if ($this->strip_htmltags) + { + foreach ($this->strip_htmltags as $tag) + { + $this->strip_tag($tag, $document, $type); + } + } + + if ($this->strip_attributes) + { + foreach ($this->strip_attributes as $attrib) + { + $this->strip_attr($attrib, $document); + } + } + + // Replace relative URLs + $this->base = $base; + foreach ($this->replace_url_attributes as $element => $attributes) + { + $this->replace_urls($document, $element, $attributes); + } + + // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags. + if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache) + { + $images = $document->getElementsByTagName('img'); + foreach ($images as $img) + { + if ($img->hasAttribute('src')) + { + $image_url = call_user_func($this->cache_name_function, $img->getAttribute('src')); + $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, $image_url, 'spi')); + + if ($cache->load()) + { + $img->setAttribute('src', $this->image_handler . $image_url); + } + else + { + $file = $this->registry->create('File', array($img->getAttribute('src'), $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen)); + $headers = $file->headers; + + if ($file->success && ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) + { + if ($cache->save(array('headers' => $file->headers, 'body' => $file->body))) + { + $img->setAttribute('src', $this->image_handler . $image_url); + } + else + { + trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); + } + } + } + } + } + } + + // Remove the DOCTYPE + // Seems to cause segfaulting if we don't do this + if ($document->firstChild instanceof DOMDocumentType) + { + $document->removeChild($document->firstChild); + } + + // Move everything from the body to the root + $real_body = $document->getElementsByTagName('body')->item(0)->childNodes->item(0); + $document->replaceChild($real_body, $document->firstChild); + + // Finally, convert to a HTML string + $data = trim($document->saveHTML()); + + if ($this->remove_div) + { + $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '', $data); + $data = preg_replace('/<\/div>$/', '', $data); + } + else + { + $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '<div>', $data); + } + } + + if ($type & SIMPLEPIE_CONSTRUCT_IRI) + { + $absolute = $this->registry->call('Misc', 'absolutize_url', array($data, $base)); + if ($absolute !== false) + { + $data = $absolute; + } + } + + if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI)) + { + $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8'); + } + + if ($this->output_encoding !== 'UTF-8') + { + $data = $this->registry->call('Misc', 'change_encoding', array($data, 'UTF-8', $this->output_encoding)); + } + } + return $data; + } + + protected function preprocess($html, $type) + { + $ret = ''; + if ($type & ~SIMPLEPIE_CONSTRUCT_XHTML) + { + // Atom XHTML constructs are wrapped with a div by default + // Note: No protection if $html contains a stray </div>! + $html = '<div>' . $html . '</div>'; + $ret .= '<!DOCTYPE html>'; + $content_type = 'text/html'; + } + else + { + $ret .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'; + $content_type = 'application/xhtml+xml'; + } + + $ret .= '<html><head>'; + $ret .= '<meta http-equiv="Content-Type" content="' . $content_type . '; charset=utf-8" />'; + $ret .= '</head><body>' . $html . '</body></html>'; + return $ret; + } + + public function replace_urls($document, $tag, $attributes) + { + if (!is_array($attributes)) + { + $attributes = array($attributes); + } + + if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags)) + { + $elements = $document->getElementsByTagName($tag); + foreach ($elements as $element) + { + foreach ($attributes as $attribute) + { + if ($element->hasAttribute($attribute)) + { + $value = $this->registry->call('Misc', 'absolutize_url', array($element->getAttribute($attribute), $this->base)); + if ($value !== false) + { + $element->setAttribute($attribute, $value); + } + } + } + } + } + } + + public function do_strip_htmltags($match) + { + if ($this->encode_instead_of_strip) + { + if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style'))) + { + $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8'); + $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8'); + return "<$match[1]$match[2]>$match[3]</$match[1]>"; + } + else + { + return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8'); + } + } + elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style'))) + { + return $match[4]; + } + else + { + return ''; + } + } + + protected function strip_tag($tag, $document, $type) + { + $xpath = new DOMXPath($document); + $elements = $xpath->query('body//' . $tag); + if ($this->encode_instead_of_strip) + { + foreach ($elements as $element) + { + $fragment = $document->createDocumentFragment(); + + // For elements which aren't script or style, include the tag itself + if (!in_array($tag, array('script', 'style'))) + { + $text = '<' . $tag; + if ($element->hasAttributes()) + { + $attrs = array(); + foreach ($element->attributes as $name => $attr) + { + $value = $attr->value; + + // In XHTML, empty values should never exist, so we repeat the value + if (empty($value) && ($type & SIMPLEPIE_CONSTRUCT_XHTML)) + { + $value = $name; + } + // For HTML, empty is fine + elseif (empty($value) && ($type & SIMPLEPIE_CONSTRUCT_HTML)) + { + $attrs[] = $name; + continue; + } + + // Standard attribute text + $attrs[] = $name . '="' . $attr->value . '"'; + } + $text .= ' ' . implode(' ', $attrs); + } + $text .= '>'; + $fragment->appendChild(new DOMText($text)); + } + + $number = $element->childNodes->length; + for ($i = $number; $i > 0; $i--) + { + $child = $element->childNodes->item(0); + $fragment->appendChild($child); + } + + if (!in_array($tag, array('script', 'style'))) + { + $fragment->appendChild(new DOMText('</' . $tag . '>')); + } + + $element->parentNode->replaceChild($fragment, $element); + } + + return; + } + elseif (in_array($tag, array('script', 'style'))) + { + foreach ($elements as $element) + { + $element->parentNode->removeChild($element); + } + + return; + } + else + { + foreach ($elements as $element) + { + $fragment = $document->createDocumentFragment(); + $number = $element->childNodes->length; + for ($i = $number; $i > 0; $i--) + { + $child = $element->childNodes->item(0); + $fragment->appendChild($child); + } + + $element->parentNode->replaceChild($fragment, $element); + } + } + } + + protected function strip_attr($attrib, $document) + { + $xpath = new DOMXPath($document); + $elements = $xpath->query('//*[@' . $attrib . ']'); + + foreach ($elements as $element) + { + $element->removeAttribute($attrib); + } + } +} diff --git a/src/wp-includes/SimplePie/Source.php b/src/wp-includes/SimplePie/Source.php new file mode 100644 index 0000000..51d8e6c --- /dev/null +++ b/src/wp-includes/SimplePie/Source.php @@ -0,0 +1,611 @@ +<?php +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + +/** + * Handles `<atom:source>` + * + * Used by {@see SimplePie_Item::get_source()} + * + * This class can be overloaded with {@see SimplePie::set_source_class()} + * + * @package SimplePie + * @subpackage API + */ +class SimplePie_Source +{ + var $item; + var $data = array(); + protected $registry; + + public function __construct($item, $data) + { + $this->item = $item; + $this->data = $data; + } + + public function set_registry(SimplePie_Registry $registry) + { + $this->registry = $registry; + } + + public function __toString() + { + return md5(serialize($this->data)); + } + + public function get_source_tags($namespace, $tag) + { + if (isset($this->data['child'][$namespace][$tag])) + { + return $this->data['child'][$namespace][$tag]; + } + else + { + return null; + } + } + + public function get_base($element = array()) + { + return $this->item->get_base($element); + } + + public function sanitize($data, $type, $base = '') + { + return $this->item->sanitize($data, $type, $base); + } + + public function get_item() + { + return $this->item; + } + + public function get_title() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + public function get_category($key = 0) + { + $categories = $this->get_categories(); + if (isset($categories[$key])) + { + return $categories[$key]; + } + else + { + return null; + } + } + + public function get_categories() + { + $categories = array(); + + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['attribs']['']['term'])) + { + $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) + { + // This is really the label, but keep this as the term also for BC. + // Label will also work on retrieving because that falls back to term. + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + if (isset($category['attribs']['']['domain'])) + { + $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = null; + } + $categories[] = $this->registry->create('Category', array($term, $scheme, null)); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) + { + $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) + { + $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + + if (!empty($categories)) + { + return array_unique($categories); + } + else + { + return null; + } + } + + public function get_author($key = 0) + { + $authors = $this->get_authors(); + if (isset($authors[$key])) + { + return $authors[$key]; + } + else + { + return null; + } + } + + public function get_authors() + { + $authors = array(); + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) + { + $name = null; + $uri = null; + $email = null; + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $authors[] = $this->registry->create('Author', array($name, $uri, $email)); + } + } + if ($author = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) + { + $name = null; + $url = null; + $email = null; + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $authors[] = $this->registry->create('Author', array($name, $url, $email)); + } + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) + { + $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) + { + $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) + { + $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + + if (!empty($authors)) + { + return array_unique($authors); + } + else + { + return null; + } + } + + public function get_contributor($key = 0) + { + $contributors = $this->get_contributors(); + if (isset($contributors[$key])) + { + return $contributors[$key]; + } + else + { + return null; + } + } + + public function get_contributors() + { + $contributors = array(); + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) + { + $name = null; + $uri = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $contributors[] = $this->registry->create('Author', array($name, $uri, $email)); + } + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) + { + $name = null; + $url = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $contributors[] = $this->registry->create('Author', array($name, $url, $email)); + } + } + + if (!empty($contributors)) + { + return array_unique($contributors); + } + else + { + return null; + } + } + + public function get_link($key = 0, $rel = 'alternate') + { + $links = $this->get_links($rel); + if (isset($links[$key])) + { + return $links[$key]; + } + else + { + return null; + } + } + + /** + * Added for parity between the parent-level and the item/entry-level. + */ + public function get_permalink() + { + return $this->get_link(0); + } + + public function get_links($rel = 'alternate') + { + if (!isset($this->data['links'])) + { + $this->data['links'] = array(); + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link')) + { + foreach ($links as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + } + } + } + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link')) + { + foreach ($links as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + + } + } + } + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + + $keys = array_keys($this->data['links']); + foreach ($keys as $key) + { + if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key))) + { + if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); + $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; + } + else + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; + } + } + elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) + { + $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; + } + $this->data['links'][$key] = array_unique($this->data['links'][$key]); + } + } + + if (isset($this->data['links'][$rel])) + { + return $this->data['links'][$rel]; + } + else + { + return null; + } + } + + public function get_description() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + else + { + return null; + } + } + + public function get_copyright() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + public function get_language() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['xml_lang'])) + { + return $this->sanitize($this->data['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + public function get_latitude() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) + { + return (float) $match[1]; + } + else + { + return null; + } + } + + public function get_longitude() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) + { + return (float) $return[0]['data']; + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) + { + return (float) $match[2]; + } + else + { + return null; + } + } + + public function get_image_url() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image')) + { + return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + else + { + return null; + } + } +} + diff --git a/src/wp-includes/SimplePie/XML/Declaration/Parser.php b/src/wp-includes/SimplePie/XML/Declaration/Parser.php new file mode 100644 index 0000000..aec19f1 --- /dev/null +++ b/src/wp-includes/SimplePie/XML/Declaration/Parser.php @@ -0,0 +1,362 @@ +<?php +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + + +/** + * Parses the XML Declaration + * + * @package SimplePie + * @subpackage Parsing + */ +class SimplePie_XML_Declaration_Parser +{ + /** + * XML Version + * + * @access public + * @var string + */ + var $version = '1.0'; + + /** + * Encoding + * + * @access public + * @var string + */ + var $encoding = 'UTF-8'; + + /** + * Standalone + * + * @access public + * @var bool + */ + var $standalone = false; + + /** + * Current state of the state machine + * + * @access private + * @var string + */ + var $state = 'before_version_name'; + + /** + * Input data + * + * @access private + * @var string + */ + var $data = ''; + + /** + * Input data length (to avoid calling strlen() everytime this is needed) + * + * @access private + * @var int + */ + var $data_length = 0; + + /** + * Current position of the pointer + * + * @var int + * @access private + */ + var $position = 0; + + /** + * Create an instance of the class with the input data + * + * @access public + * @param string $data Input data + */ + public function __construct($data) + { + $this->data = $data; + $this->data_length = strlen($this->data); + } + + /** + * Parse the input data + * + * @access public + * @return bool true on success, false on failure + */ + public function parse() + { + while ($this->state && $this->state !== 'emit' && $this->has_data()) + { + $state = $this->state; + $this->$state(); + } + $this->data = ''; + if ($this->state === 'emit') + { + return true; + } + else + { + $this->version = ''; + $this->encoding = ''; + $this->standalone = ''; + return false; + } + } + + /** + * Check whether there is data beyond the pointer + * + * @access private + * @return bool true if there is further data, false if not + */ + public function has_data() + { + return (bool) ($this->position < $this->data_length); + } + + /** + * Advance past any whitespace + * + * @return int Number of whitespace characters passed + */ + public function skip_whitespace() + { + $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position); + $this->position += $whitespace; + return $whitespace; + } + + /** + * Read value + */ + public function get_value() + { + $quote = substr($this->data, $this->position, 1); + if ($quote === '"' || $quote === "'") + { + $this->position++; + $len = strcspn($this->data, $quote, $this->position); + if ($this->has_data()) + { + $value = substr($this->data, $this->position, $len); + $this->position += $len + 1; + return $value; + } + } + return false; + } + + public function before_version_name() + { + if ($this->skip_whitespace()) + { + $this->state = 'version_name'; + } + else + { + $this->state = false; + } + } + + public function version_name() + { + if (substr($this->data, $this->position, 7) === 'version') + { + $this->position += 7; + $this->skip_whitespace(); + $this->state = 'version_equals'; + } + else + { + $this->state = false; + } + } + + public function version_equals() + { + if (substr($this->data, $this->position, 1) === '=') + { + $this->position++; + $this->skip_whitespace(); + $this->state = 'version_value'; + } + else + { + $this->state = false; + } + } + + public function version_value() + { + if ($this->version = $this->get_value()) + { + $this->skip_whitespace(); + if ($this->has_data()) + { + $this->state = 'encoding_name'; + } + else + { + $this->state = 'emit'; + } + } + else + { + $this->state = false; + } + } + + public function encoding_name() + { + if (substr($this->data, $this->position, 8) === 'encoding') + { + $this->position += 8; + $this->skip_whitespace(); + $this->state = 'encoding_equals'; + } + else + { + $this->state = 'standalone_name'; + } + } + + public function encoding_equals() + { + if (substr($this->data, $this->position, 1) === '=') + { + $this->position++; + $this->skip_whitespace(); + $this->state = 'encoding_value'; + } + else + { + $this->state = false; + } + } + + public function encoding_value() + { + if ($this->encoding = $this->get_value()) + { + $this->skip_whitespace(); + if ($this->has_data()) + { + $this->state = 'standalone_name'; + } + else + { + $this->state = 'emit'; + } + } + else + { + $this->state = false; + } + } + + public function standalone_name() + { + if (substr($this->data, $this->position, 10) === 'standalone') + { + $this->position += 10; + $this->skip_whitespace(); + $this->state = 'standalone_equals'; + } + else + { + $this->state = false; + } + } + + public function standalone_equals() + { + if (substr($this->data, $this->position, 1) === '=') + { + $this->position++; + $this->skip_whitespace(); + $this->state = 'standalone_value'; + } + else + { + $this->state = false; + } + } + + public function standalone_value() + { + if ($standalone = $this->get_value()) + { + switch ($standalone) + { + case 'yes': + $this->standalone = true; + break; + + case 'no': + $this->standalone = false; + break; + + default: + $this->state = false; + return; + } + + $this->skip_whitespace(); + if ($this->has_data()) + { + $this->state = false; + } + else + { + $this->state = 'emit'; + } + } + else + { + $this->state = false; + } + } +} diff --git a/src/wp-includes/SimplePie/gzdecode.php b/src/wp-includes/SimplePie/gzdecode.php new file mode 100644 index 0000000..52e024e --- /dev/null +++ b/src/wp-includes/SimplePie/gzdecode.php @@ -0,0 +1,371 @@ +<?php +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + + +/** + * Decode 'gzip' encoded HTTP data + * + * @package SimplePie + * @subpackage HTTP + * @link http://www.gzip.org/format.txt + */ +class SimplePie_gzdecode +{ + /** + * Compressed data + * + * @access private + * @var string + * @see gzdecode::$data + */ + var $compressed_data; + + /** + * Size of compressed data + * + * @access private + * @var int + */ + var $compressed_size; + + /** + * Minimum size of a valid gzip string + * + * @access private + * @var int + */ + var $min_compressed_size = 18; + + /** + * Current position of pointer + * + * @access private + * @var int + */ + var $position = 0; + + /** + * Flags (FLG) + * + * @access private + * @var int + */ + var $flags; + + /** + * Uncompressed data + * + * @access public + * @see gzdecode::$compressed_data + * @var string + */ + var $data; + + /** + * Modified time + * + * @access public + * @var int + */ + var $MTIME; + + /** + * Extra Flags + * + * @access public + * @var int + */ + var $XFL; + + /** + * Operating System + * + * @access public + * @var int + */ + var $OS; + + /** + * Subfield ID 1 + * + * @access public + * @see gzdecode::$extra_field + * @see gzdecode::$SI2 + * @var string + */ + var $SI1; + + /** + * Subfield ID 2 + * + * @access public + * @see gzdecode::$extra_field + * @see gzdecode::$SI1 + * @var string + */ + var $SI2; + + /** + * Extra field content + * + * @access public + * @see gzdecode::$SI1 + * @see gzdecode::$SI2 + * @var string + */ + var $extra_field; + + /** + * Original filename + * + * @access public + * @var string + */ + var $filename; + + /** + * Human readable comment + * + * @access public + * @var string + */ + var $comment; + + /** + * Don't allow anything to be set + * + * @param string $name + * @param mixed $value + */ + public function __set($name, $value) + { + trigger_error("Cannot write property $name", E_USER_ERROR); + } + + /** + * Set the compressed string and related properties + * + * @param string $data + */ + public function __construct($data) + { + $this->compressed_data = $data; + $this->compressed_size = strlen($data); + } + + /** + * Decode the GZIP stream + * + * @return bool Successfulness + */ + public function parse() + { + if ($this->compressed_size >= $this->min_compressed_size) + { + // Check ID1, ID2, and CM + if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08") + { + return false; + } + + // Get the FLG (FLaGs) + $this->flags = ord($this->compressed_data[3]); + + // FLG bits above (1 << 4) are reserved + if ($this->flags > 0x1F) + { + return false; + } + + // Advance the pointer after the above + $this->position += 4; + + // MTIME + $mtime = substr($this->compressed_data, $this->position, 4); + // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness + if (current(unpack('S', "\x00\x01")) === 1) + { + $mtime = strrev($mtime); + } + $this->MTIME = current(unpack('l', $mtime)); + $this->position += 4; + + // Get the XFL (eXtra FLags) + $this->XFL = ord($this->compressed_data[$this->position++]); + + // Get the OS (Operating System) + $this->OS = ord($this->compressed_data[$this->position++]); + + // Parse the FEXTRA + if ($this->flags & 4) + { + // Read subfield IDs + $this->SI1 = $this->compressed_data[$this->position++]; + $this->SI2 = $this->compressed_data[$this->position++]; + + // SI2 set to zero is reserved for future use + if ($this->SI2 === "\x00") + { + return false; + } + + // Get the length of the extra field + $len = current(unpack('v', substr($this->compressed_data, $this->position, 2))); + $this->position += 2; + + // Check the length of the string is still valid + $this->min_compressed_size += $len + 4; + if ($this->compressed_size >= $this->min_compressed_size) + { + // Set the extra field to the given data + $this->extra_field = substr($this->compressed_data, $this->position, $len); + $this->position += $len; + } + else + { + return false; + } + } + + // Parse the FNAME + if ($this->flags & 8) + { + // Get the length of the filename + $len = strcspn($this->compressed_data, "\x00", $this->position); + + // Check the length of the string is still valid + $this->min_compressed_size += $len + 1; + if ($this->compressed_size >= $this->min_compressed_size) + { + // Set the original filename to the given string + $this->filename = substr($this->compressed_data, $this->position, $len); + $this->position += $len + 1; + } + else + { + return false; + } + } + + // Parse the FCOMMENT + if ($this->flags & 16) + { + // Get the length of the comment + $len = strcspn($this->compressed_data, "\x00", $this->position); + + // Check the length of the string is still valid + $this->min_compressed_size += $len + 1; + if ($this->compressed_size >= $this->min_compressed_size) + { + // Set the original comment to the given string + $this->comment = substr($this->compressed_data, $this->position, $len); + $this->position += $len + 1; + } + else + { + return false; + } + } + + // Parse the FHCRC + if ($this->flags & 2) + { + // Check the length of the string is still valid + $this->min_compressed_size += $len + 2; + if ($this->compressed_size >= $this->min_compressed_size) + { + // Read the CRC + $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2))); + + // Check the CRC matches + if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc) + { + $this->position += 2; + } + else + { + return false; + } + } + else + { + return false; + } + } + + // Decompress the actual data + if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false) + { + return false; + } + else + { + $this->position = $this->compressed_size - 8; + } + + // Check CRC of data + $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4))); + $this->position += 4; + /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc)) + { + return false; + }*/ + + // Check ISIZE of data + $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4))); + $this->position += 4; + if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize)) + { + return false; + } + + // Wow, against all odds, we've actually got a valid gzip string + return true; + } + else + { + return false; + } + } +} diff --git a/src/wp-includes/Text/Diff.php b/src/wp-includes/Text/Diff.php new file mode 100644 index 0000000..dc24b67 --- /dev/null +++ b/src/wp-includes/Text/Diff.php @@ -0,0 +1,450 @@ +<?php +/** + * General API for generating and formatting diffs - the differences between + * two sequences of strings. + * + * The original PHP version of this code was written by Geoffrey T. Dairiki + * <dairiki@dairiki.org>, and is used/adapted with his permission. + * + * Copyright 2004 Geoffrey T. Dairiki <dairiki@dairiki.org> + * Copyright 2004-2010 The Horde Project (http://www.horde.org/) + * + * See the enclosed file COPYING for license information (LGPL). If you did + * not receive this file, see http://opensource.org/licenses/lgpl-license.php. + * + * @package Text_Diff + * @author Geoffrey T. Dairiki <dairiki@dairiki.org> + */ +class Text_Diff { + + /** + * Array of changes. + * + * @var array + */ + var $_edits; + + /** + * Computes diffs between sequences of strings. + * + * @param string $engine Name of the diffing engine to use. 'auto' + * will automatically select the best. + * @param array $params Parameters to pass to the diffing engine. + * Normally an array of two arrays, each + * containing the lines from a file. + */ + function Text_Diff($engine, $params) + { + // Backward compatibility workaround. + if (!is_string($engine)) { + $params = array($engine, $params); + $engine = 'auto'; + } + + if ($engine == 'auto') { + $engine = extension_loaded('xdiff') ? 'xdiff' : 'native'; + } else { + $engine = basename($engine); + } + + // WP #7391 + require_once dirname(__FILE__).'/Diff/Engine/' . $engine . '.php'; + $class = 'Text_Diff_Engine_' . $engine; + $diff_engine = new $class(); + + $this->_edits = call_user_func_array(array($diff_engine, 'diff'), $params); + } + + /** + * Returns the array of differences. + */ + function getDiff() + { + return $this->_edits; + } + + /** + * returns the number of new (added) lines in a given diff. + * + * @since Text_Diff 1.1.0 + * + * @return integer The number of new lines + */ + function countAddedLines() + { + $count = 0; + foreach ($this->_edits as $edit) { + if (is_a($edit, 'Text_Diff_Op_add') || + is_a($edit, 'Text_Diff_Op_change')) { + $count += $edit->nfinal(); + } + } + return $count; + } + + /** + * Returns the number of deleted (removed) lines in a given diff. + * + * @since Text_Diff 1.1.0 + * + * @return integer The number of deleted lines + */ + function countDeletedLines() + { + $count = 0; + foreach ($this->_edits as $edit) { + if (is_a($edit, 'Text_Diff_Op_delete') || + is_a($edit, 'Text_Diff_Op_change')) { + $count += $edit->norig(); + } + } + return $count; + } + + /** + * Computes a reversed diff. + * + * Example: + * <code> + * $diff = new Text_Diff($lines1, $lines2); + * $rev = $diff->reverse(); + * </code> + * + * @return Text_Diff A Diff object representing the inverse of the + * original diff. Note that we purposely don't return a + * reference here, since this essentially is a clone() + * method. + */ + function reverse() + { + if (version_compare(zend_version(), '2', '>')) { + $rev = clone($this); + } else { + $rev = $this; + } + $rev->_edits = array(); + foreach ($this->_edits as $edit) { + $rev->_edits[] = $edit->reverse(); + } + return $rev; + } + + /** + * Checks for an empty diff. + * + * @return boolean True if two sequences were identical. + */ + function isEmpty() + { + foreach ($this->_edits as $edit) { + if (!is_a($edit, 'Text_Diff_Op_copy')) { + return false; + } + } + return true; + } + + /** + * Computes the length of the Longest Common Subsequence (LCS). + * + * This is mostly for diagnostic purposes. + * + * @return integer The length of the LCS. + */ + function lcs() + { + $lcs = 0; + foreach ($this->_edits as $edit) { + if (is_a($edit, 'Text_Diff_Op_copy')) { + $lcs += count($edit->orig); + } + } + return $lcs; + } + + /** + * Gets the original set of lines. + * + * This reconstructs the $from_lines parameter passed to the constructor. + * + * @return array The original sequence of strings. + */ + function getOriginal() + { + $lines = array(); + foreach ($this->_edits as $edit) { + if ($edit->orig) { + array_splice($lines, count($lines), 0, $edit->orig); + } + } + return $lines; + } + + /** + * Gets the final set of lines. + * + * This reconstructs the $to_lines parameter passed to the constructor. + * + * @return array The sequence of strings. + */ + function getFinal() + { + $lines = array(); + foreach ($this->_edits as $edit) { + if ($edit->final) { + array_splice($lines, count($lines), 0, $edit->final); + } + } + return $lines; + } + + /** + * Removes trailing newlines from a line of text. This is meant to be used + * with array_walk(). + * + * @param string $line The line to trim. + * @param integer $key The index of the line in the array. Not used. + */ + static function trimNewlines(&$line, $key) + { + $line = str_replace(array("\n", "\r"), '', $line); + } + + /** + * Determines the location of the system temporary directory. + * + * @static + * + * @access protected + * + * @return string A directory name which can be used for temp files. + * Returns false if one could not be found. + */ + function _getTempDir() + { + $tmp_locations = array('/tmp', '/var/tmp', 'c:\WUTemp', 'c:\temp', + 'c:\windows\temp', 'c:\winnt\temp'); + + /* Try PHP's upload_tmp_dir directive. */ + $tmp = ini_get('upload_tmp_dir'); + + /* Otherwise, try to determine the TMPDIR environment variable. */ + if (!strlen($tmp)) { + $tmp = getenv('TMPDIR'); + } + + /* If we still cannot determine a value, then cycle through a list of + * preset possibilities. */ + while (!strlen($tmp) && count($tmp_locations)) { + $tmp_check = array_shift($tmp_locations); + if (@is_dir($tmp_check)) { + $tmp = $tmp_check; + } + } + + /* If it is still empty, we have failed, so return false; otherwise + * return the directory determined. */ + return strlen($tmp) ? $tmp : false; + } + + /** + * Checks a diff for validity. + * + * This is here only for debugging purposes. + */ + function _check($from_lines, $to_lines) + { + if (serialize($from_lines) != serialize($this->getOriginal())) { + trigger_error("Reconstructed original doesn't match", E_USER_ERROR); + } + if (serialize($to_lines) != serialize($this->getFinal())) { + trigger_error("Reconstructed final doesn't match", E_USER_ERROR); + } + + $rev = $this->reverse(); + if (serialize($to_lines) != serialize($rev->getOriginal())) { + trigger_error("Reversed original doesn't match", E_USER_ERROR); + } + if (serialize($from_lines) != serialize($rev->getFinal())) { + trigger_error("Reversed final doesn't match", E_USER_ERROR); + } + + $prevtype = null; + foreach ($this->_edits as $edit) { + if ($prevtype == get_class($edit)) { + trigger_error("Edit sequence is non-optimal", E_USER_ERROR); + } + $prevtype = get_class($edit); + } + + return true; + } + +} + +/** + * @package Text_Diff + * @author Geoffrey T. Dairiki <dairiki@dairiki.org> + */ +class Text_MappedDiff extends Text_Diff { + + /** + * Computes a diff between sequences of strings. + * + * This can be used to compute things like case-insensitve diffs, or diffs + * which ignore changes in white-space. + * + * @param array $from_lines An array of strings. + * @param array $to_lines An array of strings. + * @param array $mapped_from_lines This array should have the same size + * number of elements as $from_lines. The + * elements in $mapped_from_lines and + * $mapped_to_lines are what is actually + * compared when computing the diff. + * @param array $mapped_to_lines This array should have the same number + * of elements as $to_lines. + */ + function Text_MappedDiff($from_lines, $to_lines, + $mapped_from_lines, $mapped_to_lines) + { + assert(count($from_lines) == count($mapped_from_lines)); + assert(count($to_lines) == count($mapped_to_lines)); + + parent::Text_Diff($mapped_from_lines, $mapped_to_lines); + + $xi = $yi = 0; + for ($i = 0; $i < count($this->_edits); $i++) { + $orig = &$this->_edits[$i]->orig; + if (is_array($orig)) { + $orig = array_slice($from_lines, $xi, count($orig)); + $xi += count($orig); + } + + $final = &$this->_edits[$i]->final; + if (is_array($final)) { + $final = array_slice($to_lines, $yi, count($final)); + $yi += count($final); + } + } + } + +} + +/** + * @package Text_Diff + * @author Geoffrey T. Dairiki <dairiki@dairiki.org> + * + * @access private + */ +class Text_Diff_Op { + + var $orig; + var $final; + + function &reverse() + { + trigger_error('Abstract method', E_USER_ERROR); + } + + function norig() + { + return $this->orig ? count($this->orig) : 0; + } + + function nfinal() + { + return $this->final ? count($this->final) : 0; + } + +} + +/** + * @package Text_Diff + * @author Geoffrey T. Dairiki <dairiki@dairiki.org> + * + * @access private + */ +class Text_Diff_Op_copy extends Text_Diff_Op { + + function Text_Diff_Op_copy($orig, $final = false) + { + if (!is_array($final)) { + $final = $orig; + } + $this->orig = $orig; + $this->final = $final; + } + + function &reverse() + { + $reverse = new Text_Diff_Op_copy($this->final, $this->orig); + return $reverse; + } + +} + +/** + * @package Text_Diff + * @author Geoffrey T. Dairiki <dairiki@dairiki.org> + * + * @access private + */ +class Text_Diff_Op_delete extends Text_Diff_Op { + + function Text_Diff_Op_delete($lines) + { + $this->orig = $lines; + $this->final = false; + } + + function &reverse() + { + $reverse = new Text_Diff_Op_add($this->orig); + return $reverse; + } + +} + +/** + * @package Text_Diff + * @author Geoffrey T. Dairiki <dairiki@dairiki.org> + * + * @access private + */ +class Text_Diff_Op_add extends Text_Diff_Op { + + function Text_Diff_Op_add($lines) + { + $this->final = $lines; + $this->orig = false; + } + + function &reverse() + { + $reverse = new Text_Diff_Op_delete($this->final); + return $reverse; + } + +} + +/** + * @package Text_Diff + * @author Geoffrey T. Dairiki <dairiki@dairiki.org> + * + * @access private + */ +class Text_Diff_Op_change extends Text_Diff_Op { + + function Text_Diff_Op_change($orig, $final) + { + $this->orig = $orig; + $this->final = $final; + } + + function &reverse() + { + $reverse = new Text_Diff_Op_change($this->final, $this->orig); + return $reverse; + } + +} diff --git a/src/wp-includes/Text/Diff/Engine/native.php b/src/wp-includes/Text/Diff/Engine/native.php new file mode 100644 index 0000000..e908cfe --- /dev/null +++ b/src/wp-includes/Text/Diff/Engine/native.php @@ -0,0 +1,436 @@ +<?php +/** + * Class used internally by Text_Diff to actually compute the diffs. + * + * This class is implemented using native PHP code. + * + * The algorithm used here is mostly lifted from the perl module + * Algorithm::Diff (version 1.06) by Ned Konz, which is available at: + * http://www.perl.com/CPAN/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip + * + * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html + * + * Some ideas (and a bit of code) are taken from analyze.c, of GNU + * diffutils-2.7, which can be found at: + * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz + * + * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from + * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this + * code was written by him, and is used/adapted with his permission. + * + * Copyright 2004-2010 The Horde Project (http://www.horde.org/) + * + * See the enclosed file COPYING for license information (LGPL). If you did + * not receive this file, see http://opensource.org/licenses/lgpl-license.php. + * + * @author Geoffrey T. Dairiki <dairiki@dairiki.org> + * @package Text_Diff + */ +class Text_Diff_Engine_native { + + function diff($from_lines, $to_lines) + { + array_walk($from_lines, array('Text_Diff', 'trimNewlines')); + array_walk($to_lines, array('Text_Diff', 'trimNewlines')); + + $n_from = count($from_lines); + $n_to = count($to_lines); + + $this->xchanged = $this->ychanged = array(); + $this->xv = $this->yv = array(); + $this->xind = $this->yind = array(); + unset($this->seq); + unset($this->in_seq); + unset($this->lcs); + + // Skip leading common lines. + for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) { + if ($from_lines[$skip] !== $to_lines[$skip]) { + break; + } + $this->xchanged[$skip] = $this->ychanged[$skip] = false; + } + + // Skip trailing common lines. + $xi = $n_from; $yi = $n_to; + for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) { + if ($from_lines[$xi] !== $to_lines[$yi]) { + break; + } + $this->xchanged[$xi] = $this->ychanged[$yi] = false; + } + + // Ignore lines which do not exist in both files. + for ($xi = $skip; $xi < $n_from - $endskip; $xi++) { + $xhash[$from_lines[$xi]] = 1; + } + for ($yi = $skip; $yi < $n_to - $endskip; $yi++) { + $line = $to_lines[$yi]; + if (($this->ychanged[$yi] = empty($xhash[$line]))) { + continue; + } + $yhash[$line] = 1; + $this->yv[] = $line; + $this->yind[] = $yi; + } + for ($xi = $skip; $xi < $n_from - $endskip; $xi++) { + $line = $from_lines[$xi]; + if (($this->xchanged[$xi] = empty($yhash[$line]))) { + continue; + } + $this->xv[] = $line; + $this->xind[] = $xi; + } + + // Find the LCS. + $this->_compareseq(0, count($this->xv), 0, count($this->yv)); + + // Merge edits when possible. + $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged); + $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged); + + // Compute the edit operations. + $edits = array(); + $xi = $yi = 0; + while ($xi < $n_from || $yi < $n_to) { + assert($yi < $n_to || $this->xchanged[$xi]); + assert($xi < $n_from || $this->ychanged[$yi]); + + // Skip matching "snake". + $copy = array(); + while ($xi < $n_from && $yi < $n_to + && !$this->xchanged[$xi] && !$this->ychanged[$yi]) { + $copy[] = $from_lines[$xi++]; + ++$yi; + } + if ($copy) { + $edits[] = new Text_Diff_Op_copy($copy); + } + + // Find deletes & adds. + $delete = array(); + while ($xi < $n_from && $this->xchanged[$xi]) { + $delete[] = $from_lines[$xi++]; + } + + $add = array(); + while ($yi < $n_to && $this->ychanged[$yi]) { + $add[] = $to_lines[$yi++]; + } + + if ($delete && $add) { + $edits[] = new Text_Diff_Op_change($delete, $add); + } elseif ($delete) { + $edits[] = new Text_Diff_Op_delete($delete); + } elseif ($add) { + $edits[] = new Text_Diff_Op_add($add); + } + } + + return $edits; + } + + /** + * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF, + * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized + * segments. + * + * Returns (LCS, PTS). LCS is the length of the LCS. PTS is an array of + * NCHUNKS+1 (X, Y) indexes giving the diving points between sub + * sequences. The first sub-sequence is contained in (X0, X1), (Y0, Y1), + * the second in (X1, X2), (Y1, Y2) and so on. Note that (X0, Y0) == + * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM). + * + * This function assumes that the first lines of the specified portions of + * the two files do not match, and likewise that the last lines do not + * match. The caller must trim matching lines from the beginning and end + * of the portions it is going to specify. + */ + function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks) + { + $flip = false; + + if ($xlim - $xoff > $ylim - $yoff) { + /* Things seems faster (I'm not sure I understand why) when the + * shortest sequence is in X. */ + $flip = true; + list ($xoff, $xlim, $yoff, $ylim) + = array($yoff, $ylim, $xoff, $xlim); + } + + if ($flip) { + for ($i = $ylim - 1; $i >= $yoff; $i--) { + $ymatches[$this->xv[$i]][] = $i; + } + } else { + for ($i = $ylim - 1; $i >= $yoff; $i--) { + $ymatches[$this->yv[$i]][] = $i; + } + } + + $this->lcs = 0; + $this->seq[0]= $yoff - 1; + $this->in_seq = array(); + $ymids[0] = array(); + + $numer = $xlim - $xoff + $nchunks - 1; + $x = $xoff; + for ($chunk = 0; $chunk < $nchunks; $chunk++) { + if ($chunk > 0) { + for ($i = 0; $i <= $this->lcs; $i++) { + $ymids[$i][$chunk - 1] = $this->seq[$i]; + } + } + + $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks); + for (; $x < $x1; $x++) { + $line = $flip ? $this->yv[$x] : $this->xv[$x]; + if (empty($ymatches[$line])) { + continue; + } + $matches = $ymatches[$line]; + reset($matches); + while (list(, $y) = each($matches)) { + if (empty($this->in_seq[$y])) { + $k = $this->_lcsPos($y); + assert($k > 0); + $ymids[$k] = $ymids[$k - 1]; + break; + } + } + while (list(, $y) = each($matches)) { + if ($y > $this->seq[$k - 1]) { + assert($y <= $this->seq[$k]); + /* Optimization: this is a common case: next match is + * just replacing previous match. */ + $this->in_seq[$this->seq[$k]] = false; + $this->seq[$k] = $y; + $this->in_seq[$y] = 1; + } elseif (empty($this->in_seq[$y])) { + $k = $this->_lcsPos($y); + assert($k > 0); + $ymids[$k] = $ymids[$k - 1]; + } + } + } + } + + $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff); + $ymid = $ymids[$this->lcs]; + for ($n = 0; $n < $nchunks - 1; $n++) { + $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks); + $y1 = $ymid[$n] + 1; + $seps[] = $flip ? array($y1, $x1) : array($x1, $y1); + } + $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim); + + return array($this->lcs, $seps); + } + + function _lcsPos($ypos) + { + $end = $this->lcs; + if ($end == 0 || $ypos > $this->seq[$end]) { + $this->seq[++$this->lcs] = $ypos; + $this->in_seq[$ypos] = 1; + return $this->lcs; + } + + $beg = 1; + while ($beg < $end) { + $mid = (int)(($beg + $end) / 2); + if ($ypos > $this->seq[$mid]) { + $beg = $mid + 1; + } else { + $end = $mid; + } + } + + assert($ypos != $this->seq[$end]); + + $this->in_seq[$this->seq[$end]] = false; + $this->seq[$end] = $ypos; + $this->in_seq[$ypos] = 1; + return $end; + } + + /** + * Finds LCS of two sequences. + * + * The results are recorded in the vectors $this->{x,y}changed[], by + * storing a 1 in the element for each line that is an insertion or + * deletion (ie. is not in the LCS). + * + * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1. + * + * Note that XLIM, YLIM are exclusive bounds. All line numbers are + * origin-0 and discarded lines are not counted. + */ + function _compareseq ($xoff, $xlim, $yoff, $ylim) + { + /* Slide down the bottom initial diagonal. */ + while ($xoff < $xlim && $yoff < $ylim + && $this->xv[$xoff] == $this->yv[$yoff]) { + ++$xoff; + ++$yoff; + } + + /* Slide up the top initial diagonal. */ + while ($xlim > $xoff && $ylim > $yoff + && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) { + --$xlim; + --$ylim; + } + + if ($xoff == $xlim || $yoff == $ylim) { + $lcs = 0; + } else { + /* This is ad hoc but seems to work well. $nchunks = + * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks = + * max(2,min(8,(int)$nchunks)); */ + $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1; + list($lcs, $seps) + = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks); + } + + if ($lcs == 0) { + /* X and Y sequences have no common subsequence: mark all + * changed. */ + while ($yoff < $ylim) { + $this->ychanged[$this->yind[$yoff++]] = 1; + } + while ($xoff < $xlim) { + $this->xchanged[$this->xind[$xoff++]] = 1; + } + } else { + /* Use the partitions to split this problem into subproblems. */ + reset($seps); + $pt1 = $seps[0]; + while ($pt2 = next($seps)) { + $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]); + $pt1 = $pt2; + } + } + } + + /** + * Adjusts inserts/deletes of identical lines to join changes as much as + * possible. + * + * We do something when a run of changed lines include a line at one end + * and has an excluded, identical line at the other. We are free to + * choose which identical line is included. `compareseq' usually chooses + * the one at the beginning, but usually it is cleaner to consider the + * following identical line to be the "change". + * + * This is extracted verbatim from analyze.c (GNU diffutils-2.7). + */ + function _shiftBoundaries($lines, &$changed, $other_changed) + { + $i = 0; + $j = 0; + + assert('count($lines) == count($changed)'); + $len = count($lines); + $other_len = count($other_changed); + + while (1) { + /* Scan forward to find the beginning of another run of + * changes. Also keep track of the corresponding point in the + * other file. + * + * Throughout this code, $i and $j are adjusted together so that + * the first $i elements of $changed and the first $j elements of + * $other_changed both contain the same number of zeros (unchanged + * lines). + * + * Furthermore, $j is always kept so that $j == $other_len or + * $other_changed[$j] == false. */ + while ($j < $other_len && $other_changed[$j]) { + $j++; + } + + while ($i < $len && ! $changed[$i]) { + assert('$j < $other_len && ! $other_changed[$j]'); + $i++; $j++; + while ($j < $other_len && $other_changed[$j]) { + $j++; + } + } + + if ($i == $len) { + break; + } + + $start = $i; + + /* Find the end of this run of changes. */ + while (++$i < $len && $changed[$i]) { + continue; + } + + do { + /* Record the length of this run of changes, so that we can + * later determine whether the run has grown. */ + $runlength = $i - $start; + + /* Move the changed region back, so long as the previous + * unchanged line matches the last changed one. This merges + * with previous changed regions. */ + while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) { + $changed[--$start] = 1; + $changed[--$i] = false; + while ($start > 0 && $changed[$start - 1]) { + $start--; + } + assert('$j > 0'); + while ($other_changed[--$j]) { + continue; + } + assert('$j >= 0 && !$other_changed[$j]'); + } + + /* Set CORRESPONDING to the end of the changed run, at the + * last point where it corresponds to a changed run in the + * other file. CORRESPONDING == LEN means no such point has + * been found. */ + $corresponding = $j < $other_len ? $i : $len; + + /* Move the changed region forward, so long as the first + * changed line matches the following unchanged one. This + * merges with following changed regions. Do this second, so + * that if there are no merges, the changed region is moved + * forward as far as possible. */ + while ($i < $len && $lines[$start] == $lines[$i]) { + $changed[$start++] = false; + $changed[$i++] = 1; + while ($i < $len && $changed[$i]) { + $i++; + } + + assert('$j < $other_len && ! $other_changed[$j]'); + $j++; + if ($j < $other_len && $other_changed[$j]) { + $corresponding = $i; + while ($j < $other_len && $other_changed[$j]) { + $j++; + } + } + } + } while ($runlength != $i - $start); + + /* If possible, move the fully-merged run of changes back to a + * corresponding run in the other file. */ + while ($corresponding < $i) { + $changed[--$start] = 1; + $changed[--$i] = 0; + assert('$j > 0'); + while ($other_changed[--$j]) { + continue; + } + assert('$j >= 0 && !$other_changed[$j]'); + } + } + } + +} diff --git a/src/wp-includes/Text/Diff/Engine/shell.php b/src/wp-includes/Text/Diff/Engine/shell.php new file mode 100644 index 0000000..faf3870 --- /dev/null +++ b/src/wp-includes/Text/Diff/Engine/shell.php @@ -0,0 +1,162 @@ +<?php +/** + * Class used internally by Diff to actually compute the diffs. + * + * This class uses the Unix `diff` program via shell_exec to compute the + * differences between the two input arrays. + * + * Copyright 2007-2010 The Horde Project (http://www.horde.org/) + * + * See the enclosed file COPYING for license information (LGPL). If you did + * not receive this file, see http://opensource.org/licenses/lgpl-license.php. + * + * @author Milian Wolff <mail@milianw.de> + * @package Text_Diff + * @since 0.3.0 + */ +class Text_Diff_Engine_shell { + + /** + * Path to the diff executable + * + * @var string + */ + var $_diffCommand = 'diff'; + + /** + * Returns the array of differences. + * + * @param array $from_lines lines of text from old file + * @param array $to_lines lines of text from new file + * + * @return array all changes made (array with Text_Diff_Op_* objects) + */ + function diff($from_lines, $to_lines) + { + array_walk($from_lines, array('Text_Diff', 'trimNewlines')); + array_walk($to_lines, array('Text_Diff', 'trimNewlines')); + + $temp_dir = Text_Diff::_getTempDir(); + + // Execute gnu diff or similar to get a standard diff file. + $from_file = tempnam($temp_dir, 'Text_Diff'); + $to_file = tempnam($temp_dir, 'Text_Diff'); + $fp = fopen($from_file, 'w'); + fwrite($fp, implode("\n", $from_lines)); + fclose($fp); + $fp = fopen($to_file, 'w'); + fwrite($fp, implode("\n", $to_lines)); + fclose($fp); + $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file); + unlink($from_file); + unlink($to_file); + + if (is_null($diff)) { + // No changes were made + return array(new Text_Diff_Op_copy($from_lines)); + } + + $from_line_no = 1; + $to_line_no = 1; + $edits = array(); + + // Get changed lines by parsing something like: + // 0a1,2 + // 1,2c4,6 + // 1,5d6 + preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff, + $matches, PREG_SET_ORDER); + + foreach ($matches as $match) { + if (!isset($match[5])) { + // This paren is not set every time (see regex). + $match[5] = false; + } + + if ($match[3] == 'a') { + $from_line_no--; + } + + if ($match[3] == 'd') { + $to_line_no--; + } + + if ($from_line_no < $match[1] || $to_line_no < $match[4]) { + // copied lines + assert('$match[1] - $from_line_no == $match[4] - $to_line_no'); + array_push($edits, + new Text_Diff_Op_copy( + $this->_getLines($from_lines, $from_line_no, $match[1] - 1), + $this->_getLines($to_lines, $to_line_no, $match[4] - 1))); + } + + switch ($match[3]) { + case 'd': + // deleted lines + array_push($edits, + new Text_Diff_Op_delete( + $this->_getLines($from_lines, $from_line_no, $match[2]))); + $to_line_no++; + break; + + case 'c': + // changed lines + array_push($edits, + new Text_Diff_Op_change( + $this->_getLines($from_lines, $from_line_no, $match[2]), + $this->_getLines($to_lines, $to_line_no, $match[5]))); + break; + + case 'a': + // added lines + array_push($edits, + new Text_Diff_Op_add( + $this->_getLines($to_lines, $to_line_no, $match[5]))); + $from_line_no++; + break; + } + } + + if (!empty($from_lines)) { + // Some lines might still be pending. Add them as copied + array_push($edits, + new Text_Diff_Op_copy( + $this->_getLines($from_lines, $from_line_no, + $from_line_no + count($from_lines) - 1), + $this->_getLines($to_lines, $to_line_no, + $to_line_no + count($to_lines) - 1))); + } + + return $edits; + } + + /** + * Get lines from either the old or new text + * + * @access private + * + * @param array &$text_lines Either $from_lines or $to_lines + * @param int &$line_no Current line number + * @param int $end Optional end line, when we want to chop more + * than one line. + * + * @return array The chopped lines + */ + function _getLines(&$text_lines, &$line_no, $end = false) + { + if (!empty($end)) { + $lines = array(); + // We can shift even more + while ($line_no <= $end) { + array_push($lines, array_shift($text_lines)); + $line_no++; + } + } else { + $lines = array(array_shift($text_lines)); + $line_no++; + } + + return $lines; + } + +} diff --git a/src/wp-includes/Text/Diff/Engine/string.php b/src/wp-includes/Text/Diff/Engine/string.php new file mode 100644 index 0000000..0f3b374 --- /dev/null +++ b/src/wp-includes/Text/Diff/Engine/string.php @@ -0,0 +1,248 @@ +<?php +/** + * Parses unified or context diffs output from eg. the diff utility. + * + * Example: + * <code> + * $patch = file_get_contents('example.patch'); + * $diff = new Text_Diff('string', array($patch)); + * $renderer = new Text_Diff_Renderer_inline(); + * echo $renderer->render($diff); + * </code> + * + * Copyright 2005 rjan Persson <o@42mm.org> + * Copyright 2005-2010 The Horde Project (http://www.horde.org/) + * + * See the enclosed file COPYING for license information (LGPL). If you did + * not receive this file, see http://opensource.org/licenses/lgpl-license.php. + * + * @author rjan Persson <o@42mm.org> + * @package Text_Diff + * @since 0.2.0 + */ +class Text_Diff_Engine_string { + + /** + * Parses a unified or context diff. + * + * First param contains the whole diff and the second can be used to force + * a specific diff type. If the second parameter is 'autodetect', the + * diff will be examined to find out which type of diff this is. + * + * @param string $diff The diff content. + * @param string $mode The diff mode of the content in $diff. One of + * 'context', 'unified', or 'autodetect'. + * + * @return array List of all diff operations. + */ + function diff($diff, $mode = 'autodetect') + { + // Detect line breaks. + $lnbr = "\n"; + if (strpos($diff, "\r\n") !== false) { + $lnbr = "\r\n"; + } elseif (strpos($diff, "\r") !== false) { + $lnbr = "\r"; + } + + // Make sure we have a line break at the EOF. + if (substr($diff, -strlen($lnbr)) != $lnbr) { + $diff .= $lnbr; + } + + if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') { + return PEAR::raiseError('Type of diff is unsupported'); + } + + if ($mode == 'autodetect') { + $context = strpos($diff, '***'); + $unified = strpos($diff, '---'); + if ($context === $unified) { + return PEAR::raiseError('Type of diff could not be detected'); + } elseif ($context === false || $unified === false) { + $mode = $context !== false ? 'context' : 'unified'; + } else { + $mode = $context < $unified ? 'context' : 'unified'; + } + } + + // Split by new line and remove the diff header, if there is one. + $diff = explode($lnbr, $diff); + if (($mode == 'context' && strpos($diff[0], '***') === 0) || + ($mode == 'unified' && strpos($diff[0], '---') === 0)) { + array_shift($diff); + array_shift($diff); + } + + if ($mode == 'context') { + return $this->parseContextDiff($diff); + } else { + return $this->parseUnifiedDiff($diff); + } + } + + /** + * Parses an array containing the unified diff. + * + * @param array $diff Array of lines. + * + * @return array List of all diff operations. + */ + function parseUnifiedDiff($diff) + { + $edits = array(); + $end = count($diff) - 1; + for ($i = 0; $i < $end;) { + $diff1 = array(); + switch (substr($diff[$i], 0, 1)) { + case ' ': + do { + $diff1[] = substr($diff[$i], 1); + } while (++$i < $end && substr($diff[$i], 0, 1) == ' '); + $edits[] = new Text_Diff_Op_copy($diff1); + break; + + case '+': + // get all new lines + do { + $diff1[] = substr($diff[$i], 1); + } while (++$i < $end && substr($diff[$i], 0, 1) == '+'); + $edits[] = new Text_Diff_Op_add($diff1); + break; + + case '-': + // get changed or removed lines + $diff2 = array(); + do { + $diff1[] = substr($diff[$i], 1); + } while (++$i < $end && substr($diff[$i], 0, 1) == '-'); + + while ($i < $end && substr($diff[$i], 0, 1) == '+') { + $diff2[] = substr($diff[$i++], 1); + } + if (count($diff2) == 0) { + $edits[] = new Text_Diff_Op_delete($diff1); + } else { + $edits[] = new Text_Diff_Op_change($diff1, $diff2); + } + break; + + default: + $i++; + break; + } + } + + return $edits; + } + + /** + * Parses an array containing the context diff. + * + * @param array $diff Array of lines. + * + * @return array List of all diff operations. + */ + function parseContextDiff(&$diff) + { + $edits = array(); + $i = $max_i = $j = $max_j = 0; + $end = count($diff) - 1; + while ($i < $end && $j < $end) { + while ($i >= $max_i && $j >= $max_j) { + // Find the boundaries of the diff output of the two files + for ($i = $j; + $i < $end && substr($diff[$i], 0, 3) == '***'; + $i++); + for ($max_i = $i; + $max_i < $end && substr($diff[$max_i], 0, 3) != '---'; + $max_i++); + for ($j = $max_i; + $j < $end && substr($diff[$j], 0, 3) == '---'; + $j++); + for ($max_j = $j; + $max_j < $end && substr($diff[$max_j], 0, 3) != '***'; + $max_j++); + } + + // find what hasn't been changed + $array = array(); + while ($i < $max_i && + $j < $max_j && + strcmp($diff[$i], $diff[$j]) == 0) { + $array[] = substr($diff[$i], 2); + $i++; + $j++; + } + + while ($i < $max_i && ($max_j-$j) <= 1) { + if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') { + break; + } + $array[] = substr($diff[$i++], 2); + } + + while ($j < $max_j && ($max_i-$i) <= 1) { + if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') { + break; + } + $array[] = substr($diff[$j++], 2); + } + if (count($array) > 0) { + $edits[] = new Text_Diff_Op_copy($array); + } + + if ($i < $max_i) { + $diff1 = array(); + switch (substr($diff[$i], 0, 1)) { + case '!': + $diff2 = array(); + do { + $diff1[] = substr($diff[$i], 2); + if ($j < $max_j && substr($diff[$j], 0, 1) == '!') { + $diff2[] = substr($diff[$j++], 2); + } + } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!'); + $edits[] = new Text_Diff_Op_change($diff1, $diff2); + break; + + case '+': + do { + $diff1[] = substr($diff[$i], 2); + } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+'); + $edits[] = new Text_Diff_Op_add($diff1); + break; + + case '-': + do { + $diff1[] = substr($diff[$i], 2); + } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-'); + $edits[] = new Text_Diff_Op_delete($diff1); + break; + } + } + + if ($j < $max_j) { + $diff2 = array(); + switch (substr($diff[$j], 0, 1)) { + case '+': + do { + $diff2[] = substr($diff[$j++], 2); + } while ($j < $max_j && substr($diff[$j], 0, 1) == '+'); + $edits[] = new Text_Diff_Op_add($diff2); + break; + + case '-': + do { + $diff2[] = substr($diff[$j++], 2); + } while ($j < $max_j && substr($diff[$j], 0, 1) == '-'); + $edits[] = new Text_Diff_Op_delete($diff2); + break; + } + } + } + + return $edits; + } + +} diff --git a/src/wp-includes/Text/Diff/Engine/xdiff.php b/src/wp-includes/Text/Diff/Engine/xdiff.php new file mode 100644 index 0000000..02ce848 --- /dev/null +++ b/src/wp-includes/Text/Diff/Engine/xdiff.php @@ -0,0 +1,64 @@ +<?php +/** + * Class used internally by Diff to actually compute the diffs. + * + * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff) + * to compute the differences between the two input arrays. + * + * Copyright 2004-2010 The Horde Project (http://www.horde.org/) + * + * See the enclosed file COPYING for license information (LGPL). If you did + * not receive this file, see http://opensource.org/licenses/lgpl-license.php. + * + * @author Jon Parise <jon@horde.org> + * @package Text_Diff + */ +class Text_Diff_Engine_xdiff { + + /** + */ + function diff($from_lines, $to_lines) + { + array_walk($from_lines, array('Text_Diff', 'trimNewlines')); + array_walk($to_lines, array('Text_Diff', 'trimNewlines')); + + /* Convert the two input arrays into strings for xdiff processing. */ + $from_string = implode("\n", $from_lines); + $to_string = implode("\n", $to_lines); + + /* Diff the two strings and convert the result to an array. */ + $diff = xdiff_string_diff($from_string, $to_string, count($to_lines)); + $diff = explode("\n", $diff); + + /* Walk through the diff one line at a time. We build the $edits + * array of diff operations by reading the first character of the + * xdiff output (which is in the "unified diff" format). + * + * Note that we don't have enough information to detect "changed" + * lines using this approach, so we can't add Text_Diff_Op_changed + * instances to the $edits array. The result is still perfectly + * valid, albeit a little less descriptive and efficient. */ + $edits = array(); + foreach ($diff as $line) { + if (!strlen($line)) { + continue; + } + switch ($line[0]) { + case ' ': + $edits[] = new Text_Diff_Op_copy(array(substr($line, 1))); + break; + + case '+': + $edits[] = new Text_Diff_Op_add(array(substr($line, 1))); + break; + + case '-': + $edits[] = new Text_Diff_Op_delete(array(substr($line, 1))); + break; + } + } + + return $edits; + } + +} diff --git a/src/wp-includes/Text/Diff/Renderer.php b/src/wp-includes/Text/Diff/Renderer.php new file mode 100644 index 0000000..95c6db4 --- /dev/null +++ b/src/wp-includes/Text/Diff/Renderer.php @@ -0,0 +1,235 @@ +<?php +/** + * A class to render Diffs in different formats. + * + * This class renders the diff in classic diff format. It is intended that + * this class be customized via inheritance, to obtain fancier outputs. + * + * Copyright 2004-2010 The Horde Project (http://www.horde.org/) + * + * See the enclosed file COPYING for license information (LGPL). If you did + * not receive this file, see http://opensource.org/licenses/lgpl-license.php. + * + * @package Text_Diff + */ +class Text_Diff_Renderer { + + /** + * Number of leading context "lines" to preserve. + * + * This should be left at zero for this class, but subclasses may want to + * set this to other values. + */ + var $_leading_context_lines = 0; + + /** + * Number of trailing context "lines" to preserve. + * + * This should be left at zero for this class, but subclasses may want to + * set this to other values. + */ + var $_trailing_context_lines = 0; + + /** + * Constructor. + */ + function Text_Diff_Renderer($params = array()) + { + foreach ($params as $param => $value) { + $v = '_' . $param; + if (isset($this->$v)) { + $this->$v = $value; + } + } + } + + /** + * Get any renderer parameters. + * + * @return array All parameters of this renderer object. + */ + function getParams() + { + $params = array(); + foreach (get_object_vars($this) as $k => $v) { + if ($k[0] == '_') { + $params[substr($k, 1)] = $v; + } + } + + return $params; + } + + /** + * Renders a diff. + * + * @param Text_Diff $diff A Text_Diff object. + * + * @return string The formatted output. + */ + function render($diff) + { + $xi = $yi = 1; + $block = false; + $context = array(); + + $nlead = $this->_leading_context_lines; + $ntrail = $this->_trailing_context_lines; + + $output = $this->_startDiff(); + + $diffs = $diff->getDiff(); + foreach ($diffs as $i => $edit) { + /* If these are unchanged (copied) lines, and we want to keep + * leading or trailing context lines, extract them from the copy + * block. */ + if (is_a($edit, 'Text_Diff_Op_copy')) { + /* Do we have any diff blocks yet? */ + if (is_array($block)) { + /* How many lines to keep as context from the copy + * block. */ + $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail; + if (count($edit->orig) <= $keep) { + /* We have less lines in the block than we want for + * context => keep the whole block. */ + $block[] = $edit; + } else { + if ($ntrail) { + /* Create a new block with as many lines as we need + * for the trailing context. */ + $context = array_slice($edit->orig, 0, $ntrail); + $block[] = new Text_Diff_Op_copy($context); + } + /* @todo */ + $output .= $this->_block($x0, $ntrail + $xi - $x0, + $y0, $ntrail + $yi - $y0, + $block); + $block = false; + } + } + /* Keep the copy block as the context for the next block. */ + $context = $edit->orig; + } else { + /* Don't we have any diff blocks yet? */ + if (!is_array($block)) { + /* Extract context lines from the preceding copy block. */ + $context = array_slice($context, count($context) - $nlead); + $x0 = $xi - count($context); + $y0 = $yi - count($context); + $block = array(); + if ($context) { + $block[] = new Text_Diff_Op_copy($context); + } + } + $block[] = $edit; + } + + if ($edit->orig) { + $xi += count($edit->orig); + } + if ($edit->final) { + $yi += count($edit->final); + } + } + + if (is_array($block)) { + $output .= $this->_block($x0, $xi - $x0, + $y0, $yi - $y0, + $block); + } + + return $output . $this->_endDiff(); + } + + function _block($xbeg, $xlen, $ybeg, $ylen, &$edits) + { + $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen)); + + foreach ($edits as $edit) { + switch (strtolower(get_class($edit))) { + case 'text_diff_op_copy': + $output .= $this->_context($edit->orig); + break; + + case 'text_diff_op_add': + $output .= $this->_added($edit->final); + break; + + case 'text_diff_op_delete': + $output .= $this->_deleted($edit->orig); + break; + + case 'text_diff_op_change': + $output .= $this->_changed($edit->orig, $edit->final); + break; + } + } + + return $output . $this->_endBlock(); + } + + function _startDiff() + { + return ''; + } + + function _endDiff() + { + return ''; + } + + function _blockHeader($xbeg, $xlen, $ybeg, $ylen) + { + if ($xlen > 1) { + $xbeg .= ',' . ($xbeg + $xlen - 1); + } + if ($ylen > 1) { + $ybeg .= ',' . ($ybeg + $ylen - 1); + } + + // this matches the GNU Diff behaviour + if ($xlen && !$ylen) { + $ybeg--; + } elseif (!$xlen) { + $xbeg--; + } + + return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg; + } + + function _startBlock($header) + { + return $header . "\n"; + } + + function _endBlock() + { + return ''; + } + + function _lines($lines, $prefix = ' ') + { + return $prefix . implode("\n$prefix", $lines) . "\n"; + } + + function _context($lines) + { + return $this->_lines($lines, ' '); + } + + function _added($lines) + { + return $this->_lines($lines, '> '); + } + + function _deleted($lines) + { + return $this->_lines($lines, '< '); + } + + function _changed($orig, $final) + { + return $this->_deleted($orig) . "---\n" . $this->_added($final); + } + +} diff --git a/src/wp-includes/Text/Diff/Renderer/inline.php b/src/wp-includes/Text/Diff/Renderer/inline.php new file mode 100644 index 0000000..392bd57 --- /dev/null +++ b/src/wp-includes/Text/Diff/Renderer/inline.php @@ -0,0 +1,206 @@ +<?php +/** + * "Inline" diff renderer. + * + * Copyright 2004-2010 The Horde Project (http://www.horde.org/) + * + * See the enclosed file COPYING for license information (LGPL). If you did + * not receive this file, see http://opensource.org/licenses/lgpl-license.php. + * + * @author Ciprian Popovici + * @package Text_Diff + */ + +/** Text_Diff_Renderer */ + +// WP #7391 +require_once dirname(dirname(__FILE__)) . '/Renderer.php'; + +/** + * "Inline" diff renderer. + * + * This class renders diffs in the Wiki-style "inline" format. + * + * @author Ciprian Popovici + * @package Text_Diff + */ +class Text_Diff_Renderer_inline extends Text_Diff_Renderer { + + /** + * Number of leading context "lines" to preserve. + * + * @var integer + */ + var $_leading_context_lines = 10000; + + /** + * Number of trailing context "lines" to preserve. + * + * @var integer + */ + var $_trailing_context_lines = 10000; + + /** + * Prefix for inserted text. + * + * @var string + */ + var $_ins_prefix = '<ins>'; + + /** + * Suffix for inserted text. + * + * @var string + */ + var $_ins_suffix = '</ins>'; + + /** + * Prefix for deleted text. + * + * @var string + */ + var $_del_prefix = '<del>'; + + /** + * Suffix for deleted text. + * + * @var string + */ + var $_del_suffix = '</del>'; + + /** + * Header for each change block. + * + * @var string + */ + var $_block_header = ''; + + /** + * Whether to split down to character-level. + * + * @var boolean + */ + var $_split_characters = false; + + /** + * What are we currently splitting on? Used to recurse to show word-level + * or character-level changes. + * + * @var string + */ + var $_split_level = 'lines'; + + function _blockHeader($xbeg, $xlen, $ybeg, $ylen) + { + return $this->_block_header; + } + + function _startBlock($header) + { + return $header; + } + + function _lines($lines, $prefix = ' ', $encode = true) + { + if ($encode) { + array_walk($lines, array(&$this, '_encode')); + } + + if ($this->_split_level == 'lines') { + return implode("\n", $lines) . "\n"; + } else { + return implode('', $lines); + } + } + + function _added($lines) + { + array_walk($lines, array(&$this, '_encode')); + $lines[0] = $this->_ins_prefix . $lines[0]; + $lines[count($lines) - 1] .= $this->_ins_suffix; + return $this->_lines($lines, ' ', false); + } + + function _deleted($lines, $words = false) + { + array_walk($lines, array(&$this, '_encode')); + $lines[0] = $this->_del_prefix . $lines[0]; + $lines[count($lines) - 1] .= $this->_del_suffix; + return $this->_lines($lines, ' ', false); + } + + function _changed($orig, $final) + { + /* If we've already split on characters, just display. */ + if ($this->_split_level == 'characters') { + return $this->_deleted($orig) + . $this->_added($final); + } + + /* If we've already split on words, just display. */ + if ($this->_split_level == 'words') { + $prefix = ''; + while ($orig[0] !== false && $final[0] !== false && + substr($orig[0], 0, 1) == ' ' && + substr($final[0], 0, 1) == ' ') { + $prefix .= substr($orig[0], 0, 1); + $orig[0] = substr($orig[0], 1); + $final[0] = substr($final[0], 1); + } + return $prefix . $this->_deleted($orig) . $this->_added($final); + } + + $text1 = implode("\n", $orig); + $text2 = implode("\n", $final); + + /* Non-printing newline marker. */ + $nl = "\0"; + + if ($this->_split_characters) { + $diff = new Text_Diff('native', + array(preg_split('//', $text1), + preg_split('//', $text2))); + } else { + /* We want to split on word boundaries, but we need to preserve + * whitespace as well. Therefore we split on words, but include + * all blocks of whitespace in the wordlist. */ + $diff = new Text_Diff('native', + array($this->_splitOnWords($text1, $nl), + $this->_splitOnWords($text2, $nl))); + } + + /* Get the diff in inline format. */ + $renderer = new Text_Diff_Renderer_inline + (array_merge($this->getParams(), + array('split_level' => $this->_split_characters ? 'characters' : 'words'))); + + /* Run the diff and get the output. */ + return str_replace($nl, "\n", $renderer->render($diff)) . "\n"; + } + + function _splitOnWords($string, $newlineEscape = "\n") + { + // Ignore \0; otherwise the while loop will never finish. + $string = str_replace("\0", '', $string); + + $words = array(); + $length = strlen($string); + $pos = 0; + + while ($pos < $length) { + // Eat a word with any preceding whitespace. + $spaces = strspn(substr($string, $pos), " \n"); + $nextpos = strcspn(substr($string, $pos + $spaces), " \n"); + $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos)); + $pos += $spaces + $nextpos; + } + + return $words; + } + + function _encode(&$string) + { + $string = htmlspecialchars($string); + } + +} diff --git a/src/wp-includes/admin-bar.php b/src/wp-includes/admin-bar.php new file mode 100644 index 0000000..67e6a1a --- /dev/null +++ b/src/wp-includes/admin-bar.php @@ -0,0 +1,854 @@ +<?php +/** + * Admin Bar + * + * This code handles the building and rendering of the press bar. + */ + +/** + * Instantiate the admin bar object and set it up as a global for access elsewhere. + * + * UNHOOKING THIS FUNCTION WILL NOT PROPERLY REMOVE THE ADMIN BAR. + * For that, use show_admin_bar(false) or the 'show_admin_bar' filter. + * + * @since 3.1.0 + * @access private + * @return bool Whether the admin bar was successfully initialized. + */ +function _wp_admin_bar_init() { + global $wp_admin_bar; + + if ( ! is_admin_bar_showing() ) + return false; + + /* Load the admin bar class code ready for instantiation */ + require( ABSPATH . WPINC . '/class-wp-admin-bar.php' ); + + /* Instantiate the admin bar */ + + /** + * Filter the admin bar class to instantiate. + * + * @since 3.1.0 + * + * @param string $wp_admin_bar_class Admin bar class to use. Default 'WP_Admin_Bar'. + */ + $admin_bar_class = apply_filters( 'wp_admin_bar_class', 'WP_Admin_Bar' ); + if ( class_exists( $admin_bar_class ) ) + $wp_admin_bar = new $admin_bar_class; + else + return false; + + $wp_admin_bar->initialize(); + $wp_admin_bar->add_menus(); + + return true; +} +// Don't remove. Wrong way to disable. +add_action( 'template_redirect', '_wp_admin_bar_init', 0 ); +add_action( 'admin_init', '_wp_admin_bar_init' ); + +/** + * Render the admin bar to the page based on the $wp_admin_bar->menu member var. + * This is called very late on the footer actions so that it will render after anything else being + * added to the footer. + * + * It includes the action "admin_bar_menu" which should be used to hook in and + * add new menus to the admin bar. That way you can be sure that you are adding at most optimal point, + * right before the admin bar is rendered. This also gives you access to the $post global, among others. + * + * @since 3.1.0 + */ +function wp_admin_bar_render() { + global $wp_admin_bar; + + if ( ! is_admin_bar_showing() || ! is_object( $wp_admin_bar ) ) + return false; + + /** + * Load all necessary admin bar items. + * + * This is the hook used to add, remove, or manipulate admin bar items. + * + * @since 3.1.0 + * + * @param WP_Admin_Bar $wp_admin_bar WP_Admin_Bar instance, passed by reference + */ + do_action_ref_array( 'admin_bar_menu', array( &$wp_admin_bar ) ); + + /** + * Fires before the admin bar is rendered. + * + * @since 3.1.0 + */ + do_action( 'wp_before_admin_bar_render' ); + + $wp_admin_bar->render(); + + /** + * Fires after the admin bar is rendered. + * + * @since 3.1.0 + */ + do_action( 'wp_after_admin_bar_render' ); +} +add_action( 'wp_footer', 'wp_admin_bar_render', 1000 ); +add_action( 'in_admin_header', 'wp_admin_bar_render', 0 ); + +/** + * Add the WordPress logo menu. + * + * @since 3.3.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_wp_menu( $wp_admin_bar ) { + $wp_admin_bar->add_menu( array( + 'id' => 'wp-logo', + 'title' => '<span class="ab-icon"></span>', + 'href' => self_admin_url( 'about.php' ), + 'meta' => array( + 'title' => __('About WordPress'), + ), + ) ); + + if ( is_user_logged_in() ) { + // Add "About WordPress" link + $wp_admin_bar->add_menu( array( + 'parent' => 'wp-logo', + 'id' => 'about', + 'title' => __('About WordPress'), + 'href' => self_admin_url( 'about.php' ), + ) ); + } + + // Add WordPress.org link + $wp_admin_bar->add_menu( array( + 'parent' => 'wp-logo-external', + 'id' => 'wporg', + 'title' => __('WordPress.org'), + 'href' => __('http://wordpress.org/'), + ) ); + + // Add codex link + $wp_admin_bar->add_menu( array( + 'parent' => 'wp-logo-external', + 'id' => 'documentation', + 'title' => __('Documentation'), + 'href' => __('http://codex.wordpress.org/'), + ) ); + + // Add forums link + $wp_admin_bar->add_menu( array( + 'parent' => 'wp-logo-external', + 'id' => 'support-forums', + 'title' => __('Support Forums'), + 'href' => __('http://wordpress.org/support/'), + ) ); + + // Add feedback link + $wp_admin_bar->add_menu( array( + 'parent' => 'wp-logo-external', + 'id' => 'feedback', + 'title' => __('Feedback'), + 'href' => __('http://wordpress.org/support/forum/requests-and-feedback'), + ) ); +} + +/** + * Add the sidebar toggle button. + * + * @since 3.8.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_sidebar_toggle( $wp_admin_bar ) { + if ( is_admin() ) { + $wp_admin_bar->add_menu( array( + 'id' => 'menu-toggle', + 'title' => '<span class="ab-icon"></span><span class="screen-reader-text">' . __( 'Menu' ) . '</span>', + 'href' => '#', + ) ); + } +} + +/** + * Add the "My Account" item. + * + * @since 3.3.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_my_account_item( $wp_admin_bar ) { + $user_id = get_current_user_id(); + $current_user = wp_get_current_user(); + $profile_url = get_edit_profile_url( $user_id ); + + if ( ! $user_id ) + return; + + $avatar = get_avatar( $user_id, 26 ); + $howdy = sprintf( __('Howdy, %1$s'), $current_user->display_name ); + $class = empty( $avatar ) ? '' : 'with-avatar'; + + $wp_admin_bar->add_menu( array( + 'id' => 'my-account', + 'parent' => 'top-secondary', + 'title' => $howdy . $avatar, + 'href' => $profile_url, + 'meta' => array( + 'class' => $class, + 'title' => __('My Account'), + ), + ) ); +} + +/** + * Add the "My Account" submenu items. + * + * @since 3.1.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_my_account_menu( $wp_admin_bar ) { + $user_id = get_current_user_id(); + $current_user = wp_get_current_user(); + $profile_url = get_edit_profile_url( $user_id ); + + if ( ! $user_id ) + return; + + $wp_admin_bar->add_group( array( + 'parent' => 'my-account', + 'id' => 'user-actions', + ) ); + + $user_info = get_avatar( $user_id, 64 ); + $user_info .= "<span class='display-name'>{$current_user->display_name}</span>"; + + if ( $current_user->display_name !== $current_user->user_login ) + $user_info .= "<span class='username'>{$current_user->user_login}</span>"; + + $wp_admin_bar->add_menu( array( + 'parent' => 'user-actions', + 'id' => 'user-info', + 'title' => $user_info, + 'href' => $profile_url, + 'meta' => array( + 'tabindex' => -1, + ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'user-actions', + 'id' => 'edit-profile', + 'title' => __( 'Edit My Profile' ), + 'href' => $profile_url, + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'user-actions', + 'id' => 'logout', + 'title' => __( 'Log Out' ), + 'href' => wp_logout_url(), + ) ); +} + +/** + * Add the "Site Name" menu. + * + * @since 3.3.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_site_menu( $wp_admin_bar ) { + // Don't show for logged out users. + if ( ! is_user_logged_in() ) + return; + + // Show only when the user is a member of this site, or they're a super admin. + if ( ! is_user_member_of_blog() && ! is_super_admin() ) + return; + + $blogname = get_bloginfo('name'); + + if ( empty( $blogname ) ) + $blogname = preg_replace( '#^(https?://)?(www.)?#', '', get_home_url() ); + + if ( is_network_admin() ) { + $blogname = sprintf( __('Network Admin: %s'), esc_html( get_current_site()->site_name ) ); + } elseif ( is_user_admin() ) { + $blogname = sprintf( __('Global Dashboard: %s'), esc_html( get_current_site()->site_name ) ); + } + + $title = wp_html_excerpt( $blogname, 40, '…' ); + + $wp_admin_bar->add_menu( array( + 'id' => 'site-name', + 'title' => $title, + 'href' => is_admin() ? home_url( '/' ) : admin_url(), + ) ); + + // Create submenu items. + + if ( is_admin() ) { + // Add an option to visit the site. + $wp_admin_bar->add_menu( array( + 'parent' => 'site-name', + 'id' => 'view-site', + 'title' => __( 'Visit Site' ), + 'href' => home_url( '/' ), + ) ); + + if ( is_blog_admin() && is_multisite() && current_user_can( 'manage_sites' ) ) { + $wp_admin_bar->add_menu( array( + 'parent' => 'site-name', + 'id' => 'edit-site', + 'title' => __( 'Edit Site' ), + 'href' => network_admin_url( 'site-info.php?id=' . get_current_blog_id() ), + ) ); + } + + } else { + // We're on the front end, link to the Dashboard. + $wp_admin_bar->add_menu( array( + 'parent' => 'site-name', + 'id' => 'dashboard', + 'title' => __( 'Dashboard' ), + 'href' => admin_url(), + ) ); + + // Add the appearance submenu items. + wp_admin_bar_appearance_menu( $wp_admin_bar ); + } +} + +/** + * Add the "My Sites/[Site Name]" menu and all submenus. + * + * @since 3.1.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_my_sites_menu( $wp_admin_bar ) { + // Don't show for logged out users or single site mode. + if ( ! is_user_logged_in() || ! is_multisite() ) + return; + + // Show only when the user has at least one site, or they're a super admin. + if ( count( $wp_admin_bar->user->blogs ) < 1 && ! is_super_admin() ) + return; + + $wp_admin_bar->add_menu( array( + 'id' => 'my-sites', + 'title' => __( 'My Sites' ), + 'href' => admin_url( 'my-sites.php' ), + ) ); + + if ( is_super_admin() ) { + $wp_admin_bar->add_group( array( + 'parent' => 'my-sites', + 'id' => 'my-sites-super-admin', + ) ); + + $wp_admin_bar->add_menu( array( + 'parent' => 'my-sites-super-admin', + 'id' => 'network-admin', + 'title' => __('Network Admin'), + 'href' => network_admin_url(), + ) ); + + $wp_admin_bar->add_menu( array( + 'parent' => 'network-admin', + 'id' => 'network-admin-d', + 'title' => __( 'Dashboard' ), + 'href' => network_admin_url(), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'network-admin', + 'id' => 'network-admin-s', + 'title' => __( 'Sites' ), + 'href' => network_admin_url( 'sites.php' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'network-admin', + 'id' => 'network-admin-u', + 'title' => __( 'Users' ), + 'href' => network_admin_url( 'users.php' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'network-admin', + 'id' => 'network-admin-t', + 'title' => __( 'Themes' ), + 'href' => network_admin_url( 'themes.php' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'network-admin', + 'id' => 'network-admin-p', + 'title' => __( 'Plugins' ), + 'href' => network_admin_url( 'plugins.php' ), + ) ); + } + + // Add site links + $wp_admin_bar->add_group( array( + 'parent' => 'my-sites', + 'id' => 'my-sites-list', + 'meta' => array( + 'class' => is_super_admin() ? 'ab-sub-secondary' : '', + ), + ) ); + + foreach ( (array) $wp_admin_bar->user->blogs as $blog ) { + switch_to_blog( $blog->userblog_id ); + + $blavatar = '<div class="blavatar"></div>'; + + $blogname = empty( $blog->blogname ) ? $blog->domain : $blog->blogname; + $menu_id = 'blog-' . $blog->userblog_id; + + $wp_admin_bar->add_menu( array( + 'parent' => 'my-sites-list', + 'id' => $menu_id, + 'title' => $blavatar . $blogname, + 'href' => admin_url(), + ) ); + + $wp_admin_bar->add_menu( array( + 'parent' => $menu_id, + 'id' => $menu_id . '-d', + 'title' => __( 'Dashboard' ), + 'href' => admin_url(), + ) ); + + if ( current_user_can( get_post_type_object( 'post' )->cap->create_posts ) ) { + $wp_admin_bar->add_menu( array( + 'parent' => $menu_id, + 'id' => $menu_id . '-n', + 'title' => __( 'New Post' ), + 'href' => admin_url( 'post-new.php' ), + ) ); + } + + if ( current_user_can( 'edit_posts' ) ) { + $wp_admin_bar->add_menu( array( + 'parent' => $menu_id, + 'id' => $menu_id . '-c', + 'title' => __( 'Manage Comments' ), + 'href' => admin_url( 'edit-comments.php' ), + ) ); + } + + $wp_admin_bar->add_menu( array( + 'parent' => $menu_id, + 'id' => $menu_id . '-v', + 'title' => __( 'Visit Site' ), + 'href' => home_url( '/' ), + ) ); + + restore_current_blog(); + } +} + +/** + * Provide a shortlink. + * + * @since 3.1.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_shortlink_menu( $wp_admin_bar ) { + $short = wp_get_shortlink( 0, 'query' ); + $id = 'get-shortlink'; + + if ( empty( $short ) ) + return; + + $html = '<input class="shortlink-input" type="text" readonly="readonly" value="' . esc_attr( $short ) . '" />'; + + $wp_admin_bar->add_menu( array( + 'id' => $id, + 'title' => __( 'Shortlink' ), + 'href' => $short, + 'meta' => array( 'html' => $html ), + ) ); +} + +/** + * Provide an edit link for posts and terms. + * + * @since 3.1.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_edit_menu( $wp_admin_bar ) { + global $tag, $wp_the_query; + + if ( is_admin() ) { + $current_screen = get_current_screen(); + $post = get_post(); + + if ( 'post' == $current_screen->base + && 'add' != $current_screen->action + && ( $post_type_object = get_post_type_object( $post->post_type ) ) + && current_user_can( 'read_post', $post->ID ) + && ( $post_type_object->public ) + && ( $post_type_object->show_in_admin_bar ) ) + { + $wp_admin_bar->add_menu( array( + 'id' => 'view', + 'title' => $post_type_object->labels->view_item, + 'href' => get_permalink( $post->ID ) + ) ); + } elseif ( 'edit-tags' == $current_screen->base + && isset( $tag ) && is_object( $tag ) + && ( $tax = get_taxonomy( $tag->taxonomy ) ) + && $tax->public ) + { + $wp_admin_bar->add_menu( array( + 'id' => 'view', + 'title' => $tax->labels->view_item, + 'href' => get_term_link( $tag ) + ) ); + } + } else { + $current_object = $wp_the_query->get_queried_object(); + + if ( empty( $current_object ) ) + return; + + if ( ! empty( $current_object->post_type ) + && ( $post_type_object = get_post_type_object( $current_object->post_type ) ) + && current_user_can( 'edit_post', $current_object->ID ) + && $post_type_object->show_ui && $post_type_object->show_in_admin_bar ) + { + $wp_admin_bar->add_menu( array( + 'id' => 'edit', + 'title' => $post_type_object->labels->edit_item, + 'href' => get_edit_post_link( $current_object->ID ) + ) ); + } elseif ( ! empty( $current_object->taxonomy ) + && ( $tax = get_taxonomy( $current_object->taxonomy ) ) + && current_user_can( $tax->cap->edit_terms ) + && $tax->show_ui ) + { + $wp_admin_bar->add_menu( array( + 'id' => 'edit', + 'title' => $tax->labels->edit_item, + 'href' => get_edit_term_link( $current_object->term_id, $current_object->taxonomy ) + ) ); + } + } +} + +/** + * Add "Add New" menu. + * + * @since 3.1.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_new_content_menu( $wp_admin_bar ) { + $actions = array(); + + $cpts = (array) get_post_types( array( 'show_in_admin_bar' => true ), 'objects' ); + + if ( isset( $cpts['post'] ) && current_user_can( $cpts['post']->cap->create_posts ) ) + $actions[ 'post-new.php' ] = array( $cpts['post']->labels->name_admin_bar, 'new-post' ); + + if ( isset( $cpts['attachment'] ) && current_user_can( 'upload_files' ) ) + $actions[ 'media-new.php' ] = array( $cpts['attachment']->labels->name_admin_bar, 'new-media' ); + + if ( current_user_can( 'manage_links' ) ) + $actions[ 'link-add.php' ] = array( _x( 'Link', 'add new from admin bar' ), 'new-link' ); + + if ( isset( $cpts['page'] ) && current_user_can( $cpts['page']->cap->create_posts ) ) + $actions[ 'post-new.php?post_type=page' ] = array( $cpts['page']->labels->name_admin_bar, 'new-page' ); + + unset( $cpts['post'], $cpts['page'], $cpts['attachment'] ); + + // Add any additional custom post types. + foreach ( $cpts as $cpt ) { + if ( ! current_user_can( $cpt->cap->create_posts ) ) + continue; + + $key = 'post-new.php?post_type=' . $cpt->name; + $actions[ $key ] = array( $cpt->labels->name_admin_bar, 'new-' . $cpt->name ); + } + // Avoid clash with parent node and a 'content' post type. + if ( isset( $actions['post-new.php?post_type=content'] ) ) + $actions['post-new.php?post_type=content'][1] = 'add-new-content'; + + if ( current_user_can( 'create_users' ) || current_user_can( 'promote_users' ) ) + $actions[ 'user-new.php' ] = array( _x( 'User', 'add new from admin bar' ), 'new-user' ); + + if ( ! $actions ) + return; + + $title = '<span class="ab-icon"></span><span class="ab-label">' . _x( 'New', 'admin bar menu group label' ) . '</span>'; + + $wp_admin_bar->add_menu( array( + 'id' => 'new-content', + 'title' => $title, + 'href' => admin_url( current( array_keys( $actions ) ) ), + 'meta' => array( + 'title' => _x( 'Add New', 'admin bar menu group label' ), + ), + ) ); + + foreach ( $actions as $link => $action ) { + list( $title, $id ) = $action; + + $wp_admin_bar->add_menu( array( + 'parent' => 'new-content', + 'id' => $id, + 'title' => $title, + 'href' => admin_url( $link ) + ) ); + } +} + +/** + * Add edit comments link with awaiting moderation count bubble. + * + * @since 3.1.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_comments_menu( $wp_admin_bar ) { + if ( !current_user_can('edit_posts') ) + return; + + $awaiting_mod = wp_count_comments(); + $awaiting_mod = $awaiting_mod->moderated; + $awaiting_title = esc_attr( sprintf( _n( '%s comment awaiting moderation', '%s comments awaiting moderation', $awaiting_mod ), number_format_i18n( $awaiting_mod ) ) ); + + $icon = '<span class="ab-icon"></span>'; + $title = '<span id="ab-awaiting-mod" class="ab-label awaiting-mod pending-count count-' . $awaiting_mod . '">' . number_format_i18n( $awaiting_mod ) . '</span>'; + + $wp_admin_bar->add_menu( array( + 'id' => 'comments', + 'title' => $icon . $title, + 'href' => admin_url('edit-comments.php'), + 'meta' => array( 'title' => $awaiting_title ), + ) ); +} + +/** + * Add appearance submenu items to the "Site Name" menu. + * + * @since 3.1.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_appearance_menu( $wp_admin_bar ) { + $wp_admin_bar->add_group( array( 'parent' => 'site-name', 'id' => 'appearance' ) ); + + if ( current_user_can( 'switch_themes' ) || current_user_can( 'edit_theme_options' ) ) + $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'themes', 'title' => __('Themes'), 'href' => admin_url('themes.php') ) ); + + if ( ! current_user_can( 'edit_theme_options' ) ) + return; + + $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + $wp_admin_bar->add_menu( array( + 'parent' => 'appearance', + 'id' => 'customize', + 'title' => __('Customize'), + 'href' => add_query_arg( 'url', urlencode( $current_url ), wp_customize_url() ), + 'meta' => array( + 'class' => 'hide-if-no-customize', + ), + ) ); + add_action( 'wp_before_admin_bar_render', 'wp_customize_support_script' ); + + if ( current_theme_supports( 'widgets' ) ) + $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'widgets', 'title' => __('Widgets'), 'href' => admin_url('widgets.php') ) ); + + if ( current_theme_supports( 'menus' ) || current_theme_supports( 'widgets' ) ) + $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'menus', 'title' => __('Menus'), 'href' => admin_url('nav-menus.php') ) ); + + if ( current_theme_supports( 'custom-background' ) ) + $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'background', 'title' => __('Background'), 'href' => admin_url('themes.php?page=custom-background') ) ); + + if ( current_theme_supports( 'custom-header' ) ) + $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'header', 'title' => __('Header'), 'href' => admin_url('themes.php?page=custom-header') ) ); +} + +/** + * Provide an update link if theme/plugin/core updates are available. + * + * @since 3.1.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_updates_menu( $wp_admin_bar ) { + + $update_data = wp_get_update_data(); + + if ( !$update_data['counts']['total'] ) + return; + + $title = '<span class="ab-icon"></span><span class="ab-label">' . number_format_i18n( $update_data['counts']['total'] ) . '</span>'; + $title .= '<span class="screen-reader-text">' . $update_data['title'] . '</span>'; + + $wp_admin_bar->add_menu( array( + 'id' => 'updates', + 'title' => $title, + 'href' => network_admin_url( 'update-core.php' ), + 'meta' => array( + 'title' => $update_data['title'], + ), + ) ); +} + +/** + * Add search form. + * + * @since 3.3.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_search_menu( $wp_admin_bar ) { + if ( is_admin() ) + return; + + $form = '<form action="' . esc_url( home_url( '/' ) ) . '" method="get" id="adminbarsearch">'; + $form .= '<input class="adminbar-input" name="s" id="adminbar-search" type="text" value="" maxlength="150" />'; + $form .= '<input type="submit" class="adminbar-button" value="' . __('Search') . '"/>'; + $form .= '</form>'; + + $wp_admin_bar->add_menu( array( + 'parent' => 'top-secondary', + 'id' => 'search', + 'title' => $form, + 'meta' => array( + 'class' => 'admin-bar-search', + 'tabindex' => -1, + ) + ) ); +} + +/** + * Add secondary menus. + * + * @since 3.3.0 + * + * @param WP_Admin_Bar $wp_admin_bar + */ +function wp_admin_bar_add_secondary_groups( $wp_admin_bar ) { + $wp_admin_bar->add_group( array( + 'id' => 'top-secondary', + 'meta' => array( + 'class' => 'ab-top-secondary', + ), + ) ); + + $wp_admin_bar->add_group( array( + 'parent' => 'wp-logo', + 'id' => 'wp-logo-external', + 'meta' => array( + 'class' => 'ab-sub-secondary', + ), + ) ); +} + +/** + * Style and scripts for the admin bar. + * + * @since 3.1.0 + */ +function wp_admin_bar_header() { ?> +<style type="text/css" media="print">#wpadminbar { display:none; }</style> +<?php +} + +/** + * Default admin bar callback. + * + * @since 3.1.0 + */ +function _admin_bar_bump_cb() { ?> +<style type="text/css" media="screen"> + html { margin-top: 32px !important; } + * html body { margin-top: 32px !important; } + @media screen and ( max-width: 782px ) { + html { margin-top: 46px !important; } + * html body { margin-top: 46px !important; } + } +</style> +<?php +} + +/** + * Set the display status of the admin bar. + * + * This can be called immediately upon plugin load. It does not need to be called from a function hooked to the init action. + * + * @since 3.1.0 + * + * @param bool $show Whether to allow the admin bar to show. + * @return void + */ +function show_admin_bar( $show ) { + global $show_admin_bar; + $show_admin_bar = (bool) $show; +} + +/** + * Determine whether the admin bar should be showing. + * + * @since 3.1.0 + * + * @return bool Whether the admin bar should be showing. + */ +function is_admin_bar_showing() { + global $show_admin_bar, $pagenow; + + // For all these types of requests, we never want an admin bar. + if ( defined('XMLRPC_REQUEST') || defined('DOING_AJAX') || defined('IFRAME_REQUEST') ) + return false; + + // Integrated into the admin. + if ( is_admin() ) + return true; + + if ( ! isset( $show_admin_bar ) ) { + if ( ! is_user_logged_in() || 'wp-login.php' == $pagenow ) { + $show_admin_bar = false; + } else { + $show_admin_bar = _get_admin_bar_pref(); + } + } + + /** + * Filter whether to show the admin bar. + * + * Returning false to this hook is the recommended way to hide the admin bar. + * The user's display preference is used for logged in users. + * + * @since 3.1.0 + * + * @param bool $show_admin_bar Whether the admin bar should be shown. Default false. + */ + $show_admin_bar = apply_filters( 'show_admin_bar', $show_admin_bar ); + + return $show_admin_bar; +} + +/** + * Retrieve the admin bar display preference of a user. + * + * @since 3.1.0 + * @access private + * + * @param string $context Context of this preference check. Defaults to 'front'. The 'admin' + * preference is no longer used. + * @param int $user Optional. ID of the user to check, defaults to 0 for current user. + * @return bool Whether the admin bar should be showing for this user. + */ +function _get_admin_bar_pref( $context = 'front', $user = 0 ) { + $pref = get_user_option( "show_admin_bar_{$context}", $user ); + if ( false === $pref ) + return true; + + return 'true' === $pref; +} diff --git a/src/wp-includes/atomlib.php b/src/wp-includes/atomlib.php new file mode 100644 index 0000000..4dcddc9 --- /dev/null +++ b/src/wp-includes/atomlib.php @@ -0,0 +1,352 @@ +<?php +/** + * Atom Syndication Format PHP Library + * + * @package AtomLib + * @link http://code.google.com/p/phpatomlib/ + * + * @author Elias Torres <elias@torrez.us> + * @version 0.4 + * @since 2.3 + */ + +/** + * Structure that store common Atom Feed Properties + * + * @package AtomLib + */ +class AtomFeed { + /** + * Stores Links + * @var array + * @access public + */ + var $links = array(); + /** + * Stores Categories + * @var array + * @access public + */ + var $categories = array(); + /** + * Stores Entries + * + * @var array + * @access public + */ + var $entries = array(); +} + +/** + * Structure that store Atom Entry Properties + * + * @package AtomLib + */ +class AtomEntry { + /** + * Stores Links + * @var array + * @access public + */ + var $links = array(); + /** + * Stores Categories + * @var array + * @access public + */ + var $categories = array(); +} + +/** + * AtomLib Atom Parser API + * + * @package AtomLib + */ +class AtomParser { + + var $NS = 'http://www.w3.org/2005/Atom'; + var $ATOM_CONTENT_ELEMENTS = array('content','summary','title','subtitle','rights'); + var $ATOM_SIMPLE_ELEMENTS = array('id','updated','published','draft'); + + var $debug = false; + + var $depth = 0; + var $indent = 2; + var $in_content; + var $ns_contexts = array(); + var $ns_decls = array(); + var $content_ns_decls = array(); + var $content_ns_contexts = array(); + var $is_xhtml = false; + var $is_html = false; + var $is_text = true; + var $skipped_div = false; + + var $FILE = "php://input"; + + var $feed; + var $current; + + function AtomParser() { + + $this->feed = new AtomFeed(); + $this->current = null; + $this->map_attrs_func = create_function('$k,$v', 'return "$k=\"$v\"";'); + $this->map_xmlns_func = create_function('$p,$n', '$xd = "xmlns"; if(strlen($n[0])>0) $xd .= ":{$n[0]}"; return "{$xd}=\"{$n[1]}\"";'); + } + + function _p($msg) { + if($this->debug) { + print str_repeat(" ", $this->depth * $this->indent) . $msg ."\n"; + } + } + + function error_handler($log_level, $log_text, $error_file, $error_line) { + $this->error = $log_text; + } + + function parse() { + + set_error_handler(array(&$this, 'error_handler')); + + array_unshift($this->ns_contexts, array()); + + $parser = xml_parser_create_ns(); + xml_set_object($parser, $this); + xml_set_element_handler($parser, "start_element", "end_element"); + xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); + xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); + xml_set_character_data_handler($parser, "cdata"); + xml_set_default_handler($parser, "_default"); + xml_set_start_namespace_decl_handler($parser, "start_ns"); + xml_set_end_namespace_decl_handler($parser, "end_ns"); + + $this->content = ''; + + $ret = true; + + $fp = fopen($this->FILE, "r"); + while ($data = fread($fp, 4096)) { + if($this->debug) $this->content .= $data; + + if(!xml_parse($parser, $data, feof($fp))) { + trigger_error(sprintf(__('XML error: %s at line %d')."\n", + xml_error_string(xml_get_error_code($parser)), + xml_get_current_line_number($parser))); + $ret = false; + break; + } + } + fclose($fp); + + xml_parser_free($parser); + + restore_error_handler(); + + return $ret; + } + + function start_element($parser, $name, $attrs) { + + $tag = array_pop(split(":", $name)); + + switch($name) { + case $this->NS . ':feed': + $this->current = $this->feed; + break; + case $this->NS . ':entry': + $this->current = new AtomEntry(); + break; + }; + + $this->_p("start_element('$name')"); + #$this->_p(print_r($this->ns_contexts,true)); + #$this->_p('current(' . $this->current . ')'); + + array_unshift($this->ns_contexts, $this->ns_decls); + + $this->depth++; + + if(!empty($this->in_content)) { + + $this->content_ns_decls = array(); + + if($this->is_html || $this->is_text) + trigger_error("Invalid content in element found. Content must not be of type text or html if it contains markup."); + + $attrs_prefix = array(); + + // resolve prefixes for attributes + foreach($attrs as $key => $value) { + $with_prefix = $this->ns_to_prefix($key, true); + $attrs_prefix[$with_prefix[1]] = $this->xml_escape($value); + } + + $attrs_str = join(' ', array_map($this->map_attrs_func, array_keys($attrs_prefix), array_values($attrs_prefix))); + if(strlen($attrs_str) > 0) { + $attrs_str = " " . $attrs_str; + } + + $with_prefix = $this->ns_to_prefix($name); + + if(!$this->is_declared_content_ns($with_prefix[0])) { + array_push($this->content_ns_decls, $with_prefix[0]); + } + + $xmlns_str = ''; + if(count($this->content_ns_decls) > 0) { + array_unshift($this->content_ns_contexts, $this->content_ns_decls); + $xmlns_str .= join(' ', array_map($this->map_xmlns_func, array_keys($this->content_ns_contexts[0]), array_values($this->content_ns_contexts[0]))); + if(strlen($xmlns_str) > 0) { + $xmlns_str = " " . $xmlns_str; + } + } + + array_push($this->in_content, array($tag, $this->depth, "<". $with_prefix[1] ."{$xmlns_str}{$attrs_str}" . ">")); + + } else if(in_array($tag, $this->ATOM_CONTENT_ELEMENTS) || in_array($tag, $this->ATOM_SIMPLE_ELEMENTS)) { + $this->in_content = array(); + $this->is_xhtml = $attrs['type'] == 'xhtml'; + $this->is_html = $attrs['type'] == 'html' || $attrs['type'] == 'text/html'; + $this->is_text = !in_array('type',array_keys($attrs)) || $attrs['type'] == 'text'; + $type = $this->is_xhtml ? 'XHTML' : ($this->is_html ? 'HTML' : ($this->is_text ? 'TEXT' : $attrs['type'])); + + if(in_array('src',array_keys($attrs))) { + $this->current->$tag = $attrs; + } else { + array_push($this->in_content, array($tag,$this->depth, $type)); + } + } else if($tag == 'link') { + array_push($this->current->links, $attrs); + } else if($tag == 'category') { + array_push($this->current->categories, $attrs); + } + + $this->ns_decls = array(); + } + + function end_element($parser, $name) { + + $tag = array_pop(split(":", $name)); + + $ccount = count($this->in_content); + + # if we are *in* content, then let's proceed to serialize it + if(!empty($this->in_content)) { + # if we are ending the original content element + # then let's finalize the content + if($this->in_content[0][0] == $tag && + $this->in_content[0][1] == $this->depth) { + $origtype = $this->in_content[0][2]; + array_shift($this->in_content); + $newcontent = array(); + foreach($this->in_content as $c) { + if(count($c) == 3) { + array_push($newcontent, $c[2]); + } else { + if($this->is_xhtml || $this->is_text) { + array_push($newcontent, $this->xml_escape($c)); + } else { + array_push($newcontent, $c); + } + } + } + if(in_array($tag, $this->ATOM_CONTENT_ELEMENTS)) { + $this->current->$tag = array($origtype, join('',$newcontent)); + } else { + $this->current->$tag = join('',$newcontent); + } + $this->in_content = array(); + } else if($this->in_content[$ccount-1][0] == $tag && + $this->in_content[$ccount-1][1] == $this->depth) { + $this->in_content[$ccount-1][2] = substr($this->in_content[$ccount-1][2],0,-1) . "/>"; + } else { + # else, just finalize the current element's content + $endtag = $this->ns_to_prefix($name); + array_push($this->in_content, array($tag, $this->depth, "</$endtag[1]>")); + } + } + + array_shift($this->ns_contexts); + + $this->depth--; + + if($name == ($this->NS . ':entry')) { + array_push($this->feed->entries, $this->current); + $this->current = null; + } + + $this->_p("end_element('$name')"); + } + + function start_ns($parser, $prefix, $uri) { + $this->_p("starting: " . $prefix . ":" . $uri); + array_push($this->ns_decls, array($prefix,$uri)); + } + + function end_ns($parser, $prefix) { + $this->_p("ending: #" . $prefix . "#"); + } + + function cdata($parser, $data) { + $this->_p("data: #" . str_replace(array("\n"), array("\\n"), trim($data)) . "#"); + if(!empty($this->in_content)) { + array_push($this->in_content, $data); + } + } + + function _default($parser, $data) { + # when does this gets called? + } + + + function ns_to_prefix($qname, $attr=false) { + # split 'http://www.w3.org/1999/xhtml:div' into ('http','//www.w3.org/1999/xhtml','div') + $components = split(":", $qname); + + # grab the last one (e.g 'div') + $name = array_pop($components); + + if(!empty($components)) { + # re-join back the namespace component + $ns = join(":",$components); + foreach($this->ns_contexts as $context) { + foreach($context as $mapping) { + if($mapping[1] == $ns && strlen($mapping[0]) > 0) { + return array($mapping, "$mapping[0]:$name"); + } + } + } + } + + if($attr) { + return array(null, $name); + } else { + foreach($this->ns_contexts as $context) { + foreach($context as $mapping) { + if(strlen($mapping[0]) == 0) { + return array($mapping, $name); + } + } + } + } + } + + function is_declared_content_ns($new_mapping) { + foreach($this->content_ns_contexts as $context) { + foreach($context as $mapping) { + if($new_mapping == $mapping) { + return true; + } + } + } + return false; + } + + function xml_escape($string) + { + return str_replace(array('&','"',"'",'<','>'), + array('&','"',''','<','>'), + $string ); + } +} diff --git a/src/wp-includes/author-template.php b/src/wp-includes/author-template.php new file mode 100644 index 0000000..557a1ab --- /dev/null +++ b/src/wp-includes/author-template.php @@ -0,0 +1,453 @@ +<?php +/** + * Author Template functions for use in themes. + * + * These functions must be used within the WordPress Loop. + * + * @link http://codex.wordpress.org/Author_Templates + * + * @package WordPress + * @subpackage Template + */ + +/** + * Retrieve the author of the current post. + * + * @since 1.5 + * @uses $authordata The current author's DB object. + * @uses apply_filters() Calls 'the_author' hook on the author display name. + * + * @param string $deprecated Deprecated. + * @return string The author's display name. + */ +function get_the_author($deprecated = '') { + global $authordata; + + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '2.1' ); + + /** + * Filter the display name of the current post's author. + * + * @since 2.9.0 + * + * @param string $authordata->display_name The author's display name. + */ + return apply_filters('the_author', is_object($authordata) ? $authordata->display_name : null); +} + +/** + * Display the name of the author of the current post. + * + * The behavior of this function is based off of old functionality predating + * get_the_author(). This function is not deprecated, but is designed to echo + * the value from get_the_author() and as an result of any old theme that might + * still use the old behavior will also pass the value from get_the_author(). + * + * The normal, expected behavior of this function is to echo the author and not + * return it. However, backwards compatibility has to be maintained. + * + * @since 0.71 + * @see get_the_author() + * @link http://codex.wordpress.org/Template_Tags/the_author + * + * @param string $deprecated Deprecated. + * @param string $deprecated_echo Deprecated. Use get_the_author(). Echo the string or return it. + * @return string The author's display name, from get_the_author(). + */ +function the_author( $deprecated = '', $deprecated_echo = true ) { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '2.1' ); + if ( $deprecated_echo !== true ) + _deprecated_argument( __FUNCTION__, '1.5', __('Use <code>get_the_author()</code> instead if you do not want the value echoed.') ); + if ( $deprecated_echo ) + echo get_the_author(); + return get_the_author(); +} + +/** + * Retrieve the author who last edited the current post. + * + * @since 2.8 + * @uses $post The current post's DB object. + * @uses get_post_meta() Retrieves the ID of the author who last edited the current post. + * @uses get_userdata() Retrieves the author's DB object. + * @uses apply_filters() Calls 'the_modified_author' hook on the author display name. + * @return string The author's display name. + */ +function get_the_modified_author() { + if ( $last_id = get_post_meta( get_post()->ID, '_edit_last', true) ) { + $last_user = get_userdata($last_id); + + /** + * Filter the display name of the author who last edited the current post. + * + * @since 2.8.0 + * + * @param string $last_user->display_name The author's display name. + */ + return apply_filters('the_modified_author', $last_user->display_name); + } +} + +/** + * Display the name of the author who last edited the current post. + * + * @since 2.8 + * @see get_the_author() + * @return string The author's display name, from get_the_modified_author(). + */ +function the_modified_author() { + echo get_the_modified_author(); +} + +/** + * Retrieve the requested data of the author of the current post. + * @link http://codex.wordpress.org/Template_Tags/the_author_meta + * @since 2.8.0 + * @uses $authordata The current author's DB object (if $user_id not specified). + * @param string $field selects the field of the users record. + * @param int $user_id Optional. User ID. + * @return string The author's field from the current author's DB object. + */ +function get_the_author_meta( $field = '', $user_id = false ) { + if ( ! $user_id ) { + global $authordata; + $user_id = isset( $authordata->ID ) ? $authordata->ID : 0; + } else { + $authordata = get_userdata( $user_id ); + } + + if ( in_array( $field, array( 'login', 'pass', 'nicename', 'email', 'url', 'registered', 'activation_key', 'status' ) ) ) + $field = 'user_' . $field; + + $value = isset( $authordata->$field ) ? $authordata->$field : ''; + + /** + * Filter the value of the requested user metadata. + * + * The filter name is dynamic and depends on the $field parameter of the function. + * + * @since 2.8.0 + * + * @param string $value The value of the metadata. + * @param int $user_id The user ID. + */ + return apply_filters( 'get_the_author_' . $field, $value, $user_id ); +} + +/** + * Retrieve the requested data of the author of the current post. + * @link http://codex.wordpress.org/Template_Tags/the_author_meta + * @since 2.8.0 + * @param string $field selects the field of the users record. + * @param int $user_id Optional. User ID. + * @echo string The author's field from the current author's DB object. + */ +function the_author_meta( $field = '', $user_id = false ) { + $author_meta = get_the_author_meta( $field, $user_id ); + + /** + * The value of the requested user metadata. + * + * The filter name is dynamic and depends on the $field parameter of the function. + * + * @since 2.8.0 + * + * @param string $author_meta The value of the metadata. + * @param int $user_id The user ID. + */ + echo apply_filters( 'the_author_' . $field, $author_meta, $user_id ); +} + +/** + * Retrieve either author's link or author's name. + * + * If the author has a home page set, return an HTML link, otherwise just return the + * author's name. + * + * @uses get_the_author_meta() + * @uses get_the_author() + */ +function get_the_author_link() { + if ( get_the_author_meta('url') ) { + return '<a href="' . esc_url( get_the_author_meta('url') ) . '" title="' . esc_attr( sprintf(__("Visit %s’s website"), get_the_author()) ) . '" rel="author external">' . get_the_author() . '</a>'; + } else { + return get_the_author(); + } +} + +/** + * Display either author's link or author's name. + * + * If the author has a home page set, echo an HTML link, otherwise just echo the + * author's name. + * + * @link http://codex.wordpress.org/Template_Tags/the_author_link + * @since 2.1 + * @uses get_the_author_link() + */ +function the_author_link() { + echo get_the_author_link(); +} + +/** + * Retrieve the number of posts by the author of the current post. + * + * @since 1.5 + * @uses $post The current post in the Loop's DB object. + * @uses count_user_posts() + * @return int The number of posts by the author. + */ +function get_the_author_posts() { + return count_user_posts( get_post()->post_author ); +} + +/** + * Display the number of posts by the author of the current post. + * + * @link http://codex.wordpress.org/Template_Tags/the_author_posts + * @since 0.71 + * @uses get_the_author_posts() Echoes returned value from function. + */ +function the_author_posts() { + echo get_the_author_posts(); +} + +/** + * Display an HTML link to the author page of the author of the current post. + * + * Does just echo get_author_posts_url() function, like the others do. The + * reason for this, is that another function is used to help in printing the + * link to the author's posts. + * + * @link http://codex.wordpress.org/Template_Tags/the_author_posts_link + * @since 1.2.0 + * @uses $authordata The current author's DB object. + * @uses get_author_posts_url() + * @uses get_the_author() + * @param string $deprecated Deprecated. + */ +function the_author_posts_link($deprecated = '') { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '2.1' ); + + global $authordata; + if ( !is_object( $authordata ) ) + return false; + $link = sprintf( + '<a href="%1$s" title="%2$s" rel="author">%3$s</a>', + esc_url( get_author_posts_url( $authordata->ID, $authordata->user_nicename ) ), + esc_attr( sprintf( __( 'Posts by %s' ), get_the_author() ) ), + get_the_author() + ); + + /** + * Filter the link to the author page of the author of the current post. + * + * @since 2.9.0 + * + * @param string $link HTML link. + */ + echo apply_filters( 'the_author_posts_link', $link ); +} + +/** + * Retrieve the URL to the author page for the user with the ID provided. + * + * @since 2.1.0 + * @uses $wp_rewrite WP_Rewrite + * @return string The URL to the author's page. + */ +function get_author_posts_url($author_id, $author_nicename = '') { + global $wp_rewrite; + $auth_ID = (int) $author_id; + $link = $wp_rewrite->get_author_permastruct(); + + if ( empty($link) ) { + $file = home_url( '/' ); + $link = $file . '?author=' . $auth_ID; + } else { + if ( '' == $author_nicename ) { + $user = get_userdata($author_id); + if ( !empty($user->user_nicename) ) + $author_nicename = $user->user_nicename; + } + $link = str_replace('%author%', $author_nicename, $link); + $link = home_url( user_trailingslashit( $link ) ); + } + + /** + * Filter the URL to the author's page. + * + * @since 2.1.0 + * + * @param string $link The URL to the author's page. + * @param int $author_id The author's id. + * @param string $author_nicename The author's nice name. + */ + $link = apply_filters( 'author_link', $link, $author_id, $author_nicename ); + + return $link; +} + +/** + * List all the authors of the blog, with several options available. + * + * <ul> + * <li>optioncount (boolean) (false): Show the count in parenthesis next to the + * author's name.</li> + * <li>exclude_admin (boolean) (true): Exclude the 'admin' user that is + * installed by default.</li> + * <li>show_fullname (boolean) (false): Show their full names.</li> + * <li>hide_empty (boolean) (true): Don't show authors without any posts.</li> + * <li>feed (string) (''): If isn't empty, show links to author's feeds.</li> + * <li>feed_image (string) (''): If isn't empty, use this image to link to + * feeds.</li> + * <li>echo (boolean) (true): Set to false to return the output, instead of + * echoing.</li> + * <li>style (string) ('list'): Whether to display list of authors in list form + * or as a string.</li> + * <li>html (bool) (true): Whether to list the items in html form or plaintext. + * </li> + * </ul> + * + * @link http://codex.wordpress.org/Template_Tags/wp_list_authors + * @since 1.2.0 + * @param array $args The argument array. + * @return null|string The output, if echo is set to false. + */ +function wp_list_authors($args = '') { + global $wpdb; + + $defaults = array( + 'orderby' => 'name', 'order' => 'ASC', 'number' => '', + 'optioncount' => false, 'exclude_admin' => true, + 'show_fullname' => false, 'hide_empty' => true, + 'feed' => '', 'feed_image' => '', 'feed_type' => '', 'echo' => true, + 'style' => 'list', 'html' => true + ); + + $args = wp_parse_args( $args, $defaults ); + extract( $args, EXTR_SKIP ); + + $return = ''; + + $query_args = wp_array_slice_assoc( $args, array( 'orderby', 'order', 'number' ) ); + $query_args['fields'] = 'ids'; + $authors = get_users( $query_args ); + + $author_count = array(); + foreach ( (array) $wpdb->get_results("SELECT DISTINCT post_author, COUNT(ID) AS count FROM $wpdb->posts WHERE post_type = 'post' AND " . get_private_posts_cap_sql( 'post' ) . " GROUP BY post_author") as $row ) + $author_count[$row->post_author] = $row->count; + + foreach ( $authors as $author_id ) { + $author = get_userdata( $author_id ); + + if ( $exclude_admin && 'admin' == $author->display_name ) + continue; + + $posts = isset( $author_count[$author->ID] ) ? $author_count[$author->ID] : 0; + + if ( !$posts && $hide_empty ) + continue; + + $link = ''; + + if ( $show_fullname && $author->first_name && $author->last_name ) + $name = "$author->first_name $author->last_name"; + else + $name = $author->display_name; + + if ( !$html ) { + $return .= $name . ', '; + + continue; // No need to go further to process HTML. + } + + if ( 'list' == $style ) { + $return .= '<li>'; + } + + $link = '<a href="' . get_author_posts_url( $author->ID, $author->user_nicename ) . '" title="' . esc_attr( sprintf(__("Posts by %s"), $author->display_name) ) . '">' . $name . '</a>'; + + if ( !empty( $feed_image ) || !empty( $feed ) ) { + $link .= ' '; + if ( empty( $feed_image ) ) { + $link .= '('; + } + + $link .= '<a href="' . get_author_feed_link( $author->ID ) . '"'; + + $alt = $title = ''; + if ( !empty( $feed ) ) { + $title = ' title="' . esc_attr( $feed ) . '"'; + $alt = ' alt="' . esc_attr( $feed ) . '"'; + $name = $feed; + $link .= $title; + } + + $link .= '>'; + + if ( !empty( $feed_image ) ) + $link .= '<img src="' . esc_url( $feed_image ) . '" style="border: none;"' . $alt . $title . ' />'; + else + $link .= $name; + + $link .= '</a>'; + + if ( empty( $feed_image ) ) + $link .= ')'; + } + + if ( $optioncount ) + $link .= ' ('. $posts . ')'; + + $return .= $link; + $return .= ( 'list' == $style ) ? '</li>' : ', '; + } + + $return = rtrim($return, ', '); + + if ( !$echo ) + return $return; + + echo $return; +} + +/** + * Does this site have more than one author + * + * Checks to see if more than one author has published posts. + * + * @since 3.2.0 + * @return bool Whether or not we have more than one author + */ +function is_multi_author() { + global $wpdb; + + if ( false === ( $is_multi_author = get_transient( 'is_multi_author' ) ) ) { + $rows = (array) $wpdb->get_col("SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 2"); + $is_multi_author = 1 < count( $rows ) ? 1 : 0; + set_transient( 'is_multi_author', $is_multi_author ); + } + + /** + * Filter whether the site has more than one author with published posts. + * + * @since 3.2.0 + * + * @param bool $is_multi_author Whether $is_multi_author should evaluate as true. + */ + return apply_filters( 'is_multi_author', (bool) $is_multi_author ); +} + +/** + * Helper function to clear the cache for number of authors. + * + * @private + */ +function __clear_multi_author_cache() { + delete_transient( 'is_multi_author' ); +} +add_action('transition_post_status', '__clear_multi_author_cache'); diff --git a/src/wp-includes/bookmark-template.php b/src/wp-includes/bookmark-template.php new file mode 100644 index 0000000..64e73a8 --- /dev/null +++ b/src/wp-includes/bookmark-template.php @@ -0,0 +1,272 @@ +<?php +/** + * Bookmark Template Functions for usage in Themes + * + * @package WordPress + * @subpackage Template + */ + +/** + * The formatted output of a list of bookmarks. + * + * The $bookmarks array must contain bookmark objects and will be iterated over + * to retrieve the bookmark to be used in the output. + * + * The output is formatted as HTML with no way to change that format. However, + * what is between, before, and after can be changed. The link itself will be + * HTML. + * + * This function is used internally by wp_list_bookmarks() and should not be + * used by themes. + * + * The defaults for overwriting are: + * 'show_updated' - Default is 0 (integer). Will show the time of when the + * bookmark was last updated. + * 'show_description' - Default is 0 (integer). Whether to show the description + * of the bookmark. + * 'show_images' - Default is 1 (integer). Whether to show link image if + * available. + * 'show_name' - Default is 0 (integer). Whether to show link name if + * available. + * 'before' - Default is '<li>' (string). The html or text to prepend to each + * bookmarks. + * 'after' - Default is '</li>' (string). The html or text to append to each + * bookmarks. + * 'link_before' - Default is '' (string). The html or text to prepend to each + * bookmarks inside the <a> tag. + * 'link_after' - Default is '' (string). The html or text to append to each + * bookmarks inside the <a> tag. + * 'between' - Default is '\n' (string). The string for use in between the link, + * description, and image. + * 'show_rating' - Default is 0 (integer). Whether to show the link rating. + * + * @since 2.1.0 + * @access private + * + * @param array $bookmarks List of bookmarks to traverse + * @param string|array $args Optional. Overwrite the defaults. + * @return string Formatted output in HTML + */ +function _walk_bookmarks($bookmarks, $args = '' ) { + $defaults = array( + 'show_updated' => 0, 'show_description' => 0, + 'show_images' => 1, 'show_name' => 0, + 'before' => '<li>', 'after' => '</li>', 'between' => "\n", + 'show_rating' => 0, 'link_before' => '', 'link_after' => '' + ); + + $r = wp_parse_args( $args, $defaults ); + extract( $r, EXTR_SKIP ); + + $output = ''; // Blank string to start with. + + foreach ( (array) $bookmarks as $bookmark ) { + if ( !isset($bookmark->recently_updated) ) + $bookmark->recently_updated = false; + $output .= $before; + if ( $show_updated && $bookmark->recently_updated ) + $output .= get_option('links_recently_updated_prepend'); + + $the_link = '#'; + if ( !empty($bookmark->link_url) ) + $the_link = esc_url($bookmark->link_url); + + $desc = esc_attr(sanitize_bookmark_field('link_description', $bookmark->link_description, $bookmark->link_id, 'display')); + $name = esc_attr(sanitize_bookmark_field('link_name', $bookmark->link_name, $bookmark->link_id, 'display')); + $title = $desc; + + if ( $show_updated ) + if ( '00' != substr($bookmark->link_updated_f, 0, 2) ) { + $title .= ' ('; + $title .= sprintf(__('Last updated: %s'), date(get_option('links_updated_date_format'), $bookmark->link_updated_f + (get_option('gmt_offset') * HOUR_IN_SECONDS))); + $title .= ')'; + } + + $alt = ' alt="' . $name . ( $show_description ? ' ' . $title : '' ) . '"'; + + if ( '' != $title ) + $title = ' title="' . $title . '"'; + + $rel = $bookmark->link_rel; + if ( '' != $rel ) + $rel = ' rel="' . esc_attr($rel) . '"'; + + $target = $bookmark->link_target; + if ( '' != $target ) + $target = ' target="' . $target . '"'; + + $output .= '<a href="' . $the_link . '"' . $rel . $title . $target . '>'; + + $output .= $link_before; + + if ( $bookmark->link_image != null && $show_images ) { + if ( strpos($bookmark->link_image, 'http') === 0 ) + $output .= "<img src=\"$bookmark->link_image\" $alt $title />"; + else // If it's a relative path + $output .= "<img src=\"" . get_option('siteurl') . "$bookmark->link_image\" $alt $title />"; + + if ( $show_name ) + $output .= " $name"; + } else { + $output .= $name; + } + + $output .= $link_after; + + $output .= '</a>'; + + if ( $show_updated && $bookmark->recently_updated ) + $output .= get_option('links_recently_updated_append'); + + if ( $show_description && '' != $desc ) + $output .= $between . $desc; + + if ( $show_rating ) + $output .= $between . sanitize_bookmark_field('link_rating', $bookmark->link_rating, $bookmark->link_id, 'display'); + + $output .= "$after\n"; + } // end while + + return $output; +} + +/** + * Retrieve or echo all of the bookmarks. + * + * List of default arguments are as follows: + * 'orderby' - Default is 'name' (string). How to order the links by. String is + * based off of the bookmark scheme. + * 'order' - Default is 'ASC' (string). Either 'ASC' or 'DESC'. Orders in either + * ascending or descending order. + * 'limit' - Default is -1 (integer) or show all. The amount of bookmarks to + * display. + * 'category' - Default is empty string (string). Include the links in what + * category ID(s). + * 'category_name' - Default is empty string (string). Get links by category + * name. + * 'hide_invisible' - Default is 1 (integer). Whether to show (default) or hide + * links marked as 'invisible'. + * 'show_updated' - Default is 0 (integer). Will show the time of when the + * bookmark was last updated. + * 'echo' - Default is 1 (integer). Whether to echo (default) or return the + * formatted bookmarks. + * 'categorize' - Default is 1 (integer). Whether to show links listed by + * category (default) or show links in one column. + * 'show_description' - Default is 0 (integer). Whether to show the description + * of the bookmark. + * + * These options define how the Category name will appear before the category + * links are displayed, if 'categorize' is 1. If 'categorize' is 0, then it will + * display for only the 'title_li' string and only if 'title_li' is not empty. + * 'title_li' - Default is 'Bookmarks' (translatable string). What to show + * before the links appear. + * 'title_before' - Default is '<h2>' (string). The HTML or text to show before + * the 'title_li' string. + * 'title_after' - Default is '</h2>' (string). The HTML or text to show after + * the 'title_li' string. + * 'class' - Default is 'linkcat' (string). The CSS class to use for the + * 'title_li'. + * + * 'category_before' - Default is '<li id="%id" class="%class">'. String must + * contain '%id' and '%class' to get + * the id of the category and the 'class' argument. These are used for + * formatting in themes. + * Argument will be displayed before the 'title_before' argument. + * 'category_after' - Default is '</li>' (string). The HTML or text that will + * appear after the list of links. + * + * These are only used if 'categorize' is set to 1 or true. + * 'category_orderby' - Default is 'name'. How to order the bookmark category + * based on term scheme. + * 'category_order' - Default is 'ASC'. Set the order by either ASC (ascending) + * or DESC (descending). + * + * @see _walk_bookmarks() For other arguments that can be set in this function + * and passed to _walk_bookmarks(). + * @see get_bookmarks() For other arguments that can be set in this function and + * passed to get_bookmarks(). + * @link http://codex.wordpress.org/Template_Tags/wp_list_bookmarks + * + * @since 2.1.0 + * @uses _walk_bookmarks() Used to iterate over all of the bookmarks and return + * the html + * @uses get_terms() Gets all of the categories that are for links. + * + * @param string|array $args Optional. Overwrite the defaults of the function + * @return string|null Will only return if echo option is set to not echo. + * Default is not return anything. + */ +function wp_list_bookmarks($args = '') { + $defaults = array( + 'orderby' => 'name', 'order' => 'ASC', + 'limit' => -1, 'category' => '', 'exclude_category' => '', + 'category_name' => '', 'hide_invisible' => 1, + 'show_updated' => 0, 'echo' => 1, + 'categorize' => 1, 'title_li' => __('Bookmarks'), + 'title_before' => '<h2>', 'title_after' => '</h2>', + 'category_orderby' => 'name', 'category_order' => 'ASC', + 'class' => 'linkcat', 'category_before' => '<li id="%id" class="%class">', + 'category_after' => '</li>' + ); + + $r = wp_parse_args( $args, $defaults ); + extract( $r, EXTR_SKIP ); + + $output = ''; + + if ( $categorize ) { + $cats = get_terms( 'link_category', array( 'name__like' => $category_name, 'include' => $category, 'exclude' => $exclude_category, 'orderby' => $category_orderby, 'order' => $category_order, 'hierarchical' => 0 ) ); + if ( empty( $cats ) ) + $categorize = false; + } + + if ( $categorize ) { + // Split the bookmarks into ul's for each category + foreach ( (array) $cats as $cat ) { + $params = array_merge($r, array('category'=>$cat->term_id)); + $bookmarks = get_bookmarks($params); + if ( empty($bookmarks) ) + continue; + $output .= str_replace(array('%id', '%class'), array("linkcat-$cat->term_id", $class), $category_before); + /** + * Filter the bookmarks category name. + * + * @since 2.2.0 + * + * @param string $cat->name The category name of bookmarks. + */ + $catname = apply_filters( 'link_category', $cat->name ); + + $output .= "$title_before$catname$title_after\n\t<ul class='xoxo blogroll'>\n"; + $output .= _walk_bookmarks($bookmarks, $r); + $output .= "\n\t</ul>\n$category_after\n"; + } + } else { + //output one single list using title_li for the title + $bookmarks = get_bookmarks($r); + + if ( !empty($bookmarks) ) { + if ( !empty( $title_li ) ){ + $output .= str_replace(array('%id', '%class'), array("linkcat-$category", $class), $category_before); + $output .= "$title_before$title_li$title_after\n\t<ul class='xoxo blogroll'>\n"; + $output .= _walk_bookmarks($bookmarks, $r); + $output .= "\n\t</ul>\n$category_after\n"; + } else { + $output .= _walk_bookmarks($bookmarks, $r); + } + } + } + + /** + * Filter the bookmarks list before it is echoed or returned. + * + * @since 2.5.0 + * + * @param string $output The HTML list of bookmarks. + */ + $output = apply_filters( 'wp_list_bookmarks', $output ); + + if ( !$echo ) + return $output; + echo $output; +} diff --git a/src/wp-includes/bookmark.php b/src/wp-includes/bookmark.php new file mode 100644 index 0000000..af41816 --- /dev/null +++ b/src/wp-includes/bookmark.php @@ -0,0 +1,408 @@ +<?php +/** + * Link/Bookmark API + * + * @package WordPress + * @subpackage Bookmark + */ + +/** + * Retrieve Bookmark data + * + * @since 2.1.0 + * @uses $wpdb Database Object + * + * @param mixed $bookmark + * @param string $output Optional. Either OBJECT, ARRAY_N, or ARRAY_A constant + * @param string $filter Optional, default is 'raw'. + * @return array|object Type returned depends on $output value. + */ +function get_bookmark($bookmark, $output = OBJECT, $filter = 'raw') { + global $wpdb; + + if ( empty($bookmark) ) { + if ( isset($GLOBALS['link']) ) + $_bookmark = & $GLOBALS['link']; + else + $_bookmark = null; + } elseif ( is_object($bookmark) ) { + wp_cache_add($bookmark->link_id, $bookmark, 'bookmark'); + $_bookmark = $bookmark; + } else { + if ( isset($GLOBALS['link']) && ($GLOBALS['link']->link_id == $bookmark) ) { + $_bookmark = & $GLOBALS['link']; + } elseif ( ! $_bookmark = wp_cache_get($bookmark, 'bookmark') ) { + $_bookmark = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->links WHERE link_id = %d LIMIT 1", $bookmark)); + if ( $_bookmark ) { + $_bookmark->link_category = array_unique( wp_get_object_terms( $_bookmark->link_id, 'link_category', array( 'fields' => 'ids' ) ) ); + wp_cache_add( $_bookmark->link_id, $_bookmark, 'bookmark' ); + } + } + } + + if ( ! $_bookmark ) + return $_bookmark; + + $_bookmark = sanitize_bookmark($_bookmark, $filter); + + if ( $output == OBJECT ) { + return $_bookmark; + } elseif ( $output == ARRAY_A ) { + return get_object_vars($_bookmark); + } elseif ( $output == ARRAY_N ) { + return array_values(get_object_vars($_bookmark)); + } else { + return $_bookmark; + } +} + +/** + * Retrieve single bookmark data item or field. + * + * @since 2.3.0 + * @uses get_bookmark() Gets bookmark object using $bookmark as ID + * @uses sanitize_bookmark_field() Sanitizes Bookmark field based on $context. + * + * @param string $field The name of the data field to return + * @param int $bookmark The bookmark ID to get field + * @param string $context Optional. The context of how the field will be used. + * @return string + */ +function get_bookmark_field( $field, $bookmark, $context = 'display' ) { + $bookmark = (int) $bookmark; + $bookmark = get_bookmark( $bookmark ); + + if ( is_wp_error($bookmark) ) + return $bookmark; + + if ( !is_object($bookmark) ) + return ''; + + if ( !isset($bookmark->$field) ) + return ''; + + return sanitize_bookmark_field($field, $bookmark->$field, $bookmark->link_id, $context); +} + +/** + * Retrieves the list of bookmarks + * + * Attempts to retrieve from the cache first based on MD5 hash of arguments. If + * that fails, then the query will be built from the arguments and executed. The + * results will be stored to the cache. + * + * List of default arguments are as follows: + * 'orderby' - Default is 'name' (string). How to order the links by. String is + * based off of the bookmark scheme. + * 'order' - Default is 'ASC' (string). Either 'ASC' or 'DESC'. Orders in either + * ascending or descending order. + * 'limit' - Default is -1 (integer) or show all. The amount of bookmarks to + * display. + * 'category' - Default is empty string (string). Include the links in what + * category ID(s). + * 'category_name' - Default is empty string (string). Get links by category + * name. + * 'hide_invisible' - Default is 1 (integer). Whether to show (default) or hide + * links marked as 'invisible'. + * 'show_updated' - Default is 0 (integer). Will show the time of when the + * bookmark was last updated. + * 'include' - Default is empty string (string). Include bookmark ID(s) + * separated by commas. + * 'exclude' - Default is empty string (string). Exclude bookmark ID(s) + * separated by commas. + * + * @since 2.1.0 + * @uses $wpdb Database Object + * @link http://codex.wordpress.org/Template_Tags/get_bookmarks + * + * @param string|array $args List of arguments to overwrite the defaults + * @return array List of bookmark row objects + */ +function get_bookmarks($args = '') { + global $wpdb; + + $defaults = array( + 'orderby' => 'name', 'order' => 'ASC', + 'limit' => -1, 'category' => '', + 'category_name' => '', 'hide_invisible' => 1, + 'show_updated' => 0, 'include' => '', + 'exclude' => '', 'search' => '' + ); + + $r = wp_parse_args( $args, $defaults ); + extract( $r, EXTR_SKIP ); + + $cache = array(); + $key = md5( serialize( $r ) ); + if ( $cache = wp_cache_get( 'get_bookmarks', 'bookmark' ) ) { + if ( is_array($cache) && isset( $cache[ $key ] ) ) { + $bookmarks = $cache[ $key ]; + /** + * Filter the returned list of bookmarks. + * + * The first time the hook is evaluated in this file, it returns the cached + * bookmarks list. The second evaluation returns a cached bookmarks list if the + * link category is passed but does not exist. The third evaluation returns + * the full cached results. + * + * @since 2.1.0 + * + * @see get_bookmarks() + * + * @param array $bookmarks List of the cached bookmarks. + * @param array $r An array of bookmark query arguments. + */ + return apply_filters( 'get_bookmarks', $bookmarks, $r ); + } + } + + if ( !is_array($cache) ) + $cache = array(); + + $inclusions = ''; + if ( !empty($include) ) { + $exclude = ''; //ignore exclude, category, and category_name params if using include + $category = ''; + $category_name = ''; + $inclinks = preg_split('/[\s,]+/',$include); + if ( count($inclinks) ) { + foreach ( $inclinks as $inclink ) { + if (empty($inclusions)) + $inclusions = ' AND ( link_id = ' . intval($inclink) . ' '; + else + $inclusions .= ' OR link_id = ' . intval($inclink) . ' '; + } + } + } + if (!empty($inclusions)) + $inclusions .= ')'; + + $exclusions = ''; + if ( !empty($exclude) ) { + $exlinks = preg_split('/[\s,]+/',$exclude); + if ( count($exlinks) ) { + foreach ( $exlinks as $exlink ) { + if (empty($exclusions)) + $exclusions = ' AND ( link_id <> ' . intval($exlink) . ' '; + else + $exclusions .= ' AND link_id <> ' . intval($exlink) . ' '; + } + } + } + if (!empty($exclusions)) + $exclusions .= ')'; + + if ( !empty($category_name) ) { + if ( $category = get_term_by('name', $category_name, 'link_category') ) { + $category = $category->term_id; + } else { + $cache[ $key ] = array(); + wp_cache_set( 'get_bookmarks', $cache, 'bookmark' ); + /** This filter is documented in wp-includes/bookmark.php */ + return apply_filters( 'get_bookmarks', array(), $r ); + } + } + + if ( ! empty($search) ) { + $search = esc_sql( like_escape( $search ) ); + $search = " AND ( (link_url LIKE '%$search%') OR (link_name LIKE '%$search%') OR (link_description LIKE '%$search%') ) "; + } + + $category_query = ''; + $join = ''; + if ( !empty($category) ) { + $incategories = preg_split('/[\s,]+/',$category); + if ( count($incategories) ) { + foreach ( $incategories as $incat ) { + if (empty($category_query)) + $category_query = ' AND ( tt.term_id = ' . intval($incat) . ' '; + else + $category_query .= ' OR tt.term_id = ' . intval($incat) . ' '; + } + } + } + if (!empty($category_query)) { + $category_query .= ") AND taxonomy = 'link_category'"; + $join = " INNER JOIN $wpdb->term_relationships AS tr ON ($wpdb->links.link_id = tr.object_id) INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_taxonomy_id = tr.term_taxonomy_id"; + } + + if ( $show_updated && get_option('links_recently_updated_time') ) { + $recently_updated_test = ", IF (DATE_ADD(link_updated, INTERVAL " . get_option('links_recently_updated_time') . " MINUTE) >= NOW(), 1,0) as recently_updated "; + } else { + $recently_updated_test = ''; + } + + $get_updated = ( $show_updated ) ? ', UNIX_TIMESTAMP(link_updated) AS link_updated_f ' : ''; + + $orderby = strtolower($orderby); + $length = ''; + switch ( $orderby ) { + case 'length': + $length = ", CHAR_LENGTH(link_name) AS length"; + break; + case 'rand': + $orderby = 'rand()'; + break; + case 'link_id': + $orderby = "$wpdb->links.link_id"; + break; + default: + $orderparams = array(); + foreach ( explode(',', $orderby) as $ordparam ) { + $ordparam = trim($ordparam); + $keys = array( 'link_id', 'link_name', 'link_url', 'link_visible', 'link_rating', 'link_owner', 'link_updated', 'link_notes' ); + if ( in_array( 'link_' . $ordparam, $keys ) ) + $orderparams[] = 'link_' . $ordparam; + elseif ( in_array( $ordparam, $keys ) ) + $orderparams[] = $ordparam; + } + $orderby = implode(',', $orderparams); + } + + if ( empty( $orderby ) ) + $orderby = 'link_name'; + + $order = strtoupper( $order ); + if ( '' !== $order && !in_array( $order, array( 'ASC', 'DESC' ) ) ) + $order = 'ASC'; + + $visible = ''; + if ( $hide_invisible ) + $visible = "AND link_visible = 'Y'"; + + $query = "SELECT * $length $recently_updated_test $get_updated FROM $wpdb->links $join WHERE 1=1 $visible $category_query"; + $query .= " $exclusions $inclusions $search"; + $query .= " ORDER BY $orderby $order"; + if ($limit != -1) + $query .= " LIMIT $limit"; + + $results = $wpdb->get_results($query); + + $cache[ $key ] = $results; + wp_cache_set( 'get_bookmarks', $cache, 'bookmark' ); + + /** This filter is documented in wp-includes/bookmark.php */ + return apply_filters( 'get_bookmarks', $results, $r ); +} + +/** + * Sanitizes all bookmark fields + * + * @since 2.3.0 + * + * @param object|array $bookmark Bookmark row + * @param string $context Optional, default is 'display'. How to filter the + * fields + * @return object|array Same type as $bookmark but with fields sanitized. + */ +function sanitize_bookmark($bookmark, $context = 'display') { + $fields = array('link_id', 'link_url', 'link_name', 'link_image', 'link_target', 'link_category', + 'link_description', 'link_visible', 'link_owner', 'link_rating', 'link_updated', + 'link_rel', 'link_notes', 'link_rss', ); + + if ( is_object($bookmark) ) { + $do_object = true; + $link_id = $bookmark->link_id; + } else { + $do_object = false; + $link_id = $bookmark['link_id']; + } + + foreach ( $fields as $field ) { + if ( $do_object ) { + if ( isset($bookmark->$field) ) + $bookmark->$field = sanitize_bookmark_field($field, $bookmark->$field, $link_id, $context); + } else { + if ( isset($bookmark[$field]) ) + $bookmark[$field] = sanitize_bookmark_field($field, $bookmark[$field], $link_id, $context); + } + } + + return $bookmark; +} + +/** + * Sanitizes a bookmark field + * + * Sanitizes the bookmark fields based on what the field name is. If the field + * has a strict value set, then it will be tested for that, else a more generic + * filtering is applied. After the more strict filter is applied, if the + * $context is 'raw' then the value is immediately return. + * + * Hooks exist for the more generic cases. With the 'edit' context, the + * 'edit_$field' filter will be called and passed the $value and $bookmark_id + * respectively. With the 'db' context, the 'pre_$field' filter is called and + * passed the value. The 'display' context is the final context and has the + * $field has the filter name and is passed the $value, $bookmark_id, and + * $context respectively. + * + * @since 2.3.0 + * + * @param string $field The bookmark field + * @param mixed $value The bookmark field value + * @param int $bookmark_id Bookmark ID + * @param string $context How to filter the field value. Either 'raw', 'edit', + * 'attribute', 'js', 'db', or 'display' + * @return mixed The filtered value + */ +function sanitize_bookmark_field($field, $value, $bookmark_id, $context) { + switch ( $field ) { + case 'link_id' : // ints + case 'link_rating' : + $value = (int) $value; + break; + case 'link_category' : // array( ints ) + $value = array_map('absint', (array) $value); + // We return here so that the categories aren't filtered. + // The 'link_category' filter is for the name of a link category, not an array of a link's link categories + return $value; + break; + case 'link_visible' : // bool stored as Y|N + $value = preg_replace('/[^YNyn]/', '', $value); + break; + case 'link_target' : // "enum" + $targets = array('_top', '_blank'); + if ( ! in_array($value, $targets) ) + $value = ''; + break; + } + + if ( 'raw' == $context ) + return $value; + + if ( 'edit' == $context ) { + /** This filter is documented in wp-includes/post.php */ + $value = apply_filters( "edit_$field", $value, $bookmark_id ); + + if ( 'link_notes' == $field ) { + $value = esc_html( $value ); // textarea_escaped + } else { + $value = esc_attr($value); + } + } else if ( 'db' == $context ) { + /** This filter is documented in wp-includes/post.php */ + $value = apply_filters( "pre_$field", $value ); + } else { + /** This filter is documented in wp-includes/post.php */ + $value = apply_filters( $field, $value, $bookmark_id, $context ); + + if ( 'attribute' == $context ) + $value = esc_attr($value); + else if ( 'js' == $context ) + $value = esc_js($value); + } + + return $value; +} + +/** + * Deletes bookmark cache + * + * @since 2.7.0 + * @uses wp_cache_delete() Deletes the contents of 'get_bookmarks' + */ +function clean_bookmark_cache( $bookmark_id ) { + wp_cache_delete( $bookmark_id, 'bookmark' ); + wp_cache_delete( 'get_bookmarks', 'bookmark' ); + clean_object_term_cache( $bookmark_id, 'link'); +} diff --git a/src/wp-includes/cache.php b/src/wp-includes/cache.php new file mode 100644 index 0000000..f517d12 --- /dev/null +++ b/src/wp-includes/cache.php @@ -0,0 +1,653 @@ +<?php +/** + * Object Cache API + * + * @link http://codex.wordpress.org/Function_Reference/WP_Cache + * + * @package WordPress + * @subpackage Cache + */ + +/** + * Adds data to the cache, if the cache key doesn't already exist. + * + * @since 2.0.0 + * @uses $wp_object_cache Object Cache Class + * @see WP_Object_Cache::add() + * + * @param int|string $key The cache key to use for retrieval later + * @param mixed $data The data to add to the cache store + * @param string $group The group to add the cache to + * @param int $expire When the cache data should be expired + * @return bool False if cache key and group already exist, true on success + */ +function wp_cache_add( $key, $data, $group = '', $expire = 0 ) { + global $wp_object_cache; + + return $wp_object_cache->add( $key, $data, $group, (int) $expire ); +} + +/** + * Closes the cache. + * + * This function has ceased to do anything since WordPress 2.5. The + * functionality was removed along with the rest of the persistent cache. This + * does not mean that plugins can't implement this function when they need to + * make sure that the cache is cleaned up after WordPress no longer needs it. + * + * @since 2.0.0 + * + * @return bool Always returns True + */ +function wp_cache_close() { + return true; +} + +/** + * Decrement numeric cache item's value + * + * @since 3.3.0 + * @uses $wp_object_cache Object Cache Class + * @see WP_Object_Cache::decr() + * + * @param int|string $key The cache key to increment + * @param int $offset The amount by which to decrement the item's value. Default is 1. + * @param string $group The group the key is in. + * @return false|int False on failure, the item's new value on success. + */ +function wp_cache_decr( $key, $offset = 1, $group = '' ) { + global $wp_object_cache; + + return $wp_object_cache->decr( $key, $offset, $group ); +} + +/** + * Removes the cache contents matching key and group. + * + * @since 2.0.0 + * @uses $wp_object_cache Object Cache Class + * @see WP_Object_Cache::delete() + * + * @param int|string $key What the contents in the cache are called + * @param string $group Where the cache contents are grouped + * @return bool True on successful removal, false on failure + */ +function wp_cache_delete($key, $group = '') { + global $wp_object_cache; + + return $wp_object_cache->delete($key, $group); +} + +/** + * Removes all cache items. + * + * @since 2.0.0 + * @uses $wp_object_cache Object Cache Class + * @see WP_Object_Cache::flush() + * + * @return bool False on failure, true on success + */ +function wp_cache_flush() { + global $wp_object_cache; + + return $wp_object_cache->flush(); +} + +/** + * Retrieves the cache contents from the cache by key and group. + * + * @since 2.0.0 + * @uses $wp_object_cache Object Cache Class + * @see WP_Object_Cache::get() + * + * @param int|string $key What the contents in the cache are called + * @param string $group Where the cache contents are grouped + * @param bool $force Whether to force an update of the local cache from the persistent cache (default is false) + * @param &bool $found Whether key was found in the cache. Disambiguates a return of false, a storable value. + * @return bool|mixed False on failure to retrieve contents or the cache + * contents on success + */ +function wp_cache_get( $key, $group = '', $force = false, &$found = null ) { + global $wp_object_cache; + + return $wp_object_cache->get( $key, $group, $force, $found ); +} + +/** + * Increment numeric cache item's value + * + * @since 3.3.0 + * @uses $wp_object_cache Object Cache Class + * @see WP_Object_Cache::incr() + * + * @param int|string $key The cache key to increment + * @param int $offset The amount by which to increment the item's value. Default is 1. + * @param string $group The group the key is in. + * @return false|int False on failure, the item's new value on success. + */ +function wp_cache_incr( $key, $offset = 1, $group = '' ) { + global $wp_object_cache; + + return $wp_object_cache->incr( $key, $offset, $group ); +} + +/** + * Sets up Object Cache Global and assigns it. + * + * @since 2.0.0 + * @global WP_Object_Cache $wp_object_cache WordPress Object Cache + */ +function wp_cache_init() { + $GLOBALS['wp_object_cache'] = new WP_Object_Cache(); +} + +/** + * Replaces the contents of the cache with new data. + * + * @since 2.0.0 + * @uses $wp_object_cache Object Cache Class + * @see WP_Object_Cache::replace() + * + * @param int|string $key What to call the contents in the cache + * @param mixed $data The contents to store in the cache + * @param string $group Where to group the cache contents + * @param int $expire When to expire the cache contents + * @return bool False if not exists, true if contents were replaced + */ +function wp_cache_replace( $key, $data, $group = '', $expire = 0 ) { + global $wp_object_cache; + + return $wp_object_cache->replace( $key, $data, $group, (int) $expire ); +} + +/** + * Saves the data to the cache. + * + * @since 2.0 + * @uses $wp_object_cache Object Cache Class + * @see WP_Object_Cache::set() + * + * @param int|string $key What to call the contents in the cache + * @param mixed $data The contents to store in the cache + * @param string $group Where to group the cache contents + * @param int $expire When to expire the cache contents + * @return bool False on failure, true on success + */ +function wp_cache_set( $key, $data, $group = '', $expire = 0 ) { + global $wp_object_cache; + + return $wp_object_cache->set( $key, $data, $group, (int) $expire ); +} + +/** + * Switch the interal blog id. + * + * This changes the blog id used to create keys in blog specific groups. + * + * @since 3.5.0 + * + * @param int $blog_id Blog ID + */ +function wp_cache_switch_to_blog( $blog_id ) { + global $wp_object_cache; + + return $wp_object_cache->switch_to_blog( $blog_id ); +} + +/** + * Adds a group or set of groups to the list of global groups. + * + * @since 2.6.0 + * + * @param string|array $groups A group or an array of groups to add + */ +function wp_cache_add_global_groups( $groups ) { + global $wp_object_cache; + + return $wp_object_cache->add_global_groups( $groups ); +} + +/** + * Adds a group or set of groups to the list of non-persistent groups. + * + * @since 2.6.0 + * + * @param string|array $groups A group or an array of groups to add + */ +function wp_cache_add_non_persistent_groups( $groups ) { + // Default cache doesn't persist so nothing to do here. + return; +} + +/** + * Reset internal cache keys and structures. If the cache backend uses global + * blog or site IDs as part of its cache keys, this function instructs the + * backend to reset those keys and perform any cleanup since blog or site IDs + * have changed since cache init. + * + * This function is deprecated. Use wp_cache_switch_to_blog() instead of this + * function when preparing the cache for a blog switch. For clearing the cache + * during unit tests, consider using wp_cache_init(). wp_cache_init() is not + * recommended outside of unit tests as the performance penality for using it is + * high. + * + * @since 2.6.0 + * @deprecated 3.5.0 + */ +function wp_cache_reset() { + _deprecated_function( __FUNCTION__, '3.5' ); + + global $wp_object_cache; + + return $wp_object_cache->reset(); +} + +/** + * WordPress Object Cache + * + * The WordPress Object Cache is used to save on trips to the database. The + * Object Cache stores all of the cache data to memory and makes the cache + * contents available by using a key, which is used to name and later retrieve + * the cache contents. + * + * The Object Cache can be replaced by other caching mechanisms by placing files + * in the wp-content folder which is looked at in wp-settings. If that file + * exists, then this file will not be included. + * + * @package WordPress + * @subpackage Cache + * @since 2.0 + */ +class WP_Object_Cache { + + /** + * Holds the cached objects + * + * @var array + * @access private + * @since 2.0.0 + */ + var $cache = array (); + + /** + * The amount of times the cache data was already stored in the cache. + * + * @since 2.5.0 + * @access private + * @var int + */ + var $cache_hits = 0; + + /** + * Amount of times the cache did not have the request in cache + * + * @var int + * @access public + * @since 2.0.0 + */ + var $cache_misses = 0; + + /** + * List of global groups + * + * @var array + * @access protected + * @since 3.0.0 + */ + var $global_groups = array(); + + /** + * The blog prefix to prepend to keys in non-global groups. + * + * @var int + * @access private + * @since 3.5.0 + */ + var $blog_prefix; + + /** + * Adds data to the cache if it doesn't already exist. + * + * @uses WP_Object_Cache::_exists Checks to see if the cache already has data. + * @uses WP_Object_Cache::set Sets the data after the checking the cache + * contents existence. + * + * @since 2.0.0 + * + * @param int|string $key What to call the contents in the cache + * @param mixed $data The contents to store in the cache + * @param string $group Where to group the cache contents + * @param int $expire When to expire the cache contents + * @return bool False if cache key and group already exist, true on success + */ + function add( $key, $data, $group = 'default', $expire = 0 ) { + if ( wp_suspend_cache_addition() ) + return false; + + if ( empty( $group ) ) + $group = 'default'; + + $id = $key; + if ( $this->multisite && ! isset( $this->global_groups[ $group ] ) ) + $id = $this->blog_prefix . $key; + + if ( $this->_exists( $id, $group ) ) + return false; + + return $this->set( $key, $data, $group, (int) $expire ); + } + + /** + * Sets the list of global groups. + * + * @since 3.0.0 + * + * @param array $groups List of groups that are global. + */ + function add_global_groups( $groups ) { + $groups = (array) $groups; + + $groups = array_fill_keys( $groups, true ); + $this->global_groups = array_merge( $this->global_groups, $groups ); + } + + /** + * Decrement numeric cache item's value + * + * @since 3.3.0 + * + * @param int|string $key The cache key to increment + * @param int $offset The amount by which to decrement the item's value. Default is 1. + * @param string $group The group the key is in. + * @return false|int False on failure, the item's new value on success. + */ + function decr( $key, $offset = 1, $group = 'default' ) { + if ( empty( $group ) ) + $group = 'default'; + + if ( $this->multisite && ! isset( $this->global_groups[ $group ] ) ) + $key = $this->blog_prefix . $key; + + if ( ! $this->_exists( $key, $group ) ) + return false; + + if ( ! is_numeric( $this->cache[ $group ][ $key ] ) ) + $this->cache[ $group ][ $key ] = 0; + + $offset = (int) $offset; + + $this->cache[ $group ][ $key ] -= $offset; + + if ( $this->cache[ $group ][ $key ] < 0 ) + $this->cache[ $group ][ $key ] = 0; + + return $this->cache[ $group ][ $key ]; + } + + /** + * Remove the contents of the cache key in the group + * + * If the cache key does not exist in the group and $force parameter is set + * to false, then nothing will happen. The $force parameter is set to false + * by default. + * + * @since 2.0.0 + * + * @param int|string $key What the contents in the cache are called + * @param string $group Where the cache contents are grouped + * @param bool $force Optional. Whether to force the unsetting of the cache + * key in the group + * @return bool False if the contents weren't deleted and true on success + */ + function delete($key, $group = 'default', $force = false) { + if ( empty( $group ) ) + $group = 'default'; + + if ( $this->multisite && ! isset( $this->global_groups[ $group ] ) ) + $key = $this->blog_prefix . $key; + + if ( ! $force && ! $this->_exists( $key, $group ) ) + return false; + + unset( $this->cache[$group][$key] ); + return true; + } + + /** + * Clears the object cache of all data + * + * @since 2.0.0 + * + * @return bool Always returns true + */ + function flush() { + $this->cache = array (); + + return true; + } + + /** + * Retrieves the cache contents, if it exists + * + * The contents will be first attempted to be retrieved by searching by the + * key in the cache group. If the cache is hit (success) then the contents + * are returned. + * + * On failure, the number of cache misses will be incremented. + * + * @since 2.0.0 + * + * @param int|string $key What the contents in the cache are called + * @param string $group Where the cache contents are grouped + * @param string $force Whether to force a refetch rather than relying on the local cache (default is false) + * @return bool|mixed False on failure to retrieve contents or the cache + * contents on success + */ + function get( $key, $group = 'default', $force = false, &$found = null ) { + if ( empty( $group ) ) + $group = 'default'; + + if ( $this->multisite && ! isset( $this->global_groups[ $group ] ) ) + $key = $this->blog_prefix . $key; + + if ( $this->_exists( $key, $group ) ) { + $found = true; + $this->cache_hits += 1; + if ( is_object($this->cache[$group][$key]) ) + return clone $this->cache[$group][$key]; + else + return $this->cache[$group][$key]; + } + + $found = false; + $this->cache_misses += 1; + return false; + } + + /** + * Increment numeric cache item's value + * + * @since 3.3.0 + * + * @param int|string $key The cache key to increment + * @param int $offset The amount by which to increment the item's value. Default is 1. + * @param string $group The group the key is in. + * @return false|int False on failure, the item's new value on success. + */ + function incr( $key, $offset = 1, $group = 'default' ) { + if ( empty( $group ) ) + $group = 'default'; + + if ( $this->multisite && ! isset( $this->global_groups[ $group ] ) ) + $key = $this->blog_prefix . $key; + + if ( ! $this->_exists( $key, $group ) ) + return false; + + if ( ! is_numeric( $this->cache[ $group ][ $key ] ) ) + $this->cache[ $group ][ $key ] = 0; + + $offset = (int) $offset; + + $this->cache[ $group ][ $key ] += $offset; + + if ( $this->cache[ $group ][ $key ] < 0 ) + $this->cache[ $group ][ $key ] = 0; + + return $this->cache[ $group ][ $key ]; + } + + /** + * Replace the contents in the cache, if contents already exist + * + * @since 2.0.0 + * @see WP_Object_Cache::set() + * + * @param int|string $key What to call the contents in the cache + * @param mixed $data The contents to store in the cache + * @param string $group Where to group the cache contents + * @param int $expire When to expire the cache contents + * @return bool False if not exists, true if contents were replaced + */ + function replace( $key, $data, $group = 'default', $expire = 0 ) { + if ( empty( $group ) ) + $group = 'default'; + + $id = $key; + if ( $this->multisite && ! isset( $this->global_groups[ $group ] ) ) + $id = $this->blog_prefix . $key; + + if ( ! $this->_exists( $id, $group ) ) + return false; + + return $this->set( $key, $data, $group, (int) $expire ); + } + + /** + * Reset keys + * + * @since 3.0.0 + * @deprecated 3.5.0 + */ + function reset() { + _deprecated_function( __FUNCTION__, '3.5', 'switch_to_blog()' ); + + // Clear out non-global caches since the blog ID has changed. + foreach ( array_keys( $this->cache ) as $group ) { + if ( ! isset( $this->global_groups[ $group ] ) ) + unset( $this->cache[ $group ] ); + } + } + + /** + * Sets the data contents into the cache + * + * The cache contents is grouped by the $group parameter followed by the + * $key. This allows for duplicate ids in unique groups. Therefore, naming of + * the group should be used with care and should follow normal function + * naming guidelines outside of core WordPress usage. + * + * The $expire parameter is not used, because the cache will automatically + * expire for each time a page is accessed and PHP finishes. The method is + * more for cache plugins which use files. + * + * @since 2.0.0 + * + * @param int|string $key What to call the contents in the cache + * @param mixed $data The contents to store in the cache + * @param string $group Where to group the cache contents + * @param int $expire Not Used + * @return bool Always returns true + */ + function set( $key, $data, $group = 'default', $expire = 0 ) { + if ( empty( $group ) ) + $group = 'default'; + + if ( $this->multisite && ! isset( $this->global_groups[ $group ] ) ) + $key = $this->blog_prefix . $key; + + if ( is_object( $data ) ) + $data = clone $data; + + $this->cache[$group][$key] = $data; + return true; + } + + /** + * Echoes the stats of the caching. + * + * Gives the cache hits, and cache misses. Also prints every cached group, + * key and the data. + * + * @since 2.0.0 + */ + function stats() { + echo "<p>"; + echo "<strong>Cache Hits:</strong> {$this->cache_hits}<br />"; + echo "<strong>Cache Misses:</strong> {$this->cache_misses}<br />"; + echo "</p>"; + echo '<ul>'; + foreach ($this->cache as $group => $cache) { + echo "<li><strong>Group:</strong> $group - ( " . number_format( strlen( serialize( $cache ) ) / 1024, 2 ) . 'k )</li>'; + } + echo '</ul>'; + } + + /** + * Switch the interal blog id. + * + * This changes the blog id used to create keys in blog specific groups. + * + * @since 3.5.0 + * + * @param int $blog_id Blog ID + */ + function switch_to_blog( $blog_id ) { + $blog_id = (int) $blog_id; + $this->blog_prefix = $this->multisite ? $blog_id . ':' : ''; + } + + /** + * Utility function to determine whether a key exists in the cache. + * + * @since 3.4.0 + * + * @access protected + */ + protected function _exists( $key, $group ) { + return isset( $this->cache[ $group ] ) && ( isset( $this->cache[ $group ][ $key ] ) || array_key_exists( $key, $this->cache[ $group ] ) ); + } + + /** + * Sets up object properties; PHP 5 style constructor + * + * @since 2.0.8 + * @return null|WP_Object_Cache If cache is disabled, returns null. + */ + function __construct() { + global $blog_id; + + $this->multisite = is_multisite(); + $this->blog_prefix = $this->multisite ? $blog_id . ':' : ''; + + + /** + * @todo This should be moved to the PHP4 style constructor, PHP5 + * already calls __destruct() + */ + register_shutdown_function( array( $this, '__destruct' ) ); + } + + /** + * Will save the object cache before object is completely destroyed. + * + * Called upon object destruction, which should be when PHP ends. + * + * @since 2.0.8 + * + * @return bool True value. Won't be used by PHP + */ + function __destruct() { + return true; + } +} diff --git a/src/wp-includes/canonical.php b/src/wp-includes/canonical.php new file mode 100644 index 0000000..231855e --- /dev/null +++ b/src/wp-includes/canonical.php @@ -0,0 +1,560 @@ +<?php +/** + * Canonical API to handle WordPress Redirecting + * + * Based on "Permalink Redirect" from Scott Yang and "Enforce www. Preference" + * by Mark Jaquith + * + * @package WordPress + * @since 2.3.0 + */ + +/** + * Redirects incoming links to the proper URL based on the site url. + * + * Search engines consider www.somedomain.com and somedomain.com to be two + * different URLs when they both go to the same location. This SEO enhancement + * prevents penalty for duplicate content by redirecting all incoming links to + * one or the other. + * + * Prevents redirection for feeds, trackbacks, searches, comment popup, and + * admin URLs. Does not redirect on non-pretty-permalink-supporting IIS 7+, + * page/post previews, WP admin, Trackbacks, robots.txt, searches, or on POST + * requests. + * + * Will also attempt to find the correct link when a user enters a URL that does + * not exist based on exact WordPress query. Will instead try to parse the URL + * or query in an attempt to figure the correct page to go to. + * + * @since 2.3.0 + * @uses $wp_rewrite + * @uses $is_IIS + * + * @param string $requested_url Optional. The URL that was requested, used to + * figure if redirect is needed. + * @param bool $do_redirect Optional. Redirect to the new URL. + * @return null|false|string Null, if redirect not needed. False, if redirect + * not needed or the string of the URL + */ +function redirect_canonical( $requested_url = null, $do_redirect = true ) { + global $wp_rewrite, $is_IIS, $wp_query, $wpdb; + + if ( is_trackback() || is_search() || is_comments_popup() || is_admin() || !empty($_POST) || is_preview() || is_robots() || ( $is_IIS && !iis7_supports_permalinks() ) ) + return; + + if ( !$requested_url ) { + // build the URL in the address bar + $requested_url = is_ssl() ? 'https://' : 'http://'; + $requested_url .= $_SERVER['HTTP_HOST']; + $requested_url .= $_SERVER['REQUEST_URI']; + } + + $original = @parse_url($requested_url); + if ( false === $original ) + return; + + // Some PHP setups turn requests for / into /index.php in REQUEST_URI + // See: http://trac.wordpress.org/ticket/5017 + // See: http://trac.wordpress.org/ticket/7173 + // Disabled, for now: + // $original['path'] = preg_replace('|/index\.php$|', '/', $original['path']); + + $redirect = $original; + $redirect_url = false; + + // Notice fixing + if ( !isset($redirect['path']) ) + $redirect['path'] = ''; + if ( !isset($redirect['query']) ) + $redirect['query'] = ''; + + if ( is_feed() && ( $id = get_query_var( 'p' ) ) ) { + if ( $redirect_url = get_post_comments_feed_link( $id, get_query_var( 'feed' ) ) ) { + $redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type', 'feed'), $redirect_url ); + $redirect['path'] = parse_url( $redirect_url, PHP_URL_PATH ); + } + } + + if ( is_singular() && 1 > $wp_query->post_count && ($id = get_query_var('p')) ) { + + $vars = $wpdb->get_results( $wpdb->prepare("SELECT post_type, post_parent FROM $wpdb->posts WHERE ID = %d", $id) ); + + if ( isset($vars[0]) && $vars = $vars[0] ) { + if ( 'revision' == $vars->post_type && $vars->post_parent > 0 ) + $id = $vars->post_parent; + + if ( $redirect_url = get_permalink($id) ) + $redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type' ), $redirect_url ); + } + } + + // These tests give us a WP-generated permalink + if ( is_404() ) { + + // Redirect ?page_id, ?p=, ?attachment_id= to their respective url's + $id = max( get_query_var('p'), get_query_var('page_id'), get_query_var('attachment_id') ); + if ( $id && $redirect_post = get_post($id) ) { + $post_type_obj = get_post_type_object($redirect_post->post_type); + if ( $post_type_obj->public ) { + $redirect_url = get_permalink($redirect_post); + $redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type' ), $redirect_url ); + } + } + + if ( get_query_var( 'day' ) && get_query_var( 'monthnum' ) && get_query_var( 'year' ) ) { + $year = get_query_var( 'year' ); + $month = get_query_var( 'monthnum' ); + $day = get_query_var( 'day' ); + $date = sprintf( '%04d-%02d-%02d', $year, $month, $day ); + if ( ! wp_checkdate( $month, $day, $year, $date ) ) { + $redirect_url = get_month_link( $year, $month ); + $redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'year', 'monthnum', 'day' ), $redirect_url ); + } + } elseif ( get_query_var( 'monthnum' ) && get_query_var( 'year' ) && 12 < get_query_var( 'monthnum' ) ) { + $redirect_url = get_year_link( get_query_var( 'year' ) ); + $redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'year', 'monthnum' ), $redirect_url ); + } + + if ( ! $redirect_url ) { + if ( $redirect_url = redirect_guess_404_permalink() ) { + $redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'page', 'feed', 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type' ), $redirect_url ); + } + } + + } elseif ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) { + // rewriting of old ?p=X, ?m=2004, ?m=200401, ?m=20040101 + if ( is_attachment() && !empty($_GET['attachment_id']) && ! $redirect_url ) { + if ( $redirect_url = get_attachment_link(get_query_var('attachment_id')) ) + $redirect['query'] = remove_query_arg('attachment_id', $redirect['query']); + } elseif ( is_single() && !empty($_GET['p']) && ! $redirect_url ) { + if ( $redirect_url = get_permalink(get_query_var('p')) ) + $redirect['query'] = remove_query_arg(array('p', 'post_type'), $redirect['query']); + } elseif ( is_single() && !empty($_GET['name']) && ! $redirect_url ) { + if ( $redirect_url = get_permalink( $wp_query->get_queried_object_id() ) ) + $redirect['query'] = remove_query_arg('name', $redirect['query']); + } elseif ( is_page() && !empty($_GET['page_id']) && ! $redirect_url ) { + if ( $redirect_url = get_permalink(get_query_var('page_id')) ) + $redirect['query'] = remove_query_arg('page_id', $redirect['query']); + } elseif ( is_page() && !is_feed() && isset($wp_query->queried_object) && 'page' == get_option('show_on_front') && $wp_query->queried_object->ID == get_option('page_on_front') && ! $redirect_url ) { + $redirect_url = home_url('/'); + } elseif ( is_home() && !empty($_GET['page_id']) && 'page' == get_option('show_on_front') && get_query_var('page_id') == get_option('page_for_posts') && ! $redirect_url ) { + if ( $redirect_url = get_permalink(get_option('page_for_posts')) ) + $redirect['query'] = remove_query_arg('page_id', $redirect['query']); + } elseif ( !empty($_GET['m']) && ( is_year() || is_month() || is_day() ) ) { + $m = get_query_var('m'); + switch ( strlen($m) ) { + case 4: // Yearly + $redirect_url = get_year_link($m); + break; + case 6: // Monthly + $redirect_url = get_month_link( substr($m, 0, 4), substr($m, 4, 2) ); + break; + case 8: // Daily + $redirect_url = get_day_link(substr($m, 0, 4), substr($m, 4, 2), substr($m, 6, 2)); + break; + } + if ( $redirect_url ) + $redirect['query'] = remove_query_arg('m', $redirect['query']); + // now moving on to non ?m=X year/month/day links + } elseif ( is_day() && get_query_var('year') && get_query_var('monthnum') && !empty($_GET['day']) ) { + if ( $redirect_url = get_day_link(get_query_var('year'), get_query_var('monthnum'), get_query_var('day')) ) + $redirect['query'] = remove_query_arg(array('year', 'monthnum', 'day'), $redirect['query']); + } elseif ( is_month() && get_query_var('year') && !empty($_GET['monthnum']) ) { + if ( $redirect_url = get_month_link(get_query_var('year'), get_query_var('monthnum')) ) + $redirect['query'] = remove_query_arg(array('year', 'monthnum'), $redirect['query']); + } elseif ( is_year() && !empty($_GET['year']) ) { + if ( $redirect_url = get_year_link(get_query_var('year')) ) + $redirect['query'] = remove_query_arg('year', $redirect['query']); + } elseif ( is_author() && !empty($_GET['author']) && preg_match( '|^[0-9]+$|', $_GET['author'] ) ) { + $author = get_userdata(get_query_var('author')); + if ( ( false !== $author ) && $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE $wpdb->posts.post_author = %d AND $wpdb->posts.post_status = 'publish' LIMIT 1", $author->ID ) ) ) { + if ( $redirect_url = get_author_posts_url($author->ID, $author->user_nicename) ) + $redirect['query'] = remove_query_arg('author', $redirect['query']); + } + } elseif ( is_category() || is_tag() || is_tax() ) { // Terms (Tags/categories) + + $term_count = 0; + foreach ( $wp_query->tax_query->queries as $tax_query ) + $term_count += count( $tax_query['terms'] ); + + $obj = $wp_query->get_queried_object(); + if ( $term_count <= 1 && !empty($obj->term_id) && ( $tax_url = get_term_link((int)$obj->term_id, $obj->taxonomy) ) && !is_wp_error($tax_url) ) { + if ( !empty($redirect['query']) ) { + // Strip taxonomy query vars off the url. + $qv_remove = array( 'term', 'taxonomy'); + if ( is_category() ) { + $qv_remove[] = 'category_name'; + $qv_remove[] = 'cat'; + } elseif ( is_tag() ) { + $qv_remove[] = 'tag'; + $qv_remove[] = 'tag_id'; + } else { // Custom taxonomies will have a custom query var, remove those too: + $tax_obj = get_taxonomy( $obj->taxonomy ); + if ( false !== $tax_obj->query_var ) + $qv_remove[] = $tax_obj->query_var; + } + + $rewrite_vars = array_diff( array_keys($wp_query->query), array_keys($_GET) ); + + if ( !array_diff($rewrite_vars, array_keys($_GET)) ) { // Check to see if all the Query vars are coming from the rewrite, none are set via $_GET + $redirect['query'] = remove_query_arg($qv_remove, $redirect['query']); //Remove all of the per-tax qv's + + // Create the destination url for this taxonomy + $tax_url = parse_url($tax_url); + if ( ! empty($tax_url['query']) ) { // Taxonomy accessible via ?taxonomy=..&term=.. or any custom qv.. + parse_str($tax_url['query'], $query_vars); + $redirect['query'] = add_query_arg($query_vars, $redirect['query']); + } else { // Taxonomy is accessible via a "pretty-URL" + $redirect['path'] = $tax_url['path']; + } + + } else { // Some query vars are set via $_GET. Unset those from $_GET that exist via the rewrite + foreach ( $qv_remove as $_qv ) { + if ( isset($rewrite_vars[$_qv]) ) + $redirect['query'] = remove_query_arg($_qv, $redirect['query']); + } + } + } + + } + } elseif ( is_single() && strpos($wp_rewrite->permalink_structure, '%category%') !== false && $cat = get_query_var( 'category_name' ) ) { + $category = get_category_by_path( $cat ); + $post_terms = wp_get_object_terms($wp_query->get_queried_object_id(), 'category', array('fields' => 'tt_ids')); + if ( (!$category || is_wp_error($category)) || ( !is_wp_error($post_terms) && !empty($post_terms) && !in_array($category->term_taxonomy_id, $post_terms) ) ) + $redirect_url = get_permalink($wp_query->get_queried_object_id()); + } + + // Post Paging + if ( is_singular() && ! is_front_page() && get_query_var('page') ) { + if ( !$redirect_url ) + $redirect_url = get_permalink( get_queried_object_id() ); + $redirect_url = trailingslashit( $redirect_url ) . user_trailingslashit( get_query_var( 'page' ), 'single_paged' ); + $redirect['query'] = remove_query_arg( 'page', $redirect['query'] ); + } + + // paging and feeds + if ( get_query_var('paged') || is_feed() || get_query_var('cpage') ) { + while ( preg_match( "#/$wp_rewrite->pagination_base/?[0-9]+?(/+)?$#", $redirect['path'] ) || preg_match( '#/(comments/?)?(feed|rss|rdf|atom|rss2)(/+)?$#', $redirect['path'] ) || preg_match( '#/comment-page-[0-9]+(/+)?$#', $redirect['path'] ) ) { + // Strip off paging and feed + $redirect['path'] = preg_replace("#/$wp_rewrite->pagination_base/?[0-9]+?(/+)?$#", '/', $redirect['path']); // strip off any existing paging + $redirect['path'] = preg_replace('#/(comments/?)?(feed|rss2?|rdf|atom)(/+|$)#', '/', $redirect['path']); // strip off feed endings + $redirect['path'] = preg_replace('#/comment-page-[0-9]+?(/+)?$#', '/', $redirect['path']); // strip off any existing comment paging + } + + $addl_path = ''; + if ( is_feed() && in_array( get_query_var('feed'), $wp_rewrite->feeds ) ) { + $addl_path = !empty( $addl_path ) ? trailingslashit($addl_path) : ''; + if ( !is_singular() && get_query_var( 'withcomments' ) ) + $addl_path .= 'comments/'; + if ( ( 'rss' == get_default_feed() && 'feed' == get_query_var('feed') ) || 'rss' == get_query_var('feed') ) + $addl_path .= user_trailingslashit( 'feed/' . ( ( get_default_feed() == 'rss2' ) ? '' : 'rss2' ), 'feed' ); + else + $addl_path .= user_trailingslashit( 'feed/' . ( ( get_default_feed() == get_query_var('feed') || 'feed' == get_query_var('feed') ) ? '' : get_query_var('feed') ), 'feed' ); + $redirect['query'] = remove_query_arg( 'feed', $redirect['query'] ); + } elseif ( is_feed() && 'old' == get_query_var('feed') ) { + $old_feed_files = array( + 'wp-atom.php' => 'atom', + 'wp-commentsrss2.php' => 'comments_rss2', + 'wp-feed.php' => get_default_feed(), + 'wp-rdf.php' => 'rdf', + 'wp-rss.php' => 'rss2', + 'wp-rss2.php' => 'rss2', + ); + if ( isset( $old_feed_files[ basename( $redirect['path'] ) ] ) ) { + $redirect_url = get_feed_link( $old_feed_files[ basename( $redirect['path'] ) ] ); + wp_redirect( $redirect_url, 301 ); + die(); + } + } + + if ( get_query_var('paged') > 0 ) { + $paged = get_query_var('paged'); + $redirect['query'] = remove_query_arg( 'paged', $redirect['query'] ); + if ( !is_feed() ) { + if ( $paged > 1 && !is_single() ) { + $addl_path = ( !empty( $addl_path ) ? trailingslashit($addl_path) : '' ) . user_trailingslashit("$wp_rewrite->pagination_base/$paged", 'paged'); + } elseif ( !is_single() ) { + $addl_path = !empty( $addl_path ) ? trailingslashit($addl_path) : ''; + } + } elseif ( $paged > 1 ) { + $redirect['query'] = add_query_arg( 'paged', $paged, $redirect['query'] ); + } + } + + if ( get_option('page_comments') && ( ( 'newest' == get_option('default_comments_page') && get_query_var('cpage') > 0 ) || ( 'newest' != get_option('default_comments_page') && get_query_var('cpage') > 1 ) ) ) { + $addl_path = ( !empty( $addl_path ) ? trailingslashit($addl_path) : '' ) . user_trailingslashit( 'comment-page-' . get_query_var('cpage'), 'commentpaged' ); + $redirect['query'] = remove_query_arg( 'cpage', $redirect['query'] ); + } + + $redirect['path'] = user_trailingslashit( preg_replace('|/' . preg_quote( $wp_rewrite->index, '|' ) . '/?$|', '/', $redirect['path']) ); // strip off trailing /index.php/ + if ( !empty( $addl_path ) && $wp_rewrite->using_index_permalinks() && strpos($redirect['path'], '/' . $wp_rewrite->index . '/') === false ) + $redirect['path'] = trailingslashit($redirect['path']) . $wp_rewrite->index . '/'; + if ( !empty( $addl_path ) ) + $redirect['path'] = trailingslashit($redirect['path']) . $addl_path; + $redirect_url = $redirect['scheme'] . '://' . $redirect['host'] . $redirect['path']; + } + + if ( 'wp-register.php' == basename( $redirect['path'] ) ) { + if ( is_multisite() ) + /** This filter is documented in wp-login.php */ + $redirect_url = apply_filters( 'wp_signup_location', network_site_url( 'wp-signup.php' ) ); + else + $redirect_url = site_url( 'wp-login.php?action=register' ); + wp_redirect( $redirect_url, 301 ); + die(); + } + } + + // tack on any additional query vars + $redirect['query'] = preg_replace( '#^\??&*?#', '', $redirect['query'] ); + if ( $redirect_url && !empty($redirect['query']) ) { + parse_str( $redirect['query'], $_parsed_query ); + $redirect = @parse_url($redirect_url); + + if ( ! empty( $_parsed_query['name'] ) && ! empty( $redirect['query'] ) ) { + parse_str( $redirect['query'], $_parsed_redirect_query ); + + if ( empty( $_parsed_redirect_query['name'] ) ) + unset( $_parsed_query['name'] ); + } + + $_parsed_query = rawurlencode_deep( $_parsed_query ); + $redirect_url = add_query_arg( $_parsed_query, $redirect_url ); + } + + if ( $redirect_url ) + $redirect = @parse_url($redirect_url); + + // www.example.com vs example.com + $user_home = @parse_url(home_url()); + if ( !empty($user_home['host']) ) + $redirect['host'] = $user_home['host']; + if ( empty($user_home['path']) ) + $user_home['path'] = '/'; + + // Handle ports + if ( !empty($user_home['port']) ) + $redirect['port'] = $user_home['port']; + else + unset($redirect['port']); + + // trailing /index.php + $redirect['path'] = preg_replace('|/' . preg_quote( $wp_rewrite->index, '|' ) . '/*?$|', '/', $redirect['path']); + + // Remove trailing spaces from the path + $redirect['path'] = preg_replace( '#(%20| )+$#', '', $redirect['path'] ); + + if ( !empty( $redirect['query'] ) ) { + // Remove trailing spaces from certain terminating query string args + $redirect['query'] = preg_replace( '#((p|page_id|cat|tag)=[^&]*?)(%20| )+$#', '$1', $redirect['query'] ); + + // Clean up empty query strings + $redirect['query'] = trim(preg_replace( '#(^|&)(p|page_id|cat|tag)=?(&|$)#', '&', $redirect['query']), '&'); + + // Redirect obsolete feeds + $redirect['query'] = preg_replace( '#(^|&)feed=rss(&|$)#', '$1feed=rss2$2', $redirect['query'] ); + + // Remove redundant leading ampersands + $redirect['query'] = preg_replace( '#^\??&*?#', '', $redirect['query'] ); + } + + // strip /index.php/ when we're not using PATHINFO permalinks + if ( !$wp_rewrite->using_index_permalinks() ) + $redirect['path'] = str_replace( '/' . $wp_rewrite->index . '/', '/', $redirect['path'] ); + + // trailing slashes + if ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() && !is_404() && (!is_front_page() || ( is_front_page() && (get_query_var('paged') > 1) ) ) ) { + $user_ts_type = ''; + if ( get_query_var('paged') > 0 ) { + $user_ts_type = 'paged'; + } else { + foreach ( array('single', 'category', 'page', 'day', 'month', 'year', 'home') as $type ) { + $func = 'is_' . $type; + if ( call_user_func($func) ) { + $user_ts_type = $type; + break; + } + } + } + $redirect['path'] = user_trailingslashit($redirect['path'], $user_ts_type); + } elseif ( is_front_page() ) { + $redirect['path'] = trailingslashit($redirect['path']); + } + + // Strip multiple slashes out of the URL + if ( strpos($redirect['path'], '//') > -1 ) + $redirect['path'] = preg_replace('|/+|', '/', $redirect['path']); + + // Always trailing slash the Front Page URL + if ( trailingslashit( $redirect['path'] ) == trailingslashit( $user_home['path'] ) ) + $redirect['path'] = trailingslashit($redirect['path']); + + // Ignore differences in host capitalization, as this can lead to infinite redirects + // Only redirect no-www <=> yes-www + if ( strtolower($original['host']) == strtolower($redirect['host']) || + ( strtolower($original['host']) != 'www.' . strtolower($redirect['host']) && 'www.' . strtolower($original['host']) != strtolower($redirect['host']) ) ) + $redirect['host'] = $original['host']; + + $compare_original = array($original['host'], $original['path']); + + if ( !empty( $original['port'] ) ) + $compare_original[] = $original['port']; + + if ( !empty( $original['query'] ) ) + $compare_original[] = $original['query']; + + $compare_redirect = array($redirect['host'], $redirect['path']); + + if ( !empty( $redirect['port'] ) ) + $compare_redirect[] = $redirect['port']; + + if ( !empty( $redirect['query'] ) ) + $compare_redirect[] = $redirect['query']; + + if ( $compare_original !== $compare_redirect ) { + $redirect_url = $redirect['scheme'] . '://' . $redirect['host']; + if ( !empty($redirect['port']) ) + $redirect_url .= ':' . $redirect['port']; + $redirect_url .= $redirect['path']; + if ( !empty($redirect['query']) ) + $redirect_url .= '?' . $redirect['query']; + } + + if ( !$redirect_url || $redirect_url == $requested_url ) + return false; + + // Hex encoded octets are case-insensitive. + if ( false !== strpos($requested_url, '%') ) { + if ( !function_exists('lowercase_octets') ) { + function lowercase_octets($matches) { + return strtolower( $matches[0] ); + } + } + $requested_url = preg_replace_callback('|%[a-fA-F0-9][a-fA-F0-9]|', 'lowercase_octets', $requested_url); + } + + /** + * Filter the canonical redirect URL. + * + * Returning false to this filter will cancel the redirect. + * + * @since 2.3.0 + * + * @param string $redirect_url The redirect URL. + * @param string $requested_url The requested URL. + */ + $redirect_url = apply_filters( 'redirect_canonical', $redirect_url, $requested_url ); + + if ( !$redirect_url || $redirect_url == $requested_url ) // yes, again -- in case the filter aborted the request + return false; + + if ( $do_redirect ) { + // protect against chained redirects + if ( !redirect_canonical($redirect_url, false) ) { + wp_redirect($redirect_url, 301); + exit(); + } else { + // Debug + // die("1: $redirect_url<br />2: " . redirect_canonical( $redirect_url, false ) ); + return false; + } + } else { + return $redirect_url; + } +} + +/** + * Removes arguments from a query string if they are not present in a URL + * DO NOT use this in plugin code. + * + * @since 3.4 + * @access private + * + * @return string The altered query string + */ +function _remove_qs_args_if_not_in_url( $query_string, Array $args_to_check, $url ) { + $parsed_url = @parse_url( $url ); + if ( ! empty( $parsed_url['query'] ) ) { + parse_str( $parsed_url['query'], $parsed_query ); + foreach ( $args_to_check as $qv ) { + if ( !isset( $parsed_query[$qv] ) ) + $query_string = remove_query_arg( $qv, $query_string ); + } + } else { + $query_string = remove_query_arg( $args_to_check, $query_string ); + } + return $query_string; +} + +/** + * Attempts to guess the correct URL based on query vars + * + * @since 2.3.0 + * @uses $wpdb + * + * @return bool|string The correct URL if one is found. False on failure. + */ +function redirect_guess_404_permalink() { + global $wpdb, $wp_rewrite; + + if ( get_query_var('name') ) { + $where = $wpdb->prepare("post_name LIKE %s", like_escape( get_query_var('name') ) . '%'); + + // if any of post_type, year, monthnum, or day are set, use them to refine the query + if ( get_query_var('post_type') ) + $where .= $wpdb->prepare(" AND post_type = %s", get_query_var('post_type')); + else + $where .= " AND post_type IN ('" . implode( "', '", get_post_types( array( 'public' => true ) ) ) . "')"; + + if ( get_query_var('year') ) + $where .= $wpdb->prepare(" AND YEAR(post_date) = %d", get_query_var('year')); + if ( get_query_var('monthnum') ) + $where .= $wpdb->prepare(" AND MONTH(post_date) = %d", get_query_var('monthnum')); + if ( get_query_var('day') ) + $where .= $wpdb->prepare(" AND DAYOFMONTH(post_date) = %d", get_query_var('day')); + + $post_id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE $where AND post_status = 'publish'"); + if ( ! $post_id ) + return false; + if ( get_query_var( 'feed' ) ) + return get_post_comments_feed_link( $post_id, get_query_var( 'feed' ) ); + elseif ( get_query_var( 'page' ) ) + return trailingslashit( get_permalink( $post_id ) ) . user_trailingslashit( get_query_var( 'page' ), 'single_paged' ); + else + return get_permalink( $post_id ); + } + + return false; +} + +add_action('template_redirect', 'redirect_canonical'); + +function wp_redirect_admin_locations() { + global $wp_rewrite; + if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) ) + return; + + $admins = array( + home_url( 'wp-admin', 'relative' ), + home_url( 'dashboard', 'relative' ), + home_url( 'admin', 'relative' ), + site_url( 'dashboard', 'relative' ), + site_url( 'admin', 'relative' ), + ); + if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) { + wp_redirect( admin_url() ); + exit; + } + + $logins = array( + home_url( 'wp-login.php', 'relative' ), + home_url( 'login', 'relative' ), + site_url( 'login', 'relative' ), + ); + if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) { + wp_redirect( site_url( 'wp-login.php', 'login' ) ); + exit; + } +} + +add_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 ); diff --git a/src/wp-includes/capabilities.php b/src/wp-includes/capabilities.php new file mode 100644 index 0000000..4bdc28c --- /dev/null +++ b/src/wp-includes/capabilities.php @@ -0,0 +1,1528 @@ +<?php +/** + * WordPress Roles and Capabilities. + * + * @package WordPress + * @subpackage User + */ + +/** + * WordPress User Roles. + * + * The role option is simple, the structure is organized by role name that store + * the name in value of the 'name' key. The capabilities are stored as an array + * in the value of the 'capability' key. + * + * <code> + * array ( + * 'rolename' => array ( + * 'name' => 'rolename', + * 'capabilities' => array() + * ) + * ) + * </code> + * + * @since 2.0.0 + * @package WordPress + * @subpackage User + */ +class WP_Roles { + /** + * List of roles and capabilities. + * + * @since 2.0.0 + * @access public + * @var array + */ + var $roles; + + /** + * List of the role objects. + * + * @since 2.0.0 + * @access public + * @var array + */ + var $role_objects = array(); + + /** + * List of role names. + * + * @since 2.0.0 + * @access public + * @var array + */ + var $role_names = array(); + + /** + * Option name for storing role list. + * + * @since 2.0.0 + * @access public + * @var string + */ + var $role_key; + + /** + * Whether to use the database for retrieval and storage. + * + * @since 2.1.0 + * @access public + * @var bool + */ + var $use_db = true; + + /** + * Constructor + * + * @since 2.0.0 + */ + function __construct() { + $this->_init(); + } + + /** + * Set up the object properties. + * + * The role key is set to the current prefix for the $wpdb object with + * 'user_roles' appended. If the $wp_user_roles global is set, then it will + * be used and the role option will not be updated or used. + * + * @since 2.1.0 + * @access protected + * @uses $wpdb Used to get the database prefix. + * @global array $wp_user_roles Used to set the 'roles' property value. + */ + function _init () { + global $wpdb, $wp_user_roles; + $this->role_key = $wpdb->get_blog_prefix() . 'user_roles'; + if ( ! empty( $wp_user_roles ) ) { + $this->roles = $wp_user_roles; + $this->use_db = false; + } else { + $this->roles = get_option( $this->role_key ); + } + + if ( empty( $this->roles ) ) + return; + + $this->role_objects = array(); + $this->role_names = array(); + foreach ( array_keys( $this->roles ) as $role ) { + $this->role_objects[$role] = new WP_Role( $role, $this->roles[$role]['capabilities'] ); + $this->role_names[$role] = $this->roles[$role]['name']; + } + } + + /** + * Reinitialize the object + * + * Recreates the role objects. This is typically called only by switch_to_blog() + * after switching wpdb to a new blog ID. + * + * @since 3.5.0 + * @access public + */ + function reinit() { + // There is no need to reinit if using the wp_user_roles global. + if ( ! $this->use_db ) + return; + + global $wpdb, $wp_user_roles; + + // Duplicated from _init() to avoid an extra function call. + $this->role_key = $wpdb->get_blog_prefix() . 'user_roles'; + $this->roles = get_option( $this->role_key ); + if ( empty( $this->roles ) ) + return; + + $this->role_objects = array(); + $this->role_names = array(); + foreach ( array_keys( $this->roles ) as $role ) { + $this->role_objects[$role] = new WP_Role( $role, $this->roles[$role]['capabilities'] ); + $this->role_names[$role] = $this->roles[$role]['name']; + } + } + + /** + * Add role name with capabilities to list. + * + * Updates the list of roles, if the role doesn't already exist. + * + * The capabilities are defined in the following format `array( 'read' => true );` + * To explicitly deny a role a capability you set the value for that capability to false. + * + * @since 2.0.0 + * @access public + * + * @param string $role Role name. + * @param string $display_name Role display name. + * @param array $capabilities List of role capabilities in the above format. + * @return WP_Role|null WP_Role object if role is added, null if already exists. + */ + function add_role( $role, $display_name, $capabilities = array() ) { + if ( isset( $this->roles[$role] ) ) + return; + + $this->roles[$role] = array( + 'name' => $display_name, + 'capabilities' => $capabilities + ); + if ( $this->use_db ) + update_option( $this->role_key, $this->roles ); + $this->role_objects[$role] = new WP_Role( $role, $capabilities ); + $this->role_names[$role] = $display_name; + return $this->role_objects[$role]; + } + + /** + * Remove role by name. + * + * @since 2.0.0 + * @access public + * + * @param string $role Role name. + */ + function remove_role( $role ) { + if ( ! isset( $this->role_objects[$role] ) ) + return; + + unset( $this->role_objects[$role] ); + unset( $this->role_names[$role] ); + unset( $this->roles[$role] ); + + if ( $this->use_db ) + update_option( $this->role_key, $this->roles ); + + if ( get_option( 'default_role' ) == $role ) + update_option( 'default_role', 'subscriber' ); + } + + /** + * Add capability to role. + * + * @since 2.0.0 + * @access public + * + * @param string $role Role name. + * @param string $cap Capability name. + * @param bool $grant Optional, default is true. Whether role is capable of performing capability. + */ + function add_cap( $role, $cap, $grant = true ) { + if ( ! isset( $this->roles[$role] ) ) + return; + + $this->roles[$role]['capabilities'][$cap] = $grant; + if ( $this->use_db ) + update_option( $this->role_key, $this->roles ); + } + + /** + * Remove capability from role. + * + * @since 2.0.0 + * @access public + * + * @param string $role Role name. + * @param string $cap Capability name. + */ + function remove_cap( $role, $cap ) { + if ( ! isset( $this->roles[$role] ) ) + return; + + unset( $this->roles[$role]['capabilities'][$cap] ); + if ( $this->use_db ) + update_option( $this->role_key, $this->roles ); + } + + /** + * Retrieve role object by name. + * + * @since 2.0.0 + * @access public + * + * @param string $role Role name. + * @return WP_Role|null WP_Role object if found, null if the role does not exist. + */ + function get_role( $role ) { + if ( isset( $this->role_objects[$role] ) ) + return $this->role_objects[$role]; + else + return null; + } + + /** + * Retrieve list of role names. + * + * @since 2.0.0 + * @access public + * + * @return array List of role names. + */ + function get_names() { + return $this->role_names; + } + + /** + * Whether role name is currently in the list of available roles. + * + * @since 2.0.0 + * @access public + * + * @param string $role Role name to look up. + * @return bool + */ + function is_role( $role ) { + return isset( $this->role_names[$role] ); + } +} + +/** + * WordPress Role class. + * + * @since 2.0.0 + * @package WordPress + * @subpackage User + */ +class WP_Role { + /** + * Role name. + * + * @since 2.0.0 + * @access public + * @var string + */ + var $name; + + /** + * List of capabilities the role contains. + * + * @since 2.0.0 + * @access public + * @var array + */ + var $capabilities; + + /** + * Constructor - Set up object properties. + * + * The list of capabilities, must have the key as the name of the capability + * and the value a boolean of whether it is granted to the role. + * + * @since 2.0.0 + * @access public + * + * @param string $role Role name. + * @param array $capabilities List of capabilities. + */ + function __construct( $role, $capabilities ) { + $this->name = $role; + $this->capabilities = $capabilities; + } + + /** + * Assign role a capability. + * + * @see WP_Roles::add_cap() Method uses implementation for role. + * @since 2.0.0 + * @access public + * + * @param string $cap Capability name. + * @param bool $grant Whether role has capability privilege. + */ + function add_cap( $cap, $grant = true ) { + global $wp_roles; + + if ( ! isset( $wp_roles ) ) + $wp_roles = new WP_Roles(); + + $this->capabilities[$cap] = $grant; + $wp_roles->add_cap( $this->name, $cap, $grant ); + } + + /** + * Remove capability from role. + * + * This is a container for {@link WP_Roles::remove_cap()} to remove the + * capability from the role. That is to say, that {@link + * WP_Roles::remove_cap()} implements the functionality, but it also makes + * sense to use this class, because you don't need to enter the role name. + * + * @since 2.0.0 + * @access public + * + * @param string $cap Capability name. + */ + function remove_cap( $cap ) { + global $wp_roles; + + if ( ! isset( $wp_roles ) ) + $wp_roles = new WP_Roles(); + + unset( $this->capabilities[$cap] ); + $wp_roles->remove_cap( $this->name, $cap ); + } + + /** + * Whether role has capability. + * + * The capabilities is passed through the 'role_has_cap' filter. The first + * parameter for the hook is the list of capabilities the class has + * assigned. The second parameter is the capability name to look for. The + * third and final parameter for the hook is the role name. + * + * @since 2.0.0 + * @access public + * + * @param string $cap Capability name. + * @return bool True, if user has capability. False, if doesn't have capability. + */ + function has_cap( $cap ) { + /** + * Filter which capabilities a role has. + * + * @since 2.0.0 + * + * @param array $capabilities Array of role capabilities. + * @param string $cap Capability name. + * @param string $name Role name. + */ + $capabilities = apply_filters( 'role_has_cap', $this->capabilities, $cap, $this->name ); + if ( !empty( $capabilities[$cap] ) ) + return $capabilities[$cap]; + else + return false; + } + +} + +/** + * WordPress User class. + * + * @since 2.0.0 + * @package WordPress + * @subpackage User + */ +class WP_User { + /** + * User data container. + * + * @since 2.0.0 + * @access private + * @var array + */ + var $data; + + /** + * The user's ID. + * + * @since 2.1.0 + * @access public + * @var int + */ + var $ID = 0; + + /** + * The individual capabilities the user has been given. + * + * @since 2.0.0 + * @access public + * @var array + */ + var $caps = array(); + + /** + * User metadata option name. + * + * @since 2.0.0 + * @access public + * @var string + */ + var $cap_key; + + /** + * The roles the user is part of. + * + * @since 2.0.0 + * @access public + * @var array + */ + var $roles = array(); + + /** + * All capabilities the user has, including individual and role based. + * + * @since 2.0.0 + * @access public + * @var array + */ + var $allcaps = array(); + + /** + * The filter context applied to user data fields. + * + * @since 2.9.0 + * @access private + * @var string + */ + var $filter = null; + + private static $back_compat_keys; + + /** + * Constructor + * + * Retrieves the userdata and passes it to {@link WP_User::init()}. + * + * @since 2.0.0 + * @access public + * + * @param int|string|stdClass|WP_User $id User's ID, a WP_User object, or a user object from the DB. + * @param string $name Optional. User's username + * @param int $blog_id Optional Blog ID, defaults to current blog. + * @return WP_User + */ + function __construct( $id = 0, $name = '', $blog_id = '' ) { + if ( ! isset( self::$back_compat_keys ) ) { + $prefix = $GLOBALS['wpdb']->prefix; + self::$back_compat_keys = array( + 'user_firstname' => 'first_name', + 'user_lastname' => 'last_name', + 'user_description' => 'description', + 'user_level' => $prefix . 'user_level', + $prefix . 'usersettings' => $prefix . 'user-settings', + $prefix . 'usersettingstime' => $prefix . 'user-settings-time', + ); + } + + if ( is_a( $id, 'WP_User' ) ) { + $this->init( $id->data, $blog_id ); + return; + } elseif ( is_object( $id ) ) { + $this->init( $id, $blog_id ); + return; + } + + if ( ! empty( $id ) && ! is_numeric( $id ) ) { + $name = $id; + $id = 0; + } + + if ( $id ) + $data = self::get_data_by( 'id', $id ); + else + $data = self::get_data_by( 'login', $name ); + + if ( $data ) + $this->init( $data, $blog_id ); + } + + /** + * Sets up object properties, including capabilities. + * + * @param object $data User DB row object + * @param int $blog_id Optional. The blog id to initialize for + */ + function init( $data, $blog_id = '' ) { + $this->data = $data; + $this->ID = (int) $data->ID; + + $this->for_blog( $blog_id ); + } + + /** + * Return only the main user fields + * + * @since 3.3.0 + * + * @param string $field The field to query against: 'id', 'slug', 'email' or 'login' + * @param string|int $value The field value + * @return object Raw user object + */ + static function get_data_by( $field, $value ) { + global $wpdb; + + if ( 'id' == $field ) { + // Make sure the value is numeric to avoid casting objects, for example, + // to int 1. + if ( ! is_numeric( $value ) ) + return false; + $value = intval( $value ); + if ( $value < 1 ) + return false; + } else { + $value = trim( $value ); + } + + if ( !$value ) + return false; + + switch ( $field ) { + case 'id': + $user_id = $value; + $db_field = 'ID'; + break; + case 'slug': + $user_id = wp_cache_get($value, 'userslugs'); + $db_field = 'user_nicename'; + break; + case 'email': + $user_id = wp_cache_get($value, 'useremail'); + $db_field = 'user_email'; + break; + case 'login': + $value = sanitize_user( $value ); + $user_id = wp_cache_get($value, 'userlogins'); + $db_field = 'user_login'; + break; + default: + return false; + } + + if ( false !== $user_id ) { + if ( $user = wp_cache_get( $user_id, 'users' ) ) + return $user; + } + + if ( !$user = $wpdb->get_row( $wpdb->prepare( + "SELECT * FROM $wpdb->users WHERE $db_field = %s", $value + ) ) ) + return false; + + update_user_caches( $user ); + + return $user; + } + + /** + * Magic method for checking the existence of a certain custom field + * + * @since 3.3.0 + */ + function __isset( $key ) { + if ( 'id' == $key ) { + _deprecated_argument( 'WP_User->id', '2.1', __( 'Use <code>WP_User->ID</code> instead.' ) ); + $key = 'ID'; + } + + if ( isset( $this->data->$key ) ) + return true; + + if ( isset( self::$back_compat_keys[ $key ] ) ) + $key = self::$back_compat_keys[ $key ]; + + return metadata_exists( 'user', $this->ID, $key ); + } + + /** + * Magic method for accessing custom fields + * + * @since 3.3.0 + */ + function __get( $key ) { + if ( 'id' == $key ) { + _deprecated_argument( 'WP_User->id', '2.1', __( 'Use <code>WP_User->ID</code> instead.' ) ); + return $this->ID; + } + + if ( isset( $this->data->$key ) ) { + $value = $this->data->$key; + } else { + if ( isset( self::$back_compat_keys[ $key ] ) ) + $key = self::$back_compat_keys[ $key ]; + $value = get_user_meta( $this->ID, $key, true ); + } + + if ( $this->filter ) { + $value = sanitize_user_field( $key, $value, $this->ID, $this->filter ); + } + + return $value; + } + + /** + * Magic method for setting custom fields + * + * @since 3.3.0 + */ + function __set( $key, $value ) { + if ( 'id' == $key ) { + _deprecated_argument( 'WP_User->id', '2.1', __( 'Use <code>WP_User->ID</code> instead.' ) ); + $this->ID = $value; + return; + } + + $this->data->$key = $value; + } + + /** + * Determine whether the user exists in the database. + * + * @since 3.4.0 + * @access public + * + * @return bool True if user exists in the database, false if not. + */ + function exists() { + return ! empty( $this->ID ); + } + + /** + * Retrieve the value of a property or meta key. + * + * Retrieves from the users and usermeta table. + * + * @since 3.3.0 + * + * @param string $key Property + */ + function get( $key ) { + return $this->__get( $key ); + } + + /** + * Determine whether a property or meta key is set + * + * Consults the users and usermeta tables. + * + * @since 3.3.0 + * + * @param string $key Property + */ + function has_prop( $key ) { + return $this->__isset( $key ); + } + + /** + * Return an array representation. + * + * @since 3.5.0 + * + * @return array Array representation. + */ + function to_array() { + return get_object_vars( $this->data ); + } + + /** + * Set up capability object properties. + * + * Will set the value for the 'cap_key' property to current database table + * prefix, followed by 'capabilities'. Will then check to see if the + * property matching the 'cap_key' exists and is an array. If so, it will be + * used. + * + * @access protected + * @since 2.1.0 + * + * @param string $cap_key Optional capability key + */ + function _init_caps( $cap_key = '' ) { + global $wpdb; + + if ( empty($cap_key) ) + $this->cap_key = $wpdb->get_blog_prefix() . 'capabilities'; + else + $this->cap_key = $cap_key; + + $this->caps = get_user_meta( $this->ID, $this->cap_key, true ); + + if ( ! is_array( $this->caps ) ) + $this->caps = array(); + + $this->get_role_caps(); + } + + /** + * Retrieve all of the role capabilities and merge with individual capabilities. + * + * All of the capabilities of the roles the user belongs to are merged with + * the users individual roles. This also means that the user can be denied + * specific roles that their role might have, but the specific user isn't + * granted permission to. + * + * @since 2.0.0 + * @uses $wp_roles + * @access public + * + * @return array List of all capabilities for the user. + */ + function get_role_caps() { + global $wp_roles; + + if ( ! isset( $wp_roles ) ) + $wp_roles = new WP_Roles(); + + //Filter out caps that are not role names and assign to $this->roles + if ( is_array( $this->caps ) ) + $this->roles = array_filter( array_keys( $this->caps ), array( $wp_roles, 'is_role' ) ); + + //Build $allcaps from role caps, overlay user's $caps + $this->allcaps = array(); + foreach ( (array) $this->roles as $role ) { + $the_role = $wp_roles->get_role( $role ); + $this->allcaps = array_merge( (array) $this->allcaps, (array) $the_role->capabilities ); + } + $this->allcaps = array_merge( (array) $this->allcaps, (array) $this->caps ); + + return $this->allcaps; + } + + /** + * Add role to user. + * + * Updates the user's meta data option with capabilities and roles. + * + * @since 2.0.0 + * @access public + * + * @param string $role Role name. + */ + function add_role( $role ) { + $this->caps[$role] = true; + update_user_meta( $this->ID, $this->cap_key, $this->caps ); + $this->get_role_caps(); + $this->update_user_level_from_caps(); + } + + /** + * Remove role from user. + * + * @since 2.0.0 + * @access public + * + * @param string $role Role name. + */ + function remove_role( $role ) { + if ( !in_array($role, $this->roles) ) + return; + unset( $this->caps[$role] ); + update_user_meta( $this->ID, $this->cap_key, $this->caps ); + $this->get_role_caps(); + $this->update_user_level_from_caps(); + } + + /** + * Set the role of the user. + * + * This will remove the previous roles of the user and assign the user the + * new one. You can set the role to an empty string and it will remove all + * of the roles from the user. + * + * @since 2.0.0 + * @access public + * + * @param string $role Role name. + */ + function set_role( $role ) { + if ( 1 == count( $this->roles ) && $role == current( $this->roles ) ) + return; + + foreach ( (array) $this->roles as $oldrole ) + unset( $this->caps[$oldrole] ); + + $old_roles = $this->roles; + if ( !empty( $role ) ) { + $this->caps[$role] = true; + $this->roles = array( $role => true ); + } else { + $this->roles = false; + } + update_user_meta( $this->ID, $this->cap_key, $this->caps ); + $this->get_role_caps(); + $this->update_user_level_from_caps(); + + /** + * Fires after the user's role has changed. + * + * @since 2.9.0 + * @since 3.6.0 Added $old_roles to include an array of the user's previous roles. + * + * @param int $user_id The user ID. + * @param string $role The new role. + * @param array $old_roles An array of the user's previous roles. + */ + do_action( 'set_user_role', $this->ID, $role, $old_roles ); + } + + /** + * Choose the maximum level the user has. + * + * Will compare the level from the $item parameter against the $max + * parameter. If the item is incorrect, then just the $max parameter value + * will be returned. + * + * Used to get the max level based on the capabilities the user has. This + * is also based on roles, so if the user is assigned the Administrator role + * then the capability 'level_10' will exist and the user will get that + * value. + * + * @since 2.0.0 + * @access public + * + * @param int $max Max level of user. + * @param string $item Level capability name. + * @return int Max Level. + */ + function level_reduction( $max, $item ) { + if ( preg_match( '/^level_(10|[0-9])$/i', $item, $matches ) ) { + $level = intval( $matches[1] ); + return max( $max, $level ); + } else { + return $max; + } + } + + /** + * Update the maximum user level for the user. + * + * Updates the 'user_level' user metadata (includes prefix that is the + * database table prefix) with the maximum user level. Gets the value from + * the all of the capabilities that the user has. + * + * @since 2.0.0 + * @access public + */ + function update_user_level_from_caps() { + global $wpdb; + $this->user_level = array_reduce( array_keys( $this->allcaps ), array( $this, 'level_reduction' ), 0 ); + update_user_meta( $this->ID, $wpdb->get_blog_prefix() . 'user_level', $this->user_level ); + } + + /** + * Add capability and grant or deny access to capability. + * + * @since 2.0.0 + * @access public + * + * @param string $cap Capability name. + * @param bool $grant Whether to grant capability to user. + */ + function add_cap( $cap, $grant = true ) { + $this->caps[$cap] = $grant; + update_user_meta( $this->ID, $this->cap_key, $this->caps ); + } + + /** + * Remove capability from user. + * + * @since 2.0.0 + * @access public + * + * @param string $cap Capability name. + */ + function remove_cap( $cap ) { + if ( ! isset( $this->caps[$cap] ) ) + return; + unset( $this->caps[$cap] ); + update_user_meta( $this->ID, $this->cap_key, $this->caps ); + } + + /** + * Remove all of the capabilities of the user. + * + * @since 2.1.0 + * @access public + */ + function remove_all_caps() { + global $wpdb; + $this->caps = array(); + delete_user_meta( $this->ID, $this->cap_key ); + delete_user_meta( $this->ID, $wpdb->get_blog_prefix() . 'user_level' ); + $this->get_role_caps(); + } + + /** + * Whether user has capability or role name. + * + * This is useful for looking up whether the user has a specific role + * assigned to the user. The second optional parameter can also be used to + * check for capabilities against a specific object, such as a post or user. + * + * @since 2.0.0 + * @access public + * + * @param string|int $cap Capability or role name to search. + * @return bool True, if user has capability; false, if user does not have capability. + */ + function has_cap( $cap ) { + if ( is_numeric( $cap ) ) { + _deprecated_argument( __FUNCTION__, '2.0', __('Usage of user levels by plugins and themes is deprecated. Use roles and capabilities instead.') ); + $cap = $this->translate_level_to_cap( $cap ); + } + + $args = array_slice( func_get_args(), 1 ); + $args = array_merge( array( $cap, $this->ID ), $args ); + $caps = call_user_func_array( 'map_meta_cap', $args ); + + // Multisite super admin has all caps by definition, Unless specifically denied. + if ( is_multisite() && is_super_admin( $this->ID ) ) { + if ( in_array('do_not_allow', $caps) ) + return false; + return true; + } + + /** + * Dynamically filter a user's capabilities. + * + * @since 2.0.0 + * @since 3.7.0 Added the user object. + * + * @param array $allcaps An array of all the role's capabilities. + * @param array $caps Actual capabilities for meta capability. + * @param array $args Optional parameters passed to has_cap(), typically object ID. + * @param WP_User $user The user object. + */ + // Must have ALL requested caps + $capabilities = apply_filters( 'user_has_cap', $this->allcaps, $caps, $args, $this ); + $capabilities['exist'] = true; // Everyone is allowed to exist + foreach ( (array) $caps as $cap ) { + if ( empty( $capabilities[ $cap ] ) ) + return false; + } + + return true; + } + + /** + * Convert numeric level to level capability name. + * + * Prepends 'level_' to level number. + * + * @since 2.0.0 + * @access public + * + * @param int $level Level number, 1 to 10. + * @return string + */ + function translate_level_to_cap( $level ) { + return 'level_' . $level; + } + + /** + * Set the blog to operate on. Defaults to the current blog. + * + * @since 3.0.0 + * + * @param int $blog_id Optional Blog ID, defaults to current blog. + */ + function for_blog( $blog_id = '' ) { + global $wpdb; + if ( ! empty( $blog_id ) ) + $cap_key = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities'; + else + $cap_key = ''; + $this->_init_caps( $cap_key ); + } +} + +/** + * Map meta capabilities to primitive capabilities. + * + * This does not actually compare whether the user ID has the actual capability, + * just what the capability or capabilities are. Meta capability list value can + * be 'delete_user', 'edit_user', 'remove_user', 'promote_user', 'delete_post', + * 'delete_page', 'edit_post', 'edit_page', 'read_post', or 'read_page'. + * + * @since 2.0.0 + * + * @param string $cap Capability name. + * @param int $user_id User ID. + * @return array Actual capabilities for meta capability. + */ +function map_meta_cap( $cap, $user_id ) { + $args = array_slice( func_get_args(), 2 ); + $caps = array(); + + switch ( $cap ) { + case 'remove_user': + $caps[] = 'remove_users'; + break; + case 'promote_user': + $caps[] = 'promote_users'; + break; + case 'edit_user': + case 'edit_users': + // Allow user to edit itself + if ( 'edit_user' == $cap && isset( $args[0] ) && $user_id == $args[0] ) + break; + + // If multisite these caps are allowed only for super admins. + if ( is_multisite() && !is_super_admin( $user_id ) ) + $caps[] = 'do_not_allow'; + else + $caps[] = 'edit_users'; // edit_user maps to edit_users. + break; + case 'delete_post': + case 'delete_page': + $post = get_post( $args[0] ); + + if ( 'revision' == $post->post_type ) { + $post = get_post( $post->post_parent ); + } + + $post_type = get_post_type_object( $post->post_type ); + + if ( ! $post_type->map_meta_cap ) { + $caps[] = $post_type->cap->$cap; + // Prior to 3.1 we would re-call map_meta_cap here. + if ( 'delete_post' == $cap ) + $cap = $post_type->cap->$cap; + break; + } + + $post_author_id = $post->post_author; + + // If no author set yet, default to current user for cap checks. + if ( ! $post_author_id ) + $post_author_id = $user_id; + + // If the user is the author... + if ( $user_id == $post_author_id ) { + // If the post is published... + if ( 'publish' == $post->post_status ) { + $caps[] = $post_type->cap->delete_published_posts; + } elseif ( 'trash' == $post->post_status ) { + if ('publish' == get_post_meta($post->ID, '_wp_trash_meta_status', true) ) + $caps[] = $post_type->cap->delete_published_posts; + } else { + // If the post is draft... + $caps[] = $post_type->cap->delete_posts; + } + } else { + // The user is trying to edit someone else's post. + $caps[] = $post_type->cap->delete_others_posts; + // The post is published, extra cap required. + if ( 'publish' == $post->post_status ) + $caps[] = $post_type->cap->delete_published_posts; + elseif ( 'private' == $post->post_status ) + $caps[] = $post_type->cap->delete_private_posts; + } + break; + // edit_post breaks down to edit_posts, edit_published_posts, or + // edit_others_posts + case 'edit_post': + case 'edit_page': + $post = get_post( $args[0] ); + if ( empty( $post ) ) + break; + + if ( 'revision' == $post->post_type ) { + $post = get_post( $post->post_parent ); + } + + $post_type = get_post_type_object( $post->post_type ); + + if ( ! $post_type->map_meta_cap ) { + $caps[] = $post_type->cap->$cap; + // Prior to 3.1 we would re-call map_meta_cap here. + if ( 'edit_post' == $cap ) + $cap = $post_type->cap->$cap; + break; + } + + $post_author_id = $post->post_author; + + // If no author set yet, default to current user for cap checks. + if ( ! $post_author_id ) + $post_author_id = $user_id; + + // If the user is the author... + if ( $user_id == $post_author_id ) { + // If the post is published... + if ( 'publish' == $post->post_status ) { + $caps[] = $post_type->cap->edit_published_posts; + } elseif ( 'trash' == $post->post_status ) { + if ('publish' == get_post_meta($post->ID, '_wp_trash_meta_status', true) ) + $caps[] = $post_type->cap->edit_published_posts; + } else { + // If the post is draft... + $caps[] = $post_type->cap->edit_posts; + } + } else { + // The user is trying to edit someone else's post. + $caps[] = $post_type->cap->edit_others_posts; + // The post is published, extra cap required. + if ( 'publish' == $post->post_status ) + $caps[] = $post_type->cap->edit_published_posts; + elseif ( 'private' == $post->post_status ) + $caps[] = $post_type->cap->edit_private_posts; + } + break; + case 'read_post': + case 'read_page': + $post = get_post( $args[0] ); + + if ( 'revision' == $post->post_type ) { + $post = get_post( $post->post_parent ); + } + + $post_type = get_post_type_object( $post->post_type ); + + if ( ! $post_type->map_meta_cap ) { + $caps[] = $post_type->cap->$cap; + // Prior to 3.1 we would re-call map_meta_cap here. + if ( 'read_post' == $cap ) + $cap = $post_type->cap->$cap; + break; + } + + $status_obj = get_post_status_object( $post->post_status ); + if ( $status_obj->public ) { + $caps[] = $post_type->cap->read; + break; + } + + $post_author_id = $post->post_author; + + // If no author set yet, default to current user for cap checks. + if ( ! $post_author_id ) + $post_author_id = $user_id; + + if ( $user_id == $post_author_id ) + $caps[] = $post_type->cap->read; + elseif ( $status_obj->private ) + $caps[] = $post_type->cap->read_private_posts; + else + $caps = map_meta_cap( 'edit_post', $user_id, $post->ID ); + break; + case 'publish_post': + $post = get_post( $args[0] ); + $post_type = get_post_type_object( $post->post_type ); + + $caps[] = $post_type->cap->publish_posts; + break; + case 'edit_post_meta': + case 'delete_post_meta': + case 'add_post_meta': + $post = get_post( $args[0] ); + $caps = map_meta_cap( 'edit_post', $user_id, $post->ID ); + + $meta_key = isset( $args[ 1 ] ) ? $args[ 1 ] : false; + + if ( $meta_key && has_filter( "auth_post_meta_{$meta_key}" ) ) { + /** + * Filter whether the user is allowed to add post meta to a post. + * + * The dynamic portion of the hook name, $meta_key, refers to the + * meta key passed to map_meta_cap(). + * + * @since 3.3.0 + * + * @param bool $allowed Whether the user can add the post meta. Default false. + * @param string $meta_key The meta key. + * @param int $post_id Post ID. + * @param int $user_id User ID. + * @param string $cap Capability name. + * @param array $caps User capabilities. + */ + $allowed = apply_filters( "auth_post_meta_{$meta_key}", false, $meta_key, $post->ID, $user_id, $cap, $caps ); + if ( ! $allowed ) + $caps[] = $cap; + } elseif ( $meta_key && is_protected_meta( $meta_key, 'post' ) ) { + $caps[] = $cap; + } + break; + case 'edit_comment': + $comment = get_comment( $args[0] ); + if ( empty( $comment ) ) + break; + $post = get_post( $comment->comment_post_ID ); + $caps = map_meta_cap( 'edit_post', $user_id, $post->ID ); + break; + case 'unfiltered_upload': + if ( defined('ALLOW_UNFILTERED_UPLOADS') && ALLOW_UNFILTERED_UPLOADS && ( !is_multisite() || is_super_admin( $user_id ) ) ) + $caps[] = $cap; + else + $caps[] = 'do_not_allow'; + break; + case 'unfiltered_html' : + // Disallow unfiltered_html for all users, even admins and super admins. + if ( defined( 'DISALLOW_UNFILTERED_HTML' ) && DISALLOW_UNFILTERED_HTML ) + $caps[] = 'do_not_allow'; + elseif ( is_multisite() && ! is_super_admin( $user_id ) ) + $caps[] = 'do_not_allow'; + else + $caps[] = $cap; + break; + case 'edit_files': + case 'edit_plugins': + case 'edit_themes': + // Disallow the file editors. + if ( defined( 'DISALLOW_FILE_EDIT' ) && DISALLOW_FILE_EDIT ) + $caps[] = 'do_not_allow'; + elseif ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS ) + $caps[] = 'do_not_allow'; + elseif ( is_multisite() && ! is_super_admin( $user_id ) ) + $caps[] = 'do_not_allow'; + else + $caps[] = $cap; + break; + case 'update_plugins': + case 'delete_plugins': + case 'install_plugins': + case 'update_themes': + case 'delete_themes': + case 'install_themes': + case 'update_core': + // Disallow anything that creates, deletes, or updates core, plugin, or theme files. + // Files in uploads are excepted. + if ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS ) + $caps[] = 'do_not_allow'; + elseif ( is_multisite() && ! is_super_admin( $user_id ) ) + $caps[] = 'do_not_allow'; + else + $caps[] = $cap; + break; + case 'activate_plugins': + $caps[] = $cap; + if ( is_multisite() ) { + // update_, install_, and delete_ are handled above with is_super_admin(). + $menu_perms = get_site_option( 'menu_items', array() ); + if ( empty( $menu_perms['plugins'] ) ) + $caps[] = 'manage_network_plugins'; + } + break; + case 'delete_user': + case 'delete_users': + // If multisite only super admins can delete users. + if ( is_multisite() && ! is_super_admin( $user_id ) ) + $caps[] = 'do_not_allow'; + else + $caps[] = 'delete_users'; // delete_user maps to delete_users. + break; + case 'create_users': + if ( !is_multisite() ) + $caps[] = $cap; + elseif ( is_super_admin() || get_site_option( 'add_new_users' ) ) + $caps[] = $cap; + else + $caps[] = 'do_not_allow'; + break; + case 'manage_links' : + if ( get_option( 'link_manager_enabled' ) ) + $caps[] = $cap; + else + $caps[] = 'do_not_allow'; + break; + default: + // Handle meta capabilities for custom post types. + $post_type_meta_caps = _post_type_meta_capabilities(); + if ( isset( $post_type_meta_caps[ $cap ] ) ) { + $args = array_merge( array( $post_type_meta_caps[ $cap ], $user_id ), $args ); + return call_user_func_array( 'map_meta_cap', $args ); + } + + // If no meta caps match, return the original cap. + $caps[] = $cap; + } + + /** + * Filter a user's capabilities depending on specific context and/or privilege. + * + * @since 2.8.0 + * + * @param array $caps Returns the user's actual capabilities. + * @param string $cap Capability name. + * @param int $user_id The user ID. + * @param array $args Adds the context to the cap. Typically the object ID. + */ + return apply_filters( 'map_meta_cap', $caps, $cap, $user_id, $args ); +} + +/** + * Whether current user has capability or role. + * + * @since 2.0.0 + * + * @param string $capability Capability or role name. + * @return bool + */ +function current_user_can( $capability ) { + $current_user = wp_get_current_user(); + + if ( empty( $current_user ) ) + return false; + + $args = array_slice( func_get_args(), 1 ); + $args = array_merge( array( $capability ), $args ); + + return call_user_func_array( array( $current_user, 'has_cap' ), $args ); +} + +/** + * Whether current user has a capability or role for a given blog. + * + * @since 3.0.0 + * + * @param int $blog_id Blog ID + * @param string $capability Capability or role name. + * @return bool + */ +function current_user_can_for_blog( $blog_id, $capability ) { + if ( is_multisite() ) + switch_to_blog( $blog_id ); + + $current_user = wp_get_current_user(); + + if ( empty( $current_user ) ) + return false; + + $args = array_slice( func_get_args(), 2 ); + $args = array_merge( array( $capability ), $args ); + + $can = call_user_func_array( array( $current_user, 'has_cap' ), $args ); + + if ( is_multisite() ) + restore_current_blog(); + + return $can; +} + +/** + * Whether author of supplied post has capability or role. + * + * @since 2.9.0 + * + * @param int|object $post Post ID or post object. + * @param string $capability Capability or role name. + * @return bool + */ +function author_can( $post, $capability ) { + if ( !$post = get_post($post) ) + return false; + + $author = get_userdata( $post->post_author ); + + if ( ! $author ) + return false; + + $args = array_slice( func_get_args(), 2 ); + $args = array_merge( array( $capability ), $args ); + + return call_user_func_array( array( $author, 'has_cap' ), $args ); +} + +/** + * Whether a particular user has capability or role. + * + * @since 3.1.0 + * + * @param int|object $user User ID or object. + * @param string $capability Capability or role name. + * @return bool + */ +function user_can( $user, $capability ) { + if ( ! is_object( $user ) ) + $user = get_userdata( $user ); + + if ( ! $user || ! $user->exists() ) + return false; + + $args = array_slice( func_get_args(), 2 ); + $args = array_merge( array( $capability ), $args ); + + return call_user_func_array( array( $user, 'has_cap' ), $args ); +} + +/** + * Retrieve role object. + * + * @see WP_Roles::get_role() Uses method to retrieve role object. + * @since 2.0.0 + * + * @param string $role Role name. + * @return WP_Role|null WP_Role object if found, null if the role does not exist. + */ +function get_role( $role ) { + global $wp_roles; + + if ( ! isset( $wp_roles ) ) + $wp_roles = new WP_Roles(); + + return $wp_roles->get_role( $role ); +} + +/** + * Add role, if it does not exist. + * + * @see WP_Roles::add_role() Uses method to add role. + * @since 2.0.0 + * + * @param string $role Role name. + * @param string $display_name Display name for role. + * @param array $capabilities List of capabilities, e.g. array( 'edit_posts' => true, 'delete_posts' => false ); + * @return WP_Role|null WP_Role object if role is added, null if already exists. + */ +function add_role( $role, $display_name, $capabilities = array() ) { + global $wp_roles; + + if ( ! isset( $wp_roles ) ) + $wp_roles = new WP_Roles(); + + return $wp_roles->add_role( $role, $display_name, $capabilities ); +} + +/** + * Remove role, if it exists. + * + * @see WP_Roles::remove_role() Uses method to remove role. + * @since 2.0.0 + * + * @param string $role Role name. + */ +function remove_role( $role ) { + global $wp_roles; + + if ( ! isset( $wp_roles ) ) + $wp_roles = new WP_Roles(); + + $wp_roles->remove_role( $role ); +} + +/** + * Retrieve a list of super admins. + * + * @since 3.0.0 + * + * @uses $super_admins Super admins global variable, if set. + * + * @return array List of super admin logins + */ +function get_super_admins() { + global $super_admins; + + if ( isset($super_admins) ) + return $super_admins; + else + return get_site_option( 'site_admins', array('admin') ); +} + +/** + * Determine if user is a site admin. + * + * @since 3.0.0 + * + * @param int $user_id (Optional) The ID of a user. Defaults to the current user. + * @return bool True if the user is a site admin. + */ +function is_super_admin( $user_id = false ) { + if ( ! $user_id || $user_id == get_current_user_id() ) + $user = wp_get_current_user(); + else + $user = get_userdata( $user_id ); + + if ( ! $user || ! $user->exists() ) + return false; + + if ( is_multisite() ) { + $super_admins = get_super_admins(); + if ( is_array( $super_admins ) && in_array( $user->user_login, $super_admins ) ) + return true; + } else { + if ( $user->has_cap('delete_users') ) + return true; + } + + return false; +} diff --git a/src/wp-includes/category-template.php b/src/wp-includes/category-template.php new file mode 100644 index 0000000..6ffd9d3 --- /dev/null +++ b/src/wp-includes/category-template.php @@ -0,0 +1,1215 @@ +<?php +/** + * Category Template Tags and API. + * + * @package WordPress + * @subpackage Template + */ + +/** + * Retrieve category link URL. + * + * @since 1.0.0 + * @see get_term_link() + * + * @param int|object $category Category ID or object. + * @return string Link on success, empty string if category does not exist. + */ +function get_category_link( $category ) { + if ( ! is_object( $category ) ) + $category = (int) $category; + + $category = get_term_link( $category, 'category' ); + + if ( is_wp_error( $category ) ) + return ''; + + return $category; +} + +/** + * Retrieve category parents with separator. + * + * @since 1.2.0 + * + * @param int $id Category ID. + * @param bool $link Optional, default is false. Whether to format with link. + * @param string $separator Optional, default is '/'. How to separate categories. + * @param bool $nicename Optional, default is false. Whether to use nice name for display. + * @param array $visited Optional. Already linked to categories to prevent duplicates. + * @return string|WP_Error A list of category parents on success, WP_Error on failure. + */ +function get_category_parents( $id, $link = false, $separator = '/', $nicename = false, $visited = array() ) { + $chain = ''; + $parent = get_term( $id, 'category' ); + if ( is_wp_error( $parent ) ) + return $parent; + + if ( $nicename ) + $name = $parent->slug; + else + $name = $parent->name; + + if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) { + $visited[] = $parent->parent; + $chain .= get_category_parents( $parent->parent, $link, $separator, $nicename, $visited ); + } + + if ( $link ) + $chain .= '<a href="' . esc_url( get_category_link( $parent->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator; + else + $chain .= $name.$separator; + return $chain; +} + +/** + * Retrieve post categories. + * + * @since 0.71 + * @uses $post + * + * @param int $id Optional, default to current post ID. The post ID. + * @return array + */ +function get_the_category( $id = false ) { + $categories = get_the_terms( $id, 'category' ); + if ( ! $categories || is_wp_error( $categories ) ) + $categories = array(); + + $categories = array_values( $categories ); + + foreach ( array_keys( $categories ) as $key ) { + _make_cat_compat( $categories[$key] ); + } + + // Filter name is plural because we return alot of categories (possibly more than #13237) not just one + return apply_filters( 'get_the_categories', $categories ); +} + +/** + * Sort categories by name. + * + * Used by usort() as a callback, should not be used directly. Can actually be + * used to sort any term object. + * + * @since 2.3.0 + * @access private + * + * @param object $a + * @param object $b + * @return int + */ +function _usort_terms_by_name( $a, $b ) { + return strcmp( $a->name, $b->name ); +} + +/** + * Sort categories by ID. + * + * Used by usort() as a callback, should not be used directly. Can actually be + * used to sort any term object. + * + * @since 2.3.0 + * @access private + * + * @param object $a + * @param object $b + * @return int + */ +function _usort_terms_by_ID( $a, $b ) { + if ( $a->term_id > $b->term_id ) + return 1; + elseif ( $a->term_id < $b->term_id ) + return -1; + else + return 0; +} + +/** + * Retrieve category name based on category ID. + * + * @since 0.71 + * + * @param int $cat_ID Category ID. + * @return string|WP_Error Category name on success, WP_Error on failure. + */ +function get_the_category_by_ID( $cat_ID ) { + $cat_ID = (int) $cat_ID; + $category = get_term( $cat_ID, 'category' ); + if ( is_wp_error( $category ) ) + return $category; + return $category->name; +} + +/** + * Retrieve category list in either HTML list or custom format. + * + * @since 1.5.1 + * + * @param string $separator Optional, default is empty string. Separator for between the categories. + * @param string $parents Optional. How to display the parents. + * @param int $post_id Optional. Post ID to retrieve categories. + * @return string + */ +function get_the_category_list( $separator = '', $parents='', $post_id = false ) { + global $wp_rewrite; + if ( ! is_object_in_taxonomy( get_post_type( $post_id ), 'category' ) ) + return apply_filters( 'the_category', '', $separator, $parents ); + + $categories = get_the_category( $post_id ); + if ( empty( $categories ) ) + return apply_filters( 'the_category', __( 'Uncategorized' ), $separator, $parents ); + + $rel = ( is_object( $wp_rewrite ) && $wp_rewrite->using_permalinks() ) ? 'rel="category tag"' : 'rel="category"'; + + $thelist = ''; + if ( '' == $separator ) { + $thelist .= '<ul class="post-categories">'; + foreach ( $categories as $category ) { + $thelist .= "\n\t<li>"; + switch ( strtolower( $parents ) ) { + case 'multiple': + if ( $category->parent ) + $thelist .= get_category_parents( $category->parent, true, $separator ); + $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a></li>'; + break; + case 'single': + $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>'; + if ( $category->parent ) + $thelist .= get_category_parents( $category->parent, false, $separator ); + $thelist .= $category->name.'</a></li>'; + break; + case '': + default: + $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a></li>'; + } + } + $thelist .= '</ul>'; + } else { + $i = 0; + foreach ( $categories as $category ) { + if ( 0 < $i ) + $thelist .= $separator; + switch ( strtolower( $parents ) ) { + case 'multiple': + if ( $category->parent ) + $thelist .= get_category_parents( $category->parent, true, $separator ); + $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a>'; + break; + case 'single': + $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>'; + if ( $category->parent ) + $thelist .= get_category_parents( $category->parent, false, $separator ); + $thelist .= "$category->name</a>"; + break; + case '': + default: + $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a>'; + } + ++$i; + } + } + return apply_filters( 'the_category', $thelist, $separator, $parents ); +} + +/** + * Check if the current post in within any of the given categories. + * + * The given categories are checked against the post's categories' term_ids, names and slugs. + * Categories given as integers will only be checked against the post's categories' term_ids. + * + * Prior to v2.5 of WordPress, category names were not supported. + * Prior to v2.7, category slugs were not supported. + * Prior to v2.7, only one category could be compared: in_category( $single_category ). + * Prior to v2.7, this function could only be used in the WordPress Loop. + * As of 2.7, the function can be used anywhere if it is provided a post ID or post object. + * + * @since 1.2.0 + * @uses has_category() + * + * @param int|string|array $category Category ID, name or slug, or array of said. + * @param int|object $post Optional. Post to check instead of the current post. (since 2.7.0) + * @return bool True if the current post is in any of the given categories. + */ +function in_category( $category, $post = null ) { + if ( empty( $category ) ) + return false; + + return has_category( $category, $post ); +} + +/** + * Display the category list for the post. + * + * @since 0.71 + * + * @param string $separator Optional, default is empty string. Separator for between the categories. + * @param string $parents Optional. How to display the parents. + * @param int $post_id Optional. Post ID to retrieve categories. + */ +function the_category( $separator = '', $parents='', $post_id = false ) { + echo get_the_category_list( $separator, $parents, $post_id ); +} + +/** + * Retrieve category description. + * + * @since 1.0.0 + * + * @param int $category Optional. Category ID. Will use global category ID by default. + * @return string Category description, available. + */ +function category_description( $category = 0 ) { + return term_description( $category, 'category' ); +} + +/** + * Display or retrieve the HTML dropdown list of categories. + * + * The list of arguments is below: + * 'show_option_all' (string) - Text to display for showing all categories. + * 'show_option_none' (string) - Text to display for showing no categories. + * 'orderby' (string) default is 'ID' - What column to use for ordering the + * categories. + * 'order' (string) default is 'ASC' - What direction to order categories. + * 'show_count' (bool|int) default is 0 - Whether to show how many posts are + * in the category. + * 'hide_empty' (bool|int) default is 1 - Whether to hide categories that + * don't have any posts attached to them. + * 'child_of' (int) default is 0 - See {@link get_categories()}. + * 'exclude' (string) - See {@link get_categories()}. + * 'echo' (bool|int) default is 1 - Whether to display or retrieve content. + * 'depth' (int) - The max depth. + * 'tab_index' (int) - Tab index for select element. + * 'name' (string) - The name attribute value for select element. + * 'id' (string) - The ID attribute value for select element. Defaults to name if omitted. + * 'class' (string) - The class attribute value for select element. + * 'selected' (int) - Which category ID is selected. + * 'taxonomy' (string) - The name of the taxonomy to retrieve. Defaults to category. + * + * The 'hierarchical' argument, which is disabled by default, will override the + * depth argument, unless it is true. When the argument is false, it will + * display all of the categories. When it is enabled it will use the value in + * the 'depth' argument. + * + * @since 2.1.0 + * + * @param string|array $args Optional. Override default arguments. + * @return string HTML content only if 'echo' argument is 0. + */ +function wp_dropdown_categories( $args = '' ) { + $defaults = array( + 'show_option_all' => '', 'show_option_none' => '', + 'orderby' => 'id', 'order' => 'ASC', + 'show_count' => 0, + 'hide_empty' => 1, 'child_of' => 0, + 'exclude' => '', 'echo' => 1, + 'selected' => 0, 'hierarchical' => 0, + 'name' => 'cat', 'id' => '', + 'class' => 'postform', 'depth' => 0, + 'tab_index' => 0, 'taxonomy' => 'category', + 'hide_if_empty' => false + ); + + $defaults['selected'] = ( is_category() ) ? get_query_var( 'cat' ) : 0; + + // Back compat. + if ( isset( $args['type'] ) && 'link' == $args['type'] ) { + _deprecated_argument( __FUNCTION__, '3.0', '' ); + $args['taxonomy'] = 'link_category'; + } + + $r = wp_parse_args( $args, $defaults ); + + if ( !isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] ) { + $r['pad_counts'] = true; + } + + extract( $r ); + + $tab_index_attribute = ''; + if ( (int) $tab_index > 0 ) + $tab_index_attribute = " tabindex=\"$tab_index\""; + + $categories = get_terms( $taxonomy, $r ); + $name = esc_attr( $name ); + $class = esc_attr( $class ); + $id = $id ? esc_attr( $id ) : $name; + + if ( ! $r['hide_if_empty'] || ! empty($categories) ) + $output = "<select name='$name' id='$id' class='$class' $tab_index_attribute>\n"; + else + $output = ''; + + if ( empty($categories) && ! $r['hide_if_empty'] && !empty($show_option_none) ) { + $show_option_none = apply_filters( 'list_cats', $show_option_none ); + $output .= "\t<option value='-1' selected='selected'>$show_option_none</option>\n"; + } + + if ( ! empty( $categories ) ) { + + if ( $show_option_all ) { + $show_option_all = apply_filters( 'list_cats', $show_option_all ); + $selected = ( '0' === strval($r['selected']) ) ? " selected='selected'" : ''; + $output .= "\t<option value='0'$selected>$show_option_all</option>\n"; + } + + if ( $show_option_none ) { + $show_option_none = apply_filters( 'list_cats', $show_option_none ); + $selected = ( '-1' === strval($r['selected']) ) ? " selected='selected'" : ''; + $output .= "\t<option value='-1'$selected>$show_option_none</option>\n"; + } + + if ( $hierarchical ) + $depth = $r['depth']; // Walk the full depth. + else + $depth = -1; // Flat. + + $output .= walk_category_dropdown_tree( $categories, $depth, $r ); + } + + if ( ! $r['hide_if_empty'] || ! empty($categories) ) + $output .= "</select>\n"; + + $output = apply_filters( 'wp_dropdown_cats', $output ); + + if ( $echo ) + echo $output; + + return $output; +} + +/** + * Display or retrieve the HTML list of categories. + * + * The list of arguments is below: + * 'show_option_all' (string) - Text to display for showing all categories. + * 'orderby' (string) default is 'ID' - What column to use for ordering the + * categories. + * 'order' (string) default is 'ASC' - What direction to order categories. + * 'show_count' (bool|int) default is 0 - Whether to show how many posts are + * in the category. + * 'hide_empty' (bool|int) default is 1 - Whether to hide categories that + * don't have any posts attached to them. + * 'use_desc_for_title' (bool|int) default is 1 - Whether to use the + * description instead of the category title. + * 'feed' - See {@link get_categories()}. + * 'feed_type' - See {@link get_categories()}. + * 'feed_image' - See {@link get_categories()}. + * 'child_of' (int) default is 0 - See {@link get_categories()}. + * 'exclude' (string) - See {@link get_categories()}. + * 'exclude_tree' (string) - See {@link get_categories()}. + * 'echo' (bool|int) default is 1 - Whether to display or retrieve content. + * 'current_category' (int) - See {@link get_categories()}. + * 'hierarchical' (bool) - See {@link get_categories()}. + * 'title_li' (string) - See {@link get_categories()}. + * 'depth' (int) - The max depth. + * + * @since 2.1.0 + * + * @param string|array $args Optional. Override default arguments. + * @return string HTML content only if 'echo' argument is 0. + */ +function wp_list_categories( $args = '' ) { + $defaults = array( + 'show_option_all' => '', 'show_option_none' => __('No categories'), + 'orderby' => 'name', 'order' => 'ASC', + 'style' => 'list', + 'show_count' => 0, 'hide_empty' => 1, + 'use_desc_for_title' => 1, 'child_of' => 0, + 'feed' => '', 'feed_type' => '', + 'feed_image' => '', 'exclude' => '', + 'exclude_tree' => '', 'current_category' => 0, + 'hierarchical' => true, 'title_li' => __( 'Categories' ), + 'echo' => 1, 'depth' => 0, + 'taxonomy' => 'category' + ); + + $r = wp_parse_args( $args, $defaults ); + + if ( !isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] ) + $r['pad_counts'] = true; + + if ( true == $r['hierarchical'] ) { + $r['exclude_tree'] = $r['exclude']; + $r['exclude'] = ''; + } + + if ( !isset( $r['class'] ) ) + $r['class'] = ( 'category' == $r['taxonomy'] ) ? 'categories' : $r['taxonomy']; + + extract( $r ); + + if ( !taxonomy_exists($taxonomy) ) + return false; + + $categories = get_categories( $r ); + + $output = ''; + if ( $title_li && 'list' == $style ) + $output = '<li class="' . esc_attr( $class ) . '">' . $title_li . '<ul>'; + + if ( empty( $categories ) ) { + if ( ! empty( $show_option_none ) ) { + if ( 'list' == $style ) + $output .= '<li class="cat-item-none">' . $show_option_none . '</li>'; + else + $output .= $show_option_none; + } + } else { + if ( ! empty( $show_option_all ) ) { + $posts_page = ( 'page' == get_option( 'show_on_front' ) && get_option( 'page_for_posts' ) ) ? get_permalink( get_option( 'page_for_posts' ) ) : home_url( '/' ); + $posts_page = esc_url( $posts_page ); + if ( 'list' == $style ) + $output .= "<li class='cat-item-all'><a href='$posts_page'>$show_option_all</a></li>"; + else + $output .= "<a href='$posts_page'>$show_option_all</a>"; + } + + if ( empty( $r['current_category'] ) && ( is_category() || is_tax() || is_tag() ) ) { + $current_term_object = get_queried_object(); + if ( $current_term_object && $r['taxonomy'] === $current_term_object->taxonomy ) + $r['current_category'] = get_queried_object_id(); + } + + if ( $hierarchical ) + $depth = $r['depth']; + else + $depth = -1; // Flat. + + $output .= walk_category_tree( $categories, $depth, $r ); + } + + if ( $title_li && 'list' == $style ) + $output .= '</ul></li>'; + + $output = apply_filters( 'wp_list_categories', $output, $args ); + + if ( $echo ) + echo $output; + else + return $output; +} + +/** + * Display tag cloud. + * + * The text size is set by the 'smallest' and 'largest' arguments, which will + * use the 'unit' argument value for the CSS text size unit. The 'format' + * argument can be 'flat' (default), 'list', or 'array'. The flat value for the + * 'format' argument will separate tags with spaces. The list value for the + * 'format' argument will format the tags in a UL HTML list. The array value for + * the 'format' argument will return in PHP array type format. + * + * The 'orderby' argument will accept 'name' or 'count' and defaults to 'name'. + * The 'order' is the direction to sort, defaults to 'ASC' and can be 'DESC'. + * + * The 'number' argument is how many tags to return. By default, the limit will + * be to return the top 45 tags in the tag cloud list. + * + * The 'topic_count_text_callback' argument is a function, which, given the count + * of the posts with that tag, returns a text for the tooltip of the tag link. + * + * The 'exclude' and 'include' arguments are used for the {@link get_tags()} + * function. Only one should be used, because only one will be used and the + * other ignored, if they are both set. + * + * @since 2.3.0 + * + * @param array|string $args Optional. Override default arguments. + * @return array Generated tag cloud, only if no failures and 'array' is set for the 'format' argument. + */ +function wp_tag_cloud( $args = '' ) { + $defaults = array( + 'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45, + 'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC', + 'exclude' => '', 'include' => '', 'link' => 'view', 'taxonomy' => 'post_tag', 'echo' => true + ); + $args = wp_parse_args( $args, $defaults ); + + $tags = get_terms( $args['taxonomy'], array_merge( $args, array( 'orderby' => 'count', 'order' => 'DESC' ) ) ); // Always query top tags + + if ( empty( $tags ) || is_wp_error( $tags ) ) + return; + + foreach ( $tags as $key => $tag ) { + if ( 'edit' == $args['link'] ) + $link = get_edit_tag_link( $tag->term_id, $tag->taxonomy ); + else + $link = get_term_link( intval($tag->term_id), $tag->taxonomy ); + if ( is_wp_error( $link ) ) + return false; + + $tags[ $key ]->link = $link; + $tags[ $key ]->id = $tag->term_id; + } + + $return = wp_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args + + $return = apply_filters( 'wp_tag_cloud', $return, $args ); + + if ( 'array' == $args['format'] || empty($args['echo']) ) + return $return; + + echo $return; +} + +/** + * Default text for tooltip for tag links + * + * @param integer $count number of posts with that tag + * @return string text for the tooltip of a tag link. + */ +function default_topic_count_text( $count ) { + return sprintf( _n('%s topic', '%s topics', $count), number_format_i18n( $count ) ); +} + +/** + * Default topic count scaling for tag links + * + * @param integer $count number of posts with that tag + * @return integer scaled count + */ +function default_topic_count_scale( $count ) { + return round(log10($count + 1) * 100); +} + +/** + * Generates a tag cloud (heatmap) from provided data. + * + * The text size is set by the 'smallest' and 'largest' arguments, which will + * use the 'unit' argument value for the CSS text size unit. The 'format' + * argument can be 'flat' (default), 'list', or 'array'. The flat value for the + * 'format' argument will separate tags with spaces. The list value for the + * 'format' argument will format the tags in a UL HTML list. The array value for + * the 'format' argument will return in PHP array type format. + * + * The 'tag_cloud_sort' filter allows you to override the sorting. + * Passed to the filter: $tags array and $args array, has to return the $tags array + * after sorting it. + * + * The 'orderby' argument will accept 'name' or 'count' and defaults to 'name'. + * The 'order' is the direction to sort, defaults to 'ASC' and can be 'DESC' or + * 'RAND'. + * + * The 'number' argument is how many tags to return. By default, the limit will + * be to return the entire tag cloud list. + * + * The 'topic_count_text_callback' argument is a function, which given the count + * of the posts with that tag returns a text for the tooltip of the tag link. + * + * @todo Complete functionality. + * @since 2.3.0 + * + * @param array $tags List of tags. + * @param string|array $args Optional, override default arguments. + * @return string + */ +function wp_generate_tag_cloud( $tags, $args = '' ) { + $defaults = array( + 'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 0, + 'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC', + 'topic_count_text_callback' => 'default_topic_count_text', + 'topic_count_scale_callback' => 'default_topic_count_scale', 'filter' => 1, + ); + + if ( !isset( $args['topic_count_text_callback'] ) && isset( $args['single_text'] ) && isset( $args['multiple_text'] ) ) { + $body = 'return sprintf ( + _n(' . var_export($args['single_text'], true) . ', ' . var_export($args['multiple_text'], true) . ', $count), + number_format_i18n( $count ));'; + $args['topic_count_text_callback'] = create_function('$count', $body); + } + + $args = wp_parse_args( $args, $defaults ); + extract( $args ); + + if ( empty( $tags ) ) + return; + + $tags_sorted = apply_filters( 'tag_cloud_sort', $tags, $args ); + if ( $tags_sorted != $tags ) { // the tags have been sorted by a plugin + $tags = $tags_sorted; + unset($tags_sorted); + } else { + if ( 'RAND' == $order ) { + shuffle($tags); + } else { + // SQL cannot save you; this is a second (potentially different) sort on a subset of data. + if ( 'name' == $orderby ) + uasort( $tags, '_wp_object_name_sort_cb' ); + else + uasort( $tags, '_wp_object_count_sort_cb' ); + + if ( 'DESC' == $order ) + $tags = array_reverse( $tags, true ); + } + } + + if ( $number > 0 ) + $tags = array_slice($tags, 0, $number); + + $counts = array(); + $real_counts = array(); // For the alt tag + foreach ( (array) $tags as $key => $tag ) { + $real_counts[ $key ] = $tag->count; + $counts[ $key ] = $topic_count_scale_callback($tag->count); + } + + $min_count = min( $counts ); + $spread = max( $counts ) - $min_count; + if ( $spread <= 0 ) + $spread = 1; + $font_spread = $largest - $smallest; + if ( $font_spread < 0 ) + $font_spread = 1; + $font_step = $font_spread / $spread; + + $a = array(); + + foreach ( $tags as $key => $tag ) { + $count = $counts[ $key ]; + $real_count = $real_counts[ $key ]; + $tag_link = '#' != $tag->link ? esc_url( $tag->link ) : '#'; + $tag_id = isset($tags[ $key ]->id) ? $tags[ $key ]->id : $key; + $tag_name = $tags[ $key ]->name; + $a[] = "<a href='$tag_link' class='tag-link-$tag_id' title='" . esc_attr( call_user_func( $topic_count_text_callback, $real_count, $tag, $args ) ) . "' style='font-size: " . + str_replace( ',', '.', ( $smallest + ( ( $count - $min_count ) * $font_step ) ) ) + . "$unit;'>$tag_name</a>"; + } + + switch ( $format ) : + case 'array' : + $return =& $a; + break; + case 'list' : + $return = "<ul class='wp-tag-cloud'>\n\t<li>"; + $return .= join( "</li>\n\t<li>", $a ); + $return .= "</li>\n</ul>\n"; + break; + default : + $return = join( $separator, $a ); + break; + endswitch; + + if ( $filter ) + return apply_filters( 'wp_generate_tag_cloud', $return, $tags, $args ); + else + return $return; +} + +/** + * Callback for comparing objects based on name + * + * @since 3.1.0 + * @access private + */ +function _wp_object_name_sort_cb( $a, $b ) { + return strnatcasecmp( $a->name, $b->name ); +} + +/** + * Callback for comparing objects based on count + * + * @since 3.1.0 + * @access private + */ +function _wp_object_count_sort_cb( $a, $b ) { + return ( $a->count > $b->count ); +} + +// +// Helper functions +// + +/** + * Retrieve HTML list content for category list. + * + * @uses Walker_Category to create HTML list content. + * @since 2.1.0 + * @see Walker_Category::walk() for parameters and return description. + */ +function walk_category_tree() { + $args = func_get_args(); + // the user's options are the third parameter + if ( empty($args[2]['walker']) || !is_a($args[2]['walker'], 'Walker') ) + $walker = new Walker_Category; + else + $walker = $args[2]['walker']; + + return call_user_func_array(array( &$walker, 'walk' ), $args ); +} + +/** + * Retrieve HTML dropdown (select) content for category list. + * + * @uses Walker_CategoryDropdown to create HTML dropdown content. + * @since 2.1.0 + * @see Walker_CategoryDropdown::walk() for parameters and return description. + */ +function walk_category_dropdown_tree() { + $args = func_get_args(); + // the user's options are the third parameter + if ( empty($args[2]['walker']) || !is_a($args[2]['walker'], 'Walker') ) + $walker = new Walker_CategoryDropdown; + else + $walker = $args[2]['walker']; + + return call_user_func_array(array( &$walker, 'walk' ), $args ); +} + +/** + * Create HTML list of categories. + * + * @package WordPress + * @since 2.1.0 + * @uses Walker + */ +class Walker_Category extends Walker { + /** + * What the class handles. + * + * @see Walker::$tree_type + * @since 2.1.0 + * @var string + */ + var $tree_type = 'category'; + + /** + * Database fields to use. + * + * @see Walker::$db_fields + * @since 2.1.0 + * @todo Decouple this + * @var array + */ + var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); + + /** + * Starts the list before the elements are added. + * + * @see Walker::start_lvl() + * + * @since 2.1.0 + * + * @param string $output Passed by reference. Used to append additional content. + * @param int $depth Depth of category. Used for tab indentation. + * @param array $args An array of arguments. Will only append content if style argument value is 'list'. + * @see wp_list_categories() + */ + function start_lvl( &$output, $depth = 0, $args = array() ) { + if ( 'list' != $args['style'] ) + return; + + $indent = str_repeat("\t", $depth); + $output .= "$indent<ul class='children'>\n"; + } + + /** + * Ends the list of after the elements are added. + * + * @see Walker::end_lvl() + * + * @since 2.1.0 + * + * @param string $output Passed by reference. Used to append additional content. + * @param int $depth Depth of category. Used for tab indentation. + * @param array $args An array of arguments. Will only append content if style argument value is 'list'. + * @wsee wp_list_categories() + */ + function end_lvl( &$output, $depth = 0, $args = array() ) { + if ( 'list' != $args['style'] ) + return; + + $indent = str_repeat("\t", $depth); + $output .= "$indent</ul>\n"; + } + + /** + * Start the element output. + * + * @see Walker::start_el() + * + * @since 2.1.0 + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $category Category data object. + * @param int $depth Depth of category in reference to parents. Default 0. + * @param array $args An array of arguments. @see wp_list_categories() + * @param int $id ID of the current category. + */ + function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { + extract($args); + + $cat_name = esc_attr( $category->name ); + $cat_name = apply_filters( 'list_cats', $cat_name, $category ); + $link = '<a href="' . esc_url( get_term_link($category) ) . '" '; + if ( $use_desc_for_title == 0 || empty($category->description) ) + $link .= 'title="' . esc_attr( sprintf(__( 'View all posts filed under %s' ), $cat_name) ) . '"'; + else + $link .= 'title="' . esc_attr( strip_tags( apply_filters( 'category_description', $category->description, $category ) ) ) . '"'; + $link .= '>'; + $link .= $cat_name . '</a>'; + + if ( !empty($feed_image) || !empty($feed) ) { + $link .= ' '; + + if ( empty($feed_image) ) + $link .= '('; + + $link .= '<a href="' . esc_url( get_term_feed_link( $category->term_id, $category->taxonomy, $feed_type ) ) . '"'; + + if ( empty($feed) ) { + $alt = ' alt="' . sprintf(__( 'Feed for all posts filed under %s' ), $cat_name ) . '"'; + } else { + $title = ' title="' . $feed . '"'; + $alt = ' alt="' . $feed . '"'; + $name = $feed; + $link .= $title; + } + + $link .= '>'; + + if ( empty($feed_image) ) + $link .= $name; + else + $link .= "<img src='$feed_image'$alt$title" . ' />'; + + $link .= '</a>'; + + if ( empty($feed_image) ) + $link .= ')'; + } + + if ( !empty($show_count) ) + $link .= ' (' . intval($category->count) . ')'; + + if ( 'list' == $args['style'] ) { + $output .= "\t<li"; + $class = 'cat-item cat-item-' . $category->term_id; + if ( !empty($current_category) ) { + $_current_category = get_term( $current_category, $category->taxonomy ); + if ( $category->term_id == $current_category ) + $class .= ' current-cat'; + elseif ( $category->term_id == $_current_category->parent ) + $class .= ' current-cat-parent'; + } + $output .= ' class="' . $class . '"'; + $output .= ">$link\n"; + } else { + $output .= "\t$link<br />\n"; + } + } + + /** + * Ends the element output, if needed. + * + * @see Walker::end_el() + * + * @since 2.1.0 + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $page Not used. + * @param int $depth Depth of category. Not used. + * @param array $args An array of arguments. Only uses 'list' for whether should append to output. @see wp_list_categories() + */ + function end_el( &$output, $page, $depth = 0, $args = array() ) { + if ( 'list' != $args['style'] ) + return; + + $output .= "</li>\n"; + } + +} + +/** + * Create HTML dropdown list of Categories. + * + * @package WordPress + * @since 2.1.0 + * @uses Walker + */ +class Walker_CategoryDropdown extends Walker { + /** + * @see Walker::$tree_type + * @since 2.1.0 + * @var string + */ + var $tree_type = 'category'; + + /** + * @see Walker::$db_fields + * @since 2.1.0 + * @todo Decouple this + * @var array + */ + var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); + + /** + * Start the element output. + * + * @see Walker::start_el() + * @since 2.1.0 + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $category Category data object. + * @param int $depth Depth of category. Used for padding. + * @param array $args Uses 'selected' and 'show_count' keys, if they exist. @see wp_dropdown_categories() + */ + function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { + $pad = str_repeat(' ', $depth * 3); + + $cat_name = apply_filters('list_cats', $category->name, $category); + $output .= "\t<option class=\"level-$depth\" value=\"".$category->term_id."\""; + if ( $category->term_id == $args['selected'] ) + $output .= ' selected="selected"'; + $output .= '>'; + $output .= $pad.$cat_name; + if ( $args['show_count'] ) + $output .= '  ('. $category->count .')'; + $output .= "</option>\n"; + } +} + +// +// Tags +// + +/** + * Retrieve the link to the tag. + * + * @since 2.3.0 + * @see get_term_link() + * + * @param int|object $tag Tag ID or object. + * @return string Link on success, empty string if tag does not exist. + */ +function get_tag_link( $tag ) { + if ( ! is_object( $tag ) ) + $tag = (int) $tag; + + $tag = get_term_link( $tag, 'post_tag' ); + + if ( is_wp_error( $tag ) ) + return ''; + + return $tag; +} + +/** + * Retrieve the tags for a post. + * + * @since 2.3.0 + * @uses apply_filters() Calls 'get_the_tags' filter on the list of post tags. + * + * @param int $id Post ID. + * @return array|bool Array of tag objects on success, false on failure. + */ +function get_the_tags( $id = 0 ) { + return apply_filters( 'get_the_tags', get_the_terms( $id, 'post_tag' ) ); +} + +/** + * Retrieve the tags for a post formatted as a string. + * + * @since 2.3.0 + * @uses apply_filters() Calls 'the_tags' filter on string list of tags. + * + * @param string $before Optional. Before tags. + * @param string $sep Optional. Between tags. + * @param string $after Optional. After tags. + * @param int $id Optional. Post ID. Defaults to the current post. + * @return string|bool|WP_Error A list of tags on success, false or WP_Error on failure. + */ +function get_the_tag_list( $before = '', $sep = '', $after = '', $id = 0 ) { + return apply_filters( 'the_tags', get_the_term_list( $id, 'post_tag', $before, $sep, $after ), $before, $sep, $after, $id ); +} + +/** + * Retrieve the tags for a post. + * + * @since 2.3.0 + * + * @param string $before Optional. Before list. + * @param string $sep Optional. Separate items using this. + * @param string $after Optional. After list. + */ +function the_tags( $before = null, $sep = ', ', $after = '' ) { + if ( null === $before ) + $before = __('Tags: '); + echo get_the_tag_list($before, $sep, $after); +} + +/** + * Retrieve tag description. + * + * @since 2.8 + * + * @param int $tag Optional. Tag ID. Will use global tag ID by default. + * @return string Tag description, available. + */ +function tag_description( $tag = 0 ) { + return term_description( $tag ); +} + +/** + * Retrieve term description. + * + * @since 2.8 + * + * @param int $term Optional. Term ID. Will use global term ID by default. + * @param string $taxonomy Optional taxonomy name. Defaults to 'post_tag'. + * @return string Term description, available. + */ +function term_description( $term = 0, $taxonomy = 'post_tag' ) { + if ( ! $term && ( is_tax() || is_tag() || is_category() ) ) { + $term = get_queried_object(); + if ( $term ) { + $taxonomy = $term->taxonomy; + $term = $term->term_id; + } + } + $description = get_term_field( 'description', $term, $taxonomy ); + return is_wp_error( $description ) ? '' : $description; +} + +/** + * Retrieve the terms of the taxonomy that are attached to the post. + * + * @since 2.5.0 + * + * @param int|object $post Post ID or object. + * @param string $taxonomy Taxonomy name. + * @return array|bool|WP_Error Array of term objects on success, false or WP_Error on failure. + */ +function get_the_terms( $post, $taxonomy ) { + if ( ! $post = get_post( $post ) ) + return false; + + $terms = get_object_term_cache( $post->ID, $taxonomy ); + if ( false === $terms ) { + $terms = wp_get_object_terms( $post->ID, $taxonomy ); + wp_cache_add($post->ID, $terms, $taxonomy . '_relationships'); + } + + $terms = apply_filters( 'get_the_terms', $terms, $post->ID, $taxonomy ); + + if ( empty( $terms ) ) + return false; + + return $terms; +} + +/** + * Retrieve a post's terms as a list with specified format. + * + * @since 2.5.0 + * + * @param int $id Post ID. + * @param string $taxonomy Taxonomy name. + * @param string $before Optional. Before list. + * @param string $sep Optional. Separate items using this. + * @param string $after Optional. After list. + * @return string|bool|WP_Error A list of terms on success, false or WP_Error on failure. + */ +function get_the_term_list( $id, $taxonomy, $before = '', $sep = '', $after = '' ) { + $terms = get_the_terms( $id, $taxonomy ); + + if ( is_wp_error( $terms ) ) + return $terms; + + if ( empty( $terms ) ) + return false; + + foreach ( $terms as $term ) { + $link = get_term_link( $term, $taxonomy ); + if ( is_wp_error( $link ) ) + return $link; + $term_links[] = '<a href="' . esc_url( $link ) . '" rel="tag">' . $term->name . '</a>'; + } + + $term_links = apply_filters( "term_links-$taxonomy", $term_links ); + + return $before . join( $sep, $term_links ) . $after; +} + +/** + * Display the terms in a list. + * + * @since 2.5.0 + * + * @param int $id Post ID. + * @param string $taxonomy Taxonomy name. + * @param string $before Optional. Before list. + * @param string $sep Optional. Separate items using this. + * @param string $after Optional. After list. + * @return null|bool False on WordPress error. Returns null when displaying. + */ +function the_terms( $id, $taxonomy, $before = '', $sep = ', ', $after = '' ) { + $term_list = get_the_term_list( $id, $taxonomy, $before, $sep, $after ); + + if ( is_wp_error( $term_list ) ) + return false; + + echo apply_filters('the_terms', $term_list, $taxonomy, $before, $sep, $after); +} + +/** + * Check if the current post has any of given category. + * + * @since 3.1.0 + * + * @param string|int|array $category Optional. The category name/term_id/slug or array of them to check for. + * @param int|object $post Optional. Post to check instead of the current post. + * @return bool True if the current post has any of the given categories (or any category, if no category specified). + */ +function has_category( $category = '', $post = null ) { + return has_term( $category, 'category', $post ); +} + +/** + * Check if the current post has any of given tags. + * + * The given tags are checked against the post's tags' term_ids, names and slugs. + * Tags given as integers will only be checked against the post's tags' term_ids. + * If no tags are given, determines if post has any tags. + * + * Prior to v2.7 of WordPress, tags given as integers would also be checked against the post's tags' names and slugs (in addition to term_ids) + * Prior to v2.7, this function could only be used in the WordPress Loop. + * As of 2.7, the function can be used anywhere if it is provided a post ID or post object. + * + * @since 2.6.0 + * + * @param string|int|array $tag Optional. The tag name/term_id/slug or array of them to check for. + * @param int|object $post Optional. Post to check instead of the current post. (since 2.7.0) + * @return bool True if the current post has any of the given tags (or any tag, if no tag specified). + */ +function has_tag( $tag = '', $post = null ) { + return has_term( $tag, 'post_tag', $post ); +} + +/** + * Check if the current post has any of given terms. + * + * The given terms are checked against the post's terms' term_ids, names and slugs. + * Terms given as integers will only be checked against the post's terms' term_ids. + * If no terms are given, determines if post has any terms. + * + * @since 3.1.0 + * + * @param string|int|array $term Optional. The term name/term_id/slug or array of them to check for. + * @param string $taxonomy Taxonomy name + * @param int|object $post Optional. Post to check instead of the current post. + * @return bool True if the current post has any of the given tags (or any tag, if no tag specified). + */ +function has_term( $term = '', $taxonomy = '', $post = null ) { + $post = get_post($post); + + if ( !$post ) + return false; + + $r = is_object_in_term( $post->ID, $taxonomy, $term ); + if ( is_wp_error( $r ) ) + return false; + + return $r; +} diff --git a/src/wp-includes/category.php b/src/wp-includes/category.php new file mode 100644 index 0000000..6bf7bac --- /dev/null +++ b/src/wp-includes/category.php @@ -0,0 +1,359 @@ +<?php +/** + * WordPress Category API + * + * @package WordPress + */ + +/** + * Retrieves all category IDs. + * + * @since 2.0.0 + * @link http://codex.wordpress.org/Function_Reference/get_all_category_ids + * + * @return object List of all of the category IDs. + */ +function get_all_category_ids() { + if ( ! $cat_ids = wp_cache_get( 'all_category_ids', 'category' ) ) { + $cat_ids = get_terms( 'category', array('fields' => 'ids', 'get' => 'all') ); + wp_cache_add( 'all_category_ids', $cat_ids, 'category' ); + } + + return $cat_ids; +} + +/** + * Retrieve list of category objects. + * + * If you change the type to 'link' in the arguments, then the link categories + * will be returned instead. Also all categories will be updated to be backwards + * compatible with pre-2.3 plugins and themes. + * + * @since 2.1.0 + * @see get_terms() Type of arguments that can be changed. + * @link http://codex.wordpress.org/Function_Reference/get_categories + * + * @param string|array $args Optional. Change the defaults retrieving categories. + * @return array List of categories. + */ +function get_categories( $args = '' ) { + $defaults = array( 'taxonomy' => 'category' ); + $args = wp_parse_args( $args, $defaults ); + + $taxonomy = $args['taxonomy']; + /** + * Filter the taxonomy used to retrieve terms when calling get_categories(). + * + * @since 2.7.0 + * + * @param string $taxonomy Taxonomy to retrieve terms from. + * @param array $args An array of arguments. @see get_terms() + */ + $taxonomy = apply_filters( 'get_categories_taxonomy', $taxonomy, $args ); + + // Back compat + if ( isset($args['type']) && 'link' == $args['type'] ) { + _deprecated_argument( __FUNCTION__, '3.0', '' ); + $taxonomy = $args['taxonomy'] = 'link_category'; + } + + $categories = (array) get_terms( $taxonomy, $args ); + + foreach ( array_keys( $categories ) as $k ) + _make_cat_compat( $categories[$k] ); + + return $categories; +} + +/** + * Retrieves category data given a category ID or category object. + * + * If you pass the $category parameter an object, which is assumed to be the + * category row object retrieved the database. It will cache the category data. + * + * If you pass $category an integer of the category ID, then that category will + * be retrieved from the database, if it isn't already cached, and pass it back. + * + * If you look at get_term(), then both types will be passed through several + * filters and finally sanitized based on the $filter parameter value. + * + * The category will converted to maintain backwards compatibility. + * + * @since 1.5.1 + * @uses get_term() Used to get the category data from the taxonomy. + * + * @param int|object $category Category ID or Category row object + * @param string $output Optional. Constant OBJECT, ARRAY_A, or ARRAY_N + * @param string $filter Optional. Default is raw or no WordPress defined filter will applied. + * @return mixed Category data in type defined by $output parameter. + */ +function get_category( $category, $output = OBJECT, $filter = 'raw' ) { + $category = get_term( $category, 'category', $output, $filter ); + if ( is_wp_error( $category ) ) + return $category; + + _make_cat_compat( $category ); + + return $category; +} + +/** + * Retrieve category based on URL containing the category slug. + * + * Breaks the $category_path parameter up to get the category slug. + * + * Tries to find the child path and will return it. If it doesn't find a + * match, then it will return the first category matching slug, if $full_match, + * is set to false. If it does not, then it will return null. + * + * It is also possible that it will return a WP_Error object on failure. Check + * for it when using this function. + * + * @since 2.1.0 + * + * @param string $category_path URL containing category slugs. + * @param bool $full_match Optional. Whether full path should be matched. + * @param string $output Optional. Constant OBJECT, ARRAY_A, or ARRAY_N + * @return null|object|array Null on failure. Type is based on $output value. + */ +function get_category_by_path( $category_path, $full_match = true, $output = OBJECT ) { + $category_path = rawurlencode( urldecode( $category_path ) ); + $category_path = str_replace( '%2F', '/', $category_path ); + $category_path = str_replace( '%20', ' ', $category_path ); + $category_paths = '/' . trim( $category_path, '/' ); + $leaf_path = sanitize_title( basename( $category_paths ) ); + $category_paths = explode( '/', $category_paths ); + $full_path = ''; + foreach ( (array) $category_paths as $pathdir ) + $full_path .= ( $pathdir != '' ? '/' : '' ) . sanitize_title( $pathdir ); + + $categories = get_terms( 'category', array('get' => 'all', 'slug' => $leaf_path) ); + + if ( empty( $categories ) ) + return null; + + foreach ( $categories as $category ) { + $path = '/' . $leaf_path; + $curcategory = $category; + while ( ( $curcategory->parent != 0 ) && ( $curcategory->parent != $curcategory->term_id ) ) { + $curcategory = get_term( $curcategory->parent, 'category' ); + if ( is_wp_error( $curcategory ) ) + return $curcategory; + $path = '/' . $curcategory->slug . $path; + } + + if ( $path == $full_path ) { + $category = get_term( $category->term_id, 'category', $output ); + _make_cat_compat( $category ); + return $category; + } + } + + // If full matching is not required, return the first cat that matches the leaf. + if ( ! $full_match ) { + $category = get_term( reset( $categories )->term_id, 'category', $output ); + _make_cat_compat( $category ); + return $category; + } + + return null; +} + +/** + * Retrieve category object by category slug. + * + * @since 2.3.0 + * + * @param string $slug The category slug. + * @return object Category data object + */ +function get_category_by_slug( $slug ) { + $category = get_term_by( 'slug', $slug, 'category' ); + if ( $category ) + _make_cat_compat( $category ); + + return $category; +} + +/** + * Retrieve the ID of a category from its name. + * + * @since 1.0.0 + * + * @param string $cat_name Category name. + * @return int 0, if failure and ID of category on success. + */ +function get_cat_ID( $cat_name ) { + $cat = get_term_by( 'name', $cat_name, 'category' ); + if ( $cat ) + return $cat->term_id; + return 0; +} + +/** + * Retrieve the name of a category from its ID. + * + * @since 1.0.0 + * + * @param int $cat_id Category ID + * @return string Category name, or an empty string if category doesn't exist. + */ +function get_cat_name( $cat_id ) { + $cat_id = (int) $cat_id; + $category = get_term( $cat_id, 'category' ); + if ( ! $category || is_wp_error( $category ) ) + return ''; + return $category->name; +} + +/** + * Check if a category is an ancestor of another category. + * + * You can use either an id or the category object for both parameters. If you + * use an integer the category will be retrieved. + * + * @since 2.1.0 + * + * @param int|object $cat1 ID or object to check if this is the parent category. + * @param int|object $cat2 The child category. + * @return bool Whether $cat2 is child of $cat1 + */ +function cat_is_ancestor_of( $cat1, $cat2 ) { + return term_is_ancestor_of( $cat1, $cat2, 'category' ); +} + +/** + * Sanitizes category data based on context. + * + * @since 2.3.0 + * @uses sanitize_term() See this function for what context are supported. + * + * @param object|array $category Category data + * @param string $context Optional. Default is 'display'. + * @return object|array Same type as $category with sanitized data for safe use. + */ +function sanitize_category( $category, $context = 'display' ) { + return sanitize_term( $category, 'category', $context ); +} + +/** + * Sanitizes data in single category key field. + * + * @since 2.3.0 + * @uses sanitize_term_field() See function for more details. + * + * @param string $field Category key to sanitize + * @param mixed $value Category value to sanitize + * @param int $cat_id Category ID + * @param string $context What filter to use, 'raw', 'display', etc. + * @return mixed Same type as $value after $value has been sanitized. + */ +function sanitize_category_field( $field, $value, $cat_id, $context ) { + return sanitize_term_field( $field, $value, $cat_id, 'category', $context ); +} + +/* Tags */ + +/** + * Retrieves all post tags. + * + * @since 2.3.0 + * @see get_terms() For list of arguments to pass. + * @uses apply_filters() Calls 'get_tags' hook on array of tags and with $args. + * + * @param string|array $args Tag arguments to use when retrieving tags. + * @return array List of tags. + */ +function get_tags( $args = '' ) { + $tags = get_terms( 'post_tag', $args ); + + if ( empty( $tags ) ) { + $return = array(); + return $return; + } + + /** + * Filter the array of term objects returned for the 'post_tag' taxonomy. + * + * @since 2.3.0 + * + * @param array $tags Array of 'post_tag' term objects. + * @param array $args An array of arguments. @see get_terms() + */ + $tags = apply_filters( 'get_tags', $tags, $args ); + return $tags; +} + +/** + * Retrieve post tag by tag ID or tag object. + * + * If you pass the $tag parameter an object, which is assumed to be the tag row + * object retrieved the database. It will cache the tag data. + * + * If you pass $tag an integer of the tag ID, then that tag will + * be retrieved from the database, if it isn't already cached, and pass it back. + * + * If you look at get_term(), then both types will be passed through several + * filters and finally sanitized based on the $filter parameter value. + * + * @since 2.3.0 + * + * @param int|object $tag + * @param string $output Optional. Constant OBJECT, ARRAY_A, or ARRAY_N + * @param string $filter Optional. Default is raw or no WordPress defined filter will applied. + * @return object|array Return type based on $output value. + */ +function get_tag( $tag, $output = OBJECT, $filter = 'raw' ) { + return get_term( $tag, 'post_tag', $output, $filter ); +} + +/* Cache */ + +/** + * Remove the category cache data based on ID. + * + * @since 2.1.0 + * @uses clean_term_cache() Clears the cache for the category based on ID + * + * @param int $id Category ID + */ +function clean_category_cache( $id ) { + clean_term_cache( $id, 'category' ); +} + +/** + * Update category structure to old pre 2.3 from new taxonomy structure. + * + * This function was added for the taxonomy support to update the new category + * structure with the old category one. This will maintain compatibility with + * plugins and themes which depend on the old key or property names. + * + * The parameter should only be passed a variable and not create the array or + * object inline to the parameter. The reason for this is that parameter is + * passed by reference and PHP will fail unless it has the variable. + * + * There is no return value, because everything is updated on the variable you + * pass to it. This is one of the features with using pass by reference in PHP. + * + * @since 2.3.0 + * @access private + * + * @param array|object $category Category Row object or array + */ +function _make_cat_compat( &$category ) { + if ( is_object( $category ) ) { + $category->cat_ID = &$category->term_id; + $category->category_count = &$category->count; + $category->category_description = &$category->description; + $category->cat_name = &$category->name; + $category->category_nicename = &$category->slug; + $category->category_parent = &$category->parent; + } elseif ( is_array( $category ) && isset( $category['term_id'] ) ) { + $category['cat_ID'] = &$category['term_id']; + $category['category_count'] = &$category['count']; + $category['category_description'] = &$category['description']; + $category['cat_name'] = &$category['name']; + $category['category_nicename'] = &$category['slug']; + $category['category_parent'] = &$category['parent']; + } +} diff --git a/src/wp-includes/certificates/ca-bundle.crt b/src/wp-includes/certificates/ca-bundle.crt new file mode 100644 index 0000000..b531fc4 --- /dev/null +++ b/src/wp-includes/certificates/ca-bundle.crt @@ -0,0 +1,3554 @@ +## +## ca-bundle.crt -- Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Sat Dec 29 20:03:40 2012 +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1 +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## + +# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.87 $ $Date: 2012/12/29 16:32:45 $ + +EE Certification Centre Root CA +=============================== +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy +dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw +MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB +UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy +ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM +TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 +rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw +93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN +P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ +MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF +BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj +xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM +lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU +3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM +dcGWxZ0= +-----END CERTIFICATE----- + +GTE CyberTrust Global Root +========================== +-----BEGIN CERTIFICATE----- +MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg +Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG +A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz +MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL +Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0 +IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u +sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql +HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID +AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW +M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF +NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ +-----END CERTIFICATE----- + +Thawte Server CA +================ +-----BEGIN CERTIFICATE----- +MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs +dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE +AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j +b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV +BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u +c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG +A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0 +ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl +/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7 +1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J +GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ +GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc= +-----END CERTIFICATE----- + +Thawte Premium Server CA +======================== +-----BEGIN CERTIFICATE----- +MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs +dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE +AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl +ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT +AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU +VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2 +aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ +cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2 +aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh +Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/ +qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm +SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf +8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t +UCemDaYj+bvLpgcUQg== +-----END CERTIFICATE----- + +Equifax Secure CA +================= +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE +ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT +B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR +fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW +8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG +A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE +CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG +A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS +spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB +Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961 +zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB +BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 +70+sB3c4 +-----END CERTIFICATE----- + +Digital Signature Trust Co. Global CA 1 +======================================= +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE +ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy +MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs +IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE +NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i +o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo +BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 +dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw +IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY +MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM +BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB +ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq +kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4 +RbyhkwS7hp86W0N6w4pl +-----END CERTIFICATE----- + +Digital Signature Trust Co. Global CA 3 +======================================= +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE +ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy +MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs +IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD +VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS +xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo +BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 +dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw +IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY +MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM +BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB +AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi +up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1 +mPnHfxsb1gYgAlihw6ID +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 +f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol +hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA +TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah +WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf +Tqj/ZA1k +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO +FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71 +lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB +MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT +1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD +Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9 +-----END CERTIFICATE----- + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +ValiCert Class 1 VA +=================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy +MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi +GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm +DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG +lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX +icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP +Orf1LXLI +-----END CERTIFICATE----- + +ValiCert Class 2 VA +=================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw +MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC +CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf +ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ +SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV +UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8 +W9ViH0Pd +-----END CERTIFICATE----- + +RSA Root Certificate 1 +====================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw +MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td +3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H +BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs +3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF +V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r +on+jjBXu +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 +EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc +cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw +EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj +055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f +j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 +xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa +t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +Verisign Class 4 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS +tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM +8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW +Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX +Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt +mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm +fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd +RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG +UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== +-----END CERTIFICATE----- + +Entrust.net Secure Server CA +============================ +-----BEGIN CERTIFICATE----- +MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV +BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg +cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl +ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG +A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi +eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p +dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ +aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5 +gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw +ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw +CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l +dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF +bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu +dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw +NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow +HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA +BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN +Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9 +n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC +AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER +gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B +AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo +oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS +o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z +2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX +OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ== +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +Equifax Secure Global eBusiness CA +================================== +-----BEGIN CERTIFICATE----- +MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp +bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx +HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds +b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV +PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN +qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn +hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j +BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs +MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN +I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY +NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV +-----END CERTIFICATE----- + +Equifax Secure eBusiness CA 1 +============================= +-----BEGIN CERTIFICATE----- +MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB +LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE +ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz +IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ +1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a +IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk +MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW +Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF +AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5 +lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+ +KpYrtWKmpj29f5JZzVoqgrI3eQ== +-----END CERTIFICATE----- + +Equifax Secure eBusiness CA 2 +============================= +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE +ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y +MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT +DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn +2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5 +BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG +A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx +JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG +A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e +uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB +Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1 +jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia +78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm +V+GRMOrN +-----END CERTIFICATE----- + +AddTrust Low-Value Services Root +================================ +-----BEGIN CERTIFICATE----- +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU +cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw +CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO +ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 +54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr +oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 +Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui +GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w +HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT +RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw +HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt +ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph +iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr +mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj +ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +-----END CERTIFICATE----- + +AddTrust External Root +====================== +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD +VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw +NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU +cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg +Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 ++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw +Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo +aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy +2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 +7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL +VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk +VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl +j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 +e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u +G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +AddTrust Public Services Root +============================= +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU +cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ +BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l +dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu +nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i +d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG +Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw +HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G +A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G +A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 +JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL ++YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao +GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 +Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H +EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= +-----END CERTIFICATE----- + +AddTrust Qualified Certificates Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU +cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx +CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ +IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx +64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 +KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o +L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR +wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU +MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE +BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y +azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG +GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze +RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB +iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +RSA Security 2048 v3 +==================== +-----BEGIN CERTIFICATE----- +MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK +ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy +MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb +BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 +Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb +WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH +KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP ++Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E +FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY +v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj +0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj +VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 +nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA +pKnXwiJPZ9d37CAFYd4= +-----END CERTIFICATE----- + +GeoTrust Global CA +================== +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw +MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo +BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet +8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc +T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU +vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk +DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q +zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 +d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 +mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p +XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm +Mw== +-----END CERTIFICATE----- + +GeoTrust Global CA 2 +==================== +-----BEGIN CERTIFICATE----- +MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw +MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ +NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k +LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA +Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b +HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH +K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 +srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh +ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL +OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC +x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF +H4z1Ir+rzoPz4iIprn2DQKi6bA== +-----END CERTIFICATE----- + +GeoTrust Universal CA +===================== +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 +MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu +Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t +JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e +RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs +7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d +8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V +qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga +Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB +Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu +KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 +ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 +XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 +qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL +oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK +xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF +KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 +DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK +xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU +p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI +P/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +GeoTrust Universal CA 2 +======================= +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 +MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg +SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 +DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 +j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q +JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a +QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 +WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP +20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn +ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC +SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG +8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 ++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E +BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ +4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ +mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq +A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg +Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP +pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d +FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp +gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm +X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +America Online Root Certification Authority 1 +============================================= +-----BEGIN CERTIFICATE----- +MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG +A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg +T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG +v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z +DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh +sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP +8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z +o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf +GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF +VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft +3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g +Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds +sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 +-----END CERTIFICATE----- + +America Online Root Certification Authority 2 +============================================= +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG +A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg +T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en +fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8 +f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO +qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN +RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0 +gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn +6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid +FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6 +Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj +B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op +aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY +T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p ++DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg +JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy +zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO +ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh +1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf +GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff +Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP +cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk= +-----END CERTIFICATE----- + +Visa eCommerce Root +=================== +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG +EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug +QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 +WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm +VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL +F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b +RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 +TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI +/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs +GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc +CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW +YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz +zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu +YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- + +Certum Root CA +============== +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK +ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla +Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u +by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x +wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL +kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ +89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K +Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P +NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ +GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg +GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ +0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS +qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +Comodo Secure Services root +=========================== +-----BEGIN CERTIFICATE----- +MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw +MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu +Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi +BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP +9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc +rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC +oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V +p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E +FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj +YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm +aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm +4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj +Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL +DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw +pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H +RR3B7Hzs/Sk= +-----END CERTIFICATE----- + +Comodo Trusted Services root +============================ +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw +MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h +bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw +IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 +3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y +/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 +juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS +ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud +DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp +ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl +cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw +uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 +pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA +BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l +R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O +9y5Xt5hwXsjEeLBi +-----END CERTIFICATE----- + +QuoVadis Root CA +================ +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE +ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz +MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp +cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD +EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk +J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL +F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL +YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen +AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w +PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y +ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 +MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj +YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs +ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW +Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu +BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw +FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 +tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo +fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul +LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x +gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi +5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi +5nrQNiOKSnQ2+Q== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx +ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 +XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk +lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB +lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy +lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt +66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn +wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh +D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy +BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie +J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud +DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU +a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv +Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 +UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm +VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK ++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW +IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 +WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X +f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II +4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 +VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx +OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg +DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij +KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K +DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv +BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp +p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 +nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX +MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM +Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz +uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT +BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj +YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB +BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD +VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 +ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE +AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV +qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s +hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z +POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 +Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp +8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC +bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu +g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p +vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr +qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +Sonera Class 2 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw +NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 +/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT +dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG +f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P +tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH +nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT +XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt +0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI +cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph +Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx +EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH +llpwrN9M +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA +============================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE +ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w +HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh +bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt +vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P +jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca +C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth +vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 +22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV +HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v +dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN +BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR +EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw +MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y +nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR +iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== +-----END CERTIFICATE----- + +TDC Internet Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE +ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx +NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu +ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j +xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL +znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc +5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6 +otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI +AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM +VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM +MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC +AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe +UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G +CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m +gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ +2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb +O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU +Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l +-----END CERTIFICATE----- + +UTN DATACorp SGC Root CA +======================== +-----BEGIN CERTIFICATE----- +MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ +BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa +MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w +HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy +dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys +raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo +wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA +9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv +33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud +DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9 +BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD +LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3 +DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft +Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0 +I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx +EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP +DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI +-----END CERTIFICATE----- + +UTN USERFirst Hardware Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd +BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx +OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 +eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz +ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI +wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd +tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 +i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf +Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw +gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF +lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF +UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF +BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW +XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 +lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn +iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 +nfhmqA== +-----END CERTIFICATE----- + +Camerfirma Chambers of Commerce Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx +NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp +cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn +MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC +AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU +xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH +NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW +DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV +d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud +EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v +cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P +AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh +bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD +VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi +fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD +L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN +UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n +ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 +erfutGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- + +Camerfirma Global Chambersign Root +================================== +-----BEGIN CERTIFICATE----- +MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx +NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt +YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg +MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw +ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J +1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O +by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl +6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c +8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ +BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j +aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B +Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj +aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y +ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh +bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA +PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y +gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ +PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 +IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes +t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== +-----END CERTIFICATE----- + +NetLock Notary (Class A) Root +============================= +-----BEGIN CERTIFICATE----- +MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI +EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 +dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j +ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX +DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH +EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD +VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz +cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM +D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ +z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC +/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 +tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 +4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG +A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC +Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv +bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu +IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn +LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 +ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz +IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh +IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu +b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh +bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg +Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp +bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 +ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP +ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB +CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr +KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM +8CgHrTwXZoi1/baI +-----END CERTIFICATE----- + +NetLock Business (Class B) Root +=============================== +-----BEGIN CERTIFICATE----- +MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg +VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD +VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv +bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg +VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB +iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S +o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr +1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV +HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ +RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh +dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0 +ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv +c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg +YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh +c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz +Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA +bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl +IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2 +YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj +cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM +43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR +stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI +-----END CERTIFICATE----- + +NetLock Express (Class C) Root +============================== +-----BEGIN CERTIFICATE----- +MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD +KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ +BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 +dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j +ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB +jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z +W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63 +euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw +DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN +RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn +YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB +IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i +aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0 +ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs +ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo +dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y +emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k +IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ +UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg +YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2 +xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW +gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A== +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj +YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH +AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw +Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg +U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 +LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh +cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT +dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC +AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh +3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm +vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk +fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 +fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ +EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl +1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ +lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro +g14= +-----END CERTIFICATE----- + +Taiwan GRCA +=========== +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG +EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X +DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv +dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN +w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 +BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O +1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO +htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov +J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 +Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t +B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB +O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 +lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV +HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 +09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj +Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 +Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU +D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz +DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk +Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk +7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ +CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy ++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS +-----END CERTIFICATE----- + +Firmaprofesional Root CA +======================== +-----BEGIN CERTIFICATE----- +MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT +GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp +Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA +ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL +MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT +OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2 +ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V +j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH +lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf +3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8 +NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww +KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG +AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD +ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq +u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf +wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm +7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG +VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA= +-----END CERTIFICATE----- + +Wells Fargo Root CA +=================== +-----BEGIN CERTIFICATE----- +MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV +BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl +bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv +MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX +x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3 +E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5 +OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j +sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj +YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF +BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD +ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv +m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R +OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx +x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023 +tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= +-----END CERTIFICATE----- + +Swisscom Root CA 1 +================== +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG +EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy +dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4 +MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln +aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM +MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF +NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe +AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC +b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn +7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN +cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp +WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5 +haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY +MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j +BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9 +MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn +jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ +MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H +VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl +vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl +OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3 +1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq +nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy +x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW +NY6E0F/6MBr1mmz0DlP5OlvRHA== +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +Certplus Class 2 Primary CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE +BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN +OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy +dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR +5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ +Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO +YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e +e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME +CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ +YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t +L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD +P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R +TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ +7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW +//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +DST Root CA X3 +============== +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK +ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X +DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 +cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT +rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 +UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy +xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d +utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ +MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug +dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE +GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw +RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS +fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +DST ACES CA X6 +============== +-----BEGIN CERTIFICATE----- +MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT +MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha +MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE +CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI +DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa +pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow +GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy +MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu +Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy +dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU +CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 +5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t +Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq +nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs +vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 +oKfN5XozNmr6mis= +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 1 +============================================== +-----BEGIN CERTIFICATE----- +MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP +MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 +acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx +MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg +U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB +TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC +aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX +yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i +Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ +8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4 +W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME +BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46 +sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE +q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy +B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY +nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 2 +============================================== +-----BEGIN CERTIFICATE----- +MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN +MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr +dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G +A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls +acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe +LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI +x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g +QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr +5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB +AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt +Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 +Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+ +hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P +9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5 +UrbnBEI= +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw +EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN +MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp +c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq +t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C +jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg +vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF +ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR +AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend +jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO +peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR +7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi +GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 +OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm +5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr +44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf +Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m +Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp +mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk +vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf +KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br +NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj +viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X +DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 +aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 +N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm ++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH +6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu +MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h +qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 +FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs +ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc +celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X +CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB +tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P +4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F +kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L +3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx +/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa +DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP +e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu +WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ +DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub +DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ +cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN +b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 +nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge +RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt +tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI +hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K +Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN +NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa +Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG +1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +thawte Primary Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 +MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg +SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv +KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT +FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs +oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ +1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc +q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K +aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p +afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF +AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE +uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 +jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH +z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G5 +============================================================ +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln +biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh +dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz +j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD +Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ +Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r +fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv +Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ +X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE +KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC +Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE +ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +WellsSecure Public Root Certificate Authority +============================================= +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM +F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw +NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl +bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD +VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 +iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 +i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 +bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB +K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB +AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu +cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm +lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB +i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww +GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI +K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 +bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj +qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es +E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ +tylv2G0xffX8oRAHh84vWdw+WNs= +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +IGC/A +===== +-----BEGIN CERTIFICATE----- +MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD +VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE +Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy +MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI +EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT +STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 +TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW +So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy +HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd +frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ +tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB +egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC +iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK +q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q +MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg +Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI +lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF +0mBWWg== +-----END CERTIFICATE----- + +Security Communication EV RootCA1 +================================= +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE +BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl +Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO +/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX +WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z +ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 +bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK +9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm +iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG +Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW +mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW +T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GA CA +=============================== +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE +BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG +A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH +bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD +VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw +IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 +IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 +Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg +Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD +d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ +/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R +LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm +MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 ++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY +okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA +========================= +-----BEGIN CERTIFICATE----- +MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE +BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL +EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 +MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz +dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT +GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG +d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N +oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc +QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ +PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb +MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG +IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD +VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 +LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A +dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn +AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA +4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg +AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA +egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 +Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO +PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv +c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h +cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw +IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT +WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV +MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp +Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal +HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT +nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE +aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a +86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK +yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB +S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +AC Ra\xC3\xADz Certic\xC3\xA1mara S.A. +====================================== +-----BEGIN CERTIFICATE----- +MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT +AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg +LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w +HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+ +U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh +IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN +yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU +2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3 +4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP +2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm +8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf +HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa +Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK +5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b +czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g +ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF +BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug +cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf +AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX +EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v +/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3 +MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4 +3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk +eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f +/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h +RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU +Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ== +-----END CERTIFICATE----- + +TC TrustCenter Class 2 CA II +============================ +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy +IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw +MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 +c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE +AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw +IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2 +xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ +Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u +SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB +7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 +Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU +cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i +SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G +dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ +KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj +TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP +JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk +vQ== +-----END CERTIFICATE----- + +TC TrustCenter Class 3 CA II +============================ +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy +IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw +MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 +c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE +AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W +yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo +6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ +uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk +2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB +7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 +Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU +cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i +SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE +O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8 +yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9 +IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal +092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc +5A== +-----END CERTIFICATE----- + +TC TrustCenter Universal CA I +============================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy +IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN +MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg +VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw +JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC +qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv +xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw +ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O +gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j +BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG +1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy +vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3 +ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT +ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a +7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY +-----END CERTIFICATE----- + +Deutsche Telekom Root CA 2 +========================== +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT +RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG +A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 +MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G +A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS +b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 +bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI +KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY +AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK +Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV +jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV +HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr +E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy +zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 +rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G +dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +ComSign Secured CA +================== +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE +AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w +NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD +QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs +49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH +7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB +kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1 +9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw +AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t +U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA +j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC +AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a +BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp +FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP +51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz +OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 +============================================================================================================================= +-----BEGIN CERTIFICATE----- +MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH +DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q +aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry +b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV +BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg +S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 +MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl +IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF +n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl +IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft +dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl +cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO +Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 +xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR +6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL +hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd +BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 +N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT +y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh +LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M +dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= +-----END CERTIFICATE----- + +Buypass Class 2 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 +MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M +cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 +0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 +0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R +uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV +1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt +7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 +fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w +wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho +-----END CERTIFICATE----- + +Buypass Class 3 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1 +MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx +ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0 +n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia +AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c +1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7 +pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA +EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5 +htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj +el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 +-----END CERTIFICATE----- + +EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 +========================================================================== +-----BEGIN CERTIFICATE----- +MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg +QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe +Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p +ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt +IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by +X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b +gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr +eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ +TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy +Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn +uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI +qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm +ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0 +Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW +Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t +FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm +zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k +XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT +bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU +RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK +1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt +2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ +Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9 +AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +CNNIC ROOT +========== +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE +ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw +OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD +o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz +VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT +VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or +czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK +y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC +wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S +lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 +Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM +O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 +BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 +G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m +mxE= +-----END CERTIFICATE----- + +ApplicationCA - Japanese Government +=================================== +-----BEGIN CERTIFICATE----- +MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT +SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw +MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl +cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 +fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN +wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE +jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu +nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU +WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV +BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD +vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs +o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g +/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD +io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW +dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL +rosot4LKGAfmt1t06SAZf7IbiVQ= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G3 +============================================= +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz +NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo +YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT +LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j +K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE +c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C +IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu +dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr +2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 +cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE +Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s +t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +thawte Primary Root CA - G2 +=========================== +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC +VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu +IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg +Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV +MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG +b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt +IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS +LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 +8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU +mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN +G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K +rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +thawte Primary Root CA - G3 +=========================== +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w +ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD +VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG +A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At +P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC ++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY +7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW +vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ +KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK +A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC +8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm +er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G2 +============================================= +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 +OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl +b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG +BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc +KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ +EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m +ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 +npaqBA+K +-----END CERTIFICATE----- + +VeriSign Universal Root Certification Authority +=============================================== +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj +1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP +MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 +9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I +AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR +tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G +CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O +a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 +Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx +Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx +P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P +wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 +mJO37M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G4 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC +VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz +ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU +cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 +Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz +rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw +HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u +Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD +A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx +AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +============================================ +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G2 +================================== +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ +5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn +vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj +CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil +e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR +OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI +CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 +48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi +trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 +qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB +AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC +ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA +A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz ++51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj +f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN +kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk +CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF +URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb +CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h +oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV +IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm +66+KAQ== +-----END CERTIFICATE----- + +CA Disig +======== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK +QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw +MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz +bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm +GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD +Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo +hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt +ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w +gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P +AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz +aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff +ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa +BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t +WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3 +mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ +CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K +ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA +4Z7CRneC9VkGjCFMhwnN5ag= +-----END CERTIFICATE----- + +Juur-SK +======= +-----BEGIN CERTIFICATE----- +MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA +c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw +DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG +SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy +aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf +TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC ++Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw +UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa +Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF +MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD +HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh +AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA +cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr +AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw +cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE +FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G +A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo +ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL +abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 +IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh +Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 +yyqcjg== +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +ACEDICOM Root +============= +-----BEGIN CERTIFICATE----- +MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD +T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 +MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG +A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk +WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD +YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew +MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb +m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk +HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT +xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 +3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 +2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq +TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz +4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU +9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv +bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg +aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP +eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk +zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 +ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI +KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq +nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE +I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp +MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o +tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 +f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol +hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky +CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX +bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/ +D/xwzoiQ +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi +=================================================== +-----BEGIN CERTIFICATE----- +MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz +ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3 +MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0 +cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u +aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY +8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y +jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI +JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk +9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG +SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d +F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq +D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4 +Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq +fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +TC TrustCenter Universal CA III +=============================== +-----BEGIN CERTIFICATE----- +MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy +IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe +Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU +QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex +KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt +QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO +juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut +CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1 +M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G +A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA +g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+ +KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK +BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV +CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq +woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG +EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz +MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu +QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ +03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK +ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU ++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC +PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT +OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK +F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK +0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ +0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB +leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID +AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ +SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG +NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l +Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga +kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q +hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs +g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 +aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 +nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC +ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo +Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z +WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +Chambers of Commerce Root - 2008 +================================ +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy +Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl +ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF +EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl +cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA +XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj +h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ +ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk +NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g +D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 +lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ +0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 +EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI +G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ +BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh +bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh +bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC +CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH +AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 +wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH +3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU +RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 +M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 +YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF +9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK +zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG +nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ +-----END CERTIFICATE----- + +Global Chambersign Root - 2008 +============================== +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx +NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg +Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ +QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf +VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf +XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 +ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB +/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA +TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M +H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe +Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF +HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB +AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT +BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE +BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm +aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm +aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp +1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 +dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG +/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 +ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s +dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg +9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH +foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du +qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr +P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq +c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +Certinomis - Autorité Racine +============================= +-----BEGIN CERTIFICATE----- +MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg +LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG +A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw +JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa +wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly +Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw +2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N +jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q +c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC +lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb +xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g +530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna +4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ +KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x +WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva +R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 +nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B +CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv +JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE +qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b +WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE +wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ +vgt2Fl43N+bYdJeimUV5 +-----END CERTIFICATE----- + +Root CA Generalitat Valenciana +============================== +-----BEGIN CERTIFICATE----- +MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE +ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 +IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 +WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE +CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 +F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B +ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ +D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte +JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB +AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n +dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB +ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl +AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA +YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy +AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA +aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt +AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA +YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu +AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA +OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 +dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV +BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G +A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S +b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh +TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz +Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 +NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH +iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt ++GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= +-----END CERTIFICATE----- + +A-Trust-nQual-03 +================ +-----BEGIN CERTIFICATE----- +MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE +Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy +a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R +dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw +RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0 +ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1 +c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA +zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n +yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE +SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4 +iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V +cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV +eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40 +ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr +sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd +JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS +mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6 +ahq97BvIxYSazQ== +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM +BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE +AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky +MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz +IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ +wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa +by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 +zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f +YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 +oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l +EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 +hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 +EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 +jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY +iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI +WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 +JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx +K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ +Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC +4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo +2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz +lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem +OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 +vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +Trustis FPS Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG +EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 +IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV +BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ +RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk +H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa +cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt +o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA +AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd +BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c +GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC +yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P +8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV +l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl +iB6XzCGcKQENZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ +Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 +dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu +c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv +bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 +aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t +L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG +cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 +fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm +N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN +Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T +tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX +e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA +2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs +HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE +JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib +D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= +-----END CERTIFICATE----- + +StartCom Certification Authority G2 +=================================== +-----BEGIN CERTIFICATE----- +MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE +ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O +o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG +4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi +Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul +Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs +O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H +vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L +nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS +FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa +z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ +KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K +2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk +J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ +JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG +/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc +nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld +blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc +l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm +7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm +obp573PYtlNXLfbQ4ddI +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- diff --git a/src/wp-includes/class-IXR.php b/src/wp-includes/class-IXR.php new file mode 100644 index 0000000..f8fbc00 --- /dev/null +++ b/src/wp-includes/class-IXR.php @@ -0,0 +1,1070 @@ +<?php +/** + * IXR - The Incutio XML-RPC Library + * + * Copyright (c) 2010, Incutio Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of Incutio Ltd. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @package IXR + * @since 1.5 + * + * @copyright Incutio Ltd 2010 (http://www.incutio.com) + * @version 1.7.4 7th September 2010 + * @author Simon Willison + * @link http://scripts.incutio.com/xmlrpc/ Site/manual + * @license http://www.opensource.org/licenses/bsd-license.php BSD + */ + +/** + * IXR_Value + * + * @package IXR + * @since 1.5 + */ +class IXR_Value { + var $data; + var $type; + + function IXR_Value($data, $type = false) + { + $this->data = $data; + if (!$type) { + $type = $this->calculateType(); + } + $this->type = $type; + if ($type == 'struct') { + // Turn all the values in the array in to new IXR_Value objects + foreach ($this->data as $key => $value) { + $this->data[$key] = new IXR_Value($value); + } + } + if ($type == 'array') { + for ($i = 0, $j = count($this->data); $i < $j; $i++) { + $this->data[$i] = new IXR_Value($this->data[$i]); + } + } + } + + function calculateType() + { + if ($this->data === true || $this->data === false) { + return 'boolean'; + } + if (is_integer($this->data)) { + return 'int'; + } + if (is_double($this->data)) { + return 'double'; + } + + // Deal with IXR object types base64 and date + if (is_object($this->data) && is_a($this->data, 'IXR_Date')) { + return 'date'; + } + if (is_object($this->data) && is_a($this->data, 'IXR_Base64')) { + return 'base64'; + } + + // If it is a normal PHP object convert it in to a struct + if (is_object($this->data)) { + $this->data = get_object_vars($this->data); + return 'struct'; + } + if (!is_array($this->data)) { + return 'string'; + } + + // We have an array - is it an array or a struct? + if ($this->isStruct($this->data)) { + return 'struct'; + } else { + return 'array'; + } + } + + function getXml() + { + // Return XML for this value + switch ($this->type) { + case 'boolean': + return '<boolean>'.(($this->data) ? '1' : '0').'</boolean>'; + break; + case 'int': + return '<int>'.$this->data.'</int>'; + break; + case 'double': + return '<double>'.$this->data.'</double>'; + break; + case 'string': + return '<string>'.htmlspecialchars($this->data).'</string>'; + break; + case 'array': + $return = '<array><data>'."\n"; + foreach ($this->data as $item) { + $return .= ' <value>'.$item->getXml()."</value>\n"; + } + $return .= '</data></array>'; + return $return; + break; + case 'struct': + $return = '<struct>'."\n"; + foreach ($this->data as $name => $value) { + $name = htmlspecialchars($name); + $return .= " <member><name>$name</name><value>"; + $return .= $value->getXml()."</value></member>\n"; + } + $return .= '</struct>'; + return $return; + break; + case 'date': + case 'base64': + return $this->data->getXml(); + break; + } + return false; + } + + /** + * Checks whether or not the supplied array is a struct or not + * + * @param unknown_type $array + * @return boolean + */ + function isStruct($array) + { + $expected = 0; + foreach ($array as $key => $value) { + if ((string)$key != (string)$expected) { + return true; + } + $expected++; + } + return false; + } +} + +/** + * IXR_MESSAGE + * + * @package IXR + * @since 1.5 + * + */ +class IXR_Message +{ + var $message; + var $messageType; // methodCall / methodResponse / fault + var $faultCode; + var $faultString; + var $methodName; + var $params; + + // Current variable stacks + var $_arraystructs = array(); // The stack used to keep track of the current array/struct + var $_arraystructstypes = array(); // Stack keeping track of if things are structs or array + var $_currentStructName = array(); // A stack as well + var $_param; + var $_value; + var $_currentTag; + var $_currentTagContents; + // The XML parser + var $_parser; + + function IXR_Message($message) + { + $this->message =& $message; + } + + function parse() + { + // first remove the XML declaration + // merged from WP #10698 - this method avoids the RAM usage of preg_replace on very large messages + $header = preg_replace( '/<\?xml.*?\?'.'>/', '', substr($this->message, 0, 100), 1); + $this->message = substr_replace($this->message, $header, 0, 100); + if (trim($this->message) == '') { + return false; + } + $this->_parser = xml_parser_create(); + // Set XML parser to take the case of tags in to account + xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, false); + // Set XML parser callback functions + xml_set_object($this->_parser, $this); + xml_set_element_handler($this->_parser, 'tag_open', 'tag_close'); + xml_set_character_data_handler($this->_parser, 'cdata'); + $chunk_size = 262144; // 256Kb, parse in chunks to avoid the RAM usage on very large messages + $final = false; + do { + if (strlen($this->message) <= $chunk_size) { + $final = true; + } + $part = substr($this->message, 0, $chunk_size); + $this->message = substr($this->message, $chunk_size); + if (!xml_parse($this->_parser, $part, $final)) { + return false; + } + if ($final) { + break; + } + } while (true); + xml_parser_free($this->_parser); + + // Grab the error messages, if any + if ($this->messageType == 'fault') { + $this->faultCode = $this->params[0]['faultCode']; + $this->faultString = $this->params[0]['faultString']; + } + return true; + } + + function tag_open($parser, $tag, $attr) + { + $this->_currentTagContents = ''; + $this->currentTag = $tag; + switch($tag) { + case 'methodCall': + case 'methodResponse': + case 'fault': + $this->messageType = $tag; + break; + /* Deal with stacks of arrays and structs */ + case 'data': // data is to all intents and puposes more interesting than array + $this->_arraystructstypes[] = 'array'; + $this->_arraystructs[] = array(); + break; + case 'struct': + $this->_arraystructstypes[] = 'struct'; + $this->_arraystructs[] = array(); + break; + } + } + + function cdata($parser, $cdata) + { + $this->_currentTagContents .= $cdata; + } + + function tag_close($parser, $tag) + { + $valueFlag = false; + switch($tag) { + case 'int': + case 'i4': + $value = (int)trim($this->_currentTagContents); + $valueFlag = true; + break; + case 'double': + $value = (double)trim($this->_currentTagContents); + $valueFlag = true; + break; + case 'string': + $value = (string)trim($this->_currentTagContents); + $valueFlag = true; + break; + case 'dateTime.iso8601': + $value = new IXR_Date(trim($this->_currentTagContents)); + $valueFlag = true; + break; + case 'value': + // "If no type is indicated, the type is string." + if (trim($this->_currentTagContents) != '') { + $value = (string)$this->_currentTagContents; + $valueFlag = true; + } + break; + case 'boolean': + $value = (boolean)trim($this->_currentTagContents); + $valueFlag = true; + break; + case 'base64': + $value = base64_decode($this->_currentTagContents); + $valueFlag = true; + break; + /* Deal with stacks of arrays and structs */ + case 'data': + case 'struct': + $value = array_pop($this->_arraystructs); + array_pop($this->_arraystructstypes); + $valueFlag = true; + break; + case 'member': + array_pop($this->_currentStructName); + break; + case 'name': + $this->_currentStructName[] = trim($this->_currentTagContents); + break; + case 'methodName': + $this->methodName = trim($this->_currentTagContents); + break; + } + + if ($valueFlag) { + if (count($this->_arraystructs) > 0) { + // Add value to struct or array + if ($this->_arraystructstypes[count($this->_arraystructstypes)-1] == 'struct') { + // Add to struct + $this->_arraystructs[count($this->_arraystructs)-1][$this->_currentStructName[count($this->_currentStructName)-1]] = $value; + } else { + // Add to array + $this->_arraystructs[count($this->_arraystructs)-1][] = $value; + } + } else { + // Just add as a paramater + $this->params[] = $value; + } + } + $this->_currentTagContents = ''; + } +} + +/** + * IXR_Server + * + * @package IXR + * @since 1.5 + */ +class IXR_Server +{ + var $data; + var $callbacks = array(); + var $message; + var $capabilities; + + function IXR_Server($callbacks = false, $data = false, $wait = false) + { + $this->setCapabilities(); + if ($callbacks) { + $this->callbacks = $callbacks; + } + $this->setCallbacks(); + if (!$wait) { + $this->serve($data); + } + } + + function serve($data = false) + { + if (!$data) { + if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] !== 'POST') { + header('Content-Type: text/plain'); // merged from WP #9093 + die('XML-RPC server accepts POST requests only.'); + } + + global $HTTP_RAW_POST_DATA; + if (empty($HTTP_RAW_POST_DATA)) { + // workaround for a bug in PHP 5.2.2 - http://bugs.php.net/bug.php?id=41293 + $data = file_get_contents('php://input'); + } else { + $data =& $HTTP_RAW_POST_DATA; + } + } + $this->message = new IXR_Message($data); + if (!$this->message->parse()) { + $this->error(-32700, 'parse error. not well formed'); + } + if ($this->message->messageType != 'methodCall') { + $this->error(-32600, 'server error. invalid xml-rpc. not conforming to spec. Request must be a methodCall'); + } + $result = $this->call($this->message->methodName, $this->message->params); + + // Is the result an error? + if (is_a($result, 'IXR_Error')) { + $this->error($result); + } + + // Encode the result + $r = new IXR_Value($result); + $resultxml = $r->getXml(); + + // Create the XML + $xml = <<<EOD +<methodResponse> + <params> + <param> + <value> + $resultxml + </value> + </param> + </params> +</methodResponse> + +EOD; + // Send it + $this->output($xml); + } + + function call($methodname, $args) + { + if (!$this->hasMethod($methodname)) { + return new IXR_Error(-32601, 'server error. requested method '.$methodname.' does not exist.'); + } + $method = $this->callbacks[$methodname]; + + // Perform the callback and send the response + if (count($args) == 1) { + // If only one paramater just send that instead of the whole array + $args = $args[0]; + } + + // Are we dealing with a function or a method? + if (is_string($method) && substr($method, 0, 5) == 'this:') { + // It's a class method - check it exists + $method = substr($method, 5); + if (!method_exists($this, $method)) { + return new IXR_Error(-32601, 'server error. requested class method "'.$method.'" does not exist.'); + } + + //Call the method + $result = $this->$method($args); + } else { + // It's a function - does it exist? + if (is_array($method)) { + if (!is_callable(array($method[0], $method[1]))) { + return new IXR_Error(-32601, 'server error. requested object method "'.$method[1].'" does not exist.'); + } + } else if (!function_exists($method)) { + return new IXR_Error(-32601, 'server error. requested function "'.$method.'" does not exist.'); + } + + // Call the function + $result = call_user_func($method, $args); + } + return $result; + } + + function error($error, $message = false) + { + // Accepts either an error object or an error code and message + if ($message && !is_object($error)) { + $error = new IXR_Error($error, $message); + } + $this->output($error->getXml()); + } + + function output($xml) + { + $charset = function_exists('get_option') ? get_option('blog_charset') : ''; + if ($charset) + $xml = '<?xml version="1.0" encoding="'.$charset.'"?>'."\n".$xml; + else + $xml = '<?xml version="1.0"?>'."\n".$xml; + $length = strlen($xml); + header('Connection: close'); + header('Content-Length: '.$length); + if ($charset) + header('Content-Type: text/xml; charset='.$charset); + else + header('Content-Type: text/xml'); + header('Date: '.date('r')); + echo $xml; + exit; + } + + function hasMethod($method) + { + return in_array($method, array_keys($this->callbacks)); + } + + function setCapabilities() + { + // Initialises capabilities array + $this->capabilities = array( + 'xmlrpc' => array( + 'specUrl' => 'http://www.xmlrpc.com/spec', + 'specVersion' => 1 + ), + 'faults_interop' => array( + 'specUrl' => 'http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php', + 'specVersion' => 20010516 + ), + 'system.multicall' => array( + 'specUrl' => 'http://www.xmlrpc.com/discuss/msgReader$1208', + 'specVersion' => 1 + ), + ); + } + + function getCapabilities($args) + { + return $this->capabilities; + } + + function setCallbacks() + { + $this->callbacks['system.getCapabilities'] = 'this:getCapabilities'; + $this->callbacks['system.listMethods'] = 'this:listMethods'; + $this->callbacks['system.multicall'] = 'this:multiCall'; + } + + function listMethods($args) + { + // Returns a list of methods - uses array_reverse to ensure user defined + // methods are listed before server defined methods + return array_reverse(array_keys($this->callbacks)); + } + + function multiCall($methodcalls) + { + // See http://www.xmlrpc.com/discuss/msgReader$1208 + $return = array(); + foreach ($methodcalls as $call) { + $method = $call['methodName']; + $params = $call['params']; + if ($method == 'system.multicall') { + $result = new IXR_Error(-32600, 'Recursive calls to system.multicall are forbidden'); + } else { + $result = $this->call($method, $params); + } + if (is_a($result, 'IXR_Error')) { + $return[] = array( + 'faultCode' => $result->code, + 'faultString' => $result->message + ); + } else { + $return[] = array($result); + } + } + return $return; + } +} + +/** + * IXR_Request + * + * @package IXR + * @since 1.5 + */ +class IXR_Request +{ + var $method; + var $args; + var $xml; + + function IXR_Request($method, $args) + { + $this->method = $method; + $this->args = $args; + $this->xml = <<<EOD +<?xml version="1.0"?> +<methodCall> +<methodName>{$this->method}</methodName> +<params> + +EOD; + foreach ($this->args as $arg) { + $this->xml .= '<param><value>'; + $v = new IXR_Value($arg); + $this->xml .= $v->getXml(); + $this->xml .= "</value></param>\n"; + } + $this->xml .= '</params></methodCall>'; + } + + function getLength() + { + return strlen($this->xml); + } + + function getXml() + { + return $this->xml; + } +} + +/** + * IXR_Client + * + * @package IXR + * @since 1.5 + * + */ +class IXR_Client +{ + var $server; + var $port; + var $path; + var $useragent; + var $response; + var $message = false; + var $debug = false; + var $timeout; + var $headers = array(); + + // Storage place for an error message + var $error = false; + + function IXR_Client($server, $path = false, $port = 80, $timeout = 15) + { + if (!$path) { + // Assume we have been given a URL instead + $bits = parse_url($server); + $this->server = $bits['host']; + $this->port = isset($bits['port']) ? $bits['port'] : 80; + $this->path = isset($bits['path']) ? $bits['path'] : '/'; + + // Make absolutely sure we have a path + if (!$this->path) { + $this->path = '/'; + } + } else { + $this->server = $server; + $this->path = $path; + $this->port = $port; + } + $this->useragent = 'The Incutio XML-RPC PHP Library'; + $this->timeout = $timeout; + } + + function query() + { + $args = func_get_args(); + $method = array_shift($args); + $request = new IXR_Request($method, $args); + $length = $request->getLength(); + $xml = $request->getXml(); + $r = "\r\n"; + $request = "POST {$this->path} HTTP/1.0$r"; + + // Merged from WP #8145 - allow custom headers + $this->headers['Host'] = $this->server; + $this->headers['Content-Type'] = 'text/xml'; + $this->headers['User-Agent'] = $this->useragent; + $this->headers['Content-Length']= $length; + + foreach( $this->headers as $header => $value ) { + $request .= "{$header}: {$value}{$r}"; + } + $request .= $r; + + $request .= $xml; + + // Now send the request + if ($this->debug) { + echo '<pre class="ixr_request">'.htmlspecialchars($request)."\n</pre>\n\n"; + } + + if ($this->timeout) { + $fp = @fsockopen($this->server, $this->port, $errno, $errstr, $this->timeout); + } else { + $fp = @fsockopen($this->server, $this->port, $errno, $errstr); + } + if (!$fp) { + $this->error = new IXR_Error(-32300, 'transport error - could not open socket'); + return false; + } + fputs($fp, $request); + $contents = ''; + $debugContents = ''; + $gotFirstLine = false; + $gettingHeaders = true; + while (!feof($fp)) { + $line = fgets($fp, 4096); + if (!$gotFirstLine) { + // Check line for '200' + if (strstr($line, '200') === false) { + $this->error = new IXR_Error(-32300, 'transport error - HTTP status code was not 200'); + return false; + } + $gotFirstLine = true; + } + if (trim($line) == '') { + $gettingHeaders = false; + } + if (!$gettingHeaders) { + // merged from WP #12559 - remove trim + $contents .= $line; + } + if ($this->debug) { + $debugContents .= $line; + } + } + if ($this->debug) { + echo '<pre class="ixr_response">'.htmlspecialchars($debugContents)."\n</pre>\n\n"; + } + + // Now parse what we've got back + $this->message = new IXR_Message($contents); + if (!$this->message->parse()) { + // XML error + $this->error = new IXR_Error(-32700, 'parse error. not well formed'); + return false; + } + + // Is the message a fault? + if ($this->message->messageType == 'fault') { + $this->error = new IXR_Error($this->message->faultCode, $this->message->faultString); + return false; + } + + // Message must be OK + return true; + } + + function getResponse() + { + // methodResponses can only have one param - return that + return $this->message->params[0]; + } + + function isError() + { + return (is_object($this->error)); + } + + function getErrorCode() + { + return $this->error->code; + } + + function getErrorMessage() + { + return $this->error->message; + } +} + + +/** + * IXR_Error + * + * @package IXR + * @since 1.5 + */ +class IXR_Error +{ + var $code; + var $message; + + function IXR_Error($code, $message) + { + $this->code = $code; + $this->message = htmlspecialchars($message); + } + + function getXml() + { + $xml = <<<EOD +<methodResponse> + <fault> + <value> + <struct> + <member> + <name>faultCode</name> + <value><int>{$this->code}</int></value> + </member> + <member> + <name>faultString</name> + <value><string>{$this->message}</string></value> + </member> + </struct> + </value> + </fault> +</methodResponse> + +EOD; + return $xml; + } +} + +/** + * IXR_Date + * + * @package IXR + * @since 1.5 + */ +class IXR_Date { + var $year; + var $month; + var $day; + var $hour; + var $minute; + var $second; + var $timezone; + + function IXR_Date($time) + { + // $time can be a PHP timestamp or an ISO one + if (is_numeric($time)) { + $this->parseTimestamp($time); + } else { + $this->parseIso($time); + } + } + + function parseTimestamp($timestamp) + { + $this->year = date('Y', $timestamp); + $this->month = date('m', $timestamp); + $this->day = date('d', $timestamp); + $this->hour = date('H', $timestamp); + $this->minute = date('i', $timestamp); + $this->second = date('s', $timestamp); + $this->timezone = ''; + } + + function parseIso($iso) + { + $this->year = substr($iso, 0, 4); + $this->month = substr($iso, 4, 2); + $this->day = substr($iso, 6, 2); + $this->hour = substr($iso, 9, 2); + $this->minute = substr($iso, 12, 2); + $this->second = substr($iso, 15, 2); + $this->timezone = substr($iso, 17); + } + + function getIso() + { + return $this->year.$this->month.$this->day.'T'.$this->hour.':'.$this->minute.':'.$this->second.$this->timezone; + } + + function getXml() + { + return '<dateTime.iso8601>'.$this->getIso().'</dateTime.iso8601>'; + } + + function getTimestamp() + { + return mktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year); + } +} + +/** + * IXR_Base64 + * + * @package IXR + * @since 1.5 + */ +class IXR_Base64 +{ + var $data; + + function IXR_Base64($data) + { + $this->data = $data; + } + + function getXml() + { + return '<base64>'.base64_encode($this->data).'</base64>'; + } +} + +/** + * IXR_IntrospectionServer + * + * @package IXR + * @since 1.5 + */ +class IXR_IntrospectionServer extends IXR_Server +{ + var $signatures; + var $help; + + function IXR_IntrospectionServer() + { + $this->setCallbacks(); + $this->setCapabilities(); + $this->capabilities['introspection'] = array( + 'specUrl' => 'http://xmlrpc.usefulinc.com/doc/reserved.html', + 'specVersion' => 1 + ); + $this->addCallback( + 'system.methodSignature', + 'this:methodSignature', + array('array', 'string'), + 'Returns an array describing the return type and required parameters of a method' + ); + $this->addCallback( + 'system.getCapabilities', + 'this:getCapabilities', + array('struct'), + 'Returns a struct describing the XML-RPC specifications supported by this server' + ); + $this->addCallback( + 'system.listMethods', + 'this:listMethods', + array('array'), + 'Returns an array of available methods on this server' + ); + $this->addCallback( + 'system.methodHelp', + 'this:methodHelp', + array('string', 'string'), + 'Returns a documentation string for the specified method' + ); + } + + function addCallback($method, $callback, $args, $help) + { + $this->callbacks[$method] = $callback; + $this->signatures[$method] = $args; + $this->help[$method] = $help; + } + + function call($methodname, $args) + { + // Make sure it's in an array + if ($args && !is_array($args)) { + $args = array($args); + } + + // Over-rides default call method, adds signature check + if (!$this->hasMethod($methodname)) { + return new IXR_Error(-32601, 'server error. requested method "'.$this->message->methodName.'" not specified.'); + } + $method = $this->callbacks[$methodname]; + $signature = $this->signatures[$methodname]; + $returnType = array_shift($signature); + + // Check the number of arguments + if (count($args) != count($signature)) { + return new IXR_Error(-32602, 'server error. wrong number of method parameters'); + } + + // Check the argument types + $ok = true; + $argsbackup = $args; + for ($i = 0, $j = count($args); $i < $j; $i++) { + $arg = array_shift($args); + $type = array_shift($signature); + switch ($type) { + case 'int': + case 'i4': + if (is_array($arg) || !is_int($arg)) { + $ok = false; + } + break; + case 'base64': + case 'string': + if (!is_string($arg)) { + $ok = false; + } + break; + case 'boolean': + if ($arg !== false && $arg !== true) { + $ok = false; + } + break; + case 'float': + case 'double': + if (!is_float($arg)) { + $ok = false; + } + break; + case 'date': + case 'dateTime.iso8601': + if (!is_a($arg, 'IXR_Date')) { + $ok = false; + } + break; + } + if (!$ok) { + return new IXR_Error(-32602, 'server error. invalid method parameters'); + } + } + // It passed the test - run the "real" method call + return parent::call($methodname, $argsbackup); + } + + function methodSignature($method) + { + if (!$this->hasMethod($method)) { + return new IXR_Error(-32601, 'server error. requested method "'.$method.'" not specified.'); + } + // We should be returning an array of types + $types = $this->signatures[$method]; + $return = array(); + foreach ($types as $type) { + switch ($type) { + case 'string': + $return[] = 'string'; + break; + case 'int': + case 'i4': + $return[] = 42; + break; + case 'double': + $return[] = 3.1415; + break; + case 'dateTime.iso8601': + $return[] = new IXR_Date(time()); + break; + case 'boolean': + $return[] = true; + break; + case 'base64': + $return[] = new IXR_Base64('base64'); + break; + case 'array': + $return[] = array('array'); + break; + case 'struct': + $return[] = array('struct' => 'struct'); + break; + } + } + return $return; + } + + function methodHelp($method) + { + return $this->help[$method]; + } +} + +/** + * IXR_ClientMulticall + * + * @package IXR + * @since 1.5 + */ +class IXR_ClientMulticall extends IXR_Client +{ + var $calls = array(); + + function IXR_ClientMulticall($server, $path = false, $port = 80) + { + parent::IXR_Client($server, $path, $port); + $this->useragent = 'The Incutio XML-RPC PHP Library (multicall client)'; + } + + function addCall() + { + $args = func_get_args(); + $methodName = array_shift($args); + $struct = array( + 'methodName' => $methodName, + 'params' => $args + ); + $this->calls[] = $struct; + } + + function query() + { + // Prepare multicall, then call the parent::query() method + return parent::query('system.multicall', $this->calls); + } +} diff --git a/src/wp-includes/class-feed.php b/src/wp-includes/class-feed.php new file mode 100644 index 0000000..c33b302 --- /dev/null +++ b/src/wp-includes/class-feed.php @@ -0,0 +1,140 @@ +<?php + +if ( !class_exists('SimplePie') ) + require_once( ABSPATH . WPINC . '/class-simplepie.php' ); + +class WP_Feed_Cache extends SimplePie_Cache { + /** + * Create a new SimplePie_Cache object + * + * @static + * @access public + */ + function create($location, $filename, $extension) { + return new WP_Feed_Cache_Transient($location, $filename, $extension); + } +} + +class WP_Feed_Cache_Transient { + var $name; + var $mod_name; + var $lifetime = 43200; //Default lifetime in cache of 12 hours + + function __construct($location, $filename, $extension) { + $this->name = 'feed_' . $filename; + $this->mod_name = 'feed_mod_' . $filename; + + $lifetime = $this->lifetime; + /** + * Filter the transient lifetime of the feed cache. + * + * @since 2.8.0 + * + * @param int $lifetime Cache duration in seconds. Default is 43200 seconds (12 hours). + * @param string $filename Unique identifier for the cache object. + */ + $this->lifetime = apply_filters( 'wp_feed_cache_transient_lifetime', $lifetime, $filename); + } + + function save($data) { + if ( is_a($data, 'SimplePie') ) + $data = $data->data; + + set_transient($this->name, $data, $this->lifetime); + set_transient($this->mod_name, time(), $this->lifetime); + return true; + } + + function load() { + return get_transient($this->name); + } + + function mtime() { + return get_transient($this->mod_name); + } + + function touch() { + return set_transient($this->mod_name, time(), $this->lifetime); + } + + function unlink() { + delete_transient($this->name); + delete_transient($this->mod_name); + return true; + } +} + +class WP_SimplePie_File extends SimplePie_File { + + function __construct($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false) { + $this->url = $url; + $this->timeout = $timeout; + $this->redirects = $redirects; + $this->headers = $headers; + $this->useragent = $useragent; + + $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE; + + if ( preg_match('/^http(s)?:\/\//i', $url) ) { + $args = array( + 'timeout' => $this->timeout, + 'redirection' => $this->redirects, + ); + + if ( !empty($this->headers) ) + $args['headers'] = $this->headers; + + if ( SIMPLEPIE_USERAGENT != $this->useragent ) //Use default WP user agent unless custom has been specified + $args['user-agent'] = $this->useragent; + + $res = wp_safe_remote_request($url, $args); + + if ( is_wp_error($res) ) { + $this->error = 'WP HTTP Error: ' . $res->get_error_message(); + $this->success = false; + } else { + $this->headers = wp_remote_retrieve_headers( $res ); + $this->body = wp_remote_retrieve_body( $res ); + $this->status_code = wp_remote_retrieve_response_code( $res ); + } + } else { + $this->error = ''; + $this->success = false; + } + } +} + +/** + * WordPress SimplePie Sanitization Class + * + * Extension of the SimplePie_Sanitize class to use KSES, because + * we cannot universally count on DOMDocument being available + * + * @package WordPress + * @since 3.5.0 + */ +class WP_SimplePie_Sanitize_KSES extends SimplePie_Sanitize { + public function sanitize( $data, $type, $base = '' ) { + $data = trim( $data ); + if ( $type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML ) { + if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data)) { + $type |= SIMPLEPIE_CONSTRUCT_HTML; + } + else { + $type |= SIMPLEPIE_CONSTRUCT_TEXT; + } + } + if ( $type & SIMPLEPIE_CONSTRUCT_BASE64 ) { + $data = base64_decode( $data ); + } + if ( $type & ( SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML ) ) { + $data = wp_kses_post( $data ); + if ( $this->output_encoding !== 'UTF-8' ) { + $data = $this->registry->call( 'Misc', 'change_encoding', array( $data, 'UTF-8', $this->output_encoding ) ); + } + return $data; + } else { + return parent::sanitize( $data, $type, $base ); + } + } +} diff --git a/src/wp-includes/class-http.php b/src/wp-includes/class-http.php new file mode 100644 index 0000000..c75b47e --- /dev/null +++ b/src/wp-includes/class-http.php @@ -0,0 +1,1954 @@ +<?php +/** + * Simple and uniform HTTP request API. + * + * Standardizes the HTTP requests for WordPress. Handles cookies, gzip encoding and decoding, chunk + * decoding, if HTTP 1.1 and various other difficult HTTP protocol implementations. + * + * @link http://trac.wordpress.org/ticket/4779 HTTP API Proposal + * + * @package WordPress + * @subpackage HTTP + * @since 2.7.0 + */ + +/** + * WordPress HTTP Class for managing HTTP Transports and making HTTP requests. + * + * This class is used to consistently make outgoing HTTP requests easy for developers + * while still being compatible with the many PHP configurations under which + * WordPress runs. + * + * Debugging includes several actions, which pass different variables for debugging the HTTP API. + * + * @package WordPress + * @subpackage HTTP + * @since 2.7.0 + */ +class WP_Http { + + /** + * Send a HTTP request to a URI. + * + * The body and headers are part of the arguments. The 'body' argument is for the body and will + * accept either a string or an array. The 'headers' argument should be an array, but a string + * is acceptable. If the 'body' argument is an array, then it will automatically be escaped + * using http_build_query(). + * + * The only URI that are supported in the HTTP Transport implementation are the HTTP and HTTPS + * protocols. + * + * The defaults are 'method', 'timeout', 'redirection', 'httpversion', 'blocking' and + * 'user-agent'. + * + * Accepted 'method' values are 'GET', 'POST', and 'HEAD', some transports technically allow + * others, but should not be assumed. The 'timeout' is used to sent how long the connection + * should stay open before failing when no response. 'redirection' is used to track how many + * redirects were taken and used to sent the amount for other transports, but not all transports + * accept setting that value. + * + * The 'httpversion' option is used to sent the HTTP version and accepted values are '1.0', and + * '1.1' and should be a string. The 'user-agent' option is the user-agent and is used to + * replace the default user-agent, which is 'WordPress/WP_Version', where WP_Version is the + * value from $wp_version. + * + * The 'blocking' parameter can be used to specify if the calling code requires the result of + * the HTTP request. If set to false, the request will be sent to the remote server, and + * processing returned to the calling code immediately, the caller will know if the request + * suceeded or failed, but will not receive any response from the remote server. + * + * @access public + * @since 2.7.0 + * + * @param string $url URI resource. + * @param str|array $args Optional. Override the defaults. + * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error + */ + function request( $url, $args = array() ) { + global $wp_version; + + $defaults = array( + 'method' => 'GET', + 'timeout' => apply_filters( 'http_request_timeout', 5), + 'redirection' => apply_filters( 'http_request_redirection_count', 5), + 'httpversion' => apply_filters( 'http_request_version', '1.0'), + 'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ), + 'reject_unsafe_urls' => apply_filters( 'http_request_reject_unsafe_urls', false ), + 'blocking' => true, + 'headers' => array(), + 'cookies' => array(), + 'body' => null, + 'compress' => false, + 'decompress' => true, + 'sslverify' => true, + 'sslcertificates' => ABSPATH . WPINC . '/certificates/ca-bundle.crt', + 'stream' => false, + 'filename' => null, + 'limit_response_size' => null, + ); + + // Pre-parse for the HEAD checks. + $args = wp_parse_args( $args ); + + // By default, Head requests do not cause redirections. + if ( isset($args['method']) && 'HEAD' == $args['method'] ) + $defaults['redirection'] = 0; + + $r = wp_parse_args( $args, $defaults ); + $r = apply_filters( 'http_request_args', $r, $url ); + + // The transports decrement this, store a copy of the original value for loop purposes. + if ( ! isset( $r['_redirection'] ) ) + $r['_redirection'] = $r['redirection']; + + // Allow plugins to short-circuit the request + $pre = apply_filters( 'pre_http_request', false, $r, $url ); + if ( false !== $pre ) + return $pre; + + if ( function_exists( 'wp_kses_bad_protocol' ) ) { + if ( $r['reject_unsafe_urls'] ) + $url = wp_http_validate_url( $url ); + $url = wp_kses_bad_protocol( $url, array( 'http', 'https', 'ssl' ) ); + } + + $arrURL = @parse_url( $url ); + + if ( empty( $url ) || empty( $arrURL['scheme'] ) ) + return new WP_Error('http_request_failed', __('A valid URL was not provided.')); + + if ( $this->block_request( $url ) ) + return new WP_Error( 'http_request_failed', __( 'User has blocked requests through HTTP.' ) ); + + // Determine if this is a https call and pass that on to the transport functions + // so that we can blacklist the transports that do not support ssl verification + $r['ssl'] = $arrURL['scheme'] == 'https' || $arrURL['scheme'] == 'ssl'; + + // Determine if this request is to OUR install of WordPress + $homeURL = parse_url( get_bloginfo( 'url' ) ); + $r['local'] = $homeURL['host'] == $arrURL['host'] || 'localhost' == $arrURL['host']; + unset( $homeURL ); + + // If we are streaming to a file but no filename was given drop it in the WP temp dir + // and pick its name using the basename of the $url + if ( $r['stream'] && empty( $r['filename'] ) ) + $r['filename'] = get_temp_dir() . basename( $url ); + + // Force some settings if we are streaming to a file and check for existence and perms of destination directory + if ( $r['stream'] ) { + $r['blocking'] = true; + if ( ! wp_is_writable( dirname( $r['filename'] ) ) ) + return new WP_Error( 'http_request_failed', __( 'Destination directory for file streaming does not exist or is not writable.' ) ); + } + + if ( is_null( $r['headers'] ) ) + $r['headers'] = array(); + + if ( ! is_array( $r['headers'] ) ) { + $processedHeaders = WP_Http::processHeaders( $r['headers'], $url ); + $r['headers'] = $processedHeaders['headers']; + } + + if ( isset( $r['headers']['User-Agent'] ) ) { + $r['user-agent'] = $r['headers']['User-Agent']; + unset( $r['headers']['User-Agent'] ); + } + + if ( isset( $r['headers']['user-agent'] ) ) { + $r['user-agent'] = $r['headers']['user-agent']; + unset( $r['headers']['user-agent'] ); + } + + if ( '1.1' == $r['httpversion'] && !isset( $r['headers']['connection'] ) ) { + $r['headers']['connection'] = 'close'; + } + + // Construct Cookie: header if any cookies are set + WP_Http::buildCookieHeader( $r ); + + // Avoid issues where mbstring.func_overload is enabled + mbstring_binary_safe_encoding(); + + if ( ! isset( $r['headers']['Accept-Encoding'] ) ) { + if ( $encoding = WP_Http_Encoding::accept_encoding( $url, $r ) ) + $r['headers']['Accept-Encoding'] = $encoding; + } + + if ( ( ! is_null( $r['body'] ) && '' != $r['body'] ) || 'POST' == $r['method'] || 'PUT' == $r['method'] ) { + if ( is_array( $r['body'] ) || is_object( $r['body'] ) ) { + $r['body'] = http_build_query( $r['body'], null, '&' ); + + if ( ! isset( $r['headers']['Content-Type'] ) ) + $r['headers']['Content-Type'] = 'application/x-www-form-urlencoded; charset=' . get_option( 'blog_charset' ); + } + + if ( '' === $r['body'] ) + $r['body'] = null; + + if ( ! isset( $r['headers']['Content-Length'] ) && ! isset( $r['headers']['content-length'] ) ) + $r['headers']['Content-Length'] = strlen( $r['body'] ); + } + + $response = $this->_dispatch_request( $url, $r ); + + reset_mbstring_encoding(); + + if ( is_wp_error( $response ) ) + return $response; + + // Append cookies that were used in this request to the response + if ( ! empty( $r['cookies'] ) ) { + $cookies_set = wp_list_pluck( $response['cookies'], 'name' ); + foreach ( $r['cookies'] as $cookie ) { + if ( ! in_array( $cookie->name, $cookies_set ) && $cookie->test( $url ) ) { + $response['cookies'][] = $cookie; + } + } + } + + return $response; + } + + /** + * Tests which transports are capable of supporting the request. + * + * @since 3.2.0 + * @access private + * + * @param array $args Request arguments + * @param string $url URL to Request + * + * @return string|bool Class name for the first transport that claims to support the request. False if no transport claims to support the request. + */ + public function _get_first_available_transport( $args, $url = null ) { + $request_order = apply_filters( 'http_api_transports', array( 'curl', 'streams' ), $args, $url ); + + // Loop over each transport on each HTTP request looking for one which will serve this request's needs + foreach ( $request_order as $transport ) { + $class = 'WP_HTTP_' . $transport; + + // Check to see if this transport is a possibility, calls the transport statically + if ( !call_user_func( array( $class, 'test' ), $args, $url ) ) + continue; + + return $class; + } + + return false; + } + + /** + * Dispatches a HTTP request to a supporting transport. + * + * Tests each transport in order to find a transport which matches the request arguments. + * Also caches the transport instance to be used later. + * + * The order for requests is cURL, and then PHP Streams. + * + * @since 3.2.0 + * @access private + * + * @param string $url URL to Request + * @param array $args Request arguments + * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error + */ + private function _dispatch_request( $url, $args ) { + static $transports = array(); + + $class = $this->_get_first_available_transport( $args, $url ); + if ( !$class ) + return new WP_Error( 'http_failure', __( 'There are no HTTP transports available which can complete the requested request.' ) ); + + // Transport claims to support request, instantiate it and give it a whirl. + if ( empty( $transports[$class] ) ) + $transports[$class] = new $class; + + $response = $transports[$class]->request( $url, $args ); + + do_action( 'http_api_debug', $response, 'response', $class, $args, $url ); + + if ( is_wp_error( $response ) ) + return $response; + + return apply_filters( 'http_response', $response, $args, $url ); + } + + /** + * Uses the POST HTTP method. + * + * Used for sending data that is expected to be in the body. + * + * @access public + * @since 2.7.0 + * + * @param string $url URI resource. + * @param str|array $args Optional. Override the defaults. + * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error + */ + function post($url, $args = array()) { + $defaults = array('method' => 'POST'); + $r = wp_parse_args( $args, $defaults ); + return $this->request($url, $r); + } + + /** + * Uses the GET HTTP method. + * + * Used for sending data that is expected to be in the body. + * + * @access public + * @since 2.7.0 + * + * @param string $url URI resource. + * @param str|array $args Optional. Override the defaults. + * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error + */ + function get($url, $args = array()) { + $defaults = array('method' => 'GET'); + $r = wp_parse_args( $args, $defaults ); + return $this->request($url, $r); + } + + /** + * Uses the HEAD HTTP method. + * + * Used for sending data that is expected to be in the body. + * + * @access public + * @since 2.7.0 + * + * @param string $url URI resource. + * @param str|array $args Optional. Override the defaults. + * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error + */ + function head($url, $args = array()) { + $defaults = array('method' => 'HEAD'); + $r = wp_parse_args( $args, $defaults ); + return $this->request($url, $r); + } + + /** + * Parses the responses and splits the parts into headers and body. + * + * @access public + * @static + * @since 2.7.0 + * + * @param string $strResponse The full response string + * @return array Array with 'headers' and 'body' keys. + */ + public static function processResponse($strResponse) { + $res = explode("\r\n\r\n", $strResponse, 2); + + return array('headers' => $res[0], 'body' => isset($res[1]) ? $res[1] : ''); + } + + /** + * Transform header string into an array. + * + * If an array is given then it is assumed to be raw header data with numeric keys with the + * headers as the values. No headers must be passed that were already processed. + * + * @access public + * @static + * @since 2.7.0 + * + * @param string|array $headers + * @param string $url The URL that was requested + * @return array Processed string headers. If duplicate headers are encountered, + * Then a numbered array is returned as the value of that header-key. + */ + public static function processHeaders( $headers, $url = '' ) { + // split headers, one per array element + if ( is_string($headers) ) { + // tolerate line terminator: CRLF = LF (RFC 2616 19.3) + $headers = str_replace("\r\n", "\n", $headers); + // unfold folded header fields. LWS = [CRLF] 1*( SP | HT ) <US-ASCII SP, space (32)>, <US-ASCII HT, horizontal-tab (9)> (RFC 2616 2.2) + $headers = preg_replace('/\n[ \t]/', ' ', $headers); + // create the headers array + $headers = explode("\n", $headers); + } + + $response = array('code' => 0, 'message' => ''); + + // If a redirection has taken place, The headers for each page request may have been passed. + // In this case, determine the final HTTP header and parse from there. + for ( $i = count($headers)-1; $i >= 0; $i-- ) { + if ( !empty($headers[$i]) && false === strpos($headers[$i], ':') ) { + $headers = array_splice($headers, $i); + break; + } + } + + $cookies = array(); + $newheaders = array(); + foreach ( (array) $headers as $tempheader ) { + if ( empty($tempheader) ) + continue; + + if ( false === strpos($tempheader, ':') ) { + $stack = explode(' ', $tempheader, 3); + $stack[] = ''; + list( , $response['code'], $response['message']) = $stack; + continue; + } + + list($key, $value) = explode(':', $tempheader, 2); + + $key = strtolower( $key ); + $value = trim( $value ); + + if ( isset( $newheaders[ $key ] ) ) { + if ( ! is_array( $newheaders[ $key ] ) ) + $newheaders[$key] = array( $newheaders[ $key ] ); + $newheaders[ $key ][] = $value; + } else { + $newheaders[ $key ] = $value; + } + if ( 'set-cookie' == $key ) + $cookies[] = new WP_Http_Cookie( $value, $url ); + } + + return array('response' => $response, 'headers' => $newheaders, 'cookies' => $cookies); + } + + /** + * Takes the arguments for a ::request() and checks for the cookie array. + * + * If it's found, then it upgrades any basic name => value pairs to WP_Http_Cookie instances, + * which are each parsed into strings and added to the Cookie: header (within the arguments array). + * Edits the array by reference. + * + * @access public + * @version 2.8.0 + * @static + * + * @param array $r Full array of args passed into ::request() + */ + public static function buildCookieHeader( &$r ) { + if ( ! empty($r['cookies']) ) { + // Upgrade any name => value cookie pairs to WP_HTTP_Cookie instances + foreach ( $r['cookies'] as $name => $value ) { + if ( ! is_object( $value ) ) + $r['cookies'][ $name ] = new WP_HTTP_Cookie( array( 'name' => $name, 'value' => $value ) ); + } + + $cookies_header = ''; + foreach ( (array) $r['cookies'] as $cookie ) { + $cookies_header .= $cookie->getHeaderValue() . '; '; + } + + $cookies_header = substr( $cookies_header, 0, -2 ); + $r['headers']['cookie'] = $cookies_header; + } + } + + /** + * Decodes chunk transfer-encoding, based off the HTTP 1.1 specification. + * + * Based off the HTTP http_encoding_dechunk function. + * + * @link http://tools.ietf.org/html/rfc2616#section-19.4.6 Process for chunked decoding. + * + * @access public + * @since 2.7.0 + * @static + * + * @param string $body Body content + * @return string Chunked decoded body on success or raw body on failure. + */ + public static function chunkTransferDecode( $body ) { + // The body is not chunked encoded or is malformed. + if ( ! preg_match( '/^([0-9a-f]+)[^\r\n]*\r\n/i', trim( $body ) ) ) + return $body; + + $parsed_body = ''; + $body_original = $body; // We'll be altering $body, so need a backup in case of error + + while ( true ) { + $has_chunk = (bool) preg_match( '/^([0-9a-f]+)[^\r\n]*\r\n/i', $body, $match ); + if ( ! $has_chunk || empty( $match[1] ) ) + return $body_original; + + $length = hexdec( $match[1] ); + $chunk_length = strlen( $match[0] ); + + // Parse out the chunk of data + $parsed_body .= substr( $body, $chunk_length, $length ); + + // Remove the chunk from the raw data + $body = substr( $body, $length + $chunk_length ); + + // End of document + if ( '0' === trim( $body ) ) + return $parsed_body; + } + } + + /** + * Block requests through the proxy. + * + * Those who are behind a proxy and want to prevent access to certain hosts may do so. This will + * prevent plugins from working and core functionality, if you don't include api.wordpress.org. + * + * You block external URL requests by defining WP_HTTP_BLOCK_EXTERNAL as true in your wp-config.php + * file and this will only allow localhost and your blog to make requests. The constant + * WP_ACCESSIBLE_HOSTS will allow additional hosts to go through for requests. The format of the + * WP_ACCESSIBLE_HOSTS constant is a comma separated list of hostnames to allow, wildcard domains + * are supported, eg *.wordpress.org will allow for all subdomains of wordpress.org to be contacted. + * + * @since 2.8.0 + * @link http://core.trac.wordpress.org/ticket/8927 Allow preventing external requests. + * @link http://core.trac.wordpress.org/ticket/14636 Allow wildcard domains in WP_ACCESSIBLE_HOSTS + * + * @param string $uri URI of url. + * @return bool True to block, false to allow. + */ + function block_request($uri) { + // We don't need to block requests, because nothing is blocked. + if ( ! defined( 'WP_HTTP_BLOCK_EXTERNAL' ) || ! WP_HTTP_BLOCK_EXTERNAL ) + return false; + + $check = parse_url($uri); + if ( ! $check ) + return true; + + $home = parse_url( get_option('siteurl') ); + + // Don't block requests back to ourselves by default + if ( $check['host'] == 'localhost' || $check['host'] == $home['host'] ) + return apply_filters('block_local_requests', false); + + if ( !defined('WP_ACCESSIBLE_HOSTS') ) + return true; + + static $accessible_hosts; + static $wildcard_regex = false; + if ( null == $accessible_hosts ) { + $accessible_hosts = preg_split('|,\s*|', WP_ACCESSIBLE_HOSTS); + + if ( false !== strpos(WP_ACCESSIBLE_HOSTS, '*') ) { + $wildcard_regex = array(); + foreach ( $accessible_hosts as $host ) + $wildcard_regex[] = str_replace( '\*', '.+', preg_quote( $host, '/' ) ); + $wildcard_regex = '/^(' . implode('|', $wildcard_regex) . ')$/i'; + } + } + + if ( !empty($wildcard_regex) ) + return !preg_match($wildcard_regex, $check['host']); + else + return !in_array( $check['host'], $accessible_hosts ); //Inverse logic, If it's in the array, then we can't access it. + + } + + static function make_absolute_url( $maybe_relative_path, $url ) { + if ( empty( $url ) ) + return $maybe_relative_path; + + // Check for a scheme + if ( false !== strpos( $maybe_relative_path, '://' ) ) + return $maybe_relative_path; + + if ( ! $url_parts = @parse_url( $url ) ) + return $maybe_relative_path; + + if ( ! $relative_url_parts = @parse_url( $maybe_relative_path ) ) + return $maybe_relative_path; + + $absolute_path = $url_parts['scheme'] . '://' . $url_parts['host']; + if ( isset( $url_parts['port'] ) ) + $absolute_path .= ':' . $url_parts['port']; + + // Start off with the Absolute URL path + $path = ! empty( $url_parts['path'] ) ? $url_parts['path'] : '/'; + + // If it's a root-relative path, then great + if ( ! empty( $relative_url_parts['path'] ) && '/' == $relative_url_parts['path'][0] ) { + $path = $relative_url_parts['path']; + + // Else it's a relative path + } elseif ( ! empty( $relative_url_parts['path'] ) ) { + // Strip off any file components from the absolute path + $path = substr( $path, 0, strrpos( $path, '/' ) + 1 ); + + // Build the new path + $path .= $relative_url_parts['path']; + + // Strip all /path/../ out of the path + while ( strpos( $path, '../' ) > 1 ) { + $path = preg_replace( '![^/]+/\.\./!', '', $path ); + } + + // Strip any final leading ../ from the path + $path = preg_replace( '!^/(\.\./)+!', '', $path ); + } + + // Add the Query string + if ( ! empty( $relative_url_parts['query'] ) ) + $path .= '?' . $relative_url_parts['query']; + + return $absolute_path . '/' . ltrim( $path, '/' ); + } + + /** + * Handles HTTP Redirects and follows them if appropriate. + * + * @since 3.7.0 + * + * @param string $url The URL which was requested. + * @param array $args The Arguements which were used to make the request. + * @param array $response The Response of the HTTP request. + * @return false|object False if no redirect is present, a WP_HTTP or WP_Error result otherwise. + */ + static function handle_redirects( $url, $args, $response ) { + // If no redirects are present, or, redirects were not requested, perform no action. + if ( ! isset( $response['headers']['location'] ) || 0 === $args['_redirection'] ) + return false; + + // Only perform redirections on redirection http codes + if ( $response['response']['code'] > 399 || $response['response']['code'] < 300 ) + return false; + + // Don't redirect if we've run out of redirects + if ( $args['redirection']-- <= 0 ) + return new WP_Error( 'http_request_failed', __('Too many redirects.') ); + + $redirect_location = $response['headers']['location']; + + // If there were multiple Location headers, use the last header specified + if ( is_array( $redirect_location ) ) + $redirect_location = array_pop( $redirect_location ); + + $redirect_location = WP_HTTP::make_absolute_url( $redirect_location, $url ); + + // POST requests should not POST to a redirected location + if ( 'POST' == $args['method'] ) { + if ( in_array( $response['response']['code'], array( 302, 303 ) ) ) + $args['method'] = 'GET'; + } + + // Include valid cookies in the redirect process + if ( ! empty( $response['cookies'] ) ) { + foreach ( $response['cookies'] as $cookie ) { + if ( $cookie->test( $redirect_location ) ) + $args['cookies'][] = $cookie; + } + } + + return wp_remote_request( $redirect_location, $args ); + } + + /** + * Determines if a specified string represents an IP address or not. + * + * This function also detects the type of the IP address, returning either + * '4' or '6' to represent a IPv4 and IPv6 address respectively. + * This does not verify if the IP is a valid IP, only that it appears to be + * an IP address. + * + * @see http://home.deds.nl/~aeron/regex/ for IPv6 regex + * + * @since 3.7.0 + * @static + * + * @param string $maybe_ip A suspected IP address + * @return integer|bool Upon success, '4' or '6' to represent a IPv4 or IPv6 address, false upon failure + */ + static function is_ip_address( $maybe_ip ) { + if ( preg_match( '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $maybe_ip ) ) + return 4; + + if ( false !== strpos( $maybe_ip, ':' ) && preg_match( '/^(((?=.*(::))(?!.*\3.+\3))\3?|([\dA-F]{1,4}(\3|:\b|$)|\2))(?4){5}((?4){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i', trim( $maybe_ip, ' []' ) ) ) + return 6; + + return false; + } + +} + +/** + * HTTP request method uses PHP Streams to retrieve the url. + * + * @package WordPress + * @subpackage HTTP + * + * @since 2.7.0 + * @since 3.7.0 Combined with the fsockopen transport and switched to stream_socket_client(). + */ +class WP_Http_Streams { + /** + * Send a HTTP request to a URI using PHP Streams. + * + * @see WP_Http::request For default options descriptions. + * + * @since 2.7.0 + * @since 3.7.0 Combined with the fsockopen transport and switched to stream_socket_client(). + * + * @access public + * @param string $url URI resource. + * @param string|array $args Optional. Override the defaults. + * @return array 'headers', 'body', 'response', 'cookies' and 'filename' keys. + */ + function request($url, $args = array()) { + $defaults = array( + 'method' => 'GET', 'timeout' => 5, + 'redirection' => 5, 'httpversion' => '1.0', + 'blocking' => true, + 'headers' => array(), 'body' => null, 'cookies' => array() + ); + + $r = wp_parse_args( $args, $defaults ); + + if ( isset($r['headers']['User-Agent']) ) { + $r['user-agent'] = $r['headers']['User-Agent']; + unset($r['headers']['User-Agent']); + } else if ( isset($r['headers']['user-agent']) ) { + $r['user-agent'] = $r['headers']['user-agent']; + unset($r['headers']['user-agent']); + } + + // Construct Cookie: header if any cookies are set + WP_Http::buildCookieHeader( $r ); + + $arrURL = parse_url($url); + + $connect_host = $arrURL['host']; + + $secure_transport = ( $arrURL['scheme'] == 'ssl' || $arrURL['scheme'] == 'https' ); + if ( ! isset( $arrURL['port'] ) ) { + if ( $arrURL['scheme'] == 'ssl' || $arrURL['scheme'] == 'https' ) { + $arrURL['port'] = 443; + $secure_transport = true; + } else { + $arrURL['port'] = 80; + } + } + + if ( isset( $r['headers']['Host'] ) || isset( $r['headers']['host'] ) ) { + if ( isset( $r['headers']['Host'] ) ) + $arrURL['host'] = $r['headers']['Host']; + else + $arrURL['host'] = $r['headers']['host']; + unset( $r['headers']['Host'], $r['headers']['host'] ); + } + + // Certain versions of PHP have issues with 'localhost' and IPv6, It attempts to connect to ::1, + // which fails when the server is not set up for it. For compatibility, always connect to the IPv4 address. + if ( 'localhost' == strtolower( $connect_host ) ) + $connect_host = '127.0.0.1'; + + $connect_host = $secure_transport ? 'ssl://' . $connect_host : 'tcp://' . $connect_host; + + $is_local = isset( $r['local'] ) && $r['local']; + $ssl_verify = isset( $r['sslverify'] ) && $r['sslverify']; + if ( $is_local ) + $ssl_verify = apply_filters( 'https_local_ssl_verify', $ssl_verify ); + elseif ( ! $is_local ) + $ssl_verify = apply_filters( 'https_ssl_verify', $ssl_verify ); + + $proxy = new WP_HTTP_Proxy(); + + $context = stream_context_create( array( + 'ssl' => array( + 'verify_peer' => $ssl_verify, + //'CN_match' => $arrURL['host'], // This is handled by self::verify_ssl_certificate() + 'capture_peer_cert' => $ssl_verify, + 'SNI_enabled' => true, + 'cafile' => $r['sslcertificates'], + 'allow_self_signed' => ! $ssl_verify, + ) + ) ); + + $timeout = (int) floor( $r['timeout'] ); + $utimeout = $timeout == $r['timeout'] ? 0 : 1000000 * $r['timeout'] % 1000000; + $connect_timeout = max( $timeout, 1 ); + + $connection_error = null; // Store error number + $connection_error_str = null; // Store error string + + if ( !WP_DEBUG ) { + // In the event that the SSL connection fails, silence the many PHP Warnings + if ( $secure_transport ) + $error_reporting = error_reporting(0); + + if ( $proxy->is_enabled() && $proxy->send_through_proxy( $url ) ) + $handle = @stream_socket_client( 'tcp://' . $proxy->host() . ':' . $proxy->port(), $connection_error, $connection_error_str, $connect_timeout, STREAM_CLIENT_CONNECT, $context ); + else + $handle = @stream_socket_client( $connect_host . ':' . $arrURL['port'], $connection_error, $connection_error_str, $connect_timeout, STREAM_CLIENT_CONNECT, $context ); + + if ( $secure_transport ) + error_reporting( $error_reporting ); + + } else { + if ( $proxy->is_enabled() && $proxy->send_through_proxy( $url ) ) + $handle = stream_socket_client( 'tcp://' . $proxy->host() . ':' . $proxy->port(), $connection_error, $connection_error_str, $connect_timeout, STREAM_CLIENT_CONNECT, $context ); + else + $handle = stream_socket_client( $connect_host . ':' . $arrURL['port'], $connection_error, $connection_error_str, $connect_timeout, STREAM_CLIENT_CONNECT, $context ); + } + + if ( false === $handle ) { + // SSL connection failed due to expired/invalid cert, or, OpenSSL configuration is broken + if ( $secure_transport && 0 === $connection_error && '' === $connection_error_str ) + return new WP_Error( 'http_request_failed', __( 'The SSL certificate for the host could not be verified.' ) ); + + return new WP_Error('http_request_failed', $connection_error . ': ' . $connection_error_str ); + } + + // Verify that the SSL certificate is valid for this request + if ( $secure_transport && $ssl_verify && ! $proxy->is_enabled() ) { + if ( ! self::verify_ssl_certificate( $handle, $arrURL['host'] ) ) + return new WP_Error( 'http_request_failed', __( 'The SSL certificate for the host could not be verified.' ) ); + } + + stream_set_timeout( $handle, $timeout, $utimeout ); + + if ( $proxy->is_enabled() && $proxy->send_through_proxy( $url ) ) //Some proxies require full URL in this field. + $requestPath = $url; + else + $requestPath = $arrURL['path'] . ( isset($arrURL['query']) ? '?' . $arrURL['query'] : '' ); + + if ( empty($requestPath) ) + $requestPath .= '/'; + + $strHeaders = strtoupper($r['method']) . ' ' . $requestPath . ' HTTP/' . $r['httpversion'] . "\r\n"; + + if ( $proxy->is_enabled() && $proxy->send_through_proxy( $url ) ) + $strHeaders .= 'Host: ' . $arrURL['host'] . ':' . $arrURL['port'] . "\r\n"; + else + $strHeaders .= 'Host: ' . $arrURL['host'] . "\r\n"; + + if ( isset($r['user-agent']) ) + $strHeaders .= 'User-agent: ' . $r['user-agent'] . "\r\n"; + + if ( is_array($r['headers']) ) { + foreach ( (array) $r['headers'] as $header => $headerValue ) + $strHeaders .= $header . ': ' . $headerValue . "\r\n"; + } else { + $strHeaders .= $r['headers']; + } + + if ( $proxy->use_authentication() ) + $strHeaders .= $proxy->authentication_header() . "\r\n"; + + $strHeaders .= "\r\n"; + + if ( ! is_null($r['body']) ) + $strHeaders .= $r['body']; + + fwrite($handle, $strHeaders); + + if ( ! $r['blocking'] ) { + stream_set_blocking( $handle, 0 ); + fclose( $handle ); + return array( 'headers' => array(), 'body' => '', 'response' => array('code' => false, 'message' => false), 'cookies' => array() ); + } + + $strResponse = ''; + $bodyStarted = false; + $keep_reading = true; + $block_size = 4096; + if ( isset( $r['limit_response_size'] ) ) + $block_size = min( $block_size, $r['limit_response_size'] ); + + // If streaming to a file setup the file handle + if ( $r['stream'] ) { + if ( ! WP_DEBUG ) + $stream_handle = @fopen( $r['filename'], 'w+' ); + else + $stream_handle = fopen( $r['filename'], 'w+' ); + if ( ! $stream_handle ) + return new WP_Error( 'http_request_failed', sprintf( __( 'Could not open handle for fopen() to %s' ), $r['filename'] ) ); + + $bytes_written = 0; + while ( ! feof($handle) && $keep_reading ) { + $block = fread( $handle, $block_size ); + if ( ! $bodyStarted ) { + $strResponse .= $block; + if ( strpos( $strResponse, "\r\n\r\n" ) ) { + $process = WP_Http::processResponse( $strResponse ); + $bodyStarted = true; + $block = $process['body']; + unset( $strResponse ); + $process['body'] = ''; + } + } + + $this_block_size = strlen( $block ); + + if ( isset( $r['limit_response_size'] ) && ( $bytes_written + $this_block_size ) > $r['limit_response_size'] ) + $block = substr( $block, 0, ( $r['limit_response_size'] - $bytes_written ) ); + + $bytes_written_to_file = fwrite( $stream_handle, $block ); + + if ( $bytes_written_to_file != $this_block_size ) { + fclose( $handle ); + fclose( $stream_handle ); + return new WP_Error( 'http_request_failed', __( 'Failed to write request to temporary file.' ) ); + } + + $bytes_written += $bytes_written_to_file; + + $keep_reading = !isset( $r['limit_response_size'] ) || $bytes_written < $r['limit_response_size']; + } + + fclose( $stream_handle ); + + } else { + $header_length = 0; + while ( ! feof( $handle ) && $keep_reading ) { + $block = fread( $handle, $block_size ); + $strResponse .= $block; + if ( ! $bodyStarted && strpos( $strResponse, "\r\n\r\n" ) ) { + $header_length = strpos( $strResponse, "\r\n\r\n" ) + 4; + $bodyStarted = true; + } + $keep_reading = ( ! $bodyStarted || !isset( $r['limit_response_size'] ) || strlen( $strResponse ) < ( $header_length + $r['limit_response_size'] ) ); + } + + $process = WP_Http::processResponse( $strResponse ); + unset( $strResponse ); + + } + + fclose( $handle ); + + $arrHeaders = WP_Http::processHeaders( $process['headers'], $url ); + + $response = array( + 'headers' => $arrHeaders['headers'], + 'body' => null, // Not yet processed + 'response' => $arrHeaders['response'], + 'cookies' => $arrHeaders['cookies'], + 'filename' => $r['filename'] + ); + + // Handle redirects + if ( false !== ( $redirect_response = WP_HTTP::handle_redirects( $url, $r, $response ) ) ) + return $redirect_response; + + // If the body was chunk encoded, then decode it. + if ( ! empty( $process['body'] ) && isset( $arrHeaders['headers']['transfer-encoding'] ) && 'chunked' == $arrHeaders['headers']['transfer-encoding'] ) + $process['body'] = WP_Http::chunkTransferDecode($process['body']); + + if ( true === $r['decompress'] && true === WP_Http_Encoding::should_decode($arrHeaders['headers']) ) + $process['body'] = WP_Http_Encoding::decompress( $process['body'] ); + + if ( isset( $r['limit_response_size'] ) && strlen( $process['body'] ) > $r['limit_response_size'] ) + $process['body'] = substr( $process['body'], 0, $r['limit_response_size'] ); + + $response['body'] = $process['body']; + + return $response; + } + + /** + * Verifies the received SSL certificate against it's Common Names and subjectAltName fields + * + * PHP's SSL verifications only verify that it's a valid Certificate, it doesn't verify if + * the certificate is valid for the hostname which was requested. + * This function verifies the requested hostname against certificate's subjectAltName field, + * if that is empty, or contains no DNS entries, a fallback to the Common Name field is used. + * + * IP Address support is included if the request is being made to an IP address. + * + * @since 3.7.0 + * @static + * + * @param stream $stream The PHP Stream which the SSL request is being made over + * @param string $host The hostname being requested + * @return bool If the cerficiate presented in $stream is valid for $host + */ + static function verify_ssl_certificate( $stream, $host ) { + $context_options = stream_context_get_options( $stream ); + + if ( empty( $context_options['ssl']['peer_certificate'] ) ) + return false; + + $cert = openssl_x509_parse( $context_options['ssl']['peer_certificate'] ); + if ( ! $cert ) + return false; + + // If the request is being made to an IP address, we'll validate against IP fields in the cert (if they exist) + $host_type = ( WP_HTTP::is_ip_address( $host ) ? 'ip' : 'dns' ); + + $certificate_hostnames = array(); + if ( ! empty( $cert['extensions']['subjectAltName'] ) ) { + $match_against = preg_split( '/,\s*/', $cert['extensions']['subjectAltName'] ); + foreach ( $match_against as $match ) { + list( $match_type, $match_host ) = explode( ':', $match ); + if ( $host_type == strtolower( trim( $match_type ) ) ) // IP: or DNS: + $certificate_hostnames[] = strtolower( trim( $match_host ) ); + } + } elseif ( !empty( $cert['subject']['CN'] ) ) { + // Only use the CN when the certificate includes no subjectAltName extension + $certificate_hostnames[] = strtolower( $cert['subject']['CN'] ); + } + + // Exact hostname/IP matches + if ( in_array( strtolower( $host ), $certificate_hostnames ) ) + return true; + + // IP's can't be wildcards, Stop processing + if ( 'ip' == $host_type ) + return false; + + // Test to see if the domain is at least 2 deep for wildcard support + if ( substr_count( $host, '.' ) < 2 ) + return false; + + // Wildcard subdomains certs (*.example.com) are valid for a.example.com but not a.b.example.com + $wildcard_host = preg_replace( '/^[^.]+\./', '*.', $host ); + + return in_array( strtolower( $wildcard_host ), $certificate_hostnames ); + } + + /** + * Whether this class can be used for retrieving an URL. + * + * @static + * @access public + * @since 2.7.0 + * @since 3.7.0 Combined with the fsockopen transport and switched to stream_socket_client(). + * + * @return boolean False means this class can not be used, true means it can. + */ + public static function test( $args = array() ) { + if ( ! function_exists( 'stream_socket_client' ) ) + return false; + + $is_ssl = isset( $args['ssl'] ) && $args['ssl']; + + if ( $is_ssl ) { + if ( ! extension_loaded( 'openssl' ) ) + return false; + if ( ! function_exists( 'openssl_x509_parse' ) ) + return false; + } + + return apply_filters( 'use_streams_transport', true, $args ); + } +} + +/** + * Deprecated HTTP Transport method which used fsockopen. + * + * This class is not used, and is included for backwards compatibility only. + * All code should make use of WP_HTTP directly through it's API. + * + * @see WP_HTTP::request + * + * @package WordPress + * @subpackage HTTP + * + * @since 2.7.0 + * @deprecated 3.7.0 Please use WP_HTTP::request() directly + */ +class WP_HTTP_Fsockopen extends WP_HTTP_Streams { + // For backwards compatibility for users who are using the class directly +} + +/** + * HTTP request method uses Curl extension to retrieve the url. + * + * Requires the Curl extension to be installed. + * + * @package WordPress + * @subpackage HTTP + * @since 2.7.0 + */ +class WP_Http_Curl { + + /** + * Temporary header storage for during requests. + * + * @since 3.2.0 + * @access private + * @var string + */ + private $headers = ''; + + /** + * Temporary body storage for during requests. + * + * @since 3.6.0 + * @access private + * @var string + */ + private $body = ''; + + /** + * The maximum amount of data to recieve from the remote server + * + * @since 3.6.0 + * @access private + * @var int + */ + private $max_body_length = false; + + /** + * The file resource used for streaming to file. + * + * @since 3.6.0 + * @access private + * @var resource + */ + private $stream_handle = false; + + /** + * Send a HTTP request to a URI using cURL extension. + * + * @access public + * @since 2.7.0 + * + * @param string $url + * @param str|array $args Optional. Override the defaults. + * @return array 'headers', 'body', 'response', 'cookies' and 'filename' keys. + */ + function request($url, $args = array()) { + $defaults = array( + 'method' => 'GET', 'timeout' => 5, + 'redirection' => 5, 'httpversion' => '1.0', + 'blocking' => true, + 'headers' => array(), 'body' => null, 'cookies' => array() + ); + + $r = wp_parse_args( $args, $defaults ); + + if ( isset($r['headers']['User-Agent']) ) { + $r['user-agent'] = $r['headers']['User-Agent']; + unset($r['headers']['User-Agent']); + } else if ( isset($r['headers']['user-agent']) ) { + $r['user-agent'] = $r['headers']['user-agent']; + unset($r['headers']['user-agent']); + } + + // Construct Cookie: header if any cookies are set. + WP_Http::buildCookieHeader( $r ); + + $handle = curl_init(); + + // cURL offers really easy proxy support. + $proxy = new WP_HTTP_Proxy(); + + if ( $proxy->is_enabled() && $proxy->send_through_proxy( $url ) ) { + + curl_setopt( $handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP ); + curl_setopt( $handle, CURLOPT_PROXY, $proxy->host() ); + curl_setopt( $handle, CURLOPT_PROXYPORT, $proxy->port() ); + + if ( $proxy->use_authentication() ) { + curl_setopt( $handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY ); + curl_setopt( $handle, CURLOPT_PROXYUSERPWD, $proxy->authentication() ); + } + } + + $is_local = isset($r['local']) && $r['local']; + $ssl_verify = isset($r['sslverify']) && $r['sslverify']; + if ( $is_local ) + $ssl_verify = apply_filters('https_local_ssl_verify', $ssl_verify); + elseif ( ! $is_local ) + $ssl_verify = apply_filters('https_ssl_verify', $ssl_verify); + + // CURLOPT_TIMEOUT and CURLOPT_CONNECTTIMEOUT expect integers. Have to use ceil since + // a value of 0 will allow an unlimited timeout. + $timeout = (int) ceil( $r['timeout'] ); + curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, $timeout ); + curl_setopt( $handle, CURLOPT_TIMEOUT, $timeout ); + + curl_setopt( $handle, CURLOPT_URL, $url); + curl_setopt( $handle, CURLOPT_RETURNTRANSFER, true ); + curl_setopt( $handle, CURLOPT_SSL_VERIFYHOST, ( $ssl_verify === true ) ? 2 : false ); + curl_setopt( $handle, CURLOPT_SSL_VERIFYPEER, $ssl_verify ); + curl_setopt( $handle, CURLOPT_CAINFO, $r['sslcertificates'] ); + curl_setopt( $handle, CURLOPT_USERAGENT, $r['user-agent'] ); + // The option doesn't work with safe mode or when open_basedir is set, and there's a + // bug #17490 with redirected POST requests, so handle redirections outside Curl. + curl_setopt( $handle, CURLOPT_FOLLOWLOCATION, false ); + if ( defined( 'CURLOPT_PROTOCOLS' ) ) // PHP 5.2.10 / cURL 7.19.4 + curl_setopt( $handle, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS ); + + switch ( $r['method'] ) { + case 'HEAD': + curl_setopt( $handle, CURLOPT_NOBODY, true ); + break; + case 'POST': + curl_setopt( $handle, CURLOPT_POST, true ); + curl_setopt( $handle, CURLOPT_POSTFIELDS, $r['body'] ); + break; + case 'PUT': + curl_setopt( $handle, CURLOPT_CUSTOMREQUEST, 'PUT' ); + curl_setopt( $handle, CURLOPT_POSTFIELDS, $r['body'] ); + break; + default: + curl_setopt( $handle, CURLOPT_CUSTOMREQUEST, $r['method'] ); + if ( ! is_null( $r['body'] ) ) + curl_setopt( $handle, CURLOPT_POSTFIELDS, $r['body'] ); + break; + } + + if ( true === $r['blocking'] ) { + curl_setopt( $handle, CURLOPT_HEADERFUNCTION, array( $this, 'stream_headers' ) ); + curl_setopt( $handle, CURLOPT_WRITEFUNCTION, array( $this, 'stream_body' ) ); + } + + curl_setopt( $handle, CURLOPT_HEADER, false ); + + if ( isset( $r['limit_response_size'] ) ) + $this->max_body_length = intval( $r['limit_response_size'] ); + else + $this->max_body_length = false; + + // If streaming to a file open a file handle, and setup our curl streaming handler + if ( $r['stream'] ) { + if ( ! WP_DEBUG ) + $this->stream_handle = @fopen( $r['filename'], 'w+' ); + else + $this->stream_handle = fopen( $r['filename'], 'w+' ); + if ( ! $this->stream_handle ) + return new WP_Error( 'http_request_failed', sprintf( __( 'Could not open handle for fopen() to %s' ), $r['filename'] ) ); + } else { + $this->stream_handle = false; + } + + if ( !empty( $r['headers'] ) ) { + // cURL expects full header strings in each element + $headers = array(); + foreach ( $r['headers'] as $name => $value ) { + $headers[] = "{$name}: $value"; + } + curl_setopt( $handle, CURLOPT_HTTPHEADER, $headers ); + } + + if ( $r['httpversion'] == '1.0' ) + curl_setopt( $handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0 ); + else + curl_setopt( $handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 ); + + // Cookies are not handled by the HTTP API currently. Allow for plugin authors to handle it + // themselves... Although, it is somewhat pointless without some reference. + do_action_ref_array( 'http_api_curl', array(&$handle) ); + + // We don't need to return the body, so don't. Just execute request and return. + if ( ! $r['blocking'] ) { + curl_exec( $handle ); + + if ( $curl_error = curl_error( $handle ) ) { + curl_close( $handle ); + return new WP_Error( 'http_request_failed', $curl_error ); + } + if ( in_array( curl_getinfo( $handle, CURLINFO_HTTP_CODE ), array( 301, 302 ) ) ) { + curl_close( $handle ); + return new WP_Error( 'http_request_failed', __( 'Too many redirects.' ) ); + } + + curl_close( $handle ); + return array( 'headers' => array(), 'body' => '', 'response' => array('code' => false, 'message' => false), 'cookies' => array() ); + } + + $theResponse = curl_exec( $handle ); + $theHeaders = WP_Http::processHeaders( $this->headers, $url ); + $theBody = $this->body; + + $this->headers = ''; + $this->body = ''; + + $curl_error = curl_errno( $handle ); + + // If an error occured, or, no response + if ( $curl_error || ( 0 == strlen( $theBody ) && empty( $theHeaders['headers'] ) ) ) { + if ( CURLE_WRITE_ERROR /* 23 */ == $curl_error && $r['stream'] ) { + fclose( $this->stream_handle ); + return new WP_Error( 'http_request_failed', __( 'Failed to write request to temporary file.' ) ); + } + if ( $curl_error = curl_error( $handle ) ) { + curl_close( $handle ); + return new WP_Error( 'http_request_failed', $curl_error ); + } + if ( in_array( curl_getinfo( $handle, CURLINFO_HTTP_CODE ), array( 301, 302 ) ) ) { + curl_close( $handle ); + return new WP_Error( 'http_request_failed', __( 'Too many redirects.' ) ); + } + } + + $response = array(); + $response['code'] = curl_getinfo( $handle, CURLINFO_HTTP_CODE ); + $response['message'] = get_status_header_desc($response['code']); + + curl_close( $handle ); + + if ( $r['stream'] ) + fclose( $this->stream_handle ); + + $response = array( + 'headers' => $theHeaders['headers'], + 'body' => null, + 'response' => $response, + 'cookies' => $theHeaders['cookies'], + 'filename' => $r['filename'] + ); + + // Handle redirects + if ( false !== ( $redirect_response = WP_HTTP::handle_redirects( $url, $r, $response ) ) ) + return $redirect_response; + + if ( true === $r['decompress'] && true === WP_Http_Encoding::should_decode($theHeaders['headers']) ) + $theBody = WP_Http_Encoding::decompress( $theBody ); + + $response['body'] = $theBody; + + return $response; + } + + /** + * Grab the headers of the cURL request + * + * Each header is sent individually to this callback, so we append to the $header property for temporary storage + * + * @since 3.2.0 + * @access private + * @return int + */ + private function stream_headers( $handle, $headers ) { + $this->headers .= $headers; + return strlen( $headers ); + } + + /** + * Grab the body of the cURL request + * + * The contents of the document are passed in chunks, so we append to the $body property for temporary storage. + * Returning a length shorter than the length of $data passed in will cause cURL to abort the request as "completed" + * + * @since 3.6.0 + * @access private + * @return int + */ + private function stream_body( $handle, $data ) { + $data_length = strlen( $data ); + + if ( $this->max_body_length && ( strlen( $this->body ) + $data_length ) > $this->max_body_length ) + $data = substr( $data, 0, ( $this->max_body_length - $data_length ) ); + + if ( $this->stream_handle ) { + $bytes_written = fwrite( $this->stream_handle, $data ); + } else { + $this->body .= $data; + $bytes_written = $data_length; + } + + // Upon event of this function returning less than strlen( $data ) curl will error with CURLE_WRITE_ERROR + return $bytes_written; + } + + /** + * Whether this class can be used for retrieving an URL. + * + * @static + * @since 2.7.0 + * + * @return boolean False means this class can not be used, true means it can. + */ + public static function test( $args = array() ) { + if ( ! function_exists( 'curl_init' ) || ! function_exists( 'curl_exec' ) ) + return false; + + $is_ssl = isset( $args['ssl'] ) && $args['ssl']; + + if ( $is_ssl ) { + $curl_version = curl_version(); + if ( ! (CURL_VERSION_SSL & $curl_version['features']) ) // Does this cURL version support SSL requests? + return false; + } + + return apply_filters( 'use_curl_transport', true, $args ); + } +} + +/** + * Adds Proxy support to the WordPress HTTP API. + * + * There are caveats to proxy support. It requires that defines be made in the wp-config.php file to + * enable proxy support. There are also a few filters that plugins can hook into for some of the + * constants. + * + * Please note that only BASIC authentication is supported by most transports. + * cURL MAY support more methods (such as NTLM authentication) depending on your environment. + * + * The constants are as follows: + * <ol> + * <li>WP_PROXY_HOST - Enable proxy support and host for connecting.</li> + * <li>WP_PROXY_PORT - Proxy port for connection. No default, must be defined.</li> + * <li>WP_PROXY_USERNAME - Proxy username, if it requires authentication.</li> + * <li>WP_PROXY_PASSWORD - Proxy password, if it requires authentication.</li> + * <li>WP_PROXY_BYPASS_HOSTS - Will prevent the hosts in this list from going through the proxy. + * You do not need to have localhost and the blog host in this list, because they will not be passed + * through the proxy. The list should be presented in a comma separated list, wildcards using * are supported, eg. *.wordpress.org</li> + * </ol> + * + * An example can be as seen below. + * <code> + * define('WP_PROXY_HOST', '192.168.84.101'); + * define('WP_PROXY_PORT', '8080'); + * define('WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com, *.wordpress.org'); + * </code> + * + * @link http://core.trac.wordpress.org/ticket/4011 Proxy support ticket in WordPress. + * @link http://core.trac.wordpress.org/ticket/14636 Allow wildcard domains in WP_PROXY_BYPASS_HOSTS + * @since 2.8 + */ +class WP_HTTP_Proxy { + + /** + * Whether proxy connection should be used. + * + * @since 2.8 + * @use WP_PROXY_HOST + * @use WP_PROXY_PORT + * + * @return bool + */ + function is_enabled() { + return defined('WP_PROXY_HOST') && defined('WP_PROXY_PORT'); + } + + /** + * Whether authentication should be used. + * + * @since 2.8 + * @use WP_PROXY_USERNAME + * @use WP_PROXY_PASSWORD + * + * @return bool + */ + function use_authentication() { + return defined('WP_PROXY_USERNAME') && defined('WP_PROXY_PASSWORD'); + } + + /** + * Retrieve the host for the proxy server. + * + * @since 2.8 + * + * @return string + */ + function host() { + if ( defined('WP_PROXY_HOST') ) + return WP_PROXY_HOST; + + return ''; + } + + /** + * Retrieve the port for the proxy server. + * + * @since 2.8 + * + * @return string + */ + function port() { + if ( defined('WP_PROXY_PORT') ) + return WP_PROXY_PORT; + + return ''; + } + + /** + * Retrieve the username for proxy authentication. + * + * @since 2.8 + * + * @return string + */ + function username() { + if ( defined('WP_PROXY_USERNAME') ) + return WP_PROXY_USERNAME; + + return ''; + } + + /** + * Retrieve the password for proxy authentication. + * + * @since 2.8 + * + * @return string + */ + function password() { + if ( defined('WP_PROXY_PASSWORD') ) + return WP_PROXY_PASSWORD; + + return ''; + } + + /** + * Retrieve authentication string for proxy authentication. + * + * @since 2.8 + * + * @return string + */ + function authentication() { + return $this->username() . ':' . $this->password(); + } + + /** + * Retrieve header string for proxy authentication. + * + * @since 2.8 + * + * @return string + */ + function authentication_header() { + return 'Proxy-Authorization: Basic ' . base64_encode( $this->authentication() ); + } + + /** + * Whether URL should be sent through the proxy server. + * + * We want to keep localhost and the blog URL from being sent through the proxy server, because + * some proxies can not handle this. We also have the constant available for defining other + * hosts that won't be sent through the proxy. + * + * @uses WP_PROXY_BYPASS_HOSTS + * @since 2.8.0 + * + * @param string $uri URI to check. + * @return bool True, to send through the proxy and false if, the proxy should not be used. + */ + function send_through_proxy( $uri ) { + // parse_url() only handles http, https type URLs, and will emit E_WARNING on failure. + // This will be displayed on blogs, which is not reasonable. + $check = @parse_url($uri); + + // Malformed URL, can not process, but this could mean ssl, so let through anyway. + if ( $check === false ) + return true; + + $home = parse_url( get_option('siteurl') ); + + $result = apply_filters( 'pre_http_send_through_proxy', null, $uri, $check, $home ); + if ( ! is_null( $result ) ) + return $result; + + if ( $check['host'] == 'localhost' || $check['host'] == $home['host'] ) + return false; + + if ( !defined('WP_PROXY_BYPASS_HOSTS') ) + return true; + + static $bypass_hosts; + static $wildcard_regex = false; + if ( null == $bypass_hosts ) { + $bypass_hosts = preg_split('|,\s*|', WP_PROXY_BYPASS_HOSTS); + + if ( false !== strpos(WP_PROXY_BYPASS_HOSTS, '*') ) { + $wildcard_regex = array(); + foreach ( $bypass_hosts as $host ) + $wildcard_regex[] = str_replace( '\*', '.+', preg_quote( $host, '/' ) ); + $wildcard_regex = '/^(' . implode('|', $wildcard_regex) . ')$/i'; + } + } + + if ( !empty($wildcard_regex) ) + return !preg_match($wildcard_regex, $check['host']); + else + return !in_array( $check['host'], $bypass_hosts ); + } +} +/** + * Internal representation of a single cookie. + * + * Returned cookies are represented using this class, and when cookies are set, if they are not + * already a WP_Http_Cookie() object, then they are turned into one. + * + * @todo The WordPress convention is to use underscores instead of camelCase for function and method + * names. Need to switch to use underscores instead for the methods. + * + * @package WordPress + * @subpackage HTTP + * @since 2.8.0 + */ +class WP_Http_Cookie { + + /** + * Cookie name. + * + * @since 2.8.0 + * @var string + */ + var $name; + + /** + * Cookie value. + * + * @since 2.8.0 + * @var string + */ + var $value; + + /** + * When the cookie expires. + * + * @since 2.8.0 + * @var string + */ + var $expires; + + /** + * Cookie URL path. + * + * @since 2.8.0 + * @var string + */ + var $path; + + /** + * Cookie Domain. + * + * @since 2.8.0 + * @var string + */ + var $domain; + + /** + * Sets up this cookie object. + * + * The parameter $data should be either an associative array containing the indices names below + * or a header string detailing it. + * + * If it's an array, it should include the following elements: + * <ol> + * <li>Name</li> + * <li>Value - should NOT be urlencoded already.</li> + * <li>Expires - (optional) String or int (UNIX timestamp).</li> + * <li>Path (optional)</li> + * <li>Domain (optional)</li> + * <li>Port (optional)</li> + * </ol> + * + * @access public + * @since 2.8.0 + * + * @param string|array $data Raw cookie data. + * @param string $requested_url The URL which the cookie was set on, used for default 'domain' and 'port' values + */ + function __construct( $data, $requested_url = '' ) { + if ( $requested_url ) + $arrURL = @parse_url( $requested_url ); + if ( isset( $arrURL['host'] ) ) + $this->domain = $arrURL['host']; + $this->path = isset( $arrURL['path'] ) ? $arrURL['path'] : '/'; + if ( '/' != substr( $this->path, -1 ) ) + $this->path = dirname( $this->path ) . '/'; + + if ( is_string( $data ) ) { + // Assume it's a header string direct from a previous request + $pairs = explode( ';', $data ); + + // Special handling for first pair; name=value. Also be careful of "=" in value + $name = trim( substr( $pairs[0], 0, strpos( $pairs[0], '=' ) ) ); + $value = substr( $pairs[0], strpos( $pairs[0], '=' ) + 1 ); + $this->name = $name; + $this->value = urldecode( $value ); + array_shift( $pairs ); //Removes name=value from items. + + // Set everything else as a property + foreach ( $pairs as $pair ) { + $pair = rtrim($pair); + if ( empty($pair) ) //Handles the cookie ending in ; which results in a empty final pair + continue; + + list( $key, $val ) = strpos( $pair, '=' ) ? explode( '=', $pair ) : array( $pair, '' ); + $key = strtolower( trim( $key ) ); + if ( 'expires' == $key ) + $val = strtotime( $val ); + $this->$key = $val; + } + } else { + if ( !isset( $data['name'] ) ) + return false; + + // Set properties based directly on parameters + foreach ( array( 'name', 'value', 'path', 'domain', 'port' ) as $field ) { + if ( isset( $data[ $field ] ) ) + $this->$field = $data[ $field ]; + } + + if ( isset( $data['expires'] ) ) + $this->expires = is_int( $data['expires'] ) ? $data['expires'] : strtotime( $data['expires'] ); + else + $this->expires = null; + } + } + + /** + * Confirms that it's OK to send this cookie to the URL checked against. + * + * Decision is based on RFC 2109/2965, so look there for details on validity. + * + * @access public + * @since 2.8.0 + * + * @param string $url URL you intend to send this cookie to + * @return boolean true if allowed, false otherwise. + */ + function test( $url ) { + if ( is_null( $this->name ) ) + return false; + + // Expires - if expired then nothing else matters + if ( isset( $this->expires ) && time() > $this->expires ) + return false; + + // Get details on the URL we're thinking about sending to + $url = parse_url( $url ); + $url['port'] = isset( $url['port'] ) ? $url['port'] : ( 'https' == $url['scheme'] ? 443 : 80 ); + $url['path'] = isset( $url['path'] ) ? $url['path'] : '/'; + + // Values to use for comparison against the URL + $path = isset( $this->path ) ? $this->path : '/'; + $port = isset( $this->port ) ? $this->port : null; + $domain = isset( $this->domain ) ? strtolower( $this->domain ) : strtolower( $url['host'] ); + if ( false === stripos( $domain, '.' ) ) + $domain .= '.local'; + + // Host - very basic check that the request URL ends with the domain restriction (minus leading dot) + $domain = substr( $domain, 0, 1 ) == '.' ? substr( $domain, 1 ) : $domain; + if ( substr( $url['host'], -strlen( $domain ) ) != $domain ) + return false; + + // Port - supports "port-lists" in the format: "80,8000,8080" + if ( !empty( $port ) && !in_array( $url['port'], explode( ',', $port) ) ) + return false; + + // Path - request path must start with path restriction + if ( substr( $url['path'], 0, strlen( $path ) ) != $path ) + return false; + + return true; + } + + /** + * Convert cookie name and value back to header string. + * + * @access public + * @since 2.8.0 + * + * @return string Header encoded cookie name and value. + */ + function getHeaderValue() { + if ( ! isset( $this->name ) || ! isset( $this->value ) ) + return ''; + + return $this->name . '=' . apply_filters( 'wp_http_cookie_value', $this->value, $this->name ); + } + + /** + * Retrieve cookie header for usage in the rest of the WordPress HTTP API. + * + * @access public + * @since 2.8.0 + * + * @return string + */ + function getFullHeader() { + return 'Cookie: ' . $this->getHeaderValue(); + } +} + +/** + * Implementation for deflate and gzip transfer encodings. + * + * Includes RFC 1950, RFC 1951, and RFC 1952. + * + * @since 2.8 + * @package WordPress + * @subpackage HTTP + */ +class WP_Http_Encoding { + + /** + * Compress raw string using the deflate format. + * + * Supports the RFC 1951 standard. + * + * @since 2.8 + * + * @param string $raw String to compress. + * @param int $level Optional, default is 9. Compression level, 9 is highest. + * @param string $supports Optional, not used. When implemented it will choose the right compression based on what the server supports. + * @return string|bool False on failure. + */ + public static function compress( $raw, $level = 9, $supports = null ) { + return gzdeflate( $raw, $level ); + } + + /** + * Decompression of deflated string. + * + * Will attempt to decompress using the RFC 1950 standard, and if that fails + * then the RFC 1951 standard deflate will be attempted. Finally, the RFC + * 1952 standard gzip decode will be attempted. If all fail, then the + * original compressed string will be returned. + * + * @since 2.8 + * + * @param string $compressed String to decompress. + * @param int $length The optional length of the compressed data. + * @return string|bool False on failure. + */ + public static function decompress( $compressed, $length = null ) { + + if ( empty($compressed) ) + return $compressed; + + if ( false !== ( $decompressed = @gzinflate( $compressed ) ) ) + return $decompressed; + + if ( false !== ( $decompressed = WP_Http_Encoding::compatible_gzinflate( $compressed ) ) ) + return $decompressed; + + if ( false !== ( $decompressed = @gzuncompress( $compressed ) ) ) + return $decompressed; + + if ( function_exists('gzdecode') ) { + $decompressed = @gzdecode( $compressed ); + + if ( false !== $decompressed ) + return $decompressed; + } + + return $compressed; + } + + /** + * Decompression of deflated string while staying compatible with the majority of servers. + * + * Certain Servers will return deflated data with headers which PHP's gzinflate() + * function cannot handle out of the box. The following function has been created from + * various snippets on the gzinflate() PHP documentation. + * + * Warning: Magic numbers within. Due to the potential different formats that the compressed + * data may be returned in, some "magic offsets" are needed to ensure proper decompression + * takes place. For a simple progmatic way to determine the magic offset in use, see: + * http://core.trac.wordpress.org/ticket/18273 + * + * @since 2.8.1 + * @link http://core.trac.wordpress.org/ticket/18273 + * @link http://au2.php.net/manual/en/function.gzinflate.php#70875 + * @link http://au2.php.net/manual/en/function.gzinflate.php#77336 + * + * @param string $gzData String to decompress. + * @return string|bool False on failure. + */ + public static function compatible_gzinflate($gzData) { + + // Compressed data might contain a full header, if so strip it for gzinflate() + if ( substr($gzData, 0, 3) == "\x1f\x8b\x08" ) { + $i = 10; + $flg = ord( substr($gzData, 3, 1) ); + if ( $flg > 0 ) { + if ( $flg & 4 ) { + list($xlen) = unpack('v', substr($gzData, $i, 2) ); + $i = $i + 2 + $xlen; + } + if ( $flg & 8 ) + $i = strpos($gzData, "\0", $i) + 1; + if ( $flg & 16 ) + $i = strpos($gzData, "\0", $i) + 1; + if ( $flg & 2 ) + $i = $i + 2; + } + $decompressed = @gzinflate( substr($gzData, $i, -8) ); + if ( false !== $decompressed ) + return $decompressed; + } + + // Compressed data from java.util.zip.Deflater amongst others. + $decompressed = @gzinflate( substr($gzData, 2) ); + if ( false !== $decompressed ) + return $decompressed; + + return false; + } + + /** + * What encoding types to accept and their priority values. + * + * @since 2.8 + * + * @return string Types of encoding to accept. + */ + public static function accept_encoding( $url, $args ) { + $type = array(); + $compression_enabled = WP_Http_Encoding::is_available(); + + if ( ! $args['decompress'] ) // decompression specifically disabled + $compression_enabled = false; + elseif ( $args['stream'] ) // disable when streaming to file + $compression_enabled = false; + elseif ( isset( $args['limit_response_size'] ) ) // If only partial content is being requested, we won't be able to decompress it + $compression_enabled = false; + + if ( $compression_enabled ) { + if ( function_exists( 'gzinflate' ) ) + $type[] = 'deflate;q=1.0'; + + if ( function_exists( 'gzuncompress' ) ) + $type[] = 'compress;q=0.5'; + + if ( function_exists( 'gzdecode' ) ) + $type[] = 'gzip;q=0.5'; + } + + $type = apply_filters( 'wp_http_accept_encoding', $type, $url, $args ); + + return implode(', ', $type); + } + + /** + * What encoding the content used when it was compressed to send in the headers. + * + * @since 2.8 + * + * @return string Content-Encoding string to send in the header. + */ + public static function content_encoding() { + return 'deflate'; + } + + /** + * Whether the content be decoded based on the headers. + * + * @since 2.8 + * + * @param array|string $headers All of the available headers. + * @return bool + */ + public static function should_decode($headers) { + if ( is_array( $headers ) ) { + if ( array_key_exists('content-encoding', $headers) && ! empty( $headers['content-encoding'] ) ) + return true; + } else if ( is_string( $headers ) ) { + return ( stripos($headers, 'content-encoding:') !== false ); + } + + return false; + } + + /** + * Whether decompression and compression are supported by the PHP version. + * + * Each function is tested instead of checking for the zlib extension, to + * ensure that the functions all exist in the PHP version and aren't + * disabled. + * + * @since 2.8 + * + * @return bool + */ + public static function is_available() { + return ( function_exists('gzuncompress') || function_exists('gzdeflate') || function_exists('gzinflate') ); + } +} diff --git a/src/wp-includes/class-json.php b/src/wp-includes/class-json.php new file mode 100644 index 0000000..417592f --- /dev/null +++ b/src/wp-includes/class-json.php @@ -0,0 +1,936 @@ +<?php +if ( ! class_exists( 'Services_JSON' ) ) : +/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ +/** + * Converts to and from JSON format. + * + * JSON (JavaScript Object Notation) is a lightweight data-interchange + * format. It is easy for humans to read and write. It is easy for machines + * to parse and generate. It is based on a subset of the JavaScript + * Programming Language, Standard ECMA-262 3rd Edition - December 1999. + * This feature can also be found in Python. JSON is a text format that is + * completely language independent but uses conventions that are familiar + * to programmers of the C-family of languages, including C, C++, C#, Java, + * JavaScript, Perl, TCL, and many others. These properties make JSON an + * ideal data-interchange language. + * + * This package provides a simple encoder and decoder for JSON notation. It + * is intended for use with client-side Javascript applications that make + * use of HTTPRequest to perform server communication functions - data can + * be encoded into JSON notation for use in a client-side javascript, or + * decoded from incoming Javascript requests. JSON format is native to + * Javascript, and can be directly eval()'ed with no further parsing + * overhead + * + * All strings should be in ASCII or UTF-8 format! + * + * LICENSE: Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: Redistributions of source code must retain the + * above copyright notice, this list of conditions and the following + * disclaimer. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * @category + * @package Services_JSON + * @author Michal Migurski <mike-json@teczno.com> + * @author Matt Knapp <mdknapp[at]gmail[dot]com> + * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com> + * @copyright 2005 Michal Migurski + * @version CVS: $Id: JSON.php 305040 2010-11-02 23:19:03Z alan_k $ + * @license http://www.opensource.org/licenses/bsd-license.php + * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 + */ + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_SLICE', 1); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_STR', 2); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_ARR', 3); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_OBJ', 4); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_CMT', 5); + +/** + * Behavior switch for Services_JSON::decode() + */ +define('SERVICES_JSON_LOOSE_TYPE', 16); + +/** + * Behavior switch for Services_JSON::decode() + */ +define('SERVICES_JSON_SUPPRESS_ERRORS', 32); + +/** + * Behavior switch for Services_JSON::decode() + */ +define('SERVICES_JSON_USE_TO_JSON', 64); + +/** + * Converts to and from JSON format. + * + * Brief example of use: + * + * <code> + * // create a new instance of Services_JSON + * $json = new Services_JSON(); + * + * // convert a complexe value to JSON notation, and send it to the browser + * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4))); + * $output = $json->encode($value); + * + * print($output); + * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]] + * + * // accept incoming POST data, assumed to be in JSON notation + * $input = file_get_contents('php://input', 1000000); + * $value = $json->decode($input); + * </code> + */ +class Services_JSON +{ + /** + * constructs a new JSON instance + * + * @param int $use object behavior flags; combine with boolean-OR + * + * possible values: + * - SERVICES_JSON_LOOSE_TYPE: loose typing. + * "{...}" syntax creates associative arrays + * instead of objects in decode(). + * - SERVICES_JSON_SUPPRESS_ERRORS: error suppression. + * Values which can't be encoded (e.g. resources) + * appear as NULL instead of throwing errors. + * By default, a deeply-nested resource will + * bubble up with an error, so all return values + * from encode() should be checked with isError() + * - SERVICES_JSON_USE_TO_JSON: call toJSON when serializing objects + * It serializes the return value from the toJSON call rather + * than the object it'self, toJSON can return associative arrays, + * strings or numbers, if you return an object, make sure it does + * not have a toJSON method, otherwise an error will occur. + */ + function Services_JSON($use = 0) + { + $this->use = $use; + $this->_mb_strlen = function_exists('mb_strlen'); + $this->_mb_convert_encoding = function_exists('mb_convert_encoding'); + $this->_mb_substr = function_exists('mb_substr'); + } + // private - cache the mbstring lookup results.. + var $_mb_strlen = false; + var $_mb_substr = false; + var $_mb_convert_encoding = false; + + /** + * convert a string from one UTF-16 char to one UTF-8 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf16 UTF-16 character + * @return string UTF-8 character + * @access private + */ + function utf162utf8($utf16) + { + // oh please oh please oh please oh please oh please + if($this->_mb_convert_encoding) { + return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); + } + + $bytes = (ord($utf16{0}) << 8) | ord($utf16{1}); + + switch(true) { + case ((0x7F & $bytes) == $bytes): + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x7F & $bytes); + + case (0x07FF & $bytes) == $bytes: + // return a 2-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0xC0 | (($bytes >> 6) & 0x1F)) + . chr(0x80 | ($bytes & 0x3F)); + + case (0xFFFF & $bytes) == $bytes: + // return a 3-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0xE0 | (($bytes >> 12) & 0x0F)) + . chr(0x80 | (($bytes >> 6) & 0x3F)) + . chr(0x80 | ($bytes & 0x3F)); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * convert a string from one UTF-8 char to one UTF-16 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf8 UTF-8 character + * @return string UTF-16 character + * @access private + */ + function utf82utf16($utf8) + { + // oh please oh please oh please oh please oh please + if($this->_mb_convert_encoding) { + return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); + } + + switch($this->strlen8($utf8)) { + case 1: + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return $utf8; + + case 2: + // return a UTF-16 character from a 2-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x07 & (ord($utf8{0}) >> 2)) + . chr((0xC0 & (ord($utf8{0}) << 6)) + | (0x3F & ord($utf8{1}))); + + case 3: + // return a UTF-16 character from a 3-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr((0xF0 & (ord($utf8{0}) << 4)) + | (0x0F & (ord($utf8{1}) >> 2))) + . chr((0xC0 & (ord($utf8{1}) << 6)) + | (0x7F & ord($utf8{2}))); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * encodes an arbitrary variable into JSON format (and sends JSON Header) + * + * @param mixed $var any number, boolean, string, array, or object to be encoded. + * see argument 1 to Services_JSON() above for array-parsing behavior. + * if var is a strng, note that encode() always expects it + * to be in ASCII or UTF-8 format! + * + * @return mixed JSON string representation of input var or an error if a problem occurs + * @access public + */ + function encode($var) + { + header('Content-type: application/json'); + return $this->encodeUnsafe($var); + } + /** + * encodes an arbitrary variable into JSON format without JSON Header - warning - may allow XSS!!!!) + * + * @param mixed $var any number, boolean, string, array, or object to be encoded. + * see argument 1 to Services_JSON() above for array-parsing behavior. + * if var is a strng, note that encode() always expects it + * to be in ASCII or UTF-8 format! + * + * @return mixed JSON string representation of input var or an error if a problem occurs + * @access public + */ + function encodeUnsafe($var) + { + // see bug #16908 - regarding numeric locale printing + $lc = setlocale(LC_NUMERIC, 0); + setlocale(LC_NUMERIC, 'C'); + $ret = $this->_encode($var); + setlocale(LC_NUMERIC, $lc); + return $ret; + + } + /** + * PRIVATE CODE that does the work of encodes an arbitrary variable into JSON format + * + * @param mixed $var any number, boolean, string, array, or object to be encoded. + * see argument 1 to Services_JSON() above for array-parsing behavior. + * if var is a strng, note that encode() always expects it + * to be in ASCII or UTF-8 format! + * + * @return mixed JSON string representation of input var or an error if a problem occurs + * @access public + */ + function _encode($var) + { + + switch (gettype($var)) { + case 'boolean': + return $var ? 'true' : 'false'; + + case 'NULL': + return 'null'; + + case 'integer': + return (int) $var; + + case 'double': + case 'float': + return (float) $var; + + case 'string': + // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT + $ascii = ''; + $strlen_var = $this->strlen8($var); + + /* + * Iterate over every character in the string, + * escaping with a slash or encoding to UTF-8 where necessary + */ + for ($c = 0; $c < $strlen_var; ++$c) { + + $ord_var_c = ord($var{$c}); + + switch (true) { + case $ord_var_c == 0x08: + $ascii .= '\b'; + break; + case $ord_var_c == 0x09: + $ascii .= '\t'; + break; + case $ord_var_c == 0x0A: + $ascii .= '\n'; + break; + case $ord_var_c == 0x0C: + $ascii .= '\f'; + break; + case $ord_var_c == 0x0D: + $ascii .= '\r'; + break; + + case $ord_var_c == 0x22: + case $ord_var_c == 0x2F: + case $ord_var_c == 0x5C: + // double quote, slash, slosh + $ascii .= '\\'.$var{$c}; + break; + + case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): + // characters U-00000000 - U-0000007F (same as ASCII) + $ascii .= $var{$c}; + break; + + case (($ord_var_c & 0xE0) == 0xC0): + // characters U-00000080 - U-000007FF, mask 110XXXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + if ($c+1 >= $strlen_var) { + $c += 1; + $ascii .= '?'; + break; + } + + $char = pack('C*', $ord_var_c, ord($var{$c + 1})); + $c += 1; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF0) == 0xE0): + if ($c+2 >= $strlen_var) { + $c += 2; + $ascii .= '?'; + break; + } + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + @ord($var{$c + 1}), + @ord($var{$c + 2})); + $c += 2; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF8) == 0xF0): + if ($c+3 >= $strlen_var) { + $c += 3; + $ascii .= '?'; + break; + } + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3})); + $c += 3; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFC) == 0xF8): + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + if ($c+4 >= $strlen_var) { + $c += 4; + $ascii .= '?'; + break; + } + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4})); + $c += 4; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFE) == 0xFC): + if ($c+5 >= $strlen_var) { + $c += 5; + $ascii .= '?'; + break; + } + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4}), + ord($var{$c + 5})); + $c += 5; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + } + } + return '"'.$ascii.'"'; + + case 'array': + /* + * As per JSON spec if any array key is not an integer + * we must treat the the whole array as an object. We + * also try to catch a sparsely populated associative + * array with numeric keys here because some JS engines + * will create an array with empty indexes up to + * max_index which can cause memory issues and because + * the keys, which may be relevant, will be remapped + * otherwise. + * + * As per the ECMA and JSON specification an object may + * have any string as a property. Unfortunately due to + * a hole in the ECMA specification if the key is a + * ECMA reserved word or starts with a digit the + * parameter is only accessible using ECMAScript's + * bracket notation. + */ + + // treat as a JSON object + if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { + $properties = array_map(array($this, 'name_value'), + array_keys($var), + array_values($var)); + + foreach($properties as $property) { + if(Services_JSON::isError($property)) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + } + + // treat it like a regular array + $elements = array_map(array($this, '_encode'), $var); + + foreach($elements as $element) { + if(Services_JSON::isError($element)) { + return $element; + } + } + + return '[' . join(',', $elements) . ']'; + + case 'object': + + // support toJSON methods. + if (($this->use & SERVICES_JSON_USE_TO_JSON) && method_exists($var, 'toJSON')) { + // this may end up allowing unlimited recursion + // so we check the return value to make sure it's not got the same method. + $recode = $var->toJSON(); + + if (method_exists($recode, 'toJSON')) { + + return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS) + ? 'null' + : new Services_JSON_Error(get_class($var). + " toJSON returned an object with a toJSON method."); + + } + + return $this->_encode( $recode ); + } + + $vars = get_object_vars($var); + + $properties = array_map(array($this, 'name_value'), + array_keys($vars), + array_values($vars)); + + foreach($properties as $property) { + if(Services_JSON::isError($property)) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + + default: + return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS) + ? 'null' + : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string"); + } + } + + /** + * array-walking function for use in generating JSON-formatted name-value pairs + * + * @param string $name name of key to use + * @param mixed $value reference to an array element to be encoded + * + * @return string JSON-formatted name-value pair, like '"name":value' + * @access private + */ + function name_value($name, $value) + { + $encoded_value = $this->_encode($value); + + if(Services_JSON::isError($encoded_value)) { + return $encoded_value; + } + + return $this->_encode(strval($name)) . ':' . $encoded_value; + } + + /** + * reduce a string by removing leading and trailing comments and whitespace + * + * @param $str string string value to strip of comments and whitespace + * + * @return string string value stripped of comments and whitespace + * @access private + */ + function reduce_string($str) + { + $str = preg_replace(array( + + // eliminate single line comments in '// ...' form + '#^\s*//(.+)$#m', + + // eliminate multi-line comments in '/* ... */' form, at start of string + '#^\s*/\*(.+)\*/#Us', + + // eliminate multi-line comments in '/* ... */' form, at end of string + '#/\*(.+)\*/\s*$#Us' + + ), '', $str); + + // eliminate extraneous space + return trim($str); + } + + /** + * decodes a JSON string into appropriate variable + * + * @param string $str JSON-formatted string + * + * @return mixed number, boolean, string, array, or object + * corresponding to given JSON input string. + * See argument 1 to Services_JSON() above for object-output behavior. + * Note that decode() always returns strings + * in ASCII or UTF-8 format! + * @access public + */ + function decode($str) + { + $str = $this->reduce_string($str); + + switch (strtolower($str)) { + case 'true': + return true; + + case 'false': + return false; + + case 'null': + return null; + + default: + $m = array(); + + if (is_numeric($str)) { + // Lookie-loo, it's a number + + // This would work on its own, but I'm trying to be + // good about returning integers where appropriate: + // return (float)$str; + + // Return float or int, as appropriate + return ((float)$str == (integer)$str) + ? (integer)$str + : (float)$str; + + } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) { + // STRINGS RETURNED IN UTF-8 FORMAT + $delim = $this->substr8($str, 0, 1); + $chrs = $this->substr8($str, 1, -1); + $utf8 = ''; + $strlen_chrs = $this->strlen8($chrs); + + for ($c = 0; $c < $strlen_chrs; ++$c) { + + $substr_chrs_c_2 = $this->substr8($chrs, $c, 2); + $ord_chrs_c = ord($chrs{$c}); + + switch (true) { + case $substr_chrs_c_2 == '\b': + $utf8 .= chr(0x08); + ++$c; + break; + case $substr_chrs_c_2 == '\t': + $utf8 .= chr(0x09); + ++$c; + break; + case $substr_chrs_c_2 == '\n': + $utf8 .= chr(0x0A); + ++$c; + break; + case $substr_chrs_c_2 == '\f': + $utf8 .= chr(0x0C); + ++$c; + break; + case $substr_chrs_c_2 == '\r': + $utf8 .= chr(0x0D); + ++$c; + break; + + case $substr_chrs_c_2 == '\\"': + case $substr_chrs_c_2 == '\\\'': + case $substr_chrs_c_2 == '\\\\': + case $substr_chrs_c_2 == '\\/': + if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || + ($delim == "'" && $substr_chrs_c_2 != '\\"')) { + $utf8 .= $chrs{++$c}; + } + break; + + case preg_match('/\\\u[0-9A-F]{4}/i', $this->substr8($chrs, $c, 6)): + // single, escaped unicode character + $utf16 = chr(hexdec($this->substr8($chrs, ($c + 2), 2))) + . chr(hexdec($this->substr8($chrs, ($c + 4), 2))); + $utf8 .= $this->utf162utf8($utf16); + $c += 5; + break; + + case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F): + $utf8 .= $chrs{$c}; + break; + + case ($ord_chrs_c & 0xE0) == 0xC0: + // characters U-00000080 - U-000007FF, mask 110XXXXX + //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= $this->substr8($chrs, $c, 2); + ++$c; + break; + + case ($ord_chrs_c & 0xF0) == 0xE0: + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= $this->substr8($chrs, $c, 3); + $c += 2; + break; + + case ($ord_chrs_c & 0xF8) == 0xF0: + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= $this->substr8($chrs, $c, 4); + $c += 3; + break; + + case ($ord_chrs_c & 0xFC) == 0xF8: + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= $this->substr8($chrs, $c, 5); + $c += 4; + break; + + case ($ord_chrs_c & 0xFE) == 0xFC: + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= $this->substr8($chrs, $c, 6); + $c += 5; + break; + + } + + } + + return $utf8; + + } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { + // array, or object notation + + if ($str{0} == '[') { + $stk = array(SERVICES_JSON_IN_ARR); + $arr = array(); + } else { + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $stk = array(SERVICES_JSON_IN_OBJ); + $obj = array(); + } else { + $stk = array(SERVICES_JSON_IN_OBJ); + $obj = new stdClass(); + } + } + + array_push($stk, array('what' => SERVICES_JSON_SLICE, + 'where' => 0, + 'delim' => false)); + + $chrs = $this->substr8($str, 1, -1); + $chrs = $this->reduce_string($chrs); + + if ($chrs == '') { + if (reset($stk) == SERVICES_JSON_IN_ARR) { + return $arr; + + } else { + return $obj; + + } + } + + //print("\nparsing {$chrs}\n"); + + $strlen_chrs = $this->strlen8($chrs); + + for ($c = 0; $c <= $strlen_chrs; ++$c) { + + $top = end($stk); + $substr_chrs_c_2 = $this->substr8($chrs, $c, 2); + + if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) { + // found a comma that is not inside a string, array, etc., + // OR we've reached the end of the character list + $slice = $this->substr8($chrs, $top['where'], ($c - $top['where'])); + array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false)); + //print("Found split at {$c}: ".$this->substr8($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + if (reset($stk) == SERVICES_JSON_IN_ARR) { + // we are in an array, so just push an element onto the stack + array_push($arr, $this->decode($slice)); + + } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { + // we are in an object, so figure + // out the property name and set an + // element in an associative array, + // for now + $parts = array(); + + if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:/Uis', $slice, $parts)) { + // "name":value pair + $key = $this->decode($parts[1]); + $val = $this->decode(trim(substr($slice, strlen($parts[0])), ", \t\n\r\0\x0B")); + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $obj[$key] = $val; + } else { + $obj->$key = $val; + } + } elseif (preg_match('/^\s*(\w+)\s*:/Uis', $slice, $parts)) { + // name:value pair, where name is unquoted + $key = $parts[1]; + $val = $this->decode(trim(substr($slice, strlen($parts[0])), ", \t\n\r\0\x0B")); + + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $obj[$key] = $val; + } else { + $obj->$key = $val; + } + } + + } + + } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) { + // found a quote, and we are not inside a string + array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c})); + //print("Found start of string at {$c}\n"); + + } elseif (($chrs{$c} == $top['delim']) && + ($top['what'] == SERVICES_JSON_IN_STR) && + (($this->strlen8($this->substr8($chrs, 0, $c)) - $this->strlen8(rtrim($this->substr8($chrs, 0, $c), '\\'))) % 2 != 1)) { + // found a quote, we're in a string, and it's not escaped + // we know that it's not escaped becase there is _not_ an + // odd number of backslashes at the end of the string so far + array_pop($stk); + //print("Found end of string at {$c}: ".$this->substr8($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n"); + + } elseif (($chrs{$c} == '[') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a left-bracket, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); + //print("Found start of array at {$c}\n"); + + } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) { + // found a right-bracket, and we're in an array + array_pop($stk); + //print("Found end of array at {$c}: ".$this->substr8($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } elseif (($chrs{$c} == '{') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a left-brace, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); + //print("Found start of object at {$c}\n"); + + } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) { + // found a right-brace, and we're in an object + array_pop($stk); + //print("Found end of object at {$c}: ".$this->substr8($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } elseif (($substr_chrs_c_2 == '/*') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a comment start, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false)); + $c++; + //print("Found start of comment at {$c}\n"); + + } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) { + // found a comment end, and we're in one now + array_pop($stk); + $c++; + + for ($i = $top['where']; $i <= $c; ++$i) + $chrs = substr_replace($chrs, ' ', $i, 1); + + //print("Found end of comment at {$c}: ".$this->substr8($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } + + } + + if (reset($stk) == SERVICES_JSON_IN_ARR) { + return $arr; + + } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { + return $obj; + + } + + } + } + } + + /** + * @todo Ultimately, this should just call PEAR::isError() + */ + function isError($data, $code = null) + { + if (class_exists('pear')) { + return PEAR::isError($data, $code); + } elseif (is_object($data) && (get_class($data) == 'services_json_error' || + is_subclass_of($data, 'services_json_error'))) { + return true; + } + + return false; + } + + /** + * Calculates length of string in bytes + * @param string + * @return integer length + */ + function strlen8( $str ) + { + if ( $this->_mb_strlen ) { + return mb_strlen( $str, "8bit" ); + } + return strlen( $str ); + } + + /** + * Returns part of a string, interpreting $start and $length as number of bytes. + * @param string + * @param integer start + * @param integer length + * @return integer length + */ + function substr8( $string, $start, $length=false ) + { + if ( $length === false ) { + $length = $this->strlen8( $string ) - $start; + } + if ( $this->_mb_substr ) { + return mb_substr( $string, $start, $length, "8bit" ); + } + return substr( $string, $start, $length ); + } + +} + +if (class_exists('PEAR_Error')) { + + class Services_JSON_Error extends PEAR_Error + { + function Services_JSON_Error($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + parent::PEAR_Error($message, $code, $mode, $options, $userinfo); + } + } + +} else { + + /** + * @todo Ultimately, this class shall be descended from PEAR_Error + */ + class Services_JSON_Error + { + function Services_JSON_Error($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + + } + } + +} + +endif; diff --git a/src/wp-includes/class-oembed.php b/src/wp-includes/class-oembed.php new file mode 100644 index 0000000..00d4420 --- /dev/null +++ b/src/wp-includes/class-oembed.php @@ -0,0 +1,397 @@ +<?php +/** + * API for fetching the HTML to embed remote content based on a provided URL. + * Used internally by the {@link WP_Embed} class, but is designed to be generic. + * + * @link http://codex.wordpress.org/oEmbed oEmbed Codex Article + * @link http://oembed.com/ oEmbed Homepage + * + * @package WordPress + * @subpackage oEmbed + */ + +/** + * oEmbed class. + * + * @package WordPress + * @subpackage oEmbed + * @since 2.9.0 + */ +class WP_oEmbed { + var $providers = array(); + + /** + * Constructor + * + * @uses apply_filters() Filters a list of pre-defined oEmbed providers. + */ + function __construct() { + $providers = array( + '#https?://(www\.)?youtube\.com/watch.*#i' => array( 'http://www.youtube.com/oembed', true ), + 'http://youtu.be/*' => array( 'http://www.youtube.com/oembed', false ), + 'http://blip.tv/*' => array( 'http://blip.tv/oembed/', false ), + '#https?://(www\.)?vimeo\.com/.*#i' => array( 'http://vimeo.com/api/oembed.{format}', true ), + '#https?://(www\.)?dailymotion\.com/.*#i' => array( 'http://www.dailymotion.com/services/oembed', true ), + 'http://dai.ly/*' => array( 'http://www.dailymotion.com/services/oembed', false ), + '#https?://(www\.)?flickr\.com/.*#i' => array( 'http://www.flickr.com/services/oembed/', true ), + 'http://flic.kr/*' => array( 'http://www.flickr.com/services/oembed/', false ), + '#https?://(.+\.)?smugmug\.com/.*#i' => array( 'http://api.smugmug.com/services/oembed/', true ), + '#https?://(www\.)?hulu\.com/watch/.*#i' => array( 'http://www.hulu.com/api/oembed.{format}', true ), + '#https?://(www\.)?viddler\.com/.*#i' => array( 'http://lab.viddler.com/services/oembed/', true ), + 'http://qik.com/*' => array( 'http://qik.com/api/oembed.{format}', false ), + 'http://revision3.com/*' => array( 'http://revision3.com/api/oembed/', false ), + 'http://i*.photobucket.com/albums/*' => array( 'http://photobucket.com/oembed', false ), + 'http://gi*.photobucket.com/groups/*' => array( 'http://photobucket.com/oembed', false ), + '#https?://(www\.)?scribd\.com/.*#i' => array( 'http://www.scribd.com/services/oembed', true ), + 'http://wordpress.tv/*' => array( 'http://wordpress.tv/oembed/', false ), + '#https?://(.+\.)?polldaddy\.com/.*#i' => array( 'http://polldaddy.com/oembed/', true ), + '#https?://(www\.)?funnyordie\.com/videos/.*#i' => array( 'http://www.funnyordie.com/oembed', true ), + '#https?://(www\.)?twitter\.com/.+?/status(es)?/.*#i'=> array( 'https://api.twitter.com/1/statuses/oembed.{format}', true ), + '#https?://(www\.)?soundcloud\.com/.*#i' => array( 'http://soundcloud.com/oembed', true ), + '#https?://(www\.)?slideshare\.net/*#' => array( 'http://www.slideshare.net/api/oembed/2', true ), + '#http://instagr(\.am|am\.com)/p/.*#i' => array( 'http://api.instagram.com/oembed', true ), + '#https?://(www\.)?rdio\.com/.*#i' => array( 'http://www.rdio.com/api/oembed/', true ), + '#https?://rd\.io/x/.*#i' => array( 'http://www.rdio.com/api/oembed/', true ), + '#https?://(open|play)\.spotify\.com/.*#i' => array( 'https://embed.spotify.com/oembed/', true ), + ); + /** + * Filter the list of oEmbed providers. + * + * Discovery is disabled for users lacking the unfiltered_html capability. + * Only providers in this array will be used for those users. + * + * @see wp_oembed_add_provider() + * + * @since 2.9.0 + * + * @param array $providers An array of popular oEmbed providers. + */ + $this->providers = apply_filters( 'oembed_providers', $providers ); + + // Fix any embeds that contain new lines in the middle of the HTML which breaks wpautop(). + add_filter( 'oembed_dataparse', array($this, '_strip_newlines'), 10, 3 ); + } + + /** + * The do-it-all function that takes a URL and attempts to return the HTML. + * + * @see WP_oEmbed::discover() + * @see WP_oEmbed::fetch() + * @see WP_oEmbed::data2html() + * + * @param string $url The URL to the content that should be attempted to be embedded. + * @param array $args Optional arguments. Usually passed from a shortcode. + * @return bool|string False on failure, otherwise the UNSANITIZED (and potentially unsafe) HTML that should be used to embed. + */ + function get_html( $url, $args = '' ) { + $provider = false; + + if ( !isset($args['discover']) ) + $args['discover'] = true; + + foreach ( $this->providers as $matchmask => $data ) { + list( $providerurl, $regex ) = $data; + + // Turn the asterisk-type provider URLs into regex + if ( !$regex ) { + $matchmask = '#' . str_replace( '___wildcard___', '(.+)', preg_quote( str_replace( '*', '___wildcard___', $matchmask ), '#' ) ) . '#i'; + $matchmask = preg_replace( '|^#http\\\://|', '#https?\://', $matchmask ); + } + + if ( preg_match( $matchmask, $url ) ) { + $provider = str_replace( '{format}', 'json', $providerurl ); // JSON is easier to deal with than XML + break; + } + } + + if ( !$provider && $args['discover'] ) + $provider = $this->discover( $url ); + + if ( !$provider || false === $data = $this->fetch( $provider, $url, $args ) ) + return false; + + /** + * Filter the HTML returned by the oEmbed provider. + * + * @since 2.9.0 + * + * @param string $data The returned oEmbed HTML. + * @param string $url URL of the content to be embedded. + * @param array $args Optional arguments, usually passed from a shortcode. + */ + return apply_filters( 'oembed_result', $this->data2html( $data, $url ), $url, $args ); + } + + /** + * Attempts to find oEmbed provider discovery <link> tags at the given URL. + * + * @param string $url The URL that should be inspected for discovery <link> tags. + * @return bool|string False on failure, otherwise the oEmbed provider URL. + */ + function discover( $url ) { + $providers = array(); + + // Fetch URL content + if ( $html = wp_remote_retrieve_body( wp_safe_remote_get( $url ) ) ) { + + /** + * Filter the link types that contain oEmbed provider URLs. + * + * @since 2.9.0 + * + * @param array $format Array of oEmbed link types. Accepts 'application/json+oembed', + * 'text/xml+oembed', and 'application/xml+oembed' (incorrect, + * used by at least Vimeo). + */ + $linktypes = apply_filters( 'oembed_linktypes', array( + 'application/json+oembed' => 'json', + 'text/xml+oembed' => 'xml', + 'application/xml+oembed' => 'xml', + ) ); + + // Strip <body> + $html = substr( $html, 0, stripos( $html, '</head>' ) ); + + // Do a quick check + $tagfound = false; + foreach ( $linktypes as $linktype => $format ) { + if ( stripos($html, $linktype) ) { + $tagfound = true; + break; + } + } + + if ( $tagfound && preg_match_all( '/<link([^<>]+)>/i', $html, $links ) ) { + foreach ( $links[1] as $link ) { + $atts = shortcode_parse_atts( $link ); + + if ( !empty($atts['type']) && !empty($linktypes[$atts['type']]) && !empty($atts['href']) ) { + $providers[$linktypes[$atts['type']]] = $atts['href']; + + // Stop here if it's JSON (that's all we need) + if ( 'json' == $linktypes[$atts['type']] ) + break; + } + } + } + } + + // JSON is preferred to XML + if ( !empty($providers['json']) ) + return $providers['json']; + elseif ( !empty($providers['xml']) ) + return $providers['xml']; + else + return false; + } + + /** + * Connects to a oEmbed provider and returns the result. + * + * @param string $provider The URL to the oEmbed provider. + * @param string $url The URL to the content that is desired to be embedded. + * @param array $args Optional arguments. Usually passed from a shortcode. + * @return bool|object False on failure, otherwise the result in the form of an object. + */ + function fetch( $provider, $url, $args = '' ) { + $args = wp_parse_args( $args, wp_embed_defaults() ); + + $provider = add_query_arg( 'maxwidth', (int) $args['width'], $provider ); + $provider = add_query_arg( 'maxheight', (int) $args['height'], $provider ); + $provider = add_query_arg( 'url', urlencode($url), $provider ); + + /** + * Filter the oEmbed URL to be fetched. + * + * @since 2.9.0 + * + * @param string $provider URL of the oEmbed provider. + * @param string $url URL of the content to be embedded. + * @param array $args Optional arguments, usually passed from a shortcode. + */ + $provider = apply_filters( 'oembed_fetch_url', $provider, $url, $args ); + + foreach( array( 'json', 'xml' ) as $format ) { + $result = $this->_fetch_with_format( $provider, $format ); + if ( is_wp_error( $result ) && 'not-implemented' == $result->get_error_code() ) + continue; + return ( $result && ! is_wp_error( $result ) ) ? $result : false; + } + return false; + } + + /** + * Fetches result from an oEmbed provider for a specific format and complete provider URL + * + * @since 3.0.0 + * @access private + * @param string $provider_url_with_args URL to the provider with full arguments list (url, maxheight, etc.) + * @param string $format Format to use + * @return bool|object False on failure, otherwise the result in the form of an object. + */ + function _fetch_with_format( $provider_url_with_args, $format ) { + $provider_url_with_args = add_query_arg( 'format', $format, $provider_url_with_args ); + $response = wp_safe_remote_get( $provider_url_with_args ); + if ( 501 == wp_remote_retrieve_response_code( $response ) ) + return new WP_Error( 'not-implemented' ); + if ( ! $body = wp_remote_retrieve_body( $response ) ) + return false; + $parse_method = "_parse_$format"; + return $this->$parse_method( $body ); + } + + /** + * Parses a json response body. + * + * @since 3.0.0 + * @access private + */ + function _parse_json( $response_body ) { + return ( ( $data = json_decode( trim( $response_body ) ) ) && is_object( $data ) ) ? $data : false; + } + + /** + * Parses an XML response body. + * + * @since 3.0.0 + * @access private + */ + function _parse_xml( $response_body ) { + if ( ! function_exists( 'libxml_disable_entity_loader' ) ) + return false; + + $loader = libxml_disable_entity_loader( true ); + $errors = libxml_use_internal_errors( true ); + + $return = $this->_parse_xml_body( $response_body ); + + libxml_use_internal_errors( $errors ); + libxml_disable_entity_loader( $loader ); + + return $return; + } + + /** + * Helper function for parsing an XML response body. + * + * @since 3.6.0 + * @access private + */ + private function _parse_xml_body( $response_body ) { + if ( ! function_exists( 'simplexml_import_dom' ) || ! class_exists( 'DOMDocument' ) ) + return false; + + $dom = new DOMDocument; + $success = $dom->loadXML( $response_body ); + if ( ! $success ) + return false; + + if ( isset( $dom->doctype ) ) + return false; + + foreach ( $dom->childNodes as $child ) { + if ( XML_DOCUMENT_TYPE_NODE === $child->nodeType ) + return false; + } + + $xml = simplexml_import_dom( $dom ); + if ( ! $xml ) + return false; + + $return = new stdClass; + foreach ( $xml as $key => $value ) { + $return->$key = (string) $value; + } + + return $return; + } + + /** + * Converts a data object from {@link WP_oEmbed::fetch()} and returns the HTML. + * + * @param object $data A data object result from an oEmbed provider. + * @param string $url The URL to the content that is desired to be embedded. + * @return bool|string False on error, otherwise the HTML needed to embed. + */ + function data2html( $data, $url ) { + if ( ! is_object( $data ) || empty( $data->type ) ) + return false; + + $return = false; + + switch ( $data->type ) { + case 'photo': + if ( empty( $data->url ) || empty( $data->width ) || empty( $data->height ) ) + break; + if ( ! is_string( $data->url ) || ! is_numeric( $data->width ) || ! is_numeric( $data->height ) ) + break; + + $title = ! empty( $data->title ) && is_string( $data->title ) ? $data->title : ''; + $return = '<a href="' . esc_url( $url ) . '"><img src="' . esc_url( $data->url ) . '" alt="' . esc_attr($title) . '" width="' . esc_attr($data->width) . '" height="' . esc_attr($data->height) . '" /></a>'; + break; + + case 'video': + case 'rich': + if ( ! empty( $data->html ) && is_string( $data->html ) ) + $return = $data->html; + break; + + case 'link': + if ( ! empty( $data->title ) && is_string( $data->title ) ) + $return = '<a href="' . esc_url( $url ) . '">' . esc_html( $data->title ) . '</a>'; + break; + + default: + $return = false; + } + + /** + * Filter the returned oEmbed HTML. + * + * Use this filter to add support for custom data types, or to filter the result. + * + * @since 2.9.0 + * + * @param string $return The returned oEmbed HTML. + * @param object $data A data object result from an oEmbed provider. + * @param string $url The URL of the content to be embedded. + */ + return apply_filters( 'oembed_dataparse', $return, $data, $url ); + } + + /** + * Strip any new lines from the HTML. + * + * @access private + * @param string $html Existing HTML. + * @param object $data Data object from WP_oEmbed::data2html() + * @param string $url The original URL passed to oEmbed. + * @return string Possibly modified $html + */ + function _strip_newlines( $html, $data, $url ) { + if ( false !== strpos( $html, "\n" ) ) + $html = str_replace( array( "\r\n", "\n" ), '', $html ); + + return $html; + } +} + +/** + * Returns the initialized {@link WP_oEmbed} object + * + * @since 2.9.0 + * @access private + * + * @see WP_oEmbed + * @uses WP_oEmbed + * + * @return WP_oEmbed object. + */ +function _wp_oembed_get_object() { + static $wp_oembed; + + if ( is_null($wp_oembed) ) + $wp_oembed = new WP_oEmbed(); + + return $wp_oembed; +} diff --git a/src/wp-includes/class-phpass.php b/src/wp-includes/class-phpass.php new file mode 100644 index 0000000..2fed5d7 --- /dev/null +++ b/src/wp-includes/class-phpass.php @@ -0,0 +1,260 @@ +<?php +/** + * Portable PHP password hashing framework. + * @package phpass + * @since 2.5 + * @version 0.3 / WordPress + * @link http://www.openwall.com/phpass/ + */ + +# +# Written by Solar Designer <solar at openwall.com> in 2004-2006 and placed in +# the public domain. Revised in subsequent years, still public domain. +# +# There's absolutely no warranty. +# +# Please be sure to update the Version line if you edit this file in any way. +# It is suggested that you leave the main version number intact, but indicate +# your project name (after the slash) and add your own revision information. +# +# Please do not change the "private" password hashing method implemented in +# here, thereby making your hashes incompatible. However, if you must, please +# change the hash type identifier (the "$P$") to something different. +# +# Obviously, since this code is in the public domain, the above are not +# requirements (there can be none), but merely suggestions. +# + +/** + * Portable PHP password hashing framework. + * + * @package phpass + * @version 0.3 / WordPress + * @link http://www.openwall.com/phpass/ + * @since 2.5 + */ +class PasswordHash { + var $itoa64; + var $iteration_count_log2; + var $portable_hashes; + var $random_state; + + function PasswordHash($iteration_count_log2, $portable_hashes) + { + $this->itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; + + if ($iteration_count_log2 < 4 || $iteration_count_log2 > 31) + $iteration_count_log2 = 8; + $this->iteration_count_log2 = $iteration_count_log2; + + $this->portable_hashes = $portable_hashes; + + $this->random_state = microtime() . uniqid(rand(), TRUE); // removed getmypid() for compatibility reasons + } + + function get_random_bytes($count) + { + $output = ''; + if ( @is_readable('/dev/urandom') && + ($fh = @fopen('/dev/urandom', 'rb'))) { + $output = fread($fh, $count); + fclose($fh); + } + + if (strlen($output) < $count) { + $output = ''; + for ($i = 0; $i < $count; $i += 16) { + $this->random_state = + md5(microtime() . $this->random_state); + $output .= + pack('H*', md5($this->random_state)); + } + $output = substr($output, 0, $count); + } + + return $output; + } + + function encode64($input, $count) + { + $output = ''; + $i = 0; + do { + $value = ord($input[$i++]); + $output .= $this->itoa64[$value & 0x3f]; + if ($i < $count) + $value |= ord($input[$i]) << 8; + $output .= $this->itoa64[($value >> 6) & 0x3f]; + if ($i++ >= $count) + break; + if ($i < $count) + $value |= ord($input[$i]) << 16; + $output .= $this->itoa64[($value >> 12) & 0x3f]; + if ($i++ >= $count) + break; + $output .= $this->itoa64[($value >> 18) & 0x3f]; + } while ($i < $count); + + return $output; + } + + function gensalt_private($input) + { + $output = '$P$'; + $output .= $this->itoa64[min($this->iteration_count_log2 + + ((PHP_VERSION >= '5') ? 5 : 3), 30)]; + $output .= $this->encode64($input, 6); + + return $output; + } + + function crypt_private($password, $setting) + { + $output = '*0'; + if (substr($setting, 0, 2) == $output) + $output = '*1'; + + $id = substr($setting, 0, 3); + # We use "$P$", phpBB3 uses "$H$" for the same thing + if ($id != '$P$' && $id != '$H$') + return $output; + + $count_log2 = strpos($this->itoa64, $setting[3]); + if ($count_log2 < 7 || $count_log2 > 30) + return $output; + + $count = 1 << $count_log2; + + $salt = substr($setting, 4, 8); + if (strlen($salt) != 8) + return $output; + + # We're kind of forced to use MD5 here since it's the only + # cryptographic primitive available in all versions of PHP + # currently in use. To implement our own low-level crypto + # in PHP would result in much worse performance and + # consequently in lower iteration counts and hashes that are + # quicker to crack (by non-PHP code). + if (PHP_VERSION >= '5') { + $hash = md5($salt . $password, TRUE); + do { + $hash = md5($hash . $password, TRUE); + } while (--$count); + } else { + $hash = pack('H*', md5($salt . $password)); + do { + $hash = pack('H*', md5($hash . $password)); + } while (--$count); + } + + $output = substr($setting, 0, 12); + $output .= $this->encode64($hash, 16); + + return $output; + } + + function gensalt_extended($input) + { + $count_log2 = min($this->iteration_count_log2 + 8, 24); + # This should be odd to not reveal weak DES keys, and the + # maximum valid value is (2**24 - 1) which is odd anyway. + $count = (1 << $count_log2) - 1; + + $output = '_'; + $output .= $this->itoa64[$count & 0x3f]; + $output .= $this->itoa64[($count >> 6) & 0x3f]; + $output .= $this->itoa64[($count >> 12) & 0x3f]; + $output .= $this->itoa64[($count >> 18) & 0x3f]; + + $output .= $this->encode64($input, 3); + + return $output; + } + + function gensalt_blowfish($input) + { + # This one needs to use a different order of characters and a + # different encoding scheme from the one in encode64() above. + # We care because the last character in our encoded string will + # only represent 2 bits. While two known implementations of + # bcrypt will happily accept and correct a salt string which + # has the 4 unused bits set to non-zero, we do not want to take + # chances and we also do not want to waste an additional byte + # of entropy. + $itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + + $output = '$2a$'; + $output .= chr(ord('0') + $this->iteration_count_log2 / 10); + $output .= chr(ord('0') + $this->iteration_count_log2 % 10); + $output .= '$'; + + $i = 0; + do { + $c1 = ord($input[$i++]); + $output .= $itoa64[$c1 >> 2]; + $c1 = ($c1 & 0x03) << 4; + if ($i >= 16) { + $output .= $itoa64[$c1]; + break; + } + + $c2 = ord($input[$i++]); + $c1 |= $c2 >> 4; + $output .= $itoa64[$c1]; + $c1 = ($c2 & 0x0f) << 2; + + $c2 = ord($input[$i++]); + $c1 |= $c2 >> 6; + $output .= $itoa64[$c1]; + $output .= $itoa64[$c2 & 0x3f]; + } while (1); + + return $output; + } + + function HashPassword($password) + { + $random = ''; + + if (CRYPT_BLOWFISH == 1 && !$this->portable_hashes) { + $random = $this->get_random_bytes(16); + $hash = + crypt($password, $this->gensalt_blowfish($random)); + if (strlen($hash) == 60) + return $hash; + } + + if (CRYPT_EXT_DES == 1 && !$this->portable_hashes) { + if (strlen($random) < 3) + $random = $this->get_random_bytes(3); + $hash = + crypt($password, $this->gensalt_extended($random)); + if (strlen($hash) == 20) + return $hash; + } + + if (strlen($random) < 6) + $random = $this->get_random_bytes(6); + $hash = + $this->crypt_private($password, + $this->gensalt_private($random)); + if (strlen($hash) == 34) + return $hash; + + # Returning '*' on error is safe here, but would _not_ be safe + # in a crypt(3)-like function used _both_ for generating new + # hashes and for validating passwords against existing hashes. + return '*'; + } + + function CheckPassword($password, $stored_hash) + { + $hash = $this->crypt_private($password, $stored_hash); + if ($hash[0] == '*') + $hash = crypt($password, $stored_hash); + + return $hash === $stored_hash; + } +} + +?> diff --git a/src/wp-includes/class-phpmailer.php b/src/wp-includes/class-phpmailer.php new file mode 100644 index 0000000..238474e --- /dev/null +++ b/src/wp-includes/class-phpmailer.php @@ -0,0 +1,2826 @@ +<?php +/*~ class.phpmailer.php +.---------------------------------------------------------------------------. +| Software: PHPMailer - PHP email class | +| Version: 5.2.4 | +| Site: https://code.google.com/a/apache-extras.org/p/phpmailer/ | +| ------------------------------------------------------------------------- | +| Admin: Jim Jagielski (project admininistrator) | +| Authors: Andy Prevost (codeworxtech) codeworxtech@users.sourceforge.net | +| : Marcus Bointon (coolbru) coolbru@users.sourceforge.net | +| : Jim Jagielski (jimjag) jimjag@gmail.com | +| Founder: Brent R. Matzelle (original founder) | +| Copyright (c) 2010-2012, Jim Jagielski. All Rights Reserved. | +| Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved. | +| Copyright (c) 2001-2003, Brent R. Matzelle | +| ------------------------------------------------------------------------- | +| License: Distributed under the Lesser General Public License (LGPL) | +| http://www.gnu.org/copyleft/lesser.html | +| This program is distributed in the hope that it will be useful - WITHOUT | +| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | +| FITNESS FOR A PARTICULAR PURPOSE. | +'---------------------------------------------------------------------------' +*/ + +/** + * PHPMailer - PHP email creation and transport class + * NOTE: Requires PHP version 5 or later + * @package PHPMailer + * @author Andy Prevost + * @author Marcus Bointon + * @author Jim Jagielski + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + */ + +if (version_compare(PHP_VERSION, '5.0.0', '<') ) exit("Sorry, this version of PHPMailer will only run on PHP version 5 or greater!\n"); + +/** + * PHP email creation and transport class + * @package PHPMailer + */ +class PHPMailer { + + ///////////////////////////////////////////////// + // PROPERTIES, PUBLIC + ///////////////////////////////////////////////// + + /** + * Email priority (1 = High, 3 = Normal, 5 = low). + * @var int + */ + public $Priority = 3; + + /** + * Sets the CharSet of the message. + * @var string + */ + public $CharSet = 'iso-8859-1'; + + /** + * Sets the Content-type of the message. + * @var string + */ + public $ContentType = 'text/plain'; + + /** + * Sets the Encoding of the message. Options for this are + * "8bit", "7bit", "binary", "base64", and "quoted-printable". + * @var string + */ + public $Encoding = '8bit'; + + /** + * Holds the most recent mailer error message. + * @var string + */ + public $ErrorInfo = ''; + + /** + * Sets the From email address for the message. + * @var string + */ + public $From = 'root@localhost'; + + /** + * Sets the From name of the message. + * @var string + */ + public $FromName = 'Root User'; + + /** + * Sets the Sender email (Return-Path) of the message. If not empty, + * will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode. + * @var string + */ + public $Sender = ''; + + /** + * Sets the Return-Path of the message. If empty, it will + * be set to either From or Sender. + * @var string + */ + public $ReturnPath = ''; + + /** + * Sets the Subject of the message. + * @var string + */ + public $Subject = ''; + + /** + * Sets the Body of the message. This can be either an HTML or text body. + * If HTML then run IsHTML(true). + * @var string + */ + public $Body = ''; + + /** + * Sets the text-only body of the message. This automatically sets the + * email to multipart/alternative. This body can be read by mail + * clients that do not have HTML email capability such as mutt. Clients + * that can read HTML will view the normal Body. + * @var string + */ + public $AltBody = ''; + + /** + * Stores the complete compiled MIME message body. + * @var string + * @access protected + */ + protected $MIMEBody = ''; + + /** + * Stores the complete compiled MIME message headers. + * @var string + * @access protected + */ + protected $MIMEHeader = ''; + + /** + * Stores the extra header list which CreateHeader() doesn't fold in + * @var string + * @access protected + */ + protected $mailHeader = ''; + + /** + * Sets word wrapping on the body of the message to a given number of + * characters. + * @var int + */ + public $WordWrap = 0; + + /** + * Method to send mail: ("mail", "sendmail", or "smtp"). + * @var string + */ + public $Mailer = 'mail'; + + /** + * Sets the path of the sendmail program. + * @var string + */ + public $Sendmail = '/usr/sbin/sendmail'; + + /** + * Determine if mail() uses a fully sendmail compatible MTA that + * supports sendmail's "-oi -f" options + * @var boolean + */ + public $UseSendmailOptions = true; + + /** + * Path to PHPMailer plugins. Useful if the SMTP class + * is in a different directory than the PHP include path. + * @var string + */ + public $PluginDir = ''; + + /** + * Sets the email address that a reading confirmation will be sent. + * @var string + */ + public $ConfirmReadingTo = ''; + + /** + * Sets the hostname to use in Message-Id and Received headers + * and as default HELO string. If empty, the value returned + * by SERVER_NAME is used or 'localhost.localdomain'. + * @var string + */ + public $Hostname = ''; + + /** + * Sets the message ID to be used in the Message-Id header. + * If empty, a unique id will be generated. + * @var string + */ + public $MessageID = ''; + + /** + * Sets the message Date to be used in the Date header. + * If empty, the current date will be added. + * @var string + */ + public $MessageDate = ''; + + ///////////////////////////////////////////////// + // PROPERTIES FOR SMTP + ///////////////////////////////////////////////// + + /** + * Sets the SMTP hosts. + * + * All hosts must be separated by a + * semicolon. You can also specify a different port + * for each host by using this format: [hostname:port] + * (e.g. "smtp1.example.com:25;smtp2.example.com"). + * Hosts will be tried in order. + * @var string + */ + public $Host = 'localhost'; + + /** + * Sets the default SMTP server port. + * @var int + */ + public $Port = 25; + + /** + * Sets the SMTP HELO of the message (Default is $Hostname). + * @var string + */ + public $Helo = ''; + + /** + * Sets connection prefix. Options are "", "ssl" or "tls" + * @var string + */ + public $SMTPSecure = ''; + + /** + * Sets SMTP authentication. Utilizes the Username and Password variables. + * @var bool + */ + public $SMTPAuth = false; + + /** + * Sets SMTP username. + * @var string + */ + public $Username = ''; + + /** + * Sets SMTP password. + * @var string + */ + public $Password = ''; + + /** + * Sets SMTP auth type. Options are LOGIN | PLAIN | NTLM (default LOGIN) + * @var string + */ + public $AuthType = ''; + + /** + * Sets SMTP realm. + * @var string + */ + public $Realm = ''; + + /** + * Sets SMTP workstation. + * @var string + */ + public $Workstation = ''; + + /** + * Sets the SMTP server timeout in seconds. + * This function will not work with the win32 version. + * @var int + */ + public $Timeout = 10; + + /** + * Sets SMTP class debugging on or off. + * @var bool + */ + public $SMTPDebug = false; + + /** + * Sets the function/method to use for debugging output. + * Right now we only honor "echo" or "error_log" + * @var string + */ + public $Debugoutput = "echo"; + + /** + * Prevents the SMTP connection from being closed after each mail + * sending. If this is set to true then to close the connection + * requires an explicit call to SmtpClose(). + * @var bool + */ + public $SMTPKeepAlive = false; + + /** + * Provides the ability to have the TO field process individual + * emails, instead of sending to entire TO addresses + * @var bool + */ + public $SingleTo = false; + + /** + * If SingleTo is true, this provides the array to hold the email addresses + * @var bool + */ + public $SingleToArray = array(); + + /** + * Provides the ability to change the generic line ending + * NOTE: The default remains '\n'. We force CRLF where we KNOW + * it must be used via self::CRLF + * @var string + */ + public $LE = "\n"; + + /** + * Used with DKIM Signing + * required parameter if DKIM is enabled + * + * domain selector example domainkey + * @var string + */ + public $DKIM_selector = ''; + + /** + * Used with DKIM Signing + * required if DKIM is enabled, in format of email address 'you@yourdomain.com' typically used as the source of the email + * @var string + */ + public $DKIM_identity = ''; + + /** + * Used with DKIM Signing + * optional parameter if your private key requires a passphras + * @var string + */ + public $DKIM_passphrase = ''; + + /** + * Used with DKIM Singing + * required if DKIM is enabled, in format of email address 'domain.com' + * @var string + */ + public $DKIM_domain = ''; + + /** + * Used with DKIM Signing + * required if DKIM is enabled, path to private key file + * @var string + */ + public $DKIM_private = ''; + + /** + * Callback Action function name. + * The function that handles the result of the send email action. + * It is called out by Send() for each email sent. + * + * Value can be: + * - 'function_name' for function names + * - 'Class::Method' for static method calls + * - array($object, 'Method') for calling methods on $object + * See http://php.net/is_callable manual page for more details. + * + * Parameters: + * bool $result result of the send action + * string $to email address of the recipient + * string $cc cc email addresses + * string $bcc bcc email addresses + * string $subject the subject + * string $body the email body + * string $from email address of sender + * @var string + */ + public $action_function = ''; //'callbackAction'; + + /** + * Sets the PHPMailer Version number + * @var string + */ + public $Version = '5.2.4'; + + /** + * What to use in the X-Mailer header + * @var string NULL for default, whitespace for None, or actual string to use + */ + public $XMailer = ''; + + ///////////////////////////////////////////////// + // PROPERTIES, PRIVATE AND PROTECTED + ///////////////////////////////////////////////// + + /** + * @var SMTP An instance of the SMTP sender class + * @access protected + */ + protected $smtp = null; + /** + * @var array An array of 'to' addresses + * @access protected + */ + protected $to = array(); + /** + * @var array An array of 'cc' addresses + * @access protected + */ + protected $cc = array(); + /** + * @var array An array of 'bcc' addresses + * @access protected + */ + protected $bcc = array(); + /** + * @var array An array of reply-to name and address + * @access protected + */ + protected $ReplyTo = array(); + /** + * @var array An array of all kinds of addresses: to, cc, bcc, replyto + * @access protected + */ + protected $all_recipients = array(); + /** + * @var array An array of attachments + * @access protected + */ + protected $attachment = array(); + /** + * @var array An array of custom headers + * @access protected + */ + protected $CustomHeader = array(); + /** + * @var string The message's MIME type + * @access protected + */ + protected $message_type = ''; + /** + * @var array An array of MIME boundary strings + * @access protected + */ + protected $boundary = array(); + /** + * @var array An array of available languages + * @access protected + */ + protected $language = array(); + /** + * @var integer The number of errors encountered + * @access protected + */ + protected $error_count = 0; + /** + * @var string The filename of a DKIM certificate file + * @access protected + */ + protected $sign_cert_file = ''; + /** + * @var string The filename of a DKIM key file + * @access protected + */ + protected $sign_key_file = ''; + /** + * @var string The password of a DKIM key + * @access protected + */ + protected $sign_key_pass = ''; + /** + * @var boolean Whether to throw exceptions for errors + * @access protected + */ + protected $exceptions = false; + + ///////////////////////////////////////////////// + // CONSTANTS + ///////////////////////////////////////////////// + + const STOP_MESSAGE = 0; // message only, continue processing + const STOP_CONTINUE = 1; // message?, likely ok to continue processing + const STOP_CRITICAL = 2; // message, plus full stop, critical error reached + const CRLF = "\r\n"; // SMTP RFC specified EOL + + ///////////////////////////////////////////////// + // METHODS, VARIABLES + ///////////////////////////////////////////////// + + /** + * Calls actual mail() function, but in a safe_mode aware fashion + * Also, unless sendmail_path points to sendmail (or something that + * claims to be sendmail), don't pass params (not a perfect fix, + * but it will do) + * @param string $to To + * @param string $subject Subject + * @param string $body Message Body + * @param string $header Additional Header(s) + * @param string $params Params + * @access private + * @return bool + */ + private function mail_passthru($to, $subject, $body, $header, $params) { + if ( ini_get('safe_mode') || !($this->UseSendmailOptions) ) { + $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($subject)), $body, $header); + } else { + $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($subject)), $body, $header, $params); + } + return $rt; + } + + /** + * Outputs debugging info via user-defined method + * @param string $str + */ + private function edebug($str) { + if ($this->Debugoutput == "error_log") { + error_log($str); + } else { + echo $str; + } + } + + /** + * Constructor + * @param boolean $exceptions Should we throw external exceptions? + */ + public function __construct($exceptions = false) { + $this->exceptions = ($exceptions == true); + } + + /** + * Sets message type to HTML. + * @param bool $ishtml + * @return void + */ + public function IsHTML($ishtml = true) { + if ($ishtml) { + $this->ContentType = 'text/html'; + } else { + $this->ContentType = 'text/plain'; + } + } + + /** + * Sets Mailer to send message using SMTP. + * @return void + */ + public function IsSMTP() { + $this->Mailer = 'smtp'; + } + + /** + * Sets Mailer to send message using PHP mail() function. + * @return void + */ + public function IsMail() { + $this->Mailer = 'mail'; + } + + /** + * Sets Mailer to send message using the $Sendmail program. + * @return void + */ + public function IsSendmail() { + if (!stristr(ini_get('sendmail_path'), 'sendmail')) { + $this->Sendmail = '/var/qmail/bin/sendmail'; + } + $this->Mailer = 'sendmail'; + } + + /** + * Sets Mailer to send message using the qmail MTA. + * @return void + */ + public function IsQmail() { + if (stristr(ini_get('sendmail_path'), 'qmail')) { + $this->Sendmail = '/var/qmail/bin/sendmail'; + } + $this->Mailer = 'sendmail'; + } + + ///////////////////////////////////////////////// + // METHODS, RECIPIENTS + ///////////////////////////////////////////////// + + /** + * Adds a "To" address. + * @param string $address + * @param string $name + * @return boolean true on success, false if address already used + */ + public function AddAddress($address, $name = '') { + return $this->AddAnAddress('to', $address, $name); + } + + /** + * Adds a "Cc" address. + * Note: this function works with the SMTP mailer on win32, not with the "mail" mailer. + * @param string $address + * @param string $name + * @return boolean true on success, false if address already used + */ + public function AddCC($address, $name = '') { + return $this->AddAnAddress('cc', $address, $name); + } + + /** + * Adds a "Bcc" address. + * Note: this function works with the SMTP mailer on win32, not with the "mail" mailer. + * @param string $address + * @param string $name + * @return boolean true on success, false if address already used + */ + public function AddBCC($address, $name = '') { + return $this->AddAnAddress('bcc', $address, $name); + } + + /** + * Adds a "Reply-to" address. + * @param string $address + * @param string $name + * @return boolean + */ + public function AddReplyTo($address, $name = '') { + return $this->AddAnAddress('Reply-To', $address, $name); + } + + /** + * Adds an address to one of the recipient arrays + * Addresses that have been added already return false, but do not throw exceptions + * @param string $kind One of 'to', 'cc', 'bcc', 'ReplyTo' + * @param string $address The email address to send to + * @param string $name + * @throws phpmailerException + * @return boolean true on success, false if address already used or invalid in some way + * @access protected + */ + protected function AddAnAddress($kind, $address, $name = '') { + if (!preg_match('/^(to|cc|bcc|Reply-To)$/', $kind)) { + $this->SetError($this->Lang('Invalid recipient array').': '.$kind); + if ($this->exceptions) { + throw new phpmailerException('Invalid recipient array: ' . $kind); + } + if ($this->SMTPDebug) { + $this->edebug($this->Lang('Invalid recipient array').': '.$kind); + } + return false; + } + $address = trim($address); + $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim + if (!$this->ValidateAddress($address)) { + $this->SetError($this->Lang('invalid_address').': '. $address); + if ($this->exceptions) { + throw new phpmailerException($this->Lang('invalid_address').': '.$address); + } + if ($this->SMTPDebug) { + $this->edebug($this->Lang('invalid_address').': '.$address); + } + return false; + } + if ($kind != 'Reply-To') { + if (!isset($this->all_recipients[strtolower($address)])) { + array_push($this->$kind, array($address, $name)); + $this->all_recipients[strtolower($address)] = true; + return true; + } + } else { + if (!array_key_exists(strtolower($address), $this->ReplyTo)) { + $this->ReplyTo[strtolower($address)] = array($address, $name); + return true; + } + } + return false; +} + +/** + * Set the From and FromName properties + * @param string $address + * @param string $name + * @param int $auto Also set Reply-To and Sender + * @throws phpmailerException + * @return boolean + */ + public function SetFrom($address, $name = '', $auto = 1) { + $address = trim($address); + $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim + if (!$this->ValidateAddress($address)) { + $this->SetError($this->Lang('invalid_address').': '. $address); + if ($this->exceptions) { + throw new phpmailerException($this->Lang('invalid_address').': '.$address); + } + if ($this->SMTPDebug) { + $this->edebug($this->Lang('invalid_address').': '.$address); + } + return false; + } + $this->From = $address; + $this->FromName = $name; + if ($auto) { + if (empty($this->ReplyTo)) { + $this->AddAnAddress('Reply-To', $address, $name); + } + if (empty($this->Sender)) { + $this->Sender = $address; + } + } + return true; + } + + /** + * Check that a string looks roughly like an email address should + * Static so it can be used without instantiation, public so people can overload + * Conforms to RFC5322: Uses *correct* regex on which FILTER_VALIDATE_EMAIL is + * based; So why not use FILTER_VALIDATE_EMAIL? Because it was broken to + * not allow a@b type valid addresses :( + * Some Versions of PHP break on the regex though, likely due to PCRE, so use + * the older validation method for those users. (http://php.net/manual/en/pcre.installation.php) + * @link http://squiloople.com/2009/12/20/email-address-validation/ + * @copyright regex Copyright Michael Rushton 2009-10 | http://squiloople.com/ | Feel free to use and redistribute this code. But please keep this copyright notice. + * @param string $address The email address to check + * @return boolean + * @static + * @access public + */ + public static function ValidateAddress($address) { + if ((defined('PCRE_VERSION')) && (version_compare(PCRE_VERSION, '8.0') >= 0)) { + return preg_match('/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)((?>(?>(?>((?>(?>(?>\x0D\x0A)?[ ])+|(?>[ ]*\x0D\x0A)?[ ]+)?)(\((?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}|(?!(?:.*[a-f0-9][:\]]){7,})((?6)(?>:(?6)){0,5})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:|(?!(?:.*[a-f0-9]:){5,})(?8)?::(?>((?6)(?>:(?6)){0,3}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD', $address); + } elseif (function_exists('filter_var')) { //Introduced in PHP 5.2 + if(filter_var($address, FILTER_VALIDATE_EMAIL) === FALSE) { + return false; + } else { + return true; + } + } else { + return preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $address); + } + } + + ///////////////////////////////////////////////// + // METHODS, MAIL SENDING + ///////////////////////////////////////////////// + + /** + * Creates message and assigns Mailer. If the message is + * not sent successfully then it returns false. Use the ErrorInfo + * variable to view description of the error. + * @throws phpmailerException + * @return bool + */ + public function Send() { + try { + if(!$this->PreSend()) return false; + return $this->PostSend(); + } catch (phpmailerException $e) { + $this->mailHeader = ''; + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + return false; + } + } + + /** + * Prep mail by constructing all message entities + * @throws phpmailerException + * @return bool + */ + public function PreSend() { + try { + $this->mailHeader = ""; + if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { + throw new phpmailerException($this->Lang('provide_address'), self::STOP_CRITICAL); + } + + // Set whether the message is multipart/alternative + if(!empty($this->AltBody)) { + $this->ContentType = 'multipart/alternative'; + } + + $this->error_count = 0; // reset errors + $this->SetMessageType(); + //Refuse to send an empty message + if (empty($this->Body)) { + throw new phpmailerException($this->Lang('empty_message'), self::STOP_CRITICAL); + } + + $this->MIMEHeader = $this->CreateHeader(); + $this->MIMEBody = $this->CreateBody(); + + // To capture the complete message when using mail(), create + // an extra header list which CreateHeader() doesn't fold in + if ($this->Mailer == 'mail') { + if (count($this->to) > 0) { + $this->mailHeader .= $this->AddrAppend("To", $this->to); + } else { + $this->mailHeader .= $this->HeaderLine("To", "undisclosed-recipients:;"); + } + $this->mailHeader .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader(trim($this->Subject)))); + // if(count($this->cc) > 0) { + // $this->mailHeader .= $this->AddrAppend("Cc", $this->cc); + // } + } + + // digitally sign with DKIM if enabled + if (!empty($this->DKIM_domain) && !empty($this->DKIM_private) && !empty($this->DKIM_selector) && !empty($this->DKIM_domain) && file_exists($this->DKIM_private)) { + $header_dkim = $this->DKIM_Add($this->MIMEHeader, $this->EncodeHeader($this->SecureHeader($this->Subject)), $this->MIMEBody); + $this->MIMEHeader = str_replace("\r\n", "\n", $header_dkim) . $this->MIMEHeader; + } + + return true; + + } catch (phpmailerException $e) { + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + return false; + } + } + + /** + * Actual Email transport function + * Send the email via the selected mechanism + * @throws phpmailerException + * @return bool + */ + public function PostSend() { + try { + // Choose the mailer and send through it + switch($this->Mailer) { + case 'sendmail': + return $this->SendmailSend($this->MIMEHeader, $this->MIMEBody); + case 'smtp': + return $this->SmtpSend($this->MIMEHeader, $this->MIMEBody); + case 'mail': + return $this->MailSend($this->MIMEHeader, $this->MIMEBody); + default: + return $this->MailSend($this->MIMEHeader, $this->MIMEBody); + } + } catch (phpmailerException $e) { + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + if ($this->SMTPDebug) { + $this->edebug($e->getMessage()."\n"); + } + } + return false; + } + + /** + * Sends mail using the $Sendmail program. + * @param string $header The message headers + * @param string $body The message body + * @throws phpmailerException + * @access protected + * @return bool + */ + protected function SendmailSend($header, $body) { + if ($this->Sender != '') { + $sendmail = sprintf("%s -oi -f%s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender)); + } else { + $sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail)); + } + if ($this->SingleTo === true) { + foreach ($this->SingleToArray as $val) { + if(!@$mail = popen($sendmail, 'w')) { + throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + fputs($mail, "To: " . $val . "\n"); + fputs($mail, $header); + fputs($mail, $body); + $result = pclose($mail); + // implement call back function if it exists + $isSent = ($result == 0) ? 1 : 0; + $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body); + if($result != 0) { + throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + } + } else { + if(!@$mail = popen($sendmail, 'w')) { + throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + fputs($mail, $header); + fputs($mail, $body); + $result = pclose($mail); + // implement call back function if it exists + $isSent = ($result == 0) ? 1 : 0; + $this->doCallback($isSent, $this->to, $this->cc, $this->bcc, $this->Subject, $body); + if($result != 0) { + throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + } + return true; + } + + /** + * Sends mail using the PHP mail() function. + * @param string $header The message headers + * @param string $body The message body + * @throws phpmailerException + * @access protected + * @return bool + */ + protected function MailSend($header, $body) { + $toArr = array(); + foreach($this->to as $t) { + $toArr[] = $this->AddrFormat($t); + } + $to = implode(', ', $toArr); + + if (empty($this->Sender)) { + $params = " "; + } else { + $params = sprintf("-f%s", $this->Sender); + } + if ($this->Sender != '' and !ini_get('safe_mode')) { + $old_from = ini_get('sendmail_from'); + ini_set('sendmail_from', $this->Sender); + } + $rt = false; + if ($this->SingleTo === true && count($toArr) > 1) { + foreach ($toArr as $val) { + $rt = $this->mail_passthru($val, $this->Subject, $body, $header, $params); + // implement call back function if it exists + $isSent = ($rt == 1) ? 1 : 0; + $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body); + } + } else { + $rt = $this->mail_passthru($to, $this->Subject, $body, $header, $params); + // implement call back function if it exists + $isSent = ($rt == 1) ? 1 : 0; + $this->doCallback($isSent, $to, $this->cc, $this->bcc, $this->Subject, $body); + } + if (isset($old_from)) { + ini_set('sendmail_from', $old_from); + } + if(!$rt) { + throw new phpmailerException($this->Lang('instantiate'), self::STOP_CRITICAL); + } + return true; + } + + /** + * Sends mail via SMTP using PhpSMTP + * Returns false if there is a bad MAIL FROM, RCPT, or DATA input. + * @param string $header The message headers + * @param string $body The message body + * @throws phpmailerException + * @uses SMTP + * @access protected + * @return bool + */ + protected function SmtpSend($header, $body) { + require_once $this->PluginDir . 'class-smtp.php'; + $bad_rcpt = array(); + + if(!$this->SmtpConnect()) { + throw new phpmailerException($this->Lang('smtp_connect_failed'), self::STOP_CRITICAL); + } + $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender; + if(!$this->smtp->Mail($smtp_from)) { + $this->SetError($this->Lang('from_failed') . $smtp_from . " : " . implode(",",$this->smtp->getError())) ; + throw new phpmailerException($this->ErrorInfo, self::STOP_CRITICAL); + } + + // Attempt to send attach all recipients + foreach($this->to as $to) { + if (!$this->smtp->Recipient($to[0])) { + $bad_rcpt[] = $to[0]; + // implement call back function if it exists + $isSent = 0; + $this->doCallback($isSent, $to[0], '', '', $this->Subject, $body); + } else { + // implement call back function if it exists + $isSent = 1; + $this->doCallback($isSent, $to[0], '', '', $this->Subject, $body); + } + } + foreach($this->cc as $cc) { + if (!$this->smtp->Recipient($cc[0])) { + $bad_rcpt[] = $cc[0]; + // implement call back function if it exists + $isSent = 0; + $this->doCallback($isSent, '', $cc[0], '', $this->Subject, $body); + } else { + // implement call back function if it exists + $isSent = 1; + $this->doCallback($isSent, '', $cc[0], '', $this->Subject, $body); + } + } + foreach($this->bcc as $bcc) { + if (!$this->smtp->Recipient($bcc[0])) { + $bad_rcpt[] = $bcc[0]; + // implement call back function if it exists + $isSent = 0; + $this->doCallback($isSent, '', '', $bcc[0], $this->Subject, $body); + } else { + // implement call back function if it exists + $isSent = 1; + $this->doCallback($isSent, '', '', $bcc[0], $this->Subject, $body); + } + } + + + if (count($bad_rcpt) > 0 ) { //Create error message for any bad addresses + $badaddresses = implode(', ', $bad_rcpt); + throw new phpmailerException($this->Lang('recipients_failed') . $badaddresses); + } + if(!$this->smtp->Data($header . $body)) { + throw new phpmailerException($this->Lang('data_not_accepted'), self::STOP_CRITICAL); + } + if($this->SMTPKeepAlive == true) { + $this->smtp->Reset(); + } else { + $this->smtp->Quit(); + $this->smtp->Close(); + } + return true; + } + + /** + * Initiates a connection to an SMTP server. + * Returns false if the operation failed. + * @uses SMTP + * @access public + * @throws phpmailerException + * @return bool + */ + public function SmtpConnect() { + if(is_null($this->smtp)) { + $this->smtp = new SMTP; + } + + $this->smtp->Timeout = $this->Timeout; + $this->smtp->do_debug = $this->SMTPDebug; + $hosts = explode(';', $this->Host); + $index = 0; + $connection = $this->smtp->Connected(); + + // Retry while there is no connection + try { + while($index < count($hosts) && !$connection) { + $hostinfo = array(); + if (preg_match('/^(.+):([0-9]+)$/', $hosts[$index], $hostinfo)) { + $host = $hostinfo[1]; + $port = $hostinfo[2]; + } else { + $host = $hosts[$index]; + $port = $this->Port; + } + + $tls = ($this->SMTPSecure == 'tls'); + $ssl = ($this->SMTPSecure == 'ssl'); + + if ($this->smtp->Connect(($ssl ? 'ssl://':'').$host, $port, $this->Timeout)) { + + $hello = ($this->Helo != '' ? $this->Helo : $this->ServerHostname()); + $this->smtp->Hello($hello); + + if ($tls) { + if (!$this->smtp->StartTLS()) { + throw new phpmailerException($this->Lang('connect_host')); + } + + //We must resend HELO after tls negotiation + $this->smtp->Hello($hello); + } + + $connection = true; + if ($this->SMTPAuth) { + if (!$this->smtp->Authenticate($this->Username, $this->Password, $this->AuthType, + $this->Realm, $this->Workstation)) { + throw new phpmailerException($this->Lang('authenticate')); + } + } + } + $index++; + if (!$connection) { + throw new phpmailerException($this->Lang('connect_host')); + } + } + } catch (phpmailerException $e) { + $this->smtp->Reset(); + if ($this->exceptions) { + throw $e; + } + } + return true; + } + + /** + * Closes the active SMTP session if one exists. + * @return void + */ + public function SmtpClose() { + if ($this->smtp !== null) { + if($this->smtp->Connected()) { + $this->smtp->Quit(); + $this->smtp->Close(); + } + } + } + + /** + * Sets the language for all class error messages. + * Returns false if it cannot load the language file. The default language is English. + * @param string $langcode ISO 639-1 2-character language code (e.g. Portuguese: "br") + * @param string $lang_path Path to the language file directory + * @return bool + * @access public + */ + function SetLanguage($langcode = 'en', $lang_path = 'language/') { + //Define full set of translatable strings + $PHPMAILER_LANG = array( + 'authenticate' => 'SMTP Error: Could not authenticate.', + 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', + 'data_not_accepted' => 'SMTP Error: Data not accepted.', + 'empty_message' => 'Message body empty', + 'encoding' => 'Unknown encoding: ', + 'execute' => 'Could not execute: ', + 'file_access' => 'Could not access file: ', + 'file_open' => 'File Error: Could not open file: ', + 'from_failed' => 'The following From address failed: ', + 'instantiate' => 'Could not instantiate mail function.', + 'invalid_address' => 'Invalid address', + 'mailer_not_supported' => ' mailer is not supported.', + 'provide_address' => 'You must provide at least one recipient email address.', + 'recipients_failed' => 'SMTP Error: The following recipients failed: ', + 'signing' => 'Signing Error: ', + 'smtp_connect_failed' => 'SMTP Connect() failed.', + 'smtp_error' => 'SMTP server error: ', + 'variable_set' => 'Cannot set or reset variable: ' + ); + //Overwrite language-specific strings. This way we'll never have missing translations - no more "language string failed to load"! + $l = true; + if ($langcode != 'en') { //There is no English translation file + $l = @include $lang_path.'phpmailer.lang-'.$langcode.'.php'; + } + $this->language = $PHPMAILER_LANG; + return ($l == true); //Returns false if language not found + } + + /** + * Return the current array of language strings + * @return array + */ + public function GetTranslations() { + return $this->language; + } + + ///////////////////////////////////////////////// + // METHODS, MESSAGE CREATION + ///////////////////////////////////////////////// + + /** + * Creates recipient headers. + * @access public + * @param string $type + * @param array $addr + * @return string + */ + public function AddrAppend($type, $addr) { + $addr_str = $type . ': '; + $addresses = array(); + foreach ($addr as $a) { + $addresses[] = $this->AddrFormat($a); + } + $addr_str .= implode(', ', $addresses); + $addr_str .= $this->LE; + + return $addr_str; + } + + /** + * Formats an address correctly. + * @access public + * @param string $addr + * @return string + */ + public function AddrFormat($addr) { + if (empty($addr[1])) { + return $this->SecureHeader($addr[0]); + } else { + return $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">"; + } + } + + /** + * Wraps message for use with mailers that do not + * automatically perform wrapping and for quoted-printable. + * Original written by philippe. + * @param string $message The message to wrap + * @param integer $length The line length to wrap to + * @param boolean $qp_mode Whether to run in Quoted-Printable mode + * @access public + * @return string + */ + public function WrapText($message, $length, $qp_mode = false) { + $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE; + // If utf-8 encoding is used, we will need to make sure we don't + // split multibyte characters when we wrap + $is_utf8 = (strtolower($this->CharSet) == "utf-8"); + $lelen = strlen($this->LE); + $crlflen = strlen(self::CRLF); + + $message = $this->FixEOL($message); + if (substr($message, -$lelen) == $this->LE) { + $message = substr($message, 0, -$lelen); + } + + $line = explode($this->LE, $message); // Magic. We know FixEOL uses $LE + $message = ''; + for ($i = 0 ;$i < count($line); $i++) { + $line_part = explode(' ', $line[$i]); + $buf = ''; + for ($e = 0; $e<count($line_part); $e++) { + $word = $line_part[$e]; + if ($qp_mode and (strlen($word) > $length)) { + $space_left = $length - strlen($buf) - $crlflen; + if ($e != 0) { + if ($space_left > 20) { + $len = $space_left; + if ($is_utf8) { + $len = $this->UTF8CharBoundary($word, $len); + } elseif (substr($word, $len - 1, 1) == "=") { + $len--; + } elseif (substr($word, $len - 2, 1) == "=") { + $len -= 2; + } + $part = substr($word, 0, $len); + $word = substr($word, $len); + $buf .= ' ' . $part; + $message .= $buf . sprintf("=%s", self::CRLF); + } else { + $message .= $buf . $soft_break; + } + $buf = ''; + } + while (strlen($word) > 0) { + $len = $length; + if ($is_utf8) { + $len = $this->UTF8CharBoundary($word, $len); + } elseif (substr($word, $len - 1, 1) == "=") { + $len--; + } elseif (substr($word, $len - 2, 1) == "=") { + $len -= 2; + } + $part = substr($word, 0, $len); + $word = substr($word, $len); + + if (strlen($word) > 0) { + $message .= $part . sprintf("=%s", self::CRLF); + } else { + $buf = $part; + } + } + } else { + $buf_o = $buf; + $buf .= ($e == 0) ? $word : (' ' . $word); + + if (strlen($buf) > $length and $buf_o != '') { + $message .= $buf_o . $soft_break; + $buf = $word; + } + } + } + $message .= $buf . self::CRLF; + } + + return $message; + } + + /** + * Finds last character boundary prior to maxLength in a utf-8 + * quoted (printable) encoded string. + * Original written by Colin Brown. + * @access public + * @param string $encodedText utf-8 QP text + * @param int $maxLength find last character boundary prior to this length + * @return int + */ + public function UTF8CharBoundary($encodedText, $maxLength) { + $foundSplitPos = false; + $lookBack = 3; + while (!$foundSplitPos) { + $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack); + $encodedCharPos = strpos($lastChunk, "="); + if ($encodedCharPos !== false) { + // Found start of encoded character byte within $lookBack block. + // Check the encoded byte value (the 2 chars after the '=') + $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2); + $dec = hexdec($hex); + if ($dec < 128) { // Single byte character. + // If the encoded char was found at pos 0, it will fit + // otherwise reduce maxLength to start of the encoded char + $maxLength = ($encodedCharPos == 0) ? $maxLength : + $maxLength - ($lookBack - $encodedCharPos); + $foundSplitPos = true; + } elseif ($dec >= 192) { // First byte of a multi byte character + // Reduce maxLength to split at start of character + $maxLength = $maxLength - ($lookBack - $encodedCharPos); + $foundSplitPos = true; + } elseif ($dec < 192) { // Middle byte of a multi byte character, look further back + $lookBack += 3; + } + } else { + // No encoded character found + $foundSplitPos = true; + } + } + return $maxLength; + } + + + /** + * Set the body wrapping. + * @access public + * @return void + */ + public function SetWordWrap() { + if($this->WordWrap < 1) { + return; + } + + switch($this->message_type) { + case 'alt': + case 'alt_inline': + case 'alt_attach': + case 'alt_inline_attach': + $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap); + break; + default: + $this->Body = $this->WrapText($this->Body, $this->WordWrap); + break; + } + } + + /** + * Assembles message header. + * @access public + * @return string The assembled header + */ + public function CreateHeader() { + $result = ''; + + // Set the boundaries + $uniq_id = md5(uniqid(time())); + $this->boundary[1] = 'b1_' . $uniq_id; + $this->boundary[2] = 'b2_' . $uniq_id; + $this->boundary[3] = 'b3_' . $uniq_id; + + if ($this->MessageDate == '') { + $result .= $this->HeaderLine('Date', self::RFCDate()); + } else { + $result .= $this->HeaderLine('Date', $this->MessageDate); + } + + if ($this->ReturnPath) { + $result .= $this->HeaderLine('Return-Path', trim($this->ReturnPath)); + } elseif ($this->Sender == '') { + $result .= $this->HeaderLine('Return-Path', trim($this->From)); + } else { + $result .= $this->HeaderLine('Return-Path', trim($this->Sender)); + } + + // To be created automatically by mail() + if($this->Mailer != 'mail') { + if ($this->SingleTo === true) { + foreach($this->to as $t) { + $this->SingleToArray[] = $this->AddrFormat($t); + } + } else { + if(count($this->to) > 0) { + $result .= $this->AddrAppend('To', $this->to); + } elseif (count($this->cc) == 0) { + $result .= $this->HeaderLine('To', 'undisclosed-recipients:;'); + } + } + } + + $from = array(); + $from[0][0] = trim($this->From); + $from[0][1] = $this->FromName; + $result .= $this->AddrAppend('From', $from); + + // sendmail and mail() extract Cc from the header before sending + if(count($this->cc) > 0) { + $result .= $this->AddrAppend('Cc', $this->cc); + } + + // sendmail and mail() extract Bcc from the header before sending + if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->bcc) > 0)) { + $result .= $this->AddrAppend('Bcc', $this->bcc); + } + + if(count($this->ReplyTo) > 0) { + $result .= $this->AddrAppend('Reply-To', $this->ReplyTo); + } + + // mail() sets the subject itself + if($this->Mailer != 'mail') { + $result .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader($this->Subject))); + } + + if($this->MessageID != '') { + $result .= $this->HeaderLine('Message-ID', $this->MessageID); + } else { + $result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE); + } + $result .= $this->HeaderLine('X-Priority', $this->Priority); + if ($this->XMailer == '') { + $result .= $this->HeaderLine('X-Mailer', 'PHPMailer '.$this->Version.' (http://code.google.com/a/apache-extras.org/p/phpmailer/)'); + } else { + $myXmailer = trim($this->XMailer); + if ($myXmailer) { + $result .= $this->HeaderLine('X-Mailer', $myXmailer); + } + } + + if($this->ConfirmReadingTo != '') { + $result .= $this->HeaderLine('Disposition-Notification-To', '<' . trim($this->ConfirmReadingTo) . '>'); + } + + // Add custom headers + for($index = 0; $index < count($this->CustomHeader); $index++) { + $result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1]))); + } + if (!$this->sign_key_file) { + $result .= $this->HeaderLine('MIME-Version', '1.0'); + $result .= $this->GetMailMIME(); + } + + return $result; + } + + /** + * Returns the message MIME. + * @access public + * @return string + */ + public function GetMailMIME() { + $result = ''; + switch($this->message_type) { + case 'inline': + $result .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + break; + case 'attach': + case 'inline_attach': + case 'alt_attach': + case 'alt_inline_attach': + $result .= $this->HeaderLine('Content-Type', 'multipart/mixed;'); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + break; + case 'alt': + case 'alt_inline': + $result .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + break; + default: + // Catches case 'plain': and case '': + $result .= $this->HeaderLine('Content-Transfer-Encoding', $this->Encoding); + $result .= $this->TextLine('Content-Type: '.$this->ContentType.'; charset='.$this->CharSet); + break; + } + + if($this->Mailer != 'mail') { + $result .= $this->LE; + } + + return $result; + } + + /** + * Returns the MIME message (headers and body). Only really valid post PreSend(). + * @access public + * @return string + */ + public function GetSentMIMEMessage() { + return $this->MIMEHeader . $this->mailHeader . self::CRLF . $this->MIMEBody; + } + + + /** + * Assembles the message body. Returns an empty string on failure. + * @access public + * @throws phpmailerException + * @return string The assembled message body + */ + public function CreateBody() { + $body = ''; + + if ($this->sign_key_file) { + $body .= $this->GetMailMIME().$this->LE; + } + + $this->SetWordWrap(); + + switch($this->message_type) { + case 'inline': + $body .= $this->GetBoundary($this->boundary[1], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[1]); + break; + case 'attach': + $body .= $this->GetBoundary($this->boundary[1], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); + break; + case 'inline_attach': + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[2]); + $body .= $this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); + break; + case 'alt': + $body .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->GetBoundary($this->boundary[1], '', 'text/html', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->EndBoundary($this->boundary[1]); + break; + case 'alt_inline': + $body .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[2]); + $body .= $this->LE; + $body .= $this->EndBoundary($this->boundary[1]); + break; + case 'alt_attach': + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->EndBoundary($this->boundary[2]); + $body .= $this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); + break; + case 'alt_inline_attach': + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->TextLine("--" . $this->boundary[2]); + $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[3] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[3], '', 'text/html', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[3]); + $body .= $this->LE; + $body .= $this->EndBoundary($this->boundary[2]); + $body .= $this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); + break; + default: + // catch case 'plain' and case '' + $body .= $this->EncodeString($this->Body, $this->Encoding); + break; + } + + if ($this->IsError()) { + $body = ''; + } elseif ($this->sign_key_file) { + try { + $file = tempnam('', 'mail'); + file_put_contents($file, $body); //TODO check this worked + $signed = tempnam("", "signed"); + if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), NULL)) { + @unlink($file); + $body = file_get_contents($signed); + @unlink($signed); + } else { + @unlink($file); + @unlink($signed); + throw new phpmailerException($this->Lang("signing").openssl_error_string()); + } + } catch (phpmailerException $e) { + $body = ''; + if ($this->exceptions) { + throw $e; + } + } + } + + return $body; + } + + /** + * Returns the start of a message boundary. + * @access protected + * @param string $boundary + * @param string $charSet + * @param string $contentType + * @param string $encoding + * @return string + */ + protected function GetBoundary($boundary, $charSet, $contentType, $encoding) { + $result = ''; + if($charSet == '') { + $charSet = $this->CharSet; + } + if($contentType == '') { + $contentType = $this->ContentType; + } + if($encoding == '') { + $encoding = $this->Encoding; + } + $result .= $this->TextLine('--' . $boundary); + $result .= sprintf("Content-Type: %s; charset=%s", $contentType, $charSet); + $result .= $this->LE; + $result .= $this->HeaderLine('Content-Transfer-Encoding', $encoding); + $result .= $this->LE; + + return $result; + } + + /** + * Returns the end of a message boundary. + * @access protected + * @param string $boundary + * @return string + */ + protected function EndBoundary($boundary) { + return $this->LE . '--' . $boundary . '--' . $this->LE; + } + + /** + * Sets the message type. + * @access protected + * @return void + */ + protected function SetMessageType() { + $this->message_type = array(); + if($this->AlternativeExists()) $this->message_type[] = "alt"; + if($this->InlineImageExists()) $this->message_type[] = "inline"; + if($this->AttachmentExists()) $this->message_type[] = "attach"; + $this->message_type = implode("_", $this->message_type); + if($this->message_type == "") $this->message_type = "plain"; + } + + /** + * Returns a formatted header line. + * @access public + * @param string $name + * @param string $value + * @return string + */ + public function HeaderLine($name, $value) { + return $name . ': ' . $value . $this->LE; + } + + /** + * Returns a formatted mail line. + * @access public + * @param string $value + * @return string + */ + public function TextLine($value) { + return $value . $this->LE; + } + + ///////////////////////////////////////////////// + // CLASS METHODS, ATTACHMENTS + ///////////////////////////////////////////////// + + /** + * Adds an attachment from a path on the filesystem. + * Returns false if the file could not be found + * or accessed. + * @param string $path Path to the attachment. + * @param string $name Overrides the attachment name. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @throws phpmailerException + * @return bool + */ + public function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { + try { + if ( !@is_file($path) ) { + throw new phpmailerException($this->Lang('file_access') . $path, self::STOP_CONTINUE); + } + $filename = basename($path); + if ( $name == '' ) { + $name = $filename; + } + + $this->attachment[] = array( + 0 => $path, + 1 => $filename, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => false, // isStringAttachment + 6 => 'attachment', + 7 => 0 + ); + + } catch (phpmailerException $e) { + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + if ($this->SMTPDebug) { + $this->edebug($e->getMessage()."\n"); + } + if ( $e->getCode() == self::STOP_CRITICAL ) { + return false; + } + } + return true; + } + + /** + * Return the current array of attachments + * @return array + */ + public function GetAttachments() { + return $this->attachment; + } + + /** + * Attaches all fs, string, and binary attachments to the message. + * Returns an empty string on failure. + * @access protected + * @param string $disposition_type + * @param string $boundary + * @return string + */ + protected function AttachAll($disposition_type, $boundary) { + // Return text of body + $mime = array(); + $cidUniq = array(); + $incl = array(); + + // Add all attachments + foreach ($this->attachment as $attachment) { + // CHECK IF IT IS A VALID DISPOSITION_FILTER + if($attachment[6] == $disposition_type) { + // Check for string attachment + $string = ''; + $path = ''; + $bString = $attachment[5]; + if ($bString) { + $string = $attachment[0]; + } else { + $path = $attachment[0]; + } + + $inclhash = md5(serialize($attachment)); + if (in_array($inclhash, $incl)) { continue; } + $incl[] = $inclhash; + $filename = $attachment[1]; + $name = $attachment[2]; + $encoding = $attachment[3]; + $type = $attachment[4]; + $disposition = $attachment[6]; + $cid = $attachment[7]; + if ( $disposition == 'inline' && isset($cidUniq[$cid]) ) { continue; } + $cidUniq[$cid] = true; + + $mime[] = sprintf("--%s%s", $boundary, $this->LE); + $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $this->EncodeHeader($this->SecureHeader($name)), $this->LE); + $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE); + + if($disposition == 'inline') { + $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); + } + + $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE); + + // Encode as string attachment + if($bString) { + $mime[] = $this->EncodeString($string, $encoding); + if($this->IsError()) { + return ''; + } + $mime[] = $this->LE.$this->LE; + } else { + $mime[] = $this->EncodeFile($path, $encoding); + if($this->IsError()) { + return ''; + } + $mime[] = $this->LE.$this->LE; + } + } + } + + $mime[] = sprintf("--%s--%s", $boundary, $this->LE); + + return implode("", $mime); + } + + /** + * Encodes attachment in requested format. + * Returns an empty string on failure. + * @param string $path The full path to the file + * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' + * @throws phpmailerException + * @see EncodeFile() + * @access protected + * @return string + */ + protected function EncodeFile($path, $encoding = 'base64') { + try { + if (!is_readable($path)) { + throw new phpmailerException($this->Lang('file_open') . $path, self::STOP_CONTINUE); + } + // if (!function_exists('get_magic_quotes')) { + // function get_magic_quotes() { + // return false; + // } + // } + $magic_quotes = get_magic_quotes_runtime(); + if ($magic_quotes) { + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + set_magic_quotes_runtime(0); + } else { + ini_set('magic_quotes_runtime', 0); + } + } + $file_buffer = file_get_contents($path); + $file_buffer = $this->EncodeString($file_buffer, $encoding); + if ($magic_quotes) { + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + set_magic_quotes_runtime($magic_quotes); + } else { + ini_set('magic_quotes_runtime', $magic_quotes); + } + } + return $file_buffer; + } catch (Exception $e) { + $this->SetError($e->getMessage()); + return ''; + } + } + + /** + * Encodes string to requested format. + * Returns an empty string on failure. + * @param string $str The text to encode + * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' + * @access public + * @return string + */ + public function EncodeString($str, $encoding = 'base64') { + $encoded = ''; + switch(strtolower($encoding)) { + case 'base64': + $encoded = chunk_split(base64_encode($str), 76, $this->LE); + break; + case '7bit': + case '8bit': + $encoded = $this->FixEOL($str); + //Make sure it ends with a line break + if (substr($encoded, -(strlen($this->LE))) != $this->LE) + $encoded .= $this->LE; + break; + case 'binary': + $encoded = $str; + break; + case 'quoted-printable': + $encoded = $this->EncodeQP($str); + break; + default: + $this->SetError($this->Lang('encoding') . $encoding); + break; + } + return $encoded; + } + + /** + * Encode a header string to best (shortest) of Q, B, quoted or none. + * @access public + * @param string $str + * @param string $position + * @return string + */ + public function EncodeHeader($str, $position = 'text') { + $x = 0; + + switch (strtolower($position)) { + case 'phrase': + if (!preg_match('/[\200-\377]/', $str)) { + // Can't use addslashes as we don't know what value has magic_quotes_sybase + $encoded = addcslashes($str, "\0..\37\177\\\""); + if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) { + return ($encoded); + } else { + return ("\"$encoded\""); + } + } + $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches); + break; + case 'comment': + $x = preg_match_all('/[()"]/', $str, $matches); + // Fall-through + case 'text': + default: + $x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); + break; + } + + if ($x == 0) { + return ($str); + } + + $maxlen = 75 - 7 - strlen($this->CharSet); + // Try to select the encoding which should produce the shortest output + if (strlen($str)/3 < $x) { + $encoding = 'B'; + if (function_exists('mb_strlen') && $this->HasMultiBytes($str)) { + // Use a custom function which correctly encodes and wraps long + // multibyte strings without breaking lines within a character + $encoded = $this->Base64EncodeWrapMB($str, "\n"); + } else { + $encoded = base64_encode($str); + $maxlen -= $maxlen % 4; + $encoded = trim(chunk_split($encoded, $maxlen, "\n")); + } + } else { + $encoding = 'Q'; + $encoded = $this->EncodeQ($str, $position); + $encoded = $this->WrapText($encoded, $maxlen, true); + $encoded = str_replace('='.self::CRLF, "\n", trim($encoded)); + } + + $encoded = preg_replace('/^(.*)$/m', " =?".$this->CharSet."?$encoding?\\1?=", $encoded); + $encoded = trim(str_replace("\n", $this->LE, $encoded)); + + return $encoded; + } + + /** + * Checks if a string contains multibyte characters. + * @access public + * @param string $str multi-byte text to wrap encode + * @return bool + */ + public function HasMultiBytes($str) { + if (function_exists('mb_strlen')) { + return (strlen($str) > mb_strlen($str, $this->CharSet)); + } else { // Assume no multibytes (we can't handle without mbstring functions anyway) + return false; + } + } + + /** + * Correctly encodes and wraps long multibyte strings for mail headers + * without breaking lines within a character. + * Adapted from a function by paravoid at http://uk.php.net/manual/en/function.mb-encode-mimeheader.php + * @access public + * @param string $str multi-byte text to wrap encode + * @param string $lf string to use as linefeed/end-of-line + * @return string + */ + public function Base64EncodeWrapMB($str, $lf=null) { + $start = "=?".$this->CharSet."?B?"; + $end = "?="; + $encoded = ""; + if ($lf === null) { + $lf = $this->LE; + } + + $mb_length = mb_strlen($str, $this->CharSet); + // Each line must have length <= 75, including $start and $end + $length = 75 - strlen($start) - strlen($end); + // Average multi-byte ratio + $ratio = $mb_length / strlen($str); + // Base64 has a 4:3 ratio + $offset = $avgLength = floor($length * $ratio * .75); + + for ($i = 0; $i < $mb_length; $i += $offset) { + $lookBack = 0; + + do { + $offset = $avgLength - $lookBack; + $chunk = mb_substr($str, $i, $offset, $this->CharSet); + $chunk = base64_encode($chunk); + $lookBack++; + } + while (strlen($chunk) > $length); + + $encoded .= $chunk . $lf; + } + + // Chomp the last linefeed + $encoded = substr($encoded, 0, -strlen($lf)); + return $encoded; + } + + /** + * Encode string to quoted-printable. + * Only uses standard PHP, slow, but will always work + * @access public + * @param string $input + * @param integer $line_max Number of chars allowed on a line before wrapping + * @param bool $space_conv + * @internal param string $string the text to encode + * @return string + */ + public function EncodeQPphp( $input = '', $line_max = 76, $space_conv = false) { + $hex = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'); + $lines = preg_split('/(?:\r\n|\r|\n)/', $input); + $eol = "\r\n"; + $escape = '='; + $output = ''; + while( list(, $line) = each($lines) ) { + $linlen = strlen($line); + $newline = ''; + for($i = 0; $i < $linlen; $i++) { + $c = substr( $line, $i, 1 ); + $dec = ord( $c ); + if ( ( $i == 0 ) && ( $dec == 46 ) ) { // convert first point in the line into =2E + $c = '=2E'; + } + if ( $dec == 32 ) { + if ( $i == ( $linlen - 1 ) ) { // convert space at eol only + $c = '=20'; + } else if ( $space_conv ) { + $c = '=20'; + } + } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required + $h2 = (integer)floor($dec/16); + $h1 = (integer)floor($dec%16); + $c = $escape.$hex[$h2].$hex[$h1]; + } + if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted + $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay + $newline = ''; + // check if newline first character will be point or not + if ( $dec == 46 ) { + $c = '=2E'; + } + } + $newline .= $c; + } // end of for + $output .= $newline.$eol; + } // end of while + return $output; + } + + /** + * Encode string to RFC2045 (6.7) quoted-printable format + * Uses a PHP5 stream filter to do the encoding about 64x faster than the old version + * Also results in same content as you started with after decoding + * @see EncodeQPphp() + * @access public + * @param string $string the text to encode + * @param integer $line_max Number of chars allowed on a line before wrapping + * @param boolean $space_conv Dummy param for compatibility with existing EncodeQP function + * @return string + * @author Marcus Bointon + */ + public function EncodeQP($string, $line_max = 76, $space_conv = false) { + if (function_exists('quoted_printable_encode')) { //Use native function if it's available (>= PHP5.3) + return quoted_printable_encode($string); + } + $filters = stream_get_filters(); + if (!in_array('convert.*', $filters)) { //Got convert stream filter? + return $this->EncodeQPphp($string, $line_max, $space_conv); //Fall back to old implementation + } + $fp = fopen('php://temp/', 'r+'); + $string = preg_replace('/\r\n?/', $this->LE, $string); //Normalise line breaks + $params = array('line-length' => $line_max, 'line-break-chars' => $this->LE); + $s = stream_filter_append($fp, 'convert.quoted-printable-encode', STREAM_FILTER_READ, $params); + fputs($fp, $string); + rewind($fp); + $out = stream_get_contents($fp); + stream_filter_remove($s); + $out = preg_replace('/^\./m', '=2E', $out); //Encode . if it is first char on a line, workaround for bug in Exchange + fclose($fp); + return $out; + } + + /** + * Encode string to q encoding. + * @link http://tools.ietf.org/html/rfc2047 + * @param string $str the text to encode + * @param string $position Where the text is going to be used, see the RFC for what that means + * @access public + * @return string + */ + public function EncodeQ($str, $position = 'text') { + //There should not be any EOL in the string + $pattern=""; + $encoded = str_replace(array("\r", "\n"), '', $str); + switch (strtolower($position)) { + case 'phrase': + $pattern = '^A-Za-z0-9!*+\/ -'; + break; + + case 'comment': + $pattern = '\(\)"'; + //note that we dont break here! + //for this reason we build the $pattern withoud including delimiters and [] + + case 'text': + default: + //Replace every high ascii, control =, ? and _ characters + //We put \075 (=) as first value to make sure it's the first one in being converted, preventing double encode + $pattern = '\075\000-\011\013\014\016-\037\077\137\177-\377' . $pattern; + break; + } + + if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) { + foreach (array_unique($matches[0]) as $char) { + $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded); + } + } + + //Replace every spaces to _ (more readable than =20) + return str_replace(' ', '_', $encoded); +} + + + /** + * Adds a string or binary attachment (non-filesystem) to the list. + * This method can be used to attach ascii or binary data, + * such as a BLOB record from a database. + * @param string $string String attachment data. + * @param string $filename Name of the attachment. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return void + */ + public function AddStringAttachment($string, $filename, $encoding = 'base64', $type = 'application/octet-stream') { + // Append to $attachment array + $this->attachment[] = array( + 0 => $string, + 1 => $filename, + 2 => basename($filename), + 3 => $encoding, + 4 => $type, + 5 => true, // isStringAttachment + 6 => 'attachment', + 7 => 0 + ); + } + + /** + * Adds an embedded attachment. This can include images, sounds, and + * just about any other document. Make sure to set the $type to an + * image type. For JPEG images use "image/jpeg" and for GIF images + * use "image/gif". + * @param string $path Path to the attachment. + * @param string $cid Content ID of the attachment. Use this to identify + * the Id for accessing the image in an HTML form. + * @param string $name Overrides the attachment name. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return bool + */ + public function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { + + if ( !@is_file($path) ) { + $this->SetError($this->Lang('file_access') . $path); + return false; + } + + $filename = basename($path); + if ( $name == '' ) { + $name = $filename; + } + + // Append to $attachment array + $this->attachment[] = array( + 0 => $path, + 1 => $filename, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => false, // isStringAttachment + 6 => 'inline', + 7 => $cid + ); + + return true; + } + + /** + * Adds an embedded stringified attachment. This can include images, sounds, and + * just about any other document. Make sure to set the $type to an + * image type. For JPEG images use "image/jpeg" and for GIF images + * use "image/gif". + * @param string $string The attachment. + * @param string $cid Content ID of the attachment. Use this to identify + * the Id for accessing the image in an HTML form. + * @param string $name Overrides the attachment name. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return bool + */ + public function AddStringEmbeddedImage($string, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { + // Append to $attachment array + $this->attachment[] = array( + 0 => $string, + 1 => $name, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => true, // isStringAttachment + 6 => 'inline', + 7 => $cid + ); + } + + /** + * Returns true if an inline attachment is present. + * @access public + * @return bool + */ + public function InlineImageExists() { + foreach($this->attachment as $attachment) { + if ($attachment[6] == 'inline') { + return true; + } + } + return false; + } + + /** + * Returns true if an attachment (non-inline) is present. + * @return bool + */ + public function AttachmentExists() { + foreach($this->attachment as $attachment) { + if ($attachment[6] == 'attachment') { + return true; + } + } + return false; + } + + /** + * Does this message have an alternative body set? + * @return bool + */ + public function AlternativeExists() { + return !empty($this->AltBody); + } + + ///////////////////////////////////////////////// + // CLASS METHODS, MESSAGE RESET + ///////////////////////////////////////////////// + + /** + * Clears all recipients assigned in the TO array. Returns void. + * @return void + */ + public function ClearAddresses() { + foreach($this->to as $to) { + unset($this->all_recipients[strtolower($to[0])]); + } + $this->to = array(); + } + + /** + * Clears all recipients assigned in the CC array. Returns void. + * @return void + */ + public function ClearCCs() { + foreach($this->cc as $cc) { + unset($this->all_recipients[strtolower($cc[0])]); + } + $this->cc = array(); + } + + /** + * Clears all recipients assigned in the BCC array. Returns void. + * @return void + */ + public function ClearBCCs() { + foreach($this->bcc as $bcc) { + unset($this->all_recipients[strtolower($bcc[0])]); + } + $this->bcc = array(); + } + + /** + * Clears all recipients assigned in the ReplyTo array. Returns void. + * @return void + */ + public function ClearReplyTos() { + $this->ReplyTo = array(); + } + + /** + * Clears all recipients assigned in the TO, CC and BCC + * array. Returns void. + * @return void + */ + public function ClearAllRecipients() { + $this->to = array(); + $this->cc = array(); + $this->bcc = array(); + $this->all_recipients = array(); + } + + /** + * Clears all previously set filesystem, string, and binary + * attachments. Returns void. + * @return void + */ + public function ClearAttachments() { + $this->attachment = array(); + } + + /** + * Clears all custom headers. Returns void. + * @return void + */ + public function ClearCustomHeaders() { + $this->CustomHeader = array(); + } + + ///////////////////////////////////////////////// + // CLASS METHODS, MISCELLANEOUS + ///////////////////////////////////////////////// + + /** + * Adds the error message to the error container. + * @access protected + * @param string $msg + * @return void + */ + protected function SetError($msg) { + $this->error_count++; + if ($this->Mailer == 'smtp' and !is_null($this->smtp)) { + $lasterror = $this->smtp->getError(); + if (!empty($lasterror) and array_key_exists('smtp_msg', $lasterror)) { + $msg .= '<p>' . $this->Lang('smtp_error') . $lasterror['smtp_msg'] . "</p>\n"; + } + } + $this->ErrorInfo = $msg; + } + + /** + * Returns the proper RFC 822 formatted date. + * @access public + * @return string + * @static + */ + public static function RFCDate() { + $tz = date('Z'); + $tzs = ($tz < 0) ? '-' : '+'; + $tz = abs($tz); + $tz = (int)($tz/3600)*100 + ($tz%3600)/60; + $result = sprintf("%s %s%04d", date('D, j M Y H:i:s'), $tzs, $tz); + + return $result; + } + + /** + * Returns the server hostname or 'localhost.localdomain' if unknown. + * @access protected + * @return string + */ + protected function ServerHostname() { + if (!empty($this->Hostname)) { + $result = $this->Hostname; + } elseif (isset($_SERVER['SERVER_NAME'])) { + $result = $_SERVER['SERVER_NAME']; + } else { + $result = 'localhost.localdomain'; + } + + return $result; + } + + /** + * Returns a message in the appropriate language. + * @access protected + * @param string $key + * @return string + */ + protected function Lang($key) { + if(count($this->language) < 1) { + $this->SetLanguage('en'); // set the default language + } + + if(isset($this->language[$key])) { + return $this->language[$key]; + } else { + return 'Language string failed to load: ' . $key; + } + } + + /** + * Returns true if an error occurred. + * @access public + * @return bool + */ + public function IsError() { + return ($this->error_count > 0); + } + + /** + * Changes every end of line from CRLF, CR or LF to $this->LE. + * @access public + * @param string $str String to FixEOL + * @return string + */ + public function FixEOL($str) { + // condense down to \n + $nstr = str_replace(array("\r\n", "\r"), "\n", $str); + // Now convert LE as needed + if ($this->LE !== "\n") { + $nstr = str_replace("\n", $this->LE, $nstr); + } + return $nstr; + } + + /** + * Adds a custom header. $name value can be overloaded to contain + * both header name and value (name:value) + * @access public + * @param string $name custom header name + * @param string $value header value + * @return void + */ + public function AddCustomHeader($name, $value=null) { + if ($value === null) { + // Value passed in as name:value + $this->CustomHeader[] = explode(':', $name, 2); + } else { + $this->CustomHeader[] = array($name, $value); + } + } + + /** + * Evaluates the message and returns modifications for inline images and backgrounds + * @access public + * @param string $message Text to be HTML modified + * @param string $basedir baseline directory for path + * @return string $message + */ + public function MsgHTML($message, $basedir = '') { + preg_match_all("/(src|background)=[\"'](.*)[\"']/Ui", $message, $images); + if(isset($images[2])) { + foreach($images[2] as $i => $url) { + // do not change urls for absolute images (thanks to corvuscorax) + if (!preg_match('#^[A-z]+://#', $url)) { + $filename = basename($url); + $directory = dirname($url); + if ($directory == '.') { + $directory = ''; + } + $cid = 'cid:' . md5($url); + $ext = pathinfo($filename, PATHINFO_EXTENSION); + $mimeType = self::_mime_types($ext); + if ( strlen($basedir) > 1 && substr($basedir, -1) != '/') { $basedir .= '/'; } + if ( strlen($directory) > 1 && substr($directory, -1) != '/') { $directory .= '/'; } + if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($url), $filename, 'base64', $mimeType) ) { + $message = preg_replace("/".$images[1][$i]."=[\"']".preg_quote($url, '/')."[\"']/Ui", $images[1][$i]."=\"".$cid."\"", $message); + } + } + } + } + $this->IsHTML(true); + $this->Body = $message; + if (empty($this->AltBody)) { + $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s', '', $message))); + if (!empty($textMsg)) { + $this->AltBody = html_entity_decode($textMsg, ENT_QUOTES, $this->CharSet); + } + } + if (empty($this->AltBody)) { + $this->AltBody = 'To view this email message, open it in a program that understands HTML!' . "\n\n"; + } + return $message; + } + + /** + * Gets the MIME type of the embedded or inline image + * @param string $ext File extension + * @access public + * @return string MIME type of ext + * @static + */ + public static function _mime_types($ext = '') { + $mimes = array( + 'xl' => 'application/excel', + 'hqx' => 'application/mac-binhex40', + 'cpt' => 'application/mac-compactpro', + 'bin' => 'application/macbinary', + 'doc' => 'application/msword', + 'word' => 'application/msword', + 'class' => 'application/octet-stream', + 'dll' => 'application/octet-stream', + 'dms' => 'application/octet-stream', + 'exe' => 'application/octet-stream', + 'lha' => 'application/octet-stream', + 'lzh' => 'application/octet-stream', + 'psd' => 'application/octet-stream', + 'sea' => 'application/octet-stream', + 'so' => 'application/octet-stream', + 'oda' => 'application/oda', + 'pdf' => 'application/pdf', + 'ai' => 'application/postscript', + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'mif' => 'application/vnd.mif', + 'xls' => 'application/vnd.ms-excel', + 'ppt' => 'application/vnd.ms-powerpoint', + 'wbxml' => 'application/vnd.wap.wbxml', + 'wmlc' => 'application/vnd.wap.wmlc', + 'dcr' => 'application/x-director', + 'dir' => 'application/x-director', + 'dxr' => 'application/x-director', + 'dvi' => 'application/x-dvi', + 'gtar' => 'application/x-gtar', + 'php3' => 'application/x-httpd-php', + 'php4' => 'application/x-httpd-php', + 'php' => 'application/x-httpd-php', + 'phtml' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'js' => 'application/x-javascript', + 'swf' => 'application/x-shockwave-flash', + 'sit' => 'application/x-stuffit', + 'tar' => 'application/x-tar', + 'tgz' => 'application/x-tar', + 'xht' => 'application/xhtml+xml', + 'xhtml' => 'application/xhtml+xml', + 'zip' => 'application/zip', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mp2' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'mpga' => 'audio/mpeg', + 'aif' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'ram' => 'audio/x-pn-realaudio', + 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'ra' => 'audio/x-realaudio', + 'wav' => 'audio/x-wav', + 'bmp' => 'image/bmp', + 'gif' => 'image/gif', + 'jpeg' => 'image/jpeg', + 'jpe' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'png' => 'image/png', + 'tiff' => 'image/tiff', + 'tif' => 'image/tiff', + 'eml' => 'message/rfc822', + 'css' => 'text/css', + 'html' => 'text/html', + 'htm' => 'text/html', + 'shtml' => 'text/html', + 'log' => 'text/plain', + 'text' => 'text/plain', + 'txt' => 'text/plain', + 'rtx' => 'text/richtext', + 'rtf' => 'text/rtf', + 'xml' => 'text/xml', + 'xsl' => 'text/xml', + 'mpeg' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mov' => 'video/quicktime', + 'qt' => 'video/quicktime', + 'rv' => 'video/vnd.rn-realvideo', + 'avi' => 'video/x-msvideo', + 'movie' => 'video/x-sgi-movie' + ); + return (!isset($mimes[strtolower($ext)])) ? 'application/octet-stream' : $mimes[strtolower($ext)]; + } + + /** + * Set (or reset) Class Objects (variables) + * + * Usage Example: + * $page->set('X-Priority', '3'); + * + * @access public + * @param string $name Parameter Name + * @param mixed $value Parameter Value + * NOTE: will not work with arrays, there are no arrays to set/reset + * @throws phpmailerException + * @return bool + * @todo Should this not be using __set() magic function? + */ + public function set($name, $value = '') { + try { + if (isset($this->$name) ) { + $this->$name = $value; + } else { + throw new phpmailerException($this->Lang('variable_set') . $name, self::STOP_CRITICAL); + } + } catch (Exception $e) { + $this->SetError($e->getMessage()); + if ($e->getCode() == self::STOP_CRITICAL) { + return false; + } + } + return true; + } + + /** + * Strips newlines to prevent header injection. + * @access public + * @param string $str String + * @return string + */ + public function SecureHeader($str) { + return trim(str_replace(array("\r", "\n"), '', $str)); + } + + /** + * Set the private key file and password to sign the message. + * + * @access public + * @param $cert_filename + * @param string $key_filename Parameter File Name + * @param string $key_pass Password for private key + */ + public function Sign($cert_filename, $key_filename, $key_pass) { + $this->sign_cert_file = $cert_filename; + $this->sign_key_file = $key_filename; + $this->sign_key_pass = $key_pass; + } + + /** + * Set the private key file and password to sign the message. + * + * @access public + * @param string $txt + * @return string + */ + public function DKIM_QP($txt) { + $line = ''; + for ($i = 0; $i < strlen($txt); $i++) { + $ord = ord($txt[$i]); + if ( ((0x21 <= $ord) && ($ord <= 0x3A)) || $ord == 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E)) ) { + $line .= $txt[$i]; + } else { + $line .= "=".sprintf("%02X", $ord); + } + } + return $line; + } + + /** + * Generate DKIM signature + * + * @access public + * @param string $s Header + * @return string + */ + public function DKIM_Sign($s) { + $privKeyStr = file_get_contents($this->DKIM_private); + if ($this->DKIM_passphrase != '') { + $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase); + } else { + $privKey = $privKeyStr; + } + if (openssl_sign($s, $signature, $privKey)) { + return base64_encode($signature); + } + return ''; + } + + /** + * Generate DKIM Canonicalization Header + * + * @access public + * @param string $s Header + * @return string + */ + public function DKIM_HeaderC($s) { + $s = preg_replace("/\r\n\s+/", " ", $s); + $lines = explode("\r\n", $s); + foreach ($lines as $key => $line) { + list($heading, $value) = explode(":", $line, 2); + $heading = strtolower($heading); + $value = preg_replace("/\s+/", " ", $value) ; // Compress useless spaces + $lines[$key] = $heading.":".trim($value) ; // Don't forget to remove WSP around the value + } + $s = implode("\r\n", $lines); + return $s; + } + + /** + * Generate DKIM Canonicalization Body + * + * @access public + * @param string $body Message Body + * @return string + */ + public function DKIM_BodyC($body) { + if ($body == '') return "\r\n"; + // stabilize line endings + $body = str_replace("\r\n", "\n", $body); + $body = str_replace("\n", "\r\n", $body); + // END stabilize line endings + while (substr($body, strlen($body) - 4, 4) == "\r\n\r\n") { + $body = substr($body, 0, strlen($body) - 2); + } + return $body; + } + + /** + * Create the DKIM header, body, as new header + * + * @access public + * @param string $headers_line Header lines + * @param string $subject Subject + * @param string $body Body + * @return string + */ + public function DKIM_Add($headers_line, $subject, $body) { + $DKIMsignatureType = 'rsa-sha1'; // Signature & hash algorithms + $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body + $DKIMquery = 'dns/txt'; // Query method + $DKIMtime = time() ; // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone) + $subject_header = "Subject: $subject"; + $headers = explode($this->LE, $headers_line); + $from_header = ""; + $to_header = ""; + foreach($headers as $header) { + if (strpos($header, 'From:') === 0) { + $from_header = $header; + } elseif (strpos($header, 'To:') === 0) { + $to_header = $header; + } + } + $from = str_replace('|', '=7C', $this->DKIM_QP($from_header)); + $to = str_replace('|', '=7C', $this->DKIM_QP($to_header)); + $subject = str_replace('|', '=7C', $this->DKIM_QP($subject_header)) ; // Copied header fields (dkim-quoted-printable + $body = $this->DKIM_BodyC($body); + $DKIMlen = strlen($body) ; // Length of body + $DKIMb64 = base64_encode(pack("H*", sha1($body))) ; // Base64 of packed binary SHA-1 hash of body + $ident = ($this->DKIM_identity == '')? '' : " i=" . $this->DKIM_identity . ";"; + $dkimhdrs = "DKIM-Signature: v=1; a=" . $DKIMsignatureType . "; q=" . $DKIMquery . "; l=" . $DKIMlen . "; s=" . $this->DKIM_selector . ";\r\n". + "\tt=" . $DKIMtime . "; c=" . $DKIMcanonicalization . ";\r\n". + "\th=From:To:Subject;\r\n". + "\td=" . $this->DKIM_domain . ";" . $ident . "\r\n". + "\tz=$from\r\n". + "\t|$to\r\n". + "\t|$subject;\r\n". + "\tbh=" . $DKIMb64 . ";\r\n". + "\tb="; + $toSign = $this->DKIM_HeaderC($from_header . "\r\n" . $to_header . "\r\n" . $subject_header . "\r\n" . $dkimhdrs); + $signed = $this->DKIM_Sign($toSign); + return "X-PHPMAILER-DKIM: code.google.com/a/apache-extras.org/p/phpmailer/\r\n".$dkimhdrs.$signed."\r\n"; + } + + /** + * Perform callback + * @param boolean $isSent + * @param string $to + * @param string $cc + * @param string $bcc + * @param string $subject + * @param string $body + * @param string $from + */ + protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from=null) { + if (!empty($this->action_function) && is_callable($this->action_function)) { + $params = array($isSent, $to, $cc, $bcc, $subject, $body, $from); + call_user_func_array($this->action_function, $params); + } + } +} + +/** + * Exception handler for PHPMailer + * @package PHPMailer + */ +class phpmailerException extends Exception { + /** + * Prettify error message output + * @return string + */ + public function errorMessage() { + $errorMsg = '<strong>' . $this->getMessage() . "</strong><br />\n"; + return $errorMsg; + } +} +?> diff --git a/src/wp-includes/class-pop3.php b/src/wp-includes/class-pop3.php new file mode 100644 index 0000000..d0455d7 --- /dev/null +++ b/src/wp-includes/class-pop3.php @@ -0,0 +1,652 @@ +<?php +/** + * mail_fetch/setup.php + * + * Copyright (c) 1999-2011 CDI (cdi@thewebmasters.net) All Rights Reserved + * Modified by Philippe Mingo 2001-2009 mingo@rotedic.com + * An RFC 1939 compliant wrapper class for the POP3 protocol. + * + * Licensed under the GNU GPL. For full terms see the file COPYING. + * + * POP3 class + * + * @copyright 1999-2011 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @package plugins + * @subpackage mail_fetch + */ + +class POP3 { + var $ERROR = ''; // Error string. + + var $TIMEOUT = 60; // Default timeout before giving up on a + // network operation. + + var $COUNT = -1; // Mailbox msg count + + var $BUFFER = 512; // Socket buffer for socket fgets() calls. + // Per RFC 1939 the returned line a POP3 + // server can send is 512 bytes. + + var $FP = ''; // The connection to the server's + // file descriptor + + var $MAILSERVER = ''; // Set this to hard code the server name + + var $DEBUG = FALSE; // set to true to echo pop3 + // commands and responses to error_log + // this WILL log passwords! + + var $BANNER = ''; // Holds the banner returned by the + // pop server - used for apop() + + var $ALLOWAPOP = FALSE; // Allow or disallow apop() + // This must be set to true + // manually + + function POP3 ( $server = '', $timeout = '' ) { + settype($this->BUFFER,"integer"); + if( !empty($server) ) { + // Do not allow programs to alter MAILSERVER + // if it is already specified. They can get around + // this if they -really- want to, so don't count on it. + if(empty($this->MAILSERVER)) + $this->MAILSERVER = $server; + } + if(!empty($timeout)) { + settype($timeout,"integer"); + $this->TIMEOUT = $timeout; + if (!ini_get('safe_mode')) + set_time_limit($timeout); + } + return true; + } + + function update_timer () { + if (!ini_get('safe_mode')) + set_time_limit($this->TIMEOUT); + return true; + } + + function connect ($server, $port = 110) { + // Opens a socket to the specified server. Unless overridden, + // port defaults to 110. Returns true on success, false on fail + + // If MAILSERVER is set, override $server with it's value + + if (!isset($port) || !$port) {$port = 110;} + if(!empty($this->MAILSERVER)) + $server = $this->MAILSERVER; + + if(empty($server)){ + $this->ERROR = "POP3 connect: " . _("No server specified"); + unset($this->FP); + return false; + } + + $fp = @fsockopen("$server", $port, $errno, $errstr); + + if(!$fp) { + $this->ERROR = "POP3 connect: " . _("Error ") . "[$errno] [$errstr]"; + unset($this->FP); + return false; + } + + socket_set_blocking($fp,-1); + $this->update_timer(); + $reply = fgets($fp,$this->BUFFER); + $reply = $this->strip_clf($reply); + if($this->DEBUG) + error_log("POP3 SEND [connect: $server] GOT [$reply]",0); + if(!$this->is_ok($reply)) { + $this->ERROR = "POP3 connect: " . _("Error ") . "[$reply]"; + unset($this->FP); + return false; + } + $this->FP = $fp; + $this->BANNER = $this->parse_banner($reply); + return true; + } + + function user ($user = "") { + // Sends the USER command, returns true or false + + if( empty($user) ) { + $this->ERROR = "POP3 user: " . _("no login ID submitted"); + return false; + } elseif(!isset($this->FP)) { + $this->ERROR = "POP3 user: " . _("connection not established"); + return false; + } else { + $reply = $this->send_cmd("USER $user"); + if(!$this->is_ok($reply)) { + $this->ERROR = "POP3 user: " . _("Error ") . "[$reply]"; + return false; + } else + return true; + } + } + + function pass ($pass = "") { + // Sends the PASS command, returns # of msgs in mailbox, + // returns false (undef) on Auth failure + + if(empty($pass)) { + $this->ERROR = "POP3 pass: " . _("No password submitted"); + return false; + } elseif(!isset($this->FP)) { + $this->ERROR = "POP3 pass: " . _("connection not established"); + return false; + } else { + $reply = $this->send_cmd("PASS $pass"); + if(!$this->is_ok($reply)) { + $this->ERROR = "POP3 pass: " . _("Authentication failed") . " [$reply]"; + $this->quit(); + return false; + } else { + // Auth successful. + $count = $this->last("count"); + $this->COUNT = $count; + return $count; + } + } + } + + function apop ($login,$pass) { + // Attempts an APOP login. If this fails, it'll + // try a standard login. YOUR SERVER MUST SUPPORT + // THE USE OF THE APOP COMMAND! + // (apop is optional per rfc1939) + + if(!isset($this->FP)) { + $this->ERROR = "POP3 apop: " . _("No connection to server"); + return false; + } elseif(!$this->ALLOWAPOP) { + $retVal = $this->login($login,$pass); + return $retVal; + } elseif(empty($login)) { + $this->ERROR = "POP3 apop: " . _("No login ID submitted"); + return false; + } elseif(empty($pass)) { + $this->ERROR = "POP3 apop: " . _("No password submitted"); + return false; + } else { + $banner = $this->BANNER; + if( (!$banner) or (empty($banner)) ) { + $this->ERROR = "POP3 apop: " . _("No server banner") . ' - ' . _("abort"); + $retVal = $this->login($login,$pass); + return $retVal; + } else { + $AuthString = $banner; + $AuthString .= $pass; + $APOPString = md5($AuthString); + $cmd = "APOP $login $APOPString"; + $reply = $this->send_cmd($cmd); + if(!$this->is_ok($reply)) { + $this->ERROR = "POP3 apop: " . _("apop authentication failed") . ' - ' . _("abort"); + $retVal = $this->login($login,$pass); + return $retVal; + } else { + // Auth successful. + $count = $this->last("count"); + $this->COUNT = $count; + return $count; + } + } + } + } + + function login ($login = "", $pass = "") { + // Sends both user and pass. Returns # of msgs in mailbox or + // false on failure (or -1, if the error occurs while getting + // the number of messages.) + + if( !isset($this->FP) ) { + $this->ERROR = "POP3 login: " . _("No connection to server"); + return false; + } else { + $fp = $this->FP; + if( !$this->user( $login ) ) { + // Preserve the error generated by user() + return false; + } else { + $count = $this->pass($pass); + if( (!$count) || ($count == -1) ) { + // Preserve the error generated by last() and pass() + return false; + } else + return $count; + } + } + } + + function top ($msgNum, $numLines = "0") { + // Gets the header and first $numLines of the msg body + // returns data in an array with each returned line being + // an array element. If $numLines is empty, returns + // only the header information, and none of the body. + + if(!isset($this->FP)) { + $this->ERROR = "POP3 top: " . _("No connection to server"); + return false; + } + $this->update_timer(); + + $fp = $this->FP; + $buffer = $this->BUFFER; + $cmd = "TOP $msgNum $numLines"; + fwrite($fp, "TOP $msgNum $numLines\r\n"); + $reply = fgets($fp, $buffer); + $reply = $this->strip_clf($reply); + if($this->DEBUG) { + @error_log("POP3 SEND [$cmd] GOT [$reply]",0); + } + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 top: " . _("Error ") . "[$reply]"; + return false; + } + + $count = 0; + $MsgArray = array(); + + $line = fgets($fp,$buffer); + while ( !preg_match('/^\.\r\n/',$line)) + { + $MsgArray[$count] = $line; + $count++; + $line = fgets($fp,$buffer); + if(empty($line)) { break; } + } + + return $MsgArray; + } + + function pop_list ($msgNum = "") { + // If called with an argument, returns that msgs' size in octets + // No argument returns an associative array of undeleted + // msg numbers and their sizes in octets + + if(!isset($this->FP)) + { + $this->ERROR = "POP3 pop_list: " . _("No connection to server"); + return false; + } + $fp = $this->FP; + $Total = $this->COUNT; + if( (!$Total) or ($Total == -1) ) + { + return false; + } + if($Total == 0) + { + return array("0","0"); + // return -1; // mailbox empty + } + + $this->update_timer(); + + if(!empty($msgNum)) + { + $cmd = "LIST $msgNum"; + fwrite($fp,"$cmd\r\n"); + $reply = fgets($fp,$this->BUFFER); + $reply = $this->strip_clf($reply); + if($this->DEBUG) { + @error_log("POP3 SEND [$cmd] GOT [$reply]",0); + } + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 pop_list: " . _("Error ") . "[$reply]"; + return false; + } + list($junk,$num,$size) = preg_split('/\s+/',$reply); + return $size; + } + $cmd = "LIST"; + $reply = $this->send_cmd($cmd); + if(!$this->is_ok($reply)) + { + $reply = $this->strip_clf($reply); + $this->ERROR = "POP3 pop_list: " . _("Error ") . "[$reply]"; + return false; + } + $MsgArray = array(); + $MsgArray[0] = $Total; + for($msgC=1;$msgC <= $Total; $msgC++) + { + if($msgC > $Total) { break; } + $line = fgets($fp,$this->BUFFER); + $line = $this->strip_clf($line); + if(strpos($line, '.') === 0) + { + $this->ERROR = "POP3 pop_list: " . _("Premature end of list"); + return false; + } + list($thisMsg,$msgSize) = preg_split('/\s+/',$line); + settype($thisMsg,"integer"); + if($thisMsg != $msgC) + { + $MsgArray[$msgC] = "deleted"; + } + else + { + $MsgArray[$msgC] = $msgSize; + } + } + return $MsgArray; + } + + function get ($msgNum) { + // Retrieve the specified msg number. Returns an array + // where each line of the msg is an array element. + + if(!isset($this->FP)) + { + $this->ERROR = "POP3 get: " . _("No connection to server"); + return false; + } + + $this->update_timer(); + + $fp = $this->FP; + $buffer = $this->BUFFER; + $cmd = "RETR $msgNum"; + $reply = $this->send_cmd($cmd); + + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 get: " . _("Error ") . "[$reply]"; + return false; + } + + $count = 0; + $MsgArray = array(); + + $line = fgets($fp,$buffer); + while ( !preg_match('/^\.\r\n/',$line)) + { + if ( $line{0} == '.' ) { $line = substr($line,1); } + $MsgArray[$count] = $line; + $count++; + $line = fgets($fp,$buffer); + if(empty($line)) { break; } + } + return $MsgArray; + } + + function last ( $type = "count" ) { + // Returns the highest msg number in the mailbox. + // returns -1 on error, 0+ on success, if type != count + // results in a popstat() call (2 element array returned) + + $last = -1; + if(!isset($this->FP)) + { + $this->ERROR = "POP3 last: " . _("No connection to server"); + return $last; + } + + $reply = $this->send_cmd("STAT"); + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 last: " . _("Error ") . "[$reply]"; + return $last; + } + + $Vars = preg_split('/\s+/',$reply); + $count = $Vars[1]; + $size = $Vars[2]; + settype($count,"integer"); + settype($size,"integer"); + if($type != "count") + { + return array($count,$size); + } + return $count; + } + + function reset () { + // Resets the status of the remote server. This includes + // resetting the status of ALL msgs to not be deleted. + // This method automatically closes the connection to the server. + + if(!isset($this->FP)) + { + $this->ERROR = "POP3 reset: " . _("No connection to server"); + return false; + } + $reply = $this->send_cmd("RSET"); + if(!$this->is_ok($reply)) + { + // The POP3 RSET command -never- gives a -ERR + // response - if it ever does, something truely + // wild is going on. + + $this->ERROR = "POP3 reset: " . _("Error ") . "[$reply]"; + @error_log("POP3 reset: ERROR [$reply]",0); + } + $this->quit(); + return true; + } + + function send_cmd ( $cmd = "" ) + { + // Sends a user defined command string to the + // POP server and returns the results. Useful for + // non-compliant or custom POP servers. + // Do NOT includ the \r\n as part of your command + // string - it will be appended automatically. + + // The return value is a standard fgets() call, which + // will read up to $this->BUFFER bytes of data, until it + // encounters a new line, or EOF, whichever happens first. + + // This method works best if $cmd responds with only + // one line of data. + + if(!isset($this->FP)) + { + $this->ERROR = "POP3 send_cmd: " . _("No connection to server"); + return false; + } + + if(empty($cmd)) + { + $this->ERROR = "POP3 send_cmd: " . _("Empty command string"); + return ""; + } + + $fp = $this->FP; + $buffer = $this->BUFFER; + $this->update_timer(); + fwrite($fp,"$cmd\r\n"); + $reply = fgets($fp,$buffer); + $reply = $this->strip_clf($reply); + if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } + return $reply; + } + + function quit() { + // Closes the connection to the POP3 server, deleting + // any msgs marked as deleted. + + if(!isset($this->FP)) + { + $this->ERROR = "POP3 quit: " . _("connection does not exist"); + return false; + } + $fp = $this->FP; + $cmd = "QUIT"; + fwrite($fp,"$cmd\r\n"); + $reply = fgets($fp,$this->BUFFER); + $reply = $this->strip_clf($reply); + if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } + fclose($fp); + unset($this->FP); + return true; + } + + function popstat () { + // Returns an array of 2 elements. The number of undeleted + // msgs in the mailbox, and the size of the mbox in octets. + + $PopArray = $this->last("array"); + + if($PopArray == -1) { return false; } + + if( (!$PopArray) or (empty($PopArray)) ) + { + return false; + } + return $PopArray; + } + + function uidl ($msgNum = "") + { + // Returns the UIDL of the msg specified. If called with + // no arguments, returns an associative array where each + // undeleted msg num is a key, and the msg's uidl is the element + // Array element 0 will contain the total number of msgs + + if(!isset($this->FP)) { + $this->ERROR = "POP3 uidl: " . _("No connection to server"); + return false; + } + + $fp = $this->FP; + $buffer = $this->BUFFER; + + if(!empty($msgNum)) { + $cmd = "UIDL $msgNum"; + $reply = $this->send_cmd($cmd); + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 uidl: " . _("Error ") . "[$reply]"; + return false; + } + list ($ok,$num,$myUidl) = preg_split('/\s+/',$reply); + return $myUidl; + } else { + $this->update_timer(); + + $UIDLArray = array(); + $Total = $this->COUNT; + $UIDLArray[0] = $Total; + + if ($Total < 1) + { + return $UIDLArray; + } + $cmd = "UIDL"; + fwrite($fp, "UIDL\r\n"); + $reply = fgets($fp, $buffer); + $reply = $this->strip_clf($reply); + if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 uidl: " . _("Error ") . "[$reply]"; + return false; + } + + $line = ""; + $count = 1; + $line = fgets($fp,$buffer); + while ( !preg_match('/^\.\r\n/',$line)) { + list ($msg,$msgUidl) = preg_split('/\s+/',$line); + $msgUidl = $this->strip_clf($msgUidl); + if($count == $msg) { + $UIDLArray[$msg] = $msgUidl; + } + else + { + $UIDLArray[$count] = 'deleted'; + } + $count++; + $line = fgets($fp,$buffer); + } + } + return $UIDLArray; + } + + function delete ($msgNum = "") { + // Flags a specified msg as deleted. The msg will not + // be deleted until a quit() method is called. + + if(!isset($this->FP)) + { + $this->ERROR = "POP3 delete: " . _("No connection to server"); + return false; + } + if(empty($msgNum)) + { + $this->ERROR = "POP3 delete: " . _("No msg number submitted"); + return false; + } + $reply = $this->send_cmd("DELE $msgNum"); + if(!$this->is_ok($reply)) + { + $this->ERROR = "POP3 delete: " . _("Command failed ") . "[$reply]"; + return false; + } + return true; + } + + // ********************************************************* + + // The following methods are internal to the class. + + function is_ok ($cmd = "") { + // Return true or false on +OK or -ERR + + if( empty($cmd) ) + return false; + else + return( stripos($cmd, '+OK') !== false ); + } + + function strip_clf ($text = "") { + // Strips \r\n from server responses + + if(empty($text)) + return $text; + else { + $stripped = str_replace(array("\r","\n"),'',$text); + return $stripped; + } + } + + function parse_banner ( $server_text ) { + $outside = true; + $banner = ""; + $length = strlen($server_text); + for($count =0; $count < $length; $count++) + { + $digit = substr($server_text,$count,1); + if(!empty($digit)) { + if( (!$outside) && ($digit != '<') && ($digit != '>') ) + { + $banner .= $digit; + } + if ($digit == '<') + { + $outside = false; + } + if($digit == '>') + { + $outside = true; + } + } + } + $banner = $this->strip_clf($banner); // Just in case + return "<$banner>"; + } + +} // End class + +// For php4 compatibility +if (!function_exists("stripos")) { + function stripos($haystack, $needle){ + return strpos($haystack, stristr( $haystack, $needle )); + } +} diff --git a/src/wp-includes/class-simplepie.php b/src/wp-includes/class-simplepie.php new file mode 100644 index 0000000..ba6f28d --- /dev/null +++ b/src/wp-includes/class-simplepie.php @@ -0,0 +1,3119 @@ +<?php +if ( ! class_exists( 'SimplePie' ) ) : + +// Load classes we will need. +require ABSPATH . WPINC . '/SimplePie/Misc.php'; +require ABSPATH . WPINC . '/SimplePie/Cache.php'; +require ABSPATH . WPINC . '/SimplePie/File.php'; +require ABSPATH . WPINC . '/SimplePie/Sanitize.php'; +require ABSPATH . WPINC . '/SimplePie/Registry.php'; +require ABSPATH . WPINC . '/SimplePie/IRI.php'; +require ABSPATH . WPINC . '/SimplePie/Locator.php'; +require ABSPATH . WPINC . '/SimplePie/Content/Type/Sniffer.php'; +require ABSPATH . WPINC . '/SimplePie/XML/Declaration/Parser.php'; +require ABSPATH . WPINC . '/SimplePie/Parser.php'; +require ABSPATH . WPINC . '/SimplePie/Item.php'; +require ABSPATH . WPINC . '/SimplePie/Parse/Date.php'; +require ABSPATH . WPINC . '/SimplePie/Author.php'; + +/** + * WordPress autoloader for SimplePie. + * + * @since 3.5.0 + */ +function wp_simplepie_autoload( $class ) { + if ( 0 !== strpos( $class, 'SimplePie_' ) ) + return; + + $file = ABSPATH . WPINC . '/' . str_replace( '_', '/', $class ) . '.php'; + include $file; +} + +if ( function_exists( 'spl_autoload_register' ) ) { + /** + * We autoload classes we may not need. + * + * If SPL is disabled, we load all of SimplePie manually. + * + * Core.php is not loaded manually, because SimplePie_Core (a deprecated class) + * was never included in WordPress core. + */ + spl_autoload_register( 'wp_simplepie_autoload' ); +} else { + require ABSPATH . WPINC . '/SimplePie/Cache/Base.php'; + require ABSPATH . WPINC . '/SimplePie/Cache/DB.php'; + require ABSPATH . WPINC . '/SimplePie/Cache/File.php'; + require ABSPATH . WPINC . '/SimplePie/Cache/Memcache.php'; + require ABSPATH . WPINC . '/SimplePie/Cache/MySQL.php'; + require ABSPATH . WPINC . '/SimplePie/Caption.php'; + require ABSPATH . WPINC . '/SimplePie/Category.php'; + require ABSPATH . WPINC . '/SimplePie/Copyright.php'; + require ABSPATH . WPINC . '/SimplePie/Credit.php'; + require ABSPATH . WPINC . '/SimplePie/Decode/HTML/Entities.php'; + require ABSPATH . WPINC . '/SimplePie/Enclosure.php'; + require ABSPATH . WPINC . '/SimplePie/gzdecode.php'; + require ABSPATH . WPINC . '/SimplePie/HTTP/Parser.php'; + require ABSPATH . WPINC . '/SimplePie/Net/IPv6.php'; + require ABSPATH . WPINC . '/SimplePie/Rating.php'; + require ABSPATH . WPINC . '/SimplePie/Restriction.php'; + require ABSPATH . WPINC . '/SimplePie/Source.php'; +} + +/** + * SimplePie + * + * A PHP-Based RSS and Atom Feed Framework. + * Takes the hard work out of managing a complete RSS/Atom solution. + * + * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the SimplePie Team nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS + * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @package SimplePie + * @version 1.3.1 + * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @author Ryan Parman + * @author Geoffrey Sneddon + * @author Ryan McCue + * @link http://simplepie.org/ SimplePie + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + */ + +/** + * SimplePie Name + */ +define('SIMPLEPIE_NAME', 'SimplePie'); + +/** + * SimplePie Version + */ +define('SIMPLEPIE_VERSION', '1.3.1'); + +/** + * SimplePie Build + * @todo Hardcode for release (there's no need to have to call SimplePie_Misc::get_build() only every load of simplepie.inc) + */ +define('SIMPLEPIE_BUILD', gmdate('YmdHis', SimplePie_Misc::get_build())); + +/** + * SimplePie Website URL + */ +define('SIMPLEPIE_URL', 'http://simplepie.org'); + +/** + * SimplePie Useragent + * @see SimplePie::set_useragent() + */ +define('SIMPLEPIE_USERAGENT', SIMPLEPIE_NAME . '/' . SIMPLEPIE_VERSION . ' (Feed Parser; ' . SIMPLEPIE_URL . '; Allow like Gecko) Build/' . SIMPLEPIE_BUILD); + +/** + * SimplePie Linkback + */ +define('SIMPLEPIE_LINKBACK', '<a href="' . SIMPLEPIE_URL . '" title="' . SIMPLEPIE_NAME . ' ' . SIMPLEPIE_VERSION . '">' . SIMPLEPIE_NAME . '</a>'); + +/** + * No Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_NONE', 0); + +/** + * Feed Link Element Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', 1); + +/** + * Local Feed Extension Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', 2); + +/** + * Local Feed Body Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_LOCAL_BODY', 4); + +/** + * Remote Feed Extension Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', 8); + +/** + * Remote Feed Body Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_REMOTE_BODY', 16); + +/** + * All Feed Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_ALL', 31); + +/** + * No known feed type + */ +define('SIMPLEPIE_TYPE_NONE', 0); + +/** + * RSS 0.90 + */ +define('SIMPLEPIE_TYPE_RSS_090', 1); + +/** + * RSS 0.91 (Netscape) + */ +define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', 2); + +/** + * RSS 0.91 (Userland) + */ +define('SIMPLEPIE_TYPE_RSS_091_USERLAND', 4); + +/** + * RSS 0.91 (both Netscape and Userland) + */ +define('SIMPLEPIE_TYPE_RSS_091', 6); + +/** + * RSS 0.92 + */ +define('SIMPLEPIE_TYPE_RSS_092', 8); + +/** + * RSS 0.93 + */ +define('SIMPLEPIE_TYPE_RSS_093', 16); + +/** + * RSS 0.94 + */ +define('SIMPLEPIE_TYPE_RSS_094', 32); + +/** + * RSS 1.0 + */ +define('SIMPLEPIE_TYPE_RSS_10', 64); + +/** + * RSS 2.0 + */ +define('SIMPLEPIE_TYPE_RSS_20', 128); + +/** + * RDF-based RSS + */ +define('SIMPLEPIE_TYPE_RSS_RDF', 65); + +/** + * Non-RDF-based RSS (truly intended as syndication format) + */ +define('SIMPLEPIE_TYPE_RSS_SYNDICATION', 190); + +/** + * All RSS + */ +define('SIMPLEPIE_TYPE_RSS_ALL', 255); + +/** + * Atom 0.3 + */ +define('SIMPLEPIE_TYPE_ATOM_03', 256); + +/** + * Atom 1.0 + */ +define('SIMPLEPIE_TYPE_ATOM_10', 512); + +/** + * All Atom + */ +define('SIMPLEPIE_TYPE_ATOM_ALL', 768); + +/** + * All feed types + */ +define('SIMPLEPIE_TYPE_ALL', 1023); + +/** + * No construct + */ +define('SIMPLEPIE_CONSTRUCT_NONE', 0); + +/** + * Text construct + */ +define('SIMPLEPIE_CONSTRUCT_TEXT', 1); + +/** + * HTML construct + */ +define('SIMPLEPIE_CONSTRUCT_HTML', 2); + +/** + * XHTML construct + */ +define('SIMPLEPIE_CONSTRUCT_XHTML', 4); + +/** + * base64-encoded construct + */ +define('SIMPLEPIE_CONSTRUCT_BASE64', 8); + +/** + * IRI construct + */ +define('SIMPLEPIE_CONSTRUCT_IRI', 16); + +/** + * A construct that might be HTML + */ +define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', 32); + +/** + * All constructs + */ +define('SIMPLEPIE_CONSTRUCT_ALL', 63); + +/** + * Don't change case + */ +define('SIMPLEPIE_SAME_CASE', 1); + +/** + * Change to lowercase + */ +define('SIMPLEPIE_LOWERCASE', 2); + +/** + * Change to uppercase + */ +define('SIMPLEPIE_UPPERCASE', 4); + +/** + * PCRE for HTML attributes + */ +define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', '((?:[\x09\x0A\x0B\x0C\x0D\x20]+[^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?)*)[\x09\x0A\x0B\x0C\x0D\x20]*'); + +/** + * PCRE for XML attributes + */ +define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*'); + +/** + * XML Namespace + */ +define('SIMPLEPIE_NAMESPACE_XML', 'http://www.w3.org/XML/1998/namespace'); + +/** + * Atom 1.0 Namespace + */ +define('SIMPLEPIE_NAMESPACE_ATOM_10', 'http://www.w3.org/2005/Atom'); + +/** + * Atom 0.3 Namespace + */ +define('SIMPLEPIE_NAMESPACE_ATOM_03', 'http://purl.org/atom/ns#'); + +/** + * RDF Namespace + */ +define('SIMPLEPIE_NAMESPACE_RDF', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); + +/** + * RSS 0.90 Namespace + */ +define('SIMPLEPIE_NAMESPACE_RSS_090', 'http://my.netscape.com/rdf/simple/0.9/'); + +/** + * RSS 1.0 Namespace + */ +define('SIMPLEPIE_NAMESPACE_RSS_10', 'http://purl.org/rss/1.0/'); + +/** + * RSS 1.0 Content Module Namespace + */ +define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', 'http://purl.org/rss/1.0/modules/content/'); + +/** + * RSS 2.0 Namespace + * (Stupid, I know, but I'm certain it will confuse people less with support.) + */ +define('SIMPLEPIE_NAMESPACE_RSS_20', ''); + +/** + * DC 1.0 Namespace + */ +define('SIMPLEPIE_NAMESPACE_DC_10', 'http://purl.org/dc/elements/1.0/'); + +/** + * DC 1.1 Namespace + */ +define('SIMPLEPIE_NAMESPACE_DC_11', 'http://purl.org/dc/elements/1.1/'); + +/** + * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace + */ +define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', 'http://www.w3.org/2003/01/geo/wgs84_pos#'); + +/** + * GeoRSS Namespace + */ +define('SIMPLEPIE_NAMESPACE_GEORSS', 'http://www.georss.org/georss'); + +/** + * Media RSS Namespace + */ +define('SIMPLEPIE_NAMESPACE_MEDIARSS', 'http://search.yahoo.com/mrss/'); + +/** + * Wrong Media RSS Namespace. Caused by a long-standing typo in the spec. + */ +define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', 'http://search.yahoo.com/mrss'); + +/** + * Wrong Media RSS Namespace #2. New namespace introduced in Media RSS 1.5. + */ +define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG2', 'http://video.search.yahoo.com/mrss'); + +/** + * Wrong Media RSS Namespace #3. A possible typo of the Media RSS 1.5 namespace. + */ +define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG3', 'http://video.search.yahoo.com/mrss/'); + +/** + * Wrong Media RSS Namespace #4. New spec location after the RSS Advisory Board takes it over, but not a valid namespace. + */ +define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG4', 'http://www.rssboard.org/media-rss'); + +/** + * Wrong Media RSS Namespace #5. A possible typo of the RSS Advisory Board URL. + */ +define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG5', 'http://www.rssboard.org/media-rss/'); + +/** + * iTunes RSS Namespace + */ +define('SIMPLEPIE_NAMESPACE_ITUNES', 'http://www.itunes.com/dtds/podcast-1.0.dtd'); + +/** + * XHTML Namespace + */ +define('SIMPLEPIE_NAMESPACE_XHTML', 'http://www.w3.org/1999/xhtml'); + +/** + * IANA Link Relations Registry + */ +define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', 'http://www.iana.org/assignments/relation/'); + +/** + * No file source + */ +define('SIMPLEPIE_FILE_SOURCE_NONE', 0); + +/** + * Remote file source + */ +define('SIMPLEPIE_FILE_SOURCE_REMOTE', 1); + +/** + * Local file source + */ +define('SIMPLEPIE_FILE_SOURCE_LOCAL', 2); + +/** + * fsockopen() file source + */ +define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', 4); + +/** + * cURL file source + */ +define('SIMPLEPIE_FILE_SOURCE_CURL', 8); + +/** + * file_get_contents() file source + */ +define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', 16); + + + +/** + * SimplePie + * + * @package SimplePie + * @subpackage API + */ +class SimplePie +{ + /** + * @var array Raw data + * @access private + */ + public $data = array(); + + /** + * @var mixed Error string + * @access private + */ + public $error; + + /** + * @var object Instance of SimplePie_Sanitize (or other class) + * @see SimplePie::set_sanitize_class() + * @access private + */ + public $sanitize; + + /** + * @var string SimplePie Useragent + * @see SimplePie::set_useragent() + * @access private + */ + public $useragent = SIMPLEPIE_USERAGENT; + + /** + * @var string Feed URL + * @see SimplePie::set_feed_url() + * @access private + */ + public $feed_url; + + /** + * @var object Instance of SimplePie_File to use as a feed + * @see SimplePie::set_file() + * @access private + */ + public $file; + + /** + * @var string Raw feed data + * @see SimplePie::set_raw_data() + * @access private + */ + public $raw_data; + + /** + * @var int Timeout for fetching remote files + * @see SimplePie::set_timeout() + * @access private + */ + public $timeout = 10; + + /** + * @var bool Forces fsockopen() to be used for remote files instead + * of cURL, even if a new enough version is installed + * @see SimplePie::force_fsockopen() + * @access private + */ + public $force_fsockopen = false; + + /** + * @var bool Force the given data/URL to be treated as a feed no matter what + * it appears like + * @see SimplePie::force_feed() + * @access private + */ + public $force_feed = false; + + /** + * @var bool Enable/Disable Caching + * @see SimplePie::enable_cache() + * @access private + */ + public $cache = true; + + /** + * @var int Cache duration (in seconds) + * @see SimplePie::set_cache_duration() + * @access private + */ + public $cache_duration = 3600; + + /** + * @var int Auto-discovery cache duration (in seconds) + * @see SimplePie::set_autodiscovery_cache_duration() + * @access private + */ + public $autodiscovery_cache_duration = 604800; // 7 Days. + + /** + * @var string Cache location (relative to executing script) + * @see SimplePie::set_cache_location() + * @access private + */ + public $cache_location = './cache'; + + /** + * @var string Function that creates the cache filename + * @see SimplePie::set_cache_name_function() + * @access private + */ + public $cache_name_function = 'md5'; + + /** + * @var bool Reorder feed by date descending + * @see SimplePie::enable_order_by_date() + * @access private + */ + public $order_by_date = true; + + /** + * @var mixed Force input encoding to be set to the follow value + * (false, or anything type-cast to false, disables this feature) + * @see SimplePie::set_input_encoding() + * @access private + */ + public $input_encoding = false; + + /** + * @var int Feed Autodiscovery Level + * @see SimplePie::set_autodiscovery_level() + * @access private + */ + public $autodiscovery = SIMPLEPIE_LOCATOR_ALL; + + /** + * Class registry object + * + * @var SimplePie_Registry + */ + public $registry; + + /** + * @var int Maximum number of feeds to check with autodiscovery + * @see SimplePie::set_max_checked_feeds() + * @access private + */ + public $max_checked_feeds = 10; + + /** + * @var array All the feeds found during the autodiscovery process + * @see SimplePie::get_all_discovered_feeds() + * @access private + */ + public $all_discovered_feeds = array(); + + /** + * @var string Web-accessible path to the handler_image.php file. + * @see SimplePie::set_image_handler() + * @access private + */ + public $image_handler = ''; + + /** + * @var array Stores the URLs when multiple feeds are being initialized. + * @see SimplePie::set_feed_url() + * @access private + */ + public $multifeed_url = array(); + + /** + * @var array Stores SimplePie objects when multiple feeds initialized. + * @access private + */ + public $multifeed_objects = array(); + + /** + * @var array Stores the get_object_vars() array for use with multifeeds. + * @see SimplePie::set_feed_url() + * @access private + */ + public $config_settings = null; + + /** + * @var integer Stores the number of items to return per-feed with multifeeds. + * @see SimplePie::set_item_limit() + * @access private + */ + public $item_limit = 0; + + /** + * @var array Stores the default attributes to be stripped by strip_attributes(). + * @see SimplePie::strip_attributes() + * @access private + */ + public $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); + + /** + * @var array Stores the default tags to be stripped by strip_htmltags(). + * @see SimplePie::strip_htmltags() + * @access private + */ + public $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); + + /** + * The SimplePie class contains feed level data and options + * + * To use SimplePie, create the SimplePie object with no parameters. You can + * then set configuration options using the provided methods. After setting + * them, you must initialise the feed using $feed->init(). At that point the + * object's methods and properties will be available to you. + * + * Previously, it was possible to pass in the feed URL along with cache + * options directly into the constructor. This has been removed as of 1.3 as + * it caused a lot of confusion. + * + * @since 1.0 Preview Release + */ + public function __construct() + { + if (version_compare(PHP_VERSION, '5.2', '<')) + { + trigger_error('PHP 4.x, 5.0 and 5.1 are no longer supported. Please upgrade to PHP 5.2 or newer.'); + die(); + } + + // Other objects, instances created here so we can set options on them + $this->sanitize = new SimplePie_Sanitize(); + $this->registry = new SimplePie_Registry(); + + if (func_num_args() > 0) + { + $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING; + trigger_error('Passing parameters to the constructor is no longer supported. Please use set_feed_url(), set_cache_location(), and set_cache_location() directly.', $level); + + $args = func_get_args(); + switch (count($args)) { + case 3: + $this->set_cache_duration($args[2]); + case 2: + $this->set_cache_location($args[1]); + case 1: + $this->set_feed_url($args[0]); + $this->init(); + } + } + } + + /** + * Used for converting object to a string + */ + public function __toString() + { + return md5(serialize($this->data)); + } + + /** + * Remove items that link back to this before destroying this object + */ + public function __destruct() + { + if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode')) + { + if (!empty($this->data['items'])) + { + foreach ($this->data['items'] as $item) + { + $item->__destruct(); + } + unset($item, $this->data['items']); + } + if (!empty($this->data['ordered_items'])) + { + foreach ($this->data['ordered_items'] as $item) + { + $item->__destruct(); + } + unset($item, $this->data['ordered_items']); + } + } + } + + /** + * Force the given data/URL to be treated as a feed + * + * This tells SimplePie to ignore the content-type provided by the server. + * Be careful when using this option, as it will also disable autodiscovery. + * + * @since 1.1 + * @param bool $enable Force the given data/URL to be treated as a feed + */ + public function force_feed($enable = false) + { + $this->force_feed = (bool) $enable; + } + + /** + * Set the URL of the feed you want to parse + * + * This allows you to enter the URL of the feed you want to parse, or the + * website you want to try to use auto-discovery on. This takes priority + * over any set raw data. + * + * You can set multiple feeds to mash together by passing an array instead + * of a string for the $url. Remember that with each additional feed comes + * additional processing and resources. + * + * @since 1.0 Preview Release + * @see set_raw_data() + * @param string|array $url This is the URL (or array of URLs) that you want to parse. + */ + public function set_feed_url($url) + { + $this->multifeed_url = array(); + if (is_array($url)) + { + foreach ($url as $value) + { + $this->multifeed_url[] = $this->registry->call('Misc', 'fix_protocol', array($value, 1)); + } + } + else + { + $this->feed_url = $this->registry->call('Misc', 'fix_protocol', array($url, 1)); + } + } + + /** + * Set an instance of {@see SimplePie_File} to use as a feed + * + * @param SimplePie_File &$file + * @return bool True on success, false on failure + */ + public function set_file(&$file) + { + if ($file instanceof SimplePie_File) + { + $this->feed_url = $file->url; + $this->file =& $file; + return true; + } + return false; + } + + /** + * Set the raw XML data to parse + * + * Allows you to use a string of RSS/Atom data instead of a remote feed. + * + * If you have a feed available as a string in PHP, you can tell SimplePie + * to parse that data string instead of a remote feed. Any set feed URL + * takes precedence. + * + * @since 1.0 Beta 3 + * @param string $data RSS or Atom data as a string. + * @see set_feed_url() + */ + public function set_raw_data($data) + { + $this->raw_data = $data; + } + + /** + * Set the the default timeout for fetching remote feeds + * + * This allows you to change the maximum time the feed's server to respond + * and send the feed back. + * + * @since 1.0 Beta 3 + * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed. + */ + public function set_timeout($timeout = 10) + { + $this->timeout = (int) $timeout; + } + + /** + * Force SimplePie to use fsockopen() instead of cURL + * + * @since 1.0 Beta 3 + * @param bool $enable Force fsockopen() to be used + */ + public function force_fsockopen($enable = false) + { + $this->force_fsockopen = (bool) $enable; + } + + /** + * Enable/disable caching in SimplePie. + * + * This option allows you to disable caching all-together in SimplePie. + * However, disabling the cache can lead to longer load times. + * + * @since 1.0 Preview Release + * @param bool $enable Enable caching + */ + public function enable_cache($enable = true) + { + $this->cache = (bool) $enable; + } + + /** + * Set the length of time (in seconds) that the contents of a feed will be + * cached + * + * @param int $seconds The feed content cache duration + */ + public function set_cache_duration($seconds = 3600) + { + $this->cache_duration = (int) $seconds; + } + + /** + * Set the length of time (in seconds) that the autodiscovered feed URL will + * be cached + * + * @param int $seconds The autodiscovered feed URL cache duration. + */ + public function set_autodiscovery_cache_duration($seconds = 604800) + { + $this->autodiscovery_cache_duration = (int) $seconds; + } + + /** + * Set the file system location where the cached files should be stored + * + * @param string $location The file system location. + */ + public function set_cache_location($location = './cache') + { + $this->cache_location = (string) $location; + } + + /** + * Set whether feed items should be sorted into reverse chronological order + * + * @param bool $enable Sort as reverse chronological order. + */ + public function enable_order_by_date($enable = true) + { + $this->order_by_date = (bool) $enable; + } + + /** + * Set the character encoding used to parse the feed + * + * This overrides the encoding reported by the feed, however it will fall + * back to the normal encoding detection if the override fails + * + * @param string $encoding Character encoding + */ + public function set_input_encoding($encoding = false) + { + if ($encoding) + { + $this->input_encoding = (string) $encoding; + } + else + { + $this->input_encoding = false; + } + } + + /** + * Set how much feed autodiscovery to do + * + * @see SIMPLEPIE_LOCATOR_NONE + * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY + * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION + * @see SIMPLEPIE_LOCATOR_LOCAL_BODY + * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION + * @see SIMPLEPIE_LOCATOR_REMOTE_BODY + * @see SIMPLEPIE_LOCATOR_ALL + * @param int $level Feed Autodiscovery Level (level can be a combination of the above constants, see bitwise OR operator) + */ + public function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL) + { + $this->autodiscovery = (int) $level; + } + + /** + * Get the class registry + * + * Use this to override SimplePie's default classes + * @see SimplePie_Registry + * @return SimplePie_Registry + */ + public function &get_registry() + { + return $this->registry; + } + + /**#@+ + * Useful when you are overloading or extending SimplePie's default classes. + * + * @deprecated Use {@see get_registry()} instead + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + * @param string $class Name of custom class + * @return boolean True on success, false otherwise + */ + /** + * Set which class SimplePie uses for caching + */ + public function set_cache_class($class = 'SimplePie_Cache') + { + return $this->registry->register('Cache', $class, true); + } + + /** + * Set which class SimplePie uses for auto-discovery + */ + public function set_locator_class($class = 'SimplePie_Locator') + { + return $this->registry->register('Locator', $class, true); + } + + /** + * Set which class SimplePie uses for XML parsing + */ + public function set_parser_class($class = 'SimplePie_Parser') + { + return $this->registry->register('Parser', $class, true); + } + + /** + * Set which class SimplePie uses for remote file fetching + */ + public function set_file_class($class = 'SimplePie_File') + { + return $this->registry->register('File', $class, true); + } + + /** + * Set which class SimplePie uses for data sanitization + */ + public function set_sanitize_class($class = 'SimplePie_Sanitize') + { + return $this->registry->register('Sanitize', $class, true); + } + + /** + * Set which class SimplePie uses for handling feed items + */ + public function set_item_class($class = 'SimplePie_Item') + { + return $this->registry->register('Item', $class, true); + } + + /** + * Set which class SimplePie uses for handling author data + */ + public function set_author_class($class = 'SimplePie_Author') + { + return $this->registry->register('Author', $class, true); + } + + /** + * Set which class SimplePie uses for handling category data + */ + public function set_category_class($class = 'SimplePie_Category') + { + return $this->registry->register('Category', $class, true); + } + + /** + * Set which class SimplePie uses for feed enclosures + */ + public function set_enclosure_class($class = 'SimplePie_Enclosure') + { + return $this->registry->register('Enclosure', $class, true); + } + + /** + * Set which class SimplePie uses for `<media:text>` captions + */ + public function set_caption_class($class = 'SimplePie_Caption') + { + return $this->registry->register('Caption', $class, true); + } + + /** + * Set which class SimplePie uses for `<media:copyright>` + */ + public function set_copyright_class($class = 'SimplePie_Copyright') + { + return $this->registry->register('Copyright', $class, true); + } + + /** + * Set which class SimplePie uses for `<media:credit>` + */ + public function set_credit_class($class = 'SimplePie_Credit') + { + return $this->registry->register('Credit', $class, true); + } + + /** + * Set which class SimplePie uses for `<media:rating>` + */ + public function set_rating_class($class = 'SimplePie_Rating') + { + return $this->registry->register('Rating', $class, true); + } + + /** + * Set which class SimplePie uses for `<media:restriction>` + */ + public function set_restriction_class($class = 'SimplePie_Restriction') + { + return $this->registry->register('Restriction', $class, true); + } + + /** + * Set which class SimplePie uses for content-type sniffing + */ + public function set_content_type_sniffer_class($class = 'SimplePie_Content_Type_Sniffer') + { + return $this->registry->register('Content_Type_Sniffer', $class, true); + } + + /** + * Set which class SimplePie uses item sources + */ + public function set_source_class($class = 'SimplePie_Source') + { + return $this->registry->register('Source', $class, true); + } + /**#@-*/ + + /** + * Set the user agent string + * + * @param string $ua New user agent string. + */ + public function set_useragent($ua = SIMPLEPIE_USERAGENT) + { + $this->useragent = (string) $ua; + } + + /** + * Set callback function to create cache filename with + * + * @param mixed $function Callback function + */ + public function set_cache_name_function($function = 'md5') + { + if (is_callable($function)) + { + $this->cache_name_function = $function; + } + } + + /** + * Set options to make SP as fast as possible + * + * Forgoes a substantial amount of data sanitization in favor of speed. This + * turns SimplePie into a dumb parser of feeds. + * + * @param bool $set Whether to set them or not + */ + public function set_stupidly_fast($set = false) + { + if ($set) + { + $this->enable_order_by_date(false); + $this->remove_div(false); + $this->strip_comments(false); + $this->strip_htmltags(false); + $this->strip_attributes(false); + $this->set_image_handler(false); + } + } + + /** + * Set maximum number of feeds to check with autodiscovery + * + * @param int $max Maximum number of feeds to check + */ + public function set_max_checked_feeds($max = 10) + { + $this->max_checked_feeds = (int) $max; + } + + public function remove_div($enable = true) + { + $this->sanitize->remove_div($enable); + } + + public function strip_htmltags($tags = '', $encode = null) + { + if ($tags === '') + { + $tags = $this->strip_htmltags; + } + $this->sanitize->strip_htmltags($tags); + if ($encode !== null) + { + $this->sanitize->encode_instead_of_strip($tags); + } + } + + public function encode_instead_of_strip($enable = true) + { + $this->sanitize->encode_instead_of_strip($enable); + } + + public function strip_attributes($attribs = '') + { + if ($attribs === '') + { + $attribs = $this->strip_attributes; + } + $this->sanitize->strip_attributes($attribs); + } + + /** + * Set the output encoding + * + * Allows you to override SimplePie's output to match that of your webpage. + * This is useful for times when your webpages are not being served as + * UTF-8. This setting will be obeyed by {@see handle_content_type()}, and + * is similar to {@see set_input_encoding()}. + * + * It should be noted, however, that not all character encodings can support + * all characters. If your page is being served as ISO-8859-1 and you try + * to display a Japanese feed, you'll likely see garbled characters. + * Because of this, it is highly recommended to ensure that your webpages + * are served as UTF-8. + * + * The number of supported character encodings depends on whether your web + * host supports {@link http://php.net/mbstring mbstring}, + * {@link http://php.net/iconv iconv}, or both. See + * {@link http://simplepie.org/wiki/faq/Supported_Character_Encodings} for + * more information. + * + * @param string $encoding + */ + public function set_output_encoding($encoding = 'UTF-8') + { + $this->sanitize->set_output_encoding($encoding); + } + + public function strip_comments($strip = false) + { + $this->sanitize->strip_comments($strip); + } + + /** + * Set element/attribute key/value pairs of HTML attributes + * containing URLs that need to be resolved relative to the feed + * + * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite, + * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite, + * |q|@cite + * + * @since 1.0 + * @param array|null $element_attribute Element/attribute key/value pairs, null for default + */ + public function set_url_replacements($element_attribute = null) + { + $this->sanitize->set_url_replacements($element_attribute); + } + + /** + * Set the handler to enable the display of cached images. + * + * @param str $page Web-accessible path to the handler_image.php file. + * @param str $qs The query string that the value should be passed to. + */ + public function set_image_handler($page = false, $qs = 'i') + { + if ($page !== false) + { + $this->sanitize->set_image_handler($page . '?' . $qs . '='); + } + else + { + $this->image_handler = ''; + } + } + + /** + * Set the limit for items returned per-feed with multifeeds + * + * @param integer $limit The maximum number of items to return. + */ + public function set_item_limit($limit = 0) + { + $this->item_limit = (int) $limit; + } + + /** + * Initialize the feed object + * + * This is what makes everything happen. Period. This is where all of the + * configuration options get processed, feeds are fetched, cached, and + * parsed, and all of that other good stuff. + * + * @return boolean True if successful, false otherwise + */ + public function init() + { + // Check absolute bare minimum requirements. + if (!extension_loaded('xml') || !extension_loaded('pcre')) + { + return false; + } + // Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader. + elseif (!extension_loaded('xmlreader')) + { + static $xml_is_sane = null; + if ($xml_is_sane === null) + { + $parser_check = xml_parser_create(); + xml_parse_into_struct($parser_check, '<foo>&</foo>', $values); + xml_parser_free($parser_check); + $xml_is_sane = isset($values[0]['value']); + } + if (!$xml_is_sane) + { + return false; + } + } + + if (method_exists($this->sanitize, 'set_registry')) + { + $this->sanitize->set_registry($this->registry); + } + + // Pass whatever was set with config options over to the sanitizer. + // Pass the classes in for legacy support; new classes should use the registry instead + $this->sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->registry->get_class('Cache')); + $this->sanitize->pass_file_data($this->registry->get_class('File'), $this->timeout, $this->useragent, $this->force_fsockopen); + + if (!empty($this->multifeed_url)) + { + $i = 0; + $success = 0; + $this->multifeed_objects = array(); + $this->error = array(); + foreach ($this->multifeed_url as $url) + { + $this->multifeed_objects[$i] = clone $this; + $this->multifeed_objects[$i]->set_feed_url($url); + $single_success = $this->multifeed_objects[$i]->init(); + $success |= $single_success; + if (!$single_success) + { + $this->error[$i] = $this->multifeed_objects[$i]->error(); + } + $i++; + } + return (bool) $success; + } + elseif ($this->feed_url === null && $this->raw_data === null) + { + return false; + } + + $this->error = null; + $this->data = array(); + $this->multifeed_objects = array(); + $cache = false; + + if ($this->feed_url !== null) + { + $parsed_feed_url = $this->registry->call('Misc', 'parse_url', array($this->feed_url)); + + // Decide whether to enable caching + if ($this->cache && $parsed_feed_url['scheme'] !== '') + { + $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc')); + } + + // Fetch the data via SimplePie_File into $this->raw_data + if (($fetched = $this->fetch_data($cache)) === true) + { + return true; + } + elseif ($fetched === false) { + return false; + } + + list($headers, $sniffed) = $fetched; + } + + // Set up array of possible encodings + $encodings = array(); + + // First check to see if input has been overridden. + if ($this->input_encoding !== false) + { + $encodings[] = $this->input_encoding; + } + + $application_types = array('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity'); + $text_types = array('text/xml', 'text/xml-external-parsed-entity'); + + // RFC 3023 (only applies to sniffed content) + if (isset($sniffed)) + { + if (in_array($sniffed, $application_types) || substr($sniffed, 0, 12) === 'application/' && substr($sniffed, -4) === '+xml') + { + if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) + { + $encodings[] = strtoupper($charset[1]); + } + $encodings = array_merge($encodings, $this->registry->call('Misc', 'xml_encoding', array($this->raw_data, &$this->registry))); + $encodings[] = 'UTF-8'; + } + elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml') + { + if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) + { + $encodings[] = $charset[1]; + } + $encodings[] = 'US-ASCII'; + } + // Text MIME-type default + elseif (substr($sniffed, 0, 5) === 'text/') + { + $encodings[] = 'US-ASCII'; + } + } + + // Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1 + $encodings = array_merge($encodings, $this->registry->call('Misc', 'xml_encoding', array($this->raw_data, &$this->registry))); + $encodings[] = 'UTF-8'; + $encodings[] = 'ISO-8859-1'; + + // There's no point in trying an encoding twice + $encodings = array_unique($encodings); + + // Loop through each possible encoding, till we return something, or run out of possibilities + foreach ($encodings as $encoding) + { + // Change the encoding to UTF-8 (as we always use UTF-8 internally) + if ($utf8_data = $this->registry->call('Misc', 'change_encoding', array($this->raw_data, $encoding, 'UTF-8'))) + { + // Create new parser + $parser = $this->registry->create('Parser'); + + // If it's parsed fine + if ($parser->parse($utf8_data, 'UTF-8')) + { + $this->data = $parser->get_data(); + if (!($this->get_type() & ~SIMPLEPIE_TYPE_NONE)) + { + $this->error = "A feed could not be found at $this->feed_url. This does not appear to be a valid RSS or Atom feed."; + $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__)); + return false; + } + + if (isset($headers)) + { + $this->data['headers'] = $headers; + } + $this->data['build'] = SIMPLEPIE_BUILD; + + // Cache the file if caching is enabled + if ($cache && !$cache->save($this)) + { + trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); + } + return true; + } + } + } + + if (isset($parser)) + { + // We have an error, just set SimplePie_Misc::error to it and quit + $this->error = sprintf('This XML document is invalid, likely due to invalid characters. XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column()); + } + else + { + $this->error = 'The data could not be converted to UTF-8. You MUST have either the iconv or mbstring extension installed. Upgrading to PHP 5.x (which includes iconv) is highly recommended.'; + } + + $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__)); + + return false; + } + + /** + * Fetch the data via SimplePie_File + * + * If the data is already cached, attempt to fetch it from there instead + * @param SimplePie_Cache|false $cache Cache handler, or false to not load from the cache + * @return array|true Returns true if the data was loaded from the cache, or an array of HTTP headers and sniffed type + */ + protected function fetch_data(&$cache) + { + // If it's enabled, use the cache + if ($cache) + { + // Load the Cache + $this->data = $cache->load(); + if (!empty($this->data)) + { + // If the cache is for an outdated build of SimplePie + if (!isset($this->data['build']) || $this->data['build'] !== SIMPLEPIE_BUILD) + { + $cache->unlink(); + $this->data = array(); + } + // If we've hit a collision just rerun it with caching disabled + elseif (isset($this->data['url']) && $this->data['url'] !== $this->feed_url) + { + $cache = false; + $this->data = array(); + } + // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL. + elseif (isset($this->data['feed_url'])) + { + // If the autodiscovery cache is still valid use it. + if ($cache->mtime() + $this->autodiscovery_cache_duration > time()) + { + // Do not need to do feed autodiscovery yet. + if ($this->data['feed_url'] !== $this->data['url']) + { + $this->set_feed_url($this->data['feed_url']); + return $this->init(); + } + + $cache->unlink(); + $this->data = array(); + } + } + // Check if the cache has been updated + elseif ($cache->mtime() + $this->cache_duration < time()) + { + // If we have last-modified and/or etag set + if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag'])) + { + $headers = array( + 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', + ); + if (isset($this->data['headers']['last-modified'])) + { + $headers['if-modified-since'] = $this->data['headers']['last-modified']; + } + if (isset($this->data['headers']['etag'])) + { + $headers['if-none-match'] = $this->data['headers']['etag']; + } + + $file = $this->registry->create('File', array($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen)); + + if ($file->success) + { + if ($file->status_code === 304) + { + $cache->touch(); + return true; + } + } + else + { + unset($file); + } + } + } + // If the cache is still valid, just return true + else + { + $this->raw_data = false; + return true; + } + } + // If the cache is empty, delete it + else + { + $cache->unlink(); + $this->data = array(); + } + } + // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it. + if (!isset($file)) + { + if ($this->file instanceof SimplePie_File && $this->file->url === $this->feed_url) + { + $file =& $this->file; + } + else + { + $headers = array( + 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', + ); + $file = $this->registry->create('File', array($this->feed_url, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen)); + } + } + // If the file connection has an error, set SimplePie::error to that and quit + if (!$file->success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) + { + $this->error = $file->error; + return !empty($this->data); + } + + if (!$this->force_feed) + { + // Check if the supplied URL is a feed, if it isn't, look for it. + $locate = $this->registry->create('Locator', array(&$file, $this->timeout, $this->useragent, $this->max_checked_feeds)); + + if (!$locate->is_feed($file)) + { + // We need to unset this so that if SimplePie::set_file() has been called that object is untouched + unset($file); + try + { + if (!($file = $locate->find($this->autodiscovery, $this->all_discovered_feeds))) + { + $this->error = "A feed could not be found at $this->feed_url. A feed with an invalid mime type may fall victim to this error, or " . SIMPLEPIE_NAME . " was unable to auto-discover it.. Use force_feed() if you are certain this URL is a real feed."; + $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__)); + return false; + } + } + catch (SimplePie_Exception $e) + { + // This is usually because DOMDocument doesn't exist + $this->error = $e->getMessage(); + $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, $e->getFile(), $e->getLine())); + return false; + } + if ($cache) + { + $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD); + if (!$cache->save($this)) + { + trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); + } + $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc')); + } + $this->feed_url = $file->url; + } + $locate = null; + } + + $this->raw_data = $file->body; + + $headers = $file->headers; + $sniffer = $this->registry->create('Content_Type_Sniffer', array(&$file)); + $sniffed = $sniffer->get_type(); + + return array($headers, $sniffed); + } + + /** + * Get the error message for the occured error + * + * @return string|array Error message, or array of messages for multifeeds + */ + public function error() + { + return $this->error; + } + + /** + * Get the raw XML + * + * This is the same as the old `$feed->enable_xml_dump(true)`, but returns + * the data instead of printing it. + * + * @return string|boolean Raw XML data, false if the cache is used + */ + public function get_raw_data() + { + return $this->raw_data; + } + + /** + * Get the character encoding used for output + * + * @since Preview Release + * @return string + */ + public function get_encoding() + { + return $this->sanitize->output_encoding; + } + + /** + * Send the content-type header with correct encoding + * + * This method ensures that the SimplePie-enabled page is being served with + * the correct {@link http://www.iana.org/assignments/media-types/ mime-type} + * and character encoding HTTP headers (character encoding determined by the + * {@see set_output_encoding} config option). + * + * This won't work properly if any content or whitespace has already been + * sent to the browser, because it relies on PHP's + * {@link http://php.net/header header()} function, and these are the + * circumstances under which the function works. + * + * Because it's setting these settings for the entire page (as is the nature + * of HTTP headers), this should only be used once per page (again, at the + * top). + * + * @param string $mime MIME type to serve the page as + */ + public function handle_content_type($mime = 'text/html') + { + if (!headers_sent()) + { + $header = "Content-type: $mime;"; + if ($this->get_encoding()) + { + $header .= ' charset=' . $this->get_encoding(); + } + else + { + $header .= ' charset=UTF-8'; + } + header($header); + } + } + + /** + * Get the type of the feed + * + * This returns a SIMPLEPIE_TYPE_* constant, which can be tested against + * using {@link http://php.net/language.operators.bitwise bitwise operators} + * + * @since 0.8 (usage changed to using constants in 1.0) + * @see SIMPLEPIE_TYPE_NONE Unknown. + * @see SIMPLEPIE_TYPE_RSS_090 RSS 0.90. + * @see SIMPLEPIE_TYPE_RSS_091_NETSCAPE RSS 0.91 (Netscape). + * @see SIMPLEPIE_TYPE_RSS_091_USERLAND RSS 0.91 (Userland). + * @see SIMPLEPIE_TYPE_RSS_091 RSS 0.91. + * @see SIMPLEPIE_TYPE_RSS_092 RSS 0.92. + * @see SIMPLEPIE_TYPE_RSS_093 RSS 0.93. + * @see SIMPLEPIE_TYPE_RSS_094 RSS 0.94. + * @see SIMPLEPIE_TYPE_RSS_10 RSS 1.0. + * @see SIMPLEPIE_TYPE_RSS_20 RSS 2.0.x. + * @see SIMPLEPIE_TYPE_RSS_RDF RDF-based RSS. + * @see SIMPLEPIE_TYPE_RSS_SYNDICATION Non-RDF-based RSS (truly intended as syndication format). + * @see SIMPLEPIE_TYPE_RSS_ALL Any version of RSS. + * @see SIMPLEPIE_TYPE_ATOM_03 Atom 0.3. + * @see SIMPLEPIE_TYPE_ATOM_10 Atom 1.0. + * @see SIMPLEPIE_TYPE_ATOM_ALL Any version of Atom. + * @see SIMPLEPIE_TYPE_ALL Any known/supported feed type. + * @return int SIMPLEPIE_TYPE_* constant + */ + public function get_type() + { + if (!isset($this->data['type'])) + { + $this->data['type'] = SIMPLEPIE_TYPE_ALL; + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_10; + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_03; + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'])) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['channel']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['image']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['textinput'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_10; + } + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['channel']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['image']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['textinput'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_090; + } + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL; + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) + { + switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) + { + case '0.91': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091; + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) + { + switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) + { + case '0': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_NETSCAPE; + break; + + case '24': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_USERLAND; + break; + } + } + break; + + case '0.92': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_092; + break; + + case '0.93': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_093; + break; + + case '0.94': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_094; + break; + + case '2.0': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_20; + break; + } + } + } + else + { + $this->data['type'] = SIMPLEPIE_TYPE_NONE; + } + } + return $this->data['type']; + } + + /** + * Get the URL for the feed + * + * May or may not be different from the URL passed to {@see set_feed_url()}, + * depending on whether auto-discovery was used. + * + * @since Preview Release (previously called `get_feed_url()` since SimplePie 0.8.) + * @todo If we have a perm redirect we should return the new URL + * @todo When we make the above change, let's support <itunes:new-feed-url> as well + * @todo Also, |atom:link|@rel=self + * @return string|null + */ + public function subscribe_url() + { + if ($this->feed_url !== null) + { + return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + return null; + } + } + + /** + * Get data for an feed-level element + * + * This method allows you to get access to ANY element/attribute that is a + * sub-element of the opening feed tag. + * + * The return value is an indexed array of elements matching the given + * namespace and tag name. Each element has `attribs`, `data` and `child` + * subkeys. For `attribs` and `child`, these contain namespace subkeys. + * `attribs` then has one level of associative name => value data (where + * `value` is a string) after the namespace. `child` has tag-indexed keys + * after the namespace, each member of which is an indexed array matching + * this same format. + * + * For example: + * <pre> + * // This is probably a bad example because we already support + * // <media:content> natively, but it shows you how to parse through + * // the nodes. + * $group = $item->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group'); + * $content = $group[0]['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']; + * $file = $content[0]['attribs']['']['url']; + * echo $file; + * </pre> + * + * @since 1.0 + * @see http://simplepie.org/wiki/faq/supported_xml_namespaces + * @param string $namespace The URL of the XML namespace of the elements you're trying to access + * @param string $tag Tag name + * @return array + */ + public function get_feed_tags($namespace, $tag) + { + $type = $this->get_type(); + if ($type & SIMPLEPIE_TYPE_ATOM_10) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag])) + { + return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag]; + } + } + if ($type & SIMPLEPIE_TYPE_ATOM_03) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag])) + { + return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag]; + } + } + if ($type & SIMPLEPIE_TYPE_RSS_RDF) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag])) + { + return $this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag]; + } + } + if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag])) + { + return $this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag]; + } + } + return null; + } + + /** + * Get data for an channel-level element + * + * This method allows you to get access to ANY element/attribute in the + * channel/header section of the feed. + * + * See {@see SimplePie::get_feed_tags()} for a description of the return value + * + * @since 1.0 + * @see http://simplepie.org/wiki/faq/supported_xml_namespaces + * @param string $namespace The URL of the XML namespace of the elements you're trying to access + * @param string $tag Tag name + * @return array + */ + public function get_channel_tags($namespace, $tag) + { + $type = $this->get_type(); + if ($type & SIMPLEPIE_TYPE_ATOM_ALL) + { + if ($return = $this->get_feed_tags($namespace, $tag)) + { + return $return; + } + } + if ($type & SIMPLEPIE_TYPE_RSS_10) + { + if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'channel')) + { + if (isset($channel[0]['child'][$namespace][$tag])) + { + return $channel[0]['child'][$namespace][$tag]; + } + } + } + if ($type & SIMPLEPIE_TYPE_RSS_090) + { + if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'channel')) + { + if (isset($channel[0]['child'][$namespace][$tag])) + { + return $channel[0]['child'][$namespace][$tag]; + } + } + } + if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) + { + if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'channel')) + { + if (isset($channel[0]['child'][$namespace][$tag])) + { + return $channel[0]['child'][$namespace][$tag]; + } + } + } + return null; + } + + /** + * Get data for an channel-level element + * + * This method allows you to get access to ANY element/attribute in the + * image/logo section of the feed. + * + * See {@see SimplePie::get_feed_tags()} for a description of the return value + * + * @since 1.0 + * @see http://simplepie.org/wiki/faq/supported_xml_namespaces + * @param string $namespace The URL of the XML namespace of the elements you're trying to access + * @param string $tag Tag name + * @return array + */ + public function get_image_tags($namespace, $tag) + { + $type = $this->get_type(); + if ($type & SIMPLEPIE_TYPE_RSS_10) + { + if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'image')) + { + if (isset($image[0]['child'][$namespace][$tag])) + { + return $image[0]['child'][$namespace][$tag]; + } + } + } + if ($type & SIMPLEPIE_TYPE_RSS_090) + { + if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'image')) + { + if (isset($image[0]['child'][$namespace][$tag])) + { + return $image[0]['child'][$namespace][$tag]; + } + } + } + if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) + { + if ($image = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'image')) + { + if (isset($image[0]['child'][$namespace][$tag])) + { + return $image[0]['child'][$namespace][$tag]; + } + } + } + return null; + } + + /** + * Get the base URL value from the feed + * + * Uses `<xml:base>` if available, otherwise uses the first link in the + * feed, or failing that, the URL of the feed itself. + * + * @see get_link + * @see subscribe_url + * + * @param array $element + * @return string + */ + public function get_base($element = array()) + { + if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base'])) + { + return $element['xml_base']; + } + elseif ($this->get_link() !== null) + { + return $this->get_link(); + } + else + { + return $this->subscribe_url(); + } + } + + /** + * Sanitize feed data + * + * @access private + * @see SimplePie_Sanitize::sanitize() + * @param string $data Data to sanitize + * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants + * @param string $base Base URL to resolve URLs against + * @return string Sanitized data + */ + public function sanitize($data, $type, $base = '') + { + return $this->sanitize->sanitize($data, $type, $base); + } + + /** + * Get the title of the feed + * + * Uses `<atom:title>`, `<title>` or `<dc:title>` + * + * @since 1.0 (previously called `get_feed_title` since 0.8) + * @return string|null + */ + public function get_title() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + /** + * Get a category for the feed + * + * @since Unknown + * @param int $key The category that you want to return. Remember that arrays begin with 0, not 1 + * @return SimplePie_Category|null + */ + public function get_category($key = 0) + { + $categories = $this->get_categories(); + if (isset($categories[$key])) + { + return $categories[$key]; + } + else + { + return null; + } + } + + /** + * Get all categories for the feed + * + * Uses `<atom:category>`, `<category>` or `<dc:subject>` + * + * @since Unknown + * @return array|null List of {@see SimplePie_Category} objects + */ + public function get_categories() + { + $categories = array(); + + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['attribs']['']['term'])) + { + $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) + { + // This is really the label, but keep this as the term also for BC. + // Label will also work on retrieving because that falls back to term. + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + if (isset($category['attribs']['']['domain'])) + { + $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = null; + } + $categories[] = $this->registry->create('Category', array($term, $scheme, null)); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) + { + $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) + { + $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + + if (!empty($categories)) + { + return array_unique($categories); + } + else + { + return null; + } + } + + /** + * Get an author for the feed + * + * @since 1.1 + * @param int $key The author that you want to return. Remember that arrays begin with 0, not 1 + * @return SimplePie_Author|null + */ + public function get_author($key = 0) + { + $authors = $this->get_authors(); + if (isset($authors[$key])) + { + return $authors[$key]; + } + else + { + return null; + } + } + + /** + * Get all authors for the feed + * + * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>` + * + * @since 1.1 + * @return array|null List of {@see SimplePie_Author} objects + */ + public function get_authors() + { + $authors = array(); + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) + { + $name = null; + $uri = null; + $email = null; + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $authors[] = $this->registry->create('Author', array($name, $uri, $email)); + } + } + if ($author = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) + { + $name = null; + $url = null; + $email = null; + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $authors[] = $this->registry->create('Author', array($name, $url, $email)); + } + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) + { + $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) + { + $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) + { + $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); + } + + if (!empty($authors)) + { + return array_unique($authors); + } + else + { + return null; + } + } + + /** + * Get a contributor for the feed + * + * @since 1.1 + * @param int $key The contrbutor that you want to return. Remember that arrays begin with 0, not 1 + * @return SimplePie_Author|null + */ + public function get_contributor($key = 0) + { + $contributors = $this->get_contributors(); + if (isset($contributors[$key])) + { + return $contributors[$key]; + } + else + { + return null; + } + } + + /** + * Get all contributors for the feed + * + * Uses `<atom:contributor>` + * + * @since 1.1 + * @return array|null List of {@see SimplePie_Author} objects + */ + public function get_contributors() + { + $contributors = array(); + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) + { + $name = null; + $uri = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $contributors[] = $this->registry->create('Author', array($name, $uri, $email)); + } + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) + { + $name = null; + $url = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $contributors[] = $this->registry->create('Author', array($name, $url, $email)); + } + } + + if (!empty($contributors)) + { + return array_unique($contributors); + } + else + { + return null; + } + } + + /** + * Get a single link for the feed + * + * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8) + * @param int $key The link that you want to return. Remember that arrays begin with 0, not 1 + * @param string $rel The relationship of the link to return + * @return string|null Link URL + */ + public function get_link($key = 0, $rel = 'alternate') + { + $links = $this->get_links($rel); + if (isset($links[$key])) + { + return $links[$key]; + } + else + { + return null; + } + } + + /** + * Get the permalink for the item + * + * Returns the first link available with a relationship of "alternate". + * Identical to {@see get_link()} with key 0 + * + * @see get_link + * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8) + * @internal Added for parity between the parent-level and the item/entry-level. + * @return string|null Link URL + */ + public function get_permalink() + { + return $this->get_link(0); + } + + /** + * Get all links for the feed + * + * Uses `<atom:link>` or `<link>` + * + * @since Beta 2 + * @param string $rel The relationship of links to return + * @return array|null Links found for the feed (strings) + */ + public function get_links($rel = 'alternate') + { + if (!isset($this->data['links'])) + { + $this->data['links'] = array(); + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link')) + { + foreach ($links as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + } + } + } + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link')) + { + foreach ($links as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + + } + } + } + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + + $keys = array_keys($this->data['links']); + foreach ($keys as $key) + { + if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key))) + { + if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); + $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; + } + else + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; + } + } + elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) + { + $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; + } + $this->data['links'][$key] = array_unique($this->data['links'][$key]); + } + } + + if (isset($this->data['links'][$rel])) + { + return $this->data['links'][$rel]; + } + else + { + return null; + } + } + + public function get_all_discovered_feeds() + { + return $this->all_discovered_feeds; + } + + /** + * Get the content for the item + * + * Uses `<atom:subtitle>`, `<atom:tagline>`, `<description>`, + * `<dc:description>`, `<itunes:summary>` or `<itunes:subtitle>` + * + * @since 1.0 (previously called `get_feed_description()` since 0.8) + * @return string|null + */ + public function get_description() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + else + { + return null; + } + } + + /** + * Get the copyright info for the feed + * + * Uses `<atom:rights>`, `<atom:copyright>` or `<dc:rights>` + * + * @since 1.0 (previously called `get_feed_copyright()` since 0.8) + * @return string|null + */ + public function get_copyright() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright')) + { + return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + /** + * Get the language for the feed + * + * Uses `<language>`, `<dc:language>`, or @xml_lang + * + * @since 1.0 (previously called `get_feed_language()` since 0.8) + * @return string|null + */ + public function get_language() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'])) + { + return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'])) + { + return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'])) + { + return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['headers']['content-language'])) + { + return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + /** + * Get the latitude coordinates for the item + * + * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications + * + * Uses `<geo:lat>` or `<georss:point>` + * + * @since 1.0 + * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo + * @link http://www.georss.org/ GeoRSS + * @return string|null + */ + public function get_latitude() + { + + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) + { + return (float) $match[1]; + } + else + { + return null; + } + } + + /** + * Get the longitude coordinates for the feed + * + * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications + * + * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>` + * + * @since 1.0 + * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo + * @link http://www.georss.org/ GeoRSS + * @return string|null + */ + public function get_longitude() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) + { + return (float) $return[0]['data']; + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) + { + return (float) $match[2]; + } + else + { + return null; + } + } + + /** + * Get the feed logo's title + * + * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a "feed logo" title. + * + * Uses `<image><title>` or `<image><dc:title>` + * + * @return string|null + */ + public function get_image_title() + { + if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + /** + * Get the feed logo's URL + * + * RSS 0.9.0, 2.0, Atom 1.0, and feeds with iTunes RSS tags are allowed to + * have a "feed logo" URL. This points directly to the image itself. + * + * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`, + * `<image><title>` or `<image><dc:title>` + * + * @return string|null + */ + public function get_image_url() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image')) + { + return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'url')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'url')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + else + { + return null; + } + } + + + /** + * Get the feed logo's link + * + * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a "feed logo" link. This + * points to a human-readable page that the image should link to. + * + * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`, + * `<image><title>` or `<image><dc:title>` + * + * @return string|null + */ + public function get_image_link() + { + if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + else + { + return null; + } + } + + /** + * Get the feed logo's link + * + * RSS 2.0 feeds are allowed to have a "feed logo" width. + * + * Uses `<image><width>` or defaults to 88.0 if no width is specified and + * the feed is an RSS 2.0 feed. + * + * @return int|float|null + */ + public function get_image_width() + { + if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'width')) + { + return round($return[0]['data']); + } + elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) + { + return 88.0; + } + else + { + return null; + } + } + + /** + * Get the feed logo's height + * + * RSS 2.0 feeds are allowed to have a "feed logo" height. + * + * Uses `<image><height>` or defaults to 31.0 if no height is specified and + * the feed is an RSS 2.0 feed. + * + * @return int|float|null + */ + public function get_image_height() + { + if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'height')) + { + return round($return[0]['data']); + } + elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) + { + return 31.0; + } + else + { + return null; + } + } + + /** + * Get the number of items in the feed + * + * This is well-suited for {@link http://php.net/for for()} loops with + * {@see get_item()} + * + * @param int $max Maximum value to return. 0 for no limit + * @return int Number of items in the feed + */ + public function get_item_quantity($max = 0) + { + $max = (int) $max; + $qty = count($this->get_items()); + if ($max === 0) + { + return $qty; + } + else + { + return ($qty > $max) ? $max : $qty; + } + } + + /** + * Get a single item from the feed + * + * This is better suited for {@link http://php.net/for for()} loops, whereas + * {@see get_items()} is better suited for + * {@link http://php.net/foreach foreach()} loops. + * + * @see get_item_quantity() + * @since Beta 2 + * @param int $key The item that you want to return. Remember that arrays begin with 0, not 1 + * @return SimplePie_Item|null + */ + public function get_item($key = 0) + { + $items = $this->get_items(); + if (isset($items[$key])) + { + return $items[$key]; + } + else + { + return null; + } + } + + /** + * Get all items from the feed + * + * This is better suited for {@link http://php.net/for for()} loops, whereas + * {@see get_items()} is better suited for + * {@link http://php.net/foreach foreach()} loops. + * + * @see get_item_quantity + * @since Beta 2 + * @param int $start Index to start at + * @param int $end Number of items to return. 0 for all items after `$start` + * @return array|null List of {@see SimplePie_Item} objects + */ + public function get_items($start = 0, $end = 0) + { + if (!isset($this->data['items'])) + { + if (!empty($this->multifeed_objects)) + { + $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit); + } + else + { + $this->data['items'] = array(); + if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key])); + } + } + if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key])); + } + } + if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key])); + } + } + if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key])); + } + } + if ($items = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'item')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key])); + } + } + } + } + + if (!empty($this->data['items'])) + { + // If we want to order it by date, check if all items have a date, and then sort it + if ($this->order_by_date && empty($this->multifeed_objects)) + { + if (!isset($this->data['ordered_items'])) + { + $do_sort = true; + foreach ($this->data['items'] as $item) + { + if (!$item->get_date('U')) + { + $do_sort = false; + break; + } + } + $item = null; + $this->data['ordered_items'] = $this->data['items']; + if ($do_sort) + { + usort($this->data['ordered_items'], array(get_class($this), 'sort_items')); + } + } + $items = $this->data['ordered_items']; + } + else + { + $items = $this->data['items']; + } + + // Slice the data as desired + if ($end === 0) + { + return array_slice($items, $start); + } + else + { + return array_slice($items, $start, $end); + } + } + else + { + return array(); + } + } + + /** + * Set the favicon handler + * + * @deprecated Use your own favicon handling instead + */ + public function set_favicon_handler($page = false, $qs = 'i') + { + $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING; + trigger_error('Favicon handling has been removed, please use your own handling', $level); + return false; + } + + /** + * Get the favicon for the current feed + * + * @deprecated Use your own favicon handling instead + */ + public function get_favicon() + { + $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING; + trigger_error('Favicon handling has been removed, please use your own handling', $level); + + if (($url = $this->get_link()) !== null) + { + return 'http://g.etfv.co/' . urlencode($url); + } + + return false; + } + + /** + * Magic method handler + * + * @param string $method Method name + * @param array $args Arguments to the method + * @return mixed + */ + public function __call($method, $args) + { + if (strpos($method, 'subscribe_') === 0) + { + $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING; + trigger_error('subscribe_*() has been deprecated, implement the callback yourself', $level); + return ''; + } + if ($method === 'enable_xml_dump') + { + $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING; + trigger_error('enable_xml_dump() has been deprecated, use get_raw_data() instead', $level); + return false; + } + + $class = get_class($this); + $trace = debug_backtrace(); + $file = $trace[0]['file']; + $line = $trace[0]['line']; + trigger_error("Call to undefined method $class::$method() in $file on line $line", E_USER_ERROR); + } + + /** + * Sorting callback for items + * + * @access private + * @param SimplePie $a + * @param SimplePie $b + * @return boolean + */ + public static function sort_items($a, $b) + { + return $a->get_date('U') <= $b->get_date('U'); + } + + /** + * Merge items from several feeds into one + * + * If you're merging multiple feeds together, they need to all have dates + * for the items or else SimplePie will refuse to sort them. + * + * @link http://simplepie.org/wiki/tutorial/sort_multiple_feeds_by_time_and_date#if_feeds_require_separate_per-feed_settings + * @param array $urls List of SimplePie feed objects to merge + * @param int $start Starting item + * @param int $end Number of items to return + * @param int $limit Maximum number of items per feed + * @return array + */ + public static function merge_items($urls, $start = 0, $end = 0, $limit = 0) + { + if (is_array($urls) && sizeof($urls) > 0) + { + $items = array(); + foreach ($urls as $arg) + { + if ($arg instanceof SimplePie) + { + $items = array_merge($items, $arg->get_items(0, $limit)); + } + else + { + trigger_error('Arguments must be SimplePie objects', E_USER_WARNING); + } + } + + $do_sort = true; + foreach ($items as $item) + { + if (!$item->get_date('U')) + { + $do_sort = false; + break; + } + } + $item = null; + if ($do_sort) + { + usort($items, array(get_class($urls[0]), 'sort_items')); + } + + if ($end === 0) + { + return array_slice($items, $start); + } + else + { + return array_slice($items, $start, $end); + } + } + else + { + trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING); + return array(); + } + } +} +endif; \ No newline at end of file diff --git a/src/wp-includes/class-smtp.php b/src/wp-includes/class-smtp.php new file mode 100644 index 0000000..72361bb --- /dev/null +++ b/src/wp-includes/class-smtp.php @@ -0,0 +1,1003 @@ +<?php +/*~ class.smtp.php +.---------------------------------------------------------------------------. +| Software: PHPMailer - PHP email class | +| Version: 5.2.4 | +| Site: https://code.google.com/a/apache-extras.org/p/phpmailer/ | +| ------------------------------------------------------------------------- | +| Admin: Jim Jagielski (project admininistrator) | +| Authors: Andy Prevost (codeworxtech) codeworxtech@users.sourceforge.net | +| : Marcus Bointon (coolbru) coolbru@users.sourceforge.net | +| : Jim Jagielski (jimjag) jimjag@gmail.com | +| Founder: Brent R. Matzelle (original founder) | +| Copyright (c) 2010-2012, Jim Jagielski. All Rights Reserved. | +| Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved. | +| Copyright (c) 2001-2003, Brent R. Matzelle | +| ------------------------------------------------------------------------- | +| License: Distributed under the Lesser General Public License (LGPL) | +| http://www.gnu.org/copyleft/lesser.html | +| This program is distributed in the hope that it will be useful - WITHOUT | +| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | +| FITNESS FOR A PARTICULAR PURPOSE. | +'---------------------------------------------------------------------------' +*/ + +/** + * PHPMailer - PHP SMTP email transport class + * NOTE: Designed for use with PHP version 5 and up + * @package PHPMailer + * @author Andy Prevost + * @author Marcus Bointon + * @copyright 2004 - 2008 Andy Prevost + * @author Jim Jagielski + * @copyright 2010 - 2012 Jim Jagielski + * @license http://www.gnu.org/copyleft/lesser.html Distributed under the Lesser General Public License (LGPL) + */ + +/** + * PHP RFC821 SMTP client + * + * Implements all the RFC 821 SMTP commands except TURN which will always return a not implemented error. + * SMTP also provides some utility methods for sending mail to an SMTP server. + * @author Chris Ryan + * @package PHPMailer + */ + +class SMTP { + /** + * SMTP server port + * @var int + */ + public $SMTP_PORT = 25; + + /** + * SMTP reply line ending (don't change) + * @var string + */ + public $CRLF = "\r\n"; + + /** + * Sets whether debugging is turned on + * @var bool + */ + public $do_debug; // the level of debug to perform + + /** + * Sets the function/method to use for debugging output. + * Right now we only honor "echo" or "error_log" + * @var string + */ + public $Debugoutput = "echo"; + + /** + * Sets VERP use on/off (default is off) + * @var bool + */ + public $do_verp = false; + + /** + * Sets the SMTP timeout value for reads, in seconds + * @var int + */ + public $Timeout = 15; + + /** + * Sets the SMTP timelimit value for reads, in seconds + * @var int + */ + public $Timelimit = 30; + + /** + * Sets the SMTP PHPMailer Version number + * @var string + */ + public $Version = '5.2.4'; + + ///////////////////////////////////////////////// + // PROPERTIES, PRIVATE AND PROTECTED + ///////////////////////////////////////////////// + + /** + * @var resource The socket to the server + */ + private $smtp_conn; + /** + * @var string Error message, if any, for the last call + */ + private $error; + /** + * @var string The reply the server sent to us for HELO + */ + private $helo_rply; + + /** + * Outputs debugging info via user-defined method + * @param string $str + */ + private function edebug($str) { + if ($this->Debugoutput == "error_log") { + error_log($str); + } else { + echo $str; + } + } + + /** + * Initialize the class so that the data is in a known state. + * @access public + * @return SMTP + */ + public function __construct() { + $this->smtp_conn = 0; + $this->error = null; + $this->helo_rply = null; + + $this->do_debug = 0; + } + + ///////////////////////////////////////////////// + // CONNECTION FUNCTIONS + ///////////////////////////////////////////////// + + /** + * Connect to the server specified on the port specified. + * If the port is not specified use the default SMTP_PORT. + * If tval is specified then a connection will try and be + * established with the server for that number of seconds. + * If tval is not specified the default is 30 seconds to + * try on the connection. + * + * SMTP CODE SUCCESS: 220 + * SMTP CODE FAILURE: 421 + * @access public + * @param string $host + * @param int $port + * @param int $tval + * @return bool + */ + public function Connect($host, $port = 0, $tval = 30) { + // set the error val to null so there is no confusion + $this->error = null; + + // make sure we are __not__ connected + if($this->connected()) { + // already connected, generate error + $this->error = array("error" => "Already connected to a server"); + return false; + } + + if(empty($port)) { + $port = $this->SMTP_PORT; + } + + // connect to the smtp server + $this->smtp_conn = @fsockopen($host, // the host of the server + $port, // the port to use + $errno, // error number if any + $errstr, // error message if any + $tval); // give up after ? secs + // verify we connected properly + if(empty($this->smtp_conn)) { + $this->error = array("error" => "Failed to connect to server", + "errno" => $errno, + "errstr" => $errstr); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF . '<br />'); + } + return false; + } + + // SMTP server can take longer to respond, give longer timeout for first read + // Windows does not have support for this timeout function + if(substr(PHP_OS, 0, 3) != "WIN") { + $max = ini_get('max_execution_time'); + if ($max != 0 && $tval > $max) { // don't bother if unlimited + @set_time_limit($tval); + } + stream_set_timeout($this->smtp_conn, $tval, 0); + } + + // get any announcement + $announce = $this->get_lines(); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $announce . $this->CRLF . '<br />'); + } + + return true; + } + + /** + * Initiate a TLS communication with the server. + * + * SMTP CODE 220 Ready to start TLS + * SMTP CODE 501 Syntax error (no parameters allowed) + * SMTP CODE 454 TLS not available due to temporary reason + * @access public + * @return bool success + */ + public function StartTLS() { + $this->error = null; # to avoid confusion + + if(!$this->connected()) { + $this->error = array("error" => "Called StartTLS() without being connected"); + return false; + } + + fputs($this->smtp_conn,"STARTTLS" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />'); + } + + if($code != 220) { + $this->error = + array("error" => "STARTTLS not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + + // Begin encrypted connection + if(!stream_socket_enable_crypto($this->smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) { + return false; + } + + return true; + } + + /** + * Performs SMTP authentication. Must be run after running the + * Hello() method. Returns true if successfully authenticated. + * @access public + * @param string $username + * @param string $password + * @param string $authtype + * @param string $realm + * @param string $workstation + * @return bool + */ + public function Authenticate($username, $password, $authtype='LOGIN', $realm='', $workstation='') { + if (empty($authtype)) { + $authtype = 'LOGIN'; + } + + switch ($authtype) { + case 'PLAIN': + // Start authentication + fputs($this->smtp_conn,"AUTH PLAIN" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 334) { + $this->error = + array("error" => "AUTH not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + // Send encoded username and password + fputs($this->smtp_conn, base64_encode("\0".$username."\0".$password) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 235) { + $this->error = + array("error" => "Authentication not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + break; + case 'LOGIN': + // Start authentication + fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 334) { + $this->error = + array("error" => "AUTH not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + + // Send encoded username + fputs($this->smtp_conn, base64_encode($username) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 334) { + $this->error = + array("error" => "Username not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + + // Send encoded password + fputs($this->smtp_conn, base64_encode($password) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 235) { + $this->error = + array("error" => "Password not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + break; + case 'NTLM': + /* + * ntlm_sasl_client.php + ** Bundled with Permission + ** + ** How to telnet in windows: http://technet.microsoft.com/en-us/library/aa995718%28EXCHG.65%29.aspx + ** PROTOCOL Documentation http://curl.haxx.se/rfc/ntlm.html#ntlmSmtpAuthentication + */ + require_once('ntlm_sasl_client.php'); + $temp = new stdClass(); + $ntlm_client = new ntlm_sasl_client_class; + if(! $ntlm_client->Initialize($temp)){//let's test if every function its available + $this->error = array("error" => $temp->error); + if($this->do_debug >= 1) { + $this->edebug("You need to enable some modules in your php.ini file: " . $this->error["error"] . $this->CRLF); + } + return false; + } + $msg1 = $ntlm_client->TypeMsg1($realm, $workstation);//msg1 + + fputs($this->smtp_conn,"AUTH NTLM " . base64_encode($msg1) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + + if($code != 334) { + $this->error = + array("error" => "AUTH not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF); + } + return false; + } + + $challange = substr($rply,3);//though 0 based, there is a white space after the 3 digit number....//msg2 + $challange = base64_decode($challange); + $ntlm_res = $ntlm_client->NTLMResponse(substr($challange,24,8),$password); + $msg3 = $ntlm_client->TypeMsg3($ntlm_res,$username,$realm,$workstation);//msg3 + // Send encoded username + fputs($this->smtp_conn, base64_encode($msg3) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 235) { + $this->error = + array("error" => "Could not authenticate", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF); + } + return false; + } + break; + } + return true; + } + + /** + * Returns true if connected to a server otherwise false + * @access public + * @return bool + */ + public function Connected() { + if(!empty($this->smtp_conn)) { + $sock_status = socket_get_status($this->smtp_conn); + if($sock_status["eof"]) { + // the socket is valid but we are not connected + if($this->do_debug >= 1) { + $this->edebug("SMTP -> NOTICE:" . $this->CRLF . "EOF caught while checking if connected"); + } + $this->Close(); + return false; + } + return true; // everything looks good + } + return false; + } + + /** + * Closes the socket and cleans up the state of the class. + * It is not considered good to use this function without + * first trying to use QUIT. + * @access public + * @return void + */ + public function Close() { + $this->error = null; // so there is no confusion + $this->helo_rply = null; + if(!empty($this->smtp_conn)) { + // close the connection and cleanup + fclose($this->smtp_conn); + $this->smtp_conn = 0; + } + } + + ///////////////////////////////////////////////// + // SMTP COMMANDS + ///////////////////////////////////////////////// + + /** + * Issues a data command and sends the msg_data to the server + * finializing the mail transaction. $msg_data is the message + * that is to be send with the headers. Each header needs to be + * on a single line followed by a <CRLF> with the message headers + * and the message body being seperated by and additional <CRLF>. + * + * Implements rfc 821: DATA <CRLF> + * + * SMTP CODE INTERMEDIATE: 354 + * [data] + * <CRLF>.<CRLF> + * SMTP CODE SUCCESS: 250 + * SMTP CODE FAILURE: 552,554,451,452 + * SMTP CODE FAILURE: 451,554 + * SMTP CODE ERROR : 500,501,503,421 + * @access public + * @param string $msg_data + * @return bool + */ + public function Data($msg_data) { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Data() without being connected"); + return false; + } + + fputs($this->smtp_conn,"DATA" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />'); + } + + if($code != 354) { + $this->error = + array("error" => "DATA command not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + + /* the server is ready to accept data! + * according to rfc 821 we should not send more than 1000 + * including the CRLF + * characters on a single line so we will break the data up + * into lines by \r and/or \n then if needed we will break + * each of those into smaller lines to fit within the limit. + * in addition we will be looking for lines that start with + * a period '.' and append and additional period '.' to that + * line. NOTE: this does not count towards limit. + */ + + // normalize the line breaks so we know the explode works + $msg_data = str_replace("\r\n","\n",$msg_data); + $msg_data = str_replace("\r","\n",$msg_data); + $lines = explode("\n",$msg_data); + + /* we need to find a good way to determine is headers are + * in the msg_data or if it is a straight msg body + * currently I am assuming rfc 822 definitions of msg headers + * and if the first field of the first line (':' sperated) + * does not contain a space then it _should_ be a header + * and we can process all lines before a blank "" line as + * headers. + */ + + $field = substr($lines[0],0,strpos($lines[0],":")); + $in_headers = false; + if(!empty($field) && !strstr($field," ")) { + $in_headers = true; + } + + $max_line_length = 998; // used below; set here for ease in change + + while(list(,$line) = @each($lines)) { + $lines_out = null; + if($line == "" && $in_headers) { + $in_headers = false; + } + // ok we need to break this line up into several smaller lines + while(strlen($line) > $max_line_length) { + $pos = strrpos(substr($line,0,$max_line_length)," "); + + // Patch to fix DOS attack + if(!$pos) { + $pos = $max_line_length - 1; + $lines_out[] = substr($line,0,$pos); + $line = substr($line,$pos); + } else { + $lines_out[] = substr($line,0,$pos); + $line = substr($line,$pos + 1); + } + + /* if processing headers add a LWSP-char to the front of new line + * rfc 822 on long msg headers + */ + if($in_headers) { + $line = "\t" . $line; + } + } + $lines_out[] = $line; + + // send the lines to the server + while(list(,$line_out) = @each($lines_out)) { + if(strlen($line_out) > 0) + { + if(substr($line_out, 0, 1) == ".") { + $line_out = "." . $line_out; + } + } + fputs($this->smtp_conn,$line_out . $this->CRLF); + } + } + + // message data has been sent + fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />'); + } + + if($code != 250) { + $this->error = + array("error" => "DATA not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + return true; + } + + /** + * Sends the HELO command to the smtp server. + * This makes sure that we and the server are in + * the same known state. + * + * Implements from rfc 821: HELO <SP> <domain> <CRLF> + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE ERROR : 500, 501, 504, 421 + * @access public + * @param string $host + * @return bool + */ + public function Hello($host = '') { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Hello() without being connected"); + return false; + } + + // if hostname for HELO was not specified send default + if(empty($host)) { + // determine appropriate default to send to server + $host = "localhost"; + } + + // Send extended hello first (RFC 2821) + if(!$this->SendHello("EHLO", $host)) { + if(!$this->SendHello("HELO", $host)) { + return false; + } + } + + return true; + } + + /** + * Sends a HELO/EHLO command. + * @access private + * @param string $hello + * @param string $host + * @return bool + */ + private function SendHello($hello, $host) { + fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER: " . $rply . $this->CRLF . '<br />'); + } + + if($code != 250) { + $this->error = + array("error" => $hello . " not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + + $this->helo_rply = $rply; + + return true; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. + * + * Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF> + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,421 + * @access public + * @param string $from + * @return bool + */ + public function Mail($from) { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Mail() without being connected"); + return false; + } + + $useVerp = ($this->do_verp ? " XVERP" : ""); + fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $useVerp . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />'); + } + + if($code != 250) { + $this->error = + array("error" => "MAIL not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + return true; + } + + /** + * Sends the quit command to the server and then closes the socket + * if there is no error or the $close_on_error argument is true. + * + * Implements from rfc 821: QUIT <CRLF> + * + * SMTP CODE SUCCESS: 221 + * SMTP CODE ERROR : 500 + * @access public + * @param bool $close_on_error + * @return bool + */ + public function Quit($close_on_error = true) { + $this->error = null; // so there is no confusion + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Quit() without being connected"); + return false; + } + + // send the quit command to the server + fputs($this->smtp_conn,"quit" . $this->CRLF); + + // get any good-bye messages + $byemsg = $this->get_lines(); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $byemsg . $this->CRLF . '<br />'); + } + + $rval = true; + $e = null; + + $code = substr($byemsg,0,3); + if($code != 221) { + // use e as a tmp var cause Close will overwrite $this->error + $e = array("error" => "SMTP server rejected quit command", + "smtp_code" => $code, + "smtp_rply" => substr($byemsg,4)); + $rval = false; + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $e["error"] . ": " . $byemsg . $this->CRLF . '<br />'); + } + } + + if(empty($e) || $close_on_error) { + $this->Close(); + } + + return $rval; + } + + /** + * Sends the command RCPT to the SMTP server with the TO: argument of $to. + * Returns true if the recipient was accepted false if it was rejected. + * + * Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF> + * + * SMTP CODE SUCCESS: 250,251 + * SMTP CODE FAILURE: 550,551,552,553,450,451,452 + * SMTP CODE ERROR : 500,501,503,421 + * @access public + * @param string $to + * @return bool + */ + public function Recipient($to) { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Recipient() without being connected"); + return false; + } + + fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />'); + } + + if($code != 250 && $code != 251) { + $this->error = + array("error" => "RCPT not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + return true; + } + + /** + * Sends the RSET command to abort and transaction that is + * currently in progress. Returns true if successful false + * otherwise. + * + * Implements rfc 821: RSET <CRLF> + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE ERROR : 500,501,504,421 + * @access public + * @return bool + */ + public function Reset() { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Reset() without being connected"); + return false; + } + + fputs($this->smtp_conn,"RSET" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />'); + } + + if($code != 250) { + $this->error = + array("error" => "RSET failed", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + + return true; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. This command + * will send the message to the users terminal if they are logged + * in and send them an email. + * + * Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF> + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,502,421 + * @access public + * @param string $from + * @return bool + */ + public function SendAndMail($from) { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called SendAndMail() without being connected"); + return false; + } + + fputs($this->smtp_conn,"SAML FROM:" . $from . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + $this->edebug("SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />'); + } + + if($code != 250) { + $this->error = + array("error" => "SAML not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />'); + } + return false; + } + return true; + } + + /** + * This is an optional command for SMTP that this class does not + * support. This method is here to make the RFC821 Definition + * complete for this class and __may__ be implimented in the future + * + * Implements from rfc 821: TURN <CRLF> + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE FAILURE: 502 + * SMTP CODE ERROR : 500, 503 + * @access public + * @return bool + */ + public function Turn() { + $this->error = array("error" => "This method, TURN, of the SMTP ". + "is not implemented"); + if($this->do_debug >= 1) { + $this->edebug("SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF . '<br />'); + } + return false; + } + + /** + * Get the current error + * @access public + * @return array + */ + public function getError() { + return $this->error; + } + + ///////////////////////////////////////////////// + // INTERNAL FUNCTIONS + ///////////////////////////////////////////////// + + /** + * Read in as many lines as possible + * either before eof or socket timeout occurs on the operation. + * With SMTP we can tell if we have more lines to read if the + * 4th character is '-' symbol. If it is a space then we don't + * need to read anything else. + * @access private + * @return string + */ + private function get_lines() { + $data = ""; + $endtime = 0; + /* If for some reason the fp is bad, don't inf loop */ + if (!is_resource($this->smtp_conn)) { + return $data; + } + stream_set_timeout($this->smtp_conn, $this->Timeout); + if ($this->Timelimit > 0) { + $endtime = time() + $this->Timelimit; + } + while(is_resource($this->smtp_conn) && !feof($this->smtp_conn)) { + $str = @fgets($this->smtp_conn,515); + if($this->do_debug >= 4) { + $this->edebug("SMTP -> get_lines(): \$data was \"$data\"" . $this->CRLF . '<br />'); + $this->edebug("SMTP -> get_lines(): \$str is \"$str\"" . $this->CRLF . '<br />'); + } + $data .= $str; + if($this->do_debug >= 4) { + $this->edebug("SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF . '<br />'); + } + // if 4th character is a space, we are done reading, break the loop + if(substr($str,3,1) == " ") { break; } + // Timed-out? Log and break + $info = stream_get_meta_data($this->smtp_conn); + if ($info['timed_out']) { + if($this->do_debug >= 4) { + $this->edebug("SMTP -> get_lines(): timed-out (" . $this->Timeout . " seconds) <br />"); + } + break; + } + // Now check if reads took too long + if ($endtime) { + if (time() > $endtime) { + if($this->do_debug >= 4) { + $this->edebug("SMTP -> get_lines(): timelimit reached (" . $this->Timelimit . " seconds) <br />"); + } + break; + } + } + } + return $data; + } + +} +?> diff --git a/src/wp-includes/class-snoopy.php b/src/wp-includes/class-snoopy.php new file mode 100644 index 0000000..2c59c48 --- /dev/null +++ b/src/wp-includes/class-snoopy.php @@ -0,0 +1,1256 @@ +<?php + +/** + * Deprecated. Use WP_HTTP (http.php, class-http.php) instead. + */ +_deprecated_file( basename( __FILE__ ), '3.0', WPINC . '/http.php' ); + +if ( !class_exists( 'Snoopy' ) ) : +/************************************************* + +Snoopy - the PHP net client +Author: Monte Ohrt <monte@ispi.net> +Copyright (c): 1999-2008 New Digital Group, all rights reserved +Version: 1.2.4 + + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +You may contact the author of Snoopy by e-mail at: +monte@ohrt.com + +The latest version of Snoopy can be obtained from: +http://snoopy.sourceforge.net/ + +*************************************************/ + +class Snoopy +{ + /**** Public variables ****/ + + /* user definable vars */ + + var $host = "www.php.net"; // host name we are connecting to + var $port = 80; // port we are connecting to + var $proxy_host = ""; // proxy host to use + var $proxy_port = ""; // proxy port to use + var $proxy_user = ""; // proxy user to use + var $proxy_pass = ""; // proxy password to use + + var $agent = "Snoopy v1.2.4"; // agent we masquerade as + var $referer = ""; // referer info to pass + var $cookies = array(); // array of cookies to pass + // $cookies["username"]="joe"; + var $rawheaders = array(); // array of raw headers to send + // $rawheaders["Content-type"]="text/html"; + + var $maxredirs = 5; // http redirection depth maximum. 0 = disallow + var $lastredirectaddr = ""; // contains address of last redirected address + var $offsiteok = true; // allows redirection off-site + var $maxframes = 0; // frame content depth maximum. 0 = disallow + var $expandlinks = true; // expand links to fully qualified URLs. + // this only applies to fetchlinks() + // submitlinks(), and submittext() + var $passcookies = true; // pass set cookies back through redirects + // NOTE: this currently does not respect + // dates, domains or paths. + + var $user = ""; // user for http authentication + var $pass = ""; // password for http authentication + + // http accept types + var $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; + + var $results = ""; // where the content is put + + var $error = ""; // error messages sent here + var $response_code = ""; // response code returned from server + var $headers = array(); // headers returned from server sent here + var $maxlength = 500000; // max return data length (body) + var $read_timeout = 0; // timeout on read operations, in seconds + // supported only since PHP 4 Beta 4 + // set to 0 to disallow timeouts + var $timed_out = false; // if a read operation timed out + var $status = 0; // http request status + + var $temp_dir = "/tmp"; // temporary directory that the webserver + // has permission to write to. + // under Windows, this should be C:\temp + + var $curl_path = "/usr/local/bin/curl"; + // Snoopy will use cURL for fetching + // SSL content if a full system path to + // the cURL binary is supplied here. + // set to false if you do not have + // cURL installed. See http://curl.haxx.se + // for details on installing cURL. + // Snoopy does *not* use the cURL + // library functions built into php, + // as these functions are not stable + // as of this Snoopy release. + + /**** Private variables ****/ + + var $_maxlinelen = 4096; // max line length (headers) + + var $_httpmethod = "GET"; // default http request method + var $_httpversion = "HTTP/1.0"; // default http request version + var $_submit_method = "POST"; // default submit method + var $_submit_type = "application/x-www-form-urlencoded"; // default submit type + var $_mime_boundary = ""; // MIME boundary for multipart/form-data submit type + var $_redirectaddr = false; // will be set if page fetched is a redirect + var $_redirectdepth = 0; // increments on an http redirect + var $_frameurls = array(); // frame src urls + var $_framedepth = 0; // increments on frame depth + + var $_isproxy = false; // set if using a proxy server + var $_fp_timeout = 30; // timeout for socket connection + +/*======================================================================*\ + Function: fetch + Purpose: fetch the contents of a web page + (and possibly other protocols in the + future like ftp, nntp, gopher, etc.) + Input: $URI the location of the page to fetch + Output: $this->results the output text from the fetch +\*======================================================================*/ + + function fetch($URI) + { + + //preg_match("|^([^:]+)://([^:/]+)(:[\d]+)*(.*)|",$URI,$URI_PARTS); + $URI_PARTS = parse_url($URI); + if (!empty($URI_PARTS["user"])) + $this->user = $URI_PARTS["user"]; + if (!empty($URI_PARTS["pass"])) + $this->pass = $URI_PARTS["pass"]; + if (empty($URI_PARTS["query"])) + $URI_PARTS["query"] = ''; + if (empty($URI_PARTS["path"])) + $URI_PARTS["path"] = ''; + + switch(strtolower($URI_PARTS["scheme"])) + { + case "http": + $this->host = $URI_PARTS["host"]; + if(!empty($URI_PARTS["port"])) + $this->port = $URI_PARTS["port"]; + if($this->_connect($fp)) + { + if($this->_isproxy) + { + // using proxy, send entire URI + $this->_httprequest($URI,$fp,$URI,$this->_httpmethod); + } + else + { + $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); + // no proxy, send only the path + $this->_httprequest($path, $fp, $URI, $this->_httpmethod); + } + + $this->_disconnect($fp); + + if($this->_redirectaddr) + { + /* url was redirected, check if we've hit the max depth */ + if($this->maxredirs > $this->_redirectdepth) + { + // only follow redirect if it's on this site, or offsiteok is true + if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) + { + /* follow the redirect */ + $this->_redirectdepth++; + $this->lastredirectaddr=$this->_redirectaddr; + $this->fetch($this->_redirectaddr); + } + } + } + + if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) + { + $frameurls = $this->_frameurls; + $this->_frameurls = array(); + + while(list(,$frameurl) = each($frameurls)) + { + if($this->_framedepth < $this->maxframes) + { + $this->fetch($frameurl); + $this->_framedepth++; + } + else + break; + } + } + } + else + { + return false; + } + return true; + break; + case "https": + if(!$this->curl_path) + return false; + if(function_exists("is_executable")) + if (!is_executable($this->curl_path)) + return false; + $this->host = $URI_PARTS["host"]; + if(!empty($URI_PARTS["port"])) + $this->port = $URI_PARTS["port"]; + if($this->_isproxy) + { + // using proxy, send entire URI + $this->_httpsrequest($URI,$URI,$this->_httpmethod); + } + else + { + $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); + // no proxy, send only the path + $this->_httpsrequest($path, $URI, $this->_httpmethod); + } + + if($this->_redirectaddr) + { + /* url was redirected, check if we've hit the max depth */ + if($this->maxredirs > $this->_redirectdepth) + { + // only follow redirect if it's on this site, or offsiteok is true + if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) + { + /* follow the redirect */ + $this->_redirectdepth++; + $this->lastredirectaddr=$this->_redirectaddr; + $this->fetch($this->_redirectaddr); + } + } + } + + if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) + { + $frameurls = $this->_frameurls; + $this->_frameurls = array(); + + while(list(,$frameurl) = each($frameurls)) + { + if($this->_framedepth < $this->maxframes) + { + $this->fetch($frameurl); + $this->_framedepth++; + } + else + break; + } + } + return true; + break; + default: + // not a valid protocol + $this->error = 'Invalid protocol "'.$URI_PARTS["scheme"].'"\n'; + return false; + break; + } + return true; + } + +/*======================================================================*\ + Function: submit + Purpose: submit an http form + Input: $URI the location to post the data + $formvars the formvars to use. + format: $formvars["var"] = "val"; + $formfiles an array of files to submit + format: $formfiles["var"] = "/dir/filename.ext"; + Output: $this->results the text output from the post +\*======================================================================*/ + + function submit($URI, $formvars="", $formfiles="") + { + unset($postdata); + + $postdata = $this->_prepare_post_body($formvars, $formfiles); + + $URI_PARTS = parse_url($URI); + if (!empty($URI_PARTS["user"])) + $this->user = $URI_PARTS["user"]; + if (!empty($URI_PARTS["pass"])) + $this->pass = $URI_PARTS["pass"]; + if (empty($URI_PARTS["query"])) + $URI_PARTS["query"] = ''; + if (empty($URI_PARTS["path"])) + $URI_PARTS["path"] = ''; + + switch(strtolower($URI_PARTS["scheme"])) + { + case "http": + $this->host = $URI_PARTS["host"]; + if(!empty($URI_PARTS["port"])) + $this->port = $URI_PARTS["port"]; + if($this->_connect($fp)) + { + if($this->_isproxy) + { + // using proxy, send entire URI + $this->_httprequest($URI,$fp,$URI,$this->_submit_method,$this->_submit_type,$postdata); + } + else + { + $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); + // no proxy, send only the path + $this->_httprequest($path, $fp, $URI, $this->_submit_method, $this->_submit_type, $postdata); + } + + $this->_disconnect($fp); + + if($this->_redirectaddr) + { + /* url was redirected, check if we've hit the max depth */ + if($this->maxredirs > $this->_redirectdepth) + { + if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr)) + $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]); + + // only follow redirect if it's on this site, or offsiteok is true + if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) + { + /* follow the redirect */ + $this->_redirectdepth++; + $this->lastredirectaddr=$this->_redirectaddr; + if( strpos( $this->_redirectaddr, "?" ) > 0 ) + $this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get + else + $this->submit($this->_redirectaddr,$formvars, $formfiles); + } + } + } + + if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) + { + $frameurls = $this->_frameurls; + $this->_frameurls = array(); + + while(list(,$frameurl) = each($frameurls)) + { + if($this->_framedepth < $this->maxframes) + { + $this->fetch($frameurl); + $this->_framedepth++; + } + else + break; + } + } + + } + else + { + return false; + } + return true; + break; + case "https": + if(!$this->curl_path) + return false; + if(function_exists("is_executable")) + if (!is_executable($this->curl_path)) + return false; + $this->host = $URI_PARTS["host"]; + if(!empty($URI_PARTS["port"])) + $this->port = $URI_PARTS["port"]; + if($this->_isproxy) + { + // using proxy, send entire URI + $this->_httpsrequest($URI, $URI, $this->_submit_method, $this->_submit_type, $postdata); + } + else + { + $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); + // no proxy, send only the path + $this->_httpsrequest($path, $URI, $this->_submit_method, $this->_submit_type, $postdata); + } + + if($this->_redirectaddr) + { + /* url was redirected, check if we've hit the max depth */ + if($this->maxredirs > $this->_redirectdepth) + { + if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr)) + $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]); + + // only follow redirect if it's on this site, or offsiteok is true + if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) + { + /* follow the redirect */ + $this->_redirectdepth++; + $this->lastredirectaddr=$this->_redirectaddr; + if( strpos( $this->_redirectaddr, "?" ) > 0 ) + $this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get + else + $this->submit($this->_redirectaddr,$formvars, $formfiles); + } + } + } + + if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) + { + $frameurls = $this->_frameurls; + $this->_frameurls = array(); + + while(list(,$frameurl) = each($frameurls)) + { + if($this->_framedepth < $this->maxframes) + { + $this->fetch($frameurl); + $this->_framedepth++; + } + else + break; + } + } + return true; + break; + + default: + // not a valid protocol + $this->error = 'Invalid protocol "'.$URI_PARTS["scheme"].'"\n'; + return false; + break; + } + return true; + } + +/*======================================================================*\ + Function: fetchlinks + Purpose: fetch the links from a web page + Input: $URI where you are fetching from + Output: $this->results an array of the URLs +\*======================================================================*/ + + function fetchlinks($URI) + { + if ($this->fetch($URI)) + { + if($this->lastredirectaddr) + $URI = $this->lastredirectaddr; + if(is_array($this->results)) + { + for($x=0;$x<count($this->results);$x++) + $this->results[$x] = $this->_striplinks($this->results[$x]); + } + else + $this->results = $this->_striplinks($this->results); + + if($this->expandlinks) + $this->results = $this->_expandlinks($this->results, $URI); + return true; + } + else + return false; + } + +/*======================================================================*\ + Function: fetchform + Purpose: fetch the form elements from a web page + Input: $URI where you are fetching from + Output: $this->results the resulting html form +\*======================================================================*/ + + function fetchform($URI) + { + + if ($this->fetch($URI)) + { + + if(is_array($this->results)) + { + for($x=0;$x<count($this->results);$x++) + $this->results[$x] = $this->_stripform($this->results[$x]); + } + else + $this->results = $this->_stripform($this->results); + + return true; + } + else + return false; + } + + +/*======================================================================*\ + Function: fetchtext + Purpose: fetch the text from a web page, stripping the links + Input: $URI where you are fetching from + Output: $this->results the text from the web page +\*======================================================================*/ + + function fetchtext($URI) + { + if($this->fetch($URI)) + { + if(is_array($this->results)) + { + for($x=0;$x<count($this->results);$x++) + $this->results[$x] = $this->_striptext($this->results[$x]); + } + else + $this->results = $this->_striptext($this->results); + return true; + } + else + return false; + } + +/*======================================================================*\ + Function: submitlinks + Purpose: grab links from a form submission + Input: $URI where you are submitting from + Output: $this->results an array of the links from the post +\*======================================================================*/ + + function submitlinks($URI, $formvars="", $formfiles="") + { + if($this->submit($URI,$formvars, $formfiles)) + { + if($this->lastredirectaddr) + $URI = $this->lastredirectaddr; + if(is_array($this->results)) + { + for($x=0;$x<count($this->results);$x++) + { + $this->results[$x] = $this->_striplinks($this->results[$x]); + if($this->expandlinks) + $this->results[$x] = $this->_expandlinks($this->results[$x],$URI); + } + } + else + { + $this->results = $this->_striplinks($this->results); + if($this->expandlinks) + $this->results = $this->_expandlinks($this->results,$URI); + } + return true; + } + else + return false; + } + +/*======================================================================*\ + Function: submittext + Purpose: grab text from a form submission + Input: $URI where you are submitting from + Output: $this->results the text from the web page +\*======================================================================*/ + + function submittext($URI, $formvars = "", $formfiles = "") + { + if($this->submit($URI,$formvars, $formfiles)) + { + if($this->lastredirectaddr) + $URI = $this->lastredirectaddr; + if(is_array($this->results)) + { + for($x=0;$x<count($this->results);$x++) + { + $this->results[$x] = $this->_striptext($this->results[$x]); + if($this->expandlinks) + $this->results[$x] = $this->_expandlinks($this->results[$x],$URI); + } + } + else + { + $this->results = $this->_striptext($this->results); + if($this->expandlinks) + $this->results = $this->_expandlinks($this->results,$URI); + } + return true; + } + else + return false; + } + + + +/*======================================================================*\ + Function: set_submit_multipart + Purpose: Set the form submission content type to + multipart/form-data +\*======================================================================*/ + function set_submit_multipart() + { + $this->_submit_type = "multipart/form-data"; + } + + +/*======================================================================*\ + Function: set_submit_normal + Purpose: Set the form submission content type to + application/x-www-form-urlencoded +\*======================================================================*/ + function set_submit_normal() + { + $this->_submit_type = "application/x-www-form-urlencoded"; + } + + + + +/*======================================================================*\ + Private functions +\*======================================================================*/ + + +/*======================================================================*\ + Function: _striplinks + Purpose: strip the hyperlinks from an html document + Input: $document document to strip. + Output: $match an array of the links +\*======================================================================*/ + + function _striplinks($document) + { + preg_match_all("'<\s*a\s.*?href\s*=\s* # find <a href= + ([\"\'])? # find single or double quote + (?(1) (.*?)\\1 | ([^\s\>]+)) # if quote found, match up to next matching + # quote, otherwise match up to next space + 'isx",$document,$links); + + + // catenate the non-empty matches from the conditional subpattern + + while(list($key,$val) = each($links[2])) + { + if(!empty($val)) + $match[] = $val; + } + + while(list($key,$val) = each($links[3])) + { + if(!empty($val)) + $match[] = $val; + } + + // return the links + return $match; + } + +/*======================================================================*\ + Function: _stripform + Purpose: strip the form elements from an html document + Input: $document document to strip. + Output: $match an array of the links +\*======================================================================*/ + + function _stripform($document) + { + preg_match_all("'<\/?(FORM|INPUT|SELECT|TEXTAREA|(OPTION))[^<>]*>(?(2)(.*(?=<\/?(option|select)[^<>]*>[\r\n]*)|(?=[\r\n]*))|(?=[\r\n]*))'Usi",$document,$elements); + + // catenate the matches + $match = implode("\r\n",$elements[0]); + + // return the links + return $match; + } + + + +/*======================================================================*\ + Function: _striptext + Purpose: strip the text from an html document + Input: $document document to strip. + Output: $text the resulting text +\*======================================================================*/ + + function _striptext($document) + { + + // I didn't use preg eval (//e) since that is only available in PHP 4.0. + // so, list your entities one by one here. I included some of the + // more common ones. + + $search = array("'<script[^>]*?>.*?</script>'si", // strip out javascript + "'<[\/\!]*?[^<>]*?>'si", // strip out html tags + "'([\r\n])[\s]+'", // strip out white space + "'&(quot|#34|#034|#x22);'i", // replace html entities + "'&(amp|#38|#038|#x26);'i", // added hexadecimal values + "'&(lt|#60|#060|#x3c);'i", + "'&(gt|#62|#062|#x3e);'i", + "'&(nbsp|#160|#xa0);'i", + "'&(iexcl|#161);'i", + "'&(cent|#162);'i", + "'&(pound|#163);'i", + "'&(copy|#169);'i", + "'&(reg|#174);'i", + "'&(deg|#176);'i", + "'&(#39|#039|#x27);'", + "'&(euro|#8364);'i", // europe + "'&a(uml|UML);'", // german + "'&o(uml|UML);'", + "'&u(uml|UML);'", + "'&A(uml|UML);'", + "'&O(uml|UML);'", + "'&U(uml|UML);'", + "'ß'i", + ); + $replace = array( "", + "", + "\\1", + "\"", + "&", + "<", + ">", + " ", + chr(161), + chr(162), + chr(163), + chr(169), + chr(174), + chr(176), + chr(39), + chr(128), + chr(0xE4), // ANSI ä + chr(0xF6), // ANSI ö + chr(0xFC), // ANSI ü + chr(0xC4), // ANSI Ä + chr(0xD6), // ANSI Ö + chr(0xDC), // ANSI Ü + chr(0xDF), // ANSI ß + ); + + $text = preg_replace($search,$replace,$document); + + return $text; + } + +/*======================================================================*\ + Function: _expandlinks + Purpose: expand each link into a fully qualified URL + Input: $links the links to qualify + $URI the full URI to get the base from + Output: $expandedLinks the expanded links +\*======================================================================*/ + + function _expandlinks($links,$URI) + { + + preg_match("/^[^\?]+/",$URI,$match); + + $match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]); + $match = preg_replace("|/$|","",$match); + $match_part = parse_url($match); + $match_root = + $match_part["scheme"]."://".$match_part["host"]; + + $search = array( "|^http://".preg_quote($this->host)."|i", + "|^(\/)|i", + "|^(?!http://)(?!mailto:)|i", + "|/\./|", + "|/[^\/]+/\.\./|" + ); + + $replace = array( "", + $match_root."/", + $match."/", + "/", + "/" + ); + + $expandedLinks = preg_replace($search,$replace,$links); + + return $expandedLinks; + } + +/*======================================================================*\ + Function: _httprequest + Purpose: go get the http data from the server + Input: $url the url to fetch + $fp the current open file pointer + $URI the full URI + $body body contents to send if any (POST) + Output: +\*======================================================================*/ + + function _httprequest($url,$fp,$URI,$http_method,$content_type="",$body="") + { + $cookie_headers = ''; + if($this->passcookies && $this->_redirectaddr) + $this->setcookies(); + + $URI_PARTS = parse_url($URI); + if(empty($url)) + $url = "/"; + $headers = $http_method." ".$url." ".$this->_httpversion."\r\n"; + if(!empty($this->agent)) + $headers .= "User-Agent: ".$this->agent."\r\n"; + if(!empty($this->host) && !isset($this->rawheaders['Host'])) { + $headers .= "Host: ".$this->host; + if(!empty($this->port) && $this->port != 80) + $headers .= ":".$this->port; + $headers .= "\r\n"; + } + if(!empty($this->accept)) + $headers .= "Accept: ".$this->accept."\r\n"; + if(!empty($this->referer)) + $headers .= "Referer: ".$this->referer."\r\n"; + if(!empty($this->cookies)) + { + if(!is_array($this->cookies)) + $this->cookies = (array)$this->cookies; + + reset($this->cookies); + if ( count($this->cookies) > 0 ) { + $cookie_headers .= 'Cookie: '; + foreach ( $this->cookies as $cookieKey => $cookieVal ) { + $cookie_headers .= $cookieKey."=".urlencode($cookieVal)."; "; + } + $headers .= substr($cookie_headers,0,-2) . "\r\n"; + } + } + if(!empty($this->rawheaders)) + { + if(!is_array($this->rawheaders)) + $this->rawheaders = (array)$this->rawheaders; + while(list($headerKey,$headerVal) = each($this->rawheaders)) + $headers .= $headerKey.": ".$headerVal."\r\n"; + } + if(!empty($content_type)) { + $headers .= "Content-type: $content_type"; + if ($content_type == "multipart/form-data") + $headers .= "; boundary=".$this->_mime_boundary; + $headers .= "\r\n"; + } + if(!empty($body)) + $headers .= "Content-length: ".strlen($body)."\r\n"; + if(!empty($this->user) || !empty($this->pass)) + $headers .= "Authorization: Basic ".base64_encode($this->user.":".$this->pass)."\r\n"; + + //add proxy auth headers + if(!empty($this->proxy_user)) + $headers .= 'Proxy-Authorization: ' . 'Basic ' . base64_encode($this->proxy_user . ':' . $this->proxy_pass)."\r\n"; + + + $headers .= "\r\n"; + + // set the read timeout if needed + if ($this->read_timeout > 0) + socket_set_timeout($fp, $this->read_timeout); + $this->timed_out = false; + + fwrite($fp,$headers.$body,strlen($headers.$body)); + + $this->_redirectaddr = false; + unset($this->headers); + + while($currentHeader = fgets($fp,$this->_maxlinelen)) + { + if ($this->read_timeout > 0 && $this->_check_timeout($fp)) + { + $this->status=-100; + return false; + } + + if($currentHeader == "\r\n") + break; + + // if a header begins with Location: or URI:, set the redirect + if(preg_match("/^(Location:|URI:)/i",$currentHeader)) + { + // get URL portion of the redirect + preg_match("/^(Location:|URI:)[ ]+(.*)/i",chop($currentHeader),$matches); + // look for :// in the Location header to see if hostname is included + if(!preg_match("|\:\/\/|",$matches[2])) + { + // no host in the path, so prepend + $this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port; + // eliminate double slash + if(!preg_match("|^/|",$matches[2])) + $this->_redirectaddr .= "/".$matches[2]; + else + $this->_redirectaddr .= $matches[2]; + } + else + $this->_redirectaddr = $matches[2]; + } + + if(preg_match("|^HTTP/|",$currentHeader)) + { + if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$currentHeader, $status)) + { + $this->status= $status[1]; + } + $this->response_code = $currentHeader; + } + + $this->headers[] = $currentHeader; + } + + $results = ''; + do { + $_data = fread($fp, $this->maxlength); + if (strlen($_data) == 0) { + break; + } + $results .= $_data; + } while(true); + + if ($this->read_timeout > 0 && $this->_check_timeout($fp)) + { + $this->status=-100; + return false; + } + + // check if there is a redirect meta tag + + if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match)) + + { + $this->_redirectaddr = $this->_expandlinks($match[1],$URI); + } + + // have we hit our frame depth and is there frame src to fetch? + if(($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i",$results,$match)) + { + $this->results[] = $results; + for($x=0; $x<count($match[1]); $x++) + $this->_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host); + } + // have we already fetched framed content? + elseif(is_array($this->results)) + $this->results[] = $results; + // no framed content + else + $this->results = $results; + + return true; + } + +/*======================================================================*\ + Function: _httpsrequest + Purpose: go get the https data from the server using curl + Input: $url the url to fetch + $URI the full URI + $body body contents to send if any (POST) + Output: +\*======================================================================*/ + + function _httpsrequest($url,$URI,$http_method,$content_type="",$body="") + { + if($this->passcookies && $this->_redirectaddr) + $this->setcookies(); + + $headers = array(); + + $URI_PARTS = parse_url($URI); + if(empty($url)) + $url = "/"; + // GET ... header not needed for curl + //$headers[] = $http_method." ".$url." ".$this->_httpversion; + if(!empty($this->agent)) + $headers[] = "User-Agent: ".$this->agent; + if(!empty($this->host)) + if(!empty($this->port)) + $headers[] = "Host: ".$this->host.":".$this->port; + else + $headers[] = "Host: ".$this->host; + if(!empty($this->accept)) + $headers[] = "Accept: ".$this->accept; + if(!empty($this->referer)) + $headers[] = "Referer: ".$this->referer; + if(!empty($this->cookies)) + { + if(!is_array($this->cookies)) + $this->cookies = (array)$this->cookies; + + reset($this->cookies); + if ( count($this->cookies) > 0 ) { + $cookie_str = 'Cookie: '; + foreach ( $this->cookies as $cookieKey => $cookieVal ) { + $cookie_str .= $cookieKey."=".urlencode($cookieVal)."; "; + } + $headers[] = substr($cookie_str,0,-2); + } + } + if(!empty($this->rawheaders)) + { + if(!is_array($this->rawheaders)) + $this->rawheaders = (array)$this->rawheaders; + while(list($headerKey,$headerVal) = each($this->rawheaders)) + $headers[] = $headerKey.": ".$headerVal; + } + if(!empty($content_type)) { + if ($content_type == "multipart/form-data") + $headers[] = "Content-type: $content_type; boundary=".$this->_mime_boundary; + else + $headers[] = "Content-type: $content_type"; + } + if(!empty($body)) + $headers[] = "Content-length: ".strlen($body); + if(!empty($this->user) || !empty($this->pass)) + $headers[] = "Authorization: BASIC ".base64_encode($this->user.":".$this->pass); + + for($curr_header = 0; $curr_header < count($headers); $curr_header++) { + $safer_header = strtr( $headers[$curr_header], "\"", " " ); + $cmdline_params .= " -H \"".$safer_header."\""; + } + + if(!empty($body)) + $cmdline_params .= " -d \"$body\""; + + if($this->read_timeout > 0) + $cmdline_params .= " -m ".$this->read_timeout; + + $headerfile = tempnam($this->temp_dir, "sno"); + + exec($this->curl_path." -k -D \"$headerfile\"".$cmdline_params." \"".escapeshellcmd($URI)."\"",$results,$return); + + if($return) + { + $this->error = "Error: cURL could not retrieve the document, error $return."; + return false; + } + + + $results = implode("\r\n",$results); + + $result_headers = file("$headerfile"); + + $this->_redirectaddr = false; + unset($this->headers); + + for($currentHeader = 0; $currentHeader < count($result_headers); $currentHeader++) + { + + // if a header begins with Location: or URI:, set the redirect + if(preg_match("/^(Location: |URI: )/i",$result_headers[$currentHeader])) + { + // get URL portion of the redirect + preg_match("/^(Location: |URI:)\s+(.*)/",chop($result_headers[$currentHeader]),$matches); + // look for :// in the Location header to see if hostname is included + if(!preg_match("|\:\/\/|",$matches[2])) + { + // no host in the path, so prepend + $this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port; + // eliminate double slash + if(!preg_match("|^/|",$matches[2])) + $this->_redirectaddr .= "/".$matches[2]; + else + $this->_redirectaddr .= $matches[2]; + } + else + $this->_redirectaddr = $matches[2]; + } + + if(preg_match("|^HTTP/|",$result_headers[$currentHeader])) + $this->response_code = $result_headers[$currentHeader]; + + $this->headers[] = $result_headers[$currentHeader]; + } + + // check if there is a redirect meta tag + + if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match)) + { + $this->_redirectaddr = $this->_expandlinks($match[1],$URI); + } + + // have we hit our frame depth and is there frame src to fetch? + if(($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i",$results,$match)) + { + $this->results[] = $results; + for($x=0; $x<count($match[1]); $x++) + $this->_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host); + } + // have we already fetched framed content? + elseif(is_array($this->results)) + $this->results[] = $results; + // no framed content + else + $this->results = $results; + + unlink("$headerfile"); + + return true; + } + +/*======================================================================*\ + Function: setcookies() + Purpose: set cookies for a redirection +\*======================================================================*/ + + function setcookies() + { + for($x=0; $x<count($this->headers); $x++) + { + if(preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i', $this->headers[$x],$match)) + $this->cookies[$match[1]] = urldecode($match[2]); + } + } + + +/*======================================================================*\ + Function: _check_timeout + Purpose: checks whether timeout has occurred + Input: $fp file pointer +\*======================================================================*/ + + function _check_timeout($fp) + { + if ($this->read_timeout > 0) { + $fp_status = socket_get_status($fp); + if ($fp_status["timed_out"]) { + $this->timed_out = true; + return true; + } + } + return false; + } + +/*======================================================================*\ + Function: _connect + Purpose: make a socket connection + Input: $fp file pointer +\*======================================================================*/ + + function _connect(&$fp) + { + if(!empty($this->proxy_host) && !empty($this->proxy_port)) + { + $this->_isproxy = true; + + $host = $this->proxy_host; + $port = $this->proxy_port; + } + else + { + $host = $this->host; + $port = $this->port; + } + + $this->status = 0; + + if($fp = fsockopen( + $host, + $port, + $errno, + $errstr, + $this->_fp_timeout + )) + { + // socket connection succeeded + + return true; + } + else + { + // socket connection failed + $this->status = $errno; + switch($errno) + { + case -3: + $this->error="socket creation failed (-3)"; + case -4: + $this->error="dns lookup failure (-4)"; + case -5: + $this->error="connection refused or timed out (-5)"; + default: + $this->error="connection failed (".$errno.")"; + } + return false; + } + } +/*======================================================================*\ + Function: _disconnect + Purpose: disconnect a socket connection + Input: $fp file pointer +\*======================================================================*/ + + function _disconnect($fp) + { + return(fclose($fp)); + } + + +/*======================================================================*\ + Function: _prepare_post_body + Purpose: Prepare post body according to encoding type + Input: $formvars - form variables + $formfiles - form upload files + Output: post body +\*======================================================================*/ + + function _prepare_post_body($formvars, $formfiles) + { + settype($formvars, "array"); + settype($formfiles, "array"); + $postdata = ''; + + if (count($formvars) == 0 && count($formfiles) == 0) + return; + + switch ($this->_submit_type) { + case "application/x-www-form-urlencoded": + reset($formvars); + while(list($key,$val) = each($formvars)) { + if (is_array($val) || is_object($val)) { + while (list($cur_key, $cur_val) = each($val)) { + $postdata .= urlencode($key)."[]=".urlencode($cur_val)."&"; + } + } else + $postdata .= urlencode($key)."=".urlencode($val)."&"; + } + break; + + case "multipart/form-data": + $this->_mime_boundary = "Snoopy".md5(uniqid(microtime())); + + reset($formvars); + while(list($key,$val) = each($formvars)) { + if (is_array($val) || is_object($val)) { + while (list($cur_key, $cur_val) = each($val)) { + $postdata .= "--".$this->_mime_boundary."\r\n"; + $postdata .= "Content-Disposition: form-data; name=\"$key\[\]\"\r\n\r\n"; + $postdata .= "$cur_val\r\n"; + } + } else { + $postdata .= "--".$this->_mime_boundary."\r\n"; + $postdata .= "Content-Disposition: form-data; name=\"$key\"\r\n\r\n"; + $postdata .= "$val\r\n"; + } + } + + reset($formfiles); + while (list($field_name, $file_names) = each($formfiles)) { + settype($file_names, "array"); + while (list(, $file_name) = each($file_names)) { + if (!is_readable($file_name)) continue; + + $fp = fopen($file_name, "r"); + $file_content = fread($fp, filesize($file_name)); + fclose($fp); + $base_name = basename($file_name); + + $postdata .= "--".$this->_mime_boundary."\r\n"; + $postdata .= "Content-Disposition: form-data; name=\"$field_name\"; filename=\"$base_name\"\r\n\r\n"; + $postdata .= "$file_content\r\n"; + } + } + $postdata .= "--".$this->_mime_boundary."--\r\n"; + break; + } + + return $postdata; + } +} +endif; +?> diff --git a/src/wp-includes/class-wp-admin-bar.php b/src/wp-includes/class-wp-admin-bar.php new file mode 100644 index 0000000..915478e --- /dev/null +++ b/src/wp-includes/class-wp-admin-bar.php @@ -0,0 +1,507 @@ +<?php +/** + * The WordPress Toolbar + * + * @since 3.1.0 + * + * @package WordPress + * @subpackage Toolbar + */ +class WP_Admin_Bar { + private $nodes = array(); + private $bound = false; + public $user; + + public function __get( $name ) { + switch ( $name ) { + case 'proto' : + return is_ssl() ? 'https://' : 'http://'; + break; + case 'menu' : + _deprecated_argument( 'WP_Admin_Bar', '3.3', 'Modify admin bar nodes with WP_Admin_Bar::get_node(), WP_Admin_Bar::add_node(), and WP_Admin_Bar::remove_node(), not the <code>menu</code> property.' ); + return array(); // Sorry, folks. + break; + } + } + + public function initialize() { + $this->user = new stdClass; + + if ( is_user_logged_in() ) { + /* Populate settings we need for the menu based on the current user. */ + $this->user->blogs = get_blogs_of_user( get_current_user_id() ); + if ( is_multisite() ) { + $this->user->active_blog = get_active_blog_for_user( get_current_user_id() ); + $this->user->domain = empty( $this->user->active_blog ) ? user_admin_url() : trailingslashit( get_home_url( $this->user->active_blog->blog_id ) ); + $this->user->account_domain = $this->user->domain; + } else { + $this->user->active_blog = $this->user->blogs[get_current_blog_id()]; + $this->user->domain = trailingslashit( home_url() ); + $this->user->account_domain = $this->user->domain; + } + } + + add_action( 'wp_head', 'wp_admin_bar_header' ); + + add_action( 'admin_head', 'wp_admin_bar_header' ); + + if ( current_theme_supports( 'admin-bar' ) ) { + /** + * To remove the default padding styles from WordPress for the Toolbar, use the following code: + * add_theme_support( 'admin-bar', array( 'callback' => '__return_false' ) ); + */ + $admin_bar_args = get_theme_support( 'admin-bar' ); + $header_callback = $admin_bar_args[0]['callback']; + } + + if ( empty($header_callback) ) + $header_callback = '_admin_bar_bump_cb'; + + add_action('wp_head', $header_callback); + + wp_enqueue_script( 'admin-bar' ); + wp_enqueue_style( 'admin-bar' ); + + /** + * Fires after WP_Admin_Bar is initialized. + * + * @since 3.1.0 + */ + do_action( 'admin_bar_init' ); + } + + public function add_menu( $node ) { + $this->add_node( $node ); + } + + public function remove_menu( $id ) { + $this->remove_node( $id ); + } + + /** + * Add a node to the menu. + * + * @param array $args - The arguments for each node. + * - id - string - The ID of the item. + * - title - string - The title of the node. + * - parent - string - The ID of the parent node. Optional. + * - href - string - The link for the item. Optional. + * - group - boolean - If the node is a group. Optional. Default false. + * - meta - array - Meta data including the following keys: html, class, onclick, target, title, tabindex. + */ + public function add_node( $args ) { + // Shim for old method signature: add_node( $parent_id, $menu_obj, $args ) + if ( func_num_args() >= 3 && is_string( func_get_arg(0) ) ) + $args = array_merge( array( 'parent' => func_get_arg(0) ), func_get_arg(2) ); + + if ( is_object( $args ) ) + $args = get_object_vars( $args ); + + // Ensure we have a valid title. + if ( empty( $args['id'] ) ) { + if ( empty( $args['title'] ) ) + return; + + _doing_it_wrong( __METHOD__, __( 'The menu ID should not be empty.' ), '3.3' ); + // Deprecated: Generate an ID from the title. + $args['id'] = esc_attr( sanitize_title( trim( $args['title'] ) ) ); + } + + $defaults = array( + 'id' => false, + 'title' => false, + 'parent' => false, + 'href' => false, + 'group' => false, + 'meta' => array(), + ); + + // If the node already exists, keep any data that isn't provided. + if ( $maybe_defaults = $this->get_node( $args['id'] ) ) + $defaults = get_object_vars( $maybe_defaults ); + + // Do the same for 'meta' items. + if ( ! empty( $defaults['meta'] ) && ! empty( $args['meta'] ) ) + $args['meta'] = wp_parse_args( $args['meta'], $defaults['meta'] ); + + $args = wp_parse_args( $args, $defaults ); + + $back_compat_parents = array( + 'my-account-with-avatar' => array( 'my-account', '3.3' ), + 'my-blogs' => array( 'my-sites', '3.3' ), + ); + + if ( isset( $back_compat_parents[ $args['parent'] ] ) ) { + list( $new_parent, $version ) = $back_compat_parents[ $args['parent'] ]; + _deprecated_argument( __METHOD__, $version, sprintf( 'Use <code>%s</code> as the parent for the <code>%s</code> admin bar node instead of <code>%s</code>.', $new_parent, $args['id'], $args['parent'] ) ); + $args['parent'] = $new_parent; + } + + $this->_set_node( $args ); + } + + final protected function _set_node( $args ) { + $this->nodes[ $args['id'] ] = (object) $args; + } + + /** + * Gets a node. + * + * @return object Node. + */ + final public function get_node( $id ) { + if ( $node = $this->_get_node( $id ) ) + return clone $node; + } + + final protected function _get_node( $id ) { + if ( $this->bound ) + return; + + if ( empty( $id ) ) + $id = 'root'; + + if ( isset( $this->nodes[ $id ] ) ) + return $this->nodes[ $id ]; + } + + final public function get_nodes() { + if ( ! $nodes = $this->_get_nodes() ) + return; + + foreach ( $nodes as &$node ) { + $node = clone $node; + } + return $nodes; + } + + final protected function _get_nodes() { + if ( $this->bound ) + return; + + return $this->nodes; + } + + /** + * Add a group to a menu node. + * + * @since 3.3.0 + * + * @param array $args - The arguments for each node. + * - id - string - The ID of the item. + * - parent - string - The ID of the parent node. Optional. Default root. + * - meta - array - Meta data including the following keys: class, onclick, target, title. + */ + final public function add_group( $args ) { + $args['group'] = true; + + $this->add_node( $args ); + } + + /** + * Remove a node. + * + * @param string The ID of the item. + */ + public function remove_node( $id ) { + $this->_unset_node( $id ); + } + + final protected function _unset_node( $id ) { + unset( $this->nodes[ $id ] ); + } + + public function render() { + $root = $this->_bind(); + if ( $root ) + $this->_render( $root ); + } + + final protected function _bind() { + if ( $this->bound ) + return; + + // Add the root node. + // Clear it first, just in case. Don't mess with The Root. + $this->remove_node( 'root' ); + $this->add_node( array( + 'id' => 'root', + 'group' => false, + ) ); + + // Normalize nodes: define internal 'children' and 'type' properties. + foreach ( $this->_get_nodes() as $node ) { + $node->children = array(); + $node->type = ( $node->group ) ? 'group' : 'item'; + unset( $node->group ); + + // The Root wants your orphans. No lonely items allowed. + if ( ! $node->parent ) + $node->parent = 'root'; + } + + foreach ( $this->_get_nodes() as $node ) { + if ( 'root' == $node->id ) + continue; + + // Fetch the parent node. If it isn't registered, ignore the node. + if ( ! $parent = $this->_get_node( $node->parent ) ) { + continue; + } + + // Generate the group class (we distinguish between top level and other level groups). + $group_class = ( $node->parent == 'root' ) ? 'ab-top-menu' : 'ab-submenu'; + + if ( $node->type == 'group' ) { + if ( empty( $node->meta['class'] ) ) + $node->meta['class'] = $group_class; + else + $node->meta['class'] .= ' ' . $group_class; + } + + // Items in items aren't allowed. Wrap nested items in 'default' groups. + if ( $parent->type == 'item' && $node->type == 'item' ) { + $default_id = $parent->id . '-default'; + $default = $this->_get_node( $default_id ); + + // The default group is added here to allow groups that are + // added before standard menu items to render first. + if ( ! $default ) { + // Use _set_node because add_node can be overloaded. + // Make sure to specify default settings for all properties. + $this->_set_node( array( + 'id' => $default_id, + 'parent' => $parent->id, + 'type' => 'group', + 'children' => array(), + 'meta' => array( + 'class' => $group_class, + ), + 'title' => false, + 'href' => false, + ) ); + $default = $this->_get_node( $default_id ); + $parent->children[] = $default; + } + $parent = $default; + + // Groups in groups aren't allowed. Add a special 'container' node. + // The container will invisibly wrap both groups. + } elseif ( $parent->type == 'group' && $node->type == 'group' ) { + $container_id = $parent->id . '-container'; + $container = $this->_get_node( $container_id ); + + // We need to create a container for this group, life is sad. + if ( ! $container ) { + // Use _set_node because add_node can be overloaded. + // Make sure to specify default settings for all properties. + $this->_set_node( array( + 'id' => $container_id, + 'type' => 'container', + 'children' => array( $parent ), + 'parent' => false, + 'title' => false, + 'href' => false, + 'meta' => array(), + ) ); + + $container = $this->_get_node( $container_id ); + + // Link the container node if a grandparent node exists. + $grandparent = $this->_get_node( $parent->parent ); + + if ( $grandparent ) { + $container->parent = $grandparent->id; + + $index = array_search( $parent, $grandparent->children, true ); + if ( $index === false ) + $grandparent->children[] = $container; + else + array_splice( $grandparent->children, $index, 1, array( $container ) ); + } + + $parent->parent = $container->id; + } + + $parent = $container; + } + + // Update the parent ID (it might have changed). + $node->parent = $parent->id; + + // Add the node to the tree. + $parent->children[] = $node; + } + + $root = $this->_get_node( 'root' ); + $this->bound = true; + return $root; + } + + final protected function _render( $root ) { + global $is_IE; + + // Add browser classes. + // We have to do this here since admin bar shows on the front end. + $class = 'nojq nojs'; + if ( $is_IE ) { + if ( strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE 7' ) ) + $class .= ' ie7'; + elseif ( strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE 8' ) ) + $class .= ' ie8'; + elseif ( strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE 9' ) ) + $class .= ' ie9'; + } elseif ( wp_is_mobile() ) { + $class .= ' mobile'; + } + + ?> + <div id="wpadminbar" class="<?php echo $class; ?>" role="navigation"> + <a class="screen-reader-shortcut" href="#wp-toolbar" tabindex="1"><?php _e('Skip to toolbar'); ?></a> + <div class="quicklinks" id="wp-toolbar" role="navigation" aria-label="<?php esc_attr_e('Top navigation toolbar.'); ?>" tabindex="0"> + <?php foreach ( $root->children as $group ) { + $this->_render_group( $group ); + } ?> + </div> + <?php if ( is_user_logged_in() ) : ?> + <a class="screen-reader-shortcut" href="<?php echo esc_url( wp_logout_url() ); ?>"><?php _e('Log Out'); ?></a> + <?php endif; ?> + </div> + + <?php + } + + final protected function _render_container( $node ) { + if ( $node->type != 'container' || empty( $node->children ) ) + return; + + ?><div id="<?php echo esc_attr( 'wp-admin-bar-' . $node->id ); ?>" class="ab-group-container"><?php + foreach ( $node->children as $group ) { + $this->_render_group( $group ); + } + ?></div><?php + } + + final protected function _render_group( $node ) { + if ( $node->type == 'container' ) + return $this->_render_container( $node ); + + if ( $node->type != 'group' || empty( $node->children ) ) + return; + + if ( ! empty( $node->meta['class'] ) ) + $class = ' class="' . esc_attr( trim( $node->meta['class'] ) ) . '"'; + else + $class = ''; + + ?><ul id="<?php echo esc_attr( 'wp-admin-bar-' . $node->id ); ?>"<?php echo $class; ?>><?php + foreach ( $node->children as $item ) { + $this->_render_item( $item ); + } + ?></ul><?php + } + + final protected function _render_item( $node ) { + if ( $node->type != 'item' ) + return; + + $is_parent = ! empty( $node->children ); + $has_link = ! empty( $node->href ); + + $tabindex = isset( $node->meta['tabindex'] ) ? (int) $node->meta['tabindex'] : ''; + $aria_attributes = $tabindex ? 'tabindex="' . $tabindex . '"' : ''; + + $menuclass = ''; + + if ( $is_parent ) { + $menuclass = 'menupop '; + $aria_attributes .= ' aria-haspopup="true"'; + } + + if ( ! empty( $node->meta['class'] ) ) + $menuclass .= $node->meta['class']; + + if ( $menuclass ) + $menuclass = ' class="' . esc_attr( trim( $menuclass ) ) . '"'; + + ?> + + <li id="<?php echo esc_attr( 'wp-admin-bar-' . $node->id ); ?>"<?php echo $menuclass; ?>><?php + if ( $has_link ): + ?><a class="ab-item" <?php echo $aria_attributes; ?> href="<?php echo esc_url( $node->href ) ?>"<?php + if ( ! empty( $node->meta['onclick'] ) ) : + ?> onclick="<?php echo esc_js( $node->meta['onclick'] ); ?>"<?php + endif; + if ( ! empty( $node->meta['target'] ) ) : + ?> target="<?php echo esc_attr( $node->meta['target'] ); ?>"<?php + endif; + if ( ! empty( $node->meta['title'] ) ) : + ?> title="<?php echo esc_attr( $node->meta['title'] ); ?>"<?php + endif; + ?>><?php + else: + ?><div class="ab-item ab-empty-item" <?php echo $aria_attributes; + if ( ! empty( $node->meta['title'] ) ) : + ?> title="<?php echo esc_attr( $node->meta['title'] ); ?>"<?php + endif; + ?>><?php + endif; + + echo $node->title; + + if ( $has_link ) : + ?></a><?php + else: + ?></div><?php + endif; + + if ( $is_parent ) : + ?><div class="ab-sub-wrapper"><?php + foreach ( $node->children as $group ) { + $this->_render_group( $group ); + } + ?></div><?php + endif; + + if ( ! empty( $node->meta['html'] ) ) + echo $node->meta['html']; + + ?> + </li><?php + } + + public function recursive_render( $id, $node ) { + _deprecated_function( __METHOD__, '3.3', 'WP_Admin_bar::render(), WP_Admin_Bar::_render_item()' ); + $this->_render_item( $node ); + } + + public function add_menus() { + // User related, aligned right. + add_action( 'admin_bar_menu', 'wp_admin_bar_my_account_menu', 0 ); + add_action( 'admin_bar_menu', 'wp_admin_bar_search_menu', 4 ); + add_action( 'admin_bar_menu', 'wp_admin_bar_my_account_item', 7 ); + + // Site related. + add_action( 'admin_bar_menu', 'wp_admin_bar_sidebar_toggle', 0 ); + add_action( 'admin_bar_menu', 'wp_admin_bar_wp_menu', 10 ); + add_action( 'admin_bar_menu', 'wp_admin_bar_my_sites_menu', 20 ); + add_action( 'admin_bar_menu', 'wp_admin_bar_site_menu', 30 ); + add_action( 'admin_bar_menu', 'wp_admin_bar_updates_menu', 40 ); + + // Content related. + if ( ! is_network_admin() && ! is_user_admin() ) { + add_action( 'admin_bar_menu', 'wp_admin_bar_comments_menu', 60 ); + add_action( 'admin_bar_menu', 'wp_admin_bar_new_content_menu', 70 ); + } + add_action( 'admin_bar_menu', 'wp_admin_bar_edit_menu', 80 ); + + add_action( 'admin_bar_menu', 'wp_admin_bar_add_secondary_groups', 200 ); + + /** + * Fires after menus are added to the menu bar. + * + * @since 3.1.0 + */ + do_action( 'add_admin_bar_menus' ); + } +} diff --git a/src/wp-includes/class-wp-ajax-response.php b/src/wp-includes/class-wp-ajax-response.php new file mode 100644 index 0000000..24eb687 --- /dev/null +++ b/src/wp-includes/class-wp-ajax-response.php @@ -0,0 +1,139 @@ +<?php +/** + * Send XML response back to AJAX request. + * + * @package WordPress + * @since 2.1.0 + */ +class WP_Ajax_Response { + /** + * Store XML responses to send. + * + * @since 2.1.0 + * @var array + * @access private + */ + var $responses = array(); + + /** + * Constructor - Passes args to {@link WP_Ajax_Response::add()}. + * + * @since 2.1.0 + * @see WP_Ajax_Response::add() + * + * @param string|array $args Optional. Will be passed to add() method. + * @return WP_Ajax_Response + */ + function __construct( $args = '' ) { + if ( !empty($args) ) + $this->add($args); + } + + /** + * Append to XML response based on given arguments. + * + * The arguments that can be passed in the $args parameter are below. It is + * also possible to pass a WP_Error object in either the 'id' or 'data' + * argument. The parameter isn't actually optional, content should be given + * in order to send the correct response. + * + * 'what' argument is a string that is the XMLRPC response type. + * 'action' argument is a boolean or string that acts like a nonce. + * 'id' argument can be WP_Error or an integer. + * 'old_id' argument is false by default or an integer of the previous ID. + * 'position' argument is an integer or a string with -1 = top, 1 = bottom, + * html ID = after, -html ID = before. + * 'data' argument is a string with the content or message. + * 'supplemental' argument is an array of strings that will be children of + * the supplemental element. + * + * @since 2.1.0 + * + * @param string|array $args Override defaults. + * @return string XML response. + */ + function add( $args = '' ) { + $defaults = array( + 'what' => 'object', 'action' => false, + 'id' => '0', 'old_id' => false, + 'position' => 1, + 'data' => '', 'supplemental' => array() + ); + + $r = wp_parse_args( $args, $defaults ); + extract( $r, EXTR_SKIP ); + $position = preg_replace( '/[^a-z0-9:_-]/i', '', $position ); + + if ( is_wp_error($id) ) { + $data = $id; + $id = 0; + } + + $response = ''; + if ( is_wp_error($data) ) { + foreach ( (array) $data->get_error_codes() as $code ) { + $response .= "<wp_error code='$code'><![CDATA[" . $data->get_error_message($code) . "]]></wp_error>"; + if ( !$error_data = $data->get_error_data($code) ) + continue; + $class = ''; + if ( is_object($error_data) ) { + $class = ' class="' . get_class($error_data) . '"'; + $error_data = get_object_vars($error_data); + } + + $response .= "<wp_error_data code='$code'$class>"; + + if ( is_scalar($error_data) ) { + $response .= "<![CDATA[$error_data]]>"; + } elseif ( is_array($error_data) ) { + foreach ( $error_data as $k => $v ) + $response .= "<$k><![CDATA[$v]]></$k>"; + } + + $response .= "</wp_error_data>"; + } + } else { + $response = "<response_data><![CDATA[$data]]></response_data>"; + } + + $s = ''; + if ( is_array($supplemental) ) { + foreach ( $supplemental as $k => $v ) + $s .= "<$k><![CDATA[$v]]></$k>"; + $s = "<supplemental>$s</supplemental>"; + } + + if ( false === $action ) + $action = $_POST['action']; + + $x = ''; + $x .= "<response action='{$action}_$id'>"; // The action attribute in the xml output is formatted like a nonce action + $x .= "<$what id='$id' " . ( false === $old_id ? '' : "old_id='$old_id' " ) . "position='$position'>"; + $x .= $response; + $x .= $s; + $x .= "</$what>"; + $x .= "</response>"; + + $this->responses[] = $x; + return $x; + } + + /** + * Display XML formatted responses. + * + * Sets the content type header to text/xml. + * + * @since 2.1.0 + */ + function send() { + header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ) ); + echo "<?xml version='1.0' encoding='" . get_option( 'blog_charset' ) . "' standalone='yes'?><wp_ajax>"; + foreach ( (array) $this->responses as $response ) + echo $response; + echo '</wp_ajax>'; + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) + wp_die(); + else + die(); + } +} diff --git a/src/wp-includes/class-wp-customize-control.php b/src/wp-includes/class-wp-customize-control.php new file mode 100644 index 0000000..fde8561 --- /dev/null +++ b/src/wp-includes/class-wp-customize-control.php @@ -0,0 +1,817 @@ +<?php +/** + * Customize Control Class + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ +class WP_Customize_Control { + /** + * @access public + * @var WP_Customize_Manager + */ + public $manager; + + /** + * @access public + * @var string + */ + public $id; + + /** + * All settings tied to the control. + * + * @access public + * @var array + */ + public $settings; + + /** + * The primary setting for the control (if there is one). + * + * @access public + * @var string + */ + public $setting = 'default'; + + /** + * @access public + * @var int + */ + public $priority = 10; + + /** + * @access public + * @var string + */ + public $section = ''; + + /** + * @access public + * @var string + */ + public $label = ''; + + /** + * @todo: Remove choices + * + * @access public + * @var array + */ + public $choices = array(); + + /** + * @access public + * @var array + */ + public $json = array(); + + /** + * @access public + * @var string + */ + public $type = 'text'; + + + /** + * Constructor. + * + * If $args['settings'] is not defined, use the $id as the setting ID. + * + * @since 3.4.0 + * + * @param WP_Customize_Manager $manager + * @param string $id + * @param array $args + */ + function __construct( $manager, $id, $args = array() ) { + $keys = array_keys( get_object_vars( $this ) ); + foreach ( $keys as $key ) { + if ( isset( $args[ $key ] ) ) + $this->$key = $args[ $key ]; + } + + $this->manager = $manager; + $this->id = $id; + + + // Process settings. + if ( empty( $this->settings ) ) + $this->settings = $id; + + $settings = array(); + if ( is_array( $this->settings ) ) { + foreach ( $this->settings as $key => $setting ) { + $settings[ $key ] = $this->manager->get_setting( $setting ); + } + } else { + $this->setting = $this->manager->get_setting( $this->settings ); + $settings['default'] = $this->setting; + } + $this->settings = $settings; + } + + /** + * Enqueue control related scripts/styles. + * + * @since 3.4.0 + */ + public function enqueue() {} + + + /** + * Fetch a setting's value. + * Grabs the main setting by default. + * + * @since 3.4.0 + * + * @param string $setting_key + * @return mixed The requested setting's value, if the setting exists. + */ + public final function value( $setting_key = 'default' ) { + if ( isset( $this->settings[ $setting_key ] ) ) + return $this->settings[ $setting_key ]->value(); + } + + /** + * Refresh the parameters passed to the JavaScript via JSON. + * + * @since 3.4.0 + */ + public function to_json() { + $this->json['settings'] = array(); + foreach ( $this->settings as $key => $setting ) { + $this->json['settings'][ $key ] = $setting->id; + } + + $this->json['type'] = $this->type; + } + + /** + * Check if the theme supports the control and check user capabilities. + * + * @since 3.4.0 + * + * @return bool False if theme doesn't support the control or user doesn't have the required permissions, otherwise true. + */ + public final function check_capabilities() { + foreach ( $this->settings as $setting ) { + if ( ! $setting->check_capabilities() ) + return false; + } + + $section = $this->manager->get_section( $this->section ); + if ( isset( $section ) && ! $section->check_capabilities() ) + return false; + + return true; + } + + /** + * Check capabilities and render the control. + * + * @since 3.4.0 + * @uses WP_Customize_Control::render() + */ + public final function maybe_render() { + if ( ! $this->check_capabilities() ) + return; + + do_action( 'customize_render_control', $this ); + do_action( 'customize_render_control_' . $this->id, $this ); + + $this->render(); + } + + /** + * Render the control. Renders the control wrapper, then calls $this->render_content(). + * + * @since 3.4.0 + */ + protected function render() { + $id = 'customize-control-' . str_replace( '[', '-', str_replace( ']', '', $this->id ) ); + $class = 'customize-control customize-control-' . $this->type; + + ?><li id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>"> + <?php $this->render_content(); ?> + </li><?php + } + + /** + * Get the data link parameter for a setting. + * + * @since 3.4.0 + * + * @param string $setting_key + * @return string Data link parameter, if $setting_key is a valid setting, empty string otherwise. + */ + public function get_link( $setting_key = 'default' ) { + if ( ! isset( $this->settings[ $setting_key ] ) ) + return ''; + + return 'data-customize-setting-link="' . esc_attr( $this->settings[ $setting_key ]->id ) . '"'; + } + + /** + * Render the data link parameter for a setting + * + * @since 3.4.0 + * @uses WP_Customize_Control::get_link() + * + * @param string $setting_key + */ + public function link( $setting_key = 'default' ) { + echo $this->get_link( $setting_key ); + } + + /** + * Render the control's content. + * + * Allows the content to be overriden without having to rewrite the wrapper. + * + * @since 3.4.0 + */ + protected function render_content() { + switch( $this->type ) { + case 'text': + ?> + <label> + <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> + <input type="text" value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); ?> /> + </label> + <?php + break; + case 'checkbox': + ?> + <label> + <input type="checkbox" value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); checked( $this->value() ); ?> /> + <?php echo esc_html( $this->label ); ?> + </label> + <?php + break; + case 'radio': + if ( empty( $this->choices ) ) + return; + + $name = '_customize-radio-' . $this->id; + + ?> + <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> + <?php + foreach ( $this->choices as $value => $label ) : + ?> + <label> + <input type="radio" value="<?php echo esc_attr( $value ); ?>" name="<?php echo esc_attr( $name ); ?>" <?php $this->link(); checked( $this->value(), $value ); ?> /> + <?php echo esc_html( $label ); ?><br/> + </label> + <?php + endforeach; + break; + case 'select': + if ( empty( $this->choices ) ) + return; + + ?> + <label> + <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> + <select <?php $this->link(); ?>> + <?php + foreach ( $this->choices as $value => $label ) + echo '<option value="' . esc_attr( $value ) . '"' . selected( $this->value(), $value, false ) . '>' . $label . '</option>'; + ?> + </select> + </label> + <?php + break; + case 'dropdown-pages': + $dropdown = wp_dropdown_pages( + array( + 'name' => '_customize-dropdown-pages-' . $this->id, + 'echo' => 0, + 'show_option_none' => __( '— Select —' ), + 'option_none_value' => '0', + 'selected' => $this->value(), + ) + ); + + // Hackily add in the data link parameter. + $dropdown = str_replace( '<select', '<select ' . $this->get_link(), $dropdown ); + + printf( + '<label class="customize-control-select"><span class="customize-control-title">%s</span> %s</label>', + $this->label, + $dropdown + ); + break; + } + } +} + +/** + * Customize Color Control Class + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ +class WP_Customize_Color_Control extends WP_Customize_Control { + /** + * @access public + * @var string + */ + public $type = 'color'; + + /** + * @access public + * @var array + */ + public $statuses; + + /** + * Constructor. + * + * If $args['settings'] is not defined, use the $id as the setting ID. + * + * @since 3.4.0 + * @uses WP_Customize_Control::__construct() + * + * @param WP_Customize_Manager $manager + * @param string $id + * @param array $args + */ + public function __construct( $manager, $id, $args = array() ) { + $this->statuses = array( '' => __('Default') ); + parent::__construct( $manager, $id, $args ); + } + + /** + * Enqueue control related scripts/styles. + * + * @since 3.4.0 + */ + public function enqueue() { + wp_enqueue_script( 'wp-color-picker' ); + wp_enqueue_style( 'wp-color-picker' ); + } + + /** + * Refresh the parameters passed to the JavaScript via JSON. + * + * @since 3.4.0 + * @uses WP_Customize_Control::to_json() + */ + public function to_json() { + parent::to_json(); + $this->json['statuses'] = $this->statuses; + } + + /** + * Render the control's content. + * + * @since 3.4.0 + */ + public function render_content() { + $this_default = $this->setting->default; + $default_attr = ''; + if ( $this_default ) { + if ( false === strpos( $this_default, '#' ) ) + $this_default = '#' . $this_default; + $default_attr = ' data-default-color="' . esc_attr( $this_default ) . '"'; + } + // The input's value gets set by JS. Don't fill it. + ?> + <label> + <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> + <div class="customize-control-content"> + <input class="color-picker-hex" type="text" maxlength="7" placeholder="<?php esc_attr_e( 'Hex Value' ); ?>"<?php echo $default_attr; ?> /> + </div> + </label> + <?php + } +} + +/** + * Customize Upload Control Class + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ +class WP_Customize_Upload_Control extends WP_Customize_Control { + public $type = 'upload'; + public $removed = ''; + public $context; + public $extensions = array(); + + /** + * Enqueue control related scripts/styles. + * + * @since 3.4.0 + */ + public function enqueue() { + wp_enqueue_script( 'wp-plupload' ); + } + + /** + * Refresh the parameters passed to the JavaScript via JSON. + * + * @since 3.4.0 + * @uses WP_Customize_Control::to_json() + */ + public function to_json() { + parent::to_json(); + + $this->json['removed'] = $this->removed; + + if ( $this->context ) + $this->json['context'] = $this->context; + + if ( $this->extensions ) + $this->json['extensions'] = implode( ',', $this->extensions ); + } + + /** + * Render the control's content. + * + * @since 3.4.0 + */ + public function render_content() { + ?> + <label> + <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> + <div> + <a href="#" class="button-secondary upload"><?php _e( 'Upload' ); ?></a> + <a href="#" class="remove"><?php _e( 'Remove' ); ?></a> + </div> + </label> + <?php + } +} + +/** + * Customize Image Control Class + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ +class WP_Customize_Image_Control extends WP_Customize_Upload_Control { + public $type = 'image'; + public $get_url; + public $statuses; + public $extensions = array( 'jpg', 'jpeg', 'gif', 'png' ); + + protected $tabs = array(); + + /** + * Constructor. + * + * If $args['settings'] is not defined, use the $id as the setting ID. + * + * @since 3.4.0 + * @uses WP_Customize_Upload_Control::__construct() + * + * @param WP_Customize_Manager $manager + * @param string $id + * @param array $args + */ + public function __construct( $manager, $id, $args ) { + $this->statuses = array( '' => __('No Image') ); + + parent::__construct( $manager, $id, $args ); + + $this->add_tab( 'upload-new', __('Upload New'), array( $this, 'tab_upload_new' ) ); + $this->add_tab( 'uploaded', __('Uploaded'), array( $this, 'tab_uploaded' ) ); + + // Early priority to occur before $this->manager->prepare_controls(); + add_action( 'customize_controls_init', array( $this, 'prepare_control' ), 5 ); + } + + /** + * Prepares the control. + * + * If no tabs exist, removes the control from the manager. + * + * @since 3.4.2 + */ + public function prepare_control() { + if ( ! $this->tabs ) + $this->manager->remove_control( $this->id ); + } + + /** + * Refresh the parameters passed to the JavaScript via JSON. + * + * @since 3.4.0 + * @uses WP_Customize_Upload_Control::to_json() + */ + public function to_json() { + parent::to_json(); + $this->json['statuses'] = $this->statuses; + } + + /** + * Render the control's content. + * + * @since 3.4.0 + */ + public function render_content() { + $src = $this->value(); + if ( isset( $this->get_url ) ) + $src = call_user_func( $this->get_url, $src ); + + ?> + <div class="customize-image-picker"> + <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> + + <div class="customize-control-content"> + <div class="dropdown preview-thumbnail" tabindex="0"> + <div class="dropdown-content"> + <?php if ( empty( $src ) ): ?> + <img style="display:none;" /> + <?php else: ?> + <img src="<?php echo esc_url( set_url_scheme( $src ) ); ?>" /> + <?php endif; ?> + <div class="dropdown-status"></div> + </div> + <div class="dropdown-arrow"></div> + </div> + </div> + + <div class="library"> + <ul> + <?php foreach ( $this->tabs as $id => $tab ): ?> + <li data-customize-tab='<?php echo esc_attr( $id ); ?>' tabindex='0'> + <?php echo esc_html( $tab['label'] ); ?> + </li> + <?php endforeach; ?> + </ul> + <?php foreach ( $this->tabs as $id => $tab ): ?> + <div class="library-content" data-customize-tab='<?php echo esc_attr( $id ); ?>'> + <?php call_user_func( $tab['callback'] ); ?> + </div> + <?php endforeach; ?> + </div> + + <div class="actions"> + <a href="#" class="remove"><?php _e( 'Remove Image' ); ?></a> + </div> + </div> + <?php + } + + /** + * Add a tab to the control. + * + * @since 3.4.0 + * + * @param string $id + * @param string $label + * @param mixed $callback + */ + public function add_tab( $id, $label, $callback ) { + $this->tabs[ $id ] = array( + 'label' => $label, + 'callback' => $callback, + ); + } + + /** + * Remove a tab from the control. + * + * @since 3.4.0 + * + * @param string $id + */ + public function remove_tab( $id ) { + unset( $this->tabs[ $id ] ); + } + + /** + * @since 3.4.0 + */ + public function tab_upload_new() { + if ( ! _device_can_upload() ) { + echo '<p>' . sprintf( __('The web browser on your device cannot be used to upload files. You may be able to use the <a href="%s">native app for your device</a> instead.'), 'http://wordpress.org/mobile/' ) . '</p>'; + } else { + ?> + <div class="upload-dropzone"> + <?php _e('Drop a file here or <a href="#" class="upload">select a file</a>.'); ?> + </div> + <div class="upload-fallback"> + <span class="button-secondary"><?php _e('Select File'); ?></span> + </div> + <?php + } + } + + /** + * @since 3.4.0 + */ + public function tab_uploaded() { + ?> + <div class="uploaded-target"></div> + <?php + } + + /** + * @since 3.4.0 + * + * @param string $url + * @param string $thumbnail_url + */ + public function print_tab_image( $url, $thumbnail_url = null ) { + $url = set_url_scheme( $url ); + $thumbnail_url = ( $thumbnail_url ) ? set_url_scheme( $thumbnail_url ) : $url; + ?> + <a href="#" class="thumbnail" data-customize-image-value="<?php echo esc_url( $url ); ?>"> + <img src="<?php echo esc_url( $thumbnail_url ); ?>" /> + </a> + <?php + } +} + +/** + * Customize Background Image Control Class + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ +class WP_Customize_Background_Image_Control extends WP_Customize_Image_Control { + + /** + * Constructor. + * + * @since 3.4.0 + * @uses WP_Customize_Image_Control::__construct() + * + * @param WP_Customize_Manager $manager + */ + public function __construct( $manager ) { + parent::__construct( $manager, 'background_image', array( + 'label' => __( 'Background Image' ), + 'section' => 'background_image', + 'context' => 'custom-background', + 'get_url' => 'get_background_image', + ) ); + + if ( $this->setting->default ) + $this->add_tab( 'default', __('Default'), array( $this, 'tab_default_background' ) ); + } + + /** + * @since 3.4.0 + */ + public function tab_uploaded() { + $backgrounds = get_posts( array( + 'post_type' => 'attachment', + 'meta_key' => '_wp_attachment_is_custom_background', + 'meta_value' => $this->manager->get_stylesheet(), + 'orderby' => 'none', + 'nopaging' => true, + ) ); + + ?><div class="uploaded-target"></div><?php + + if ( empty( $backgrounds ) ) + return; + + foreach ( (array) $backgrounds as $background ) + $this->print_tab_image( esc_url_raw( $background->guid ) ); + } + + /** + * @since 3.4.0 + * @uses WP_Customize_Image_Control::print_tab_image() + */ + public function tab_default_background() { + $this->print_tab_image( $this->setting->default ); + } +} + +/** + * Customize Header Image Control Class + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ +class WP_Customize_Header_Image_Control extends WP_Customize_Image_Control { + /** + * The processed default headers. + * @since 3.4.2 + * @var array + */ + protected $default_headers; + + /** + * The uploaded headers. + * @since 3.4.2 + * @var array + */ + protected $uploaded_headers; + + /** + * Constructor. + * + * @since 3.4.0 + * @uses WP_Customize_Image_Control::__construct() + * @uses WP_Customize_Image_Control::add_tab() + * + * @param WP_Customize_Manager $manager + */ + public function __construct( $manager ) { + parent::__construct( $manager, 'header_image', array( + 'label' => __( 'Header Image' ), + 'settings' => array( + 'default' => 'header_image', + 'data' => 'header_image_data', + ), + 'section' => 'header_image', + 'context' => 'custom-header', + 'removed' => 'remove-header', + 'get_url' => 'get_header_image', + 'statuses' => array( + '' => __('Default'), + 'remove-header' => __('No Image'), + 'random-default-image' => __('Random Default Image'), + 'random-uploaded-image' => __('Random Uploaded Image'), + ) + ) ); + + // Remove the upload tab. + $this->remove_tab( 'upload-new' ); + } + + /** + * Prepares the control. + * + * If no tabs exist, removes the control from the manager. + * + * @since 3.4.2 + */ + public function prepare_control() { + global $custom_image_header; + if ( empty( $custom_image_header ) ) + return parent::prepare_control(); + + // Process default headers and uploaded headers. + $custom_image_header->process_default_headers(); + $this->default_headers = $custom_image_header->default_headers; + $this->uploaded_headers = get_uploaded_header_images(); + + if ( $this->default_headers ) + $this->add_tab( 'default', __('Default'), array( $this, 'tab_default_headers' ) ); + + if ( ! $this->uploaded_headers ) + $this->remove_tab( 'uploaded' ); + + return parent::prepare_control(); + } + + /** + * @since 3.4.0 + * + * @param mixed $choice Which header image to select. (@see Custom_Image_Header::get_header_image() ) + * @param array $header + */ + public function print_header_image( $choice, $header ) { + $header['url'] = set_url_scheme( $header['url'] ); + $header['thumbnail_url'] = set_url_scheme( $header['thumbnail_url'] ); + + $header_image_data = array( 'choice' => $choice ); + foreach ( array( 'attachment_id', 'width', 'height', 'url', 'thumbnail_url' ) as $key ) { + if ( isset( $header[ $key ] ) ) + $header_image_data[ $key ] = $header[ $key ]; + } + + + ?> + <a href="#" class="thumbnail" + data-customize-image-value="<?php echo esc_url( $header['url'] ); ?>" + data-customize-header-image-data="<?php echo esc_attr( json_encode( $header_image_data ) ); ?>"> + <img src="<?php echo esc_url( $header['thumbnail_url'] ); ?>" /> + </a> + <?php + } + + /** + * @since 3.4.0 + */ + public function tab_uploaded() { + ?><div class="uploaded-target"></div><?php + + foreach ( $this->uploaded_headers as $choice => $header ) + $this->print_header_image( $choice, $header ); + } + + /** + * @since 3.4.0 + */ + public function tab_default_headers() { + foreach ( $this->default_headers as $choice => $header ) + $this->print_header_image( $choice, $header ); + } +} \ No newline at end of file diff --git a/src/wp-includes/class-wp-customize-manager.php b/src/wp-includes/class-wp-customize-manager.php new file mode 100644 index 0000000..cad9f13 --- /dev/null +++ b/src/wp-includes/class-wp-customize-manager.php @@ -0,0 +1,1059 @@ +<?php +/** + * Customize Manager. + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ +final class WP_Customize_Manager { + protected $theme; + protected $original_stylesheet; + + protected $previewing = false; + + protected $settings = array(); + protected $sections = array(); + protected $controls = array(); + + protected $nonce_tick; + + protected $customized; + + private $_post_values; + + /** + * Constructor. + * + * @since 3.4.0 + */ + public function __construct() { + require( ABSPATH . WPINC . '/class-wp-customize-setting.php' ); + require( ABSPATH . WPINC . '/class-wp-customize-section.php' ); + require( ABSPATH . WPINC . '/class-wp-customize-control.php' ); + + add_filter( 'wp_die_handler', array( $this, 'wp_die_handler' ) ); + + add_action( 'setup_theme', array( $this, 'setup_theme' ) ); + add_action( 'wp_loaded', array( $this, 'wp_loaded' ) ); + + // Run wp_redirect_status late to make sure we override the status last. + add_action( 'wp_redirect_status', array( $this, 'wp_redirect_status' ), 1000 ); + + // Do not spawn cron (especially the alternate cron) while running the customizer. + remove_action( 'init', 'wp_cron' ); + + // Do not run update checks when rendering the controls. + remove_action( 'admin_init', '_maybe_update_core' ); + remove_action( 'admin_init', '_maybe_update_plugins' ); + remove_action( 'admin_init', '_maybe_update_themes' ); + + add_action( 'wp_ajax_customize_save', array( $this, 'save' ) ); + + add_action( 'customize_register', array( $this, 'register_controls' ) ); + add_action( 'customize_controls_init', array( $this, 'prepare_controls' ) ); + add_action( 'customize_controls_enqueue_scripts', array( $this, 'enqueue_control_scripts' ) ); + } + + /** + * Return true if it's an AJAX request. + * + * @since 3.4.0 + * + * @return bool + */ + public function doing_ajax() { + return isset( $_POST['customized'] ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ); + } + + /** + * Custom wp_die wrapper. Returns either the standard message for UI + * or the AJAX message. + * + * @since 3.4.0 + * + * @param mixed $ajax_message AJAX return + * @param mixed $message UI message + */ + protected function wp_die( $ajax_message, $message = null ) { + if ( $this->doing_ajax() ) + wp_die( $ajax_message ); + + if ( ! $message ) + $message = __( 'Cheatin’ uh?' ); + + wp_die( $message ); + } + + /** + * Return the AJAX wp_die() handler if it's a customized request. + * + * @since 3.4.0 + * + * @return string + */ + public function wp_die_handler() { + if ( $this->doing_ajax() ) + return '_ajax_wp_die_handler'; + + return '_default_wp_die_handler'; + } + + /** + * Start preview and customize theme. + * + * Check if customize query variable exist. Init filters to filter the current theme. + * + * @since 3.4.0 + */ + public function setup_theme() { + send_origin_headers(); + + if ( is_admin() && ! $this->doing_ajax() ) + auth_redirect(); + elseif ( $this->doing_ajax() && ! is_user_logged_in() ) + $this->wp_die( 0 ); + + show_admin_bar( false ); + + if ( ! current_user_can( 'edit_theme_options' ) ) + $this->wp_die( -1 ); + + $this->original_stylesheet = get_stylesheet(); + + $this->theme = wp_get_theme( isset( $_REQUEST['theme'] ) ? $_REQUEST['theme'] : null ); + + if ( $this->is_theme_active() ) { + // Once the theme is loaded, we'll validate it. + add_action( 'after_setup_theme', array( $this, 'after_setup_theme' ) ); + } else { + if ( ! current_user_can( 'switch_themes' ) ) + $this->wp_die( -1 ); + + // If the theme isn't active, you can't preview it if it is not allowed or has errors. + if ( $this->theme()->errors() ) + $this->wp_die( -1 ); + + if ( ! $this->theme()->is_allowed() ) + $this->wp_die( -1 ); + } + + $this->start_previewing_theme(); + } + + /** + * Callback to validate a theme once it is loaded + * + * @since 3.4.0 + */ + function after_setup_theme() { + if ( ! $this->doing_ajax() && ! validate_current_theme() ) { + wp_redirect( 'themes.php?broken=true' ); + exit; + } + } + + /** + * Start previewing the selected theme. + * + * Adds filters to change the current theme. + * + * @since 3.4.0 + */ + public function start_previewing_theme() { + // Bail if we're already previewing. + if ( $this->is_preview() ) + return; + + $this->previewing = true; + + if ( ! $this->is_theme_active() ) { + add_filter( 'template', array( $this, 'get_template' ) ); + add_filter( 'stylesheet', array( $this, 'get_stylesheet' ) ); + add_filter( 'pre_option_current_theme', array( $this, 'current_theme' ) ); + + // @link: http://core.trac.wordpress.org/ticket/20027 + add_filter( 'pre_option_stylesheet', array( $this, 'get_stylesheet' ) ); + add_filter( 'pre_option_template', array( $this, 'get_template' ) ); + + // Handle custom theme roots. + add_filter( 'pre_option_stylesheet_root', array( $this, 'get_stylesheet_root' ) ); + add_filter( 'pre_option_template_root', array( $this, 'get_template_root' ) ); + } + + do_action( 'start_previewing_theme', $this ); + } + + /** + * Stop previewing the selected theme. + * + * Removes filters to change the current theme. + * + * @since 3.4.0 + */ + public function stop_previewing_theme() { + if ( ! $this->is_preview() ) + return; + + $this->previewing = false; + + if ( ! $this->is_theme_active() ) { + remove_filter( 'template', array( $this, 'get_template' ) ); + remove_filter( 'stylesheet', array( $this, 'get_stylesheet' ) ); + remove_filter( 'pre_option_current_theme', array( $this, 'current_theme' ) ); + + // @link: http://core.trac.wordpress.org/ticket/20027 + remove_filter( 'pre_option_stylesheet', array( $this, 'get_stylesheet' ) ); + remove_filter( 'pre_option_template', array( $this, 'get_template' ) ); + + // Handle custom theme roots. + remove_filter( 'pre_option_stylesheet_root', array( $this, 'get_stylesheet_root' ) ); + remove_filter( 'pre_option_template_root', array( $this, 'get_template_root' ) ); + } + + do_action( 'stop_previewing_theme', $this ); + } + + /** + * Get the theme being customized. + * + * @since 3.4.0 + * + * @return WP_Theme + */ + public function theme() { + return $this->theme; + } + + /** + * Get the registered settings. + * + * @since 3.4.0 + * + * @return array + */ + public function settings() { + return $this->settings; + } + + /** + * Get the registered controls. + * + * @since 3.4.0 + * + * @return array + */ + public function controls() { + return $this->controls; + } + + /** + * Get the registered sections. + * + * @since 3.4.0 + * + * @return array + */ + public function sections() { + return $this->sections; + } + + /** + * Checks if the current theme is active. + * + * @since 3.4.0 + * + * @return bool + */ + public function is_theme_active() { + return $this->get_stylesheet() == $this->original_stylesheet; + } + + /** + * Register styles/scripts and initialize the preview of each setting + * + * @since 3.4.0 + */ + public function wp_loaded() { + do_action( 'customize_register', $this ); + + if ( $this->is_preview() && ! is_admin() ) + $this->customize_preview_init(); + } + + /** + * Prevents AJAX requests from following redirects when previewing a theme + * by issuing a 200 response instead of a 30x. + * + * Instead, the JS will sniff out the location header. + * + * @since 3.4.0 + * + * @param $status + * @return int + */ + public function wp_redirect_status( $status ) { + if ( $this->is_preview() && ! is_admin() ) + return 200; + + return $status; + } + + /** + * Decode the $_POST attribute used to override the WP_Customize_Setting values. + * + * @since 3.4.0 + * + * @param mixed $setting A WP_Customize_Setting derived object + * @return string Sanitized attribute + */ + public function post_value( $setting ) { + if ( ! isset( $this->_post_values ) ) { + if ( isset( $_POST['customized'] ) ) + $this->_post_values = json_decode( wp_unslash( $_POST['customized'] ), true ); + else + $this->_post_values = false; + } + + if ( isset( $this->_post_values[ $setting->id ] ) ) + return $setting->sanitize( $this->_post_values[ $setting->id ] ); + } + + /** + * Print javascript settings. + * + * @since 3.4.0 + */ + public function customize_preview_init() { + $this->nonce_tick = check_ajax_referer( 'preview-customize_' . $this->get_stylesheet(), 'nonce' ); + + $this->prepare_controls(); + + wp_enqueue_script( 'customize-preview' ); + add_action( 'wp_head', array( $this, 'customize_preview_base' ) ); + add_action( 'wp_head', array( $this, 'customize_preview_html5' ) ); + add_action( 'wp_footer', array( $this, 'customize_preview_settings' ), 20 ); + add_action( 'shutdown', array( $this, 'customize_preview_signature' ), 1000 ); + add_filter( 'wp_die_handler', array( $this, 'remove_preview_signature' ) ); + + foreach ( $this->settings as $setting ) { + $setting->preview(); + } + + do_action( 'customize_preview_init', $this ); + } + + /** + * Print base element for preview frame. + * + * @since 3.4.0 + */ + public function customize_preview_base() { + ?><base href="<?php echo home_url( '/' ); ?>" /><?php + } + + /** + * Print a workaround to handle HTML5 tags in IE < 9 + * + * @since 3.4.0 + */ + public function customize_preview_html5() { ?> + <!--[if lt IE 9]> + <script type="text/javascript"> + var e = [ 'abbr', 'article', 'aside', 'audio', 'canvas', 'datalist', 'details', + 'figure', 'footer', 'header', 'hgroup', 'mark', 'menu', 'meter', 'nav', + 'output', 'progress', 'section', 'time', 'video' ]; + for ( var i = 0; i < e.length; i++ ) { + document.createElement( e[i] ); + } + </script> + <![endif]--><?php + } + + /** + * Print javascript settings for preview frame. + * + * @since 3.4.0 + */ + public function customize_preview_settings() { + $settings = array( + 'values' => array(), + 'channel' => esc_js( $_POST['customize_messenger_channel'] ), + ); + + if ( 2 == $this->nonce_tick ) { + $settings['nonce'] = array( + 'save' => wp_create_nonce( 'save-customize_' . $this->get_stylesheet() ), + 'preview' => wp_create_nonce( 'preview-customize_' . $this->get_stylesheet() ) + ); + } + + foreach ( $this->settings as $id => $setting ) { + $settings['values'][ $id ] = $setting->js_value(); + } + + ?> + <script type="text/javascript"> + var _wpCustomizeSettings = <?php echo json_encode( $settings ); ?>; + </script> + <?php + } + + /** + * Prints a signature so we can ensure the customizer was properly executed. + * + * @since 3.4.0 + */ + public function customize_preview_signature() { + echo 'WP_CUSTOMIZER_SIGNATURE'; + } + + /** + * Removes the signature in case we experience a case where the customizer was not properly executed. + * + * @since 3.4.0 + */ + public function remove_preview_signature( $return = null ) { + remove_action( 'shutdown', array( $this, 'customize_preview_signature' ), 1000 ); + + return $return; + } + + /** + * Is it a theme preview? + * + * @since 3.4.0 + * + * @return bool True if it's a preview, false if not. + */ + public function is_preview() { + return (bool) $this->previewing; + } + + /** + * Retrieve the template name of the previewed theme. + * + * @since 3.4.0 + * + * @return string Template name. + */ + public function get_template() { + return $this->theme()->get_template(); + } + + /** + * Retrieve the stylesheet name of the previewed theme. + * + * @since 3.4.0 + * + * @return string Stylesheet name. + */ + public function get_stylesheet() { + return $this->theme()->get_stylesheet(); + } + + /** + * Retrieve the template root of the previewed theme. + * + * @since 3.4.0 + * + * @return string Theme root. + */ + public function get_template_root() { + return get_raw_theme_root( $this->get_template(), true ); + } + + /** + * Retrieve the stylesheet root of the previewed theme. + * + * @since 3.4.0 + * + * @return string Theme root. + */ + public function get_stylesheet_root() { + return get_raw_theme_root( $this->get_stylesheet(), true ); + } + + /** + * Filter the current theme and return the name of the previewed theme. + * + * @since 3.4.0 + * + * @param $current_theme {@internal Parameter is not used} + * @return string Theme name. + */ + public function current_theme( $current_theme ) { + return $this->theme()->display('Name'); + } + + /** + * Switch the theme and trigger the save action of each setting. + * + * @since 3.4.0 + */ + public function save() { + if ( ! $this->is_preview() ) + die; + + check_ajax_referer( 'save-customize_' . $this->get_stylesheet(), 'nonce' ); + + // Do we have to switch themes? + if ( ! $this->is_theme_active() ) { + // Temporarily stop previewing the theme to allow switch_themes() + // to operate properly. + $this->stop_previewing_theme(); + switch_theme( $this->get_stylesheet() ); + $this->start_previewing_theme(); + } + + do_action( 'customize_save', $this ); + + foreach ( $this->settings as $setting ) { + $setting->save(); + } + + do_action( 'customize_save_after', $this ); + + die; + } + + /** + * Add a customize setting. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the setting. Can be a + * theme mod or option name. + * @param array $args Setting arguments. + */ + public function add_setting( $id, $args = array() ) { + if ( is_a( $id, 'WP_Customize_Setting' ) ) + $setting = $id; + else + $setting = new WP_Customize_Setting( $this, $id, $args ); + + $this->settings[ $setting->id ] = $setting; + } + + /** + * Retrieve a customize setting. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the setting. + * @return object The settings object. + */ + public function get_setting( $id ) { + if ( isset( $this->settings[ $id ] ) ) + return $this->settings[ $id ]; + } + + /** + * Remove a customize setting. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the setting. + */ + public function remove_setting( $id ) { + unset( $this->settings[ $id ] ); + } + + /** + * Add a customize section. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the section. + * @param array $args Section arguments. + */ + public function add_section( $id, $args = array() ) { + if ( is_a( $id, 'WP_Customize_Section' ) ) + $section = $id; + else + $section = new WP_Customize_Section( $this, $id, $args ); + + $this->sections[ $section->id ] = $section; + } + + /** + * Retrieve a customize section. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the section. + * @return object The section object. + */ + public function get_section( $id ) { + if ( isset( $this->sections[ $id ] ) ) + return $this->sections[ $id ]; + } + + /** + * Remove a customize section. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the section. + */ + public function remove_section( $id ) { + unset( $this->sections[ $id ] ); + } + + /** + * Add a customize control. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the control. + * @param array $args Setting arguments. + */ + public function add_control( $id, $args = array() ) { + if ( is_a( $id, 'WP_Customize_Control' ) ) + $control = $id; + else + $control = new WP_Customize_Control( $this, $id, $args ); + + $this->controls[ $control->id ] = $control; + } + + /** + * Retrieve a customize control. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the control. + * @return object The settings object. + */ + public function get_control( $id ) { + if ( isset( $this->controls[ $id ] ) ) + return $this->controls[ $id ]; + } + + /** + * Remove a customize setting. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the control. + */ + public function remove_control( $id ) { + unset( $this->controls[ $id ] ); + } + + /** + * Helper function to compare two objects by priority. + * + * @since 3.4.0 + * + * @param object $a Object A. + * @param object $b Object B. + * @return int + */ + protected final function _cmp_priority( $a, $b ) { + $ap = $a->priority; + $bp = $b->priority; + + if ( $ap == $bp ) + return 0; + return ( $ap > $bp ) ? 1 : -1; + } + + /** + * Prepare settings and sections. + * + * @since 3.4.0 + */ + public function prepare_controls() { + // Prepare controls + // Reversing makes uasort sort by time added when conflicts occur. + + $this->controls = array_reverse( $this->controls ); + $controls = array(); + + foreach ( $this->controls as $id => $control ) { + if ( ! isset( $this->sections[ $control->section ] ) || ! $control->check_capabilities() ) + continue; + + $this->sections[ $control->section ]->controls[] = $control; + $controls[ $id ] = $control; + } + $this->controls = $controls; + + // Prepare sections + $this->sections = array_reverse( $this->sections ); + uasort( $this->sections, array( $this, '_cmp_priority' ) ); + $sections = array(); + + foreach ( $this->sections as $section ) { + if ( ! $section->check_capabilities() || ! $section->controls ) + continue; + + usort( $section->controls, array( $this, '_cmp_priority' ) ); + $sections[] = $section; + } + $this->sections = $sections; + } + + /** + * Enqueue scripts for customize controls. + * + * @since 3.4.0 + */ + public function enqueue_control_scripts() { + foreach ( $this->controls as $control ) { + $control->enqueue(); + } + } + + /** + * Register some default controls. + * + * @since 3.4.0 + */ + public function register_controls() { + + /* Site Title & Tagline */ + + $this->add_section( 'title_tagline', array( + 'title' => __( 'Site Title & Tagline' ), + 'priority' => 20, + ) ); + + $this->add_setting( 'blogname', array( + 'default' => get_option( 'blogname' ), + 'type' => 'option', + 'capability' => 'manage_options', + ) ); + + $this->add_control( 'blogname', array( + 'label' => __( 'Site Title' ), + 'section' => 'title_tagline', + ) ); + + $this->add_setting( 'blogdescription', array( + 'default' => get_option( 'blogdescription' ), + 'type' => 'option', + 'capability' => 'manage_options', + ) ); + + $this->add_control( 'blogdescription', array( + 'label' => __( 'Tagline' ), + 'section' => 'title_tagline', + ) ); + + /* Colors */ + + $this->add_section( 'colors', array( + 'title' => __( 'Colors' ), + 'priority' => 40, + ) ); + + $this->add_setting( 'header_textcolor', array( + 'theme_supports' => array( 'custom-header', 'header-text' ), + 'default' => get_theme_support( 'custom-header', 'default-text-color' ), + + 'sanitize_callback' => array( $this, '_sanitize_header_textcolor' ), + 'sanitize_js_callback' => 'maybe_hash_hex_color', + ) ); + + // Input type: checkbox + // With custom value + $this->add_control( 'display_header_text', array( + 'settings' => 'header_textcolor', + 'label' => __( 'Display Header Text' ), + 'section' => 'title_tagline', + 'type' => 'checkbox', + ) ); + + $this->add_control( new WP_Customize_Color_Control( $this, 'header_textcolor', array( + 'label' => __( 'Header Text Color' ), + 'section' => 'colors', + ) ) ); + + // Input type: Color + // With sanitize_callback + $this->add_setting( 'background_color', array( + 'default' => get_theme_support( 'custom-background', 'default-color' ), + 'theme_supports' => 'custom-background', + + 'sanitize_callback' => 'sanitize_hex_color_no_hash', + 'sanitize_js_callback' => 'maybe_hash_hex_color', + ) ); + + $this->add_control( new WP_Customize_Color_Control( $this, 'background_color', array( + 'label' => __( 'Background Color' ), + 'section' => 'colors', + ) ) ); + + + /* Custom Header */ + + $this->add_section( 'header_image', array( + 'title' => __( 'Header Image' ), + 'theme_supports' => 'custom-header', + 'priority' => 60, + ) ); + + $this->add_setting( new WP_Customize_Filter_Setting( $this, 'header_image', array( + 'default' => get_theme_support( 'custom-header', 'default-image' ), + 'theme_supports' => 'custom-header', + ) ) ); + + $this->add_setting( new WP_Customize_Header_Image_Setting( $this, 'header_image_data', array( + // 'default' => get_theme_support( 'custom-header', 'default-image' ), + 'theme_supports' => 'custom-header', + ) ) ); + + $this->add_control( new WP_Customize_Header_Image_Control( $this ) ); + + /* Custom Background */ + + $this->add_section( 'background_image', array( + 'title' => __( 'Background Image' ), + 'theme_supports' => 'custom-background', + 'priority' => 80, + ) ); + + $this->add_setting( 'background_image', array( + 'default' => get_theme_support( 'custom-background', 'default-image' ), + 'theme_supports' => 'custom-background', + ) ); + + $this->add_setting( new WP_Customize_Background_Image_Setting( $this, 'background_image_thumb', array( + 'theme_supports' => 'custom-background', + ) ) ); + + $this->add_control( new WP_Customize_Background_Image_Control( $this ) ); + + $this->add_setting( 'background_repeat', array( + 'default' => 'repeat', + 'theme_supports' => 'custom-background', + ) ); + + $this->add_control( 'background_repeat', array( + 'label' => __( 'Background Repeat' ), + 'section' => 'background_image', + 'type' => 'radio', + 'choices' => array( + 'no-repeat' => __('No Repeat'), + 'repeat' => __('Tile'), + 'repeat-x' => __('Tile Horizontally'), + 'repeat-y' => __('Tile Vertically'), + ), + ) ); + + $this->add_setting( 'background_position_x', array( + 'default' => 'left', + 'theme_supports' => 'custom-background', + ) ); + + $this->add_control( 'background_position_x', array( + 'label' => __( 'Background Position' ), + 'section' => 'background_image', + 'type' => 'radio', + 'choices' => array( + 'left' => __('Left'), + 'center' => __('Center'), + 'right' => __('Right'), + ), + ) ); + + $this->add_setting( 'background_attachment', array( + 'default' => 'fixed', + 'theme_supports' => 'custom-background', + ) ); + + $this->add_control( 'background_attachment', array( + 'label' => __( 'Background Attachment' ), + 'section' => 'background_image', + 'type' => 'radio', + 'choices' => array( + 'fixed' => __('Fixed'), + 'scroll' => __('Scroll'), + ), + ) ); + + // If the theme is using the default background callback, we can update + // the background CSS using postMessage. + if ( get_theme_support( 'custom-background', 'wp-head-callback' ) === '_custom_background_cb' ) { + foreach ( array( 'color', 'image', 'position_x', 'repeat', 'attachment' ) as $prop ) { + $this->get_setting( 'background_' . $prop )->transport = 'postMessage'; + } + } + + /* Nav Menus */ + + $locations = get_registered_nav_menus(); + $menus = wp_get_nav_menus(); + $menu_locations = get_nav_menu_locations(); + $num_locations = count( array_keys( $locations ) ); + + $this->add_section( 'nav', array( + 'title' => __( 'Navigation' ), + 'theme_supports' => 'menus', + 'priority' => 100, + 'description' => sprintf( _n('Your theme supports %s menu. Select which menu you would like to use.', 'Your theme supports %s menus. Select which menu appears in each location.', $num_locations ), number_format_i18n( $num_locations ) ) . "\n\n" . __('You can edit your menu content on the Menus screen in the Appearance section.'), + ) ); + + if ( $menus ) { + $choices = array( 0 => __( '— Select —' ) ); + foreach ( $menus as $menu ) { + $choices[ $menu->term_id ] = wp_html_excerpt( $menu->name, 40, '…' ); + } + + foreach ( $locations as $location => $description ) { + $menu_setting_id = "nav_menu_locations[{$location}]"; + + $this->add_setting( $menu_setting_id, array( + 'sanitize_callback' => 'absint', + 'theme_supports' => 'menus', + ) ); + + $this->add_control( $menu_setting_id, array( + 'label' => $description, + 'section' => 'nav', + 'type' => 'select', + 'choices' => $choices, + ) ); + } + } + + /* Static Front Page */ + // #WP19627 + + $this->add_section( 'static_front_page', array( + 'title' => __( 'Static Front Page' ), + // 'theme_supports' => 'static-front-page', + 'priority' => 120, + 'description' => __( 'Your theme supports a static front page.' ), + ) ); + + $this->add_setting( 'show_on_front', array( + 'default' => get_option( 'show_on_front' ), + 'capability' => 'manage_options', + 'type' => 'option', + // 'theme_supports' => 'static-front-page', + ) ); + + $this->add_control( 'show_on_front', array( + 'label' => __( 'Front page displays' ), + 'section' => 'static_front_page', + 'type' => 'radio', + 'choices' => array( + 'posts' => __( 'Your latest posts' ), + 'page' => __( 'A static page' ), + ), + ) ); + + $this->add_setting( 'page_on_front', array( + 'type' => 'option', + 'capability' => 'manage_options', + // 'theme_supports' => 'static-front-page', + ) ); + + $this->add_control( 'page_on_front', array( + 'label' => __( 'Front page' ), + 'section' => 'static_front_page', + 'type' => 'dropdown-pages', + ) ); + + $this->add_setting( 'page_for_posts', array( + 'type' => 'option', + 'capability' => 'manage_options', + // 'theme_supports' => 'static-front-page', + ) ); + + $this->add_control( 'page_for_posts', array( + 'label' => __( 'Posts page' ), + 'section' => 'static_front_page', + 'type' => 'dropdown-pages', + ) ); + } + + /** + * Callback for validating the header_textcolor value. + * + * Accepts 'blank', and otherwise uses sanitize_hex_color_no_hash(). + * Returns default text color if hex color is empty. + * + * @since 3.4.0 + * + * @param string $color + * @return string + */ + public function _sanitize_header_textcolor( $color ) { + if ( 'blank' === $color ) + return 'blank'; + + $color = sanitize_hex_color_no_hash( $color ); + if ( empty( $color ) ) + $color = get_theme_support( 'custom-header', 'default-text-color' ); + + return $color; + } +}; + +/** + * Validates a hex color. + * + * Returns either '', a 3 or 6 digit hex color (with #), or null. + * For validating values without a #, see sanitize_hex_color_no_hash(). + * + * @since 3.4.0 + * + * @param string $color + * @return string|null + */ +function sanitize_hex_color( $color ) { + if ( '' === $color ) + return ''; + + // 3 or 6 hex digits, or the empty string. + if ( preg_match('|^#([A-Fa-f0-9]{3}){1,2}$|', $color ) ) + return $color; + + return null; +} + +/** + * Sanitizes a hex color without a hash. Use sanitize_hex_color() when possible. + * + * Saving hex colors without a hash puts the burden of adding the hash on the + * UI, which makes it difficult to use or upgrade to other color types such as + * rgba, hsl, rgb, and html color names. + * + * Returns either '', a 3 or 6 digit hex color (without a #), or null. + * + * @since 3.4.0 + * @uses sanitize_hex_color() + * + * @param string $color + * @return string|null + */ +function sanitize_hex_color_no_hash( $color ) { + $color = ltrim( $color, '#' ); + + if ( '' === $color ) + return ''; + + return sanitize_hex_color( '#' . $color ) ? $color : null; +} + +/** + * Ensures that any hex color is properly hashed. + * Otherwise, returns value untouched. + * + * This method should only be necessary if using sanitize_hex_color_no_hash(). + * + * @since 3.4.0 + * + * @param string $color + * @return string + */ +function maybe_hash_hex_color( $color ) { + if ( $unhashed = sanitize_hex_color_no_hash( $color ) ) + return '#' . $unhashed; + + return $color; +} diff --git a/src/wp-includes/class-wp-customize-section.php b/src/wp-includes/class-wp-customize-section.php new file mode 100644 index 0000000..ab24dab --- /dev/null +++ b/src/wp-includes/class-wp-customize-section.php @@ -0,0 +1,96 @@ +<?php +/** + * Customize Section Class. + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ +class WP_Customize_Section { + public $manager; + public $id; + public $priority = 10; + public $capability = 'edit_theme_options'; + public $theme_supports = ''; + public $title = ''; + public $description = ''; + public $controls; + + /** + * Constructor. + * + * @since 3.4.0 + * + * @param WP_Customize_Manager $manager + * @param string $id An specific ID of the section. + * @param array $args Section arguments. + */ + function __construct( $manager, $id, $args = array() ) { + $keys = array_keys( get_class_vars( __CLASS__ ) ); + foreach ( $keys as $key ) { + if ( isset( $args[ $key ] ) ) + $this->$key = $args[ $key ]; + } + + $this->manager = $manager; + $this->id = $id; + + $this->controls = array(); // Users cannot customize the $controls array. + + return $this; + } + + /** + * Check if the theme supports the section and check user capabilities. + * + * @since 3.4.0 + * + * @return bool False if theme doesn't support the section or user doesn't have the capability. + */ + public final function check_capabilities() { + if ( $this->capability && ! call_user_func_array( 'current_user_can', (array) $this->capability ) ) + return false; + + if ( $this->theme_supports && ! call_user_func_array( 'current_theme_supports', (array) $this->theme_supports ) ) + return false; + + return true; + } + + /** + * Check capabilities and render the section. + * + * @since 3.4.0 + */ + public final function maybe_render() { + if ( ! $this->check_capabilities() ) + return; + + do_action( 'customize_render_section', $this ); + do_action( 'customize_render_section_' . $this->id ); + + $this->render(); + } + + /** + * Render the section. + * + * @since 3.4.0 + */ + protected function render() { + ?> + <li id="accordion-section-<?php echo esc_attr( $this->id ); ?>" class="control-section accordion-section"> + <h3 class="accordion-section-title" tabindex="0"><?php echo esc_html( $this->title ); ?></h3> + <ul class="accordion-section-content"> + <?php if ( ! empty( $this->description ) ) : ?> + <li><p class="description"><?php echo $this->description; ?></p></li> + <?php endif; ?> + <?php + foreach ( $this->controls as $control ) + $control->maybe_render(); + ?> + </ul> + </li> + <?php + } +} diff --git a/src/wp-includes/class-wp-customize-setting.php b/src/wp-includes/class-wp-customize-setting.php new file mode 100644 index 0000000..c8542ef --- /dev/null +++ b/src/wp-includes/class-wp-customize-setting.php @@ -0,0 +1,439 @@ +<?php +/** + * Customize Setting Class. + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ +class WP_Customize_Setting { + public $manager; + public $id; + + public $type = 'theme_mod'; + public $capability = 'edit_theme_options'; + public $theme_supports = ''; + public $default = ''; + public $transport = 'refresh'; + + public $sanitize_callback = ''; + public $sanitize_js_callback = ''; + + protected $id_data = array(); + private $_post_value; // Cached, sanitized $_POST value. + + /** + * Constructor. + * + * @since 3.4.0 + * + * @param WP_Customize_Manager $manager + * @param string $id An specific ID of the setting. Can be a + * theme mod or option name. + * @param array $args Setting arguments. + * @return WP_Customize_Setting + */ + function __construct( $manager, $id, $args = array() ) { + $keys = array_keys( get_class_vars( __CLASS__ ) ); + foreach ( $keys as $key ) { + if ( isset( $args[ $key ] ) ) + $this->$key = $args[ $key ]; + } + + $this->manager = $manager; + $this->id = $id; + + // Parse the ID for array keys. + $this->id_data[ 'keys' ] = preg_split( '/\[/', str_replace( ']', '', $this->id ) ); + $this->id_data[ 'base' ] = array_shift( $this->id_data[ 'keys' ] ); + + // Rebuild the ID. + $this->id = $this->id_data[ 'base' ]; + if ( ! empty( $this->id_data[ 'keys' ] ) ) + $this->id .= '[' . implode( '][', $this->id_data[ 'keys' ] ) . ']'; + + if ( $this->sanitize_callback ) + add_filter( "customize_sanitize_{$this->id}", $this->sanitize_callback, 10, 2 ); + + if ( $this->sanitize_js_callback ) + add_filter( "customize_sanitize_js_{$this->id}", $this->sanitize_js_callback, 10, 2 ); + + return $this; + } + + /** + * Handle previewing the setting. + * + * @since 3.4.0 + */ + public function preview() { + switch( $this->type ) { + case 'theme_mod' : + add_filter( 'theme_mod_' . $this->id_data[ 'base' ], array( $this, '_preview_filter' ) ); + break; + case 'option' : + if ( empty( $this->id_data[ 'keys' ] ) ) + add_filter( 'pre_option_' . $this->id_data[ 'base' ], array( $this, '_preview_filter' ) ); + else { + add_filter( 'option_' . $this->id_data[ 'base' ], array( $this, '_preview_filter' ) ); + add_filter( 'default_option_' . $this->id_data[ 'base' ], array( $this, '_preview_filter' ) ); + } + break; + default : + do_action( 'customize_preview_' . $this->id ); + } + } + + /** + * Callback function to filter the theme mods and options. + * + * @since 3.4.0 + * @uses WP_Customize_Setting::multidimensional_replace() + * + * @param mixed $original Old value. + * @return mixed New or old value. + */ + public function _preview_filter( $original ) { + return $this->multidimensional_replace( $original, $this->id_data[ 'keys' ], $this->post_value() ); + } + + /** + * Set the value of the parameter for a specific theme. + * + * @since 3.4.0 + * + * @return bool False if cap check fails or value isn't set. + */ + public final function save() { + $value = $this->post_value(); + + if ( ! $this->check_capabilities() || ! isset( $value ) ) + return false; + + do_action( 'customize_save_' . $this->id_data[ 'base' ] ); + + $this->update( $value ); + } + + /** + * Fetches, validates, and sanitizes the $_POST value. + * + * @since 3.4.0 + * + * @param mixed $default A default value which is used as a fallback. Default is null. + * @return mixed The default value on failure, otherwise the sanitized value. + */ + public final function post_value( $default = null ) { + if ( isset( $this->_post_value ) ) + return $this->_post_value; + + $result = $this->manager->post_value( $this ); + + if ( isset( $result ) ) + return $this->_post_value = $result; + else + return $default; + } + + /** + * Sanitize an input. + * + * @since 3.4.0 + * + * @param mixed $value The value to sanitize. + * @return mixed Null if an input isn't valid, otherwise the sanitized value. + */ + public function sanitize( $value ) { + $value = wp_unslash( $value ); + return apply_filters( "customize_sanitize_{$this->id}", $value, $this ); + } + + /** + * Set the value of the parameter for a specific theme. + * + * @since 3.4.0 + * + * @param mixed $value The value to update. + * @return mixed The result of saving the value. + */ + protected function update( $value ) { + switch( $this->type ) { + case 'theme_mod' : + return $this->_update_theme_mod( $value ); + break; + case 'option' : + return $this->_update_option( $value ); + break; + default : + return do_action( 'customize_update_' . $this->type, $value ); + } + } + + /** + * Update the theme mod from the value of the parameter. + * + * @since 3.4.0 + * + * @param mixed $value The value to update. + * @return mixed The result of saving the value. + */ + protected function _update_theme_mod( $value ) { + // Handle non-array theme mod. + if ( empty( $this->id_data[ 'keys' ] ) ) + return set_theme_mod( $this->id_data[ 'base' ], $value ); + + // Handle array-based theme mod. + $mods = get_theme_mod( $this->id_data[ 'base' ] ); + $mods = $this->multidimensional_replace( $mods, $this->id_data[ 'keys' ], $value ); + if ( isset( $mods ) ) + return set_theme_mod( $this->id_data[ 'base' ], $mods ); + } + + /** + * Update the theme mod from the value of the parameter. + * + * @since 3.4.0 + * + * @param mixed $value The value to update. + * @return mixed The result of saving the value. + */ + protected function _update_option( $value ) { + // Handle non-array option. + if ( empty( $this->id_data[ 'keys' ] ) ) + return update_option( $this->id_data[ 'base' ], $value ); + + // Handle array-based options. + $options = get_option( $this->id_data[ 'base' ] ); + $options = $this->multidimensional_replace( $options, $this->id_data[ 'keys' ], $value ); + if ( isset( $options ) ) + return update_option( $this->id_data[ 'base' ], $options ); + } + + /** + * Fetch the value of the parameter for a specific theme. + * + * @since 3.4.0 + * + * @return mixed The requested value. + */ + public function value() { + switch( $this->type ) { + case 'theme_mod' : + $function = 'get_theme_mod'; + break; + case 'option' : + $function = 'get_option'; + break; + default : + return apply_filters( 'customize_value_' . $this->id_data[ 'base' ], $this->default ); + } + + // Handle non-array value + if ( empty( $this->id_data[ 'keys' ] ) ) + return $function( $this->id_data[ 'base' ], $this->default ); + + // Handle array-based value + $values = $function( $this->id_data[ 'base' ] ); + return $this->multidimensional_get( $values, $this->id_data[ 'keys' ], $this->default ); + } + + /** + * Escape the parameter's value for use in JavaScript. + * + * @since 3.4.0 + * + * @return mixed The requested escaped value. + */ + public function js_value() { + $value = apply_filters( "customize_sanitize_js_{$this->id}", $this->value(), $this ); + + if ( is_string( $value ) ) + return html_entity_decode( $value, ENT_QUOTES, 'UTF-8'); + + return $value; + } + + /** + * Check if the theme supports the setting and check user capabilities. + * + * @since 3.4.0 + * + * @return bool False if theme doesn't support the setting or user can't change setting, otherwise true. + */ + public final function check_capabilities() { + if ( $this->capability && ! call_user_func_array( 'current_user_can', (array) $this->capability ) ) + return false; + + if ( $this->theme_supports && ! call_user_func_array( 'current_theme_supports', (array) $this->theme_supports ) ) + return false; + + return true; + } + + /** + * Multidimensional helper function. + * + * @since 3.4.0 + * + * @param $root + * @param $keys + * @param bool $create Default is false. + * @return null|array Keys are 'root', 'node', and 'key'. + */ + final protected function multidimensional( &$root, $keys, $create = false ) { + if ( $create && empty( $root ) ) + $root = array(); + + if ( ! isset( $root ) || empty( $keys ) ) + return; + + $last = array_pop( $keys ); + $node = &$root; + + foreach ( $keys as $key ) { + if ( $create && ! isset( $node[ $key ] ) ) + $node[ $key ] = array(); + + if ( ! is_array( $node ) || ! isset( $node[ $key ] ) ) + return; + + $node = &$node[ $key ]; + } + + if ( $create && ! isset( $node[ $last ] ) ) + $node[ $last ] = array(); + + if ( ! isset( $node[ $last ] ) ) + return; + + return array( + 'root' => &$root, + 'node' => &$node, + 'key' => $last, + ); + } + + /** + * Will attempt to replace a specific value in a multidimensional array. + * + * @since 3.4.0 + * + * @param $root + * @param $keys + * @param mixed $value The value to update. + * @return + */ + final protected function multidimensional_replace( $root, $keys, $value ) { + if ( ! isset( $value ) ) + return $root; + elseif ( empty( $keys ) ) // If there are no keys, we're replacing the root. + return $value; + + $result = $this->multidimensional( $root, $keys, true ); + + if ( isset( $result ) ) + $result['node'][ $result['key'] ] = $value; + + return $root; + } + + /** + * Will attempt to fetch a specific value from a multidimensional array. + * + * @since 3.4.0 + * + * @param $root + * @param $keys + * @param $default A default value which is used as a fallback. Default is null. + * @return mixed The requested value or the default value. + */ + final protected function multidimensional_get( $root, $keys, $default = null ) { + if ( empty( $keys ) ) // If there are no keys, test the root. + return isset( $root ) ? $root : $default; + + $result = $this->multidimensional( $root, $keys ); + return isset( $result ) ? $result['node'][ $result['key'] ] : $default; + } + + /** + * Will attempt to check if a specific value in a multidimensional array is set. + * + * @since 3.4.0 + * + * @param $root + * @param $keys + * @return bool True if value is set, false if not. + */ + final protected function multidimensional_isset( $root, $keys ) { + $result = $this->multidimensional_get( $root, $keys ); + return isset( $result ); + } +} + +/** + * A setting that is used to filter a value, but will not save the results. + * + * Results should be properly handled using another setting or callback. + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ +class WP_Customize_Filter_Setting extends WP_Customize_Setting { + + /** + * @since 3.4.0 + */ + public function update( $value ) {} +} + +/** + * A setting that is used to filter a value, but will not save the results. + * + * Results should be properly handled using another setting or callback. + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ +final class WP_Customize_Header_Image_Setting extends WP_Customize_Setting { + public $id = 'header_image_data'; + + /** + * @since 3.4.0 + * + * @param $value + */ + public function update( $value ) { + global $custom_image_header; + + // If the value doesn't exist (removed or random), + // use the header_image value. + if ( ! $value ) + $value = $this->manager->get_setting('header_image')->post_value(); + + if ( is_array( $value ) && isset( $value['choice'] ) ) + $custom_image_header->set_header_image( $value['choice'] ); + else + $custom_image_header->set_header_image( $value ); + } +} + +/** + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ +final class WP_Customize_Background_Image_Setting extends WP_Customize_Setting { + public $id = 'background_image_thumb'; + + /** + * @since 3.4.0 + * @uses remove_theme_mod() + * + * @param $value + */ + public function update( $value ) { + remove_theme_mod( 'background_image_thumb' ); + } +} diff --git a/src/wp-includes/class-wp-editor.php b/src/wp-includes/class-wp-editor.php new file mode 100644 index 0000000..16a2e5e --- /dev/null +++ b/src/wp-includes/class-wp-editor.php @@ -0,0 +1,918 @@ +<?php +/** + * Facilitates adding of the WordPress editor as used on the Write and Edit screens. + * + * @package WordPress + * @since 3.3.0 + * + * Private, not included by default. See wp_editor() in wp-includes/general-template.php. + */ + +final class _WP_Editors { + public static $mce_locale; + + private static $mce_settings = array(); + private static $qt_settings = array(); + private static $plugins = array(); + private static $qt_buttons = array(); + private static $ext_plugins; + private static $baseurl; + private static $first_init; + private static $this_tinymce = false; + private static $this_quicktags = false; + private static $has_tinymce = false; + private static $has_quicktags = false; + private static $has_medialib = false; + private static $editor_buttons_css = true; + + private function __construct() {} + + public static function parse_settings($editor_id, $settings) { + $set = wp_parse_args( $settings, array( + 'wpautop' => true, // use wpautop? + 'media_buttons' => true, // show insert/upload button(s) + 'textarea_name' => $editor_id, // set the textarea name to something different, square brackets [] can be used here + 'textarea_rows' => 20, + 'tabindex' => '', + 'tabfocus_elements' => ':prev,:next', // the previous and next element ID to move the focus to when pressing the Tab key in TinyMCE + 'editor_css' => '', // intended for extra styles for both visual and Text editors buttons, needs to include the <style> tags, can use "scoped". + 'editor_class' => '', // add extra class(es) to the editor textarea + 'teeny' => false, // output the minimal editor config used in Press This + 'dfw' => false, // replace the default fullscreen with DFW (needs specific DOM elements and css) + 'tinymce' => true, // load TinyMCE, can be used to pass settings directly to TinyMCE using an array() + 'quicktags' => true // load Quicktags, can be used to pass settings directly to Quicktags using an array() + ) ); + + self::$this_tinymce = ( $set['tinymce'] && user_can_richedit() ); + self::$this_quicktags = (bool) $set['quicktags']; + + if ( self::$this_tinymce ) + self::$has_tinymce = true; + + if ( self::$this_quicktags ) + self::$has_quicktags = true; + + if ( empty( $set['editor_height'] ) ) + return $set; + + if ( 'content' === $editor_id ) { + // A cookie (set when a user resizes the editor) overrides the height. + $cookie = (int) get_user_setting( 'ed_size' ); + + // Upgrade an old TinyMCE cookie if it is still around, and the new one isn't. + if ( ! $cookie && isset( $_COOKIE['TinyMCE_content_size'] ) ) { + parse_str( $_COOKIE['TinyMCE_content_size'], $cookie ); + $cookie = $cookie['ch']; + } + + if ( $cookie ) + $set['editor_height'] = $cookie; + } + + if ( $set['editor_height'] < 50 ) + $set['editor_height'] = 50; + elseif ( $set['editor_height'] > 5000 ) + $set['editor_height'] = 5000; + + return $set; + } + + /** + * Outputs the HTML for a single instance of the editor. + * + * @param string $content The initial content of the editor. + * @param string $editor_id ID for the textarea and TinyMCE and Quicktags instances (can contain only ASCII letters and numbers). + * @param array $settings See the _parse_settings() method for description. + */ + public static function editor( $content, $editor_id, $settings = array() ) { + + $set = self::parse_settings($editor_id, $settings); + $editor_class = ' class="' . trim( $set['editor_class'] . ' wp-editor-area' ) . '"'; + $tabindex = $set['tabindex'] ? ' tabindex="' . (int) $set['tabindex'] . '"' : ''; + $switch_class = 'html-active'; + $toolbar = $buttons = ''; + + if ( ! empty( $set['editor_height'] ) ) + $height = ' style="height: ' . $set['editor_height'] . 'px"'; + else + $height = ' rows="' . $set['textarea_rows'] . '"'; + + if ( !current_user_can( 'upload_files' ) ) + $set['media_buttons'] = false; + + if ( self::$this_quicktags && self::$this_tinymce ) { + $switch_class = 'html-active'; + + // 'html' and 'switch-html' are used for the "Text" editor tab. + if ( 'html' == wp_default_editor() ) { + add_filter('the_editor_content', 'wp_htmledit_pre'); + } else { + add_filter('the_editor_content', 'wp_richedit_pre'); + $switch_class = 'tmce-active'; + } + + $buttons .= '<a id="' . $editor_id . '-html" class="wp-switch-editor switch-html" onclick="switchEditors.switchto(this);">' . _x( 'Text', 'Name for the Text editor tab (formerly HTML)' ) . "</a>\n"; + $buttons .= '<a id="' . $editor_id . '-tmce" class="wp-switch-editor switch-tmce" onclick="switchEditors.switchto(this);">' . __('Visual') . "</a>\n"; + } + + echo '<div id="wp-' . $editor_id . '-wrap" class="wp-core-ui wp-editor-wrap ' . $switch_class . '">'; + + if ( self::$editor_buttons_css ) { + wp_print_styles('editor-buttons'); + self::$editor_buttons_css = false; + } + + if ( !empty($set['editor_css']) ) + echo $set['editor_css'] . "\n"; + + if ( !empty($buttons) || $set['media_buttons'] ) { + echo '<div id="wp-' . $editor_id . '-editor-tools" class="wp-editor-tools hide-if-no-js">'; + + if ( $set['media_buttons'] ) { + self::$has_medialib = true; + + if ( !function_exists('media_buttons') ) + include(ABSPATH . 'wp-admin/includes/media.php'); + + echo '<div id="wp-' . $editor_id . '-media-buttons" class="wp-media-buttons">'; + do_action('media_buttons', $editor_id); + echo "</div>\n"; + } + + echo '<div class="wp-editor-tabs">' . $buttons . "</div>\n"; + echo "</div>\n"; + } + + $the_editor = apply_filters('the_editor', '<div id="wp-' . $editor_id . '-editor-container" class="wp-editor-container"><textarea' . $editor_class . $height . $tabindex . ' cols="40" name="' . $set['textarea_name'] . '" id="' . $editor_id . '">%s</textarea></div>'); + $content = apply_filters('the_editor_content', $content); + + printf($the_editor, $content); + echo "\n</div>\n\n"; + + self::editor_settings($editor_id, $set); + } + + public static function editor_settings($editor_id, $set) { + $first_run = false; + + if ( empty(self::$first_init) ) { + if ( is_admin() ) { + add_action( 'admin_print_footer_scripts', array( __CLASS__, 'editor_js'), 50 ); + add_action( 'admin_footer', array( __CLASS__, 'enqueue_scripts'), 1 ); + } else { + add_action( 'wp_print_footer_scripts', array( __CLASS__, 'editor_js'), 50 ); + add_action( 'wp_footer', array( __CLASS__, 'enqueue_scripts'), 1 ); + } + } + + if ( self::$this_quicktags ) { + + $qtInit = array( + 'id' => $editor_id, + 'buttons' => '' + ); + + if ( is_array($set['quicktags']) ) + $qtInit = array_merge($qtInit, $set['quicktags']); + + if ( empty($qtInit['buttons']) ) + $qtInit['buttons'] = 'strong,em,link,block,del,ins,img,ul,ol,li,code,more,close'; + + if ( $set['dfw'] ) + $qtInit['buttons'] .= ',fullscreen'; + + $qtInit = apply_filters('quicktags_settings', $qtInit, $editor_id); + self::$qt_settings[$editor_id] = $qtInit; + + self::$qt_buttons = array_merge( self::$qt_buttons, explode(',', $qtInit['buttons']) ); + } + + if ( self::$this_tinymce ) { + + if ( empty(self::$first_init) ) { + self::$baseurl = includes_url('js/tinymce'); + self::$mce_locale = $mce_locale = ( '' == get_locale() ) ? 'en' : strtolower( substr(get_locale(), 0, 2) ); // only ISO 639-1 + $no_captions = (bool) apply_filters( 'disable_captions', '' ); + $plugins = array( 'inlinepopups', 'tabfocus', 'paste', 'media', 'fullscreen', 'wordpress', 'wpeditimage', 'wpgallery', 'wplink', 'wpdialogs' ); + $first_run = true; + $ext_plugins = ''; + + if ( $set['teeny'] ) { + self::$plugins = $plugins = apply_filters( 'teeny_mce_plugins', array('inlinepopups', 'fullscreen', 'wordpress', 'wplink', 'wpdialogs' ), $editor_id ); + } else { + /* + The following filter takes an associative array of external plugins for TinyMCE in the form 'plugin_name' => 'url'. + It adds the plugin's name to TinyMCE's plugins init and the call to PluginManager to load the plugin. + The url should be absolute and should include the js file name to be loaded. Example: + array( 'myplugin' => 'http://my-site.com/wp-content/plugins/myfolder/mce_plugin.js' ) + If the plugin uses a button, it should be added with one of the "$mce_buttons" filters. + */ + $mce_external_plugins = apply_filters('mce_external_plugins', array()); + + if ( ! empty($mce_external_plugins) ) { + + /* + The following filter loads external language files for TinyMCE plugins. + It takes an associative array 'plugin_name' => 'path', where path is the + include path to the file. The language file should follow the same format as + /tinymce/langs/wp-langs.php and should define a variable $strings that + holds all translated strings. + When this filter is not used, the function will try to load {mce_locale}.js. + If that is not found, en.js will be tried next. + */ + $mce_external_languages = apply_filters('mce_external_languages', array()); + + $loaded_langs = array(); + $strings = ''; + + if ( ! empty($mce_external_languages) ) { + foreach ( $mce_external_languages as $name => $path ) { + if ( @is_file($path) && @is_readable($path) ) { + include_once($path); + $ext_plugins .= $strings . "\n"; + $loaded_langs[] = $name; + } + } + } + + foreach ( $mce_external_plugins as $name => $url ) { + + $url = set_url_scheme( $url ); + + $plugins[] = '-' . $name; + + $plugurl = dirname($url); + $strings = $str1 = $str2 = ''; + if ( ! in_array($name, $loaded_langs) ) { + $path = str_replace( content_url(), '', $plugurl ); + $path = WP_CONTENT_DIR . $path . '/langs/'; + + if ( function_exists('realpath') ) + $path = trailingslashit( realpath($path) ); + + if ( @is_file($path . $mce_locale . '.js') ) + $strings .= @file_get_contents($path . $mce_locale . '.js') . "\n"; + + if ( @is_file($path . $mce_locale . '_dlg.js') ) + $strings .= @file_get_contents($path . $mce_locale . '_dlg.js') . "\n"; + + if ( 'en' != $mce_locale && empty($strings) ) { + if ( @is_file($path . 'en.js') ) { + $str1 = @file_get_contents($path . 'en.js'); + $strings .= preg_replace( '/([\'"])en\./', '$1' . $mce_locale . '.', $str1, 1 ) . "\n"; + } + + if ( @is_file($path . 'en_dlg.js') ) { + $str2 = @file_get_contents($path . 'en_dlg.js'); + $strings .= preg_replace( '/([\'"])en\./', '$1' . $mce_locale . '.', $str2, 1 ) . "\n"; + } + } + + if ( ! empty($strings) ) + $ext_plugins .= "\n" . $strings . "\n"; + } + + $ext_plugins .= 'tinyMCEPreInit.load_ext("' . $plugurl . '", "' . $mce_locale . '");' . "\n"; + $ext_plugins .= 'tinymce.PluginManager.load("' . $name . '", "' . $url . '");' . "\n"; + } + } + + $plugins = array_unique( apply_filters('tiny_mce_plugins', $plugins) ); + } + + if ( $set['dfw'] ) + $plugins[] = 'wpfullscreen'; + + self::$plugins = $plugins; + self::$ext_plugins = $ext_plugins; + + if ( in_array( 'spellchecker', $plugins ) ) { + /* + translators: These languages show up in the spellchecker drop-down menu, in the order specified, and with the first + language listed being the default language. They must be comma-separated and take the format of name=code, where name + is the language name (which you may internationalize), and code is a valid ISO 639 language code. Please test the + spellchecker with your values. + */ + $mce_spellchecker_languages = __( 'English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv' ); + + /* + The following filter allows localization scripts to change the languages displayed in the spellchecker's drop-down menu. + By default it uses Google's spellchecker API, but can be configured to use PSpell/ASpell if installed on the server. + The + sign marks the default language. More: http://www.tinymce.com/wiki.php/Plugin:spellchecker. + */ + $mce_spellchecker_languages = apply_filters( 'mce_spellchecker_languages', '+' . $mce_spellchecker_languages ); + } + + self::$first_init = array( + 'mode' => 'exact', + 'width' => '100%', + 'theme' => 'advanced', + 'skin' => 'wp_theme', + 'language' => self::$mce_locale, + 'theme_advanced_toolbar_location' => 'top', + 'theme_advanced_toolbar_align' => 'left', + 'theme_advanced_statusbar_location' => 'bottom', + 'theme_advanced_resizing' => true, + 'theme_advanced_resize_horizontal' => false, + 'dialog_type' => 'modal', + 'formats' => "{ + alignleft : [ + {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'left'}}, + {selector : 'img,table', classes : 'alignleft'} + ], + aligncenter : [ + {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'center'}}, + {selector : 'img,table', classes : 'aligncenter'} + ], + alignright : [ + {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'right'}}, + {selector : 'img,table', classes : 'alignright'} + ], + strikethrough : {inline : 'del'} + }", + 'relative_urls' => false, + 'remove_script_host' => false, + 'convert_urls' => false, + 'remove_linebreaks' => true, + 'gecko_spellcheck' => true, + 'fix_list_elements' => true, + 'keep_styles' => false, + 'entities' => '38,amp,60,lt,62,gt', + 'accessibility_focus' => true, + 'media_strict' => false, + 'paste_remove_styles' => true, + 'paste_remove_spans' => true, + 'paste_strip_class_attributes' => 'all', + 'paste_text_use_dialog' => true, + 'webkit_fake_resize' => false, + 'preview_styles' => 'font-family font-weight text-decoration text-transform', + 'schema' => 'html5', + 'wpeditimage_disable_captions' => $no_captions, + 'wp_fullscreen_content_css' => self::$baseurl . '/plugins/wpfullscreen/css/wp-fullscreen.css', + 'plugins' => implode( ',', $plugins ) + ); + + if ( in_array( 'spellchecker', $plugins ) ) { + self::$first_init['spellchecker_rpc_url'] = self::$baseurl . '/plugins/spellchecker/rpc.php'; + self::$first_init['spellchecker_languages'] = $mce_spellchecker_languages; + } + + // load editor_style.css if the current theme supports it + if ( ! empty( $GLOBALS['editor_styles'] ) && is_array( $GLOBALS['editor_styles'] ) ) { + $editor_styles = $GLOBALS['editor_styles']; + + $mce_css = array(); + $editor_styles = array_unique( array_filter( $editor_styles ) ); + $style_uri = get_stylesheet_directory_uri(); + $style_dir = get_stylesheet_directory(); + + // Support externally referenced styles (like, say, fonts). + foreach ( $editor_styles as $key => $file ) { + if ( preg_match( '~^(https?:)?//~', $file ) ) { + $mce_css[] = esc_url_raw( $file ); + unset( $editor_styles[ $key ] ); + } + } + + // Look in a parent theme first, that way child theme CSS overrides. + if ( is_child_theme() ) { + $template_uri = get_template_directory_uri(); + $template_dir = get_template_directory(); + + foreach ( $editor_styles as $key => $file ) { + if ( $file && file_exists( "$template_dir/$file" ) ) + $mce_css[] = "$template_uri/$file"; + } + } + + foreach ( $editor_styles as $file ) { + if ( $file && file_exists( "$style_dir/$file" ) ) + $mce_css[] = "$style_uri/$file"; + } + + $mce_css = implode( ',', $mce_css ); + } else { + $mce_css = ''; + } + + $mce_css = trim( apply_filters( 'mce_css', $mce_css ), ' ,' ); + + if ( ! empty($mce_css) ) + self::$first_init['content_css'] = $mce_css; + } + + if ( $set['teeny'] ) { + $mce_buttons = apply_filters( 'teeny_mce_buttons', array('bold', 'italic', 'underline', 'blockquote', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'undo', 'redo', 'link', 'unlink', 'fullscreen'), $editor_id ); + $mce_buttons_2 = $mce_buttons_3 = $mce_buttons_4 = array(); + } else { + $mce_buttons = apply_filters('mce_buttons', array('bold', 'italic', 'strikethrough', 'bullist', 'numlist', 'blockquote', 'justifyleft', 'justifycenter', 'justifyright', 'link', 'unlink', 'wp_more', 'spellchecker', 'fullscreen', 'wp_adv' ), $editor_id); + $mce_buttons_2 = apply_filters('mce_buttons_2', array( 'formatselect', 'underline', 'justifyfull', 'forecolor', 'pastetext', 'pasteword', 'removeformat', 'charmap', 'outdent', 'indent', 'undo', 'redo', 'wp_help' ), $editor_id); + $mce_buttons_3 = apply_filters('mce_buttons_3', array(), $editor_id); + $mce_buttons_4 = apply_filters('mce_buttons_4', array(), $editor_id); + } + + $body_class = $editor_id; + + if ( $post = get_post() ) { + $body_class .= ' post-type-' . sanitize_html_class( $post->post_type ) . ' post-status-' . sanitize_html_class( $post->post_status ); + if ( post_type_supports( $post->post_type, 'post-formats' ) ) { + $post_format = get_post_format( $post ); + if ( $post_format && ! is_wp_error( $post_format ) ) + $body_class .= ' post-format-' . sanitize_html_class( $post_format ); + else + $body_class .= ' post-format-standard'; + } + } + + if ( !empty($set['tinymce']['body_class']) ) { + $body_class .= ' ' . $set['tinymce']['body_class']; + unset($set['tinymce']['body_class']); + } + + if ( $set['dfw'] ) { + // replace the first 'fullscreen' with 'wp_fullscreen' + if ( ($key = array_search('fullscreen', $mce_buttons)) !== false ) + $mce_buttons[$key] = 'wp_fullscreen'; + elseif ( ($key = array_search('fullscreen', $mce_buttons_2)) !== false ) + $mce_buttons_2[$key] = 'wp_fullscreen'; + elseif ( ($key = array_search('fullscreen', $mce_buttons_3)) !== false ) + $mce_buttons_3[$key] = 'wp_fullscreen'; + elseif ( ($key = array_search('fullscreen', $mce_buttons_4)) !== false ) + $mce_buttons_4[$key] = 'wp_fullscreen'; + } + + $mceInit = array ( + 'elements' => $editor_id, + 'wpautop' => (bool) $set['wpautop'], + 'remove_linebreaks' => (bool) $set['wpautop'], + 'apply_source_formatting' => (bool) !$set['wpautop'], + 'theme_advanced_buttons1' => implode($mce_buttons, ','), + 'theme_advanced_buttons2' => implode($mce_buttons_2, ','), + 'theme_advanced_buttons3' => implode($mce_buttons_3, ','), + 'theme_advanced_buttons4' => implode($mce_buttons_4, ','), + 'tabfocus_elements' => $set['tabfocus_elements'], + 'body_class' => $body_class + ); + + // The main editor doesn't use the TinyMCE resizing cookie. + $mceInit['theme_advanced_resizing_use_cookie'] = 'content' !== $editor_id || empty( $set['editor_height'] ); + + if ( $first_run ) + $mceInit = array_merge(self::$first_init, $mceInit); + + if ( is_array($set['tinymce']) ) + $mceInit = array_merge($mceInit, $set['tinymce']); + + // For people who really REALLY know what they're doing with TinyMCE + // You can modify $mceInit to add, remove, change elements of the config before tinyMCE.init + // Setting "valid_elements", "invalid_elements" and "extended_valid_elements" can be done through this filter. + // Best is to use the default cleanup by not specifying valid_elements, as TinyMCE contains full set of XHTML 1.0. + if ( $set['teeny'] ) { + $mceInit = apply_filters('teeny_mce_before_init', $mceInit, $editor_id); + } else { + $mceInit = apply_filters('tiny_mce_before_init', $mceInit, $editor_id); + } + + if ( empty($mceInit['theme_advanced_buttons3']) && !empty($mceInit['theme_advanced_buttons4']) ) { + $mceInit['theme_advanced_buttons3'] = $mceInit['theme_advanced_buttons4']; + $mceInit['theme_advanced_buttons4'] = ''; + } + + self::$mce_settings[$editor_id] = $mceInit; + } // end if self::$this_tinymce + } + + private static function _parse_init($init) { + $options = ''; + + foreach ( $init as $k => $v ) { + if ( is_bool($v) ) { + $val = $v ? 'true' : 'false'; + $options .= $k . ':' . $val . ','; + continue; + } elseif ( !empty($v) && is_string($v) && ( ('{' == $v{0} && '}' == $v{strlen($v) - 1}) || ('[' == $v{0} && ']' == $v{strlen($v) - 1}) || preg_match('/^\(?function ?\(/', $v) ) ) { + $options .= $k . ':' . $v . ','; + continue; + } + $options .= $k . ':"' . $v . '",'; + } + + return '{' . trim( $options, ' ,' ) . '}'; + } + + public static function enqueue_scripts() { + wp_enqueue_script('word-count'); + + if ( self::$has_tinymce ) + wp_enqueue_script('editor'); + + if ( self::$has_quicktags ) + wp_enqueue_script('quicktags'); + + if ( in_array('wplink', self::$plugins, true) || in_array('link', self::$qt_buttons, true) ) { + wp_enqueue_script('wplink'); + wp_enqueue_script('wpdialogs-popup'); + wp_enqueue_style('wp-jquery-ui-dialog'); + } + + if ( in_array('wpfullscreen', self::$plugins, true) || in_array('fullscreen', self::$qt_buttons, true) ) + wp_enqueue_script('wp-fullscreen'); + + if ( self::$has_medialib ) { + add_thickbox(); + wp_enqueue_script('media-upload'); + } + } + + public static function editor_js() { + global $tinymce_version, $concatenate_scripts, $compress_scripts; + + /** + * Filter "tiny_mce_version" is deprecated + * + * The tiny_mce_version filter is not needed since external plugins are loaded directly by TinyMCE. + * These plugins can be refreshed by appending query string to the URL passed to "mce_external_plugins" filter. + * If the plugin has a popup dialog, a query string can be added to the button action that opens it (in the plugin's code). + */ + $version = 'ver=' . $tinymce_version; + $tmce_on = !empty(self::$mce_settings); + + if ( ! isset($concatenate_scripts) ) + script_concat_settings(); + + $compressed = $compress_scripts && $concatenate_scripts && isset($_SERVER['HTTP_ACCEPT_ENCODING']) + && false !== stripos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'); + + if ( $tmce_on && 'en' != self::$mce_locale ) + include_once(ABSPATH . WPINC . '/js/tinymce/langs/wp-langs.php'); + + $mceInit = $qtInit = ''; + if ( $tmce_on ) { + foreach ( self::$mce_settings as $editor_id => $init ) { + $options = self::_parse_init( $init ); + $mceInit .= "'$editor_id':{$options},"; + } + $mceInit = '{' . trim($mceInit, ',') . '}'; + } else { + $mceInit = '{}'; + } + + if ( !empty(self::$qt_settings) ) { + foreach ( self::$qt_settings as $editor_id => $init ) { + $options = self::_parse_init( $init ); + $qtInit .= "'$editor_id':{$options},"; + } + $qtInit = '{' . trim($qtInit, ',') . '}'; + } else { + $qtInit = '{}'; + } + + $ref = array( + 'plugins' => implode( ',', self::$plugins ), + 'theme' => 'advanced', + 'language' => self::$mce_locale + ); + + $suffix = ( defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ) ? '_src' : ''; + + do_action('before_wp_tiny_mce', self::$mce_settings); +?> + + <script type="text/javascript"> + tinyMCEPreInit = { + base : "<?php echo self::$baseurl; ?>", + suffix : "<?php echo $suffix; ?>", + query : "<?php echo $version; ?>", + mceInit : <?php echo $mceInit; ?>, + qtInit : <?php echo $qtInit; ?>, + ref : <?php echo self::_parse_init( $ref ); ?>, + load_ext : function(url,lang){var sl=tinymce.ScriptLoader;sl.markDone(url+'/langs/'+lang+'.js');sl.markDone(url+'/langs/'+lang+'_dlg.js');} + }; + </script> +<?php + + $baseurl = self::$baseurl; + + if ( $tmce_on ) { + if ( $compressed ) { + echo "<script type='text/javascript' src='{$baseurl}/wp-tinymce.php?c=1&$version'></script>\n"; + } else { + echo "<script type='text/javascript' src='{$baseurl}/tiny_mce.js?$version'></script>\n"; + echo "<script type='text/javascript' src='{$baseurl}/wp-tinymce-schema.js?$version'></script>\n"; + } + + if ( 'en' != self::$mce_locale && isset($lang) ) + echo "<script type='text/javascript'>\n$lang\n</script>\n"; + else + echo "<script type='text/javascript' src='{$baseurl}/langs/wp-langs-en.js?$version'></script>\n"; + } + + $mce = ( self::$has_tinymce && wp_default_editor() == 'tinymce' ) || ! self::$has_quicktags; +?> + + <script type="text/javascript"> + var wpActiveEditor; + + (function(){ + var init, ed, qt, first_init, DOM, el, i, mce = <?php echo (int) $mce; ?>; + + if ( typeof(tinymce) == 'object' ) { + DOM = tinymce.DOM; + // mark wp_theme/ui.css as loaded + DOM.files[tinymce.baseURI.getURI() + '/themes/advanced/skins/wp_theme/ui.css'] = true; + + DOM.events.add( DOM.select('.wp-editor-wrap'), 'mousedown', function(e){ + if ( this.id ) + wpActiveEditor = this.id.slice(3, -5); + }); + + for ( ed in tinyMCEPreInit.mceInit ) { + if ( first_init ) { + init = tinyMCEPreInit.mceInit[ed] = tinymce.extend( {}, first_init, tinyMCEPreInit.mceInit[ed] ); + } else { + init = first_init = tinyMCEPreInit.mceInit[ed]; + } + + if ( mce ) + try { tinymce.init(init); } catch(e){} + } + } else { + if ( tinyMCEPreInit.qtInit ) { + for ( i in tinyMCEPreInit.qtInit ) { + el = tinyMCEPreInit.qtInit[i].id; + if ( el ) + document.getElementById('wp-'+el+'-wrap').onmousedown = function(){ wpActiveEditor = this.id.slice(3, -5); } + } + } + } + + if ( typeof(QTags) == 'function' ) { + for ( qt in tinyMCEPreInit.qtInit ) { + try { quicktags( tinyMCEPreInit.qtInit[qt] ); } catch(e){} + } + } + })(); + <?php + + if ( self::$ext_plugins ) + echo self::$ext_plugins . "\n"; + + if ( ! $compressed && $tmce_on ) { + ?> + (function(){var t=tinyMCEPreInit,sl=tinymce.ScriptLoader,ln=t.ref.language,th=t.ref.theme,pl=t.ref.plugins;sl.markDone(t.base+'/langs/'+ln+'.js');sl.markDone(t.base+'/themes/'+th+'/langs/'+ln+'.js');sl.markDone(t.base+'/themes/'+th+'/langs/'+ln+'_dlg.js');sl.markDone(t.base+'/themes/advanced/skins/wp_theme/ui.css');tinymce.each(pl.split(','),function(n){if(n&&n.charAt(0)!='-'){sl.markDone(t.base+'/plugins/'+n+'/langs/'+ln+'.js');sl.markDone(t.base+'/plugins/'+n+'/langs/'+ln+'_dlg.js');}});})(); + <?php + } + + if ( !is_admin() ) + echo 'var ajaxurl = "' . admin_url( 'admin-ajax.php', 'relative' ) . '";'; + + ?> + </script> + <?php + + if ( in_array('wplink', self::$plugins, true) || in_array('link', self::$qt_buttons, true) ) + self::wp_link_dialog(); + + if ( in_array('wpfullscreen', self::$plugins, true) || in_array('fullscreen', self::$qt_buttons, true) ) + self::wp_fullscreen_html(); + + do_action('after_wp_tiny_mce', self::$mce_settings); + } + + public static function wp_fullscreen_html() { + global $content_width; + $post = get_post(); + + $width = isset($content_width) && 800 > $content_width ? $content_width : 800; + $width = $width + 22; // compensate for the padding and border + $dfw_width = get_user_setting( 'dfw_width', $width ); + $save = isset($post->post_status) && $post->post_status == 'publish' ? __('Update') : __('Save'); + ?> + <div id="wp-fullscreen-body"<?php if ( is_rtl() ) echo ' class="rtl"'; ?>> + <div id="fullscreen-topbar"> + <div id="wp-fullscreen-toolbar"> + <div id="wp-fullscreen-close"><a href="#" onclick="fullscreen.off();return false;"><?php _e('Exit fullscreen'); ?></a></div> + <div id="wp-fullscreen-central-toolbar" style="width:<?php echo $width; ?>px;"> + + <div id="wp-fullscreen-mode-bar"><div id="wp-fullscreen-modes"> + <a href="#" onclick="fullscreen.switchmode('tinymce');return false;"><?php _e( 'Visual' ); ?></a> + <a href="#" onclick="fullscreen.switchmode('html');return false;"><?php _ex( 'Text', 'Name for the Text editor tab (formerly HTML)' ); ?></a> + </div></div> + + <div id="wp-fullscreen-button-bar"><div id="wp-fullscreen-buttons" class="wp_themeSkin"> + <?php + + $buttons = array( + // format: title, onclick, show in both editors + 'bold' => array( 'title' => __('Bold (Ctrl + B)'), 'onclick' => 'fullscreen.b();', 'both' => false ), + 'italic' => array( 'title' => __('Italic (Ctrl + I)'), 'onclick' => 'fullscreen.i();', 'both' => false ), + '0' => 'separator', + 'bullist' => array( 'title' => __('Unordered list (Alt + Shift + U)'), 'onclick' => 'fullscreen.ul();', 'both' => false ), + 'numlist' => array( 'title' => __('Ordered list (Alt + Shift + O)'), 'onclick' => 'fullscreen.ol();', 'both' => false ), + '1' => 'separator', + 'blockquote' => array( 'title' => __('Blockquote (Alt + Shift + Q)'), 'onclick' => 'fullscreen.blockquote();', 'both' => false ), + 'image' => array( 'title' => __('Insert/edit image (Alt + Shift + M)'), 'onclick' => "fullscreen.medialib();", 'both' => true ), + '2' => 'separator', + 'link' => array( 'title' => __('Insert/edit link (Alt + Shift + A)'), 'onclick' => 'fullscreen.link();', 'both' => true ), + 'unlink' => array( 'title' => __('Unlink (Alt + Shift + S)'), 'onclick' => 'fullscreen.unlink();', 'both' => false ), + '3' => 'separator', + 'help' => array( 'title' => __('Help (Alt + Shift + H)'), 'onclick' => 'fullscreen.help();', 'both' => false ) + ); + + $buttons = apply_filters( 'wp_fullscreen_buttons', $buttons ); + + foreach ( $buttons as $button => $args ) { + if ( 'separator' == $args ) { ?> + <div><span aria-orientation="vertical" role="separator" class="mceSeparator"></span></div> + <?php continue; + } ?> + + <div<?php if ( $args['both'] ) { ?> class="wp-fullscreen-both"<?php } ?>> + <a title="<?php echo $args['title']; ?>" onclick="<?php echo $args['onclick']; ?>return false;" class="mceButton mceButtonEnabled mce_<?php echo $button; ?>" href="#" id="wp_fs_<?php echo $button; ?>" role="button" aria-pressed="false"> + <span class="mceIcon mce_<?php echo $button; ?>"></span> + </a> + </div> + <?php + } ?> + + </div></div> + + <div id="wp-fullscreen-save"> + <input type="button" class="button-primary right" value="<?php echo $save; ?>" onclick="fullscreen.save();" /> + <span class="spinner"></span> + <span class="fs-saved"><?php if ( $post->post_status == 'publish' ) _e('Updated.'); else _e('Saved.'); ?></span> + </div> + + </div> + </div> + </div> + + <div id="wp-fullscreen-wrap" style="width:<?php echo $dfw_width; ?>px;"> + <?php if ( post_type_supports($post->post_type, 'title') ) { ?> + <label id="wp-fullscreen-title-prompt-text" for="wp-fullscreen-title"><?php echo apply_filters( 'enter_title_here', __( 'Enter title here' ), $post ); ?></label> + <input type="text" id="wp-fullscreen-title" value="" autocomplete="off" /> + <?php } ?> + + <div id="wp-fullscreen-container"> + <textarea id="wp_mce_fullscreen"></textarea> + </div> + + <div id="wp-fullscreen-status"> + <div id="wp-fullscreen-count"><?php printf( __( 'Word count: %s' ), '<span class="word-count">0</span>' ); ?></div> + <div id="wp-fullscreen-tagline"><?php _e('Just write.'); ?></div> + </div> + </div> + </div> + + <div class="fullscreen-overlay" id="fullscreen-overlay"></div> + <div class="fullscreen-overlay fullscreen-fader fade-600" id="fullscreen-fader"></div> + <?php + } + + /** + * Performs post queries for internal linking. + * + * @since 3.1.0 + * + * @param array $args Optional. Accepts 'pagenum' and 's' (search) arguments. + * @return array Results. + */ + public static function wp_link_query( $args = array() ) { + $pts = get_post_types( array( 'public' => true ), 'objects' ); + $pt_names = array_keys( $pts ); + + $query = array( + 'post_type' => $pt_names, + 'suppress_filters' => true, + 'update_post_term_cache' => false, + 'update_post_meta_cache' => false, + 'post_status' => 'publish', + 'posts_per_page' => 20, + ); + + $args['pagenum'] = isset( $args['pagenum'] ) ? absint( $args['pagenum'] ) : 1; + + if ( isset( $args['s'] ) ) + $query['s'] = $args['s']; + + $query['offset'] = $args['pagenum'] > 1 ? $query['posts_per_page'] * ( $args['pagenum'] - 1 ) : 0; + + /** + * Filter the link query arguments. + * + * Allows modification of the link query arguments before querying. + * + * @see WP_Query for a full list of arguments + * + * @since 3.7.0 + * + * @param array $query An array of WP_Query arguments. + */ + $query = apply_filters( 'wp_link_query_args', $query ); + + // Do main query. + $get_posts = new WP_Query; + $posts = $get_posts->query( $query ); + // Check if any posts were found. + if ( ! $get_posts->post_count ) + return false; + + // Build results. + $results = array(); + foreach ( $posts as $post ) { + if ( 'post' == $post->post_type ) + $info = mysql2date( __( 'Y/m/d' ), $post->post_date ); + else + $info = $pts[ $post->post_type ]->labels->singular_name; + + $results[] = array( + 'ID' => $post->ID, + 'title' => trim( esc_html( strip_tags( get_the_title( $post ) ) ) ), + 'permalink' => get_permalink( $post->ID ), + 'info' => $info, + ); + } + + /** + * Filter the link query results. + * + * Allows modification of the returned link query results. + * + * @since 3.7.0 + * + * @param array $results { + * An associative array of query results. + * + * @type array { + * @type int 'ID' The post ID. + * @type string 'title' The trimmed, escaped post title. + * @type string 'permalink' The post permalink. + * @type string 'info' A 'Y/m/d'-formatted date for 'post' post type, the 'singular_name' post type label otherwise. + * } + * } + * @param array $query An array of WP_Query arguments. @see 'wp_link_query_args' filter + */ + return apply_filters( 'wp_link_query', $results, $query ); + } + + /** + * Dialog for internal linking. + * + * @since 3.1.0 + */ + public static function wp_link_dialog() { + ?> + <div style="display:none;"> + <form id="wp-link" tabindex="-1"> + <?php wp_nonce_field( 'internal-linking', '_ajax_linking_nonce', false ); ?> + <div id="link-selector"> + <div id="link-options"> + <p class="howto"><?php _e( 'Enter the destination URL' ); ?></p> + <div> + <label><span><?php _e( 'URL' ); ?></span><input id="url-field" type="text" name="href" /></label> + </div> + <div> + <label><span><?php _e( 'Title' ); ?></span><input id="link-title-field" type="text" name="linktitle" /></label> + </div> + <div class="link-target"> + <label><input type="checkbox" id="link-target-checkbox" /> <?php _e( 'Open link in a new window/tab' ); ?></label> + </div> + </div> + <?php $show_internal = '1' == get_user_setting( 'wplink', '0' ); ?> + <p class="howto toggle-arrow <?php if ( $show_internal ) echo 'toggle-arrow-active'; ?>" id="internal-toggle"><?php _e( 'Or link to existing content' ); ?></p> + <div id="search-panel"<?php if ( ! $show_internal ) echo ' style="display:none"'; ?>> + <div class="link-search-wrapper"> + <label> + <span class="search-label"><?php _e( 'Search' ); ?></span> + <input type="search" id="search-field" class="link-search-field" autocomplete="off" /> + <span class="spinner"></span> + </label> + </div> + <div id="search-results" class="query-results"> + <ul></ul> + <div class="river-waiting"> + <span class="spinner"></span> + </div> + </div> + <div id="most-recent-results" class="query-results"> + <div class="query-notice"><em><?php _e( 'No search term specified. Showing recent items.' ); ?></em></div> + <ul></ul> + <div class="river-waiting"> + <span class="spinner"></span> + </div> + </div> + </div> + </div> + <div class="submitbox"> + <div id="wp-link-update"> + <input type="submit" value="<?php esc_attr_e( 'Add Link' ); ?>" class="button-primary" id="wp-link-submit" name="wp-link-submit"> + </div> + <div id="wp-link-cancel"> + <a class="submitdelete deletion" href="#"><?php _e( 'Cancel' ); ?></a> + </div> + </div> + </form> + </div> + <?php + } +} diff --git a/src/wp-includes/class-wp-embed.php b/src/wp-includes/class-wp-embed.php new file mode 100644 index 0000000..575066c --- /dev/null +++ b/src/wp-includes/class-wp-embed.php @@ -0,0 +1,323 @@ +<?php +/** + * API for easily embedding rich media such as videos and images into content. + * + * @package WordPress + * @subpackage Embed + * @since 2.9.0 + */ +class WP_Embed { + var $handlers = array(); + var $post_ID; + var $usecache = true; + var $linkifunknown = true; + + /** + * Constructor + */ + function __construct() { + // Hack to get the [embed] shortcode to run before wpautop() + add_filter( 'the_content', array( $this, 'run_shortcode' ), 8 ); + + // Shortcode placeholder for strip_shortcodes() + add_shortcode( 'embed', '__return_false' ); + + // Attempts to embed all URLs in a post + add_filter( 'the_content', array( $this, 'autoembed' ), 8 ); + + // When a post is saved, invalidate the oEmbed cache + add_action( 'pre_post_update', array( $this, 'delete_oembed_caches' ) ); + + // After a post is saved, cache oEmbed items via AJAX + add_action( 'edit_form_advanced', array( $this, 'maybe_run_ajax_cache' ) ); + } + + /** + * Process the [embed] shortcode. + * + * Since the [embed] shortcode needs to be run earlier than other shortcodes, + * this function removes all existing shortcodes, registers the [embed] shortcode, + * calls {@link do_shortcode()}, and then re-registers the old shortcodes. + * + * @uses $shortcode_tags + * @uses remove_all_shortcodes() + * @uses add_shortcode() + * @uses do_shortcode() + * + * @param string $content Content to parse + * @return string Content with shortcode parsed + */ + function run_shortcode( $content ) { + global $shortcode_tags; + + // Back up current registered shortcodes and clear them all out + $orig_shortcode_tags = $shortcode_tags; + remove_all_shortcodes(); + + add_shortcode( 'embed', array( $this, 'shortcode' ) ); + + // Do the shortcode (only the [embed] one is registered) + $content = do_shortcode( $content ); + + // Put the original shortcodes back + $shortcode_tags = $orig_shortcode_tags; + + return $content; + } + + /** + * If a post/page was saved, then output JavaScript to make + * an AJAX request that will call WP_Embed::cache_oembed(). + */ + function maybe_run_ajax_cache() { + $post = get_post(); + + if ( ! $post || empty($_GET['message']) || 1 != $_GET['message'] ) + return; + +?> +<script type="text/javascript"> +/* <![CDATA[ */ + jQuery(document).ready(function($){ + $.get("<?php echo admin_url( 'admin-ajax.php?action=oembed-cache&post=' . $post->ID, 'relative' ); ?>"); + }); +/* ]]> */ +</script> +<?php + } + + /** + * Register an embed handler. Do not use this function directly, use {@link wp_embed_register_handler()} instead. + * This function should probably also only be used for sites that do not support oEmbed. + * + * @param string $id An internal ID/name for the handler. Needs to be unique. + * @param string $regex The regex that will be used to see if this handler should be used for a URL. + * @param callback $callback The callback function that will be called if the regex is matched. + * @param int $priority Optional. Used to specify the order in which the registered handlers will be tested (default: 10). Lower numbers correspond with earlier testing, and handlers with the same priority are tested in the order in which they were added to the action. + */ + function register_handler( $id, $regex, $callback, $priority = 10 ) { + $this->handlers[$priority][$id] = array( + 'regex' => $regex, + 'callback' => $callback, + ); + } + + /** + * Unregister a previously registered embed handler. Do not use this function directly, use {@link wp_embed_unregister_handler()} instead. + * + * @param string $id The handler ID that should be removed. + * @param int $priority Optional. The priority of the handler to be removed (default: 10). + */ + function unregister_handler( $id, $priority = 10 ) { + if ( isset($this->handlers[$priority][$id]) ) + unset($this->handlers[$priority][$id]); + } + + /** + * The {@link do_shortcode()} callback function. + * + * Attempts to convert a URL into embed HTML. Starts by checking the URL against the regex of the registered embed handlers. + * If none of the regex matches and it's enabled, then the URL will be given to the {@link WP_oEmbed} class. + * + * @uses wp_oembed_get() + * @uses wp_parse_args() + * @uses wp_embed_defaults() + * @uses WP_Embed::maybe_make_link() + * @uses get_option() + * @uses author_can() + * @uses wp_cache_get() + * @uses wp_cache_set() + * @uses get_post_meta() + * @uses update_post_meta() + * + * @param array $attr Shortcode attributes. + * @param string $url The URL attempting to be embedded. + * @return string The embed HTML on success, otherwise the original URL. + */ + function shortcode( $attr, $url = '' ) { + $post = get_post(); + + if ( empty( $url ) ) + return ''; + + $rawattr = $attr; + $attr = wp_parse_args( $attr, wp_embed_defaults() ); + + // kses converts & into & and we need to undo this + // See http://core.trac.wordpress.org/ticket/11311 + $url = str_replace( '&', '&', $url ); + + // Look for known internal handlers + ksort( $this->handlers ); + foreach ( $this->handlers as $priority => $handlers ) { + foreach ( $handlers as $id => $handler ) { + if ( preg_match( $handler['regex'], $url, $matches ) && is_callable( $handler['callback'] ) ) { + if ( false !== $return = call_user_func( $handler['callback'], $matches, $attr, $url, $rawattr ) ) + /** + * Filter the returned embed handler. + * + * @since 2.9.0 + * + * @param mixed $return The shortcode callback function to call. + * @param string $url The attempted embed URL. + * @param array $attr An array of shortcode attributes. + */ + return apply_filters( 'embed_handler_html', $return, $url, $attr ); + } + } + } + + $post_ID = ( ! empty( $post->ID ) ) ? $post->ID : null; + if ( ! empty( $this->post_ID ) ) // Potentially set by WP_Embed::cache_oembed() + $post_ID = $this->post_ID; + + // Unknown URL format. Let oEmbed have a go. + if ( $post_ID ) { + + // Check for a cached result (stored in the post meta) + $cachekey = '_oembed_' . md5( $url . serialize( $attr ) ); + if ( $this->usecache ) { + $cache = get_post_meta( $post_ID, $cachekey, true ); + + // Failures are cached + if ( '{{unknown}}' === $cache ) + return $this->maybe_make_link( $url ); + + if ( ! empty( $cache ) ) + /** + * Filter the cached oEmbed HTML. + * + * @since 2.9.0 + * + * @param mixed $cache The cached HTML result, stored in post meta. + * @param string $url The attempted embed URL. + * @param array $attr An array of shortcode attributes. + * @param int $post_ID Post ID. + */ + return apply_filters( 'embed_oembed_html', $cache, $url, $attr, $post_ID ); + } + + /** + * Filter whether to inspect the given URL for discoverable <link> tags. + * + * @see WP_oEmbed::discover() + * + * @param bool false Whether to enable <link> tag discovery. Default false. + */ + $attr['discover'] = ( apply_filters( 'embed_oembed_discover', false ) && author_can( $post_ID, 'unfiltered_html' ) ); + + // Use oEmbed to get the HTML + $html = wp_oembed_get( $url, $attr ); + + // Cache the result + $cache = ( $html ) ? $html : '{{unknown}}'; + update_post_meta( $post_ID, $cachekey, $cache ); + + // If there was a result, return it + if ( $html ) { + /** This filter is documented in wp-includes/class-wp-embed.php */ + return apply_filters( 'embed_oembed_html', $html, $url, $attr, $post_ID ); + } + } + + // Still unknown + return $this->maybe_make_link( $url ); + } + + /** + * Delete all oEmbed caches. + * + * @param int $post_ID Post ID to delete the caches for. + */ + function delete_oembed_caches( $post_ID ) { + $post_metas = get_post_custom_keys( $post_ID ); + if ( empty($post_metas) ) + return; + + foreach( $post_metas as $post_meta_key ) { + if ( '_oembed_' == substr( $post_meta_key, 0, 8 ) ) + delete_post_meta( $post_ID, $post_meta_key ); + } + } + + /** + * Triggers a caching of all oEmbed results. + * + * @param int $post_ID Post ID to do the caching for. + */ + function cache_oembed( $post_ID ) { + $post = get_post( $post_ID ); + + $post_types = array( 'post', 'page' ); + /** + * Filter the array of post types to cache oEmbed results for. + * + * @since 2.9.0 + * + * @param array $post_types Array of post types to cache oEmbed results for. Default 'post', 'page'. + */ + if ( empty($post->ID) || !in_array( $post->post_type, apply_filters( 'embed_cache_oembed_types', $post_types ) ) ) + return; + + // Trigger a caching + if ( !empty($post->post_content) ) { + $this->post_ID = $post->ID; + $this->usecache = false; + + $content = $this->run_shortcode( $post->post_content ); + $this->autoembed( $content ); + + $this->usecache = true; + } + } + + /** + * Passes any unlinked URLs that are on their own line to {@link WP_Embed::shortcode()} for potential embedding. + * + * @uses WP_Embed::autoembed_callback() + * + * @param string $content The content to be searched. + * @return string Potentially modified $content. + */ + function autoembed( $content ) { + return preg_replace_callback( '|^\s*(https?://[^\s"]+)\s*$|im', array( $this, 'autoembed_callback' ), $content ); + } + + /** + * Callback function for {@link WP_Embed::autoembed()}. + * + * @uses WP_Embed::shortcode() + * + * @param array $match A regex match array. + * @return string The embed HTML on success, otherwise the original URL. + */ + function autoembed_callback( $match ) { + $oldval = $this->linkifunknown; + $this->linkifunknown = false; + $return = $this->shortcode( array(), $match[1] ); + $this->linkifunknown = $oldval; + + return "\n$return\n"; + } + + /** + * Conditionally makes a hyperlink based on an internal class variable. + * + * @param string $url URL to potentially be linked. + * @return string Linked URL or the original URL. + */ + function maybe_make_link( $url ) { + $output = ( $this->linkifunknown ) ? '<a href="' . esc_url($url) . '">' . esc_html($url) . '</a>' : $url; + + /** + * Filter the returned, maybe-linked embed URL. + * + * @since 2.9.0 + * + * @param string $output The linked or original URL. + * @param string $url The original URL. + */ + return apply_filters( 'embed_maybe_make_link', $output, $url ); + } +} +$GLOBALS['wp_embed'] = new WP_Embed(); diff --git a/src/wp-includes/class-wp-error.php b/src/wp-includes/class-wp-error.php new file mode 100644 index 0000000..bbfcebc --- /dev/null +++ b/src/wp-includes/class-wp-error.php @@ -0,0 +1,208 @@ +<?php +/** + * WordPress Error API. + * + * Contains the WP_Error class and the is_wp_error() function. + * + * @package WordPress + */ + +/** + * WordPress Error class. + * + * Container for checking for WordPress errors and error messages. Return + * WP_Error and use {@link is_wp_error()} to check if this class is returned. + * Many core WordPress functions pass this class in the event of an error and + * if not handled properly will result in code errors. + * + * @package WordPress + * @since 2.1.0 + */ +class WP_Error { + /** + * Stores the list of errors. + * + * @since 2.1.0 + * @var array + * @access private + */ + var $errors = array(); + + /** + * Stores the list of data for error codes. + * + * @since 2.1.0 + * @var array + * @access private + */ + var $error_data = array(); + + /** + * Constructor - Sets up error message. + * + * If code parameter is empty then nothing will be done. It is possible to + * add multiple messages to the same code, but with other methods in the + * class. + * + * All parameters are optional, but if the code parameter is set, then the + * data parameter is optional. + * + * @since 2.1.0 + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + function __construct($code = '', $message = '', $data = '') { + if ( empty($code) ) + return; + + $this->errors[$code][] = $message; + + if ( ! empty($data) ) + $this->error_data[$code] = $data; + } + + /** + * Retrieve all error codes. + * + * @since 2.1.0 + * @access public + * + * @return array List of error codes, if available. + */ + function get_error_codes() { + if ( empty($this->errors) ) + return array(); + + return array_keys($this->errors); + } + + /** + * Retrieve first error code available. + * + * @since 2.1.0 + * @access public + * + * @return string|int Empty string, if no error codes. + */ + function get_error_code() { + $codes = $this->get_error_codes(); + + if ( empty($codes) ) + return ''; + + return $codes[0]; + } + + /** + * Retrieve all error messages or error messages matching code. + * + * @since 2.1.0 + * + * @param string|int $code Optional. Retrieve messages matching code, if exists. + * @return array Error strings on success, or empty array on failure (if using code parameter). + */ + function get_error_messages($code = '') { + // Return all messages if no code specified. + if ( empty($code) ) { + $all_messages = array(); + foreach ( (array) $this->errors as $code => $messages ) + $all_messages = array_merge($all_messages, $messages); + + return $all_messages; + } + + if ( isset($this->errors[$code]) ) + return $this->errors[$code]; + else + return array(); + } + + /** + * Get single error message. + * + * This will get the first message available for the code. If no code is + * given then the first code available will be used. + * + * @since 2.1.0 + * + * @param string|int $code Optional. Error code to retrieve message. + * @return string + */ + function get_error_message($code = '') { + if ( empty($code) ) + $code = $this->get_error_code(); + $messages = $this->get_error_messages($code); + if ( empty($messages) ) + return ''; + return $messages[0]; + } + + /** + * Retrieve error data for error code. + * + * @since 2.1.0 + * + * @param string|int $code Optional. Error code. + * @return mixed Null, if no errors. + */ + function get_error_data($code = '') { + if ( empty($code) ) + $code = $this->get_error_code(); + + if ( isset($this->error_data[$code]) ) + return $this->error_data[$code]; + return null; + } + + /** + * Append more error messages to list of error messages. + * + * @since 2.1.0 + * @access public + * + * @param string|int $code Error code. + * @param string $message Error message. + * @param mixed $data Optional. Error data. + */ + function add($code, $message, $data = '') { + $this->errors[$code][] = $message; + if ( ! empty($data) ) + $this->error_data[$code] = $data; + } + + /** + * Add data for error code. + * + * The error code can only contain one error data. + * + * @since 2.1.0 + * + * @param mixed $data Error data. + * @param string|int $code Error code. + */ + function add_data($data, $code = '') { + if ( empty($code) ) + $code = $this->get_error_code(); + + $this->error_data[$code] = $data; + } +} + +/** + * Check whether variable is a WordPress Error. + * + * Returns true if $thing is an object of the WP_Error class. + * + * @since 2.1.0 + * + * @param mixed $thing Check if unknown variable is a WP_Error object. + * @return bool True, if WP_Error. False, if not WP_Error. + */ +function is_wp_error($thing) { + if ( is_object($thing) && is_a($thing, 'WP_Error') ) + return true; + return false; +} diff --git a/src/wp-includes/class-wp-http-ixr-client.php b/src/wp-includes/class-wp-http-ixr-client.php new file mode 100644 index 0000000..736fc5a --- /dev/null +++ b/src/wp-includes/class-wp-http-ixr-client.php @@ -0,0 +1,92 @@ +<?php +/** + * WP_HTTP_IXR_Client + * + * @package WordPress + * @since 3.1.0 + * + */ +class WP_HTTP_IXR_Client extends IXR_Client { + + function __construct($server, $path = false, $port = false, $timeout = 15) { + if ( ! $path ) { + // Assume we have been given a URL instead + $bits = parse_url($server); + $this->scheme = $bits['scheme']; + $this->server = $bits['host']; + $this->port = isset($bits['port']) ? $bits['port'] : $port; + $this->path = !empty($bits['path']) ? $bits['path'] : '/'; + + // Make absolutely sure we have a path + if ( ! $this->path ) + $this->path = '/'; + } else { + $this->scheme = 'http'; + $this->server = $server; + $this->path = $path; + $this->port = $port; + } + $this->useragent = 'The Incutio XML-RPC PHP Library'; + $this->timeout = $timeout; + } + + function query() { + $args = func_get_args(); + $method = array_shift($args); + $request = new IXR_Request($method, $args); + $xml = $request->getXml(); + + $port = $this->port ? ":$this->port" : ''; + $url = $this->scheme . '://' . $this->server . $port . $this->path; + $args = array( + 'headers' => array('Content-Type' => 'text/xml'), + 'user-agent' => $this->useragent, + 'body' => $xml, + ); + + // Merge Custom headers ala #8145 + foreach ( $this->headers as $header => $value ) + $args['headers'][$header] = $value; + + if ( $this->timeout !== false ) + $args['timeout'] = $this->timeout; + + // Now send the request + if ( $this->debug ) + echo '<pre class="ixr_request">' . htmlspecialchars($xml) . "\n</pre>\n\n"; + + $response = wp_remote_post($url, $args); + + if ( is_wp_error($response) ) { + $errno = $response->get_error_code(); + $errorstr = $response->get_error_message(); + $this->error = new IXR_Error(-32300, "transport error: $errno $errorstr"); + return false; + } + + if ( 200 != wp_remote_retrieve_response_code( $response ) ) { + $this->error = new IXR_Error(-32301, 'transport error - HTTP status code was not 200 (' . wp_remote_retrieve_response_code( $response ) . ')'); + return false; + } + + if ( $this->debug ) + echo '<pre class="ixr_response">' . htmlspecialchars( wp_remote_retrieve_body( $response ) ) . "\n</pre>\n\n"; + + // Now parse what we've got back + $this->message = new IXR_Message( wp_remote_retrieve_body( $response ) ); + if ( ! $this->message->parse() ) { + // XML error + $this->error = new IXR_Error(-32700, 'parse error. not well formed'); + return false; + } + + // Is the message a fault? + if ( $this->message->messageType == 'fault' ) { + $this->error = new IXR_Error($this->message->faultCode, $this->message->faultString); + return false; + } + + // Message must be OK + return true; + } +} diff --git a/src/wp-includes/class-wp-image-editor-gd.php b/src/wp-includes/class-wp-image-editor-gd.php new file mode 100644 index 0000000..fdd5586 --- /dev/null +++ b/src/wp-includes/class-wp-image-editor-gd.php @@ -0,0 +1,442 @@ +<?php +/** + * WordPress GD Image Editor + * + * @package WordPress + * @subpackage Image_Editor + */ + +/** + * WordPress Image Editor Class for Image Manipulation through GD + * + * @since 3.5.0 + * @package WordPress + * @subpackage Image_Editor + * @uses WP_Image_Editor Extends class + */ +class WP_Image_Editor_GD extends WP_Image_Editor { + + protected $image = false; // GD Resource + + function __destruct() { + if ( $this->image ) { + // we don't need the original in memory anymore + imagedestroy( $this->image ); + } + } + + /** + * Checks to see if current environment supports GD. + * + * @since 3.5.0 + * @access public + * + * @return boolean + */ + public static function test( $args = array() ) { + if ( ! extension_loaded('gd') || ! function_exists('gd_info') ) + return false; + + // On some setups GD library does not provide imagerotate() - Ticket #11536 + if ( isset( $args['methods'] ) && + in_array( 'rotate', $args['methods'] ) && + ! function_exists('imagerotate') ){ + + return false; + } + + return true; + } + + /** + * Checks to see if editor supports the mime-type specified. + * + * @since 3.5.0 + * @access public + * + * @param string $mime_type + * @return boolean + */ + public static function supports_mime_type( $mime_type ) { + $image_types = imagetypes(); + switch( $mime_type ) { + case 'image/jpeg': + return ($image_types & IMG_JPG) != 0; + case 'image/png': + return ($image_types & IMG_PNG) != 0; + case 'image/gif': + return ($image_types & IMG_GIF) != 0; + } + + return false; + } + + /** + * Loads image from $this->file into new GD Resource. + * + * @since 3.5.0 + * @access protected + * + * @return boolean|WP_Error True if loaded successfully; WP_Error on failure. + */ + public function load() { + if ( $this->image ) + return true; + + if ( ! is_file( $this->file ) && ! preg_match( '|^https?://|', $this->file ) ) + return new WP_Error( 'error_loading_image', __('File doesn’t exist?'), $this->file ); + + /** + * Filter the memory limit allocated for image manipulation. + * + * @since 3.5.0 + * + * @param int|string $limit Maximum memory limit to allocate for images. Default WP_MAX_MEMORY_LIMIT. + * Accepts an integer (bytes), or a shorthand string notation, such as '256M'. + */ + // Set artificially high because GD uses uncompressed images in memory + @ini_set( 'memory_limit', apply_filters( 'image_memory_limit', WP_MAX_MEMORY_LIMIT ) ); + + $this->image = @imagecreatefromstring( file_get_contents( $this->file ) ); + + if ( ! is_resource( $this->image ) ) + return new WP_Error( 'invalid_image', __('File is not an image.'), $this->file ); + + $size = @getimagesize( $this->file ); + if ( ! $size ) + return new WP_Error( 'invalid_image', __('Could not read image size.'), $this->file ); + + if ( function_exists( 'imagealphablending' ) && function_exists( 'imagesavealpha' ) ) { + imagealphablending( $this->image, false ); + imagesavealpha( $this->image, true ); + } + + $this->update_size( $size[0], $size[1] ); + $this->mime_type = $size['mime']; + + return $this->set_quality( $this->quality ); + } + + /** + * Sets or updates current image size. + * + * @since 3.5.0 + * @access protected + * + * @param int $width + * @param int $height + */ + protected function update_size( $width = false, $height = false ) { + if ( ! $width ) + $width = imagesx( $this->image ); + + if ( ! $height ) + $height = imagesy( $this->image ); + + return parent::update_size( $width, $height ); + } + + /** + * Resizes current image. + * Wraps _resize, since _resize returns a GD Resource. + * + * @since 3.5.0 + * @access public + * + * @param int $max_w + * @param int $max_h + * @param boolean $crop + * @return boolean|WP_Error + */ + public function resize( $max_w, $max_h, $crop = false ) { + if ( ( $this->size['width'] == $max_w ) && ( $this->size['height'] == $max_h ) ) + return true; + + $resized = $this->_resize( $max_w, $max_h, $crop ); + + if ( is_resource( $resized ) ) { + imagedestroy( $this->image ); + $this->image = $resized; + return true; + + } elseif ( is_wp_error( $resized ) ) + return $resized; + + return new WP_Error( 'image_resize_error', __('Image resize failed.'), $this->file ); + } + + protected function _resize( $max_w, $max_h, $crop = false ) { + $dims = image_resize_dimensions( $this->size['width'], $this->size['height'], $max_w, $max_h, $crop ); + if ( ! $dims ) { + return new WP_Error( 'error_getting_dimensions', __('Could not calculate resized image dimensions'), $this->file ); + } + list( $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ) = $dims; + + $resized = wp_imagecreatetruecolor( $dst_w, $dst_h ); + imagecopyresampled( $resized, $this->image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ); + + if ( is_resource( $resized ) ) { + $this->update_size( $dst_w, $dst_h ); + return $resized; + } + + return new WP_Error( 'image_resize_error', __('Image resize failed.'), $this->file ); + } + + /** + * Resize multiple images from a single source. + * + * @since 3.5.0 + * @access public + * + * @param array $sizes { + * An array of image size arrays. Default sizes are 'small', 'medium', 'large'. + * + * @type array $size { + * @type int $width Image width. + * @type int $height Image height. + * @type bool $crop Optional. Whether to crop the image. Default false. + * } + * } + * @return array An array of resized images metadata by size. + */ + public function multi_resize( $sizes ) { + $metadata = array(); + $orig_size = $this->size; + + foreach ( $sizes as $size => $size_data ) { + if ( ! ( isset( $size_data['width'] ) && isset( $size_data['height'] ) ) ) + continue; + + if ( ! isset( $size_data['crop'] ) ) + $size_data['crop'] = false; + + $image = $this->_resize( $size_data['width'], $size_data['height'], $size_data['crop'] ); + + if( ! is_wp_error( $image ) ) { + $resized = $this->_save( $image ); + + imagedestroy( $image ); + + if ( ! is_wp_error( $resized ) && $resized ) { + unset( $resized['path'] ); + $metadata[$size] = $resized; + } + } + + $this->size = $orig_size; + } + + return $metadata; + } + + /** + * Crops Image. + * + * @since 3.5.0 + * @access public + * + * @param string|int $src The source file or Attachment ID. + * @param int $src_x The start x position to crop from. + * @param int $src_y The start y position to crop from. + * @param int $src_w The width to crop. + * @param int $src_h The height to crop. + * @param int $dst_w Optional. The destination width. + * @param int $dst_h Optional. The destination height. + * @param boolean $src_abs Optional. If the source crop points are absolute. + * @return boolean|WP_Error + */ + public function crop( $src_x, $src_y, $src_w, $src_h, $dst_w = null, $dst_h = null, $src_abs = false ) { + // If destination width/height isn't specified, use same as + // width/height from source. + if ( ! $dst_w ) + $dst_w = $src_w; + if ( ! $dst_h ) + $dst_h = $src_h; + + $dst = wp_imagecreatetruecolor( $dst_w, $dst_h ); + + if ( $src_abs ) { + $src_w -= $src_x; + $src_h -= $src_y; + } + + if ( function_exists( 'imageantialias' ) ) + imageantialias( $dst, true ); + + imagecopyresampled( $dst, $this->image, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ); + + if ( is_resource( $dst ) ) { + imagedestroy( $this->image ); + $this->image = $dst; + $this->update_size(); + return true; + } + + return new WP_Error( 'image_crop_error', __('Image crop failed.'), $this->file ); + } + + /** + * Rotates current image counter-clockwise by $angle. + * Ported from image-edit.php + * + * @since 3.5.0 + * @access public + * + * @param float $angle + * @return boolean|WP_Error + */ + public function rotate( $angle ) { + if ( function_exists('imagerotate') ) { + $rotated = imagerotate( $this->image, $angle, 0 ); + + if ( is_resource( $rotated ) ) { + imagedestroy( $this->image ); + $this->image = $rotated; + $this->update_size(); + return true; + } + } + return new WP_Error( 'image_rotate_error', __('Image rotate failed.'), $this->file ); + } + + /** + * Flips current image. + * + * @since 3.5.0 + * @access public + * + * @param boolean $horz Flip along Horizontal Axis + * @param boolean $vert Flip along Vertical Axis + * @returns boolean|WP_Error + */ + public function flip( $horz, $vert ) { + $w = $this->size['width']; + $h = $this->size['height']; + $dst = wp_imagecreatetruecolor( $w, $h ); + + if ( is_resource( $dst ) ) { + $sx = $vert ? ($w - 1) : 0; + $sy = $horz ? ($h - 1) : 0; + $sw = $vert ? -$w : $w; + $sh = $horz ? -$h : $h; + + if ( imagecopyresampled( $dst, $this->image, 0, 0, $sx, $sy, $w, $h, $sw, $sh ) ) { + imagedestroy( $this->image ); + $this->image = $dst; + return true; + } + } + return new WP_Error( 'image_flip_error', __('Image flip failed.'), $this->file ); + } + + /** + * Saves current in-memory image to file. + * + * @since 3.5.0 + * @access public + * + * @param string $destfilename + * @param string $mime_type + * @return array|WP_Error {'path'=>string, 'file'=>string, 'width'=>int, 'height'=>int, 'mime-type'=>string} + */ + public function save( $filename = null, $mime_type = null ) { + $saved = $this->_save( $this->image, $filename, $mime_type ); + + if ( ! is_wp_error( $saved ) ) { + $this->file = $saved['path']; + $this->mime_type = $saved['mime-type']; + } + + return $saved; + } + + protected function _save( $image, $filename = null, $mime_type = null ) { + list( $filename, $extension, $mime_type ) = $this->get_output_format( $filename, $mime_type ); + + if ( ! $filename ) + $filename = $this->generate_filename( null, null, $extension ); + + if ( 'image/gif' == $mime_type ) { + if ( ! $this->make_image( $filename, 'imagegif', array( $image, $filename ) ) ) + return new WP_Error( 'image_save_error', __('Image Editor Save Failed') ); + } + elseif ( 'image/png' == $mime_type ) { + // convert from full colors to index colors, like original PNG. + if ( function_exists('imageistruecolor') && ! imageistruecolor( $image ) ) + imagetruecolortopalette( $image, false, imagecolorstotal( $image ) ); + + if ( ! $this->make_image( $filename, 'imagepng', array( $image, $filename ) ) ) + return new WP_Error( 'image_save_error', __('Image Editor Save Failed') ); + } + elseif ( 'image/jpeg' == $mime_type ) { + if ( ! $this->make_image( $filename, 'imagejpeg', array( $image, $filename, $this->quality ) ) ) + return new WP_Error( 'image_save_error', __('Image Editor Save Failed') ); + } + else { + return new WP_Error( 'image_save_error', __('Image Editor Save Failed') ); + } + + // Set correct file permissions + $stat = stat( dirname( $filename ) ); + $perms = $stat['mode'] & 0000666; //same permissions as parent folder, strip off the executable bits + @ chmod( $filename, $perms ); + + /** + * Filter the name of the saved image file. + * + * @since 2.6.0 + * + * @param string $filename Name of the file. + */ + return array( + 'path' => $filename, + 'file' => wp_basename( apply_filters( 'image_make_intermediate_size', $filename ) ), + 'width' => $this->size['width'], + 'height' => $this->size['height'], + 'mime-type' => $mime_type, + ); + } + + /** + * Returns stream of current image. + * + * @since 3.5.0 + * @access public + * + * @param string $mime_type + */ + public function stream( $mime_type = null ) { + list( $filename, $extension, $mime_type ) = $this->get_output_format( null, $mime_type ); + + switch ( $mime_type ) { + case 'image/png': + header( 'Content-Type: image/png' ); + return imagepng( $this->image ); + case 'image/gif': + header( 'Content-Type: image/gif' ); + return imagegif( $this->image ); + default: + header( 'Content-Type: image/jpeg' ); + return imagejpeg( $this->image, null, $this->quality ); + } + } + + /** + * Either calls editor's save function or handles file as a stream. + * + * @since 3.5.0 + * @access protected + * + * @param string|stream $filename + * @param callable $function + * @param array $arguments + * @return boolean + */ + protected function make_image( $filename, $function, $arguments ) { + if ( wp_is_stream( $filename ) ) + $arguments[1] = null; + + return parent::make_image( $filename, $function, $arguments ); + } +} diff --git a/src/wp-includes/class-wp-image-editor-imagick.php b/src/wp-includes/class-wp-image-editor-imagick.php new file mode 100644 index 0000000..f3c9451 --- /dev/null +++ b/src/wp-includes/class-wp-image-editor-imagick.php @@ -0,0 +1,494 @@ +<?php +/** + * WordPress Imagick Image Editor + * + * @package WordPress + * @subpackage Image_Editor + */ + +/** + * WordPress Image Editor Class for Image Manipulation through Imagick PHP Module + * + * @since 3.5.0 + * @package WordPress + * @subpackage Image_Editor + * @uses WP_Image_Editor Extends class + */ +class WP_Image_Editor_Imagick extends WP_Image_Editor { + + protected $image = null; // Imagick Object + + function __destruct() { + if ( $this->image instanceof Imagick ) { + // we don't need the original in memory anymore + $this->image->clear(); + $this->image->destroy(); + } + } + + /** + * Checks to see if current environment supports Imagick. + * + * We require Imagick 2.2.0 or greater, based on whether the queryFormats() + * method can be called statically. + * + * @since 3.5.0 + * @access public + * + * @return boolean + */ + public static function test( $args = array() ) { + + // First, test Imagick's extension and classes. + if ( ! extension_loaded( 'imagick' ) || ! class_exists( 'Imagick' ) || ! class_exists( 'ImagickPixel' ) ) + return false; + + if ( version_compare( phpversion( 'imagick' ), '2.2.0', '<' ) ) + return false; + + $required_methods = array( + 'clear', + 'destroy', + 'valid', + 'getimage', + 'writeimage', + 'getimageblob', + 'getimagegeometry', + 'getimageformat', + 'setimageformat', + 'setimagecompression', + 'setimagecompressionquality', + 'setimagepage', + 'scaleimage', + 'cropimage', + 'rotateimage', + 'flipimage', + 'flopimage', + ); + + // Now, test for deep requirements within Imagick. + if ( ! defined( 'imagick::COMPRESSION_JPEG' ) ) + return false; + + if ( array_diff( $required_methods, get_class_methods( 'Imagick' ) ) ) + return false; + + return true; + } + + /** + * Checks to see if editor supports the mime-type specified. + * + * @since 3.5.0 + * @access public + * + * @param string $mime_type + * @return boolean + */ + public static function supports_mime_type( $mime_type ) { + $imagick_extension = strtoupper( self::get_extension( $mime_type ) ); + + if ( ! $imagick_extension ) + return false; + + // setIteratorIndex is optional unless mime is an animated format. + // Here, we just say no if you are missing it and aren't loading a jpeg. + if ( ! method_exists( 'Imagick', 'setIteratorIndex' ) && $mime_type != 'image/jpeg' ) + return false; + + try { + return ( (bool) @Imagick::queryFormats( $imagick_extension ) ); + } + catch ( Exception $e ) { + return false; + } + } + + /** + * Loads image from $this->file into new Imagick Object. + * + * @since 3.5.0 + * @access protected + * + * @return boolean|WP_Error True if loaded; WP_Error on failure. + */ + public function load() { + if ( $this->image instanceof Imagick ) + return true; + + if ( ! is_file( $this->file ) && ! preg_match( '|^https?://|', $this->file ) ) + return new WP_Error( 'error_loading_image', __('File doesn’t exist?'), $this->file ); + + /** This filter is documented in wp-includes/class-wp-image-editor-imagick.php */ + // Even though Imagick uses less PHP memory than GD, set higher limit for users that have low PHP.ini limits + @ini_set( 'memory_limit', apply_filters( 'image_memory_limit', WP_MAX_MEMORY_LIMIT ) ); + + try { + $this->image = new Imagick( $this->file ); + + if( ! $this->image->valid() ) + return new WP_Error( 'invalid_image', __('File is not an image.'), $this->file); + + // Select the first frame to handle animated images properly + if ( is_callable( array( $this->image, 'setIteratorIndex' ) ) ) + $this->image->setIteratorIndex(0); + + $this->mime_type = $this->get_mime_type( $this->image->getImageFormat() ); + } + catch ( Exception $e ) { + return new WP_Error( 'invalid_image', $e->getMessage(), $this->file ); + } + + $updated_size = $this->update_size(); + if ( is_wp_error( $updated_size ) ) + return $updated_size; + + return $this->set_quality( $this->quality ); + } + + /** + * Sets Image Compression quality on a 1-100% scale. + * + * @since 3.5.0 + * @access public + * + * @param int $quality Compression Quality. Range: [1,100] + * @return boolean|WP_Error True if set successfully; WP_Error on failure. + */ + public function set_quality( $quality = null ) { + $quality_result = parent::set_quality( $quality ); + if ( is_wp_error( $quality_result ) ) { + return $quality_result; + } else { + $quality = $this->quality; + } + + try { + if ( 'image/jpeg' == $this->mime_type ) { + $this->image->setImageCompressionQuality( $quality ); + $this->image->setImageCompression( imagick::COMPRESSION_JPEG ); + } + else { + $this->image->setImageCompressionQuality( $quality ); + } + } + catch ( Exception $e ) { + return new WP_Error( 'image_quality_error', $e->getMessage() ); + } + + return true; + } + + /** + * Sets or updates current image size. + * + * @since 3.5.0 + * @access protected + * + * @param int $width + * @param int $height + */ + protected function update_size( $width = null, $height = null ) { + $size = null; + if ( !$width || !$height ) { + try { + $size = $this->image->getImageGeometry(); + } + catch ( Exception $e ) { + return new WP_Error( 'invalid_image', __('Could not read image size'), $this->file ); + } + } + + if ( ! $width ) + $width = $size['width']; + + if ( ! $height ) + $height = $size['height']; + + return parent::update_size( $width, $height ); + } + + /** + * Resizes current image. + * + * @since 3.5.0 + * @access public + * + * @param int $max_w + * @param int $max_h + * @param boolean $crop + * @return boolean|WP_Error + */ + public function resize( $max_w, $max_h, $crop = false ) { + if ( ( $this->size['width'] == $max_w ) && ( $this->size['height'] == $max_h ) ) + return true; + + $dims = image_resize_dimensions( $this->size['width'], $this->size['height'], $max_w, $max_h, $crop ); + if ( ! $dims ) + return new WP_Error( 'error_getting_dimensions', __('Could not calculate resized image dimensions') ); + list( $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ) = $dims; + + if ( $crop ) { + return $this->crop( $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h ); + } + + try { + /** + * @TODO: Thumbnail is more efficient, given a newer version of Imagemagick. + * $this->image->thumbnailImage( $dst_w, $dst_h ); + */ + $this->image->scaleImage( $dst_w, $dst_h ); + } + catch ( Exception $e ) { + return new WP_Error( 'image_resize_error', $e->getMessage() ); + } + + return $this->update_size( $dst_w, $dst_h ); + } + + /** + * Resize multiple images from a single source. + * + * @since 3.5.0 + * @access public + * + * @param array $sizes { + * An array of image size arrays. Default sizes are 'small', 'medium', 'large'. + * + * @type array $size { + * @type int $width Image width. + * @type int $height Image height. + * @type bool $crop Optional. Whether to crop the image. Default false. + * } + * } + * @return array An array of resized images metadata by size. + */ + public function multi_resize( $sizes ) { + $metadata = array(); + $orig_size = $this->size; + $orig_image = $this->image->getImage(); + + foreach ( $sizes as $size => $size_data ) { + if ( ! $this->image ) + $this->image = $orig_image->getImage(); + + if ( ! ( isset( $size_data['width'] ) && isset( $size_data['height'] ) ) ) + continue; + + if ( ! isset( $size_data['crop'] ) ) + $size_data['crop'] = false; + + $resize_result = $this->resize( $size_data['width'], $size_data['height'], $size_data['crop'] ); + + if( ! is_wp_error( $resize_result ) ) { + $resized = $this->_save( $this->image ); + + $this->image->clear(); + $this->image->destroy(); + $this->image = null; + + if ( ! is_wp_error( $resized ) && $resized ) { + unset( $resized['path'] ); + $metadata[$size] = $resized; + } + } + + $this->size = $orig_size; + } + + $this->image = $orig_image; + + return $metadata; + } + + /** + * Crops Image. + * + * @since 3.5.0 + * @access public + * + * @param string|int $src The source file or Attachment ID. + * @param int $src_x The start x position to crop from. + * @param int $src_y The start y position to crop from. + * @param int $src_w The width to crop. + * @param int $src_h The height to crop. + * @param int $dst_w Optional. The destination width. + * @param int $dst_h Optional. The destination height. + * @param boolean $src_abs Optional. If the source crop points are absolute. + * @return boolean|WP_Error + */ + public function crop( $src_x, $src_y, $src_w, $src_h, $dst_w = null, $dst_h = null, $src_abs = false ) { + if ( $src_abs ) { + $src_w -= $src_x; + $src_h -= $src_y; + } + + try { + $this->image->cropImage( $src_w, $src_h, $src_x, $src_y ); + $this->image->setImagePage( $src_w, $src_h, 0, 0); + + if ( $dst_w || $dst_h ) { + // If destination width/height isn't specified, use same as + // width/height from source. + if ( ! $dst_w ) + $dst_w = $src_w; + if ( ! $dst_h ) + $dst_h = $src_h; + + $this->image->scaleImage( $dst_w, $dst_h ); + return $this->update_size(); + } + } + catch ( Exception $e ) { + return new WP_Error( 'image_crop_error', $e->getMessage() ); + } + return $this->update_size(); + } + + /** + * Rotates current image counter-clockwise by $angle. + * + * @since 3.5.0 + * @access public + * + * @param float $angle + * @return boolean|WP_Error + */ + public function rotate( $angle ) { + /** + * $angle is 360-$angle because Imagick rotates clockwise + * (GD rotates counter-clockwise) + */ + try { + $this->image->rotateImage( new ImagickPixel('none'), 360-$angle ); + + // Since this changes the dimensions of the image, update the size. + $result = $this->update_size(); + if ( is_wp_error( $result ) ) + return $result; + + $this->image->setImagePage( $this->size['width'], $this->size['height'], 0, 0 ); + } + catch ( Exception $e ) { + return new WP_Error( 'image_rotate_error', $e->getMessage() ); + } + return true; + } + + /** + * Flips current image. + * + * @since 3.5.0 + * @access public + * + * @param boolean $horz Flip along Horizontal Axis + * @param boolean $vert Flip along Vertical Axis + * @returns boolean|WP_Error + */ + public function flip( $horz, $vert ) { + try { + if ( $horz ) + $this->image->flipImage(); + + if ( $vert ) + $this->image->flopImage(); + } + catch ( Exception $e ) { + return new WP_Error( 'image_flip_error', $e->getMessage() ); + } + return true; + } + + /** + * Saves current image to file. + * + * @since 3.5.0 + * @access public + * + * @param string $destfilename + * @param string $mime_type + * @return array|WP_Error {'path'=>string, 'file'=>string, 'width'=>int, 'height'=>int, 'mime-type'=>string} + */ + public function save( $destfilename = null, $mime_type = null ) { + $saved = $this->_save( $this->image, $destfilename, $mime_type ); + + if ( ! is_wp_error( $saved ) ) { + $this->file = $saved['path']; + $this->mime_type = $saved['mime-type']; + + try { + $this->image->setImageFormat( strtoupper( $this->get_extension( $this->mime_type ) ) ); + } + catch ( Exception $e ) { + return new WP_Error( 'image_save_error', $e->getMessage(), $this->file ); + } + } + + return $saved; + } + + protected function _save( $image, $filename = null, $mime_type = null ) { + list( $filename, $extension, $mime_type ) = $this->get_output_format( $filename, $mime_type ); + + if ( ! $filename ) + $filename = $this->generate_filename( null, null, $extension ); + + try { + // Store initial Format + $orig_format = $this->image->getImageFormat(); + + $this->image->setImageFormat( strtoupper( $this->get_extension( $mime_type ) ) ); + $this->make_image( $filename, array( $image, 'writeImage' ), array( $filename ) ); + + // Reset original Format + $this->image->setImageFormat( $orig_format ); + } + catch ( Exception $e ) { + return new WP_Error( 'image_save_error', $e->getMessage(), $filename ); + } + + // Set correct file permissions + $stat = stat( dirname( $filename ) ); + $perms = $stat['mode'] & 0000666; //same permissions as parent folder, strip off the executable bits + @ chmod( $filename, $perms ); + + /** This filter is documented in wp-includes/class-wp-image-editor-gd.php */ + return array( + 'path' => $filename, + 'file' => wp_basename( apply_filters( 'image_make_intermediate_size', $filename ) ), + 'width' => $this->size['width'], + 'height' => $this->size['height'], + 'mime-type' => $mime_type, + ); + } + + /** + * Streams current image to browser. + * + * @since 3.5.0 + * @access public + * + * @param string $mime_type + * @return boolean|WP_Error + */ + public function stream( $mime_type = null ) { + list( $filename, $extension, $mime_type ) = $this->get_output_format( null, $mime_type ); + + try { + // Temporarily change format for stream + $this->image->setImageFormat( strtoupper( $extension ) ); + + // Output stream of image content + header( "Content-Type: $mime_type" ); + print $this->image->getImageBlob(); + + // Reset Image to original Format + $this->image->setImageFormat( $this->get_extension( $this->mime_type ) ); + } + catch ( Exception $e ) { + return new WP_Error( 'image_stream_error', $e->getMessage() ); + } + + return true; + } +} diff --git a/src/wp-includes/class-wp-image-editor.php b/src/wp-includes/class-wp-image-editor.php new file mode 100644 index 0000000..7f6488f --- /dev/null +++ b/src/wp-includes/class-wp-image-editor.php @@ -0,0 +1,453 @@ +<?php +/** + * Base WordPress Image Editor + * + * @package WordPress + * @subpackage Image_Editor + */ + +/** + * Base image editor class from which implementations extend + * + * @since 3.5.0 + */ +abstract class WP_Image_Editor { + protected $file = null; + protected $size = null; + protected $mime_type = null; + protected $default_mime_type = 'image/jpeg'; + protected $quality = 90; + + /** + * Each instance handles a single file. + */ + public function __construct( $file ) { + $this->file = $file; + } + + /** + * Checks to see if current environment supports the editor chosen. + * Must be overridden in a sub-class. + * + * @since 3.5.0 + * @access public + * @abstract + * + * @param array $args + * @return boolean + */ + public static function test( $args = array() ) { + return false; + } + + /** + * Checks to see if editor supports the mime-type specified. + * Must be overridden in a sub-class. + * + * @since 3.5.0 + * @access public + * @abstract + * + * @param string $mime_type + * @return boolean + */ + public static function supports_mime_type( $mime_type ) { + return false; + } + + /** + * Loads image from $this->file into editor. + * + * @since 3.5.0 + * @access protected + * @abstract + * + * @return boolean|WP_Error True if loaded; WP_Error on failure. + */ + abstract public function load(); + + /** + * Saves current image to file. + * + * @since 3.5.0 + * @access public + * @abstract + * + * @param string $destfilename + * @param string $mime_type + * @return array|WP_Error {'path'=>string, 'file'=>string, 'width'=>int, 'height'=>int, 'mime-type'=>string} + */ + abstract public function save( $destfilename = null, $mime_type = null ); + + /** + * Resizes current image. + * + * @since 3.5.0 + * @access public + * @abstract + * + * @param int $max_w + * @param int $max_h + * @param boolean $crop + * @return boolean|WP_Error + */ + abstract public function resize( $max_w, $max_h, $crop = false ); + + /** + * Resize multiple images from a single source. + * + * @since 3.5.0 + * @access public + * @abstract + * + * @param array $sizes { + * An array of image size arrays. Default sizes are 'small', 'medium', 'large'. + * + * @type array $size { + * @type int $width Image width. + * @type int $height Image height. + * @type bool $crop Optional. Whether to crop the image. Default false. + * } + * } + * @return array An array of resized images metadata by size. + */ + abstract public function multi_resize( $sizes ); + + /** + * Crops Image. + * + * @since 3.5.0 + * @access public + * @abstract + * + * @param string|int $src The source file or Attachment ID. + * @param int $src_x The start x position to crop from. + * @param int $src_y The start y position to crop from. + * @param int $src_w The width to crop. + * @param int $src_h The height to crop. + * @param int $dst_w Optional. The destination width. + * @param int $dst_h Optional. The destination height. + * @param boolean $src_abs Optional. If the source crop points are absolute. + * @return boolean|WP_Error + */ + abstract public function crop( $src_x, $src_y, $src_w, $src_h, $dst_w = null, $dst_h = null, $src_abs = false ); + + /** + * Rotates current image counter-clockwise by $angle. + * + * @since 3.5.0 + * @access public + * @abstract + * + * @param float $angle + * @return boolean|WP_Error + */ + abstract public function rotate( $angle ); + + /** + * Flips current image. + * + * @since 3.5.0 + * @access public + * @abstract + * + * @param boolean $horz Flip along Horizontal Axis + * @param boolean $vert Flip along Vertical Axis + * @return boolean|WP_Error + */ + abstract public function flip( $horz, $vert ); + + /** + * Streams current image to browser. + * + * @since 3.5.0 + * @access public + * @abstract + * + * @param string $mime_type + * @return boolean|WP_Error + */ + abstract public function stream( $mime_type = null ); + + /** + * Gets dimensions of image. + * + * @since 3.5.0 + * @access public + * + * @return array {'width'=>int, 'height'=>int} + */ + public function get_size() { + return $this->size; + } + + /** + * Sets current image size. + * + * @since 3.5.0 + * @access protected + * + * @param int $width + * @param int $height + */ + protected function update_size( $width = null, $height = null ) { + $this->size = array( + 'width' => (int) $width, + 'height' => (int) $height + ); + return true; + } + + /** + * Sets Image Compression quality on a 1-100% scale. + * + * @since 3.5.0 + * @access public + * + * @param int $quality Compression Quality. Range: [1,100] + * @return boolean|WP_Error True if set successfully; WP_Error on failure. + */ + public function set_quality( $quality = null ) { + if ( $quality == null ) { + $quality = $this->quality; + } + + /** + * Filter the default image compression quality setting. + * + * @since 3.5.0 + * + * @param int $quality Quality level between 1 (low) and 100 (high). + * @param string $mime_type Image mime type. + */ + $quality = apply_filters( 'wp_editor_set_quality', $quality, $this->mime_type ); + + if ( 'image/jpeg' == $this->mime_type ) { + /** + * Filter the JPEG compression quality for backward-compatibility. + * + * The filter is evaluated under two contexts: 'image_resize', and 'edit_image', + * (when a JPEG image is saved to file). + * + * @since 2.5.0 + * + * @param int $quality Quality level between 0 (low) and 100 (high) of the JPEG. + * @param string $context Context of the filter. + */ + $quality = apply_filters( 'jpeg_quality', $quality, 'image_resize' ); + + // Allow 0, but squash to 1 due to identical images in GD, and for backwards compatibility. + if ( $quality == 0 ) { + $quality = 1; + } + } + + if ( ( $quality >= 1 ) && ( $quality <= 100 ) ){ + $this->quality = $quality; + return true; + } else { + return new WP_Error( 'invalid_image_quality', __('Attempted to set image quality outside of the range [1,100].') ); + } + } + + /** + * Returns preferred mime-type and extension based on provided + * file's extension and mime, or current file's extension and mime. + * + * Will default to $this->default_mime_type if requested is not supported. + * + * Provides corrected filename only if filename is provided. + * + * @since 3.5.0 + * @access protected + * + * @param string $filename + * @param string $mime_type + * @return array { filename|null, extension, mime-type } + */ + protected function get_output_format( $filename = null, $mime_type = null ) { + $new_ext = $file_ext = null; + $file_mime = null; + + // By default, assume specified type takes priority + if ( $mime_type ) { + $new_ext = $this->get_extension( $mime_type ); + } + + if ( $filename ) { + $file_ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) ); + $file_mime = $this->get_mime_type( $file_ext ); + } + else { + // If no file specified, grab editor's current extension and mime-type. + $file_ext = strtolower( pathinfo( $this->file, PATHINFO_EXTENSION ) ); + $file_mime = $this->mime_type; + } + + // Check to see if specified mime-type is the same as type implied by + // file extension. If so, prefer extension from file. + if ( ! $mime_type || ( $file_mime == $mime_type ) ) { + $mime_type = $file_mime; + $new_ext = $file_ext; + } + + // Double-check that the mime-type selected is supported by the editor. + // If not, choose a default instead. + if ( ! $this->supports_mime_type( $mime_type ) ) { + /** + * Filter default mime type prior to getting the file extension. + * + * @see wp_get_mime_types() + * + * @since 3.5.0 + * + * @param string $mime_type Mime type string. + */ + $mime_type = apply_filters( 'image_editor_default_mime_type', $this->default_mime_type ); + $new_ext = $this->get_extension( $mime_type ); + } + + if ( $filename ) { + $ext = ''; + $info = pathinfo( $filename ); + $dir = $info['dirname']; + + if( isset( $info['extension'] ) ) + $ext = $info['extension']; + + $filename = trailingslashit( $dir ) . wp_basename( $filename, ".$ext" ) . ".{$new_ext}"; + } + + return array( $filename, $new_ext, $mime_type ); + } + + /** + * Builds an output filename based on current file, and adding proper suffix + * + * @since 3.5.0 + * @access public + * + * @param string $suffix + * @param string $dest_path + * @param string $extension + * @return string filename + */ + public function generate_filename( $suffix = null, $dest_path = null, $extension = null ) { + // $suffix will be appended to the destination filename, just before the extension + if ( ! $suffix ) + $suffix = $this->get_suffix(); + + $info = pathinfo( $this->file ); + $dir = $info['dirname']; + $ext = $info['extension']; + + $name = wp_basename( $this->file, ".$ext" ); + $new_ext = strtolower( $extension ? $extension : $ext ); + + if ( ! is_null( $dest_path ) && $_dest_path = realpath( $dest_path ) ) + $dir = $_dest_path; + + return trailingslashit( $dir ) . "{$name}-{$suffix}.{$new_ext}"; + } + + /** + * Builds and returns proper suffix for file based on height and width. + * + * @since 3.5.0 + * @access public + * + * @return string suffix + */ + public function get_suffix() { + if ( ! $this->get_size() ) + return false; + + return "{$this->size['width']}x{$this->size['height']}"; + } + + /** + * Either calls editor's save function or handles file as a stream. + * + * @since 3.5.0 + * @access protected + * + * @param string|stream $filename + * @param callable $function + * @param array $arguments + * @return boolean + */ + protected function make_image( $filename, $function, $arguments ) { + if ( $stream = wp_is_stream( $filename ) ) { + ob_start(); + } else { + // The directory containing the original file may no longer exist when using a replication plugin. + wp_mkdir_p( dirname( $filename ) ); + } + + $result = call_user_func_array( $function, $arguments ); + + if ( $result && $stream ) { + $contents = ob_get_contents(); + + $fp = fopen( $filename, 'w' ); + + if ( ! $fp ) + return false; + + fwrite( $fp, $contents ); + fclose( $fp ); + } + + if ( $stream ) { + ob_end_clean(); + } + + return $result; + } + + /** + * Returns first matched mime-type from extension, + * as mapped from wp_get_mime_types() + * + * @since 3.5.0 + * @access protected + * + * @param string $extension + * @return string|boolean + */ + protected static function get_mime_type( $extension = null ) { + if ( ! $extension ) + return false; + + $mime_types = wp_get_mime_types(); + $extensions = array_keys( $mime_types ); + + foreach( $extensions as $_extension ) { + if ( preg_match( "/{$extension}/i", $_extension ) ) { + return $mime_types[$_extension]; + } + } + + return false; + } + + /** + * Returns first matched extension from Mime-type, + * as mapped from wp_get_mime_types() + * + * @since 3.5.0 + * @access protected + * + * @param string $mime_type + * @return string|boolean + */ + protected static function get_extension( $mime_type = null ) { + $extensions = explode( '|', array_search( $mime_type, wp_get_mime_types() ) ); + + if ( empty( $extensions[0] ) ) + return false; + + return $extensions[0]; + } +} + diff --git a/src/wp-includes/class-wp-theme.php b/src/wp-includes/class-wp-theme.php new file mode 100644 index 0000000..511699a --- /dev/null +++ b/src/wp-includes/class-wp-theme.php @@ -0,0 +1,1212 @@ +<?php +/** + * WP_Theme Class + * + * @package WordPress + * @subpackage Theme + */ + +final class WP_Theme implements ArrayAccess { + + /** + * Headers for style.css files. + * + * @static + * @access private + * @var array + */ + private static $file_headers = array( + 'Name' => 'Theme Name', + 'ThemeURI' => 'Theme URI', + 'Description' => 'Description', + 'Author' => 'Author', + 'AuthorURI' => 'Author URI', + 'Version' => 'Version', + 'Template' => 'Template', + 'Status' => 'Status', + 'Tags' => 'Tags', + 'TextDomain' => 'Text Domain', + 'DomainPath' => 'Domain Path', + ); + + /** + * Default themes. + * + * @static + * @access private + * @var array + */ + private static $default_themes = array( + 'classic' => 'WordPress Classic', + 'default' => 'WordPress Default', + 'twentyten' => 'Twenty Ten', + 'twentyeleven' => 'Twenty Eleven', + 'twentytwelve' => 'Twenty Twelve', + 'twentythirteen' => 'Twenty Thirteen', + 'twentyfourteen' => 'Twenty Fourteen', + ); + + /** + * Renamed theme tags. + */ + private static $tag_map = array( + 'fixed-width' => 'fixed-layout', + 'flexible-width' => 'fluid-layout', + ); + + /** + * Absolute path to the theme root, usually wp-content/themes + * + * @access private + * @var string + */ + private $theme_root; + + /** + * Header data from the theme's style.css file. + * + * @access private + * @var array + */ + private $headers = array(); + + /** + * Header data from the theme's style.css file after being sanitized. + * + * @access private + * @var array + */ + private $headers_sanitized; + + /** + * Header name from the theme's style.css after being translated. + * + * Cached due to sorting functions running over the translated name. + */ + private $name_translated; + + /** + * Errors encountered when initializing the theme. + * + * @access private + * @var WP_Error + */ + private $errors; + + /** + * The directory name of the theme's files, inside the theme root. + * + * In the case of a child theme, this is directory name of the child theme. + * Otherwise, 'stylesheet' is the same as 'template'. + * + * @access private + * @var string + */ + private $stylesheet; + + /** + * The directory name of the theme's files, inside the theme root. + * + * In the case of a child theme, this is the directory name of the parent theme. + * Otherwise, 'template' is the same as 'stylesheet'. + * + * @access private + * @var string + */ + private $template; + + /** + * A reference to the parent theme, in the case of a child theme. + * + * @access private + * @var WP_Theme + */ + private $parent; + + /** + * URL to the theme root, usually an absolute URL to wp-content/themes + * + * @access private + * var string + */ + private $theme_root_uri; + + /** + * Flag for whether the theme's textdomain is loaded. + * + * @access private + * @var bool + */ + private $textdomain_loaded; + + /** + * Stores an md5 hash of the theme root, to function as the cache key. + * + * @access private + * @var string + */ + private $cache_hash; + + /** + * Flag for whether the themes cache bucket should be persistently cached. + * + * Default is false. Can be set with the wp_cache_themes_persistently filter. + * + * @access private + * @var bool + */ + private static $persistently_cache; + + /** + * Expiration time for the themes cache bucket. + * + * By default the bucket is not cached, so this value is useless. + * + * @access private + * @var bool + */ + private static $cache_expiration = 1800; + + /** + * Constructor for WP_Theme. + * + * @param string $theme_dir Directory of the theme within the theme_root. + * @param string $theme_root Theme root. + * @param WP_Error|null $_child If this theme is a parent theme, the child may be passed for validation purposes. + */ + public function __construct( $theme_dir, $theme_root, $_child = null ) { + global $wp_theme_directories; + + // Initialize caching on first run. + if ( ! isset( self::$persistently_cache ) ) { + self::$persistently_cache = apply_filters( 'wp_cache_themes_persistently', false, 'WP_Theme' ); + if ( self::$persistently_cache ) { + wp_cache_add_global_groups( 'themes' ); + if ( is_int( self::$persistently_cache ) ) + self::$cache_expiration = self::$persistently_cache; + } else { + wp_cache_add_non_persistent_groups( 'themes' ); + } + } + + $this->theme_root = $theme_root; + $this->stylesheet = $theme_dir; + + // Correct a situation where the theme is 'some-directory/some-theme' but 'some-directory' was passed in as part of the theme root instead. + if ( ! in_array( $theme_root, (array) $wp_theme_directories ) && in_array( dirname( $theme_root ), (array) $wp_theme_directories ) ) { + $this->stylesheet = basename( $this->theme_root ) . '/' . $this->stylesheet; + $this->theme_root = dirname( $theme_root ); + } + + $this->cache_hash = md5( $this->theme_root . '/' . $this->stylesheet ); + $theme_file = $this->stylesheet . '/style.css'; + + $cache = $this->cache_get( 'theme' ); + + if ( is_array( $cache ) ) { + foreach ( array( 'errors', 'headers', 'template' ) as $key ) { + if ( isset( $cache[ $key ] ) ) + $this->$key = $cache[ $key ]; + } + if ( $this->errors ) + return; + if ( isset( $cache['theme_root_template'] ) ) + $theme_root_template = $cache['theme_root_template']; + } elseif ( ! file_exists( $this->theme_root . '/' . $theme_file ) ) { + $this->headers['Name'] = $this->stylesheet; + if ( ! file_exists( $this->theme_root . '/' . $this->stylesheet ) ) + $this->errors = new WP_Error( 'theme_not_found', sprintf( __( 'The theme directory "%s" does not exist.' ), $this->stylesheet ) ); + else + $this->errors = new WP_Error( 'theme_no_stylesheet', __( 'Stylesheet is missing.' ) ); + $this->template = $this->stylesheet; + $this->cache_add( 'theme', array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ) ); + if ( ! file_exists( $this->theme_root ) ) // Don't cache this one. + $this->errors->add( 'theme_root_missing', __( 'ERROR: The themes directory is either empty or doesn’t exist. Please check your installation.' ) ); + return; + } elseif ( ! is_readable( $this->theme_root . '/' . $theme_file ) ) { + $this->headers['Name'] = $this->stylesheet; + $this->errors = new WP_Error( 'theme_stylesheet_not_readable', __( 'Stylesheet is not readable.' ) ); + $this->template = $this->stylesheet; + $this->cache_add( 'theme', array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ) ); + return; + } else { + $this->headers = get_file_data( $this->theme_root . '/' . $theme_file, self::$file_headers, 'theme' ); + // Default themes always trump their pretenders. + // Properly identify default themes that are inside a directory within wp-content/themes. + if ( $default_theme_slug = array_search( $this->headers['Name'], self::$default_themes ) ) { + if ( basename( $this->stylesheet ) != $default_theme_slug ) + $this->headers['Name'] .= '/' . $this->stylesheet; + } + } + + // (If template is set from cache [and there are no errors], we know it's good.) + if ( ! $this->template && ! ( $this->template = $this->headers['Template'] ) ) { + $this->template = $this->stylesheet; + if ( ! file_exists( $this->theme_root . '/' . $this->stylesheet . '/index.php' ) ) { + $this->errors = new WP_Error( 'theme_no_index', __( 'Template is missing.' ) ); + $this->cache_add( 'theme', array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ) ); + return; + } + } + + // If we got our data from cache, we can assume that 'template' is pointing to the right place. + if ( ! is_array( $cache ) && $this->template != $this->stylesheet && ! file_exists( $this->theme_root . '/' . $this->template . '/index.php' ) ) { + // If we're in a directory of themes inside /themes, look for the parent nearby. + // wp-content/themes/directory-of-themes/* + $parent_dir = dirname( $this->stylesheet ); + if ( '.' != $parent_dir && file_exists( $this->theme_root . '/' . $parent_dir . '/' . $this->template . '/index.php' ) ) { + $this->template = $parent_dir . '/' . $this->template; + } elseif ( ( $directories = search_theme_directories() ) && isset( $directories[ $this->template ] ) ) { + // Look for the template in the search_theme_directories() results, in case it is in another theme root. + // We don't look into directories of themes, just the theme root. + $theme_root_template = $directories[ $this->template ]['theme_root']; + } else { + // Parent theme is missing. + $this->errors = new WP_Error( 'theme_no_parent', sprintf( __( 'The parent theme is missing. Please install the "%s" parent theme.' ), $this->template ) ); + $this->cache_add( 'theme', array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ) ); + $this->parent = new WP_Theme( $this->template, $this->theme_root, $this ); + return; + } + } + + // Set the parent, if we're a child theme. + if ( $this->template != $this->stylesheet ) { + // If we are a parent, then there is a problem. Only two generations allowed! Cancel things out. + if ( is_a( $_child, 'WP_Theme' ) && $_child->template == $this->stylesheet ) { + $_child->parent = null; + $_child->errors = new WP_Error( 'theme_parent_invalid', sprintf( __( 'The "%s" theme is not a valid parent theme.' ), $_child->template ) ); + $_child->cache_add( 'theme', array( 'headers' => $_child->headers, 'errors' => $_child->errors, 'stylesheet' => $_child->stylesheet, 'template' => $_child->template ) ); + // The two themes actually reference each other with the Template header. + if ( $_child->stylesheet == $this->template ) { + $this->errors = new WP_Error( 'theme_parent_invalid', sprintf( __( 'The "%s" theme is not a valid parent theme.' ), $this->template ) ); + $this->cache_add( 'theme', array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ) ); + } + return; + } + // Set the parent. Pass the current instance so we can do the crazy checks above and assess errors. + $this->parent = new WP_Theme( $this->template, isset( $theme_root_template ) ? $theme_root_template : $this->theme_root, $this ); + } + + // We're good. If we didn't retrieve from cache, set it. + if ( ! is_array( $cache ) ) { + $cache = array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ); + // If the parent theme is in another root, we'll want to cache this. Avoids an entire branch of filesystem calls above. + if ( isset( $theme_root_template ) ) + $cache['theme_root_template'] = $theme_root_template; + $this->cache_add( 'theme', $cache ); + } + } + + /** + * When converting the object to a string, the theme name is returned. + * + * @return string Theme name, ready for display (translated) + */ + public function __toString() { + return (string) $this->display('Name'); + } + + /** + * __isset() magic method for properties formerly returned by current_theme_info() + */ + public function __isset( $offset ) { + static $properties = array( + 'name', 'title', 'version', 'parent_theme', 'template_dir', 'stylesheet_dir', 'template', 'stylesheet', + 'screenshot', 'description', 'author', 'tags', 'theme_root', 'theme_root_uri', + ); + + return in_array( $offset, $properties ); + } + + /** + * __get() magic method for properties formerly returned by current_theme_info() + */ + public function __get( $offset ) { + switch ( $offset ) { + case 'name' : + case 'title' : + return $this->get('Name'); + case 'version' : + return $this->get('Version'); + case 'parent_theme' : + return $this->parent() ? $this->parent()->get('Name') : ''; + case 'template_dir' : + return $this->get_template_directory(); + case 'stylesheet_dir' : + return $this->get_stylesheet_directory(); + case 'template' : + return $this->get_template(); + case 'stylesheet' : + return $this->get_stylesheet(); + case 'screenshot' : + return $this->get_screenshot( 'relative' ); + // 'author' and 'description' did not previously return translated data. + case 'description' : + return $this->display('Description'); + case 'author' : + return $this->display('Author'); + case 'tags' : + return $this->get( 'Tags' ); + case 'theme_root' : + return $this->get_theme_root(); + case 'theme_root_uri' : + return $this->get_theme_root_uri(); + // For cases where the array was converted to an object. + default : + return $this->offsetGet( $offset ); + } + } + + /** + * Method to implement ArrayAccess for keys formerly returned by get_themes() + */ + public function offsetSet( $offset, $value ) {} + + /** + * Method to implement ArrayAccess for keys formerly returned by get_themes() + */ + public function offsetUnset( $offset ) {} + + /** + * Method to implement ArrayAccess for keys formerly returned by get_themes() + */ + public function offsetExists( $offset ) { + static $keys = array( + 'Name', 'Version', 'Status', 'Title', 'Author', 'Author Name', 'Author URI', 'Description', + 'Template', 'Stylesheet', 'Template Files', 'Stylesheet Files', 'Template Dir', 'Stylesheet Dir', + 'Screenshot', 'Tags', 'Theme Root', 'Theme Root URI', 'Parent Theme', + ); + + return in_array( $offset, $keys ); + } + + /** + * Method to implement ArrayAccess for keys formerly returned by get_themes(). + * + * Author, Author Name, Author URI, and Description did not previously return + * translated data. We are doing so now as it is safe to do. However, as + * Name and Title could have been used as the key for get_themes(), both remain + * untranslated for back compatibility. This means that ['Name'] is not ideal, + * and care should be taken to use $theme->display('Name') to get a properly + * translated header. + */ + public function offsetGet( $offset ) { + switch ( $offset ) { + case 'Name' : + case 'Title' : + // See note above about using translated data. get() is not ideal. + // It is only for backwards compatibility. Use display(). + return $this->get('Name'); + case 'Author' : + return $this->display( 'Author'); + case 'Author Name' : + return $this->display( 'Author', false); + case 'Author URI' : + return $this->display('AuthorURI'); + case 'Description' : + return $this->display( 'Description'); + case 'Version' : + case 'Status' : + return $this->get( $offset ); + case 'Template' : + return $this->get_template(); + case 'Stylesheet' : + return $this->get_stylesheet(); + case 'Template Files' : + return $this->get_files( 'php', 1, true ); + case 'Stylesheet Files' : + return $this->get_files( 'css', 0, false ); + case 'Template Dir' : + return $this->get_template_directory(); + case 'Stylesheet Dir' : + return $this->get_stylesheet_directory(); + case 'Screenshot' : + return $this->get_screenshot( 'relative' ); + case 'Tags' : + return $this->get('Tags'); + case 'Theme Root' : + return $this->get_theme_root(); + case 'Theme Root URI' : + return $this->get_theme_root_uri(); + case 'Parent Theme' : + return $this->parent() ? $this->parent()->get('Name') : ''; + default : + return null; + } + } + + /** + * Returns errors property. + * + * @since 3.4.0 + * @access public + * + * @return WP_Error|bool WP_Error if there are errors, or false. + */ + public function errors() { + return is_wp_error( $this->errors ) ? $this->errors : false; + } + + /** + * Whether the theme exists. + * + * A theme with errors exists. A theme with the error of 'theme_not_found', + * meaning that the theme's directory was not found, does not exist. + * + * @since 3.4.0 + * @access public + * + * @return bool Whether the theme exists. + */ + public function exists() { + return ! ( $this->errors() && in_array( 'theme_not_found', $this->errors()->get_error_codes() ) ); + } + + /** + * Returns reference to the parent theme. + * + * @since 3.4.0 + * @access public + * + * @return WP_Theme|bool Parent theme, or false if the current theme is not a child theme. + */ + public function parent() { + return isset( $this->parent ) ? $this->parent : false; + } + + /** + * Adds theme data to cache. + * + * Cache entries keyed by the theme and the type of data. + * + * @access private + * @since 3.4.0 + * + * @param string $key Type of data to store (theme, screenshot, headers, page_templates) + * @param string $data Data to store + * @return bool Return value from wp_cache_add() + */ + private function cache_add( $key, $data ) { + return wp_cache_add( $key . '-' . $this->cache_hash, $data, 'themes', self::$cache_expiration ); + } + + /** + * Gets theme data from cache. + * + * Cache entries are keyed by the theme and the type of data. + * + * @access private + * @since 3.4.0 + * + * @param string $key Type of data to retrieve (theme, screenshot, headers, page_templates) + * @return mixed Retrieved data + */ + private function cache_get( $key ) { + return wp_cache_get( $key . '-' . $this->cache_hash, 'themes' ); + } + + /** + * Clears the cache for the theme. + * + * @access public + * @since 3.4.0 + */ + public function cache_delete() { + foreach ( array( 'theme', 'screenshot', 'headers', 'page_templates' ) as $key ) + wp_cache_delete( $key . '-' . $this->cache_hash, 'themes' ); + $this->template = $this->textdomain_loaded = $this->theme_root_uri = $this->parent = $this->errors = $this->headers_sanitized = $this->name_translated = null; + $this->headers = array(); + $this->__construct( $this->stylesheet, $this->theme_root ); + } + + /** + * Get a raw, unformatted theme header. + * + * The header is sanitized, but is not translated, and is not marked up for display. + * To get a theme header for display, use the display() method. + * + * Use the get_template() method, not the 'Template' header, for finding the template. + * The 'Template' header is only good for what was written in the style.css, while + * get_template() takes into account where WordPress actually located the theme and + * whether it is actually valid. + * + * @access public + * @since 3.4.0 + * + * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags. + * @return string String on success, false on failure. + */ + public function get( $header ) { + if ( ! isset( $this->headers[ $header ] ) ) + return false; + + if ( ! isset( $this->headers_sanitized ) ) { + $this->headers_sanitized = $this->cache_get( 'headers' ); + if ( ! is_array( $this->headers_sanitized ) ) + $this->headers_sanitized = array(); + } + + if ( isset( $this->headers_sanitized[ $header ] ) ) + return $this->headers_sanitized[ $header ]; + + // If themes are a persistent group, sanitize everything and cache it. One cache add is better than many cache sets. + if ( self::$persistently_cache ) { + foreach ( array_keys( $this->headers ) as $_header ) + $this->headers_sanitized[ $_header ] = $this->sanitize_header( $_header, $this->headers[ $_header ] ); + $this->cache_add( 'headers', $this->headers_sanitized ); + } else { + $this->headers_sanitized[ $header ] = $this->sanitize_header( $header, $this->headers[ $header ] ); + } + + return $this->headers_sanitized[ $header ]; + } + + /** + * Gets a theme header, formatted and translated for display. + * + * @access public + * @since 3.4.0 + * + * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags. + * @param bool $markup Optional. Whether to mark up the header. Defaults to true. + * @param bool $translate Optional. Whether to translate the header. Defaults to true. + * @return string Processed header, false on failure. + */ + public function display( $header, $markup = true, $translate = true ) { + $value = $this->get( $header ); + + if ( $translate && ( empty( $value ) || ! $this->load_textdomain() ) ) + $translate = false; + + if ( $translate ) + $value = $this->translate_header( $header, $value ); + + if ( $markup ) + $value = $this->markup_header( $header, $value, $translate ); + + return $value; + } + + /** + * Sanitize a theme header. + * + * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags. + * @param string $value Value to sanitize. + */ + private function sanitize_header( $header, $value ) { + switch ( $header ) { + case 'Status' : + if ( ! $value ) { + $value = 'publish'; + break; + } + // Fall through otherwise. + case 'Name' : + static $header_tags = array( + 'abbr' => array( 'title' => true ), + 'acronym' => array( 'title' => true ), + 'code' => true, + 'em' => true, + 'strong' => true, + ); + $value = wp_kses( $value, $header_tags ); + break; + case 'Author' : + // There shouldn't be anchor tags in Author, but some themes like to be challenging. + case 'Description' : + static $header_tags_with_a = array( + 'a' => array( 'href' => true, 'title' => true ), + 'abbr' => array( 'title' => true ), + 'acronym' => array( 'title' => true ), + 'code' => true, + 'em' => true, + 'strong' => true, + ); + $value = wp_kses( $value, $header_tags_with_a ); + break; + case 'ThemeURI' : + case 'AuthorURI' : + $value = esc_url_raw( $value ); + break; + case 'Tags' : + $value = array_filter( array_map( 'trim', explode( ',', strip_tags( $value ) ) ) ); + break; + } + + return $value; + } + + /** + * Mark up a theme header. + * + * @access private + * @since 3.4.0 + * + * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags. + * @param string $value Value to mark up. + * @param string $translate Whether the header has been translated. + * @return string Value, marked up. + */ + private function markup_header( $header, $value, $translate ) { + switch ( $header ) { + case 'Name' : + if ( empty( $value ) ) + $value = $this->get_stylesheet(); + break; + case 'Description' : + $value = wptexturize( $value ); + break; + case 'Author' : + if ( $this->get('AuthorURI') ) { + static $attr = null; + if ( ! isset( $attr ) ) + $attr = esc_attr__( 'Visit author homepage' ); + $value = sprintf( '<a href="%1$s" title="%2$s">%3$s</a>', $this->display( 'AuthorURI', true, $translate ), $attr, $value ); + } elseif ( ! $value ) { + $value = __( 'Anonymous' ); + } + break; + case 'Tags' : + static $comma = null; + if ( ! isset( $comma ) ) { + /* translators: used between list items, there is a space after the comma */ + $comma = __( ', ' ); + } + $value = implode( $comma, $value ); + break; + case 'ThemeURI' : + case 'AuthorURI' : + $value = esc_url( $value ); + break; + } + + return $value; + } + + /** + * Translate a theme header. + * + * @access private + * @since 3.4.0 + * + * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags. + * @param string $value Value to translate. + * @return string Translated value. + */ + private function translate_header( $header, $value ) { + switch ( $header ) { + case 'Name' : + // Cached for sorting reasons. + if ( isset( $this->name_translated ) ) + return $this->name_translated; + $this->name_translated = translate( $value, $this->get('TextDomain' ) ); + return $this->name_translated; + case 'Tags' : + if ( empty( $value ) || ! function_exists( 'get_theme_feature_list' ) ) + return $value; + + static $tags_list; + if ( ! isset( $tags_list ) ) { + $tags_list = array(); + $feature_list = get_theme_feature_list( false ); // No API + foreach ( $feature_list as $tags ) + $tags_list += $tags; + } + + foreach ( $value as &$tag ) { + if ( isset( $tags_list[ $tag ] ) ) { + $tag = $tags_list[ $tag ]; + } elseif ( isset( self::$tag_map[ $tag ] ) ) { + $tag = $tags_list[ self::$tag_map[ $tag ] ]; + } + } + + return $value; + break; + default : + $value = translate( $value, $this->get('TextDomain') ); + } + return $value; + } + + /** + * The directory name of the theme's "stylesheet" files, inside the theme root. + * + * In the case of a child theme, this is directory name of the child theme. + * Otherwise, get_stylesheet() is the same as get_template(). + * + * @since 3.4.0 + * @access public + * + * @return string Stylesheet + */ + public function get_stylesheet() { + return $this->stylesheet; + } + + /** + * The directory name of the theme's "template" files, inside the theme root. + * + * In the case of a child theme, this is the directory name of the parent theme. + * Otherwise, the get_template() is the same as get_stylesheet(). + * + * @since 3.4.0 + * @access public + * + * @return string Template + */ + public function get_template() { + return $this->template; + } + + /** + * Returns the absolute path to the directory of a theme's "stylesheet" files. + * + * In the case of a child theme, this is the absolute path to the directory + * of the child theme's files. + * + * @since 3.4.0 + * @access public + * + * @return string Absolute path of the stylesheet directory. + */ + public function get_stylesheet_directory() { + if ( $this->errors() && in_array( 'theme_root_missing', $this->errors()->get_error_codes() ) ) + return ''; + + return $this->theme_root . '/' . $this->stylesheet; + } + + /** + * Returns the absolute path to the directory of a theme's "template" files. + * + * In the case of a child theme, this is the absolute path to the directory + * of the parent theme's files. + * + * @since 3.4.0 + * @access public + * + * @return string Absolute path of the template directory. + */ + public function get_template_directory() { + if ( $this->parent() ) + $theme_root = $this->parent()->theme_root; + else + $theme_root = $this->theme_root; + + return $theme_root . '/' . $this->template; + } + + /** + * Returns the URL to the directory of a theme's "stylesheet" files. + * + * In the case of a child theme, this is the URL to the directory of the + * child theme's files. + * + * @since 3.4.0 + * @access public + * + * @return string URL to the stylesheet directory. + */ + public function get_stylesheet_directory_uri() { + return $this->get_theme_root_uri() . '/' . str_replace( '%2F', '/', rawurlencode( $this->stylesheet ) ); + } + + /** + * Returns the URL to the directory of a theme's "template" files. + * + * In the case of a child theme, this is the URL to the directory of the + * parent theme's files. + * + * @since 3.4.0 + * @access public + * + * @return string URL to the template directory. + */ + public function get_template_directory_uri() { + if ( $this->parent() ) + $theme_root_uri = $this->parent()->get_theme_root_uri(); + else + $theme_root_uri = $this->get_theme_root_uri(); + + return $theme_root_uri . '/' . str_replace( '%2F', '/', rawurlencode( $this->template ) ); + } + + /** + * The absolute path to the directory of the theme root. + * + * This is typically the absolute path to wp-content/themes. + * + * @since 3.4.0 + * @access public + * + * @return string Theme root. + */ + public function get_theme_root() { + return $this->theme_root; + } + + /** + * Returns the URL to the directory of the theme root. + * + * This is typically the absolute URL to wp-content/themes. This forms the basis + * for all other URLs returned by WP_Theme, so we pass it to the public function + * get_theme_root_uri() and allow it to run the theme_root_uri filter. + * + * @uses get_theme_root_uri() + * + * @since 3.4.0 + * @access public + * + * @return string Theme root URI. + */ + public function get_theme_root_uri() { + if ( ! isset( $this->theme_root_uri ) ) + $this->theme_root_uri = get_theme_root_uri( $this->stylesheet, $this->theme_root ); + return $this->theme_root_uri; + } + + /** + * Returns the main screenshot file for the theme. + * + * The main screenshot is called screenshot.png. gif and jpg extensions are also allowed. + * + * Screenshots for a theme must be in the stylesheet directory. (In the case of child + * themes, parent theme screenshots are not inherited.) + * + * @since 3.4.0 + * @access public + * + * @param string $uri Type of URL to return, either 'relative' or an absolute URI. Defaults to absolute URI. + * @return mixed Screenshot file. False if the theme does not have a screenshot. + */ + public function get_screenshot( $uri = 'uri' ) { + $screenshot = $this->cache_get( 'screenshot' ); + if ( $screenshot ) { + if ( 'relative' == $uri ) + return $screenshot; + return $this->get_stylesheet_directory_uri() . '/' . $screenshot; + } elseif ( 0 === $screenshot ) { + return false; + } + + foreach ( array( 'png', 'gif', 'jpg', 'jpeg' ) as $ext ) { + if ( file_exists( $this->get_stylesheet_directory() . "/screenshot.$ext" ) ) { + $this->cache_add( 'screenshot', 'screenshot.' . $ext ); + if ( 'relative' == $uri ) + return 'screenshot.' . $ext; + return $this->get_stylesheet_directory_uri() . '/' . 'screenshot.' . $ext; + } + } + + $this->cache_add( 'screenshot', 0 ); + return false; + } + + /** + * Return files in the theme's directory. + * + * @since 3.4.0 + * @access public + * + * @param mixed $type Optional. Array of extensions to return. Defaults to all files (null). + * @param int $depth Optional. How deep to search for files. Defaults to a flat scan (0 depth). -1 depth is infinite. + * @param bool $search_parent Optional. Whether to return parent files. Defaults to false. + * @return array Array of files, keyed by the path to the file relative to the theme's directory, with the values + * being absolute paths. + */ + public function get_files( $type = null, $depth = 0, $search_parent = false ) { + $files = (array) self::scandir( $this->get_stylesheet_directory(), $type, $depth ); + + if ( $search_parent && $this->parent() ) + $files += (array) self::scandir( $this->get_template_directory(), $type, $depth ); + + return $files; + } + + /** + * Returns the theme's page templates. + * + * @since 3.4.0 + * @access public + * + * @return array Array of page templates, keyed by filename, with the value of the translated header name. + */ + public function get_page_templates() { + // If you screw up your current theme and we invalidate your parent, most things still work. Let it slide. + if ( $this->errors() && $this->errors()->get_error_codes() !== array( 'theme_parent_invalid' ) ) + return array(); + + $page_templates = $this->cache_get( 'page_templates' ); + + if ( ! is_array( $page_templates ) ) { + $page_templates = array(); + + $files = (array) $this->get_files( 'php', 1 ); + + foreach ( $files as $file => $full_path ) { + if ( ! preg_match( '|Template Name:(.*)$|mi', file_get_contents( $full_path ), $header ) ) + continue; + $page_templates[ $file ] = _cleanup_header_comment( $header[1] ); + } + + $this->cache_add( 'page_templates', $page_templates ); + } + + if ( $this->load_textdomain() ) { + foreach ( $page_templates as &$page_template ) { + $page_template = $this->translate_header( 'Template Name', $page_template ); + } + } + + if ( $this->parent() ) + $page_templates += $this->parent()->get_page_templates(); + + return $page_templates; + } + + /** + * Scans a directory for files of a certain extension. + * + * @since 3.4.0 + * @access private + * + * @param string $path Absolute path to search. + * @param mixed Array of extensions to find, string of a single extension, or null for all extensions. + * @param int $depth How deep to search for files. Optional, defaults to a flat scan (0 depth). -1 depth is infinite. + * @param string $relative_path The basename of the absolute path. Used to control the returned path + * for the found files, particularly when this function recurses to lower depths. + */ + private static function scandir( $path, $extensions = null, $depth = 0, $relative_path = '' ) { + if ( ! is_dir( $path ) ) + return false; + + if ( $extensions ) { + $extensions = (array) $extensions; + $_extensions = implode( '|', $extensions ); + } + + $relative_path = trailingslashit( $relative_path ); + if ( '/' == $relative_path ) + $relative_path = ''; + + $results = scandir( $path ); + $files = array(); + + foreach ( $results as $result ) { + if ( '.' == $result[0] ) + continue; + if ( is_dir( $path . '/' . $result ) ) { + if ( ! $depth || 'CVS' == $result ) + continue; + $found = self::scandir( $path . '/' . $result, $extensions, $depth - 1 , $relative_path . $result ); + $files = array_merge_recursive( $files, $found ); + } elseif ( ! $extensions || preg_match( '~\.(' . $_extensions . ')$~', $result ) ) { + $files[ $relative_path . $result ] = $path . '/' . $result; + } + } + + return $files; + } + + /** + * Loads the theme's textdomain. + * + * Translation files are not inherited from the parent theme. Todo: if this fails for the + * child theme, it should probably try to load the parent theme's translations. + * + * @since 3.4.0 + * @access public + * + * @return True if the textdomain was successfully loaded or has already been loaded. False if + * no textdomain was specified in the file headers, or if the domain could not be loaded. + */ + public function load_textdomain() { + if ( isset( $this->textdomain_loaded ) ) + return $this->textdomain_loaded; + + $textdomain = $this->get('TextDomain'); + if ( ! $textdomain ) { + $this->textdomain_loaded = false; + return false; + } + + if ( is_textdomain_loaded( $textdomain ) ) { + $this->textdomain_loaded = true; + return true; + } + + $path = $this->get_stylesheet_directory(); + if ( $domainpath = $this->get('DomainPath') ) + $path .= $domainpath; + else + $path .= '/languages'; + + $this->textdomain_loaded = load_theme_textdomain( $textdomain, $path ); + return $this->textdomain_loaded; + } + + /** + * Whether the theme is allowed (multisite only). + * + * @since 3.4.0 + * @access public + * + * @param string $check Optional. Whether to check only the 'network'-wide settings, the 'site' + * settings, or 'both'. Defaults to 'both'. + * @param int $blog_id Optional. Ignored if only network-wide settings are checked. Defaults to current blog. + * @return bool Whether the theme is allowed for the network. Returns true in single-site. + */ + public function is_allowed( $check = 'both', $blog_id = null ) { + if ( ! is_multisite() ) + return true; + + if ( 'both' == $check || 'network' == $check ) { + $allowed = self::get_allowed_on_network(); + if ( ! empty( $allowed[ $this->get_stylesheet() ] ) ) + return true; + } + + if ( 'both' == $check || 'site' == $check ) { + $allowed = self::get_allowed_on_site( $blog_id ); + if ( ! empty( $allowed[ $this->get_stylesheet() ] ) ) + return true; + } + + return false; + } + + /** + * Returns array of stylesheet names of themes allowed on the site or network. + * + * @since 3.4.0 + * @access public + * + * @param int $blog_id Optional. Defaults to current blog. + * @return array Array of stylesheet names. + */ + public static function get_allowed( $blog_id = null ) { + $network = (array) apply_filters( 'allowed_themes', self::get_allowed_on_network() ); + return $network + self::get_allowed_on_site( $blog_id ); + } + + /** + * Returns array of stylesheet names of themes allowed on the network. + * + * @since 3.4.0 + * @access public + * + * @return array Array of stylesheet names. + */ + public static function get_allowed_on_network() { + static $allowed_themes; + if ( ! isset( $allowed_themes ) ) + $allowed_themes = (array) get_site_option( 'allowedthemes' ); + return $allowed_themes; + } + + /** + * Returns array of stylesheet names of themes allowed on the site. + * + * @since 3.4.0 + * @access public + * + * @param int $blog_id Optional. Defaults to current blog. + * @return array Array of stylesheet names. + */ + public static function get_allowed_on_site( $blog_id = null ) { + static $allowed_themes = array(); + + if ( ! $blog_id || ! is_multisite() ) + $blog_id = get_current_blog_id(); + + if ( isset( $allowed_themes[ $blog_id ] ) ) + return $allowed_themes[ $blog_id ]; + + $current = $blog_id == get_current_blog_id(); + + if ( $current ) { + $allowed_themes[ $blog_id ] = get_option( 'allowedthemes' ); + } else { + switch_to_blog( $blog_id ); + $allowed_themes[ $blog_id ] = get_option( 'allowedthemes' ); + restore_current_blog(); + } + + // This is all super old MU back compat joy. + // 'allowedthemes' keys things by stylesheet. 'allowed_themes' keyed things by name. + if ( false === $allowed_themes[ $blog_id ] ) { + if ( $current ) { + $allowed_themes[ $blog_id ] = get_option( 'allowed_themes' ); + } else { + switch_to_blog( $blog_id ); + $allowed_themes[ $blog_id ] = get_option( 'allowed_themes' ); + restore_current_blog(); + } + + if ( ! is_array( $allowed_themes[ $blog_id ] ) || empty( $allowed_themes[ $blog_id ] ) ) { + $allowed_themes[ $blog_id ] = array(); + } else { + $converted = array(); + $themes = wp_get_themes(); + foreach ( $themes as $stylesheet => $theme_data ) { + if ( isset( $allowed_themes[ $blog_id ][ $theme_data->get('Name') ] ) ) + $converted[ $stylesheet ] = true; + } + $allowed_themes[ $blog_id ] = $converted; + } + // Set the option so we never have to go through this pain again. + if ( is_admin() && $allowed_themes[ $blog_id ] ) { + if ( $current ) { + update_option( 'allowedthemes', $allowed_themes[ $blog_id ] ); + delete_option( 'allowed_themes' ); + } else { + switch_to_blog( $blog_id ); + update_option( 'allowedthemes', $allowed_themes[ $blog_id ] ); + delete_option( 'allowed_themes' ); + restore_current_blog(); + } + } + } + + return (array) $allowed_themes[ $blog_id ]; + } + + /** + * Sort themes by name. + * + * @since 3.4.0 + * @access public + */ + public static function sort_by_name( &$themes ) { + if ( 0 === strpos( get_locale(), 'en_' ) ) { + uasort( $themes, array( 'WP_Theme', '_name_sort' ) ); + } else { + uasort( $themes, array( 'WP_Theme', '_name_sort_i18n' ) ); + } + } + + /** + * Callback function for usort() to naturally sort themes by name. + * + * Accesses the Name header directly from the class for maximum speed. + * Would choke on HTML but we don't care enough to slow it down with strip_tags(). + * + * @since 3.4.0 + * @access private + */ + private static function _name_sort( $a, $b ) { + return strnatcasecmp( $a->headers['Name'], $b->headers['Name'] ); + } + + /** + * Name sort (with translation). + * + * @since 3.4.0 + * @access private + */ + private static function _name_sort_i18n( $a, $b ) { + // Don't mark up; Do translate. + return strnatcasecmp( $a->display( 'Name', false, true ), $b->display( 'Name', false, true ) ); + } +} diff --git a/src/wp-includes/class-wp-walker.php b/src/wp-includes/class-wp-walker.php new file mode 100644 index 0000000..547defe --- /dev/null +++ b/src/wp-includes/class-wp-walker.php @@ -0,0 +1,408 @@ +<?php +/** + * A class for displaying various tree-like structures. + * + * Extend the Walker class to use it, see examples below. Child classes + * do not need to implement all of the abstract methods in the class. The child + * only needs to implement the methods that are needed. + * + * @since 2.1.0 + * + * @package WordPress + * @abstract + */ +class Walker { + /** + * What the class handles. + * + * @since 2.1.0 + * @var string + * @access public + */ + var $tree_type; + + /** + * DB fields to use. + * + * @since 2.1.0 + * @var array + * @access protected + */ + var $db_fields; + + /** + * Max number of pages walked by the paged walker + * + * @since 2.7.0 + * @var int + * @access protected + */ + var $max_pages = 1; + + /** + * Starts the list before the elements are added. + * + * The $args parameter holds additional values that may be used with the child + * class methods. This method is called at the start of the output list. + * + * @since 2.1.0 + * @abstract + * + * @param string $output Passed by reference. Used to append additional content. + * @param int $depth Depth of the item. + * @param array $args An array of additional arguments. + */ + function start_lvl( &$output, $depth = 0, $args = array() ) {} + + /** + * Ends the list of after the elements are added. + * + * The $args parameter holds additional values that may be used with the child + * class methods. This method finishes the list at the end of output of the elements. + * + * @since 2.1.0 + * @abstract + * + * @param string $output Passed by reference. Used to append additional content. + * @param int $depth Depth of the item. + * @param array $args An array of additional arguments. + */ + function end_lvl( &$output, $depth = 0, $args = array() ) {} + + /** + * Start the element output. + * + * The $args parameter holds additional values that may be used with the child + * class methods. Includes the element output also. + * + * @since 2.1.0 + * @abstract + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $object The data object. + * @param int $depth Depth of the item. + * @param array $args An array of additional arguments. + * @param int $current_object_id ID of the current item. + */ + function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) {} + + /** + * Ends the element output, if needed. + * + * The $args parameter holds additional values that may be used with the child class methods. + * + * @since 2.1.0 + * @abstract + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $object The data object. + * @param int $depth Depth of the item. + * @param array $args An array of additional arguments. + */ + function end_el( &$output, $object, $depth = 0, $args = array() ) {} + + /** + * Traverse elements to create list from elements. + * + * Display one element if the element doesn't have any children otherwise, + * display the element and its children. Will only traverse up to the max + * depth and no ignore elements under that depth. It is possible to set the + * max depth to include all depths, see walk() method. + * + * This method should not be called directly, use the walk() method instead. + * + * @since 2.5.0 + * + * @param object $element Data object. + * @param array $children_elements List of elements to continue traversing. + * @param int $max_depth Max depth to traverse. + * @param int $depth Depth of current element. + * @param array $args An array of arguments. + * @param string $output Passed by reference. Used to append additional content. + * @return null Null on failure with no changes to parameters. + */ + function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) { + + if ( !$element ) + return; + + $id_field = $this->db_fields['id']; + + //display this element + if ( isset( $args[0] ) && is_array( $args[0] ) ) + $args[0]['has_children'] = ! empty( $children_elements[$element->$id_field] ); + $cb_args = array_merge( array(&$output, $element, $depth), $args); + call_user_func_array(array($this, 'start_el'), $cb_args); + + $id = $element->$id_field; + + // descend only when the depth is right and there are childrens for this element + if ( ($max_depth == 0 || $max_depth > $depth+1 ) && isset( $children_elements[$id]) ) { + + foreach( $children_elements[ $id ] as $child ){ + + if ( !isset($newlevel) ) { + $newlevel = true; + //start the child delimiter + $cb_args = array_merge( array(&$output, $depth), $args); + call_user_func_array(array($this, 'start_lvl'), $cb_args); + } + $this->display_element( $child, $children_elements, $max_depth, $depth + 1, $args, $output ); + } + unset( $children_elements[ $id ] ); + } + + if ( isset($newlevel) && $newlevel ){ + //end the child delimiter + $cb_args = array_merge( array(&$output, $depth), $args); + call_user_func_array(array($this, 'end_lvl'), $cb_args); + } + + //end this element + $cb_args = array_merge( array(&$output, $element, $depth), $args); + call_user_func_array(array($this, 'end_el'), $cb_args); + } + + /** + * Display array of elements hierarchically. + * + * Does not assume any existing order of elements. + * + * $max_depth = -1 means flatly display every element. + * $max_depth = 0 means display all levels. + * $max_depth > 0 specifies the number of display levels. + * + * @since 2.1.0 + * + * @param array $elements An array of elements. + * @param int $max_depth The maximum hierarchical depth. + * @return string The hierarchical item output. + */ + function walk( $elements, $max_depth) { + + $args = array_slice(func_get_args(), 2); + $output = ''; + + if ($max_depth < -1) //invalid parameter + return $output; + + if (empty($elements)) //nothing to walk + return $output; + + $id_field = $this->db_fields['id']; + $parent_field = $this->db_fields['parent']; + + // flat display + if ( -1 == $max_depth ) { + $empty_array = array(); + foreach ( $elements as $e ) + $this->display_element( $e, $empty_array, 1, 0, $args, $output ); + return $output; + } + + /* + * Need to display in hierarchical order. + * Separate elements into two buckets: top level and children elements. + * Children_elements is two dimensional array, eg. + * Children_elements[10][] contains all sub-elements whose parent is 10. + */ + $top_level_elements = array(); + $children_elements = array(); + foreach ( $elements as $e) { + if ( 0 == $e->$parent_field ) + $top_level_elements[] = $e; + else + $children_elements[ $e->$parent_field ][] = $e; + } + + /* + * When none of the elements is top level. + * Assume the first one must be root of the sub elements. + */ + if ( empty($top_level_elements) ) { + + $first = array_slice( $elements, 0, 1 ); + $root = $first[0]; + + $top_level_elements = array(); + $children_elements = array(); + foreach ( $elements as $e) { + if ( $root->$parent_field == $e->$parent_field ) + $top_level_elements[] = $e; + else + $children_elements[ $e->$parent_field ][] = $e; + } + } + + foreach ( $top_level_elements as $e ) + $this->display_element( $e, $children_elements, $max_depth, 0, $args, $output ); + + /* + * If we are displaying all levels, and remaining children_elements is not empty, + * then we got orphans, which should be displayed regardless. + */ + if ( ( $max_depth == 0 ) && count( $children_elements ) > 0 ) { + $empty_array = array(); + foreach ( $children_elements as $orphans ) + foreach( $orphans as $op ) + $this->display_element( $op, $empty_array, 1, 0, $args, $output ); + } + + return $output; + } + + /** + * paged_walk() - produce a page of nested elements + * + * Given an array of hierarchical elements, the maximum depth, a specific page number, + * and number of elements per page, this function first determines all top level root elements + * belonging to that page, then lists them and all of their children in hierarchical order. + * + * $max_depth = 0 means display all levels. + * $max_depth > 0 specifies the number of display levels. + * + * @since 2.7.0 + * + * @param int $max_depth The maximum hierarchical depth. + * @param int $page_num The specific page number, beginning with 1. + * @return string XHTML of the specified page of elements + */ + function paged_walk( $elements, $max_depth, $page_num, $per_page ) { + + /* sanity check */ + if ( empty($elements) || $max_depth < -1 ) + return ''; + + $args = array_slice( func_get_args(), 4 ); + $output = ''; + + $id_field = $this->db_fields['id']; + $parent_field = $this->db_fields['parent']; + + $count = -1; + if ( -1 == $max_depth ) + $total_top = count( $elements ); + if ( $page_num < 1 || $per_page < 0 ) { + // No paging + $paging = false; + $start = 0; + if ( -1 == $max_depth ) + $end = $total_top; + $this->max_pages = 1; + } else { + $paging = true; + $start = ( (int)$page_num - 1 ) * (int)$per_page; + $end = $start + $per_page; + if ( -1 == $max_depth ) + $this->max_pages = ceil($total_top / $per_page); + } + + // flat display + if ( -1 == $max_depth ) { + if ( !empty($args[0]['reverse_top_level']) ) { + $elements = array_reverse( $elements ); + $oldstart = $start; + $start = $total_top - $end; + $end = $total_top - $oldstart; + } + + $empty_array = array(); + foreach ( $elements as $e ) { + $count++; + if ( $count < $start ) + continue; + if ( $count >= $end ) + break; + $this->display_element( $e, $empty_array, 1, 0, $args, $output ); + } + return $output; + } + + /* + * Separate elements into two buckets: top level and children elements. + * Children_elements is two dimensional array, e.g. + * $children_elements[10][] contains all sub-elements whose parent is 10. + */ + $top_level_elements = array(); + $children_elements = array(); + foreach ( $elements as $e) { + if ( 0 == $e->$parent_field ) + $top_level_elements[] = $e; + else + $children_elements[ $e->$parent_field ][] = $e; + } + + $total_top = count( $top_level_elements ); + if ( $paging ) + $this->max_pages = ceil($total_top / $per_page); + else + $end = $total_top; + + if ( !empty($args[0]['reverse_top_level']) ) { + $top_level_elements = array_reverse( $top_level_elements ); + $oldstart = $start; + $start = $total_top - $end; + $end = $total_top - $oldstart; + } + if ( !empty($args[0]['reverse_children']) ) { + foreach ( $children_elements as $parent => $children ) + $children_elements[$parent] = array_reverse( $children ); + } + + foreach ( $top_level_elements as $e ) { + $count++; + + // For the last page, need to unset earlier children in order to keep track of orphans. + if ( $end >= $total_top && $count < $start ) + $this->unset_children( $e, $children_elements ); + + if ( $count < $start ) + continue; + + if ( $count >= $end ) + break; + + $this->display_element( $e, $children_elements, $max_depth, 0, $args, $output ); + } + + if ( $end >= $total_top && count( $children_elements ) > 0 ) { + $empty_array = array(); + foreach ( $children_elements as $orphans ) + foreach( $orphans as $op ) + $this->display_element( $op, $empty_array, 1, 0, $args, $output ); + } + + return $output; + } + + function get_number_of_root_elements( $elements ){ + + $num = 0; + $parent_field = $this->db_fields['parent']; + + foreach ( $elements as $e) { + if ( 0 == $e->$parent_field ) + $num++; + } + return $num; + } + + // Unset all the children for a given top level element. + function unset_children( $e, &$children_elements ){ + + if ( !$e || !$children_elements ) + return; + + $id_field = $this->db_fields['id']; + $id = $e->$id_field; + + if ( !empty($children_elements[$id]) && is_array($children_elements[$id]) ) + foreach ( (array) $children_elements[$id] as $child ) + $this->unset_children( $child, $children_elements ); + + if ( isset($children_elements[$id]) ) + unset( $children_elements[$id] ); + + } + +} // Walker diff --git a/src/wp-includes/class-wp-xmlrpc-server.php b/src/wp-includes/class-wp-xmlrpc-server.php new file mode 100644 index 0000000..1ab005b --- /dev/null +++ b/src/wp-includes/class-wp-xmlrpc-server.php @@ -0,0 +1,5524 @@ +<?php +/** + * XML-RPC protocol support for WordPress + * + * @package WordPress + */ + +/** + * WordPress XMLRPC server implementation. + * + * Implements compatibility for Blogger API, MetaWeblog API, MovableType, and + * pingback. Additional WordPress API for managing comments, pages, posts, + * options, etc. + * + * As of WordPress 3.5.0, XML-RPC is enabled by default. It can be disabled + * via the xmlrpc_enabled filter found in wp_xmlrpc_server::login(). + * + * @package WordPress + * @subpackage Publishing + * @since 1.5.0 + */ +class wp_xmlrpc_server extends IXR_Server { + + /** + * Register all of the XMLRPC methods that XMLRPC server understands. + * + * Sets up server and method property. Passes XMLRPC + * methods through the 'xmlrpc_methods' filter to allow plugins to extend + * or replace XMLRPC methods. + * + * @since 1.5.0 + * + * @return wp_xmlrpc_server + */ + function __construct() { + $this->methods = array( + // WordPress API + 'wp.getUsersBlogs' => 'this:wp_getUsersBlogs', + 'wp.newPost' => 'this:wp_newPost', + 'wp.editPost' => 'this:wp_editPost', + 'wp.deletePost' => 'this:wp_deletePost', + 'wp.getPost' => 'this:wp_getPost', + 'wp.getPosts' => 'this:wp_getPosts', + 'wp.newTerm' => 'this:wp_newTerm', + 'wp.editTerm' => 'this:wp_editTerm', + 'wp.deleteTerm' => 'this:wp_deleteTerm', + 'wp.getTerm' => 'this:wp_getTerm', + 'wp.getTerms' => 'this:wp_getTerms', + 'wp.getTaxonomy' => 'this:wp_getTaxonomy', + 'wp.getTaxonomies' => 'this:wp_getTaxonomies', + 'wp.getUser' => 'this:wp_getUser', + 'wp.getUsers' => 'this:wp_getUsers', + 'wp.getProfile' => 'this:wp_getProfile', + 'wp.editProfile' => 'this:wp_editProfile', + 'wp.getPage' => 'this:wp_getPage', + 'wp.getPages' => 'this:wp_getPages', + 'wp.newPage' => 'this:wp_newPage', + 'wp.deletePage' => 'this:wp_deletePage', + 'wp.editPage' => 'this:wp_editPage', + 'wp.getPageList' => 'this:wp_getPageList', + 'wp.getAuthors' => 'this:wp_getAuthors', + 'wp.getCategories' => 'this:mw_getCategories', // Alias + 'wp.getTags' => 'this:wp_getTags', + 'wp.newCategory' => 'this:wp_newCategory', + 'wp.deleteCategory' => 'this:wp_deleteCategory', + 'wp.suggestCategories' => 'this:wp_suggestCategories', + 'wp.uploadFile' => 'this:mw_newMediaObject', // Alias + 'wp.getCommentCount' => 'this:wp_getCommentCount', + 'wp.getPostStatusList' => 'this:wp_getPostStatusList', + 'wp.getPageStatusList' => 'this:wp_getPageStatusList', + 'wp.getPageTemplates' => 'this:wp_getPageTemplates', + 'wp.getOptions' => 'this:wp_getOptions', + 'wp.setOptions' => 'this:wp_setOptions', + 'wp.getComment' => 'this:wp_getComment', + 'wp.getComments' => 'this:wp_getComments', + 'wp.deleteComment' => 'this:wp_deleteComment', + 'wp.editComment' => 'this:wp_editComment', + 'wp.newComment' => 'this:wp_newComment', + 'wp.getCommentStatusList' => 'this:wp_getCommentStatusList', + 'wp.getMediaItem' => 'this:wp_getMediaItem', + 'wp.getMediaLibrary' => 'this:wp_getMediaLibrary', + 'wp.getPostFormats' => 'this:wp_getPostFormats', + 'wp.getPostType' => 'this:wp_getPostType', + 'wp.getPostTypes' => 'this:wp_getPostTypes', + 'wp.getRevisions' => 'this:wp_getRevisions', + 'wp.restoreRevision' => 'this:wp_restoreRevision', + + // Blogger API + 'blogger.getUsersBlogs' => 'this:blogger_getUsersBlogs', + 'blogger.getUserInfo' => 'this:blogger_getUserInfo', + 'blogger.getPost' => 'this:blogger_getPost', + 'blogger.getRecentPosts' => 'this:blogger_getRecentPosts', + 'blogger.newPost' => 'this:blogger_newPost', + 'blogger.editPost' => 'this:blogger_editPost', + 'blogger.deletePost' => 'this:blogger_deletePost', + + // MetaWeblog API (with MT extensions to structs) + 'metaWeblog.newPost' => 'this:mw_newPost', + 'metaWeblog.editPost' => 'this:mw_editPost', + 'metaWeblog.getPost' => 'this:mw_getPost', + 'metaWeblog.getRecentPosts' => 'this:mw_getRecentPosts', + 'metaWeblog.getCategories' => 'this:mw_getCategories', + 'metaWeblog.newMediaObject' => 'this:mw_newMediaObject', + + // MetaWeblog API aliases for Blogger API + // see http://www.xmlrpc.com/stories/storyReader$2460 + 'metaWeblog.deletePost' => 'this:blogger_deletePost', + 'metaWeblog.getUsersBlogs' => 'this:blogger_getUsersBlogs', + + // MovableType API + 'mt.getCategoryList' => 'this:mt_getCategoryList', + 'mt.getRecentPostTitles' => 'this:mt_getRecentPostTitles', + 'mt.getPostCategories' => 'this:mt_getPostCategories', + 'mt.setPostCategories' => 'this:mt_setPostCategories', + 'mt.supportedMethods' => 'this:mt_supportedMethods', + 'mt.supportedTextFilters' => 'this:mt_supportedTextFilters', + 'mt.getTrackbackPings' => 'this:mt_getTrackbackPings', + 'mt.publishPost' => 'this:mt_publishPost', + + // PingBack + 'pingback.ping' => 'this:pingback_ping', + 'pingback.extensions.getPingbacks' => 'this:pingback_extensions_getPingbacks', + + 'demo.sayHello' => 'this:sayHello', + 'demo.addTwoNumbers' => 'this:addTwoNumbers' + ); + + $this->initialise_blog_option_info(); + $this->methods = apply_filters('xmlrpc_methods', $this->methods); + } + + function serve_request() { + $this->IXR_Server($this->methods); + } + + /** + * Test XMLRPC API by saying, "Hello!" to client. + * + * @since 1.5.0 + * + * @param array $args Method Parameters. + * @return string + */ + function sayHello($args) { + return 'Hello!'; + } + + /** + * Test XMLRPC API by adding two numbers for client. + * + * @since 1.5.0 + * + * @param array $args Method Parameters. + * @return int + */ + function addTwoNumbers($args) { + $number1 = $args[0]; + $number2 = $args[1]; + return $number1 + $number2; + } + + /** + * Log user in. + * + * @since 2.8.0 + * + * @param string $username User's username. + * @param string $password User's password. + * @return mixed WP_User object if authentication passed, false otherwise + */ + function login( $username, $password ) { + // Respect any old filters against get_option() for 'enable_xmlrpc'. + $enabled = apply_filters( 'pre_option_enable_xmlrpc', false ); // Deprecated + if ( false === $enabled ) + $enabled = apply_filters( 'option_enable_xmlrpc', true ); // Deprecated + + // Proper filter for turning off XML-RPC. It is on by default. + $enabled = apply_filters( 'xmlrpc_enabled', $enabled ); + + if ( ! $enabled ) { + $this->error = new IXR_Error( 405, sprintf( __( 'XML-RPC services are disabled on this site.' ) ) ); + return false; + } + + $user = wp_authenticate($username, $password); + + if (is_wp_error($user)) { + $this->error = new IXR_Error( 403, __( 'Incorrect username or password.' ) ); + $this->error = apply_filters( 'xmlrpc_login_error', $this->error, $user ); + return false; + } + + wp_set_current_user( $user->ID ); + return $user; + } + + /** + * Check user's credentials. Deprecated. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated use wp_xmlrpc_server::login + * @see wp_xmlrpc_server::login + * + * @param string $username User's username. + * @param string $password User's password. + * @return bool Whether authentication passed. + */ + function login_pass_ok( $username, $password ) { + return (bool) $this->login( $username, $password ); + } + + /** + * Escape string or array of strings for database. + * + * @since 1.5.2 + * + * @param string|array $data Escape single string or array of strings. + * @return string|array Type matches $data and sanitized for the database. + */ + function escape( &$data ) { + if ( ! is_array( $data ) ) + return wp_slash( $data ); + + foreach ( $data as &$v ) { + if ( is_array( $v ) ) + $this->escape( $v ); + elseif ( ! is_object( $v ) ) + $v = wp_slash( $v ); + } + } + + /** + * Retrieve custom fields for post. + * + * @since 2.5.0 + * + * @param int $post_id Post ID. + * @return array Custom fields, if exist. + */ + function get_custom_fields($post_id) { + $post_id = (int) $post_id; + + $custom_fields = array(); + + foreach ( (array) has_meta($post_id) as $meta ) { + // Don't expose protected fields. + if ( ! current_user_can( 'edit_post_meta', $post_id , $meta['meta_key'] ) ) + continue; + + $custom_fields[] = array( + "id" => $meta['meta_id'], + "key" => $meta['meta_key'], + "value" => $meta['meta_value'] + ); + } + + return $custom_fields; + } + + /** + * Set custom fields for post. + * + * @since 2.5.0 + * + * @param int $post_id Post ID. + * @param array $fields Custom fields. + */ + function set_custom_fields($post_id, $fields) { + $post_id = (int) $post_id; + + foreach ( (array) $fields as $meta ) { + if ( isset($meta['id']) ) { + $meta['id'] = (int) $meta['id']; + $pmeta = get_metadata_by_mid( 'post', $meta['id'] ); + if ( isset($meta['key']) ) { + $meta['key'] = wp_unslash( $meta['key'] ); + if ( $meta['key'] !== $pmeta->meta_key ) + continue; + $meta['value'] = wp_unslash( $meta['value'] ); + if ( current_user_can( 'edit_post_meta', $post_id, $meta['key'] ) ) + update_metadata_by_mid( 'post', $meta['id'], $meta['value'] ); + } elseif ( current_user_can( 'delete_post_meta', $post_id, $pmeta->meta_key ) ) { + delete_metadata_by_mid( 'post', $meta['id'] ); + } + } elseif ( current_user_can( 'add_post_meta', $post_id, wp_unslash( $meta['key'] ) ) ) { + add_post_meta( $post_id, $meta['key'], $meta['value'] ); + } + } + } + + /** + * Set up blog options property. + * + * Passes property through 'xmlrpc_blog_options' filter. + * + * @since 2.6.0 + */ + function initialise_blog_option_info() { + global $wp_version; + + $this->blog_options = array( + // Read only options + 'software_name' => array( + 'desc' => __( 'Software Name' ), + 'readonly' => true, + 'value' => 'WordPress' + ), + 'software_version' => array( + 'desc' => __( 'Software Version' ), + 'readonly' => true, + 'value' => $wp_version + ), + 'blog_url' => array( + 'desc' => __( 'WordPress Address (URL)' ), + 'readonly' => true, + 'option' => 'siteurl' + ), + 'home_url' => array( + 'desc' => __( 'Site Address (URL)' ), + 'readonly' => true, + 'option' => 'home' + ), + 'login_url' => array( + 'desc' => __( 'Login Address (URL)' ), + 'readonly' => true, + 'value' => wp_login_url( ) + ), + 'admin_url' => array( + 'desc' => __( 'The URL to the admin area' ), + 'readonly' => true, + 'value' => get_admin_url( ) + ), + 'image_default_link_type' => array( + 'desc' => __( 'Image default link type' ), + 'readonly' => true, + 'option' => 'image_default_link_type' + ), + 'image_default_size' => array( + 'desc' => __( 'Image default size' ), + 'readonly' => true, + 'option' => 'image_default_size' + ), + 'image_default_align' => array( + 'desc' => __( 'Image default align' ), + 'readonly' => true, + 'option' => 'image_default_align' + ), + 'template' => array( + 'desc' => __( 'Template' ), + 'readonly' => true, + 'option' => 'template' + ), + 'stylesheet' => array( + 'desc' => __( 'Stylesheet' ), + 'readonly' => true, + 'option' => 'stylesheet' + ), + 'post_thumbnail' => array( + 'desc' => __('Post Thumbnail'), + 'readonly' => true, + 'value' => current_theme_supports( 'post-thumbnails' ) + ), + + // Updatable options + 'time_zone' => array( + 'desc' => __( 'Time Zone' ), + 'readonly' => false, + 'option' => 'gmt_offset' + ), + 'blog_title' => array( + 'desc' => __( 'Site Title' ), + 'readonly' => false, + 'option' => 'blogname' + ), + 'blog_tagline' => array( + 'desc' => __( 'Site Tagline' ), + 'readonly' => false, + 'option' => 'blogdescription' + ), + 'date_format' => array( + 'desc' => __( 'Date Format' ), + 'readonly' => false, + 'option' => 'date_format' + ), + 'time_format' => array( + 'desc' => __( 'Time Format' ), + 'readonly' => false, + 'option' => 'time_format' + ), + 'users_can_register' => array( + 'desc' => __( 'Allow new users to sign up' ), + 'readonly' => false, + 'option' => 'users_can_register' + ), + 'thumbnail_size_w' => array( + 'desc' => __( 'Thumbnail Width' ), + 'readonly' => false, + 'option' => 'thumbnail_size_w' + ), + 'thumbnail_size_h' => array( + 'desc' => __( 'Thumbnail Height' ), + 'readonly' => false, + 'option' => 'thumbnail_size_h' + ), + 'thumbnail_crop' => array( + 'desc' => __( 'Crop thumbnail to exact dimensions' ), + 'readonly' => false, + 'option' => 'thumbnail_crop' + ), + 'medium_size_w' => array( + 'desc' => __( 'Medium size image width' ), + 'readonly' => false, + 'option' => 'medium_size_w' + ), + 'medium_size_h' => array( + 'desc' => __( 'Medium size image height' ), + 'readonly' => false, + 'option' => 'medium_size_h' + ), + 'large_size_w' => array( + 'desc' => __( 'Large size image width' ), + 'readonly' => false, + 'option' => 'large_size_w' + ), + 'large_size_h' => array( + 'desc' => __( 'Large size image height' ), + 'readonly' => false, + 'option' => 'large_size_h' + ), + 'default_comment_status' => array( + 'desc' => __( 'Allow people to post comments on new articles' ), + 'readonly' => false, + 'option' => 'default_comment_status' + ), + 'default_ping_status' => array( + 'desc' => __( 'Allow link notifications from other blogs (pingbacks and trackbacks)' ), + 'readonly' => false, + 'option' => 'default_ping_status' + ) + ); + + $this->blog_options = apply_filters( 'xmlrpc_blog_options', $this->blog_options ); + } + + /** + * Retrieve the blogs of the user. + * + * @since 2.6.0 + * + * @param array $args Method parameters. Contains: + * - username + * - password + * @return array. Contains: + * - 'isAdmin' + * - 'url' + * - 'blogid' + * - 'blogName' + * - 'xmlrpc' - url of xmlrpc endpoint + */ + function wp_getUsersBlogs( $args ) { + // If this isn't on WPMU then just use blogger_getUsersBlogs + if ( !is_multisite() ) { + array_unshift( $args, 1 ); + return $this->blogger_getUsersBlogs( $args ); + } + + $this->escape( $args ); + + $username = $args[0]; + $password = $args[1]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getUsersBlogs' ); + + $blogs = (array) get_blogs_of_user( $user->ID ); + $struct = array(); + + foreach ( $blogs as $blog ) { + // Don't include blogs that aren't hosted at this site + if ( $blog->site_id != get_current_site()->id ) + continue; + + $blog_id = $blog->userblog_id; + + switch_to_blog( $blog_id ); + + $is_admin = current_user_can( 'manage_options' ); + + $struct[] = array( + 'isAdmin' => $is_admin, + 'url' => home_url( '/' ), + 'blogid' => (string) $blog_id, + 'blogName' => get_option( 'blogname' ), + 'xmlrpc' => site_url( 'xmlrpc.php', 'rpc' ), + ); + + restore_current_blog(); + } + + return $struct; + } + + /** + * Checks if the method received at least the minimum number of arguments. + * + * @since 3.4.0 + * + * @param string|array $args Sanitize single string or array of strings. + * @param int $count Minimum number of arguments. + * @return boolean if $args contains at least $count arguments. + */ + protected function minimum_args( $args, $count ) { + if ( count( $args ) < $count ) { + $this->error = new IXR_Error( 400, __( 'Insufficient arguments passed to this XML-RPC method.' ) ); + return false; + } + + return true; + } + + /** + * Prepares taxonomy data for return in an XML-RPC object. + * + * @access protected + * + * @param object $taxonomy The unprepared taxonomy data + * @param array $fields The subset of taxonomy fields to return + * @return array The prepared taxonomy data + */ + protected function _prepare_taxonomy( $taxonomy, $fields ) { + $_taxonomy = array( + 'name' => $taxonomy->name, + 'label' => $taxonomy->label, + 'hierarchical' => (bool) $taxonomy->hierarchical, + 'public' => (bool) $taxonomy->public, + 'show_ui' => (bool) $taxonomy->show_ui, + '_builtin' => (bool) $taxonomy->_builtin, + ); + + if ( in_array( 'labels', $fields ) ) + $_taxonomy['labels'] = (array) $taxonomy->labels; + + if ( in_array( 'cap', $fields ) ) + $_taxonomy['cap'] = (array) $taxonomy->cap; + + if ( in_array( 'menu', $fields ) ) + $_taxonomy['show_in_menu'] = (bool) $_taxonomy->show_in_menu; + + if ( in_array( 'object_type', $fields ) ) + $_taxonomy['object_type'] = array_unique( (array) $taxonomy->object_type ); + + return apply_filters( 'xmlrpc_prepare_taxonomy', $_taxonomy, $taxonomy, $fields ); + } + + /** + * Prepares term data for return in an XML-RPC object. + * + * @access protected + * + * @param array|object $term The unprepared term data + * @return array The prepared term data + */ + protected function _prepare_term( $term ) { + $_term = $term; + if ( ! is_array( $_term) ) + $_term = get_object_vars( $_term ); + + // For integers which may be larger than XML-RPC supports ensure we return strings. + $_term['term_id'] = strval( $_term['term_id'] ); + $_term['term_group'] = strval( $_term['term_group'] ); + $_term['term_taxonomy_id'] = strval( $_term['term_taxonomy_id'] ); + $_term['parent'] = strval( $_term['parent'] ); + + // Count we are happy to return as an integer because people really shouldn't use terms that much. + $_term['count'] = intval( $_term['count'] ); + + return apply_filters( 'xmlrpc_prepare_term', $_term, $term ); + } + + /** + * Convert a WordPress date string to an IXR_Date object. + * + * @access protected + * + * @param string $date + * @return IXR_Date + */ + protected function _convert_date( $date ) { + if ( $date === '0000-00-00 00:00:00' ) { + return new IXR_Date( '00000000T00:00:00Z' ); + } + return new IXR_Date( mysql2date( 'Ymd\TH:i:s', $date, false ) ); + } + + /** + * Convert a WordPress GMT date string to an IXR_Date object. + * + * @access protected + * + * @param string $date_gmt + * @param string $date + * @return IXR_Date + */ + protected function _convert_date_gmt( $date_gmt, $date ) { + if ( $date !== '0000-00-00 00:00:00' && $date_gmt === '0000-00-00 00:00:00' ) { + return new IXR_Date( get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $date, false ), 'Ymd\TH:i:s' ) ); + } + return $this->_convert_date( $date_gmt ); + } + + /** + * Prepares post data for return in an XML-RPC object. + * + * @access protected + * + * @param array $post The unprepared post data + * @param array $fields The subset of post type fields to return + * @return array The prepared post data + */ + protected function _prepare_post( $post, $fields ) { + // holds the data for this post. built up based on $fields + $_post = array( 'post_id' => strval( $post['ID'] ) ); + + // prepare common post fields + $post_fields = array( + 'post_title' => $post['post_title'], + 'post_date' => $this->_convert_date( $post['post_date'] ), + 'post_date_gmt' => $this->_convert_date_gmt( $post['post_date_gmt'], $post['post_date'] ), + 'post_modified' => $this->_convert_date( $post['post_modified'] ), + 'post_modified_gmt' => $this->_convert_date_gmt( $post['post_modified_gmt'], $post['post_modified'] ), + 'post_status' => $post['post_status'], + 'post_type' => $post['post_type'], + 'post_name' => $post['post_name'], + 'post_author' => $post['post_author'], + 'post_password' => $post['post_password'], + 'post_excerpt' => $post['post_excerpt'], + 'post_content' => $post['post_content'], + 'post_parent' => strval( $post['post_parent'] ), + 'post_mime_type' => $post['post_mime_type'], + 'link' => post_permalink( $post['ID'] ), + 'guid' => $post['guid'], + 'menu_order' => intval( $post['menu_order'] ), + 'comment_status' => $post['comment_status'], + 'ping_status' => $post['ping_status'], + 'sticky' => ( $post['post_type'] === 'post' && is_sticky( $post['ID'] ) ), + ); + + // Thumbnail + $post_fields['post_thumbnail'] = array(); + $thumbnail_id = get_post_thumbnail_id( $post['ID'] ); + if ( $thumbnail_id ) { + $thumbnail_size = current_theme_supports('post-thumbnail') ? 'post-thumbnail' : 'thumbnail'; + $post_fields['post_thumbnail'] = $this->_prepare_media_item( get_post( $thumbnail_id ), $thumbnail_size ); + } + + // Consider future posts as published + if ( $post_fields['post_status'] === 'future' ) + $post_fields['post_status'] = 'publish'; + + // Fill in blank post format + $post_fields['post_format'] = get_post_format( $post['ID'] ); + if ( empty( $post_fields['post_format'] ) ) + $post_fields['post_format'] = 'standard'; + + // Merge requested $post_fields fields into $_post + if ( in_array( 'post', $fields ) ) { + $_post = array_merge( $_post, $post_fields ); + } else { + $requested_fields = array_intersect_key( $post_fields, array_flip( $fields ) ); + $_post = array_merge( $_post, $requested_fields ); + } + + $all_taxonomy_fields = in_array( 'taxonomies', $fields ); + + if ( $all_taxonomy_fields || in_array( 'terms', $fields ) ) { + $post_type_taxonomies = get_object_taxonomies( $post['post_type'], 'names' ); + $terms = wp_get_object_terms( $post['ID'], $post_type_taxonomies ); + $_post['terms'] = array(); + foreach ( $terms as $term ) { + $_post['terms'][] = $this->_prepare_term( $term ); + } + } + + if ( in_array( 'custom_fields', $fields ) ) + $_post['custom_fields'] = $this->get_custom_fields( $post['ID'] ); + + if ( in_array( 'enclosure', $fields ) ) { + $_post['enclosure'] = array(); + $enclosures = (array) get_post_meta( $post['ID'], 'enclosure' ); + if ( ! empty( $enclosures ) ) { + $encdata = explode( "\n", $enclosures[0] ); + $_post['enclosure']['url'] = trim( htmlspecialchars( $encdata[0] ) ); + $_post['enclosure']['length'] = (int) trim( $encdata[1] ); + $_post['enclosure']['type'] = trim( $encdata[2] ); + } + } + + return apply_filters( 'xmlrpc_prepare_post', $_post, $post, $fields ); + } + + /** + * Prepares post data for return in an XML-RPC object. + * + * @access protected + * + * @param object $post_type Post type object + * @param array $fields The subset of post fields to return + * @return array The prepared post type data + */ + protected function _prepare_post_type( $post_type, $fields ) { + $_post_type = array( + 'name' => $post_type->name, + 'label' => $post_type->label, + 'hierarchical' => (bool) $post_type->hierarchical, + 'public' => (bool) $post_type->public, + 'show_ui' => (bool) $post_type->show_ui, + '_builtin' => (bool) $post_type->_builtin, + 'has_archive' => (bool) $post_type->has_archive, + 'supports' => get_all_post_type_supports( $post_type->name ), + ); + + if ( in_array( 'labels', $fields ) ) { + $_post_type['labels'] = (array) $post_type->labels; + } + + if ( in_array( 'cap', $fields ) ) { + $_post_type['cap'] = (array) $post_type->cap; + $_post_type['map_meta_cap'] = (bool) $post_type->map_meta_cap; + } + + if ( in_array( 'menu', $fields ) ) { + $_post_type['menu_position'] = (int) $post_type->menu_position; + $_post_type['menu_icon'] = $post_type->menu_icon; + $_post_type['show_in_menu'] = (bool) $post_type->show_in_menu; + } + + if ( in_array( 'taxonomies', $fields ) ) + $_post_type['taxonomies'] = get_object_taxonomies( $post_type->name, 'names' ); + + return apply_filters( 'xmlrpc_prepare_post_type', $_post_type, $post_type ); + } + + /** + * Prepares media item data for return in an XML-RPC object. + * + * @access protected + * + * @param object $media_item The unprepared media item data + * @param string $thumbnail_size The image size to use for the thumbnail URL + * @return array The prepared media item data + */ + protected function _prepare_media_item( $media_item, $thumbnail_size = 'thumbnail' ) { + $_media_item = array( + 'attachment_id' => strval( $media_item->ID ), + 'date_created_gmt' => $this->_convert_date_gmt( $media_item->post_date_gmt, $media_item->post_date ), + 'parent' => $media_item->post_parent, + 'link' => wp_get_attachment_url( $media_item->ID ), + 'title' => $media_item->post_title, + 'caption' => $media_item->post_excerpt, + 'description' => $media_item->post_content, + 'metadata' => wp_get_attachment_metadata( $media_item->ID ), + ); + + $thumbnail_src = image_downsize( $media_item->ID, $thumbnail_size ); + if ( $thumbnail_src ) + $_media_item['thumbnail'] = $thumbnail_src[0]; + else + $_media_item['thumbnail'] = $_media_item['link']; + + return apply_filters( 'xmlrpc_prepare_media_item', $_media_item, $media_item, $thumbnail_size ); + } + + /** + * Prepares page data for return in an XML-RPC object. + * + * @access protected + * + * @param object $page The unprepared page data + * @return array The prepared page data + */ + protected function _prepare_page( $page ) { + // Get all of the page content and link. + $full_page = get_extended( $page->post_content ); + $link = post_permalink( $page->ID ); + + // Get info the page parent if there is one. + $parent_title = ""; + if ( ! empty( $page->post_parent ) ) { + $parent = get_post( $page->post_parent ); + $parent_title = $parent->post_title; + } + + // Determine comment and ping settings. + $allow_comments = comments_open( $page->ID ) ? 1 : 0; + $allow_pings = pings_open( $page->ID ) ? 1 : 0; + + // Format page date. + $page_date = $this->_convert_date( $page->post_date ); + $page_date_gmt = $this->_convert_date_gmt( $page->post_date_gmt, $page->post_date ); + + // Pull the categories info together. + $categories = array(); + foreach ( wp_get_post_categories( $page->ID ) as $cat_id ) { + $categories[] = get_cat_name( $cat_id ); + } + + // Get the author info. + $author = get_userdata( $page->post_author ); + + $page_template = get_page_template_slug( $page->ID ); + if ( empty( $page_template ) ) + $page_template = 'default'; + + $_page = array( + 'dateCreated' => $page_date, + 'userid' => $page->post_author, + 'page_id' => $page->ID, + 'page_status' => $page->post_status, + 'description' => $full_page['main'], + 'title' => $page->post_title, + 'link' => $link, + 'permaLink' => $link, + 'categories' => $categories, + 'excerpt' => $page->post_excerpt, + 'text_more' => $full_page['extended'], + 'mt_allow_comments' => $allow_comments, + 'mt_allow_pings' => $allow_pings, + 'wp_slug' => $page->post_name, + 'wp_password' => $page->post_password, + 'wp_author' => $author->display_name, + 'wp_page_parent_id' => $page->post_parent, + 'wp_page_parent_title' => $parent_title, + 'wp_page_order' => $page->menu_order, + 'wp_author_id' => (string) $author->ID, + 'wp_author_display_name' => $author->display_name, + 'date_created_gmt' => $page_date_gmt, + 'custom_fields' => $this->get_custom_fields( $page->ID ), + 'wp_page_template' => $page_template + ); + + return apply_filters( 'xmlrpc_prepare_page', $_page, $page ); + } + + /** + * Prepares comment data for return in an XML-RPC object. + * + * @access protected + * + * @param object $comment The unprepared comment data + * @return array The prepared comment data + */ + protected function _prepare_comment( $comment ) { + // Format page date. + $comment_date = $this->_convert_date( $comment->comment_date ); + $comment_date_gmt = $this->_convert_date_gmt( $comment->comment_date_gmt, $comment->comment_date ); + + if ( '0' == $comment->comment_approved ) + $comment_status = 'hold'; + else if ( 'spam' == $comment->comment_approved ) + $comment_status = 'spam'; + else if ( '1' == $comment->comment_approved ) + $comment_status = 'approve'; + else + $comment_status = $comment->comment_approved; + + $_comment = array( + 'date_created_gmt' => $comment_date_gmt, + 'user_id' => $comment->user_id, + 'comment_id' => $comment->comment_ID, + 'parent' => $comment->comment_parent, + 'status' => $comment_status, + 'content' => $comment->comment_content, + 'link' => get_comment_link($comment), + 'post_id' => $comment->comment_post_ID, + 'post_title' => get_the_title($comment->comment_post_ID), + 'author' => $comment->comment_author, + 'author_url' => $comment->comment_author_url, + 'author_email' => $comment->comment_author_email, + 'author_ip' => $comment->comment_author_IP, + 'type' => $comment->comment_type, + ); + + return apply_filters( 'xmlrpc_prepare_comment', $_comment, $comment ); + } + + /** + * Prepares user data for return in an XML-RPC object. + * + * @access protected + * + * @param WP_User $user The unprepared user object + * @param array $fields The subset of user fields to return + * @return array The prepared user data + */ + protected function _prepare_user( $user, $fields ) { + $_user = array( 'user_id' => strval( $user->ID ) ); + + $user_fields = array( + 'username' => $user->user_login, + 'first_name' => $user->user_firstname, + 'last_name' => $user->user_lastname, + 'registered' => $this->_convert_date( $user->user_registered ), + 'bio' => $user->user_description, + 'email' => $user->user_email, + 'nickname' => $user->nickname, + 'nicename' => $user->user_nicename, + 'url' => $user->user_url, + 'display_name' => $user->display_name, + 'roles' => $user->roles, + ); + + if ( in_array( 'all', $fields ) ) { + $_user = array_merge( $_user, $user_fields ); + } else { + if ( in_array( 'basic', $fields ) ) { + $basic_fields = array( 'username', 'email', 'registered', 'display_name', 'nicename' ); + $fields = array_merge( $fields, $basic_fields ); + } + $requested_fields = array_intersect_key( $user_fields, array_flip( $fields ) ); + $_user = array_merge( $_user, $requested_fields ); + } + + return apply_filters( 'xmlrpc_prepare_user', $_user, $user, $fields ); + } + + /** + * Create a new post for any registered post type. + * + * @since 3.4.0 + * + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - array $content_struct + * $content_struct can contain: + * - post_type (default: 'post') + * - post_status (default: 'draft') + * - post_title + * - post_author + * - post_excerpt + * - post_content + * - post_date_gmt | post_date + * - post_format + * - post_password + * - comment_status - can be 'open' | 'closed' + * - ping_status - can be 'open' | 'closed' + * - sticky + * - post_thumbnail - ID of a media item to use as the post thumbnail/featured image + * - custom_fields - array, with each element containing 'key' and 'value' + * - terms - array, with taxonomy names as keys and arrays of term IDs as values + * - terms_names - array, with taxonomy names as keys and arrays of term names as values + * - enclosure + * - any other fields supported by wp_insert_post() + * @return string post_id + */ + function wp_newPost( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $content_struct = $args[3]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.newPost' ); + + unset( $content_struct['ID'] ); + + return $this->_insert_post( $user, $content_struct ); + } + + /** + * Helper method for filtering out elements from an array. + * + * @since 3.4.0 + * + * @param int $count Number to compare to one. + */ + private function _is_greater_than_one( $count ) { + return $count > 1; + } + + /** + * Helper method for wp_newPost and wp_editPost, containing shared logic. + * + * @since 3.4.0 + * @uses wp_insert_post() + * + * @param WP_User $user The post author if post_author isn't set in $content_struct. + * @param array $content_struct Post data to insert. + */ + protected function _insert_post( $user, $content_struct ) { + $defaults = array( 'post_status' => 'draft', 'post_type' => 'post', 'post_author' => 0, + 'post_password' => '', 'post_excerpt' => '', 'post_content' => '', 'post_title' => '' ); + + $post_data = wp_parse_args( $content_struct, $defaults ); + + $post_type = get_post_type_object( $post_data['post_type'] ); + if ( ! $post_type ) + return new IXR_Error( 403, __( 'Invalid post type' ) ); + + $update = ! empty( $post_data['ID'] ); + + if ( $update ) { + if ( ! get_post( $post_data['ID'] ) ) + return new IXR_Error( 401, __( 'Invalid post ID.' ) ); + if ( ! current_user_can( 'edit_post', $post_data['ID'] ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) ); + if ( $post_data['post_type'] != get_post_type( $post_data['ID'] ) ) + return new IXR_Error( 401, __( 'The post type may not be changed.' ) ); + } else { + if ( ! current_user_can( $post_type->cap->create_posts ) || ! current_user_can( $post_type->cap->edit_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to post on this site.' ) ); + } + + switch ( $post_data['post_status'] ) { + case 'draft': + case 'pending': + break; + case 'private': + if ( ! current_user_can( $post_type->cap->publish_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to create private posts in this post type' ) ); + break; + case 'publish': + case 'future': + if ( ! current_user_can( $post_type->cap->publish_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish posts in this post type' ) ); + break; + default: + if ( ! get_post_status_object( $post_data['post_status'] ) ) + $post_data['post_status'] = 'draft'; + break; + } + + if ( ! empty( $post_data['post_password'] ) && ! current_user_can( $post_type->cap->publish_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to create password protected posts in this post type' ) ); + + $post_data['post_author'] = absint( $post_data['post_author'] ); + if ( ! empty( $post_data['post_author'] ) && $post_data['post_author'] != $user->ID ) { + if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) + return new IXR_Error( 401, __( 'You are not allowed to create posts as this user.' ) ); + + $author = get_userdata( $post_data['post_author'] ); + + if ( ! $author ) + return new IXR_Error( 404, __( 'Invalid author ID.' ) ); + } else { + $post_data['post_author'] = $user->ID; + } + + if ( isset( $post_data['comment_status'] ) && $post_data['comment_status'] != 'open' && $post_data['comment_status'] != 'closed' ) + unset( $post_data['comment_status'] ); + + if ( isset( $post_data['ping_status'] ) && $post_data['ping_status'] != 'open' && $post_data['ping_status'] != 'closed' ) + unset( $post_data['ping_status'] ); + + // Do some timestamp voodoo + if ( ! empty( $post_data['post_date_gmt'] ) ) { + // We know this is supposed to be GMT, so we're going to slap that Z on there by force + $dateCreated = rtrim( $post_data['post_date_gmt']->getIso(), 'Z' ) . 'Z'; + } elseif ( ! empty( $post_data['post_date'] ) ) { + $dateCreated = $post_data['post_date']->getIso(); + } + + if ( ! empty( $dateCreated ) ) { + $post_data['post_date'] = get_date_from_gmt( iso8601_to_datetime( $dateCreated ) ); + $post_data['post_date_gmt'] = iso8601_to_datetime( $dateCreated, 'GMT' ); + } + + if ( ! isset( $post_data['ID'] ) ) + $post_data['ID'] = get_default_post_to_edit( $post_data['post_type'], true )->ID; + $post_ID = $post_data['ID']; + + if ( $post_data['post_type'] == 'post' ) { + // Private and password-protected posts cannot be stickied. + if ( $post_data['post_status'] == 'private' || ! empty( $post_data['post_password'] ) ) { + // Error if the client tried to stick the post, otherwise, silently unstick. + if ( ! empty( $post_data['sticky'] ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot stick a private post.' ) ); + if ( $update ) + unstick_post( $post_ID ); + } elseif ( isset( $post_data['sticky'] ) ) { + if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to stick this post.' ) ); + if ( $post_data['sticky'] ) + stick_post( $post_ID ); + else + unstick_post( $post_ID ); + } + } + + if ( isset( $post_data['post_thumbnail'] ) ) { + // empty value deletes, non-empty value adds/updates + if ( ! $post_data['post_thumbnail'] ) + delete_post_thumbnail( $post_ID ); + elseif ( ! get_post( absint( $post_data['post_thumbnail'] ) ) ) + return new IXR_Error( 404, __( 'Invalid attachment ID.' ) ); + set_post_thumbnail( $post_ID, $post_data['post_thumbnail'] ); + unset( $content_struct['post_thumbnail'] ); + } + + if ( isset( $post_data['custom_fields'] ) ) + $this->set_custom_fields( $post_ID, $post_data['custom_fields'] ); + + if ( isset( $post_data['terms'] ) || isset( $post_data['terms_names'] ) ) { + $post_type_taxonomies = get_object_taxonomies( $post_data['post_type'], 'objects' ); + + // accumulate term IDs from terms and terms_names + $terms = array(); + + // first validate the terms specified by ID + if ( isset( $post_data['terms'] ) && is_array( $post_data['terms'] ) ) { + $taxonomies = array_keys( $post_data['terms'] ); + + // validating term ids + foreach ( $taxonomies as $taxonomy ) { + if ( ! array_key_exists( $taxonomy , $post_type_taxonomies ) ) + return new IXR_Error( 401, __( 'Sorry, one of the given taxonomies is not supported by the post type.' ) ); + + if ( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->assign_terms ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign a term to one of the given taxonomies.' ) ); + + $term_ids = $post_data['terms'][$taxonomy]; + foreach ( $term_ids as $term_id ) { + $term = get_term_by( 'id', $term_id, $taxonomy ); + + if ( ! $term ) + return new IXR_Error( 403, __( 'Invalid term ID' ) ); + + $terms[$taxonomy][] = (int) $term_id; + } + } + } + + // now validate terms specified by name + if ( isset( $post_data['terms_names'] ) && is_array( $post_data['terms_names'] ) ) { + $taxonomies = array_keys( $post_data['terms_names'] ); + + foreach ( $taxonomies as $taxonomy ) { + if ( ! array_key_exists( $taxonomy , $post_type_taxonomies ) ) + return new IXR_Error( 401, __( 'Sorry, one of the given taxonomies is not supported by the post type.' ) ); + + if ( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->assign_terms ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign a term to one of the given taxonomies.' ) ); + + // for hierarchical taxonomies, we can't assign a term when multiple terms in the hierarchy share the same name + $ambiguous_terms = array(); + if ( is_taxonomy_hierarchical( $taxonomy ) ) { + $tax_term_names = get_terms( $taxonomy, array( 'fields' => 'names', 'hide_empty' => false ) ); + + // count the number of terms with the same name + $tax_term_names_count = array_count_values( $tax_term_names ); + + // filter out non-ambiguous term names + $ambiguous_tax_term_counts = array_filter( $tax_term_names_count, array( $this, '_is_greater_than_one') ); + + $ambiguous_terms = array_keys( $ambiguous_tax_term_counts ); + } + + $term_names = $post_data['terms_names'][$taxonomy]; + foreach ( $term_names as $term_name ) { + if ( in_array( $term_name, $ambiguous_terms ) ) + return new IXR_Error( 401, __( 'Ambiguous term name used in a hierarchical taxonomy. Please use term ID instead.' ) ); + + $term = get_term_by( 'name', $term_name, $taxonomy ); + + if ( ! $term ) { + // term doesn't exist, so check that the user is allowed to create new terms + if ( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->edit_terms ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to add a term to one of the given taxonomies.' ) ); + + // create the new term + $term_info = wp_insert_term( $term_name, $taxonomy ); + if ( is_wp_error( $term_info ) ) + return new IXR_Error( 500, $term_info->get_error_message() ); + + $terms[$taxonomy][] = (int) $term_info['term_id']; + } else { + $terms[$taxonomy][] = (int) $term->term_id; + } + } + } + } + + $post_data['tax_input'] = $terms; + unset( $post_data['terms'], $post_data['terms_names'] ); + } else { + // do not allow direct submission of 'tax_input', clients must use 'terms' and/or 'terms_names' + unset( $post_data['tax_input'], $post_data['post_category'], $post_data['tags_input'] ); + } + + if ( isset( $post_data['post_format'] ) ) { + $format = set_post_format( $post_ID, $post_data['post_format'] ); + + if ( is_wp_error( $format ) ) + return new IXR_Error( 500, $format->get_error_message() ); + + unset( $post_data['post_format'] ); + } + + // Handle enclosures + $enclosure = isset( $post_data['enclosure'] ) ? $post_data['enclosure'] : null; + $this->add_enclosure_if_new( $post_ID, $enclosure ); + + $this->attach_uploads( $post_ID, $post_data['post_content'] ); + + $post_data = apply_filters( 'xmlrpc_wp_insert_post_data', $post_data, $content_struct ); + + $post_ID = $update ? wp_update_post( $post_data, true ) : wp_insert_post( $post_data, true ); + if ( is_wp_error( $post_ID ) ) + return new IXR_Error( 500, $post_ID->get_error_message() ); + + if ( ! $post_ID ) + return new IXR_Error( 401, __( 'Sorry, your entry could not be posted. Something wrong happened.' ) ); + + return strval( $post_ID ); + } + + /** + * Edit a post for any registered post type. + * + * The $content_struct parameter only needs to contain fields that + * should be changed. All other fields will retain their existing values. + * + * @since 3.4.0 + * + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - int $post_id + * - array $content_struct + * @return true on success + */ + function wp_editPost( $args ) { + if ( ! $this->minimum_args( $args, 5 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $post_id = (int) $args[3]; + $content_struct = $args[4]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.editPost' ); + + $post = get_post( $post_id, ARRAY_A ); + + if ( empty( $post['ID'] ) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + if ( isset( $content_struct['if_not_modified_since'] ) ) { + // If the post has been modified since the date provided, return an error. + if ( mysql2date( 'U', $post['post_modified_gmt'] ) > $content_struct['if_not_modified_since']->getTimestamp() ) { + return new IXR_Error( 409, __( 'There is a revision of this post that is more recent.' ) ); + } + } + + // convert the date field back to IXR form + $post['post_date'] = $this->_convert_date( $post['post_date'] ); + + // ignore the existing GMT date if it is empty or a non-GMT date was supplied in $content_struct, + // since _insert_post will ignore the non-GMT date if the GMT date is set + if ( $post['post_date_gmt'] == '0000-00-00 00:00:00' || isset( $content_struct['post_date'] ) ) + unset( $post['post_date_gmt'] ); + else + $post['post_date_gmt'] = $this->_convert_date( $post['post_date_gmt'] ); + + $this->escape( $post ); + $merged_content_struct = array_merge( $post, $content_struct ); + + $retval = $this->_insert_post( $user, $merged_content_struct ); + if ( $retval instanceof IXR_Error ) + return $retval; + + return true; + } + + /** + * Delete a post for any registered post type. + * + * @since 3.4.0 + * + * @uses wp_delete_post() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - int $post_id + * @return true on success + */ + function wp_deletePost( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $post_id = (int) $args[3]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.deletePost' ); + + $post = get_post( $post_id, ARRAY_A ); + if ( empty( $post['ID'] ) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + if ( ! current_user_can( 'delete_post', $post_id ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete this post.' ) ); + + $result = wp_delete_post( $post_id ); + + if ( ! $result ) + return new IXR_Error( 500, __( 'The post cannot be deleted.' ) ); + + return true; + } + + /** + * Retrieve a post. + * + * @since 3.4.0 + * + * The optional $fields parameter specifies what fields will be included + * in the response array. This should be a list of field names. 'post_id' will + * always be included in the response regardless of the value of $fields. + * + * Instead of, or in addition to, individual field names, conceptual group + * names can be used to specify multiple fields. The available conceptual + * groups are 'post' (all basic fields), 'taxonomies', 'custom_fields', + * and 'enclosure'. + * + * @uses get_post() + * @param array $args Method parameters. Contains: + * - int $post_id + * - string $username + * - string $password + * - array $fields optional + * @return array contains (based on $fields parameter): + * - 'post_id' + * - 'post_title' + * - 'post_date' + * - 'post_date_gmt' + * - 'post_modified' + * - 'post_modified_gmt' + * - 'post_status' + * - 'post_type' + * - 'post_name' + * - 'post_author' + * - 'post_password' + * - 'post_excerpt' + * - 'post_content' + * - 'link' + * - 'comment_status' + * - 'ping_status' + * - 'sticky' + * - 'custom_fields' + * - 'terms' + * - 'categories' + * - 'tags' + * - 'enclosure' + */ + function wp_getPost( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $post_id = (int) $args[3]; + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_post_fields', array( 'post', 'terms', 'custom_fields' ), 'wp.getPost' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getPost' ); + + $post = get_post( $post_id, ARRAY_A ); + + if ( empty( $post['ID'] ) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + if ( ! current_user_can( 'edit_post', $post_id ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) ); + + return $this->_prepare_post( $post, $fields ); + } + + /** + * Retrieve posts. + * + * @since 3.4.0 + * + * The optional $filter parameter modifies the query used to retrieve posts. + * Accepted keys are 'post_type', 'post_status', 'number', 'offset', + * 'orderby', and 'order'. + * + * The optional $fields parameter specifies what fields will be included + * in the response array. + * + * @uses wp_get_recent_posts() + * @see wp_getPost() for more on $fields + * @see get_posts() for more on $filter values + * + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - array $filter optional + * - array $fields optional + * @return array contains a collection of posts. + */ + function wp_getPosts( $args ) { + if ( ! $this->minimum_args( $args, 3 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $filter = isset( $args[3] ) ? $args[3] : array(); + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_post_fields', array( 'post', 'terms', 'custom_fields' ), 'wp.getPosts' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getPosts' ); + + $query = array(); + + if ( isset( $filter['post_type'] ) ) { + $post_type = get_post_type_object( $filter['post_type'] ); + if ( ! ( (bool) $post_type ) ) + return new IXR_Error( 403, __( 'The post type specified is not valid' ) ); + } else { + $post_type = get_post_type_object( 'post' ); + } + + if ( ! current_user_can( $post_type->cap->edit_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts in this post type' )); + + $query['post_type'] = $post_type->name; + + if ( isset( $filter['post_status'] ) ) + $query['post_status'] = $filter['post_status']; + + if ( isset( $filter['number'] ) ) + $query['numberposts'] = absint( $filter['number'] ); + + if ( isset( $filter['offset'] ) ) + $query['offset'] = absint( $filter['offset'] ); + + if ( isset( $filter['orderby'] ) ) { + $query['orderby'] = $filter['orderby']; + + if ( isset( $filter['order'] ) ) + $query['order'] = $filter['order']; + } + + if ( isset( $filter['s'] ) ) { + $query['s'] = $filter['s']; + } + + $posts_list = wp_get_recent_posts( $query ); + + if ( ! $posts_list ) + return array(); + + // holds all the posts data + $struct = array(); + + foreach ( $posts_list as $post ) { + if ( ! current_user_can( 'edit_post', $post['ID'] ) ) + continue; + + $struct[] = $this->_prepare_post( $post, $fields ); + } + + return $struct; + } + + /** + * Create a new term. + * + * @since 3.4.0 + * + * @uses wp_insert_term() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - array $content_struct + * The $content_struct must contain: + * - 'name' + * - 'taxonomy' + * Also, it can optionally contain: + * - 'parent' + * - 'description' + * - 'slug' + * @return string term_id + */ + function wp_newTerm( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $content_struct = $args[3]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.newTerm' ); + + if ( ! taxonomy_exists( $content_struct['taxonomy'] ) ) + return new IXR_Error( 403, __( 'Invalid taxonomy' ) ); + + $taxonomy = get_taxonomy( $content_struct['taxonomy'] ); + + if ( ! current_user_can( $taxonomy->cap->manage_terms ) ) + return new IXR_Error( 401, __( 'You are not allowed to create terms in this taxonomy.' ) ); + + $taxonomy = (array) $taxonomy; + + // hold the data of the term + $term_data = array(); + + $term_data['name'] = trim( $content_struct['name'] ); + if ( empty( $term_data['name'] ) ) + return new IXR_Error( 403, __( 'The term name cannot be empty.' ) ); + + if ( isset( $content_struct['parent'] ) ) { + if ( ! $taxonomy['hierarchical'] ) + return new IXR_Error( 403, __( 'This taxonomy is not hierarchical.' ) ); + + $parent_term_id = (int) $content_struct['parent']; + $parent_term = get_term( $parent_term_id , $taxonomy['name'] ); + + if ( is_wp_error( $parent_term ) ) + return new IXR_Error( 500, $parent_term->get_error_message() ); + + if ( ! $parent_term ) + return new IXR_Error( 403, __( 'Parent term does not exist.' ) ); + + $term_data['parent'] = $content_struct['parent']; + } + + if ( isset( $content_struct['description'] ) ) + $term_data['description'] = $content_struct['description']; + + if ( isset( $content_struct['slug'] ) ) + $term_data['slug'] = $content_struct['slug']; + + $term = wp_insert_term( $term_data['name'] , $taxonomy['name'] , $term_data ); + + if ( is_wp_error( $term ) ) + return new IXR_Error( 500, $term->get_error_message() ); + + if ( ! $term ) + return new IXR_Error( 500, __( 'Sorry, your term could not be created. Something wrong happened.' ) ); + + return strval( $term['term_id'] ); + } + + /** + * Edit a term. + * + * @since 3.4.0 + * + * @uses wp_update_term() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - string $term_id + * - array $content_struct + * The $content_struct must contain: + * - 'taxonomy' + * Also, it can optionally contain: + * - 'name' + * - 'parent' + * - 'description' + * - 'slug' + * @return bool True, on success. + */ + function wp_editTerm( $args ) { + if ( ! $this->minimum_args( $args, 5 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $term_id = (int) $args[3]; + $content_struct = $args[4]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.editTerm' ); + + if ( ! taxonomy_exists( $content_struct['taxonomy'] ) ) + return new IXR_Error( 403, __( 'Invalid taxonomy' ) ); + + $taxonomy = get_taxonomy( $content_struct['taxonomy'] ); + + if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) + return new IXR_Error( 401, __( 'You are not allowed to edit terms in this taxonomy.' ) ); + + $taxonomy = (array) $taxonomy; + + // hold the data of the term + $term_data = array(); + + $term = get_term( $term_id , $content_struct['taxonomy'] ); + + if ( is_wp_error( $term ) ) + return new IXR_Error( 500, $term->get_error_message() ); + + if ( ! $term ) + return new IXR_Error( 404, __( 'Invalid term ID' ) ); + + if ( isset( $content_struct['name'] ) ) { + $term_data['name'] = trim( $content_struct['name'] ); + + if ( empty( $term_data['name'] ) ) + return new IXR_Error( 403, __( 'The term name cannot be empty.' ) ); + } + + if ( isset( $content_struct['parent'] ) ) { + if ( ! $taxonomy['hierarchical'] ) + return new IXR_Error( 403, __( "This taxonomy is not hierarchical so you can't set a parent." ) ); + + $parent_term_id = (int) $content_struct['parent']; + $parent_term = get_term( $parent_term_id , $taxonomy['name'] ); + + if ( is_wp_error( $parent_term ) ) + return new IXR_Error( 500, $parent_term->get_error_message() ); + + if ( ! $parent_term ) + return new IXR_Error( 403, __( 'Parent term does not exist.' ) ); + + $term_data['parent'] = $content_struct['parent']; + } + + if ( isset( $content_struct['description'] ) ) + $term_data['description'] = $content_struct['description']; + + if ( isset( $content_struct['slug'] ) ) + $term_data['slug'] = $content_struct['slug']; + + $term = wp_update_term( $term_id , $taxonomy['name'] , $term_data ); + + if ( is_wp_error( $term ) ) + return new IXR_Error( 500, $term->get_error_message() ); + + if ( ! $term ) + return new IXR_Error( 500, __( 'Sorry, editing the term failed.' ) ); + + return true; + } + + /** + * Delete a term. + * + * @since 3.4.0 + * + * @uses wp_delete_term() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - string $taxnomy_name + * - string $term_id + * @return boolean|IXR_Error If it suceeded true else a reason why not + */ + function wp_deleteTerm( $args ) { + if ( ! $this->minimum_args( $args, 5 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $taxonomy = $args[3]; + $term_id = (int) $args[4]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.deleteTerm' ); + + if ( ! taxonomy_exists( $taxonomy ) ) + return new IXR_Error( 403, __( 'Invalid taxonomy' ) ); + + $taxonomy = get_taxonomy( $taxonomy ); + + if ( ! current_user_can( $taxonomy->cap->delete_terms ) ) + return new IXR_Error( 401, __( 'You are not allowed to delete terms in this taxonomy.' ) ); + + $term = get_term( $term_id, $taxonomy->name ); + + if ( is_wp_error( $term ) ) + return new IXR_Error( 500, $term->get_error_message() ); + + if ( ! $term ) + return new IXR_Error( 404, __( 'Invalid term ID' ) ); + + $result = wp_delete_term( $term_id, $taxonomy->name ); + + if ( is_wp_error( $result ) ) + return new IXR_Error( 500, $term->get_error_message() ); + + if ( ! $result ) + return new IXR_Error( 500, __( 'Sorry, deleting the term failed.' ) ); + + return $result; + } + + /** + * Retrieve a term. + * + * @since 3.4.0 + * + * @uses get_term() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - string $taxonomy + * - string $term_id + * @return array contains: + * - 'term_id' + * - 'name' + * - 'slug' + * - 'term_group' + * - 'term_taxonomy_id' + * - 'taxonomy' + * - 'description' + * - 'parent' + * - 'count' + */ + function wp_getTerm( $args ) { + if ( ! $this->minimum_args( $args, 5 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $taxonomy = $args[3]; + $term_id = (int) $args[4]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getTerm' ); + + if ( ! taxonomy_exists( $taxonomy ) ) + return new IXR_Error( 403, __( 'Invalid taxonomy' ) ); + + $taxonomy = get_taxonomy( $taxonomy ); + + if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) + return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) ); + + $term = get_term( $term_id , $taxonomy->name, ARRAY_A ); + + if ( is_wp_error( $term ) ) + return new IXR_Error( 500, $term->get_error_message() ); + + if ( ! $term ) + return new IXR_Error( 404, __( 'Invalid term ID' ) ); + + return $this->_prepare_term( $term ); + } + + /** + * Retrieve all terms for a taxonomy. + * + * @since 3.4.0 + * + * The optional $filter parameter modifies the query used to retrieve terms. + * Accepted keys are 'number', 'offset', 'orderby', 'order', 'hide_empty', and 'search'. + * + * @uses get_terms() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - string $taxonomy + * - array $filter optional + * @return array terms + */ + function wp_getTerms( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $taxonomy = $args[3]; + $filter = isset( $args[4] ) ? $args[4] : array(); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getTerms' ); + + if ( ! taxonomy_exists( $taxonomy ) ) + return new IXR_Error( 403, __( 'Invalid taxonomy' ) ); + + $taxonomy = get_taxonomy( $taxonomy ); + + if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) + return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) ); + + $query = array(); + + if ( isset( $filter['number'] ) ) + $query['number'] = absint( $filter['number'] ); + + if ( isset( $filter['offset'] ) ) + $query['offset'] = absint( $filter['offset'] ); + + if ( isset( $filter['orderby'] ) ) { + $query['orderby'] = $filter['orderby']; + + if ( isset( $filter['order'] ) ) + $query['order'] = $filter['order']; + } + + if ( isset( $filter['hide_empty'] ) ) + $query['hide_empty'] = $filter['hide_empty']; + else + $query['get'] = 'all'; + + if ( isset( $filter['search'] ) ) + $query['search'] = $filter['search']; + + $terms = get_terms( $taxonomy->name, $query ); + + if ( is_wp_error( $terms ) ) + return new IXR_Error( 500, $terms->get_error_message() ); + + $struct = array(); + + foreach ( $terms as $term ) { + $struct[] = $this->_prepare_term( $term ); + } + + return $struct; + } + + /** + * Retrieve a taxonomy. + * + * @since 3.4.0 + * + * @uses get_taxonomy() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - string $taxonomy + * @return array (@see get_taxonomy()) + */ + function wp_getTaxonomy( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $taxonomy = $args[3]; + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_taxonomy_fields', array( 'labels', 'cap', 'object_type' ), 'wp.getTaxonomy' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getTaxonomy' ); + + if ( ! taxonomy_exists( $taxonomy ) ) + return new IXR_Error( 403, __( 'Invalid taxonomy' ) ); + + $taxonomy = get_taxonomy( $taxonomy ); + + if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) + return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) ); + + return $this->_prepare_taxonomy( $taxonomy, $fields ); + } + + /** + * Retrieve all taxonomies. + * + * @since 3.4.0 + * + * @uses get_taxonomies() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * @return array taxonomies + */ + function wp_getTaxonomies( $args ) { + if ( ! $this->minimum_args( $args, 3 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $filter = isset( $args[3] ) ? $args[3] : array( 'public' => true ); + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_taxonomy_fields', array( 'labels', 'cap', 'object_type' ), 'wp.getTaxonomies' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getTaxonomies' ); + + $taxonomies = get_taxonomies( $filter, 'objects' ); + + // holds all the taxonomy data + $struct = array(); + + foreach ( $taxonomies as $taxonomy ) { + // capability check for post_types + if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) + continue; + + $struct[] = $this->_prepare_taxonomy( $taxonomy, $fields ); + } + + return $struct; + } + + /** + * Retrieve a user. + * + * The optional $fields parameter specifies what fields will be included + * in the response array. This should be a list of field names. 'user_id' will + * always be included in the response regardless of the value of $fields. + * + * Instead of, or in addition to, individual field names, conceptual group + * names can be used to specify multiple fields. The available conceptual + * groups are 'basic' and 'all'. + * + * @uses get_userdata() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - int $user_id + * - array $fields optional + * @return array contains (based on $fields parameter): + * - 'user_id' + * - 'username' + * - 'first_name' + * - 'last_name' + * - 'registered' + * - 'bio' + * - 'email' + * - 'nickname' + * - 'nicename' + * - 'url' + * - 'display_name' + * - 'roles' + */ + function wp_getUser( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $user_id = (int) $args[3]; + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_user_fields', array( 'all' ), 'wp.getUser' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getUser' ); + + if ( ! current_user_can( 'edit_user', $user_id ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit users.' ) ); + + $user_data = get_userdata( $user_id ); + + if ( ! $user_data ) + return new IXR_Error( 404, __( 'Invalid user ID' ) ); + + return $this->_prepare_user( $user_data, $fields ); + } + + /** + * Retrieve users. + * + * The optional $filter parameter modifies the query used to retrieve users. + * Accepted keys are 'number' (default: 50), 'offset' (default: 0), 'role', + * 'who', 'orderby', and 'order'. + * + * The optional $fields parameter specifies what fields will be included + * in the response array. + * + * @uses get_users() + * @see wp_getUser() for more on $fields and return values + * + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - array $filter optional + * - array $fields optional + * @return array users data + */ + function wp_getUsers( $args ) { + if ( ! $this->minimum_args( $args, 3 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $filter = isset( $args[3] ) ? $args[3] : array(); + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_user_fields', array( 'all' ), 'wp.getUsers' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getUsers' ); + + if ( ! current_user_can( 'list_users' ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot list users.' ) ); + + $query = array( 'fields' => 'all_with_meta' ); + + $query['number'] = ( isset( $filter['number'] ) ) ? absint( $filter['number'] ) : 50; + $query['offset'] = ( isset( $filter['offset'] ) ) ? absint( $filter['offset'] ) : 0; + + if ( isset( $filter['orderby'] ) ) { + $query['orderby'] = $filter['orderby']; + + if ( isset( $filter['order'] ) ) + $query['order'] = $filter['order']; + } + + if ( isset( $filter['role'] ) ) { + if ( get_role( $filter['role'] ) === null ) + return new IXR_Error( 403, __( 'The role specified is not valid' ) ); + + $query['role'] = $filter['role']; + } + + if ( isset( $filter['who'] ) ) { + $query['who'] = $filter['who']; + } + + $users = get_users( $query ); + + $_users = array(); + foreach ( $users as $user_data ) { + if ( current_user_can( 'edit_user', $user_data->ID ) ) + $_users[] = $this->_prepare_user( $user_data, $fields ); + } + return $_users; + } + + /** + * Retrieve information about the requesting user. + * + * @uses get_userdata() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - array $fields optional + * @return array (@see wp_getUser) + */ + function wp_getProfile( $args ) { + if ( ! $this->minimum_args( $args, 3 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( isset( $args[3] ) ) + $fields = $args[3]; + else + $fields = apply_filters( 'xmlrpc_default_user_fields', array( 'all' ), 'wp.getProfile' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getProfile' ); + + if ( ! current_user_can( 'edit_user', $user->ID ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit your profile.' ) ); + + $user_data = get_userdata( $user->ID ); + + return $this->_prepare_user( $user_data, $fields ); + } + + /** + * Edit user's profile. + * + * @uses wp_update_user() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - array $content_struct + * It can optionally contain: + * - 'first_name' + * - 'last_name' + * - 'website' + * - 'display_name' + * - 'nickname' + * - 'nicename' + * - 'bio' + * @return bool True, on success. + */ + function wp_editProfile( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $content_struct = $args[3]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.editProfile' ); + + if ( ! current_user_can( 'edit_user', $user->ID ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit your profile.' ) ); + + // holds data of the user + $user_data = array(); + $user_data['ID'] = $user->ID; + + // only set the user details if it was given + if ( isset( $content_struct['first_name'] ) ) + $user_data['first_name'] = $content_struct['first_name']; + + if ( isset( $content_struct['last_name'] ) ) + $user_data['last_name'] = $content_struct['last_name']; + + if ( isset( $content_struct['url'] ) ) + $user_data['user_url'] = $content_struct['url']; + + if ( isset( $content_struct['display_name'] ) ) + $user_data['display_name'] = $content_struct['display_name']; + + if ( isset( $content_struct['nickname'] ) ) + $user_data['nickname'] = $content_struct['nickname']; + + if ( isset( $content_struct['nicename'] ) ) + $user_data['user_nicename'] = $content_struct['nicename']; + + if ( isset( $content_struct['bio'] ) ) + $user_data['description'] = $content_struct['bio']; + + $result = wp_update_user( $user_data ); + + if ( is_wp_error( $result ) ) + return new IXR_Error( 500, $result->get_error_message() ); + + if ( ! $result ) + return new IXR_Error( 500, __( 'Sorry, the user cannot be updated.' ) ); + + return true; + } + + /** + * Retrieve page. + * + * @since 2.2.0 + * + * @param array $args Method parameters. Contains: + * - blog_id + * - page_id + * - username + * - password + * @return array + */ + function wp_getPage($args) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $page_id = (int) $args[1]; + $username = $args[2]; + $password = $args[3]; + + if ( !$user = $this->login($username, $password) ) { + return $this->error; + } + + $page = get_post($page_id); + if ( ! $page ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + if ( !current_user_can( 'edit_page', $page_id ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit this page.' ) ); + + do_action('xmlrpc_call', 'wp.getPage'); + + // If we found the page then format the data. + if ( $page->ID && ($page->post_type == 'page') ) { + return $this->_prepare_page( $page ); + } + // If the page doesn't exist indicate that. + else { + return(new IXR_Error(404, __('Sorry, no such page.'))); + } + } + + /** + * Retrieve Pages. + * + * @since 2.2.0 + * + * @param array $args Method parameters. Contains: + * - blog_id + * - username + * - password + * - num_pages + * @return array + */ + function wp_getPages($args) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $num_pages = isset($args[3]) ? (int) $args[3] : 10; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'edit_pages' ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit pages.' ) ); + + do_action('xmlrpc_call', 'wp.getPages'); + + $pages = get_posts( array('post_type' => 'page', 'post_status' => 'any', 'numberposts' => $num_pages) ); + $num_pages = count($pages); + + // If we have pages, put together their info. + if ( $num_pages >= 1 ) { + $pages_struct = array(); + + foreach ($pages as $page) { + if ( current_user_can( 'edit_page', $page->ID ) ) + $pages_struct[] = $this->_prepare_page( $page ); + } + + return($pages_struct); + } + // If no pages were found return an error. + else { + return(array()); + } + } + + /** + * Create new page. + * + * @since 2.2.0 + * + * @param array $args Method parameters. See {@link wp_xmlrpc_server::mw_newPost()} + * @return unknown + */ + function wp_newPage($args) { + // Items not escaped here will be escaped in newPost. + $username = $this->escape($args[1]); + $password = $this->escape($args[2]); + $page = $args[3]; + $publish = $args[4]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'wp.newPage'); + + // Mark this as content for a page. + $args[3]["post_type"] = 'page'; + + // Let mw_newPost do all of the heavy lifting. + return($this->mw_newPost($args)); + } + + /** + * Delete page. + * + * @since 2.2.0 + * + * @param array $args Method parameters. + * @return bool True, if success. + */ + function wp_deletePage($args) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $page_id = (int) $args[3]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'wp.deletePage'); + + // Get the current page based on the page_id and + // make sure it is a page and not a post. + $actual_page = get_post($page_id, ARRAY_A); + if ( !$actual_page || ($actual_page['post_type'] != 'page') ) + return(new IXR_Error(404, __('Sorry, no such page.'))); + + // Make sure the user can delete pages. + if ( !current_user_can('delete_page', $page_id) ) + return(new IXR_Error(401, __('Sorry, you do not have the right to delete this page.'))); + + // Attempt to delete the page. + $result = wp_delete_post($page_id); + if ( !$result ) + return(new IXR_Error(500, __('Failed to delete the page.'))); + + do_action( 'xmlrpc_call_success_wp_deletePage', $page_id, $args ); + + return(true); + } + + /** + * Edit page. + * + * @since 2.2.0 + * + * @param array $args Method parameters. + * @return unknown + */ + function wp_editPage($args) { + // Items not escaped here will be escaped in editPost. + $blog_id = (int) $args[0]; + $page_id = (int) $this->escape($args[1]); + $username = $this->escape($args[2]); + $password = $this->escape($args[3]); + $content = $args[4]; + $publish = $args[5]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'wp.editPage'); + + // Get the page data and make sure it is a page. + $actual_page = get_post($page_id, ARRAY_A); + if ( !$actual_page || ($actual_page['post_type'] != 'page') ) + return(new IXR_Error(404, __('Sorry, no such page.'))); + + // Make sure the user is allowed to edit pages. + if ( !current_user_can('edit_page', $page_id) ) + return(new IXR_Error(401, __('Sorry, you do not have the right to edit this page.'))); + + // Mark this as content for a page. + $content['post_type'] = 'page'; + + // Arrange args in the way mw_editPost understands. + $args = array( + $page_id, + $username, + $password, + $content, + $publish + ); + + // Let mw_editPost do all of the heavy lifting. + return($this->mw_editPost($args)); + } + + /** + * Retrieve page list. + * + * @since 2.2.0 + * + * @param array $args Method parameters. + * @return unknown + */ + function wp_getPageList($args) { + global $wpdb; + + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'edit_pages' ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit pages.' ) ); + + do_action('xmlrpc_call', 'wp.getPageList'); + + // Get list of pages ids and titles + $page_list = $wpdb->get_results(" + SELECT ID page_id, + post_title page_title, + post_parent page_parent_id, + post_date_gmt, + post_date, + post_status + FROM {$wpdb->posts} + WHERE post_type = 'page' + ORDER BY ID + "); + + // The date needs to be formatted properly. + $num_pages = count($page_list); + for ( $i = 0; $i < $num_pages; $i++ ) { + $page_list[$i]->dateCreated = $this->_convert_date( $page_list[$i]->post_date ); + $page_list[$i]->date_created_gmt = $this->_convert_date_gmt( $page_list[$i]->post_date_gmt, $page_list[$i]->post_date ); + + unset($page_list[$i]->post_date_gmt); + unset($page_list[$i]->post_date); + unset($page_list[$i]->post_status); + } + + return($page_list); + } + + /** + * Retrieve authors list. + * + * @since 2.2.0 + * + * @param array $args Method parameters. + * @return array + */ + function wp_getAuthors($args) { + + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can('edit_posts') ) + return(new IXR_Error(401, __('Sorry, you cannot edit posts on this site.'))); + + do_action('xmlrpc_call', 'wp.getAuthors'); + + $authors = array(); + foreach ( get_users( array( 'fields' => array('ID','user_login','display_name') ) ) as $user ) { + $authors[] = array( + 'user_id' => $user->ID, + 'user_login' => $user->user_login, + 'display_name' => $user->display_name + ); + } + + return $authors; + } + + /** + * Get list of all tags + * + * @since 2.7.0 + * + * @param array $args Method parameters. + * @return array + */ + function wp_getTags( $args ) { + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'edit_posts' ) ) + return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this site in order to view tags.' ) ); + + do_action( 'xmlrpc_call', 'wp.getKeywords' ); + + $tags = array(); + + if ( $all_tags = get_tags() ) { + foreach( (array) $all_tags as $tag ) { + $struct['tag_id'] = $tag->term_id; + $struct['name'] = $tag->name; + $struct['count'] = $tag->count; + $struct['slug'] = $tag->slug; + $struct['html_url'] = esc_html( get_tag_link( $tag->term_id ) ); + $struct['rss_url'] = esc_html( get_tag_feed_link( $tag->term_id ) ); + + $tags[] = $struct; + } + } + + return $tags; + } + + /** + * Create new category. + * + * @since 2.2.0 + * + * @param array $args Method parameters. + * @return int Category ID. + */ + function wp_newCategory($args) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $category = $args[3]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'wp.newCategory'); + + // Make sure the user is allowed to add a category. + if ( !current_user_can('manage_categories') ) + return(new IXR_Error(401, __('Sorry, you do not have the right to add a category.'))); + + // If no slug was provided make it empty so that + // WordPress will generate one. + if ( empty($category['slug']) ) + $category['slug'] = ''; + + // If no parent_id was provided make it empty + // so that it will be a top level page (no parent). + if ( !isset($category['parent_id']) ) + $category['parent_id'] = ''; + + // If no description was provided make it empty. + if ( empty($category["description"]) ) + $category["description"] = ""; + + $new_category = array( + 'cat_name' => $category['name'], + 'category_nicename' => $category['slug'], + 'category_parent' => $category['parent_id'], + 'category_description' => $category['description'] + ); + + $cat_id = wp_insert_category($new_category, true); + if ( is_wp_error( $cat_id ) ) { + if ( 'term_exists' == $cat_id->get_error_code() ) + return (int) $cat_id->get_error_data(); + else + return(new IXR_Error(500, __('Sorry, the new category failed.'))); + } elseif ( ! $cat_id ) { + return(new IXR_Error(500, __('Sorry, the new category failed.'))); + } + + do_action( 'xmlrpc_call_success_wp_newCategory', $cat_id, $args ); + + return $cat_id; + } + + /** + * Remove category. + * + * @since 2.5.0 + * + * @param array $args Method parameters. + * @return mixed See {@link wp_delete_term()} for return info. + */ + function wp_deleteCategory($args) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $category_id = (int) $args[3]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'wp.deleteCategory'); + + if ( !current_user_can('manage_categories') ) + return new IXR_Error( 401, __( 'Sorry, you do not have the right to delete a category.' ) ); + + $status = wp_delete_term( $category_id, 'category' ); + + if( true == $status ) + do_action( 'xmlrpc_call_success_wp_deleteCategory', $category_id, $args ); + + return $status; + } + + /** + * Retrieve category list. + * + * @since 2.2.0 + * + * @param array $args Method parameters. + * @return array + */ + function wp_suggestCategories($args) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $category = $args[3]; + $max_results = (int) $args[4]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'edit_posts' ) ) + return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts to this site in order to view categories.' ) ); + + do_action('xmlrpc_call', 'wp.suggestCategories'); + + $category_suggestions = array(); + $args = array('get' => 'all', 'number' => $max_results, 'name__like' => $category); + foreach ( (array) get_categories($args) as $cat ) { + $category_suggestions[] = array( + 'category_id' => $cat->term_id, + 'category_name' => $cat->name + ); + } + + return($category_suggestions); + } + + /** + * Retrieve comment. + * + * @since 2.7.0 + * + * @param array $args Method parameters. + * @return array + */ + function wp_getComment($args) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $comment_id = (int) $args[3]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'moderate_comments' ) ) + return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this site.' ) ); + + do_action('xmlrpc_call', 'wp.getComment'); + + if ( ! $comment = get_comment($comment_id) ) + return new IXR_Error( 404, __( 'Invalid comment ID.' ) ); + + return $this->_prepare_comment( $comment ); + } + + /** + * Retrieve comments. + * + * Besides the common blog_id, username, and password arguments, it takes a filter + * array as last argument. + * + * Accepted 'filter' keys are 'status', 'post_id', 'offset', and 'number'. + * + * The defaults are as follows: + * - 'status' - Default is ''. Filter by status (e.g., 'approve', 'hold') + * - 'post_id' - Default is ''. The post where the comment is posted. Empty string shows all comments. + * - 'number' - Default is 10. Total number of media items to retrieve. + * - 'offset' - Default is 0. See {@link WP_Query::query()} for more. + * + * @since 2.7.0 + * + * @param array $args Method parameters. + * @return array. Contains a collection of comments. See {@link wp_xmlrpc_server::wp_getComment()} for a description of each item contents + */ + function wp_getComments($args) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $struct = isset( $args[3] ) ? $args[3] : array(); + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'moderate_comments' ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit comments.' ) ); + + do_action('xmlrpc_call', 'wp.getComments'); + + if ( isset($struct['status']) ) + $status = $struct['status']; + else + $status = ''; + + $post_id = ''; + if ( isset($struct['post_id']) ) + $post_id = absint($struct['post_id']); + + $offset = 0; + if ( isset($struct['offset']) ) + $offset = absint($struct['offset']); + + $number = 10; + if ( isset($struct['number']) ) + $number = absint($struct['number']); + + $comments = get_comments( array('status' => $status, 'post_id' => $post_id, 'offset' => $offset, 'number' => $number ) ); + + $comments_struct = array(); + + foreach ( $comments as $comment ) { + $comments_struct[] = $this->_prepare_comment( $comment ); + } + + return $comments_struct; + } + + /** + * Delete a comment. + * + * By default, the comment will be moved to the trash instead of deleted. + * See {@link wp_delete_comment()} for more information on + * this behavior. + * + * @since 2.7.0 + * + * @param array $args Method parameters. Contains: + * - blog_id + * - username + * - password + * - comment_id + * @return mixed {@link wp_delete_comment()} + */ + function wp_deleteComment($args) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $comment_ID = (int) $args[3]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'moderate_comments' ) ) + return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this site.' ) ); + + if ( ! get_comment($comment_ID) ) + return new IXR_Error( 404, __( 'Invalid comment ID.' ) ); + + if ( !current_user_can( 'edit_comment', $comment_ID ) ) + return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this site.' ) ); + + do_action('xmlrpc_call', 'wp.deleteComment'); + + $status = wp_delete_comment( $comment_ID ); + + if( true == $status ) + do_action( 'xmlrpc_call_success_wp_deleteComment', $comment_ID, $args ); + + return $status; + } + + /** + * Edit comment. + * + * Besides the common blog_id, username, and password arguments, it takes a + * comment_id integer and a content_struct array as last argument. + * + * The allowed keys in the content_struct array are: + * - 'author' + * - 'author_url' + * - 'author_email' + * - 'content' + * - 'date_created_gmt' + * - 'status'. Common statuses are 'approve', 'hold', 'spam'. See {@link get_comment_statuses()} for more details + * + * @since 2.7.0 + * + * @param array $args. Contains: + * - blog_id + * - username + * - password + * - comment_id + * - content_struct + * @return bool True, on success. + */ + function wp_editComment($args) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $comment_ID = (int) $args[3]; + $content_struct = $args[4]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'moderate_comments' ) ) + return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this site.' ) ); + + if ( ! get_comment($comment_ID) ) + return new IXR_Error( 404, __( 'Invalid comment ID.' ) ); + + if ( !current_user_can( 'edit_comment', $comment_ID ) ) + return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this site.' ) ); + + do_action('xmlrpc_call', 'wp.editComment'); + + if ( isset($content_struct['status']) ) { + $statuses = get_comment_statuses(); + $statuses = array_keys($statuses); + + if ( ! in_array($content_struct['status'], $statuses) ) + return new IXR_Error( 401, __( 'Invalid comment status.' ) ); + $comment_approved = $content_struct['status']; + } + + // Do some timestamp voodoo + if ( !empty( $content_struct['date_created_gmt'] ) ) { + // We know this is supposed to be GMT, so we're going to slap that Z on there by force + $dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z'; + $comment_date = get_date_from_gmt(iso8601_to_datetime($dateCreated)); + $comment_date_gmt = iso8601_to_datetime($dateCreated, 'GMT'); + } + + if ( isset($content_struct['content']) ) + $comment_content = $content_struct['content']; + + if ( isset($content_struct['author']) ) + $comment_author = $content_struct['author']; + + if ( isset($content_struct['author_url']) ) + $comment_author_url = $content_struct['author_url']; + + if ( isset($content_struct['author_email']) ) + $comment_author_email = $content_struct['author_email']; + + // We've got all the data -- post it: + $comment = compact('comment_ID', 'comment_content', 'comment_approved', 'comment_date', 'comment_date_gmt', 'comment_author', 'comment_author_email', 'comment_author_url'); + + $result = wp_update_comment($comment); + if ( is_wp_error( $result ) ) + return new IXR_Error(500, $result->get_error_message()); + + if ( !$result ) + return new IXR_Error(500, __('Sorry, the comment could not be edited. Something wrong happened.')); + + do_action( 'xmlrpc_call_success_wp_editComment', $comment_ID, $args ); + + return true; + } + + /** + * Create new comment. + * + * @since 2.7.0 + * + * @param array $args Method parameters. + * @return mixed {@link wp_new_comment()} + */ + function wp_newComment($args) { + global $wpdb; + + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $post = $args[3]; + $content_struct = $args[4]; + + $allow_anon = apply_filters('xmlrpc_allow_anonymous_comments', false); + + $user = $this->login($username, $password); + + if ( !$user ) { + $logged_in = false; + if ( $allow_anon && get_option('comment_registration') ) + return new IXR_Error( 403, __( 'You must be registered to comment' ) ); + else if ( !$allow_anon ) + return $this->error; + } else { + $logged_in = true; + } + + if ( is_numeric($post) ) + $post_id = absint($post); + else + $post_id = url_to_postid($post); + + if ( ! $post_id ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + if ( ! get_post($post_id) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + $comment['comment_post_ID'] = $post_id; + + if ( $logged_in ) { + $comment['comment_author'] = $this->escape( $user->display_name ); + $comment['comment_author_email'] = $this->escape( $user->user_email ); + $comment['comment_author_url'] = $this->escape( $user->user_url ); + $comment['user_ID'] = $user->ID; + } else { + $comment['comment_author'] = ''; + if ( isset($content_struct['author']) ) + $comment['comment_author'] = $content_struct['author']; + + $comment['comment_author_email'] = ''; + if ( isset($content_struct['author_email']) ) + $comment['comment_author_email'] = $content_struct['author_email']; + + $comment['comment_author_url'] = ''; + if ( isset($content_struct['author_url']) ) + $comment['comment_author_url'] = $content_struct['author_url']; + + $comment['user_ID'] = 0; + + if ( get_option('require_name_email') ) { + if ( 6 > strlen($comment['comment_author_email']) || '' == $comment['comment_author'] ) + return new IXR_Error( 403, __( 'Comment author name and email are required' ) ); + elseif ( !is_email($comment['comment_author_email']) ) + return new IXR_Error( 403, __( 'A valid email address is required' ) ); + } + } + + $comment['comment_parent'] = isset($content_struct['comment_parent']) ? absint($content_struct['comment_parent']) : 0; + + $comment['comment_content'] = isset($content_struct['content']) ? $content_struct['content'] : null; + + do_action('xmlrpc_call', 'wp.newComment'); + + $comment_ID = wp_new_comment( $comment ); + + do_action( 'xmlrpc_call_success_wp_newComment', $comment_ID, $args ); + + return $comment_ID; + } + + /** + * Retrieve all of the comment status. + * + * @since 2.7.0 + * + * @param array $args Method parameters. + * @return array + */ + function wp_getCommentStatusList($args) { + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'moderate_comments' ) ) + return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) ); + + do_action('xmlrpc_call', 'wp.getCommentStatusList'); + + return get_comment_statuses(); + } + + /** + * Retrieve comment count. + * + * @since 2.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function wp_getCommentCount( $args ) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $post_id = (int) $args[3]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'edit_posts' ) ) + return new IXR_Error( 403, __( 'You are not allowed access to details about comments.' ) ); + + do_action('xmlrpc_call', 'wp.getCommentCount'); + + $count = wp_count_comments( $post_id ); + return array( + 'approved' => $count->approved, + 'awaiting_moderation' => $count->moderated, + 'spam' => $count->spam, + 'total_comments' => $count->total_comments + ); + } + + /** + * Retrieve post statuses. + * + * @since 2.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function wp_getPostStatusList( $args ) { + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'edit_posts' ) ) + return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) ); + + do_action('xmlrpc_call', 'wp.getPostStatusList'); + + return get_post_statuses(); + } + + /** + * Retrieve page statuses. + * + * @since 2.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function wp_getPageStatusList( $args ) { + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'edit_pages' ) ) + return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) ); + + do_action('xmlrpc_call', 'wp.getPageStatusList'); + + return get_page_statuses(); + } + + /** + * Retrieve page templates. + * + * @since 2.6.0 + * + * @param array $args Method parameters. + * @return array + */ + function wp_getPageTemplates( $args ) { + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'edit_pages' ) ) + return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) ); + + $templates = get_page_templates(); + $templates['Default'] = 'default'; + + return $templates; + } + + /** + * Retrieve blog options. + * + * @since 2.6.0 + * + * @param array $args Method parameters. + * @return array + */ + function wp_getOptions( $args ) { + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $options = isset( $args[3] ) ? (array) $args[3] : array(); + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + // If no specific options where asked for, return all of them + if ( count( $options ) == 0 ) + $options = array_keys($this->blog_options); + + return $this->_getOptions($options); + } + + /** + * Retrieve blog options value from list. + * + * @since 2.6.0 + * + * @param array $options Options to retrieve. + * @return array + */ + function _getOptions($options) { + $data = array(); + $can_manage = current_user_can( 'manage_options' ); + foreach ( $options as $option ) { + if ( array_key_exists( $option, $this->blog_options ) ) { + $data[$option] = $this->blog_options[$option]; + //Is the value static or dynamic? + if ( isset( $data[$option]['option'] ) ) { + $data[$option]['value'] = get_option( $data[$option]['option'] ); + unset($data[$option]['option']); + } + + if ( ! $can_manage ) + $data[$option]['readonly'] = true; + } + } + + return $data; + } + + /** + * Update blog options. + * + * @since 2.6.0 + * + * @param array $args Method parameters. + * @return unknown + */ + function wp_setOptions( $args ) { + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $options = (array) $args[3]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'manage_options' ) ) + return new IXR_Error( 403, __( 'You are not allowed to update options.' ) ); + + foreach ( $options as $o_name => $o_value ) { + $option_names[] = $o_name; + if ( !array_key_exists( $o_name, $this->blog_options ) ) + continue; + + if ( $this->blog_options[$o_name]['readonly'] == true ) + continue; + + update_option( $this->blog_options[$o_name]['option'], $o_value ); + } + + //Now return the updated values + return $this->_getOptions($option_names); + } + + /** + * Retrieve a media item by ID + * + * @since 3.1.0 + * + * @param array $args Method parameters. Contains: + * - blog_id + * - username + * - password + * - attachment_id + * @return array. Associative array containing: + * - 'date_created_gmt' + * - 'parent' + * - 'link' + * - 'thumbnail' + * - 'title' + * - 'caption' + * - 'description' + * - 'metadata' + */ + function wp_getMediaItem($args) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $attachment_id = (int) $args[3]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'upload_files' ) ) + return new IXR_Error( 403, __( 'You do not have permission to upload files.' ) ); + + do_action('xmlrpc_call', 'wp.getMediaItem'); + + if ( ! $attachment = get_post($attachment_id) ) + return new IXR_Error( 404, __( 'Invalid attachment ID.' ) ); + + return $this->_prepare_media_item( $attachment ); + } + + /** + * Retrieves a collection of media library items (or attachments) + * + * Besides the common blog_id, username, and password arguments, it takes a filter + * array as last argument. + * + * Accepted 'filter' keys are 'parent_id', 'mime_type', 'offset', and 'number'. + * + * The defaults are as follows: + * - 'number' - Default is 5. Total number of media items to retrieve. + * - 'offset' - Default is 0. See {@link WP_Query::query()} for more. + * - 'parent_id' - Default is ''. The post where the media item is attached. Empty string shows all media items. 0 shows unattached media items. + * - 'mime_type' - Default is ''. Filter by mime type (e.g., 'image/jpeg', 'application/pdf') + * + * @since 3.1.0 + * + * @param array $args Method parameters. Contains: + * - blog_id + * - username + * - password + * - filter + * @return array. Contains a collection of media items. See {@link wp_xmlrpc_server::wp_getMediaItem()} for a description of each item contents + */ + function wp_getMediaLibrary($args) { + $this->escape($args); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $struct = isset( $args[3] ) ? $args[3] : array() ; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'upload_files' ) ) + return new IXR_Error( 401, __( 'You do not have permission to upload files.' ) ); + + do_action('xmlrpc_call', 'wp.getMediaLibrary'); + + $parent_id = ( isset($struct['parent_id']) ) ? absint($struct['parent_id']) : '' ; + $mime_type = ( isset($struct['mime_type']) ) ? $struct['mime_type'] : '' ; + $offset = ( isset($struct['offset']) ) ? absint($struct['offset']) : 0 ; + $number = ( isset($struct['number']) ) ? absint($struct['number']) : -1 ; + + $attachments = get_posts( array('post_type' => 'attachment', 'post_parent' => $parent_id, 'offset' => $offset, 'numberposts' => $number, 'post_mime_type' => $mime_type ) ); + + $attachments_struct = array(); + + foreach ($attachments as $attachment ) + $attachments_struct[] = $this->_prepare_media_item( $attachment ); + + return $attachments_struct; + } + + /** + * Retrieves a list of post formats used by the site + * + * @since 3.1 + * + * @param array $args Method parameters. Contains: + * - blog_id + * - username + * - password + * @return array + */ + function wp_getPostFormats( $args ) { + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login( $username, $password ) ) + return $this->error; + + if ( !current_user_can( 'edit_posts' ) ) + return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) ); + + do_action( 'xmlrpc_call', 'wp.getPostFormats' ); + + $formats = get_post_format_strings(); + + # find out if they want a list of currently supports formats + if ( isset( $args[3] ) && is_array( $args[3] ) ) { + if ( $args[3]['show-supported'] ) { + if ( current_theme_supports( 'post-formats' ) ) { + $supported = get_theme_support( 'post-formats' ); + + $data['all'] = $formats; + $data['supported'] = $supported[0]; + + $formats = $data; + } + } + } + + return $formats; + } + + /** + * Retrieves a post type + * + * @since 3.4.0 + * + * @uses get_post_type_object() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - string $post_type_name + * - array $fields + * @return array contains: + * - 'labels' + * - 'description' + * - 'capability_type' + * - 'cap' + * - 'map_meta_cap' + * - 'hierarchical' + * - 'menu_position' + * - 'taxonomies' + * - 'supports' + */ + function wp_getPostType( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $post_type_name = $args[3]; + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_posttype_fields', array( 'labels', 'cap', 'taxonomies' ), 'wp.getPostType' ); + + if ( !$user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getPostType' ); + + if( ! post_type_exists( $post_type_name ) ) + return new IXR_Error( 403, __( 'Invalid post type' ) ); + + $post_type = get_post_type_object( $post_type_name ); + + if( ! current_user_can( $post_type->cap->edit_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post type.' ) ); + + return $this->_prepare_post_type( $post_type, $fields ); + } + + /** + * Retrieves a post types + * + * @since 3.4.0 + * + * @uses get_post_types() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - array $filter + * - array $fields + * @return array + */ + function wp_getPostTypes( $args ) { + if ( ! $this->minimum_args( $args, 3 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $filter = isset( $args[3] ) ? $args[3] : array( 'public' => true ); + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_posttype_fields', array( 'labels', 'cap', 'taxonomies' ), 'wp.getPostTypes' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getPostTypes' ); + + $post_types = get_post_types( $filter, 'objects' ); + + $struct = array(); + + foreach( $post_types as $post_type ) { + if( ! current_user_can( $post_type->cap->edit_posts ) ) + continue; + + $struct[$post_type->name] = $this->_prepare_post_type( $post_type, $fields ); + } + + return $struct; + } + + /** + * Retrieve revisions for a specific post. + * + * @since 3.5.0 + * + * The optional $fields parameter specifies what fields will be included + * in the response array. + * + * @uses wp_get_post_revisions() + * @see wp_getPost() for more on $fields + * + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - int $post_id + * - array $fields + * @return array contains a collection of posts. + */ + function wp_getRevisions( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $post_id = (int) $args[3]; + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_revision_fields', array( 'post_date', 'post_date_gmt' ), 'wp.getRevisions' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getRevisions' ); + + if ( ! $post = get_post( $post_id ) ) + return new IXR_Error( 404, __( 'Invalid post ID' ) ); + + if ( ! current_user_can( 'edit_post', $post_id ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts.' ) ); + + // Check if revisions are enabled. + if ( ! wp_revisions_enabled( $post ) ) + return new IXR_Error( 401, __( 'Sorry, revisions are disabled.' ) ); + + $revisions = wp_get_post_revisions( $post_id ); + + if ( ! $revisions ) + return array(); + + $struct = array(); + + foreach ( $revisions as $revision ) { + if ( ! current_user_can( 'read_post', $revision->ID ) ) + continue; + + // Skip autosaves + if ( wp_is_post_autosave( $revision ) ) + continue; + + $struct[] = $this->_prepare_post( get_object_vars( $revision ), $fields ); + } + + return $struct; + } + + /** + * Restore a post revision + * + * @since 3.5.0 + * + * @uses wp_restore_post_revision() + * + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - int $post_id + * @return bool false if there was an error restoring, true if success. + */ + function wp_restoreRevision( $args ) { + if ( ! $this->minimum_args( $args, 3 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $revision_id = (int) $args[3]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.restoreRevision' ); + + if ( ! $revision = wp_get_post_revision( $revision_id ) ) + return new IXR_Error( 404, __( 'Invalid post ID' ) ); + + if ( wp_is_post_autosave( $revision ) ) + return new IXR_Error( 404, __( 'Invalid post ID' ) ); + + if ( ! $post = get_post( $revision->post_parent ) ) + return new IXR_Error( 404, __( 'Invalid post ID' ) ); + + if ( ! current_user_can( 'edit_post', $revision->post_parent ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) ); + + // Check if revisions are disabled. + if ( ! wp_revisions_enabled( $post ) ) + return new IXR_Error( 401, __( 'Sorry, revisions are disabled.' ) ); + + $post = wp_restore_post_revision( $revision_id ); + + return (bool) $post; + } + + /* Blogger API functions. + * specs on http://plant.blogger.com/api and http://groups.yahoo.com/group/bloggerDev/ + */ + + /** + * Retrieve blogs that user owns. + * + * Will make more sense once we support multiple blogs. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function blogger_getUsersBlogs($args) { + if ( is_multisite() ) + return $this->_multisite_getUsersBlogs($args); + + $this->escape($args); + + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'blogger.getUsersBlogs'); + + $is_admin = current_user_can('manage_options'); + + $struct = array( + 'isAdmin' => $is_admin, + 'url' => get_option('home') . '/', + 'blogid' => '1', + 'blogName' => get_option('blogname'), + 'xmlrpc' => site_url( 'xmlrpc.php', 'rpc' ), + ); + + return array($struct); + } + + /** + * Private function for retrieving a users blogs for multisite setups + * + * @access protected + */ + function _multisite_getUsersBlogs($args) { + $current_blog = get_blog_details(); + + $domain = $current_blog->domain; + $path = $current_blog->path . 'xmlrpc.php'; + + $rpc = new IXR_Client( set_url_scheme( "http://{$domain}{$path}" ) ); + $rpc->query('wp.getUsersBlogs', $args[1], $args[2]); + $blogs = $rpc->getResponse(); + + if ( isset($blogs['faultCode']) ) + return new IXR_Error($blogs['faultCode'], $blogs['faultString']); + + if ( $_SERVER['HTTP_HOST'] == $domain && $_SERVER['REQUEST_URI'] == $path ) { + return $blogs; + } else { + foreach ( (array) $blogs as $blog ) { + if ( strpos($blog['url'], $_SERVER['HTTP_HOST']) ) + return array($blog); + } + return array(); + } + } + + /** + * Retrieve user's data. + * + * Gives your client some info about you, so you don't have to. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function blogger_getUserInfo($args) { + + $this->escape($args); + + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'edit_posts' ) ) + return new IXR_Error( 401, __( 'Sorry, you do not have access to user data on this site.' ) ); + + do_action('xmlrpc_call', 'blogger.getUserInfo'); + + $struct = array( + 'nickname' => $user->nickname, + 'userid' => $user->ID, + 'url' => $user->user_url, + 'lastname' => $user->last_name, + 'firstname' => $user->first_name + ); + + return $struct; + } + + /** + * Retrieve post. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function blogger_getPost($args) { + + $this->escape($args); + + $post_ID = (int) $args[1]; + $username = $args[2]; + $password = $args[3]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + $post_data = get_post($post_ID, ARRAY_A); + if ( ! $post_data ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + if ( !current_user_can( 'edit_post', $post_ID ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) ); + + do_action('xmlrpc_call', 'blogger.getPost'); + + $categories = implode(',', wp_get_post_categories($post_ID)); + + $content = '<title>'.wp_unslash($post_data['post_title']).''; + $content .= ''.$categories.''; + $content .= wp_unslash($post_data['post_content']); + + $struct = array( + 'userid' => $post_data['post_author'], + 'dateCreated' => $this->_convert_date( $post_data['post_date'] ), + 'content' => $content, + 'postid' => (string) $post_data['ID'] + ); + + return $struct; + } + + /** + * Retrieve list of recent posts. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function blogger_getRecentPosts($args) { + + $this->escape($args); + + // $args[0] = appkey - ignored + $blog_ID = (int) $args[1]; /* though we don't use it yet */ + $username = $args[2]; + $password = $args[3]; + if ( isset( $args[4] ) ) + $query = array( 'numberposts' => absint( $args[4] ) ); + else + $query = array(); + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( ! current_user_can( 'edit_posts' ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit posts on this site.' ) ); + + do_action('xmlrpc_call', 'blogger.getRecentPosts'); + + $posts_list = wp_get_recent_posts( $query ); + + if ( !$posts_list ) { + $this->error = new IXR_Error(500, __('Either there are no posts, or something went wrong.')); + return $this->error; + } + + foreach ($posts_list as $entry) { + if ( !current_user_can( 'edit_post', $entry['ID'] ) ) + continue; + + $post_date = $this->_convert_date( $entry['post_date'] ); + $categories = implode(',', wp_get_post_categories($entry['ID'])); + + $content = ''.wp_unslash($entry['post_title']).''; + $content .= ''.$categories.''; + $content .= wp_unslash($entry['post_content']); + + $struct[] = array( + 'userid' => $entry['post_author'], + 'dateCreated' => $post_date, + 'content' => $content, + 'postid' => (string) $entry['ID'], + ); + + } + + $recent_posts = array(); + for ( $j=0; $jescape($args); + + $blog_ID = (int) $args[1]; /* though we don't use it yet */ + $username = $args[2]; + $password = $args[3]; + $content = $args[4]; + $publish = $args[5]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'blogger.newPost'); + + $cap = ($publish) ? 'publish_posts' : 'edit_posts'; + if ( ! current_user_can( get_post_type_object( 'post' )->cap->create_posts ) || !current_user_can($cap) ) + return new IXR_Error(401, __('Sorry, you are not allowed to post on this site.')); + + $post_status = ($publish) ? 'publish' : 'draft'; + + $post_author = $user->ID; + + $post_title = xmlrpc_getposttitle($content); + $post_category = xmlrpc_getpostcategory($content); + $post_content = xmlrpc_removepostdata($content); + + $post_date = current_time('mysql'); + $post_date_gmt = current_time('mysql', 1); + + $post_data = compact('blog_ID', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status'); + + $post_ID = wp_insert_post($post_data); + if ( is_wp_error( $post_ID ) ) + return new IXR_Error(500, $post_ID->get_error_message()); + + if ( !$post_ID ) + return new IXR_Error(500, __('Sorry, your entry could not be posted. Something wrong happened.')); + + $this->attach_uploads( $post_ID, $post_content ); + + do_action( 'xmlrpc_call_success_blogger_newPost', $post_ID, $args ); + + return $post_ID; + } + + /** + * Edit a post. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return bool true when done. + */ + function blogger_editPost($args) { + + $this->escape($args); + + $post_ID = (int) $args[1]; + $username = $args[2]; + $password = $args[3]; + $content = $args[4]; + $publish = $args[5]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'blogger.editPost'); + + $actual_post = get_post($post_ID,ARRAY_A); + + if ( !$actual_post || $actual_post['post_type'] != 'post' ) + return new IXR_Error(404, __('Sorry, no such post.')); + + $this->escape($actual_post); + + if ( !current_user_can('edit_post', $post_ID) ) + return new IXR_Error(401, __('Sorry, you do not have the right to edit this post.')); + + extract($actual_post, EXTR_SKIP); + + if ( ('publish' == $post_status) && !current_user_can('publish_posts') ) + return new IXR_Error(401, __('Sorry, you do not have the right to publish this post.')); + + $post_title = xmlrpc_getposttitle($content); + $post_category = xmlrpc_getpostcategory($content); + $post_content = xmlrpc_removepostdata($content); + + $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt'); + + $result = wp_update_post($postdata); + + if ( !$result ) + return new IXR_Error(500, __('For some strange yet very annoying reason, this post could not be edited.')); + + $this->attach_uploads( $ID, $post_content ); + + do_action( 'xmlrpc_call_success_blogger_editPost', $post_ID, $args ); + + return true; + } + + /** + * Remove a post. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return bool True when post is deleted. + */ + function blogger_deletePost($args) { + $this->escape($args); + + $post_ID = (int) $args[1]; + $username = $args[2]; + $password = $args[3]; + $publish = $args[4]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'blogger.deletePost'); + + $actual_post = get_post($post_ID,ARRAY_A); + + if ( !$actual_post || $actual_post['post_type'] != 'post' ) + return new IXR_Error(404, __('Sorry, no such post.')); + + if ( !current_user_can('delete_post', $post_ID) ) + return new IXR_Error(401, __('Sorry, you do not have the right to delete this post.')); + + $result = wp_delete_post($post_ID); + + if ( !$result ) + return new IXR_Error(500, __('For some strange yet very annoying reason, this post could not be deleted.')); + + do_action( 'xmlrpc_call_success_blogger_deletePost', $post_ID, $args ); + + return true; + } + + /* MetaWeblog API functions + * specs on wherever Dave Winer wants them to be + */ + + /** + * Create a new post. + * + * The 'content_struct' argument must contain: + * - title + * - description + * - mt_excerpt + * - mt_text_more + * - mt_keywords + * - mt_tb_ping_urls + * - categories + * + * Also, it can optionally contain: + * - wp_slug + * - wp_password + * - wp_page_parent_id + * - wp_page_order + * - wp_author_id + * - post_status | page_status - can be 'draft', 'private', 'publish', or 'pending' + * - mt_allow_comments - can be 'open' or 'closed' + * - mt_allow_pings - can be 'open' or 'closed' + * - date_created_gmt + * - dateCreated + * - wp_post_thumbnail + * + * @since 1.5.0 + * + * @param array $args Method parameters. Contains: + * - blog_id + * - username + * - password + * - content_struct + * - publish + * @return int + */ + function mw_newPost($args) { + $this->escape($args); + + $blog_ID = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $content_struct = $args[3]; + $publish = isset( $args[4] ) ? $args[4] : 0; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'metaWeblog.newPost'); + + $page_template = ''; + if ( !empty( $content_struct['post_type'] ) ) { + if ( $content_struct['post_type'] == 'page' ) { + if ( $publish ) + $cap = 'publish_pages'; + elseif ( isset( $content_struct['page_status'] ) && 'publish' == $content_struct['page_status'] ) + $cap = 'publish_pages'; + else + $cap = 'edit_pages'; + $error_message = __( 'Sorry, you are not allowed to publish pages on this site.' ); + $post_type = 'page'; + if ( !empty( $content_struct['wp_page_template'] ) ) + $page_template = $content_struct['wp_page_template']; + } elseif ( $content_struct['post_type'] == 'post' ) { + if ( $publish ) + $cap = 'publish_posts'; + elseif ( isset( $content_struct['post_status'] ) && 'publish' == $content_struct['post_status'] ) + $cap = 'publish_posts'; + else + $cap = 'edit_posts'; + $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' ); + $post_type = 'post'; + } else { + // No other post_type values are allowed here + return new IXR_Error( 401, __( 'Invalid post type' ) ); + } + } else { + if ( $publish ) + $cap = 'publish_posts'; + elseif ( isset( $content_struct['post_status'] ) && 'publish' == $content_struct['post_status']) + $cap = 'publish_posts'; + else + $cap = 'edit_posts'; + $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' ); + $post_type = 'post'; + } + + if ( ! current_user_can( get_post_type_object( $post_type )->cap->create_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish posts on this site.' ) ); + if ( !current_user_can( $cap ) ) + return new IXR_Error( 401, $error_message ); + + // Check for a valid post format if one was given + if ( isset( $content_struct['wp_post_format'] ) ) { + $content_struct['wp_post_format'] = sanitize_key( $content_struct['wp_post_format'] ); + if ( !array_key_exists( $content_struct['wp_post_format'], get_post_format_strings() ) ) { + return new IXR_Error( 404, __( 'Invalid post format' ) ); + } + } + + // Let WordPress generate the post_name (slug) unless + // one has been provided. + $post_name = ""; + if ( isset($content_struct['wp_slug']) ) + $post_name = $content_struct['wp_slug']; + + // Only use a password if one was given. + if ( isset($content_struct['wp_password']) ) + $post_password = $content_struct['wp_password']; + + // Only set a post parent if one was provided. + if ( isset($content_struct['wp_page_parent_id']) ) + $post_parent = $content_struct['wp_page_parent_id']; + + // Only set the menu_order if it was provided. + if ( isset($content_struct['wp_page_order']) ) + $menu_order = $content_struct['wp_page_order']; + + $post_author = $user->ID; + + // If an author id was provided then use it instead. + if ( isset( $content_struct['wp_author_id'] ) && ( $user->ID != $content_struct['wp_author_id'] ) ) { + switch ( $post_type ) { + case "post": + if ( !current_user_can( 'edit_others_posts' ) ) + return( new IXR_Error( 401, __( 'You are not allowed to create posts as this user.' ) ) ); + break; + case "page": + if ( !current_user_can( 'edit_others_pages' ) ) + return( new IXR_Error( 401, __( 'You are not allowed to create pages as this user.' ) ) ); + break; + default: + return( new IXR_Error( 401, __( 'Invalid post type' ) ) ); + break; + } + $author = get_userdata( $content_struct['wp_author_id'] ); + if ( ! $author ) + return new IXR_Error( 404, __( 'Invalid author ID.' ) ); + $post_author = $content_struct['wp_author_id']; + } + + $post_title = isset( $content_struct['title'] ) ? $content_struct['title'] : null; + $post_content = isset( $content_struct['description'] ) ? $content_struct['description'] : null; + + $post_status = $publish ? 'publish' : 'draft'; + + if ( isset( $content_struct["{$post_type}_status"] ) ) { + switch ( $content_struct["{$post_type}_status"] ) { + case 'draft': + case 'pending': + case 'private': + case 'publish': + $post_status = $content_struct["{$post_type}_status"]; + break; + default: + $post_status = $publish ? 'publish' : 'draft'; + break; + } + } + + $post_excerpt = isset($content_struct['mt_excerpt']) ? $content_struct['mt_excerpt'] : null; + $post_more = isset($content_struct['mt_text_more']) ? $content_struct['mt_text_more'] : null; + + $tags_input = isset($content_struct['mt_keywords']) ? $content_struct['mt_keywords'] : null; + + if ( isset($content_struct['mt_allow_comments']) ) { + if ( !is_numeric($content_struct['mt_allow_comments']) ) { + switch ( $content_struct['mt_allow_comments'] ) { + case 'closed': + $comment_status = 'closed'; + break; + case 'open': + $comment_status = 'open'; + break; + default: + $comment_status = get_option('default_comment_status'); + break; + } + } else { + switch ( (int) $content_struct['mt_allow_comments'] ) { + case 0: + case 2: + $comment_status = 'closed'; + break; + case 1: + $comment_status = 'open'; + break; + default: + $comment_status = get_option('default_comment_status'); + break; + } + } + } else { + $comment_status = get_option('default_comment_status'); + } + + if ( isset($content_struct['mt_allow_pings']) ) { + if ( !is_numeric($content_struct['mt_allow_pings']) ) { + switch ( $content_struct['mt_allow_pings'] ) { + case 'closed': + $ping_status = 'closed'; + break; + case 'open': + $ping_status = 'open'; + break; + default: + $ping_status = get_option('default_ping_status'); + break; + } + } else { + switch ( (int) $content_struct['mt_allow_pings'] ) { + case 0: + $ping_status = 'closed'; + break; + case 1: + $ping_status = 'open'; + break; + default: + $ping_status = get_option('default_ping_status'); + break; + } + } + } else { + $ping_status = get_option('default_ping_status'); + } + + if ( $post_more ) + $post_content = $post_content . '' . $post_more; + + $to_ping = null; + if ( isset( $content_struct['mt_tb_ping_urls'] ) ) { + $to_ping = $content_struct['mt_tb_ping_urls']; + if ( is_array($to_ping) ) + $to_ping = implode(' ', $to_ping); + } + + // Do some timestamp voodoo + if ( !empty( $content_struct['date_created_gmt'] ) ) + // We know this is supposed to be GMT, so we're going to slap that Z on there by force + $dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z'; + elseif ( !empty( $content_struct['dateCreated']) ) + $dateCreated = $content_struct['dateCreated']->getIso(); + + if ( !empty( $dateCreated ) ) { + $post_date = get_date_from_gmt(iso8601_to_datetime($dateCreated)); + $post_date_gmt = iso8601_to_datetime($dateCreated, 'GMT'); + } else { + $post_date = current_time('mysql'); + $post_date_gmt = current_time('mysql', 1); + } + + $post_category = array(); + if ( isset( $content_struct['categories'] ) ) { + $catnames = $content_struct['categories']; + + if ( is_array($catnames) ) { + foreach ($catnames as $cat) { + $post_category[] = get_cat_ID($cat); + } + } + } + + $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'comment_status', 'ping_status', 'to_ping', 'post_type', 'post_name', 'post_password', 'post_parent', 'menu_order', 'tags_input', 'page_template'); + + $post_ID = $postdata['ID'] = get_default_post_to_edit( $post_type, true )->ID; + + // Only posts can be sticky + if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) { + if ( $content_struct['sticky'] == true ) + stick_post( $post_ID ); + elseif ( $content_struct['sticky'] == false ) + unstick_post( $post_ID ); + } + + if ( isset($content_struct['custom_fields']) ) + $this->set_custom_fields($post_ID, $content_struct['custom_fields']); + + if ( isset ( $content_struct['wp_post_thumbnail'] ) ) { + if ( set_post_thumbnail( $post_ID, $content_struct['wp_post_thumbnail'] ) === false ) + return new IXR_Error( 404, __( 'Invalid attachment ID.' ) ); + + unset( $content_struct['wp_post_thumbnail'] ); + } + + // Handle enclosures + $thisEnclosure = isset($content_struct['enclosure']) ? $content_struct['enclosure'] : null; + $this->add_enclosure_if_new($post_ID, $thisEnclosure); + + $this->attach_uploads( $post_ID, $post_content ); + + // Handle post formats if assigned, value is validated earlier + // in this function + if ( isset( $content_struct['wp_post_format'] ) ) + set_post_format( $post_ID, $content_struct['wp_post_format'] ); + + $post_ID = wp_insert_post( $postdata, true ); + if ( is_wp_error( $post_ID ) ) + return new IXR_Error(500, $post_ID->get_error_message()); + + if ( !$post_ID ) + return new IXR_Error(500, __('Sorry, your entry could not be posted. Something wrong happened.')); + + do_action( 'xmlrpc_call_success_mw_newPost', $post_ID, $args ); + + return strval($post_ID); + } + + function add_enclosure_if_new( $post_ID, $enclosure ) { + if ( is_array( $enclosure ) && isset( $enclosure['url'] ) && isset( $enclosure['length'] ) && isset( $enclosure['type'] ) ) { + $encstring = $enclosure['url'] . "\n" . $enclosure['length'] . "\n" . $enclosure['type'] . "\n"; + $found = false; + if ( $enclosures = get_post_meta( $post_ID, 'enclosure' ) ) { + foreach ( $enclosures as $enc ) { + // This method used to omit the trailing new line. #23219 + if ( rtrim( $enc, "\n" ) == rtrim( $encstring, "\n" ) ) { + $found = true; + break; + } + } + } + if ( ! $found ) + add_post_meta( $post_ID, 'enclosure', $encstring ); + } + } + + /** + * Attach upload to a post. + * + * @since 2.1.0 + * + * @param int $post_ID Post ID. + * @param string $post_content Post Content for attachment. + */ + function attach_uploads( $post_ID, $post_content ) { + global $wpdb; + + // find any unattached files + $attachments = $wpdb->get_results( "SELECT ID, guid FROM {$wpdb->posts} WHERE post_parent = '0' AND post_type = 'attachment'" ); + if ( is_array( $attachments ) ) { + foreach ( $attachments as $file ) { + if ( ! empty( $file->guid ) && strpos( $post_content, $file->guid ) !== false ) + $wpdb->update($wpdb->posts, array('post_parent' => $post_ID), array('ID' => $file->ID) ); + } + } + } + + /** + * Edit a post. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return bool True on success. + */ + function mw_editPost($args) { + + $this->escape($args); + + $post_ID = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $content_struct = $args[3]; + $publish = isset( $args[4] ) ? $args[4] : 0; + + if ( ! $user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'metaWeblog.editPost'); + + $postdata = get_post( $post_ID, ARRAY_A ); + + // If there is no post data for the give post id, stop + // now and return an error. Other wise a new post will be + // created (which was the old behavior). + if ( ! $postdata || empty( $postdata[ 'ID' ] ) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + if ( ! current_user_can( 'edit_post', $post_ID ) ) + return new IXR_Error( 401, __( 'Sorry, you do not have the right to edit this post.' ) ); + + // Use wp.editPost to edit post types other than post and page. + if ( ! in_array( $postdata[ 'post_type' ], array( 'post', 'page' ) ) ) + return new IXR_Error( 401, __( 'Invalid post type' ) ); + + // Thwart attempt to change the post type. + if ( ! empty( $content_struct[ 'post_type' ] ) && ( $content_struct['post_type'] != $postdata[ 'post_type' ] ) ) + return new IXR_Error( 401, __( 'The post type may not be changed.' ) ); + + // Check for a valid post format if one was given + if ( isset( $content_struct['wp_post_format'] ) ) { + $content_struct['wp_post_format'] = sanitize_key( $content_struct['wp_post_format'] ); + if ( !array_key_exists( $content_struct['wp_post_format'], get_post_format_strings() ) ) { + return new IXR_Error( 404, __( 'Invalid post format' ) ); + } + } + + $this->escape($postdata); + extract($postdata, EXTR_SKIP); + + // Let WordPress manage slug if none was provided. + $post_name = ""; + $post_name = $postdata['post_name']; + if ( isset($content_struct['wp_slug']) ) + $post_name = $content_struct['wp_slug']; + + // Only use a password if one was given. + if ( isset($content_struct['wp_password']) ) + $post_password = $content_struct['wp_password']; + + // Only set a post parent if one was given. + if ( isset($content_struct['wp_page_parent_id']) ) + $post_parent = $content_struct['wp_page_parent_id']; + + // Only set the menu_order if it was given. + if ( isset($content_struct['wp_page_order']) ) + $menu_order = $content_struct['wp_page_order']; + + if ( ! empty( $content_struct['wp_page_template'] ) && 'page' == $post_type ) + $page_template = $content_struct['wp_page_template']; + + $post_author = $postdata['post_author']; + + // Only set the post_author if one is set. + if ( isset($content_struct['wp_author_id']) && ($user->ID != $content_struct['wp_author_id']) ) { + switch ( $post_type ) { + case 'post': + if ( !current_user_can('edit_others_posts') ) + return(new IXR_Error(401, __('You are not allowed to change the post author as this user.'))); + break; + case 'page': + if ( !current_user_can('edit_others_pages') ) + return(new IXR_Error(401, __('You are not allowed to change the page author as this user.'))); + break; + default: + return(new IXR_Error(401, __('Invalid post type'))); + break; + } + $post_author = $content_struct['wp_author_id']; + } + + if ( isset($content_struct['mt_allow_comments']) ) { + if ( !is_numeric($content_struct['mt_allow_comments']) ) { + switch ( $content_struct['mt_allow_comments'] ) { + case 'closed': + $comment_status = 'closed'; + break; + case 'open': + $comment_status = 'open'; + break; + default: + $comment_status = get_option('default_comment_status'); + break; + } + } else { + switch ( (int) $content_struct['mt_allow_comments'] ) { + case 0: + case 2: + $comment_status = 'closed'; + break; + case 1: + $comment_status = 'open'; + break; + default: + $comment_status = get_option('default_comment_status'); + break; + } + } + } + + if ( isset($content_struct['mt_allow_pings']) ) { + if ( !is_numeric($content_struct['mt_allow_pings']) ) { + switch ( $content_struct['mt_allow_pings'] ) { + case 'closed': + $ping_status = 'closed'; + break; + case 'open': + $ping_status = 'open'; + break; + default: + $ping_status = get_option('default_ping_status'); + break; + } + } else { + switch ( (int) $content_struct["mt_allow_pings"] ) { + case 0: + $ping_status = 'closed'; + break; + case 1: + $ping_status = 'open'; + break; + default: + $ping_status = get_option('default_ping_status'); + break; + } + } + } + + if ( isset( $content_struct['title'] ) ) + $post_title = $content_struct['title']; + + if ( isset( $content_struct['description'] ) ) + $post_content = $content_struct['description']; + + $post_category = array(); + if ( isset( $content_struct['categories'] ) ) { + $catnames = $content_struct['categories']; + if ( is_array($catnames) ) { + foreach ($catnames as $cat) { + $post_category[] = get_cat_ID($cat); + } + } + } + + if ( isset( $content_struct['mt_excerpt'] ) ) + $post_excerpt = $content_struct['mt_excerpt']; + + $post_more = isset( $content_struct['mt_text_more'] ) ? $content_struct['mt_text_more'] : null; + + $post_status = $publish ? 'publish' : 'draft'; + if ( isset( $content_struct["{$post_type}_status"] ) ) { + switch( $content_struct["{$post_type}_status"] ) { + case 'draft': + case 'pending': + case 'private': + case 'publish': + $post_status = $content_struct["{$post_type}_status"]; + break; + default: + $post_status = $publish ? 'publish' : 'draft'; + break; + } + } + + $tags_input = isset( $content_struct['mt_keywords'] ) ? $content_struct['mt_keywords'] : null; + + if ( ('publish' == $post_status) ) { + if ( ( 'page' == $post_type ) && !current_user_can('publish_pages') ) + return new IXR_Error(401, __('Sorry, you do not have the right to publish this page.')); + else if ( !current_user_can('publish_posts') ) + return new IXR_Error(401, __('Sorry, you do not have the right to publish this post.')); + } + + if ( $post_more ) + $post_content = $post_content . "" . $post_more; + + $to_ping = null; + if ( isset( $content_struct['mt_tb_ping_urls'] ) ) { + $to_ping = $content_struct['mt_tb_ping_urls']; + if ( is_array($to_ping) ) + $to_ping = implode(' ', $to_ping); + } + + // Do some timestamp voodoo + if ( !empty( $content_struct['date_created_gmt'] ) ) + // We know this is supposed to be GMT, so we're going to slap that Z on there by force + $dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z'; + elseif ( !empty( $content_struct['dateCreated']) ) + $dateCreated = $content_struct['dateCreated']->getIso(); + + if ( !empty( $dateCreated ) ) { + $post_date = get_date_from_gmt(iso8601_to_datetime($dateCreated)); + $post_date_gmt = iso8601_to_datetime($dateCreated, 'GMT'); + } else { + $post_date = $postdata['post_date']; + $post_date_gmt = $postdata['post_date_gmt']; + } + + // We've got all the data -- post it: + $newpost = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'comment_status', 'ping_status', 'post_date', 'post_date_gmt', 'to_ping', 'post_name', 'post_password', 'post_parent', 'menu_order', 'post_author', 'tags_input', 'page_template'); + + $result = wp_update_post($newpost, true); + if ( is_wp_error( $result ) ) + return new IXR_Error(500, $result->get_error_message()); + + if ( !$result ) + return new IXR_Error(500, __('Sorry, your entry could not be edited. Something wrong happened.')); + + // Only posts can be sticky + if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) { + if ( $content_struct['sticky'] == true ) + stick_post( $post_ID ); + elseif ( $content_struct['sticky'] == false ) + unstick_post( $post_ID ); + } + + if ( isset($content_struct['custom_fields']) ) + $this->set_custom_fields($post_ID, $content_struct['custom_fields']); + + if ( isset ( $content_struct['wp_post_thumbnail'] ) ) { + // empty value deletes, non-empty value adds/updates + if ( empty( $content_struct['wp_post_thumbnail'] ) ) { + delete_post_thumbnail( $post_ID ); + } else { + if ( set_post_thumbnail( $post_ID, $content_struct['wp_post_thumbnail'] ) === false ) + return new IXR_Error( 404, __( 'Invalid attachment ID.' ) ); + } + unset( $content_struct['wp_post_thumbnail'] ); + } + + // Handle enclosures + $thisEnclosure = isset($content_struct['enclosure']) ? $content_struct['enclosure'] : null; + $this->add_enclosure_if_new($post_ID, $thisEnclosure); + + $this->attach_uploads( $ID, $post_content ); + + // Handle post formats if assigned, validation is handled + // earlier in this function + if ( isset( $content_struct['wp_post_format'] ) ) + set_post_format( $post_ID, $content_struct['wp_post_format'] ); + + do_action( 'xmlrpc_call_success_mw_editPost', $post_ID, $args ); + + return true; + } + + /** + * Retrieve post. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function mw_getPost($args) { + + $this->escape($args); + + $post_ID = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + $postdata = get_post($post_ID, ARRAY_A); + if ( ! $postdata ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + if ( !current_user_can( 'edit_post', $post_ID ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) ); + + do_action('xmlrpc_call', 'metaWeblog.getPost'); + + if ($postdata['post_date'] != '') { + $post_date = $this->_convert_date( $postdata['post_date'] ); + $post_date_gmt = $this->_convert_date_gmt( $postdata['post_date_gmt'], $postdata['post_date'] ); + $post_modified = $this->_convert_date( $postdata['post_modified'] ); + $post_modified_gmt = $this->_convert_date_gmt( $postdata['post_modified_gmt'], $postdata['post_modified'] ); + + $categories = array(); + $catids = wp_get_post_categories($post_ID); + foreach($catids as $catid) + $categories[] = get_cat_name($catid); + + $tagnames = array(); + $tags = wp_get_post_tags( $post_ID ); + if ( !empty( $tags ) ) { + foreach ( $tags as $tag ) + $tagnames[] = $tag->name; + $tagnames = implode( ', ', $tagnames ); + } else { + $tagnames = ''; + } + + $post = get_extended($postdata['post_content']); + $link = post_permalink($postdata['ID']); + + // Get the author info. + $author = get_userdata($postdata['post_author']); + + $allow_comments = ('open' == $postdata['comment_status']) ? 1 : 0; + $allow_pings = ('open' == $postdata['ping_status']) ? 1 : 0; + + // Consider future posts as published + if ( $postdata['post_status'] === 'future' ) + $postdata['post_status'] = 'publish'; + + // Get post format + $post_format = get_post_format( $post_ID ); + if ( empty( $post_format ) ) + $post_format = 'standard'; + + $sticky = false; + if ( is_sticky( $post_ID ) ) + $sticky = true; + + $enclosure = array(); + foreach ( (array) get_post_custom($post_ID) as $key => $val) { + if ($key == 'enclosure') { + foreach ( (array) $val as $enc ) { + $encdata = explode("\n", $enc); + $enclosure['url'] = trim(htmlspecialchars($encdata[0])); + $enclosure['length'] = (int) trim($encdata[1]); + $enclosure['type'] = trim($encdata[2]); + break 2; + } + } + } + + $resp = array( + 'dateCreated' => $post_date, + 'userid' => $postdata['post_author'], + 'postid' => $postdata['ID'], + 'description' => $post['main'], + 'title' => $postdata['post_title'], + 'link' => $link, + 'permaLink' => $link, + // commented out because no other tool seems to use this + // 'content' => $entry['post_content'], + 'categories' => $categories, + 'mt_excerpt' => $postdata['post_excerpt'], + 'mt_text_more' => $post['extended'], + 'wp_more_text' => $post['more_text'], + 'mt_allow_comments' => $allow_comments, + 'mt_allow_pings' => $allow_pings, + 'mt_keywords' => $tagnames, + 'wp_slug' => $postdata['post_name'], + 'wp_password' => $postdata['post_password'], + 'wp_author_id' => (string) $author->ID, + 'wp_author_display_name' => $author->display_name, + 'date_created_gmt' => $post_date_gmt, + 'post_status' => $postdata['post_status'], + 'custom_fields' => $this->get_custom_fields($post_ID), + 'wp_post_format' => $post_format, + 'sticky' => $sticky, + 'date_modified' => $post_modified, + 'date_modified_gmt' => $post_modified_gmt + ); + + if ( !empty($enclosure) ) $resp['enclosure'] = $enclosure; + + $resp['wp_post_thumbnail'] = get_post_thumbnail_id( $postdata['ID'] ); + + return $resp; + } else { + return new IXR_Error(404, __('Sorry, no such post.')); + } + } + + /** + * Retrieve list of recent posts. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function mw_getRecentPosts($args) { + + $this->escape($args); + + $blog_ID = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + if ( isset( $args[3] ) ) + $query = array( 'numberposts' => absint( $args[3] ) ); + else + $query = array(); + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( ! current_user_can( 'edit_posts' ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit posts on this site.' ) ); + + do_action('xmlrpc_call', 'metaWeblog.getRecentPosts'); + + $posts_list = wp_get_recent_posts( $query ); + + if ( !$posts_list ) + return array(); + + $struct = array(); + foreach ($posts_list as $entry) { + if ( !current_user_can( 'edit_post', $entry['ID'] ) ) + continue; + + $post_date = $this->_convert_date( $entry['post_date'] ); + $post_date_gmt = $this->_convert_date_gmt( $entry['post_date_gmt'], $entry['post_date'] ); + $post_modified = $this->_convert_date( $entry['post_modified'] ); + $post_modified_gmt = $this->_convert_date_gmt( $entry['post_modified_gmt'], $entry['post_modified'] ); + + $categories = array(); + $catids = wp_get_post_categories($entry['ID']); + foreach( $catids as $catid ) + $categories[] = get_cat_name($catid); + + $tagnames = array(); + $tags = wp_get_post_tags( $entry['ID'] ); + if ( !empty( $tags ) ) { + foreach ( $tags as $tag ) { + $tagnames[] = $tag->name; + } + $tagnames = implode( ', ', $tagnames ); + } else { + $tagnames = ''; + } + + $post = get_extended($entry['post_content']); + $link = post_permalink($entry['ID']); + + // Get the post author info. + $author = get_userdata($entry['post_author']); + + $allow_comments = ('open' == $entry['comment_status']) ? 1 : 0; + $allow_pings = ('open' == $entry['ping_status']) ? 1 : 0; + + // Consider future posts as published + if ( $entry['post_status'] === 'future' ) + $entry['post_status'] = 'publish'; + + // Get post format + $post_format = get_post_format( $entry['ID'] ); + if ( empty( $post_format ) ) + $post_format = 'standard'; + + $struct[] = array( + 'dateCreated' => $post_date, + 'userid' => $entry['post_author'], + 'postid' => (string) $entry['ID'], + 'description' => $post['main'], + 'title' => $entry['post_title'], + 'link' => $link, + 'permaLink' => $link, + // commented out because no other tool seems to use this + // 'content' => $entry['post_content'], + 'categories' => $categories, + 'mt_excerpt' => $entry['post_excerpt'], + 'mt_text_more' => $post['extended'], + 'wp_more_text' => $post['more_text'], + 'mt_allow_comments' => $allow_comments, + 'mt_allow_pings' => $allow_pings, + 'mt_keywords' => $tagnames, + 'wp_slug' => $entry['post_name'], + 'wp_password' => $entry['post_password'], + 'wp_author_id' => (string) $author->ID, + 'wp_author_display_name' => $author->display_name, + 'date_created_gmt' => $post_date_gmt, + 'post_status' => $entry['post_status'], + 'custom_fields' => $this->get_custom_fields($entry['ID']), + 'wp_post_format' => $post_format, + 'date_modified' => $post_modified, + 'date_modified_gmt' => $post_modified_gmt + ); + + $entry_index = count( $struct ) - 1; + $struct[ $entry_index ][ 'wp_post_thumbnail' ] = get_post_thumbnail_id( $entry['ID'] ); + } + + $recent_posts = array(); + for ( $j=0; $jescape($args); + + $blog_ID = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'edit_posts' ) ) + return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this site in order to view categories.' ) ); + + do_action('xmlrpc_call', 'metaWeblog.getCategories'); + + $categories_struct = array(); + + if ( $cats = get_categories(array('get' => 'all')) ) { + foreach ( $cats as $cat ) { + $struct['categoryId'] = $cat->term_id; + $struct['parentId'] = $cat->parent; + $struct['description'] = $cat->name; + $struct['categoryDescription'] = $cat->description; + $struct['categoryName'] = $cat->name; + $struct['htmlUrl'] = esc_html(get_category_link($cat->term_id)); + $struct['rssUrl'] = esc_html(get_category_feed_link($cat->term_id, 'rss2')); + + $categories_struct[] = $struct; + } + } + + return $categories_struct; + } + + /** + * Uploads a file, following your settings. + * + * Adapted from a patch by Johann Richard. + * + * @link http://mycvs.org/archives/2004/06/30/file-upload-to-wordpress-in-ecto/ + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function mw_newMediaObject($args) { + global $wpdb; + + $blog_ID = (int) $args[0]; + $username = $this->escape($args[1]); + $password = $this->escape($args[2]); + $data = $args[3]; + + $name = sanitize_file_name( $data['name'] ); + $type = $data['type']; + $bits = $data['bits']; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'metaWeblog.newMediaObject'); + + if ( !current_user_can('upload_files') ) { + $this->error = new IXR_Error( 401, __( 'You do not have permission to upload files.' ) ); + return $this->error; + } + + if ( $upload_err = apply_filters( 'pre_upload_error', false ) ) + return new IXR_Error(500, $upload_err); + + if ( !empty($data['overwrite']) && ($data['overwrite'] == true) ) { + // Get postmeta info on the object. + $old_file = $wpdb->get_row(" + SELECT ID + FROM {$wpdb->posts} + WHERE post_title = '{$name}' + AND post_type = 'attachment' + "); + + // Delete previous file. + wp_delete_attachment($old_file->ID); + + // Make sure the new name is different by pre-pending the + // previous post id. + $filename = preg_replace('/^wpid\d+-/', '', $name); + $name = "wpid{$old_file->ID}-{$filename}"; + } + + $upload = wp_upload_bits($name, null, $bits); + if ( ! empty($upload['error']) ) { + $errorString = sprintf(__('Could not write file %1$s (%2$s)'), $name, $upload['error']); + return new IXR_Error(500, $errorString); + } + // Construct the attachment array + $post_id = 0; + if ( ! empty( $data['post_id'] ) ) { + $post_id = (int) $data['post_id']; + + if ( ! current_user_can( 'edit_post', $post_id ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) ); + } + $attachment = array( + 'post_title' => $name, + 'post_content' => '', + 'post_type' => 'attachment', + 'post_parent' => $post_id, + 'post_mime_type' => $type, + 'guid' => $upload[ 'url' ] + ); + + // Save the data + $id = wp_insert_attachment( $attachment, $upload[ 'file' ], $post_id ); + wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $upload['file'] ) ); + + do_action( 'xmlrpc_call_success_mw_newMediaObject', $id, $args ); + + $struct = array( + 'id' => strval( $id ), + 'file' => $name, + 'url' => $upload[ 'url' ], + 'type' => $type + ); + return apply_filters( 'wp_handle_upload', $struct, 'upload' ); + } + + /* MovableType API functions + * specs on http://www.movabletype.org/docs/mtmanual_programmatic.html + */ + + /** + * Retrieve the post titles of recent posts. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function mt_getRecentPostTitles($args) { + + $this->escape($args); + + $blog_ID = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + if ( isset( $args[3] ) ) + $query = array( 'numberposts' => absint( $args[3] ) ); + else + $query = array(); + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'mt.getRecentPostTitles'); + + $posts_list = wp_get_recent_posts( $query ); + + if ( !$posts_list ) { + $this->error = new IXR_Error(500, __('Either there are no posts, or something went wrong.')); + return $this->error; + } + + $struct = array(); + + foreach ($posts_list as $entry) { + if ( !current_user_can( 'edit_post', $entry['ID'] ) ) + continue; + + $post_date = $this->_convert_date( $entry['post_date'] ); + $post_date_gmt = $this->_convert_date_gmt( $entry['post_date_gmt'], $entry['post_date'] ); + + $struct[] = array( + 'dateCreated' => $post_date, + 'userid' => $entry['post_author'], + 'postid' => (string) $entry['ID'], + 'title' => $entry['post_title'], + 'post_status' => $entry['post_status'], + 'date_created_gmt' => $post_date_gmt + ); + + } + + $recent_posts = array(); + for ( $j=0; $jescape($args); + + $blog_ID = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( !current_user_can( 'edit_posts' ) ) + return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this site in order to view categories.' ) ); + + do_action('xmlrpc_call', 'mt.getCategoryList'); + + $categories_struct = array(); + + if ( $cats = get_categories(array('hide_empty' => 0, 'hierarchical' => 0)) ) { + foreach ( $cats as $cat ) { + $struct['categoryId'] = $cat->term_id; + $struct['categoryName'] = $cat->name; + + $categories_struct[] = $struct; + } + } + + return $categories_struct; + } + + /** + * Retrieve post categories. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function mt_getPostCategories($args) { + + $this->escape($args); + + $post_ID = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + if ( ! get_post( $post_ID ) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + if ( !current_user_can( 'edit_post', $post_ID ) ) + return new IXR_Error( 401, __( 'Sorry, you can not edit this post.' ) ); + + do_action('xmlrpc_call', 'mt.getPostCategories'); + + $categories = array(); + $catids = wp_get_post_categories(intval($post_ID)); + // first listed category will be the primary category + $isPrimary = true; + foreach ( $catids as $catid ) { + $categories[] = array( + 'categoryName' => get_cat_name($catid), + 'categoryId' => (string) $catid, + 'isPrimary' => $isPrimary + ); + $isPrimary = false; + } + + return $categories; + } + + /** + * Sets categories for a post. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return bool True on success. + */ + function mt_setPostCategories($args) { + + $this->escape($args); + + $post_ID = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $categories = $args[3]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'mt.setPostCategories'); + + if ( ! get_post( $post_ID ) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + if ( !current_user_can('edit_post', $post_ID) ) + return new IXR_Error(401, __('Sorry, you cannot edit this post.')); + + $catids = array(); + foreach ( $categories as $cat ) { + $catids[] = $cat['categoryId']; + } + + wp_set_post_categories($post_ID, $catids); + + return true; + } + + /** + * Retrieve an array of methods supported by this server. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function mt_supportedMethods($args) { + + do_action('xmlrpc_call', 'mt.supportedMethods'); + + $supported_methods = array(); + foreach ( $this->methods as $key => $value ) { + $supported_methods[] = $key; + } + + return $supported_methods; + } + + /** + * Retrieve an empty array because we don't support per-post text filters. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + */ + function mt_supportedTextFilters($args) { + do_action('xmlrpc_call', 'mt.supportedTextFilters'); + return apply_filters('xmlrpc_text_filters', array()); + } + + /** + * Retrieve trackbacks sent to a given post. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return mixed + */ + function mt_getTrackbackPings($args) { + + global $wpdb; + + $post_ID = intval($args); + + do_action('xmlrpc_call', 'mt.getTrackbackPings'); + + $actual_post = get_post($post_ID, ARRAY_A); + + if ( !$actual_post ) + return new IXR_Error(404, __('Sorry, no such post.')); + + $comments = $wpdb->get_results( $wpdb->prepare("SELECT comment_author_url, comment_content, comment_author_IP, comment_type FROM $wpdb->comments WHERE comment_post_ID = %d", $post_ID) ); + + if ( !$comments ) + return array(); + + $trackback_pings = array(); + foreach ( $comments as $comment ) { + if ( 'trackback' == $comment->comment_type ) { + $content = $comment->comment_content; + $title = substr($content, 8, (strpos($content, '') - 8)); + $trackback_pings[] = array( + 'pingTitle' => $title, + 'pingURL' => $comment->comment_author_url, + 'pingIP' => $comment->comment_author_IP + ); + } + } + + return $trackback_pings; + } + + /** + * Sets a post's publish status to 'publish'. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return int + */ + function mt_publishPost($args) { + + $this->escape($args); + + $post_ID = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action('xmlrpc_call', 'mt.publishPost'); + + $postdata = get_post($post_ID, ARRAY_A); + if ( ! $postdata ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + if ( !current_user_can('publish_posts') || !current_user_can('edit_post', $post_ID) ) + return new IXR_Error(401, __('Sorry, you cannot publish this post.')); + + $postdata['post_status'] = 'publish'; + + // retain old cats + $cats = wp_get_post_categories($post_ID); + $postdata['post_category'] = $cats; + $this->escape($postdata); + + $result = wp_update_post($postdata); + + return $result; + } + + /* PingBack functions + * specs on www.hixie.ch/specs/pingback/pingback + */ + + /** + * Retrieves a pingback and registers it. + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function pingback_ping($args) { + global $wpdb; + + do_action('xmlrpc_call', 'pingback.ping'); + + $this->escape($args); + + $pagelinkedfrom = $args[0]; + $pagelinkedto = $args[1]; + + $title = ''; + + $pagelinkedfrom = str_replace('&', '&', $pagelinkedfrom); + $pagelinkedto = str_replace('&', '&', $pagelinkedto); + $pagelinkedto = str_replace('&', '&', $pagelinkedto); + + $pagelinkedfrom = apply_filters( 'pingback_ping_source_uri', $pagelinkedfrom, $pagelinkedto ); + if ( ! $pagelinkedfrom ) + return $this->pingback_error( 0, __( 'A valid URL was not provided.' ) ); + + // Check if the page linked to is in our site + $pos1 = strpos($pagelinkedto, str_replace(array('http://www.','http://','https://www.','https://'), '', get_option('home'))); + if ( !$pos1 ) + return $this->pingback_error( 0, __( 'Is there no link to us?' ) ); + + // let's find which post is linked to + // FIXME: does url_to_postid() cover all these cases already? + // if so, then let's use it and drop the old code. + $urltest = parse_url($pagelinkedto); + if ( $post_ID = url_to_postid($pagelinkedto) ) { + $way = 'url_to_postid()'; + } elseif ( preg_match('#p/[0-9]{1,}#', $urltest['path'], $match) ) { + // the path defines the post_ID (archives/p/XXXX) + $blah = explode('/', $match[0]); + $post_ID = (int) $blah[1]; + $way = 'from the path'; + } elseif ( isset( $urltest['query'] ) && preg_match('#p=[0-9]{1,}#', $urltest['query'], $match) ) { + // the querystring defines the post_ID (?p=XXXX) + $blah = explode('=', $match[0]); + $post_ID = (int) $blah[1]; + $way = 'from the querystring'; + } elseif ( isset($urltest['fragment']) ) { + // an #anchor is there, it's either... + if ( intval($urltest['fragment']) ) { + // ...an integer #XXXX (simplest case) + $post_ID = (int) $urltest['fragment']; + $way = 'from the fragment (numeric)'; + } elseif ( preg_match('/post-[0-9]+/',$urltest['fragment']) ) { + // ...a post id in the form 'post-###' + $post_ID = preg_replace('/[^0-9]+/', '', $urltest['fragment']); + $way = 'from the fragment (post-###)'; + } elseif ( is_string($urltest['fragment']) ) { + // ...or a string #title, a little more complicated + $title = preg_replace('/[^a-z0-9]/i', '.', $urltest['fragment']); + $sql = $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title RLIKE %s", like_escape( $title ) ); + if (! ($post_ID = $wpdb->get_var($sql)) ) { + // returning unknown error '0' is better than die()ing + return $this->pingback_error( 0, '' ); + } + $way = 'from the fragment (title)'; + } + } else { + // TODO: Attempt to extract a post ID from the given URL + return $this->pingback_error( 33, __('The specified target URL cannot be used as a target. It either doesn’t exist, or it is not a pingback-enabled resource.' ) ); + } + $post_ID = (int) $post_ID; + + $post = get_post($post_ID); + + if ( !$post ) // Post_ID not found + return $this->pingback_error( 33, __( 'The specified target URL cannot be used as a target. It either doesn’t exist, or it is not a pingback-enabled resource.' ) ); + + if ( $post_ID == url_to_postid($pagelinkedfrom) ) + return $this->pingback_error( 0, __( 'The source URL and the target URL cannot both point to the same resource.' ) ); + + // Check if pings are on + if ( !pings_open($post) ) + return $this->pingback_error( 33, __( 'The specified target URL cannot be used as a target. It either doesn’t exist, or it is not a pingback-enabled resource.' ) ); + + // Let's check that the remote site didn't already pingback this entry + if ( $wpdb->get_results( $wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_author_url = %s", $post_ID, $pagelinkedfrom) ) ) + return $this->pingback_error( 48, __( 'The pingback has already been registered.' ) ); + + // very stupid, but gives time to the 'from' server to publish ! + sleep(1); + + // Let's check the remote site + $http_api_args = array( + 'timeout' => 10, + 'redirection' => 0, + 'limit_response_size' => 153600, // 150 KB + ); + $linea = wp_remote_retrieve_body( wp_safe_remote_get( $pagelinkedfrom, $http_api_args ) ); + + if ( !$linea ) + return $this->pingback_error( 16, __( 'The source URL does not exist.' ) ); + + $linea = apply_filters('pre_remote_source', $linea, $pagelinkedto); + + // Work around bug in strip_tags(): + $linea = str_replace(']*>/", "\n\n", $linea ); + + preg_match('|([^<]*?)|is', $linea, $matchtitle); + $title = $matchtitle[1]; + if ( empty( $title ) ) + return $this->pingback_error( 32, __('We cannot find a title on that page.' ) ); + + $linea = strip_tags( $linea, '' ); // just keep the tag we need + + $p = explode( "\n\n", $linea ); + + $preg_target = preg_quote($pagelinkedto, '|'); + + foreach ( $p as $para ) { + if ( strpos($para, $pagelinkedto) !== false ) { // it exists, but is it a link? + preg_match("|]+?".$preg_target."[^>]*>([^>]+?)|", $para, $context); + + // If the URL isn't in a link context, keep looking + if ( empty($context) ) + continue; + + // We're going to use this fake tag to mark the context in a bit + // the marker is needed in case the link text appears more than once in the paragraph + $excerpt = preg_replace('|\|', '', $para); + + // prevent really long link text + if ( strlen($context[1]) > 100 ) + $context[1] = substr($context[1], 0, 100) . '…'; + + $marker = ''.$context[1].''; // set up our marker + $excerpt= str_replace($context[0], $marker, $excerpt); // swap out the link for our marker + $excerpt = strip_tags($excerpt, ''); // strip all tags but our context marker + $excerpt = trim($excerpt); + $preg_marker = preg_quote($marker, '|'); + $excerpt = preg_replace("|.*?\s(.{0,100}$preg_marker.{0,100})\s.*|s", '$1', $excerpt); + $excerpt = strip_tags($excerpt); // YES, again, to remove the marker wrapper + break; + } + } + + if ( empty($context) ) // Link to target not found + return $this->pingback_error( 17, __( 'The source URL does not contain a link to the target URL, and so cannot be used as a source.' ) ); + + $pagelinkedfrom = str_replace('&', '&', $pagelinkedfrom); + + $context = '[…] ' . esc_html( $excerpt ) . ' […]'; + $pagelinkedfrom = $this->escape( $pagelinkedfrom ); + + $comment_post_ID = (int) $post_ID; + $comment_author = $title; + $comment_author_email = ''; + $this->escape($comment_author); + $comment_author_url = $pagelinkedfrom; + $comment_content = $context; + $this->escape($comment_content); + $comment_type = 'pingback'; + + $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_content', 'comment_type'); + + $comment_ID = wp_new_comment($commentdata); + do_action('pingback_post', $comment_ID); + + return sprintf(__('Pingback from %1$s to %2$s registered. Keep the web talking! :-)'), $pagelinkedfrom, $pagelinkedto); + } + + /** + * Retrieve array of URLs that pingbacked the given URL. + * + * Specs on http://www.aquarionics.com/misc/archives/blogite/0198.html + * + * @since 1.5.0 + * + * @param array $args Method parameters. + * @return array + */ + function pingback_extensions_getPingbacks($args) { + + global $wpdb; + + do_action('xmlrpc_call', 'pingback.extensions.getPingbacks'); + + $this->escape($args); + + $url = $args; + + $post_ID = url_to_postid($url); + if ( !$post_ID ) { + // We aren't sure that the resource is available and/or pingback enabled + return $this->pingback_error( 33, __( 'The specified target URL cannot be used as a target. It either doesn’t exist, or it is not a pingback-enabled resource.' ) ); + } + + $actual_post = get_post($post_ID, ARRAY_A); + + if ( !$actual_post ) { + // No such post = resource not found + return $this->pingback_error( 32, __('The specified target URL does not exist.' ) ); + } + + $comments = $wpdb->get_results( $wpdb->prepare("SELECT comment_author_url, comment_content, comment_author_IP, comment_type FROM $wpdb->comments WHERE comment_post_ID = %d", $post_ID) ); + + if ( !$comments ) + return array(); + + $pingbacks = array(); + foreach ( $comments as $comment ) { + if ( 'pingback' == $comment->comment_type ) + $pingbacks[] = $comment->comment_author_url; + } + + return $pingbacks; + } + + protected function pingback_error( $code, $message ) { + return apply_filters( 'xmlrpc_pingback_error', new IXR_Error( $code, $message ) ); + } +} diff --git a/src/wp-includes/class-wp.php b/src/wp-includes/class-wp.php new file mode 100644 index 0000000..2fe76fc --- /dev/null +++ b/src/wp-includes/class-wp.php @@ -0,0 +1,709 @@ +public_query_vars) ) + $this->public_query_vars[] = $qv; + } + + /** + * Set the value of a query variable. + * + * @since 2.3.0 + * + * @param string $key Query variable name. + * @param mixed $value Query variable value. + */ + function set_query_var($key, $value) { + $this->query_vars[$key] = $value; + } + + /** + * Parse request to find correct WordPress query. + * + * Sets up the query variables based on the request. There are also many + * filters and actions that can be used to further manipulate the result. + * + * @since 2.0.0 + * + * @param array|string $extra_query_vars Set the extra query variables. + */ + function parse_request($extra_query_vars = '') { + global $wp_rewrite; + + /** + * Filter whether to parse the request. + * + * @since 3.5.0 + * + * @param bool $bool Whether or not to parse the request. Default true. + * @param WP $this Current WordPress environment instance. + * @param array|string $extra_query_vars Extra passed query variables. + */ + if ( ! apply_filters( 'do_parse_request', true, $this, $extra_query_vars ) ) + return; + + $this->query_vars = array(); + $post_type_query_vars = array(); + + if ( is_array($extra_query_vars) ) + $this->extra_query_vars = & $extra_query_vars; + else if (! empty($extra_query_vars)) + parse_str($extra_query_vars, $this->extra_query_vars); + + // Process PATH_INFO, REQUEST_URI, and 404 for permalinks. + + // Fetch the rewrite rules. + $rewrite = $wp_rewrite->wp_rewrite_rules(); + + if ( ! empty($rewrite) ) { + // If we match a rewrite rule, this will be cleared. + $error = '404'; + $this->did_permalink = true; + + $pathinfo = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : ''; + list( $pathinfo ) = explode( '?', $pathinfo ); + $pathinfo = str_replace( "%", "%25", $pathinfo ); + + list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] ); + $self = $_SERVER['PHP_SELF']; + $home_path = trim( parse_url( home_url(), PHP_URL_PATH ), '/' ); + + // Trim path info from the end and the leading home path from the + // front. For path info requests, this leaves us with the requesting + // filename, if any. For 404 requests, this leaves us with the + // requested permalink. + $req_uri = str_replace($pathinfo, '', $req_uri); + $req_uri = trim($req_uri, '/'); + $req_uri = preg_replace("|^$home_path|i", '', $req_uri); + $req_uri = trim($req_uri, '/'); + $pathinfo = trim($pathinfo, '/'); + $pathinfo = preg_replace("|^$home_path|i", '', $pathinfo); + $pathinfo = trim($pathinfo, '/'); + $self = trim($self, '/'); + $self = preg_replace("|^$home_path|i", '', $self); + $self = trim($self, '/'); + + // The requested permalink is in $pathinfo for path info requests and + // $req_uri for other requests. + if ( ! empty($pathinfo) && !preg_match('|^.*' . $wp_rewrite->index . '$|', $pathinfo) ) { + $request = $pathinfo; + } else { + // If the request uri is the index, blank it out so that we don't try to match it against a rule. + if ( $req_uri == $wp_rewrite->index ) + $req_uri = ''; + $request = $req_uri; + } + + $this->request = $request; + + // Look for matches. + $request_match = $request; + if ( empty( $request_match ) ) { + // An empty request could only match against ^$ regex + if ( isset( $rewrite['$'] ) ) { + $this->matched_rule = '$'; + $query = $rewrite['$']; + $matches = array(''); + } + } else { + foreach ( (array) $rewrite as $match => $query ) { + // If the requesting file is the anchor of the match, prepend it to the path info. + if ( ! empty($req_uri) && strpos($match, $req_uri) === 0 && $req_uri != $request ) + $request_match = $req_uri . '/' . $request; + + if ( preg_match("#^$match#", $request_match, $matches) || + preg_match("#^$match#", urldecode($request_match), $matches) ) { + + if ( $wp_rewrite->use_verbose_page_rules && preg_match( '/pagename=\$matches\[([0-9]+)\]/', $query, $varmatch ) ) { + // this is a verbose page match, lets check to be sure about it + if ( ! get_page_by_path( $matches[ $varmatch[1] ] ) ) + continue; + } + + // Got a match. + $this->matched_rule = $match; + break; + } + } + } + + if ( isset( $this->matched_rule ) ) { + // Trim the query of everything up to the '?'. + $query = preg_replace("!^.+\?!", '', $query); + + // Substitute the substring matches into the query. + $query = addslashes(WP_MatchesMapRegex::apply($query, $matches)); + + $this->matched_query = $query; + + // Parse the query. + parse_str($query, $perma_query_vars); + + // If we're processing a 404 request, clear the error var since we found something. + if ( '404' == $error ) + unset( $error, $_GET['error'] ); + } + + // If req_uri is empty or if it is a request for ourself, unset error. + if ( empty($request) || $req_uri == $self || strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false ) { + unset( $error, $_GET['error'] ); + + if ( isset($perma_query_vars) && strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false ) + unset( $perma_query_vars ); + + $this->did_permalink = false; + } + } + + /** + * Filter the query variables whitelist before processing. + * + * Allows (publicly allowed) query vars to be added, removed, or changed prior + * to executing the query. Needed to allow custom rewrite rules using your own arguments + * to work, or any other custom query variables you want to be publicly available. + * + * @since 1.5.0 + * + * @param array $public_query_vars The array of whitelisted query variables. + */ + $this->public_query_vars = apply_filters( 'query_vars', $this->public_query_vars ); + + foreach ( get_post_types( array(), 'objects' ) as $post_type => $t ) + if ( $t->query_var ) + $post_type_query_vars[$t->query_var] = $post_type; + + foreach ( $this->public_query_vars as $wpvar ) { + if ( isset( $this->extra_query_vars[$wpvar] ) ) + $this->query_vars[$wpvar] = $this->extra_query_vars[$wpvar]; + elseif ( isset( $_POST[$wpvar] ) ) + $this->query_vars[$wpvar] = $_POST[$wpvar]; + elseif ( isset( $_GET[$wpvar] ) ) + $this->query_vars[$wpvar] = $_GET[$wpvar]; + elseif ( isset( $perma_query_vars[$wpvar] ) ) + $this->query_vars[$wpvar] = $perma_query_vars[$wpvar]; + + if ( !empty( $this->query_vars[$wpvar] ) ) { + if ( ! is_array( $this->query_vars[$wpvar] ) ) { + $this->query_vars[$wpvar] = (string) $this->query_vars[$wpvar]; + } else { + foreach ( $this->query_vars[$wpvar] as $vkey => $v ) { + if ( !is_object( $v ) ) { + $this->query_vars[$wpvar][$vkey] = (string) $v; + } + } + } + + if ( isset($post_type_query_vars[$wpvar] ) ) { + $this->query_vars['post_type'] = $post_type_query_vars[$wpvar]; + $this->query_vars['name'] = $this->query_vars[$wpvar]; + } + } + } + + // Convert urldecoded spaces back into + + foreach ( get_taxonomies( array() , 'objects' ) as $taxonomy => $t ) + if ( $t->query_var && isset( $this->query_vars[$t->query_var] ) ) + $this->query_vars[$t->query_var] = str_replace( ' ', '+', $this->query_vars[$t->query_var] ); + + // Limit publicly queried post_types to those that are publicly_queryable + if ( isset( $this->query_vars['post_type']) ) { + $queryable_post_types = get_post_types( array('publicly_queryable' => true) ); + if ( ! is_array( $this->query_vars['post_type'] ) ) { + if ( ! in_array( $this->query_vars['post_type'], $queryable_post_types ) ) + unset( $this->query_vars['post_type'] ); + } else { + $this->query_vars['post_type'] = array_intersect( $this->query_vars['post_type'], $queryable_post_types ); + } + } + + foreach ( (array) $this->private_query_vars as $var) { + if ( isset($this->extra_query_vars[$var]) ) + $this->query_vars[$var] = $this->extra_query_vars[$var]; + } + + if ( isset($error) ) + $this->query_vars['error'] = $error; + + /** + * Filter the array of parsed query variables. + * + * @since 2.1.0 + * + * @param array $query_vars The array of requested query variables. + */ + $this->query_vars = apply_filters( 'request', $this->query_vars ); + + /** + * Fires once all query variables for the current request have been parsed. + * + * @since 2.1.0 + * + * @param WP &$this Current WordPress environment instance (passed by reference). + */ + do_action_ref_array( 'parse_request', array( &$this ) ); + } + + /** + * Send additional HTTP headers for caching, content type, etc. + * + * Sets the X-Pingback header, 404 status (if 404), Content-type. If showing + * a feed, it will also send last-modified, etag, and 304 status if needed. + * + * @since 2.0.0 + */ + function send_headers() { + $headers = array('X-Pingback' => get_bloginfo('pingback_url')); + $status = null; + $exit_required = false; + + if ( is_user_logged_in() ) + $headers = array_merge($headers, wp_get_nocache_headers()); + if ( ! empty( $this->query_vars['error'] ) ) { + $status = (int) $this->query_vars['error']; + if ( 404 === $status ) { + if ( ! is_user_logged_in() ) + $headers = array_merge($headers, wp_get_nocache_headers()); + $headers['Content-Type'] = get_option('html_type') . '; charset=' . get_option('blog_charset'); + } elseif ( in_array( $status, array( 403, 500, 502, 503 ) ) ) { + $exit_required = true; + } + } else if ( empty($this->query_vars['feed']) ) { + $headers['Content-Type'] = get_option('html_type') . '; charset=' . get_option('blog_charset'); + } else { + // We're showing a feed, so WP is indeed the only thing that last changed + if ( !empty($this->query_vars['withcomments']) + || false !== strpos( $this->query_vars['feed'], 'comments-' ) + || ( empty($this->query_vars['withoutcomments']) + && ( !empty($this->query_vars['p']) + || !empty($this->query_vars['name']) + || !empty($this->query_vars['page_id']) + || !empty($this->query_vars['pagename']) + || !empty($this->query_vars['attachment']) + || !empty($this->query_vars['attachment_id']) + ) + ) + ) + $wp_last_modified = mysql2date('D, d M Y H:i:s', get_lastcommentmodified('GMT'), 0).' GMT'; + else + $wp_last_modified = mysql2date('D, d M Y H:i:s', get_lastpostmodified('GMT'), 0).' GMT'; + $wp_etag = '"' . md5($wp_last_modified) . '"'; + $headers['Last-Modified'] = $wp_last_modified; + $headers['ETag'] = $wp_etag; + + // Support for Conditional GET + if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) + $client_etag = wp_unslash( $_SERVER['HTTP_IF_NONE_MATCH'] ); + else $client_etag = false; + + $client_last_modified = empty($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? '' : trim($_SERVER['HTTP_IF_MODIFIED_SINCE']); + // If string is empty, return 0. If not, attempt to parse into a timestamp + $client_modified_timestamp = $client_last_modified ? strtotime($client_last_modified) : 0; + + // Make a timestamp for our most recent modification... + $wp_modified_timestamp = strtotime($wp_last_modified); + + if ( ($client_last_modified && $client_etag) ? + (($client_modified_timestamp >= $wp_modified_timestamp) && ($client_etag == $wp_etag)) : + (($client_modified_timestamp >= $wp_modified_timestamp) || ($client_etag == $wp_etag)) ) { + $status = 304; + $exit_required = true; + } + } + + /** + * Filter the HTTP headers before they're sent to the browser. + * + * @since 2.8.0 + * + * @param array $headers The list of headers to be sent. + * @param WP $this Current WordPress environment instance. + */ + $headers = apply_filters( 'wp_headers', $headers, $this ); + + if ( ! empty( $status ) ) + status_header( $status ); + + // If Last-Modified is set to false, it should not be sent (no-cache situation). + if ( isset( $headers['Last-Modified'] ) && false === $headers['Last-Modified'] ) { + unset( $headers['Last-Modified'] ); + + // In PHP 5.3+, make sure we are not sending a Last-Modified header. + if ( function_exists( 'header_remove' ) ) { + @header_remove( 'Last-Modified' ); + } else { + // In PHP 5.2, send an empty Last-Modified header, but only as a + // last resort to override a header already sent. #WP23021 + foreach ( headers_list() as $header ) { + if ( 0 === stripos( $header, 'Last-Modified' ) ) { + $headers['Last-Modified'] = ''; + break; + } + } + } + } + + foreach( (array) $headers as $name => $field_value ) + @header("{$name}: {$field_value}"); + + if ( $exit_required ) + exit(); + + /** + * Fires once the requested HTTP headers for caching, content type, etc. have been sent. + * + * @since 2.1.0 + * + * @param WP &$this Current WordPress environment instance (passed by reference). + */ + do_action_ref_array( 'send_headers', array( &$this ) ); + } + + /** + * Sets the query string property based off of the query variable property. + * + * The 'query_string' filter is deprecated, but still works. Plugins should + * use the 'request' filter instead. + * + * @since 2.0.0 + */ + function build_query_string() { + $this->query_string = ''; + foreach ( (array) array_keys($this->query_vars) as $wpvar) { + if ( '' != $this->query_vars[$wpvar] ) { + $this->query_string .= (strlen($this->query_string) < 1) ? '' : '&'; + if ( !is_scalar($this->query_vars[$wpvar]) ) // Discard non-scalars. + continue; + $this->query_string .= $wpvar . '=' . rawurlencode($this->query_vars[$wpvar]); + } + } + + if ( has_filter( 'query_string' ) ) { // Don't bother filtering and parsing if no plugins are hooked in. + /** + * Filter the query string before parsing. + * + * @since 1.5.0 + * @deprecated 2.1.0 Use 'query_vars' or 'request' filters instead. + * + * @param string $query_string The query string to modify. + */ + $this->query_string = apply_filters( 'query_string', $this->query_string ); + parse_str($this->query_string, $this->query_vars); + } + } + + /** + * Set up the WordPress Globals. + * + * The query_vars property will be extracted to the GLOBALS. So care should + * be taken when naming global variables that might interfere with the + * WordPress environment. + * + * @global string $query_string Query string for the loop. + * @global array $posts The found posts. + * @global WP_Post|null $post The current post, if available. + * @global string $request The SQL statement for the request. + * @global int $more Only set, if single page or post. + * @global int $single If single page or post. Only set, if single page or post. + * @global WP_User $authordata Only set, if author archive. + * + * @since 2.0.0 + */ + function register_globals() { + global $wp_query; + + // Extract updated query vars back into global namespace. + foreach ( (array) $wp_query->query_vars as $key => $value ) { + $GLOBALS[ $key ] = $value; + } + + $GLOBALS['query_string'] = $this->query_string; + $GLOBALS['posts'] = & $wp_query->posts; + $GLOBALS['post'] = isset( $wp_query->post ) ? $wp_query->post : null; + $GLOBALS['request'] = $wp_query->request; + + if ( $wp_query->is_single() || $wp_query->is_page() ) { + $GLOBALS['more'] = 1; + $GLOBALS['single'] = 1; + } + + if ( $wp_query->is_author() && isset( $wp_query->post ) ) + $GLOBALS['authordata'] = get_userdata( $wp_query->post->post_author ); + } + + /** + * Set up the current user. + * + * @since 2.0.0 + */ + function init() { + wp_get_current_user(); + } + + /** + * Set up the Loop based on the query variables. + * + * @uses WP::$query_vars + * @since 2.0.0 + */ + function query_posts() { + global $wp_the_query; + $this->build_query_string(); + $wp_the_query->query($this->query_vars); + } + + /** + * Set the Headers for 404, if nothing is found for requested URL. + * + * Issue a 404 if a request doesn't match any posts and doesn't match + * any object (e.g. an existing-but-empty category, tag, author) and a 404 was not already + * issued, and if the request was not a search or the homepage. + * + * Otherwise, issue a 200. + * + * @since 2.0.0 + */ + function handle_404() { + global $wp_query; + + // If we've already issued a 404, bail. + if ( is_404() ) + return; + + // Never 404 for the admin, robots, or if we found posts. + if ( is_admin() || is_robots() || $wp_query->posts ) { + status_header( 200 ); + return; + } + + // We will 404 for paged queries, as no posts were found. + if ( ! is_paged() ) { + + // Don't 404 for these queries if they matched an object. + if ( ( is_tag() || is_category() || is_tax() || is_author() || is_post_type_archive() ) && $wp_query->get_queried_object() ) { + status_header( 200 ); + return; + } + + // Don't 404 for these queries either. + if ( is_home() || is_search() ) { + status_header( 200 ); + return; + } + } + + // Guess it's time to 404. + $wp_query->set_404(); + status_header( 404 ); + nocache_headers(); + } + + /** + * Sets up all of the variables required by the WordPress environment. + * + * The action 'wp' has one parameter that references the WP object. It + * allows for accessing the properties and methods to further manipulate the + * object. + * + * @since 2.0.0 + * + * @param string|array $query_args Passed to {@link parse_request()} + */ + function main($query_args = '') { + $this->init(); + $this->parse_request($query_args); + $this->send_headers(); + $this->query_posts(); + $this->handle_404(); + $this->register_globals(); + + /** + * Fires once the WordPress environment has been set up. + * + * @since 2.1.0 + * + * @param WP &$this Current WordPress environment instance (passed by reference). + */ + do_action_ref_array( 'wp', array( &$this ) ); + } + +} + +/** + * Helper class to remove the need to use eval to replace $matches[] in query strings. + * + * @since 2.9.0 + */ +class WP_MatchesMapRegex { + /** + * store for matches + * + * @access private + * @var array + */ + var $_matches; + + /** + * store for mapping result + * + * @access public + * @var string + */ + var $output; + + /** + * subject to perform mapping on (query string containing $matches[] references + * + * @access private + * @var string + */ + var $_subject; + + /** + * regexp pattern to match $matches[] references + * + * @var string + */ + var $_pattern = '(\$matches\[[1-9]+[0-9]*\])'; // magic number + + /** + * constructor + * + * @param string $subject subject if regex + * @param array $matches data to use in map + * @return self + */ + function WP_MatchesMapRegex($subject, $matches) { + $this->_subject = $subject; + $this->_matches = $matches; + $this->output = $this->_map(); + } + + /** + * Substitute substring matches in subject. + * + * static helper function to ease use + * + * @access public + * @param string $subject subject + * @param array $matches data used for substitution + * @return string + */ + public static function apply($subject, $matches) { + $oSelf = new WP_MatchesMapRegex($subject, $matches); + return $oSelf->output; + } + + /** + * do the actual mapping + * + * @access private + * @return string + */ + function _map() { + $callback = array($this, 'callback'); + return preg_replace_callback($this->_pattern, $callback, $this->_subject); + } + + /** + * preg_replace_callback hook + * + * @access public + * @param array $matches preg_replace regexp matches + * @return string + */ + function callback($matches) { + $index = intval(substr($matches[0], 9, -1)); + return ( isset( $this->_matches[$index] ) ? urlencode($this->_matches[$index]) : '' ); + } + +} diff --git a/src/wp-includes/class.wp-dependencies.php b/src/wp-includes/class.wp-dependencies.php new file mode 100644 index 0000000..158d3e0 --- /dev/null +++ b/src/wp-includes/class.wp-dependencies.php @@ -0,0 +1,481 @@ +queue : (array) $handles; + $this->all_deps( $handles ); + + foreach( $this->to_do as $key => $handle ) { + if ( !in_array($handle, $this->done, true) && isset($this->registered[$handle]) ) { + + /** + * A single item may alias a set of items, by having dependencies, + * but no source. Queuing the item queues the dependencies. + * + * Example: The extending class WP_Scripts is used to register 'scriptaculous' as a set of registered handles: + * add( 'scriptaculous', false, array( 'scriptaculous-dragdrop', 'scriptaculous-slider', 'scriptaculous-controls' ) ); + * + * The src property is false. + **/ + if ( ! $this->registered[$handle]->src ) { + $this->done[] = $handle; + continue; + } + + /** + * Attempt to process the item. If successful, + * add the handle to the done array. + * + * Unset the item from the to_do array. + */ + if ( $this->do_item( $handle, $group ) ) + $this->done[] = $handle; + + unset( $this->to_do[$key] ); + } + } + + return $this->done; + } + + /** + * Process a dependency. + * + * @access public + * @since 2.6.0 + * + * @param string $handle Name of the item. Should be unique. + * @return bool True on success, false if not set. + */ + public function do_item( $handle ) { + return isset($this->registered[$handle]); + } + + /** + * Determine dependencies. + * + * Recursively builds an array of items to process taking + * dependencies into account. Does NOT catch infinite loops. + * + * @access public + * @since 2.1.0 + * + * @param mixed $handles Item handle and argument (string) or item handles and arguments (array of strings). + * @param bool $recursion Internal flag that function is calling itself. + * @param mixed $group Group level: (int) level, (false) no groups. + * @return bool True on success, false on failure. + */ + public function all_deps( $handles, $recursion = false, $group = false ) { + if ( !$handles = (array) $handles ) + return false; + + foreach ( $handles as $handle ) { + $handle_parts = explode('?', $handle); + $handle = $handle_parts[0]; + $queued = in_array($handle, $this->to_do, true); + + if ( in_array($handle, $this->done, true) ) // Already done + continue; + + $moved = $this->set_group( $handle, $recursion, $group ); + + if ( $queued && !$moved ) // already queued and in the right group + continue; + + $keep_going = true; + if ( !isset($this->registered[$handle]) ) + $keep_going = false; // Item doesn't exist. + elseif ( $this->registered[$handle]->deps && array_diff($this->registered[$handle]->deps, array_keys($this->registered)) ) + $keep_going = false; // Item requires dependencies that don't exist. + elseif ( $this->registered[$handle]->deps && !$this->all_deps( $this->registered[$handle]->deps, true, $group ) ) + $keep_going = false; // Item requires dependencies that don't exist. + + if ( ! $keep_going ) { // Either item or its dependencies don't exist. + if ( $recursion ) + return false; // Abort this branch. + else + continue; // We're at the top level. Move on to the next one. + } + + if ( $queued ) // Already grabbed it and its dependencies. + continue; + + if ( isset($handle_parts[1]) ) + $this->args[$handle] = $handle_parts[1]; + + $this->to_do[] = $handle; + } + + return true; + } + + /** + * Register an item. + * + * Registers the item if no item of that name already exists. + * + * @access public + * @since 2.1.0 + * + * @param string $handle Unique item name. + * @param string $src The item url. + * @param array $deps Optional. An array of item handle strings on which this item depends. + * @param string $ver Optional. Version (used for cache busting). + * @param mixed $args Optional. Custom property of the item. NOT the class property $args. Examples: $media, $in_footer. + * @return bool True on success, false on failure. + */ + public function add( $handle, $src, $deps = array(), $ver = false, $args = null ) { + if ( isset($this->registered[$handle]) ) + return false; + $this->registered[$handle] = new _WP_Dependency( $handle, $src, $deps, $ver, $args ); + return true; + } + + /** + * Add extra item data. + * + * Adds data to a registered item. + * + * @access public + * @since 2.6.0 + * + * @param string $handle Name of the item. Should be unique. + * @param string $key The data key. + * @param mixed $value The data value. + * @return bool True on success, false on failure. + */ + public function add_data( $handle, $key, $value ) { + if ( !isset( $this->registered[$handle] ) ) + return false; + + return $this->registered[$handle]->add_data( $key, $value ); + } + + /** + * Get extra item data. + * + * Gets data associated with a registered item. + * + * @access public + * @since 3.3.0 + * + * @param string $handle Name of the item. Should be unique. + * @param string $key The data key. + * @return mixed Extra item data (string), false otherwise. + */ + public function get_data( $handle, $key ) { + if ( !isset( $this->registered[$handle] ) ) + return false; + + if ( !isset( $this->registered[$handle]->extra[$key] ) ) + return false; + + return $this->registered[$handle]->extra[$key]; + } + + /** + * Un-register an item or items. + * + * @access public + * @since 2.1.0 + * + * @param mixed $handles Item handle and argument (string) or item handles and arguments (array of strings). + * @return void + */ + public function remove( $handles ) { + foreach ( (array) $handles as $handle ) + unset($this->registered[$handle]); + } + + /** + * Queue an item or items. + * + * Decodes handles and arguments, then queues handles and stores + * arguments in the class property $args. For example in extending + * classes, $args is appended to the item url as a query string. + * Note $args is NOT the $args property of items in the $registered array. + * + * @access public + * @since 2.1.0 + * + * @param mixed $handles Item handle and argument (string) or item handles and arguments (array of strings). + */ + public function enqueue( $handles ) { + foreach ( (array) $handles as $handle ) { + $handle = explode('?', $handle); + if ( !in_array($handle[0], $this->queue) && isset($this->registered[$handle[0]]) ) { + $this->queue[] = $handle[0]; + if ( isset($handle[1]) ) + $this->args[$handle[0]] = $handle[1]; + } + } + } + + /** + * Dequeue an item or items. + * + * Decodes handles and arguments, then dequeues handles + * and removes arguments from the class property $args. + * + * @access public + * @since 2.1.0 + * + * @param mixed $handles Item handle and argument (string) or item handles and arguments (array of strings). + */ + public function dequeue( $handles ) { + foreach ( (array) $handles as $handle ) { + $handle = explode('?', $handle); + $key = array_search($handle[0], $this->queue); + if ( false !== $key ) { + unset($this->queue[$key]); + unset($this->args[$handle[0]]); + } + } + } + + /** + * Query list for an item. + * + * @access public + * @since 2.1.0 + * + * @param string $handle Name of the item. Should be unique. + * @param string $list Property name of list array. + * @return bool Found, or object Item data. + */ + public function query( $handle, $list = 'registered' ) { + switch ( $list ) { + case 'registered' : + case 'scripts': // back compat + if ( isset( $this->registered[ $handle ] ) ) + return $this->registered[ $handle ]; + return false; + + case 'enqueued' : + case 'queue' : + return in_array( $handle, $this->queue ); + + case 'to_do' : + case 'to_print': // back compat + return in_array( $handle, $this->to_do ); + + case 'done' : + case 'printed': // back compat + return in_array( $handle, $this->done ); + } + return false; + } + + /** + * Set item group, unless already in a lower group. + * + * @access public + * @since 2.8.0 + * + * @param string $handle Name of the item. Should be unique. + * @param bool $recursion Internal flag that calling function was called recursively. + * @param mixed $group Group level. + * @return bool Not already in the group or a lower group + */ + public function set_group( $handle, $recursion, $group ) { + $group = (int) $group; + + if ( $recursion ) + $group = min($this->group, $group); + else + $this->group = $group; + + if ( isset($this->groups[$handle]) && $this->groups[$handle] <= $group ) + return false; + + $this->groups[$handle] = $group; + return true; + } + +} // WP_Dependencies + +/** + * Class _WP_Dependency + * + * Helper class to register a handle and associated data. + * + * @access private + * @since 2.6.0 + */ +class _WP_Dependency { + /** + * The handle name. + * + * @access public + * @since 2.6.0 + * @var null + */ + var $handle; + + /** + * The handle source. + * + * @access public + * @since 2.6.0 + * @var null + */ + var $src; + + /** + * An array of handle dependencies. + * + * @access public + * @since 2.6.0 + * @var array + */ + var $deps = array(); + + /** + * The handle version. + * + * Used for cache-busting. + * + * @access public + * @since 2.6.0 + * @var bool|string + */ + var $ver = false; + + /** + * Additional arguments for the handle. + * + * @access public + * @since 2.6.0 + * @var null + */ + var $args = null; // Custom property, such as $in_footer or $media. + + /** + * Extra data to supply to the handle. + * + * @access public + * @since 2.6.0 + * @var array + */ + var $extra = array(); + + /** + * Setup dependencies. + * + * @since 2.6.0 + */ + function __construct() { + @list( $this->handle, $this->src, $this->deps, $this->ver, $this->args ) = func_get_args(); + if ( ! is_array($this->deps) ) + $this->deps = array(); + } + + /** + * Add handle data. + * + * @access public + * @since 2.6.0 + * + * @param string $name The data key to add. + * @param mixed $data The data value to add. + * @return bool False if not scalar, true otherwise. + */ + function add_data( $name, $data ) { + if ( !is_scalar($name) ) + return false; + $this->extra[$name] = $data; + return true; + } + +} // _WP_Dependencies diff --git a/src/wp-includes/class.wp-scripts.php b/src/wp-includes/class.wp-scripts.php new file mode 100644 index 0000000..5e16632 --- /dev/null +++ b/src/wp-includes/class.wp-scripts.php @@ -0,0 +1,220 @@ +init(); + add_action( 'init', array( $this, 'init' ), 0 ); + } + + function init() { + do_action_ref_array( 'wp_default_scripts', array(&$this) ); + } + + /** + * Prints scripts + * + * Prints the scripts passed to it or the print queue. Also prints all necessary dependencies. + * + * @param mixed $handles (optional) Scripts to be printed. (void) prints queue, (string) prints that script, (array of strings) prints those scripts. + * @param int $group (optional) If scripts were queued in groups prints this group number. + * @return array Scripts that have been printed + */ + function print_scripts( $handles = false, $group = false ) { + return $this->do_items( $handles, $group ); + } + + // Deprecated since 3.3, see print_extra_script() + function print_scripts_l10n( $handle, $echo = true ) { + _deprecated_function( __FUNCTION__, '3.3', 'print_extra_script()' ); + return $this->print_extra_script( $handle, $echo ); + } + + function print_extra_script( $handle, $echo = true ) { + if ( !$output = $this->get_data( $handle, 'data' ) ) + return; + + if ( !$echo ) + return $output; + + echo "\n"; + + return true; + } + + function do_item( $handle, $group = false ) { + if ( !parent::do_item($handle) ) + return false; + + if ( 0 === $group && $this->groups[$handle] > 0 ) { + $this->in_footer[] = $handle; + return false; + } + + if ( false === $group && in_array($handle, $this->in_footer, true) ) + $this->in_footer = array_diff( $this->in_footer, (array) $handle ); + + if ( null === $this->registered[$handle]->ver ) + $ver = ''; + else + $ver = $this->registered[$handle]->ver ? $this->registered[$handle]->ver : $this->default_version; + + if ( isset($this->args[$handle]) ) + $ver = $ver ? $ver . '&' . $this->args[$handle] : $this->args[$handle]; + + $src = $this->registered[$handle]->src; + + if ( $this->do_concat ) { + $srce = apply_filters( 'script_loader_src', $src, $handle ); + if ( $this->in_default_dir($srce) ) { + $this->print_code .= $this->print_extra_script( $handle, false ); + $this->concat .= "$handle,"; + $this->concat_version .= "$handle$ver"; + return true; + } else { + $this->ext_handles .= "$handle,"; + $this->ext_version .= "$handle$ver"; + } + } + + $this->print_extra_script( $handle ); + if ( !preg_match('|^(https?:)?//|', $src) && ! ( $this->content_url && 0 === strpos($src, $this->content_url) ) ) { + $src = $this->base_url . $src; + } + + if ( !empty($ver) ) + $src = add_query_arg('ver', $ver, $src); + + $src = esc_url( apply_filters( 'script_loader_src', $src, $handle ) ); + + if ( ! $src ) + return true; + + if ( $this->do_concat ) + $this->print_html .= "\n"; + else + echo "\n"; + + return true; + } + + /** + * Localizes a script + * + * Localizes only if the script has already been added + */ + function localize( $handle, $object_name, $l10n ) { + if ( $handle === 'jquery' ) + $handle = 'jquery-core'; + + if ( is_array($l10n) && isset($l10n['l10n_print_after']) ) { // back compat, preserve the code in 'l10n_print_after' if present + $after = $l10n['l10n_print_after']; + unset($l10n['l10n_print_after']); + } + + foreach ( (array) $l10n as $key => $value ) { + if ( !is_scalar($value) ) + continue; + + $l10n[$key] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8'); + } + + $script = "var $object_name = " . json_encode($l10n) . ';'; + + if ( !empty($after) ) + $script .= "\n$after;"; + + $data = $this->get_data( $handle, 'data' ); + + if ( !empty( $data ) ) + $script = "$data\n$script"; + + return $this->add_data( $handle, 'data', $script ); + } + + function set_group( $handle, $recursion, $group = false ) { + + if ( $this->registered[$handle]->args === 1 ) + $grp = 1; + else + $grp = (int) $this->get_data( $handle, 'group' ); + + if ( false !== $group && $grp > $group ) + $grp = $group; + + return parent::set_group( $handle, $recursion, $grp ); + } + + function all_deps( $handles, $recursion = false, $group = false ) { + $r = parent::all_deps( $handles, $recursion ); + if ( !$recursion ) + $this->to_do = apply_filters( 'print_scripts_array', $this->to_do ); + return $r; + } + + function do_head_items() { + $this->do_items(false, 0); + return $this->done; + } + + function do_footer_items() { + $this->do_items(false, 1); + return $this->done; + } + + function in_default_dir($src) { + if ( ! $this->default_dirs ) + return true; + + if ( 0 === strpos( $src, '/wp-includes/js/l10n' ) ) + return false; + + foreach ( (array) $this->default_dirs as $test ) { + if ( 0 === strpos($src, $test) ) + return true; + } + return false; + } + + function reset() { + $this->do_concat = false; + $this->print_code = ''; + $this->concat = ''; + $this->concat_version = ''; + $this->print_html = ''; + $this->ext_version = ''; + $this->ext_handles = ''; + } +} diff --git a/src/wp-includes/class.wp-styles.php b/src/wp-includes/class.wp-styles.php new file mode 100644 index 0000000..874e1a4 --- /dev/null +++ b/src/wp-includes/class.wp-styles.php @@ -0,0 +1,173 @@ +registered[$handle]; + if ( null === $obj->ver ) + $ver = ''; + else + $ver = $obj->ver ? $obj->ver : $this->default_version; + + if ( isset($this->args[$handle]) ) + $ver = $ver ? $ver . '&' . $this->args[$handle] : $this->args[$handle]; + + if ( $this->do_concat ) { + if ( $this->in_default_dir($obj->src) && !isset($obj->extra['conditional']) && !isset($obj->extra['alt']) ) { + $this->concat .= "$handle,"; + $this->concat_version .= "$handle$ver"; + + $this->print_code .= $this->print_inline_style( $handle, false ); + + return true; + } + } + + if ( isset($obj->args) ) + $media = esc_attr( $obj->args ); + else + $media = 'all'; + + $href = $this->_css_href( $obj->src, $ver, $handle ); + $rel = isset($obj->extra['alt']) && $obj->extra['alt'] ? 'alternate stylesheet' : 'stylesheet'; + $title = isset($obj->extra['title']) ? "title='" . esc_attr( $obj->extra['title'] ) . "'" : ''; + + $tag = apply_filters( 'style_loader_tag', "\n", $handle ); + if ( 'rtl' === $this->text_direction && isset($obj->extra['rtl']) && $obj->extra['rtl'] ) { + if ( is_bool( $obj->extra['rtl'] ) || 'replace' === $obj->extra['rtl'] ) { + $suffix = isset( $obj->extra['suffix'] ) ? $obj->extra['suffix'] : ''; + $rtl_href = str_replace( "{$suffix}.css", "-rtl{$suffix}.css", $this->_css_href( $obj->src , $ver, "$handle-rtl" )); + } else { + $rtl_href = $this->_css_href( $obj->extra['rtl'], $ver, "$handle-rtl" ); + } + + $rtl_tag = apply_filters( 'style_loader_tag', "\n", $handle ); + + if ( $obj->extra['rtl'] === 'replace' ) { + $tag = $rtl_tag; + } else { + $tag .= $rtl_tag; + } + } + + if ( isset($obj->extra['conditional']) && $obj->extra['conditional'] ) { + $tag = "\n"; + } + + if ( $this->do_concat ) { + $this->print_html .= $tag; + if ( $inline_style = $this->print_inline_style( $handle, false ) ) + $this->print_html .= sprintf( "\n", $inline_style ); + } else { + echo $tag; + $this->print_inline_style( $handle ); + } + + return true; + } + + function add_inline_style( $handle, $code ) { + if ( !$code ) + return false; + + $after = $this->get_data( $handle, 'after' ); + if ( !$after ) + $after = array(); + + $after[] = $code; + + return $this->add_data( $handle, 'after', $after ); + } + + function print_inline_style( $handle, $echo = true ) { + $output = $this->get_data( $handle, 'after' ); + + if ( empty( $output ) ) + return false; + + $output = implode( "\n", $output ); + + if ( !$echo ) + return $output; + + echo "\n"; + + return true; + } + + function all_deps( $handles, $recursion = false, $group = false ) { + $r = parent::all_deps( $handles, $recursion ); + if ( !$recursion ) + $this->to_do = apply_filters( 'print_styles_array', $this->to_do ); + return $r; + } + + function _css_href( $src, $ver, $handle ) { + if ( !is_bool($src) && !preg_match('|^(https?:)?//|', $src) && ! ( $this->content_url && 0 === strpos($src, $this->content_url) ) ) { + $src = $this->base_url . $src; + } + + if ( !empty($ver) ) + $src = add_query_arg('ver', $ver, $src); + $src = apply_filters( 'style_loader_src', $src, $handle ); + return esc_url( $src ); + } + + function in_default_dir($src) { + if ( ! $this->default_dirs ) + return true; + + foreach ( (array) $this->default_dirs as $test ) { + if ( 0 === strpos($src, $test) ) + return true; + } + return false; + } + + function do_footer_items() { // HTML 5 allows styles in the body, grab late enqueued items and output them in the footer. + $this->do_items(false, 1); + return $this->done; + } + + function reset() { + $this->do_concat = false; + $this->concat = ''; + $this->concat_version = ''; + $this->print_html = ''; + } +} diff --git a/src/wp-includes/comment-template.php b/src/wp-includes/comment-template.php new file mode 100644 index 0000000..9e59ce9 --- /dev/null +++ b/src/wp-includes/comment-template.php @@ -0,0 +1,2152 @@ +comment_author ) ) { + if ( $comment->user_id && $user = get_userdata( $comment->user_id ) ) + $author = $user->display_name; + else + $author = __('Anonymous'); + } else { + $author = $comment->comment_author; + } + + /** + * Filter the returned comment author name. + * + * @since 1.5.0 + * + * @param string $author The comment author's username. + */ + return apply_filters( 'get_comment_author', $author ); +} + +/** + * Displays the author of the current comment. + * + * @since 0.71 + * + * @param int $comment_ID Optional. The ID of the comment for which to print the author. Default current comment. + */ +function comment_author( $comment_ID = 0 ) { + $author = get_comment_author( $comment_ID ); + /** + * Filter the comment author's name for display. + * + * @since 1.2.0 + * + * @param string $author The comment author's username. + */ + $author = apply_filters( 'comment_author', $author ); + echo $author; +} + +/** + * Retrieve the email of the author of the current comment. + * + * @since 1.5.0 + * + * @param int $comment_ID Optional. The ID of the comment for which to get the author's email. Default current comment. + * @return string The current comment author's email + */ +function get_comment_author_email( $comment_ID = 0 ) { + $comment = get_comment( $comment_ID ); + /** + * Filter the comment author's returned email address. + * + * @since 1.5.0 + * + * @param string $comment->comment_author_email The comment author's email address. + */ + return apply_filters( 'get_comment_author_email', $comment->comment_author_email ); +} + +/** + * Display the email of the author of the current global $comment. + * + * Care should be taken to protect the email address and assure that email + * harvesters do not capture your commentors' email address. Most assume that + * their email address will not appear in raw form on the blog. Doing so will + * enable anyone, including those that people don't want to get the email + * address and use it for their own means good and bad. + * + * @since 0.71 + * + * @param int $comment_ID Optional. The ID of the comment for which to print the author's email. Default current comment. + */ +function comment_author_email( $comment_ID = 0 ) { + $author_email = get_comment_author_email( $comment_ID ); + /** + * Filter the comment author's email for display. + * + * @since 1.2.0 + * + * @param string $author_email The comment author's email address. + */ + echo apply_filters( 'author_email', $author_email ); +} + +/** + * Display the html email link to the author of the current comment. + * + * Care should be taken to protect the email address and assure that email + * harvesters do not capture your commentors' email address. Most assume that + * their email address will not appear in raw form on the blog. Doing so will + * enable anyone, including those that people don't want to get the email + * address and use it for their own means good and bad. + * + * @global object $comment The current Comment row object + + * @since 0.71 + * + * @param string $linktext Optional. The text to display instead of the comment author's email address. Default empty. + * @param string $before Optional. The text or HTML to display before the email link.Default empty. + * @param string $after Optional. The text or HTML to display after the email link. Default empty. + */ +function comment_author_email_link( $linktext = '', $before = '', $after = '' ) { + if ( $link = get_comment_author_email_link( $linktext, $before, $after ) ) + echo $link; +} + +/** + * Return the html email link to the author of the current comment. + * + * Care should be taken to protect the email address and assure that email + * harvesters do not capture your commentors' email address. Most assume that + * their email address will not appear in raw form on the blog. Doing so will + * enable anyone, including those that people don't want to get the email + * address and use it for their own means good and bad. + * + * @global object $comment The current Comment row object. + * + * @since 2.7 + * + * @param string $linktext Optional. The text to display instead of the comment author's email address. Default empty. + * @param string $before Optional. The text or HTML to display before the email link. Default empty. + * @param string $after Optional. The text or HTML to display after the email link. Default empty. + */ +function get_comment_author_email_link( $linktext = '', $before = '', $after = '' ) { + global $comment; + /** + * Filter the comment author's email for display. + * + * Care should be taken to protect the email address and assure that email + * harvesters do not capture your commentors' email address. + * + * @since 1.2.0 + * + * @param string $comment->comment_author_email The comment author's email address. + */ + $email = apply_filters( 'comment_email', $comment->comment_author_email ); + if ((!empty($email)) && ($email != '@')) { + $display = ($linktext != '') ? $linktext : $email; + $return = $before; + $return .= "$display"; + $return .= $after; + return $return; + } else { + return ''; + } +} + +/** + * Retrieve the HTML link to the URL of the author of the current comment. + * + * Both get_comment_author_url() and get_comment_author() rely on get_comment(), + * which falls back to the global comment variable if the $comment_ID argument is empty. + * + * @since 1.5.0 + * + * @param int $comment_ID Optional. The ID of the comment for which to get the author's link. Default current comment. + * @return string The comment author name or HTML link for author's URL. + */ +function get_comment_author_link( $comment_ID = 0 ) { + $url = get_comment_author_url( $comment_ID ); + $author = get_comment_author( $comment_ID ); + + if ( empty( $url ) || 'http://' == $url ) + $return = $author; + else + $return = "$author"; + + /** + * Filter the comment author's link for display. + * + * @since 1.5.0 + * + * @param string $return The HTML-formatted comment author link. Empty for an invalid URL. + */ + return apply_filters( 'get_comment_author_link', $return ); +} + +/** + * Display the html link to the url of the author of the current comment. + * + * @since 0.71 + * @see get_comment_author_link() Echoes result + * + * @param int $comment_ID Optional. The ID of the comment for which to print the author's link. Default current comment. + */ +function comment_author_link( $comment_ID = 0 ) { + echo get_comment_author_link( $comment_ID ); +} + +/** + * Retrieve the IP address of the author of the current comment. + * + * @since 1.5.0 + * + * @param int $comment_ID Optional. The ID of the comment for which to get the author's IP address. Default current comment. + * @return string The comment author's IP address. + */ +function get_comment_author_IP( $comment_ID = 0 ) { + $comment = get_comment( $comment_ID ); + + /** + * Filter the comment author's returned IP address. + * + * @since 1.5.0 + * + * @param string $comment->comment_author_IP The comment author's IP address. + */ + return apply_filters( 'get_comment_author_IP', $comment->comment_author_IP ); +} + +/** + * Display the IP address of the author of the current comment. + * + * @since 0.71 + * + * @param int $comment_ID Optional. The ID of the comment for which to print the author's IP address. Default current comment. + */ +function comment_author_IP( $comment_ID = 0 ) { + echo get_comment_author_IP( $comment_ID ); +} + +/** + * Retrieve the url of the author of the current comment. + * + * @since 1.5.0 + * + * @param int $comment_ID Optional. The ID of the comment for which to get the author's URL. Default current comment. + * @return string + */ +function get_comment_author_url( $comment_ID = 0 ) { + $comment = get_comment( $comment_ID ); + $url = ('http://' == $comment->comment_author_url) ? '' : $comment->comment_author_url; + $url = esc_url( $url, array('http', 'https') ); + /** + * Filter the comment author's URL. + * + * @since 1.5.0 + * + * @param string $url The comment author's URL. + */ + return apply_filters( 'get_comment_author_url', $url ); +} + +/** + * Display the url of the author of the current comment. + * + * @since 0.71 + * + * @param int $comment_ID Optional. The ID of the comment for which to print the author's URL. Default current comment. + */ +function comment_author_url( $comment_ID = 0 ) { + $author_url = get_comment_author_url( $comment_ID ); + /** + * Filter the comment author's URL for display. + * + * @since 1.2.0 + * + * @param string $author_url The comment author's URL. + */ + echo apply_filters( 'comment_url', $author_url ); +} + +/** + * Retrieves the HTML link of the url of the author of the current comment. + * + * $linktext parameter is only used if the URL does not exist for the comment + * author. If the URL does exist then the URL will be used and the $linktext + * will be ignored. + * + * Encapsulate the HTML link between the $before and $after. So it will appear + * in the order of $before, link, and finally $after. + * + * @since 1.5.0 + * + * @param string $linktext Optional. The text to display instead of the comment author's email address. Default empty. + * @param string $before Optional. The text or HTML to display before the email link. Default empty. + * @param string $after Optional. The text or HTML to display after the email link. Default empty. + * @return string The HTML link between the $before and $after parameters. + */ +function get_comment_author_url_link( $linktext = '', $before = '', $after = '' ) { + $url = get_comment_author_url(); + $display = ($linktext != '') ? $linktext : $url; + $display = str_replace( 'http://www.', '', $display ); + $display = str_replace( 'http://', '', $display ); + if ( '/' == substr($display, -1) ) + $display = substr($display, 0, -1); + $return = "$before$display$after"; + + /** + * Filter the comment author's returned URL link. + * + * @since 1.5.0 + * + * @param string $return The HTML-formatted comment author URL link. + */ + return apply_filters( 'get_comment_author_url_link', $return ); +} + +/** + * Displays the HTML link of the url of the author of the current comment. + * + * @since 0.71 + * + * @param string $linktext Optional. The text to display instead of the comment author's email address. Default empty. + * @param string $before Optional. The text or HTML to display before the email link. Default empty. + * @param string $after Optional. The text or HTML to display after the email link. Default empty. + */ +function comment_author_url_link( $linktext = '', $before = '', $after = '' ) { + echo get_comment_author_url_link( $linktext, $before, $after ); +} + +/** + * Generates semantic classes for each comment element + * + * @since 2.7.0 + * + * @param string|array $class Optional. One or more classes to add to the class list. Default empty. + * @param int $comment_id Optional. Comment ID. Default current comment. + * @param int|WP_Post $post_id Optional. Post ID or WP_Post object. Default current post. + * @param bool $echo Optional. Whether comment_class should echo or return. Default true. + */ +function comment_class( $class = '', $comment_id = null, $post_id = null, $echo = true ) { + // Separates classes with a single space, collates classes for comment DIV + $class = 'class="' . join( ' ', get_comment_class( $class, $comment_id, $post_id ) ) . '"'; + if ( $echo) + echo $class; + else + return $class; +} + +/** + * Returns the classes for the comment div as an array + * + * @since 2.7.0 + * + * @param string|array $class Optional. One or more classes to add to the class list. Default empty. + * @param int $comment_id Optional. Comment ID. Default current comment. + * @param int|WP_Post $post_id Optional. Post ID or WP_Post object. Default current post. + * @return array An array of classes. + */ +function get_comment_class( $class = '', $comment_id = null, $post_id = null ) { + global $comment_alt, $comment_depth, $comment_thread_alt; + + $comment = get_comment($comment_id); + + $classes = array(); + + // Get the comment type (comment, trackback), + $classes[] = ( empty( $comment->comment_type ) ) ? 'comment' : $comment->comment_type; + + // If the comment author has an id (registered), then print the log in name + if ( $comment->user_id > 0 && $user = get_userdata($comment->user_id) ) { + // For all registered users, 'byuser' + $classes[] = 'byuser'; + $classes[] = 'comment-author-' . sanitize_html_class($user->user_nicename, $comment->user_id); + // For comment authors who are the author of the post + if ( $post = get_post($post_id) ) { + if ( $comment->user_id === $post->post_author ) + $classes[] = 'bypostauthor'; + } + } + + if ( empty($comment_alt) ) + $comment_alt = 0; + if ( empty($comment_depth) ) + $comment_depth = 1; + if ( empty($comment_thread_alt) ) + $comment_thread_alt = 0; + + if ( $comment_alt % 2 ) { + $classes[] = 'odd'; + $classes[] = 'alt'; + } else { + $classes[] = 'even'; + } + + $comment_alt++; + + // Alt for top-level comments + if ( 1 == $comment_depth ) { + if ( $comment_thread_alt % 2 ) { + $classes[] = 'thread-odd'; + $classes[] = 'thread-alt'; + } else { + $classes[] = 'thread-even'; + } + $comment_thread_alt++; + } + + $classes[] = "depth-$comment_depth"; + + if ( !empty($class) ) { + if ( !is_array( $class ) ) + $class = preg_split('#\s+#', $class); + $classes = array_merge($classes, $class); + } + + $classes = array_map('esc_attr', $classes); + + /** + * Filter the returned CSS classes for the current comment. + * + * @since 2.7.0 + * + * @param array $classes An array of comment classes. + * @param string $class A comma-separated list of additional classes added to the list. + * @param int $comment_id The comment id. + * @param int|WP_Post $post_id The post ID or WP_Post object. + */ + return apply_filters( 'comment_class', $classes, $class, $comment_id, $post_id ); +} + +/** + * Retrieve the comment date of the current comment. + * + * @since 1.5.0 + * + * @param string $d Optional. The format of the date. Default user's setting. + * @param int $comment_ID Optional. The ID of the comment for which to get the date. Default current comment. + * @return string The comment's date. + */ +function get_comment_date( $d = '', $comment_ID = 0 ) { + $comment = get_comment( $comment_ID ); + if ( '' == $d ) + $date = mysql2date(get_option('date_format'), $comment->comment_date); + else + $date = mysql2date($d, $comment->comment_date); + /** + * Filter the returned comment date. + * + * @since 1.5.0 + * + * @param string|int $date Formatted date string or Unix timestamp. + * @param string $d The format of the date. + */ + return apply_filters( 'get_comment_date', $date, $d ); +} + +/** + * Display the comment date of the current comment. + * + * @since 0.71 + * + * @param string $d Optional. The format of the date. Default user's settings. + * @param int $comment_ID Optional. The ID of the comment for which to print the date. Default current comment. + */ +function comment_date( $d = '', $comment_ID = 0 ) { + echo get_comment_date( $d, $comment_ID ); +} + +/** + * Retrieve the excerpt of the current comment. + * + * Will cut each word and only output the first 20 words with '…' at the end. + * If the word count is less than 20, then no truncating is done and no '…' + * will appear. + * + * @since 1.5.0 + * + * @param int $comment_ID Optional. The ID of the comment for which to get the excerpt. Default current comment. + * @return string The maybe truncated comment with 20 words or less. + */ +function get_comment_excerpt( $comment_ID = 0 ) { + $comment = get_comment( $comment_ID ); + $comment_text = strip_tags($comment->comment_content); + $blah = explode(' ', $comment_text); + if (count($blah) > 20) { + $k = 20; + $use_dotdotdot = 1; + } else { + $k = count($blah); + $use_dotdotdot = 0; + } + $excerpt = ''; + for ($i=0; $i<$k; $i++) { + $excerpt .= $blah[$i] . ' '; + } + $excerpt .= ($use_dotdotdot) ? '…' : ''; + return apply_filters('get_comment_excerpt', $excerpt); +} + +/** + * Display the excerpt of the current comment. + * + * @since 1.2.0 + * + * @param int $comment_ID Optional. The ID of the comment for which to print the excerpt. Default current comment. + */ +function comment_excerpt( $comment_ID = 0 ) { + $comment_excerpt = get_comment_excerpt($comment_ID); + /** + * Filter the comment excerpt for display. + * + * @since 1.2.0 + * + * @param string $comment_excerpt The comment excerpt text. + */ + echo apply_filters( 'comment_excerpt', $comment_excerpt ); +} + +/** + * Retrieve the comment id of the current comment. + * + * @since 1.5.0 + * + * @return int The comment ID. + */ +function get_comment_ID() { + global $comment; + /** + * Filter the returned comment ID. + * + * @since 1.5.0 + * + * @param int $comment->comment_ID The current comment ID. + */ + return apply_filters( 'get_comment_ID', $comment->comment_ID ); +} + +/** + * Display the comment id of the current comment. + * + * @since 0.71 + */ +function comment_ID() { + echo get_comment_ID(); +} + +/** + * Retrieve the link to a given comment. + * + * @since 1.5.0 + * + * @param mixed $comment Optional. Comment to retrieve. Default current comment. + * @param array $args Optional. An array of arguments to override the defaults. @see get_page_of_comment() + * @return string The permalink to the given comment. + */ +function get_comment_link( $comment = null, $args = array() ) { + global $wp_rewrite, $in_comment_loop; + + $comment = get_comment($comment); + + // Backwards compat + if ( !is_array($args) ) { + $page = $args; + $args = array(); + $args['page'] = $page; + } + + $defaults = array( 'type' => 'all', 'page' => '', 'per_page' => '', 'max_depth' => '' ); + $args = wp_parse_args( $args, $defaults ); + + if ( '' === $args['per_page'] && get_option('page_comments') ) + $args['per_page'] = get_option('comments_per_page'); + + if ( empty($args['per_page']) ) { + $args['per_page'] = 0; + $args['page'] = 0; + } + + if ( $args['per_page'] ) { + if ( '' == $args['page'] ) + $args['page'] = ( !empty($in_comment_loop) ) ? get_query_var('cpage') : get_page_of_comment( $comment->comment_ID, $args ); + + if ( $wp_rewrite->using_permalinks() ) + $link = user_trailingslashit( trailingslashit( get_permalink( $comment->comment_post_ID ) ) . 'comment-page-' . $args['page'], 'comment' ); + else + $link = add_query_arg( 'cpage', $args['page'], get_permalink( $comment->comment_post_ID ) ); + } else { + $link = get_permalink( $comment->comment_post_ID ); + } + + $link = $link . '#comment-' . $comment->comment_ID; + /** + * Filter the returned single comment permalink. + * + * @since 2.8.0 + * + * @param string $link The comment permalink with '#comment-$id' appended. + * @param object $comment The current comment object. + * @param array $args An array of arguments to override the defaults. @see get_page_of_comment() + */ + return apply_filters( 'get_comment_link', $link, $comment, $args ); +} + +/** + * Retrieve the link to the current post comments. + * + * @since 1.5.0 + * + * @param int|WP_Post $post_id Optional. Post ID or WP_Post object. Default current post. + * @return string The link to the comments. + */ +function get_comments_link( $post_id = 0 ) { + $comments_link = get_permalink( $post_id ) . '#comments'; + /** + * Filter the returned post comments permalink. + * + * @since + * + * @param string $comments_link The post comments permalink with '#comments' appended. + * @param int|WP_Post $post_id The post ID or WP_Post object. + */ + return apply_filters( 'get_comments_link', $comments_link, $post_id ); +} + +/** + * Display the link to the current post comments. + * + * @since 0.71 + * + * @param string $deprecated Not Used. + * @param bool $deprecated_2 Not Used. + */ +function comments_link( $deprecated = '', $deprecated_2 = '' ) { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '0.72' ); + if ( !empty( $deprecated_2 ) ) + _deprecated_argument( __FUNCTION__, '1.3' ); + echo esc_url( get_comments_link() ); +} + +/** + * Retrieve the amount of comments a post has. + * + * @since 1.5.0 + * + * @param int|WP_Post $post_id Optional. Post ID or WP_Post object. Default current post. + * @return int The number of comments a post has. + */ +function get_comments_number( $post_id = 0 ) { + $post_id = absint( $post_id ); + + if ( !$post_id ) + $post_id = get_the_ID(); + + $post = get_post($post_id); + if ( ! isset($post->comment_count) ) + $count = 0; + else + $count = $post->comment_count; + + /** + * Filter the returned comment count for a post. + * + * @since 1.5.0 + * + * @param int $count The number of comments a post has. + * @param int|WP_Post $post_id The post ID or WP_Post object. + */ + return apply_filters( 'get_comments_number', $count, $post_id ); +} + +/** + * Display the language string for the number of comments the current post has. + * + * @since 0.71 + * + * @param string $zero Optional. Text for no comments. Default false. + * @param string $one Optional. Text for one comment. Default false. + * @param string $more Optional. Text for more than one comment. Default false. + * @param string $deprecated Not used. + */ +function comments_number( $zero = false, $one = false, $more = false, $deprecated = '' ) { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '1.3' ); + + $number = get_comments_number(); + + if ( $number > 1 ) + $output = str_replace('%', number_format_i18n($number), ( false === $more ) ? __('% Comments') : $more); + elseif ( $number == 0 ) + $output = ( false === $zero ) ? __('No Comments') : $zero; + else // must be one + $output = ( false === $one ) ? __('1 Comment') : $one; + + /** + * Filter the comments count for display. + * + * @since 1.5.0 + * + * @param string $output A translatable string formatted based on whether the count is equal to 0, 1, or 1+. @see _n() + * @param int $number The number of post comments. + */ + echo apply_filters( 'comments_number', $output, $number ); +} + +/** + * Retrieve the text of the current comment. + * + * @since 1.5.0 + * + * @param int $comment_ID Optional. The ID of the comment for which to get the text. Default current comment. + * @param array $args Optional. An array of arguments. @see Walker_Comment::comment() + * @return string The comment content. + */ +function get_comment_text( $comment_ID = 0, $args = array() ) { + $comment = get_comment( $comment_ID ); + + /** + * Filter the text of a comment. + * + * @since 1.5.0 + * + * @param string $comment->comment_content The text of the comment. + * @param object $comment The comment object. + * @param array $args An array of arguments. @see Walker_Comment::comment() + */ + return apply_filters( 'get_comment_text', $comment->comment_content, $comment, $args ); +} + +/** + * Display the text of the current comment. + * + * @since 0.71 + * + * @param int $comment_ID Optional. The ID of the comment for which to print the text. + * Default 0. + * @param array $args Optional. An array of arguments. @see Walker_Comment::comment() + * Default empty array. + */ +function comment_text( $comment_ID = 0, $args = array() ) { + $comment = get_comment( $comment_ID ); + + $comment_text = get_comment_text( $comment_ID , $args ); + /** + * Filter the text of a comment to be displayed. + * + * @since 1.2.0 + * + * @param string $comment_text The text of the current comment. + * @param object $comment The comment object. + * @param array $args An array of arguments. @see Walker_Comment::comment() + */ + echo apply_filters( 'comment_text', $comment_text, $comment, $args ); +} + +/** + * Retrieve the comment time of the current comment. + * + * @since 1.5.0 + * + * @param string $d Optional. The format of the time. Default user's settings. + * @param bool $gmt Optional. Whether to use the GMT date. Default false. + * @param bool $translate Optional. Whether to translate the time (for use in feeds). Default true. + * @return string The formatted time + */ +function get_comment_time( $d = '', $gmt = false, $translate = true ) { + global $comment; + $comment_date = $gmt ? $comment->comment_date_gmt : $comment->comment_date; + if ( '' == $d ) + $date = mysql2date(get_option('time_format'), $comment_date, $translate); + else + $date = mysql2date($d, $comment_date, $translate); + + /** + * Filter the returned comment time. + * + * @since 1.5.0 + * + * @param string|int $date The comment time, formatted as a date string or Unix timestamp. + * @param string $d The date format. + * @param bool $gmt Whether the GMT date is in use. + * @param bool $translate Whether the time is translated. + */ + return apply_filters( 'get_comment_time', $date, $d, $gmt, $translate ); +} + +/** + * Display the comment time of the current comment. + * + * @since 0.71 + * + * @param string $d Optional. The format of the time. Default user's settings. + */ +function comment_time( $d = '' ) { + echo get_comment_time($d); +} + +/** + * Retrieve the comment type of the current comment. + * + * @since 1.5.0 + * + * @param int $comment_ID Optional. The ID of the comment for which to get the type. Default current comment. + * @return string The comment type + */ +function get_comment_type( $comment_ID = 0 ) { + $comment = get_comment( $comment_ID ); + if ( '' == $comment->comment_type ) + $comment->comment_type = 'comment'; + + /** + * Filter the returned comment type. + * + * @since 1.5.0 + * + * @param string $comment->comment_type The type of comment, such as 'comment', 'pingback', or 'trackback'. + */ + return apply_filters( 'get_comment_type', $comment->comment_type ); +} + +/** + * Display the comment type of the current comment. + * + * @since 0.71 + * + * @param string $commenttxt Optional. The string to display for comment type. Default false. + * @param string $trackbacktxt Optional. The string to display for trackback type. Default false. + * @param string $pingbacktxt Optional. The string to display for pingback type. Default false. + */ +function comment_type( $commenttxt = false, $trackbacktxt = false, $pingbacktxt = false ) { + if ( false === $commenttxt ) $commenttxt = _x( 'Comment', 'noun' ); + if ( false === $trackbacktxt ) $trackbacktxt = __( 'Trackback' ); + if ( false === $pingbacktxt ) $pingbacktxt = __( 'Pingback' ); + $type = get_comment_type(); + switch( $type ) { + case 'trackback' : + echo $trackbacktxt; + break; + case 'pingback' : + echo $pingbacktxt; + break; + default : + echo $commenttxt; + } +} + +/** + * Retrieve The current post's trackback URL. + * + * There is a check to see if permalink's have been enabled and if so, will + * retrieve the pretty path. If permalinks weren't enabled, the ID of the + * current post is used and appended to the correct page to go to. + * + * @since 1.5.0 + * + * @return string The trackback URL after being filtered. + */ +function get_trackback_url() { + if ( '' != get_option('permalink_structure') ) + $tb_url = trailingslashit(get_permalink()) . user_trailingslashit('trackback', 'single_trackback'); + else + $tb_url = get_option('siteurl') . '/wp-trackback.php?p=' . get_the_ID(); + + /** + * Filter the returned trackback URL. + * + * @since 2.2.0 + * + * @param string $tb_url The trackback URL. + */ + return apply_filters( 'trackback_url', $tb_url ); +} + +/** + * Display the current post's trackback URL. + * + * @since 0.71 + * + * @param bool $deprecated_echo Not used. + * @return void|string Should only be used to echo the trackback URL, use get_trackback_url() for the result instead. + */ +function trackback_url( $deprecated_echo = true ) { + if ( $deprecated_echo !== true ) + _deprecated_argument( __FUNCTION__, '2.5', __('Use get_trackback_url() instead if you do not want the value echoed.') ); + if ( $deprecated_echo ) + echo get_trackback_url(); + else + return get_trackback_url(); +} + +/** + * Generate and display the RDF for the trackback information of current post. + * + * Deprecated in 3.0.0, and restored in 3.0.1. + * + * @since 0.71 + * + * @param int $deprecated Not used (Was $timezone = 0). + */ +function trackback_rdf( $deprecated = '' ) { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '2.5' ); + + if ( false !== stripos($_SERVER['HTTP_USER_AGENT'], 'W3C_Validator') ) + return; + + echo ' + \n"; + echo ''; +} + +/** + * Whether the current post is open for comments. + * + * @since 1.5.0 + * + * @param int|WP_Post $post_id Optional. Post ID or WP_Post object. Default current post. + * @return bool True if the comments are open. + */ +function comments_open( $post_id = null ) { + + $_post = get_post($post_id); + + $open = ( 'open' == $_post->comment_status ); + + /** + * Filter whether the current post is open for comments. + * + * @since + * + * @param bool $open Whether the current post is open for comments. + * @param int|WP_Post $post_id The post ID or WP_Post object. + */ + return apply_filters( 'comments_open', $open, $post_id ); +} + +/** + * Whether the current post is open for pings. + * + * @since 1.5.0 + * + * @param int|WP_Post $post_id Optional. Post ID or WP_Post object. Default current post. + * @return bool True if pings are accepted + */ +function pings_open( $post_id = null ) { + + $_post = get_post($post_id); + + $open = ( 'open' == $_post->ping_status ); + return apply_filters( 'pings_open', $open, $post_id ); +} + +/** + * Display form token for unfiltered comments. + * + * Will only display nonce token if the current user has permissions for + * unfiltered html. Won't display the token for other users. + * + * The function was backported to 2.0.10 and was added to versions 2.1.3 and + * above. Does not exist in versions prior to 2.0.10 in the 2.0 branch and in + * the 2.1 branch, prior to 2.1.3. Technically added in 2.2.0. + * + * Backported to 2.0.10. + * + * @since 2.1.3 + */ +function wp_comment_form_unfiltered_html_nonce() { + $post = get_post(); + $post_id = $post ? $post->ID : 0; + + if ( current_user_can( 'unfiltered_html' ) ) { + wp_nonce_field( 'unfiltered-html-comment_' . $post_id, '_wp_unfiltered_html_comment_disabled', false ); + echo "\n"; + } +} + +/** + * Load the comment template specified in $file. + * + * Will not display the comments template if not on single post or page, or if + * the post does not have comments. + * + * Uses the WordPress database object to query for the comments. The comments + * are passed through the 'comments_array' filter hook with the list of comments + * and the post ID respectively. + * + * The $file path is passed through a filter hook called, 'comments_template' + * which includes the TEMPLATEPATH and $file combined. Tries the $filtered path + * first and if it fails it will require the default comment template from the + * default theme. If either does not exist, then the WordPress process will be + * halted. It is advised for that reason, that the default theme is not deleted. + * + * @todo Document globals + * @uses $withcomments Will not try to get the comments if the post has none. + * + * @since 1.5.0 + * + * @param string $file Optional. The file to load. Default '/comments.php'. + * @param bool $separate_comments Optional. Whether to separate the comments by comment type. Default false. + * @return null Returns null if no comments appear. + */ +function comments_template( $file = '/comments.php', $separate_comments = false ) { + global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $user_login, $user_ID, $user_identity, $overridden_cpage; + + if ( !(is_single() || is_page() || $withcomments) || empty($post) ) + return; + + if ( empty($file) ) + $file = '/comments.php'; + + $req = get_option('require_name_email'); + + /** + * Comment author information fetched from the comment cookies. + * + * @uses wp_get_current_commenter() + */ + $commenter = wp_get_current_commenter(); + + /** + * The name of the current comment author escaped for use in attributes. + */ + $comment_author = $commenter['comment_author']; // Escaped by sanitize_comment_cookies() + + /** + * The email address of the current comment author escaped for use in attributes. + */ + $comment_author_email = $commenter['comment_author_email']; // Escaped by sanitize_comment_cookies() + + /** + * The url of the current comment author escaped for use in attributes. + */ + $comment_author_url = esc_url($commenter['comment_author_url']); + + /** @todo Use API instead of SELECTs. */ + if ( $user_ID) { + $comments = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND (comment_approved = '1' OR ( user_id = %d AND comment_approved = '0' ) ) ORDER BY comment_date_gmt", $post->ID, $user_ID)); + } else if ( empty($comment_author) ) { + $comments = get_comments( array('post_id' => $post->ID, 'status' => 'approve', 'order' => 'ASC') ); + } else { + $comments = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND ( comment_approved = '1' OR ( comment_author = %s AND comment_author_email = %s AND comment_approved = '0' ) ) ORDER BY comment_date_gmt", $post->ID, wp_specialchars_decode($comment_author,ENT_QUOTES), $comment_author_email)); + } + + // keep $comments for legacy's sake + /** + * Filter the comments array. + * + * @since 2.1.0 + * + * @param array $comments The array of comments supplied to the comments template. + * @param int $post->ID The post ID. + */ + $wp_query->comments = apply_filters( 'comments_array', $comments, $post->ID ); + $comments = &$wp_query->comments; + $wp_query->comment_count = count($wp_query->comments); + update_comment_cache($wp_query->comments); + + if ( $separate_comments ) { + $wp_query->comments_by_type = separate_comments($comments); + $comments_by_type = &$wp_query->comments_by_type; + } + + $overridden_cpage = false; + if ( '' == get_query_var('cpage') && get_option('page_comments') ) { + set_query_var( 'cpage', 'newest' == get_option('default_comments_page') ? get_comment_pages_count() : 1 ); + $overridden_cpage = true; + } + + if ( !defined('COMMENTS_TEMPLATE') ) + define('COMMENTS_TEMPLATE', true); + + $theme_template = STYLESHEETPATH . $file; + /** + * Filter the path to the theme template file used for the comments template. + * + * @since 1.5.1 + * + * @param string $theme_template The path to the theme template file. + */ + $include = apply_filters( 'comments_template', $theme_template ); + if ( file_exists( $include ) ) + require( $include ); + elseif ( file_exists( TEMPLATEPATH . $file ) ) + require( TEMPLATEPATH . $file ); + else // Backward compat code will be removed in a future release + require( ABSPATH . WPINC . '/theme-compat/comments.php'); +} + +/** + * Display the JS popup script to show a comment. + * + * If the $file parameter is empty, then the home page is assumed. The defaults + * for the window are 400px by 400px. + * + * For the comment link popup to work, this function has to be called or the + * normal comment link will be assumed. + * + * @global string $wpcommentspopupfile The URL to use for the popup window. + * @global int $wpcommentsjavascript Whether to use JavaScript. Set when function is called. + * + * @since 0.71 + * + * @param int $width Optional. The width of the popup window. Default 400. + * @param int $height Optional. The height of the popup window. Default 400. + * @param string $file Optional. Sets the location of the popup window. + */ +function comments_popup_script( $width = 400, $height = 400, $file = '' ) { + global $wpcommentspopupfile, $wpcommentsjavascript; + + if (empty ($file)) { + $wpcommentspopupfile = ''; // Use the index. + } else { + $wpcommentspopupfile = $file; + } + + $wpcommentsjavascript = 1; + $javascript = "\n"; + echo $javascript; +} + +/** + * Displays the link to the comments popup window for the current post ID. + * + * Is not meant to be displayed on single posts and pages. Should be used on the + * lists of posts + * + * @global string $wpcommentspopupfile The URL to use for the popup window. + * @global int $wpcommentsjavascript Whether to use JavaScript. Set when function is called. + * + * @since 0.71 + * + * @param string $zero Optional. The string to display when no comments. Default false. + * @param string $one Optional. The string to display when only one comment is available. Default false. + * @param string $more Optional. The string to display when there are more than one comment. Default false. + * @param string $css_class Optional. The CSS class to use for comments. Default empty. + * @param string $none Optional. The string to display when comments have been turned off. Default false. + * @return null Returns null on single posts and pages. + */ +function comments_popup_link( $zero = false, $one = false, $more = false, $css_class = '', $none = false ) { + global $wpcommentspopupfile, $wpcommentsjavascript; + + $id = get_the_ID(); + + if ( false === $zero ) $zero = __( 'No Comments' ); + if ( false === $one ) $one = __( '1 Comment' ); + if ( false === $more ) $more = __( '% Comments' ); + if ( false === $none ) $none = __( 'Comments Off' ); + + $number = get_comments_number( $id ); + + if ( 0 == $number && !comments_open() && !pings_open() ) { + echo '' . $none . ''; + return; + } + + if ( post_password_required() ) { + echo __('Enter your password to view comments.'); + return; + } + + echo ' 0 ) ); + + $attributes = ''; + /** + * Filter the comments popup link attributes for display. + * + * @since 2.5.0 + * + * @param string $attributes The comments popup link attributes. Default empty. + */ + echo apply_filters( 'comments_popup_link_attributes', $attributes ); + + echo ' title="' . esc_attr( sprintf( __('Comment on %s'), $title ) ) . '">'; + comments_number( $zero, $one, $more ); + echo ''; +} + +/** + * Retrieve HTML content for reply to comment link. + * + * @since 2.7.0 + * + * @param array $args { + * Optional. Override default arguments. + * + * @type string 'add_below' The first part of the selector used to identify the comment to respond below. The resulting + * value is passed as the first parameter to addComment.moveForm(), concatenated + * as $add_below-$comment->comment_ID. Default 'comment'. + * @type string 'respond_id' The selector identifying the responding comment. Passed as the third parameter to addComment.moveForm(), + * and appended to the link URL as a hash value. Default 'respond'. + * @type string 'reply_text' The text of the Reply link. Default 'Reply'. + * @type string 'login_text' The text of the link to reply if logged out. Default 'Log in to Reply'. + * @type int 'depth' The depth of the new comment. Must be greater than 0 and less than the value of the 'thread_comments_depth' + * option set in Settings > Discussion. + * Default 0. + * @type string 'before' The text or HTML to add before the reply link. Default empty. + * @type string 'after' The text or HTML to add after the reply link. Default empty. + * } + * @param int $comment Optional. Comment being replied to. Default current comment. + * @param int|WP_Post $post Optional. Post ID or WP_Post object the comment is going to be displayed on. Default current post. + * @return mixed Link to show comment form, if successful. False, if comments are closed. + */ +function get_comment_reply_link($args = array(), $comment = null, $post = null) { + + $defaults = array( + 'add_below' => 'comment', + 'respond_id' => 'respond', + 'reply_text' => __('Reply'), + 'login_text' => __('Log in to Reply'), + 'depth' => 0, + 'before' => '', + 'after' => '' + ); + + $args = wp_parse_args($args, $defaults); + + if ( 0 == $args['depth'] || $args['max_depth'] <= $args['depth'] ) + return; + + extract($args, EXTR_SKIP); + + $comment = get_comment($comment); + if ( empty($post) ) + $post = $comment->comment_post_ID; + $post = get_post($post); + + if ( !comments_open($post->ID) ) + return false; + + $link = ''; + + if ( get_option('comment_registration') && ! is_user_logged_in() ) + $link = ''; + else + $link = "comment_ID ) ) . "#" . $respond_id . "' onclick='return addComment.moveForm(\"$add_below-$comment->comment_ID\", \"$comment->comment_ID\", \"$respond_id\", \"$post->ID\")'>$reply_text"; + + /** + * Filter the comment reply link. + * + * @since 2.7.0 + * + * @param string $before Text or HTML displayed before the reply link. + * @param string $link The HTML markup for the comment reply link. + * @param string $after Text or HTML displayed after the reply link. + * @param array $args An array of arguments overriding the defaults. + * @param object $comment The object of the comment being replied. + * @param WP_Post $post The WP_Post object. + */ + return apply_filters( 'comment_reply_link', $before . $link . $after, $args, $comment, $post ); +} + +/** + * Displays the HTML content for reply to comment link. + * + * @since 2.7.0 + * + * @param array $args Optional. Override default options, @see get_comment_reply_link() + * @param int $comment Optional. Comment being replied to. Default current comment. + * @param int|WP_Post $post Optional. Post ID or WP_Post object the comment is going to be displayed on. Default current post. + * @return mixed Link to show comment form, if successful. False, if comments are closed. + */ +function comment_reply_link($args = array(), $comment = null, $post = null) { + echo get_comment_reply_link($args, $comment, $post); +} + +/** + * Retrieve HTML content for reply to post link. + * + * @since 2.7.0 + * + * @param array $args { + * Optional. Override default arguments. + * + * @type string 'add_below' The first part of the selector used to identify the comment to respond below. + * The resulting value is passed as the first parameter to addComment.moveForm(), + * concatenated as $add_below-$comment->comment_ID. Default is 'post'. + * @type string 'respond_id' The selector identifying the responding comment. Passed as the third parameter + * to addComment.moveForm(), and appended to the link URL as a hash value. Default is 'respond'. + * @type string 'reply_text' The text of the Reply link. Default is 'Leave a Comment'. + * @type string 'login_text' The text of the link to reply if logged out. Default is 'Log in to leave a Comment'. + * @type string 'before' The text or HTML to add before the reply link. Default empty. + * @type string 'after' The text or HTML to add after the reply link. Default empty. + * } + * @param int|WP_Post $post Optional. Post ID or WP_Post object the comment is going to be displayed on. Default current post. + * @return string|bool|null Link to show comment form, if successful. False, if comments are closed. + */ +function get_post_reply_link($args = array(), $post = null) { + $defaults = array( + 'add_below' => 'post', + 'respond_id' => 'respond', + 'reply_text' => __('Leave a Comment'), + 'login_text' => __('Log in to leave a Comment'), + 'before' => '', + 'after' => '', + ); + + $args = wp_parse_args($args, $defaults); + extract($args, EXTR_SKIP); + $post = get_post($post); + + if ( !comments_open($post->ID) ) + return false; + + if ( get_option('comment_registration') && ! is_user_logged_in() ) + $link = '' . $login_text . ''; + else + $link = "$reply_text"; + + $formatted_link = $before . $link . $after; + /** + * Filter the formatted post comments link HTML. + * + * @since 2.7.0 + * + * @param string $formatted The HTML-formatted post comments link. + * @param int|WP_Post $post The post ID or WP_Post object. + */ + return apply_filters( 'post_comments_link', $formatted_link, $post ); +} + +/** + * Displays the HTML content for reply to post link. + * + * @since 2.7.0 + * + * @param array $args Optional. Override default options, @see get_post_reply_link() + * @param int|WP_Post $post Optional. Post ID or WP_Post object the comment is going to be displayed on. Default current post. + * @return string|bool|null Link to show comment form, if successful. False, if comments are closed. + */ +function post_reply_link($args = array(), $post = null) { + echo get_post_reply_link($args, $post); +} + +/** + * Retrieve HTML content for cancel comment reply link. + * + * @since 2.7.0 + * + * @param string $text Optional. Text to display for cancel reply link. Default empty. + */ +function get_cancel_comment_reply_link( $text = '' ) { + if ( empty($text) ) + $text = __('Click here to cancel reply.'); + + $style = isset($_GET['replytocom']) ? '' : ' style="display:none;"'; + $link = esc_html( remove_query_arg('replytocom') ) . '#respond'; + + $formatted_link = '' . $text . ''; + /** + * Filter the cancel comment reply link HTML. + * + * @since 2.7.0 + * + * @param string $formatted_link The HTML-formatted cancel comment reply link. + * @param string $link The cancel comment reply link URL. + * @param string $text The cancel comment reply link text. + */ + return apply_filters( 'cancel_comment_reply_link', $formatted_link, $link, $text ); +} + +/** + * Display HTML content for cancel comment reply link. + * + * @since 2.7.0 + * + * @param string $text Optional. Text to display for cancel reply link. Default empty. + */ +function cancel_comment_reply_link( $text = '' ) { + echo get_cancel_comment_reply_link($text); +} + +/** + * Retrieve hidden input HTML for replying to comments. + * + * @since 3.0.0 + * + * @param int $id Optional. Post ID. Default current post ID. + * @return string Hidden input HTML for replying to comments + */ +function get_comment_id_fields( $id = 0 ) { + if ( empty( $id ) ) + $id = get_the_ID(); + + $replytoid = isset($_GET['replytocom']) ? (int) $_GET['replytocom'] : 0; + $result = "\n"; + $result .= "\n"; + + /** + * Filter the returned comment id fields. + * + * @since 3.0.0 + * + * @param string $result The HTML-formatted hidden id field comment elements. + * @param int $id The post ID. + * @param int $replytoid The id of the comment being replied to. + */ + return apply_filters( 'comment_id_fields', $result, $id, $replytoid ); +} + +/** + * Output hidden input HTML for replying to comments. + * + * @since 2.7.0 + * + * @param int $id Optional. Post ID. Default current post ID. + */ +function comment_id_fields( $id = 0 ) { + echo get_comment_id_fields( $id ); +} + +/** + * Display text based on comment reply status. + * + * Only affects users with Javascript disabled. + * + * @since 2.7.0 + * + * @param string $noreplytext Optional. Text to display when not replying to a comment. Default false. + * @param string $replytext Optional. Text to display when replying to a comment. + * Default false. Accepts "%s" for the author of the comment being replied to. + * @param string $linktoparent Optional. Boolean to control making the author's name a link to their comment. Default true. + */ +function comment_form_title( $noreplytext = false, $replytext = false, $linktoparent = true ) { + global $comment; + + if ( false === $noreplytext ) $noreplytext = __( 'Leave a Reply' ); + if ( false === $replytext ) $replytext = __( 'Leave a Reply to %s' ); + + $replytoid = isset($_GET['replytocom']) ? (int) $_GET['replytocom'] : 0; + + if ( 0 == $replytoid ) + echo $noreplytext; + else { + $comment = get_comment($replytoid); + $author = ( $linktoparent ) ? '' . get_comment_author() . '' : get_comment_author(); + printf( $replytext, $author ); + } +} + +/** + * HTML comment list class. + * + * @package WordPress + * @uses Walker + * @since 2.7.0 + */ +class Walker_Comment extends Walker { + /** + * What the class handles. + * + * @see Walker::$tree_type + * + * @since 2.7.0 + * @var string + */ + var $tree_type = 'comment'; + + /** + * DB fields to use. + * + * @see Walker::$db_fields + * + * @since 2.7.0 + * @var array + */ + var $db_fields = array ('parent' => 'comment_parent', 'id' => 'comment_ID'); + + /** + * Start the list before the elements are added. + * + * @see Walker::start_lvl() + * + * @since 2.7.0 + * + * @param string $output Passed by reference. Used to append additional content. + * @param int $depth Depth of comment. + * @param array $args Uses 'style' argument for type of HTML list. + */ + function start_lvl( &$output, $depth = 0, $args = array() ) { + $GLOBALS['comment_depth'] = $depth + 1; + + switch ( $args['style'] ) { + case 'div': + break; + case 'ol': + $output .= '
                    ' . "\n"; + break; + default: + case 'ul': + $output .= '
                      ' . "\n"; + break; + } + } + + /** + * End the list of items after the elements are added. + * + * @see Walker::end_lvl() + * + * @since 2.7.0 + * + * @param string $output Passed by reference. Used to append additional content. + * @param int $depth Depth of comment. + * @param array $args Will only append content if style argument value is 'ol' or 'ul'. + */ + function end_lvl( &$output, $depth = 0, $args = array() ) { + $GLOBALS['comment_depth'] = $depth + 1; + + switch ( $args['style'] ) { + case 'div': + break; + case 'ol': + $output .= "
                  \n"; + break; + default: + case 'ul': + $output .= "\n"; + break; + } + } + + /** + * Traverse elements to create list from elements. + * + * This function is designed to enhance Walker::display_element() to + * display children of higher nesting levels than selected inline on + * the highest depth level displayed. This prevents them being orphaned + * at the end of the comment list. + * + * Example: max_depth = 2, with 5 levels of nested content. + * 1 + * 1.1 + * 1.1.1 + * 1.1.1.1 + * 1.1.1.1.1 + * 1.1.2 + * 1.1.2.1 + * 2 + * 2.2 + * + * @see Walker::display_element() + * + * @since 2.7.0 + * + * @param object $element Data object. + * @param array $children_elements List of elements to continue traversing. + * @param int $max_depth Max depth to traverse. + * @param int $depth Depth of current element. + * @param array $args An array of arguments. @see wp_list_comments() + * @param string $output Passed by reference. Used to append additional content. + * @return null Null on failure with no changes to parameters. + */ + function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) { + + if ( !$element ) + return; + + $id_field = $this->db_fields['id']; + $id = $element->$id_field; + + parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output ); + + // If we're at the max depth, and the current element still has children, loop over those and display them at this level + // This is to prevent them being orphaned to the end of the list. + if ( $max_depth <= $depth + 1 && isset( $children_elements[$id]) ) { + foreach ( $children_elements[ $id ] as $child ) + $this->display_element( $child, $children_elements, $max_depth, $depth, $args, $output ); + + unset( $children_elements[ $id ] ); + } + + } + + /** + * Start the element output. + * + * @see Walker::start_el() + * + * @since 2.7.0 + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $comment Comment data object. + * @param int $depth Depth of comment in reference to parents. + * @param array $args An array of arguments. @see wp_list_comments() + */ + function start_el( &$output, $comment, $depth = 0, $args = array(), $id = 0 ) { + $depth++; + $GLOBALS['comment_depth'] = $depth; + $GLOBALS['comment'] = $comment; + + if ( !empty( $args['callback'] ) ) { + ob_start(); + call_user_func( $args['callback'], $comment, $args, $depth ); + $output .= ob_get_clean(); + return; + } + + if ( ( 'pingback' == $comment->comment_type || 'trackback' == $comment->comment_type ) && $args['short_ping'] ) { + ob_start(); + $this->ping( $comment, $depth, $args ); + $output .= ob_get_clean(); + } elseif ( 'html5' === $args['format'] ) { + ob_start(); + $this->html5_comment( $comment, $depth, $args ); + $output .= ob_get_clean(); + } else { + ob_start(); + $this->comment( $comment, $depth, $args ); + $output .= ob_get_clean(); + } + } + + /** + * Ends the element output, if needed. + * + * @see Walker::end_el() + * + * @since 2.7.0 + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $comment The comment object. Default current comment. + * @param int $depth Depth of comment. + * @param array $args An array of arguments. @see wp_list_comments() + */ + function end_el( &$output, $comment, $depth = 0, $args = array() ) { + if ( !empty( $args['end-callback'] ) ) { + ob_start(); + call_user_func( $args['end-callback'], $comment, $args, $depth ); + $output .= ob_get_clean(); + return; + } + if ( 'div' == $args['style'] ) + $output .= "
                  \n"; + else + $output .= "\n"; + } + + /** + * Output a pingback comment. + * + * @access protected + * @since 3.6.0 + * + * @param object $comment The comment object. + * @param int $depth Depth of comment. + * @param array $args An array of arguments. @see wp_list_comments() + */ + protected function ping( $comment, $depth, $args ) { + $tag = ( 'div' == $args['style'] ) ? 'div' : 'li'; +?> + < id="comment-" > +
                  + ', '' ); ?> +
                  + + < id="comment-"> + +
                  + +
                  + + %s says:' ), get_comment_author_link() ); ?> +
                  + comment_approved ) : ?> + +
                  + + + + + $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?> + +
                  + $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?> +
                  + +
                  + + + < id="comment-" > +
                  +
                  +
                  + + says:' ), sprintf( '%s', get_comment_author_link() ) ); ?> +
                  + + + + comment_approved ) : ?> +

                  + +
                  + +
                  + +
                  + +
                  + 'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?> +
                  +
                  +comments + */ +function wp_list_comments( $args = array(), $comments = null ) { + global $wp_query, $comment_alt, $comment_depth, $comment_thread_alt, $overridden_cpage, $in_comment_loop; + + $in_comment_loop = true; + + $comment_alt = $comment_thread_alt = 0; + $comment_depth = 1; + + $defaults = array( + 'walker' => null, + 'max_depth' => '', + 'style' => 'ul', + 'callback' => null, + 'end-callback' => null, + 'type' => 'all', + 'page' => '', + 'per_page' => '', + 'avatar_size' => 32, + 'reverse_top_level' => null, + 'reverse_children' => '', + 'format' => current_theme_supports( 'html5', 'comment-list' ) ? 'html5' : 'xhtml', + 'short_ping' => false, + 'echo' => true, + ); + + $r = wp_parse_args( $args, $defaults ); + + // Figure out what comments we'll be looping through ($_comments) + if ( null !== $comments ) { + $comments = (array) $comments; + if ( empty($comments) ) + return; + if ( 'all' != $r['type'] ) { + $comments_by_type = separate_comments($comments); + if ( empty($comments_by_type[$r['type']]) ) + return; + $_comments = $comments_by_type[$r['type']]; + } else { + $_comments = $comments; + } + } else { + if ( empty($wp_query->comments) ) + return; + if ( 'all' != $r['type'] ) { + if ( empty($wp_query->comments_by_type) ) + $wp_query->comments_by_type = separate_comments($wp_query->comments); + if ( empty($wp_query->comments_by_type[$r['type']]) ) + return; + $_comments = $wp_query->comments_by_type[$r['type']]; + } else { + $_comments = $wp_query->comments; + } + } + + if ( '' === $r['per_page'] && get_option('page_comments') ) + $r['per_page'] = get_query_var('comments_per_page'); + + if ( empty($r['per_page']) ) { + $r['per_page'] = 0; + $r['page'] = 0; + } + + if ( '' === $r['max_depth'] ) { + if ( get_option('thread_comments') ) + $r['max_depth'] = get_option('thread_comments_depth'); + else + $r['max_depth'] = -1; + } + + if ( '' === $r['page'] ) { + if ( empty($overridden_cpage) ) { + $r['page'] = get_query_var('cpage'); + } else { + $threaded = ( -1 != $r['max_depth'] ); + $r['page'] = ( 'newest' == get_option('default_comments_page') ) ? get_comment_pages_count($_comments, $r['per_page'], $threaded) : 1; + set_query_var( 'cpage', $r['page'] ); + } + } + // Validation check + $r['page'] = intval($r['page']); + if ( 0 == $r['page'] && 0 != $r['per_page'] ) + $r['page'] = 1; + + if ( null === $r['reverse_top_level'] ) + $r['reverse_top_level'] = ( 'desc' == get_option('comment_order') ); + + extract( $r, EXTR_SKIP ); + + if ( empty($walker) ) + $walker = new Walker_Comment; + + $output = $walker->paged_walk($_comments, $max_depth, $page, $per_page, $r); + $wp_query->max_num_comment_pages = $walker->max_pages; + + $in_comment_loop = false; + + if ( $r['echo'] ) + echo $output; + else + return $output; +} + +/** + * Output a complete commenting form for use within a template. + * + * Most strings and form fields may be controlled through the $args array passed + * into the function, while you may also choose to use the comment_form_default_fields + * filter to modify the array of default fields if you'd just like to add a new + * one or remove a single field. All fields are also individually passed through + * a filter of the form comment_form_field_$name where $name is the key used + * in the array of fields. + * + * @since 3.0.0 + * + * @param array $args { + * Optional. Default arguments and form fields to override. + * + * @type array 'fields' { + * Default comment fields, filterable by default via the 'comment_form_default_fields' hook. + * + * @type string 'author' The comment author field HTML. + * @type string 'email' The comment author email field HTML. + * @type string 'url' The comment author URL field HTML. + * } + * @type string 'comment_field' The comment textarea field HTML. + * @type string 'must_log_in' HTML element for a 'must be logged in to comment' message. + * @type string 'logged_in_as' HTML element for a 'logged in as ' message. + * @type string 'comment_notes_before' HTML element for a message displayed before the comment form. + * Default 'Your email address will not be published.'. + * @type string 'comment_notes_after' HTML element for a message displayed after the comment form. + * Default 'You may use these HTML tags and attributes ...'. + * @type string 'id_form' The comment form element id attribute. Default 'commentform'. + * @type string 'id_submit' The comment submit element id attribute. Default 'submit'. + * @type string 'title_reply' The translatable 'reply' button label. Default 'Leave a Reply'. + * @type string 'title_reply_to' The translatable 'reply-to' button label. Default 'Leave a Reply to %s', + * where %s is the author of the comment being replied to. + * @type string 'cancel_reply_link' The translatable 'cancel reply' button label. Default 'Cancel reply'. + * @type string 'label_submit' The translatable 'submit' button label. Default 'Post a comment'. + * @type string 'format' The comment form format. Default 'xhtml'. Accepts 'xhtml', 'html5'. + * } + * @param int|WP_Post $post_id Optional. Post ID or WP_Post object to generate the form for. Default current post. + */ +function comment_form( $args = array(), $post_id = null ) { + if ( null === $post_id ) + $post_id = get_the_ID(); + else + $id = $post_id; + + $commenter = wp_get_current_commenter(); + $user = wp_get_current_user(); + $user_identity = $user->exists() ? $user->display_name : ''; + + $args = wp_parse_args( $args ); + if ( ! isset( $args['format'] ) ) + $args['format'] = current_theme_supports( 'html5', 'comment-form' ) ? 'html5' : 'xhtml'; + + $req = get_option( 'require_name_email' ); + $aria_req = ( $req ? " aria-required='true'" : '' ); + $html5 = 'html5' === $args['format']; + $fields = array( + 'author' => '

                  ' . ' ' . + '

                  ', + 'email' => '', + 'url' => '

                  ' . + '

                  ', + ); + + $required_text = sprintf( ' ' . __('Required fields are marked %s'), '*' ); + + /** + * Filter the default comment form fields. + * + * @since 3.0.0 + * + * @param array $fields The default comment fields. + */ + $fields = apply_filters( 'comment_form_default_fields', $fields ); + $defaults = array( + 'fields' => $fields, + 'comment_field' => '

                  ', + 'must_log_in' => '', + 'logged_in_as' => '

                  ' . sprintf( __( 'Logged in as %2$s. Log out?' ), get_edit_user_link(), $user_identity, wp_logout_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '

                  ', + 'comment_notes_before' => '

                  ' . __( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) . '

                  ', + 'comment_notes_after' => '

                  ' . sprintf( __( 'You may use these HTML tags and attributes: %s' ), ' ' . allowed_tags() . '' ) . '

                  ', + 'id_form' => 'commentform', + 'id_submit' => 'submit', + 'title_reply' => __( 'Leave a Reply' ), + 'title_reply_to' => __( 'Leave a Reply to %s' ), + 'cancel_reply_link' => __( 'Cancel reply' ), + 'label_submit' => __( 'Post Comment' ), + 'format' => 'xhtml', + ); + + /** + * Filter the comment form default arguments. + * + * Use 'comment_form_default_fields' to filter the comment fields. + * + * @since 3.0.0 + * + * @param array $defaults The default comment form arguments. + */ + $args = wp_parse_args( $args, apply_filters( 'comment_form_defaults', $defaults ) ); + + ?> + + +
                  +

                  + + + + +
                  > + tag. + * + * @since 3.0.0 + */ + do_action( 'comment_form_top' ); + ?> + + + + + + $field ) { + /** + * Filter a comment form field for display. + * + * The dynamic portion of the filter hook, $name, refers to the name + * of the comment form field. Such as 'author', 'email', or 'url'. + * + * @since 3.0.0 + * + * @param string $field The HTML-formatted output of the comment form field. + */ + echo apply_filters( "comment_form_field_{$name}", $field ) . "\n"; + } + /** + * Fires after the comment fields in the comment form. + * + * @since 3.0.0 + */ + do_action( 'comment_form_after_fields' ); + ?> + + + +

                  + + +

                  + tag. + * + * @since 1.5.0 + * + * @param int $post_id The post ID. + */ + do_action( 'comment_form', $post_id ); + ?> +
                  + +
                  + ]*href/i', $comment, $out ); + /** + * Filter the maximum number of links allowed in a comment. + * + * @since 3.0.0 + * + * @param int $num_links The number of links allowed. + * @param string $url Comment author's URL. Included in allowed links total. + */ + $num_links = apply_filters( 'comment_max_links_url', $num_links, $url ); + if ( $num_links >= $max_links ) + return false; + } + + $mod_keys = trim(get_option('moderation_keys')); + if ( !empty($mod_keys) ) { + $words = explode("\n", $mod_keys ); + + foreach ( (array) $words as $word) { + $word = trim($word); + + // Skip empty lines + if ( empty($word) ) + continue; + + // Do some escaping magic so that '#' chars in the + // spam words don't break things: + $word = preg_quote($word, '#'); + + $pattern = "#$word#i"; + if ( preg_match($pattern, $author) ) return false; + if ( preg_match($pattern, $email) ) return false; + if ( preg_match($pattern, $url) ) return false; + if ( preg_match($pattern, $comment) ) return false; + if ( preg_match($pattern, $user_ip) ) return false; + if ( preg_match($pattern, $user_agent) ) return false; + } + } + + // Comment whitelisting: + if ( 1 == get_option('comment_whitelist')) { + if ( 'trackback' != $comment_type && 'pingback' != $comment_type && $author != '' && $email != '' ) { + // expected_slashed ($author, $email) + $ok_to_comment = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_author = '$author' AND comment_author_email = '$email' and comment_approved = '1' LIMIT 1"); + if ( ( 1 == $ok_to_comment ) && + ( empty($mod_keys) || false === strpos( $email, $mod_keys) ) ) + return true; + else + return false; + } else { + return false; + } + } + return true; +} + +/** + * Retrieve the approved comments for post $post_id. + * + * @since 2.0.0 + * @uses $wpdb + * + * @param int $post_id The ID of the post + * @return array $comments The approved comments + */ +function get_approved_comments($post_id) { + global $wpdb; + return $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved = '1' ORDER BY comment_date", $post_id)); +} + +/** + * Retrieves comment data given a comment ID or comment object. + * + * If an object is passed then the comment data will be cached and then returned + * after being passed through a filter. If the comment is empty, then the global + * comment variable will be used, if it is set. + * + * @since 2.0.0 + * @uses $wpdb + * + * @param object|string|int $comment Comment to retrieve. + * @param string $output Optional. OBJECT or ARRAY_A or ARRAY_N constants. + * @return object|array|null Depends on $output value. + */ +function get_comment(&$comment, $output = OBJECT) { + global $wpdb; + $null = null; + + if ( empty($comment) ) { + if ( isset($GLOBALS['comment']) ) + $_comment = & $GLOBALS['comment']; + else + $_comment = null; + } elseif ( is_object($comment) ) { + wp_cache_add($comment->comment_ID, $comment, 'comment'); + $_comment = $comment; + } else { + if ( isset($GLOBALS['comment']) && ($GLOBALS['comment']->comment_ID == $comment) ) { + $_comment = & $GLOBALS['comment']; + } elseif ( ! $_comment = wp_cache_get($comment, 'comment') ) { + $_comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_ID = %d LIMIT 1", $comment)); + if ( ! $_comment ) + return $null; + wp_cache_add($_comment->comment_ID, $_comment, 'comment'); + } + } + + /** + * Fires after a comment is retrieved. + * + * @since 2.3.0 + * + * @param mixed $_comment Comment data. + */ + $_comment = apply_filters( 'get_comment', $_comment ); + + if ( $output == OBJECT ) { + return $_comment; + } elseif ( $output == ARRAY_A ) { + $__comment = get_object_vars($_comment); + return $__comment; + } elseif ( $output == ARRAY_N ) { + $__comment = array_values(get_object_vars($_comment)); + return $__comment; + } else { + return $_comment; + } +} + +/** + * Retrieve a list of comments. + * + * The comment list can be for the blog as a whole or for an individual post. + * + * The list of comment arguments are 'status', 'orderby', 'comment_date_gmt', + * 'order', 'number', 'offset', and 'post_id'. + * + * @since 2.7.0 + * @uses $wpdb + * + * @param mixed $args Optional. Array or string of options to override defaults. + * @return array List of comments. + */ +function get_comments( $args = '' ) { + $query = new WP_Comment_Query; + return $query->query( $args ); +} + +/** + * WordPress Comment Query class. + * + * @since 3.1.0 + */ +class WP_Comment_Query { + /** + * Metadata query container + * + * @since 3.5.0 + * @access public + * @var object WP_Meta_Query + */ + var $meta_query = false; + + /** + * Date query container + * + * @since 3.7.0 + * @access public + * @var object WP_Date_Query + */ + var $date_query = false; + + /** + * Execute the query + * + * @since 3.1.0 + * + * @param string|array $query_vars + * @return int|array + */ + function query( $query_vars ) { + global $wpdb; + + $defaults = array( + 'author_email' => '', + 'ID' => '', + 'karma' => '', + 'number' => '', + 'offset' => '', + 'orderby' => '', + 'order' => 'DESC', + 'parent' => '', + 'post_ID' => '', + 'post_id' => 0, + 'post_author' => '', + 'post_name' => '', + 'post_parent' => '', + 'post_status' => '', + 'post_type' => '', + 'status' => '', + 'type' => '', + 'user_id' => '', + 'search' => '', + 'count' => false, + 'meta_key' => '', + 'meta_value' => '', + 'meta_query' => '', + 'date_query' => null, // See WP_Date_Query + ); + + $groupby = ''; + + $this->query_vars = wp_parse_args( $query_vars, $defaults ); + + // Parse meta query + $this->meta_query = new WP_Meta_Query(); + $this->meta_query->parse_query_vars( $this->query_vars ); + + /** + * Fires before comments are retrieved. + * + * @since 3.1.0 + * + * @param WP_Comment_Query &$this Current instance of WP_Comment_Query, passed by reference. + */ + do_action_ref_array( 'pre_get_comments', array( &$this ) ); + extract( $this->query_vars, EXTR_SKIP ); + + // $args can be whatever, only use the args defined in defaults to compute the key + $key = md5( serialize( compact(array_keys($defaults)) ) ); + $last_changed = wp_cache_get( 'last_changed', 'comment' ); + if ( ! $last_changed ) { + $last_changed = microtime(); + wp_cache_set( 'last_changed', $last_changed, 'comment' ); + } + $cache_key = "get_comments:$key:$last_changed"; + + if ( $cache = wp_cache_get( $cache_key, 'comment' ) ) + return $cache; + + $post_id = absint($post_id); + + if ( 'hold' == $status ) + $approved = "comment_approved = '0'"; + elseif ( 'approve' == $status ) + $approved = "comment_approved = '1'"; + elseif ( ! empty( $status ) && 'all' != $status ) + $approved = $wpdb->prepare( "comment_approved = %s", $status ); + else + $approved = "( comment_approved = '0' OR comment_approved = '1' )"; + + $order = ( 'ASC' == strtoupper($order) ) ? 'ASC' : 'DESC'; + + if ( ! empty( $orderby ) ) { + $ordersby = is_array($orderby) ? $orderby : preg_split('/[,\s]/', $orderby); + $allowed_keys = array( + 'comment_agent', + 'comment_approved', + 'comment_author', + 'comment_author_email', + 'comment_author_IP', + 'comment_author_url', + 'comment_content', + 'comment_date', + 'comment_date_gmt', + 'comment_ID', + 'comment_karma', + 'comment_parent', + 'comment_post_ID', + 'comment_type', + 'user_id', + ); + if ( ! empty( $this->query_vars['meta_key'] ) ) { + $allowed_keys[] = $this->query_vars['meta_key']; + $allowed_keys[] = 'meta_value'; + $allowed_keys[] = 'meta_value_num'; + } + $ordersby = array_intersect( $ordersby, $allowed_keys ); + foreach ( $ordersby as $key => $value ) { + if ( $value == $this->query_vars['meta_key'] || $value == 'meta_value' ) { + $ordersby[ $key ] = "$wpdb->commentmeta.meta_value"; + } elseif ( $value == 'meta_value_num' ) { + $ordersby[ $key ] = "$wpdb->commentmeta.meta_value+0"; + } + } + $orderby = empty( $ordersby ) ? 'comment_date_gmt' : implode(', ', $ordersby); + } else { + $orderby = 'comment_date_gmt'; + } + + $number = absint($number); + $offset = absint($offset); + + if ( !empty($number) ) { + if ( $offset ) + $limits = 'LIMIT ' . $offset . ',' . $number; + else + $limits = 'LIMIT ' . $number; + } else { + $limits = ''; + } + + if ( $count ) + $fields = 'COUNT(*)'; + else + $fields = '*'; + + $join = ''; + $where = $approved; + + if ( ! empty($post_id) ) + $where .= $wpdb->prepare( ' AND comment_post_ID = %d', $post_id ); + if ( '' !== $author_email ) + $where .= $wpdb->prepare( ' AND comment_author_email = %s', $author_email ); + if ( '' !== $karma ) + $where .= $wpdb->prepare( ' AND comment_karma = %d', $karma ); + if ( 'comment' == $type ) { + $where .= " AND comment_type = ''"; + } elseif( 'pings' == $type ) { + $where .= ' AND comment_type IN ("pingback", "trackback")'; + } elseif ( ! empty( $type ) ) { + $where .= $wpdb->prepare( ' AND comment_type = %s', $type ); + } + if ( '' !== $parent ) + $where .= $wpdb->prepare( ' AND comment_parent = %d', $parent ); + if ( '' !== $user_id ) + $where .= $wpdb->prepare( ' AND user_id = %d', $user_id ); + if ( '' !== $search ) + $where .= $this->get_search_sql( $search, array( 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_author_IP', 'comment_content' ) ); + + $post_fields = array_filter( compact( array( 'post_author', 'post_name', 'post_parent', 'post_status', 'post_type', ) ) ); + if ( ! empty( $post_fields ) ) { + $join = "JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->comments.comment_post_ID"; + foreach( $post_fields as $field_name => $field_value ) + $where .= $wpdb->prepare( " AND {$wpdb->posts}.{$field_name} = %s", $field_value ); + } + + if ( ! empty( $this->meta_query->queries ) ) { + $clauses = $this->meta_query->get_sql( 'comment', $wpdb->comments, 'comment_ID', $this ); + $join .= $clauses['join']; + $where .= $clauses['where']; + $groupby = "{$wpdb->comments}.comment_ID"; + } + + if ( ! empty( $date_query ) && is_array( $date_query ) ) { + $date_query_object = new WP_Date_Query( $date_query, 'comment_date' ); + $where .= $date_query_object->get_sql(); + } + + $pieces = array( 'fields', 'join', 'where', 'orderby', 'order', 'limits', 'groupby' ); + /** + * Filter the comment query clauses. + * + * @since 3.1.0 + * + * @param array $pieces A compacted array of comment query clauses. + * @param WP_Comment_Query &$this Current instance of WP_Comment_Query, passed by reference. + */ + $clauses = apply_filters_ref_array( 'comments_clauses', array( compact( $pieces ), &$this ) ); + foreach ( $pieces as $piece ) + $$piece = isset( $clauses[ $piece ] ) ? $clauses[ $piece ] : ''; + + if ( $groupby ) + $groupby = 'GROUP BY ' . $groupby; + + $query = "SELECT $fields FROM $wpdb->comments $join WHERE $where $groupby ORDER BY $orderby $order $limits"; + + if ( $count ) + return $wpdb->get_var( $query ); + + $comments = $wpdb->get_results( $query ); + /** + * Filter the comment query results. + * + * @since 3.1.0 + * + * @param array $comments An array of comments. + * @param WP_Comment_Query &$this Current instance of WP_Comment_Query, passed by reference. + */ + $comments = apply_filters_ref_array( 'the_comments', array( $comments, &$this ) ); + + wp_cache_add( $cache_key, $comments, 'comment' ); + + return $comments; + } + + /** + * Used internally to generate an SQL string for searching across multiple columns + * + * @access protected + * @since 3.1.0 + * + * @param string $string + * @param array $cols + * @return string + */ + function get_search_sql( $string, $cols ) { + $string = esc_sql( like_escape( $string ) ); + + $searches = array(); + foreach ( $cols as $col ) + $searches[] = "$col LIKE '%$string%'"; + + return ' AND (' . implode(' OR ', $searches) . ')'; + } +} + +/** + * Retrieve all of the WordPress supported comment statuses. + * + * Comments have a limited set of valid status values, this provides the comment + * status values and descriptions. + * + * @package WordPress + * @subpackage Post + * @since 2.7.0 + * + * @return array List of comment statuses. + */ +function get_comment_statuses() { + $status = array( + 'hold' => __('Unapproved'), + /* translators: comment status */ + 'approve' => _x('Approved', 'adjective'), + /* translators: comment status */ + 'spam' => _x('Spam', 'adjective'), + ); + + return $status; +} + +/** + * The date the last comment was modified. + * + * @since 1.5.0 + * @uses $wpdb + * + * @param string $timezone Which timezone to use in reference to 'gmt', 'blog', + * or 'server' locations. + * @return string Last comment modified date. + */ +function get_lastcommentmodified($timezone = 'server') { + global $wpdb; + static $cache_lastcommentmodified = array(); + + if ( isset($cache_lastcommentmodified[$timezone]) ) + return $cache_lastcommentmodified[$timezone]; + + $add_seconds_server = date('Z'); + + switch ( strtolower($timezone)) { + case 'gmt': + $lastcommentmodified = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 1"); + break; + case 'blog': + $lastcommentmodified = $wpdb->get_var("SELECT comment_date FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 1"); + break; + case 'server': + $lastcommentmodified = $wpdb->get_var($wpdb->prepare("SELECT DATE_ADD(comment_date_gmt, INTERVAL %s SECOND) FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 1", $add_seconds_server)); + break; + } + + $cache_lastcommentmodified[$timezone] = $lastcommentmodified; + + return $lastcommentmodified; +} + +/** + * The amount of comments in a post or total comments. + * + * A lot like {@link wp_count_comments()}, in that they both return comment + * stats (albeit with different types). The {@link wp_count_comments()} actual + * caches, but this function does not. + * + * @since 2.0.0 + * @uses $wpdb + * + * @param int $post_id Optional. Comment amount in post if > 0, else total comments blog wide. + * @return array The amount of spam, approved, awaiting moderation, and total comments. + */ +function get_comment_count( $post_id = 0 ) { + global $wpdb; + + $post_id = (int) $post_id; + + $where = ''; + if ( $post_id > 0 ) { + $where = $wpdb->prepare("WHERE comment_post_ID = %d", $post_id); + } + + $totals = (array) $wpdb->get_results(" + SELECT comment_approved, COUNT( * ) AS total + FROM {$wpdb->comments} + {$where} + GROUP BY comment_approved + ", ARRAY_A); + + $comment_count = array( + "approved" => 0, + "awaiting_moderation" => 0, + "spam" => 0, + "total_comments" => 0 + ); + + foreach ( $totals as $row ) { + switch ( $row['comment_approved'] ) { + case 'spam': + $comment_count['spam'] = $row['total']; + $comment_count["total_comments"] += $row['total']; + break; + case 1: + $comment_count['approved'] = $row['total']; + $comment_count['total_comments'] += $row['total']; + break; + case 0: + $comment_count['awaiting_moderation'] = $row['total']; + $comment_count['total_comments'] += $row['total']; + break; + default: + break; + } + } + + return $comment_count; +} + +// +// Comment meta functions +// + +/** + * Add meta data field to a comment. + * + * @since 2.9.0 + * @uses add_metadata + * @link http://codex.wordpress.org/Function_Reference/add_comment_meta + * + * @param int $comment_id Comment ID. + * @param string $meta_key Metadata name. + * @param mixed $meta_value Metadata value. + * @param bool $unique Optional, default is false. Whether the same key should not be added. + * @return int|bool Meta ID on success, false on failure. + */ +function add_comment_meta($comment_id, $meta_key, $meta_value, $unique = false) { + return add_metadata('comment', $comment_id, $meta_key, $meta_value, $unique); +} + +/** + * Remove metadata matching criteria from a comment. + * + * You can match based on the key, or key and value. Removing based on key and + * value, will keep from removing duplicate metadata with the same key. It also + * allows removing all metadata matching key, if needed. + * + * @since 2.9.0 + * @uses delete_metadata + * @link http://codex.wordpress.org/Function_Reference/delete_comment_meta + * + * @param int $comment_id comment ID + * @param string $meta_key Metadata name. + * @param mixed $meta_value Optional. Metadata value. + * @return bool True on success, false on failure. + */ +function delete_comment_meta($comment_id, $meta_key, $meta_value = '') { + return delete_metadata('comment', $comment_id, $meta_key, $meta_value); +} + +/** + * Retrieve comment meta field for a comment. + * + * @since 2.9.0 + * @uses get_metadata + * @link http://codex.wordpress.org/Function_Reference/get_comment_meta + * + * @param int $comment_id Comment ID. + * @param string $key Optional. The meta key to retrieve. By default, returns data for all keys. + * @param bool $single Whether to return a single value. + * @return mixed Will be an array if $single is false. Will be value of meta data field if $single + * is true. + */ +function get_comment_meta($comment_id, $key = '', $single = false) { + return get_metadata('comment', $comment_id, $key, $single); +} + +/** + * Update comment meta field based on comment ID. + * + * Use the $prev_value parameter to differentiate between meta fields with the + * same key and comment ID. + * + * If the meta field for the comment does not exist, it will be added. + * + * @since 2.9.0 + * @uses update_metadata + * @link http://codex.wordpress.org/Function_Reference/update_comment_meta + * + * @param int $comment_id Comment ID. + * @param string $meta_key Metadata key. + * @param mixed $meta_value Metadata value. + * @param mixed $prev_value Optional. Previous value to check before removing. + * @return bool True on success, false on failure. + */ +function update_comment_meta($comment_id, $meta_key, $meta_value, $prev_value = '') { + return update_metadata('comment', $comment_id, $meta_key, $meta_value, $prev_value); +} + +/** + * Sets the cookies used to store an unauthenticated commentator's identity. Typically used + * to recall previous comments by this commentator that are still held in moderation. + * + * @param object $comment Comment object. + * @param object $user Comment author's object. + * + * @since 3.4.0 + */ +function wp_set_comment_cookies($comment, $user) { + if ( $user->exists() ) + return; + + /** + * Filter the lifetime of the comment cookie in seconds. + * + * @since 2.8.0 + * + * @param int $seconds Comment cookie lifetime. Default 30000000. + */ + $comment_cookie_lifetime = apply_filters( 'comment_cookie_lifetime', 30000000 ); + setcookie('comment_author_' . COOKIEHASH, $comment->comment_author, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN); + setcookie('comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN); + setcookie('comment_author_url_' . COOKIEHASH, esc_url($comment->comment_author_url), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN); +} + +/** + * Sanitizes the cookies sent to the user already. + * + * Will only do anything if the cookies have already been created for the user. + * Mostly used after cookies had been sent to use elsewhere. + * + * @since 2.0.4 + */ +function sanitize_comment_cookies() { + if ( isset( $_COOKIE['comment_author_' . COOKIEHASH] ) ) { + /** + * Filter the comment author's name cookie before it is set. + * + * When this filter hook is evaluated in wp_filter_comment(), + * the comment author's name string is passed. + * + * @since 1.5.0 + * + * @param string $author_cookie The comment author name cookie. + */ + $comment_author = apply_filters( 'pre_comment_author_name', $_COOKIE['comment_author_' . COOKIEHASH] ); + $comment_author = wp_unslash($comment_author); + $comment_author = esc_attr($comment_author); + $_COOKIE['comment_author_' . COOKIEHASH] = $comment_author; + } + + if ( isset( $_COOKIE['comment_author_email_' . COOKIEHASH] ) ) { + /** + * Filter the comment author's email cookie before it is set. + * + * When this filter hook is evaluated in wp_filter_comment(), + * the comment author's email string is passed. + * + * @since 1.5.0 + * + * @param string $author_email_cookie The comment author email cookie. + */ + $comment_author_email = apply_filters( 'pre_comment_author_email', $_COOKIE['comment_author_email_' . COOKIEHASH] ); + $comment_author_email = wp_unslash($comment_author_email); + $comment_author_email = esc_attr($comment_author_email); + $_COOKIE['comment_author_email_'.COOKIEHASH] = $comment_author_email; + } + + if ( isset( $_COOKIE['comment_author_url_' . COOKIEHASH] ) ) { + /** + * Filter the comment author's URL cookie before it is set. + * + * When this filter hook is evaluated in wp_filter_comment(), + * the comment author's URL string is passed. + * + * @since 1.5.0 + * + * @param string $author_url_cookie The comment author URL cookie. + */ + $comment_author_url = apply_filters( 'pre_comment_author_url', $_COOKIE['comment_author_url_' . COOKIEHASH] ); + $comment_author_url = wp_unslash($comment_author_url); + $_COOKIE['comment_author_url_'.COOKIEHASH] = $comment_author_url; + } +} + +/** + * Validates whether this comment is allowed to be made. + * + * @since 2.0.0 + * @uses $wpdb + * @uses apply_filters() Calls 'pre_comment_approved' hook on the type of comment + * @uses apply_filters() Calls 'comment_duplicate_trigger' hook on commentdata. + * @uses do_action() Calls 'check_comment_flood' hook on $comment_author_IP, $comment_author_email, and $comment_date_gmt + * + * @param array $commentdata Contains information on the comment + * @return mixed Signifies the approval status (0|1|'spam') + */ +function wp_allow_comment($commentdata) { + global $wpdb; + extract($commentdata, EXTR_SKIP); + + // Simple duplicate check + // expected_slashed ($comment_post_ID, $comment_author, $comment_author_email, $comment_content) + $dupe = $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_parent = %s AND comment_approved != 'trash' AND ( comment_author = %s ", wp_unslash( $comment_post_ID ), wp_unslash( $comment_parent ), wp_unslash( $comment_author ) ); + if ( $comment_author_email ) + $dupe .= $wpdb->prepare( "OR comment_author_email = %s ", wp_unslash( $comment_author_email ) ); + $dupe .= $wpdb->prepare( ") AND comment_content = %s LIMIT 1", wp_unslash( $comment_content ) ); + if ( $wpdb->get_var($dupe) ) { + /** + * Fires immediately after a duplicate comment is detected. + * + * @since 3.0.0 + * + * @param array $commentdata Comment data. + */ + do_action( 'comment_duplicate_trigger', $commentdata ); + if ( defined('DOING_AJAX') ) + die( __('Duplicate comment detected; it looks as though you’ve already said that!') ); + + wp_die( __('Duplicate comment detected; it looks as though you’ve already said that!') ); + } + + /** + * Fires immediately before a comment is marked approved. + * + * Allows checking for comment flooding. + * + * @since 2.3.0 + * + * @param string $comment_author_IP Comment author's IP address. + * @param string $comment_author_email Comment author's email. + * @param string $comment_date_gmt GMT date the comment was posted. + */ + do_action( 'check_comment_flood', $comment_author_IP, $comment_author_email, $comment_date_gmt ); + + if ( ! empty( $user_id ) ) { + $user = get_userdata( $user_id ); + $post_author = $wpdb->get_var($wpdb->prepare("SELECT post_author FROM $wpdb->posts WHERE ID = %d LIMIT 1", $comment_post_ID)); + } + + if ( isset( $user ) && ( $user_id == $post_author || $user->has_cap( 'moderate_comments' ) ) ) { + // The author and the admins get respect. + $approved = 1; + } else { + // Everyone else's comments will be checked. + if ( check_comment($comment_author, $comment_author_email, $comment_author_url, $comment_content, $comment_author_IP, $comment_agent, $comment_type) ) + $approved = 1; + else + $approved = 0; + if ( wp_blacklist_check($comment_author, $comment_author_email, $comment_author_url, $comment_content, $comment_author_IP, $comment_agent) ) + $approved = 'spam'; + } + + /** + * Filter a comment's approval status before it is set. + * + * @since 2.1.0 + * + * @param bool|string $approved The approval status. Accepts 1, 0, or 'spam'. + * @param array $commentdata Comment data. + */ + $approved = apply_filters( 'pre_comment_approved', $approved, $commentdata ); + return $approved; +} + +/** + * Check whether comment flooding is occurring. + * + * Won't run, if current user can manage options, so to not block + * administrators. + * + * @since 2.3.0 + * @uses $wpdb + * @uses apply_filters() Calls 'comment_flood_filter' filter with first + * parameter false, last comment timestamp, new comment timestamp. + * @uses do_action() Calls 'comment_flood_trigger' action with parameters with + * last comment timestamp and new comment timestamp. + * + * @param string $ip Comment IP. + * @param string $email Comment author email address. + * @param string $date MySQL time string. + */ +function check_comment_flood_db( $ip, $email, $date ) { + global $wpdb; + if ( current_user_can( 'manage_options' ) ) + return; // don't throttle admins + $hour_ago = gmdate( 'Y-m-d H:i:s', time() - HOUR_IN_SECONDS ); + if ( $lasttime = $wpdb->get_var( $wpdb->prepare( "SELECT `comment_date_gmt` FROM `$wpdb->comments` WHERE `comment_date_gmt` >= %s AND ( `comment_author_IP` = %s OR `comment_author_email` = %s ) ORDER BY `comment_date_gmt` DESC LIMIT 1", $hour_ago, $ip, $email ) ) ) { + $time_lastcomment = mysql2date('U', $lasttime, false); + $time_newcomment = mysql2date('U', $date, false); + /** + * Filter the comment flood status. + * + * @since 2.1.0 + * + * @param bool $bool Whether a comment flood is occurring. Default false. + * @param int $time_lastcomment Timestamp of when the last comment was posted. + * @param int $time_newcomment Timestamp of when the new comment was posted. + */ + $flood_die = apply_filters( 'comment_flood_filter', false, $time_lastcomment, $time_newcomment ); + if ( $flood_die ) { + /** + * Fires before the comment flood message is triggered. + * + * @since 1.5.0 + * + * @param int $time_lastcomment Timestamp of when the last comment was posted. + * @param int $time_newcomment Timestamp of when the new comment was posted. + */ + do_action( 'comment_flood_trigger', $time_lastcomment, $time_newcomment ); + + if ( defined('DOING_AJAX') ) + die( __('You are posting comments too quickly. Slow down.') ); + + wp_die( __('You are posting comments too quickly. Slow down.'), '', array('response' => 403) ); + } + } +} + +/** + * Separates an array of comments into an array keyed by comment_type. + * + * @since 2.7.0 + * + * @param array $comments Array of comments + * @return array Array of comments keyed by comment_type. + */ +function separate_comments(&$comments) { + $comments_by_type = array('comment' => array(), 'trackback' => array(), 'pingback' => array(), 'pings' => array()); + $count = count($comments); + for ( $i = 0; $i < $count; $i++ ) { + $type = $comments[$i]->comment_type; + if ( empty($type) ) + $type = 'comment'; + $comments_by_type[$type][] = &$comments[$i]; + if ( 'trackback' == $type || 'pingback' == $type ) + $comments_by_type['pings'][] = &$comments[$i]; + } + + return $comments_by_type; +} + +/** + * Calculate the total number of comment pages. + * + * @since 2.7.0 + * @uses get_query_var() Used to fill in the default for $per_page parameter. + * @uses get_option() Used to fill in defaults for parameters. + * @uses Walker_Comment + * + * @param array $comments Optional array of comment objects. Defaults to $wp_query->comments + * @param int $per_page Optional comments per page. + * @param boolean $threaded Optional control over flat or threaded comments. + * @return int Number of comment pages. + */ +function get_comment_pages_count( $comments = null, $per_page = null, $threaded = null ) { + global $wp_query; + + if ( null === $comments && null === $per_page && null === $threaded && !empty($wp_query->max_num_comment_pages) ) + return $wp_query->max_num_comment_pages; + + if ( !$comments || !is_array($comments) ) + $comments = $wp_query->comments; + + if ( empty($comments) ) + return 0; + + if ( ! get_option( 'page_comments' ) ) + return 1; + + if ( !isset($per_page) ) + $per_page = (int) get_query_var('comments_per_page'); + if ( 0 === $per_page ) + $per_page = (int) get_option('comments_per_page'); + if ( 0 === $per_page ) + return 1; + + if ( !isset($threaded) ) + $threaded = get_option('thread_comments'); + + if ( $threaded ) { + $walker = new Walker_Comment; + $count = ceil( $walker->get_number_of_root_elements( $comments ) / $per_page ); + } else { + $count = ceil( count( $comments ) / $per_page ); + } + + return $count; +} + +/** + * Calculate what page number a comment will appear on for comment paging. + * + * @since 2.7.0 + * @uses get_comment() Gets the full comment of the $comment_ID parameter. + * @uses get_option() Get various settings to control function and defaults. + * @uses get_page_of_comment() Used to loop up to top level comment. + * + * @param int $comment_ID Comment ID. + * @param array $args Optional args. + * @return int|null Comment page number or null on error. + */ +function get_page_of_comment( $comment_ID, $args = array() ) { + global $wpdb; + + if ( !$comment = get_comment( $comment_ID ) ) + return; + + $defaults = array( 'type' => 'all', 'page' => '', 'per_page' => '', 'max_depth' => '' ); + $args = wp_parse_args( $args, $defaults ); + + if ( '' === $args['per_page'] && get_option('page_comments') ) + $args['per_page'] = get_query_var('comments_per_page'); + if ( empty($args['per_page']) ) { + $args['per_page'] = 0; + $args['page'] = 0; + } + if ( $args['per_page'] < 1 ) + return 1; + + if ( '' === $args['max_depth'] ) { + if ( get_option('thread_comments') ) + $args['max_depth'] = get_option('thread_comments_depth'); + else + $args['max_depth'] = -1; + } + + // Find this comment's top level parent if threading is enabled + if ( $args['max_depth'] > 1 && 0 != $comment->comment_parent ) + return get_page_of_comment( $comment->comment_parent, $args ); + + $allowedtypes = array( + 'comment' => '', + 'pingback' => 'pingback', + 'trackback' => 'trackback', + ); + + $comtypewhere = ( 'all' != $args['type'] && isset($allowedtypes[$args['type']]) ) ? " AND comment_type = '" . $allowedtypes[$args['type']] . "'" : ''; + + // Count comments older than this one + $oldercoms = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_parent = 0 AND comment_approved = '1' AND comment_date_gmt < '%s'" . $comtypewhere, $comment->comment_post_ID, $comment->comment_date_gmt ) ); + + // No older comments? Then it's page #1. + if ( 0 == $oldercoms ) + return 1; + + // Divide comments older than this one by comments per page to get this comment's page number + return ceil( ( $oldercoms + 1 ) / $args['per_page'] ); +} + +/** + * Does comment contain blacklisted characters or words. + * + * @since 1.5.0 + * @uses do_action() Calls 'wp_blacklist_check' hook for all parameters. + * + * @param string $author The author of the comment + * @param string $email The email of the comment + * @param string $url The url used in the comment + * @param string $comment The comment content + * @param string $user_ip The comment author IP address + * @param string $user_agent The author's browser user agent + * @return bool True if comment contains blacklisted content, false if comment does not + */ +function wp_blacklist_check($author, $email, $url, $comment, $user_ip, $user_agent) { + /** + * Fires before the comment is tested for blacklisted characters or words. + * + * @since 1.5.0 + * + * @param string $author Comment author. + * @param string $email Comment author's email. + * @param string $url Comment author's URL. + * @param string $comment Comment content. + * @param string $user_ip Comment author's IP address. + * @param string $user_agent Comment author's browser user agent. + */ + do_action( 'wp_blacklist_check', $author, $email, $url, $comment, $user_ip, $user_agent ); + + $mod_keys = trim( get_option('blacklist_keys') ); + if ( '' == $mod_keys ) + return false; // If moderation keys are empty + $words = explode("\n", $mod_keys ); + + foreach ( (array) $words as $word ) { + $word = trim($word); + + // Skip empty lines + if ( empty($word) ) { continue; } + + // Do some escaping magic so that '#' chars in the + // spam words don't break things: + $word = preg_quote($word, '#'); + + $pattern = "#$word#i"; + if ( + preg_match($pattern, $author) + || preg_match($pattern, $email) + || preg_match($pattern, $url) + || preg_match($pattern, $comment) + || preg_match($pattern, $user_ip) + || preg_match($pattern, $user_agent) + ) + return true; + } + return false; +} + +/** + * Retrieve total comments for blog or single post. + * + * The properties of the returned object contain the 'moderated', 'approved', + * and spam comments for either the entire blog or single post. Those properties + * contain the amount of comments that match the status. The 'total_comments' + * property contains the integer of total comments. + * + * The comment stats are cached and then retrieved, if they already exist in the + * cache. + * + * @since 2.5.0 + * + * @param int $post_id Optional. Post ID. + * @return object Comment stats. + */ +function wp_count_comments( $post_id = 0 ) { + global $wpdb; + + $post_id = (int) $post_id; + + /** + * Filter the comments count for a given post. + * + * @since 2.7.0 + * + * @param array $count An empty array. + * @param int $post_id The post ID. + */ + $stats = apply_filters( 'wp_count_comments', array(), $post_id ); + if ( !empty($stats) ) + return $stats; + + $count = wp_cache_get("comments-{$post_id}", 'counts'); + + if ( false !== $count ) + return $count; + + $where = ''; + if ( $post_id > 0 ) + $where = $wpdb->prepare( "WHERE comment_post_ID = %d", $post_id ); + + $count = $wpdb->get_results( "SELECT comment_approved, COUNT( * ) AS num_comments FROM {$wpdb->comments} {$where} GROUP BY comment_approved", ARRAY_A ); + + $total = 0; + $approved = array('0' => 'moderated', '1' => 'approved', 'spam' => 'spam', 'trash' => 'trash', 'post-trashed' => 'post-trashed'); + foreach ( (array) $count as $row ) { + // Don't count post-trashed toward totals + if ( 'post-trashed' != $row['comment_approved'] && 'trash' != $row['comment_approved'] ) + $total += $row['num_comments']; + if ( isset( $approved[$row['comment_approved']] ) ) + $stats[$approved[$row['comment_approved']]] = $row['num_comments']; + } + + $stats['total_comments'] = $total; + foreach ( $approved as $key ) { + if ( empty($stats[$key]) ) + $stats[$key] = 0; + } + + $stats = (object) $stats; + wp_cache_set("comments-{$post_id}", $stats, 'counts'); + + return $stats; +} + +/** + * Trashes or deletes a comment. + * + * The comment is moved to trash instead of permanently deleted unless trash is + * disabled, item is already in the trash, or $force_delete is true. + * + * The post comment count will be updated if the comment was approved and has a + * post ID available. + * + * @since 2.0.0 + * @uses $wpdb + * @uses do_action() Calls 'delete_comment' hook on comment ID + * @uses do_action() Calls 'deleted_comment' hook on comment ID after deletion, on success + * @uses do_action() Calls 'wp_set_comment_status' hook on comment ID with 'delete' set for the second parameter + * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object + * + * @param int $comment_id Comment ID + * @param bool $force_delete Whether to bypass trash and force deletion. Default is false. + * @return bool True on success, false on failure. + */ +function wp_delete_comment($comment_id, $force_delete = false) { + global $wpdb; + if (!$comment = get_comment($comment_id)) + return false; + + if ( !$force_delete && EMPTY_TRASH_DAYS && !in_array( wp_get_comment_status($comment_id), array( 'trash', 'spam' ) ) ) + return wp_trash_comment($comment_id); + + /** + * Fires immediately before a comment is deleted from the database. + * + * @since 1.2.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'delete_comment', $comment_id ); + + // Move children up a level. + $children = $wpdb->get_col( $wpdb->prepare("SELECT comment_ID FROM $wpdb->comments WHERE comment_parent = %d", $comment_id) ); + if ( !empty($children) ) { + $wpdb->update($wpdb->comments, array('comment_parent' => $comment->comment_parent), array('comment_parent' => $comment_id)); + clean_comment_cache($children); + } + + // Delete metadata + $meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->commentmeta WHERE comment_id = %d", $comment_id ) ); + foreach ( $meta_ids as $mid ) + delete_metadata_by_mid( 'comment', $mid ); + + if ( ! $wpdb->delete( $wpdb->comments, array( 'comment_ID' => $comment_id ) ) ) + return false; + + /** + * Fires immediately after a comment is deleted from the database. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'deleted_comment', $comment_id ); + + $post_id = $comment->comment_post_ID; + if ( $post_id && $comment->comment_approved == 1 ) + wp_update_comment_count($post_id); + + clean_comment_cache($comment_id); + + /** + * Fires immediately before changing the comment's status to 'delete'. + * + * @since 1.5.0 + * + * @param int $comment_id The comment ID. + * @param string $status The new 'delete' comment status. + */ + do_action( 'wp_set_comment_status', $comment_id, 'delete' ); + wp_transition_comment_status('delete', $comment->comment_approved, $comment); + return true; +} + +/** + * Moves a comment to the Trash + * + * If trash is disabled, comment is permanently deleted. + * + * @since 2.9.0 + * @uses do_action() on 'trash_comment' before trashing + * @uses do_action() on 'trashed_comment' after trashing + * @uses wp_delete_comment() if trash is disabled + * + * @param int $comment_id Comment ID. + * @return bool True on success, false on failure. + */ +function wp_trash_comment($comment_id) { + if ( !EMPTY_TRASH_DAYS ) + return wp_delete_comment($comment_id, true); + + if ( !$comment = get_comment($comment_id) ) + return false; + + /** + * Fires immediately before a comment is sent to the Trash. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'trash_comment', $comment_id ); + + if ( wp_set_comment_status($comment_id, 'trash') ) { + add_comment_meta($comment_id, '_wp_trash_meta_status', $comment->comment_approved); + add_comment_meta($comment_id, '_wp_trash_meta_time', time() ); + + /** + * Fires immediately after a comment is sent to Trash. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'trashed_comment', $comment_id ); + return true; + } + + return false; +} + +/** + * Removes a comment from the Trash + * + * @since 2.9.0 + * @uses do_action() on 'untrash_comment' before untrashing + * @uses do_action() on 'untrashed_comment' after untrashing + * + * @param int $comment_id Comment ID. + * @return bool True on success, false on failure. + */ +function wp_untrash_comment($comment_id) { + if ( ! (int)$comment_id ) + return false; + + /** + * Fires immediately before a comment is restored from the Trash. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'untrash_comment', $comment_id ); + + $status = (string) get_comment_meta($comment_id, '_wp_trash_meta_status', true); + if ( empty($status) ) + $status = '0'; + + if ( wp_set_comment_status($comment_id, $status) ) { + delete_comment_meta($comment_id, '_wp_trash_meta_time'); + delete_comment_meta($comment_id, '_wp_trash_meta_status'); + /** + * Fires immediately after a comment is restored from the Trash. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'untrashed_comment', $comment_id ); + return true; + } + + return false; +} + +/** + * Marks a comment as Spam + * + * @since 2.9.0 + * @uses do_action() on 'spam_comment' before spamming + * @uses do_action() on 'spammed_comment' after spamming + * + * @param int $comment_id Comment ID. + * @return bool True on success, false on failure. + */ +function wp_spam_comment($comment_id) { + if ( !$comment = get_comment($comment_id) ) + return false; + + /** + * Fires immediately before a comment is marked as Spam. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'spam_comment', $comment_id ); + + if ( wp_set_comment_status($comment_id, 'spam') ) { + add_comment_meta($comment_id, '_wp_trash_meta_status', $comment->comment_approved); + /** + * Fires immediately after a comment is marked as Spam. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'spammed_comment', $comment_id ); + return true; + } + + return false; +} + +/** + * Removes a comment from the Spam + * + * @since 2.9.0 + * @uses do_action() on 'unspam_comment' before unspamming + * @uses do_action() on 'unspammed_comment' after unspamming + * + * @param int $comment_id Comment ID. + * @return bool True on success, false on failure. + */ +function wp_unspam_comment($comment_id) { + if ( ! (int)$comment_id ) + return false; + + /** + * Fires immediately before a comment is unmarked as Spam. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'unspam_comment', $comment_id ); + + $status = (string) get_comment_meta($comment_id, '_wp_trash_meta_status', true); + if ( empty($status) ) + $status = '0'; + + if ( wp_set_comment_status($comment_id, $status) ) { + delete_comment_meta($comment_id, '_wp_trash_meta_status'); + /** + * Fires immediately after a comment is unmarked as Spam. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'unspammed_comment', $comment_id ); + return true; + } + + return false; +} + +/** + * The status of a comment by ID. + * + * @since 1.0.0 + * + * @param int $comment_id Comment ID + * @return string|bool Status might be 'trash', 'approved', 'unapproved', 'spam'. False on failure. + */ +function wp_get_comment_status($comment_id) { + $comment = get_comment($comment_id); + if ( !$comment ) + return false; + + $approved = $comment->comment_approved; + + if ( $approved == null ) + return false; + elseif ( $approved == '1' ) + return 'approved'; + elseif ( $approved == '0' ) + return 'unapproved'; + elseif ( $approved == 'spam' ) + return 'spam'; + elseif ( $approved == 'trash' ) + return 'trash'; + else + return false; +} + +/** + * Call hooks for when a comment status transition occurs. + * + * Calls hooks for comment status transitions. If the new comment status is not the same + * as the previous comment status, then two hooks will be ran, the first is + * 'transition_comment_status' with new status, old status, and comment data. The + * next action called is 'comment_OLDSTATUS_to_NEWSTATUS' the NEWSTATUS is the + * $new_status parameter and the OLDSTATUS is $old_status parameter; it has the + * comment data. + * + * The final action will run whether or not the comment statuses are the same. The + * action is named 'comment_NEWSTATUS_COMMENTTYPE', NEWSTATUS is from the $new_status + * parameter and COMMENTTYPE is comment_type comment data. + * + * @since 2.7.0 + * + * @param string $new_status New comment status. + * @param string $old_status Previous comment status. + * @param object $comment Comment data. + */ +function wp_transition_comment_status($new_status, $old_status, $comment) { + /* + * Translate raw statuses to human readable formats for the hooks. + * This is not a complete list of comment status, it's only the ones + * that need to be renamed + */ + $comment_statuses = array( + 0 => 'unapproved', + 'hold' => 'unapproved', // wp_set_comment_status() uses "hold" + 1 => 'approved', + 'approve' => 'approved', // wp_set_comment_status() uses "approve" + ); + if ( isset($comment_statuses[$new_status]) ) $new_status = $comment_statuses[$new_status]; + if ( isset($comment_statuses[$old_status]) ) $old_status = $comment_statuses[$old_status]; + + // Call the hooks + if ( $new_status != $old_status ) { + /** + * Fires when the comment status is in transition. + * + * @since 2.7.0 + * + * @param int|string $new_status The new comment status. + * @param int|string $old_status The old comment status. + * @param object $comment The comment data. + */ + do_action( 'transition_comment_status', $new_status, $old_status, $comment ); + /** + * Fires when the comment status is in transition from one specific status to another. + * + * The dynamic portions of the hook name, $old_status, and $new_status, + * refer to the old and new comment statuses, respectively. + * + * @since 2.7.0 + * + * @param object $comment Comment object. + */ + do_action( "comment_{$old_status}_to_{$new_status}", $comment ); + } + /** + * Fires when the status of a specific comment type is in transition. + * + * The dynamic portions of the hook name, $new_status, and $comment->comment_type, + * refer to the new comment status, and the type of comment, respectively. + * + * Typical comment types include an empty string (standard comment), 'pingback', + * or 'trackback'. + * + * @since 2.7.0 + * + * @param int $comment_ID The comment ID. + * @param obj $comment Comment object. + */ + do_action( "comment_{$new_status}_{$comment->comment_type}", $comment->comment_ID, $comment ); +} + +/** + * Get current commenter's name, email, and URL. + * + * Expects cookies content to already be sanitized. User of this function might + * wish to recheck the returned array for validity. + * + * @see sanitize_comment_cookies() Use to sanitize cookies + * + * @since 2.0.4 + * + * @return array Comment author, email, url respectively. + */ +function wp_get_current_commenter() { + // Cookies should already be sanitized. + + $comment_author = ''; + if ( isset($_COOKIE['comment_author_'.COOKIEHASH]) ) + $comment_author = $_COOKIE['comment_author_'.COOKIEHASH]; + + $comment_author_email = ''; + if ( isset($_COOKIE['comment_author_email_'.COOKIEHASH]) ) + $comment_author_email = $_COOKIE['comment_author_email_'.COOKIEHASH]; + + $comment_author_url = ''; + if ( isset($_COOKIE['comment_author_url_'.COOKIEHASH]) ) + $comment_author_url = $_COOKIE['comment_author_url_'.COOKIEHASH]; + + /** + * Filter the current commenter's name, email, and URL. + * + * @since 3.1.0 + * + * @param string $comment_author Comment author's name. + * @param string $comment_author_email Comment author's email. + * @param string $comment_author_url Comment author's URL. + */ + return apply_filters( 'wp_get_current_commenter', compact('comment_author', 'comment_author_email', 'comment_author_url') ); +} + +/** + * Inserts a comment to the database. + * + * The available comment data key names are 'comment_author_IP', 'comment_date', + * 'comment_date_gmt', 'comment_parent', 'comment_approved', and 'user_id'. + * + * @since 2.0.0 + * @uses $wpdb + * + * @param array $commentdata Contains information on the comment. + * @return int The new comment's ID. + */ +function wp_insert_comment($commentdata) { + global $wpdb; + extract(wp_unslash($commentdata), EXTR_SKIP); + + if ( ! isset($comment_author_IP) ) + $comment_author_IP = ''; + if ( ! isset($comment_date) ) + $comment_date = current_time('mysql'); + if ( ! isset($comment_date_gmt) ) + $comment_date_gmt = get_gmt_from_date($comment_date); + if ( ! isset($comment_parent) ) + $comment_parent = 0; + if ( ! isset($comment_approved) ) + $comment_approved = 1; + if ( ! isset($comment_karma) ) + $comment_karma = 0; + if ( ! isset($user_id) ) + $user_id = 0; + if ( ! isset($comment_type) ) + $comment_type = ''; + + $data = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_author_IP', 'comment_date', 'comment_date_gmt', 'comment_content', 'comment_karma', 'comment_approved', 'comment_agent', 'comment_type', 'comment_parent', 'user_id'); + $wpdb->insert($wpdb->comments, $data); + + $id = (int) $wpdb->insert_id; + + if ( $comment_approved == 1 ) + wp_update_comment_count($comment_post_ID); + + $comment = get_comment($id); + + /** + * Fires immediately after a comment is inserted into the database. + * + * @since 2.8.0 + * + * @param int $id The comment ID. + * @param obj $comment Comment object. + */ + do_action( 'wp_insert_comment', $id, $comment ); + + wp_cache_set( 'last_changed', microtime(), 'comment' ); + + return $id; +} + +/** + * Filters and sanitizes comment data. + * + * Sets the comment data 'filtered' field to true when finished. This can be + * checked as to whether the comment should be filtered and to keep from + * filtering the same comment more than once. + * + * @since 2.0.0 + * + * @param array $commentdata Contains information on the comment. + * @return array Parsed comment information. + */ +function wp_filter_comment($commentdata) { + if ( isset( $commentdata['user_ID'] ) ) { + /** + * Filter the comment author's user id before it is set. + * + * The first time this filter is evaluated, 'user_ID' is checked + * (for back-compat), followed by the standard 'user_id' value. + * + * @since 1.5.0 + * + * @param int $user_ID The comment author's user ID. + */ + $commentdata['user_id'] = apply_filters( 'pre_user_id', $commentdata['user_ID'] ); + } elseif ( isset( $commentdata['user_id'] ) ) { + /** This filter is documented in wp-includes/comment.php */ + $commentdata['user_id'] = apply_filters( 'pre_user_id', $commentdata['user_id'] ); + } + + /** + * Filter the comment author's browser user agent before it is set. + * + * @since 1.5.0 + * + * @param int $comment_agent The comment author's browser user agent. + */ + $commentdata['comment_agent'] = apply_filters( 'pre_comment_user_agent', ( isset( $commentdata['comment_agent'] ) ? $commentdata['comment_agent'] : '' ) ); + /** This filter is documented in wp-includes/comment.php */ + $commentdata['comment_author'] = apply_filters( 'pre_comment_author_name', $commentdata['comment_author'] ); + /** + * Filter the comment content before it is set. + * + * @since 1.5.0 + * + * @param int $comment_content The comment content. + */ + $commentdata['comment_content'] = apply_filters( 'pre_comment_content', $commentdata['comment_content'] ); + /** + * Filter the comment author's IP before it is set. + * + * @since 1.5.0 + * + * @param int $comment_author_ip The comment author's IP. + */ + $commentdata['comment_author_IP'] = apply_filters( 'pre_comment_user_ip', $commentdata['comment_author_IP'] ); + /** This filter is documented in wp-includes/comment.php */ + $commentdata['comment_author_url'] = apply_filters( 'pre_comment_author_url', $commentdata['comment_author_url'] ); + /** This filter is documented in wp-includes/comment.php */ + $commentdata['comment_author_email'] = apply_filters( 'pre_comment_author_email', $commentdata['comment_author_email'] ); + $commentdata['filtered'] = true; + return $commentdata; +} + +/** + * Whether a comment should be blocked because of comment flood. + * + * @since 2.1.0 + * + * @param bool $block Whether plugin has already blocked comment. + * @param int $time_lastcomment Timestamp for last comment. + * @param int $time_newcomment Timestamp for new comment. + * @return bool Whether comment should be blocked. + */ +function wp_throttle_comment_flood($block, $time_lastcomment, $time_newcomment) { + if ( $block ) // a plugin has already blocked... we'll let that decision stand + return $block; + if ( ($time_newcomment - $time_lastcomment) < 15 ) + return true; + return false; +} + +/** + * Adds a new comment to the database. + * + * Filters new comment to ensure that the fields are sanitized and valid before + * inserting comment into database. Calls 'comment_post' action with comment ID + * and whether comment is approved by WordPress. Also has 'preprocess_comment' + * filter for processing the comment data before the function handles it. + * + * We use REMOTE_ADDR here directly. If you are behind a proxy, you should ensure + * that it is properly set, such as in wp-config.php, for your environment. + * See {@link http://core.trac.wordpress.org/ticket/9235} + * + * @since 1.5.0 + * @param array $commentdata Contains information on the comment. + * @return int The ID of the comment after adding. + */ +function wp_new_comment( $commentdata ) { + /** + * Filter a comment's data before it is sanitized and inserted into the database. + * + * @since 1.5.0 + * + * @param array $commentdata Comment data. + */ + $commentdata = apply_filters( 'preprocess_comment', $commentdata ); + + $commentdata['comment_post_ID'] = (int) $commentdata['comment_post_ID']; + if ( isset($commentdata['user_ID']) ) + $commentdata['user_id'] = $commentdata['user_ID'] = (int) $commentdata['user_ID']; + elseif ( isset($commentdata['user_id']) ) + $commentdata['user_id'] = (int) $commentdata['user_id']; + + $commentdata['comment_parent'] = isset($commentdata['comment_parent']) ? absint($commentdata['comment_parent']) : 0; + $parent_status = ( 0 < $commentdata['comment_parent'] ) ? wp_get_comment_status($commentdata['comment_parent']) : ''; + $commentdata['comment_parent'] = ( 'approved' == $parent_status || 'unapproved' == $parent_status ) ? $commentdata['comment_parent'] : 0; + + $commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', '',$_SERVER['REMOTE_ADDR'] ); + $commentdata['comment_agent'] = isset( $_SERVER['HTTP_USER_AGENT'] ) ? substr( $_SERVER['HTTP_USER_AGENT'], 0, 254 ) : ''; + + $commentdata['comment_date'] = current_time('mysql'); + $commentdata['comment_date_gmt'] = current_time('mysql', 1); + + $commentdata = wp_filter_comment($commentdata); + + $commentdata['comment_approved'] = wp_allow_comment($commentdata); + + $comment_ID = wp_insert_comment($commentdata); + + /** + * Fires immediately after a comment is inserted into the database. + * + * @since 1.2.0 + * + * @param int $comment_ID The comment ID. + * @param int $comment_approved 1 (true) if the comment is approved, 0 (false) if not. + */ + do_action( 'comment_post', $comment_ID, $commentdata['comment_approved'] ); + + if ( 'spam' !== $commentdata['comment_approved'] ) { // If it's spam save it silently for later crunching + if ( '0' == $commentdata['comment_approved'] ) { + wp_notify_moderator( $comment_ID ); + } + + // wp_notify_postauthor() checks if notifying the author of their own comment. + // By default, it won't, but filters can override this. + if ( get_option( 'comments_notify' ) && $commentdata['comment_approved'] ) { + wp_notify_postauthor( $comment_ID ); + } + } + + return $comment_ID; +} + +/** + * Sets the status of a comment. + * + * The 'wp_set_comment_status' action is called after the comment is handled. + * If the comment status is not in the list, then false is returned. + * + * @since 1.0.0 + * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object + * + * @param int $comment_id Comment ID. + * @param string $comment_status New comment status, either 'hold', 'approve', 'spam', or 'trash'. + * @param bool $wp_error Whether to return a WP_Error object if there is a failure. Default is false. + * @return bool|WP_Error True on success, false or WP_Error on failure. + */ +function wp_set_comment_status($comment_id, $comment_status, $wp_error = false) { + global $wpdb; + + $status = '0'; + switch ( $comment_status ) { + case 'hold': + case '0': + $status = '0'; + break; + case 'approve': + case '1': + $status = '1'; + if ( get_option('comments_notify') ) { + wp_notify_postauthor( $comment_id ); + } + break; + case 'spam': + $status = 'spam'; + break; + case 'trash': + $status = 'trash'; + break; + default: + return false; + } + + $comment_old = clone get_comment($comment_id); + + if ( !$wpdb->update( $wpdb->comments, array('comment_approved' => $status), array('comment_ID' => $comment_id) ) ) { + if ( $wp_error ) + return new WP_Error('db_update_error', __('Could not update comment status'), $wpdb->last_error); + else + return false; + } + + clean_comment_cache($comment_id); + + $comment = get_comment($comment_id); + + /** + * Fires after a comment status has been updated in the database. + * + * The hook also fires immediately before comment status transition hooks are fired. + * + * @since 1.5.0 + * + * @param int $comment_id The comment ID. + * @param string|bool $comment_status The comment status. Possible values include 'hold', + * 'approve', 'spam', 'trash', or false. + */ + do_action( 'wp_set_comment_status', $comment_id, $comment_status ); + wp_transition_comment_status($comment_status, $comment_old->comment_approved, $comment); + + wp_update_comment_count($comment->comment_post_ID); + + return true; +} + +/** + * Updates an existing comment in the database. + * + * Filters the comment and makes sure certain fields are valid before updating. + * + * @since 2.0.0 + * @uses $wpdb + * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object + * + * @param array $commentarr Contains information on the comment. + * @return int Comment was updated if value is 1, or was not updated if value is 0. + */ +function wp_update_comment($commentarr) { + global $wpdb; + + // First, get all of the original fields + $comment = get_comment($commentarr['comment_ID'], ARRAY_A); + if ( empty( $comment ) ) + return 0; + + // Escape data pulled from DB. + $comment = wp_slash($comment); + + $old_status = $comment['comment_approved']; + + // Merge old and new fields with new fields overwriting old ones. + $commentarr = array_merge($comment, $commentarr); + + $commentarr = wp_filter_comment( $commentarr ); + + // Now extract the merged array. + extract(wp_unslash($commentarr), EXTR_SKIP); + + /** + * Filter the comment content before it is updated in the database. + * + * @since 1.5.0 + * + * @param string $comment_content The comment data. + */ + $comment_content = apply_filters( 'comment_save_pre', $comment_content ); + + $comment_date_gmt = get_gmt_from_date($comment_date); + + if ( !isset($comment_approved) ) + $comment_approved = 1; + else if ( 'hold' == $comment_approved ) + $comment_approved = 0; + else if ( 'approve' == $comment_approved ) + $comment_approved = 1; + + $data = compact( 'comment_content', 'comment_author', 'comment_author_email', 'comment_approved', 'comment_karma', 'comment_author_url', 'comment_date', 'comment_date_gmt', 'comment_parent' ); + $rval = $wpdb->update( $wpdb->comments, $data, compact( 'comment_ID' ) ); + + clean_comment_cache($comment_ID); + wp_update_comment_count($comment_post_ID); + /** + * Fires immediately after a comment is updated in the database. + * + * The hook also fires immediately before comment status transition hooks are fired. + * + * @since 1.2.0 + * + * @param int $comment_ID The comment ID. + */ + do_action( 'edit_comment', $comment_ID ); + $comment = get_comment($comment_ID); + wp_transition_comment_status($comment->comment_approved, $old_status, $comment); + return $rval; +} + +/** + * Whether to defer comment counting. + * + * When setting $defer to true, all post comment counts will not be updated + * until $defer is set to false. When $defer is set to false, then all + * previously deferred updated post comment counts will then be automatically + * updated without having to call wp_update_comment_count() after. + * + * @since 2.5.0 + * @staticvar bool $_defer + * + * @param bool $defer + * @return unknown + */ +function wp_defer_comment_counting($defer=null) { + static $_defer = false; + + if ( is_bool($defer) ) { + $_defer = $defer; + // flush any deferred counts + if ( !$defer ) + wp_update_comment_count( null, true ); + } + + return $_defer; +} + +/** + * Updates the comment count for post(s). + * + * When $do_deferred is false (is by default) and the comments have been set to + * be deferred, the post_id will be added to a queue, which will be updated at a + * later date and only updated once per post ID. + * + * If the comments have not be set up to be deferred, then the post will be + * updated. When $do_deferred is set to true, then all previous deferred post + * IDs will be updated along with the current $post_id. + * + * @since 2.1.0 + * @see wp_update_comment_count_now() For what could cause a false return value + * + * @param int $post_id Post ID + * @param bool $do_deferred Whether to process previously deferred post comment counts + * @return bool True on success, false on failure + */ +function wp_update_comment_count($post_id, $do_deferred=false) { + static $_deferred = array(); + + if ( $do_deferred ) { + $_deferred = array_unique($_deferred); + foreach ( $_deferred as $i => $_post_id ) { + wp_update_comment_count_now($_post_id); + unset( $_deferred[$i] ); /** @todo Move this outside of the foreach and reset $_deferred to an array instead */ + } + } + + if ( wp_defer_comment_counting() ) { + $_deferred[] = $post_id; + return true; + } + elseif ( $post_id ) { + return wp_update_comment_count_now($post_id); + } + +} + +/** + * Updates the comment count for the post. + * + * @since 2.5.0 + * @uses $wpdb + * @uses do_action() Calls 'wp_update_comment_count' hook on $post_id, $new, and $old + * @uses do_action() Calls 'edit_posts' hook on $post_id and $post + * + * @param int $post_id Post ID + * @return bool True on success, false on '0' $post_id or if post with ID does not exist. + */ +function wp_update_comment_count_now($post_id) { + global $wpdb; + $post_id = (int) $post_id; + if ( !$post_id ) + return false; + if ( !$post = get_post($post_id) ) + return false; + + $old = (int) $post->comment_count; + $new = (int) $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved = '1'", $post_id) ); + $wpdb->update( $wpdb->posts, array('comment_count' => $new), array('ID' => $post_id) ); + + clean_post_cache( $post ); + + /** + * Fires immediately after a post's comment count is updated in the database. + * + * @since 2.3.0 + * + * @param int $post_id Post ID. + * @param int $new The new comment count. + * @param int $old The old comment count. + */ + do_action( 'wp_update_comment_count', $post_id, $new, $old ); + /** This action is documented in wp-includes/post.php */ + do_action( 'edit_post', $post_id, $post ); + + return true; +} + +// +// Ping and trackback functions. +// + +/** + * Finds a pingback server URI based on the given URL. + * + * Checks the HTML for the rel="pingback" link and x-pingback headers. It does + * a check for the x-pingback headers first and returns that, if available. The + * check for the rel="pingback" has more overhead than just the header. + * + * @since 1.5.0 + * + * @param string $url URL to ping. + * @param int $deprecated Not Used. + * @return bool|string False on failure, string containing URI on success. + */ +function discover_pingback_server_uri( $url, $deprecated = '' ) { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '2.7' ); + + $pingback_str_dquote = 'rel="pingback"'; + $pingback_str_squote = 'rel=\'pingback\''; + + /** @todo Should use Filter Extension or custom preg_match instead. */ + $parsed_url = parse_url($url); + + if ( ! isset( $parsed_url['host'] ) ) // Not an URL. This should never happen. + return false; + + //Do not search for a pingback server on our own uploads + $uploads_dir = wp_upload_dir(); + if ( 0 === strpos($url, $uploads_dir['baseurl']) ) + return false; + + $response = wp_safe_remote_head( $url, array( 'timeout' => 2, 'httpversion' => '1.0' ) ); + + if ( is_wp_error( $response ) ) + return false; + + if ( wp_remote_retrieve_header( $response, 'x-pingback' ) ) + return wp_remote_retrieve_header( $response, 'x-pingback' ); + + // Not an (x)html, sgml, or xml page, no use going further. + if ( preg_match('#(image|audio|video|model)/#is', wp_remote_retrieve_header( $response, 'content-type' )) ) + return false; + + // Now do a GET since we're going to look in the html headers (and we're sure it's not a binary file) + $response = wp_safe_remote_get( $url, array( 'timeout' => 2, 'httpversion' => '1.0' ) ); + + if ( is_wp_error( $response ) ) + return false; + + $contents = wp_remote_retrieve_body( $response ); + + $pingback_link_offset_dquote = strpos($contents, $pingback_str_dquote); + $pingback_link_offset_squote = strpos($contents, $pingback_str_squote); + if ( $pingback_link_offset_dquote || $pingback_link_offset_squote ) { + $quote = ($pingback_link_offset_dquote) ? '"' : '\''; + $pingback_link_offset = ($quote=='"') ? $pingback_link_offset_dquote : $pingback_link_offset_squote; + $pingback_href_pos = @strpos($contents, 'href=', $pingback_link_offset); + $pingback_href_start = $pingback_href_pos+6; + $pingback_href_end = @strpos($contents, $quote, $pingback_href_start); + $pingback_server_url_len = $pingback_href_end - $pingback_href_start; + $pingback_server_url = substr($contents, $pingback_href_start, $pingback_server_url_len); + + // We may find rel="pingback" but an incomplete pingback URL + if ( $pingback_server_url_len > 0 ) { // We got it! + return $pingback_server_url; + } + } + + return false; +} + +/** + * Perform all pingbacks, enclosures, trackbacks, and send to pingback services. + * + * @since 2.1.0 + * @uses $wpdb + */ +function do_all_pings() { + global $wpdb; + + // Do pingbacks + while ($ping = $wpdb->get_row("SELECT ID, post_content, meta_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_pingme' LIMIT 1")) { + delete_metadata_by_mid( 'post', $ping->meta_id ); + pingback( $ping->post_content, $ping->ID ); + } + + // Do Enclosures + while ($enclosure = $wpdb->get_row("SELECT ID, post_content, meta_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_encloseme' LIMIT 1")) { + delete_metadata_by_mid( 'post', $enclosure->meta_id ); + do_enclose( $enclosure->post_content, $enclosure->ID ); + } + + // Do Trackbacks + $trackbacks = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE to_ping <> '' AND post_status = 'publish'"); + if ( is_array($trackbacks) ) + foreach ( $trackbacks as $trackback ) + do_trackbacks($trackback); + + //Do Update Services/Generic Pings + generic_ping(); +} + +/** + * Perform trackbacks. + * + * @since 1.5.0 + * @uses $wpdb + * + * @param int $post_id Post ID to do trackbacks on. + */ +function do_trackbacks($post_id) { + global $wpdb; + + $post = get_post( $post_id ); + $to_ping = get_to_ping($post_id); + $pinged = get_pung($post_id); + if ( empty($to_ping) ) { + $wpdb->update($wpdb->posts, array('to_ping' => ''), array('ID' => $post_id) ); + return; + } + + if ( empty($post->post_excerpt) ) { + /** This filter is documented in wp-admin/post-template.php */ + $excerpt = apply_filters( 'the_content', $post->post_content, $post->ID ); + } else { + /** This filter is documented in wp-admin/post-template.php */ + $excerpt = apply_filters( 'the_excerpt', $post->post_excerpt ); + } + + $excerpt = str_replace(']]>', ']]>', $excerpt); + $excerpt = wp_html_excerpt($excerpt, 252, '…'); + + /** This filter is documented in wp-includes/post-template.php */ + $post_title = apply_filters( 'the_title', $post->post_title, $post->ID ); + $post_title = strip_tags($post_title); + + if ( $to_ping ) { + foreach ( (array) $to_ping as $tb_ping ) { + $tb_ping = trim($tb_ping); + if ( !in_array($tb_ping, $pinged) ) { + trackback($tb_ping, $post_title, $excerpt, $post_id); + $pinged[] = $tb_ping; + } else { + $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s, '')) WHERE ID = %d", $tb_ping, $post_id) ); + } + } + } +} + +/** + * Sends pings to all of the ping site services. + * + * @since 1.2.0 + * + * @param int $post_id Post ID. Not actually used. + * @return int Same as Post ID from parameter + */ +function generic_ping($post_id = 0) { + $services = get_option('ping_sites'); + + $services = explode("\n", $services); + foreach ( (array) $services as $service ) { + $service = trim($service); + if ( '' != $service ) + weblog_ping($service); + } + + return $post_id; +} + +/** + * Pings back the links found in a post. + * + * @since 0.71 + * @uses $wp_version + * @uses IXR_Client + * + * @param string $content Post content to check for links. + * @param int $post_ID Post ID. + */ +function pingback($content, $post_ID) { + global $wp_version; + include_once(ABSPATH . WPINC . '/class-IXR.php'); + include_once(ABSPATH . WPINC . '/class-wp-http-ixr-client.php'); + + // original code by Mort (http://mort.mine.nu:8080) + $post_links = array(); + + $pung = get_pung($post_ID); + + // Step 1 + // Parsing the post, external links (if any) are stored in the $post_links array + $post_links_temp = wp_extract_urls( $content ); + + // Step 2. + // Walking thru the links array + // first we get rid of links pointing to sites, not to specific files + // Example: + // http://dummy-weblog.org + // http://dummy-weblog.org/ + // http://dummy-weblog.org/post.php + // We don't wanna ping first and second types, even if they have a valid + + foreach ( (array) $post_links_temp as $link_test ) : + if ( !in_array($link_test, $pung) && (url_to_postid($link_test) != $post_ID) // If we haven't pung it already and it isn't a link to itself + && !is_local_attachment($link_test) ) : // Also, let's never ping local attachments. + if ( $test = @parse_url($link_test) ) { + if ( isset($test['query']) ) + $post_links[] = $link_test; + elseif ( isset( $test['path'] ) && ( $test['path'] != '/' ) && ( $test['path'] != '' ) ) + $post_links[] = $link_test; + } + endif; + endforeach; + + $post_links = array_unique( $post_links ); + /** + * Fires just before pinging back links found in a post. + * + * @since 2.0.0 + * + * @param array &$post_links An array of post links to be checked, passed by reference. + * @param array &$pung Whether a link has already been pinged, passed by reference. + * @param int $post_ID The post ID. + */ + do_action_ref_array( 'pre_ping', array( &$post_links, &$pung, $post_ID ) ); + + foreach ( (array) $post_links as $pagelinkedto ) { + $pingback_server_url = discover_pingback_server_uri( $pagelinkedto ); + + if ( $pingback_server_url ) { + @ set_time_limit( 60 ); + // Now, the RPC call + $pagelinkedfrom = get_permalink($post_ID); + + // using a timeout of 3 seconds should be enough to cover slow servers + $client = new WP_HTTP_IXR_Client($pingback_server_url); + $client->timeout = 3; + /** + * Filter the user agent sent when pinging-back a URL. + * + * @since 2.9.0 + * + * @param string $concat_useragent The user agent concatenated with ' -- WordPress/' + * and the WordPress version. + * @param string $useragent The useragent. + * @param string $pingback_server_url The server URL being linked to. + * @param string $pagelinkedto URL of page linked to. + * @param string $pagelinkedfrom URL of page linked from. + */ + $client->useragent = apply_filters( 'pingback_useragent', $client->useragent . ' -- WordPress/' . $wp_version, $client->useragent, $pingback_server_url, $pagelinkedto, $pagelinkedfrom ); + // when set to true, this outputs debug messages by itself + $client->debug = false; + + if ( $client->query('pingback.ping', $pagelinkedfrom, $pagelinkedto) || ( isset($client->error->code) && 48 == $client->error->code ) ) // Already registered + add_ping( $post_ID, $pagelinkedto ); + } + } +} + +/** + * Check whether blog is public before returning sites. + * + * @since 2.1.0 + * + * @param mixed $sites Will return if blog is public, will not return if not public. + * @return mixed Empty string if blog is not public, returns $sites, if site is public. + */ +function privacy_ping_filter($sites) { + if ( '0' != get_option('blog_public') ) + return $sites; + else + return ''; +} + +/** + * Send a Trackback. + * + * Updates database when sending trackback to prevent duplicates. + * + * @since 0.71 + * @uses $wpdb + * + * @param string $trackback_url URL to send trackbacks. + * @param string $title Title of post. + * @param string $excerpt Excerpt of post. + * @param int $ID Post ID. + * @return mixed Database query from update. + */ +function trackback($trackback_url, $title, $excerpt, $ID) { + global $wpdb; + + if ( empty($trackback_url) ) + return; + + $options = array(); + $options['timeout'] = 4; + $options['body'] = array( + 'title' => $title, + 'url' => get_permalink($ID), + 'blog_name' => get_option('blogname'), + 'excerpt' => $excerpt + ); + + $response = wp_safe_remote_post( $trackback_url, $options ); + + if ( is_wp_error( $response ) ) + return; + + $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET pinged = CONCAT(pinged, '\n', %s) WHERE ID = %d", $trackback_url, $ID) ); + return $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s, '')) WHERE ID = %d", $trackback_url, $ID) ); +} + +/** + * Send a pingback. + * + * @since 1.2.0 + * @uses $wp_version + * @uses IXR_Client + * + * @param string $server Host of blog to connect to. + * @param string $path Path to send the ping. + */ +function weblog_ping($server = '', $path = '') { + global $wp_version; + include_once(ABSPATH . WPINC . '/class-IXR.php'); + include_once(ABSPATH . WPINC . '/class-wp-http-ixr-client.php'); + + // using a timeout of 3 seconds should be enough to cover slow servers + $client = new WP_HTTP_IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path)); + $client->timeout = 3; + $client->useragent .= ' -- WordPress/'.$wp_version; + + // when set to true, this outputs debug messages by itself + $client->debug = false; + $home = trailingslashit( home_url() ); + if ( !$client->query('weblogUpdates.extendedPing', get_option('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping + $client->query('weblogUpdates.ping', get_option('blogname'), $home); +} + +/** + * Default filter attached to pingback_ping_source_uri to validate the pingback's Source URI + * + * @since 3.5.1 + * @see wp_http_validate_url() + * + * @param string $source_uri + * @return string + */ +function pingback_ping_source_uri( $source_uri ) { + return (string) wp_http_validate_url( $source_uri ); +} + +/** + * Default filter attached to xmlrpc_pingback_error. + * + * Returns a generic pingback error code unless the error code is 48, + * which reports that the pingback is already registered. + * + * @since 3.5.1 + * @link http://www.hixie.ch/specs/pingback/pingback#TOC3 + * + * @param IXR_Error $ixr_error + * @return IXR_Error + */ +function xmlrpc_pingback_error( $ixr_error ) { + if ( $ixr_error->code === 48 ) + return $ixr_error; + return new IXR_Error( 0, '' ); +} + +// +// Cache +// + +/** + * Removes comment ID from the comment cache. + * + * @since 2.3.0 + * @package WordPress + * @subpackage Cache + * + * @param int|array $ids Comment ID or array of comment IDs to remove from cache + */ +function clean_comment_cache($ids) { + foreach ( (array) $ids as $id ) + wp_cache_delete($id, 'comment'); + + wp_cache_set( 'last_changed', microtime(), 'comment' ); +} + +/** + * Updates the comment cache of given comments. + * + * Will add the comments in $comments to the cache. If comment ID already exists + * in the comment cache then it will not be updated. The comment is added to the + * cache using the comment group with the key using the ID of the comments. + * + * @since 2.3.0 + * @package WordPress + * @subpackage Cache + * + * @param array $comments Array of comment row objects + */ +function update_comment_cache($comments) { + foreach ( (array) $comments as $comment ) + wp_cache_add($comment->comment_ID, $comment, 'comment'); +} + +// +// Internal +// + +/** + * Close comments on old posts on the fly, without any extra DB queries. Hooked to the_posts. + * + * @access private + * @since 2.7.0 + * + * @param object $posts Post data object. + * @param object $query Query object. + * @return object + */ +function _close_comments_for_old_posts( $posts, $query ) { + if ( empty( $posts ) || ! $query->is_singular() || ! get_option( 'close_comments_for_old_posts' ) ) + return $posts; + + /** + * Filter the list of post types to automatically close comments for. + * + * @since 3.2.0 + * + * @param array $post_types An array of registered post types. Default array with 'post'. + */ + $post_types = apply_filters( 'close_comments_for_post_types', array( 'post' ) ); + if ( ! in_array( $posts[0]->post_type, $post_types ) ) + return $posts; + + $days_old = (int) get_option( 'close_comments_days_old' ); + if ( ! $days_old ) + return $posts; + + if ( time() - strtotime( $posts[0]->post_date_gmt ) > ( $days_old * DAY_IN_SECONDS ) ) { + $posts[0]->comment_status = 'closed'; + $posts[0]->ping_status = 'closed'; + } + + return $posts; +} + +/** + * Close comments on an old post. Hooked to comments_open and pings_open. + * + * @access private + * @since 2.7.0 + * + * @param bool $open Comments open or closed + * @param int $post_id Post ID + * @return bool $open + */ +function _close_comments_for_old_post( $open, $post_id ) { + if ( ! $open ) + return $open; + + if ( !get_option('close_comments_for_old_posts') ) + return $open; + + $days_old = (int) get_option('close_comments_days_old'); + if ( !$days_old ) + return $open; + + $post = get_post($post_id); + + /** This filter is documented in wp-includes/comment.php */ + $post_types = apply_filters( 'close_comments_for_post_types', array( 'post' ) ); + if ( ! in_array( $post->post_type, $post_types ) ) + return $open; + + if ( time() - strtotime( $post->post_date_gmt ) > ( $days_old * DAY_IN_SECONDS ) ) + return false; + + return $open; +} diff --git a/src/wp-includes/compat.php b/src/wp-includes/compat.php new file mode 100644 index 0000000..cb2a559 --- /dev/null +++ b/src/wp-includes/compat.php @@ -0,0 +1,96 @@ + 'H32', 'sha1' => 'H40'); + + if ( !isset($packs[$algo]) ) + return false; + + $pack = $packs[$algo]; + + if (strlen($key) > 64) + $key = pack($pack, $algo($key)); + + $key = str_pad($key, 64, chr(0)); + + $ipad = (substr($key, 0, 64) ^ str_repeat(chr(0x36), 64)); + $opad = (substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64)); + + $hmac = $algo($opad . pack($pack, $algo($ipad . $data))); + + if ( $raw_output ) + return pack( $pack, $hmac ); + return $hmac; +} + +if ( !function_exists('json_encode') ) { + function json_encode( $string ) { + global $wp_json; + + if ( !is_a($wp_json, 'Services_JSON') ) { + require_once( ABSPATH . WPINC . '/class-json.php' ); + $wp_json = new Services_JSON(); + } + + return $wp_json->encodeUnsafe( $string ); + } +} + +if ( !function_exists('json_decode') ) { + function json_decode( $string, $assoc_array = false ) { + global $wp_json; + + if ( !is_a($wp_json, 'Services_JSON') ) { + require_once( ABSPATH . WPINC . '/class-json.php' ); + $wp_json = new Services_JSON(); + } + + $res = $wp_json->decode( $string ); + if ( $assoc_array ) + $res = _json_decode_object_helper( $res ); + return $res; + } + function _json_decode_object_helper($data) { + if ( is_object($data) ) + $data = get_object_vars($data); + return is_array($data) ? array_map(__FUNCTION__, $data) : $data; + } +} diff --git a/src/wp-includes/cron.php b/src/wp-includes/cron.php new file mode 100644 index 0000000..cd39a08 --- /dev/null +++ b/src/wp-includes/cron.php @@ -0,0 +1,464 @@ + $hook, 'timestamp' => $timestamp, 'schedule' => false, 'args' => $args ); + /** + * Filter a single event before it is scheduled. + * + * @since 3.1.0 + * + * @param object $event An object containing an event's data. + */ + $event = apply_filters( 'schedule_event', $event ); + + // A plugin disallowed this event + if ( ! $event ) + return false; + + $key = md5(serialize($event->args)); + + $crons[$event->timestamp][$event->hook][$key] = array( 'schedule' => $event->schedule, 'args' => $event->args ); + uksort( $crons, "strnatcasecmp" ); + _set_cron_array( $crons ); +} + +/** + * Schedule a periodic event. + * + * Schedules a hook which will be executed by the WordPress actions core on a + * specific interval, specified by you. The action will trigger when someone + * visits your WordPress site, if the scheduled time has passed. + * + * Valid values for the recurrence are hourly, daily and twicedaily. These can + * be extended using the cron_schedules filter in wp_get_schedules(). + * + * Use wp_next_scheduled() to prevent duplicates + * + * @since 2.1.0 + * + * @param int $timestamp Timestamp for when to run the event. + * @param string $recurrence How often the event should recur. + * @param string $hook Action hook to execute when cron is run. + * @param array $args Optional. Arguments to pass to the hook's callback function. + * @return bool|null False on failure, null when complete with scheduling event. + */ +function wp_schedule_event( $timestamp, $recurrence, $hook, $args = array()) { + $crons = _get_cron_array(); + $schedules = wp_get_schedules(); + + if ( !isset( $schedules[$recurrence] ) ) + return false; + + $event = (object) array( 'hook' => $hook, 'timestamp' => $timestamp, 'schedule' => $recurrence, 'args' => $args, 'interval' => $schedules[$recurrence]['interval'] ); + /** This filter is documented in wp-includes/cron.php */ + $event = apply_filters( 'schedule_event', $event ); + + // A plugin disallowed this event + if ( ! $event ) + return false; + + $key = md5(serialize($event->args)); + + $crons[$event->timestamp][$event->hook][$key] = array( 'schedule' => $event->schedule, 'args' => $event->args, 'interval' => $event->interval ); + uksort( $crons, "strnatcasecmp" ); + _set_cron_array( $crons ); +} + +/** + * Reschedule a recurring event. + * + * @since 2.1.0 + * + * @param int $timestamp Timestamp for when to run the event. + * @param string $recurrence How often the event should recur. + * @param string $hook Action hook to execute when cron is run. + * @param array $args Optional. Arguments to pass to the hook's callback function. + * @return bool|null False on failure. Null when event is rescheduled. + */ +function wp_reschedule_event( $timestamp, $recurrence, $hook, $args = array()) { + $crons = _get_cron_array(); + $schedules = wp_get_schedules(); + $key = md5(serialize($args)); + $interval = 0; + + // First we try to get it from the schedule + if ( 0 == $interval ) + $interval = $schedules[$recurrence]['interval']; + // Now we try to get it from the saved interval in case the schedule disappears + if ( 0 == $interval ) + $interval = $crons[$timestamp][$hook][$key]['interval']; + // Now we assume something is wrong and fail to schedule + if ( 0 == $interval ) + return false; + + $now = time(); + + if ( $timestamp >= $now ) + $timestamp = $now + $interval; + else + $timestamp = $now + ($interval - (($now - $timestamp) % $interval)); + + wp_schedule_event( $timestamp, $recurrence, $hook, $args ); +} + +/** + * Unschedule a previously scheduled cron job. + * + * The $timestamp and $hook parameters are required, so that the event can be + * identified. + * + * @since 2.1.0 + * + * @param int $timestamp Timestamp for when to run the event. + * @param string $hook Action hook, the execution of which will be unscheduled. + * @param array $args Arguments to pass to the hook's callback function. + * Although not passed to a callback function, these arguments are used + * to uniquely identify the scheduled event, so they should be the same + * as those used when originally scheduling the event. + */ +function wp_unschedule_event( $timestamp, $hook, $args = array() ) { + $crons = _get_cron_array(); + $key = md5(serialize($args)); + unset( $crons[$timestamp][$hook][$key] ); + if ( empty($crons[$timestamp][$hook]) ) + unset( $crons[$timestamp][$hook] ); + if ( empty($crons[$timestamp]) ) + unset( $crons[$timestamp] ); + _set_cron_array( $crons ); +} + +/** + * Unschedule all cron jobs attached to a specific hook. + * + * @since 2.1.0 + * + * @param string $hook Action hook, the execution of which will be unscheduled. + * @param array $args Optional. Arguments that were to be pass to the hook's callback function. + */ +function wp_clear_scheduled_hook( $hook, $args = array() ) { + // Backward compatibility + // Previously this function took the arguments as discrete vars rather than an array like the rest of the API + if ( !is_array($args) ) { + _deprecated_argument( __FUNCTION__, '3.0', __('This argument has changed to an array to match the behavior of the other cron functions.') ); + $args = array_slice( func_get_args(), 1 ); + } + + // This logic duplicates wp_next_scheduled() + // It's required due to a scenario where wp_unschedule_event() fails due to update_option() failing, + // and, wp_next_scheduled() returns the same schedule in an infinite loop. + $crons = _get_cron_array(); + if ( empty( $crons ) ) + return; + + $key = md5( serialize( $args ) ); + foreach ( $crons as $timestamp => $cron ) { + if ( isset( $cron[ $hook ][ $key ] ) ) { + wp_unschedule_event( $timestamp, $hook, $args ); + } + } +} + +/** + * Retrieve the next timestamp for a cron event. + * + * @since 2.1.0 + * + * @param string $hook Action hook to execute when cron is run. + * @param array $args Optional. Arguments to pass to the hook's callback function. + * @return bool|int The UNIX timestamp of the next time the scheduled event will occur. + */ +function wp_next_scheduled( $hook, $args = array() ) { + $crons = _get_cron_array(); + $key = md5(serialize($args)); + if ( empty($crons) ) + return false; + foreach ( $crons as $timestamp => $cron ) { + if ( isset( $cron[$hook][$key] ) ) + return $timestamp; + } + return false; +} + +/** + * Send request to run cron through HTTP request that doesn't halt page loading. + * + * @since 2.1.0 + * + * @return null Cron could not be spawned, because it is not needed to run. + */ +function spawn_cron( $gmt_time = 0 ) { + + if ( ! $gmt_time ) + $gmt_time = microtime( true ); + + if ( defined('DOING_CRON') || isset($_GET['doing_wp_cron']) ) + return; + + /* + * multiple processes on multiple web servers can run this code concurrently + * try to make this as atomic as possible by setting doing_cron switch + */ + $lock = get_transient('doing_cron'); + + if ( $lock > $gmt_time + 10 * MINUTE_IN_SECONDS ) + $lock = 0; + + // don't run if another process is currently running it or more than once every 60 sec. + if ( $lock + WP_CRON_LOCK_TIMEOUT > $gmt_time ) + return; + + //sanity check + $crons = _get_cron_array(); + if ( !is_array($crons) ) + return; + + $keys = array_keys( $crons ); + if ( isset($keys[0]) && $keys[0] > $gmt_time ) + return; + + if ( defined('ALTERNATE_WP_CRON') && ALTERNATE_WP_CRON ) { + if ( !empty($_POST) || defined('DOING_AJAX') ) + return; + + $doing_wp_cron = sprintf( '%.22F', $gmt_time ); + set_transient( 'doing_cron', $doing_wp_cron ); + + ob_start(); + wp_redirect( add_query_arg( 'doing_wp_cron', $doing_wp_cron, wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); + echo ' '; + + // flush any buffers and send the headers + while ( @ob_end_flush() ); + flush(); + + WP_DEBUG ? include_once( ABSPATH . 'wp-cron.php' ) : @include_once( ABSPATH . 'wp-cron.php' ); + return; + } + + $doing_wp_cron = sprintf( '%.22F', $gmt_time ); + set_transient( 'doing_cron', $doing_wp_cron ); + + /** + * Filter the cron request arguments. + * + * @since 3.5.0 + * + * @param array $cron_request_array { + * An array of cron request URL arguments. + * + * @type string $url The cron request URL. + * @type int $key The 22 digit GMT microtime. + * @type array $args { + * An array of cron request arguments. + * + * @type int $timeout The request timeout in seconds. Default .01 seconds. + * @type bool $blocking Whether to set blocking for the request. Default false. + * @type bool $sslverify Whether to sslverify. Default true. + * } + * } + */ + $cron_request = apply_filters( 'cron_request', array( + 'url' => add_query_arg( 'doing_wp_cron', $doing_wp_cron, site_url( 'wp-cron.php' ) ), + 'key' => $doing_wp_cron, + 'args' => array( + 'timeout' => 0.01, + 'blocking' => false, + /** This filter is documented in wp-includes/class-http.php */ + 'sslverify' => apply_filters( 'https_local_ssl_verify', true ) + ) + ) ); + + wp_remote_post( $cron_request['url'], $cron_request['args'] ); +} + +/** + * Run scheduled callbacks or spawn cron for all scheduled events. + * + * @since 2.1.0 + * + * @return null When doesn't need to run Cron. + */ +function wp_cron() { + + // Prevent infinite loops caused by lack of wp-cron.php + if ( strpos($_SERVER['REQUEST_URI'], '/wp-cron.php') !== false || ( defined('DISABLE_WP_CRON') && DISABLE_WP_CRON ) ) + return; + + if ( false === $crons = _get_cron_array() ) + return; + + $gmt_time = microtime( true ); + $keys = array_keys( $crons ); + if ( isset($keys[0]) && $keys[0] > $gmt_time ) + return; + + $schedules = wp_get_schedules(); + foreach ( $crons as $timestamp => $cronhooks ) { + if ( $timestamp > $gmt_time ) break; + foreach ( (array) $cronhooks as $hook => $args ) { + if ( isset($schedules[$hook]['callback']) && !call_user_func( $schedules[$hook]['callback'] ) ) + continue; + spawn_cron( $gmt_time ); + break 2; + } + } +} + +/** + * Retrieve supported and filtered Cron recurrences. + * + * The supported recurrences are 'hourly' and 'daily'. A plugin may add more by + * hooking into the 'cron_schedules' filter. The filter accepts an array of + * arrays. The outer array has a key that is the name of the schedule or for + * example 'weekly'. The value is an array with two keys, one is 'interval' and + * the other is 'display'. + * + * The 'interval' is a number in seconds of when the cron job should run. So for + * 'hourly', the time is 3600 or 60*60. For weekly, the value would be + * 60*60*24*7 or 604800. The value of 'interval' would then be 604800. + * + * The 'display' is the description. For the 'weekly' key, the 'display' would + * be __('Once Weekly'). + * + * For your plugin, you will be passed an array. you can easily add your + * schedule by doing the following. + * + * // filter parameter variable name is 'array' + * $array['weekly'] = array( + * 'interval' => 604800, + * 'display' => __('Once Weekly') + * ); + * + * + * @since 2.1.0 + * + * @return array + */ +function wp_get_schedules() { + $schedules = array( + 'hourly' => array( 'interval' => HOUR_IN_SECONDS, 'display' => __( 'Once Hourly' ) ), + 'twicedaily' => array( 'interval' => 12 * HOUR_IN_SECONDS, 'display' => __( 'Twice Daily' ) ), + 'daily' => array( 'interval' => DAY_IN_SECONDS, 'display' => __( 'Once Daily' ) ), + ); + /** + * Filter the non-default cron schedules. + * + * @since 2.1.0 + * + * @param array $new_schedules An array of non-default cron schedules. Default empty. + */ + return array_merge( apply_filters( 'cron_schedules', array() ), $schedules ); +} + +/** + * Retrieve Cron schedule for hook with arguments. + * + * @since 2.1.0 + * + * @param string $hook Action hook to execute when cron is run. + * @param array $args Optional. Arguments to pass to the hook's callback function. + * @return string|bool False, if no schedule. Schedule on success. + */ +function wp_get_schedule($hook, $args = array()) { + $crons = _get_cron_array(); + $key = md5(serialize($args)); + if ( empty($crons) ) + return false; + foreach ( $crons as $timestamp => $cron ) { + if ( isset( $cron[$hook][$key] ) ) + return $cron[$hook][$key]['schedule']; + } + return false; +} + +// +// Private functions +// + +/** + * Retrieve cron info array option. + * + * @since 2.1.0 + * @access private + * + * @return array CRON info array. + */ +function _get_cron_array() { + $cron = get_option('cron'); + if ( ! is_array($cron) ) + return false; + + if ( !isset($cron['version']) ) + $cron = _upgrade_cron_array($cron); + + unset($cron['version']); + + return $cron; +} + +/** + * Updates the CRON option with the new CRON array. + * + * @since 2.1.0 + * @access private + * + * @param array $cron Cron info array from {@link _get_cron_array()}. + */ +function _set_cron_array($cron) { + $cron['version'] = 2; + update_option( 'cron', $cron ); +} + +/** + * Upgrade a Cron info array. + * + * This function upgrades the Cron info array to version 2. + * + * @since 2.1.0 + * @access private + * + * @param array $cron Cron info array from {@link _get_cron_array()}. + * @return array An upgraded Cron info array. + */ +function _upgrade_cron_array($cron) { + if ( isset($cron['version']) && 2 == $cron['version']) + return $cron; + + $new_cron = array(); + + foreach ( (array) $cron as $timestamp => $hooks) { + foreach ( (array) $hooks as $hook => $args ) { + $key = md5(serialize($args['args'])); + $new_cron[$timestamp][$hook][$key] = $args; + } + } + + $new_cron['version'] = 2; + update_option( 'cron', $new_cron ); + return $new_cron; +} diff --git a/src/wp-includes/css/admin-bar-rtl.css b/src/wp-includes/css/admin-bar-rtl.css new file mode 100644 index 0000000..4575066 --- /dev/null +++ b/src/wp-includes/css/admin-bar-rtl.css @@ -0,0 +1,1110 @@ +#wpadminbar * { + height: auto; + width: auto; + margin: 0; + padding: 0; + position: static; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + font: normal 13px/32px "Open Sans", sans-serif; + border-radius: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; + -webkit-font-smoothing: subpixel-antialiased; /* Prevent Safari from switching to standard antialiasing on hover */ +} + +.rtl #wpadminbar * { + font-family: Tahoma, sans-serif; +} + +html:lang(he-il) .rtl #wpadminbar * { + font-family: Arial, sans-serif; +} + +#wpadminbar a.ab-item, +#wpadminbar > #wp-toolbar span.ab-label, +#wpadminbar > #wp-toolbar span.noticon { + color: #eee; +} + +#wpadminbar #wp-admin-bar-site-name a.ab-item, +#wpadminbar #wp-admin-bar-my-sites a.ab-item { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +#wpadminbar ul li:before, +#wpadminbar ul li:after { + content: normal; +} + +#wpadminbar a, +#wpadminbar a:hover, +#wpadminbar a img, +#wpadminbar a img:hover { + outline: none; + border: none; + text-decoration: none; + background: none; +} + +#wpadminbar a:focus, +#wpadminbar a:active, +#wpadminbar input[type="text"], +#wpadminbar input[type="password"], +#wpadminbar input[type="number"], +#wpadminbar input[type="search"], +#wpadminbar input[type="email"], +#wpadminbar input[type="url"], +#wpadminbar select, +#wpadminbar textarea, +#wpadminbar div { + outline: none; +} + +#wpadminbar { + direction: rtl; + color: #ccc; + font: normal 13px/32px "Open Sans", sans-serif; + height: 32px; + position: fixed; + top: 0; + right: 0; + width: 100%; + min-width: 600px; /* match the min-width of the body in wp-admin.css */ + z-index: 99999; + background: #222; +} + +#wpadminbar .ab-sub-wrapper, +#wpadminbar ul, +#wpadminbar ul li { + background: none; + clear: none; + list-style: none; + margin: 0; + padding: 0; + position: relative; + text-indent: 0; + z-index: 99999; +} + +#wpadminbar ul#wp-admin-bar-root-default>li { + margin-left: 0; +} + +/* Prevent a Chrome bug that inadvertantly activates + :hover states on an element that touches the extreme + top left corner of the viewport. See #18868 */ +#wpadminbar .quicklinks { + border-right: 1px solid transparent; +} + +#wpadminbar .quicklinks ul { + text-align: right; +} + +#wpadminbar li { + float: right; +} + +#wpadminbar .ab-empty-item { + outline: none; +} + +#wpadminbar .quicklinks .ab-top-secondary > li { + float: left; +} + +#wpadminbar .quicklinks a, +#wpadminbar .quicklinks .ab-empty-item, +#wpadminbar .shortlink-input { + height: 32px; + display: block; + padding: 0 10px; + margin: 0; +} + +#wpadminbar .quicklinks > ul > li > a { + padding: 0 7px 0 8px; +} + +#wpadminbar .menupop .ab-sub-wrapper, +#wpadminbar .shortlink-input { + margin: 0; + padding: 0; + -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.2); + box-shadow: 0 3px 5px rgba(0,0,0,0.2); + background: #333; + display: none; + position: absolute; + float: none; +} + +#wpadminbar.ie7 .menupop .ab-sub-wrapper, +#wpadminbar.ie7 .shortlink-input { + top: 32px; + right: 0; +} + +#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { + min-width: 100%; +} + +#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper { + left: 0; + right: auto; +} + +#wpadminbar .ab-submenu { + padding: 6px 0; +} + +#wpadminbar .selected .shortlink-input { + display: block; +} + +#wpadminbar .quicklinks .menupop ul li { + float: none; +} + +#wpadminbar .quicklinks .menupop ul li a strong { + font-weight: bold; +} + +#wpadminbar .quicklinks .menupop ul li .ab-item, +#wpadminbar .quicklinks .menupop ul li a strong, +#wpadminbar .quicklinks .menupop.hover ul li .ab-item, +#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item, +#wpadminbar .shortlink-input { + line-height: 26px; + height: 26px; + white-space: nowrap; + min-width: 140px; +} + +#wpadminbar .shortlink-input { + width: 200px; +} + +#wpadminbar.nojs li:hover > .ab-sub-wrapper, +#wpadminbar li.hover > .ab-sub-wrapper { + display: block; +} + +#wpadminbar .menupop li:hover > .ab-sub-wrapper, +#wpadminbar .menupop li.hover > .ab-sub-wrapper { + margin-right: 100%; + margin-top: -32px; +} + +#wpadminbar .ab-top-secondary .menupop li:hover > .ab-sub-wrapper, +#wpadminbar .ab-top-secondary .menupop li.hover > .ab-sub-wrapper { + margin-right: 0; + right: inherit; + left: 100%; +} + +#wpadminbar .ab-top-menu > li > .ab-item:focus, +#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, +#wpadminbar .ab-top-menu > li:hover > .ab-item, +#wpadminbar .ab-top-menu > li.hover > .ab-item { + background: #333; + color: #2ea2cc; +} + +#wpadminbar > #wp-toolbar li:hover span.ab-label, +#wpadminbar > #wp-toolbar li.hover span.ab-label, +#wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #2ea2cc; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon, +#wpadminbar .ab-icon, +#wpadminbar .ab-item:before { + position: relative; + float: right; + font: normal 20px/1 'dashicons'; + speak: none; + padding: 4px 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background-image: none !important; + margin-left: 6px; +} + +#wpadminbar .ab-icon:before, +#wpadminbar .ab-item:before, +#wpadminbar #adminbarsearch:before { + color: #999; +} + +#wpadminbar .ab-icon:before, +#wpadminbar .ab-item:before, +#wpadminbar #adminbarsearch:before { + position: relative; + -moz-transition: all .1s ease-in-out; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#wpadminbar .ab-label { + display: inline-block; + height: 32px; +} + +#wpadminbar .ab-submenu .ab-item { + color: #eee; +} + +#wpadminbar .quicklinks .menupop ul li a, +#wpadminbar .quicklinks .menupop ul li a strong, +#wpadminbar .quicklinks .menupop.hover ul li a, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a { + color: #eee; +} + +#wpadminbar .quicklinks .menupop ul li a:hover, +#wpadminbar .quicklinks .menupop ul li a:focus, +#wpadminbar .quicklinks .menupop ul li a:hover strong, +#wpadminbar .quicklinks .menupop ul li a:focus strong, +#wpadminbar .quicklinks .menupop.hover ul li a:hover, +#wpadminbar .quicklinks .menupop.hover ul li a:focus, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, +#wpadminbar li:hover .ab-icon:before, +#wpadminbar li:hover .ab-item:before, +#wpadminbar li a:focus .ab-icon:before, +#wpadminbar li .ab-item:focus:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before { + color: #2ea2cc; +} + +#wpadminbar .menupop .menupop > .ab-item:before, +#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { + position: absolute; + font: normal 17px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#wpadminbar .menupop .menupop > .ab-item { + display: block; + padding-left: 2em; +} + +#wpadminbar .menupop .menupop > .ab-item:before { + top: 1px; + left: 4px; + content: '\f139'; + color: inherit; +} + +#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item { + padding-right: 2em; + padding-left: 1em; +} + +#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { + top: 5px; + right: 3px; + content: '\f141'; +} + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary { + display: block; + position: relative; + left: auto; + margin: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #4b4b4b; +} + +#wpadminbar .quicklinks .menupop .ab-sub-secondary > li > a:hover, +#wpadminbar .quicklinks .menupop .ab-sub-secondary > li .ab-item:focus a { + color: #2ea2cc; +} + +#wpadminbar .quicklinks a span#ab-updates { + background: #eee; + color: #333; + display: inline; + padding: 2px 5px; + font-size: 10px; + font-weight: bold; + -webkit-border-radius: 10px; + border-radius: 10px; +} + +#wpadminbar .quicklinks a:hover span#ab-updates { + background: #fff; + color: #000; +} + +#wpadminbar .ab-top-secondary { + float: left; +} + +#wpadminbar ul li:last-child, +#wpadminbar ul li:last-child .ab-item { + -webkit-box-shadow: none; + box-shadow: none; +} + +/** + * My Account + */ +#wp-admin-bar-my-account > ul { + min-width: 198px; +} + +#wp-admin-bar-my-account > .ab-item:before { + content: "\f110"; + top: 2px; + float: left; + margin-right: 6px; + margin-left: 0; +} + +#wp-admin-bar-my-account.with-avatar > .ab-item:before { + display: none; + content: none; +} + +#wp-admin-bar-my-account.with-avatar > ul { + min-width: 270px; +} + +#wpadminbar #wp-admin-bar-user-actions > li { + margin-right: 16px; + margin-left: 16px; +} + +#wpadminbar #wp-admin-bar-user-actions.ab-submenu { + padding: 6px 0 12px; +} + +#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li { + margin-right: 88px; +} + +#wpadminbar #wp-admin-bar-user-info { + margin-top: 6px; + margin-bottom: 15px; + height: auto; + background: none; +} + +#wp-admin-bar-user-info .avatar { + position: absolute; + right: -72px; + top: 4px; + width: 64px; + height: 64px; +} + +#wpadminbar #wp-admin-bar-user-info a { + background: none; + height: auto; +} + +#wpadminbar #wp-admin-bar-user-info span { + background: none; + padding: 0; + height: 18px; +} + +#wpadminbar #wp-admin-bar-user-info .display-name, +#wpadminbar #wp-admin-bar-user-info .username { + display: block; +} + +#wpadminbar #wp-admin-bar-user-info .username { + color: #999; + font-size: 11px; +} + +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + width: 16px; + height: 16px; + padding: 0; + border: 1px solid #888; + background: #eee; + line-height: 24px; + vertical-align: middle; + margin: -4px 6px 0 0; + float: none; + display: inline; +} + +/** + * WP Logo + */ +#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon { + width: 15px; + height: 20px; + margin-left: 0; + padding: 6px 0 5px; +} + +#wpadminbar #wp-admin-bar-wp-logo > .ab-item { + padding: 0 7px; +} + +#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before { + content: '\f120'; + top: 2px; +} + +/* + * My Sites & Site Title + */ +#wpadminbar .quicklinks li .blavatar { + float: right; + font: normal 16px/1 'dashicons' !important; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #eee; +} + +#wpadminbar .quicklinks li a:hover .blavatar { + color: #2ea2cc; +} + +#wpadminbar .quicklinks li .blavatar:before { + content: '\f120'; + height: 16px; + width: 16px; + display: inline-block; + margin: 6px -2px 0 8px; +} + +#wpadminbar #wp-admin-bar-appearance { + margin-top: -12px; +} + +#wpadminbar #wp-admin-bar-my-sites > .ab-item:before, +#wpadminbar #wp-admin-bar-site-name > .ab-item:before { + content: '\f112'; + top: 2px; +} + +#wpadminbar #wp-admin-bar-edit > .ab-item:before { + content: '\f464'; + top: 2px; +} + +#wpadminbar #wp-admin-bar-site-name > .ab-item:before { + content: "\f102"; +} + + + +/** + * Comments + */ +#wpadminbar #wp-admin-bar-comments .ab-icon { + margin-left: 6px; +} + +#wpadminbar #wp-admin-bar-comments .ab-icon:before { + content: '\f101'; + top: 3px; +} + +#wpadminbar #wp-admin-bar-comments .count-0 { + opacity: .5; +} + +/** + * New Content + */ +#wpadminbar #wp-admin-bar-new-content .ab-icon:before { + content: '\f132'; + top: 4px; +} + +/** + * Updates + */ +#wpadminbar #wp-admin-bar-updates .ab-icon:before { + content: '\f463'; + top: 2px; +} + +/** + * Search + */ +#wpadminbar #wp-admin-bar-search .ab-item { + padding: 0; + background: transparent; +} + +#wpadminbar #adminbarsearch { + position: relative; + height: 32px; + padding: 0 2px; +} + +#wpadminbar #adminbarsearch:before { + position: absolute; + top: 6px; + right: 5px; + z-index: 20; + font: normal 20px/1 'dashicons' !important; + content: '\f179'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { + position: relative; + z-index: 30; + font: 13px/24px "Open Sans", sans-serif; + height: 24px; + width: 24px; + padding: 0 24px 0 3px; + margin: 0; + color: #ccc; + background-color: rgba( 255, 255, 255, 0 ); + border: none; + outline: none; + cursor: pointer; + + -webkit-box-shadow: none; + box-shadow: none; + + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + + -webkit-transition-duration: 400ms; + -webkit-transition-property: width, background; + -webkit-transition-timing-function: ease; + -moz-transition-duration: 400ms; + -moz-transition-property: width, background; + -moz-transition-timing-function: ease; + -o-transition-duration: 400ms; + -o-transition-property: width, background; + -o-transition-timing-function: ease; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + z-index: 10; + color: #000; + width: 200px; + background-color: rgba( 255, 255, 255, 0.9 ); + cursor: text; + border: 0; +} + +#wpadminbar.ie7 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { + margin-top: 3px; + width: 120px; +} + +#wpadminbar.ie8 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { + margin-top: 4px; + background-color: #464646; +} + +#wpadminbar.ie8 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + background-color: #fff; +} + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #999; +} +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #999; +} +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #999; +} +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #999; +} + +#wpadminbar #adminbarsearch .adminbar-button { + display: none; +} + +/** + * Customize support classes + */ +.no-customize-support .hide-if-no-customize, +.customize-support .hide-if-customize, +.no-customize-support.wp-core-ui .hide-if-no-customize, +.no-customize-support .wp-core-ui .hide-if-no-customize, +.customize-support.wp-core-ui .hide-if-customize, +.customize-support .wp-core-ui .hide-if-customize { + display: none; +} + +/* Skip link */ +#wpadminbar .screen-reader-text, +#wpadminbar .screen-reader-text span { + position: absolute; + right: -1000em; + top: -1000em; + height: 1px; + width: 1px; + overflow: hidden; +} + +#wpadminbar .screen-reader-shortcut { + position: absolute; + top: -1000em; +} + +#wpadminbar .screen-reader-shortcut:focus { + right: 6px; + top: 7px; + height: auto; + width: auto; + display: block; + font-size: 14px; + font-weight: bold; + padding: 15px 23px 14px; + background: #f1f1f1; + color: #21759b; + z-index: 100000; + line-height: normal; + text-decoration: none; + -webkit-box-shadow: 0 0 2px 2px rgba(0,0,0,.6); + box-shadow: 0 0 2px 2px rgba(0,0,0,.6); +} + +/** + * IE 6-targeted rules + */ +* html #wpadminbar { + overflow: hidden; + position: absolute; +} + +* html #wpadminbar .quicklinks ul li a { + float: right; +} + +* html #wpadminbar .menupop a span { + background-image: none; +} + +/* No @font-face support */ +.no-font-face #wpadminbar ul.ab-top-menu > li > a.ab-item { + display: block; + width: 45px; + text-align: center; + overflow: hidden; + margin: 0 3px; +} + +.no-font-face #wpadminbar #wp-admin-bar-my-sites > .ab-item, +.no-font-face #wpadminbar #wp-admin-bar-site-name > .ab-item, +.no-font-face #wpadminbar #wp-admin-bar-edit > .ab-item { + text-indent: 0; +} + +.no-font-face #wpadminbar .ab-icon, +.no-font-face #wpadminbar .ab-icon:before, +.no-font-face #wpadminbar a.ab-item:before, +.no-font-face #wpadminbar #wp-admin-bar-wp-logo > .ab-item { + display: none !important; +} + +.no-font-face #wpadminbar ul.ab-top-menu > li > a > span.ab-label { + display: inline; +} + +.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon { + display: inline !important; +} + +.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon:before { + content: "Menu"; + font: 14px/45px sans-serif !important; + display: inline-block !important; + color: #fff; +} + +.no-font-face #wpadminbar #wp-admin-bar-site-name a.ab-item { + color: #fff; +} +/* End no @font-face */ + +@media screen and ( max-width: 782px ) { + /* Toolbar Touchification*/ + html #wpadminbar { + right: 0 !important; + z-index: 500 !important; + height: 46px; + min-width: 300px; + + /* These rules break dropdown tappability on Chrome/Android. + -webkit-transform: translate3d(0, 0, 0); + -webkit-backface-visibility: hidden; + -webkit-transition: 0; + transform: translate3d(0, 0, 0); + backface-visibility: hidden; + transition: 0; + */ + } + + #wpadminbar * { + font: normal 14px/32px "Open Sans", sans-serif; + } + + #wpadminbar .quicklinks > ul > li > a, + #wpadminbar .quicklinks .ab-empty-item { + padding: 0; + height: 46px; + line-height: 46px; + width: auto; + } + + #wpadminbar .ab-icon { + font: 40px/1 dashicons !important; + margin: 0; + padding: 0; + width: 52px; + height: 46px; + text-align: center; + } + + #wpadminbar .ab-icon:before { + text-align: center; + } + + #wpadminbar .ab-submenu { + padding: 0; + } + + #wpadminbar #wp-admin-bar-site-name a.ab-item, + #wpadminbar #wp-admin-bar-my-sites a.ab-item, + #wpadminbar #wp-admin-bar-my-account a.ab-item { + text-overflow: clip; + } + + #wpadminbar .ab-label { + display: none; + } + + #wpadminbar .menupop li:hover > .ab-sub-wrapper, + #wpadminbar .menupop li.hover > .ab-sub-wrapper { + margin-top: -46px; + } + + #wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop > .ab-item { + padding-left: 30px; + } + + #wpadminbar .menupop .menupop > .ab-item:before { + top: 10px; + left: 6px; + } + + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper .ab-item { + font-size: 16px; + padding: 6px 15px 12px; + } + + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper a:empty { + display: none; + } + + /* WP logo */ + #wpadminbar #wp-admin-bar-wp-logo > .ab-item { + padding: 0; + } + + #wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon { + padding: 0; + width: 52px; + height: 46px; + text-align: center; + vertical-align: top; + } + + #wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before { + font: 28px/1 'dashicons' !important; + top: -3px; + } + + #wpadminbar .ab-icon, + #wpadminbar .ab-item:before { + padding: 0; + } + + /* My Sites and "Site Title" menu */ + #wpadminbar #wp-admin-bar-my-sites > .ab-item, + #wpadminbar #wp-admin-bar-site-name > .ab-item, + #wpadminbar #wp-admin-bar-edit > .ab-item, + #wpadminbar #wp-admin-bar-my-account > .ab-item { + text-indent: 100%; + white-space: nowrap; + overflow: hidden; + width: 52px; + padding: 0; + color: #999; + position: relative; + } + + #wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon, + #wpadminbar .ab-icon, + #wpadminbar .ab-item:before { + padding: 0; + margin-left: 0; + } + + #wpadminbar #wp-admin-bar-edit > .ab-item:before, + #wpadminbar #wp-admin-bar-my-sites > .ab-item:before, + #wpadminbar #wp-admin-bar-site-name > .ab-item:before, + #wpadminbar #wp-admin-bar-my-account > .ab-item:before { + display: block; + text-indent: 0; + font: normal 32px/1 'dashicons'; + speak: none; + top: 7px; + width: 52px; + text-align: center; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + #wpadminbar #wp-admin-bar-appearance { + margin-top: 0; + } + + #wpadminbar .quicklinks li .blavatar:before { + display: none; + } + + /* Search */ + #wpadminbar #wp-admin-bar-search { + display: none; + } + + /* New Content */ + #wpadminbar #wp-admin-bar-new-content .ab-icon:before { + top: 0; + line-height: 53px; + height: 46px !important; + text-align: center; + width: 52px; + display: block; + } + + /* Updates */ + #wpadminbar #wp-admin-bar-updates { + text-align: center; + } + + #wpadminbar #wp-admin-bar-updates .ab-icon:before { + top: 3px; + } + + /* Comments */ + #wpadminbar #wp-admin-bar-comments .ab-icon { + margin: 0; + } + + #wpadminbar #wp-admin-bar-comments .ab-icon:before { + display: block; + font-size: 34px; + height: 46px; + line-height: 47px; + top: 0; + } + + /* My Account */ + #wpadminbar #wp-admin-bar-my-account > a { + position: relative; + white-space: nowrap; + text-indent: 150%; /* More than 100% indention is needed since this element has padding */ + width: 28px; + padding: 0 10px; + overflow: hidden; /* Prevent link text from forcing horizontal scrolling on mobile */ + } + + #wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + position: absolute; + top: 13px; + left: 10px; + width: 26px; + height: 26px; + } + + #wpadminbar #wp-admin-bar-user-actions.ab-submenu { + padding: 0; + } + + #wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar { + display: none; + } + + #wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li { + margin: 0; + } + + #wpadminbar #wp-admin-bar-user-info .display-name { + height: auto; + font-size: 16px; + line-height: 24px; + color: #eee; + } + + #wpadminbar #wp-admin-bar-user-info a { + padding-top: 4px; + } + + #wpadminbar #wp-admin-bar-user-info .username { + line-height: 0.8 !important; + margin-bottom: -2px; + } + + /* Show only default top level items */ + #wp-toolbar > ul > li { + display: none; + } + + #wpadminbar li#wp-admin-bar-menu-toggle, + #wpadminbar li#wp-admin-bar-wp-logo, + #wpadminbar li#wp-admin-bar-my-sites, + #wpadminbar li#wp-admin-bar-updates, + #wpadminbar li#wp-admin-bar-site-name, + #wpadminbar li#wp-admin-bar-new-content, + #wpadminbar li#wp-admin-bar-edit, + #wpadminbar li#wp-admin-bar-comments, + #wpadminbar li#wp-admin-bar-new-content, + #wpadminbar li#wp-admin-bar-my-account { + display: block; + } + + /* Allow dropdown list items to appear normally */ + #wpadminbar li:hover ul li, + #wpadminbar li.hover ul li, + #wpadminbar li:hover ul li:hover ul li { + display: list-item; + } + + /* Override default min-width so dropdown lists aren't stretched + to 100% viewport width at responsive sizes. */ + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { + min-width: intrinsic; + min-width: -webkit-fit-content; + min-width: -moz-fit-content; + min-width: fit-content; + } + + #wpadminbar ul#wp-admin-bar-root-default > li { + margin-left: 0; + } + + /* Experimental fix for touch toolbar dropdown positioning */ + #wpadminbar .ab-top-menu, + #wpadminbar .ab-top-secondary, + #wpadminbar #wp-admin-bar-wp-logo, + #wpadminbar #wp-admin-bar-my-sites, + #wpadminbar #wp-admin-bar-site-name, + #wpadminbar #wp-admin-bar-updates, + #wpadminbar #wp-admin-bar-comments, + #wpadminbar #wp-admin-bar-new-content, + #wpadminbar #wp-admin-bar-edit, + #wpadminbar #wp-admin-bar-my-account { + position: static; + } + + #wpadminbar #wp-admin-bar-my-account { + float: left; + } + + .network-admin #wpadminbar ul#wp-admin-bar-top-secondary > li#wp-admin-bar-my-account { + margin-left: 0; + } + + /* Realign arrows on taller responsive submenus */ + + #wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { + top: 10px; + right: 0; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + #wpadminbar { + position: absolute; + } + + #wp-responsive-overlay { + position: fixed; + top: 0; + right: 0; + width: 100%; + height: 100%; + z-index: 400; + } + + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { + position: fixed; + width: 100%; + right: 0; + } + + #wpadminbar .menupop .menupop > .ab-item:before { + display: none; + } + + #wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper { + margin-right: 0; + } + + #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper { + margin: 0; + width: 100%; + top: auto; + right: auto; + position: relative; + } + + #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper .ab-item { + font-size: 16px; + padding: 6px 30px 19px 15px; + } + + #wpadminbar li:hover ul li ul li { + display: list-item; + } + + #wpadminbar li#wp-admin-bar-wp-logo, + #wpadminbar li#wp-admin-bar-updates { + display: none; + } + + /* Make submenus full-width at this size */ + + #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper { + position: static; + -webkit-box-shadow: none; + box-shadow: none; + } +} diff --git a/src/wp-includes/css/admin-bar-rtl.min.css b/src/wp-includes/css/admin-bar-rtl.min.css new file mode 100644 index 0000000..ce7397d --- /dev/null +++ b/src/wp-includes/css/admin-bar-rtl.min.css @@ -0,0 +1 @@ +#wpadminbar *{height:auto;width:auto;margin:0;padding:0;position:static;text-shadow:none;text-transform:none;letter-spacing:normal;font:400 13px/32px "Open Sans",sans-serif;border-radius:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;-webkit-font-smoothing:subpixel-antialiased}.rtl #wpadminbar *{font-family:Tahoma,sans-serif}html:lang(he-il) .rtl #wpadminbar *{font-family:Arial,sans-serif}#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#eee}#wpadminbar #wp-admin-bar-site-name a.ab-item,#wpadminbar #wp-admin-bar-my-sites a.ab-item{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#wpadminbar ul li:before,#wpadminbar ul li:after{content:normal}#wpadminbar a,#wpadminbar a:hover,#wpadminbar a img,#wpadminbar a img:hover{outline:0;border:0;text-decoration:none;background:0 0}#wpadminbar a:focus,#wpadminbar a:active,#wpadminbar input[type=text],#wpadminbar input[type=password],#wpadminbar input[type=number],#wpadminbar input[type=search],#wpadminbar input[type=email],#wpadminbar input[type=url],#wpadminbar select,#wpadminbar textarea,#wpadminbar div{outline:0}#wpadminbar{direction:rtl;color:#ccc;font:400 13px/32px "Open Sans",sans-serif;height:32px;position:fixed;top:0;right:0;width:100%;min-width:600px;z-index:99999;background:#222}#wpadminbar .ab-sub-wrapper,#wpadminbar ul,#wpadminbar ul li{background:0 0;clear:none;list-style:none;margin:0;padding:0;position:relative;text-indent:0;z-index:99999}#wpadminbar ul#wp-admin-bar-root-default>li{margin-left:0}#wpadminbar .quicklinks{border-right:1px solid transparent}#wpadminbar .quicklinks ul{text-align:right}#wpadminbar li{float:right}#wpadminbar .ab-empty-item{outline:0}#wpadminbar .quicklinks .ab-top-secondary>li{float:left}#wpadminbar .quicklinks a,#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .shortlink-input{height:32px;display:block;padding:0 10px;margin:0}#wpadminbar .quicklinks>ul>li>a{padding:0 7px 0 8px}#wpadminbar .menupop .ab-sub-wrapper,#wpadminbar .shortlink-input{margin:0;padding:0;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2);background:#333;display:none;position:absolute;float:none}#wpadminbar.ie7 .menupop .ab-sub-wrapper,#wpadminbar.ie7 .shortlink-input{top:32px;right:0}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{min-width:100%}#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper{left:0;right:auto}#wpadminbar .ab-submenu{padding:6px 0}#wpadminbar .selected .shortlink-input{display:block}#wpadminbar .quicklinks .menupop ul li{float:none}#wpadminbar .quicklinks .menupop ul li a strong{font-weight:700}#wpadminbar .quicklinks .menupop ul li .ab-item,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li .ab-item,#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item,#wpadminbar .shortlink-input{line-height:26px;height:26px;white-space:nowrap;min-width:140px}#wpadminbar .shortlink-input{width:200px}#wpadminbar.nojs li:hover>.ab-sub-wrapper,#wpadminbar li.hover>.ab-sub-wrapper{display:block}#wpadminbar .menupop li:hover>.ab-sub-wrapper,#wpadminbar .menupop li.hover>.ab-sub-wrapper{margin-right:100%;margin-top:-32px}#wpadminbar .ab-top-secondary .menupop li:hover>.ab-sub-wrapper,#wpadminbar .ab-top-secondary .menupop li.hover>.ab-sub-wrapper{margin-right:0;right:inherit;left:100%}#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item{background:#333;color:#2ea2cc}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#2ea2cc}#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon,#wpadminbar .ab-icon,#wpadminbar .ab-item:before{position:relative;float:right;font:400 20px/1 dashicons;speak:none;padding:4px 0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:none!important;margin-left:6px}#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar #adminbarsearch:before{color:#999}#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar #adminbarsearch:before{position:relative;-moz-transition:all .1s ease-in-out;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#wpadminbar .ab-label{display:inline-block;height:32px}#wpadminbar .ab-submenu .ab-item{color:#eee}#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#eee}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before{color:#2ea2cc}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before{position:absolute;font:400 17px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar .menupop .menupop>.ab-item{display:block;padding-left:2em}#wpadminbar .menupop .menupop>.ab-item:before{top:1px;left:4px;content:'\f139';color:inherit}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item{padding-right:2em;padding-left:1em}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before{top:5px;right:3px;content:'\f141'}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary{display:block;position:relative;left:auto;margin:0;-webkit-box-shadow:none;box-shadow:none}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#4b4b4b}#wpadminbar .quicklinks .menupop .ab-sub-secondary>li>a:hover,#wpadminbar .quicklinks .menupop .ab-sub-secondary>li .ab-item:focus a{color:#2ea2cc}#wpadminbar .quicklinks a span#ab-updates{background:#eee;color:#333;display:inline;padding:2px 5px;font-size:10px;font-weight:700;-webkit-border-radius:10px;border-radius:10px}#wpadminbar .quicklinks a:hover span#ab-updates{background:#fff;color:#000}#wpadminbar .ab-top-secondary{float:left}#wpadminbar ul li:last-child,#wpadminbar ul li:last-child .ab-item{-webkit-box-shadow:none;box-shadow:none}#wp-admin-bar-my-account>ul{min-width:198px}#wp-admin-bar-my-account>.ab-item:before{content:"\f110";top:2px;float:left;margin-right:6px;margin-left:0}#wp-admin-bar-my-account.with-avatar>.ab-item:before{display:none;content:none}#wp-admin-bar-my-account.with-avatar>ul{min-width:270px}#wpadminbar #wp-admin-bar-user-actions>li{margin-right:16px;margin-left:16px}#wpadminbar #wp-admin-bar-user-actions.ab-submenu{padding:6px 0 12px}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin-right:88px}#wpadminbar #wp-admin-bar-user-info{margin-top:6px;margin-bottom:15px;height:auto;background:0 0}#wp-admin-bar-user-info .avatar{position:absolute;right:-72px;top:4px;width:64px;height:64px}#wpadminbar #wp-admin-bar-user-info a{background:0 0;height:auto}#wpadminbar #wp-admin-bar-user-info span{background:0 0;padding:0;height:18px}#wpadminbar #wp-admin-bar-user-info .display-name,#wpadminbar #wp-admin-bar-user-info .username{display:block}#wpadminbar #wp-admin-bar-user-info .username{color:#999;font-size:11px}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{width:16px;height:16px;padding:0;border:1px solid #888;background:#eee;line-height:24px;vertical-align:middle;margin:-4px 6px 0 0;float:none;display:inline}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon{width:15px;height:20px;margin-left:0;padding:6px 0 5px}#wpadminbar #wp-admin-bar-wp-logo>.ab-item{padding:0 7px}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon:before{content:'\f120';top:2px}#wpadminbar .quicklinks li .blavatar{float:right;font:400 16px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#eee}#wpadminbar .quicklinks li a:hover .blavatar{color:#2ea2cc}#wpadminbar .quicklinks li .blavatar:before{content:'\f120';height:16px;width:16px;display:inline-block;margin:6px -2px 0 8px}#wpadminbar #wp-admin-bar-appearance{margin-top:-12px}#wpadminbar #wp-admin-bar-my-sites>.ab-item:before,#wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:'\f112';top:2px}#wpadminbar #wp-admin-bar-edit>.ab-item:before{content:'\f464';top:2px}#wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:"\f102"}#wpadminbar #wp-admin-bar-comments .ab-icon{margin-left:6px}#wpadminbar #wp-admin-bar-comments .ab-icon:before{content:'\f101';top:3px}#wpadminbar #wp-admin-bar-comments .count-0{opacity:.5}#wpadminbar #wp-admin-bar-new-content .ab-icon:before{content:'\f132';top:4px}#wpadminbar #wp-admin-bar-updates .ab-icon:before{content:'\f463';top:2px}#wpadminbar #wp-admin-bar-search .ab-item{padding:0;background:transparent}#wpadminbar #adminbarsearch{position:relative;height:32px;padding:0 2px}#wpadminbar #adminbarsearch:before{position:absolute;top:6px;right:5px;z-index:20;font:400 20px/1 dashicons!important;content:'\f179';speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{position:relative;z-index:30;font:13px/24px "Open Sans",sans-serif;height:24px;width:24px;padding:0 24px 0 3px;margin:0;color:#ccc;background-color:rgba(255,255,255,0);border:0;outline:0;cursor:pointer;-webkit-box-shadow:none;box-shadow:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition-duration:400ms;-webkit-transition-property:width,background;-webkit-transition-timing-function:ease;-moz-transition-duration:400ms;-moz-transition-property:width,background;-moz-transition-timing-function:ease;-o-transition-duration:400ms;-o-transition-property:width,background;-o-transition-timing-function:ease}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{z-index:10;color:#000;width:200px;background-color:rgba(255,255,255,.9);cursor:text;border:0}#wpadminbar.ie7>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{margin-top:3px;width:120px}#wpadminbar.ie8>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{margin-top:4px;background-color:#464646}#wpadminbar.ie8>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{background-color:#fff}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-button{display:none}.no-customize-support .hide-if-no-customize,.customize-support .hide-if-customize,.no-customize-support.wp-core-ui .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.customize-support.wp-core-ui .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize{display:none}#wpadminbar .screen-reader-text,#wpadminbar .screen-reader-text span{position:absolute;right:-1000em;top:-1000em;height:1px;width:1px;overflow:hidden}#wpadminbar .screen-reader-shortcut{position:absolute;top:-1000em}#wpadminbar .screen-reader-shortcut:focus{right:6px;top:7px;height:auto;width:auto;display:block;font-size:14px;font-weight:700;padding:15px 23px 14px;background:#f1f1f1;color:#21759b;z-index:100000;line-height:normal;text-decoration:none;-webkit-box-shadow:0 0 2px 2px rgba(0,0,0,.6);box-shadow:0 0 2px 2px rgba(0,0,0,.6)}* html #wpadminbar{overflow:hidden;position:absolute}* html #wpadminbar .quicklinks ul li a{float:right}* html #wpadminbar .menupop a span{background-image:none}.no-font-face #wpadminbar ul.ab-top-menu>li>a.ab-item{display:block;width:45px;text-align:center;overflow:hidden;margin:0 3px}.no-font-face #wpadminbar #wp-admin-bar-my-sites>.ab-item,.no-font-face #wpadminbar #wp-admin-bar-site-name>.ab-item,.no-font-face #wpadminbar #wp-admin-bar-edit>.ab-item{text-indent:0}.no-font-face #wpadminbar .ab-icon,.no-font-face #wpadminbar .ab-icon:before,.no-font-face #wpadminbar a.ab-item:before,.no-font-face #wpadminbar #wp-admin-bar-wp-logo>.ab-item{display:none!important}.no-font-face #wpadminbar ul.ab-top-menu>li>a>span.ab-label{display:inline}.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon{display:inline!important}.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon:before{content:"Menu";font:14px/45px sans-serif!important;display:inline-block!important;color:#fff}.no-font-face #wpadminbar #wp-admin-bar-site-name a.ab-item{color:#fff}@media screen and (max-width:782px){html #wpadminbar{right:0!important;z-index:500!important;height:46px;min-width:300px}#wpadminbar *{font:400 14px/32px "Open Sans",sans-serif}#wpadminbar .quicklinks>ul>li>a,#wpadminbar .quicklinks .ab-empty-item{padding:0;height:46px;line-height:46px;width:auto}#wpadminbar .ab-icon{font:40px/1 dashicons!important;margin:0;padding:0;width:52px;height:46px;text-align:center}#wpadminbar .ab-icon:before{text-align:center}#wpadminbar .ab-submenu{padding:0}#wpadminbar #wp-admin-bar-site-name a.ab-item,#wpadminbar #wp-admin-bar-my-sites a.ab-item,#wpadminbar #wp-admin-bar-my-account a.ab-item{text-overflow:clip}#wpadminbar .ab-label{display:none}#wpadminbar .menupop li:hover>.ab-sub-wrapper,#wpadminbar .menupop li.hover>.ab-sub-wrapper{margin-top:-46px}#wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop>.ab-item{padding-left:30px}#wpadminbar .menupop .menupop>.ab-item:before{top:10px;left:6px}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper .ab-item{font-size:16px;padding:6px 15px 12px}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper a:empty{display:none}#wpadminbar #wp-admin-bar-wp-logo>.ab-item{padding:0}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon{padding:0;width:52px;height:46px;text-align:center;vertical-align:top}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon:before{font:28px/1 dashicons!important;top:-3px}#wpadminbar .ab-icon,#wpadminbar .ab-item:before{padding:0}#wpadminbar #wp-admin-bar-my-sites>.ab-item,#wpadminbar #wp-admin-bar-site-name>.ab-item,#wpadminbar #wp-admin-bar-edit>.ab-item,#wpadminbar #wp-admin-bar-my-account>.ab-item{text-indent:100%;white-space:nowrap;overflow:hidden;width:52px;padding:0;color:#999;position:relative}#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon,#wpadminbar .ab-icon,#wpadminbar .ab-item:before{padding:0;margin-left:0}#wpadminbar #wp-admin-bar-edit>.ab-item:before,#wpadminbar #wp-admin-bar-my-sites>.ab-item:before,#wpadminbar #wp-admin-bar-site-name>.ab-item:before,#wpadminbar #wp-admin-bar-my-account>.ab-item:before{display:block;text-indent:0;font:400 32px/1 dashicons;speak:none;top:7px;width:52px;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar #wp-admin-bar-appearance{margin-top:0}#wpadminbar .quicklinks li .blavatar:before{display:none}#wpadminbar #wp-admin-bar-search{display:none}#wpadminbar #wp-admin-bar-new-content .ab-icon:before{top:0;line-height:53px;height:46px!important;text-align:center;width:52px;display:block}#wpadminbar #wp-admin-bar-updates{text-align:center}#wpadminbar #wp-admin-bar-updates .ab-icon:before{top:3px}#wpadminbar #wp-admin-bar-comments .ab-icon{margin:0}#wpadminbar #wp-admin-bar-comments .ab-icon:before{display:block;font-size:34px;height:46px;line-height:47px;top:0}#wpadminbar #wp-admin-bar-my-account>a{position:relative;white-space:nowrap;text-indent:150%;width:28px;padding:0 10px;overflow:hidden}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{position:absolute;top:13px;left:10px;width:26px;height:26px}#wpadminbar #wp-admin-bar-user-actions.ab-submenu{padding:0}#wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar{display:none}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin:0}#wpadminbar #wp-admin-bar-user-info .display-name{height:auto;font-size:16px;line-height:24px;color:#eee}#wpadminbar #wp-admin-bar-user-info a{padding-top:4px}#wpadminbar #wp-admin-bar-user-info .username{line-height:.8!important;margin-bottom:-2px}#wp-toolbar>ul>li{display:none}#wpadminbar li#wp-admin-bar-menu-toggle,#wpadminbar li#wp-admin-bar-wp-logo,#wpadminbar li#wp-admin-bar-my-sites,#wpadminbar li#wp-admin-bar-updates,#wpadminbar li#wp-admin-bar-site-name,#wpadminbar li#wp-admin-bar-new-content,#wpadminbar li#wp-admin-bar-edit,#wpadminbar li#wp-admin-bar-comments,#wpadminbar li#wp-admin-bar-new-content,#wpadminbar li#wp-admin-bar-my-account{display:block}#wpadminbar li:hover ul li,#wpadminbar li.hover ul li,#wpadminbar li:hover ul li:hover ul li{display:list-item}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{min-width:intrinsic;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}#wpadminbar ul#wp-admin-bar-root-default>li{margin-left:0}#wpadminbar .ab-top-menu,#wpadminbar .ab-top-secondary,#wpadminbar #wp-admin-bar-wp-logo,#wpadminbar #wp-admin-bar-my-sites,#wpadminbar #wp-admin-bar-site-name,#wpadminbar #wp-admin-bar-updates,#wpadminbar #wp-admin-bar-comments,#wpadminbar #wp-admin-bar-new-content,#wpadminbar #wp-admin-bar-edit,#wpadminbar #wp-admin-bar-my-account{position:static}#wpadminbar #wp-admin-bar-my-account{float:left}.network-admin #wpadminbar ul#wp-admin-bar-top-secondary>li#wp-admin-bar-my-account{margin-left:0}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before{top:10px;right:0}}@media screen and (max-width:600px){#wpadminbar{position:absolute}#wp-responsive-overlay{position:fixed;top:0;right:0;width:100%;height:100%;z-index:400}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{position:fixed;width:100%;right:0}#wpadminbar .menupop .menupop>.ab-item:before{display:none}#wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper{margin-right:0}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper{margin:0;width:100%;top:auto;right:auto;position:relative}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper .ab-item{font-size:16px;padding:6px 30px 19px 15px}#wpadminbar li:hover ul li ul li{display:list-item}#wpadminbar li#wp-admin-bar-wp-logo,#wpadminbar li#wp-admin-bar-updates{display:none}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper{position:static;-webkit-box-shadow:none;box-shadow:none}} \ No newline at end of file diff --git a/src/wp-includes/css/admin-bar.css b/src/wp-includes/css/admin-bar.css new file mode 100644 index 0000000..d42cc93 --- /dev/null +++ b/src/wp-includes/css/admin-bar.css @@ -0,0 +1,1110 @@ +#wpadminbar * { + height: auto; + width: auto; + margin: 0; + padding: 0; + position: static; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + font: normal 13px/32px "Open Sans", sans-serif; + border-radius: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; + -webkit-font-smoothing: subpixel-antialiased; /* Prevent Safari from switching to standard antialiasing on hover */ +} + +.rtl #wpadminbar * { + font-family: Tahoma, sans-serif; +} + +html:lang(he-il) .rtl #wpadminbar * { + font-family: Arial, sans-serif; +} + +#wpadminbar a.ab-item, +#wpadminbar > #wp-toolbar span.ab-label, +#wpadminbar > #wp-toolbar span.noticon { + color: #eee; +} + +#wpadminbar #wp-admin-bar-site-name a.ab-item, +#wpadminbar #wp-admin-bar-my-sites a.ab-item { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +#wpadminbar ul li:before, +#wpadminbar ul li:after { + content: normal; +} + +#wpadminbar a, +#wpadminbar a:hover, +#wpadminbar a img, +#wpadminbar a img:hover { + outline: none; + border: none; + text-decoration: none; + background: none; +} + +#wpadminbar a:focus, +#wpadminbar a:active, +#wpadminbar input[type="text"], +#wpadminbar input[type="password"], +#wpadminbar input[type="number"], +#wpadminbar input[type="search"], +#wpadminbar input[type="email"], +#wpadminbar input[type="url"], +#wpadminbar select, +#wpadminbar textarea, +#wpadminbar div { + outline: none; +} + +#wpadminbar { + direction: ltr; + color: #ccc; + font: normal 13px/32px "Open Sans", sans-serif; + height: 32px; + position: fixed; + top: 0; + left: 0; + width: 100%; + min-width: 600px; /* match the min-width of the body in wp-admin.css */ + z-index: 99999; + background: #222; +} + +#wpadminbar .ab-sub-wrapper, +#wpadminbar ul, +#wpadminbar ul li { + background: none; + clear: none; + list-style: none; + margin: 0; + padding: 0; + position: relative; + text-indent: 0; + z-index: 99999; +} + +#wpadminbar ul#wp-admin-bar-root-default>li { + margin-right: 0; +} + +/* Prevent a Chrome bug that inadvertantly activates + :hover states on an element that touches the extreme + top left corner of the viewport. See #18868 */ +#wpadminbar .quicklinks { + border-left: 1px solid transparent; +} + +#wpadminbar .quicklinks ul { + text-align: left; +} + +#wpadminbar li { + float: left; +} + +#wpadminbar .ab-empty-item { + outline: none; +} + +#wpadminbar .quicklinks .ab-top-secondary > li { + float: right; +} + +#wpadminbar .quicklinks a, +#wpadminbar .quicklinks .ab-empty-item, +#wpadminbar .shortlink-input { + height: 32px; + display: block; + padding: 0 10px; + margin: 0; +} + +#wpadminbar .quicklinks > ul > li > a { + padding: 0 8px 0 7px; +} + +#wpadminbar .menupop .ab-sub-wrapper, +#wpadminbar .shortlink-input { + margin: 0; + padding: 0; + -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.2); + box-shadow: 0 3px 5px rgba(0,0,0,0.2); + background: #333; + display: none; + position: absolute; + float: none; +} + +#wpadminbar.ie7 .menupop .ab-sub-wrapper, +#wpadminbar.ie7 .shortlink-input { + top: 32px; + left: 0; +} + +#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { + min-width: 100%; +} + +#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper { + right: 0; + left: auto; +} + +#wpadminbar .ab-submenu { + padding: 6px 0; +} + +#wpadminbar .selected .shortlink-input { + display: block; +} + +#wpadminbar .quicklinks .menupop ul li { + float: none; +} + +#wpadminbar .quicklinks .menupop ul li a strong { + font-weight: bold; +} + +#wpadminbar .quicklinks .menupop ul li .ab-item, +#wpadminbar .quicklinks .menupop ul li a strong, +#wpadminbar .quicklinks .menupop.hover ul li .ab-item, +#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item, +#wpadminbar .shortlink-input { + line-height: 26px; + height: 26px; + white-space: nowrap; + min-width: 140px; +} + +#wpadminbar .shortlink-input { + width: 200px; +} + +#wpadminbar.nojs li:hover > .ab-sub-wrapper, +#wpadminbar li.hover > .ab-sub-wrapper { + display: block; +} + +#wpadminbar .menupop li:hover > .ab-sub-wrapper, +#wpadminbar .menupop li.hover > .ab-sub-wrapper { + margin-left: 100%; + margin-top: -32px; +} + +#wpadminbar .ab-top-secondary .menupop li:hover > .ab-sub-wrapper, +#wpadminbar .ab-top-secondary .menupop li.hover > .ab-sub-wrapper { + margin-left: 0; + left: inherit; + right: 100%; +} + +#wpadminbar .ab-top-menu > li > .ab-item:focus, +#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, +#wpadminbar .ab-top-menu > li:hover > .ab-item, +#wpadminbar .ab-top-menu > li.hover > .ab-item { + background: #333; + color: #2ea2cc; +} + +#wpadminbar > #wp-toolbar li:hover span.ab-label, +#wpadminbar > #wp-toolbar li.hover span.ab-label, +#wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #2ea2cc; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon, +#wpadminbar .ab-icon, +#wpadminbar .ab-item:before { + position: relative; + float: left; + font: normal 20px/1 'dashicons'; + speak: none; + padding: 4px 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background-image: none !important; + margin-right: 6px; +} + +#wpadminbar .ab-icon:before, +#wpadminbar .ab-item:before, +#wpadminbar #adminbarsearch:before { + color: #999; +} + +#wpadminbar .ab-icon:before, +#wpadminbar .ab-item:before, +#wpadminbar #adminbarsearch:before { + position: relative; + -moz-transition: all .1s ease-in-out; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#wpadminbar .ab-label { + display: inline-block; + height: 32px; +} + +#wpadminbar .ab-submenu .ab-item { + color: #eee; +} + +#wpadminbar .quicklinks .menupop ul li a, +#wpadminbar .quicklinks .menupop ul li a strong, +#wpadminbar .quicklinks .menupop.hover ul li a, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a { + color: #eee; +} + +#wpadminbar .quicklinks .menupop ul li a:hover, +#wpadminbar .quicklinks .menupop ul li a:focus, +#wpadminbar .quicklinks .menupop ul li a:hover strong, +#wpadminbar .quicklinks .menupop ul li a:focus strong, +#wpadminbar .quicklinks .menupop.hover ul li a:hover, +#wpadminbar .quicklinks .menupop.hover ul li a:focus, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, +#wpadminbar li:hover .ab-icon:before, +#wpadminbar li:hover .ab-item:before, +#wpadminbar li a:focus .ab-icon:before, +#wpadminbar li .ab-item:focus:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before { + color: #2ea2cc; +} + +#wpadminbar .menupop .menupop > .ab-item:before, +#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { + position: absolute; + font: normal 17px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#wpadminbar .menupop .menupop > .ab-item { + display: block; + padding-right: 2em; +} + +#wpadminbar .menupop .menupop > .ab-item:before { + top: 1px; + right: 4px; + content: '\f139'; + color: inherit; +} + +#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item { + padding-left: 2em; + padding-right: 1em; +} + +#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { + top: 5px; + left: 3px; + content: '\f141'; +} + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary { + display: block; + position: relative; + right: auto; + margin: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #4b4b4b; +} + +#wpadminbar .quicklinks .menupop .ab-sub-secondary > li > a:hover, +#wpadminbar .quicklinks .menupop .ab-sub-secondary > li .ab-item:focus a { + color: #2ea2cc; +} + +#wpadminbar .quicklinks a span#ab-updates { + background: #eee; + color: #333; + display: inline; + padding: 2px 5px; + font-size: 10px; + font-weight: bold; + -webkit-border-radius: 10px; + border-radius: 10px; +} + +#wpadminbar .quicklinks a:hover span#ab-updates { + background: #fff; + color: #000; +} + +#wpadminbar .ab-top-secondary { + float: right; +} + +#wpadminbar ul li:last-child, +#wpadminbar ul li:last-child .ab-item { + -webkit-box-shadow: none; + box-shadow: none; +} + +/** + * My Account + */ +#wp-admin-bar-my-account > ul { + min-width: 198px; +} + +#wp-admin-bar-my-account > .ab-item:before { + content: "\f110"; + top: 2px; + float: right; + margin-left: 6px; + margin-right: 0; +} + +#wp-admin-bar-my-account.with-avatar > .ab-item:before { + display: none; + content: none; +} + +#wp-admin-bar-my-account.with-avatar > ul { + min-width: 270px; +} + +#wpadminbar #wp-admin-bar-user-actions > li { + margin-left: 16px; + margin-right: 16px; +} + +#wpadminbar #wp-admin-bar-user-actions.ab-submenu { + padding: 6px 0 12px; +} + +#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li { + margin-left: 88px; +} + +#wpadminbar #wp-admin-bar-user-info { + margin-top: 6px; + margin-bottom: 15px; + height: auto; + background: none; +} + +#wp-admin-bar-user-info .avatar { + position: absolute; + left: -72px; + top: 4px; + width: 64px; + height: 64px; +} + +#wpadminbar #wp-admin-bar-user-info a { + background: none; + height: auto; +} + +#wpadminbar #wp-admin-bar-user-info span { + background: none; + padding: 0; + height: 18px; +} + +#wpadminbar #wp-admin-bar-user-info .display-name, +#wpadminbar #wp-admin-bar-user-info .username { + display: block; +} + +#wpadminbar #wp-admin-bar-user-info .username { + color: #999; + font-size: 11px; +} + +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + width: 16px; + height: 16px; + padding: 0; + border: 1px solid #888; + background: #eee; + line-height: 24px; + vertical-align: middle; + margin: -4px 0 0 6px; + float: none; + display: inline; +} + +/** + * WP Logo + */ +#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon { + width: 15px; + height: 20px; + margin-right: 0; + padding: 6px 0 5px; +} + +#wpadminbar #wp-admin-bar-wp-logo > .ab-item { + padding: 0 7px; +} + +#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before { + content: '\f120'; + top: 2px; +} + +/* + * My Sites & Site Title + */ +#wpadminbar .quicklinks li .blavatar { + float: left; + font: normal 16px/1 'dashicons' !important; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #eee; +} + +#wpadminbar .quicklinks li a:hover .blavatar { + color: #2ea2cc; +} + +#wpadminbar .quicklinks li .blavatar:before { + content: '\f120'; + height: 16px; + width: 16px; + display: inline-block; + margin: 6px 8px 0 -2px; +} + +#wpadminbar #wp-admin-bar-appearance { + margin-top: -12px; +} + +#wpadminbar #wp-admin-bar-my-sites > .ab-item:before, +#wpadminbar #wp-admin-bar-site-name > .ab-item:before { + content: '\f112'; + top: 2px; +} + +#wpadminbar #wp-admin-bar-edit > .ab-item:before { + content: '\f464'; + top: 2px; +} + +#wpadminbar #wp-admin-bar-site-name > .ab-item:before { + content: "\f102"; +} + + + +/** + * Comments + */ +#wpadminbar #wp-admin-bar-comments .ab-icon { + margin-right: 6px; +} + +#wpadminbar #wp-admin-bar-comments .ab-icon:before { + content: '\f101'; + top: 3px; +} + +#wpadminbar #wp-admin-bar-comments .count-0 { + opacity: .5; +} + +/** + * New Content + */ +#wpadminbar #wp-admin-bar-new-content .ab-icon:before { + content: '\f132'; + top: 4px; +} + +/** + * Updates + */ +#wpadminbar #wp-admin-bar-updates .ab-icon:before { + content: '\f463'; + top: 2px; +} + +/** + * Search + */ +#wpadminbar #wp-admin-bar-search .ab-item { + padding: 0; + background: transparent; +} + +#wpadminbar #adminbarsearch { + position: relative; + height: 32px; + padding: 0 2px; +} + +#wpadminbar #adminbarsearch:before { + position: absolute; + top: 6px; + left: 5px; + z-index: 20; + font: normal 20px/1 'dashicons' !important; + content: '\f179'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { + position: relative; + z-index: 30; + font: 13px/24px "Open Sans", sans-serif; + height: 24px; + width: 24px; + padding: 0 3px 0 24px; + margin: 0; + color: #ccc; + background-color: rgba( 255, 255, 255, 0 ); + border: none; + outline: none; + cursor: pointer; + + -webkit-box-shadow: none; + box-shadow: none; + + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + + -webkit-transition-duration: 400ms; + -webkit-transition-property: width, background; + -webkit-transition-timing-function: ease; + -moz-transition-duration: 400ms; + -moz-transition-property: width, background; + -moz-transition-timing-function: ease; + -o-transition-duration: 400ms; + -o-transition-property: width, background; + -o-transition-timing-function: ease; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + z-index: 10; + color: #000; + width: 200px; + background-color: rgba( 255, 255, 255, 0.9 ); + cursor: text; + border: 0; +} + +#wpadminbar.ie7 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { + margin-top: 3px; + width: 120px; +} + +#wpadminbar.ie8 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { + margin-top: 4px; + background-color: #464646; +} + +#wpadminbar.ie8 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + background-color: #fff; +} + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #999; +} +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #999; +} +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #999; +} +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #999; +} + +#wpadminbar #adminbarsearch .adminbar-button { + display: none; +} + +/** + * Customize support classes + */ +.no-customize-support .hide-if-no-customize, +.customize-support .hide-if-customize, +.no-customize-support.wp-core-ui .hide-if-no-customize, +.no-customize-support .wp-core-ui .hide-if-no-customize, +.customize-support.wp-core-ui .hide-if-customize, +.customize-support .wp-core-ui .hide-if-customize { + display: none; +} + +/* Skip link */ +#wpadminbar .screen-reader-text, +#wpadminbar .screen-reader-text span { + position: absolute; + left: -1000em; + top: -1000em; + height: 1px; + width: 1px; + overflow: hidden; +} + +#wpadminbar .screen-reader-shortcut { + position: absolute; + top: -1000em; +} + +#wpadminbar .screen-reader-shortcut:focus { + left: 6px; + top: 7px; + height: auto; + width: auto; + display: block; + font-size: 14px; + font-weight: bold; + padding: 15px 23px 14px; + background: #f1f1f1; + color: #21759b; + z-index: 100000; + line-height: normal; + text-decoration: none; + -webkit-box-shadow: 0 0 2px 2px rgba(0,0,0,.6); + box-shadow: 0 0 2px 2px rgba(0,0,0,.6); +} + +/** + * IE 6-targeted rules + */ +* html #wpadminbar { + overflow: hidden; + position: absolute; +} + +* html #wpadminbar .quicklinks ul li a { + float: left; +} + +* html #wpadminbar .menupop a span { + background-image: none; +} + +/* No @font-face support */ +.no-font-face #wpadminbar ul.ab-top-menu > li > a.ab-item { + display: block; + width: 45px; + text-align: center; + overflow: hidden; + margin: 0 3px; +} + +.no-font-face #wpadminbar #wp-admin-bar-my-sites > .ab-item, +.no-font-face #wpadminbar #wp-admin-bar-site-name > .ab-item, +.no-font-face #wpadminbar #wp-admin-bar-edit > .ab-item { + text-indent: 0; +} + +.no-font-face #wpadminbar .ab-icon, +.no-font-face #wpadminbar .ab-icon:before, +.no-font-face #wpadminbar a.ab-item:before, +.no-font-face #wpadminbar #wp-admin-bar-wp-logo > .ab-item { + display: none !important; +} + +.no-font-face #wpadminbar ul.ab-top-menu > li > a > span.ab-label { + display: inline; +} + +.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon { + display: inline !important; +} + +.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon:before { + content: "Menu"; + font: 14px/45px sans-serif !important; + display: inline-block !important; + color: #fff; +} + +.no-font-face #wpadminbar #wp-admin-bar-site-name a.ab-item { + color: #fff; +} +/* End no @font-face */ + +@media screen and ( max-width: 782px ) { + /* Toolbar Touchification*/ + html #wpadminbar { + left: 0 !important; + z-index: 500 !important; + height: 46px; + min-width: 300px; + + /* These rules break dropdown tappability on Chrome/Android. + -webkit-transform: translate3d(0, 0, 0); + -webkit-backface-visibility: hidden; + -webkit-transition: 0; + transform: translate3d(0, 0, 0); + backface-visibility: hidden; + transition: 0; + */ + } + + #wpadminbar * { + font: normal 14px/32px "Open Sans", sans-serif; + } + + #wpadminbar .quicklinks > ul > li > a, + #wpadminbar .quicklinks .ab-empty-item { + padding: 0; + height: 46px; + line-height: 46px; + width: auto; + } + + #wpadminbar .ab-icon { + font: 40px/1 dashicons !important; + margin: 0; + padding: 0; + width: 52px; + height: 46px; + text-align: center; + } + + #wpadminbar .ab-icon:before { + text-align: center; + } + + #wpadminbar .ab-submenu { + padding: 0; + } + + #wpadminbar #wp-admin-bar-site-name a.ab-item, + #wpadminbar #wp-admin-bar-my-sites a.ab-item, + #wpadminbar #wp-admin-bar-my-account a.ab-item { + text-overflow: clip; + } + + #wpadminbar .ab-label { + display: none; + } + + #wpadminbar .menupop li:hover > .ab-sub-wrapper, + #wpadminbar .menupop li.hover > .ab-sub-wrapper { + margin-top: -46px; + } + + #wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop > .ab-item { + padding-right: 30px; + } + + #wpadminbar .menupop .menupop > .ab-item:before { + top: 10px; + right: 6px; + } + + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper .ab-item { + font-size: 16px; + padding: 6px 15px 12px; + } + + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper a:empty { + display: none; + } + + /* WP logo */ + #wpadminbar #wp-admin-bar-wp-logo > .ab-item { + padding: 0; + } + + #wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon { + padding: 0; + width: 52px; + height: 46px; + text-align: center; + vertical-align: top; + } + + #wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before { + font: 28px/1 'dashicons' !important; + top: -3px; + } + + #wpadminbar .ab-icon, + #wpadminbar .ab-item:before { + padding: 0; + } + + /* My Sites and "Site Title" menu */ + #wpadminbar #wp-admin-bar-my-sites > .ab-item, + #wpadminbar #wp-admin-bar-site-name > .ab-item, + #wpadminbar #wp-admin-bar-edit > .ab-item, + #wpadminbar #wp-admin-bar-my-account > .ab-item { + text-indent: 100%; + white-space: nowrap; + overflow: hidden; + width: 52px; + padding: 0; + color: #999; + position: relative; + } + + #wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon, + #wpadminbar .ab-icon, + #wpadminbar .ab-item:before { + padding: 0; + margin-right: 0; + } + + #wpadminbar #wp-admin-bar-edit > .ab-item:before, + #wpadminbar #wp-admin-bar-my-sites > .ab-item:before, + #wpadminbar #wp-admin-bar-site-name > .ab-item:before, + #wpadminbar #wp-admin-bar-my-account > .ab-item:before { + display: block; + text-indent: 0; + font: normal 32px/1 'dashicons'; + speak: none; + top: 7px; + width: 52px; + text-align: center; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + #wpadminbar #wp-admin-bar-appearance { + margin-top: 0; + } + + #wpadminbar .quicklinks li .blavatar:before { + display: none; + } + + /* Search */ + #wpadminbar #wp-admin-bar-search { + display: none; + } + + /* New Content */ + #wpadminbar #wp-admin-bar-new-content .ab-icon:before { + top: 0; + line-height: 53px; + height: 46px !important; + text-align: center; + width: 52px; + display: block; + } + + /* Updates */ + #wpadminbar #wp-admin-bar-updates { + text-align: center; + } + + #wpadminbar #wp-admin-bar-updates .ab-icon:before { + top: 3px; + } + + /* Comments */ + #wpadminbar #wp-admin-bar-comments .ab-icon { + margin: 0; + } + + #wpadminbar #wp-admin-bar-comments .ab-icon:before { + display: block; + font-size: 34px; + height: 46px; + line-height: 47px; + top: 0; + } + + /* My Account */ + #wpadminbar #wp-admin-bar-my-account > a { + position: relative; + white-space: nowrap; + text-indent: 150%; /* More than 100% indention is needed since this element has padding */ + width: 28px; + padding: 0 10px; + overflow: hidden; /* Prevent link text from forcing horizontal scrolling on mobile */ + } + + #wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + position: absolute; + top: 13px; + right: 10px; + width: 26px; + height: 26px; + } + + #wpadminbar #wp-admin-bar-user-actions.ab-submenu { + padding: 0; + } + + #wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar { + display: none; + } + + #wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li { + margin: 0; + } + + #wpadminbar #wp-admin-bar-user-info .display-name { + height: auto; + font-size: 16px; + line-height: 24px; + color: #eee; + } + + #wpadminbar #wp-admin-bar-user-info a { + padding-top: 4px; + } + + #wpadminbar #wp-admin-bar-user-info .username { + line-height: 0.8 !important; + margin-bottom: -2px; + } + + /* Show only default top level items */ + #wp-toolbar > ul > li { + display: none; + } + + #wpadminbar li#wp-admin-bar-menu-toggle, + #wpadminbar li#wp-admin-bar-wp-logo, + #wpadminbar li#wp-admin-bar-my-sites, + #wpadminbar li#wp-admin-bar-updates, + #wpadminbar li#wp-admin-bar-site-name, + #wpadminbar li#wp-admin-bar-new-content, + #wpadminbar li#wp-admin-bar-edit, + #wpadminbar li#wp-admin-bar-comments, + #wpadminbar li#wp-admin-bar-new-content, + #wpadminbar li#wp-admin-bar-my-account { + display: block; + } + + /* Allow dropdown list items to appear normally */ + #wpadminbar li:hover ul li, + #wpadminbar li.hover ul li, + #wpadminbar li:hover ul li:hover ul li { + display: list-item; + } + + /* Override default min-width so dropdown lists aren't stretched + to 100% viewport width at responsive sizes. */ + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { + min-width: intrinsic; + min-width: -webkit-fit-content; + min-width: -moz-fit-content; + min-width: fit-content; + } + + #wpadminbar ul#wp-admin-bar-root-default > li { + margin-right: 0; + } + + /* Experimental fix for touch toolbar dropdown positioning */ + #wpadminbar .ab-top-menu, + #wpadminbar .ab-top-secondary, + #wpadminbar #wp-admin-bar-wp-logo, + #wpadminbar #wp-admin-bar-my-sites, + #wpadminbar #wp-admin-bar-site-name, + #wpadminbar #wp-admin-bar-updates, + #wpadminbar #wp-admin-bar-comments, + #wpadminbar #wp-admin-bar-new-content, + #wpadminbar #wp-admin-bar-edit, + #wpadminbar #wp-admin-bar-my-account { + position: static; + } + + #wpadminbar #wp-admin-bar-my-account { + float: right; + } + + .network-admin #wpadminbar ul#wp-admin-bar-top-secondary > li#wp-admin-bar-my-account { + margin-right: 0; + } + + /* Realign arrows on taller responsive submenus */ + + #wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { + top: 10px; + left: 0; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + #wpadminbar { + position: absolute; + } + + #wp-responsive-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 400; + } + + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { + position: fixed; + width: 100%; + left: 0; + } + + #wpadminbar .menupop .menupop > .ab-item:before { + display: none; + } + + #wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper { + margin-left: 0; + } + + #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper { + margin: 0; + width: 100%; + top: auto; + left: auto; + position: relative; + } + + #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper .ab-item { + font-size: 16px; + padding: 6px 15px 19px 30px; + } + + #wpadminbar li:hover ul li ul li { + display: list-item; + } + + #wpadminbar li#wp-admin-bar-wp-logo, + #wpadminbar li#wp-admin-bar-updates { + display: none; + } + + /* Make submenus full-width at this size */ + + #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper { + position: static; + -webkit-box-shadow: none; + box-shadow: none; + } +} diff --git a/src/wp-includes/css/admin-bar.min.css b/src/wp-includes/css/admin-bar.min.css new file mode 100644 index 0000000..5696685 --- /dev/null +++ b/src/wp-includes/css/admin-bar.min.css @@ -0,0 +1 @@ +#wpadminbar *{height:auto;width:auto;margin:0;padding:0;position:static;text-shadow:none;text-transform:none;letter-spacing:normal;font:400 13px/32px "Open Sans",sans-serif;border-radius:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;-webkit-font-smoothing:subpixel-antialiased}.rtl #wpadminbar *{font-family:Tahoma,sans-serif}html:lang(he-il) .rtl #wpadminbar *{font-family:Arial,sans-serif}#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#eee}#wpadminbar #wp-admin-bar-site-name a.ab-item,#wpadminbar #wp-admin-bar-my-sites a.ab-item{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#wpadminbar ul li:before,#wpadminbar ul li:after{content:normal}#wpadminbar a,#wpadminbar a:hover,#wpadminbar a img,#wpadminbar a img:hover{outline:0;border:0;text-decoration:none;background:0 0}#wpadminbar a:focus,#wpadminbar a:active,#wpadminbar input[type=text],#wpadminbar input[type=password],#wpadminbar input[type=number],#wpadminbar input[type=search],#wpadminbar input[type=email],#wpadminbar input[type=url],#wpadminbar select,#wpadminbar textarea,#wpadminbar div{outline:0}#wpadminbar{direction:ltr;color:#ccc;font:400 13px/32px "Open Sans",sans-serif;height:32px;position:fixed;top:0;left:0;width:100%;min-width:600px;z-index:99999;background:#222}#wpadminbar .ab-sub-wrapper,#wpadminbar ul,#wpadminbar ul li{background:0 0;clear:none;list-style:none;margin:0;padding:0;position:relative;text-indent:0;z-index:99999}#wpadminbar ul#wp-admin-bar-root-default>li{margin-right:0}#wpadminbar .quicklinks{border-left:1px solid transparent}#wpadminbar .quicklinks ul{text-align:left}#wpadminbar li{float:left}#wpadminbar .ab-empty-item{outline:0}#wpadminbar .quicklinks .ab-top-secondary>li{float:right}#wpadminbar .quicklinks a,#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .shortlink-input{height:32px;display:block;padding:0 10px;margin:0}#wpadminbar .quicklinks>ul>li>a{padding:0 8px 0 7px}#wpadminbar .menupop .ab-sub-wrapper,#wpadminbar .shortlink-input{margin:0;padding:0;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2);background:#333;display:none;position:absolute;float:none}#wpadminbar.ie7 .menupop .ab-sub-wrapper,#wpadminbar.ie7 .shortlink-input{top:32px;left:0}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{min-width:100%}#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper{right:0;left:auto}#wpadminbar .ab-submenu{padding:6px 0}#wpadminbar .selected .shortlink-input{display:block}#wpadminbar .quicklinks .menupop ul li{float:none}#wpadminbar .quicklinks .menupop ul li a strong{font-weight:700}#wpadminbar .quicklinks .menupop ul li .ab-item,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li .ab-item,#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item,#wpadminbar .shortlink-input{line-height:26px;height:26px;white-space:nowrap;min-width:140px}#wpadminbar .shortlink-input{width:200px}#wpadminbar.nojs li:hover>.ab-sub-wrapper,#wpadminbar li.hover>.ab-sub-wrapper{display:block}#wpadminbar .menupop li:hover>.ab-sub-wrapper,#wpadminbar .menupop li.hover>.ab-sub-wrapper{margin-left:100%;margin-top:-32px}#wpadminbar .ab-top-secondary .menupop li:hover>.ab-sub-wrapper,#wpadminbar .ab-top-secondary .menupop li.hover>.ab-sub-wrapper{margin-left:0;left:inherit;right:100%}#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item{background:#333;color:#2ea2cc}#wpadminbar>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar a:focus span.ab-label{color:#2ea2cc}#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon,#wpadminbar .ab-icon,#wpadminbar .ab-item:before{position:relative;float:left;font:400 20px/1 dashicons;speak:none;padding:4px 0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:none!important;margin-right:6px}#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar #adminbarsearch:before{color:#999}#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar #adminbarsearch:before{position:relative;-moz-transition:all .1s ease-in-out;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#wpadminbar .ab-label{display:inline-block;height:32px}#wpadminbar .ab-submenu .ab-item{color:#eee}#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#eee}#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before{color:#2ea2cc}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before{position:absolute;font:400 17px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar .menupop .menupop>.ab-item{display:block;padding-right:2em}#wpadminbar .menupop .menupop>.ab-item:before{top:1px;right:4px;content:'\f139';color:inherit}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item{padding-left:2em;padding-right:1em}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before{top:5px;left:3px;content:'\f141'}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary{display:block;position:relative;right:auto;margin:0;-webkit-box-shadow:none;box-shadow:none}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#4b4b4b}#wpadminbar .quicklinks .menupop .ab-sub-secondary>li>a:hover,#wpadminbar .quicklinks .menupop .ab-sub-secondary>li .ab-item:focus a{color:#2ea2cc}#wpadminbar .quicklinks a span#ab-updates{background:#eee;color:#333;display:inline;padding:2px 5px;font-size:10px;font-weight:700;-webkit-border-radius:10px;border-radius:10px}#wpadminbar .quicklinks a:hover span#ab-updates{background:#fff;color:#000}#wpadminbar .ab-top-secondary{float:right}#wpadminbar ul li:last-child,#wpadminbar ul li:last-child .ab-item{-webkit-box-shadow:none;box-shadow:none}#wp-admin-bar-my-account>ul{min-width:198px}#wp-admin-bar-my-account>.ab-item:before{content:"\f110";top:2px;float:right;margin-left:6px;margin-right:0}#wp-admin-bar-my-account.with-avatar>.ab-item:before{display:none;content:none}#wp-admin-bar-my-account.with-avatar>ul{min-width:270px}#wpadminbar #wp-admin-bar-user-actions>li{margin-left:16px;margin-right:16px}#wpadminbar #wp-admin-bar-user-actions.ab-submenu{padding:6px 0 12px}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin-left:88px}#wpadminbar #wp-admin-bar-user-info{margin-top:6px;margin-bottom:15px;height:auto;background:0 0}#wp-admin-bar-user-info .avatar{position:absolute;left:-72px;top:4px;width:64px;height:64px}#wpadminbar #wp-admin-bar-user-info a{background:0 0;height:auto}#wpadminbar #wp-admin-bar-user-info span{background:0 0;padding:0;height:18px}#wpadminbar #wp-admin-bar-user-info .display-name,#wpadminbar #wp-admin-bar-user-info .username{display:block}#wpadminbar #wp-admin-bar-user-info .username{color:#999;font-size:11px}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{width:16px;height:16px;padding:0;border:1px solid #888;background:#eee;line-height:24px;vertical-align:middle;margin:-4px 0 0 6px;float:none;display:inline}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon{width:15px;height:20px;margin-right:0;padding:6px 0 5px}#wpadminbar #wp-admin-bar-wp-logo>.ab-item{padding:0 7px}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon:before{content:'\f120';top:2px}#wpadminbar .quicklinks li .blavatar{float:left;font:400 16px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#eee}#wpadminbar .quicklinks li a:hover .blavatar{color:#2ea2cc}#wpadminbar .quicklinks li .blavatar:before{content:'\f120';height:16px;width:16px;display:inline-block;margin:6px 8px 0 -2px}#wpadminbar #wp-admin-bar-appearance{margin-top:-12px}#wpadminbar #wp-admin-bar-my-sites>.ab-item:before,#wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:'\f112';top:2px}#wpadminbar #wp-admin-bar-edit>.ab-item:before{content:'\f464';top:2px}#wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:"\f102"}#wpadminbar #wp-admin-bar-comments .ab-icon{margin-right:6px}#wpadminbar #wp-admin-bar-comments .ab-icon:before{content:'\f101';top:3px}#wpadminbar #wp-admin-bar-comments .count-0{opacity:.5}#wpadminbar #wp-admin-bar-new-content .ab-icon:before{content:'\f132';top:4px}#wpadminbar #wp-admin-bar-updates .ab-icon:before{content:'\f463';top:2px}#wpadminbar #wp-admin-bar-search .ab-item{padding:0;background:transparent}#wpadminbar #adminbarsearch{position:relative;height:32px;padding:0 2px}#wpadminbar #adminbarsearch:before{position:absolute;top:6px;left:5px;z-index:20;font:400 20px/1 dashicons!important;content:'\f179';speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{position:relative;z-index:30;font:13px/24px "Open Sans",sans-serif;height:24px;width:24px;padding:0 3px 0 24px;margin:0;color:#ccc;background-color:rgba(255,255,255,0);border:0;outline:0;cursor:pointer;-webkit-box-shadow:none;box-shadow:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition-duration:400ms;-webkit-transition-property:width,background;-webkit-transition-timing-function:ease;-moz-transition-duration:400ms;-moz-transition-property:width,background;-moz-transition-timing-function:ease;-o-transition-duration:400ms;-o-transition-property:width,background;-o-transition-timing-function:ease}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{z-index:10;color:#000;width:200px;background-color:rgba(255,255,255,.9);cursor:text;border:0}#wpadminbar.ie7>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{margin-top:3px;width:120px}#wpadminbar.ie8>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{margin-top:4px;background-color:#464646}#wpadminbar.ie8>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{background-color:#fff}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-button{display:none}.no-customize-support .hide-if-no-customize,.customize-support .hide-if-customize,.no-customize-support.wp-core-ui .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.customize-support.wp-core-ui .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize{display:none}#wpadminbar .screen-reader-text,#wpadminbar .screen-reader-text span{position:absolute;left:-1000em;top:-1000em;height:1px;width:1px;overflow:hidden}#wpadminbar .screen-reader-shortcut{position:absolute;top:-1000em}#wpadminbar .screen-reader-shortcut:focus{left:6px;top:7px;height:auto;width:auto;display:block;font-size:14px;font-weight:700;padding:15px 23px 14px;background:#f1f1f1;color:#21759b;z-index:100000;line-height:normal;text-decoration:none;-webkit-box-shadow:0 0 2px 2px rgba(0,0,0,.6);box-shadow:0 0 2px 2px rgba(0,0,0,.6)}* html #wpadminbar{overflow:hidden;position:absolute}* html #wpadminbar .quicklinks ul li a{float:left}* html #wpadminbar .menupop a span{background-image:none}.no-font-face #wpadminbar ul.ab-top-menu>li>a.ab-item{display:block;width:45px;text-align:center;overflow:hidden;margin:0 3px}.no-font-face #wpadminbar #wp-admin-bar-my-sites>.ab-item,.no-font-face #wpadminbar #wp-admin-bar-site-name>.ab-item,.no-font-face #wpadminbar #wp-admin-bar-edit>.ab-item{text-indent:0}.no-font-face #wpadminbar .ab-icon,.no-font-face #wpadminbar .ab-icon:before,.no-font-face #wpadminbar a.ab-item:before,.no-font-face #wpadminbar #wp-admin-bar-wp-logo>.ab-item{display:none!important}.no-font-face #wpadminbar ul.ab-top-menu>li>a>span.ab-label{display:inline}.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon{display:inline!important}.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon:before{content:"Menu";font:14px/45px sans-serif!important;display:inline-block!important;color:#fff}.no-font-face #wpadminbar #wp-admin-bar-site-name a.ab-item{color:#fff}@media screen and (max-width:782px){html #wpadminbar{left:0!important;z-index:500!important;height:46px;min-width:300px}#wpadminbar *{font:400 14px/32px "Open Sans",sans-serif}#wpadminbar .quicklinks>ul>li>a,#wpadminbar .quicklinks .ab-empty-item{padding:0;height:46px;line-height:46px;width:auto}#wpadminbar .ab-icon{font:40px/1 dashicons!important;margin:0;padding:0;width:52px;height:46px;text-align:center}#wpadminbar .ab-icon:before{text-align:center}#wpadminbar .ab-submenu{padding:0}#wpadminbar #wp-admin-bar-site-name a.ab-item,#wpadminbar #wp-admin-bar-my-sites a.ab-item,#wpadminbar #wp-admin-bar-my-account a.ab-item{text-overflow:clip}#wpadminbar .ab-label{display:none}#wpadminbar .menupop li:hover>.ab-sub-wrapper,#wpadminbar .menupop li.hover>.ab-sub-wrapper{margin-top:-46px}#wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop>.ab-item{padding-right:30px}#wpadminbar .menupop .menupop>.ab-item:before{top:10px;right:6px}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper .ab-item{font-size:16px;padding:6px 15px 12px}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper a:empty{display:none}#wpadminbar #wp-admin-bar-wp-logo>.ab-item{padding:0}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon{padding:0;width:52px;height:46px;text-align:center;vertical-align:top}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon:before{font:28px/1 dashicons!important;top:-3px}#wpadminbar .ab-icon,#wpadminbar .ab-item:before{padding:0}#wpadminbar #wp-admin-bar-my-sites>.ab-item,#wpadminbar #wp-admin-bar-site-name>.ab-item,#wpadminbar #wp-admin-bar-edit>.ab-item,#wpadminbar #wp-admin-bar-my-account>.ab-item{text-indent:100%;white-space:nowrap;overflow:hidden;width:52px;padding:0;color:#999;position:relative}#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon,#wpadminbar .ab-icon,#wpadminbar .ab-item:before{padding:0;margin-right:0}#wpadminbar #wp-admin-bar-edit>.ab-item:before,#wpadminbar #wp-admin-bar-my-sites>.ab-item:before,#wpadminbar #wp-admin-bar-site-name>.ab-item:before,#wpadminbar #wp-admin-bar-my-account>.ab-item:before{display:block;text-indent:0;font:400 32px/1 dashicons;speak:none;top:7px;width:52px;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar #wp-admin-bar-appearance{margin-top:0}#wpadminbar .quicklinks li .blavatar:before{display:none}#wpadminbar #wp-admin-bar-search{display:none}#wpadminbar #wp-admin-bar-new-content .ab-icon:before{top:0;line-height:53px;height:46px!important;text-align:center;width:52px;display:block}#wpadminbar #wp-admin-bar-updates{text-align:center}#wpadminbar #wp-admin-bar-updates .ab-icon:before{top:3px}#wpadminbar #wp-admin-bar-comments .ab-icon{margin:0}#wpadminbar #wp-admin-bar-comments .ab-icon:before{display:block;font-size:34px;height:46px;line-height:47px;top:0}#wpadminbar #wp-admin-bar-my-account>a{position:relative;white-space:nowrap;text-indent:150%;width:28px;padding:0 10px;overflow:hidden}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{position:absolute;top:13px;right:10px;width:26px;height:26px}#wpadminbar #wp-admin-bar-user-actions.ab-submenu{padding:0}#wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar{display:none}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin:0}#wpadminbar #wp-admin-bar-user-info .display-name{height:auto;font-size:16px;line-height:24px;color:#eee}#wpadminbar #wp-admin-bar-user-info a{padding-top:4px}#wpadminbar #wp-admin-bar-user-info .username{line-height:.8!important;margin-bottom:-2px}#wp-toolbar>ul>li{display:none}#wpadminbar li#wp-admin-bar-menu-toggle,#wpadminbar li#wp-admin-bar-wp-logo,#wpadminbar li#wp-admin-bar-my-sites,#wpadminbar li#wp-admin-bar-updates,#wpadminbar li#wp-admin-bar-site-name,#wpadminbar li#wp-admin-bar-new-content,#wpadminbar li#wp-admin-bar-edit,#wpadminbar li#wp-admin-bar-comments,#wpadminbar li#wp-admin-bar-new-content,#wpadminbar li#wp-admin-bar-my-account{display:block}#wpadminbar li:hover ul li,#wpadminbar li.hover ul li,#wpadminbar li:hover ul li:hover ul li{display:list-item}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{min-width:intrinsic;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}#wpadminbar ul#wp-admin-bar-root-default>li{margin-right:0}#wpadminbar .ab-top-menu,#wpadminbar .ab-top-secondary,#wpadminbar #wp-admin-bar-wp-logo,#wpadminbar #wp-admin-bar-my-sites,#wpadminbar #wp-admin-bar-site-name,#wpadminbar #wp-admin-bar-updates,#wpadminbar #wp-admin-bar-comments,#wpadminbar #wp-admin-bar-new-content,#wpadminbar #wp-admin-bar-edit,#wpadminbar #wp-admin-bar-my-account{position:static}#wpadminbar #wp-admin-bar-my-account{float:right}.network-admin #wpadminbar ul#wp-admin-bar-top-secondary>li#wp-admin-bar-my-account{margin-right:0}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before{top:10px;left:0}}@media screen and (max-width:600px){#wpadminbar{position:absolute}#wp-responsive-overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:400}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{position:fixed;width:100%;left:0}#wpadminbar .menupop .menupop>.ab-item:before{display:none}#wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper{margin-left:0}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper{margin:0;width:100%;top:auto;left:auto;position:relative}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper .ab-item{font-size:16px;padding:6px 15px 19px 30px}#wpadminbar li:hover ul li ul li{display:list-item}#wpadminbar li#wp-admin-bar-wp-logo,#wpadminbar li#wp-admin-bar-updates{display:none}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper{position:static;-webkit-box-shadow:none;box-shadow:none}} \ No newline at end of file diff --git a/src/wp-includes/css/buttons-rtl.css b/src/wp-includes/css/buttons-rtl.css new file mode 100644 index 0000000..4185349 --- /dev/null +++ b/src/wp-includes/css/buttons-rtl.css @@ -0,0 +1,325 @@ +/* ---------------------------------------------------------------------------- + + +WordPress-style Buttons +======================= +Create a button by adding the %60.button` class to an element. For backwards +compatibility, we support several other classes (such as `.button-secondary`), +but these will *not* work with the stackable classes described below. + +Button Styles +------------- +To display a primary button style, add the `.button-primary` class to a button. + +Button Sizes +------------ +Adjust a button's size by adding the `.button-large` or `.button-small` class. + +Button States +------------- +Lock the state of a button by adding the name of the pseudoclass as +an actual class (e.g. `.hover` for `:hover`). + + +TABLE OF CONTENTS: +------------------ + 1.0 - Button Layouts + 2.0 - Default Button Style + 3.0 - Primary Button Style + 4.0 - Button Groups + 5.0 - Responsive Button Styles + +---------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------------- + 1.0 - Button Layouts +---------------------------------------------------------------------------- */ + +.wp-core-ui .button, +.wp-core-ui .button-primary, +.wp-core-ui .button-secondary { + display: inline-block; + text-decoration: none; + font-size: 13px; + line-height: 26px; + height: 28px; + margin: 0; + padding: 0 10px 1px; + cursor: pointer; + border-width: 1px; + border-style: solid; + -webkit-border-radius: 3px; + -webkit-appearance: none; + border-radius: 3px; + white-space: nowrap; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* Remove the dotted border on :focus and the extra padding in Firefox */ +.wp-core-ui button::-moz-focus-inner, +.wp-core-ui input[type="reset"]::-moz-focus-inner, +.wp-core-ui input[type="button"]::-moz-focus-inner, +.wp-core-ui input[type="submit"]::-moz-focus-inner { + border-width: 1px 0; + border-style: solid none; + border-color: transparent; + padding: 0; +} + +.wp-core-ui .button.button-large, +.wp-core-ui .button-group.button-large .button { + height: 30px; + line-height: 28px; + padding: 0 12px 2px; +} + +.wp-core-ui .button.button-small, +.wp-core-ui .button-group.button-small .button { + height: 24px; + line-height: 22px; + padding: 0 8px 1px; + font-size: 11px; +} + +.wp-core-ui .button.button-hero, +.wp-core-ui .button-group.button-hero .button { + font-size: 14px; + height: 46px; + line-height: 44px; + padding: 0 36px; +} + +.wp-core-ui .button:active { + outline: none; +} + +.wp-core-ui .button.hidden { + display: none; +} + +/* Style Reset buttons as simple text links */ + +.wp-core-ui input[type="reset"], +.wp-core-ui input[type="reset"]:hover, +.wp-core-ui input[type="reset"]:active, +.wp-core-ui input[type="reset"]:focus { + background: none; + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + padding: 0 2px 1px; + width: auto; +} + +/* ---------------------------------------------------------------------------- + 2.0 - Default Button Style +---------------------------------------------------------------------------- */ + +.wp-core-ui .button, +.wp-core-ui .button-secondary { + color: #555; + border-color: #cccccc; + background: #f7f7f7; + + -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + vertical-align: top; +} + +.wp-core-ui p .button { + vertical-align: baseline; +} + +.wp-core-ui .button.hover, +.wp-core-ui .button:hover, +.wp-core-ui .button-secondary:hover, +.wp-core-ui .button.focus, +.wp-core-ui .button:focus, +.wp-core-ui .button-secondary:focus { + background: #fafafa; + border-color: #999; + color: #222; +} + +.wp-core-ui .button.focus, +.wp-core-ui .button:focus, +.wp-core-ui .button-secondary:focus { + -webkit-box-shadow: 1px 1px 1px rgba(0,0,0,.2); + box-shadow: 1px 1px 1px rgba(0,0,0,.2); +} + +.wp-core-ui .button.active, +.wp-core-ui .button.active:hover, +.wp-core-ui .button.active:focus, +.wp-core-ui .button:active, +.wp-core-ui .button-secondary:active { + background: #eee; + border-color: #999; + color: #333; + -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); +} + +.wp-core-ui .button[disabled], +.wp-core-ui .button:disabled, +.wp-core-ui .button-secondary[disabled], +.wp-core-ui .button-secondary:disabled, +.wp-core-ui .button-disabled { + color: #aaa !important; + border-color: #ddd !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: 0 1px 0 #fff !important; + cursor: default; +} + +/* ---------------------------------------------------------------------------- + 3.0 - Primary Button Style +---------------------------------------------------------------------------- */ + +.wp-core-ui .button-primary { + background: #2ea2cc; + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5), 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.5), 0 1px 0 rgba(0,0,0,.15); + color: #fff; + text-decoration: none; +} + +.wp-core-ui .button-primary.hover, +.wp-core-ui .button-primary:hover, +.wp-core-ui .button-primary.focus, +.wp-core-ui .button-primary:focus { + background: #1e8cbe; + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + color: #fff; +} + +.wp-core-ui .button-primary.focus, +.wp-core-ui .button-primary:focus { + border-color: #0e3950; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4); +} + +.wp-core-ui .button-primary.active, +.wp-core-ui .button-primary.active:hover, +.wp-core-ui .button-primary.active:focus, +.wp-core-ui .button-primary:active { + background: #1e8cbe; + border-color: #005684; + color: rgba(255,255,255,0.95); + -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + vertical-align: top; +} + +.wp-core-ui .button-primary[disabled], +.wp-core-ui .button-primary:disabled, +.wp-core-ui .button-primary-disabled { + color: #94cde7 !important; + background: #298cba !important; + border-color: #1b607f !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: 0 -1px 0 rgba(0,0,0,0.1) !important; + cursor: default; +} + +/* ---------------------------------------------------------------------------- + 4.0 - Button Groups +---------------------------------------------------------------------------- */ + +.wp-core-ui .button-group { + position: relative; + display: inline-block; + white-space: nowrap; + font-size: 0; + vertical-align: middle; +} + +.wp-core-ui .button-group > .button { + display: inline-block; + border-radius: 0; + margin-left: -1px; + z-index: 10; +} + +.wp-core-ui .button-group > .button-primary { + z-index: 100; +} + +.wp-core-ui .button-group > .button:hover { + z-index: 20; +} + +.wp-core-ui .button-group > .button:first-child { + border-radius: 0 3px 3px 0; +} + +.wp-core-ui .button-group > .button:last-child { + border-radius: 3px 0 0 3px; +} + +/* ---------------------------------------------------------------------------- + 5.0 - Responsive Button Styles +---------------------------------------------------------------------------- */ + +@media screen and ( max-width: 782px ) { + + .wp-core-ui .button, + .wp-core-ui .button.button-large, + .wp-core-ui .button.button-small, + input#publish, + input#save-post, + a.preview { + padding: 10px 14px; + line-height: 1; + font-size: 14px; + vertical-align: middle; + height: auto; + margin-bottom: 4px; + } + + #media-upload.wp-core-ui .button { + padding: 0 10px 1px; + height: 24px; + line-height: 22px; + font-size: 13px; + } + + /* Publish Metabox Options */ + .wp-core-ui .save-post-status.button { + position: relative; + margin: 0 10px 0 14px; /* 14px right margin to match all other buttons */ + } + + /* Reset responsive styles in Press This, Customizer */ + + .wp-core-ui.wp-customizer .button, + .press-this.wp-core-ui .button, + .press-this input#publish, + .press-this input#save-post, + .press-this a.preview { + padding: 0 10px 1px; + font-size: 13px; + line-height: 26px; + height: 28px; + margin: 0; + vertical-align: inherit; + } + + /* Reset responsive styles on Log in button on iframed login form */ + + .interim-login .button.button-large { + height: 30px; + line-height: 28px; + padding: 0 12px 2px; + } + +} diff --git a/src/wp-includes/css/buttons-rtl.min.css b/src/wp-includes/css/buttons-rtl.min.css new file mode 100644 index 0000000..984843f --- /dev/null +++ b/src/wp-includes/css/buttons-rtl.min.css @@ -0,0 +1 @@ +.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary{display:inline-block;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-border-radius:3px;-webkit-appearance:none;border-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wp-core-ui button::-moz-focus-inner,.wp-core-ui input[type=reset]::-moz-focus-inner,.wp-core-ui input[type=button]::-moz-focus-inner,.wp-core-ui input[type=submit]::-moz-focus-inner{border-width:1px 0;border-style:solid none;border-color:transparent;padding:0}.wp-core-ui .button.button-large,.wp-core-ui .button-group.button-large .button{height:30px;line-height:28px;padding:0 12px 2px}.wp-core-ui .button.button-small,.wp-core-ui .button-group.button-small .button{height:24px;line-height:22px;padding:0 8px 1px;font-size:11px}.wp-core-ui .button.button-hero,.wp-core-ui .button-group.button-hero .button{font-size:14px;height:46px;line-height:44px;padding:0 36px}.wp-core-ui .button:active{outline:0}.wp-core-ui .button.hidden{display:none}.wp-core-ui input[type=reset],.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:focus{background:0 0;border:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;padding:0 2px 1px;width:auto}.wp-core-ui .button,.wp-core-ui .button-secondary{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.wp-core-ui p .button{vertical-align:baseline}.wp-core-ui .button.hover,.wp-core-ui .button:hover,.wp-core-ui .button-secondary:hover,.wp-core-ui .button.focus,.wp-core-ui .button:focus,.wp-core-ui .button-secondary:focus{background:#fafafa;border-color:#999;color:#222}.wp-core-ui .button.focus,.wp-core-ui .button:focus,.wp-core-ui .button-secondary:focus{-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2)}.wp-core-ui .button.active,.wp-core-ui .button.active:hover,.wp-core-ui .button.active:focus,.wp-core-ui .button:active,.wp-core-ui .button-secondary:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button[disabled],.wp-core-ui .button:disabled,.wp-core-ui .button-secondary[disabled],.wp-core-ui .button-secondary:disabled,.wp-core-ui .button-disabled{color:#aaa!important;border-color:#ddd!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default}.wp-core-ui .button-primary{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none}.wp-core-ui .button-primary.hover,.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary.focus,.wp-core-ui .button-primary:focus{background:#1e8cbe;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff}.wp-core-ui .button-primary.focus,.wp-core-ui .button-primary:focus{border-color:#0e3950;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4);box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-primary.active,.wp-core-ui .button-primary.active:hover,.wp-core-ui .button-primary.active:focus,.wp-core-ui .button-primary:active{background:#1e8cbe;border-color:#005684;color:rgba(255,255,255,.95);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1);vertical-align:top}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary-disabled{color:#94cde7!important;background:#298cba!important;border-color:#1b607f!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.wp-core-ui .button-group{position:relative;display:inline-block;white-space:nowrap;font-size:0;vertical-align:middle}.wp-core-ui .button-group>.button{display:inline-block;border-radius:0;margin-left:-1px;z-index:10}.wp-core-ui .button-group>.button-primary{z-index:100}.wp-core-ui .button-group>.button:hover{z-index:20}.wp-core-ui .button-group>.button:first-child{border-radius:0 3px 3px 0}.wp-core-ui .button-group>.button:last-child{border-radius:3px 0 0 3px}@media screen and (max-width:782px){.wp-core-ui .button,.wp-core-ui .button.button-large,.wp-core-ui .button.button-small,input#publish,input#save-post,a.preview{padding:10px 14px;line-height:1;font-size:14px;vertical-align:middle;height:auto;margin-bottom:4px}#media-upload.wp-core-ui .button{padding:0 10px 1px;height:24px;line-height:22px;font-size:13px}.wp-core-ui .save-post-status.button{position:relative;margin:0 10px 0 14px}.wp-core-ui.wp-customizer .button,.press-this.wp-core-ui .button,.press-this input#publish,.press-this input#save-post,.press-this a.preview{padding:0 10px 1px;font-size:13px;line-height:26px;height:28px;margin:0;vertical-align:inherit}.interim-login .button.button-large{height:30px;line-height:28px;padding:0 12px 2px}} \ No newline at end of file diff --git a/src/wp-includes/css/buttons.css b/src/wp-includes/css/buttons.css new file mode 100644 index 0000000..feeca1e --- /dev/null +++ b/src/wp-includes/css/buttons.css @@ -0,0 +1,325 @@ +/* ---------------------------------------------------------------------------- + + +WordPress-style Buttons +======================= +Create a button by adding the `.button` class to an element. For backwards +compatibility, we support several other classes (such as `.button-secondary`), +but these will *not* work with the stackable classes described below. + +Button Styles +------------- +To display a primary button style, add the `.button-primary` class to a button. + +Button Sizes +------------ +Adjust a button's size by adding the `.button-large` or `.button-small` class. + +Button States +------------- +Lock the state of a button by adding the name of the pseudoclass as +an actual class (e.g. `.hover` for `:hover`). + + +TABLE OF CONTENTS: +------------------ + 1.0 - Button Layouts + 2.0 - Default Button Style + 3.0 - Primary Button Style + 4.0 - Button Groups + 5.0 - Responsive Button Styles + +---------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------------- + 1.0 - Button Layouts +---------------------------------------------------------------------------- */ + +.wp-core-ui .button, +.wp-core-ui .button-primary, +.wp-core-ui .button-secondary { + display: inline-block; + text-decoration: none; + font-size: 13px; + line-height: 26px; + height: 28px; + margin: 0; + padding: 0 10px 1px; + cursor: pointer; + border-width: 1px; + border-style: solid; + -webkit-border-radius: 3px; + -webkit-appearance: none; + border-radius: 3px; + white-space: nowrap; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* Remove the dotted border on :focus and the extra padding in Firefox */ +.wp-core-ui button::-moz-focus-inner, +.wp-core-ui input[type="reset"]::-moz-focus-inner, +.wp-core-ui input[type="button"]::-moz-focus-inner, +.wp-core-ui input[type="submit"]::-moz-focus-inner { + border-width: 1px 0; + border-style: solid none; + border-color: transparent; + padding: 0; +} + +.wp-core-ui .button.button-large, +.wp-core-ui .button-group.button-large .button { + height: 30px; + line-height: 28px; + padding: 0 12px 2px; +} + +.wp-core-ui .button.button-small, +.wp-core-ui .button-group.button-small .button { + height: 24px; + line-height: 22px; + padding: 0 8px 1px; + font-size: 11px; +} + +.wp-core-ui .button.button-hero, +.wp-core-ui .button-group.button-hero .button { + font-size: 14px; + height: 46px; + line-height: 44px; + padding: 0 36px; +} + +.wp-core-ui .button:active { + outline: none; +} + +.wp-core-ui .button.hidden { + display: none; +} + +/* Style Reset buttons as simple text links */ + +.wp-core-ui input[type="reset"], +.wp-core-ui input[type="reset"]:hover, +.wp-core-ui input[type="reset"]:active, +.wp-core-ui input[type="reset"]:focus { + background: none; + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + padding: 0 2px 1px; + width: auto; +} + +/* ---------------------------------------------------------------------------- + 2.0 - Default Button Style +---------------------------------------------------------------------------- */ + +.wp-core-ui .button, +.wp-core-ui .button-secondary { + color: #555; + border-color: #cccccc; + background: #f7f7f7; + + -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + vertical-align: top; +} + +.wp-core-ui p .button { + vertical-align: baseline; +} + +.wp-core-ui .button.hover, +.wp-core-ui .button:hover, +.wp-core-ui .button-secondary:hover, +.wp-core-ui .button.focus, +.wp-core-ui .button:focus, +.wp-core-ui .button-secondary:focus { + background: #fafafa; + border-color: #999; + color: #222; +} + +.wp-core-ui .button.focus, +.wp-core-ui .button:focus, +.wp-core-ui .button-secondary:focus { + -webkit-box-shadow: 1px 1px 1px rgba(0,0,0,.2); + box-shadow: 1px 1px 1px rgba(0,0,0,.2); +} + +.wp-core-ui .button.active, +.wp-core-ui .button.active:hover, +.wp-core-ui .button.active:focus, +.wp-core-ui .button:active, +.wp-core-ui .button-secondary:active { + background: #eee; + border-color: #999; + color: #333; + -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); +} + +.wp-core-ui .button[disabled], +.wp-core-ui .button:disabled, +.wp-core-ui .button-secondary[disabled], +.wp-core-ui .button-secondary:disabled, +.wp-core-ui .button-disabled { + color: #aaa !important; + border-color: #ddd !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: 0 1px 0 #fff !important; + cursor: default; +} + +/* ---------------------------------------------------------------------------- + 3.0 - Primary Button Style +---------------------------------------------------------------------------- */ + +.wp-core-ui .button-primary { + background: #2ea2cc; + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5), 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.5), 0 1px 0 rgba(0,0,0,.15); + color: #fff; + text-decoration: none; +} + +.wp-core-ui .button-primary.hover, +.wp-core-ui .button-primary:hover, +.wp-core-ui .button-primary.focus, +.wp-core-ui .button-primary:focus { + background: #1e8cbe; + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + color: #fff; +} + +.wp-core-ui .button-primary.focus, +.wp-core-ui .button-primary:focus { + border-color: #0e3950; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4); +} + +.wp-core-ui .button-primary.active, +.wp-core-ui .button-primary.active:hover, +.wp-core-ui .button-primary.active:focus, +.wp-core-ui .button-primary:active { + background: #1e8cbe; + border-color: #005684; + color: rgba(255,255,255,0.95); + -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + vertical-align: top; +} + +.wp-core-ui .button-primary[disabled], +.wp-core-ui .button-primary:disabled, +.wp-core-ui .button-primary-disabled { + color: #94cde7 !important; + background: #298cba !important; + border-color: #1b607f !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: 0 -1px 0 rgba(0,0,0,0.1) !important; + cursor: default; +} + +/* ---------------------------------------------------------------------------- + 4.0 - Button Groups +---------------------------------------------------------------------------- */ + +.wp-core-ui .button-group { + position: relative; + display: inline-block; + white-space: nowrap; + font-size: 0; + vertical-align: middle; +} + +.wp-core-ui .button-group > .button { + display: inline-block; + border-radius: 0; + margin-right: -1px; + z-index: 10; +} + +.wp-core-ui .button-group > .button-primary { + z-index: 100; +} + +.wp-core-ui .button-group > .button:hover { + z-index: 20; +} + +.wp-core-ui .button-group > .button:first-child { + border-radius: 3px 0 0 3px; +} + +.wp-core-ui .button-group > .button:last-child { + border-radius: 0 3px 3px 0; +} + +/* ---------------------------------------------------------------------------- + 5.0 - Responsive Button Styles +---------------------------------------------------------------------------- */ + +@media screen and ( max-width: 782px ) { + + .wp-core-ui .button, + .wp-core-ui .button.button-large, + .wp-core-ui .button.button-small, + input#publish, + input#save-post, + a.preview { + padding: 10px 14px; + line-height: 1; + font-size: 14px; + vertical-align: middle; + height: auto; + margin-bottom: 4px; + } + + #media-upload.wp-core-ui .button { + padding: 0 10px 1px; + height: 24px; + line-height: 22px; + font-size: 13px; + } + + /* Publish Metabox Options */ + .wp-core-ui .save-post-status.button { + position: relative; + margin: 0 14px 0 10px; /* 14px right margin to match all other buttons */ + } + + /* Reset responsive styles in Press This, Customizer */ + + .wp-core-ui.wp-customizer .button, + .press-this.wp-core-ui .button, + .press-this input#publish, + .press-this input#save-post, + .press-this a.preview { + padding: 0 10px 1px; + font-size: 13px; + line-height: 26px; + height: 28px; + margin: 0; + vertical-align: inherit; + } + + /* Reset responsive styles on Log in button on iframed login form */ + + .interim-login .button.button-large { + height: 30px; + line-height: 28px; + padding: 0 12px 2px; + } + +} diff --git a/src/wp-includes/css/buttons.min.css b/src/wp-includes/css/buttons.min.css new file mode 100644 index 0000000..495a227 --- /dev/null +++ b/src/wp-includes/css/buttons.min.css @@ -0,0 +1 @@ +.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary{display:inline-block;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-border-radius:3px;-webkit-appearance:none;border-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wp-core-ui button::-moz-focus-inner,.wp-core-ui input[type=reset]::-moz-focus-inner,.wp-core-ui input[type=button]::-moz-focus-inner,.wp-core-ui input[type=submit]::-moz-focus-inner{border-width:1px 0;border-style:solid none;border-color:transparent;padding:0}.wp-core-ui .button.button-large,.wp-core-ui .button-group.button-large .button{height:30px;line-height:28px;padding:0 12px 2px}.wp-core-ui .button.button-small,.wp-core-ui .button-group.button-small .button{height:24px;line-height:22px;padding:0 8px 1px;font-size:11px}.wp-core-ui .button.button-hero,.wp-core-ui .button-group.button-hero .button{font-size:14px;height:46px;line-height:44px;padding:0 36px}.wp-core-ui .button:active{outline:0}.wp-core-ui .button.hidden{display:none}.wp-core-ui input[type=reset],.wp-core-ui input[type=reset]:hover,.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:focus{background:0 0;border:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;padding:0 2px 1px;width:auto}.wp-core-ui .button,.wp-core-ui .button-secondary{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.wp-core-ui p .button{vertical-align:baseline}.wp-core-ui .button.hover,.wp-core-ui .button:hover,.wp-core-ui .button-secondary:hover,.wp-core-ui .button.focus,.wp-core-ui .button:focus,.wp-core-ui .button-secondary:focus{background:#fafafa;border-color:#999;color:#222}.wp-core-ui .button.focus,.wp-core-ui .button:focus,.wp-core-ui .button-secondary:focus{-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2)}.wp-core-ui .button.active,.wp-core-ui .button.active:hover,.wp-core-ui .button.active:focus,.wp-core-ui .button:active,.wp-core-ui .button-secondary:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button[disabled],.wp-core-ui .button:disabled,.wp-core-ui .button-secondary[disabled],.wp-core-ui .button-secondary:disabled,.wp-core-ui .button-disabled{color:#aaa!important;border-color:#ddd!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default}.wp-core-ui .button-primary{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none}.wp-core-ui .button-primary.hover,.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary.focus,.wp-core-ui .button-primary:focus{background:#1e8cbe;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff}.wp-core-ui .button-primary.focus,.wp-core-ui .button-primary:focus{border-color:#0e3950;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4);box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-primary.active,.wp-core-ui .button-primary.active:hover,.wp-core-ui .button-primary.active:focus,.wp-core-ui .button-primary:active{background:#1e8cbe;border-color:#005684;color:rgba(255,255,255,.95);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1);vertical-align:top}.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary-disabled{color:#94cde7!important;background:#298cba!important;border-color:#1b607f!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.wp-core-ui .button-group{position:relative;display:inline-block;white-space:nowrap;font-size:0;vertical-align:middle}.wp-core-ui .button-group>.button{display:inline-block;border-radius:0;margin-right:-1px;z-index:10}.wp-core-ui .button-group>.button-primary{z-index:100}.wp-core-ui .button-group>.button:hover{z-index:20}.wp-core-ui .button-group>.button:first-child{border-radius:3px 0 0 3px}.wp-core-ui .button-group>.button:last-child{border-radius:0 3px 3px 0}@media screen and (max-width:782px){.wp-core-ui .button,.wp-core-ui .button.button-large,.wp-core-ui .button.button-small,input#publish,input#save-post,a.preview{padding:10px 14px;line-height:1;font-size:14px;vertical-align:middle;height:auto;margin-bottom:4px}#media-upload.wp-core-ui .button{padding:0 10px 1px;height:24px;line-height:22px;font-size:13px}.wp-core-ui .save-post-status.button{position:relative;margin:0 14px 0 10px}.wp-core-ui.wp-customizer .button,.press-this.wp-core-ui .button,.press-this input#publish,.press-this input#save-post,.press-this a.preview{padding:0 10px 1px;font-size:13px;line-height:26px;height:28px;margin:0;vertical-align:inherit}.interim-login .button.button-large{height:30px;line-height:28px;padding:0 12px 2px}} \ No newline at end of file diff --git a/src/wp-includes/css/dashicons.css b/src/wp-includes/css/dashicons.css new file mode 100644 index 0000000..58c596b --- /dev/null +++ b/src/wp-includes/css/dashicons.css @@ -0,0 +1,754 @@ +@font-face { + font-family: "dashicons"; + src: url("../fonts/dashicons.eot"); +} + +@font-face { + font-family: "dashicons"; + src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAElcAA4AAAAAdPAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABRAAAABwAAAAcafGMFkdERUYAAAFgAAAAHgAAACAA7QAET1MvMgAAAYAAAABAAAAAYJYFaPZjbWFwAAABwAAAAQYAAAJSHHBJFWdhc3AAAALIAAAACAAAAAgAAAAQZ2x5ZgAAAtAAAD90AABi5MgFCx1oZWFkAABCRAAAAC4AAAA2BKJ+GmhoZWEAAEJ0AAAAGgAAACQPogeuaG10eAAAQpAAAADIAAABimdQUb1sb2NhAABDWAAAAYIAAAGCwp6pVm1heHAAAETcAAAAHwAAACABEwCdbmFtZQAARPwAAAFzAAADBkijZWBwb3N0AABGcAAAAuMAAAeK+aXB2XdlYmYAAElUAAAABgAAAAZne1K0AAAAAQAAAADMPaLPAAAAAM7Z0U4AAAAAztoX+HjaY2BkYGDgA2IJBhBgYmAEwv1AzALmMQAADH8A8gAAeNpjYGY/wTiBgZWBhVWEZQMDA8M0CM20h8GIKQLIB0phB6He4X4MDqp/vhSzXwDxgaQGkGJEUqLAwAgAOtgK8Xja3Y+9S8NQFMXva+tH4OVaEIeAQ0A6ZAuiYnCJijSFKmIHiYPEj6VOFUFwc/F/6+Smgzirk3rue+iixkcKDs5OHrjncuDwg0NEdRrdLCnnpLouqSo3VOx+RimN0WTrAx6mEWAOEWIsIcE6NpAhxwH6uMCVKPEkkEgSSWXNeCYwkUlMx3bsrs1tYfv2rCyJHInQxAxCtBxpHstIHamNHgoc4RSXQlKXpoQSVyRlmiY0sUltZrcr0qEdlOXdxFSDv/iT3/mNX/mFn/mJH/mB7/mWb/iah7zFm9zmVV7hRV7wz/2Bf+If+/u60Hs61z29o7uj1X8jNU4/OFVzVvtdoH+vb7THbaEAAAABAAH//wAPeNqdvQlgFEW+P97VPd09k3syV65JMneOyTUnEDIJEO5wGK4oghzDHTCKIEiCigFROeKFoiwqouIdFVmPLKvo6ngjG3F1WRdXZbPoc9d9PB8kM+X/+62eCQmib39/Jt1VXV1d3XV9v5/vUQUncvCPnOG7OIGTOA2XwqVzXJXWohV0Fp1JSyzJRKsjZ3qfoE9FnqA7yPQnIk/wXbF6chv3E+3+idDYJ9xPxE157ieOcAP+VXEcz4W5mPyK1Atl+jlOQ4IhYjTlE1O+EAhqiCzpC4hRL6fxsgSnfD5EgoFgiA8GPJDuCYoHYjW7stfdNazs4Wmlw+c0rhwWeyxW85zZvNxszh29xDjS5ptaKY9betVVPqs3tcGXZ54Gt6aZhY38G7vyUm3O/C3lWXmWVJISe4x/4zl2d7o5NzAuo8rmu+qqpePkyik+a7121ahcViZHiJuLSHWymsuENrF4jAatXiolRGuzOv1aX4CcEdob165tjNCUCISyem1jrL5xLU0hZ9Y28l2Na6HaAve/UMZn0nFoyzRWjknWEJeG+L0igWbFQ6rbvTy2PrZ+Of8D6YjEDvBNfVOFQtqi2rh7OX8zS6ctkftij8ee5GfQdHKGpkC5EW6X3CwP47I4JzccyjVmpJM04iK1JOBzOa3phDgDEC/UsGtJJpLeZAzIxCilE6nQ5cyoJSFiYqke6fuNG3c3/m05kRoaamtrn6+dRJ8xD22893qyKPotbywosDYVxL7FoJzszccbdM/1yiN0QV1d7fNSF6bc2zg0n4iTGqCAuroG+szyvzXu3tg3Cwq4rKCQz4+dZuHb5AF2Y+NGsngjPGKm82ufr6vlOBWMjzDUqZnTcblcMY4RovU5S4nLItusErS+0WvxBDiPUS9ZnT7RomVhwOsxaS3QoP2Xor66+LHNtGXzY8XV1cVCT3F1rO7oHXccvUM4RM5AcMdSUy7thjZV4kI731VcHYlUF8fq4QH+BUw+quo7tRSfEck5Ki+j+9gFx/ePCQF6lMPuEy0Gi9bLNwk9fQeFwmhWhJwR9b3fhSOiHvv/NHdK+lrq4dRQJzuOehcJ4KgXg0ROIzaLLFldTl8t1DSgUe7IRCygXa+S+pzLna7M6Fuzhc3Xer6dT1tb3a1ut7u1RpBIfTbey6FdUp6SVedyzn6vJbphumckZCptc7eS9nln6H64lQm3cuirMP8i3FtSTIpyBs4C3y6pXARbLEicmcGA3aThjRJONDZ+YDZK7Qvp99fFvppw7K4J/Dafb+FcolpL/0pySH7xkN49+dPN+fnm6flm4aeFPl/smgl3HRvP519HMhfOHeKmf6WnSMGan2IFZnM8IycQN3HLamk/zP9SbqzSuzbL+Z4lXuzaUmLAjqwhNuzNamwYmHqJKz9emRM5WZf7ZXV1ce932Neivrg6mhXGaNhcYu6PkDMXSetQdWK8byp2urm6sXqXwWw27III78QY3TcwLfY5xhh55Dq4ffIYuQl6lCPQjU4Jp55JhuZUQVMSV9AYwNml0h/iW387+cjoifU6329/oD0B+kngXT8x/QCJ9RNH66R9h2KbD/l0oyeOfn3KoR/oPwLvBkgZZPg3S6w/AuNND+OtC8ZbFlcJ77aWqyqIMyR4PTBO0kTBAaGZpKls1nK+AhonRLwq4+WXBNzZWkGQpNLaxaElW8vTiEqbVerfSDKu+WNbuv+R/X9btPjLZ253ua75+DqV11kzfnyNThdcsXBi2don5sjZY0dMHUr/fmjLsZXnxHRXfpbJYk1JPtfy4SaFhodlNXyPi6uA2tskGeotyQaL3+mSXUGny6b1BoKuoCkQ9FsMRlPQJBtNXs4T8Dmtkl5Wf54TvO/YfU1LaPeSpvu67wtmff6ZaSikzGgmbpYy1PRZ1HO2s/Nsp1C4YibcgSyfZwXhTtMSUrxoDqQEcuMpcxbREZ2Yl31XRLbKlwCNhV7hjJnARVQuQRQsLmV4Z3oCfvYNUu1ro0fPa6HvbH2VfrKLdoeF3LFVq+cRvmLV5MmrJsvlr1FKf5rX4q+jLxbQbRGB3EZqV88bHTs5eUgQcuC7SJHcDONYizOaeFQmuRzGpyR7NcQbyLTrrHZXMB/GaCBo0xBbmiD03Ee0C54MvbL8Nz9Ye+g+uu9o1hFS9vT99F/9qWQumXs0c8Ohf0r7N7a80TjvzbtpC+k4QDL39rbHE0gHbdn4lwfncEgrI1BfZS5lw2wu/vls4gpVJklVaHcFVKzeRg8BSuWHH5svW9l8WQfzJUgaiW/DBvo+fYa+v2ED/8ja/WvX7ofx6+7dStxCIZI2zBzNgrMwfu+OHXvhOImZ1sYOhMNh+J5ULgJzuxnGRTpQbxP0QQGMkFIYI0GumquF2T7xIvPdorXo4JO88SNB2YPwnQ64N+ga7qsGXMvNUAc7q8OJ4upeOyO5xK389a0sMcMMj2CD8U3IMKOxASldg3OQDiQbcRKi+gwS3BH2j6aYWa5wGHi6OxGHG/Eo1Bv5QVjazzBC/mCUYImjBFcQJgbMEpgKgBh64oiBdkNE2N/bG078IX6InkzgB6GwcW30mQG3kZdw0OdH4V0ytHIB8hKdTQdYws56N+ATHEaT02ZVyU67zSoHgkJPzFgeqbxL6BF6oiMaq4GKhfmylixfcRd9fc4c+npXkT+rReghJX2HVGuqsS3CrGqxP/z17hfll/fseVl+8W6F58mj5LWABrWIYACkIeOzAH5DdiZLu7ebzbSx76Cq9GD+tNjf+ewdsZ6xctN2wFj0kuhQ8cRBM4newWftiP29mwNcCf+gHkdhpNi4Jpi5y7kWSMrgy4m9UJVG+IzMfAIjN0RgDBszM3gcxk5IDTDM6JQlm9UVsHth4jklgx4QpNFkBKYBmCdEkPCyHE4glJKxgOg0JKRywX1eQ5y830d0+Lh8dNHLP9KP6Cv0ox9fXgRxUkXGkKofX+57i6wik37YseMH+gK9g76AMVJDP1qmT9MZbpxu0a0iCz68j5iafXNMxhxR8NQWFtIfDE61Wp+u12+abltms+shOr2FvEREQW3UyElzP+k9QTa++z9CyTdr2pYsEUYrr1p0wSeIswa9dBL7kL5iwa/mvRUkiTx6ZNVCeeIE84iiYrU4a8vwk42N/PdErRL4oI8kS7xA/EGipkdjefzLcnZj4w1Dn/jjn+k24Y6+noXk5m9foO/Fdpbkc2J8zDbDiJK5ZDZjOZyLBCj2oMMtruvdqmqIngRcww6+KXZAbj57VlwHc6L7/AE0cQbpkEU5DbBFKZTmc5UDX8wMutJUJqSEwYDj50nCzHGep8dnf/jQwwte3LvSk5Hz1RP3zF8gPHuxVP74pstrnRk7yYhLvq7YcvCDczf8MdrUtOtiiTi8xH4sqQLklcJlYB11gLctBAgJO6CCGmIBZhY70DeVuFWdfVNVnbEDsQNCIVIMublvauyAeAIq2IIEAENyBsvmB+BUJ/JAq2Q+LxV4GQnopwNaEk9XNTRecgvtRkmhkW9qXIsHUoLuMITiuh0TXqLdxL22kZzBdNoCRwoQg/40mDKMx+F7NUBvtdDS2ZyZK8R64dsc8BJR8OosNsFLEgdMUw0PgLW4+uzZavJyJAxkOhwJAx5KnJDIn1H6tbr43Gu8FCquDuNrzx+Aa3uiWUI7baEtDP8o9Q8jDSKOAMAxqGqhM4MhcVGbhlVWLnwB/lXV5KLqD+gXH3xw+/hJ0dbMSPvtLDpE2hORaksjfd/DNbF+YONXR6LtNzzF4kJ1kX+APJDOJIIRiZrqJVuCuEL9uAR384Vkb/89T76qAOa9J583fSml+caP9537N5zF/+3dyncpDG4fEZMM5vJhjZUKbyueNMxny5YkVcaQuqUtS0Z5k+Xm+GM+LOLcazgdhF7G+Gi3OqdxavOcuaNKGF8s5rvcY2fMGGs0phQvmTICUgyJsRJhfFHH0OIF3+8FPscVBjKchVKGeII43aGQ+9z7eCZOQMsd9A7ScPo0PXhaqgu5+xaW1deXqX7jDkV6vzut3MB3SPCOXf1ykw3mnxd4Lge0M5/Xp/FAO8t5X4jPjGMw1QVhgstK8VDIJfeRYe/c4PPd8A59iy6mbylxubWpqbWJzxkYxCQW/J7xFrl51OrHX/nbK4+vHpWIxGxNLMOAv9gmFrRU4zMgY3eQM4x/JivSVOIn7UceibwQqJA+EWOyryKDKc+Y8CmbH0UwEML8QYPNYPPb/F7AE9J+mFzRVlUDsGxg2mFRD3w93GsX2iPsOhJhbccBbjkKOOo8LYQytQlqCBGXn8EmRhHlo2crFfoHUgbtltU4Qc6elfbDuOhBwMB4KMMOLax8EcrPgvI7BtLagaU7LigZZxqQpHq+C4rtuKBYpdD/s0zXBWXKavjaWL2s/sUiYZwOLFMpDU5YgngimoWPQft3KPMfIaG4TlyHT2l4vAJCuY6upKs5wnfBvROqTuWeeAJTkazyTfF7+sRzoh5TAZ7dSbaze13iCRCZ2T2AaJCK+WMHfvWerOBgeRi0QQHDm16GOBk/01ri0qISGiwGhEk1BIe9OCDO+kFrg7NywEx0n3uNuGGgkg44RVsVwMd3KSHB1uiI8E34J9X1bgV2GGpqCoXZuRflxMGn3tVCe7Q1jIqyxIHtCLVfKDnEJ9goNBEbCZrEB7bE/r6FHtvyrfjE3JiJ3N6GcvufuD9JZ6WzChcDeeM8JvL7Mu3AY4SeB4n1WGvrMfoFfY1+cay1mywj98dekc6eT2o9RqwPfkKWHetrFtT0eo7pAyJMlktnMtOFWIsHaClriElDGGApOn799cfpnwCu/Aljwu9x7MMUA56GTCKiSPcDs5Ai9ljUi7cig7MP4qMarJeGiESAdxEH0YlE5xB1xCH00O7YAfKbq3CgtJA9sQO0+zT5mB6ZRd3UPYseIR/LzbEDE6kntgxL5e8hH04k62jpMLonFjt9GiBReBg3gGfhu9ibABWy8ombb6LhFuT7V9GFfNPPi8PvxHQ2/nDuWUgxIYCKspAiwRemwEiGPmXtibJxM5emyIXGDIY0cSCGiC4ufxr0JlQWGFE6JEbxzS2HD2+xOJYDj31Fc3DznJtueuWmXHrYtjlTkAufyyf1MIN/T88cVi/v+0o8cfv9sT+3Xz6nvX1OoAoyvZmp2gBZkAiSA+SAVCQVMzqqqBiDGtTv6f5Mn6B3fUia6ROfk1mk+QN6F7/2Q7KSPs4uP6R3kZmf08e5/3M8cIUhklFOCtNIhvFiA4KMIhmntmw5Rf8F54sOhL4VW0715wF5hnTEdWkmmLtl8N3ewdyR6X4KjQZByxpOS1whEm9Do0mGSdcvlRaHkR9GgC8Tt91VAXO2wmVXNcQ1esWo3yPuR0+ffhQHIcNX3bH6TzPHu3HCusdnfjoYMyKucnD13KTB31RDBmI8pDD92CMkeaGbAW0UYBRRB7Al9phBqnuztKamtPdMaQ2LiCmlNb3fqRr6DpIzjBWSQl5tLgwMnVQcbR3S6DQSQoTUTIur2loxsThP5F8L15RGb5DqlDJqSt9Uyqgp7ZuuaqARxldpd5J96RWrpw1FjA6VKihQpRc7yy0mBCKxShitN5TWgMCqGYCpTAwtuBjNRBmdC4JM7h8go2fGEQHK3vx/EGc4E0EknCMMEojr+g7+8KuxcHXx+aekOoYKqpEt/VpsYF+drwfnuFADkvg26Bp+QFxBuvhSfPW5vot81sCqSKLyXmRX0ZPn4xynyOT4HUdB/jdwWYMxDDJRGAcwUEz4UoDP3dGTqG8AotMFOBx10MCESYdQiFEMGehrYfdi9YB28C7HKbpxRWZOgjdlcXkod8BA9Fs5g02TeKnIAlSd8F1v7Ly3h/7reSJJ02kKMP12oRAoKRBimgJYvkc8ccvuY/Qff6FP81/1bqUpQg/golg9iCPAVX/hfRp4JWczeIwkXjsdCwSEa9VvkDoiPU//1XPvzt5iLA1LZUwhjG+jT5NpfyGmY7uJHG1F0qnqhDO0Q7Q10ZYq1pZHoU+Tma0EADQxKGwczw6LBhVYooXIR2k3lN6N8mnfKb6L7uO7kAnTfdBmc1UNERRWIyivRkhHbG24l8GWeJ2wrxAzKeXHeT5gR6iGTStoBOgoeI6V4MEnoVd6aAsiPOWFyBfwZSAY56AmD/V2jJ0Dj4lwx+Qk+H4Ts8fIDqD4Lif+bFroIw+qKaRXp0yhp4NB34L5be3bservv3Jo663CF6/Qpa+sad++Y1Pbgvn+ILzrCDlCj0+ZdOtWpey3oGx1vOxAEH5eLNMqS/gDpiI6M4gBch965X1ERtvbWxcs8AWD9PQU4Qt4waQppISGaIi4g/75C9o27djevuYVci+TUaD5I+I6oMMZbATrJVmLyhRtOWrbC40qplxyWsV1j98U9nhuehxpbewAmwjiuluPW2P3ucN5eUK59fitQGOz2QRhc0OZo+p+DaUFJ6FC3Zk6H+kooDNiScxOezzkm4T2BHGPYIS4i6tBDGiJtrYweiecUMSQLvwKGG4swPHbMkDUiMtGkQv0kraLy5FME4kmuXg4mAT0bkXVolCIqgIIBqtQcXpFW4XCsCI4tyhhHHcgKhJPMOkvH00b7J2+QBBPICOHGIfRix9sPvTB7dGs2z/o3CTdsbSq3PP7qx89LXyT9tbNKC9vflObk7f0Dt3CdacfrWRtGyFnWLlmoN2jIIUJvGkSMxCExExPSFVLyiVrmiqd5Iv2OJ8SNr3/9n23LRivzZSyGmd33BMZfPnlfXdds3RCMDVVzKypb7767sGXfBrTtYsngk0rVjTl5sU5zqCr6ItxKVhtntZw+cjyQVenmFofaPd5nKFj0mrdz3XDLpiUIhseNq3XgMf53uKYvGwsFEz5iq0Im3Nwj4RxivYFVTkF7jD8cxf0nSpwu4UmlKVh+D46KVgPYKE+iDOa6X7jT0LONkCotLsNshfg4zE+LoLzXauzwjUIHmrCWWzeED0hUpd0mHNzQ3DGZ8qKKjLxk9OILCkEIP6T7C5nRjBgVwmBDJezUJYyTMZC1eHbnMuEbLW1IqSqsVTZ7CajShhZWeXx+bxVFjdfVpiVpb+P3rvpwQeXk1ySa1u8eAn9YvGSJYuJVSq/ja5/QDBKuYWlqjJLFaLKssqRgmA0OG1VluFCbXlhvn6a78aHyDsPLp84MZazhFiWwD/61yVLkCYigZb2D5B/+zmYkAjbUbqLHYgogaoByQseijqQiWEwz0AWgvG4brAcrUhWXi0yCkBztn7N4hmhp/e7CNBoFJW7lVJg0gPJDicKxYN04FQChi/1213TgW4XMH5fqlAURbzzAsT2GEVLObQJsSSm9kCpTtWJRKT3OyQm2p0Hd9IbiTtjxoIZdB4CxWgrQkTgtvgHOKQ4DOhy5tVXzywdOpQ+HgeZgwU4df84xjpnxPVxFkCOHKIM+CyUoRWjtMkPk9zBGNn5Q1ajSgnVjtFW4sbJdRL1gshzEgfehHpDPj3Che5WnEGRyNpGVEcCIkLlJJfA7qwfJYWvoZCIygD9eQBvF3p2EuHVK6Hfuq58lcbo32js1SuvfJUIQo+SshPavH5nIhXIFeRmtGZAPZOV2iXaVVaz78A//EyEtdiLDBuBbO8WT0h1wGvzsFXgczxBhSf6Ecm7nBZBCyQQdfc22esx6GWpFKRi8tZH167z+lbPWLxmNY2t37rS5527dNeDf/J6VhwAcfu78MLnN05syNWk77rmqclTYjFiKbRMmDrmzw/NLi1FmkvehzGtgveiLGQjXtkS9BJb0CK+9Qnt6Q7F5oSOk6xPQvzD4rpoKwzCdhxfHWwe1LEa6phEYkN7qxM1B3q0OPG/FA8zdhNGFtB10aioV1ReAK0ujDD9Hbw7h/Ud6nV9QEuWcCuYXks2AaOXAfkYLILf5g8yvu9HRbpNYfwmxAGsAfEynRhYVmhYuK/cMzCDeiIPiKNOl8Ho7e8GyGPCOjSNvrGoPCWTJ3n4wRue8g5JM2iSMtKG28xGbbYhtyzLYMgypaRKckpyxUKyE3Pd6HDUTg4W5er0hmHuyoICb5ZJbyjJzc/O9dRPLSnNya4qyjbdqDQA6VjidSRlltD/joRjT49RVfp0OSZTngUOSUhJMQV0yUnJKVnp6Rna1KrwsDfC9LPy7Jyi4ZmiXF6QNTIlxVyYnq6WUycYLZbqoqwsidfk5dWHgQbbSYf0OfSbniGM80YGnv+54aE/TXixpvSukOHZW29b/upd47TGN26/Yfo0wXE+8U5IPIKJ/KNXTfJb0q4jmaPf8O55j8a2Hvx04oQbr5oUKLwwkfsFenqBVQVnO1MktyuheELRwiWO/6QMGLgnVQ2KbQbD/z9lSPsBsrQjn4yHF5Yh/qwMnULRSVwjaonrGxEcIyxGCwEc3WhTwC5H6UaxpCIlZyA8oa/L4PI5JzeMGw0ydhM3F7UlwDGDTmVcg3wPveSXlAHr9wUDxCvYBG/Qq9MOGrsYscn+/uEt2mCGQEFiIqWUMDWWVGm35Thtk2fPHDnCat3W3jSusMRpv7SsorIq+szSk8tPLhn2zbHPFg0Zkp83wpOXNyTQNnVGvbnAnFdDpz0TMGnS1RqyZWGdtbCwILSUpqHnVxhFOakrWa29xOVwjK2/4u69OdOTNOqhgZZlw4fHmEnlUfJ87EC5u3G4zZai0tgc3sl2+9lHdZml5Xr94j0jynw52dtMpnJvVlbsFRDBCsMooSE+ivvJiKzVDQw7yjqHrC0mWpeoY15HJodgKiZBQQxq+aa2L+ktbcDgOtroLV9G3+ab+g62kWu/bKMtqs62L8m1bdJ+vNOGvYDX0XNM/csei2fkgIMlsPJAHp7bz20TutXa+ChgWBl174OPi9+z+AU2XpRr1EpL+1HHCjB2wF/HBckgGKeEcYjjBVrqgDumKBJypP8fCLQwgJGrAWdu6k/tVkLEaWdQvgGsbORykCMgOmAyiFafL3hCgl/LplRk27Lld0eyRyx8IPLQwpE5MDtPxP6w8/492/ia2Is1126YM2zo7OuurYmhAkLV30f980sHlRz4Y/xw0LE/kvgk/CZyRvwH4zdJqGVCPqWzuCw6sfQwXQgTsGsF2VdKX78bJGVUFbnvI6fO+31AH4nAK2zoE6Rh1syEdUfxmDNBUnCAzxwRbMloD8wl8Kc6TiSQvdVvMEFNaK8uvi/QNzV4fwI7Y8uFw0dfi6DhJIw2jnAYpzcT+PoM6DVV+1/fh+KeU8J4pqhIATE8BUPFRjrwO9OB95cN+M64Cs/xM20fehEJzJbj1Q7+SH7z/edR+v1BwETRkzAEzn/bsBK8U1KCH1UybFiJ8pH/FbuJmTrOJPz2pE4YAy7mw2AmeplI1greWUN8QYJsFF0lKwjSIMJ8UT3i3atqamLLhj8z/EqI8PcMnzWzhvL8JrP5uLm0xBzbiJEZknjl8Fnds4bHltXUrGLRGn5XTU1fBDJOzz9uhnz50yEjtouW4Yw6Zrv65fk1Ku4vw0islpHaxGxCbbIcj4sXhL92T6pDmI20GVFZNCss9ITD6L0DIYDu/vPF0mR1ONxrD4fR6h9mzjBnWCTSf7pYGvrPMv6xinFmhSCnsU62IOkGAcgCEpBWD/QaK1pOFFIv9BxeFB5tWTkV5vrOO0ZOeORRAKpfPvLI+NBd9A6+afqq/FHhheLB5uYPXrs5tNAbiSzavPsQSb7//t/soWdfvHfT8kgkGA5t/t2HK5oRo4cH8DDUKiENyOesCj8U0Upm86M7rmMAa7TFQxjTLcgewxHE4hGhJ9qKRIYZc4DVFdJuqS4cVux9++i+BNlRJhCTW9TMKtL8S+9HHznixffbBr7f2++AAXwGyR3zU4qgDR6FDyR3kIxTAJl2mL3rFz4AcXg/H0+HMVbDPG3sNqtKAqHAqPJ67MSG7R5M8FOr7BoAKoEbC3FVBUuxSvu76OHD/VLCzsNkJB2zJ8s4skavz8vzNrXU3XTHunFjzbnTgxnpd+b6vBV5ubm584QS0kpGvXpe8HiVrCwdUuLylObl2B0G3dAbJgwbNn9kWVlNkcloo+/lVHg8OTmVFdm5im4+wh+U/iSauHpuMncpNwcwMowp+GaDAmptcXbvt5lsLptsC9r8ABdM3jg2SCdeRWnmMclOlwIzYNCBkE5krwuHnktyGLyJJoBiDKLLZlDAhlReZLUUjWm6aUy1Zm5mcOjCT7fPWVL99bClc+bcNGf55c8/tzoUzFXfqDbZQ3Wz5jQg0rBPq7RpiIN+prGV9Z3KXGLgk1UpfBp5/lpXdl5+/ih6xdP874TXlg4vLBBkWU6dnjNlVEthxdTyst7exx7rDZ8711tsn+SzaUKVY20O5yWpKcnV7lHhSSVDyPhAjWhNKU6qrn5YSNdVlOgy6VlCCH/AlOUpx7ZS5FLFjpEH1MXKBbih3HDGt9FLXJJdtbziJC64FB9x3oumNwcJmuS4b7gpXXEND4oaYE06DRGZk3hZ7SePJ3zEG/aPKChHH/HeJtQtR5jzOvMSOlk34VbFRfy2b0ffiw7itcI5VBcgsEQlulAofc88xssLRuxPOIw3PH681r17I9Ipxd+I4cfY26O/vU1xFr91Qt1ulnWKUgZMgA54abzOpIPx41TAS2i9KYdah7gxSEUDWh/vtBfCgDdkJGwCqgs0jpq4L3F/QiLsN/GsU53sPG/U4v+XMSb6pMJEZytXE8kl6Bsyll2pvlUSFbMF6fgzyX44YTR7mP5d+ISlb1cMCuyPZpC3YwdQxTTj04HJpxIq1YTvA6MnWpTEbYC1QiCpB4LaNFLOI2xyT+v+7CRdNe27v/70fkQ80WtHxUoeMZv53OhJm9paoFZoQgeTd+MyPWEuFMqh+H0lDqkuwjRikfj7+SZpP7Phi8jTtTA0MC2CeFf4htzJOg5dASBvByGM1yHWR3sij4a7fBEIfiAYEoOoA+BVhcYMdB5S3QYN+91D265SufRFZkfGZrN5c4bDXKR3qa7a9lDsVZL37rv063dl9UP0u4d3nFsgWDId5hLDM/PnP2MoMTsyLcKCczseJvorMNe7JK9fbyEd51JAOkTvTN0A+2HCuEUcWtEhah2iTtSvGT7+jqN3jB8eZLI7GUnG0azYHuZ68uTT/DN8o2XNmKV33LF0zBoLuZpJ8HTd5mjre++hDmF7zHlevkH+jrQe9UGlMBJRmmdWBqZhhi+w+JyYRCC0oQeCTWvvR0bEby0X4V5HBIBOpG8qun+RjjXRH8JCIYTT0Ec0LNz96Bq0d3YsenzdqlXrHl8Ut0Z30240rKg61zZOWwMzBCGZe9qatbGZGA3j03An1hex+Ovq/BaaktCRw5hKZtY09ClzMg8Km8GGYMzP/MgSuhBAaFq0Z6C7CdbgDCDnSO/WSETU900VjjPvqHDfwTB+TTSL74KotL/vYCSiGGaAd5IO5oAV80B9kJcBLklhUWYzYPO4jvnsFcKoiauFGY6F4UbkCxTFQmF1MU0prq5xkTPF/J1Mrqkujp5kSz8Ki6vFF9A0UDIMOTg0DLpt4K3YATgzHwRyRm4G2SAu3Q4uHEQtgi2J63qUNT2KerJL8d5jc5U00BC0ewh1cHFen85W+lxQlgO+vXltY+93+KSob1zbdxB9kxWP4GgWnA8hyVPsSBHpOIwhB/MiUOhS0CHZ4qtdHE7mz4JSjEs06mUxID7BFIMaOuHSdoi1bppNDmlQoQgxOkGjIYcuFQrZtdV2aiFEFp6yWdkjEKmHJEWH+Db3Dhu7BWytAdqBLER5FzBXE76axKFA0GAUtMSoaN+DLvwSIqu9xb255FEDzAyxo2wkQOzF1U2h7DyxeDv9LaaSh4sqs3Lpa9KDl0/U9n7JP+RwoQFeq6/1aPgb3RNCTUmaZG3vSNVlsReUW/I4cxIVFNudIpsiLUHazjkGzmZE7cDXAucTEoT+QoIvq0lZAMZfrZcu9NWFwqbjaWseXeMvo8clEyOzfbcpIke7YmxWvZ87O4BdVD0/K7bKWT9kt9Uxbc2aaYHLcmP/FE8wAh27ngU/KD5tOIY1MA7eZnZ17FBjGhlgBVBQVRxbAQzRWgLB/l/CdpBgO6ITF8n1/4IDsvoDQXgWbQyJX+IN0kybael6m8FqL3AUlZRcdnlpcZHDYrEas7QkJZl6SZJGKKnyDq8dMXbMPfeMGTuidri3ih5i655iJfDsdVblWXvlrCsq7fhsQXZOOjxLPqA/8nL84bpJ99wzqY49LG7zrR9j8hXYrYbsDJ2s12kyM7KNFqvFXsTz+SXEnaEKVXmLSnPzUwsLU/NzS4u8VbFDbFHWE77rxmTFn8xI0umSMvDJAnuxDZ+k3Xxa/NHcjMLCjFz2KJtrCr9PQTsDEIY0lZwJ/JCA4ItmC5VsAekwZebm+264JWQkC0g9ugJGeu3Cs/T7x+gxVScQhFI+zVnbPIGkkkoD8QCNejB2VNVQeS/OweVEKy+WDuPCRUBMMNKTiKSyFTqM3sIg4EVUUJWTGugbtJIGjSpTfGYEgpIckBdPbCYzO8/QJ96gR2mssoj7KXLtq3ZXfkXV9Y9NnTmxyXMrueXLpE/vfbB544rSa1dImS2T0wvvpJ/Rfx9tfUT8Db/jSjk15912VangfWhuePrj7yWXue759Jqc2vYxycyuSG6N20MKUEuNREbWZ5o8jNIwuuPXxmPAYw8+s4F8+yWfJPCama2tM2Mn8/kQixyR1RtmRa+RhI/pTxJpfWaDi1RseKb1w1mKb4PCP/8JcksucgSHxZdEODexaT0pJIeIFh/P2eFCZTJmiv3cyyh2E9/qj6AuD9H5nx0jt5LQP2+KnSS+A/Qbuv74LpKxYvlVsX80tbV1trVGjpN7yaXE9v5V9NiN39K36YaP/khuJKZH6LGWpUvpv++4btbMDRtmzroubl9XeKt9oCet1gtYny0NczJPbEDt/WsvLOJOh9froEuPFvzTM+aGket2PP7xxzHe4QMy4HX0tth9fPMP91VX/0nz2L3P/xC7y2cXOxxexTePi4j3wLv0WG+tV2dh79DG36H1CpOJ438c9FR14z1XtD729o8/RvjPSd6h0aO5n5L/8MIx+nXCRsuwmoatnFD0pTDjuX47N+0WT0RbIzRFUDPrKAp00Sxkla0KxT7LSUQDff2W9CJwxDyQpYdw47gmHJX5gtcT4pk1QBKlfOIJERfavzDuTVwIugDLYNKxFUkEIshIXIITR6vk8BhlAT22XboAkI6AYJNFe+WEYk9TpSk146pR9S20MdV66dWXWlPT5l09T1gKF0OGKldXjG9zhA7d/NGRoRu1bQ0T22LPrhjR4h81Yln6isr9ncXOZKGq85GqFenLRozyXzlqZWq6U8osmj1nYsW45esqx82evS+4dfHircGayZNr+mN9DeSZjc8v+Pwl2uivrxcq7+ymmwuGlpOVe16SkrUv7aF3lg8tIOs/vSMzXWJjYhJ3SL5WWsF80U0EV6BpUK1D2LpGh92UrzFJp7fTR3ZMD8yn3ti/zdPy15nNqvF/p51kz4/ZHpc3z6cLJg8TxKYd9MkdjTcujq2kJWbzelw6fPJ2oe2KpFxTqXGIblTqRAHozr1kiHSX9BRXwg1jFv00AchySBVEEG7KJzzSY1U59kpI1jF6naD5JqMwS89n2fOSzU5Tw4TZDVOzXbMXzimwZJRd8exVa2jsx790es2GDPfYWUtWXXPlM/nzZjfOE0hKzoLLp8+VeWmvnF9cGfQPMWmzPJPGjkozZmRMHjXuBI1Fe8ZOqMua89Tqkbtu33Xz9eHGktTYkvqUlHEzF1kLRhSap82dlKHYCMlOhq1QE8GRuG5JZ0FHEgvpUIQqEOTQ2RIdIgHY9U15B/VFNAVRpKK/J6WsjFSguxauAiTLUcxPbpCURRTMAENc7I+RgL2WpBFeWfB6Pt1xkdiFwlaXIgrRFCUkbzrImI6O/Dm/c9R21oaoUUnmmwaHpPQvJGsfKWYi16f7aI/QwrSEw4btjYf0uOPZ0aPrXqf3O2prQ88tiCeXXBAq+kzFtzOTreNF27OXuZzjkksPYqN8YkDNjQ/1rghMSgkAIALEAtKk/eFzr4W3nNq67Iorlm09taVvamQx39op9HS28otpdxiAft9BmPRwq6QEskUi+7d20q5Ia+fW/RHy6GXtkUg7J5IAN1W6T9Yy/0wHfEMVW09eAGJ7LYz8CiK7ZGJV+BC2o8uaAIqi7NIFvcQUFFw2cjgQeGfDqVMb3gkEIq2nvmkjCx87/e2jj5w+/Vjrs8+efa6TCDccjW3r7Xuv7ZO+bb3i+6e+aYWs77R+c6r1nWAgEks6/RhkfuTRb8PPtjEMuepkRezlE7zhS2/sdyc4GFsD7cVJcK0FKprQdDqBgrlx7agu7mMuBlngcAE+Nrlk5lRWDCmick8IukSTNp1YIorqDQSK/F20GxfpQISc2bWrdxdxR2L1Uh3TjWXRFNVGXNa5axeZy+4p7vR49O5SdNQQdhP3rl2eXSig4B2mwNy1i7bsgn/E3btL0ZvF10kl/FMNF6zewM4vzCeiwcJ4H/EPQKQG8UQ/sG9U/F5j9UzyIVmBkRCMDMD8GihaYO+zvoeEvqc/y1o4HHHm8IVZnzFZGnjACLb2D+cukyO9WmgjEMS04vrBExWaQlHENEVwHuN85gaWISllKM/GTfmozUSjBKpfIqrn3sGHFDIQSRAGhQczu0cdW/3OHERM8CG45P3ca3wXdENY1EezRH0EpbnzPmDop1nNTWa6R4VIoO6x0B4gdleAc6TxRpNUrkIaCb98lcyLgXLRFRJIvipNSCflKiChzTsTq+N27kysjouOoluemEBuI5ylPLPEZ6uv8jsr9U3lnudD4+bfPLkkhUi0hc+tqhlZXZWcpHWOFDYVVORnyCoxXa2WDaHqIWVJLqGKlbVzUPm9rsP/IkOSgzv27PaKRmdJvqgdfUnTEH2qtsI3frSHHn9q5pbptcWWIlOJd9xw8m7lwpmXj7nEOzI3K8t76fAhddZbBq//sSRQy/l163G3ZiVus5YTGE4ani/i/868Tfo1QKUbjq5ff1R4jy1LU0OCsth9wPL1Yn76+qM/Hl3fNxU1Yuy9q7j3ZFEWgU54GJ/KRPxqR1VnkDGqkFAOfF82EcEUInYVE+z8tlxCHEGnOOP2Dy833nWWnqSHb7/1Lc9+6wOrr/zxxO+uzhz3my8gHNpFta7nJ5wjFjKCnjCryPz5pIKG+FSpc8JZ+lf6e/rFB3OME8Z+vX3JujeHD9WO3QtPHb4awivn0/f5MbOheFP0gLlElSKQL2kBfb2bl4HGamBsvQ54CddyDOcmYHshcMkE5uq1oNoWLmXRElJVg1hsIjARPYGgLsBALruZzmMOYDFEyYR+2B30cH6pas/LdvVQC68aI+uq6Yt5ZTJ5CwaGpNPnpn5i8KTHHqqaJDmKguoDYlEu/Z0rl241uZOSxtKx2UWqB1K1qk/oBF6Tk21P/0ZvNaQL4okKRzSbP/mc3XrUNNqav1WVZs0xerL7Nk10u4QGm/POdKc5PW1Hrim2oPZyYQW7bTCbk7mBa+hVIL3gLNKQxAJ5VQOSsFi96gjToyDpQhIV15iwtT9xv9xMQIEzuMvRpxXmFAdziuMNelw46/XYOcdFF8qqfm2ZrBgSfGyZrJxJnJzWF4TuYM9nykcfoGfoDrqcbqdn9rK1sg+/R64mKX2f0SfXZGUYs26/3GFYT277+1MkeN2wFRp1VpJNFRxjs9GPs4rhCnJ0zHVd43JlGTOyLt8opKUkG2XNsu/f/d++I3+j/xxHppLvCb/51vXNeY8LZrILy36AvfO9h9ni2L0kxSHcqRaG+EkyeeVP17VoZjRmunIqMoZJ83aN7L38cmE0UatUfKiapEiCQIaHiJo+WV6YP3tKW/3rPf9Dr7iGvzvWsJIcItKbD0eXkAdjY8os08h/KT6aiXXVMy62BgHtMf9RGjqh+QetAmW+NxiT1WytAmX4AxeT/uIVLvZk16SDXaPuD+BPCT1eUl1dQkpKcKOSX74CLqLElFTgL8qYCTO9lInLAdw6hZulrFqVBYvgRR3CwFUNNp14oXOsH6qF2AboBkgKuEMJTDuQJpwhvhbwhitEgrLT5YWB5VQ13FM+K+cy+uU/H59AcnEFq8LbaO27YfIGxuIcT3DRN66hb9ygGemvu7lQFJNJ6KXGaV21RCVJAm/ZNsI7QvM/Ddkf50xQCaLeVUDSYvURXBWrlAHCu+P1gcyTpjR/9lnzyG1Dcuw5OeOMIzyeEWkupyU52ZEzZNuI18dsaB0t8MiPbuc65Fq5LuHPoiFGSSaijgsGjLjWiXcRMUImFxNH1Blr3Ck8XmnbRD+LTb2Ff4Km853tsSmynj7nXueM2nfyncJTVQ4V3RibdAv/cnQ7/wLcxnc8x62SC8QIcFkz2j45pj9DyTGdKBaGgZdcIadzSXB2yZn8skfX5I0Lu2caDHn8B+fjdDNfTt66rL2B3kTd9KaG9svEyJppvkp9kihW+hAm9Mf7ckk9UZd/Qf9FMr4op2cRx6CvwQnxRL+uf6An0QlcDaAcwLXPe/8o8raCeXUK2k0ME4hJqNOU6iK936G6EZW6jCM1oPdGZ6uqs7WzdyuaLM6vidJCWzArw+BSdAkmaATZlG2cgwViCAX+EF9v544MKBM9/HFhXd9BOA+wicD8NXNe5HUqrz6JpPEAG2TeDxJyUAfcwA8YQmvJFwqI0JNSdud9p1omtd59d6vLqSmYd/nGlasmV7V89fBNFis5w2i1fvRv77k7j6bktW69oaREVqtzR/tLT9Kr6X+dum2eTqdKD01sv+fP/01GPocrbKJnVJmTF7/SokovK6vNi9UrRcVtr2ek/Rdve/Sb6re0XND2A+p0sRr9ah3+r69l5Z8j58RPxU/xmzR8/4Ix8VO6lyzYTvfSB3aQ+exEFogT4Hrv9sT1/B30ATJfkQUVXb0A6LgKqCfaZefH9xKIKylrQRT0MxE47rIIv4KBGk0Pw/kudtPc7z6Nhlfc/QvNtsoiCpsYt9czm70aXWr6XtalpSWlqkRRInJyitXmNefmpGuTknjC87wK2Fdyakq6Tlcp/EhTYqdurfH788z6HHOxyzoy6PMMrfQE8jLsfKq6oNDnHyZsSTiw4OpOVSetTk7NyMxJTjVk8RIpKysF7p2Sqc/Kys10aJLT8oVMHYBBtcaJJodpTYUWny/YJqqlJFmWJUnUJMlCkopvC/r8FstHzCciwrZKAeR8Xj7CdvPH220Rt4zpmv4f2i7hw/D/0n5kUBtGzf9pG5YrzUOfGdSOQ7wXtiN/OLFzADovg6QL0sin/1lTEok10m9/vTFXsEzo+aM06Pn5X8xNh9HnciY05F625AYt3v0/5iwQ/xHmBJRQoCfu4DZKStOZZK0pqHUFoRT+cwFwhdGYb/H4apbUjzYaUwWSJKemGjLN2SWuivLikuzsLGNKmqwR7vaY5eH5q4IzVrUsWnTVZc3ultLa3PIRMyqen/LYqMUL6h/5+JJ54jpd0D+k0mN3GUzVw6fPmKNLclrsVujoHKNOZzDnOe0OV54l9tCMG8+pNLwWEFV6SkqKWqfOSdIln9tyyWq/OeexzbS7uZm4Nz/mq2HtcAjk1VygtRakg1yhKtOgR6KRRqCe8RWMPqerXOX3ZepgBCA8wQMoMsAWYQrxEOGekurhBkO2TQEktmx17hi/e1cL31RYmh2siJT7sksL5eZ7KN3ta18dNudblhcrO2oVL7cku1Yvv9m3m/C94Vmz/MPLA/6K4YP0tmq2ootomR1PjcKKYuZXNURwcZxQqCyE69e/rmP+Y0Cf4AlxHY4/zC+eQClXyc79rHyLYlYl6BvG/NJZxh7FlR6ddjB/fK0CKxuk4IElKvsFJXzYB5XtiPv0k4HF4RK3jgi6deETP//u8+UhG0YjbfTkRcomKIyjWI+LzzEHKxa4stJAMI8u8t0DSzzfPgN092y9hOmiq3nj9iUdiv4XWc3LV8QXW150JS99i91UVoDE10HiPgrn1wj0e4HGdxFIHFg9tqa7/4z7DQzYDwhXA00AueYqZQcLAh+dhpsBleO2QCES1x2kkEI7l5mRhNeD6iVaZVwUJDNNjKhsjAQxIiPn9/rKQUR0paG8YwkAIPilnXj4u+lG+uBPu3ZxP5F5ZBOZx0H8p5iHXEaqv96y5Wv6B/oo/QPG+D3Txq29P7hw05N09/onn/z3U0+SCu/IBRVmXrjB6Kjy+6scyX/p7q5fNRZopIAkdXpS3rCGKaMMv7gDkXfXT/TBn73fM/CtpJp9iaMs77W28CzjA0vXPxl+6t9PPrn+uidpcrXu0oVzCvIb2qaPtGerBdL48ccqZ/XESy4ZF9RmLN6/aKJVT+K+6nG6aYJ2r2A78lmUXfaczNjBcCrbaU/sX7nnC+h+Fi9lhmBGR1D7CenimFg9mm8f0DSFwqEmzQNwEU0ZoLDYPmBLsR8Ui/zKeN6VcMFWTJgNWITBjMso4vrf7gFh4jbzjEH97AfyEnkmSNQ5XDn6OnFOa3zTyyAJmAZe+HQEzS+4cxXb/hBVpDLx4Q56aeiiAjUPqOqaWt2xd93u8g2lfMD9T3dbaf9VaS3Z525qK6Vzn3O3NrnhNpz7nrBWVWm16e6Jk4YWhsZJtAkfb3W7CT6/2g1XpW1uN18Cz7fFttG5+BDZ9xwU5Ob9bnxbd9nqcFNOTsHCPwUuW3UpzIu9gJ090t+4qdxl3ALuau5Gbju3G+3JerRw6NMkuVz0K5Vg6wlRswPCmOInkNgpMR4qHaVkwH6FGElsiWdM7CBGJEM+weoHATNAh4o+pnSRJcWFQUwYF+Ha5MU45IG49HlT57kmqy6nwlljG65JnuSbWG61Np3rbFrcvFWd2b7Yf6dDi5IabrkGB0a19t1Vi9sz1Vsrl5qjdzlD2LNko9K9h3R8ni6sy+N16enhdKLRpWfQ7ox0ndlA3AYz3Ydns4F2w3l9GKN4Et7DF/pGXjOtoazKaJPUlfZLLruzyYefNqr2pa8q/Dd905g3TFq7f60Hn/EoZ7iUarIbv7nJX/HVS3kjMsk1w4uKGeVTTPtUm6PLzdUZjMm9JmDBWpBIvlHEkvg2cHG/D5Rx2EpMgkaBgNcQ8Grju1SaFX1fDZFsia0t46HVZYhr/xTrYkINBGzlpWtmr8StoRpx7Hur4h9U5cVN3DpbI3xFfM8dEItXvzxzJu1GtxtCU3EqfZ7JFs1GlHPm54o+IdzaicpuxUmBrTtK6LeTOANQgCpuFvNW8LnSCFuBgUtnElHmzRJ3ZkFfloFXIoCKeD2s8PW2eG3Zo6Z83hNCZRTHAiEIN5FW+7X5uBhHaA8XDccGh89TIrQFTS54kI7zscMPAhVQWzOsaggfPPyb/YW721vbdxc+vDcmbrzlHkf9onEl5lfp72g7/d2rjpFts2y7pf2XNxdd43bUDi9KRGJHyVz0FKL7mL/Q+XjNypf8PyI5IaWE0E8w9qP/pZWrnvUl1TmdI5K8z9IprlCSrmqkv4x2r3xpxYqXVhL3sPGTspNCnJqtLzjB1k9boBVHcKO58dwk7hJsS0ZUVGyzGcfAC8VPX2lCnHCOC65J0CA74BDjobDC7vVlZspZw8udM5+fyTcNuoy9Dv3MOrsYrV/9cVzehksiYgeUUNzpWj5vRnZOknX+pc2uBRMnLrjguu8n9Jka6D8Vj/M34i5KzLNbCVG2PQL8I002cHoujytCXUoaby0nLgKHzoiERgeMF2URlyQATXExO7NsVE0gb1Z2HTt6rKuSHBn6xa4f317gXbP4t6/RwJyx097es2jrnDt7Jy2Y1HvnrEtr7xVLou/O21ZXt22e4JmzXEXs2w9PXZxP/1ZOMx/PuOLQtNhfwjM7Zy4yrL6kH1NJD0BfME0AIH/cE9lGJIC9KFaZJNxwWpJ1WvT5DRG2jSqRtTqmxQq4ApLm0kmFddXvzKRnl9H/nfFxTV3h5EvrJ/Ia/QMr8oe9s/gFnX5c55nOcXrdC4s/qrWv3KfX8OPFK8oPHLls2hI1TSX/nbJ01mVHDpRZhVD1jT+GZrroTXwgr6e9/ett275ub+/Ji/2e3GCZX3NuU3UtP2DPlVTcY4FjO4gAZAoJGt4l6xyCK74Dz10HvnrvBX/g3Gv6sR90CWfpbWRN6d+yoneWv20ha+iBIv5afrusXnLnnV4fWhL19U+19z5F7CTLsYk866PDriigPfSrUnIvnc9dsPdO+s/33vm1fXd+bcMd3M9LaJfqVA0MEaIvaQfbWK8hgjy6k/uc+a6Wc8O4Mdzs+Ir4NB5tH36fHUiJF7mY5EQtKhpWLbLNGF83ALPGZQwwV23sQzJgpy/Gx1zlEvAqVHMbhd80jRm+8smlG49dT1QvpflSakzqPOme16/87ULy5qKOafrSG/yWKe82LU5P72jC8+2qqWxLsOi+p/aIqlRTptPgSxky5Ka3nhTqQ+0LQ6vnBGs3TLnhD6RmRGkpEY5sm/XA/PAsc+0lNy8s8TjyZrwt7F199T6Bv+/q1Y+SKcrmYn1PXL/CmJ2Rm6czp9nVmfz2eeHt2O5TyTj5Bmkrp2U+lh5Vpgl3jVX2j3UF7DprOe+yEWOmyabsIGuSVEL0aVJ2JOsouvj3WH/4zfJXQk8uINqrN/3z0IZMIGnV/xjWn0z/JW3dS78/gO6Od785r/GNlo29r8158C8bScco+uOoeBLMXQ/xSnulhy6mBxXietCVJN1K8qN/jXVfw591mZf9M/bxlXwJXcmXr4h9LLXRf9kWFES/uIYv5/uK8gX6duyjK3l/zMdXNseOKv6EpENuZutwlb3vgLgxzySfhjDvFBjbTpC8jSZyk1jW1dX7xy6hkd9nSNEbxmbH3oq9nT3WoE8xSHUvRA+98IIw4YXofr5YO9SSL+vpRrIJMIxlqHbge9LZnsQXOogiFYDqMUqAezSDjB/UEIUcaEhAbm4K9d6MJF9cH2q6KV1MTaLLyZYcvcapoROPf0InQkSfQ7bQ5UmpYnpRkG/hrwryTqEdn4m2wln4IN2WlUS30eX5hmReTda88Qa9Tc0nA5jaRa5JyrKlF1VQNTlbweb7Slkjz4VvtSjfKiOjhG8NQpvAHCzngVkWEJGDwGSUNWsb+6agglf13LQ1O2P7Y0vkFE2yxpKSzK8lX+Wl2LMtwtXCwksvsVCb5ZnLonsvm2ohf7E8LdRHZ5P3xXRzekYyru++zp6enGrCdfr9cqGR+cm7ma7gQqusTpIdIUJEp0uXTxKev6LDaBLKiSgEgiIQzYvu9TXh7vll9Db/YZWO3lY2/+4Nh6mKWbKiL5I17FpYCDnIGv/hi0mdqsmJp96O54odYJavN+LF/ne8lAtl3FzkPz/fscoOl1AvuCC4YxRJJl49UIiLbl+FFdA/9BD9jvmhP0Ra0jQ8OUI/nj+fqC6+nZX8ENEPfIi0JIl8N6lFkybJ4EuY/jeBDXCWGX++AyTbecRC0EX/PK/9JnaALfsZvKdF39T4Npwpim+CIrv9ermDNjlXrYlmMf/lC3cvUUg0K7e/Tc3nLdZKuWjxUvZaQPvX4LfEd9GgKYg5sgB6oEd2tVjTN5UtgMf3sa1clG0VIsqm/MpiKtzvoN+/BnhDYoXUxfZSxq32TWwPIIWxMHhMU5gbtmov8r0wU8t0o1e5tP/C/49BAS7/H2FidXd42mNgZGBgYGTsnFN2Pyie3+YrAzf7BaAIw7lb4r+QafYLYHEOBiYQDwB4tQx7AAB42mNgZGBgv/D/BohkYACTjAyogBUAdckEZAAAeNpFUCsOAjEQfVMEWb8HQCBXIbgFCYZkD7AKwUFQxREEGgkGhUKwIxBIzoDehOCYH8u8TDudvr43KXWwSDuApB4+0FCFN9j2F1jWTCUaA9sZkYvoBihr32MwShcHONV4qp4r0EEyxwn9yrgJ7+9SipZ6sSLVdBf1TGOqHNZvZGLWVKa5N/0dBzM786eLNqolrV1ZmAVm2MaraWjleLVCYRNqbHDq3RSfqM+u89MzwH6IsTdGR9eYOOOIOU1kjjYcO5/4C2ywYWYAAAAmACYAJgAuAIYAqADUAT4BkAGoAe4CLgKSAsgDEANcA5ID1AQcBJgEzgUKBTIF8gYcBmQGkgbOBxIHRgeoB9oIOAhSCHgIqAjSCPwJEgkgCS4JPAlKCVgJtgnKCfYKNgpsCooKngrcCv4LNgt+C/AMVAyYDMwNBA0+DW4Nng3MDfoOJg5oDqgO1A8yD5YP+BAcEEwQlhDcEQoRJhFiEXwRuhJYEqASwhLkEwYTMBPCE/4UahSUFLQU0BUkFWwVsBYmFmgWqBbqF0wX4hhcGNAY9BkQGSYZZhmgGfoaQBp4Gp4awhr+G0wbohxUHIQc1B0GHU4dhB2mHcoeWB6QHu4fEB+MH84gIiCGIMwg7iEQISghqCHkIj4isiLQI3oj6iRwJKIk6iUGJSglWiWoJcQl9CYWJrInWifeKCooRChaKHIoiCigKLYozijkKRwpOin2KlwqxiuaK/Ysmi0WLWAtuC30LiAuLi6wLvQvJi9aL7Av8DBWMKgw1DEAMTwxcgAAeNpjYGRgYDjAMItBkAEEmICYkQEk5gDmMwAAJwoBsQB42o1Sy07CQBQ9LWhCNC5cuDAuGt2oCVAgIMIWcSExRKO4LVBKI9JaKsVf8Mt05xf4DcYPMJ6ZDoS0GzOZzrlnzn3MvQWwhTdkoGVzAL64Y6xhl1aMdezgW+EM6vhVOItDrabwBhbag8Kb5D8VzuFU+1F4G/v6gcLv2NOXvh8w9Q4u0UUHBuawEWAGFx6mtMvcHhkDFu1XnhOiUKrS6ogoxJhoJJmQyMYCA359WkvdMTUhl48GilyRXAU4vH3hKTI65Cf0EL5T5rC5i2R9snnGt/BMpYjzROYIbZXxIpXvBC2qZ9SKaJ6MdkOFw1ziNQFKjGRy1dDEHa7QwzVR2iuf8EsrjITiPtGh9Uxd3JIR1jo7pjJU8eYrjwLO+G3yrRYeGVNoRmRFh/qcUgFVueuo0Dr/R+092eUhqwhkb0XtQ4lcOQdDTtlixkgp/ZVyOaEe7f7arONa27xzabV4O5D/kCnvTE67yrNBpqz4Eip/30N4OgB42m2T9ddUZRRGZ3+I2IhdiEEI1txz3huIheinoGCBgZioiIFJmCgWiIGK3WJhi6Ki4vI/U3T2/OasNetZd8179ntnr+f0Rnr/ff7e3ove/33+2vWlN8IIY9iNsezOOPZgT/Zib/ZhX/ZjPPszgQM4kIM4mEM4lMM4nCM4kqOYyNFM4hiO5TiOZzJTmMo0TmA6MziRkziZUziVPhVBUqhpaOmYyWnM4nTO4EzO4mxmcw5zOJfzGOV8LmAu87iQi5jPAi7mEi7lMi5nIYu4giu5iqtZzDUs4Vqu43pu4EZuYik3cwu3sozbWM7t3MGd3MUK7uYe7uU+7ucBVrKK1azhQR7iYR7hUR5jLY/zBOt4kqd4mmd4lvVs4Dk28jwv8CIvsYmXeYVX2cxrvM4bvMlbvM07vMt7vM8HfMhHfMwWPuFTPuNzvmArX/IVX/MN3/Id3/MD2/iRn9jOz/zCr+zgN37nD3by57iVK5ZHPTrn3xyt+n2zMsNMs5i12Zit2ZkzB1nJq+RV8ip5lZxKTiWnklPJCTkhJ+SEnJATckJOyAk5KSedT+fT/5VyUk46n84X54vvUeQUOcX54v3F+drfa++pPVd7T+35enje+xrva7yvkdPIaeQ0cho5jZxGTut86/u2clo5rZxWTiunldPK6XyfTl4nr5PXyesGvLBPYZ/CHoU9iv7wXGO2ZmcO7g17FPYo7FHYo6jk2aewT2Gfwj6FfQr7FPYp7FPYpwh59irsVdirsFdhr8JeRcqzX2G/wn6F/Qr7FSnPnoU9C3sW9iv1l/3hc5rFrM3GbM3OHHBTj6nH1GPqMfWYekw9ph5Tj6nH1GPqMfWYekw9ph5Tj6nH1GPqMfWYekw9ph5Tj6nH1GPqMfWYekw9pvuaQ5/uaxZ57m0Wee5vur9ZBrzicxk+132zMsNMs5i12ZitKcc9L43z7nlxz4t7Xtzz4p4X97y456WV474X9720+Q9k+OnYAAABUrRnegAA) format('woff'), + url("../fonts/dashicons.ttf") format("truetype"), + url("../fonts/dashicons.svg#dashicons") format("svg"); + font-weight: normal; + font-style: normal; +} + + +.dashicons { + display: inline-block; + width: 20px; + height: 20px; + -webkit-font-smoothing: antialiased; + font-size: 20px; + line-height: 1; + font-family: "dashicons"; + text-decoration: inherit; + font-weight: normal; + font-style: normal; + vertical-align: top; + -moz-transition: color .1s ease-in 0; + -webkit-transition: color .1s ease-in 0; + text-align: center; +} + + +/* Admin Menu Icons */ + +.dashicons-menu:before { + content:"\f333"; +} + +.dashicons-admin-site:before { + content:"\f319"; +} + +.dashicons-dashboard:before { + content:"\f226"; +} + +.dashicons-admin-media:before { + content: "\f104"; +} + +.dashicons-admin-page:before { + content: "\f105"; +} + +.dashicons-admin-comments:before { + content: "\f101"; +} + +.dashicons-admin-appearance:before { + content: "\f100"; +} + +.dashicons-admin-plugins:before { + content: "\f106"; +} + +.dashicons-admin-users:before { + content: "\f110"; +} + +.dashicons-admin-tools:before { + content: "\f107"; +} + +.dashicons-admin-settings:before { + content: "\f108"; +} + +.dashicons-admin-network:before { + content: "\f112"; +} + +.dashicons-admin-generic:before { + content: "\f111"; +} + +.dashicons-admin-home:before { + content: "\f102"; +} + +.dashicons-admin-collapse:before { + content:"\f148"; +} + + +/* Both Admin Menu and Post Formats */ + +.dashicons-admin-links:before, +.dashicons-format-links:before { + content: "\f103"; +} + +.dashicons-admin-post:before, +.dashicons-format-standard:before { + content: "\f109"; +} + + +/* Post Format Icons */ + +.dashicons-format-image:before { + content: "\f128"; +} + +.dashicons-format-gallery:before { + content: "\f161"; +} + +.dashicons-format-audio:before { + content: "\f127"; +} + +.dashicons-format-video:before { + content: "\f126"; +} + +.dashicons-format-chat:before { + content: "\f125"; +} + +.dashicons-format-status:before { + content: "\f130"; +} + +.dashicons-format-aside:before { + content: "\f123"; +} + +.dashicons-format-quote:before { + content: "\f122"; +} + + +/* Welcome Screen Icons */ + +.dashicons-welcome-write-blog:before, +.dashicons-welcome-edit-page:before { + content:"\f119"; +} + +.dashicons-welcome-add-page:before { + content:"\f133"; +} + +.dashicons-welcome-view-site:before { + content:"\f115"; +} + +.dashicons-welcome-widgets-menus:before { + content:"\f116"; +} + +.dashicons-welcome-comments:before { + content:"\f117"; +} + +.dashicons-welcome-learn-more:before { + content:"\f118"; +} + + +/* Image Editing Icons */ + +.dashicons-image-crop:before { + content:"\f165"; +} + +.dashicons-image-rotate-left:before { + content:"\f166"; +} + +.dashicons-image-rotate-right:before { + content:"\f167"; +} + +.dashicons-image-flip-vertical:before { + content:"\f168"; +} + +.dashicons-image-flip-horizontal:before { + content:"\f169"; +} + + +/* Both Image Editing and TinyMCE */ + +.dashicons-undo:before { + content:"\f171"; +} + +.dashicons-redo:before { + content:"\f172"; +} + +/* TinyMCE Icons */ + +.dashicons-editor-bold:before { + content:"\f200"; +} + +.dashicons-editor-italic:before { + content:"\f201"; +} + +.dashicons-editor-ul:before { + content:"\f203"; +} + +.dashicons-editor-ol:before { + content:"\f204"; +} + +.dashicons-editor-quote:before { + content:"\f205"; +} + +.dashicons-editor-alignleft:before { + content:"\f206"; +} + +.dashicons-editor-aligncenter:before { + content:"\f207"; +} + +.dashicons-editor-alignright:before { + content:"\f208"; +} + +.dashicons-editor-insertmore:before { + content:"\f209"; +} + +.dashicons-editor-spellcheck:before { + content:"\f210"; +} + +.dashicons-editor-distractionfree:before { + content:"\f211"; +} + +.dashicons-editor-kitchensink:before { + content:"\f212"; +} + +.dashicons-editor-underline:before { + content:"\f213"; +} + +.dashicons-editor-justify:before { + content:"\f214"; +} + +.dashicons-editor-textcolor:before { + content:"\f215"; +} + +.dashicons-editor-paste-word:before { + content:"\f216"; +} + +.dashicons-editor-paste-text:before { + content:"\f217"; +} + +.dashicons-editor-removeformatting:before { + content:"\f218"; +} + +.dashicons-editor-video:before { + content:"\f219"; +} + +.dashicons-editor-customchar:before { + content:"\f220"; +} + +.dashicons-editor-outdent:before { + content:"\f221"; +} + +.dashicons-editor-indent:before { + content:"\f222"; +} + +.dashicons-editor-help:before { + content:"\f223"; +} + +.dashicons-editor-strikethrough:before { + content:"\f224"; +} + +.dashicons-editor-unlink:before { + content:"\f225"; +} + +.dashicons-editor-rtl:before { + content:"\f320"; +} + + +/* Post Icons */ + +.dashicons-align-left:before { + content:"\f135"; +} + +.dashicons-align-right:before { + content:"\f136"; +} + +.dashicons-align-center:before { + content:"\f134"; +} + +.dashicons-align-none:before { + content:"\f138"; +} + +.dashicons-lock:before { + content:"\f160"; +} + +.dashicons-calendar:before { + content:"\f145"; +} + +.dashicons-visibility:before { + content:"\f177"; +} + +.dashicons-post-status:before { + content:"\f173"; +} + +.dashicons-post-trash:before { + content:"\f182"; +} + +.dashicons-edit:before { + content:"\f464"; +} + +.dashicons-trash:before { + content:"\f458"; +} + + +/* Sorting */ + +.dashicons-arrow-up:before { + content:"\f142"; +} + +.dashicons-arrow-down:before { + content:"\f140"; +} + +.dashicons-arrow-left:before { + content:"\f141"; +} + +.dashicons-arrow-right:before { + content:"\f139"; +} + +.dashicons-arrow-up-alt:before { + content:"\f342"; +} + +.dashicons-arrow-down-alt:before { + content:"\f346"; +} + +.dashicons-arrow-left-alt:before { + content:"\f340"; +} + +.dashicons-arrow-right-alt:before { + content:"\f344"; +} + +.dashicons-arrow-up-alt2:before { + content:"\f343"; +} + +.dashicons-arrow-down-alt2:before { + content:"\f347"; +} + +.dashicons-arrow-left-alt2:before { + content:"\f341"; +} + +.dashicons-arrow-right-alt2:before { + content:"\f345"; +} + +.dashicons-leftright:before { + content:"\f229"; +} + +.dashicons-sort:before { + content:"\f156"; +} + +.dashicons-list-view:before { + content:"\f163"; +} + +.dashicons-exerpt-view:before { + content:"\f164"; +} + + +/* Social Icons */ + +.dashicons-share:before { + content:"\f237"; +} + +.dashicons-share1:before { + content:"\f237"; +} + +.dashicons-share-alt:before { + content:"\f240"; +} + +.dashicons-share-alt2:before { + content:"\f242"; +} + +.dashicons-twitter:before { + content:"\f301"; +} + +.dashicons-rss:before { + content:"\f303"; +} + +.dashicons-email:before { + content:"\f465"; +} + +.dashicons-email-alt:before { + content:"\f466"; +} + +.dashicons-facebook:before { + content:"\f304"; +} + +.dashicons-facebook-alt:before { + content:"\f305"; +} + +.dashicons-networking:before { + content:"\f325"; +} + +.dashicons-googleplus:before { + content:"\f462"; +} + + +/* Jobs Icons */ + +.dashicons-hammer:before { + content:"\f308"; +} + +.dashicons-art:before { + content:"\f309"; +} + +.dashicons-migrate:before { + content:"\f310"; +} + +.dashicons-performance:before { + content:"\f311"; +} + + +/* Internal/Products */ + +.dashicons-wordpress:before { + content:"\f120"; +} + +.dashicons-wordpress-alt:before { + content:"\f324"; +} + +.dashicons-pressthis:before { + content:"\f157"; +} + +.dashicons-update:before { + content:"\f463"; +} + +.dashicons-screenoptions:before { + content:"\f180"; +} + +.dashicons-info:before { + content:"\f348"; +} + +.dashicons-cart:before { + content:"\f174"; +} + +.dashicons-feedback:before { + content:"\f175"; +} + +.dashicons-cloud:before { + content:"\f176"; +} + +.dashicons-translation:before { + content:"\f326"; +} + + +/* Taxonomies */ + +.dashicons-tag:before { + content:"\f323"; +} + +.dashicons-category:before { + content:"\f318"; +} + + +/* Alerts/Notifications/Flags */ + +.dashicons-yes:before { + content:"\f147"; +} + +.dashicons-no:before { + content:"\f158"; +} + +.dashicons-no-alt:before { + content:"\f335"; +} + +.dashicons-plus:before { + content:"\f132"; +} + +.dashicons-minus:before { + content:"\f460"; +} + +.dashicons-dismiss:before { + content:"\f153"; +} + +.dashicons-marker:before { + content:"\f159"; +} + +.dashicons-star-filled:before { + content:"\f155"; +} + +.dashicons-star-half:before { + content:"\f459"; +} + +.dashicons-star-empty:before { + content:"\f154"; +} + +.dashicons-flag:before { + content:"\f227"; +} + + +/* Misc/CPT */ + +.dashicons-location:before { + content:"\f230"; +} + +.dashicons-location-alt:before { + content:"\f231"; +} + +.dashicons-camera:before { + content:"\f306"; +} + +.dashicons-images-alt:before { + content:"\f232"; +} + +.dashicons-images-alt2:before { + content:"\f233"; +} + +.dashicons-video-alt:before { + content:"\f234"; +} + +.dashicons-video-alt2:before { + content:"\f235"; +} + +.dashicons-video-alt3:before { + content:"\f236"; +} + +.dashicons-vault:before { + content:"\f178"; +} + +.dashicons-shield:before { + content:"\f332"; +} + +.dashicons-shield-alt:before { + content:"\f334"; +} + +.dashicons-sos:before { + content:"\f468"; +} + +.dashicons-search:before { + content:"\f179"; +} + +.dashicons-slides:before { + content:"\f181"; +} + +.dashicons-analytics:before { + content:"\f183"; +} + +.dashicons-chart-pie:before { + content:"\f184"; +} + +.dashicons-chart-bar:before { + content:"\f185"; +} + +.dashicons-chart-line:before { + content:"\f238"; +} + +.dashicons-chart-area:before { + content:"\f239"; +} + +.dashicons-groups:before { + content:"\f307"; +} + +.dashicons-businessman:before { + content:"\f338"; +} + +.dashicons-id:before { + content:"\f336"; +} + +.dashicons-id-alt:before { + content:"\f337"; +} + +.dashicons-products:before { + content:"\f312"; +} + +.dashicons-awards:before { + content:"\f313"; +} + +.dashicons-forms:before { + content:"\f314"; +} + +.dashicons-testimonial:before { + content:"\f473"; +} + +.dashicons-portfolio:before { + content:"\f322"; +} + +.dashicons-book:before { + content:"\f330"; +} + +.dashicons-book-alt:before { + content:"\f331"; +} + +.dashicons-download:before { + content:"\f316"; +} + +.dashicons-upload:before { + content:"\f317"; +} + +.dashicons-backup:before { + content:"\f321"; +} + +.dashicons-clock:before { + content:"\f469"; +} + +.dashicons-lightbulb:before { + content:"\f339"; +} + +.dashicons-desktop:before { + content:"\f472"; +} + +.dashicons-tablet:before { + content:"\f471"; +} + +.dashicons-smartphone:before { + content:"\f470"; +} + +.dashicons-smiley:before { + content:"\f328"; +} \ No newline at end of file diff --git a/src/wp-includes/css/dashicons.min.css b/src/wp-includes/css/dashicons.min.css new file mode 100644 index 0000000..6fa3ac9 --- /dev/null +++ b/src/wp-includes/css/dashicons.min.css @@ -0,0 +1 @@ +@font-face{font-family:dashicons;src:url(../fonts/dashicons.eot)}@font-face{font-family:dashicons;src:url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAElcAA4AAAAAdPAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABRAAAABwAAAAcafGMFkdERUYAAAFgAAAAHgAAACAA7QAET1MvMgAAAYAAAABAAAAAYJYFaPZjbWFwAAABwAAAAQYAAAJSHHBJFWdhc3AAAALIAAAACAAAAAgAAAAQZ2x5ZgAAAtAAAD90AABi5MgFCx1oZWFkAABCRAAAAC4AAAA2BKJ+GmhoZWEAAEJ0AAAAGgAAACQPogeuaG10eAAAQpAAAADIAAABimdQUb1sb2NhAABDWAAAAYIAAAGCwp6pVm1heHAAAETcAAAAHwAAACABEwCdbmFtZQAARPwAAAFzAAADBkijZWBwb3N0AABGcAAAAuMAAAeK+aXB2XdlYmYAAElUAAAABgAAAAZne1K0AAAAAQAAAADMPaLPAAAAAM7Z0U4AAAAAztoX+HjaY2BkYGDgA2IJBhBgYmAEwv1AzALmMQAADH8A8gAAeNpjYGY/wTiBgZWBhVWEZQMDA8M0CM20h8GIKQLIB0phB6He4X4MDqp/vhSzXwDxgaQGkGJEUqLAwAgAOtgK8Xja3Y+9S8NQFMXva+tH4OVaEIeAQ0A6ZAuiYnCJijSFKmIHiYPEj6VOFUFwc/F/6+Smgzirk3rue+iixkcKDs5OHrjncuDwg0NEdRrdLCnnpLouqSo3VOx+RimN0WTrAx6mEWAOEWIsIcE6NpAhxwH6uMCVKPEkkEgSSWXNeCYwkUlMx3bsrs1tYfv2rCyJHInQxAxCtBxpHstIHamNHgoc4RSXQlKXpoQSVyRlmiY0sUltZrcr0qEdlOXdxFSDv/iT3/mNX/mFn/mJH/mB7/mWb/iah7zFm9zmVV7hRV7wz/2Bf+If+/u60Hs61z29o7uj1X8jNU4/OFVzVvtdoH+vb7THbaEAAAABAAH//wAPeNqdvQlgFEW+P97VPd09k3syV65JMneOyTUnEDIJEO5wGK4oghzDHTCKIEiCigFROeKFoiwqouIdFVmPLKvo6ngjG3F1WRdXZbPoc9d9PB8kM+X/+62eCQmib39/Jt1VXV1d3XV9v5/vUQUncvCPnOG7OIGTOA2XwqVzXJXWohV0Fp1JSyzJRKsjZ3qfoE9FnqA7yPQnIk/wXbF6chv3E+3+idDYJ9xPxE157ieOcAP+VXEcz4W5mPyK1Atl+jlOQ4IhYjTlE1O+EAhqiCzpC4hRL6fxsgSnfD5EgoFgiA8GPJDuCYoHYjW7stfdNazs4Wmlw+c0rhwWeyxW85zZvNxszh29xDjS5ptaKY9betVVPqs3tcGXZ54Gt6aZhY38G7vyUm3O/C3lWXmWVJISe4x/4zl2d7o5NzAuo8rmu+qqpePkyik+a7121ahcViZHiJuLSHWymsuENrF4jAatXiolRGuzOv1aX4CcEdob165tjNCUCISyem1jrL5xLU0hZ9Y28l2Na6HaAve/UMZn0nFoyzRWjknWEJeG+L0igWbFQ6rbvTy2PrZ+Of8D6YjEDvBNfVOFQtqi2rh7OX8zS6ctkftij8ee5GfQdHKGpkC5EW6X3CwP47I4JzccyjVmpJM04iK1JOBzOa3phDgDEC/UsGtJJpLeZAzIxCilE6nQ5cyoJSFiYqke6fuNG3c3/m05kRoaamtrn6+dRJ8xD22893qyKPotbywosDYVxL7FoJzszccbdM/1yiN0QV1d7fNSF6bc2zg0n4iTGqCAuroG+szyvzXu3tg3Cwq4rKCQz4+dZuHb5AF2Y+NGsngjPGKm82ufr6vlOBWMjzDUqZnTcblcMY4RovU5S4nLItusErS+0WvxBDiPUS9ZnT7RomVhwOsxaS3QoP2Xor66+LHNtGXzY8XV1cVCT3F1rO7oHXccvUM4RM5AcMdSUy7thjZV4kI731VcHYlUF8fq4QH+BUw+quo7tRSfEck5Ki+j+9gFx/ePCQF6lMPuEy0Gi9bLNwk9fQeFwmhWhJwR9b3fhSOiHvv/NHdK+lrq4dRQJzuOehcJ4KgXg0ROIzaLLFldTl8t1DSgUe7IRCygXa+S+pzLna7M6Fuzhc3Xer6dT1tb3a1ut7u1RpBIfTbey6FdUp6SVedyzn6vJbphumckZCptc7eS9nln6H64lQm3cuirMP8i3FtSTIpyBs4C3y6pXARbLEicmcGA3aThjRJONDZ+YDZK7Qvp99fFvppw7K4J/Dafb+FcolpL/0pySH7xkN49+dPN+fnm6flm4aeFPl/smgl3HRvP519HMhfOHeKmf6WnSMGan2IFZnM8IycQN3HLamk/zP9SbqzSuzbL+Z4lXuzaUmLAjqwhNuzNamwYmHqJKz9emRM5WZf7ZXV1ce932Neivrg6mhXGaNhcYu6PkDMXSetQdWK8byp2urm6sXqXwWw27III78QY3TcwLfY5xhh55Dq4ffIYuQl6lCPQjU4Jp55JhuZUQVMSV9AYwNml0h/iW387+cjoifU6329/oD0B+kngXT8x/QCJ9RNH66R9h2KbD/l0oyeOfn3KoR/oPwLvBkgZZPg3S6w/AuNND+OtC8ZbFlcJ77aWqyqIMyR4PTBO0kTBAaGZpKls1nK+AhonRLwq4+WXBNzZWkGQpNLaxaElW8vTiEqbVerfSDKu+WNbuv+R/X9btPjLZ253ua75+DqV11kzfnyNThdcsXBi2don5sjZY0dMHUr/fmjLsZXnxHRXfpbJYk1JPtfy4SaFhodlNXyPi6uA2tskGeotyQaL3+mSXUGny6b1BoKuoCkQ9FsMRlPQJBtNXs4T8Dmtkl5Wf54TvO/YfU1LaPeSpvu67wtmff6ZaSikzGgmbpYy1PRZ1HO2s/Nsp1C4YibcgSyfZwXhTtMSUrxoDqQEcuMpcxbREZ2Yl31XRLbKlwCNhV7hjJnARVQuQRQsLmV4Z3oCfvYNUu1ro0fPa6HvbH2VfrKLdoeF3LFVq+cRvmLV5MmrJsvlr1FKf5rX4q+jLxbQbRGB3EZqV88bHTs5eUgQcuC7SJHcDONYizOaeFQmuRzGpyR7NcQbyLTrrHZXMB/GaCBo0xBbmiD03Ee0C54MvbL8Nz9Ye+g+uu9o1hFS9vT99F/9qWQumXs0c8Ohf0r7N7a80TjvzbtpC+k4QDL39rbHE0gHbdn4lwfncEgrI1BfZS5lw2wu/vls4gpVJklVaHcFVKzeRg8BSuWHH5svW9l8WQfzJUgaiW/DBvo+fYa+v2ED/8ja/WvX7ofx6+7dStxCIZI2zBzNgrMwfu+OHXvhOImZ1sYOhMNh+J5ULgJzuxnGRTpQbxP0QQGMkFIYI0GumquF2T7xIvPdorXo4JO88SNB2YPwnQ64N+ga7qsGXMvNUAc7q8OJ4upeOyO5xK389a0sMcMMj2CD8U3IMKOxASldg3OQDiQbcRKi+gwS3BH2j6aYWa5wGHi6OxGHG/Eo1Bv5QVjazzBC/mCUYImjBFcQJgbMEpgKgBh64oiBdkNE2N/bG078IX6InkzgB6GwcW30mQG3kZdw0OdH4V0ytHIB8hKdTQdYws56N+ATHEaT02ZVyU67zSoHgkJPzFgeqbxL6BF6oiMaq4GKhfmylixfcRd9fc4c+npXkT+rReghJX2HVGuqsS3CrGqxP/z17hfll/fseVl+8W6F58mj5LWABrWIYACkIeOzAH5DdiZLu7ebzbSx76Cq9GD+tNjf+ewdsZ6xctN2wFj0kuhQ8cRBM4newWftiP29mwNcCf+gHkdhpNi4Jpi5y7kWSMrgy4m9UJVG+IzMfAIjN0RgDBszM3gcxk5IDTDM6JQlm9UVsHth4jklgx4QpNFkBKYBmCdEkPCyHE4glJKxgOg0JKRywX1eQ5y830d0+Lh8dNHLP9KP6Cv0ox9fXgRxUkXGkKofX+57i6wik37YseMH+gK9g76AMVJDP1qmT9MZbpxu0a0iCz68j5iafXNMxhxR8NQWFtIfDE61Wp+u12+abltms+shOr2FvEREQW3UyElzP+k9QTa++z9CyTdr2pYsEUYrr1p0wSeIswa9dBL7kL5iwa/mvRUkiTx6ZNVCeeIE84iiYrU4a8vwk42N/PdErRL4oI8kS7xA/EGipkdjefzLcnZj4w1Dn/jjn+k24Y6+noXk5m9foO/Fdpbkc2J8zDbDiJK5ZDZjOZyLBCj2oMMtruvdqmqIngRcww6+KXZAbj57VlwHc6L7/AE0cQbpkEU5DbBFKZTmc5UDX8wMutJUJqSEwYDj50nCzHGep8dnf/jQwwte3LvSk5Hz1RP3zF8gPHuxVP74pstrnRk7yYhLvq7YcvCDczf8MdrUtOtiiTi8xH4sqQLklcJlYB11gLctBAgJO6CCGmIBZhY70DeVuFWdfVNVnbEDsQNCIVIMublvauyAeAIq2IIEAENyBsvmB+BUJ/JAq2Q+LxV4GQnopwNaEk9XNTRecgvtRkmhkW9qXIsHUoLuMITiuh0TXqLdxL22kZzBdNoCRwoQg/40mDKMx+F7NUBvtdDS2ZyZK8R64dsc8BJR8OosNsFLEgdMUw0PgLW4+uzZavJyJAxkOhwJAx5KnJDIn1H6tbr43Gu8FCquDuNrzx+Aa3uiWUI7baEtDP8o9Q8jDSKOAMAxqGqhM4MhcVGbhlVWLnwB/lXV5KLqD+gXH3xw+/hJ0dbMSPvtLDpE2hORaksjfd/DNbF+YONXR6LtNzzF4kJ1kX+APJDOJIIRiZrqJVuCuEL9uAR384Vkb/89T76qAOa9J583fSml+caP9537N5zF/+3dyncpDG4fEZMM5vJhjZUKbyueNMxny5YkVcaQuqUtS0Z5k+Xm+GM+LOLcazgdhF7G+Gi3OqdxavOcuaNKGF8s5rvcY2fMGGs0phQvmTICUgyJsRJhfFHH0OIF3+8FPscVBjKchVKGeII43aGQ+9z7eCZOQMsd9A7ScPo0PXhaqgu5+xaW1deXqX7jDkV6vzut3MB3SPCOXf1ykw3mnxd4Lge0M5/Xp/FAO8t5X4jPjGMw1QVhgstK8VDIJfeRYe/c4PPd8A59iy6mbylxubWpqbWJzxkYxCQW/J7xFrl51OrHX/nbK4+vHpWIxGxNLMOAv9gmFrRU4zMgY3eQM4x/JivSVOIn7UceibwQqJA+EWOyryKDKc+Y8CmbH0UwEML8QYPNYPPb/F7AE9J+mFzRVlUDsGxg2mFRD3w93GsX2iPsOhJhbccBbjkKOOo8LYQytQlqCBGXn8EmRhHlo2crFfoHUgbtltU4Qc6elfbDuOhBwMB4KMMOLax8EcrPgvI7BtLagaU7LigZZxqQpHq+C4rtuKBYpdD/s0zXBWXKavjaWL2s/sUiYZwOLFMpDU5YgngimoWPQft3KPMfIaG4TlyHT2l4vAJCuY6upKs5wnfBvROqTuWeeAJTkazyTfF7+sRzoh5TAZ7dSbaze13iCRCZ2T2AaJCK+WMHfvWerOBgeRi0QQHDm16GOBk/01ri0qISGiwGhEk1BIe9OCDO+kFrg7NywEx0n3uNuGGgkg44RVsVwMd3KSHB1uiI8E34J9X1bgV2GGpqCoXZuRflxMGn3tVCe7Q1jIqyxIHtCLVfKDnEJ9goNBEbCZrEB7bE/r6FHtvyrfjE3JiJ3N6GcvufuD9JZ6WzChcDeeM8JvL7Mu3AY4SeB4n1WGvrMfoFfY1+cay1mywj98dekc6eT2o9RqwPfkKWHetrFtT0eo7pAyJMlktnMtOFWIsHaClriElDGGApOn799cfpnwCu/Aljwu9x7MMUA56GTCKiSPcDs5Ai9ljUi7cig7MP4qMarJeGiESAdxEH0YlE5xB1xCH00O7YAfKbq3CgtJA9sQO0+zT5mB6ZRd3UPYseIR/LzbEDE6kntgxL5e8hH04k62jpMLonFjt9GiBReBg3gGfhu9ibABWy8ombb6LhFuT7V9GFfNPPi8PvxHQ2/nDuWUgxIYCKspAiwRemwEiGPmXtibJxM5emyIXGDIY0cSCGiC4ufxr0JlQWGFE6JEbxzS2HD2+xOJYDj31Fc3DznJtueuWmXHrYtjlTkAufyyf1MIN/T88cVi/v+0o8cfv9sT+3Xz6nvX1OoAoyvZmp2gBZkAiSA+SAVCQVMzqqqBiDGtTv6f5Mn6B3fUia6ROfk1mk+QN6F7/2Q7KSPs4uP6R3kZmf08e5/3M8cIUhklFOCtNIhvFiA4KMIhmntmw5Rf8F54sOhL4VW0715wF5hnTEdWkmmLtl8N3ewdyR6X4KjQZByxpOS1whEm9Do0mGSdcvlRaHkR9GgC8Tt91VAXO2wmVXNcQ1esWo3yPuR0+ffhQHIcNX3bH6TzPHu3HCusdnfjoYMyKucnD13KTB31RDBmI8pDD92CMkeaGbAW0UYBRRB7Al9phBqnuztKamtPdMaQ2LiCmlNb3fqRr6DpIzjBWSQl5tLgwMnVQcbR3S6DQSQoTUTIur2loxsThP5F8L15RGb5DqlDJqSt9Uyqgp7ZuuaqARxldpd5J96RWrpw1FjA6VKihQpRc7yy0mBCKxShitN5TWgMCqGYCpTAwtuBjNRBmdC4JM7h8go2fGEQHK3vx/EGc4E0EknCMMEojr+g7+8KuxcHXx+aekOoYKqpEt/VpsYF+drwfnuFADkvg26Bp+QFxBuvhSfPW5vot81sCqSKLyXmRX0ZPn4xynyOT4HUdB/jdwWYMxDDJRGAcwUEz4UoDP3dGTqG8AotMFOBx10MCESYdQiFEMGehrYfdi9YB28C7HKbpxRWZOgjdlcXkod8BA9Fs5g02TeKnIAlSd8F1v7Ly3h/7reSJJ02kKMP12oRAoKRBimgJYvkc8ccvuY/Qff6FP81/1bqUpQg/golg9iCPAVX/hfRp4JWczeIwkXjsdCwSEa9VvkDoiPU//1XPvzt5iLA1LZUwhjG+jT5NpfyGmY7uJHG1F0qnqhDO0Q7Q10ZYq1pZHoU+Tma0EADQxKGwczw6LBhVYooXIR2k3lN6N8mnfKb6L7uO7kAnTfdBmc1UNERRWIyivRkhHbG24l8GWeJ2wrxAzKeXHeT5gR6iGTStoBOgoeI6V4MEnoVd6aAsiPOWFyBfwZSAY56AmD/V2jJ0Dj4lwx+Qk+H4Ts8fIDqD4Lif+bFroIw+qKaRXp0yhp4NB34L5be3bservv3Jo663CF6/Qpa+sad++Y1Pbgvn+ILzrCDlCj0+ZdOtWpey3oGx1vOxAEH5eLNMqS/gDpiI6M4gBch965X1ERtvbWxcs8AWD9PQU4Qt4waQppISGaIi4g/75C9o27djevuYVci+TUaD5I+I6oMMZbATrJVmLyhRtOWrbC40qplxyWsV1j98U9nhuehxpbewAmwjiuluPW2P3ucN5eUK59fitQGOz2QRhc0OZo+p+DaUFJ6FC3Zk6H+kooDNiScxOezzkm4T2BHGPYIS4i6tBDGiJtrYweiecUMSQLvwKGG4swPHbMkDUiMtGkQv0kraLy5FME4kmuXg4mAT0bkXVolCIqgIIBqtQcXpFW4XCsCI4tyhhHHcgKhJPMOkvH00b7J2+QBBPICOHGIfRix9sPvTB7dGs2z/o3CTdsbSq3PP7qx89LXyT9tbNKC9vflObk7f0Dt3CdacfrWRtGyFnWLlmoN2jIIUJvGkSMxCExExPSFVLyiVrmiqd5Iv2OJ8SNr3/9n23LRivzZSyGmd33BMZfPnlfXdds3RCMDVVzKypb7767sGXfBrTtYsngk0rVjTl5sU5zqCr6ItxKVhtntZw+cjyQVenmFofaPd5nKFj0mrdz3XDLpiUIhseNq3XgMf53uKYvGwsFEz5iq0Im3Nwj4RxivYFVTkF7jD8cxf0nSpwu4UmlKVh+D46KVgPYKE+iDOa6X7jT0LONkCotLsNshfg4zE+LoLzXauzwjUIHmrCWWzeED0hUpd0mHNzQ3DGZ8qKKjLxk9OILCkEIP6T7C5nRjBgVwmBDJezUJYyTMZC1eHbnMuEbLW1IqSqsVTZ7CajShhZWeXx+bxVFjdfVpiVpb+P3rvpwQeXk1ySa1u8eAn9YvGSJYuJVSq/ja5/QDBKuYWlqjJLFaLKssqRgmA0OG1VluFCbXlhvn6a78aHyDsPLp84MZazhFiWwD/61yVLkCYigZb2D5B/+zmYkAjbUbqLHYgogaoByQseijqQiWEwz0AWgvG4brAcrUhWXi0yCkBztn7N4hmhp/e7CNBoFJW7lVJg0gPJDicKxYN04FQChi/1213TgW4XMH5fqlAURbzzAsT2GEVLObQJsSSm9kCpTtWJRKT3OyQm2p0Hd9IbiTtjxoIZdB4CxWgrQkTgtvgHOKQ4DOhy5tVXzywdOpQ+HgeZgwU4df84xjpnxPVxFkCOHKIM+CyUoRWjtMkPk9zBGNn5Q1ajSgnVjtFW4sbJdRL1gshzEgfehHpDPj3Che5WnEGRyNpGVEcCIkLlJJfA7qwfJYWvoZCIygD9eQBvF3p2EuHVK6Hfuq58lcbo32js1SuvfJUIQo+SshPavH5nIhXIFeRmtGZAPZOV2iXaVVaz78A//EyEtdiLDBuBbO8WT0h1wGvzsFXgczxBhSf6Ecm7nBZBCyQQdfc22esx6GWpFKRi8tZH167z+lbPWLxmNY2t37rS5527dNeDf/J6VhwAcfu78MLnN05syNWk77rmqclTYjFiKbRMmDrmzw/NLi1FmkvehzGtgveiLGQjXtkS9BJb0CK+9Qnt6Q7F5oSOk6xPQvzD4rpoKwzCdhxfHWwe1LEa6phEYkN7qxM1B3q0OPG/FA8zdhNGFtB10aioV1ReAK0ujDD9Hbw7h/Ud6nV9QEuWcCuYXks2AaOXAfkYLILf5g8yvu9HRbpNYfwmxAGsAfEynRhYVmhYuK/cMzCDeiIPiKNOl8Ho7e8GyGPCOjSNvrGoPCWTJ3n4wRue8g5JM2iSMtKG28xGbbYhtyzLYMgypaRKckpyxUKyE3Pd6HDUTg4W5er0hmHuyoICb5ZJbyjJzc/O9dRPLSnNya4qyjbdqDQA6VjidSRlltD/joRjT49RVfp0OSZTngUOSUhJMQV0yUnJKVnp6Rna1KrwsDfC9LPy7Jyi4ZmiXF6QNTIlxVyYnq6WUycYLZbqoqwsidfk5dWHgQbbSYf0OfSbniGM80YGnv+54aE/TXixpvSukOHZW29b/upd47TGN26/Yfo0wXE+8U5IPIKJ/KNXTfJb0q4jmaPf8O55j8a2Hvx04oQbr5oUKLwwkfsFenqBVQVnO1MktyuheELRwiWO/6QMGLgnVQ2KbQbD/z9lSPsBsrQjn4yHF5Yh/qwMnULRSVwjaonrGxEcIyxGCwEc3WhTwC5H6UaxpCIlZyA8oa/L4PI5JzeMGw0ydhM3F7UlwDGDTmVcg3wPveSXlAHr9wUDxCvYBG/Qq9MOGrsYscn+/uEt2mCGQEFiIqWUMDWWVGm35Thtk2fPHDnCat3W3jSusMRpv7SsorIq+szSk8tPLhn2zbHPFg0Zkp83wpOXNyTQNnVGvbnAnFdDpz0TMGnS1RqyZWGdtbCwILSUpqHnVxhFOakrWa29xOVwjK2/4u69OdOTNOqhgZZlw4fHmEnlUfJ87EC5u3G4zZai0tgc3sl2+9lHdZml5Xr94j0jynw52dtMpnJvVlbsFRDBCsMooSE+ivvJiKzVDQw7yjqHrC0mWpeoY15HJodgKiZBQQxq+aa2L+ktbcDgOtroLV9G3+ab+g62kWu/bKMtqs62L8m1bdJ+vNOGvYDX0XNM/csei2fkgIMlsPJAHp7bz20TutXa+ChgWBl174OPi9+z+AU2XpRr1EpL+1HHCjB2wF/HBckgGKeEcYjjBVrqgDumKBJypP8fCLQwgJGrAWdu6k/tVkLEaWdQvgGsbORykCMgOmAyiFafL3hCgl/LplRk27Lld0eyRyx8IPLQwpE5MDtPxP6w8/492/ia2Is1126YM2zo7OuurYmhAkLV30f980sHlRz4Y/xw0LE/kvgk/CZyRvwH4zdJqGVCPqWzuCw6sfQwXQgTsGsF2VdKX78bJGVUFbnvI6fO+31AH4nAK2zoE6Rh1syEdUfxmDNBUnCAzxwRbMloD8wl8Kc6TiSQvdVvMEFNaK8uvi/QNzV4fwI7Y8uFw0dfi6DhJIw2jnAYpzcT+PoM6DVV+1/fh+KeU8J4pqhIATE8BUPFRjrwO9OB95cN+M64Cs/xM20fehEJzJbj1Q7+SH7z/edR+v1BwETRkzAEzn/bsBK8U1KCH1UybFiJ8pH/FbuJmTrOJPz2pE4YAy7mw2AmeplI1greWUN8QYJsFF0lKwjSIMJ8UT3i3atqamLLhj8z/EqI8PcMnzWzhvL8JrP5uLm0xBzbiJEZknjl8Fnds4bHltXUrGLRGn5XTU1fBDJOzz9uhnz50yEjtouW4Yw6Zrv65fk1Ku4vw0islpHaxGxCbbIcj4sXhL92T6pDmI20GVFZNCss9ITD6L0DIYDu/vPF0mR1ONxrD4fR6h9mzjBnWCTSf7pYGvrPMv6xinFmhSCnsU62IOkGAcgCEpBWD/QaK1pOFFIv9BxeFB5tWTkV5vrOO0ZOeORRAKpfPvLI+NBd9A6+afqq/FHhheLB5uYPXrs5tNAbiSzavPsQSb7//t/soWdfvHfT8kgkGA5t/t2HK5oRo4cH8DDUKiENyOesCj8U0Upm86M7rmMAa7TFQxjTLcgewxHE4hGhJ9qKRIYZc4DVFdJuqS4cVux9++i+BNlRJhCTW9TMKtL8S+9HHznixffbBr7f2++AAXwGyR3zU4qgDR6FDyR3kIxTAJl2mL3rFz4AcXg/H0+HMVbDPG3sNqtKAqHAqPJ67MSG7R5M8FOr7BoAKoEbC3FVBUuxSvu76OHD/VLCzsNkJB2zJ8s4skavz8vzNrXU3XTHunFjzbnTgxnpd+b6vBV5ubm584QS0kpGvXpe8HiVrCwdUuLylObl2B0G3dAbJgwbNn9kWVlNkcloo+/lVHg8OTmVFdm5im4+wh+U/iSauHpuMncpNwcwMowp+GaDAmptcXbvt5lsLptsC9r8ABdM3jg2SCdeRWnmMclOlwIzYNCBkE5krwuHnktyGLyJJoBiDKLLZlDAhlReZLUUjWm6aUy1Zm5mcOjCT7fPWVL99bClc+bcNGf55c8/tzoUzFXfqDbZQ3Wz5jQg0rBPq7RpiIN+prGV9Z3KXGLgk1UpfBp5/lpXdl5+/ih6xdP874TXlg4vLBBkWU6dnjNlVEthxdTyst7exx7rDZ8711tsn+SzaUKVY20O5yWpKcnV7lHhSSVDyPhAjWhNKU6qrn5YSNdVlOgy6VlCCH/AlOUpx7ZS5FLFjpEH1MXKBbih3HDGt9FLXJJdtbziJC64FB9x3oumNwcJmuS4b7gpXXEND4oaYE06DRGZk3hZ7SePJ3zEG/aPKChHH/HeJtQtR5jzOvMSOlk34VbFRfy2b0ffiw7itcI5VBcgsEQlulAofc88xssLRuxPOIw3PH681r17I9Ipxd+I4cfY26O/vU1xFr91Qt1ulnWKUgZMgA54abzOpIPx41TAS2i9KYdah7gxSEUDWh/vtBfCgDdkJGwCqgs0jpq4L3F/QiLsN/GsU53sPG/U4v+XMSb6pMJEZytXE8kl6Bsyll2pvlUSFbMF6fgzyX44YTR7mP5d+ISlb1cMCuyPZpC3YwdQxTTj04HJpxIq1YTvA6MnWpTEbYC1QiCpB4LaNFLOI2xyT+v+7CRdNe27v/70fkQ80WtHxUoeMZv53OhJm9paoFZoQgeTd+MyPWEuFMqh+H0lDqkuwjRikfj7+SZpP7Phi8jTtTA0MC2CeFf4htzJOg5dASBvByGM1yHWR3sij4a7fBEIfiAYEoOoA+BVhcYMdB5S3QYN+91D265SufRFZkfGZrN5c4bDXKR3qa7a9lDsVZL37rv063dl9UP0u4d3nFsgWDId5hLDM/PnP2MoMTsyLcKCczseJvorMNe7JK9fbyEd51JAOkTvTN0A+2HCuEUcWtEhah2iTtSvGT7+jqN3jB8eZLI7GUnG0azYHuZ68uTT/DN8o2XNmKV33LF0zBoLuZpJ8HTd5mjre++hDmF7zHlevkH+jrQe9UGlMBJRmmdWBqZhhi+w+JyYRCC0oQeCTWvvR0bEby0X4V5HBIBOpG8qun+RjjXRH8JCIYTT0Ec0LNz96Bq0d3YsenzdqlXrHl8Ut0Z30240rKg61zZOWwMzBCGZe9qatbGZGA3j03An1hex+Ovq/BaaktCRw5hKZtY09ClzMg8Km8GGYMzP/MgSuhBAaFq0Z6C7CdbgDCDnSO/WSETU900VjjPvqHDfwTB+TTSL74KotL/vYCSiGGaAd5IO5oAV80B9kJcBLklhUWYzYPO4jvnsFcKoiauFGY6F4UbkCxTFQmF1MU0prq5xkTPF/J1Mrqkujp5kSz8Ki6vFF9A0UDIMOTg0DLpt4K3YATgzHwRyRm4G2SAu3Q4uHEQtgi2J63qUNT2KerJL8d5jc5U00BC0ewh1cHFen85W+lxQlgO+vXltY+93+KSob1zbdxB9kxWP4GgWnA8hyVPsSBHpOIwhB/MiUOhS0CHZ4qtdHE7mz4JSjEs06mUxID7BFIMaOuHSdoi1bppNDmlQoQgxOkGjIYcuFQrZtdV2aiFEFp6yWdkjEKmHJEWH+Db3Dhu7BWytAdqBLER5FzBXE76axKFA0GAUtMSoaN+DLvwSIqu9xb255FEDzAyxo2wkQOzF1U2h7DyxeDv9LaaSh4sqs3Lpa9KDl0/U9n7JP+RwoQFeq6/1aPgb3RNCTUmaZG3vSNVlsReUW/I4cxIVFNudIpsiLUHazjkGzmZE7cDXAucTEoT+QoIvq0lZAMZfrZcu9NWFwqbjaWseXeMvo8clEyOzfbcpIke7YmxWvZ87O4BdVD0/K7bKWT9kt9Uxbc2aaYHLcmP/FE8wAh27ngU/KD5tOIY1MA7eZnZ17FBjGhlgBVBQVRxbAQzRWgLB/l/CdpBgO6ITF8n1/4IDsvoDQXgWbQyJX+IN0kybael6m8FqL3AUlZRcdnlpcZHDYrEas7QkJZl6SZJGKKnyDq8dMXbMPfeMGTuidri3ih5i655iJfDsdVblWXvlrCsq7fhsQXZOOjxLPqA/8nL84bpJ99wzqY49LG7zrR9j8hXYrYbsDJ2s12kyM7KNFqvFXsTz+SXEnaEKVXmLSnPzUwsLU/NzS4u8VbFDbFHWE77rxmTFn8xI0umSMvDJAnuxDZ+k3Xxa/NHcjMLCjFz2KJtrCr9PQTsDEIY0lZwJ/JCA4ItmC5VsAekwZebm+264JWQkC0g9ugJGeu3Cs/T7x+gxVScQhFI+zVnbPIGkkkoD8QCNejB2VNVQeS/OweVEKy+WDuPCRUBMMNKTiKSyFTqM3sIg4EVUUJWTGugbtJIGjSpTfGYEgpIckBdPbCYzO8/QJ96gR2mssoj7KXLtq3ZXfkXV9Y9NnTmxyXMrueXLpE/vfbB544rSa1dImS2T0wvvpJ/Rfx9tfUT8Db/jSjk15912VangfWhuePrj7yWXue759Jqc2vYxycyuSG6N20MKUEuNREbWZ5o8jNIwuuPXxmPAYw8+s4F8+yWfJPCama2tM2Mn8/kQixyR1RtmRa+RhI/pTxJpfWaDi1RseKb1w1mKb4PCP/8JcksucgSHxZdEODexaT0pJIeIFh/P2eFCZTJmiv3cyyh2E9/qj6AuD9H5nx0jt5LQP2+KnSS+A/Qbuv74LpKxYvlVsX80tbV1trVGjpN7yaXE9v5V9NiN39K36YaP/khuJKZH6LGWpUvpv++4btbMDRtmzroubl9XeKt9oCet1gtYny0NczJPbEDt/WsvLOJOh9froEuPFvzTM+aGket2PP7xxzHe4QMy4HX0tth9fPMP91VX/0nz2L3P/xC7y2cXOxxexTePi4j3wLv0WG+tV2dh79DG36H1CpOJ438c9FR14z1XtD729o8/RvjPSd6h0aO5n5L/8MIx+nXCRsuwmoatnFD0pTDjuX47N+0WT0RbIzRFUDPrKAp00Sxkla0KxT7LSUQDff2W9CJwxDyQpYdw47gmHJX5gtcT4pk1QBKlfOIJERfavzDuTVwIugDLYNKxFUkEIshIXIITR6vk8BhlAT22XboAkI6AYJNFe+WEYk9TpSk146pR9S20MdV66dWXWlPT5l09T1gKF0OGKldXjG9zhA7d/NGRoRu1bQ0T22LPrhjR4h81Yln6isr9ncXOZKGq85GqFenLRozyXzlqZWq6U8osmj1nYsW45esqx82evS+4dfHircGayZNr+mN9DeSZjc8v+Pwl2uivrxcq7+ymmwuGlpOVe16SkrUv7aF3lg8tIOs/vSMzXWJjYhJ3SL5WWsF80U0EV6BpUK1D2LpGh92UrzFJp7fTR3ZMD8yn3ti/zdPy15nNqvF/p51kz4/ZHpc3z6cLJg8TxKYd9MkdjTcujq2kJWbzelw6fPJ2oe2KpFxTqXGIblTqRAHozr1kiHSX9BRXwg1jFv00AchySBVEEG7KJzzSY1U59kpI1jF6naD5JqMwS89n2fOSzU5Tw4TZDVOzXbMXzimwZJRd8exVa2jsx790es2GDPfYWUtWXXPlM/nzZjfOE0hKzoLLp8+VeWmvnF9cGfQPMWmzPJPGjkozZmRMHjXuBI1Fe8ZOqMua89Tqkbtu33Xz9eHGktTYkvqUlHEzF1kLRhSap82dlKHYCMlOhq1QE8GRuG5JZ0FHEgvpUIQqEOTQ2RIdIgHY9U15B/VFNAVRpKK/J6WsjFSguxauAiTLUcxPbpCURRTMAENc7I+RgL2WpBFeWfB6Pt1xkdiFwlaXIgrRFCUkbzrImI6O/Dm/c9R21oaoUUnmmwaHpPQvJGsfKWYi16f7aI/QwrSEw4btjYf0uOPZ0aPrXqf3O2prQ88tiCeXXBAq+kzFtzOTreNF27OXuZzjkksPYqN8YkDNjQ/1rghMSgkAIALEAtKk/eFzr4W3nNq67Iorlm09taVvamQx39op9HS28otpdxiAft9BmPRwq6QEskUi+7d20q5Ia+fW/RHy6GXtkUg7J5IAN1W6T9Yy/0wHfEMVW09eAGJ7LYz8CiK7ZGJV+BC2o8uaAIqi7NIFvcQUFFw2cjgQeGfDqVMb3gkEIq2nvmkjCx87/e2jj5w+/Vjrs8+efa6TCDccjW3r7Xuv7ZO+bb3i+6e+aYWs77R+c6r1nWAgEks6/RhkfuTRb8PPtjEMuepkRezlE7zhS2/sdyc4GFsD7cVJcK0FKprQdDqBgrlx7agu7mMuBlngcAE+Nrlk5lRWDCmick8IukSTNp1YIorqDQSK/F20GxfpQISc2bWrdxdxR2L1Uh3TjWXRFNVGXNa5axeZy+4p7vR49O5SdNQQdhP3rl2eXSig4B2mwNy1i7bsgn/E3btL0ZvF10kl/FMNF6zewM4vzCeiwcJ4H/EPQKQG8UQ/sG9U/F5j9UzyIVmBkRCMDMD8GihaYO+zvoeEvqc/y1o4HHHm8IVZnzFZGnjACLb2D+cukyO9WmgjEMS04vrBExWaQlHENEVwHuN85gaWISllKM/GTfmozUSjBKpfIqrn3sGHFDIQSRAGhQczu0cdW/3OHERM8CG45P3ca3wXdENY1EezRH0EpbnzPmDop1nNTWa6R4VIoO6x0B4gdleAc6TxRpNUrkIaCb98lcyLgXLRFRJIvipNSCflKiChzTsTq+N27kysjouOoluemEBuI5ylPLPEZ6uv8jsr9U3lnudD4+bfPLkkhUi0hc+tqhlZXZWcpHWOFDYVVORnyCoxXa2WDaHqIWVJLqGKlbVzUPm9rsP/IkOSgzv27PaKRmdJvqgdfUnTEH2qtsI3frSHHn9q5pbptcWWIlOJd9xw8m7lwpmXj7nEOzI3K8t76fAhddZbBq//sSRQy/l163G3ZiVus5YTGE4ani/i/868Tfo1QKUbjq5ff1R4jy1LU0OCsth9wPL1Yn76+qM/Hl3fNxU1Yuy9q7j3ZFEWgU54GJ/KRPxqR1VnkDGqkFAOfF82EcEUInYVE+z8tlxCHEGnOOP2Dy833nWWnqSHb7/1Lc9+6wOrr/zxxO+uzhz3my8gHNpFta7nJ5wjFjKCnjCryPz5pIKG+FSpc8JZ+lf6e/rFB3OME8Z+vX3JujeHD9WO3QtPHb4awivn0/f5MbOheFP0gLlElSKQL2kBfb2bl4HGamBsvQ54CddyDOcmYHshcMkE5uq1oNoWLmXRElJVg1hsIjARPYGgLsBALruZzmMOYDFEyYR+2B30cH6pas/LdvVQC68aI+uq6Yt5ZTJ5CwaGpNPnpn5i8KTHHqqaJDmKguoDYlEu/Z0rl241uZOSxtKx2UWqB1K1qk/oBF6Tk21P/0ZvNaQL4okKRzSbP/mc3XrUNNqav1WVZs0xerL7Nk10u4QGm/POdKc5PW1Hrim2oPZyYQW7bTCbk7mBa+hVIL3gLNKQxAJ5VQOSsFi96gjToyDpQhIV15iwtT9xv9xMQIEzuMvRpxXmFAdziuMNelw46/XYOcdFF8qqfm2ZrBgSfGyZrJxJnJzWF4TuYM9nykcfoGfoDrqcbqdn9rK1sg+/R64mKX2f0SfXZGUYs26/3GFYT277+1MkeN2wFRp1VpJNFRxjs9GPs4rhCnJ0zHVd43JlGTOyLt8opKUkG2XNsu/f/d++I3+j/xxHppLvCb/51vXNeY8LZrILy36AvfO9h9ni2L0kxSHcqRaG+EkyeeVP17VoZjRmunIqMoZJ83aN7L38cmE0UatUfKiapEiCQIaHiJo+WV6YP3tKW/3rPf9Dr7iGvzvWsJIcItKbD0eXkAdjY8os08h/KT6aiXXVMy62BgHtMf9RGjqh+QetAmW+NxiT1WytAmX4AxeT/uIVLvZk16SDXaPuD+BPCT1eUl1dQkpKcKOSX74CLqLElFTgL8qYCTO9lInLAdw6hZulrFqVBYvgRR3CwFUNNp14oXOsH6qF2AboBkgKuEMJTDuQJpwhvhbwhitEgrLT5YWB5VQ13FM+K+cy+uU/H59AcnEFq8LbaO27YfIGxuIcT3DRN66hb9ygGemvu7lQFJNJ6KXGaV21RCVJAm/ZNsI7QvM/Ddkf50xQCaLeVUDSYvURXBWrlAHCu+P1gcyTpjR/9lnzyG1Dcuw5OeOMIzyeEWkupyU52ZEzZNuI18dsaB0t8MiPbuc65Fq5LuHPoiFGSSaijgsGjLjWiXcRMUImFxNH1Blr3Ck8XmnbRD+LTb2Ff4Km853tsSmynj7nXueM2nfyncJTVQ4V3RibdAv/cnQ7/wLcxnc8x62SC8QIcFkz2j45pj9DyTGdKBaGgZdcIadzSXB2yZn8skfX5I0Lu2caDHn8B+fjdDNfTt66rL2B3kTd9KaG9svEyJppvkp9kihW+hAm9Mf7ckk9UZd/Qf9FMr4op2cRx6CvwQnxRL+uf6An0QlcDaAcwLXPe/8o8raCeXUK2k0ME4hJqNOU6iK936G6EZW6jCM1oPdGZ6uqs7WzdyuaLM6vidJCWzArw+BSdAkmaATZlG2cgwViCAX+EF9v544MKBM9/HFhXd9BOA+wicD8NXNe5HUqrz6JpPEAG2TeDxJyUAfcwA8YQmvJFwqI0JNSdud9p1omtd59d6vLqSmYd/nGlasmV7V89fBNFis5w2i1fvRv77k7j6bktW69oaREVqtzR/tLT9Kr6X+dum2eTqdKD01sv+fP/01GPocrbKJnVJmTF7/SokovK6vNi9UrRcVtr2ek/Rdve/Sb6re0XND2A+p0sRr9ah3+r69l5Z8j58RPxU/xmzR8/4Ix8VO6lyzYTvfSB3aQ+exEFogT4Hrv9sT1/B30ATJfkQUVXb0A6LgKqCfaZefH9xKIKylrQRT0MxE47rIIv4KBGk0Pw/kudtPc7z6Nhlfc/QvNtsoiCpsYt9czm70aXWr6XtalpSWlqkRRInJyitXmNefmpGuTknjC87wK2Fdyakq6Tlcp/EhTYqdurfH788z6HHOxyzoy6PMMrfQE8jLsfKq6oNDnHyZsSTiw4OpOVSetTk7NyMxJTjVk8RIpKysF7p2Sqc/Kys10aJLT8oVMHYBBtcaJJodpTYUWny/YJqqlJFmWJUnUJMlCkopvC/r8FstHzCciwrZKAeR8Xj7CdvPH220Rt4zpmv4f2i7hw/D/0n5kUBtGzf9pG5YrzUOfGdSOQ7wXtiN/OLFzADovg6QL0sin/1lTEok10m9/vTFXsEzo+aM06Pn5X8xNh9HnciY05F625AYt3v0/5iwQ/xHmBJRQoCfu4DZKStOZZK0pqHUFoRT+cwFwhdGYb/H4apbUjzYaUwWSJKemGjLN2SWuivLikuzsLGNKmqwR7vaY5eH5q4IzVrUsWnTVZc3ultLa3PIRMyqen/LYqMUL6h/5+JJ54jpd0D+k0mN3GUzVw6fPmKNLclrsVujoHKNOZzDnOe0OV54l9tCMG8+pNLwWEFV6SkqKWqfOSdIln9tyyWq/OeexzbS7uZm4Nz/mq2HtcAjk1VygtRakg1yhKtOgR6KRRqCe8RWMPqerXOX3ZepgBCA8wQMoMsAWYQrxEOGekurhBkO2TQEktmx17hi/e1cL31RYmh2siJT7sksL5eZ7KN3ta18dNudblhcrO2oVL7cku1Yvv9m3m/C94Vmz/MPLA/6K4YP0tmq2ootomR1PjcKKYuZXNURwcZxQqCyE69e/rmP+Y0Cf4AlxHY4/zC+eQClXyc79rHyLYlYl6BvG/NJZxh7FlR6ddjB/fK0CKxuk4IElKvsFJXzYB5XtiPv0k4HF4RK3jgi6deETP//u8+UhG0YjbfTkRcomKIyjWI+LzzEHKxa4stJAMI8u8t0DSzzfPgN092y9hOmiq3nj9iUdiv4XWc3LV8QXW150JS99i91UVoDE10HiPgrn1wj0e4HGdxFIHFg9tqa7/4z7DQzYDwhXA00AueYqZQcLAh+dhpsBleO2QCES1x2kkEI7l5mRhNeD6iVaZVwUJDNNjKhsjAQxIiPn9/rKQUR0paG8YwkAIPilnXj4u+lG+uBPu3ZxP5F5ZBOZx0H8p5iHXEaqv96y5Wv6B/oo/QPG+D3Txq29P7hw05N09/onn/z3U0+SCu/IBRVmXrjB6Kjy+6scyX/p7q5fNRZopIAkdXpS3rCGKaMMv7gDkXfXT/TBn73fM/CtpJp9iaMs77W28CzjA0vXPxl+6t9PPrn+uidpcrXu0oVzCvIb2qaPtGerBdL48ccqZ/XESy4ZF9RmLN6/aKJVT+K+6nG6aYJ2r2A78lmUXfaczNjBcCrbaU/sX7nnC+h+Fi9lhmBGR1D7CenimFg9mm8f0DSFwqEmzQNwEU0ZoLDYPmBLsR8Ui/zKeN6VcMFWTJgNWITBjMso4vrf7gFh4jbzjEH97AfyEnkmSNQ5XDn6OnFOa3zTyyAJmAZe+HQEzS+4cxXb/hBVpDLx4Q56aeiiAjUPqOqaWt2xd93u8g2lfMD9T3dbaf9VaS3Z525qK6Vzn3O3NrnhNpz7nrBWVWm16e6Jk4YWhsZJtAkfb3W7CT6/2g1XpW1uN18Cz7fFttG5+BDZ9xwU5Ob9bnxbd9nqcFNOTsHCPwUuW3UpzIu9gJ090t+4qdxl3ALuau5Gbju3G+3JerRw6NMkuVz0K5Vg6wlRswPCmOInkNgpMR4qHaVkwH6FGElsiWdM7CBGJEM+weoHATNAh4o+pnSRJcWFQUwYF+Ha5MU45IG49HlT57kmqy6nwlljG65JnuSbWG61Np3rbFrcvFWd2b7Yf6dDi5IabrkGB0a19t1Vi9sz1Vsrl5qjdzlD2LNko9K9h3R8ni6sy+N16enhdKLRpWfQ7ox0ndlA3AYz3Ydns4F2w3l9GKN4Et7DF/pGXjOtoazKaJPUlfZLLruzyYefNqr2pa8q/Dd905g3TFq7f60Hn/EoZ7iUarIbv7nJX/HVS3kjMsk1w4uKGeVTTPtUm6PLzdUZjMm9JmDBWpBIvlHEkvg2cHG/D5Rx2EpMgkaBgNcQ8Grju1SaFX1fDZFsia0t46HVZYhr/xTrYkINBGzlpWtmr8StoRpx7Hur4h9U5cVN3DpbI3xFfM8dEItXvzxzJu1GtxtCU3EqfZ7JFs1GlHPm54o+IdzaicpuxUmBrTtK6LeTOANQgCpuFvNW8LnSCFuBgUtnElHmzRJ3ZkFfloFXIoCKeD2s8PW2eG3Zo6Z83hNCZRTHAiEIN5FW+7X5uBhHaA8XDccGh89TIrQFTS54kI7zscMPAhVQWzOsaggfPPyb/YW721vbdxc+vDcmbrzlHkf9onEl5lfp72g7/d2rjpFts2y7pf2XNxdd43bUDi9KRGJHyVz0FKL7mL/Q+XjNypf8PyI5IaWE0E8w9qP/pZWrnvUl1TmdI5K8z9IprlCSrmqkv4x2r3xpxYqXVhL3sPGTspNCnJqtLzjB1k9boBVHcKO58dwk7hJsS0ZUVGyzGcfAC8VPX2lCnHCOC65J0CA74BDjobDC7vVlZspZw8udM5+fyTcNuoy9Dv3MOrsYrV/9cVzehksiYgeUUNzpWj5vRnZOknX+pc2uBRMnLrjguu8n9Jka6D8Vj/M34i5KzLNbCVG2PQL8I002cHoujytCXUoaby0nLgKHzoiERgeMF2URlyQATXExO7NsVE0gb1Z2HTt6rKuSHBn6xa4f317gXbP4t6/RwJyx097es2jrnDt7Jy2Y1HvnrEtr7xVLou/O21ZXt22e4JmzXEXs2w9PXZxP/1ZOMx/PuOLQtNhfwjM7Zy4yrL6kH1NJD0BfME0AIH/cE9lGJIC9KFaZJNxwWpJ1WvT5DRG2jSqRtTqmxQq4ApLm0kmFddXvzKRnl9H/nfFxTV3h5EvrJ/Ia/QMr8oe9s/gFnX5c55nOcXrdC4s/qrWv3KfX8OPFK8oPHLls2hI1TSX/nbJ01mVHDpRZhVD1jT+GZrroTXwgr6e9/ett275ub+/Ji/2e3GCZX3NuU3UtP2DPlVTcY4FjO4gAZAoJGt4l6xyCK74Dz10HvnrvBX/g3Gv6sR90CWfpbWRN6d+yoneWv20ha+iBIv5afrusXnLnnV4fWhL19U+19z5F7CTLsYk866PDriigPfSrUnIvnc9dsPdO+s/33vm1fXd+bcMd3M9LaJfqVA0MEaIvaQfbWK8hgjy6k/uc+a6Wc8O4Mdzs+Ir4NB5tH36fHUiJF7mY5EQtKhpWLbLNGF83ALPGZQwwV23sQzJgpy/Gx1zlEvAqVHMbhd80jRm+8smlG49dT1QvpflSakzqPOme16/87ULy5qKOafrSG/yWKe82LU5P72jC8+2qqWxLsOi+p/aIqlRTptPgSxky5Ka3nhTqQ+0LQ6vnBGs3TLnhD6RmRGkpEY5sm/XA/PAsc+0lNy8s8TjyZrwt7F199T6Bv+/q1Y+SKcrmYn1PXL/CmJ2Rm6czp9nVmfz2eeHt2O5TyTj5Bmkrp2U+lh5Vpgl3jVX2j3UF7DprOe+yEWOmyabsIGuSVEL0aVJ2JOsouvj3WH/4zfJXQk8uINqrN/3z0IZMIGnV/xjWn0z/JW3dS78/gO6Od785r/GNlo29r8158C8bScco+uOoeBLMXQ/xSnulhy6mBxXietCVJN1K8qN/jXVfw591mZf9M/bxlXwJXcmXr4h9LLXRf9kWFES/uIYv5/uK8gX6duyjK3l/zMdXNseOKv6EpENuZutwlb3vgLgxzySfhjDvFBjbTpC8jSZyk1jW1dX7xy6hkd9nSNEbxmbH3oq9nT3WoE8xSHUvRA+98IIw4YXofr5YO9SSL+vpRrIJMIxlqHbge9LZnsQXOogiFYDqMUqAezSDjB/UEIUcaEhAbm4K9d6MJF9cH2q6KV1MTaLLyZYcvcapoROPf0InQkSfQ7bQ5UmpYnpRkG/hrwryTqEdn4m2wln4IN2WlUS30eX5hmReTda88Qa9Tc0nA5jaRa5JyrKlF1VQNTlbweb7Slkjz4VvtSjfKiOjhG8NQpvAHCzngVkWEJGDwGSUNWsb+6agglf13LQ1O2P7Y0vkFE2yxpKSzK8lX+Wl2LMtwtXCwksvsVCb5ZnLonsvm2ohf7E8LdRHZ5P3xXRzekYyru++zp6enGrCdfr9cqGR+cm7ma7gQqusTpIdIUJEp0uXTxKev6LDaBLKiSgEgiIQzYvu9TXh7vll9Db/YZWO3lY2/+4Nh6mKWbKiL5I17FpYCDnIGv/hi0mdqsmJp96O54odYJavN+LF/ne8lAtl3FzkPz/fscoOl1AvuCC4YxRJJl49UIiLbl+FFdA/9BD9jvmhP0Ra0jQ8OUI/nj+fqC6+nZX8ENEPfIi0JIl8N6lFkybJ4EuY/jeBDXCWGX++AyTbecRC0EX/PK/9JnaALfsZvKdF39T4Npwpim+CIrv9ermDNjlXrYlmMf/lC3cvUUg0K7e/Tc3nLdZKuWjxUvZaQPvX4LfEd9GgKYg5sgB6oEd2tVjTN5UtgMf3sa1clG0VIsqm/MpiKtzvoN+/BnhDYoXUxfZSxq32TWwPIIWxMHhMU5gbtmov8r0wU8t0o1e5tP/C/49BAS7/H2FidXd42mNgZGBgYGTsnFN2Pyie3+YrAzf7BaAIw7lb4r+QafYLYHEOBiYQDwB4tQx7AAB42mNgZGBgv/D/BohkYACTjAyogBUAdckEZAAAeNpFUCsOAjEQfVMEWb8HQCBXIbgFCYZkD7AKwUFQxREEGgkGhUKwIxBIzoDehOCYH8u8TDudvr43KXWwSDuApB4+0FCFN9j2F1jWTCUaA9sZkYvoBihr32MwShcHONV4qp4r0EEyxwn9yrgJ7+9SipZ6sSLVdBf1TGOqHNZvZGLWVKa5N/0dBzM786eLNqolrV1ZmAVm2MaraWjleLVCYRNqbHDq3RSfqM+u89MzwH6IsTdGR9eYOOOIOU1kjjYcO5/4C2ywYWYAAAAmACYAJgAuAIYAqADUAT4BkAGoAe4CLgKSAsgDEANcA5ID1AQcBJgEzgUKBTIF8gYcBmQGkgbOBxIHRgeoB9oIOAhSCHgIqAjSCPwJEgkgCS4JPAlKCVgJtgnKCfYKNgpsCooKngrcCv4LNgt+C/AMVAyYDMwNBA0+DW4Nng3MDfoOJg5oDqgO1A8yD5YP+BAcEEwQlhDcEQoRJhFiEXwRuhJYEqASwhLkEwYTMBPCE/4UahSUFLQU0BUkFWwVsBYmFmgWqBbqF0wX4hhcGNAY9BkQGSYZZhmgGfoaQBp4Gp4awhr+G0wbohxUHIQc1B0GHU4dhB2mHcoeWB6QHu4fEB+MH84gIiCGIMwg7iEQISghqCHkIj4isiLQI3oj6iRwJKIk6iUGJSglWiWoJcQl9CYWJrInWifeKCooRChaKHIoiCigKLYozijkKRwpOin2KlwqxiuaK/Ysmi0WLWAtuC30LiAuLi6wLvQvJi9aL7Av8DBWMKgw1DEAMTwxcgAAeNpjYGRgYDjAMItBkAEEmICYkQEk5gDmMwAAJwoBsQB42o1Sy07CQBQ9LWhCNC5cuDAuGt2oCVAgIMIWcSExRKO4LVBKI9JaKsVf8Mt05xf4DcYPMJ6ZDoS0GzOZzrlnzn3MvQWwhTdkoGVzAL64Y6xhl1aMdezgW+EM6vhVOItDrabwBhbag8Kb5D8VzuFU+1F4G/v6gcLv2NOXvh8w9Q4u0UUHBuawEWAGFx6mtMvcHhkDFu1XnhOiUKrS6ogoxJhoJJmQyMYCA359WkvdMTUhl48GilyRXAU4vH3hKTI65Cf0EL5T5rC5i2R9snnGt/BMpYjzROYIbZXxIpXvBC2qZ9SKaJ6MdkOFw1ziNQFKjGRy1dDEHa7QwzVR2iuf8EsrjITiPtGh9Uxd3JIR1jo7pjJU8eYrjwLO+G3yrRYeGVNoRmRFh/qcUgFVueuo0Dr/R+092eUhqwhkb0XtQ4lcOQdDTtlixkgp/ZVyOaEe7f7arONa27xzabV4O5D/kCnvTE67yrNBpqz4Eip/30N4OgB42m2T9ddUZRRGZ3+I2IhdiEEI1txz3huIheinoGCBgZioiIFJmCgWiIGK3WJhi6Ki4vI/U3T2/OasNetZd8179ntnr+f0Rnr/ff7e3ove/33+2vWlN8IIY9iNsezOOPZgT/Zib/ZhX/ZjPPszgQM4kIM4mEM4lMM4nCM4kqOYyNFM4hiO5TiOZzJTmMo0TmA6MziRkziZUziVPhVBUqhpaOmYyWnM4nTO4EzO4mxmcw5zOJfzGOV8LmAu87iQi5jPAi7mEi7lMi5nIYu4giu5iqtZzDUs4Vqu43pu4EZuYik3cwu3sozbWM7t3MGd3MUK7uYe7uU+7ucBVrKK1azhQR7iYR7hUR5jLY/zBOt4kqd4mmd4lvVs4Dk28jwv8CIvsYmXeYVX2cxrvM4bvMlbvM07vMt7vM8HfMhHfMwWPuFTPuNzvmArX/IVX/MN3/Id3/MD2/iRn9jOz/zCr+zgN37nD3by57iVK5ZHPTrn3xyt+n2zMsNMs5i12Zit2ZkzB1nJq+RV8ip5lZxKTiWnklPJCTkhJ+SEnJATckJOyAk5KSedT+fT/5VyUk46n84X54vvUeQUOcX54v3F+drfa++pPVd7T+35enje+xrva7yvkdPIaeQ0cho5jZxGTut86/u2clo5rZxWTiunldPK6XyfTl4nr5PXyesGvLBPYZ/CHoU9iv7wXGO2ZmcO7g17FPYo7FHYo6jk2aewT2Gfwj6FfQr7FPYp7FPYpwh59irsVdirsFdhr8JeRcqzX2G/wn6F/Qr7FSnPnoU9C3sW9iv1l/3hc5rFrM3GbM3OHHBTj6nH1GPqMfWYekw9ph5Tj6nH1GPqMfWYekw9ph5Tj6nH1GPqMfWYekw9ph5Tj6nH1GPqMfWYekw9pvuaQ5/uaxZ57m0Wee5vur9ZBrzicxk+132zMsNMs5i12ZitKcc9L43z7nlxz4t7Xtzz4p4X97y456WV474X9720+Q9k+OnYAAABUrRnegAA) format('woff'),url(../fonts/dashicons.ttf) format("truetype"),url(../fonts/dashicons.svg#dashicons) format("svg");font-weight:400;font-style:normal}.dashicons{display:inline-block;width:20px;height:20px;-webkit-font-smoothing:antialiased;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;-moz-transition:color .1s ease-in 0;-webkit-transition:color .1s ease-in 0;text-align:center}.dashicons-menu:before{content:"\f333"}.dashicons-admin-site:before{content:"\f319"}.dashicons-dashboard:before{content:"\f226"}.dashicons-admin-media:before{content:"\f104"}.dashicons-admin-page:before{content:"\f105"}.dashicons-admin-comments:before{content:"\f101"}.dashicons-admin-appearance:before{content:"\f100"}.dashicons-admin-plugins:before{content:"\f106"}.dashicons-admin-users:before{content:"\f110"}.dashicons-admin-tools:before{content:"\f107"}.dashicons-admin-settings:before{content:"\f108"}.dashicons-admin-network:before{content:"\f112"}.dashicons-admin-generic:before{content:"\f111"}.dashicons-admin-home:before{content:"\f102"}.dashicons-admin-collapse:before{content:"\f148"}.dashicons-admin-links:before,.dashicons-format-links:before{content:"\f103"}.dashicons-admin-post:before,.dashicons-format-standard:before{content:"\f109"}.dashicons-format-image:before{content:"\f128"}.dashicons-format-gallery:before{content:"\f161"}.dashicons-format-audio:before{content:"\f127"}.dashicons-format-video:before{content:"\f126"}.dashicons-format-chat:before{content:"\f125"}.dashicons-format-status:before{content:"\f130"}.dashicons-format-aside:before{content:"\f123"}.dashicons-format-quote:before{content:"\f122"}.dashicons-welcome-write-blog:before,.dashicons-welcome-edit-page:before{content:"\f119"}.dashicons-welcome-add-page:before{content:"\f133"}.dashicons-welcome-view-site:before{content:"\f115"}.dashicons-welcome-widgets-menus:before{content:"\f116"}.dashicons-welcome-comments:before{content:"\f117"}.dashicons-welcome-learn-more:before{content:"\f118"}.dashicons-image-crop:before{content:"\f165"}.dashicons-image-rotate-left:before{content:"\f166"}.dashicons-image-rotate-right:before{content:"\f167"}.dashicons-image-flip-vertical:before{content:"\f168"}.dashicons-image-flip-horizontal:before{content:"\f169"}.dashicons-undo:before{content:"\f171"}.dashicons-redo:before{content:"\f172"}.dashicons-editor-bold:before{content:"\f200"}.dashicons-editor-italic:before{content:"\f201"}.dashicons-editor-ul:before{content:"\f203"}.dashicons-editor-ol:before{content:"\f204"}.dashicons-editor-quote:before{content:"\f205"}.dashicons-editor-alignleft:before{content:"\f206"}.dashicons-editor-aligncenter:before{content:"\f207"}.dashicons-editor-alignright:before{content:"\f208"}.dashicons-editor-insertmore:before{content:"\f209"}.dashicons-editor-spellcheck:before{content:"\f210"}.dashicons-editor-distractionfree:before{content:"\f211"}.dashicons-editor-kitchensink:before{content:"\f212"}.dashicons-editor-underline:before{content:"\f213"}.dashicons-editor-justify:before{content:"\f214"}.dashicons-editor-textcolor:before{content:"\f215"}.dashicons-editor-paste-word:before{content:"\f216"}.dashicons-editor-paste-text:before{content:"\f217"}.dashicons-editor-removeformatting:before{content:"\f218"}.dashicons-editor-video:before{content:"\f219"}.dashicons-editor-customchar:before{content:"\f220"}.dashicons-editor-outdent:before{content:"\f221"}.dashicons-editor-indent:before{content:"\f222"}.dashicons-editor-help:before{content:"\f223"}.dashicons-editor-strikethrough:before{content:"\f224"}.dashicons-editor-unlink:before{content:"\f225"}.dashicons-editor-rtl:before{content:"\f320"}.dashicons-align-left:before{content:"\f135"}.dashicons-align-right:before{content:"\f136"}.dashicons-align-center:before{content:"\f134"}.dashicons-align-none:before{content:"\f138"}.dashicons-lock:before{content:"\f160"}.dashicons-calendar:before{content:"\f145"}.dashicons-visibility:before{content:"\f177"}.dashicons-post-status:before{content:"\f173"}.dashicons-post-trash:before{content:"\f182"}.dashicons-edit:before{content:"\f464"}.dashicons-trash:before{content:"\f458"}.dashicons-arrow-up:before{content:"\f142"}.dashicons-arrow-down:before{content:"\f140"}.dashicons-arrow-left:before{content:"\f141"}.dashicons-arrow-right:before{content:"\f139"}.dashicons-arrow-up-alt:before{content:"\f342"}.dashicons-arrow-down-alt:before{content:"\f346"}.dashicons-arrow-left-alt:before{content:"\f340"}.dashicons-arrow-right-alt:before{content:"\f344"}.dashicons-arrow-up-alt2:before{content:"\f343"}.dashicons-arrow-down-alt2:before{content:"\f347"}.dashicons-arrow-left-alt2:before{content:"\f341"}.dashicons-arrow-right-alt2:before{content:"\f345"}.dashicons-leftright:before{content:"\f229"}.dashicons-sort:before{content:"\f156"}.dashicons-list-view:before{content:"\f163"}.dashicons-exerpt-view:before{content:"\f164"}.dashicons-share:before{content:"\f237"}.dashicons-share1:before{content:"\f237"}.dashicons-share-alt:before{content:"\f240"}.dashicons-share-alt2:before{content:"\f242"}.dashicons-twitter:before{content:"\f301"}.dashicons-rss:before{content:"\f303"}.dashicons-email:before{content:"\f465"}.dashicons-email-alt:before{content:"\f466"}.dashicons-facebook:before{content:"\f304"}.dashicons-facebook-alt:before{content:"\f305"}.dashicons-networking:before{content:"\f325"}.dashicons-googleplus:before{content:"\f462"}.dashicons-hammer:before{content:"\f308"}.dashicons-art:before{content:"\f309"}.dashicons-migrate:before{content:"\f310"}.dashicons-performance:before{content:"\f311"}.dashicons-wordpress:before{content:"\f120"}.dashicons-wordpress-alt:before{content:"\f324"}.dashicons-pressthis:before{content:"\f157"}.dashicons-update:before{content:"\f463"}.dashicons-screenoptions:before{content:"\f180"}.dashicons-info:before{content:"\f348"}.dashicons-cart:before{content:"\f174"}.dashicons-feedback:before{content:"\f175"}.dashicons-cloud:before{content:"\f176"}.dashicons-translation:before{content:"\f326"}.dashicons-tag:before{content:"\f323"}.dashicons-category:before{content:"\f318"}.dashicons-yes:before{content:"\f147"}.dashicons-no:before{content:"\f158"}.dashicons-no-alt:before{content:"\f335"}.dashicons-plus:before{content:"\f132"}.dashicons-minus:before{content:"\f460"}.dashicons-dismiss:before{content:"\f153"}.dashicons-marker:before{content:"\f159"}.dashicons-star-filled:before{content:"\f155"}.dashicons-star-half:before{content:"\f459"}.dashicons-star-empty:before{content:"\f154"}.dashicons-flag:before{content:"\f227"}.dashicons-location:before{content:"\f230"}.dashicons-location-alt:before{content:"\f231"}.dashicons-camera:before{content:"\f306"}.dashicons-images-alt:before{content:"\f232"}.dashicons-images-alt2:before{content:"\f233"}.dashicons-video-alt:before{content:"\f234"}.dashicons-video-alt2:before{content:"\f235"}.dashicons-video-alt3:before{content:"\f236"}.dashicons-vault:before{content:"\f178"}.dashicons-shield:before{content:"\f332"}.dashicons-shield-alt:before{content:"\f334"}.dashicons-sos:before{content:"\f468"}.dashicons-search:before{content:"\f179"}.dashicons-slides:before{content:"\f181"}.dashicons-analytics:before{content:"\f183"}.dashicons-chart-pie:before{content:"\f184"}.dashicons-chart-bar:before{content:"\f185"}.dashicons-chart-line:before{content:"\f238"}.dashicons-chart-area:before{content:"\f239"}.dashicons-groups:before{content:"\f307"}.dashicons-businessman:before{content:"\f338"}.dashicons-id:before{content:"\f336"}.dashicons-id-alt:before{content:"\f337"}.dashicons-products:before{content:"\f312"}.dashicons-awards:before{content:"\f313"}.dashicons-forms:before{content:"\f314"}.dashicons-testimonial:before{content:"\f473"}.dashicons-portfolio:before{content:"\f322"}.dashicons-book:before{content:"\f330"}.dashicons-book-alt:before{content:"\f331"}.dashicons-download:before{content:"\f316"}.dashicons-upload:before{content:"\f317"}.dashicons-backup:before{content:"\f321"}.dashicons-clock:before{content:"\f469"}.dashicons-lightbulb:before{content:"\f339"}.dashicons-desktop:before{content:"\f472"}.dashicons-tablet:before{content:"\f471"}.dashicons-smartphone:before{content:"\f470"}.dashicons-smiley:before{content:"\f328"} \ No newline at end of file diff --git a/src/wp-includes/css/editor-rtl.css b/src/wp-includes/css/editor-rtl.css new file mode 100644 index 0000000..a465a38 --- /dev/null +++ b/src/wp-includes/css/editor-rtl.css @@ -0,0 +1,2314 @@ + +/*------------------------------------------------------------------------------ + + TinyMCE and Quicklinks toolbars +------------------------------------------------------------------------------*/ + +/* wp_theme/ui.css */ +.wp_themeSkin table, +.wp_themeSkin tbody, +.wp_themeSkin a, +.wp_themeSkin img, +.wp_themeSkin tr, +.wp_themeSkin div, +.wp_themeSkin td, +.wp_themeSkin iframe, +.wp_themeSkin span, +.wp_themeSkin *, +.wp_themeSkin .mceText { + border: 0; + margin: 0; + padding: 0; + white-space: nowrap; + text-decoration: none; + font-weight: normal; + cursor: default; + vertical-align: baseline; + width: auto; + border-collapse: separate; +} + +.wp_themeSkin a:hover, +.wp_themeSkin a:link, +.wp_themeSkin a:visited, +.wp_themeSkin a:active { + text-decoration: none; + font-weight: normal; + cursor: default; +} + +.wp_themeSkin table td { + vertical-align: middle; +} + +.wp_themeSkin *, +.wp_themeSkin a:hover, +.wp_themeSkin a:link, +.wp_themeSkin a:visited, +.wp_themeSkin a:active { + color: #555; +} + +/* These are part of TinyMCE, used in TinyMCE Advanced, but not WordPress. These are not updated for 3.8's design. */ +.wp_themeSkin span.mce_sup, +.wp_themeSkin span.mce_sub, +.wp_themeSkin span.mce_media, +.wp_themeSkin span.mce_styleprops, +.wp_themeSkin span.mce_search, +.wp_themeSkin span.mce_emotions, +.wp_themeSkin span.mce_print, +.wp_themeSkin span.mce_attribs, +.wp_themeSkin span.mce_hr, +.wp_themeSkin span.mce_cut, +.wp_themeSkin span.mce_copy, +.wp_themeSkin span.mce_paste, +.wp_themeSkin span.mce_cite, +.wp_themeSkin span.mce_visualchars, +.wp_themeSkin span.mce_advhr, +.wp_themeSkin span.mce_insertdate, +.wp_themeSkin span.mce_anchor, +.wp_themeSkin span.mce_visualaid, +.wp_themeSkin span.mce_cleanup, +.wp_themeSkin span.mce_table, +.wp_themeSkin span.mce_row_props, +.wp_themeSkin span.mce_cell_props, +.wp_themeSkin span.mce_row_before, +.wp_themeSkin span.mce_row_after, +.wp_themeSkin span.mce_delete_row, +.wp_themeSkin span.mce_col_before, +.wp_themeSkin span.mce_col_after, +.wp_themeSkin span.mce_delete_col, +.wp_themeSkin span.mce_split_cells, +.wp_themeSkin span.mce_merge_cells, +.wp_themeSkin span.mce_delete_table, +.wp_themeSkin span.mce_ins, +.wp_themeSkin span.mce_abbr, +.wp_themeSkin span.mce_acronym, +.wp_themeSkin span.mce_del, +.wp_themeSkin span.mce_replace, +.wp_themeSkin span.mce_code, +.wp_themeSkin span.mce_nonbreaking, +.wp_themeSkin span.mce_inserttime, +.wp_themeSkin span.mce_insertlayer, +.wp_themeSkin span.mce_moveforward, +.wp_themeSkin span.mce_movebackward, +.wp_themeSkin span.mce_absolute { + -moz-transition: none; + -webkit-transition: none; + transition: none; + background: url("../js/tinymce/themes/advanced/img/icons.gif") no-repeat 20px 20px; +} + +/* No @font-face support */ +.no-font-face .wp_themeSkin span.mce_undo, +.no-font-face .wp_themeSkin span.mce_redo, +.no-font-face .wp_themeSkin span.mce_bullist, +.no-font-face .wp_themeSkin span.mce_numlist, +.no-font-face .wp_themeSkin span.mce_blockquote, +.no-font-face .wp_themeSkin span.mce_charmap, +.no-font-face .wp_themeSkin span.mce_bold, +.no-font-face .wp_themeSkin span.mce_italic, +.no-font-face .wp_themeSkin span.mce_underline, +.no-font-face .wp_themeSkin span.mce_justifyleft, +.no-font-face .wp_themeSkin span.mce_justifyright, +.no-font-face .wp_themeSkin span.mce_justifycenter, +.no-font-face .wp_themeSkin span.mce_justifyfull, +.no-font-face .wp_themeSkin span.mce_indent, +.no-font-face .wp_themeSkin span.mce_outdent, +.no-font-face .wp_themeSkin span.mce_link, +.no-font-face .wp_themeSkin span.mce_unlink, +.no-font-face .wp_themeSkin span.mce_help, +.no-font-face .wp_themeSkin span.mce_removeformat, +.no-font-face .wp_themeSkin span.mce_fullscreen, +.no-font-face .wp_themeSkin span.mce_wp_fullscreen, +.no-font-face .wp_themeSkin span.mce_media, +.no-font-face .wp_themeSkin span.mce_pastetext, +.no-font-face .wp_themeSkin span.mce_pasteword, +.no-font-face .wp_themeSkin span.mce_wp_help, +.no-font-face .wp_themeSkin span.mce_wp_adv, +.no-font-face .wp_themeSkin span.mce_wp_more, +.no-font-face .wp_themeSkin span.mce_strikethrough, +.no-font-face .wp_themeSkin span.mce_spellchecker, +.no-font-face .wp_themeSkin span.mce_forecolor, +.no-font-face .wp_themeSkin .mce_forecolorpicker, +.no-font-face .wp_themeSkin .mceSplitButton .mce_spellchecker span.mce_spellchecker, +.no-font-face .wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor, +.no-font-face .wp_themeSkin .mceSplitButton span.mce_numlist, +.no-font-face .wp_themeSkin .mceSplitButton span.mce_bullist { + -moz-transition: none; + -webkit-transition: none; + transition: none; + background-image: url('../images/wpicons.png?ver=20120720'); +} + +/* Theme */ +.no-font-face .wp_themeSkin span.mce_undo {background-position:-500px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_undo, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_undo {background-position:-500px 0} + +.no-font-face .wp_themeSkin span.mce_redo {background-position:-480px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_redo, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_redo {background-position:-480px 0} + +.no-font-face .wp_themeSkin span.mce_bullist {background-position:-40px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_bullist, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_bullist, +.no-font-face .wp_themeSkin .mceSplitButton:hover span.mce_bullist {background-position:-40px 0} + +.no-font-face .wp_themeSkin span.mce_numlist {background-position:-60px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_numlist, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_numlist, +.no-font-face .wp_themeSkin .mceSplitButton:hover span.mce_numlist {background-position:-60px 0} + +.no-font-face .wp_themeSkin span.mce_blockquote {background-position:-80px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_blockquote, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_blockquote {background-position:-80px 0} + +.no-font-face .wp_themeSkin span.mce_charmap {background-position:-420px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_charmap, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_charmap {background-position:-420px 0} + +.no-font-face .wp_themeSkin span.mce_bold {background-position:0 -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_bold, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_bold {background-position:0 0} + +.no-font-face .wp_themeSkin span.mce_italic {background-position:-20px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_italic, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_italic {background-position:-20px 0} + +.no-font-face .wp_themeSkin span.mce_underline {background-position:-280px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_underline, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_underline {background-position:-280px 0} + +.no-font-face .wp_themeSkin span.mce_justifyleft {background-position:-100px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyleft, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyleft {background-position:-100px 0} + +.no-font-face .wp_themeSkin span.mce_justifyright {background-position:-140px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyright, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyright {background-position:-140px 0} + +.no-font-face .wp_themeSkin span.mce_justifycenter {background-position:-120px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifycenter, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifycenter {background-position:-120px 0} + +.no-font-face .wp_themeSkin span.mce_justifyfull {background-position:-300px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyfull, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyfull {background-position:-300px 0} + +.no-font-face .wp_themeSkin span.mce_indent {background-position:-460px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_indent, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_indent {background-position:-460px 0} + +.no-font-face .wp_themeSkin span.mce_outdent {background-position:-440px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_outdent, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_outdent {background-position:-440px 0} + +.no-font-face .wp_themeSkin span.mce_link {background-position:-160px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_link, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_link {background-position:-160px 0} + +.no-font-face .wp_themeSkin span.mce_unlink {background-position:-180px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_unlink, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_unlink {background-position:-180px 0} + +.no-font-face .wp_themeSkin span.mce_help {background-position:-520px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_help, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_help {background-position:-520px 0} + +.no-font-face .wp_themeSkin span.mce_removeformat {background-position:-380px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_removeformat, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_removeformat {background-position:-380px 0} + +.no-font-face .wp_themeSkin span.mce_strikethrough {background-position:-540px -20px;} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_strikethrough, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_strikethrough {background-position:-540px 0} + +.no-font-face .wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor {background-position:-320px -20px} +.no-font-face .wp_themeSkin .mceSplitButtonEnabled:hover span.mce_forecolor, +.no-font-face .wp_themeSkin .mceSplitButtonSelected span.mce_forecolor {background-position:-320px 0} + +.no-font-face .wp_themeSkin .mce_forecolorpicker {background-position:-320px -20px} + +/* Plugins in WP */ +.no-font-face .wp_themeSkin span.mce_fullscreen {background-position:-240px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_fullscreen, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_fullscreen {background-position:-240px 0} + +.no-font-face .wp_themeSkin span.mce_wp_fullscreen {background-position:-240px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_fullscreen, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_fullscreen {background-position:-240px 0} + +.no-font-face .wp_themeSkin span.mce_media {background-position:-400px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_media, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_media {background-position:-400px 0} + +.no-font-face .wp_themeSkin span.mce_pastetext {background-position:-340px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_pastetext, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_pastetext {background-position:-340px 0} + +.no-font-face .wp_themeSkin span.mce_pasteword {background-position:-360px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_pasteword, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_pasteword {background-position:-360px 0} + +.no-font-face .wp_themeSkin span.mce_spellchecker {background-position:-220px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_spellchecker, +.no-font-face .wp_themeSkin .mceSplitButtonEnabled:hover span.mce_spellchecker, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_spellchecker, +.no-font-face .wp_themeSkin .mceSplitButtonSelected span.mce_spellchecker {background-position:-220px 0} + +.no-font-face .wp_themeSkin span.mce_wp_help {background-position:-520px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_help, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_help {background-position:-520px 0} + +.no-font-face .wp_themeSkin span.mce_wp_adv {background-position:-260px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_adv, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_adv {background-position:-260px 0} + +.no-font-face .wp_themeSkin span.mce_wp_more {background-position:-200px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_more, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_more {background-position:-200px 0} + +.no-font-face .mceIcon:before { + display: none !important; +} +/* End no @font-face */ + +/* Containers */ +.wp_themeSkin table {} + +.wp_themeSkin iframe { + display: block; +} + +.wp_themeSkin #mce_fullscreen_ifr { + background-color: #fff; +} + +.wp_themeSkin .mceToolbar { + padding: 1px; +} + +/* External */ +.wp_themeSkin .mceExternalToolbar { + position: absolute; + border-bottom: 0; + display: none; +} + +.wp_themeSkin .mceExternalToolbar td.mceToolbar { + padding-left: 13px; +} + +.wp_themeSkin .mceExternalClose { + position: absolute; + top: 3px; + left: 3px; + width: 7px; + height: 7px; + background: url("../js/tinymce/themes/advanced/img/icons.gif") -820px 0; +} + +/* Layout */ +.wp_themeSkin table.mceToolbar, +.wp_themeSkin tr.mceFirst .mceToolbar tr td, +.wp_themeSkin tr.mceLast .mceToolbar tr td { + border: 0; + margin: 0; + padding: 0; +} + +.wp_themeSkin table.mceLayout { + border: 0; +} + +.wp_themeSkin .mceStatusbar { + background: #fff; + border-top: 1px solid #eee; + color: #000; + display: block; + font-family: sans-serif; + font-size: 12px; + height: 20px; + line-height: 16px; + padding: 0 8px 0 0; + overflow: visible; +} + +.wp_themeSkin .mceStatusbar * { + color: #555; +} + +.wp_themeSkin .mceStatusbar div { + float: right; + padding: 2px; +} + +.wp_themeSkin .mceStatusbar a.mceResize { + display: block; + float: left; + background: url("../js/tinymce/themes/advanced/img/icons.gif") -800px 0; + width: 20px; + height: 20px; + cursor: sw-resize; +} + +.wp_themeSkin .mceStatusbar a:hover { + text-decoration: underline; +} + +.wp_themeSkin table.mceToolbar { + margin: 0 6px 2px; +} + +.wp_themeSkin table.mceToolbar :active, +.wp_themeSkin table.mceToolbar :focus, +.wp_themeSkin table.mceToolbar:focus, +.wp_themeSkin span.mceSeparator:focus { + outline: none; +} + +.wp_themeSkin #content_toolbar1 { + margin-top: 2px; +} + +.wp_themeSkin .mceToolbar .mceToolbarEndListBox span { + display: none; +} + +.wp_themeSkin span.mceIcon, +.wp_themeSkin img.mceIcon { + display: block; + width: 20px; + height: 20px; +} + +a .mceIcon, .mceAction { + text-align: center; + font: normal 20px/1 'dashicons' !important; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.mceAction { + line-height:16px; +} + +/* Button */ +.wp_themeSkin .mceButton { + display: block; + width: 20px; + height: 20px; + cursor: default; + padding: 1px 2px; + margin: 1px; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +.wp_themeSkin a.mceButtonEnabled:hover { + background-image: inherit 0 -10px; +} + +.wp_themeSkin .mceOldBoxModel a.mceButton span, .wp_themeSkin .mceOldBoxModel a.mceButton img { + margin: 0 1px 0 0; +} + +.wp_themeSkin .mceButtonDisabled .mceIcon { + opacity: 0.2; + filter: alpha(opacity=20); +} + +/* Separator */ +.wp_themeSkin .mceSeparator { + display: none; +} + +/* ListBox */ +.wp_themeSkin .mceListBox, +.wp_themeSkin .mceListBox a { + display: block; +} + +.wp_themeSkin .mceListBox .mceText { + padding: 1px 5px 1px 4px; + width: 70px; + text-align: right; + text-decoration: none; + -webkit-border-bottom-right-radius: 2px; + -webkit-border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-top-right-radius: 2px; + font-family: sans-serif; + font-size: 12px; + height: 20px; + line-height: 20px; + overflow: hidden; +} + +.wp_themeSkin .mceListBox { + margin: 1px; + direction: rtl; + background-color: #fff; + border: 1px solid #ddd; + -webkit-box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .2); + box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .2); +} + +.wp_themeSkin .mceListBox .mceOpen { + width: 12px; + height: 20px; + border-collapse: separate; + padding: 1px; + -webkit-border-bottom-right-radius: 0; + -webkit-border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.wp_themeSkin .mceListBox .mceFirst a { + border-style: solid; + border-width: 1px; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +.wp_themeSkin .mceListBoxMenu .mce_formatPreview { + line-height: normal; +} + +.wp_themeSkin .mceListBox .mceOpen, +.wp_themeSkin .mceListBoxHover .mceOpen, +.wp_themeSkin .mceListBoxSelected .mceOpen, +.wp_themeSkin table.mceListBoxEnabled .mceOpen { + background-image: url("../images/down_arrow.gif"); + background-position: 3px 1px; + background-repeat: no-repeat; +} + +.wp_themeSkin .mceListBoxDisabled .mceText { + color: gray; +} + +.wp_themeSkin .mceListBoxMenu { + overflow: auto; + overflow-x: hidden; +} + +.wp_themeSkin .mceOldBoxModel .mceListBox .mceText { + height: 22px; +} + +.wp_themeSkin select.mceListBox { + font-family: sans-serif; + font-size: 12px; + border-color: #b2b2b2; + background-color: #fff; +} + +/* SplitButton */ +.wp_themeSkin .mceSplitButton a, +.wp_themeSkin .mceSplitButton span { + display: block; + height: 20px; +} + +.wp_themeSkin .mceSplitButton { + display: block; + direction: rtl; +} + +.wp_themeSkin table.mceSplitButton td { + padding: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +.wp_themeSkin table.mceSplitButton:hover td { + background-image: inherit 0 -10px; +} + +.wp_themeSkin .mceSplitButton a.mceAction { + height: 20px; + width: 20px; + padding: 1px 2px; + border-left: 0 none; +} + +.wp_themeSkin .mceSplitButton span.mceAction { + background-image: url("../js/tinymce/themes/advanced/img/icons.gif"); + background-repeat: no-repeat; + background-color: transparent; + width: 20px; +} + +.wp_themeSkin .mceSplitButton span.mceAction.mce_bullist, +.wp_themeSkin .mceSplitButton span.mceAction.mce_numlist { + background-image: none; +} + +.wp_themeSkin .mceSplitButton a.mceOpen { + width: 11px; + height: 20px; + background-position: 0px 2px; + background-repeat: no-repeat; + padding: 1px 0; +} + +.wp_themeSkin .mceSplitButton span.mceOpen { + display: none; +} + +.wp_themeSkin .mceSplitButtonDisabled .mceAction { + opacity: 0.3; + filter: alpha(opacity=30); +} + +.wp_themeSkin .mceListBox a.mceText, +.wp_themeSkin .mceSplitButton a.mceAction { + -webkit-border-bottom-right-radius: 2px; + -webkit-border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-top-right-radius: 2px; +} + +.wp_themeSkin .mceSplitButton a.mceOpen, +.wp_themeSkin .mceListBox a.mceOpen { + -webkit-border-bottom-left-radius: 2px; + -webkit-border-top-left-radius: 2px; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* ColorSplitButton */ +.wp_themeSkin div.mceColorSplitMenu table { + background-color: #ebebeb; + border-color: #bbb; +} + +.wp_themeSkin .mceColorSplitMenu td { + padding: 2px; +} + +.wp_themeSkin .mceColorSplitMenu a { + display: block; + width: 9px; + height: 9px; + overflow: hidden; + border-color: #B2B2B2; +} + +.wp_themeSkin .mceColorSplitMenu td.mceMoreColors { + padding: 1px 1px 1px 3px; +} + +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors { + width: 100%; + height: auto; + text-align: center; + font-family: "Open Sans", sans-serif; + font-size: 11px; + line-height: 20px; + border-color: #fff; +} + +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover {} +.wp_themeSkin a.mceMoreColors:hover {} +.wp_themeSkin .mceColorPreview { + margin: -5px 2px 0 0; + width: 16px; + height: 4px; + overflow: hidden; +} + +/* Menu */ +.wp_themeSkin .mceMenu { + position: absolute; + right: 0; + top: 0; + z-index: 1000; + border-color: #ddd; + direction: rtl; +} + +.wp_themeSkin .mceNoIcons span.mceIcon { + width: 0; +} + +.wp_themeSkin .mceNoIcons a .mceText { + padding-right: 10px; +} + +.wp_themeSkin .mceMenu table { + background-color: #ebeaeb; +} + +.wp_themeSkin .mceMenu a, +.wp_themeSkin .mceMenu span, +.wp_themeSkin .mceMenu { + display: block; +} + +.wp_themeSkin .mceMenu td { + height: 20px;overflow: hidden; +} + +.wp_themeSkin .mceMenu a { + position: relative; + padding: 3px 0 4px 0; + text-decoration: none !important; +} + +.wp_themeSkin .mceMenu .mceText { + position: relative; + display: block; + font-family: "Open Sans", sans-serif; + cursor: default; + margin: 0; + padding: 0 25px; + color: #000; +} + +.wp_themeSkin .mceMenu span.mceText, .wp_themeSkin .mceMenu .mcePreview { + font-size: 12px; +} + +.wp_themeSkin .mceMenu pre.mceText { + font-family: Monospace; +} + +.wp_themeSkin .mceMenu .mceIcon { + position: absolute; + top: 0; + right: 0; + width: 22px; +} + +.wp_themeSkin .mceMenu .mceMenuItemEnabled a:hover, +.wp_themeSkin .mceMenu .mceMenuItemActive { + background-color: #f5f5f5; +} + +.wp_themeSkin td.mceMenuItemSeparator { + height: 1px; + background-color: #aaa; +} + +.wp_themeSkin .mceMenuItemTitle a { + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; + text-decoration: none !important; + background-color: #ccc; +} + +.wp_themeSkin .mceMenuItemTitle span.mceText { + font-weight: bold; + padding-right: 4px; + color: #000; +} + +.wp_themeSkin .mceMenuItemSelected .mceIcon { + background: url("../js/tinymce/themes/advanced/skins/default/img/menu_check.gif"); + color: #888; +} + +.wp_themeSkin .mceNoIcons .mceMenuItemSelected a { + background: url("../js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif") no-repeat -6px center; +} + +.wp_themeSkin .mceMenu span.mceMenuLine { + display: none; +} + +.wp_themeSkin .mceMenuItemSub a { + background: url("../js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif") no-repeat top left; +} + +/* Progress,Resize */ +.wp_themeSkin .mceBlocker { + position: absolute; + right: 0; + top: 0; + z-index: 1000; + opacity: 0.5; + filter: alpha(opacity=50); + background: #FFF; +} + +.wp_themeSkin .mceProgress { + position: absolute; + right: 0; + top: 0; + z-index: 1001; + background: url("../js/tinymce/themes/advanced/skins/default/img/progress.gif") no-repeat; + width: 32px; + height: 32px; + margin: -16px -16px 0 0; +} + +.wp_themeSkin .mcePlaceHolder { + border: 1px dotted gray; +} + +/* Rtl */ +.mceRtl .mceListBox .mceText { + text-align: left; + padding: 0 0 0 4px; +} + +.mceRtl .mceMenuItem .mceText { + text-align: left; +} + +/* Formats */ +.wp_themeSkin .mce_p span.mceText {} +.wp_themeSkin .mce_address span.mceText { + font-style: italic; +} + +.wp_themeSkin .mce_pre span.mceText { + font-family: monospace; +} + +.wp_themeSkin .mce_h1 span.mceText { + font-weight: bolder; + font-size: 18px; +} + +.wp_themeSkin .mce_h2 span.mceText { + font-weight: bolder; + font-size: 14px; +} + +.wp_themeSkin .mce_h3 span.mceText { + font-weight: bolder; + font-size: 12px; +} + +.wp_themeSkin .mce_h4 span.mceText { + font-weight: bolder; + font-size: 11px; +} + +.wp_themeSkin .mce_h5 span.mceText { + font-weight: bolder; + font-size: 11px; +} + +.wp_themeSkin .mce_h6 span.mceText { + font-weight: bolder; + font-size: 10px; +} + +span.mce_bold:before { + content: '\f200'; +} + +span.mce_italic:before { + content: '\f201'; +} + +span.mce_bullist:before { + content: '\f203'; +} + +span.mce_numlist:before { + content: '\f204'; +} + +span.mce_blockquote:before { + content: '\f205'; +} + +span.mce_justifyleft:before { + content: '\f206'; +} + +span.mce_justifycenter:before { + content: '\f207'; +} + +span.mce_justifyright:before { + content: '\f208'; +} + +span.mce_link:before { + content: '\f103'; +} + +span.mce_unlink:before { + content: '\f225'; +} + +span.mce_wp_more:before { + content: '\f209'; +} + +span.mce_strikethrough:before { + content: '\f224'; +} + +span.mce_spellchecker { + font-size: 20px; + background: none !important; + margin-top: 2px; +} + +span.mce_spellchecker:before { + content: '\f210'; +} + +span.mce_fullscreen:before, +span.mce_wp_fullscreen:before { + content: '\f211'; +} + +span.mce_wp_adv:before { + content: '\f212'; +} +span.mce_underline:before { + content: '\f213'; +} + +span.mce_justifyfull:before { + content: '\f214'; +} + +span.mce_forecolor { + background: none !important; +} + +span.mce_forecolor:before { + content: '\f215'; +} + +span.mce_pastetext:before { + content: '\f217'; +} + +span.mce_pasteword:before { + content: '\f216'; +} + +span.mce_removeformat:before { + content: '\f218'; +} + +span.mce_charmap:before { + content: '\f220'; +} + +span.mce_outdent:before { + content: '\f221'; +} + +span.mce_indent:before { + content: '\f222'; +} + +span.mce_undo:before { + content: '\f171'; +} + +span.mce_redo:before { + content: '\f172'; +} + +span.mce_help:before, +span.mce_wp_help:before { + content: '\f223'; +} + +span.mce_image:before { + content: '\f104'; +} + +span.mce_ltr:before { + content: '\f320'; +} + +/* Default icons */ +.wp_themeSkin span.mce_cleanup {background-position:-380px -20px} +.wp_themeSkin span.mce_anchor {background-position:-200px 0} +.wp_themeSkin span.mce_sub {background-position:-600px 0} +.wp_themeSkin span.mce_sup {background-position:-620px 0} +.wp_themeSkin span.mce_newdocument {background-position:-520px 0} +.wp_themeSkin span.mce_image {background-position:-380px 0} +.wp_themeSkin span.mce_code {background-position:-260px 0} +.wp_themeSkin span.mce_hr {background-position:-360px 0} +.wp_themeSkin span.mce_visualaid {background-position:-660px 0} +.wp_themeSkin span.mce_paste {background-position:-560px 0} +.wp_themeSkin span.mce_copy {background-position:-700px 0} +.wp_themeSkin span.mce_cut {background-position:-680px 0} +.wp_themeSkin .mce_backcolor span.mceAction {background-position:-760px 0} +.wp_themeSkin .mce_backcolorpicker {background-position:-760px 0} + +/* Plugins */ +.wp_themeSkin span.mce_advhr {background-position:-0px -20px} +.wp_themeSkin span.mce_ltr {background-position:-20px -20px} +.wp_themeSkin span.mce_rtl {background-position:-40px -20px} +.wp_themeSkin span.mce_emotions {background-position:-60px -20px} +.wp_themeSkin span.mce_fullpage {background-position:-80px -20px} +.wp_themeSkin span.mce_iespell {background-position:-120px -20px} +.wp_themeSkin span.mce_insertdate {background-position:-140px -20px} +.wp_themeSkin span.mce_inserttime {background-position:-160px -20px} +.wp_themeSkin span.mce_absolute {background-position:-180px -20px} +.wp_themeSkin span.mce_backward {background-position:-200px -20px} +.wp_themeSkin span.mce_forward {background-position:-220px -20px} +.wp_themeSkin span.mce_insert_layer {background-position:-240px -20px} +.wp_themeSkin span.mce_insertlayer {background-position:-260px -20px} +.wp_themeSkin span.mce_movebackward {background-position:-280px -20px} +.wp_themeSkin span.mce_moveforward {background-position:-300px -20px} +.wp_themeSkin span.mce_media {background-position:-320px -20px} +.wp_themeSkin span.mce_nonbreaking {background-position:-340px -20px} +.wp_themeSkin span.mce_selectall {background-position:-400px -20px} +.wp_themeSkin span.mce_preview {background-position:-420px -20px} +.wp_themeSkin span.mce_print {background-position:-440px -20px} +.wp_themeSkin span.mce_cancel {background-position:-460px -20px} +.wp_themeSkin span.mce_save {background-position:-480px -20px} +.wp_themeSkin span.mce_replace {background-position:-500px -20px} +.wp_themeSkin span.mce_search {background-position:-520px -20px} +.wp_themeSkin span.mce_styleprops {background-position:-560px -20px} +.wp_themeSkin span.mce_table {background-position:-580px -20px} +.wp_themeSkin span.mce_cell_props {background-position:-600px -20px} +.wp_themeSkin span.mce_delete_table {background-position:-620px -20px} +.wp_themeSkin span.mce_delete_col {background-position:-640px -20px} +.wp_themeSkin span.mce_delete_row {background-position:-660px -20px} +.wp_themeSkin span.mce_col_after {background-position:-680px -20px} +.wp_themeSkin span.mce_col_before {background-position:-700px -20px} +.wp_themeSkin span.mce_row_after {background-position:-720px -20px} +.wp_themeSkin span.mce_row_before {background-position:-740px -20px} +.wp_themeSkin span.mce_merge_cells {background-position:-760px -20px} +.wp_themeSkin span.mce_table_props {background-position:-980px -20px} +.wp_themeSkin span.mce_row_props {background-position:-780px -20px} +.wp_themeSkin span.mce_split_cells {background-position:-800px -20px} +.wp_themeSkin span.mce_template {background-position:-820px -20px} +.wp_themeSkin span.mce_visualchars {background-position:-840px -20px} +.wp_themeSkin span.mce_abbr {background-position:-860px -20px} +.wp_themeSkin span.mce_acronym {background-position:-880px -20px} +.wp_themeSkin span.mce_attribs {background-position:-900px -20px} +.wp_themeSkin span.mce_cite {background-position:-920px -20px} +.wp_themeSkin span.mce_del {background-position:-940px -20px} +.wp_themeSkin span.mce_ins {background-position:-960px -20px} +.wp_themeSkin span.mce_pagebreak {background-position:0 -40px} +.wp_themeSkin span.mce_restoredraft {background-position:-20px -40px} +.wp_themeSkin span.mce_visualblocks {background-position: -40px -40px} + +/* border */ +.wp_themeSkin .mceExternalToolbar, +.wp_themeSkin .mceButton, +.wp_themeSkin a.mceButtonEnabled:hover, +.wp_themeSkin a.mceButtonActive, +.wp_themeSkin a.mceButtonSelected, +.wp_themeSkin .mceListBox .mceText, +.wp_themeSkin .mceListBox .mceOpen, +.wp_themeSkin select.mceListBox, +.wp_themeSkin .mceSplitButton a.mceAction, +.wp_themeSkin .mceSplitButton a.mceOpen, +.wp_themeSkin .mceSplitButton a.mceOpen:hover, +.wp_themeSkin .mceSplitButtonSelected a.mceOpen, +.wp_themeSkin table.mceSplitButtonEnabled:hover a.mceAction, +.wp_themeSkin .mceSplitButton a.mceAction:hover, +.wp_themeSkin div.mceColorSplitMenu table, +.wp_themeSkin .mceColorSplitMenu a, +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors, +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover, +.wp_themeSkin a.mceMoreColors:hover, +.wp_themeSkin .mceMenu { + border-style: solid; + border-width: 1px; +} + +.wp_themeSkin .mceListBox .mceText { + border-left: 0 none; +} + +.wp_themeSkin iframe { + background: transparent; +} + +.wp_themeSkin .mceButton { + border-color: transparent; +} + +.wp_themeSkin .mceListBox .mceText, +.wp_themeSkin .mceListBox .mceOpen { + border-color: transparent; +} + +.wp_themeSkin a.mceButtonEnabled:hover, +.wp_themeSkin table.mceSplitButton:hover { + border-color: #bbb; + background: #eee; + background-image: -webkit-gradient(linear, right bottom, right top, from(#e5e5e5), to(#fff)); + background-image: -webkit-linear-gradient(bottom, #e5e5e5, #fff); + background-image: -moz-linear-gradient(bottom, #e5e5e5, #fff); + background-image: -o-linear-gradient(bottom, #e5e5e5, #fff); + background-image: linear-gradient(to top, #e5e5e5, #fff); +} + +.wp_themeSkin a.mceButton:active, +.wp_themeSkin a.mceButtonEnabled:active, +.wp_themeSkin a.mceButtonSelected:active, +.wp_themeSkin a.mceButtonActive, +.wp_themeSkin a.mceButtonActive:active, +.wp_themeSkin a.mceButtonActive:hover, +.wp_themeSkin .mceSplitButtonSelected table, +.wp_themeSkin .mceSplitButtonSelected table:hover { + outline: none; + border-color: #999 #999 #ccc #ccc; + background: #eee; + background-image: -webkit-gradient(linear, right bottom, right top, from(#f6f6f6), to(#e3e3e3)); + background-image: -webkit-linear-gradient(bottom, #f6f6f6, #e3e3e3); + background-image: -moz-linear-gradient(bottom, #f6f6f6, #e3e3e3); + background-image: -o-linear-gradient(bottom, #f6f6f6, #e3e3e3); + background-image: linear-gradient(to top, #f6f6f6, #e3e3e3); +} + +.wp_themeSkin .mceSplitButtonSelected table a.mceOpen, +.wp_themeSkin .mceSplitButtonSelected table a.mceAction { + border-color: #999 #999 #ccc #ccc; +} + +.wp_themeSkin .mceButtonDisabled { + border-color: transparent; +} + +.wp_themeSkin .mceListBox .mceOpen { + border-right: 0; +} + +.wp_themeSkin .mceListBoxEnabled:hover, +.wp_themeSkin .mceListBoxEnabled:active, +.wp_themeSkin .mceListBoxHover, +.wp_themeSkin .mceListBoxHover:active, +.wp_themeSkin .mceListBoxSelected { + -webkit-box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .3); + box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .3); + border-color: #bbb; +} + +/* SplitButton */ +.wp_themeSkin .mceSplitButton .mceLast span.mceOpen .mceIconOnly { + display: block; +} + +.wp_themeSkin .mceSplitButton a.mceAction, +.wp_themeSkin .mceSplitButton a.mceOpen { + border-color: transparent; +} + +.wp_themeSkin .mceSplitButton:hover a { + border-color: #bbb; +} + +.wp_themeSkin .mceSplitButtonEnabled a.mceOpen, +.wp_themeSkin .mceSplitButtonSelected a.mceOpen, +.wp_themeSkin .mceSplitButtonActive a.mceOpen, +.wp_themeSkin .mceSplitButtonEnabled:hover a.mceOpen { + background-image: url("../images/down_arrow.gif"); + background-position: 1px 2px; + background-repeat: no-repeat; + border-right: 0; +} + +.wp_themeSkin .mceSplitButtonActive td { + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover { + border-color: #0A246A; + background-color: #B6BDD2; +} + +.wp_themeSkin a.mceMoreColors:hover { + border-color: #0A246A; +} + +.wp_themeSkin .mceMenuItemDisabled .mceText { + color: #888; +} + +#mceModalBlocker { + background: #000; + opacity: 0.7; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); +} + +/* WP specific */ +.wp-editor-wrap { + position: relative; +} + +.wp-editor-tools { + position: relative; + z-index: 1; +} + +.wp-editor-container { + clear: both; +} + +.wp-editor-area { + font-family: Consolas, Monaco, monospace; + font-size: 13px; + padding: 10px; + margin: 1px 0 0; + line-height: 150%; + border: 0 none; + outline: none; + display: block; + resize: vertical; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.wp-editor-tools { + padding: 0; +} + +.wp-editor-container textarea.wp-editor-area { + width: 100%; + margin: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +.quicktags-toolbar, +.wp_themeSkin tr.mceFirst td.mceToolbar { + border-bottom: 1px solid #dedede; + background: #f5f5f5; +} + +.wp-editor-tabs { + float: left; +} + +.wp-switch-editor { + background: #ebebeb; + border: 1px solid #dedede; + color: #777; + cursor: pointer; + float: left; + font: 13px/19px "Open Sans", sans-serif; + height: 19px; + margin: 5px 5px 0 0; + padding: 3px 8px 4px; + position: relative; + top: 1px; +} + +.wp-switch-editor:active { + background-color: #f1f1f1; +} + +.wp-switch-editor:hover { + text-decoration: none !important; + background: #fff; +} + +.js .tmce-active .wp-editor-area { + color: white; +} + +.tmce-active .quicktags-toolbar { + display: none; +} + +.tmce-active .switch-tmce, +.html-active .switch-html { + background: #f5f5f5; + color: #555; + height: 20px; + border-bottom: none; +} + +.wp-media-buttons { + float: right; +} + +.wp-media-buttons .button { + margin-left: 5px; + margin-bottom: 4px; + padding-right: 7px; + padding-left: 7px; +} + +.wp-media-buttons .button:active { + position: relative; + top: 1px; + margin-top: -1px; + margin-bottom: 1px; +} + +.wp-media-buttons .insert-media { + padding-right: 5px; +} + +.wp-media-buttons a { + text-decoration: none; + color: #464646; + font-size: 12px; +} + +.wp-media-buttons img { + padding: 0 4px; + vertical-align: middle; +} + +.wp-media-buttons span.wp-media-buttons-icon { + display: inline-block; + width: 18px; + height: 18px; + vertical-align: text-top; + margin: 0 2px; +} + +.wp-media-buttons .add_media span.wp-media-buttons-icon { + background: none; +} + +.wp-media-buttons .add_media span.wp-media-buttons-icon:before { + font: normal 18px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-media-buttons .add_media span.wp-media-buttons-icon:before { + content: '\f104'; +} + +.quicktags-toolbar { + border-bottom-style: solid; + border-bottom-width: 1px; + -webkit-border-top-left-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + padding: 2px 8px 0; + min-height: 29px; +} + +.quicktags-toolbar > div { + padding: 2px 4px 0; +} + +.quicktags-toolbar input { + margin: 2px 1px 4px; + line-height: 18px; + display: inline-block; + min-width: 26px; + padding: 2px 4px; + font: 12px/18px "Open Sans", sans-serif; + color: #464646; + border: 1px solid #c3c3c3; + -webkit-border-radius: 3px; + border-radius: 3px; + background: #eee; + background-image: -webkit-gradient(linear, right bottom, right top, from(#e3e3e3), to(#fff)); + background-image: -webkit-linear-gradient(bottom, #e3e3e3, #fff); + background-image: -moz-linear-gradient(bottom, #e3e3e3, #fff); + background-image: -o-linear-gradient(bottom, #e3e3e3, #fff); + background-image: linear-gradient(to top, #e3e3e3, #fff); +} + +.quicktags-toolbar input:hover { + border-color: #aaa; + background: #ddd; +} + +.quicktags-toolbar input[value="link"] { + text-decoration: underline; +} + +.quicktags-toolbar input[value="del"] { + text-decoration: line-through; +} + +.quicktags-toolbar input[value="i"] { + font-style: italic; +} + +.quicktags-toolbar input[value="b"] { + font-weight: bold; +} + +#wp_editbtns, +#wp_gallerybtns { + padding: 2px; + position: absolute; + display: none; + z-index: 155000; +} + +#wp_editimgbtn, +#wp_delimgbtn, +#wp_editgallery, +#wp_delgallery { + border-color: #999; + background-color: #eee; + margin: 2px; + padding: 2px; + border-width: 1px; + border-style: solid; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +#wp_editimgbtn:hover, +#wp_delimgbtn:hover, +#wp_editgallery:hover, +#wp_delgallery:hover { + border-color: #555; + background-color: #ccc; +} + +/*------------------------------------------------------------------------------ + wp-link +------------------------------------------------------------------------------*/ + +#wp-link { + background-color: #F5F5F5; + line-height: 1.4em; + font-size: 12px; +} + +#wp-link ol, +#wp-link ul { + list-style: none; + margin: 0; + padding: 0; +} + +#wp-link input[type="text"] { + -webkit-box-sizing: border-box; +} + +#wp-link input[type="text"], +#wp-link textarea { + border-width: 1px; + border-style: solid; + -webkit-border-radius: 4px; + border-radius: 4px; + font-size: 12px; + margin: 1px; + padding: 3px; +} + +#wp-link #link-options { + padding: 10px 0 14px; + border-bottom: 1px solid #dfdfdf; + margin: 0 6px 14px; +} + +#wp-link p.howto { + margin: 3px; +} + +#wp-link #internal-toggle { + display: inline-block; + cursor: pointer; + padding-right: 18px; +} + +#wp-link .toggle-arrow { + background: transparent url("../images/toggle-arrow.png") top right no-repeat; + height: 23px; + line-height: 23px; +} + +#wp-link .toggle-arrow-active { + background-position: center right; +} + +#wp-link label input[type="text"] { + width: 360px; + margin-top: 5px; +} + +#wp-link #link-options label span, +#wp-link #search-panel label span.search-label { + display: inline-block; + width: 80px; + text-align: left; + padding-left: 5px; +} + +#wp-link .link-search-field { + float: right; + width: 220px; +} + +#wp-link .link-search-wrapper { + margin: 5px 6px 9px; + display: block; + overflow: hidden; +} + +#wp-link .link-search-wrapper span { + float: right; + margin-top: 4px; +} + +#wp-link .link-search-wrapper .spinner { + display: none; + vertical-align: text-bottom; +} + +#wp-link .link-target { + width: auto; + padding: 3px 0 0; + margin: 0 87px 0 0; + font-size: 11px; +} + +#wp-link .query-results { + border: 1px #dfdfdf solid; + margin: 0 5px 5px; + background: #fff; + height: 185px; + overflow: auto; + position: relative; +} + +#wp-link li, +#wp-link .query-notice { + clear: both; + margin-bottom: 0; + border-bottom: 1px solid #f1f1f1; + color: #333; + padding: 4px 6px; + cursor: pointer; + position: relative; +} + +#wp-link li:hover { + background: #eaf2fa; + color: #151515; +} + +#wp-link li.unselectable { + border-bottom: 1px solid #dfdfdf; +} + +#wp-link li.unselectable:hover { + background: #fff; + cursor: auto; + color: #333; +} + +#wp-link li.selected { + background: #ddd; + color: #333; +} + +#wp-link li.selected .item-title { + font-weight: bold; +} + +#wp-link .item-title { + display: inline-block; + width: 80%; +} + +#wp-link .item-info { + text-transform: uppercase; + color: #666; + font-size: 11px; + position: absolute; + left: 5px; + top: 4px; + bottom: 0; +} + +#wp-link #search-results { + display: none; +} + +#wp-link #search-panel { + float: right; + width: 100%; +} + +#wp-link .river-waiting { + display: none; + padding: 10px 0; +} + +#wp-link .river-waiting .spinner { + margin: 0 auto; + display: block; +} + +#wp-link .submitbox { + padding: 5px 10px; + font-size: 11px; + overflow: auto; + height: 29px; +} + +#wp-link-cancel { + line-height: 25px; + float: right; +} + +#wp-link-update { + line-height: 23px; + float: left; +} + +/*! + * jQuery UI CSS Framework 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + right: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + right: 0; + width: 100%; + height: 100%; +} + + +/*! + * jQuery UI Resizable 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + right: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + right: 0; +} +.ui-resizable-e { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: sw-resize; + width: 12px; + height: 12px; + left: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: se-resize; + width: 9px; + height: 9px; + right: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} + +/*! + * jQuery UI Dialog 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { + position: absolute; + top: 0; + /* @noflip */ + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: right; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + left: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: right; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em .4em .5em 1em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: left; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em 0 .5em .4em; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + left: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + +/* WP jQuery Dialog Theme */ +.wp-dialog { + padding: 0; + z-index: 300002; + border: 0; + -webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.7); + box-shadow: 0 5px 15px rgba(0,0,0,0.7); + background-color: #f5f5f5; +} + +.wp-dialog .ui-dialog-title { + display: block; + text-align: center; + padding: 0; +} + +.wp-dialog .ui-dialog-titlebar { + padding: 0 1em; + background-color: #444; + font-size: 13px; + line-height: 24px; + color: #fff; +} + +.wp-dialog .ui-dialog-content { + padding: 0; +} + +.wp-dialog .ui-dialog-titlebar-close { + cursor: pointer; + -webkit-appearance: none; + border: 0; + width: 30px; + height: 20px; + top: 13px; + left: 6px; + background: none; +} + +.wp-dialog .ui-dialog-titlebar-close:before { + content: '\f158'; + font: normal 20px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #999; + padding-right: 12px; +} + +.wp-dialog .ui-dialog-titlebar-close:hover:before { + color: #2ea2cc; +} + +.wp-dialog .ui-dialog-titlebar-close .ui-button-text { + display: none; +} + +.wp-dialog .ui-dialog-titlebar-close:hover, +.wp-dialog .ui-dialog-titlebar-close:focus { + background-position: -87px -32px; +} + +.ui-widget-overlay { + z-index: 300001; + background-color: #000; + opacity: 0.6; + filter: alpha(opacity=60); +} + +/* TinyMCE modal */ +.clearlooks2 .mceTop { + border-bottom: 1px solid #ccc; +} + +.clearlooks2 .mceTop span { + font: 13px/24px "Open Sans", sans-serif; + color: #e5e5e5; +} + +.clearlooks2 .mceTop .mceLeft { + background: #444444; + border-color: transparent; +} + +.clearlooks2 .mceTop .mceRight { + background: #444444; + border-color: transparent; +} + +.clearlooks2 .mceMiddle { + clip: rect(24px auto auto auto); +} + +.clearlooks2 .mceMiddle .mceLeft { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceMiddle .mceRight { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom .mceLeft { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom .mceCenter { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom .mceRight { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceClose, +.clearlooks2 .mceFocus .mceClose, +.clearlooks2 .mceFocus .mceClose:hover { + background-image: none; +} +.clearlooks2 .mceClose:before { + content: '\f158'; + font: normal 20px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #999; + padding-right: 12px; +} + +/* Distraction Free Writing mode + * =Overlay Styles +-------------------------------------------------------------- */ +.fullscreen-overlay { + z-index: 149999; + display: none; + position: fixed; + top: 0; + bottom: 0; + right: 0; + left: 0; + filter: inherit; +} + +.fullscreen-active .fullscreen-overlay, +.fullscreen-active #wp-fullscreen-body { + display: block; +} + +.fullscreen-fader { + z-index: 200000; +} + +.fullscreen-active .fullscreen-fader { + display: none; +} + +/* =Overlay Body +-------------------------------------------------------------- */ +#wp-fullscreen-body { + width: 100%; + z-index: 150005; + display: none; + position: absolute; + top: 0; + right: 0; + font-size: 12px; +} + +#wp-fullscreen-wrap { + margin: 0 auto 50px; + position: relative; + padding-top: 60px; +} + +#wp-fullscreen-title { + font-size: 1.7em; + line-height: 100%; + outline: medium none; + padding: 6px 7px; + width: 100%; + margin-bottom: 30px; + -webkit-box-shadow: none; + box-shadow: none; +} + +#wp-fullscreen-container { + padding: 4px 10px 50px; +} + +#wp-fullscreen-title, +#wp-fullscreen-container { + -webkit-border-radius: 0; + border-radius: 0; + border: 1px dashed transparent; + background: transparent; + -moz-transition-property: border-color; + -moz-transition-duration: 0.6s; + -webkit-transition-property: border-color; + -webkit-transition-duration: 0.6s; + -o-transition-property: border-color; + -o-transition-duration: 0.6s; + transition-property: border-color; + transition-duration: 0.6s; +} + +#wp_mce_fullscreen { + width: 100%; + min-height: 300px; + border: 0; + background: transparent; + font-family: Consolas, Monaco, monospace; + line-height: 1.6em; + padding: 0; + overflow-y: hidden; + outline: none; + resize: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +#wp-fullscreen-tagline { + color: #BBBBBB; + font-size: 18px; + float: left; + padding-top: 5px; +} + +/* =Top bar +-------------------------------------------------------------- */ +#fullscreen-topbar { + background: #f5f5f5; + border-bottom: 1px solid #fff; + height: 40px; + right: 0; + min-width: 800px; + position: fixed; + top: 0; + width: 100%; + z-index: 150050; +} + +#wp-fullscreen-toolbar { + padding: 6px 10px 0; + clear: both; + max-width: 1100px; + min-width: 820px; + margin: 0 auto; +} + +#wp-fullscreen-mode-bar, +#wp-fullscreen-button-bar, +#wp-fullscreen-close, +#wp-fullscreen-count { + float: right; +} + +#wp-fullscreen-save { + float: left; + padding: 2px 5px 0 2px; +} + +#wp-fullscreen-count, +#wp-fullscreen-close { + padding-top: 5px; +} + +#wp-fullscreen-central-toolbar { + margin: auto; + padding: 0; +} + +#wp-fullscreen-buttons > div { + float: right; +} + +#wp-fullscreen-mode-bar { + padding: 1px 0 0 14px; +} + +#wp-fullscreen-modes a { + display: block; + font-size: 11px; + text-decoration: none; + float: right; + margin: 1px 0 0 0; + padding: 2px 6px 2px; + border-width: 1px 0 1px 1px; + border-style: solid; + border-color: #bbb; + color: #777; + text-shadow: 0 1px 0 #fff; + background-color: #f4f4f4; + background: #f4f4f4; + background-image: -webkit-gradient(linear, right bottom, right top, from(#e4e4e4), to(#f9f9f9)); + background-image: -webkit-linear-gradient(bottom, #e4e4e4, #f9f9f9); + background-image: -moz-linear-gradient(bottom, #e4e4e4, #f9f9f9); + background-image: -o-linear-gradient(bottom, #e4e4e4, #f9f9f9); + background-image: linear-gradient(to top, #e4e4e4, #f9f9f9); +} + +#wp-fullscreen-modes a:hover, +.wp-html-mode #wp-fullscreen-modes a:last-child, +.wp-tmce-mode #wp-fullscreen-modes a:first-child { + color: #333; + border-color: #999; + background: #eee; + background-image: -webkit-gradient(linear, right top, right bottom, from(#e4e4e4), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #e4e4e4, #f9f9f9); + background-image: -moz-linear-gradient(top, #e4e4e4, #f9f9f9); + background-image: -o-linear-gradient(top, #e4e4e4, #f9f9f9); + background-image: linear-gradient(to bottom, #e4e4e4, #f9f9f9); +} + +#wp-fullscreen-modes a:first-child { + border-width: 1px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +#wp-fullscreen-modes a:last-child { + -webkit-border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +#wp-fullscreen-buttons .active a { + background: inherit; +} + +#wp-fullscreen-buttons .hidden { + display: none; +} + +#wp-fullscreen-buttons .disabled { + opacity: 0.5; +} + +.wp-html-mode #wp-fullscreen-buttons div { + display: none; +} + +.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both { + display: block; +} + +#fullscreen-topbar.fullscreen-make-sticky { + display: block !important; +} + +#wp-fullscreen-save img { + vertical-align: middle; +} + +#wp-fullscreen-save img, +#wp-fullscreen-save span { + padding-left: 4px; + display: none; +} + +/* =Thickbox Adjustments +-------------------------------------------------------------- */ +.fullscreen-active #TB_overlay { + z-index: 150100; +} + +.fullscreen-active #TB_window { + z-index: 150102; +} + +/* =TinyMCE Adjustments +-------------------------------------------------------------- */ +#wp_mce_fullscreen_ifr { + background: transparent; +} + +#wp_mce_fullscreen_parent #wp_mce_fullscreen_tbl tr.mceFirst { + display : none; +} + +#wp-fullscreen-container .wp_themeSkin table td { + vertical-align: top; +} + +/* Colors */ +.fullscreen-overlay { + background: #fff; +} + +.wp-fullscreen-focus #wp-fullscreen-title, +.wp-fullscreen-focus #wp-fullscreen-container { + border-color: #ccc; +} + +/* =CSS 3 transitions +-------------------------------------------------------------- */ + +.fade-1000, +.fade-600, +.fade-400, +.fade-300 { + opacity: 0; + -moz-transition-property: opacity; + -webkit-transition-property: opacity; + -o-transition-property: opacity; + transition-property: opacity; +} + +.fade-1000 { + -moz-transition-duration: 1s; + -webkit-transition-duration: 1s; + -o-transition-duration: 1s; + transition-duration: 1s; +} + +.fade-600 { + -moz-transition-duration: 0.6s; + -webkit-transition-duration: 0.6s; + -o-transition-duration: 0.6s; + transition-duration: 0.6s; +} + +.fade-400 { + -moz-transition-duration: 0.4s; + -webkit-transition-duration: 0.4s; + -o-transition-duration: 0.4s; + transition-duration: 0.4s; +} + +.fade-300 { + -moz-transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + -o-transition-duration: 0.3s; + transition-duration: 0.3s; +} + +.fade-trigger { + opacity: 1; +} + +/* =Localization +-------------------------------------------------------------- */ +.rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors, +.rtl .wp_themeSkin .mceMenu .mceText, +.rtl .wp-switch-editor, +.rtl .quicktags-toolbar input, +.rtl .clearlooks2 .mceTop span, +.rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors { + font-family: Tahoma, sans-serif; +} + +html:lang(he-il) .rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors, +html:lang(he-il) .rtl .wp_themeSkin .mceMenu .mceText, +html:lang(he-il) .rtl .wp-switch-editor, +html:lang(he-il) .rtl .quicktags-toolbar input, +html:lang(he-il) .rtl .clearlooks2 .mceTop span, +html:lang(he-il) .rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors { + font-family: Arial, sans-serif; +} + + +/* HiDPI */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .wp-media-buttons .add_media span.wp-media-buttons-icon, + #wp-fullscreen-buttons #wp_fs_image span.mce_image { + background: none; + } + + .wp_themeSkin .mceListBox .mceOpen, + .wp_themeSkin .mceListBoxHover .mceOpen, + .wp_themeSkin .mceListBoxSelected .mceOpen, + .wp_themeSkin table.mceListBoxEnabled .mceOpen { + background-image: url('../images/down_arrow-2x.gif'); + background-size: 10px 20px; + } + + .wp_themeSkin .mceSplitButtonEnabled a.mceOpen, + .wp_themeSkin .mceSplitButtonSelected a.mceOpen, + .wp_themeSkin .mceSplitButtonActive a.mceOpen, + .wp_themeSkin .mceSplitButtonEnabled:hover a.mceOpen { + background-image: url('../images/down_arrow-2x.gif'); + background-size: 10px 20px; + } + + #wp-link .toggle-arrow { + background: transparent url('../images/toggle-arrow-2x.png') top right no-repeat; + background-size: 19px 69px; + } +} diff --git a/src/wp-includes/css/editor-rtl.min.css b/src/wp-includes/css/editor-rtl.min.css new file mode 100644 index 0000000..72db64c --- /dev/null +++ b/src/wp-includes/css/editor-rtl.min.css @@ -0,0 +1,28 @@ +.wp_themeSkin table,.wp_themeSkin tbody,.wp_themeSkin a,.wp_themeSkin img,.wp_themeSkin tr,.wp_themeSkin div,.wp_themeSkin td,.wp_themeSkin iframe,.wp_themeSkin span,.wp_themeSkin *,.wp_themeSkin .mceText{border:0;margin:0;padding:0;white-space:nowrap;text-decoration:none;font-weight:400;cursor:default;vertical-align:baseline;width:auto;border-collapse:separate}.wp_themeSkin a:hover,.wp_themeSkin a:link,.wp_themeSkin a:visited,.wp_themeSkin a:active{text-decoration:none;font-weight:400;cursor:default}.wp_themeSkin table td{vertical-align:middle}.wp_themeSkin *,.wp_themeSkin a:hover,.wp_themeSkin a:link,.wp_themeSkin a:visited,.wp_themeSkin a:active{color:#555}.wp_themeSkin span.mce_sup,.wp_themeSkin span.mce_sub,.wp_themeSkin span.mce_media,.wp_themeSkin span.mce_styleprops,.wp_themeSkin span.mce_search,.wp_themeSkin span.mce_emotions,.wp_themeSkin span.mce_print,.wp_themeSkin span.mce_attribs,.wp_themeSkin span.mce_hr,.wp_themeSkin span.mce_cut,.wp_themeSkin span.mce_copy,.wp_themeSkin span.mce_paste,.wp_themeSkin span.mce_cite,.wp_themeSkin span.mce_visualchars,.wp_themeSkin span.mce_advhr,.wp_themeSkin span.mce_insertdate,.wp_themeSkin span.mce_anchor,.wp_themeSkin span.mce_visualaid,.wp_themeSkin span.mce_cleanup,.wp_themeSkin span.mce_table,.wp_themeSkin span.mce_row_props,.wp_themeSkin span.mce_cell_props,.wp_themeSkin span.mce_row_before,.wp_themeSkin span.mce_row_after,.wp_themeSkin span.mce_delete_row,.wp_themeSkin span.mce_col_before,.wp_themeSkin span.mce_col_after,.wp_themeSkin span.mce_delete_col,.wp_themeSkin span.mce_split_cells,.wp_themeSkin span.mce_merge_cells,.wp_themeSkin span.mce_delete_table,.wp_themeSkin span.mce_ins,.wp_themeSkin span.mce_abbr,.wp_themeSkin span.mce_acronym,.wp_themeSkin span.mce_del,.wp_themeSkin span.mce_replace,.wp_themeSkin span.mce_code,.wp_themeSkin span.mce_nonbreaking,.wp_themeSkin span.mce_inserttime,.wp_themeSkin span.mce_insertlayer,.wp_themeSkin span.mce_moveforward,.wp_themeSkin span.mce_movebackward,.wp_themeSkin span.mce_absolute{-moz-transition:none;-webkit-transition:none;transition:none;background:url(../js/tinymce/themes/advanced/img/icons.gif) no-repeat 20px 20px}.no-font-face .wp_themeSkin span.mce_undo,.no-font-face .wp_themeSkin span.mce_redo,.no-font-face .wp_themeSkin span.mce_bullist,.no-font-face .wp_themeSkin span.mce_numlist,.no-font-face .wp_themeSkin span.mce_blockquote,.no-font-face .wp_themeSkin span.mce_charmap,.no-font-face .wp_themeSkin span.mce_bold,.no-font-face .wp_themeSkin span.mce_italic,.no-font-face .wp_themeSkin span.mce_underline,.no-font-face .wp_themeSkin span.mce_justifyleft,.no-font-face .wp_themeSkin span.mce_justifyright,.no-font-face .wp_themeSkin span.mce_justifycenter,.no-font-face .wp_themeSkin span.mce_justifyfull,.no-font-face .wp_themeSkin span.mce_indent,.no-font-face .wp_themeSkin span.mce_outdent,.no-font-face .wp_themeSkin span.mce_link,.no-font-face .wp_themeSkin span.mce_unlink,.no-font-face .wp_themeSkin span.mce_help,.no-font-face .wp_themeSkin span.mce_removeformat,.no-font-face .wp_themeSkin span.mce_fullscreen,.no-font-face .wp_themeSkin span.mce_wp_fullscreen,.no-font-face .wp_themeSkin span.mce_media,.no-font-face .wp_themeSkin span.mce_pastetext,.no-font-face .wp_themeSkin span.mce_pasteword,.no-font-face .wp_themeSkin span.mce_wp_help,.no-font-face .wp_themeSkin span.mce_wp_adv,.no-font-face .wp_themeSkin span.mce_wp_more,.no-font-face .wp_themeSkin span.mce_strikethrough,.no-font-face .wp_themeSkin span.mce_spellchecker,.no-font-face .wp_themeSkin span.mce_forecolor,.no-font-face .wp_themeSkin .mce_forecolorpicker,.no-font-face .wp_themeSkin .mceSplitButton .mce_spellchecker span.mce_spellchecker,.no-font-face .wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor,.no-font-face .wp_themeSkin .mceSplitButton span.mce_numlist,.no-font-face .wp_themeSkin .mceSplitButton span.mce_bullist{-moz-transition:none;-webkit-transition:none;transition:none;background-image:url(../images/wpicons.png?ver=20120720)}.no-font-face .wp_themeSkin span.mce_undo{background-position:-500px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_undo,.no-font-face .wp_themeSkin .mceButtonActive span.mce_undo{background-position:-500px 0}.no-font-face .wp_themeSkin span.mce_redo{background-position:-480px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_redo,.no-font-face .wp_themeSkin .mceButtonActive span.mce_redo{background-position:-480px 0}.no-font-face .wp_themeSkin span.mce_bullist{background-position:-40px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_bullist,.no-font-face .wp_themeSkin .mceButtonActive span.mce_bullist,.no-font-face .wp_themeSkin .mceSplitButton:hover span.mce_bullist{background-position:-40px 0}.no-font-face .wp_themeSkin span.mce_numlist{background-position:-60px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_numlist,.no-font-face .wp_themeSkin .mceButtonActive span.mce_numlist,.no-font-face .wp_themeSkin .mceSplitButton:hover span.mce_numlist{background-position:-60px 0}.no-font-face .wp_themeSkin span.mce_blockquote{background-position:-80px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_blockquote,.no-font-face .wp_themeSkin .mceButtonActive span.mce_blockquote{background-position:-80px 0}.no-font-face .wp_themeSkin span.mce_charmap{background-position:-420px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_charmap,.no-font-face .wp_themeSkin .mceButtonActive span.mce_charmap{background-position:-420px 0}.no-font-face .wp_themeSkin span.mce_bold{background-position:0 -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_bold,.no-font-face .wp_themeSkin .mceButtonActive span.mce_bold{background-position:0 0}.no-font-face .wp_themeSkin span.mce_italic{background-position:-20px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_italic,.no-font-face .wp_themeSkin .mceButtonActive span.mce_italic{background-position:-20px 0}.no-font-face .wp_themeSkin span.mce_underline{background-position:-280px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_underline,.no-font-face .wp_themeSkin .mceButtonActive span.mce_underline{background-position:-280px 0}.no-font-face .wp_themeSkin span.mce_justifyleft{background-position:-100px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyleft,.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyleft{background-position:-100px 0}.no-font-face .wp_themeSkin span.mce_justifyright{background-position:-140px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyright,.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyright{background-position:-140px 0}.no-font-face .wp_themeSkin span.mce_justifycenter{background-position:-120px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifycenter,.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifycenter{background-position:-120px 0}.no-font-face .wp_themeSkin span.mce_justifyfull{background-position:-300px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyfull,.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyfull{background-position:-300px 0}.no-font-face .wp_themeSkin span.mce_indent{background-position:-460px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_indent,.no-font-face .wp_themeSkin .mceButtonActive span.mce_indent{background-position:-460px 0}.no-font-face .wp_themeSkin span.mce_outdent{background-position:-440px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_outdent,.no-font-face .wp_themeSkin .mceButtonActive span.mce_outdent{background-position:-440px 0}.no-font-face .wp_themeSkin span.mce_link{background-position:-160px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_link,.no-font-face .wp_themeSkin .mceButtonActive span.mce_link{background-position:-160px 0}.no-font-face .wp_themeSkin span.mce_unlink{background-position:-180px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_unlink,.no-font-face .wp_themeSkin .mceButtonActive span.mce_unlink{background-position:-180px 0}.no-font-face .wp_themeSkin span.mce_help{background-position:-520px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_help,.no-font-face .wp_themeSkin .mceButtonActive span.mce_help{background-position:-520px 0}.no-font-face .wp_themeSkin span.mce_removeformat{background-position:-380px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_removeformat,.no-font-face .wp_themeSkin .mceButtonActive span.mce_removeformat{background-position:-380px 0}.no-font-face .wp_themeSkin span.mce_strikethrough{background-position:-540px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_strikethrough,.no-font-face .wp_themeSkin .mceButtonActive span.mce_strikethrough{background-position:-540px 0}.no-font-face .wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor{background-position:-320px -20px}.no-font-face .wp_themeSkin .mceSplitButtonEnabled:hover span.mce_forecolor,.no-font-face .wp_themeSkin .mceSplitButtonSelected span.mce_forecolor{background-position:-320px 0}.no-font-face .wp_themeSkin .mce_forecolorpicker{background-position:-320px -20px}.no-font-face .wp_themeSkin span.mce_fullscreen{background-position:-240px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_fullscreen,.no-font-face .wp_themeSkin .mceButtonActive span.mce_fullscreen{background-position:-240px 0}.no-font-face .wp_themeSkin span.mce_wp_fullscreen{background-position:-240px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_fullscreen,.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_fullscreen{background-position:-240px 0}.no-font-face .wp_themeSkin span.mce_media{background-position:-400px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_media,.no-font-face .wp_themeSkin .mceButtonActive span.mce_media{background-position:-400px 0}.no-font-face .wp_themeSkin span.mce_pastetext{background-position:-340px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_pastetext,.no-font-face .wp_themeSkin .mceButtonActive span.mce_pastetext{background-position:-340px 0}.no-font-face .wp_themeSkin span.mce_pasteword{background-position:-360px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_pasteword,.no-font-face .wp_themeSkin .mceButtonActive span.mce_pasteword{background-position:-360px 0}.no-font-face .wp_themeSkin span.mce_spellchecker{background-position:-220px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_spellchecker,.no-font-face .wp_themeSkin .mceSplitButtonEnabled:hover span.mce_spellchecker,.no-font-face .wp_themeSkin .mceButtonActive span.mce_spellchecker,.no-font-face .wp_themeSkin .mceSplitButtonSelected span.mce_spellchecker{background-position:-220px 0}.no-font-face .wp_themeSkin span.mce_wp_help{background-position:-520px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_help,.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_help{background-position:-520px 0}.no-font-face .wp_themeSkin span.mce_wp_adv{background-position:-260px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_adv,.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_adv{background-position:-260px 0}.no-font-face .wp_themeSkin span.mce_wp_more{background-position:-200px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_more,.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_more{background-position:-200px 0}.no-font-face .mceIcon:before{display:none!important}.wp_themeSkin table{}.wp_themeSkin iframe{display:block}.wp_themeSkin #mce_fullscreen_ifr{background-color:#fff}.wp_themeSkin .mceToolbar{padding:1px}.wp_themeSkin .mceExternalToolbar{position:absolute;border-bottom:0;display:none}.wp_themeSkin .mceExternalToolbar td.mceToolbar{padding-left:13px}.wp_themeSkin .mceExternalClose{position:absolute;top:3px;left:3px;width:7px;height:7px;background:url(../js/tinymce/themes/advanced/img/icons.gif) -820px 0}.wp_themeSkin table.mceToolbar,.wp_themeSkin tr.mceFirst .mceToolbar tr td,.wp_themeSkin tr.mceLast .mceToolbar tr td{border:0;margin:0;padding:0}.wp_themeSkin table.mceLayout{border:0}.wp_themeSkin .mceStatusbar{background:#fff;border-top:1px solid #eee;color:#000;display:block;font-family:sans-serif;font-size:12px;height:20px;line-height:16px;padding:0 8px 0 0;overflow:visible}.wp_themeSkin .mceStatusbar *{color:#555}.wp_themeSkin .mceStatusbar div{float:right;padding:2px}.wp_themeSkin .mceStatusbar a.mceResize{display:block;float:left;background:url(../js/tinymce/themes/advanced/img/icons.gif) -800px 0;width:20px;height:20px;cursor:sw-resize}.wp_themeSkin .mceStatusbar a:hover{text-decoration:underline}.wp_themeSkin table.mceToolbar{margin:0 6px 2px}.wp_themeSkin table.mceToolbar :active,.wp_themeSkin table.mceToolbar :focus,.wp_themeSkin table.mceToolbar:focus,.wp_themeSkin span.mceSeparator:focus{outline:0}.wp_themeSkin #content_toolbar1{margin-top:2px}.wp_themeSkin .mceToolbar .mceToolbarEndListBox span{display:none}.wp_themeSkin span.mceIcon,.wp_themeSkin img.mceIcon{display:block;width:20px;height:20px}a .mceIcon,.mceAction{text-align:center;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mceAction{line-height:16px}.wp_themeSkin .mceButton{display:block;width:20px;height:20px;cursor:default;padding:1px 2px;margin:1px;-webkit-border-radius:2px;border-radius:2px}.wp_themeSkin a.mceButtonEnabled:hover{background-image:inherit 0 -10px}.wp_themeSkin .mceOldBoxModel a.mceButton span,.wp_themeSkin .mceOldBoxModel a.mceButton img{margin:0 1px 0 0}.wp_themeSkin .mceButtonDisabled .mceIcon{opacity:.2;filter:alpha(opacity=20)}.wp_themeSkin .mceSeparator{display:none}.wp_themeSkin .mceListBox,.wp_themeSkin .mceListBox a{display:block}.wp_themeSkin .mceListBox .mceText{padding:1px 5px 1px 4px;width:70px;text-align:right;text-decoration:none;-webkit-border-bottom-right-radius:2px;-webkit-border-top-right-radius:2px;border-bottom-right-radius:2px;border-top-right-radius:2px;font-family:sans-serif;font-size:12px;height:20px;line-height:20px;overflow:hidden}.wp_themeSkin .mceListBox{margin:1px;direction:rtl;background-color:#fff;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.2);box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.2)}.wp_themeSkin .mceListBox .mceOpen{width:12px;height:20px;border-collapse:separate;padding:1px;-webkit-border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-bottom-right-radius:0;border-top-right-radius:0}.wp_themeSkin .mceListBox .mceFirst a{border-style:solid;border-width:1px;border-bottom-left-radius:2px;border-top-left-radius:2px}.wp_themeSkin .mceListBoxMenu .mce_formatPreview{line-height:normal}.wp_themeSkin .mceListBox .mceOpen,.wp_themeSkin .mceListBoxHover .mceOpen,.wp_themeSkin .mceListBoxSelected .mceOpen,.wp_themeSkin table.mceListBoxEnabled .mceOpen{background-image:url(../images/down_arrow.gif);background-position:3px 1px;background-repeat:no-repeat}.wp_themeSkin .mceListBoxDisabled .mceText{color:gray}.wp_themeSkin .mceListBoxMenu{overflow:auto;overflow-x:hidden}.wp_themeSkin .mceOldBoxModel .mceListBox .mceText{height:22px}.wp_themeSkin select.mceListBox{font-family:sans-serif;font-size:12px;border-color:#b2b2b2;background-color:#fff}.wp_themeSkin .mceSplitButton a,.wp_themeSkin .mceSplitButton span{display:block;height:20px}.wp_themeSkin .mceSplitButton{display:block;direction:rtl}.wp_themeSkin table.mceSplitButton td{padding:2px;-webkit-border-radius:2px;border-radius:2px}.wp_themeSkin table.mceSplitButton:hover td{background-image:inherit 0 -10px}.wp_themeSkin .mceSplitButton a.mceAction{height:20px;width:20px;padding:1px 2px;border-left:0 none}.wp_themeSkin .mceSplitButton span.mceAction{background-image:url(../js/tinymce/themes/advanced/img/icons.gif);background-repeat:no-repeat;background-color:transparent;width:20px}.wp_themeSkin .mceSplitButton span.mceAction.mce_bullist,.wp_themeSkin .mceSplitButton span.mceAction.mce_numlist{background-image:none}.wp_themeSkin .mceSplitButton a.mceOpen{width:11px;height:20px;background-position:0 2px;background-repeat:no-repeat;padding:1px 0}.wp_themeSkin .mceSplitButton span.mceOpen{display:none}.wp_themeSkin .mceSplitButtonDisabled .mceAction{opacity:.3;filter:alpha(opacity=30)}.wp_themeSkin .mceListBox a.mceText,.wp_themeSkin .mceSplitButton a.mceAction{-webkit-border-bottom-right-radius:2px;-webkit-border-top-right-radius:2px;border-bottom-right-radius:2px;border-top-right-radius:2px}.wp_themeSkin .mceSplitButton a.mceOpen,.wp_themeSkin .mceListBox a.mceOpen{-webkit-border-bottom-left-radius:2px;-webkit-border-top-left-radius:2px;border-bottom-left-radius:2px;border-top-left-radius:2px}.wp_themeSkin div.mceColorSplitMenu table{background-color:#ebebeb;border-color:#bbb}.wp_themeSkin .mceColorSplitMenu td{padding:2px}.wp_themeSkin .mceColorSplitMenu a{display:block;width:9px;height:9px;overflow:hidden;border-color:#B2B2B2}.wp_themeSkin .mceColorSplitMenu td.mceMoreColors{padding:1px 1px 1px 3px}.wp_themeSkin .mceColorSplitMenu a.mceMoreColors{width:100%;height:auto;text-align:center;font-family:"Open Sans",sans-serif;font-size:11px;line-height:20px;border-color:#fff}.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover{}.wp_themeSkin a.mceMoreColors:hover{}.wp_themeSkin .mceColorPreview{margin:-5px 2px 0 0;width:16px;height:4px;overflow:hidden}.wp_themeSkin .mceMenu{position:absolute;right:0;top:0;z-index:1000;border-color:#ddd;direction:rtl}.wp_themeSkin .mceNoIcons span.mceIcon{width:0}.wp_themeSkin .mceNoIcons a .mceText{padding-right:10px}.wp_themeSkin .mceMenu table{background-color:#ebeaeb}.wp_themeSkin .mceMenu a,.wp_themeSkin .mceMenu span,.wp_themeSkin .mceMenu{display:block}.wp_themeSkin .mceMenu td{height:20px;overflow:hidden}.wp_themeSkin .mceMenu a{position:relative;padding:3px 0 4px;text-decoration:none!important}.wp_themeSkin .mceMenu .mceText{position:relative;display:block;font-family:"Open Sans",sans-serif;cursor:default;margin:0;padding:0 25px;color:#000}.wp_themeSkin .mceMenu span.mceText,.wp_themeSkin .mceMenu .mcePreview{font-size:12px}.wp_themeSkin .mceMenu pre.mceText{font-family:Monospace}.wp_themeSkin .mceMenu .mceIcon{position:absolute;top:0;right:0;width:22px}.wp_themeSkin .mceMenu .mceMenuItemEnabled a:hover,.wp_themeSkin .mceMenu .mceMenuItemActive{background-color:#f5f5f5}.wp_themeSkin td.mceMenuItemSeparator{height:1px;background-color:#aaa}.wp_themeSkin .mceMenuItemTitle a{border-top:0;border-left:0;border-right:0;border-bottom:1px solid #aaa;text-decoration:none!important;background-color:#ccc}.wp_themeSkin .mceMenuItemTitle span.mceText{font-weight:700;padding-right:4px;color:#000}.wp_themeSkin .mceMenuItemSelected .mceIcon{background:url(../js/tinymce/themes/advanced/skins/default/img/menu_check.gif);color:#888}.wp_themeSkin .mceNoIcons .mceMenuItemSelected a{background:url(../js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif) no-repeat -6px center}.wp_themeSkin .mceMenu span.mceMenuLine{display:none}.wp_themeSkin .mceMenuItemSub a{background:url(../js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif) no-repeat top left}.wp_themeSkin .mceBlocker{position:absolute;right:0;top:0;z-index:1000;opacity:.5;filter:alpha(opacity=50);background:#FFF}.wp_themeSkin .mceProgress{position:absolute;right:0;top:0;z-index:1001;background:url(../js/tinymce/themes/advanced/skins/default/img/progress.gif) no-repeat;width:32px;height:32px;margin:-16px -16px 0 0}.wp_themeSkin .mcePlaceHolder{border:1px dotted gray}.mceRtl .mceListBox .mceText{text-align:left;padding:0 0 0 4px}.mceRtl .mceMenuItem .mceText{text-align:left}.wp_themeSkin .mce_p span.mceText{}.wp_themeSkin .mce_address span.mceText{font-style:italic}.wp_themeSkin .mce_pre span.mceText{font-family:monospace}.wp_themeSkin .mce_h1 span.mceText{font-weight:bolder;font-size:18px}.wp_themeSkin .mce_h2 span.mceText{font-weight:bolder;font-size:14px}.wp_themeSkin .mce_h3 span.mceText{font-weight:bolder;font-size:12px}.wp_themeSkin .mce_h4 span.mceText{font-weight:bolder;font-size:11px}.wp_themeSkin .mce_h5 span.mceText{font-weight:bolder;font-size:11px}.wp_themeSkin .mce_h6 span.mceText{font-weight:bolder;font-size:10px}span.mce_bold:before{content:'\f200'}span.mce_italic:before{content:'\f201'}span.mce_bullist:before{content:'\f203'}span.mce_numlist:before{content:'\f204'}span.mce_blockquote:before{content:'\f205'}span.mce_justifyleft:before{content:'\f206'}span.mce_justifycenter:before{content:'\f207'}span.mce_justifyright:before{content:'\f208'}span.mce_link:before{content:'\f103'}span.mce_unlink:before{content:'\f225'}span.mce_wp_more:before{content:'\f209'}span.mce_strikethrough:before{content:'\f224'}span.mce_spellchecker{font-size:20px;background:none!important;margin-top:2px}span.mce_spellchecker:before{content:'\f210'}span.mce_fullscreen:before,span.mce_wp_fullscreen:before{content:'\f211'}span.mce_wp_adv:before{content:'\f212'}span.mce_underline:before{content:'\f213'}span.mce_justifyfull:before{content:'\f214'}span.mce_forecolor{background:none!important}span.mce_forecolor:before{content:'\f215'}span.mce_pastetext:before{content:'\f217'}span.mce_pasteword:before{content:'\f216'}span.mce_removeformat:before{content:'\f218'}span.mce_charmap:before{content:'\f220'}span.mce_outdent:before{content:'\f221'}span.mce_indent:before{content:'\f222'}span.mce_undo:before{content:'\f171'}span.mce_redo:before{content:'\f172'}span.mce_help:before,span.mce_wp_help:before{content:'\f223'}span.mce_image:before{content:'\f104'}span.mce_ltr:before{content:'\f320'}.wp_themeSkin span.mce_cleanup{background-position:-380px -20px}.wp_themeSkin span.mce_anchor{background-position:-200px 0}.wp_themeSkin span.mce_sub{background-position:-600px 0}.wp_themeSkin span.mce_sup{background-position:-620px 0}.wp_themeSkin span.mce_newdocument{background-position:-520px 0}.wp_themeSkin span.mce_image{background-position:-380px 0}.wp_themeSkin span.mce_code{background-position:-260px 0}.wp_themeSkin span.mce_hr{background-position:-360px 0}.wp_themeSkin span.mce_visualaid{background-position:-660px 0}.wp_themeSkin span.mce_paste{background-position:-560px 0}.wp_themeSkin span.mce_copy{background-position:-700px 0}.wp_themeSkin span.mce_cut{background-position:-680px 0}.wp_themeSkin .mce_backcolor span.mceAction{background-position:-760px 0}.wp_themeSkin .mce_backcolorpicker{background-position:-760px 0}.wp_themeSkin span.mce_advhr{background-position:-0px -20px}.wp_themeSkin span.mce_ltr{background-position:-20px -20px}.wp_themeSkin span.mce_rtl{background-position:-40px -20px}.wp_themeSkin span.mce_emotions{background-position:-60px -20px}.wp_themeSkin span.mce_fullpage{background-position:-80px -20px}.wp_themeSkin span.mce_iespell{background-position:-120px -20px}.wp_themeSkin span.mce_insertdate{background-position:-140px -20px}.wp_themeSkin span.mce_inserttime{background-position:-160px -20px}.wp_themeSkin span.mce_absolute{background-position:-180px -20px}.wp_themeSkin span.mce_backward{background-position:-200px -20px}.wp_themeSkin span.mce_forward{background-position:-220px -20px}.wp_themeSkin span.mce_insert_layer{background-position:-240px -20px}.wp_themeSkin span.mce_insertlayer{background-position:-260px -20px}.wp_themeSkin span.mce_movebackward{background-position:-280px -20px}.wp_themeSkin span.mce_moveforward{background-position:-300px -20px}.wp_themeSkin span.mce_media{background-position:-320px -20px}.wp_themeSkin span.mce_nonbreaking{background-position:-340px -20px}.wp_themeSkin span.mce_selectall{background-position:-400px -20px}.wp_themeSkin span.mce_preview{background-position:-420px -20px}.wp_themeSkin span.mce_print{background-position:-440px -20px}.wp_themeSkin span.mce_cancel{background-position:-460px -20px}.wp_themeSkin span.mce_save{background-position:-480px -20px}.wp_themeSkin span.mce_replace{background-position:-500px -20px}.wp_themeSkin span.mce_search{background-position:-520px -20px}.wp_themeSkin span.mce_styleprops{background-position:-560px -20px}.wp_themeSkin span.mce_table{background-position:-580px -20px}.wp_themeSkin span.mce_cell_props{background-position:-600px -20px}.wp_themeSkin span.mce_delete_table{background-position:-620px -20px}.wp_themeSkin span.mce_delete_col{background-position:-640px -20px}.wp_themeSkin span.mce_delete_row{background-position:-660px -20px}.wp_themeSkin span.mce_col_after{background-position:-680px -20px}.wp_themeSkin span.mce_col_before{background-position:-700px -20px}.wp_themeSkin span.mce_row_after{background-position:-720px -20px}.wp_themeSkin span.mce_row_before{background-position:-740px -20px}.wp_themeSkin span.mce_merge_cells{background-position:-760px -20px}.wp_themeSkin span.mce_table_props{background-position:-980px -20px}.wp_themeSkin span.mce_row_props{background-position:-780px -20px}.wp_themeSkin span.mce_split_cells{background-position:-800px -20px}.wp_themeSkin span.mce_template{background-position:-820px -20px}.wp_themeSkin span.mce_visualchars{background-position:-840px -20px}.wp_themeSkin span.mce_abbr{background-position:-860px -20px}.wp_themeSkin span.mce_acronym{background-position:-880px -20px}.wp_themeSkin span.mce_attribs{background-position:-900px -20px}.wp_themeSkin span.mce_cite{background-position:-920px -20px}.wp_themeSkin span.mce_del{background-position:-940px -20px}.wp_themeSkin span.mce_ins{background-position:-960px -20px}.wp_themeSkin span.mce_pagebreak{background-position:0 -40px}.wp_themeSkin span.mce_restoredraft{background-position:-20px -40px}.wp_themeSkin span.mce_visualblocks{background-position:-40px -40px}.wp_themeSkin .mceExternalToolbar,.wp_themeSkin .mceButton,.wp_themeSkin a.mceButtonEnabled:hover,.wp_themeSkin a.mceButtonActive,.wp_themeSkin a.mceButtonSelected,.wp_themeSkin .mceListBox .mceText,.wp_themeSkin .mceListBox .mceOpen,.wp_themeSkin select.mceListBox,.wp_themeSkin .mceSplitButton a.mceAction,.wp_themeSkin .mceSplitButton a.mceOpen,.wp_themeSkin .mceSplitButton a.mceOpen:hover,.wp_themeSkin .mceSplitButtonSelected a.mceOpen,.wp_themeSkin table.mceSplitButtonEnabled:hover a.mceAction,.wp_themeSkin .mceSplitButton a.mceAction:hover,.wp_themeSkin div.mceColorSplitMenu table,.wp_themeSkin .mceColorSplitMenu a,.wp_themeSkin .mceColorSplitMenu a.mceMoreColors,.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover,.wp_themeSkin a.mceMoreColors:hover,.wp_themeSkin .mceMenu{border-style:solid;border-width:1px}.wp_themeSkin .mceListBox .mceText{border-left:0 none}.wp_themeSkin iframe{background:transparent}.wp_themeSkin .mceButton{border-color:transparent}.wp_themeSkin .mceListBox .mceText,.wp_themeSkin .mceListBox .mceOpen{border-color:transparent}.wp_themeSkin a.mceButtonEnabled:hover,.wp_themeSkin table.mceSplitButton:hover{border-color:#bbb;background:#eee;background-image:-webkit-gradient(linear,right bottom,right top,from(#e5e5e5),to(#fff));background-image:-webkit-linear-gradient(bottom,#e5e5e5,#fff);background-image:-moz-linear-gradient(bottom,#e5e5e5,#fff);background-image:-o-linear-gradient(bottom,#e5e5e5,#fff);background-image:linear-gradient(to top,#e5e5e5,#fff)}.wp_themeSkin a.mceButton:active,.wp_themeSkin a.mceButtonEnabled:active,.wp_themeSkin a.mceButtonSelected:active,.wp_themeSkin a.mceButtonActive,.wp_themeSkin a.mceButtonActive:active,.wp_themeSkin a.mceButtonActive:hover,.wp_themeSkin .mceSplitButtonSelected table,.wp_themeSkin .mceSplitButtonSelected table:hover{outline:0;border-color:#999 #999 #ccc #ccc;background:#eee;background-image:-webkit-gradient(linear,right bottom,right top,from(#f6f6f6),to(#e3e3e3));background-image:-webkit-linear-gradient(bottom,#f6f6f6,#e3e3e3);background-image:-moz-linear-gradient(bottom,#f6f6f6,#e3e3e3);background-image:-o-linear-gradient(bottom,#f6f6f6,#e3e3e3);background-image:linear-gradient(to top,#f6f6f6,#e3e3e3)}.wp_themeSkin .mceSplitButtonSelected table a.mceOpen,.wp_themeSkin .mceSplitButtonSelected table a.mceAction{border-color:#999 #999 #ccc #ccc}.wp_themeSkin .mceButtonDisabled{border-color:transparent}.wp_themeSkin .mceListBox .mceOpen{border-right:0}.wp_themeSkin .mceListBoxEnabled:hover,.wp_themeSkin .mceListBoxEnabled:active,.wp_themeSkin .mceListBoxHover,.wp_themeSkin .mceListBoxHover:active,.wp_themeSkin .mceListBoxSelected{-webkit-box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.3);box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.3);border-color:#bbb}.wp_themeSkin .mceSplitButton .mceLast span.mceOpen .mceIconOnly{display:block}.wp_themeSkin .mceSplitButton a.mceAction,.wp_themeSkin .mceSplitButton a.mceOpen{border-color:transparent}.wp_themeSkin .mceSplitButton:hover a{border-color:#bbb}.wp_themeSkin .mceSplitButtonEnabled a.mceOpen,.wp_themeSkin .mceSplitButtonSelected a.mceOpen,.wp_themeSkin .mceSplitButtonActive a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover a.mceOpen{background-image:url(../images/down_arrow.gif);background-position:1px 2px;background-repeat:no-repeat;border-right:0}.wp_themeSkin .mceSplitButtonActive td{-webkit-border-radius:3px;border-radius:3px}.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover{border-color:#0A246A;background-color:#B6BDD2}.wp_themeSkin a.mceMoreColors:hover{border-color:#0A246A}.wp_themeSkin .mceMenuItemDisabled .mceText{color:#888}#mceModalBlocker{background:#000;opacity:.7;-ms-filter:"alpha(Opacity=70)";filter:alpha(opacity=70)}.wp-editor-wrap{position:relative}.wp-editor-tools{position:relative;z-index:1}.wp-editor-container{clear:both}.wp-editor-area{font-family:Consolas,Monaco,monospace;font-size:13px;padding:10px;margin:1px 0 0;line-height:150%;border:0 none;outline:0;display:block;resize:vertical;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-editor-tools{padding:0}.wp-editor-container textarea.wp-editor-area{width:100%;margin:0;-webkit-box-shadow:none;box-shadow:none}.quicktags-toolbar,.wp_themeSkin tr.mceFirst td.mceToolbar{border-bottom:1px solid #dedede;background:#f5f5f5}.wp-editor-tabs{float:left}.wp-switch-editor{background:#ebebeb;border:1px solid #dedede;color:#777;cursor:pointer;float:left;font:13px/19px "Open Sans",sans-serif;height:19px;margin:5px 5px 0 0;padding:3px 8px 4px;position:relative;top:1px}.wp-switch-editor:active{background-color:#f1f1f1}.wp-switch-editor:hover{text-decoration:none!important;background:#fff}.js .tmce-active .wp-editor-area{color:#fff}.tmce-active .quicktags-toolbar{display:none}.tmce-active .switch-tmce,.html-active .switch-html{background:#f5f5f5;color:#555;height:20px;border-bottom:0}.wp-media-buttons{float:right}.wp-media-buttons .button{margin-left:5px;margin-bottom:4px;padding-right:7px;padding-left:7px}.wp-media-buttons .button:active{position:relative;top:1px;margin-top:-1px;margin-bottom:1px}.wp-media-buttons .insert-media{padding-right:5px}.wp-media-buttons a{text-decoration:none;color:#464646;font-size:12px}.wp-media-buttons img{padding:0 4px;vertical-align:middle}.wp-media-buttons span.wp-media-buttons-icon{display:inline-block;width:18px;height:18px;vertical-align:text-top;margin:0 2px}.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{content:'\f104'}.quicktags-toolbar{border-bottom-style:solid;border-bottom-width:1px;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px;padding:2px 8px 0;min-height:29px}.quicktags-toolbar>div{padding:2px 4px 0}.quicktags-toolbar input{margin:2px 1px 4px;line-height:18px;display:inline-block;min-width:26px;padding:2px 4px;font:12px/18px "Open Sans",sans-serif;color:#464646;border:1px solid #c3c3c3;-webkit-border-radius:3px;border-radius:3px;background:#eee;background-image:-webkit-gradient(linear,right bottom,right top,from(#e3e3e3),to(#fff));background-image:-webkit-linear-gradient(bottom,#e3e3e3,#fff);background-image:-moz-linear-gradient(bottom,#e3e3e3,#fff);background-image:-o-linear-gradient(bottom,#e3e3e3,#fff);background-image:linear-gradient(to top,#e3e3e3,#fff)}.quicktags-toolbar input:hover{border-color:#aaa;background:#ddd}.quicktags-toolbar input[value=link]{text-decoration:underline}.quicktags-toolbar input[value=del]{text-decoration:line-through}.quicktags-toolbar input[value="i"]{font-style:italic}.quicktags-toolbar input[value="b"]{font-weight:700}#wp_editbtns,#wp_gallerybtns{padding:2px;position:absolute;display:none;z-index:155000}#wp_editimgbtn,#wp_delimgbtn,#wp_editgallery,#wp_delgallery{border-color:#999;background-color:#eee;margin:2px;padding:2px;border-width:1px;border-style:solid;-webkit-border-radius:3px;border-radius:3px}#wp_editimgbtn:hover,#wp_delimgbtn:hover,#wp_editgallery:hover,#wp_delgallery:hover{border-color:#555;background-color:#ccc}#wp-link{background-color:#F5F5F5;line-height:1.4em;font-size:12px}#wp-link ol,#wp-link ul{list-style:none;margin:0;padding:0}#wp-link input[type=text]{-webkit-box-sizing:border-box}#wp-link input[type=text],#wp-link textarea{border-width:1px;border-style:solid;-webkit-border-radius:4px;border-radius:4px;font-size:12px;margin:1px;padding:3px}#wp-link #link-options{padding:10px 0 14px;border-bottom:1px solid #dfdfdf;margin:0 6px 14px}#wp-link p.howto{margin:3px}#wp-link #internal-toggle{display:inline-block;cursor:pointer;padding-right:18px}#wp-link .toggle-arrow{background:transparent url(../images/toggle-arrow.png) top right no-repeat;height:23px;line-height:23px}#wp-link .toggle-arrow-active{background-position:center right}#wp-link label input[type=text]{width:360px;margin-top:5px}#wp-link #link-options label span,#wp-link #search-panel label span.search-label{display:inline-block;width:80px;text-align:left;padding-left:5px}#wp-link .link-search-field{float:right;width:220px}#wp-link .link-search-wrapper{margin:5px 6px 9px;display:block;overflow:hidden}#wp-link .link-search-wrapper span{float:right;margin-top:4px}#wp-link .link-search-wrapper .spinner{display:none;vertical-align:text-bottom}#wp-link .link-target{width:auto;padding:3px 0 0;margin:0 87px 0 0;font-size:11px}#wp-link .query-results{border:1px #dfdfdf solid;margin:0 5px 5px;background:#fff;height:185px;overflow:auto;position:relative}#wp-link li,#wp-link .query-notice{clear:both;margin-bottom:0;border-bottom:1px solid #f1f1f1;color:#333;padding:4px 6px;cursor:pointer;position:relative}#wp-link li:hover{background:#eaf2fa;color:#151515}#wp-link li.unselectable{border-bottom:1px solid #dfdfdf}#wp-link li.unselectable:hover{background:#fff;cursor:auto;color:#333}#wp-link li.selected{background:#ddd;color:#333}#wp-link li.selected .item-title{font-weight:700}#wp-link .item-title{display:inline-block;width:80%}#wp-link .item-info{text-transform:uppercase;color:#666;font-size:11px;position:absolute;left:5px;top:4px;bottom:0}#wp-link #search-results{display:none}#wp-link #search-panel{float:right;width:100%}#wp-link .river-waiting{display:none;padding:10px 0}#wp-link .river-waiting .spinner{margin:0 auto;display:block}#wp-link .submitbox{padding:5px 10px;font-size:11px;overflow:auto;height:29px}#wp-link-cancel{line-height:25px;float:right}#wp-link-update{line-height:23px;float:left}/*! + * jQuery UI CSS Framework 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;right:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;right:0;width:100%;height:100%}/*! + * jQuery UI Resizable 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;right:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;right:0}.ui-resizable-e{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-w{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-se{cursor:sw-resize;width:12px;height:12px;left:1px;bottom:1px}.ui-resizable-sw{cursor:se-resize;width:9px;height:9px;right:-5px;bottom:-5px}.ui-resizable-nw{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-resizable-ne{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}/*! + * jQuery UI Dialog 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:right;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;left:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0 0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:right;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em .4em .5em 1em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:left}.ui-dialog .ui-dialog-buttonpane button{margin:.5em 0 .5em .4em;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;left:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.wp-dialog{padding:0;z-index:300002;border:0;-webkit-box-shadow:0 5px 15px rgba(0,0,0,.7);box-shadow:0 5px 15px rgba(0,0,0,.7);background-color:#f5f5f5}.wp-dialog .ui-dialog-title{display:block;text-align:center;padding:0}.wp-dialog .ui-dialog-titlebar{padding:0 1em;background-color:#444;font-size:13px;line-height:24px;color:#fff}.wp-dialog .ui-dialog-content{padding:0}.wp-dialog .ui-dialog-titlebar-close{cursor:pointer;-webkit-appearance:none;border:0;width:30px;height:20px;top:13px;left:6px;background:0 0}.wp-dialog .ui-dialog-titlebar-close:before{content:'\f158';font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#999;padding-right:12px}.wp-dialog .ui-dialog-titlebar-close:hover:before{color:#2ea2cc}.wp-dialog .ui-dialog-titlebar-close .ui-button-text{display:none}.wp-dialog .ui-dialog-titlebar-close:hover,.wp-dialog .ui-dialog-titlebar-close:focus{background-position:-87px -32px}.ui-widget-overlay{z-index:300001;background-color:#000;opacity:.6;filter:alpha(opacity=60)}.clearlooks2 .mceTop{border-bottom:1px solid #ccc}.clearlooks2 .mceTop span{font:13px/24px "Open Sans",sans-serif;color:#e5e5e5}.clearlooks2 .mceTop .mceLeft{background:#444;border-color:transparent}.clearlooks2 .mceTop .mceRight{background:#444;border-color:transparent}.clearlooks2 .mceMiddle{clip:rect(24px auto auto auto)}.clearlooks2 .mceMiddle .mceLeft{background:#f1f1f1;border-color:transparent}.clearlooks2 .mceMiddle .mceRight{background:#f1f1f1;border-color:transparent}.clearlooks2 .mceBottom{background:#f1f1f1;border-color:transparent}.clearlooks2 .mceBottom .mceLeft{background:#f1f1f1;border-color:transparent}.clearlooks2 .mceBottom .mceCenter{background:#f1f1f1;border-color:transparent}.clearlooks2 .mceBottom .mceRight{background:#f1f1f1;border-color:transparent}.clearlooks2 .mceClose,.clearlooks2 .mceFocus .mceClose,.clearlooks2 .mceFocus .mceClose:hover{background-image:none}.clearlooks2 .mceClose:before{content:'\f158';font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#999;padding-right:12px}.fullscreen-overlay{z-index:149999;display:none;position:fixed;top:0;bottom:0;right:0;left:0;filter:inherit}.fullscreen-active .fullscreen-overlay,.fullscreen-active #wp-fullscreen-body{display:block}.fullscreen-fader{z-index:200000}.fullscreen-active .fullscreen-fader{display:none}#wp-fullscreen-body{width:100%;z-index:150005;display:none;position:absolute;top:0;right:0;font-size:12px}#wp-fullscreen-wrap{margin:0 auto 50px;position:relative;padding-top:60px}#wp-fullscreen-title{font-size:1.7em;line-height:100%;outline:medium none;padding:6px 7px;width:100%;margin-bottom:30px;-webkit-box-shadow:none;box-shadow:none}#wp-fullscreen-container{padding:4px 10px 50px}#wp-fullscreen-title,#wp-fullscreen-container{-webkit-border-radius:0;border-radius:0;border:1px dashed transparent;background:transparent;-moz-transition-property:border-color;-moz-transition-duration:.6s;-webkit-transition-property:border-color;-webkit-transition-duration:.6s;-o-transition-property:border-color;-o-transition-duration:.6s;transition-property:border-color;transition-duration:.6s}#wp_mce_fullscreen{width:100%;min-height:300px;border:0;background:transparent;font-family:Consolas,Monaco,monospace;line-height:1.6em;padding:0;overflow-y:hidden;outline:0;resize:none;-webkit-box-shadow:none;box-shadow:none}#wp-fullscreen-tagline{color:#BBB;font-size:18px;float:left;padding-top:5px}#fullscreen-topbar{background:#f5f5f5;border-bottom:1px solid #fff;height:40px;right:0;min-width:800px;position:fixed;top:0;width:100%;z-index:150050}#wp-fullscreen-toolbar{padding:6px 10px 0;clear:both;max-width:1100px;min-width:820px;margin:0 auto}#wp-fullscreen-mode-bar,#wp-fullscreen-button-bar,#wp-fullscreen-close,#wp-fullscreen-count{float:right}#wp-fullscreen-save{float:left;padding:2px 5px 0 2px}#wp-fullscreen-count,#wp-fullscreen-close{padding-top:5px}#wp-fullscreen-central-toolbar{margin:auto;padding:0}#wp-fullscreen-buttons>div{float:right}#wp-fullscreen-mode-bar{padding:1px 0 0 14px}#wp-fullscreen-modes a{display:block;font-size:11px;text-decoration:none;float:right;margin:1px 0 0;padding:2px 6px;border-width:1px 0 1px 1px;border-style:solid;border-color:#bbb;color:#777;text-shadow:0 1px 0 #fff;background-color:#f4f4f4;background:#f4f4f4;background-image:-webkit-gradient(linear,right bottom,right top,from(#e4e4e4),to(#f9f9f9));background-image:-webkit-linear-gradient(bottom,#e4e4e4,#f9f9f9);background-image:-moz-linear-gradient(bottom,#e4e4e4,#f9f9f9);background-image:-o-linear-gradient(bottom,#e4e4e4,#f9f9f9);background-image:linear-gradient(to top,#e4e4e4,#f9f9f9)}#wp-fullscreen-modes a:hover,.wp-html-mode #wp-fullscreen-modes a:last-child,.wp-tmce-mode #wp-fullscreen-modes a:first-child{color:#333;border-color:#999;background:#eee;background-image:-webkit-gradient(linear,right top,right bottom,from(#e4e4e4),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#e4e4e4,#f9f9f9);background-image:-moz-linear-gradient(top,#e4e4e4,#f9f9f9);background-image:-o-linear-gradient(top,#e4e4e4,#f9f9f9);background-image:linear-gradient(to bottom,#e4e4e4,#f9f9f9)}#wp-fullscreen-modes a:first-child{border-width:1px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px}#wp-fullscreen-modes a:last-child{-webkit-border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-top-left-radius:3px;border-bottom-left-radius:3px}#wp-fullscreen-buttons .active a{background:inherit}#wp-fullscreen-buttons .hidden{display:none}#wp-fullscreen-buttons .disabled{opacity:.5}.wp-html-mode #wp-fullscreen-buttons div{display:none}.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both{display:block}#fullscreen-topbar.fullscreen-make-sticky{display:block!important}#wp-fullscreen-save img{vertical-align:middle}#wp-fullscreen-save img,#wp-fullscreen-save span{padding-left:4px;display:none}.fullscreen-active #TB_overlay{z-index:150100}.fullscreen-active #TB_window{z-index:150102}#wp_mce_fullscreen_ifr{background:transparent}#wp_mce_fullscreen_parent #wp_mce_fullscreen_tbl tr.mceFirst{display:none}#wp-fullscreen-container .wp_themeSkin table td{vertical-align:top}.fullscreen-overlay{background:#fff}.wp-fullscreen-focus #wp-fullscreen-title,.wp-fullscreen-focus #wp-fullscreen-container{border-color:#ccc}.fade-1000,.fade-600,.fade-400,.fade-300{opacity:0;-moz-transition-property:opacity;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.fade-1000{-moz-transition-duration:1s;-webkit-transition-duration:1s;-o-transition-duration:1s;transition-duration:1s}.fade-600{-moz-transition-duration:.6s;-webkit-transition-duration:.6s;-o-transition-duration:.6s;transition-duration:.6s}.fade-400{-moz-transition-duration:.4s;-webkit-transition-duration:.4s;-o-transition-duration:.4s;transition-duration:.4s}.fade-300{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.fade-trigger{opacity:1}.rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors,.rtl .wp_themeSkin .mceMenu .mceText,.rtl .wp-switch-editor,.rtl .quicktags-toolbar input,.rtl .clearlooks2 .mceTop span,.rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors{font-family:Tahoma,sans-serif}html:lang(he-il) .rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors,html:lang(he-il) .rtl .wp_themeSkin .mceMenu .mceText,html:lang(he-il) .rtl .wp-switch-editor,html:lang(he-il) .rtl .quicktags-toolbar input,html:lang(he-il) .rtl .clearlooks2 .mceTop span,html:lang(he-il) .rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors{font-family:Arial,sans-serif}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.wp-media-buttons .add_media span.wp-media-buttons-icon,#wp-fullscreen-buttons #wp_fs_image span.mce_image{background:0 0}.wp_themeSkin .mceListBox .mceOpen,.wp_themeSkin .mceListBoxHover .mceOpen,.wp_themeSkin .mceListBoxSelected .mceOpen,.wp_themeSkin table.mceListBoxEnabled .mceOpen{background-image:url(../images/down_arrow-2x.gif);background-size:10px 20px}.wp_themeSkin .mceSplitButtonEnabled a.mceOpen,.wp_themeSkin .mceSplitButtonSelected a.mceOpen,.wp_themeSkin .mceSplitButtonActive a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover a.mceOpen{background-image:url(../images/down_arrow-2x.gif);background-size:10px 20px}#wp-link .toggle-arrow{background:transparent url(../images/toggle-arrow-2x.png) top right no-repeat;background-size:19px 69px}} \ No newline at end of file diff --git a/src/wp-includes/css/editor.css b/src/wp-includes/css/editor.css new file mode 100644 index 0000000..1af385d --- /dev/null +++ b/src/wp-includes/css/editor.css @@ -0,0 +1,2314 @@ + +/*------------------------------------------------------------------------------ + + TinyMCE and Quicklinks toolbars +------------------------------------------------------------------------------*/ + +/* wp_theme/ui.css */ +.wp_themeSkin table, +.wp_themeSkin tbody, +.wp_themeSkin a, +.wp_themeSkin img, +.wp_themeSkin tr, +.wp_themeSkin div, +.wp_themeSkin td, +.wp_themeSkin iframe, +.wp_themeSkin span, +.wp_themeSkin *, +.wp_themeSkin .mceText { + border: 0; + margin: 0; + padding: 0; + white-space: nowrap; + text-decoration: none; + font-weight: normal; + cursor: default; + vertical-align: baseline; + width: auto; + border-collapse: separate; +} + +.wp_themeSkin a:hover, +.wp_themeSkin a:link, +.wp_themeSkin a:visited, +.wp_themeSkin a:active { + text-decoration: none; + font-weight: normal; + cursor: default; +} + +.wp_themeSkin table td { + vertical-align: middle; +} + +.wp_themeSkin *, +.wp_themeSkin a:hover, +.wp_themeSkin a:link, +.wp_themeSkin a:visited, +.wp_themeSkin a:active { + color: #555; +} + +/* These are part of TinyMCE, used in TinyMCE Advanced, but not WordPress. These are not updated for 3.8's design. */ +.wp_themeSkin span.mce_sup, +.wp_themeSkin span.mce_sub, +.wp_themeSkin span.mce_media, +.wp_themeSkin span.mce_styleprops, +.wp_themeSkin span.mce_search, +.wp_themeSkin span.mce_emotions, +.wp_themeSkin span.mce_print, +.wp_themeSkin span.mce_attribs, +.wp_themeSkin span.mce_hr, +.wp_themeSkin span.mce_cut, +.wp_themeSkin span.mce_copy, +.wp_themeSkin span.mce_paste, +.wp_themeSkin span.mce_cite, +.wp_themeSkin span.mce_visualchars, +.wp_themeSkin span.mce_advhr, +.wp_themeSkin span.mce_insertdate, +.wp_themeSkin span.mce_anchor, +.wp_themeSkin span.mce_visualaid, +.wp_themeSkin span.mce_cleanup, +.wp_themeSkin span.mce_table, +.wp_themeSkin span.mce_row_props, +.wp_themeSkin span.mce_cell_props, +.wp_themeSkin span.mce_row_before, +.wp_themeSkin span.mce_row_after, +.wp_themeSkin span.mce_delete_row, +.wp_themeSkin span.mce_col_before, +.wp_themeSkin span.mce_col_after, +.wp_themeSkin span.mce_delete_col, +.wp_themeSkin span.mce_split_cells, +.wp_themeSkin span.mce_merge_cells, +.wp_themeSkin span.mce_delete_table, +.wp_themeSkin span.mce_ins, +.wp_themeSkin span.mce_abbr, +.wp_themeSkin span.mce_acronym, +.wp_themeSkin span.mce_del, +.wp_themeSkin span.mce_replace, +.wp_themeSkin span.mce_code, +.wp_themeSkin span.mce_nonbreaking, +.wp_themeSkin span.mce_inserttime, +.wp_themeSkin span.mce_insertlayer, +.wp_themeSkin span.mce_moveforward, +.wp_themeSkin span.mce_movebackward, +.wp_themeSkin span.mce_absolute { + -moz-transition: none; + -webkit-transition: none; + transition: none; + background: url("../js/tinymce/themes/advanced/img/icons.gif") no-repeat 20px 20px; +} + +/* No @font-face support */ +.no-font-face .wp_themeSkin span.mce_undo, +.no-font-face .wp_themeSkin span.mce_redo, +.no-font-face .wp_themeSkin span.mce_bullist, +.no-font-face .wp_themeSkin span.mce_numlist, +.no-font-face .wp_themeSkin span.mce_blockquote, +.no-font-face .wp_themeSkin span.mce_charmap, +.no-font-face .wp_themeSkin span.mce_bold, +.no-font-face .wp_themeSkin span.mce_italic, +.no-font-face .wp_themeSkin span.mce_underline, +.no-font-face .wp_themeSkin span.mce_justifyleft, +.no-font-face .wp_themeSkin span.mce_justifyright, +.no-font-face .wp_themeSkin span.mce_justifycenter, +.no-font-face .wp_themeSkin span.mce_justifyfull, +.no-font-face .wp_themeSkin span.mce_indent, +.no-font-face .wp_themeSkin span.mce_outdent, +.no-font-face .wp_themeSkin span.mce_link, +.no-font-face .wp_themeSkin span.mce_unlink, +.no-font-face .wp_themeSkin span.mce_help, +.no-font-face .wp_themeSkin span.mce_removeformat, +.no-font-face .wp_themeSkin span.mce_fullscreen, +.no-font-face .wp_themeSkin span.mce_wp_fullscreen, +.no-font-face .wp_themeSkin span.mce_media, +.no-font-face .wp_themeSkin span.mce_pastetext, +.no-font-face .wp_themeSkin span.mce_pasteword, +.no-font-face .wp_themeSkin span.mce_wp_help, +.no-font-face .wp_themeSkin span.mce_wp_adv, +.no-font-face .wp_themeSkin span.mce_wp_more, +.no-font-face .wp_themeSkin span.mce_strikethrough, +.no-font-face .wp_themeSkin span.mce_spellchecker, +.no-font-face .wp_themeSkin span.mce_forecolor, +.no-font-face .wp_themeSkin .mce_forecolorpicker, +.no-font-face .wp_themeSkin .mceSplitButton .mce_spellchecker span.mce_spellchecker, +.no-font-face .wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor, +.no-font-face .wp_themeSkin .mceSplitButton span.mce_numlist, +.no-font-face .wp_themeSkin .mceSplitButton span.mce_bullist { + -moz-transition: none; + -webkit-transition: none; + transition: none; + background-image: url('../images/wpicons.png?ver=20120720'); +} + +/* Theme */ +.no-font-face .wp_themeSkin span.mce_undo {background-position:-500px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_undo, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_undo {background-position:-500px 0} + +.no-font-face .wp_themeSkin span.mce_redo {background-position:-480px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_redo, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_redo {background-position:-480px 0} + +.no-font-face .wp_themeSkin span.mce_bullist {background-position:-40px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_bullist, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_bullist, +.no-font-face .wp_themeSkin .mceSplitButton:hover span.mce_bullist {background-position:-40px 0} + +.no-font-face .wp_themeSkin span.mce_numlist {background-position:-60px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_numlist, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_numlist, +.no-font-face .wp_themeSkin .mceSplitButton:hover span.mce_numlist {background-position:-60px 0} + +.no-font-face .wp_themeSkin span.mce_blockquote {background-position:-80px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_blockquote, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_blockquote {background-position:-80px 0} + +.no-font-face .wp_themeSkin span.mce_charmap {background-position:-420px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_charmap, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_charmap {background-position:-420px 0} + +.no-font-face .wp_themeSkin span.mce_bold {background-position:0 -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_bold, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_bold {background-position:0 0} + +.no-font-face .wp_themeSkin span.mce_italic {background-position:-20px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_italic, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_italic {background-position:-20px 0} + +.no-font-face .wp_themeSkin span.mce_underline {background-position:-280px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_underline, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_underline {background-position:-280px 0} + +.no-font-face .wp_themeSkin span.mce_justifyleft {background-position:-100px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyleft, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyleft {background-position:-100px 0} + +.no-font-face .wp_themeSkin span.mce_justifyright {background-position:-140px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyright, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyright {background-position:-140px 0} + +.no-font-face .wp_themeSkin span.mce_justifycenter {background-position:-120px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifycenter, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifycenter {background-position:-120px 0} + +.no-font-face .wp_themeSkin span.mce_justifyfull {background-position:-300px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyfull, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyfull {background-position:-300px 0} + +.no-font-face .wp_themeSkin span.mce_indent {background-position:-460px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_indent, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_indent {background-position:-460px 0} + +.no-font-face .wp_themeSkin span.mce_outdent {background-position:-440px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_outdent, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_outdent {background-position:-440px 0} + +.no-font-face .wp_themeSkin span.mce_link {background-position:-160px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_link, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_link {background-position:-160px 0} + +.no-font-face .wp_themeSkin span.mce_unlink {background-position:-180px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_unlink, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_unlink {background-position:-180px 0} + +.no-font-face .wp_themeSkin span.mce_help {background-position:-520px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_help, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_help {background-position:-520px 0} + +.no-font-face .wp_themeSkin span.mce_removeformat {background-position:-380px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_removeformat, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_removeformat {background-position:-380px 0} + +.no-font-face .wp_themeSkin span.mce_strikethrough {background-position:-540px -20px;} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_strikethrough, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_strikethrough {background-position:-540px 0} + +.no-font-face .wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor {background-position:-320px -20px} +.no-font-face .wp_themeSkin .mceSplitButtonEnabled:hover span.mce_forecolor, +.no-font-face .wp_themeSkin .mceSplitButtonSelected span.mce_forecolor {background-position:-320px 0} + +.no-font-face .wp_themeSkin .mce_forecolorpicker {background-position:-320px -20px} + +/* Plugins in WP */ +.no-font-face .wp_themeSkin span.mce_fullscreen {background-position:-240px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_fullscreen, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_fullscreen {background-position:-240px 0} + +.no-font-face .wp_themeSkin span.mce_wp_fullscreen {background-position:-240px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_fullscreen, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_fullscreen {background-position:-240px 0} + +.no-font-face .wp_themeSkin span.mce_media {background-position:-400px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_media, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_media {background-position:-400px 0} + +.no-font-face .wp_themeSkin span.mce_pastetext {background-position:-340px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_pastetext, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_pastetext {background-position:-340px 0} + +.no-font-face .wp_themeSkin span.mce_pasteword {background-position:-360px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_pasteword, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_pasteword {background-position:-360px 0} + +.no-font-face .wp_themeSkin span.mce_spellchecker {background-position:-220px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_spellchecker, +.no-font-face .wp_themeSkin .mceSplitButtonEnabled:hover span.mce_spellchecker, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_spellchecker, +.no-font-face .wp_themeSkin .mceSplitButtonSelected span.mce_spellchecker {background-position:-220px 0} + +.no-font-face .wp_themeSkin span.mce_wp_help {background-position:-520px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_help, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_help {background-position:-520px 0} + +.no-font-face .wp_themeSkin span.mce_wp_adv {background-position:-260px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_adv, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_adv {background-position:-260px 0} + +.no-font-face .wp_themeSkin span.mce_wp_more {background-position:-200px -20px} +.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_more, +.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_more {background-position:-200px 0} + +.no-font-face .mceIcon:before { + display: none !important; +} +/* End no @font-face */ + +/* Containers */ +.wp_themeSkin table {} + +.wp_themeSkin iframe { + display: block; +} + +.wp_themeSkin #mce_fullscreen_ifr { + background-color: #fff; +} + +.wp_themeSkin .mceToolbar { + padding: 1px; +} + +/* External */ +.wp_themeSkin .mceExternalToolbar { + position: absolute; + border-bottom: 0; + display: none; +} + +.wp_themeSkin .mceExternalToolbar td.mceToolbar { + padding-right: 13px; +} + +.wp_themeSkin .mceExternalClose { + position: absolute; + top: 3px; + right: 3px; + width: 7px; + height: 7px; + background: url("../js/tinymce/themes/advanced/img/icons.gif") -820px 0; +} + +/* Layout */ +.wp_themeSkin table.mceToolbar, +.wp_themeSkin tr.mceFirst .mceToolbar tr td, +.wp_themeSkin tr.mceLast .mceToolbar tr td { + border: 0; + margin: 0; + padding: 0; +} + +.wp_themeSkin table.mceLayout { + border: 0; +} + +.wp_themeSkin .mceStatusbar { + background: #fff; + border-top: 1px solid #eee; + color: #000; + display: block; + font-family: sans-serif; + font-size: 12px; + height: 20px; + line-height: 16px; + padding: 0 0 0 8px; + overflow: visible; +} + +.wp_themeSkin .mceStatusbar * { + color: #555; +} + +.wp_themeSkin .mceStatusbar div { + float: left; + padding: 2px; +} + +.wp_themeSkin .mceStatusbar a.mceResize { + display: block; + float: right; + background: url("../js/tinymce/themes/advanced/img/icons.gif") -800px 0; + width: 20px; + height: 20px; + cursor: se-resize; +} + +.wp_themeSkin .mceStatusbar a:hover { + text-decoration: underline; +} + +.wp_themeSkin table.mceToolbar { + margin: 0 6px 2px; +} + +.wp_themeSkin table.mceToolbar :active, +.wp_themeSkin table.mceToolbar :focus, +.wp_themeSkin table.mceToolbar:focus, +.wp_themeSkin span.mceSeparator:focus { + outline: none; +} + +.wp_themeSkin #content_toolbar1 { + margin-top: 2px; +} + +.wp_themeSkin .mceToolbar .mceToolbarEndListBox span { + display: none; +} + +.wp_themeSkin span.mceIcon, +.wp_themeSkin img.mceIcon { + display: block; + width: 20px; + height: 20px; +} + +a .mceIcon, .mceAction { + text-align: center; + font: normal 20px/1 'dashicons' !important; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.mceAction { + line-height:16px; +} + +/* Button */ +.wp_themeSkin .mceButton { + display: block; + width: 20px; + height: 20px; + cursor: default; + padding: 1px 2px; + margin: 1px; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +.wp_themeSkin a.mceButtonEnabled:hover { + background-image: inherit 0 -10px; +} + +.wp_themeSkin .mceOldBoxModel a.mceButton span, .wp_themeSkin .mceOldBoxModel a.mceButton img { + margin: 0 0 0 1px; +} + +.wp_themeSkin .mceButtonDisabled .mceIcon { + opacity: 0.2; + filter: alpha(opacity=20); +} + +/* Separator */ +.wp_themeSkin .mceSeparator { + display: none; +} + +/* ListBox */ +.wp_themeSkin .mceListBox, +.wp_themeSkin .mceListBox a { + display: block; +} + +.wp_themeSkin .mceListBox .mceText { + padding: 1px 4px 1px 5px; + width: 70px; + text-align: left; + text-decoration: none; + -webkit-border-bottom-left-radius: 2px; + -webkit-border-top-left-radius: 2px; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; + font-family: sans-serif; + font-size: 12px; + height: 20px; + line-height: 20px; + overflow: hidden; +} + +.wp_themeSkin .mceListBox { + margin: 1px; + direction: ltr; + background-color: #fff; + border: 1px solid #ddd; + -webkit-box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .2); + box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .2); +} + +.wp_themeSkin .mceListBox .mceOpen { + width: 12px; + height: 20px; + border-collapse: separate; + padding: 1px; + -webkit-border-bottom-left-radius: 0; + -webkit-border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.wp_themeSkin .mceListBox .mceFirst a { + border-style: solid; + border-width: 1px; + border-bottom-right-radius: 2px; + border-top-right-radius: 2px; +} + +.wp_themeSkin .mceListBoxMenu .mce_formatPreview { + line-height: normal; +} + +.wp_themeSkin .mceListBox .mceOpen, +.wp_themeSkin .mceListBoxHover .mceOpen, +.wp_themeSkin .mceListBoxSelected .mceOpen, +.wp_themeSkin table.mceListBoxEnabled .mceOpen { + background-image: url("../images/down_arrow.gif"); + background-position: 3px 1px; + background-repeat: no-repeat; +} + +.wp_themeSkin .mceListBoxDisabled .mceText { + color: gray; +} + +.wp_themeSkin .mceListBoxMenu { + overflow: auto; + overflow-x: hidden; +} + +.wp_themeSkin .mceOldBoxModel .mceListBox .mceText { + height: 22px; +} + +.wp_themeSkin select.mceListBox { + font-family: sans-serif; + font-size: 12px; + border-color: #b2b2b2; + background-color: #fff; +} + +/* SplitButton */ +.wp_themeSkin .mceSplitButton a, +.wp_themeSkin .mceSplitButton span { + display: block; + height: 20px; +} + +.wp_themeSkin .mceSplitButton { + display: block; + direction: ltr; +} + +.wp_themeSkin table.mceSplitButton td { + padding: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +.wp_themeSkin table.mceSplitButton:hover td { + background-image: inherit 0 -10px; +} + +.wp_themeSkin .mceSplitButton a.mceAction { + height: 20px; + width: 20px; + padding: 1px 2px; + border-right: 0 none; +} + +.wp_themeSkin .mceSplitButton span.mceAction { + background-image: url("../js/tinymce/themes/advanced/img/icons.gif"); + background-repeat: no-repeat; + background-color: transparent; + width: 20px; +} + +.wp_themeSkin .mceSplitButton span.mceAction.mce_bullist, +.wp_themeSkin .mceSplitButton span.mceAction.mce_numlist { + background-image: none; +} + +.wp_themeSkin .mceSplitButton a.mceOpen { + width: 11px; + height: 20px; + background-position: 0px 2px; + background-repeat: no-repeat; + padding: 1px 0; +} + +.wp_themeSkin .mceSplitButton span.mceOpen { + display: none; +} + +.wp_themeSkin .mceSplitButtonDisabled .mceAction { + opacity: 0.3; + filter: alpha(opacity=30); +} + +.wp_themeSkin .mceListBox a.mceText, +.wp_themeSkin .mceSplitButton a.mceAction { + -webkit-border-bottom-left-radius: 2px; + -webkit-border-top-left-radius: 2px; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +.wp_themeSkin .mceSplitButton a.mceOpen, +.wp_themeSkin .mceListBox a.mceOpen { + -webkit-border-bottom-right-radius: 2px; + -webkit-border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-top-right-radius: 2px; +} + +/* ColorSplitButton */ +.wp_themeSkin div.mceColorSplitMenu table { + background-color: #ebebeb; + border-color: #bbb; +} + +.wp_themeSkin .mceColorSplitMenu td { + padding: 2px; +} + +.wp_themeSkin .mceColorSplitMenu a { + display: block; + width: 9px; + height: 9px; + overflow: hidden; + border-color: #B2B2B2; +} + +.wp_themeSkin .mceColorSplitMenu td.mceMoreColors { + padding: 1px 3px 1px 1px; +} + +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors { + width: 100%; + height: auto; + text-align: center; + font-family: "Open Sans", sans-serif; + font-size: 11px; + line-height: 20px; + border-color: #fff; +} + +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover {} +.wp_themeSkin a.mceMoreColors:hover {} +.wp_themeSkin .mceColorPreview { + margin: -5px 0 0 2px; + width: 16px; + height: 4px; + overflow: hidden; +} + +/* Menu */ +.wp_themeSkin .mceMenu { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + border-color: #ddd; + direction: ltr; +} + +.wp_themeSkin .mceNoIcons span.mceIcon { + width: 0; +} + +.wp_themeSkin .mceNoIcons a .mceText { + padding-left: 10px; +} + +.wp_themeSkin .mceMenu table { + background-color: #ebeaeb; +} + +.wp_themeSkin .mceMenu a, +.wp_themeSkin .mceMenu span, +.wp_themeSkin .mceMenu { + display: block; +} + +.wp_themeSkin .mceMenu td { + height: 20px;overflow: hidden; +} + +.wp_themeSkin .mceMenu a { + position: relative; + padding: 3px 0 4px 0; + text-decoration: none !important; +} + +.wp_themeSkin .mceMenu .mceText { + position: relative; + display: block; + font-family: "Open Sans", sans-serif; + cursor: default; + margin: 0; + padding: 0 25px; + color: #000; +} + +.wp_themeSkin .mceMenu span.mceText, .wp_themeSkin .mceMenu .mcePreview { + font-size: 12px; +} + +.wp_themeSkin .mceMenu pre.mceText { + font-family: Monospace; +} + +.wp_themeSkin .mceMenu .mceIcon { + position: absolute; + top: 0; + left: 0; + width: 22px; +} + +.wp_themeSkin .mceMenu .mceMenuItemEnabled a:hover, +.wp_themeSkin .mceMenu .mceMenuItemActive { + background-color: #f5f5f5; +} + +.wp_themeSkin td.mceMenuItemSeparator { + height: 1px; + background-color: #aaa; +} + +.wp_themeSkin .mceMenuItemTitle a { + border-top: 0; + border-right: 0; + border-left: 0; + border-bottom: 1px solid #aaa; + text-decoration: none !important; + background-color: #ccc; +} + +.wp_themeSkin .mceMenuItemTitle span.mceText { + font-weight: bold; + padding-left: 4px; + color: #000; +} + +.wp_themeSkin .mceMenuItemSelected .mceIcon { + background: url("../js/tinymce/themes/advanced/skins/default/img/menu_check.gif"); + color: #888; +} + +.wp_themeSkin .mceNoIcons .mceMenuItemSelected a { + background: url("../js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif") no-repeat -6px center; +} + +.wp_themeSkin .mceMenu span.mceMenuLine { + display: none; +} + +.wp_themeSkin .mceMenuItemSub a { + background: url("../js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif") no-repeat top right; +} + +/* Progress,Resize */ +.wp_themeSkin .mceBlocker { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + opacity: 0.5; + filter: alpha(opacity=50); + background: #FFF; +} + +.wp_themeSkin .mceProgress { + position: absolute; + left: 0; + top: 0; + z-index: 1001; + background: url("../js/tinymce/themes/advanced/skins/default/img/progress.gif") no-repeat; + width: 32px; + height: 32px; + margin: -16px 0 0 -16px; +} + +.wp_themeSkin .mcePlaceHolder { + border: 1px dotted gray; +} + +/* Rtl */ +.mceRtl .mceListBox .mceText { + text-align: right; + padding: 0 4px 0 0; +} + +.mceRtl .mceMenuItem .mceText { + text-align: right; +} + +/* Formats */ +.wp_themeSkin .mce_p span.mceText {} +.wp_themeSkin .mce_address span.mceText { + font-style: italic; +} + +.wp_themeSkin .mce_pre span.mceText { + font-family: monospace; +} + +.wp_themeSkin .mce_h1 span.mceText { + font-weight: bolder; + font-size: 18px; +} + +.wp_themeSkin .mce_h2 span.mceText { + font-weight: bolder; + font-size: 14px; +} + +.wp_themeSkin .mce_h3 span.mceText { + font-weight: bolder; + font-size: 12px; +} + +.wp_themeSkin .mce_h4 span.mceText { + font-weight: bolder; + font-size: 11px; +} + +.wp_themeSkin .mce_h5 span.mceText { + font-weight: bolder; + font-size: 11px; +} + +.wp_themeSkin .mce_h6 span.mceText { + font-weight: bolder; + font-size: 10px; +} + +span.mce_bold:before { + content: '\f200'; +} + +span.mce_italic:before { + content: '\f201'; +} + +span.mce_bullist:before { + content: '\f203'; +} + +span.mce_numlist:before { + content: '\f204'; +} + +span.mce_blockquote:before { + content: '\f205'; +} + +span.mce_justifyleft:before { + content: '\f206'; +} + +span.mce_justifycenter:before { + content: '\f207'; +} + +span.mce_justifyright:before { + content: '\f208'; +} + +span.mce_link:before { + content: '\f103'; +} + +span.mce_unlink:before { + content: '\f225'; +} + +span.mce_wp_more:before { + content: '\f209'; +} + +span.mce_strikethrough:before { + content: '\f224'; +} + +span.mce_spellchecker { + font-size: 20px; + background: none !important; + margin-top: 2px; +} + +span.mce_spellchecker:before { + content: '\f210'; +} + +span.mce_fullscreen:before, +span.mce_wp_fullscreen:before { + content: '\f211'; +} + +span.mce_wp_adv:before { + content: '\f212'; +} +span.mce_underline:before { + content: '\f213'; +} + +span.mce_justifyfull:before { + content: '\f214'; +} + +span.mce_forecolor { + background: none !important; +} + +span.mce_forecolor:before { + content: '\f215'; +} + +span.mce_pastetext:before { + content: '\f217'; +} + +span.mce_pasteword:before { + content: '\f216'; +} + +span.mce_removeformat:before { + content: '\f218'; +} + +span.mce_charmap:before { + content: '\f220'; +} + +span.mce_outdent:before { + content: '\f221'; +} + +span.mce_indent:before { + content: '\f222'; +} + +span.mce_undo:before { + content: '\f171'; +} + +span.mce_redo:before { + content: '\f172'; +} + +span.mce_help:before, +span.mce_wp_help:before { + content: '\f223'; +} + +span.mce_image:before { + content: '\f104'; +} + +span.mce_ltr:before { + content: '\f320'; +} + +/* Default icons */ +.wp_themeSkin span.mce_cleanup {background-position:-380px -20px} +.wp_themeSkin span.mce_anchor {background-position:-200px 0} +.wp_themeSkin span.mce_sub {background-position:-600px 0} +.wp_themeSkin span.mce_sup {background-position:-620px 0} +.wp_themeSkin span.mce_newdocument {background-position:-520px 0} +.wp_themeSkin span.mce_image {background-position:-380px 0} +.wp_themeSkin span.mce_code {background-position:-260px 0} +.wp_themeSkin span.mce_hr {background-position:-360px 0} +.wp_themeSkin span.mce_visualaid {background-position:-660px 0} +.wp_themeSkin span.mce_paste {background-position:-560px 0} +.wp_themeSkin span.mce_copy {background-position:-700px 0} +.wp_themeSkin span.mce_cut {background-position:-680px 0} +.wp_themeSkin .mce_backcolor span.mceAction {background-position:-760px 0} +.wp_themeSkin .mce_backcolorpicker {background-position:-760px 0} + +/* Plugins */ +.wp_themeSkin span.mce_advhr {background-position:-0px -20px} +.wp_themeSkin span.mce_ltr {background-position:-20px -20px} +.wp_themeSkin span.mce_rtl {background-position:-40px -20px} +.wp_themeSkin span.mce_emotions {background-position:-60px -20px} +.wp_themeSkin span.mce_fullpage {background-position:-80px -20px} +.wp_themeSkin span.mce_iespell {background-position:-120px -20px} +.wp_themeSkin span.mce_insertdate {background-position:-140px -20px} +.wp_themeSkin span.mce_inserttime {background-position:-160px -20px} +.wp_themeSkin span.mce_absolute {background-position:-180px -20px} +.wp_themeSkin span.mce_backward {background-position:-200px -20px} +.wp_themeSkin span.mce_forward {background-position:-220px -20px} +.wp_themeSkin span.mce_insert_layer {background-position:-240px -20px} +.wp_themeSkin span.mce_insertlayer {background-position:-260px -20px} +.wp_themeSkin span.mce_movebackward {background-position:-280px -20px} +.wp_themeSkin span.mce_moveforward {background-position:-300px -20px} +.wp_themeSkin span.mce_media {background-position:-320px -20px} +.wp_themeSkin span.mce_nonbreaking {background-position:-340px -20px} +.wp_themeSkin span.mce_selectall {background-position:-400px -20px} +.wp_themeSkin span.mce_preview {background-position:-420px -20px} +.wp_themeSkin span.mce_print {background-position:-440px -20px} +.wp_themeSkin span.mce_cancel {background-position:-460px -20px} +.wp_themeSkin span.mce_save {background-position:-480px -20px} +.wp_themeSkin span.mce_replace {background-position:-500px -20px} +.wp_themeSkin span.mce_search {background-position:-520px -20px} +.wp_themeSkin span.mce_styleprops {background-position:-560px -20px} +.wp_themeSkin span.mce_table {background-position:-580px -20px} +.wp_themeSkin span.mce_cell_props {background-position:-600px -20px} +.wp_themeSkin span.mce_delete_table {background-position:-620px -20px} +.wp_themeSkin span.mce_delete_col {background-position:-640px -20px} +.wp_themeSkin span.mce_delete_row {background-position:-660px -20px} +.wp_themeSkin span.mce_col_after {background-position:-680px -20px} +.wp_themeSkin span.mce_col_before {background-position:-700px -20px} +.wp_themeSkin span.mce_row_after {background-position:-720px -20px} +.wp_themeSkin span.mce_row_before {background-position:-740px -20px} +.wp_themeSkin span.mce_merge_cells {background-position:-760px -20px} +.wp_themeSkin span.mce_table_props {background-position:-980px -20px} +.wp_themeSkin span.mce_row_props {background-position:-780px -20px} +.wp_themeSkin span.mce_split_cells {background-position:-800px -20px} +.wp_themeSkin span.mce_template {background-position:-820px -20px} +.wp_themeSkin span.mce_visualchars {background-position:-840px -20px} +.wp_themeSkin span.mce_abbr {background-position:-860px -20px} +.wp_themeSkin span.mce_acronym {background-position:-880px -20px} +.wp_themeSkin span.mce_attribs {background-position:-900px -20px} +.wp_themeSkin span.mce_cite {background-position:-920px -20px} +.wp_themeSkin span.mce_del {background-position:-940px -20px} +.wp_themeSkin span.mce_ins {background-position:-960px -20px} +.wp_themeSkin span.mce_pagebreak {background-position:0 -40px} +.wp_themeSkin span.mce_restoredraft {background-position:-20px -40px} +.wp_themeSkin span.mce_visualblocks {background-position: -40px -40px} + +/* border */ +.wp_themeSkin .mceExternalToolbar, +.wp_themeSkin .mceButton, +.wp_themeSkin a.mceButtonEnabled:hover, +.wp_themeSkin a.mceButtonActive, +.wp_themeSkin a.mceButtonSelected, +.wp_themeSkin .mceListBox .mceText, +.wp_themeSkin .mceListBox .mceOpen, +.wp_themeSkin select.mceListBox, +.wp_themeSkin .mceSplitButton a.mceAction, +.wp_themeSkin .mceSplitButton a.mceOpen, +.wp_themeSkin .mceSplitButton a.mceOpen:hover, +.wp_themeSkin .mceSplitButtonSelected a.mceOpen, +.wp_themeSkin table.mceSplitButtonEnabled:hover a.mceAction, +.wp_themeSkin .mceSplitButton a.mceAction:hover, +.wp_themeSkin div.mceColorSplitMenu table, +.wp_themeSkin .mceColorSplitMenu a, +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors, +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover, +.wp_themeSkin a.mceMoreColors:hover, +.wp_themeSkin .mceMenu { + border-style: solid; + border-width: 1px; +} + +.wp_themeSkin .mceListBox .mceText { + border-right: 0 none; +} + +.wp_themeSkin iframe { + background: transparent; +} + +.wp_themeSkin .mceButton { + border-color: transparent; +} + +.wp_themeSkin .mceListBox .mceText, +.wp_themeSkin .mceListBox .mceOpen { + border-color: transparent; +} + +.wp_themeSkin a.mceButtonEnabled:hover, +.wp_themeSkin table.mceSplitButton:hover { + border-color: #bbb; + background: #eee; + background-image: -webkit-gradient(linear, left bottom, left top, from(#e5e5e5), to(#fff)); + background-image: -webkit-linear-gradient(bottom, #e5e5e5, #fff); + background-image: -moz-linear-gradient(bottom, #e5e5e5, #fff); + background-image: -o-linear-gradient(bottom, #e5e5e5, #fff); + background-image: linear-gradient(to top, #e5e5e5, #fff); +} + +.wp_themeSkin a.mceButton:active, +.wp_themeSkin a.mceButtonEnabled:active, +.wp_themeSkin a.mceButtonSelected:active, +.wp_themeSkin a.mceButtonActive, +.wp_themeSkin a.mceButtonActive:active, +.wp_themeSkin a.mceButtonActive:hover, +.wp_themeSkin .mceSplitButtonSelected table, +.wp_themeSkin .mceSplitButtonSelected table:hover { + outline: none; + border-color: #999 #ccc #ccc #999; + background: #eee; + background-image: -webkit-gradient(linear, left bottom, left top, from(#f6f6f6), to(#e3e3e3)); + background-image: -webkit-linear-gradient(bottom, #f6f6f6, #e3e3e3); + background-image: -moz-linear-gradient(bottom, #f6f6f6, #e3e3e3); + background-image: -o-linear-gradient(bottom, #f6f6f6, #e3e3e3); + background-image: linear-gradient(to top, #f6f6f6, #e3e3e3); +} + +.wp_themeSkin .mceSplitButtonSelected table a.mceOpen, +.wp_themeSkin .mceSplitButtonSelected table a.mceAction { + border-color: #999 #ccc #ccc #999; +} + +.wp_themeSkin .mceButtonDisabled { + border-color: transparent; +} + +.wp_themeSkin .mceListBox .mceOpen { + border-left: 0; +} + +.wp_themeSkin .mceListBoxEnabled:hover, +.wp_themeSkin .mceListBoxEnabled:active, +.wp_themeSkin .mceListBoxHover, +.wp_themeSkin .mceListBoxHover:active, +.wp_themeSkin .mceListBoxSelected { + -webkit-box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .3); + box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .3); + border-color: #bbb; +} + +/* SplitButton */ +.wp_themeSkin .mceSplitButton .mceLast span.mceOpen .mceIconOnly { + display: block; +} + +.wp_themeSkin .mceSplitButton a.mceAction, +.wp_themeSkin .mceSplitButton a.mceOpen { + border-color: transparent; +} + +.wp_themeSkin .mceSplitButton:hover a { + border-color: #bbb; +} + +.wp_themeSkin .mceSplitButtonEnabled a.mceOpen, +.wp_themeSkin .mceSplitButtonSelected a.mceOpen, +.wp_themeSkin .mceSplitButtonActive a.mceOpen, +.wp_themeSkin .mceSplitButtonEnabled:hover a.mceOpen { + background-image: url("../images/down_arrow.gif"); + background-position: 1px 2px; + background-repeat: no-repeat; + border-left: 0; +} + +.wp_themeSkin .mceSplitButtonActive td { + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover { + border-color: #0A246A; + background-color: #B6BDD2; +} + +.wp_themeSkin a.mceMoreColors:hover { + border-color: #0A246A; +} + +.wp_themeSkin .mceMenuItemDisabled .mceText { + color: #888; +} + +#mceModalBlocker { + background: #000; + opacity: 0.7; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); +} + +/* WP specific */ +.wp-editor-wrap { + position: relative; +} + +.wp-editor-tools { + position: relative; + z-index: 1; +} + +.wp-editor-container { + clear: both; +} + +.wp-editor-area { + font-family: Consolas, Monaco, monospace; + font-size: 13px; + padding: 10px; + margin: 1px 0 0; + line-height: 150%; + border: 0 none; + outline: none; + display: block; + resize: vertical; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.wp-editor-tools { + padding: 0; +} + +.wp-editor-container textarea.wp-editor-area { + width: 100%; + margin: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +.quicktags-toolbar, +.wp_themeSkin tr.mceFirst td.mceToolbar { + border-bottom: 1px solid #dedede; + background: #f5f5f5; +} + +.wp-editor-tabs { + float: right; +} + +.wp-switch-editor { + background: #ebebeb; + border: 1px solid #dedede; + color: #777; + cursor: pointer; + float: right; + font: 13px/19px "Open Sans", sans-serif; + height: 19px; + margin: 5px 0 0 5px; + padding: 3px 8px 4px; + position: relative; + top: 1px; +} + +.wp-switch-editor:active { + background-color: #f1f1f1; +} + +.wp-switch-editor:hover { + text-decoration: none !important; + background: #fff; +} + +.js .tmce-active .wp-editor-area { + color: white; +} + +.tmce-active .quicktags-toolbar { + display: none; +} + +.tmce-active .switch-tmce, +.html-active .switch-html { + background: #f5f5f5; + color: #555; + height: 20px; + border-bottom: none; +} + +.wp-media-buttons { + float: left; +} + +.wp-media-buttons .button { + margin-right: 5px; + margin-bottom: 4px; + padding-left: 7px; + padding-right: 7px; +} + +.wp-media-buttons .button:active { + position: relative; + top: 1px; + margin-top: -1px; + margin-bottom: 1px; +} + +.wp-media-buttons .insert-media { + padding-left: 5px; +} + +.wp-media-buttons a { + text-decoration: none; + color: #464646; + font-size: 12px; +} + +.wp-media-buttons img { + padding: 0 4px; + vertical-align: middle; +} + +.wp-media-buttons span.wp-media-buttons-icon { + display: inline-block; + width: 18px; + height: 18px; + vertical-align: text-top; + margin: 0 2px; +} + +.wp-media-buttons .add_media span.wp-media-buttons-icon { + background: none; +} + +.wp-media-buttons .add_media span.wp-media-buttons-icon:before { + font: normal 18px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-media-buttons .add_media span.wp-media-buttons-icon:before { + content: '\f104'; +} + +.quicktags-toolbar { + border-bottom-style: solid; + border-bottom-width: 1px; + -webkit-border-top-right-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + padding: 2px 8px 0; + min-height: 29px; +} + +.quicktags-toolbar > div { + padding: 2px 4px 0; +} + +.quicktags-toolbar input { + margin: 2px 1px 4px; + line-height: 18px; + display: inline-block; + min-width: 26px; + padding: 2px 4px; + font: 12px/18px "Open Sans", sans-serif; + color: #464646; + border: 1px solid #c3c3c3; + -webkit-border-radius: 3px; + border-radius: 3px; + background: #eee; + background-image: -webkit-gradient(linear, left bottom, left top, from(#e3e3e3), to(#fff)); + background-image: -webkit-linear-gradient(bottom, #e3e3e3, #fff); + background-image: -moz-linear-gradient(bottom, #e3e3e3, #fff); + background-image: -o-linear-gradient(bottom, #e3e3e3, #fff); + background-image: linear-gradient(to top, #e3e3e3, #fff); +} + +.quicktags-toolbar input:hover { + border-color: #aaa; + background: #ddd; +} + +.quicktags-toolbar input[value="link"] { + text-decoration: underline; +} + +.quicktags-toolbar input[value="del"] { + text-decoration: line-through; +} + +.quicktags-toolbar input[value="i"] { + font-style: italic; +} + +.quicktags-toolbar input[value="b"] { + font-weight: bold; +} + +#wp_editbtns, +#wp_gallerybtns { + padding: 2px; + position: absolute; + display: none; + z-index: 155000; +} + +#wp_editimgbtn, +#wp_delimgbtn, +#wp_editgallery, +#wp_delgallery { + border-color: #999; + background-color: #eee; + margin: 2px; + padding: 2px; + border-width: 1px; + border-style: solid; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +#wp_editimgbtn:hover, +#wp_delimgbtn:hover, +#wp_editgallery:hover, +#wp_delgallery:hover { + border-color: #555; + background-color: #ccc; +} + +/*------------------------------------------------------------------------------ + wp-link +------------------------------------------------------------------------------*/ + +#wp-link { + background-color: #F5F5F5; + line-height: 1.4em; + font-size: 12px; +} + +#wp-link ol, +#wp-link ul { + list-style: none; + margin: 0; + padding: 0; +} + +#wp-link input[type="text"] { + -webkit-box-sizing: border-box; +} + +#wp-link input[type="text"], +#wp-link textarea { + border-width: 1px; + border-style: solid; + -webkit-border-radius: 4px; + border-radius: 4px; + font-size: 12px; + margin: 1px; + padding: 3px; +} + +#wp-link #link-options { + padding: 10px 0 14px; + border-bottom: 1px solid #dfdfdf; + margin: 0 6px 14px; +} + +#wp-link p.howto { + margin: 3px; +} + +#wp-link #internal-toggle { + display: inline-block; + cursor: pointer; + padding-left: 18px; +} + +#wp-link .toggle-arrow { + background: transparent url("../images/toggle-arrow.png") top left no-repeat; + height: 23px; + line-height: 23px; +} + +#wp-link .toggle-arrow-active { + background-position: center left; +} + +#wp-link label input[type="text"] { + width: 360px; + margin-top: 5px; +} + +#wp-link #link-options label span, +#wp-link #search-panel label span.search-label { + display: inline-block; + width: 80px; + text-align: right; + padding-right: 5px; +} + +#wp-link .link-search-field { + float: left; + width: 220px; +} + +#wp-link .link-search-wrapper { + margin: 5px 6px 9px; + display: block; + overflow: hidden; +} + +#wp-link .link-search-wrapper span { + float: left; + margin-top: 4px; +} + +#wp-link .link-search-wrapper .spinner { + display: none; + vertical-align: text-bottom; +} + +#wp-link .link-target { + width: auto; + padding: 3px 0 0; + margin: 0 0 0 87px; + font-size: 11px; +} + +#wp-link .query-results { + border: 1px #dfdfdf solid; + margin: 0 5px 5px; + background: #fff; + height: 185px; + overflow: auto; + position: relative; +} + +#wp-link li, +#wp-link .query-notice { + clear: both; + margin-bottom: 0; + border-bottom: 1px solid #f1f1f1; + color: #333; + padding: 4px 6px; + cursor: pointer; + position: relative; +} + +#wp-link li:hover { + background: #eaf2fa; + color: #151515; +} + +#wp-link li.unselectable { + border-bottom: 1px solid #dfdfdf; +} + +#wp-link li.unselectable:hover { + background: #fff; + cursor: auto; + color: #333; +} + +#wp-link li.selected { + background: #ddd; + color: #333; +} + +#wp-link li.selected .item-title { + font-weight: bold; +} + +#wp-link .item-title { + display: inline-block; + width: 80%; +} + +#wp-link .item-info { + text-transform: uppercase; + color: #666; + font-size: 11px; + position: absolute; + right: 5px; + top: 4px; + bottom: 0; +} + +#wp-link #search-results { + display: none; +} + +#wp-link #search-panel { + float: left; + width: 100%; +} + +#wp-link .river-waiting { + display: none; + padding: 10px 0; +} + +#wp-link .river-waiting .spinner { + margin: 0 auto; + display: block; +} + +#wp-link .submitbox { + padding: 5px 10px; + font-size: 11px; + overflow: auto; + height: 29px; +} + +#wp-link-cancel { + line-height: 25px; + float: left; +} + +#wp-link-update { + line-height: 23px; + float: right; +} + +/*! + * jQuery UI CSS Framework 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + + +/*! + * jQuery UI Resizable 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} + +/*! + * jQuery UI Dialog 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { + position: absolute; + top: 0; + /* @noflip */ + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + +/* WP jQuery Dialog Theme */ +.wp-dialog { + padding: 0; + z-index: 300002; + border: 0; + -webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.7); + box-shadow: 0 5px 15px rgba(0,0,0,0.7); + background-color: #f5f5f5; +} + +.wp-dialog .ui-dialog-title { + display: block; + text-align: center; + padding: 0; +} + +.wp-dialog .ui-dialog-titlebar { + padding: 0 1em; + background-color: #444; + font-size: 13px; + line-height: 24px; + color: #fff; +} + +.wp-dialog .ui-dialog-content { + padding: 0; +} + +.wp-dialog .ui-dialog-titlebar-close { + cursor: pointer; + -webkit-appearance: none; + border: 0; + width: 30px; + height: 20px; + top: 13px; + right: 6px; + background: none; +} + +.wp-dialog .ui-dialog-titlebar-close:before { + content: '\f158'; + font: normal 20px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #999; + padding-left: 12px; +} + +.wp-dialog .ui-dialog-titlebar-close:hover:before { + color: #2ea2cc; +} + +.wp-dialog .ui-dialog-titlebar-close .ui-button-text { + display: none; +} + +.wp-dialog .ui-dialog-titlebar-close:hover, +.wp-dialog .ui-dialog-titlebar-close:focus { + background-position: -87px -32px; +} + +.ui-widget-overlay { + z-index: 300001; + background-color: #000; + opacity: 0.6; + filter: alpha(opacity=60); +} + +/* TinyMCE modal */ +.clearlooks2 .mceTop { + border-bottom: 1px solid #ccc; +} + +.clearlooks2 .mceTop span { + font: 13px/24px "Open Sans", sans-serif; + color: #e5e5e5; +} + +.clearlooks2 .mceTop .mceLeft { + background: #444444; + border-color: transparent; +} + +.clearlooks2 .mceTop .mceRight { + background: #444444; + border-color: transparent; +} + +.clearlooks2 .mceMiddle { + clip: rect(24px auto auto auto); +} + +.clearlooks2 .mceMiddle .mceLeft { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceMiddle .mceRight { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom .mceLeft { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom .mceCenter { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom .mceRight { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceClose, +.clearlooks2 .mceFocus .mceClose, +.clearlooks2 .mceFocus .mceClose:hover { + background-image: none; +} +.clearlooks2 .mceClose:before { + content: '\f158'; + font: normal 20px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #999; + padding-left: 12px; +} + +/* Distraction Free Writing mode + * =Overlay Styles +-------------------------------------------------------------- */ +.fullscreen-overlay { + z-index: 149999; + display: none; + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + filter: inherit; +} + +.fullscreen-active .fullscreen-overlay, +.fullscreen-active #wp-fullscreen-body { + display: block; +} + +.fullscreen-fader { + z-index: 200000; +} + +.fullscreen-active .fullscreen-fader { + display: none; +} + +/* =Overlay Body +-------------------------------------------------------------- */ +#wp-fullscreen-body { + width: 100%; + z-index: 150005; + display: none; + position: absolute; + top: 0; + left: 0; + font-size: 12px; +} + +#wp-fullscreen-wrap { + margin: 0 auto 50px; + position: relative; + padding-top: 60px; +} + +#wp-fullscreen-title { + font-size: 1.7em; + line-height: 100%; + outline: medium none; + padding: 6px 7px; + width: 100%; + margin-bottom: 30px; + -webkit-box-shadow: none; + box-shadow: none; +} + +#wp-fullscreen-container { + padding: 4px 10px 50px; +} + +#wp-fullscreen-title, +#wp-fullscreen-container { + -webkit-border-radius: 0; + border-radius: 0; + border: 1px dashed transparent; + background: transparent; + -moz-transition-property: border-color; + -moz-transition-duration: 0.6s; + -webkit-transition-property: border-color; + -webkit-transition-duration: 0.6s; + -o-transition-property: border-color; + -o-transition-duration: 0.6s; + transition-property: border-color; + transition-duration: 0.6s; +} + +#wp_mce_fullscreen { + width: 100%; + min-height: 300px; + border: 0; + background: transparent; + font-family: Consolas, Monaco, monospace; + line-height: 1.6em; + padding: 0; + overflow-y: hidden; + outline: none; + resize: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +#wp-fullscreen-tagline { + color: #BBBBBB; + font-size: 18px; + float: right; + padding-top: 5px; +} + +/* =Top bar +-------------------------------------------------------------- */ +#fullscreen-topbar { + background: #f5f5f5; + border-bottom: 1px solid #fff; + height: 40px; + left: 0; + min-width: 800px; + position: fixed; + top: 0; + width: 100%; + z-index: 150050; +} + +#wp-fullscreen-toolbar { + padding: 6px 10px 0; + clear: both; + max-width: 1100px; + min-width: 820px; + margin: 0 auto; +} + +#wp-fullscreen-mode-bar, +#wp-fullscreen-button-bar, +#wp-fullscreen-close, +#wp-fullscreen-count { + float: left; +} + +#wp-fullscreen-save { + float: right; + padding: 2px 2px 0 5px; +} + +#wp-fullscreen-count, +#wp-fullscreen-close { + padding-top: 5px; +} + +#wp-fullscreen-central-toolbar { + margin: auto; + padding: 0; +} + +#wp-fullscreen-buttons > div { + float: left; +} + +#wp-fullscreen-mode-bar { + padding: 1px 14px 0 0; +} + +#wp-fullscreen-modes a { + display: block; + font-size: 11px; + text-decoration: none; + float: left; + margin: 1px 0 0 0; + padding: 2px 6px 2px; + border-width: 1px 1px 1px 0; + border-style: solid; + border-color: #bbb; + color: #777; + text-shadow: 0 1px 0 #fff; + background-color: #f4f4f4; + background: #f4f4f4; + background-image: -webkit-gradient(linear, left bottom, left top, from(#e4e4e4), to(#f9f9f9)); + background-image: -webkit-linear-gradient(bottom, #e4e4e4, #f9f9f9); + background-image: -moz-linear-gradient(bottom, #e4e4e4, #f9f9f9); + background-image: -o-linear-gradient(bottom, #e4e4e4, #f9f9f9); + background-image: linear-gradient(to top, #e4e4e4, #f9f9f9); +} + +#wp-fullscreen-modes a:hover, +.wp-html-mode #wp-fullscreen-modes a:last-child, +.wp-tmce-mode #wp-fullscreen-modes a:first-child { + color: #333; + border-color: #999; + background: #eee; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e4e4e4), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #e4e4e4, #f9f9f9); + background-image: -moz-linear-gradient(top, #e4e4e4, #f9f9f9); + background-image: -o-linear-gradient(top, #e4e4e4, #f9f9f9); + background-image: linear-gradient(to bottom, #e4e4e4, #f9f9f9); +} + +#wp-fullscreen-modes a:first-child { + border-width: 1px; + -webkit-border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +#wp-fullscreen-modes a:last-child { + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +#wp-fullscreen-buttons .active a { + background: inherit; +} + +#wp-fullscreen-buttons .hidden { + display: none; +} + +#wp-fullscreen-buttons .disabled { + opacity: 0.5; +} + +.wp-html-mode #wp-fullscreen-buttons div { + display: none; +} + +.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both { + display: block; +} + +#fullscreen-topbar.fullscreen-make-sticky { + display: block !important; +} + +#wp-fullscreen-save img { + vertical-align: middle; +} + +#wp-fullscreen-save img, +#wp-fullscreen-save span { + padding-right: 4px; + display: none; +} + +/* =Thickbox Adjustments +-------------------------------------------------------------- */ +.fullscreen-active #TB_overlay { + z-index: 150100; +} + +.fullscreen-active #TB_window { + z-index: 150102; +} + +/* =TinyMCE Adjustments +-------------------------------------------------------------- */ +#wp_mce_fullscreen_ifr { + background: transparent; +} + +#wp_mce_fullscreen_parent #wp_mce_fullscreen_tbl tr.mceFirst { + display : none; +} + +#wp-fullscreen-container .wp_themeSkin table td { + vertical-align: top; +} + +/* Colors */ +.fullscreen-overlay { + background: #fff; +} + +.wp-fullscreen-focus #wp-fullscreen-title, +.wp-fullscreen-focus #wp-fullscreen-container { + border-color: #ccc; +} + +/* =CSS 3 transitions +-------------------------------------------------------------- */ + +.fade-1000, +.fade-600, +.fade-400, +.fade-300 { + opacity: 0; + -moz-transition-property: opacity; + -webkit-transition-property: opacity; + -o-transition-property: opacity; + transition-property: opacity; +} + +.fade-1000 { + -moz-transition-duration: 1s; + -webkit-transition-duration: 1s; + -o-transition-duration: 1s; + transition-duration: 1s; +} + +.fade-600 { + -moz-transition-duration: 0.6s; + -webkit-transition-duration: 0.6s; + -o-transition-duration: 0.6s; + transition-duration: 0.6s; +} + +.fade-400 { + -moz-transition-duration: 0.4s; + -webkit-transition-duration: 0.4s; + -o-transition-duration: 0.4s; + transition-duration: 0.4s; +} + +.fade-300 { + -moz-transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + -o-transition-duration: 0.3s; + transition-duration: 0.3s; +} + +.fade-trigger { + opacity: 1; +} + +/* =Localization +-------------------------------------------------------------- */ +.rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors, +.rtl .wp_themeSkin .mceMenu .mceText, +.rtl .wp-switch-editor, +.rtl .quicktags-toolbar input, +.rtl .clearlooks2 .mceTop span, +.rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors { + font-family: Tahoma, sans-serif; +} + +html:lang(he-il) .rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors, +html:lang(he-il) .rtl .wp_themeSkin .mceMenu .mceText, +html:lang(he-il) .rtl .wp-switch-editor, +html:lang(he-il) .rtl .quicktags-toolbar input, +html:lang(he-il) .rtl .clearlooks2 .mceTop span, +html:lang(he-il) .rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors { + font-family: Arial, sans-serif; +} + + +/* HiDPI */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .wp-media-buttons .add_media span.wp-media-buttons-icon, + #wp-fullscreen-buttons #wp_fs_image span.mce_image { + background: none; + } + + .wp_themeSkin .mceListBox .mceOpen, + .wp_themeSkin .mceListBoxHover .mceOpen, + .wp_themeSkin .mceListBoxSelected .mceOpen, + .wp_themeSkin table.mceListBoxEnabled .mceOpen { + background-image: url('../images/down_arrow-2x.gif'); + background-size: 10px 20px; + } + + .wp_themeSkin .mceSplitButtonEnabled a.mceOpen, + .wp_themeSkin .mceSplitButtonSelected a.mceOpen, + .wp_themeSkin .mceSplitButtonActive a.mceOpen, + .wp_themeSkin .mceSplitButtonEnabled:hover a.mceOpen { + background-image: url('../images/down_arrow-2x.gif'); + background-size: 10px 20px; + } + + #wp-link .toggle-arrow { + background: transparent url('../images/toggle-arrow-2x.png') top left no-repeat; + background-size: 19px 69px; + } +} diff --git a/src/wp-includes/css/editor.min.css b/src/wp-includes/css/editor.min.css new file mode 100644 index 0000000..16e3fe4 --- /dev/null +++ b/src/wp-includes/css/editor.min.css @@ -0,0 +1,28 @@ +.wp_themeSkin table,.wp_themeSkin tbody,.wp_themeSkin a,.wp_themeSkin img,.wp_themeSkin tr,.wp_themeSkin div,.wp_themeSkin td,.wp_themeSkin iframe,.wp_themeSkin span,.wp_themeSkin *,.wp_themeSkin .mceText{border:0;margin:0;padding:0;white-space:nowrap;text-decoration:none;font-weight:400;cursor:default;vertical-align:baseline;width:auto;border-collapse:separate}.wp_themeSkin a:hover,.wp_themeSkin a:link,.wp_themeSkin a:visited,.wp_themeSkin a:active{text-decoration:none;font-weight:400;cursor:default}.wp_themeSkin table td{vertical-align:middle}.wp_themeSkin *,.wp_themeSkin a:hover,.wp_themeSkin a:link,.wp_themeSkin a:visited,.wp_themeSkin a:active{color:#555}.wp_themeSkin span.mce_sup,.wp_themeSkin span.mce_sub,.wp_themeSkin span.mce_media,.wp_themeSkin span.mce_styleprops,.wp_themeSkin span.mce_search,.wp_themeSkin span.mce_emotions,.wp_themeSkin span.mce_print,.wp_themeSkin span.mce_attribs,.wp_themeSkin span.mce_hr,.wp_themeSkin span.mce_cut,.wp_themeSkin span.mce_copy,.wp_themeSkin span.mce_paste,.wp_themeSkin span.mce_cite,.wp_themeSkin span.mce_visualchars,.wp_themeSkin span.mce_advhr,.wp_themeSkin span.mce_insertdate,.wp_themeSkin span.mce_anchor,.wp_themeSkin span.mce_visualaid,.wp_themeSkin span.mce_cleanup,.wp_themeSkin span.mce_table,.wp_themeSkin span.mce_row_props,.wp_themeSkin span.mce_cell_props,.wp_themeSkin span.mce_row_before,.wp_themeSkin span.mce_row_after,.wp_themeSkin span.mce_delete_row,.wp_themeSkin span.mce_col_before,.wp_themeSkin span.mce_col_after,.wp_themeSkin span.mce_delete_col,.wp_themeSkin span.mce_split_cells,.wp_themeSkin span.mce_merge_cells,.wp_themeSkin span.mce_delete_table,.wp_themeSkin span.mce_ins,.wp_themeSkin span.mce_abbr,.wp_themeSkin span.mce_acronym,.wp_themeSkin span.mce_del,.wp_themeSkin span.mce_replace,.wp_themeSkin span.mce_code,.wp_themeSkin span.mce_nonbreaking,.wp_themeSkin span.mce_inserttime,.wp_themeSkin span.mce_insertlayer,.wp_themeSkin span.mce_moveforward,.wp_themeSkin span.mce_movebackward,.wp_themeSkin span.mce_absolute{-moz-transition:none;-webkit-transition:none;transition:none;background:url(../js/tinymce/themes/advanced/img/icons.gif) no-repeat 20px 20px}.no-font-face .wp_themeSkin span.mce_undo,.no-font-face .wp_themeSkin span.mce_redo,.no-font-face .wp_themeSkin span.mce_bullist,.no-font-face .wp_themeSkin span.mce_numlist,.no-font-face .wp_themeSkin span.mce_blockquote,.no-font-face .wp_themeSkin span.mce_charmap,.no-font-face .wp_themeSkin span.mce_bold,.no-font-face .wp_themeSkin span.mce_italic,.no-font-face .wp_themeSkin span.mce_underline,.no-font-face .wp_themeSkin span.mce_justifyleft,.no-font-face .wp_themeSkin span.mce_justifyright,.no-font-face .wp_themeSkin span.mce_justifycenter,.no-font-face .wp_themeSkin span.mce_justifyfull,.no-font-face .wp_themeSkin span.mce_indent,.no-font-face .wp_themeSkin span.mce_outdent,.no-font-face .wp_themeSkin span.mce_link,.no-font-face .wp_themeSkin span.mce_unlink,.no-font-face .wp_themeSkin span.mce_help,.no-font-face .wp_themeSkin span.mce_removeformat,.no-font-face .wp_themeSkin span.mce_fullscreen,.no-font-face .wp_themeSkin span.mce_wp_fullscreen,.no-font-face .wp_themeSkin span.mce_media,.no-font-face .wp_themeSkin span.mce_pastetext,.no-font-face .wp_themeSkin span.mce_pasteword,.no-font-face .wp_themeSkin span.mce_wp_help,.no-font-face .wp_themeSkin span.mce_wp_adv,.no-font-face .wp_themeSkin span.mce_wp_more,.no-font-face .wp_themeSkin span.mce_strikethrough,.no-font-face .wp_themeSkin span.mce_spellchecker,.no-font-face .wp_themeSkin span.mce_forecolor,.no-font-face .wp_themeSkin .mce_forecolorpicker,.no-font-face .wp_themeSkin .mceSplitButton .mce_spellchecker span.mce_spellchecker,.no-font-face .wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor,.no-font-face .wp_themeSkin .mceSplitButton span.mce_numlist,.no-font-face .wp_themeSkin .mceSplitButton span.mce_bullist{-moz-transition:none;-webkit-transition:none;transition:none;background-image:url(../images/wpicons.png?ver=20120720)}.no-font-face .wp_themeSkin span.mce_undo{background-position:-500px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_undo,.no-font-face .wp_themeSkin .mceButtonActive span.mce_undo{background-position:-500px 0}.no-font-face .wp_themeSkin span.mce_redo{background-position:-480px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_redo,.no-font-face .wp_themeSkin .mceButtonActive span.mce_redo{background-position:-480px 0}.no-font-face .wp_themeSkin span.mce_bullist{background-position:-40px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_bullist,.no-font-face .wp_themeSkin .mceButtonActive span.mce_bullist,.no-font-face .wp_themeSkin .mceSplitButton:hover span.mce_bullist{background-position:-40px 0}.no-font-face .wp_themeSkin span.mce_numlist{background-position:-60px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_numlist,.no-font-face .wp_themeSkin .mceButtonActive span.mce_numlist,.no-font-face .wp_themeSkin .mceSplitButton:hover span.mce_numlist{background-position:-60px 0}.no-font-face .wp_themeSkin span.mce_blockquote{background-position:-80px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_blockquote,.no-font-face .wp_themeSkin .mceButtonActive span.mce_blockquote{background-position:-80px 0}.no-font-face .wp_themeSkin span.mce_charmap{background-position:-420px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_charmap,.no-font-face .wp_themeSkin .mceButtonActive span.mce_charmap{background-position:-420px 0}.no-font-face .wp_themeSkin span.mce_bold{background-position:0 -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_bold,.no-font-face .wp_themeSkin .mceButtonActive span.mce_bold{background-position:0 0}.no-font-face .wp_themeSkin span.mce_italic{background-position:-20px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_italic,.no-font-face .wp_themeSkin .mceButtonActive span.mce_italic{background-position:-20px 0}.no-font-face .wp_themeSkin span.mce_underline{background-position:-280px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_underline,.no-font-face .wp_themeSkin .mceButtonActive span.mce_underline{background-position:-280px 0}.no-font-face .wp_themeSkin span.mce_justifyleft{background-position:-100px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyleft,.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyleft{background-position:-100px 0}.no-font-face .wp_themeSkin span.mce_justifyright{background-position:-140px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyright,.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyright{background-position:-140px 0}.no-font-face .wp_themeSkin span.mce_justifycenter{background-position:-120px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifycenter,.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifycenter{background-position:-120px 0}.no-font-face .wp_themeSkin span.mce_justifyfull{background-position:-300px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyfull,.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyfull{background-position:-300px 0}.no-font-face .wp_themeSkin span.mce_indent{background-position:-460px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_indent,.no-font-face .wp_themeSkin .mceButtonActive span.mce_indent{background-position:-460px 0}.no-font-face .wp_themeSkin span.mce_outdent{background-position:-440px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_outdent,.no-font-face .wp_themeSkin .mceButtonActive span.mce_outdent{background-position:-440px 0}.no-font-face .wp_themeSkin span.mce_link{background-position:-160px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_link,.no-font-face .wp_themeSkin .mceButtonActive span.mce_link{background-position:-160px 0}.no-font-face .wp_themeSkin span.mce_unlink{background-position:-180px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_unlink,.no-font-face .wp_themeSkin .mceButtonActive span.mce_unlink{background-position:-180px 0}.no-font-face .wp_themeSkin span.mce_help{background-position:-520px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_help,.no-font-face .wp_themeSkin .mceButtonActive span.mce_help{background-position:-520px 0}.no-font-face .wp_themeSkin span.mce_removeformat{background-position:-380px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_removeformat,.no-font-face .wp_themeSkin .mceButtonActive span.mce_removeformat{background-position:-380px 0}.no-font-face .wp_themeSkin span.mce_strikethrough{background-position:-540px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_strikethrough,.no-font-face .wp_themeSkin .mceButtonActive span.mce_strikethrough{background-position:-540px 0}.no-font-face .wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor{background-position:-320px -20px}.no-font-face .wp_themeSkin .mceSplitButtonEnabled:hover span.mce_forecolor,.no-font-face .wp_themeSkin .mceSplitButtonSelected span.mce_forecolor{background-position:-320px 0}.no-font-face .wp_themeSkin .mce_forecolorpicker{background-position:-320px -20px}.no-font-face .wp_themeSkin span.mce_fullscreen{background-position:-240px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_fullscreen,.no-font-face .wp_themeSkin .mceButtonActive span.mce_fullscreen{background-position:-240px 0}.no-font-face .wp_themeSkin span.mce_wp_fullscreen{background-position:-240px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_fullscreen,.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_fullscreen{background-position:-240px 0}.no-font-face .wp_themeSkin span.mce_media{background-position:-400px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_media,.no-font-face .wp_themeSkin .mceButtonActive span.mce_media{background-position:-400px 0}.no-font-face .wp_themeSkin span.mce_pastetext{background-position:-340px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_pastetext,.no-font-face .wp_themeSkin .mceButtonActive span.mce_pastetext{background-position:-340px 0}.no-font-face .wp_themeSkin span.mce_pasteword{background-position:-360px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_pasteword,.no-font-face .wp_themeSkin .mceButtonActive span.mce_pasteword{background-position:-360px 0}.no-font-face .wp_themeSkin span.mce_spellchecker{background-position:-220px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_spellchecker,.no-font-face .wp_themeSkin .mceSplitButtonEnabled:hover span.mce_spellchecker,.no-font-face .wp_themeSkin .mceButtonActive span.mce_spellchecker,.no-font-face .wp_themeSkin .mceSplitButtonSelected span.mce_spellchecker{background-position:-220px 0}.no-font-face .wp_themeSkin span.mce_wp_help{background-position:-520px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_help,.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_help{background-position:-520px 0}.no-font-face .wp_themeSkin span.mce_wp_adv{background-position:-260px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_adv,.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_adv{background-position:-260px 0}.no-font-face .wp_themeSkin span.mce_wp_more{background-position:-200px -20px}.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_more,.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_more{background-position:-200px 0}.no-font-face .mceIcon:before{display:none!important}.wp_themeSkin table{}.wp_themeSkin iframe{display:block}.wp_themeSkin #mce_fullscreen_ifr{background-color:#fff}.wp_themeSkin .mceToolbar{padding:1px}.wp_themeSkin .mceExternalToolbar{position:absolute;border-bottom:0;display:none}.wp_themeSkin .mceExternalToolbar td.mceToolbar{padding-right:13px}.wp_themeSkin .mceExternalClose{position:absolute;top:3px;right:3px;width:7px;height:7px;background:url(../js/tinymce/themes/advanced/img/icons.gif) -820px 0}.wp_themeSkin table.mceToolbar,.wp_themeSkin tr.mceFirst .mceToolbar tr td,.wp_themeSkin tr.mceLast .mceToolbar tr td{border:0;margin:0;padding:0}.wp_themeSkin table.mceLayout{border:0}.wp_themeSkin .mceStatusbar{background:#fff;border-top:1px solid #eee;color:#000;display:block;font-family:sans-serif;font-size:12px;height:20px;line-height:16px;padding:0 0 0 8px;overflow:visible}.wp_themeSkin .mceStatusbar *{color:#555}.wp_themeSkin .mceStatusbar div{float:left;padding:2px}.wp_themeSkin .mceStatusbar a.mceResize{display:block;float:right;background:url(../js/tinymce/themes/advanced/img/icons.gif) -800px 0;width:20px;height:20px;cursor:se-resize}.wp_themeSkin .mceStatusbar a:hover{text-decoration:underline}.wp_themeSkin table.mceToolbar{margin:0 6px 2px}.wp_themeSkin table.mceToolbar :active,.wp_themeSkin table.mceToolbar :focus,.wp_themeSkin table.mceToolbar:focus,.wp_themeSkin span.mceSeparator:focus{outline:0}.wp_themeSkin #content_toolbar1{margin-top:2px}.wp_themeSkin .mceToolbar .mceToolbarEndListBox span{display:none}.wp_themeSkin span.mceIcon,.wp_themeSkin img.mceIcon{display:block;width:20px;height:20px}a .mceIcon,.mceAction{text-align:center;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mceAction{line-height:16px}.wp_themeSkin .mceButton{display:block;width:20px;height:20px;cursor:default;padding:1px 2px;margin:1px;-webkit-border-radius:2px;border-radius:2px}.wp_themeSkin a.mceButtonEnabled:hover{background-image:inherit 0 -10px}.wp_themeSkin .mceOldBoxModel a.mceButton span,.wp_themeSkin .mceOldBoxModel a.mceButton img{margin:0 0 0 1px}.wp_themeSkin .mceButtonDisabled .mceIcon{opacity:.2;filter:alpha(opacity=20)}.wp_themeSkin .mceSeparator{display:none}.wp_themeSkin .mceListBox,.wp_themeSkin .mceListBox a{display:block}.wp_themeSkin .mceListBox .mceText{padding:1px 4px 1px 5px;width:70px;text-align:left;text-decoration:none;-webkit-border-bottom-left-radius:2px;-webkit-border-top-left-radius:2px;border-bottom-left-radius:2px;border-top-left-radius:2px;font-family:sans-serif;font-size:12px;height:20px;line-height:20px;overflow:hidden}.wp_themeSkin .mceListBox{margin:1px;direction:ltr;background-color:#fff;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.2);box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.2)}.wp_themeSkin .mceListBox .mceOpen{width:12px;height:20px;border-collapse:separate;padding:1px;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-bottom-left-radius:0;border-top-left-radius:0}.wp_themeSkin .mceListBox .mceFirst a{border-style:solid;border-width:1px;border-bottom-right-radius:2px;border-top-right-radius:2px}.wp_themeSkin .mceListBoxMenu .mce_formatPreview{line-height:normal}.wp_themeSkin .mceListBox .mceOpen,.wp_themeSkin .mceListBoxHover .mceOpen,.wp_themeSkin .mceListBoxSelected .mceOpen,.wp_themeSkin table.mceListBoxEnabled .mceOpen{background-image:url(../images/down_arrow.gif);background-position:3px 1px;background-repeat:no-repeat}.wp_themeSkin .mceListBoxDisabled .mceText{color:gray}.wp_themeSkin .mceListBoxMenu{overflow:auto;overflow-x:hidden}.wp_themeSkin .mceOldBoxModel .mceListBox .mceText{height:22px}.wp_themeSkin select.mceListBox{font-family:sans-serif;font-size:12px;border-color:#b2b2b2;background-color:#fff}.wp_themeSkin .mceSplitButton a,.wp_themeSkin .mceSplitButton span{display:block;height:20px}.wp_themeSkin .mceSplitButton{display:block;direction:ltr}.wp_themeSkin table.mceSplitButton td{padding:2px;-webkit-border-radius:2px;border-radius:2px}.wp_themeSkin table.mceSplitButton:hover td{background-image:inherit 0 -10px}.wp_themeSkin .mceSplitButton a.mceAction{height:20px;width:20px;padding:1px 2px;border-right:0 none}.wp_themeSkin .mceSplitButton span.mceAction{background-image:url(../js/tinymce/themes/advanced/img/icons.gif);background-repeat:no-repeat;background-color:transparent;width:20px}.wp_themeSkin .mceSplitButton span.mceAction.mce_bullist,.wp_themeSkin .mceSplitButton span.mceAction.mce_numlist{background-image:none}.wp_themeSkin .mceSplitButton a.mceOpen{width:11px;height:20px;background-position:0 2px;background-repeat:no-repeat;padding:1px 0}.wp_themeSkin .mceSplitButton span.mceOpen{display:none}.wp_themeSkin .mceSplitButtonDisabled .mceAction{opacity:.3;filter:alpha(opacity=30)}.wp_themeSkin .mceListBox a.mceText,.wp_themeSkin .mceSplitButton a.mceAction{-webkit-border-bottom-left-radius:2px;-webkit-border-top-left-radius:2px;border-bottom-left-radius:2px;border-top-left-radius:2px}.wp_themeSkin .mceSplitButton a.mceOpen,.wp_themeSkin .mceListBox a.mceOpen{-webkit-border-bottom-right-radius:2px;-webkit-border-top-right-radius:2px;border-bottom-right-radius:2px;border-top-right-radius:2px}.wp_themeSkin div.mceColorSplitMenu table{background-color:#ebebeb;border-color:#bbb}.wp_themeSkin .mceColorSplitMenu td{padding:2px}.wp_themeSkin .mceColorSplitMenu a{display:block;width:9px;height:9px;overflow:hidden;border-color:#B2B2B2}.wp_themeSkin .mceColorSplitMenu td.mceMoreColors{padding:1px 3px 1px 1px}.wp_themeSkin .mceColorSplitMenu a.mceMoreColors{width:100%;height:auto;text-align:center;font-family:"Open Sans",sans-serif;font-size:11px;line-height:20px;border-color:#fff}.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover{}.wp_themeSkin a.mceMoreColors:hover{}.wp_themeSkin .mceColorPreview{margin:-5px 0 0 2px;width:16px;height:4px;overflow:hidden}.wp_themeSkin .mceMenu{position:absolute;left:0;top:0;z-index:1000;border-color:#ddd;direction:ltr}.wp_themeSkin .mceNoIcons span.mceIcon{width:0}.wp_themeSkin .mceNoIcons a .mceText{padding-left:10px}.wp_themeSkin .mceMenu table{background-color:#ebeaeb}.wp_themeSkin .mceMenu a,.wp_themeSkin .mceMenu span,.wp_themeSkin .mceMenu{display:block}.wp_themeSkin .mceMenu td{height:20px;overflow:hidden}.wp_themeSkin .mceMenu a{position:relative;padding:3px 0 4px;text-decoration:none!important}.wp_themeSkin .mceMenu .mceText{position:relative;display:block;font-family:"Open Sans",sans-serif;cursor:default;margin:0;padding:0 25px;color:#000}.wp_themeSkin .mceMenu span.mceText,.wp_themeSkin .mceMenu .mcePreview{font-size:12px}.wp_themeSkin .mceMenu pre.mceText{font-family:Monospace}.wp_themeSkin .mceMenu .mceIcon{position:absolute;top:0;left:0;width:22px}.wp_themeSkin .mceMenu .mceMenuItemEnabled a:hover,.wp_themeSkin .mceMenu .mceMenuItemActive{background-color:#f5f5f5}.wp_themeSkin td.mceMenuItemSeparator{height:1px;background-color:#aaa}.wp_themeSkin .mceMenuItemTitle a{border-top:0;border-right:0;border-left:0;border-bottom:1px solid #aaa;text-decoration:none!important;background-color:#ccc}.wp_themeSkin .mceMenuItemTitle span.mceText{font-weight:700;padding-left:4px;color:#000}.wp_themeSkin .mceMenuItemSelected .mceIcon{background:url(../js/tinymce/themes/advanced/skins/default/img/menu_check.gif);color:#888}.wp_themeSkin .mceNoIcons .mceMenuItemSelected a{background:url(../js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif) no-repeat -6px center}.wp_themeSkin .mceMenu span.mceMenuLine{display:none}.wp_themeSkin .mceMenuItemSub a{background:url(../js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif) no-repeat top right}.wp_themeSkin .mceBlocker{position:absolute;left:0;top:0;z-index:1000;opacity:.5;filter:alpha(opacity=50);background:#FFF}.wp_themeSkin .mceProgress{position:absolute;left:0;top:0;z-index:1001;background:url(../js/tinymce/themes/advanced/skins/default/img/progress.gif) no-repeat;width:32px;height:32px;margin:-16px 0 0 -16px}.wp_themeSkin .mcePlaceHolder{border:1px dotted gray}.mceRtl .mceListBox .mceText{text-align:right;padding:0 4px 0 0}.mceRtl .mceMenuItem .mceText{text-align:right}.wp_themeSkin .mce_p span.mceText{}.wp_themeSkin .mce_address span.mceText{font-style:italic}.wp_themeSkin .mce_pre span.mceText{font-family:monospace}.wp_themeSkin .mce_h1 span.mceText{font-weight:bolder;font-size:18px}.wp_themeSkin .mce_h2 span.mceText{font-weight:bolder;font-size:14px}.wp_themeSkin .mce_h3 span.mceText{font-weight:bolder;font-size:12px}.wp_themeSkin .mce_h4 span.mceText{font-weight:bolder;font-size:11px}.wp_themeSkin .mce_h5 span.mceText{font-weight:bolder;font-size:11px}.wp_themeSkin .mce_h6 span.mceText{font-weight:bolder;font-size:10px}span.mce_bold:before{content:'\f200'}span.mce_italic:before{content:'\f201'}span.mce_bullist:before{content:'\f203'}span.mce_numlist:before{content:'\f204'}span.mce_blockquote:before{content:'\f205'}span.mce_justifyleft:before{content:'\f206'}span.mce_justifycenter:before{content:'\f207'}span.mce_justifyright:before{content:'\f208'}span.mce_link:before{content:'\f103'}span.mce_unlink:before{content:'\f225'}span.mce_wp_more:before{content:'\f209'}span.mce_strikethrough:before{content:'\f224'}span.mce_spellchecker{font-size:20px;background:none!important;margin-top:2px}span.mce_spellchecker:before{content:'\f210'}span.mce_fullscreen:before,span.mce_wp_fullscreen:before{content:'\f211'}span.mce_wp_adv:before{content:'\f212'}span.mce_underline:before{content:'\f213'}span.mce_justifyfull:before{content:'\f214'}span.mce_forecolor{background:none!important}span.mce_forecolor:before{content:'\f215'}span.mce_pastetext:before{content:'\f217'}span.mce_pasteword:before{content:'\f216'}span.mce_removeformat:before{content:'\f218'}span.mce_charmap:before{content:'\f220'}span.mce_outdent:before{content:'\f221'}span.mce_indent:before{content:'\f222'}span.mce_undo:before{content:'\f171'}span.mce_redo:before{content:'\f172'}span.mce_help:before,span.mce_wp_help:before{content:'\f223'}span.mce_image:before{content:'\f104'}span.mce_ltr:before{content:'\f320'}.wp_themeSkin span.mce_cleanup{background-position:-380px -20px}.wp_themeSkin span.mce_anchor{background-position:-200px 0}.wp_themeSkin span.mce_sub{background-position:-600px 0}.wp_themeSkin span.mce_sup{background-position:-620px 0}.wp_themeSkin span.mce_newdocument{background-position:-520px 0}.wp_themeSkin span.mce_image{background-position:-380px 0}.wp_themeSkin span.mce_code{background-position:-260px 0}.wp_themeSkin span.mce_hr{background-position:-360px 0}.wp_themeSkin span.mce_visualaid{background-position:-660px 0}.wp_themeSkin span.mce_paste{background-position:-560px 0}.wp_themeSkin span.mce_copy{background-position:-700px 0}.wp_themeSkin span.mce_cut{background-position:-680px 0}.wp_themeSkin .mce_backcolor span.mceAction{background-position:-760px 0}.wp_themeSkin .mce_backcolorpicker{background-position:-760px 0}.wp_themeSkin span.mce_advhr{background-position:-0px -20px}.wp_themeSkin span.mce_ltr{background-position:-20px -20px}.wp_themeSkin span.mce_rtl{background-position:-40px -20px}.wp_themeSkin span.mce_emotions{background-position:-60px -20px}.wp_themeSkin span.mce_fullpage{background-position:-80px -20px}.wp_themeSkin span.mce_iespell{background-position:-120px -20px}.wp_themeSkin span.mce_insertdate{background-position:-140px -20px}.wp_themeSkin span.mce_inserttime{background-position:-160px -20px}.wp_themeSkin span.mce_absolute{background-position:-180px -20px}.wp_themeSkin span.mce_backward{background-position:-200px -20px}.wp_themeSkin span.mce_forward{background-position:-220px -20px}.wp_themeSkin span.mce_insert_layer{background-position:-240px -20px}.wp_themeSkin span.mce_insertlayer{background-position:-260px -20px}.wp_themeSkin span.mce_movebackward{background-position:-280px -20px}.wp_themeSkin span.mce_moveforward{background-position:-300px -20px}.wp_themeSkin span.mce_media{background-position:-320px -20px}.wp_themeSkin span.mce_nonbreaking{background-position:-340px -20px}.wp_themeSkin span.mce_selectall{background-position:-400px -20px}.wp_themeSkin span.mce_preview{background-position:-420px -20px}.wp_themeSkin span.mce_print{background-position:-440px -20px}.wp_themeSkin span.mce_cancel{background-position:-460px -20px}.wp_themeSkin span.mce_save{background-position:-480px -20px}.wp_themeSkin span.mce_replace{background-position:-500px -20px}.wp_themeSkin span.mce_search{background-position:-520px -20px}.wp_themeSkin span.mce_styleprops{background-position:-560px -20px}.wp_themeSkin span.mce_table{background-position:-580px -20px}.wp_themeSkin span.mce_cell_props{background-position:-600px -20px}.wp_themeSkin span.mce_delete_table{background-position:-620px -20px}.wp_themeSkin span.mce_delete_col{background-position:-640px -20px}.wp_themeSkin span.mce_delete_row{background-position:-660px -20px}.wp_themeSkin span.mce_col_after{background-position:-680px -20px}.wp_themeSkin span.mce_col_before{background-position:-700px -20px}.wp_themeSkin span.mce_row_after{background-position:-720px -20px}.wp_themeSkin span.mce_row_before{background-position:-740px -20px}.wp_themeSkin span.mce_merge_cells{background-position:-760px -20px}.wp_themeSkin span.mce_table_props{background-position:-980px -20px}.wp_themeSkin span.mce_row_props{background-position:-780px -20px}.wp_themeSkin span.mce_split_cells{background-position:-800px -20px}.wp_themeSkin span.mce_template{background-position:-820px -20px}.wp_themeSkin span.mce_visualchars{background-position:-840px -20px}.wp_themeSkin span.mce_abbr{background-position:-860px -20px}.wp_themeSkin span.mce_acronym{background-position:-880px -20px}.wp_themeSkin span.mce_attribs{background-position:-900px -20px}.wp_themeSkin span.mce_cite{background-position:-920px -20px}.wp_themeSkin span.mce_del{background-position:-940px -20px}.wp_themeSkin span.mce_ins{background-position:-960px -20px}.wp_themeSkin span.mce_pagebreak{background-position:0 -40px}.wp_themeSkin span.mce_restoredraft{background-position:-20px -40px}.wp_themeSkin span.mce_visualblocks{background-position:-40px -40px}.wp_themeSkin .mceExternalToolbar,.wp_themeSkin .mceButton,.wp_themeSkin a.mceButtonEnabled:hover,.wp_themeSkin a.mceButtonActive,.wp_themeSkin a.mceButtonSelected,.wp_themeSkin .mceListBox .mceText,.wp_themeSkin .mceListBox .mceOpen,.wp_themeSkin select.mceListBox,.wp_themeSkin .mceSplitButton a.mceAction,.wp_themeSkin .mceSplitButton a.mceOpen,.wp_themeSkin .mceSplitButton a.mceOpen:hover,.wp_themeSkin .mceSplitButtonSelected a.mceOpen,.wp_themeSkin table.mceSplitButtonEnabled:hover a.mceAction,.wp_themeSkin .mceSplitButton a.mceAction:hover,.wp_themeSkin div.mceColorSplitMenu table,.wp_themeSkin .mceColorSplitMenu a,.wp_themeSkin .mceColorSplitMenu a.mceMoreColors,.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover,.wp_themeSkin a.mceMoreColors:hover,.wp_themeSkin .mceMenu{border-style:solid;border-width:1px}.wp_themeSkin .mceListBox .mceText{border-right:0 none}.wp_themeSkin iframe{background:transparent}.wp_themeSkin .mceButton{border-color:transparent}.wp_themeSkin .mceListBox .mceText,.wp_themeSkin .mceListBox .mceOpen{border-color:transparent}.wp_themeSkin a.mceButtonEnabled:hover,.wp_themeSkin table.mceSplitButton:hover{border-color:#bbb;background:#eee;background-image:-webkit-gradient(linear,left bottom,left top,from(#e5e5e5),to(#fff));background-image:-webkit-linear-gradient(bottom,#e5e5e5,#fff);background-image:-moz-linear-gradient(bottom,#e5e5e5,#fff);background-image:-o-linear-gradient(bottom,#e5e5e5,#fff);background-image:linear-gradient(to top,#e5e5e5,#fff)}.wp_themeSkin a.mceButton:active,.wp_themeSkin a.mceButtonEnabled:active,.wp_themeSkin a.mceButtonSelected:active,.wp_themeSkin a.mceButtonActive,.wp_themeSkin a.mceButtonActive:active,.wp_themeSkin a.mceButtonActive:hover,.wp_themeSkin .mceSplitButtonSelected table,.wp_themeSkin .mceSplitButtonSelected table:hover{outline:0;border-color:#999 #ccc #ccc #999;background:#eee;background-image:-webkit-gradient(linear,left bottom,left top,from(#f6f6f6),to(#e3e3e3));background-image:-webkit-linear-gradient(bottom,#f6f6f6,#e3e3e3);background-image:-moz-linear-gradient(bottom,#f6f6f6,#e3e3e3);background-image:-o-linear-gradient(bottom,#f6f6f6,#e3e3e3);background-image:linear-gradient(to top,#f6f6f6,#e3e3e3)}.wp_themeSkin .mceSplitButtonSelected table a.mceOpen,.wp_themeSkin .mceSplitButtonSelected table a.mceAction{border-color:#999 #ccc #ccc #999}.wp_themeSkin .mceButtonDisabled{border-color:transparent}.wp_themeSkin .mceListBox .mceOpen{border-left:0}.wp_themeSkin .mceListBoxEnabled:hover,.wp_themeSkin .mceListBoxEnabled:active,.wp_themeSkin .mceListBoxHover,.wp_themeSkin .mceListBoxHover:active,.wp_themeSkin .mceListBoxSelected{-webkit-box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.3);box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.3);border-color:#bbb}.wp_themeSkin .mceSplitButton .mceLast span.mceOpen .mceIconOnly{display:block}.wp_themeSkin .mceSplitButton a.mceAction,.wp_themeSkin .mceSplitButton a.mceOpen{border-color:transparent}.wp_themeSkin .mceSplitButton:hover a{border-color:#bbb}.wp_themeSkin .mceSplitButtonEnabled a.mceOpen,.wp_themeSkin .mceSplitButtonSelected a.mceOpen,.wp_themeSkin .mceSplitButtonActive a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover a.mceOpen{background-image:url(../images/down_arrow.gif);background-position:1px 2px;background-repeat:no-repeat;border-left:0}.wp_themeSkin .mceSplitButtonActive td{-webkit-border-radius:3px;border-radius:3px}.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover{border-color:#0A246A;background-color:#B6BDD2}.wp_themeSkin a.mceMoreColors:hover{border-color:#0A246A}.wp_themeSkin .mceMenuItemDisabled .mceText{color:#888}#mceModalBlocker{background:#000;opacity:.7;-ms-filter:"alpha(Opacity=70)";filter:alpha(opacity=70)}.wp-editor-wrap{position:relative}.wp-editor-tools{position:relative;z-index:1}.wp-editor-container{clear:both}.wp-editor-area{font-family:Consolas,Monaco,monospace;font-size:13px;padding:10px;margin:1px 0 0;line-height:150%;border:0 none;outline:0;display:block;resize:vertical;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-editor-tools{padding:0}.wp-editor-container textarea.wp-editor-area{width:100%;margin:0;-webkit-box-shadow:none;box-shadow:none}.quicktags-toolbar,.wp_themeSkin tr.mceFirst td.mceToolbar{border-bottom:1px solid #dedede;background:#f5f5f5}.wp-editor-tabs{float:right}.wp-switch-editor{background:#ebebeb;border:1px solid #dedede;color:#777;cursor:pointer;float:right;font:13px/19px "Open Sans",sans-serif;height:19px;margin:5px 0 0 5px;padding:3px 8px 4px;position:relative;top:1px}.wp-switch-editor:active{background-color:#f1f1f1}.wp-switch-editor:hover{text-decoration:none!important;background:#fff}.js .tmce-active .wp-editor-area{color:#fff}.tmce-active .quicktags-toolbar{display:none}.tmce-active .switch-tmce,.html-active .switch-html{background:#f5f5f5;color:#555;height:20px;border-bottom:0}.wp-media-buttons{float:left}.wp-media-buttons .button{margin-right:5px;margin-bottom:4px;padding-left:7px;padding-right:7px}.wp-media-buttons .button:active{position:relative;top:1px;margin-top:-1px;margin-bottom:1px}.wp-media-buttons .insert-media{padding-left:5px}.wp-media-buttons a{text-decoration:none;color:#464646;font-size:12px}.wp-media-buttons img{padding:0 4px;vertical-align:middle}.wp-media-buttons span.wp-media-buttons-icon{display:inline-block;width:18px;height:18px;vertical-align:text-top;margin:0 2px}.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{content:'\f104'}.quicktags-toolbar{border-bottom-style:solid;border-bottom-width:1px;-webkit-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;border-top-right-radius:3px;border-top-left-radius:3px;padding:2px 8px 0;min-height:29px}.quicktags-toolbar>div{padding:2px 4px 0}.quicktags-toolbar input{margin:2px 1px 4px;line-height:18px;display:inline-block;min-width:26px;padding:2px 4px;font:12px/18px "Open Sans",sans-serif;color:#464646;border:1px solid #c3c3c3;-webkit-border-radius:3px;border-radius:3px;background:#eee;background-image:-webkit-gradient(linear,left bottom,left top,from(#e3e3e3),to(#fff));background-image:-webkit-linear-gradient(bottom,#e3e3e3,#fff);background-image:-moz-linear-gradient(bottom,#e3e3e3,#fff);background-image:-o-linear-gradient(bottom,#e3e3e3,#fff);background-image:linear-gradient(to top,#e3e3e3,#fff)}.quicktags-toolbar input:hover{border-color:#aaa;background:#ddd}.quicktags-toolbar input[value=link]{text-decoration:underline}.quicktags-toolbar input[value=del]{text-decoration:line-through}.quicktags-toolbar input[value="i"]{font-style:italic}.quicktags-toolbar input[value="b"]{font-weight:700}#wp_editbtns,#wp_gallerybtns{padding:2px;position:absolute;display:none;z-index:155000}#wp_editimgbtn,#wp_delimgbtn,#wp_editgallery,#wp_delgallery{border-color:#999;background-color:#eee;margin:2px;padding:2px;border-width:1px;border-style:solid;-webkit-border-radius:3px;border-radius:3px}#wp_editimgbtn:hover,#wp_delimgbtn:hover,#wp_editgallery:hover,#wp_delgallery:hover{border-color:#555;background-color:#ccc}#wp-link{background-color:#F5F5F5;line-height:1.4em;font-size:12px}#wp-link ol,#wp-link ul{list-style:none;margin:0;padding:0}#wp-link input[type=text]{-webkit-box-sizing:border-box}#wp-link input[type=text],#wp-link textarea{border-width:1px;border-style:solid;-webkit-border-radius:4px;border-radius:4px;font-size:12px;margin:1px;padding:3px}#wp-link #link-options{padding:10px 0 14px;border-bottom:1px solid #dfdfdf;margin:0 6px 14px}#wp-link p.howto{margin:3px}#wp-link #internal-toggle{display:inline-block;cursor:pointer;padding-left:18px}#wp-link .toggle-arrow{background:transparent url(../images/toggle-arrow.png) top left no-repeat;height:23px;line-height:23px}#wp-link .toggle-arrow-active{background-position:center left}#wp-link label input[type=text]{width:360px;margin-top:5px}#wp-link #link-options label span,#wp-link #search-panel label span.search-label{display:inline-block;width:80px;text-align:right;padding-right:5px}#wp-link .link-search-field{float:left;width:220px}#wp-link .link-search-wrapper{margin:5px 6px 9px;display:block;overflow:hidden}#wp-link .link-search-wrapper span{float:left;margin-top:4px}#wp-link .link-search-wrapper .spinner{display:none;vertical-align:text-bottom}#wp-link .link-target{width:auto;padding:3px 0 0;margin:0 0 0 87px;font-size:11px}#wp-link .query-results{border:1px #dfdfdf solid;margin:0 5px 5px;background:#fff;height:185px;overflow:auto;position:relative}#wp-link li,#wp-link .query-notice{clear:both;margin-bottom:0;border-bottom:1px solid #f1f1f1;color:#333;padding:4px 6px;cursor:pointer;position:relative}#wp-link li:hover{background:#eaf2fa;color:#151515}#wp-link li.unselectable{border-bottom:1px solid #dfdfdf}#wp-link li.unselectable:hover{background:#fff;cursor:auto;color:#333}#wp-link li.selected{background:#ddd;color:#333}#wp-link li.selected .item-title{font-weight:700}#wp-link .item-title{display:inline-block;width:80%}#wp-link .item-info{text-transform:uppercase;color:#666;font-size:11px;position:absolute;right:5px;top:4px;bottom:0}#wp-link #search-results{display:none}#wp-link #search-panel{float:left;width:100%}#wp-link .river-waiting{display:none;padding:10px 0}#wp-link .river-waiting .spinner{margin:0 auto;display:block}#wp-link .submitbox{padding:5px 10px;font-size:11px;overflow:auto;height:29px}#wp-link-cancel{line-height:25px;float:left}#wp-link-update{line-height:23px;float:right}/*! + * jQuery UI CSS Framework 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}/*! + * jQuery UI Resizable 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}/*! + * jQuery UI Dialog 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0 0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.wp-dialog{padding:0;z-index:300002;border:0;-webkit-box-shadow:0 5px 15px rgba(0,0,0,.7);box-shadow:0 5px 15px rgba(0,0,0,.7);background-color:#f5f5f5}.wp-dialog .ui-dialog-title{display:block;text-align:center;padding:0}.wp-dialog .ui-dialog-titlebar{padding:0 1em;background-color:#444;font-size:13px;line-height:24px;color:#fff}.wp-dialog .ui-dialog-content{padding:0}.wp-dialog .ui-dialog-titlebar-close{cursor:pointer;-webkit-appearance:none;border:0;width:30px;height:20px;top:13px;right:6px;background:0 0}.wp-dialog .ui-dialog-titlebar-close:before{content:'\f158';font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#999;padding-left:12px}.wp-dialog .ui-dialog-titlebar-close:hover:before{color:#2ea2cc}.wp-dialog .ui-dialog-titlebar-close .ui-button-text{display:none}.wp-dialog .ui-dialog-titlebar-close:hover,.wp-dialog .ui-dialog-titlebar-close:focus{background-position:-87px -32px}.ui-widget-overlay{z-index:300001;background-color:#000;opacity:.6;filter:alpha(opacity=60)}.clearlooks2 .mceTop{border-bottom:1px solid #ccc}.clearlooks2 .mceTop span{font:13px/24px "Open Sans",sans-serif;color:#e5e5e5}.clearlooks2 .mceTop .mceLeft{background:#444;border-color:transparent}.clearlooks2 .mceTop .mceRight{background:#444;border-color:transparent}.clearlooks2 .mceMiddle{clip:rect(24px auto auto auto)}.clearlooks2 .mceMiddle .mceLeft{background:#f1f1f1;border-color:transparent}.clearlooks2 .mceMiddle .mceRight{background:#f1f1f1;border-color:transparent}.clearlooks2 .mceBottom{background:#f1f1f1;border-color:transparent}.clearlooks2 .mceBottom .mceLeft{background:#f1f1f1;border-color:transparent}.clearlooks2 .mceBottom .mceCenter{background:#f1f1f1;border-color:transparent}.clearlooks2 .mceBottom .mceRight{background:#f1f1f1;border-color:transparent}.clearlooks2 .mceClose,.clearlooks2 .mceFocus .mceClose,.clearlooks2 .mceFocus .mceClose:hover{background-image:none}.clearlooks2 .mceClose:before{content:'\f158';font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#999;padding-left:12px}.fullscreen-overlay{z-index:149999;display:none;position:fixed;top:0;bottom:0;left:0;right:0;filter:inherit}.fullscreen-active .fullscreen-overlay,.fullscreen-active #wp-fullscreen-body{display:block}.fullscreen-fader{z-index:200000}.fullscreen-active .fullscreen-fader{display:none}#wp-fullscreen-body{width:100%;z-index:150005;display:none;position:absolute;top:0;left:0;font-size:12px}#wp-fullscreen-wrap{margin:0 auto 50px;position:relative;padding-top:60px}#wp-fullscreen-title{font-size:1.7em;line-height:100%;outline:medium none;padding:6px 7px;width:100%;margin-bottom:30px;-webkit-box-shadow:none;box-shadow:none}#wp-fullscreen-container{padding:4px 10px 50px}#wp-fullscreen-title,#wp-fullscreen-container{-webkit-border-radius:0;border-radius:0;border:1px dashed transparent;background:transparent;-moz-transition-property:border-color;-moz-transition-duration:.6s;-webkit-transition-property:border-color;-webkit-transition-duration:.6s;-o-transition-property:border-color;-o-transition-duration:.6s;transition-property:border-color;transition-duration:.6s}#wp_mce_fullscreen{width:100%;min-height:300px;border:0;background:transparent;font-family:Consolas,Monaco,monospace;line-height:1.6em;padding:0;overflow-y:hidden;outline:0;resize:none;-webkit-box-shadow:none;box-shadow:none}#wp-fullscreen-tagline{color:#BBB;font-size:18px;float:right;padding-top:5px}#fullscreen-topbar{background:#f5f5f5;border-bottom:1px solid #fff;height:40px;left:0;min-width:800px;position:fixed;top:0;width:100%;z-index:150050}#wp-fullscreen-toolbar{padding:6px 10px 0;clear:both;max-width:1100px;min-width:820px;margin:0 auto}#wp-fullscreen-mode-bar,#wp-fullscreen-button-bar,#wp-fullscreen-close,#wp-fullscreen-count{float:left}#wp-fullscreen-save{float:right;padding:2px 2px 0 5px}#wp-fullscreen-count,#wp-fullscreen-close{padding-top:5px}#wp-fullscreen-central-toolbar{margin:auto;padding:0}#wp-fullscreen-buttons>div{float:left}#wp-fullscreen-mode-bar{padding:1px 14px 0 0}#wp-fullscreen-modes a{display:block;font-size:11px;text-decoration:none;float:left;margin:1px 0 0;padding:2px 6px;border-width:1px 1px 1px 0;border-style:solid;border-color:#bbb;color:#777;text-shadow:0 1px 0 #fff;background-color:#f4f4f4;background:#f4f4f4;background-image:-webkit-gradient(linear,left bottom,left top,from(#e4e4e4),to(#f9f9f9));background-image:-webkit-linear-gradient(bottom,#e4e4e4,#f9f9f9);background-image:-moz-linear-gradient(bottom,#e4e4e4,#f9f9f9);background-image:-o-linear-gradient(bottom,#e4e4e4,#f9f9f9);background-image:linear-gradient(to top,#e4e4e4,#f9f9f9)}#wp-fullscreen-modes a:hover,.wp-html-mode #wp-fullscreen-modes a:last-child,.wp-tmce-mode #wp-fullscreen-modes a:first-child{color:#333;border-color:#999;background:#eee;background-image:-webkit-gradient(linear,left top,left bottom,from(#e4e4e4),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#e4e4e4,#f9f9f9);background-image:-moz-linear-gradient(top,#e4e4e4,#f9f9f9);background-image:-o-linear-gradient(top,#e4e4e4,#f9f9f9);background-image:linear-gradient(to bottom,#e4e4e4,#f9f9f9)}#wp-fullscreen-modes a:first-child{border-width:1px;-webkit-border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-top-left-radius:3px;border-bottom-left-radius:3px}#wp-fullscreen-modes a:last-child{-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px}#wp-fullscreen-buttons .active a{background:inherit}#wp-fullscreen-buttons .hidden{display:none}#wp-fullscreen-buttons .disabled{opacity:.5}.wp-html-mode #wp-fullscreen-buttons div{display:none}.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both{display:block}#fullscreen-topbar.fullscreen-make-sticky{display:block!important}#wp-fullscreen-save img{vertical-align:middle}#wp-fullscreen-save img,#wp-fullscreen-save span{padding-right:4px;display:none}.fullscreen-active #TB_overlay{z-index:150100}.fullscreen-active #TB_window{z-index:150102}#wp_mce_fullscreen_ifr{background:transparent}#wp_mce_fullscreen_parent #wp_mce_fullscreen_tbl tr.mceFirst{display:none}#wp-fullscreen-container .wp_themeSkin table td{vertical-align:top}.fullscreen-overlay{background:#fff}.wp-fullscreen-focus #wp-fullscreen-title,.wp-fullscreen-focus #wp-fullscreen-container{border-color:#ccc}.fade-1000,.fade-600,.fade-400,.fade-300{opacity:0;-moz-transition-property:opacity;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.fade-1000{-moz-transition-duration:1s;-webkit-transition-duration:1s;-o-transition-duration:1s;transition-duration:1s}.fade-600{-moz-transition-duration:.6s;-webkit-transition-duration:.6s;-o-transition-duration:.6s;transition-duration:.6s}.fade-400{-moz-transition-duration:.4s;-webkit-transition-duration:.4s;-o-transition-duration:.4s;transition-duration:.4s}.fade-300{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.fade-trigger{opacity:1}.rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors,.rtl .wp_themeSkin .mceMenu .mceText,.rtl .wp-switch-editor,.rtl .quicktags-toolbar input,.rtl .clearlooks2 .mceTop span,.rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors{font-family:Tahoma,sans-serif}html:lang(he-il) .rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors,html:lang(he-il) .rtl .wp_themeSkin .mceMenu .mceText,html:lang(he-il) .rtl .wp-switch-editor,html:lang(he-il) .rtl .quicktags-toolbar input,html:lang(he-il) .rtl .clearlooks2 .mceTop span,html:lang(he-il) .rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors{font-family:Arial,sans-serif}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.wp-media-buttons .add_media span.wp-media-buttons-icon,#wp-fullscreen-buttons #wp_fs_image span.mce_image{background:0 0}.wp_themeSkin .mceListBox .mceOpen,.wp_themeSkin .mceListBoxHover .mceOpen,.wp_themeSkin .mceListBoxSelected .mceOpen,.wp_themeSkin table.mceListBoxEnabled .mceOpen{background-image:url(../images/down_arrow-2x.gif);background-size:10px 20px}.wp_themeSkin .mceSplitButtonEnabled a.mceOpen,.wp_themeSkin .mceSplitButtonSelected a.mceOpen,.wp_themeSkin .mceSplitButtonActive a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover a.mceOpen{background-image:url(../images/down_arrow-2x.gif);background-size:10px 20px}#wp-link .toggle-arrow{background:transparent url(../images/toggle-arrow-2x.png) top left no-repeat;background-size:19px 69px}} \ No newline at end of file diff --git a/src/wp-includes/css/jquery-ui-dialog-rtl.css b/src/wp-includes/css/jquery-ui-dialog-rtl.css new file mode 100644 index 0000000..eda4df8 --- /dev/null +++ b/src/wp-includes/css/jquery-ui-dialog-rtl.css @@ -0,0 +1,319 @@ +/*! + * jQuery UI CSS Framework 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + right: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + right: 0; + width: 100%; + height: 100%; +} + + +/*! + * jQuery UI Resizable 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + right: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + right: 0; +} +/* @noflip */ +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +/* @noflip */ +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +/* @noflip */ +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +/* @noflip */ +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +/* @noflip */ +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +/* @noflip */ +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} + +/*! + * jQuery UI Dialog 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { + position: absolute; + top: 0; + /* @noflip */ + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: right; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + left: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: right; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em .4em .5em 1em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: left; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em 0 .5em .4em; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + left: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + +/* WP jQuery Dialog Theme */ +.wp-dialog { + padding: 0; + z-index: 300002; + border: 0; + -webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.7); + box-shadow: 0 5px 15px rgba(0,0,0,0.7); + background-color: #f5f5f5; +} + +.wp-dialog .ui-dialog-title { + display: block; + text-align: center; + padding: 0; +} + +.wp-dialog .ui-dialog-titlebar { + padding: 0 1em; + background-color: #444; + font-size: 13px; + line-height: 24px; + color: #fff; +} + +.wp-dialog .ui-dialog-content { + padding: 0; +} + +.wp-dialog .ui-dialog-titlebar-close { + cursor: pointer; + -webkit-appearance: none; + border: 0; + width: 30px; + height: 20px; + top: 13px; + left: 6px; + background: none; +} + +.wp-dialog .ui-dialog-titlebar-close:before { + content: '\f158'; + font: normal 20px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #999; + padding-right: 12px; +} + +.wp-dialog .ui-dialog-titlebar-close:hover:before { + color: #2ea2cc; +} + +.wp-dialog .ui-dialog-titlebar-close .ui-button-text { + display: none; +} + +.wp-dialog .ui-dialog-titlebar-close:hover, +.wp-dialog .ui-dialog-titlebar-close:focus { + background-position: -87px -32px; +} + +.ui-widget-overlay { + z-index: 300001; + background-color: #000; + opacity: 0.6; + filter: alpha(opacity=60); +} diff --git a/src/wp-includes/css/jquery-ui-dialog-rtl.min.css b/src/wp-includes/css/jquery-ui-dialog-rtl.min.css new file mode 100644 index 0000000..97eade0 --- /dev/null +++ b/src/wp-includes/css/jquery-ui-dialog-rtl.min.css @@ -0,0 +1,28 @@ +/*! + * jQuery UI CSS Framework 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;right:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;right:0;width:100%;height:100%}/*! + * jQuery UI Resizable 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;right:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;right:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}/*! + * jQuery UI Dialog 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:right;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;left:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0 0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:right;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em .4em .5em 1em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:left}.ui-dialog .ui-dialog-buttonpane button{margin:.5em 0 .5em .4em;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;left:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.wp-dialog{padding:0;z-index:300002;border:0;-webkit-box-shadow:0 5px 15px rgba(0,0,0,.7);box-shadow:0 5px 15px rgba(0,0,0,.7);background-color:#f5f5f5}.wp-dialog .ui-dialog-title{display:block;text-align:center;padding:0}.wp-dialog .ui-dialog-titlebar{padding:0 1em;background-color:#444;font-size:13px;line-height:24px;color:#fff}.wp-dialog .ui-dialog-content{padding:0}.wp-dialog .ui-dialog-titlebar-close{cursor:pointer;-webkit-appearance:none;border:0;width:30px;height:20px;top:13px;left:6px;background:0 0}.wp-dialog .ui-dialog-titlebar-close:before{content:'\f158';font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#999;padding-right:12px}.wp-dialog .ui-dialog-titlebar-close:hover:before{color:#2ea2cc}.wp-dialog .ui-dialog-titlebar-close .ui-button-text{display:none}.wp-dialog .ui-dialog-titlebar-close:hover,.wp-dialog .ui-dialog-titlebar-close:focus{background-position:-87px -32px}.ui-widget-overlay{z-index:300001;background-color:#000;opacity:.6;filter:alpha(opacity=60)} \ No newline at end of file diff --git a/src/wp-includes/css/jquery-ui-dialog.css b/src/wp-includes/css/jquery-ui-dialog.css new file mode 100644 index 0000000..6418ea3 --- /dev/null +++ b/src/wp-includes/css/jquery-ui-dialog.css @@ -0,0 +1,319 @@ +/*! + * jQuery UI CSS Framework 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + + +/*! + * jQuery UI Resizable 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +/* @noflip */ +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +/* @noflip */ +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +/* @noflip */ +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +/* @noflip */ +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +/* @noflip */ +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +/* @noflip */ +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} + +/*! + * jQuery UI Dialog 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { + position: absolute; + top: 0; + /* @noflip */ + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + +/* WP jQuery Dialog Theme */ +.wp-dialog { + padding: 0; + z-index: 300002; + border: 0; + -webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.7); + box-shadow: 0 5px 15px rgba(0,0,0,0.7); + background-color: #f5f5f5; +} + +.wp-dialog .ui-dialog-title { + display: block; + text-align: center; + padding: 0; +} + +.wp-dialog .ui-dialog-titlebar { + padding: 0 1em; + background-color: #444; + font-size: 13px; + line-height: 24px; + color: #fff; +} + +.wp-dialog .ui-dialog-content { + padding: 0; +} + +.wp-dialog .ui-dialog-titlebar-close { + cursor: pointer; + -webkit-appearance: none; + border: 0; + width: 30px; + height: 20px; + top: 13px; + right: 6px; + background: none; +} + +.wp-dialog .ui-dialog-titlebar-close:before { + content: '\f158'; + font: normal 20px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #999; + padding-left: 12px; +} + +.wp-dialog .ui-dialog-titlebar-close:hover:before { + color: #2ea2cc; +} + +.wp-dialog .ui-dialog-titlebar-close .ui-button-text { + display: none; +} + +.wp-dialog .ui-dialog-titlebar-close:hover, +.wp-dialog .ui-dialog-titlebar-close:focus { + background-position: -87px -32px; +} + +.ui-widget-overlay { + z-index: 300001; + background-color: #000; + opacity: 0.6; + filter: alpha(opacity=60); +} diff --git a/src/wp-includes/css/jquery-ui-dialog.min.css b/src/wp-includes/css/jquery-ui-dialog.min.css new file mode 100644 index 0000000..4c10dac --- /dev/null +++ b/src/wp-includes/css/jquery-ui-dialog.min.css @@ -0,0 +1,28 @@ +/*! + * jQuery UI CSS Framework 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}/*! + * jQuery UI Resizable 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}/*! + * jQuery UI Dialog 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0 0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.wp-dialog{padding:0;z-index:300002;border:0;-webkit-box-shadow:0 5px 15px rgba(0,0,0,.7);box-shadow:0 5px 15px rgba(0,0,0,.7);background-color:#f5f5f5}.wp-dialog .ui-dialog-title{display:block;text-align:center;padding:0}.wp-dialog .ui-dialog-titlebar{padding:0 1em;background-color:#444;font-size:13px;line-height:24px;color:#fff}.wp-dialog .ui-dialog-content{padding:0}.wp-dialog .ui-dialog-titlebar-close{cursor:pointer;-webkit-appearance:none;border:0;width:30px;height:20px;top:13px;right:6px;background:0 0}.wp-dialog .ui-dialog-titlebar-close:before{content:'\f158';font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#999;padding-left:12px}.wp-dialog .ui-dialog-titlebar-close:hover:before{color:#2ea2cc}.wp-dialog .ui-dialog-titlebar-close .ui-button-text{display:none}.wp-dialog .ui-dialog-titlebar-close:hover,.wp-dialog .ui-dialog-titlebar-close:focus{background-position:-87px -32px}.ui-widget-overlay{z-index:300001;background-color:#000;opacity:.6;filter:alpha(opacity=60)} \ No newline at end of file diff --git a/src/wp-includes/css/media-views-rtl.css b/src/wp-includes/css/media-views-rtl.css new file mode 100644 index 0000000..ec70970 --- /dev/null +++ b/src/wp-includes/css/media-views-rtl.css @@ -0,0 +1,1929 @@ +/** + * Base Styles + */ +.media-modal * { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.media-modal, +.media-frame { + font-family: "Open Sans", sans-serif; + font-size: 12px; +} + +.media-frame input, +.media-frame textarea { + padding: 6px 8px; + line-height: 16px; +} + +.media-frame select, +.wp-admin .media-frame select { + line-height: 28px; + margin-top: 3px; +} + +.media-frame a { + border-bottom: none; + color: #21759b; +} + +.media-frame a:hover { + color: #d54e21; +} + +.media-frame a.button { + color: #333; +} + +.media-frame a.button:hover { + color: #222; +} + +.media-frame a.button-primary, +.media-frame a.button-primary:hover { + color: #fff; +} + +.media-frame input[type="text"], +.media-frame input[type="password"], +.media-frame input[type="number"], +.media-frame input[type="search"], +.media-frame input[type="email"], +.media-frame input[type="url"], +.media-frame textarea, +.media-frame select { + font-family: "Open Sans", sans-serif; + font-size: 12px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; /* ie8 only */ + box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: #dfdfdf; +} + +.media-frame select { + height: 24px; + padding: 2px; +} + +.media-frame input:disabled, +.media-frame textarea:disabled, +.media-frame input[readonly], +.media-frame textarea[readonly] { + background-color: #eee; +} + +.media-frame input[type="search"] { + -webkit-appearance: textfield; +} + +.media-frame :-moz-placeholder { + color: #a9a9a9; +} + +/* Enable draggable on IE10 touch events until it's rolled into jQuery UI core */ +.ui-sortable, +.ui-draggable { + -ms-touch-action: none; + touch-action: none; +} + +.meta-box-sortables.ui-sortable { + -ms-touch-action: auto; + touch-action: auto; +} + +.meta-box-sortables.ui-sortable .hndle { + -ms-touch-action: none; + touch-action: none; +} + +/** + * Modal + */ +.media-modal { + position: fixed; + top: 30px; + right: 30px; + left: 30px; + bottom: 30px; + z-index: 160000; +} + +.wp-customizer .media-modal { + z-index: 560000; +} + +.media-modal-backdrop { + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + min-height: 360px; + background: #000; + opacity: 0.7; + z-index: 159900; +} + +.wp-customizer .media-modal-backdrop { + z-index: 559900; +} + +.media-modal-close { + position: absolute; + text-decoration: none; + top: 5px; + left: 10px; + width: 30px; + height: 30px; + z-index: 1000; +} + +.media-modal-close span.media-modal-icon { + display: block; + margin: 8px auto 0; + width: 15px; + height: 15px; + background-image: none; +} + +.media-modal-close .media-modal-icon:before { + content: '\f158'; + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #666; +} + +.media-modal-close:hover .media-modal-icon:before { + color: #2ea2cc; +} + +.media-modal-close:active { + outline: 0; +} + +.media-modal-content { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + overflow: auto; + min-height: 300px; + box-shadow: 0 5px 15px rgba(0,0,0,0.7); + background: #fcfcfc; + -webkit-font-smoothing: subpixel-antialiased; +} + +.media-modal-icon { + background-image: url(../images/uploader-icons.png); + background-repeat: no-repeat; +} + +/** + * Toolbar + */ +.media-toolbar { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 100; + height: 60px; + padding: 0 16px; + border: 0 solid #dfdfdf; + overflow: hidden; +} + +.media-toolbar-primary { + float: left; + height: 100%; +} + +.media-toolbar-secondary { + float: right; + height: 100%; +} + +.media-toolbar-primary > .media-button, +.media-toolbar-primary > .media-button-group { + margin-right: 10px; + float: right; + margin-top: 15px; +} + +.media-toolbar-secondary > .media-button, +.media-toolbar-secondary > .media-button-group { + margin-left: 10px; + float: right; + margin-top: 15px; +} + +/** + * Sidebar + */ +.media-sidebar { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 267px; + padding: 0 16px 24px; + z-index: 75; + background: #f3f3f3; + border-right: 1px solid #ddd; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.hide-toolbar .media-sidebar { + bottom: 0; +} + +.media-sidebar .sidebar-title { + font-size: 20px; + margin: 0; + padding: 12px 10px 10px; + line-height: 28px; +} + +.media-sidebar .sidebar-content { + padding: 0 10px; + margin-bottom: 130px; +} + +.media-sidebar .search { + display: block; + width: 100%; +} + +.media-sidebar h3 { + position: relative; + font-weight: bold; + text-transform: uppercase; + font-size: 12px; + color: #666; + margin: 24px 0 8px; +} + +.media-sidebar .setting { + display: block; + float: right; + width: 100%; + margin: 1px 0; +} + +.media-sidebar .setting label { + display: block; +} + +.media-sidebar .setting .link-to-custom { + margin: 3px 0; +} + +.media-sidebar .setting span { + min-width: 30%; + margin-left: 4%; + font-size: 12px; +} + +.media-sidebar .setting select { + max-width: 65%; +} + +.media-sidebar .setting input[type="checkbox"], +.media-sidebar .field input[type="checkbox"] { + width: 16px; + float: none; + margin: 8px 3px 0; + padding: 0; +} + +.media-sidebar .setting span, +.compat-item label span { + float: right; + min-height: 22px; + padding-top: 8px; + line-height: 16px; + text-align: left; + font-weight: normal; + color: #666; +} + +.media-sidebar .setting input, +.media-sidebar .setting textarea { + margin: 1px; + width: 65%; + float: left; +} + +.media-sidebar .setting textarea, +.compat-item .field textarea { + height: 62px; + resize: vertical; +} + +.media-sidebar select { + margin-top: 3px; +} + +.compat-item { + float: right; + width: 100%; + overflow: hidden; +} + +.compat-item table { + width: 100%; + table-layout: fixed; + border-spacing: 0; + border: 0; +} + +.compat-item tr { + padding: 2px 0; + display: block; + overflow: hidden; +} + +.compat-item .label, +.compat-item .field { + display: block; + margin: 0; + padding: 0; +} + +.compat-item .label { + min-width: 30%; + margin-left: 4%; + float: right; + text-align: left; +} + +.compat-item .label span { + display: block; + width: 100%; +} + +.compat-item .field { + float: left; + width: 66%; +} + +.compat-item .field input { + width: 100%; + margin: 0; +} + + +/** + * Menu + */ +.media-menu { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + margin: 0; + padding: 16px 0; + background: #f3f3f3; + border-left-width: 1px; + border-left-style: solid; + border-left-color: #ccc; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.media-menu > a { + display: block; + position: relative; + padding: 8px 20px; + margin: 0; + line-height: 18px; + font-size: 14px; + color: #0074a2; + text-decoration: none; +} + +.media-menu > a:hover { + color: #21759B; + background: rgba( 0, 0, 0, 0.04 ); +} + +.media-menu > a:active { + outline: none; +} + +.media-menu .active, +.media-menu .active:hover { + color: #222; + font-weight: bold; +} + +.media-menu .separator { + height: 0; + margin: 12px 20px; + padding: 0; + border-top: 1px solid #ddd; +} + +/** + * Menu + */ +.media-router { + position: relative; + padding: 0 6px; + margin: 0; + clear: both; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.media-router > a { + position: relative; + float: right; + padding: 8px 10px 9px; + margin: 0; + height: 18px; + line-height: 18px; + font-size: 14px; + text-decoration: none; +} + +.media-router > a:last-child { + border-left: 0; +} + +.media-router > a:active, +.media-router > a:focus { + outline: none; +} + +.media-router .active, +.media-router .active:hover { + color: #333; +} + +.media-router .active, +.media-router > a.active:last-child { + margin: -1px -1px 0; + background: #fff; + border: 1px solid #ddd; + border-bottom: none; +} + +.media-router .active:after { + display: none; +} + +/** + * Frame + */ +.media-frame { + overflow: hidden; + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; +} + +.media-frame-menu { + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 199px; + z-index: 150; +} + +.media-frame-title { + position: absolute; + top: 0; + right: 200px; + left: 0; + height: 56px; + z-index: 200; +} + +.media-frame-router { + position: absolute; + top: 56px; + right: 200px; + left: 0; + height: 36px; + z-index: 200; +} + +.media-frame-content { + position: absolute; + top: 90px; + right: 200px; + left: 0; + bottom: 61px; + height: auto; + width: auto; + margin: 0; + overflow: auto; + background: #fff; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} + +.media-frame-toolbar { + position: absolute; + right: 200px; + left: 0; + bottom: 0; + height: 60px; + z-index: 100; +} + +.media-frame.hide-menu .media-frame-title, +.media-frame.hide-menu .media-frame-router, +.media-frame.hide-menu .media-frame-toolbar, +.media-frame.hide-menu .media-frame-content { + right: 0; +} + +.media-frame.hide-menu .media-frame-menu { + right: -200px; +} + +.media-frame.hide-toolbar .media-frame-content { + bottom: 0; +} + +.media-frame.hide-toolbar .media-frame-toolbar { + bottom: -61px; +} + +.media-frame.hide-router .media-frame-content { + top: 56px; +} + +.media-frame.hide-router .media-frame-router { + display: none; +} + +.media-frame.hide-router .media-frame-title { + border-bottom: 1px solid #dfdfdf; + box-shadow: 0 4px 4px -4px rgba( 0, 0, 0, 0.1 ); +} + +.media-frame .media-toolbar .add-to-gallery { + display: none; +} + +.media-frame-title h1 { + padding: 0 16px; + font-size: 22px; + line-height: 60px; + margin: 0; +} + +/** + * Iframes + */ +.media-frame .media-iframe { + overflow: hidden; +} + +.media-frame .media-iframe, +.media-frame .media-iframe iframe { + height: 100%; + width: 100%; + border: 0; +} + +/** + * Attachment Browser Filters + */ +.media-frame select.attachment-filters { + margin-top: 11px; + margin-left: 10px; +} + +/** + * Search + */ +.media-frame .search { + margin-top: 11px; + padding: 4px; + line-height: 18px; + font-size: 13px; + color: #464646; + font-family: "Open Sans", sans-serif; + -webkit-appearance: none; +} + +.media-toolbar-secondary .search { + margin-left: 16px; +} + +/** + * Attachments + */ +.attachments { + margin: 0; + padding-left: 16px; + -webkit-overflow-scrolling: touch; +} + +/** + * Attachment + */ +.attachment { + position: relative; + float: right; + + padding: 0; + margin: 0 10px 20px; + color: #464646; + list-style: none; + text-align: center; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.selected.attachment { + box-shadow: + 0 0 0 1px #fff, + 0 0 0 3px #ccc; +} + +.attachment-preview { + position: relative; + width: 199px; + height: 199px; + box-shadow: + inset 0 0 15px rgba( 0, 0, 0, 0.1 ), + inset 0 0 0 1px rgba( 0, 0, 0, 0.05 ); + background: #eee; + cursor: pointer; +} + +.attachment .icon { + margin: 0 auto; + overflow: hidden; + padding-top: 20%; +} + +.attachment .thumbnail { + display: block; + position: absolute; + top: 0; + right: 0; + margin: 0 auto; + overflow: hidden; + max-width: 100%; + max-height: 100%; +} + +.attachment-preview .thumbnail:after { + content: ''; + display: block; + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.1 ); + overflow: hidden; +} + +/* @noflip */ +.attachment .thumbnail img { + top: 0; + left: 0; +} + +/* @noflip */ +.attachment .thumbnail .centered { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + -webkit-transform: translate( 50%, 50% ); + -moz-transform: translate( 50%, 50% ); + -ms-transform: translate( 50%, 50% ); + -o-transform: translate( 50%, 50% ); + transform: translate( 50%, 50% ); +} + +.attachment .thumbnail .centered img { + -webkit-transform: translate( -50%, -50% ); + -moz-transform: translate( -50%, -50% ); + -ms-transform: translate( -50%, -50% ); + -o-transform: translate( -50%, -50% ); + transform: translate( -50%, -50% ); +} + +.attachment .filename { + position: absolute; + right: 0; + left: 0; + bottom: 0; + overflow: hidden; + max-height: 100%; + + word-wrap: break-word; + text-align: center; + font-weight: bold; + background: rgba( 255, 255, 255, 0.8 ); + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.15 ); +} + +.attachment .filename div { + padding: 5px 10px; +} + +.attachment-preview .thumbnail { + width: 199px; + height: 199px; +} + +.attachment .thumbnail img { + position: absolute; +} + +.attachment .close { + display: none; + position: absolute; + top: 5px; + left: 5px; + height: 22px; + width: 22px; + padding: 0; + font-size: 20px; + line-height: 20px; + text-align: center; + text-decoration: none; + color: #464646; + background-color: #fff; + background-position: -96px 4px; + border-width: 0; + border-radius: 3px; + box-shadow: 0 0 0 1px rgba( 0, 0, 0, 0.3 ); +} + +.attachment .close:hover { + box-shadow: 0 0 0 1px rgba( 0, 0, 0, 0.6 ); +} + +.attachment:hover .close { + display: block; +} + +.attachment .check { + display: none; + height: 24px; + width: 24px; + position: absolute; + top: -6px; + left: -6px; + outline: none; + background: #eee; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px rgba( 0, 0, 0, 0.4 ); +} + +.attachment .check div { + background-position: -1px 0; + height: 15px; + width: 15px; + margin: 5px; +} + +.attachment .check:hover div { + background-position: -40px 0; +} + +.attachment.selected .check { + display: block; +} + +.attachment.details { + box-shadow: 0 0 0 1px #fff, + 0 0 0 5px #1e8cbe; +} + +.attachment.details .check { + background-color: #1e8cbe; + box-shadow: 0 0 0 1px #fff, + 0 0 0 2px #1e8cbe; +} + +.attachment.details .check div { + background-position: -21px 0; +} + +.attachment.details .check:hover div { + background-position: -60px 0; +} + +.media-frame .attachment .describe { + position: relative; + display: block; + width: 100%; + margin: -1px 0 0; + padding: 8px; + font-size: 12px; + border-radius: 0; +} + +/** + * Attachments Browser + */ +.media-frame .attachments-browser { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; +} + +.attachments-browser .media-toolbar { + left: 300px; + height: 50px; +} + +.attachments-browser .media-toolbar-primary > .media-button, +.attachments-browser .media-toolbar-primary > .media-button-group, +.attachments-browser .media-toolbar-secondary > .media-button, +.attachments-browser .media-toolbar-secondary > .media-button-group { + margin-top: 10px; +} + +.attachments-browser .attachments, +.attachments-browser .uploader-inline { + position: absolute; + top: 50px; + right: 0; + left: 300px; + bottom: 0; + overflow: auto; +} + +.attachments-browser .instructions { + display: inline-block; + margin-top: 16px; + line-height: 18px; + font-size: 13px; + color: #666; +} + +/** + * Progress Bar + */ +.media-progress-bar { + position: relative; + height: 10px; + width: 70%; + margin: 10px auto; + border-radius: 10px; + background: #dfdfdf; + background: rgba( 0, 0, 0, 0.1 ); +} + +.media-progress-bar div { + height: 10px; + min-width: 20px; + width: 0; + background: #1e8cbe; + border-radius: 10px; + -webkit-transition: width 300ms; + -moz-transition: width 300ms; + -ms-transition: width 300ms; + -o-transition: width 300ms; + transition: width 300ms; +} + +.media-uploader-status .media-progress-bar { + display: none; + width: 100%; +} + +.uploading.media-uploader-status .media-progress-bar { + display: block; +} + +.attachment-preview .media-progress-bar { + position: absolute; + top: 50%; + right: 15%; + width: 70%; + margin: -5px 0 0 0; +} + +.media-uploader-status { + position: relative; + margin: 0 auto; + padding-bottom: 10px; + max-width: 400px; +} + +.media-sidebar .media-uploader-status { + border-bottom: 1px solid #dfdfdf; + box-shadow: 0 1px 0 #fff; +} + +.uploader-inline .media-uploader-status h3 { + display: none; +} + +.media-uploader-status .upload-details { + display: none; + font-size: 12px; + color: #666; +} + +.uploading.media-uploader-status .upload-details { + display: block; +} + +.media-uploader-status .upload-detail-separator { + padding: 0 4px; +} + +.media-uploader-status .upload-count { + color: #464646; +} + +.media-uploader-status .upload-dismiss-errors, +.media-uploader-status .upload-errors { + display: none; +} + +.errors.media-uploader-status .upload-dismiss-errors, +.errors.media-uploader-status .upload-errors { + display: block; +} + +.media-uploader-status .upload-dismiss-errors { + text-decoration: none; +} + +.media-sidebar .media-uploader-status .upload-dismiss-errors { + position: absolute; + top: 0; + left: 0; +} + +.upload-errors .upload-error { + margin: 8px auto 0 auto; + padding: 8px; + border: 1px #c00 solid; + background: #ffebe8; + border-radius: 3px; +} + +.upload-errors .upload-error-label { + padding: 2px 4px; + margin-left: 8px; + font-weight: bold; + color: #fff; + background: #e00; + background-image: -webkit-gradient(linear, right top, right bottom, from(#e00), to(#a00)); + background-image: -webkit-linear-gradient(top, #e00, #a00); + background-image: -moz-linear-gradient(top, #e00, #a00); + background-image: -o-linear-gradient(top, #e00, #a00); + background-image: linear-gradient(to bottom, #e00, #a00); + border-radius: 3px; +} + +.upload-errors .upload-error-message { + display: block; + padding-top: 8px; + color: #b44; + word-wrap: break-word; +} + +.uploader-window { + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + background: rgba( 0, 86, 132, 0.9 ); + + z-index: 250000; + display: none; + text-align: center; + opacity: 0; + + -webkit-transition: opacity 250ms; + -moz-transition: opacity 250ms; + -ms-transition: opacity 250ms; + -o-transition: opacity 250ms; + transition: opacity 250ms; +} + +.uploader-window-content { + position: absolute; + top: 10px; + right: 10px; + left: 10px; + bottom: 10px; + border: 1px dashed #fff; +} + +.uploader-window h3 { + margin: -0.5em 0 0; + position: absolute; + top: 50%; + right: 0; + left: 0; + -webkit-transform: translateY( -50% ); + -moz-transform: translateY( -50% ); + -ms-transform: translateY( -50% ); + -o-transform: translateY( -50% ); + transform: translateY( -50% ); + + font-size: 40px; + color: #fff; + padding: 0; +} + +.uploader-window .media-progress-bar { + margin-top: 20px; + max-width: 300px; + background: transparent; + border-color: #fff; + display: none; +} + +.uploader-window .media-progress-bar div { + background: #fff; +} + +.uploading .uploader-window .media-progress-bar { + display: block; +} + +.media-frame .uploader-inline { + margin: 20px; + padding: 20px; + text-align: center; +} + +.uploader-inline-content { + position: absolute; + top: 30%; + right: 0; + left: 0; +} + +.uploader-inline-content .upload-ui { + margin: 4em 0; +} + +.uploader-inline-content .post-upload-ui { + margin-bottom: 2em; +} + +.uploader-inline .has-upload-message .upload-ui { + margin: 0 0 4em; +} + +.uploader-inline h3 { + font-size: 20px; + line-height: 28px; + font-weight: 400; + margin-bottom: 1.6em; +} + +.uploader-inline .has-upload-message .upload-instructions { + font-size: 14px; + color: #464646; + font-weight: normal; +} + +.uploader-inline .drop-instructions { + display: none; +} + +.supports-drag-drop .uploader-inline .drop-instructions { + display: block; +} + +.uploader-inline p { + font-size: 12px; +} + +.uploader-inline .media-progress-bar { + display: none; +} + +.uploading.uploader-inline .media-progress-bar { + display: block; +} + +.uploader-inline .browser { + display: inline-block !important; +} + +/** + * Selection + */ +.media-selection { + position: absolute; + top: 0; + right: 0; + left: 350px; + height: 60px; + padding: 0 16px 0 0; + overflow: hidden; + white-space: nowrap; +} + +.media-selection .selection-info { + display: inline-block; + font-size: 12px; + height: 60px; + margin-left: 10px; + vertical-align: top; +} + +.media-selection.empty, +.media-selection.editing { + display: none; +} + +.media-selection.one .edit-selection { + display: none; +} + +.media-selection .count { + display: block; + padding-top: 12px; + font-size: 14px; + line-height: 20px; + font-weight: bold; +} + +.media-selection .selection-info a { + display: block; + float: right; + padding: 1px 8px; + margin: 1px -8px 1px 8px; + line-height: 16px; + text-decoration: none; + border-left: 1px solid #dfdfdf; + color: #21759B; +} + +.media-selection .selection-info a:hover { + background: #21759B; + color: #fff; + border-color: transparent; +} + +.media-selection .selection-info a:last-child { + border-left: 0; + margin-left: 0; +} + +.media-selection .selection-info .clear-selection { + color: red; +} + +.media-selection .selection-info .clear-selection:hover { + background: red; +} + +.media-selection .selection-view { + display: inline-block; + vertical-align: top; +} + +.media-selection .attachments { + display: inline-block; + height: 48px; + margin-top: 5px; + overflow: hidden; + vertical-align: top; +} + +.media-selection .attachment .icon { + width: 50%; +} + +.attachment.selection.selected { + box-shadow: none; +} + +.attachment.selection.details { + box-shadow: + 0 0 0 1px #fff, + 0 0 0 4px #1e8cbe; +} + +.media-selection .attachment.selection.details { + box-shadow: + 0 0 0 1px #fff, + 0 0 0 3px #1e8cbe; +} + +.media-selection:after { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 25px; + background-image: -webkit-gradient(linear, left top, right top, from( rgba( 255, 255, 255, 1 ) ), to( rgba( 255, 255, 255, 0 ) )); + background-image: -webkit-linear-gradient(left, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) ); + background-image: -moz-linear-gradient(left, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) ); + background-image: -o-linear-gradient(left, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) ); + background-image: linear-gradient(to right, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) ); +} + +.media-selection .attachment .filename { + display: none; +} + +/** + * Spinner + */ + +.media-frame .spinner { + background: url('../images/spinner.gif') no-repeat; + background-size: 20px 20px; + display: none; + opacity: 0.7; + filter: alpha(opacity=70); + width: 20px; + height: 20px; + margin: 0; +} + +.media-sidebar .settings-save-status { + background: #f5f5f5; + float: left; + text-transform: none; + z-index: 10; +} + +.media-sidebar .settings-save-status .spinner { + margin: 0 5px 0; +} + +.media-sidebar .settings-save-status .saved { + float: left; + display: none; +} + +.media-sidebar .save-waiting .settings-save-status .spinner, +.media-sidebar .save-complete .settings-save-status .saved { + display: block; +} + +/** + * Attachment Details + */ +.attachment-details { + position: relative; + overflow: auto; +} + +.attachment-info { + overflow: hidden; + min-height: 60px; + margin-bottom: 16px; + line-height: 18px; + color: #666; + border-bottom: 1px solid #e5e5e5; + box-shadow: 0 1px 0 #fff; + padding-bottom: 11px; +} + +.attachment-info .filename { + font-weight: bold; + color: #464646; + word-wrap: break-word; +} + +.attachment-info .thumbnail { + position: relative; + float: right; + max-width: 120px; + max-height: 120px; + margin-top: 5px; + margin-left: 10px; + margin-bottom: 5px; +} + +.uploading .attachment-info .thumbnail { + width: 120px; + height: 80px; + box-shadow: inset 0 0 15px rgba( 0, 0, 0, 0.1 ); +} + +.uploading .attachment-info .media-progress-bar { + margin-top: 35px; +} + +.attachment-info .thumbnail:after { + content: ''; + display: block; + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.15 ); + overflow: hidden; +} + +.attachment-info .thumbnail img { + display: block; + max-width: 120px; + max-height: 120px; + margin: 0 auto; +} + +.attachment-info .details { + float: right; + font-size: 12px; + max-width: 100%; +} + +.attachment-info .edit-attachment, +.attachment-info .refresh-attachment, +.attachment-info .delete-attachment { + display: block; + text-decoration: none; + white-space: nowrap; +} + +.attachment-info .refresh-attachment, +.attachment-details.needs-refresh .attachment-info .edit-attachment { + display: none; +} + +.attachment-details.needs-refresh .attachment-info .refresh-attachment, +.attachment-info .edit-attachment { + display: block; +} + +.attachment-info .delete-attachment { + color: #bc0b0b; +} + +.attachment-info .delete-attachment:hover { + color: red; +} + +/** + * Attachment Display Settings + */ +.attachment-display-settings { + width: 100%; + float: right; + overflow: hidden; +} + +.attachment-display-settings h4 { + margin: 1.4em 0 0.4em; +} + +.gallery-settings { + overflow: hidden; +} + +/** + * Embed from URL + */ +.embed-url { + display: block; + position: relative; + padding: 16px; + margin: 0; + z-index: 250; + background: #fff; + font-size: 18px; +} + +.media-frame .embed-url input { + font-size: 18px; + padding: 12px 14px; + width: 100%; + min-width: 200px; + box-shadow: inset 2px 2px 4px -2px rgba( 0, 0, 0, 0.1 ); +} + +.media-frame .embed-url .spinner { + position: absolute; + top: 16px; + left: 26px; +} + +.media-frame .embed-loading .embed-url .spinner { + display: block; +} + +.embed-link-settings, +.embed-image-settings { + position: absolute; + top: 60px; + right: 0; + left: 0; + bottom: 0; + padding: 16px 16px 32px; + overflow: auto; +} + +.media-embed .thumbnail { + max-width: 100%; + max-height: 200px; + position: relative; + float: right; +} + +.media-embed .thumbnail img { + max-height: 200px; + display: block; +} + +.media-embed .thumbnail:after { + content: ''; + display: block; + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.1 ); + overflow: hidden; +} + +.media-embed .setting { + width: 100%; + margin-top: 10px; + float: right; + display: block; + clear: both; +} + +.media-embed .setting span { + display: block; + width: 200px; + font-size: 13px; + line-height: 24px; + color: #666; +} + +.media-embed .setting .button-group { + margin: 2px 0; +} + +.media-embed .setting input, +.media-embed .setting textarea { + display: block; + width: 100%; + max-width: 400px; + margin: 1px 0; +} + +/** + * IE7 Fixes + */ +.ie7 .media-frame .attachments-browser { + position: static; +} + +.ie7 .media-frame .embed-url input { + margin-top: 4px; + width: 90%; +} + +.ie7 .compat-item { + width: 99%; +} + +.ie7 .attachment-display-settings { + width: auto; +} + +.ie7 .attachment-preview, +.ie7 .attachment-preview .thumbnail { + width: 120px; + height: 120px; +} + +.ie7 .media-frame .attachment .describe { + width: 102px; +} + +.ie7 .media-sidebar .setting select { + max-width: 55%; +} + +.ie7 .media-sidebar .setting input, +.ie7 .media-sidebar .setting textarea { + width: 55%; +} + +.ie7 .media-sidebar .setting .link-to-custom { + float: right; +} + +/** + * Localization + */ +.rtl .media-modal, +.rtl .media-frame, +.rtl .media-frame .search, +.rtl .media-frame input[type="text"], +.rtl .media-frame input[type="password"], +.rtl .media-frame input[type="number"], +.rtl .media-frame input[type="search"], +.rtl .media-frame input[type="email"], +.rtl .media-frame input[type="url"], +.rtl .media-frame textarea, +.rtl .media-frame select { + font-family: Tahoma, sans-serif; +} + +:lang(he-il) .rtl .media-modal, +:lang(he-il) .rtl .media-frame, +:lang(he-il) .rtl .media-frame .search, +:lang(he-il) .rtl .media-frame input[type="text"], +:lang(he-il) .rtl .media-frame input[type="password"], +:lang(he-il) .rtl .media-frame input[type="number"], +:lang(he-il) .rtl .media-frame input[type="search"], +:lang(he-il) .rtl .media-frame input[type="email"], +:lang(he-il) .rtl .media-frame input[type="url"], +:lang(he-il) .rtl .media-frame textarea, +:lang(he-il) .rtl .media-frame select { + font-family: Arial, sans-serif; +} + + + + +@media only screen and (max-width: 960px) { + .media-frame-content .media-toolbar-primary .search, + .media-frame-content .media-toolbar-secondary .attachment-filters { + max-width: 120px; + } +} + +/** + * Responsive layout + */ +@media only screen and (max-width: 900px) { + .media-frame-menu { + width: 139px; + } + + .media-menu > a { + padding: 4px 5px; + } + + .media-frame-title, + .media-frame-router, + .media-frame-content, + .media-frame-toolbar { + right: 140px; + } + + .media-sidebar { + width: 159px; + padding: 0 10px 24px; + } + + .attachments-browser .attachments, + .attachments-browser .uploader-inline, + .attachments-browser .media-toolbar { + left: 180px; + } + + .media-sidebar .setting input, + .media-sidebar .setting textarea, + .media-sidebar .setting span, + .compat-item label span { + float: none; + } + + .media-sidebar .setting span, + .compat-item label span { + text-align: inherit; + display: block; + min-height: 16px; + margin: 0; + padding: 8px 2px 0; + } + + .media-sidebar .setting input, + .media-sidebar .setting textarea, + .media-sidebar .setting select { + width: 98%; + max-width: none; + } + + .media-sidebar .setting select.columns { + width: auto; + } + + .media-frame input, + .media-frame textarea, + .media-frame .search { + padding: 3px 6px; + } + + .media-frame-content .attachment .icon { + top: 40%; + } + + .media-selection { + min-width: 120px; + } + + .media-selection:after { + background: none; + } + + .media-selection .attachments { + display: none; + } + + .media-menu .separator { + margin: 12px 10px; + } + + .media-modal-close { + left: 10px; + } + + /* Text inputs need to be 16px, or they force zooming on iOS */ + .media-frame input[type="text"], + .media-frame input[type="password"], + .media-frame input[type="number"], + .media-frame input[type="search"], + .media-frame input[type="email"], + .media-frame input[type="url"], + .media-frame textarea, + .media-frame select { + font-size: 16px; + } +} + +/* Responsive on portrait and landscape */ +@media only screen and (max-width: 640px), screen and (max-height: 400px) { + + /* Media tabs on the top */ + .media-frame-content .media-toolbar .instructions { + display: none; + } + + .media-frame-menu { + width: auto; + bottom: auto; + left: 0; + height: 60px; + } + + .media-menu { + border-left: none; + position: relative; + border-bottom: 1px solid #dddddd; + overflow: hidden; + padding: 10px 10px 10px 0; + } + + .media-menu a { + float: right; + width: 42%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } + + .media-frame-title { + display: none; + } + + .media-frame-toolbar { + position: absolute; + bottom: 0px; + right: 0; + left: 0; + background: #FFF; + border-top: 1px solid #DEDEDE; + } + + .media-toolbar { + position: relative; + } + + .media-frame { + overflow: hidden; + } + + .attachments-browser .attachments { + top: 42px; + } + + .attachment-details h3 { + margin-top: 45px; + } + + /* Shorten right-side links so they don't overlap the close button */ + .media-menu a:nth-child(2), + .media-menu a:last-child { + width: 40%; + } + + .media-menu .separator { + display: none; + } + + .media-frame-title { + top: 72px; + right: auto; + height: auto; + } + + .media-frame-title h1 { + line-height: 3; + font-size: 18px; + } + + .media-frame-router { + top: 84px; + right: 0; + } + + .media-frame-content { + right: 0; + top: 118px; + } + + .media-frame .attachments-browser { + padding-bottom: 300px; + } + + .media-sidebar { + border-bottom: 1px solid #dddddd; + } + + .media-modal { + width: auto; + } + + .media-toolbar-primary, .media-toolbar-secondary { + height: auto; + } + + .uploader-inline h3 { + margin: 0 0 .8em 0; + } + + .uploader-inline-content { + top: auto; + } + + .uploader-inline-content .upload-ui { + margin: 0; + } + + .attachments-browser .attachments, .attachments-browser .uploader-inline { + position: relative; + margin-left: 180px; + } + + /* Full-bleed modal */ + .media-modal { + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + } + + .media-modal-backdrop { + position: fixed; + } + + .attachments-browser .attachment, + .attachments-browser .attachment-preview { + max-width: 100%; + } + + .attachments-browser .media-toolbar-primary input.search { + max-width: 150px; + } + + .uploader-inline-content { + position: relative; + } + + .media-sidebar .setting input[type="checkbox"], + .media-sidebar .field input[type="checkbox"] { + width: 25px; + } + + /* Image From Link */ + .embed-link-settings, + .embed-image-settings { + padding-bottom: 52px; + } + + /* Gallery */ + .media-frame.hide-router .media-frame-content { + top: 73px; + border-top: none; + } + + .gallery-settings h3 { + margin-top: 45px; + } + +} + +/* Landscape specific header override */ +@media screen and (max-height: 400px) { + .media-menu { + padding: 0 10px 0 0; + } + + .media-menu a { + float: right; + width: 21%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + padding: 10px inherit; + } + + .media-menu a:nth-child(2), + .media-menu a:last-child { + width: 21%; + } + + .media-modal-close { + top: 2px; + } + + .media-frame-router { + top: 44px; + } + + .media-frame-content { + top: 78px; + } + + .attachments-browser .attachments { + top: 2px; + } + + /* Prevent unnecessary scrolling on title input */ + .embed-link-settings { + overflow: visible; + } +} + +@media only screen and (max-width: 680px) { + .media-frame-content .media-toolbar .search, + .media-frame-content .media-toolbar .attachment-filters { + max-width: 85px; + } +} + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .media-modal-icon { + background-image: url(../images/uploader-icons-2x.png); + background-size: 134px 15px; + } + + .media-frame .spinner { + background-image: url('../images/spinner-2x.gif'); + } +} \ No newline at end of file diff --git a/src/wp-includes/css/media-views-rtl.min.css b/src/wp-includes/css/media-views-rtl.min.css new file mode 100644 index 0000000..f735698 --- /dev/null +++ b/src/wp-includes/css/media-views-rtl.min.css @@ -0,0 +1 @@ +.media-modal *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.media-modal,.media-frame{font-family:"Open Sans",sans-serif;font-size:12px}.media-frame input,.media-frame textarea{padding:6px 8px;line-height:16px}.media-frame select,.wp-admin .media-frame select{line-height:28px;margin-top:3px}.media-frame a{border-bottom:0;color:#21759b}.media-frame a:hover{color:#d54e21}.media-frame a.button{color:#333}.media-frame a.button:hover{color:#222}.media-frame a.button-primary,.media-frame a.button-primary:hover{color:#fff}.media-frame input[type=text],.media-frame input[type=password],.media-frame input[type=number],.media-frame input[type=search],.media-frame input[type=email],.media-frame input[type=url],.media-frame textarea,.media-frame select{font-family:"Open Sans",sans-serif;font-size:12px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;border-width:1px;border-style:solid;border-color:#dfdfdf}.media-frame select{height:24px;padding:2px}.media-frame input:disabled,.media-frame textarea:disabled,.media-frame input[readonly],.media-frame textarea[readonly]{background-color:#eee}.media-frame input[type=search]{-webkit-appearance:textfield}.media-frame :-moz-placeholder{color:#a9a9a9}.ui-sortable,.ui-draggable{-ms-touch-action:none;touch-action:none}.meta-box-sortables.ui-sortable{-ms-touch-action:auto;touch-action:auto}.meta-box-sortables.ui-sortable .hndle{-ms-touch-action:none;touch-action:none}.media-modal{position:fixed;top:30px;right:30px;left:30px;bottom:30px;z-index:160000}.wp-customizer .media-modal{z-index:560000}.media-modal-backdrop{position:fixed;top:0;right:0;left:0;bottom:0;min-height:360px;background:#000;opacity:.7;z-index:159900}.wp-customizer .media-modal-backdrop{z-index:559900}.media-modal-close{position:absolute;text-decoration:none;top:5px;left:10px;width:30px;height:30px;z-index:1000}.media-modal-close span.media-modal-icon{display:block;margin:8px auto 0;width:15px;height:15px;background-image:none}.media-modal-close .media-modal-icon:before{content:'\f158';font:400 20px/1 dashicons;speak:none;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#666}.media-modal-close:hover .media-modal-icon:before{color:#2ea2cc}.media-modal-close:active{outline:0}.media-modal-content{position:absolute;top:0;right:0;left:0;bottom:0;overflow:auto;min-height:300px;box-shadow:0 5px 15px rgba(0,0,0,.7);background:#fcfcfc;-webkit-font-smoothing:subpixel-antialiased}.media-modal-icon{background-image:url(../images/uploader-icons.png);background-repeat:no-repeat}.media-toolbar{position:absolute;top:0;right:0;left:0;z-index:100;height:60px;padding:0 16px;border:0 solid #dfdfdf;overflow:hidden}.media-toolbar-primary{float:left;height:100%}.media-toolbar-secondary{float:right;height:100%}.media-toolbar-primary>.media-button,.media-toolbar-primary>.media-button-group{margin-right:10px;float:right;margin-top:15px}.media-toolbar-secondary>.media-button,.media-toolbar-secondary>.media-button-group{margin-left:10px;float:right;margin-top:15px}.media-sidebar{position:absolute;top:0;left:0;bottom:0;width:267px;padding:0 16px 24px;z-index:75;background:#f3f3f3;border-right:1px solid #ddd;overflow:auto;-webkit-overflow-scrolling:touch}.hide-toolbar .media-sidebar{bottom:0}.media-sidebar .sidebar-title{font-size:20px;margin:0;padding:12px 10px 10px;line-height:28px}.media-sidebar .sidebar-content{padding:0 10px;margin-bottom:130px}.media-sidebar .search{display:block;width:100%}.media-sidebar h3{position:relative;font-weight:700;text-transform:uppercase;font-size:12px;color:#666;margin:24px 0 8px}.media-sidebar .setting{display:block;float:right;width:100%;margin:1px 0}.media-sidebar .setting label{display:block}.media-sidebar .setting .link-to-custom{margin:3px 0}.media-sidebar .setting span{min-width:30%;margin-left:4%;font-size:12px}.media-sidebar .setting select{max-width:65%}.media-sidebar .setting input[type=checkbox],.media-sidebar .field input[type=checkbox]{width:16px;float:none;margin:8px 3px 0;padding:0}.media-sidebar .setting span,.compat-item label span{float:right;min-height:22px;padding-top:8px;line-height:16px;text-align:left;font-weight:400;color:#666}.media-sidebar .setting input,.media-sidebar .setting textarea{margin:1px;width:65%;float:left}.media-sidebar .setting textarea,.compat-item .field textarea{height:62px;resize:vertical}.media-sidebar select{margin-top:3px}.compat-item{float:right;width:100%;overflow:hidden}.compat-item table{width:100%;table-layout:fixed;border-spacing:0;border:0}.compat-item tr{padding:2px 0;display:block;overflow:hidden}.compat-item .label,.compat-item .field{display:block;margin:0;padding:0}.compat-item .label{min-width:30%;margin-left:4%;float:right;text-align:left}.compat-item .label span{display:block;width:100%}.compat-item .field{float:left;width:66%}.compat-item .field input{width:100%;margin:0}.media-menu{position:absolute;top:0;right:0;left:0;bottom:0;margin:0;padding:16px 0;background:#f3f3f3;border-left-width:1px;border-left-style:solid;border-left-color:#ccc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.media-menu>a{display:block;position:relative;padding:8px 20px;margin:0;line-height:18px;font-size:14px;color:#0074a2;text-decoration:none}.media-menu>a:hover{color:#21759B;background:rgba(0,0,0,.04)}.media-menu>a:active{outline:0}.media-menu .active,.media-menu .active:hover{color:#222;font-weight:700}.media-menu .separator{height:0;margin:12px 20px;padding:0;border-top:1px solid #ddd}.media-router{position:relative;padding:0 6px;margin:0;clear:both;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.media-router>a{position:relative;float:right;padding:8px 10px 9px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none}.media-router>a:last-child{border-left:0}.media-router>a:active,.media-router>a:focus{outline:0}.media-router .active,.media-router .active:hover{color:#333}.media-router .active,.media-router>a.active:last-child{margin:-1px -1px 0;background:#fff;border:1px solid #ddd;border-bottom:0}.media-router .active:after{display:none}.media-frame{overflow:hidden;position:absolute;top:0;right:0;left:0;bottom:0}.media-frame-menu{position:absolute;top:0;right:0;bottom:0;width:199px;z-index:150}.media-frame-title{position:absolute;top:0;right:200px;left:0;height:56px;z-index:200}.media-frame-router{position:absolute;top:56px;right:200px;left:0;height:36px;z-index:200}.media-frame-content{position:absolute;top:90px;right:200px;left:0;bottom:61px;height:auto;width:auto;margin:0;overflow:auto;background:#fff;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.media-frame-toolbar{position:absolute;right:200px;left:0;bottom:0;height:60px;z-index:100}.media-frame.hide-menu .media-frame-title,.media-frame.hide-menu .media-frame-router,.media-frame.hide-menu .media-frame-toolbar,.media-frame.hide-menu .media-frame-content{right:0}.media-frame.hide-menu .media-frame-menu{right:-200px}.media-frame.hide-toolbar .media-frame-content{bottom:0}.media-frame.hide-toolbar .media-frame-toolbar{bottom:-61px}.media-frame.hide-router .media-frame-content{top:56px}.media-frame.hide-router .media-frame-router{display:none}.media-frame.hide-router .media-frame-title{border-bottom:1px solid #dfdfdf;box-shadow:0 4px 4px -4px rgba(0,0,0,.1)}.media-frame .media-toolbar .add-to-gallery{display:none}.media-frame-title h1{padding:0 16px;font-size:22px;line-height:60px;margin:0}.media-frame .media-iframe{overflow:hidden}.media-frame .media-iframe,.media-frame .media-iframe iframe{height:100%;width:100%;border:0}.media-frame select.attachment-filters{margin-top:11px;margin-left:10px}.media-frame .search{margin-top:11px;padding:4px;line-height:18px;font-size:13px;color:#464646;font-family:"Open Sans",sans-serif;-webkit-appearance:none}.media-toolbar-secondary .search{margin-left:16px}.attachments{margin:0;padding-left:16px;-webkit-overflow-scrolling:touch}.attachment{position:relative;float:right;padding:0;margin:0 10px 20px;color:#464646;list-style:none;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.selected.attachment{box-shadow:0 0 0 1px #fff,0 0 0 3px #ccc}.attachment-preview{position:relative;width:199px;height:199px;box-shadow:inset 0 0 15px rgba(0,0,0,.1),inset 0 0 0 1px rgba(0,0,0,.05);background:#eee;cursor:pointer}.attachment .icon{margin:0 auto;overflow:hidden;padding-top:20%}.attachment .thumbnail{display:block;position:absolute;top:0;right:0;margin:0 auto;overflow:hidden;max-width:100%;max-height:100%}.attachment-preview .thumbnail:after{content:'';display:block;position:absolute;top:0;right:0;left:0;bottom:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}.attachment .thumbnail img{top:0;left:0}.attachment .thumbnail .centered{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-transform:translate(50%,50%);-moz-transform:translate(50%,50%);-ms-transform:translate(50%,50%);-o-transform:translate(50%,50%);transform:translate(50%,50%)}.attachment .thumbnail .centered img{-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.attachment .filename{position:absolute;right:0;left:0;bottom:0;overflow:hidden;max-height:100%;word-wrap:break-word;text-align:center;font-weight:700;background:rgba(255,255,255,.8);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}.attachment .filename div{padding:5px 10px}.attachment-preview .thumbnail{width:199px;height:199px}.attachment .thumbnail img{position:absolute}.attachment .close{display:none;position:absolute;top:5px;left:5px;height:22px;width:22px;padding:0;font-size:20px;line-height:20px;text-align:center;text-decoration:none;color:#464646;background-color:#fff;background-position:-96px 4px;border-width:0;border-radius:3px;box-shadow:0 0 0 1px rgba(0,0,0,.3)}.attachment .close:hover{box-shadow:0 0 0 1px rgba(0,0,0,.6)}.attachment:hover .close{display:block}.attachment .check{display:none;height:24px;width:24px;position:absolute;top:-6px;left:-6px;outline:0;background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment .check div{background-position:-1px 0;height:15px;width:15px;margin:5px}.attachment .check:hover div{background-position:-40px 0}.attachment.selected .check{display:block}.attachment.details{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.attachment.details .check div{background-position:-21px 0}.attachment.details .check:hover div{background-position:-60px 0}.media-frame .attachment .describe{position:relative;display:block;width:100%;margin:-1px 0 0;padding:8px;font-size:12px;border-radius:0}.media-frame .attachments-browser{position:relative;width:100%;height:100%;overflow:hidden}.attachments-browser .media-toolbar{left:300px;height:50px}.attachments-browser .media-toolbar-primary>.media-button,.attachments-browser .media-toolbar-primary>.media-button-group,.attachments-browser .media-toolbar-secondary>.media-button,.attachments-browser .media-toolbar-secondary>.media-button-group{margin-top:10px}.attachments-browser .attachments,.attachments-browser .uploader-inline{position:absolute;top:50px;right:0;left:300px;bottom:0;overflow:auto}.attachments-browser .instructions{display:inline-block;margin-top:16px;line-height:18px;font-size:13px;color:#666}.media-progress-bar{position:relative;height:10px;width:70%;margin:10px auto;border-radius:10px;background:#dfdfdf;background:rgba(0,0,0,.1)}.media-progress-bar div{height:10px;min-width:20px;width:0;background:#1e8cbe;border-radius:10px;-webkit-transition:width 300ms;-moz-transition:width 300ms;-ms-transition:width 300ms;-o-transition:width 300ms;transition:width 300ms}.media-uploader-status .media-progress-bar{display:none;width:100%}.uploading.media-uploader-status .media-progress-bar{display:block}.attachment-preview .media-progress-bar{position:absolute;top:50%;right:15%;width:70%;margin:-5px 0 0 0}.media-uploader-status{position:relative;margin:0 auto;padding-bottom:10px;max-width:400px}.media-sidebar .media-uploader-status{border-bottom:1px solid #dfdfdf;box-shadow:0 1px 0 #fff}.uploader-inline .media-uploader-status h3{display:none}.media-uploader-status .upload-details{display:none;font-size:12px;color:#666}.uploading.media-uploader-status .upload-details{display:block}.media-uploader-status .upload-detail-separator{padding:0 4px}.media-uploader-status .upload-count{color:#464646}.media-uploader-status .upload-dismiss-errors,.media-uploader-status .upload-errors{display:none}.errors.media-uploader-status .upload-dismiss-errors,.errors.media-uploader-status .upload-errors{display:block}.media-uploader-status .upload-dismiss-errors{text-decoration:none}.media-sidebar .media-uploader-status .upload-dismiss-errors{position:absolute;top:0;left:0}.upload-errors .upload-error{margin:8px auto 0;padding:8px;border:1px #c00 solid;background:#ffebe8;border-radius:3px}.upload-errors .upload-error-label{padding:2px 4px;margin-left:8px;font-weight:700;color:#fff;background:#e00;background-image:-webkit-gradient(linear,right top,right bottom,from(#e00),to(#a00));background-image:-webkit-linear-gradient(top,#e00,#a00);background-image:-moz-linear-gradient(top,#e00,#a00);background-image:-o-linear-gradient(top,#e00,#a00);background-image:linear-gradient(to bottom,#e00,#a00);border-radius:3px}.upload-errors .upload-error-message{display:block;padding-top:8px;color:#b44;word-wrap:break-word}.uploader-window{position:fixed;top:0;right:0;left:0;bottom:0;background:rgba(0,86,132,.9);z-index:250000;display:none;text-align:center;opacity:0;-webkit-transition:opacity 250ms;-moz-transition:opacity 250ms;-ms-transition:opacity 250ms;-o-transition:opacity 250ms;transition:opacity 250ms}.uploader-window-content{position:absolute;top:10px;right:10px;left:10px;bottom:10px;border:1px dashed #fff}.uploader-window h3{margin:-.5em 0 0;position:absolute;top:50%;right:0;left:0;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);font-size:40px;color:#fff;padding:0}.uploader-window .media-progress-bar{margin-top:20px;max-width:300px;background:transparent;border-color:#fff;display:none}.uploader-window .media-progress-bar div{background:#fff}.uploading .uploader-window .media-progress-bar{display:block}.media-frame .uploader-inline{margin:20px;padding:20px;text-align:center}.uploader-inline-content{position:absolute;top:30%;right:0;left:0}.uploader-inline-content .upload-ui{margin:4em 0}.uploader-inline-content .post-upload-ui{margin-bottom:2em}.uploader-inline .has-upload-message .upload-ui{margin:0 0 4em}.uploader-inline h3{font-size:20px;line-height:28px;font-weight:400;margin-bottom:1.6em}.uploader-inline .has-upload-message .upload-instructions{font-size:14px;color:#464646;font-weight:400}.uploader-inline .drop-instructions{display:none}.supports-drag-drop .uploader-inline .drop-instructions{display:block}.uploader-inline p{font-size:12px}.uploader-inline .media-progress-bar{display:none}.uploading.uploader-inline .media-progress-bar{display:block}.uploader-inline .browser{display:inline-block!important}.media-selection{position:absolute;top:0;right:0;left:350px;height:60px;padding:0 16px 0 0;overflow:hidden;white-space:nowrap}.media-selection .selection-info{display:inline-block;font-size:12px;height:60px;margin-left:10px;vertical-align:top}.media-selection.empty,.media-selection.editing{display:none}.media-selection.one .edit-selection{display:none}.media-selection .count{display:block;padding-top:12px;font-size:14px;line-height:20px;font-weight:700}.media-selection .selection-info a{display:block;float:right;padding:1px 8px;margin:1px -8px 1px 8px;line-height:16px;text-decoration:none;border-left:1px solid #dfdfdf;color:#21759B}.media-selection .selection-info a:hover{background:#21759B;color:#fff;border-color:transparent}.media-selection .selection-info a:last-child{border-left:0;margin-left:0}.media-selection .selection-info .clear-selection{color:red}.media-selection .selection-info .clear-selection:hover{background:red}.media-selection .selection-view{display:inline-block;vertical-align:top}.media-selection .attachments{display:inline-block;height:48px;margin-top:5px;overflow:hidden;vertical-align:top}.media-selection .attachment .icon{width:50%}.attachment.selection.selected{box-shadow:none}.attachment.selection.details{box-shadow:0 0 0 1px #fff,0 0 0 4px #1e8cbe}.media-selection .attachment.selection.details{box-shadow:0 0 0 1px #fff,0 0 0 3px #1e8cbe}.media-selection:after{content:'';display:block;position:absolute;top:0;left:0;bottom:0;width:25px;background-image:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,1)),to(rgba(255,255,255,0)));background-image:-webkit-linear-gradient(left,rgba(255,255,255,1),rgba(255,255,255,0));background-image:-moz-linear-gradient(left,rgba(255,255,255,1),rgba(255,255,255,0));background-image:-o-linear-gradient(left,rgba(255,255,255,1),rgba(255,255,255,0));background-image:linear-gradient(to right,rgba(255,255,255,1),rgba(255,255,255,0))}.media-selection .attachment .filename{display:none}.media-frame .spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;display:none;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:0}.media-sidebar .settings-save-status{background:#f5f5f5;float:left;text-transform:none;z-index:10}.media-sidebar .settings-save-status .spinner{margin:0 5px}.media-sidebar .settings-save-status .saved{float:left;display:none}.media-sidebar .save-waiting .settings-save-status .spinner,.media-sidebar .save-complete .settings-save-status .saved{display:block}.attachment-details{position:relative;overflow:auto}.attachment-info{overflow:hidden;min-height:60px;margin-bottom:16px;line-height:18px;color:#666;border-bottom:1px solid #e5e5e5;box-shadow:0 1px 0 #fff;padding-bottom:11px}.attachment-info .filename{font-weight:700;color:#464646;word-wrap:break-word}.attachment-info .thumbnail{position:relative;float:right;max-width:120px;max-height:120px;margin-top:5px;margin-left:10px;margin-bottom:5px}.uploading .attachment-info .thumbnail{width:120px;height:80px;box-shadow:inset 0 0 15px rgba(0,0,0,.1)}.uploading .attachment-info .media-progress-bar{margin-top:35px}.attachment-info .thumbnail:after{content:'';display:block;position:absolute;top:0;right:0;left:0;bottom:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);overflow:hidden}.attachment-info .thumbnail img{display:block;max-width:120px;max-height:120px;margin:0 auto}.attachment-info .details{float:right;font-size:12px;max-width:100%}.attachment-info .edit-attachment,.attachment-info .refresh-attachment,.attachment-info .delete-attachment{display:block;text-decoration:none;white-space:nowrap}.attachment-info .refresh-attachment,.attachment-details.needs-refresh .attachment-info .edit-attachment{display:none}.attachment-details.needs-refresh .attachment-info .refresh-attachment,.attachment-info .edit-attachment{display:block}.attachment-info .delete-attachment{color:#bc0b0b}.attachment-info .delete-attachment:hover{color:red}.attachment-display-settings{width:100%;float:right;overflow:hidden}.attachment-display-settings h4{margin:1.4em 0 .4em}.gallery-settings{overflow:hidden}.embed-url{display:block;position:relative;padding:16px;margin:0;z-index:250;background:#fff;font-size:18px}.media-frame .embed-url input{font-size:18px;padding:12px 14px;width:100%;min-width:200px;box-shadow:inset 2px 2px 4px -2px rgba(0,0,0,.1)}.media-frame .embed-url .spinner{position:absolute;top:16px;left:26px}.media-frame .embed-loading .embed-url .spinner{display:block}.embed-link-settings,.embed-image-settings{position:absolute;top:60px;right:0;left:0;bottom:0;padding:16px 16px 32px;overflow:auto}.media-embed .thumbnail{max-width:100%;max-height:200px;position:relative;float:right}.media-embed .thumbnail img{max-height:200px;display:block}.media-embed .thumbnail:after{content:'';display:block;position:absolute;top:0;right:0;left:0;bottom:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}.media-embed .setting{width:100%;margin-top:10px;float:right;display:block;clear:both}.media-embed .setting span{display:block;width:200px;font-size:13px;line-height:24px;color:#666}.media-embed .setting .button-group{margin:2px 0}.media-embed .setting input,.media-embed .setting textarea{display:block;width:100%;max-width:400px;margin:1px 0}.ie7 .media-frame .attachments-browser{position:static}.ie7 .media-frame .embed-url input{margin-top:4px;width:90%}.ie7 .compat-item{width:99%}.ie7 .attachment-display-settings{width:auto}.ie7 .attachment-preview,.ie7 .attachment-preview .thumbnail{width:120px;height:120px}.ie7 .media-frame .attachment .describe{width:102px}.ie7 .media-sidebar .setting select{max-width:55%}.ie7 .media-sidebar .setting input,.ie7 .media-sidebar .setting textarea{width:55%}.ie7 .media-sidebar .setting .link-to-custom{float:right}.rtl .media-modal,.rtl .media-frame,.rtl .media-frame .search,.rtl .media-frame input[type=text],.rtl .media-frame input[type=password],.rtl .media-frame input[type=number],.rtl .media-frame input[type=search],.rtl .media-frame input[type=email],.rtl .media-frame input[type=url],.rtl .media-frame textarea,.rtl .media-frame select{font-family:Tahoma,sans-serif}:lang(he-il) .rtl .media-modal,:lang(he-il) .rtl .media-frame,:lang(he-il) .rtl .media-frame .search,:lang(he-il) .rtl .media-frame input[type=text],:lang(he-il) .rtl .media-frame input[type=password],:lang(he-il) .rtl .media-frame input[type=number],:lang(he-il) .rtl .media-frame input[type=search],:lang(he-il) .rtl .media-frame input[type=email],:lang(he-il) .rtl .media-frame input[type=url],:lang(he-il) .rtl .media-frame textarea,:lang(he-il) .rtl .media-frame select{font-family:Arial,sans-serif}@media only screen and (max-width:960px){.media-frame-content .media-toolbar-primary .search,.media-frame-content .media-toolbar-secondary .attachment-filters{max-width:120px}}@media only screen and (max-width:900px){.media-frame-menu{width:139px}.media-menu>a{padding:4px 5px}.media-frame-title,.media-frame-router,.media-frame-content,.media-frame-toolbar{right:140px}.media-sidebar{width:159px;padding:0 10px 24px}.attachments-browser .attachments,.attachments-browser .uploader-inline,.attachments-browser .media-toolbar{left:180px}.media-sidebar .setting input,.media-sidebar .setting textarea,.media-sidebar .setting span,.compat-item label span{float:none}.media-sidebar .setting span,.compat-item label span{text-align:inherit;display:block;min-height:16px;margin:0;padding:8px 2px 0}.media-sidebar .setting input,.media-sidebar .setting textarea,.media-sidebar .setting select{width:98%;max-width:none}.media-sidebar .setting select.columns{width:auto}.media-frame input,.media-frame textarea,.media-frame .search{padding:3px 6px}.media-frame-content .attachment .icon{top:40%}.media-selection{min-width:120px}.media-selection:after{background:0 0}.media-selection .attachments{display:none}.media-menu .separator{margin:12px 10px}.media-modal-close{left:10px}.media-frame input[type=text],.media-frame input[type=password],.media-frame input[type=number],.media-frame input[type=search],.media-frame input[type=email],.media-frame input[type=url],.media-frame textarea,.media-frame select{font-size:16px}}@media only screen and (max-width:640px),screen and (max-height:400px){.media-frame-content .media-toolbar .instructions{display:none}.media-frame-menu{width:auto;bottom:auto;left:0;height:60px}.media-menu{border-left:0;position:relative;border-bottom:1px solid #ddd;overflow:hidden;padding:10px 10px 10px 0}.media-menu a{float:right;width:42%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.media-frame-title{display:none}.media-frame-toolbar{position:absolute;bottom:0;right:0;left:0;background:#FFF;border-top:1px solid #DEDEDE}.media-toolbar{position:relative}.media-frame{overflow:hidden}.attachments-browser .attachments{top:42px}.attachment-details h3{margin-top:45px}.media-menu a:nth-child(2),.media-menu a:last-child{width:40%}.media-menu .separator{display:none}.media-frame-title{top:72px;right:auto;height:auto}.media-frame-title h1{line-height:3;font-size:18px}.media-frame-router{top:84px;right:0}.media-frame-content{right:0;top:118px}.media-frame .attachments-browser{padding-bottom:300px}.media-sidebar{border-bottom:1px solid #ddd}.media-modal{width:auto}.media-toolbar-primary,.media-toolbar-secondary{height:auto}.uploader-inline h3{margin:0 0 .8em}.uploader-inline-content{top:auto}.uploader-inline-content .upload-ui{margin:0}.attachments-browser .attachments,.attachments-browser .uploader-inline{position:relative;margin-left:180px}.media-modal{position:fixed;top:0;right:0;left:0;bottom:0}.media-modal-backdrop{position:fixed}.attachments-browser .attachment,.attachments-browser .attachment-preview{max-width:100%}.attachments-browser .media-toolbar-primary input.search{max-width:150px}.uploader-inline-content{position:relative}.media-sidebar .setting input[type=checkbox],.media-sidebar .field input[type=checkbox]{width:25px}.embed-link-settings,.embed-image-settings{padding-bottom:52px}.media-frame.hide-router .media-frame-content{top:73px;border-top:0}.gallery-settings h3{margin-top:45px}}@media screen and (max-height:400px){.media-menu{padding:0 10px 0 0}.media-menu a{float:right;width:21%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding:10px inherit}.media-menu a:nth-child(2),.media-menu a:last-child{width:21%}.media-modal-close{top:2px}.media-frame-router{top:44px}.media-frame-content{top:78px}.attachments-browser .attachments{top:2px}.embed-link-settings{overflow:visible}}@media only screen and (max-width:680px){.media-frame-content .media-toolbar .search,.media-frame-content .media-toolbar .attachment-filters{max-width:85px}}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.media-modal-icon{background-image:url(../images/uploader-icons-2x.png);background-size:134px 15px}.media-frame .spinner{background-image:url(../images/spinner-2x.gif)}} \ No newline at end of file diff --git a/src/wp-includes/css/media-views.css b/src/wp-includes/css/media-views.css new file mode 100644 index 0000000..7fb7ffa --- /dev/null +++ b/src/wp-includes/css/media-views.css @@ -0,0 +1,1929 @@ +/** + * Base Styles + */ +.media-modal * { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.media-modal, +.media-frame { + font-family: "Open Sans", sans-serif; + font-size: 12px; +} + +.media-frame input, +.media-frame textarea { + padding: 6px 8px; + line-height: 16px; +} + +.media-frame select, +.wp-admin .media-frame select { + line-height: 28px; + margin-top: 3px; +} + +.media-frame a { + border-bottom: none; + color: #21759b; +} + +.media-frame a:hover { + color: #d54e21; +} + +.media-frame a.button { + color: #333; +} + +.media-frame a.button:hover { + color: #222; +} + +.media-frame a.button-primary, +.media-frame a.button-primary:hover { + color: #fff; +} + +.media-frame input[type="text"], +.media-frame input[type="password"], +.media-frame input[type="number"], +.media-frame input[type="search"], +.media-frame input[type="email"], +.media-frame input[type="url"], +.media-frame textarea, +.media-frame select { + font-family: "Open Sans", sans-serif; + font-size: 12px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; /* ie8 only */ + box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: #dfdfdf; +} + +.media-frame select { + height: 24px; + padding: 2px; +} + +.media-frame input:disabled, +.media-frame textarea:disabled, +.media-frame input[readonly], +.media-frame textarea[readonly] { + background-color: #eee; +} + +.media-frame input[type="search"] { + -webkit-appearance: textfield; +} + +.media-frame :-moz-placeholder { + color: #a9a9a9; +} + +/* Enable draggable on IE10 touch events until it's rolled into jQuery UI core */ +.ui-sortable, +.ui-draggable { + -ms-touch-action: none; + touch-action: none; +} + +.meta-box-sortables.ui-sortable { + -ms-touch-action: auto; + touch-action: auto; +} + +.meta-box-sortables.ui-sortable .hndle { + -ms-touch-action: none; + touch-action: none; +} + +/** + * Modal + */ +.media-modal { + position: fixed; + top: 30px; + left: 30px; + right: 30px; + bottom: 30px; + z-index: 160000; +} + +.wp-customizer .media-modal { + z-index: 560000; +} + +.media-modal-backdrop { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + min-height: 360px; + background: #000; + opacity: 0.7; + z-index: 159900; +} + +.wp-customizer .media-modal-backdrop { + z-index: 559900; +} + +.media-modal-close { + position: absolute; + text-decoration: none; + top: 5px; + right: 10px; + width: 30px; + height: 30px; + z-index: 1000; +} + +.media-modal-close span.media-modal-icon { + display: block; + margin: 8px auto 0; + width: 15px; + height: 15px; + background-image: none; +} + +.media-modal-close .media-modal-icon:before { + content: '\f158'; + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #666; +} + +.media-modal-close:hover .media-modal-icon:before { + color: #2ea2cc; +} + +.media-modal-close:active { + outline: 0; +} + +.media-modal-content { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: auto; + min-height: 300px; + box-shadow: 0 5px 15px rgba(0,0,0,0.7); + background: #fcfcfc; + -webkit-font-smoothing: subpixel-antialiased; +} + +.media-modal-icon { + background-image: url(../images/uploader-icons.png); + background-repeat: no-repeat; +} + +/** + * Toolbar + */ +.media-toolbar { + position: absolute; + top: 0; + left: 0; + right: 0; + z-index: 100; + height: 60px; + padding: 0 16px; + border: 0 solid #dfdfdf; + overflow: hidden; +} + +.media-toolbar-primary { + float: right; + height: 100%; +} + +.media-toolbar-secondary { + float: left; + height: 100%; +} + +.media-toolbar-primary > .media-button, +.media-toolbar-primary > .media-button-group { + margin-left: 10px; + float: left; + margin-top: 15px; +} + +.media-toolbar-secondary > .media-button, +.media-toolbar-secondary > .media-button-group { + margin-right: 10px; + float: left; + margin-top: 15px; +} + +/** + * Sidebar + */ +.media-sidebar { + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 267px; + padding: 0 16px 24px; + z-index: 75; + background: #f3f3f3; + border-left: 1px solid #ddd; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.hide-toolbar .media-sidebar { + bottom: 0; +} + +.media-sidebar .sidebar-title { + font-size: 20px; + margin: 0; + padding: 12px 10px 10px; + line-height: 28px; +} + +.media-sidebar .sidebar-content { + padding: 0 10px; + margin-bottom: 130px; +} + +.media-sidebar .search { + display: block; + width: 100%; +} + +.media-sidebar h3 { + position: relative; + font-weight: bold; + text-transform: uppercase; + font-size: 12px; + color: #666; + margin: 24px 0 8px; +} + +.media-sidebar .setting { + display: block; + float: left; + width: 100%; + margin: 1px 0; +} + +.media-sidebar .setting label { + display: block; +} + +.media-sidebar .setting .link-to-custom { + margin: 3px 0; +} + +.media-sidebar .setting span { + min-width: 30%; + margin-right: 4%; + font-size: 12px; +} + +.media-sidebar .setting select { + max-width: 65%; +} + +.media-sidebar .setting input[type="checkbox"], +.media-sidebar .field input[type="checkbox"] { + width: 16px; + float: none; + margin: 8px 3px 0; + padding: 0; +} + +.media-sidebar .setting span, +.compat-item label span { + float: left; + min-height: 22px; + padding-top: 8px; + line-height: 16px; + text-align: right; + font-weight: normal; + color: #666; +} + +.media-sidebar .setting input, +.media-sidebar .setting textarea { + margin: 1px; + width: 65%; + float: right; +} + +.media-sidebar .setting textarea, +.compat-item .field textarea { + height: 62px; + resize: vertical; +} + +.media-sidebar select { + margin-top: 3px; +} + +.compat-item { + float: left; + width: 100%; + overflow: hidden; +} + +.compat-item table { + width: 100%; + table-layout: fixed; + border-spacing: 0; + border: 0; +} + +.compat-item tr { + padding: 2px 0; + display: block; + overflow: hidden; +} + +.compat-item .label, +.compat-item .field { + display: block; + margin: 0; + padding: 0; +} + +.compat-item .label { + min-width: 30%; + margin-right: 4%; + float: left; + text-align: right; +} + +.compat-item .label span { + display: block; + width: 100%; +} + +.compat-item .field { + float: right; + width: 66%; +} + +.compat-item .field input { + width: 100%; + margin: 0; +} + + +/** + * Menu + */ +.media-menu { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; + padding: 16px 0; + background: #f3f3f3; + border-right-width: 1px; + border-right-style: solid; + border-right-color: #ccc; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.media-menu > a { + display: block; + position: relative; + padding: 8px 20px; + margin: 0; + line-height: 18px; + font-size: 14px; + color: #0074a2; + text-decoration: none; +} + +.media-menu > a:hover { + color: #21759B; + background: rgba( 0, 0, 0, 0.04 ); +} + +.media-menu > a:active { + outline: none; +} + +.media-menu .active, +.media-menu .active:hover { + color: #222; + font-weight: bold; +} + +.media-menu .separator { + height: 0; + margin: 12px 20px; + padding: 0; + border-top: 1px solid #ddd; +} + +/** + * Menu + */ +.media-router { + position: relative; + padding: 0 6px; + margin: 0; + clear: both; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.media-router > a { + position: relative; + float: left; + padding: 8px 10px 9px; + margin: 0; + height: 18px; + line-height: 18px; + font-size: 14px; + text-decoration: none; +} + +.media-router > a:last-child { + border-right: 0; +} + +.media-router > a:active, +.media-router > a:focus { + outline: none; +} + +.media-router .active, +.media-router .active:hover { + color: #333; +} + +.media-router .active, +.media-router > a.active:last-child { + margin: -1px -1px 0; + background: #fff; + border: 1px solid #ddd; + border-bottom: none; +} + +.media-router .active:after { + display: none; +} + +/** + * Frame + */ +.media-frame { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.media-frame-menu { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 199px; + z-index: 150; +} + +.media-frame-title { + position: absolute; + top: 0; + left: 200px; + right: 0; + height: 56px; + z-index: 200; +} + +.media-frame-router { + position: absolute; + top: 56px; + left: 200px; + right: 0; + height: 36px; + z-index: 200; +} + +.media-frame-content { + position: absolute; + top: 90px; + left: 200px; + right: 0; + bottom: 61px; + height: auto; + width: auto; + margin: 0; + overflow: auto; + background: #fff; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} + +.media-frame-toolbar { + position: absolute; + left: 200px; + right: 0; + bottom: 0; + height: 60px; + z-index: 100; +} + +.media-frame.hide-menu .media-frame-title, +.media-frame.hide-menu .media-frame-router, +.media-frame.hide-menu .media-frame-toolbar, +.media-frame.hide-menu .media-frame-content { + left: 0; +} + +.media-frame.hide-menu .media-frame-menu { + left: -200px; +} + +.media-frame.hide-toolbar .media-frame-content { + bottom: 0; +} + +.media-frame.hide-toolbar .media-frame-toolbar { + bottom: -61px; +} + +.media-frame.hide-router .media-frame-content { + top: 56px; +} + +.media-frame.hide-router .media-frame-router { + display: none; +} + +.media-frame.hide-router .media-frame-title { + border-bottom: 1px solid #dfdfdf; + box-shadow: 0 4px 4px -4px rgba( 0, 0, 0, 0.1 ); +} + +.media-frame .media-toolbar .add-to-gallery { + display: none; +} + +.media-frame-title h1 { + padding: 0 16px; + font-size: 22px; + line-height: 60px; + margin: 0; +} + +/** + * Iframes + */ +.media-frame .media-iframe { + overflow: hidden; +} + +.media-frame .media-iframe, +.media-frame .media-iframe iframe { + height: 100%; + width: 100%; + border: 0; +} + +/** + * Attachment Browser Filters + */ +.media-frame select.attachment-filters { + margin-top: 11px; + margin-right: 10px; +} + +/** + * Search + */ +.media-frame .search { + margin-top: 11px; + padding: 4px; + line-height: 18px; + font-size: 13px; + color: #464646; + font-family: "Open Sans", sans-serif; + -webkit-appearance: none; +} + +.media-toolbar-secondary .search { + margin-right: 16px; +} + +/** + * Attachments + */ +.attachments { + margin: 0; + padding-right: 16px; + -webkit-overflow-scrolling: touch; +} + +/** + * Attachment + */ +.attachment { + position: relative; + float: left; + + padding: 0; + margin: 0 10px 20px; + color: #464646; + list-style: none; + text-align: center; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.selected.attachment { + box-shadow: + 0 0 0 1px #fff, + 0 0 0 3px #ccc; +} + +.attachment-preview { + position: relative; + width: 199px; + height: 199px; + box-shadow: + inset 0 0 15px rgba( 0, 0, 0, 0.1 ), + inset 0 0 0 1px rgba( 0, 0, 0, 0.05 ); + background: #eee; + cursor: pointer; +} + +.attachment .icon { + margin: 0 auto; + overflow: hidden; + padding-top: 20%; +} + +.attachment .thumbnail { + display: block; + position: absolute; + top: 0; + left: 0; + margin: 0 auto; + overflow: hidden; + max-width: 100%; + max-height: 100%; +} + +.attachment-preview .thumbnail:after { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.1 ); + overflow: hidden; +} + +/* @noflip */ +.attachment .thumbnail img { + top: 0; + left: 0; +} + +/* @noflip */ +.attachment .thumbnail .centered { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + -webkit-transform: translate( 50%, 50% ); + -moz-transform: translate( 50%, 50% ); + -ms-transform: translate( 50%, 50% ); + -o-transform: translate( 50%, 50% ); + transform: translate( 50%, 50% ); +} + +.attachment .thumbnail .centered img { + -webkit-transform: translate( -50%, -50% ); + -moz-transform: translate( -50%, -50% ); + -ms-transform: translate( -50%, -50% ); + -o-transform: translate( -50%, -50% ); + transform: translate( -50%, -50% ); +} + +.attachment .filename { + position: absolute; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; + max-height: 100%; + + word-wrap: break-word; + text-align: center; + font-weight: bold; + background: rgba( 255, 255, 255, 0.8 ); + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.15 ); +} + +.attachment .filename div { + padding: 5px 10px; +} + +.attachment-preview .thumbnail { + width: 199px; + height: 199px; +} + +.attachment .thumbnail img { + position: absolute; +} + +.attachment .close { + display: none; + position: absolute; + top: 5px; + right: 5px; + height: 22px; + width: 22px; + padding: 0; + font-size: 20px; + line-height: 20px; + text-align: center; + text-decoration: none; + color: #464646; + background-color: #fff; + background-position: -96px 4px; + border-width: 0; + border-radius: 3px; + box-shadow: 0 0 0 1px rgba( 0, 0, 0, 0.3 ); +} + +.attachment .close:hover { + box-shadow: 0 0 0 1px rgba( 0, 0, 0, 0.6 ); +} + +.attachment:hover .close { + display: block; +} + +.attachment .check { + display: none; + height: 24px; + width: 24px; + position: absolute; + top: -6px; + right: -6px; + outline: none; + background: #eee; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px rgba( 0, 0, 0, 0.4 ); +} + +.attachment .check div { + background-position: -1px 0; + height: 15px; + width: 15px; + margin: 5px; +} + +.attachment .check:hover div { + background-position: -40px 0; +} + +.attachment.selected .check { + display: block; +} + +.attachment.details { + box-shadow: 0 0 0 1px #fff, + 0 0 0 5px #1e8cbe; +} + +.attachment.details .check { + background-color: #1e8cbe; + box-shadow: 0 0 0 1px #fff, + 0 0 0 2px #1e8cbe; +} + +.attachment.details .check div { + background-position: -21px 0; +} + +.attachment.details .check:hover div { + background-position: -60px 0; +} + +.media-frame .attachment .describe { + position: relative; + display: block; + width: 100%; + margin: -1px 0 0; + padding: 8px; + font-size: 12px; + border-radius: 0; +} + +/** + * Attachments Browser + */ +.media-frame .attachments-browser { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; +} + +.attachments-browser .media-toolbar { + right: 300px; + height: 50px; +} + +.attachments-browser .media-toolbar-primary > .media-button, +.attachments-browser .media-toolbar-primary > .media-button-group, +.attachments-browser .media-toolbar-secondary > .media-button, +.attachments-browser .media-toolbar-secondary > .media-button-group { + margin-top: 10px; +} + +.attachments-browser .attachments, +.attachments-browser .uploader-inline { + position: absolute; + top: 50px; + left: 0; + right: 300px; + bottom: 0; + overflow: auto; +} + +.attachments-browser .instructions { + display: inline-block; + margin-top: 16px; + line-height: 18px; + font-size: 13px; + color: #666; +} + +/** + * Progress Bar + */ +.media-progress-bar { + position: relative; + height: 10px; + width: 70%; + margin: 10px auto; + border-radius: 10px; + background: #dfdfdf; + background: rgba( 0, 0, 0, 0.1 ); +} + +.media-progress-bar div { + height: 10px; + min-width: 20px; + width: 0; + background: #1e8cbe; + border-radius: 10px; + -webkit-transition: width 300ms; + -moz-transition: width 300ms; + -ms-transition: width 300ms; + -o-transition: width 300ms; + transition: width 300ms; +} + +.media-uploader-status .media-progress-bar { + display: none; + width: 100%; +} + +.uploading.media-uploader-status .media-progress-bar { + display: block; +} + +.attachment-preview .media-progress-bar { + position: absolute; + top: 50%; + left: 15%; + width: 70%; + margin: -5px 0 0 0; +} + +.media-uploader-status { + position: relative; + margin: 0 auto; + padding-bottom: 10px; + max-width: 400px; +} + +.media-sidebar .media-uploader-status { + border-bottom: 1px solid #dfdfdf; + box-shadow: 0 1px 0 #fff; +} + +.uploader-inline .media-uploader-status h3 { + display: none; +} + +.media-uploader-status .upload-details { + display: none; + font-size: 12px; + color: #666; +} + +.uploading.media-uploader-status .upload-details { + display: block; +} + +.media-uploader-status .upload-detail-separator { + padding: 0 4px; +} + +.media-uploader-status .upload-count { + color: #464646; +} + +.media-uploader-status .upload-dismiss-errors, +.media-uploader-status .upload-errors { + display: none; +} + +.errors.media-uploader-status .upload-dismiss-errors, +.errors.media-uploader-status .upload-errors { + display: block; +} + +.media-uploader-status .upload-dismiss-errors { + text-decoration: none; +} + +.media-sidebar .media-uploader-status .upload-dismiss-errors { + position: absolute; + top: 0; + right: 0; +} + +.upload-errors .upload-error { + margin: 8px auto 0 auto; + padding: 8px; + border: 1px #c00 solid; + background: #ffebe8; + border-radius: 3px; +} + +.upload-errors .upload-error-label { + padding: 2px 4px; + margin-right: 8px; + font-weight: bold; + color: #fff; + background: #e00; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e00), to(#a00)); + background-image: -webkit-linear-gradient(top, #e00, #a00); + background-image: -moz-linear-gradient(top, #e00, #a00); + background-image: -o-linear-gradient(top, #e00, #a00); + background-image: linear-gradient(to bottom, #e00, #a00); + border-radius: 3px; +} + +.upload-errors .upload-error-message { + display: block; + padding-top: 8px; + color: #b44; + word-wrap: break-word; +} + +.uploader-window { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba( 0, 86, 132, 0.9 ); + + z-index: 250000; + display: none; + text-align: center; + opacity: 0; + + -webkit-transition: opacity 250ms; + -moz-transition: opacity 250ms; + -ms-transition: opacity 250ms; + -o-transition: opacity 250ms; + transition: opacity 250ms; +} + +.uploader-window-content { + position: absolute; + top: 10px; + left: 10px; + right: 10px; + bottom: 10px; + border: 1px dashed #fff; +} + +.uploader-window h3 { + margin: -0.5em 0 0; + position: absolute; + top: 50%; + left: 0; + right: 0; + -webkit-transform: translateY( -50% ); + -moz-transform: translateY( -50% ); + -ms-transform: translateY( -50% ); + -o-transform: translateY( -50% ); + transform: translateY( -50% ); + + font-size: 40px; + color: #fff; + padding: 0; +} + +.uploader-window .media-progress-bar { + margin-top: 20px; + max-width: 300px; + background: transparent; + border-color: #fff; + display: none; +} + +.uploader-window .media-progress-bar div { + background: #fff; +} + +.uploading .uploader-window .media-progress-bar { + display: block; +} + +.media-frame .uploader-inline { + margin: 20px; + padding: 20px; + text-align: center; +} + +.uploader-inline-content { + position: absolute; + top: 30%; + left: 0; + right: 0; +} + +.uploader-inline-content .upload-ui { + margin: 4em 0; +} + +.uploader-inline-content .post-upload-ui { + margin-bottom: 2em; +} + +.uploader-inline .has-upload-message .upload-ui { + margin: 0 0 4em; +} + +.uploader-inline h3 { + font-size: 20px; + line-height: 28px; + font-weight: 400; + margin-bottom: 1.6em; +} + +.uploader-inline .has-upload-message .upload-instructions { + font-size: 14px; + color: #464646; + font-weight: normal; +} + +.uploader-inline .drop-instructions { + display: none; +} + +.supports-drag-drop .uploader-inline .drop-instructions { + display: block; +} + +.uploader-inline p { + font-size: 12px; +} + +.uploader-inline .media-progress-bar { + display: none; +} + +.uploading.uploader-inline .media-progress-bar { + display: block; +} + +.uploader-inline .browser { + display: inline-block !important; +} + +/** + * Selection + */ +.media-selection { + position: absolute; + top: 0; + left: 0; + right: 350px; + height: 60px; + padding: 0 0 0 16px; + overflow: hidden; + white-space: nowrap; +} + +.media-selection .selection-info { + display: inline-block; + font-size: 12px; + height: 60px; + margin-right: 10px; + vertical-align: top; +} + +.media-selection.empty, +.media-selection.editing { + display: none; +} + +.media-selection.one .edit-selection { + display: none; +} + +.media-selection .count { + display: block; + padding-top: 12px; + font-size: 14px; + line-height: 20px; + font-weight: bold; +} + +.media-selection .selection-info a { + display: block; + float: left; + padding: 1px 8px; + margin: 1px 8px 1px -8px; + line-height: 16px; + text-decoration: none; + border-right: 1px solid #dfdfdf; + color: #21759B; +} + +.media-selection .selection-info a:hover { + background: #21759B; + color: #fff; + border-color: transparent; +} + +.media-selection .selection-info a:last-child { + border-right: 0; + margin-right: 0; +} + +.media-selection .selection-info .clear-selection { + color: red; +} + +.media-selection .selection-info .clear-selection:hover { + background: red; +} + +.media-selection .selection-view { + display: inline-block; + vertical-align: top; +} + +.media-selection .attachments { + display: inline-block; + height: 48px; + margin-top: 5px; + overflow: hidden; + vertical-align: top; +} + +.media-selection .attachment .icon { + width: 50%; +} + +.attachment.selection.selected { + box-shadow: none; +} + +.attachment.selection.details { + box-shadow: + 0 0 0 1px #fff, + 0 0 0 4px #1e8cbe; +} + +.media-selection .attachment.selection.details { + box-shadow: + 0 0 0 1px #fff, + 0 0 0 3px #1e8cbe; +} + +.media-selection:after { + content: ''; + display: block; + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 25px; + background-image: -webkit-gradient(linear, right top, left top, from( rgba( 255, 255, 255, 1 ) ), to( rgba( 255, 255, 255, 0 ) )); + background-image: -webkit-linear-gradient(right, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) ); + background-image: -moz-linear-gradient(right, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) ); + background-image: -o-linear-gradient(right, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) ); + background-image: linear-gradient(to left, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) ); +} + +.media-selection .attachment .filename { + display: none; +} + +/** + * Spinner + */ + +.media-frame .spinner { + background: url('../images/spinner.gif') no-repeat; + background-size: 20px 20px; + display: none; + opacity: 0.7; + filter: alpha(opacity=70); + width: 20px; + height: 20px; + margin: 0; +} + +.media-sidebar .settings-save-status { + background: #f5f5f5; + float: right; + text-transform: none; + z-index: 10; +} + +.media-sidebar .settings-save-status .spinner { + margin: 0 5px 0; +} + +.media-sidebar .settings-save-status .saved { + float: right; + display: none; +} + +.media-sidebar .save-waiting .settings-save-status .spinner, +.media-sidebar .save-complete .settings-save-status .saved { + display: block; +} + +/** + * Attachment Details + */ +.attachment-details { + position: relative; + overflow: auto; +} + +.attachment-info { + overflow: hidden; + min-height: 60px; + margin-bottom: 16px; + line-height: 18px; + color: #666; + border-bottom: 1px solid #e5e5e5; + box-shadow: 0 1px 0 #fff; + padding-bottom: 11px; +} + +.attachment-info .filename { + font-weight: bold; + color: #464646; + word-wrap: break-word; +} + +.attachment-info .thumbnail { + position: relative; + float: left; + max-width: 120px; + max-height: 120px; + margin-top: 5px; + margin-right: 10px; + margin-bottom: 5px; +} + +.uploading .attachment-info .thumbnail { + width: 120px; + height: 80px; + box-shadow: inset 0 0 15px rgba( 0, 0, 0, 0.1 ); +} + +.uploading .attachment-info .media-progress-bar { + margin-top: 35px; +} + +.attachment-info .thumbnail:after { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.15 ); + overflow: hidden; +} + +.attachment-info .thumbnail img { + display: block; + max-width: 120px; + max-height: 120px; + margin: 0 auto; +} + +.attachment-info .details { + float: left; + font-size: 12px; + max-width: 100%; +} + +.attachment-info .edit-attachment, +.attachment-info .refresh-attachment, +.attachment-info .delete-attachment { + display: block; + text-decoration: none; + white-space: nowrap; +} + +.attachment-info .refresh-attachment, +.attachment-details.needs-refresh .attachment-info .edit-attachment { + display: none; +} + +.attachment-details.needs-refresh .attachment-info .refresh-attachment, +.attachment-info .edit-attachment { + display: block; +} + +.attachment-info .delete-attachment { + color: #bc0b0b; +} + +.attachment-info .delete-attachment:hover { + color: red; +} + +/** + * Attachment Display Settings + */ +.attachment-display-settings { + width: 100%; + float: left; + overflow: hidden; +} + +.attachment-display-settings h4 { + margin: 1.4em 0 0.4em; +} + +.gallery-settings { + overflow: hidden; +} + +/** + * Embed from URL + */ +.embed-url { + display: block; + position: relative; + padding: 16px; + margin: 0; + z-index: 250; + background: #fff; + font-size: 18px; +} + +.media-frame .embed-url input { + font-size: 18px; + padding: 12px 14px; + width: 100%; + min-width: 200px; + box-shadow: inset 2px 2px 4px -2px rgba( 0, 0, 0, 0.1 ); +} + +.media-frame .embed-url .spinner { + position: absolute; + top: 16px; + right: 26px; +} + +.media-frame .embed-loading .embed-url .spinner { + display: block; +} + +.embed-link-settings, +.embed-image-settings { + position: absolute; + top: 60px; + left: 0; + right: 0; + bottom: 0; + padding: 16px 16px 32px; + overflow: auto; +} + +.media-embed .thumbnail { + max-width: 100%; + max-height: 200px; + position: relative; + float: left; +} + +.media-embed .thumbnail img { + max-height: 200px; + display: block; +} + +.media-embed .thumbnail:after { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.1 ); + overflow: hidden; +} + +.media-embed .setting { + width: 100%; + margin-top: 10px; + float: left; + display: block; + clear: both; +} + +.media-embed .setting span { + display: block; + width: 200px; + font-size: 13px; + line-height: 24px; + color: #666; +} + +.media-embed .setting .button-group { + margin: 2px 0; +} + +.media-embed .setting input, +.media-embed .setting textarea { + display: block; + width: 100%; + max-width: 400px; + margin: 1px 0; +} + +/** + * IE7 Fixes + */ +.ie7 .media-frame .attachments-browser { + position: static; +} + +.ie7 .media-frame .embed-url input { + margin-top: 4px; + width: 90%; +} + +.ie7 .compat-item { + width: 99%; +} + +.ie7 .attachment-display-settings { + width: auto; +} + +.ie7 .attachment-preview, +.ie7 .attachment-preview .thumbnail { + width: 120px; + height: 120px; +} + +.ie7 .media-frame .attachment .describe { + width: 102px; +} + +.ie7 .media-sidebar .setting select { + max-width: 55%; +} + +.ie7 .media-sidebar .setting input, +.ie7 .media-sidebar .setting textarea { + width: 55%; +} + +.ie7 .media-sidebar .setting .link-to-custom { + float: left; +} + +/** + * Localization + */ +.rtl .media-modal, +.rtl .media-frame, +.rtl .media-frame .search, +.rtl .media-frame input[type="text"], +.rtl .media-frame input[type="password"], +.rtl .media-frame input[type="number"], +.rtl .media-frame input[type="search"], +.rtl .media-frame input[type="email"], +.rtl .media-frame input[type="url"], +.rtl .media-frame textarea, +.rtl .media-frame select { + font-family: Tahoma, sans-serif; +} + +:lang(he-il) .rtl .media-modal, +:lang(he-il) .rtl .media-frame, +:lang(he-il) .rtl .media-frame .search, +:lang(he-il) .rtl .media-frame input[type="text"], +:lang(he-il) .rtl .media-frame input[type="password"], +:lang(he-il) .rtl .media-frame input[type="number"], +:lang(he-il) .rtl .media-frame input[type="search"], +:lang(he-il) .rtl .media-frame input[type="email"], +:lang(he-il) .rtl .media-frame input[type="url"], +:lang(he-il) .rtl .media-frame textarea, +:lang(he-il) .rtl .media-frame select { + font-family: Arial, sans-serif; +} + + + + +@media only screen and (max-width: 960px) { + .media-frame-content .media-toolbar-primary .search, + .media-frame-content .media-toolbar-secondary .attachment-filters { + max-width: 120px; + } +} + +/** + * Responsive layout + */ +@media only screen and (max-width: 900px) { + .media-frame-menu { + width: 139px; + } + + .media-menu > a { + padding: 4px 5px; + } + + .media-frame-title, + .media-frame-router, + .media-frame-content, + .media-frame-toolbar { + left: 140px; + } + + .media-sidebar { + width: 159px; + padding: 0 10px 24px; + } + + .attachments-browser .attachments, + .attachments-browser .uploader-inline, + .attachments-browser .media-toolbar { + right: 180px; + } + + .media-sidebar .setting input, + .media-sidebar .setting textarea, + .media-sidebar .setting span, + .compat-item label span { + float: none; + } + + .media-sidebar .setting span, + .compat-item label span { + text-align: inherit; + display: block; + min-height: 16px; + margin: 0; + padding: 8px 2px 0; + } + + .media-sidebar .setting input, + .media-sidebar .setting textarea, + .media-sidebar .setting select { + width: 98%; + max-width: none; + } + + .media-sidebar .setting select.columns { + width: auto; + } + + .media-frame input, + .media-frame textarea, + .media-frame .search { + padding: 3px 6px; + } + + .media-frame-content .attachment .icon { + top: 40%; + } + + .media-selection { + min-width: 120px; + } + + .media-selection:after { + background: none; + } + + .media-selection .attachments { + display: none; + } + + .media-menu .separator { + margin: 12px 10px; + } + + .media-modal-close { + right: 10px; + } + + /* Text inputs need to be 16px, or they force zooming on iOS */ + .media-frame input[type="text"], + .media-frame input[type="password"], + .media-frame input[type="number"], + .media-frame input[type="search"], + .media-frame input[type="email"], + .media-frame input[type="url"], + .media-frame textarea, + .media-frame select { + font-size: 16px; + } +} + +/* Responsive on portrait and landscape */ +@media only screen and (max-width: 640px), screen and (max-height: 400px) { + + /* Media tabs on the top */ + .media-frame-content .media-toolbar .instructions { + display: none; + } + + .media-frame-menu { + width: auto; + bottom: auto; + right: 0; + height: 60px; + } + + .media-menu { + border-right: none; + position: relative; + border-bottom: 1px solid #dddddd; + overflow: hidden; + padding: 10px 0 10px 10px; + } + + .media-menu a { + float: left; + width: 42%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } + + .media-frame-title { + display: none; + } + + .media-frame-toolbar { + position: absolute; + bottom: 0px; + left: 0; + right: 0; + background: #FFF; + border-top: 1px solid #DEDEDE; + } + + .media-toolbar { + position: relative; + } + + .media-frame { + overflow: hidden; + } + + .attachments-browser .attachments { + top: 42px; + } + + .attachment-details h3 { + margin-top: 45px; + } + + /* Shorten right-side links so they don't overlap the close button */ + .media-menu a:nth-child(2), + .media-menu a:last-child { + width: 40%; + } + + .media-menu .separator { + display: none; + } + + .media-frame-title { + top: 72px; + left: auto; + height: auto; + } + + .media-frame-title h1 { + line-height: 3; + font-size: 18px; + } + + .media-frame-router { + top: 84px; + left: 0; + } + + .media-frame-content { + left: 0; + top: 118px; + } + + .media-frame .attachments-browser { + padding-bottom: 300px; + } + + .media-sidebar { + border-bottom: 1px solid #dddddd; + } + + .media-modal { + width: auto; + } + + .media-toolbar-primary, .media-toolbar-secondary { + height: auto; + } + + .uploader-inline h3 { + margin: 0 0 .8em 0; + } + + .uploader-inline-content { + top: auto; + } + + .uploader-inline-content .upload-ui { + margin: 0; + } + + .attachments-browser .attachments, .attachments-browser .uploader-inline { + position: relative; + margin-right: 180px; + } + + /* Full-bleed modal */ + .media-modal { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + } + + .media-modal-backdrop { + position: fixed; + } + + .attachments-browser .attachment, + .attachments-browser .attachment-preview { + max-width: 100%; + } + + .attachments-browser .media-toolbar-primary input.search { + max-width: 150px; + } + + .uploader-inline-content { + position: relative; + } + + .media-sidebar .setting input[type="checkbox"], + .media-sidebar .field input[type="checkbox"] { + width: 25px; + } + + /* Image From Link */ + .embed-link-settings, + .embed-image-settings { + padding-bottom: 52px; + } + + /* Gallery */ + .media-frame.hide-router .media-frame-content { + top: 73px; + border-top: none; + } + + .gallery-settings h3 { + margin-top: 45px; + } + +} + +/* Landscape specific header override */ +@media screen and (max-height: 400px) { + .media-menu { + padding: 0 0 0 10px; + } + + .media-menu a { + float: left; + width: 21%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + padding: 10px inherit; + } + + .media-menu a:nth-child(2), + .media-menu a:last-child { + width: 21%; + } + + .media-modal-close { + top: 2px; + } + + .media-frame-router { + top: 44px; + } + + .media-frame-content { + top: 78px; + } + + .attachments-browser .attachments { + top: 2px; + } + + /* Prevent unnecessary scrolling on title input */ + .embed-link-settings { + overflow: visible; + } +} + +@media only screen and (max-width: 680px) { + .media-frame-content .media-toolbar .search, + .media-frame-content .media-toolbar .attachment-filters { + max-width: 85px; + } +} + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .media-modal-icon { + background-image: url(../images/uploader-icons-2x.png); + background-size: 134px 15px; + } + + .media-frame .spinner { + background-image: url('../images/spinner-2x.gif'); + } +} \ No newline at end of file diff --git a/src/wp-includes/css/media-views.min.css b/src/wp-includes/css/media-views.min.css new file mode 100644 index 0000000..2eef061 --- /dev/null +++ b/src/wp-includes/css/media-views.min.css @@ -0,0 +1 @@ +.media-modal *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.media-modal,.media-frame{font-family:"Open Sans",sans-serif;font-size:12px}.media-frame input,.media-frame textarea{padding:6px 8px;line-height:16px}.media-frame select,.wp-admin .media-frame select{line-height:28px;margin-top:3px}.media-frame a{border-bottom:0;color:#21759b}.media-frame a:hover{color:#d54e21}.media-frame a.button{color:#333}.media-frame a.button:hover{color:#222}.media-frame a.button-primary,.media-frame a.button-primary:hover{color:#fff}.media-frame input[type=text],.media-frame input[type=password],.media-frame input[type=number],.media-frame input[type=search],.media-frame input[type=email],.media-frame input[type=url],.media-frame textarea,.media-frame select{font-family:"Open Sans",sans-serif;font-size:12px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;border-width:1px;border-style:solid;border-color:#dfdfdf}.media-frame select{height:24px;padding:2px}.media-frame input:disabled,.media-frame textarea:disabled,.media-frame input[readonly],.media-frame textarea[readonly]{background-color:#eee}.media-frame input[type=search]{-webkit-appearance:textfield}.media-frame :-moz-placeholder{color:#a9a9a9}.ui-sortable,.ui-draggable{-ms-touch-action:none;touch-action:none}.meta-box-sortables.ui-sortable{-ms-touch-action:auto;touch-action:auto}.meta-box-sortables.ui-sortable .hndle{-ms-touch-action:none;touch-action:none}.media-modal{position:fixed;top:30px;left:30px;right:30px;bottom:30px;z-index:160000}.wp-customizer .media-modal{z-index:560000}.media-modal-backdrop{position:fixed;top:0;left:0;right:0;bottom:0;min-height:360px;background:#000;opacity:.7;z-index:159900}.wp-customizer .media-modal-backdrop{z-index:559900}.media-modal-close{position:absolute;text-decoration:none;top:5px;right:10px;width:30px;height:30px;z-index:1000}.media-modal-close span.media-modal-icon{display:block;margin:8px auto 0;width:15px;height:15px;background-image:none}.media-modal-close .media-modal-icon:before{content:'\f158';font:400 20px/1 dashicons;speak:none;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#666}.media-modal-close:hover .media-modal-icon:before{color:#2ea2cc}.media-modal-close:active{outline:0}.media-modal-content{position:absolute;top:0;left:0;right:0;bottom:0;overflow:auto;min-height:300px;box-shadow:0 5px 15px rgba(0,0,0,.7);background:#fcfcfc;-webkit-font-smoothing:subpixel-antialiased}.media-modal-icon{background-image:url(../images/uploader-icons.png);background-repeat:no-repeat}.media-toolbar{position:absolute;top:0;left:0;right:0;z-index:100;height:60px;padding:0 16px;border:0 solid #dfdfdf;overflow:hidden}.media-toolbar-primary{float:right;height:100%}.media-toolbar-secondary{float:left;height:100%}.media-toolbar-primary>.media-button,.media-toolbar-primary>.media-button-group{margin-left:10px;float:left;margin-top:15px}.media-toolbar-secondary>.media-button,.media-toolbar-secondary>.media-button-group{margin-right:10px;float:left;margin-top:15px}.media-sidebar{position:absolute;top:0;right:0;bottom:0;width:267px;padding:0 16px 24px;z-index:75;background:#f3f3f3;border-left:1px solid #ddd;overflow:auto;-webkit-overflow-scrolling:touch}.hide-toolbar .media-sidebar{bottom:0}.media-sidebar .sidebar-title{font-size:20px;margin:0;padding:12px 10px 10px;line-height:28px}.media-sidebar .sidebar-content{padding:0 10px;margin-bottom:130px}.media-sidebar .search{display:block;width:100%}.media-sidebar h3{position:relative;font-weight:700;text-transform:uppercase;font-size:12px;color:#666;margin:24px 0 8px}.media-sidebar .setting{display:block;float:left;width:100%;margin:1px 0}.media-sidebar .setting label{display:block}.media-sidebar .setting .link-to-custom{margin:3px 0}.media-sidebar .setting span{min-width:30%;margin-right:4%;font-size:12px}.media-sidebar .setting select{max-width:65%}.media-sidebar .setting input[type=checkbox],.media-sidebar .field input[type=checkbox]{width:16px;float:none;margin:8px 3px 0;padding:0}.media-sidebar .setting span,.compat-item label span{float:left;min-height:22px;padding-top:8px;line-height:16px;text-align:right;font-weight:400;color:#666}.media-sidebar .setting input,.media-sidebar .setting textarea{margin:1px;width:65%;float:right}.media-sidebar .setting textarea,.compat-item .field textarea{height:62px;resize:vertical}.media-sidebar select{margin-top:3px}.compat-item{float:left;width:100%;overflow:hidden}.compat-item table{width:100%;table-layout:fixed;border-spacing:0;border:0}.compat-item tr{padding:2px 0;display:block;overflow:hidden}.compat-item .label,.compat-item .field{display:block;margin:0;padding:0}.compat-item .label{min-width:30%;margin-right:4%;float:left;text-align:right}.compat-item .label span{display:block;width:100%}.compat-item .field{float:right;width:66%}.compat-item .field input{width:100%;margin:0}.media-menu{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:16px 0;background:#f3f3f3;border-right-width:1px;border-right-style:solid;border-right-color:#ccc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.media-menu>a{display:block;position:relative;padding:8px 20px;margin:0;line-height:18px;font-size:14px;color:#0074a2;text-decoration:none}.media-menu>a:hover{color:#21759B;background:rgba(0,0,0,.04)}.media-menu>a:active{outline:0}.media-menu .active,.media-menu .active:hover{color:#222;font-weight:700}.media-menu .separator{height:0;margin:12px 20px;padding:0;border-top:1px solid #ddd}.media-router{position:relative;padding:0 6px;margin:0;clear:both;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.media-router>a{position:relative;float:left;padding:8px 10px 9px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none}.media-router>a:last-child{border-right:0}.media-router>a:active,.media-router>a:focus{outline:0}.media-router .active,.media-router .active:hover{color:#333}.media-router .active,.media-router>a.active:last-child{margin:-1px -1px 0;background:#fff;border:1px solid #ddd;border-bottom:0}.media-router .active:after{display:none}.media-frame{overflow:hidden;position:absolute;top:0;left:0;right:0;bottom:0}.media-frame-menu{position:absolute;top:0;left:0;bottom:0;width:199px;z-index:150}.media-frame-title{position:absolute;top:0;left:200px;right:0;height:56px;z-index:200}.media-frame-router{position:absolute;top:56px;left:200px;right:0;height:36px;z-index:200}.media-frame-content{position:absolute;top:90px;left:200px;right:0;bottom:61px;height:auto;width:auto;margin:0;overflow:auto;background:#fff;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.media-frame-toolbar{position:absolute;left:200px;right:0;bottom:0;height:60px;z-index:100}.media-frame.hide-menu .media-frame-title,.media-frame.hide-menu .media-frame-router,.media-frame.hide-menu .media-frame-toolbar,.media-frame.hide-menu .media-frame-content{left:0}.media-frame.hide-menu .media-frame-menu{left:-200px}.media-frame.hide-toolbar .media-frame-content{bottom:0}.media-frame.hide-toolbar .media-frame-toolbar{bottom:-61px}.media-frame.hide-router .media-frame-content{top:56px}.media-frame.hide-router .media-frame-router{display:none}.media-frame.hide-router .media-frame-title{border-bottom:1px solid #dfdfdf;box-shadow:0 4px 4px -4px rgba(0,0,0,.1)}.media-frame .media-toolbar .add-to-gallery{display:none}.media-frame-title h1{padding:0 16px;font-size:22px;line-height:60px;margin:0}.media-frame .media-iframe{overflow:hidden}.media-frame .media-iframe,.media-frame .media-iframe iframe{height:100%;width:100%;border:0}.media-frame select.attachment-filters{margin-top:11px;margin-right:10px}.media-frame .search{margin-top:11px;padding:4px;line-height:18px;font-size:13px;color:#464646;font-family:"Open Sans",sans-serif;-webkit-appearance:none}.media-toolbar-secondary .search{margin-right:16px}.attachments{margin:0;padding-right:16px;-webkit-overflow-scrolling:touch}.attachment{position:relative;float:left;padding:0;margin:0 10px 20px;color:#464646;list-style:none;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.selected.attachment{box-shadow:0 0 0 1px #fff,0 0 0 3px #ccc}.attachment-preview{position:relative;width:199px;height:199px;box-shadow:inset 0 0 15px rgba(0,0,0,.1),inset 0 0 0 1px rgba(0,0,0,.05);background:#eee;cursor:pointer}.attachment .icon{margin:0 auto;overflow:hidden;padding-top:20%}.attachment .thumbnail{display:block;position:absolute;top:0;left:0;margin:0 auto;overflow:hidden;max-width:100%;max-height:100%}.attachment-preview .thumbnail:after{content:'';display:block;position:absolute;top:0;left:0;right:0;bottom:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}.attachment .thumbnail img{top:0;left:0}.attachment .thumbnail .centered{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-transform:translate(50%,50%);-moz-transform:translate(50%,50%);-ms-transform:translate(50%,50%);-o-transform:translate(50%,50%);transform:translate(50%,50%)}.attachment .thumbnail .centered img{-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.attachment .filename{position:absolute;left:0;right:0;bottom:0;overflow:hidden;max-height:100%;word-wrap:break-word;text-align:center;font-weight:700;background:rgba(255,255,255,.8);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}.attachment .filename div{padding:5px 10px}.attachment-preview .thumbnail{width:199px;height:199px}.attachment .thumbnail img{position:absolute}.attachment .close{display:none;position:absolute;top:5px;right:5px;height:22px;width:22px;padding:0;font-size:20px;line-height:20px;text-align:center;text-decoration:none;color:#464646;background-color:#fff;background-position:-96px 4px;border-width:0;border-radius:3px;box-shadow:0 0 0 1px rgba(0,0,0,.3)}.attachment .close:hover{box-shadow:0 0 0 1px rgba(0,0,0,.6)}.attachment:hover .close{display:block}.attachment .check{display:none;height:24px;width:24px;position:absolute;top:-6px;right:-6px;outline:0;background:#eee;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment .check div{background-position:-1px 0;height:15px;width:15px;margin:5px}.attachment .check:hover div{background-position:-40px 0}.attachment.selected .check{display:block}.attachment.details{box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment.details .check{background-color:#1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.attachment.details .check div{background-position:-21px 0}.attachment.details .check:hover div{background-position:-60px 0}.media-frame .attachment .describe{position:relative;display:block;width:100%;margin:-1px 0 0;padding:8px;font-size:12px;border-radius:0}.media-frame .attachments-browser{position:relative;width:100%;height:100%;overflow:hidden}.attachments-browser .media-toolbar{right:300px;height:50px}.attachments-browser .media-toolbar-primary>.media-button,.attachments-browser .media-toolbar-primary>.media-button-group,.attachments-browser .media-toolbar-secondary>.media-button,.attachments-browser .media-toolbar-secondary>.media-button-group{margin-top:10px}.attachments-browser .attachments,.attachments-browser .uploader-inline{position:absolute;top:50px;left:0;right:300px;bottom:0;overflow:auto}.attachments-browser .instructions{display:inline-block;margin-top:16px;line-height:18px;font-size:13px;color:#666}.media-progress-bar{position:relative;height:10px;width:70%;margin:10px auto;border-radius:10px;background:#dfdfdf;background:rgba(0,0,0,.1)}.media-progress-bar div{height:10px;min-width:20px;width:0;background:#1e8cbe;border-radius:10px;-webkit-transition:width 300ms;-moz-transition:width 300ms;-ms-transition:width 300ms;-o-transition:width 300ms;transition:width 300ms}.media-uploader-status .media-progress-bar{display:none;width:100%}.uploading.media-uploader-status .media-progress-bar{display:block}.attachment-preview .media-progress-bar{position:absolute;top:50%;left:15%;width:70%;margin:-5px 0 0 0}.media-uploader-status{position:relative;margin:0 auto;padding-bottom:10px;max-width:400px}.media-sidebar .media-uploader-status{border-bottom:1px solid #dfdfdf;box-shadow:0 1px 0 #fff}.uploader-inline .media-uploader-status h3{display:none}.media-uploader-status .upload-details{display:none;font-size:12px;color:#666}.uploading.media-uploader-status .upload-details{display:block}.media-uploader-status .upload-detail-separator{padding:0 4px}.media-uploader-status .upload-count{color:#464646}.media-uploader-status .upload-dismiss-errors,.media-uploader-status .upload-errors{display:none}.errors.media-uploader-status .upload-dismiss-errors,.errors.media-uploader-status .upload-errors{display:block}.media-uploader-status .upload-dismiss-errors{text-decoration:none}.media-sidebar .media-uploader-status .upload-dismiss-errors{position:absolute;top:0;right:0}.upload-errors .upload-error{margin:8px auto 0;padding:8px;border:1px #c00 solid;background:#ffebe8;border-radius:3px}.upload-errors .upload-error-label{padding:2px 4px;margin-right:8px;font-weight:700;color:#fff;background:#e00;background-image:-webkit-gradient(linear,left top,left bottom,from(#e00),to(#a00));background-image:-webkit-linear-gradient(top,#e00,#a00);background-image:-moz-linear-gradient(top,#e00,#a00);background-image:-o-linear-gradient(top,#e00,#a00);background-image:linear-gradient(to bottom,#e00,#a00);border-radius:3px}.upload-errors .upload-error-message{display:block;padding-top:8px;color:#b44;word-wrap:break-word}.uploader-window{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,86,132,.9);z-index:250000;display:none;text-align:center;opacity:0;-webkit-transition:opacity 250ms;-moz-transition:opacity 250ms;-ms-transition:opacity 250ms;-o-transition:opacity 250ms;transition:opacity 250ms}.uploader-window-content{position:absolute;top:10px;left:10px;right:10px;bottom:10px;border:1px dashed #fff}.uploader-window h3{margin:-.5em 0 0;position:absolute;top:50%;left:0;right:0;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);font-size:40px;color:#fff;padding:0}.uploader-window .media-progress-bar{margin-top:20px;max-width:300px;background:transparent;border-color:#fff;display:none}.uploader-window .media-progress-bar div{background:#fff}.uploading .uploader-window .media-progress-bar{display:block}.media-frame .uploader-inline{margin:20px;padding:20px;text-align:center}.uploader-inline-content{position:absolute;top:30%;left:0;right:0}.uploader-inline-content .upload-ui{margin:4em 0}.uploader-inline-content .post-upload-ui{margin-bottom:2em}.uploader-inline .has-upload-message .upload-ui{margin:0 0 4em}.uploader-inline h3{font-size:20px;line-height:28px;font-weight:400;margin-bottom:1.6em}.uploader-inline .has-upload-message .upload-instructions{font-size:14px;color:#464646;font-weight:400}.uploader-inline .drop-instructions{display:none}.supports-drag-drop .uploader-inline .drop-instructions{display:block}.uploader-inline p{font-size:12px}.uploader-inline .media-progress-bar{display:none}.uploading.uploader-inline .media-progress-bar{display:block}.uploader-inline .browser{display:inline-block!important}.media-selection{position:absolute;top:0;left:0;right:350px;height:60px;padding:0 0 0 16px;overflow:hidden;white-space:nowrap}.media-selection .selection-info{display:inline-block;font-size:12px;height:60px;margin-right:10px;vertical-align:top}.media-selection.empty,.media-selection.editing{display:none}.media-selection.one .edit-selection{display:none}.media-selection .count{display:block;padding-top:12px;font-size:14px;line-height:20px;font-weight:700}.media-selection .selection-info a{display:block;float:left;padding:1px 8px;margin:1px 8px 1px -8px;line-height:16px;text-decoration:none;border-right:1px solid #dfdfdf;color:#21759B}.media-selection .selection-info a:hover{background:#21759B;color:#fff;border-color:transparent}.media-selection .selection-info a:last-child{border-right:0;margin-right:0}.media-selection .selection-info .clear-selection{color:red}.media-selection .selection-info .clear-selection:hover{background:red}.media-selection .selection-view{display:inline-block;vertical-align:top}.media-selection .attachments{display:inline-block;height:48px;margin-top:5px;overflow:hidden;vertical-align:top}.media-selection .attachment .icon{width:50%}.attachment.selection.selected{box-shadow:none}.attachment.selection.details{box-shadow:0 0 0 1px #fff,0 0 0 4px #1e8cbe}.media-selection .attachment.selection.details{box-shadow:0 0 0 1px #fff,0 0 0 3px #1e8cbe}.media-selection:after{content:'';display:block;position:absolute;top:0;right:0;bottom:0;width:25px;background-image:-webkit-gradient(linear,right top,left top,from(rgba(255,255,255,1)),to(rgba(255,255,255,0)));background-image:-webkit-linear-gradient(right,rgba(255,255,255,1),rgba(255,255,255,0));background-image:-moz-linear-gradient(right,rgba(255,255,255,1),rgba(255,255,255,0));background-image:-o-linear-gradient(right,rgba(255,255,255,1),rgba(255,255,255,0));background-image:linear-gradient(to left,rgba(255,255,255,1),rgba(255,255,255,0))}.media-selection .attachment .filename{display:none}.media-frame .spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;display:none;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:0}.media-sidebar .settings-save-status{background:#f5f5f5;float:right;text-transform:none;z-index:10}.media-sidebar .settings-save-status .spinner{margin:0 5px}.media-sidebar .settings-save-status .saved{float:right;display:none}.media-sidebar .save-waiting .settings-save-status .spinner,.media-sidebar .save-complete .settings-save-status .saved{display:block}.attachment-details{position:relative;overflow:auto}.attachment-info{overflow:hidden;min-height:60px;margin-bottom:16px;line-height:18px;color:#666;border-bottom:1px solid #e5e5e5;box-shadow:0 1px 0 #fff;padding-bottom:11px}.attachment-info .filename{font-weight:700;color:#464646;word-wrap:break-word}.attachment-info .thumbnail{position:relative;float:left;max-width:120px;max-height:120px;margin-top:5px;margin-right:10px;margin-bottom:5px}.uploading .attachment-info .thumbnail{width:120px;height:80px;box-shadow:inset 0 0 15px rgba(0,0,0,.1)}.uploading .attachment-info .media-progress-bar{margin-top:35px}.attachment-info .thumbnail:after{content:'';display:block;position:absolute;top:0;left:0;right:0;bottom:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);overflow:hidden}.attachment-info .thumbnail img{display:block;max-width:120px;max-height:120px;margin:0 auto}.attachment-info .details{float:left;font-size:12px;max-width:100%}.attachment-info .edit-attachment,.attachment-info .refresh-attachment,.attachment-info .delete-attachment{display:block;text-decoration:none;white-space:nowrap}.attachment-info .refresh-attachment,.attachment-details.needs-refresh .attachment-info .edit-attachment{display:none}.attachment-details.needs-refresh .attachment-info .refresh-attachment,.attachment-info .edit-attachment{display:block}.attachment-info .delete-attachment{color:#bc0b0b}.attachment-info .delete-attachment:hover{color:red}.attachment-display-settings{width:100%;float:left;overflow:hidden}.attachment-display-settings h4{margin:1.4em 0 .4em}.gallery-settings{overflow:hidden}.embed-url{display:block;position:relative;padding:16px;margin:0;z-index:250;background:#fff;font-size:18px}.media-frame .embed-url input{font-size:18px;padding:12px 14px;width:100%;min-width:200px;box-shadow:inset 2px 2px 4px -2px rgba(0,0,0,.1)}.media-frame .embed-url .spinner{position:absolute;top:16px;right:26px}.media-frame .embed-loading .embed-url .spinner{display:block}.embed-link-settings,.embed-image-settings{position:absolute;top:60px;left:0;right:0;bottom:0;padding:16px 16px 32px;overflow:auto}.media-embed .thumbnail{max-width:100%;max-height:200px;position:relative;float:left}.media-embed .thumbnail img{max-height:200px;display:block}.media-embed .thumbnail:after{content:'';display:block;position:absolute;top:0;left:0;right:0;bottom:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}.media-embed .setting{width:100%;margin-top:10px;float:left;display:block;clear:both}.media-embed .setting span{display:block;width:200px;font-size:13px;line-height:24px;color:#666}.media-embed .setting .button-group{margin:2px 0}.media-embed .setting input,.media-embed .setting textarea{display:block;width:100%;max-width:400px;margin:1px 0}.ie7 .media-frame .attachments-browser{position:static}.ie7 .media-frame .embed-url input{margin-top:4px;width:90%}.ie7 .compat-item{width:99%}.ie7 .attachment-display-settings{width:auto}.ie7 .attachment-preview,.ie7 .attachment-preview .thumbnail{width:120px;height:120px}.ie7 .media-frame .attachment .describe{width:102px}.ie7 .media-sidebar .setting select{max-width:55%}.ie7 .media-sidebar .setting input,.ie7 .media-sidebar .setting textarea{width:55%}.ie7 .media-sidebar .setting .link-to-custom{float:left}.rtl .media-modal,.rtl .media-frame,.rtl .media-frame .search,.rtl .media-frame input[type=text],.rtl .media-frame input[type=password],.rtl .media-frame input[type=number],.rtl .media-frame input[type=search],.rtl .media-frame input[type=email],.rtl .media-frame input[type=url],.rtl .media-frame textarea,.rtl .media-frame select{font-family:Tahoma,sans-serif}:lang(he-il) .rtl .media-modal,:lang(he-il) .rtl .media-frame,:lang(he-il) .rtl .media-frame .search,:lang(he-il) .rtl .media-frame input[type=text],:lang(he-il) .rtl .media-frame input[type=password],:lang(he-il) .rtl .media-frame input[type=number],:lang(he-il) .rtl .media-frame input[type=search],:lang(he-il) .rtl .media-frame input[type=email],:lang(he-il) .rtl .media-frame input[type=url],:lang(he-il) .rtl .media-frame textarea,:lang(he-il) .rtl .media-frame select{font-family:Arial,sans-serif}@media only screen and (max-width:960px){.media-frame-content .media-toolbar-primary .search,.media-frame-content .media-toolbar-secondary .attachment-filters{max-width:120px}}@media only screen and (max-width:900px){.media-frame-menu{width:139px}.media-menu>a{padding:4px 5px}.media-frame-title,.media-frame-router,.media-frame-content,.media-frame-toolbar{left:140px}.media-sidebar{width:159px;padding:0 10px 24px}.attachments-browser .attachments,.attachments-browser .uploader-inline,.attachments-browser .media-toolbar{right:180px}.media-sidebar .setting input,.media-sidebar .setting textarea,.media-sidebar .setting span,.compat-item label span{float:none}.media-sidebar .setting span,.compat-item label span{text-align:inherit;display:block;min-height:16px;margin:0;padding:8px 2px 0}.media-sidebar .setting input,.media-sidebar .setting textarea,.media-sidebar .setting select{width:98%;max-width:none}.media-sidebar .setting select.columns{width:auto}.media-frame input,.media-frame textarea,.media-frame .search{padding:3px 6px}.media-frame-content .attachment .icon{top:40%}.media-selection{min-width:120px}.media-selection:after{background:0 0}.media-selection .attachments{display:none}.media-menu .separator{margin:12px 10px}.media-modal-close{right:10px}.media-frame input[type=text],.media-frame input[type=password],.media-frame input[type=number],.media-frame input[type=search],.media-frame input[type=email],.media-frame input[type=url],.media-frame textarea,.media-frame select{font-size:16px}}@media only screen and (max-width:640px),screen and (max-height:400px){.media-frame-content .media-toolbar .instructions{display:none}.media-frame-menu{width:auto;bottom:auto;right:0;height:60px}.media-menu{border-right:0;position:relative;border-bottom:1px solid #ddd;overflow:hidden;padding:10px 0 10px 10px}.media-menu a{float:left;width:42%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.media-frame-title{display:none}.media-frame-toolbar{position:absolute;bottom:0;left:0;right:0;background:#FFF;border-top:1px solid #DEDEDE}.media-toolbar{position:relative}.media-frame{overflow:hidden}.attachments-browser .attachments{top:42px}.attachment-details h3{margin-top:45px}.media-menu a:nth-child(2),.media-menu a:last-child{width:40%}.media-menu .separator{display:none}.media-frame-title{top:72px;left:auto;height:auto}.media-frame-title h1{line-height:3;font-size:18px}.media-frame-router{top:84px;left:0}.media-frame-content{left:0;top:118px}.media-frame .attachments-browser{padding-bottom:300px}.media-sidebar{border-bottom:1px solid #ddd}.media-modal{width:auto}.media-toolbar-primary,.media-toolbar-secondary{height:auto}.uploader-inline h3{margin:0 0 .8em}.uploader-inline-content{top:auto}.uploader-inline-content .upload-ui{margin:0}.attachments-browser .attachments,.attachments-browser .uploader-inline{position:relative;margin-right:180px}.media-modal{position:fixed;top:0;left:0;right:0;bottom:0}.media-modal-backdrop{position:fixed}.attachments-browser .attachment,.attachments-browser .attachment-preview{max-width:100%}.attachments-browser .media-toolbar-primary input.search{max-width:150px}.uploader-inline-content{position:relative}.media-sidebar .setting input[type=checkbox],.media-sidebar .field input[type=checkbox]{width:25px}.embed-link-settings,.embed-image-settings{padding-bottom:52px}.media-frame.hide-router .media-frame-content{top:73px;border-top:0}.gallery-settings h3{margin-top:45px}}@media screen and (max-height:400px){.media-menu{padding:0 0 0 10px}.media-menu a{float:left;width:21%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding:10px inherit}.media-menu a:nth-child(2),.media-menu a:last-child{width:21%}.media-modal-close{top:2px}.media-frame-router{top:44px}.media-frame-content{top:78px}.attachments-browser .attachments{top:2px}.embed-link-settings{overflow:visible}}@media only screen and (max-width:680px){.media-frame-content .media-toolbar .search,.media-frame-content .media-toolbar .attachment-filters{max-width:85px}}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.media-modal-icon{background-image:url(../images/uploader-icons-2x.png);background-size:134px 15px}.media-frame .spinner{background-image:url(../images/spinner-2x.gif)}} \ No newline at end of file diff --git a/src/wp-includes/css/wp-auth-check-rtl.css b/src/wp-includes/css/wp-auth-check-rtl.css new file mode 100644 index 0000000..dbb5fc8 --- /dev/null +++ b/src/wp-includes/css/wp-auth-check-rtl.css @@ -0,0 +1,98 @@ +/*------------------------------------------------------------------------------ + Interim login dialog +------------------------------------------------------------------------------*/ + +#wp-auth-check-wrap.hidden { + display: none; +} + +#wp-auth-check-wrap #wp-auth-check-bg { + position: fixed; + top: 0; + bottom: 0; + right: 0; + left: 0; + background: #000; + opacity: 0.5; + filter: alpha(opacity=50); + z-index: 1000000; +} + +#wp-auth-check-wrap #wp-auth-check { + position: fixed; + right: 50%; + overflow: hidden; + top: 40px; + bottom: 20px; + max-height: 415px; + width: 380px; + margin: 0 -190px 0 0; + padding: 30px 0 0; + background-color: #eee; + z-index: 1000001; + -webkit-box-shadow: 0 3px 6px rgba(0,0,0,0.3); + box-shadow: 0 3px 6px rgba(0,0,0,0.3); +} + +#wp-auth-check-wrap.fallback #wp-auth-check { + max-height: 180px; + overflow: auto; +} + +#wp-auth-check-wrap #wp-auth-check-form { + background: url(../images/wpspin-2x.gif) no-repeat center center; + background-size: 16px 16px; + height: 100%; +} + +#wp-auth-check-wrap #wp-auth-check-form iframe { + height: 100%; + width: 100%; + overflow: auto; +} + +#wp-auth-check-wrap .wp-auth-check-close { + position: absolute; + top: 8px; + left: 8px; + height: 22px; + width: 22px; + cursor: pointer; +} + +#wp-auth-check-wrap .wp-auth-check-close:before { + content: '\f158'; + display: block !important; + font: normal 20px/1 'dashicons'; + speak: none; + height: 22px; + margin: 2px 0; + text-align: center; + width: 22px; + color: #777; + -webkit-font-smoothing: antialiased !important; +} + +#wp-auth-check-wrap .wp-auth-check-close:hover:before { + color: #0074a2; +} + +#wp-auth-check-wrap .wp-auth-check-close:focus { + outline: 1px dotted #888; +} + +#wp-auth-check-wrap .wp-auth-fallback-expired { + outline: 0; +} + +#wp-auth-check-wrap .wp-auth-fallback { + font-size: 14px; + line-height: 21px; + padding: 0 25px; + display: none; +} + +#wp-auth-check-wrap.fallback .wp-auth-fallback, +#wp-auth-check-wrap.fallback .wp-auth-check-close { + display: block; +} \ No newline at end of file diff --git a/src/wp-includes/css/wp-auth-check-rtl.min.css b/src/wp-includes/css/wp-auth-check-rtl.min.css new file mode 100644 index 0000000..5c31002 --- /dev/null +++ b/src/wp-includes/css/wp-auth-check-rtl.min.css @@ -0,0 +1 @@ +#wp-auth-check-wrap.hidden{display:none}#wp-auth-check-wrap #wp-auth-check-bg{position:fixed;top:0;bottom:0;right:0;left:0;background:#000;opacity:.5;filter:alpha(opacity=50);z-index:1000000}#wp-auth-check-wrap #wp-auth-check{position:fixed;right:50%;overflow:hidden;top:40px;bottom:20px;max-height:415px;width:380px;margin:0 -190px 0 0;padding:30px 0 0;background-color:#eee;z-index:1000001;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3)}#wp-auth-check-wrap.fallback #wp-auth-check{max-height:180px;overflow:auto}#wp-auth-check-wrap #wp-auth-check-form{background:url(../images/wpspin-2x.gif) no-repeat center center;background-size:16px 16px;height:100%}#wp-auth-check-wrap #wp-auth-check-form iframe{height:100%;width:100%;overflow:auto}#wp-auth-check-wrap .wp-auth-check-close{position:absolute;top:8px;left:8px;height:22px;width:22px;cursor:pointer}#wp-auth-check-wrap .wp-auth-check-close:before{content:'\f158';display:block!important;font:400 20px/1 dashicons;speak:none;height:22px;margin:2px 0;text-align:center;width:22px;color:#777;-webkit-font-smoothing:antialiased!important}#wp-auth-check-wrap .wp-auth-check-close:hover:before{color:#0074a2}#wp-auth-check-wrap .wp-auth-check-close:focus{outline:1px dotted #888}#wp-auth-check-wrap .wp-auth-fallback-expired{outline:0}#wp-auth-check-wrap .wp-auth-fallback{font-size:14px;line-height:21px;padding:0 25px;display:none}#wp-auth-check-wrap.fallback .wp-auth-fallback,#wp-auth-check-wrap.fallback .wp-auth-check-close{display:block} \ No newline at end of file diff --git a/src/wp-includes/css/wp-auth-check.css b/src/wp-includes/css/wp-auth-check.css new file mode 100644 index 0000000..0421df2 --- /dev/null +++ b/src/wp-includes/css/wp-auth-check.css @@ -0,0 +1,98 @@ +/*------------------------------------------------------------------------------ + Interim login dialog +------------------------------------------------------------------------------*/ + +#wp-auth-check-wrap.hidden { + display: none; +} + +#wp-auth-check-wrap #wp-auth-check-bg { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: #000; + opacity: 0.5; + filter: alpha(opacity=50); + z-index: 1000000; +} + +#wp-auth-check-wrap #wp-auth-check { + position: fixed; + left: 50%; + overflow: hidden; + top: 40px; + bottom: 20px; + max-height: 415px; + width: 380px; + margin: 0 0 0 -190px; + padding: 30px 0 0; + background-color: #eee; + z-index: 1000001; + -webkit-box-shadow: 0 3px 6px rgba(0,0,0,0.3); + box-shadow: 0 3px 6px rgba(0,0,0,0.3); +} + +#wp-auth-check-wrap.fallback #wp-auth-check { + max-height: 180px; + overflow: auto; +} + +#wp-auth-check-wrap #wp-auth-check-form { + background: url(../images/wpspin-2x.gif) no-repeat center center; + background-size: 16px 16px; + height: 100%; +} + +#wp-auth-check-wrap #wp-auth-check-form iframe { + height: 100%; + width: 100%; + overflow: auto; +} + +#wp-auth-check-wrap .wp-auth-check-close { + position: absolute; + top: 8px; + right: 8px; + height: 22px; + width: 22px; + cursor: pointer; +} + +#wp-auth-check-wrap .wp-auth-check-close:before { + content: '\f158'; + display: block !important; + font: normal 20px/1 'dashicons'; + speak: none; + height: 22px; + margin: 2px 0; + text-align: center; + width: 22px; + color: #777; + -webkit-font-smoothing: antialiased !important; +} + +#wp-auth-check-wrap .wp-auth-check-close:hover:before { + color: #0074a2; +} + +#wp-auth-check-wrap .wp-auth-check-close:focus { + outline: 1px dotted #888; +} + +#wp-auth-check-wrap .wp-auth-fallback-expired { + outline: 0; +} + +#wp-auth-check-wrap .wp-auth-fallback { + font-size: 14px; + line-height: 21px; + padding: 0 25px; + display: none; +} + +#wp-auth-check-wrap.fallback .wp-auth-fallback, +#wp-auth-check-wrap.fallback .wp-auth-check-close { + display: block; +} \ No newline at end of file diff --git a/src/wp-includes/css/wp-auth-check.min.css b/src/wp-includes/css/wp-auth-check.min.css new file mode 100644 index 0000000..22f624c --- /dev/null +++ b/src/wp-includes/css/wp-auth-check.min.css @@ -0,0 +1 @@ +#wp-auth-check-wrap.hidden{display:none}#wp-auth-check-wrap #wp-auth-check-bg{position:fixed;top:0;bottom:0;left:0;right:0;background:#000;opacity:.5;filter:alpha(opacity=50);z-index:1000000}#wp-auth-check-wrap #wp-auth-check{position:fixed;left:50%;overflow:hidden;top:40px;bottom:20px;max-height:415px;width:380px;margin:0 0 0 -190px;padding:30px 0 0;background-color:#eee;z-index:1000001;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3)}#wp-auth-check-wrap.fallback #wp-auth-check{max-height:180px;overflow:auto}#wp-auth-check-wrap #wp-auth-check-form{background:url(../images/wpspin-2x.gif) no-repeat center center;background-size:16px 16px;height:100%}#wp-auth-check-wrap #wp-auth-check-form iframe{height:100%;width:100%;overflow:auto}#wp-auth-check-wrap .wp-auth-check-close{position:absolute;top:8px;right:8px;height:22px;width:22px;cursor:pointer}#wp-auth-check-wrap .wp-auth-check-close:before{content:'\f158';display:block!important;font:400 20px/1 dashicons;speak:none;height:22px;margin:2px 0;text-align:center;width:22px;color:#777;-webkit-font-smoothing:antialiased!important}#wp-auth-check-wrap .wp-auth-check-close:hover:before{color:#0074a2}#wp-auth-check-wrap .wp-auth-check-close:focus{outline:1px dotted #888}#wp-auth-check-wrap .wp-auth-fallback-expired{outline:0}#wp-auth-check-wrap .wp-auth-fallback{font-size:14px;line-height:21px;padding:0 25px;display:none}#wp-auth-check-wrap.fallback .wp-auth-fallback,#wp-auth-check-wrap.fallback .wp-auth-check-close{display:block} \ No newline at end of file diff --git a/src/wp-includes/css/wp-pointer-rtl.css b/src/wp-includes/css/wp-pointer-rtl.css new file mode 100644 index 0000000..552041b --- /dev/null +++ b/src/wp-includes/css/wp-pointer-rtl.css @@ -0,0 +1,197 @@ +.wp-pointer-content { + padding: 0 0 10px; + position: relative; + font-size: 13px; + background: #fff; + border: 1px solid #dfdfdf; + -webkit-box-shadow: 0 3px 6px rgba(0,0,0,0.075); + box-shadow: 0 3px 6px rgba(0,0,0,0.075); +} + +.wp-pointer-content h3 { + position: relative; + margin: -1px -1px 5px; + padding: 15px 60px 14px 18px; + border: 1px solid #3592b6; + border-bottom: none; + line-height: 1.4em; + font-size: 14px; + color: #fff; + background: #2ea2cc; +} + +.wp-pointer-content h3:before { + background: #fff; + border-radius: 50%; + color: #2ea2cc; + content: '\f227'; + font: normal 20px/1.6 'dashicons'; + position: absolute; + top: 8px; + right: 15px; + speak: none; + text-align: center; + width: 32px; + height: 32px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-pointer-content p { + padding: 0 15px; +} + +.wp-pointer-buttons { + margin: 0; + padding: 5px 15px; + overflow: auto; +} + +.wp-pointer-buttons a { + float: left; + display: inline-block; + text-decoration: none; +} + +.wp-pointer-buttons a.close { + padding-right: 3px; + position: relative; +} + +.wp-pointer-buttons a.close:before { + content: '\f153'; + display: block !important; + font: normal 13px/1 'dashicons'; + speak: none; + margin: 2px 0; + text-align: center; + -webkit-font-smoothing: antialiased !important; + width: 10px; + height: 100%; + position: absolute; + right: -12px; + top: 1px; +} + +/* The arrow base class must take up no space, even with transparent borders. */ +.wp-pointer-arrow, +.wp-pointer-arrow-inner { + position: absolute; + width: 0; + height: 0; +} + +.wp-pointer-arrow { + z-index: 10; + width: 0; + height: 0; + border: 0 solid transparent; +} + +.wp-pointer-arrow-inner { + z-index: 20; +} + +/* Make Room for the Arrow! */ +.wp-pointer-top, +.wp-pointer-undefined { + padding-top: 13px; +} + +.wp-pointer-bottom { + padding-bottom: 13px; +} + +/* @noflip */ +.wp-pointer-left { + padding-left: 13px; +} +/* @noflip */ +.wp-pointer-right { + padding-right: 13px; +} + +/* Base Size & Positioning */ +.wp-pointer-top .wp-pointer-arrow, +.wp-pointer-bottom .wp-pointer-arrow, +.wp-pointer-undefined .wp-pointer-arrow { + right: 50px; +} + +.wp-pointer-left .wp-pointer-arrow, +.wp-pointer-right .wp-pointer-arrow { + top: 50%; + margin-top: -15px; +} + +/* Arrow Sprite */ +.wp-pointer-top .wp-pointer-arrow, +.wp-pointer-undefined .wp-pointer-arrow { + top: 0; + border-width: 0 13px 13px 13px; + border-bottom-color: #3592b6; +} + +.wp-pointer-top .wp-pointer-arrow:before, +.wp-pointer-undefined .wp-pointer-arrow:before { + margin-right: -13px; + margin-top: -11px; + border: 13px solid transparent; + border-bottom-color: #2ea2cc; + display: block; + content: ' '; +} + +.wp-pointer-bottom .wp-pointer-arrow { + bottom: 0; + border-width: 13px 13px 0 13px; + border-top-color: #ccc; +} + +.wp-pointer-bottom .wp-pointer-arrow:before { + margin-right: -13px; + margin-top: -14px; + border: 13px solid transparent; + border-top-color: #fff; + display: block; + content: ' '; +} + +/* @noflip */ +.wp-pointer-left .wp-pointer-arrow { + left: 0; + border-width: 13px 13px 13px 0; + border-right-color: #ccc; +} + +.wp-pointer-left .wp-pointer-arrow:before { + margin-right: -12px; + margin-top: -13px; + border: 13px solid transparent; + border-left-color: #fff; + display: block; + content: ' '; +} + +/* @noflip */ +.wp-pointer-right .wp-pointer-arrow { + right:0; + border-width: 13px 0 13px 13px; + border-left-color: #ccc; +} + +.wp-pointer-right .wp-pointer-arrow:before { + margin-right: -14px; + margin-top: -13px; + border: 13px solid transparent; + border-right-color: #fff; + display: block; + content: ' '; +} + +/* Disable pointers at responsive sizes */ +@media screen and ( max-width: 782px ) { + .wp-pointer { + display: none; + } +} diff --git a/src/wp-includes/css/wp-pointer-rtl.min.css b/src/wp-includes/css/wp-pointer-rtl.min.css new file mode 100644 index 0000000..2256279 --- /dev/null +++ b/src/wp-includes/css/wp-pointer-rtl.min.css @@ -0,0 +1 @@ +.wp-pointer-content{padding:0 0 10px;position:relative;font-size:13px;background:#fff;border:1px solid #dfdfdf;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.075);box-shadow:0 3px 6px rgba(0,0,0,.075)}.wp-pointer-content h3{position:relative;margin:-1px -1px 5px;padding:15px 60px 14px 18px;border:1px solid #3592b6;border-bottom:0;line-height:1.4em;font-size:14px;color:#fff;background:#2ea2cc}.wp-pointer-content h3:before{background:#fff;border-radius:50%;color:#2ea2cc;content:'\f227';font:400 20px/1.6 dashicons;position:absolute;top:8px;right:15px;speak:none;text-align:center;width:32px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-pointer-content p{padding:0 15px}.wp-pointer-buttons{margin:0;padding:5px 15px;overflow:auto}.wp-pointer-buttons a{float:left;display:inline-block;text-decoration:none}.wp-pointer-buttons a.close{padding-right:3px;position:relative}.wp-pointer-buttons a.close:before{content:'\f153';display:block!important;font:400 13px/1 dashicons;speak:none;margin:2px 0;text-align:center;-webkit-font-smoothing:antialiased!important;width:10px;height:100%;position:absolute;right:-12px;top:1px}.wp-pointer-arrow,.wp-pointer-arrow-inner{position:absolute;width:0;height:0}.wp-pointer-arrow{z-index:10;width:0;height:0;border:0 solid transparent}.wp-pointer-arrow-inner{z-index:20}.wp-pointer-top,.wp-pointer-undefined{padding-top:13px}.wp-pointer-bottom{padding-bottom:13px}.wp-pointer-left{padding-left:13px}.wp-pointer-right{padding-right:13px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-bottom .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{right:50px}.wp-pointer-left .wp-pointer-arrow,.wp-pointer-right .wp-pointer-arrow{top:50%;margin-top:-15px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{top:0;border-width:0 13px 13px;border-bottom-color:#3592b6}.wp-pointer-top .wp-pointer-arrow:before,.wp-pointer-undefined .wp-pointer-arrow:before{margin-right:-13px;margin-top:-11px;border:13px solid transparent;border-bottom-color:#2ea2cc;display:block;content:' '}.wp-pointer-bottom .wp-pointer-arrow{bottom:0;border-width:13px 13px 0;border-top-color:#ccc}.wp-pointer-bottom .wp-pointer-arrow:before{margin-right:-13px;margin-top:-14px;border:13px solid transparent;border-top-color:#fff;display:block;content:' '}.wp-pointer-left .wp-pointer-arrow{left:0;border-width:13px 13px 13px 0;border-right-color:#ccc}.wp-pointer-left .wp-pointer-arrow:before{margin-right:-12px;margin-top:-13px;border:13px solid transparent;border-left-color:#fff;display:block;content:' '}.wp-pointer-right .wp-pointer-arrow{right:0;border-width:13px 0 13px 13px;border-left-color:#ccc}.wp-pointer-right .wp-pointer-arrow:before{margin-right:-14px;margin-top:-13px;border:13px solid transparent;border-right-color:#fff;display:block;content:' '}@media screen and (max-width:782px){.wp-pointer{display:none}} \ No newline at end of file diff --git a/src/wp-includes/css/wp-pointer.css b/src/wp-includes/css/wp-pointer.css new file mode 100644 index 0000000..b1fb5a9 --- /dev/null +++ b/src/wp-includes/css/wp-pointer.css @@ -0,0 +1,197 @@ +.wp-pointer-content { + padding: 0 0 10px; + position: relative; + font-size: 13px; + background: #fff; + border: 1px solid #dfdfdf; + -webkit-box-shadow: 0 3px 6px rgba(0,0,0,0.075); + box-shadow: 0 3px 6px rgba(0,0,0,0.075); +} + +.wp-pointer-content h3 { + position: relative; + margin: -1px -1px 5px; + padding: 15px 18px 14px 60px; + border: 1px solid #3592b6; + border-bottom: none; + line-height: 1.4em; + font-size: 14px; + color: #fff; + background: #2ea2cc; +} + +.wp-pointer-content h3:before { + background: #fff; + border-radius: 50%; + color: #2ea2cc; + content: '\f227'; + font: normal 20px/1.6 'dashicons'; + position: absolute; + top: 8px; + left: 15px; + speak: none; + text-align: center; + width: 32px; + height: 32px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-pointer-content p { + padding: 0 15px; +} + +.wp-pointer-buttons { + margin: 0; + padding: 5px 15px; + overflow: auto; +} + +.wp-pointer-buttons a { + float: right; + display: inline-block; + text-decoration: none; +} + +.wp-pointer-buttons a.close { + padding-left: 3px; + position: relative; +} + +.wp-pointer-buttons a.close:before { + content: '\f153'; + display: block !important; + font: normal 13px/1 'dashicons'; + speak: none; + margin: 2px 0; + text-align: center; + -webkit-font-smoothing: antialiased !important; + width: 10px; + height: 100%; + position: absolute; + left: -12px; + top: 1px; +} + +/* The arrow base class must take up no space, even with transparent borders. */ +.wp-pointer-arrow, +.wp-pointer-arrow-inner { + position: absolute; + width: 0; + height: 0; +} + +.wp-pointer-arrow { + z-index: 10; + width: 0; + height: 0; + border: 0 solid transparent; +} + +.wp-pointer-arrow-inner { + z-index: 20; +} + +/* Make Room for the Arrow! */ +.wp-pointer-top, +.wp-pointer-undefined { + padding-top: 13px; +} + +.wp-pointer-bottom { + padding-bottom: 13px; +} + +/* @noflip */ +.wp-pointer-left { + padding-left: 13px; +} +/* @noflip */ +.wp-pointer-right { + padding-right: 13px; +} + +/* Base Size & Positioning */ +.wp-pointer-top .wp-pointer-arrow, +.wp-pointer-bottom .wp-pointer-arrow, +.wp-pointer-undefined .wp-pointer-arrow { + left: 50px; +} + +.wp-pointer-left .wp-pointer-arrow, +.wp-pointer-right .wp-pointer-arrow { + top: 50%; + margin-top: -15px; +} + +/* Arrow Sprite */ +.wp-pointer-top .wp-pointer-arrow, +.wp-pointer-undefined .wp-pointer-arrow { + top: 0; + border-width: 0 13px 13px 13px; + border-bottom-color: #3592b6; +} + +.wp-pointer-top .wp-pointer-arrow:before, +.wp-pointer-undefined .wp-pointer-arrow:before { + margin-left: -13px; + margin-top: -11px; + border: 13px solid transparent; + border-bottom-color: #2ea2cc; + display: block; + content: ' '; +} + +.wp-pointer-bottom .wp-pointer-arrow { + bottom: 0; + border-width: 13px 13px 0 13px; + border-top-color: #ccc; +} + +.wp-pointer-bottom .wp-pointer-arrow:before { + margin-left: -13px; + margin-top: -14px; + border: 13px solid transparent; + border-top-color: #fff; + display: block; + content: ' '; +} + +/* @noflip */ +.wp-pointer-left .wp-pointer-arrow { + left: 0; + border-width: 13px 13px 13px 0; + border-right-color: #ccc; +} + +.wp-pointer-left .wp-pointer-arrow:before { + margin-left: -12px; + margin-top: -13px; + border: 13px solid transparent; + border-right-color: #fff; + display: block; + content: ' '; +} + +/* @noflip */ +.wp-pointer-right .wp-pointer-arrow { + right:0; + border-width: 13px 0 13px 13px; + border-left-color: #ccc; +} + +.wp-pointer-right .wp-pointer-arrow:before { + margin-left: -14px; + margin-top: -13px; + border: 13px solid transparent; + border-left-color: #fff; + display: block; + content: ' '; +} + +/* Disable pointers at responsive sizes */ +@media screen and ( max-width: 782px ) { + .wp-pointer { + display: none; + } +} diff --git a/src/wp-includes/css/wp-pointer.min.css b/src/wp-includes/css/wp-pointer.min.css new file mode 100644 index 0000000..1f405e1 --- /dev/null +++ b/src/wp-includes/css/wp-pointer.min.css @@ -0,0 +1 @@ +.wp-pointer-content{padding:0 0 10px;position:relative;font-size:13px;background:#fff;border:1px solid #dfdfdf;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.075);box-shadow:0 3px 6px rgba(0,0,0,.075)}.wp-pointer-content h3{position:relative;margin:-1px -1px 5px;padding:15px 18px 14px 60px;border:1px solid #3592b6;border-bottom:0;line-height:1.4em;font-size:14px;color:#fff;background:#2ea2cc}.wp-pointer-content h3:before{background:#fff;border-radius:50%;color:#2ea2cc;content:'\f227';font:400 20px/1.6 dashicons;position:absolute;top:8px;left:15px;speak:none;text-align:center;width:32px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-pointer-content p{padding:0 15px}.wp-pointer-buttons{margin:0;padding:5px 15px;overflow:auto}.wp-pointer-buttons a{float:right;display:inline-block;text-decoration:none}.wp-pointer-buttons a.close{padding-left:3px;position:relative}.wp-pointer-buttons a.close:before{content:'\f153';display:block!important;font:400 13px/1 dashicons;speak:none;margin:2px 0;text-align:center;-webkit-font-smoothing:antialiased!important;width:10px;height:100%;position:absolute;left:-12px;top:1px}.wp-pointer-arrow,.wp-pointer-arrow-inner{position:absolute;width:0;height:0}.wp-pointer-arrow{z-index:10;width:0;height:0;border:0 solid transparent}.wp-pointer-arrow-inner{z-index:20}.wp-pointer-top,.wp-pointer-undefined{padding-top:13px}.wp-pointer-bottom{padding-bottom:13px}.wp-pointer-left{padding-left:13px}.wp-pointer-right{padding-right:13px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-bottom .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{left:50px}.wp-pointer-left .wp-pointer-arrow,.wp-pointer-right .wp-pointer-arrow{top:50%;margin-top:-15px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{top:0;border-width:0 13px 13px;border-bottom-color:#3592b6}.wp-pointer-top .wp-pointer-arrow:before,.wp-pointer-undefined .wp-pointer-arrow:before{margin-left:-13px;margin-top:-11px;border:13px solid transparent;border-bottom-color:#2ea2cc;display:block;content:' '}.wp-pointer-bottom .wp-pointer-arrow{bottom:0;border-width:13px 13px 0;border-top-color:#ccc}.wp-pointer-bottom .wp-pointer-arrow:before{margin-left:-13px;margin-top:-14px;border:13px solid transparent;border-top-color:#fff;display:block;content:' '}.wp-pointer-left .wp-pointer-arrow{left:0;border-width:13px 13px 13px 0;border-right-color:#ccc}.wp-pointer-left .wp-pointer-arrow:before{margin-left:-12px;margin-top:-13px;border:13px solid transparent;border-right-color:#fff;display:block;content:' '}.wp-pointer-right .wp-pointer-arrow{right:0;border-width:13px 0 13px 13px;border-left-color:#ccc}.wp-pointer-right .wp-pointer-arrow:before{margin-left:-14px;margin-top:-13px;border:13px solid transparent;border-left-color:#fff;display:block;content:' '}@media screen and (max-width:782px){.wp-pointer{display:none}} \ No newline at end of file diff --git a/src/wp-includes/date.php b/src/wp-includes/date.php new file mode 100644 index 0000000..0c42766 --- /dev/null +++ b/src/wp-includes/date.php @@ -0,0 +1,449 @@ +', '>=', '<', '<=', 'IN', 'NOT IN', + * 'BETWEEN', 'NOT BETWEEN'. + * @type string $relation Optional. The boolean relationship between the date queryies. + * Default 'OR'. Accepts 'OR', 'AND'. + * @type array { + * @type string|array $before Optional. Date to retrieve posts before. Accepts strtotime()-compatible + * string, or array of 'year', 'month', 'day' values. { + * + * @type string $year The four-digit year. Default empty. Accepts any four-digit year. + * @type string $month Optional when passing array.The month of the year. + * Default (string:empty)|(array:1). Accepts numbers 1-12. + * @type string $day Optional when passing array.The day of the month. + * Default (string:empty)|(array:1). Accepts numbers 1-31. + * } + * @type string|array $after Optional. Date to retrieve posts before. Accepts strtotime()-compatible + * string, or array of 'year', 'month', 'day' values. { + * + * @type string $year The four-digit year. Default empty. Accepts any four-digit year. + * @type string $month Optional when passing array.The month of the year. + * Default (string:empty)|(array:12). Accepts numbers 1-12. + * @type string $day Optional when passing array.The day of the month. + * Default (string:empty)|(array:last day of month). Accepts numbers 1-31. + * } + * @type string $column Optional. Used to add a clause comparing a column other than the column + * specified in the top-level $column paramater. Default is the value + * of top-level $column. Accepts 'post_date', 'post_date_gmt', + * 'post_modified', 'post_modified_gmt', 'comment_date', 'comment_date_gmt'. + * @type string $compare Optional. The comparison operator. Default '='. Accepts '=', '!=', + * '>', '>=', '<', '<=', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'. + * @type bool $inclusive Optional. Include results from dates specified in 'before' or 'after'. + * Default. Accepts. + * @type int $year Optional. The four-digit year number. Default empty. Accepts any + * four-digit year. + * @type int $month Optional. The two-digit month number. Default empty. Accepts numbers 1-12. + * @type int $week Optional. The week number of the year. Default empty. Accepts numbers 0-53. + * @type int $dayofyear Optional. The day number of the year. Default empty. Accepts numbers 1-366. + * @type int $day Optional. The day of the month. Default empty. Accepts numbers 1-31. + * @type int $dayofweek Optional. The day number of the week. Default empty. Accepts numbers 1-7. + * @type int $hour Optional. The hour of the day. Default empty. Accepts numbers 0-23. + * @type int $minute Optional. The minute of the hour. Default empty. Accepts numbers 0-60. + * @type int $second Optional. The second of the minute. Default empty. Accepts numbers 0-60. + * } + * } + * } + * @param array $default_column Optional. Default column to query against. Default 'post_date'. + * Accepts 'post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt', + * 'comment_date', 'comment_date_gmt'. + */ + function __construct( $date_query, $default_column = 'post_date' ) { + if ( empty( $date_query ) || ! is_array( $date_query ) ) + return; + + if ( isset( $date_query['relation'] ) && strtoupper( $date_query['relation'] ) == 'OR' ) + $this->relation = 'OR'; + else + $this->relation = 'AND'; + + if ( ! empty( $date_query['column'] ) ) + $this->column = esc_sql( $date_query['column'] ); + else + $this->column = esc_sql( $default_column ); + + $this->column = $this->validate_column( $this->column ); + + $this->compare = $this->get_compare( $date_query ); + + // If an array of arrays wasn't passed, fix it + if ( ! isset( $date_query[0] ) ) + $date_query = array( $date_query ); + + $this->queries = array(); + foreach ( $date_query as $key => $query ) { + if ( ! is_array( $query ) ) + continue; + + $this->queries[$key] = $query; + } + } + + /** + * Determines and validates what comparison operator to use. + * + * @since 3.7.0 + * @access public + * + * @param array $query A date query or a date subquery + * @return string The comparison operator + */ + public function get_compare( $query ) { + if ( ! empty( $query['compare'] ) && in_array( $query['compare'], array( '=', '!=', '>', '>=', '<', '<=', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) + return strtoupper( $query['compare'] ); + + return $this->compare; + } + + /** + * Validates a column name parameter. + * + * @since 3.7.0 + * @access public + * + * @param string $column The user-supplied column name. + * @return string A validated column name value. + */ + public function validate_column( $column ) { + $valid_columns = array( + 'post_date', 'post_date_gmt', 'post_modified', + 'post_modified_gmt', 'comment_date', 'comment_date_gmt' + ); + /** + * Filter the list of valid date query columns. + * + * @since 3.7.0 + * + * @param array $valid_columns An array of valid date query columns. Defaults are 'post_date', 'post_date_gmt', + * 'post_modified', 'post_modified_gmt', 'comment_date', 'comment_date_gmt' + */ + if ( ! in_array( $column, apply_filters( 'date_query_valid_columns', $valid_columns ) ) ) + $column = 'post_date'; + + return $column; + } + + /** + * Turns an array of date query parameters into a MySQL string. + * + * @since 3.7.0 + * @access public + * + * @return string MySQL WHERE parameters + */ + public function get_sql() { + // The parts of the final query + $where = array(); + + foreach ( $this->queries as $key => $query ) { + $where_parts = $this->get_sql_for_subquery( $query ); + if ( $where_parts ) { + // Combine the parts of this subquery into a single string + $where[ $key ] = '( ' . implode( ' AND ', $where_parts ) . ' )'; + } + } + + // Combine the subquery strings into a single string + if ( $where ) + $where = ' AND ( ' . implode( " {$this->relation} ", $where ) . ' )'; + else + $where = ''; + + /** + * Filter the date query WHERE clause. + * + * @since 3.7.0 + * + * @param string $where WHERE clause of the date query. + * @param WP_Date_Query $this The WP_Date_Query instance. + */ + return apply_filters( 'get_date_sql', $where, $this ); + } + + /** + * Turns a single date subquery into pieces for a WHERE clause. + * + * @since 3.7.0 + * return array + */ + protected function get_sql_for_subquery( $query ) { + global $wpdb; + + // The sub-parts of a $where part + $where_parts = array(); + + $column = ( ! empty( $query['column'] ) ) ? esc_sql( $query['column'] ) : $this->column; + + $column = $this->validate_column( $column ); + + $compare = $this->get_compare( $query ); + + $lt = '<'; + $gt = '>'; + if ( ! empty( $query['inclusive'] ) ) { + $lt .= '='; + $gt .= '='; + } + + // Range queries + if ( ! empty( $query['after'] ) ) + $where_parts[] = $wpdb->prepare( "$column $gt %s", $this->build_mysql_datetime( $query['after'], true ) ); + + if ( ! empty( $query['before'] ) ) + $where_parts[] = $wpdb->prepare( "$column $lt %s", $this->build_mysql_datetime( $query['before'], false ) ); + + // Specific value queries + + if ( isset( $query['year'] ) && $value = $this->build_value( $compare, $query['year'] ) ) + $where_parts[] = "YEAR( $column ) $compare $value"; + + if ( isset( $query['month'] ) && $value = $this->build_value( $compare, $query['month'] ) ) + $where_parts[] = "MONTH( $column ) $compare $value"; + + // Legacy + if ( isset( $query['monthnum'] ) && $value = $this->build_value( $compare, $query['monthnum'] ) ) + $where_parts[] = "MONTH( $column ) $compare $value"; + + if ( isset( $query['week'] ) && false !== ( $value = $this->build_value( $compare, $query['week'] ) ) ) + $where_parts[] = _wp_mysql_week( $column ) . " $compare $value"; + + // Legacy + if ( isset( $query['w'] ) && false !== ( $value = $this->build_value( $compare, $query['w'] ) ) ) + $where_parts[] = _wp_mysql_week( $column ) . " $compare $value"; + + if ( isset( $query['dayofyear'] ) && $value = $this->build_value( $compare, $query['dayofyear'] ) ) + $where_parts[] = "DAYOFYEAR( $column ) $compare $value"; + + if ( isset( $query['day'] ) && $value = $this->build_value( $compare, $query['day'] ) ) + $where_parts[] = "DAYOFMONTH( $column ) $compare $value"; + + if ( isset( $query['dayofweek'] ) && $value = $this->build_value( $compare, $query['dayofweek'] ) ) + $where_parts[] = "DAYOFWEEK( $column ) $compare $value"; + + if ( isset( $query['hour'] ) || isset( $query['minute'] ) || isset( $query['second'] ) ) { + // Avoid notices + foreach ( array( 'hour', 'minute', 'second' ) as $unit ) { + if ( ! isset( $query[$unit] ) ) { + $query[$unit] = null; + } + } + + if ( $time_query = $this->build_time_query( $column, $compare, $query['hour'], $query['minute'], $query['second'] ) ) { + $where_parts[] = $time_query; + } + } + + return $where_parts; + } + + /** + * Builds and validates a value string based on the comparison operator. + * + * @since 3.7.0 + * @access public + * + * @param string $compare The compare operator to use + * @param string|array $value The value + * @return string|int|false The value to be used in SQL or false on error. + */ + public function build_value( $compare, $value ) { + if ( ! isset( $value ) ) + return false; + + switch ( $compare ) { + case 'IN': + case 'NOT IN': + return '(' . implode( ',', array_map( 'intval', (array) $value ) ) . ')'; + + case 'BETWEEN': + case 'NOT BETWEEN': + if ( ! is_array( $value ) || 2 != count( $value ) || ! isset( $value[0] ) || ! isset( $value[1] ) ) + $value = array( $value, $value ); + + $value = array_map( 'intval', $value ); + + return $value[0] . ' AND ' . $value[1]; + + default; + return (int) $value; + } + } + + /** + * Builds a MySQL format date/time based on some query parameters. + * + * You can pass an array of values (year, month, etc.) with missing parameter values being defaulted to + * either the maximum or minimum values (controlled by the $default_to parameter). Alternatively you can + * pass a string that that will be run through strtotime(). + * + * @since 3.7.0 + * @access public + * + * @param string|array $datetime An array of parameters or a strotime() string + * @param string $default_to Controls what values default to if they are missing from $datetime. Pass "min" or "max". + * @return string|false A MySQL format date/time or false on failure + */ + public function build_mysql_datetime( $datetime, $default_to_max = false ) { + $now = current_time( 'timestamp' ); + + if ( ! is_array( $datetime ) ) { + // @todo Timezone issues here possibly + return gmdate( 'Y-m-d H:i:s', strtotime( $datetime, $now ) ); + } + + $datetime = array_map( 'absint', $datetime ); + + if ( ! isset( $datetime['year'] ) ) + $datetime['year'] = gmdate( 'Y', $now ); + + if ( ! isset( $datetime['month'] ) ) + $datetime['month'] = ( $default_to_max ) ? 12 : 1; + + if ( ! isset( $datetime['day'] ) ) + $datetime['day'] = ( $default_to_max ) ? (int) date( 't', mktime( 0, 0, 0, $datetime['month'], 1, $datetime['year'] ) ) : 1; + + if ( ! isset( $datetime['hour'] ) ) + $datetime['hour'] = ( $default_to_max ) ? 23 : 0; + + if ( ! isset( $datetime['minute'] ) ) + $datetime['minute'] = ( $default_to_max ) ? 59 : 0; + + if ( ! isset( $datetime['second'] ) ) + $datetime['second'] = ( $default_to_max ) ? 59 : 0; + + return sprintf( '%04d-%02d-%02d %02d:%02d:%02d', $datetime['year'], $datetime['month'], $datetime['day'], $datetime['hour'], $datetime['minute'], $datetime['second'] ); + } + + /** + * Builds a query string for comparing time values (hour, minute, second). + * + * If just hour, minute, or second is set than a normal comparison will be done. + * However if multiple values are passed, a pseudo-decimal time will be created + * in order to be able to accurately compare against. + * + * @since 3.7.0 + * @access public + * + * @param string $column The column to query against. Needs to be pre-validated! + * @param string $compare The comparison operator. Needs to be pre-validated! + * @param int|null $hour Optional. An hour value (0-23). + * @param int|null $minute Optional. A minute value (0-59). + * @param int|null $second Optional. A second value (0-59). + * @return string|false A query part or false on failure. + */ + public function build_time_query( $column, $compare, $hour = null, $minute = null, $second = null ) { + global $wpdb; + + // Have to have at least one + if ( ! isset( $hour ) && ! isset( $minute ) && ! isset( $second ) ) + return false; + + // Complex combined queries aren't supported for multi-value queries + if ( in_array( $compare, array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) { + $return = array(); + + if ( isset( $hour ) && false !== ( $value = $this->build_value( $compare, $hour ) ) ) + $return[] = "HOUR( $column ) $compare $value"; + + if ( isset( $minute ) && false !== ( $value = $this->build_value( $compare, $minute ) ) ) + $return[] = "MINUTE( $column ) $compare $value"; + + if ( isset( $second ) && false !== ( $value = $this->build_value( $compare, $second ) ) ) + $return[] = "SECOND( $column ) $compare $value"; + + return implode( ' AND ', $return ); + } + + // Cases where just one unit is set + if ( isset( $hour ) && ! isset( $minute ) && ! isset( $second ) && false !== ( $value = $this->build_value( $compare, $hour ) ) ) { + return "HOUR( $column ) $compare $value"; + } elseif ( ! isset( $hour ) && isset( $minute ) && ! isset( $second ) && false !== ( $value = $this->build_value( $compare, $minute ) ) ) { + return "MINUTE( $column ) $compare $value"; + } elseif ( ! isset( $hour ) && ! isset( $minute ) && isset( $second ) && false !== ( $value = $this->build_value( $compare, $second ) ) ) { + return "SECOND( $column ) $compare $value"; + } + + // Single units were already handled. Since hour & second isn't allowed, minute must to be set. + if ( ! isset( $minute ) ) + return false; + + $format = $time = ''; + + // Hour + if ( $hour ) { + $format .= '%H.'; + $time .= sprintf( '%02d', $hour ) . '.'; + } else { + $format .= '0.'; + $time .= '0.'; + } + + // Minute + $format .= '%i'; + $time .= sprintf( '%02d', $minute ); + + if ( isset( $second ) ) { + $format .= '%s'; + $time .= sprintf( '%02d', $second ); + } + + return $wpdb->prepare( "DATE_FORMAT( $column, %s ) $compare %f", $format, $time ); + } +} diff --git a/src/wp-includes/default-constants.php b/src/wp-includes/default-constants.php new file mode 100644 index 0000000..4f135c8 --- /dev/null +++ b/src/wp-includes/default-constants.php @@ -0,0 +1,316 @@ + 'widget_pages', 'description' => __( 'A list of your site’s Pages.') ); + parent::__construct('pages', __('Pages'), $widget_ops); + } + + function widget( $args, $instance ) { + extract( $args ); + + $title = apply_filters('widget_title', empty( $instance['title'] ) ? __( 'Pages' ) : $instance['title'], $instance, $this->id_base); + $sortby = empty( $instance['sortby'] ) ? 'menu_order' : $instance['sortby']; + $exclude = empty( $instance['exclude'] ) ? '' : $instance['exclude']; + + if ( $sortby == 'menu_order' ) + $sortby = 'menu_order, post_title'; + + $out = wp_list_pages( apply_filters('widget_pages_args', array('title_li' => '', 'echo' => 0, 'sort_column' => $sortby, 'exclude' => $exclude) ) ); + + if ( !empty( $out ) ) { + echo $before_widget; + if ( $title) + echo $before_title . $title . $after_title; + ?> +
                    + +
                  + 'post_title', 'title' => '', 'exclude' => '') ); + $title = esc_attr( $instance['title'] ); + $exclude = esc_attr( $instance['exclude'] ); + ?> +

                  +

                  + + +

                  +

                  + +
                  + +

                  + __( "Your blogroll" ) ); + parent::__construct('links', __('Links'), $widget_ops); + } + + function widget( $args, $instance ) { + extract($args, EXTR_SKIP); + + $show_description = isset($instance['description']) ? $instance['description'] : false; + $show_name = isset($instance['name']) ? $instance['name'] : false; + $show_rating = isset($instance['rating']) ? $instance['rating'] : false; + $show_images = isset($instance['images']) ? $instance['images'] : true; + $category = isset($instance['category']) ? $instance['category'] : false; + $orderby = isset( $instance['orderby'] ) ? $instance['orderby'] : 'name'; + $order = $orderby == 'rating' ? 'DESC' : 'ASC'; + $limit = isset( $instance['limit'] ) ? $instance['limit'] : -1; + + $before_widget = preg_replace('/id="[^"]*"/','id="%id"', $before_widget); + wp_list_bookmarks(apply_filters('widget_links_args', array( + 'title_before' => $before_title, 'title_after' => $after_title, + 'category_before' => $before_widget, 'category_after' => $after_widget, + 'show_images' => $show_images, 'show_description' => $show_description, + 'show_name' => $show_name, 'show_rating' => $show_rating, + 'category' => $category, 'class' => 'linkcat widget', + 'orderby' => $orderby, 'order' => $order, + 'limit' => $limit, + ))); + } + + function update( $new_instance, $old_instance ) { + $new_instance = (array) $new_instance; + $instance = array( 'images' => 0, 'name' => 0, 'description' => 0, 'rating' => 0 ); + foreach ( $instance as $field => $val ) { + if ( isset($new_instance[$field]) ) + $instance[$field] = 1; + } + + $instance['orderby'] = 'name'; + if ( in_array( $new_instance['orderby'], array( 'name', 'rating', 'id', 'rand' ) ) ) + $instance['orderby'] = $new_instance['orderby']; + + $instance['category'] = intval( $new_instance['category'] ); + $instance['limit'] = ! empty( $new_instance['limit'] ) ? intval( $new_instance['limit'] ) : -1; + + return $instance; + } + + function form( $instance ) { + + //Defaults + $instance = wp_parse_args( (array) $instance, array( 'images' => true, 'name' => true, 'description' => false, 'rating' => false, 'category' => false, 'orderby' => 'name', 'limit' => -1 ) ); + $link_cats = get_terms( 'link_category' ); + if ( ! $limit = intval( $instance['limit'] ) ) + $limit = -1; +?> +

                  + + + + +

                  +

                  + id="get_field_id('images'); ?>" name="get_field_name('images'); ?>" /> +
                  + id="get_field_id('name'); ?>" name="get_field_name('name'); ?>" /> +
                  + id="get_field_id('description'); ?>" name="get_field_name('description'); ?>" /> +
                  + id="get_field_id('rating'); ?>" name="get_field_name('rating'); ?>" /> + +

                  +

                  + + +

                  + 'widget_search', 'description' => __( "A search form for your site.") ); + parent::__construct('search', __('Search'), $widget_ops); + } + + function widget( $args, $instance ) { + extract($args); + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + + // Use current theme search form if it exists + get_search_form(); + + echo $after_widget; + } + + function form( $instance ) { + $instance = wp_parse_args( (array) $instance, array( 'title' => '') ); + $title = $instance['title']; +?> +

                  + '')); + $instance['title'] = strip_tags($new_instance['title']); + return $instance; + } + +} + +/** + * Archives widget class + * + * @since 2.8.0 + */ +class WP_Widget_Archives extends WP_Widget { + + function __construct() { + $widget_ops = array('classname' => 'widget_archive', 'description' => __( 'A monthly archive of your site’s Posts.') ); + parent::__construct('archives', __('Archives'), $widget_ops); + } + + function widget( $args, $instance ) { + extract($args); + $c = ! empty( $instance['count'] ) ? '1' : '0'; + $d = ! empty( $instance['dropdown'] ) ? '1' : '0'; + $title = apply_filters('widget_title', empty($instance['title']) ? __('Archives') : $instance['title'], $instance, $this->id_base); + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + + if ( $d ) { +?> + + +
                    + 'monthly', 'show_post_count' => $c))); ?> +
                  + '', 'count' => 0, 'dropdown' => '') ); + $instance['title'] = strip_tags($new_instance['title']); + $instance['count'] = $new_instance['count'] ? 1 : 0; + $instance['dropdown'] = $new_instance['dropdown'] ? 1 : 0; + + return $instance; + } + + function form( $instance ) { + $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'count' => 0, 'dropdown' => '') ); + $title = strip_tags($instance['title']); + $count = $instance['count'] ? 'checked="checked"' : ''; + $dropdown = $instance['dropdown'] ? 'checked="checked"' : ''; +?> +

                  +

                  + id="get_field_id('dropdown'); ?>" name="get_field_name('dropdown'); ?>" /> +
                  + id="get_field_id('count'); ?>" name="get_field_name('count'); ?>" /> +

                  + 'widget_meta', 'description' => __( "Login, RSS, & WordPress.org links.") ); + parent::__construct('meta', __('Meta'), $widget_ops); + } + + function widget( $args, $instance ) { + extract($args); + $title = apply_filters('widget_title', empty($instance['title']) ? __('Meta') : $instance['title'], $instance, $this->id_base); + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; +?> +
                    + +
                  • +
                  • RSS'); ?>
                  • +
                  • RSS'); ?>
                  • + %s', + esc_url( __( 'http://wordpress.org/' ) ), + esc_attr__( 'Powered by WordPress, state-of-the-art semantic personal publishing platform.' ), + _x( 'WordPress.org', 'meta widget link text' ) + ) ); ?> + +
                  + '' ) ); + $title = strip_tags($instance['title']); +?> +

                  + 'widget_calendar', 'description' => __( 'A calendar of your site’s Posts.') ); + parent::__construct('calendar', __('Calendar'), $widget_ops); + } + + function widget( $args, $instance ) { + extract($args); + $title = apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base); + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + echo '
                  '; + get_calendar(); + echo '
                  '; + echo $after_widget; + } + + function update( $new_instance, $old_instance ) { + $instance = $old_instance; + $instance['title'] = strip_tags($new_instance['title']); + + return $instance; + } + + function form( $instance ) { + $instance = wp_parse_args( (array) $instance, array( 'title' => '' ) ); + $title = strip_tags($instance['title']); +?> +

                  +

                  + 'widget_text', 'description' => __('Arbitrary text or HTML.')); + $control_ops = array('width' => 400, 'height' => 350); + parent::__construct('text', __('Text'), $widget_ops, $control_ops); + } + + function widget( $args, $instance ) { + extract($args); + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); + $text = apply_filters( 'widget_text', empty( $instance['text'] ) ? '' : $instance['text'], $instance ); + echo $before_widget; + if ( !empty( $title ) ) { echo $before_title . $title . $after_title; } ?> +
                  + '', 'text' => '' ) ); + $title = strip_tags($instance['title']); + $text = esc_textarea($instance['text']); +?> +

                  +

                  + + + +

                  /> 

                  + 'widget_categories', 'description' => __( "A list or dropdown of categories." ) ); + parent::__construct('categories', __('Categories'), $widget_ops); + } + + function widget( $args, $instance ) { + extract( $args ); + + $title = apply_filters('widget_title', empty( $instance['title'] ) ? __( 'Categories' ) : $instance['title'], $instance, $this->id_base); + $c = ! empty( $instance['count'] ) ? '1' : '0'; + $h = ! empty( $instance['hierarchical'] ) ? '1' : '0'; + $d = ! empty( $instance['dropdown'] ) ? '1' : '0'; + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + + $cat_args = array('orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h); + + if ( $d ) { + $cat_args['show_option_none'] = __('Select Category'); + wp_dropdown_categories(apply_filters('widget_categories_dropdown_args', $cat_args)); +?> + + + + +
                    + +
                  + '') ); + $title = esc_attr( $instance['title'] ); + $count = isset($instance['count']) ? (bool) $instance['count'] :false; + $hierarchical = isset( $instance['hierarchical'] ) ? (bool) $instance['hierarchical'] : false; + $dropdown = isset( $instance['dropdown'] ) ? (bool) $instance['dropdown'] : false; +?> +

                  +

                  + +

                  /> +
                  + + /> +
                  + + /> +

                  + 'widget_recent_entries', 'description' => __( "Your site’s most recent Posts.") ); + parent::__construct('recent-posts', __('Recent Posts'), $widget_ops); + $this->alt_option_name = 'widget_recent_entries'; + + add_action( 'save_post', array($this, 'flush_widget_cache') ); + add_action( 'deleted_post', array($this, 'flush_widget_cache') ); + add_action( 'switch_theme', array($this, 'flush_widget_cache') ); + } + + function widget($args, $instance) { + $cache = wp_cache_get('widget_recent_posts', 'widget'); + + if ( !is_array($cache) ) + $cache = array(); + + if ( ! isset( $args['widget_id'] ) ) + $args['widget_id'] = $this->id; + + if ( isset( $cache[ $args['widget_id'] ] ) ) { + echo $cache[ $args['widget_id'] ]; + return; + } + + ob_start(); + extract($args); + + $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Posts' ); + $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); + $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 10; + if ( ! $number ) + $number = 10; + $show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false; + + $r = new WP_Query( apply_filters( 'widget_posts_args', array( 'posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true ) ) ); + if ($r->have_posts()) : +?> + + +
                    + have_posts() ) : $r->the_post(); ?> +
                  • + + + + +
                  • + +
                  + +flush_widget_cache(); + + $alloptions = wp_cache_get( 'alloptions', 'options' ); + if ( isset($alloptions['widget_recent_entries']) ) + delete_option('widget_recent_entries'); + + return $instance; + } + + function flush_widget_cache() { + wp_cache_delete('widget_recent_posts', 'widget'); + } + + function form( $instance ) { + $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; + $number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5; + $show_date = isset( $instance['show_date'] ) ? (bool) $instance['show_date'] : false; +?> +

                  +

                  + +

                  +

                  + +

                  id="get_field_id( 'show_date' ); ?>" name="get_field_name( 'show_date' ); ?>" /> +

                  + 'widget_recent_comments', 'description' => __( 'Your site’s most recent comments.' ) ); + parent::__construct('recent-comments', __('Recent Comments'), $widget_ops); + $this->alt_option_name = 'widget_recent_comments'; + + if ( is_active_widget(false, false, $this->id_base) ) + add_action( 'wp_head', array($this, 'recent_comments_style') ); + + add_action( 'comment_post', array($this, 'flush_widget_cache') ); + add_action( 'edit_comment', array($this, 'flush_widget_cache') ); + add_action( 'transition_comment_status', array($this, 'flush_widget_cache') ); + } + + function recent_comments_style() { + if ( ! current_theme_supports( 'widgets' ) // Temp hack #14876 + || ! apply_filters( 'show_recent_comments_widget_style', true, $this->id_base ) ) + return; + ?> + +id; + + if ( isset( $cache[ $args['widget_id'] ] ) ) { + echo $cache[ $args['widget_id'] ]; + return; + } + + extract($args, EXTR_SKIP); + $output = ''; + + $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Comments' ); + $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); + $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5; + if ( ! $number ) + $number = 5; + + $comments = get_comments( apply_filters( 'widget_comments_args', array( 'number' => $number, 'status' => 'approve', 'post_status' => 'publish' ) ) ); + $output .= $before_widget; + if ( $title ) + $output .= $before_title . $title . $after_title; + + $output .= '
                    '; + if ( $comments ) { + // Prime cache for associated posts. (Prime post term cache if we need it for permalinks.) + $post_ids = array_unique( wp_list_pluck( $comments, 'comment_post_ID' ) ); + _prime_post_caches( $post_ids, strpos( get_option( 'permalink_structure' ), '%category%' ), false ); + + foreach ( (array) $comments as $comment) { + $output .= '
                  • ' . /* translators: comments widget: 1: comment author, 2: post link */ sprintf(_x('%1$s on %2$s', 'widgets'), get_comment_author_link(), '' . get_the_title($comment->comment_post_ID) . '') . '
                  • '; + } + } + $output .= '
                  '; + $output .= $after_widget; + + echo $output; + $cache[$args['widget_id']] = $output; + wp_cache_set('widget_recent_comments', $cache, 'widget'); + } + + function update( $new_instance, $old_instance ) { + $instance = $old_instance; + $instance['title'] = strip_tags($new_instance['title']); + $instance['number'] = absint( $new_instance['number'] ); + $this->flush_widget_cache(); + + $alloptions = wp_cache_get( 'alloptions', 'options' ); + if ( isset($alloptions['widget_recent_comments']) ) + delete_option('widget_recent_comments'); + + return $instance; + } + + function form( $instance ) { + $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; + $number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5; +?> +

                  +

                  + +

                  +

                  + __('Entries from any RSS or Atom feed.') ); + $control_ops = array( 'width' => 400, 'height' => 200 ); + parent::__construct( 'rss', __('RSS'), $widget_ops, $control_ops ); + } + + function widget($args, $instance) { + + if ( isset($instance['error']) && $instance['error'] ) + return; + + extract($args, EXTR_SKIP); + + $url = ! empty( $instance['url'] ) ? $instance['url'] : ''; + while ( stristr($url, 'http') != $url ) + $url = substr($url, 1); + + if ( empty($url) ) + return; + + // self-url destruction sequence + if ( in_array( untrailingslashit( $url ), array( site_url(), home_url() ) ) ) + return; + + $rss = fetch_feed($url); + $title = $instance['title']; + $desc = ''; + $link = ''; + + if ( ! is_wp_error($rss) ) { + $desc = esc_attr(strip_tags(@html_entity_decode($rss->get_description(), ENT_QUOTES, get_option('blog_charset')))); + if ( empty($title) ) + $title = esc_html(strip_tags($rss->get_title())); + $link = esc_url(strip_tags($rss->get_permalink())); + while ( stristr($link, 'http') != $link ) + $link = substr($link, 1); + } + + if ( empty($title) ) + $title = empty($desc) ? __('Unknown Feed') : $desc; + + $title = apply_filters('widget_title', $title, $instance, $this->id_base); + $url = esc_url(strip_tags($url)); + $icon = includes_url('images/rss.png'); + if ( $title ) + $title = "RSS $title"; + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + wp_widget_rss_output( $rss, $instance ); + echo $after_widget; + + if ( ! is_wp_error($rss) ) + $rss->__destruct(); + unset($rss); + } + + function update($new_instance, $old_instance) { + $testurl = ( isset( $new_instance['url'] ) && ( !isset( $old_instance['url'] ) || ( $new_instance['url'] != $old_instance['url'] ) ) ); + return wp_widget_rss_process( $new_instance, $testurl ); + } + + function form($instance) { + + if ( empty($instance) ) + $instance = array( 'title' => '', 'url' => '', 'items' => 10, 'error' => false, 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0 ); + $instance['number'] = $this->number; + + wp_widget_rss_form( $instance ); + } +} + +/** + * Display the RSS entries in a list. + * + * @since 2.5.0 + * + * @param string|array|object $rss RSS url. + * @param array $args Widget arguments. + */ +function wp_widget_rss_output( $rss, $args = array() ) { + if ( is_string( $rss ) ) { + $rss = fetch_feed($rss); + } elseif ( is_array($rss) && isset($rss['url']) ) { + $args = $rss; + $rss = fetch_feed($rss['url']); + } elseif ( !is_object($rss) ) { + return; + } + + if ( is_wp_error($rss) ) { + if ( is_admin() || current_user_can('manage_options') ) + echo '

                  ' . sprintf( __('RSS Error: %s'), $rss->get_error_message() ) . '

                  '; + return; + } + + $default_args = array( 'show_author' => 0, 'show_date' => 0, 'show_summary' => 0 ); + $args = wp_parse_args( $args, $default_args ); + extract( $args, EXTR_SKIP ); + + $items = (int) $items; + if ( $items < 1 || 20 < $items ) + $items = 10; + $show_summary = (int) $show_summary; + $show_author = (int) $show_author; + $show_date = (int) $show_date; + + if ( !$rss->get_item_quantity() ) { + echo '
                  • ' . __( 'An error has occurred, which probably means the feed is down. Try again later.' ) . '
                  '; + $rss->__destruct(); + unset($rss); + return; + } + + echo '
                    '; + foreach ( $rss->get_items(0, $items) as $item ) { + $link = $item->get_link(); + while ( stristr($link, 'http') != $link ) + $link = substr($link, 1); + $link = esc_url(strip_tags($link)); + $title = esc_attr(strip_tags($item->get_title())); + if ( empty($title) ) + $title = __('Untitled'); + + $desc = str_replace( array("\n", "\r"), ' ', esc_attr( strip_tags( @html_entity_decode( $item->get_description(), ENT_QUOTES, get_option('blog_charset') ) ) ) ); + $excerpt = wp_html_excerpt( $desc, 360 ); + + // Append ellipsis. Change existing [...] to […]. + if ( '[...]' == substr( $excerpt, -5 ) ) + $excerpt = substr( $excerpt, 0, -5 ) . '[…]'; + elseif ( '[…]' != substr( $excerpt, -10 ) && $desc != $excerpt ) + $excerpt .= ' […]'; + + $excerpt = esc_html( $excerpt ); + + if ( $show_summary ) { + $summary = "
                    $excerpt
                    "; + } else { + $summary = ''; + } + + $date = ''; + if ( $show_date ) { + $date = $item->get_date( 'U' ); + + if ( $date ) { + $date = ' ' . date_i18n( get_option( 'date_format' ), $date ) . ''; + } + } + + $author = ''; + if ( $show_author ) { + $author = $item->get_author(); + if ( is_object($author) ) { + $author = $author->get_name(); + $author = ' ' . esc_html( strip_tags( $author ) ) . ''; + } + } + + if ( $link == '' ) { + echo "
                  • $title{$date}{$summary}{$author}
                  • "; + } else { + echo "
                  • $title{$date}{$summary}{$author}
                  • "; + } + } + echo '
                  '; + $rss->__destruct(); + unset($rss); +} + +/** + * Display RSS widget options form. + * + * The options for what fields are displayed for the RSS form are all booleans + * and are as follows: 'url', 'title', 'items', 'show_summary', 'show_author', + * 'show_date'. + * + * @since 2.5.0 + * + * @param array|string $args Values for input fields. + * @param array $inputs Override default display options. + */ +function wp_widget_rss_form( $args, $inputs = null ) { + + $default_inputs = array( 'url' => true, 'title' => true, 'items' => true, 'show_summary' => true, 'show_author' => true, 'show_date' => true ); + $inputs = wp_parse_args( $inputs, $default_inputs ); + extract( $args ); + extract( $inputs, EXTR_SKIP ); + + $number = esc_attr( $number ); + $title = esc_attr( $title ); + $url = esc_url( $url ); + $items = (int) $items; + if ( $items < 1 || 20 < $items ) + $items = 10; + $show_summary = (int) $show_summary; + $show_author = (int) $show_author; + $show_date = (int) $show_date; + + if ( !empty($error) ) + echo '

                  ' . sprintf( __('RSS Error: %s'), $error) . '

                  '; + + if ( $inputs['url'] ) : +?> +

                  +

                  + +

                  +

                  + +

                  +

                  + +

                  /> +

                  + +

                  /> +

                  + +

                  /> +

                  + + +get_error_message(); + } else { + $link = esc_url(strip_tags($rss->get_permalink())); + while ( stristr($link, 'http') != $link ) + $link = substr($link, 1); + + $rss->__destruct(); + unset($rss); + } + } + + return compact( 'title', 'url', 'link', 'items', 'error', 'show_summary', 'show_author', 'show_date' ); +} + +/** + * Tag cloud widget class + * + * @since 2.8.0 + */ +class WP_Widget_Tag_Cloud extends WP_Widget { + + function __construct() { + $widget_ops = array( 'description' => __( "A cloud of your most used tags.") ); + parent::__construct('tag_cloud', __('Tag Cloud'), $widget_ops); + } + + function widget( $args, $instance ) { + extract($args); + $current_taxonomy = $this->_get_current_taxonomy($instance); + if ( !empty($instance['title']) ) { + $title = $instance['title']; + } else { + if ( 'post_tag' == $current_taxonomy ) { + $title = __('Tags'); + } else { + $tax = get_taxonomy($current_taxonomy); + $title = $tax->labels->name; + } + } + $title = apply_filters('widget_title', $title, $instance, $this->id_base); + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + echo '
                  '; + wp_tag_cloud( apply_filters('widget_tag_cloud_args', array('taxonomy' => $current_taxonomy) ) ); + echo "
                  \n"; + echo $after_widget; + } + + function update( $new_instance, $old_instance ) { + $instance['title'] = strip_tags(stripslashes($new_instance['title'])); + $instance['taxonomy'] = stripslashes($new_instance['taxonomy']); + return $instance; + } + + function form( $instance ) { + $current_taxonomy = $this->_get_current_taxonomy($instance); +?> +

                  +

                  +

                  +

                  __('Add a custom menu to your sidebar.') ); + parent::__construct( 'nav_menu', __('Custom Menu'), $widget_ops ); + } + + function widget($args, $instance) { + // Get menu + $nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false; + + if ( !$nav_menu ) + return; + + $instance['title'] = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); + + echo $args['before_widget']; + + if ( !empty($instance['title']) ) + echo $args['before_title'] . $instance['title'] . $args['after_title']; + + wp_nav_menu( array( 'fallback_cb' => '', 'menu' => $nav_menu ) ); + + echo $args['after_widget']; + } + + function update( $new_instance, $old_instance ) { + $instance['title'] = strip_tags( stripslashes($new_instance['title']) ); + $instance['nav_menu'] = (int) $new_instance['nav_menu']; + return $instance; + } + + function form( $instance ) { + $title = isset( $instance['title'] ) ? $instance['title'] : ''; + $nav_menu = isset( $instance['nav_menu'] ) ? $instance['nav_menu'] : ''; + + // Get menus + $menus = wp_get_nav_menus( array( 'orderby' => 'name' ) ); + + // If no menus exists, direct the user to go and create some. + if ( !$menus ) { + echo '

                  '. sprintf( __('No menus have been created yet. Create some.'), admin_url('nav-menus.php') ) .'

                  '; + return; + } + ?> +

                  + + +

                  +

                  + + +

                  + $post->ID, + 'Author_ID' => $post->post_author, + 'Date' => $post->post_date, + 'Content' => $post->post_content, + 'Excerpt' => $post->post_excerpt, + 'Title' => $post->post_title, + 'Category' => $post->post_category, + 'post_status' => $post->post_status, + 'comment_status' => $post->comment_status, + 'ping_status' => $post->ping_status, + 'post_password' => $post->post_password, + 'to_ping' => $post->to_ping, + 'pinged' => $post->pinged, + 'post_type' => $post->post_type, + 'post_name' => $post->post_name + ); + + return $postdata; +} + +/** + * Sets up the WordPress Loop. + * + * @since 1.0.1 + * @deprecated 1.5 + * @deprecated Use The Loop - {@link http://codex.wordpress.org/The_Loop Use new WordPress Loop} + */ +function start_wp() { + global $wp_query; + + _deprecated_function( __FUNCTION__, '1.5', __('new WordPress Loop') ); + + // Since the old style loop is being used, advance the query iterator here. + $wp_query->next_post(); + + setup_postdata( get_post() ); +} + +/** + * Return or Print Category ID. + * + * @since 0.71 + * @deprecated 0.71 + * @deprecated use get_the_category() + * @see get_the_category() + * + * @param bool $echo + * @return null|int + */ +function the_category_ID($echo = true) { + _deprecated_function( __FUNCTION__, '0.71', 'get_the_category()' ); + + // Grab the first cat in the list. + $categories = get_the_category(); + $cat = $categories[0]->term_id; + + if ( $echo ) + echo $cat; + + return $cat; +} + +/** + * Print category with optional text before and after. + * + * @since 0.71 + * @deprecated 0.71 + * @deprecated use get_the_category_by_ID() + * @see get_the_category_by_ID() + * + * @param string $before + * @param string $after + */ +function the_category_head($before='', $after='') { + global $currentcat, $previouscat; + + _deprecated_function( __FUNCTION__, '0.71', 'get_the_category_by_ID()' ); + + // Grab the first cat in the list. + $categories = get_the_category(); + $currentcat = $categories[0]->category_id; + if ( $currentcat != $previouscat ) { + echo $before; + echo get_the_category_by_ID($currentcat); + echo $after; + $previouscat = $currentcat; + } +} + +/** + * Prints link to the previous post. + * + * @since 1.5 + * @deprecated 2.0 + * @deprecated Use previous_post_link() + * @see previous_post_link() + * + * @param string $format + * @param string $previous + * @param string $title + * @param string $in_same_cat + * @param int $limitprev + * @param string $excluded_categories + */ +function previous_post($format='%', $previous='previous post: ', $title='yes', $in_same_cat='no', $limitprev=1, $excluded_categories='') { + + _deprecated_function( __FUNCTION__, '2.0', 'previous_post_link()' ); + + if ( empty($in_same_cat) || 'no' == $in_same_cat ) + $in_same_cat = false; + else + $in_same_cat = true; + + $post = get_previous_post($in_same_cat, $excluded_categories); + + if ( !$post ) + return; + + $string = ''.$previous; + if ( 'yes' == $title ) + $string .= apply_filters('the_title', $post->post_title, $post->ID); + $string .= ''; + $format = str_replace('%', $string, $format); + echo $format; +} + +/** + * Prints link to the next post. + * + * @since 0.71 + * @deprecated 2.0 + * @deprecated Use next_post_link() + * @see next_post_link() + * + * @param string $format + * @param string $next + * @param string $title + * @param string $in_same_cat + * @param int $limitnext + * @param string $excluded_categories + */ +function next_post($format='%', $next='next post: ', $title='yes', $in_same_cat='no', $limitnext=1, $excluded_categories='') { + _deprecated_function( __FUNCTION__, '2.0', 'next_post_link()' ); + + if ( empty($in_same_cat) || 'no' == $in_same_cat ) + $in_same_cat = false; + else + $in_same_cat = true; + + $post = get_next_post($in_same_cat, $excluded_categories); + + if ( !$post ) + return; + + $string = ''.$next; + if ( 'yes' == $title ) + $string .= apply_filters('the_title', $post->post_title, $post->ID); + $string .= ''; + $format = str_replace('%', $string, $format); + echo $format; +} + +/** + * Whether user can create a post. + * + * @since 1.5 + * @deprecated 2.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $blog_id Not Used + * @param int $category_id Not Used + * @return bool + */ +function user_can_create_post($user_id, $blog_id = 1, $category_id = 'None') { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + $author_data = get_userdata($user_id); + return ($author_data->user_level > 1); +} + +/** + * Whether user can create a post. + * + * @since 1.5 + * @deprecated 2.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $blog_id Not Used + * @param int $category_id Not Used + * @return bool + */ +function user_can_create_draft($user_id, $blog_id = 1, $category_id = 'None') { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + $author_data = get_userdata($user_id); + return ($author_data->user_level >= 1); +} + +/** + * Whether user can edit a post. + * + * @since 1.5 + * @deprecated 2.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $post_id + * @param int $blog_id Not Used + * @return bool + */ +function user_can_edit_post($user_id, $post_id, $blog_id = 1) { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + $author_data = get_userdata($user_id); + $post = get_post($post_id); + $post_author_data = get_userdata($post->post_author); + + if ( (($user_id == $post_author_data->ID) && !($post->post_status == 'publish' && $author_data->user_level < 2)) + || ($author_data->user_level > $post_author_data->user_level) + || ($author_data->user_level >= 10) ) { + return true; + } else { + return false; + } +} + +/** + * Whether user can delete a post. + * + * @since 1.5 + * @deprecated 2.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $post_id + * @param int $blog_id Not Used + * @return bool + */ +function user_can_delete_post($user_id, $post_id, $blog_id = 1) { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + // right now if one can edit, one can delete + return user_can_edit_post($user_id, $post_id, $blog_id); +} + +/** + * Whether user can set new posts' dates. + * + * @since 1.5 + * @deprecated 2.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $blog_id Not Used + * @param int $category_id Not Used + * @return bool + */ +function user_can_set_post_date($user_id, $blog_id = 1, $category_id = 'None') { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + $author_data = get_userdata($user_id); + return (($author_data->user_level > 4) && user_can_create_post($user_id, $blog_id, $category_id)); +} + +/** + * Whether user can delete a post. + * + * @since 1.5 + * @deprecated 2.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $post_id + * @param int $blog_id Not Used + * @return bool returns true if $user_id can edit $post_id's date + */ +function user_can_edit_post_date($user_id, $post_id, $blog_id = 1) { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + $author_data = get_userdata($user_id); + return (($author_data->user_level > 4) && user_can_edit_post($user_id, $post_id, $blog_id)); +} + +/** + * Whether user can delete a post. + * + * @since 1.5 + * @deprecated 2.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $post_id + * @param int $blog_id Not Used + * @return bool returns true if $user_id can edit $post_id's comments + */ +function user_can_edit_post_comments($user_id, $post_id, $blog_id = 1) { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + // right now if one can edit a post, one can edit comments made on it + return user_can_edit_post($user_id, $post_id, $blog_id); +} + +/** + * Whether user can delete a post. + * + * @since 1.5 + * @deprecated 2.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $post_id + * @param int $blog_id Not Used + * @return bool returns true if $user_id can delete $post_id's comments + */ +function user_can_delete_post_comments($user_id, $post_id, $blog_id = 1) { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + // right now if one can edit comments, one can delete comments + return user_can_edit_post_comments($user_id, $post_id, $blog_id); +} + +/** + * Can user can edit other user. + * + * @since 1.5 + * @deprecated 2.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $other_user + * @return bool + */ +function user_can_edit_user($user_id, $other_user) { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + $user = get_userdata($user_id); + $other = get_userdata($other_user); + if ( $user->user_level > $other->user_level || $user->user_level > 8 || $user->ID == $other->ID ) + return true; + else + return false; +} + +/** + * Gets the links associated with category $cat_name. + * + * @since 0.71 + * @deprecated 2.1 + * @deprecated Use get_bookmarks() + * @see get_bookmarks() + * + * @param string $cat_name Optional. The category name to use. If no match is found uses all. + * @param string $before Optional. The html to output before the link. + * @param string $after Optional. The html to output after the link. + * @param string $between Optional. The html to output between the link/image and its description. Not used if no image or $show_images is true. + * @param bool $show_images Optional. Whether to show images (if defined). + * @param string $orderby Optional. The order to output the links. E.g. 'id', 'name', 'url', 'description' or 'rating'. Or maybe owner. + * If you start the name with an underscore the order will be reversed. You can also specify 'rand' as the order which will return links in a + * random order. + * @param bool $show_description Optional. Whether to show the description if show_images=false/not defined. + * @param bool $show_rating Optional. Show rating stars/chars. + * @param int $limit Optional. Limit to X entries. If not specified, all entries are shown. + * @param int $show_updated Optional. Whether to show last updated timestamp + */ +function get_linksbyname($cat_name = "noname", $before = '', $after = '
                  ', $between = " ", $show_images = true, $orderby = 'id', + $show_description = true, $show_rating = false, + $limit = -1, $show_updated = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmarks()' ); + + $cat_id = -1; + $cat = get_term_by('name', $cat_name, 'link_category'); + if ( $cat ) + $cat_id = $cat->term_id; + + get_links($cat_id, $before, $after, $between, $show_images, $orderby, $show_description, $show_rating, $limit, $show_updated); +} + +/** + * Gets the links associated with the named category. + * + * @since 1.0.1 + * @deprecated 2.1 + * @deprecated Use wp_list_bookmarks() + * @see wp_list_bookmarks() + * + * @param string $category The category to use. + * @param string $args + * @return bool|null + */ +function wp_get_linksbyname($category, $args = '') { + _deprecated_function(__FUNCTION__, '2.1', 'wp_list_bookmarks()'); + + $defaults = array( + 'after' => '
                  ', + 'before' => '', + 'categorize' => 0, + 'category_after' => '', + 'category_before' => '', + 'category_name' => $category, + 'show_description' => 1, + 'title_li' => '', + ); + + $r = wp_parse_args( $args, $defaults ); + + return wp_list_bookmarks($r); +} + +/** + * Gets an array of link objects associated with category $cat_name. + * + * + * $links = get_linkobjectsbyname('fred'); + * foreach ($links as $link) { + * echo '
                13. '.$link->link_name.'
                14. '; + * } + *
                  + * + * @since 1.0.1 + * @deprecated 2.1 + * @deprecated Use get_bookmarks() + * @see get_bookmarks() + * + * @param string $cat_name The category name to use. If no match is found uses all. + * @param string $orderby The order to output the links. E.g. 'id', 'name', 'url', 'description', or 'rating'. + * Or maybe owner. If you start the name with an underscore the order will be reversed. You can also + * specify 'rand' as the order which will return links in a random order. + * @param int $limit Limit to X entries. If not specified, all entries are shown. + * @return unknown + */ +function get_linkobjectsbyname($cat_name = "noname" , $orderby = 'name', $limit = -1) { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmarks()' ); + + $cat_id = -1; + $cat = get_term_by('name', $cat_name, 'link_category'); + if ( $cat ) + $cat_id = $cat->term_id; + + return get_linkobjects($cat_id, $orderby, $limit); +} + +/** + * Gets an array of link objects associated with category n. + * + * Usage: + * + * $links = get_linkobjects(1); + * if ($links) { + * foreach ($links as $link) { + * echo '
                15. '.$link->link_name.'
                  '.$link->link_description.'
                16. '; + * } + * } + *
                  + * + * Fields are: + *
                    + *
                  1. link_id
                  2. + *
                  3. link_url
                  4. + *
                  5. link_name
                  6. + *
                  7. link_image
                  8. + *
                  9. link_target
                  10. + *
                  11. link_category
                  12. + *
                  13. link_description
                  14. + *
                  15. link_visible
                  16. + *
                  17. link_owner
                  18. + *
                  19. link_rating
                  20. + *
                  21. link_updated
                  22. + *
                  23. link_rel
                  24. + *
                  25. link_notes
                  26. + *
                  + * + * @since 1.0.1 + * @deprecated 2.1 + * @deprecated Use get_bookmarks() + * @see get_bookmarks() + * + * @param int $category The category to use. If no category supplied uses all + * @param string $orderby the order to output the links. E.g. 'id', 'name', 'url', + * 'description', or 'rating'. Or maybe owner. If you start the name with an + * underscore the order will be reversed. You can also specify 'rand' as the + * order which will return links in a random order. + * @param int $limit Limit to X entries. If not specified, all entries are shown. + * @return unknown + */ +function get_linkobjects($category = 0, $orderby = 'name', $limit = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmarks()' ); + + $links = get_bookmarks( array( 'category' => $category, 'orderby' => $orderby, 'limit' => $limit ) ) ; + + $links_array = array(); + foreach ($links as $link) + $links_array[] = $link; + + return $links_array; +} + +/** + * Gets the links associated with category 'cat_name' and display rating stars/chars. + * + * @since 0.71 + * @deprecated 2.1 + * @deprecated Use get_bookmarks() + * @see get_bookmarks() + * + * @param string $cat_name The category name to use. If no match is found uses all + * @param string $before The html to output before the link + * @param string $after The html to output after the link + * @param string $between The html to output between the link/image and its description. Not used if no image or show_images is true + * @param bool $show_images Whether to show images (if defined). + * @param string $orderby the order to output the links. E.g. 'id', 'name', 'url', + * 'description', or 'rating'. Or maybe owner. If you start the name with an + * underscore the order will be reversed. You can also specify 'rand' as the + * order which will return links in a random order. + * @param bool $show_description Whether to show the description if show_images=false/not defined + * @param int $limit Limit to X entries. If not specified, all entries are shown. + * @param int $show_updated Whether to show last updated timestamp + */ +function get_linksbyname_withrating($cat_name = "noname", $before = '', $after = '
                  ', $between = " ", + $show_images = true, $orderby = 'id', $show_description = true, $limit = -1, $show_updated = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmarks()' ); + + get_linksbyname($cat_name, $before, $after, $between, $show_images, $orderby, $show_description, true, $limit, $show_updated); +} + +/** + * Gets the links associated with category n and display rating stars/chars. + * + * @since 0.71 + * @deprecated 2.1 + * @deprecated Use get_bookmarks() + * @see get_bookmarks() + * + * @param int $category The category to use. If no category supplied uses all + * @param string $before The html to output before the link + * @param string $after The html to output after the link + * @param string $between The html to output between the link/image and its description. Not used if no image or show_images == true + * @param bool $show_images Whether to show images (if defined). + * @param string $orderby The order to output the links. E.g. 'id', 'name', 'url', + * 'description', or 'rating'. Or maybe owner. If you start the name with an + * underscore the order will be reversed. You can also specify 'rand' as the + * order which will return links in a random order. + * @param bool $show_description Whether to show the description if show_images=false/not defined. + * @param string $limit Limit to X entries. If not specified, all entries are shown. + * @param int $show_updated Whether to show last updated timestamp + */ +function get_links_withrating($category = -1, $before = '', $after = '
                  ', $between = " ", $show_images = true, + $orderby = 'id', $show_description = true, $limit = -1, $show_updated = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmarks()' ); + + get_links($category, $before, $after, $between, $show_images, $orderby, $show_description, true, $limit, $show_updated); +} + +/** + * Gets the auto_toggle setting. + * + * @since 0.71 + * @deprecated 2.1 + * @deprecated No alternative function available + * + * @param int $id The category to get. If no category supplied uses 0 + * @return int Only returns 0. + */ +function get_autotoggle($id = 0) { + _deprecated_function( __FUNCTION__, '2.1' ); + return 0; +} + +/** + * @since 0.71 + * @deprecated 2.1 + * @deprecated Use wp_list_categories() + * @see wp_list_categories() + * + * @param int $optionall + * @param string $all + * @param string $sort_column + * @param string $sort_order + * @param string $file + * @param bool $list + * @param int $optiondates + * @param int $optioncount + * @param int $hide_empty + * @param int $use_desc_for_title + * @param bool $children + * @param int $child_of + * @param int $categories + * @param int $recurse + * @param string $feed + * @param string $feed_image + * @param string $exclude + * @param bool $hierarchical + * @return unknown + */ +function list_cats($optionall = 1, $all = 'All', $sort_column = 'ID', $sort_order = 'asc', $file = '', $list = true, $optiondates = 0, + $optioncount = 0, $hide_empty = 1, $use_desc_for_title = 1, $children=false, $child_of=0, $categories=0, + $recurse=0, $feed = '', $feed_image = '', $exclude = '', $hierarchical=false) { + _deprecated_function( __FUNCTION__, '2.1', 'wp_list_categories()' ); + + $query = compact('optionall', 'all', 'sort_column', 'sort_order', 'file', 'list', 'optiondates', 'optioncount', 'hide_empty', 'use_desc_for_title', 'children', + 'child_of', 'categories', 'recurse', 'feed', 'feed_image', 'exclude', 'hierarchical'); + return wp_list_cats($query); +} + +/** + * @since 1.2 + * @deprecated 2.1 + * @deprecated Use wp_list_categories() + * @see wp_list_categories() + * + * @param string|array $args + * @return unknown + */ +function wp_list_cats($args = '') { + _deprecated_function( __FUNCTION__, '2.1', 'wp_list_categories()' ); + + $r = wp_parse_args( $args ); + + // Map to new names. + if ( isset($r['optionall']) && isset($r['all'])) + $r['show_option_all'] = $r['all']; + if ( isset($r['sort_column']) ) + $r['orderby'] = $r['sort_column']; + if ( isset($r['sort_order']) ) + $r['order'] = $r['sort_order']; + if ( isset($r['optiondates']) ) + $r['show_last_update'] = $r['optiondates']; + if ( isset($r['optioncount']) ) + $r['show_count'] = $r['optioncount']; + if ( isset($r['list']) ) + $r['style'] = $r['list'] ? 'list' : 'break'; + $r['title_li'] = ''; + + return wp_list_categories($r); +} + +/** + * @since 0.71 + * @deprecated 2.1 + * @deprecated Use wp_dropdown_categories() + * @see wp_dropdown_categories() + * + * @param int $optionall + * @param string $all + * @param string $orderby + * @param string $order + * @param int $show_last_update + * @param int $show_count + * @param int $hide_empty + * @param bool $optionnone + * @param int $selected + * @param int $exclude + * @return unknown + */ +function dropdown_cats($optionall = 1, $all = 'All', $orderby = 'ID', $order = 'asc', + $show_last_update = 0, $show_count = 0, $hide_empty = 1, $optionnone = false, + $selected = 0, $exclude = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'wp_dropdown_categories()' ); + + $show_option_all = ''; + if ( $optionall ) + $show_option_all = $all; + + $show_option_none = ''; + if ( $optionnone ) + $show_option_none = __('None'); + + $vars = compact('show_option_all', 'show_option_none', 'orderby', 'order', + 'show_last_update', 'show_count', 'hide_empty', 'selected', 'exclude'); + $query = add_query_arg($vars, ''); + return wp_dropdown_categories($query); +} + +/** + * @since 1.2 + * @deprecated 2.1 + * @deprecated Use wp_list_authors() + * @see wp_list_authors() + * + * @param bool $optioncount + * @param bool $exclude_admin + * @param bool $show_fullname + * @param bool $hide_empty + * @param string $feed + * @param string $feed_image + * @return unknown + */ +function list_authors($optioncount = false, $exclude_admin = true, $show_fullname = false, $hide_empty = true, $feed = '', $feed_image = '') { + _deprecated_function( __FUNCTION__, '2.1', 'wp_list_authors()' ); + + $args = compact('optioncount', 'exclude_admin', 'show_fullname', 'hide_empty', 'feed', 'feed_image'); + return wp_list_authors($args); +} + +/** + * @since 1.0.1 + * @deprecated 2.1 + * @deprecated Use wp_get_post_categories() + * @see wp_get_post_categories() + * + * @param int $blogid Not Used + * @param int $post_ID + * @return unknown + */ +function wp_get_post_cats($blogid = '1', $post_ID = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'wp_get_post_categories()' ); + return wp_get_post_categories($post_ID); +} + +/** + * Sets the categories that the post id belongs to. + * + * @since 1.0.1 + * @deprecated 2.1 + * @deprecated Use wp_set_post_categories() + * @see wp_set_post_categories() + * + * @param int $blogid Not used + * @param int $post_ID + * @param array $post_categories + * @return unknown + */ +function wp_set_post_cats($blogid = '1', $post_ID = 0, $post_categories = array()) { + _deprecated_function( __FUNCTION__, '2.1', 'wp_set_post_categories()' ); + return wp_set_post_categories($post_ID, $post_categories); +} + +/** + * @since 0.71 + * @deprecated 2.1 + * @deprecated Use wp_get_archives() + * @see wp_get_archives() + * + * @param string $type + * @param string $limit + * @param string $format + * @param string $before + * @param string $after + * @param bool $show_post_count + * @return unknown + */ +function get_archives($type='', $limit='', $format='html', $before = '', $after = '', $show_post_count = false) { + _deprecated_function( __FUNCTION__, '2.1', 'wp_get_archives()' ); + $args = compact('type', 'limit', 'format', 'before', 'after', 'show_post_count'); + return wp_get_archives($args); +} + +/** + * Returns or Prints link to the author's posts. + * + * @since 1.2 + * @deprecated 2.1 + * @deprecated Use get_author_posts_url() + * @see get_author_posts_url() + * + * @param bool $echo + * @param int $author_id + * @param string $author_nicename Optional. + * @return string|null + */ +function get_author_link($echo, $author_id, $author_nicename = '') { + _deprecated_function( __FUNCTION__, '2.1', 'get_author_posts_url()' ); + + $link = get_author_posts_url($author_id, $author_nicename); + + if ( $echo ) + echo $link; + return $link; +} + +/** + * Print list of pages based on arguments. + * + * @since 0.71 + * @deprecated 2.1 + * @deprecated Use wp_link_pages() + * @see wp_link_pages() + * + * @param string $before + * @param string $after + * @param string $next_or_number + * @param string $nextpagelink + * @param string $previouspagelink + * @param string $pagelink + * @param string $more_file + * @return string + */ +function link_pages($before='
                  ', $after='
                  ', $next_or_number='number', $nextpagelink='next page', $previouspagelink='previous page', + $pagelink='%', $more_file='') { + _deprecated_function( __FUNCTION__, '2.1', 'wp_link_pages()' ); + + $args = compact('before', 'after', 'next_or_number', 'nextpagelink', 'previouspagelink', 'pagelink', 'more_file'); + return wp_link_pages($args); +} + +/** + * Get value based on option. + * + * @since 0.71 + * @deprecated 2.1 + * @deprecated Use get_option() + * @see get_option() + * + * @param string $option + * @return string + */ +function get_settings($option) { + _deprecated_function( __FUNCTION__, '2.1', 'get_option()' ); + + return get_option($option); +} + +/** + * Print the permalink of the current post in the loop. + * + * @since 0.71 + * @deprecated 1.2 + * @deprecated Use the_permalink() + * @see the_permalink() + */ +function permalink_link() { + _deprecated_function( __FUNCTION__, '1.2', 'the_permalink()' ); + the_permalink(); +} + +/** + * Print the permalink to the RSS feed. + * + * @since 0.71 + * @deprecated 2.3 + * @deprecated Use the_permalink_rss() + * @see the_permalink_rss() + * + * @param string $deprecated + */ +function permalink_single_rss($deprecated = '') { + _deprecated_function( __FUNCTION__, '2.3', 'the_permalink_rss()' ); + the_permalink_rss(); +} + +/** + * Gets the links associated with category. + * + * @see get_links() for argument information that can be used in $args + * @since 1.0.1 + * @deprecated 2.1 + * @deprecated Use wp_list_bookmarks() + * @see wp_list_bookmarks() + * + * @param string $args a query string + * @return null|string + */ +function wp_get_links($args = '') { + _deprecated_function( __FUNCTION__, '2.1', 'wp_list_bookmarks()' ); + + if ( strpos( $args, '=' ) === false ) { + $cat_id = $args; + $args = add_query_arg( 'category', $cat_id, $args ); + } + + $defaults = array( + 'after' => '
                  ', + 'before' => '', + 'between' => ' ', + 'categorize' => 0, + 'category' => '', + 'echo' => true, + 'limit' => -1, + 'orderby' => 'name', + 'show_description' => true, + 'show_images' => true, + 'show_rating' => false, + 'show_updated' => true, + 'title_li' => '', + ); + + $r = wp_parse_args( $args, $defaults ); + + return wp_list_bookmarks($r); +} + +/** + * Gets the links associated with category by id. + * + * @since 0.71 + * @deprecated 2.1 + * @deprecated Use get_bookmarks() + * @see get_bookmarks() + * + * @param int $category The category to use. If no category supplied uses all + * @param string $before the html to output before the link + * @param string $after the html to output after the link + * @param string $between the html to output between the link/image and its description. + * Not used if no image or show_images == true + * @param bool $show_images whether to show images (if defined). + * @param string $orderby the order to output the links. E.g. 'id', 'name', 'url', + * 'description', or 'rating'. Or maybe owner. If you start the name with an + * underscore the order will be reversed. You can also specify 'rand' as the order + * which will return links in a random order. + * @param bool $show_description whether to show the description if show_images=false/not defined. + * @param bool $show_rating show rating stars/chars + * @param int $limit Limit to X entries. If not specified, all entries are shown. + * @param int $show_updated whether to show last updated timestamp + * @param bool $echo whether to echo the results, or return them instead + * @return null|string + */ +function get_links($category = -1, $before = '', $after = '
                  ', $between = ' ', $show_images = true, $orderby = 'name', + $show_description = true, $show_rating = false, $limit = -1, $show_updated = 1, $echo = true) { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmarks()' ); + + $order = 'ASC'; + if ( substr($orderby, 0, 1) == '_' ) { + $order = 'DESC'; + $orderby = substr($orderby, 1); + } + + if ( $category == -1 ) //get_bookmarks uses '' to signify all categories + $category = ''; + + $results = get_bookmarks(array('category' => $category, 'orderby' => $orderby, 'order' => $order, 'show_updated' => $show_updated, 'limit' => $limit)); + + if ( !$results ) + return; + + $output = ''; + + foreach ( (array) $results as $row ) { + if ( !isset($row->recently_updated) ) + $row->recently_updated = false; + $output .= $before; + if ( $show_updated && $row->recently_updated ) + $output .= get_option('links_recently_updated_prepend'); + $the_link = '#'; + if ( !empty($row->link_url) ) + $the_link = esc_url($row->link_url); + $rel = $row->link_rel; + if ( '' != $rel ) + $rel = ' rel="' . $rel . '"'; + + $desc = esc_attr(sanitize_bookmark_field('link_description', $row->link_description, $row->link_id, 'display')); + $name = esc_attr(sanitize_bookmark_field('link_name', $row->link_name, $row->link_id, 'display')); + $title = $desc; + + if ( $show_updated ) + if (substr($row->link_updated_f, 0, 2) != '00') + $title .= ' ('.__('Last updated') . ' ' . date(get_option('links_updated_date_format'), $row->link_updated_f + (get_option('gmt_offset') * HOUR_IN_SECONDS)) . ')'; + + if ( '' != $title ) + $title = ' title="' . $title . '"'; + + $alt = ' alt="' . $name . '"'; + + $target = $row->link_target; + if ( '' != $target ) + $target = ' target="' . $target . '"'; + + $output .= ''; + + if ( $row->link_image != null && $show_images ) { + if ( strpos($row->link_image, 'http') !== false ) + $output .= "link_image\" $alt $title />"; + else // If it's a relative path + $output .= "link_image\" $alt $title />"; + } else { + $output .= $name; + } + + $output .= ''; + + if ( $show_updated && $row->recently_updated ) + $output .= get_option('links_recently_updated_append'); + + if ( $show_description && '' != $desc ) + $output .= $between . $desc; + + if ($show_rating) { + $output .= $between . get_linkrating($row); + } + + $output .= "$after\n"; + } // end while + + if ( !$echo ) + return $output; + echo $output; +} + +/** + * Output entire list of links by category. + * + * Output a list of all links, listed by category, using the settings in + * $wpdb->linkcategories and output it as a nested HTML unordered list. + * + * @since 1.0.1 + * @deprecated 2.1 + * @deprecated Use wp_list_bookmarks() + * @see wp_list_bookmarks() + * + * @param string $order Sort link categories by 'name' or 'id' + */ +function get_links_list($order = 'name') { + _deprecated_function( __FUNCTION__, '2.1', 'wp_list_bookmarks()' ); + + $order = strtolower($order); + + // Handle link category sorting + $direction = 'ASC'; + if ( '_' == substr($order,0,1) ) { + $direction = 'DESC'; + $order = substr($order,1); + } + + if ( !isset($direction) ) + $direction = ''; + + $cats = get_categories(array('type' => 'link', 'orderby' => $order, 'order' => $direction, 'hierarchical' => 0)); + + // Display each category + if ( $cats ) { + foreach ( (array) $cats as $cat ) { + // Handle each category. + + // Display the category name + echo '
                17. ' . apply_filters('link_category', $cat->name ) . "

                  \n\t
                    \n"; + // Call get_links() with all the appropriate params + get_links($cat->term_id, '
                  • ', "
                  • ", "\n", true, 'name', false); + + // Close the last category + echo "\n\t
                  \n
                18. \n"; + } + } +} + +/** + * Show the link to the links popup and the number of links. + * + * @since 0.71 + * @deprecated 2.1 + * @deprecated {@internal Use function instead is unknown}} + * + * @param string $text the text of the link + * @param int $width the width of the popup window + * @param int $height the height of the popup window + * @param string $file the page to open in the popup window + * @param bool $count the number of links in the db + */ +function links_popup_script($text = 'Links', $width=400, $height=400, $file='links.all.php', $count = true) { + _deprecated_function( __FUNCTION__, '2.1' ); +} + +/** + * @since 1.0.1 + * @deprecated 2.1 + * @deprecated Use sanitize_bookmark_field() + * @see sanitize_bookmark_field() + * + * @param object $link + * @return unknown + */ +function get_linkrating($link) { + _deprecated_function( __FUNCTION__, '2.1', 'sanitize_bookmark_field()' ); + return sanitize_bookmark_field('link_rating', $link->link_rating, $link->link_id, 'display'); +} + +/** + * Gets the name of category by id. + * + * @since 0.71 + * @deprecated 2.1 + * @deprecated Use get_category() + * @see get_category() + * + * @param int $id The category to get. If no category supplied uses 0 + * @return string + */ +function get_linkcatname($id = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'get_category()' ); + + $id = (int) $id; + + if ( empty($id) ) + return ''; + + $cats = wp_get_link_cats($id); + + if ( empty($cats) || ! is_array($cats) ) + return ''; + + $cat_id = (int) $cats[0]; // Take the first cat. + + $cat = get_category($cat_id); + return $cat->name; +} + +/** + * Print RSS comment feed link. + * + * @since 1.0.1 + * @deprecated 2.5 + * @deprecated Use post_comments_feed_link() + * @see post_comments_feed_link() + * + * @param string $link_text + */ +function comments_rss_link($link_text = 'Comments RSS') { + _deprecated_function( __FUNCTION__, '2.5', 'post_comments_feed_link()' ); + post_comments_feed_link($link_text); +} + +/** + * Print/Return link to category RSS2 feed. + * + * @since 1.2 + * @deprecated 2.5 + * @deprecated Use get_category_feed_link() + * @see get_category_feed_link() + * + * @param bool $echo + * @param int $cat_ID + * @return string|null + */ +function get_category_rss_link($echo = false, $cat_ID = 1) { + _deprecated_function( __FUNCTION__, '2.5', 'get_category_feed_link()' ); + + $link = get_category_feed_link($cat_ID, 'rss2'); + + if ( $echo ) + echo $link; + return $link; +} + +/** + * Print/Return link to author RSS feed. + * + * @since 1.2 + * @deprecated 2.5 + * @deprecated Use get_author_feed_link() + * @see get_author_feed_link() + * + * @param bool $echo + * @param int $author_id + * @return string|null + */ +function get_author_rss_link($echo = false, $author_id = 1) { + _deprecated_function( __FUNCTION__, '2.5', 'get_author_feed_link()' ); + + $link = get_author_feed_link($author_id); + if ( $echo ) + echo $link; + return $link; +} + +/** + * Return link to the post RSS feed. + * + * @since 1.5 + * @deprecated 2.2 + * @deprecated Use get_post_comments_feed_link() + * @see get_post_comments_feed_link() + * + * @return string + */ +function comments_rss() { + _deprecated_function( __FUNCTION__, '2.2', 'get_post_comments_feed_link()' ); + return esc_url( get_post_comments_feed_link() ); +} + +/** + * An alias of wp_create_user(). + * + * @since 2.0 + * @deprecated 2.0 + * @deprecated Use wp_create_user() + * @see wp_create_user() + * + * @param string $username The user's username. + * @param string $password The user's password. + * @param string $email The user's email (optional). + * @return int The new user's ID. + */ +function create_user($username, $password, $email) { + _deprecated_function( __FUNCTION__, '2.0', 'wp_create_user()' ); + return wp_create_user($username, $password, $email); +} + +/** + * Unused function. + * + * @deprecated 2.5 +*/ +function gzip_compression() { + _deprecated_function( __FUNCTION__, '2.5' ); + return false; +} + +/** + * Retrieve an array of comment data about comment $comment_ID. + * + * @since 0.71 + * @deprecated 2.7 + * @deprecated Use get_comment() + * @see get_comment() + * + * @param int $comment_ID The ID of the comment + * @param int $no_cache Whether to use the cache (cast to bool) + * @param bool $include_unapproved Whether to include unapproved comments + * @return array The comment data + */ +function get_commentdata( $comment_ID, $no_cache = 0, $include_unapproved = false ) { + _deprecated_function( __FUNCTION__, '2.7', 'get_comment()' ); + return get_comment($comment_ID, ARRAY_A); +} + +/** + * Retrieve the category name by the category ID. + * + * @since 0.71 + * @deprecated 2.8 + * @deprecated Use get_cat_name() + * @see get_cat_name() + * + * @param int $cat_ID Category ID + * @return string category name + */ +function get_catname( $cat_ID ) { + _deprecated_function( __FUNCTION__, '2.8', 'get_cat_name()' ); + return get_cat_name( $cat_ID ); +} + +/** + * Retrieve category children list separated before and after the term IDs. + * + * @since 1.2.0 + * @deprecated 2.8 + * @deprecated Use get_term_children() + * @see get_term_children() + * + * @param int $id Category ID to retrieve children. + * @param string $before Optional. Prepend before category term ID. + * @param string $after Optional, default is empty string. Append after category term ID. + * @param array $visited Optional. Category Term IDs that have already been added. + * @return string + */ +function get_category_children( $id, $before = '/', $after = '', $visited = array() ) { + _deprecated_function( __FUNCTION__, '2.8', 'get_term_children()' ); + if ( 0 == $id ) + return ''; + + $chain = ''; + /** TODO: consult hierarchy */ + $cat_ids = get_all_category_ids(); + foreach ( (array) $cat_ids as $cat_id ) { + if ( $cat_id == $id ) + continue; + + $category = get_category( $cat_id ); + if ( is_wp_error( $category ) ) + return $category; + if ( $category->parent == $id && !in_array( $category->term_id, $visited ) ) { + $visited[] = $category->term_id; + $chain .= $before.$category->term_id.$after; + $chain .= get_category_children( $category->term_id, $before, $after ); + } + } + return $chain; +} + +/** + * Retrieve the description of the author of the current post. + * + * @since 1.5 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('description') + * @see get_the_author_meta() + * + * @return string The author's description. + */ +function get_the_author_description() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'description\')' ); + return get_the_author_meta('description'); +} + +/** + * Display the description of the author of the current post. + * + * @since 1.0.0 + * @deprecated 2.8 + * @deprecated Use the_author_meta('description') + * @see the_author_meta() + */ +function the_author_description() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'description\')' ); + the_author_meta('description'); +} + +/** + * Retrieve the login name of the author of the current post. + * + * @since 1.5 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('login') + * @see get_the_author_meta() + * + * @return string The author's login name (username). + */ +function get_the_author_login() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'login\')' ); + return get_the_author_meta('login'); +} + +/** + * Display the login name of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8 + * @deprecated Use the_author_meta('login') + * @see the_author_meta() + */ +function the_author_login() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'login\')' ); + the_author_meta('login'); +} + +/** + * Retrieve the first name of the author of the current post. + * + * @since 1.5 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('first_name') + * @see get_the_author_meta() + * + * @return string The author's first name. + */ +function get_the_author_firstname() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'first_name\')' ); + return get_the_author_meta('first_name'); +} + +/** + * Display the first name of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8 + * @deprecated Use the_author_meta('first_name') + * @see the_author_meta() + */ +function the_author_firstname() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'first_name\')' ); + the_author_meta('first_name'); +} + +/** + * Retrieve the last name of the author of the current post. + * + * @since 1.5 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('last_name') + * @see get_the_author_meta() + * + * @return string The author's last name. + */ +function get_the_author_lastname() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'last_name\')' ); + return get_the_author_meta('last_name'); +} + +/** + * Display the last name of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8 + * @deprecated Use the_author_meta('last_name') + * @see the_author_meta() + */ +function the_author_lastname() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'last_name\')' ); + the_author_meta('last_name'); +} + +/** + * Retrieve the nickname of the author of the current post. + * + * @since 1.5 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('nickname') + * @see get_the_author_meta() + * + * @return string The author's nickname. + */ +function get_the_author_nickname() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'nickname\')' ); + return get_the_author_meta('nickname'); +} + +/** + * Display the nickname of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8 + * @deprecated Use the_author_meta('nickname') + * @see the_author_meta() + */ +function the_author_nickname() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'nickname\')' ); + the_author_meta('nickname'); +} + +/** + * Retrieve the email of the author of the current post. + * + * @since 1.5 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('email') + * @see get_the_author_meta() + * + * @return string The author's username. + */ +function get_the_author_email() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'email\')' ); + return get_the_author_meta('email'); +} + +/** + * Display the email of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8 + * @deprecated Use the_author_meta('email') + * @see the_author_meta() + */ +function the_author_email() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'email\')' ); + the_author_meta('email'); +} + +/** + * Retrieve the ICQ number of the author of the current post. + * + * @since 1.5 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('icq') + * @see get_the_author_meta() + * + * @return string The author's ICQ number. + */ +function get_the_author_icq() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'icq\')' ); + return get_the_author_meta('icq'); +} + +/** + * Display the ICQ number of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8 + * @deprecated Use the_author_meta('icq') + * @see the_author_meta() + */ +function the_author_icq() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'icq\')' ); + the_author_meta('icq'); +} + +/** + * Retrieve the Yahoo! IM name of the author of the current post. + * + * @since 1.5 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('yim') + * @see get_the_author_meta() + * + * @return string The author's Yahoo! IM name. + */ +function get_the_author_yim() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'yim\')' ); + return get_the_author_meta('yim'); +} + +/** + * Display the Yahoo! IM name of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8 + * @deprecated Use the_author_meta('yim') + * @see the_author_meta() + */ +function the_author_yim() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'yim\')' ); + the_author_meta('yim'); +} + +/** + * Retrieve the MSN address of the author of the current post. + * + * @since 1.5 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('msn') + * @see get_the_author_meta() + * + * @return string The author's MSN address. + */ +function get_the_author_msn() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'msn\')' ); + return get_the_author_meta('msn'); +} + +/** + * Display the MSN address of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8 + * @deprecated Use the_author_meta('msn') + * @see the_author_meta() + */ +function the_author_msn() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'msn\')' ); + the_author_meta('msn'); +} + +/** + * Retrieve the AIM address of the author of the current post. + * + * @since 1.5 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('aim') + * @see get_the_author_meta() + * + * @return string The author's AIM address. + */ +function get_the_author_aim() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'aim\')' ); + return get_the_author_meta('aim'); +} + +/** + * Display the AIM address of the author of the current post. + * + * @since 0.71 + * @see the_author_meta() + * @deprecated 2.8 + * @deprecated Use the_author_meta('aim') + */ +function the_author_aim() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'aim\')' ); + the_author_meta('aim'); +} + +/** + * Retrieve the specified author's preferred display name. + * + * @since 1.0.0 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('display_name') + * @see get_the_author_meta() + * + * @param int $auth_id The ID of the author. + * @return string The author's display name. + */ +function get_author_name( $auth_id = false ) { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'display_name\')' ); + return get_the_author_meta('display_name', $auth_id); +} + +/** + * Retrieve the URL to the home page of the author of the current post. + * + * @since 1.5 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('url') + * @see get_the_author_meta() + * + * @return string The URL to the author's page. + */ +function get_the_author_url() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'url\')' ); + return get_the_author_meta('url'); +} + +/** + * Display the URL to the home page of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8 + * @deprecated Use the_author_meta('url') + * @see the_author_meta() + */ +function the_author_url() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'url\')' ); + the_author_meta('url'); +} + +/** + * Retrieve the ID of the author of the current post. + * + * @since 1.5 + * @deprecated 2.8 + * @deprecated Use get_the_author_meta('ID') + * @see get_the_author_meta() + * + * @return int The author's ID. + */ +function get_the_author_ID() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'ID\')' ); + return get_the_author_meta('ID'); +} + +/** + * Display the ID of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8 + * @deprecated Use the_author_meta('ID') + * @see the_author_meta() +*/ +function the_author_ID() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'ID\')' ); + the_author_meta('ID'); +} + +/** + * Display the post content for the feed. + * + * For encoding the html or the $encode_html parameter, there are three possible + * values. '0' will make urls footnotes and use make_url_footnote(). '1' will + * encode special characters and automatically display all of the content. The + * value of '2' will strip all HTML tags from the content. + * + * Also note that you cannot set the amount of words and not set the html + * encoding. If that is the case, then the html encoding will default to 2, + * which will strip all HTML tags. + * + * To restrict the amount of words of the content, you can use the cut + * parameter. If the content is less than the amount, then there won't be any + * dots added to the end. If there is content left over, then dots will be added + * and the rest of the content will be removed. + * + * @package WordPress + * @subpackage Feed + * @since 0.71 + * @uses apply_filters() Calls 'the_content_rss' on the content before processing. + * + * @deprecated 2.9.0 + * @deprecated Use the_content_feed() + * @see the_content_feed() + * + * @param string $more_link_text Optional. Text to display when more content is available but not displayed. + * @param int|bool $stripteaser Optional. Default is 0. + * @param string $more_file Optional. + * @param int $cut Optional. Amount of words to keep for the content. + * @param int $encode_html Optional. How to encode the content. + */ +function the_content_rss($more_link_text='(more...)', $stripteaser=0, $more_file='', $cut = 0, $encode_html = 0) { + _deprecated_function( __FUNCTION__, '2.9', 'the_content_feed' ); + $content = get_the_content($more_link_text, $stripteaser); + $content = apply_filters('the_content_rss', $content); + if ( $cut && !$encode_html ) + $encode_html = 2; + if ( 1== $encode_html ) { + $content = esc_html($content); + $cut = 0; + } elseif ( 0 == $encode_html ) { + $content = make_url_footnote($content); + } elseif ( 2 == $encode_html ) { + $content = strip_tags($content); + } + if ( $cut ) { + $blah = explode(' ', $content); + if ( count($blah) > $cut ) { + $k = $cut; + $use_dotdotdot = 1; + } else { + $k = count($blah); + $use_dotdotdot = 0; + } + + /** @todo Check performance, might be faster to use array slice instead. */ + for ( $i=0; $i<$k; $i++ ) + $excerpt .= $blah[$i].' '; + $excerpt .= ($use_dotdotdot) ? '...' : ''; + $content = $excerpt; + } + $content = str_replace(']]>', ']]>', $content); + echo $content; +} + +/** + * Strip HTML and put links at the bottom of stripped content. + * + * Searches for all of the links, strips them out of the content, and places + * them at the bottom of the content with numbers. + * + * @since 0.71 + * @deprecated 2.9.0 + * + * @param string $content Content to get links + * @return string HTML stripped out of content with links at the bottom. + */ +function make_url_footnote( $content ) { + _deprecated_function( __FUNCTION__, '2.9', '' ); + preg_match_all( '/(.+?)<\/a>/', $content, $matches ); + $links_summary = "\n"; + for ( $i=0; $ipost_type) || !$url = wp_get_attachment_url($_post->ID) ) + return __('Missing Attachment'); + + if ( $permalink ) + $url = get_attachment_link($_post->ID); + + $post_title = esc_attr($_post->post_title); + + $innerHTML = get_attachment_innerHTML($_post->ID, $fullsize, $max_dims); + return "$innerHTML"; +} + +/** + * Retrieve icon URL and Path. + * + * @since 2.1.0 + * @deprecated 2.5.0 + * @deprecated Use wp_get_attachment_image_src() + * @see wp_get_attachment_image_src() + * + * @param int $id Optional. Post ID. + * @param bool $fullsize Optional, default to false. Whether to have full image. + * @return array Icon URL and full path to file, respectively. + */ +function get_attachment_icon_src( $id = 0, $fullsize = false ) { + _deprecated_function( __FUNCTION__, '2.5', 'wp_get_attachment_image_src()' ); + $id = (int) $id; + if ( !$post = get_post($id) ) + return false; + + $file = get_attached_file( $post->ID ); + + if ( !$fullsize && $src = wp_get_attachment_thumb_url( $post->ID ) ) { + // We have a thumbnail desired, specified and existing + + $src_file = basename($src); + $class = 'attachmentthumb'; + } elseif ( wp_attachment_is_image( $post->ID ) ) { + // We have an image without a thumbnail + + $src = wp_get_attachment_url( $post->ID ); + $src_file = & $file; + $class = 'attachmentimage'; + } elseif ( $src = wp_mime_type_icon( $post->ID ) ) { + // No thumb, no image. We'll look for a mime-related icon instead. + + $icon_dir = apply_filters( 'icon_dir', get_template_directory() . '/images' ); + $src_file = $icon_dir . '/' . basename($src); + } + + if ( !isset($src) || !$src ) + return false; + + return array($src, $src_file); +} + +/** + * Retrieve HTML content of icon attachment image element. + * + * @since 2.0.0 + * @deprecated 2.5.0 + * @deprecated Use wp_get_attachment_image() + * @see wp_get_attachment_image() + * + * @param int $id Optional. Post ID. + * @param bool $fullsize Optional, default to false. Whether to have full size image. + * @param array $max_dims Optional. Dimensions of image. + * @return string HTML content. + */ +function get_attachment_icon( $id = 0, $fullsize = false, $max_dims = false ) { + _deprecated_function( __FUNCTION__, '2.5', 'wp_get_attachment_image()' ); + $id = (int) $id; + if ( !$post = get_post($id) ) + return false; + + if ( !$src = get_attachment_icon_src( $post->ID, $fullsize ) ) + return false; + + list($src, $src_file) = $src; + + // Do we need to constrain the image? + if ( ($max_dims = apply_filters('attachment_max_dims', $max_dims)) && file_exists($src_file) ) { + + $imagesize = getimagesize($src_file); + + if (($imagesize[0] > $max_dims[0]) || $imagesize[1] > $max_dims[1] ) { + $actual_aspect = $imagesize[0] / $imagesize[1]; + $desired_aspect = $max_dims[0] / $max_dims[1]; + + if ( $actual_aspect >= $desired_aspect ) { + $height = $actual_aspect * $max_dims[0]; + $constraint = "width='{$max_dims[0]}' "; + $post->iconsize = array($max_dims[0], $height); + } else { + $width = $max_dims[1] / $actual_aspect; + $constraint = "height='{$max_dims[1]}' "; + $post->iconsize = array($width, $max_dims[1]); + } + } else { + $post->iconsize = array($imagesize[0], $imagesize[1]); + $constraint = ''; + } + } else { + $constraint = ''; + } + + $post_title = esc_attr($post->post_title); + + $icon = "$post_title"; + + return apply_filters( 'attachment_icon', $icon, $post->ID ); +} + +/** + * Retrieve HTML content of image element. + * + * @since 2.0.0 + * @deprecated 2.5.0 + * @deprecated Use wp_get_attachment_image() + * @see wp_get_attachment_image() + * + * @param int $id Optional. Post ID. + * @param bool $fullsize Optional, default to false. Whether to have full size image. + * @param array $max_dims Optional. Dimensions of image. + * @return string + */ +function get_attachment_innerHTML($id = 0, $fullsize = false, $max_dims = false) { + _deprecated_function( __FUNCTION__, '2.5', 'wp_get_attachment_image()' ); + $id = (int) $id; + if ( !$post = get_post($id) ) + return false; + + if ( $innerHTML = get_attachment_icon($post->ID, $fullsize, $max_dims)) + return $innerHTML; + + $innerHTML = esc_attr($post->post_title); + + return apply_filters('attachment_innerHTML', $innerHTML, $post->ID); +} + +/** + * Retrieve bookmark data based on ID. + * + * @since 2.0.0 + * @deprecated 2.1.0 + * @deprecated Use get_bookmark() + * @see get_bookmark() + * + * @param int $bookmark_id ID of link + * @param string $output OBJECT, ARRAY_N, or ARRAY_A + * @return object|array + */ +function get_link($bookmark_id, $output = OBJECT, $filter = 'raw') { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmark()' ); + return get_bookmark($bookmark_id, $output, $filter); +} + +/** + * Performs esc_url() for database or redirect usage. + * + * @since 2.3.1 + * @deprecated 2.8.0 + * @deprecated Use esc_url_raw() + * @see esc_url_raw() + * + * @param string $url The URL to be cleaned. + * @param array $protocols An array of acceptable protocols. + * @return string The cleaned URL. + */ +function sanitize_url( $url, $protocols = null ) { + _deprecated_function( __FUNCTION__, '2.8', 'esc_url_raw()' ); + return esc_url_raw( $url, $protocols ); +} + +/** + * Checks and cleans a URL. + * + * A number of characters are removed from the URL. If the URL is for displaying + * (the default behaviour) ampersands are also replaced. The 'clean_url' filter + * is applied to the returned cleaned URL. + * + * @since 1.2.0 + * @deprecated 3.0.0 + * @deprecated Use esc_url() + * @see Alias for esc_url() + * + * @param string $url The URL to be cleaned. + * @param array $protocols Optional. An array of acceptable protocols. + * @param string $context Optional. How the URL will be used. Default is 'display'. + * @return string The cleaned $url after the 'clean_url' filter is applied. + */ +function clean_url( $url, $protocols = null, $context = 'display' ) { + if ( $context == 'db' ) + _deprecated_function( 'clean_url( $context = \'db\' )', '3.0', 'esc_url_raw()' ); + else + _deprecated_function( __FUNCTION__, '3.0', 'esc_url()' ); + return esc_url( $url, $protocols, $context ); +} + +/** + * Escape single quotes, specialchar double quotes, and fix line endings. + * + * The filter 'js_escape' is also applied by esc_js() + * + * @since 2.0.4 + * @deprecated 2.8.0 + * @deprecated Use esc_js() + * @see esc_js() + * + * @param string $text The text to be escaped. + * @return string Escaped text. + */ +function js_escape( $text ) { + _deprecated_function( __FUNCTION__, '2.8', 'esc_js()' ); + return esc_js( $text ); +} + +/** + * Escaping for HTML blocks. + * + * @deprecated 2.8.0 + * @deprecated Use esc_html() + * @see esc_html() + */ +function wp_specialchars( $string, $quote_style = ENT_NOQUOTES, $charset = false, $double_encode = false ) { + _deprecated_function( __FUNCTION__, '2.8', 'esc_html()' ); + if ( func_num_args() > 1 ) { // Maintain backwards compat for people passing additional args + $args = func_get_args(); + return call_user_func_array( '_wp_specialchars', $args ); + } else { + return esc_html( $string ); + } +} + +/** + * Escaping for HTML attributes. + * + * @since 2.0.6 + * @deprecated 2.8.0 + * @deprecated Use esc_attr() + * @see esc_attr() + * + * @param string $text + * @return string + */ +function attribute_escape( $text ) { + _deprecated_function( __FUNCTION__, '2.8', 'esc_attr()' ); + return esc_attr( $text ); +} + +/** + * Register widget for sidebar with backwards compatibility. + * + * Allows $name to be an array that accepts either three elements to grab the + * first element and the third for the name or just uses the first element of + * the array for the name. + * + * Passes to {@link wp_register_sidebar_widget()} after argument list and + * backwards compatibility is complete. + * + * @since 2.2.0 + * @deprecated 2.8.0 + * @deprecated Use wp_register_sidebar_widget() + * @see wp_register_sidebar_widget() + * + * @param string|int $name Widget ID. + * @param callback $output_callback Run when widget is called. + * @param string $classname Classname widget option. + * @param mixed $params,... Widget parameters. + */ +function register_sidebar_widget($name, $output_callback, $classname = '') { + _deprecated_function( __FUNCTION__, '2.8', 'wp_register_sidebar_widget()' ); + // Compat + if ( is_array($name) ) { + if ( count($name) == 3 ) + $name = sprintf($name[0], $name[2]); + else + $name = $name[0]; + } + + $id = sanitize_title($name); + $options = array(); + if ( !empty($classname) && is_string($classname) ) + $options['classname'] = $classname; + $params = array_slice(func_get_args(), 2); + $args = array($id, $name, $output_callback, $options); + if ( !empty($params) ) + $args = array_merge($args, $params); + + call_user_func_array('wp_register_sidebar_widget', $args); +} + +/** + * Alias of {@link wp_unregister_sidebar_widget()}. + * + * @since 2.2.0 + * @deprecated 2.8.0 + * @deprecated Use wp_unregister_sidebar_widget() + * @see wp_unregister_sidebar_widget() + * + * @param int|string $id Widget ID. + */ +function unregister_sidebar_widget($id) { + _deprecated_function( __FUNCTION__, '2.8', 'wp_unregister_sidebar_widget()' ); + return wp_unregister_sidebar_widget($id); +} + +/** + * Registers widget control callback for customizing options. + * + * Allows $name to be an array that accepts either three elements to grab the + * first element and the third for the name or just uses the first element of + * the array for the name. + * + * Passes to {@link wp_register_widget_control()} after the argument list has + * been compiled. + * + * @since 2.2.0 + * @deprecated 2.8.0 + * @deprecated Use wp_register_widget_control() + * @see wp_register_widget_control() + * + * @param int|string $name Sidebar ID. + * @param callback $control_callback Widget control callback to display and process form. + * @param int $width Widget width. + * @param int $height Widget height. + */ +function register_widget_control($name, $control_callback, $width = '', $height = '') { + _deprecated_function( __FUNCTION__, '2.8', 'wp_register_widget_control()' ); + // Compat + if ( is_array($name) ) { + if ( count($name) == 3 ) + $name = sprintf($name[0], $name[2]); + else + $name = $name[0]; + } + + $id = sanitize_title($name); + $options = array(); + if ( !empty($width) ) + $options['width'] = $width; + if ( !empty($height) ) + $options['height'] = $height; + $params = array_slice(func_get_args(), 4); + $args = array($id, $name, $control_callback, $options); + if ( !empty($params) ) + $args = array_merge($args, $params); + + call_user_func_array('wp_register_widget_control', $args); +} + +/** + * Alias of {@link wp_unregister_widget_control()}. + * + * @since 2.2.0 + * @deprecated 2.8.0 + * @deprecated Use wp_unregister_widget_control() + * @see wp_unregister_widget_control() + * + * @param int|string $id Widget ID. + */ +function unregister_widget_control($id) { + _deprecated_function( __FUNCTION__, '2.8', 'wp_unregister_widget_control()' ); + return wp_unregister_widget_control($id); +} + +/** + * Remove user meta data. + * + * @since 2.0.0 + * @deprecated 3.0.0 + * @deprecated Use delete_user_meta() + * @see delete_user_meta() + * + * @param int $user_id User ID. + * @param string $meta_key Metadata key. + * @param mixed $meta_value Metadata value. + * @return bool True deletion completed and false if user_id is not a number. + */ +function delete_usermeta( $user_id, $meta_key, $meta_value = '' ) { + _deprecated_function( __FUNCTION__, '3.0', 'delete_user_meta()' ); + global $wpdb; + if ( !is_numeric( $user_id ) ) + return false; + $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key); + + if ( is_array($meta_value) || is_object($meta_value) ) + $meta_value = serialize($meta_value); + $meta_value = trim( $meta_value ); + + $cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) ); + + if ( $cur && $cur->umeta_id ) + do_action( 'delete_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value ); + + if ( ! empty($meta_value) ) + $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s AND meta_value = %s", $user_id, $meta_key, $meta_value) ); + else + $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) ); + + clean_user_cache( $user_id ); + wp_cache_delete( $user_id, 'user_meta' ); + + if ( $cur && $cur->umeta_id ) + do_action( 'deleted_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value ); + + return true; +} + +/** + * Retrieve user metadata. + * + * If $user_id is not a number, then the function will fail over with a 'false' + * boolean return value. Other returned values depend on whether there is only + * one item to be returned, which be that single item type. If there is more + * than one metadata value, then it will be list of metadata values. + * + * @since 2.0.0 + * @deprecated 3.0.0 + * @deprecated Use get_user_meta() + * @see get_user_meta() + * + * @param int $user_id User ID + * @param string $meta_key Optional. Metadata key. + * @return mixed + */ +function get_usermeta( $user_id, $meta_key = '' ) { + _deprecated_function( __FUNCTION__, '3.0', 'get_user_meta()' ); + global $wpdb; + $user_id = (int) $user_id; + + if ( !$user_id ) + return false; + + if ( !empty($meta_key) ) { + $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key); + $user = wp_cache_get($user_id, 'users'); + // Check the cached user object + if ( false !== $user && isset($user->$meta_key) ) + $metas = array($user->$meta_key); + else + $metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) ); + } else { + $metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM $wpdb->usermeta WHERE user_id = %d", $user_id) ); + } + + if ( empty($metas) ) { + if ( empty($meta_key) ) + return array(); + else + return ''; + } + + $metas = array_map('maybe_unserialize', $metas); + + if ( count($metas) == 1 ) + return $metas[0]; + else + return $metas; +} + +/** + * Update metadata of user. + * + * There is no need to serialize values, they will be serialized if it is + * needed. The metadata key can only be a string with underscores. All else will + * be removed. + * + * Will remove the metadata, if the meta value is empty. + * + * @since 2.0.0 + * @deprecated 3.0.0 + * @deprecated Use update_user_meta() + * @see update_user_meta() + * + * @param int $user_id User ID + * @param string $meta_key Metadata key. + * @param mixed $meta_value Metadata value. + * @return bool True on successful update, false on failure. + */ +function update_usermeta( $user_id, $meta_key, $meta_value ) { + _deprecated_function( __FUNCTION__, '3.0', 'update_user_meta()' ); + global $wpdb; + if ( !is_numeric( $user_id ) ) + return false; + $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key); + + /** @todo Might need fix because usermeta data is assumed to be already escaped */ + if ( is_string($meta_value) ) + $meta_value = stripslashes($meta_value); + $meta_value = maybe_serialize($meta_value); + + if (empty($meta_value)) { + return delete_usermeta($user_id, $meta_key); + } + + $cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) ); + + if ( $cur ) + do_action( 'update_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value ); + + if ( !$cur ) + $wpdb->insert($wpdb->usermeta, compact('user_id', 'meta_key', 'meta_value') ); + else if ( $cur->meta_value != $meta_value ) + $wpdb->update($wpdb->usermeta, compact('meta_value'), compact('user_id', 'meta_key') ); + else + return false; + + clean_user_cache( $user_id ); + wp_cache_delete( $user_id, 'user_meta' ); + + if ( !$cur ) + do_action( 'added_usermeta', $wpdb->insert_id, $user_id, $meta_key, $meta_value ); + else + do_action( 'updated_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value ); + + return true; +} + +/** + * Get users for the blog. + * + * For setups that use the multi-blog feature. Can be used outside of the + * multi-blog feature. + * + * @since 2.2.0 + * @deprecated 3.1.0 + * @uses $wpdb WordPress database object for queries + * @uses $blog_id The Blog id of the blog for those that use more than one blog + * + * @param int $id Blog ID. + * @return array List of users that are part of that Blog ID + */ +function get_users_of_blog( $id = '' ) { + _deprecated_function( __FUNCTION__, '3.1', 'get_users()' ); + + global $wpdb, $blog_id; + if ( empty($id) ) + $id = (int) $blog_id; + $blog_prefix = $wpdb->get_blog_prefix($id); + $users = $wpdb->get_results( "SELECT user_id, user_id AS ID, user_login, display_name, user_email, meta_value FROM $wpdb->users, $wpdb->usermeta WHERE {$wpdb->users}.ID = {$wpdb->usermeta}.user_id AND meta_key = '{$blog_prefix}capabilities' ORDER BY {$wpdb->usermeta}.user_id" ); + return $users; +} + +/** + * Enable/disable automatic general feed link outputting. + * + * @since 2.8.0 + * @deprecated 3.0.0 + * @deprecated Use add_theme_support( 'automatic-feed-links' ) + * + * @param boolean $add Optional, default is true. Add or remove links. Defaults to true. + */ +function automatic_feed_links( $add = true ) { + _deprecated_function( __FUNCTION__, '3.0', "add_theme_support( 'automatic-feed-links' )" ); + + if ( $add ) + add_theme_support( 'automatic-feed-links' ); + else + remove_action( 'wp_head', 'feed_links_extra', 3 ); // Just do this yourself in 3.0+ +} + +/** + * Retrieve user data based on field. + * + * @since 1.5.0 + * @deprecated 3.0.0 + * @deprecated Use get_the_author_meta() + * @see get_the_author_meta() + */ +function get_profile( $field, $user = false ) { + _deprecated_function( __FUNCTION__, '3.0', 'get_the_author_meta()' ); + if ( $user ) { + $user = get_user_by( 'login', $user ); + $user = $user->ID; + } + return get_the_author_meta( $field, $user ); +} + +/** + * Number of posts user has written. + * + * @since 0.71 + * @deprecated 3.0.0 + * @deprecated Use count_user_posts() + * @see count_user_posts() + */ +function get_usernumposts( $userid ) { + _deprecated_function( __FUNCTION__, '3.0', 'count_user_posts()' ); + return count_user_posts( $userid ); +} + +/** + * Callback used to change %uXXXX to &#YYY; syntax + * + * @since 2.8.0 + * @access private + * @deprecated 3.0.0 + * + * @param array $matches Single Match + * @return string An HTML entity + */ +function funky_javascript_callback($matches) { + return "&#".base_convert($matches[1],16,10).";"; +} + +/** + * Fixes javascript bugs in browsers. + * + * Converts unicode characters to HTML numbered entities. + * + * @since 1.5.0 + * @uses $is_macIE + * @uses $is_winIE + * @deprecated 3.0.0 + * + * @param string $text Text to be made safe. + * @return string Fixed text. + */ +function funky_javascript_fix($text) { + _deprecated_function( __FUNCTION__, '3.0' ); + // Fixes for browsers' javascript bugs + global $is_macIE, $is_winIE; + + if ( $is_winIE || $is_macIE ) + $text = preg_replace_callback("/\%u([0-9A-F]{4,4})/", + "funky_javascript_callback", + $text); + + return $text; +} + +/** + * Checks that the taxonomy name exists. + * + * @since 2.3.0 + * @deprecated 3.0.0 + * @deprecated Use taxonomy_exists() + * @see taxonomy_exists() + * + * @param string $taxonomy Name of taxonomy object + * @return bool Whether the taxonomy exists. + */ +function is_taxonomy( $taxonomy ) { + _deprecated_function( __FUNCTION__, '3.0', 'taxonomy_exists()' ); + return taxonomy_exists( $taxonomy ); +} + +/** + * Check if Term exists. + * + * @since 2.3.0 + * @deprecated 3.0.0 + * @deprecated Use term_exists() + * @see term_exists() + * + * @param int|string $term The term to check + * @param string $taxonomy The taxonomy name to use + * @param int $parent ID of parent term under which to confine the exists search. + * @return mixed Get the term id or Term Object, if exists. + */ +function is_term( $term, $taxonomy = '', $parent = 0 ) { + _deprecated_function( __FUNCTION__, '3.0', 'term_exists()' ); + return term_exists( $term, $taxonomy, $parent ); +} + +/** + * Is the current admin page generated by a plugin? + * + * @since 1.5.0 + * @deprecated 3.1.0 + * @deprecated Use global $plugin_page and/or get_plugin_page_hookname() hooks. + * + * @global $plugin_page + * + * @return bool + */ +function is_plugin_page() { + _deprecated_function( __FUNCTION__, '3.1' ); + + global $plugin_page; + + if ( isset($plugin_page) ) + return true; + + return false; +} + +/** + * Update the categories cache. + * + * This function does not appear to be used anymore or does not appear to be + * needed. It might be a legacy function left over from when there was a need + * for updating the category cache. + * + * @since 1.5.0 + * @deprecated 3.1.0 + * + * @return bool Always return True + */ +function update_category_cache() { + _deprecated_function( __FUNCTION__, '3.1' ); + + return true; +} + +/** + * Check for PHP timezone support + * + * @since 2.9.0 + * @deprecated 3.2.0 + * + * @return bool + */ +function wp_timezone_supported() { + _deprecated_function( __FUNCTION__, '3.2' ); + + return true; +} + +/** + * Display editor: TinyMCE, HTML, or both. + * + * @since 2.1.0 + * @deprecated 3.3.0 + * @deprecated Use wp_editor() + * @see wp_editor() + * + * @param string $content Textarea content. + * @param string $id Optional, default is 'content'. HTML ID attribute value. + * @param string $prev_id Optional, not used + * @param bool $media_buttons Optional, default is true. Whether to display media buttons. + * @param int $tab_index Optional, not used + */ +function the_editor($content, $id = 'content', $prev_id = 'title', $media_buttons = true, $tab_index = 2, $extended = true) { + _deprecated_function( __FUNCTION__, '3.3', 'wp_editor()' ); + + wp_editor( $content, $id, array( 'media_buttons' => $media_buttons ) ); + return; +} + +/** + * Perform the query to get the $metavalues array(s) needed by _fill_user and _fill_many_users + * + * @since 3.0.0 + * @deprecated 3.3.0 + * + * @param array $ids User ID numbers list. + * @return array of arrays. The array is indexed by user_id, containing $metavalues object arrays. + */ +function get_user_metavalues($ids) { + _deprecated_function( __FUNCTION__, '3.3' ); + + $objects = array(); + + $ids = array_map('intval', $ids); + foreach ( $ids as $id ) + $objects[$id] = array(); + + $metas = update_meta_cache('user', $ids); + + foreach ( $metas as $id => $meta ) { + foreach ( $meta as $key => $metavalues ) { + foreach ( $metavalues as $value ) { + $objects[$id][] = (object)array( 'user_id' => $id, 'meta_key' => $key, 'meta_value' => $value); + } + } + } + + return $objects; +} + +/** + * Sanitize every user field. + * + * If the context is 'raw', then the user object or array will get minimal santization of the int fields. + * + * @since 2.3.0 + * @deprecated 3.3.0 + * + * @param object|array $user The User Object or Array + * @param string $context Optional, default is 'display'. How to sanitize user fields. + * @return object|array The now sanitized User Object or Array (will be the same type as $user) + */ +function sanitize_user_object($user, $context = 'display') { + _deprecated_function( __FUNCTION__, '3.3' ); + + if ( is_object($user) ) { + if ( !isset($user->ID) ) + $user->ID = 0; + if ( !is_a( $user, 'WP_User' ) ) { + $vars = get_object_vars($user); + foreach ( array_keys($vars) as $field ) { + if ( is_string($user->$field) || is_numeric($user->$field) ) + $user->$field = sanitize_user_field($field, $user->$field, $user->ID, $context); + } + } + $user->filter = $context; + } else { + if ( !isset($user['ID']) ) + $user['ID'] = 0; + foreach ( array_keys($user) as $field ) + $user[$field] = sanitize_user_field($field, $user[$field], $user['ID'], $context); + $user['filter'] = $context; + } + + return $user; +} + +/** + * Get boundary post relational link. + * + * Can either be start or end post relational link. + * + * @since 2.8.0 + * @deprecated 3.3.0 + * + * @param string $title Optional. Link title format. + * @param bool $in_same_cat Optional. Whether link should be in a same category. + * @param string $excluded_categories Optional. Excluded categories IDs. + * @param bool $start Optional, default is true. Whether to display link to first or last post. + * @return string + */ +function get_boundary_post_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '', $start = true) { + _deprecated_function( __FUNCTION__, '3.3' ); + + $posts = get_boundary_post($in_same_cat, $excluded_categories, $start); + // If there is no post stop. + if ( empty($posts) ) + return; + + // Even though we limited get_posts to return only 1 item it still returns an array of objects. + $post = $posts[0]; + + if ( empty($post->post_title) ) + $post->post_title = $start ? __('First Post') : __('Last Post'); + + $date = mysql2date(get_option('date_format'), $post->post_date); + + $title = str_replace('%title', $post->post_title, $title); + $title = str_replace('%date', $date, $title); + $title = apply_filters('the_title', $title, $post->ID); + + $link = $start ? "\n"; + + $boundary = $start ? 'start' : 'end'; + return apply_filters( "{$boundary}_post_rel_link", $link ); +} + +/** + * Display relational link for the first post. + * + * @since 2.8.0 + * @deprecated 3.3.0 + * + * @param string $title Optional. Link title format. + * @param bool $in_same_cat Optional. Whether link should be in a same category. + * @param string $excluded_categories Optional. Excluded categories IDs. + */ +function start_post_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '') { + _deprecated_function( __FUNCTION__, '3.3' ); + + echo get_boundary_post_rel_link($title, $in_same_cat, $excluded_categories, true); +} + +/** + * Get site index relational link. + * + * @since 2.8.0 + * @deprecated 3.3.0 + * + * @return string + */ +function get_index_rel_link() { + _deprecated_function( __FUNCTION__, '3.3' ); + + $link = "\n"; + return apply_filters( "index_rel_link", $link ); +} + +/** + * Display relational link for the site index. + * + * @since 2.8.0 + * @deprecated 3.3.0 + */ +function index_rel_link() { + _deprecated_function( __FUNCTION__, '3.3' ); + + echo get_index_rel_link(); +} + +/** + * Get parent post relational link. + * + * @since 2.8.0 + * @deprecated 3.3.0 + * + * @param string $title Optional. Link title format. + * @return string + */ +function get_parent_post_rel_link($title = '%title') { + _deprecated_function( __FUNCTION__, '3.3' ); + + if ( ! empty( $GLOBALS['post'] ) && ! empty( $GLOBALS['post']->post_parent ) ) + $post = get_post($GLOBALS['post']->post_parent); + + if ( empty($post) ) + return; + + $date = mysql2date(get_option('date_format'), $post->post_date); + + $title = str_replace('%title', $post->post_title, $title); + $title = str_replace('%date', $date, $title); + $title = apply_filters('the_title', $title, $post->ID); + + $link = "\n"; + + return apply_filters( "parent_post_rel_link", $link ); +} + +/** + * Display relational link for parent item + * + * @since 2.8.0 + * @deprecated 3.3.0 + */ +function parent_post_rel_link($title = '%title') { + _deprecated_function( __FUNCTION__, '3.3' ); + + echo get_parent_post_rel_link($title); +} + +/** + * Add the "Dashboard"/"Visit Site" menu. + * + * @since 3.2.0 + * @deprecated 3.3.0 + */ +function wp_admin_bar_dashboard_view_site_menu( $wp_admin_bar ) { + _deprecated_function( __FUNCTION__, '3.3' ); + + $user_id = get_current_user_id(); + + if ( 0 != $user_id ) { + if ( is_admin() ) + $wp_admin_bar->add_menu( array( 'id' => 'view-site', 'title' => __( 'Visit Site' ), 'href' => home_url() ) ); + elseif ( is_multisite() ) + $wp_admin_bar->add_menu( array( 'id' => 'dashboard', 'title' => __( 'Dashboard' ), 'href' => get_dashboard_url( $user_id ) ) ); + else + $wp_admin_bar->add_menu( array( 'id' => 'dashboard', 'title' => __( 'Dashboard' ), 'href' => admin_url() ) ); + } +} + +/** + * Checks if the current user belong to a given blog. + * + * @since MU + * @deprecated 3.3.0 + * @deprecated Use is_user_member_of_blog() + * @see is_user_member_of_blog() + * + * @param int $blog_id Blog ID + * @return bool True if the current users belong to $blog_id, false if not. + */ +function is_blog_user( $blog_id = 0 ) { + _deprecated_function( __FUNCTION__, '3.3', 'is_user_member_of_blog()' ); + + return is_user_member_of_blog( get_current_user_id(), $blog_id ); +} + +/** + * Open the file handle for debugging. + * + * @since 0.71 + * @deprecated Use error_log() + * @link http://www.php.net/manual/en/function.error-log.php + * @deprecated 3.4.0 + */ +function debug_fopen( $filename, $mode ) { + _deprecated_function( __FUNCTION__, 'error_log()' ); + return false; +} + +/** + * Write contents to the file used for debugging. + * + * @since 0.71 + * @deprecated Use error_log() instead. + * @link http://www.php.net/manual/en/function.error-log.php + * @deprecated 3.4.0 + */ +function debug_fwrite( $fp, $string ) { + _deprecated_function( __FUNCTION__, 'error_log()' ); + if ( ! empty( $GLOBALS['debug'] ) ) + error_log( $string ); +} + +/** + * Close the debugging file handle. + * + * @since 0.71 + * @deprecated Use error_log() + * @link http://www.php.net/manual/en/function.error-log.php + * @deprecated 3.4.0 + */ +function debug_fclose( $fp ) { + _deprecated_function( __FUNCTION__, 'error_log()' ); +} + +/** + * Retrieve list of themes with theme data in theme directory. + * + * The theme is broken, if it doesn't have a parent theme and is missing either + * style.css and, or index.php. If the theme has a parent theme then it is + * broken, if it is missing style.css; index.php is optional. + * + * @since 1.5.0 + * @deprecated 3.4.0 + * @deprecated Use wp_get_themes() + * @see wp_get_themes() + * + * @return array Theme list with theme data. + */ +function get_themes() { + _deprecated_function( __FUNCTION__, '3.4', 'wp_get_themes()' ); + + global $wp_themes; + if ( isset( $wp_themes ) ) + return $wp_themes; + + $themes = wp_get_themes(); + $wp_themes = array(); + + foreach ( $themes as $theme ) { + $name = $theme->get('Name'); + if ( isset( $wp_themes[ $name ] ) ) + $wp_themes[ $name . '/' . $theme->get_stylesheet() ] = $theme; + else + $wp_themes[ $name ] = $theme; + } + + return $wp_themes; +} + +/** + * Retrieve theme data. + * + * @since 1.5.0 + * @deprecated 3.4.0 + * @deprecated Use wp_get_theme() + * @see wp_get_theme() + * + * @param string $theme Theme name. + * @return array|null Null, if theme name does not exist. Theme data, if exists. + */ +function get_theme( $theme ) { + _deprecated_function( __FUNCTION__, '3.4', 'wp_get_theme( $stylesheet )' ); + + $themes = get_themes(); + if ( is_array( $themes ) && array_key_exists( $theme, $themes ) ) + return $themes[ $theme ]; + return null; +} + +/** + * Retrieve current theme name. + * + * @since 1.5.0 + * @deprecated 3.4.0 + * @deprecated Use (string) wp_get_theme() + * @see wp_get_theme() + * + * @return string + */ +function get_current_theme() { + _deprecated_function( __FUNCTION__, '3.4', 'wp_get_theme()' ); + + if ( $theme = get_option( 'current_theme' ) ) + return $theme; + + return wp_get_theme()->get('Name'); +} + +/** + * Accepts matches array from preg_replace_callback in wpautop() or a string. + * + * Ensures that the contents of a <
                  >...<
                  > HTML block are not + * converted into paragraphs or line-breaks. + * + * @since 1.2.0 + * @deprecated 3.4.0 + * + * @param array|string $matches The array or string + * @return string The pre block without paragraph/line-break conversion. + */ +function clean_pre($matches) { + _deprecated_function( __FUNCTION__, '3.4' ); + + if ( is_array($matches) ) + $text = $matches[1] . $matches[2] . ""; + else + $text = $matches; + + $text = str_replace(array('
                  ', '
                  ', '
                  '), array('', '', ''), $text); + $text = str_replace('

                  ', "\n", $text); + $text = str_replace('

                  ', '', $text); + + return $text; +} + + +/** + * Add callbacks for image header display. + * + * @since 2.1.0 + * @deprecated 3.4.0 + * @deprecated Use add_theme_support('custom-header', $args) + * @see add_theme_support() + * + * @param callback $wp_head_callback Call on 'wp_head' action. + * @param callback $admin_head_callback Call on custom header administration screen. + * @param callback $admin_preview_callback Output a custom header image div on the custom header administration screen. Optional. + */ +function add_custom_image_header( $wp_head_callback, $admin_head_callback, $admin_preview_callback = '' ) { + _deprecated_function( __FUNCTION__, '3.4', 'add_theme_support( \'custom-header\', $args )' ); + $args = array( + 'wp-head-callback' => $wp_head_callback, + 'admin-head-callback' => $admin_head_callback, + ); + if ( $admin_preview_callback ) + $args['admin-preview-callback'] = $admin_preview_callback; + return add_theme_support( 'custom-header', $args ); +} + +/** + * Remove image header support. + * + * @since 3.1.0 + * @deprecated 3.4.0 + * @deprecated Use remove_theme_support('custom-header') + * @see remove_theme_support() + * + * @return bool Whether support was removed. + */ +function remove_custom_image_header() { + _deprecated_function( __FUNCTION__, '3.4', 'remove_theme_support( \'custom-header\' )' ); + return remove_theme_support( 'custom-header' ); +} + +/** + * Add callbacks for background image display. + * + * @since 3.0.0 + * @deprecated 3.4.0 + * @deprecated Use add_theme_support('custom-background, $args) + * @see add_theme_support() + * + * @param callback $wp_head_callback Call on 'wp_head' action. + * @param callback $admin_head_callback Call on custom background administration screen. + * @param callback $admin_preview_callback Output a custom background image div on the custom background administration screen. Optional. + */ +function add_custom_background( $wp_head_callback = '', $admin_head_callback = '', $admin_preview_callback = '' ) { + _deprecated_function( __FUNCTION__, '3.4', 'add_theme_support( \'custom-background\', $args )' ); + $args = array(); + if ( $wp_head_callback ) + $args['wp-head-callback'] = $wp_head_callback; + if ( $admin_head_callback ) + $args['admin-head-callback'] = $admin_head_callback; + if ( $admin_preview_callback ) + $args['admin-preview-callback'] = $admin_preview_callback; + return add_theme_support( 'custom-background', $args ); +} + +/** + * Remove custom background support. + * + * @since 3.1.0 + * @see add_custom_background() + * + * @return bool Whether support was removed. + */ +function remove_custom_background() { + _deprecated_function( __FUNCTION__, '3.4', 'remove_theme_support( \'custom-background\' )' ); + return remove_theme_support( 'custom-background' ); +} + +/** + * Retrieve theme data from parsed theme file. + * + * @since 1.5.0 + * @deprecated 3.4.0 + * @deprecated Use wp_get_theme() + * @see wp_get_theme() + * + * @param string $theme_file Theme file path. + * @return array Theme data. + */ +function get_theme_data( $theme_file ) { + _deprecated_function( __FUNCTION__, '3.4', 'wp_get_theme()' ); + $theme = new WP_Theme( basename( dirname( $theme_file ) ), dirname( dirname( $theme_file ) ) ); + + $theme_data = array( + 'Name' => $theme->get('Name'), + 'URI' => $theme->display('ThemeURI', true, false), + 'Description' => $theme->display('Description', true, false), + 'Author' => $theme->display('Author', true, false), + 'AuthorURI' => $theme->display('AuthorURI', true, false), + 'Version' => $theme->get('Version'), + 'Template' => $theme->get('Template'), + 'Status' => $theme->get('Status'), + 'Tags' => $theme->get('Tags'), + 'Title' => $theme->get('Name'), + 'AuthorName' => $theme->get('Author'), + ); + + foreach ( apply_filters( 'extra_theme_headers', array() ) as $extra_header ) { + if ( ! isset( $theme_data[ $extra_header ] ) ) + $theme_data[ $extra_header ] = $theme->get( $extra_header ); + } + + return $theme_data; +} + +/** + * Alias of update_post_cache(). + * + * @see update_post_cache() Posts and pages are the same, alias is intentional + * + * @since 1.5.1 + * @deprecated 3.4.0 + * + * @param array $pages list of page objects + */ +function update_page_cache( &$pages ) { + _deprecated_function( __FUNCTION__, '3.4', 'update_post_cache()' ); + + update_post_cache( $pages ); +} + +/** + * Will clean the page in the cache. + * + * Clean (read: delete) page from cache that matches $id. Will also clean cache + * associated with 'all_page_ids' and 'get_pages'. + * + * @since 2.0.0 + * @deprecated 3.4.0 + * + * @uses do_action() Will call the 'clean_page_cache' hook action. + * + * @param int $id Page ID to clean + */ +function clean_page_cache( $id ) { + _deprecated_function( __FUNCTION__, '3.4', 'clean_post_cache()' ); + + clean_post_cache( $id ); +} + +/** + * Retrieve nonce action "Are you sure" message. + * + * Deprecated in 3.4.1 and 3.5.0. Backported to 3.3.3. + * + * @since 2.0.4 + * @deprecated 3.4.1 + * @deprecated Use wp_nonce_ays() + * @see wp_nonce_ays() + * + * @param string $action Nonce action. + * @return string Are you sure message. + */ +function wp_explain_nonce( $action ) { + _deprecated_function( __FUNCTION__, '3.4.1', 'wp_nonce_ays()' ); + return __( 'Are you sure you want to do this?' ); +} + +/** + * Display "sticky" CSS class, if a post is sticky. + * + * @since 2.7.0 + * @deprecated 3.5.0 + * @deprecated Use post_class() + * @see post_class() + * + * @param int $post_id An optional post ID. + */ +function sticky_class( $post_id = null ) { + _deprecated_function( __FUNCTION__, '3.5', 'post_class()' ); + if ( is_sticky( $post_id ) ) + echo ' sticky'; +} + +/** + * Retrieve post ancestors. + * + * This is no longer needed as WP_Post lazy-loads the ancestors + * property with get_post_ancestors(). + * + * @since 2.3.4 + * @deprecated 3.5.0 + * @see get_post_ancestors() + */ +function _get_post_ancestors( &$post ) { + _deprecated_function( __FUNCTION__, '3.5' ); +} + +/** + * Load an image from a string, if PHP supports it. + * + * @since 2.1.0 + * @deprecated 3.5.0 + * @see wp_get_image_editor() + * + * @param string $file Filename of the image to load. + * @return resource The resulting image resource on success, Error string on failure. + */ +function wp_load_image( $file ) { + _deprecated_function( __FUNCTION__, '3.5', 'wp_get_image_editor()' ); + + if ( is_numeric( $file ) ) + $file = get_attached_file( $file ); + + if ( ! is_file( $file ) ) + return sprintf(__('File “%s” doesn’t exist?'), $file); + + if ( ! function_exists('imagecreatefromstring') ) + return __('The GD image library is not installed.'); + + // Set artificially high because GD uses uncompressed images in memory + @ini_set( 'memory_limit', apply_filters( 'image_memory_limit', WP_MAX_MEMORY_LIMIT ) ); + $image = imagecreatefromstring( file_get_contents( $file ) ); + + if ( !is_resource( $image ) ) + return sprintf(__('File “%s” is not an image.'), $file); + + return $image; +} + +/** + * Scale down an image to fit a particular size and save a new copy of the image. + * + * The PNG transparency will be preserved using the function, as well as the + * image type. If the file going in is PNG, then the resized image is going to + * be PNG. The only supported image types are PNG, GIF, and JPEG. + * + * Some functionality requires API to exist, so some PHP version may lose out + * support. This is not the fault of WordPress (where functionality is + * downgraded, not actual defects), but of your PHP version. + * + * @since 2.5.0 + * @deprecated 3.5.0 + * @see wp_get_image_editor() + * + * @param string $file Image file path. + * @param int $max_w Maximum width to resize to. + * @param int $max_h Maximum height to resize to. + * @param bool $crop Optional. Whether to crop image or resize. + * @param string $suffix Optional. File suffix. + * @param string $dest_path Optional. New image file path. + * @param int $jpeg_quality Optional, default is 90. Image quality percentage. + * @return mixed WP_Error on failure. String with new destination path. + */ +function image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $dest_path = null, $jpeg_quality = 90 ) { + _deprecated_function( __FUNCTION__, '3.5', 'wp_get_image_editor()' ); + + $editor = wp_get_image_editor( $file ); + if ( is_wp_error( $editor ) ) + return $editor; + $editor->set_quality( $jpeg_quality ); + + $resized = $editor->resize( $max_w, $max_h, $crop ); + if ( is_wp_error( $resized ) ) + return $resized; + + $dest_file = $editor->generate_filename( $suffix, $dest_path ); + $saved = $editor->save( $dest_file ); + + if ( is_wp_error( $saved ) ) + return $saved; + + return $dest_file; +} + +/** + * Retrieve a single post, based on post ID. + * + * Has categories in 'post_category' property or key. Has tags in 'tags_input' + * property or key. + * + * @since 1.0.0 + * @deprecated 3.5.0 + * @see get_post() + * + * @param int $postid Post ID. + * @param string $mode How to return result, either OBJECT, ARRAY_N, or ARRAY_A. + * @return object|array Post object or array holding post contents and information + */ +function wp_get_single_post( $postid = 0, $mode = OBJECT ) { + _deprecated_function( __FUNCTION__, '3.5', 'get_post()' ); + return get_post( $postid, $mode ); +} + +/** + * Check that the user login name and password is correct. + * + * @since 0.71 + * @deprecated 3.5.0 + * @deprecated Use wp_authenticate() + * @see wp_authenticate() + * + * @param string $user_login User name. + * @param string $user_pass User password. + * @return bool False if does not authenticate, true if username and password authenticates. + */ +function user_pass_ok($user_login, $user_pass) { + _deprecated_function( __FUNCTION__, '3.5', 'wp_authenticate()' ); + $user = wp_authenticate( $user_login, $user_pass ); + if ( is_wp_error( $user ) ) + return false; + + return true; +} + +/** + * Callback formerly fired on the save_post hook. No longer needed. + * + * @since 2.3.0 + * @deprecated 3.5.0 + */ +function _save_post_hook() {} + +/** + * Check if the installed version of GD supports particular image type + * + * @since 2.9.0 + * @deprecated 3.5.0 + * @see wp_image_editor_supports() + * + * @param string $mime_type + * @return bool + */ +function gd_edit_image_support($mime_type) { + _deprecated_function( __FUNCTION__, '3.5', 'wp_image_editor_supports()' ); + + if ( function_exists('imagetypes') ) { + switch( $mime_type ) { + case 'image/jpeg': + return (imagetypes() & IMG_JPG) != 0; + case 'image/png': + return (imagetypes() & IMG_PNG) != 0; + case 'image/gif': + return (imagetypes() & IMG_GIF) != 0; + } + } else { + switch( $mime_type ) { + case 'image/jpeg': + return function_exists('imagecreatefromjpeg'); + case 'image/png': + return function_exists('imagecreatefrompng'); + case 'image/gif': + return function_exists('imagecreatefromgif'); + } + } + return false; +} + +/** + * Converts an integer byte value to a shorthand byte value. + * + * @since 2.3.0 + * @deprecated 3.6.0 + * @deprecated Use size_format() + * + * @param int $bytes An integer byte value. + * @return string A shorthand byte value. + */ +function wp_convert_bytes_to_hr( $bytes ) { + _deprecated_function( __FUNCTION__, '3.6', 'size_format()' ); + + $units = array( 0 => 'B', 1 => 'kB', 2 => 'MB', 3 => 'GB', 4 => 'TB' ); + $log = log( $bytes, 1024 ); + $power = (int) $log; + $size = pow( 1024, $log - $power ); + + if ( ! is_nan( $size ) && array_key_exists( $power, $units ) ) { + $unit = $units[ $power ]; + } else { + $size = $bytes; + $unit = $units[0]; + } + + return $size . $unit; +} + +/** + * Formerly used internally to tidy up the search terms. + * + * @access private + * @since 2.9.0 + * @deprecated 3.7.0 + */ +function _search_terms_tidy( $t ) { + _deprecated_function( __FUNCTION__, '3.7' ); + return trim( $t, "\"'\n\r " ); +} diff --git a/src/wp-includes/feed-atom-comments.php b/src/wp-includes/feed-atom-comments.php new file mode 100644 index 0000000..a7777f1 --- /dev/null +++ b/src/wp-includes/feed-atom-comments.php @@ -0,0 +1,87 @@ +'; +?> + +> + <?php + if ( is_singular() ) + printf( ent2ncr( __( 'Comments on %s' ) ), get_the_title_rss() ); + elseif ( is_search() ) + printf( ent2ncr( __( 'Comments for %1$s searching on %2$s' ) ), get_bloginfo_rss( 'name' ), get_search_query() ); + else + printf( ent2ncr( __( 'Comments for %s' ) ), get_bloginfo_rss( 'name' ) . get_wp_title_rss() ); + ?> + + + + + + + + + + + + + + + + + + +comment_post_ID ); +?> + + <?php + if ( !is_singular() ) { + $title = get_the_title($comment_post->ID); + /** This filter is documented in wp-includes/feed.php */ + $title = apply_filters( 'the_title_rss', $title ); + printf(ent2ncr(__('Comment on %1$s by %2$s')), $title, get_comment_author_rss()); + } else { + printf(ent2ncr(__('By: %s')), get_comment_author_rss()); + } + ?> + + + + + ' . get_comment_author_url() . ''; ?> + + + + + + + + ]]> + + ]]> +comment_parent == 0 ) : // This comment is top level ?> + +comment_parent); + // The rel attribute below and the id tag above should be GUIDs, but WP doesn't create them for comments (unlike posts). Either way, it's more important that they both use the same system +?> + +comment_ID, $comment_post->ID); +?> + + + diff --git a/src/wp-includes/feed-atom.php b/src/wp-includes/feed-atom.php new file mode 100644 index 0000000..666b52d --- /dev/null +++ b/src/wp-includes/feed-atom.php @@ -0,0 +1,83 @@ +'; ?> + + > + <?php bloginfo_rss('name'); wp_title_rss(); ?> + + + + + + + + + + + + + + + + + <![CDATA[<?php the_title_rss() ?>]]> + + + + + + ]]> + + ]]> + + + + + + + + diff --git a/src/wp-includes/feed-rdf.php b/src/wp-includes/feed-rdf.php new file mode 100644 index 0000000..d3503af --- /dev/null +++ b/src/wp-includes/feed-rdf.php @@ -0,0 +1,77 @@ +'; ?> + +> +"> + <?php bloginfo_rss('name'); wp_title_rss(); ?> + + + + + + + + 2000-01-01T12:00+00:00 + + + + + + + + + + + + <?php the_title_rss() ?> + + post_date_gmt, false); ?> + ]]> + + + ]]> + + ]]> + ]]> + + + + + diff --git a/src/wp-includes/feed-rss.php b/src/wp-includes/feed-rss.php new file mode 100644 index 0000000..1650434 --- /dev/null +++ b/src/wp-includes/feed-rss.php @@ -0,0 +1,46 @@ +'; ?> + + + <?php bloginfo_rss('name'); wp_title_rss(); ?> + + + + http://backend.userland.com/rss092 + + + + + + + <?php the_title_rss() ?> + ]]> + + + + + + diff --git a/src/wp-includes/feed-rss2-comments.php b/src/wp-includes/feed-rss2-comments.php new file mode 100644 index 0000000..a8a1c13 --- /dev/null +++ b/src/wp-includes/feed-rss2-comments.php @@ -0,0 +1,94 @@ +'; +?> + + + +> + + <?php + if ( is_singular() ) + printf( ent2ncr( __( 'Comments on: %s' ) ), get_the_title_rss() ); + elseif ( is_search() ) + printf( ent2ncr( __( 'Comments for %1$s searching on %2$s' ) ), get_bloginfo_rss( 'name' ), get_search_query() ); + else + printf( ent2ncr( __( 'Comments for %s' ) ), get_bloginfo_rss( 'name' ) . get_wp_title_rss() ); + ?> + + + + + + + + + comment_post_ID ); + ?> + + <?php + if ( !is_singular() ) { + $title = get_the_title($comment_post->ID); + /** This filter is documented in wp-includes/feed.php */ + $title = apply_filters( 'the_title_rss', $title ); + printf(ent2ncr(__('Comment on %1$s by %2$s')), $title, get_comment_author_rss()); + } else { + printf(ent2ncr(__('By: %s')), get_comment_author_rss()); + } + ?> + + ]]> + + + + + ]]> + + ]]> + ]]> +comment_ID The ID of the comment being displayed. + * @param int $comment_post->ID The ID of the post the comment is connected to. + */ + do_action( 'commentrss2_item', $comment->comment_ID, $comment_post->ID ); +?> + + + + diff --git a/src/wp-includes/feed-rss2.php b/src/wp-includes/feed-rss2.php new file mode 100644 index 0000000..0ce4e6b --- /dev/null +++ b/src/wp-includes/feed-rss2.php @@ -0,0 +1,105 @@ +'; ?> + + +> + + + <?php bloginfo_rss('name'); wp_title_rss(); ?> + + + + + + + + + + + + <?php the_title_rss() ?> + + + + ]]> + + + + + ]]> + + ]]> + + 0 ) : ?> + ]]> + + ]]> + + + + + + + + + + diff --git a/src/wp-includes/feed.php b/src/wp-includes/feed.php new file mode 100644 index 0000000..99e2286 --- /dev/null +++ b/src/wp-includes/feed.php @@ -0,0 +1,552 @@ +get_error_message(); + $title = apply_filters( 'get_wp_title_rss', $title, $sep ); + return $title; +} + +/** + * Display the blog title for display of the feed title. + * + * @package WordPress + * @subpackage Feed + * @since 2.2.0 + * @uses apply_filters() Calls 'wp_title_rss' on the blog title. + * @see wp_title() $sep parameter usage. + * + * @param string $sep Optional. + */ +function wp_title_rss( $sep = '»' ) { + echo apply_filters( 'wp_title_rss', get_wp_title_rss( $sep ), $sep ); +} + +/** + * Retrieve the current post title for the feed. + * + * @package WordPress + * @subpackage Feed + * @since 2.0.0 + * @uses apply_filters() Calls 'the_title_rss' on the post title. + * + * @return string Current post title. + */ +function get_the_title_rss() { + $title = get_the_title(); + $title = apply_filters('the_title_rss', $title); + return $title; +} + +/** + * Display the post title in the feed. + * + * @package WordPress + * @subpackage Feed + * @since 0.71 + * @uses get_the_title_rss() Used to retrieve current post title. + */ +function the_title_rss() { + echo get_the_title_rss(); +} + +/** + * Retrieve the post content for feeds. + * + * @package WordPress + * @subpackage Feed + * @since 2.9.0 + * @uses apply_filters() Calls 'the_content_feed' on the content before processing. + * @see get_the_content() + * + * @param string $feed_type The type of feed. rss2 | atom | rss | rdf + * @return string The filtered content. + */ +function get_the_content_feed($feed_type = null) { + if ( !$feed_type ) + $feed_type = get_default_feed(); + + $content = apply_filters('the_content', get_the_content()); + $content = str_replace(']]>', ']]>', $content); + return apply_filters('the_content_feed', $content, $feed_type); +} + +/** + * Display the post content for feeds. + * + * @package WordPress + * @subpackage Feed + * @since 2.9.0 + * @uses apply_filters() Calls 'the_content_feed' on the content before processing. + * @see get_the_content() + * + * @param string $feed_type The type of feed. rss2 | atom | rss | rdf + */ +function the_content_feed($feed_type = null) { + echo get_the_content_feed($feed_type); +} + +/** + * Display the post excerpt for the feed. + * + * @package WordPress + * @subpackage Feed + * @since 0.71 + * @uses apply_filters() Calls 'the_excerpt_rss' hook on the excerpt. + */ +function the_excerpt_rss() { + $output = get_the_excerpt(); + echo apply_filters('the_excerpt_rss', $output); +} + +/** + * Display the permalink to the post for use in feeds. + * + * @package WordPress + * @subpackage Feed + * @since 2.3.0 + * @uses apply_filters() Call 'the_permalink_rss' on the post permalink + */ +function the_permalink_rss() { + echo esc_url( apply_filters('the_permalink_rss', get_permalink() )); +} + +/** + * Outputs the link to the comments for the current post in an xml safe way + * + * @since 3.0.0 + * @return none + */ +function comments_link_feed() { + echo esc_url( apply_filters( 'comments_link_feed', get_comments_link() ) ); +} + +/** + * Display the feed GUID for the current comment. + * + * @package WordPress + * @subpackage Feed + * @since 2.5.0 + * + * @param int|object $comment_id Optional comment object or id. Defaults to global comment object. + */ +function comment_guid($comment_id = null) { + echo esc_url( get_comment_guid($comment_id) ); +} + +/** + * Retrieve the feed GUID for the current comment. + * + * @package WordPress + * @subpackage Feed + * @since 2.5.0 + * + * @param int|object $comment_id Optional comment object or id. Defaults to global comment object. + * @return bool|string false on failure or guid for comment on success. + */ +function get_comment_guid($comment_id = null) { + $comment = get_comment($comment_id); + + if ( !is_object($comment) ) + return false; + + return get_the_guid($comment->comment_post_ID) . '#comment-' . $comment->comment_ID; +} + +/** + * Display the link to the comments. + * + * @since 1.5.0 + */ +function comment_link() { + echo esc_url( apply_filters( 'comment_link', get_comment_link() ) ); +} + +/** + * Retrieve the current comment author for use in the feeds. + * + * @package WordPress + * @subpackage Feed + * @since 2.0.0 + * @uses apply_filters() Calls 'comment_author_rss' hook on comment author. + * @uses get_comment_author() + * + * @return string Comment Author + */ +function get_comment_author_rss() { + return apply_filters('comment_author_rss', get_comment_author() ); +} + +/** + * Display the current comment author in the feed. + * + * @package WordPress + * @subpackage Feed + * @since 1.0.0 + */ +function comment_author_rss() { + echo get_comment_author_rss(); +} + +/** + * Display the current comment content for use in the feeds. + * + * @package WordPress + * @subpackage Feed + * @since 1.0.0 + * @uses apply_filters() Calls 'comment_text_rss' filter on comment content. + * @uses get_comment_text() + */ +function comment_text_rss() { + $comment_text = get_comment_text(); + $comment_text = apply_filters('comment_text_rss', $comment_text); + echo $comment_text; +} + +/** + * Retrieve all of the post categories, formatted for use in feeds. + * + * All of the categories for the current post in the feed loop, will be + * retrieved and have feed markup added, so that they can easily be added to the + * RSS2, Atom, or RSS1 and RSS0.91 RDF feeds. + * + * @package WordPress + * @subpackage Feed + * @since 2.1.0 + * @uses apply_filters() + * + * @param string $type Optional, default is the type returned by get_default_feed(). + * @return string All of the post categories for displaying in the feed. + */ +function get_the_category_rss($type = null) { + if ( empty($type) ) + $type = get_default_feed(); + $categories = get_the_category(); + $tags = get_the_tags(); + $the_list = ''; + $cat_names = array(); + + $filter = 'rss'; + if ( 'atom' == $type ) + $filter = 'raw'; + + if ( !empty($categories) ) foreach ( (array) $categories as $category ) { + $cat_names[] = sanitize_term_field('name', $category->name, $category->term_id, 'category', $filter); + } + + if ( !empty($tags) ) foreach ( (array) $tags as $tag ) { + $cat_names[] = sanitize_term_field('name', $tag->name, $tag->term_id, 'post_tag', $filter); + } + + $cat_names = array_unique($cat_names); + + foreach ( $cat_names as $cat_name ) { + if ( 'rdf' == $type ) + $the_list .= "\t\t\n"; + elseif ( 'atom' == $type ) + $the_list .= sprintf( '', esc_attr( apply_filters( 'get_bloginfo_rss', get_bloginfo( 'url' ) ) ), esc_attr( $cat_name ) ); + else + $the_list .= "\t\t\n"; + } + + return apply_filters('the_category_rss', $the_list, $type); +} + +/** + * Display the post categories in the feed. + * + * @package WordPress + * @subpackage Feed + * @since 0.71 + * @see get_the_category_rss() For better explanation. + * + * @param string $type Optional, default is the type returned by get_default_feed(). + */ +function the_category_rss($type = null) { + echo get_the_category_rss($type); +} + +/** + * Display the HTML type based on the blog setting. + * + * The two possible values are either 'xhtml' or 'html'. + * + * @package WordPress + * @subpackage Feed + * @since 2.2.0 + */ +function html_type_rss() { + $type = get_bloginfo('html_type'); + if (strpos($type, 'xhtml') !== false) + $type = 'xhtml'; + else + $type = 'html'; + echo $type; +} + +/** + * Display the rss enclosure for the current post. + * + * Uses the global $post to check whether the post requires a password and if + * the user has the password for the post. If not then it will return before + * displaying. + * + * Also uses the function get_post_custom() to get the post's 'enclosure' + * metadata field and parses the value to display the enclosure(s). The + * enclosure(s) consist of enclosure HTML tag(s) with a URI and other + * attributes. + * + * @package WordPress + * @subpackage Template + * @since 1.5.0 + * @uses apply_filters() Calls 'rss_enclosure' hook on rss enclosure. + * @uses get_post_custom() To get the current post enclosure metadata. + */ +function rss_enclosure() { + if ( post_password_required() ) + return; + + foreach ( (array) get_post_custom() as $key => $val) { + if ($key == 'enclosure') { + foreach ( (array) $val as $enc ) { + $enclosure = explode("\n", $enc); + + // only get the first element, e.g. audio/mpeg from 'audio/mpeg mpga mp2 mp3' + $t = preg_split('/[ \t]/', trim($enclosure[2]) ); + $type = $t[0]; + + echo apply_filters('rss_enclosure', '' . "\n"); + } + } + } +} + +/** + * Display the atom enclosure for the current post. + * + * Uses the global $post to check whether the post requires a password and if + * the user has the password for the post. If not then it will return before + * displaying. + * + * Also uses the function get_post_custom() to get the post's 'enclosure' + * metadata field and parses the value to display the enclosure(s). The + * enclosure(s) consist of link HTML tag(s) with a URI and other attributes. + * + * @package WordPress + * @subpackage Template + * @since 2.2.0 + * @uses apply_filters() Calls 'atom_enclosure' hook on atom enclosure. + * @uses get_post_custom() To get the current post enclosure metadata. + */ +function atom_enclosure() { + if ( post_password_required() ) + return; + + foreach ( (array) get_post_custom() as $key => $val ) { + if ($key == 'enclosure') { + foreach ( (array) $val as $enc ) { + $enclosure = explode("\n", $enc); + echo apply_filters('atom_enclosure', '' . "\n"); + } + } + } +} + +/** + * Determine the type of a string of data with the data formatted. + * + * Tell whether the type is text, html, or xhtml, per RFC 4287 section 3.1. + * + * In the case of WordPress, text is defined as containing no markup, + * xhtml is defined as "well formed", and html as tag soup (i.e., the rest). + * + * Container div tags are added to xhtml values, per section 3.1.1.3. + * + * @link http://www.atomenabled.org/developers/syndication/atom-format-spec.php#rfc.section.3.1 + * + * @package WordPress + * @subpackage Feed + * @since 2.5 + * + * @param string $data Input string + * @return array array(type, value) + */ +function prep_atom_text_construct($data) { + if (strpos($data, '<') === false && strpos($data, '&') === false) { + return array('text', $data); + } + + $parser = xml_parser_create(); + xml_parse($parser, '
                  ' . $data . '
                  ', true); + $code = xml_get_error_code($parser); + xml_parser_free($parser); + + if (!$code) { + if (strpos($data, '<') === false) { + return array('text', $data); + } else { + $data = "
                  $data
                  "; + return array('xhtml', $data); + } + } + + if (strpos($data, ']]>') == false) { + return array('html', ""); + } else { + return array('html', htmlspecialchars($data)); + } +} + +/** + * Display the link for the currently displayed feed in a XSS safe way. + * + * Generate a correct link for the atom:self element. + * + * @package WordPress + * @subpackage Feed + * @since 2.5 + */ +function self_link() { + $host = @parse_url(home_url()); + echo esc_url( apply_filters( 'self_link', set_url_scheme( 'http://' . $host['host'] . wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) ); +} + +/** + * Return the content type for specified feed type. + * + * @package WordPress + * @subpackage Feed + * @since 2.8.0 + */ +function feed_content_type( $type = '' ) { + if ( empty($type) ) + $type = get_default_feed(); + + $types = array( + 'rss' => 'application/rss+xml', + 'rss2' => 'application/rss+xml', + 'rss-http' => 'text/xml', + 'atom' => 'application/atom+xml', + 'rdf' => 'application/rdf+xml' + ); + + $content_type = ( !empty($types[$type]) ) ? $types[$type] : 'application/octet-stream'; + + return apply_filters( 'feed_content_type', $content_type, $type ); +} + +/** + * Build SimplePie object based on RSS or Atom feed from URL. + * + * @since 2.8 + * + * @param mixed $url URL of feed to retrieve. If an array of URLs, the feeds are merged + * using SimplePie's multifeed feature. + * See also {@link ​http://simplepie.org/wiki/faq/typical_multifeed_gotchas} + * + * @return WP_Error|SimplePie WP_Error object on failure or SimplePie object on success + */ +function fetch_feed( $url ) { + require_once( ABSPATH . WPINC . '/class-feed.php' ); + + $feed = new SimplePie(); + + $feed->set_sanitize_class( 'WP_SimplePie_Sanitize_KSES' ); + // We must manually overwrite $feed->sanitize because SimplePie's + // constructor sets it before we have a chance to set the sanitization class + $feed->sanitize = new WP_SimplePie_Sanitize_KSES(); + + $feed->set_cache_class( 'WP_Feed_Cache' ); + $feed->set_file_class( 'WP_SimplePie_File' ); + + $feed->set_feed_url( $url ); + $feed->set_cache_duration( apply_filters( 'wp_feed_cache_transient_lifetime', 12 * HOUR_IN_SECONDS, $url ) ); + do_action_ref_array( 'wp_feed_options', array( &$feed, $url ) ); + $feed->init(); + $feed->handle_content_type(); + + if ( $feed->error() ) + return new WP_Error( 'simplepie-error', $feed->error() ); + + return $feed; +} diff --git a/src/wp-includes/fonts/dashicons.eot b/src/wp-includes/fonts/dashicons.eot new file mode 100644 index 0000000..e3e9c34 Binary files /dev/null and b/src/wp-includes/fonts/dashicons.eot differ diff --git a/src/wp-includes/fonts/dashicons.svg b/src/wp-includes/fonts/dashicons.svg new file mode 100644 index 0000000..b9bf073 --- /dev/null +++ b/src/wp-includes/fonts/dashicons.svg @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/wp-includes/fonts/dashicons.ttf b/src/wp-includes/fonts/dashicons.ttf new file mode 100644 index 0000000..ccc5f1b Binary files /dev/null and b/src/wp-includes/fonts/dashicons.ttf differ diff --git a/src/wp-includes/fonts/dashicons.woff b/src/wp-includes/fonts/dashicons.woff new file mode 100644 index 0000000..5c8d336 Binary files /dev/null and b/src/wp-includes/fonts/dashicons.woff differ diff --git a/src/wp-includes/formatting.php b/src/wp-includes/formatting.php new file mode 100644 index 0000000..c56d820 --- /dev/null +++ b/src/wp-includes/formatting.php @@ -0,0 +1,3780 @@ + + * 'cause today's effort makes it worth tomorrow's "holiday"... + * + * Becomes: + * + * ’cause today’s effort makes it worth tomorrow’s “holiday”… + * + * Code within certain html blocks are skipped. + * + * @since 0.71 + * @uses $wp_cockneyreplace Array of formatted entities for certain common phrases + * + * @param string $text The text to be formatted + * @return string The string replaced with html entities + */ +function wptexturize($text) { + global $wp_cockneyreplace; + static $static_characters, $static_replacements, $dynamic_characters, $dynamic_replacements, + $default_no_texturize_tags, $default_no_texturize_shortcodes; + + // No need to set up these static variables more than once + if ( ! isset( $static_characters ) ) { + /* translators: opening curly double quote */ + $opening_quote = _x( '“', 'opening curly double quote' ); + /* translators: closing curly double quote */ + $closing_quote = _x( '”', 'closing curly double quote' ); + + /* translators: apostrophe, for example in 'cause or can't */ + $apos = _x( '’', 'apostrophe' ); + + /* translators: prime, for example in 9' (nine feet) */ + $prime = _x( '′', 'prime' ); + /* translators: double prime, for example in 9" (nine inches) */ + $double_prime = _x( '″', 'double prime' ); + + /* translators: opening curly single quote */ + $opening_single_quote = _x( '‘', 'opening curly single quote' ); + /* translators: closing curly single quote */ + $closing_single_quote = _x( '’', 'closing curly single quote' ); + + /* translators: en dash */ + $en_dash = _x( '–', 'en dash' ); + /* translators: em dash */ + $em_dash = _x( '—', 'em dash' ); + + $default_no_texturize_tags = array('pre', 'code', 'kbd', 'style', 'script', 'tt'); + $default_no_texturize_shortcodes = array('code'); + + // if a plugin has provided an autocorrect array, use it + if ( isset($wp_cockneyreplace) ) { + $cockney = array_keys($wp_cockneyreplace); + $cockneyreplace = array_values($wp_cockneyreplace); + } elseif ( "'" != $apos ) { // Only bother if we're doing a replacement. + $cockney = array( "'tain't", "'twere", "'twas", "'tis", "'twill", "'til", "'bout", "'nuff", "'round", "'cause" ); + $cockneyreplace = array( $apos . "tain" . $apos . "t", $apos . "twere", $apos . "twas", $apos . "tis", $apos . "twill", $apos . "til", $apos . "bout", $apos . "nuff", $apos . "round", $apos . "cause" ); + } else { + $cockney = $cockneyreplace = array(); + } + + $static_characters = array_merge( array( '---', ' -- ', '--', ' - ', 'xn–', '...', '``', '\'\'', ' (tm)' ), $cockney ); + $static_replacements = array_merge( array( $em_dash, ' ' . $em_dash . ' ', $en_dash, ' ' . $en_dash . ' ', 'xn--', '…', $opening_quote, $closing_quote, ' ™' ), $cockneyreplace ); + + $dynamic = array(); + if ( "'" != $apos ) { + $dynamic[ '/\'(\d\d(?:’|\')?s)/' ] = $apos . '$1'; // '99's + $dynamic[ '/\'(\d)/' ] = $apos . '$1'; // '99 + } + if ( "'" != $opening_single_quote ) + $dynamic[ '/(\s|\A|[([{<]|")\'/' ] = '$1' . $opening_single_quote; // opening single quote, even after (, {, <, [ + if ( '"' != $double_prime ) + $dynamic[ '/(\d)"/' ] = '$1' . $double_prime; // 9" (double prime) + if ( "'" != $prime ) + $dynamic[ '/(\d)\'/' ] = '$1' . $prime; // 9' (prime) + if ( "'" != $apos ) + $dynamic[ '/(\S)\'([^\'\s])/' ] = '$1' . $apos . '$2'; // apostrophe in a word + if ( '"' != $opening_quote ) + $dynamic[ '/(\s|\A|[([{<])"(?!\s)/' ] = '$1' . $opening_quote . '$2'; // opening double quote, even after (, {, <, [ + if ( '"' != $closing_quote ) + $dynamic[ '/"(\s|\S|\Z)/' ] = $closing_quote . '$1'; // closing double quote + if ( "'" != $closing_single_quote ) + $dynamic[ '/\'([\s.]|\Z)/' ] = $closing_single_quote . '$1'; // closing single quote + + $dynamic[ '/\b(\d+)x(\d+)\b/' ] = '$1×$2'; // 9x9 (times) + + $dynamic_characters = array_keys( $dynamic ); + $dynamic_replacements = array_values( $dynamic ); + } + + // Transform into regexp sub-expression used in _wptexturize_pushpop_element + // Must do this every time in case plugins use these filters in a context sensitive manner + /** + * Filter the list of HTML elements not to texturize. + * + * @since 2.8.0 + * + * @param array $default_no_texturize_tags An array of HTML element names. + */ + $no_texturize_tags = '(' . implode( '|', apply_filters( 'no_texturize_tags', $default_no_texturize_tags ) ) . ')'; + /** + * Filter the list of shortcodes not to texturize. + * + * @since 2.8.0 + * + * @param array $default_no_texturize_shortcodes An array of shortcode names. + */ + $no_texturize_shortcodes = '(' . implode( '|', apply_filters( 'no_texturize_shortcodes', $default_no_texturize_shortcodes ) ) . ')'; + + $no_texturize_tags_stack = array(); + $no_texturize_shortcodes_stack = array(); + + $textarr = preg_split('/(<.*>|\[.*\])/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE); + + foreach ( $textarr as &$curl ) { + if ( empty( $curl ) ) + continue; + + // Only call _wptexturize_pushpop_element if first char is correct tag opening + $first = $curl[0]; + if ( '<' === $first ) { + _wptexturize_pushpop_element($curl, $no_texturize_tags_stack, $no_texturize_tags, '<', '>'); + } elseif ( '[' === $first ) { + _wptexturize_pushpop_element($curl, $no_texturize_shortcodes_stack, $no_texturize_shortcodes, '[', ']'); + } elseif ( empty($no_texturize_shortcodes_stack) && empty($no_texturize_tags_stack) ) { + // This is not a tag, nor is the texturization disabled static strings + $curl = str_replace($static_characters, $static_replacements, $curl); + // regular expressions + $curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl); + } + $curl = preg_replace('/&([^#])(?![a-zA-Z1-4]{1,8};)/', '&$1', $curl); + } + return implode( '', $textarr ); +} + +/** + * Search for disabled element tags. Push element to stack on tag open and pop + * on tag close. Assumes first character of $text is tag opening. + * + * @since 2.9.0 + * @access private + * + * @param string $text Text to check. First character is assumed to be $opening + * @param array $stack Array used as stack of opened tag elements + * @param string $disabled_elements Tags to match against formatted as regexp sub-expression + * @param string $opening Tag opening character, assumed to be 1 character long + * @param string $closing Tag closing character + */ +function _wptexturize_pushpop_element($text, &$stack, $disabled_elements, $opening = '<', $closing = '>') { + // Check if it is a closing tag -- otherwise assume opening tag + if (strncmp($opening . '/', $text, 2)) { + // Opening? Check $text+1 against disabled elements + if (preg_match('/^' . $disabled_elements . '\b/', substr($text, 1), $matches)) { + /* + * This disables texturize until we find a closing tag of our type + * (e.g.
                  ) even if there was invalid nesting before that
                  +			 *
                  +			 * Example: in the case 
                  sadsadasd"baba"
                  + * "baba" won't be texturize + */ + + array_push($stack, $matches[1]); + } + } else { + // Closing? Check $text+2 against disabled elements + $c = preg_quote($closing, '/'); + if (preg_match('/^' . $disabled_elements . $c . '/', substr($text, 2), $matches)) { + $last = array_pop($stack); + + // Make sure it matches the opening tag + if ($last != $matches[1]) + array_push($stack, $last); + } + } +} + +/** + * Replaces double line-breaks with paragraph elements. + * + * A group of regex replaces used to identify text formatted with newlines and + * replace double line-breaks with HTML paragraph tags. The remaining + * line-breaks after conversion become <
                  > tags, unless $br is set to '0' + * or 'false'. + * + * @since 0.71 + * + * @param string $pee The text which has to be formatted. + * @param bool $br Optional. If set, this will convert all remaining line-breaks after paragraphing. Default true. + * @return string Text which has been converted into correct paragraph tags. + */ +function wpautop($pee, $br = true) { + $pre_tags = array(); + + if ( trim($pee) === '' ) + return ''; + + $pee = $pee . "\n"; // just to make things a little easier, pad the end + + if ( strpos($pee, '', $pee ); + $last_pee = array_pop($pee_parts); + $pee = ''; + $i = 0; + + foreach ( $pee_parts as $pee_part ) { + $start = strpos($pee_part, ''; + + $pee .= substr( $pee_part, 0, $start ) . $name; + $i++; + } + + $pee .= $last_pee; + } + + $pee = preg_replace('|
                  \s*
                  |', "\n\n", $pee); + // Space things out a little + $allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|option|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|noscript|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)'; + $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee); + $pee = preg_replace('!()!', "$1\n\n", $pee); + $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines + if ( strpos($pee, ']*)>\s*|', "", $pee); // no pee inside object/embed + $pee = preg_replace('|\s*\s*|', '', $pee); + } + $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates + // make paragraphs, including one at the end + $pees = preg_split('/\n\s*\n/', $pee, -1, PREG_SPLIT_NO_EMPTY); + $pee = ''; + foreach ( $pees as $tinkle ) + $pee .= '

                  ' . trim($tinkle, "\n") . "

                  \n"; + $pee = preg_replace('|

                  \s*

                  |', '', $pee); // under certain strange conditions it could create a P of entirely whitespace + $pee = preg_replace('!

                  ([^<]+)!', "

                  $1

                  ", $pee); + $pee = preg_replace('!

                  \s*(]*>)\s*

                  !', "$1", $pee); // don't pee all over a tag + $pee = preg_replace("|

                  (|", "$1", $pee); // problem with nested lists + $pee = preg_replace('|

                  ]*)>|i', "

                  ", $pee); + $pee = str_replace('

                  ', '

                  ', $pee); + $pee = preg_replace('!

                  \s*(]*>)!', "$1", $pee); + $pee = preg_replace('!(]*>)\s*

                  !', "$1", $pee); + if ( $br ) { + $pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee); + $pee = preg_replace('|(?)\s*\n|', "
                  \n", $pee); // optionally make line breaks + $pee = str_replace('', "\n", $pee); + } + $pee = preg_replace('!(]*>)\s*
                  !', "$1", $pee); + $pee = preg_replace('!
                  (\s*]*>)!', '$1', $pee); + $pee = preg_replace( "|\n

                  $|", '

                  ', $pee ); + + if ( !empty($pre_tags) ) + $pee = str_replace(array_keys($pre_tags), array_values($pre_tags), $pee); + + return $pee; +} + +/** + * Newline preservation help function for wpautop + * + * @since 3.1.0 + * @access private + * + * @param array $matches preg_replace_callback matches array + * @return string + */ +function _autop_newline_preservation_helper( $matches ) { + return str_replace("\n", "", $matches[0]); +} + +/** + * Don't auto-p wrap shortcodes that stand alone + * + * Ensures that shortcodes are not wrapped in <

                  >...<

                  >. + * + * @since 2.9.0 + * + * @param string $pee The content. + * @return string The filtered content. + */ +function shortcode_unautop( $pee ) { + global $shortcode_tags; + + if ( empty( $shortcode_tags ) || !is_array( $shortcode_tags ) ) { + return $pee; + } + + $tagregexp = join( '|', array_map( 'preg_quote', array_keys( $shortcode_tags ) ) ); + + $pattern = + '/' + . '

                  ' // Opening paragraph + . '\\s*+' // Optional leading whitespace + . '(' // 1: The shortcode + . '\\[' // Opening bracket + . "($tagregexp)" // 2: Shortcode name + . '(?![\\w-])' // Not followed by word character or hyphen + // Unroll the loop: Inside the opening shortcode tag + . '[^\\]\\/]*' // Not a closing bracket or forward slash + . '(?:' + . '\\/(?!\\])' // A forward slash not followed by a closing bracket + . '[^\\]\\/]*' // Not a closing bracket or forward slash + . ')*?' + . '(?:' + . '\\/\\]' // Self closing tag and closing bracket + . '|' + . '\\]' // Closing bracket + . '(?:' // Unroll the loop: Optionally, anything between the opening and closing shortcode tags + . '[^\\[]*+' // Not an opening bracket + . '(?:' + . '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag + . '[^\\[]*+' // Not an opening bracket + . ')*+' + . '\\[\\/\\2\\]' // Closing shortcode tag + . ')?' + . ')' + . ')' + . '\\s*+' // optional trailing whitespace + . '<\\/p>' // closing paragraph + . '/s'; + + return preg_replace( $pattern, '$1', $pee ); +} + +/** + * Checks to see if a string is utf8 encoded. + * + * NOTE: This function checks for 5-Byte sequences, UTF8 + * has Bytes Sequences with a maximum length of 4. + * + * @author bmorel at ssi dot fr (modified) + * @since 1.2.1 + * + * @param string $str The string to be checked + * @return bool True if $str fits a UTF-8 model, false otherwise. + */ +function seems_utf8($str) { + $length = strlen($str); + for ($i=0; $i < $length; $i++) { + $c = ord($str[$i]); + if ($c < 0x80) $n = 0; # 0bbbbbbb + elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb + elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb + elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb + elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb + elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b + else return false; # Does not match any model + for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? + if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) + return false; + } + } + return true; +} + +/** + * Converts a number of special characters into their HTML entities. + * + * Specifically deals with: &, <, >, ", and '. + * + * $quote_style can be set to ENT_COMPAT to encode " to + * ", or ENT_QUOTES to do both. Default is ENT_NOQUOTES where no quotes are encoded. + * + * @since 1.2.2 + * @access private + * + * @param string $string The text which is to be encoded. + * @param mixed $quote_style Optional. Converts double quotes if set to ENT_COMPAT, both single and double if set to ENT_QUOTES or none if set to ENT_NOQUOTES. Also compatible with old values; converting single quotes if set to 'single', double if set to 'double' or both if otherwise set. Default is ENT_NOQUOTES. + * @param string $charset Optional. The character encoding of the string. Default is false. + * @param boolean $double_encode Optional. Whether to encode existing html entities. Default is false. + * @return string The encoded text with HTML entities. + */ +function _wp_specialchars( $string, $quote_style = ENT_NOQUOTES, $charset = false, $double_encode = false ) { + $string = (string) $string; + + if ( 0 === strlen( $string ) ) + return ''; + + // Don't bother if there are no specialchars - saves some processing + if ( ! preg_match( '/[&<>"\']/', $string ) ) + return $string; + + // Account for the previous behaviour of the function when the $quote_style is not an accepted value + if ( empty( $quote_style ) ) + $quote_style = ENT_NOQUOTES; + elseif ( ! in_array( $quote_style, array( 0, 2, 3, 'single', 'double' ), true ) ) + $quote_style = ENT_QUOTES; + + // Store the site charset as a static to avoid multiple calls to wp_load_alloptions() + if ( ! $charset ) { + static $_charset; + if ( ! isset( $_charset ) ) { + $alloptions = wp_load_alloptions(); + $_charset = isset( $alloptions['blog_charset'] ) ? $alloptions['blog_charset'] : ''; + } + $charset = $_charset; + } + + if ( in_array( $charset, array( 'utf8', 'utf-8', 'UTF8' ) ) ) + $charset = 'UTF-8'; + + $_quote_style = $quote_style; + + if ( $quote_style === 'double' ) { + $quote_style = ENT_COMPAT; + $_quote_style = ENT_COMPAT; + } elseif ( $quote_style === 'single' ) { + $quote_style = ENT_NOQUOTES; + } + + // Handle double encoding ourselves + if ( $double_encode ) { + $string = @htmlspecialchars( $string, $quote_style, $charset ); + } else { + // Decode & into & + $string = wp_specialchars_decode( $string, $_quote_style ); + + // Guarantee every &entity; is valid or re-encode the & + $string = wp_kses_normalize_entities( $string ); + + // Now re-encode everything except &entity; + $string = preg_split( '/(&#?x?[0-9a-z]+;)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE ); + + for ( $i = 0; $i < count( $string ); $i += 2 ) + $string[$i] = @htmlspecialchars( $string[$i], $quote_style, $charset ); + + $string = implode( '', $string ); + } + + // Backwards compatibility + if ( 'single' === $_quote_style ) + $string = str_replace( "'", ''', $string ); + + return $string; +} + +/** + * Converts a number of HTML entities into their special characters. + * + * Specifically deals with: &, <, >, ", and '. + * + * $quote_style can be set to ENT_COMPAT to decode " entities, + * or ENT_QUOTES to do both " and '. Default is ENT_NOQUOTES where no quotes are decoded. + * + * @since 2.8.0 + * + * @param string $string The text which is to be decoded. + * @param mixed $quote_style Optional. Converts double quotes if set to ENT_COMPAT, both single and double if set to ENT_QUOTES or none if set to ENT_NOQUOTES. Also compatible with old _wp_specialchars() values; converting single quotes if set to 'single', double if set to 'double' or both if otherwise set. Default is ENT_NOQUOTES. + * @return string The decoded text without HTML entities. + */ +function wp_specialchars_decode( $string, $quote_style = ENT_NOQUOTES ) { + $string = (string) $string; + + if ( 0 === strlen( $string ) ) { + return ''; + } + + // Don't bother if there are no entities - saves a lot of processing + if ( strpos( $string, '&' ) === false ) { + return $string; + } + + // Match the previous behaviour of _wp_specialchars() when the $quote_style is not an accepted value + if ( empty( $quote_style ) ) { + $quote_style = ENT_NOQUOTES; + } elseif ( !in_array( $quote_style, array( 0, 2, 3, 'single', 'double' ), true ) ) { + $quote_style = ENT_QUOTES; + } + + // More complete than get_html_translation_table( HTML_SPECIALCHARS ) + $single = array( ''' => '\'', ''' => '\'' ); + $single_preg = array( '/�*39;/' => ''', '/�*27;/i' => ''' ); + $double = array( '"' => '"', '"' => '"', '"' => '"' ); + $double_preg = array( '/�*34;/' => '"', '/�*22;/i' => '"' ); + $others = array( '<' => '<', '<' => '<', '>' => '>', '>' => '>', '&' => '&', '&' => '&', '&' => '&' ); + $others_preg = array( '/�*60;/' => '<', '/�*62;/' => '>', '/�*38;/' => '&', '/�*26;/i' => '&' ); + + if ( $quote_style === ENT_QUOTES ) { + $translation = array_merge( $single, $double, $others ); + $translation_preg = array_merge( $single_preg, $double_preg, $others_preg ); + } elseif ( $quote_style === ENT_COMPAT || $quote_style === 'double' ) { + $translation = array_merge( $double, $others ); + $translation_preg = array_merge( $double_preg, $others_preg ); + } elseif ( $quote_style === 'single' ) { + $translation = array_merge( $single, $others ); + $translation_preg = array_merge( $single_preg, $others_preg ); + } elseif ( $quote_style === ENT_NOQUOTES ) { + $translation = $others; + $translation_preg = $others_preg; + } + + // Remove zero padding on numeric entities + $string = preg_replace( array_keys( $translation_preg ), array_values( $translation_preg ), $string ); + + // Replace characters according to translation table + return strtr( $string, $translation ); +} + +/** + * Checks for invalid UTF8 in a string. + * + * @since 2.8.0 + * + * @param string $string The text which is to be checked. + * @param boolean $strip Optional. Whether to attempt to strip out invalid UTF8. Default is false. + * @return string The checked text. + */ +function wp_check_invalid_utf8( $string, $strip = false ) { + $string = (string) $string; + + if ( 0 === strlen( $string ) ) { + return ''; + } + + // Store the site charset as a static to avoid multiple calls to get_option() + static $is_utf8; + if ( !isset( $is_utf8 ) ) { + $is_utf8 = in_array( get_option( 'blog_charset' ), array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ) ); + } + if ( !$is_utf8 ) { + return $string; + } + + // Check for support for utf8 in the installed PCRE library once and store the result in a static + static $utf8_pcre; + if ( !isset( $utf8_pcre ) ) { + $utf8_pcre = @preg_match( '/^./u', 'a' ); + } + // We can't demand utf8 in the PCRE installation, so just return the string in those cases + if ( !$utf8_pcre ) { + return $string; + } + + // preg_match fails when it encounters invalid UTF8 in $string + if ( 1 === @preg_match( '/^./us', $string ) ) { + return $string; + } + + // Attempt to strip the bad chars if requested (not recommended) + if ( $strip && function_exists( 'iconv' ) ) { + return iconv( 'utf-8', 'utf-8', $string ); + } + + return ''; +} + +/** + * Encode the Unicode values to be used in the URI. + * + * @since 1.5.0 + * + * @param string $utf8_string + * @param int $length Max length of the string + * @return string String with Unicode encoded for URI. + */ +function utf8_uri_encode( $utf8_string, $length = 0 ) { + $unicode = ''; + $values = array(); + $num_octets = 1; + $unicode_length = 0; + + $string_length = strlen( $utf8_string ); + for ($i = 0; $i < $string_length; $i++ ) { + + $value = ord( $utf8_string[ $i ] ); + + if ( $value < 128 ) { + if ( $length && ( $unicode_length >= $length ) ) + break; + $unicode .= chr($value); + $unicode_length++; + } else { + if ( count( $values ) == 0 ) $num_octets = ( $value < 224 ) ? 2 : 3; + + $values[] = $value; + + if ( $length && ( $unicode_length + ($num_octets * 3) ) > $length ) + break; + if ( count( $values ) == $num_octets ) { + if ($num_octets == 3) { + $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]) . '%' . dechex($values[2]); + $unicode_length += 9; + } else { + $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]); + $unicode_length += 6; + } + + $values = array(); + $num_octets = 1; + } + } + } + + return $unicode; +} + +/** + * Converts all accent characters to ASCII characters. + * + * If there are no accent characters, then the string given is just returned. + * + * @since 1.2.1 + * + * @param string $string Text that might have accent characters + * @return string Filtered string with replaced "nice" characters. + */ +function remove_accents($string) { + if ( !preg_match('/[\x80-\xff]/', $string) ) + return $string; + + if (seems_utf8($string)) { + $chars = array( + // Decompositions for Latin-1 Supplement + chr(194).chr(170) => 'a', chr(194).chr(186) => 'o', + chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', + chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', + chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', + chr(195).chr(134) => 'AE',chr(195).chr(135) => 'C', + chr(195).chr(136) => 'E', chr(195).chr(137) => 'E', + chr(195).chr(138) => 'E', chr(195).chr(139) => 'E', + chr(195).chr(140) => 'I', chr(195).chr(141) => 'I', + chr(195).chr(142) => 'I', chr(195).chr(143) => 'I', + chr(195).chr(144) => 'D', chr(195).chr(145) => 'N', + chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', + chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', + chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', + chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', + chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', + chr(195).chr(158) => 'TH',chr(195).chr(159) => 's', + chr(195).chr(160) => 'a', chr(195).chr(161) => 'a', + chr(195).chr(162) => 'a', chr(195).chr(163) => 'a', + chr(195).chr(164) => 'a', chr(195).chr(165) => 'a', + chr(195).chr(166) => 'ae',chr(195).chr(167) => 'c', + chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', + chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', + chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', + chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', + chr(195).chr(176) => 'd', chr(195).chr(177) => 'n', + chr(195).chr(178) => 'o', chr(195).chr(179) => 'o', + chr(195).chr(180) => 'o', chr(195).chr(181) => 'o', + chr(195).chr(182) => 'o', chr(195).chr(184) => 'o', + chr(195).chr(185) => 'u', chr(195).chr(186) => 'u', + chr(195).chr(187) => 'u', chr(195).chr(188) => 'u', + chr(195).chr(189) => 'y', chr(195).chr(190) => 'th', + chr(195).chr(191) => 'y', chr(195).chr(152) => 'O', + // Decompositions for Latin Extended-A + chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', + chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', + chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', + chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', + chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', + chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', + chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', + chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', + chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', + chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', + chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', + chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', + chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', + chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', + chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', + chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', + chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', + chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', + chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', + chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', + chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', + chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', + chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', + chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', + chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', + chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', + chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', + chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', + chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', + chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', + chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', + chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', + chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', + chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', + chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', + chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', + chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', + chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', + chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', + chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', + chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', + chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', + chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', + chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', + chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', + chr(197).chr(154) => 'S',chr(197).chr(155) => 's', + chr(197).chr(156) => 'S',chr(197).chr(157) => 's', + chr(197).chr(158) => 'S',chr(197).chr(159) => 's', + chr(197).chr(160) => 'S', chr(197).chr(161) => 's', + chr(197).chr(162) => 'T', chr(197).chr(163) => 't', + chr(197).chr(164) => 'T', chr(197).chr(165) => 't', + chr(197).chr(166) => 'T', chr(197).chr(167) => 't', + chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', + chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', + chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', + chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', + chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', + chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', + chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', + chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', + chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', + chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', + chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', + chr(197).chr(190) => 'z', chr(197).chr(191) => 's', + // Decompositions for Latin Extended-B + chr(200).chr(152) => 'S', chr(200).chr(153) => 's', + chr(200).chr(154) => 'T', chr(200).chr(155) => 't', + // Euro Sign + chr(226).chr(130).chr(172) => 'E', + // GBP (Pound) Sign + chr(194).chr(163) => '', + // Vowels with diacritic (Vietnamese) + // unmarked + chr(198).chr(160) => 'O', chr(198).chr(161) => 'o', + chr(198).chr(175) => 'U', chr(198).chr(176) => 'u', + // grave accent + chr(225).chr(186).chr(166) => 'A', chr(225).chr(186).chr(167) => 'a', + chr(225).chr(186).chr(176) => 'A', chr(225).chr(186).chr(177) => 'a', + chr(225).chr(187).chr(128) => 'E', chr(225).chr(187).chr(129) => 'e', + chr(225).chr(187).chr(146) => 'O', chr(225).chr(187).chr(147) => 'o', + chr(225).chr(187).chr(156) => 'O', chr(225).chr(187).chr(157) => 'o', + chr(225).chr(187).chr(170) => 'U', chr(225).chr(187).chr(171) => 'u', + chr(225).chr(187).chr(178) => 'Y', chr(225).chr(187).chr(179) => 'y', + // hook + chr(225).chr(186).chr(162) => 'A', chr(225).chr(186).chr(163) => 'a', + chr(225).chr(186).chr(168) => 'A', chr(225).chr(186).chr(169) => 'a', + chr(225).chr(186).chr(178) => 'A', chr(225).chr(186).chr(179) => 'a', + chr(225).chr(186).chr(186) => 'E', chr(225).chr(186).chr(187) => 'e', + chr(225).chr(187).chr(130) => 'E', chr(225).chr(187).chr(131) => 'e', + chr(225).chr(187).chr(136) => 'I', chr(225).chr(187).chr(137) => 'i', + chr(225).chr(187).chr(142) => 'O', chr(225).chr(187).chr(143) => 'o', + chr(225).chr(187).chr(148) => 'O', chr(225).chr(187).chr(149) => 'o', + chr(225).chr(187).chr(158) => 'O', chr(225).chr(187).chr(159) => 'o', + chr(225).chr(187).chr(166) => 'U', chr(225).chr(187).chr(167) => 'u', + chr(225).chr(187).chr(172) => 'U', chr(225).chr(187).chr(173) => 'u', + chr(225).chr(187).chr(182) => 'Y', chr(225).chr(187).chr(183) => 'y', + // tilde + chr(225).chr(186).chr(170) => 'A', chr(225).chr(186).chr(171) => 'a', + chr(225).chr(186).chr(180) => 'A', chr(225).chr(186).chr(181) => 'a', + chr(225).chr(186).chr(188) => 'E', chr(225).chr(186).chr(189) => 'e', + chr(225).chr(187).chr(132) => 'E', chr(225).chr(187).chr(133) => 'e', + chr(225).chr(187).chr(150) => 'O', chr(225).chr(187).chr(151) => 'o', + chr(225).chr(187).chr(160) => 'O', chr(225).chr(187).chr(161) => 'o', + chr(225).chr(187).chr(174) => 'U', chr(225).chr(187).chr(175) => 'u', + chr(225).chr(187).chr(184) => 'Y', chr(225).chr(187).chr(185) => 'y', + // acute accent + chr(225).chr(186).chr(164) => 'A', chr(225).chr(186).chr(165) => 'a', + chr(225).chr(186).chr(174) => 'A', chr(225).chr(186).chr(175) => 'a', + chr(225).chr(186).chr(190) => 'E', chr(225).chr(186).chr(191) => 'e', + chr(225).chr(187).chr(144) => 'O', chr(225).chr(187).chr(145) => 'o', + chr(225).chr(187).chr(154) => 'O', chr(225).chr(187).chr(155) => 'o', + chr(225).chr(187).chr(168) => 'U', chr(225).chr(187).chr(169) => 'u', + // dot below + chr(225).chr(186).chr(160) => 'A', chr(225).chr(186).chr(161) => 'a', + chr(225).chr(186).chr(172) => 'A', chr(225).chr(186).chr(173) => 'a', + chr(225).chr(186).chr(182) => 'A', chr(225).chr(186).chr(183) => 'a', + chr(225).chr(186).chr(184) => 'E', chr(225).chr(186).chr(185) => 'e', + chr(225).chr(187).chr(134) => 'E', chr(225).chr(187).chr(135) => 'e', + chr(225).chr(187).chr(138) => 'I', chr(225).chr(187).chr(139) => 'i', + chr(225).chr(187).chr(140) => 'O', chr(225).chr(187).chr(141) => 'o', + chr(225).chr(187).chr(152) => 'O', chr(225).chr(187).chr(153) => 'o', + chr(225).chr(187).chr(162) => 'O', chr(225).chr(187).chr(163) => 'o', + chr(225).chr(187).chr(164) => 'U', chr(225).chr(187).chr(165) => 'u', + chr(225).chr(187).chr(176) => 'U', chr(225).chr(187).chr(177) => 'u', + chr(225).chr(187).chr(180) => 'Y', chr(225).chr(187).chr(181) => 'y', + // Vowels with diacritic (Chinese, Hanyu Pinyin) + chr(201).chr(145) => 'a', + // macron + chr(199).chr(149) => 'U', chr(199).chr(150) => 'u', + // acute accent + chr(199).chr(151) => 'U', chr(199).chr(152) => 'u', + // caron + chr(199).chr(141) => 'A', chr(199).chr(142) => 'a', + chr(199).chr(143) => 'I', chr(199).chr(144) => 'i', + chr(199).chr(145) => 'O', chr(199).chr(146) => 'o', + chr(199).chr(147) => 'U', chr(199).chr(148) => 'u', + chr(199).chr(153) => 'U', chr(199).chr(154) => 'u', + // grave accent + chr(199).chr(155) => 'U', chr(199).chr(156) => 'u', + ); + + // Used for locale-specific rules + $locale = get_locale(); + + if ( 'de_DE' == $locale ) { + $chars[ chr(195).chr(132) ] = 'Ae'; + $chars[ chr(195).chr(164) ] = 'ae'; + $chars[ chr(195).chr(150) ] = 'Oe'; + $chars[ chr(195).chr(182) ] = 'oe'; + $chars[ chr(195).chr(156) ] = 'Ue'; + $chars[ chr(195).chr(188) ] = 'ue'; + $chars[ chr(195).chr(159) ] = 'ss'; + } elseif ( 'da_DK' === $locale ) { + $chars[ chr(195).chr(134) ] = 'Ae'; + $chars[ chr(195).chr(166) ] = 'ae'; + $chars[ chr(195).chr(152) ] = 'Oe'; + $chars[ chr(195).chr(184) ] = 'oe'; + $chars[ chr(195).chr(133) ] = 'Aa'; + $chars[ chr(195).chr(165) ] = 'aa'; + } + + $string = strtr($string, $chars); + } else { + // Assume ISO-8859-1 if not UTF-8 + $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) + .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) + .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) + .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) + .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) + .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) + .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) + .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) + .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) + .chr(252).chr(253).chr(255); + + $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; + + $string = strtr($string, $chars['in'], $chars['out']); + $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); + $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'); + $string = str_replace($double_chars['in'], $double_chars['out'], $string); + } + + return $string; +} + +/** + * Sanitizes a filename, replacing whitespace with dashes. + * + * Removes special characters that are illegal in filenames on certain + * operating systems and special characters requiring special escaping + * to manipulate at the command line. Replaces spaces and consecutive + * dashes with a single dash. Trims period, dash and underscore from beginning + * and end of filename. + * + * @since 2.1.0 + * + * @param string $filename The filename to be sanitized + * @return string The sanitized filename + */ +function sanitize_file_name( $filename ) { + $filename_raw = $filename; + $special_chars = array("?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}", chr(0)); + /** + * Filter the list of characters to remove from a filename. + * + * @since 2.8.0 + * + * @param array $special_chars Characters to remove. + * @param string $filename_raw Filename as it was passed into sanitize_file_name(). + */ + $special_chars = apply_filters( 'sanitize_file_name_chars', $special_chars, $filename_raw ); + $filename = str_replace($special_chars, '', $filename); + $filename = preg_replace('/[\s-]+/', '-', $filename); + $filename = trim($filename, '.-_'); + + // Split the filename into a base and extension[s] + $parts = explode('.', $filename); + + // Return if only one extension + if ( count( $parts ) <= 2 ) { + /** + * Filter a sanitized filename string. + * + * @since 2.8.0 + * + * @param string $filename Sanitized filename. + * @param string $filename_raw The filename prior to sanitization. + */ + return apply_filters( 'sanitize_file_name', $filename, $filename_raw ); + } + + // Process multiple extensions + $filename = array_shift($parts); + $extension = array_pop($parts); + $mimes = get_allowed_mime_types(); + + /* + * Loop over any intermediate extensions. Postfix them with a trailing underscore + * if they are a 2 - 5 character long alpha string not in the extension whitelist. + */ + foreach ( (array) $parts as $part) { + $filename .= '.' . $part; + + if ( preg_match("/^[a-zA-Z]{2,5}\d?$/", $part) ) { + $allowed = false; + foreach ( $mimes as $ext_preg => $mime_match ) { + $ext_preg = '!^(' . $ext_preg . ')$!i'; + if ( preg_match( $ext_preg, $part ) ) { + $allowed = true; + break; + } + } + if ( !$allowed ) + $filename .= '_'; + } + } + $filename .= '.' . $extension; + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters('sanitize_file_name', $filename, $filename_raw); +} + +/** + * Sanitizes a username, stripping out unsafe characters. + * + * Removes tags, octets, entities, and if strict is enabled, will only keep + * alphanumeric, _, space, ., -, @. After sanitizing, it passes the username, + * raw username (the username in the parameter), and the value of $strict as + * parameters for the 'sanitize_user' filter. + * + * @since 2.0.0 + * + * @param string $username The username to be sanitized. + * @param bool $strict If set limits $username to specific characters. Default false. + * @return string The sanitized username, after passing through filters. + */ +function sanitize_user( $username, $strict = false ) { + $raw_username = $username; + $username = wp_strip_all_tags( $username ); + $username = remove_accents( $username ); + // Kill octets + $username = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '', $username ); + $username = preg_replace( '/&.+?;/', '', $username ); // Kill entities + + // If strict, reduce to ASCII for max portability. + if ( $strict ) + $username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username ); + + $username = trim( $username ); + // Consolidate contiguous whitespace + $username = preg_replace( '|\s+|', ' ', $username ); + + /** + * Filter a sanitized username string. + * + * @since 2.0.1 + * + * @param string $username Sanitized username. + * @param string $raw_username The username prior to sanitization. + * @param bool $strict Whether to limit the sanitization to specific characters. Default false. + */ + return apply_filters( 'sanitize_user', $username, $raw_username, $strict ); +} + +/** + * Sanitizes a string key. + * + * Keys are used as internal identifiers. Lowercase alphanumeric characters, dashes and underscores are allowed. + * + * @since 3.0.0 + * + * @param string $key String key + * @return string Sanitized key + */ +function sanitize_key( $key ) { + $raw_key = $key; + $key = strtolower( $key ); + $key = preg_replace( '/[^a-z0-9_\-]/', '', $key ); + + /** + * Filter a sanitized key string. + * + * @since 3.0.0 + * + * @param string $key Sanitized key. + * @param string $raw_key The key prior to sanitization. + */ + return apply_filters( 'sanitize_key', $key, $raw_key ); +} + +/** + * Sanitizes a title, or returns a fallback title. + * + * Specifically, HTML and PHP tags are stripped. Further actions can be added + * via the plugin API. If $title is empty and $fallback_title is set, the latter + * will be used. + * + * @since 1.0.0 + * + * @param string $title The string to be sanitized. + * @param string $fallback_title Optional. A title to use if $title is empty. + * @param string $context Optional. The operation for which the string is sanitized + * @return string The sanitized string. + */ +function sanitize_title( $title, $fallback_title = '', $context = 'save' ) { + $raw_title = $title; + + if ( 'save' == $context ) + $title = remove_accents($title); + + /** + * Filter a sanitized title string. + * + * @since 1.2.0 + * + * @param string $title Sanitized title. + * @param string $raw_title The title prior to sanitization. + * @param string $context The context for which the title is being sanitized. + */ + $title = apply_filters( 'sanitize_title', $title, $raw_title, $context ); + + if ( '' === $title || false === $title ) + $title = $fallback_title; + + return $title; +} + +/** + * Sanitizes a title with the 'query' context. + * + * Used for querying the database for a value from URL. + * + * @since 3.1.0 + * @uses sanitize_title() + * + * @param string $title The string to be sanitized. + * @return string The sanitized string. + */ +function sanitize_title_for_query( $title ) { + return sanitize_title( $title, '', 'query' ); +} + +/** + * Sanitizes a title, replacing whitespace and a few other characters with dashes. + * + * Limits the output to alphanumeric characters, underscore (_) and dash (-). + * Whitespace becomes a dash. + * + * @since 1.2.0 + * + * @param string $title The title to be sanitized. + * @param string $raw_title Optional. Not used. + * @param string $context Optional. The operation for which the string is sanitized. + * @return string The sanitized title. + */ +function sanitize_title_with_dashes( $title, $raw_title = '', $context = 'display' ) { + $title = strip_tags($title); + // Preserve escaped octets. + $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title); + // Remove percent signs that are not part of an octet. + $title = str_replace('%', '', $title); + // Restore octets. + $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title); + + if (seems_utf8($title)) { + if (function_exists('mb_strtolower')) { + $title = mb_strtolower($title, 'UTF-8'); + } + $title = utf8_uri_encode($title, 200); + } + + $title = strtolower($title); + $title = preg_replace('/&.+?;/', '', $title); // kill entities + $title = str_replace('.', '-', $title); + + if ( 'save' == $context ) { + // Convert nbsp, ndash and mdash to hyphens + $title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $title ); + + // Strip these characters entirely + $title = str_replace( array( + // iexcl and iquest + '%c2%a1', '%c2%bf', + // angle quotes + '%c2%ab', '%c2%bb', '%e2%80%b9', '%e2%80%ba', + // curly quotes + '%e2%80%98', '%e2%80%99', '%e2%80%9c', '%e2%80%9d', + '%e2%80%9a', '%e2%80%9b', '%e2%80%9e', '%e2%80%9f', + // copy, reg, deg, hellip and trade + '%c2%a9', '%c2%ae', '%c2%b0', '%e2%80%a6', '%e2%84%a2', + // acute accents + '%c2%b4', '%cb%8a', '%cc%81', '%cd%81', + // grave accent, macron, caron + '%cc%80', '%cc%84', '%cc%8c', + ), '', $title ); + + // Convert times to x + $title = str_replace( '%c3%97', 'x', $title ); + } + + $title = preg_replace('/[^%a-z0-9 _-]/', '', $title); + $title = preg_replace('/\s+/', '-', $title); + $title = preg_replace('|-+|', '-', $title); + $title = trim($title, '-'); + + return $title; +} + +/** + * Ensures a string is a valid SQL order by clause. + * + * Accepts one or more columns, with or without ASC/DESC, and also accepts + * RAND(). + * + * @since 2.5.1 + * + * @param string $orderby Order by string to be checked. + * @return string|bool Returns the order by clause if it is a match, false otherwise. + */ +function sanitize_sql_orderby( $orderby ){ + preg_match('/^\s*([a-z0-9_]+(\s+(ASC|DESC))?(\s*,\s*|\s*$))+|^\s*RAND\(\s*\)\s*$/i', $orderby, $obmatches); + if ( !$obmatches ) + return false; + return $orderby; +} + +/** + * Sanitizes an HTML classname to ensure it only contains valid characters. + * + * Strips the string down to A-Z,a-z,0-9,_,-. If this results in an empty + * string then it will return the alternative value supplied. + * + * @todo Expand to support the full range of CDATA that a class attribute can contain. + * + * @since 2.8.0 + * + * @param string $class The classname to be sanitized + * @param string $fallback Optional. The value to return if the sanitization end's up as an empty string. + * Defaults to an empty string. + * @return string The sanitized value + */ +function sanitize_html_class( $class, $fallback = '' ) { + //Strip out any % encoded octets + $sanitized = preg_replace( '|%[a-fA-F0-9][a-fA-F0-9]|', '', $class ); + + //Limit to A-Z,a-z,0-9,_,- + $sanitized = preg_replace( '/[^A-Za-z0-9_-]/', '', $sanitized ); + + if ( '' == $sanitized ) + $sanitized = $fallback; + + /** + * Filter a sanitized HTML class string. + * + * @since 2.8.0 + * + * @param string $sanitized The sanitized HTML class. + * @param string $class HTML class before sanitization. + * @param string $fallback The fallback string. + */ + return apply_filters( 'sanitize_html_class', $sanitized, $class, $fallback ); +} + +/** + * Converts a number of characters from a string. + * + * Metadata tags <> and <<category>> are removed, <<br>> and <<hr>> are + * converted into correct XHTML and Unicode characters are converted to the + * valid range. + * + * @since 0.71 + * + * @param string $content String of characters to be converted. + * @param string $deprecated Not used. + * @return string Converted string. + */ +function convert_chars($content, $deprecated = '') { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '0.71' ); + + // Translation of invalid Unicode references range to valid range + $wp_htmltranswinuni = array( + '€' => '€', // the Euro sign + '' => '', + '‚' => '‚', // these are Windows CP1252 specific characters + 'ƒ' => 'ƒ', // they would look weird on non-Windows browsers + '„' => '„', + '…' => '…', + '†' => '†', + '‡' => '‡', + 'ˆ' => 'ˆ', + '‰' => '‰', + 'Š' => 'Š', + '‹' => '‹', + 'Œ' => 'Œ', + '' => '', + 'Ž' => 'Ž', + '' => '', + '' => '', + '‘' => '‘', + '’' => '’', + '“' => '“', + '”' => '”', + '•' => '•', + '–' => '–', + '—' => '—', + '˜' => '˜', + '™' => '™', + 'š' => 'š', + '›' => '›', + 'œ' => 'œ', + '' => '', + 'ž' => 'ž', + 'Ÿ' => 'Ÿ' + ); + + // Remove metadata tags + $content = preg_replace('/<title>(.+?)<\/title>/','',$content); + $content = preg_replace('/<category>(.+?)<\/category>/','',$content); + + // Converts lone & characters into & (a.k.a. &) + $content = preg_replace('/&([^#])(?![a-z1-4]{1,8};)/i', '&$1', $content); + + // Fix Word pasting + $content = strtr($content, $wp_htmltranswinuni); + + // Just a little XHTML help + $content = str_replace('<br>', '<br />', $content); + $content = str_replace('<hr>', '<hr />', $content); + + return $content; +} + +/** + * Balances tags if forced to, or if the 'use_balanceTags' option is set to true. + * + * @since 0.71 + * + * @param string $text Text to be balanced + * @param bool $force If true, forces balancing, ignoring the value of the option. Default false. + * @return string Balanced text + */ +function balanceTags( $text, $force = false ) { + if ( $force || get_option('use_balanceTags') == 1 ) { + return force_balance_tags( $text ); + } else { + return $text; + } +} + +/** + * Balances tags of string using a modified stack. + * + * @since 2.0.4 + * + * @author Leonard Lin <leonard@acm.org> + * @license GPL + * @copyright November 4, 2001 + * @version 1.1 + * @todo Make better - change loop condition to $text in 1.2 + * @internal Modified by Scott Reilly (coffee2code) 02 Aug 2004 + * 1.1 Fixed handling of append/stack pop order of end text + * Added Cleaning Hooks + * 1.0 First Version + * + * @param string $text Text to be balanced. + * @return string Balanced text. + */ +function force_balance_tags( $text ) { + $tagstack = array(); + $stacksize = 0; + $tagqueue = ''; + $newtext = ''; + // Known single-entity/self-closing tags + $single_tags = array( 'area', 'base', 'basefont', 'br', 'col', 'command', 'embed', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param', 'source' ); + // Tags that can be immediately nested within themselves + $nestable_tags = array( 'blockquote', 'div', 'object', 'q', 'span' ); + + // WP bug fix for comments - in case you REALLY meant to type '< !--' + $text = str_replace('< !--', '< !--', $text); + // WP bug fix for LOVE <3 (and other situations with '<' before a number) + $text = preg_replace('#<([0-9]{1})#', '<$1', $text); + + while ( preg_match("/<(\/?[\w:]*)\s*([^>]*)>/", $text, $regex) ) { + $newtext .= $tagqueue; + + $i = strpos($text, $regex[0]); + $l = strlen($regex[0]); + + // clear the shifter + $tagqueue = ''; + // Pop or Push + if ( isset($regex[1][0]) && '/' == $regex[1][0] ) { // End Tag + $tag = strtolower(substr($regex[1],1)); + // if too many closing tags + if( $stacksize <= 0 ) { + $tag = ''; + // or close to be safe $tag = '/' . $tag; + } + // if stacktop value = tag close value then pop + else if ( $tagstack[$stacksize - 1] == $tag ) { // found closing tag + $tag = '</' . $tag . '>'; // Close Tag + // Pop + array_pop( $tagstack ); + $stacksize--; + } else { // closing tag not at top, search for it + for ( $j = $stacksize-1; $j >= 0; $j-- ) { + if ( $tagstack[$j] == $tag ) { + // add tag to tagqueue + for ( $k = $stacksize-1; $k >= $j; $k--) { + $tagqueue .= '</' . array_pop( $tagstack ) . '>'; + $stacksize--; + } + break; + } + } + $tag = ''; + } + } else { // Begin Tag + $tag = strtolower($regex[1]); + + // Tag Cleaning + + // If it's an empty tag "< >", do nothing + if ( '' == $tag ) { + // do nothing + } + // ElseIf it presents itself as a self-closing tag... + elseif ( substr( $regex[2], -1 ) == '/' ) { + // ...but it isn't a known single-entity self-closing tag, then don't let it be treated as such and + // immediately close it with a closing tag (the tag will encapsulate no text as a result) + if ( ! in_array( $tag, $single_tags ) ) + $regex[2] = trim( substr( $regex[2], 0, -1 ) ) . "></$tag"; + } + // ElseIf it's a known single-entity tag but it doesn't close itself, do so + elseif ( in_array($tag, $single_tags) ) { + $regex[2] .= '/'; + } + // Else it's not a single-entity tag + else { + // If the top of the stack is the same as the tag we want to push, close previous tag + if ( $stacksize > 0 && !in_array($tag, $nestable_tags) && $tagstack[$stacksize - 1] == $tag ) { + $tagqueue = '</' . array_pop( $tagstack ) . '>'; + $stacksize--; + } + $stacksize = array_push( $tagstack, $tag ); + } + + // Attributes + $attributes = $regex[2]; + if( ! empty( $attributes ) && $attributes[0] != '>' ) + $attributes = ' ' . $attributes; + + $tag = '<' . $tag . $attributes . '>'; + //If already queuing a close tag, then put this tag on, too + if ( !empty($tagqueue) ) { + $tagqueue .= $tag; + $tag = ''; + } + } + $newtext .= substr($text, 0, $i) . $tag; + $text = substr($text, $i + $l); + } + + // Clear Tag Queue + $newtext .= $tagqueue; + + // Add Remaining text + $newtext .= $text; + + // Empty Stack + while( $x = array_pop($tagstack) ) + $newtext .= '</' . $x . '>'; // Add remaining tags to close + + // WP fix for the bug with HTML comments + $newtext = str_replace("< !--","<!--",$newtext); + $newtext = str_replace("< !--","< !--",$newtext); + + return $newtext; +} + +/** + * Acts on text which is about to be edited. + * + * The $content is run through esc_textarea(), which uses htmlspecialchars() + * to convert special characters to HTML entities. If $richedit is set to true, + * it is simply a holder for the 'format_to_edit' filter. + * + * @since 0.71 + * + * @param string $content The text about to be edited. + * @param bool $richedit Whether the $content should not pass through htmlspecialchars(). Default false (meaning it will be passed). + * @return string The text after the filter (and possibly htmlspecialchars()) has been run. + */ +function format_to_edit( $content, $richedit = false ) { + /** + * Filter the text to be formatted for editing. + * + * @since 1.2.0 + * + * @param string $content The text, prior to formatting for editing. + */ + $content = apply_filters( 'format_to_edit', $content ); + if ( ! $richedit ) + $content = esc_textarea( $content ); + return $content; +} + +/** + * Holder for the 'format_to_post' filter. + * + * @since 0.71 + * + * @param string $content The text to pass through the filter. + * @return string Text returned from the 'format_to_post' filter. + */ +function format_to_post($content) { + /** + * Filter the string returned by format_to_post(). + * + * @since 1.2.0 + * + * @param string $content The string to format. + */ + $content = apply_filters( 'format_to_post', $content ); + return $content; +} + +/** + * Add leading zeros when necessary. + * + * If you set the threshold to '4' and the number is '10', then you will get + * back '0010'. If you set the threshold to '4' and the number is '5000', then you + * will get back '5000'. + * + * Uses sprintf to append the amount of zeros based on the $threshold parameter + * and the size of the number. If the number is large enough, then no zeros will + * be appended. + * + * @since 0.71 + * + * @param mixed $number Number to append zeros to if not greater than threshold. + * @param int $threshold Digit places number needs to be to not have zeros added. + * @return string Adds leading zeros to number if needed. + */ +function zeroise($number, $threshold) { + return sprintf('%0'.$threshold.'s', $number); +} + +/** + * Adds backslashes before letters and before a number at the start of a string. + * + * @since 0.71 + * + * @param string $string Value to which backslashes will be added. + * @return string String with backslashes inserted. + */ +function backslashit($string) { + if ( isset( $string[0] ) && $string[0] >= '0' && $string[0] <= '9' ) + $string = '\\\\' . $string; + return addcslashes( $string, 'A..Za..z' ); +} + +/** + * Appends a trailing slash. + * + * Will remove trailing slash if it exists already before adding a trailing + * slash. This prevents double slashing a string or path. + * + * The primary use of this is for paths and thus should be used for paths. It is + * not restricted to paths and offers no specific path support. + * + * @since 1.2.0 + * @uses untrailingslashit() Unslashes string if it was slashed already. + * + * @param string $string What to add the trailing slash to. + * @return string String with trailing slash added. + */ +function trailingslashit($string) { + return untrailingslashit($string) . '/'; +} + +/** + * Removes trailing slash if it exists. + * + * The primary use of this is for paths and thus should be used for paths. It is + * not restricted to paths and offers no specific path support. + * + * @since 2.2.0 + * + * @param string $string What to remove the trailing slash from. + * @return string String without the trailing slash. + */ +function untrailingslashit($string) { + return rtrim($string, '/'); +} + +/** + * Adds slashes to escape strings. + * + * Slashes will first be removed if magic_quotes_gpc is set, see {@link + * http://www.php.net/magic_quotes} for more details. + * + * @since 0.71 + * + * @param string $gpc The string returned from HTTP request data. + * @return string Returns a string escaped with slashes. + */ +function addslashes_gpc($gpc) { + if ( get_magic_quotes_gpc() ) + $gpc = stripslashes($gpc); + + return wp_slash($gpc); +} + +/** + * Navigates through an array and removes slashes from the values. + * + * If an array is passed, the array_map() function causes a callback to pass the + * value back to the function. The slashes from this value will removed. + * + * @since 2.0.0 + * + * @param mixed $value The value to be stripped. + * @return mixed Stripped value. + */ +function stripslashes_deep($value) { + if ( is_array($value) ) { + $value = array_map('stripslashes_deep', $value); + } elseif ( is_object($value) ) { + $vars = get_object_vars( $value ); + foreach ($vars as $key=>$data) { + $value->{$key} = stripslashes_deep( $data ); + } + } elseif ( is_string( $value ) ) { + $value = stripslashes($value); + } + + return $value; +} + +/** + * Navigates through an array and encodes the values to be used in a URL. + * + * + * @since 2.2.0 + * + * @param array|string $value The array or string to be encoded. + * @return array|string $value The encoded array (or string from the callback). + */ +function urlencode_deep($value) { + $value = is_array($value) ? array_map('urlencode_deep', $value) : urlencode($value); + return $value; +} + +/** + * Navigates through an array and raw encodes the values to be used in a URL. + * + * @since 3.4.0 + * + * @param array|string $value The array or string to be encoded. + * @return array|string $value The encoded array (or string from the callback). + */ +function rawurlencode_deep( $value ) { + return is_array( $value ) ? array_map( 'rawurlencode_deep', $value ) : rawurlencode( $value ); +} + +/** + * Converts email addresses characters to HTML entities to block spam bots. + * + * @since 0.71 + * + * @param string $email_address Email address. + * @param int $hex_encoding Optional. Set to 1 to enable hex encoding. + * @return string Converted email address. + */ +function antispambot( $email_address, $hex_encoding = 0 ) { + $email_no_spam_address = ''; + for ( $i = 0; $i < strlen( $email_address ); $i++ ) { + $j = rand( 0, 1 + $hex_encoding ); + if ( $j == 0 ) { + $email_no_spam_address .= '&#' . ord( $email_address[$i] ) . ';'; + } elseif ( $j == 1 ) { + $email_no_spam_address .= $email_address[$i]; + } elseif ( $j == 2 ) { + $email_no_spam_address .= '%' . zeroise( dechex( ord( $email_address[$i] ) ), 2 ); + } + } + + $email_no_spam_address = str_replace( '@', '@', $email_no_spam_address ); + + return $email_no_spam_address; +} + +/** + * Callback to convert URI match to HTML A element. + * + * This function was backported from 2.5.0 to 2.3.2. Regex callback for {@link + * make_clickable()}. + * + * @since 2.3.2 + * @access private + * + * @param array $matches Single Regex Match. + * @return string HTML A element with URI address. + */ +function _make_url_clickable_cb($matches) { + $url = $matches[2]; + + if ( ')' == $matches[3] && strpos( $url, '(' ) ) { + // If the trailing character is a closing parethesis, and the URL has an opening parenthesis in it, add the closing parenthesis to the URL. + // Then we can let the parenthesis balancer do its thing below. + $url .= $matches[3]; + $suffix = ''; + } else { + $suffix = $matches[3]; + } + + // Include parentheses in the URL only if paired + while ( substr_count( $url, '(' ) < substr_count( $url, ')' ) ) { + $suffix = strrchr( $url, ')' ) . $suffix; + $url = substr( $url, 0, strrpos( $url, ')' ) ); + } + + $url = esc_url($url); + if ( empty($url) ) + return $matches[0]; + + return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">$url</a>" . $suffix; +} + +/** + * Callback to convert URL match to HTML A element. + * + * This function was backported from 2.5.0 to 2.3.2. Regex callback for {@link + * make_clickable()}. + * + * @since 2.3.2 + * @access private + * + * @param array $matches Single Regex Match. + * @return string HTML A element with URL address. + */ +function _make_web_ftp_clickable_cb($matches) { + $ret = ''; + $dest = $matches[2]; + $dest = 'http://' . $dest; + $dest = esc_url($dest); + if ( empty($dest) ) + return $matches[0]; + + // removed trailing [.,;:)] from URL + if ( in_array( substr($dest, -1), array('.', ',', ';', ':', ')') ) === true ) { + $ret = substr($dest, -1); + $dest = substr($dest, 0, strlen($dest)-1); + } + return $matches[1] . "<a href=\"$dest\" rel=\"nofollow\">$dest</a>$ret"; +} + +/** + * Callback to convert email address match to HTML A element. + * + * This function was backported from 2.5.0 to 2.3.2. Regex callback for {@link + * make_clickable()}. + * + * @since 2.3.2 + * @access private + * + * @param array $matches Single Regex Match. + * @return string HTML A element with email address. + */ +function _make_email_clickable_cb($matches) { + $email = $matches[2] . '@' . $matches[3]; + return $matches[1] . "<a href=\"mailto:$email\">$email</a>"; +} + +/** + * Convert plaintext URI to HTML links. + * + * Converts URI, www and ftp, and email addresses. Finishes by fixing links + * within links. + * + * @since 0.71 + * + * @param string $text Content to convert URIs. + * @return string Content with converted URIs. + */ +function make_clickable( $text ) { + $r = ''; + $textarr = preg_split( '/(<[^<>]+>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // split out HTML tags + $nested_code_pre = 0; // Keep track of how many levels link is nested inside <pre> or <code> + foreach ( $textarr as $piece ) { + + if ( preg_match( '|^<code[\s>]|i', $piece ) || preg_match( '|^<pre[\s>]|i', $piece ) ) + $nested_code_pre++; + elseif ( ( '</code>' === strtolower( $piece ) || '</pre>' === strtolower( $piece ) ) && $nested_code_pre ) + $nested_code_pre--; + + if ( $nested_code_pre || empty( $piece ) || ( $piece[0] === '<' && ! preg_match( '|^<\s*[\w]{1,20}+://|', $piece ) ) ) { + $r .= $piece; + continue; + } + + // Long strings might contain expensive edge cases ... + if ( 10000 < strlen( $piece ) ) { + // ... break it up + foreach ( _split_str_by_whitespace( $piece, 2100 ) as $chunk ) { // 2100: Extra room for scheme and leading and trailing paretheses + if ( 2101 < strlen( $chunk ) ) { + $r .= $chunk; // Too big, no whitespace: bail. + } else { + $r .= make_clickable( $chunk ); + } + } + } else { + $ret = " $piece "; // Pad with whitespace to simplify the regexes + + $url_clickable = '~ + ([\\s(<.,;:!?]) # 1: Leading whitespace, or punctuation + ( # 2: URL + [\\w]{1,20}+:// # Scheme and hier-part prefix + (?=\S{1,2000}\s) # Limit to URLs less than about 2000 characters long + [\\w\\x80-\\xff#%\\~/@\\[\\]*(+=&$-]*+ # Non-punctuation URL character + (?: # Unroll the Loop: Only allow puctuation URL character if followed by a non-punctuation URL character + [\'.,;:!?)] # Punctuation URL character + [\\w\\x80-\\xff#%\\~/@\\[\\]*(+=&$-]++ # Non-punctuation URL character + )* + ) + (\)?) # 3: Trailing closing parenthesis (for parethesis balancing post processing) + ~xS'; // The regex is a non-anchored pattern and does not have a single fixed starting character. + // Tell PCRE to spend more time optimizing since, when used on a page load, it will probably be used several times. + + $ret = preg_replace_callback( $url_clickable, '_make_url_clickable_cb', $ret ); + + $ret = preg_replace_callback( '#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]+)#is', '_make_web_ftp_clickable_cb', $ret ); + $ret = preg_replace_callback( '#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', '_make_email_clickable_cb', $ret ); + + $ret = substr( $ret, 1, -1 ); // Remove our whitespace padding. + $r .= $ret; + } + } + + // Cleanup of accidental links within links + $r = preg_replace( '#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $r ); + return $r; +} + +/** + * Breaks a string into chunks by splitting at whitespace characters. + * The length of each returned chunk is as close to the specified length goal as possible, + * with the caveat that each chunk includes its trailing delimiter. + * Chunks longer than the goal are guaranteed to not have any inner whitespace. + * + * Joining the returned chunks with empty delimiters reconstructs the input string losslessly. + * + * Input string must have no null characters (or eventual transformations on output chunks must not care about null characters) + * + * <code> + * _split_str_by_whitespace( "1234 67890 1234 67890a cd 1234 890 123456789 1234567890a 45678 1 3 5 7 90 ", 10 ) == + * array ( + * 0 => '1234 67890 ', // 11 characters: Perfect split + * 1 => '1234 ', // 5 characters: '1234 67890a' was too long + * 2 => '67890a cd ', // 10 characters: '67890a cd 1234' was too long + * 3 => '1234 890 ', // 11 characters: Perfect split + * 4 => '123456789 ', // 10 characters: '123456789 1234567890a' was too long + * 5 => '1234567890a ', // 12 characters: Too long, but no inner whitespace on which to split + * 6 => ' 45678 ', // 11 characters: Perfect split + * 7 => '1 3 5 7 9', // 9 characters: End of $string + * ); + * </code> + * + * @since 3.4.0 + * @access private + * + * @param string $string The string to split. + * @param int $goal The desired chunk length. + * @return array Numeric array of chunks. + */ +function _split_str_by_whitespace( $string, $goal ) { + $chunks = array(); + + $string_nullspace = strtr( $string, "\r\n\t\v\f ", "\000\000\000\000\000\000" ); + + while ( $goal < strlen( $string_nullspace ) ) { + $pos = strrpos( substr( $string_nullspace, 0, $goal + 1 ), "\000" ); + + if ( false === $pos ) { + $pos = strpos( $string_nullspace, "\000", $goal + 1 ); + if ( false === $pos ) { + break; + } + } + + $chunks[] = substr( $string, 0, $pos + 1 ); + $string = substr( $string, $pos + 1 ); + $string_nullspace = substr( $string_nullspace, $pos + 1 ); + } + + if ( $string ) { + $chunks[] = $string; + } + + return $chunks; +} + +/** + * Adds rel nofollow string to all HTML A elements in content. + * + * @since 1.5.0 + * + * @param string $text Content that may contain HTML A elements. + * @return string Converted content. + */ +function wp_rel_nofollow( $text ) { + // This is a pre save filter, so text is already escaped. + $text = stripslashes($text); + $text = preg_replace_callback('|<a (.+?)>|i', 'wp_rel_nofollow_callback', $text); + $text = wp_slash($text); + return $text; +} + +/** + * Callback to add rel=nofollow string to HTML A element. + * + * Will remove already existing rel="nofollow" and rel='nofollow' from the + * string to prevent from invalidating (X)HTML. + * + * @since 2.3.0 + * + * @param array $matches Single Match + * @return string HTML A Element with rel nofollow. + */ +function wp_rel_nofollow_callback( $matches ) { + $text = $matches[1]; + $text = str_replace(array(' rel="nofollow"', " rel='nofollow'"), '', $text); + return "<a $text rel=\"nofollow\">"; +} + +/** + * Convert one smiley code to the icon graphic file equivalent. + * + * Callback handler for {@link convert_smilies()}. + * Looks up one smiley code in the $wpsmiliestrans global array and returns an + * <img> string for that smiley. + * + * @global array $wpsmiliestrans + * @since 2.8.0 + * + * @param array $matches Single match. Smiley code to convert to image. + * @return string Image string for smiley. + */ +function translate_smiley( $matches ) { + global $wpsmiliestrans; + + if ( count( $matches ) == 0 ) + return ''; + + $smiley = trim( reset( $matches ) ); + $img = $wpsmiliestrans[ $smiley ]; + + /** + * Filter the Smiley image URL before it's used in the image element. + * + * @since 2.9.0 + * + * @param string $smiley_url URL for the smiley image. + * @param string $img Filename for the smiley image. + * @param string $site_url Site URL, as returned by site_url(). + */ + $src_url = apply_filters( 'smilies_src', includes_url( "images/smilies/$img" ), $img, site_url() ); + + return sprintf( ' <img src="%s" alt="%s" class="wp-smiley" /> ', esc_url( $src_url ), esc_attr( $smiley ) ); +} + +/** + * Convert text equivalent of smilies to images. + * + * Will only convert smilies if the option 'use_smilies' is true and the global + * used in the function isn't empty. + * + * @since 0.71 + * @uses $wp_smiliessearch + * + * @param string $text Content to convert smilies from text. + * @return string Converted content with text smilies replaced with images. + */ +function convert_smilies( $text ) { + global $wp_smiliessearch; + $output = ''; + if ( get_option( 'use_smilies' ) && ! empty( $wp_smiliessearch ) ) { + // HTML loop taken from texturize function, could possible be consolidated + $textarr = preg_split( '/(<.*>)/U', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // capture the tags as well as in between + $stop = count( $textarr );// loop stuff + + // Ignore proessing of specific tags + $tags_to_ignore = 'code|pre|style|script|textarea'; + $ignore_block_element = ''; + + for ( $i = 0; $i < $stop; $i++ ) { + $content = $textarr[$i]; + + // If we're in an ignore block, wait until we find its closing tag + if ( '' == $ignore_block_element && preg_match( '/^<(' . $tags_to_ignore . ')>/', $content, $matches ) ) { + $ignore_block_element = $matches[1]; + } + + // If it's not a tag and not in ignore block + if ( '' == $ignore_block_element && strlen( $content ) > 0 && '<' != $content[0] ) { + $content = preg_replace_callback( $wp_smiliessearch, 'translate_smiley', $content ); + } + + // did we exit ignore block + if ( '' != $ignore_block_element && '</' . $ignore_block_element . '>' == $content ) { + $ignore_block_element = ''; + } + + $output .= $content; + } + } else { + // return default text. + $output = $text; + } + return $output; +} + +/** + * Verifies that an email is valid. + * + * Does not grok i18n domains. Not RFC compliant. + * + * @since 0.71 + * + * @param string $email Email address to verify. + * @param boolean $deprecated Deprecated. + * @return string|bool Either false or the valid email address. + */ +function is_email( $email, $deprecated = false ) { + if ( ! empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '3.0' ); + + // Test for the minimum length the email can be + if ( strlen( $email ) < 3 ) { + /** + * Filter whether an email address is valid. + * + * This filter is evaluated under several different contexts, such as 'email_too_short', + * 'email_no_at', 'local_invalid_chars', 'domain_period_sequence', 'domain_period_limits', + * 'domain_no_periods', 'sub_hyphen_limits', 'sub_invalid_chars', or no specific context. + * + * @since 2.8.0 + * + * @param bool $is_email Whether the email address has passed the is_email() checks. Default false. + * @param string $email The email address being checked. + * @param string $message An explanatory message to the user. + * @param string $context Context under which the email was tested. + */ + return apply_filters( 'is_email', false, $email, 'email_too_short' ); + } + + // Test for an @ character after the first position + if ( strpos( $email, '@', 1 ) === false ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'email_no_at' ); + } + + // Split out the local and domain parts + list( $local, $domain ) = explode( '@', $email, 2 ); + + // LOCAL PART + // Test for invalid characters + if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'local_invalid_chars' ); + } + + // DOMAIN PART + // Test for sequences of periods + if ( preg_match( '/\.{2,}/', $domain ) ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'domain_period_sequence' ); + } + + // Test for leading and trailing periods and whitespace + if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'domain_period_limits' ); + } + + // Split the domain into subs + $subs = explode( '.', $domain ); + + // Assume the domain will have at least two subs + if ( 2 > count( $subs ) ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'domain_no_periods' ); + } + + // Loop through each sub + foreach ( $subs as $sub ) { + // Test for leading and trailing hyphens and whitespace + if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' ); + } + + // Test for invalid characters + if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' ); + } + } + + // Congratulations your email made it! + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', $email, $email, null ); +} + +/** + * Convert to ASCII from email subjects. + * + * @since 1.2.0 + * + * @param string $string Subject line + * @return string Converted string to ASCII + */ +function wp_iso_descrambler($string) { + /* this may only work with iso-8859-1, I'm afraid */ + if (!preg_match('#\=\?(.+)\?Q\?(.+)\?\=#i', $string, $matches)) { + return $string; + } else { + $subject = str_replace('_', ' ', $matches[2]); + $subject = preg_replace_callback('#\=([0-9a-f]{2})#i', '_wp_iso_convert', $subject); + return $subject; + } +} + +/** + * Helper function to convert hex encoded chars to ASCII + * + * @since 3.1.0 + * @access private + * + * @param array $match The preg_replace_callback matches array + * @return array Converted chars + */ +function _wp_iso_convert( $match ) { + return chr( hexdec( strtolower( $match[1] ) ) ); +} + +/** + * Returns a date in the GMT equivalent. + * + * Requires and returns a date in the Y-m-d H:i:s format. If there is a + * timezone_string available, the date is assumed to be in that timezone, + * otherwise it simply subtracts the value of the 'gmt_offset' option. Return + * format can be overridden using the $format parameter. + * + * @since 1.2.0 + * + * @uses get_option() to retrieve the value of 'gmt_offset'. + * @param string $string The date to be converted. + * @param string $format The format string for the returned date (default is Y-m-d H:i:s) + * @return string GMT version of the date provided. + */ +function get_gmt_from_date( $string, $format = 'Y-m-d H:i:s' ) { + $tz = get_option( 'timezone_string' ); + if ( $tz ) { + $datetime = date_create( $string, new DateTimeZone( $tz ) ); + if ( ! $datetime ) + return gmdate( $format, 0 ); + $datetime->setTimezone( new DateTimeZone( 'UTC' ) ); + $string_gmt = $datetime->format( $format ); + } else { + if ( ! preg_match( '#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches ) ) + return gmdate( $format, 0 ); + $string_time = gmmktime( $matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1] ); + $string_gmt = gmdate( $format, $string_time - get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); + } + return $string_gmt; +} + +/** + * Converts a GMT date into the correct format for the blog. + * + * Requires and returns a date in the Y-m-d H:i:s format. If there is a + * timezone_string available, the returned date is in that timezone, otherwise + * it simply adds the value of gmt_offset. Return format can be overridden + * using the $format parameter + * + * @since 1.2.0 + * + * @param string $string The date to be converted. + * @param string $format The format string for the returned date (default is Y-m-d H:i:s) + * @return string Formatted date relative to the timezone / GMT offset. + */ +function get_date_from_gmt( $string, $format = 'Y-m-d H:i:s' ) { + $tz = get_option( 'timezone_string' ); + if ( $tz ) { + $datetime = date_create( $string, new DateTimeZone( 'UTC' ) ); + if ( ! $datetime ) + return date( $format, 0 ); + $datetime->setTimezone( new DateTimeZone( $tz ) ); + $string_localtime = $datetime->format( $format ); + } else { + if ( ! preg_match('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches) ) + return date( $format, 0 ); + $string_time = gmmktime( $matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1] ); + $string_localtime = gmdate( $format, $string_time + get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); + } + return $string_localtime; +} + +/** + * Computes an offset in seconds from an iso8601 timezone. + * + * @since 1.5.0 + * + * @param string $timezone Either 'Z' for 0 offset or '±hhmm'. + * @return int|float The offset in seconds. + */ +function iso8601_timezone_to_offset($timezone) { + // $timezone is either 'Z' or '[+|-]hhmm' + if ($timezone == 'Z') { + $offset = 0; + } else { + $sign = (substr($timezone, 0, 1) == '+') ? 1 : -1; + $hours = intval(substr($timezone, 1, 2)); + $minutes = intval(substr($timezone, 3, 4)) / 60; + $offset = $sign * HOUR_IN_SECONDS * ($hours + $minutes); + } + return $offset; +} + +/** + * Converts an iso8601 date to MySQL DateTime format used by post_date[_gmt]. + * + * @since 1.5.0 + * + * @param string $date_string Date and time in ISO 8601 format {@link http://en.wikipedia.org/wiki/ISO_8601}. + * @param string $timezone Optional. If set to GMT returns the time minus gmt_offset. Default is 'user'. + * @return string The date and time in MySQL DateTime format - Y-m-d H:i:s. + */ +function iso8601_to_datetime($date_string, $timezone = 'user') { + $timezone = strtolower($timezone); + + if ($timezone == 'gmt') { + + preg_match('#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', $date_string, $date_bits); + + if (!empty($date_bits[7])) { // we have a timezone, so let's compute an offset + $offset = iso8601_timezone_to_offset($date_bits[7]); + } else { // we don't have a timezone, so we assume user local timezone (not server's!) + $offset = HOUR_IN_SECONDS * get_option('gmt_offset'); + } + + $timestamp = gmmktime($date_bits[4], $date_bits[5], $date_bits[6], $date_bits[2], $date_bits[3], $date_bits[1]); + $timestamp -= $offset; + + return gmdate('Y-m-d H:i:s', $timestamp); + + } else if ($timezone == 'user') { + return preg_replace('#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', '$1-$2-$3 $4:$5:$6', $date_string); + } +} + +/** + * Adds a element attributes to open links in new windows. + * + * Comment text in popup windows should be filtered through this. Right now it's + * a moderately dumb function, ideally it would detect whether a target or rel + * attribute was already there and adjust its actions accordingly. + * + * @since 0.71 + * + * @param string $text Content to replace links to open in a new window. + * @return string Content that has filtered links. + */ +function popuplinks($text) { + $text = preg_replace('/<a (.+?)>/i', "<a $1 target='_blank' rel='external'>", $text); + return $text; +} + +/** + * Strips out all characters that are not allowable in an email. + * + * @since 1.5.0 + * + * @param string $email Email address to filter. + * @return string Filtered email address. + */ +function sanitize_email( $email ) { + // Test for the minimum length the email can be + if ( strlen( $email ) < 3 ) { + /** + * Filter a sanitized email address. + * + * This filter is evaluated under several contexts, including 'email_too_short', + * 'email_no_at', 'local_invalid_chars', 'domain_period_sequence', 'domain_period_limits', + * 'domain_no_periods', 'domain_no_valid_subs', or no context. + * + * @since 2.8.0 + * + * @param string $email The sanitized email address. + * @param string $email The email address, as provided to sanitize_email(). + * @param string $message A message to pass to the user. + */ + return apply_filters( 'sanitize_email', '', $email, 'email_too_short' ); + } + + // Test for an @ character after the first position + if ( strpos( $email, '@', 1 ) === false ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', '', $email, 'email_no_at' ); + } + + // Split out the local and domain parts + list( $local, $domain ) = explode( '@', $email, 2 ); + + // LOCAL PART + // Test for invalid characters + $local = preg_replace( '/[^a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]/', '', $local ); + if ( '' === $local ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', '', $email, 'local_invalid_chars' ); + } + + // DOMAIN PART + // Test for sequences of periods + $domain = preg_replace( '/\.{2,}/', '', $domain ); + if ( '' === $domain ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', '', $email, 'domain_period_sequence' ); + } + + // Test for leading and trailing periods and whitespace + $domain = trim( $domain, " \t\n\r\0\x0B." ); + if ( '' === $domain ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', '', $email, 'domain_period_limits' ); + } + + // Split the domain into subs + $subs = explode( '.', $domain ); + + // Assume the domain will have at least two subs + if ( 2 > count( $subs ) ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', '', $email, 'domain_no_periods' ); + } + + // Create an array that will contain valid subs + $new_subs = array(); + + // Loop through each sub + foreach ( $subs as $sub ) { + // Test for leading and trailing hyphens + $sub = trim( $sub, " \t\n\r\0\x0B-" ); + + // Test for invalid characters + $sub = preg_replace( '/[^a-z0-9-]+/i', '', $sub ); + + // If there's anything left, add it to the valid subs + if ( '' !== $sub ) { + $new_subs[] = $sub; + } + } + + // If there aren't 2 or more valid subs + if ( 2 > count( $new_subs ) ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', '', $email, 'domain_no_valid_subs' ); + } + + // Join valid subs into the new domain + $domain = join( '.', $new_subs ); + + // Put the email back together + $email = $local . '@' . $domain; + + // Congratulations your email made it! + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', $email, $email, null ); +} + +/** + * Determines the difference between two timestamps. + * + * The difference is returned in a human readable format such as "1 hour", + * "5 mins", "2 days". + * + * @since 1.5.0 + * + * @param int $from Unix timestamp from which the difference begins. + * @param int $to Optional. Unix timestamp to end the time difference. Default becomes time() if not set. + * @return string Human readable time difference. + */ +function human_time_diff( $from, $to = '' ) { + if ( empty( $to ) ) + $to = time(); + + $diff = (int) abs( $to - $from ); + + if ( $diff < HOUR_IN_SECONDS ) { + $mins = round( $diff / MINUTE_IN_SECONDS ); + if ( $mins <= 1 ) + $mins = 1; + /* translators: min=minute */ + $since = sprintf( _n( '%s min', '%s mins', $mins ), $mins ); + } elseif ( $diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS ) { + $hours = round( $diff / HOUR_IN_SECONDS ); + if ( $hours <= 1 ) + $hours = 1; + $since = sprintf( _n( '%s hour', '%s hours', $hours ), $hours ); + } elseif ( $diff < WEEK_IN_SECONDS && $diff >= DAY_IN_SECONDS ) { + $days = round( $diff / DAY_IN_SECONDS ); + if ( $days <= 1 ) + $days = 1; + $since = sprintf( _n( '%s day', '%s days', $days ), $days ); + } elseif ( $diff < 30 * DAY_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) { + $weeks = round( $diff / WEEK_IN_SECONDS ); + if ( $weeks <= 1 ) + $weeks = 1; + $since = sprintf( _n( '%s week', '%s weeks', $weeks ), $weeks ); + } elseif ( $diff < YEAR_IN_SECONDS && $diff >= 30 * DAY_IN_SECONDS ) { + $months = round( $diff / ( 30 * DAY_IN_SECONDS ) ); + if ( $months <= 1 ) + $months = 1; + $since = sprintf( _n( '%s month', '%s months', $months ), $months ); + } elseif ( $diff >= YEAR_IN_SECONDS ) { + $years = round( $diff / YEAR_IN_SECONDS ); + if ( $years <= 1 ) + $years = 1; + $since = sprintf( _n( '%s year', '%s years', $years ), $years ); + } + + return $since; +} + +/** + * Generates an excerpt from the content, if needed. + * + * The excerpt word amount will be 55 words and if the amount is greater than + * that, then the string ' […]' will be appended to the excerpt. If the string + * is less than 55 words, then the content will be returned as is. + * + * The 55 word limit can be modified by plugins/themes using the excerpt_length filter + * The ' […]' string can be modified by plugins/themes using the excerpt_more filter + * + * @since 1.5.0 + * + * @param string $text Optional. The excerpt. If set to empty, an excerpt is generated. + * @return string The excerpt. + */ +function wp_trim_excerpt($text = '') { + $raw_excerpt = $text; + if ( '' == $text ) { + $text = get_the_content(''); + + $text = strip_shortcodes( $text ); + + /** This filter is documented in wp-includes/post-template.php */ + $text = apply_filters( 'the_content', $text ); + $text = str_replace(']]>', ']]>', $text); + + /** + * Filter the number of words in an excerpt. + * + * @since 2.7.0 + * + * @param int $number The number of words. Default 55. + */ + $excerpt_length = apply_filters( 'excerpt_length', 55 ); + /** + * Filter the string in the "more" link displayed after a trimmed excerpt. + * + * @since 2.9.0 + * + * @param string $more_string The string shown within the more link. + */ + $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[…]' ); + $text = wp_trim_words( $text, $excerpt_length, $excerpt_more ); + } + /** + * Filter the trimmed excerpt string. + * + * @since 2.8.0 + * + * @param string $text The trimmed text. + * @param string $raw_excerpt The text prior to trimming. + */ + return apply_filters( 'wp_trim_excerpt', $text, $raw_excerpt ); +} + +/** + * Trims text to a certain number of words. + * + * This function is localized. For languages that count 'words' by the individual + * character (such as East Asian languages), the $num_words argument will apply + * to the number of individual characters. + * + * @since 3.3.0 + * + * @param string $text Text to trim. + * @param int $num_words Number of words. Default 55. + * @param string $more Optional. What to append if $text needs to be trimmed. Default '…'. + * @return string Trimmed text. + */ +function wp_trim_words( $text, $num_words = 55, $more = null ) { + if ( null === $more ) + $more = __( '…' ); + $original_text = $text; + $text = wp_strip_all_tags( $text ); + /* translators: If your word count is based on single characters (East Asian characters), + enter 'characters'. Otherwise, enter 'words'. Do not translate into your own language. */ + if ( 'characters' == _x( 'words', 'word count: words or characters?' ) && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) ) { + $text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' ); + preg_match_all( '/./u', $text, $words_array ); + $words_array = array_slice( $words_array[0], 0, $num_words + 1 ); + $sep = ''; + } else { + $words_array = preg_split( "/[\n\r\t ]+/", $text, $num_words + 1, PREG_SPLIT_NO_EMPTY ); + $sep = ' '; + } + if ( count( $words_array ) > $num_words ) { + array_pop( $words_array ); + $text = implode( $sep, $words_array ); + $text = $text . $more; + } else { + $text = implode( $sep, $words_array ); + } + /** + * Filter the text content after words have been trimmed. + * + * @since 3.3.0 + * + * @param string $text The trimmed text. + * @param int $num_words The number of words to trim the text to. Default 5. + * @param string $more An optional string to append to the end of the trimmed text, e.g. …. + * @param string $original_text The text before it was trimmed. + */ + return apply_filters( 'wp_trim_words', $text, $num_words, $more, $original_text ); +} + +/** + * Converts named entities into numbered entities. + * + * @since 1.5.1 + * + * @param string $text The text within which entities will be converted. + * @return string Text with converted entities. + */ +function ent2ncr($text) { + + /** + * Filter text before named entities are converted into numbered entities. + * + * A non-null string must be returned for the filter to be evaluated. + * + * @since 3.3.0 + * + * @param null $converted_text The text to be converted. Default null. + * @param string $text The text prior to entity conversion. + */ + $filtered = apply_filters( 'pre_ent2ncr', null, $text ); + if( null !== $filtered ) + return $filtered; + + $to_ncr = array( + '"' => '"', + '&' => '&', + '<' => '<', + '>' => '>', + '|' => '|', + ' ' => ' ', + '¡' => '¡', + '¢' => '¢', + '£' => '£', + '¤' => '¤', + '¥' => '¥', + '¦' => '¦', + '&brkbar;' => '¦', + '§' => '§', + '¨' => '¨', + '¨' => '¨', + '©' => '©', + 'ª' => 'ª', + '«' => '«', + '¬' => '¬', + '­' => '­', + '®' => '®', + '¯' => '¯', + '&hibar;' => '¯', + '°' => '°', + '±' => '±', + '²' => '²', + '³' => '³', + '´' => '´', + 'µ' => 'µ', + '¶' => '¶', + '·' => '·', + '¸' => '¸', + '¹' => '¹', + 'º' => 'º', + '»' => '»', + '¼' => '¼', + '½' => '½', + '¾' => '¾', + '¿' => '¿', + 'À' => 'À', + 'Á' => 'Á', + 'Â' => 'Â', + 'Ã' => 'Ã', + 'Ä' => 'Ä', + 'Å' => 'Å', + 'Æ' => 'Æ', + 'Ç' => 'Ç', + 'È' => 'È', + 'É' => 'É', + 'Ê' => 'Ê', + 'Ë' => 'Ë', + 'Ì' => 'Ì', + 'Í' => 'Í', + 'Î' => 'Î', + 'Ï' => 'Ï', + 'Ð' => 'Ð', + 'Ñ' => 'Ñ', + 'Ò' => 'Ò', + 'Ó' => 'Ó', + 'Ô' => 'Ô', + 'Õ' => 'Õ', + 'Ö' => 'Ö', + '×' => '×', + 'Ø' => 'Ø', + 'Ù' => 'Ù', + 'Ú' => 'Ú', + 'Û' => 'Û', + 'Ü' => 'Ü', + 'Ý' => 'Ý', + 'Þ' => 'Þ', + 'ß' => 'ß', + 'à' => 'à', + 'á' => 'á', + 'â' => 'â', + 'ã' => 'ã', + 'ä' => 'ä', + 'å' => 'å', + 'æ' => 'æ', + 'ç' => 'ç', + 'è' => 'è', + 'é' => 'é', + 'ê' => 'ê', + 'ë' => 'ë', + 'ì' => 'ì', + 'í' => 'í', + 'î' => 'î', + 'ï' => 'ï', + 'ð' => 'ð', + 'ñ' => 'ñ', + 'ò' => 'ò', + 'ó' => 'ó', + 'ô' => 'ô', + 'õ' => 'õ', + 'ö' => 'ö', + '÷' => '÷', + 'ø' => 'ø', + 'ù' => 'ù', + 'ú' => 'ú', + 'û' => 'û', + 'ü' => 'ü', + 'ý' => 'ý', + 'þ' => 'þ', + 'ÿ' => 'ÿ', + 'Œ' => 'Œ', + 'œ' => 'œ', + 'Š' => 'Š', + 'š' => 'š', + 'Ÿ' => 'Ÿ', + 'ƒ' => 'ƒ', + 'ˆ' => 'ˆ', + '˜' => '˜', + 'Α' => 'Α', + 'Β' => 'Β', + 'Γ' => 'Γ', + 'Δ' => 'Δ', + 'Ε' => 'Ε', + 'Ζ' => 'Ζ', + 'Η' => 'Η', + 'Θ' => 'Θ', + 'Ι' => 'Ι', + 'Κ' => 'Κ', + 'Λ' => 'Λ', + 'Μ' => 'Μ', + 'Ν' => 'Ν', + 'Ξ' => 'Ξ', + 'Ο' => 'Ο', + 'Π' => 'Π', + 'Ρ' => 'Ρ', + 'Σ' => 'Σ', + 'Τ' => 'Τ', + 'Υ' => 'Υ', + 'Φ' => 'Φ', + 'Χ' => 'Χ', + 'Ψ' => 'Ψ', + 'Ω' => 'Ω', + 'α' => 'α', + 'β' => 'β', + 'γ' => 'γ', + 'δ' => 'δ', + 'ε' => 'ε', + 'ζ' => 'ζ', + 'η' => 'η', + 'θ' => 'θ', + 'ι' => 'ι', + 'κ' => 'κ', + 'λ' => 'λ', + 'μ' => 'μ', + 'ν' => 'ν', + 'ξ' => 'ξ', + 'ο' => 'ο', + 'π' => 'π', + 'ρ' => 'ρ', + 'ς' => 'ς', + 'σ' => 'σ', + 'τ' => 'τ', + 'υ' => 'υ', + 'φ' => 'φ', + 'χ' => 'χ', + 'ψ' => 'ψ', + 'ω' => 'ω', + 'ϑ' => 'ϑ', + 'ϒ' => 'ϒ', + 'ϖ' => 'ϖ', + ' ' => ' ', + ' ' => ' ', + ' ' => ' ', + '‌' => '‌', + '‍' => '‍', + '‎' => '‎', + '‏' => '‏', + '–' => '–', + '—' => '—', + '‘' => '‘', + '’' => '’', + '‚' => '‚', + '“' => '“', + '”' => '”', + '„' => '„', + '†' => '†', + '‡' => '‡', + '•' => '•', + '…' => '…', + '‰' => '‰', + '′' => '′', + '″' => '″', + '‹' => '‹', + '›' => '›', + '‾' => '‾', + '⁄' => '⁄', + '€' => '€', + 'ℑ' => 'ℑ', + '℘' => '℘', + 'ℜ' => 'ℜ', + '™' => '™', + 'ℵ' => 'ℵ', + '↵' => '↵', + '⇐' => '⇐', + '⇑' => '⇑', + '⇒' => '⇒', + '⇓' => '⇓', + '⇔' => '⇔', + '∀' => '∀', + '∂' => '∂', + '∃' => '∃', + '∅' => '∅', + '∇' => '∇', + '∈' => '∈', + '∉' => '∉', + '∋' => '∋', + '∏' => '∏', + '∑' => '∑', + '−' => '−', + '∗' => '∗', + '√' => '√', + '∝' => '∝', + '∞' => '∞', + '∠' => '∠', + '∧' => '∧', + '∨' => '∨', + '∩' => '∩', + '∪' => '∪', + '∫' => '∫', + '∴' => '∴', + '∼' => '∼', + '≅' => '≅', + '≈' => '≈', + '≠' => '≠', + '≡' => '≡', + '≤' => '≤', + '≥' => '≥', + '⊂' => '⊂', + '⊃' => '⊃', + '⊄' => '⊄', + '⊆' => '⊆', + '⊇' => '⊇', + '⊕' => '⊕', + '⊗' => '⊗', + '⊥' => '⊥', + '⋅' => '⋅', + '⌈' => '⌈', + '⌉' => '⌉', + '⌊' => '⌊', + '⌋' => '⌋', + '⟨' => '〈', + '⟩' => '〉', + '←' => '←', + '↑' => '↑', + '→' => '→', + '↓' => '↓', + '↔' => '↔', + '◊' => '◊', + '♠' => '♠', + '♣' => '♣', + '♥' => '♥', + '♦' => '♦' + ); + + return str_replace( array_keys($to_ncr), array_values($to_ncr), $text ); +} + +/** + * Formats text for the rich text editor. + * + * The filter 'richedit_pre' is applied here. If $text is empty the filter will + * be applied to an empty string. + * + * @since 2.0.0 + * + * @param string $text The text to be formatted. + * @return string The formatted text after filter is applied. + */ +function wp_richedit_pre($text) { + if ( empty( $text ) ) { + /** + * Filter text returned for the rich text editor. + * + * This filter is first evaluated, and the value returned, if an empty string + * is passed to wp_richedit_pre(). If an empty string is passed, it results + * in a break tag and line feed. + * + * If a non-empty string is passed, the filter is evaluated on the wp_richedit_pre() + * return after being formatted. + * + * @since 2.0.0 + * + * @param string $output Text for the rich text editor. + */ + return apply_filters( 'richedit_pre', '' ); + } + + $output = convert_chars($text); + $output = wpautop($output); + $output = htmlspecialchars($output, ENT_NOQUOTES, get_option( 'blog_charset' ) ); + + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'richedit_pre', $output ); +} + +/** + * Formats text for the HTML editor. + * + * Unless $output is empty it will pass through htmlspecialchars before the + * 'htmledit_pre' filter is applied. + * + * @since 2.5.0 + * + * @param string $output The text to be formatted. + * @return string Formatted text after filter applied. + */ +function wp_htmledit_pre($output) { + if ( !empty($output) ) + $output = htmlspecialchars($output, ENT_NOQUOTES, get_option( 'blog_charset' ) ); // convert only < > & + + /** + * Filter the text before it is formatted for the HTML editor. + * + * @since 2.5.0 + * + * @param string $output The HTML-formatted text. + */ + return apply_filters( 'htmledit_pre', $output ); +} + +/** + * Perform a deep string replace operation to ensure the values in $search are no longer present + * + * Repeats the replacement operation until it no longer replaces anything so as to remove "nested" values + * e.g. $subject = '%0%0%0DDD', $search ='%0D', $result ='' rather than the '%0%0DD' that + * str_replace would return + * + * @since 2.8.1 + * @access private + * + * @param string|array $search The value being searched for, otherwise known as the needle. An array may be used to designate multiple needles. + * @param string $subject The string being searched and replaced on, otherwise known as the haystack. + * @return string The string with the replaced svalues. + */ +function _deep_replace( $search, $subject ) { + $subject = (string) $subject; + + $count = 1; + while ( $count ) { + $subject = str_replace( $search, '', $subject, $count ); + } + + return $subject; +} + +/** + * Escapes data for use in a MySQL query. + * + * Usually you should prepare queries using wpdb::prepare(). + * Sometimes, spot-escaping is required or useful. One example + * is preparing an array for use in an IN clause. + * + * @since 2.8.0 + * @param string|array $data Unescaped data + * @return string|array Escaped data + */ +function esc_sql( $data ) { + global $wpdb; + return $wpdb->_escape( $data ); +} + +/** + * Checks and cleans a URL. + * + * A number of characters are removed from the URL. If the URL is for displaying + * (the default behaviour) ampersands are also replaced. The 'clean_url' filter + * is applied to the returned cleaned URL. + * + * @since 2.8.0 + * @uses wp_kses_bad_protocol() To only permit protocols in the URL set + * via $protocols or the common ones set in the function. + * + * @param string $url The URL to be cleaned. + * @param array $protocols Optional. An array of acceptable protocols. + * Defaults to 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn' if not set. + * @param string $_context Private. Use esc_url_raw() for database usage. + * @return string The cleaned $url after the 'clean_url' filter is applied. + */ +function esc_url( $url, $protocols = null, $_context = 'display' ) { + $original_url = $url; + + if ( '' == $url ) + return $url; + $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $url); + $strip = array('%0d', '%0a', '%0D', '%0A'); + $url = _deep_replace($strip, $url); + $url = str_replace(';//', '://', $url); + /* If the URL doesn't appear to contain a scheme, we + * presume it needs http:// appended (unless a relative + * link starting with /, # or ? or a php file). + */ + if ( strpos($url, ':') === false && ! in_array( $url[0], array( '/', '#', '?' ) ) && + ! preg_match('/^[a-z0-9-]+?\.php/i', $url) ) + $url = 'http://' . $url; + + // Replace ampersands and single quotes only when displaying. + if ( 'display' == $_context ) { + $url = wp_kses_normalize_entities( $url ); + $url = str_replace( '&', '&', $url ); + $url = str_replace( "'", ''', $url ); + } + + if ( '/' === $url[0] ) { + $good_protocol_url = $url; + } else { + if ( ! is_array( $protocols ) ) + $protocols = wp_allowed_protocols(); + $good_protocol_url = wp_kses_bad_protocol( $url, $protocols ); + if ( strtolower( $good_protocol_url ) != strtolower( $url ) ) + return ''; + } + + /** + * Filter a string cleaned and escaped for output as a URL. + * + * @since 2.3.0 + * + * @param string $good_protocol_url The cleaned URL to be returned. + * @param string $original_url The URL prior to cleaning. + * @param string $_context If 'display', replace ampersands and single quotes only. + */ + return apply_filters( 'clean_url', $good_protocol_url, $original_url, $_context ); +} + +/** + * Performs esc_url() for database usage. + * + * @since 2.8.0 + * @uses esc_url() + * + * @param string $url The URL to be cleaned. + * @param array $protocols An array of acceptable protocols. + * @return string The cleaned URL. + */ +function esc_url_raw( $url, $protocols = null ) { + return esc_url( $url, $protocols, 'db' ); +} + +/** + * Convert entities, while preserving already-encoded entities. + * + * @link http://www.php.net/htmlentities Borrowed from the PHP Manual user notes. + * + * @since 1.2.2 + * + * @param string $myHTML The text to be converted. + * @return string Converted text. + */ +function htmlentities2($myHTML) { + $translation_table = get_html_translation_table( HTML_ENTITIES, ENT_QUOTES ); + $translation_table[chr(38)] = '&'; + return preg_replace( "/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/", "&", strtr($myHTML, $translation_table) ); +} + +/** + * Escape single quotes, htmlspecialchar " < > &, and fix line endings. + * + * Escapes text strings for echoing in JS. It is intended to be used for inline JS + * (in a tag attribute, for example onclick="..."). Note that the strings have to + * be in single quotes. The filter 'js_escape' is also applied here. + * + * @since 2.8.0 + * + * @param string $text The text to be escaped. + * @return string Escaped text. + */ +function esc_js( $text ) { + $safe_text = wp_check_invalid_utf8( $text ); + $safe_text = _wp_specialchars( $safe_text, ENT_COMPAT ); + $safe_text = preg_replace( '/&#(x)?0*(?(1)27|39);?/i', "'", stripslashes( $safe_text ) ); + $safe_text = str_replace( "\r", '', $safe_text ); + $safe_text = str_replace( "\n", '\\n', addslashes( $safe_text ) ); + /** + * Filter a string cleaned and escaped for output in JavaScript. + * + * Text passed to esc_js() is stripped of invalid or special characters, + * and properly slashed for output. + * + * @since 2.0.6 + * + * @param string $safe_text The text after it has been escaped. + * @param string $text The text prior to being escaped. + */ + return apply_filters( 'js_escape', $safe_text, $text ); +} + +/** + * Escaping for HTML blocks. + * + * @since 2.8.0 + * + * @param string $text + * @return string + */ +function esc_html( $text ) { + $safe_text = wp_check_invalid_utf8( $text ); + $safe_text = _wp_specialchars( $safe_text, ENT_QUOTES ); + /** + * Filter a string cleaned and escaped for output in HTML. + * + * Text passed to esc_html() is stripped of invalid or special characters + * before output. + * + * @since 2.8.0 + * + * @param string $safe_text The text after it has been escaped. + * @param string $text The text prior to being escaped. + */ + return apply_filters( 'esc_html', $safe_text, $text ); +} + +/** + * Escaping for HTML attributes. + * + * @since 2.8.0 + * + * @param string $text + * @return string + */ +function esc_attr( $text ) { + $safe_text = wp_check_invalid_utf8( $text ); + $safe_text = _wp_specialchars( $safe_text, ENT_QUOTES ); + /** + * Filter a string cleaned and escaped for output in an HTML attribute. + * + * Text passed to esc_attr() is stripped of invalid or special characters + * before output. + * + * @since 2.0.6 + * + * @param string $safe_text The text after it has been escaped. + * @param string $text The text prior to being escaped. + */ + return apply_filters( 'attribute_escape', $safe_text, $text ); +} + +/** + * Escaping for textarea values. + * + * @since 3.1.0 + * + * @param string $text + * @return string + */ +function esc_textarea( $text ) { + $safe_text = htmlspecialchars( $text, ENT_QUOTES, get_option( 'blog_charset' ) ); + /** + * Filter a string cleaned and escaped for output in a textarea element. + * + * @since 3.1.0 + * + * @param string $safe_text The text after it has been escaped. + * @param string $text The text prior to being escaped. + */ + return apply_filters( 'esc_textarea', $safe_text, $text ); +} + +/** + * Escape an HTML tag name. + * + * @since 2.5.0 + * + * @param string $tag_name + * @return string + */ +function tag_escape($tag_name) { + $safe_tag = strtolower( preg_replace('/[^a-zA-Z0-9_:]/', '', $tag_name) ); + /** + * Filter a string cleaned and escaped for output as an HTML tag. + * + * @since 2.8.0 + * + * @param string $safe_tag The tag name after it has been escaped. + * @param string $tag_name The text before it was escaped. + */ + return apply_filters( 'tag_escape', $safe_tag, $tag_name ); +} + +/** + * Escapes text for SQL LIKE special characters % and _. + * + * @since 2.5.0 + * + * @param string $text The text to be escaped. + * @return string text, safe for inclusion in LIKE query. + */ +function like_escape($text) { + return str_replace(array("%", "_"), array("\\%", "\\_"), $text); +} + +/** + * Convert full URL paths to absolute paths. + * + * Removes the http or https protocols and the domain. Keeps the path '/' at the + * beginning, so it isn't a true relative link, but from the web root base. + * + * @since 2.1.0 + * + * @param string $link Full URL path. + * @return string Absolute path. + */ +function wp_make_link_relative( $link ) { + return preg_replace( '|https?://[^/]+(/.*)|i', '$1', $link ); +} + +/** + * Sanitises various option values based on the nature of the option. + * + * This is basically a switch statement which will pass $value through a number + * of functions depending on the $option. + * + * @since 2.0.5 + * + * @param string $option The name of the option. + * @param string $value The unsanitised value. + * @return string Sanitized value. + */ +function sanitize_option($option, $value) { + + switch ( $option ) { + case 'admin_email' : + case 'new_admin_email' : + $value = sanitize_email( $value ); + if ( ! is_email( $value ) ) { + $value = get_option( $option ); // Resets option to stored value in the case of failed sanitization + if ( function_exists( 'add_settings_error' ) ) + add_settings_error( $option, 'invalid_admin_email', __( 'The email address entered did not appear to be a valid email address. Please enter a valid email address.' ) ); + } + break; + + case 'thumbnail_size_w': + case 'thumbnail_size_h': + case 'medium_size_w': + case 'medium_size_h': + case 'large_size_w': + case 'large_size_h': + case 'mailserver_port': + case 'comment_max_links': + case 'page_on_front': + case 'page_for_posts': + case 'rss_excerpt_length': + case 'default_category': + case 'default_email_category': + case 'default_link_category': + case 'close_comments_days_old': + case 'comments_per_page': + case 'thread_comments_depth': + case 'users_can_register': + case 'start_of_week': + $value = absint( $value ); + break; + + case 'posts_per_page': + case 'posts_per_rss': + $value = (int) $value; + if ( empty($value) ) + $value = 1; + if ( $value < -1 ) + $value = abs($value); + break; + + case 'default_ping_status': + case 'default_comment_status': + // Options that if not there have 0 value but need to be something like "closed" + if ( $value == '0' || $value == '') + $value = 'closed'; + break; + + case 'blogdescription': + case 'blogname': + $value = wp_kses_post( $value ); + $value = esc_html( $value ); + break; + + case 'blog_charset': + $value = preg_replace('/[^a-zA-Z0-9_-]/', '', $value); // strips slashes + break; + + case 'blog_public': + // This is the value if the settings checkbox is not checked on POST. Don't rely on this. + if ( null === $value ) + $value = 1; + else + $value = intval( $value ); + break; + + case 'date_format': + case 'time_format': + case 'mailserver_url': + case 'mailserver_login': + case 'mailserver_pass': + case 'upload_path': + $value = strip_tags( $value ); + $value = wp_kses_data( $value ); + break; + + case 'ping_sites': + $value = explode( "\n", $value ); + $value = array_filter( array_map( 'trim', $value ) ); + $value = array_filter( array_map( 'esc_url_raw', $value ) ); + $value = implode( "\n", $value ); + break; + + case 'gmt_offset': + $value = preg_replace('/[^0-9:.-]/', '', $value); // strips slashes + break; + + case 'siteurl': + if ( (bool)preg_match( '#http(s?)://(.+)#i', $value) ) { + $value = esc_url_raw($value); + } else { + $value = get_option( $option ); // Resets option to stored value in the case of failed sanitization + if ( function_exists('add_settings_error') ) + add_settings_error('siteurl', 'invalid_siteurl', __('The WordPress address you entered did not appear to be a valid URL. Please enter a valid URL.')); + } + break; + + case 'home': + if ( (bool)preg_match( '#http(s?)://(.+)#i', $value) ) { + $value = esc_url_raw($value); + } else { + $value = get_option( $option ); // Resets option to stored value in the case of failed sanitization + if ( function_exists('add_settings_error') ) + add_settings_error('home', 'invalid_home', __('The Site address you entered did not appear to be a valid URL. Please enter a valid URL.')); + } + break; + + case 'WPLANG': + $allowed = get_available_languages(); + if ( ! in_array( $value, $allowed ) && ! empty( $value ) ) + $value = get_option( $option ); + break; + + case 'illegal_names': + if ( ! is_array( $value ) ) + $value = explode( ' ', $value ); + + $value = array_values( array_filter( array_map( 'trim', $value ) ) ); + + if ( ! $value ) + $value = ''; + break; + + case 'limited_email_domains': + case 'banned_email_domains': + if ( ! is_array( $value ) ) + $value = explode( "\n", $value ); + + $domains = array_values( array_filter( array_map( 'trim', $value ) ) ); + $value = array(); + + foreach ( $domains as $domain ) { + if ( ! preg_match( '/(--|\.\.)/', $domain ) && preg_match( '|^([a-zA-Z0-9-\.])+$|', $domain ) ) + $value[] = $domain; + } + if ( ! $value ) + $value = ''; + break; + + case 'timezone_string': + $allowed_zones = timezone_identifiers_list(); + if ( ! in_array( $value, $allowed_zones ) && ! empty( $value ) ) { + $value = get_option( $option ); // Resets option to stored value in the case of failed sanitization + if ( function_exists('add_settings_error') ) + add_settings_error('timezone_string', 'invalid_timezone_string', __('The timezone you have entered is not valid. Please select a valid timezone.') ); + } + break; + + case 'permalink_structure': + case 'category_base': + case 'tag_base': + $value = esc_url_raw( $value ); + $value = str_replace( 'http://', '', $value ); + break; + + case 'default_role' : + if ( ! get_role( $value ) && get_role( 'subscriber' ) ) + $value = 'subscriber'; + break; + } + + /** + * Filter an option value following sanitization. + * + * @since 2.3.0 + * + * @param string $value The sanitized option value. + * @param string $option The option name. + */ + $value = apply_filters( "sanitize_option_{$option}", $value, $option ); + + return $value; +} + +/** + * Parses a string into variables to be stored in an array. + * + * Uses {@link http://www.php.net/parse_str parse_str()} and stripslashes if + * {@link http://www.php.net/magic_quotes magic_quotes_gpc} is on. + * + * @since 2.2.1 + * + * @param string $string The string to be parsed. + * @param array $array Variables will be stored in this array. + */ +function wp_parse_str( $string, &$array ) { + parse_str( $string, $array ); + if ( get_magic_quotes_gpc() ) + $array = stripslashes_deep( $array ); + /** + * Filter the array of variables derived from a parsed string. + * + * @since 2.3.0 + * + * @param array $array The array populated with variables. + */ + $array = apply_filters( 'wp_parse_str', $array ); +} + +/** + * Convert lone less than signs. + * + * KSES already converts lone greater than signs. + * + * @uses wp_pre_kses_less_than_callback in the callback function. + * @since 2.3.0 + * + * @param string $text Text to be converted. + * @return string Converted text. + */ +function wp_pre_kses_less_than( $text ) { + return preg_replace_callback('%<[^>]*?((?=<)|>|$)%', 'wp_pre_kses_less_than_callback', $text); +} + +/** + * Callback function used by preg_replace. + * + * @uses esc_html to format the $matches text. + * @since 2.3.0 + * + * @param array $matches Populated by matches to preg_replace. + * @return string The text returned after esc_html if needed. + */ +function wp_pre_kses_less_than_callback( $matches ) { + if ( false === strpos($matches[0], '>') ) + return esc_html($matches[0]); + return $matches[0]; +} + +/** + * WordPress implementation of PHP sprintf() with filters. + * + * @since 2.5.0 + * @link http://www.php.net/sprintf + * + * @param string $pattern The string which formatted args are inserted. + * @param mixed $args,... Arguments to be formatted into the $pattern string. + * @return string The formatted string. + */ +function wp_sprintf( $pattern ) { + $args = func_get_args(); + $len = strlen($pattern); + $start = 0; + $result = ''; + $arg_index = 0; + while ( $len > $start ) { + // Last character: append and break + if ( strlen($pattern) - 1 == $start ) { + $result .= substr($pattern, -1); + break; + } + + // Literal %: append and continue + if ( substr($pattern, $start, 2) == '%%' ) { + $start += 2; + $result .= '%'; + continue; + } + + // Get fragment before next % + $end = strpos($pattern, '%', $start + 1); + if ( false === $end ) + $end = $len; + $fragment = substr($pattern, $start, $end - $start); + + // Fragment has a specifier + if ( $pattern[$start] == '%' ) { + // Find numbered arguments or take the next one in order + if ( preg_match('/^%(\d+)\$/', $fragment, $matches) ) { + $arg = isset($args[$matches[1]]) ? $args[$matches[1]] : ''; + $fragment = str_replace("%{$matches[1]}$", '%', $fragment); + } else { + ++$arg_index; + $arg = isset($args[$arg_index]) ? $args[$arg_index] : ''; + } + + /** + * Filter a fragment from the pattern passed to wp_sprintf(). + * + * If the fragment is unchanged, then sprintf() will be run on the fragment. + * + * @since 2.5.0 + * + * @param string $fragment A fragment from the pattern. + * @param string $arg The argument. + */ + $_fragment = apply_filters( 'wp_sprintf', $fragment, $arg ); + if ( $_fragment != $fragment ) + $fragment = $_fragment; + else + $fragment = sprintf($fragment, strval($arg) ); + } + + // Append to result and move to next fragment + $result .= $fragment; + $start = $end; + } + return $result; +} + +/** + * Localize list items before the rest of the content. + * + * The '%l' must be at the first characters can then contain the rest of the + * content. The list items will have ', ', ', and', and ' and ' added depending + * on the amount of list items in the $args parameter. + * + * @since 2.5.0 + * + * @param string $pattern Content containing '%l' at the beginning. + * @param array $args List items to prepend to the content and replace '%l'. + * @return string Localized list items and rest of the content. + */ +function wp_sprintf_l($pattern, $args) { + // Not a match + if ( substr($pattern, 0, 2) != '%l' ) + return $pattern; + + // Nothing to work with + if ( empty($args) ) + return ''; + + /** + * Filter the translated delimiters used by wp_sprintf_l(). + * + * Please note: Ampersands and entities should be avoided here. + * + * @since 2.5.0 + * + * @param array $delimiters An array of translated delimiters. + */ + $l = apply_filters( 'wp_sprintf_l', array( + /* translators: used between list items, there is a space after the comma */ + 'between' => __(', '), + /* translators: used between list items, there is a space after the and */ + 'between_last_two' => __(', and '), + /* translators: used between only two list items, there is a space after the and */ + 'between_only_two' => __(' and '), + ) ); + + $args = (array) $args; + $result = array_shift($args); + if ( count($args) == 1 ) + $result .= $l['between_only_two'] . array_shift($args); + // Loop when more than two args + $i = count($args); + while ( $i ) { + $arg = array_shift($args); + $i--; + if ( 0 == $i ) + $result .= $l['between_last_two'] . $arg; + else + $result .= $l['between'] . $arg; + } + return $result . substr($pattern, 2); +} + +/** + * Safely extracts not more than the first $count characters from html string. + * + * UTF-8, tags and entities safe prefix extraction. Entities inside will *NOT* + * be counted as one character. For example & will be counted as 4, < as + * 3, etc. + * + * @since 2.5.0 + * + * @param string $str String to get the excerpt from. + * @param integer $count Maximum number of characters to take. + * @param string $more Optional. What to append if $str needs to be trimmed. Defaults to empty string. + * @return string The excerpt. + */ +function wp_html_excerpt( $str, $count, $more = null ) { + if ( null === $more ) + $more = ''; + $str = wp_strip_all_tags( $str, true ); + $excerpt = mb_substr( $str, 0, $count ); + // remove part of an entity at the end + $excerpt = preg_replace( '/&[^;\s]{0,6}$/', '', $excerpt ); + if ( $str != $excerpt ) + $excerpt = trim( $excerpt ) . $more; + return $excerpt; +} + +/** + * Add a Base url to relative links in passed content. + * + * By default it supports the 'src' and 'href' attributes. However this can be + * changed via the 3rd param. + * + * @since 2.7.0 + * + * @param string $content String to search for links in. + * @param string $base The base URL to prefix to links. + * @param array $attrs The attributes which should be processed. + * @return string The processed content. + */ +function links_add_base_url( $content, $base, $attrs = array('src', 'href') ) { + global $_links_add_base; + $_links_add_base = $base; + $attrs = implode('|', (array)$attrs); + return preg_replace_callback( "!($attrs)=(['\"])(.+?)\\2!i", '_links_add_base', $content ); +} + +/** + * Callback to add a base url to relative links in passed content. + * + * @since 2.7.0 + * @access private + * + * @param string $m The matched link. + * @return string The processed link. + */ +function _links_add_base($m) { + global $_links_add_base; + //1 = attribute name 2 = quotation mark 3 = URL + return $m[1] . '=' . $m[2] . + ( preg_match( '#^(\w{1,20}):#', $m[3], $protocol ) && in_array( $protocol[1], wp_allowed_protocols() ) ? + $m[3] : + path_join( $_links_add_base, $m[3] ) ) + . $m[2]; +} + +/** + * Adds a Target attribute to all links in passed content. + * + * This function by default only applies to <a> tags, however this can be + * modified by the 3rd param. + * + * <b>NOTE:</b> Any current target attributed will be stripped and replaced. + * + * @since 2.7.0 + * + * @param string $content String to search for links in. + * @param string $target The Target to add to the links. + * @param array $tags An array of tags to apply to. + * @return string The processed content. + */ +function links_add_target( $content, $target = '_blank', $tags = array('a') ) { + global $_links_add_target; + $_links_add_target = $target; + $tags = implode('|', (array)$tags); + return preg_replace_callback( "!<($tags)([^>]*)>!i", '_links_add_target', $content ); +} + +/** + * Callback to add a target attribute to all links in passed content. + * + * @since 2.7.0 + * @access private + * + * @param string $m The matched link. + * @return string The processed link. + */ +function _links_add_target( $m ) { + global $_links_add_target; + $tag = $m[1]; + $link = preg_replace('|( target=([\'"])(.*?)\2)|i', '', $m[2]); + return '<' . $tag . $link . ' target="' . esc_attr( $_links_add_target ) . '">'; +} + +/** + * Normalize EOL characters and strip duplicate whitespace. + * + * @since 2.7.0 + * + * @param string $str The string to normalize. + * @return string The normalized string. + */ +function normalize_whitespace( $str ) { + $str = trim( $str ); + $str = str_replace( "\r", "\n", $str ); + $str = preg_replace( array( '/\n+/', '/[ \t]+/' ), array( "\n", ' ' ), $str ); + return $str; +} + +/** + * Properly strip all HTML tags including script and style + * + * @since 2.9.0 + * + * @param string $string String containing HTML tags + * @param bool $remove_breaks optional Whether to remove left over line breaks and white space chars + * @return string The processed string. + */ +function wp_strip_all_tags($string, $remove_breaks = false) { + $string = preg_replace( '@<(script|style)[^>]*?>.*?</\\1>@si', '', $string ); + $string = strip_tags($string); + + if ( $remove_breaks ) + $string = preg_replace('/[\r\n\t ]+/', ' ', $string); + + return trim( $string ); +} + +/** + * Sanitize a string from user input or from the db + * + * check for invalid UTF-8, + * Convert single < characters to entity, + * strip all tags, + * remove line breaks, tabs and extra white space, + * strip octets. + * + * @since 2.9.0 + * + * @param string $str + * @return string + */ +function sanitize_text_field($str) { + $filtered = wp_check_invalid_utf8( $str ); + + if ( strpos($filtered, '<') !== false ) { + $filtered = wp_pre_kses_less_than( $filtered ); + // This will strip extra whitespace for us. + $filtered = wp_strip_all_tags( $filtered, true ); + } else { + $filtered = trim( preg_replace('/[\r\n\t ]+/', ' ', $filtered) ); + } + + $found = false; + while ( preg_match('/%[a-f0-9]{2}/i', $filtered, $match) ) { + $filtered = str_replace($match[0], '', $filtered); + $found = true; + } + + if ( $found ) { + // Strip out the whitespace that may now exist after removing the octets. + $filtered = trim( preg_replace('/ +/', ' ', $filtered) ); + } + + /** + * Filter a sanitized text field string. + * + * @since 2.9.0 + * + * @param string $filtered The sanitized string. + * @param string $str The string prior to being sanitized. + */ + return apply_filters( 'sanitize_text_field', $filtered, $str ); +} + +/** + * i18n friendly version of basename() + * + * @since 3.1.0 + * + * @param string $path A path. + * @param string $suffix If the filename ends in suffix this will also be cut off. + * @return string + */ +function wp_basename( $path, $suffix = '' ) { + return urldecode( basename( str_replace( array( '%2F', '%5C' ), '/', urlencode( $path ) ), $suffix ) ); +} + +/** + * Forever eliminate "Wordpress" from the planet (or at least the little bit we can influence). + * + * Violating our coding standards for a good function name. + * + * @since 3.0.0 + */ +function capital_P_dangit( $text ) { + // Simple replacement for titles + $current_filter = current_filter(); + if ( 'the_title' === $current_filter || 'wp_title' === $current_filter ) + return str_replace( 'Wordpress', 'WordPress', $text ); + // Still here? Use the more judicious replacement + static $dblq = false; + if ( false === $dblq ) + $dblq = _x( '“', 'opening curly double quote' ); + return str_replace( + array( ' Wordpress', '‘Wordpress', $dblq . 'Wordpress', '>Wordpress', '(Wordpress' ), + array( ' WordPress', '‘WordPress', $dblq . 'WordPress', '>WordPress', '(WordPress' ), + $text ); + +} + +/** + * Sanitize a mime type + * + * @since 3.1.3 + * + * @param string $mime_type Mime type + * @return string Sanitized mime type + */ +function sanitize_mime_type( $mime_type ) { + $sani_mime_type = preg_replace( '/[^-+*.a-zA-Z0-9\/]/', '', $mime_type ); + /** + * Filter a mime type following sanitization. + * + * @since 3.1.3 + * + * @param string $sani_mime_type The sanitized mime type. + * @param string $mime_type The mime type prior to sanitization. + */ + return apply_filters( 'sanitize_mime_type', $sani_mime_type, $mime_type ); +} + +/** + * Sanitize space or carriage return separated URLs that are used to send trackbacks. + * + * @since 3.4.0 + * + * @param string $to_ping Space or carriage return separated URLs + * @return string URLs starting with the http or https protocol, separated by a carriage return. + */ +function sanitize_trackback_urls( $to_ping ) { + $urls_to_ping = preg_split( '/[\r\n\t ]/', trim( $to_ping ), -1, PREG_SPLIT_NO_EMPTY ); + foreach ( $urls_to_ping as $k => $url ) { + if ( !preg_match( '#^https?://.#i', $url ) ) + unset( $urls_to_ping[$k] ); + } + $urls_to_ping = array_map( 'esc_url_raw', $urls_to_ping ); + $urls_to_ping = implode( "\n", $urls_to_ping ); + /** + * Filter a list of trackback URLs following sanitization. + * + * The string returned here consists of a space or carriage return-delimited list + * of trackback URLs. + * + * @since 3.4.0 + * + * @param string $urls_to_ping Sanitized space or carriage return separated URLs. + * @param string $to_ping Space or carriage return separated URLs before sanitization. + */ + return apply_filters( 'sanitize_trackback_urls', $urls_to_ping, $to_ping ); +} + +/** + * Add slashes to a string or array of strings. + * + * This should be used when preparing data for core API that expects slashed data. + * This should not be used to escape data going directly into an SQL query. + * + * @since 3.6.0 + * + * @param string|array $value String or array of strings to slash. + * @return string|array Slashed $value + */ +function wp_slash( $value ) { + if ( is_array( $value ) ) { + foreach ( $value as $k => $v ) { + if ( is_array( $v ) ) { + $value[$k] = wp_slash( $v ); + } else { + $value[$k] = addslashes( $v ); + } + } + } else { + $value = addslashes( $value ); + } + + return $value; +} + +/** + * Remove slashes from a string or array of strings. + * + * This should be used to remove slashes from data passed to core API that + * expects data to be unslashed. + * + * @since 3.6.0 + * + * @param string|array $value String or array of strings to unslash. + * @return string|array Unslashed $value + */ +function wp_unslash( $value ) { + return stripslashes_deep( $value ); +} + +/** + * Extract and return the first URL from passed content. + * + * @since 3.6.0 + * + * @param string $content A string which might contain a URL. + * @return string The found URL. + */ +function get_url_in_content( $content ) { + if ( empty( $content ) ) + return ''; + + if ( preg_match( '/<a\s[^>]*?href=([\'"])(.+?)\1/is', $content, $matches ) ) + return esc_url_raw( $matches[2] ); + + return false; +} diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php new file mode 100644 index 0000000..9b0335b --- /dev/null +++ b/src/wp-includes/functions.php @@ -0,0 +1,4193 @@ +<?php +/** + * Main WordPress API + * + * @package WordPress + */ + +require( ABSPATH . WPINC . '/option.php' ); + +/** + * Converts given date string into a different format. + * + * $format should be either a PHP date format string, e.g. 'U' for a Unix + * timestamp, or 'G' for a Unix timestamp assuming that $date is GMT. + * + * If $translate is true then the given date and format string will + * be passed to date_i18n() for translation. + * + * @since 0.71 + * + * @param string $format Format of the date to return. + * @param string $date Date string to convert. + * @param bool $translate Whether the return date should be translated. Default is true. + * @return string|int Formatted date string, or Unix timestamp. + */ +function mysql2date( $format, $date, $translate = true ) { + if ( empty( $date ) ) + return false; + + if ( 'G' == $format ) + return strtotime( $date . ' +0000' ); + + $i = strtotime( $date ); + + if ( 'U' == $format ) + return $i; + + if ( $translate ) + return date_i18n( $format, $i ); + else + return date( $format, $i ); +} + +/** + * Retrieve the current time based on specified type. + * + * The 'mysql' type will return the time in the format for MySQL DATETIME field. + * The 'timestamp' type will return the current timestamp. + * + * If $gmt is set to either '1' or 'true', then both types will use GMT time. + * if $gmt is false, the output is adjusted with the GMT offset in the WordPress option. + * + * @since 1.0.0 + * + * @param string $type Either 'mysql' or 'timestamp'. + * @param int|bool $gmt Optional. Whether to use GMT timezone. Default is false. + * @return int|string String if $type is 'gmt', int if $type is 'timestamp'. + */ +function current_time( $type, $gmt = 0 ) { + switch ( $type ) { + case 'mysql': + return ( $gmt ) ? gmdate( 'Y-m-d H:i:s' ) : gmdate( 'Y-m-d H:i:s', ( time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) ) ); + break; + case 'timestamp': + return ( $gmt ) ? time() : time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); + break; + } +} + +/** + * Retrieve the date in localized format, based on timestamp. + * + * If the locale specifies the locale month and weekday, then the locale will + * take over the format for the date. If it isn't, then the date format string + * will be used instead. + * + * @since 0.71 + * + * @param string $dateformatstring Format to display the date. + * @param int $unixtimestamp Optional. Unix timestamp. + * @param bool $gmt Optional, default is false. Whether to convert to GMT for time. + * @return string The date, translated if locale specifies it. + */ +function date_i18n( $dateformatstring, $unixtimestamp = false, $gmt = false ) { + global $wp_locale; + $i = $unixtimestamp; + + if ( false === $i ) { + if ( ! $gmt ) + $i = current_time( 'timestamp' ); + else + $i = time(); + // we should not let date() interfere with our + // specially computed timestamp + $gmt = true; + } + + // store original value for language with untypical grammars + // see http://core.trac.wordpress.org/ticket/9396 + $req_format = $dateformatstring; + + $datefunc = $gmt? 'gmdate' : 'date'; + + if ( ( !empty( $wp_locale->month ) ) && ( !empty( $wp_locale->weekday ) ) ) { + $datemonth = $wp_locale->get_month( $datefunc( 'm', $i ) ); + $datemonth_abbrev = $wp_locale->get_month_abbrev( $datemonth ); + $dateweekday = $wp_locale->get_weekday( $datefunc( 'w', $i ) ); + $dateweekday_abbrev = $wp_locale->get_weekday_abbrev( $dateweekday ); + $datemeridiem = $wp_locale->get_meridiem( $datefunc( 'a', $i ) ); + $datemeridiem_capital = $wp_locale->get_meridiem( $datefunc( 'A', $i ) ); + $dateformatstring = ' '.$dateformatstring; + $dateformatstring = preg_replace( "/([^\\\])D/", "\\1" . backslashit( $dateweekday_abbrev ), $dateformatstring ); + $dateformatstring = preg_replace( "/([^\\\])F/", "\\1" . backslashit( $datemonth ), $dateformatstring ); + $dateformatstring = preg_replace( "/([^\\\])l/", "\\1" . backslashit( $dateweekday ), $dateformatstring ); + $dateformatstring = preg_replace( "/([^\\\])M/", "\\1" . backslashit( $datemonth_abbrev ), $dateformatstring ); + $dateformatstring = preg_replace( "/([^\\\])a/", "\\1" . backslashit( $datemeridiem ), $dateformatstring ); + $dateformatstring = preg_replace( "/([^\\\])A/", "\\1" . backslashit( $datemeridiem_capital ), $dateformatstring ); + + $dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 ); + } + $timezone_formats = array( 'P', 'I', 'O', 'T', 'Z', 'e' ); + $timezone_formats_re = implode( '|', $timezone_formats ); + if ( preg_match( "/$timezone_formats_re/", $dateformatstring ) ) { + $timezone_string = get_option( 'timezone_string' ); + if ( $timezone_string ) { + $timezone_object = timezone_open( $timezone_string ); + $date_object = date_create( null, $timezone_object ); + foreach( $timezone_formats as $timezone_format ) { + if ( false !== strpos( $dateformatstring, $timezone_format ) ) { + $formatted = date_format( $date_object, $timezone_format ); + $dateformatstring = ' '.$dateformatstring; + $dateformatstring = preg_replace( "/([^\\\])$timezone_format/", "\\1" . backslashit( $formatted ), $dateformatstring ); + $dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 ); + } + } + } + } + $j = @$datefunc( $dateformatstring, $i ); + // allow plugins to redo this entirely for languages with untypical grammars + $j = apply_filters('date_i18n', $j, $req_format, $i, $gmt); + return $j; +} + +/** + * Convert integer number to format based on the locale. + * + * @since 2.3.0 + * + * @param int $number The number to convert based on locale. + * @param int $decimals Precision of the number of decimal places. + * @return string Converted number in string format. + */ +function number_format_i18n( $number, $decimals = 0 ) { + global $wp_locale; + $formatted = number_format( $number, absint( $decimals ), $wp_locale->number_format['decimal_point'], $wp_locale->number_format['thousands_sep'] ); + return apply_filters( 'number_format_i18n', $formatted ); +} + +/** + * Convert number of bytes largest unit bytes will fit into. + * + * It is easier to read 1kB than 1024 bytes and 1MB than 1048576 bytes. Converts + * number of bytes to human readable number by taking the number of that unit + * that the bytes will go into it. Supports TB value. + * + * Please note that integers in PHP are limited to 32 bits, unless they are on + * 64 bit architecture, then they have 64 bit size. If you need to place the + * larger size then what PHP integer type will hold, then use a string. It will + * be converted to a double, which should always have 64 bit length. + * + * Technically the correct unit names for powers of 1024 are KiB, MiB etc. + * @link http://en.wikipedia.org/wiki/Byte + * + * @since 2.3.0 + * + * @param int|string $bytes Number of bytes. Note max integer size for integers. + * @param int $decimals Precision of number of decimal places. Deprecated. + * @return bool|string False on failure. Number string on success. + */ +function size_format( $bytes, $decimals = 0 ) { + $quant = array( + // ========================= Origin ==== + 'TB' => 1099511627776, // pow( 1024, 4) + 'GB' => 1073741824, // pow( 1024, 3) + 'MB' => 1048576, // pow( 1024, 2) + 'kB' => 1024, // pow( 1024, 1) + 'B ' => 1, // pow( 1024, 0) + ); + foreach ( $quant as $unit => $mag ) + if ( doubleval($bytes) >= $mag ) + return number_format_i18n( $bytes / $mag, $decimals ) . ' ' . $unit; + + return false; +} + +/** + * Get the week start and end from the datetime or date string from mysql. + * + * @since 0.71 + * + * @param string $mysqlstring Date or datetime field type from mysql. + * @param int $start_of_week Optional. Start of the week as an integer. + * @return array Keys are 'start' and 'end'. + */ +function get_weekstartend( $mysqlstring, $start_of_week = '' ) { + $my = substr( $mysqlstring, 0, 4 ); // Mysql string Year + $mm = substr( $mysqlstring, 8, 2 ); // Mysql string Month + $md = substr( $mysqlstring, 5, 2 ); // Mysql string day + $day = mktime( 0, 0, 0, $md, $mm, $my ); // The timestamp for mysqlstring day. + $weekday = date( 'w', $day ); // The day of the week from the timestamp + if ( !is_numeric($start_of_week) ) + $start_of_week = get_option( 'start_of_week' ); + + if ( $weekday < $start_of_week ) + $weekday += 7; + + $start = $day - DAY_IN_SECONDS * ( $weekday - $start_of_week ); // The most recent week start day on or before $day + $end = $start + 7 * DAY_IN_SECONDS - 1; // $start + 7 days - 1 second + return compact( 'start', 'end' ); +} + +/** + * Unserialize value only if it was serialized. + * + * @since 2.0.0 + * + * @param string $original Maybe unserialized original, if is needed. + * @return mixed Unserialized data can be any type. + */ +function maybe_unserialize( $original ) { + if ( is_serialized( $original ) ) // don't attempt to unserialize data that wasn't serialized going in + return @unserialize( $original ); + return $original; +} + +/** + * Check value to find if it was serialized. + * + * If $data is not an string, then returned value will always be false. + * Serialized data is always a string. + * + * @since 2.0.5 + * + * @param mixed $data Value to check to see if was serialized. + * @param bool $strict Optional. Whether to be strict about the end of the string. Defaults true. + * @return bool False if not serialized and true if it was. + */ +function is_serialized( $data, $strict = true ) { + // if it isn't a string, it isn't serialized + if ( ! is_string( $data ) ) + return false; + $data = trim( $data ); + if ( 'N;' == $data ) + return true; + $length = strlen( $data ); + if ( $length < 4 ) + return false; + if ( ':' !== $data[1] ) + return false; + if ( $strict ) { + $lastc = $data[ $length - 1 ]; + if ( ';' !== $lastc && '}' !== $lastc ) + return false; + } else { + $semicolon = strpos( $data, ';' ); + $brace = strpos( $data, '}' ); + // Either ; or } must exist. + if ( false === $semicolon && false === $brace ) + return false; + // But neither must be in the first X characters. + if ( false !== $semicolon && $semicolon < 3 ) + return false; + if ( false !== $brace && $brace < 4 ) + return false; + } + $token = $data[0]; + switch ( $token ) { + case 's' : + if ( $strict ) { + if ( '"' !== $data[ $length - 2 ] ) + return false; + } elseif ( false === strpos( $data, '"' ) ) { + return false; + } + // or else fall through + case 'a' : + case 'O' : + return (bool) preg_match( "/^{$token}:[0-9]+:/s", $data ); + case 'b' : + case 'i' : + case 'd' : + $end = $strict ? '$' : ''; + return (bool) preg_match( "/^{$token}:[0-9.E-]+;$end/", $data ); + } + return false; +} + +/** + * Check whether serialized data is of string type. + * + * @since 2.0.5 + * + * @param mixed $data Serialized data + * @return bool False if not a serialized string, true if it is. + */ +function is_serialized_string( $data ) { + // if it isn't a string, it isn't a serialized string + if ( !is_string( $data ) ) + return false; + $data = trim( $data ); + $length = strlen( $data ); + if ( $length < 4 ) + return false; + elseif ( ':' !== $data[1] ) + return false; + elseif ( ';' !== $data[$length-1] ) + return false; + elseif ( $data[0] !== 's' ) + return false; + elseif ( '"' !== $data[$length-2] ) + return false; + else + return true; +} + +/** + * Serialize data, if needed. + * + * @since 2.0.5 + * + * @param mixed $data Data that might be serialized. + * @return mixed A scalar data + */ +function maybe_serialize( $data ) { + if ( is_array( $data ) || is_object( $data ) ) + return serialize( $data ); + + // Double serialization is required for backward compatibility. + // See http://core.trac.wordpress.org/ticket/12930 + if ( is_serialized( $data, false ) ) + return serialize( $data ); + + return $data; +} + +/** + * Retrieve post title from XMLRPC XML. + * + * If the title element is not part of the XML, then the default post title from + * the $post_default_title will be used instead. + * + * @package WordPress + * @subpackage XMLRPC + * @since 0.71 + * + * @global string $post_default_title Default XMLRPC post title. + * + * @param string $content XMLRPC XML Request content + * @return string Post title + */ +function xmlrpc_getposttitle( $content ) { + global $post_default_title; + if ( preg_match( '/<title>(.+?)<\/title>/is', $content, $matchtitle ) ) { + $post_title = $matchtitle[1]; + } else { + $post_title = $post_default_title; + } + return $post_title; +} + +/** + * Retrieve the post category or categories from XMLRPC XML. + * + * If the category element is not found, then the default post category will be + * used. The return type then would be what $post_default_category. If the + * category is found, then it will always be an array. + * + * @package WordPress + * @subpackage XMLRPC + * @since 0.71 + * + * @global string $post_default_category Default XMLRPC post category. + * + * @param string $content XMLRPC XML Request content + * @return string|array List of categories or category name. + */ +function xmlrpc_getpostcategory( $content ) { + global $post_default_category; + if ( preg_match( '/<category>(.+?)<\/category>/is', $content, $matchcat ) ) { + $post_category = trim( $matchcat[1], ',' ); + $post_category = explode( ',', $post_category ); + } else { + $post_category = $post_default_category; + } + return $post_category; +} + +/** + * XMLRPC XML content without title and category elements. + * + * @package WordPress + * @subpackage XMLRPC + * @since 0.71 + * + * @param string $content XMLRPC XML Request content + * @return string XMLRPC XML Request content without title and category elements. + */ +function xmlrpc_removepostdata( $content ) { + $content = preg_replace( '/<title>(.+?)<\/title>/si', '', $content ); + $content = preg_replace( '/<category>(.+?)<\/category>/si', '', $content ); + $content = trim( $content ); + return $content; +} + +/** + * Use RegEx to extract URLs from arbitrary content + * + * @since 3.7.0 + * + * @param string $content + * @return array URLs found in passed string + */ +function wp_extract_urls( $content ) { + preg_match_all( + "#((?:[\w-]+://?|[\w\d]+[.])[^\s()<>]+[.](?:\([\w\d]+\)|(?:[^`!()\[\]{};:'\".,<>?«»“”‘’\s]|(?:[:]\d+)?/?)+))#", + $content, + $post_links + ); + + $post_links = array_unique( array_map( 'html_entity_decode', $post_links[0] ) ); + + return array_values( $post_links ); +} + +/** + * Check content for video and audio links to add as enclosures. + * + * Will not add enclosures that have already been added and will + * remove enclosures that are no longer in the post. This is called as + * pingbacks and trackbacks. + * + * @package WordPress + * @since 1.5.0 + * + * @uses $wpdb + * + * @param string $content Post Content + * @param int $post_ID Post ID + */ +function do_enclose( $content, $post_ID ) { + global $wpdb; + + //TODO: Tidy this ghetto code up and make the debug code optional + include_once( ABSPATH . WPINC . '/class-IXR.php' ); + + $post_links = array(); + + $pung = get_enclosed( $post_ID ); + + $post_links_temp = wp_extract_urls( $content ); + + foreach ( $pung as $link_test ) { + if ( ! in_array( $link_test, $post_links_temp ) ) { // link no longer in post + $mids = $wpdb->get_col( $wpdb->prepare("SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = 'enclosure' AND meta_value LIKE (%s)", $post_ID, like_escape( $link_test ) . '%') ); + foreach ( $mids as $mid ) + delete_metadata_by_mid( 'post', $mid ); + } + } + + foreach ( (array) $post_links_temp as $link_test ) { + if ( !in_array( $link_test, $pung ) ) { // If we haven't pung it already + $test = @parse_url( $link_test ); + if ( false === $test ) + continue; + if ( isset( $test['query'] ) ) + $post_links[] = $link_test; + elseif ( isset($test['path']) && ( $test['path'] != '/' ) && ($test['path'] != '' ) ) + $post_links[] = $link_test; + } + } + + foreach ( (array) $post_links as $url ) { + if ( $url != '' && !$wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = 'enclosure' AND meta_value LIKE (%s)", $post_ID, like_escape( $url ) . '%' ) ) ) { + + if ( $headers = wp_get_http_headers( $url) ) { + $len = isset( $headers['content-length'] ) ? (int) $headers['content-length'] : 0; + $type = isset( $headers['content-type'] ) ? $headers['content-type'] : ''; + $allowed_types = array( 'video', 'audio' ); + + // Check to see if we can figure out the mime type from + // the extension + $url_parts = @parse_url( $url ); + if ( false !== $url_parts ) { + $extension = pathinfo( $url_parts['path'], PATHINFO_EXTENSION ); + if ( !empty( $extension ) ) { + foreach ( wp_get_mime_types() as $exts => $mime ) { + if ( preg_match( '!^(' . $exts . ')$!i', $extension ) ) { + $type = $mime; + break; + } + } + } + } + + if ( in_array( substr( $type, 0, strpos( $type, "/" ) ), $allowed_types ) ) { + add_post_meta( $post_ID, 'enclosure', "$url\n$len\n$mime\n" ); + } + } + } + } +} + +/** + * Perform a HTTP HEAD or GET request. + * + * If $file_path is a writable filename, this will do a GET request and write + * the file to that path. + * + * @since 2.5.0 + * + * @param string $url URL to fetch. + * @param string|bool $file_path Optional. File path to write request to. + * @param int $red (private) The number of Redirects followed, Upon 5 being hit, returns false. + * @return bool|string False on failure and string of headers if HEAD request. + */ +function wp_get_http( $url, $file_path = false, $red = 1 ) { + @set_time_limit( 60 ); + + if ( $red > 5 ) + return false; + + $options = array(); + $options['redirection'] = 5; + + if ( false == $file_path ) + $options['method'] = 'HEAD'; + else + $options['method'] = 'GET'; + + $response = wp_safe_remote_request( $url, $options ); + + if ( is_wp_error( $response ) ) + return false; + + $headers = wp_remote_retrieve_headers( $response ); + $headers['response'] = wp_remote_retrieve_response_code( $response ); + + // WP_HTTP no longer follows redirects for HEAD requests. + if ( 'HEAD' == $options['method'] && in_array($headers['response'], array(301, 302)) && isset( $headers['location'] ) ) { + return wp_get_http( $headers['location'], $file_path, ++$red ); + } + + if ( false == $file_path ) + return $headers; + + // GET request - write it to the supplied filename + $out_fp = fopen($file_path, 'w'); + if ( !$out_fp ) + return $headers; + + fwrite( $out_fp, wp_remote_retrieve_body( $response ) ); + fclose($out_fp); + clearstatcache(); + + return $headers; +} + +/** + * Retrieve HTTP Headers from URL. + * + * @since 1.5.1 + * + * @param string $url + * @param bool $deprecated Not Used. + * @return bool|string False on failure, headers on success. + */ +function wp_get_http_headers( $url, $deprecated = false ) { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '2.7' ); + + $response = wp_safe_remote_head( $url ); + + if ( is_wp_error( $response ) ) + return false; + + return wp_remote_retrieve_headers( $response ); +} + +/** + * Whether today is a new day. + * + * @since 0.71 + * @uses $day Today + * @uses $previousday Previous day + * + * @return int 1 when new day, 0 if not a new day. + */ +function is_new_day() { + global $currentday, $previousday; + if ( $currentday != $previousday ) + return 1; + else + return 0; +} + +/** + * Build URL query based on an associative and, or indexed array. + * + * This is a convenient function for easily building url queries. It sets the + * separator to '&' and uses _http_build_query() function. + * + * @see _http_build_query() Used to build the query + * @link http://us2.php.net/manual/en/function.http-build-query.php more on what + * http_build_query() does. + * + * @since 2.3.0 + * + * @param array $data URL-encode key/value pairs. + * @return string URL encoded string + */ +function build_query( $data ) { + return _http_build_query( $data, null, '&', '', false ); +} + +// from php.net (modified by Mark Jaquith to behave like the native PHP5 function) +function _http_build_query($data, $prefix=null, $sep=null, $key='', $urlencode=true) { + $ret = array(); + + foreach ( (array) $data as $k => $v ) { + if ( $urlencode) + $k = urlencode($k); + if ( is_int($k) && $prefix != null ) + $k = $prefix.$k; + if ( !empty($key) ) + $k = $key . '%5B' . $k . '%5D'; + if ( $v === null ) + continue; + elseif ( $v === FALSE ) + $v = '0'; + + if ( is_array($v) || is_object($v) ) + array_push($ret,_http_build_query($v, '', $sep, $k, $urlencode)); + elseif ( $urlencode ) + array_push($ret, $k.'='.urlencode($v)); + else + array_push($ret, $k.'='.$v); + } + + if ( null === $sep ) + $sep = ini_get('arg_separator.output'); + + return implode($sep, $ret); +} + +/** + * Retrieve a modified URL query string. + * + * You can rebuild the URL and append a new query variable to the URL query by + * using this function. You can also retrieve the full URL with query data. + * + * Adding a single key & value or an associative array. Setting a key value to + * an empty string removes the key. Omitting oldquery_or_uri uses the $_SERVER + * value. Additional values provided are expected to be encoded appropriately + * with urlencode() or rawurlencode(). + * + * @since 1.5.0 + * + * @param mixed $param1 Either newkey or an associative_array + * @param mixed $param2 Either newvalue or oldquery or uri + * @param mixed $param3 Optional. Old query or uri + * @return string New URL query string. + */ +function add_query_arg() { + $ret = ''; + $args = func_get_args(); + if ( is_array( $args[0] ) ) { + if ( count( $args ) < 2 || false === $args[1] ) + $uri = $_SERVER['REQUEST_URI']; + else + $uri = $args[1]; + } else { + if ( count( $args ) < 3 || false === $args[2] ) + $uri = $_SERVER['REQUEST_URI']; + else + $uri = $args[2]; + } + + if ( $frag = strstr( $uri, '#' ) ) + $uri = substr( $uri, 0, -strlen( $frag ) ); + else + $frag = ''; + + if ( 0 === stripos( $uri, 'http://' ) ) { + $protocol = 'http://'; + $uri = substr( $uri, 7 ); + } elseif ( 0 === stripos( $uri, 'https://' ) ) { + $protocol = 'https://'; + $uri = substr( $uri, 8 ); + } else { + $protocol = ''; + } + + if ( strpos( $uri, '?' ) !== false ) { + list( $base, $query ) = explode( '?', $uri, 2 ); + $base .= '?'; + } elseif ( $protocol || strpos( $uri, '=' ) === false ) { + $base = $uri . '?'; + $query = ''; + } else { + $base = ''; + $query = $uri; + } + + wp_parse_str( $query, $qs ); + $qs = urlencode_deep( $qs ); // this re-URL-encodes things that were already in the query string + if ( is_array( $args[0] ) ) { + $kayvees = $args[0]; + $qs = array_merge( $qs, $kayvees ); + } else { + $qs[ $args[0] ] = $args[1]; + } + + foreach ( $qs as $k => $v ) { + if ( $v === false ) + unset( $qs[$k] ); + } + + $ret = build_query( $qs ); + $ret = trim( $ret, '?' ); + $ret = preg_replace( '#=(&|$)#', '$1', $ret ); + $ret = $protocol . $base . $ret . $frag; + $ret = rtrim( $ret, '?' ); + return $ret; +} + +/** + * Removes an item or list from the query string. + * + * @since 1.5.0 + * + * @param string|array $key Query key or keys to remove. + * @param bool $query When false uses the $_SERVER value. + * @return string New URL query string. + */ +function remove_query_arg( $key, $query=false ) { + if ( is_array( $key ) ) { // removing multiple keys + foreach ( $key as $k ) + $query = add_query_arg( $k, false, $query ); + return $query; + } + return add_query_arg( $key, false, $query ); +} + +/** + * Walks the array while sanitizing the contents. + * + * @since 0.71 + * + * @param array $array Array to walk while sanitizing contents. + * @return array Sanitized $array. + */ +function add_magic_quotes( $array ) { + foreach ( (array) $array as $k => $v ) { + if ( is_array( $v ) ) { + $array[$k] = add_magic_quotes( $v ); + } else { + $array[$k] = addslashes( $v ); + } + } + return $array; +} + +/** + * HTTP request for URI to retrieve content. + * + * @since 1.5.1 + * @uses wp_remote_get() + * + * @param string $uri URI/URL of web page to retrieve. + * @return bool|string HTTP content. False on failure. + */ +function wp_remote_fopen( $uri ) { + $parsed_url = @parse_url( $uri ); + + if ( !$parsed_url || !is_array( $parsed_url ) ) + return false; + + $options = array(); + $options['timeout'] = 10; + + $response = wp_safe_remote_get( $uri, $options ); + + if ( is_wp_error( $response ) ) + return false; + + return wp_remote_retrieve_body( $response ); +} + +/** + * Set up the WordPress query. + * + * @since 2.0.0 + * + * @param string $query_vars Default WP_Query arguments. + */ +function wp( $query_vars = '' ) { + global $wp, $wp_query, $wp_the_query; + $wp->main( $query_vars ); + + if ( !isset($wp_the_query) ) + $wp_the_query = $wp_query; +} + +/** + * Retrieve the description for the HTTP status. + * + * @since 2.3.0 + * + * @param int $code HTTP status code. + * @return string Empty string if not found, or description if found. + */ +function get_status_header_desc( $code ) { + global $wp_header_to_desc; + + $code = absint( $code ); + + if ( !isset( $wp_header_to_desc ) ) { + $wp_header_to_desc = array( + 100 => 'Continue', + 101 => 'Switching Protocols', + 102 => 'Processing', + + 200 => 'OK', + 201 => 'Created', + 202 => 'Accepted', + 203 => 'Non-Authoritative Information', + 204 => 'No Content', + 205 => 'Reset Content', + 206 => 'Partial Content', + 207 => 'Multi-Status', + 226 => 'IM Used', + + 300 => 'Multiple Choices', + 301 => 'Moved Permanently', + 302 => 'Found', + 303 => 'See Other', + 304 => 'Not Modified', + 305 => 'Use Proxy', + 306 => 'Reserved', + 307 => 'Temporary Redirect', + + 400 => 'Bad Request', + 401 => 'Unauthorized', + 402 => 'Payment Required', + 403 => 'Forbidden', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 406 => 'Not Acceptable', + 407 => 'Proxy Authentication Required', + 408 => 'Request Timeout', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Request Entity Too Large', + 414 => 'Request-URI Too Long', + 415 => 'Unsupported Media Type', + 416 => 'Requested Range Not Satisfiable', + 417 => 'Expectation Failed', + 422 => 'Unprocessable Entity', + 423 => 'Locked', + 424 => 'Failed Dependency', + 426 => 'Upgrade Required', + + 500 => 'Internal Server Error', + 501 => 'Not Implemented', + 502 => 'Bad Gateway', + 503 => 'Service Unavailable', + 504 => 'Gateway Timeout', + 505 => 'HTTP Version Not Supported', + 506 => 'Variant Also Negotiates', + 507 => 'Insufficient Storage', + 510 => 'Not Extended' + ); + } + + if ( isset( $wp_header_to_desc[$code] ) ) + return $wp_header_to_desc[$code]; + else + return ''; +} + +/** + * Set HTTP status header. + * + * @since 2.0.0 + * @see get_status_header_desc() + * + * @param int $code HTTP status code. + */ +function status_header( $code ) { + $description = get_status_header_desc( $code ); + + if ( empty( $description ) ) + return; + + $protocol = $_SERVER['SERVER_PROTOCOL']; + if ( 'HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol ) + $protocol = 'HTTP/1.0'; + $status_header = "$protocol $code $description"; + if ( function_exists( 'apply_filters' ) ) + $status_header = apply_filters( 'status_header', $status_header, $code, $description, $protocol ); + + @header( $status_header, true, $code ); +} + +/** + * Gets the header information to prevent caching. + * + * The several different headers cover the different ways cache prevention is handled + * by different browsers + * + * @since 2.8.0 + * + * @return array The associative array of header names and field values. + */ +function wp_get_nocache_headers() { + $headers = array( + 'Expires' => 'Wed, 11 Jan 1984 05:00:00 GMT', + 'Cache-Control' => 'no-cache, must-revalidate, max-age=0', + 'Pragma' => 'no-cache', + ); + + if ( function_exists('apply_filters') ) { + $headers = (array) apply_filters('nocache_headers', $headers); + } + $headers['Last-Modified'] = false; + return $headers; +} + +/** + * Sets the headers to prevent caching for the different browsers. + * + * Different browsers support different nocache headers, so several headers must + * be sent so that all of them get the point that no caching should occur. + * + * @since 2.0.0 + * @see wp_get_nocache_headers() + */ +function nocache_headers() { + $headers = wp_get_nocache_headers(); + + unset( $headers['Last-Modified'] ); + + // In PHP 5.3+, make sure we are not sending a Last-Modified header. + if ( function_exists( 'header_remove' ) ) { + @header_remove( 'Last-Modified' ); + } else { + // In PHP 5.2, send an empty Last-Modified header, but only as a + // last resort to override a header already sent. #WP23021 + foreach ( headers_list() as $header ) { + if ( 0 === stripos( $header, 'Last-Modified' ) ) { + $headers['Last-Modified'] = ''; + break; + } + } + } + + foreach( $headers as $name => $field_value ) + @header("{$name}: {$field_value}"); +} + +/** + * Set the headers for caching for 10 days with JavaScript content type. + * + * @since 2.1.0 + */ +function cache_javascript_headers() { + $expiresOffset = 10 * DAY_IN_SECONDS; + header( "Content-Type: text/javascript; charset=" . get_bloginfo( 'charset' ) ); + header( "Vary: Accept-Encoding" ); // Handle proxies + header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $expiresOffset ) . " GMT" ); +} + +/** + * Retrieve the number of database queries during the WordPress execution. + * + * @since 2.0.0 + * + * @return int Number of database queries + */ +function get_num_queries() { + global $wpdb; + return $wpdb->num_queries; +} + +/** + * Whether input is yes or no. Must be 'y' to be true. + * + * @since 1.0.0 + * + * @param string $yn Character string containing either 'y' or 'n' + * @return bool True if yes, false on anything else + */ +function bool_from_yn( $yn ) { + return ( strtolower( $yn ) == 'y' ); +} + +/** + * Loads the feed template from the use of an action hook. + * + * If the feed action does not have a hook, then the function will die with a + * message telling the visitor that the feed is not valid. + * + * It is better to only have one hook for each feed. + * + * @since 2.1.0 + * @uses $wp_query Used to tell if the use a comment feed. + * @uses do_action() Calls 'do_feed_$feed' hook, if a hook exists for the feed. + */ +function do_feed() { + global $wp_query; + + $feed = get_query_var( 'feed' ); + + // Remove the pad, if present. + $feed = preg_replace( '/^_+/', '', $feed ); + + if ( $feed == '' || $feed == 'feed' ) + $feed = get_default_feed(); + + $hook = 'do_feed_' . $feed; + if ( ! has_action( $hook ) ) + wp_die( __( 'ERROR: This is not a valid feed template.' ), '', array( 'response' => 404 ) ); + + do_action( $hook, $wp_query->is_comment_feed ); +} + +/** + * Load the RDF RSS 0.91 Feed template. + * + * @since 2.1.0 + */ +function do_feed_rdf() { + load_template( ABSPATH . WPINC . '/feed-rdf.php' ); +} + +/** + * Load the RSS 1.0 Feed Template. + * + * @since 2.1.0 + */ +function do_feed_rss() { + load_template( ABSPATH . WPINC . '/feed-rss.php' ); +} + +/** + * Load either the RSS2 comment feed or the RSS2 posts feed. + * + * @since 2.1.0 + * + * @param bool $for_comments True for the comment feed, false for normal feed. + */ +function do_feed_rss2( $for_comments ) { + if ( $for_comments ) + load_template( ABSPATH . WPINC . '/feed-rss2-comments.php' ); + else + load_template( ABSPATH . WPINC . '/feed-rss2.php' ); +} + +/** + * Load either Atom comment feed or Atom posts feed. + * + * @since 2.1.0 + * + * @param bool $for_comments True for the comment feed, false for normal feed. + */ +function do_feed_atom( $for_comments ) { + if ($for_comments) + load_template( ABSPATH . WPINC . '/feed-atom-comments.php'); + else + load_template( ABSPATH . WPINC . '/feed-atom.php' ); +} + +/** + * Display the robots.txt file content. + * + * The echo content should be with usage of the permalinks or for creating the + * robots.txt file. + * + * @since 2.1.0 + * @uses do_action() Calls 'do_robotstxt' hook for displaying robots.txt rules. + */ +function do_robots() { + header( 'Content-Type: text/plain; charset=utf-8' ); + + do_action( 'do_robotstxt' ); + + $output = "User-agent: *\n"; + $public = get_option( 'blog_public' ); + if ( '0' == $public ) { + $output .= "Disallow: /\n"; + } else { + $site_url = parse_url( site_url() ); + $path = ( !empty( $site_url['path'] ) ) ? $site_url['path'] : ''; + $output .= "Disallow: $path/wp-admin/\n"; + $output .= "Disallow: $path/wp-includes/\n"; + } + + echo apply_filters('robots_txt', $output, $public); +} + +/** + * Test whether blog is already installed. + * + * The cache will be checked first. If you have a cache plugin, which saves the + * cache values, then this will work. If you use the default WordPress cache, + * and the database goes away, then you might have problems. + * + * Checks for the option siteurl for whether WordPress is installed. + * + * @since 2.1.0 + * @uses $wpdb + * + * @return bool Whether blog is already installed. + */ +function is_blog_installed() { + global $wpdb; + + // Check cache first. If options table goes away and we have true cached, oh well. + if ( wp_cache_get( 'is_blog_installed' ) ) + return true; + + $suppress = $wpdb->suppress_errors(); + if ( ! defined( 'WP_INSTALLING' ) ) { + $alloptions = wp_load_alloptions(); + } + // If siteurl is not set to autoload, check it specifically + if ( !isset( $alloptions['siteurl'] ) ) + $installed = $wpdb->get_var( "SELECT option_value FROM $wpdb->options WHERE option_name = 'siteurl'" ); + else + $installed = $alloptions['siteurl']; + $wpdb->suppress_errors( $suppress ); + + $installed = !empty( $installed ); + wp_cache_set( 'is_blog_installed', $installed ); + + if ( $installed ) + return true; + + // If visiting repair.php, return true and let it take over. + if ( defined( 'WP_REPAIRING' ) ) + return true; + + $suppress = $wpdb->suppress_errors(); + + // Loop over the WP tables. If none exist, then scratch install is allowed. + // If one or more exist, suggest table repair since we got here because the options + // table could not be accessed. + $wp_tables = $wpdb->tables(); + foreach ( $wp_tables as $table ) { + // The existence of custom user tables shouldn't suggest an insane state or prevent a clean install. + if ( defined( 'CUSTOM_USER_TABLE' ) && CUSTOM_USER_TABLE == $table ) + continue; + if ( defined( 'CUSTOM_USER_META_TABLE' ) && CUSTOM_USER_META_TABLE == $table ) + continue; + + if ( ! $wpdb->get_results( "DESCRIBE $table;" ) ) + continue; + + // One or more tables exist. We are insane. + + wp_load_translations_early(); + + // Die with a DB error. + $wpdb->error = sprintf( __( 'One or more database tables are unavailable. The database may need to be <a href="%s">repaired</a>.' ), 'maint/repair.php?referrer=is_blog_installed' ); + dead_db(); + } + + $wpdb->suppress_errors( $suppress ); + + wp_cache_set( 'is_blog_installed', false ); + + return false; +} + +/** + * Retrieve URL with nonce added to URL query. + * + * @package WordPress + * @subpackage Security + * @since 2.0.4 + * + * @param string $actionurl URL to add nonce action. + * @param string $action Optional. Nonce action name. + * @param string $name Optional. Nonce name. + * @return string URL with nonce action added. + */ +function wp_nonce_url( $actionurl, $action = -1, $name = '_wpnonce' ) { + $actionurl = str_replace( '&', '&', $actionurl ); + return esc_html( add_query_arg( $name, wp_create_nonce( $action ), $actionurl ) ); +} + +/** + * Retrieve or display nonce hidden field for forms. + * + * The nonce field is used to validate that the contents of the form came from + * the location on the current site and not somewhere else. The nonce does not + * offer absolute protection, but should protect against most cases. It is very + * important to use nonce field in forms. + * + * The $action and $name are optional, but if you want to have better security, + * it is strongly suggested to set those two parameters. It is easier to just + * call the function without any parameters, because validation of the nonce + * doesn't require any parameters, but since crackers know what the default is + * it won't be difficult for them to find a way around your nonce and cause + * damage. + * + * The input name will be whatever $name value you gave. The input value will be + * the nonce creation value. + * + * @package WordPress + * @subpackage Security + * @since 2.0.4 + * + * @param string $action Optional. Action name. + * @param string $name Optional. Nonce name. + * @param bool $referer Optional, default true. Whether to set the referer field for validation. + * @param bool $echo Optional, default true. Whether to display or return hidden form field. + * @return string Nonce field. + */ +function wp_nonce_field( $action = -1, $name = "_wpnonce", $referer = true , $echo = true ) { + $name = esc_attr( $name ); + $nonce_field = '<input type="hidden" id="' . $name . '" name="' . $name . '" value="' . wp_create_nonce( $action ) . '" />'; + + if ( $referer ) + $nonce_field .= wp_referer_field( false ); + + if ( $echo ) + echo $nonce_field; + + return $nonce_field; +} + +/** + * Retrieve or display referer hidden field for forms. + * + * The referer link is the current Request URI from the server super global. The + * input name is '_wp_http_referer', in case you wanted to check manually. + * + * @package WordPress + * @subpackage Security + * @since 2.0.4 + * + * @param bool $echo Whether to echo or return the referer field. + * @return string Referer field. + */ +function wp_referer_field( $echo = true ) { + $referer_field = '<input type="hidden" name="_wp_http_referer" value="'. esc_attr( wp_unslash( $_SERVER['REQUEST_URI'] ) ) . '" />'; + + if ( $echo ) + echo $referer_field; + return $referer_field; +} + +/** + * Retrieve or display original referer hidden field for forms. + * + * The input name is '_wp_original_http_referer' and will be either the same + * value of {@link wp_referer_field()}, if that was posted already or it will + * be the current page, if it doesn't exist. + * + * @package WordPress + * @subpackage Security + * @since 2.0.4 + * + * @param bool $echo Whether to echo the original http referer + * @param string $jump_back_to Optional, default is 'current'. Can be 'previous' or page you want to jump back to. + * @return string Original referer field. + */ +function wp_original_referer_field( $echo = true, $jump_back_to = 'current' ) { + if ( ! $ref = wp_get_original_referer() ) { + $ref = 'previous' == $jump_back_to ? wp_get_referer() : wp_unslash( $_SERVER['REQUEST_URI'] ); + } + $orig_referer_field = '<input type="hidden" name="_wp_original_http_referer" value="' . esc_attr( $ref ) . '" />'; + if ( $echo ) + echo $orig_referer_field; + return $orig_referer_field; +} + +/** + * Retrieve referer from '_wp_http_referer' or HTTP referer. If it's the same + * as the current request URL, will return false. + * + * @package WordPress + * @subpackage Security + * @since 2.0.4 + * + * @return string|bool False on failure. Referer URL on success. + */ +function wp_get_referer() { + if ( ! function_exists( 'wp_validate_redirect' ) ) + return false; + $ref = false; + if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) + $ref = wp_unslash( $_REQUEST['_wp_http_referer'] ); + else if ( ! empty( $_SERVER['HTTP_REFERER'] ) ) + $ref = wp_unslash( $_SERVER['HTTP_REFERER'] ); + + if ( $ref && $ref !== wp_unslash( $_SERVER['REQUEST_URI'] ) ) + return wp_validate_redirect( $ref, false ); + return false; +} + +/** + * Retrieve original referer that was posted, if it exists. + * + * @package WordPress + * @subpackage Security + * @since 2.0.4 + * + * @return string|bool False if no original referer or original referer if set. + */ +function wp_get_original_referer() { + if ( ! empty( $_REQUEST['_wp_original_http_referer'] ) && function_exists( 'wp_validate_redirect' ) ) + return wp_validate_redirect( wp_unslash( $_REQUEST['_wp_original_http_referer'] ), false ); + return false; +} + +/** + * Recursive directory creation based on full path. + * + * Will attempt to set permissions on folders. + * + * @since 2.0.1 + * + * @param string $target Full path to attempt to create. + * @return bool Whether the path was created. True if path already exists. + */ +function wp_mkdir_p( $target ) { + $wrapper = null; + + // strip the protocol + if( wp_is_stream( $target ) ) { + list( $wrapper, $target ) = explode( '://', $target, 2 ); + } + + // from php.net/mkdir user contributed notes + $target = str_replace( '//', '/', $target ); + + // put the wrapper back on the target + if( $wrapper !== null ) { + $target = $wrapper . '://' . $target; + } + + // safe mode fails with a trailing slash under certain PHP versions. + $target = rtrim($target, '/'); // Use rtrim() instead of untrailingslashit to avoid formatting.php dependency. + if ( empty($target) ) + $target = '/'; + + if ( file_exists( $target ) ) + return @is_dir( $target ); + + // We need to find the permissions of the parent folder that exists and inherit that. + $target_parent = dirname( $target ); + while ( '.' != $target_parent && ! is_dir( $target_parent ) ) { + $target_parent = dirname( $target_parent ); + } + + // Get the permission bits. + $dir_perms = false; + if ( $stat = @stat( $target_parent ) ) { + $dir_perms = $stat['mode'] & 0007777; + } else { + $dir_perms = 0777; + } + + if ( @mkdir( $target, $dir_perms, true ) ) { + + // If a umask is set that modifies $dir_perms, we'll have to re-set the $dir_perms correctly with chmod() + if ( $dir_perms != ( $dir_perms & ~umask() ) ) { + $folder_parts = explode( '/', substr( $target, strlen( $target_parent ) + 1 ) ); + for ( $i = 1; $i <= count( $folder_parts ); $i++ ) { + @chmod( $target_parent . '/' . implode( '/', array_slice( $folder_parts, 0, $i ) ), $dir_perms ); + } + } + + return true; + } + + return false; +} + +/** + * Test if a give filesystem path is absolute ('/foo/bar', 'c:\windows'). + * + * @since 2.5.0 + * + * @param string $path File path + * @return bool True if path is absolute, false is not absolute. + */ +function path_is_absolute( $path ) { + // this is definitive if true but fails if $path does not exist or contains a symbolic link + if ( realpath($path) == $path ) + return true; + + if ( strlen($path) == 0 || $path[0] == '.' ) + return false; + + // windows allows absolute paths like this + if ( preg_match('#^[a-zA-Z]:\\\\#', $path) ) + return true; + + // a path starting with / or \ is absolute; anything else is relative + return ( $path[0] == '/' || $path[0] == '\\' ); +} + +/** + * Join two filesystem paths together (e.g. 'give me $path relative to $base'). + * + * If the $path is absolute, then it the full path is returned. + * + * @since 2.5.0 + * + * @param string $base + * @param string $path + * @return string The path with the base or absolute path. + */ +function path_join( $base, $path ) { + if ( path_is_absolute($path) ) + return $path; + + return rtrim($base, '/') . '/' . ltrim($path, '/'); +} + +/** + * Determines a writable directory for temporary files. + * Function's preference is the return value of <code>sys_get_temp_dir()</code>, + * followed by your PHP temporary upload directory, followed by WP_CONTENT_DIR, + * before finally defaulting to /tmp/ + * + * In the event that this function does not find a writable location, + * It may be overridden by the <code>WP_TEMP_DIR</code> constant in + * your <code>wp-config.php</code> file. + * + * @since 2.5.0 + * + * @return string Writable temporary directory + */ +function get_temp_dir() { + static $temp; + if ( defined('WP_TEMP_DIR') ) + return trailingslashit(WP_TEMP_DIR); + + if ( $temp ) + return trailingslashit( rtrim( $temp, '\\' ) ); + + if ( function_exists('sys_get_temp_dir') ) { + $temp = sys_get_temp_dir(); + if ( @is_dir( $temp ) && wp_is_writable( $temp ) ) + return trailingslashit( rtrim( $temp, '\\' ) ); + } + + $temp = ini_get('upload_tmp_dir'); + if ( @is_dir( $temp ) && wp_is_writable( $temp ) ) + return trailingslashit( rtrim( $temp, '\\' ) ); + + $temp = WP_CONTENT_DIR . '/'; + if ( is_dir( $temp ) && wp_is_writable( $temp ) ) + return $temp; + + $temp = '/tmp/'; + return $temp; +} + +/** + * Determine if a directory is writable. + * + * This function is used to work around certain ACL issues + * in PHP primarily affecting Windows Servers. + * + * @see win_is_writable() + * + * @since 3.6.0 + * + * @param string $path + * @return bool + */ +function wp_is_writable( $path ) { + if ( 'WIN' === strtoupper( substr( PHP_OS, 0, 3 ) ) ) + return win_is_writable( $path ); + else + return @is_writable( $path ); +} + +/** + * Workaround for Windows bug in is_writable() function + * + * PHP has issues with Windows ACL's for determine if a + * directory is writable or not, this works around them by + * checking the ability to open files rather than relying + * upon PHP to interprate the OS ACL. + * + * @link http://bugs.php.net/bug.php?id=27609 + * @link http://bugs.php.net/bug.php?id=30931 + * + * @since 2.8.0 + * + * @param string $path + * @return bool + */ +function win_is_writable( $path ) { + + if ( $path[strlen( $path ) - 1] == '/' ) // if it looks like a directory, check a random file within the directory + return win_is_writable( $path . uniqid( mt_rand() ) . '.tmp'); + else if ( is_dir( $path ) ) // If it's a directory (and not a file) check a random file within the directory + return win_is_writable( $path . '/' . uniqid( mt_rand() ) . '.tmp' ); + + // check tmp file for read/write capabilities + $should_delete_tmp_file = !file_exists( $path ); + $f = @fopen( $path, 'a' ); + if ( $f === false ) + return false; + fclose( $f ); + if ( $should_delete_tmp_file ) + unlink( $path ); + return true; +} + +/** + * Get an array containing the current upload directory's path and url. + * + * Checks the 'upload_path' option, which should be from the web root folder, + * and if it isn't empty it will be used. If it is empty, then the path will be + * 'WP_CONTENT_DIR/uploads'. If the 'UPLOADS' constant is defined, then it will + * override the 'upload_path' option and 'WP_CONTENT_DIR/uploads' path. + * + * The upload URL path is set either by the 'upload_url_path' option or by using + * the 'WP_CONTENT_URL' constant and appending '/uploads' to the path. + * + * If the 'uploads_use_yearmonth_folders' is set to true (checkbox if checked in + * the administration settings panel), then the time will be used. The format + * will be year first and then month. + * + * If the path couldn't be created, then an error will be returned with the key + * 'error' containing the error message. The error suggests that the parent + * directory is not writable by the server. + * + * On success, the returned array will have many indices: + * 'path' - base directory and sub directory or full path to upload directory. + * 'url' - base url and sub directory or absolute URL to upload directory. + * 'subdir' - sub directory if uploads use year/month folders option is on. + * 'basedir' - path without subdir. + * 'baseurl' - URL path without subdir. + * 'error' - set to false. + * + * @since 2.0.0 + * @uses apply_filters() Calls 'upload_dir' on returned array. + * + * @param string $time Optional. Time formatted in 'yyyy/mm'. + * @return array See above for description. + */ +function wp_upload_dir( $time = null ) { + $siteurl = get_option( 'siteurl' ); + $upload_path = trim( get_option( 'upload_path' ) ); + + if ( empty( $upload_path ) || 'wp-content/uploads' == $upload_path ) { + $dir = WP_CONTENT_DIR . '/uploads'; + } elseif ( 0 !== strpos( $upload_path, ABSPATH ) ) { + // $dir is absolute, $upload_path is (maybe) relative to ABSPATH + $dir = path_join( ABSPATH, $upload_path ); + } else { + $dir = $upload_path; + } + + if ( !$url = get_option( 'upload_url_path' ) ) { + if ( empty($upload_path) || ( 'wp-content/uploads' == $upload_path ) || ( $upload_path == $dir ) ) + $url = WP_CONTENT_URL . '/uploads'; + else + $url = trailingslashit( $siteurl ) . $upload_path; + } + + // Obey the value of UPLOADS. This happens as long as ms-files rewriting is disabled. + // We also sometimes obey UPLOADS when rewriting is enabled -- see the next block. + if ( defined( 'UPLOADS' ) && ! ( is_multisite() && get_site_option( 'ms_files_rewriting' ) ) ) { + $dir = ABSPATH . UPLOADS; + $url = trailingslashit( $siteurl ) . UPLOADS; + } + + // If multisite (and if not the main site in a post-MU network) + if ( is_multisite() && ! ( is_main_network() && is_main_site() && defined( 'MULTISITE' ) ) ) { + + if ( ! get_site_option( 'ms_files_rewriting' ) ) { + // If ms-files rewriting is disabled (networks created post-3.5), it is fairly straightforward: + // Append sites/%d if we're not on the main site (for post-MU networks). (The extra directory + // prevents a four-digit ID from conflicting with a year-based directory for the main site. + // But if a MU-era network has disabled ms-files rewriting manually, they don't need the extra + // directory, as they never had wp-content/uploads for the main site.) + + if ( defined( 'MULTISITE' ) ) + $ms_dir = '/sites/' . get_current_blog_id(); + else + $ms_dir = '/' . get_current_blog_id(); + + $dir .= $ms_dir; + $url .= $ms_dir; + + } elseif ( defined( 'UPLOADS' ) && ! ms_is_switched() ) { + // Handle the old-form ms-files.php rewriting if the network still has that enabled. + // When ms-files rewriting is enabled, then we only listen to UPLOADS when: + // 1) we are not on the main site in a post-MU network, + // as wp-content/uploads is used there, and + // 2) we are not switched, as ms_upload_constants() hardcodes + // these constants to reflect the original blog ID. + // + // Rather than UPLOADS, we actually use BLOGUPLOADDIR if it is set, as it is absolute. + // (And it will be set, see ms_upload_constants().) Otherwise, UPLOADS can be used, as + // as it is relative to ABSPATH. For the final piece: when UPLOADS is used with ms-files + // rewriting in multisite, the resulting URL is /files. (#WP22702 for background.) + + if ( defined( 'BLOGUPLOADDIR' ) ) + $dir = untrailingslashit( BLOGUPLOADDIR ); + else + $dir = ABSPATH . UPLOADS; + $url = trailingslashit( $siteurl ) . 'files'; + } + } + + $basedir = $dir; + $baseurl = $url; + + $subdir = ''; + if ( get_option( 'uploads_use_yearmonth_folders' ) ) { + // Generate the yearly and monthly dirs + if ( !$time ) + $time = current_time( 'mysql' ); + $y = substr( $time, 0, 4 ); + $m = substr( $time, 5, 2 ); + $subdir = "/$y/$m"; + } + + $dir .= $subdir; + $url .= $subdir; + + $uploads = apply_filters( 'upload_dir', + array( + 'path' => $dir, + 'url' => $url, + 'subdir' => $subdir, + 'basedir' => $basedir, + 'baseurl' => $baseurl, + 'error' => false, + ) ); + + // Make sure we have an uploads dir + if ( ! wp_mkdir_p( $uploads['path'] ) ) { + if ( 0 === strpos( $uploads['basedir'], ABSPATH ) ) + $error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir']; + else + $error_path = basename( $uploads['basedir'] ) . $uploads['subdir']; + + $message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), $error_path ); + $uploads['error'] = $message; + } + + return $uploads; +} + +/** + * Get a filename that is sanitized and unique for the given directory. + * + * If the filename is not unique, then a number will be added to the filename + * before the extension, and will continue adding numbers until the filename is + * unique. + * + * The callback is passed three parameters, the first one is the directory, the + * second is the filename, and the third is the extension. + * + * @since 2.5.0 + * + * @param string $dir + * @param string $filename + * @param mixed $unique_filename_callback Callback. + * @return string New filename, if given wasn't unique. + */ +function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) { + // sanitize the file name before we begin processing + $filename = sanitize_file_name($filename); + + // separate the filename into a name and extension + $info = pathinfo($filename); + $ext = !empty($info['extension']) ? '.' . $info['extension'] : ''; + $name = basename($filename, $ext); + + // edge case: if file is named '.ext', treat as an empty name + if ( $name === $ext ) + $name = ''; + + // Increment the file number until we have a unique file to save in $dir. Use callback if supplied. + if ( $unique_filename_callback && is_callable( $unique_filename_callback ) ) { + $filename = call_user_func( $unique_filename_callback, $dir, $name, $ext ); + } else { + $number = ''; + + // change '.ext' to lower case + if ( $ext && strtolower($ext) != $ext ) { + $ext2 = strtolower($ext); + $filename2 = preg_replace( '|' . preg_quote($ext) . '$|', $ext2, $filename ); + + // check for both lower and upper case extension or image sub-sizes may be overwritten + while ( file_exists($dir . "/$filename") || file_exists($dir . "/$filename2") ) { + $new_number = $number + 1; + $filename = str_replace( "$number$ext", "$new_number$ext", $filename ); + $filename2 = str_replace( "$number$ext2", "$new_number$ext2", $filename2 ); + $number = $new_number; + } + return $filename2; + } + + while ( file_exists( $dir . "/$filename" ) ) { + if ( '' == "$number$ext" ) + $filename = $filename . ++$number . $ext; + else + $filename = str_replace( "$number$ext", ++$number . $ext, $filename ); + } + } + + return $filename; +} + +/** + * Create a file in the upload folder with given content. + * + * If there is an error, then the key 'error' will exist with the error message. + * If success, then the key 'file' will have the unique file path, the 'url' key + * will have the link to the new file. and the 'error' key will be set to false. + * + * This function will not move an uploaded file to the upload folder. It will + * create a new file with the content in $bits parameter. If you move the upload + * file, read the content of the uploaded file, and then you can give the + * filename and content to this function, which will add it to the upload + * folder. + * + * The permissions will be set on the new file automatically by this function. + * + * @since 2.0.0 + * + * @param string $name + * @param null $deprecated Never used. Set to null. + * @param mixed $bits File content + * @param string $time Optional. Time formatted in 'yyyy/mm'. + * @return array + */ +function wp_upload_bits( $name, $deprecated, $bits, $time = null ) { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '2.0' ); + + if ( empty( $name ) ) + return array( 'error' => __( 'Empty filename' ) ); + + $wp_filetype = wp_check_filetype( $name ); + if ( ! $wp_filetype['ext'] && ! current_user_can( 'unfiltered_upload' ) ) + return array( 'error' => __( 'Invalid file type' ) ); + + $upload = wp_upload_dir( $time ); + + if ( $upload['error'] !== false ) + return $upload; + + $upload_bits_error = apply_filters( 'wp_upload_bits', array( 'name' => $name, 'bits' => $bits, 'time' => $time ) ); + if ( !is_array( $upload_bits_error ) ) { + $upload[ 'error' ] = $upload_bits_error; + return $upload; + } + + $filename = wp_unique_filename( $upload['path'], $name ); + + $new_file = $upload['path'] . "/$filename"; + if ( ! wp_mkdir_p( dirname( $new_file ) ) ) { + if ( 0 === strpos( $upload['basedir'], ABSPATH ) ) + $error_path = str_replace( ABSPATH, '', $upload['basedir'] ) . $upload['subdir']; + else + $error_path = basename( $upload['basedir'] ) . $upload['subdir']; + + $message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), $error_path ); + return array( 'error' => $message ); + } + + $ifp = @ fopen( $new_file, 'wb' ); + if ( ! $ifp ) + return array( 'error' => sprintf( __( 'Could not write file %s' ), $new_file ) ); + + @fwrite( $ifp, $bits ); + fclose( $ifp ); + clearstatcache(); + + // Set correct file permissions + $stat = @ stat( dirname( $new_file ) ); + $perms = $stat['mode'] & 0007777; + $perms = $perms & 0000666; + @ chmod( $new_file, $perms ); + clearstatcache(); + + // Compute the URL + $url = $upload['url'] . "/$filename"; + + return array( 'file' => $new_file, 'url' => $url, 'error' => false ); +} + +/** + * Retrieve the file type based on the extension name. + * + * @package WordPress + * @since 2.5.0 + * @uses apply_filters() Calls 'ext2type' hook on default supported types. + * + * @param string $ext The extension to search. + * @return string|null The file type, example: audio, video, document, spreadsheet, etc. Null if not found. + */ +function wp_ext2type( $ext ) { + $ext = strtolower( $ext ); + $ext2type = apply_filters( 'ext2type', array( + 'image' => array( 'jpg', 'jpeg', 'jpe', 'gif', 'png', 'bmp', 'tif', 'tiff', 'ico' ), + 'audio' => array( 'aac', 'ac3', 'aif', 'aiff', 'm3a', 'm4a', 'm4b', 'mka', 'mp1', 'mp2', 'mp3', 'ogg', 'oga', 'ram', 'wav', 'wma' ), + 'video' => array( 'asf', 'avi', 'divx', 'dv', 'flv', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'mpv', 'ogm', 'ogv', 'qt', 'rm', 'vob', 'wmv' ), + 'document' => array( 'doc', 'docx', 'docm', 'dotm', 'odt', 'pages', 'pdf', 'rtf', 'wp', 'wpd' ), + 'spreadsheet' => array( 'numbers', 'ods', 'xls', 'xlsx', 'xlsm', 'xlsb' ), + 'interactive' => array( 'swf', 'key', 'ppt', 'pptx', 'pptm', 'pps', 'ppsx', 'ppsm', 'sldx', 'sldm', 'odp' ), + 'text' => array( 'asc', 'csv', 'tsv', 'txt' ), + 'archive' => array( 'bz2', 'cab', 'dmg', 'gz', 'rar', 'sea', 'sit', 'sqx', 'tar', 'tgz', 'zip', '7z' ), + 'code' => array( 'css', 'htm', 'html', 'php', 'js' ), + ) ); + + foreach ( $ext2type as $type => $exts ) + if ( in_array( $ext, $exts ) ) + return $type; + + return null; +} + +/** + * Retrieve the file type from the file name. + * + * You can optionally define the mime array, if needed. + * + * @since 2.0.4 + * + * @param string $filename File name or path. + * @param array $mimes Optional. Key is the file extension with value as the mime type. + * @return array Values with extension first and mime type. + */ +function wp_check_filetype( $filename, $mimes = null ) { + if ( empty($mimes) ) + $mimes = get_allowed_mime_types(); + $type = false; + $ext = false; + + foreach ( $mimes as $ext_preg => $mime_match ) { + $ext_preg = '!\.(' . $ext_preg . ')$!i'; + if ( preg_match( $ext_preg, $filename, $ext_matches ) ) { + $type = $mime_match; + $ext = $ext_matches[1]; + break; + } + } + + return compact( 'ext', 'type' ); +} + +/** + * Attempt to determine the real file type of a file. + * If unable to, the file name extension will be used to determine type. + * + * If it's determined that the extension does not match the file's real type, + * then the "proper_filename" value will be set with a proper filename and extension. + * + * Currently this function only supports validating images known to getimagesize(). + * + * @since 3.0.0 + * + * @param string $file Full path to the file. + * @param string $filename The name of the file (may differ from $file due to $file being in a tmp directory) + * @param array $mimes Optional. Key is the file extension with value as the mime type. + * @return array Values for the extension, MIME, and either a corrected filename or false if original $filename is valid + */ +function wp_check_filetype_and_ext( $file, $filename, $mimes = null ) { + + $proper_filename = false; + + // Do basic extension validation and MIME mapping + $wp_filetype = wp_check_filetype( $filename, $mimes ); + extract( $wp_filetype ); + + // We can't do any further validation without a file to work with + if ( ! file_exists( $file ) ) + return compact( 'ext', 'type', 'proper_filename' ); + + // We're able to validate images using GD + if ( $type && 0 === strpos( $type, 'image/' ) && function_exists('getimagesize') ) { + + // Attempt to figure out what type of image it actually is + $imgstats = @getimagesize( $file ); + + // If getimagesize() knows what kind of image it really is and if the real MIME doesn't match the claimed MIME + if ( !empty($imgstats['mime']) && $imgstats['mime'] != $type ) { + // This is a simplified array of MIMEs that getimagesize() can detect and their extensions + // You shouldn't need to use this filter, but it's here just in case + $mime_to_ext = apply_filters( 'getimagesize_mimes_to_exts', array( + 'image/jpeg' => 'jpg', + 'image/png' => 'png', + 'image/gif' => 'gif', + 'image/bmp' => 'bmp', + 'image/tiff' => 'tif', + ) ); + + // Replace whatever is after the last period in the filename with the correct extension + if ( ! empty( $mime_to_ext[ $imgstats['mime'] ] ) ) { + $filename_parts = explode( '.', $filename ); + array_pop( $filename_parts ); + $filename_parts[] = $mime_to_ext[ $imgstats['mime'] ]; + $new_filename = implode( '.', $filename_parts ); + + if ( $new_filename != $filename ) + $proper_filename = $new_filename; // Mark that it changed + + // Redefine the extension / MIME + $wp_filetype = wp_check_filetype( $new_filename, $mimes ); + extract( $wp_filetype ); + } + } + } + + // Let plugins try and validate other types of files + // Should return an array in the style of array( 'ext' => $ext, 'type' => $type, 'proper_filename' => $proper_filename ) + return apply_filters( 'wp_check_filetype_and_ext', compact( 'ext', 'type', 'proper_filename' ), $file, $filename, $mimes ); +} + +/** + * Retrieve list of mime types and file extensions. + * + * @since 3.5.0 + * + * @uses apply_filters() Calls 'mime_types' on returned array. This filter should + * be used to add types, not remove them. To remove types use the upload_mimes filter. + * + * @return array Array of mime types keyed by the file extension regex corresponding to those types. + */ +function wp_get_mime_types() { + // Accepted MIME types are set here as PCRE unless provided. + return apply_filters( 'mime_types', array( + // Image formats + 'jpg|jpeg|jpe' => 'image/jpeg', + 'gif' => 'image/gif', + 'png' => 'image/png', + 'bmp' => 'image/bmp', + 'tif|tiff' => 'image/tiff', + 'ico' => 'image/x-icon', + // Video formats + 'asf|asx' => 'video/x-ms-asf', + 'wmv' => 'video/x-ms-wmv', + 'wmx' => 'video/x-ms-wmx', + 'wm' => 'video/x-ms-wm', + 'avi' => 'video/avi', + 'divx' => 'video/divx', + 'flv' => 'video/x-flv', + 'mov|qt' => 'video/quicktime', + 'mpeg|mpg|mpe' => 'video/mpeg', + 'mp4|m4v' => 'video/mp4', + 'ogv' => 'video/ogg', + 'webm' => 'video/webm', + 'mkv' => 'video/x-matroska', + // Text formats + 'txt|asc|c|cc|h' => 'text/plain', + 'csv' => 'text/csv', + 'tsv' => 'text/tab-separated-values', + 'ics' => 'text/calendar', + 'rtx' => 'text/richtext', + 'css' => 'text/css', + 'htm|html' => 'text/html', + // Audio formats + 'mp3|m4a|m4b' => 'audio/mpeg', + 'ra|ram' => 'audio/x-realaudio', + 'wav' => 'audio/wav', + 'ogg|oga' => 'audio/ogg', + 'mid|midi' => 'audio/midi', + 'wma' => 'audio/x-ms-wma', + 'wax' => 'audio/x-ms-wax', + 'mka' => 'audio/x-matroska', + // Misc application formats + 'rtf' => 'application/rtf', + 'js' => 'application/javascript', + 'pdf' => 'application/pdf', + 'swf' => 'application/x-shockwave-flash', + 'class' => 'application/java', + 'tar' => 'application/x-tar', + 'zip' => 'application/zip', + 'gz|gzip' => 'application/x-gzip', + 'rar' => 'application/rar', + '7z' => 'application/x-7z-compressed', + 'exe' => 'application/x-msdownload', + // MS Office formats + 'doc' => 'application/msword', + 'pot|pps|ppt' => 'application/vnd.ms-powerpoint', + 'wri' => 'application/vnd.ms-write', + 'xla|xls|xlt|xlw' => 'application/vnd.ms-excel', + 'mdb' => 'application/vnd.ms-access', + 'mpp' => 'application/vnd.ms-project', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'docm' => 'application/vnd.ms-word.document.macroEnabled.12', + 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'dotm' => 'application/vnd.ms-word.template.macroEnabled.12', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12', + 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', + 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', + 'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12', + 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12', + 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12', + 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', + 'potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12', + 'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12', + 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', + 'sldm' => 'application/vnd.ms-powerpoint.slide.macroEnabled.12', + 'onetoc|onetoc2|onetmp|onepkg' => 'application/onenote', + // OpenOffice formats + 'odt' => 'application/vnd.oasis.opendocument.text', + 'odp' => 'application/vnd.oasis.opendocument.presentation', + 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', + 'odg' => 'application/vnd.oasis.opendocument.graphics', + 'odc' => 'application/vnd.oasis.opendocument.chart', + 'odb' => 'application/vnd.oasis.opendocument.database', + 'odf' => 'application/vnd.oasis.opendocument.formula', + // WordPerfect formats + 'wp|wpd' => 'application/wordperfect', + // iWork formats + 'key' => 'application/vnd.apple.keynote', + 'numbers' => 'application/vnd.apple.numbers', + 'pages' => 'application/vnd.apple.pages', + ) ); +} +/** + * Retrieve list of allowed mime types and file extensions. + * + * @since 2.8.6 + * + * @uses apply_filters() Calls 'upload_mimes' on returned array + * @uses wp_get_upload_mime_types() to fetch the list of mime types + * + * @param int|WP_User $user Optional. User to check. Defaults to current user. + * @return array Array of mime types keyed by the file extension regex corresponding to those types. + */ +function get_allowed_mime_types( $user = null ) { + $t = wp_get_mime_types(); + + unset( $t['swf'], $t['exe'] ); + if ( function_exists( 'current_user_can' ) ) + $unfiltered = $user ? user_can( $user, 'unfiltered_html' ) : current_user_can( 'unfiltered_html' ); + + if ( empty( $unfiltered ) ) + unset( $t['htm|html'] ); + + return apply_filters( 'upload_mimes', $t, $user ); +} + +/** + * Display "Are You Sure" message to confirm the action being taken. + * + * If the action has the nonce explain message, then it will be displayed along + * with the "Are you sure?" message. + * + * @package WordPress + * @subpackage Security + * @since 2.0.4 + * + * @param string $action The nonce action. + */ +function wp_nonce_ays( $action ) { + $title = __( 'WordPress Failure Notice' ); + if ( 'log-out' == $action ) { + $html = sprintf( __( 'You are attempting to log out of %s' ), get_bloginfo( 'name' ) ) . '</p><p>'; + $html .= sprintf( __( "Do you really want to <a href='%s'>log out</a>?"), wp_logout_url() ); + } else { + $html = __( 'Are you sure you want to do this?' ); + if ( wp_get_referer() ) + $html .= "</p><p><a href='" . esc_url( remove_query_arg( 'updated', wp_get_referer() ) ) . "'>" . __( 'Please try again.' ) . "</a>"; + } + + wp_die( $html, $title, array('response' => 403) ); +} + +/** + * Kill WordPress execution and display HTML message with error message. + * + * This function complements the die() PHP function. The difference is that + * HTML will be displayed to the user. It is recommended to use this function + * only, when the execution should not continue any further. It is not + * recommended to call this function very often and try to handle as many errors + * as possible silently. + * + * @since 2.0.4 + * + * @param string $message Error message. + * @param string $title Error title. + * @param string|array $args Optional arguments to control behavior. + */ +function wp_die( $message = '', $title = '', $args = array() ) { + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) + $function = apply_filters( 'wp_die_ajax_handler', '_ajax_wp_die_handler' ); + elseif ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) + $function = apply_filters( 'wp_die_xmlrpc_handler', '_xmlrpc_wp_die_handler' ); + else + $function = apply_filters( 'wp_die_handler', '_default_wp_die_handler' ); + + call_user_func( $function, $message, $title, $args ); +} + +/** + * Kill WordPress execution and display HTML message with error message. + * + * This is the default handler for wp_die if you want a custom one for your + * site then you can overload using the wp_die_handler filter in wp_die + * + * @since 3.0.0 + * @access private + * + * @param string $message Error message. + * @param string $title Error title. + * @param string|array $args Optional arguments to control behavior. + */ +function _default_wp_die_handler( $message, $title = '', $args = array() ) { + $defaults = array( 'response' => 500 ); + $r = wp_parse_args($args, $defaults); + + $have_gettext = function_exists('__'); + + if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) { + if ( empty( $title ) ) { + $error_data = $message->get_error_data(); + if ( is_array( $error_data ) && isset( $error_data['title'] ) ) + $title = $error_data['title']; + } + $errors = $message->get_error_messages(); + switch ( count( $errors ) ) : + case 0 : + $message = ''; + break; + case 1 : + $message = "<p>{$errors[0]}</p>"; + break; + default : + $message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>"; + break; + endswitch; + } elseif ( is_string( $message ) ) { + $message = "<p>$message</p>"; + } + + if ( isset( $r['back_link'] ) && $r['back_link'] ) { + $back_text = $have_gettext? __('« Back') : '« Back'; + $message .= "\n<p><a href='javascript:history.back()'>$back_text</a></p>"; + } + + if ( ! did_action( 'admin_head' ) ) : + if ( !headers_sent() ) { + status_header( $r['response'] ); + nocache_headers(); + header( 'Content-Type: text/html; charset=utf-8' ); + } + + if ( empty($title) ) + $title = $have_gettext ? __('WordPress › Error') : 'WordPress › Error'; + + $text_direction = 'ltr'; + if ( isset($r['text_direction']) && 'rtl' == $r['text_direction'] ) + $text_direction = 'rtl'; + elseif ( function_exists( 'is_rtl' ) && is_rtl() ) + $text_direction = 'rtl'; +?> +<!DOCTYPE html> +<!-- Ticket #11289, IE bug fix: always pad the error page with enough characters such that it is greater than 512 bytes, even after gzip compression abcdefghijklmnopqrstuvwxyz1234567890aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz11223344556677889900abacbcbdcdcededfefegfgfhghgihihjijikjkjlklkmlmlnmnmononpopoqpqprqrqsrsrtstsubcbcdcdedefefgfabcadefbghicjkldmnoepqrfstugvwxhyz1i234j567k890laabmbccnddeoeffpgghqhiirjjksklltmmnunoovppqwqrrxsstytuuzvvw0wxx1yyz2z113223434455666777889890091abc2def3ghi4jkl5mno6pqr7stu8vwx9yz11aab2bcc3dd4ee5ff6gg7hh8ii9j0jk1kl2lmm3nnoo4p5pq6qrr7ss8tt9uuvv0wwx1x2yyzz13aba4cbcb5dcdc6dedfef8egf9gfh0ghg1ihi2hji3jik4jkj5lkl6kml7mln8mnm9ono +--> +<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) && function_exists( 'is_rtl' ) ) language_attributes(); else echo "dir='$text_direction'"; ?>> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title><?php echo $title ?> + + + + + + + + 500 ); + + $r = wp_parse_args($args, $defaults); + + if ( $wp_xmlrpc_server ) { + $error = new IXR_Error( $r['response'] , $message); + $wp_xmlrpc_server->output( $error->getXml() ); + } + die(); +} + +/** + * Kill WordPress ajax execution. + * + * This is the handler for wp_die when processing Ajax requests. + * + * @since 3.4.0 + * @access private + * + * @param string $message Optional. Response to print. + */ +function _ajax_wp_die_handler( $message = '' ) { + if ( is_scalar( $message ) ) + die( (string) $message ); + die( '0' ); +} + +/** + * Kill WordPress execution. + * + * This is the handler for wp_die when processing APP requests. + * + * @since 3.4.0 + * @access private + * + * @param string $message Optional. Response to print. + */ +function _scalar_wp_die_handler( $message = '' ) { + if ( is_scalar( $message ) ) + die( (string) $message ); + die(); +} + +/** + * Send a JSON response back to an Ajax request. + * + * @since 3.5.0 + * + * @param mixed $response Variable (usually an array or object) to encode as JSON, then print and die. + */ +function wp_send_json( $response ) { + @header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) ); + echo json_encode( $response ); + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) + wp_die(); + else + die; +} + +/** + * Send a JSON response back to an Ajax request, indicating success. + * + * @since 3.5.0 + * + * @param mixed $data Data to encode as JSON, then print and die. + */ +function wp_send_json_success( $data = null ) { + $response = array( 'success' => true ); + + if ( isset( $data ) ) + $response['data'] = $data; + + wp_send_json( $response ); +} + +/** + * Send a JSON response back to an Ajax request, indicating failure. + * + * @since 3.5.0 + * + * @param mixed $data Data to encode as JSON, then print and die. + */ +function wp_send_json_error( $data = null ) { + $response = array( 'success' => false ); + + if ( isset( $data ) ) + $response['data'] = $data; + + wp_send_json( $response ); +} + +/** + * Retrieve the WordPress home page URL. + * + * If the constant named 'WP_HOME' exists, then it will be used and returned by + * the function. This can be used to counter the redirection on your local + * development environment. + * + * @access private + * @package WordPress + * @since 2.2.0 + * + * @param string $url URL for the home location + * @return string Homepage location. + */ +function _config_wp_home( $url = '' ) { + if ( defined( 'WP_HOME' ) ) + return untrailingslashit( WP_HOME ); + return $url; +} + +/** + * Retrieve the WordPress site URL. + * + * If the constant named 'WP_SITEURL' is defined, then the value in that + * constant will always be returned. This can be used for debugging a site on + * your localhost while not having to change the database to your URL. + * + * @access private + * @package WordPress + * @since 2.2.0 + * + * @param string $url URL to set the WordPress site location. + * @return string The WordPress Site URL + */ +function _config_wp_siteurl( $url = '' ) { + if ( defined( 'WP_SITEURL' ) ) + return untrailingslashit( WP_SITEURL ); + return $url; +} + +/** + * Set the localized direction for MCE plugin. + * + * Will only set the direction to 'rtl', if the WordPress locale has the text + * direction set to 'rtl'. + * + * Fills in the 'directionality', 'plugins', and 'theme_advanced_button1' array + * keys. These keys are then returned in the $input array. + * + * @access private + * @package WordPress + * @subpackage MCE + * @since 2.1.0 + * + * @param array $input MCE plugin array. + * @return array Direction set for 'rtl', if needed by locale. + */ +function _mce_set_direction( $input ) { + if ( is_rtl() ) { + $input['directionality'] = 'rtl'; + $input['plugins'] .= ',directionality'; + $input['theme_advanced_buttons1'] .= ',ltr'; + } + + return $input; +} + + +/** + * Convert smiley code to the icon graphic file equivalent. + * + * You can turn off smilies, by going to the write setting screen and unchecking + * the box, or by setting 'use_smilies' option to false or removing the option. + * + * Plugins may override the default smiley list by setting the $wpsmiliestrans + * to an array, with the key the code the blogger types in and the value the + * image file. + * + * The $wp_smiliessearch global is for the regular expression and is set each + * time the function is called. + * + * The full list of smilies can be found in the function and won't be listed in + * the description. Probably should create a Codex page for it, so that it is + * available. + * + * @global array $wpsmiliestrans + * @global array $wp_smiliessearch + * @since 2.2.0 + */ +function smilies_init() { + global $wpsmiliestrans, $wp_smiliessearch; + + // don't bother setting up smilies if they are disabled + if ( !get_option( 'use_smilies' ) ) + return; + + if ( !isset( $wpsmiliestrans ) ) { + $wpsmiliestrans = array( + ':mrgreen:' => 'icon_mrgreen.gif', + ':neutral:' => 'icon_neutral.gif', + ':twisted:' => 'icon_twisted.gif', + ':arrow:' => 'icon_arrow.gif', + ':shock:' => 'icon_eek.gif', + ':smile:' => 'icon_smile.gif', + ':???:' => 'icon_confused.gif', + ':cool:' => 'icon_cool.gif', + ':evil:' => 'icon_evil.gif', + ':grin:' => 'icon_biggrin.gif', + ':idea:' => 'icon_idea.gif', + ':oops:' => 'icon_redface.gif', + ':razz:' => 'icon_razz.gif', + ':roll:' => 'icon_rolleyes.gif', + ':wink:' => 'icon_wink.gif', + ':cry:' => 'icon_cry.gif', + ':eek:' => 'icon_surprised.gif', + ':lol:' => 'icon_lol.gif', + ':mad:' => 'icon_mad.gif', + ':sad:' => 'icon_sad.gif', + '8-)' => 'icon_cool.gif', + '8-O' => 'icon_eek.gif', + ':-(' => 'icon_sad.gif', + ':-)' => 'icon_smile.gif', + ':-?' => 'icon_confused.gif', + ':-D' => 'icon_biggrin.gif', + ':-P' => 'icon_razz.gif', + ':-o' => 'icon_surprised.gif', + ':-x' => 'icon_mad.gif', + ':-|' => 'icon_neutral.gif', + ';-)' => 'icon_wink.gif', + // This one transformation breaks regular text with frequency. + // '8)' => 'icon_cool.gif', + '8O' => 'icon_eek.gif', + ':(' => 'icon_sad.gif', + ':)' => 'icon_smile.gif', + ':?' => 'icon_confused.gif', + ':D' => 'icon_biggrin.gif', + ':P' => 'icon_razz.gif', + ':o' => 'icon_surprised.gif', + ':x' => 'icon_mad.gif', + ':|' => 'icon_neutral.gif', + ';)' => 'icon_wink.gif', + ':!:' => 'icon_exclaim.gif', + ':?:' => 'icon_question.gif', + ); + } + + if (count($wpsmiliestrans) == 0) { + return; + } + + /* + * NOTE: we sort the smilies in reverse key order. This is to make sure + * we match the longest possible smilie (:???: vs :?) as the regular + * expression used below is first-match + */ + krsort($wpsmiliestrans); + + $wp_smiliessearch = '/((?:\s|^)'; + + $subchar = ''; + foreach ( (array) $wpsmiliestrans as $smiley => $img ) { + $firstchar = substr($smiley, 0, 1); + $rest = substr($smiley, 1); + + // new subpattern? + if ($firstchar != $subchar) { + if ($subchar != '') { + $wp_smiliessearch .= ')(?=\s|$))|((?:\s|^)'; ; + } + $subchar = $firstchar; + $wp_smiliessearch .= preg_quote($firstchar, '/') . '(?:'; + } else { + $wp_smiliessearch .= '|'; + } + $wp_smiliessearch .= preg_quote($rest, '/'); + } + + $wp_smiliessearch .= ')(?=\s|$))/m'; + +} + +/** + * Merge user defined arguments into defaults array. + * + * This function is used throughout WordPress to allow for both string or array + * to be merged into another array. + * + * @since 2.2.0 + * + * @param string|array $args Value to merge with $defaults + * @param array $defaults Array that serves as the defaults. + * @return array Merged user defined values with defaults. + */ +function wp_parse_args( $args, $defaults = '' ) { + if ( is_object( $args ) ) + $r = get_object_vars( $args ); + elseif ( is_array( $args ) ) + $r =& $args; + else + wp_parse_str( $args, $r ); + + if ( is_array( $defaults ) ) + return array_merge( $defaults, $r ); + return $r; +} + +/** + * Clean up an array, comma- or space-separated list of IDs. + * + * @since 3.0.0 + * + * @param array|string $list + * @return array Sanitized array of IDs + */ +function wp_parse_id_list( $list ) { + if ( !is_array($list) ) + $list = preg_split('/[\s,]+/', $list); + + return array_unique(array_map('absint', $list)); +} + +/** + * Extract a slice of an array, given a list of keys. + * + * @since 3.1.0 + * + * @param array $array The original array + * @param array $keys The list of keys + * @return array The array slice + */ +function wp_array_slice_assoc( $array, $keys ) { + $slice = array(); + foreach ( $keys as $key ) + if ( isset( $array[ $key ] ) ) + $slice[ $key ] = $array[ $key ]; + + return $slice; +} + +/** + * Filters a list of objects, based on a set of key => value arguments. + * + * @since 3.0.0 + * + * @param array $list An array of objects to filter + * @param array $args An array of key => value arguments to match against each object + * @param string $operator The logical operation to perform. 'or' means only one element + * from the array needs to match; 'and' means all elements must match. The default is 'and'. + * @param bool|string $field A field from the object to place instead of the entire object + * @return array A list of objects or object fields + */ +function wp_filter_object_list( $list, $args = array(), $operator = 'and', $field = false ) { + if ( ! is_array( $list ) ) + return array(); + + $list = wp_list_filter( $list, $args, $operator ); + + if ( $field ) + $list = wp_list_pluck( $list, $field ); + + return $list; +} + +/** + * Filters a list of objects, based on a set of key => value arguments. + * + * @since 3.1.0 + * + * @param array $list An array of objects to filter + * @param array $args An array of key => value arguments to match against each object + * @param string $operator The logical operation to perform: + * 'AND' means all elements from the array must match; + * 'OR' means only one element needs to match; + * 'NOT' means no elements may match. + * The default is 'AND'. + * @return array + */ +function wp_list_filter( $list, $args = array(), $operator = 'AND' ) { + if ( ! is_array( $list ) ) + return array(); + + if ( empty( $args ) ) + return $list; + + $operator = strtoupper( $operator ); + $count = count( $args ); + $filtered = array(); + + foreach ( $list as $key => $obj ) { + $to_match = (array) $obj; + + $matched = 0; + foreach ( $args as $m_key => $m_value ) { + if ( array_key_exists( $m_key, $to_match ) && $m_value == $to_match[ $m_key ] ) + $matched++; + } + + if ( ( 'AND' == $operator && $matched == $count ) + || ( 'OR' == $operator && $matched > 0 ) + || ( 'NOT' == $operator && 0 == $matched ) ) { + $filtered[$key] = $obj; + } + } + + return $filtered; +} + +/** + * Pluck a certain field out of each object in a list. + * + * @since 3.1.0 + * + * @param array $list A list of objects or arrays + * @param int|string $field A field from the object to place instead of the entire object + * @return array + */ +function wp_list_pluck( $list, $field ) { + foreach ( $list as $key => $value ) { + if ( is_object( $value ) ) + $list[ $key ] = $value->$field; + else + $list[ $key ] = $value[ $field ]; + } + + return $list; +} + +/** + * Determines if Widgets library should be loaded. + * + * Checks to make sure that the widgets library hasn't already been loaded. If + * it hasn't, then it will load the widgets library and run an action hook. + * + * @since 2.2.0 + * @uses add_action() Calls '_admin_menu' hook with 'wp_widgets_add_menu' value. + */ +function wp_maybe_load_widgets() { + if ( ! apply_filters('load_default_widgets', true) ) + return; + require_once( ABSPATH . WPINC . '/default-widgets.php' ); + add_action( '_admin_menu', 'wp_widgets_add_menu' ); +} + +/** + * Append the Widgets menu to the themes main menu. + * + * @since 2.2.0 + * @uses $submenu The administration submenu list. + */ +function wp_widgets_add_menu() { + global $submenu; + + if ( ! current_theme_supports( 'widgets' ) ) + return; + + $submenu['themes.php'][7] = array( __( 'Widgets' ), 'edit_theme_options', 'widgets.php' ); + ksort( $submenu['themes.php'], SORT_NUMERIC ); +} + +/** + * Flush all output buffers for PHP 5.2. + * + * Make sure all output buffers are flushed before our singletons our destroyed. + * + * @since 2.2.0 + */ +function wp_ob_end_flush_all() { + $levels = ob_get_level(); + for ($i=0; $i<$levels; $i++) + ob_end_flush(); +} + +/** + * Load custom DB error or display WordPress DB error. + * + * If a file exists in the wp-content directory named db-error.php, then it will + * be loaded instead of displaying the WordPress DB error. If it is not found, + * then the WordPress DB error will be displayed instead. + * + * The WordPress DB error sets the HTTP status header to 500 to try to prevent + * search engines from caching the message. Custom DB messages should do the + * same. + * + * This function was backported to WordPress 2.3.2, but originally was added + * in WordPress 2.5.0. + * + * @since 2.3.2 + * @uses $wpdb + */ +function dead_db() { + global $wpdb; + + // Load custom DB error template, if present. + if ( file_exists( WP_CONTENT_DIR . '/db-error.php' ) ) { + require_once( WP_CONTENT_DIR . '/db-error.php' ); + die(); + } + + // If installing or in the admin, provide the verbose message. + if ( defined('WP_INSTALLING') || defined('WP_ADMIN') ) + wp_die($wpdb->error); + + // Otherwise, be terse. + status_header( 500 ); + nocache_headers(); + header( 'Content-Type: text/html; charset=utf-8' ); + + wp_load_translations_early(); +?> + +> + + + <?php _e( 'Database Error' ); ?> + + + +

                  + + +deprecated since version %2$s! Use %3$s instead.'), $function, $version, $replacement ) ); + else + trigger_error( sprintf( __('%1$s is deprecated since version %2$s with no alternative available.'), $function, $version ) ); + } else { + if ( ! is_null( $replacement ) ) + trigger_error( sprintf( '%1$s is deprecated since version %2$s! Use %3$s instead.', $function, $version, $replacement ) ); + else + trigger_error( sprintf( '%1$s is deprecated since version %2$s with no alternative available.', $function, $version ) ); + } + } +} + +/** + * Marks a file as deprecated and informs when it has been used. + * + * There is a hook deprecated_file_included that will be called that can be used + * to get the backtrace up to what file and function included the deprecated + * file. + * + * The current behavior is to trigger a user error if WP_DEBUG is true. + * + * This function is to be used in every file that is deprecated. + * + * @package WordPress + * @subpackage Debug + * @since 2.5.0 + * @access private + * + * @uses do_action() Calls 'deprecated_file_included' and passes the file name, what to use instead, + * the version in which the file was deprecated, and any message regarding the change. + * @uses apply_filters() Calls 'deprecated_file_trigger_error' and expects boolean value of true to do + * trigger or false to not trigger error. + * + * @param string $file The file that was included + * @param string $version The version of WordPress that deprecated the file + * @param string $replacement Optional. The file that should have been included based on ABSPATH + * @param string $message Optional. A message regarding the change + */ +function _deprecated_file( $file, $version, $replacement = null, $message = '' ) { + + do_action( 'deprecated_file_included', $file, $replacement, $version, $message ); + + // Allow plugin to filter the output error trigger + if ( WP_DEBUG && apply_filters( 'deprecated_file_trigger_error', true ) ) { + $message = empty( $message ) ? '' : ' ' . $message; + if ( function_exists( '__' ) ) { + if ( ! is_null( $replacement ) ) + trigger_error( sprintf( __('%1$s is deprecated since version %2$s! Use %3$s instead.'), $file, $version, $replacement ) . $message ); + else + trigger_error( sprintf( __('%1$s is deprecated since version %2$s with no alternative available.'), $file, $version ) . $message ); + } else { + if ( ! is_null( $replacement ) ) + trigger_error( sprintf( '%1$s is deprecated since version %2$s! Use %3$s instead.', $file, $version, $replacement ) . $message ); + else + trigger_error( sprintf( '%1$s is deprecated since version %2$s with no alternative available.', $file, $version ) . $message ); + } + } +} +/** + * Marks a function argument as deprecated and informs when it has been used. + * + * This function is to be used whenever a deprecated function argument is used. + * Before this function is called, the argument must be checked for whether it was + * used by comparing it to its default value or evaluating whether it is empty. + * For example: + * + * if ( !empty($deprecated) ) + * _deprecated_argument( __FUNCTION__, '3.0' ); + * + * + * There is a hook deprecated_argument_run that will be called that can be used + * to get the backtrace up to what file and function used the deprecated + * argument. + * + * The current behavior is to trigger a user error if WP_DEBUG is true. + * + * @package WordPress + * @subpackage Debug + * @since 3.0.0 + * @access private + * + * @uses do_action() Calls 'deprecated_argument_run' and passes the function name, a message on the change, + * and the version in which the argument was deprecated. + * @uses apply_filters() Calls 'deprecated_argument_trigger_error' and expects boolean value of true to do + * trigger or false to not trigger error. + * + * @param string $function The function that was called + * @param string $version The version of WordPress that deprecated the argument used + * @param string $message Optional. A message regarding the change. + */ +function _deprecated_argument( $function, $version, $message = null ) { + + do_action( 'deprecated_argument_run', $function, $message, $version ); + + // Allow plugin to filter the output error trigger + if ( WP_DEBUG && apply_filters( 'deprecated_argument_trigger_error', true ) ) { + if ( function_exists( '__' ) ) { + if ( ! is_null( $message ) ) + trigger_error( sprintf( __('%1$s was called with an argument that is deprecated since version %2$s! %3$s'), $function, $version, $message ) ); + else + trigger_error( sprintf( __('%1$s was called with an argument that is deprecated since version %2$s with no alternative available.'), $function, $version ) ); + } else { + if ( ! is_null( $message ) ) + trigger_error( sprintf( '%1$s was called with an argument that is deprecated since version %2$s! %3$s', $function, $version, $message ) ); + else + trigger_error( sprintf( '%1$s was called with an argument that is deprecated since version %2$s with no alternative available.', $function, $version ) ); + } + } +} + +/** + * Marks something as being incorrectly called. + * + * There is a hook doing_it_wrong_run that will be called that can be used + * to get the backtrace up to what file and function called the deprecated + * function. + * + * The current behavior is to trigger a user error if WP_DEBUG is true. + * + * @package WordPress + * @subpackage Debug + * @since 3.1.0 + * @access private + * + * @uses do_action() Calls 'doing_it_wrong_run' and passes the function arguments. + * @uses apply_filters() Calls 'doing_it_wrong_trigger_error' and expects boolean value of true to do + * trigger or false to not trigger error. + * + * @param string $function The function that was called. + * @param string $message A message explaining what has been done incorrectly. + * @param string $version The version of WordPress where the message was added. + */ +function _doing_it_wrong( $function, $message, $version ) { + + do_action( 'doing_it_wrong_run', $function, $message, $version ); + + // Allow plugin to filter the output error trigger + if ( WP_DEBUG && apply_filters( 'doing_it_wrong_trigger_error', true ) ) { + if ( function_exists( '__' ) ) { + $version = is_null( $version ) ? '' : sprintf( __( '(This message was added in version %s.)' ), $version ); + $message .= ' ' . __( 'Please see Debugging in WordPress for more information.' ); + trigger_error( sprintf( __( '%1$s was called incorrectly. %2$s %3$s' ), $function, $message, $version ) ); + } else { + $version = is_null( $version ) ? '' : sprintf( '(This message was added in version %s.)', $version ); + $message .= ' Please see Debugging in WordPress for more information.'; + trigger_error( sprintf( '%1$s was called incorrectly. %2$s %3$s', $function, $message, $version ) ); + } + } +} + +/** + * Is the server running earlier than 1.5.0 version of lighttpd? + * + * @since 2.5.0 + * + * @return bool Whether the server is running lighttpd < 1.5.0 + */ +function is_lighttpd_before_150() { + $server_parts = explode( '/', isset( $_SERVER['SERVER_SOFTWARE'] )? $_SERVER['SERVER_SOFTWARE'] : '' ); + $server_parts[1] = isset( $server_parts[1] )? $server_parts[1] : ''; + return 'lighttpd' == $server_parts[0] && -1 == version_compare( $server_parts[1], '1.5.0' ); +} + +/** + * Does the specified module exist in the Apache config? + * + * @since 2.5.0 + * + * @param string $mod e.g. mod_rewrite + * @param bool $default The default return value if the module is not found + * @return bool + */ +function apache_mod_loaded($mod, $default = false) { + global $is_apache; + + if ( !$is_apache ) + return false; + + if ( function_exists('apache_get_modules') ) { + $mods = apache_get_modules(); + if ( in_array($mod, $mods) ) + return true; + } elseif ( function_exists('phpinfo') ) { + ob_start(); + phpinfo(8); + $phpinfo = ob_get_clean(); + if ( false !== strpos($phpinfo, $mod) ) + return true; + } + return $default; +} + +/** + * Check if IIS 7+ supports pretty permalinks. + * + * @since 2.8.0 + * + * @return bool + */ +function iis7_supports_permalinks() { + global $is_iis7; + + $supports_permalinks = false; + if ( $is_iis7 ) { + /* First we check if the DOMDocument class exists. If it does not exist, then we cannot + * easily update the xml configuration file, hence we just bail out and tell user that + * pretty permalinks cannot be used. + * + * Next we check if the URL Rewrite Module 1.1 is loaded and enabled for the web site. When + * URL Rewrite 1.1 is loaded it always sets a server variable called 'IIS_UrlRewriteModule'. + * Lastly we make sure that PHP is running via FastCGI. This is important because if it runs + * via ISAPI then pretty permalinks will not work. + */ + $supports_permalinks = class_exists('DOMDocument') && isset($_SERVER['IIS_UrlRewriteModule']) && ( php_sapi_name() == 'cgi-fcgi' ); + } + + return apply_filters('iis7_supports_permalinks', $supports_permalinks); +} + +/** + * File validates against allowed set of defined rules. + * + * A return value of '1' means that the $file contains either '..' or './'. A + * return value of '2' means that the $file contains ':' after the first + * character. A return value of '3' means that the file is not in the allowed + * files list. + * + * @since 1.2.0 + * + * @param string $file File path. + * @param array $allowed_files List of allowed files. + * @return int 0 means nothing is wrong, greater than 0 means something was wrong. + */ +function validate_file( $file, $allowed_files = '' ) { + if ( false !== strpos( $file, '..' ) ) + return 1; + + if ( false !== strpos( $file, './' ) ) + return 1; + + if ( ! empty( $allowed_files ) && ! in_array( $file, $allowed_files ) ) + return 3; + + if (':' == substr( $file, 1, 1 ) ) + return 2; + + return 0; +} + +/** + * Determine if SSL is used. + * + * @since 2.6.0 + * + * @return bool True if SSL, false if not used. + */ +function is_ssl() { + if ( isset($_SERVER['HTTPS']) ) { + if ( 'on' == strtolower($_SERVER['HTTPS']) ) + return true; + if ( '1' == $_SERVER['HTTPS'] ) + return true; + } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) { + return true; + } + return false; +} + +/** + * Whether SSL login should be forced. + * + * @since 2.6.0 + * + * @param string|bool $force Optional. + * @return bool True if forced, false if not forced. + */ +function force_ssl_login( $force = null ) { + static $forced = false; + + if ( !is_null( $force ) ) { + $old_forced = $forced; + $forced = $force; + return $old_forced; + } + + return $forced; +} + +/** + * Whether to force SSL used for the Administration Screens. + * + * @since 2.6.0 + * + * @param string|bool $force + * @return bool True if forced, false if not forced. + */ +function force_ssl_admin( $force = null ) { + static $forced = false; + + if ( !is_null( $force ) ) { + $old_forced = $forced; + $forced = $force; + return $old_forced; + } + + return $forced; +} + +/** + * Guess the URL for the site. + * + * Will remove wp-admin links to retrieve only return URLs not in the wp-admin + * directory. + * + * @since 2.6.0 + * + * @return string + */ +function wp_guess_url() { + if ( defined('WP_SITEURL') && '' != WP_SITEURL ) { + $url = WP_SITEURL; + } else { + $abspath_fix = str_replace( '\\', '/', ABSPATH ); + $script_filename_dir = dirname( $_SERVER['SCRIPT_FILENAME'] ); + + // The request is for the admin + if ( strpos( $_SERVER['REQUEST_URI'], 'wp-admin' ) !== false || strpos( $_SERVER['REQUEST_URI'], 'wp-login.php' ) !== false ) { + $path = preg_replace( '#/(wp-admin/.*|wp-login.php)#i', '', $_SERVER['REQUEST_URI'] ); + + // The request is for a file in ABSPATH + } elseif ( $script_filename_dir . '/' == $abspath_fix ) { + // Strip off any file/query params in the path + $path = preg_replace( '#/[^/]*$#i', '', $_SERVER['PHP_SELF'] ); + + } else { + if ( false !== strpos( $_SERVER['SCRIPT_FILENAME'], $abspath_fix ) ) { + // Request is hitting a file inside ABSPATH + $directory = str_replace( ABSPATH, '', $script_filename_dir ); + // Strip off the sub directory, and any file/query paramss + $path = preg_replace( '#/' . preg_quote( $directory, '#' ) . '/[^/]*$#i', '' , $_SERVER['REQUEST_URI'] ); + } elseif ( false !== strpos( $abspath_fix, $script_filename_dir ) ) { + // Request is hitting a file above ABSPATH + $subdirectory = substr( $abspath_fix, strpos( $abspath_fix, $script_filename_dir ) + strlen( $script_filename_dir ) ); + // Strip off any file/query params from the path, appending the sub directory to the install + $path = preg_replace( '#/[^/]*$#i', '' , $_SERVER['REQUEST_URI'] ) . $subdirectory; + } else { + $path = $_SERVER['REQUEST_URI']; + } + } + + $schema = is_ssl() ? 'https://' : 'http://'; // set_url_scheme() is not defined yet + $url = $schema . $_SERVER['HTTP_HOST'] . $path; + } + + return rtrim($url, '/'); +} + +/** + * Temporarily suspend cache additions. + * + * Stops more data being added to the cache, but still allows cache retrieval. + * This is useful for actions, such as imports, when a lot of data would otherwise + * be almost uselessly added to the cache. + * + * Suspension lasts for a single page load at most. Remember to call this + * function again if you wish to re-enable cache adds earlier. + * + * @since 3.3.0 + * + * @param bool $suspend Optional. Suspends additions if true, re-enables them if false. + * @return bool The current suspend setting + */ +function wp_suspend_cache_addition( $suspend = null ) { + static $_suspend = false; + + if ( is_bool( $suspend ) ) + $_suspend = $suspend; + + return $_suspend; +} + +/** + * Suspend cache invalidation. + * + * Turns cache invalidation on and off. Useful during imports where you don't wont to do invalidations + * every time a post is inserted. Callers must be sure that what they are doing won't lead to an inconsistent + * cache when invalidation is suspended. + * + * @since 2.7.0 + * + * @param bool $suspend Whether to suspend or enable cache invalidation + * @return bool The current suspend setting + */ +function wp_suspend_cache_invalidation($suspend = true) { + global $_wp_suspend_cache_invalidation; + + $current_suspend = $_wp_suspend_cache_invalidation; + $_wp_suspend_cache_invalidation = $suspend; + return $current_suspend; +} + +/** + * Whether a site is the main site of the current network. + * + * @since 3.0.0 + * + * @param int $site_id Optional. Site ID to test. Defaults to current site. + * @return bool True if $site_id is the main site of the network, or if not running multisite. + */ +function is_main_site( $site_id = null ) { + // This is the current network's information; 'site' is old terminology. + global $current_site; + + if ( ! is_multisite() ) + return true; + + if ( ! $site_id ) + $site_id = get_current_blog_id(); + + return (int) $site_id === (int) $current_site->blog_id; +} + +/** + * Whether a network is the main network of the multisite install. + * + * @since 3.7.0 + * + * @param int $network_id Optional. Network ID to test. Defaults to current network. + * @return bool True if $network_id is the main network, or if not running multisite. + */ +function is_main_network( $network_id = null ) { + global $wpdb; + + if ( ! is_multisite() ) + return true; + + $current_network_id = (int) get_current_site()->id; + + if ( ! $network_id ) + $network_id = $current_network_id; + $network_id = (int) $network_id; + + if ( defined( 'PRIMARY_NETWORK_ID' ) ) + return $network_id === (int) PRIMARY_NETWORK_ID; + + if ( 1 === $current_network_id ) + return $network_id === $current_network_id; + + $primary_network_id = (int) wp_cache_get( 'primary_network_id', 'site-options' ); + + if ( $primary_network_id ) + return $network_id === $primary_network_id; + + $primary_network_id = (int) $wpdb->get_var( "SELECT id FROM $wpdb->site ORDER BY id LIMIT 1" ); + wp_cache_add( 'primary_network_id', $primary_network_id, 'site-options' ); + + return $network_id === $primary_network_id; +} + +/** + * Whether global terms are enabled. + * + * + * @since 3.0.0 + * @package WordPress + * + * @return bool True if multisite and global terms enabled + */ +function global_terms_enabled() { + if ( ! is_multisite() ) + return false; + + static $global_terms = null; + if ( is_null( $global_terms ) ) { + $filter = apply_filters( 'global_terms_enabled', null ); + if ( ! is_null( $filter ) ) + $global_terms = (bool) $filter; + else + $global_terms = (bool) get_site_option( 'global_terms_enabled', false ); + } + return $global_terms; +} + +/** + * gmt_offset modification for smart timezone handling. + * + * Overrides the gmt_offset option if we have a timezone_string available. + * + * @since 2.8.0 + * + * @return float|bool + */ +function wp_timezone_override_offset() { + if ( !$timezone_string = get_option( 'timezone_string' ) ) { + return false; + } + + $timezone_object = timezone_open( $timezone_string ); + $datetime_object = date_create(); + if ( false === $timezone_object || false === $datetime_object ) { + return false; + } + return round( timezone_offset_get( $timezone_object, $datetime_object ) / HOUR_IN_SECONDS, 2 ); +} + +/** + * Sort-helper for timezones. + * + * @since 2.9.0 + * + * @param array $a + * @param array $b + * @return int + */ +function _wp_timezone_choice_usort_callback( $a, $b ) { + // Don't use translated versions of Etc + if ( 'Etc' === $a['continent'] && 'Etc' === $b['continent'] ) { + // Make the order of these more like the old dropdown + if ( 'GMT+' === substr( $a['city'], 0, 4 ) && 'GMT+' === substr( $b['city'], 0, 4 ) ) { + return -1 * ( strnatcasecmp( $a['city'], $b['city'] ) ); + } + if ( 'UTC' === $a['city'] ) { + if ( 'GMT+' === substr( $b['city'], 0, 4 ) ) { + return 1; + } + return -1; + } + if ( 'UTC' === $b['city'] ) { + if ( 'GMT+' === substr( $a['city'], 0, 4 ) ) { + return -1; + } + return 1; + } + return strnatcasecmp( $a['city'], $b['city'] ); + } + if ( $a['t_continent'] == $b['t_continent'] ) { + if ( $a['t_city'] == $b['t_city'] ) { + return strnatcasecmp( $a['t_subcity'], $b['t_subcity'] ); + } + return strnatcasecmp( $a['t_city'], $b['t_city'] ); + } else { + // Force Etc to the bottom of the list + if ( 'Etc' === $a['continent'] ) { + return 1; + } + if ( 'Etc' === $b['continent'] ) { + return -1; + } + return strnatcasecmp( $a['t_continent'], $b['t_continent'] ); + } +} + +/** + * Gives a nicely formatted list of timezone strings. + * + * @since 2.9.0 + * + * @param string $selected_zone Selected Zone + * @return string + */ +function wp_timezone_choice( $selected_zone ) { + static $mo_loaded = false; + + $continents = array( 'Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific'); + + // Load translations for continents and cities + if ( !$mo_loaded ) { + $locale = get_locale(); + $mofile = WP_LANG_DIR . '/continents-cities-' . $locale . '.mo'; + load_textdomain( 'continents-cities', $mofile ); + $mo_loaded = true; + } + + $zonen = array(); + foreach ( timezone_identifiers_list() as $zone ) { + $zone = explode( '/', $zone ); + if ( !in_array( $zone[0], $continents ) ) { + continue; + } + + // This determines what gets set and translated - we don't translate Etc/* strings here, they are done later + $exists = array( + 0 => ( isset( $zone[0] ) && $zone[0] ), + 1 => ( isset( $zone[1] ) && $zone[1] ), + 2 => ( isset( $zone[2] ) && $zone[2] ), + ); + $exists[3] = ( $exists[0] && 'Etc' !== $zone[0] ); + $exists[4] = ( $exists[1] && $exists[3] ); + $exists[5] = ( $exists[2] && $exists[3] ); + + $zonen[] = array( + 'continent' => ( $exists[0] ? $zone[0] : '' ), + 'city' => ( $exists[1] ? $zone[1] : '' ), + 'subcity' => ( $exists[2] ? $zone[2] : '' ), + 't_continent' => ( $exists[3] ? translate( str_replace( '_', ' ', $zone[0] ), 'continents-cities' ) : '' ), + 't_city' => ( $exists[4] ? translate( str_replace( '_', ' ', $zone[1] ), 'continents-cities' ) : '' ), + 't_subcity' => ( $exists[5] ? translate( str_replace( '_', ' ', $zone[2] ), 'continents-cities' ) : '' ) + ); + } + usort( $zonen, '_wp_timezone_choice_usort_callback' ); + + $structure = array(); + + if ( empty( $selected_zone ) ) { + $structure[] = ''; + } + + foreach ( $zonen as $key => $zone ) { + // Build value in an array to join later + $value = array( $zone['continent'] ); + + if ( empty( $zone['city'] ) ) { + // It's at the continent level (generally won't happen) + $display = $zone['t_continent']; + } else { + // It's inside a continent group + + // Continent optgroup + if ( !isset( $zonen[$key - 1] ) || $zonen[$key - 1]['continent'] !== $zone['continent'] ) { + $label = $zone['t_continent']; + $structure[] = ''; + } + + // Add the city to the value + $value[] = $zone['city']; + + $display = $zone['t_city']; + if ( !empty( $zone['subcity'] ) ) { + // Add the subcity to the value + $value[] = $zone['subcity']; + $display .= ' - ' . $zone['t_subcity']; + } + } + + // Build the value + $value = join( '/', $value ); + $selected = ''; + if ( $value === $selected_zone ) { + $selected = 'selected="selected" '; + } + $structure[] = '"; + + // Close continent optgroup + if ( !empty( $zone['city'] ) && ( !isset($zonen[$key + 1]) || (isset( $zonen[$key + 1] ) && $zonen[$key + 1]['continent'] !== $zone['continent']) ) ) { + $structure[] = ''; + } + } + + // Do UTC + $structure[] = ''; + $selected = ''; + if ( 'UTC' === $selected_zone ) + $selected = 'selected="selected" '; + $structure[] = ''; + $structure[] = ''; + + // Do manual UTC offsets + $structure[] = ''; + $offset_range = array (-12, -11.5, -11, -10.5, -10, -9.5, -9, -8.5, -8, -7.5, -7, -6.5, -6, -5.5, -5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5, + 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 5.75, 6, 6.5, 7, 7.5, 8, 8.5, 8.75, 9, 9.5, 10, 10.5, 11, 11.5, 12, 12.75, 13, 13.75, 14); + foreach ( $offset_range as $offset ) { + if ( 0 <= $offset ) + $offset_name = '+' . $offset; + else + $offset_name = (string) $offset; + + $offset_value = $offset_name; + $offset_name = str_replace(array('.25','.5','.75'), array(':15',':30',':45'), $offset_name); + $offset_name = 'UTC' . $offset_name; + $offset_value = 'UTC' . $offset_value; + $selected = ''; + if ( $offset_value === $selected_zone ) + $selected = 'selected="selected" '; + $structure[] = '"; + + } + $structure[] = ''; + + return join( "\n", $structure ); +} + +/** + * Strip close comment and close php tags from file headers used by WP. + * See http://core.trac.wordpress.org/ticket/8497 + * + * @since 2.8.0 + * + * @param string $str + * @return string + */ +function _cleanup_header_comment($str) { + return trim(preg_replace("/\s*(?:\*\/|\?>).*/", '', $str)); +} + +/** + * Permanently deletes posts, pages, attachments, and comments which have been in the trash for EMPTY_TRASH_DAYS. + * + * @since 2.9.0 + */ +function wp_scheduled_delete() { + global $wpdb; + + $delete_timestamp = time() - ( DAY_IN_SECONDS * EMPTY_TRASH_DAYS ); + + $posts_to_delete = $wpdb->get_results($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_wp_trash_meta_time' AND meta_value < '%d'", $delete_timestamp), ARRAY_A); + + foreach ( (array) $posts_to_delete as $post ) { + $post_id = (int) $post['post_id']; + if ( !$post_id ) + continue; + + $del_post = get_post($post_id); + + if ( !$del_post || 'trash' != $del_post->post_status ) { + delete_post_meta($post_id, '_wp_trash_meta_status'); + delete_post_meta($post_id, '_wp_trash_meta_time'); + } else { + wp_delete_post($post_id); + } + } + + $comments_to_delete = $wpdb->get_results($wpdb->prepare("SELECT comment_id FROM $wpdb->commentmeta WHERE meta_key = '_wp_trash_meta_time' AND meta_value < '%d'", $delete_timestamp), ARRAY_A); + + foreach ( (array) $comments_to_delete as $comment ) { + $comment_id = (int) $comment['comment_id']; + if ( !$comment_id ) + continue; + + $del_comment = get_comment($comment_id); + + if ( !$del_comment || 'trash' != $del_comment->comment_approved ) { + delete_comment_meta($comment_id, '_wp_trash_meta_time'); + delete_comment_meta($comment_id, '_wp_trash_meta_status'); + } else { + wp_delete_comment($comment_id); + } + } +} + +/** + * Retrieve metadata from a file. + * + * Searches for metadata in the first 8kiB of a file, such as a plugin or theme. + * Each piece of metadata must be on its own line. Fields can not span multiple + * lines, the value will get cut at the end of the first line. + * + * If the file data is not within that first 8kiB, then the author should correct + * their plugin file and move the data headers to the top. + * + * @see http://codex.wordpress.org/File_Header + * + * @since 2.9.0 + * @param string $file Path to the file + * @param array $default_headers List of headers, in the format array('HeaderKey' => 'Header Name') + * @param string $context If specified adds filter hook "extra_{$context}_headers" + */ +function get_file_data( $file, $default_headers, $context = '' ) { + // We don't need to write to the file, so just open for reading. + $fp = fopen( $file, 'r' ); + + // Pull only the first 8kiB of the file in. + $file_data = fread( $fp, 8192 ); + + // PHP will close file handle, but we are good citizens. + fclose( $fp ); + + // Make sure we catch CR-only line endings. + $file_data = str_replace( "\r", "\n", $file_data ); + + if ( $context && $extra_headers = apply_filters( "extra_{$context}_headers", array() ) ) { + $extra_headers = array_combine( $extra_headers, $extra_headers ); // keys equal values + $all_headers = array_merge( $extra_headers, (array) $default_headers ); + } else { + $all_headers = $default_headers; + } + + foreach ( $all_headers as $field => $regex ) { + if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, $match ) && $match[1] ) + $all_headers[ $field ] = _cleanup_header_comment( $match[1] ); + else + $all_headers[ $field ] = ''; + } + + return $all_headers; +} + +/** + * Returns true. + * + * Useful for returning true to filters easily. + * + * @since 3.0.0 + * @see __return_false() + * @return bool true + */ +function __return_true() { + return true; +} + +/** + * Returns false. + * + * Useful for returning false to filters easily. + * + * @since 3.0.0 + * @see __return_true() + * @return bool false + */ +function __return_false() { + return false; +} + +/** + * Returns 0. + * + * Useful for returning 0 to filters easily. + * + * @since 3.0.0 + * @return int 0 + */ +function __return_zero() { + return 0; +} + +/** + * Returns an empty array. + * + * Useful for returning an empty array to filters easily. + * + * @since 3.0.0 + * @return array Empty array + */ +function __return_empty_array() { + return array(); +} + +/** + * Returns null. + * + * Useful for returning null to filters easily. + * + * @since 3.4.0 + * @return null + */ +function __return_null() { + return null; +} + +/** + * Returns an empty string. + * + * Useful for returning an empty string to filters easily. + * + * @since 3.7.0 + * @see __return_null() + * @return string Empty string + */ +function __return_empty_string() { + return ''; +} + +/** + * Send a HTTP header to disable content type sniffing in browsers which support it. + * + * @link http://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx + * @link http://src.chromium.org/viewvc/chrome?view=rev&revision=6985 + * + * @since 3.0.0 + * @return none + */ +function send_nosniff_header() { + @header( 'X-Content-Type-Options: nosniff' ); +} + +/** + * Returns a MySQL expression for selecting the week number based on the start_of_week option. + * + * @internal + * @since 3.0.0 + * @param string $column + * @return string + */ +function _wp_mysql_week( $column ) { + switch ( $start_of_week = (int) get_option( 'start_of_week' ) ) { + default : + case 0 : + return "WEEK( $column, 0 )"; + case 1 : + return "WEEK( $column, 1 )"; + case 2 : + case 3 : + case 4 : + case 5 : + case 6 : + return "WEEK( DATE_SUB( $column, INTERVAL $start_of_week DAY ), 0 )"; + } +} + +/** + * Finds hierarchy loops using a callback function that maps object IDs to parent IDs. + * + * @since 3.1.0 + * @access private + * + * @param callback $callback function that accepts ( ID, $callback_args ) and outputs parent_ID + * @param int $start The ID to start the loop check at + * @param int $start_parent the parent_ID of $start to use instead of calling $callback( $start ). Use null to always use $callback + * @param array $callback_args optional additional arguments to send to $callback + * @return array IDs of all members of loop + */ +function wp_find_hierarchy_loop( $callback, $start, $start_parent, $callback_args = array() ) { + $override = is_null( $start_parent ) ? array() : array( $start => $start_parent ); + + if ( !$arbitrary_loop_member = wp_find_hierarchy_loop_tortoise_hare( $callback, $start, $override, $callback_args ) ) + return array(); + + return wp_find_hierarchy_loop_tortoise_hare( $callback, $arbitrary_loop_member, $override, $callback_args, true ); +} + +/** + * Uses the "The Tortoise and the Hare" algorithm to detect loops. + * + * For every step of the algorithm, the hare takes two steps and the tortoise one. + * If the hare ever laps the tortoise, there must be a loop. + * + * @since 3.1.0 + * @access private + * + * @param callback $callback function that accepts ( ID, callback_arg, ... ) and outputs parent_ID + * @param int $start The ID to start the loop check at + * @param array $override an array of ( ID => parent_ID, ... ) to use instead of $callback + * @param array $callback_args optional additional arguments to send to $callback + * @param bool $_return_loop Return loop members or just detect presence of loop? + * Only set to true if you already know the given $start is part of a loop + * (otherwise the returned array might include branches) + * @return mixed scalar ID of some arbitrary member of the loop, or array of IDs of all members of loop if $_return_loop + */ +function wp_find_hierarchy_loop_tortoise_hare( $callback, $start, $override = array(), $callback_args = array(), $_return_loop = false ) { + $tortoise = $hare = $evanescent_hare = $start; + $return = array(); + + // Set evanescent_hare to one past hare + // Increment hare two steps + while ( + $tortoise + && + ( $evanescent_hare = isset( $override[$hare] ) ? $override[$hare] : call_user_func_array( $callback, array_merge( array( $hare ), $callback_args ) ) ) + && + ( $hare = isset( $override[$evanescent_hare] ) ? $override[$evanescent_hare] : call_user_func_array( $callback, array_merge( array( $evanescent_hare ), $callback_args ) ) ) + ) { + if ( $_return_loop ) + $return[$tortoise] = $return[$evanescent_hare] = $return[$hare] = true; + + // tortoise got lapped - must be a loop + if ( $tortoise == $evanescent_hare || $tortoise == $hare ) + return $_return_loop ? $return : $tortoise; + + // Increment tortoise by one step + $tortoise = isset( $override[$tortoise] ) ? $override[$tortoise] : call_user_func_array( $callback, array_merge( array( $tortoise ), $callback_args ) ); + } + + return false; +} + +/** + * Send a HTTP header to limit rendering of pages to same origin iframes. + * + * @link https://developer.mozilla.org/en/the_x-frame-options_response_header + * + * @since 3.1.3 + * @return none + */ +function send_frame_options_header() { + @header( 'X-Frame-Options: SAMEORIGIN' ); +} + +/** + * Retrieve a list of protocols to allow in HTML attributes. + * + * @since 3.3.0 + * @see wp_kses() + * @see esc_url() + * + * @return array Array of allowed protocols + */ +function wp_allowed_protocols() { + static $protocols; + + if ( empty( $protocols ) ) { + $protocols = array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp' ); + $protocols = apply_filters( 'kses_allowed_protocols', $protocols ); + } + + return $protocols; +} + +/** + * Return a comma separated string of functions that have been called to get to the current point in code. + * + * @link http://core.trac.wordpress.org/ticket/19589 + * @since 3.4.0 + * + * @param string $ignore_class A class to ignore all function calls within - useful when you want to just give info about the callee + * @param int $skip_frames A number of stack frames to skip - useful for unwinding back to the source of the issue + * @param bool $pretty Whether or not you want a comma separated string or raw array returned + * @return string|array Either a string containing a reversed comma separated trace or an array of individual calls. + */ +function wp_debug_backtrace_summary( $ignore_class = null, $skip_frames = 0, $pretty = true ) { + if ( version_compare( PHP_VERSION, '5.2.5', '>=' ) ) + $trace = debug_backtrace( false ); + else + $trace = debug_backtrace(); + + $caller = array(); + $check_class = ! is_null( $ignore_class ); + $skip_frames++; // skip this function + + foreach ( $trace as $call ) { + if ( $skip_frames > 0 ) { + $skip_frames--; + } elseif ( isset( $call['class'] ) ) { + if ( $check_class && $ignore_class == $call['class'] ) + continue; // Filter out calls + + $caller[] = "{$call['class']}{$call['type']}{$call['function']}"; + } else { + if ( in_array( $call['function'], array( 'do_action', 'apply_filters' ) ) ) { + $caller[] = "{$call['function']}('{$call['args'][0]}')"; + } elseif ( in_array( $call['function'], array( 'include', 'include_once', 'require', 'require_once' ) ) ) { + $caller[] = $call['function'] . "('" . str_replace( array( WP_CONTENT_DIR, ABSPATH ) , '', $call['args'][0] ) . "')"; + } else { + $caller[] = $call['function']; + } + } + } + if ( $pretty ) + return join( ', ', array_reverse( $caller ) ); + else + return $caller; +} + +/** + * Retrieve ids that are not already present in the cache + * + * @since 3.4.0 + * + * @param array $object_ids ID list + * @param string $cache_key The cache bucket to check against + * + * @return array + */ +function _get_non_cached_ids( $object_ids, $cache_key ) { + $clean = array(); + foreach ( $object_ids as $id ) { + $id = (int) $id; + if ( !wp_cache_get( $id, $cache_key ) ) { + $clean[] = $id; + } + } + + return $clean; +} + +/** + * Test if the current device has the capability to upload files. + * + * @since 3.4.0 + * @access private + * + * @return bool true|false + */ +function _device_can_upload() { + if ( ! wp_is_mobile() ) + return true; + + $ua = $_SERVER['HTTP_USER_AGENT']; + + if ( strpos($ua, 'iPhone') !== false + || strpos($ua, 'iPad') !== false + || strpos($ua, 'iPod') !== false ) { + return preg_match( '#OS ([\d_]+) like Mac OS X#', $ua, $version ) && version_compare( $version[1], '6', '>=' ); + } + + return true; +} + +/** + * Test if a given path is a stream URL + * + * @param string $path The resource path or URL + * @return bool True if the path is a stream URL + */ +function wp_is_stream( $path ) { + $wrappers = stream_get_wrappers(); + $wrappers_re = '(' . join('|', $wrappers) . ')'; + + return preg_match( "!^$wrappers_re://!", $path ) === 1; +} + +/** + * Test if the supplied date is valid for the Gregorian calendar + * + * @since 3.5.0 + * + * @return bool true|false + */ +function wp_checkdate( $month, $day, $year, $source_date ) { + return apply_filters( 'wp_checkdate', checkdate( $month, $day, $year ), $source_date ); +} + +/** + * Load the auth check for monitoring whether the user is still logged in. + * + * Can be disabled with remove_action( 'admin_enqueue_scripts', 'wp_auth_check_load' ); + * + * This is disabled for certain screens where a login screen could cause an + * inconvenient interruption. A filter called wp_auth_check_load can be used + * for fine-grained control. + * + * @since 3.6.0 + */ +function wp_auth_check_load() { + if ( ! is_admin() && ! is_user_logged_in() ) + return; + + if ( defined( 'IFRAME_REQUEST' ) ) + return; + + $screen = get_current_screen(); + $hidden = array( 'update', 'update-network', 'update-core', 'update-core-network', 'upgrade', 'upgrade-network', 'network' ); + $show = ! in_array( $screen->id, $hidden ); + + if ( apply_filters( 'wp_auth_check_load', $show, $screen ) ) { + wp_enqueue_style( 'wp-auth-check' ); + wp_enqueue_script( 'wp-auth-check' ); + + add_action( 'admin_print_footer_scripts', 'wp_auth_check_html', 5 ); + add_action( 'wp_print_footer_scripts', 'wp_auth_check_html', 5 ); + } +} + +/** + * Output the HTML that shows the wp-login dialog when the user is no longer logged in. + * + * @since 3.6.0 + */ +function wp_auth_check_html() { + $login_url = wp_login_url(); + $current_domain = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST']; + $same_domain = ( strpos( $login_url, $current_domain ) === 0 ); + + if ( $same_domain && force_ssl_login() && ! force_ssl_admin() ) + $same_domain = false; + + // Let plugins change this if they know better. + $same_domain = apply_filters( 'wp_auth_check_same_domain', $same_domain ); + $wrap_class = $same_domain ? 'hidden' : 'hidden fallback'; + + ?> +
                  +
                  +
                  +
                  + +
                  + +
                  +

                  +

                  +

                  +
                  +
                  +
                  + [\s\S]*<\/%1$s>|\s*\/>)', tag_escape( $tag ) ); +} + +/** + * Return a canonical form of the provided charset appropriate for passing to PHP + * functions such as htmlspecialchars() and charset html attributes. + * + * @link http://core.trac.wordpress.org/ticket/23688 + * @since 3.6.0 + * + * @param string A charset name + * @return string The canonical form of the charset + */ +function _canonical_charset( $charset ) { + if ( 'UTF-8' === $charset || 'utf-8' === $charset || 'utf8' === $charset || + 'UTF8' === $charset ) + return 'UTF-8'; + + if ( 'ISO-8859-1' === $charset || 'iso-8859-1' === $charset || + 'iso8859-1' === $charset || 'ISO8859-1' === $charset ) + return 'ISO-8859-1'; + + return $charset; +} + +/** + * Sets the mbstring internal encoding to a binary safe encoding whne func_overload is enabled. + * + * When mbstring.func_overload is in use for multi-byte encodings, the results from strlen() and + * similar functions respect the utf8 characters, causing binary data to return incorrect lengths. + * + * This function overrides the mbstring encoding to a binary-safe encoding, and resets it to the + * users expected encoding afterwards through the `reset_mbstring_encoding` function. + * + * It is safe to recursively call this function, however each `mbstring_binary_safe_encoding()` + * call must be followed up with an equal number of `reset_mbstring_encoding()` calls. + * + * @see reset_mbstring_encoding() + * + * @since 3.7.0 + * + * @param bool $reset Whether to reset the encoding back to a previously-set encoding. + */ +function mbstring_binary_safe_encoding( $reset = false ) { + static $encodings = array(); + static $overloaded = null; + + if ( is_null( $overloaded ) ) + $overloaded = function_exists( 'mb_internal_encoding' ) && ( ini_get( 'mbstring.func_overload' ) & 2 ); + + if ( false === $overloaded ) + return; + + if ( ! $reset ) { + $encoding = mb_internal_encoding(); + array_push( $encodings, $encoding ); + mb_internal_encoding( 'ISO-8859-1' ); + } + + if ( $reset && $encodings ) { + $encoding = array_pop( $encodings ); + mb_internal_encoding( $encoding ); + } +} + +/** + * Resets the mbstring internal encoding to a users previously set encoding. + * + * @see mbstring_binary_safe_encoding() + * + * @since 3.7.0 + */ +function reset_mbstring_encoding() { + mbstring_binary_safe_encoding( true ); +} diff --git a/src/wp-includes/functions.wp-scripts.php b/src/wp-includes/functions.wp-scripts.php new file mode 100644 index 0000000..ea719df --- /dev/null +++ b/src/wp-includes/functions.wp-scripts.php @@ -0,0 +1,258 @@ +wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + + if ( !$handles ) + return array(); // No need to instantiate if nothing is there. + else + $wp_scripts = new WP_Scripts(); + } + + return $wp_scripts->do_items( $handles ); +} + +/** + * Register a new script. + * + * Registers a script to be linked later using the wp_enqueue_script() function. + * + * @see WP_Dependencies::add(), WP_Dependencies::add_data() + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 2.6.0 + * + * @param string $handle Name of the script. Should be unique. + * @param string $src Path to the script from the WordPress root directory. Example: '/js/myscript.js'. + * @param array $deps Optional. An array of registered script handles this script depends on. Set to false if there + * are no dependencies. Default empty array. + * @param string|bool $ver Optional. String specifying script version number, if it has one, which is concatenated + * to end of path as a query string. If no version is specified or set to false, a version + * number is automatically added equal to current installed WordPress version. + * If set to null, no version is added. Default 'false'. Accepts 'false', 'null', or 'string'. + * @param bool $in_footer Optional. Whether to enqueue the script before or before . + * Default 'false'. Accepts 'false' or 'true'. + */ +function wp_register_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false ) { + global $wp_scripts; + if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_scripts = new WP_Scripts(); + } + + $wp_scripts->add( $handle, $src, $deps, $ver ); + if ( $in_footer ) + $wp_scripts->add_data( $handle, 'group', 1 ); +} + +/** + * Localize a script. + * + * Works only if the script has already been added. + * + * Accepts an associative array $l10n and creates a JavaScript object: + * + * "$object_name" = { + * key: value, + * key: value, + * ... + * } + * + * + * @see WP_Dependencies::localize() + * @link http://core.trac.wordpress.org/ticket/11520 + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 2.6.0 + * + * @param string $handle Script handle the data will be attached to. + * @param string $object_name Name for the JavaScript object. Passed directly, so it should be qualified JS variable. + * Example: '/[a-zA-Z0-9_]+/'. + * @param array $l10n The data itself. The data can be either a single or multi-dimensional array. + * @return bool True if the script was successfully localized, false otherwise. + */ +function wp_localize_script( $handle, $object_name, $l10n ) { + global $wp_scripts; + if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + + return false; + } + + return $wp_scripts->localize( $handle, $object_name, $l10n ); +} + +/** + * Remove a registered script. + * + * Note: there are intentional safeguards in place to prevent critical admin scripts, + * such as jQuery core, from being unregistered. + * + * @see WP_Dependencies::remove() + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 2.6.0 + * + * @param string $handle Name of the script to be removed. + */ +function wp_deregister_script( $handle ) { + global $wp_scripts; + if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_scripts = new WP_Scripts(); + } + + /** + * Do not allow accidental or negligent de-registering of critical scripts in the admin. + * Show minimal remorse if the correct hook is used. + */ + $current_filter = current_filter(); + if ( ( is_admin() && 'admin_enqueue_scripts' !== $current_filter ) || + ( 'wp-login.php' === $GLOBALS['pagenow'] && 'login_enqueue_scripts' !== $current_filter ) + ) { + $no = array( + 'jquery', 'jquery-core', 'jquery-migrate', 'jquery-ui-core', 'jquery-ui-accordion', + 'jquery-ui-autocomplete', 'jquery-ui-button', 'jquery-ui-datepicker', 'jquery-ui-dialog', + 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-menu', 'jquery-ui-mouse', + 'jquery-ui-position', 'jquery-ui-progressbar', 'jquery-ui-resizable', 'jquery-ui-selectable', + 'jquery-ui-slider', 'jquery-ui-sortable', 'jquery-ui-spinner', 'jquery-ui-tabs', + 'jquery-ui-tooltip', 'jquery-ui-widget', 'underscore', 'backbone', + ); + + if ( in_array( $handle, $no ) ) { + $message = sprintf( __( 'Do not deregister the %1$s script in the administration area. To target the frontend theme, use the %2$s hook.' ), + "$handle", 'wp_enqueue_scripts' ); + _doing_it_wrong( __FUNCTION__, $message, '3.6' ); + return; + } + } + + $wp_scripts->remove( $handle ); +} + +/** + * Enqueue a script. + * + * Registers the script if $src provided (does NOT overwrite), and enqueues it. + * + * @see WP_Dependencies::add(), WP_Dependencies::add_data(), WP_Dependencies::enqueue() + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 2.6.0 + + * @param string $handle Name of the script. + * @param string|bool $src Path to the script from the root directory of WordPress. Example: '/js/myscript.js'. + * @param array $deps An array of registered handles this script depends on. Default empty array. + * @param string|bool $ver Optional. String specifying the script version number, if it has one. This parameter + * is used to ensure that the correct version is sent to the client regardless of caching, + * and so should be included if a version number is available and makes sense for the script. + * @param bool $in_footer Optional. Whether to enqueue the script before or before . + * Default 'false'. Accepts 'false' or 'true'. + */ +function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false ) { + global $wp_scripts; + if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_scripts = new WP_Scripts(); + } + + if ( $src ) { + $_handle = explode('?', $handle); + $wp_scripts->add( $_handle[0], $src, $deps, $ver ); + if ( $in_footer ) + $wp_scripts->add_data( $_handle[0], 'group', 1 ); + } + $wp_scripts->enqueue( $handle ); +} + +/** + * Remove a previously enqueued script. + * + * @see WP_Dependencies::dequeue() + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 3.1.0 + * + * @param string $handle Name of the script to be removed. + */ +function wp_dequeue_script( $handle ) { + global $wp_scripts; + if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_scripts = new WP_Scripts(); + } + + $wp_scripts->dequeue( $handle ); +} + +/** + * Check whether a script has been added to the queue. + * + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 2.8.0 + * @since 3.5.0 'enqueued' added as an alias of the 'queue' list. + * + * @param string $handle Name of the script. + * @param string $list Optional. Status of the script to check. Default 'enqueued'. + * Accepts 'enqueued', 'registered', 'queue', 'to_do', and 'done'. + * @return bool Whether the script script is queued. + */ +function wp_script_is( $handle, $list = 'enqueued' ) { + global $wp_scripts; + if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_scripts = new WP_Scripts(); + } + + return (bool) $wp_scripts->query( $handle, $list ); +} diff --git a/src/wp-includes/functions.wp-styles.php b/src/wp-includes/functions.wp-styles.php new file mode 100644 index 0000000..a582f5c --- /dev/null +++ b/src/wp-includes/functions.wp-styles.php @@ -0,0 +1,245 @@ +wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + + if ( !$handles ) + return array(); // No need to instantiate if nothing is there. + else + $wp_styles = new WP_Styles(); + } + + return $wp_styles->do_items( $handles ); +} + +/** + * Add extra CSS styles to a registered stylesheet. + * + * Styles will only be added if the stylesheet in already in the queue. + * Accepts a string $data containing the CSS. If two or more CSS code blocks + * are added to the same stylesheet $handle, they will be printed in the order + * they were added, i.e. the latter added styles can redeclare the previous. + * + * @see WP_Styles::add_inline_style() + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. + * + * @since 3.3.0 + * + * @param string $handle Name of the stylesheet to add the extra styles to. Must be lowercase. + * @param string $data String containing the CSS styles to be added. + * @return bool True on success, false on failure. + */ +function wp_add_inline_style( $handle, $data ) { + global $wp_styles; + if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_styles = new WP_Styles(); + } + + if ( false !== stripos( $data, '' ) ) { + _doing_it_wrong( __FUNCTION__, 'Do not pass style tags to wp_add_inline_style().', '3.7' ); + $data = trim( preg_replace( '#]*>(.*)#is', '$1', $data ) ); + } + + return $wp_styles->add_inline_style( $handle, $data ); +} + +/** + * Register a CSS stylesheet. + * + * @see WP_Dependencies::add() + * @link http://www.w3.org/TR/CSS2/media.html#media-types List of CSS media types. + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. + * + * @since 2.6.0 + * + * @param string $handle Name of the stylesheet. + * @param string|bool $src Path to the stylesheet from the WordPress root directory. Example: '/css/mystyle.css'. + * @param array $deps An array of registered style handles this stylesheet depends on. Default empty array. + * @param string|bool $ver String specifying the stylesheet version number. Used to ensure that the correct version + * is sent to the client regardless of caching. Default 'false'. Accepts 'false', 'null', or 'string'. + * @param string $media Optional. The media for which this stylesheet has been defined. + * Default 'all'. Accepts 'all', 'aural', 'braille', 'handheld', 'projection', 'print', + * 'screen', 'tty', or 'tv'. + */ +function wp_register_style( $handle, $src, $deps = array(), $ver = false, $media = 'all' ) { + global $wp_styles; + if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_styles = new WP_Styles(); + } + + $wp_styles->add( $handle, $src, $deps, $ver, $media ); +} + +/** + * Remove a registered stylesheet. + * + * @see WP_Dependencies::remove() + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. + * + * @since 2.1.0 + * + * @param string $handle Name of the stylesheet to be removed. + */ +function wp_deregister_style( $handle ) { + global $wp_styles; + if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_styles = new WP_Styles(); + } + + $wp_styles->remove( $handle ); +} + +/** + * Enqueue a CSS stylesheet. + * + * Registers the style if source provided (does NOT overwrite) and enqueues. + * + * @see WP_Dependencies::add(), WP_Dependencies::enqueue() + * @link http://www.w3.org/TR/CSS2/media.html#media-types List of CSS media types. + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. + * + * @since 2.6.0 + * + * @param string $handle Name of the stylesheet. + * @param string|bool $src Path to the stylesheet from the root directory of WordPress. Example: '/css/mystyle.css'. + * @param array $deps An array of registered style handles this stylesheet depends on. Default empty array. + * @param string|bool $ver String specifying the stylesheet version number, if it has one. This parameter is used + * to ensure that the correct version is sent to the client regardless of caching, and so + * should be included if a version number is available and makes sense for the stylesheet. + * @param string $media Optional. The media for which this stylesheet has been defined. + * Default 'all'. Accepts 'all', 'aural', 'braille', 'handheld', 'projection', 'print', + * 'screen', 'tty', or 'tv'. + */ +function wp_enqueue_style( $handle, $src = false, $deps = array(), $ver = false, $media = 'all' ) { + global $wp_styles; + if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_styles = new WP_Styles(); + } + + if ( $src ) { + $_handle = explode('?', $handle); + $wp_styles->add( $_handle[0], $src, $deps, $ver, $media ); + } + $wp_styles->enqueue( $handle ); +} + +/** + * Remove a previously enqueued CSS stylesheet. + * + * @see WP_Dependencies::dequeue() + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. + * + * @since 3.1.0 + * + * @param string $handle Name of the stylesheet to be removed. + */ +function wp_dequeue_style( $handle ) { + global $wp_styles; + if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_styles = new WP_Styles(); + } + + $wp_styles->dequeue( $handle ); +} + +/** + * Check whether a CSS stylesheet has been added to the queue. + * + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. + * + * @since 2.8.0 + * + * @param string $handle Name of the stylesheet. + * @param string $list Optional. Status of the stylesheet to check. Default 'enqueued'. + * Accepts 'enqueued', 'registered', 'queue', 'to_do', and 'done'. + * @return bool Whether style is queued. + */ +function wp_style_is( $handle, $list = 'enqueued' ) { + global $wp_styles; + if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_styles = new WP_Styles(); + } + + return (bool) $wp_styles->query( $handle, $list ); +} + +/** + * Add metadata to a CSS stylesheet. + * + * Works only if the stylesheet has already been added. + * + * Possible values for $key and $value: + * 'conditional' string Comments for IE 6, lte IE 7 etc. + * 'rtl' bool|string To declare an RTL stylesheet. + * 'suffix' string Optional suffix, used in combination with RTL. + * 'alt' bool For rel="alternate stylesheet". + * 'title' string For preferred/alternate stylesheets. + * + * @see WP_Dependency::add_data() + * + * @since 3.6.0 + * + * @param string $handle Name of the stylesheet. + * @param string $key Name of data point for which we're storing a value. + * Accepts 'conditional', 'rtl' and 'suffix', 'alt' and 'title'. + * @param mixed $data String containing the CSS data to be added. + * @return bool True on success, false on failure. + */ +function wp_style_add_data( $handle, $key, $value ) { + global $wp_styles; + return $wp_styles->add_data( $handle, $key, $value ); +} diff --git a/src/wp-includes/general-template.php b/src/wp-includes/general-template.php new file mode 100644 index 0000000..7a83579 --- /dev/null +++ b/src/wp-includes/general-template.php @@ -0,0 +1,2437 @@ + + + + '; + } else { + $form = ''; + } + } + + $result = apply_filters( 'get_search_form', $form ); + if ( null === $result ) + $result = $form; + + if ( $echo ) + echo $result; + else + return $result; +} + +/** + * Display the Log In/Out link. + * + * Displays a link, which allows users to navigate to the Log In page to log in + * or log out depending on whether they are currently logged in. + * + * @since 1.5.0 + * @uses apply_filters() Calls 'loginout' hook on HTML link content. + * + * @param string $redirect Optional path to redirect to on login/logout. + * @param boolean $echo Default to echo and not return the link. + * @return string|null String when retrieving, null when displaying. + */ +function wp_loginout($redirect = '', $echo = true) { + if ( ! is_user_logged_in() ) + $link = '' . __('Log in') . ''; + else + $link = '' . __('Log out') . ''; + + if ( $echo ) + echo apply_filters('loginout', $link); + else + return apply_filters('loginout', $link); +} + +/** + * Returns the Log Out URL. + * + * Returns the URL that allows the user to log out of the site. + * + * @since 2.7.0 + * @uses wp_nonce_url() To protect against CSRF. + * @uses site_url() To generate the log out URL. + * @uses apply_filters() calls 'logout_url' hook on final logout URL. + * + * @param string $redirect Path to redirect to on logout. + * @return string A log out URL. + */ +function wp_logout_url($redirect = '') { + $args = array( 'action' => 'logout' ); + if ( !empty($redirect) ) { + $args['redirect_to'] = urlencode( $redirect ); + } + + $logout_url = add_query_arg($args, site_url('wp-login.php', 'login')); + $logout_url = wp_nonce_url( $logout_url, 'log-out' ); + + return apply_filters('logout_url', $logout_url, $redirect); +} + +/** + * Returns the Log In URL. + * + * Returns the URL that allows the user to log in to the site. + * + * @since 2.7.0 + * @uses site_url() To generate the log in URL. + * @uses apply_filters() calls 'login_url' hook on final login URL. + * + * @param string $redirect Path to redirect to on login. + * @param bool $force_reauth Whether to force reauthorization, even if a cookie is present. Default is false. + * @return string A log in URL. + */ +function wp_login_url($redirect = '', $force_reauth = false) { + $login_url = site_url('wp-login.php', 'login'); + + if ( !empty($redirect) ) + $login_url = add_query_arg('redirect_to', urlencode($redirect), $login_url); + + if ( $force_reauth ) + $login_url = add_query_arg('reauth', '1', $login_url); + + return apply_filters('login_url', $login_url, $redirect); +} + +/** + * Returns the user registration URL. + * + * Returns the URL that allows the user to register on the site. + * + * @since 3.6.0 + * @uses site_url() To generate the registration URL. + * @uses apply_filters() calls 'register_url' hook on final URL. + * + * @return string + */ +function wp_registration_url() { + return apply_filters( 'register_url', site_url( 'wp-login.php?action=register', 'login' ) ); +} + +/** + * Provides a simple login form for use anywhere within WordPress. By default, it echoes + * the HTML immediately. Pass array('echo'=>false) to return the string instead. + * + * @since 3.0.0 + * @param array $args Configuration options to modify the form output. + * @return string|null String when retrieving, null when displaying. + */ +function wp_login_form( $args = array() ) { + $defaults = array( + 'echo' => true, + 'redirect' => ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], // Default redirect is back to the current page + 'form_id' => 'loginform', + 'label_username' => __( 'Username' ), + 'label_password' => __( 'Password' ), + 'label_remember' => __( 'Remember Me' ), + 'label_log_in' => __( 'Log In' ), + 'id_username' => 'user_login', + 'id_password' => 'user_pass', + 'id_remember' => 'rememberme', + 'id_submit' => 'wp-submit', + 'remember' => true, + 'value_username' => '', + 'value_remember' => false, // Set this to true to default the "Remember me" checkbox to checked + ); + $args = wp_parse_args( $args, apply_filters( 'login_form_defaults', $defaults ) ); + + $form = ' +
                  + ' . apply_filters( 'login_form_top', '', $args ) . ' + + + ' . apply_filters( 'login_form_middle', '', $args ) . ' + ' . ( $args['remember'] ? '' : '' ) . ' + + ' . apply_filters( 'login_form_bottom', '', $args ) . ' +
                  '; + + if ( $args['echo'] ) + echo $form; + else + return $form; +} + +/** + * Returns the Lost Password URL. + * + * Returns the URL that allows the user to retrieve the lost password + * + * @since 2.8.0 + * @uses site_url() To generate the lost password URL + * @uses apply_filters() calls 'lostpassword_url' hook on the lostpassword url + * + * @param string $redirect Path to redirect to on login. + * @return string Lost password URL. + */ +function wp_lostpassword_url( $redirect = '' ) { + $args = array( 'action' => 'lostpassword' ); + if ( !empty($redirect) ) { + $args['redirect_to'] = $redirect; + } + + $lostpassword_url = add_query_arg( $args, network_site_url('wp-login.php', 'login') ); + return apply_filters( 'lostpassword_url', $lostpassword_url, $redirect ); +} + +/** + * Display the Registration or Admin link. + * + * Display a link which allows the user to navigate to the registration page if + * not logged in and registration is enabled or to the dashboard if logged in. + * + * @since 1.5.0 + * @uses apply_filters() Calls 'register' hook on register / admin link content. + * + * @param string $before Text to output before the link (defaults to
                19. ). + * @param string $after Text to output after the link (defaults to
                20. ). + * @param boolean $echo Default to echo and not return the link. + * @return string|null String when retrieving, null when displaying. + */ +function wp_register( $before = '
                21. ', $after = '
                22. ', $echo = true ) { + + if ( ! is_user_logged_in() ) { + if ( get_option('users_can_register') ) + $link = $before . '' . __('Register') . '' . $after; + else + $link = ''; + } else { + $link = $before . '' . __('Site Admin') . '' . $after; + } + + if ( $echo ) + echo apply_filters('register', $link); + else + return apply_filters('register', $link); +} + +/** + * Theme container function for the 'wp_meta' action. + * + * The 'wp_meta' action can have several purposes, depending on how you use it, + * but one purpose might have been to allow for theme switching. + * + * @since 1.5.0 + * @link http://trac.wordpress.org/ticket/1458 Explanation of 'wp_meta' action. + * @uses do_action() Calls 'wp_meta' hook. + */ +function wp_meta() { + do_action('wp_meta'); +} + +/** + * Display information about the blog. + * + * @see get_bloginfo() For possible values for the parameter. + * @since 0.71 + * + * @param string $show What to display. + */ +function bloginfo( $show='' ) { + echo get_bloginfo( $show, 'display' ); +} + +/** + * Retrieve information about the blog. + * + * Some show parameter values are deprecated and will be removed in future + * versions. These options will trigger the _deprecated_argument() function. + * The deprecated blog info options are listed in the function contents. + * + * The possible values for the 'show' parameter are listed below. + *
                    + *
                  1. url - Blog URI to homepage.
                  2. + *
                  3. wpurl - Blog URI path to WordPress.
                  4. + *
                  5. description - Secondary title
                  6. + *
                  + * + * The feed URL options can be retrieved from 'rdf_url' (RSS 0.91), + * 'rss_url' (RSS 1.0), 'rss2_url' (RSS 2.0), or 'atom_url' (Atom feed). The + * comment feeds can be retrieved from the 'comments_atom_url' (Atom comment + * feed) or 'comments_rss2_url' (RSS 2.0 comment feed). + * + * @since 0.71 + * + * @param string $show Blog info to retrieve. + * @param string $filter How to filter what is retrieved. + * @return string Mostly string values, might be empty. + */ +function get_bloginfo( $show = '', $filter = 'raw' ) { + + switch( $show ) { + case 'home' : // DEPRECATED + case 'siteurl' : // DEPRECATED + _deprecated_argument( __FUNCTION__, '2.2', sprintf( __('The %s option is deprecated for the family of bloginfo() functions.' ), $show ) . ' ' . sprintf( __( 'Use the %s option instead.' ), 'url' ) ); + case 'url' : + $output = home_url(); + break; + case 'wpurl' : + $output = site_url(); + break; + case 'description': + $output = get_option('blogdescription'); + break; + case 'rdf_url': + $output = get_feed_link('rdf'); + break; + case 'rss_url': + $output = get_feed_link('rss'); + break; + case 'rss2_url': + $output = get_feed_link('rss2'); + break; + case 'atom_url': + $output = get_feed_link('atom'); + break; + case 'comments_atom_url': + $output = get_feed_link('comments_atom'); + break; + case 'comments_rss2_url': + $output = get_feed_link('comments_rss2'); + break; + case 'pingback_url': + $output = site_url( 'xmlrpc.php' ); + break; + case 'stylesheet_url': + $output = get_stylesheet_uri(); + break; + case 'stylesheet_directory': + $output = get_stylesheet_directory_uri(); + break; + case 'template_directory': + case 'template_url': + $output = get_template_directory_uri(); + break; + case 'admin_email': + $output = get_option('admin_email'); + break; + case 'charset': + $output = get_option('blog_charset'); + if ('' == $output) $output = 'UTF-8'; + break; + case 'html_type' : + $output = get_option('html_type'); + break; + case 'version': + global $wp_version; + $output = $wp_version; + break; + case 'language': + $output = get_locale(); + $output = str_replace('_', '-', $output); + break; + case 'text_direction': + //_deprecated_argument( __FUNCTION__, '2.2', sprintf( __('The %s option is deprecated for the family of bloginfo() functions.' ), $show ) . ' ' . sprintf( __( 'Use the %s function instead.' ), 'is_rtl()' ) ); + if ( function_exists( 'is_rtl' ) ) { + $output = is_rtl() ? 'rtl' : 'ltr'; + } else { + $output = 'ltr'; + } + break; + case 'name': + default: + $output = get_option('blogname'); + break; + } + + $url = true; + if (strpos($show, 'url') === false && + strpos($show, 'directory') === false && + strpos($show, 'home') === false) + $url = false; + + if ( 'display' == $filter ) { + if ( $url ) + $output = apply_filters('bloginfo_url', $output, $show); + else + $output = apply_filters('bloginfo', $output, $show); + } + + return $output; +} + +/** + * Display or retrieve page title for all areas of blog. + * + * By default, the page title will display the separator before the page title, + * so that the blog title will be before the page title. This is not good for + * title display, since the blog title shows up on most tabs and not what is + * important, which is the page that the user is looking at. + * + * There are also SEO benefits to having the blog title after or to the 'right' + * or the page title. However, it is mostly common sense to have the blog title + * to the right with most browsers supporting tabs. You can achieve this by + * using the seplocation parameter and setting the value to 'right'. This change + * was introduced around 2.5.0, in case backwards compatibility of themes is + * important. + * + * @since 1.0.0 + * + * @param string $sep Optional, default is '»'. How to separate the various items within the page title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @param string $seplocation Optional. Direction to display title, 'right'. + * @return string|null String on retrieve, null when displaying. + */ +function wp_title($sep = '»', $display = true, $seplocation = '') { + global $wpdb, $wp_locale; + + $m = get_query_var('m'); + $year = get_query_var('year'); + $monthnum = get_query_var('monthnum'); + $day = get_query_var('day'); + $search = get_query_var('s'); + $title = ''; + + $t_sep = '%WP_TITILE_SEP%'; // Temporary separator, for accurate flipping, if necessary + + // If there is a post + if ( is_single() || ( is_home() && !is_front_page() ) || ( is_page() && !is_front_page() ) ) { + $title = single_post_title( '', false ); + } + + // If there's a post type archive + if ( is_post_type_archive() ) { + $post_type = get_query_var( 'post_type' ); + if ( is_array( $post_type ) ) + $post_type = reset( $post_type ); + $post_type_object = get_post_type_object( $post_type ); + if ( ! $post_type_object->has_archive ) + $title = post_type_archive_title( '', false ); + } + + // If there's a category or tag + if ( is_category() || is_tag() ) { + $title = single_term_title( '', false ); + } + + // If there's a taxonomy + if ( is_tax() ) { + $term = get_queried_object(); + if ( $term ) { + $tax = get_taxonomy( $term->taxonomy ); + $title = single_term_title( $tax->labels->name . $t_sep, false ); + } + } + + // If there's an author + if ( is_author() ) { + $author = get_queried_object(); + if ( $author ) + $title = $author->display_name; + } + + // Post type archives with has_archive should override terms. + if ( is_post_type_archive() && $post_type_object->has_archive ) + $title = post_type_archive_title( '', false ); + + // If there's a month + if ( is_archive() && !empty($m) ) { + $my_year = substr($m, 0, 4); + $my_month = $wp_locale->get_month(substr($m, 4, 2)); + $my_day = intval(substr($m, 6, 2)); + $title = $my_year . ( $my_month ? $t_sep . $my_month : '' ) . ( $my_day ? $t_sep . $my_day : '' ); + } + + // If there's a year + if ( is_archive() && !empty($year) ) { + $title = $year; + if ( !empty($monthnum) ) + $title .= $t_sep . $wp_locale->get_month($monthnum); + if ( !empty($day) ) + $title .= $t_sep . zeroise($day, 2); + } + + // If it's a search + if ( is_search() ) { + /* translators: 1: separator, 2: search phrase */ + $title = sprintf(__('Search Results %1$s %2$s'), $t_sep, strip_tags($search)); + } + + // If it's a 404 page + if ( is_404() ) { + $title = __('Page not found'); + } + + $prefix = ''; + if ( !empty($title) ) + $prefix = " $sep "; + + // Determines position of the separator and direction of the breadcrumb + if ( 'right' == $seplocation ) { // sep on right, so reverse the order + $title_array = explode( $t_sep, $title ); + $title_array = array_reverse( $title_array ); + $title = implode( " $sep ", $title_array ) . $prefix; + } else { + $title_array = explode( $t_sep, $title ); + $title = $prefix . implode( " $sep ", $title_array ); + } + + $title = apply_filters('wp_title', $title, $sep, $seplocation); + + // Send it out + if ( $display ) + echo $title; + else + return $title; + +} + +/** + * Display or retrieve page title for post. + * + * This is optimized for single.php template file for displaying the post title. + * + * It does not support placing the separator after the title, but by leaving the + * prefix parameter empty, you can set the title separator manually. The prefix + * does not automatically place a space between the prefix, so if there should + * be a space, the parameter value will need to have it at the end. + * + * @since 0.71 + * + * @param string $prefix Optional. What to display before the title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @return string|null Title when retrieving, null when displaying or failure. + */ +function single_post_title($prefix = '', $display = true) { + $_post = get_queried_object(); + + if ( !isset($_post->post_title) ) + return; + + $title = apply_filters('single_post_title', $_post->post_title, $_post); + if ( $display ) + echo $prefix . $title; + else + return $prefix . $title; +} + +/** + * Display or retrieve title for a post type archive. + * + * This is optimized for archive.php and archive-{$post_type}.php template files + * for displaying the title of the post type. + * + * @since 3.1.0 + * + * @param string $prefix Optional. What to display before the title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @return string|null Title when retrieving, null when displaying or failure. + */ +function post_type_archive_title( $prefix = '', $display = true ) { + if ( ! is_post_type_archive() ) + return; + + $post_type = get_query_var( 'post_type' ); + if ( is_array( $post_type ) ) + $post_type = reset( $post_type ); + + $post_type_obj = get_post_type_object( $post_type ); + /** + * Filter the post type archive title. + * + * @since 3.1.0 + * + * @param string $post_type_name Post type 'name' label. + * @param string $post_type Post type. + */ + $title = apply_filters( 'post_type_archive_title', $post_type_obj->labels->name, $post_type ); + + if ( $display ) + echo $prefix . $title; + else + return $prefix . $title; +} + +/** + * Display or retrieve page title for category archive. + * + * This is useful for category template file or files, because it is optimized + * for category page title and with less overhead than {@link wp_title()}. + * + * It does not support placing the separator after the title, but by leaving the + * prefix parameter empty, you can set the title separator manually. The prefix + * does not automatically place a space between the prefix, so if there should + * be a space, the parameter value will need to have it at the end. + * + * @since 0.71 + * + * @param string $prefix Optional. What to display before the title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @return string|null Title when retrieving, null when displaying or failure. + */ +function single_cat_title( $prefix = '', $display = true ) { + return single_term_title( $prefix, $display ); +} + +/** + * Display or retrieve page title for tag post archive. + * + * Useful for tag template files for displaying the tag page title. It has less + * overhead than {@link wp_title()}, because of its limited implementation. + * + * It does not support placing the separator after the title, but by leaving the + * prefix parameter empty, you can set the title separator manually. The prefix + * does not automatically place a space between the prefix, so if there should + * be a space, the parameter value will need to have it at the end. + * + * @since 2.3.0 + * + * @param string $prefix Optional. What to display before the title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @return string|null Title when retrieving, null when displaying or failure. + */ +function single_tag_title( $prefix = '', $display = true ) { + return single_term_title( $prefix, $display ); +} + +/** + * Display or retrieve page title for taxonomy term archive. + * + * Useful for taxonomy term template files for displaying the taxonomy term page title. + * It has less overhead than {@link wp_title()}, because of its limited implementation. + * + * It does not support placing the separator after the title, but by leaving the + * prefix parameter empty, you can set the title separator manually. The prefix + * does not automatically place a space between the prefix, so if there should + * be a space, the parameter value will need to have it at the end. + * + * @since 3.1.0 + * + * @param string $prefix Optional. What to display before the title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @return string|null Title when retrieving, null when displaying or failure. + */ +function single_term_title( $prefix = '', $display = true ) { + $term = get_queried_object(); + + if ( !$term ) + return; + + if ( is_category() ) + $term_name = apply_filters( 'single_cat_title', $term->name ); + elseif ( is_tag() ) + $term_name = apply_filters( 'single_tag_title', $term->name ); + elseif ( is_tax() ) + $term_name = apply_filters( 'single_term_title', $term->name ); + else + return; + + if ( empty( $term_name ) ) + return; + + if ( $display ) + echo $prefix . $term_name; + else + return $prefix . $term_name; +} + +/** + * Display or retrieve page title for post archive based on date. + * + * Useful for when the template only needs to display the month and year, if + * either are available. Optimized for just this purpose, so if it is all that + * is needed, should be better than {@link wp_title()}. + * + * It does not support placing the separator after the title, but by leaving the + * prefix parameter empty, you can set the title separator manually. The prefix + * does not automatically place a space between the prefix, so if there should + * be a space, the parameter value will need to have it at the end. + * + * @since 0.71 + * + * @param string $prefix Optional. What to display before the title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @return string|null Title when retrieving, null when displaying or failure. + */ +function single_month_title($prefix = '', $display = true ) { + global $wp_locale; + + $m = get_query_var('m'); + $year = get_query_var('year'); + $monthnum = get_query_var('monthnum'); + + if ( !empty($monthnum) && !empty($year) ) { + $my_year = $year; + $my_month = $wp_locale->get_month($monthnum); + } elseif ( !empty($m) ) { + $my_year = substr($m, 0, 4); + $my_month = $wp_locale->get_month(substr($m, 4, 2)); + } + + if ( empty($my_month) ) + return false; + + $result = $prefix . $my_month . $prefix . $my_year; + + if ( !$display ) + return $result; + echo $result; +} + +/** + * Retrieve archive link content based on predefined or custom code. + * + * The format can be one of four styles. The 'link' for head element, 'option' + * for use in the select element, 'html' for use in list (either ol or ul HTML + * elements). Custom content is also supported using the before and after + * parameters. + * + * The 'link' format uses the link HTML element with the archives + * relationship. The before and after parameters are not used. The text + * parameter is used to describe the link. + * + * The 'option' format uses the option HTML element for use in select element. + * The value is the url parameter and the before and after parameters are used + * between the text description. + * + * The 'html' format, which is the default, uses the li HTML element for use in + * the list HTML elements. The before parameter is before the link and the after + * parameter is after the closing link. + * + * The custom format uses the before parameter before the link ('a' HTML + * element) and the after parameter after the closing link tag. If the above + * three values for the format are not used, then custom format is assumed. + * + * @since 1.0.0 + * + * @param string $url URL to archive. + * @param string $text Archive text description. + * @param string $format Optional, default is 'html'. Can be 'link', 'option', 'html', or custom. + * @param string $before Optional. + * @param string $after Optional. + * @return string HTML link content for archive. + */ +function get_archives_link($url, $text, $format = 'html', $before = '', $after = '') { + $text = wptexturize($text); + $url = esc_url($url); + + if ('link' == $format) + $link_html = "\t\n"; + elseif ('option' == $format) + $link_html = "\t\n"; + elseif ('html' == $format) + $link_html = "\t
                23. $before$text$after
                24. \n"; + else // custom + $link_html = "\t$before$text$after\n"; + + $link_html = apply_filters( 'get_archives_link', $link_html ); + + return $link_html; +} + +/** + * Display archive links based on type and format. + * + * The 'type' argument offers a few choices and by default will display monthly + * archive links. The other options for values are 'daily', 'weekly', 'monthly', + * 'yearly', 'postbypost' or 'alpha'. Both 'postbypost' and 'alpha' display the + * same archive link list, the difference between the two is that 'alpha' + * will order by post title and 'postbypost' will order by post date. + * + * The date archives will logically display dates with links to the archive post + * page. The 'postbypost' and 'alpha' values for 'type' argument will display + * the post titles. + * + * The 'limit' argument will only display a limited amount of links, specified + * by the 'limit' integer value. By default, there is no limit. The + * 'show_post_count' argument will show how many posts are within the archive. + * By default, the 'show_post_count' argument is set to false. + * + * For the 'format', 'before', and 'after' arguments, see {@link + * get_archives_link()}. The values of these arguments have to do with that + * function. + * + * @since 1.2.0 + * + * @param string|array $args Optional. Override defaults. + * @return string|null String when retrieving, null when displaying. + */ +function wp_get_archives($args = '') { + global $wpdb, $wp_locale; + + $defaults = array( + 'type' => 'monthly', 'limit' => '', + 'format' => 'html', 'before' => '', + 'after' => '', 'show_post_count' => false, + 'echo' => 1, 'order' => 'DESC', + ); + + $r = wp_parse_args( $args, $defaults ); + extract( $r, EXTR_SKIP ); + + if ( '' == $type ) + $type = 'monthly'; + + if ( '' != $limit ) { + $limit = absint($limit); + $limit = ' LIMIT '.$limit; + } + + $order = strtoupper( $order ); + if ( $order !== 'ASC' ) + $order = 'DESC'; + + // this is what will separate dates on weekly archive links + $archive_week_separator = '–'; + + // over-ride general date format ? 0 = no: use the date format set in Options, 1 = yes: over-ride + $archive_date_format_over_ride = 0; + + // options for daily archive (only if you over-ride the general date format) + $archive_day_date_format = 'Y/m/d'; + + // options for weekly archive (only if you over-ride the general date format) + $archive_week_start_date_format = 'Y/m/d'; + $archive_week_end_date_format = 'Y/m/d'; + + if ( !$archive_date_format_over_ride ) { + $archive_day_date_format = get_option('date_format'); + $archive_week_start_date_format = get_option('date_format'); + $archive_week_end_date_format = get_option('date_format'); + } + + $where = apply_filters( 'getarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'", $r ); + $join = apply_filters( 'getarchives_join', '', $r ); + + $output = ''; + + $last_changed = wp_cache_get( 'last_changed', 'posts' ); + if ( ! $last_changed ) { + $last_changed = microtime(); + wp_cache_set( 'last_changed', $last_changed, 'posts' ); + } + + if ( 'monthly' == $type ) { + $query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date $order $limit"; + $key = md5( $query ); + $key = "wp_get_archives:$key:$last_changed"; + if ( ! $results = wp_cache_get( $key, 'posts' ) ) { + $results = $wpdb->get_results( $query ); + wp_cache_set( $key, $results, 'posts' ); + } + if ( $results ) { + $afterafter = $after; + foreach ( (array) $results as $result ) { + $url = get_month_link( $result->year, $result->month ); + /* translators: 1: month name, 2: 4-digit year */ + $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($result->month), $result->year); + if ( $show_post_count ) + $after = ' ('.$result->posts.')' . $afterafter; + $output .= get_archives_link($url, $text, $format, $before, $after); + } + } + } elseif ('yearly' == $type) { + $query = "SELECT YEAR(post_date) AS `year`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date) ORDER BY post_date $order $limit"; + $key = md5( $query ); + $key = "wp_get_archives:$key:$last_changed"; + if ( ! $results = wp_cache_get( $key, 'posts' ) ) { + $results = $wpdb->get_results( $query ); + wp_cache_set( $key, $results, 'posts' ); + } + if ( $results ) { + $afterafter = $after; + foreach ( (array) $results as $result) { + $url = get_year_link($result->year); + $text = sprintf('%d', $result->year); + if ($show_post_count) + $after = ' ('.$result->posts.')' . $afterafter; + $output .= get_archives_link($url, $text, $format, $before, $after); + } + } + } elseif ( 'daily' == $type ) { + $query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, DAYOFMONTH(post_date) AS `dayofmonth`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date), DAYOFMONTH(post_date) ORDER BY post_date $order $limit"; + $key = md5( $query ); + $key = "wp_get_archives:$key:$last_changed"; + if ( ! $results = wp_cache_get( $key, 'posts' ) ) { + $results = $wpdb->get_results( $query ); + $cache[ $key ] = $results; + wp_cache_set( $key, $results, 'posts' ); + } + if ( $results ) { + $afterafter = $after; + foreach ( (array) $results as $result ) { + $url = get_day_link($result->year, $result->month, $result->dayofmonth); + $date = sprintf('%1$d-%2$02d-%3$02d 00:00:00', $result->year, $result->month, $result->dayofmonth); + $text = mysql2date($archive_day_date_format, $date); + if ($show_post_count) + $after = ' ('.$result->posts.')'.$afterafter; + $output .= get_archives_link($url, $text, $format, $before, $after); + } + } + } elseif ( 'weekly' == $type ) { + $week = _wp_mysql_week( '`post_date`' ); + $query = "SELECT DISTINCT $week AS `week`, YEAR( `post_date` ) AS `yr`, DATE_FORMAT( `post_date`, '%Y-%m-%d' ) AS `yyyymmdd`, count( `ID` ) AS `posts` FROM `$wpdb->posts` $join $where GROUP BY $week, YEAR( `post_date` ) ORDER BY `post_date` $order $limit"; + $key = md5( $query ); + $key = "wp_get_archives:$key:$last_changed"; + if ( ! $results = wp_cache_get( $key, 'posts' ) ) { + $results = $wpdb->get_results( $query ); + wp_cache_set( $key, $results, 'posts' ); + } + $arc_w_last = ''; + $afterafter = $after; + if ( $results ) { + foreach ( (array) $results as $result ) { + if ( $result->week != $arc_w_last ) { + $arc_year = $result->yr; + $arc_w_last = $result->week; + $arc_week = get_weekstartend($result->yyyymmdd, get_option('start_of_week')); + $arc_week_start = date_i18n($archive_week_start_date_format, $arc_week['start']); + $arc_week_end = date_i18n($archive_week_end_date_format, $arc_week['end']); + $url = sprintf('%1$s/%2$s%3$sm%4$s%5$s%6$sw%7$s%8$d', home_url(), '', '?', '=', $arc_year, '&', '=', $result->week); + $text = $arc_week_start . $archive_week_separator . $arc_week_end; + if ($show_post_count) + $after = ' ('.$result->posts.')'.$afterafter; + $output .= get_archives_link($url, $text, $format, $before, $after); + } + } + } + } elseif ( ( 'postbypost' == $type ) || ('alpha' == $type) ) { + $orderby = ('alpha' == $type) ? 'post_title ASC ' : 'post_date DESC '; + $query = "SELECT * FROM $wpdb->posts $join $where ORDER BY $orderby $limit"; + $key = md5( $query ); + $key = "wp_get_archives:$key:$last_changed"; + if ( ! $results = wp_cache_get( $key, 'posts' ) ) { + $results = $wpdb->get_results( $query ); + wp_cache_set( $key, $results, 'posts' ); + } + if ( $results ) { + foreach ( (array) $results as $result ) { + if ( $result->post_date != '0000-00-00 00:00:00' ) { + $url = get_permalink( $result ); + if ( $result->post_title ) { + /** This filter is documented in wp-includes/post-template.php */ + $text = strip_tags( apply_filters( 'the_title', $result->post_title, $result->ID ) ); + } else { + $text = $result->ID; + } + $output .= get_archives_link($url, $text, $format, $before, $after); + } + } + } + } + if ( $echo ) + echo $output; + else + return $output; +} + +/** + * Get number of days since the start of the week. + * + * @since 1.5.0 + * + * @param int $num Number of day. + * @return int Days since the start of the week. + */ +function calendar_week_mod($num) { + $base = 7; + return ($num - $base*floor($num/$base)); +} + +/** + * Display calendar with days that have posts as links. + * + * The calendar is cached, which will be retrieved, if it exists. If there are + * no posts for the month, then it will not be displayed. + * + * @since 1.0.0 + * @uses calendar_week_mod() + * + * @param bool $initial Optional, default is true. Use initial calendar names. + * @param bool $echo Optional, default is true. Set to false for return. + * @return string|null String when retrieving, null when displaying. + */ +function get_calendar($initial = true, $echo = true) { + global $wpdb, $m, $monthnum, $year, $wp_locale, $posts; + + $cache = array(); + $key = md5( $m . $monthnum . $year ); + if ( $cache = wp_cache_get( 'get_calendar', 'calendar' ) ) { + if ( is_array($cache) && isset( $cache[ $key ] ) ) { + if ( $echo ) { + echo apply_filters( 'get_calendar', $cache[$key] ); + return; + } else { + return apply_filters( 'get_calendar', $cache[$key] ); + } + } + } + + if ( !is_array($cache) ) + $cache = array(); + + // Quick check. If we have no posts at all, abort! + if ( !$posts ) { + $gotsome = $wpdb->get_var("SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1"); + if ( !$gotsome ) { + $cache[ $key ] = ''; + wp_cache_set( 'get_calendar', $cache, 'calendar' ); + return; + } + } + + if ( isset($_GET['w']) ) + $w = ''.intval($_GET['w']); + + // week_begins = 0 stands for Sunday + $week_begins = intval(get_option('start_of_week')); + + // Let's figure out when we are + if ( !empty($monthnum) && !empty($year) ) { + $thismonth = ''.zeroise(intval($monthnum), 2); + $thisyear = ''.intval($year); + } elseif ( !empty($w) ) { + // We need to get the month from MySQL + $thisyear = ''.intval(substr($m, 0, 4)); + $d = (($w - 1) * 7) + 6; //it seems MySQL's weeks disagree with PHP's + $thismonth = $wpdb->get_var("SELECT DATE_FORMAT((DATE_ADD('{$thisyear}0101', INTERVAL $d DAY) ), '%m')"); + } elseif ( !empty($m) ) { + $thisyear = ''.intval(substr($m, 0, 4)); + if ( strlen($m) < 6 ) + $thismonth = '01'; + else + $thismonth = ''.zeroise(intval(substr($m, 4, 2)), 2); + } else { + $thisyear = gmdate('Y', current_time('timestamp')); + $thismonth = gmdate('m', current_time('timestamp')); + } + + $unixmonth = mktime(0, 0 , 0, $thismonth, 1, $thisyear); + $last_day = date('t', $unixmonth); + + // Get the next and previous month and year with at least one post + $previous = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year + FROM $wpdb->posts + WHERE post_date < '$thisyear-$thismonth-01' + AND post_type = 'post' AND post_status = 'publish' + ORDER BY post_date DESC + LIMIT 1"); + $next = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year + FROM $wpdb->posts + WHERE post_date > '$thisyear-$thismonth-{$last_day} 23:59:59' + AND post_type = 'post' AND post_status = 'publish' + ORDER BY post_date ASC + LIMIT 1"); + + /* translators: Calendar caption: 1: month name, 2: 4-digit year */ + $calendar_caption = _x('%1$s %2$s', 'calendar caption'); + $calendar_output = ' + + + '; + + $myweek = array(); + + for ( $wdcount=0; $wdcount<=6; $wdcount++ ) { + $myweek[] = $wp_locale->get_weekday(($wdcount+$week_begins)%7); + } + + foreach ( $myweek as $wd ) { + $day_name = (true == $initial) ? $wp_locale->get_weekday_initial($wd) : $wp_locale->get_weekday_abbrev($wd); + $wd = esc_attr($wd); + $calendar_output .= "\n\t\t"; + } + + $calendar_output .= ' + + + + + '; + + if ( $previous ) { + $calendar_output .= "\n\t\t".''; + } else { + $calendar_output .= "\n\t\t".''; + } + + $calendar_output .= "\n\t\t".''; + + if ( $next ) { + $calendar_output .= "\n\t\t".''; + } else { + $calendar_output .= "\n\t\t".''; + } + + $calendar_output .= ' + + + + + '; + + // Get days with posts + $dayswithposts = $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(post_date) + FROM $wpdb->posts WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00' + AND post_type = 'post' AND post_status = 'publish' + AND post_date <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59'", ARRAY_N); + if ( $dayswithposts ) { + foreach ( (array) $dayswithposts as $daywith ) { + $daywithpost[] = $daywith[0]; + } + } else { + $daywithpost = array(); + } + + if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false || stripos($_SERVER['HTTP_USER_AGENT'], 'camino') !== false || stripos($_SERVER['HTTP_USER_AGENT'], 'safari') !== false) + $ak_title_separator = "\n"; + else + $ak_title_separator = ', '; + + $ak_titles_for_day = array(); + $ak_post_titles = $wpdb->get_results("SELECT ID, post_title, DAYOFMONTH(post_date) as dom " + ."FROM $wpdb->posts " + ."WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00' " + ."AND post_date <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59' " + ."AND post_type = 'post' AND post_status = 'publish'" + ); + if ( $ak_post_titles ) { + foreach ( (array) $ak_post_titles as $ak_post_title ) { + + /** This filter is documented in wp-includes/post-template.php */ + $post_title = esc_attr( apply_filters( 'the_title', $ak_post_title->post_title, $ak_post_title->ID ) ); + + if ( empty($ak_titles_for_day['day_'.$ak_post_title->dom]) ) + $ak_titles_for_day['day_'.$ak_post_title->dom] = ''; + if ( empty($ak_titles_for_day["$ak_post_title->dom"]) ) // first one + $ak_titles_for_day["$ak_post_title->dom"] = $post_title; + else + $ak_titles_for_day["$ak_post_title->dom"] .= $ak_title_separator . $post_title; + } + } + + // See how much we should pad in the beginning + $pad = calendar_week_mod(date('w', $unixmonth)-$week_begins); + if ( 0 != $pad ) + $calendar_output .= "\n\t\t".''; + + $daysinmonth = intval(date('t', $unixmonth)); + for ( $day = 1; $day <= $daysinmonth; ++$day ) { + if ( isset($newrow) && $newrow ) + $calendar_output .= "\n\t\n\t\n\t\t"; + $newrow = false; + + if ( $day == gmdate('j', current_time('timestamp')) && $thismonth == gmdate('m', current_time('timestamp')) && $thisyear == gmdate('Y', current_time('timestamp')) ) + $calendar_output .= ''; + + if ( 6 == calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins) ) + $newrow = true; + } + + $pad = 7 - calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins); + if ( $pad != 0 && $pad != 7 ) + $calendar_output .= "\n\t\t".''; + + $calendar_output .= "\n\t\n\t\n\t
                  ' . sprintf($calendar_caption, $wp_locale->get_month($thismonth), date('Y', $unixmonth)) . '
                  $day_name
                  « ' . $wp_locale->get_month_abbrev($wp_locale->get_month($previous->month)) . '  ' . $wp_locale->get_month_abbrev($wp_locale->get_month($next->month)) . ' » 
                   
                  '; + else + $calendar_output .= ''; + + if ( in_array($day, $daywithpost) ) // any posts today? + $calendar_output .= '$day"; + else + $calendar_output .= $day; + $calendar_output .= ' 
                  "; + + $cache[ $key ] = $calendar_output; + wp_cache_set( 'get_calendar', $cache, 'calendar' ); + + if ( $echo ) + echo apply_filters( 'get_calendar', $calendar_output ); + else + return apply_filters( 'get_calendar', $calendar_output ); + +} + +/** + * Purge the cached results of get_calendar. + * + * @see get_calendar + * @since 2.1.0 + */ +function delete_get_calendar_cache() { + wp_cache_delete( 'get_calendar', 'calendar' ); +} +add_action( 'save_post', 'delete_get_calendar_cache' ); +add_action( 'delete_post', 'delete_get_calendar_cache' ); +add_action( 'update_option_start_of_week', 'delete_get_calendar_cache' ); +add_action( 'update_option_gmt_offset', 'delete_get_calendar_cache' ); + +/** + * Display all of the allowed tags in HTML format with attributes. + * + * This is useful for displaying in the comment area, which elements and + * attributes are supported. As well as any plugins which want to display it. + * + * @since 1.0.1 + * @uses $allowedtags + * + * @return string HTML allowed tags entity encoded. + */ +function allowed_tags() { + global $allowedtags; + $allowed = ''; + foreach ( (array) $allowedtags as $tag => $attributes ) { + $allowed .= '<'.$tag; + if ( 0 < count($attributes) ) { + foreach ( $attributes as $attribute => $limits ) { + $allowed .= ' '.$attribute.'=""'; + } + } + $allowed .= '> '; + } + return htmlentities($allowed); +} + +/***** Date/Time tags *****/ + +/** + * Outputs the date in iso8601 format for xml files. + * + * @since 1.0.0 + */ +function the_date_xml() { + echo mysql2date( 'Y-m-d', get_post()->post_date, false ); +} + +/** + * Display or Retrieve the date the current $post was written (once per date) + * + * Will only output the date if the current post's date is different from the + * previous one output. + * + * i.e. Only one date listing will show per day worth of posts shown in the loop, even if the + * function is called several times for each post. + * + * HTML output can be filtered with 'the_date'. + * Date string output can be filtered with 'get_the_date'. + * + * @since 0.71 + * @uses get_the_date() + * @param string $d Optional. PHP date format defaults to the date_format option if not specified. + * @param string $before Optional. Output before the date. + * @param string $after Optional. Output after the date. + * @param bool $echo Optional, default is display. Whether to echo the date or return it. + * @return string|null Null if displaying, string if retrieving. + */ +function the_date( $d = '', $before = '', $after = '', $echo = true ) { + global $currentday, $previousday; + $the_date = ''; + if ( $currentday != $previousday ) { + $the_date .= $before; + $the_date .= get_the_date( $d ); + $the_date .= $after; + $previousday = $currentday; + + $the_date = apply_filters('the_date', $the_date, $d, $before, $after); + + if ( $echo ) + echo $the_date; + else + return $the_date; + } + + return null; +} + +/** + * Retrieve the date the current $post was written. + * + * Unlike the_date() this function will always return the date. + * Modify output with 'get_the_date' filter. + * + * @since 3.0.0 + * + * @param string $d Optional. PHP date format defaults to the date_format option if not specified. + * @return string|null Null if displaying, string if retrieving. + */ +function get_the_date( $d = '' ) { + $post = get_post(); + $the_date = ''; + + if ( '' == $d ) + $the_date .= mysql2date(get_option('date_format'), $post->post_date); + else + $the_date .= mysql2date($d, $post->post_date); + + return apply_filters('get_the_date', $the_date, $d); +} + +/** + * Display the date on which the post was last modified. + * + * @since 2.1.0 + * + * @param string $d Optional. PHP date format defaults to the date_format option if not specified. + * @param string $before Optional. Output before the date. + * @param string $after Optional. Output after the date. + * @param bool $echo Optional, default is display. Whether to echo the date or return it. + * @return string|null Null if displaying, string if retrieving. + */ +function the_modified_date($d = '', $before='', $after='', $echo = true) { + + $the_modified_date = $before . get_the_modified_date($d) . $after; + $the_modified_date = apply_filters('the_modified_date', $the_modified_date, $d, $before, $after); + + if ( $echo ) + echo $the_modified_date; + else + return $the_modified_date; + +} + +/** + * Retrieve the date on which the post was last modified. + * + * @since 2.1.0 + * + * @param string $d Optional. PHP date format. Defaults to the "date_format" option + * @return string + */ +function get_the_modified_date($d = '') { + if ( '' == $d ) + $the_time = get_post_modified_time(get_option('date_format'), null, null, true); + else + $the_time = get_post_modified_time($d, null, null, true); + return apply_filters('get_the_modified_date', $the_time, $d); +} + +/** + * Display the time at which the post was written. + * + * @since 0.71 + * + * @param string $d Either 'G', 'U', or php date format. + */ +function the_time( $d = '' ) { + echo apply_filters('the_time', get_the_time( $d ), $d); +} + +/** + * Retrieve the time at which the post was written. + * + * @since 1.5.0 + * + * @param string $d Optional Either 'G', 'U', or php date format defaults to the value specified in the time_format option. + * @param int|object $post Optional post ID or object. Default is global $post object. + * @return string + */ +function get_the_time( $d = '', $post = null ) { + $post = get_post($post); + + if ( '' == $d ) + $the_time = get_post_time(get_option('time_format'), false, $post, true); + else + $the_time = get_post_time($d, false, $post, true); + return apply_filters('get_the_time', $the_time, $d, $post); +} + +/** + * Retrieve the time at which the post was written. + * + * @since 2.0.0 + * + * @param string $d Optional Either 'G', 'U', or php date format. + * @param bool $gmt Optional, default is false. Whether to return the gmt time. + * @param int|object $post Optional post ID or object. Default is global $post object. + * @param bool $translate Whether to translate the time string + * @return string + */ +function get_post_time( $d = 'U', $gmt = false, $post = null, $translate = false ) { // returns timestamp + $post = get_post($post); + + if ( $gmt ) + $time = $post->post_date_gmt; + else + $time = $post->post_date; + + $time = mysql2date($d, $time, $translate); + return apply_filters('get_post_time', $time, $d, $gmt); +} + +/** + * Display the time at which the post was last modified. + * + * @since 2.0.0 + * + * @param string $d Optional Either 'G', 'U', or php date format defaults to the value specified in the time_format option. + */ +function the_modified_time($d = '') { + echo apply_filters('the_modified_time', get_the_modified_time($d), $d); +} + +/** + * Retrieve the time at which the post was last modified. + * + * @since 2.0.0 + * + * @param string $d Optional Either 'G', 'U', or php date format defaults to the value specified in the time_format option. + * @return string + */ +function get_the_modified_time($d = '') { + if ( '' == $d ) + $the_time = get_post_modified_time(get_option('time_format'), null, null, true); + else + $the_time = get_post_modified_time($d, null, null, true); + return apply_filters('get_the_modified_time', $the_time, $d); +} + +/** + * Retrieve the time at which the post was last modified. + * + * @since 2.0.0 + * + * @param string $d Optional, default is 'U'. Either 'G', 'U', or php date format. + * @param bool $gmt Optional, default is false. Whether to return the gmt time. + * @param int|object $post Optional, default is global post object. A post_id or post object + * @param bool $translate Optional, default is false. Whether to translate the result + * @return string Returns timestamp + */ +function get_post_modified_time( $d = 'U', $gmt = false, $post = null, $translate = false ) { + $post = get_post($post); + + if ( $gmt ) + $time = $post->post_modified_gmt; + else + $time = $post->post_modified; + $time = mysql2date($d, $time, $translate); + + return apply_filters('get_post_modified_time', $time, $d, $gmt); +} + +/** + * Display the weekday on which the post was written. + * + * @since 0.71 + * @uses $wp_locale + * @uses $post + */ +function the_weekday() { + global $wp_locale; + $the_weekday = $wp_locale->get_weekday( mysql2date( 'w', get_post()->post_date, false ) ); + $the_weekday = apply_filters('the_weekday', $the_weekday); + echo $the_weekday; +} + +/** + * Display the weekday on which the post was written. + * + * Will only output the weekday if the current post's weekday is different from + * the previous one output. + * + * @since 0.71 + * + * @param string $before Optional Output before the date. + * @param string $after Optional Output after the date. + */ +function the_weekday_date($before='',$after='') { + global $wp_locale, $currentday, $previousweekday; + $the_weekday_date = ''; + if ( $currentday != $previousweekday ) { + $the_weekday_date .= $before; + $the_weekday_date .= $wp_locale->get_weekday( mysql2date( 'w', get_post()->post_date, false ) ); + $the_weekday_date .= $after; + $previousweekday = $currentday; + } + $the_weekday_date = apply_filters('the_weekday_date', $the_weekday_date, $before, $after); + echo $the_weekday_date; +} + +/** + * Fire the wp_head action + * + * @since 1.2.0 + * @uses do_action() Calls 'wp_head' hook. + */ +function wp_head() { + do_action('wp_head'); +} + +/** + * Fire the wp_footer action + * + * @since 1.5.1 + * @uses do_action() Calls 'wp_footer' hook. + */ +function wp_footer() { + do_action('wp_footer'); +} + +/** + * Display the links to the general feeds. + * + * @since 2.8.0 + * + * @param array $args Optional arguments. + */ +function feed_links( $args = array() ) { + if ( !current_theme_supports('automatic-feed-links') ) + return; + + $defaults = array( + /* translators: Separator between blog name and feed type in feed links */ + 'separator' => _x('»', 'feed link'), + /* translators: 1: blog title, 2: separator (raquo) */ + 'feedtitle' => __('%1$s %2$s Feed'), + /* translators: 1: blog title, 2: separator (raquo) */ + 'comstitle' => __('%1$s %2$s Comments Feed'), + ); + + $args = wp_parse_args( $args, $defaults ); + + echo '\n"; + echo '\n"; +} + +/** + * Display the links to the extra feeds such as category feeds. + * + * @since 2.8.0 + * + * @param array $args Optional arguments. + */ +function feed_links_extra( $args = array() ) { + $defaults = array( + /* translators: Separator between blog name and feed type in feed links */ + 'separator' => _x('»', 'feed link'), + /* translators: 1: blog name, 2: separator(raquo), 3: post title */ + 'singletitle' => __('%1$s %2$s %3$s Comments Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: category name */ + 'cattitle' => __('%1$s %2$s %3$s Category Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: tag name */ + 'tagtitle' => __('%1$s %2$s %3$s Tag Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: author name */ + 'authortitle' => __('%1$s %2$s Posts by %3$s Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: search phrase */ + 'searchtitle' => __('%1$s %2$s Search Results for “%3$s” Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: post type name */ + 'posttypetitle' => __('%1$s %2$s %3$s Feed'), + ); + + $args = wp_parse_args( $args, $defaults ); + + if ( is_singular() ) { + $id = 0; + $post = get_post( $id ); + + if ( comments_open() || pings_open() || $post->comment_count > 0 ) { + $title = sprintf( $args['singletitle'], get_bloginfo('name'), $args['separator'], esc_html( get_the_title() ) ); + $href = get_post_comments_feed_link( $post->ID ); + } + } elseif ( is_post_type_archive() ) { + $post_type = get_query_var( 'post_type' ); + if ( is_array( $post_type ) ) + $post_type = reset( $post_type ); + + $post_type_obj = get_post_type_object( $post_type ); + $title = sprintf( $args['posttypetitle'], get_bloginfo( 'name' ), $args['separator'], $post_type_obj->labels->name ); + $href = get_post_type_archive_feed_link( $post_type_obj->name ); + } elseif ( is_category() ) { + $term = get_queried_object(); + + if ( $term ) { + $title = sprintf( $args['cattitle'], get_bloginfo('name'), $args['separator'], $term->name ); + $href = get_category_feed_link( $term->term_id ); + } + } elseif ( is_tag() ) { + $term = get_queried_object(); + + if ( $term ) { + $title = sprintf( $args['tagtitle'], get_bloginfo('name'), $args['separator'], $term->name ); + $href = get_tag_feed_link( $term->term_id ); + } + } elseif ( is_author() ) { + $author_id = intval( get_query_var('author') ); + + $title = sprintf( $args['authortitle'], get_bloginfo('name'), $args['separator'], get_the_author_meta( 'display_name', $author_id ) ); + $href = get_author_feed_link( $author_id ); + } elseif ( is_search() ) { + $title = sprintf( $args['searchtitle'], get_bloginfo('name'), $args['separator'], get_search_query( false ) ); + $href = get_search_feed_link(); + } elseif ( is_post_type_archive() ) { + $title = sprintf( $args['posttypetitle'], get_bloginfo('name'), $args['separator'], post_type_archive_title( '', false ) ); + $post_type_obj = get_queried_object(); + if ( $post_type_obj ) + $href = get_post_type_archive_feed_link( $post_type_obj->name ); + } + + if ( isset($title) && isset($href) ) + echo '' . "\n"; +} + +/** + * Display the link to the Really Simple Discovery service endpoint. + * + * @link http://archipelago.phrasewise.com/rsd + * @since 2.0.0 + */ +function rsd_link() { + echo '\n"; +} + +/** + * Display the link to the Windows Live Writer manifest file. + * + * @link http://msdn.microsoft.com/en-us/library/bb463265.aspx + * @since 2.3.1 + */ +function wlwmanifest_link() { + echo ' ' . "\n"; +} + +/** + * Display a noindex meta tag if required by the blog configuration. + * + * If a blog is marked as not being public then the noindex meta tag will be + * output to tell web robots not to index the page content. Add this to the wp_head action. + * Typical usage is as a wp_head callback. add_action( 'wp_head', 'noindex' ); + * + * @see wp_no_robots + * + * @since 2.1.0 + */ +function noindex() { + // If the blog is not public, tell robots to go away. + if ( '0' == get_option('blog_public') ) + wp_no_robots(); +} + +/** + * Display a noindex meta tag. + * + * Outputs a noindex meta tag that tells web robots not to index the page content. + * Typical usage is as a wp_head callback. add_action( 'wp_head', 'wp_no_robots' ); + * + * @since 3.3.0 + */ +function wp_no_robots() { + echo "\n"; +} + +/** + * Determine if TinyMCE is available. + * + * Checks to see if the user has deleted the tinymce files to slim down there WordPress install. + * + * @since 2.1.0 + * + * @return bool Whether TinyMCE exists. + */ +function rich_edit_exists() { + global $wp_rich_edit_exists; + if ( !isset($wp_rich_edit_exists) ) + $wp_rich_edit_exists = file_exists(ABSPATH . WPINC . '/js/tinymce/tiny_mce.js'); + return $wp_rich_edit_exists; +} + +/** + * Whether the user should have a WYSIWIG editor. + * + * Checks that the user requires a WYSIWIG editor and that the editor is + * supported in the users browser. + * + * @since 2.0.0 + * + * @return bool + */ +function user_can_richedit() { + global $wp_rich_edit, $is_gecko, $is_opera, $is_safari, $is_chrome, $is_IE; + + if ( !isset($wp_rich_edit) ) { + $wp_rich_edit = false; + + if ( get_user_option( 'rich_editing' ) == 'true' || ! is_user_logged_in() ) { // default to 'true' for logged out users + if ( $is_safari ) { + $wp_rich_edit = ! wp_is_mobile() || ( preg_match( '!AppleWebKit/(\d+)!', $_SERVER['HTTP_USER_AGENT'], $match ) && intval( $match[1] ) >= 534 ); + } elseif ( $is_gecko || $is_chrome || $is_IE || ( $is_opera && !wp_is_mobile() ) ) { + $wp_rich_edit = true; + } + } + } + + return apply_filters('user_can_richedit', $wp_rich_edit); +} + +/** + * Find out which editor should be displayed by default. + * + * Works out which of the two editors to display as the current editor for a + * user. The 'html' setting is for the "Text" editor tab. + * + * @since 2.5.0 + * + * @return string Either 'tinymce', or 'html', or 'test' + */ +function wp_default_editor() { + $r = user_can_richedit() ? 'tinymce' : 'html'; // defaults + if ( $user = wp_get_current_user() ) { // look for cookie + $ed = get_user_setting('editor', 'tinymce'); + $r = ( in_array($ed, array('tinymce', 'html', 'test') ) ) ? $ed : $r; + } + return apply_filters( 'wp_default_editor', $r ); // filter +} + +/** + * Renders an editor. + * + * Using this function is the proper way to output all needed components for both TinyMCE and Quicktags. + * _WP_Editors should not be used directly. See http://core.trac.wordpress.org/ticket/17144. + * + * NOTE: Once initialized the TinyMCE editor cannot be safely moved in the DOM. For that reason + * running wp_editor() inside of a metabox is not a good idea unless only Quicktags is used. + * On the post edit screen several actions can be used to include additional editors + * containing TinyMCE: 'edit_page_form', 'edit_form_advanced' and 'dbx_post_sidebar'. + * See http://core.trac.wordpress.org/ticket/19173 for more information. + * + * @see wp-includes/class-wp-editor.php + * @since 3.3.0 + * + * @param string $content Initial content for the editor. + * @param string $editor_id HTML ID attribute value for the textarea and TinyMCE. Can only be /[a-z]+/. + * @param array $settings See _WP_Editors::editor(). + */ +function wp_editor( $content, $editor_id, $settings = array() ) { + if ( ! class_exists( '_WP_Editors' ) ) + require( ABSPATH . WPINC . '/class-wp-editor.php' ); + + _WP_Editors::editor($content, $editor_id, $settings); +} + +/** + * Retrieve the contents of the search WordPress query variable. + * + * The search query string is passed through {@link esc_attr()} + * to ensure that it is safe for placing in an html attribute. + * + * @since 2.3.0 + * @uses esc_attr() + * + * @param bool $escaped Whether the result is escaped. Default true. + * Only use when you are later escaping it. Do not use unescaped. + * @return string + */ +function get_search_query( $escaped = true ) { + $query = apply_filters( 'get_search_query', get_query_var( 's' ) ); + if ( $escaped ) + $query = esc_attr( $query ); + return $query; +} + +/** + * Display the contents of the search query variable. + * + * The search query string is passed through {@link esc_attr()} + * to ensure that it is safe for placing in an html attribute. + * + * @uses esc_attr() + * @since 2.1.0 + */ +function the_search_query() { + echo esc_attr( apply_filters( 'the_search_query', get_search_query( false ) ) ); +} + +/** + * Display the language attributes for the html tag. + * + * Builds up a set of html attributes containing the text direction and language + * information for the page. + * + * @since 2.1.0 + * + * @param string $doctype The type of html document (xhtml|html). + */ +function language_attributes($doctype = 'html') { + $attributes = array(); + $output = ''; + + if ( function_exists( 'is_rtl' ) && is_rtl() ) + $attributes[] = 'dir="rtl"'; + + if ( $lang = get_bloginfo('language') ) { + if ( get_option('html_type') == 'text/html' || $doctype == 'html' ) + $attributes[] = "lang=\"$lang\""; + + if ( get_option('html_type') != 'text/html' || $doctype == 'xhtml' ) + $attributes[] = "xml:lang=\"$lang\""; + } + + $output = implode(' ', $attributes); + $output = apply_filters('language_attributes', $output); + echo $output; +} + +/** + * Retrieve paginated link for archive post pages. + * + * Technically, the function can be used to create paginated link list for any + * area. The 'base' argument is used to reference the url, which will be used to + * create the paginated links. The 'format' argument is then used for replacing + * the page number. It is however, most likely and by default, to be used on the + * archive post pages. + * + * The 'type' argument controls format of the returned value. The default is + * 'plain', which is just a string with the links separated by a newline + * character. The other possible values are either 'array' or 'list'. The + * 'array' value will return an array of the paginated link list to offer full + * control of display. The 'list' value will place all of the paginated links in + * an unordered HTML list. + * + * The 'total' argument is the total amount of pages and is an integer. The + * 'current' argument is the current page number and is also an integer. + * + * An example of the 'base' argument is "http://example.com/all_posts.php%_%" + * and the '%_%' is required. The '%_%' will be replaced by the contents of in + * the 'format' argument. An example for the 'format' argument is "?page=%#%" + * and the '%#%' is also required. The '%#%' will be replaced with the page + * number. + * + * You can include the previous and next links in the list by setting the + * 'prev_next' argument to true, which it is by default. You can set the + * previous text, by using the 'prev_text' argument. You can set the next text + * by setting the 'next_text' argument. + * + * If the 'show_all' argument is set to true, then it will show all of the pages + * instead of a short list of the pages near the current page. By default, the + * 'show_all' is set to false and controlled by the 'end_size' and 'mid_size' + * arguments. The 'end_size' argument is how many numbers on either the start + * and the end list edges, by default is 1. The 'mid_size' argument is how many + * numbers to either side of current page, but not including current page. + * + * It is possible to add query vars to the link by using the 'add_args' argument + * and see {@link add_query_arg()} for more information. + * + * @since 2.1.0 + * + * @param string|array $args Optional. Override defaults. + * @return array|string String of page links or array of page links. + */ +function paginate_links( $args = '' ) { + $defaults = array( + 'base' => '%_%', // http://example.com/all_posts.php%_% : %_% is replaced by format (below) + 'format' => '?page=%#%', // ?page=%#% : %#% is replaced by the page number + 'total' => 1, + 'current' => 0, + 'show_all' => false, + 'prev_next' => true, + 'prev_text' => __('« Previous'), + 'next_text' => __('Next »'), + 'end_size' => 1, + 'mid_size' => 2, + 'type' => 'plain', + 'add_args' => false, // array of query args to add + 'add_fragment' => '' + ); + + $args = wp_parse_args( $args, $defaults ); + extract($args, EXTR_SKIP); + + // Who knows what else people pass in $args + $total = (int) $total; + if ( $total < 2 ) + return; + $current = (int) $current; + $end_size = 0 < (int) $end_size ? (int) $end_size : 1; // Out of bounds? Make it the default. + $mid_size = 0 <= (int) $mid_size ? (int) $mid_size : 2; + $add_args = is_array($add_args) ? $add_args : false; + $r = ''; + $page_links = array(); + $n = 0; + $dots = false; + + if ( $prev_next && $current && 1 < $current ) : + $link = str_replace('%_%', 2 == $current ? '' : $format, $base); + $link = str_replace('%#%', $current - 1, $link); + if ( $add_args ) + $link = add_query_arg( $add_args, $link ); + $link .= $add_fragment; + $page_links[] = ''; + endif; + for ( $n = 1; $n <= $total; $n++ ) : + $n_display = number_format_i18n($n); + if ( $n == $current ) : + $page_links[] = "$n_display"; + $dots = true; + else : + if ( $show_all || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) : + $link = str_replace('%_%', 1 == $n ? '' : $format, $base); + $link = str_replace('%#%', $n, $link); + if ( $add_args ) + $link = add_query_arg( $add_args, $link ); + $link .= $add_fragment; + $page_links[] = "$n_display"; + $dots = true; + elseif ( $dots && !$show_all ) : + $page_links[] = '' . __( '…' ) . ''; + $dots = false; + endif; + endif; + endfor; + if ( $prev_next && $current && ( $current < $total || -1 == $total ) ) : + $link = str_replace('%_%', $format, $base); + $link = str_replace('%#%', $current + 1, $link); + if ( $add_args ) + $link = add_query_arg( $add_args, $link ); + $link .= $add_fragment; + $page_links[] = ''; + endif; + switch ( $type ) : + case 'array' : + return $page_links; + break; + case 'list' : + $r .= "
                    \n\t
                  • "; + $r .= join("
                  • \n\t
                  • ", $page_links); + $r .= "
                  • \n
                  \n"; + break; + default : + $r = join("\n", $page_links); + break; + endswitch; + return $r; +} + +/** + * Registers an admin colour scheme css file. + * + * Allows a plugin to register a new admin colour scheme. For example: + * + * wp_admin_css_color('classic', __('Classic'), admin_url("css/colors-classic.css"), + * array('#07273E', '#14568A', '#D54E21', '#2683AE')); + * + * + * @since 2.5.0 + * + * @param string $key The unique key for this theme. + * @param string $name The name of the theme. + * @param string $url The url of the css file containing the colour scheme. + * @param array $colors Optional An array of CSS color definitions which are used to give the user a feel for the theme. + * @param array $icons Optional An array of CSS color definitions used to color any SVG icons + */ +function wp_admin_css_color( $key, $name, $url, $colors = array(), $icons = array() ) { + global $_wp_admin_css_colors; + + if ( !isset($_wp_admin_css_colors) ) + $_wp_admin_css_colors = array(); + + $_wp_admin_css_colors[$key] = (object) array( + 'name' => $name, + 'url' => $url, + 'colors' => $colors, + 'icon_colors' => $icons, + ); +} + +/** + * Registers the default Admin color schemes + * + * @since 3.0.0 + */ +function register_admin_color_schemes() { + $suffix = is_rtl() ? '-rtl' : ''; + $suffix .= defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; + + wp_admin_css_color( 'fresh', _x( 'Default', 'admin color scheme' ), + admin_url( "css/colors$suffix.css" ), + array( '#222', '#333', '#0074a2', '#2ea2cc' ), + array( 'base' => '#999', 'focus' => '#2ea2cc', 'current' => '#fff' ) + ); + + // Other color schemes are not available when running out of src + if ( false !== strpos( $GLOBALS['wp_version'], '-src' ) ) + return; + + wp_admin_css_color( 'light', _x( 'Light', 'admin color scheme' ), + admin_url( "css/colors/light/colors$suffix.css" ), + array( '#e5e5e5', '#999', '#d64e07', '#04a4cc' ), + array( 'base' => '#999', 'focus' => '#ccc', 'current' => '#ccc' ) + ); + + wp_admin_css_color( 'blue', _x( 'Blue', 'admin color scheme' ), + admin_url( "css/colors/blue/colors$suffix.css" ), + array( '#096484', '#4796b3', '#52accc', '#74B6CE' ), + array( 'base' => '#e5f8ff', 'focus' => '#fff', 'current' => '#fff' ) + ); + + wp_admin_css_color( 'midnight', _x( 'Midnight', 'admin color scheme' ), + admin_url( "css/colors/midnight/colors$suffix.css" ), + array( '#25282b', '#363b3f', '#69a8bb', '#e14d43' ), + array( 'base' => '#f1f2f3', 'focus' => '#fff', 'current' => '#fff' ) + ); + + wp_admin_css_color( 'sunrise', _x( 'Sunrise', 'admin color scheme' ), + admin_url( "css/colors/sunrise/colors$suffix.css" ), + array( '#b43c38', '#cf4944', '#dd823b', '#ccaf0b' ), + array( 'base' => '#f3f1f1', 'focus' => '#fff', 'current' => '#fff' ) + ); + + wp_admin_css_color( 'ectoplasm', _x( 'Ectoplasm', 'admin color scheme' ), + admin_url( "css/colors/ectoplasm/colors$suffix.css" ), + array( '#413256', '#523f6d', '#a3b745', '#d46f15' ), + array( 'base' => '#ece6f6', 'focus' => '#fff', 'current' => '#fff' ) + ); + + wp_admin_css_color( 'ocean', _x( 'Ocean', 'admin color scheme' ), + admin_url( "css/colors/ocean/colors$suffix.css" ), + array( '#627c83', '#738e96', '#9ebaa0', '#aa9d88' ), + array( 'base' => '#f2fcff', 'focus' => '#fff', 'current' => '#fff' ) + ); + + wp_admin_css_color( 'coffee', _x( 'Coffee', 'admin color scheme' ), + admin_url( "css/colors/coffee/colors$suffix.css" ), + array( '#46403c', '#59524c', '#c7a589', '#9ea476' ), + array( 'base' => '#f3f2f1', 'focus' => '#fff', 'current' => '#fff' ) + ); + +} + +/** + * Display the URL of a WordPress admin CSS file. + * + * @see WP_Styles::_css_href and its style_loader_src filter. + * + * @since 2.3.0 + * + * @param string $file file relative to wp-admin/ without its ".css" extension. + */ +function wp_admin_css_uri( $file = 'wp-admin' ) { + if ( defined('WP_INSTALLING') ) { + $_file = "./$file.css"; + } else { + $_file = admin_url("$file.css"); + } + $_file = add_query_arg( 'version', get_bloginfo( 'version' ), $_file ); + + return apply_filters( 'wp_admin_css_uri', $_file, $file ); +} + +/** + * Enqueues or directly prints a stylesheet link to the specified CSS file. + * + * "Intelligently" decides to enqueue or to print the CSS file. If the + * 'wp_print_styles' action has *not* yet been called, the CSS file will be + * enqueued. If the wp_print_styles action *has* been called, the CSS link will + * be printed. Printing may be forced by passing true as the $force_echo + * (second) parameter. + * + * For backward compatibility with WordPress 2.3 calling method: If the $file + * (first) parameter does not correspond to a registered CSS file, we assume + * $file is a file relative to wp-admin/ without its ".css" extension. A + * stylesheet link to that generated URL is printed. + * + * @package WordPress + * @since 2.3.0 + * @uses $wp_styles WordPress Styles Object + * + * @param string $file Optional. Style handle name or file name (without ".css" extension) relative + * to wp-admin/. Defaults to 'wp-admin'. + * @param bool $force_echo Optional. Force the stylesheet link to be printed rather than enqueued. + */ +function wp_admin_css( $file = 'wp-admin', $force_echo = false ) { + global $wp_styles; + if ( !is_a($wp_styles, 'WP_Styles') ) + $wp_styles = new WP_Styles(); + + // For backward compatibility + $handle = 0 === strpos( $file, 'css/' ) ? substr( $file, 4 ) : $file; + + if ( $wp_styles->query( $handle ) ) { + if ( $force_echo || did_action( 'wp_print_styles' ) ) // we already printed the style queue. Print this one immediately + wp_print_styles( $handle ); + else // Add to style queue + wp_enqueue_style( $handle ); + return; + } + + echo apply_filters( 'wp_admin_css', "\n", $file ); + if ( function_exists( 'is_rtl' ) && is_rtl() ) + echo apply_filters( 'wp_admin_css', "\n", "$file-rtl" ); +} + +/** + * Enqueues the default ThickBox js and css. + * + * If any of the settings need to be changed, this can be done with another js + * file similar to media-upload.js. That file should + * require array('thickbox') to ensure it is loaded after. + * + * @since 2.5.0 + */ +function add_thickbox() { + wp_enqueue_script( 'thickbox' ); + wp_enqueue_style( 'thickbox' ); + + if ( is_network_admin() ) + add_action( 'admin_head', '_thickbox_path_admin_subfolder' ); +} + +/** + * Display the XHTML generator that is generated on the wp_head hook. + * + * @since 2.5.0 + */ +function wp_generator() { + the_generator( apply_filters( 'wp_generator_type', 'xhtml' ) ); +} + +/** + * Display the generator XML or Comment for RSS, ATOM, etc. + * + * Returns the correct generator type for the requested output format. Allows + * for a plugin to filter generators overall the the_generator filter. + * + * @since 2.5.0 + * @uses apply_filters() Calls 'the_generator' hook. + * + * @param string $type The type of generator to output - (html|xhtml|atom|rss2|rdf|comment|export). + */ +function the_generator( $type ) { + echo apply_filters('the_generator', get_the_generator($type), $type) . "\n"; +} + +/** + * Creates the generator XML or Comment for RSS, ATOM, etc. + * + * Returns the correct generator type for the requested output format. Allows + * for a plugin to filter generators on an individual basis using the + * 'get_the_generator_{$type}' filter. + * + * @since 2.5.0 + * @uses apply_filters() Calls 'get_the_generator_$type' hook. + * + * @param string $type The type of generator to return - (html|xhtml|atom|rss2|rdf|comment|export). + * @return string The HTML content for the generator. + */ +function get_the_generator( $type = '' ) { + if ( empty( $type ) ) { + + $current_filter = current_filter(); + if ( empty( $current_filter ) ) + return; + + switch ( $current_filter ) { + case 'rss2_head' : + case 'commentsrss2_head' : + $type = 'rss2'; + break; + case 'rss_head' : + case 'opml_head' : + $type = 'comment'; + break; + case 'rdf_header' : + $type = 'rdf'; + break; + case 'atom_head' : + case 'comments_atom_head' : + case 'app_head' : + $type = 'atom'; + break; + } + } + + switch ( $type ) { + case 'html': + $gen = ''; + break; + case 'xhtml': + $gen = ''; + break; + case 'atom': + $gen = 'WordPress'; + break; + case 'rss2': + $gen = 'http://wordpress.org/?v=' . get_bloginfo_rss( 'version' ) . ''; + break; + case 'rdf': + $gen = ''; + break; + case 'comment': + $gen = ''; + break; + case 'export': + $gen = ''; + break; + } + return apply_filters( "get_the_generator_{$type}", $gen, $type ); +} + +/** + * Outputs the html checked attribute. + * + * Compares the first two arguments and if identical marks as checked + * + * @since 1.0.0 + * + * @param mixed $checked One of the values to compare + * @param mixed $current (true) The other value to compare if not just true + * @param bool $echo Whether to echo or just return the string + * @return string html attribute or empty string + */ +function checked( $checked, $current = true, $echo = true ) { + return __checked_selected_helper( $checked, $current, $echo, 'checked' ); +} + +/** + * Outputs the html selected attribute. + * + * Compares the first two arguments and if identical marks as selected + * + * @since 1.0.0 + * + * @param mixed $selected One of the values to compare + * @param mixed $current (true) The other value to compare if not just true + * @param bool $echo Whether to echo or just return the string + * @return string html attribute or empty string + */ +function selected( $selected, $current = true, $echo = true ) { + return __checked_selected_helper( $selected, $current, $echo, 'selected' ); +} + +/** + * Outputs the html disabled attribute. + * + * Compares the first two arguments and if identical marks as disabled + * + * @since 3.0.0 + * + * @param mixed $disabled One of the values to compare + * @param mixed $current (true) The other value to compare if not just true + * @param bool $echo Whether to echo or just return the string + * @return string html attribute or empty string + */ +function disabled( $disabled, $current = true, $echo = true ) { + return __checked_selected_helper( $disabled, $current, $echo, 'disabled' ); +} + +/** + * Private helper function for checked, selected, and disabled. + * + * Compares the first two arguments and if identical marks as $type + * + * @since 2.8.0 + * @access private + * + * @param mixed $helper One of the values to compare + * @param mixed $current (true) The other value to compare if not just true + * @param bool $echo Whether to echo or just return the string + * @param string $type The type of checked|selected|disabled we are doing + * @return string html attribute or empty string + */ +function __checked_selected_helper( $helper, $current, $echo, $type ) { + if ( (string) $helper === (string) $current ) + $result = " $type='$type'"; + else + $result = ''; + + if ( $echo ) + echo $result; + + return $result; +} + +/** + * Default settings for heartbeat + * + * Outputs the nonce used in the heartbeat XHR + * + * @since 3.6.0 + * + * @param array $settings + * @return array $settings + */ +function wp_heartbeat_settings( $settings ) { + if ( ! is_admin() ) + $settings['ajaxurl'] = admin_url( 'admin-ajax.php', 'relative' ); + + if ( is_user_logged_in() ) + $settings['nonce'] = wp_create_nonce( 'heartbeat-nonce' ); + + return $settings; +} diff --git a/src/wp-includes/http.php b/src/wp-includes/http.php new file mode 100644 index 0000000..0b4b109 --- /dev/null +++ b/src/wp-includes/http.php @@ -0,0 +1,558 @@ +request( $url, $args ); +} + +/** + * Retrieve the raw response from a safe HTTP request using the GET method. + * + * This function is ideal when the HTTP request is being made to an arbitrary + * URL. The URL is validated to avoid redirection and request forgery attacks. + * + * @see wp_remote_request() For more information on the response array format + * and default arguments. + * + * @since 3.6.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_safe_remote_get( $url, $args = array() ) { + $args['reject_unsafe_urls'] = true; + $http = _wp_http_get_object(); + return $http->get( $url, $args ); +} + +/** + * Retrieve the raw response from a safe HTTP request using the POST method. + * + * This function is ideal when the HTTP request is being made to an arbitrary + * URL. The URL is validated to avoid redirection and request forgery attacks. + * + * @see wp_remote_request() For more information on the response array format + * and default arguments. + * + * @since 3.6.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_safe_remote_post( $url, $args = array() ) { + $args['reject_unsafe_urls'] = true; + $http = _wp_http_get_object(); + return $http->post( $url, $args ); +} + +/** + * Retrieve the raw response from a safe HTTP request using the HEAD method. + * + * This function is ideal when the HTTP request is being made to an arbitrary + * URL. The URL is validated to avoid redirection and request forgery attacks. + * + * @see wp_remote_request() For more information on the response array format + * and default arguments. + * + * @since 3.6.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_safe_remote_head( $url, $args = array() ) { + $args['reject_unsafe_urls'] = true; + $http = _wp_http_get_object(); + return $http->head( $url, $args ); +} + +/** + * Retrieve the raw response from the HTTP request. + * + * The array structure is a little complex. + * + * + * $res = array( 'headers' => array(), 'response' => array('code' => int, 'message' => string) ); + * + * + * All of the headers in $res['headers'] are with the name as the key and the + * value as the value. So to get the User-Agent, you would do the following. + * + * + * $user_agent = $res['headers']['user-agent']; + * + * + * The body is the raw response content and can be retrieved from $res['body']. + * + * This function is called first to make the request and there are other API + * functions to abstract out the above convoluted setup. + * + * List of default arguments: + * 'method' => 'GET' + * - Default 'GET' for wp_remote_get() + * - Default 'POST' for wp_remote_post() + * - Default 'HEAD' for wp_remote_head() + * 'timeout' => 5 + * 'redirection' => 5 + * 'httpversion' => '1.0' + * 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) + * 'blocking' => true + * 'headers' => array() + * 'cookies' => array() + * 'body' => null + * 'compress' => false, + * 'decompress' => true, + * 'sslverify' => true, + * 'stream' => false, + * 'filename' => null + * + * @since 2.7.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_remote_request($url, $args = array()) { + $objFetchSite = _wp_http_get_object(); + return $objFetchSite->request($url, $args); +} + +/** + * Retrieve the raw response from the HTTP request using the GET method. + * + * @see wp_remote_request() For more information on the response array format and default arguments. + * + * @since 2.7.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_remote_get($url, $args = array()) { + $objFetchSite = _wp_http_get_object(); + return $objFetchSite->get($url, $args); +} + +/** + * Retrieve the raw response from the HTTP request using the POST method. + * + * @see wp_remote_request() For more information on the response array format and default arguments. + * + * @since 2.7.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_remote_post($url, $args = array()) { + $objFetchSite = _wp_http_get_object(); + return $objFetchSite->post($url, $args); +} + +/** + * Retrieve the raw response from the HTTP request using the HEAD method. + * + * @see wp_remote_request() For more information on the response array format and default arguments. + * + * @since 2.7.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_remote_head($url, $args = array()) { + $objFetchSite = _wp_http_get_object(); + return $objFetchSite->head($url, $args); +} + +/** + * Retrieve only the headers from the raw response. + * + * @since 2.7.0 + * + * @param array $response HTTP response. + * @return array The headers of the response. Empty array if incorrect parameter given. + */ +function wp_remote_retrieve_headers(&$response) { + if ( is_wp_error($response) || ! isset($response['headers']) || ! is_array($response['headers'])) + return array(); + + return $response['headers']; +} + +/** + * Retrieve a single header by name from the raw response. + * + * @since 2.7.0 + * + * @param array $response + * @param string $header Header name to retrieve value from. + * @return string The header value. Empty string on if incorrect parameter given, or if the header doesn't exist. + */ +function wp_remote_retrieve_header(&$response, $header) { + if ( is_wp_error($response) || ! isset($response['headers']) || ! is_array($response['headers'])) + return ''; + + if ( array_key_exists($header, $response['headers']) ) + return $response['headers'][$header]; + + return ''; +} + +/** + * Retrieve only the response code from the raw response. + * + * Will return an empty array if incorrect parameter value is given. + * + * @since 2.7.0 + * + * @param array $response HTTP response. + * @return string the response code. Empty string on incorrect parameter given. + */ +function wp_remote_retrieve_response_code(&$response) { + if ( is_wp_error($response) || ! isset($response['response']) || ! is_array($response['response'])) + return ''; + + return $response['response']['code']; +} + +/** + * Retrieve only the response message from the raw response. + * + * Will return an empty array if incorrect parameter value is given. + * + * @since 2.7.0 + * + * @param array $response HTTP response. + * @return string The response message. Empty string on incorrect parameter given. + */ +function wp_remote_retrieve_response_message(&$response) { + if ( is_wp_error($response) || ! isset($response['response']) || ! is_array($response['response'])) + return ''; + + return $response['response']['message']; +} + +/** + * Retrieve only the body from the raw response. + * + * @since 2.7.0 + * + * @param array $response HTTP response. + * @return string The body of the response. Empty string if no body or incorrect parameter given. + */ +function wp_remote_retrieve_body(&$response) { + if ( is_wp_error($response) || ! isset($response['body']) ) + return ''; + + return $response['body']; +} + +/** + * Determines if there is an HTTP Transport that can process this request. + * + * @since 3.2.0 + * + * @param array $capabilities Array of capabilities to test or a wp_remote_request() $args array. + * @param string $url Optional. If given, will check if the URL requires SSL and adds that requirement to the capabilities array. + * + * @return bool + */ +function wp_http_supports( $capabilities = array(), $url = null ) { + $objFetchSite = _wp_http_get_object(); + + $capabilities = wp_parse_args( $capabilities ); + + $count = count( $capabilities ); + + // If we have a numeric $capabilities array, spoof a wp_remote_request() associative $args array + if ( $count && count( array_filter( array_keys( $capabilities ), 'is_numeric' ) ) == $count ) { + $capabilities = array_combine( array_values( $capabilities ), array_fill( 0, $count, true ) ); + } + + if ( $url && !isset( $capabilities['ssl'] ) ) { + $scheme = parse_url( $url, PHP_URL_SCHEME ); + if ( 'https' == $scheme || 'ssl' == $scheme ) { + $capabilities['ssl'] = true; + } + } + + return (bool) $objFetchSite->_get_first_available_transport( $capabilities ); +} + +/** + * Get the HTTP Origin of the current request. + * + * @since 3.4.0 + * + * @return string URL of the origin. Empty string if no origin. + */ +function get_http_origin() { + $origin = ''; + if ( ! empty ( $_SERVER[ 'HTTP_ORIGIN' ] ) ) + $origin = $_SERVER[ 'HTTP_ORIGIN' ]; + + /** + * Change the origin of an HTTP request. + * + * @since 3.4.0 + * + * @param string $origin The original origin for the request. + */ + return apply_filters( 'http_origin', $origin ); +} + +/** + * Retrieve list of allowed HTTP origins. + * + * @since 3.4.0 + * + * @return array Array of origin URLs. + */ +function get_allowed_http_origins() { + $admin_origin = parse_url( admin_url() ); + $home_origin = parse_url( home_url() ); + + // @todo preserve port? + $allowed_origins = array_unique( array( + 'http://' . $admin_origin[ 'host' ], + 'https://' . $admin_origin[ 'host' ], + 'http://' . $home_origin[ 'host' ], + 'https://' . $home_origin[ 'host' ], + ) ); + + /** + * Change the origin types allowed for HTTP requests. + * + * @since 3.4.0 + * + * @param array $allowed_origins { + * Default allowed HTTP origins. + * @type string Non-secure URL for admin origin. + * @type string Secure URL for admin origin. + * @type string Non-secure URL for home origin. + * @type string Secure URL for home origin. + * } + */ + return apply_filters( 'allowed_http_origins' , $allowed_origins ); +} + +/** + * Determines if the HTTP origin is an authorized one. + * + * @since 3.4.0 + * + * @param string Origin URL. If not provided, the value of get_http_origin() is used. + * @return bool True if the origin is allowed. False otherwise. + */ +function is_allowed_http_origin( $origin = null ) { + $origin_arg = $origin; + + if ( null === $origin ) + $origin = get_http_origin(); + + if ( $origin && ! in_array( $origin, get_allowed_http_origins() ) ) + $origin = ''; + + /** + * Change the allowed HTTP origin result. + * + * @since 3.4.0 + * + * @param string $origin Result of check for allowed origin. + * @param string $origin_arg original origin string passed into is_allowed_http_origin function. + */ + return apply_filters( 'allowed_http_origin', $origin, $origin_arg ); +} + +/** + * Send Access-Control-Allow-Origin and related headers if the current request + * is from an allowed origin. + * + * If the request is an OPTIONS request, the script exits with either access + * control headers sent, or a 403 response if the origin is not allowed. For + * other request methods, you will receive a return value. + * + * @since 3.4.0 + * + * @return bool|string Returns the origin URL if headers are sent. Returns false + * if headers are not sent. + */ +function send_origin_headers() { + $origin = get_http_origin(); + + if ( is_allowed_http_origin( $origin ) ) { + @header( 'Access-Control-Allow-Origin: ' . $origin ); + @header( 'Access-Control-Allow-Credentials: true' ); + if ( 'OPTIONS' === $_SERVER['REQUEST_METHOD'] ) + exit; + return $origin; + } + + if ( 'OPTIONS' === $_SERVER['REQUEST_METHOD'] ) { + status_header( 403 ); + exit; + } + + return false; +} + +/** + * Validate a URL for safe use in the HTTP API. + * + * @since 3.5.2 + * + * @return mixed URL or false on failure. + */ +function wp_http_validate_url( $url ) { + $url = wp_kses_bad_protocol( $url, array( 'http', 'https' ) ); + if ( ! $url ) + return false; + + $parsed_url = @parse_url( $url ); + if ( ! $parsed_url || empty( $parsed_url['host'] ) ) + return false; + + if ( isset( $parsed_url['user'] ) || isset( $parsed_url['pass'] ) ) + return false; + + if ( false !== strpos( $parsed_url['host'], ':' ) ) + return false; + + $parsed_home = @parse_url( get_option( 'home' ) ); + + $same_host = strtolower( $parsed_home['host'] ) === strtolower( $parsed_url['host'] ); + + if ( ! $same_host ) { + $host = trim( $parsed_url['host'], '.' ); + if ( preg_match( '#^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $host ) ) { + $ip = $host; + } else { + $ip = gethostbyname( $host ); + if ( $ip === $host ) // Error condition for gethostbyname() + $ip = false; + } + if ( $ip ) { + $parts = array_map( 'intval', explode( '.', $ip ) ); + if ( '127.0.0.1' === $ip + || ( 10 === $parts[0] ) + || ( 172 === $parts[0] && 16 <= $parts[1] && 31 >= $parts[1] ) + || ( 192 === $parts[0] && 168 === $parts[1] ) + ) { + // If host appears local, reject unless specifically allowed. + /** + * Check if HTTP request is external or not. + * + * Allows to change and allow external requests for the HTTP request. + * + * @since 3.6.0 + * + * @param bool false Whether HTTP request is external or not. + * @param string $host IP of the requested host. + * @param string $url URL of the requested host. + */ + if ( ! apply_filters( 'http_request_host_is_external', false, $host, $url ) ) + return false; + } + } + } + + if ( empty( $parsed_url['port'] ) ) + return $url; + + $port = $parsed_url['port']; + if ( 80 === $port || 443 === $port || 8080 === $port ) + return $url; + + if ( $parsed_home && $same_host && $parsed_home['port'] === $port ) + return $url; + + return false; +} + +/** + * Whitelists allowed redirect hosts for safe HTTP requests as well. + * + * Attached to the http_request_host_is_external filter. + * + * @since 3.6.0 + * + * @param bool $is_external + * @param string $host + * @return bool + */ +function allowed_http_request_hosts( $is_external, $host ) { + if ( ! $is_external && wp_validate_redirect( 'http://' . $host ) ) + $is_external = true; + return $is_external; +} + +/** + * Whitelists any domain in a multisite installation for safe HTTP requests. + * + * Attached to the http_request_host_is_external filter. + * + * @since 3.6.0 + * + * @param bool $is_external + * @param string $host + * @return bool + */ +function ms_allowed_http_request_hosts( $is_external, $host ) { + global $wpdb; + static $queried = array(); + if ( $is_external ) + return $is_external; + if ( $host === get_current_site()->domain ) + return true; + if ( isset( $queried[ $host ] ) ) + return $queried[ $host ]; + $queried[ $host ] = (bool) $wpdb->get_var( $wpdb->prepare( "SELECT domain FROM $wpdb->blogs WHERE domain = %s LIMIT 1", $host ) ); + return $queried[ $host ]; +} diff --git a/src/wp-includes/images/admin-bar-sprite-2x.png b/src/wp-includes/images/admin-bar-sprite-2x.png new file mode 100644 index 0000000..9accbee Binary files /dev/null and b/src/wp-includes/images/admin-bar-sprite-2x.png differ diff --git a/src/wp-includes/images/admin-bar-sprite.png b/src/wp-includes/images/admin-bar-sprite.png new file mode 100644 index 0000000..744c65a Binary files /dev/null and b/src/wp-includes/images/admin-bar-sprite.png differ diff --git a/src/wp-includes/images/arrow-pointer-blue-2x.png b/src/wp-includes/images/arrow-pointer-blue-2x.png new file mode 100644 index 0000000..ec1f777 Binary files /dev/null and b/src/wp-includes/images/arrow-pointer-blue-2x.png differ diff --git a/src/wp-includes/images/arrow-pointer-blue.png b/src/wp-includes/images/arrow-pointer-blue.png new file mode 100644 index 0000000..65b42fe Binary files /dev/null and b/src/wp-includes/images/arrow-pointer-blue.png differ diff --git a/src/wp-includes/images/blank.gif b/src/wp-includes/images/blank.gif new file mode 100644 index 0000000..e565824 Binary files /dev/null and b/src/wp-includes/images/blank.gif differ diff --git a/src/wp-includes/images/crystal/archive.png b/src/wp-includes/images/crystal/archive.png new file mode 100644 index 0000000..2fe9fec Binary files /dev/null and b/src/wp-includes/images/crystal/archive.png differ diff --git a/src/wp-includes/images/crystal/audio.png b/src/wp-includes/images/crystal/audio.png new file mode 100644 index 0000000..1d347bc Binary files /dev/null and b/src/wp-includes/images/crystal/audio.png differ diff --git a/src/wp-includes/images/crystal/code.png b/src/wp-includes/images/crystal/code.png new file mode 100644 index 0000000..2fa9608 Binary files /dev/null and b/src/wp-includes/images/crystal/code.png differ diff --git a/src/wp-includes/images/crystal/default.png b/src/wp-includes/images/crystal/default.png new file mode 100644 index 0000000..83d80ee Binary files /dev/null and b/src/wp-includes/images/crystal/default.png differ diff --git a/src/wp-includes/images/crystal/document.png b/src/wp-includes/images/crystal/document.png new file mode 100644 index 0000000..a6342cf Binary files /dev/null and b/src/wp-includes/images/crystal/document.png differ diff --git a/src/wp-includes/images/crystal/interactive.png b/src/wp-includes/images/crystal/interactive.png new file mode 100644 index 0000000..687248b Binary files /dev/null and b/src/wp-includes/images/crystal/interactive.png differ diff --git a/src/wp-includes/images/crystal/license.txt b/src/wp-includes/images/crystal/license.txt new file mode 100644 index 0000000..cdabd2f --- /dev/null +++ b/src/wp-includes/images/crystal/license.txt @@ -0,0 +1,9 @@ +Crystal Project Icons +by Everaldo Coelho +http://everaldo.com + +Released under LGPL + +Modified February 2008 +for WordPress +http://wordpress.org \ No newline at end of file diff --git a/src/wp-includes/images/crystal/spreadsheet.png b/src/wp-includes/images/crystal/spreadsheet.png new file mode 100644 index 0000000..402b259 Binary files /dev/null and b/src/wp-includes/images/crystal/spreadsheet.png differ diff --git a/src/wp-includes/images/crystal/text.png b/src/wp-includes/images/crystal/text.png new file mode 100644 index 0000000..3ef6672 Binary files /dev/null and b/src/wp-includes/images/crystal/text.png differ diff --git a/src/wp-includes/images/crystal/video.png b/src/wp-includes/images/crystal/video.png new file mode 100644 index 0000000..bd58b9b Binary files /dev/null and b/src/wp-includes/images/crystal/video.png differ diff --git a/src/wp-includes/images/down_arrow-2x.gif b/src/wp-includes/images/down_arrow-2x.gif new file mode 100644 index 0000000..2408bd5 Binary files /dev/null and b/src/wp-includes/images/down_arrow-2x.gif differ diff --git a/src/wp-includes/images/down_arrow.gif b/src/wp-includes/images/down_arrow.gif new file mode 100644 index 0000000..687b241 Binary files /dev/null and b/src/wp-includes/images/down_arrow.gif differ diff --git a/src/wp-includes/images/icon-pointer-flag-2x.png b/src/wp-includes/images/icon-pointer-flag-2x.png new file mode 100644 index 0000000..99a2c2a Binary files /dev/null and b/src/wp-includes/images/icon-pointer-flag-2x.png differ diff --git a/src/wp-includes/images/icon-pointer-flag.png b/src/wp-includes/images/icon-pointer-flag.png new file mode 100644 index 0000000..6bb48c0 Binary files /dev/null and b/src/wp-includes/images/icon-pointer-flag.png differ diff --git a/src/wp-includes/images/rss-2x.png b/src/wp-includes/images/rss-2x.png new file mode 100644 index 0000000..7b525cf Binary files /dev/null and b/src/wp-includes/images/rss-2x.png differ diff --git a/src/wp-includes/images/rss.png b/src/wp-includes/images/rss.png new file mode 100644 index 0000000..9707305 Binary files /dev/null and b/src/wp-includes/images/rss.png differ diff --git a/src/wp-includes/images/smilies/icon_arrow.gif b/src/wp-includes/images/smilies/icon_arrow.gif new file mode 100644 index 0000000..2880055 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_arrow.gif differ diff --git a/src/wp-includes/images/smilies/icon_biggrin.gif b/src/wp-includes/images/smilies/icon_biggrin.gif new file mode 100644 index 0000000..d352772 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_biggrin.gif differ diff --git a/src/wp-includes/images/smilies/icon_confused.gif b/src/wp-includes/images/smilies/icon_confused.gif new file mode 100644 index 0000000..0c49e06 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_confused.gif differ diff --git a/src/wp-includes/images/smilies/icon_cool.gif b/src/wp-includes/images/smilies/icon_cool.gif new file mode 100644 index 0000000..cead030 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_cool.gif differ diff --git a/src/wp-includes/images/smilies/icon_cry.gif b/src/wp-includes/images/smilies/icon_cry.gif new file mode 100644 index 0000000..7d54b1f Binary files /dev/null and b/src/wp-includes/images/smilies/icon_cry.gif differ diff --git a/src/wp-includes/images/smilies/icon_eek.gif b/src/wp-includes/images/smilies/icon_eek.gif new file mode 100644 index 0000000..5d39781 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_eek.gif differ diff --git a/src/wp-includes/images/smilies/icon_evil.gif b/src/wp-includes/images/smilies/icon_evil.gif new file mode 100644 index 0000000..ab1aa8e Binary files /dev/null and b/src/wp-includes/images/smilies/icon_evil.gif differ diff --git a/src/wp-includes/images/smilies/icon_exclaim.gif b/src/wp-includes/images/smilies/icon_exclaim.gif new file mode 100644 index 0000000..6e50e2e Binary files /dev/null and b/src/wp-includes/images/smilies/icon_exclaim.gif differ diff --git a/src/wp-includes/images/smilies/icon_idea.gif b/src/wp-includes/images/smilies/icon_idea.gif new file mode 100644 index 0000000..a40ae0d Binary files /dev/null and b/src/wp-includes/images/smilies/icon_idea.gif differ diff --git a/src/wp-includes/images/smilies/icon_lol.gif b/src/wp-includes/images/smilies/icon_lol.gif new file mode 100644 index 0000000..374ba15 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_lol.gif differ diff --git a/src/wp-includes/images/smilies/icon_mad.gif b/src/wp-includes/images/smilies/icon_mad.gif new file mode 100644 index 0000000..1f6c3c2 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_mad.gif differ diff --git a/src/wp-includes/images/smilies/icon_mrgreen.gif b/src/wp-includes/images/smilies/icon_mrgreen.gif new file mode 100644 index 0000000..b54cd0f Binary files /dev/null and b/src/wp-includes/images/smilies/icon_mrgreen.gif differ diff --git a/src/wp-includes/images/smilies/icon_neutral.gif b/src/wp-includes/images/smilies/icon_neutral.gif new file mode 100644 index 0000000..4f31156 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_neutral.gif differ diff --git a/src/wp-includes/images/smilies/icon_question.gif b/src/wp-includes/images/smilies/icon_question.gif new file mode 100644 index 0000000..9d07226 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_question.gif differ diff --git a/src/wp-includes/images/smilies/icon_razz.gif b/src/wp-includes/images/smilies/icon_razz.gif new file mode 100644 index 0000000..29da2a2 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_razz.gif differ diff --git a/src/wp-includes/images/smilies/icon_redface.gif b/src/wp-includes/images/smilies/icon_redface.gif new file mode 100644 index 0000000..ad76283 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_redface.gif differ diff --git a/src/wp-includes/images/smilies/icon_rolleyes.gif b/src/wp-includes/images/smilies/icon_rolleyes.gif new file mode 100644 index 0000000..d7f5f2f Binary files /dev/null and b/src/wp-includes/images/smilies/icon_rolleyes.gif differ diff --git a/src/wp-includes/images/smilies/icon_sad.gif b/src/wp-includes/images/smilies/icon_sad.gif new file mode 100644 index 0000000..d2ac78c Binary files /dev/null and b/src/wp-includes/images/smilies/icon_sad.gif differ diff --git a/src/wp-includes/images/smilies/icon_smile.gif b/src/wp-includes/images/smilies/icon_smile.gif new file mode 100644 index 0000000..7b1f6d3 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_smile.gif differ diff --git a/src/wp-includes/images/smilies/icon_surprised.gif b/src/wp-includes/images/smilies/icon_surprised.gif new file mode 100644 index 0000000..cb21424 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_surprised.gif differ diff --git a/src/wp-includes/images/smilies/icon_twisted.gif b/src/wp-includes/images/smilies/icon_twisted.gif new file mode 100644 index 0000000..502fe24 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_twisted.gif differ diff --git a/src/wp-includes/images/smilies/icon_wink.gif b/src/wp-includes/images/smilies/icon_wink.gif new file mode 100644 index 0000000..d148288 Binary files /dev/null and b/src/wp-includes/images/smilies/icon_wink.gif differ diff --git a/src/wp-includes/images/spinner-2x.gif b/src/wp-includes/images/spinner-2x.gif new file mode 100644 index 0000000..1f65928 Binary files /dev/null and b/src/wp-includes/images/spinner-2x.gif differ diff --git a/src/wp-includes/images/spinner.gif b/src/wp-includes/images/spinner.gif new file mode 100644 index 0000000..e319451 Binary files /dev/null and b/src/wp-includes/images/spinner.gif differ diff --git a/src/wp-includes/images/toggle-arrow-2x.png b/src/wp-includes/images/toggle-arrow-2x.png new file mode 100644 index 0000000..a282075 Binary files /dev/null and b/src/wp-includes/images/toggle-arrow-2x.png differ diff --git a/src/wp-includes/images/toggle-arrow.png b/src/wp-includes/images/toggle-arrow.png new file mode 100644 index 0000000..bfb6494 Binary files /dev/null and b/src/wp-includes/images/toggle-arrow.png differ diff --git a/src/wp-includes/images/uploader-icons-2x.png b/src/wp-includes/images/uploader-icons-2x.png new file mode 100644 index 0000000..d40389c Binary files /dev/null and b/src/wp-includes/images/uploader-icons-2x.png differ diff --git a/src/wp-includes/images/uploader-icons.png b/src/wp-includes/images/uploader-icons.png new file mode 100644 index 0000000..b72a074 Binary files /dev/null and b/src/wp-includes/images/uploader-icons.png differ diff --git a/src/wp-includes/images/wlw/wp-comments.png b/src/wp-includes/images/wlw/wp-comments.png new file mode 100644 index 0000000..6bc3d52 Binary files /dev/null and b/src/wp-includes/images/wlw/wp-comments.png differ diff --git a/src/wp-includes/images/wlw/wp-icon.png b/src/wp-includes/images/wlw/wp-icon.png new file mode 100644 index 0000000..c352383 Binary files /dev/null and b/src/wp-includes/images/wlw/wp-icon.png differ diff --git a/src/wp-includes/images/wlw/wp-watermark.png b/src/wp-includes/images/wlw/wp-watermark.png new file mode 100644 index 0000000..c9741fa Binary files /dev/null and b/src/wp-includes/images/wlw/wp-watermark.png differ diff --git a/src/wp-includes/images/wpicons-2x.png b/src/wp-includes/images/wpicons-2x.png new file mode 100644 index 0000000..07390dc Binary files /dev/null and b/src/wp-includes/images/wpicons-2x.png differ diff --git a/src/wp-includes/images/wpicons.png b/src/wp-includes/images/wpicons.png new file mode 100644 index 0000000..8eef01e Binary files /dev/null and b/src/wp-includes/images/wpicons.png differ diff --git a/src/wp-includes/images/wpspin-2x.gif b/src/wp-includes/images/wpspin-2x.gif new file mode 100644 index 0000000..fe2d5c0 Binary files /dev/null and b/src/wp-includes/images/wpspin-2x.gif differ diff --git a/src/wp-includes/images/wpspin.gif b/src/wp-includes/images/wpspin.gif new file mode 100644 index 0000000..e10b97f Binary files /dev/null and b/src/wp-includes/images/wpspin.gif differ diff --git a/src/wp-includes/images/xit-2x.gif b/src/wp-includes/images/xit-2x.gif new file mode 100644 index 0000000..64ab2ce Binary files /dev/null and b/src/wp-includes/images/xit-2x.gif differ diff --git a/src/wp-includes/images/xit.gif b/src/wp-includes/images/xit.gif new file mode 100644 index 0000000..80c251f Binary files /dev/null and b/src/wp-includes/images/xit.gif differ diff --git a/src/wp-includes/js/admin-bar.js b/src/wp-includes/js/admin-bar.js new file mode 100644 index 0000000..912485c --- /dev/null +++ b/src/wp-includes/js/admin-bar.js @@ -0,0 +1,365 @@ +/* jshint loopfunc: true */ +// use jQuery and hoverIntent if loaded +if ( typeof(jQuery) != 'undefined' ) { + if ( typeof(jQuery.fn.hoverIntent) == 'undefined' ) { + /* jshint ignore:start */ + // hoverIntent r6 - Copy of wp-includes/js/hoverIntent.min.js + (function(a){a.fn.hoverIntent=function(m,d,h){var j={interval:100,sensitivity:7,timeout:0};if(typeof m==="object"){j=a.extend(j,m)}else{if(a.isFunction(d)){j=a.extend(j,{over:m,out:d,selector:h})}else{j=a.extend(j,{over:m,out:m,selector:d})}}var l,k,g,f;var e=function(n){l=n.pageX;k=n.pageY};var c=function(o,n){n.hoverIntent_t=clearTimeout(n.hoverIntent_t);if((Math.abs(g-l)+Math.abs(f-k)) .ab-item').bind('keydown.adminbar', function(e){ + if ( e.which != 13 ) + return; + + var target = $(e.target), wrap = target.closest('ab-sub-wrapper'); + + e.stopPropagation(); + e.preventDefault(); + + if ( !wrap.length ) + wrap = $('#wpadminbar .quicklinks'); + + wrap.find('.menupop').removeClass('hover'); + target.parent().toggleClass('hover'); + target.siblings('.ab-sub-wrapper').find('.ab-item').each(refresh); + }).each(refresh); + + $('#wpadminbar .ab-item').bind('keydown.adminbar', function(e){ + if ( e.which != 27 ) + return; + + var target = $(e.target); + + e.stopPropagation(); + e.preventDefault(); + + target.closest('.hover').removeClass('hover').children('.ab-item').focus(); + target.siblings('.ab-sub-wrapper').find('.ab-item').each(refresh); + }); + + $('#wpadminbar').click( function(e) { + if ( e.target.id != 'wpadminbar' && e.target.id != 'wp-admin-bar-top-secondary' ) + return; + + e.preventDefault(); + $('html, body').animate({ scrollTop: 0 }, 'fast'); + }); + + // fix focus bug in WebKit + $('.screen-reader-shortcut').keydown( function(e) { + var id, ua; + + if ( 13 != e.which ) + return; + + id = $( this ).attr( 'href' ); + + ua = navigator.userAgent.toLowerCase(); + + if ( ua.indexOf('applewebkit') != -1 && id && id.charAt(0) == '#' ) { + setTimeout(function () { + $(id).focus(); + }, 100); + } + }); + + // Empty sessionStorage on logging out + if ( 'sessionStorage' in window ) { + $('#wp-admin-bar-logout a').click( function() { + try { + for ( var key in sessionStorage ) { + if ( key.indexOf('wp-autosave-') != -1 ) + sessionStorage.removeItem(key); + } + } catch(e) {} + }); + } + + if ( navigator.userAgent && document.body.className.indexOf( 'no-font-face' ) === -1 && + /Android (1.0|1.1|1.5|1.6|2.0|2.1)|Nokia|Opera Mini|w(eb)?OSBrowser|webOS|UCWEB|Windows Phone OS 7|XBLWP7|ZuneWP7|MSIE 7/.test( navigator.userAgent ) ) { + + document.body.className += ' no-font-face'; + } + }); +} else { + (function(d, w) { + var addEvent = function( obj, type, fn ) { + if ( obj.addEventListener ) + obj.addEventListener(type, fn, false); + else if ( obj.attachEvent ) + obj.attachEvent('on' + type, function() { return fn.call(obj, window.event);}); + }, + + aB, hc = new RegExp('\\bhover\\b', 'g'), q = [], + rselected = new RegExp('\\bselected\\b', 'g'), + + /** + * Get the timeout ID of the given element + */ + getTOID = function(el) { + var i = q.length; + while ( i-- ) { + if ( q[i] && el == q[i][1] ) + return q[i][0]; + } + return false; + }, + + addHoverClass = function(t) { + var i, id, inA, hovering, ul, li, + ancestors = [], + ancestorLength = 0; + + while ( t && t != aB && t != d ) { + if ( 'LI' == t.nodeName.toUpperCase() ) { + ancestors[ ancestors.length ] = t; + id = getTOID(t); + if ( id ) + clearTimeout( id ); + t.className = t.className ? ( t.className.replace(hc, '') + ' hover' ) : 'hover'; + hovering = t; + } + t = t.parentNode; + } + + // Remove any selected classes. + if ( hovering && hovering.parentNode ) { + ul = hovering.parentNode; + if ( ul && 'UL' == ul.nodeName.toUpperCase() ) { + i = ul.childNodes.length; + while ( i-- ) { + li = ul.childNodes[i]; + if ( li != hovering ) + li.className = li.className ? li.className.replace( rselected, '' ) : ''; + } + } + } + + /* remove the hover class for any objects not in the immediate element's ancestry */ + i = q.length; + while ( i-- ) { + inA = false; + ancestorLength = ancestors.length; + while( ancestorLength-- ) { + if ( ancestors[ ancestorLength ] == q[i][1] ) + inA = true; + } + + if ( ! inA ) + q[i][1].className = q[i][1].className ? q[i][1].className.replace(hc, '') : ''; + } + }, + + removeHoverClass = function(t) { + while ( t && t != aB && t != d ) { + if ( 'LI' == t.nodeName.toUpperCase() ) { + (function(t) { + var to = setTimeout(function() { + t.className = t.className ? t.className.replace(hc, '') : ''; + }, 500); + q[q.length] = [to, t]; + })(t); + } + t = t.parentNode; + } + }, + + clickShortlink = function(e) { + var i, l, node, + t = e.target || e.srcElement; + + // Make t the shortlink menu item, or return. + while ( true ) { + // Check if we've gone past the shortlink node, + // or if the user is clicking on the input. + if ( ! t || t == d || t == aB ) + return; + // Check if we've found the shortlink node. + if ( t.id && t.id == 'wp-admin-bar-get-shortlink' ) + break; + t = t.parentNode; + } + + // IE doesn't support preventDefault, and does support returnValue + if ( e.preventDefault ) + e.preventDefault(); + e.returnValue = false; + + if ( -1 == t.className.indexOf('selected') ) + t.className += ' selected'; + + for ( i = 0, l = t.childNodes.length; i < l; i++ ) { + node = t.childNodes[i]; + if ( node.className && -1 != node.className.indexOf('shortlink-input') ) { + node.focus(); + node.select(); + node.onblur = function() { + t.className = t.className ? t.className.replace( rselected, '' ) : ''; + }; + break; + } + } + return false; + }, + + scrollToTop = function(t) { + var distance, speed, step, steps, timer, speed_step; + + // Ensure that the #wpadminbar was the target of the click. + if ( t.id != 'wpadminbar' && t.id != 'wp-admin-bar-top-secondary' ) + return; + + distance = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; + + if ( distance < 1 ) + return; + + speed_step = distance > 800 ? 130 : 100; + speed = Math.min( 12, Math.round( distance / speed_step ) ); + step = distance > 800 ? Math.round( distance / 30 ) : Math.round( distance / 20 ); + steps = []; + timer = 0; + + // Animate scrolling to the top of the page by generating steps to + // the top of the page and shifting to each step at a set interval. + while ( distance ) { + distance -= step; + if ( distance < 0 ) + distance = 0; + steps.push( distance ); + + setTimeout( function() { + window.scrollTo( 0, steps.shift() ); + }, timer * speed ); + + timer++; + } + }; + + addEvent(w, 'load', function() { + aB = d.getElementById('wpadminbar'); + + if ( d.body && aB ) { + d.body.appendChild( aB ); + + if ( aB.className ) + aB.className = aB.className.replace(/nojs/, ''); + + addEvent(aB, 'mouseover', function(e) { + addHoverClass( e.target || e.srcElement ); + }); + + addEvent(aB, 'mouseout', function(e) { + removeHoverClass( e.target || e.srcElement ); + }); + + addEvent(aB, 'click', clickShortlink ); + + addEvent(aB, 'click', function(e) { + scrollToTop( e.target || e.srcElement ); + }); + + addEvent( document.getElementById('wp-admin-bar-logout'), 'click', function() { + if ( 'sessionStorage' in window ) { + try { + for ( var key in sessionStorage ) { + if ( key.indexOf('wp-autosave-') != -1 ) + sessionStorage.removeItem(key); + } + } catch(e) {} + } + }); + } + + if ( w.location.hash ) + w.scrollBy(0,-32); + + if ( navigator.userAgent && document.body.className.indexOf( 'no-font-face' ) === -1 && + /Android (1.0|1.1|1.5|1.6|2.0|2.1)|Nokia|Opera Mini|w(eb)?OSBrowser|webOS|UCWEB|Windows Phone OS 7|XBLWP7|ZuneWP7|MSIE 7/.test( navigator.userAgent ) ) { + + document.body.className += ' no-font-face'; + } + }); + })(document, window); + +} diff --git a/src/wp-includes/js/admin-bar.min.js b/src/wp-includes/js/admin-bar.min.js new file mode 100644 index 0000000..3ad733e --- /dev/null +++ b/src/wp-includes/js/admin-bar.min.js @@ -0,0 +1 @@ +"undefined"!=typeof jQuery?("undefined"==typeof jQuery.fn.hoverIntent&&!function(a){a.fn.hoverIntent=function(b,c,d){var e={interval:100,sensitivity:7,timeout:0};e="object"==typeof b?a.extend(e,b):a.isFunction(c)?a.extend(e,{over:b,out:c,selector:d}):a.extend(e,{over:b,out:b,selector:c});var f,g,h,i,j=function(a){f=a.pageX,g=a.pageY},k=function(b,c){return c.hoverIntent_t=clearTimeout(c.hoverIntent_t),Math.abs(h-f)+Math.abs(i-g) .ab-item").bind("keydown.adminbar",function(c){if(13==c.which){var d=a(c.target),e=d.closest("ab-sub-wrapper");c.stopPropagation(),c.preventDefault(),e.length||(e=a("#wpadminbar .quicklinks")),e.find(".menupop").removeClass("hover"),d.parent().toggleClass("hover"),d.siblings(".ab-sub-wrapper").find(".ab-item").each(b)}}).each(b),a("#wpadminbar .ab-item").bind("keydown.adminbar",function(c){if(27==c.which){var d=a(c.target);c.stopPropagation(),c.preventDefault(),d.closest(".hover").removeClass("hover").children(".ab-item").focus(),d.siblings(".ab-sub-wrapper").find(".ab-item").each(b)}}),a("#wpadminbar").click(function(b){("wpadminbar"==b.target.id||"wp-admin-bar-top-secondary"==b.target.id)&&(b.preventDefault(),a("html, body").animate({scrollTop:0},"fast"))}),a(".screen-reader-shortcut").keydown(function(b){var c,d;13==b.which&&(c=a(this).attr("href"),d=navigator.userAgent.toLowerCase(),-1!=d.indexOf("applewebkit")&&c&&"#"==c.charAt(0)&&setTimeout(function(){a(c).focus()},100))}),"sessionStorage"in window&&a("#wp-admin-bar-logout a").click(function(){try{for(var a in sessionStorage)-1!=a.indexOf("wp-autosave-")&&sessionStorage.removeItem(a)}catch(b){}}),navigator.userAgent&&-1===document.body.className.indexOf("no-font-face")&&/Android (1.0|1.1|1.5|1.6|2.0|2.1)|Nokia|Opera Mini|w(eb)?OSBrowser|webOS|UCWEB|Windows Phone OS 7|XBLWP7|ZuneWP7|MSIE 7/.test(navigator.userAgent)&&(document.body.className+=" no-font-face")})):!function(a,b){var c,d=function(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,function(){return c.call(a,window.event)})},e=new RegExp("\\bhover\\b","g"),f=[],g=new RegExp("\\bselected\\b","g"),h=function(a){for(var b=f.length;b--;)if(f[b]&&a==f[b][1])return f[b][0];return!1},i=function(b){for(var d,i,j,k,l,m,n=[],o=0;b&&b!=c&&b!=a;)"LI"==b.nodeName.toUpperCase()&&(n[n.length]=b,i=h(b),i&&clearTimeout(i),b.className=b.className?b.className.replace(e,"")+" hover":"hover",k=b),b=b.parentNode;if(k&&k.parentNode&&(l=k.parentNode,l&&"UL"==l.nodeName.toUpperCase()))for(d=l.childNodes.length;d--;)m=l.childNodes[d],m!=k&&(m.className=m.className?m.className.replace(g,""):"");for(d=f.length;d--;){for(j=!1,o=n.length;o--;)n[o]==f[d][1]&&(j=!0);j||(f[d][1].className=f[d][1].className?f[d][1].className.replace(e,""):"")}},j=function(b){for(;b&&b!=c&&b!=a;)"LI"==b.nodeName.toUpperCase()&&!function(a){var b=setTimeout(function(){a.className=a.className?a.className.replace(e,""):""},500);f[f.length]=[b,a]}(b),b=b.parentNode},k=function(b){for(var d,e,f,h=b.target||b.srcElement;;){if(!h||h==a||h==c)return;if(h.id&&"wp-admin-bar-get-shortlink"==h.id)break;h=h.parentNode}for(b.preventDefault&&b.preventDefault(),b.returnValue=!1,-1==h.className.indexOf("selected")&&(h.className+=" selected"),d=0,e=h.childNodes.length;e>d;d++)if(f=h.childNodes[d],f.className&&-1!=f.className.indexOf("shortlink-input")){f.focus(),f.select(),f.onblur=function(){h.className=h.className?h.className.replace(g,""):""};break}return!1},l=function(a){var b,c,d,e,f,g;if(!("wpadminbar"!=a.id&&"wp-admin-bar-top-secondary"!=a.id||(b=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,1>b)))for(g=b>800?130:100,c=Math.min(12,Math.round(b/g)),d=b>800?Math.round(b/30):Math.round(b/20),e=[],f=0;b;)b-=d,0>b&&(b=0),e.push(b),setTimeout(function(){window.scrollTo(0,e.shift())},f*c),f++};d(b,"load",function(){c=a.getElementById("wpadminbar"),a.body&&c&&(a.body.appendChild(c),c.className&&(c.className=c.className.replace(/nojs/,"")),d(c,"mouseover",function(a){i(a.target||a.srcElement)}),d(c,"mouseout",function(a){j(a.target||a.srcElement)}),d(c,"click",k),d(c,"click",function(a){l(a.target||a.srcElement)}),d(document.getElementById("wp-admin-bar-logout"),"click",function(){if("sessionStorage"in window)try{for(var a in sessionStorage)-1!=a.indexOf("wp-autosave-")&&sessionStorage.removeItem(a)}catch(b){}})),b.location.hash&&b.scrollBy(0,-32),navigator.userAgent&&-1===document.body.className.indexOf("no-font-face")&&/Android (1.0|1.1|1.5|1.6|2.0|2.1)|Nokia|Opera Mini|w(eb)?OSBrowser|webOS|UCWEB|Windows Phone OS 7|XBLWP7|ZuneWP7|MSIE 7/.test(navigator.userAgent)&&(document.body.className+=" no-font-face")})}(document,window); \ No newline at end of file diff --git a/src/wp-includes/js/autosave.js b/src/wp-includes/js/autosave.js new file mode 100644 index 0000000..6345d36 --- /dev/null +++ b/src/wp-includes/js/autosave.js @@ -0,0 +1,708 @@ +/* global switchEditors, autosaveL10n, tinymce, ajaxurl, wpAjax, makeSlugeditClickable, wpCookies */ +var autosave, autosavePeriodical, fullscreen, doPreview, + autosaveLast = '', + autosaveDelayPreview = false, + notSaved = true, + blockSave = false, + autosaveLockRelease = true; + +jQuery(document).ready( function($) { + + if ( $('#wp-content-wrap').hasClass('tmce-active') && typeof switchEditors != 'undefined' ) { + autosaveLast = wp.autosave.getCompareString({ + post_title : $('#title').val() || '', + content : switchEditors.pre_wpautop( $('#content').val() ) || '', + excerpt : $('#excerpt').val() || '' + }); + } else { + autosaveLast = wp.autosave.getCompareString(); + } + + autosavePeriodical = $.schedule({time: autosaveL10n.autosaveInterval * 1000, func: function() { autosave(); }, repeat: true, protect: true}); + + //Disable autosave after the form has been submitted + $('#post').submit(function() { + $.cancel(autosavePeriodical); + autosaveLockRelease = false; + }); + + $('input[type="submit"], a.submitdelete', '#submitpost').click(function(){ + blockSave = true; + window.onbeforeunload = null; + $(':button, :submit', '#submitpost').each(function(){ + var t = $(this); + if ( t.hasClass('button-primary') ) + t.addClass('button-primary-disabled'); + else + t.addClass('button-disabled'); + }); + if ( $(this).attr('id') == 'publish' ) + $('#major-publishing-actions .spinner').show(); + else + $('#minor-publishing .spinner').show(); + }); + + window.onbeforeunload = function(){ + var editor = typeof(tinymce) != 'undefined' ? tinymce.activeEditor : false, compareString; + + if ( editor && ! editor.isHidden() ) { + if ( editor.isDirty() ) + return autosaveL10n.saveAlert; + } else { + if ( fullscreen && fullscreen.settings.visible ) { + compareString = wp.autosave.getCompareString({ + post_title: $('#wp-fullscreen-title').val() || '', + content: $('#wp_mce_fullscreen').val() || '', + excerpt: $('#excerpt').val() || '' + }); + } else { + compareString = wp.autosave.getCompareString(); + } + + if ( compareString != autosaveLast ) + return autosaveL10n.saveAlert; + } + }; + + $(window).unload( function(e) { + if ( ! autosaveLockRelease ) + return; + + // unload fires (twice) on removing the Thickbox iframe. Make sure we process only the main document unload. + if ( e.target && e.target.nodeName != '#document' ) + return; + + $.ajax({ + type: 'POST', + url: ajaxurl, + async: false, + data: { + action: 'wp-remove-post-lock', + _wpnonce: $('#_wpnonce').val(), + post_ID: $('#post_ID').val(), + active_post_lock: $('#active_post_lock').val() + } + }); + } ); + + // preview + $('#post-preview').click(function(){ + if ( $('#auto_draft').val() == '1' && notSaved ) { + autosaveDelayPreview = true; + autosave(); + return false; + } + doPreview(); + return false; + }); + + doPreview = function() { + $('input#wp-preview').val('dopreview'); + $('form#post').attr('target', 'wp-preview').submit().attr('target', ''); + + /* + * Workaround for WebKit bug preventing a form submitting twice to the same action. + * https://bugs.webkit.org/show_bug.cgi?id=28633 + */ + var ua = navigator.userAgent.toLowerCase(); + if ( ua.indexOf('safari') != -1 && ua.indexOf('chrome') == -1 ) { + $('form#post').attr('action', function(index, value) { + return value + '?t=' + new Date().getTime(); + }); + } + + $('input#wp-preview').val(''); + }; + + // This code is meant to allow tabbing from Title to Post content. + $('#title').on('keydown.editor-focus', function(e) { + var ed; + + if ( e.which != 9 ) + return; + + if ( !e.ctrlKey && !e.altKey && !e.shiftKey ) { + if ( typeof(tinymce) != 'undefined' ) + ed = tinymce.get('content'); + + if ( ed && !ed.isHidden() ) { + $(this).one('keyup', function(){ + $('#content_tbl td.mceToolbar > a').focus(); + }); + } else { + $('#content').focus(); + } + + e.preventDefault(); + } + }); + + // autosave new posts after a title is typed but not if Publish or Save Draft is clicked + if ( '1' == $('#auto_draft').val() ) { + $('#title').blur( function() { + if ( !this.value || $('#auto_draft').val() != '1' ) + return; + delayed_autosave(); + }); + } + + // When connection is lost, keep user from submitting changes. + $(document).on('heartbeat-connection-lost.autosave', function( e, error, status ) { + if ( 'timeout' === error || 503 == status ) { + var notice = $('#lost-connection-notice'); + if ( ! wp.autosave.local.hasStorage ) { + notice.find('.hide-if-no-sessionstorage').hide(); + } + notice.show(); + autosave_disable_buttons(); + } + }).on('heartbeat-connection-restored.autosave', function() { + $('#lost-connection-notice').hide(); + autosave_enable_buttons(); + }); +}); + +function autosave_parse_response( response ) { + var res = wpAjax.parseAjaxResponse(response, 'autosave'), post_id, sup; + + if ( res && res.responses && res.responses.length ) { + if ( res.responses[0].supplemental ) { + sup = res.responses[0].supplemental; + + jQuery.each( sup, function( selector, value ) { + if ( selector.match(/^replace-/) ) + jQuery( '#' + selector.replace('replace-', '') ).val( value ); + }); + } + + // if no errors: add slug UI and update autosave-message + if ( !res.errors ) { + if ( post_id = parseInt( res.responses[0].id, 10 ) ) + autosave_update_slug( post_id ); + + if ( res.responses[0].data ) // update autosave message + jQuery('.autosave-message').text( res.responses[0].data ); + } + } + + return res; +} + +// called when autosaving pre-existing post +function autosave_saved(response) { + blockSave = false; + autosave_parse_response(response); // parse the ajax response + autosave_enable_buttons(); // re-enable disabled form buttons +} + +// called when autosaving new post +function autosave_saved_new(response) { + blockSave = false; + var res = autosave_parse_response(response), post_id; + + if ( res && res.responses.length && !res.errors ) { + // An ID is sent only for real auto-saves, not for autosave=0 "keepalive" saves + post_id = parseInt( res.responses[0].id, 10 ); + + if ( post_id ) { + notSaved = false; + jQuery('#auto_draft').val('0'); // No longer an auto-draft + } + + autosave_enable_buttons(); + + if ( autosaveDelayPreview ) { + autosaveDelayPreview = false; + doPreview(); + } + } else { + autosave_enable_buttons(); // re-enable disabled form buttons + } +} + +function autosave_update_slug(post_id) { + // create slug area only if not already there + if ( 'undefined' != makeSlugeditClickable && jQuery.isFunction(makeSlugeditClickable) && !jQuery('#edit-slug-box > *').size() ) { + jQuery.post( ajaxurl, { + action: 'sample-permalink', + post_id: post_id, + new_title: fullscreen && fullscreen.settings.visible ? jQuery('#wp-fullscreen-title').val() : jQuery('#title').val(), + samplepermalinknonce: jQuery('#samplepermalinknonce').val() + }, + function(data) { + if ( data !== '-1' ) { + var box = jQuery('#edit-slug-box'); + box.html(data); + if (box.hasClass('hidden')) { + box.fadeIn('fast', function () { + box.removeClass('hidden'); + }); + } + makeSlugeditClickable(); + } + } + ); + } +} + +function autosave_loading() { + jQuery('.autosave-message').html(autosaveL10n.savingText); +} + +function autosave_enable_buttons() { + jQuery(document).trigger('autosave-enable-buttons'); + if ( ! wp.heartbeat || ! wp.heartbeat.hasConnectionError() ) { + // delay that a bit to avoid some rare collisions while the DOM is being updated. + setTimeout(function(){ + var parent = jQuery('#submitpost'); + parent.find(':button, :submit').removeAttr('disabled'); + parent.find('.spinner').hide(); + }, 500); + } +} + +function autosave_disable_buttons() { + jQuery(document).trigger('autosave-disable-buttons'); + jQuery('#submitpost').find(':button, :submit').prop('disabled', true); + // Re-enable 5 sec later. Just gives autosave a head start to avoid collisions. + setTimeout( autosave_enable_buttons, 5000 ); +} + +function delayed_autosave() { + setTimeout(function(){ + if ( blockSave ) + return; + autosave(); + }, 200); +} + +autosave = function() { + var post_data = wp.autosave.getPostData(), + compareString, + successCallback; + + blockSave = true; + + // post_data.content cannot be retrieved at the moment + if ( ! post_data.autosave ) + return false; + + // No autosave while thickbox is open (media buttons) + if ( jQuery('#TB_window').css('display') == 'block' ) + return false; + + compareString = wp.autosave.getCompareString( post_data ); + + // Nothing to save or no change. + if ( compareString == autosaveLast ) + return false; + + autosaveLast = compareString; + jQuery(document).triggerHandler('wpcountwords', [ post_data.content ]); + + // Disable buttons until we know the save completed. + autosave_disable_buttons(); + + if ( post_data.auto_draft == '1' ) { + successCallback = autosave_saved_new; // new post + } else { + successCallback = autosave_saved; // pre-existing post + } + + jQuery.ajax({ + data: post_data, + beforeSend: autosave_loading, + type: 'POST', + url: ajaxurl, + success: successCallback + }); + + return true; +}; + +// Autosave in localStorage +// set as simple object/mixin for now +window.wp = window.wp || {}; +wp.autosave = wp.autosave || {}; + +(function($){ +// Returns the data for saving in both localStorage and autosaves to the server +wp.autosave.getPostData = function() { + var ed = typeof tinymce != 'undefined' ? tinymce.activeEditor : null, post_name, parent_id, cats = [], + data = { + action: 'autosave', + autosave: true, + post_id: $('#post_ID').val() || 0, + autosavenonce: $('#autosavenonce').val() || '', + post_type: $('#post_type').val() || '', + post_author: $('#post_author').val() || '', + excerpt: $('#excerpt').val() || '' + }; + + if ( ed && !ed.isHidden() ) { + // Don't run while the tinymce spellcheck is on. It resets all found words. + if ( ed.plugins.spellchecker && ed.plugins.spellchecker.active ) { + data.autosave = false; + return data; + } else { + if ( 'mce_fullscreen' == ed.id ) + tinymce.get('content').setContent(ed.getContent({format : 'raw'}), {format : 'raw'}); + + tinymce.triggerSave(); + } + } + + if ( typeof fullscreen != 'undefined' && fullscreen.settings.visible ) { + data.post_title = $('#wp-fullscreen-title').val() || ''; + data.content = $('#wp_mce_fullscreen').val() || ''; + } else { + data.post_title = $('#title').val() || ''; + data.content = $('#content').val() || ''; + } + + /* + // We haven't been saving tags with autosave since 2.8... Start again? + $('.the-tags').each( function() { + data[this.name] = this.value; + }); + */ + + $('input[id^="in-category-"]:checked').each( function() { + cats.push(this.value); + }); + data.catslist = cats.join(','); + + if ( post_name = $('#post_name').val() ) + data.post_name = post_name; + + if ( parent_id = $('#parent_id').val() ) + data.parent_id = parent_id; + + if ( $('#comment_status').prop('checked') ) + data.comment_status = 'open'; + + if ( $('#ping_status').prop('checked') ) + data.ping_status = 'open'; + + if ( $('#auto_draft').val() == '1' ) + data.auto_draft = '1'; + + return data; +}; + +// Concatenate title, content and excerpt. Used to track changes when auto-saving. +wp.autosave.getCompareString = function( post_data ) { + if ( typeof post_data === 'object' ) { + return ( post_data.post_title || '' ) + '::' + ( post_data.content || '' ) + '::' + ( post_data.excerpt || '' ); + } + + return ( $('#title').val() || '' ) + '::' + ( $('#content').val() || '' ) + '::' + ( $('#excerpt').val() || '' ); +}; + +wp.autosave.local = { + + lastSavedData: '', + blog_id: 0, + hasStorage: false, + + // Check if the browser supports sessionStorage and it's not disabled + checkStorage: function() { + var test = Math.random(), result = false; + + try { + sessionStorage.setItem('wp-test', test); + result = sessionStorage.getItem('wp-test') == test; + sessionStorage.removeItem('wp-test'); + } catch(e) {} + + this.hasStorage = result; + return result; + }, + + /** + * Initialize the local storage + * + * @return mixed False if no sessionStorage in the browser or an Object containing all post_data for this blog + */ + getStorage: function() { + var stored_obj = false; + // Separate local storage containers for each blog_id + if ( this.hasStorage && this.blog_id ) { + stored_obj = sessionStorage.getItem( 'wp-autosave-' + this.blog_id ); + + if ( stored_obj ) + stored_obj = JSON.parse( stored_obj ); + else + stored_obj = {}; + } + + return stored_obj; + }, + + /** + * Set the storage for this blog + * + * Confirms that the data was saved successfully. + * + * @return bool + */ + setStorage: function( stored_obj ) { + var key; + + if ( this.hasStorage && this.blog_id ) { + key = 'wp-autosave-' + this.blog_id; + sessionStorage.setItem( key, JSON.stringify( stored_obj ) ); + return sessionStorage.getItem( key ) !== null; + } + + return false; + }, + + /** + * Get the saved post data for the current post + * + * @return mixed False if no storage or no data or the post_data as an Object + */ + getData: function() { + var stored = this.getStorage(), post_id = $('#post_ID').val(); + + if ( !stored || !post_id ) + return false; + + return stored[ 'post_' + post_id ] || false; + }, + + /** + * Set (save or delete) post data in the storage. + * + * If stored_data evaluates to 'false' the storage key for the current post will be removed + * + * $param stored_data The post data to store or null/false/empty to delete the key + * @return bool + */ + setData: function( stored_data ) { + var stored = this.getStorage(), post_id = $('#post_ID').val(); + + if ( !stored || !post_id ) + return false; + + if ( stored_data ) + stored[ 'post_' + post_id ] = stored_data; + else if ( stored.hasOwnProperty( 'post_' + post_id ) ) + delete stored[ 'post_' + post_id ]; + else + return false; + + return this.setStorage(stored); + }, + + /** + * Save post data for the current post + * + * Runs on a 15 sec. schedule, saves when there are differences in the post title or content. + * When the optional data is provided, updates the last saved post data. + * + * $param data optional Object The post data for saving, minimum 'post_title' and 'content' + * @return bool + */ + save: function( data ) { + var result = false, post_data, compareString; + + if ( ! data ) { + post_data = wp.autosave.getPostData(); + } else { + post_data = this.getData() || {}; + $.extend( post_data, data ); + post_data.autosave = true; + } + + // Cannot get the post data at the moment + if ( ! post_data.autosave ) + return false; + + compareString = wp.autosave.getCompareString( post_data ); + + // If the content, title and excerpt did not change since the last save, don't save again + if ( compareString == this.lastSavedData ) + return false; + + post_data.save_time = (new Date()).getTime(); + post_data.status = $('#post_status').val() || ''; + result = this.setData( post_data ); + + if ( result ) + this.lastSavedData = compareString; + + return result; + }, + + // Initialize and run checkPost() on loading the script (before TinyMCE init) + init: function( settings ) { + var self = this; + + // Check if the browser supports sessionStorage and it's not disabled + if ( ! this.checkStorage() ) + return; + + // Don't run if the post type supports neither 'editor' (textarea#content) nor 'excerpt'. + if ( ! $('#content').length && ! $('#excerpt').length ) + return; + + if ( settings ) + $.extend( this, settings ); + + if ( !this.blog_id ) + this.blog_id = typeof window.autosaveL10n != 'undefined' ? window.autosaveL10n.blog_id : 0; + + $(document).ready( function(){ self.run(); } ); + }, + + // Run on DOM ready + run: function() { + var self = this; + + // Check if the local post data is different than the loaded post data. + this.checkPost(); + + // Set the schedule + this.schedule = $.schedule({ + time: 15 * 1000, + func: function() { wp.autosave.local.save(); }, + repeat: true, + protect: true + }); + + $('form#post').on('submit.autosave-local', function() { + var editor = typeof tinymce != 'undefined' && tinymce.get('content'), post_id = $('#post_ID').val() || 0; + + if ( editor && ! editor.isHidden() ) { + // Last onSubmit event in the editor, needs to run after the content has been moved to the textarea. + editor.onSubmit.add( function() { + wp.autosave.local.save({ + post_title: $('#title').val() || '', + content: $('#content').val() || '', + excerpt: $('#excerpt').val() || '' + }); + }); + } else { + self.save({ + post_title: $('#title').val() || '', + content: $('#content').val() || '', + excerpt: $('#excerpt').val() || '' + }); + } + + wpCookies.set( 'wp-saving-post-' + post_id, 'check' ); + }); + }, + + // Strip whitespace and compare two strings + compare: function( str1, str2 ) { + function remove( string ) { + return string.toString().replace(/[\x20\t\r\n\f]+/g, ''); + } + + return ( remove( str1 || '' ) == remove( str2 || '' ) ); + }, + + /** + * Check if the saved data for the current post (if any) is different than the loaded post data on the screen + * + * Shows a standard message letting the user restore the post data if different. + * + * @return void + */ + checkPost: function() { + var self = this, post_data = this.getData(), content, post_title, excerpt, notice, + post_id = $('#post_ID').val() || 0, cookie = wpCookies.get( 'wp-saving-post-' + post_id ); + + if ( ! post_data ) + return; + + if ( cookie ) { + wpCookies.remove( 'wp-saving-post-' + post_id ); + + if ( cookie == 'saved' ) { + // The post was saved properly, remove old data and bail + this.setData( false ); + return; + } + } + + // There is a newer autosave. Don't show two "restore" notices at the same time. + if ( $('#has-newer-autosave').length ) + return; + + content = $('#content').val() || ''; + post_title = $('#title').val() || ''; + excerpt = $('#excerpt').val() || ''; + + if ( $('#wp-content-wrap').hasClass('tmce-active') && typeof switchEditors != 'undefined' ) + content = switchEditors.pre_wpautop( content ); + + // cookie == 'check' means the post was not saved properly, always show #local-storage-notice + if ( cookie != 'check' && this.compare( content, post_data.content ) && this.compare( post_title, post_data.post_title ) && this.compare( excerpt, post_data.excerpt ) ) { + return; + } + + this.restore_post_data = post_data; + this.undo_post_data = { + content: content, + post_title: post_title, + excerpt: excerpt + }; + + notice = $('#local-storage-notice'); + $('.wrap h2').first().after( notice.addClass('updated').show() ); + + notice.on( 'click', function(e) { + var target = $( e.target ); + + if ( target.hasClass('restore-backup') ) { + self.restorePost( self.restore_post_data ); + target.parent().hide(); + $(this).find('p.undo-restore').show(); + } else if ( target.hasClass('undo-restore-backup') ) { + self.restorePost( self.undo_post_data ); + target.parent().hide(); + $(this).find('p.local-restore').show(); + } + + e.preventDefault(); + }); + }, + + // Restore the current title, content and excerpt from post_data. + restorePost: function( post_data ) { + var editor; + + if ( post_data ) { + // Set the last saved data + this.lastSavedData = wp.autosave.getCompareString( post_data ); + + if ( $('#title').val() != post_data.post_title ) + $('#title').focus().val( post_data.post_title || '' ); + + $('#excerpt').val( post_data.excerpt || '' ); + editor = typeof tinymce != 'undefined' && tinymce.get('content'); + + if ( editor && ! editor.isHidden() && typeof switchEditors != 'undefined' ) { + // Make sure there's an undo level in the editor + editor.undoManager.add(); + editor.setContent( post_data.content ? switchEditors.wpautop( post_data.content ) : '' ); + } else { + // Make sure the Text editor is selected + $('#content-html').click(); + $('#content').val( post_data.content ); + } + + return true; + } + + return false; + } +}; + +wp.autosave.local.init(); + +}(jQuery)); diff --git a/src/wp-includes/js/autosave.min.js b/src/wp-includes/js/autosave.min.js new file mode 100644 index 0000000..492ef04 --- /dev/null +++ b/src/wp-includes/js/autosave.min.js @@ -0,0 +1 @@ +function autosave_parse_response(a){var b,c,d=wpAjax.parseAjaxResponse(a,"autosave");return d&&d.responses&&d.responses.length&&(d.responses[0].supplemental&&(c=d.responses[0].supplemental,jQuery.each(c,function(a,b){a.match(/^replace-/)&&jQuery("#"+a.replace("replace-","")).val(b)})),d.errors||((b=parseInt(d.responses[0].id,10))&&autosave_update_slug(b),d.responses[0].data&&jQuery(".autosave-message").text(d.responses[0].data))),d}function autosave_saved(a){blockSave=!1,autosave_parse_response(a),autosave_enable_buttons()}function autosave_saved_new(a){blockSave=!1;var b,c=autosave_parse_response(a);c&&c.responses.length&&!c.errors?(b=parseInt(c.responses[0].id,10),b&&(notSaved=!1,jQuery("#auto_draft").val("0")),autosave_enable_buttons(),autosaveDelayPreview&&(autosaveDelayPreview=!1,doPreview())):autosave_enable_buttons()}function autosave_update_slug(a){"undefined"!=makeSlugeditClickable&&jQuery.isFunction(makeSlugeditClickable)&&!jQuery("#edit-slug-box > *").size()&&jQuery.post(ajaxurl,{action:"sample-permalink",post_id:a,new_title:fullscreen&&fullscreen.settings.visible?jQuery("#wp-fullscreen-title").val():jQuery("#title").val(),samplepermalinknonce:jQuery("#samplepermalinknonce").val()},function(a){if("-1"!==a){var b=jQuery("#edit-slug-box");b.html(a),b.hasClass("hidden")&&b.fadeIn("fast",function(){b.removeClass("hidden")}),makeSlugeditClickable()}})}function autosave_loading(){jQuery(".autosave-message").html(autosaveL10n.savingText)}function autosave_enable_buttons(){jQuery(document).trigger("autosave-enable-buttons"),wp.heartbeat&&wp.heartbeat.hasConnectionError()||setTimeout(function(){var a=jQuery("#submitpost");a.find(":button, :submit").removeAttr("disabled"),a.find(".spinner").hide()},500)}function autosave_disable_buttons(){jQuery(document).trigger("autosave-disable-buttons"),jQuery("#submitpost").find(":button, :submit").prop("disabled",!0),setTimeout(autosave_enable_buttons,5e3)}function delayed_autosave(){setTimeout(function(){blockSave||autosave()},200)}var autosave,autosavePeriodical,fullscreen,doPreview,autosaveLast="",autosaveDelayPreview=!1,notSaved=!0,blockSave=!1,autosaveLockRelease=!0;jQuery(document).ready(function(a){autosaveLast=a("#wp-content-wrap").hasClass("tmce-active")&&"undefined"!=typeof switchEditors?wp.autosave.getCompareString({post_title:a("#title").val()||"",content:switchEditors.pre_wpautop(a("#content").val())||"",excerpt:a("#excerpt").val()||""}):wp.autosave.getCompareString(),autosavePeriodical=a.schedule({time:1e3*autosaveL10n.autosaveInterval,func:function(){autosave()},repeat:!0,protect:!0}),a("#post").submit(function(){a.cancel(autosavePeriodical),autosaveLockRelease=!1}),a('input[type="submit"], a.submitdelete',"#submitpost").click(function(){blockSave=!0,window.onbeforeunload=null,a(":button, :submit","#submitpost").each(function(){var b=a(this);b.hasClass("button-primary")?b.addClass("button-primary-disabled"):b.addClass("button-disabled")}),"publish"==a(this).attr("id")?a("#major-publishing-actions .spinner").show():a("#minor-publishing .spinner").show()}),window.onbeforeunload=function(){var b,c="undefined"!=typeof tinymce?tinymce.activeEditor:!1;if(c&&!c.isHidden()){if(c.isDirty())return autosaveL10n.saveAlert}else if(b=fullscreen&&fullscreen.settings.visible?wp.autosave.getCompareString({post_title:a("#wp-fullscreen-title").val()||"",content:a("#wp_mce_fullscreen").val()||"",excerpt:a("#excerpt").val()||""}):wp.autosave.getCompareString(),b!=autosaveLast)return autosaveL10n.saveAlert},a(window).unload(function(b){autosaveLockRelease&&(b.target&&"#document"!=b.target.nodeName||a.ajax({type:"POST",url:ajaxurl,async:!1,data:{action:"wp-remove-post-lock",_wpnonce:a("#_wpnonce").val(),post_ID:a("#post_ID").val(),active_post_lock:a("#active_post_lock").val()}}))}),a("#post-preview").click(function(){return"1"==a("#auto_draft").val()&¬Saved?(autosaveDelayPreview=!0,autosave(),!1):(doPreview(),!1)}),doPreview=function(){a("input#wp-preview").val("dopreview"),a("form#post").attr("target","wp-preview").submit().attr("target","");var b=navigator.userAgent.toLowerCase();-1!=b.indexOf("safari")&&-1==b.indexOf("chrome")&&a("form#post").attr("action",function(a,b){return b+"?t="+(new Date).getTime()}),a("input#wp-preview").val("")},a("#title").on("keydown.editor-focus",function(b){var c;9==b.which&&(b.ctrlKey||b.altKey||b.shiftKey||("undefined"!=typeof tinymce&&(c=tinymce.get("content")),c&&!c.isHidden()?a(this).one("keyup",function(){a("#content_tbl td.mceToolbar > a").focus()}):a("#content").focus(),b.preventDefault()))}),"1"==a("#auto_draft").val()&&a("#title").blur(function(){this.value&&"1"==a("#auto_draft").val()&&delayed_autosave()}),a(document).on("heartbeat-connection-lost.autosave",function(b,c,d){if("timeout"===c||503==d){var e=a("#lost-connection-notice");wp.autosave.local.hasStorage||e.find(".hide-if-no-sessionstorage").hide(),e.show(),autosave_disable_buttons()}}).on("heartbeat-connection-restored.autosave",function(){a("#lost-connection-notice").hide(),autosave_enable_buttons()})}),autosave=function(){var a,b,c=wp.autosave.getPostData();return blockSave=!0,c.autosave?"block"==jQuery("#TB_window").css("display")?!1:(a=wp.autosave.getCompareString(c),a==autosaveLast?!1:(autosaveLast=a,jQuery(document).triggerHandler("wpcountwords",[c.content]),autosave_disable_buttons(),b="1"==c.auto_draft?autosave_saved_new:autosave_saved,jQuery.ajax({data:c,beforeSend:autosave_loading,type:"POST",url:ajaxurl,success:b}),!0)):!1},window.wp=window.wp||{},wp.autosave=wp.autosave||{},function(a){wp.autosave.getPostData=function(){var b,c,d="undefined"!=typeof tinymce?tinymce.activeEditor:null,e=[],f={action:"autosave",autosave:!0,post_id:a("#post_ID").val()||0,autosavenonce:a("#autosavenonce").val()||"",post_type:a("#post_type").val()||"",post_author:a("#post_author").val()||"",excerpt:a("#excerpt").val()||""};if(d&&!d.isHidden()){if(d.plugins.spellchecker&&d.plugins.spellchecker.active)return f.autosave=!1,f;"mce_fullscreen"==d.id&&tinymce.get("content").setContent(d.getContent({format:"raw"}),{format:"raw"}),tinymce.triggerSave()}return"undefined"!=typeof fullscreen&&fullscreen.settings.visible?(f.post_title=a("#wp-fullscreen-title").val()||"",f.content=a("#wp_mce_fullscreen").val()||""):(f.post_title=a("#title").val()||"",f.content=a("#content").val()||""),a('input[id^="in-category-"]:checked').each(function(){e.push(this.value)}),f.catslist=e.join(","),(b=a("#post_name").val())&&(f.post_name=b),(c=a("#parent_id").val())&&(f.parent_id=c),a("#comment_status").prop("checked")&&(f.comment_status="open"),a("#ping_status").prop("checked")&&(f.ping_status="open"),"1"==a("#auto_draft").val()&&(f.auto_draft="1"),f},wp.autosave.getCompareString=function(b){return"object"==typeof b?(b.post_title||"")+"::"+(b.content||"")+"::"+(b.excerpt||""):(a("#title").val()||"")+"::"+(a("#content").val()||"")+"::"+(a("#excerpt").val()||"")},wp.autosave.local={lastSavedData:"",blog_id:0,hasStorage:!1,checkStorage:function(){var a=Math.random(),b=!1;try{sessionStorage.setItem("wp-test",a),b=sessionStorage.getItem("wp-test")==a,sessionStorage.removeItem("wp-test")}catch(c){}return this.hasStorage=b,b},getStorage:function(){var a=!1;return this.hasStorage&&this.blog_id&&(a=sessionStorage.getItem("wp-autosave-"+this.blog_id),a=a?JSON.parse(a):{}),a},setStorage:function(a){var b;return this.hasStorage&&this.blog_id?(b="wp-autosave-"+this.blog_id,sessionStorage.setItem(b,JSON.stringify(a)),null!==sessionStorage.getItem(b)):!1},getData:function(){var b=this.getStorage(),c=a("#post_ID").val();return b&&c?b["post_"+c]||!1:!1},setData:function(b){var c=this.getStorage(),d=a("#post_ID").val();if(!c||!d)return!1;if(b)c["post_"+d]=b;else{if(!c.hasOwnProperty("post_"+d))return!1;delete c["post_"+d]}return this.setStorage(c)},save:function(b){var c,d,e=!1;return b?(c=this.getData()||{},a.extend(c,b),c.autosave=!0):c=wp.autosave.getPostData(),c.autosave?(d=wp.autosave.getCompareString(c),d==this.lastSavedData?!1:(c.save_time=(new Date).getTime(),c.status=a("#post_status").val()||"",e=this.setData(c),e&&(this.lastSavedData=d),e)):!1},init:function(b){var c=this;this.checkStorage()&&(a("#content").length||a("#excerpt").length)&&(b&&a.extend(this,b),this.blog_id||(this.blog_id="undefined"!=typeof window.autosaveL10n?window.autosaveL10n.blog_id:0),a(document).ready(function(){c.run()}))},run:function(){var b=this;this.checkPost(),this.schedule=a.schedule({time:15e3,func:function(){wp.autosave.local.save()},repeat:!0,protect:!0}),a("form#post").on("submit.autosave-local",function(){var c="undefined"!=typeof tinymce&&tinymce.get("content"),d=a("#post_ID").val()||0;c&&!c.isHidden()?c.onSubmit.add(function(){wp.autosave.local.save({post_title:a("#title").val()||"",content:a("#content").val()||"",excerpt:a("#excerpt").val()||""})}):b.save({post_title:a("#title").val()||"",content:a("#content").val()||"",excerpt:a("#excerpt").val()||""}),wpCookies.set("wp-saving-post-"+d,"check")})},compare:function(a,b){function c(a){return a.toString().replace(/[\x20\t\r\n\f]+/g,"")}return c(a||"")==c(b||"")},checkPost:function(){var b,c,d,e,f=this,g=this.getData(),h=a("#post_ID").val()||0,i=wpCookies.get("wp-saving-post-"+h);if(g)return i&&(wpCookies.remove("wp-saving-post-"+h),"saved"==i)?(this.setData(!1),void 0):(a("#has-newer-autosave").length||(b=a("#content").val()||"",c=a("#title").val()||"",d=a("#excerpt").val()||"",a("#wp-content-wrap").hasClass("tmce-active")&&"undefined"!=typeof switchEditors&&(b=switchEditors.pre_wpautop(b)),"check"!=i&&this.compare(b,g.content)&&this.compare(c,g.post_title)&&this.compare(d,g.excerpt)||(this.restore_post_data=g,this.undo_post_data={content:b,post_title:c,excerpt:d},e=a("#local-storage-notice"),a(".wrap h2").first().after(e.addClass("updated").show()),e.on("click",function(b){var c=a(b.target);c.hasClass("restore-backup")?(f.restorePost(f.restore_post_data),c.parent().hide(),a(this).find("p.undo-restore").show()):c.hasClass("undo-restore-backup")&&(f.restorePost(f.undo_post_data),c.parent().hide(),a(this).find("p.local-restore").show()),b.preventDefault()}))),void 0)},restorePost:function(b){var c;return b?(this.lastSavedData=wp.autosave.getCompareString(b),a("#title").val()!=b.post_title&&a("#title").focus().val(b.post_title||""),a("#excerpt").val(b.excerpt||""),c="undefined"!=typeof tinymce&&tinymce.get("content"),c&&!c.isHidden()&&"undefined"!=typeof switchEditors?(c.undoManager.add(),c.setContent(b.content?switchEditors.wpautop(b.content):"")):(a("#content-html").click(),a("#content").val(b.content)),!0):!1}},wp.autosave.local.init()}(jQuery); \ No newline at end of file diff --git a/src/wp-includes/js/backbone.min.js b/src/wp-includes/js/backbone.min.js new file mode 100644 index 0000000..8555eca --- /dev/null +++ b/src/wp-includes/js/backbone.min.js @@ -0,0 +1,7 @@ +// Backbone.js 1.0.0 + +// (c) 2010-2013 Jeremy Ashkenas, DocumentCloud Inc. +// Backbone may be freely distributed under the MIT license. +// For all details and documentation: +// http://backbonejs.org +(function(){var t=this;var e=t.Backbone;var i=[];var r=i.push;var s=i.slice;var n=i.splice;var a;if(typeof exports!=="undefined"){a=exports}else{a=t.Backbone={}}a.VERSION="1.0.0";var h=t._;if(!h&&typeof require!=="undefined")h=require("underscore");a.$=t.jQuery||t.Zepto||t.ender||t.$;a.noConflict=function(){t.Backbone=e;return this};a.emulateHTTP=false;a.emulateJSON=false;var o=a.Events={on:function(t,e,i){if(!l(this,"on",t,[e,i])||!e)return this;this._events||(this._events={});var r=this._events[t]||(this._events[t]=[]);r.push({callback:e,context:i,ctx:i||this});return this},once:function(t,e,i){if(!l(this,"once",t,[e,i])||!e)return this;var r=this;var s=h.once(function(){r.off(t,s);e.apply(this,arguments)});s._callback=e;return this.on(t,s,i)},off:function(t,e,i){var r,s,n,a,o,u,c,f;if(!this._events||!l(this,"off",t,[e,i]))return this;if(!t&&!e&&!i){this._events={};return this}a=t?[t]:h.keys(this._events);for(o=0,u=a.length;o").attr(t);this.setElement(e,false)}else{this.setElement(h.result(this,"el"),false)}}});a.sync=function(t,e,i){var r=k[t];h.defaults(i||(i={}),{emulateHTTP:a.emulateHTTP,emulateJSON:a.emulateJSON});var s={type:r,dataType:"json"};if(!i.url){s.url=h.result(e,"url")||U()}if(i.data==null&&e&&(t==="create"||t==="update"||t==="patch")){s.contentType="application/json";s.data=JSON.stringify(i.attrs||e.toJSON(i))}if(i.emulateJSON){s.contentType="application/x-www-form-urlencoded";s.data=s.data?{model:s.data}:{}}if(i.emulateHTTP&&(r==="PUT"||r==="DELETE"||r==="PATCH")){s.type="POST";if(i.emulateJSON)s.data._method=r;var n=i.beforeSend;i.beforeSend=function(t){t.setRequestHeader("X-HTTP-Method-Override",r);if(n)return n.apply(this,arguments)}}if(s.type!=="GET"&&!i.emulateJSON){s.processData=false}if(s.type==="PATCH"&&window.ActiveXObject&&!(window.external&&window.external.msActiveXFilteringEnabled)){s.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}var o=i.xhr=a.ajax(h.extend(s,i));e.trigger("request",e,o,i);return o};var k={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};a.ajax=function(){return a.$.ajax.apply(a.$,arguments)};var S=a.Router=function(t){t||(t={});if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var $=/\((.*?)\)/g;var T=/(\(\?)?:\w+/g;var H=/\*\w+/g;var A=/[\-{}\[\]+?.,\\\^$|#\s]/g;h.extend(S.prototype,o,{initialize:function(){},route:function(t,e,i){if(!h.isRegExp(t))t=this._routeToRegExp(t);if(h.isFunction(e)){i=e;e=""}if(!i)i=this[e];var r=this;a.history.route(t,function(s){var n=r._extractParameters(t,s);i&&i.apply(r,n);r.trigger.apply(r,["route:"+e].concat(n));r.trigger("route",e,n);a.history.trigger("route",r,e,n)});return this},navigate:function(t,e){a.history.navigate(t,e);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=h.result(this,"routes");var t,e=h.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(A,"\\$&").replace($,"(?:$1)?").replace(T,function(t,e){return e?t:"([^/]+)"}).replace(H,"(.*?)");return new RegExp("^"+t+"$")},_extractParameters:function(t,e){var i=t.exec(e).slice(1);return h.map(i,function(t){return t?decodeURIComponent(t):null})}});var I=a.History=function(){this.handlers=[];h.bindAll(this,"checkUrl");if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var N=/^[#\/]|\s+$/g;var P=/^\/+|\/+$/g;var O=/msie [\w.]+/;var C=/\/$/;I.started=false;h.extend(I.prototype,o,{interval:50,getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getFragment:function(t,e){if(t==null){if(this._hasPushState||!this._wantsHashChange||e){t=this.location.pathname;var i=this.root.replace(C,"");if(!t.indexOf(i))t=t.substr(i.length)}else{t=this.getHash()}}return t.replace(N,"")},start:function(t){if(I.started)throw new Error("Backbone.history has already been started");I.started=true;this.options=h.extend({},{root:"/"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var e=this.getFragment();var i=document.documentMode;var r=O.exec(navigator.userAgent.toLowerCase())&&(!i||i<=7);this.root=("/"+this.root+"/").replace(P,"/");if(r&&this._wantsHashChange){this.iframe=a.$(''}c.style.display="none";c.removeAttribute("autoplay");return j},updateNative:function(a, +b){var c=a.htmlMediaElement,d;for(d in mejs.HtmlMediaElement)c[d]=mejs.HtmlMediaElement[d];b.success(c,c);return c}}; +mejs.YouTubeApi={isIframeStarted:false,isIframeLoaded:false,loadIframeApi:function(){if(!this.isIframeStarted){var a=document.createElement("script");a.src="//www.youtube.com/player_api";var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b);this.isIframeStarted=true}},iframeQueue:[],enqueueIframe:function(a){if(this.isLoaded)this.createIframe(a);else{this.loadIframeApi();this.iframeQueue.push(a)}},createIframe:function(a){var b=a.pluginMediaElement,c=new YT.Player(a.containerId, +{height:a.height,width:a.width,videoId:a.videoId,playerVars:{controls:0},events:{onReady:function(){a.pluginMediaElement.pluginApi=c;mejs.MediaPluginBridge.initPlugin(a.pluginId);setInterval(function(){mejs.YouTubeApi.createEvent(c,b,"timeupdate")},250)},onStateChange:function(d){mejs.YouTubeApi.handleStateChange(d.data,c,b)}}})},createEvent:function(a,b,c){c={type:c,target:b};if(a&&a.getDuration){b.currentTime=c.currentTime=a.getCurrentTime();b.duration=c.duration=a.getDuration();c.paused=b.paused; +c.ended=b.ended;c.muted=a.isMuted();c.volume=a.getVolume()/100;c.bytesTotal=a.getVideoBytesTotal();c.bufferedBytes=a.getVideoBytesLoaded();var d=c.bufferedBytes/c.bytesTotal*c.duration;c.target.buffered=c.buffered={start:function(){return 0},end:function(){return d},length:1}}b.dispatchEvent(c.type,c)},iFrameReady:function(){for(this.isIframeLoaded=this.isLoaded=true;this.iframeQueue.length>0;)this.createIframe(this.iframeQueue.pop())},flashPlayers:{},createFlash:function(a){this.flashPlayers[a.pluginId]= +a;var b,c="//www.youtube.com/apiplayer?enablejsapi=1&playerapiid="+a.pluginId+"&version=3&autoplay=0&controls=0&modestbranding=1&loop=0";if(mejs.MediaFeatures.isIE){b=document.createElement("div");a.container.appendChild(b);b.outerHTML=''}else a.container.innerHTML=''},flashReady:function(a){var b=this.flashPlayers[a],c= +document.getElementById(a),d=b.pluginMediaElement;d.pluginApi=d.pluginElement=c;mejs.MediaPluginBridge.initPlugin(a);c.cueVideoById(b.videoId);a=b.containerId+"_callback";window[a]=function(e){mejs.YouTubeApi.handleStateChange(e,c,d)};c.addEventListener("onStateChange",a);setInterval(function(){mejs.YouTubeApi.createEvent(c,d,"timeupdate")},250)},handleStateChange:function(a,b,c){switch(a){case -1:c.paused=true;c.ended=true;mejs.YouTubeApi.createEvent(b,c,"loadedmetadata");break;case 0:c.paused=false; +c.ended=true;mejs.YouTubeApi.createEvent(b,c,"ended");break;case 1:c.paused=false;c.ended=false;mejs.YouTubeApi.createEvent(b,c,"play");mejs.YouTubeApi.createEvent(b,c,"playing");break;case 2:c.paused=true;c.ended=false;mejs.YouTubeApi.createEvent(b,c,"pause");break;case 3:mejs.YouTubeApi.createEvent(b,c,"progress")}}};function onYouTubePlayerAPIReady(){mejs.YouTubeApi.iFrameReady()}function onYouTubePlayerReady(a){mejs.YouTubeApi.flashReady(a)}window.mejs=mejs;window.MediaElement=mejs.MediaElement; +(function(a,b){var c={locale:{language:"",strings:{}},methods:{}};c.locale.getLanguage=function(){return c.locale.language||navigator.language};if(typeof mejsL10n!="undefined")c.locale.language=mejsL10n.language;c.locale.INIT_LANGUAGE=c.locale.getLanguage();c.methods.checkPlain=function(d){var e,f,g={"&":"&",'"':""","<":"<",">":">"};d=String(d);for(e in g)if(g.hasOwnProperty(e)){f=RegExp(e,"g");d=d.replace(f,g[e])}return d};c.methods.formatString=function(d,e){for(var f in e){switch(f.charAt(0)){case "@":e[f]= +c.methods.checkPlain(e[f]);break;case "!":break;default:e[f]=''+c.methods.checkPlain(e[f])+""}d=d.replace(f,e[f])}return d};c.methods.t=function(d,e,f){if(c.locale.strings&&c.locale.strings[f.context]&&c.locale.strings[f.context][d])d=c.locale.strings[f.context][d];if(e)d=c.methods.formatString(d,e);return d};c.t=function(d,e,f){if(typeof d==="string"&&d.length>0){var g=c.locale.getLanguage();f=f||{context:g};return c.methods.t(d,e,f)}else throw{name:"InvalidArgumentException", +message:"First argument is either not a string or empty."};};b.i18n=c})(document,mejs);(function(a){if(typeof mejsL10n!="undefined")a[mejsL10n.language]=mejsL10n.strings})(mejs.i18n.locale.strings);(function(a){a.de={Fullscreen:"Vollbild","Go Fullscreen":"Vollbild an","Turn off Fullscreen":"Vollbild aus",Close:"Schlie\u00dfen"}})(mejs.i18n.locale.strings); +(function(a){a.zh={Fullscreen:"\u5168\u87a2\u5e55","Go Fullscreen":"\u5168\u5c4f\u6a21\u5f0f","Turn off Fullscreen":"\u9000\u51fa\u5168\u5c4f\u6a21\u5f0f",Close:"\u95dc\u9589"}})(mejs.i18n.locale.strings); + +/*! + * MediaElementPlayer + * http://mediaelementjs.com/ + * + * Creates a controller bar for HTML5
                  ').appendTo(b).click(function(g){g.preventDefault();e.paused?e.play():e.pause();return false});e.addEventListener("play",function(){d.removeClass("mejs-play").addClass("mejs-pause")}, +false);e.addEventListener("playing",function(){d.removeClass("mejs-play").addClass("mejs-pause")},false);e.addEventListener("pause",function(){d.removeClass("mejs-pause").addClass("mejs-play")},false);e.addEventListener("paused",function(){d.removeClass("mejs-pause").addClass("mejs-play")},false)}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{stopText:"Stop"});f.extend(MediaElementPlayer.prototype,{buildstop:function(a,b,c,e){f('
                  ').appendTo(b).click(function(){e.paused||e.pause();if(e.currentTime>0){e.setCurrentTime(0);e.pause();b.find(".mejs-time-current").width("0px");b.find(".mejs-time-handle").css("left", +"0px");b.find(".mejs-time-float-current").html(mejs.Utility.secondsToTimeCode(0));b.find(".mejs-currenttime").html(mejs.Utility.secondsToTimeCode(0));c.find(".mejs-poster").show()}})}})})(mejs.$); +(function(f){f.extend(MediaElementPlayer.prototype,{buildprogress:function(a,b,c,e){f('
                  00:00
                  ').appendTo(b);b.find(".mejs-time-buffering").hide();var d= +this,g=b.find(".mejs-time-total");c=b.find(".mejs-time-loaded");var k=b.find(".mejs-time-current"),j=b.find(".mejs-time-handle"),m=b.find(".mejs-time-float"),q=b.find(".mejs-time-float-current"),p=function(h){h=h.pageX;var l=g.offset(),r=g.outerWidth(true),n=0,o=n=0;if(e.duration){if(hr+l.left)h=r+l.left;o=h-l.left;n=o/r;n=n<=0.02?0:n*e.duration;t&&n!==e.currentTime&&e.setCurrentTime(n);if(!mejs.MediaFeatures.hasTouch){m.css("left",o);q.html(mejs.Utility.secondsToTimeCode(n)); +m.show()}}},t=false;g.bind("mousedown",function(h){if(h.which===1){t=true;p(h);d.globalBind("mousemove.dur",function(l){p(l)});d.globalBind("mouseup.dur",function(){t=false;m.hide();d.globalUnbind(".dur")});return false}}).bind("mouseenter",function(){d.globalBind("mousemove.dur",function(h){p(h)});mejs.MediaFeatures.hasTouch||m.show()}).bind("mouseleave",function(){if(!t){d.globalUnbind(".dur");m.hide()}});e.addEventListener("progress",function(h){a.setProgressRail(h);a.setCurrentRail(h)},false); +e.addEventListener("timeupdate",function(h){a.setProgressRail(h);a.setCurrentRail(h)},false);d.loaded=c;d.total=g;d.current=k;d.handle=j},setProgressRail:function(a){var b=a!=undefined?a.target:this.media,c=null;if(b&&b.buffered&&b.buffered.length>0&&b.buffered.end&&b.duration)c=b.buffered.end(0)/b.duration;else if(b&&b.bytesTotal!=undefined&&b.bytesTotal>0&&b.bufferedBytes!=undefined)c=b.bufferedBytes/b.bytesTotal;else if(a&&a.lengthComputable&&a.total!=0)c=a.loaded/a.total;if(c!==null){c=Math.min(1, +Math.max(0,c));this.loaded&&this.total&&this.loaded.width(this.total.width()*c)}},setCurrentRail:function(){if(this.media.currentTime!=undefined&&this.media.duration)if(this.total&&this.handle){var a=Math.round(this.total.width()*this.media.currentTime/this.media.duration),b=a-Math.round(this.handle.outerWidth(true)/2);this.current.width(a);this.handle.css("left",b)}}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{duration:-1,timeAndDurationSeparator:" | "});f.extend(MediaElementPlayer.prototype,{buildcurrent:function(a,b,c,e){f('
                  '+(a.options.alwaysShowHours?"00:":"")+(a.options.showTimecodeFrameCount?"00:00:00":"00:00")+"
                  ").appendTo(b);this.currenttime=this.controls.find(".mejs-currenttime");e.addEventListener("timeupdate",function(){a.updateCurrent()},false)},buildduration:function(a,b, +c,e){if(b.children().last().find(".mejs-currenttime").length>0)f(this.options.timeAndDurationSeparator+''+(this.options.duration>0?mejs.Utility.secondsToTimeCode(this.options.duration,this.options.alwaysShowHours||this.media.duration>3600,this.options.showTimecodeFrameCount,this.options.framesPerSecond||25):(a.options.alwaysShowHours?"00:":"")+(a.options.showTimecodeFrameCount?"00:00:00":"00:00"))+"").appendTo(b.find(".mejs-time"));else{b.find(".mejs-currenttime").parent().addClass("mejs-currenttime-container"); +f('
                  '+(this.options.duration>0?mejs.Utility.secondsToTimeCode(this.options.duration,this.options.alwaysShowHours||this.media.duration>3600,this.options.showTimecodeFrameCount,this.options.framesPerSecond||25):(a.options.alwaysShowHours?"00:":"")+(a.options.showTimecodeFrameCount?"00:00:00":"00:00"))+"
                  ").appendTo(b)}this.durationD=this.controls.find(".mejs-duration");e.addEventListener("timeupdate",function(){a.updateDuration()}, +false)},updateCurrent:function(){if(this.currenttime)this.currenttime.html(mejs.Utility.secondsToTimeCode(this.media.currentTime,this.options.alwaysShowHours||this.media.duration>3600,this.options.showTimecodeFrameCount,this.options.framesPerSecond||25))},updateDuration:function(){this.container.toggleClass("mejs-long-video",this.media.duration>3600);if(this.durationD&&(this.options.duration>0||this.media.duration))this.durationD.html(mejs.Utility.secondsToTimeCode(this.options.duration>0?this.options.duration: +this.media.duration,this.options.alwaysShowHours,this.options.showTimecodeFrameCount,this.options.framesPerSecond||25))}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{muteText:mejs.i18n.t("Mute Toggle"),hideVolumeOnTouchDevices:true,audioVolume:"horizontal",videoVolume:"vertical"});f.extend(MediaElementPlayer.prototype,{buildvolume:function(a,b,c,e){if(!(mejs.MediaFeatures.hasTouch&&this.options.hideVolumeOnTouchDevices)){var d=this,g=d.isVideo?d.options.videoVolume:d.options.audioVolume,k=g=="horizontal"?f('
                  ').appendTo(b):f('
                  ').appendTo(b), +j=d.container.find(".mejs-volume-slider, .mejs-horizontal-volume-slider"),m=d.container.find(".mejs-volume-total, .mejs-horizontal-volume-total"),q=d.container.find(".mejs-volume-current, .mejs-horizontal-volume-current"),p=d.container.find(".mejs-volume-handle, .mejs-horizontal-volume-handle"),t=function(n,o){if(!j.is(":visible")&&typeof o=="undefined"){j.show();t(n,true);j.hide()}else{n=Math.max(0,n);n=Math.min(n,1);n==0?k.removeClass("mejs-mute").addClass("mejs-unmute"):k.removeClass("mejs-unmute").addClass("mejs-mute"); +if(g=="vertical"){var s=m.height(),u=m.position(),v=s-s*n;p.css("top",Math.round(u.top+v-p.height()/2));q.height(s-v);q.css("top",u.top+v)}else{s=m.width();u=m.position();s=s*n;p.css("left",Math.round(u.left+s-p.width()/2));q.width(Math.round(s))}}},h=function(n){var o=null,s=m.offset();if(g=="vertical"){o=m.height();parseInt(m.css("top").replace(/px/,""),10);o=(o-(n.pageY-s.top))/o;if(s.top==0||s.left==0)return}else{o=m.width();o=(n.pageX-s.left)/o}o=Math.max(0,o);o=Math.min(o,1);t(o);o==0?e.setMuted(true): +e.setMuted(false);e.setVolume(o)},l=false,r=false;k.hover(function(){j.show();r=true},function(){r=false;!l&&g=="vertical"&&j.hide()});j.bind("mouseover",function(){r=true}).bind("mousedown",function(n){h(n);d.globalBind("mousemove.vol",function(o){h(o)});d.globalBind("mouseup.vol",function(){l=false;d.globalUnbind(".vol");!r&&g=="vertical"&&j.hide()});l=true;return false});k.find("button").click(function(){e.setMuted(!e.muted)});e.addEventListener("volumechange",function(){if(!l)if(e.muted){t(0); +k.removeClass("mejs-mute").addClass("mejs-unmute")}else{t(e.volume);k.removeClass("mejs-unmute").addClass("mejs-mute")}},false);if(d.container.is(":visible")){t(a.options.startVolume);a.options.startVolume===0&&e.setMuted(true);e.pluginType==="native"&&e.setVolume(a.options.startVolume)}}}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{usePluginFullScreen:true,newWindowCallback:function(){return""},fullscreenText:mejs.i18n.t("Fullscreen")});f.extend(MediaElementPlayer.prototype,{isFullScreen:false,isNativeFullScreen:false,isInIframe:false,buildfullscreen:function(a,b,c,e){if(a.isVideo){a.isInIframe=window.location!=window.parent.location;if(mejs.MediaFeatures.hasTrueNativeFullScreen){c=function(){if(a.isFullScreen)if(mejs.MediaFeatures.isFullScreen()){a.isNativeFullScreen=true;a.setControlsSize()}else{a.isNativeFullScreen= +false;a.exitFullScreen()}};mejs.MediaFeatures.hasMozNativeFullScreen?a.globalBind(mejs.MediaFeatures.fullScreenEventName,c):a.container.bind(mejs.MediaFeatures.fullScreenEventName,c)}var d=this,g=f('
                  ').appendTo(b);if(d.media.pluginType==="native"||!d.options.usePluginFullScreen&&!mejs.MediaFeatures.isFirefox)g.click(function(){mejs.MediaFeatures.hasTrueNativeFullScreen&& +mejs.MediaFeatures.isFullScreen()||a.isFullScreen?a.exitFullScreen():a.enterFullScreen()});else{var k=null;if(function(){var h=document.createElement("x"),l=document.documentElement,r=window.getComputedStyle;if(!("pointerEvents"in h.style))return false;h.style.pointerEvents="auto";h.style.pointerEvents="x";l.appendChild(h);r=r&&r(h,"").pointerEvents==="auto";l.removeChild(h);return!!r}()&&!mejs.MediaFeatures.isOpera){var j=false,m=function(){if(j){for(var h in q)q[h].hide();g.css("pointer-events", +"");d.controls.css("pointer-events","");d.media.removeEventListener("click",d.clickToPlayPauseCallback);j=false}},q={};b=["top","left","right","bottom"];var p,t=function(){var h=g.offset().left-d.container.offset().left,l=g.offset().top-d.container.offset().top,r=g.outerWidth(true),n=g.outerHeight(true),o=d.container.width(),s=d.container.height();for(p in q)q[p].css({position:"absolute",top:0,left:0});q.top.width(o).height(l);q.left.width(h).height(n).css({top:l});q.right.width(o-h-r).height(n).css({top:l, +left:h+r});q.bottom.width(o).height(s-n-l).css({top:l+n})};d.globalBind("resize",function(){t()});p=0;for(c=b.length;p').appendTo(d.container).mouseover(m).hide();g.on("mouseover",function(){if(!d.isFullScreen){var h=g.offset(),l=a.container.offset();e.positionFullscreenButton(h.left-l.left,h.top-l.top,false);g.css("pointer-events","none");d.controls.css("pointer-events","none");d.media.addEventListener("click",d.clickToPlayPauseCallback);for(p in q)q[p].show(); +t();j=true}});e.addEventListener("fullscreenchange",function(){d.isFullScreen=!d.isFullScreen;d.isFullScreen?d.media.removeEventListener("click",d.clickToPlayPauseCallback):d.media.addEventListener("click",d.clickToPlayPauseCallback);m()});d.globalBind("mousemove",function(h){if(j){var l=g.offset();if(h.pageYl.top+g.outerHeight(true)||h.pageXl.left+g.outerWidth(true)){g.css("pointer-events","");d.controls.css("pointer-events","");j=false}}})}else g.on("mouseover", +function(){if(k!==null){clearTimeout(k);delete k}var h=g.offset(),l=a.container.offset();e.positionFullscreenButton(h.left-l.left,h.top-l.top,true)}).on("mouseout",function(){if(k!==null){clearTimeout(k);delete k}k=setTimeout(function(){e.hideFullscreenButton()},1500)})}a.fullscreenBtn=g;d.globalBind("keydown",function(h){if((mejs.MediaFeatures.hasTrueNativeFullScreen&&mejs.MediaFeatures.isFullScreen()||d.isFullScreen)&&h.keyCode==27)a.exitFullScreen()})}},cleanfullscreen:function(a){a.exitFullScreen()}, +containerSizeTimeout:null,enterFullScreen:function(){var a=this;if(!(a.media.pluginType!=="native"&&(mejs.MediaFeatures.isFirefox||a.options.usePluginFullScreen))){f(document.documentElement).addClass("mejs-fullscreen");normalHeight=a.container.height();normalWidth=a.container.width();if(a.media.pluginType==="native")if(mejs.MediaFeatures.hasTrueNativeFullScreen){mejs.MediaFeatures.requestFullScreen(a.container[0]);a.isInIframe&&setTimeout(function c(){if(a.isNativeFullScreen)f(window).width()!== +screen.width?a.exitFullScreen():setTimeout(c,500)},500)}else if(mejs.MediaFeatures.hasSemiNativeFullScreen){a.media.webkitEnterFullscreen();return}if(a.isInIframe){var b=a.options.newWindowCallback(this);if(b!=="")if(mejs.MediaFeatures.hasTrueNativeFullScreen)setTimeout(function(){if(!a.isNativeFullScreen){a.pause();window.open(b,a.id,"top=0,left=0,width="+screen.availWidth+",height="+screen.availHeight+",resizable=yes,scrollbars=no,status=no,toolbar=no")}},250);else{a.pause();window.open(b,a.id, +"top=0,left=0,width="+screen.availWidth+",height="+screen.availHeight+",resizable=yes,scrollbars=no,status=no,toolbar=no");return}}a.container.addClass("mejs-container-fullscreen").width("100%").height("100%");a.containerSizeTimeout=setTimeout(function(){a.container.css({width:"100%",height:"100%"});a.setControlsSize()},500);if(a.media.pluginType==="native")a.$media.width("100%").height("100%");else{a.container.find(".mejs-shim").width("100%").height("100%");a.media.setVideoSize(f(window).width(), +f(window).height())}a.layers.children("div").width("100%").height("100%");a.fullscreenBtn&&a.fullscreenBtn.removeClass("mejs-fullscreen").addClass("mejs-unfullscreen");a.setControlsSize();a.isFullScreen=true}},exitFullScreen:function(){clearTimeout(this.containerSizeTimeout);if(this.media.pluginType!=="native"&&mejs.MediaFeatures.isFirefox)this.media.setFullscreen(false);else{if(mejs.MediaFeatures.hasTrueNativeFullScreen&&(mejs.MediaFeatures.isFullScreen()||this.isFullScreen))mejs.MediaFeatures.cancelFullScreen(); +f(document.documentElement).removeClass("mejs-fullscreen");this.container.removeClass("mejs-container-fullscreen").width(normalWidth).height(normalHeight);if(this.media.pluginType==="native")this.$media.width(normalWidth).height(normalHeight);else{this.container.find(".mejs-shim").width(normalWidth).height(normalHeight);this.media.setVideoSize(normalWidth,normalHeight)}this.layers.children("div").width(normalWidth).height(normalHeight);this.fullscreenBtn.removeClass("mejs-unfullscreen").addClass("mejs-fullscreen"); +this.setControlsSize();this.isFullScreen=false}}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{startLanguage:"",tracksText:mejs.i18n.t("Captions/Subtitles"),hideCaptionsButtonWhenEmpty:true,toggleCaptionsButtonWhenOnlyOne:false,slidesSelector:""});f.extend(MediaElementPlayer.prototype,{hasChapters:false,buildtracks:function(a,b,c,e){if(a.tracks.length!=0){var d;if(this.domNode.textTracks)for(d=this.domNode.textTracks.length-1;d>=0;d--)this.domNode.textTracks[d].mode="hidden";a.chapters=f('
                  ').prependTo(c).hide();a.captions= +f('
                  ').prependTo(c).hide();a.captionsText=a.captions.find(".mejs-captions-text");a.captionsButton=f('
                  ").appendTo(b);for(d=b=0;d0&&b.displayChapters(c)},false);c.kind=="slides"&&b.setupSlides(c)},error:function(){b.loadNextTrack()}})},enableTrackButton:function(a,b){if(b==="")b=mejs.language.codes[a]||a;this.captionsButton.find("input[value="+a+"]").prop("disabled",false).siblings("label").html(b); +this.options.startLanguage==a&&f("#"+this.id+"_captions_"+a).click();this.adjustLanguageBox()},addTrackButton:function(a,b){if(b==="")b=mejs.language.codes[a]||a;this.captionsButton.find("ul").append(f('
                25. "));this.adjustLanguageBox();this.container.find(".mejs-captions-translations option[value="+a+"]").remove()}, +adjustLanguageBox:function(){this.captionsButton.find(".mejs-captions-selector").height(this.captionsButton.find(".mejs-captions-selector ul").outerHeight(true)+this.captionsButton.find(".mejs-captions-translations").outerHeight(true))},checkForTracks:function(){var a=false;if(this.options.hideCaptionsButtonWhenEmpty){for(i=0;i=b.entries.times[a].start&&this.media.currentTime<=b.entries.times[a].stop){this.captionsText.html(b.entries.text[a]);this.captions.show().height(0);return}this.captions.hide()}},setupSlides:function(a){this.slides=a;this.slides.entries.imgs=[this.slides.entries.text.length];this.showSlide(0)},showSlide:function(a){if(!(typeof this.tracks=="undefined"||typeof this.slidesContainer== +"undefined")){var b=this,c=b.slides.entries.text[a],e=b.slides.entries.imgs[a];if(typeof e=="undefined"||typeof e.fadeIn=="undefined")b.slides.entries.imgs[a]=e=f('').on("load",function(){e.appendTo(b.slidesContainer).hide().fadeIn().siblings(":visible").fadeOut()});else!e.is(":visible")&&!e.is(":animated")&&e.fadeIn().siblings(":visible").fadeOut()}},displaySlides:function(){if(typeof this.slides!="undefined"){var a=this.slides,b;for(b=0;b= +a.entries.times[b].start&&this.media.currentTime<=a.entries.times[b].stop){this.showSlide(b);break}}},displayChapters:function(){var a;for(a=0;a100||c==a.entries.times.length- +1&&e+d<100)e=100-d;b.chapters.append(f('
                  '+a.entries.text[c]+''+mejs.Utility.secondsToTimeCode(a.entries.times[c].start)+"–"+mejs.Utility.secondsToTimeCode(a.entries.times[c].stop)+"
                  "));d+=e}b.chapters.find("div.mejs-chapter").click(function(){b.media.setCurrentTime(parseFloat(f(this).attr("rel"))); +b.media.paused&&b.media.play()});b.chapters.show()}});mejs.language={codes:{af:"Afrikaans",sq:"Albanian",ar:"Arabic",be:"Belarusian",bg:"Bulgarian",ca:"Catalan",zh:"Chinese","zh-cn":"Chinese Simplified","zh-tw":"Chinese Traditional",hr:"Croatian",cs:"Czech",da:"Danish",nl:"Dutch",en:"English",et:"Estonian",tl:"Filipino",fi:"Finnish",fr:"French",gl:"Galician",de:"German",el:"Greek",ht:"Haitian Creole",iw:"Hebrew",hi:"Hindi",hu:"Hungarian",is:"Icelandic",id:"Indonesian",ga:"Irish",it:"Italian",ja:"Japanese", +ko:"Korean",lv:"Latvian",lt:"Lithuanian",mk:"Macedonian",ms:"Malay",mt:"Maltese",no:"Norwegian",fa:"Persian",pl:"Polish",pt:"Portuguese",ro:"Romanian",ru:"Russian",sr:"Serbian",sk:"Slovak",sl:"Slovenian",es:"Spanish",sw:"Swahili",sv:"Swedish",tl:"Tagalog",th:"Thai",tr:"Turkish",uk:"Ukrainian",vi:"Vietnamese",cy:"Welsh",yi:"Yiddish"}};mejs.TrackFormatParser={webvvt:{pattern_identifier:/^([a-zA-z]+-)?[0-9]+$/,pattern_timecode:/^([0-9]{2}:[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ([0-9]{2}:[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/, +parse:function(a){var b=0;a=mejs.TrackFormatParser.split2(a,/\r?\n/);for(var c={text:[],times:[]},e,d;b$1");c.text.push(d);c.times.push({start:mejs.Utility.convertSMPTEtoSeconds(e[1])==0?0.2:mejs.Utility.convertSMPTEtoSeconds(e[1]), +stop:mejs.Utility.convertSMPTEtoSeconds(e[3]),settings:e[5]})}}return c}},dfxp:{parse:function(a){a=f(a).filter("tt");var b=0;b=a.children("div").eq(0);var c=b.find("p");b=a.find("#"+b.attr("style"));var e,d;a={text:[],times:[]};if(b.length){d=b.removeAttr("id").get(0).attributes;if(d.length){e={};for(b=0;b$1");a.text.push(d);if(a.times.start==0)a.times.start=2}return a}},split2:function(a,b){return a.split(b)}};if("x\n\ny".split(/\n/gi).length!=3)mejs.TrackFormatParser.split2=function(a,b){var c=[],e="",d;for(d=0;d
                  ').appendTo(f("body")).hide();a.container.bind("contextmenu",function(b){if(a.isContextMenuEnabled){b.preventDefault();a.renderContextMenu(b.clientX-1,b.clientY-1);return false}});a.container.bind("click",function(){a.contextMenu.hide()});a.contextMenu.bind("mouseleave",function(){a.startContextMenuTimer()})},cleancontextmenu:function(a){a.contextMenu.remove()}, +isContextMenuEnabled:true,enableContextMenu:function(){this.isContextMenuEnabled=true},disableContextMenu:function(){this.isContextMenuEnabled=false},contextMenuTimeout:null,startContextMenuTimer:function(){var a=this;a.killContextMenuTimer();a.contextMenuTimer=setTimeout(function(){a.hideContextMenu();a.killContextMenuTimer()},750)},killContextMenuTimer:function(){var a=this.contextMenuTimer;if(a!=null){clearTimeout(a);delete a}},hideContextMenu:function(){this.contextMenu.hide()},renderContextMenu:function(a, +b){for(var c=this,e="",d=c.options.contextMenuItems,g=0,k=d.length;g
                  ';else{var j=d[g].render(c);if(j!=null)e+='
                  '+j+"
                  "}c.contextMenu.empty().append(f(e)).css({top:b,left:a}).show();c.contextMenu.find(".mejs-contextmenu-item").each(function(){var m=f(this),q=parseInt(m.data("itemindex"),10),p=c.options.contextMenuItems[q];typeof p.show!= +"undefined"&&p.show(m,c);m.click(function(){typeof p.click!="undefined"&&p.click(c);c.contextMenu.hide()})});setTimeout(function(){c.killControlsTimer("rev3")},100)}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{postrollCloseText:mejs.i18n.t("Close")});f.extend(MediaElementPlayer.prototype,{buildpostroll:function(a,b,c){var e=this.container.find('link[rel="postroll"]').attr("href");if(typeof e!=="undefined"){a.postroll=f('').prependTo(c).hide();this.media.addEventListener("ended", +function(){f.ajax({dataType:"html",url:e,success:function(d){c.find(".mejs-postroll-layer-content").html(d)}});a.postroll.show()},false)}}})})(mejs.$); + diff --git a/src/wp-includes/js/mediaelement/mediaelementplayer.min.css b/src/wp-includes/js/mediaelement/mediaelementplayer.min.css new file mode 100644 index 0000000..5d88e84 --- /dev/null +++ b/src/wp-includes/js/mediaelement/mediaelementplayer.min.css @@ -0,0 +1 @@ +.mejs-container{position:relative;background:#000;font-family:Helvetica,Arial;text-align:left;vertical-align:top;text-indent:0;}.me-plugin{position:absolute;}.mejs-embed,.mejs-embed body{width:100%;height:100%;margin:0;padding:0;background:#000;overflow:hidden;}.mejs-fullscreen{overflow:hidden!important;}.mejs-container-fullscreen{position:fixed;left:0;top:0;right:0;bottom:0;overflow:hidden;z-index:1000;}.mejs-container-fullscreen .mejs-mediaelement,.mejs-container-fullscreen video{width:100%;height:100%;}.mejs-clear{clear:both;}.mejs-background{position:absolute;top:0;left:0;}.mejs-mediaelement{position:absolute;top:0;left:0;width:100%;height:100%;}.mejs-poster{position:absolute;top:0;left:0;background-size:contain;background-position:50% 50%;background-repeat:no-repeat;}:root .mejs-poster img{display:none;}.mejs-poster img{border:0;padding:0;border:0;}.mejs-overlay{position:absolute;top:0;left:0;}.mejs-overlay-play{cursor:pointer;}.mejs-overlay-button{position:absolute;top:50%;left:50%;width:100px;height:100px;margin:-50px 0 0 -50px;background:url(bigplay.svg) no-repeat;}.no-svg .mejs-overlay-button{background-image:url(bigplay.png);}.mejs-overlay:hover .mejs-overlay-button{background-position:0 -100px;}.mejs-overlay-loading{position:absolute;top:50%;left:50%;width:80px;height:80px;margin:-40px 0 0 -40px;background:#333;background:url(background.png);background:rgba(0,0,0,0.9);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(50,50,50,0.9)),to(rgba(0,0,0,0.9)));background:-webkit-linear-gradient(top,rgba(50,50,50,0.9),rgba(0,0,0,0.9));background:-moz-linear-gradient(top,rgba(50,50,50,0.9),rgba(0,0,0,0.9));background:-o-linear-gradient(top,rgba(50,50,50,0.9),rgba(0,0,0,0.9));background:-ms-linear-gradient(top,rgba(50,50,50,0.9),rgba(0,0,0,0.9));background:linear-gradient(rgba(50,50,50,0.9),rgba(0,0,0,0.9));}.mejs-overlay-loading span{display:block;width:80px;height:80px;background:transparent url(loading.gif) 50% 50% no-repeat;}.mejs-container .mejs-controls{position:absolute;list-style-type:none;margin:0;padding:0;bottom:0;left:0;background:url(background.png);background:rgba(0,0,0,0.7);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(50,50,50,0.7)),to(rgba(0,0,0,0.7)));background:-webkit-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-moz-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-o-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-ms-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:linear-gradient(rgba(50,50,50,0.7),rgba(0,0,0,0.7));height:30px;width:100%;}.mejs-container .mejs-controls div{list-style-type:none;background-image:none;display:block;float:left;margin:0;padding:0;width:26px;height:26px;font-size:11px;line-height:11px;font-family:Helvetica,Arial;border:0;}.mejs-controls .mejs-button button{cursor:pointer;display:block;font-size:0;line-height:0;text-decoration:none;margin:7px 5px;padding:0;position:absolute;height:16px;width:16px;border:0;background:transparent url(controls.svg) no-repeat;}.no-svg .mejs-controls .mejs-button button{background-image:url(controls.png);}.mejs-controls .mejs-button button:focus{outline:solid 1px yellow;}.mejs-container .mejs-controls .mejs-time{color:#fff;display:block;height:17px;width:auto;padding:8px 3px 0 3px;overflow:hidden;text-align:center;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}.mejs-container .mejs-controls .mejs-time span{color:#fff;font-size:11px;line-height:12px;display:block;float:left;margin:1px 2px 0 0;width:auto;}.mejs-controls .mejs-play button{background-position:0 0;}.mejs-controls .mejs-pause button{background-position:0 -16px;}.mejs-controls .mejs-stop button{background-position:-112px 0;}.mejs-controls div.mejs-time-rail{direction:ltr;width:200px;padding-top:5px;}.mejs-controls .mejs-time-rail span{display:block;position:absolute;width:180px;height:10px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;cursor:pointer;}.mejs-controls .mejs-time-rail .mejs-time-total{margin:5px;background:#333;background:rgba(50,50,50,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(30,30,30,0.8)),to(rgba(60,60,60,0.8)));background:-webkit-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-moz-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-o-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-ms-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:linear-gradient(rgba(30,30,30,0.8),rgba(60,60,60,0.8));}.mejs-controls .mejs-time-rail .mejs-time-buffering{width:100%;background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:15px 15px;-moz-background-size:15px 15px;-o-background-size:15px 15px;background-size:15px 15px;-webkit-animation:buffering-stripes 2s linear infinite;-moz-animation:buffering-stripes 2s linear infinite;-ms-animation:buffering-stripes 2s linear infinite;-o-animation:buffering-stripes 2s linear infinite;animation:buffering-stripes 2s linear infinite;}@-webkit-keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}@-moz-keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}@-ms-keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}@-o-keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}@keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}.mejs-controls .mejs-time-rail .mejs-time-loaded{background:#3caac8;background:rgba(60,170,200,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(44,124,145,0.8)),to(rgba(78,183,212,0.8)));background:-webkit-linear-gradient(top,rgba(44,124,145,0.8),rgba(78,183,212,0.8));background:-moz-linear-gradient(top,rgba(44,124,145,0.8),rgba(78,183,212,0.8));background:-o-linear-gradient(top,rgba(44,124,145,0.8),rgba(78,183,212,0.8));background:-ms-linear-gradient(top,rgba(44,124,145,0.8),rgba(78,183,212,0.8));background:linear-gradient(rgba(44,124,145,0.8),rgba(78,183,212,0.8));width:0;}.mejs-controls .mejs-time-rail .mejs-time-current{background:#fff;background:rgba(255,255,255,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(255,255,255,0.9)),to(rgba(200,200,200,0.8)));background:-webkit-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-moz-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-o-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-ms-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:linear-gradient(rgba(255,255,255,0.9),rgba(200,200,200,0.8));width:0;}.mejs-controls .mejs-time-rail .mejs-time-handle{display:none;position:absolute;margin:0;width:10px;background:#fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;cursor:pointer;border:solid 2px #333;top:-2px;text-align:center;}.mejs-controls .mejs-time-rail .mejs-time-float{position:absolute;display:none;background:#eee;width:36px;height:17px;border:solid 1px #333;top:-26px;margin-left:-18px;text-align:center;color:#111;}.mejs-controls .mejs-time-rail .mejs-time-float-current{margin:2px;width:30px;display:block;text-align:center;left:0;}.mejs-controls .mejs-time-rail .mejs-time-float-corner{position:absolute;display:block;width:0;height:0;line-height:0;border:solid 5px #eee;border-color:#eee transparent transparent transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;top:15px;left:13px;}.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float{width:48px;}.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float-current{width:44px;}.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float-corner{left:18px;}.mejs-controls .mejs-fullscreen-button button{background-position:-32px 0;}.mejs-controls .mejs-unfullscreen button{background-position:-32px -16px;}.mejs-controls .mejs-mute button{background-position:-16px -16px;}.mejs-controls .mejs-unmute button{background-position:-16px 0;}.mejs-controls .mejs-volume-button{position:relative;}.mejs-controls .mejs-volume-button .mejs-volume-slider{display:none;height:115px;width:25px;background:url(background.png);background:rgba(50,50,50,0.7);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;top:-115px;left:0;z-index:1;position:absolute;margin:0;}.mejs-controls .mejs-volume-button:hover{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-total{position:absolute;left:11px;top:8px;width:2px;height:100px;background:#ddd;background:rgba(255,255,255,0.5);margin:0;}.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-current{position:absolute;left:11px;top:8px;width:2px;height:100px;background:#ddd;background:rgba(255,255,255,0.9);margin:0;}.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-handle{position:absolute;left:4px;top:-3px;width:16px;height:6px;background:#ddd;background:rgba(255,255,255,0.9);cursor:N-resize;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;margin:0;}.mejs-controls div.mejs-horizontal-volume-slider{height:26px;width:60px;position:relative;}.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total{position:absolute;left:0;top:11px;width:50px;height:8px;margin:0;padding:0;font-size:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:#333;background:rgba(50,50,50,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(30,30,30,0.8)),to(rgba(60,60,60,0.8)));background:-webkit-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-moz-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-o-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-ms-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:linear-gradient(rgba(30,30,30,0.8),rgba(60,60,60,0.8));}.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current{position:absolute;left:0;top:11px;width:50px;height:8px;margin:0;padding:0;font-size:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:#fff;background:rgba(255,255,255,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(255,255,255,0.9)),to(rgba(200,200,200,0.8)));background:-webkit-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-moz-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-o-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-ms-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:linear-gradient(rgba(255,255,255,0.9),rgba(200,200,200,0.8));}.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-handle{display:none;}.mejs-controls .mejs-captions-button{position:relative;}.mejs-controls .mejs-captions-button button{background-position:-48px 0;}.mejs-controls .mejs-captions-button .mejs-captions-selector{visibility:hidden;position:absolute;bottom:26px;right:-10px;width:130px;height:100px;background:url(background.png);background:rgba(50,50,50,0.7);border:solid 1px transparent;padding:10px;overflow:hidden;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.mejs-controls .mejs-captions-button .mejs-captions-selector ul{margin:0;padding:0;display:block;list-style-type:none!important;overflow:hidden;}.mejs-controls .mejs-captions-button .mejs-captions-selector ul li{margin:0 0 6px 0;padding:0;list-style-type:none!important;display:block;color:#fff;overflow:hidden;}.mejs-controls .mejs-captions-button .mejs-captions-selector ul li input{clear:both;float:left;margin:3px 3px 0 5px;}.mejs-controls .mejs-captions-button .mejs-captions-selector ul li label{width:100px;float:left;padding:4px 0 0 0;line-height:15px;font-family:helvetica,arial;font-size:10px;}.mejs-controls .mejs-captions-button .mejs-captions-translations{font-size:10px;margin:0 0 5px 0;}.mejs-chapters{position:absolute;top:0;left:0;-xborder-right:solid 1px #fff;width:10000px;z-index:1;}.mejs-chapters .mejs-chapter{position:absolute;float:left;background:#222;background:rgba(0,0,0,0.7);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(50,50,50,0.7)),to(rgba(0,0,0,0.7)));background:-webkit-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-moz-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-o-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-ms-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:linear-gradient(rgba(50,50,50,0.7),rgba(0,0,0,0.7));filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,startColorstr=#323232,endColorstr=#000000);overflow:hidden;border:0;}.mejs-chapters .mejs-chapter .mejs-chapter-block{font-size:11px;color:#fff;padding:5px;display:block;border-right:solid 1px #333;border-bottom:solid 1px #333;cursor:pointer;}.mejs-chapters .mejs-chapter .mejs-chapter-block-last{border-right:none;}.mejs-chapters .mejs-chapter .mejs-chapter-block:hover{background:#666;background:rgba(102,102,102,0.7);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(102,102,102,0.7)),to(rgba(50,50,50,0.6)));background:-webkit-linear-gradient(top,rgba(102,102,102,0.7),rgba(50,50,50,0.6));background:-moz-linear-gradient(top,rgba(102,102,102,0.7),rgba(50,50,50,0.6));background:-o-linear-gradient(top,rgba(102,102,102,0.7),rgba(50,50,50,0.6));background:-ms-linear-gradient(top,rgba(102,102,102,0.7),rgba(50,50,50,0.6));background:linear-gradient(rgba(102,102,102,0.7),rgba(50,50,50,0.6));filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,startColorstr=#666666,endColorstr=#323232);}.mejs-chapters .mejs-chapter .mejs-chapter-block .ch-title{font-size:12px;font-weight:bold;display:block;white-space:nowrap;text-overflow:ellipsis;margin:0 0 3px 0;line-height:12px;}.mejs-chapters .mejs-chapter .mejs-chapter-block .ch-timespan{font-size:12px;line-height:12px;margin:3px 0 4px 0;display:block;white-space:nowrap;text-overflow:ellipsis;}.mejs-captions-layer{position:absolute;bottom:0;left:0;text-align:center;line-height:22px;font-size:12px;color:#fff;}.mejs-captions-layer a{color:#fff;text-decoration:underline;}.mejs-captions-layer[lang=ar]{font-size:20px;font-weight:normal;}.mejs-captions-position{position:absolute;width:100%;bottom:15px;left:0;}.mejs-captions-position-hover{bottom:45px;}.mejs-captions-text{padding:3px 5px;background:url(background.png);background:rgba(20,20,20,0.8);}.me-cannotplay a{color:#fff;font-weight:bold;}.me-cannotplay span{padding:15px;display:block;}.mejs-controls .mejs-loop-off button{background-position:-64px -16px;}.mejs-controls .mejs-loop-on button{background-position:-64px 0;}.mejs-controls .mejs-backlight-off button{background-position:-80px -16px;}.mejs-controls .mejs-backlight-on button{background-position:-80px 0;}.mejs-controls .mejs-picturecontrols-button{background-position:-96px 0;}.mejs-contextmenu{position:absolute;width:150px;padding:10px;border-radius:4px;top:0;left:0;background:#fff;border:solid 1px #999;z-index:1001;}.mejs-contextmenu .mejs-contextmenu-separator{height:1px;font-size:0;margin:5px 6px;background:#333;}.mejs-contextmenu .mejs-contextmenu-item{font-family:Helvetica,Arial;font-size:12px;padding:4px 6px;cursor:pointer;color:#333;}.mejs-contextmenu .mejs-contextmenu-item:hover{background:#2C7C91;color:#fff;}.mejs-controls .mejs-sourcechooser-button{position:relative;}.mejs-controls .mejs-sourcechooser-button button{background-position:-128px 0;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector{visibility:hidden;position:absolute;bottom:26px;right:-10px;width:130px;height:100px;background:url(background.png);background:rgba(50,50,50,0.7);border:solid 1px transparent;padding:10px;overflow:hidden;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul{margin:0;padding:0;display:block;list-style-type:none!important;overflow:hidden;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li{margin:0 0 6px 0;padding:0;list-style-type:none!important;display:block;color:#fff;overflow:hidden;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li input{clear:both;float:left;margin:3px 3px 0 5px;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li label{width:100px;float:left;padding:4px 0 0 0;line-height:15px;font-family:helvetica,arial;font-size:10px;}.mejs-postroll-layer{position:absolute;bottom:0;left:0;width:100%;height:100%;background:url(background.png);background:rgba(50,50,50,0.7);z-index:1000;overflow:hidden;}.mejs-postroll-layer-content{width:100%;height:100%;}.mejs-postroll-close{position:absolute;right:0;top:0;background:url(background.png);background:rgba(50,50,50,0.7);color:#fff;padding:4px;z-index:100;cursor:pointer;} \ No newline at end of file diff --git a/src/wp-includes/js/mediaelement/silverlightmediaelement.xap b/src/wp-includes/js/mediaelement/silverlightmediaelement.xap new file mode 100644 index 0000000..9d55c2e Binary files /dev/null and b/src/wp-includes/js/mediaelement/silverlightmediaelement.xap differ diff --git a/src/wp-includes/js/mediaelement/wp-mediaelement.css b/src/wp-includes/js/mediaelement/wp-mediaelement.css new file mode 100644 index 0000000..18ad948 --- /dev/null +++ b/src/wp-includes/js/mediaelement/wp-mediaelement.css @@ -0,0 +1,15 @@ +.mejs-container, .mejs-embed, .mejs-embed body { + background: #464646; +} + +.mejs-controls .mejs-time-rail .mejs-time-loaded { + background: #21759b; +} + +.mejs-controls .mejs-time-rail .mejs-time-current { + background: #d54e21; +} + +.me-cannotplay { + width: auto !important; +} diff --git a/src/wp-includes/js/mediaelement/wp-mediaelement.js b/src/wp-includes/js/mediaelement/wp-mediaelement.js new file mode 100644 index 0000000..505decd --- /dev/null +++ b/src/wp-includes/js/mediaelement/wp-mediaelement.js @@ -0,0 +1,16 @@ +/* global mejs, _wpmejsSettings */ +(function ($) { + // add mime-type aliases to MediaElement plugin support + mejs.plugins.silverlight[0].types.push('video/x-ms-wmv'); + mejs.plugins.silverlight[0].types.push('audio/x-ms-wma'); + + $(function () { + var settings = {}; + + if ( typeof _wpmejsSettings !== 'undefined' ) + settings.pluginPath = _wpmejsSettings.pluginPath; + + $('.wp-audio-shortcode, .wp-video-shortcode').mediaelementplayer( settings ); + }); + +}(jQuery)); diff --git a/src/wp-includes/js/plupload/changelog.txt b/src/wp-includes/js/plupload/changelog.txt new file mode 100644 index 0000000..7aaff4c --- /dev/null +++ b/src/wp-includes/js/plupload/changelog.txt @@ -0,0 +1,241 @@ +Version 1.5.7 (2013-04-10) + HTML5: Workaround for squish problem in iOS6, when uploading resized images. + HTML5: Fix failing workaround for FormData+Blob bug on Android... + HTML5: Allow multiple uploads on iOS. + Include VB build script that doesn't depend on Ant and is said to be native to Windows. +Version 1.5.6 (2013-02-28) + Fix regression: getPos() wrong on ie6/7. + HTML5: Send file as binary string if it was mangled, even if multipart is set to false. + HTML5: Add workaround Android browsers, that are unable to properly send blobs in FormData. + HTML4/Flash/Silverlight: Destroy fails to cleanup everything when container not defined. + UI, Queue: Use html() instead of text(), otherwise special characters fail to display properly. + UI, Queue: Use on() instead of delegate() or live(). Update examples to use jQuery 1.9.0 by default. + Queue: Blur rename input field when ESC is pressed. + Additional language packs: Slovak. +Version 1.5.5 (2013-01-23) + UI Widget: Fix sortable feature, broken in jQuery UI 1.9. + Queue: Replace live() with delegate(), as live() was removed from jQuery 1.9. + HTML5: window.getComputedStyle in Firefox doesn't support dashed rulenames - use zIndex instead of z-index. + HTML5/Flash/Silverlight/Gears: Process JPEGs, if quality parameter is present, whatever the scale factor. + Flash: Survive invalid EXIF tag offsets. + Flash: Allow only letters, digits and underscore in runtime id to avoid script injection. + SilverLight: Prepend ampersand to the query string, for non multipart cases (as in Flash and HTML5). + Add mime types for m2v,3gp,3g2 extensions. +Version 1.5.4 (2012-04-12) + Flash: Disable scripting if swf was loaded from another domain. +Version 1.5.3 (2012-04-05) + HTML5: Check if xhr object is initialized, before calling abort() on it. + HTML4: Postpone form removal until uploaders state changes, to avoid error on resuming stopped uploads. + BrowserPlus: Fix mechanical typo, that caused error during mime type check. + BrowserPlus: browserPlus.Uploader.Cancel() has two required parameters, dies with the error if not passed. + Flash: Improve runtime's behaviour during upload cancellation. + Flash: Survive the case when GPSVersionID contains unexpected value. + Flash: Fix random freeze in Chrome's bundled Flash Player. + Flash: Avoid the silent break when URLStream not yet open, but close is called on it. + Flash: Move Destroy handler out of Flash:Init handler, since it might be called not only after Flash:Init but also before it. + Flash: Avoid warning during build with mxmlc. + Try removeEventListener first in IE and only if it fails - detachEvent. + Fix plupload.getPos to return proper value in IE8+. + Do not initiate plupload.STARTED state, if file queue is empty. + Additional language packs: Estonian, Polish, Korean, French-Canadian, Greek, Persian/Farsi. +Version 1.5.2 (2012-01-06) + UI Widget: Do not show UI if no runtime can be initialized. + UI Widget: Timely update file size and total size if resize in action. + UI Widget: Constrain renaming feature to queued files only. + UI Widget: Disable Add button properly, if requested, rather then just hide. + HTML4/HTML5/BrowserPlus: Avoid adding mime type twice to dialog trigger. + HTML5: fix regression, when unresized images were failing on FF3.6. + HTML5: Constrain Gecko 2,5,6 workaround to multipart mode only. + HTML5/Flash: Take into account weird possibilities of ExifVersion being a string, rather then standard Undefined. + Flash: Simplify event dispatching in BitmapDataUnlimited class, in order to avoid freezing on resizing in FP11. + Add ability to disable file dialog trigger on request (uploader.disableBrowse(true/false)). + Support for immediate abort of upload process, be it chunked upload or regular one. + Abort all activity, before destroying uploader. + Revive temporary file removal logic in upload.php. + Fix potential vulnerability in dump.php and upload.php. + Additional MIME types: application/vnd.openxmlformats-officedocument.*, application/x-javascript, application/json, text/css,css, application/vnd.oasis.opendocument.formula-templat. + Additional language packs: Hungarian, Croatian, Serbian, Romanian. +Version 1.5.1.1 (2011-09-27) + HTML5: Fix mechanical typo, that successfully broke drag and drop, wherever could. +Version 1.5.1 (2011-09-26) + HTML4: Add support for server responses in HTML format. + HTML5: Disable multiple file selection in Safari 5.x for Windows (see #363). + HTML5: Gecko 2/5/6 should upload chunks as binary strings when in chunking mode and client side resize is requested. + Flash: Enforce URLStream mode when custom headers are passed. + Flash: Fix embedding problems in IE9 (and all other IEs). + Flash/Gears/BrowserPlus/SilverLight: Expose multi_selection feature, to be used in required_features (mainly to overcome Safari for Windows problem). + SilverLight: Properly handle custom and null headers. + UploadComplete moved to fire after the last StateChanged event. + Additional language packs: Finnish. +Version 1.5b (2011-09-11) + UI Widget: Fix sortable logic. + UI Widget: Fix bug, when message was displayed simultaneously across all Plupload UI instances on the page. + UI Widget: notify() method is now public - users can throw their own messages into the widget header. + HTML4/HTML5: Revise input[type=file] placement logic to support cursor styling on Geko 2+. + HTML5: Revise Drag'n'Drop detection logic. + HTML5: Make Exif and GPS information available to user, introduce two new events: ExifData and GpsData. + HTML5: Add support for File.prototype.slice() method (mozSlice/webkitSlice) in order to be able to upload files in chunks without preloading. + HTML5: Remove any JPEG headers before restoring them, 'cause user agent (like Chrome), might be inserting it's own. + Flash: Remove a limit on the depth of image header check, since it still fails in some cases and performance gain is negligible. + Flash: Fix regression, when runtime hanged when not images where passed in as images. + SilverLight: Fix bug, when JSON serializer was failing on null. + SilverLight: Remove cast to integer for chunk boundary, which resulted in a wrong size for last chunks on huge files. + SilverLight: Increase read buffer, add disposal of ImageStream and FileStream, optimize for performance. + Updated build.xml to include language packs in release package under js/ folder. + Gears/BrowserPlus: Add support for * file filter. + BeforeUpload now can cancel upload if required. + Additional MIME types: text/csv, image/photoshop, video/x-ms-wmv, video/avi, video/webm support + Additional language packs: Japanese + Cleaned examples. +Version 1.4.3.2 (2011-04-13) + Fixed bug in HTML5 runtime, when was reduced by a factor of 100 after every upload. +Version 1.4.3.1 (2011-04-12) + Fixed build script, mistakenly populating jquery.plupload.queue directory from jquery.ui.plupload sources. + Fixed script urls in all examples, build script now will alter them automatically from dev to release when needed. + Fixed isEmptyObj undefined error in HTML4 runtime. + Fixed bug in UI Widget preventing UploadComplete from triggering. +Version 1.4.3 (2011-04-11) + Added Latvian language pack and updated French. + Fixed bug in Flash runtime when JPEG header was not investigated deep enough to reach SOFn marker in large images. + Fixed bug, when PNGs were cropped to width in Flash runtimes, rather then resized. + Fixed Flash to allow multiple uploading of the same file, with different settings. + Fixed Flash runtime to clean anonymous listeners properly. + Fixed HTML5 runtime to resolve to mimeType in case-insensitive way. + Fixed HTML5/Flash/SilverLight/Gears runtimes for inconsistency in naming of chunks feature, comparing to other runtimes. + Fixed HTML4/HTML5 runtimes for input[type=file] to outsize contaner effectively enough to fill the whole click area. + Fixed all runtimes to preserve position (relative/absolute) rule on containers that already have it. + Fixed SilverLight runtime to support large files (over 2GB). + Restructured the examples, src and build scripts to make it more clear that jQuery is optional. + Added support for *.* filter. + Added support for preserving ICC and IPTC headers when resizing JPEGs. + Added Image.onerror/onabort handlers to HTML5 in order to gracefully bypass faulty images. + Added ability to drop image size (by lowering quality), while preserving original dimension (HTML5/Flash/Gears). + Ported EXIF, ICC, IPTC preservation code to Flash runtime. +Version 1.4.2 (2011-02-20) + Added Brazilian Portuguese, German, Russian and Spanish translations. + Added support for file_data_name option to SilverLight runtime. + Added support for better quality image resizing to Flash runtime. + Added support for properly handling images with dimensions up to 8191x8191 pixels to Flash runtime. + Added 'updatelist' event to UI Widget, which will be triggered every time file list will get redrawn. + Added support for dynamically changing options to UI Widget. + Fixed HTML4 runtime bug, when UploadFile handler was attached twice. + Fixed HTML5 to use FileReader.readAsBinaryString() instead of File.getAsBinary() on newer WebKit browsers (like Chrome 9). + Fixed Flash runtime from sending duplicate Filename param, when using FileReference.upload(). + Updated S3 example to illustrate support for a proper progress indication. +Version 1.4.1 (2011-02-01) + Added an example on how to use Plupload with Amazon S3 written in PHP but can easily be ported to other languages. + Fixed bug where hidden input elements wasn't created when the multiple_queues option wasn't used. + Fixed bug where FF4 would produce an exception about missing BlobBuilder. +Version 1.4.0 (2011-01-26) + Added removeEvent and removeAllEvents methods and modified addEvent accordingly, in order to support dynamic unload. + Added unbindAll method. + Added UploadComplete event, which fires when internal iterator reaches the end of the queue. + Added public destroy method to plupload object, new event - Destroy, and corresponding handlers to all runtimes. + Added Czech, Italian, French, Dutch translations. + Added support for translatable error messages. + Added two new options: browse_button_hover and browse_button_active, in order to support browse_button interactivity. + Added support for 'multi_selection: false' to Silverlight runtime. + Added support for video/mp4, video/x-m4v and audio/mp4 MIME Types. + Added artificial sendAsBinary method to XMLHttpRequest.prototype for browsers that have support for BlobBuilder and typed arrays. + Added version tracking variable into plupload object and version comment to the header of every file. + Fixed measurements of browse_button element in order to size and position input[type=file] element to fit it fully. + Fixed Flash runtime behavior for multiple_select=false and other simpleUpload usage cases: basically new FileReference has to be created for every select dialog. + Fixed browser sniffer to match only Safari, for fakeSafariDragDrop (seems like Safari on Mac doesn't require it either). + Fixed so that ExternalInterface escapes strings properly, before passing them to JS. + Fixed eventual reinitialization of flash/silverlight runtimes, especially for cases when object wrapper needed to be programmatically hidden and then shown again. + Fixed so that Plupload will now ignore files with duplicate names when adding to the queue, in one set. Mainly introduced to work around Safari on Windows bug (https://bugs.webkit.org/show_bug.cgi?id=37957). + Fixed bug, when final UploadProgress was firing after FileUploaded for Flash simpleUpload. + Fixed bug where upload would fail if an error was produced inside the FilesAdded event. + Fixed bug in Flash runtime when it used a wrong size when resizing, but not chunking. + Fixed bug in Silverlight runtime that would keep sending 0 byte packages when a picture was chunked before resized. + Disabled blur filter (is going to be replaced with some bilinear resampling in next release). + Completely revised UI Widget, to be more jQuery UI oriented. Optionally depends on UI Button, UI Sortable, UI ProgressBar. +Version 1.3.0 (2010-11-24) + Added new jQuery UI widget that supports jQuery UI themes. + Added new multiple_queues option that enables you to upload multiple times in the queue widgets. + Added support for crossdomain loading of the XAP and SWF files and crossdomain upload. + Added new multiple_queues option that enables you to upload multiple times in the queue widgets. + Added support for crossdomain loading of the XAP and SWF files and crossdomain upload. + Added preinit/init options to to ease up the binding of custom events to queueWidget and the Uploader class. + Added drag/drop support for Safari until they fix the broken drag/drop support on Windows. + Added events example file that show how to bind all events and display event specific data. + Added support for retaining Exif data on images when they where resized using the HTML5 runtime. + Fixed logic issue with the upload.php example file. Chunking wasn't working correctly. + Fixed issue with HTML4 not handling the form encoding correctly on older IE versions. Patch contributed by jinxdone. + Fixed so the HTML4 runtime only submits the defined multipart_params arguments. + Fixes issue where it wasn't possible to dynamically override url or mutlipart_params for the HTML4 runtime. + Fixed so all runtimes pass the name, chunk and chunks parameters as multipart parameters instead of querystring parameters. + Fixed so files are read using the newer FileReader class if it's available if not it tries the older getAsXXX on Gecko. + Fixed bug where IE 9 beta 1 wouldn't render Silverlight properly. + Fixed bug where Flash would do extra empty requests if images below a specific size would be uploaded. + Fixed bug where Google Gears would resize and re-encode images even if the it wasn't changed in scale. + Fixed bug where the HTML5 runtime wouldn't free memory after each request on Gecko. +Version 1.2.4 (2010-09-08) + Added new BeforeUpload event to make it easier to override settings before a file is uploaded. + Added new automatic usage of FileReference in Flash if it's possible. Contributed by Marcel Jackwerth. + Added new chunking support for Chrome 5 and Firefox 3.6 using the HTML 5 runtime. + Added new multipart upload support for WebKit using the HTML 5 runtime and the FormData object. + Added new image scaling method for the Flash runtime contributed by rcoopman. + Added new alert error message if the user selected invalid files. + Added new automatic unique name generation to the example.php script. Contributed by Brandon Kelly. + Changed so the default upload method is multipart and the default chunk size is 0. + Fixed progress issue with the HTML5 runtime running on Gecko. + Fixed so longer extensions can be used such as .tar.gz. + Fixed so the file extension is retained when using the unique_names option. +Version 1.2.3 (2010-05-27) + Added new drag/drop support for HTML5 running on Chrome beta. + Added new multipart state for the features object. It's now possible to detect multipart support. + Added new getFeatures function to all runtime. Basic concept by Javier Martinez Fernandez. + Fixed bug where runtimes where initialized even if they didn't match the required_features setting. +Version 1.2.2.1 (2010-05-04) + Added new headers option, enables you to set custom headers for the upload requests. + Fixed bug where the file extension checking was case sensitive. +Version 1.2.2 (2010-04-26) + Added new file_data_name option that enables you to set the multipart file data param. Patch contributed by Alex Ganov. + Added new FILE_SIZE_ERROR type that will be triggered if the user selected a file that is to large or zero bytes. + Added new FILE_EXTENSION_ERROR type that will be triggered if you add a file with an invalid file extension. + Added new required_features setting, enables you to specify a list of required features that the runtime must have. + Fixed so the plupload.buildUrl function uses the UTF compatible encodeURIComponent method instead of escape. + Fixed so that all file types can be selected if you don't specify a filter setting. + Fixed so more valid HTTP status codes are accepted as valid responses. + Fixed so all runtimes fills the features object with available features. + Fixed some issues with the HTML4 runtime if there wasn't any existing forms on the page. + Fixed some conflict issues with HTML4 runtime and forms with the input names of action or target. + Fixed bug where some Gecko versions would produce exceptions when checking the HTTP status of a XHR. +Version 1.2.1 (2010-03-22) + Fixed bug with incorrect aspect ratio in Flash image scaling. + Fixed bug where chunked uploads could get scrambled in the Flash runtime. Patch contributed by Grady Werner. + Fixed bug where a beta version of Chrome wouldn't handle drag/drop correctly because of missing drag effect. + Fixed so the HTML 4 runtime displays N/A for file sizes and the progress is based on uploaded files instead of bytes. + Fixed so chunking can be disabled properly in Flash but that will affect the progress bar. + Fixed so queue widget displays the drag/drop message if file queue is emptied. + Fixed small files are uploaded as one single chunk and not forced into 4 chunks in the Flash runtime. +Version 1.2 (2010-03-09) + Added new rename file support for jQuery queue widget, click on a file name to rename it if it's enabled. + Added official ChunkUploaded event, it similar to FileUploaded but executed for each chunk. + Added bytes per second support to total queue progress. + Added better error handling to core API using the new Error event. + Added better error handling to jQuery queue widget. + Fixed so chunking uploads is dispatch from JS not from inside Flash/Silverlight. +Version 1.1.1 (2010-02-25) + Added new setup setting to queue widget. Makes it easier to bind custom events to uploader instance. + Fixed so it's possible to disable chunking compleatly. It's now disabled by default. + Fixed bug where multipart mode was enabled all the time in the Flash runtime. + Fixed bug where chunked uploading in Silverlight would fail. + Fixed bug where the delete button was visible while uploading. + Fixed bug where unique_names setting wasn't working when the core API was used. + Fixed bug where the queue widget wouldn't display the currently uploaded file if the unique_names was enabled. +Version 1.1 (2010-02-24) + Added new multipart and multipart_params support. + Added new container option, enables you to specify where flash/silverlight objects would be added. + Added chunking support to BrowserPlus runtime, contributed by Steve Spencer. + Added FileUploaded event that fires when a file is uploaded. + Added more easily understandable buttons to queue widget. + Added html4 runtime, contributed by Ryan Demmer. + Fixed issues with i18n support and added a Swedish and Danish language pack. + Fixed bug where the Flash runtime could do empty requests if the image was scaled down. + Fixed bug where uploading small images in Silverlight would produce an exception. + Fixed so the runtime list can include whitespace or missing runtimes. Patch contributed by yvind Sean Kinsey. + Fixed so to large files are ignored and never dispatched to the FilesAdded event. +Version 1.0 (2010-02-03) + First official release of Plupload. diff --git a/src/wp-includes/js/plupload/handlers.js b/src/wp-includes/js/plupload/handlers.js new file mode 100644 index 0000000..7b1a7b0 --- /dev/null +++ b/src/wp-includes/js/plupload/handlers.js @@ -0,0 +1,480 @@ +/* global plupload, pluploadL10n, ajaxurl, post_id, wpUploaderInit, deleteUserSetting, setUserSetting, getUserSetting */ +/* global resize_width, resize_height, shortform */ +var topWin = window.dialogArguments || opener || parent || top, uploader, uploader_init; + +// progress and success handlers for media multi uploads +function fileQueued(fileObj) { + // Get rid of unused form + jQuery('.media-blank').remove(); + + var items = jQuery('#media-items').children(), postid = post_id || 0; + + // Collapse a single item + if ( items.length == 1 ) { + items.removeClass('open').find('.slidetoggle').slideUp(200); + } + // Create a progress bar containing the filename + jQuery('
                  ') + .attr( 'id', 'media-item-' + fileObj.id ) + .addClass('child-of-' + postid) + .append('
                  0%
                  ', + jQuery('
                  ').text( ' ' + fileObj.name )) + .appendTo( jQuery('#media-items' ) ); + + // Disable submit + jQuery('#insert-gallery').prop('disabled', true); +} + +function uploadStart() { + try { + if ( typeof topWin.tb_remove != 'undefined' ) + topWin.jQuery('#TB_overlay').unbind('click', topWin.tb_remove); + } catch(e){} + + return true; +} + +function uploadProgress(up, file) { + var item = jQuery('#media-item-' + file.id); + + jQuery('.bar', item).width( (200 * file.loaded) / file.size ); + jQuery('.percent', item).html( file.percent + '%' ); +} + +// check to see if a large file failed to upload +function fileUploading(up, file) { + var hundredmb = 100 * 1024 * 1024, max = parseInt(up.settings.max_file_size, 10); + + if ( max > hundredmb && file.size > hundredmb ) { + setTimeout(function(){ + + if ( file.status < 3 && file.loaded === 0 ) { // not uploading + wpFileError(file, pluploadL10n.big_upload_failed.replace('%1$s', '').replace('%2$s', '')); + up.stop(); // stops the whole queue + up.removeFile(file); + up.start(); // restart the queue + } + }, 10000); // wait for 10 sec. for the file to start uploading + } +} + +function updateMediaForm() { + var items = jQuery('#media-items').children(); + + // Just one file, no need for collapsible part + if ( items.length == 1 ) { + items.addClass('open').find('.slidetoggle').show(); + jQuery('.insert-gallery').hide(); + } else if ( items.length > 1 ) { + items.removeClass('open'); + // Only show Gallery button when there are at least two files. + jQuery('.insert-gallery').show(); + } + + // Only show Save buttons when there is at least one file. + if ( items.not('.media-blank').length > 0 ) + jQuery('.savebutton').show(); + else + jQuery('.savebutton').hide(); +} + +function uploadSuccess(fileObj, serverData) { + var item = jQuery('#media-item-' + fileObj.id); + + // on success serverData should be numeric, fix bug in html4 runtime returning the serverData wrapped in a
                   tag
                  +	serverData = serverData.replace(/^
                  (\d+)<\/pre>$/, '$1');
                  +
                  +	// if async-upload returned an error message, place it in the media item div and return
                  +	if ( serverData.match(/media-upload-error|error-div/) ) {
                  +		item.html(serverData);
                  +		return;
                  +	} else {
                  +		jQuery('.percent', item).html( pluploadL10n.crunching );
                  +	}
                  +
                  +	prepareMediaItem(fileObj, serverData);
                  +	updateMediaForm();
                  +
                  +	// Increment the counter.
                  +	if ( post_id && item.hasClass('child-of-' + post_id) )
                  +		jQuery('#attachments-count').text(1 * jQuery('#attachments-count').text() + 1);
                  +}
                  +
                  +function setResize(arg) {
                  +	if ( arg ) {
                  +		if ( uploader.features.jpgresize )
                  +			uploader.settings.resize = { width: resize_width, height: resize_height, quality: 100 };
                  +		else
                  +			uploader.settings.multipart_params.image_resize = true;
                  +	} else {
                  +		delete(uploader.settings.resize);
                  +		delete(uploader.settings.multipart_params.image_resize);
                  +	}
                  +}
                  +
                  +function prepareMediaItem(fileObj, serverData) {
                  +	var f = ( typeof shortform == 'undefined' ) ? 1 : 2, item = jQuery('#media-item-' + fileObj.id);
                  +	if ( f == 2 && shortform > 2 )
                  +		f = shortform;
                  +
                  +	try {
                  +		if ( typeof topWin.tb_remove != 'undefined' )
                  +			topWin.jQuery('#TB_overlay').click(topWin.tb_remove);
                  +	} catch(e){}
                  +
                  +	if ( isNaN(serverData) || !serverData ) { // Old style: Append the HTML returned by the server -- thumbnail and form inputs
                  +		item.append(serverData);
                  +		prepareMediaItemInit(fileObj);
                  +	} else { // New style: server data is just the attachment ID, fetch the thumbnail and form html from the server
                  +		item.load('async-upload.php', {attachment_id:serverData, fetch:f}, function(){prepareMediaItemInit(fileObj);updateMediaForm();});
                  +	}
                  +}
                  +
                  +function prepareMediaItemInit(fileObj) {
                  +	var item = jQuery('#media-item-' + fileObj.id);
                  +	// Clone the thumbnail as a "pinkynail" -- a tiny image to the left of the filename
                  +	jQuery('.thumbnail', item).clone().attr('class', 'pinkynail toggle').prependTo(item);
                  +
                  +	// Replace the original filename with the new (unique) one assigned during upload
                  +	jQuery('.filename.original', item).replaceWith( jQuery('.filename.new', item) );
                  +
                  +	// Bind AJAX to the new Delete button
                  +	jQuery('a.delete', item).click(function(){
                  +		// Tell the server to delete it. TODO: handle exceptions
                  +		jQuery.ajax({
                  +			url: ajaxurl,
                  +			type: 'post',
                  +			success: deleteSuccess,
                  +			error: deleteError,
                  +			id: fileObj.id,
                  +			data: {
                  +				id : this.id.replace(/[^0-9]/g, ''),
                  +				action : 'trash-post',
                  +				_ajax_nonce : this.href.replace(/^.*wpnonce=/,'')
                  +			}
                  +		});
                  +		return false;
                  +	});
                  +
                  +	// Bind AJAX to the new Undo button
                  +	jQuery('a.undo', item).click(function(){
                  +		// Tell the server to untrash it. TODO: handle exceptions
                  +		jQuery.ajax({
                  +			url: ajaxurl,
                  +			type: 'post',
                  +			id: fileObj.id,
                  +			data: {
                  +				id : this.id.replace(/[^0-9]/g,''),
                  +				action: 'untrash-post',
                  +				_ajax_nonce: this.href.replace(/^.*wpnonce=/,'')
                  +			},
                  +			success: function( ){
                  +				var type,
                  +					item = jQuery('#media-item-' + fileObj.id);
                  +				
                  +				if ( type = jQuery('#type-of-' + fileObj.id).val() )
                  +					jQuery('#' + type + '-counter').text(jQuery('#' + type + '-counter').text()-0+1);
                  +
                  +				if ( post_id && item.hasClass('child-of-'+post_id) )
                  +					jQuery('#attachments-count').text(jQuery('#attachments-count').text()-0+1);
                  +
                  +				jQuery('.filename .trashnotice', item).remove();
                  +				jQuery('.filename .title', item).css('font-weight','normal');
                  +				jQuery('a.undo', item).addClass('hidden');
                  +				jQuery('.menu_order_input', item).show();
                  +				item.css( {backgroundColor:'#ceb'} ).animate( {backgroundColor: '#fff'}, { queue: false, duration: 500, complete: function(){ jQuery(this).css({backgroundColor:''}); } }).removeClass('undo');
                  +			}
                  +		});
                  +		return false;
                  +	});
                  +
                  +	// Open this item if it says to start open (e.g. to display an error)
                  +	jQuery('#media-item-' + fileObj.id + '.startopen').removeClass('startopen').addClass('open').find('slidetoggle').fadeIn();
                  +}
                  +
                  +// generic error message
                  +function wpQueueError(message) {
                  +	jQuery('#media-upload-error').show().html( '

                  ' + message + '

                  ' ); +} + +// file-specific error messages +function wpFileError(fileObj, message) { + itemAjaxError(fileObj.id, message); +} + +function itemAjaxError(id, message) { + var item = jQuery('#media-item-' + id), filename = item.find('.filename').text(), last_err = item.data('last-err'); + + if ( last_err == id ) // prevent firing an error for the same file twice + return; + + item.html('
                  ' + + '' + pluploadL10n.dismiss + '' + + '' + pluploadL10n.error_uploading.replace('%s', jQuery.trim(filename)) + ' ' + + message + + '
                  ').data('last-err', id); +} + +function deleteSuccess(data) { + var type, id, item; + if ( data == '-1' ) + return itemAjaxError(this.id, 'You do not have permission. Has your session expired?'); + + if ( data == '0' ) + return itemAjaxError(this.id, 'Could not be deleted. Has it been deleted already?'); + + id = this.id; + item = jQuery('#media-item-' + id); + + // Decrement the counters. + if ( type = jQuery('#type-of-' + id).val() ) + jQuery('#' + type + '-counter').text( jQuery('#' + type + '-counter').text() - 1 ); + + if ( post_id && item.hasClass('child-of-'+post_id) ) + jQuery('#attachments-count').text( jQuery('#attachments-count').text() - 1 ); + + if ( jQuery('form.type-form #media-items').children().length == 1 && jQuery('.hidden', '#media-items').length > 0 ) { + jQuery('.toggle').toggle(); + jQuery('.slidetoggle').slideUp(200).siblings().removeClass('hidden'); + } + + // Vanish it. + jQuery('.toggle', item).toggle(); + jQuery('.slidetoggle', item).slideUp(200).siblings().removeClass('hidden'); + item.css( {backgroundColor:'#faa'} ).animate( {backgroundColor:'#f4f4f4'}, {queue:false, duration:500} ).addClass('undo'); + + jQuery('.filename:empty', item).remove(); + jQuery('.filename .title', item).css('font-weight','bold'); + jQuery('.filename', item).append(' ' + pluploadL10n.deleted + ' ').siblings('a.toggle').hide(); + jQuery('.filename', item).append( jQuery('a.undo', item).removeClass('hidden') ); + jQuery('.menu_order_input', item).hide(); + + return; +} + +function deleteError() { + // TODO +} + +function uploadComplete() { + jQuery('#insert-gallery').prop('disabled', false); +} + +function switchUploader(s) { + if ( s ) { + deleteUserSetting('uploader'); + jQuery('.media-upload-form').removeClass('html-uploader'); + + if ( typeof(uploader) == 'object' ) + uploader.refresh(); + } else { + setUserSetting('uploader', '1'); // 1 == html uploader + jQuery('.media-upload-form').addClass('html-uploader'); + } +} + +function uploadError(fileObj, errorCode, message, uploader) { + var hundredmb = 100 * 1024 * 1024, max; + + switch (errorCode) { + case plupload.FAILED: + wpFileError(fileObj, pluploadL10n.upload_failed); + break; + case plupload.FILE_EXTENSION_ERROR: + wpFileError(fileObj, pluploadL10n.invalid_filetype); + break; + case plupload.FILE_SIZE_ERROR: + uploadSizeError(uploader, fileObj); + break; + case plupload.IMAGE_FORMAT_ERROR: + wpFileError(fileObj, pluploadL10n.not_an_image); + break; + case plupload.IMAGE_MEMORY_ERROR: + wpFileError(fileObj, pluploadL10n.image_memory_exceeded); + break; + case plupload.IMAGE_DIMENSIONS_ERROR: + wpFileError(fileObj, pluploadL10n.image_dimensions_exceeded); + break; + case plupload.GENERIC_ERROR: + wpQueueError(pluploadL10n.upload_failed); + break; + case plupload.IO_ERROR: + max = parseInt(uploader.settings.max_file_size, 10); + + if ( max > hundredmb && fileObj.size > hundredmb ) + wpFileError(fileObj, pluploadL10n.big_upload_failed.replace('%1$s', '').replace('%2$s', '')); + else + wpQueueError(pluploadL10n.io_error); + break; + case plupload.HTTP_ERROR: + wpQueueError(pluploadL10n.http_error); + break; + case plupload.INIT_ERROR: + jQuery('.media-upload-form').addClass('html-uploader'); + break; + case plupload.SECURITY_ERROR: + wpQueueError(pluploadL10n.security_error); + break; +/* case plupload.UPLOAD_ERROR.UPLOAD_STOPPED: + case plupload.UPLOAD_ERROR.FILE_CANCELLED: + jQuery('#media-item-' + fileObj.id).remove(); + break;*/ + default: + wpFileError(fileObj, pluploadL10n.default_error); + } +} + +function uploadSizeError( up, file, over100mb ) { + var message; + + if ( over100mb ) + message = pluploadL10n.big_upload_queued.replace('%s', file.name) + ' ' + pluploadL10n.big_upload_failed.replace('%1$s', '').replace('%2$s', ''); + else + message = pluploadL10n.file_exceeds_size_limit.replace('%s', file.name); + + jQuery('#media-items').append('

                  ' + message + '

                  '); + up.removeFile(file); +} + +jQuery(document).ready(function($){ + $('.media-upload-form').bind('click.uploader', function(e) { + var target = $(e.target), tr, c; + + if ( target.is('input[type="radio"]') ) { // remember the last used image size and alignment + tr = target.closest('tr'); + + if ( tr.hasClass('align') ) + setUserSetting('align', target.val()); + else if ( tr.hasClass('image-size') ) + setUserSetting('imgsize', target.val()); + + } else if ( target.is('button.button') ) { // remember the last used image link url + c = e.target.className || ''; + c = c.match(/url([^ '"]+)/); + + if ( c && c[1] ) { + setUserSetting('urlbutton', c[1]); + target.siblings('.urlfield').val( target.data('link-url') ); + } + } else if ( target.is('a.dismiss') ) { + target.parents('.media-item').fadeOut(200, function(){ + $(this).remove(); + }); + } else if ( target.is('.upload-flash-bypass a') || target.is('a.uploader-html') ) { // switch uploader to html4 + $('#media-items, p.submit, span.big-file-warning').css('display', 'none'); + switchUploader(0); + e.preventDefault(); + } else if ( target.is('.upload-html-bypass a') ) { // switch uploader to multi-file + $('#media-items, p.submit, span.big-file-warning').css('display', ''); + switchUploader(1); + e.preventDefault(); + } else if ( target.is('a.describe-toggle-on') ) { // Show + target.parent().addClass('open'); + target.siblings('.slidetoggle').fadeIn(250, function(){ + var S = $(window).scrollTop(), H = $(window).height(), top = $(this).offset().top, h = $(this).height(), b, B; + + if ( H && top && h ) { + b = top + h; + B = S + H; + + if ( b > B ) { + if ( b - B < top - S ) + window.scrollBy(0, (b - B) + 10); + else + window.scrollBy(0, top - S - 40); + } + } + }); + e.preventDefault(); + } else if ( target.is('a.describe-toggle-off') ) { // Hide + target.siblings('.slidetoggle').fadeOut(250, function(){ + target.parent().removeClass('open'); + }); + e.preventDefault(); + } + }); + + // init and set the uploader + uploader_init = function() { + uploader = new plupload.Uploader(wpUploaderInit); + + $('#image_resize').bind('change', function() { + var arg = $(this).prop('checked'); + + setResize( arg ); + + if ( arg ) + setUserSetting('upload_resize', '1'); + else + deleteUserSetting('upload_resize'); + }); + + uploader.bind('Init', function(up) { + var uploaddiv = $('#plupload-upload-ui'); + + setResize( getUserSetting('upload_resize', false) ); + + if ( up.features.dragdrop && ! $(document.body).hasClass('mobile') ) { + uploaddiv.addClass('drag-drop'); + $('#drag-drop-area').bind('dragover.wp-uploader', function(){ // dragenter doesn't fire right :( + uploaddiv.addClass('drag-over'); + }).bind('dragleave.wp-uploader, drop.wp-uploader', function(){ + uploaddiv.removeClass('drag-over'); + }); + } else { + uploaddiv.removeClass('drag-drop'); + $('#drag-drop-area').unbind('.wp-uploader'); + } + + if ( up.runtime == 'html4' ) + $('.upload-flash-bypass').hide(); + }); + + uploader.init(); + + uploader.bind('FilesAdded', function(up, files) { + var hundredmb = 100 * 1024 * 1024, max = parseInt(up.settings.max_file_size, 10); + + $('#media-upload-error').html(''); + uploadStart(); + + plupload.each(files, function(file){ + if ( max > hundredmb && file.size > hundredmb && up.runtime != 'html5' ) + uploadSizeError( up, file, true ); + else + fileQueued(file); + }); + + up.refresh(); + up.start(); + }); + + // uploader.bind('BeforeUpload', function(up, file) {}); + + uploader.bind('UploadFile', function(up, file) { + fileUploading(up, file); + }); + + uploader.bind('UploadProgress', function(up, file) { + uploadProgress(up, file); + }); + + uploader.bind('Error', function(up, err) { + uploadError(err.file, err.code, err.message, up); + up.refresh(); + }); + + uploader.bind('FileUploaded', function(up, file, response) { + uploadSuccess(file, response.response); + }); + + uploader.bind('UploadComplete', function() { + uploadComplete(); + }); + }; + + if ( typeof(wpUploaderInit) == 'object' ) { + uploader_init(); + } + +}); diff --git a/src/wp-includes/js/plupload/handlers.min.js b/src/wp-includes/js/plupload/handlers.min.js new file mode 100644 index 0000000..83261fe --- /dev/null +++ b/src/wp-includes/js/plupload/handlers.min.js @@ -0,0 +1 @@ +function fileQueued(a){jQuery(".media-blank").remove();var b=jQuery("#media-items").children(),c=post_id||0;1==b.length&&b.removeClass("open").find(".slidetoggle").slideUp(200),jQuery('
                  ').attr("id","media-item-"+a.id).addClass("child-of-"+c).append('
                  0%
                  ',jQuery('
                  ').text(" "+a.name)).appendTo(jQuery("#media-items")),jQuery("#insert-gallery").prop("disabled",!0)}function uploadStart(){try{"undefined"!=typeof topWin.tb_remove&&topWin.jQuery("#TB_overlay").unbind("click",topWin.tb_remove)}catch(a){}return!0}function uploadProgress(a,b){var c=jQuery("#media-item-"+b.id);jQuery(".bar",c).width(200*b.loaded/b.size),jQuery(".percent",c).html(b.percent+"%")}function fileUploading(a,b){var c=104857600,d=parseInt(a.settings.max_file_size,10);d>c&&b.size>c&&setTimeout(function(){b.status<3&&0===b.loaded&&(wpFileError(b,pluploadL10n.big_upload_failed.replace("%1$s",'').replace("%2$s","")),a.stop(),a.removeFile(b),a.start())},1e4)}function updateMediaForm(){var a=jQuery("#media-items").children();1==a.length?(a.addClass("open").find(".slidetoggle").show(),jQuery(".insert-gallery").hide()):a.length>1&&(a.removeClass("open"),jQuery(".insert-gallery").show()),a.not(".media-blank").length>0?jQuery(".savebutton").show():jQuery(".savebutton").hide()}function uploadSuccess(a,b){var c=jQuery("#media-item-"+a.id);return b=b.replace(/^
                  (\d+)<\/pre>$/,"$1"),b.match(/media-upload-error|error-div/)?(c.html(b),void 0):(jQuery(".percent",c).html(pluploadL10n.crunching),prepareMediaItem(a,b),updateMediaForm(),post_id&&c.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(1*jQuery("#attachments-count").text()+1),void 0)}function setResize(a){a?uploader.features.jpgresize?uploader.settings.resize={width:resize_width,height:resize_height,quality:100}:uploader.settings.multipart_params.image_resize=!0:(delete uploader.settings.resize,delete uploader.settings.multipart_params.image_resize)}function prepareMediaItem(a,b){var c="undefined"==typeof shortform?1:2,d=jQuery("#media-item-"+a.id);2==c&&shortform>2&&(c=shortform);try{"undefined"!=typeof topWin.tb_remove&&topWin.jQuery("#TB_overlay").click(topWin.tb_remove)}catch(e){}isNaN(b)||!b?(d.append(b),prepareMediaItemInit(a)):d.load("async-upload.php",{attachment_id:b,fetch:c},function(){prepareMediaItemInit(a),updateMediaForm()})}function prepareMediaItemInit(a){var b=jQuery("#media-item-"+a.id);jQuery(".thumbnail",b).clone().attr("class","pinkynail toggle").prependTo(b),jQuery(".filename.original",b).replaceWith(jQuery(".filename.new",b)),jQuery("a.delete",b).click(function(){return jQuery.ajax({url:ajaxurl,type:"post",success:deleteSuccess,error:deleteError,id:a.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"trash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")}}),!1}),jQuery("a.undo",b).click(function(){return jQuery.ajax({url:ajaxurl,type:"post",id:a.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"untrash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")},success:function(){var b,c=jQuery("#media-item-"+a.id);(b=jQuery("#type-of-"+a.id).val())&&jQuery("#"+b+"-counter").text(jQuery("#"+b+"-counter").text()-0+1),post_id&&c.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(jQuery("#attachments-count").text()-0+1),jQuery(".filename .trashnotice",c).remove(),jQuery(".filename .title",c).css("font-weight","normal"),jQuery("a.undo",c).addClass("hidden"),jQuery(".menu_order_input",c).show(),c.css({backgroundColor:"#ceb"}).animate({backgroundColor:"#fff"},{queue:!1,duration:500,complete:function(){jQuery(this).css({backgroundColor:""})}}).removeClass("undo")}}),!1}),jQuery("#media-item-"+a.id+".startopen").removeClass("startopen").addClass("open").find("slidetoggle").fadeIn()}function wpQueueError(a){jQuery("#media-upload-error").show().html('

                  '+a+"

                  ")}function wpFileError(a,b){itemAjaxError(a.id,b)}function itemAjaxError(a,b){var c=jQuery("#media-item-"+a),d=c.find(".filename").text(),e=c.data("last-err");e!=a&&c.html('
                  '+pluploadL10n.dismiss+""+pluploadL10n.error_uploading.replace("%s",jQuery.trim(d))+" "+b+"
                  ").data("last-err",a)}function deleteSuccess(a){var b,c,d;return"-1"==a?itemAjaxError(this.id,"You do not have permission. Has your session expired?"):"0"==a?itemAjaxError(this.id,"Could not be deleted. Has it been deleted already?"):(c=this.id,d=jQuery("#media-item-"+c),(b=jQuery("#type-of-"+c).val())&&jQuery("#"+b+"-counter").text(jQuery("#"+b+"-counter").text()-1),post_id&&d.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(jQuery("#attachments-count").text()-1),1==jQuery("form.type-form #media-items").children().length&&jQuery(".hidden","#media-items").length>0&&(jQuery(".toggle").toggle(),jQuery(".slidetoggle").slideUp(200).siblings().removeClass("hidden")),jQuery(".toggle",d).toggle(),jQuery(".slidetoggle",d).slideUp(200).siblings().removeClass("hidden"),d.css({backgroundColor:"#faa"}).animate({backgroundColor:"#f4f4f4"},{queue:!1,duration:500}).addClass("undo"),jQuery(".filename:empty",d).remove(),jQuery(".filename .title",d).css("font-weight","bold"),jQuery(".filename",d).append(' '+pluploadL10n.deleted+" ").siblings("a.toggle").hide(),jQuery(".filename",d).append(jQuery("a.undo",d).removeClass("hidden")),jQuery(".menu_order_input",d).hide(),void 0)}function deleteError(){}function uploadComplete(){jQuery("#insert-gallery").prop("disabled",!1)}function switchUploader(a){a?(deleteUserSetting("uploader"),jQuery(".media-upload-form").removeClass("html-uploader"),"object"==typeof uploader&&uploader.refresh()):(setUserSetting("uploader","1"),jQuery(".media-upload-form").addClass("html-uploader"))}function uploadError(a,b,c,d){var e,f=104857600;switch(b){case plupload.FAILED:wpFileError(a,pluploadL10n.upload_failed);break;case plupload.FILE_EXTENSION_ERROR:wpFileError(a,pluploadL10n.invalid_filetype);break;case plupload.FILE_SIZE_ERROR:uploadSizeError(d,a);break;case plupload.IMAGE_FORMAT_ERROR:wpFileError(a,pluploadL10n.not_an_image);break;case plupload.IMAGE_MEMORY_ERROR:wpFileError(a,pluploadL10n.image_memory_exceeded);break;case plupload.IMAGE_DIMENSIONS_ERROR:wpFileError(a,pluploadL10n.image_dimensions_exceeded);break;case plupload.GENERIC_ERROR:wpQueueError(pluploadL10n.upload_failed);break;case plupload.IO_ERROR:e=parseInt(d.settings.max_file_size,10),e>f&&a.size>f?wpFileError(a,pluploadL10n.big_upload_failed.replace("%1$s",'').replace("%2$s","")):wpQueueError(pluploadL10n.io_error);break;case plupload.HTTP_ERROR:wpQueueError(pluploadL10n.http_error);break;case plupload.INIT_ERROR:jQuery(".media-upload-form").addClass("html-uploader");break;case plupload.SECURITY_ERROR:wpQueueError(pluploadL10n.security_error);break;default:wpFileError(a,pluploadL10n.default_error)}}function uploadSizeError(a,b,c){var d;d=c?pluploadL10n.big_upload_queued.replace("%s",b.name)+" "+pluploadL10n.big_upload_failed.replace("%1$s",'').replace("%2$s",""):pluploadL10n.file_exceeds_size_limit.replace("%s",b.name),jQuery("#media-items").append('

                  '+d+"

                  "),a.removeFile(b)}var topWin=window.dialogArguments||opener||parent||top,uploader,uploader_init;jQuery(document).ready(function(a){a(".media-upload-form").bind("click.uploader",function(b){var c,d,e=a(b.target);e.is('input[type="radio"]')?(c=e.closest("tr"),c.hasClass("align")?setUserSetting("align",e.val()):c.hasClass("image-size")&&setUserSetting("imgsize",e.val())):e.is("button.button")?(d=b.target.className||"",d=d.match(/url([^ '"]+)/),d&&d[1]&&(setUserSetting("urlbutton",d[1]),e.siblings(".urlfield").val(e.data("link-url")))):e.is("a.dismiss")?e.parents(".media-item").fadeOut(200,function(){a(this).remove()}):e.is(".upload-flash-bypass a")||e.is("a.uploader-html")?(a("#media-items, p.submit, span.big-file-warning").css("display","none"),switchUploader(0),b.preventDefault()):e.is(".upload-html-bypass a")?(a("#media-items, p.submit, span.big-file-warning").css("display",""),switchUploader(1),b.preventDefault()):e.is("a.describe-toggle-on")?(e.parent().addClass("open"),e.siblings(".slidetoggle").fadeIn(250,function(){var b,c,d=a(window).scrollTop(),e=a(window).height(),f=a(this).offset().top,g=a(this).height();e&&f&&g&&(b=f+g,c=d+e,b>c&&(f-d>b-c?window.scrollBy(0,b-c+10):window.scrollBy(0,f-d-40)))}),b.preventDefault()):e.is("a.describe-toggle-off")&&(e.siblings(".slidetoggle").fadeOut(250,function(){e.parent().removeClass("open")}),b.preventDefault())}),uploader_init=function(){uploader=new plupload.Uploader(wpUploaderInit),a("#image_resize").bind("change",function(){var b=a(this).prop("checked");setResize(b),b?setUserSetting("upload_resize","1"):deleteUserSetting("upload_resize")}),uploader.bind("Init",function(b){var c=a("#plupload-upload-ui");setResize(getUserSetting("upload_resize",!1)),b.features.dragdrop&&!a(document.body).hasClass("mobile")?(c.addClass("drag-drop"),a("#drag-drop-area").bind("dragover.wp-uploader",function(){c.addClass("drag-over")}).bind("dragleave.wp-uploader, drop.wp-uploader",function(){c.removeClass("drag-over")})):(c.removeClass("drag-drop"),a("#drag-drop-area").unbind(".wp-uploader")),"html4"==b.runtime&&a(".upload-flash-bypass").hide()}),uploader.init(),uploader.bind("FilesAdded",function(b,c){var d=104857600,e=parseInt(b.settings.max_file_size,10);a("#media-upload-error").html(""),uploadStart(),plupload.each(c,function(a){e>d&&a.size>d&&"html5"!=b.runtime?uploadSizeError(b,a,!0):fileQueued(a)}),b.refresh(),b.start()}),uploader.bind("UploadFile",function(a,b){fileUploading(a,b)}),uploader.bind("UploadProgress",function(a,b){uploadProgress(a,b)}),uploader.bind("Error",function(a,b){uploadError(b.file,b.code,b.message,a),a.refresh()}),uploader.bind("FileUploaded",function(a,b,c){uploadSuccess(b,c.response)}),uploader.bind("UploadComplete",function(){uploadComplete()})},"object"==typeof wpUploaderInit&&uploader_init()}); \ No newline at end of file diff --git a/src/wp-includes/js/plupload/license.txt b/src/wp-includes/js/plupload/license.txt new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/src/wp-includes/js/plupload/license.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/src/wp-includes/js/plupload/plupload.flash.js b/src/wp-includes/js/plupload/plupload.flash.js new file mode 100644 index 0000000..7d3f008 --- /dev/null +++ b/src/wp-includes/js/plupload/plupload.flash.js @@ -0,0 +1 @@ +(function(f,b,d,e){var a={},g={};function c(){var h;try{h=navigator.plugins["Shockwave Flash"];h=h.description}catch(j){try{h=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(i){h="0.0"}}h=h.match(/\d+/g);return parseFloat(h[0]+"."+h[1])}d.flash={trigger:function(j,h,i){setTimeout(function(){var m=a[j],l,k;if(m){m.trigger("Flash:"+h,i)}},0)}};d.runtimes.Flash=d.addRuntime("flash",{getFeatures:function(){return{jpgresize:true,pngresize:true,maxWidth:8091,maxHeight:8091,chunks:true,progress:true,multipart:true,multi_selection:true}},init:function(m,o){var k,l,h=0,i=b.body;if(c()<10){o({success:false});return}g[m.id]=false;a[m.id]=m;k=b.getElementById(m.settings.browse_button);l=b.createElement("div");l.id=m.id+"_flash_container";d.extend(l.style,{position:"absolute",top:"0px",background:m.settings.shim_bgcolor||"transparent",zIndex:99999,width:"100%",height:"100%"});l.className="plupload flash";if(m.settings.container){i=b.getElementById(m.settings.container);if(d.getStyle(i,"position")==="static"){i.style.position="relative"}}i.appendChild(l);(function(){var p,q;p='';if(d.ua.ie){q=b.createElement("div");l.appendChild(q);q.outerHTML=p;q=null}else{l.innerHTML=p}}());function n(){return b.getElementById(m.id+"_flash")}function j(){if(h++>5000){o({success:false});return}if(g[m.id]===false){setTimeout(j,1)}}j();k=l=null;m.bind("Destroy",function(p){var q;d.removeAllEvents(b.body,p.id);delete g[p.id];delete a[p.id];q=b.getElementById(p.id+"_flash_container");if(q){q.parentNode.removeChild(q)}});m.bind("Flash:Init",function(){var r={},q;try{n().setFileFilters(m.settings.filters,m.settings.multi_selection)}catch(p){o({success:false});return}if(g[m.id]){return}g[m.id]=true;m.bind("UploadFile",function(s,u){var v=s.settings,t=m.settings.resize||{};n().uploadFile(r[u.id],v.url,{name:u.target_name||u.name,mime:d.mimeTypes[u.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream",chunk_size:v.chunk_size,width:t.width,height:t.height,quality:t.quality,multipart:v.multipart,multipart_params:v.multipart_params||{},file_data_name:v.file_data_name,format:/\.(jpg|jpeg)$/i.test(u.name)?"jpg":"png",headers:v.headers,urlstream_upload:v.urlstream_upload})});m.bind("CancelUpload",function(){n().cancelUpload()});m.bind("Flash:UploadProcess",function(t,s){var u=t.getFile(r[s.id]);if(u.status!=d.FAILED){u.loaded=s.loaded;u.size=s.size;t.trigger("UploadProgress",u)}});m.bind("Flash:UploadChunkComplete",function(s,u){var v,t=s.getFile(r[u.id]);v={chunk:u.chunk,chunks:u.chunks,response:u.text};s.trigger("ChunkUploaded",t,v);if(t.status!==d.FAILED&&s.state!==d.STOPPED){n().uploadNextChunk()}if(u.chunk==u.chunks-1){t.status=d.DONE;s.trigger("FileUploaded",t,{response:u.text})}});m.bind("Flash:SelectFiles",function(s,v){var u,t,w=[],x;for(t=0;t
                  ' + + ''; + + for (i=0; i' + + ''; + if (tinyMCEPopup.editor.forcedHighContrastMode) { + h += ''; + } + h += ''; + h += ''; + if ((i+1) % 18 == 0) + h += ''; + } + + h += '
                  '; + + el.innerHTML = h; + el.className = 'generated'; + + paintCanvas(el); + enableKeyboardNavigation(el.firstChild); +} + +function paintCanvas(el) { + tinyMCEPopup.getWin().tinymce.each(tinyMCEPopup.dom.select('canvas.mceColorSwatch', el), function(canvas) { + var context; + if (canvas.getContext && (context = canvas.getContext("2d"))) { + context.fillStyle = canvas.getAttribute('data-color'); + context.fillRect(0, 0, 10, 10); + } + }); +} +function generateNamedColors() { + var el = document.getElementById('namedcolors'), h = '', n, v, i = 0; + + if (el.className == 'generated') + return; + + for (n in named) { + v = named[n]; + h += ''; + if (tinyMCEPopup.editor.forcedHighContrastMode) { + h += ''; + } + h += ''; + h += ''; + i++; + } + + el.innerHTML = h; + el.className = 'generated'; + + paintCanvas(el); + enableKeyboardNavigation(el); +} + +function enableKeyboardNavigation(el) { + tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', { + root: el, + items: tinyMCEPopup.dom.select('a', el) + }, tinyMCEPopup.dom); +} + +function dechex(n) { + return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16); +} + +function computeColor(e) { + var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB, pos = tinyMCEPopup.dom.getPos(e.target); + + x = e.offsetX ? e.offsetX : (e.target ? e.clientX - pos.x : 0); + y = e.offsetY ? e.offsetY : (e.target ? e.clientY - pos.y : 0); + + partWidth = document.getElementById('colors').width / 6; + partDetail = detail / 2; + imHeight = document.getElementById('colors').height; + + r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255; + g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth); + b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth); + + coef = (imHeight - y) / imHeight; + r = 128 + (r - 128) * coef; + g = 128 + (g - 128) * coef; + b = 128 + (b - 128) * coef; + + changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b)); + updateLight(r, g, b); +} + +function updateLight(r, g, b) { + var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color; + + for (i=0; i=0) && (i'); + }, + + init : function() { + var f = document.forms[0], ed = tinyMCEPopup.editor; + + // Setup browse button + document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); + if (isVisible('srcbrowser')) + document.getElementById('src').style.width = '180px'; + + e = ed.selection.getNode(); + + this.fillFileList('image_list', tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList')); + + if (e.nodeName == 'IMG') { + f.src.value = ed.dom.getAttrib(e, 'src'); + f.alt.value = ed.dom.getAttrib(e, 'alt'); + f.border.value = this.getAttrib(e, 'border'); + f.vspace.value = this.getAttrib(e, 'vspace'); + f.hspace.value = this.getAttrib(e, 'hspace'); + f.width.value = ed.dom.getAttrib(e, 'width'); + f.height.value = ed.dom.getAttrib(e, 'height'); + f.insert.value = ed.getLang('update'); + this.styleVal = ed.dom.getAttrib(e, 'style'); + selectByValue(f, 'image_list', f.src.value); + selectByValue(f, 'align', this.getAttrib(e, 'align')); + this.updateStyle(); + } + }, + + fillFileList : function(id, l) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + l = typeof(l) === 'function' ? l() : window[l]; + + if (l && l.length > 0) { + lst.options[lst.options.length] = new Option('', ''); + + tinymce.each(l, function(o) { + lst.options[lst.options.length] = new Option(o[0], o[1]); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + update : function() { + var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el; + + tinyMCEPopup.restoreSelection(); + + if (f.src.value === '') { + if (ed.selection.getNode().nodeName == 'IMG') { + ed.dom.remove(ed.selection.getNode()); + ed.execCommand('mceRepaint'); + } + + tinyMCEPopup.close(); + return; + } + + if (!ed.settings.inline_styles) { + args = tinymce.extend(args, { + vspace : nl.vspace.value, + hspace : nl.hspace.value, + border : nl.border.value, + align : getSelectValue(f, 'align') + }); + } else + args.style = this.styleVal; + + tinymce.extend(args, { + src : f.src.value.replace(/ /g, '%20'), + alt : f.alt.value, + width : f.width.value, + height : f.height.value + }); + + el = ed.selection.getNode(); + + if (el && el.nodeName == 'IMG') { + ed.dom.setAttribs(el, args); + tinyMCEPopup.editor.execCommand('mceRepaint'); + tinyMCEPopup.editor.focus(); + } else { + tinymce.each(args, function(value, name) { + if (value === "") { + delete args[name]; + } + }); + + ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1}); + ed.undoManager.add(); + } + + tinyMCEPopup.close(); + }, + + updateStyle : function() { + var dom = tinyMCEPopup.dom, st = {}, v, f = document.forms[0]; + + if (tinyMCEPopup.editor.settings.inline_styles) { + tinymce.each(tinyMCEPopup.dom.parseStyle(this.styleVal), function(value, key) { + st[key] = value; + }); + + // Handle align + v = getSelectValue(f, 'align'); + if (v) { + if (v == 'left' || v == 'right') { + st['float'] = v; + delete st['vertical-align']; + } else { + st['vertical-align'] = v; + delete st['float']; + } + } else { + delete st['float']; + delete st['vertical-align']; + } + + // Handle border + v = f.border.value; + if (v || v == '0') { + if (v == '0') + st['border'] = '0'; + else + st['border'] = v + 'px solid black'; + } else + delete st['border']; + + // Handle hspace + v = f.hspace.value; + if (v) { + delete st['margin']; + st['margin-left'] = v + 'px'; + st['margin-right'] = v + 'px'; + } else { + delete st['margin-left']; + delete st['margin-right']; + } + + // Handle vspace + v = f.vspace.value; + if (v) { + delete st['margin']; + st['margin-top'] = v + 'px'; + st['margin-bottom'] = v + 'px'; + } else { + delete st['margin-top']; + delete st['margin-bottom']; + } + + // Merge + st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img'); + this.styleVal = dom.serializeStyle(st, 'img'); + } + }, + + getAttrib : function(e, at) { + var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; + + if (ed.settings.inline_styles) { + switch (at) { + case 'align': + if (v = dom.getStyle(e, 'float')) + return v; + + if (v = dom.getStyle(e, 'vertical-align')) + return v; + + break; + + case 'hspace': + v = dom.getStyle(e, 'margin-left') + v2 = dom.getStyle(e, 'margin-right'); + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'vspace': + v = dom.getStyle(e, 'margin-top') + v2 = dom.getStyle(e, 'margin-bottom'); + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'border': + v = 0; + + tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { + sv = dom.getStyle(e, 'border-' + sv + '-width'); + + // False or not the same as prev + if (!sv || (sv != v && v !== 0)) { + v = 0; + return false; + } + + if (sv) + v = sv; + }); + + if (v) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + } + } + + if (v = dom.getAttrib(e, at)) + return v; + + return ''; + }, + + resetImageData : function() { + var f = document.forms[0]; + + f.width.value = f.height.value = ""; + }, + + updateImageData : function() { + var f = document.forms[0], t = ImageDialog; + + if (f.width.value == "") + f.width.value = t.preloadImg.width; + + if (f.height.value == "") + f.height.value = t.preloadImg.height; + }, + + getImageData : function() { + var f = document.forms[0]; + + this.preloadImg = new Image(); + this.preloadImg.onload = this.updateImageData; + this.preloadImg.onerror = this.resetImageData; + this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value); + } +}; + +ImageDialog.preInit(); +tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); diff --git a/src/wp-includes/js/tinymce/themes/advanced/js/link.js b/src/wp-includes/js/tinymce/themes/advanced/js/link.js new file mode 100644 index 0000000..b08b2ba --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/js/link.js @@ -0,0 +1,159 @@ +tinyMCEPopup.requireLangPack(); + +var LinkDialog = { + preInit : function() { + var url; + + if (url = tinyMCEPopup.getParam("external_link_list_url")) + document.write(''); + }, + + init : function() { + var f = document.forms[0], ed = tinyMCEPopup.editor; + + // Setup browse button + document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link'); + if (isVisible('hrefbrowser')) + document.getElementById('href').style.width = '180px'; + + this.fillClassList('class_list'); + this.fillFileList('link_list', 'tinyMCELinkList'); + this.fillTargetList('target_list'); + + if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) { + f.href.value = ed.dom.getAttrib(e, 'href'); + f.linktitle.value = ed.dom.getAttrib(e, 'title'); + f.insert.value = ed.getLang('update'); + selectByValue(f, 'link_list', f.href.value); + selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target')); + selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class')); + } + }, + + update : function() { + var f = document.forms[0], ed = tinyMCEPopup.editor, e, b, href = f.href.value.replace(/ /g, '%20'); + + tinyMCEPopup.restoreSelection(); + e = ed.dom.getParent(ed.selection.getNode(), 'A'); + + // Remove element if there is no href + if (!f.href.value) { + if (e) { + b = ed.selection.getBookmark(); + ed.dom.remove(e, 1); + ed.selection.moveToBookmark(b); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + return; + } + } + + // Create new anchor elements + if (e == null) { + ed.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1}); + + tinymce.each(ed.dom.select("a"), function(n) { + if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') { + e = n; + + ed.dom.setAttribs(e, { + href : href, + title : f.linktitle.value, + target : f.target_list ? getSelectValue(f, "target_list") : null, + 'class' : f.class_list ? getSelectValue(f, "class_list") : null + }); + } + }); + } else { + ed.dom.setAttribs(e, { + href : href, + title : f.linktitle.value + }); + + if (f.target_list) { + ed.dom.setAttrib(e, 'target', getSelectValue(f, "target_list")); + } + + if (f.class_list) { + ed.dom.setAttrib(e, 'class', getSelectValue(f, "class_list")); + } + } + + // Don't move caret if selection was image + if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') { + ed.focus(); + ed.selection.select(e); + ed.selection.collapse(0); + tinyMCEPopup.storeSelection(); + } + + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + }, + + checkPrefix : function(n) { + if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email'))) + n.value = 'mailto:' + n.value; + + if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external'))) + n.value = 'http://' + n.value; + }, + + fillFileList : function(id, l) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + l = window[l]; + + if (l && l.length > 0) { + lst.options[lst.options.length] = new Option('', ''); + + tinymce.each(l, function(o) { + lst.options[lst.options.length] = new Option(o[0], o[1]); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + fillClassList : function(id) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { + cl = []; + + tinymce.each(v.split(';'), function(v) { + var p = v.split('='); + + cl.push({'title' : p[0], 'class' : p[1]}); + }); + } else + cl = tinyMCEPopup.editor.dom.getClasses(); + + if (cl.length > 0) { + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); + + tinymce.each(cl, function(o) { + lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + fillTargetList : function(id) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v; + + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self'); + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank'); + + if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) { + tinymce.each(v.split(','), function(v) { + v = v.split('='); + lst.options[lst.options.length] = new Option(v[0], v[1]); + }); + } + } +}; + +LinkDialog.preInit(); +tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog); diff --git a/src/wp-includes/js/tinymce/themes/advanced/js/source_editor.js b/src/wp-includes/js/tinymce/themes/advanced/js/source_editor.js new file mode 100644 index 0000000..d417937 --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/js/source_editor.js @@ -0,0 +1,78 @@ +tinyMCEPopup.requireLangPack(); +tinyMCEPopup.onInit.add(onLoadInit); + +function saveContent() { + tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true}); + tinyMCEPopup.close(); +} + +function onLoadInit() { + tinyMCEPopup.resizeToInnerSize(); + + // Remove Gecko spellchecking + if (tinymce.isGecko) + document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck"); + + document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true}); + + if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) { + turnWrapOn(); + document.getElementById('wraped').checked = true; + } + + resizeInputs(); +} + +function setWrap(val) { + var v, n, s = document.getElementById('htmlSource'); + + s.wrap = val; + + if (!tinymce.isIE) { + v = s.value; + n = s.cloneNode(false); + n.setAttribute("wrap", val); + s.parentNode.replaceChild(n, s); + n.value = v; + } +} + +function setWhiteSpaceCss(value) { + var el = document.getElementById('htmlSource'); + tinymce.DOM.setStyle(el, 'white-space', value); +} + +function turnWrapOff() { + if (tinymce.isWebKit) { + setWhiteSpaceCss('pre'); + } else { + setWrap('off'); + } +} + +function turnWrapOn() { + if (tinymce.isWebKit) { + setWhiteSpaceCss('pre-wrap'); + } else { + setWrap('soft'); + } +} + +function toggleWordWrap(elm) { + if (elm.checked) { + turnWrapOn(); + } else { + turnWrapOff(); + } +} + +function resizeInputs() { + var vp = tinyMCEPopup.dom.getViewPort(window), el; + + el = document.getElementById('htmlSource'); + + if (el) { + el.style.width = (vp.w - 20) + 'px'; + el.style.height = (vp.h - 65) + 'px'; + } +} diff --git a/src/wp-includes/js/tinymce/themes/advanced/link.htm b/src/wp-includes/js/tinymce/themes/advanced/link.htm new file mode 100644 index 0000000..0180002 --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/link.htm @@ -0,0 +1,57 @@ + + + + {#advanced_dlg.link_title} + + + + + + + +
                  + + +
                  +
                  + + + + + + + + + + + + + + + + + + + + + +
                  + + + + +
                   
                  +
                  +
                  + +
                  + + +
                  +
                  + + diff --git a/src/wp-includes/js/tinymce/themes/advanced/shortcuts.htm b/src/wp-includes/js/tinymce/themes/advanced/shortcuts.htm new file mode 100644 index 0000000..781801e --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/shortcuts.htm @@ -0,0 +1,47 @@ + + + + {#advanced_dlg.accessibility_help} + + + + +

                  {#advanced_dlg.accessibility_usage_title}

                  +

                  Toolbars

                  +

                  Press ALT-F10 to move focus to the toolbars. Navigate through the buttons using the arrow keys. + Press enter to activate a button and return focus to the editor. + Press escape to return focus to the editor without performing any actions.

                  + +

                  Status Bar

                  +

                  To access the editor status bar, press ALT-F11. Use the left and right arrow keys to navigate between elements in the path. + Press enter or space to select an element. Press escape to return focus to the editor without changing the selection.

                  + +

                  Context Menu

                  +

                  Press shift-F10 to activate the context menu. Use the up and down arrow keys to move between menu items. To open sub-menus press the right arrow key. + To close submenus press the left arrow key. Press escape to close the context menu.

                  + +

                  Keyboard Shortcuts

                  + + + + + + + + + + + + + + + + + + + + + +
                  KeystrokeFunction
                  Control-BBold
                  Control-IItalic
                  Control-ZUndo
                  Control-YRedo
                  + + diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/default/content.css b/src/wp-includes/js/tinymce/themes/advanced/skins/default/content.css new file mode 100644 index 0000000..4d63ca9 --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/default/content.css @@ -0,0 +1,50 @@ +body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} +body {background:#FFF;} +body.mceForceColors {background:#FFF; color:#000;} +body.mceBrowserDefaults {background:transparent; color:inherit; font-size:inherit; font-family:inherit;} +h1 {font-size: 2em} +h2 {font-size: 1.5em} +h3 {font-size: 1.17em} +h4 {font-size: 1em} +h5 {font-size: .83em} +h6 {font-size: .75em} +.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} +a.mceItemAnchor {display:inline-block; -webkit-user-select:all; -webkit-user-modify:read-only; -moz-user-select:all; -moz-user-modify:read-only; width:11px !important; height:11px !important; background:url(img/items.gif) no-repeat center center} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table, img, hr, .mceItemAnchor {cursor:default} +table td, table th {cursor:text} +ins {border-bottom:1px solid green; text-decoration: none; color:green} +del {color:red; text-decoration:line-through} +cite {border-bottom:1px dashed blue} +acronym {border-bottom:1px dotted #CCC; cursor:help} +abbr {border-bottom:1px dashed #CCC; cursor:help} + +/* IE */ +* html body { +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +} + +img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} +font[face=mceinline] {font-family:inherit !important} +*[contentEditable]:focus {outline:0} + +.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc} +.mceItemShockWave {background-image:url(../../img/shockwave.gif)} +.mceItemFlash {background-image:url(../../img/flash.gif)} +.mceItemQuickTime {background-image:url(../../img/quicktime.gif)} +.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)} +.mceItemRealMedia {background-image:url(../../img/realmedia.gif)} +.mceItemVideo {background-image:url(../../img/video.gif)} +.mceItemAudio {background-image:url(../../img/video.gif)} +.mceItemEmbeddedAudio {background-image:url(../../img/video.gif)} +.mceItemIframe {background-image:url(../../img/iframe.gif)} +.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;} diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/default/dialog.css b/src/wp-includes/js/tinymce/themes/advanced/skins/default/dialog.css new file mode 100644 index 0000000..8950ba3 --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/default/dialog.css @@ -0,0 +1,118 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDDDDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +background:#F0F0EE; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE;} +td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;} +a:hover {color:#2B6FB6;} +.nowrap {white-space: nowrap} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +label.msg {display:none;} +label.invalid {color:#EE0000; display:inline;} +input.invalid {border:1px solid #EE0000;} +input {background:#FFF; border:1px solid #CCC;} +input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +input, select, textarea {border:1px solid #808080;} +input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} +input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} +.input_noborder {border:0;} + +/* Buttons */ +#insert, #cancel, input.button, .updateButton { +border:0; margin:0; padding:0; +font-weight:bold; +width:94px; height:26px; +background:url(img/buttons.png) 0 -26px; +cursor:pointer; +padding-bottom:2px; +float:left; +} + +#insert {background:url(img/buttons.png) 0 -52px} +#cancel {background:url(img/buttons.png) 0 0; float:right} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} +.mceOldBoxModel a.browse span {width:22px; height:20px;} +a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} +a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} +a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} +.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} +a.pickcolor:hover span {background-color:#B2BBD0;} +a.pickcolor:hover span.disabled {} + +/* Charmap */ +table.charmap {border:1px solid #AAA; text-align:center} +td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} +#charmap a {display:block; color:#000; text-decoration:none; border:0} +#charmap a:hover {background:#CCC;color:#2B6FB6} +#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} +#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} + +/* Source */ +.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} +.mceActionPanel {margin-top:5px;} + +/* Tabs classes */ +.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} +.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;} +.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;} +.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} + +/* Panels */ +.panel_wrapper div.panel {display:none;} +.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} +.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} + +/* Columns */ +.column {float:left;} +.properties {width:100%;} +.properties .column1 {} +.properties .column2 {text-align:left;} + +/* Titles */ +h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} +h3 {font-size:14px;} +.title {font-size:12px; font-weight:bold; color:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} +#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} +#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap} +#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} +#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} +#colorpicker #light div {overflow:hidden;} +#colorpicker .panel_wrapper div.current {height:175px;} +#colorpicker #namedcolors {width:150px;} +#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} +#colorpicker #colornamecontainer {margin-top:5px;} +#colorpicker #picker_panel fieldset {margin:auto;width:325px;} diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/buttons.png b/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/buttons.png new file mode 100644 index 0000000..1e53560 Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/buttons.png differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/items.gif b/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/items.gif new file mode 100644 index 0000000..d2f9367 Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/items.gif differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif b/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif new file mode 100644 index 0000000..85e31df Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/menu_check.gif b/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/menu_check.gif new file mode 100644 index 0000000..adfdddc Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/menu_check.gif differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/progress.gif b/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/progress.gif new file mode 100644 index 0000000..5bb90fd Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/progress.gif differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/tabs.gif b/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/tabs.gif new file mode 100644 index 0000000..06812cb Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/default/img/tabs.gif differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/default/ui.css b/src/wp-includes/js/tinymce/themes/advanced/skins/default/ui.css new file mode 100644 index 0000000..2e8c658 --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/default/ui.css @@ -0,0 +1,219 @@ +/* Reset */ +.defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left} +.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000} +.defaultSkin table td {vertical-align:middle} + +/* Containers */ +.defaultSkin table {direction:ltr;background:transparent} +.defaultSkin iframe {display:block;} +.defaultSkin .mceToolbar {height:26px} +.defaultSkin .mceLeft {text-align:left} +.defaultSkin .mceRight {text-align:right} + +/* External */ +.defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;} +.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;} +.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0} + +/* Layout */ +.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC} +.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC} +.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC} +.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;} +.defaultSkin td.mceToolbar {background:#F0F0EE; padding-top:1px; vertical-align:top} +.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC} +.defaultSkin .mceStatusbar {background:#F0F0EE; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px} +.defaultSkin .mceStatusbar div {float:left; margin:2px} +.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0} +.defaultSkin .mceStatusbar a:hover {text-decoration:underline} +.defaultSkin table.mceToolbar {margin-left:3px} +.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px} +.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} +.defaultSkin td.mceCenter {text-align:center;} +.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;} +.defaultSkin td.mceRight table {margin:0 0 0 auto;} + +/* Button */ +.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px} +.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0} +.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0} +.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.defaultSkin .mceButtonLabeled {width:auto} +.defaultSkin .mceButtonLabeled span.mceIcon {float:left} +.defaultSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica} +.defaultSkin .mceButtonDisabled .mceButtonLabel {color:#888} + +/* Separator */ +.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px} + +/* ListBox */ +.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block} +.defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden} +.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;} +.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF} +.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0} +.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;} +.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden} +.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px} +.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;} +.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;} + +/* SplitButton */ +.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr} +.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block} +.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;} +.defaultSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/icons.gif);} +.defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;} +.defaultSkin .mceSplitButton span.mceOpen {display:none} +.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0} +.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;} +.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0} +.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;} + +/* ColorSplitButton */ +.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray} +.defaultSkin .mceColorSplitMenu td {padding:2px} +.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080} +.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} +.defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF} +.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2} +.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A} +.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a} +.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px} + +/* Menu */ +.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8; direction:ltr} +.defaultSkin .mceNoIcons span.mceIcon {width:0;} +.defaultSkin .mceNoIcons a .mceText {padding-left:10px} +.defaultSkin .mceMenu table {background:#FFF} +.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block} +.defaultSkin .mceMenu td {height:20px} +.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0} +.defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block} +.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px} +.defaultSkin .mceMenu pre.mceText {font-family:Monospace} +.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;} +.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3} +.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px} +.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD} +.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px} +.defaultSkin .mceMenuItemDisabled .mceText {color:#888} +.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)} +.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center} +.defaultSkin .mceMenu span.mceMenuLine {display:none} +.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;} +.defaultSkin .mceMenuItem td, .defaultSkin .mceMenuItem th {line-height: normal} + +/* Progress,Resize */ +.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF} +.defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} + +/* Rtl */ +.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0} +.mceRtl .mceMenuItem .mceText {text-align: right} + +/* Formats */ +.defaultSkin .mce_formatPreview a {font-size:10px} +.defaultSkin .mce_p span.mceText {} +.defaultSkin .mce_address span.mceText {font-style:italic} +.defaultSkin .mce_pre span.mceText {font-family:monospace} +.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} +.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} +.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} +.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} +.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} +.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} + +/* Theme */ +.defaultSkin span.mce_bold {background-position:0 0} +.defaultSkin span.mce_italic {background-position:-60px 0} +.defaultSkin span.mce_underline {background-position:-140px 0} +.defaultSkin span.mce_strikethrough {background-position:-120px 0} +.defaultSkin span.mce_undo {background-position:-160px 0} +.defaultSkin span.mce_redo {background-position:-100px 0} +.defaultSkin span.mce_cleanup {background-position:-40px 0} +.defaultSkin span.mce_bullist {background-position:-20px 0} +.defaultSkin span.mce_numlist {background-position:-80px 0} +.defaultSkin span.mce_justifyleft {background-position:-460px 0} +.defaultSkin span.mce_justifyright {background-position:-480px 0} +.defaultSkin span.mce_justifycenter {background-position:-420px 0} +.defaultSkin span.mce_justifyfull {background-position:-440px 0} +.defaultSkin span.mce_anchor {background-position:-200px 0} +.defaultSkin span.mce_indent {background-position:-400px 0} +.defaultSkin span.mce_outdent {background-position:-540px 0} +.defaultSkin span.mce_link {background-position:-500px 0} +.defaultSkin span.mce_unlink {background-position:-640px 0} +.defaultSkin span.mce_sub {background-position:-600px 0} +.defaultSkin span.mce_sup {background-position:-620px 0} +.defaultSkin span.mce_removeformat {background-position:-580px 0} +.defaultSkin span.mce_newdocument {background-position:-520px 0} +.defaultSkin span.mce_image {background-position:-380px 0} +.defaultSkin span.mce_help {background-position:-340px 0} +.defaultSkin span.mce_code {background-position:-260px 0} +.defaultSkin span.mce_hr {background-position:-360px 0} +.defaultSkin span.mce_visualaid {background-position:-660px 0} +.defaultSkin span.mce_charmap {background-position:-240px 0} +.defaultSkin span.mce_paste {background-position:-560px 0} +.defaultSkin span.mce_copy {background-position:-700px 0} +.defaultSkin span.mce_cut {background-position:-680px 0} +.defaultSkin span.mce_blockquote {background-position:-220px 0} +.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0} +.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0} +.defaultSkin span.mce_forecolorpicker {background-position:-720px 0} +.defaultSkin span.mce_backcolorpicker {background-position:-760px 0} + +/* Plugins */ +.defaultSkin span.mce_advhr {background-position:-0px -20px} +.defaultSkin span.mce_ltr {background-position:-20px -20px} +.defaultSkin span.mce_rtl {background-position:-40px -20px} +.defaultSkin span.mce_emotions {background-position:-60px -20px} +.defaultSkin span.mce_fullpage {background-position:-80px -20px} +.defaultSkin span.mce_fullscreen {background-position:-100px -20px} +.defaultSkin span.mce_iespell {background-position:-120px -20px} +.defaultSkin span.mce_insertdate {background-position:-140px -20px} +.defaultSkin span.mce_inserttime {background-position:-160px -20px} +.defaultSkin span.mce_absolute {background-position:-180px -20px} +.defaultSkin span.mce_backward {background-position:-200px -20px} +.defaultSkin span.mce_forward {background-position:-220px -20px} +.defaultSkin span.mce_insert_layer {background-position:-240px -20px} +.defaultSkin span.mce_insertlayer {background-position:-260px -20px} +.defaultSkin span.mce_movebackward {background-position:-280px -20px} +.defaultSkin span.mce_moveforward {background-position:-300px -20px} +.defaultSkin span.mce_media {background-position:-320px -20px} +.defaultSkin span.mce_nonbreaking {background-position:-340px -20px} +.defaultSkin span.mce_pastetext {background-position:-360px -20px} +.defaultSkin span.mce_pasteword {background-position:-380px -20px} +.defaultSkin span.mce_selectall {background-position:-400px -20px} +.defaultSkin span.mce_preview {background-position:-420px -20px} +.defaultSkin span.mce_print {background-position:-440px -20px} +.defaultSkin span.mce_cancel {background-position:-460px -20px} +.defaultSkin span.mce_save {background-position:-480px -20px} +.defaultSkin span.mce_replace {background-position:-500px -20px} +.defaultSkin span.mce_search {background-position:-520px -20px} +.defaultSkin span.mce_styleprops {background-position:-560px -20px} +.defaultSkin span.mce_table {background-position:-580px -20px} +.defaultSkin span.mce_cell_props {background-position:-600px -20px} +.defaultSkin span.mce_delete_table {background-position:-620px -20px} +.defaultSkin span.mce_delete_col {background-position:-640px -20px} +.defaultSkin span.mce_delete_row {background-position:-660px -20px} +.defaultSkin span.mce_col_after {background-position:-680px -20px} +.defaultSkin span.mce_col_before {background-position:-700px -20px} +.defaultSkin span.mce_row_after {background-position:-720px -20px} +.defaultSkin span.mce_row_before {background-position:-740px -20px} +.defaultSkin span.mce_merge_cells {background-position:-760px -20px} +.defaultSkin span.mce_table_props {background-position:-980px -20px} +.defaultSkin span.mce_row_props {background-position:-780px -20px} +.defaultSkin span.mce_split_cells {background-position:-800px -20px} +.defaultSkin span.mce_template {background-position:-820px -20px} +.defaultSkin span.mce_visualchars {background-position:-840px -20px} +.defaultSkin span.mce_abbr {background-position:-860px -20px} +.defaultSkin span.mce_acronym {background-position:-880px -20px} +.defaultSkin span.mce_attribs {background-position:-900px -20px} +.defaultSkin span.mce_cite {background-position:-920px -20px} +.defaultSkin span.mce_del {background-position:-940px -20px} +.defaultSkin span.mce_ins {background-position:-960px -20px} +.defaultSkin span.mce_pagebreak {background-position:0 -40px} +.defaultSkin span.mce_restoredraft {background-position:-20px -40px} +.defaultSkin span.mce_spellchecker {background-position:-540px -20px} +.defaultSkin span.mce_visualblocks {background-position: -40px -40px} diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/content.css b/src/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/content.css new file mode 100644 index 0000000..ee3d369 --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/content.css @@ -0,0 +1,24 @@ +body, td, pre { margin:8px;} +body.mceForceColors {background:#FFF; color:#000;} +h1 {font-size: 2em} +h2 {font-size: 1.5em} +h3 {font-size: 1.17em} +h4 {font-size: 1em} +h5 {font-size: .83em} +h6 {font-size: .75em} +.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} +a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat 0 0;} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table, img, hr, .mceItemAnchor {cursor:default} +table td, table th {cursor:text} +ins {border-bottom:1px solid green; text-decoration: none; color:green} +del {color:red; text-decoration:line-through} +cite {border-bottom:1px dashed blue} +acronym {border-bottom:1px dotted #CCC; cursor:help} +abbr {border-bottom:1px dashed #CCC; cursor:help} + +img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} +font[face=mceinline] {font-family:inherit !important} +*[contentEditable]:focus {outline:0} diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/dialog.css b/src/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/dialog.css new file mode 100644 index 0000000..fa3c31a --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/dialog.css @@ -0,0 +1,106 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; +background:#F0F0EE; +color: black; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE; color:#000;} +td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;background-color:transparent;} +a:hover {color:#2B6FB6;background-color:transparent;} +.nowrap {white-space: nowrap} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +label.msg {display:none;} +label.invalid {color:#EE0000; display:inline;background-color:transparent;} +input.invalid {border:1px solid #EE0000;background-color:transparent;} +input {background:#FFF; border:1px solid #CCC;color:black;} +input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +input, select, textarea {border:1px solid #808080;} +input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} +input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} +.input_noborder {border:0;} + +/* Buttons */ +#insert, #cancel, input.button, .updateButton { +font-weight:bold; +width:94px; height:23px; +cursor:pointer; +padding-bottom:2px; +float:left; +} + +#cancel {float:right} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} +.mceOldBoxModel a.browse span {width:22px; height:20px;} +a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} +a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} +a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} +.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} +a.pickcolor:hover span {background-color:#B2BBD0;} +a.pickcolor:hover span.disabled {} + +/* Charmap */ +table.charmap {border:1px solid #AAA; text-align:center} +td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} +#charmap a {display:block; color:#000; text-decoration:none; border:0} +#charmap a:hover {background:#CCC;color:#2B6FB6} +#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} +#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} + +/* Source */ +.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} +.mceActionPanel {margin-top:5px;} + +/* Tabs classes */ +.tabs {width:100%; height:18px; line-height:normal;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; border: 1px solid black; border-bottom:0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block; cursor:pointer;} +.tabs li.current {font-weight: bold; margin-right:2px;} +.tabs span {float:left; display:block; padding:0px 10px 0 0;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} + +/* Panels */ +.panel_wrapper div.panel {display:none;} +.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} +.panel_wrapper {border:1px solid #919B9C; padding:10px; padding-top:5px; clear:both; background:white;} + +/* Columns */ +.column {float:left;} +.properties {width:100%;} +.properties .column1 {} +.properties .column2 {text-align:left;} + +/* Titles */ +h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} +h3 {font-size:14px;} +.title {font-size:12px; font-weight:bold; color:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} +#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} +#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap} +#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} +#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} +#colorpicker #light div {overflow:hidden;} +#colorpicker .panel_wrapper div.current {height:175px;} +#colorpicker #namedcolors {width:150px;} +#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} +#colorpicker #colornamecontainer {margin-top:5px;} diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/ui.css b/src/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/ui.css new file mode 100644 index 0000000..86829c5 --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/ui.css @@ -0,0 +1,106 @@ +/* Reset */ +.highcontrastSkin table, .highcontrastSkin tbody, .highcontrastSkin a, .highcontrastSkin img, .highcontrastSkin tr, .highcontrastSkin div, .highcontrastSkin td, .highcontrastSkin iframe, .highcontrastSkin span, .highcontrastSkin *, .highcontrastSkin .mceText {border:0; margin:0; padding:0; vertical-align:baseline; border-collapse:separate;} +.highcontrastSkin a:hover, .highcontrastSkin a:link, .highcontrastSkin a:visited, .highcontrastSkin a:active {text-decoration:none; font-weight:normal; cursor:default;} +.highcontrastSkin table td {vertical-align:middle} + +.highcontrastSkin .mceIconOnly {display: block !important;} + +/* External */ +.highcontrastSkin .mceExternalToolbar {position:absolute; border:1px solid; border-bottom:0; display:none; background-color: white;} +.highcontrastSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;} +.highcontrastSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px;} + +/* Layout */ +.highcontrastSkin table.mceLayout {border: 1px solid;} +.highcontrastSkin .mceIframeContainer {border-top:1px solid; border-bottom:1px solid} +.highcontrastSkin .mceStatusbar a:hover {text-decoration:underline} +.highcontrastSkin .mceStatusbar {display:block; line-height:1.5em; overflow:visible;} +.highcontrastSkin .mceStatusbar div {float:left} +.highcontrastSkin .mceStatusbar a.mceResize {display:block; float:right; width:20px; height:20px; cursor:se-resize; outline:0} + +.highcontrastSkin .mceToolbar td { display: inline-block; float: left;} +.highcontrastSkin .mceToolbar tr { display: block;} +.highcontrastSkin .mceToolbar table { display: block; } + +/* Button */ + +.highcontrastSkin .mceButton { display:block; margin: 2px; padding: 5px 10px;border: 1px solid; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; -ms-border-radius: 3px; height: 2em;} +.highcontrastSkin .mceButton .mceVoiceLabel { height: 100%; vertical-align: center; line-height: 2em} +.highcontrastSkin .mceButtonDisabled .mceVoiceLabel { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);} +.highcontrastSkin .mceButtonActive, .highcontrastSkin .mceButton:focus, .highcontrastSkin .mceButton:active { border: 5px solid; padding: 1px 6px;-webkit-focus-ring-color:none;outline:none;} + +/* Separator */ +.highcontrastSkin .mceSeparator {display:block; width:16px; height:26px;} + +/* ListBox */ +.highcontrastSkin .mceListBox { display: block; margin:2px;-webkit-focus-ring-color:none;outline:none;} +.highcontrastSkin .mceListBox .mceText {padding: 5px 6px; line-height: 2em; width: 15ex; overflow: hidden;} +.highcontrastSkin .mceListBoxDisabled .mceText { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);} +.highcontrastSkin .mceListBox a.mceText { padding: 5px 10px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;} +.highcontrastSkin .mceListBox a.mceOpen { padding: 5px 4px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-left: 0; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;} +.highcontrastSkin .mceListBox:focus a.mceText, .highcontrastSkin .mceListBox:active a.mceText { border-width: 5px; padding: 1px 10px 1px 6px;} +.highcontrastSkin .mceListBox:focus a.mceOpen, .highcontrastSkin .mceListBox:active a.mceOpen { border-width: 5px; padding: 1px 0px 1px 4px;} + +.highcontrastSkin .mceListBoxMenu {overflow-y:auto} + +/* SplitButton */ +.highcontrastSkin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} + +.highcontrastSkin .mceSplitButton { border-collapse: collapse; margin: 2px; height: 2em; line-height: 2em;-webkit-focus-ring-color:none;outline:none;} +.highcontrastSkin .mceSplitButton td { display: table-cell; float: none; margin: 0; padding: 0; height: 2em;} +.highcontrastSkin .mceSplitButton tr { display: table-row; } +.highcontrastSkin table.mceSplitButton { display: table; } +.highcontrastSkin .mceSplitButton a.mceAction { padding: 5px 10px; display: block; height: 2em; line-height: 2em; overflow: hidden; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;} +.highcontrastSkin .mceSplitButton a.mceOpen { padding: 5px 4px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;} +.highcontrastSkin .mceSplitButton .mceVoiceLabel { height: 2em; vertical-align: center; line-height: 2em; } +.highcontrastSkin .mceSplitButton:focus a.mceAction, .highcontrastSkin .mceSplitButton:active a.mceAction { border-width: 5px; border-right-width: 1px; padding: 1px 10px 1px 6px;-webkit-focus-ring-color:none;outline:none;} +.highcontrastSkin .mceSplitButton:focus a.mceOpen, .highcontrastSkin .mceSplitButton:active a.mceOpen { border-width: 5px; border-left-width: 1px; padding: 1px 0px 1px 4px;-webkit-focus-ring-color:none;outline:none;} + +/* Menu */ +.highcontrastSkin .mceNoIcons span.mceIcon {width:0;} +.highcontrastSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid; direction:ltr} +.highcontrastSkin .mceMenu table {background:white; color: black} +.highcontrastSkin .mceNoIcons a .mceText {padding-left:10px} +.highcontrastSkin .mceMenu a, .highcontrastSkin .mceMenu span, .highcontrastSkin .mceMenu {display:block;background:white; color: black} +.highcontrastSkin .mceMenu td {height:2em} +.highcontrastSkin .mceMenu a {position:relative;padding:3px 0 4px 0; display: block;} +.highcontrastSkin .mceMenu .mceText {position:relative; display:block; cursor:default; margin:0; padding:0 25px 0 25px;} +.highcontrastSkin .mceMenu pre.mceText {font-family:Monospace} +.highcontrastSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:26px;} +.highcontrastSkin td.mceMenuItemSeparator {border-top:1px solid; height:1px} +.highcontrastSkin .mceMenuItemTitle a {border:0; border-bottom:1px solid} +.highcontrastSkin .mceMenuItemTitle span.mceText {font-weight:bold; padding-left:4px} +.highcontrastSkin .mceNoIcons .mceMenuItemSelected span.mceText:before {content: "\2713\A0";} +.highcontrastSkin .mceMenu span.mceMenuLine {display:none} +.highcontrastSkin .mceMenuItemSub a .mceText:after {content: "\A0\25B8"} +.highcontrastSkin .mceMenuItem td, .highcontrastSkin .mceMenuItem th {line-height: normal} + +/* ColorSplitButton */ +.highcontrastSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid; color: #000} +.highcontrastSkin .mceColorSplitMenu td {padding:2px} +.highcontrastSkin .mceColorSplitMenu a {display:block; width:16px; height:16px; overflow:hidden; color:#000; margin: 0; padding: 0;} +.highcontrastSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} +.highcontrastSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF} +.highcontrastSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid; background-color:#B6BDD2} +.highcontrastSkin a.mceMoreColors:hover {border:1px solid #0A246A; color: #000;} +.highcontrastSkin .mceColorPreview {display:none;} +.highcontrastSkin .mce_forecolor span.mceAction, .highcontrastSkin .mce_backcolor span.mceAction {height:17px;overflow:hidden} + +/* Progress,Resize */ +.highcontrastSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF} +.highcontrastSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} + +/* Rtl */ +.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0} +.mceRtl .mceMenuItem .mceText {text-align: right} + +/* Formats */ +.highcontrastSkin .mce_p span.mceText {} +.highcontrastSkin .mce_address span.mceText {font-style:italic} +.highcontrastSkin .mce_pre span.mceText {font-family:monospace} +.highcontrastSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} +.highcontrastSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} +.highcontrastSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} +.highcontrastSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} +.highcontrastSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} +.highcontrastSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/content.css b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/content.css new file mode 100644 index 0000000..631fa0e --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/content.css @@ -0,0 +1,48 @@ +body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} +body {background:#FFF;} +body.mceForceColors {background:#FFF; color:#000;} +h1 {font-size: 2em} +h2 {font-size: 1.5em} +h3 {font-size: 1.17em} +h4 {font-size: 1em} +h5 {font-size: .83em} +h6 {font-size: .75em} +.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} +a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat 0 0;} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table, img, hr, .mceItemAnchor {cursor:default} +table td, table th {cursor:text} +ins {border-bottom:1px solid green; text-decoration: none; color:green} +del {color:red; text-decoration:line-through} +cite {border-bottom:1px dashed blue} +acronym {border-bottom:1px dotted #CCC; cursor:help} +abbr {border-bottom:1px dashed #CCC; cursor:help} + +/* IE */ +* html body { +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +} + +img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} +font[face=mceinline] {font-family:inherit !important} +*[contentEditable]:focus {outline:0} + +.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc} +.mceItemShockWave {background-image:url(../../img/shockwave.gif)} +.mceItemFlash {background-image:url(../../img/flash.gif)} +.mceItemQuickTime {background-image:url(../../img/quicktime.gif)} +.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)} +.mceItemRealMedia {background-image:url(../../img/realmedia.gif)} +.mceItemVideo {background-image:url(../../img/video.gif)} +.mceItemAudio {background-image:url(../../img/video.gif)} +.mceItemIframe {background-image:url(../../img/iframe.gif)} +.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;} diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/dialog.css b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/dialog.css new file mode 100644 index 0000000..84d2fe9 --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/dialog.css @@ -0,0 +1,118 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDDDDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +background:#F0F0EE; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE;} +td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;} +a:hover {color:#2B6FB6;} +.nowrap {white-space: nowrap} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +label.msg {display:none;} +label.invalid {color:#EE0000; display:inline;} +input.invalid {border:1px solid #EE0000;} +input {background:#FFF; border:1px solid #CCC;} +input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +input, select, textarea {border:1px solid #808080;} +input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} +input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} +.input_noborder {border:0;} + +/* Buttons */ +#insert, #cancel, input.button, .updateButton { +border:0; margin:0; padding:0; +font-weight:bold; +width:94px; height:26px; +background:url(../default/img/buttons.png) 0 -26px; +cursor:pointer; +padding-bottom:2px; +float:left; +} + +#insert {background:url(../default/img/buttons.png) 0 -52px} +#cancel {background:url(../default/img/buttons.png) 0 0; float:right} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} +.mceOldBoxModel a.browse span {width:22px; height:20px;} +a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} +a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} +a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} +.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} +a.pickcolor:hover span {background-color:#B2BBD0;} +a.pickcolor:hover span.disabled {} + +/* Charmap */ +table.charmap {border:1px solid #AAA; text-align:center} +td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} +#charmap a {display:block; color:#000; text-decoration:none; border:0} +#charmap a:hover {background:#CCC;color:#2B6FB6} +#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} +#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} + +/* Source */ +.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} +.mceActionPanel {margin-top:5px;} + +/* Tabs classes */ +.tabs {width:100%; height:18px; line-height:normal; background:url(../default/img/tabs.gif) repeat-x 0 -72px;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; background:url(../default/img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} +.tabs li.current {background:url(../default/img/tabs.gif) no-repeat 0 -18px; margin-right:2px;} +.tabs span {float:left; display:block; background:url(../default/img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;} +.tabs .current span {background:url(../default/img/tabs.gif) no-repeat right -54px;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} + +/* Panels */ +.panel_wrapper div.panel {display:none;} +.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} +.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} + +/* Columns */ +.column {float:left;} +.properties {width:100%;} +.properties .column1 {} +.properties .column2 {text-align:left;} + +/* Titles */ +h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} +h3 {font-size:14px;} +.title {font-size:12px; font-weight:bold; color:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} +#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} +#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap} +#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} +#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} +#colorpicker #light div {overflow:hidden;} +#colorpicker .panel_wrapper div.current {height:175px;} +#colorpicker #namedcolors {width:150px;} +#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} +#colorpicker #colornamecontainer {margin-top:5px;} +#colorpicker #picker_panel fieldset {margin:auto;width:325px;} diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/img/button_bg.png b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/img/button_bg.png new file mode 100644 index 0000000..13a5cb0 Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/img/button_bg.png differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/img/button_bg_black.png b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/img/button_bg_black.png new file mode 100644 index 0000000..7fc57f2 Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/img/button_bg_black.png differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/img/button_bg_silver.png b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/img/button_bg_silver.png new file mode 100644 index 0000000..c0dcc6c Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/img/button_bg_silver.png differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/ui.css b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/ui.css new file mode 100644 index 0000000..abd5d8d --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/ui.css @@ -0,0 +1,222 @@ +/* Reset */ +.o2k7Skin table, .o2k7Skin tbody, .o2k7Skin a, .o2k7Skin img, .o2k7Skin tr, .o2k7Skin div, .o2k7Skin td, .o2k7Skin iframe, .o2k7Skin span, .o2k7Skin *, .o2k7Skin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left} +.o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000} +.o2k7Skin table td {vertical-align:middle} + +/* Containers */ +.o2k7Skin table {background:transparent} +.o2k7Skin iframe {display:block;} +.o2k7Skin .mceToolbar {height:26px} + +/* External */ +.o2k7Skin .mceExternalToolbar {position:absolute; border:1px solid #ABC6DD; border-bottom:0; display:none} +.o2k7Skin .mceExternalToolbar td.mceToolbar {padding-right:13px;} +.o2k7Skin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0} + +/* Layout */ +.o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD} +.o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD} +.o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD} +.o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0} +.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD} +.o2k7Skin td.mceToolbar{background:#E5EFFD} +.o2k7Skin .mceStatusbar {background:#E5EFFD; display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px} +.o2k7Skin .mceStatusbar div {float:left; padding:2px} +.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0} +.o2k7Skin .mceStatusbar a:hover {text-decoration:underline} +.o2k7Skin table.mceToolbar {margin-left:3px} +.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;} +.o2k7Skin .mceToolbar td.mceFirst span {margin:0} +.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px} +.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none} +.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px} +.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} +.o2k7Skin td.mceCenter {text-align:center;} +.o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;} +.o2k7Skin td.mceRight table {margin:0 0 0 auto;} + +/* Button */ +.o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px} +.o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px} +.o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px} +.o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px} +.o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px} +.o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.o2k7Skin .mceButtonLabeled {width:auto} +.o2k7Skin .mceButtonLabeled span.mceIcon {float:left} +.o2k7Skin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica} +.o2k7Skin .mceButtonDisabled .mceButtonLabel {color:#888} + +/* Separator */ +.o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px} + +/* ListBox */ +.o2k7Skin .mceListBox {padding-left: 3px} +.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block} +.o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden} +.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0} +.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF} +.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px} +.o2k7Skin .mceListBoxDisabled .mceText {color:gray} +.o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden; margin-left:3px} +.o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px} +.o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;} + +/* SplitButton */ +.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px; direction:ltr} +.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)} +.o2k7Skin .mceSplitButton a.mceAction {width:22px} +.o2k7Skin .mceSplitButton span.mceAction {width:22px; background-image:url(../../img/icons.gif)} +.o2k7Skin .mceSplitButton a.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0} +.o2k7Skin .mceSplitButton span.mceOpen {display:none} +.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px} +.o2k7Skin table.mceSplitButtonEnabled:hover a.mceOpen, .o2k7Skin .mceSplitButtonHover a.mceOpen, .o2k7Skin .mceSplitButtonSelected a.mceOpen {background-position:-44px -44px} +.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.o2k7Skin .mceSplitButtonActive {background-position:0 -44px} + +/* ColorSplitButton */ +.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray} +.o2k7Skin .mceColorSplitMenu td {padding:2px} +.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080} +.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} +.o2k7Skin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF} +.o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2} +.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A} +.o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a;overflow:hidden} +.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px;overflow:hidden} + +/* Menu */ +.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD; direction:ltr} +.o2k7Skin .mceNoIcons span.mceIcon {width:0;} +.o2k7Skin .mceNoIcons a .mceText {padding-left:10px} +.o2k7Skin .mceMenu table {background:#FFF} +.o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block} +.o2k7Skin .mceMenu td {height:20px} +.o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0} +.o2k7Skin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block} +.o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px} +.o2k7Skin .mceMenu pre.mceText {font-family:Monospace} +.o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;} +.o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3} +.o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px} +.o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD} +.o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px} +.o2k7Skin .mceMenuItemDisabled .mceText {color:#888} +.o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)} +.o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center} +.o2k7Skin .mceMenu span.mceMenuLine {display:none} +.o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;} +.o2k7Skin .mceMenuItem td, .o2k7Skin .mceMenuItem th {line-height: normal} + +/* Progress,Resize */ +.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF} +.o2k7Skin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} + +/* Rtl */ +.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0} +.mceRtl .mceMenuItem .mceText {text-align: right} + +/* Formats */ +.o2k7Skin .mce_formatPreview a {font-size:10px} +.o2k7Skin .mce_p span.mceText {} +.o2k7Skin .mce_address span.mceText {font-style:italic} +.o2k7Skin .mce_pre span.mceText {font-family:monospace} +.o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} +.o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} +.o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} +.o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} +.o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} +.o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} + +/* Theme */ +.o2k7Skin span.mce_bold {background-position:0 0} +.o2k7Skin span.mce_italic {background-position:-60px 0} +.o2k7Skin span.mce_underline {background-position:-140px 0} +.o2k7Skin span.mce_strikethrough {background-position:-120px 0} +.o2k7Skin span.mce_undo {background-position:-160px 0} +.o2k7Skin span.mce_redo {background-position:-100px 0} +.o2k7Skin span.mce_cleanup {background-position:-40px 0} +.o2k7Skin span.mce_bullist {background-position:-20px 0} +.o2k7Skin span.mce_numlist {background-position:-80px 0} +.o2k7Skin span.mce_justifyleft {background-position:-460px 0} +.o2k7Skin span.mce_justifyright {background-position:-480px 0} +.o2k7Skin span.mce_justifycenter {background-position:-420px 0} +.o2k7Skin span.mce_justifyfull {background-position:-440px 0} +.o2k7Skin span.mce_anchor {background-position:-200px 0} +.o2k7Skin span.mce_indent {background-position:-400px 0} +.o2k7Skin span.mce_outdent {background-position:-540px 0} +.o2k7Skin span.mce_link {background-position:-500px 0} +.o2k7Skin span.mce_unlink {background-position:-640px 0} +.o2k7Skin span.mce_sub {background-position:-600px 0} +.o2k7Skin span.mce_sup {background-position:-620px 0} +.o2k7Skin span.mce_removeformat {background-position:-580px 0} +.o2k7Skin span.mce_newdocument {background-position:-520px 0} +.o2k7Skin span.mce_image {background-position:-380px 0} +.o2k7Skin span.mce_help {background-position:-340px 0} +.o2k7Skin span.mce_code {background-position:-260px 0} +.o2k7Skin span.mce_hr {background-position:-360px 0} +.o2k7Skin span.mce_visualaid {background-position:-660px 0} +.o2k7Skin span.mce_charmap {background-position:-240px 0} +.o2k7Skin span.mce_paste {background-position:-560px 0} +.o2k7Skin span.mce_copy {background-position:-700px 0} +.o2k7Skin span.mce_cut {background-position:-680px 0} +.o2k7Skin span.mce_blockquote {background-position:-220px 0} +.o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0} +.o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0} +.o2k7Skin span.mce_forecolorpicker {background-position:-720px 0} +.o2k7Skin span.mce_backcolorpicker {background-position:-760px 0} + +/* Plugins */ +.o2k7Skin span.mce_advhr {background-position:-0px -20px} +.o2k7Skin span.mce_ltr {background-position:-20px -20px} +.o2k7Skin span.mce_rtl {background-position:-40px -20px} +.o2k7Skin span.mce_emotions {background-position:-60px -20px} +.o2k7Skin span.mce_fullpage {background-position:-80px -20px} +.o2k7Skin span.mce_fullscreen {background-position:-100px -20px} +.o2k7Skin span.mce_iespell {background-position:-120px -20px} +.o2k7Skin span.mce_insertdate {background-position:-140px -20px} +.o2k7Skin span.mce_inserttime {background-position:-160px -20px} +.o2k7Skin span.mce_absolute {background-position:-180px -20px} +.o2k7Skin span.mce_backward {background-position:-200px -20px} +.o2k7Skin span.mce_forward {background-position:-220px -20px} +.o2k7Skin span.mce_insert_layer {background-position:-240px -20px} +.o2k7Skin span.mce_insertlayer {background-position:-260px -20px} +.o2k7Skin span.mce_movebackward {background-position:-280px -20px} +.o2k7Skin span.mce_moveforward {background-position:-300px -20px} +.o2k7Skin span.mce_media {background-position:-320px -20px} +.o2k7Skin span.mce_nonbreaking {background-position:-340px -20px} +.o2k7Skin span.mce_pastetext {background-position:-360px -20px} +.o2k7Skin span.mce_pasteword {background-position:-380px -20px} +.o2k7Skin span.mce_selectall {background-position:-400px -20px} +.o2k7Skin span.mce_preview {background-position:-420px -20px} +.o2k7Skin span.mce_print {background-position:-440px -20px} +.o2k7Skin span.mce_cancel {background-position:-460px -20px} +.o2k7Skin span.mce_save {background-position:-480px -20px} +.o2k7Skin span.mce_replace {background-position:-500px -20px} +.o2k7Skin span.mce_search {background-position:-520px -20px} +.o2k7Skin span.mce_styleprops {background-position:-560px -20px} +.o2k7Skin span.mce_table {background-position:-580px -20px} +.o2k7Skin span.mce_cell_props {background-position:-600px -20px} +.o2k7Skin span.mce_delete_table {background-position:-620px -20px} +.o2k7Skin span.mce_delete_col {background-position:-640px -20px} +.o2k7Skin span.mce_delete_row {background-position:-660px -20px} +.o2k7Skin span.mce_col_after {background-position:-680px -20px} +.o2k7Skin span.mce_col_before {background-position:-700px -20px} +.o2k7Skin span.mce_row_after {background-position:-720px -20px} +.o2k7Skin span.mce_row_before {background-position:-740px -20px} +.o2k7Skin span.mce_merge_cells {background-position:-760px -20px} +.o2k7Skin span.mce_table_props {background-position:-980px -20px} +.o2k7Skin span.mce_row_props {background-position:-780px -20px} +.o2k7Skin span.mce_split_cells {background-position:-800px -20px} +.o2k7Skin span.mce_template {background-position:-820px -20px} +.o2k7Skin span.mce_visualchars {background-position:-840px -20px} +.o2k7Skin span.mce_abbr {background-position:-860px -20px} +.o2k7Skin span.mce_acronym {background-position:-880px -20px} +.o2k7Skin span.mce_attribs {background-position:-900px -20px} +.o2k7Skin span.mce_cite {background-position:-920px -20px} +.o2k7Skin span.mce_del {background-position:-940px -20px} +.o2k7Skin span.mce_ins {background-position:-960px -20px} +.o2k7Skin span.mce_pagebreak {background-position:0 -40px} +.o2k7Skin span.mce_restoredraft {background-position:-20px -40px} +.o2k7Skin span.mce_spellchecker {background-position:-540px -20px} +.o2k7Skin span.mce_visualblocks {background-position: -40px -40px} diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/ui_black.css b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/ui_black.css new file mode 100644 index 0000000..85812cd --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/ui_black.css @@ -0,0 +1,8 @@ +/* Black */ +.o2k7SkinBlack .mceToolbar .mceToolbarStart span, .o2k7SkinBlack .mceToolbar .mceToolbarEnd span, .o2k7SkinBlack .mceButton, .o2k7SkinBlack .mceSplitButton, .o2k7SkinBlack .mceSeparator, .o2k7SkinBlack .mceSplitButton a.mceOpen, .o2k7SkinBlack .mceListBox a.mceOpen {background-image:url(img/button_bg_black.png)} +.o2k7SkinBlack td.mceToolbar, .o2k7SkinBlack td.mceStatusbar, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack .mceMenuItemTitle span.mceText, .o2k7SkinBlack .mceStatusbar div, .o2k7SkinBlack .mceStatusbar span, .o2k7SkinBlack .mceStatusbar a {background:#535353; color:#FFF} +.o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0} +.o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7SkinBlack .mceListBoxHover .mceText, .o2k7SkinBlack .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0} +.o2k7SkinBlack .mceExternalToolbar, .o2k7SkinBlack .mceListBox .mceText, .o2k7SkinBlack div.mceMenu, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceFirst td, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceLast td, .o2k7SkinBlack .mceIframeContainer {border-color: #535353;} +.o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7SkinBlack .mceSplitButtonHover a.mceAction, .o2k7SkinBlack .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)} +.o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7SkinBlack .mceMenu .mceMenuItemActive {background-color:#FFE7A1} \ No newline at end of file diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/ui_silver.css b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/ui_silver.css new file mode 100644 index 0000000..d64c361 --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/o2k7/ui_silver.css @@ -0,0 +1,5 @@ +/* Silver */ +.o2k7SkinSilver .mceToolbar .mceToolbarStart span, .o2k7SkinSilver .mceButton, .o2k7SkinSilver .mceSplitButton, .o2k7SkinSilver .mceSeparator, .o2k7SkinSilver .mceSplitButton a.mceOpen, .o2k7SkinSilver .mceListBox a.mceOpen {background-image:url(img/button_bg_silver.png)} +.o2k7SkinSilver td.mceToolbar, .o2k7SkinSilver td.mceStatusbar, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee} +.o2k7SkinSilver .mceListBox .mceText {background:#FFF} +.o2k7SkinSilver .mceExternalToolbar, .o2k7SkinSilver .mceListBox .mceText, .o2k7SkinSilver div.mceMenu, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceFirst td, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceLast td, .o2k7SkinSilver .mceIframeContainer {border-color: #bbb} diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/content.css b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/content.css new file mode 100644 index 0000000..26a847a --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/content.css @@ -0,0 +1,160 @@ +body.mceForceColors {background:#FFF; color:#000;} +body.mceBrowserDefaults {background:transparent; color:inherit; font-size:inherit; font-family:inherit;} +td {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} +h1 {font-size: 2em} +h2 {font-size: 1.5em} +h3 {font-size: 1.17em} +h4 {font-size: 1em} +h5 {font-size: .83em} +h6 {font-size: .75em} +.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} +a.mceItemAnchor {display:inline-block; -webkit-user-select:all; -webkit-user-modify:read-only; -moz-user-select:all; -moz-user-modify:read-only; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat center center} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table, img, hr, .mceItemAnchor {cursor:default} +table td, table th {cursor:text} +ins {border-bottom:1px solid green; text-decoration: none; color:green} +del {color:red; text-decoration:line-through} +cite {border-bottom:1px dashed blue} +acronym {border-bottom:1px dotted #CCC; cursor:help} +abbr {border-bottom:1px dashed #CCC; cursor:help} + +img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} +font[face=mceinline] {font-family:inherit !important} +*[contentEditable]:focus {outline:0} + +.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc} +.mceItemShockWave {background-image:url(../../img/shockwave.gif)} +.mceItemFlash {background-image:url(../../img/flash.gif)} +.mceItemQuickTime {background-image:url(../../img/quicktime.gif)} +.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)} +.mceItemRealMedia {background-image:url(../../img/realmedia.gif)} +.mceItemVideo {background-image:url(../../img/video.gif)} +.mceItemAudio {background-image:url(../../img/video.gif)} +.mceItemIframe {background-image:url(../../img/iframe.gif)} +.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;} + +/* WordPress styles */ +body { + font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif; + font-size: 14px; + line-height: 1.5em; + color: #333; + background-color: #fff; + margin: 0; + padding: 10px; +} + +p { + margin-bottom: 1.3em; +} + +.aligncenter, +dl.aligncenter { + display: block; + margin-left: auto; + margin-right: auto; +} + +.alignleft { + float: left; +} + +.alignright { + float: right; +} + +.wp-caption { + border: 1px solid #ddd; + text-align: center; + background-color: #f3f3f3; + padding-top: 4px; + margin: 10px 0; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.mceIEcenter { + text-align: center; +} + +.wp-caption img { + margin: 0; + padding: 0; + border: 0 none; + -webkit-user-drag: none; +} + +.wp-caption-dd { + font-size: 11px; + line-height: 1.5; + padding: 0 4px 5px; + margin: 0; +} + +pre { + font: 12px/18px Consolas, Monaco, monospace; +} + +td { + color: #000; + font-size: 11px; + margin: 8px; +} + +/* Styles for the WordPress plugins */ +img.mce-wp-nextpage, +img.mce-wp-more { + border: 0; + border-top: 1px dotted #cccccc; + display: block; + height: 12px; + width: 100%; + margin: 1.2em auto 0; +} + +img.mce-wp-more { + background: transparent url("img/mce-more.png") no-repeat right top; + background-size: 52px 11px; +} + +img.mce-wp-nextpage { + background: transparent url("img/mce-nextpage.png") no-repeat right top; + background-size: 76px 11px; +} + + +img.wp-gallery { + border: 1px dashed #888; + background: #f2f8ff url("img/gallery.png") no-repeat scroll center center; + background-size: 40px 40px; + width: 100%; + height: 250px; +} + +img.wp-oembed { + border: 1px dashed #888; + background: #f7f5f2 url("img/embedded.png") no-repeat scroll center center; + width: 300px; + height: 250px; +} + + +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + img.mce-wp-more { + background-image: url("img/mce-more-2x.png"); + } + + img.mce-wp-nextpage { + background-image: url("img/mce-nextpage-2x.png"); + } + + img.wp-gallery { + background-image: url("img/gallery-2x.png"); + } +} diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/dialog.css b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/dialog.css new file mode 100644 index 0000000..b56d9e6 --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/dialog.css @@ -0,0 +1,213 @@ +@import url('//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,300,400,600&subset=latin-ext,latin'); + +/* Generic */ +body { +font-family: "Open Sans", sans-serif; +font-size:13px; +background:#fcfcfc; +padding:0; +margin:8px 8px 0 8px; +} + +textarea {resize:none;outline:none;} + +a:link, a:hover { + color: #2B6FB6; +} + +a:visited { + color: #3C2BB6; +} + +.nowrap {white-space: nowrap} + +/* Forms */ +form {margin: 0;} +fieldset {margin:0; padding:4px; border:1px solid #dfdfdf; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +label.msg {display:none;} +label.invalid {color:#EE0000; display:inline;} +input.invalid {border:1px solid #EE0000;} +input {background:#FFF; border:1px solid #dfdfdf;} +input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +input, select, textarea {border:1px solid #dfdfdf;} +input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} +input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} +.input_noborder {border:0;} + +/* Buttons */ +#insert, +#cancel, +#apply, +.mceActionPanel .button, +input.mceButton, +.updateButton { + display: inline-block; + text-decoration: none; + border: 1px solid #adadad; + margin: 0; + padding: 0 10px 1px; + font-size: 13px; + height: 24px; + line-height: 22px; + color: #333; + cursor: pointer; + -webkit-border-radius: 3px; + -webkit-appearance: none; + border-radius: 3px; + white-space: nowrap; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + background: #fafafa; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fafafa), to(#e9e9e9)); + background-image: -webkit-linear-gradient(top, #fafafa, #e9e9e9); + background-image: -moz-linear-gradient(top, #fafafa, #e9e9e9); + background-image: -o-linear-gradient(top, #fafafa, #e9e9e9); + background-image: linear-gradient(to bottom, #fafafa, #e9e9e9); + + text-shadow: 0 1px 0 #fff; + -webkit-box-shadow: inset 0 1px 0 #fff; + -moz-box-shadow: inset 0 1px 0 #fff; + box-shadow: inset 0 1px 0 #fff; +} + +#insert { + background: #2ea2cc; + background: -webkit-gradient(linear, left top, left bottom, from(#2ea2cc), to(#1e8cbe)); + background: -webkit-linear-gradient(top, #2ea2cc 0%,#1e8cbe 100%); + background: linear-gradient(top, #2ea2cc 0%,#1e8cbe 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2ea2cc', endColorstr='#1e8cbe',GradientType=0 ); + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.5); + color: #fff; + text-decoration: none; + text-shadow: 0 1px 0 rgba(0,86,132,0.7); +} + +#cancel:hover, +input.mceButton:hover, +.updateButton:hover, +#cancel:focus, +input.mceButton:focus, +.updateButton:focus { + background: #f3f3f3; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3)); + background-image: -webkit-linear-gradient(top, #fff, #f3f3f3); + background-image: -moz-linear-gradient(top, #fff, #f3f3f3); + background-image: -ms-linear-gradient(top, #fff, #f3f3f3); + background-image: -o-linear-gradient(top, #fff, #f3f3f3); + background-image: linear-gradient(to bottom, #fff, #f3f3f3); + border-color: #999; + color: #222; +} + +#insert:hover, +#insert:focus { + background: #1e8cbe; + background: -webkit-gradient(linear, left top, left bottom, from(#1e8cbe), to(#0074a2)); + background: -webkit-linear-gradient(top, #1e8cbe 0%,#0074a2 100%); + background: linear-gradient(top, #1e8cbe 0%,#0074a2 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e8cbe', endColorstr='#0074a2',GradientType=0 ); + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + color: #fff; +} + +.mceActionPanel #insert { + float: right; +} + +/* Browse */ +a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} +.mceOldBoxModel a.browse span {width:22px; height:20px;} +a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} +a.browse span.disabled {border:1px solid white; -moz-opacity:0.3; opacity:0.3; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);} +a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} +a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} +.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} +a.pickcolor:hover span {background-color:#B2BBD0;} +a.pickcolor, a.browse {text-decoration:none} +div.iframecontainer {background: #fff;} + +/* Charmap */ +table.charmap {border:1px solid #AAA; text-align:center} +td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} +#charmap a {display:block; color:#000; text-decoration:none; border:0} +#charmap a:hover {background:#CCC;color:#2B6FB6} +#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} +#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} +#charmap #charmapView {background-color:#fff;} + +/* Source */ +.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} +.mceActionPanel {margin-top:5px;} + +/* Tabs classes */ +.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} +.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;} +.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;} +.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} + +.wp-core-ui #tabs { + padding-bottom: 5px; + background-color: transparent; +} + +.wp-core-ui #tabs a { + padding: 6px 10px; + margin: 0 2px; +} + +/* Panels */ +.panel_wrapper div.panel {display:none;} +.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} +.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} + +/* Columns */ +.column {float:left;} +.properties {width:100%;} +.properties .column1 {} +.properties .column2 {text-align:left;} + +/* Titles */ +h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} +h3 {font-size:14px;} +.title {font-size:12px; font-weight:bold; color:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} +#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} +#colorpicker #preview_wrapper {text-align:center; padding-top:4px; white-space: nowrap; float: right;} +#colorpicker #insert, #colorpicker #cancel {width: 90px} +#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} +#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} +#colorpicker #light div {overflow:hidden;} +#colorpicker .panel_wrapper div.current {height:175px;} +#colorpicker #namedcolors {width:150px;} +#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} +#colorpicker #colornamecontainer {margin-top:5px;} +#colorpicker #picker_panel fieldset {margin:auto;width:325px;} + + +/* Localization */ + +body[dir="rtl"], +body[dir="rtl"] fieldset, +body[dir="rtl"] input, body[dir="rtl"] select, body[dir="rtl"] textarea, +body[dir="rtl"] #charmap #codeN, +body[dir="rtl"] .tabs a { + font-family: Tahoma, sans-serif; +} \ No newline at end of file diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/embedded.png b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/embedded.png new file mode 100644 index 0000000..09d71ed Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/embedded.png differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/gallery-2x.png b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/gallery-2x.png new file mode 100644 index 0000000..cb73e5c Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/gallery-2x.png differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/gallery.png b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/gallery.png new file mode 100644 index 0000000..414cf62 Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/gallery.png differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/mce-more-2x.png b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/mce-more-2x.png new file mode 100644 index 0000000..9a7c95b Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/mce-more-2x.png differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/mce-more.png b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/mce-more.png new file mode 100644 index 0000000..a25a93d Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/mce-more.png differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/mce-nextpage-2x.png b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/mce-nextpage-2x.png new file mode 100644 index 0000000..d957d05 Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/mce-nextpage-2x.png differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/mce-nextpage.png b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/mce-nextpage.png new file mode 100644 index 0000000..09e60ee Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/mce-nextpage.png differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/tabs.gif b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/tabs.gif new file mode 100644 index 0000000..06812cb Binary files /dev/null and b/src/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/tabs.gif differ diff --git a/src/wp-includes/js/tinymce/themes/advanced/source_editor.htm b/src/wp-includes/js/tinymce/themes/advanced/source_editor.htm new file mode 100644 index 0000000..5548c69 --- /dev/null +++ b/src/wp-includes/js/tinymce/themes/advanced/source_editor.htm @@ -0,0 +1,25 @@ + + + {#advanced_dlg.code_title} + + + + +
                  +
                  + +
                  + +
                  + +
                  + + + +
                  + + +
                  +
                  + + diff --git a/src/wp-includes/js/tinymce/tiny_mce.js b/src/wp-includes/js/tinymce/tiny_mce.js new file mode 100644 index 0000000..f87ac77 --- /dev/null +++ b/src/wp-includes/js/tinymce/tiny_mce.js @@ -0,0 +1 @@ +(function(e){var a=/^\s*|\s*$/g,b,d="B".replace(/A(.)|B/,"$1")==="$1";var c={majorVersion:"3",minorVersion:"5.9",releaseDate:"2013-10-18",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isIE11=g.indexOf("Trident/")!=-1&&(g.indexOf("rv:")!=-1||o.appName.indexOf("Netscape")!=-1);s.isOpera=e.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName)||s.isIE11;s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&!s.isIE11&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(e.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m0?b:[f.scope]);if(e===false){break}}a.inDispatch=false;return e}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w\-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});c=g.base_uri;if(c){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host==="mce_host"){f.port=c.port}if(!f.host||f.host==="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var d=this,f;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:d});if((b.host!="mce_host"&&d.host!=b.host&&b.host)||d.port!=b.port||d.protocol!=b.protocol){return b.getURI()}var c=d.getURI(),e=b.getURI();if(c==e||(c.charAt(c.length-1)=="/"&&c.substr(0,c.length-1)==e)){return c}f=d.toRelPath(d.path,b.path);if(b.query){f+="?"+b.query}if(b.anchor){f+="#"+b.anchor}return f},toAbsolute:function(b,c){b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length=g.length||g[e]!=c[e]){f=e+1;break}}}if(f===1){return h}for(e=0,b=g.length-(f-1);e=0;c--){if(f[c].length===0||f[c]==="."){continue}if(f[c]===".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!==0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(c,e,d){var b=new Date();b.setTime(b.getTime()-1000);this.set(c,"",b,e,d)}})})();(function(){function serialize(o,quote){var i,v,t,name;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&Object.prototype.toString.call(o)==="[object Array]"){for(i=0,v="[";i0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(name in o){if(o.hasOwnProperty(name)){v+=typeof o[name]!="function"?(v.length>1?","+quote:quote)+name+quote+":"+serialize(o[name],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey},metaKeyPressed:function(b){return a.isMac?b.metaKey:b.ctrlKey&&!b.altKey}}})(tinymce);tinymce.util.Quirks=function(a){var j=tinymce.VK,f=j.BACKSPACE,k=j.DELETE,e=a.dom,m=a.selection,I=a.settings,x=a.parser,p=a.serializer,F=tinymce.each;function B(O,N){try{a.getDoc().execCommand(O,false,N)}catch(M){}}function o(){var M=a.getDoc().documentMode;return M?M:6}function A(M){return M.isDefaultPrevented()}function K(){function M(S){var O,Q,N,T,P,R,U;function V(){if(P.nodeType==3){if(S&&R==P.length){return true}if(!S&&R===0){return true}}}O=m.getRng();var W=[O.startContainer,O.startOffset,O.endContainer,O.endOffset];if(!O.collapsed){S=true}P=O[(S?"start":"end")+"Container"];R=O[(S?"start":"end")+"Offset"];if(P.nodeType==3){Q=e.getParent(O.startContainer,e.isBlock);if(S){Q=e.getNext(Q,e.isBlock)}if(Q&&(V()||!O.collapsed)){N=e.create("em",{id:"__mceDel"});F(tinymce.grep(Q.childNodes),function(X){N.appendChild(X)});Q.appendChild(N)}}O=e.createRng();O.setStart(W[0],W[1]);O.setEnd(W[2],W[3]);m.setRng(O);a.getDoc().execCommand(S?"ForwardDelete":"Delete",false,null);if(N){T=m.getBookmark();while(U=e.get("__mceDel")){e.remove(U,true)}m.moveToBookmark(T)}}a.onKeyDown.add(function(N,P){var O;O=P.keyCode==k;if(!A(P)&&(O||P.keyCode==f)&&!j.modifierPressed(P)){P.preventDefault();M(O)}});a.addCommand("Delete",function(){M()})}function r(){function M(P){var O=e.create("body");var Q=P.cloneContents();O.appendChild(Q);return m.serializer.serialize(O,{format:"html"})}function N(O){var Q=M(O);var R=e.createRng();R.selectNode(a.getBody());var P=M(R);return Q===P}a.onKeyDown.add(function(P,R){var Q=R.keyCode,O;if(!A(R)&&(Q==k||Q==f)){O=P.selection.isCollapsed();if(O&&!e.isEmpty(P.getBody())){return}if(tinymce.isIE&&!O){return}if(!O&&!N(P.selection.getRng())){return}P.setContent("");P.selection.setCursorLocation(P.getBody(),0);P.nodeChanged()}})}function J(){a.onKeyDown.add(function(M,N){if(!A(N)&&N.keyCode==65&&j.metaKeyPressed(N)){N.preventDefault();M.execCommand("SelectAll")}})}function L(){if(!a.settings.content_editable){e.bind(a.getDoc(),"focusin",function(M){m.setRng(m.getRng())});e.bind(a.getDoc(),"mousedown",function(M){if(M.target==a.getDoc().documentElement){a.getWin().focus();m.setRng(m.getRng())}})}}function C(){a.onKeyDown.add(function(M,P){if(!A(P)&&P.keyCode===f){if(m.isCollapsed()&&m.getRng(true).startOffset===0){var O=m.getNode();var N=O.previousSibling;if(N&&N.nodeName&&N.nodeName.toLowerCase()==="hr"){e.remove(N);tinymce.dom.Event.cancel(P)}}}})}function z(){if(!Range.prototype.getClientRects){a.onMouseDown.add(function(N,O){if(!A(O)&&O.target.nodeName==="HTML"){var M=N.getBody();M.blur();setTimeout(function(){M.focus()},0)}})}}function h(){a.onClick.add(function(M,N){N=N.target;if(/^(IMG|HR)$/.test(N.nodeName)){m.getSel().setBaseAndExtent(N,0,N,1)}if(N.nodeName=="A"&&e.hasClass(N,"mceItemAnchor")){m.select(N)}M.nodeChanged()})}function c(){function N(){var P=e.getAttribs(m.getStart().cloneNode(false));return function(){var Q=m.getStart();if(Q!==a.getBody()){e.setAttrib(Q,"style",null);F(P,function(R){Q.setAttributeNode(R.cloneNode(true))})}}}function M(){return !m.isCollapsed()&&e.getParent(m.getStart(),e.isBlock)!=e.getParent(m.getEnd(),e.isBlock)}function O(P,Q){Q.preventDefault();return false}a.onKeyPress.add(function(P,R){var Q;if(!A(R)&&(R.keyCode==8||R.keyCode==46)&&M()){Q=N();P.getDoc().execCommand("delete",false,null);Q();R.preventDefault();return false}});e.bind(a.getDoc(),"cut",function(Q){var P;if(!A(Q)&&M()){P=N();a.onKeyUp.addToTop(O);setTimeout(function(){P();a.onKeyUp.remove(O)},0)}})}function b(){var N,M;e.bind(a.getDoc(),"selectionchange",function(){if(M){clearTimeout(M);M=0}M=window.setTimeout(function(){var O=m.getRng();if(!N||!tinymce.dom.RangeUtils.compareRanges(O,N)){a.nodeChanged();N=O}},50)})}function y(){document.body.setAttribute("role","application")}function u(){a.onKeyDown.add(function(M,O){if(!A(O)&&O.keyCode===f){if(m.isCollapsed()&&m.getRng(true).startOffset===0){var N=m.getNode().previousSibling;if(N&&N.nodeName&&N.nodeName.toLowerCase()==="table"){return tinymce.dom.Event.cancel(O)}}}})}function D(){if(o()>7){return}B("RespectVisibilityInDesign",true);a.contentStyles.push(".mceHideBrInPre pre br {display: none}");e.addClass(a.getBody(),"mceHideBrInPre");x.addNodeFilter("pre",function(M,O){var P=M.length,R,N,S,Q;while(P--){R=M[P].getAll("br");N=R.length;while(N--){S=R[N];Q=S.prev;if(Q&&Q.type===3&&Q.value.charAt(Q.value-1)!="\n"){Q.value+="\n"}else{S.parent.insert(new tinymce.html.Node("#text",3),S,true).value="\n"}}}});p.addNodeFilter("pre",function(M,O){var P=M.length,R,N,S,Q;while(P--){R=M[P].getAll("br");N=R.length;while(N--){S=R[N];Q=S.prev;if(Q&&Q.type==3){Q.value=Q.value.replace(/\r?\n$/,"")}}}})}function g(){e.bind(a.getBody(),"mouseup",function(O){var N,M=m.getNode();if(M.nodeName=="IMG"){if(N=e.getStyle(M,"width")){e.setAttrib(M,"width",N.replace(/[^0-9%]+/g,""));e.setStyle(M,"width","")}if(N=e.getStyle(M,"height")){e.setAttrib(M,"height",N.replace(/[^0-9%]+/g,""));e.setStyle(M,"height","")}}})}function d(){a.onKeyDown.add(function(S,T){var R,M,N,P,Q,U,O;R=T.keyCode==k;if(!A(T)&&(R||T.keyCode==f)&&!j.modifierPressed(T)){M=m.getRng();N=M.startContainer;P=M.startOffset;O=M.collapsed;if(N.nodeType==3&&N.nodeValue.length>0&&((P===0&&!O)||(O&&P===(R?0:1)))){U=N.previousSibling;if(U&&U.nodeName=="IMG"){return}nonEmptyElements=S.schema.getNonEmptyElements();T.preventDefault();Q=e.create("br",{id:"__tmp"});N.parentNode.insertBefore(Q,N);S.getDoc().execCommand(R?"ForwardDelete":"Delete",false,null);N=m.getRng().startContainer;U=N.previousSibling;if(U&&U.nodeType==1&&!e.isBlock(U)&&e.isEmpty(U)&&!nonEmptyElements[U.nodeName.toLowerCase()]){e.remove(U)}e.remove("__tmp")}}})}function H(){a.onKeyDown.add(function(Q,R){var O,N,S,M,P;if(A(R)||R.keyCode!=j.BACKSPACE){return}O=m.getRng();N=O.startContainer;S=O.startOffset;M=e.getRoot();P=N;if(!O.collapsed||S!==0){return}while(P&&P.parentNode&&P.parentNode.firstChild==P&&P.parentNode!=M){P=P.parentNode}if(P.tagName==="BLOCKQUOTE"){Q.formatter.toggle("blockquote",null,P);O=e.createRng();O.setStart(N,0);O.setEnd(N,0);m.setRng(O)}})}function G(){function M(){a._refreshContentEditable();B("StyleWithCSS",false);B("enableInlineTableEditing",false);if(!I.object_resizing){B("enableObjectResizing",false)}}if(!I.readonly){a.onBeforeExecCommand.add(M);a.onMouseDown.add(M)}}function t(){function M(N,O){F(e.select("a"),function(R){var P=R.parentNode,Q=e.getRoot();if(P.lastChild===R){while(P&&!e.isBlock(P)){if(P.parentNode.lastChild!==P||P===Q){return}P=P.parentNode}e.add(P,"br",{"data-mce-bogus":1})}})}a.onExecCommand.add(function(N,O){if(O==="CreateLink"){M(N)}});a.onSetContent.add(m.onSetContent.add(M))}function n(){if(I.forced_root_block){a.onInit.add(function(){B("DefaultParagraphSeparator",I.forced_root_block)})}}function q(){function M(O,N){if(!O||!N.initial){a.execCommand("mceRepaint")}}a.onUndo.add(M);a.onRedo.add(M);a.onSetContent.add(M)}function i(){a.onKeyDown.add(function(N,O){var M;if(!A(O)&&O.keyCode==f){M=N.getDoc().selection.createRange();if(M&&M.item){O.preventDefault();N.undoManager.beforeChange();e.remove(M.item(0));N.undoManager.add()}}})}function s(){var M;if(o()>=10){M="";F("p div h1 h2 h3 h4 h5 h6".split(" "),function(N,O){M+=(O>0?",":"")+N+":empty"});a.contentStyles.push(M+"{padding-right: 1px !important}")}}function v(){var O,N,ae,M,Z,ac,aa,ad,P,Q,ab,X,W,Y=document,U=a.getDoc();if(!I.object_resizing||I.webkit_fake_resize===false){return}B("enableObjectResizing",false);ab={n:[0.5,0,0,-1],e:[1,0.5,1,0],s:[0.5,1,0,1],w:[0,0.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};function S(ai){var ah,ag;ah=ai.screenX-ac;ag=ai.screenY-aa;X=ah*Z[2]+ad;W=ag*Z[3]+P;X=X<5?5:X;W=W<5?5:W;if(j.modifierPressed(ai)||(ae.nodeName=="IMG"&&Z[2]*Z[3]!==0)){X=Math.round(W/Q);W=Math.round(X*Q)}e.setStyles(M,{width:X,height:W});if(Z[2]<0&&M.clientWidth<=X){e.setStyle(M,"left",O+(ad-X))}if(Z[3]<0&&M.clientHeight<=W){e.setStyle(M,"top",N+(P-W))}}function af(){function ag(ah,ai){if(ai){if(ae.style[ah]||!a.schema.isValid(ae.nodeName.toLowerCase(),ah)){e.setStyle(ae,ah,ai)}else{e.setAttrib(ae,ah,ai)}}}ag("width",X);ag("height",W);e.unbind(U,"mousemove",S);e.unbind(U,"mouseup",af);if(Y!=U){e.unbind(Y,"mousemove",S);e.unbind(Y,"mouseup",af)}e.remove(M);R(ae)}function R(aj){var ah,ai,ag;T();ah=e.getPos(aj);O=ah.x;N=ah.y;ai=aj.offsetWidth;ag=aj.offsetHeight;if(ae!=aj){ae=aj;X=W=0}F(ab,function(am,ak){var al;al=e.get("mceResizeHandle"+ak);if(!al){al=e.add(U.documentElement,"div",{id:"mceResizeHandle"+ak,"class":"mceResizeHandle",style:"cursor:"+ak+"-resize; margin:0; padding:0"});e.bind(al,"mousedown",function(an){an.preventDefault();af();ac=an.screenX;aa=an.screenY;ad=ae.clientWidth;P=ae.clientHeight;Q=P/ad;Z=am;M=ae.cloneNode(true);e.addClass(M,"mceClonedResizable");e.setStyles(M,{left:O,top:N,margin:0});U.documentElement.appendChild(M);e.bind(U,"mousemove",S);e.bind(U,"mouseup",af);if(Y!=U){e.bind(Y,"mousemove",S);e.bind(Y,"mouseup",af)}})}else{e.show(al)}e.setStyles(al,{left:(ai*am[0]+O)-(al.offsetWidth/2),top:(ag*am[1]+N)-(al.offsetHeight/2)})});if(!tinymce.isOpera&&ae.nodeName=="IMG"){ae.setAttribute("data-mce-selected","1")}}function T(){if(ae){ae.removeAttribute("data-mce-selected")}for(var ag in ab){e.hide("mceResizeHandle"+ag)}}a.contentStyles.push(".mceResizeHandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}.mceResizeHandle:hover {background: #000}img[data-mce-selected] {outline: 1px solid black}img.mceClonedResizable, table.mceClonedResizable {position: absolute;outline: 1px dashed black;opacity: .5;z-index: 10000}");function V(){var ag=e.getParent(m.getNode(),"table,img");F(e.select("img[data-mce-selected]"),function(ah){ah.removeAttribute("data-mce-selected")});if(ag){R(ag)}else{T()}}a.onNodeChange.add(V);e.bind(U,"selectionchange",V);a.serializer.addAttributeFilter("data-mce-selected",function(ag,ah){var ai=ag.length;while(ai--){ag[ai].attr(ah,null)}})}function E(){if(o()<9){x.addNodeFilter("noscript",function(M){var N=M.length,O,P;while(N--){O=M[N];P=O.firstChild;if(P){O.attr("data-mce-innertext",P.value)}}});p.addNodeFilter("noscript",function(M){var N=M.length,O,Q,P;while(N--){O=M[N];Q=M[N].firstChild;if(Q){Q.value=tinymce.html.Entities.decode(Q.value)}else{P=O.attributes.map["data-mce-innertext"];if(P){O.attr("data-mce-innertext",null);Q=new tinymce.html.Node("#text",3);Q.value=P;Q.raw=true;O.append(Q)}}}})}}function l(){a.contentStyles.push("body {min-height: 100px}");a.onClick.add(function(M,N){if(N.target.nodeName=="HTML"){a.execCommand("SelectAll");a.selection.collapse(true);a.nodeChanged()}})}u();H();r();if(tinymce.isWebKit){d();K();L();h();n();if(tinymce.isIDevice){b()}else{v();J()}}if(tinymce.isIE&&!tinymce.isIE11){C();y();D();g();i();s();E()}if(tinymce.isIE11){l()}if(tinymce.isGecko&&!tinymce.isIE11){C();z();c();G();t();q()}if(tinymce.isOpera){v()}};(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':""","'":"'","<":"<",">":">","&":"&"};d={"<":"<",">":">","&":"&",""":'"',"'":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(s){var z={},q,n,x,r,v=d.url_converter,y=d.url_converter_scope||this;function p(D,G){var F,C,B,E;if(z["border-image"]==="none"){delete z["border-image"]}F=z[D+"-top"+G];if(!F){return}C=z[D+"-right"+G];if(F!=C){return}B=z[D+"-bottom"+G];if(C!=B){return}E=z[D+"-left"+G];if(B!=E){return}z[D+G]=E;delete z[D+"-top"+G];delete z[D+"-right"+G];delete z[D+"-bottom"+G];delete z[D+"-left"+G]}function u(C){var D=z[C],B;if(!D||D.indexOf(" ")<0){return}D=D.split(" ");B=D.length;while(B--){if(D[B]!==D[0]){return false}}z[C]=D[0];return true}function A(D,C,B,E){if(!u(C)){return}if(!u(B)){return}if(!u(E)){return}z[D]=z[C]+" "+z[B]+" "+z[E];delete z[C];delete z[B];delete z[E]}function t(B){r=true;return a[B]}function i(C,B){if(r){C=C.replace(/\uFEFF[0-9]/g,function(D){return a[D]})}if(!B){C=C.replace(/\\([\'\";:])/g,"$1")}return C}function o(C,B,F,E,G,D){G=G||D;if(G){G=i(G);return"'"+G.replace(/\'/g,"\\'")+"'"}B=i(B||F||E);if(v){B=v.call(y,B,"style")}return"url('"+B.replace(/\'/g,"\\'")+"')"}if(s){s=s.replace(/\\[\"\';:\uFEFF]/g,t).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(B){return B.replace(/[;:]/g,t)});while(q=b.exec(s)){n=q[1].replace(l,"").toLowerCase();x=q[2].replace(l,"");if(n&&x.length>0){if(n==="font-weight"&&x==="700"){x="bold"}else{if(n==="color"||n==="background-color"){x=x.toLowerCase()}}x=x.replace(k,c);x=x.replace(h,o);z[n]=r?i(x,true):x}b.lastIndex=q.index+q[0].length}p("border","");p("border","-width");p("border","-color");p("border","-style");p("padding","");p("margin","");A("border","border-width","border-style","border-color");if(z.border==="medium none"){delete z.border}}return z},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(f){var a={},e=f.makeMap,g=f.each;function d(j,i){return j.split(i||",")}function h(m,l){var j,k={};function i(n){return n.replace(/[A-Z]+/g,function(o){return i(m[o])})}for(j in m){if(m.hasOwnProperty(j)){m[j]=i(m[j])}}i(l).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(q,o,n,p){n=d(n,"|");k[o]={attributes:e(n),attributesOrder:n,children:e(p,"|",{"#comment":{}})}});return k}function b(){var i=a.html5;if(!i){i=a.html5=h({A:"id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr",C:"#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"},"html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][B]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend|figcaption]figcaption[A][C]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|border][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]wbr[A][]")}return i}function c(){var i=a.html4;if(!i){i=a.html4=h({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]")}return i}f.html.Schema=function(A){var u=this,s={},k={},j=[],D,y;var o,q,z,r,v,n,p={};function m(F,E,H){var G=A[F];if(!G){G=a[F];if(!G){G=e(E," ",e(E.toUpperCase()," "));G=f.extend(G,H);a[F]=G}}else{G=e(G,",",e(G.toUpperCase()," "))}return G}A=A||{};y=A.schema=="html5"?b():c();if(A.verify_html===false){A.valid_elements="*[*]"}if(A.valid_styles){D={};g(A.valid_styles,function(F,E){D[E]=f.explode(F)})}o=m("whitespace_elements","pre script noscript style textarea");q=m("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr");z=m("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr");r=m("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");n=m("non_empty_elements","td th iframe video audio object script",z);textBlockElementsMap=m("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure");v=m("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup",textBlockElementsMap);function i(E){return new RegExp("^"+E.replace(/([?+*])/g,".$1")+"$")}function C(L){var K,G,Z,V,aa,F,I,U,X,Q,Y,ac,O,J,W,E,S,H,ab,ad,P,T,N=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,R=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,M=/[*?+]/;if(L){L=d(L);if(s["@"]){S=s["@"].attributes;H=s["@"].attributesOrder}for(K=0,G=L.length;K=0){for(U=A.length-1;U>=V;U--){T=A[U];if(T.valid){n.end(T.name)}}A.length=V}}function p(U,T,Y,X,W){var Z,V;T=T.toLowerCase();Y=T in H?T:j(Y||X||W||"");if(v&&!z&&T.indexOf("data-")!==0){Z=P[T];if(!Z&&F){V=F.length;while(V--){Z=F[V];if(Z.pattern.test(T)){break}}if(V===-1){Z=null}}if(!Z){return}if(Z.validValues&&!(Y in Z.validValues)){return}}N.map[T]=Y;N.push({name:T,value:Y})}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g");D=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;K={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};M=e.getShortEndedElements();J=c.self_closing_elements||e.getSelfClosingElements();H=e.getBoolAttrs();v=c.validate;s=c.remove_internals;y=c.fix_self_closing;q=a.isIE;o=/^:/;while(g=l.exec(E)){if(G0&&A[A.length-1].name===I){u(I)}if(!v||(m=e.getElementRule(I))){k=true;if(v){P=m.attributes;F=m.attributePatterns}if(R=g[8]){z=R.indexOf("data-mce-type")!==-1;if(z&&s){k=false}N=[];N.map={};R.replace(D,p)}else{N=[];N.map={}}if(v&&!z){S=m.attributesRequired;L=m.attributesDefault;f=m.attributesForced;if(f){Q=f.length;while(Q--){t=f[Q];r=t.name;h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}if(L){Q=L.length;while(Q--){t=L[Q];r=t.name;if(!(r in N.map)){h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}}if(S){Q=S.length;while(Q--){if(S[Q] in N.map){break}}if(Q===-1){k=false}}if(N.map["data-mce-bogus"]){k=false}}if(k){n.start(I,N,O)}}else{k=false}if(B=K[I]){B.lastIndex=G=g.index+g[0].length;if(g=B.exec(E)){if(k){C=E.substr(G,g.index-G)}G=g.index+g[0].length}else{C=E.substr(G);G=E.length}if(k&&C.length>0){n.text(C,true)}if(k){n.end(I)}l.lastIndex=G;continue}if(!O){if(!R||R.indexOf("/")!=R.length-1){A.push({name:I,valid:k})}else{if(k){n.end(I)}}}}else{if(I=g[1]){n.comment(I)}else{if(I=g[2]){n.cdata(I)}else{if(I=g[3]){n.doctype(I)}else{if(I=g[4]){n.pi(I,g[5])}}}}}}G=g.index+g[0].length}if(G=0;Q--){I=A[Q];if(I.valid){n.end(I.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h1){x.reverse();A=o=f.filterNode(x[0].clone());for(u=0;u0){Q.value=l;Q=Q.prev}else{O=Q.prev;Q.remove();Q=O}}}function H(O){var P,l={};for(P in O){if(P!=="li"&&P!="p"){l[P]=O[P]}}return l}n=new b.html.SaxParser({validate:z,self_closing_elements:H(h.getSelfClosingElements()),cdata:function(l){B.append(K("#cdata",4)).value=l},text:function(P,l){var O;if(!L){P=P.replace(k," ");if(B.lastChild&&o[B.lastChild.name]){P=P.replace(E,"")}}if(P.length!==0){O=K("#text",3);O.raw=!!l;B.append(O).value=P}},comment:function(l){B.append(K("#comment",8)).value=l},pi:function(l,O){B.append(K(l,7)).value=O;I(B)},doctype:function(O){var l;l=B.append(K("#doctype",10));l.value=O;I(B)},start:function(l,W,P){var U,R,Q,O,S,X,V,T;Q=z?h.getElementRule(l):{};if(Q){U=K(Q.outputName||l,1);U.attributes=W;U.shortEnded=P;B.append(U);T=p[B.name];if(T&&p[U.name]&&!T[U.name]){M.push(U)}R=d.length;while(R--){S=d[R].name;if(S in W.map){F=c[S];if(F){F.push(U)}else{c[S]=[U]}}}if(o[l]){I(U)}if(!P){B=U}if(!L&&s[l]){L=true}}},end:function(l){var S,P,R,O,Q;P=z?h.getElementRule(l):{};if(P){if(o[l]){if(!L){S=B.firstChild;if(S&&S.type===3){R=S.value.replace(E,"");if(R.length>0){S.value=R;S=S.next}else{O=S.next;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.next;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}S=B.lastChild;if(S&&S.type===3){R=S.value.replace(t,"");if(R.length>0){S.value=R;S=S.prev}else{O=S.prev;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.prev;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}}}if(L&&s[l]){L=false}if(P.removeEmpty||P.paddEmpty){if(B.isEmpty(u)){if(P.paddEmpty){B.empty().append(new a("#text","3")).value="\u00a0"}else{if(!B.attributes.map.name&&!B.attributes.map.id){Q=B.parent;B.empty().remove();B=Q;return}}}}B=B.parent}}},h);J=B=new a(m.context||g.root_name,11);n.parse(v);if(z&&M.length){if(!m.context){j(M)}else{m.invalid=true}}if(q&&J.name=="body"){G()}if(!m.invalid){for(N in i){F=e[N];A=i[N];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(D=0,C=F.length;D0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("")},comment:function(h){c.push("")},pi:function(h,i){if(i){c.push("")}else{c.push("")}if(a){c.push("\n")}},doctype:function(h){c.push("",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n=8;k.boxModel=!e.isIE||o.compatMode=="CSS1Compat"||k.stdMode;k.hasOuterHTML="outerHTML" in o.createElement("a");k.settings=l=e.extend({keep_values:false,hex_colors:1},l);k.schema=l.schema;k.styles=new e.html.Styles({url_converter:l.url_converter,url_converter_scope:l.url_converter_scope},l.schema);if(e.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(m){k.cssFlicker=true}}k.fixDoc(o);k.events=l.ownEvents?new e.dom.EventUtils(l.proxy):e.dom.Event;e.addUnload(k.destroy,k);n=l.schema?l.schema.getBlockElements():{};k.isBlock=function(q){if(!q){return false}var p=q.nodeType;if(p){return !!(p===1&&n[q.nodeName])}return !!n[q]}},fixDoc:function(k){var j=this.settings,i;if(b&&!e.isIE11&&j.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(l){k.createElement(l)});for(i in j.schema.getCustomElements()){k.createElement(i)}}},clone:function(k,i){var j=this,m,l;if(!b||e.isIE11||k.nodeType!==1||i){return k.cloneNode(i)}l=j.doc;if(!i){m=l.createElement(k.nodeName);g(j.getAttribs(k),function(n){j.setAttrib(m,n.nodeName,j.getAttrib(k,n.nodeName))});return m}return m.firstChild},getRoot:function(){var i=this,j=i.settings;return(j&&i.get(j.root_element))||i.doc.body},getViewPort:function(j){var k,i;j=!j?this.win:j;k=j.document;i=this.boxModel?k.documentElement:k.body;return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop,w:j.innerWidth||i.clientWidth,h:j.innerHeight||i.clientHeight}},getRect:function(l){var k,i=this,j;l=i.get(l);k=i.getPos(l);j=i.getSize(l);return{x:k.x,y:k.y,w:j.w,h:j.h}},getSize:function(l){var j=this,i,k;l=j.get(l);i=j.getStyle(l,"width");k=j.getStyle(l,"height");if(i.indexOf("px")===-1){i=0}if(k.indexOf("px")===-1){k=0}return{w:parseInt(i,10)||l.offsetWidth||l.clientWidth,h:parseInt(k,10)||l.offsetHeight||l.clientHeight}},getParent:function(k,j,i){return this.getParents(k,j,i,false)},getParents:function(s,m,k,q){var j=this,i,l=j.settings,p=[];s=j.get(s);q=q===undefined;if(l.strict_root){k=k||j.getRoot()}if(d(m,"string")){i=m;if(m==="*"){m=function(o){return o.nodeType==1}}else{m=function(o){return j.is(o,i)}}}while(s){if(s==k||!s.nodeType||s.nodeType===9){break}if(!m||m(s)){if(q){p.push(s)}else{return s}}s=s.parentNode}return q?p:null},get:function(i){var j;if(i&&this.doc&&typeof(i)=="string"){j=i;i=this.doc.getElementById(i);if(i&&i.id!==j){return this.doc.getElementsByName(j)[1]}}return i},getNext:function(j,i){return this._findSib(j,i,"nextSibling")},getPrev:function(j,i){return this._findSib(j,i,"previousSibling")},select:function(k,j){var i=this;return e.dom.Sizzle(k,i.get(j)||i.get(i.settings.root_element)||i.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(c.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return e.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(l,o,i,k,m){var j=this;return this.run(l,function(r){var q,n;q=d(o,"string")?j.doc.createElement(o):o;j.setAttribs(q,i);if(k){if(k.nodeType){q.appendChild(k)}else{j.setHTML(q,k)}}return !m?r.appendChild(q):q})},create:function(k,i,j){return this.add(this.doc.createElement(k),k,i,j,1)},createHTML:function(q,i,m){var p="",l=this,j;p+="<"+q;for(j in i){if(i.hasOwnProperty(j)){p+=" "+j+'="'+l.encode(i[j])+'"'}}if(typeof(m)!="undefined"){return p+">"+m+""}return p+" />"},remove:function(i,j){return this.run(i,function(l){var m,k=l.parentNode;if(!k){return null}if(j){while(m=l.firstChild){if(!e.isIE||m.nodeType!==3||m.nodeValue){k.insertBefore(m,l)}else{l.removeChild(m)}}}return k.removeChild(l)})},setStyle:function(l,i,j){var k=this;return k.run(l,function(o){var n,m;n=o.style;i=i.replace(/-(\D)/g,function(q,p){return p.toUpperCase()});if(k.pixelStyles.test(i)&&(e.is(j,"number")||/^[\-0-9\.]+$/.test(j))){j+="px"}switch(i){case"opacity":if(b&&!e.isIE11){n.filter=j===""?"":"alpha(opacity="+(j*100)+")";if(!l.currentStyle||!l.currentStyle.hasLayout){n.display="inline-block"}}n[i]=n["-moz-opacity"]=n["-khtml-opacity"]=j||"";break;case"float":(b&&!e.isIE11)?n.styleFloat=j:n.cssFloat=j;break;default:n[i]=j||""}if(k.settings.update_styles){k.setAttrib(o,"data-mce-style")}})},getStyle:function(l,i,k){l=this.get(l);if(!l){return}if(this.doc.defaultView&&k){i=i.replace(/[A-Z]/g,function(m){return"-"+m});try{return this.doc.defaultView.getComputedStyle(l,null).getPropertyValue(i)}catch(j){return null}}i=i.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(i=="float"){i=b?"styleFloat":"cssFloat"}if(l.currentStyle&&k){return l.currentStyle[i]}return l.style?l.style[i]:undefined},setStyles:function(l,m){var j=this,k=j.settings,i;i=k.update_styles;k.update_styles=0;g(m,function(o,p){j.setStyle(l,p,o)});k.update_styles=i;if(k.update_styles){j.setAttrib(l,k.cssText)}},removeAllAttribs:function(i){return this.run(i,function(l){var k,j=l.attributes;for(k=j.length-1;k>=0;k--){l.removeAttributeNode(j.item(k))}})},setAttrib:function(k,l,i){var j=this;if(!k||!l){return}if(j.settings.strict){l=l.toLowerCase()}return this.run(k,function(p){var o=j.settings;var m=p.getAttribute(l);if(i!==null){switch(l){case"style":if(!d(i,"string")){g(i,function(q,r){j.setStyle(p,r,q)});return}if(o.keep_values){if(i&&!j._isRes(i)){p.setAttribute("data-mce-style",i,2)}else{p.removeAttribute("data-mce-style",2)}}p.style.cssText=i;break;case"class":p.className=i||"";break;case"src":case"href":if(o.keep_values){if(o.url_converter){i=o.url_converter.call(o.url_converter_scope||j,i,l,p)}j.setAttrib(p,"data-mce-"+l,i,2)}break;case"shape":p.setAttribute("data-mce-style",i);break}}if(d(i)&&i!==null&&i.length!==0){p.setAttribute(l,""+i,2)}else{p.removeAttribute(l,2)}if(tinyMCE.activeEditor&&m!=i){var n=tinyMCE.activeEditor;n.onSetAttrib.dispatch(n,p,l,i)}})},setAttribs:function(j,k){var i=this;return this.run(j,function(l){g(k,function(m,o){i.setAttrib(l,o,m)})})},getAttrib:function(m,o,k){var i,j=this,l;m=j.get(m);if(!m||m.nodeType!==1){return k===l?false:k}if(!d(k)){k=""}if(/^(src|href|style|coords|shape)$/.test(o)){i=m.getAttribute("data-mce-"+o);if(i){return i}}if(b&&j.props[o]){i=m[j.props[o]];i=i&&i.nodeValue?i.nodeValue:i}if(!i){i=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[j.props[o]]===true&&i===""){return o}return i?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){i=i||m.style.cssText;if(i){i=j.serializeStyle(j.parseStyle(i),m.nodeName);if(j.settings.keep_values&&!j._isRes(i)){m.setAttribute("data-mce-style",i)}}}if(f&&o==="class"&&i){i=i.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(i===1){i=""}break;case"size":if(i==="+0"||i===20||i===0){i=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(i===0){i=""}break;case"hspace":if(i===-1){i=""}break;case"maxlength":case"tabindex":if(i===32768||i===2147483647||i==="32768"){i=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(i===65535){return o}return k;case"shape":i=i.toLowerCase();break;default:if(o.indexOf("on")===0&&i){i=e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+i)}}}return(i!==l&&i!==null&&i!=="")?""+i:k},getPos:function(q,l){var j=this,i=0,p=0,m,o=j.doc,k;q=j.get(q);l=l||o.body;if(q){if(q.getBoundingClientRect){q=q.getBoundingClientRect();m=j.boxModel?o.documentElement:o.body;i=q.left+(o.documentElement.scrollLeft||o.body.scrollLeft)-m.clientTop;p=q.top+(o.documentElement.scrollTop||o.body.scrollTop)-m.clientLeft;return{x:i,y:p}}k=q;while(k&&k!=l&&k.nodeType){i+=k.offsetLeft||0;p+=k.offsetTop||0;k=k.offsetParent}k=q.parentNode;while(k&&k!=l&&k.nodeType){i-=k.scrollLeft||0;p-=k.scrollTop||0;k=k.parentNode}}return{x:i,y:p}},parseStyle:function(i){return this.styles.parse(i)},serializeStyle:function(j,i){return this.styles.serialize(j,i)},addStyle:function(j){var k=this.doc,i;styleElm=k.getElementById("mceDefaultStyles");if(!styleElm){styleElm=k.createElement("style"),styleElm.id="mceDefaultStyles";styleElm.type="text/css";i=k.getElementsByTagName("head")[0];if(i.firstChild){i.insertBefore(styleElm,i.firstChild)}else{i.appendChild(styleElm)}}if(styleElm.styleSheet){styleElm.styleSheet.cssText+=j}else{styleElm.appendChild(k.createTextNode(j))}},loadCSS:function(i){var k=this,l=k.doc,j;if(!i){i=""}j=l.getElementsByTagName("head")[0];g(i.split(","),function(m){var n;if(k.files[m]){return}k.files[m]=true;n=k.create("link",{rel:"stylesheet",href:e._addVer(m)});if(b&&!e.isIE11&&l.documentMode&&l.recalc){n.onload=function(){if(l.recalc){l.recalc()}n.onload=null}}j.appendChild(n)})},addClass:function(i,j){return this.run(i,function(k){var l;if(!j){return 0}if(this.hasClass(k,j)){return k.className}l=this.removeClass(k,j);return k.className=(l!=""?(l+" "):"")+j})},removeClass:function(k,l){var i=this,j;return i.run(k,function(n){var m;if(i.hasClass(n,l)){if(!j){j=new RegExp("(^|\\s+)"+l+"(\\s+|$)","g")}m=n.className.replace(j," ");m=e.trim(m!=" "?m:"");n.className=m;if(!m){n.removeAttribute("class");n.removeAttribute("className")}return m}return n.className})},hasClass:function(j,i){j=this.get(j);if(!j||!i){return false}return(" "+j.className+" ").indexOf(" "+i+" ")!==-1},show:function(i){return this.setStyle(i,"display","block")},hide:function(i){return this.setStyle(i,"display","none")},isHidden:function(i){i=this.get(i);return !i||i.style.display=="none"||this.getStyle(i,"display")=="none"},uniqueId:function(i){return(!i?"mce_":i)+(this.counter++)},setHTML:function(k,j){var i=this;return i.run(k,function(m){if(b){while(m.firstChild){m.removeChild(m.firstChild)}try{m.innerHTML="
                  "+j;m.removeChild(m.firstChild)}catch(l){var n=i.create("div");n.innerHTML="
                  "+j;g(e.grep(n.childNodes),function(p,o){if(o&&m.canHaveHTML){m.appendChild(p)}})}}else{m.innerHTML=j}return j})},getOuterHTML:function(k){var j,i=this;k=i.get(k);if(!k){return null}if(k.nodeType===1&&i.hasOuterHTML){return k.outerHTML}j=(k.ownerDocument||i.doc).createElement("body");j.appendChild(k.cloneNode(true));return j.innerHTML},setOuterHTML:function(l,j,m){var i=this;function k(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){i.insertAfter(s.cloneNode(true),p);s=s.previousSibling}i.remove(p)}return this.run(l,function(o){o=i.get(o);if(o.nodeType==1){m=m||o.ownerDocument||i.doc;if(b){try{if(b&&o.nodeType==1){o.outerHTML=j}else{k(o,j,m)}}catch(n){k(o,j,m)}}else{k(o,j,m)}}})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(i,j){j=this.get(j);return this.run(i,function(l){var k,m;k=j.parentNode;m=j.nextSibling;if(m){k.insertBefore(l,m)}else{k.appendChild(l)}return l})},replace:function(m,l,i){var j=this;if(d(l,"array")){m=m.cloneNode(true)}return j.run(l,function(k){if(i){g(e.grep(k.childNodes),function(n){m.appendChild(n)})}return k.parentNode.replaceChild(m,k)})},rename:function(l,i){var k=this,j;if(l.nodeName!=i.toUpperCase()){j=k.create(i);g(k.getAttribs(l),function(m){k.setAttrib(j,m.nodeName,k.getAttrib(l,m.nodeName))});k.replace(j,l,1)}return j||l},findCommonAncestor:function(k,i){var l=k,j;while(l){j=i;while(j&&l!=j){j=j.parentNode}if(l==j){break}l=l.parentNode}if(!l&&k.ownerDocument){return k.ownerDocument.documentElement}return l},toHex:function(i){var k=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);function j(l){l=parseInt(l,10).toString(16);return l.length>1?l:"0"+l}if(k){i="#"+j(k[1])+j(k[2])+j(k[3]);return i}return i},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(i){g(i.imports,function(s){q(s)});g(i.cssRules||i.rules,function(t){switch(t.type||1){case 1:if(t.selectorText){g(t.selectorText.split(","),function(r){r=r.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(r)||!/\.[\w\-]+$/.test(r)){return}l=r;r=e._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",r);if(p&&!(r=p(r,l))){return}if(!o[r]){j.push({"class":r});o[r]=1}})}break;case 3:try{q(t.styleSheet)}catch(s){}break}})}try{g(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(l,k,j){var i=this,m;if(i.doc&&typeof(l)==="string"){l=i.get(l)}if(!l){return false}j=j||this;if(!l.nodeType&&(l.length||l.length===0)){m=[];g(l,function(o,n){if(o){if(typeof(o)=="string"){o=i.doc.getElementById(o)}m.push(k.call(j,o,n))}});return m}return k.call(j,l)},getAttribs:function(j){var i;j=this.get(j);if(!j){return[]}if(b){i=[];if(j.nodeName=="OBJECT"){return j.attributes}if(j.nodeName==="OPTION"&&this.getAttrib(j,"selected")){i.push({specified:1,nodeName:"selected"})}j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(k){i.push({specified:1,nodeName:k})});return i}return j.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p=0;m=m.firstChild;if(m){j=new e.dom.TreeWalker(m,m.parentNode);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){if(l==="br"){p++;continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if(q==8){return false}if((q===3&&!a.test(m.nodeValue))){return false}}while(m=j.next())}return p<=1},destroy:function(j){var i=this;i.win=i.doc=i.root=i.events=i.frag=null;if(!j){e.removeUnload(i.destroy)}},createRng:function(){var i=this.doc;return i.createRange?i.createRange():new e.dom.Range(this)},nodeIndex:function(m,n){var i=0,k,l,j;if(m){for(k=m.nodeType,m=m.previousSibling,l=m;m;m=m.previousSibling){j=m.nodeType;if(n&&j==3){if(j==k||!m.nodeValue.length){continue}}i++;k=j}}return i},split:function(m,l,p){var q=this,i=q.createRng(),n,k,o;function j(v){var t,s=v.childNodes,u=v.nodeType;function x(A){var z=A.previousSibling&&A.previousSibling.nodeName=="SPAN";var y=A.nextSibling&&A.nextSibling.nodeName=="SPAN";return z&&y}if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=s.length-1;t>=0;t--){j(s[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){var r=e.trim(v.nodeValue).length;if(!q.isBlock(v.parentNode)||r>0||r===0&&x(v)){return}}else{if(u==1){s=v.childNodes;if(s.length==1&&s[0]&&s[0].nodeType==1&&s[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(s[0],v)}if(s.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}q.remove(v)}return v}if(m&&l){i.setStart(m.parentNode,q.nodeIndex(m));i.setEnd(l.parentNode,q.nodeIndex(l));n=i.extractContents();i=q.createRng();i.setStart(l.parentNode,q.nodeIndex(l)+1);i.setEnd(m.parentNode,q.nodeIndex(m)+1);k=i.extractContents();o=m.parentNode;o.insertBefore(j(n),m);if(p){o.replaceChild(p,l)}else{o.insertBefore(l,m)}o.insertBefore(j(k),m);q.remove(m);return p||l}},bind:function(l,i,k,j){return this.events.add(l,i,k,j||this)},unbind:function(k,i,j){return this.events.remove(k,i,j)},fire:function(k,j,i){return this.events.fire(k,j,i)},getContentEditable:function(j){var i;if(j.nodeType!=1){return null}i=j.getAttribute("data-mce-contenteditable");if(i&&i!=="inherit"){return i}return j.contentEditable!=="inherit"?j.contentEditable:null},_findSib:function(l,i,j){var k=this,m=i;if(l){if(d(m,"string")){m=function(n){return k.is(n,i)}}for(l=l[j];l;l=l[j]){if(m(l)){return l}}}return null},_isRes:function(i){return/^(top|left|bottom|right|width|height)/i.test(i)||/;\s*(top|left|bottom|right|width|height)/i.test(i)}});e.DOM=new e.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var O=this,e=c.doc,U=0,F=1,j=2,E=true,S=false,W="startOffset",h="startContainer",Q="endContainer",A="endOffset",k=tinymce.extend,n=c.nodeIndex;k(O,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:E,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:J,setEndBefore:K,setEndAfter:u,collapse:B,selectNode:y,selectNodeContents:G,compareBoundaryPoints:v,deleteContents:p,extractContents:I,cloneContents:d,insertNode:D,surroundContents:N,cloneRange:L,toStringIE:T});function x(){return e.createDocumentFragment()}function q(X,t){C(E,X,t)}function s(X,t){C(S,X,t)}function g(t){q(t.parentNode,n(t))}function J(t){q(t.parentNode,n(t)+1)}function K(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function B(t){if(t){O[Q]=O[h];O[A]=O[W]}else{O[h]=O[Q];O[W]=O[A]}O.collapsed=E}function y(t){g(t);u(t)}function G(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(aa,t){var ad=O[h],Y=O[W],ac=O[Q],X=O[A],ab=t.startContainer,af=t.startOffset,Z=t.endContainer,ae=t.endOffset;if(aa===0){return H(ad,Y,ab,af)}if(aa===1){return H(ac,X,ab,af)}if(aa===2){return H(ac,X,Z,ae)}if(aa===3){return H(ad,Y,Z,ae)}}function p(){l(j)}function I(){return l(U)}function d(){return l(F)}function D(aa){var X=this[h],t=this[W],Z,Y;if((X.nodeType===3||X.nodeType===4)&&X.nodeValue){if(!t){X.parentNode.insertBefore(aa,X)}else{if(t>=X.nodeValue.length){c.insertAfter(aa,X)}else{Z=X.splitText(t);X.parentNode.insertBefore(aa,Z)}}}else{if(X.childNodes.length>0){Y=X.childNodes[t]}if(Y){X.insertBefore(aa,Y)}else{X.appendChild(aa)}}}function N(X){var t=O.extractContents();O.insertNode(X);X.appendChild(t);O.selectNode(X)}function L(){return k(new b(c),{startContainer:O[h],startOffset:O[W],endContainer:O[Q],endOffset:O[A],collapsed:O.collapsed,commonAncestorContainer:O.commonAncestorContainer})}function P(t,X){var Y;if(t.nodeType==3){return t}if(X<0){return t}Y=t.firstChild;while(Y&&X>0){--X;Y=Y.nextSibling}if(Y){return Y}return t}function m(){return(O[h]==O[Q]&&O[W]==O[A])}function H(Z,ab,X,aa){var ac,Y,t,ad,af,ae;if(Z==X){if(ab==aa){return 0}if(ab0){O.collapse(X)}}else{O.collapse(X)}O.collapsed=m();O.commonAncestorContainer=c.findCommonAncestor(O[h],O[Q])}function l(ad){var ac,Z=0,af=0,X,ab,Y,aa,t,ae;if(O[h]==O[Q]){return f(ad)}for(ac=O[Q],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[h]){return r(ac,ad)}++Z}for(ac=O[h],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[Q]){return V(ac,ad)}++af}ab=af-Z;Y=O[h];while(ab>0){Y=Y.parentNode;ab--}aa=O[Q];while(ab<0){aa=aa.parentNode;ab++}for(t=Y.parentNode,ae=aa.parentNode;t!=ae;t=t.parentNode,ae=ae.parentNode){Y=t;aa=ae}return o(Y,aa,ad)}function f(ac){var ae,af,t,Y,Z,ad,aa,X,ab;if(ac!=j){ae=x()}if(O[W]==O[A]){return ae}if(O[h].nodeType==3){af=O[h].nodeValue;t=af.substring(O[W],O[A]);if(ac!=F){Y=O[h];X=O[W];ab=O[A]-O[W];if(X===0&&ab>=Y.nodeValue.length-1){Y.parentNode.removeChild(Y)}else{Y.deleteData(X,ab)}O.collapse(E)}if(ac==j){return}if(t.length>0){ae.appendChild(e.createTextNode(t))}return ae}Y=P(O[h],O[W]);Z=O[A]-O[W];while(Y&&Z>0){ad=Y.nextSibling;aa=z(Y,ac);if(ae){ae.appendChild(aa)}--Z;Y=ad}if(ac!=F){O.collapse(E)}return ae}function r(ad,aa){var ac,ab,X,t,Z,Y;if(aa!=j){ac=x()}ab=i(ad,aa);if(ac){ac.appendChild(ab)}X=n(ad);t=X-O[W];if(t<=0){if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}ab=ad.previousSibling;while(t>0){Z=ab.previousSibling;Y=z(ab,aa);if(ac){ac.insertBefore(Y,ac.firstChild)}--t;ab=Z}if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}function V(ab,aa){var ad,X,ac,t,Z,Y;if(aa!=j){ad=x()}ac=R(ab,aa);if(ad){ad.appendChild(ac)}X=n(ab);++X;t=O[A]-X;ac=ab.nextSibling;while(ac&&t>0){Z=ac.nextSibling;Y=z(ac,aa);if(ad){ad.appendChild(Y)}--t;ac=Z}if(aa!=F){O.setStartAfter(ab);O.collapse(E)}return ad}function o(ab,t,ae){var Y,ag,aa,ac,ad,X,af,Z;if(ae!=j){ag=x()}Y=R(ab,ae);if(ag){ag.appendChild(Y)}aa=ab.parentNode;ac=n(ab);ad=n(t);++ac;X=ad-ac;af=ab.nextSibling;while(X>0){Z=af.nextSibling;Y=z(af,ae);if(ag){ag.appendChild(Y)}af=Z;--X}Y=i(t,ae);if(ag){ag.appendChild(Y)}if(ae!=F){O.setStartAfter(ab);O.collapse(E)}return ag}function i(ac,ad){var Y=P(O[Q],O[A]-1),ae,ab,aa,t,X,Z=Y!=O[Q];if(Y==ac){return M(Y,Z,S,ad)}ae=Y.parentNode;ab=M(ae,S,S,ad);while(ae){while(Y){aa=Y.previousSibling;t=M(Y,Z,S,ad);if(ad!=j){ab.insertBefore(t,ab.firstChild)}Z=E;Y=aa}if(ae==ac){return ab}Y=ae.previousSibling;ae=ae.parentNode;X=M(ae,S,S,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function R(ac,ad){var Z=P(O[h],O[W]),aa=Z!=O[h],ae,ab,Y,t,X;if(Z==ac){return M(Z,aa,E,ad)}ae=Z.parentNode;ab=M(ae,S,E,ad);while(ae){while(Z){Y=Z.nextSibling;t=M(Z,aa,E,ad);if(ad!=j){ab.appendChild(t)}aa=E;Z=Y}if(ae==ac){return ab}Z=ae.nextSibling;ae=ae.parentNode;X=M(ae,S,E,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function M(t,aa,ad,ae){var Z,Y,ab,X,ac;if(aa){return z(t,ae)}if(t.nodeType==3){Z=t.nodeValue;if(ad){X=O[W];Y=Z.substring(X);ab=Z.substring(0,X)}else{X=O[A];Y=Z.substring(0,X);ab=Z.substring(X)}if(ae!=F){t.nodeValue=ab}if(ae==j){return}ac=c.clone(t,S);ac.nodeValue=Y;return ac}if(ae==j){return}return c.clone(t,S)}function z(X,t){if(t!=j){return t==F?c.clone(X,E):X}X.parentNode.removeChild(X)}function T(){return c.create("body",null,d()).outerText}return O}a.Range=b;b.prototype.toString=function(){return this.toStringIE()}})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",1)===0||s!=k.parentElement()){break}o++}}else{k.collapse(true);o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",-1)===0||s!=k.parentElement()){break}o++}}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,v,q,t,s=d.dom.doc,m=s.body,r,u;function j(C){var y,B,x,A,z;x=h.create("a");y=C?k:v;B=C?p:q;A=n.duplicate();if(y==s||y==s.documentElement){y=m;B=0}if(y.nodeType==3){y.parentNode.insertBefore(x,y);A.moveToElementText(x);A.moveStart("character",B);h.remove(x);n.setEndPoint(C?"StartToStart":"EndToEnd",A)}else{z=y.childNodes;if(z.length){if(B>=z.length){h.insertAfter(x,z[z.length-1])}else{y.insertBefore(x,z[B])}A.moveToElementText(x)}else{if(y.canHaveHTML){y.innerHTML="\uFEFF";x=y.firstChild;A.moveToElementText(x);A.collapse(f)}}n.setEndPoint(C?"StartToStart":"EndToEnd",A);h.remove(x)}}k=i.startContainer;p=i.startOffset;v=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==v&&k.nodeType==1){if(p==q&&!k.hasChildNodes()){if(k.canHaveHTML){t=k.previousSibling;if(t&&!t.hasChildNodes()&&h.isBlock(t)){t.innerHTML="\uFEFF"}else{t=null}k.innerHTML="\uFEFF\uFEFF";n.moveToElementText(k.lastChild);n.select();h.doc.selection.clear();k.innerHTML="";if(t){t.innerHTML=""}return}else{p=h.nodeIndex(k);k=k.parentNode}}if(p==q-1){try{u=k.childNodes[p];l=m.createControlRange();l.addElement(u);l.select();r=d.getRng();if(r.item&&u===r.item(0)){return}}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var n=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i="sizcache",o=0,r=Object.prototype.toString,h=false,g=true,q=/\\/g,u=/\r\n/g,x=/\W/;[0,0].sort(function(){g=false;return 0});var d=function(C,e,F,G){F=F||[];e=e||document;var I=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!C||typeof C!=="string"){return F}var z,K,N,y,J,M,L,E,B=true,A=d.isXML(e),D=[],H=C;do{n.exec("");z=n.exec(H);if(z){H=z[3];D.push(z[1]);if(z[2]){y=z[3];break}}}while(z);if(D.length>1&&j.exec(C)){if(D.length===2&&k.relative[D[0]]){K=s(D[0]+D[1],e,G)}else{K=k.relative[D[0]]?[e]:d(D.shift(),e);while(D.length){C=D.shift();if(k.relative[C]){C+=D.shift()}K=s(C,K,G)}}}else{if(!G&&D.length>1&&e.nodeType===9&&!A&&k.match.ID.test(D[0])&&!k.match.ID.test(D[D.length-1])){J=d.find(D.shift(),e,A);e=J.expr?d.filter(J.expr,J.set)[0]:J.set[0]}if(e){J=G?{expr:D.pop(),set:l(G)}:d.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&e.parentNode?e.parentNode:e,A);K=J.expr?d.filter(J.expr,J.set):J.set;if(D.length>0){N=l(K)}else{B=false}while(D.length){M=D.pop();L=M;if(!k.relative[M]){M=""}else{L=D.pop()}if(L==null){L=e}k.relative[M](N,L,A)}}else{N=D=[]}}if(!N){N=K}if(!N){d.error(M||C)}if(r.call(N)==="[object Array]"){if(!B){F.push.apply(F,N)}else{if(e&&e.nodeType===1){for(E=0;N[E]!=null;E++){if(N[E]&&(N[E]===true||N[E].nodeType===1&&d.contains(e,N[E]))){F.push(K[E])}}}else{for(E=0;N[E]!=null;E++){if(N[E]&&N[E].nodeType===1){F.push(K[E])}}}}}else{l(N,F)}if(y){d(y,I,F,G);d.uniqueSort(F)}return F};d.uniqueSort=function(y){if(p){h=g;y.sort(p);if(h){for(var e=1;e0};d.find=function(E,e,F){var D,z,B,A,C,y;if(!E){return[]}for(z=0,B=k.order.length;z":function(D,y){var C,B=typeof y==="string",z=0,e=D.length;if(B&&!x.test(y)){y=y.toLowerCase();for(;z=0)){if(!z){e.push(C)}}else{if(z){y[B]=false}}}}return false},ID:function(e){return e[1].replace(q,"")},TAG:function(y,e){return y[1].replace(q,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){d.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var y=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(y[1]+(y[2]||1))-0;e[3]=y[3]-0}else{if(e[2]){d.error(e[0])}}e[0]=o++;return e},ATTR:function(B,y,z,e,C,D){var A=B[1]=B[1].replace(q,"");if(!D&&k.attrMap[A]){B[1]=k.attrMap[A]}B[4]=(B[4]||B[5]||"").replace(q,"");if(B[2]==="~="){B[4]=" "+B[4]+" "}return B},PSEUDO:function(B,y,z,e,C){if(B[1]==="not"){if((n.exec(B[3])||"").length>1||/^\w/.test(B[3])){B[3]=d(B[3],null,null,y)}else{var A=d.filter(B[3],y,z,true^C);if(!z){e.push.apply(e,A)}return false}}else{if(k.match.POS.test(B[0])||k.match.CHILD.test(B[0])){return true}}return B},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(z,y,e){return !!d(e[3],z).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(z){var e=z.getAttribute("type"),y=z.type;return z.nodeName.toLowerCase()==="input"&&"text"===y&&(e===y||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===y.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===y.type},button:function(y){var e=y.nodeName.toLowerCase();return e==="input"&&"button"===y.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(y,e){return e===0},last:function(z,y,e,A){return y===A.length-1},even:function(y,e){return e%2===0},odd:function(y,e){return e%2===1},lt:function(z,y,e){return ye[3]-0},nth:function(z,y,e){return e[3]-0===y},eq:function(z,y,e){return e[3]-0===y}},filter:{PSEUDO:function(z,E,D,F){var e=E[1],y=k.filters[e];if(y){return y(z,D,E,F)}else{if(e==="contains"){return(z.textContent||z.innerText||b([z])||"").indexOf(E[3])>=0}else{if(e==="not"){var A=E[3];for(var C=0,B=A.length;C=0)}}},ID:function(y,e){return y.nodeType===1&&y.getAttribute("id")===e},TAG:function(y,e){return(e==="*"&&y.nodeType===1)||!!y.nodeName&&y.nodeName.toLowerCase()===e},CLASS:function(y,e){return(" "+(y.className||y.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(C,A){var z=A[1],e=d.attr?d.attr(C,z):k.attrHandle[z]?k.attrHandle[z](C):C[z]!=null?C[z]:C.getAttribute(z),D=e+"",B=A[2],y=A[4];return e==null?B==="!=":!B&&d.attr?e!=null:B==="="?D===y:B==="*="?D.indexOf(y)>=0:B==="~="?(" "+D+" ").indexOf(y)>=0:!y?D&&e!==false:B==="!="?D!==y:B==="^="?D.indexOf(y)===0:B==="$="?D.substr(D.length-y.length)===y:B==="|="?D===y||D.substr(0,y.length+1)===y+"-":false},POS:function(B,y,z,C){var e=y[2],A=k.setFilters[e];if(A){return A(B,z,y,C)}}}};var j=k.match.POS,c=function(y,e){return"\\"+(e-0+1)};for(var f in k.match){k.match[f]=new RegExp(k.match[f].source+(/(?![^\[]*\])(?![^\(]*\))/.source));k.leftMatch[f]=new RegExp(/(^(?:.|\r|\n)*?)/.source+k.match[f].source.replace(/\\(\d+)/g,c))}k.match.globalPOS=j;var l=function(y,e){y=Array.prototype.slice.call(y,0);if(e){e.push.apply(e,y);return e}return y};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(v){l=function(B,A){var z=0,y=A||[];if(r.call(B)==="[object Array]"){Array.prototype.push.apply(y,B)}else{if(typeof B.length==="number"){for(var e=B.length;z";e.insertBefore(y,e.firstChild);if(document.getElementById(z)){k.find.ID=function(B,C,D){if(typeof C.getElementById!=="undefined"&&!D){var A=C.getElementById(B[1]);return A?A.id===B[1]||typeof A.getAttributeNode!=="undefined"&&A.getAttributeNode("id").nodeValue===B[1]?[A]:undefined:[]}};k.filter.ID=function(C,A){var B=typeof C.getAttributeNode!=="undefined"&&C.getAttributeNode("id");return C.nodeType===1&&B&&B.nodeValue===A}}e.removeChild(y);e=y=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){k.find.TAG=function(y,C){var B=C.getElementsByTagName(y[1]);if(y[1]==="*"){var A=[];for(var z=0;B[z];z++){if(B[z].nodeType===1){A.push(B[z])}}B=A}return B}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){k.attrHandle.href=function(y){return y.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=d,A=document.createElement("div"),z="__sizzle__";A.innerHTML="

                  ";if(A.querySelectorAll&&A.querySelectorAll(".TEST").length===0){return}d=function(L,C,G,K){C=C||document;if(!K&&!d.isXML(C)){var J=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(L);if(J&&(C.nodeType===1||C.nodeType===9)){if(J[1]){return l(C.getElementsByTagName(L),G)}else{if(J[2]&&k.find.CLASS&&C.getElementsByClassName){return l(C.getElementsByClassName(J[2]),G)}}}if(C.nodeType===9){if(L==="body"&&C.body){return l([C.body],G)}else{if(J&&J[3]){var F=C.getElementById(J[3]);if(F&&F.parentNode){if(F.id===J[3]){return l([F],G)}}else{return l([],G)}}}try{return l(C.querySelectorAll(L),G)}catch(H){}}else{if(C.nodeType===1&&C.nodeName.toLowerCase()!=="object"){var D=C,E=C.getAttribute("id"),B=E||z,N=C.parentNode,M=/^\s*[+~]/.test(L);if(!E){C.setAttribute("id",B)}else{B=B.replace(/'/g,"\\$&")}if(M&&N){C=C.parentNode}try{if(!M||N){return l(C.querySelectorAll("[id='"+B+"'] "+L),G)}}catch(I){}finally{if(!E){D.removeAttribute("id")}}}}}return e(L,C,G,K)};for(var y in e){d[y]=e[y]}A=null})()}(function(){var e=document.documentElement,z=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(z){var B=!z.call(document.createElement("div"),"div"),y=false;try{z.call(document.documentElement,"[test!='']:sizzle")}catch(A){y=true}d.matchesSelector=function(D,F){F=F.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!d.isXML(D)){try{if(y||!k.match.PSEUDO.test(F)&&!/!=/.test(F)){var C=z.call(D,F);if(C||!B||D.document&&D.document.nodeType!==11){return C}}}catch(E){}}return d(F,null,null,[D]).length>0}}})();(function(){var e=document.createElement("div");e.innerHTML="
                  ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}k.order.splice(1,0,"CLASS");k.find.CLASS=function(y,z,A){if(typeof z.getElementsByClassName!=="undefined"&&!A){return z.getElementsByClassName(y[1])}};e=null})();function a(y,D,C,G,E,F){for(var A=0,z=G.length;A0){B=e;break}}}e=e[y]}G[A]=B}}}if(document.documentElement.contains){d.contains=function(y,e){return y!==e&&(y.contains?y.contains(e):true)}}else{if(document.documentElement.compareDocumentPosition){d.contains=function(y,e){return !!(y.compareDocumentPosition(e)&16)}}else{d.contains=function(){return false}}}d.isXML=function(e){var y=(e?e.ownerDocument||e:0).documentElement;return y?y.nodeName!=="HTML":false};var s=function(z,e,D){var C,E=[],B="",F=e.nodeType?[e]:e;while((C=k.match.PSEUDO.exec(z))){B+=C[0];z=z.replace(k.match.PSEUDO,"")}z=k.relative[z]?z+"*":z;for(var A=0,y=F.length;A"+(i.item?i.item(0).outerHTML:i.htmlText);m.removeChild(m.firstChild)}else{m.innerHTML=i.toString()}}if(/^\s/.test(m.innerHTML)){j=" "}if(/\s+$/.test(m.innerHTML)){l=" "}h.getInner=true;h.content=g.isCollapsed()?"":j+g.serializer.serialize(m,h)+l;g.onGetContent.dispatch(g,h);return h.content},setContent:function(h,j){var o=this,g=o.getRng(),k,l=o.win.document,n,m;j=j||{format:"html"};j.set=true;h=j.content=h;if(!j.no_events){o.onBeforeSetContent.dispatch(o,j)}h=j.content;if(g.insertNode){h+='_';if(g.startContainer==l&&g.endContainer==l){l.body.innerHTML=h}else{g.deleteContents();if(l.body.childNodes.length===0){l.body.innerHTML=h}else{if(g.createContextualFragment){g.insertNode(g.createContextualFragment(h))}else{n=l.createDocumentFragment();m=l.createElement("div");n.appendChild(m);m.outerHTML=h;g.insertNode(n)}}}k=o.dom.get("__caret");g=l.createRange();g.setStartBefore(k);g.setEndBefore(k);o.setRng(g);o.dom.remove("__caret");try{o.setRng(g)}catch(i){}}else{if(g.item){l.execCommand("Delete",false,null);g=o.getRng()}if(/^\s+/.test(h)){g.pasteHTML('_'+h);o.dom.remove("__mce_tmp")}else{g.pasteHTML(h)}}if(!j.no_events){o.onSetContent.dispatch(o,j)}},getStart:function(){var i=this,h=i.getRng(),j,g,l,k;if(h.duplicate||h.item){if(h.item){return h.item(0)}l=h.duplicate();l.collapse(1);j=l.parentElement();if(j.ownerDocument!==i.dom.doc){j=i.dom.getRoot()}g=k=h.parentElement();while(k=k.parentNode){if(k==j){j=g;break}}return j}else{j=h.startContainer;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[Math.min(j.childNodes.length-1,h.startOffset)]}if(j&&j.nodeType==3){return j.parentNode}return j}},getEnd:function(){var h=this,g=h.getRng(),j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(0);j=g.parentElement();if(j.ownerDocument!==h.dom.doc){j=h.dom.getRoot()}if(j&&j.nodeName=="BODY"){return j.lastChild||j}return j}else{j=g.endContainer;i=g.endOffset;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[i>0?i-1:i]}if(j&&j.nodeType==3){return j.parentNode}return j}},getBookmark:function(s,v){var y=this,n=y.dom,h,k,j,o,i,p,q,m="\uFEFF",x;function g(z,A){var t=0;e(n.select(z),function(C,B){if(C==A){t=B}});return t}function u(t){function z(E){var A,D,C,B=E?"start":"end";A=t[B+"Container"];D=t[B+"Offset"];if(A.nodeType==1&&A.nodeName=="TR"){C=A.childNodes;A=C[Math.min(E?D:D-1,C.length-1)];if(A){D=E?0:A.childNodes.length;t["set"+(E?"Start":"End")](A,D)}}}z(true);z();return t}function l(){var z=y.getRng(true),t=n.getRoot(),A={};function B(E,J){var D=E[J?"startContainer":"endContainer"],I=E[J?"startOffset":"endOffset"],C=[],F,H,G=0;if(D.nodeType==3){if(v){for(F=D.previousSibling;F&&F.nodeType==3;F=F.previousSibling){I+=F.nodeValue.length}}C.push(I)}else{H=D.childNodes;if(I>=H.length&&H.length){G=1;I=Math.max(0,H.length-1)}C.push(y.dom.nodeIndex(H[I],v)+G)}for(;D&&D!=t;D=D.parentNode){C.push(y.dom.nodeIndex(D,v))}return C}A.start=B(z,true);if(!y.isCollapsed()){A.end=B(z)}return A}if(s==2){if(y.tridentSel){return y.tridentSel.getBookmark(s)}return l()}if(s){h=y.getRng();if(h.setStart){h={startContainer:h.startContainer,startOffset:h.startOffset,endContainer:h.endContainer,endOffset:h.endOffset}}return{rng:h}}h=y.getRng();j=n.uniqueId();o=tinyMCE.activeEditor.selection.isCollapsed();x="overflow:hidden;line-height:0px";if(h.duplicate||h.item){if(!h.item){k=h.duplicate();try{h.collapse();h.pasteHTML(''+m+"");if(!o){k.collapse(false);h.moveToElementText(k.parentElement());if(h.compareEndPoints("StartToEnd",k)===0){k.move("character",-1)}k.pasteHTML(''+m+"")}}catch(r){return null}}else{p=h.item(0);i=p.nodeName;return{name:i,index:g(i,p)}}}else{p=y.getNode();i=p.nodeName;if(i=="IMG"){return{name:i,index:g(i,p)}}k=u(h.cloneRange());if(!o){k.collapse(false);k.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_end",style:x},m))}h=u(h);h.collapse(true);h.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_start",style:x},m))}y.moveToBookmark({id:j,keep:1});return{id:j}},moveToBookmark:function(q){var v=this,n=v.dom,l,j,g,i,u,k,x,r,s;function h(C){var t=q[C?"start":"end"],z,A,B,y;if(t){B=t[0];for(A=u,z=t.length-1;z>=1;z--){y=A.childNodes;if(t[z]>y.length-1){return}A=y[t[z]]}if(A.nodeType===3){B=Math.min(t[0],A.nodeValue.length)}if(A.nodeType===1){B=Math.min(t[0],A.childNodes.length)}if(C){g.setStart(A,B)}else{g.setEnd(A,B)}}return true}function m(D){var y=n.get(q.id+"_"+D),C,t,A,B,z=q.keep;if(y){C=y.parentNode;if(D=="start"){if(!z){t=n.nodeIndex(y)}else{C=y.firstChild;t=1}k=x=C;r=s=t}else{if(!z){t=n.nodeIndex(y)}else{C=y.firstChild;t=1}x=C;s=t}if(!z){B=y.previousSibling;A=y.nextSibling;e(d.grep(y.childNodes),function(E){if(E.nodeType==3){E.nodeValue=E.nodeValue.replace(/\uFEFF/g,"")}});while(y=n.get(q.id+"_"+D)){n.remove(y,1)}if(B&&A&&B.nodeType==A.nodeType&&B.nodeType==3&&!d.isOpera){t=B.nodeValue.length;B.appendData(A.nodeValue);n.remove(A);if(D=="start"){k=x=B;r=s=t}else{x=B;s=t}}}}}function o(t){if(n.isBlock(t)&&!t.innerHTML&&!b){t.innerHTML='
                  '}return t}if(q){if(q.start){g=n.createRng();u=n.getRoot();if(v.tridentSel){return v.tridentSel.moveToBookmark(q)}if(h(true)&&h()){v.setRng(g)}}else{if(q.id){m("start");m("end");if(k){g=n.createRng();g.setStart(o(k),r);g.setEnd(o(x),s);v.setRng(g)}}else{if(q.name){v.select(n.select(q.name)[q.index])}else{if(q.rng){g=q.rng;if(g.startContainer){i=v.dom.createRng();try{i.setStart(g.startContainer,g.startOffset);i.setEnd(g.endContainer,g.endOffset)}catch(p){}g=i}v.setRng(g)}}}}}},select:function(l,k){var j=this,m=j.dom,h=m.createRng(),g;function i(n,p){var o=new a(n,n);do{if(n.nodeType==3&&d.trim(n.nodeValue).length!==0){if(p){h.setStart(n,0)}else{h.setEnd(n,n.nodeValue.length)}return}if(n.nodeName=="BR"){if(p){h.setStartBefore(n)}else{h.setEndBefore(n)}return}}while(n=(p?o.next():o.prev()))}if(l){g=m.nodeIndex(l);h.setStart(l.parentNode,g);h.setEnd(l.parentNode,g+1);if(k){i(l,1);i(l)}j.setRng(h)}return l},isCollapsed:function(){var g=this,i=g.getRng(),h=g.getSel();if(!i||i.item){return false}if(i.compareEndPoints){return i.compareEndPoints("StartToEnd",i)===0}return !h||i.collapsed},collapse:function(g){var i=this,h=i.getRng(),j;if(h.item){j=h.item(0);h=i.win.document.body.createTextRange();h.moveToElementText(j)}h.collapse(!!g);i.setRng(h)},getSel:function(){var h=this,g=this.win;return g.getSelection?g.getSelection():g.document.selection},getRng:function(m){var h=this,j,g,l,k=h.win.document;if(m&&h.tridentSel){return h.tridentSel.getRangeAt(0)}try{if(j=h.getSel()){g=j.rangeCount>0?j.getRangeAt(0):(j.createRange?j.createRange():k.createRange())}}catch(i){}if(d.isIE&&!d.isIE11&&g&&g.setStart&&k.selection.createRange().item){l=k.selection.createRange().item(0);g=k.createRange();g.setStartBefore(l);g.setEndAfter(l)}if(!g){g=k.createRange?k.createRange():k.body.createTextRange()}if(g.setStart&&g.startContainer.nodeType===9&&g.collapsed){l=h.dom.getRoot();g.setStart(l,0);g.setEnd(l,0)}if(h.selectedRange&&h.explicitRange){if(g.compareBoundaryPoints(g.START_TO_START,h.selectedRange)===0&&g.compareBoundaryPoints(g.END_TO_END,h.selectedRange)===0){g=h.explicitRange}else{h.selectedRange=null;h.explicitRange=null}}return g},setRng:function(k,g){var j,i=this;if(!i.tridentSel){j=i.getSel();if(j){i.explicitRange=k;try{j.removeAllRanges()}catch(h){}j.addRange(k);if(g===false&&j.extend){j.collapse(k.endContainer,k.endOffset);j.extend(k.startContainer,k.startOffset)}i.selectedRange=j.rangeCount>0?j.getRangeAt(0):null}}else{if(k.cloneRange){try{i.tridentSel.addRange(k);return}catch(h){}}try{k.select()}catch(h){}}},setNode:function(h){var g=this;g.setContent(g.dom.getOuterHTML(h));return h},getNode:function(){var i=this,h=i.getRng(),j=i.getSel(),m,l=h.startContainer,g=h.endContainer;function k(q,o){var p=q;while(q&&q.nodeType===3&&q.length===0){q=o?q.nextSibling:q.previousSibling}return q||p}if(!h){return i.dom.getRoot()}if(h.setStart){m=h.commonAncestorContainer;if(!h.collapsed){if(h.startContainer==h.endContainer){if(h.endOffset-h.startOffset<2){if(h.startContainer.hasChildNodes()){m=h.startContainer.childNodes[h.startOffset]}}}if(l.nodeType===3&&g.nodeType===3){if(l.length===h.startOffset){l=k(l.nextSibling,true)}else{l=l.parentNode}if(h.endOffset===0){g=k(g.previousSibling,false)}else{g=g.parentNode}if(l&&l===g){return l}}}if(m&&m.nodeType==3){return m.parentNode}return m}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(p,h){var o=this,k=o.dom,m,l,i,j=[];m=k.getParent(p||o.getStart(),k.isBlock);l=k.getParent(h||o.getEnd(),k.isBlock);if(m){j.push(m)}if(m&&l&&m!=l){i=m;var g=new a(m,k.getRoot());while((i=g.next())&&i!=l){if(k.isBlock(i)){j.push(i)}}}if(l&&m!=l){j.push(l)}return j},isForward:function(){var i=this.dom,g=this.getSel(),j,h;if(!g||g.anchorNode==null||g.focusNode==null){return true}j=i.createRng();j.setStart(g.anchorNode,g.anchorOffset);j.collapse(true);h=i.createRng();h.setStart(g.focusNode,g.focusOffset);h.collapse(true);return j.compareBoundaryPoints(j.START_TO_START,h)<=0},normalize:function(){var h=this,g,m,l,j,i;function k(p){var o,r,n,s=h.dom,u=s.getRoot(),q,t,v;function y(z,A){var B=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(z=B[A?"prev":"next"]()){if(z.nodeName==="BR"){return true}}}function x(B,z){var C,A;z=z||o;C=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(q=C[B?"prev":"next"]()){if(q.nodeType===3&&q.nodeValue.length>0){o=q;r=B?q.nodeValue.length:0;m=true;return}if(s.isBlock(q)||t[q.nodeName.toLowerCase()]){return}A=q}if(l&&A){o=A;m=true;r=0}}o=g[(p?"start":"end")+"Container"];r=g[(p?"start":"end")+"Offset"];t=s.schema.getNonEmptyElements();if(o.nodeType===9){o=s.getRoot();r=0}if(o===u){if(p){q=o.childNodes[r>0?r-1:0];if(q){v=q.nodeName.toLowerCase();if(t[q.nodeName]||q.nodeName=="TABLE"){return}}}if(o.hasChildNodes()){o=o.childNodes[Math.min(!p&&r>0?r-1:r,o.childNodes.length-1)];r=0;if(o.hasChildNodes()&&!/TABLE/.test(o.nodeName)){q=o;n=new a(o,u);do{if(q.nodeType===3&&q.nodeValue.length>0){r=p?0:q.nodeValue.length;o=q;m=true;break}if(t[q.nodeName.toLowerCase()]){r=s.nodeIndex(q);o=q.parentNode;if(q.nodeName=="IMG"&&!p){r++}m=true;break}}while(q=(p?n.next():n.prev()))}}}if(l){if(o.nodeType===3&&r===0){x(true)}if(o.nodeType===1){q=o.childNodes[r];if(q&&q.nodeName==="BR"&&!y(q)&&!y(q,true)){x(true,o.childNodes[r])}}}if(p&&!l&&o.nodeType===3&&r===o.nodeValue.length){x(false)}if(m){g["set"+(p?"Start":"End")](o,r)}}if(d.isIE){return}g=h.getRng();l=g.collapsed;k(true);if(!l){k()}if(m){if(l){g.collapse(true)}h.setRng(g,h.isForward())}},selectorChanged:function(g,j){var h=this,i;if(!h.selectorChangedData){h.selectorChangedData={};i={};h.editor.onNodeChange.addToTop(function(l,k,o){var p=h.dom,m=p.getParents(o,null,p.getRoot()),n={};e(h.selectorChangedData,function(r,q){e(m,function(s){if(p.is(s,q)){if(!i[q]){e(r,function(t){t(true,{node:s,selector:q,parents:m})});i[q]=r}n[q]=r;return false}})});e(i,function(r,q){if(!n[q]){delete i[q];e(r,function(s){s(false,{node:o,selector:q,parents:m})})}})})}if(!h.selectorChangedData[g]){h.selectorChangedData[g]=[]}h.selectorChangedData[g].push(j);return h},scrollIntoView:function(k){var j,h,g=this,i=g.dom;h=i.getViewPort(g.editor.getWin());j=i.getPos(k).y;if(jh.y+h.h){g.editor.getWin().scrollTo(0,j0){p.setEndPoint("StartToStart",o)}else{p.setEndPoint("EndToEnd",o)}p.select()}}else{l()}}function l(){var p=n.selection.createRange();if(o&&!p.item&&p.compareEndPoints("StartToEnd",p)===0){o.select()}h.unbind(n,"mouseup",l);h.unbind(n,"mousemove",m);o=k=0}n.documentElement.unselectable=true;h.bind(n,["mousedown","contextmenu"],function(p){if(p.target.nodeName==="HTML"){if(k){l()}g=n.documentElement;if(g.scrollHeight>g.clientHeight){return}k=1;o=j(p.x,p.y);if(o){h.bind(n,"mouseup",l);h.bind(n,"mousemove",m);h.win.focus();o.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/(?:^|\s)mce(Item\w+|Selected)(?!\S)/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addAttributeFilter("data-mce-expando",function(j,l,k){var m=j.length;while(m--){j[m].attr(l,null)}});c.addNodeFilter("noscript",function(j){var k=j.length,l;while(k--){l=j[k].firstChild;if(l){l.value=a.html.Entities.decode(l.value)}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// "}}else{if(o.length>0){n.firstChild.value=""}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(a.trim(m.getInner?o.innerHTML:i.getOuterHTML(o)),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],e={},d=[],g=0,f;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=document.createElement("script");s.id=n;s.type="text/javascript";s.src=a._addVer(m);if(!a.isIE||a.isIE11){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==f){j.push(m);l[m]=c}if(q){if(!e[m]){e[m]=[]}e[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(e[r],function(s){s.func.call(s.scope)});e[r]=f}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&dd){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d0&&g=m.length){r=0}}t=m[r];f.setAttrib(g,"tabindex","-1");f.setAttrib(t.id,"tabindex","0");f.get(t.id).focus();if(e.actOnFocus){e.onAction(t.id)}if(s){a.cancel(s)}};p=function(z){var v=37,u=39,y=38,A=40,r=27,t=14,s=13,x=32;switch(z.keyCode){case v:if(i){q.moveFocus(-1)}a.cancel(z);break;case u:if(i){q.moveFocus(1)}a.cancel(z);break;case y:if(o){q.moveFocus(-1)}a.cancel(z);break;case A:if(o){q.moveFocus(1)}a.cancel(z);break;case r:if(e.onCancel){e.onCancel();a.cancel(z)}break;case t:case s:case x:if(e.onAction){e.onAction(g);a.cancel(z)}break}};c(m,function(t,r){var s,u;if(!t.id){t.id=f.uniqueId("_mce_item_")}u=f.get(t.id);if(l){f.bind(u,"blur",h);s="-1"}else{s=(r===0?"0":"-1")}u.setAttribute("tabindex",s);f.bind(u,"focus",k)});if(m[0]){g=m[0].id}f.setAttrib(n,"tabindex","-1");var j=f.get(n);f.bind(j,"focus",d);f.bind(j,"keydown",p)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.offsetWidth,j.max_width):g.offsetWidth;k=j.max_height?Math.min(g.offsetHeight,j.max_height):g.offsetHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeightv){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return false}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){if(typeof h.settings.style=="function"){h.settings.style=h.settings.style()}c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+=''+a.encode(e.title)+''+(c?''+c+"":"")}else{d+=''+(c?''+c+"":"")}d+='";d+="";return d},postRender:function(){var d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keydown",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){b.dom.Event.cancel(f);return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(j,i,g){var h=this;h.parent(j,i,g);h.items=[];h.onChange=new a(h);h.onPostRender=new a(h);h.onAdd=new a(h);h.onRenderMenu=new e.util.Dispatcher(this);h.classPrefix="mceListBox";h.marked={}},select:function(h){var g=this,j,i;g.marked={};if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){var i=this,j,k,h;i.marked={};if(g!=i.selectedIndex){j=d.get(i.id+"_text");h=d.get(i.id+"_voiceDesc");k=i.items[g];if(k){i.selectedValue=k.value;i.selectedIndex=g;d.setHTML(j,d.encode(k.title));d.setHTML(h,i.settings.title+" - "+k.title);d.removeClass(j,"mceTitle");d.setAttrib(i.id,"aria-valuenow",k.title)}else{d.setHTML(j,d.encode(i.settings.title));d.setHTML(h,d.encode(i.settings.title));d.addClass(j,"mceTitle");i.selectedValue=i.selectedIndex=null;d.setAttrib(i.id,"aria-valuenow",i.settings.title)}j=0}},mark:function(g){this.marked[g]=true},add:function(j,g,i){var h=this;i=i||{};i=e.extend(i,{title:j,value:g});h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var j="",g=this,i=g.settings,k=g.classPrefix;j='';j+="";j+="";j+="";return j},showMenu:function(){var h=this,j,i=d.get(this.id),g;if(h.isDisabled()||h.items.length===0){return}if(h.menu&&h.menu.isMenuVisible){return h.hideMenu()}if(!h.isMenuRendered){h.renderMenu();h.isMenuRendered=true}j=d.getPos(i);g=h.menu;g.settings.offset_x=j.x;g.settings.offset_y=j.y;g.settings.keyboard_focus=!e.isOpera;f(h.items,function(k){if(g.items[k.id]){g.items[k.id].setSelected(0)}});f(h.items,function(k){if(g.items[k.id]&&h.marked[k.value]){g.items[k.id].setSelected(1)}if(k.value===h.selectedValue){g.items[k.id].setSelected(1)}});g.showMenu(0,i.clientHeight);b.add(d.doc,"mousedown",h.hideMenu,h);d.addClass(h.id,h.classPrefix+"Selected")},hideMenu:function(h){var g=this;if(g.menu&&g.menu.isMenuVisible){d.removeClass(g.id,g.classPrefix+"Selected");if(h&&h.type=="mousedown"&&(h.target.id==g.id+"_text"||h.target.id==g.id+"_open")){return}if(!h||!d.getParent(h.target,".mceMenu")){d.removeClass(g.id,g.classPrefix+"Selected");b.remove(d.doc,"mousedown",g.hideMenu,g);g.menu.hideMenu()}}},renderMenu:function(){var h=this,g;g=h.settings.control_manager.createDropMenu(h.id+"_menu",{menu_line:1,"class":h.classPrefix+"Menu mceNoIcons",max_width:250,max_height:150});g.onHideMenu.add(function(){h.hideMenu();h.focus()});g.add({title:h.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}});f(h.items,function(i){if(i.value===c){g.add({title:i.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}})}else{i.id=d.uniqueId();i.role="option";i.onclick=function(){if(h.settings.onselect(i.value)!==false){h.select(i.value)}};g.add(i)}});h.onRenderMenu.dispatch(h,g);h.menu=g},postRender:function(){var g=this,h=g.classPrefix;b.add(g.id,"click",g.showMenu,g);b.add(g.id,"keydown",function(i){if(i.keyCode==32){g.showMenu(i);b.cancel(i)}});b.add(g.id,"focus",function(){if(!g._focused){g.keyDownHandler=b.add(g.id,"keydown",function(i){if(i.keyCode==40){g.showMenu();b.cancel(i)}});g.keyPressHandler=b.add(g.id,"keypress",function(j){var i;if(j.keyCode==13){i=g.selectedValue;g.selectedValue=null;b.cancel(j);g.settings.onselect(i)}})}g._focused=1});b.add(g.id,"blur",function(){b.remove(g.id,"keydown",g.keyDownHandler);b.remove(g.id,"keypress",g.keyPressHandler);g._focused=0});if(e.isIE6||!d.boxModel){b.add(g.id,"mouseover",function(){if(!d.hasClass(g.id,h+"Disabled")){d.addClass(g.id,h+"Hover")}});b.add(g.id,"mouseout",function(){if(!d.hasClass(g.id,h+"Disabled")){d.removeClass(g.id,h+"Hover")}})}g.onPostRender.dispatch(g,d.get(g.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(h,g){this.parent(h,g);this.classPrefix="mceNativeListBox"},setDisabled:function(g){d.get(this.id).disabled=g;this.setAriaProperty("disabled",g)},isDisabled:function(){return d.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){d.get(this.id).selectedIndex=g+1;this.selectedValue=this.items[g]?this.items[g].value:null},add:function(k,h,g){var j,i=this;g=g||{};g.value=h;if(i.isRendered()){d.add(d.get(this.id),"option",g,k)}j={title:k,value:h,attribs:g};i.items.push(j);i.onAdd.dispatch(i,j)},getLength:function(){return this.items.length},renderHTML:function(){var i,g=this;i=d.createHTML("option",{value:""},"-- "+g.settings.title+" --");f(g.items,function(h){i+=d.createHTML("option",{value:h.value},h.title)});i=d.createHTML("select",{id:g.id,"class":"mceNativeListBox","aria-labelledby":g.id+"_aria"},i);i+=d.createHTML("span",{id:g.id+"_aria",style:"display: none"},g.settings.title);return i},postRender:function(){var h=this,i,j=true;h.rendered=true;function g(l){var k=h.items[l.target.selectedIndex-1];if(k&&(k=k.value)){h.onChange.dispatch(h,k);if(h.settings.onselect){h.settings.onselect(k)}}}b.add(h.id,"change",g);b.add(h.id,"keydown",function(q){var n,p=37,m=39,l=38,r=40,k=13,o=32;b.remove(h.id,"change",i);j=false;n=b.add(h.id,"blur",function(){if(j){return}j=true;b.add(h.id,"change",g);b.remove(h.id,"blur",n)});if(q.keyCode==k||q.keyCode==o){g(q);return b.cancel(q)}else{if(q.keyCode==r||q.keyCode==l){q.stopImmediatePropagation()}}});h.onPostRender.dispatch(h,d.get(h.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.firstChild.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+=""+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'');i+=""+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";i+="";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.firstChild.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.keyboardNav=new d.ui.KeyboardNavigation({root:f.id+"_menu",items:c.select("a",f.id+"_menu"),onCancel:function(){f.hideMenu();f.focus()}});f.keyboardNav.focus();f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch();f.keyboardNav.destroy()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return false});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){var f=this;f.parent();a.clear(f.id+"_menu");a.clear(f.id+"_more");c.remove(f.id+"_menu");if(f.keyboardNav){f.keyboardNav.destroy()}}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('
                  ');i.push("");i.push('");j(e,function(h){i.push(h.renderHTML())});i.push("");i.push("
                  ");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,""))}}if(c.stdMode){f+=''+k.renderHTML()+""}else{f+=""+k.renderHTML()+""}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,""))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,""));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},""+f+"")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!==0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(x){var v=this,o,n=j.ScriptLoader,u,l=[],r;function q(t){var s=t.id;if(!s){s=t.name;if(s&&!k.get(s)){s=t.name}else{s=k.uniqueId()}t.setAttribute("id",s)}return s}function m(z,A,t){var y=z[A];if(!y){return}if(j.is(y,"string")){t=y.replace(/\.\w+$/,"");t=t?j.resolve(t):0;y=j.resolve(y)}return y.apply(t||this,Array.prototype.slice.call(arguments,2))}function p(t,s){return s.constructor===RegExp?s.test(t.className):k.hasClass(t,s)}v.settings=x;i.bind(window,"ready",function(){var s,t;m(x,"onpageload");switch(x.mode){case"exact":s=x.elements||"";if(s.length>0){g(e(s),function(y){if(k.get(y)){r=new j.Editor(y,x);l.push(r);r.render(1)}else{g(document.forms,function(z){g(z.elements,function(A){if(A.name===y){y="mce_editor_"+c++;k.setAttrib(A,"id",y);r=new j.Editor(y,x);l.push(r);r.render(1)}})})}})}break;case"textareas":case"specific_textareas":g(k.select("textarea"),function(y){if(x.editor_deselector&&p(y,x.editor_deselector)){return}if(!x.editor_selector||p(y,x.editor_selector)){r=new j.Editor(q(y),x);l.push(r);r.render(1)}});break;default:if(x.types){g(x.types,function(y){g(k.select(y.selector),function(A){var z=new j.Editor(q(A),j.extend({},x,y));l.push(z);z.render(1)})})}else{if(x.selector){g(k.select(x.selector),function(z){var y=new j.Editor(q(z),x);l.push(y);y.render(1)})}}}if(x.oninit){s=t=0;g(l,function(y){t++;if(!y.initialized){y.onInit.add(function(){s++;if(s==t){m(x,"oninit")}})}else{s++}if(s==t){m(x,"oninit")}})}})},get:function(l){if(l===a){return this.editors}if(!this.editors.hasOwnProperty(l)){return a}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l':"",visual:n,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:n,directionality:"ltr",forced_root_block:"p",hidden_input:n,padd_empty_editor:n,render_ui:n,indentation:"30px",fix_table_elements:n,inline_styles:n,convert_fonts_to_spans:n,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:n,entity_encoding:"named",url_converter:m.convertURL,url_converter_scope:m,ie7_compat:n},o);m.id=m.editorId=p;m.isNotDirty=false;m.plugins={};m.documentBaseURI=new k.util.URI(o.document_base_url||k.documentBaseURL,{base_uri:tinyMCE.baseURI});m.baseURI=k.baseURI;m.contentCSS=[];m.contentStyles=[];m.setupEvents();m.execCommands={};m.queryStateCommands={};m.queryValueCommands={};m.execCallback("setup",m)},render:function(o){var p=this,q=p.settings,r=p.id,m=k.ScriptLoader;if(!j.domLoaded){j.add(window,"ready",function(){p.render()});return}tinyMCE.settings=q;if(!p.getElement()){return}if(k.isIDevice&&!k.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(p.getElement().nodeName)&&q.hidden_input&&l.getParent(r,"form")){l.insertAfter(l.create("input",{type:"hidden",name:r}),r)}if(!q.content_editable){p.orgVisibility=p.getElement().style.visibility;p.getElement().style.visibility="hidden"}if(k.WindowManager){p.windowManager=new k.WindowManager(p)}if(q.encoding=="xml"){p.onGetContent.add(function(s,t){if(t.save){t.content=l.encode(t.content)}})}if(q.add_form_submit_trigger){p.onSubmit.addToTop(function(){if(p.initialized){p.save();p.isNotDirty=1}})}if(q.add_unload_trigger){p._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(p.initialized&&!p.destroyed&&!p.isHidden()){p.save({format:"raw",no_events:true})}})}k.addUnload(p.destroy,p);if(q.submit_patch){p.onBeforeRenderUI.add(function(){var s=p.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){p.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){k.triggerSave();p.isNotDirty=1;return p.formElement._mceOldSubmit(p.formElement)}}s=null})}function n(){if(q.language&&q.language_load!==false){m.add(k.baseURL+"/langs/"+q.language+".js")}if(q.theme&&typeof q.theme!="function"&&q.theme.charAt(0)!="-"&&!h.urls[q.theme]){h.load(q.theme,"themes/"+q.theme+"/editor_template"+k.suffix+".js")}i(g(q.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(v){var u={prefix:"plugins/",resource:v,suffix:"/editor_plugin"+k.suffix+".js"};v=c.createUrl(u,v);c.load(v.resource,v)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+k.suffix+".js"})}}});m.loadQueue(function(){if(!p.removed){p.init()}})}n()},init:function(){var q,G=this,H=G.settings,D,y,z,C=G.getElement(),p,m,E,v,B,F,x,r=[];k.add(G);H.aria_label=H.aria_label||l.getAttrib(C,"aria-label",G.getLang("aria.rich_text_area"));if(H.theme){if(typeof H.theme!="function"){H.theme=H.theme.replace(/-/,"");p=h.get(H.theme);G.theme=new p();if(G.theme.init){G.theme.init(G,h.urls[H.theme]||k.documentBaseURL.replace(/\/$/,""))}}else{G.theme=H.theme}}function A(s){var t=c.get(s),o=c.urls[s]||k.documentBaseURL.replace(/\/$/,""),n;if(t&&k.inArray(r,s)===-1){i(c.dependencies(s),function(u){A(u)});n=new t(G,o);G.plugins[s]=n;if(n.init){n.init(G,o);r.push(s)}}}i(g(H.plugins.replace(/\-/g,"")),A);if(H.popup_css!==false){if(H.popup_css){H.popup_css=G.documentBaseURI.toAbsolute(H.popup_css)}else{H.popup_css=G.baseURI.toAbsolute("themes/"+H.theme+"/skins/"+H.skin+"/dialog.css")}}if(H.popup_css_add){H.popup_css+=","+G.documentBaseURI.toAbsolute(H.popup_css_add)}G.controlManager=new k.ControlManager(G);G.onBeforeRenderUI.dispatch(G,G.controlManager);if(H.render_ui&&G.theme){G.orgDisplay=C.style.display;if(typeof H.theme!="function"){D=H.width||C.style.width||C.offsetWidth;y=H.height||C.style.height||C.offsetHeight;z=H.min_height||100;F=/^[0-9\.]+(|px)$/i;if(F.test(""+D)){D=Math.max(parseInt(D,10)+(p.deltaWidth||0),100)}if(F.test(""+y)){y=Math.max(parseInt(y,10)+(p.deltaHeight||0),z)}p=G.theme.renderUI({targetNode:C,width:D,height:y,deltaWidth:H.delta_width,deltaHeight:H.delta_height});l.setStyles(p.sizeContainer||p.editorContainer,{width:D,height:y});y=(p.iframeHeight||y)+(typeof(y)=="number"?(p.deltaHeight||0):"");if(y';if(H.document_base_url!=k.documentBaseURL){G.iframeHTML+=''}if(k.isIE8){if(H.ie7_compat){G.iframeHTML+=''}else{G.iframeHTML+=''}}G.iframeHTML+='';for(x=0;x'}G.contentCSS=[];v=H.body_id||"tinymce";if(v.indexOf("=")!=-1){v=G.getParam("body_id","","hash");v=v[G.id]||v}B=H.body_class||"";if(B.indexOf("=")!=-1){B=G.getParam("body_class","","hash");B=B[G.id]||""}G.iframeHTML+='
                  ";if(k.relaxedDomain&&(b||(k.isOpera&&parseFloat(opera.version())<11))){E='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+G.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'}q=l.add(p.iframeContainer,"iframe",{id:G.id+"_ifr",src:E||'javascript:""',frameBorder:"0",allowTransparency:"true",title:H.aria_label,style:{width:"100%",height:y,display:"block"}});G.contentAreaContainer=p.iframeContainer;if(p.editorContainer){l.get(p.editorContainer).style.display=G.orgDisplay}C.style.visibility=G.orgVisibility;l.get(G.id).style.display="none";l.setAttrib(G.id,"aria-hidden",true);if(!k.relaxedDomain||!E){G.initContentBody()}C=q=p=null},initContentBody:function(){var n=this,p=n.settings,q=l.get(n.id),r=n.getDoc(),o,m,s;if((!b||!k.relaxedDomain)&&!p.content_editable){r.open();r.write(n.iframeHTML);r.close();if(k.relaxedDomain){r.domain=k.relaxedDomain}}if(p.content_editable){l.addClass(q,"mceContentBody");n.contentDocument=r=p.content_document||document;n.contentWindow=p.content_window||window;n.bodyElement=q;p.content_document=p.content_window=null}m=n.getBody();m.disabled=true;if(!p.readonly){m.contentEditable=n.getParam("content_editable_state",true)}m.disabled=false;n.schema=new k.html.Schema(p);n.dom=new k.dom.DOMUtils(r,{keep_values:true,url_converter:n.convertURL,url_converter_scope:n,hex_colors:p.force_hex_style_colors,class_filter:p.class_filter,update_styles:true,root_element:p.content_editable?n.id:null,schema:n.schema});n.parser=new k.html.DomParser(p,n.schema);n.parser.addAttributeFilter("src,href,style",function(t,u){var v=t.length,y,A=n.dom,z,x;while(v--){y=t[v];z=y.attr(u);x="data-mce-"+u;if(!y.attributes.map[x]){if(u==="style"){y.attr(x,A.serializeStyle(A.parseStyle(z),y.name))}else{y.attr(x,n.convertURL(z,u,y.name))}}}});n.parser.addNodeFilter("script",function(t,u){var v=t.length,x;while(v--){x=t[v];x.attr("type","mce-"+(x.attr("type")||"text/javascript"))}});n.parser.addNodeFilter("#cdata",function(t,u){var v=t.length,x;while(v--){x=t[v];x.type=8;x.name="#comment";x.value="[CDATA["+x.value+"]]"}});n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(u,v){var x=u.length,y,t=n.schema.getNonEmptyElements();while(x--){y=u[x];if(y.isEmpty(t)){y.empty().append(new k.html.Node("br",1)).shortEnded=true}}});n.serializer=new k.dom.Serializer(p,n.dom,n.schema);n.selection=new k.dom.Selection(n.dom,n.getWin(),n.serializer,n);n.formatter=new k.Formatter(n);n.undoManager=new k.UndoManager(n);n.forceBlocks=new k.ForceBlocks(n);n.enterKey=new k.EnterKey(n);n.editorCommands=new k.EditorCommands(n);n.onExecCommand.add(function(t,u){if(!/^(FontName|FontSize)$/.test(u)){n.nodeChanged()}});n.serializer.onPreProcess.add(function(t,u){return n.onPreProcess.dispatch(n,u,t)});n.serializer.onPostProcess.add(function(t,u){return n.onPostProcess.dispatch(n,u,t)});n.onPreInit.dispatch(n);if(!p.browser_spellcheck&&!p.gecko_spellcheck){r.body.spellcheck=false}if(!p.readonly){n.bindNativeEvents()}n.controlManager.onPostRender.dispatch(n,n.controlManager);n.onPostRender.dispatch(n);n.quirks=k.util.Quirks(n);if(p.directionality){m.dir=p.directionality}if(p.nowrap){m.style.whiteSpace="nowrap"}if(p.protect){n.onBeforeSetContent.add(function(t,u){i(p.protect,function(v){u.content=u.content.replace(v,function(x){return""})})})}n.onSetContent.add(function(){n.addVisual(n.getBody())});if(p.padd_empty_editor){n.onPostProcess.add(function(t,u){u.content=u.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
                  [\r\n]*)$/,"")})}n.load({initial:true,format:"html"});n.startContent=n.getContent({format:"raw"});n.initialized=true;n.onInit.dispatch(n);n.execCallback("setupcontent_callback",n.id,m,r);n.execCallback("init_instance_callback",n);n.focus(true);n.nodeChanged({initial:true});if(n.contentStyles.length>0){s="";i(n.contentStyles,function(t){s+=t+"\r\n"});n.dom.addStyle(s)}i(n.contentCSS,function(t){n.dom.loadCSS(t)});if(p.auto_focus){setTimeout(function(){var t=k.get(p.auto_focus);t.selection.select(t.getBody(),1);t.selection.collapse(1);t.getBody().focus();t.getWin().focus()},100)}q=r=m=null},focus:function(p){var o,u=this,t=u.selection,q=u.settings.content_editable,n,r,s=u.getDoc(),m;if(!p){if(u.bookmark){t.moveToBookmark(u.bookmark);u.bookmark=null}n=t.getRng();if(n.item){r=n.item(0)}u._refreshContentEditable();if(!q){u.getWin().focus()}if(k.isGecko||q){m=u.getBody();if(m.setActive&&!k.isIE11){m.setActive()}else{m.focus()}if(q){t.normalize()}}if(r&&r.ownerDocument==s){n=s.body.createControlRange();n.addElement(r);n.select()}}if(k.activeEditor!=u){if((o=k.activeEditor)!=null){o.onDeactivate.dispatch(o,u)}u.onActivate.dispatch(u,o)}k._setActive(u)},execCallback:function(q){var m=this,p=m.settings[q],o;if(!p){return}if(m.callbackLookup&&(o=m.callbackLookup[q])){p=o.func;o=o.scope}if(d(p,"string")){o=p.replace(/\.\w+$/,"");o=o?k.resolve(o):0;p=k.resolve(p);m.callbackLookup=m.callbackLookup||{};m.callbackLookup[q]={func:p,scope:o}}return p.apply(o||m,Array.prototype.slice.call(arguments,1))},translate:function(m){var o=this.settings.language||"en",n=k.i18n;if(!m){return""}return n[o+"."+m]||m.replace(/\{\#([^\}]+)\}/g,function(q,p){return n[o+"."+p]||"{#"+p+"}"})},getLang:function(o,m){return k.i18n[(this.settings.language||"en")+"."+o]||(d(m)?m:"{#"+o+"}")},getParam:function(t,q,m){var r=k.trim,p=d(this.settings[t])?this.settings[t]:q,s;if(m==="hash"){s={};if(d(p,"string")){i(p.indexOf("=")>0?p.split(/[;,](?![^=;,]*(?:[;,]|$))/):p.split(","),function(n){n=n.split("=");if(n.length>1){s[r(n[0])]=r(n[1])}else{s[r(n[0])]=r(n)}})}else{s=p}return s}return p},nodeChanged:function(q){var m=this,n=m.selection,p;if(m.initialized){q=q||{};p=n.getStart()||m.getBody();p=b&&p.ownerDocument!=m.getDoc()?m.getBody():p;q.parents=[];m.dom.getParent(p,function(o){if(o.nodeName=="BODY"){return true}q.parents.push(o)});m.onNodeChange.dispatch(m,q?q.controlManager||m.controlManager:m.controlManager,p,n.isCollapsed(),q)}},addButton:function(n,o){var m=this;m.buttons=m.buttons||{};m.buttons[n]=o},addCommand:function(m,o,n){this.execCommands[m]={func:o,scope:n||this}},addQueryStateHandler:function(m,o,n){this.queryStateCommands[m]={func:o,scope:n||this}},addQueryValueHandler:function(m,o,n){this.queryValueCommands[m]={func:o,scope:n||this}},addShortcut:function(o,q,m,p){var n=this,r;if(n.settings.custom_shortcuts===false){return false}n.shortcuts=n.shortcuts||{};if(d(m,"string")){r=m;m=function(){n.execCommand(r,false,null)}}if(d(m,"object")){r=m;m=function(){n.execCommand(r[0],r[1],r[2])}}i(g(o),function(s){var t={func:m,scope:p||this,desc:n.translate(q),alt:false,ctrl:false,shift:false};i(g(s,"+"),function(u){switch(u){case"alt":case"ctrl":case"shift":t[u]=true;break;default:t.charCode=u.charCodeAt(0);t.keyCode=u.toUpperCase().charCodeAt(0)}});n.shortcuts[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t});return true},execCommand:function(u,r,x,m){var p=this,q=0,v,n;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(u)&&(!m||!m.skip_focus)){p.focus()}m=f({},m);p.onBeforeExecCommand.dispatch(p,u,r,x,m);if(m.terminate){return false}if(p.execCallback("execcommand_callback",p.id,p.selection.getNode(),u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(v=p.execCommands[u]){n=v.func.call(v.scope,r,x);if(n!==true){p.onExecCommand.dispatch(p,u,r,x,m);return n}}i(p.plugins,function(o){if(o.execCommand&&o.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);q=1;return false}});if(q){return true}if(p.theme&&p.theme.execCommand&&p.theme.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(p.editorCommands.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}p.getDoc().execCommand(u,r,x);p.onExecCommand.dispatch(p,u,r,x,m)},queryCommandState:function(q){var n=this,r,p;if(n._isHidden()){return}if(r=n.queryStateCommands[q]){p=r.func.call(r.scope);if(p!==true){return p}}r=n.editorCommands.queryCommandState(q);if(r!==-1){return r}try{return this.getDoc().queryCommandState(q)}catch(m){}},queryCommandValue:function(r){var n=this,q,p;if(n._isHidden()){return}if(q=n.queryValueCommands[r]){p=q.func.call(q.scope);if(p!==true){return p}}q=n.editorCommands.queryCommandValue(r);if(d(q)){return q}try{return this.getDoc().queryCommandValue(r)}catch(m){}},show:function(){var m=this;l.show(m.getContainer());l.hide(m.id);m.load()},hide:function(){var m=this,n=m.getDoc();if(b&&n){n.execCommand("SelectAll")}m.save();l.hide(m.getContainer());l.setStyle(m.id,"display",m.orgDisplay)},isHidden:function(){return !l.isHidden(this.id)},setProgressState:function(m,n,p){this.onSetProgressState.dispatch(this,m,n,p);return m},load:function(q){var m=this,p=m.getElement(),n;if(p){q=q||{};q.load=true;n=m.setContent(d(p.value)?p.value:p.innerHTML,q);q.element=p;if(!q.no_events){m.onLoadContent.dispatch(m,q)}q.element=p=null;return n}},save:function(r){var m=this,q=m.getElement(),n,p;if(!q||!m.initialized){return}r=r||{};r.save=true;r.element=q;n=r.content=m.getContent(r);if(!r.no_events){m.onSaveContent.dispatch(m,r)}n=r.content;if(!/TEXTAREA|INPUT/i.test(q.nodeName)){q.innerHTML=n;if(p=l.getParent(m.id,"form")){i(p.elements,function(o){if(o.name==m.id){o.value=n;return false}})}}else{q.value=n}r.element=q=null;return n},setContent:function(r,p){var o=this,n,m=o.getBody(),q;p=p||{};p.format=p.format||"html";p.set=true;p.content=r;if(!p.no_events){o.onBeforeSetContent.dispatch(o,p)}r=p.content;if(!k.isIE&&(r.length===0||/^\s+$/.test(r))){q=o.settings.forced_root_block;if(q){r="<"+q+'>
                  "}else{r='
                  '}m.innerHTML=r;o.selection.select(m,true);o.selection.collapse(true);return}if(p.format!=="raw"){r=new k.html.Serializer({},o.schema).serialize(o.parser.parse(r))}p.content=k.trim(r);o.dom.setHTML(m,p.content);if(!p.no_events){o.onSetContent.dispatch(o,p)}if(!o.settings.content_editable||document.activeElement===o.getBody()){o.selection.normalize()}return p.content},getContent:function(o){var n=this,p,m=n.getBody();o=o||{};o.format=o.format||"html";o.get=true;o.getInner=true;if(!o.no_events){n.onBeforeGetContent.dispatch(n,o)}if(o.format=="raw"){p=m.innerHTML}else{if(o.format=="text"){p=m.innerText||m.textContent}else{p=n.serializer.serialize(m,o)}}if(o.format!="text"){o.content=k.trim(p)}else{o.content=p}if(!o.no_events){n.onGetContent.dispatch(n,o)}return o.content},isDirty:function(){var m=this;return k.trim(m.startContent)!=k.trim(m.getContent({format:"raw",no_events:1}))&&!m.isNotDirty},getContainer:function(){var m=this;if(!m.container){m.container=l.get(m.editorContainer||m.id+"_parent")}return m.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return l.get(this.settings.content_element||this.id)},getWin:function(){var m=this,n;if(!m.contentWindow){n=l.get(m.id+"_ifr");if(n){m.contentWindow=n.contentWindow}}return m.contentWindow},getDoc:function(){var m=this,n;if(!m.contentDocument){n=m.getWin();if(n){m.contentDocument=n.document}}return m.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(o,n,q){var m=this,p=m.settings;if(p.urlconverter_callback){return m.execCallback("urlconverter_callback",o,q,true,n)}if(!p.convert_urls||(q&&q.nodeName=="LINK")||o.indexOf("file:")===0){return o}if(p.relative_urls){return m.documentBaseURI.toRelative(o)}o=m.documentBaseURI.toAbsolute(o,p.remove_script_host);return o},addVisual:function(q){var n=this,o=n.settings,p=n.dom,m;q=q||n.getBody();if(!d(n.hasVisual)){n.hasVisual=o.visual}i(p.select("table,a",q),function(s){var r;switch(s.nodeName){case"TABLE":m=o.visual_table_class||"mceItemTable";r=p.getAttrib(s,"border");if(!r||r=="0"){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}return;case"A":if(!p.getAttrib(s,"href",false)){r=p.getAttrib(s,"name")||s.id;m="mceItemAnchor";if(r){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}}return}});n.onVisualAid.dispatch(n,q,n.hasVisual)},remove:function(){var m=this,o=m.getContainer(),n=m.getDoc();if(!m.removed){m.removed=1;if(b&&n){n.execCommand("SelectAll")}m.save();l.setStyle(m.id,"display",m.orgDisplay);if(!m.settings.content_editable){j.unbind(m.getWin());j.unbind(m.getDoc())}j.unbind(m.getBody());j.clear(o);m.execCallback("remove_instance_callback",m);m.onRemove.dispatch(m);m.onExecCommand.listeners=[];k.remove(m);l.remove(o)}},destroy:function(n){var m=this;if(m.destroyed){return}if(a){j.unbind(m.getDoc());j.unbind(m.getWin());j.unbind(m.getBody())}if(!n){k.removeUnload(m.destroy);tinyMCE.onBeforeUnload.remove(m._beforeUnload);if(m.theme&&m.theme.destroy){m.theme.destroy()}m.controlManager.destroy();m.selection.destroy();m.dom.destroy()}if(m.formElement){m.formElement.submit=m.formElement._mceOldSubmit;m.formElement._mceOldSubmit=null}m.contentAreaContainer=m.formElement=m.container=m.settings.content_element=m.bodyElement=m.contentDocument=m.contentWindow=null;if(m.selection){m.selection=m.selection.win=m.selection.dom=m.selection.dom.doc=null}m.destroyed=1},_refreshContentEditable:function(){var n=this,m,o;if(n._isHidden()){m=n.getBody();o=m.parentNode;o.removeChild(m);o.appendChild(m);m.focus()}},_isHidden:function(){var m;if(!a){return 0}m=this.selection.getSel();return(!m||!m.rangeCount||m.rangeCount===0)}})})(tinymce);(function(a){var b=a.each;a.Editor.prototype.setupEvents=function(){var c=this,d=c.settings;b(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState","onSetAttrib"],function(e){c[e]=new a.util.Dispatcher(c)});if(d.cleanup_callback){c.onBeforeSetContent.add(function(e,f){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)});c.onPreProcess.add(function(e,f){if(f.set){e.execCallback("cleanup_callback","insert_to_editor_dom",f.node,f)}if(f.get){e.execCallback("cleanup_callback","get_from_editor_dom",f.node,f)}});c.onPostProcess.add(function(e,f){if(f.set){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)}if(f.get){f.content=e.execCallback("cleanup_callback","get_from_editor",f.content,f)}})}if(d.save_callback){c.onGetContent.add(function(e,f){if(f.save){f.content=e.execCallback("save_callback",e.id,f.content,e.getBody())}})}if(d.handle_event_callback){c.onEvent.add(function(f,g,h){if(c.execCallback("handle_event_callback",g,f,h)===false){g.preventDefault();g.stopPropagation()}})}if(d.handle_node_change_callback){c.onNodeChange.add(function(f,e,g){f.execCallback("handle_node_change_callback",f.id,g,-1,-1,true,f.selection.isCollapsed())})}if(d.save_callback){c.onSaveContent.add(function(e,g){var f=e.execCallback("save_callback",e.id,g.content,e.getBody());if(f){g.content=f}})}if(d.onchange_callback){c.onChange.add(function(f,e){f.execCallback("onchange_callback",f,e)})}};a.Editor.prototype.bindNativeEvents=function(){var l=this,f,d=l.settings,e=l.dom,h;h={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function c(i,m){var n=i.type;if(l.removed){return}if(l.onEvent.dispatch(l,i,m)!==false){l[h[i.fakeType||i.type]].dispatch(l,i,m)}}function j(i){l.focus(true)}function k(i,m){if(m.keyCode!=65||!a.VK.metaKeyPressed(m)){l.selection.normalize()}l.nodeChanged()}b(h,function(m,n){var i=d.content_editable?l.getBody():l.getDoc();switch(n){case"contextmenu":e.bind(i,n,c);break;case"paste":e.bind(l.getBody(),n,c);break;case"submit":case"reset":e.bind(l.getElement().form||a.DOM.getParent(l.id,"form"),n,c);break;default:e.bind(i,n,c)}});e.bind(d.content_editable?l.getBody():(a.isGecko?l.getDoc():l.getWin()),"focus",function(i){l.focus(true)});if(d.content_editable&&a.isOpera){e.bind(l.getBody(),"click",j);e.bind(l.getBody(),"keydown",j)}l.onMouseUp.add(k);l.onKeyUp.add(function(i,n){var m=n.keyCode;if((m>=33&&m<=36)||(m>=37&&m<=40)||m==13||m==45||m==46||m==8||(a.isMac&&(m==91||m==93))||n.ctrlKey){k(i,n)}});l.onReset.add(function(){l.setContent(l.startContent,{format:"raw"})});function g(m,i){if(m.altKey||m.ctrlKey||m.metaKey){b(l.shortcuts,function(n){var o=a.isMac?m.metaKey:m.ctrlKey;if(n.ctrl!=o||n.alt!=m.altKey||n.shift!=m.shiftKey){return}if(m.keyCode==n.keyCode||(m.charCode&&m.charCode==n.charCode)){m.preventDefault();if(i){n.func.call(n.scope)}return true}})}}l.onKeyUp.add(function(i,m){g(m)});l.onKeyPress.add(function(i,m){g(m)});l.onKeyDown.add(function(i,m){g(m,true)});if(a.isOpera){l.onClick.add(function(i,m){m.preventDefault()})}}})(tinymce);(function(d){var e=d.each,b,a=true,c=false;d.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return c}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return c}function u(v,x){x=x||"exec";e(v,function(z,y){e(y.toLowerCase().split(","),function(A){j[x][A]=z})})}d.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===b){x=c}if(v===b){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:b)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(d.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(c)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);e("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=d.explode(k.font_size_style_values);v=d.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return c}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new d.html.Serializer({},n.schema);v='\uFEFF';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=p.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(//i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.yL.x+L.w||C.x")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();if(p.getRng().setStart){v.setStart(x,0);v.setEnd(x,x.childNodes.length);p.setRng(v)}else{f("SelectAll")}}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[m.getParent(p.getNode(),m.isBlock)]:p.getSelectedBlocks();var y=d.map(v,function(A){return !!q.matchNode(A,x)});return d.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(x){var v=m.getParent(p.getNode(),"ul,ol");return v&&(x==="insertunorderedlist"&&v.tagName==="UL"||x==="insertorderedlist"&&v.tagName==="OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(h){var l,i=0,e=[],g,k,j,f;function c(){return b.trim(h.getContent({format:"raw",no_events:1}).replace(/]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,""))}function d(){l.typing=false;l.add()}onBeforeAdd=new a(l);k=new a(l);j=new a(l);f=new a(l);k.add(function(m,n){if(m.hasUndo()){return h.onChange.dispatch(h,n,m)}});j.add(function(m,n){return h.onUndo.dispatch(h,n,m)});f.add(function(m,n){return h.onRedo.dispatch(h,n,m)});h.onInit.add(function(){l.add()});h.onBeforeExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.beforeChange()}});h.onExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.add()}});h.onSaveContent.add(d);h.dom.bind(h.dom.getRoot(),"dragend",d);h.dom.bind(h.getBody(),"focusout",function(m){if(!h.removed&&l.typing){d()}});h.onKeyUp.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45||n==13||o.ctrlKey){d()}});h.onKeyDown.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45){if(l.typing){d()}return}if((n<16||n>20)&&n!=224&&n!=91&&!l.typing){l.beforeChange();l.typing=true;l.add()}});h.onMouseDown.add(function(m,n){if(l.typing){d()}});h.addShortcut("ctrl+z","undo_desc","Undo");h.addShortcut("ctrl+y","redo_desc","Redo");l={data:e,typing:false,onBeforeAdd:onBeforeAdd,onAdd:k,onUndo:j,onRedo:f,beforeChange:function(){g=h.selection.getBookmark(2,true)},add:function(p){var m,n=h.settings,o;p=p||{};p.content=c();l.onBeforeAdd.dispatch(l,p);o=e[i];if(o&&o.content==p.content){return null}if(e[i]){e[i].beforeBookmark=g}if(n.custom_undo_redo_levels){if(e.length>n.custom_undo_redo_levels){for(m=0;m0){n=e[--i];h.setContent(n.content,{format:"raw"});h.selection.moveToBookmark(n.beforeBookmark);l.onUndo.dispatch(l,n)}return n},redo:function(){var m;if(i0||this.typing},hasRedo:function(){return i0){g.moveEnd("character",q)}g.select()}catch(n){}}}c.nodeChanged()}}if(b.forced_root_block){c.onKeyUp.add(f);c.onNodeChange.add(f)}};(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(j){var o,k,g,h=this,m=h.editor,n,f;if(!h.controlFactories){h.controlFactories=[];d(m.plugins,function(i){if(i.createControl){h.controlFactories.push(i)}})}n=h.controlFactories;for(k=0,g=n.length;k1||ag==ay||ag.tagName=="BR"){return ag}}}var aq=aa.selection.getRng();var av=aq.startContainer;var ap=aq.endContainer;if(av!=ap&&aq.endOffset===0){var au=ar(av,ap);var at=au.nodeType==3?au.length:au.childNodes.length;aq.setEnd(au,at)}return aq}function ad(at,ay,aw,av,aq){var ap=[],ar=-1,ax,aA=-1,au=-1,az;T(at.childNodes,function(aC,aB){if(aC.nodeName==="UL"||aC.nodeName==="OL"){ar=aB;ax=aC;return false}});T(at.childNodes,function(aC,aB){if(aC.nodeName==="SPAN"&&c.getAttrib(aC,"data-mce-type")=="bookmark"){if(aC.id==ay.id+"_start"){aA=aB}else{if(aC.id==ay.id+"_end"){au=aB}}}});if(ar<=0||(aAar)){T(a.grep(at.childNodes),aq);return 0}else{az=c.clone(aw,X);T(a.grep(at.childNodes),function(aC,aB){if((aAar&&aB>ar)){ap.push(aC);aC.parentNode.removeChild(aC)}});if(aAar){at.insertBefore(az,ax.nextSibling)}}av.push(az);T(ap,function(aB){az.appendChild(aB)});return az}}function an(aq,at,aw){var ap=[],av,ar,au=true;av=am.inline||am.block;ar=c.create(av);ab(ar);N.walk(aq,function(ax){var ay;function az(aA){var aF,aD,aB,aC,aE;aE=au;aF=aA.nodeName.toLowerCase();aD=aA.parentNode.nodeName.toLowerCase();if(aA.nodeType===1&&x(aA)){aE=au;au=x(aA)==="true";aC=true}if(g(aF,"br")){ay=0;if(am.block){c.remove(aA)}return}if(am.wrapper&&y(aA,ae,al)){ay=0;return}if(au&&!aC&&am.block&&!am.wrapper&&I(aF)){aA=c.rename(aA,av);ab(aA);ap.push(aA);ay=0;return}if(am.selector){T(ah,function(aG){if("collapsed" in aG&&aG.collapsed!==ai){return}if(c.is(aA,aG.selector)&&!b(aA)){ab(aA,aG);aB=true}});if(!am.inline||aB){ay=0;return}}if(au&&!aC&&d(av,aF)&&d(aD,av)&&!(!aw&&aA.nodeType===3&&aA.nodeValue.length===1&&aA.nodeValue.charCodeAt(0)===65279)&&!b(aA)&&(!am.inline||!H(aA))){if(!ay){ay=c.clone(ar,X);aA.parentNode.insertBefore(ay,aA);ap.push(ay)}ay.appendChild(aA)}else{if(aF=="li"&&at){ay=ad(aA,at,ar,ap,az)}else{ay=0;T(a.grep(aA.childNodes),az);if(aC){au=aE}ay=0}}}T(ax,az)});if(am.wrap_links===false){T(ap,function(ax){function ay(aC){var aB,aA,az;if(aC.nodeName==="A"){aA=c.clone(ar,X);ap.push(aA);az=a.grep(aC.childNodes);for(aB=0;aB1||!H(az))&&ax===0){c.remove(az,1);return}if(am.inline||am.wrapper){if(!am.exact&&ax===1){az=ay(az)}T(ah,function(aB){T(c.select(aB.inline,az),function(aD){var aC;if(aB.wrap_links===false){aC=aD.parentNode;do{if(aC.nodeName==="A"){return}}while(aC=aC.parentNode)}Z(aB,al,aD,aB.exact?aD:null)})});if(y(az.parentNode,ae,al)){c.remove(az,1);az=0;return C}if(am.merge_with_parents){c.getParent(az.parentNode,function(aB){if(y(aB,ae,al)){c.remove(az,1);az=0;return C}})}if(az&&am.merge_siblings!==false){az=u(E(az),az);az=u(az,E(az,C))}}})}if(am){if(ag){if(ag.nodeType){ac=c.createRng();ac.setStartBefore(ag);ac.setEndAfter(ag);an(p(ac,ah),null,true)}else{an(ag,null,true)}}else{if(!ai||!am.inline||c.select("td.mceSelected,th.mceSelected").length){var ao=aa.selection.getNode();if(!m&&ah[0].defaultBlock&&!c.getParent(ao,c.isBlock)){Y(ah[0].defaultBlock)}aa.selection.setRng(af());ak=r.getBookmark();an(p(r.getRng(C),ah),ak);if(am.styles&&(am.styles.color||am.styles.textDecoration)){a.walk(ao,L,"childNodes");L(ao)}r.moveToBookmark(ak);R(r.getRng(C));aa.nodeChanged()}else{U("apply",ae,al)}}}}function B(ad,am,af){var ag=V(ad),ao=ag[0],ak,aj,ac,al=true;function ae(av){var au,at,ar,aq,ax,aw;if(av.nodeType===3){return}if(av.nodeType===1&&x(av)){ax=al;al=x(av)==="true";aw=true}au=a.grep(av.childNodes);if(al&&!aw){for(at=0,ar=ag.length;at=0;ac--){ab=ah[ac].selector;if(!ab){return C}for(ag=ad.length-1;ag>=0;ag--){if(c.is(ad[ag],ab)){return C}}}}return X}function J(ab,ae,ac){var ad;if(!P){P={};ad={};aa.onNodeChange.addToTop(function(ag,af,ai){var ah=n(ai),aj={};T(P,function(ak,al){T(ah,function(am){if(y(am,al,{},ak.similar)){if(!ad[al]){T(ak,function(an){an(true,{node:am,format:al,parents:ah})});ad[al]=ak}aj[al]=ak;return false}})});T(ad,function(ak,al){if(!aj[al]){delete ad[al];T(ak,function(am){am(false,{node:ai,format:al,parents:ah})})}})})}T(ab.split(","),function(af){if(!P[af]){P[af]=[];P[af].similar=ac}P[af].push(ae)});return this}a.extend(this,{get:V,register:l,apply:Y,remove:B,toggle:F,match:k,matchAll:v,matchNode:y,canApply:z,formatChanged:J});j();W();function h(ab,ac){if(g(ab,ac.inline)){return C}if(g(ab,ac.block)){return C}if(ac.selector){return c.is(ab,ac.selector)}}function g(ac,ab){ac=ac||"";ab=ab||"";ac=""+(ac.nodeName||ac);ab=""+(ab.nodeName||ab);return ac.toLowerCase()==ab.toLowerCase()}function O(ac,ab){var ad=c.getStyle(ac,ab);if(ab=="color"||ab=="backgroundColor"){ad=c.toHex(ad)}if(ab=="fontWeight"&&ad==700){ad="bold"}return""+ad}function q(ab,ac){if(typeof(ab)!="string"){ab=ab(ac)}else{if(ac){ab=ab.replace(/%(\w+)/g,function(ae,ad){return ac[ad]||ae})}}return ab}function f(ab){return ab&&ab.nodeType===3&&/^([\t \r\n]+|)$/.test(ab.nodeValue)}function S(ad,ac,ab){var ae=c.create(ac,ab);ad.parentNode.insertBefore(ae,ad);ae.appendChild(ad);return ae}function p(ab,am,ae){var ap,an,ah,al,ad=ab.startContainer,ai=ab.startOffset,ar=ab.endContainer,ak=ab.endOffset;function ao(aA){var au,ax,az,aw,av,at;au=ax=aA?ad:ar;av=aA?"previousSibling":"nextSibling";at=c.getRoot();function ay(aB){return aB.nodeName=="BR"&&aB.getAttribute("data-mce-bogus")&&!aB.nextSibling}if(au.nodeType==3&&!f(au)){if(aA?ai>0:akan?an:ai];if(ad.nodeType==3){ai=0}}if(ar.nodeType==1&&ar.hasChildNodes()){an=ar.childNodes.length-1;ar=ar.childNodes[ak>an?an:ak-1];if(ar.nodeType==3){ak=ar.nodeValue.length}}function aq(au){var at=au;while(at){if(at.nodeType===1&&x(at)){return x(at)==="false"?at:au}at=at.parentNode}return au}function aj(au,ay,aA){var ax,av,az,at;function aw(aC,aE){var aF,aB,aD=aC.nodeValue;if(typeof(aE)=="undefined"){aE=aA?aD.length:0}if(aA){aF=aD.lastIndexOf(" ",aE);aB=aD.lastIndexOf("\u00a0",aE);aF=aF>aB?aF:aB;if(aF!==-1&&!ae){aF++}}else{aF=aD.indexOf(" ",aE);aB=aD.indexOf("\u00a0",aE);aF=aF!==-1&&(aB===-1||aF0&&ah.node.nodeType===3&&ah.node.nodeValue.charAt(ah.offset-1)===" "){if(ah.offset>1){ar=ah.node;ar.splitText(ah.offset-1)}}}}if(am[0].inline||am[0].block_expand){if(!am[0].inline||(ad.nodeType!=3||ai===0)){ad=ao(true)}if(!am[0].inline||(ar.nodeType!=3||ak===ar.nodeValue.length)){ar=ao()}}if(am[0].selector&&am[0].expand!==X&&!am[0].inline){ad=af(ad,"previousSibling");ar=af(ar,"nextSibling")}if(am[0].block||am[0].selector){ad=ac(ad,"previousSibling");ar=ac(ar,"nextSibling");if(am[0].block){if(!H(ad)){ad=ao(true)}if(!H(ar)){ar=ao()}}}if(ad.nodeType==1){ai=s(ad);ad=ad.parentNode}if(ar.nodeType==1){ak=s(ar)+1;ar=ar.parentNode}return{startContainer:ad,startOffset:ai,endContainer:ar,endOffset:ak}}function Z(ah,ag,ae,ab){var ad,ac,af;if(!h(ae,ah)){return X}if(ah.remove!="all"){T(ah.styles,function(aj,ai){aj=q(aj,ag);if(typeof(ai)==="number"){ai=aj;ab=0}if(!ab||g(O(ab,ai),aj)){c.setStyle(ae,ai,"")}af=1});if(af&&c.getAttrib(ae,"style")==""){ae.removeAttribute("style");ae.removeAttribute("data-mce-style")}T(ah.attributes,function(ak,ai){var aj;ak=q(ak,ag);if(typeof(ai)==="number"){ai=ak;ab=0}if(!ab||g(c.getAttrib(ab,ai),ak)){if(ai=="class"){ak=c.getAttrib(ae,ai);if(ak){aj="";T(ak.split(/\s+/),function(al){if(/mce\w+/.test(al)){aj+=(aj?" ":"")+al}});if(aj){c.setAttrib(ae,ai,aj);return}}}if(ai=="class"){ae.removeAttribute("className")}if(e.test(ai)){ae.removeAttribute("data-mce-"+ai)}ae.removeAttribute(ai)}});T(ah.classes,function(ai){ai=q(ai,ag);if(!ab||c.hasClass(ab,ai)){c.removeClass(ae,ai)}});ac=c.getAttribs(ae);for(ad=0;adad?ad:af]}if(ab.nodeType===3&&ag&&af>=ab.nodeValue.length){ab=new t(ab,aa.getBody()).next()||ab}if(ab.nodeType===3&&!ag&&af===0){ab=new t(ab,aa.getBody()).prev()||ab}return ab}function U(ak,ab,ai){var al="_mce_caret",ac=aa.settings.caret_debug;function ad(ap){var ao=c.create("span",{id:al,"data-mce-bogus":true,style:ac?"color:red":""});if(ap){ao.appendChild(aa.getDoc().createTextNode(G))}return ao}function aj(ap,ao){while(ap){if((ap.nodeType===3&&ap.nodeValue!==G)||ap.childNodes.length>1){return false}if(ao&&ap.nodeType===1){ao.push(ap)}ap=ap.firstChild}return true}function ag(ao){while(ao){if(ao.id===al){return ao}ao=ao.parentNode}}function af(ao){var ap;if(ao){ap=new t(ao,ao);for(ao=ap.current();ao;ao=ap.next()){if(ao.nodeType===3){return ao}}}}function ae(aq,ap){var ar,ao;if(!aq){aq=ag(r.getStart());if(!aq){while(aq=c.get(al)){ae(aq,false)}}}else{ao=r.getRng(true);if(aj(aq)){if(ap!==false){ao.setStartBefore(aq);ao.setEndBefore(aq)}c.remove(aq)}else{ar=af(aq);if(ar.nodeValue.charAt(0)===G){ar=ar.deleteData(0,1)}c.remove(aq,1)}r.setRng(ao)}}function ah(){var aq,ao,av,au,ar,ap,at;aq=r.getRng(true);au=aq.startOffset;ap=aq.startContainer;at=ap.nodeValue;ao=ag(r.getStart());if(ao){av=af(ao)}if(at&&au>0&&au=0;au--){aq.appendChild(c.clone(ay[au],false));aq=aq.firstChild}aq.appendChild(c.doc.createTextNode(G));aq=aq.firstChild;var ar=c.getParent(az,I);if(ar&&c.isEmpty(ar)){az.parentNode.replaceChild(ax,az)}else{c.insertAfter(ax,az)}r.setCursorLocation(aq,1);if(c.isEmpty(az)){c.remove(az)}}}function an(){var ap,ao,aq;ao=ag(r.getStart());if(ao&&!c.isEmpty(ao)){a.walk(ao,function(ar){if(ar.nodeType==1&&ar.id!==al&&!c.isEmpty(ar)){c.setAttrib(ar,"data-mce-bogus",null)}},"childNodes")}}if(!self._hasCaretEvents){aa.onBeforeGetContent.addToTop(function(){var ao=[],ap;if(aj(ag(r.getStart()),ao)){ap=ao.length;while(ap--){c.setAttrib(ao[ap],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(ao){aa[ao].addToTop(function(){ae();an()})});aa.onKeyDown.addToTop(function(ao,aq){var ap=aq.keyCode;if(ap==8||ap==37||ap==39){ae(ag(r.getStart()))}an()});r.onSetContent.add(an);self._hasCaretEvents=true}if(ak=="apply"){ah()}else{am()}}function R(ac){var ab=ac.startContainer,ai=ac.startOffset,ae,ah,ag,ad,af;if(ab.nodeType==3&&ai>=ab.nodeValue.length){ai=s(ab);ab=ab.parentNode;ae=true}if(ab.nodeType==1){ad=ab.childNodes;ab=ad[Math.min(ai,ad.length-1)];ah=new t(ab,c.getParent(ab,c.isBlock));if(ai>ad.length-1||ae){ah.next()}for(ag=ah.current();ag;ag=ah.next()){if(ag.nodeType==3&&!f(ag)){af=c.create("a",null,G);ag.parentNode.insertBefore(af,ag);ac.setStart(ag,0);r.setRng(ac);c.remove(af);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}if(c.inline_styles){h=e.explode(c.font_size_legacy_values);d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size,10)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});(function(b){var a=b.dom.TreeWalker;b.EnterKey=function(f){var i=f.dom,e=f.selection,d=f.settings,h=f.undoManager,c=f.schema.getNonEmptyElements();function g(B){var v=e.getRng(true),G,j,A,u,p,M,C,o,k,n,t,J,x,D;function E(N){return N&&i.isBlock(N)&&!/^(TD|TH|CAPTION|FORM)$/.test(N.nodeName)&&!/^(fixed|absolute)/i.test(N.style.position)&&i.getContentEditable(N)!=="true"}function F(O){var N;if(b.isIE&&!b.isIE11&&i.isBlock(O)){N=e.getRng();O.appendChild(i.create("span",null,"\u00a0"));e.select(O);O.lastChild.outerHTML="";e.setRng(N)}}function z(P){var O=P,Q=[],N;while(O=O.firstChild){if(i.isBlock(O)){return}if(O.nodeType==1&&!c[O.nodeName.toLowerCase()]){Q.push(O)}}N=Q.length;while(N--){O=Q[N];if(!O.hasChildNodes()||(O.firstChild==O.lastChild&&O.firstChild.nodeValue==="")){i.remove(O)}else{if(O.nodeName=="A"&&(O.innerText||O.textContent)===" "){i.remove(O)}}}}function m(O){var T,R,N,U,S,Q=O,P;N=i.createRng();if(O.hasChildNodes()){T=new a(O,O);while(R=T.current()){if(R.nodeType==3){N.setStart(R,0);N.setEnd(R,0);break}if(c[R.nodeName.toLowerCase()]){N.setStartBefore(R);N.setEndBefore(R);break}Q=R;R=T.next()}if(!R){N.setStart(Q,0);N.setEnd(Q,0)}}else{if(O.nodeName=="BR"){if(O.nextSibling&&i.isBlock(O.nextSibling)){if(!M||M<9){P=i.create("br");O.parentNode.insertBefore(P,O)}N.setStartBefore(O);N.setEndBefore(O)}else{N.setStartAfter(O);N.setEndAfter(O)}}else{N.setStart(O,0);N.setEnd(O,0)}}e.setRng(N);i.remove(P);S=i.getViewPort(f.getWin());U=i.getPos(O).y;if(US.y+S.h){f.getWin().scrollTo(0,U'}return R}function q(Q){var P,O,N;if(A.nodeType==3&&(Q?u>0:u0){return true}}}function L(){var P,O,N;if(A&&A.nodeType==3&&u>=A.nodeValue.length){if((!b.isIE||b.isIE11)&&!y()){P=i.create("br");v.insertNode(P);v.setStartAfter(P);v.setEndAfter(P);O=true}}P=i.create("br");v.insertNode(P);if((b.isIE&&!b.isIE11)&&t=="PRE"&&(!M||M<8)){P.parentNode.insertBefore(i.doc.createTextNode("\r"),P)}N=i.create("span",{}," ");P.parentNode.insertBefore(N,P);e.scrollIntoView(N);i.remove(N);if(!O){v.setStartAfter(P);v.setEndAfter(P)}else{v.setStartBefore(P);v.setEndBefore(P)}e.setRng(v);h.add()}function s(N){do{if(N.nodeType===3){N.nodeValue=N.nodeValue.replace(/^[\r\n]+/,"")}N=N.firstChild}while(N)}function K(P){var N=i.getRoot(),O,Q;O=P;while(O!==N&&i.getContentEditable(O)!=="false"){if(i.getContentEditable(O)==="true"){Q=O}O=O.parentNode}return O!==N?Q:N}function I(O){var N;if(!b.isIE||b.isIE11){O.normalize();N=O.lastChild;if(!N||(/^(left|right)$/gi.test(i.getStyle(N,"float",true)))){i.add(O,"br")}}}if(!v.collapsed){f.execCommand("Delete");return}if(B.isDefaultPrevented()){return}A=v.startContainer;u=v.startOffset;x=(d.force_p_newlines?"p":"")||d.forced_root_block;x=x?x.toUpperCase():"";M=i.doc.documentMode;C=B.shiftKey;if(A.nodeType==1&&A.hasChildNodes()){D=u>A.childNodes.length-1;A=A.childNodes[Math.min(u,A.childNodes.length-1)]||A;if(D&&A.nodeType==3){u=A.nodeValue.length}else{u=0}}j=K(A);if(!j){return}h.beforeChange();if(!i.isBlock(j)&&j!=i.getRoot()){if(!x||C){L()}return}if((x&&!C)||(!x&&C)){A=l(A,u)}p=i.getParent(A,i.isBlock);n=p?i.getParent(p.parentNode,i.isBlock):null;t=p?p.nodeName.toUpperCase():"";J=n?n.nodeName.toUpperCase():"";if(J=="LI"&&!B.ctrlKey){p=n;t=J}if(t=="LI"){if(!x&&C){L();return}if(i.isEmpty(p)){if(/^(UL|OL|LI)$/.test(n.parentNode.nodeName)){return false}H();return}}if(t=="PRE"&&d.br_in_pre!==false){if(!C){L();return}}else{if((!x&&!C&&t!="LI")||(x&&C)){L();return}}x=x||"P";if(q()){if(/^(H[1-6]|PRE)$/.test(t)&&J!="HGROUP"){o=r(x)}else{o=r()}if(d.end_container_on_empty_block&&E(n)&&i.isEmpty(p)){o=i.split(n,p)}else{i.insertAfter(o,p)}m(o)}else{if(q(true)){o=p.parentNode.insertBefore(r(),p);F(o)}else{G=v.cloneRange();G.setEndAfter(p);k=G.extractContents();s(k);o=k.firstChild;i.insertAfter(k,p);z(o);I(p);m(o)}}i.setAttrib(o,"id","");h.add()}f.onKeyDown.add(function(k,j){if(j.keyCode==13){if(g(j)!==false){j.preventDefault()}}})}})(tinymce); \ No newline at end of file diff --git a/src/wp-includes/js/tinymce/tiny_mce_popup.js b/src/wp-includes/js/tinymce/tiny_mce_popup.js new file mode 100644 index 0000000..0808f8f --- /dev/null +++ b/src/wp-includes/js/tinymce/tiny_mce_popup.js @@ -0,0 +1,5 @@ + +// Uncomment and change this document.domain value if you are loading the script cross subdomains +// document.domain = 'moxiecode.com'; + +var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document,{ownEvents:true,proxy:tinyMCEPopup._eventProxy});b.dom.bind(window,"ready",b._onDOMLoaded,b);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},10)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false&&b.editor.settings.language_load!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write(' + + + + + + + + + +
                    +
                  • +
                  • +
                  • +
                  • +
                  + +
                  + +
                  +

                  +

                  Rich editing, also called WYSIWYG for What You See Is What You Get, means your text is formatted as you type. The rich editor creates HTML code behind the scenes while you concentrate on writing. Font styles, links and images all appear approximately as they will on the internet.'); ?>

                  +

                  +

                  +

                  +
                  + + + + + + +
                  + +
                  +
                  + +
                  +
                  + + + diff --git a/src/wp-includes/js/tinymce/wp-tinymce-schema.js b/src/wp-includes/js/tinymce/wp-tinymce-schema.js new file mode 100644 index 0000000..503a563 --- /dev/null +++ b/src/wp-includes/js/tinymce/wp-tinymce-schema.js @@ -0,0 +1,940 @@ +/** + * TinyMCE Schema.js + * + * Duck-punched by WordPress core to support a sane schema superset. + * + * Copyright, Moxiecode Systems AB + * Released under LGPL + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +(function(tinymce) { + var mapCache = {}, makeMap = tinymce.makeMap, each = tinymce.each; + + function split(str, delim) { + return str.split(delim || ','); + }; + + /** + * Unpacks the specified lookup and string data it will also parse it into an object + * map with sub object for it's children. This will later also include the attributes. + */ + function unpack(lookup, data) { + var key, elements = {}; + + function replace(value) { + return value.replace(/[A-Z]+/g, function(key) { + return replace(lookup[key]); + }); + }; + + // Unpack lookup + for (key in lookup) { + if (lookup.hasOwnProperty(key)) + lookup[key] = replace(lookup[key]); + } + + // Unpack and parse data into object map + replace(data).replace(/#/g, '#text').replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g, function(str, name, attributes, children) { + attributes = split(attributes, '|'); + + elements[name] = { + attributes : makeMap(attributes), + attributesOrder : attributes, + children : makeMap(children, '|', {'#comment' : {}}) + } + }); + + return elements; + }; + + /** + * Returns the HTML5 schema and caches it in the mapCache. + */ + function getHTML5() { + var html5 = mapCache.html5; + + if (!html5) { + html5 = mapCache.html5 = unpack({ + A : 'accesskey|class|contextmenu|dir|draggable|dropzone|hidden|id|inert|itemid|itemprop|itemref|itemscope|itemtype|lang|spellcheck|style|tabindex|title|translate|item|role|subject|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup', + B : '#|a|abbr|area|audio|b|bdi|bdo|br|button|canvas|cite|code|command|data|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|math|meta|meter|noscript|object|output|progress|q|ruby|s|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|u|var|video|wbr', + C : '#|a|abbr|area|address|article|aside|audio|b|bdi|bdo|blockquote|br|button|canvas|cite|code|command|data|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|math|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|s|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|u|ul|var|video|wbr' + }, 'html[A|manifest][body|head]' + + 'head[A][base|command|link|meta|noscript|script|style|title]' + + 'title[A][#]' + + 'base[A|href|target][]' + + 'link[A|href|rel|media|type|sizes|crossorigin|hreflang][]' + + 'meta[A|http-equiv|name|content|charset][]' + + 'style[A|type|media|scoped][#]' + + 'script[A|charset|type|src|defer|async|crossorigin][#]' + + 'noscript[A][C]' + + 'body[A|onafterprint|onbeforeprint|onbeforeunload|onblur|onerror|onfocus|onfullscreenchange|onfullscreenerror|onhashchange|onload|onmessage|onoffline|ononline|onpagehide|onpageshow|onpopstate|onresize|onscroll|onstorage|onunload][C]' + + 'section[A][C]' + + 'nav[A][C]' + + 'article[A][C]' + + 'aside[A][C]' + + 'h1[A][B]' + + 'h2[A][B]' + + 'h3[A][B]' + + 'h4[A][B]' + + 'h5[A][B]' + + 'h6[A][B]' + + 'hgroup[A][h1|h2|h3|h4|h5|h6]' + + 'header[A][C]' + + 'footer[A][C]' + + 'address[A][C]' + + 'p[A][B]' + + 'br[A][]' + + 'pre[A][B]' + + 'dialog[A|open][C|dd|dt]' + + 'blockquote[A|cite][C]' + + 'ol[A|start|reversed][li]' + + 'ul[A][li]' + + 'li[A|value][C]' + + 'dl[A][dd|dt]' + + 'dt[A][C|B]' + + 'dd[A][C]' + + 'a[A|href|target|download|ping|rel|media|type][B]' + + 'em[A][B]' + + 'strong[A][B]' + + 'small[A][B]' + + 's[A][B]' + + 'cite[A][B]' + + 'q[A|cite][B]' + + 'dfn[A][B]' + + 'abbr[A][B]' + + 'code[A][B]' + + 'var[A][B]' + + 'samp[A][B]' + + 'kbd[A][B]' + + 'sub[A][B]' + + 'sup[A][B]' + + 'i[A][B]' + + 'b[A][B]' + + 'u[A][B]' + + 'mark[A][B]' + + 'progress[A|value|max][B]' + + 'meter[A|value|min|max|low|high|optimum][B]' + + 'time[A|datetime][B]' + + 'ruby[A][B|rt|rp]' + + 'rt[A][B]' + + 'rp[A][B]' + + 'bdi[A][B]' + + 'bdo[A][B]' + + 'span[A][B]' + + 'ins[A|cite|datetime][C|B]' + + 'del[A|cite|datetime][C|B]' + + 'figure[A][C|legend|figcaption]' + + 'figcaption[A][C]' + + 'img[A|alt|src|srcset|crossorigin|usemap|ismap|width|height][]' + + 'iframe[A|name|src|srcdoc|height|width|sandbox|seamless|allowfullscreen][C|B]' + + 'embed[A|src|height|width|type][]' + + 'object[A|data|type|typemustmatch|name|usemap|form|width|height][C|B|param]' + + 'param[A|name|value][]' + + 'summary[A][B]' + + 'details[A|open][C|legend|summary]' + + 'command[A|type|label|icon|disabled|checked|radiogroup|command][]' + + 'menu[A|type|label][C|li]' + + 'legend[A][C|B]' + + 'div[A][C]' + + 'source[A|src|type|media][]' + + 'track[A|kind|src|srclang|label|default][]' + + 'audio[A|src|autobuffer|autoplay|loop|controls|crossorigin|preload|mediagroup|muted][C|source|track]' + + 'video[A|src|autobuffer|autoplay|loop|controls|width|height|poster|crossorigin|preload|mediagroup|muted][C|source|track]' + + 'hr[A][]' + + 'form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]' + + 'fieldset[A|disabled|form|name][C|legend]' + + 'label[A|form|for][B]' + + 'input[A|type|accept|alt|autocomplete|autofocus|checked|dirname|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|inputmode|list|max|maxlength|min|multiple|name|pattern|placeholder|readonly|required|size|src|step|value|width|files][]' + + 'button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|type|value][B]' + + 'select[A|autofocus|disabled|form|multiple|name|required|size][option|optgroup]' + + 'data[A|value][B]' + + 'datalist[A][B|option]' + + 'optgroup[A|disabled|label][option]' + + 'option[A|disabled|selected|label|value][#]' + + 'textarea[A|autocomplete|autofocus|cols|dirname|disabled|form|inputmode|maxlength|name|placeholder|readonly|required|rows|wrap][#]' + + 'keygen[A|autofocus|challenge|disabled|form|keytype|name][]' + + 'output[A|for|form|name][B]' + + 'canvas[A|width|height][a|button|input]' + + 'map[A|name][C|B]' + + 'area[A|alt|coords|shape|href|target|download|ping|rel|media|hreflang|type][]' + + 'math[A][]' + + 'svg[A][]' + + 'table[A][caption|colgroup|thead|tfoot|tbody|tr]' + + 'caption[A][C]' + + 'colgroup[A|span][col]' + + 'col[A|span][]' + + 'thead[A][tr]' + + 'tfoot[A][tr]' + + 'tbody[A][tr]' + + 'tr[A][th|td]' + + 'th[A|headers|rowspan|colspan|scope][C]' + + 'td[A|headers|rowspan|colspan][C]' + + 'wbr[A][]' + ); + } + + return html5; + }; + + /** + * Returns the HTML4 schema and caches it in the mapCache. + */ + function getHTML4() { + var html4 = mapCache.html4; + + if (!html4) { + // This is the XHTML 1.0 transitional elements with it's attributes and children packed to reduce it's size + html4 = mapCache.html4 = unpack({ + Z : 'H|K|N|O|P', + Y : 'X|form|R|Q', + ZG : 'E|span|width|align|char|charoff|valign', + X : 'p|T|div|U|W|isindex|fieldset|table', + ZF : 'E|align|char|charoff|valign', + W : 'pre|hr|blockquote|address|center|noframes', + ZE : 'abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height', + ZD : '[E][S]', + U : 'ul|ol|dl|menu|dir', + ZC : 'p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q', + T : 'h1|h2|h3|h4|h5|h6', + ZB : 'X|S|Q', + S : 'R|P', + ZA : 'a|G|J|M|O|P', + R : 'a|H|K|N|O', + Q : 'noscript|P', + P : 'ins|del|script', + O : 'input|select|textarea|label|button', + N : 'M|L', + M : 'em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym', + L : 'sub|sup', + K : 'J|I', + J : 'tt|i|b|u|s|strike', + I : 'big|small|font|basefont', + H : 'G|F', + G : 'br|span|bdo', + F : 'object|applet|img|map|iframe', + E : 'A|B|C', + D : 'accesskey|tabindex|onfocus|onblur', + C : 'onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup', + B : 'lang|xml:lang|dir', + A : 'id|class|style|title' + }, 'script[id|charset|type|language|src|defer|xml:space][]' + + 'style[B|id|type|media|title|xml:space][]' + + 'object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]' + + 'param[id|name|value|valuetype|type][]' + + 'p[E|align][#|S]' + + 'a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]' + + 'br[A|clear][]' + + 'span[E][#|S]' + + 'bdo[A|C|B][#|S]' + + 'applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]' + + 'h1[E|align][#|S]' + + 'img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]' + + 'map[B|C|A|name][X|form|Q|area]' + + 'h2[E|align][#|S]' + + 'iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]' + + 'h3[E|align][#|S]' + + 'tt[E][#|S]' + + 'i[E][#|S]' + + 'b[E][#|S]' + + 'u[E][#|S]' + + 's[E][#|S]' + + 'strike[E][#|S]' + + 'big[E][#|S]' + + 'small[E][#|S]' + + 'font[A|B|size|color|face][#|S]' + + 'basefont[id|size|color|face][]' + + 'em[E][#|S]' + + 'strong[E][#|S]' + + 'dfn[E][#|S]' + + 'code[E][#|S]' + + 'q[E|cite][#|S]' + + 'samp[E][#|S]' + + 'kbd[E][#|S]' + + 'var[E][#|S]' + + 'cite[E][#|S]' + + 'abbr[E][#|S]' + + 'acronym[E][#|S]' + + 'sub[E][#|S]' + + 'sup[E][#|S]' + + 'input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]' + + 'select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]' + + 'optgroup[E|disabled|label][option]' + + 'option[E|selected|disabled|label|value][]' + + 'textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]' + + 'label[E|for|accesskey|onfocus|onblur][#|S]' + + 'button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]' + + 'h4[E|align][#|S]' + + 'ins[E|cite|datetime][#|Y]' + + 'h5[E|align][#|S]' + + 'del[E|cite|datetime][#|Y]' + + 'h6[E|align][#|S]' + + 'div[E|align][#|Y]' + + 'ul[E|type|compact][li]' + + 'li[E|type|value][#|Y]' + + 'ol[E|type|compact|start][li]' + + 'dl[E|compact][dt|dd]' + + 'dt[E][#|S]' + + 'dd[E][#|Y]' + + 'menu[E|compact][li]' + + 'dir[E|compact][li]' + + 'pre[E|width|xml:space][#|ZA]' + + 'hr[E|align|noshade|size|width][]' + + 'blockquote[E|cite][#|Y]' + + 'address[E][#|S|p]' + + 'center[E][#|Y]' + + 'noframes[E][#|Y]' + + 'isindex[A|B|prompt][]' + + 'fieldset[E][#|legend|Y]' + + 'legend[E|accesskey|align][#|S]' + + 'table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]' + + 'caption[E|align][#|S]' + + 'col[ZG][]' + + 'colgroup[ZG][col]' + + 'thead[ZF][tr]' + + 'tr[ZF|bgcolor][th|td]' + + 'th[E|ZE][#|Y]' + + 'form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]' + + 'noscript[E][#|Y]' + + 'td[E|ZE][#|Y]' + + 'tfoot[ZF][tr]' + + 'tbody[ZF][tr]' + + 'area[E|D|shape|coords|href|nohref|alt|target][]' + + 'base[id|href|target][]' + + 'body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]' + ); + } + + return html4; + }; + + /** + * WordPress Core + * + * Returns a schema that is the result of a deep merge between the HTML5 + * and HTML4 schemas. + */ + function getSaneSchema() { + var cachedMapCache = mapCache, + html5, html4; + + if ( mapCache.sane ) + return mapCache.sane; + + // Bust the mapCache so we're not dealing with the other schema objects. + mapCache = {}; + html5 = getHTML5(); + html4 = getHTML4(); + mapCache = cachedMapCache; + + each( html4, function( html4settings, tag ) { + var html5settings = html5[ tag ], + difference = []; + + // Merge tags missing in HTML5 mode. + if ( ! html5settings ) { + html5[ tag ] = html4settings; + return; + } + + // Merge attributes missing from this HTML5 tag. + each( html4settings.attributes, function( attribute, key ) { + if ( ! html5settings.attributes[ key ] ) + html5settings.attributes[ key ] = attribute; + }); + + // Merge any missing attributes into the attributes order. + each( html4settings.attributesOrder, function( key ) { + if ( -1 === tinymce.inArray( html5settings.attributesOrder, key ) ) + difference.push( key ); + }); + + html5settings.attributesOrder = html5settings.attributesOrder.concat( difference ); + + // Merge children missing from this HTML5 tag. + each( html4settings.children, function( child, key ) { + if ( ! html5settings.children[ key ] ) + html5settings.children[ key ] = child; + }); + }); + + return mapCache.sane = html5; + } + + /** + * Schema validator class. + * + * @class tinymce.html.Schema + * @example + * if (tinymce.activeEditor.schema.isValidChild('p', 'span')) + * alert('span is valid child of p.'); + * + * if (tinymce.activeEditor.schema.getElementRule('p')) + * alert('P is a valid element.'); + * + * @class tinymce.html.Schema + * @version 3.4 + */ + + /** + * Constructs a new Schema instance. + * + * @constructor + * @method Schema + * @param {Object} settings Name/value settings object. + */ + tinymce.html.Schema = function(settings) { + var self = this, elements = {}, children = {}, patternElements = [], validStyles, schemaItems; + var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, blockElementsMap, nonEmptyElementsMap, customElementsMap = {}; + + // Creates an lookup table map object for the specified option or the default value + function createLookupTable(option, default_value, extend) { + var value = settings[option]; + + if (!value) { + // Get cached default map or make it if needed + value = mapCache[option]; + + if (!value) { + value = makeMap(default_value, ' ', makeMap(default_value.toUpperCase(), ' ')); + value = tinymce.extend(value, extend); + + mapCache[option] = value; + } + } else { + // Create custom map + value = makeMap(value, ',', makeMap(value.toUpperCase(), ' ')); + } + + return value; + }; + + settings = settings || {}; + + /** + * WordPress core uses a sane schema in place of the default "HTML5" schema. + */ + schemaItems = settings.schema == "html5" ? getSaneSchema() : getHTML4(); + + // Allow all elements and attributes if verify_html is set to false + if (settings.verify_html === false) + settings.valid_elements = '*[*]'; + + // Build styles list + if (settings.valid_styles) { + validStyles = {}; + + // Convert styles into a rule list + each(settings.valid_styles, function(value, key) { + validStyles[key] = tinymce.explode(value); + }); + } + + // Setup map objects + whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea'); + selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr'); + shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link meta param embed source wbr'); + boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls'); + nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object', shortEndedElementsMap); + textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + + 'blockquote center dir fieldset header footer article section hgroup aside nav figure'); + blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + + 'th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup', textBlockElementsMap); + + // Converts a wildcard expression string to a regexp for example *a will become /.*a/. + function patternToRegExp(str) { + return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$'); + }; + + // Parses the specified valid_elements string and adds to the current rules + // This function is a bit hard to read since it's heavily optimized for speed + function addValidElements(valid_elements) { + var ei, el, ai, al, yl, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, + prefix, outputName, globalAttributes, globalAttributesOrder, transElement, key, childKey, value, + elementRuleRegExp = /^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/, + attrRuleRegExp = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/, + hasPatternsRegExp = /[*?+]/; + + if (valid_elements) { + // Split valid elements into an array with rules + valid_elements = split(valid_elements); + + if (elements['@']) { + globalAttributes = elements['@'].attributes; + globalAttributesOrder = elements['@'].attributesOrder; + } + + // Loop all rules + for (ei = 0, el = valid_elements.length; ei < el; ei++) { + // Parse element rule + matches = elementRuleRegExp.exec(valid_elements[ei]); + if (matches) { + // Setup local names for matches + prefix = matches[1]; + elementName = matches[2]; + outputName = matches[3]; + attrData = matches[4]; + + // Create new attributes and attributesOrder + attributes = {}; + attributesOrder = []; + + // Create the new element + element = { + attributes : attributes, + attributesOrder : attributesOrder + }; + + // Padd empty elements prefix + if (prefix === '#') + element.paddEmpty = true; + + // Remove empty elements prefix + if (prefix === '-') + element.removeEmpty = true; + + // Copy attributes from global rule into current rule + if (globalAttributes) { + for (key in globalAttributes) + attributes[key] = globalAttributes[key]; + + attributesOrder.push.apply(attributesOrder, globalAttributesOrder); + } + + // Attributes defined + if (attrData) { + attrData = split(attrData, '|'); + for (ai = 0, al = attrData.length; ai < al; ai++) { + matches = attrRuleRegExp.exec(attrData[ai]); + if (matches) { + attr = {}; + attrType = matches[1]; + attrName = matches[2].replace(/::/g, ':'); + prefix = matches[3]; + value = matches[4]; + + // Required + if (attrType === '!') { + element.attributesRequired = element.attributesRequired || []; + element.attributesRequired.push(attrName); + attr.required = true; + } + + // Denied from global + if (attrType === '-') { + delete attributes[attrName]; + attributesOrder.splice(tinymce.inArray(attributesOrder, attrName), 1); + continue; + } + + // Default value + if (prefix) { + // Default value + if (prefix === '=') { + element.attributesDefault = element.attributesDefault || []; + element.attributesDefault.push({name: attrName, value: value}); + attr.defaultValue = value; + } + + // Forced value + if (prefix === ':') { + element.attributesForced = element.attributesForced || []; + element.attributesForced.push({name: attrName, value: value}); + attr.forcedValue = value; + } + + // Required values + if (prefix === '<') + attr.validValues = makeMap(value, '?'); + } + + // Check for attribute patterns + if (hasPatternsRegExp.test(attrName)) { + element.attributePatterns = element.attributePatterns || []; + attr.pattern = patternToRegExp(attrName); + element.attributePatterns.push(attr); + } else { + // Add attribute to order list if it doesn't already exist + if (!attributes[attrName]) + attributesOrder.push(attrName); + + attributes[attrName] = attr; + } + } + } + } + + // Global rule, store away these for later usage + if (!globalAttributes && elementName == '@') { + globalAttributes = attributes; + globalAttributesOrder = attributesOrder; + } + + // Handle substitute elements such as b/strong + if (outputName) { + element.outputName = elementName; + elements[outputName] = element; + } + + // Add pattern or exact element + if (hasPatternsRegExp.test(elementName)) { + element.pattern = patternToRegExp(elementName); + patternElements.push(element); + } else + elements[elementName] = element; + } + } + } + }; + + function setValidElements(valid_elements) { + elements = {}; + patternElements = []; + + addValidElements(valid_elements); + + each(schemaItems, function(element, name) { + children[name] = element.children; + }); + }; + + // Adds custom non HTML elements to the schema + function addCustomElements(custom_elements) { + var customElementRegExp = /^(~)?(.+)$/; + + if (custom_elements) { + each(split(custom_elements), function(rule) { + var matches = customElementRegExp.exec(rule), + inline = matches[1] === '~', + cloneName = inline ? 'span' : 'div', + name = matches[2]; + + children[name] = children[cloneName]; + customElementsMap[name] = cloneName; + + // If it's not marked as inline then add it to valid block elements + if (!inline) { + blockElementsMap[name.toUpperCase()] = {}; + blockElementsMap[name] = {}; + } + + // Add elements clone if needed + if (!elements[name]) { + elements[name] = elements[cloneName]; + } + + // Add custom elements at span/div positions + each(children, function(element, child) { + if (element[cloneName]) + element[name] = element[cloneName]; + }); + }); + } + }; + + // Adds valid children to the schema object + function addValidChildren(valid_children) { + var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/; + + if (valid_children) { + each(split(valid_children), function(rule) { + var matches = childRuleRegExp.exec(rule), parent, prefix; + + if (matches) { + prefix = matches[1]; + + // Add/remove items from default + if (prefix) + parent = children[matches[2]]; + else + parent = children[matches[2]] = {'#comment' : {}}; + + parent = children[matches[2]]; + + each(split(matches[3], '|'), function(child) { + if (prefix === '-') + delete parent[child]; + else + parent[child] = {}; + }); + } + }); + } + }; + + function getElementRule(name) { + var element = elements[name], i; + + // Exact match found + if (element) + return element; + + // No exact match then try the patterns + i = patternElements.length; + while (i--) { + element = patternElements[i]; + + if (element.pattern.test(name)) + return element; + } + }; + + if (!settings.valid_elements) { + // No valid elements defined then clone the elements from the schema spec + each(schemaItems, function(element, name) { + elements[name] = { + attributes : element.attributes, + attributesOrder : element.attributesOrder + }; + + children[name] = element.children; + }); + + // Switch these on HTML4 + if (settings.schema != "html5") { + each(split('strong/b,em/i'), function(item) { + item = split(item, '/'); + elements[item[1]].outputName = item[0]; + }); + } + + // Add default alt attribute for images + elements.img.attributesDefault = [{name: 'alt', value: ''}]; + + // Remove these if they are empty by default + each(split('ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr'), function(name) { + if (elements[name]) { + elements[name].removeEmpty = true; + } + }); + + // Padd these by default + each(split('p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption'), function(name) { + elements[name].paddEmpty = true; + }); + } else + setValidElements(settings.valid_elements); + + addCustomElements(settings.custom_elements); + addValidChildren(settings.valid_children); + addValidElements(settings.extended_valid_elements); + + // Todo: Remove this when we fix list handling to be valid + addValidChildren('+ol[ul|ol],+ul[ul|ol]'); + + // Delete invalid elements + if (settings.invalid_elements) { + tinymce.each(tinymce.explode(settings.invalid_elements), function(item) { + if (elements[item]) + delete elements[item]; + }); + } + + // If the user didn't allow span only allow internal spans + if (!getElementRule('span')) + addValidElements('span[!data-mce-type|*]'); + + /** + * Name/value map object with valid parents and children to those parents. + * + * @example + * children = { + * div:{p:{}, h1:{}} + * }; + * @field children + * @type {Object} + */ + self.children = children; + + /** + * Name/value map object with valid styles for each element. + * + * @field styles + * @type {Object} + */ + self.styles = validStyles; + + /** + * Returns a map with boolean attributes. + * + * @method getBoolAttrs + * @return {Object} Name/value lookup map for boolean attributes. + */ + self.getBoolAttrs = function() { + return boolAttrMap; + }; + + /** + * Returns a map with block elements. + * + * @method getBlockElements + * @return {Object} Name/value lookup map for block elements. + */ + self.getBlockElements = function() { + return blockElementsMap; + }; + + /** + * Returns a map with text block elements. Such as: p,h1-h6,div,address + * + * @method getTextBlockElements + * @return {Object} Name/value lookup map for block elements. + */ + self.getTextBlockElements = function() { + return textBlockElementsMap; + }; + + /** + * Returns a map with short ended elements such as BR or IMG. + * + * @method getShortEndedElements + * @return {Object} Name/value lookup map for short ended elements. + */ + self.getShortEndedElements = function() { + return shortEndedElementsMap; + }; + + /** + * Returns a map with self closing tags such as
                26. . + * + * @method getSelfClosingElements + * @return {Object} Name/value lookup map for self closing tags elements. + */ + self.getSelfClosingElements = function() { + return selfClosingElementsMap; + }; + + /** + * Returns a map with elements that should be treated as contents regardless if it has text + * content in them or not such as TD, VIDEO or IMG. + * + * @method getNonEmptyElements + * @return {Object} Name/value lookup map for non empty elements. + */ + self.getNonEmptyElements = function() { + return nonEmptyElementsMap; + }; + + /** + * Returns a map with elements where white space is to be preserved like PRE or SCRIPT. + * + * @method getWhiteSpaceElements + * @return {Object} Name/value lookup map for white space elements. + */ + self.getWhiteSpaceElements = function() { + return whiteSpaceElementsMap; + }; + + /** + * Returns true/false if the specified element and it's child is valid or not + * according to the schema. + * + * @method isValidChild + * @param {String} name Element name to check for. + * @param {String} child Element child to verify. + * @return {Boolean} True/false if the element is a valid child of the specified parent. + */ + self.isValidChild = function(name, child) { + var parent = children[name]; + + return !!(parent && parent[child]); + }; + + /** + * Returns true/false if the specified element name and optional attribute is + * valid according to the schema. + * + * @method isValid + * @param {String} name Name of element to check. + * @param {String} attr Optional attribute name to check for. + * @return {Boolean} True/false if the element and attribute is valid. + */ + self.isValid = function(name, attr) { + var attrPatterns, i, rule = getElementRule(name); + + // Check if it's a valid element + if (rule) { + if (attr) { + // Check if attribute name exists + if (rule.attributes[attr]) { + return true; + } + + // Check if attribute matches a regexp pattern + attrPatterns = rule.attributePatterns; + if (attrPatterns) { + i = attrPatterns.length; + while (i--) { + if (attrPatterns[i].pattern.test(name)) { + return true; + } + } + } + } else { + return true; + } + } + + // No match + return false; + }; + + /** + * Returns true/false if the specified element is valid or not + * according to the schema. + * + * @method getElementRule + * @param {String} name Element name to check for. + * @return {Object} Element object or undefined if the element isn't valid. + */ + self.getElementRule = getElementRule; + + /** + * Returns an map object of all custom elements. + * + * @method getCustomElements + * @return {Object} Name/value map object of all custom elements. + */ + self.getCustomElements = function() { + return customElementsMap; + }; + + /** + * Parses a valid elements string and adds it to the schema. The valid elements format is for example "element[attr=default|otherattr]". + * Existing rules will be replaced with the ones specified, so this extends the schema. + * + * @method addValidElements + * @param {String} valid_elements String in the valid elements format to be parsed. + */ + self.addValidElements = addValidElements; + + /** + * Parses a valid elements string and sets it to the schema. The valid elements format is for example "element[attr=default|otherattr]". + * Existing rules will be replaced with the ones specified, so this extends the schema. + * + * @method setValidElements + * @param {String} valid_elements String in the valid elements format to be parsed. + */ + self.setValidElements = setValidElements; + + /** + * Adds custom non HTML elements to the schema. + * + * @method addCustomElements + * @param {String} custom_elements Comma separated list of custom elements to add. + */ + self.addCustomElements = addCustomElements; + + /** + * Parses a valid children string and adds them to the schema structure. The valid children format is for example: "element[child1|child2]". + * + * @method addValidChildren + * @param {String} valid_children Valid children elements string to parse + */ + self.addValidChildren = addValidChildren; + + self.elements = elements; + }; +})(tinymce); diff --git a/src/wp-includes/js/tinymce/wp-tinymce.js.gz b/src/wp-includes/js/tinymce/wp-tinymce.js.gz new file mode 100644 index 0000000..7409316 Binary files /dev/null and b/src/wp-includes/js/tinymce/wp-tinymce.js.gz differ diff --git a/src/wp-includes/js/tinymce/wp-tinymce.php b/src/wp-includes/js/tinymce/wp-tinymce.php new file mode 100644 index 0000000..83a003d --- /dev/null +++ b/src/wp-includes/js/tinymce/wp-tinymce.php @@ -0,0 +1,38 @@ +u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a in n)if(w.has(n,a)&&t.call(e,n[a],a,n)===r)return};w.map=w.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e[e.length]=t.call(r,n,u,i)}),e)};var O="Reduce of empty array with no initial value";w.reduce=w.foldl=w.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=w.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},w.reduceRight=w.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=w.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=w.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},w.find=w.detect=function(n,t,r){var e;return E(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},w.filter=w.select=function(n,t,r){var e=[];return null==n?e:d&&n.filter===d?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&(e[e.length]=n)}),e)},w.reject=function(n,t,r){return w.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},w.every=w.all=function(n,t,e){t||(t=w.identity);var u=!0;return null==n?u:g&&n.every===g?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var E=w.some=w.any=function(n,t,e){t||(t=w.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};w.contains=w.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:E(n,function(n){return n===t})},w.invoke=function(n,t){var r=o.call(arguments,2),e=w.isFunction(t);return w.map(n,function(n){return(e?t:n[t]).apply(n,r)})},w.pluck=function(n,t){return w.map(n,function(n){return n[t]})},w.where=function(n,t,r){return w.isEmpty(t)?r?null:[]:w[r?"find":"filter"](n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},w.findWhere=function(n,t){return w.where(n,t,!0)},w.max=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.max.apply(Math,n);if(!t&&w.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>=e.computed&&(e={value:n,computed:a})}),e.value},w.min=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.min.apply(Math,n);if(!t&&w.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;e.computed>a&&(e={value:n,computed:a})}),e.value},w.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=w.random(r++),e[r-1]=e[t],e[t]=n}),e};var k=function(n){return w.isFunction(n)?n:function(t){return t[n]}};w.sortBy=function(n,t,r){var e=k(t);return w.pluck(w.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.indexi;){var o=i+a>>>1;u>r.call(e,n[o])?i=o+1:a=o}return i},w.toArray=function(n){return n?w.isArray(n)?o.call(n):n.length===+n.length?w.map(n,w.identity):w.values(n):[]},w.size=function(n){return null==n?0:n.length===+n.length?n.length:w.keys(n).length},w.first=w.head=w.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},w.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},w.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},w.rest=w.tail=w.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},w.compact=function(n){return w.filter(n,w.identity)};var R=function(n,t,r){return A(n,function(n){w.isArray(n)?t?a.apply(r,n):R(n,t,r):r.push(n)}),r};w.flatten=function(n,t){return R(n,t,[])},w.without=function(n){return w.difference(n,o.call(arguments,1))},w.uniq=w.unique=function(n,t,r,e){w.isFunction(t)&&(e=r,r=t,t=!1);var u=r?w.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:w.contains(a,r))||(a.push(r),i.push(n[e]))}),i},w.union=function(){return w.uniq(c.apply(e,arguments))},w.intersection=function(n){var t=o.call(arguments,1);return w.filter(w.uniq(n),function(n){return w.every(t,function(t){return w.indexOf(t,n)>=0})})},w.difference=function(n){var t=c.apply(e,o.call(arguments,1));return w.filter(n,function(n){return!w.contains(t,n)})},w.zip=function(){for(var n=o.call(arguments),t=w.max(w.pluck(n,"length")),r=Array(t),e=0;t>e;e++)r[e]=w.pluck(n,""+e);return r},w.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},w.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=w.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},w.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},w.range=function(n,t,r){1>=arguments.length&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=Array(e);e>u;)i[u++]=n,n+=r;return i},w.bind=function(n,t){if(n.bind===j&&j)return j.apply(n,o.call(arguments,1));var r=o.call(arguments,2);return function(){return n.apply(t,r.concat(o.call(arguments)))}},w.partial=function(n){var t=o.call(arguments,1);return function(){return n.apply(this,t.concat(o.call(arguments)))}},w.bindAll=function(n){var t=o.call(arguments,1);return 0===t.length&&(t=w.functions(n)),A(t,function(t){n[t]=w.bind(n[t],n)}),n},w.memoize=function(n,t){var r={};return t||(t=w.identity),function(){var e=t.apply(this,arguments);return w.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},w.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},w.defer=function(n){return w.delay.apply(w,[n,1].concat(o.call(arguments,1)))},w.throttle=function(n,t){var r,e,u,i,a=0,o=function(){a=new Date,u=null,i=n.apply(r,e)};return function(){var c=new Date,l=t-(c-a);return r=this,e=arguments,0>=l?(clearTimeout(u),u=null,a=c,i=n.apply(r,e)):u||(u=setTimeout(o,l)),i}},w.debounce=function(n,t,r){var e,u;return function(){var i=this,a=arguments,o=function(){e=null,r||(u=n.apply(i,a))},c=r&&!e;return clearTimeout(e),e=setTimeout(o,t),c&&(u=n.apply(i,a)),u}},w.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},w.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},w.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},w.after=function(n,t){return 0>=n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},w.keys=_||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)w.has(n,r)&&(t[t.length]=r);return t},w.values=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push(n[r]);return t},w.pairs=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push([r,n[r]]);return t},w.invert=function(n){var t={};for(var r in n)w.has(n,r)&&(t[n[r]]=r);return t},w.functions=w.methods=function(n){var t=[];for(var r in n)w.isFunction(n[r])&&t.push(r);return t.sort()},w.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},w.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},w.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)w.contains(r,u)||(t[u]=n[u]);return t},w.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)null==n[r]&&(n[r]=t[r])}),n},w.clone=function(n){return w.isObject(n)?w.isArray(n)?n.slice():w.extend({},n):n},w.tap=function(n,t){return t(n),n};var I=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof w&&(n=n._wrapped),t instanceof w&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==t+"";case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;r.push(n),e.push(t);var a=0,o=!0;if("[object Array]"==u){if(a=n.length,o=a==t.length)for(;a--&&(o=I(n[a],t[a],r,e)););}else{var c=n.constructor,f=t.constructor;if(c!==f&&!(w.isFunction(c)&&c instanceof c&&w.isFunction(f)&&f instanceof f))return!1;for(var s in n)if(w.has(n,s)&&(a++,!(o=w.has(t,s)&&I(n[s],t[s],r,e))))break;if(o){for(s in t)if(w.has(t,s)&&!a--)break;o=!a}}return r.pop(),e.pop(),o};w.isEqual=function(n,t){return I(n,t,[],[])},w.isEmpty=function(n){if(null==n)return!0;if(w.isArray(n)||w.isString(n))return 0===n.length;for(var t in n)if(w.has(n,t))return!1;return!0},w.isElement=function(n){return!(!n||1!==n.nodeType)},w.isArray=x||function(n){return"[object Array]"==l.call(n)},w.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){w["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),w.isArguments(arguments)||(w.isArguments=function(n){return!(!n||!w.has(n,"callee"))}),"function"!=typeof/./&&(w.isFunction=function(n){return"function"==typeof n}),w.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},w.isNaN=function(n){return w.isNumber(n)&&n!=+n},w.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},w.isNull=function(n){return null===n},w.isUndefined=function(n){return n===void 0},w.has=function(n,t){return f.call(n,t)},w.noConflict=function(){return n._=t,this},w.identity=function(n){return n},w.times=function(n,t,r){for(var e=Array(n),u=0;n>u;u++)e[u]=t.call(r,u);return e},w.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))};var M={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};M.unescape=w.invert(M.escape);var S={escape:RegExp("["+w.keys(M.escape).join("")+"]","g"),unescape:RegExp("("+w.keys(M.unescape).join("|")+")","g")};w.each(["escape","unescape"],function(n){w[n]=function(t){return null==t?"":(""+t).replace(S[n],function(t){return M[n][t]})}}),w.result=function(n,t){if(null==n)return null;var r=n[t];return w.isFunction(r)?r.call(n):r},w.mixin=function(n){A(w.functions(n),function(t){var r=w[t]=n[t];w.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),D.call(this,r.apply(w,n))}})};var N=0;w.uniqueId=function(n){var t=++N+"";return n?n+t:t},w.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var T=/(.)^/,q={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},B=/\\|'|\r|\n|\t|\u2028|\u2029/g;w.template=function(n,t,r){var e;r=w.defaults({},r,w.templateSettings);var u=RegExp([(r.escape||T).source,(r.interpolate||T).source,(r.evaluate||T).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(B,function(n){return"\\"+q[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,w);var c=function(n){return e.call(this,n,w)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},w.chain=function(n){return w(n).chain()};var D=function(n){return this._chain?w(n).chain():n};w.mixin(w),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];w.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],D.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];w.prototype[n]=function(){return D.call(this,t.apply(this._wrapped,arguments))}}),w.extend(w.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this); \ No newline at end of file diff --git a/src/wp-includes/js/utils.js b/src/wp-includes/js/utils.js new file mode 100644 index 0000000..4b30bb0 --- /dev/null +++ b/src/wp-includes/js/utils.js @@ -0,0 +1,175 @@ +/* global userSettings */ +/* exported getUserSetting, setUserSetting, deleteUserSetting */ +// utility functions + +var wpCookies = { +// The following functions are from Cookie.js class in TinyMCE, Moxiecode, used under LGPL. + + each : function(obj, cb, scope) { + var n, l; + + if ( !obj ) + return 0; + + scope = scope || obj; + + if ( typeof(obj.length) != 'undefined' ) { + for ( n = 0, l = obj.length; n < l; n++ ) { + if ( cb.call(scope, obj[n], n, obj) === false ) + return 0; + } + } else { + for ( n in obj ) { + if ( obj.hasOwnProperty(n) ) { + if ( cb.call(scope, obj[n], n, obj) === false ) { + return 0; + } + } + } + } + return 1; + }, + + /** + * Get a multi-values cookie. + * Returns a JS object with the name: 'value' pairs. + */ + getHash : function(name) { + var all = this.get(name), ret; + + if ( all ) { + this.each( all.split('&'), function(pair) { + pair = pair.split('='); + ret = ret || {}; + ret[pair[0]] = pair[1]; + }); + } + return ret; + }, + + /** + * Set a multi-values cookie. + * + * 'values_obj' is the JS object that is stored. It is encoded as URI in wpCookies.set(). + */ + setHash : function(name, values_obj, expires, path, domain, secure) { + var str = ''; + + this.each(values_obj, function(val, key) { + str += (!str ? '' : '&') + key + '=' + val; + }); + + this.set(name, str, expires, path, domain, secure); + }, + + /** + * Get a cookie. + */ + get : function(name) { + var e, b, + cookie = document.cookie, + p = name + '='; + + if ( !cookie ) + return; + + b = cookie.indexOf('; ' + p); + + if ( b == -1 ) { + b = cookie.indexOf(p); + + if ( b !== 0 ) + return null; + + } else { + b += 2; + } + + e = cookie.indexOf( ';', b ); + + if ( e == -1 ) + e = cookie.length; + + return decodeURIComponent( cookie.substring(b + p.length, e) ); + }, + + /** + * Set a cookie. + * + * The 'expires' arg can be either a JS Date() object set to the expiration date (back-compat) + * or the number of seconds until expiration + */ + set : function(name, value, expires, path, domain, secure) { + var d = new Date(); + + if ( typeof(expires) == 'object' && expires.toGMTString ) { + expires = expires.toGMTString(); + } else if ( parseInt(expires, 10) ) { + d.setTime( d.getTime() + ( parseInt(expires, 10) * 1000 ) ); // time must be in miliseconds + expires = d.toGMTString(); + } else { + expires = ''; + } + + document.cookie = name + '=' + encodeURIComponent( value ) + + ( expires ? '; expires=' + expires : '' ) + + ( path ? '; path=' + path : '' ) + + ( domain ? '; domain=' + domain : '' ) + + ( secure ? '; secure' : '' ); + }, + + /** + * Remove a cookie. + * + * This is done by setting it to an empty value and setting the expiration time in the past. + */ + remove : function(name, path) { + this.set(name, '', -1000, path); + } +}; + +// Returns the value as string. Second arg or empty string is returned when value is not set. +function getUserSetting( name, def ) { + var obj = getAllUserSettings(); + + if ( obj.hasOwnProperty(name) ) + return obj[name]; + + if ( typeof def != 'undefined' ) + return def; + + return ''; +} + +// Both name and value must be only ASCII letters, numbers or underscore +// and the shorter, the better (cookies can store maximum 4KB). Not suitable to store text. +function setUserSetting( name, value, _del ) { + if ( 'object' !== typeof userSettings ) + return false; + + var cookie = 'wp-settings-' + userSettings.uid, all = wpCookies.getHash(cookie) || {}, path = userSettings.url, + n = name.toString().replace(/[^A-Za-z0-9_]/, ''), v = value.toString().replace(/[^A-Za-z0-9_]/, ''); + + if ( _del ) { + delete all[n]; + } else { + all[n] = v; + } + + wpCookies.setHash(cookie, all, 31536000, path); + wpCookies.set('wp-settings-time-'+userSettings.uid, userSettings.time, 31536000, path); + + return name; +} + +function deleteUserSetting( name ) { + return setUserSetting( name, '', 1 ); +} + +// Returns all settings as js object. +function getAllUserSettings() { + if ( 'object' !== typeof userSettings ) + return {}; + + return wpCookies.getHash('wp-settings-' + userSettings.uid) || {}; +} diff --git a/src/wp-includes/js/utils.min.js b/src/wp-includes/js/utils.min.js new file mode 100644 index 0000000..cdc637a --- /dev/null +++ b/src/wp-includes/js/utils.min.js @@ -0,0 +1 @@ +function getUserSetting(a,b){var c=getAllUserSettings();return c.hasOwnProperty(a)?c[a]:"undefined"!=typeof b?b:""}function setUserSetting(a,b,c){if("object"!=typeof userSettings)return!1;var d="wp-settings-"+userSettings.uid,e=wpCookies.getHash(d)||{},f=userSettings.url,g=a.toString().replace(/[^A-Za-z0-9_]/,""),h=b.toString().replace(/[^A-Za-z0-9_]/,"");return c?delete e[g]:e[g]=h,wpCookies.setHash(d,e,31536e3,f),wpCookies.set("wp-settings-time-"+userSettings.uid,userSettings.time,31536e3,f),a}function deleteUserSetting(a){return setUserSetting(a,"",1)}function getAllUserSettings(){return"object"!=typeof userSettings?{}:wpCookies.getHash("wp-settings-"+userSettings.uid)||{}}var wpCookies={each:function(a,b,c){var d,e;if(!a)return 0;if(c=c||a,"undefined"!=typeof a.length){for(d=0,e=a.length;e>d;d++)if(b.call(c,a[d],d,a)===!1)return 0}else for(d in a)if(a.hasOwnProperty(d)&&b.call(c,a[d],d,a)===!1)return 0;return 1},getHash:function(a){var b,c=this.get(a);return c&&this.each(c.split("&"),function(a){a=a.split("="),b=b||{},b[a[0]]=a[1]}),b},setHash:function(a,b,c,d,e,f){var g="";this.each(b,function(a,b){g+=(g?"&":"")+b+"="+a}),this.set(a,g,c,d,e,f)},get:function(a){var b,c,d=document.cookie,e=a+"=";if(d){if(c=d.indexOf("; "+e),-1==c){if(c=d.indexOf(e),0!==c)return null}else c+=2;return b=d.indexOf(";",c),-1==b&&(b=d.length),decodeURIComponent(d.substring(c+e.length,b))}},set:function(a,b,c,d,e,f){var g=new Date;"object"==typeof c&&c.toGMTString?c=c.toGMTString():parseInt(c,10)?(g.setTime(g.getTime()+1e3*parseInt(c,10)),c=g.toGMTString()):c="",document.cookie=a+"="+encodeURIComponent(b)+(c?"; expires="+c:"")+(d?"; path="+d:"")+(e?"; domain="+e:"")+(f?"; secure":"")},remove:function(a,b){this.set(a,"",-1e3,b)}}; \ No newline at end of file diff --git a/src/wp-includes/js/wp-ajax-response.js b/src/wp-includes/js/wp-ajax-response.js new file mode 100644 index 0000000..eb46267 --- /dev/null +++ b/src/wp-includes/js/wp-ajax-response.js @@ -0,0 +1,64 @@ +var wpAjax = jQuery.extend( { + unserialize: function( s ) { + var r = {}, q, pp, i, p; + if ( !s ) { return r; } + q = s.split('?'); if ( q[1] ) { s = q[1]; } + pp = s.split('&'); + for ( i in pp ) { + if ( jQuery.isFunction(pp.hasOwnProperty) && !pp.hasOwnProperty(i) ) { continue; } + p = pp[i].split('='); + r[p[0]] = p[1]; + } + return r; + }, + parseAjaxResponse: function( x, r, e ) { // 1 = good, 0 = strange (bad data?), -1 = you lack permission + var parsed = {}, re = jQuery('#' + r).html(''), err = ''; + + if ( x && typeof x == 'object' && x.getElementsByTagName('wp_ajax') ) { + parsed.responses = []; + parsed.errors = false; + jQuery('response', x).each( function() { + var th = jQuery(this), child = jQuery(this.firstChild), response; + response = { action: th.attr('action'), what: child.get(0).nodeName, id: child.attr('id'), oldId: child.attr('old_id'), position: child.attr('position') }; + response.data = jQuery( 'response_data', child ).text(); + response.supplemental = {}; + if ( !jQuery( 'supplemental', child ).children().each( function() { + response.supplemental[this.nodeName] = jQuery(this).text(); + } ).size() ) { response.supplemental = false; } + response.errors = []; + if ( !jQuery('wp_error', child).each( function() { + var code = jQuery(this).attr('code'), anError, errorData, formField; + anError = { code: code, message: this.firstChild.nodeValue, data: false }; + errorData = jQuery('wp_error_data[code="' + code + '"]', x); + if ( errorData ) { anError.data = errorData.get(); } + formField = jQuery( 'form-field', errorData ).text(); + if ( formField ) { code = formField; } + if ( e ) { wpAjax.invalidateForm( jQuery('#' + e + ' :input[name="' + code + '"]' ).parents('.form-field:first') ); } + err += '

                  ' + anError.message + '

                  '; + response.errors.push( anError ); + parsed.errors = true; + } ).size() ) { response.errors = false; } + parsed.responses.push( response ); + } ); + if ( err.length ) { re.html( '
                  ' + err + '
                  ' ); } + return parsed; + } + if ( isNaN(x) ) { return !re.html('

                  ' + x + '

                  '); } + x = parseInt(x,10); + if ( -1 == x ) { return !re.html('

                  ' + wpAjax.noPerm + '

                  '); } + else if ( 0 === x ) { return !re.html('

                  ' + wpAjax.broken + '

                  '); } + return true; + }, + invalidateForm: function ( selector ) { + return jQuery( selector ).addClass( 'form-invalid' ).find('input:visible').change( function() { jQuery(this).closest('.form-invalid').removeClass( 'form-invalid' ); } ); + }, + validateForm: function( selector ) { + selector = jQuery( selector ); + return !wpAjax.invalidateForm( selector.find('.form-required').filter( function() { return jQuery('input:visible', this).val() === ''; } ) ).size(); + } +}, wpAjax || { noPerm: 'You do not have permission to do that.', broken: 'An unidentified error has occurred.' } ); + +// Basic form validation +jQuery(document).ready( function($){ + $('form.validate').submit( function() { return wpAjax.validateForm( $(this) ); } ); +}); diff --git a/src/wp-includes/js/wp-ajax-response.min.js b/src/wp-includes/js/wp-ajax-response.min.js new file mode 100644 index 0000000..32da06b --- /dev/null +++ b/src/wp-includes/js/wp-ajax-response.min.js @@ -0,0 +1 @@ +var wpAjax=jQuery.extend({unserialize:function(a){var b,c,d,e,f={};if(!a)return f;b=a.split("?"),b[1]&&(a=b[1]),c=a.split("&");for(d in c)(!jQuery.isFunction(c.hasOwnProperty)||c.hasOwnProperty(d))&&(e=c[d].split("="),f[e[0]]=e[1]);return f},parseAjaxResponse:function(a,b,c){var d={},e=jQuery("#"+b).html(""),f="";return a&&"object"==typeof a&&a.getElementsByTagName("wp_ajax")?(d.responses=[],d.errors=!1,jQuery("response",a).each(function(){var b,e=jQuery(this),g=jQuery(this.firstChild);b={action:e.attr("action"),what:g.get(0).nodeName,id:g.attr("id"),oldId:g.attr("old_id"),position:g.attr("position")},b.data=jQuery("response_data",g).text(),b.supplemental={},jQuery("supplemental",g).children().each(function(){b.supplemental[this.nodeName]=jQuery(this).text()}).size()||(b.supplemental=!1),b.errors=[],jQuery("wp_error",g).each(function(){var e,g,h,i=jQuery(this).attr("code");e={code:i,message:this.firstChild.nodeValue,data:!1},g=jQuery('wp_error_data[code="'+i+'"]',a),g&&(e.data=g.get()),h=jQuery("form-field",g).text(),h&&(i=h),c&&wpAjax.invalidateForm(jQuery("#"+c+' :input[name="'+i+'"]').parents(".form-field:first")),f+="

                  "+e.message+"

                  ",b.errors.push(e),d.errors=!0}).size()||(b.errors=!1),d.responses.push(b)}),f.length&&e.html('
                  '+f+"
                  "),d):isNaN(a)?!e.html('

                  '+a+"

                  "):(a=parseInt(a,10),-1==a?!e.html('

                  '+wpAjax.noPerm+"

                  "):0===a?!e.html('

                  '+wpAjax.broken+"

                  "):!0)},invalidateForm:function(a){return jQuery(a).addClass("form-invalid").find("input:visible").change(function(){jQuery(this).closest(".form-invalid").removeClass("form-invalid")})},validateForm:function(a){return a=jQuery(a),!wpAjax.invalidateForm(a.find(".form-required").filter(function(){return""===jQuery("input:visible",this).val()})).size()}},wpAjax||{noPerm:"You do not have permission to do that.",broken:"An unidentified error has occurred."});jQuery(document).ready(function(a){a("form.validate").submit(function(){return wpAjax.validateForm(a(this))})}); \ No newline at end of file diff --git a/src/wp-includes/js/wp-auth-check.js b/src/wp-includes/js/wp-auth-check.js new file mode 100644 index 0000000..e58a27d --- /dev/null +++ b/src/wp-includes/js/wp-auth-check.js @@ -0,0 +1,112 @@ +/* global adminpage */ +// Interim login dialog +(function($){ + var wrap, next; + + function show() { + var parent = $('#wp-auth-check'), + form = $('#wp-auth-check-form'), + noframe = wrap.find('.wp-auth-fallback-expired'), + frame, loaded = false; + + if ( form.length ) { + // Add unload confirmation to counter (frame-busting) JS redirects + $(window).on( 'beforeunload.wp-auth-check', function(e) { + e.originalEvent.returnValue = window.authcheckL10n.beforeunload; + }); + + frame = $('